Date input with an attached calendar popover. DatePicker owns the shared value, visible
month and open state; Soma composes DateField, Popover and Calendar, while Eidos only adds
the visual size, variant and color recipe.
trace
{#if trace.length === 0}
open the picker and select a date
{:else}
{#each trace.slice(0, 3) as entry}
{entry.event} · {entry.family}{entry.intent
? ' · ' + entry.intent
: ''}{fmtTime(entry.at)}
{/each}
{/if}
open {String(open)}
value
{valueLabel}
{#if tab === 'live'}
Controls
Props grouped by the layer that owns them:
soma keeps value, min/max, popover
state and calendar behavior; eidos
adds visual treatment. Sema events live in the dedicated
{ event.preventDefault(); tab = 'sema'; }}>Sema
tab.
size
{#each ['sm', 'md', 'lg'] as value}
{/each}
variant
{#each ['surface', 'outline', 'ghost'] as value}
{/each}
color
{#each ['primary', 'secondary', 'neutral', 'affirm', 'risk'] as value}
{/each}
Demo content
labelinput name
somaheadless · shared value, min/max, popover and calendarsvelte
{somaSnippet}
eidosvisual · root plus attached DateField, Popover and Calendar partssvelte
{eidosSnippet}
{/if}
{#if tab === 'api'}
API reference
Public DatePicker surface used by this demo. The component is date-first: value,
min/max, popup state and calendar behavior are the relevant controls here.
Prop
Owner
Default
Description
value bindable
soma
undefined
Selected `DateValue`. Calendar and input segments share this state.
placeholder bindable
soma
today
Visible month anchor when the picker opens.
open bindable
soma
false
Popover open state.
minValue / maxValue
soma
-
Selectable date limits. Invalid min/max marks Calendar invalid and exposes the message.
isDateDisabled
soma
-
Matcher for hard-disabled days.
isDateUnavailable
soma
-
Matcher for unavailable days that remain visible in the grid.
required / disabled / readonly
soma
false
Root, input, trigger and calendar state.
closeOnDateSelect
soma
true
Close the popover after a calendar selection.
numberOfMonths
soma
1
Render one or two visible months in the popup.
fixedWeeks / pagedNavigation
soma
false
Calendar grid height and navigation step.
disableDaysOutsideMonth
soma
true
Days from adjacent months are shown but not selectable.
weekStartsOn / locale / dir
soma
services
Calendar ordering, labels and directional keys.
size eidos
eidos
md
Shared visual scale for field, trigger and calendar.
variant eidos
eidos
surface
Visual treatment of the input and popup calendar.
color eidos
eidos
primary
Intent palette for focus and selected-day affordances.
Reference comparison
Feature
Air
React Aria
Ark
Bits
UIX
Decision
Segmented input + calendar popover
no local Air component
yes
yes
yes
yes
Compose DateField, Popover and Calendar.
Explicit minValue / maxValue
-
yes
yes
yes
yes
Expose directly in Soma and demo controls.
Unavailable / disabled matchers
-
yes
yes
yes
yes
Forward to Calendar as first-class picker props.
Multiple months
-
yes
yes
yes
yes
Calendar remains the source of month layout.
Composite semantic events
-
callbacks
callbacks
callbacks
yes
Field, calendar and popover events are surfaced together in the picker demo.
{/if}
{#if tab === 'morfo'}
morfo
· declarative contract
Source: src/uix/morfo/components/date-picker.ts. DatePicker declares only
the composition-specific root, trigger and calendar bridge. DateField, Popover and
Calendar keep their own contracts.
The picker event surface is composed: DateField commits typed segment changes,
Calendar commits date selection and navigation, and Popover owns disclosure events.
Owner
Events
Why
DatePicker
{datePickerEvents.length}
Root state and composition.
DateField
{dateFieldEvents.length}
Typed date commits and clears.
Calendar
{calendarEvents.length}
Date select, unselect and month navigation.
Popover
{popoverEvents.length}
Open and close causes.
Composed event declarations
Owner
Name
Family
Verb
Sequence
Intent
{#each eventRows as { owner, action }}
{@const intentDecl = 'intent' in action.semantic ? action.semantic.intent : undefined}
Selectors live in src/uix/eidos/components/date-picker/date-picker.css.
The root supplies DateField variables and the popup calendar reuses the Calendar recipe
without drawing a second card.
The picker combines the ARIA contracts of DateField, Popover and Calendar. The trigger
opens a dialog-style popup; the grid keeps Calendar keyboard behavior.
Keyboard
Key
Action
Enter / Space
Open the popover from Trigger; select focused day inside Calendar.
Escape
Close the popover.
Arrow keys
Edit date segments in the input or move focus by day/week in the calendar grid.