Skip to content

feat: interactive 3D assembly viewer for quiver docs - #174

Open
thomasgarrison wants to merge 5 commits into
stagingfrom
thomasg/quiver-3d-viewer
Open

feat: interactive 3D assembly viewer for quiver docs#174
thomasgarrison wants to merge 5 commits into
stagingfrom
thomasg/quiver-3d-viewer

Conversation

@thomasgarrison

@thomasgarrison thomasgarrison commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

Companion to Arrow-air/project-quiver#225 (which adds the GLB models + the docs/3D-Model.mdx page that uses this component). The page renders the fallback until that PR merges and the models flow through the docs import.

What & why

  • QuiverModelViewer (src/components/QuiverModelViewer/): react-three-fiber viewer for the per-subassembly Draco GLBs exported by project-quiver. BOM checkbox tree (tri-state categories, show/hide all, collapsible to give the canvas the full card), orbit/zoom controls, cursor-following hover tooltip with part names. Wrapped in BrowserOnly + React.lazy so SSR stays clean.
  • Registered in MDXComponents.tsx so imported quiver MDX pages can use it directly.
  • Pages embedding the viewer lift the docs content-width caps via a stable .quiver-model-viewer hook in custom.css (exception placed next to the 75%-column rule it overrides); all other pages keep the 860 px prose width — verified.
  • *.glb added to the import script's watch-mode fingerprint.
  • New deps: three, @react-three/fiber, @react-three/drei (+ types). Draco decoder comes from the gstatic CDN via drei's default.

Verification (production build, headless Chromium)

  • Sidebar tree renders all 13 subassemblies; toggling hides the right geometry; tri-state parents correct
  • Hover tooltip follows the cursor and is legible in both color modes (fixed: --ifm-background-color is transparent in light mode, which made the first version's chip text invisible)
  • Canvas 912 px wide at a 1600 px window with tree open (~1120 px collapsed), other docs pages unaffected
  • No failed GLB/manifest/decoder requests; the pre-existing site-wide hydration warning (#418) appears on all quiver pages and is unrelated

🤖 Generated with Claude Code

@thomasgarrison
thomasgarrison requested a review from a team as a code owner June 11, 2026 02:43
@cla-bot cla-bot Bot added the cla-signed label Jun 11, 2026
@thomasgarrison

Copy link
Copy Markdown
Contributor Author

Note for reviewers: the Spelling Check failure on the first CI run was pre-existing breakage on staging, not from this PR. The June 7 Terraform sync (87c9ff8, pushed with a skip-ci marker) overwrote .cspell.config.yaml with the template version, deleting the repo-specific ignorePaths (static, package-lock.json, docs/project-quiver, …). No CI ran on staging since, so it looked green while actually broken — the same thing happened in project-quiver (see Arrow-air/project-quiver#224).

This branch reverts the clobber to get CI green, but the lasting fix belongs in Arrow-air/tf-github: either templatize per-repo cspell ignores or exclude .cspell.config.yaml from provisioning. Until then, every Terraform sync will re-break both repos' spelling checks.

🤖 Generated with Claude Code

thomasgarrison and others added 5 commits August 1, 2026 19:23
QuiverModelViewer renders the per-subassembly Draco GLBs exported by
project-quiver (docs/3D-Model/models/, mirrored to static by the
import script) in a react-three-fiber canvas with a BOM checkbox
tree, hover part identification, and orbit controls. Registered
globally in MDXComponents for use from imported quiver MDX pages.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Hover identification now follows the cursor with a stronger highlight
(the corner chip was easy to miss), dedup suffixes are stripped from
part names, the parts tree can collapse to give the canvas the whole
card, and pages embedding the viewer lift the docs content-width caps
via a stable .quiver-model-viewer hook (other pages keep the 860px
prose width).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
--ifm-background-color resolves to `transparent` in light mode, so
the chip rendered white-on-nothing. Use explicit colors instead.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ords

The June 7 terraform sync (87c9ff8, pushed with a skip-ci marker)
removed the repo-specific cspell ignorePaths (static, package-lock,
imported quiver docs), silently breaking the spelling check on
staging; this PR's CI run was the first to surface it. Reverted, and
added the 3D viewer vocabulary to the project word list.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Quiver part labels are now normalized to BOM-numbered STEP filename
stems (e.g. 1111_upper_plate), so the tooltip prettifier needs to
replace underscores too.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@thomasgarrison
thomasgarrison force-pushed the thomasg/quiver-3d-viewer branch from d32fa21 to 03d6a85 Compare August 2, 2026 00:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant