Two trigger-family recipes. Both Provider parts carry data-archetype=
'trigger', so cursor + hover dim + focus ring come from archetypes.css
for free; recipes layer in component-specific visuals.
Toggle (`[data-toggle]`):
- button envelope (padding, border, radius, white bg)
- data-state='on' → filled accent (--eidos-toggle-accent default blue)
- data-invalid → red border (uses --eidos-tint-threat)
Switch (`[data-switch]` + `[data-switch-thumb]`):
- 44×24 pill track, padded
- data-state='checked' → accent track + thumb translateX(travel)
where travel = width - thumb-size - 4px (track padding × 2)
- thumb shadow, cursor inherited from track (overrides archetype's grab)
Eidos test page drops its :global([data-toggle]) / [data-switch]
scoped CSS — recipes now suffice.
Public CSS API:
--eidos-toggle-{bg, bg-on, color, color-on, border, border-on, radius,
padding, accent}
--eidos-switch-{track-width, track-height, track-bg, track-bg-checked,
track-border, thumb-size, thumb-bg, accent}
Verification: smoke 68/68, morfo-check 66/66.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
morfo-runtime
parent
14233af4a7
commit
375e769428
@ -0,0 +1,43 @@
|
||||
/**
|
||||
* Eidos — Toggle component recipe (V1.5).
|
||||
*
|
||||
* Toggle is a single two-state button. The Provider IS the button and
|
||||
* carries `data-archetype='trigger'`, so cursor + hover dim + focus
|
||||
* ring come from archetypes.css for free. The recipe layers in the
|
||||
* button envelope (padding, border, radius, background) and the "on"
|
||||
* appearance (filled accent).
|
||||
*
|
||||
* Public CSS API:
|
||||
* --eidos-toggle-bg / --eidos-toggle-bg-on
|
||||
* --eidos-toggle-color / --eidos-toggle-color-on
|
||||
* --eidos-toggle-border / --eidos-toggle-border-on
|
||||
* --eidos-toggle-radius
|
||||
* --eidos-toggle-padding
|
||||
* --eidos-toggle-accent (drives bg-on + border-on default)
|
||||
*/
|
||||
|
||||
[data-toggle] {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 0.4rem;
|
||||
padding: var(--eidos-toggle-padding, 0.4rem 0.8rem);
|
||||
border: 1px solid var(--eidos-toggle-border, hsl(220 13% 82%));
|
||||
border-radius: var(--eidos-toggle-radius, 6px);
|
||||
background: var(--eidos-toggle-bg, hsl(0 0% 100%));
|
||||
color: var(--eidos-toggle-color, hsl(220 25% 12%));
|
||||
font: inherit;
|
||||
transition:
|
||||
background-color var(--eidos-motion-fast) var(--eidos-easing-standard),
|
||||
border-color var(--eidos-motion-fast) var(--eidos-easing-standard),
|
||||
color var(--eidos-motion-fast) var(--eidos-easing-standard);
|
||||
}
|
||||
|
||||
[data-toggle][data-state='on'] {
|
||||
background: var(--eidos-toggle-bg-on, var(--eidos-toggle-accent, hsl(214 95% 50%)));
|
||||
border-color: var(--eidos-toggle-border-on, var(--eidos-toggle-accent, hsl(214 95% 50%)));
|
||||
color: var(--eidos-toggle-color-on, hsl(0 0% 100%));
|
||||
}
|
||||
|
||||
[data-toggle][data-invalid] {
|
||||
border-color: var(--eidos-tint-threat);
|
||||
}
|
||||
Loading…
Reference in new issue