Review rodiny Date & time — nálezy, bug list, rozhodnutí

Datum: 2. 9. 2026 večer · reviewer: Claude (jako senior UX/UI) · zadal Štěpán (AD) Předmět: 6 podkomponent rodiny date-time po stories MR !2822 (mergnuto do main). Postup = nová metoda schválená 2. 9. (inventura použití → stavová matice z kódu → story jako port → design gate). Každý nález ověřen proti kódu na origin/main acrm (4f9af7cb4, klon /root/acrm-main), proti registru a docs v DS repu a proti screenshotům /ds/components/date-time/<sub>?tab=examples (/root/.claude/jobs/1ba41f0e/tmp/review-date-time-*.png).

0. Shrnutí

Rodina je na tom výrazně lépe než Button: všech šest podkomponent je skutečný kód v @acrm/ui, všech šest se v appce používá (DateField 35 souborů, TimeField 8, DateRangeField 4, DateTimeRangeField 3, Calendar 4, PickerPanel 4 — jen uvnitř balíčku), nativní <input type="date|time|month"> v appce neexistuje a docs mají čísla kontrastu spočítaná správně (ověřeno z tokens.css, shoda na dvě desetinná místa). Web už nelže: coverage bere jen vlastní stories, prázdné sekce se nevypisují, legacy mockup se neukazuje, status je beta dokud chybí AD approval.

Co je špatně, je stejného druhu jako u Buttonu, jen jinde: stories si kompozice vymýšlejí místo aby je portovaly. Date field „Task dialog row" — v TaskDialogu žádný DateField není (je tam MetaChip + Popover + Calendar). Date range „report filter + Zobrazit" — v appce žádné tlačítko u rozsahu není. Date-time range „Zasedačka Praha je volná" — availability a presetDurations mají v appce 0 použití. Dvě Composition mají vymyšlenou patičku dialogu s anglickým „Cancel / Save". Calendar má sekci Sizes s jiným obsahem v každé velikosti. Pět stories sedí v .dp-inline — třídě, kterou appka nepoužívá a kterou vlastní docs vedou jako kandidáta na smazání. Registr pořád vede vypůjčené legacy stories v Default (stejná chyba jako D10 u Buttonu).

V appce se navíc našly čtyři věci, které DS má krýt a nekryje: Time field nejde otevřít myší (seznam otvírá jen ↓; story si click domýšlí), přepínač „Celý den" je nativní checkbox vedle kanonického Checkboxu, presety termínu jsou druhé „option chips", a datum + čas jako jeden okamžik se skládá ručně na čtyřech místech třemi způsoby.

Z 6 podkomponent jsou kanon všechny; Picker panel je interní primitiv (0 přímých použití v apps/web, 3 konzumenti v balíčku) — AD rozhodne, zda zůstává samostatná stránka.

1. Nálezy per podkomponenta (ověřeno v kódu)

Legenda stavové matice: K = existuje v CSS/props, S = story ho ukazuje, – = neexistuje / neukazuje. Zdroj enginu: apps/web/src/ds/date-picker.css (řádky v závorce).

