Enabled set
All copy is placeholder. Real strings come from the i18n layer. STORY-041.
role="listbox", no role="option": interactive controls
nested inside an option are unreachable for most screen reader users.
Default — nothing typed
Only the enabled values render. The full set is one search away and never on screen unasked.
3 currencies enabled
Enabled
-
EUR
Euro
-
USD
US Dollar
-
TRY
Turkish Lira
disabled switch and the reason in text —
“Always on”. Something must always be pickable. A greyed control with no
explanation is the failure mode design.md names.
A new workspace — exactly one enabled
There is no default shortlist, anywhere. This is the state every Organisation starts in, so it has to teach.
1 currency enabled
Your team can only choose from the currencies listed here. Search above to add the ones you work in — every currency in the world is available.
Enabled
-
EUR
Euro
Searching — the full set, in two groups
Already-enabled matches keep their switch. Everything else offers Add — a command, not a value.
3 currencies match “yen”
Enabled
-
CNY
Chinese Yuan
Not enabled
-
JPY
Japanese Yen
-
WST
Samoan Tala
Searching — no match
Never a blank pane. A list that empties without saying why reads as a broken screen.
No currencies match
No currency matches “qqq”. Try a code like JPY, or a name like Yen.
Disabling something in use
Permitted, warned, reversible. Nothing is deleted and nothing is rewritten.
Turn off US Dollar?
USD is on 12 transactions. They keep it — you just won’t be offered it on new ones. You can turn it back on at any time.
There is only ever one. A second
attempt at something already awaiting an answer must not open a second dialog — spamming the
switch stacked fifteen identical callouts, which is worse than the thing being warned about.
The repeat attempt shakes this one (--shake, replayed above on load) and moves
focus to Turn off. Focus, because a shake says nothing to a screen reader. Under
prefers-reduced-motion it pulses its border instead of moving — removing the
animation outright would leave the repeat attempt with no feedback at all.
Row error — the save failed
The only asynchronous step is persisting a change, so it is the only thing that can fail.
-
JPY
Japanese Yen
Couldn’t save that.
Timezones — the same component, the other instance
One component, two uses. Zones show their current offset; identity is always the IANA id.
3 timezones enabled
Enabled
-
Europe/Amsterdam
Amsterdam
-
Europe/Istanbul
Istanbul
-
Asia/Kolkata
Kolkata
i18n.md names. The offset is display only — it changes twice a year, so it is
never identity.
Long content
Real zone, real long compound. Nothing is truncated and the body never scrolls sideways.
-
Asia/Tokyo
Tokyo
-
America/Argentina/Rio_Gallegos
Comodoro Rivadavia
Tokyo left of Amsterdam and the list stopped reading as a
column — the currency set never shows this, because three-letter codes are all one width.
Wide, the identifier is one shared grid track
(subgrid) sized to the widest entry on screen, so short zones never
reserve room for a long one, and a long one wraps inside its own column instead of pushing
the list sideways. Narrow, it takes its own line above the name — a side
column at 375px wraps Europe/Amsterdam mid-word, and aligned-but-unreadable is
not the trade. Resize this page past 480px to see both.
The everyday picker — no new component
With one to five options this is a native <select>, which
design.md prefers anyway. Open both, in both themes — the popup is drawn by
the OS and color-scheme is the only thing that reaches it.
Only the workspace’s currencies are listed. An Owner can add more in Settings → Currencies.
This transaction already uses JPY, so it stays selectable here.