dev
a1f03b4626
docs: update SOMA_ARCHITECTURE, README, COMPONENT_GUIDE for current state
...
SOMA_ARCHITECTURE.md:
- §3.4: Soma.getOr() → Soma.get(), removed Soma.translate()
- §3.6: translations via langs.ts() with idlangref, not Soma.translate()
- §6: added Gesture.base/drag/resize + SafePolygon to layers table
- §7: updated service access examples to use idlangref
- §7: rewritten Texto funcional section with langs.ts pattern
- §9: added data-dragging, data-highlighted, data-resizing, --drawer-* vars
- §13: added core/langs.ts, langs.ts in component structure
- §17: checklist synced with COMPONENT_GUIDE (10 steps)
COMPONENT_GUIDE.md:
- A15: exception for pure drag handles (immediate capture)
- A16: added focus return note for non-modal
- A17: virtual focus vs DOM focus strategy
- A18: registry pattern over DOM queries
- A19: SafePolygon for hover-gap components
- A20: exit animation via Presence (dismiss flow)
- A21: contract case normalization
- A22: Dismissal isValidEvent for complex widgets
README.md:
- SafePolygon added to layers table
- Patterns section: registry, virtual focus, exit animation
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
6 months ago
dev
bc9b8246fc
soma: resolve all remaining audit issues
...
- Stepper H3: trigger registry pattern replaces DOM queries for keyboard nav
- Table H3: sub-row IDs use getRowId() (identity-based, not positional)
- Tags-input H2: combobox ARIA pattern (role=combobox + listbox + option)
- Tags-input H3: handlePaste concatenates with existing input text
- Toast H2: Presence layer for exit animation, dismiss→dismissing→remove flow
- Switch HIGH-1: contracts.ts normalizes case in register/assert
- Select C1: pure aria-activedescendant (no mixed DOM focus)
- Select H1: value-to-label Map registry (no DOM queries)
- Tooltip H1: SafePolygon for hoverable tooltips
- Toolbar HIGH-1/2: element-based focus tracking (no index, no O(N²))
- Scroll-area H3: mount flash prevention
- Splitter H1/H2: collapse/expand respects adjacent constraints
- Pagination H1: reactive page clamping like Ark-UI
- Popover H1: aria-labelledby already present (verified)
- Splitter: immediate pointer capture restored (moveBuffer breaks thin handles)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
6 months ago
dev
015d5e258d
soma: gesture layer, drawer component, full audit fixes across 26 components
...
Gesture Layer:
- Gesture.base(), Gesture.drag(), Gesture.resize() — shared pointer tracking
- VelocityTracker with ring buffer, staleness check, projection
- 52 tests (velocity + gesture integration)
- setPointerCapture deferred until moveBuffer exceeded (prevents click stealing)
Drawer Component:
- 8 parts: Provider, Trigger, Content, Overlay, Handle, Title, Description, Close
- Gesture.drag() integration for swipe dismiss
- Snap points (fractional + px), fadeFromIndex, handle tap-to-cycle
- Modal/non-modal/non-dismissible modes
- Logical directions (start/end) RTL-aware via soma presentation
- CSS custom properties (--drawer-progress, --drawer-offset-x/y)
Architecture:
- T1: 219 files migrated from $soma/ alias to relative paths
- T2: 35 wrappers — noop replaced with () => {} inline
- Translation system: componentLangs + common.buttons.* + idlangref constants
- COMPONENT_GUIDE.md + README.md fully updated to reflect current patterns
- contracts.ts: case-normalized registerContract/assertContract
Audit Fixes (P0 critical):
- DI1/PO1/TO1: 'provider' → 'root' in parts/contract/super
- TB1: data-table attr on wrapper
- CH1/SW1/NF4: hidden input rendering fixes
- SP2: panel cleanup on unmount
- RG1: roving tabindex fallback to first item
- CO1: aria-labelledby on collapsible content
Audit Fixes (P1 high):
- SafePolygon integrated in dropdown-menu SubProvider + tooltip
- 9 langs.ts files with idlangref constants
- Dialog: aria-label removed (WCAG 2.5.3), handleOpen/Close guards
- Stepper: count decrement + private, aria-label on List
- ToggleGroup: roving tabindex in multiple mode
- Select: pure aria-activedescendant (no mixed focus), label registry
- NumberField: startValue respects min, scrubber commit on pointerup only
- Toolbar: element-based focus tracking (not index)
Audit Fixes (P2 medium):
- A6: timer/listener cleanup in 6 components
- A12: getDirectionalKeys in 4 components
- A10: DOM queries scoped to root in 3 components
- Dropdown-menu: typeahead + Home/End in SubContent, activate() pattern
- Checkbox: PrimitiveLabelAttributes, getAriaChecked helper, stale value cleanup
- Pagination: reactive page clamping, Set-based computePageRange
- Scroll-area: thumbSize zero-guard, mount flash prevention
- Splitter: collapse/expand respects adjacent constraints, immediate pointer capture
5 issues remain (design decisions): stepper registry, table sub-row IDs,
tags-input ARIA model, tags-input paste, toast exit animation.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
6 months ago
dev
a1d0bee655
refactor: App layer with reactive lang, soma migration, 26 component audits, RTL fixes
...
- Add App service compositor (langs, nums, money, dates, units, presentation)
- Add createSvelteLang() with reactivity for locale and schema changes
- Migrate 25 soma providers from getSoma()/translator.svelte to Soma.getOr()/langs.t()
- Add reactive dir resolution in all component wrappers
- Add dir HTML attribute to 12 root providers (accordion, tabs, slider, etc.)
- Fix slider RTL: range, thumb, tick use right/left based on dir
- Add table structural parts: Header, Body, Footer wrappers
- Implement ColumnPinning, ColumnSizing, Expanded in table-core
- Remove soma core formatters, translator.svelte, prop-resolvers (moved to App)
- Remove duplicate convenience getters (locale, dir, translate) from App/Soma
- Audit all 26 soma components, create audit docs with 84 issues found
- Update test page with pinning, sizing, expandable rows demos
6 months ago
dev
8a88ad577a
soma: audit fixes — 84 issues across 25 components, Table complete
...
Table component:
- Complete state manager: sorting, filtering, pagination, selection,
column pinning (sticky), column sizing, expandable rows (sub-rows +
detail panels), column visibility
- Provider renders <table> with translated aria-label
- Sorting opt-in per column, consumer places sort buttons
- filteredRowCount/totalRowCount for correct pagination count
- Sub-row IDs hierarchical (parentId.subIndex), no collisions
- Production-grade test page (Swiss Industrial design)
- Full README with all features documented
Critical fixes (10):
- Toast: memory leaks (timer + hotkey listener cleanup via $effect)
- Toast: restartTimer() method for promise-based toasts
- ScrollArea: type='always' now works (check order fix)
- ScrollArea: thumb click no longer triggers track jump
- Tooltip: no crash without <Tooltip.Group> (ctx.getOr)
- Combobox: click-outside-to-close fixed (isValidEvent)
- Popover: stray 'n' character removed from popover.svelte
- TreeView: ARIA ownership fixed (role=treeitem on Branch, not Control)
- Splitter: documented required array spread for reactivity
High fixes (14):
- Checkbox: group disabled/name propagation + checked sync via $effect
- Select: aria-labelledby on content, aria-disabled on items
- Stepper: aria-controls + aria-labelledby cross-linking
- TagsInput: highlightPrev returns to input, role on Control/Item
- Editable: Preview role=button + aria-label
- Pagination: translated aria-label on items
- RadioGroup: removed unused Soma import
Medium fixes (60):
- registerContract() added to all 25 components
- Dead config=getSoma() removed from 7 providers
- Dead imports removed (Tooltip, Popover, Slider, Combobox)
- Dialog: aria-modal conditional on modal prop
- Slider: pointer capture release + onpointercancel
- Popover: hover timeout cleanup, aria-modal support
- Tabs: inactive content hidden + aria-hidden + tabindex=-1
- ToggleGroup: aria-orientation + roving tabindex fallback
- Toolbar: data-disabled on Button
- Stepper: Content tabindex
- TreeView: RTL keyboard support (expand/collapse key swap)
- NumberField: Enter key commit, clampOnBlur, allowMouseWheel, scrubber a11y
- Toast: data-state on root, aria-live on viewport
- ScrollArea: scrollbar aria-label + tabindex
- Collapsible: part root (not provider), aria-controls, role=region
- Tooltip: removed dead provider part from attrs
Architecture:
- COMPONENT_GUIDE.md: 14 audit-derived rules (A1-A14)
- Checklist expanded from 15 to 23 steps
- 8 new HTML primitive types (Table, THead, TBody, TFoot, TR, TH, TD, Caption)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
6 months ago
dev
1fd0b46b2e
soma: refactor providers to follow terra patterns, fix translations, add table/number-field
...
- Rename root→provider in all 25 component providers (terra convention)
- Fix translations: use translatePath (ling.t) instead of translate (ling.ts)
for dot-path resolution with soma. prefix
- Move onChange callbacks from provider Opts to writableActive setters
in svelte wrappers (terra pattern, reduces prop duplication)
- Add shared test layout with ling translator for all soma test pages
- Add Table component with sorting, selection, pagination, filtering,
column visibility, ARIA grid pattern
- Add NumberField component with glob numr integration
- Fix table headers reactivity (missing getter)
- Fix table column filters (was passing row instead of cellValue)
- Add AUDIT.md with F1-F15 findings (11 fixed, 4 pending)
- Revert accidental terra modifications
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
6 months ago
dev
dad3d26139
soma: add TagsInput component (23 total)
...
TagsInput with 7 parts: Provider, Control, Input, Item, ItemText,
ItemDeleteTrigger, ClearTrigger. Keyboard nav between tags (arrows,
Home/End, Backspace/Delete), paste split by delimiter, max tags,
custom validation, blur behavior, allow duplicates, data-highlighted.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
6 months ago
dev
c26e26f7c1
soma: 10 new components, README docs for all 22, PrimitiveAnchorAttributes
...
New components (10):
- Tabs: roving tabindex, automatic/manual activation, onFocusChange
- ToggleGroup: single/multiple, roving tabindex, deselectable
- Toast: imperative API (createToaster), swipe-to-dismiss, hotkey, promise()
- ScrollArea: custom scrollbars, visibility modes, thumb drag, position tracking
- Splitter: resizable panels, collapsible, flex-grow sizing, double-click toggle
- Stepper: multi-step wizard, linear mode, step state, PrevTrigger/NextTrigger
- TreeView: WAI-ARIA tree pattern, expand/collapse, typeahead, * expand siblings
- Pagination: page range algorithm, siblingCount/boundaryCount, slice() utility
- Toolbar: WAI-ARIA toolbar, roving tabindex, integrated ToggleGroup, Separator
- Editable: inline edit, activation/submit modes, draft tracking, auto-resize
Documentation:
- README.md for all 22 components with anatomy, ARIA, data-*, keyboard, usage
- Comparison tables vs ark-ui, bits-ui, radix-ui for every component
Infrastructure:
- Added PrimitiveAnchorAttributes to $soma/types/html.ts
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
6 months ago
dev
94c499db96
soma: 12 components, architecture docs, naming fixes, form tier complete
...
Components (12):
- Accordion (keyboard nav, single/multiple, collapsible, loop)
- Checkbox (indeterminate, group, readonly)
- Collapsible
- Combobox (input + floating listbox, consumer-side filtering)
- Dialog (variant dialog/alertdialog, modal, nested, animations, forceMount)
- DropdownMenu (15 parts, submenus, typeahead, checkbox/radio items)
- Popover (floating, openOnHover, modal, custom anchor)
- RadioGroup (roving tabindex, orientation, readonly)
- Select (single/multiple, typeahead, scroll-into-view, hidden select)
- Slider (drag, keyboard, single/range, ticks, vertical)
- Switch (hidden input, data-checked)
- Tooltip (skip-delay group, 3-state, hover/focus)
Architecture:
- State class files renamed: {name}.svelte.ts → {name}-provider.svelte.ts
(avoids Vite module resolution ambiguity with .svelte wrappers)
- Export name standardized: always Provider, never Root
- COMPONENT_GUIDE.md: step-by-step implementation guide with checklist
- SOMA_ARCHITECTURE.md: updated structure, anti-patterns, improvements table
- README.md: updated naming, file structure, inventory
- context.ts: error message uses Provider not Root
- Demo index page at /test/soma/
Bug fixes:
- DropdownMenu trigger missing onclick/onkeydown in props
- DropdownMenu interactOutsideBehavior always 'close' (not modal-dependent)
- Checkbox getContext in event handler → captured in constructor
- Select context not found → was Vite cache issue (not naming)
- ScrollLock unlock path
- Floating wrapper z-index: auto override
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
6 months ago
dev
98e3c741a1
Add Tooltip component, export Side/Align/Boundary from $soma/types
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
6 months ago
dev
bb0cdeb554
Add Accordion component (5 parts, keyboard nav, single/multiple, animations)
...
Parts: Root, Item, Header, Trigger, Content
- Single/multiple mode via type prop
- Collapsible (single mode: click open item to close)
- Per-item and global disabled
- Keyboard: Arrow keys (orientation-aware), Home/End, loop option
- Presence on Content with data-starting/ending-style
- --soma-accordion-content-height/width CSS vars for animations
- forceMount on Content
- Header with level prop (aria-level)
- Auto-generated item values when omitted
- Demo page with 5 sections
Compared with Radix, Ark UI, Bits UI:
- Has collapsible + loop (Radix has collapsible, Bits has loop, soma has both)
- Has header level (like Bits)
- Has CSS animation vars (like all three)
- Has data-starting/ending-style (like Bits)
- Skipped ItemIndicator (Ark) — presentation concern for visual layer
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
6 months ago
dev
193bfcdca2
Fix modal popover pointer-events blocked by ScrollLock
...
Popover Content floating wrapper now includes pointer-events: auto
when preventScroll is active (same fix as Dialog).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
6 months ago
dev
9cb5bf8dce
Move soma.svelte.ts to core/ directory
...
Soma class is the framework's identity — belongs in core/, not loose in root
alongside README and architecture docs.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
6 months ago
dev
1655871619
Add soma external/dates boundary + adapter for glob DatiInstance
...
external/dates/index.ts:
- Formal boundary with $lib/util/dates (same pattern as terra)
- Reexports types (DateValue, DateOrder, HourCycle, Granularity, etc.)
- Reexports core classes (CalendarDate, CalendarDateTime, Time, etc.)
- Reexports operations (parse, query, conversion, format)
external/dates/adapter.ts:
- Bridges DatiInstance (from @/glob/lib) to SomaDateFormat contract
- createSomaDateFormat(dati) → SomaDateFormat
- Only file in soma that knows about DatiInstance
types/services.ts:
- SomaDateFormat now uses concrete DateOrder and HourCycle types
- Exported via $soma/types
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
6 months ago
dev
b0d5407478
Add SOMA_ARCHITECTURE.md — architectural reference for soma framework
...
Equivalent to TERRA_ARCHITECTURE.md. Documents:
- 3-layer architecture (soma → visual layer → app)
- Design principles (layers as behaviors, Soma class, Provider pattern)
- data-* contracts and CSS variable conventions
- Animation system lifecycle (Presence, data-starting/ending-style)
- Anti-patterns and stability rules
- Improvements over terra (comparison table)
- Component checklist (including reference library comparison)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
6 months ago
dev
b6d9f51c47
Add Popover component, Dialog variant/restoreScrollDelay, fix floating z-index
...
Popover (7 parts):
- Provider, Trigger, Content, Arrow, Close, Anchor, Overlay
- Floating positioning via FloatingProvider/Content/Anchor integration
- openOnHover with configurable openDelay/closeDelay on Trigger
- Modal mode: overlay + focus trap + preventScroll
- Custom anchor support
- All behavior layers integrated (Presence, FocusScope, Dismissal, ScrollLock, TextSelection)
- Demo page with 6 sections
Dialog improvements:
- variant prop: 'dialog' | 'alertdialog' (changes role, escape/outside behavior)
- restoreScrollDelay prop on Content (passed to ScrollLock)
- escapeKeydownBehavior defaults from variant (alertdialog → 'ignore')
- Demo page updated with AlertDialog and restoreScrollDelay sections
Fix: FloatingContent wrapper no longer sets z-index: auto inline
(was overriding CSS z-index, causing content to render below overlay)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
6 months ago
dev
7b65026982
Refactor soma: consolidate layers, add Soma class, Dialog component, animation system
...
Layers:
- Consolidate 28 files/10 dirs → 13 files/2 dirs
- Separate behavior layers (classes) from internal components
- Normalize naming: Dismissal, ScrollLock, TextSelection, FocusScope
- Adapt floating layer from terra to soma (imports, CSS vars --soma--)
- Presence rewritten: data-starting/ending-style, forceMount, onComplete, getAnimations API
Architecture:
- Replace config/ with Soma class (root instance with services)
- Add SomaFormat namespace (date, number, currency, unit formatters)
- Add generic resolve() for prop → config → fallback chain
- Provider supports optional ref (ProviderOpts vs WithRefOpts)
- Hierarchical component barrel: import { Dialog } from '$soma/components'
- Descriptive IDs: soma-dialog-trigger-c12
Dialog component (7 parts):
- Provider, Trigger, Content, Overlay, Title, Description, Close
- Content integrates all behavior layers as classes (no template nesting)
- modal prop controls interactOutsideBehavior automatically
- Nested dialog support: depth, data-nested, --soma-dialog-depth CSS vars
- Animation support: forceMount, data-starting/ending-style, onOpenChangeComplete
- Translator integration for aria-labels
- JSDoc documentation on all props
Bug fixes:
- Presence mount without ref (chicken-and-egg)
- ScrollLock unlock path restores body style
- Nested dialog infinite loop (untrack mutation)
- pointer-events: none blocking dialog interaction
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
6 months ago
dev
574f9165ad
Add soma foundation + air components (Pagination, Editable, PinInput, RatingGroup, Stepper, FileUpload)
...
soma — new headless component system replacing terra:
- Provider base class with opt-in context injection
- Reactive system (state, readableActive, writableActive)
- Attrs system (createAttrs, contracts, helpers)
- Props system (mergeProps with on-prefix detection, no hardcoded event list)
- DOM utils (consolidated core, focus/, env)
- Keyboard, events, CSS, ID, config modules
- Layers: scroll, observers, visually-hidden, arrow, portal, text-selection,
dismissal (merged escape+dismissible), presence, focus-scope
- Collapsible component as first soma validation
air components:
- Pagination, Editable, PinInput (air-native), RatingGroup (air-native),
Stepper, FileUpload wrappers over terra
- Terra defaultContent refactor for children snippet pattern
- Avatar, Meter, Progress, Separator migrated to air-native
- Reactive utilities extracted to $lib/util/reactive (shared)
- $soma and $reactive aliases added
Architecture:
- soma is independent: no imports from terra or $lib/util/reactive
- Terra exports deprecated for migrated components
- README fundacional documenting all design decisions
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
6 months ago
dev
265fc9afc6
Add AlertDialog, DropdownMenu, ContextMenu air components; fix terra menu concurrent open
...
Components:
- AlertDialog: Provider, Content (context transition), Action, Cancel + demo
- DropdownMenu: Provider (revelation sound), Content (floating), Item, Separator,
GroupHeading + checkbox/radio indicators via CSS pseudo-elements + demo
- ContextMenu: Provider, Content sharing dropdown-menu visual language + demo
Terra fix — menu variant registry:
- Add menuRegistryByVariant in menu.svelte.ts to track open menus per variant
- MenuMenuState.onOpen() closes all other menus of same variant before opening
- Prevents concurrent context-menus (or dropdown-menus) from being open simultaneously
- Registry lives in terra infrastructure, not air — clean architectural boundary
- Cleanup via onDestroyEffect when component unmounts
CSS fixes:
- DropdownMenu content: z-index: 50 for proper stacking
- Checkbox/radio items: visual indicators via ::before pseudo-elements
- Selectors duplicated for both dropdown-menu and context-menu data-attr prefixes
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
6 months ago
dev
42c3055bf4
Semantic motion+sound engine: activate presets, enrich animations, activate dormant semantics, add drawer modal prop
...
Phase 1 — Activate advanced motion presets as defaults:
- softReveal → revelation (origin-aware translate + scale + fade)
- springContext → context (elastic spring for dialog, slide for drawer sides)
- smoothExpansion → expansion (clip-path bottom-up + opacity)
- Runtime now always merges DEFAULT_MOTION_PRESETS as base fallback
Phase 2 — Activate 4 dormant semantics in components:
- attention → Field (sound on state transition to 'error')
- destruction → TagsInput (sound on tag removal instead of selection.exit)
- emphasis → Badge (new `pulse` prop: CSS animation class + sound on activate)
- completion → Progress (sound when percentage reaches 100%)
Phase 3 — Enrich motion transitions and keyframes:
- springContext: side-aware (elastic scale for center, translate for edges)
- softReveal: origin-aware (micro-translate from trigger direction)
- attention keyframe: exponential decay shake (natural spring damping)
- emphasis keyframe: organic breath pattern (asymmetric, not sine pulse)
- selection keyframe: 4-step spring (1→1.15→0.95→1.04→1)
- navigation keyframe: new translateY + opacity (replaces generic scale)
- notification keyframe: bounce with translateY + scale overshoot + settle
- completion keyframe: added micro-rotation (1.5°) for "done" feel
Drawer non-modal support:
- Add `modal` prop to DialogProviderState (terra) with conditional aria-modal
- Drawer exposes `modal` prop (default true), passes to dialog state
- Non-modal drawer: no overlay, no focus trap, no scroll lock
- Demo section showing non-modal panel usage
Documentation:
- Create AIR_MOTION_SOUND_SYSTEM.md — semantic motor design document
- Includes psychology table for all 12 semantics (motion + sound + cognitive reasoning)
- Fix demo pages to use numeric gap props and Layout component alignment
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
6 months ago
dev
cb3fa2a3c7
Add air components (toggle-group, toolbar, avatar, meter, collapsible), fix CSS audit issues, fix combobox scroll, rebuild documentation
...
Components:
- Add ToggleGroup air wrapper (surface/outline/ghost variants, 6 colors, sound)
- Add Toolbar air wrapper (Provider, Group, GroupItem, Button, Link + semantics)
- Add Avatar air wrapper (6 sizes, solid/soft/outline, 6 colors, 4 radii)
- Add Meter air wrapper (3 sizes, 6 colors, animated fill bar)
- Add Collapsible air wrapper (trigger, animated content, expansion semantics)
CSS audit fixes:
- Rename 65 public resolver vars to private (--_air-*) in checkbox, switch
- Fix button radius privatization and warning solid-fg
- Fix slider circular reference in default tokens
- Add disabled-opacity tokens to button, toggle, tabs, toggle-group
- Tokenize combobox chip styles (12 direct semantic refs → component tokens)
- Fix tabs stack-gap public override → private resolver
Bug fix:
- Fix combobox scroll-on-open: replace scrollIntoView() with viewport-scoped
scroll in select.svelte.ts to prevent page scroll when opening dropdown
Documentation rebuild (19 → 9 normative + 5 archived):
- Consolidate 15 air docs into 6 (README, ARCHITECTURE, TOKENS, VISUAL_LANGUAGE, SEMANTICS, IMPLEMENTATION_GUIDE)
- Archive 5 historical docs to _archive/
- Fix config/ → system/ references across terra and air docs
- Update component inventory (13 → 30 components)
- Fix font documentation (add Lora serif, update 12-step scale)
- Absorb SVELTE5_BINDABLE_PATTERN into terra README
- Update air hub page with all new component entries
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
6 months ago
dev
b31bc2f055
.
6 months ago
dev
6748851a88
Add remaining air components, semantics, motion, and layout system
...
- Add Accordion and Checkbox air components with tokens and contracts
- Add full Layout system: Box, Flex, Grid, Group, Stack, HStack, VStack, Wrap, AutoGrid, AspectRatio, Container, Section, Separator, ScrollArea, Splitter, Float
- Add audio semantics facade: attention, completion, emphasis, feedback, persistence, selection
- Add motion semantics system
- Add dom, interaction, lib, runtime, resources directories
- Add component tokens and contracts for all new layout components
- Add icon CSS, audio barrel exports, tokens/motion.css
- Update test pages: accordion, animations, checkbox, layout
- Update existing components: button, dialog, drawer, field, input, select, switch, tabs, toast, spinner, typography
- Update base/earth themes (static tokens, motion, sound)
- Remove deprecated internal/context.ts, internal/style.ts, earth/motion.ts
- Update terra accordion and scroll-area exports
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
6 months ago
dev
bb18edc6fe
Audit and refactor air/terra system: fix layer 3 violations, rename config→system, add missing motion classes
...
- Fix typography components bypassing layer 3: heading, text, display, code, code-block, kbd, text-virtual-list now read font-family/font-weight from component tokens instead of directly from layer 2 semantics
- Add 5 missing stateClass CSS implementations: air-motion-selection, air-motion-navigation, air-motion-notification, air-motion-completion, air-motion-destruction
- Fix persistenceNode race condition in sound engine with ref-counting (multiple Spinners no longer silently fail)
- Remove Promise<void> lie from playSemantic() return type
- Export getAir() from air/index.ts barrel
- Delete deprecated tokens/contract.css
- Rename config/ -> system/ in both air and terra for semantic accuracy (~70 files updated)
- Rewrite AIR_CONTINUITY.md and update AIR_ARCHITECTURE.md with accurate component inventory
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
6 months ago
dev
5eda0c6aef
Expand air component system and translator integration
6 months ago
dev
b30092dd06
Refactor air architecture: clean dependency boundaries, enrich Behavior/Dom, fix AudioContext
...
- getAir() is now the single entry point — returns behavior, dom, translator, logger
- behavior.play() encapsulates soundEnabled check + preset resolution
- dom.resolve() resolves ResponsiveProp using current viewport/breakpoints
- internal/ has no knowledge of config/ (correct dependency direction)
- internal/ types stripped of Air prefix; public barrel re-exports with prefix
- context.ts defines TranslatorService locally (structurally compatible with TerraTranslator)
- button/text components updated to use only getAir(), no direct terra/config imports
- AudioContext fix: withRunningContext() resumes on first user gesture before playing
- AIR_IMPLEMENTATION_GUIDE updated: 12 semantics, correct APIs, current patterns
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
6 months ago
dev
9a9c4d4f14
Add air sound/motion/behavior systems, refactor responsive, update terra config and tokens
6 months ago
dev
19711efa84
Expand air design system with components, tokens, and typography
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
6 months ago
dev
786658f81f
Build out air design system foundation
6 months ago
dev
a86ebdcf69
Stabilize terra architecture and runtime contracts
6 months ago
dev
0766cfe49f
Add comprehensive CSS documentation to all Terra UI components
...
- Add "Selectores CSS" section documenting all data-* attributes
- Remove -root suffix from data attributes (data-component-root → data-component)
- Update attrs.ts to generate cleaner attribute names
- Update contracts.ts with new naming convention
- Update README.md documentation
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
6 months ago
dev
978a6f3463
Fix Command demo with Dialog integration
...
- Add Command Dialog demo (⌘K style) with proper Dialog.Trigger
- Make all inline demos collapsible to prevent UI clutter
- Add keyboard shortcut (cmd+k / ctrl+k) for Command Dialog
- Add close button (✕) and onSelect handlers to close dialog
- Fix CSS import paths in air/ and terra/ test pages
- Fix various syntax errors in test pages (toggle, toggle-group, meter)
- Update Switch and RadioGroup contracts with missing attributes
- Fix missing ctx declarations in time-field and time-range-field
- Fix checkbox group import error
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
6 months ago
dev
bf998409ff
.
6 months ago
dev
05c2b0b65a
Add TagsInput to terra test hub
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
6 months ago
dev
68105e46a6
Add TagsInput component
...
Headless tags/chips input with full keyboard support:
- Enter/delimiter → add tag, Backspace on empty → remove last
- ArrowLeft/Right → navigate between tags, Delete/Backspace on tag → remove
- Clear button, max tags limit, duplicate prevention
- Form submission via hidden inputs (name prop)
- Parts: Root, Input, Tag, TagText, TagRemove, Clear
Also fix dati_engine.svelte.ts DateOrder import after linter edit.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
6 months ago
dev
24e226bdda
Remove acel library and update glob engines
...
- Delete entire src/uix/acel/ (superseded by terra component library)
- Refactor glob lib: NumrFormat rich type system, curr/unit/dati engine updates
- Update lib/index.ts barrel exports
- Minor test page and CSS updates
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
6 months ago
dev
ad1a1f8946
Fix type errors after terra reorganization
...
- Add DatiTimeFormat ('12h'|'24h') and DatiDateOrder aliases to dati_types.ts;
replace numeric HourCycle throughout dati_engine so actx and tests compile
- Add missing logger field to TerraConfigState.opts
- Fix percent NumberField: use edit-mode formatter on focus/commit/watch.pre
- Fix test pages: Toolbar.Group value type (string), Progress tuple cast
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
6 months ago
dev
ffdbb79234
Add NumberField terra primitive and expand glob numr format system
...
- glob/numr_types: replace NumrConfig with rich NumrFormat (style, currency,
percent, unit, notation, compactDisplay, signDisplay, grouping, dir) using
semantic type names decoupled from Intl.NumberFormatOptions
- glob/numr_engine: internal numrFormatToIntlOpts adapter keeps Intl hidden
from consumers; mergeFormats/clampDecimals for safe instance+call merging
- glob/numr_engine.svelte: updated signature to accept NumrFormat
- terra/number-field: new headless primitive (Root, Label, Input, Increment,
Decrement) with spinbutton ARIA, locale-aware format/parse via createNumr,
direction via resolveDirectionProp, name prop for hidden form input
- terra/number-field types use NumrFormat from glob, no Intl dependency
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
6 months ago
dev
bf9042ad92
Update terra README to reflect post-refactor architecture
...
Rewrites the architecture guide to match the current directory layout:
- layers/ (was base/), config/ at top-level, dom/ as separate top-level
- utils/state/, utils/framework/, utils/collections/, utils/css/
- createTerraContext replaces new Context<T>()
- Adds Drawer as the full practical example, including the z-index note
for overlay stacking when both content and overlay share a Portal
Also adds z-index to drawer test page (.overlay: 50, .drawer: 51) so
content always renders on top of the overlay regardless of DOM insertion order.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
6 months ago
dev
9f60f035c6
Add terra direction config support
6 months ago
dev
f1dfc893b4
Refine air architecture contract
6 months ago
dev
9deac478e0
Add terra form primitive and field integration
6 months ago
dev
29e6168261
Add terra date domain adapter
6 months ago
dev
5039a3e38a
Reorganize shared date utilities
6 months ago
dev
b3fc77a28e
Refactor terra date utilities split
6 months ago
dev
27bcc65eee
Add terra drawer primitive and fix test page parsing
6 months ago
dev
b8b24d9fb2
Port terra combobox and finalize legacy cleanup
6 months ago
dev
9a30073941
Refactor terra virtual list
6 months ago
dev
e9677e9617
Retire legacy uiux from actx
6 months ago
dev
68e15ef884
Remove legacy uiux bridge from terra
6 months ago