dev
8515f5e673
fix(color-picker): ValueSwatch now reactively reflects the current color
...
User report: 'la caja del color seleccionado en el pickercolor no se
actualiza, compruébalo.'
Root cause
----------
The Eidos recipe had an `[data-color-picker-value-swatch]::after`
overlay that painted `var(--cp-trigger-color, currentColor)` on top of
the swatch — a CSS variable set ONLY on the trigger button by the
Eidos wrapper. The popover content is portaled outside the trigger's
subtree, so the var never propagated into the ValueSwatch element.
The overlay therefore stayed at its fallback (`currentColor`) and
covered the soma-set inline `background-color`, hiding the live colour.
Fix
---
1. **Soma `ColorPickerValueSwatchProvider.backgroundStyle`** now emits
BOTH `background-color: <hex>` and `--cp-current-color: <hex>` so:
- Consumers without the eidos recipe still see the colour (inline
background-color, as before).
- Eidos recipes / external CSS can read `--cp-current-color` as a
reactive CSS variable on the element itself.
2. **Eidos CSS** drops the `::after` overlay. Instead the checker
(transparency pattern) lives on a `::before` pseudo with
`z-index: -1` inside an isolated stacking context, so the soma's
inline `background-color` paints ON TOP and the checker shows
through only where alpha < 1. No more colour stomping.
Checks: 67/67 component-audit PASS, svelte-check 0 errors / 0 warnings.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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