feat(alert-dialog): port from soma to eidos (Tier 1 sprint, 2/5)
Modal Dialog variant with role=alertdialog, forced modal=true, and
click-outside disabled. Soma delegates to the Dialog runtime
(variant='alertdialog') so DOM markers are Dialog's (data-dialog-*)
— eidos reuses Dialog's recipe for chrome and adds two
alert-dialog-specific buttons: Action + Cancel.
Eidos shape:
- Provider, Content, Action, Cancel — alert-dialog-specific wrappers
- Trigger, Overlay, Title, Description, Header, Footer, Portal —
re-exported from Dialog's eidos barrel (zero duplication)
Recipe (alert-dialog.css):
- Only styles Action + Cancel
- Buttons consume Toggle palette tokens (same "interactive button"
vocabulary used by <Toggle> and <ToggleGroup.Item>)
- Auto-color cascade: Action picks up the dialog's data-color so a
risk/threat-flagged dialog gets a red/amber Action button without
manual recipe code
- Cancel stays neutral so the safe-choice contrast is preserved
Morfo:
- scope: ['soma'] → ['soma', 'sema', 'eidos']
- The morfo declares Action + Cancel parts only (Provider is virtual,
other parts inherited via Dialog runtime delegation)
- Classified passive at this contract level (Dialog owns the events);
README documents this in §"Passive justification"
Demo: 6-tab canonical template with intent / size / position chips,
soma + eidos snippets, references comparison table vs Radix
Primitives / Bits UI / Ark UI / Chakra v3 / Radix Themes / shadcn.
Checks: svelte-check 0 errors, component:audit 91/91 PASS.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>