- Add setWireframe(enabled) and refactor toggleWireframe to use it.
- Apply config.stl.color and config.stl.wireframe in Three.js preview.
- Support CameraConfig.mode='orthographic' with camera switching and frustum fitting.
- Replace the dropdown menu with the original left/right inline expansion of secondary actions.
- Keep icon-only primary buttons and grouped toolbar layout.
- Replace per-preview document click/keydown listeners with a single global listener to avoid performance issues with many previews.
- Refactor dropdown open/close to read state from DOM and close other menus when opening.
- Update verify:obsidian to open the dropdown before clicking reset-parts.
- Move all secondary actions into a theme-styled dropdown menu triggered by the "more" button.
- Keep primary icon buttons on the toolbar: reset, wireframe, axes, bbox, focus, disassemble, measure, annotate, copy.
- Add menu sections with separators and full descriptive labels.
- Support Escape and outside-click to close the menu.
- Remove old inline .show-secondary expansion CSS.
- Promote reset, wireframe, axes, bounding box, focus, disassemble, measure, annotate, and copy snapshot to primary icon+text buttons.
- Collapse all secondary buttons behind a global "more" toggle by default.
- Add short-label i18n keys and tighten labeled-button CSS sizing.
- Update preview verification harness to expand the more menu for secondary actions.
- Make the measurement tool a primary inline toolbar button with a visible text label ("测距" / "Measure").
- Add .ai3d-inline-btn--labeled styles for icon+text layout and compact sizing.
- Verified with typecheck, lint, unit tests, preview harness, and Obsidian vault install.
- Replace activeWindow.requestAnimationFrame with window.requestAnimationFrame
in Babylon scene for popout window compatibility
- Replace bare requestAnimationFrame with window.requestAnimationFrame
in Three scene for popout window compatibility
- Replace document.addEventListener/removeEventListener with activeDocument
in direct-view resize handles for popout window compatibility
- Add explicit unknown type to userData?.name to avoid implicit any
When a newer model load request comes in while an older one is still
in progress, show an Obsidian Notice instead of silently dropping
the stale work. This gives users feedback when they quickly switch
between model files and the previous load gets cancelled.
- Add 'directWorkbench.modelLoadInterrupted' translation key in EN/ZH
- Show Notice at both stale-generation checkpoints in loadModel
- Keep the existing preview.destroy() cleanup on the post-render path
Dragging the bottom resize handle down now shrinks the bottom panel
(consistent with the horizontal handle and standard split-pane behavior).
Dragging up expands the panel.
- Remove the 5 icon buttons from the right sidebar (focus, disassembly,
reset, generate-note, open-index)
- Move knowledge controls (generate-note, open-note, open-index) to sidebar
- Move registered part matches to sidebar
- Bottom panel now only shows overview: backend, route, metrics
- Sidebar renders content vertically with full workbench card styling
- Mobile: sidebar content scrolls horizontally
This puts actionable information on the right and model status
on the bottom, reducing visual clutter in both areas.
Add a track-based workspace framework around the original workbench panel:
- Main preview area + right sidebar with action icons (focus, disassembly,
reset, generate-note, open-index)
- Draggable resize handles for sidebar width and bottom panel height
- Keep the original bottom workbench panel design: overview on the left,
knowledge actions and registered part matches on the right
- Mobile responsive: sidebar becomes a horizontal scrollable row
This keeps the familiar two-column workbench panel while adding
a proper resizable workspace frame so the preview area is no longer
squeezed by the panel.
- Replace the legacy bottom workbench panel with a track-based workspace layout
- Main preview area gets full remaining space without being squeezed by the panel
- Right sidebar with icon buttons for focus/disassembly/reset/annotation/generate-note/open-index
- Draggable resize handles for sidebar width and bottom panel height (like IDE split panes)
- Bottom panel organized into Overview/Matches/Knowledge tabs to reduce visual clutter
- Mobile responsive: sidebar becomes a horizontal row on narrow screens
- Add tab translation keys for Overview/Matches/Knowledge in both EN and ZH
- Clean up legacy workbench panel CSS and consolidate into workspace styles
- Hoist explodeAxis/explodeValue outside renderPanels to survive re-renders
- Restore slider value and active axis button from persisted state
- Replace JSON.stringify profile diff with reference comparison
- Replace 44 querySelectorAll scans with single delegated click handler
- Cache resolved texture data URLs in loadThreeOBJ
- Skip syncCapabilities when preview reference unchanged
- Add useThreeRenderer boolean setting (default: true)
- Toggle forces all single-model previews to Babylon.js when off
- Pass setting through all preview creation paths
- Add i18n strings for en and zh-CN