@silverpoint/core 0.6.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/README.md +14 -0
  2. package/dist/catalog.d.ts +2 -2
  3. package/dist/catalog.js +4 -2
  4. package/dist/catalog.js.map +1 -1
  5. package/dist/{chunk-OLYKR5PS.js → chunk-46QELMCG.js} +8 -213
  6. package/dist/chunk-46QELMCG.js.map +1 -0
  7. package/dist/chunk-5MP3BLZK.js +48 -0
  8. package/dist/chunk-5MP3BLZK.js.map +1 -0
  9. package/dist/chunk-6YFO7OP3.js +84 -0
  10. package/dist/chunk-6YFO7OP3.js.map +1 -0
  11. package/dist/chunk-ANJSW5JX.js +93 -0
  12. package/dist/chunk-ANJSW5JX.js.map +1 -0
  13. package/dist/{chunk-PD4MD7JU.js → chunk-E5CC2NNQ.js} +5 -3
  14. package/dist/chunk-E5CC2NNQ.js.map +1 -0
  15. package/dist/chunk-G7N4X5XD.js +12 -0
  16. package/dist/chunk-G7N4X5XD.js.map +1 -0
  17. package/dist/chunk-NI7B6UEO.js +24 -0
  18. package/dist/chunk-NI7B6UEO.js.map +1 -0
  19. package/dist/chunk-WYFRHI4S.js +179 -0
  20. package/dist/chunk-WYFRHI4S.js.map +1 -0
  21. package/dist/contrast-siWF_R5o.d.ts +30 -0
  22. package/dist/dashboard-demos.d.ts +2 -2
  23. package/dist/index.d.ts +13 -10
  24. package/dist/index.js +20 -9
  25. package/dist/index.js.map +1 -1
  26. package/dist/{model-CLhtoG75.d.ts → model-DVVt59AB.d.ts} +1 -1
  27. package/dist/palettes.d.ts +29 -0
  28. package/dist/palettes.js +79 -0
  29. package/dist/palettes.js.map +1 -0
  30. package/dist/{props-Dq8FC8GG.d.ts → props-BZ9CcrGv.d.ts} +53 -1
  31. package/dist/timeline.d.ts +90 -0
  32. package/dist/timeline.js +125 -0
  33. package/dist/timeline.js.map +1 -0
  34. package/dist/{types-B81k-s9_.d.ts → types-BT3Xm7fP.d.ts} +3 -1
  35. package/dist/types-D5ys35fF.d.ts +576 -0
  36. package/dist/types-DHBJ0PzV.d.ts +57 -0
  37. package/dist/ui-demos.d.ts +14 -3
  38. package/dist/ui-demos.js +163 -1
  39. package/dist/ui-demos.js.map +1 -1
  40. package/dist/ui.d.ts +346 -325
  41. package/dist/ui.js +932 -118
  42. package/dist/ui.js.map +1 -1
  43. package/dist/view-DteS9glE.d.ts +82 -0
  44. package/package.json +13 -1
  45. package/dist/chunk-OLYKR5PS.js.map +0 -1
  46. package/dist/chunk-PD4MD7JU.js.map +0 -1
