# 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.