Skip to content

feat(gallery): browse controls and interaction feel - #303

Merged
TMHSDigital merged 3 commits into
mainfrom
feat/gallery-browse-controls
Sep 27, 2026
Merged

TMHSDigital merged 3 commits into
mainfrom
feat/gallery-browse-controls

Conversation

@TMHSDigital

Copy link
Copy Markdown
Owner

Summary

PR 2 of 3 in the website QoL pass. Supersedes #301, which GitHub closed when its base branch (#300) was deleted on merge. #300 has since landed on main; main was merged into this branch (resolved tree byte-identical to the original commit; regenerated docs/gallery shows no drift).

  • Kind switch: All / Examples / Showcase (#k=). The showcase chip leaves the topic row; legacy #tag=showcase (used by the landing page) resolves to the Showcase switch.
  • Multi-tag: chips toggle and combine with AND (#tag=a,b); unknown tags are dropped; the mobile Tags toggle names every active tag; a deep-linked chip is scrolled into view in the strip.
  • Sort: Gallery order / Name A–Z (#s=az), reordering DOM nodes from the original order.
  • Feel: hash write on search debounced 250 ms; card renders fade in once decoded (already-complete images are marked immediately so nothing stays hidden; no-JS unaffected, gated on html.js); a restrained hover zoom that reduced-motion disables (replaces a dead .card:hover{transform:none} rule); focus rings inset on segmented controls so overflow:hidden no longer clips them; README prose capped at 75ch; a tighter sticky bar under 560px (search on its own row; count visually hidden but still a live region).
  • examples/gallery.json description updated: showcase is found via the switch, not a tag.

Evidence

Proven by live run (local server, Playwright/Chromium):

  • #tag=showcase → Showcase active, 36 of 88 shown, all data-kind=showcase, no showcase chip.
  • mesh → 54, + export → 36; independently computed AND count = 36; hash #tag=mesh,export; toggle "Tags: mesh + export".
  • A–Z sort: DOM order equals sorted names; back to default restores the first card.
  • Search: hash unchanged immediately after input, q=gear present after 400 ms.
  • Fresh load #k=examples&tag=mesh,bogus&s=az → 18 cards, all examples, first attribute-domain-shear, bogus dropped.
  • 375px: no horizontal overflow (scrollWidth 360), sticky controls 116px tall.
  • Build deterministic; docs/gallery regenerated.

By inspection only: the reduced-motion and no-JS CSS paths.

🤖 Generated with Claude Code

TMHSDigital and others added 3 commits September 27, 2026 09:19
Detail pages were dead ends: a reader who finished one example had to go
back to the grid to find the next. They now page within their own kind
(prev/next, arrow keys), list their tags as links back to the filtered
index, and end with three related entries chosen by shared topic tags.

Source listings gain a line-number gutter and collapse past 120 lines;
every code block gets a copy button with a non-secure-context fallback
and a visible failure state; README headings get stable anchors.

Card images carry intrinsic dimensions so the grid no longer shifts as
they load, and the lightbox only closes on backdrop, button or Esc --
clicking the image toggles native size instead.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
Signed-off-by: TMHSDigital <[email protected]>
Showcase pieces were reachable only through a "showcase" topic chip, one
tag could be active at a time, and the grid had one fixed order. The
index now has an All / Examples / Showcase switch, AND-combined topic
chips, and a Gallery order / Name A-Z sort, all mirrored in the URL hash
(k=, tag=a,b, s=). Legacy #tag=showcase links, the landing page's among
them, resolve to the Showcase switch so no inbound link breaks.

Search no longer rewrites the hash on every keystroke, card renders fade
in once decoded, hover gets a restrained zoom that reduced-motion turns
off (replacing a rule that disabled a transform nobody set), focus rings
sit inside segmented controls instead of being clipped, README prose is
capped at a readable measure, and the sticky bar packs tighter on phones.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
Signed-off-by: TMHSDigital <[email protected]>
…ontrols

Signed-off-by: TMHSDigital <[email protected]>

# Conflicts:
#	docs/gallery/anvil/index.html
#	docs/gallery/apothecary-shelf/index.html
#	docs/gallery/armature-bend/index.html
#	docs/gallery/attribute-domain-shear/index.html
#	docs/gallery/bake-normal-high-to-low/index.html
#	docs/gallery/bmesh-gear/index.html
#	docs/gallery/book-trolley/index.html
#	docs/gallery/bookshelf/index.html
#	docs/gallery/brazier/index.html
#	docs/gallery/butter-churn/index.html
#	docs/gallery/campfire/index.html
#	docs/gallery/car-mirror-symmetry/index.html
#	docs/gallery/cart/index.html
#	docs/gallery/chopping-block/index.html
#	docs/gallery/collision-hull-proxy/index.html
#	docs/gallery/color-attribute-wheel/index.html
#	docs/gallery/compositor-glare/index.html
#	docs/gallery/crate-stack/index.html
#	docs/gallery/cross-version-property-delete/index.html
#	docs/gallery/curve-bevel-arc/index.html
#	docs/gallery/custom-normals-shade/index.html
#	docs/gallery/damped-track-aim/index.html
#	docs/gallery/degenerate-bevel-weld/index.html
#	docs/gallery/depsgraph-export/index.html
#	docs/gallery/driver-wave/index.html
#	docs/gallery/export-preset-axis/index.html
#	docs/gallery/fence-kit/index.html
#	docs/gallery/gltf-export-roundtrip/index.html
#	docs/gallery/gltf-skin-roundtrip/index.html
#	docs/gallery/gn-instance-grid/index.html
#	docs/gallery/gn-modifier-inputs/index.html
#	docs/gallery/gn-sdf-remesh/index.html
#	docs/gallery/gn-sim-fountain/index.html
#	docs/gallery/gn-socket-rename/index.html
#	docs/gallery/gn-zone-iterate/index.html
#	docs/gallery/gp-lineart-contour/index.html
#	docs/gallery/grain-sacks/index.html
#	docs/gallery/grease-pencil-rosette/index.html
#	docs/gallery/grindstone/index.html
#	docs/gallery/hand-pump/index.html
#	docs/gallery/hay-bale/index.html
#	docs/gallery/hitching-post/index.html
#	docs/gallery/image-pixels-testcard/index.html
#	docs/gallery/index.html
#	docs/gallery/iron-cauldron/index.html
#	docs/gallery/light-link-studio/index.html
#	docs/gallery/lightmap-uv-channel/index.html
#	docs/gallery/lod-decimate-chain/index.html
#	docs/gallery/market-stall/index.html
#	docs/gallery/mesh-hygiene-audit/index.html
#	docs/gallery/modular-kit-snap/index.html
#	docs/gallery/parent-inverse-orrery/index.html
#	docs/gallery/park-bench/index.html
#	docs/gallery/png-exr-alpha/index.html
#	docs/gallery/prop-origin-transform/index.html
#	docs/gallery/rope-bridge/index.html
#	docs/gallery/shader-node-group/index.html
#	docs/gallery/shape-key-blend/index.html
#	docs/gallery/shipping-crate/index.html
#	docs/gallery/signpost/index.html
#	docs/gallery/sky-texture-sun-elevation/index.html
#	docs/gallery/soccer-ball-goldberg/index.html
#	docs/gallery/socket-attach-points/index.html
#	docs/gallery/stone-archway/index.html
#	docs/gallery/stone-well/index.html
#	docs/gallery/street-lantern/index.html
#	docs/gallery/swatch-grid/index.html
#	docs/gallery/tavern-stool/index.html
#	docs/gallery/temp-override-join/index.html
#	docs/gallery/terrain-scatter/index.html
#	docs/gallery/text-version-stamp/index.html
#	docs/gallery/treasure-chest/index.html
#	docs/gallery/triangulate-tangents/index.html
#	docs/gallery/turntable/index.html
#	docs/gallery/usd-export-evaluation-mode/index.html
#	docs/gallery/uv-layer-grid/index.html
#	docs/gallery/vertex-color-ao/index.html
#	docs/gallery/vertex-weight-limit/index.html
#	docs/gallery/vse-cut-list/index.html
#	docs/gallery/vse-gamma-cross/index.html
#	docs/gallery/wall-torch/index.html
#	docs/gallery/watchtower/index.html
#	docs/gallery/water-trough/index.html
#	docs/gallery/wave-displace/index.html
#	docs/gallery/wheelbarrow/index.html
#	docs/gallery/wooden-barrel/index.html
#	docs/gallery/wooden-bucket/index.html
#	docs/gallery/wooden-ladder/index.html
#	docs/gallery/wooden-yoke/index.html
#	scripts/build_gallery.py
@github-actions github-actions Bot added the examples Runnable smoke-gated examples under examples/ label Sep 27, 2026
@github-actions github-actions Bot added the documentation Improvements or additions to documentation label Sep 27, 2026
@TMHSDigital
TMHSDigital merged commit 600e129 into main Sep 27, 2026
11 checks passed
@TMHSDigital
TMHSDigital deleted the feat/gallery-browse-controls branch September 27, 2026 13:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation examples Runnable smoke-gated examples under examples/

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant