3.8 KiB
CONTINUE — hand-off (2026-06-26 → next session)
Branch active-uix. This session's work is committed + pushed. Pick up the
DateTimePicker refactor next.
Next task — shared "time-in-popover" for DatePicker + DateRangePicker
Full plan: C:\Users\dev\.claude\plans\woolly-knitting-fairy.md (approved).
Decisions locked with the user: composable <DatePicker.Time /> part (not
auto-rendered) · DateRangePicker shows start + end (two time pickers).
Goal: lift the ad-hoc time editor out of the DatePicker demo into a
shared, reusable mechanism, then give DateRangePicker the same. DatePicker
becomes effectively a DateTimePicker (granularity reaching hour|minute|second
surfaces the time editor); the hour cycle derives from locale when
hourCycle is unset (en-US → 12h, es-ES → 24h), for input and time editor.
Both soma providers already plumb granularity + hourCycle; the missing piece
is the popover time editor (today hand-composed in the date-picker demo).
Execution order (see plan §1–6):
picker-shell/picker-time.ts(new) — pure helpers:localeHourCycle,granularityHasTime,timeOf,withTimeOn,withoutTime(reuse$libs/days).picker-shell/picker-time-row.svelte(new) — value-agnostic time row (knows onlyTimeValue); self-hides when granularity has no time; composes the<TimePicker>namespace; owns the relocated time-row CSS.- Both
*-picker.svelteroots derivehourCycle ?? localeHourCycle(locale)→ pass to the soma Provider (input honours it); publish a bridge context (value get/set + granularity/locale/resolved hourCycle). .Timeparts:date-picker-time.svelte(one row) +date-range-picker-time.svelte(two rows, start/end); register in eachindex.ts+types.ts.- langs:
picker-shell.tskeystime/start/end. - Demos: date-picker uses
<DatePicker.Time />(drop the local bridge/CSS); date-range-picker gains a granularity control +<DateRangePicker.Time />.
Verify: npx svelte-check … --threshold error (0 new; the only pre-existing
time-picker error is time-picker-content.svelte size/Popover) ·
npx vitest run src/uix/soma/components/{date-picker,date-range-picker,time-picker} ·
browser DOM checks (preview 5180; :hover/screenshot tooling is flaky).
Done this session (in the commit)
- Calendar-nav unification — shared
CalendarNavcontext so Calendar/RangeCalendar/DateRangePicker reuse the refined month/year selects + prev/next buttons (deleted the range pickers' bespoke selects). Newcalendar-nav-button,calendar-select.css,visual-context, somacalendar-nav. - Popover — fixed trigger re-click bounce.
- TimePicker → datetime building blocks:
DayPeriodTogglenow composes the system<ToggleGroup>(was native radios;type=singledeselectable=falsesolid/primary, right-aligned); sliders self-hide per granularity;ruler→showScales; slider labels follow the canonical label scale per size; active-toggle hover fixed (no wash;archetypes.csshover rule now excludesdata-state=onso a pressed toggle keeps its accent instead of going content-primary/black in light). - DatePicker demo — locale-derived hour cycle + composed TimePicker time row (this is what the next-task plan generalises to the component).
- Perf (audit A31) — lifted selection/checked sets across 9 providers.
- langs — picker-shell footer strings.
Do NOT commit (active / separate tracks)
soma/components/words/**, eidos/components/palabras/** (firm rule), the
untracked chronos/ component, web/routes/demos/**, and the loose untracked
docs (README.md, SYSTEM-AUDIT-*, Disenando_*, COMPARATIVA_SIUM_*).
metrics.ts langs rode along this commit only because langs/index.ts imports it.