10 KiB
| title | type | audience | authority | status | generated |
|---|---|---|---|---|---|
| Canonical vocabularies (generated) | canon | human + agent | canonical — the closed sets, generated from the code consts | current | npm run docs:vocabularies (do NOT edit by hand) |
Canonical vocabularies
Generated from the code — do not edit. Run
npm run docs:vocabulariesto regenerate;npm run docs:checkfails if this file drifts from the consts. This is the ONE place the closed sets are spelled out (the reason every other doc links here instead of copying a list that would go stale). When building a component you draw part archetypes, event families/verbs, intents and holds from exactly these sets (STUMBLES #1).
Part archetypes (26)
The cross-component classification a part may declare
(ARCHETYPE_VOCABULARY, src/uix/morfo/types.ts). Omit it for a plain
display part that pulls no shared styling.
| Archetype | Role |
|---|---|
provider |
root context provider |
trigger |
activates an action or opens an overlay (button-like) |
field-trigger |
a field/input/select/combo trigger — NOT a button; owns the flush field-control treatment, never the generic button/popover chrome |
content |
primary content panel of an overlay or section |
overlay |
modal/dim backdrop behind content |
viewport |
scrollable / focusable container |
item |
list / tree / menu item |
option |
selectable option in a select-like list |
indicator |
visual progress / decorative state |
thumb |
draggable handle (slider, scroll, switch) |
track |
background of slider / scroll / progress |
label |
text label associated with a control |
title |
overlay or section title |
description |
secondary descriptive text |
close |
dismiss / close button |
action |
call-to-action button |
header |
section header (often above content) |
footer |
section footer (often below content) |
image |
<img>-based content |
fallback |
shown when primary content unavailable |
arrow |
pointer arrow (tooltip / popover) |
separator |
visual divider |
group |
grouping container for related items |
input |
form input element |
segment |
discrete sub-input (pin-input segment, OTP digit) |
preview |
file / link / data preview |
Sema families (8) — default hold + persistence
Each event declares a semantic.family; the default perceptual hold and
persistence come from SEMA_HOLDS_BY_INTENT (src/uix/sema/holds.ts),
overridable per event. Named holds map to SEMA_DURATIONS.
| Family | Default hold | Persistence | Per-intent overrides |
|---|---|---|---|
contact |
120ms (glimpse) |
transient | — |
emerge |
240ms (brief) |
transient | — |
shift |
600ms (noticed) |
transient | — |
commit |
240ms (brief) |
transient | fulfill: 400ms/transient |
signal |
240ms (brief) |
transient | risk: 240ms/untilFix; threat: 240ms/untilAction; loss: 240ms/transient |
handle |
240ms (brief) |
transient | — |
sustain |
600ms (noticed) |
stateBound | — |
delegate |
600ms (noticed) |
transient | — |
Sema verbs, by family
The canonical verb set an event may use for each family (SEMA_VERBS,
src/uix/sema/verbs.ts). A family.verb pairing outside this is drift.
| Family | Verbs |
|---|---|
contact |
press · tap · activate · focus · trigger · release |
commit |
select · unselect · toggle · save · submit · confirm · complete · fail · cancel · reset · discard · delete · restore · expire · acknowledge · apply · partial · block · move · set · remove · reorder · upload |
signal |
announce · notify · warn · alert · inform · emphasize · remind |
handle |
pick · carry · drop · drag · resize · reorder · rotate · scroll · zoom |
emerge |
present · dismiss · open · close · expand · collapse · reveal · hide |
shift |
enter-mode · exit-mode · navigate · route · step · return · context |
sustain |
start · progress · loading · waiting · syncing · processing · streaming · pending · retrying · upload · end |
delegate |
offer · plan · authorize · act · review · escalate · return |
Sounds (16)
THE catalogue (SOUNDS, src/uix/sema/sound-names.ts). A component names
one of these and writes nothing else: the type of a pack rule accepts a name
or SILENT, and nothing more. Whether a name resolves to a synthesised
recipe or to a .wav is decided here, never at the component.
A name is applied over the family base and BEFORE the intent deltas, so the evaluative profile always survives it — which is what makes the old D.7 / S-07 class of defect impossible rather than merely forbidden.
Silence is not a name: it is SILENT, one canonical value for the whole
system ($uix/sema). Declared on a channel slice, the resolver honours it by
dropping that channel.
touch · step · tick · open · close · slide · alert · air · settle · snap · tick.fulfill · tick.risk · tick.threat · tick.loss · alert.risk · alert.threat
Intents (6)
The evaluative axis (INTENTS, src/uix/intent.ts). commit and signal
require one; the intent policy per family is SEMA_FAMILY_POLICY.
neutral · affirm · fulfill · risk · threat · loss
Directions (2)
The sense of a traversal (SEMA_DIRECTIONS, src/uix/sema/types.ts),
projected as data-event-direction. Per emission like the intent, and
unlike it undeclarable on the EVENT: one shift-navigate is the previous
month and the next one is the following month, so only the caller knows
(TriggerOptions.direction). Optional — most occurrences have no sense to
declare, and an invented one is worse than none.
A SENSE, never an axis: eidos maps forward onto the inline end and
backward onto the inline start, so RTL flips through :dir(rtl) and
nothing upstream knows about it. Distinct from SoundContour
(ascending / descending, src/uix/sema/sounds.ts), which shapes a pitch,
and from Morfo.direction, which names the parts that carry the dir stamp
(the RTL contract — see docs/canon/direction-contract.md).
forward · backward
Hold / perceptual durations
The named perceptual scale (SEMA_DURATIONS, src/uix/sema/durations.ts);
an event hold is a label from here or a raw ms number.
| Label | ms |
|---|---|
subliminal |
50 |
glimpse |
120 |
brief |
240 |
settled |
400 |
noticed |
600 |
insistent |
1200 |
persistent |
3000 |
Haptic kinds (7)
The kind a haptic channel signature may use (HapticSignature,
src/uix/sema/channels.ts). Haptic is opt-in (new EngineSemantic({ haptic: true })).
tick · tap · pulse · thud · success · warning · error
Palette scales (33)
The donor scales a component color prop accepts under intent="neutral"
(PALETTE_SCALES, src/uix/eidos/lib/types.ts) — the per-instance override
(<X color="teal">). NEVER hand-count this list.
gray · slate · blue · cyan · teal · green · yellow · amber · orange · red · pink · purple · mauve · sage · olive · sand · tomato · ruby · crimson · plum · fuchsia · violet · iris · indigo · jade · grass · brown · sky · mint · lime · gold · bronze · steel
Sizes (8)
The size scale (SIZES; the physical primitives are SIZE_PRIMITIVE_KEYS,
src/uix/eidos/lib/types.ts). full is a layout semantic, not a physical
tier. Each component exposes the subset its recipe supports.
Physical: xxs · xs · sm · md · lg · xl · xxl · layout: full
Placement grids (2 × 9)
The 3×3 grids a placement prop draws from (POSITIONS /
LOGICAL_POSITIONS, src/uix/eidos/lib/types.ts). Narrow with
Extract<…>; add component-only values (static) by union. NEVER
re-declare a grid — four components did until 2026-08-15 and were kept
in step by hand.
Choosing is a BEHAVIOUR decision, not a naming one: does the
placement have to flip for a right-to-left reader? A strip pinned to
bottom-end belongs on the trailing edge in both directions; a panel
that opens to the physical right because that is where the space is does
not. This pair settles EID-3, which recorded the physical exception in
July 2026 and left its doctrine pending.
| Grid | Mirrors in RTL | Values | Used by |
|---|---|---|---|
Position (physical) |
no — left is the screen's left |
top-left · top-center · top-right · middle-left · middle-center · middle-right · bottom-left · bottom-center · bottom-right |
Dialog · Drawer · Toast · floating anchors |
LogicalPosition |
yes — start/end follow the direction |
top-start · top-center · top-end · left-center · center · right-center · bottom-start · bottom-center · bottom-end |
Affix + its consumers (Fab · MenuDial) · OnionMenu · Avatar badge |
Variant archetypes
The canonical variant sets per archetype (EIDOS_VARIANTS,
src/uix/eidos/lib/types.ts). A component narrows to one set; component-only
values live in its own types.ts.
| Archetype | Variants |
|---|---|
control |
surface · outline · ghost |
selection |
solid · outline · ghost |
chip |
soft · solid · outline · ghost |
marker |
solid · soft · outline |
tabs |
line · surface · pills · segmented |
Shared strings (common.*, 40)
The shared idlangref leaves (commonLangs, src/uix/langs/common.ts),
reachable via v.commonRef(...) or #?common.{path}|Fallback — reuse these
instead of re-declaring a close/cancel/clear label per component.
buttons.cancel · buttons.clear · buttons.close · buttons.decrement · buttons.dismiss · buttons.edit · buttons.increment · buttons.next · buttons.prev · buttons.redo · buttons.remove · buttons.reset · buttons.save · buttons.submit · buttons.undo · calendar.prev-month · calendar.next-month · calendar.month-select · calendar.year-select · month-grid.prev-year · month-grid.next-year · year-grid.prev-page · year-grid.next-page · date.year · date.month · date.day · time.hour · time.minute · time.second · time.day-period · time.time-zone · time.am · time.pm · time.period.dawn · time.period.morning · time.period.afternoon · time.period.dusk · time.period.night · time.period.late-night · field.empty