Audit caught `data-kind="date"` violation — the date-picker / date-range-picker
morfos declare `data-kind ∈ [day, month, year]` but the public `kind` prop
accepted `'date' | 'month' | 'year'` and defaulted to `'date'`. Rename
prop value `'date' → 'day'` so the trio is consistent (all named after
the grid cell granularity).
**Rationale (book-pure)**:
- The trio `day` / `month` / `year` is internally consistent — all three
name the granularity of the grid cell the calendar view shows.
- `'date'` was awkward in the trio: month and year pickers also pick
"dates", just at coarser granularities.
- The morfo enum was already canonical (`['day', 'month', 'year']`);
this aligns the prop with the contract.
**Surface touched** (all `'date' → 'day'` for the kind value):
soma components:
- date-picker / date-range-picker / date-field / date-range-field:
provider type (DatePickerKind / DateRangePickerKind), default value,
test fixtures, types.ts JSDoc.
demos (web/routes/uix/components/):
- date-picker / date-range-picker / date-range-field: kind state,
selector chips, doc table.
`'date'` literals that DON'T refer to kind (kept untouched):
- ValueProfile = 'date' | 'datetime' | 'zoned' (different concept).
- SegmentLock = 'none' | 'year' | 'monthYear' | 'date'.
- CSS `input[type='date']` (HTML attribute).
**Result**:
- `npm run morfo:check`: 1 issue / 1 component → **0 issues**. All 107
routed morfos validate against their demo DOM ✓
- `npm run check`: 0 errors ✓
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
<tr><tdclass="name">onInvalid <spandata-uix-tagdata-kind="soma">soma</span></td><tdclass="type">DateOnInvalid</td><tdclass="default empty">—</td><td>Called when validation fails.</td></tr>
<tr><tdclass="name">minValue <spandata-uix-tagdata-kind="soma">soma</span></td><tdclass="type">DateValue</td><tdclass="default empty">—</td><td>Earliest acceptable date for both endpoints.</td></tr>
<tr><tdclass="name">maxValue <spandata-uix-tagdata-kind="soma">soma</span></td><tdclass="type">DateValue</td><tdclass="default empty">—</td><td>Latest acceptable date for both endpoints.</td></tr>
<tr><tdclass="name">kind <spandata-uix-tagdata-kind="soma">soma</span></td><tdclass="type">'date' | 'month' | 'year'</td><tdclass="default">'date'</td><td>Segment filter (Chakra-style). Both endpoints share the same kind.</td></tr>
<tr><tdclass="name">kind <spandata-uix-tagdata-kind="soma">soma</span></td><tdclass="type">'day' | 'month' | 'year'</td><tdclass="default">'day'</td><td>Segment filter (Chakra-style). Both endpoints share the same kind.</td></tr>
<tr><tdclass="name">granularity <spandata-uix-tagdata-kind="soma">soma</span></td><tdclass="type">'day' | 'hour' | 'minute' | 'second'</td><tdclass="default">auto (from placeholder)</td><td>Visual granularity. Adds time segments for <code>hour+</code>.</td></tr>
<tr><tdclass="name">hourCycle <spandata-uix-tagdata-kind="soma">soma</span></td><tdclass="type">12 | 24</td><tdclass="default">locale-derived</td><td>12-hour or 24-hour clock.</td></tr>
<tr><tdclass="name">hideTimeZone <spandata-uix-tagdata-kind="soma">soma</span></td><tdclass="type">boolean</td><tdclass="default">false</td><td>Hide the timezone segment on <code>ZonedDateTime</code>.</td></tr>