docs(corpus): add docs/glossary.md — the invented vocabulary, one line each
Companion to the entry point: an agent or new session can look up the framework's
coined terms (morfo, soma, sema, eidos, archetype, runtime part, Presence,
polymorphic close, hold, cascade, TSC, recipe, variant, role, scaling, …) in one
place, each with a pointer to its authoritative doc. The semantic subset
(family / intent / verb / channel) points at CANON.md instead of restating the
values, so it cannot drift.
Wired into docs/README.md (E0 stratum + reading order).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
4 months ago
|
|
|
|
---
|
|
|
|
|
|
title: UIX Glossary
|
|
|
|
|
|
type: reference
|
|
|
|
|
|
audience: human + agent
|
|
|
|
|
|
authority: navigational — concise definitions; the linked doc is authoritative
|
|
|
|
|
|
status: current
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
# UIX Glossary
|
|
|
|
|
|
|
|
|
|
|
|
The framework's invented vocabulary, defined in one line each, with a pointer to
|
|
|
|
|
|
the authoritative doc. The **semantic** vocabulary (families, intents, verbs,
|
|
|
|
|
|
channels) is owned by [`CANON.md`](./CANON.md) — this glossary points there
|
|
|
|
|
|
rather than re-stating the values, so they cannot drift.
|
|
|
|
|
|
|
|
|
|
|
|
New here? Start at [`docs/README.md`](./README.md).
|
|
|
|
|
|
|
|
|
|
|
|
## The layers
|
|
|
|
|
|
|
|
|
|
|
|
| Term | Meaning |
|
|
|
|
|
|
| --- | --- |
|
|
|
|
|
|
| **morfo** | The declarative contract (a component's "DNA"): its public DOM surface — parts, `data-*`/ARIA, keyboard, events — declared once in a typed object. Every other layer reads it. → [`morfo/README`](../src/uix/morfo/README.md) |
|
|
|
|
|
|
| **soma** | The headless behavior layer: keyboard, focus, ARIA wiring, state machines, composition. No visuals. → [`soma/README`](../src/uix/soma/README.md) |
|
|
|
|
|
|
| **sema** | The perceptual engine: turns a declared event into sound / haptic (runtime) and a `data-event-*` projection (for eidos), via a cascade. → [`sema/README`](../src/uix/sema/README.md) |
|
|
|
|
|
|
| **eidos** | The visual layer: CSS recipes, tokens, themes, sizes, variants — reacts to the DOM attrs morfo promises. → [`eidos/README`](../src/uix/eidos/README.md) |
|
|
|
|
|
|
| **arts** | Runtime artifacts: the `Engine*` / `Active*` services (auth, cache, http, format, langs, dom, motion, …). → [`arts/README`](../src/arts/README.md) |
|
|
|
|
|
|
| **libs** | Pure, zero-dependency helpers (`$libs/days`, `$libs/dom`, `$reactive`, …). |
|
|
|
|
|
|
| **svrs** | Server-authoritative engines (`$svrs/auth`, `$svrs/perm`, `$svrs/cache`). |
|
|
|
|
|
|
| **active-uix** | The composition root that wires the layers — `createActiveUix` (standalone) or `attachActiveUix` (attach to an app). → [`active-uix/README`](../src/uix/active-uix/README.md) |
|
|
|
|
|
|
| **ActiveDom / `$adom`** | The single reactive DOM service: the only sanctioned surface for managed DOM writes, listeners, queries, focus and scroll. |
|
|
|
|
|
|
|
|
|
|
|
|
## Morfo vocabulary
|
|
|
|
|
|
|
|
|
|
|
|
| Term | Meaning |
|
|
|
|
|
|
| --- | --- |
|
|
|
|
|
|
| **part** | A named sub-element of a component (`provider`, `trigger`, `content`, …). |
|
|
|
|
|
|
| **archetype** | Cross-component classification of a part (`trigger`, `item`, `option`, …) — used for transversal eidos selectors and sema verbs. |
|
|
|
|
|
|
| **kind** | A part's visibility: `public` \| `internal` \| `private`. |
|
|
|
|
|
|
| **data-attr contract** | The stable markers a part emits: `data-{component}` (provider) and `data-{component}-{part}`. Never `data-soma-*`. The eidos/sema frontier. |
|
|
|
|
|
|
| **value sources (`v.*`)** | Typed origins for an ARIA/data value in morfo: `v.literal`, `v.stateRef`, `v.partRef`, `v.propRef`, `v.translationRef`. |
|
|
|
|
|
|
| **scope** | Which layers implement the component: `['soma']`, `['soma', 'eidos']`, … |
|
|
|
|
|
|
| **2-of-3 rule** | A morfo field is justified only if at least 2 of soma / sema / eidos consume it. |
|
|
|
|
|
|
| **compileMorfo** | Turns a morfo into a `CompiledMorfo` (resolved attr/keyboard/action plans + the closed set of CSS selectors), cached by morfo identity. |
|
|
|
|
|
|
| **expression** | How a morfo materializes its perceptual signature: `'pack'` \| `'family-default'` \| `'delegated'` \| `'none'`. |
|
|
|
|
|
|
|
|
|
|
|
|
## Soma vocabulary
|
|
|
|
|
|
|
|
|
|
|
|
| Term | Meaning |
|
|
|
|
|
|
| --- | --- |
|
|
|
|
|
|
| **provider** | The concrete state class for a component or part. The root registers context; sub-parts read it. Exported as `Xxx.Provider`. |
|
|
|
|
|
|
| **SomaRuntime** | The morfo interpreter in soma. `runtime.part()` registers a part; `runtime.trigger(event)` sequences prewrite → emit → handler → effect-driven attrs. |
|
|
|
|
|
|
| **layer (soma)** | A shared behavior class consumed by providers: `Presence`, `FocusScope`, `Dismissal`, `ScrollLock`, `Gesture`, `SafePolygon`. → [`SOMA_ARCHITECTURE`](../src/uix/soma/SOMA_ARCHITECTURE.md) §6 |
|
|
|
|
|
|
| **Presence** | Animation-aware mount/unmount (waits for exit animations before removing). |
|
|
|
|
|
|
| **Active\<T\> / State\<T\>** | Reactive containers (readonly / mutable, exposing `.current`) that let runes be passed by reference between classes. |
|
|
|
|
|
|
| **context convention** | The `X.create()` / `X.get()` / `X.require()` static methods every context-using class follows. |
|
|
|
|
|
|
| **roving vs virtual focus** | Two keyboard strategies: real DOM focus with one `tabindex=0` (roving) vs focus stays on the input and items are `data-highlighted` via `aria-activedescendant` (virtual). |
|
|
|
|
|
|
| **polymorphic close** | One `close` event with `allowedFamilies`; the provider chooses the family at dismiss time (used by Dialog/Drawer/Popover). |
|
|
|
|
|
|
| **prewrite / commit** | DOM written imperatively *before* the semantic emit (`prewrite`, e.g. `data-last-action`) vs the structural state written *after* (`commit`). |
|
|
|
|
|
|
|
|
|
|
|
|
## Sema vocabulary
|
|
|
|
|
|
|
|
|
|
|
|
The values live in [`CANON.md`](./CANON.md); these are the term shapes.
|
|
|
|
|
|
|
|
|
|
|
|
| Term | Meaning |
|
|
|
|
|
|
| --- | --- |
|
|
|
|
|
|
| **family** | One of the **8** perceptual event families (contact · commit · signal · handle · emerge · shift · sustain · delegate). → CANON |
|
|
|
|
|
|
| **intent** | The evaluative load of an occurrence (neutral · affirm · fulfill · risk · threat · loss) — only on valenced families. → CANON |
|
|
|
|
|
|
| **verb** | The specific act within a family (`tap`, `select`, `close`, …). → CANON |
|
|
|
|
|
|
| **channel** | An expression modality. Sema runs two at runtime (sound, haptic) and projects `visual`; eidos owns the rest (motion/presence/depth/shape/color). → CANON |
|
|
|
|
|
|
| **hold** | The minimum perceptible duration a signal stays projected (`data-event-*` stamped during it). |
|
|
|
|
|
|
| **cascade** | The 5-layer resolution of a perceptual signature (family base → intent deltas → per-event → globals → per-component / app rules). → [`sema/README`](../src/uix/sema/README.md) |
|
|
|
|
|
|
| **persistence** | A signal's lifecycle, distinct from hold: `transient` \| `untilAction` \| `untilFix` \| `stateBound`. |
|
|
|
|
|
|
|
|
|
|
|
|
## Eidos vocabulary
|
|
|
|
|
|
|
|
|
|
|
|
| Term | Meaning |
|
|
|
|
|
|
| --- | --- |
|
|
|
|
|
|
| **recipe** | A component's token + CSS definition (in `EidosConfig.recipes` / `{name}.css`). |
|
|
|
|
|
|
| **token** | A CSS custom property. Public: `--{component}-*`; private recipe-internal: `--_{component}-*`. Never `--eidos-*` / `--soma-*`. |
|
|
|
|
|
|
| **TSC (Token Scope Contract)** | Where each token is allowed to be emitted (`:root` / `[data-{c}]` / by color / by event) + transitivity validation. → [`TSC.md`](../src/uix/eidos/TSC.md) |
|
|
|
|
|
|
| **variant** | A fixed visual archetype (`solid`, `outline`, `ghost`, …). Canon of eidos — a theme cannot invent or redefine one. |
|
|
|
|
|
|
| **role** | One of the **9** canonical color roles (`primary`, `secondary`, `tertiary`, `neutral`, `affirm`, `fulfill`, `risk`, `threat`, `loss`). |
|
|
|
|
|
|
| **scaling / density** | Orthogonal structural axes: global zoom (90–110) vs spacing (compact/comfortable/spacious). |
|
|
|
|
|
|
| **theme** | A retint of the perceptually-fixed: it changes *which hex* is `affirm`, never *what* `outline` means. → [`THEMING`](../src/uix/eidos/THEMING.md) |
|