From ebdeac77470498b274b2252276f86795baeaf0a8 Mon Sep 17 00:00:00 2001 From: Oleh Omelchenko Date: Fri, 12 Jun 2026 23:13:37 +0300 Subject: [PATCH] Docs: park border-identity question and UX follow-ups for batched council --- docs/ux-second-pass.md | 51 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/docs/ux-second-pass.md b/docs/ux-second-pass.md index c3220bd..c6f7ffd 100644 --- a/docs/ux-second-pass.md +++ b/docs/ux-second-pass.md @@ -8,6 +8,57 @@ record the resolution into the contract (`docs/architecture/09`+`10` and the rel ## Open +- **Border weight as identity — boxed fields vs Carbon's quieter defaults** + (**priority: pick this up first, next session** — user-flagged 2026-06-12). + Carbon's own defaults use far fewer boxes than we do: fields are filled with a + bottom border only (`reference/carbon` → text-input `_text-input.scss`, + `border-block-end` only), secondary buttons are a gray _fill_, tertiary is the + only outlined button (`_button.scss` → `button-theme(transparent, +$button-tertiary, …)`), and tiles separate by layer steps with full borders + only behind an accessibility feature flag. Our fully-boxed fields/secondaries + are a recorded divergence (arch 09 §2 + §4) and the box-discipline rules now + contain the noise — the open question is whether to go further toward Carbon + (bottom-border-only fields, filled secondary) or keep the boxed look as + deliberate identity. An identity decision, not cleanup: it would repaint every + field in the app. Council seats: Carbon (canon above), NN/g (affordance of + boxed vs underlined inputs), a11y (3:1 non-text contrast for field boundaries + either way). + +- **Two visible "Export" buttons** (`App.tsx` header — workspace export; + `ChartExport.tsx` in the preview header — per-chart export). Same label, + different scope, both visible at once. Candidate fix: rename one ("Export + chart" / "Export workspace") or differentiate via grouping. + +- **"LATER" facet placeholders in Chart Builder shelves** + (`ChartBuilderModal.module.css` → `.facetSlot`/`.facetTag`). Internal roadmap + language shipped to users. Either hide the affordance until faceting works or + write user-facing copy. + +- **Default snippet names are timestamps** ("Snippet 2026-06-10 18:04:37") — the + library reads like a downloads folder next to builder-generated names ("Bar + chart of count by Ship Mode"). Candidate: derive a content-based name from the + spec (mark + encoded fields) when the user never renames. + +- **Fit-mode tab labels** ("Original / Width / Height / Full", `LivePreview.tsx`) + are terse for a first-time user; tooltips likely suffice. + +- **Donate is the most saturated element on screen** (header soft-accent wash) — + visually outranks Publish/Build Chart. Decide whether intentional. + +- **Left rail affordance** (`PaneToggleStrip.tsx`): three unlabeled glyphs + a + tall empty strip; pane toggles aren't discoverable without hovering. + +- **Pane toggle pressed state = hover state** (`PaneToggleStrip.module.css`). + The pressed chip is a `--layer-02` fill — the same fill the strip's IconButtons + use on hover — so hovering an off toggle looks identical to an on toggle at + rest. (The pressed chip's `--border-strong` border used to disambiguate; it was + dropped in the box-discipline pass.) Candidate cues: a filled/accent glyph, + an inset edge marker, or restoring a border for the on state only. + +- **Dataset detail schema density** (`DatasetsModal.tsx`): one field per row + makes a 25-column dataset a long scroll before the preview table; a denser + two-column field list would fit overview + schema + preview on one screen. + - **Chart theme picker placement & header crowding** (`LivePreview.tsx` — ChartThemeControl). The picker sits in the preview header because nesting a SelectControl inside the PreviewSettings popover is impossible today (one-open-popover registry: the select would