1.1 Date field (<DateField>, .dp-field .dp-input .dp-open)

  • Použití: 35 souborů (apps/web/src/pages/DocumentDetailPage.tsx, apps/web/src/components/accounting/InvoicePaymentDialog.tsx:245, packages/ui/src/components/RecordRail.tsx…). Kanon.
  • Matice: rest K/S · hover – (paritně s .acrm-input, ok) · focus K (:focus-within 30–33) / S jen textem · open K (aria-expanded DateField.tsx:177) / CSS – / S – · disabled K (38–42, 83–86) / S · error K (.err 34–37, error prop + neplatný commit) / S · readonly – · typing echo K (.dp-echo, .bad 219–233) / S staticky · .dp-open hover+focus-visible K (75–82) / S –.
  • Otevřený panel nemá v CSS žádný stav spouštěče (A1).
  • Stories: Default ok. Variants: konvence roku (3 pole) je správná ukázka; čtvrtá položka „futureBias" je prázdné pole — vizuálně totéž co State „empty", chování patří do Code (D10). States: kompletní, statický echo je přijatelný (transientní stav). Composition: vymyšlená — komentář tvrdí „Task dialog row", ale TaskDialog.tsx:952–1013 skládá termín z MetaChip + Popover + Calendar, DateField tam není (D2); třetí položka „dialog footer" = inline borderTop + anglické „Cancel / Save" místo Dialog footer (.acrm-dialog-foot) (D3). Reálný port: InvoicePaymentDialog.tsx:244 (<Field label hint><DateField>), LogTimeDialog.tsx:79 (DrawerField), rail RecordRail.tsx:428.
  • Registr: Default vede legacy components--date-_-date-field (title „Components", 4 pole) před vlastní Default — web ji vykresluje jako první příklad (D1). Třídy: .dp-clear patří panelu, chybí .dp-fieldset .dp-echo .dp-foot (D15).
  • Docs: usage/a11y sedí s kódem (placeholder „Doplnit…" DateField.tsx:45, Tab-out chování 121–142, návrat fokusu 144–147, aria-invalid 166). Kontrasty ověřeny.

1.2 Time field (<TimeField>, .dp-field.time .dp-timelist .dp-topt)

  • Použití: 8 souborů (DochazkaPage.tsx:574/582, AssistantSettings.tsx:180/189 se step={30}, MeetingDetailPage.tsx:240/242, WrapupBand.tsx ×3, ContactLogDialog.tsx:533/561, TaskDialog.tsx:990). getStart 3 místa, step 2 místa — obě varianty stories mají reálné krytí. Kanon.
  • Matice: rest K/S · focus K/S textem · open K jen přes ↓ (TimeField.tsx:82–84; input nemá onClick ani otevření na focus, žádný spouštěč) · disabled K/S · error – (neplatný text tiše reverts, TimeField.tsx:52–57) · .dp-topt hover/on/focus-visible K (572–584) / S on staticky · disabled option –.
  • Seznam nejde otevřít myší. DateField má .dp-open, TimeField nic — uživatel s myší se o seznamu nedozví (A2). Story Picker panel Variants si domýšlí onClick na inputu, komentář Time field říká „opens from ↓ or click", usage.md „↓ or after typing" — trojí nepravda o jednom chování (D9, D11).
  • Stories: Variants vkládají statický seznam do .dp-inline (mrtvá třída, D7) místo reálného .dp-panel. Composition .dp-timegroup je reálný vzor (DateTimeRangeField.tsx:192, MeetingDetailPage.tsx:222), chybí odkaz soubor:řádek; „form field — Field" — v appce TimeField v <Field> sedí jen ve WrapupBand, jinde raw .acrm-field (A13).
  • Docs: kromě D11 sedí; a11y správně přiznává, že zavření ze scrimu nevrací fokus (A14).

1.3 Date range (<DateRangeField>, .dp-field.wide.range .dp-entry .dp-sep .dp-preset)

  • Použití: 4 soubory — DovolenePage.tsx:550 (DrawerField „Období", futureBias), LeaveSection.tsx:257, InteractionFilter.tsx:100, ManageSegmentDialog.tsx:587. Všechna 4 předávají fromLabel/toLabel; nikde vlastní presets, nikde error. Kanon.
  • Matice: rest K/S · focus K/S textem · open K (aria-expanded 127) / CSS – (A1) · disabled K/S · error K/S (prop bez použití v appce — ukázka stavu z kódu je v pořádku) · prohození konců K (52–55) / S textem · otevřený rozsah (jeden konec) K/S.
  • Stories: Variants „custom end labels" je jen aria, vizuálně totéž (D10). Composition vymyšlená: „report filter — Field + tlačítko Zobrazit" — žádné ze 4 míst apply button nemá (D5); druhá položka staticky kopíruje hlavičku panelu .dp-entry.pair, kterou komponenta renderuje sama (D8). Port 1:1 = DovolenePage.tsx:549–558.
  • Registr: Default vede legacy components--date-_-date-range-field (3 pole) před vlastní Default (D1).
  • Docs: sedí (Tab-out zavírá 94–99, swap, .count overline tabular 204–209). „No focus return after scrim/Esc" je přiznaný bug, ne limit (A14).

1.4 Date-time range (<DateTimeRangeField>, .dp-stack .dp-termin .dp-timegroup .dp-allday .dp-presets .dp-status)

  • Použití: 3 soubory — NewMeetingForm.tsx:208 a KalendarPage.tsx:218 (DrawerField „Termín" + allowOvernight), ZasedackyPage.tsx:191–202 (allowAllDay={false}). availability 0×, presetDurations 0×, step 0×. Kanon, dva mrtvé props.
  • Matice: timed / all-day / multi-day / overnight K/S · presety .dp-preset rest/hover/focus-visible/on K (248–269) / S on · status ok/busy K (607–622) / S jen přes prop bez použití · empty K/S · disabled – (komponenta nemá disabled, části ano) · error – (jen vestavěná hláška overnight).
  • Stories: States „availability free/busy" a Composition „meeting dialog — presetDurations 15/30/45/60 + Zasedačka Praha je volná + Cancel/Save" ukazují kompozici, která v appce neexistuje (D4, D3). Variants „all day — one date, no times" renderuje dvě data („26. 8. – 26. 8.", screenshot) — komponenta při allDay vždy zobrazí druhý DateField s value.toDate ?? value.date (DateTimeRangeField.tsx:181–183); popisek story i usage.md („leaves the end empty") lžou (D12). Port 1:1 = NewMeetingForm.tsx:207–209 a ZasedackyPage.tsx:190–203.
  • Kód: .dp-allday je nativní <input type="checkbox"> s komentářem „karta prvku v DS zatím není" (DateTimeRangeField.tsx:222–233) — Checkbox už kanon je (A3). .dp-preset vs .acrm-optchip = dvě chip provedení (A4). ZasedackyPage si místo .dp-status.busy renderuje vlastní <p style={{color: warning-ink}}> (ZasedackyPage.tsx:204–208) — přesně to, co má availability dělat, a nikdo ho nezapojil (A7).

1.5 Calendar (<Calendar>, .dp-pop .dp-month .dp-grid .dp-day .dp-nav .dp-wd)

  • Použití: 4 soubory — v appce FilterBar.tsx:1041 (range, 1 měsíc, v .acrm-popover menu chipu), TaskDialog.tsx:961 (single + singleDatePresets, v Popoveru); v balíčku DateField, DateRangeField. Kanon.
  • Matice buňky: rest · hover (362) · we · out · today · sel (+ start/end) · in · preview · disabled · focus-visible — vše K; S: today/sel/in/open range/disabled ✓, hover/preview/focus jen textem (dynamické, ok). Presety on K/S. Nav hover/focus-visible K / S –.
  • Stories: Sizes porušuje pravidlo „stejný obsah, mění se jen rozměr" — vlevo single s jedním datem, vpravo range se dvěma měsíci; months je layout varianta (už ve Variants), mode="single" months={2} engine ani neumí (.range se váže na isRange && shown > 1, Calendar.tsx:312) (D6). Všech 5 stories sedí v .dp-inline (0 použití v appce) (D7). Composition ručně skládá vnitřek DateRangeField (hlavička + patička) místo portu FilterBar/TaskDialog (D8). Default vede legacy components--date-_-calendar-inline- (D1).
  • Docs: sedí (metriky 36×30, 252, 26px presety, Shift+PageUp rok, aria-live na titulech). #fff v .dp-day.sel správně přiznáno jako drift (A10).

1.6 Picker panel (<PickerPanel>, .dp-panel .dp-scrim)

  • Použití: 0× přímo v apps/web, 3 konzumenti v balíčku (DateField:187, DateRangeField:135, TimeField:147). Interní primitiv rodiny — kanon jako implementace, jako samostatná dokumentovaná podkomponenta k rozhodnutí AD (§4).
  • Matice: open/closed K · desktop fixed + flip K (place() place.ts:7–16) · sheet ≤720px K (628–700) / S – (media query, ne prop; ok) · aria-modal jen mobil K / focus trap – (A15).
  • Stories: Default a Variants = to, co DateField/TimeField dělají samy; Variants time list si vymýšlí click na input (D9); Composition = ruční kopie DateRangeField (D8). Story se hodí spíš jako jediná „anatomie vrstvy" než tři sekce.
  • Docs: sedí (place() flip nahoru u spodní hrany, zavření při odscrollování 66–69, Esc na document 83–93); --line-300 na bílé je 1.38:1, ne 1.35 (zanedbatelné).

1.7 Průřezově (celá rodina)

  • .dp-chip (101–140) 0 použití, .dp-inline (511–520) 0 použití v appce — mrtvý engine; index.usage.md to ví a zároveň stories .dp-inline používají (D14, A7).
  • .dp-clear (440–462) a .dp-addtime (464–487) jsou identické definice (34px, 600 12px --font-display) — dvě třídy pro jednu položku patičky (A5).
  • TaskDialog.tsx:995–1003 používá .dp-open (spouštěč kalendáře) jako obecné × „Odebrat čas" (A6).
  • Raw .dp-* mimo balíček: TaskDialog termín (960–1013) a MeetingDetailPage TimeRangeEditor (222–243) — bespoke pickery ze tříd enginu (A12).
  • Datum + čas jako jeden okamžik: WrapupBand.tsx:184–196, 255–267, 347–359 (.dlrw-when, dialer.css:1036) a ContactLogDialog.tsx:523 (inline grid 2fr 1fr 1fr) — 4 ruční řádky, 3 provedení, žádný kanon (A8).
  • Formát data mimo formatDate: toLocaleDateString v 8 souborech obrazovek, formatCzDate (apps/web/src/lib/format.ts:187) v asistentovi — index.usage.md tvrdí „still true: no toLocaleDateString in screens" (D13, A9).
  • validate-ds-usage nemá pro rodinu jediné pravidlo; absence nativních date inputů je hlídána jen dvěma unit testy na dvou místech (A11).

2. Bug list — DS (registr, web, stories, docs)

#KdeChybaOpravaRozhoduje
D1registrDefault u date-field / date-range / calendar vede vypůjčené legacy stories components--date-_-* (title „Components", date-picker.stories.tsx) — web je vykresluje jako první příkladz registru odstranit; legacy story smazat, baseline přesunout na vlastní Default (obdoba D10 Button)—
D2storiesDate field Composition tvrdí „Task dialog row" — TaskDialog DateField nepoužívá (TaskDialog.tsx:952–1013: MetaChip + Popover + Calendar)port 1:1 InvoicePaymentDialog.tsx:244 (Field + hint) a rail RecordRail.tsx:428; komentář soubor:řádek—
D3storiesDate field + Date-time range Composition: vymyšlená patička dialogu (inline borderTop, minWidth, anglické „Cancel / Save" s kbd)patička jen přes Dialog footer (.acrm-dialog-foot) s českými popisky, nebo bez patičky—
D4storiesDate-time range States (availability) a Composition (presetDurations + availability „Zasedačka Praha je volná") = props s 0 použitím v appceComposition = NewMeetingForm.tsx:207–209 (DrawerField Termín, allowOvernight) + ZasedackyPage.tsx:190–203 (allowAllDay=false); availability/presets až po A7po A7
D5storiesDate range Composition „report filter + Zobrazit" — v appce žádný apply button u rozsahu neníport 1:1 DovolenePage.tsx:549–558 (DrawerField „Období")—
D6stories + registrCalendar Sizes: jiný obsah v každé velikosti (single/1 měsíc vs range/2 měsíce); months je layout variantasekci Sizes zrušit (Sizes: []), months zůstává ve Variants s popiskem 264 / 540 px—
D7storiesCalendar (5×) a Time field Variants sedí v .dp-inline — třída s 0 použitím v appcehostitel = reálný: .dp-panel (PickerPanel) nebo .dp-pop v Popover (TaskDialog.tsx:960, FilterBar.tsx:1041)—
D8storiesCalendar / Picker panel / Date range Composition ručně kopírují vnitřek DateRangeField (.dp-entry.pair + .dp-foot) — tři statické kopie interního markupCalendar Composition = FilterBar chip menu (FilterBar.tsx:1004–1050) a TaskDialog termín; Picker panel jedna anatomie s otevřeným DateRangeField—
D9storiesTime field komentář „↓ or click" a Picker panel Variants (onClick na inputu otevírá seznam) ukazují chování, které TimeField nemá (TimeField.tsx:131–145)story nesmí simulovat spouštěč; po A2 ukázat skutečnýpo A2
D10storiesNeviditelné „varianty": Date field „futureBias" (prázdné pole), Date range „custom end labels" (jen aria)přesunout do Code/props; Variants jen co je vidět—
D11docstime-field.usage.md: „the list opens with ↓ or after typing" — nepravda (jen ↓)opravit podle A2po A2
D12docs + storydate-time-range.usage.md „a one-day event simply leaves the end empty" a story label „all day — one date" — komponenta vždy renderuje druhé datum (DateTimeRangeField.tsx:181–183)opravit text; label „all day — start and end, same day"—
D13docsindex.usage.md „still true: no toLocaleDateString in screens" — 8 souborů appky ho používápřepsat na „rule, currently violated in 8 files (A9)" do doby fixu—
D14docsindex.usage.md vede .dp-inline jako kandidáta na smazání, DS stories ji přitom používajípo D7 smazat z enginu (A7) a z docs—
D15registrseznamy tříd nekonzistentní: date-field má .dp-clear (patička panelu), chybí .dp-fieldset .dp-echo .dp-foot; time-field chybí .dp-anchor; .dp-presets u dvou subůtřídy = to, co komponenta skutečně renderuje; sdílené třídy (.dp-field, .dp-presets, .dp-clear) uvést u vlastníka a v related—
D16storiesTime field Composition a Date-time range Composition bez odkazu soubor:řádek (vzor je reálný, ale nedoložený)doplnit komentář // port: apps/web/src/pages/MeetingDetailPage.tsx:222 atd.—

3. Bug list — aplikace (kanon v kódu)

#KdeChybaOpravaRozhoduje
A1date-picker.css .dp-openkomponenty nastavují aria-expanded (DateField.tsx:177, DateRangeField.tsx:127), CSS otevřený stav nemá — spouštěč vypadá stejně zavřený i otevřený (stejná chyba jako A1 Icon button).dp-open[aria-expanded="true"] { background: var(--active-surface); color: var(--ink-900) }; story States pak ukáže open—
A2TimeField.tsx:131–145seznam otvírá jen ↓; žádný spouštěč, žádný click/focus — myší seznam nejde otevřítbuď .dp-open s ikonou clock (parita s DateField), nebo otevření na focus/klik do poleAD
A3DateTimeRangeField.tsx:225–235 .dp-alldaynativní <input type="checkbox"> + accent-color s komentářem „karta v DS zatím není" — Checkbox je kanon (Choice › Checkbox, .acrm-check-label)<Checkbox label="Celý den">; .dp-allday (593–606) smazatAD potvrdit
A4.dp-preset (248–269) vs .acrm-optchip (inputs.css:723–752)dvě „single-choice chip" provedení: 26px pill/surface-75/accent rámeček vs 30px radius-sm/border-strong/inset accentbuď presety = .acrm-optchip (varianta dense), nebo .dp-preset vstoupí do kanonu Option chips jako pojmenovaná varianta; ne dvě věci vedle sebeAD
A5.dp-clear (440–462) = .dp-addtime (464–487)identické CSS pod dvěma jmény; položka patičky panelujedna třída .dp-action (nebo rovnou .acrm-popover-item, pokud AD nechce vlastní sazbu 600 12px display v patičce)AD jen volba sazby
A6TaskDialog.tsx:995–1003.dp-open (spouštěč kalendáře) použit jako × „Odebrat čas"<IconButton icon="x">; .dp-open jen jako spouštěč panelu—
A7engine + propsmrtvý kód: .dp-chip (0×), .dp-inline (0× v appce), props availability a presetDurations (0×) — přitom ZasedackyPage.tsx:204–208 renderuje vlastní <p style> místo .dp-status.busy.dp-chip/.dp-inline smazat; availability zapojit v ZasedackyPage (a smazat inline <p>), nebo smazat oba propsAD (zapojit vs smazat)
A8WrapupBand.tsx:184–196, 255–267, 347–359 (.dlrw-when, dialer.css:1036), ContactLogDialog.tsx:523 (inline grid), TaskDialog.tsx:987 (.dp-timerow)datum + čas jako jeden okamžik složeno ručně 4× ve 3 provedeních; kanonická kompozice neexistujekandidát „Date + time" (DateField + TimeField v .dp-timegroup-like wrapperu z enginu) s reálným použitím; .dlrw-when a inline grid smazatAD
A98 souborů toLocaleDateString (KalendarPage, ImportPage, MessageCard, RelationRow, MobileDayList, mail-delivery, MyMailTemplatesSection, ConnectorClientsBlock) + formatCzDate (lib/format.ts:187, asistent 2×)formát data mimo formatDate → porušuje konvenci rokumigrovat na formatDate / formatMonthYear z date-core; formatCzDate smazat; validator date-format-raw (hard)—
A10date-picker.css.dp-day.sel #fff (413) místo --fg-on-accent (tokens.css:127); .dp-echo 400 11.5px (221) místo var(--hint) (tokens.css:201, AD 26. 8.)nahradit tokeny—
A11scripts/validate-ds-usagerodina nemá žádné pravidlo; nativní date inputy hlídají jen dva unit testy na dvou místechpravidla native-date-input (`type="datetimemonthdatetime-local", hard), dp-raw (raw .dp-* mimo balíček, viz A12), date-format-raw` (A9)—
A12TaskDialog.tsx:960–1013, MeetingDetailPage.tsx:222–243bespoke pickery ze tříd enginu (.dp-pop/.dp-rule/.dp-addtime/.dp-timerow/.dp-foot/.dp-clear; .dp-timegroup/.dp-sep) mimo balíček; docs to vedou jako „canon, app-specific"buď komponenty balíčku (DueDatePicker, TimeRangeField) a stories z nich, nebo jediná povolená výjimka zapsaná ve validatoruAD
A13LeaveSection.tsx:255, DochazkaPage.tsx:572, AssistantSettings.tsx:178 (raw .acrm-field/.acrm-field-label), ManageSegmentDialog.tsx:585, RelationDialog.tsx:234 (.dlg-field/.dlg-label)4 systémy popisku kolem date polí (Field, DrawerField, raw acrm-field, dlg-field)patří rodině Text field › Field — zapsat tam jako A-bug, migrace na <Field> / <DrawerField>—
A14DateRangeField.tsx:87, TimeField.tsx:150zavření panelu ze scrimu / Esc z mřížky nevrací fokus do pole (DateField to dělá, DateField.tsx:144–147) — docs to vedou jako „known limit"sjednotit na DateField: closePanel = setOpen(false) + focus do inputu—
A15PickerPanel.tsx:104aria-modal na mobilu bez focus traputrap v sheet režimu (Tab cyklí v panelu), nebo aria-modal odstranit—

4. Rozhodnutí pro AD

Jedno po druhém, každé s doporučením:

  1. A2 — jak se otevírá Time field myší. Doporučení: .dp-open s ikonou clock (parita s DateField, stejná anatomie, stejný stav open po A1). Alternativa: otevřít seznam na focus — levnější, ale rozbíjí pravidlo „focus neotvírá panel", které DateField drží kvůli tabování formulářů.
  2. A3 — „Celý den" = kanonický Checkbox. Doporučení: ano, .dp-allday smazat. Otázka jen zda popisek zůstává --fg-secondary 12px (dnes) nebo bere sazbu Checkboxu.
  3. A4 — presety délky vs Option chips. Doporučení: .dp-preset se stane pojmenovanou variantou Option chips („dense", 26px pill) v kanonu a použije ji i Calendar (Dnes / Zítra / Posledních 7 dní); .acrm-optchip zůstává pro formuláře. Nechat dvě provedení není možnost.
  4. A7 — availability / presetDurations. Doporučení: availability zapojit v ZasedackyPage (nahradí inline <p>), presetDurations smazat (nikdo je nemění). Story States pak ukáže busy z reálného místa.
  5. A8 — „Date + time" jako kompozice. Doporučení: kandidát s reálným použitím (4 místa), engine wrapper .dp-instant (DateField + TimeField, gap --sp-2), story = port WrapupBand. Bez toho zůstanou tři provedení.
  6. A12 — TaskDialog termín a TimeRangeEditor. Doporučení: DueDatePicker (Calendar + volitelný čas, patička) do balíčku — je to jediný „datum s volitelným časem" v appce a pravidlo dp-raw ho jinak musí vyjímat. TimeRangeEditor → TimeRangeField (od–do bez data), použije ho i DateTimeRangeField.
  7. Picker panel jako stránka DS. 0 přímých použití v appce; je to vrstva, kterou skládají tři pole. Doporučení: nechat jako podkomponentu se statusem „internal" (jedna anatomie, bez Variants/Composition) — vývojář ji nemá volat, ale musí vědět, že existuje (jinak sáhne po .acrm-popover).
  8. D6 — Sizes u Calendar. Doporučení: zrušit; rodina nemá size prop nikde (32 / 88 / 236 px jsou obsahové šířky). Potvrdit, že „Sizes: []" u celé rodiny je správně, ne mezera.

Vše ostatní (D1–D5, D7–D16, A1, A5 mimo sazbu, A6, A9–A11, A13–A15) se opraví bez dotazů.

5. Co teď

  1. Follow-up MR do acrm (stories + engine, label no-auto-merge): D1 (legacy stories pryč + baseline), D2–D8, D10, D16 (Composition jako porty s komentářem soubor:řádek, Sizes zrušit, .dp-inline z stories), A1, A5, A6, A10, A14 — vše bez AD; po rozhodnutí 1–6 druhá vlna (A2, A3, A4, A7, A8, A12) včetně nových stories z reálných míst.
  2. MR do DS repa: registr (D1, D6, D15), docs D11–D14, approvedAt až po AD kolu.
  3. Validator (A11): native-date-input, dp-raw, date-format-raw — první dvě hned, třetí spolu s A9.
  4. A9 a A13 jsou průřezové (formátování, popisky polí) — zapsat do bug listu rodin Text field a Foundations, ne řešit v této rodině.
  5. Tikety: každý nález = položka D/A; zavírat až po merge opravy a AD potvrzení na webu. Do té doby rodina zůstává beta.

Source: docs/REVIEW-date-time-family.md · GitLab