# 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 `` 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):
1. `picker-shell/picker-time.ts` (new) — pure helpers: `localeHourCycle`,
`granularityHasTime`, `timeOf`, `withTimeOn`, `withoutTime` (reuse `$libs/days`).
2. `picker-shell/picker-time-row.svelte` (new) — value-agnostic time row (knows
only `TimeValue`); self-hides when granularity has no time; composes the
`` namespace; owns the relocated time-row CSS.
3. Both `*-picker.svelte` roots derive `hourCycle ?? localeHourCycle(locale)` →
pass to the soma Provider (input honours it); publish a bridge context
(value get/set + granularity/locale/resolved hourCycle).
4. `.Time` parts: `date-picker-time.svelte` (one row) + `date-range-picker-time.svelte`
(two rows, start/end); register in each `index.ts` + `types.ts`.
5. langs: `picker-shell.ts` keys `time` / `start` / `end`.
6. Demos: date-picker uses `` (drop the local bridge/CSS);
date-range-picker gains a granularity control + ``.
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 `CalendarNav` context so
Calendar/RangeCalendar/DateRangePicker reuse the refined month/year selects +
prev/next buttons (deleted the range pickers' bespoke selects). New
`calendar-nav-button`, `calendar-select.css`, `visual-context`, soma `calendar-nav`.
- **Popover** — fixed trigger re-click bounce.
- **TimePicker → datetime building blocks**: `DayPeriodToggle` now composes the
system `` (was native radios; `type=single` `deselectable=false`
solid/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.css` hover rule now excludes
`data-state=on` so 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.