feat(gallery): browse controls and interaction feel - #303
Merged
Merged
Conversation
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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;mainwas merged into this branch (resolved tree byte-identical to the original commit; regenerateddocs/galleryshows no drift).#k=). Theshowcasechip leaves the topic row; legacy#tag=showcase(used by the landing page) resolves to the Showcase switch.#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.#s=az), reordering DOM nodes from the original order.html.js); a restrained hover zoom that reduced-motion disables (replaces a dead.card:hover{transform:none}rule); focus rings inset on segmented controls sooverflow:hiddenno 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.jsondescription 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, alldata-kind=showcase, no showcase chip.#tag=mesh,export; toggle "Tags: mesh + export".q=gearpresent after 400 ms.#k=examples&tag=mesh,bogus&s=az→ 18 cards, all examples, firstattribute-domain-shear,bogusdropped.scrollWidth360), sticky controls 116px tall.docs/galleryregenerated.By inspection only: the reduced-motion and no-JS CSS paths.
🤖 Generated with Claude Code