+ Calendar primitive for picking a date range. Soma owns the state
+ machine (start → preview → end), the keyboard nav, the min/max
+ constraints (minValue, maxValue,
+ minDays, maxDays) and the hover-preview
+ signaling. Eidos paints the cells with distinct
+ data-range-start / data-range-end /
+ data-in-range / data-in-preview-range
+ treatments — the shared partial at
+ range-calendar.css is consumed by both this standalone
+ component and by DateRangePicker's popover content.
+
+ trace
+ {#if trace.length === 0}
+ click a day to start; hover to preview; click second to commit
+ {:else}
+ {#each trace.slice(0, 3) as entry (entry.at)}
+ {entry.event} · {entry.family}{entry.intent ? ' · ' + entry.intent : ''}
+ {fmtTime(entry.at)}
+ {/each}
+ {/if}
+
+ range {rangeLabel}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {#if tab === 'live'}
+
+
Controls
+
+ Soma owns the range state machine, the keyboard navigation, the
+ min/max constraints and the hover-preview signaling. Eidos adds
+ variant/size/color cascades.
+
+
+
+ soma range constraints
+
+
+
+
+
+
+
+
+
+
+
+ soma grid layout
+
+
+
+
+
+
+
+
+
+
+
+
+
+ eidos visual props
+
+
+
+
+
+
+
+
+
+ eidos
+ composition · with bind:value
+ svelte
+
+ The sub-parts (Header, Heading,
+ PrevButton, NextButton,
+ MonthSelect, YearSelect,
+ Grid, GridHead, GridBody,
+ GridRow, HeadCell, Cell,
+ Day) are pass-throughs to soma — they accept the
+ headless props from the soma `RangeCalendarXxxProps` types
+ unchanged. See the morfo table below for the per-part data
+ contract.
+
+ Selectors at src/uix/eidos/components/range-calendar/range-calendar.css.
+ This file is consumed BOTH by the standalone eidos
+ <RangeCalendar> and by
+ <DateRangePicker>'s popover content — the
+ same [data-range-calendar-*] attrs land in both
+ environments. The picker recipe only adds scoping overrides
+ (no chrome, max-content sizing, transparent background).
+
not-allowed cursor + reduced opacity (+ line-through for unavailable).
+
+
+
+
+ {/if}
+
+ {#if tab === 'a11y'}
+
+
Accessibility
+
+ Follows the APG grid pattern
+ with localized labels for range-start / range-end / in-range
+ announced via aria-label additions on the relevant
+ day cells.
+
+
+
Keyboard
+
+
+
Key
Action
+
+
ArrowLeft / ArrowRight
Move focus ±1 day.
+
ArrowUp / ArrowDown
Move focus ±1 week.
+
PageUp / PageDown
Move focus ±1 month.
+
Shift+PageUp / Shift+PageDown
Move focus ±1 year.
+
Home / End
First / last day of the visible week.
+
Enter / Space
Commit start (first press) or end (second press).
+
Escape
Cancel the in-progress range; revert to last committed.