Calendar (WIP)
Gregorian date selection, localized weekdays and explicit caption composition.
Calendar is a single-date Gregorian control. value uses YYYY-MM-DD; the canonical visible month uses YYYY-MM. Selection and month can each be controlled. A successful requestMonth means a proposal was emitted, not that the owner accepted it. Refused or pending cross-month keyboard navigation keeps the current valid Tab entry; accepted navigation materializes and focuses only after canonical month changes and current availability is checked. Focus is not stolen back from an external control.
Composition and clock ownership
Section titled “Composition and clock ownership”The ten atoms are Root, Caption, Heading, Previous, Next, Grid, Weekdays, Weekday, Row and Day. Compose seven Weekday atoms with offsets 0–6 inside Weekdays, then optionally retain six indexed Rows (index 0–5) of Day atoms with offsets 0–41 as capacity. By default the canonical month displays the minimum complete 4, 5 or 6 weeks; Root fixedWeeks=true explicitly reserves six. Root exposes weekCount; indexed unused Rows and unused offset Days expose hidden and are hidden/disabled off the focus path. Unindexed rows and explicit dates remain application-authored. Weekday labels and date order follow Root weekStartsOn (0 = Sunday) and locale; full localized civil dates name the grid cells. direction="rtl" mirrors Left/Right navigation, leaving Up/Down and week boundaries unchanged. Navigation controls accept a11yLabel for icon-only accessible naming.
The host supplies today as a civil-date string. Base never reads a clock or timezone: no today means no current-date marker. Today and selected are independent, including unavailable dates; today projects aria-current="date". Initial month priority is explicit month, explicit defaultMonth, selected value/defaultValue, supplied today, then deterministic 1970-01. Later clock updates do not silently navigate. unavailable is a string array; invalid inputs retain their prior valid value/default. Root disabled combines with local Day/Previous/Next disabled policy; readOnly blocks selection while allowing browsing.
Explicit month/year caption composition
Section titled “Explicit month/year caption composition”The demo uses real family Select controls and bindCalendarCaption(source, {month, year}) through public Calendar month/disabled state and requestMonth. Caption itself is only a semantic group. Month and year selectors are application composition, not an internal Calendar Select dependency. The helper always restores canonical control values after rejection or pending acceptance, subscribes to later commits, and exposes dispose() for teardown. The demo owns an explicit year option list (not a Calendar limit), local-clock today, midnight/visibility refresh and complete controlled prop records. Each Select trigger has real Month/Year text in its content slot; this supplies naming content to the existing Select protocol without demo writes to owned ARIA attributes. Its current Web content-name projection still needs a role-appropriate accessible-name verification by the responsible owner.
Liquid Glass is an Apple-inspired material projection, not a one-to-one public Calendar reference implementation. Optical material capability and the opaque fallback must be verified separately.
Verification boundary
Section titled “Verification boundary”This remains WIP. Calendar behavior has focused actual-host tests including WC, React, Vue and Vue2; public Props/Exposes/AsHook domains are checked independently. The current CLI collector misses some legitimate inherited Calendar/nested Button state tokens, so stateful generated CSS and browser visual fidelity are not accepted. Compiler interpretation is a separate owner’s responsibility, not a reason to constrain valid Prototype semantics. Native GPUI/Qt, compiled and packed parity, exact-commit browser evidence and independent acceptance remain open.