package/dist/ui.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ui/catalog.ts","../src/ui/value.ts","../src/ui/progress.ts","../src/ui/items.ts","../src/ui/steps.ts","../src/ui/keyboard.ts","../src/ui/roving.ts","../src/ui/frame.ts","../src/ui/names.ts","../src/ui/tokens.ts","../src/ui/tone.ts","../src/ui/view-kit.ts","../src/ui/view.ts","../src/ui/view-b2.ts","../src/ui/view-b3.ts"],"names":["frame","i","step","root","text"],"mappings":"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","file":"ui.js","sourcesContent":["/** The catalog's groups (PRD §6.11), in the order the documentation lists them. */\nexport type UiGroup = 'actions' | 'data-entry' | 'navigation' | 'data-display' | 'feedback';\n\n/** One UI component: every gate, fixture set and example page iterates this list. */\nexport interface UiComponentRow {\n /** Catalog name, as the PRD writes it. */\n readonly name: string;\n /** Kebab-case subpath: `@silverpoint/<adapter>/ui/<slug>`. */\n readonly slug: string;\n /** The exported name, the same in the three adapters (OQ-U2). */\n readonly component: string;\n readonly group: UiGroup;\n /** The batch of step 6c that implements it (plan-and-tasks.md). */\n readonly batch: 'B1' | 'B2' | 'B3';\n /** Declared states (Data Model §5); one fixture and one demo each. */\n readonly states: readonly string[];\n}\n\nconst BATCH: Readonly<Record<string, UiComponentRow['batch']>> = {\n Button: 'B1', Input: 'B1', Checkbox: 'B1', Switch: 'B1', Card: 'B1', Divider: 'B1',\n RadioGroup: 'B2', Segmented: 'B2', Tabs: 'B2', Slider: 'B2', Rate: 'B2',\n};\n\nconst row = (name: string, group: UiGroup, states: readonly string[]): UiComponentRow =>\n Object.freeze({\n name,\n batch: BATCH[name] ?? 'B3',\n slug: name.replace(/[A-Z]/g, (m, i: number) => (i ? '-' : '') + m.toLowerCase()),\n component: `Sp${name}`,\n group,\n states: Object.freeze([...states]),\n });\n\n/** The 17 components of `0.3.0` and their 45 declared states (REQ-300, Data Model §5). */\nexport const UI_COMPONENTS: readonly UiComponentRow[] = /* @__PURE__ */ Object.freeze([\n row('Button', 'actions', ['default', 'primary', 'danger', 'disabled']),\n row('Input', 'data-entry', ['empty', 'filled', 'invalid', 'disabled']),\n row('Checkbox', 'data-entry', ['unchecked', 'checked', 'indeterminate', 'disabled']),\n row('RadioGroup', 'data-entry', ['selected', 'disabled-item']),\n row('Switch', 'data-entry', ['off', 'on', 'disabled']),\n row('Slider', 'data-entry', ['marks', 'disabled']),\n row('Rate', 'data-entry', ['three', 'read-only']),\n row('Segmented', 'data-entry', ['first', 'middle']),\n row('Tabs', 'navigation', ['first', 'disabled-tab']),\n row('Steps', 'navigation', ['current', 'error']),\n row('Card', 'data-display', ['plain', 'titled']),\n row('Tag', 'data-display', ['tone-1', 'closable']),\n row('Badge', 'data-display', ['count', 'dot', 'overflow']),\n row('Divider', 'data-display', ['plain', 'text']),\n row('Progress', 'feedback', ['line', 'circle', 'indeterminate']),\n row('Alert', 'feedback', ['info', 'success', 'warning', 'error']),\n row('Skeleton', 'feedback', ['paragraph', 'avatar']),\n]);\n","import { diagnose } from '../diagnostics/diagnose';\nimport { round2 } from '../render/round';\n\n/** A linear value's domain. Without `step` the value is only clamped (Progress). */\nexport interface UiRange {\n readonly min: number;\n readonly max: number;\n readonly step?: number;\n}\n\nexport interface UiValue {\n /** The value to render: clamped, on its step. */\n readonly value: number;\n /** Where it sits along its range, in [0, 1] with 2 decimals (DD-025, I-22). */\n readonly fraction: number;\n /** The input was not drawable as given. */\n readonly corrected: boolean;\n}\n\nconst DEFAULT_RANGE: UiRange = { min: 0, max: 100, step: 1 };\n\nfunction warn(component: string, property: string, message: string): void {\n if (process.env.NODE_ENV !== 'production') diagnose('SP017', component, { property, message });\n}\n\n/** Removes the binary noise that `min + n * step` leaves (`0.30000000000000004`). */\nconst tidy = (x: number): number => Number.parseFloat(x.toPrecision(12));\n\n/** A range as drawn: the given one if valid, else `0..100` step 1, warned `SP017` (REQ-324). */\nexport function uiRange(range: UiRange, component = 'UiValue'): UiRange {\n const { min, max, step } = range;\n const stepOk = step === undefined || (Number.isFinite(step) && step > 0);\n if (Number.isFinite(min) && Number.isFinite(max) && min < max && stepOk) return range;\n warn(component, 'min', `The range ${min}..${max} step ${step} is not valid; 0..100 step 1 is used.`);\n return DEFAULT_RANGE;\n}\n\n/**\n * A value on its range: clamped, rounded to the nearest step counted from `min` (never past `max`\n * when `max` is off the step grid), and its exact fraction. Anything corrected warns `SP017`\n * (REQ-324). Pure apart from the development warning.\n */\nexport function uiValue(value: number, range: UiRange, component = 'UiValue'): UiValue {\n const valid = uiRange(range, component);\n const { min, max, step } = valid;\n let next = Number.isFinite(value) ? Math.min(Math.max(value, min), max) : min;\n if (step !== undefined) {\n const steps = Math.min(Math.round((next - min) / step), Math.floor(tidy((max - min) / step)));\n next = tidy(min + steps * step);\n }\n const corrected = valid !== range || next !== value;\n if (next !== value) warn(component, 'value', `${value} is drawn as ${next}.`);\n return { value: next, fraction: round2((next - min) / (max - min)), corrected };\n}\n\n/** A Rate's `count`: an integer in 1..10, default 5; anything else corrected with `SP017`. */\nexport function uiRateCount(count: number | undefined, component = 'SpRate'): number {\n if (count === undefined) return 5;\n const next = Number.isFinite(count) ? Math.min(Math.max(Math.round(count), 1), 10) : 5;\n if (next !== count) warn(component, 'count', `${count} is drawn as ${next}.`);\n return next;\n}\n","import { circlePath } from '../charts/shared/format';\nimport { arcPath, type PolarFrame } from '../charts/shared/polar';\nimport { roundPathData } from '../render/round';\nimport type { Stroke } from '../types';\n\n/** The circle Progress draws in a fixed 100 × 100 view box (DD-025). */\nexport const UI_PROGRESS_VIEWBOX = 100;\n\n/**\n * The circle Progress: the exact track and the exact filled arc, from 12 o'clock clockwise, on the\n * charts' polar engine. Both are `encoding`, so no inker touches them (REQ-304). `stroke` is the\n * ring's width in view-box units; the ring is inset by half of it so nothing is clipped.\n */\nexport function uiProgressArc(fraction: number, stroke: number): { readonly track: Stroke; readonly fill: Stroke } {\n const centre = UI_PROGRESS_VIEWBOX / 2;\n const radius = centre - stroke / 2;\n const frame: PolarFrame = { cx: centre, cy: centre, radius };\n const f = Number.isFinite(fraction) ? Math.min(Math.max(fraction, 0), 1) : 0;\n return {\n track: { d: roundPathData(circlePath(centre, centre, radius)), role: 'encoding', part: 'rule' },\n fill: { d: roundPathData(arcPath(frame, radius, 0, f * 2 * Math.PI)), role: 'encoding', part: 'ink' },\n };\n}\n","import type { UiItem } from './types';\nimport { diagnose } from '../diagnostics/diagnose';\n\n/**\n * Keeps the first item of each key and skips later ones, and any item without a key, warning\n * `SP019` without throwing (REQ-325). Returns the input itself when every key is unique.\n */\nexport function uiItems<T extends { readonly key: string }>(items: readonly T[], component: string): readonly T[] {\n const seen = new Set<string>();\n const kept: T[] = [];\n for (const item of items) {\n if (item.key !== '' && !seen.has(item.key)) {\n seen.add(item.key);\n kept.push(item);\n } else if (process.env.NODE_ENV !== 'production') {\n const why = item.key === '' ? 'An item has an empty key' : `The key \"${item.key}\" repeats`;\n diagnose('SP019', component, { property: 'items', message: `${why}; that item is skipped.` });\n }\n }\n return kept.length === items.length ? items : kept;\n}\n\n/**\n * The key a composite shows as selected (Data Model §2.14): the given key if an enabled item has\n * it; otherwise `null` for a RadioGroup (`'none'`), the first enabled key for Segmented and Tabs\n * (`'first'`). Silent: a key that leaves `items` is an ordinary state of dynamic data (A-06).\n */\nexport function uiSelectedKey(items: readonly UiItem[], value: string | null | undefined, fallback: 'none' | 'first'): string | null {\n if (items.some((item) => item.key === value && item.disabled !== true)) return value!;\n return fallback === 'first' ? (items.find((item) => item.disabled !== true)?.key ?? null) : null;\n}\n","import { diagnose } from '../diagnostics/diagnose';\nimport { uiItems } from './items';\nimport type { StepItem, StepStatus } from './types';\n\nexport interface UiStep {\n readonly key: string;\n readonly status: StepStatus;\n /**\n * The connector after this step carries the status of the step it leads to, written as\n * `data-status`; a `wait` connector is dashed (C-4). `null` after the last step.\n */\n readonly connector: StepStatus | null;\n /** The step `current` points at, after clamping: it carries `aria-current` (REQ-318). */\n readonly current: boolean;\n}\n\n/**\n * Status per step, derived from `current` (finish before, process at, wait after) unless the item\n * sets one, and the connectors between them. Keys are de-duplicated (`SP019`); a `current` outside\n * the list or not an integer is clamped and rounded (`SP017`, REQ-324).\n */\nexport function uiSteps(items: readonly StepItem[], current: number, component = 'SpSteps'): readonly UiStep[] {\n const steps = uiItems(items, component);\n if (steps.length === 0) return [];\n const last = steps.length - 1;\n const at = Number.isFinite(current) ? Math.min(Math.max(Math.round(current), 0), last) : 0;\n if (at !== current && process.env.NODE_ENV !== 'production') {\n diagnose('SP017', component, { property: 'current', message: `${current} is drawn as ${at}.` });\n }\n const statuses = steps.map((item, i): StepStatus => item.status ?? (i < at ? 'finish' : i === at ? 'process' : 'wait'));\n return steps.map((item, i) => ({ key: item.key, status: statuses[i]!, connector: i < last ? statuses[i + 1]! : null, current: i === at }));\n}\n","import type { UiOrientation } from './types';\n\nexport type UiRovingKey = 'ArrowLeft' | 'ArrowRight' | 'ArrowUp' | 'ArrowDown' | 'Home' | 'End';\n\nexport interface UiRovingState {\n /** The focused item; `-1` when none is yet. */\n readonly index: number;\n readonly count: number;\n readonly disabled: readonly boolean[];\n}\n\n/** +1, -1, or 0 for a key that does not move along this orientation. */\nfunction direction(key: UiRovingKey, orientation: UiOrientation, dir: 'ltr' | 'rtl'): number {\n if (orientation === 'vertical') return key === 'ArrowDown' ? 1 : key === 'ArrowUp' ? -1 : 0;\n const forward = key === 'ArrowRight' ? 1 : key === 'ArrowLeft' ? -1 : 0;\n return dir === 'rtl' ? -forward : forward;\n}\n\n/**\n * The WAI-ARIA APG roving-focus transition of a tab list or radio-like group (REQ-315): arrows\n * along the orientation move to the next enabled item and wrap at the ends, `rtl` mirrors the\n * horizontal arrows (REQ-321), Home and End go to the first and last enabled item, and disabled\n * items are skipped (REQ-326). Cross-axis arrows, and any key with no enabled item to go to, keep\n * the index. Pure.\n */\nexport function uiRovingKey(state: UiRovingState, key: UiRovingKey, orientation: UiOrientation, dir: 'ltr' | 'rtl'): number {\n const { index, count, disabled } = state;\n const enabled = (i: number) => disabled[i] !== true;\n if (key === 'Home' || key === 'End') {\n const step = key === 'Home' ? 1 : -1;\n for (let n = 0, i = key === 'Home' ? 0 : count - 1; n < count; n++, i += step) if (enabled(i)) return i;\n return index;\n }\n const step = direction(key, orientation, dir);\n if (step === 0) return index;\n // From no current item, the first move lands on the first (or last) enabled item.\n let i = index < 0 || index >= count ? (step > 0 ? -1 : count) : index;\n for (let n = 0; n < count; n++) {\n i = (((i + step) % count) + count) % count;\n if (enabled(i)) return i;\n }\n return index;\n}\n\nconst ROVING: ReadonlySet<string> = new Set(['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown', 'Home', 'End']);\n\n/** Whether a `KeyboardEvent.key` moves a roving focus: the arrows, Home and End (REQ-315). */\nexport const uiIsRovingKey = (key: string): key is UiRovingKey => ROVING.has(key);\n","import { uiIsRovingKey, uiRovingKey } from './keyboard';\nimport type { UiOrientation } from './types';\n\n/** An item of a composite: a native radio or tab button. */\ninterface RovingItem {\n readonly disabled?: boolean;\n focus(): void;\n click(): void;\n}\n\n/** The composite's root element, as much of the DOM as this reads; the core has no DOM types. */\nexport interface UiRovingRoot {\n querySelectorAll(selector: string): ArrayLike<unknown>;\n closest(selector: string): { getAttribute(name: string): string | null } | null;\n readonly ownerDocument: { readonly activeElement: unknown } | null;\n}\n\n/**\n * The keyboard of a composite (REQ-315), for a `keydown` on its root: the transition is\n * `uiRovingKey`; this finds the items, reads the direction from the nearest `dir` (REQ-321), and\n * moves focus —and, when `activate`, selects by clicking the item, so the adapter's own click or\n * change handler runs. `both` takes the axis from the key, as a radio group does. A key it does\n * not use is left to the browser.\n */\nexport function uiRovingFocus(\n event: { readonly key: string; preventDefault(): void },\n root: UiRovingRoot,\n selector: string,\n orientation: UiOrientation | 'both',\n activate: boolean,\n): void {\n const { key } = event;\n if (!uiIsRovingKey(key)) return;\n const items = Array.from(root.querySelectorAll(selector)) as RovingItem[];\n const index = items.indexOf(root.ownerDocument?.activeElement as RovingItem);\n if (index < 0) return;\n const axis = orientation !== 'both' ? orientation : key === 'ArrowUp' || key === 'ArrowDown' ? 'vertical' : 'horizontal';\n const dir = root.closest('[dir]')?.getAttribute('dir') === 'rtl' ? 'rtl' : 'ltr';\n const next = uiRovingKey({ index, count: items.length, disabled: items.map((item) => item.disabled === true) }, key, axis, dir);\n if (next === index) return;\n event.preventDefault();\n items[next]!.focus();\n if (activate) items[next]!.click();\n}\n","import { roundPathData } from '../render/round';\nimport { resolveSeed } from '../render/seed';\nimport type { Geometry, Seed } from '../types';\n\nexport type UiFrameKind = 'control' | 'pill' | 'box' | 'card' | 'round';\n\n/**\n * Each frame kind is drawn once in a square box and cut into slices for the grounds build\n * (DD-022): four corners of `slice` px, and four edges between them when `size > 2 * slice`.\n * `round` and `box` have no edges; they frame fixed-size squares.\n */\nexport const UI_FRAME_KINDS: Readonly<Record<UiFrameKind, Readonly<{ size: number; slice: number; radius: number }>>> =\n /* @__PURE__ */ Object.freeze({\n control: Object.freeze({ size: 24, slice: 8, radius: 2 }),\n pill: Object.freeze({ size: 36, slice: 12, radius: 12 }),\n box: Object.freeze({ size: 16, slice: 8, radius: 2 }),\n card: Object.freeze({ size: 48, slice: 16, radius: 2 }),\n round: Object.freeze({ size: 24, slice: 12, radius: 12 }),\n });\n\n/** A ground generates at most this many frame variants per kind (Data Model §3.8). */\nconst MAX_VARIANTS = 6;\n\n/**\n * The frame variant of a component: from `seed`, else `id`, by the charts' seed rule; `0` with\n * neither (REQ-307, I-21). Never from mount order, randomness or time (Art. 4). `variants` is read\n * as an integer in 1..6.\n */\nexport function uiFrameVariant(seed: Seed | undefined, id: string | undefined, variants: number): number {\n const n = Number.isFinite(variants) ? Math.min(Math.max(Math.floor(variants), 1), MAX_VARIANTS) : 1;\n if (seed === undefined && !id) return 0;\n return resolveSeed(seed, id ?? '') % n;\n}\n\n/** Half the hairline: the outline is inset so its stroke stays inside the box. */\nconst INSET = 0.5;\n\nfunction roundedSquare(size: number, radius: number): string {\n const lo = INSET;\n const hi = size - INSET;\n const r = Math.min(radius, (hi - lo) / 2);\n const arc = (x: number, y: number) => `A${r},${r},0,0,1,${x},${y}`;\n return (\n `M${lo + r},${lo}H${hi - r}${arc(hi, lo + r)}V${hi - r}${arc(hi - r, hi)}` +\n `H${lo + r}${arc(lo, hi - r)}V${lo + r}${arc(lo + r, lo)}Z`\n );\n}\n\n/**\n * The exact outline of a frame kind: the input the grounds build inks, once per variant, into the\n * pieces of `ui.css` (DD-022). It is an `ornament` stroke —a frame carries no value (Art. 1, as\n * amended)— so the ground's inker may draw it by hand, with its vertices preserved. Build time only.\n */\nexport function uiFrameOutline(kind: UiFrameKind): Geometry {\n const { size, radius } = UI_FRAME_KINDS[kind];\n const box = { x: 0, y: 0, width: size, height: size };\n return {\n viewBox: box,\n plot: box,\n strokes: [{ d: roundPathData(roundedSquare(size, radius)), role: 'ornament', part: 'ink' }],\n labels: [],\n hitAreas: [],\n defs: [],\n };\n}\n","import { diagnose } from '../diagnostics/diagnose';\n\n/**\n * A Button or Badge needs an accessible name: its text content or a `label`. Without either it\n * still renders, and warns `SP018` in development (REQ-319).\n */\nexport function uiRequireName(component: string, text: string | undefined, label: string | undefined): void {\n if (process.env.NODE_ENV === 'production') return;\n if (text?.trim() || label?.trim()) return;\n diagnose('SP018', component, { property: 'label' });\n}\n","import type { Ground, UiTokens } from '../types';\n\n/** The `ui` tokens of a ground that declares none (Data Model §3.8). */\nexport const UI_TOKEN_DEFAULTS: UiTokens = /* @__PURE__ */ Object.freeze({\n frame: 'css',\n frameVariants: 1,\n controlHeight: Object.freeze({ sm: 24, md: 32, lg: 40 }),\n radius: 2,\n focusWidth: 2,\n tone: Object.freeze({ selected: 3, primary: 2, danger: 4, disabled: 1, alertError: 1 }),\n});\n\n/** The smallest target WCAG 2.5.8 allows, and the thinnest focus REQ-316 allows. */\nconst MIN_HEIGHT = 24;\nconst MIN_FOCUS = 2;\n\nconst within = (value: number, lo: number, hi: number, fallback: number) =>\n Number.isFinite(value) ? Math.min(Math.max(value, lo), hi) : fallback;\n\n/**\n * A ground's `ui` tokens, or the defaults, held to their domain: heights ≥ 24 px, focus ≥ 2 px,\n * 1..6 variants. A `weight` ground has no inker that draws by hand, so its frame is always the\n * exact `css` one with a single variant (DD-022). Pure.\n */\nexport function resolveUiTokens(ground: Ground): UiTokens {\n const ui = ground.ui ?? UI_TOKEN_DEFAULTS;\n const inked = ui.frame === 'inked' && ground.tonalMechanism === 'hatch';\n const { sm, md, lg } = ui.controlHeight;\n return {\n frame: inked ? 'inked' : 'css',\n frameVariants: inked ? Math.round(within(ui.frameVariants, 1, 6, 1)) : 1,\n controlHeight: {\n sm: within(sm, MIN_HEIGHT, Infinity, 24),\n md: within(md, MIN_HEIGHT, Infinity, 32),\n lg: within(lg, MIN_HEIGHT, Infinity, 40),\n },\n radius: within(ui.radius, 0, Infinity, 2),\n focusWidth: within(ui.focusWidth, MIN_FOCUS, Infinity, 2),\n tone: ui.tone,\n };\n}\n","import { round2 } from '../render/round';\nimport type { Stroke, ToneSpec } from '../types';\n\n/** One repeating layer of a control's tone: a tile the grounds build inks and lays as a CSS mask. */\nexport interface UiToneLayer {\n readonly width: number;\n readonly height: number;\n readonly strokes: readonly Stroke[];\n}\n\nconst RAD = Math.PI / 180;\nconst EPSILON = 1e-6;\n\n/** About this many px of lines per tile side: enough for hand variation, few enough to stay light. */\nconst TILE_SPAN = 24;\n\n/**\n * One family of parallel lines at `angle`, `gap` apart, clipped to the rectangle that is its own\n * period: shifting the tile by its width or its height lands every line on another line of the\n * family, so the tile repeats without a seam although the lines are not axis-aligned (a CSS mask\n * cannot rotate a repeating image, as an SVG pattern can).\n */\nfunction family(gap: number, angle: number): UiToneLayer {\n const sin = Math.sin(angle * RAD);\n const cos = Math.cos(angle * RAD);\n const lines = Math.max(2, Math.round(TILE_SPAN / gap));\n const width = Math.abs(sin) < EPSILON ? lines * gap : (lines * gap) / Math.abs(sin);\n const height = Math.abs(cos) < EPSILON ? lines * gap : (lines * gap) / Math.abs(cos);\n // A point's offset across the family: lines sit at (k + ½)·gap, so none grazes a corner.\n const offset = (x: number, y: number) => -sin * x + cos * y;\n const corners = [offset(0, 0), offset(width, 0), offset(0, height), offset(width, height)];\n const first = Math.ceil(Math.min(...corners) / gap - 0.5);\n const last = Math.floor(Math.max(...corners) / gap - 0.5);\n const strokes: Stroke[] = [];\n for (let k = first; k <= last; k++) {\n const c = (k + 0.5) * gap;\n // Points of the line: c·n + t·d, with n = (−sin, cos) and d = (cos, sin).\n const at = (t: number) => ({ x: -sin * c + cos * t, y: cos * c + sin * t, t });\n const hits = [\n Math.abs(cos) > EPSILON ? [(0 + sin * c) / cos, (width + sin * c) / cos] : [],\n Math.abs(sin) > EPSILON ? [(0 - cos * c) / sin, (height - cos * c) / sin] : [],\n ]\n .flat()\n .map(at)\n .filter((p) => p.x >= -EPSILON && p.x <= width + EPSILON && p.y >= -EPSILON && p.y <= height + EPSILON)\n .sort((a, b) => a.t - b.t);\n const from = hits[0];\n const to = hits.at(-1);\n if (!from || !to || to.t - from.t < EPSILON * 1e3) continue;\n const clamp = (v: number, hi: number) => round2(Math.min(Math.max(v, 0), hi));\n const w = round2(width);\n const h = round2(height);\n strokes.push({\n d: `M${clamp(from.x, w)},${clamp(from.y, h)}L${clamp(to.x, w)},${clamp(to.y, h)}`,\n role: 'ornament',\n part: 'ink',\n });\n }\n return { width: round2(width), height: round2(height), strokes };\n}\n\n/**\n * The tone of a control at one step of a ground's ramp (DD-026, REQ-308): one layer of hachure,\n * two for cross-hatch (each its own period, laid as two mask layers), none for a `weight` step,\n * whose tone is the frame's line weight. Its lines are `ornament`: a tone is not a value, so the\n * ground's inker may draw them by hand, vertices preserved. Build time only. Pure.\n */\nexport function uiToneTile(spec: ToneSpec): readonly UiToneLayer[] {\n if (spec.style === 'weight') return [];\n const layers = [family(spec.gap, spec.angle)];\n if (spec.style === 'cross-hatch') layers.push(family(spec.gap, spec.angle + 90));\n return layers;\n}\n","import type { CommonUiProps } from './types';\nimport type { UiAttrValue, UiBind, UiElement, UiNode, UiResolved, UiSlot } from './view';\n\nexport type Attrs = Record<string, UiAttrValue | undefined | false>;\n\n/** Drops absent attributes: `undefined` and `false` are never written. */\nfunction clean(attrs: Attrs): Record<string, UiAttrValue> {\n const out: Record<string, UiAttrValue> = {};\n for (const [name, value] of Object.entries(attrs)) if (value !== undefined && value !== false) out[name] = value;\n return out;\n}\n\nexport const el = (tag: string, attrs: Attrs, children: readonly UiNode[] = [], bind?: UiBind): UiElement => ({\n tag,\n attrs: clean(attrs),\n children,\n ...(bind ? { bind } : {}),\n});\nexport const text = (value: string): UiNode => ({ text: value });\nexport const slot = (name: UiSlot): UiNode => ({ slot: name });\n\nexport function root(slug: string, props: CommonUiProps, r: UiResolved, attrs: Attrs = {}): Attrs {\n return {\n class: ['sp-ui', `sp-${slug}`, `sp-ground-${r.ground}`, props.className].filter(Boolean).join(' '),\n 'data-ground': r.ground,\n 'data-substrate': r.substrate,\n 'data-mode': r.mode,\n 'data-size': r.size,\n 'data-frame': String(r.frame),\n ...attrs,\n };\n}\n\nexport type FrameKind = 'control' | 'pill' | 'box' | 'card' | 'round';\nexport const frame = (kind: FrameKind) => el('span', { part: 'sp-frame', 'data-kind': kind, 'aria-hidden': 'true' });\n/** A tone by state (`primary`, `selected`…) or ramp level; ui.css maps a state to its ground's level. */\nexport const tone = (value: string, kind: FrameKind) => el('span', { part: 'sp-tone', 'data-tone': value, 'data-kind': kind, 'aria-hidden': 'true' });\n\n/** Exact glyphs in a 16 × 16 box: their strokes are values, never inked (REQ-304, REQ-310). */\nexport const UI_GLYPHS = Object.freeze({\n tick: 'M3.5,8.5L6.5,11.5L12.5,4.5',\n dash: 'M4,8H12',\n cross: 'M4.5,4.5L11.5,11.5M11.5,4.5L4.5,11.5',\n warning: 'M8,2.5L14.5,13.5H1.5Z M8,6.5V9.5 M8,11.5V11.5',\n /** A radio's selection: filled by ui.css. */\n dot: 'M11,8A3,3 0 1,1 5,8A3,3 0 1,1 11,8Z',\n /** A Rate mark (C-2). */\n lozenge: 'M8,1.5L14.5,8L8,14.5L1.5,8Z',\n info: 'M14.5,8A6.5,6.5 0 1,1 1.5,8A6.5,6.5 0 1,1 14.5,8Z M8,7.5V11.5 M8,4.75V4.75',\n});\nexport type UiGlyph = keyof typeof UI_GLYPHS;\nexport const glyph = (name: UiGlyph) => el('svg', { part: 'sp-mark', 'data-glyph': name, viewBox: '0 0 16 16', 'aria-hidden': 'true' }, [el('path', { d: UI_GLYPHS[name] })]);\n\n\n/** Text for assistive technology only, hidden for sight as a native input is (REQ-314). */\nexport const sr = (value: string) => el('span', { class: 'sp-ui-sr' }, [text(value)]);\n\n/** The id relations of a control derive from its `id`, else its `name` (REQ-329). */\nexport const baseOf = (props: { readonly id?: string; readonly name?: string }) => props.id ?? props.name;\n\n/** A native radio or checkbox, hidden for sight: the control the adapter binds (REQ-314). */\nexport function nativeInput(type: 'checkbox' | 'radio', attrs: Attrs): UiElement {\n return el('input', { type, class: 'sp-ui-native', ...attrs }, [], 'native');\n}\n","import { DEFAULTS } from '../config/resolve';\nimport type { InkMode, ProviderConfig, SubstrateName } from '../types';\nimport { uiFrameVariant } from './frame';\nimport { uiRequireName } from './names';\nimport type {\n CommonUiProps,\n SpButtonProps,\n SpCardProps,\n SpCheckboxProps,\n SpDividerProps,\n SpInputProps,\n SpSwitchProps,\n UiSize,\n} from './types';\nimport { baseOf, el, frame, glyph, root, slot, text, tone } from './view-kit';\n\nexport { UI_GLYPHS, type UiGlyph } from './view-kit';\n\n/**\n * The markup contract of the UI components (API delta §4), as data: every adapter writes this tree\n * and nothing else, and the parity gate compares each adapter's server render with it (REQ-327).\n * An adapter binds behaviour —value, events, forms— to the elements marked `bind`, and puts the\n * consumer's content where a `slot` stands. It computes nothing (Art. 2).\n */\nexport type UiAttrValue = string | true;\n\nexport interface UiElement {\n readonly tag: string;\n /** HTML attribute names; `true` is a boolean attribute. */\n readonly attrs: Readonly<Record<string, UiAttrValue>>;\n readonly children: readonly UiNode[];\n /** What an adapter binds to the element: see `UiBind`. */\n readonly bind?: UiBind;\n}\n\n/**\n * `native`: a control an adapter binds value, events and forms to —one, or one per item of a\n * composite, told apart by its `value` or `data-key`. `close`: the button that emits `close`.\n */\nexport type UiBind = 'native' | 'close';\n\nexport type UiSlot = 'content' | 'prefix' | 'suffix' | 'extra' | 'footer';\nexport type UiNode = UiElement | { readonly text: string } | { readonly slot: UiSlot };\n\n/** What a component inherits around it: the provider, the dashboard cell, the environment. */\nexport interface UiEnvironment {\n readonly provider?: ProviderConfig;\n /** The configuration of the dashboard whose cell holds the component (REQ-311). */\n readonly cell?: ProviderConfig;\n /** `prefers-contrast: more` or `forced-colors: active` holds (REQ-123). */\n readonly forcedPrecision?: boolean;\n}\n\nexport interface UiResolved {\n readonly ground: string;\n readonly substrate: SubstrateName;\n readonly mode: InkMode;\n readonly size: UiSize;\n /** 0..5: `ui.css` folds it onto the variants the ground draws. */\n readonly frame: number;\n}\n\n/** The most frame variants a ground may draw (Data Model §3.8); the runtime needs no ground tokens. */\nconst FRAME_SLOTS = 6;\n\n/**\n * Ground, substrate and mode with the charts' precedence: prop, then dashboard, then provider,\n * then the library default; a forced `precision` applies after, and nothing overrides it (REQ-311).\n */\nexport function resolveUi(props: CommonUiProps, env: UiEnvironment): UiResolved {\n const { provider = {}, cell = {} } = env;\n const ground = props.ground ?? cell.ground ?? provider.ground ?? DEFAULTS.ground;\n return {\n ground: typeof ground === 'string' ? ground : ground.name,\n substrate: props.substrate ?? cell.substrate ?? provider.substrate ?? DEFAULTS.substrate,\n mode: env.forcedPrecision ? 'precision' : (props.mode ?? cell.mode ?? provider.mode ?? DEFAULTS.mode),\n size: props.size ?? 'md',\n frame: uiFrameVariant(props.seed, props.id, FRAME_SLOTS),\n };\n}\n\n/** `SpButton`: a native `<button>`, or `<a>` with `href` (REQ-314, REQ-310). */\nexport function uiButtonView(props: SpButtonProps, r: UiResolved, content: { readonly text?: string }): UiElement {\n uiRequireName('SpButton', content.text, props.label);\n const variant = props.variant ?? 'default';\n const link = props.href !== undefined;\n const toned = props.disabled ? 'disabled' : variant === 'default' ? undefined : variant;\n return el(\n link ? 'a' : 'button',\n root('button', props, r, {\n id: props.id,\n type: link ? undefined : (props.type ?? 'button'),\n href: link && !props.disabled ? props.href : undefined,\n disabled: !link && props.disabled === true,\n 'aria-disabled': link && props.disabled ? 'true' : undefined,\n 'aria-label': props.label,\n 'data-variant': variant,\n 'data-block': props.block ? 'true' : undefined,\n }),\n [\n frame('control'),\n ...(toned ? [tone(toned, 'control')] : []),\n ...(variant === 'danger' ? [glyph('cross')] : []),\n el('span', { class: toned ? 'sp-ui-label sp-ui-plate' : 'sp-ui-label' }, [slot('content')]),\n ],\n );\n}\n\n/** `SpInput`: a native `<input>` in a framed box, its message after it (REQ-314, REQ-334). */\nexport function uiInputView(\n props: SpInputProps,\n r: UiResolved,\n state: { readonly value: string; readonly prefix?: boolean; readonly suffix?: boolean },\n): UiElement {\n const base = baseOf(props);\n const message = props.message ? props.message : undefined;\n const messageId = message && base ? `${base}--message` : undefined;\n return el('span', root('input', props, r, { 'data-invalid': props.invalid ? 'true' : undefined }), [\n el('span', { class: 'sp-ui-box' }, [\n frame('control'),\n ...(state.prefix ? [el('span', { class: 'sp-ui-affix', 'data-slot': 'prefix' }, [slot('prefix')])] : []),\n el(\n 'input',\n {\n class: 'sp-ui-control',\n id: props.id,\n type: props.type ?? 'text',\n name: props.name,\n value: state.value,\n placeholder: props.placeholder,\n disabled: props.disabled === true,\n readonly: props.readOnly === true,\n 'aria-label': props.label,\n 'aria-invalid': props.invalid ? 'true' : undefined,\n 'aria-describedby': messageId,\n },\n [],\n 'native',\n ),\n ...(state.suffix ? [el('span', { class: 'sp-ui-affix', 'data-slot': 'suffix' }, [slot('suffix')])] : []),\n ...(props.invalid ? [glyph('warning')] : []),\n ]),\n ...(message ? [el('span', { class: 'sp-ui-message', id: messageId }, [text(message)])] : []),\n ]);\n}\n\n/** A native checkbox, hidden for sight, first in its `<label>` (REQ-314). */\nfunction nativeCheckbox(props: { readonly id?: string; readonly name?: string; readonly disabled?: boolean }, checked: boolean, role?: 'switch') {\n return el(\n 'input',\n { type: 'checkbox', class: 'sp-ui-native', role, id: props.id, name: props.name, checked, disabled: props.disabled === true },\n [],\n 'native',\n );\n}\n\n/** `SpCheckbox`: native state; the tick and dash are drawn and shown by it (REQ-310). */\nexport function uiCheckboxView(props: SpCheckboxProps, r: UiResolved, state: { readonly checked: boolean }): UiElement {\n return el('label', root('checkbox', props, r, { 'data-indeterminate': props.indeterminate ? 'true' : undefined }), [\n nativeCheckbox(props, state.checked),\n el('span', { class: 'sp-ui-box', 'aria-hidden': 'true' }, [frame('box'), tone('selected', 'box'), glyph('tick'), glyph('dash')]),\n el('span', { class: 'sp-ui-label' }, [text(props.label)]),\n ]);\n}\n\n/** `SpSwitch`: a native checkbox with `role=\"switch\"`, a pill track and an exact knob (REQ-314). */\nexport function uiSwitchView(props: SpSwitchProps, r: UiResolved, state: { readonly checked: boolean }): UiElement {\n return el('label', root('switch', props, r), [\n nativeCheckbox(props, state.checked, 'switch'),\n el('span', { class: 'sp-ui-track', 'aria-hidden': 'true' }, [frame('pill'), tone('selected', 'pill'), el('span', { part: 'sp-knob' })]),\n el('span', { class: 'sp-ui-label' }, [text(props.label)]),\n ]);\n}\n\n/** `SpCard`: an `<article>` named by its heading, or a `<section>` without a title (REQ-318). */\nexport function uiCardView(props: SpCardProps, r: UiResolved, slots: { readonly extra?: boolean; readonly footer?: boolean }): UiElement {\n const titled = props.title !== undefined;\n const titleId = titled && props.id ? `${props.id}--title` : undefined;\n const header = titled || slots.extra;\n return el(\n titled ? 'article' : 'section',\n root('card', props, r, { id: props.id, 'aria-labelledby': titleId, 'aria-label': titled && !titleId ? props.title : undefined }),\n [\n frame('card'),\n ...(header\n ? [\n el('div', { class: 'sp-ui-card-header' }, [\n ...(titled ? [el(`h${props.headingLevel ?? 3}`, { class: 'sp-ui-card-title', id: titleId }, [text(props.title!)])] : []),\n ...(slots.extra ? [el('div', { class: 'sp-ui-card-extra' }, [slot('extra')])] : []),\n ]),\n el('span', { part: 'sp-rule', 'aria-hidden': 'true' }),\n ]\n : []),\n el('div', { class: 'sp-ui-card-body' }, [slot('content')]),\n ...(slots.footer ? [el('div', { class: 'sp-ui-card-footer' }, [slot('footer')])] : []),\n ],\n );\n}\n\n/** `SpDivider`: a `separator`; with text, the text between two rules (REQ-318). */\nexport function uiDividerView(props: SpDividerProps, r: UiResolved): UiElement {\n const vertical = props.orientation === 'vertical';\n const rule = () => el('span', { part: 'sp-rule', 'aria-hidden': 'true' });\n return el(\n 'div',\n root('divider', props, r, {\n id: props.id,\n role: 'separator',\n 'aria-orientation': vertical ? 'vertical' : undefined,\n 'data-orientation': vertical ? 'vertical' : 'horizontal',\n 'data-align': props.text ? (props.align ?? 'center') : undefined,\n }),\n props.text ? [rule(), el('span', { class: 'sp-ui-divider-text' }, [text(props.text)]), rule()] : [rule()],\n );\n}\n","import { round2 } from '../render/round';\nimport { uiItems, uiSelectedKey } from './items';\nimport type { SpRadioGroupProps, SpRateProps, SpSegmentedProps, SpSliderProps, SpTabsProps } from './types';\nimport { uiRange, uiRateCount, uiValue } from './value';\nimport { el, frame, glyph, nativeInput, root, slot, text, tone } from './view-kit';\nimport type { UiElement, UiResolved } from './view';\n\n/*\n * Batch B2 (API delta §4): the composites and the ranges. Every composite of radios keeps one tab\n * stop natively; the adapters move focus with `uiRovingKey` (REQ-315). The one heightened element\n * of an instance (REQ-309, I-18) is an `aria-hidden` plate behind the current item's label.\n */\n\nconst heighten = () => el('span', { part: 'sp-heighten', 'aria-hidden': 'true' });\nconst legend = (label: string, forSight: boolean) => el('legend', { class: forSight ? 'sp-ui-legend' : 'sp-ui-legend sp-ui-sr' }, [text(label)]);\n/** Radios without a `name` group under `${id}--value`, so two anonymous instances never share one. */\nconst groupName = (props: { readonly id?: string; readonly name?: string }) => props.name ?? (props.id ? `${props.id}--value` : undefined);\n\n/** `SpRadioGroup`: a `<fieldset>` of native radios; the value `null` checks none (REQ-314, REQ-322). */\nexport function uiRadioGroupView(props: SpRadioGroupProps, r: UiResolved, state: { readonly value: string | null }): UiElement {\n const items = uiItems(props.items, 'SpRadioGroup');\n const value = uiSelectedKey(items, state.value, 'none');\n return el('fieldset', root('radio-group', props, r, { id: props.id, 'data-orientation': props.orientation ?? 'vertical' }), [\n legend(props.label, true),\n ...items.map((item) =>\n el('label', { class: 'sp-ui-item', 'data-key': item.key, 'data-disabled': item.disabled ? 'true' : undefined }, [\n nativeInput('radio', {\n id: props.id ? `${props.id}--${item.key}` : undefined,\n name: props.name,\n value: item.key,\n checked: item.key === value,\n disabled: item.disabled === true,\n }),\n el('span', { class: 'sp-ui-box', 'aria-hidden': 'true' }, [frame('round'), tone('selected', 'round'), glyph('dot')]),\n el('span', { class: 'sp-ui-label' }, [text(item.label)]),\n ]),\n ),\n ]);\n}\n\n/** `SpSegmented`: native radios in one frame; the selected segment toned and heightened (REQ-308, REQ-309). */\nexport function uiSegmentedView(props: SpSegmentedProps, r: UiResolved, state: { readonly value: string | null }): UiElement {\n const items = uiItems(props.items, 'SpSegmented');\n const value = uiSelectedKey(items, state.value, 'first');\n const name = groupName(props);\n return el('fieldset', root('segmented', props, r, { id: props.id, 'data-block': props.block ? 'true' : undefined }), [\n legend(props.label, false),\n el('span', { class: 'sp-ui-segments' }, [\n frame('control'),\n ...items.map((item) => {\n const selected = item.key === value;\n return el('label', { class: 'sp-ui-item', 'data-key': item.key, 'data-disabled': item.disabled ? 'true' : undefined }, [\n nativeInput('radio', { name, value: item.key, checked: selected, disabled: item.disabled === true }),\n el('span', { class: 'sp-ui-segment' }, [\n ...(selected ? [tone('selected', 'control'), heighten()] : []),\n el('span', { class: selected ? 'sp-ui-label sp-ui-plate' : 'sp-ui-label' }, [text(item.label)]),\n ]),\n ]);\n }),\n ]),\n ]);\n}\n\n/** `SpTabs`: a tablist of native buttons, one tab stop on the selected; panels are the content (REQ-314, REQ-315). */\nexport function uiTabsView(props: SpTabsProps, r: UiResolved, state: { readonly value: string | null }): UiElement {\n const items = uiItems(props.items, 'SpTabs');\n const value = uiSelectedKey(items, state.value, 'first');\n const vertical = props.orientation === 'vertical';\n const id = props.id;\n return el('div', root('tabs', props, r, { id, 'data-orientation': vertical ? 'vertical' : 'horizontal' }), [\n el('div', { class: 'sp-ui-tablist', role: 'tablist', 'aria-label': props.label, 'aria-orientation': vertical ? 'vertical' : undefined }, [\n ...items.map((item) => {\n const selected = item.key === value;\n return el(\n 'button',\n {\n type: 'button',\n class: 'sp-ui-tab',\n role: 'tab',\n id: id ? `${id}--tab-${item.key}` : undefined,\n 'aria-selected': selected ? 'true' : 'false',\n 'aria-controls': id ? `${id}--panel-${item.key}` : undefined,\n tabindex: selected ? '0' : '-1',\n disabled: item.disabled === true,\n 'data-key': item.key,\n },\n [...(selected ? [heighten()] : []), el('span', { class: 'sp-ui-label' }, [text(item.label)])],\n 'native',\n );\n }),\n el('span', { part: 'sp-rule', 'aria-hidden': 'true' }),\n ]),\n el('div', { class: 'sp-ui-tabpanels' }, [slot('content')]),\n ]);\n}\n\n/**\n * `SpTabPanel`: a `tabpanel` labelled by its tab, focusable, hidden unless its tab is selected.\n * `tabs` is what the enclosing `SpTabs` shares: its `id` and the selected key.\n */\nexport function uiTabPanelView(props: { readonly value: string }, tabs: { readonly id?: string; readonly value: string | null }): UiElement {\n const { id } = tabs;\n return el(\n 'div',\n {\n class: 'sp-ui-tabpanel',\n role: 'tabpanel',\n id: id ? `${id}--panel-${props.value}` : undefined,\n 'aria-labelledby': id ? `${id}--tab-${props.value}` : undefined,\n tabindex: '0',\n hidden: props.value !== tabs.value,\n },\n [slot('content')],\n );\n}\n\n/**\n * `SpSlider`: a native range over the drawing. Its fraction is a custom property (DD-025): fill\n * and thumb sit at it exactly; the thumb is the one heightening (REQ-309).\n */\nexport function uiSliderView(props: SpSliderProps, r: UiResolved, state: { readonly value: number }): UiElement {\n // An invalid range falls back to its defaults once, and the native input carries the same.\n const valid = uiRange({ min: props.min ?? 0, max: props.max ?? 100, step: props.step ?? 1 }, 'SpSlider');\n const { value, fraction } = uiValue(state.value, valid, 'SpSlider');\n const span = valid.max - valid.min;\n const marks = (props.marks ?? []).filter((m) => Number.isFinite(m) && m >= valid.min && m <= valid.max);\n return el('label', root('slider', props, r, { style: `--sp-ui-fraction: ${fraction}`, 'data-disabled': props.disabled ? 'true' : undefined }), [\n el('span', { class: 'sp-ui-label' }, [text(props.label)]),\n el('span', { class: 'sp-ui-rail' }, [\n el('span', { part: 'sp-track', 'aria-hidden': 'true' }),\n el('span', { part: 'sp-fill', 'aria-hidden': 'true' }, [tone('selected', 'pill')]),\n el('span', { part: 'sp-thumb sp-heighten', 'aria-hidden': 'true' }),\n el(\n 'input',\n {\n type: 'range',\n class: 'sp-ui-range',\n id: props.id,\n name: props.name,\n min: String(valid.min),\n max: String(valid.max),\n step: String(valid.step ?? 1),\n value: String(value),\n disabled: props.disabled === true,\n },\n [],\n 'native',\n ),\n ]),\n ...(marks.length\n ? [\n el(\n 'span',\n { class: 'sp-ui-scale', 'aria-hidden': 'true' },\n marks.map((m) => el('span', { class: 'sp-ui-scale-mark', style: `--sp-ui-at: ${round2((m - valid.min) / span)}` }, [text(String(m))])),\n ),\n ]\n : []),\n ]);\n}\n\n/** `SpRate`: `count` native radios valued 1..count, drawn as exact lozenges; filled up to the value (C-2). */\nexport function uiRateView(props: SpRateProps, r: UiResolved, state: { readonly value: number }): UiElement {\n const count = uiRateCount(props.count);\n const { value } = uiValue(state.value, { min: 0, max: count, step: 1 }, 'SpRate');\n const name = groupName(props);\n const readOnly = props.readOnly === true;\n return el(\n 'fieldset',\n root('rate', props, r, {\n id: props.id,\n role: readOnly ? 'radiogroup' : undefined,\n 'aria-readonly': readOnly ? 'true' : undefined,\n 'data-readonly': readOnly ? 'true' : undefined,\n }),\n [\n legend(props.label, false),\n ...Array.from({ length: count }, (_, i) => {\n const n = i + 1;\n const filled = n <= value;\n return el('label', { class: 'sp-ui-item', 'data-filled': filled ? 'true' : undefined }, [\n nativeInput('radio', { name, value: String(n), checked: n === value, disabled: props.disabled === true, 'aria-label': String(n) }),\n el('span', { class: 'sp-ui-box', 'aria-hidden': 'true' }, [...(filled ? [tone('selected', 'round')] : []), glyph('lozenge')]),\n ]);\n }),\n ],\n );\n}\n","import { uiRequireName } from './names';\nimport { uiProgressArc, UI_PROGRESS_VIEWBOX } from './progress';\nimport { uiSteps } from './steps';\nimport type { AlertKind, SpAlertProps, SpBadgeProps, SpProgressProps, SpSkeletonProps, SpStepsProps, SpTagProps } from './types';\nimport { uiValue } from './value';\nimport { el, frame, glyph, root, slot, sr, text, tone, type UiGlyph } from './view-kit';\nimport type { UiElement, UiResolved } from './view';\n\n/*\n * Batch B3 (API delta §4): display and feedback. Their roles are REQ-318's; nothing here takes\n * focus but the close buttons of Tag and Alert.\n */\n\nconst closeButton = (label: string) =>\n el('button', { type: 'button', class: 'sp-ui-close', 'aria-label': label }, [glyph('cross')], 'close');\n\n/** `SpSteps`: an ordered list; the current step has `aria-current=\"step\"` and the heightening (REQ-318, REQ-309). */\nexport function uiStepsView(props: SpStepsProps, r: UiResolved): UiElement {\n const steps = uiSteps(props.items, props.current);\n const titles = new Map(props.items.map((item) => [item.key, item] as const));\n return el(\n 'ol',\n root('steps', props, r, { id: props.id, 'aria-label': props.label, 'data-orientation': props.orientation === 'vertical' ? 'vertical' : 'horizontal' }),\n steps.map((step, i) => {\n const item = titles.get(step.key)!;\n const mark = step.status === 'finish' ? glyph('tick') : step.status === 'error' ? glyph('cross') : text(String(i + 1));\n return el('li', { class: 'sp-ui-step', 'data-status': step.status, 'aria-current': step.current ? 'step' : undefined }, [\n el('span', { class: 'sp-ui-step-mark', part: step.current ? 'sp-heighten' : undefined, 'aria-hidden': 'true' }, [mark]),\n el('span', { class: 'sp-ui-step-text' }, [\n el('span', { class: 'sp-ui-step-title' }, [text(item.title)]),\n ...(item.description ? [el('span', { class: 'sp-ui-step-description' }, [text(item.description)])] : []),\n ]),\n // Exact, dashed while it leads to a step still waiting (C-4, DD-026).\n ...(step.connector ? [el('span', { part: 'sp-connector', 'data-status': step.connector, 'aria-hidden': 'true' })] : []),\n ]);\n }),\n );\n}\n\n/** `SpTag`: framed and toned at its level (default 1); closable, a native close button (REQ-308). */\nexport function uiTagView(props: SpTagProps, r: UiResolved, content: { readonly text?: string }): UiElement {\n const level = String(props.tone ?? 1);\n const label = props.closeLabel ?? (content.text ? `Remove ${content.text}` : 'Remove');\n return el('span', root('tag', props, r, { id: props.id, 'data-tone': level }), [\n frame('control'),\n tone(level, 'control'),\n el('span', { class: 'sp-ui-label sp-ui-plate' }, [slot('content')]),\n ...(props.closable ? [closeButton(label)] : []),\n ]);\n}\n\n/** `SpBadge`: its count is text beside the content, so it is in the accessible name (REQ-318). */\nexport function uiBadgeView(props: SpBadgeProps, r: UiResolved, content: { readonly text?: string }): UiElement {\n const max = props.max ?? 99;\n const count = props.count !== undefined && Number.isFinite(props.count) ? Math.max(Math.round(props.count), 0) : undefined;\n const shown = count === undefined ? undefined : count > max ? `${max}+` : String(count);\n const dot = props.dot === true;\n uiRequireName('SpBadge', content.text ?? (dot ? undefined : shown), props.label);\n return el('span', root('badge', props, r, { id: props.id }), [\n el('span', { class: 'sp-ui-label' }, [slot('content')]),\n ...(dot\n ? [el('span', { class: 'sp-ui-badge-dot', 'aria-hidden': 'true' })]\n : shown !== undefined\n ? [el('span', { class: 'sp-ui-badge-count' }, [frame('pill'), el('span', { class: 'sp-ui-badge-text' }, [text(shown)])])]\n : []),\n ...(props.label ? [sr(props.label)] : []),\n ]);\n}\n\n/** The circle Progress's ring width, in view-box units. */\nconst RING = 8;\n\n/** `SpProgress`: a `progressbar`; without a value, indeterminate: no `aria-valuenow`, a static tone (REQ-318, REQ-320). */\nexport function uiProgressView(props: SpProgressProps, r: UiResolved): UiElement {\n const determinate = props.value !== undefined;\n const { value, fraction } = determinate ? uiValue(props.value!, { min: 0, max: 100 }, 'SpProgress') : { value: 0, fraction: 0 };\n const circle = props.shape === 'circle';\n const drawing = circle\n ? (() => {\n const arc = uiProgressArc(determinate ? fraction : 0.25, RING);\n return el('svg', { class: 'sp-ui-ring', viewBox: `0 0 ${UI_PROGRESS_VIEWBOX} ${UI_PROGRESS_VIEWBOX}`, 'aria-hidden': 'true' }, [\n el('path', { class: 'sp-ui-ring-track', d: arc.track.d }),\n el('path', { class: 'sp-ui-ring-fill', d: arc.fill.d }),\n ]);\n })()\n : el('span', { class: 'sp-ui-rail' }, [\n el('span', { part: 'sp-track', 'aria-hidden': 'true' }),\n el('span', { part: 'sp-fill', 'aria-hidden': 'true' }, [tone(determinate ? 'selected' : '1', 'pill')]),\n ]);\n return el(\n 'div',\n root('progress', props, r, {\n id: props.id,\n role: 'progressbar',\n 'aria-label': props.label,\n 'aria-valuemin': '0',\n 'aria-valuemax': '100',\n 'aria-valuenow': determinate ? String(value) : undefined,\n 'data-shape': circle ? 'circle' : 'line',\n 'data-indeterminate': determinate ? undefined : 'true',\n style: determinate ? `--sp-ui-fraction: ${fraction}` : undefined,\n }),\n [drawing, ...(determinate && props.showValue !== false ? [el('span', { class: 'sp-ui-value', 'aria-hidden': 'true' }, [text(`${value}%`)])] : [])],\n );\n}\n\nconst ALERT_GLYPHS: Readonly<Record<AlertKind, UiGlyph>> = { info: 'info', success: 'tick', warning: 'warning', error: 'cross' };\n\n/**\n * `SpAlert`: `alert` for error and warning, `status` otherwise (REQ-318). Error alone takes a tone,\n * the ground's `alertError`, with its text on a plate (C-3); every kind has its exact glyph.\n */\nexport function uiAlertView(props: SpAlertProps, r: UiResolved, state: { readonly closable: boolean }): UiElement {\n const kind = props.kind ?? 'info';\n const error = kind === 'error';\n return el('div', root('alert', props, r, { id: props.id, role: error || kind === 'warning' ? 'alert' : 'status', 'data-kind': kind }), [\n frame('card'),\n ...(error ? [tone('alertError', 'card')] : []),\n glyph(ALERT_GLYPHS[kind]),\n el('div', { class: error ? 'sp-ui-alert-body sp-ui-plate' : 'sp-ui-alert-body' }, [\n ...(props.title ? [el('div', { class: 'sp-ui-alert-title' }, [text(props.title)])] : []),\n el('div', { class: 'sp-ui-alert-text' }, [slot('content')]),\n ]),\n ...(state.closable ? [closeButton(props.closeLabel ?? 'Close')] : []),\n ]);\n}\n\n/** `SpSkeleton`: `aria-busy`, a label for assistive technology, and hidden toned shapes (REQ-318). */\nexport function uiSkeletonView(props: SpSkeletonProps, r: UiResolved): UiElement {\n const lines = props.lines !== undefined && Number.isFinite(props.lines) ? Math.min(Math.max(Math.round(props.lines), 1), 8) : 3;\n return el('div', root('skeleton', props, r, { id: props.id, 'aria-busy': 'true' }), [\n sr(props.label ?? 'Loading'),\n ...(props.avatar ? [el('span', { class: 'sp-ui-skeleton-avatar', 'aria-hidden': 'true' }, [tone('1', 'round')])] : []),\n el(\n 'span',\n { class: 'sp-ui-skeleton-lines', 'aria-hidden': 'true' },\n Array.from({ length: lines }, () => el('span', { class: 'sp-ui-skeleton-line' }, [tone('1', 'control')])),\n ),\n ]);\n}\n"]}
1
+ {"version":3,"sources":["../src/ui/catalog.ts","../src/ui/value.ts","../src/ui/progress.ts","../src/ui/items.ts","../src/ui/steps.ts","../src/ui/keyboard.ts","../src/ui/roving.ts","../src/ui/frame.ts","../src/ui/tokens.ts","../src/ui/tone.ts","../src/ui/pages.ts","../src/ui/number.ts","../src/ui/initials.ts","../src/ui/listbox.ts","../src/ui/place.ts","../src/ui/anchor.ts","../src/ui/overlay.ts","../src/ui/view.ts","../src/ui/view-b2.ts","../src/ui/view-b3.ts","../src/ui/view-composed.ts","../src/ui/view-overlay.ts"],"names":["family","message","valid","frame","last","state","enabled","i","step","root","first","clamp","warn","page","tidy","direction","side","cell","label","level","heighten","row"],"mappings":"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","file":"ui.js","sourcesContent":["/** The catalog's groups (PRD §6.11), in the order the documentation lists them. */\nexport type UiGroup = 'actions' | 'data-entry' | 'navigation' | 'data-display' | 'feedback' | 'building-blocks' | 'disclosure' | 'overlays';\n\n/** `ui`: the 17 of `0.3.0`; `composed` and `overlay`: feature-004's (API delta §2). */\nexport type UiFamily = 'ui' | 'composed' | 'overlay';\n\n/** One UI component: every gate, fixture set and example page iterates this list. */\nexport interface UiComponentRow {\n /** Catalog name, as the PRD writes it. */\n readonly name: string;\n /** Kebab-case subpath: `@silverpoint/<adapter>/ui/<slug>`. */\n readonly slug: string;\n /** The exported name, the same in the three adapters (OQ-U2). */\n readonly component: string;\n readonly group: UiGroup;\n readonly family: UiFamily;\n /** The batch that implements it: step 6c (`B*`) or step 8d (`A1`, `A2`, `B`) (plan-and-tasks.md). */\n readonly batch: 'B1' | 'B2' | 'B3' | 'A1' | 'A2' | 'B';\n /** Declared states (Data Model §5); one fixture and one demo each. */\n readonly states: readonly string[];\n}\n\nconst BATCH: Readonly<Record<string, UiComponentRow['batch']>> = {\n Button: 'B1', Input: 'B1', Checkbox: 'B1', Switch: 'B1', Card: 'B1', Divider: 'B1',\n RadioGroup: 'B2', Segmented: 'B2', Tabs: 'B2', Slider: 'B2', Rate: 'B2',\n};\n\nconst row = (\n name: string,\n group: UiGroup,\n states: readonly string[],\n family: UiFamily = 'ui',\n batch: UiComponentRow['batch'] = BATCH[name] ?? 'B3',\n): UiComponentRow =>\n Object.freeze({\n name,\n batch,\n slug: name.replace(/[A-Z]/g, (m, i: number) => (i ? '-' : '') + m.toLowerCase()),\n component: `Sp${name}`,\n group,\n family,\n states: Object.freeze([...states]),\n });\nconst composed = (name: string, group: UiGroup, batch: 'A1' | 'A2', states: readonly string[]) => row(name, group, states, 'composed', batch);\nconst overlay = (name: string, states: readonly string[]) => row(name, 'overlays', states, 'overlay', 'B');\n\n/**\n * The 17 components of `0.3.0` and their 45 declared states (REQ-300), then the 21 of feature-004\n * and their 35 (REQ-470, Data Model delta §5). `SpTimeline` is not a row: it lives on its own\n * subpath, with one fixture of its own.\n */\nexport const UI_COMPONENTS: readonly UiComponentRow[] = /* @__PURE__ */ Object.freeze([\n row('Button', 'actions', ['default', 'primary', 'danger', 'disabled']),\n row('Input', 'data-entry', ['empty', 'filled', 'invalid', 'disabled']),\n row('Checkbox', 'data-entry', ['unchecked', 'checked', 'indeterminate', 'disabled']),\n row('RadioGroup', 'data-entry', ['selected', 'disabled-item']),\n row('Switch', 'data-entry', ['off', 'on', 'disabled']),\n row('Slider', 'data-entry', ['marks', 'disabled']),\n row('Rate', 'data-entry', ['three', 'read-only']),\n row('Segmented', 'data-entry', ['first', 'middle']),\n row('Tabs', 'navigation', ['first', 'disabled-tab']),\n row('Steps', 'navigation', ['current', 'error']),\n row('Card', 'data-display', ['plain', 'titled']),\n row('Tag', 'data-display', ['tone-1', 'closable']),\n row('Badge', 'data-display', ['count', 'dot', 'overflow']),\n row('Divider', 'data-display', ['plain', 'text']),\n row('Progress', 'feedback', ['line', 'circle', 'indeterminate']),\n row('Alert', 'feedback', ['info', 'success', 'warning', 'error']),\n row('Skeleton', 'feedback', ['paragraph', 'avatar']),\n composed('Surface', 'building-blocks', 'A1', ['frame-card', 'tone-2']),\n composed('Glyph', 'building-blocks', 'A1', ['all']),\n composed('Table', 'data-display', 'A1', ['plain', 'sorted-striped', 'empty']),\n composed('Pagination', 'navigation', 'A2', ['middle', 'total']),\n composed('Breadcrumb', 'navigation', 'A1', ['three']),\n composed('Avatar', 'data-display', 'A1', ['initials', 'square', 'group']),\n composed('Statistic', 'data-display', 'A1', ['plain', 'trend-down']),\n composed('Descriptions', 'data-display', 'A1', ['bordered', 'plain']),\n composed('TimelineList', 'data-display', 'A1', ['mixed']),\n composed('Collapse', 'disclosure', 'A2', ['one-open', 'accordion-disabled']),\n composed('Empty', 'data-display', 'A1', ['plain']),\n composed('Result', 'data-display', 'A1', ['success', 'error']),\n composed('Textarea', 'data-entry', 'A2', ['count', 'invalid']),\n composed('InputNumber', 'data-entry', 'A2', ['value', 'at-min']),\n overlay('Modal', ['open']),\n overlay('Drawer', ['end-open']),\n overlay('Popover', ['open']),\n overlay('Tooltip', ['open']),\n overlay('Select', ['placeholder', 'open-selected']),\n overlay('DropdownMenu', ['open']),\n overlay('Toast', ['info', 'error-action']),\n]);\n","import { diagnose } from '../diagnostics/diagnose';\nimport { round2 } from '../render/round';\n\n/** A linear value's domain. Without `step` the value is only clamped (Progress). */\nexport interface UiRange {\n readonly min: number;\n readonly max: number;\n readonly step?: number;\n}\n\nexport interface UiValue {\n /** The value to render: clamped, on its step. */\n readonly value: number;\n /** Where it sits along its range, in [0, 1] with 2 decimals (DD-025, I-22). */\n readonly fraction: number;\n /** The input was not drawable as given. */\n readonly corrected: boolean;\n}\n\nconst DEFAULT_RANGE: UiRange = { min: 0, max: 100, step: 1 };\n\nfunction warn(component: string, property: string, message: string): void {\n if (process.env.NODE_ENV !== 'production') diagnose('SP017', component, { property, message });\n}\n\n/** Removes the binary noise that `min + n * step` leaves (`0.30000000000000004`). */\nconst tidy = (x: number): number => Number.parseFloat(x.toPrecision(12));\n\n/** A range as drawn: the given one if valid, else `0..100` step 1, warned `SP017` (REQ-324). */\nexport function uiRange(range: UiRange, component = 'UiValue'): UiRange {\n const { min, max, step } = range;\n const stepOk = step === undefined || (Number.isFinite(step) && step > 0);\n if (Number.isFinite(min) && Number.isFinite(max) && min < max && stepOk) return range;\n warn(component, 'min', `The range ${min}..${max} step ${step} is not valid; 0..100 step 1 is used.`);\n return DEFAULT_RANGE;\n}\n\n/**\n * A value on its range: clamped, rounded to the nearest step counted from `min` (never past `max`\n * when `max` is off the step grid), and its exact fraction. Anything corrected warns `SP017`\n * (REQ-324). Pure apart from the development warning.\n */\nexport function uiValue(value: number, range: UiRange, component = 'UiValue'): UiValue {\n const valid = uiRange(range, component);\n const { min, max, step } = valid;\n let next = Number.isFinite(value) ? Math.min(Math.max(value, min), max) : min;\n if (step !== undefined) {\n const steps = Math.min(Math.round((next - min) / step), Math.floor(tidy((max - min) / step)));\n next = tidy(min + steps * step);\n }\n const corrected = valid !== range || next !== value;\n if (next !== value) warn(component, 'value', `${value} is drawn as ${next}.`);\n return { value: next, fraction: round2((next - min) / (max - min)), corrected };\n}\n\n/** A Rate's `count`: an integer in 1..10, default 5; anything else corrected with `SP017`. */\nexport function uiRateCount(count: number | undefined, component = 'SpRate'): number {\n if (count === undefined) return 5;\n const next = Number.isFinite(count) ? Math.min(Math.max(Math.round(count), 1), 10) : 5;\n if (next !== count) warn(component, 'count', `${count} is drawn as ${next}.`);\n return next;\n}\n","import { circlePath } from '../charts/shared/format';\nimport { arcPath, type PolarFrame } from '../charts/shared/polar';\nimport { roundPathData } from '../render/round';\nimport type { Stroke } from '../types';\n\n/** The circle Progress draws in a fixed 100 × 100 view box (DD-025). */\nexport const UI_PROGRESS_VIEWBOX = 100;\n\n/**\n * The circle Progress: the exact track and the exact filled arc, from 12 o'clock clockwise, on the\n * charts' polar engine. Both are `encoding`, so no inker touches them (REQ-304). `stroke` is the\n * ring's width in view-box units; the ring is inset by half of it so nothing is clipped.\n */\nexport function uiProgressArc(fraction: number, stroke: number): { readonly track: Stroke; readonly fill: Stroke } {\n const centre = UI_PROGRESS_VIEWBOX / 2;\n const radius = centre - stroke / 2;\n const frame: PolarFrame = { cx: centre, cy: centre, radius };\n const f = Number.isFinite(fraction) ? Math.min(Math.max(fraction, 0), 1) : 0;\n return {\n track: { d: roundPathData(circlePath(centre, centre, radius)), role: 'encoding', part: 'rule' },\n fill: { d: roundPathData(arcPath(frame, radius, 0, f * 2 * Math.PI)), role: 'encoding', part: 'ink' },\n };\n}\n","import type { UiItem } from './types';\nimport { diagnose } from '../diagnostics/diagnose';\n\n/**\n * Keeps the first item of each key and skips later ones, and any item without a key, warning\n * `SP019` without throwing (REQ-325). Returns the input itself when every key is unique.\n */\nexport function uiItems<T extends { readonly key: string }>(items: readonly T[], component: string): readonly T[] {\n const seen = new Set<string>();\n const kept: T[] = [];\n for (const item of items) {\n if (item.key !== '' && !seen.has(item.key)) {\n seen.add(item.key);\n kept.push(item);\n } else if (process.env.NODE_ENV !== 'production') {\n const why = item.key === '' ? 'An item has an empty key' : `The key \"${item.key}\" repeats`;\n diagnose('SP019', component, { property: 'items', message: `${why}; that item is skipped.` });\n }\n }\n return kept.length === items.length ? items : kept;\n}\n\n/**\n * The key a composite shows as selected (Data Model §2.14): the given key if an enabled item has\n * it; otherwise `null` for a RadioGroup (`'none'`), the first enabled key for Segmented and Tabs\n * (`'first'`). Silent: a key that leaves `items` is an ordinary state of dynamic data (A-06).\n */\nexport function uiSelectedKey(items: readonly UiItem[], value: string | null | undefined, fallback: 'none' | 'first'): string | null {\n if (items.some((item) => item.key === value && item.disabled !== true)) return value!;\n return fallback === 'first' ? (items.find((item) => item.disabled !== true)?.key ?? null) : null;\n}\n","import { diagnose } from '../diagnostics/diagnose';\nimport { uiItems } from './items';\nimport type { StepItem, StepStatus } from './types';\n\nexport interface UiStep {\n readonly key: string;\n readonly status: StepStatus;\n /**\n * The connector after this step carries the status of the step it leads to, written as\n * `data-status`; a `wait` connector is dashed (C-4). `null` after the last step.\n */\n readonly connector: StepStatus | null;\n /** The step `current` points at, after clamping: it carries `aria-current` (REQ-318). */\n readonly current: boolean;\n}\n\n/**\n * Status per step, derived from `current` (finish before, process at, wait after) unless the item\n * sets one, and the connectors between them. Keys are de-duplicated (`SP019`); a `current` outside\n * the list or not an integer is clamped and rounded (`SP017`, REQ-324).\n */\nexport function uiSteps(items: readonly StepItem[], current: number, component = 'SpSteps'): readonly UiStep[] {\n const steps = uiItems(items, component);\n if (steps.length === 0) return [];\n const last = steps.length - 1;\n const at = Number.isFinite(current) ? Math.min(Math.max(Math.round(current), 0), last) : 0;\n if (at !== current && process.env.NODE_ENV !== 'production') {\n diagnose('SP017', component, { property: 'current', message: `${current} is drawn as ${at}.` });\n }\n const statuses = steps.map((item, i): StepStatus => item.status ?? (i < at ? 'finish' : i === at ? 'process' : 'wait'));\n return steps.map((item, i) => ({ key: item.key, status: statuses[i]!, connector: i < last ? statuses[i + 1]! : null, current: i === at }));\n}\n","import type { UiOrientation } from './types';\n\nexport type UiRovingKey = 'ArrowLeft' | 'ArrowRight' | 'ArrowUp' | 'ArrowDown' | 'Home' | 'End';\n\nexport interface UiRovingState {\n /** The focused item; `-1` when none is yet. */\n readonly index: number;\n readonly count: number;\n readonly disabled: readonly boolean[];\n}\n\n/** +1, -1, or 0 for a key that does not move along this orientation. */\nfunction direction(key: UiRovingKey, orientation: UiOrientation, dir: 'ltr' | 'rtl'): number {\n if (orientation === 'vertical') return key === 'ArrowDown' ? 1 : key === 'ArrowUp' ? -1 : 0;\n const forward = key === 'ArrowRight' ? 1 : key === 'ArrowLeft' ? -1 : 0;\n return dir === 'rtl' ? -forward : forward;\n}\n\n/**\n * The WAI-ARIA APG roving-focus transition of a tab list or radio-like group (REQ-315): arrows\n * along the orientation move to the next enabled item and wrap at the ends, `rtl` mirrors the\n * horizontal arrows (REQ-321), Home and End go to the first and last enabled item, and disabled\n * items are skipped (REQ-326). Cross-axis arrows, and any key with no enabled item to go to, keep\n * the index. Pure.\n */\nexport function uiRovingKey(state: UiRovingState, key: UiRovingKey, orientation: UiOrientation, dir: 'ltr' | 'rtl'): number {\n const { index, count, disabled } = state;\n const enabled = (i: number) => disabled[i] !== true;\n if (key === 'Home' || key === 'End') {\n const step = key === 'Home' ? 1 : -1;\n for (let n = 0, i = key === 'Home' ? 0 : count - 1; n < count; n++, i += step) if (enabled(i)) return i;\n return index;\n }\n const step = direction(key, orientation, dir);\n if (step === 0) return index;\n // From no current item, the first move lands on the first (or last) enabled item.\n let i = index < 0 || index >= count ? (step > 0 ? -1 : count) : index;\n for (let n = 0; n < count; n++) {\n i = (((i + step) % count) + count) % count;\n if (enabled(i)) return i;\n }\n return index;\n}\n\nconst ROVING: ReadonlySet<string> = new Set(['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown', 'Home', 'End']);\n\n/** Whether a `KeyboardEvent.key` moves a roving focus: the arrows, Home and End (REQ-315). */\nexport const uiIsRovingKey = (key: string): key is UiRovingKey => ROVING.has(key);\n","import { uiIsRovingKey, uiRovingKey } from './keyboard';\nimport type { UiOrientation } from './types';\n\n/** An item of a composite: a native radio or tab button. */\ninterface RovingItem {\n readonly disabled?: boolean;\n focus(): void;\n click(): void;\n}\n\n/** The composite's root element, as much of the DOM as this reads; the core has no DOM types. */\nexport interface UiRovingRoot {\n querySelectorAll(selector: string): ArrayLike<unknown>;\n closest(selector: string): { getAttribute(name: string): string | null } | null;\n readonly ownerDocument: { readonly activeElement: unknown } | null;\n}\n\n/**\n * The keyboard of a composite (REQ-315), for a `keydown` on its root: the transition is\n * `uiRovingKey`; this finds the items, reads the direction from the nearest `dir` (REQ-321), and\n * moves focus —and, when `activate`, selects by clicking the item, so the adapter's own click or\n * change handler runs. `both` takes the axis from the key, as a radio group does. A key it does\n * not use is left to the browser.\n */\nexport function uiRovingFocus(\n event: { readonly key: string; preventDefault(): void },\n root: UiRovingRoot,\n selector: string,\n orientation: UiOrientation | 'both',\n activate: boolean,\n): void {\n const { key } = event;\n if (!uiIsRovingKey(key)) return;\n const items = Array.from(root.querySelectorAll(selector)) as RovingItem[];\n const index = items.indexOf(root.ownerDocument?.activeElement as RovingItem);\n if (index < 0) return;\n const axis = orientation !== 'both' ? orientation : key === 'ArrowUp' || key === 'ArrowDown' ? 'vertical' : 'horizontal';\n const dir = root.closest('[dir]')?.getAttribute('dir') === 'rtl' ? 'rtl' : 'ltr';\n const next = uiRovingKey({ index, count: items.length, disabled: items.map((item) => item.disabled === true) }, key, axis, dir);\n if (next === index) return;\n event.preventDefault();\n items[next]!.focus();\n if (activate) items[next]!.click();\n}\n","import { roundPathData } from '../render/round';\nimport { resolveSeed } from '../render/seed';\nimport type { Geometry, Seed } from '../types';\n\nexport type UiFrameKind = 'control' | 'pill' | 'box' | 'card' | 'round';\n\n/**\n * Each frame kind is drawn once in a square box and cut into slices for the grounds build\n * (DD-022): four corners of `slice` px, and four edges between them when `size > 2 * slice`.\n * `round` and `box` have no edges; they frame fixed-size squares.\n */\nexport const UI_FRAME_KINDS: Readonly<Record<UiFrameKind, Readonly<{ size: number; slice: number; radius: number }>>> =\n /* @__PURE__ */ Object.freeze({\n control: Object.freeze({ size: 24, slice: 8, radius: 2 }),\n pill: Object.freeze({ size: 36, slice: 12, radius: 12 }),\n box: Object.freeze({ size: 16, slice: 8, radius: 2 }),\n card: Object.freeze({ size: 48, slice: 16, radius: 2 }),\n round: Object.freeze({ size: 24, slice: 12, radius: 12 }),\n });\n\n/** A ground generates at most this many frame variants per kind (Data Model §3.8). */\nconst MAX_VARIANTS = 6;\n\n/**\n * The frame variant of a component: from `seed`, else `id`, by the charts' seed rule; `0` with\n * neither (REQ-307, I-21). Never from mount order, randomness or time (Art. 4). `variants` is read\n * as an integer in 1..6.\n */\nexport function uiFrameVariant(seed: Seed | undefined, id: string | undefined, variants: number): number {\n const n = Number.isFinite(variants) ? Math.min(Math.max(Math.floor(variants), 1), MAX_VARIANTS) : 1;\n if (seed === undefined && !id) return 0;\n return resolveSeed(seed, id ?? '') % n;\n}\n\n/** Half the hairline: the outline is inset so its stroke stays inside the box. */\nconst INSET = 0.5;\n\nfunction roundedSquare(size: number, radius: number): string {\n const lo = INSET;\n const hi = size - INSET;\n const r = Math.min(radius, (hi - lo) / 2);\n const arc = (x: number, y: number) => `A${r},${r},0,0,1,${x},${y}`;\n return (\n `M${lo + r},${lo}H${hi - r}${arc(hi, lo + r)}V${hi - r}${arc(hi - r, hi)}` +\n `H${lo + r}${arc(lo, hi - r)}V${lo + r}${arc(lo + r, lo)}Z`\n );\n}\n\n/**\n * The exact outline of a frame kind: the input the grounds build inks, once per variant, into the\n * pieces of `ui.css` (DD-022). It is an `ornament` stroke —a frame carries no value (Art. 1, as\n * amended)— so the ground's inker may draw it by hand, with its vertices preserved. Build time only.\n */\nexport function uiFrameOutline(kind: UiFrameKind): Geometry {\n const { size, radius } = UI_FRAME_KINDS[kind];\n const box = { x: 0, y: 0, width: size, height: size };\n return {\n viewBox: box,\n plot: box,\n strokes: [{ d: roundPathData(roundedSquare(size, radius)), role: 'ornament', part: 'ink' }],\n labels: [],\n hitAreas: [],\n defs: [],\n };\n}\n","import type { Ground, UiTokens } from '../types';\n\n/** The `ui` tokens of a ground that declares none (Data Model §3.8). */\nexport const UI_TOKEN_DEFAULTS: UiTokens = /* @__PURE__ */ Object.freeze({\n frame: 'css',\n frameVariants: 1,\n controlHeight: Object.freeze({ sm: 24, md: 32, lg: 40 }),\n radius: 2,\n focusWidth: 2,\n tone: Object.freeze({ selected: 3, primary: 2, danger: 4, disabled: 1, alertError: 1 }),\n backdrop: 2,\n rowTone: 1,\n});\n\n/** The smallest target WCAG 2.5.8 allows, and the thinnest focus REQ-316 allows. */\nconst MIN_HEIGHT = 24;\nconst MIN_FOCUS = 2;\n\nconst within = (value: number, lo: number, hi: number, fallback: number) =>\n Number.isFinite(value) ? Math.min(Math.max(value, lo), hi) : fallback;\n\ntype Level = 1 | 2 | 3 | 4;\n/** A level of the ramp, 1..4, rounded; the default when unset or not finite. */\nconst level = (value: number | undefined, fallback: Level): Level =>\n value === undefined ? fallback : (Math.round(within(value, 1, 4, fallback)) as Level);\n\n/**\n * A ground's `ui` tokens, or the defaults, held to their domain: heights ≥ 24 px, focus ≥ 2 px,\n * 1..6 variants, backdrop and row tone a level 1..4 (2 and 1 when a section written before\n * feature-004 has none). A `weight` ground has no inker that draws by hand, so its frame is always the\n * exact `css` one with a single variant (DD-022). Pure.\n */\nexport function resolveUiTokens(ground: Ground): UiTokens & { readonly backdrop: Level; readonly rowTone: Level } {\n const ui = ground.ui ?? UI_TOKEN_DEFAULTS;\n const inked = ui.frame === 'inked' && ground.tonalMechanism === 'hatch';\n const { sm, md, lg } = ui.controlHeight;\n return {\n frame: inked ? 'inked' : 'css',\n frameVariants: inked ? Math.round(within(ui.frameVariants, 1, 6, 1)) : 1,\n controlHeight: {\n sm: within(sm, MIN_HEIGHT, Infinity, 24),\n md: within(md, MIN_HEIGHT, Infinity, 32),\n lg: within(lg, MIN_HEIGHT, Infinity, 40),\n },\n radius: within(ui.radius, 0, Infinity, 2),\n focusWidth: within(ui.focusWidth, MIN_FOCUS, Infinity, 2),\n tone: ui.tone,\n backdrop: level(ui.backdrop, 2),\n rowTone: level(ui.rowTone, 1),\n };\n}\n","import { round2 } from '../render/round';\nimport type { Stroke, ToneSpec } from '../types';\n\n/** One repeating layer of a control's tone: a tile the grounds build inks and lays as a CSS mask. */\nexport interface UiToneLayer {\n readonly width: number;\n readonly height: number;\n readonly strokes: readonly Stroke[];\n}\n\nconst RAD = Math.PI / 180;\nconst EPSILON = 1e-6;\n\n/** About this many px of lines per tile side: enough for hand variation, few enough to stay light. */\nconst TILE_SPAN = 24;\n\n/**\n * One family of parallel lines at `angle`, `gap` apart, clipped to the rectangle that is its own\n * period: shifting the tile by its width or its height lands every line on another line of the\n * family, so the tile repeats without a seam although the lines are not axis-aligned (a CSS mask\n * cannot rotate a repeating image, as an SVG pattern can).\n */\nfunction family(gap: number, angle: number): UiToneLayer {\n const sin = Math.sin(angle * RAD);\n const cos = Math.cos(angle * RAD);\n const lines = Math.max(2, Math.round(TILE_SPAN / gap));\n const width = Math.abs(sin) < EPSILON ? lines * gap : (lines * gap) / Math.abs(sin);\n const height = Math.abs(cos) < EPSILON ? lines * gap : (lines * gap) / Math.abs(cos);\n // A point's offset across the family: lines sit at (k + ½)·gap, so none grazes a corner.\n const offset = (x: number, y: number) => -sin * x + cos * y;\n const corners = [offset(0, 0), offset(width, 0), offset(0, height), offset(width, height)];\n const first = Math.ceil(Math.min(...corners) / gap - 0.5);\n const last = Math.floor(Math.max(...corners) / gap - 0.5);\n const strokes: Stroke[] = [];\n for (let k = first; k <= last; k++) {\n const c = (k + 0.5) * gap;\n // Points of the line: c·n + t·d, with n = (−sin, cos) and d = (cos, sin).\n const at = (t: number) => ({ x: -sin * c + cos * t, y: cos * c + sin * t, t });\n const hits = [\n Math.abs(cos) > EPSILON ? [(0 + sin * c) / cos, (width + sin * c) / cos] : [],\n Math.abs(sin) > EPSILON ? [(0 - cos * c) / sin, (height - cos * c) / sin] : [],\n ]\n .flat()\n .map(at)\n .filter((p) => p.x >= -EPSILON && p.x <= width + EPSILON && p.y >= -EPSILON && p.y <= height + EPSILON)\n .sort((a, b) => a.t - b.t);\n const from = hits[0];\n const to = hits.at(-1);\n if (!from || !to || to.t - from.t < EPSILON * 1e3) continue;\n const clamp = (v: number, hi: number) => round2(Math.min(Math.max(v, 0), hi));\n const w = round2(width);\n const h = round2(height);\n strokes.push({\n d: `M${clamp(from.x, w)},${clamp(from.y, h)}L${clamp(to.x, w)},${clamp(to.y, h)}`,\n role: 'ornament',\n part: 'ink',\n });\n }\n return { width: round2(width), height: round2(height), strokes };\n}\n\n/**\n * The tone of a control at one step of a ground's ramp (DD-026, REQ-308): one layer of hachure,\n * two for cross-hatch (each its own period, laid as two mask layers), none for a `weight` step,\n * whose tone is the frame's line weight. Its lines are `ornament`: a tone is not a value, so the\n * ground's inker may draw them by hand, vertices preserved. Build time only. Pure.\n */\nexport function uiToneTile(spec: ToneSpec): readonly UiToneLayer[] {\n if (spec.style === 'weight') return [];\n const layers = [family(spec.gap, spec.angle)];\n if (spec.style === 'cross-hatch') layers.push(family(spec.gap, spec.angle + 90));\n return layers;\n}\n","import { diagnose } from '../diagnostics/diagnose';\n\n/** A page number, or a gap where pages are left out. */\nexport type UiPageEntry = number | 'start-gap' | 'end-gap';\n\nexport interface UiPagination {\n /** Number of pages, at least 1. */\n readonly count: number;\n /** The current page as drawn, 1-based. */\n readonly current: number;\n /** First and last item shown, 1-based; 0 and 0 when there are none. */\n readonly start: number;\n readonly end: number;\n /** An input was not drawable as given. */\n readonly corrected: boolean;\n}\n\nfunction warn(component: string, property: string, message: string): void {\n if (process.env.NODE_ENV !== 'production') diagnose('SP017', component, { property, message });\n}\n\n/**\n * The pages a pagination shows (REQ-476, Data Model §2.27): the first, a gap, a window of\n * `siblings` on each side of `current`, a gap, the last.\n */\nexport function uiPageWindow(count: number, current: number, siblings: number): readonly UiPageEntry[] {\n const first = Math.max(2, current - siblings);\n const last = Math.min(count - 1, current + siblings);\n const pages: UiPageEntry[] = [1];\n if (first > 2) pages.push('start-gap');\n for (let page = first; page <= last; page++) pages.push(page);\n if (last < count - 1) pages.push('end-gap');\n if (count > 1) pages.push(count);\n return pages;\n}\n\n/** Pages, the corrected current page and the `start–end of total` numbers; corrections warn `SP017` (REQ-486). */\nexport function uiPagination(total: number, pageSize: number, current: number, component = 'SpPagination'): UiPagination {\n let corrected = false;\n if (!(Number.isInteger(total) && total >= 0)) {\n warn(component, 'total', `${total} is drawn as 0.`);\n [total, corrected] = [0, true];\n }\n if (!(Number.isInteger(pageSize) && pageSize >= 1)) {\n warn(component, 'pageSize', `${pageSize} is drawn as 10.`);\n [pageSize, corrected] = [10, true];\n }\n const count = Math.max(1, Math.ceil(total / pageSize));\n const page = Number.isFinite(current) ? Math.min(Math.max(Math.round(current), 1), count) : 1;\n if (page !== current) {\n warn(component, 'current', `${current} is drawn as ${page}.`);\n corrected = true;\n }\n return { count, current: page, start: total ? (page - 1) * pageSize + 1 : 0, end: Math.min(total, page * pageSize), corrected };\n}\n","import { diagnose } from '../diagnostics/diagnose';\n\n/** The bounds, step and decimals of a number field; any of them may be absent. */\nexport interface UiNumberRange {\n readonly min?: number;\n readonly max?: number;\n readonly step?: number;\n /** Decimals the value is rounded to. */\n readonly precision?: number;\n}\n\nexport interface UiNumberValue {\n /** The value to render; `null` for an empty field. */\n readonly value: number | null;\n readonly corrected: boolean;\n /** The value sits on a bound: that stepper is disabled (REQ-485). */\n readonly atMin: boolean;\n readonly atMax: boolean;\n /** The range as drawn: invalid bounds, step or precision left out. */\n readonly range: UiNumberRange;\n}\n\nfunction warn(component: string, property: string, message: string): void {\n if (process.env.NODE_ENV !== 'production') diagnose('SP017', component, { property, message });\n}\n\n/** Removes the binary noise that `0.1 + 0.2` leaves. */\nconst tidy = (x: number): number => Number.parseFloat(x.toPrecision(12));\n\n/** The range as drawn: invalid bounds, step or precision left out, warned `SP017` (Data Model §2.27). */\nfunction valid(range: UiNumberRange, component: string): UiNumberRange {\n const drop = (property: string, value: unknown, as: string): undefined => {\n warn(component, property, `${value} is ${as}.`);\n return undefined;\n };\n let min = range.min !== undefined && !Number.isFinite(range.min) ? drop('min', range.min, 'ignored') : range.min;\n let max = range.max !== undefined && !Number.isFinite(range.max) ? drop('max', range.max, 'ignored') : range.max;\n if (min !== undefined && max !== undefined && min > max) min = max = drop('min', `The bounds ${min}..${max}`, 'ignored');\n const { step: s, precision: p } = range;\n const step = s !== undefined && !(Number.isFinite(s) && s > 0) ? (drop('step', s, 'drawn as 1') ?? 1) : s;\n const precision = p !== undefined && !(Number.isInteger(p) && p >= 0 && p <= 15) ? drop('precision', p, 'ignored') : p;\n return { min, max, step, precision };\n}\n\nfunction clamp(value: number, { min, max, precision }: UiNumberRange): number {\n let next = value;\n if (min !== undefined) next = Math.max(min, next);\n if (max !== undefined) next = Math.min(max, next);\n if (precision !== undefined) next = Math.round(tidy(next * 10 ** precision)) / 10 ** precision;\n return tidy(next);\n}\n\n/** A number field's value clamped to `min`/`max` and rounded to `precision`; `null` stays `null` (REQ-485, REQ-486). */\nexport function uiNumberValue(value: number | null, range: UiNumberRange, component = 'SpInputNumber'): UiNumberValue {\n const r = valid(range, component);\n if (value === null) return { value: null, corrected: false, atMin: false, atMax: false, range: r };\n const next = Number.isFinite(value) ? clamp(value, r) : clamp(r.min ?? 0, r);\n if (next !== value) warn(component, 'value', `${value} is drawn as ${next}.`);\n return { value: next, corrected: next !== value, atMin: r.min !== undefined && next <= r.min, atMax: r.max !== undefined && next >= r.max, range: r };\n}\n\n/** One stepper press: `value ± step` from the value, else from `min ?? 0`, then clamped and rounded (REQ-485). */\nexport function uiNumberStep(value: number | null, direction: 1 | -1, range: UiNumberRange, component = 'SpInputNumber'): number {\n const r = valid(range, component);\n const base = value !== null && Number.isFinite(value) ? value : (r.min ?? 0);\n return clamp(base + direction * (r.step ?? 1), r);\n}\n","/** An avatar's initials (REQ-478): the first letters of the first two words, upper-cased; '?' for none. */\nexport function uiInitials(name: string | undefined): string {\n const words = (name ?? '').replace(/-/g, ' ').split(/\\s+/).filter(Boolean);\n return words.slice(0, 2).map((word) => [...word][0]!.toUpperCase()).join('') || '?';\n}\n","/** The state an open or closed list overlay keeps: its active (highlighted) item and which are disabled. */\nexport interface UiListState {\n /** The active item; `-1` when none is. */\n readonly active: number;\n readonly count: number;\n readonly disabled: readonly boolean[];\n readonly open: boolean;\n}\n\n/** The next active item, and what the adapter does: open the list, close it, or select the active item and close. */\nexport interface UiListResult {\n readonly active: number;\n readonly intent?: 'open' | 'close' | 'select';\n}\n\n/** The first enabled index from `from` in steps of `step`, `-1` if none (no wrap). */\nfunction seek(state: UiListState, from: number, step: 1 | -1): number {\n for (let i = from; i >= 0 && i < state.count; i += step) if (state.disabled[i] !== true) return i;\n return -1;\n}\n\nconst first = (s: UiListState) => seek(s, 0, 1);\nconst last = (s: UiListState) => seek(s, s.count - 1, -1);\nconst enabled = (s: UiListState, i: number) => i >= 0 && i < s.count && s.disabled[i] !== true;\n\n/** One arrow step: the next enabled item, wrapping in a menu and stopping at the ends in a listbox. */\nfunction arrow(state: UiListState, step: 1 | -1, wrap: boolean): number {\n const { active, count } = state;\n if (active < 0 || active >= count) return step > 0 ? first(state) : last(state);\n const next = seek(state, active + step, step);\n if (next >= 0) return next;\n return wrap ? (step > 0 ? first(state) : last(state)) : active;\n}\n\n/** Ten items on, held to the enabled ends (APG listbox, PageUp / PageDown). */\nfunction page(state: UiListState, step: 1 | -1): number {\n const target = Math.min(Math.max((state.active < 0 ? 0 : state.active) + 10 * step, 0), state.count - 1);\n const found = seek(state, target, step);\n return found >= 0 ? found : seek(state, target, step > 0 ? -1 : 1);\n}\n\n/**\n * The WAI-ARIA APG transitions of a select-only combobox (`listbox`, REQ-494) and a menu button\n * (`menu`, REQ-495), as a pure function of state and key (DD-039). Disabled items are skipped and\n * never selected (REQ-326); a move with no enabled item to go to keeps the active one.\n */\nexport function uiListKey(state: UiListState, key: string, kind: 'listbox' | 'menu'): UiListResult {\n const { active } = state;\n const keep = (i: number) => (i < 0 ? active : i);\n if (!state.open) {\n if (key === 'Home') return { active: keep(first(state)), intent: 'open' };\n if (key === 'End') return { active: keep(last(state)), intent: 'open' };\n if (kind === 'menu' && key === 'ArrowUp') return { active: keep(last(state)), intent: 'open' };\n if (['ArrowDown', 'ArrowUp', 'Enter', ' '].includes(key)) {\n const start = kind === 'listbox' && enabled(state, active) ? active : first(state);\n return { active: keep(start), intent: 'open' };\n }\n return { active };\n }\n switch (key) {\n case 'ArrowDown':\n return { active: keep(arrow(state, 1, kind === 'menu')) };\n case 'ArrowUp':\n return { active: keep(arrow(state, -1, kind === 'menu')) };\n case 'Home':\n return { active: keep(first(state)) };\n case 'End':\n return { active: keep(last(state)) };\n case 'PageDown':\n case 'PageUp':\n return kind === 'listbox' ? { active: keep(page(state, key === 'PageDown' ? 1 : -1)) } : { active };\n case 'Enter':\n case ' ':\n return { active, intent: enabled(state, active) ? 'select' : 'close' };\n case 'Tab':\n return { active, intent: kind === 'listbox' && enabled(state, active) ? 'select' : 'close' };\n case 'Escape':\n return { active, intent: 'close' };\n default:\n return { active };\n }\n}\n\n/**\n * Typeahead (REQ-494): the first enabled label that starts with `buffer`, searching from the item\n * after `from` for one character (so repeating it cycles) and from `from` itself for several (so\n * typing on stays put), wrapping; case-insensitive; `-1` when none matches. Pure.\n */\nexport function uiTypeahead(labels: readonly string[], disabled: readonly boolean[], buffer: string, from: number): number {\n const typed = buffer.toLowerCase();\n if (!typed) return -1;\n const single = [...typed].every((c) => c === typed[0]);\n const prefix = single ? typed[0]! : typed;\n const count = labels.length;\n const start = single ? from + 1 : Math.max(from, 0);\n for (let n = 0; n < count; n++) {\n const i = (((start + n) % count) + count) % count;\n if (disabled[i] !== true && labels[i]!.trim().toLowerCase().startsWith(prefix)) return i;\n }\n return -1;\n}\n","import { round2 } from '../render/round';\n\n/** A box in viewport coordinates (`getBoundingClientRect`). */\nexport interface UiBox {\n readonly x: number;\n readonly y: number;\n readonly width: number;\n readonly height: number;\n}\n\n/** Logical sides: `start` and `end` are left and right in `ltr`, mirrored in `rtl` (REQ-523). */\nexport type UiSide = 'top' | 'end' | 'bottom' | 'start';\nexport type UiAlign = 'start' | 'center' | 'end';\n\nexport interface UiPlaceInput {\n readonly anchor: UiBox;\n readonly floating: { readonly width: number; readonly height: number };\n readonly viewport: { readonly width: number; readonly height: number };\n readonly side: UiSide;\n readonly align: UiAlign;\n /** Gap between the anchor and the overlay, px. */\n readonly offset: number;\n /** The overlay keeps this far from the viewport's edges, px. */\n readonly padding: number;\n readonly dir: 'ltr' | 'rtl';\n}\n\nexport interface UiPlacement {\n /** The overlay's top-left corner, viewport px, 2 decimals. */\n readonly x: number;\n readonly y: number;\n /** The side it ended on, after any flip. */\n readonly side: UiSide;\n readonly align: UiAlign;\n}\n\nconst OPPOSITE: Readonly<Record<UiSide, UiSide>> = { top: 'bottom', bottom: 'top', start: 'end', end: 'start' };\n\n/** Held into `[padding, size − padding − extent]`, or at `padding` when it cannot fit. */\nconst shift = (at: number, extent: number, size: number, padding: number) => Math.max(padding, Math.min(at, size - padding - extent));\n\n/**\n * Where an anchored overlay goes (REQ-493, I-35): on the preferred side of its anchor, flipped to the\n * opposite side when it does not fit there and fits there, aligned along the side, then shifted to\n * stay in the viewport. Pure.\n */\nexport function uiPlace(input: UiPlaceInput): UiPlacement {\n const { anchor: a, floating: f, viewport: v, align, offset, padding, dir } = input;\n const vertical = (side: UiSide) => side === 'top' || side === 'bottom';\n /** The physical left/right of a logical side. */\n const isLeft = (side: UiSide) => (side === 'start') === (dir === 'ltr');\n const main = (side: UiSide): number => {\n if (side === 'bottom') return a.y + a.height + offset;\n if (side === 'top') return a.y - offset - f.height;\n return isLeft(side) ? a.x - offset - f.width : a.x + a.width + offset;\n };\n const fits = (side: UiSide): boolean => {\n const at = main(side);\n const [extent, size] = vertical(side) ? [f.height, v.height] : [f.width, v.width];\n return at >= padding && at + extent <= size - padding;\n };\n const side = !fits(input.side) && fits(OPPOSITE[input.side]) ? OPPOSITE[input.side] : input.side;\n if (vertical(side)) {\n // Along a horizontal side, `start` is the reading start: the left edge in ltr, the right in rtl.\n const fromLeft = align === 'center' ? null : (align === 'start') === (dir === 'ltr');\n const x = fromLeft === null ? a.x + (a.width - f.width) / 2 : fromLeft ? a.x : a.x + a.width - f.width;\n return { x: round2(shift(x, f.width, v.width, padding)), y: round2(main(side)), side, align };\n }\n const y = align === 'center' ? a.y + (a.height - f.height) / 2 : align === 'start' ? a.y : a.y + a.height - f.height;\n return { x: round2(main(side)), y: round2(shift(y, f.height, v.height, padding)), side, align };\n}\n","import { uiPlace, type UiAlign, type UiSide } from './place';\n\n/** A measured rectangle, in viewport pixels. */\ninterface UiRect {\n readonly x: number;\n readonly y: number;\n readonly width: number;\n readonly height: number;\n}\n\n/** The window an overlay is placed in, as much of it as this reads; the core has no DOM types. */\ninterface UiAnchorView {\n readonly innerWidth: number;\n readonly innerHeight: number;\n addEventListener(type: string, listener: () => void, options?: boolean | { readonly capture?: boolean; readonly passive?: boolean }): void;\n removeEventListener(type: string, listener: () => void, options?: boolean | { readonly capture?: boolean }): void;\n /** Absent in an engine without it: the overlay is then placed on scroll and resize only. */\n readonly ResizeObserver?: new (callback: () => void) => { observe(target: never): void; disconnect(): void };\n}\n\n/** The trigger an overlay hangs from. */\nexport interface UiAnchorTarget {\n getBoundingClientRect(): UiRect;\n closest(selector: string): { getAttribute(name: string): string | null } | null;\n}\n\n/** The overlay: measured, then given `--sp-ui-x`, `--sp-ui-y` and `data-side`. */\nexport interface UiAnchorFloating {\n getBoundingClientRect(): UiRect;\n setAttribute(name: string, value: string): void;\n readonly style: { setProperty(name: string, value: string): void };\n readonly ownerDocument: { readonly defaultView: UiAnchorView | null } | null;\n}\n\nexport interface UiAnchorOptions {\n readonly side: UiSide;\n readonly align: UiAlign;\n /** Gap between the trigger and the overlay, px (`6`). */\n readonly offset?: number;\n /** Least distance to the viewport's edges, px (`8`). */\n readonly padding?: number;\n}\n\n/**\n * The DOM side of an anchored overlay, as `uiRovingFocus` is for REQ-315 (REQ-493): measures the\n * trigger and the overlay, places it with `uiPlace` in the nearest `dir`, and writes `--sp-ui-x`,\n * `--sp-ui-y` and `data-side`; again on every scroll and resize, and whenever the trigger or the\n * overlay changes size (a web font replacing its fallback), until the returned cleanup runs.\n * Client only, on open.\n */\nexport function uiAnchor(anchor: UiAnchorTarget, floating: UiAnchorFloating, options: UiAnchorOptions): () => void {\n const view = floating.ownerDocument?.defaultView;\n if (!view) return () => {};\n const place = () => {\n const { width, height } = floating.getBoundingClientRect();\n const at = uiPlace({\n anchor: anchor.getBoundingClientRect(),\n floating: { width, height },\n viewport: { width: view.innerWidth, height: view.innerHeight },\n side: options.side,\n align: options.align,\n offset: options.offset ?? 6,\n padding: options.padding ?? 8,\n dir: anchor.closest('[dir]')?.getAttribute('dir') === 'rtl' ? 'rtl' : 'ltr',\n });\n floating.style.setProperty('--sp-ui-x', `${at.x}px`);\n floating.style.setProperty('--sp-ui-y', `${at.y}px`);\n floating.setAttribute('data-side', at.side);\n };\n place();\n // Capturing, so the scroll of any scroller between the trigger and the window re-places too.\n view.addEventListener('scroll', place, { capture: true, passive: true });\n view.addEventListener('resize', place);\n const sized = view.ResizeObserver ? new view.ResizeObserver(place) : undefined;\n sized?.observe(anchor as never);\n sized?.observe(floating as never);\n return () => {\n view.removeEventListener('scroll', place, { capture: true });\n view.removeEventListener('resize', place);\n sized?.disconnect();\n };\n}\n","/** How an overlay opens: `showModal()`, `show()`, or the Popover API (DD-038). */\nexport type UiOverlayKind = 'modal' | 'dialog' | 'popover';\n\n/** A `<dialog>` or a `[popover]` element, as much of it as this reads; the core has no DOM types. */\nexport interface UiOverlayElement {\n readonly open?: boolean;\n showModal?(): void;\n show?(): void;\n close?(): void;\n showPopover?(): void;\n hidePopover?(): void;\n matches(selector: string): boolean;\n}\n\n/** Whether a popover is showing; an engine that cannot parse the pseudo-class has none showing. */\nfunction showing(element: UiOverlayElement): boolean {\n try {\n return element.matches(':popover-open');\n } catch {\n return false;\n }\n}\n\n/**\n * Opens or closes a native overlay as its state says (REQ-491, REQ-492): `showModal()` or `show()`\n * and `close()` for a `<dialog>`, `showPopover()` and `hidePopover()` for a popover, each only when\n * the element is in the other state, so no second `close` or `toggle` event is fired. Without the\n * Popover API the popover stays in the page's flow. Client only, after mount (REQ-502).\n */\nexport function uiOverlaySync(element: UiOverlayElement, kind: UiOverlayKind, open: boolean): void {\n if (kind === 'popover') {\n if (typeof element.showPopover !== 'function') return;\n if (open !== showing(element)) {\n if (open) element.showPopover();\n else element.hidePopover?.();\n }\n return;\n }\n if (open && !element.open) {\n if (kind === 'modal') element.showModal?.();\n else element.show?.();\n } else if (!open && element.open) element.close?.();\n}\n","import { DEFAULTS } from '../config/resolve';\nimport { paletteStyle, resolvePalette } from '../palette/palette';\nimport type { InkMode, ProviderConfig, SubstrateName } from '../types';\nimport { uiFrameVariant } from './frame';\nimport { uiRequireName } from './names';\nimport type {\n CommonUiProps,\n SpButtonProps,\n SpCardProps,\n SpCheckboxProps,\n SpDividerProps,\n SpInputProps,\n SpSwitchProps,\n UiSize,\n} from './types';\nimport { baseOf, el, frame, glyph, headingTag, root, safeHref, slot, text, tone } from './view-kit';\n\nexport { UI_GLYPHS, type UiGlyph } from './view-kit';\n\n/**\n * The markup contract of the UI components (API delta §4), as data: every adapter writes this tree\n * and nothing else, and the parity gate compares each adapter's server render with it (REQ-327).\n * An adapter binds behaviour —value, events, forms— to the elements marked `bind`, and puts the\n * consumer's content where a `slot` stands. It computes nothing (Art. 2).\n */\nexport type UiAttrValue = string | true;\n\nexport interface UiElement {\n readonly tag: string;\n /** HTML attribute names; `true` is a boolean attribute. */\n readonly attrs: Readonly<Record<string, UiAttrValue>>;\n readonly children: readonly UiNode[];\n /** What an adapter binds to the element: see `UiBind`. */\n readonly bind?: UiBind;\n}\n\n/**\n * `native`: a control an adapter binds value, events and forms to —one, or one per item of a\n * composite, told apart by its `value` or `data-key`. `close`: the button that emits `close`.\n * `sort`, `page`, `stepper`: a Table header (`data-key`), a Pagination button (`data-page`), an\n * InputNumber stepper (`data-step`); `summary`: a CollapseItem's toggle; `trigger`, `dialog`,\n * `popover`, `option`, `menuitem`: the parts of an overlay (TD §2).\n */\nexport type UiBind = 'native' | 'close' | 'trigger' | 'dialog' | 'popover' | 'option' | 'menuitem' | 'sort' | 'page' | 'stepper' | 'summary' | 'probe' | 'mount';\n\nexport type UiSlot = 'content' | 'prefix' | 'suffix' | 'extra' | 'footer' | 'trigger' | 'action' | 'fallback';\nexport type UiNode = UiElement | { readonly text: string } | { readonly slot: UiSlot };\n\n/** What a component inherits around it: the provider, the dashboard cell, the environment. */\nexport interface UiEnvironment {\n readonly provider?: ProviderConfig;\n /** The configuration of the dashboard whose cell holds the component (REQ-311). */\n readonly cell?: ProviderConfig;\n /** `prefers-contrast: more` or `forced-colors: active` holds (REQ-123). */\n readonly forcedPrecision?: boolean;\n}\n\nexport interface UiResolved {\n readonly ground: string;\n readonly substrate: SubstrateName;\n readonly mode: InkMode;\n readonly size: UiSize;\n /** 0..5: `ui.css` folds it onto the variants the ground draws. */\n readonly frame: number;\n /** The resolved palette's declarations, first in the root's `style`; '' for none (REQ-461). */\n readonly palette?: string;\n}\n\n/** The most frame variants a ground may draw (Data Model §3.8); the runtime needs no ground tokens. */\nconst FRAME_SLOTS = 6;\n\n/**\n * Ground, substrate, mode and palette with the charts' precedence: prop, then dashboard, then provider,\n * then the library default; a forced `precision` applies after, and nothing overrides it (REQ-311).\n */\nexport function resolveUi(props: CommonUiProps, env: UiEnvironment): UiResolved {\n const { provider = {}, cell = {} } = env;\n const ground = props.ground ?? cell.ground ?? provider.ground ?? DEFAULTS.ground;\n return {\n ground: typeof ground === 'string' ? ground : ground.name,\n substrate: props.substrate ?? cell.substrate ?? provider.substrate ?? DEFAULTS.substrate,\n mode: env.forcedPrecision ? 'precision' : (props.mode ?? cell.mode ?? provider.mode ?? DEFAULTS.mode),\n size: props.size ?? 'md',\n frame: uiFrameVariant(props.seed, props.id, FRAME_SLOTS),\n // Colours are not mode: a forced precision leaves them as resolved (REQ-468).\n palette: paletteStyle(resolvePalette(provider.palette, cell.palette, props.palette)),\n };\n}\n\n/** `SpButton`: a native `<button>`, or `<a>` with `href` (REQ-314, REQ-310). */\nexport function uiButtonView(props: SpButtonProps, r: UiResolved, content: { readonly text?: string }): UiElement {\n uiRequireName('SpButton', content.text, props.label);\n const variant = props.variant ?? 'default';\n const href = safeHref(props.href, 'SpButton');\n const link = href !== undefined;\n const toned = props.disabled ? 'disabled' : variant === 'default' ? undefined : variant;\n return el(\n link ? 'a' : 'button',\n root('button', props, r, {\n id: props.id,\n type: link ? undefined : (props.type ?? 'button'),\n href: link && !props.disabled ? href : undefined,\n disabled: !link && props.disabled === true,\n 'aria-disabled': link && props.disabled ? 'true' : undefined,\n 'aria-label': props.label,\n 'data-variant': variant,\n 'data-block': props.block ? 'true' : undefined,\n }),\n [\n frame('control'),\n ...(toned ? [tone(toned, 'control')] : []),\n ...(variant === 'danger' ? [glyph('cross')] : []),\n el('span', { class: toned ? 'sp-ui-label sp-ui-plate' : 'sp-ui-label' }, [slot('content')]),\n ],\n );\n}\n\n/** `SpInput`: a native `<input>` in a framed box, its message after it (REQ-314, REQ-334). */\nexport function uiInputView(\n props: SpInputProps,\n r: UiResolved,\n state: { readonly value: string; readonly prefix?: boolean; readonly suffix?: boolean },\n): UiElement {\n const base = baseOf(props);\n const message = props.message ? props.message : undefined;\n const messageId = message && base ? `${base}--message` : undefined;\n return el('span', root('input', props, r, { 'data-invalid': props.invalid ? 'true' : undefined }), [\n el('span', { class: 'sp-ui-box' }, [\n frame('control'),\n ...(state.prefix ? [el('span', { class: 'sp-ui-affix', 'data-slot': 'prefix' }, [slot('prefix')])] : []),\n el(\n 'input',\n {\n class: 'sp-ui-control',\n id: props.id,\n type: props.type ?? 'text',\n name: props.name,\n value: state.value,\n placeholder: props.placeholder,\n disabled: props.disabled === true,\n readonly: props.readOnly === true,\n 'aria-label': props.label,\n 'aria-invalid': props.invalid ? 'true' : undefined,\n 'aria-describedby': messageId,\n },\n [],\n 'native',\n ),\n ...(state.suffix ? [el('span', { class: 'sp-ui-affix', 'data-slot': 'suffix' }, [slot('suffix')])] : []),\n ...(props.invalid ? [glyph('warning')] : []),\n ]),\n ...(message ? [el('span', { class: 'sp-ui-message', id: messageId }, [text(message)])] : []),\n ]);\n}\n\n/** A native checkbox, hidden for sight, first in its `<label>` (REQ-314). */\nfunction nativeCheckbox(props: { readonly id?: string; readonly name?: string; readonly disabled?: boolean }, checked: boolean, role?: 'switch') {\n return el(\n 'input',\n { type: 'checkbox', class: 'sp-ui-native', role, id: props.id, name: props.name, checked, disabled: props.disabled === true },\n [],\n 'native',\n );\n}\n\n/** `SpCheckbox`: native state; the tick and dash are drawn and shown by it (REQ-310). */\nexport function uiCheckboxView(props: SpCheckboxProps, r: UiResolved, state: { readonly checked: boolean }): UiElement {\n return el('label', root('checkbox', props, r, { 'data-indeterminate': props.indeterminate ? 'true' : undefined }), [\n nativeCheckbox(props, state.checked),\n el('span', { class: 'sp-ui-box', 'aria-hidden': 'true' }, [frame('box'), tone('selected', 'box'), glyph('tick'), glyph('dash')]),\n el('span', { class: 'sp-ui-label' }, [text(props.label)]),\n ]);\n}\n\n/** `SpSwitch`: a native checkbox with `role=\"switch\"`, a pill track and an exact knob (REQ-314). */\nexport function uiSwitchView(props: SpSwitchProps, r: UiResolved, state: { readonly checked: boolean }): UiElement {\n return el('label', root('switch', props, r), [\n nativeCheckbox(props, state.checked, 'switch'),\n el('span', { class: 'sp-ui-track', 'aria-hidden': 'true' }, [frame('pill'), tone('selected', 'pill'), el('span', { part: 'sp-knob' })]),\n el('span', { class: 'sp-ui-label' }, [text(props.label)]),\n ]);\n}\n\n/** `SpCard`: an `<article>` named by its heading, or a `<section>` without a title (REQ-318). */\nexport function uiCardView(props: SpCardProps, r: UiResolved, slots: { readonly extra?: boolean; readonly footer?: boolean }): UiElement {\n const titled = props.title !== undefined;\n const titleId = titled && props.id ? `${props.id}--title` : undefined;\n const header = titled || slots.extra;\n return el(\n titled ? 'article' : 'section',\n root('card', props, r, { id: props.id, 'aria-labelledby': titleId, 'aria-label': titled && !titleId ? props.title : undefined }),\n [\n frame('card'),\n ...(header\n ? [\n el('div', { class: 'sp-ui-card-header' }, [\n ...(titled ? [el(headingTag(props.headingLevel, 'SpCard'), { class: 'sp-ui-card-title', id: titleId }, [text(props.title!)])] : []),\n ...(slots.extra ? [el('div', { class: 'sp-ui-card-extra' }, [slot('extra')])] : []),\n ]),\n el('span', { part: 'sp-rule', 'aria-hidden': 'true' }),\n ]\n : []),\n el('div', { class: 'sp-ui-card-body' }, [slot('content')]),\n ...(slots.footer ? [el('div', { class: 'sp-ui-card-footer' }, [slot('footer')])] : []),\n ],\n );\n}\n\n/** `SpDivider`: a `separator`; with text, the text between two rules (REQ-318). */\nexport function uiDividerView(props: SpDividerProps, r: UiResolved): UiElement {\n const vertical = props.orientation === 'vertical';\n const rule = () => el('span', { part: 'sp-rule', 'aria-hidden': 'true' });\n return el(\n 'div',\n root('divider', props, r, {\n id: props.id,\n role: 'separator',\n 'aria-orientation': vertical ? 'vertical' : undefined,\n 'data-orientation': vertical ? 'vertical' : 'horizontal',\n 'data-align': props.text ? (props.align ?? 'center') : undefined,\n }),\n props.text ? [rule(), el('span', { class: 'sp-ui-divider-text' }, [text(props.text)]), rule()] : [rule()],\n );\n}\n","import { round2 } from '../render/round';\nimport { uiItems, uiSelectedKey } from './items';\nimport type { SpRadioGroupProps, SpRateProps, SpSegmentedProps, SpSliderProps, SpTabsProps } from './types';\nimport { uiRange, uiRateCount, uiValue } from './value';\nimport { el, frame, glyph, nativeInput, root, slot, text, tone } from './view-kit';\nimport type { UiElement, UiResolved } from './view';\n\n/*\n * Batch B2 (API delta §4): the composites and the ranges. Every composite of radios keeps one tab\n * stop natively; the adapters move focus with `uiRovingKey` (REQ-315). The one heightened element\n * of an instance (REQ-309, I-18) is an `aria-hidden` plate behind the current item's label.\n */\n\nconst heighten = () => el('span', { part: 'sp-heighten', 'aria-hidden': 'true' });\nconst legend = (label: string, forSight: boolean) => el('legend', { class: forSight ? 'sp-ui-legend' : 'sp-ui-legend sp-ui-sr' }, [text(label)]);\n/** Radios without a `name` group under `${id}--value`, so two anonymous instances never share one. */\nconst groupName = (props: { readonly id?: string; readonly name?: string }) => props.name ?? (props.id ? `${props.id}--value` : undefined);\n\n/** `SpRadioGroup`: a `<fieldset>` of native radios; the value `null` checks none (REQ-314, REQ-322). */\nexport function uiRadioGroupView(props: SpRadioGroupProps, r: UiResolved, state: { readonly value: string | null }): UiElement {\n const items = uiItems(props.items, 'SpRadioGroup');\n const value = uiSelectedKey(items, state.value, 'none');\n return el('fieldset', root('radio-group', props, r, { id: props.id, 'data-orientation': props.orientation ?? 'vertical' }), [\n legend(props.label, true),\n ...items.map((item) =>\n el('label', { class: 'sp-ui-item', 'data-key': item.key, 'data-disabled': item.disabled ? 'true' : undefined }, [\n nativeInput('radio', {\n id: props.id ? `${props.id}--${item.key}` : undefined,\n name: props.name,\n value: item.key,\n checked: item.key === value,\n disabled: item.disabled === true,\n }),\n el('span', { class: 'sp-ui-box', 'aria-hidden': 'true' }, [frame('round'), tone('selected', 'round'), glyph('dot')]),\n el('span', { class: 'sp-ui-label' }, [text(item.label)]),\n ]),\n ),\n ]);\n}\n\n/** `SpSegmented`: native radios in one frame; the selected segment toned and heightened (REQ-308, REQ-309). */\nexport function uiSegmentedView(props: SpSegmentedProps, r: UiResolved, state: { readonly value: string | null }): UiElement {\n const items = uiItems(props.items, 'SpSegmented');\n const value = uiSelectedKey(items, state.value, 'first');\n const name = groupName(props);\n return el('fieldset', root('segmented', props, r, { id: props.id, 'data-block': props.block ? 'true' : undefined }), [\n legend(props.label, false),\n el('span', { class: 'sp-ui-segments' }, [\n frame('control'),\n ...items.map((item) => {\n const selected = item.key === value;\n return el('label', { class: 'sp-ui-item', 'data-key': item.key, 'data-disabled': item.disabled ? 'true' : undefined }, [\n nativeInput('radio', { name, value: item.key, checked: selected, disabled: item.disabled === true }),\n el('span', { class: 'sp-ui-segment' }, [\n ...(selected ? [tone('selected', 'control'), heighten()] : []),\n el('span', { class: selected ? 'sp-ui-label sp-ui-plate' : 'sp-ui-label' }, [text(item.label)]),\n ]),\n ]);\n }),\n ]),\n ]);\n}\n\n/** `SpTabs`: a tablist of native buttons, one tab stop on the selected; panels are the content (REQ-314, REQ-315). */\nexport function uiTabsView(props: SpTabsProps, r: UiResolved, state: { readonly value: string | null }): UiElement {\n const items = uiItems(props.items, 'SpTabs');\n const value = uiSelectedKey(items, state.value, 'first');\n const vertical = props.orientation === 'vertical';\n const id = props.id;\n return el('div', root('tabs', props, r, { id, 'data-orientation': vertical ? 'vertical' : 'horizontal' }), [\n el('div', { class: 'sp-ui-tablist', role: 'tablist', 'aria-label': props.label, 'aria-orientation': vertical ? 'vertical' : undefined }, [\n ...items.map((item) => {\n const selected = item.key === value;\n return el(\n 'button',\n {\n type: 'button',\n class: 'sp-ui-tab',\n role: 'tab',\n id: id ? `${id}--tab-${item.key}` : undefined,\n 'aria-selected': selected ? 'true' : 'false',\n 'aria-controls': id ? `${id}--panel-${item.key}` : undefined,\n tabindex: selected ? '0' : '-1',\n disabled: item.disabled === true,\n 'data-key': item.key,\n },\n [...(selected ? [heighten()] : []), el('span', { class: 'sp-ui-label' }, [text(item.label)])],\n 'native',\n );\n }),\n el('span', { part: 'sp-rule', 'aria-hidden': 'true' }),\n ]),\n el('div', { class: 'sp-ui-tabpanels' }, [slot('content')]),\n ]);\n}\n\n/**\n * `SpTabPanel`: a `tabpanel` labelled by its tab, focusable, hidden unless its tab is selected.\n * `tabs` is what the enclosing `SpTabs` shares: its `id` and the selected key.\n */\nexport function uiTabPanelView(props: { readonly value: string }, tabs: { readonly id?: string; readonly value: string | null }): UiElement {\n const { id } = tabs;\n return el(\n 'div',\n {\n class: 'sp-ui-tabpanel',\n role: 'tabpanel',\n id: id ? `${id}--panel-${props.value}` : undefined,\n 'aria-labelledby': id ? `${id}--tab-${props.value}` : undefined,\n tabindex: '0',\n hidden: props.value !== tabs.value,\n },\n [slot('content')],\n );\n}\n\n/**\n * `SpSlider`: a native range over the drawing. Its fraction is a custom property (DD-025): fill\n * and thumb sit at it exactly; the thumb is the one heightening (REQ-309).\n */\nexport function uiSliderView(props: SpSliderProps, r: UiResolved, state: { readonly value: number }): UiElement {\n // An invalid range falls back to its defaults once, and the native input carries the same.\n const valid = uiRange({ min: props.min ?? 0, max: props.max ?? 100, step: props.step ?? 1 }, 'SpSlider');\n const { value, fraction } = uiValue(state.value, valid, 'SpSlider');\n const span = valid.max - valid.min;\n const marks = (props.marks ?? []).filter((m) => Number.isFinite(m) && m >= valid.min && m <= valid.max);\n return el('label', root('slider', props, r, { style: `--sp-ui-fraction: ${fraction}`, 'data-disabled': props.disabled ? 'true' : undefined }), [\n el('span', { class: 'sp-ui-label' }, [text(props.label)]),\n el('span', { class: 'sp-ui-rail' }, [\n el('span', { part: 'sp-track', 'aria-hidden': 'true' }),\n el('span', { part: 'sp-fill', 'aria-hidden': 'true' }, [tone('selected', 'pill')]),\n el('span', { part: 'sp-thumb sp-heighten', 'aria-hidden': 'true' }),\n el(\n 'input',\n {\n type: 'range',\n class: 'sp-ui-range',\n id: props.id,\n name: props.name,\n min: String(valid.min),\n max: String(valid.max),\n step: String(valid.step ?? 1),\n value: String(value),\n disabled: props.disabled === true,\n },\n [],\n 'native',\n ),\n ]),\n ...(marks.length\n ? [\n el(\n 'span',\n { class: 'sp-ui-scale', 'aria-hidden': 'true' },\n marks.map((m) => el('span', { class: 'sp-ui-scale-mark', style: `--sp-ui-at: ${round2((m - valid.min) / span)}` }, [text(String(m))])),\n ),\n ]\n : []),\n ]);\n}\n\n/** `SpRate`: `count` native radios valued 1..count, drawn as exact lozenges; filled up to the value (C-2). */\nexport function uiRateView(props: SpRateProps, r: UiResolved, state: { readonly value: number }): UiElement {\n const count = uiRateCount(props.count);\n const { value } = uiValue(state.value, { min: 0, max: count, step: 1 }, 'SpRate');\n const name = groupName(props);\n const readOnly = props.readOnly === true;\n return el(\n 'fieldset',\n root('rate', props, r, {\n id: props.id,\n role: readOnly ? 'radiogroup' : undefined,\n 'aria-readonly': readOnly ? 'true' : undefined,\n 'data-readonly': readOnly ? 'true' : undefined,\n }),\n [\n legend(props.label, false),\n ...Array.from({ length: count }, (_, i) => {\n const n = i + 1;\n const filled = n <= value;\n return el('label', { class: 'sp-ui-item', 'data-filled': filled ? 'true' : undefined }, [\n nativeInput('radio', { name, value: String(n), checked: n === value, disabled: props.disabled === true, 'aria-label': String(n) }),\n el('span', { class: 'sp-ui-box', 'aria-hidden': 'true' }, [...(filled ? [tone('selected', 'round')] : []), glyph('lozenge')]),\n ]);\n }),\n ],\n );\n}\n","import { uiRequireName } from './names';\nimport { uiProgressArc, UI_PROGRESS_VIEWBOX } from './progress';\nimport { uiSteps } from './steps';\nimport type { AlertKind, SpAlertProps, SpBadgeProps, SpProgressProps, SpSkeletonProps, SpStepsProps, SpTagProps } from './types';\nimport { uiValue } from './value';\nimport { el, frame, glyph, root, slot, sr, text, tone, type UiGlyph } from './view-kit';\nimport type { UiElement, UiResolved } from './view';\n\n/*\n * Batch B3 (API delta §4): display and feedback. Their roles are REQ-318's; nothing here takes\n * focus but the close buttons of Tag and Alert.\n */\n\nconst closeButton = (label: string) =>\n el('button', { type: 'button', class: 'sp-ui-close', 'aria-label': label }, [glyph('cross')], 'close');\n\n/** `SpSteps`: an ordered list; the current step has `aria-current=\"step\"` and the heightening (REQ-318, REQ-309). */\nexport function uiStepsView(props: SpStepsProps, r: UiResolved): UiElement {\n const steps = uiSteps(props.items, props.current);\n const titles = new Map(props.items.map((item) => [item.key, item] as const));\n return el(\n 'ol',\n root('steps', props, r, { id: props.id, 'aria-label': props.label, 'data-orientation': props.orientation === 'vertical' ? 'vertical' : 'horizontal' }),\n steps.map((step, i) => {\n const item = titles.get(step.key)!;\n const mark = step.status === 'finish' ? glyph('tick') : step.status === 'error' ? glyph('cross') : text(String(i + 1));\n return el('li', { class: 'sp-ui-step', 'data-status': step.status, 'aria-current': step.current ? 'step' : undefined }, [\n el('span', { class: 'sp-ui-step-mark', part: step.current ? 'sp-heighten' : undefined, 'aria-hidden': 'true' }, [mark]),\n el('span', { class: 'sp-ui-step-text' }, [\n el('span', { class: 'sp-ui-step-title' }, [text(item.title)]),\n ...(item.description ? [el('span', { class: 'sp-ui-step-description' }, [text(item.description)])] : []),\n ]),\n // Exact, dashed while it leads to a step still waiting (C-4, DD-026).\n ...(step.connector ? [el('span', { part: 'sp-connector', 'data-status': step.connector, 'aria-hidden': 'true' })] : []),\n ]);\n }),\n );\n}\n\n/** `SpTag`: framed and toned at its level (default 1); closable, a native close button (REQ-308). */\nexport function uiTagView(props: SpTagProps, r: UiResolved, content: { readonly text?: string }): UiElement {\n const level = String(props.tone ?? 1);\n const label = props.closeLabel ?? (content.text ? `Remove ${content.text}` : 'Remove');\n return el('span', root('tag', props, r, { id: props.id, 'data-tone': level }), [\n frame('control'),\n tone(level, 'control'),\n el('span', { class: 'sp-ui-label sp-ui-plate' }, [slot('content')]),\n ...(props.closable ? [closeButton(label)] : []),\n ]);\n}\n\n/** `SpBadge`: its count is text beside the content, so it is in the accessible name (REQ-318). */\nexport function uiBadgeView(props: SpBadgeProps, r: UiResolved, content: { readonly text?: string }): UiElement {\n const max = props.max ?? 99;\n const count = props.count !== undefined && Number.isFinite(props.count) ? Math.max(Math.round(props.count), 0) : undefined;\n const shown = count === undefined ? undefined : count > max ? `${max}+` : String(count);\n const dot = props.dot === true;\n uiRequireName('SpBadge', content.text ?? (dot ? undefined : shown), props.label);\n return el('span', root('badge', props, r, { id: props.id }), [\n el('span', { class: 'sp-ui-label' }, [slot('content')]),\n ...(dot\n ? [el('span', { class: 'sp-ui-badge-dot', 'aria-hidden': 'true' })]\n : shown !== undefined\n ? [el('span', { class: 'sp-ui-badge-count' }, [frame('pill'), el('span', { class: 'sp-ui-badge-text' }, [text(shown)])])]\n : []),\n ...(props.label ? [sr(props.label)] : []),\n ]);\n}\n\n/** The circle Progress's ring width, in view-box units. */\nconst RING = 8;\n\n/** `SpProgress`: a `progressbar`; without a value, indeterminate: no `aria-valuenow`, a static tone (REQ-318, REQ-320). */\nexport function uiProgressView(props: SpProgressProps, r: UiResolved): UiElement {\n const determinate = props.value !== undefined;\n const { value, fraction } = determinate ? uiValue(props.value!, { min: 0, max: 100 }, 'SpProgress') : { value: 0, fraction: 0 };\n const circle = props.shape === 'circle';\n const drawing = circle\n ? (() => {\n const arc = uiProgressArc(determinate ? fraction : 0.25, RING);\n return el('svg', { class: 'sp-ui-ring', viewBox: `0 0 ${UI_PROGRESS_VIEWBOX} ${UI_PROGRESS_VIEWBOX}`, 'aria-hidden': 'true' }, [\n el('path', { class: 'sp-ui-ring-track', d: arc.track.d }),\n el('path', { class: 'sp-ui-ring-fill', d: arc.fill.d }),\n ]);\n })()\n : el('span', { class: 'sp-ui-rail' }, [\n el('span', { part: 'sp-track', 'aria-hidden': 'true' }),\n el('span', { part: 'sp-fill', 'aria-hidden': 'true' }, [tone(determinate ? 'selected' : '1', 'pill')]),\n ]);\n return el(\n 'div',\n root('progress', props, r, {\n id: props.id,\n role: 'progressbar',\n 'aria-label': props.label,\n 'aria-valuemin': '0',\n 'aria-valuemax': '100',\n 'aria-valuenow': determinate ? String(value) : undefined,\n 'data-shape': circle ? 'circle' : 'line',\n 'data-indeterminate': determinate ? undefined : 'true',\n style: determinate ? `--sp-ui-fraction: ${fraction}` : undefined,\n }),\n [drawing, ...(determinate && props.showValue !== false ? [el('span', { class: 'sp-ui-value', 'aria-hidden': 'true' }, [text(`${value}%`)])] : [])],\n );\n}\n\nconst ALERT_GLYPHS: Readonly<Record<AlertKind, UiGlyph>> = { info: 'info', success: 'tick', warning: 'warning', error: 'cross' };\n\n/**\n * `SpAlert`: `alert` for error and warning, `status` otherwise (REQ-318). Error alone takes a tone,\n * the ground's `alertError`, with its text on a plate (C-3); every kind has its exact glyph.\n */\nexport function uiAlertView(props: SpAlertProps, r: UiResolved, state: { readonly closable: boolean }): UiElement {\n const kind = props.kind ?? 'info';\n const error = kind === 'error';\n return el('div', root('alert', props, r, { id: props.id, role: error || kind === 'warning' ? 'alert' : 'status', 'data-kind': kind }), [\n frame('card'),\n ...(error ? [tone('alertError', 'card')] : []),\n glyph(ALERT_GLYPHS[kind]),\n el('div', { class: error ? 'sp-ui-alert-body sp-ui-plate' : 'sp-ui-alert-body' }, [\n ...(props.title ? [el('div', { class: 'sp-ui-alert-title' }, [text(props.title)])] : []),\n el('div', { class: 'sp-ui-alert-text' }, [slot('content')]),\n ]),\n ...(state.closable ? [closeButton(props.closeLabel ?? 'Close')] : []),\n ]);\n}\n\n/** `SpSkeleton`: `aria-busy`, a label for assistive technology, and hidden toned shapes (REQ-318). */\nexport function uiSkeletonView(props: SpSkeletonProps, r: UiResolved): UiElement {\n const lines = props.lines !== undefined && Number.isFinite(props.lines) ? Math.min(Math.max(Math.round(props.lines), 1), 8) : 3;\n return el('div', root('skeleton', props, r, { id: props.id, 'aria-busy': 'true' }), [\n sr(props.label ?? 'Loading'),\n ...(props.avatar ? [el('span', { class: 'sp-ui-skeleton-avatar', 'aria-hidden': 'true' }, [tone('1', 'round')])] : []),\n el(\n 'span',\n { class: 'sp-ui-skeleton-lines', 'aria-hidden': 'true' },\n Array.from({ length: lines }, () => el('span', { class: 'sp-ui-skeleton-line' }, [tone('1', 'control')])),\n ),\n ]);\n}\n","import { diagnose } from '../diagnostics/diagnose';\nimport { uiInitials } from './initials';\nimport { uiItems } from './items';\nimport { uiRequireName } from './names';\nimport { uiNumberValue } from './number';\nimport { uiPageWindow, uiPagination } from './pages';\nimport type {\n SpAvatarGroupProps,\n SpAvatarProps,\n SpBreadcrumbProps,\n SpCollapseItemProps,\n SpCollapseProps,\n SpDescriptionsProps,\n SpEmptyProps,\n SpGlyphProps,\n SpInputNumberProps,\n SpPaginationProps,\n SpResultProps,\n SpStatisticProps,\n SpSurfaceProps,\n SpTableProps,\n SpTextareaProps,\n SpTimelineListProps,\n} from './types';\nimport { baseOf, cssLength, el, frame, glyph, headingTag, root, safeHref, slot, sr, text, tone, UI_GLYPHS, type UiGlyph } from './view-kit';\nimport type { UiElement, UiNode, UiResolved } from './view';\n\n/*\n * The composed components (API delta §4, feature-004): the 0.3.0 pieces —root contract, frame,\n * tone, heightening, exact glyphs— put together, as Reflex 0.7 composes them, but with every\n * computation in the core (Art. 2). At most one heightened element per instance (I-18).\n */\n\nfunction warn(component: string, property: string, message: string): void {\n if (process.env.NODE_ENV !== 'production') diagnose('SP017', component, { property, message });\n}\n\nconst heighten = () => el('span', { part: 'sp-heighten', 'aria-hidden': 'true' });\nconst heading = (level: number | undefined, component: string, attrs: Record<string, string | undefined>, title: string) => el(headingTag(level, component), attrs, [text(title)]);\n/** A text node, or none for an empty string (API delta §4: no empty text nodes). */\nconst maybeText = (value: string): UiNode[] => (value === '' ? [] : [text(value)]);\n\n/** Keeps the first item of each given key; items without a key are kept as they come (REQ-325). */\nfunction keyed<T extends { readonly key?: string }>(items: readonly T[], component: string): readonly T[] {\n const seen = new Set<string>();\n return items.filter((item) => {\n if (item.key === undefined) return true;\n if (!seen.has(item.key)) return seen.add(item.key), true;\n if (process.env.NODE_ENV !== 'production') diagnose('SP019', component, { property: 'items', message: `The key \"${item.key}\" repeats; that item is skipped.` });\n return false;\n });\n}\n\n/** A lowercase tag or ident: what a surface may be named, so a prop can never open markup of its own. */\nconst IDENT = /^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;\nconst UNSAFE_TAGS = new Set(['script', 'style', 'iframe', 'object', 'embed', 'template', 'noscript']);\n\n/** `SpSurface`: the root contract on any element, with an optional frame and tone (REQ-472). */\nexport function uiSurfaceView(props: SpSurfaceProps, r: UiResolved): UiElement {\n let tag = props.as ?? 'div';\n if (!IDENT.test(tag) || UNSAFE_TAGS.has(tag)) {\n warn('SpSurface', 'as', `${JSON.stringify(tag)} is drawn as \"div\".`);\n tag = 'div';\n }\n let name = props.name;\n if (name !== undefined && !IDENT.test(name)) {\n warn('SpSurface', 'name', `${JSON.stringify(name)} adds no class.`);\n name = undefined;\n }\n const attrs = root('surface', props, r, { id: props.id });\n if (name) attrs.class = `${attrs.class as string} sp-${name}`;\n return el(tag, attrs, [\n ...(props.frame ? [frame(props.frame)] : []),\n ...(props.tone !== undefined ? [tone(String(props.tone), props.frame ?? 'box')] : []),\n slot('content'),\n ]);\n}\n\n/** `SpGlyph`: one exact mark of `UI_GLYPHS` (REQ-472). */\nexport function uiGlyphView(props: SpGlyphProps, r: UiResolved): UiElement {\n const known = Object.hasOwn(UI_GLYPHS, props.glyph);\n if (!known) warn('SpGlyph', 'glyph', `${JSON.stringify(props.glyph)} is not a glyph; nothing is drawn.`);\n return el(\n 'svg',\n root('glyph', props, r, { id: props.id, part: 'sp-mark', 'data-glyph': props.glyph, viewBox: '0 0 16 16', 'aria-hidden': 'true' }),\n known ? [el('path', { d: UI_GLYPHS[props.glyph as UiGlyph] })] : [],\n );\n}\n\nconst cell = (value: unknown): string => (value === null || value === undefined ? '' : String(value));\n\n/** `SpTable`: a native table in a framed scroller; sortable headers are buttons that report the key (REQ-473, REQ-474). */\nexport function uiTableView(props: SpTableProps, r: UiResolved): UiElement {\n const columns = uiItems(props.columns, 'SpTable');\n const order = props.sortOrder ?? 'asc';\n // The consumer sorts (uiSortRows, or its server before paging): the view only marks the column (DD-040).\n const sorted = columns.find((column) => column.key === props.sortKey && column.sortable === true);\n const rows = props.data;\n const headers = columns.map((column) => {\n const width = cssLength(column.width, 'SpTable', 'columns');\n const title = column.title ?? column.key;\n const active = column === sorted;\n return el(\n 'th',\n {\n scope: 'col',\n 'data-align': column.align,\n 'aria-sort': active ? (order === 'asc' ? 'ascending' : 'descending') : undefined,\n style: width ? `width:${width}` : undefined,\n },\n column.sortable\n ? [\n el('button', { type: 'button', class: 'sp-ui-sort', 'data-key': column.key }, [\n el('span', { class: 'sp-ui-label' }, [text(title)]),\n glyph(active ? (order === 'asc' ? 'sortUp' : 'sortDown') : 'sort'),\n ], 'sort'),\n ]\n : [text(title)],\n );\n });\n const body =\n rows.length === 0\n ? [el('tr', {}, [el('td', { class: 'sp-ui-table-empty', colspan: String(columns.length) }, [text(props.emptyText ?? 'No data')])])]\n : rows.map((row) =>\n el(\n 'tr',\n { 'data-key': props.rowKey !== undefined ? cell(row[props.rowKey]) : undefined },\n // The text sits on a plate, so a toned row keeps the contrast of the substrate (Data Model §3.8).\n columns.map((column) => {\n const value = cell(row[column.key]);\n return el('td', { 'data-align': column.align }, value === '' ? [] : [el('span', { class: 'sp-ui-plate' }, [text(value)])]);\n }),\n ),\n );\n return el(\n 'div',\n root('table', props, r, {\n id: props.id,\n 'data-striped': props.striped ? 'true' : undefined,\n 'data-hoverable': props.hoverable !== false ? 'true' : undefined,\n }),\n [\n ...(props.bordered !== false ? [frame('card')] : []),\n el('div', { class: 'sp-ui-table-scroll' }, [\n el('table', { class: 'sp-ui-table' }, [\n ...(props.caption ? [el('caption', {}, [text(props.caption)])] : []),\n el('thead', {}, [el('tr', {}, headers)]),\n el('tbody', {}, body),\n ]),\n ]),\n ],\n );\n}\n\n/** `SpPagination`: a labelled nav; pages are buttons, the current one a heightened span (REQ-476). */\nexport function uiPaginationView(props: SpPaginationProps, r: UiResolved, state: { readonly current: number }): UiElement {\n const { count, current, start, end } = uiPagination(props.total, props.pageSize ?? 10, state.current);\n const pageLabel = props.pageLabel ?? 'Page';\n const off = props.disabled === true;\n const button = (page: number, label: string, disabled: boolean, content: UiNode[]) =>\n el('li', {}, [\n el('button', { type: 'button', class: 'sp-ui-page', 'data-page': String(page), 'aria-label': label, disabled: off || disabled }, [frame('control'), ...content], 'page'),\n ]);\n const pages = uiPageWindow(count, current, props.siblings ?? 1).map((entry) =>\n typeof entry === 'string'\n ? el('li', { class: 'sp-ui-page-gap', 'aria-hidden': 'true' }, [glyph('ellipsis')])\n : entry === current\n ? el('li', {}, [\n el('span', { class: 'sp-ui-page', 'aria-current': 'page' }, [\n frame('control'),\n heighten(),\n el('span', { class: 'sp-ui-label sp-ui-plate' }, [sr(`${pageLabel} `), text(String(entry))]),\n ]),\n ])\n : button(entry, `${pageLabel} ${entry}`, false, [el('span', { class: 'sp-ui-label' }, [text(String(entry))])]),\n );\n const summary = (props.totalTemplate ?? '{start}–{end} of {total}')\n .split('{start}').join(String(start))\n .split('{end}').join(String(end))\n .split('{total}').join(String(Math.max(0, props.total || 0)));\n return el('nav', root('pagination', props, r, { id: props.id, 'aria-label': props.label ?? 'Pagination', 'data-disabled': off ? 'true' : undefined }), [\n ...(props.showTotal ? [el('span', { class: 'sp-ui-page-total' }, [text(summary)])] : []),\n el('ul', { class: 'sp-ui-pages' }, [\n button(current - 1, props.previousLabel ?? 'Previous page', current <= 1, [glyph('chevronLeft')]),\n ...pages,\n button(current + 1, props.nextLabel ?? 'Next page', current >= count, [glyph('chevronRight')]),\n ]),\n ]);\n}\n\n/** `SpBreadcrumb`: a labelled nav of an ordered list; the last item is the current page (REQ-477). */\nexport function uiBreadcrumbView(props: SpBreadcrumbProps, r: UiResolved): UiElement {\n const items = keyed(props.items, 'SpBreadcrumb');\n return el('nav', root('breadcrumb', props, r, { id: props.id, 'aria-label': props.label ?? 'Breadcrumb' }), [\n el(\n 'ol',\n { class: 'sp-ui-crumbs' },\n items.map((item, i) => {\n const last = i === items.length - 1;\n const href = last ? undefined : safeHref(item.href, 'SpBreadcrumb', 'items');\n const inner = last\n ? el('span', { 'aria-current': 'page' }, [text(item.label)])\n : href !== undefined\n ? el('a', { href }, [text(item.label)])\n : el('span', {}, [text(item.label)]);\n return el('li', { class: 'sp-ui-crumb' }, [inner]);\n }),\n ),\n ]);\n}\n\n/** `SpAvatar`: an image, or initials named as an image; a round or box frame (REQ-478). */\nexport function uiAvatarView(props: SpAvatarProps, r: UiResolved): UiElement {\n const name = props.alt ?? props.name ?? props.initials;\n uiRequireName('SpAvatar', name, undefined);\n let size = props.pixelSize;\n if (size !== undefined && !(Number.isFinite(size) && size > 0)) {\n warn('SpAvatar', 'pixelSize', `${size} is dropped.`);\n size = undefined;\n }\n const square = props.shape === 'square';\n const image = props.src !== undefined;\n return el(\n 'span',\n root('avatar', props, r, {\n id: props.id,\n role: image ? undefined : 'img',\n 'aria-label': image ? undefined : name,\n 'data-shape': square ? 'square' : 'circle',\n style: size !== undefined ? `--sp-ui-avatar-size:${Math.round(size * 100) / 100}px` : undefined,\n }),\n [\n frame(square ? 'box' : 'round'),\n image\n ? el('img', { class: 'sp-ui-avatar-image', src: props.src, alt: props.alt ?? props.name ?? '' })\n : el('span', { class: 'sp-ui-avatar-initials', 'aria-hidden': 'true' }, [text(props.initials ?? uiInitials(props.name))]),\n ],\n );\n}\n\n/** `SpAvatarGroup`: a labelled group of avatars (REQ-478). */\nexport function uiAvatarGroupView(props: SpAvatarGroupProps, r: UiResolved): UiElement {\n return el('div', root('avatar-group', props, r, { id: props.id, role: 'group', 'aria-label': props.label }), [slot('content')]);\n}\n\n/** `SpStatistic`: the trend is carried by an exact arrow and by text, never by tone alone (REQ-479). */\nexport function uiStatisticView(props: SpStatisticProps, r: UiResolved): UiElement {\n const affix = (value: string) => el('span', { class: 'sp-ui-statistic-affix' }, [text(value)]);\n const up = props.trend === 'up';\n return el('div', root('statistic', props, r, { id: props.id, 'data-trend': props.trend }), [\n el('span', { class: 'sp-ui-statistic-title' }, [text(props.title)]),\n el('span', { class: 'sp-ui-statistic-value' }, [\n ...(props.prefix ? [affix(props.prefix)] : []),\n el('span', { class: 'sp-ui-statistic-number' }, [text(String(props.value))]),\n ...(props.suffix ? [affix(props.suffix)] : []),\n ]),\n ...(props.trend\n ? [\n el('span', { class: 'sp-ui-statistic-trend', 'data-trend': props.trend }, [\n glyph(up ? 'arrowUp' : 'arrowDown'),\n props.delta ? el('span', { class: 'sp-ui-statistic-delta' }, [text(props.delta)]) : sr(up ? 'Up' : 'Down'),\n ]),\n ]\n : []),\n ]);\n}\n\n/** `SpDescriptions`: a section named by its heading around a `<dl>` (REQ-480). */\nexport function uiDescriptionsView(props: SpDescriptionsProps, r: UiResolved): UiElement {\n let columns = props.columns ?? 3;\n const fixed = Number.isFinite(columns) ? Math.min(6, Math.max(1, Math.round(columns))) : 3;\n if (fixed !== columns) warn('SpDescriptions', 'columns', `${columns} is drawn as ${fixed}.`);\n columns = fixed;\n const titled = props.title !== undefined;\n const titleId = titled && props.id ? `${props.id}--title` : undefined;\n const bordered = props.bordered !== false;\n return el(\n 'section',\n root('descriptions', props, r, {\n id: props.id,\n 'aria-labelledby': titleId,\n 'aria-label': titled && !titleId ? props.title : undefined,\n 'data-bordered': bordered ? 'true' : undefined,\n 'data-columns': String(columns),\n }),\n [\n ...(bordered ? [frame('card')] : []),\n ...(titled ? [heading(props.headingLevel, 'SpDescriptions', { class: 'sp-ui-descriptions-title', id: titleId }, props.title!)] : []),\n el(\n 'dl',\n {},\n keyed(props.items, 'SpDescriptions').map((item) =>\n el('div', { class: 'sp-ui-description' }, [el('dt', {}, [text(item.label)]), el('dd', {}, maybeText(item.value))]),\n ),\n ),\n ],\n );\n}\n\n/** `SpTimelineList`: an ordered list; each status by its mark's shape, one current (REQ-481). */\nexport function uiTimelineListView(props: SpTimelineListProps, r: UiResolved): UiElement {\n let current = false;\n const items = keyed(props.items, 'SpTimelineList').map((item) => {\n let status = item.status ?? 'done';\n if (status === 'current') {\n if (current) {\n warn('SpTimelineList', 'items', `A second current item, \"${item.title}\", is drawn as done.`);\n status = 'done';\n }\n current = true;\n }\n const mark = status === 'done' ? [tone('selected', 'round')] : status === 'current' ? [heighten()] : status === 'error' ? [glyph('cross')] : [];\n return el('li', { class: 'sp-ui-timeline-item', 'data-status': status, 'aria-current': status === 'current' ? 'step' : undefined }, [\n el('span', { class: 'sp-ui-timeline-mark', 'aria-hidden': 'true' }, [frame('round'), ...mark]),\n el('span', { class: 'sp-ui-timeline-text' }, [\n ...(item.time ? [el('span', { class: 'sp-ui-timeline-time' }, [text(item.time)])] : []),\n el('span', { class: 'sp-ui-timeline-title' }, [text(item.title)]),\n ...(item.description ? [el('span', { class: 'sp-ui-timeline-description' }, [text(item.description)])] : []),\n ]),\n ]);\n });\n return el('ol', root('timeline-list', props, r, { id: props.id, 'aria-label': props.label }), items);\n}\n\n/** `SpCollapse`: a frame around its items; `accordion` gives them one `<details name>` (REQ-482). */\nexport function uiCollapseView(props: SpCollapseProps, r: UiResolved): UiElement {\n return el('div', root('collapse', props, r, { id: props.id, 'data-accordion': props.accordion ? 'true' : undefined }), [\n ...(props.bordered !== false ? [frame('card')] : []),\n slot('content'),\n ]);\n}\n\n/** The `name` an accordion's items share, `${id}--accordion`, the same in every adapter (REQ-329, DD-040). */\nexport function uiCollapseGroup(props: SpCollapseProps): string | undefined {\n if (!props.accordion) return undefined;\n if (props.id) return `${props.id}--accordion`;\n warn('SpCollapse', 'id', 'An accordion needs an id to name its items; they open independently.');\n return undefined;\n}\n\n/** `SpCollapseItem`: a native `<details>`; `group` is its accordion's shared name (REQ-482). */\nexport function uiCollapseItemView(props: SpCollapseItemProps, r: UiResolved, state: { readonly open: boolean; readonly group?: string }): UiElement {\n return el(\n 'details',\n root('collapse-item', props, r, { id: props.id, name: state.group, open: state.open, 'data-disabled': props.disabled ? 'true' : undefined }),\n [\n // A disabled item's summary leaves the Tab order: no `disabled` attribute exists for it (REQ-522).\n el('summary', { class: 'sp-ui-collapse-summary', 'aria-disabled': props.disabled ? 'true' : undefined, tabindex: props.disabled ? '-1' : undefined }, [\n el('span', { class: 'sp-ui-label' }, [text(props.title)]),\n glyph('chevronDown'),\n ], 'summary'),\n el('div', { class: 'sp-ui-collapse-body' }, [slot('content')]),\n ],\n );\n}\n\n/** `SpEmpty`: a toned tray and a description (REQ-483). */\nexport function uiEmptyView(props: SpEmptyProps, r: UiResolved, slots: { readonly extra?: boolean }): UiElement {\n return el('div', root('empty', props, r, { id: props.id }), [\n el('span', { class: 'sp-ui-empty-tray', 'aria-hidden': 'true' }, [tone('1', 'control'), frame('control')]),\n el('p', { class: 'sp-ui-empty-description' }, [text(props.description ?? 'No data')]),\n ...(slots.extra ? [el('div', { class: 'sp-ui-empty-extra' }, [slot('extra')])] : []),\n ]);\n}\n\nconst RESULT_GLYPHS = { success: 'tick', info: 'info', warning: 'warning', error: 'cross' } as const;\n\n/** `SpResult`: the status glyph in a round frame; status or alert by its kind (REQ-483). */\nexport function uiResultView(props: SpResultProps, r: UiResolved, slots: { readonly extra?: boolean }): UiElement {\n const status = props.status ?? 'info';\n const alert = status === 'warning' || status === 'error';\n return el('div', root('result', props, r, { id: props.id, role: alert ? 'alert' : 'status', 'data-status': status }), [\n el('span', { class: 'sp-ui-result-mark', 'aria-hidden': 'true' }, [frame('round'), glyph(RESULT_GLYPHS[status])]),\n heading(props.headingLevel, 'SpResult', { class: 'sp-ui-result-title' }, props.title),\n ...(props.subtitle ? [el('p', { class: 'sp-ui-result-subtitle' }, [text(props.subtitle)])] : []),\n ...(slots.extra ? [el('div', { class: 'sp-ui-result-extra' }, [slot('extra')])] : []),\n ]);\n}\n\n/** The message after a field, tied by `aria-describedby` to its derived id (REQ-334). */\nfunction message(props: { readonly id?: string; readonly name?: string; readonly message?: string }) {\n const base = baseOf(props);\n const id = props.message && base ? `${base}--message` : undefined;\n return { id, node: props.message ? [el('span', { class: 'sp-ui-message', id }, [text(props.message)])] : [] };\n}\n\n/** `SpTextarea`: a native `<textarea>` on the `SpInput` contract, with an optional counter (REQ-484). */\nexport function uiTextareaView(props: SpTextareaProps, r: UiResolved, state: { readonly value: string }): UiElement {\n const said = message(props);\n const max = props.maxLength !== undefined && Number.isInteger(props.maxLength) && props.maxLength >= 0 ? props.maxLength : undefined;\n return el('span', root('input sp-textarea', props, r, { 'data-invalid': props.invalid ? 'true' : undefined }), [\n el('span', { class: 'sp-ui-box' }, [\n frame('control'),\n el(\n 'textarea',\n {\n class: 'sp-ui-control',\n id: props.id,\n name: props.name,\n rows: String(props.rows ?? 3),\n maxlength: max !== undefined ? String(max) : undefined,\n placeholder: props.placeholder,\n disabled: props.disabled === true,\n readonly: props.readOnly === true,\n 'aria-label': props.label,\n 'aria-invalid': props.invalid ? 'true' : undefined,\n 'aria-describedby': said.id,\n },\n maybeText(state.value),\n 'native',\n ),\n ...(props.invalid ? [glyph('warning')] : []),\n ]),\n ...(props.showCount ? [el('span', { class: 'sp-ui-count' }, [text(max !== undefined ? `${state.value.length} / ${max}` : String(state.value.length))])] : []),\n ...said.node,\n ]);\n}\n\n/** `SpInputNumber`: a native number input between exact − and + steppers (REQ-485, REQ-486). */\nexport function uiInputNumberView(props: SpInputNumberProps, r: UiResolved, state: { readonly value: number | null }): UiElement {\n const { value, atMin, atMax, range } = uiNumberValue(state.value, props, 'SpInputNumber');\n const said = message(props);\n const locked = props.disabled === true || props.readOnly === true;\n const stepper = (direction: '-1' | '1', label: string, disabled: boolean, mark: UiGlyph) =>\n el('button', { type: 'button', class: 'sp-ui-stepper', 'data-step': direction, 'aria-label': label, tabindex: '-1', disabled: locked || disabled }, [glyph(mark)], 'stepper');\n return el('span', root('input sp-input-number', props, r, { 'data-invalid': props.invalid ? 'true' : undefined }), [\n el('span', { class: 'sp-ui-box' }, [\n frame('control'),\n stepper('-1', props.decrementLabel ?? 'Decrease', atMin, 'dash'),\n el(\n 'input',\n {\n class: 'sp-ui-control',\n type: 'number',\n inputmode: 'decimal',\n id: props.id,\n name: props.name,\n min: range.min !== undefined ? String(range.min) : undefined,\n max: range.max !== undefined ? String(range.max) : undefined,\n step: String(range.step ?? 1),\n value: value === null ? '' : String(value),\n placeholder: props.placeholder,\n disabled: props.disabled === true,\n readonly: props.readOnly === true,\n 'aria-label': props.label,\n 'aria-invalid': props.invalid ? 'true' : undefined,\n 'aria-describedby': said.id,\n },\n [],\n 'native',\n ),\n stepper('1', props.incrementLabel ?? 'Increase', atMax, 'plus'),\n ...(props.invalid ? [glyph('warning')] : []),\n ]),\n ...said.node,\n ]);\n}\n","import { diagnose } from '../diagnostics/diagnose';\nimport { uiItems, uiSelectedKey } from './items';\nimport { uiRequireName } from './names';\nimport type {\n AlertKind,\n MenuEntry,\n SpDrawerProps,\n SpDropdownMenuProps,\n SpModalProps,\n SpPopoverProps,\n SpSelectProps,\n SpToasterProps,\n SpToastProps,\n SpTooltipProps,\n UiItem,\n} from './types';\nimport { cssLength, el, frame, glyph, iconClose, root, slot, text } from './view-kit';\nimport type { UiElement, UiNode, UiResolved } from './view';\n\n/*\n * The overlays (API delta §4, DD-038): native `<dialog>` and the Popover API. The server markup\n * carries `data-state` and the full content, never the `open` attribute (a `<dialog open>` is\n * non-modal) nor a position: the adapter calls `showModal()`/`showPopover()` after hydration, then\n * `uiAnchor` (REQ-502). In an open list the active item is the one heightened (REQ-498, I-36).\n */\n\nconst heighten = () => el('span', { part: 'sp-heighten', 'aria-hidden': 'true' });\nconst state = (open: boolean) => (open ? 'open' : 'closed');\nconst style = (property: string, value: string | undefined) => (value !== undefined ? `${property}:${value}` : undefined);\nconst label = (value: string, plate: boolean) => el('span', { class: plate ? 'sp-ui-label sp-ui-plate' : 'sp-ui-label' }, [text(value)]);\n\nexport type UiTriggerKind = 'dialog' | 'popover' | 'menu' | 'tooltip';\n\n/** Where a consumer's trigger goes: the adapter binds the element inside it (REQ-500). */\nexport function uiTriggerView(): UiElement {\n return el('span', { class: 'sp-ui-trigger' }, [slot('trigger')], 'trigger');\n}\n\nconst CONTROLS: Record<Exclude<UiTriggerKind, 'tooltip'>, [popup: string, part: string]> = {\n dialog: ['dialog', 'dialog'],\n popover: ['dialog', 'popover'],\n menu: ['menu', 'menu'],\n};\n\n/**\n * The ARIA an overlay sets on a consumer's trigger, at runtime (REQ-500): `aria-haspopup`,\n * `aria-expanded` and `aria-controls` as its APG pattern asks; a tooltip's `aria-describedby`.\n * The relations need the instance `id`.\n */\nexport function uiTriggerAria(kind: UiTriggerKind, id: string | undefined, open: boolean): Readonly<Record<string, string>> {\n if (kind === 'tooltip') return id ? { 'aria-describedby': `${id}--tooltip` } : {};\n const [popup, part] = CONTROLS[kind];\n return { 'aria-haspopup': popup, 'aria-expanded': String(open), ...(id ? { 'aria-controls': `${id}--${part}` } : {}) };\n}\n\n/** A Select's items: a string is its own key and label; repeated keys skipped, `SP019` (REQ-325). */\nexport function uiSelectItems(items: readonly (string | UiItem)[]): readonly UiItem[] {\n return uiItems(\n items.map((item) => (typeof item === 'string' ? { key: item, label: item } : item)),\n 'SpSelect',\n );\n}\n\nconst actionable = (entry: MenuEntry): entry is Extract<MenuEntry, { readonly label: string; readonly type?: 'item' }> =>\n entry.type === undefined || entry.type === 'item';\n\n/** A menu's actionable items, in order: what `uiListKey` and `uiTypeahead` move over (REQ-495). */\nexport function uiMenuItems(entries: readonly MenuEntry[]): readonly UiItem[] {\n return uiItems(entries, 'SpDropdownMenu')\n .filter(actionable)\n .map((entry) => ({ key: entry.key, label: entry.label, ...(entry.disabled ? { disabled: true } : {}) }));\n}\n\n/** How long a toast stays: its own duration, the toaster's, or 5000 ms; at least 1000 or `Infinity` (Data Model §2.27). */\nexport function uiToastDuration(duration: number | undefined, toaster?: number): number {\n const ms = duration ?? toaster ?? 5000;\n if (ms === Infinity || (Number.isFinite(ms) && ms >= 1000)) return ms;\n if (process.env.NODE_ENV !== 'production') diagnose('SP017', 'SpToast', { property: 'duration', message: `${ms} ms is drawn as 1000 ms.` });\n return 1000;\n}\n\n/** The dialog of Modal and Drawer: header, rule, description, body, footer (REQ-491). */\nfunction dialog(\n component: string,\n slug: string,\n props: SpModalProps,\n r: UiResolved,\n open: boolean,\n footer: boolean,\n attrs: Record<string, string | undefined>,\n): UiElement {\n uiRequireName(component, props.title, props.label);\n const { id, title } = props;\n const titleId = title !== undefined && id ? `${id}--title` : undefined;\n const descriptionId = props.description && id ? `${id}--description` : undefined;\n const closable = props.closable !== false;\n const header = title !== undefined || closable;\n return el(\n 'dialog',\n root(slug, props, r, {\n id: id ? `${id}--dialog` : undefined,\n 'aria-labelledby': titleId,\n 'aria-label': titleId ? undefined : (title ?? props.label),\n 'aria-describedby': descriptionId,\n 'data-state': state(open),\n ...attrs,\n }),\n [\n frame('card'),\n ...(header\n ? [\n el('div', { class: 'sp-ui-overlay-header' }, [\n ...(title !== undefined ? [el('h2', { class: 'sp-ui-overlay-title', id: titleId }, [text(title)])] : []),\n ...(closable ? [iconClose(props.closeLabel ?? 'Close')] : []),\n ]),\n el('span', { part: 'sp-rule', 'aria-hidden': 'true' }),\n ]\n : []),\n ...(props.description ? [el('p', { class: 'sp-ui-overlay-description', id: descriptionId }, [text(props.description)])] : []),\n el('div', { class: 'sp-ui-overlay-body' }, [slot('content')]),\n ...(footer ? [el('div', { class: 'sp-ui-overlay-footer' }, [slot('footer')])] : []),\n ],\n 'dialog',\n );\n}\n\n/** `SpModal`: a native dialog opened with `showModal()` (REQ-491). */\nexport function uiModalView(props: SpModalProps, r: UiResolved, s: { readonly open: boolean }, slots: { readonly footer?: boolean }): UiElement {\n return dialog('SpModal', 'modal', props, r, s.open, slots.footer === true, {\n style: style('--sp-ui-overlay-width', cssLength(props.width, 'SpModal', 'width')),\n });\n}\n\n/** `SpDrawer`: the same dialog on a logical side (REQ-491, REQ-523). */\nexport function uiDrawerView(props: SpDrawerProps, r: UiResolved, s: { readonly open: boolean }, slots: { readonly footer?: boolean }): UiElement {\n return dialog('SpDrawer', 'drawer', props, r, s.open, slots.footer === true, {\n 'data-side': props.side ?? 'end',\n style: style('--sp-ui-drawer-extent', cssLength(props.extent, 'SpDrawer', 'extent')),\n });\n}\n\n/** `SpPopover`: an `auto` popover with the dialog role (REQ-492). */\nexport function uiPopoverView(props: SpPopoverProps, r: UiResolved, s: { readonly open: boolean }): UiElement {\n uiRequireName('SpPopover', props.title, props.label);\n const { id, title } = props;\n const titleId = title !== undefined && id ? `${id}--title` : undefined;\n const header = title !== undefined || props.closable === true;\n return el(\n 'div',\n root('popover', props, r, {\n id: id ? `${id}--popover` : undefined,\n popover: 'auto',\n role: 'dialog',\n 'aria-labelledby': titleId,\n 'aria-label': titleId ? undefined : (title ?? props.label),\n 'data-state': state(s.open),\n style: style('--sp-ui-overlay-width', cssLength(props.width, 'SpPopover', 'width')),\n }),\n [\n frame('card'),\n ...(header\n ? [\n el('div', { class: 'sp-ui-overlay-header' }, [\n ...(title !== undefined ? [el('div', { class: 'sp-ui-overlay-title', id: titleId }, [text(title)])] : []),\n ...(props.closable ? [iconClose(props.closeLabel ?? 'Close')] : []),\n ]),\n ]\n : []),\n el('div', { class: 'sp-ui-overlay-body' }, [slot('content')]),\n ],\n 'popover',\n );\n}\n\n/** `SpTooltip`: a `manual` popover, so it never closes an open `auto` one (REQ-492, REQ-496). */\nexport function uiTooltipView(props: SpTooltipProps, r: UiResolved, s: { readonly open: boolean }): UiElement {\n return el(\n 'div',\n root('tooltip', props, r, { id: props.id ? `${props.id}--tooltip` : undefined, popover: 'manual', role: 'tooltip', 'data-state': state(s.open) }),\n [frame('control'), el('span', { class: 'sp-ui-tooltip-text' }, [text(props.text)])],\n 'popover',\n );\n}\n\n/** `SpSelect`: the APG select-only combobox; focus stays on the trigger (REQ-494, REQ-498, DD-039). */\nexport function uiSelectView(\n props: SpSelectProps,\n r: UiResolved,\n s: { readonly value: string | null; readonly open: boolean; readonly active: string | null },\n): UiElement {\n uiRequireName('SpSelect', undefined, props.label);\n const items = uiSelectItems(props.items);\n const value = uiSelectedKey(items, s.value, 'none');\n const chosen = items.find((item) => item.key === value);\n const { id } = props;\n const optionId = (key: string) => (id ? `${id}--option-${key}` : undefined);\n const active = s.open ? items.find((item) => item.key === s.active && item.disabled !== true) : undefined;\n const options: UiNode[] = items.map((item) => {\n const isActive = item === active;\n const isChosen = item === chosen;\n return el(\n 'div',\n {\n class: 'sp-ui-option',\n role: 'option',\n id: optionId(item.key),\n 'data-key': item.key,\n 'aria-selected': String(isChosen),\n 'aria-disabled': item.disabled ? 'true' : undefined,\n },\n [...(isActive ? [heighten()] : []), label(item.label, isActive), ...(isChosen ? [glyph('tick')] : [])],\n 'option',\n );\n });\n return el('span', root('select', props, r, { id, style: style('--sp-ui-select-width', cssLength(props.width, 'SpSelect', 'width')) }), [\n el(\n 'button',\n {\n type: 'button',\n class: 'sp-ui-select-trigger',\n role: 'combobox',\n 'aria-haspopup': 'listbox',\n 'aria-expanded': String(s.open),\n 'aria-controls': id ? `${id}--listbox` : undefined,\n 'aria-activedescendant': active ? optionId(active.key) : undefined,\n 'aria-label': props.label,\n 'aria-required': props.required ? 'true' : undefined,\n disabled: props.disabled === true,\n },\n [\n frame('control'),\n el('span', { class: 'sp-ui-select-value', 'data-placeholder': chosen ? undefined : 'true' }, [text(chosen?.label ?? props.placeholder ?? 'Select…')]),\n glyph('chevronDown'),\n ],\n 'trigger',\n ),\n el('div', { class: 'sp-ui-select-content', popover: 'auto', 'data-state': state(s.open) }, [\n frame('card'),\n el('div', { role: 'listbox', id: id ? `${id}--listbox` : undefined, 'aria-label': props.label }, options),\n ], 'popover'),\n ...(props.name ? [el('input', { type: 'hidden', name: props.name, value: value ?? '' })] : []),\n ]);\n}\n\n/** `SpDropdownMenu`: the APG menu button; DOM focus moves to the active item (REQ-495, REQ-498, DD-039). */\nexport function uiDropdownMenuView(\n props: SpDropdownMenuProps,\n r: UiResolved,\n s: { readonly open: boolean; readonly active: string | null },\n slots: { readonly trigger?: boolean },\n): UiElement {\n const { id } = props;\n const entries = uiItems(props.items, 'SpDropdownMenu');\n const active = s.open ? entries.find((entry) => actionable(entry) && entry.key === s.active && entry.disabled !== true) : undefined;\n const children: UiNode[] = entries.map((entry) => {\n if (entry.type === 'separator') return el('div', { class: 'sp-ui-menu-separator', role: 'separator' });\n if (entry.type === 'label') return el('div', { class: 'sp-ui-menu-label', role: 'presentation' }, [text(entry.label)]);\n const isActive = entry === active;\n return el(\n 'div',\n {\n class: 'sp-ui-menuitem',\n role: 'menuitem',\n tabindex: '-1',\n 'data-key': entry.key,\n 'aria-disabled': entry.disabled ? 'true' : undefined,\n 'data-danger': entry.danger ? 'true' : undefined,\n },\n [\n ...(isActive ? [heighten()] : []),\n label(entry.label, isActive),\n ...(entry.shortcut ? [el('span', { class: 'sp-ui-menu-shortcut', 'aria-hidden': 'true' }, [text(entry.shortcut)])] : []),\n ],\n 'menuitem',\n );\n });\n const trigger = slots.trigger\n ? uiTriggerView()\n : el(\n 'button',\n { type: 'button', class: 'sp-ui-menu-trigger', ...uiTriggerAria('menu', id, s.open) },\n [frame('control'), el('span', { class: 'sp-ui-label' }, [text(props.label)]), glyph('chevronDown')],\n 'trigger',\n );\n return el('span', root('dropdown-menu', props, r, { id }), [\n trigger,\n el(\n 'div',\n { class: 'sp-ui-menu', id: id ? `${id}--menu` : undefined, popover: 'auto', role: 'menu', 'aria-label': props.label, 'data-state': state(s.open) },\n [frame('card'), ...children],\n 'popover',\n ),\n ]);\n}\n\nconst TOAST_GLYPHS: Record<AlertKind, 'info' | 'tick' | 'warning' | 'cross'> = { info: 'info', success: 'tick', warning: 'warning', error: 'cross' };\n\n/**\n * `SpToast`: its kind by glyph and text, announced politely or assertively (REQ-497). The live\n * role is on the toast's body: a list item may not take another role.\n */\nexport function uiToastView(props: SpToastProps, r: UiResolved, s: { readonly open: boolean }, slots: { readonly action?: boolean }): UiElement {\n const kind = props.kind ?? 'info';\n const urgent = kind === 'warning' || kind === 'error';\n // Explicit list roles: in Angular a component host sits between the toaster's list and its toasts.\n return el('li', root('toast', props, r, { id: props.id, role: 'listitem', 'data-kind': kind, 'data-state': state(s.open) }), [\n frame('card'),\n el('div', { class: 'sp-ui-toast-body', role: urgent ? 'alert' : 'status' }, [\n glyph(TOAST_GLYPHS[kind]),\n el('div', { class: 'sp-ui-toast-text' }, [\n el('span', { class: 'sp-ui-toast-title' }, [text(props.title)]),\n ...(props.description ? [el('span', { class: 'sp-ui-toast-description' }, [text(props.description)])] : []),\n ]),\n ]),\n ...(slots.action ? [el('div', { class: 'sp-ui-toast-action' }, [slot('action')])] : []),\n iconClose(props.closeLabel ?? 'Dismiss'),\n ]);\n}\n\n/** `SpToaster`: a labelled region holding its toasts (REQ-497). */\nexport function uiToasterView(props: SpToasterProps, r: UiResolved): UiElement {\n return el(\n 'section',\n root('toaster', props, r, { id: props.id, 'aria-label': props.label ?? 'Notifications', 'data-position': props.position ?? 'bottom-end' }),\n [el('ol', { class: 'sp-ui-toaster-list', role: 'list' }, [slot('content')])],\n );\n}\n"]}