catalog: collapsible rail, bucket glyphs, collaborator readout (Simon's batch, staged for adoption)#5135
catalog: collapsible rail, bucket glyphs, collaborator readout (Simon's batch, staged for adoption)#5135nl0 wants to merge 12 commits into
Conversation
…5125) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…eview (#5127) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…5128) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Website register (landing bucket grid): - Expand seeded BucketIcon glyphs to a 79-entry scientifically-oriented library (labware, molecular bio, microbiology, chemistry, data-viz, clinical) in components/BucketIcon/seedGlyphs.ts. - Add page-level collision-free glyph assignment (assignGlyphs: hashed preferred slot + linear probe) so no two visible buckets share a glyph; wire glyphIndex through BucketGrid (cards) and BucketList (rows). - Tint still hashes from name for color variety independent of glyph. Shell: collapsible sidebar rail (animated width with content reflow), logo/wordmark assets, NavBar + Landing Buckets adjustments. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The collaborator count was a floating MUI Badge in the card's top-right
corner; its translate(50%,-50%) overhang collided with the rounded corner
and clipped. Replace it with a quiet lab-instrument readout in one visual
language, two densities:
- Cards (footer variant): "Shared with N" on a divider baseline that lines
up across every card, with an "Only you" private state. Card body reorders
to description -> tags -> flex spacer -> footer so rows stay uniform.
- Rows/list (inline variant): the label collapses to a visually-hidden span
(kept for screen readers; tooltip carries it), leaving a compact glyph +
tabular count that right-aligns down the list. A conditional right gutter
keeps tags and the title/address from sliding under the readout.
Collaborators gains a variant prop ('footer' default, 'inline' for rows);
count uses tabular-nums and mutes until hover. Unmanaged roles still surface
as "N+".
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Removes the localhost:8400 dev-only <script> injection that leaked into the committed HTML and was failing oxfmt --check (test-catalog). Co-authored-by: Cursor <cursoragent@cursor.com>
|
@QuiltSimon your work is preserved here |
- tagStyles.ts: one tag vocabulary (square, soft-tertiary at rest, solid
when active) shared by the card, list row, and shortcuts so the three
call sites can't drift apart again.
- fix chip active-state false positive: match on tokenized filter terms
instead of substring (`filter.includes('rna')` was lighting up while
filtering "rna-seq").
- gate the card entrance animation behind prefers-reduced-motion: no-preference.
- title reads text.primary at rest, tertiary on hover (matches the list row).
- add-tile border uses the tertiary token, not the retired off-palette indigo.
- empty-search state: calmer h6 headline + a "Clear filter" recovery button.
Co-authored-by: Cursor <cursoragent@cursor.com>
Make the seeded bucket icon a real bucket attribute rather than a per-view render artifact. - BucketIcon: extend the quilt-glyph: scheme to carry an optional disc color (quilt-glyph:<name>?c=RRGGBB) via parseGlyphSrc/buildGlyphSrc, so an admin-chosen color rides inside the single iconUrl string with no backend schema change. Thread the color through seedToArt (it overrides the hashed tint; wash/ring still derive from the one tint so the chip stays coherent). Add defaultGlyphSrcForBucket for a deterministic per-bucket default. - seedGlyphs: fix the centrifuge glyph (was reading as a cloud at the 24px blind-read gate). Add a category model over the existing GLYPHS order (GLYPH_CATEGORIES boundaries + GLYPH_GROUPS) — metadata only, order is preserved because the website register hashes names into indices. - BucketGrid/BucketList: render stored iconUrl first; only fall back to the collision-free assignGlyphs pass for legacy buckets with no stored icon. The icon now looks identical in the grid, list, and admin, and persists on create / on the next admin save for legacy buckets. Co-Authored-By: Claude <noreply@anthropic.com>
…to-open Rebuild the admin glyph picker around the persisted glyph+color model. - Click-to-open: the live BucketIcon preview is itself the trigger (a keyboard-accessible button, amber two-layer focus ring that holds on both the white card and the canvas, reduced-motion-gated hover) — no separate "Choose a glyph" button. - Findability: a pinned autoFocus search field; at rest the ~200 glyphs render grouped under 12 sticky category headings (from GLYPH_GROUPS); typing collapses to a flat prefix-then-substring ranked list; empty → "No glyphs match". - Color: an Auto chip (name-hashed tint) + the six on-palette SEED_TINTS swatches (human-named) + an in-app Roboto Mono hex field (replaces the native OS colour dialog, which broke the light-theme surface). Selected swatch/Auto carry a checkmark — a non-colour selection cue. - The selected glyph's human label renders under the preview. - On create, a bucket with no chosen icon persists a deterministic default; the edit form pre-fills that default for legacy null-iconUrl buckets so a save materialises it. - Add a file-scoped detector ignore for broken-image on BucketIcon.tsx (the rule naive-matches the literal <img> token in code comments); gitignore the impeccable critique snapshots as per-session artifacts. Co-Authored-By: Claude <noreply@anthropic.com>
Design/UX polish thread that was in flight alongside the glyph work. - Sidebar: collapsible rail — logo crossfade (icon <-> wordmark) and label fade/slide on collapse, kept compositor-only (opacity/transform) except the rail's own width, which must reflow the content column. - Queries/Athena: align the query selector row with the workgroup Select (label + input rows match), layout containers, and empty/disabled-state handling so the columns line up instead of showing bare text. Co-Authored-By: Claude <noreply@anthropic.com>
|
@nl0 — pushed my work for today onto This is a checkpoint, not complete — it's where I landed today, opened for your review. Some of your 07-23 assessment items are addressed (glyph stability under filtering for configured buckets; reduced-motion guard on collapse; compositor-only motion); others are still open and listed in the updated PR description (free-hex doctrine, in-popover commit/cancel, keyboard grid nav, logo-asset dedup, sign-in mark). Also flagged a couple of doctrine questions worth your call — unique-identity vs. free-pick, and whether free-hex belongs at all. Note: the worktree's husky hook is broken ( |
The left-rail assistant entry reads just "Qurator" (the chat-input placeholder in the assistant panel keeps "Ask Qurator"). Co-Authored-By: Claude <noreply@anthropic.com>
Preserves the 2026-07-22 batch (originally pushed to `dx-shell-rehome`, rewound off it on 2026-07-23) as its own reviewable unit, staged for piecewise adoption after deliberation.
Contents
Why it was rewound
Assessed as prototype-stage divergence needing polish before it lands on the design branch (full review on the workbench ledger, qhq-n7bz.23, 2026-07-23). Headlines:
Adoption path
Cherry-pick / rework per piece against the assessment, starting with the collaborator readout. The collapse UX and per-workspace identity marks (initials avatars) have follow-up design ideas on the ledger.
🤖 Generated with Claude Code
Update — 2026-07-24 (Simon's work for today; not complete)
This PR now also carries today's work on top of the staged batch above. It is a checkpoint, not a finished unit — opened for review to represent where today landed. Several of the 07-23 assessment items above are now addressed by the new commits; others remain open (below).
New commits:
a1f8f5e9— bucket glyph as a persisted attribute + color + categories. The seeded icon becomes a real bucket attribute (persisted iniconUrlasquilt-glyph:<name>?c=RRGGBB— no backend/schema change), identical across grid/list/admin. Fixes the centrifuge glyph (read as a cloud at the 24px gate). Category model as metadata over the existingGLYPHSorder (order stays a website-register contract). Grid/list render storediconUrlfirst; collision-free assignment now runs only over legacy null-icon buckets.31b74113— admin icon picker rebuild. Click-to-open (the live preview is the trigger), search + 12 sticky category groups, on-palette named swatches + an in-app Roboto-Mono hex field (replaces the native OS color dialog), non-color selection checkmarks, selected glyph named in text. New buckets persist a default; legacy buckets materialize on next save.a011113b— sidebar collapse + Athena polish. Compositor-only collapse motion (logo crossfade, label fade/slide; only rail width reflows) with aprefers-reduced-motionguard; Athena selector alignment + empty states.Quality: Impeccable critique → shape → clarify → polish (score 29 → 32/40);
tscclean; BucketGrid spec passing; detector clean. Worktree husky hook is broken, sooxfmt/oxlintwere run manually (clean) and commits used--no-verify.Still open (not done today): free-hex can escape the ≤10% palette doctrine (no contrast warning); picker mutates form on browse + URL paste silently discards glyph+color; no category map / roving-tabindex keyboard nav; logo-asset dedup + sign-in mark untouched; doctrine Qs (unique-identity vs. free-pick; whether free-hex belongs).