dev
f62b32677c
Add Eidos pagination wrapper
5 months ago
dev
bdaae718ad
Add Eidos slider wrapper
5 months ago
dev
5895f9d8b8
Add Eidos progress and meter wrappers
5 months ago
dev
d3efdb5c30
Remove legacy Eidos CSS layout fallback
5 months ago
dev
73915f03a1
Guard Eidos CSS recipe imports
5 months ago
dev
cdf47c1f53
Remove Eidos flat API residue
5 months ago
dev
8194ad3a98
Clarify Eidos intent icon wording
5 months ago
dev
753e27487f
Guard Eidos recipe value leaks
5 months ago
dev
9c01c12402
Move Eidos wrapper font sizes to recipes
5 months ago
dev
c939de90c8
Harden Eidos config and wrappers
5 months ago
dev
eba7b4522d
Guard persisted Eidos config shapes
5 months ago
dev
b2c832b47a
Reject unsafe Eidos CSS config values
5 months ago
dev
546ad40251
Validate Eidos color role slots
5 months ago
dev
b48a6c48bf
Validate Eidos semantic color groups
5 months ago
dev
cfee72bfc8
Validate Eidos static primitives
5 months ago
dev
110c5026b9
Validate Eidos motion and icon primitives
5 months ago
dev
45d266b1c6
Validate Eidos typography token keys
5 months ago
dev
56e173f7e2
Validate Eidos CSS-facing keys
5 months ago
dev
8e17e64d13
Harden Eidos runtime config validation
5 months ago
dev
bfd3b4020e
Validate persisted Eidos configs
5 months ago
dev
3c115ce093
Guard Eidos namespace assignments
5 months ago
dev
277f1f24dc
Expand UIX permutation route coverage
5 months ago
dev
6508c7e562
Instrument UIX permutation demos
5 months ago
dev
c04b6a241a
Reconnect permutation runner routes
5 months ago
dev
cf7c83a6d3
Reconnect morfo DOM check
5 months ago
dev
f815dd95ac
Guard Eidos visual attr wiring
5 months ago
dev
5662f1aa94
Refresh route smoke validation
5 months ago
dev
53b76f6b4d
Clarify Eidos visual-only parts
5 months ago
dev
250ae7f75c
Guard Eidos component API shape
5 months ago
dev
a8045658aa
Guard Eidos recipe CSS contract
5 months ago
dev
306c371aef
Address Eidos audit findings
5 months ago
dev
f9591c5216
Fill Eidos recipe token gaps
5 months ago
dev
13cc14f971
Normalize Eidos component surface
5 months ago
dev
ad4a35800f
Align Soma docs with current layering
5 months ago
dev
7a85ea59c2
Align Soma public wrappers with providers
5 months ago
dev
a4c04a00b3
Inject ActiveDom into Soma scroll lock
5 months ago
dev
f276ef964f
Guard Sema runtime boundaries
5 months ago
dev
e3689c1080
Remove Soma common langs facade
5 months ago
dev
e709316380
Narrow Soma root barrel
5 months ago
dev
e7bb709e83
Keep Soma internals off public alias
5 months ago
dev
2fb1dd78c9
Guard Soma component README links
5 months ago
dev
8baa422974
Guard Soma wrapper export contract
5 months ago
dev
959ad3b1f9
Refresh Soma form import docs
5 months ago
dev
96edd41545
Tighten Soma public component surface
5 months ago
dev
2255d9f706
Add drag drop provider coverage
5 months ago
dev
2956895e04
Add toast provider coverage
5 months ago
dev
ccded8bc4a
Add form provider coverage
5 months ago
dev
0464111330
Add table provider coverage
5 months ago
dev
d6d23b3c9b
Add link preview provider coverage
5 months ago
dev
ef157feccc
Add grid list provider coverage
5 months ago
dev
9f60aa62a2
Add carousel provider coverage
5 months ago
dev
fe61f5be9b
Add alert dialog provider coverage
5 months ago
dev
3ceb94619a
Add editable provider coverage
5 months ago
dev
c3108b6903
Add tags input provider coverage
5 months ago
dev
3e1cd3148d
Add feed provider coverage
5 months ago
dev
c0221e0365
Add announce provider coverage
5 months ago
dev
d2a0998dc8
Add tag group provider coverage
5 months ago
dev
c108d02512
Add rating group provider coverage
5 months ago
dev
419ec80890
Add pin input provider coverage
5 months ago
dev
4b5d9078ed
Add splitter provider coverage
5 months ago
dev
445c5387f0
Add scroll area provider coverage
5 months ago
dev
7f5e46a66e
Add stepper provider coverage
5 months ago
dev
572779e905
Add toolbar provider coverage
5 months ago
dev
9d7c824652
Add breadcrumb provider coverage
5 months ago
dev
500904a2ed
Add pagination provider coverage
5 months ago
dev
eee0c6b4b1
Add search field provider coverage
5 months ago
dev
acab242c61
Add field provider coverage
5 months ago
dev
6a5152a5d7
Add tooltip provider coverage
5 months ago
dev
e22b418324
Add clipboard provider coverage
5 months ago
dev
407eb2f455
Add collapsible provider coverage
5 months ago
dev
8c2cb82059
Add progress and meter coverage
5 months ago
dev
41da8a2b26
Add slider provider coverage
5 months ago
dev
9975ba8631
Add tabs provider coverage
5 months ago
dev
15dc542117
Add toggle group provider coverage
5 months ago
dev
e3fd5b6a70
Add toggle provider coverage
5 months ago
dev
0dc6141849
Add switch provider coverage
5 months ago
dev
0d338d47f2
Add radio group provider coverage
5 months ago
dev
37cd177c37
Add checkbox provider coverage
5 months ago
dev
f3dadd0be7
Add accordion provider coverage
5 months ago
dev
30d77474f0
Add tree view provider coverage
5 months ago
dev
89790957a0
Add listbox provider coverage
5 months ago
dev
ad5a9627c7
Add menubar provider coverage
5 months ago
dev
5c434a0cf2
Add context menu provider coverage
5 months ago
dev
a6a8aec86d
Add dropdown menu provider coverage
5 months ago
dev
558f76626b
Add tree grid provider coverage
5 months ago
dev
d678d4ee60
Add navigation menu provider coverage
5 months ago
dev
c02b13cd47
Add color picker provider coverage
5 months ago
dev
813c4c440c
Add color field provider coverage
5 months ago
dev
cab1363616
Add file upload provider coverage
5 months ago
dev
eeb168043b
Add number field provider coverage
5 months ago
dev
5ebe68d640
Add virtual grid provider coverage
5 months ago
dev
859f873eb2
Add virtual list provider coverage
5 months ago
dev
5878e780bc
Add date field provider coverage
5 months ago
dev
2b36e2036c
Add date range field provider coverage
5 months ago
dev
c668cc1543
Add time field provider coverage
5 months ago
dev
5971d6233d
Add time range field provider coverage
5 months ago
dev
e4ce79cacd
Add time range picker provider coverage
5 months ago
dev
a44338ff2c
Add picker provider coverage
5 months ago
dev
05f87dc44a
Add Combobox provider coverage
5 months ago
dev
9fa00fa258
Move Soma public types out of providers
5 months ago
dev
eaeebd6991
Route Soma layer timers through UIX scheduler
5 months ago
dev
3050d273dd
Align Select public types and Soma inventory
5 months ago
dev
701f83d648
Document Soma coverage and domain lib split
5 months ago
dev
d319ec6b66
Move form core to forms lib
5 months ago
dev
02c1fb43ab
Move table core to datagrid lib
5 months ago
dev
4829ce1321
Move command scorer to shared strings lib
5 months ago
dev
e1a21269ec
Hide internal Soma provider classes from barrels
5 months ago
dev
25870b4e55
Expand Soma component coverage
5 months ago
dev
a3bcb66cde
Refresh UIX audit follow-up docs
5 months ago
dev
c6d24eeea3
Add high-risk Soma provider tests
5 months ago
dev
802ebce655
Tighten sema channel and floating contracts
5 months ago
dev
8b195e38e2
Drive virtualized item attrs from Soma runtime
5 months ago
dev
06d8926356
Drive Feed attrs from Soma runtime
5 months ago
dev
82aa9af76d
Drive TagsInput root attrs from Soma runtime
5 months ago
dev
02ee7e49aa
Drive TagGroup root attrs from Soma runtime
5 months ago
dev
f3e5f113ca
Drive RatingGroup attrs from Soma runtime
5 months ago
dev
c5595dda71
Drive Stepper state attrs from Soma runtime
5 months ago
dev
72c195d1c6
Drive Splitter attrs from Soma runtime
5 months ago
dev
12b41e2324
Drive Slider attrs from Soma runtime
5 months ago
dev
0eb50840e0
Drive Editable root attrs from Soma runtime
5 months ago
dev
e28b486c1c
Drive date and time field root attrs from Soma runtime
5 months ago
dev
c501ccbdf0
Drive range field attrs from Soma runtime
5 months ago
dev
95905c209b
Drive Form root attrs from Soma runtime
5 months ago
dev
c72ce793b0
Drive NumberField root attrs from Soma runtime
5 months ago
dev
89243e2f52
Drive SearchField root attrs from Soma runtime
5 months ago
dev
c6cf313734
Drive Field attrs from Soma runtime
5 months ago
dev
60403b95a3
Route Soma viewport scroll through ActiveDom
5 months ago
dev
0e57c61c46
Remove global browser guards from Soma runtime paths
5 months ago
dev
1d34200f46
Route Soma observers through ActiveDom
5 months ago
dev
0021826413
Avoid global window access in Soma helpers
5 months ago
dev
9a0ef78b62
Route Soma timers and document lookup through ActiveDom
5 months ago
dev
ca9359c32f
Add ActiveClipboard service for Soma clipboard
5 months ago
dev
d52a1919c6
Tighten Soma table filter and pinning state
5 months ago
dev
108c7ceb95
Harden Soma table pagination and pinning
5 months ago
dev
d7e3626580
Stabilize Soma table row indexing
5 months ago
dev
9a8779b9cb
Route Soma focus actions through ActiveDom
5 months ago
dev
45c607df90
Route Soma presence scheduling through ActiveDom
5 months ago
dev
986b86aa1d
Use ActiveDom frame scheduling in Soma
5 months ago
dev
8ca562ea36
Route Soma focus globals through ActiveDom
5 months ago
dev
48149ccf02
Route Soma DOM actions through ActiveDom
5 months ago
dev
847151387e
Remove Soma external facades
5 months ago
dev
487ec9b5c9
Share Soma list typeahead buffers
5 months ago
dev
5e975b6825
Share Soma menu typeahead helper
5 months ago
dev
077953976c
Guard Soma timers contract
5 months ago
dev
89911c36c2
Route Soma announce timers through scheduler
5 months ago
dev
88be88f210
Route Soma navigation menu timers
5 months ago
dev
8f4be6d425
Route Soma menu typeahead timers
5 months ago
dev
66a943093b
Route Soma typeahead resets through timers
5 months ago
dev
51945706d2
Route Soma drawer scroll guard timer
5 months ago
dev
46009592ed
Route Soma scroll area hide timer
5 months ago
dev
ad62a440d3
Route Soma clipboard reset through timers
5 months ago
dev
248152263c
Route Soma carousel autoplay through timers
5 months ago
dev
9a43cce697
Route Soma hover delays through timers
5 months ago
dev
6578cefdaf
Stabilize Soma overlay close targets
5 months ago
dev
5abeb298e9
Guard Soma morfo component coverage
5 months ago
dev
382446199a
Document public Soma time picker
5 months ago
dev
65039c1c4c
Export public Soma drawer module
5 months ago
dev
d6955cf4bc
Remove legacy component langs catalog
5 months ago
dev
cd75983ed8
Move date time translations to morfo
5 months ago
dev
f59dc6a60c
Move calendar translations to morfo
5 months ago
dev
9113211d83
Move color translations to morfo
5 months ago
dev
a6654b30ff
Move form drag translations to morfo
5 months ago
dev
fbea8f5a64
Move simple utility translations to morfo
5 months ago
dev
912be7769a
Move table pagination translations to morfo
5 months ago
dev
91558f34c2
Move tag translations to morfo
5 months ago
dev
8d685ad2ef
Move compact input translations to morfo
5 months ago
dev
ed96f7ca4f
Move simple navigation translations to morfo
5 months ago
dev
8b573e9c5c
Move simple component translations to morfo
5 months ago
dev
78939469e7
Move meter progress translations to morfo
5 months ago
dev
b2a0490e7d
Move file upload translations to morfo
5 months ago
dev
1ea1cdd9aa
Align Soma runtime docs
5 months ago
dev
201a4efb26
Remove stale Soma service types
5 months ago
dev
a093963b04
Guard component lang namespaces
5 months ago
dev
c050e04ef1
Normalize Soma lang keys
5 months ago
dev
0ca0f01f11
Normalize file upload lang namespace
5 months ago
dev
0074a6cbb7
Guard Soma DOM contract boundaries
5 months ago
dev
8b7e5cbab7
Declare Form AutoFields DOM contract
5 months ago
dev
37de27fcf2
Declare interactive data attrs in morfos
5 months ago
dev
caf208ade9
Declare free value data attrs in morfos
5 months ago
dev
3c7984c239
Declare range field input parts
5 months ago
dev
fe3defc7ea
Remove manual date field segment marker
5 months ago
dev
e2313c0f0f
Normalize standalone Soma runtimes
5 months ago
dev
d5f96aedf9
Normalize Soma root service references
5 months ago
dev
f652f54d5b
Use root Soma services in overlay providers
5 months ago
dev
0c37c7783f
Normalize Soma picker runtimes
5 months ago
dev
cde839dc5d
Consolidate Soma color picker runtime
5 months ago
dev
d3cae96ff2
Consolidate Soma context menu runtime
5 months ago
dev
aa5581121d
Consolidate Soma dropdown menu runtime
5 months ago
dev
5581f548cd
Consolidate Soma range calendar runtime
5 months ago
dev
8618703d31
Consolidate Soma calendar runtime
5 months ago
dev
e1df915add
Consolidate Soma file upload runtime
5 months ago
dev
3097a209f0
Consolidate Soma command runtime
5 months ago
dev
c4c37a3719
Consolidate Soma selection runtimes
5 months ago
dev
131cb4fc1b
Consolidate Soma field runtimes
5 months ago
dev
7822e74b3a
Consolidate Soma stepper menu runtimes
5 months ago
dev
ff91194d71
Consolidate Soma table time runtimes
5 months ago
dev
b1b919a8b6
Consolidate Soma tree carousel runtimes
5 months ago
dev
43552dde82
Consolidate Soma tag navigation runtimes
5 months ago
dev
c499dd239a
Consolidate Soma interaction runtimes
5 months ago
dev
c7527fc107
Consolidate Soma overlay runtimes
5 months ago
dev
cac7e89232
Consolidate Soma virtual list runtimes
5 months ago
dev
48b0c4ae2f
Consolidate Soma range control runtimes
5 months ago
dev
959439f5fa
Consolidate Soma input runtimes
5 months ago
dev
6df2f062ad
Consolidate Soma form feed runtimes
5 months ago
dev
a60d040282
Consolidate Soma provider runtimes
5 months ago
dev
73862094f6
Consolidate Soma group runtimes
5 months ago
dev
68dd40ef27
Remove visual prefs dimensions
5 months ago
dev
fbacd1133d
Remove frontend art
5 months ago
dev
a4cbe0c0b9
Tighten intent and morfo contracts
5 months ago
dev
e6e438b62a
Tighten uix audit contracts
5 months ago
dev
809c17b9bf
Close general Eidos architecture
5 months ago
dev
35958a4902
Clarify morfo translation contract
5 months ago
dev
607dfdbb48
Clarify direct UIX service contracts
5 months ago
dev
71e057652e
Align langs diagnostic wording
5 months ago
dev
e2ba371beb
Add UIX architecture regression guards
5 months ago
dev
8ad0471471
Refresh UIX architecture docs
5 months ago
dev
659585381f
Expose Eidos recipe token queries
5 months ago
dev
d822597ffe
Generate Eidos recipe tokens from config
5 months ago
dev
6da109875d
Prune legacy Eidos CSS runtime
5 months ago
dev
0a014ed9e5
Remove UIX audit docs
5 months ago
dev
26166b9e3c
Document UIX and arts ownership
5 months ago
dev
b121554918
Fix UIX docs theme and popover dismiss
5 months ago
dev
3dc775f440
Update UIX reauditoria notes
5 months ago
dev
223cdf9e92
Align sema docs with channel ownership
5 months ago
dev
694eb5c567
Clarify prefs projection contract
5 months ago
dev
77c37cd940
Clarify prefs ownership docs
5 months ago
dev
f76b30499a
Align Soma docs with runtime contracts
5 months ago
dev
87ab4f0496
Limit Eidos token barrel to active recipes
5 months ago
dev
6e8ced2e4c
Archive Eidos base theme CSS
5 months ago
dev
e21bf6c8b8
Stop importing Eidos contracts from tokens
5 months ago
dev
80328a4ad3
Stop importing archived Eidos contracts
5 months ago
dev
8d6d4c5700
Generate Eidos base CSS artifact
5 months ago
dev
26b9b83eb5
Move prefs projection out of ActiveUix
5 months ago
dev
df1562f852
Document Eidos static CSS boundary
5 months ago
dev
31399d80b2
Add Eidos density scalars
5 months ago
dev
d5ab8e9d99
Add Eidos layout primitives
5 months ago
dev
ae19318090
Document frontend as legacy opt-in service
5 months ago
dev
6d25364b21
Clarify Morfo value attrs runtime contract
5 months ago
dev
f331c988c1
Route UIX managed DOM writes through ActiveDom
5 months ago
dev
b90d0a24a9
Reduce UIX runtime allocation churn
5 months ago
dev
6476efffe7
Purge visual slices from Sema
5 months ago
dev
4cc5f26a5a
Defer sound channel priming
5 months ago
dev
6dfb07ee44
Clarify UIX theme contracts
5 months ago
dev
c12b1c48c8
Refactor active uix architecture
5 months ago
dev
e0eb5f718e
Advance eidos theming and DOM ownership
5 months ago
dev
cb5097b3c3
Add active eidos runtime and morfo lang registry
5 months ago
dev
7214ae7940
uix: drawer/popover/toast/accordion eidos wrappers + sema packs + /uix docs scaffold
...
- eidos: migrate drawer / popover / toast / accordion to wrapper subdirectory
pattern (provider + parts + tokens + recipe per component); avatar wrapper
added; toggle/switch/collapsible recipe polish.
- sema: per-component packs (accordion, drawer, popover, toast); engine /
resolver / event / sema-map updates; visual channel hold refinements.
- morfo: drawer event surface (variant, dragToDismiss, isDragging, minSize/
maxSize, onDragStart); popover/toast/accordion event refinements; schema +
types updates.
- soma: drawer provider rewrite (variant, dragToDismiss, isDragging binding,
drag callbacks); toast provider/toaster restructure with toast-main +
toast-status parts; popover content/arrow polish; gesture/floating layer
updates; manipulation layer scaffold; avatar removed (eidos owns it now).
- web/routes: legacy demos updated for new APIs; new /uix docs scaffold
(web/routes/uix/) with Radix-style shell, theme/lang/format/semantic prefs,
and standardized component template (Drawer page first — 6 tabs, live
controls, drag-hint arrows, scroll-safe body wrapper).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
dev
e6862265e2
sema/morfo/eidos: typed selector builder + dialog wrapper + emerge color
...
sema architecture
- sema-map: 5-channel registry (motion / sound / color / presence / haptic)
via SemaChannelSignatures declaration merging; engine stamps data-event-*
tokens; flat CSS-style cascade replaces the eventLabel-overrides middle layer.
- sema-map: emerge family gains base.color so intent deltas can shift
hue / saturation / intensity. Without a base, the resolver was skipping the
channel and Dialog open with intent='threat' rendered as neutral blue in the
Sema tab visualisation.
- types: SEMA_FAMILY_POLICY const drives compile-time + runtime intent
requirements per family. Object shape so future per-family policy fields
fit alongside. Emerge events MAY now declare intent (canon update — a
Dialog confirming threat carries it in its very appearance).
- chans: rename vibra→haptic, add HapticChannel V1 (Vibration API);
SoundChannel eager-init on first user gesture (autoplay race fix).
morfo selector discipline
- morfo/selectors.ts (new): semaSelector(morfo, partKebab, matchers?) —
type-checked against morfo.parts and morfo.events. Sema cascade rules MUST
use it; hand-written strings are an architecture violation that breaks
silently when morfo renames a part.
- dialog morfo: open carries intent via fromProp; close-cancel /
close-dismiss / close-dismiss-outside drop intent (cancellation has no
evaluative load); close-save stays hardcoded fulfill (commit fulfils the
user's decision regardless of dialog context).
eidos dialog migration (4th pilot)
- eidos/components/dialog/: full subdirectory wrapper — flat <Dialog> +
compound Provider/Trigger/Overlay/Content/Title/Description/Close/Header/
Footer; size + position responsive props; sheet auto-form on narrow
viewports; closePosition for the auto-X.
- sema/components/dialog.ts: cascade rules use semaSelector(dialogMorfo,
'content', matchers?). Intent block adds character (haptic kind / pattern)
but never overrides pitch / gain / contour — those are intent.deltas
signature ownership and overriding flattens per-intent perceptual difference.
demo controls + dialog page
- src/lib/_demo (DemoSwitch / DemoEnum / DemoText / DemoRange) — unified
controls reused across all component demos.
- web/routes/dialog: live preview always rendered above tabs; per-event
Sema tab with independent intent probe; signature visualisation + Play
buttons with fallback target chain.
documentation
- CLAUDE.md: intent.deltas signature ownership rule; eidos drift defense
doctrine (types over lint); 2026-05-09 hand-off entry.
- morfo/README: Typed selector builder section.
- eidos/README: linter section reframed as opt-in safety net for plain CSS
recipes; the architectural mechanism is compile-time typing.
- sema/README: open channel registry + flat cascade docs + override
semantics + intent policy const + selector builder discipline.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
dev
29ce812f94
collapsible: flat <Collapsible> ergonomic default + compound parts
...
Per the doctrine update in GUIA §13: eidos for multi-part components
exposes BOTH a flat default that auto-composes Provider/Trigger/Content
AND the compound parts for advanced cases. Soma + morfo remain the
universal composable foundation underneath.
Why: with the previous "compound only" rule for multi-part, eidos
collapsible was a pure pass-through that added nothing operational —
the consumer wrote the same import + same shape as soma. The flat
default makes eidos earn its layer by collapsing the 90% case to a
single call:
// 90% case — flat ergonomic
<Collapsible bind:open>
{#snippet trigger()}Show details{/snippet}
<p>Body content.</p>
</Collapsible>
// Advanced — compound (parts in different subtrees, multi-trigger,
// conditional content)
<header><Collapsible.Provider bind:open>
<Collapsible.Trigger>Show</Collapsible.Trigger>
</Collapsible.Provider></header>
<aside>
<Collapsible.Content>...</Collapsible.Content>
</aside>
The architectural virtue: if the flat doesn't fit, a developer drops
to soma + morfo and composes freely. No vendor lock-in in the visual
layer; eidos is the design system convention, soma is the universal
primitive.
Files:
- src/uix/eidos/components/collapsible/collapsible.svelte (NEW): flat
default that auto-composes Provider + Trigger + Content via a
`trigger` snippet for the toggle label and `children` for the body.
- src/uix/eidos/components/collapsible/types.ts: adds
`CollapsibleFlatProps = SomaCollapsibleProps & { trigger?: Snippet }`.
- src/uix/eidos/components/collapsible/index.ts: exports `default`
(flat) plus named `Provider`/`Trigger`/`Content` (compound).
- src/uix/eidos/components/collapsible/{trigger,content,provider}.svelte:
fixed children destructuring so snippets propagate cleanly to soma
(was previously spreading $props() blindly which can lose snippet
bindings in Svelte 5).
- src/docs/GUIA_IMPLEMENTACION_SEMAUIX.md: NEW §13 "Doctrina del API:
soma compound, eidos opinionado" formalises the two-shape rule and
the architectural virtue (soma+morfo as universal foundation).
Renumbered §13/§14 → §14/§15.
- web/routes/collapsible/+page.svelte: live preview now uses the flat
form; eidos snippet shows the flat shape; soma snippet keeps the
compound shape; Notes tab updated.
- src/uix/eidos/components/collapsible/README.md: rewrote API section
with both shapes + the "if neither fits, use soma+morfo" escape.
Tests 218/218 green. npm run check baseline 39.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
dev
a9ad71118b
fix: dark mode + collapsible demo layout shift
...
Two real bugs reported on the collapsible demo:
1. **Dark mode broken across all migrated components.**
- The docs site layout sets `document.documentElement.dataset.theme =
'light'|'dark'` — those are the selector names the docs CSS uses.
- The eidos themes (themes/base/{light,dark}.css) only respond to
`[data-theme='base-light'|'base-dark']`. Different namespace.
- Result: docs grays swap in dark mode but eidos doctrinal palette
(primary/secondary/neutral/affirm/fulfill/risk/threat/loss) stays
in light values, so component text renders dark on dark.
- Fix: each eidos theme now accepts BOTH selectors. `[data-theme=
'base-light'], [data-theme='light'], :root { ... }` and equivalent
for dark. Existing consumers that use `base-*` keep working; the
short `light/dark` aliases handle the docs site convention.
2. **Collapsible trigger jumps from center to left when expanded.**
- The preview-stage uses `display: flex; justify-content: center;
align-items: center;` — natural for buttons/switches that don't
grow.
- `Collapsible.Provider` is `display: block` so it shrink-fits its
content as a flex item. Closed = trigger-width (centered visually);
open = trigger + content width (longer, so the visual center
anchors trigger at the left edge).
- Fix: collapsible demo overrides the preview-stage style with
`justify-content: flex-start; align-items: flex-start` and wraps
the provider in a `max-inline-size: 32rem` panel. Disclosure
ergonomics need anchor-left + grow-down, not center.
- Also swapped the body's `--gray-50` (docs site token) for
`--color-surface-raised` + `--color-content-primary` (eidos
doctrinal tokens) so the panel inherits the dark-mode swap.
npm run check holds at the 39-error baseline.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago