Multi-step dialog
canonOne window that walks through steps and reshapes itself between them (width and height, on the canonical spring) instead of closing and opening another window. First case: New deal — search for the person or company first (Attio "Choose record" anatomy, with a persistent footer), then the form-less detail.
27 September 2026: the Attio rework merged (feat/acrm-322-vyber-zaznamu, main 40402b85) — DealSubjectStep gained a persistent footer (↑↓ Navigate + MorphText primary action "Select record"/"Create person"), Records/Actions sections, record type in the meta slot, and paletteWidth(phone). The window reshape moved from the 0.29s cubic-bezier curve to the canonical spring (packages/ui/src/lib/spring.ts, merged as !3957) — see the `spring` and `morph-text` subcomponents. 25 September 2026: the AD had rejected the search step as shipped (palette anatomy without header/footer) — it did not follow the brief (Attio "Choose record"); rework then went to proto/obchod-vyber-attio, now merged as above. AD approved 18 September 2026 on the prototype :3777/preview/obchod-vicekrokovy.html (ACRM-322, ACRM-323). Code: acrm !3777 (<Dialog morphKey>, dialog-morph.css, story + baseline) and !3779 (new-deal flow: DealSubjectStep, Založit osobu → NewContactDialog). Merged 18 September 2026 (!3775, !3777, !3779) — canon. 14 Oct 2026 (owner: the big palette is intentional — „v malém inline dialogu se blbě hledá“): the palette shell (PickPalette, extracted from DealSubjectStep) is the RULES §21 pattern for assigning a record — chat Přiřadit ke kontaktu, Komunikace Přiřadit k projektu, Přidat produkt, Vztahy › Přidat (acrm !5039, 0c0f21ee1). Dev check 14 Oct: 1440 = 800 px, focus in search; 390 = full height 0–844 for the §21 places; Nový obchod on phone 0–844 too (re-measured after deploy). Registry repaired 17 Oct 2026 (review F2): removed classes with no CSS definition and no TSX use on main: .gsp-cancel. Registry repaired 17 Oct 2026 (review F5): DealDialog, DealSubjectStep, NewContactDialog live in apps/web (see files), not exported by @acrm/ui; dropped from react[].
Used in 104 files · 53 areas · 120× — components/CallbackTakeoverModal, components/FilePreview, components/GlobalSearch, components/IdentityImageDialog, components/accounting, components/acl …
Changelog since 29. 9. 2026
- 17. 10. 2026refactor(ds): tokeny podle významu — vrstvy, pohyb, focus ring, text na barvě (beze změny vzhledu)apps/web/src/ds/dialog-morph.cssŠtěpán · 8cda81b26
- 17. 10. 2026feat(desktop): klik na telefonní číslo (tel:, callto:) — W3 /spojit + appkaapps/web/src/ds/global-search.cssClaude · ab6a6abb7
- 14. 10. 2026fix(web): přiřazení = paleta výběru jako Nový obchod (RULES §21, AD)apps/web/src/ds/deal-dialog.cssŠtěpán · 78bce89f4
- 4. 10. 2026fix(ui): upozornění červeně se čtvercovým glyfem, žádná hnědá (A3b — reporty, asistent, pošta, schůzky, dialer, kariéra)apps/web/src/ds/global-search.cssŠtěpán · 5ef526b2b
- 2. 10. 2026fix(ui): Escape v PickerPanelu uvnitř Dialogu zavře jen panel, ne celý dialogpackages/ui/src/components/Dialog.tsxŠtěpán · 8c0b9a165
- 1. 10. 2026refactor(ui): holy Popover -> kanon (vlna 3) + nabidka v dialogu = panel v suplikupackages/ui/src/components/Dialog.tsxŠtěpán · 5a55c030f
- 29. 9. 2026feat(ui): křížek a tlačítka okna v hlavičce dialogu = IconButton sm (cíl 32 myš / 44 dotyk)packages/ui/src/components/Dialog.tsxŠtěpán · bd7f7a0e4
- 29. 9. 2026feat(search): typ záznamu inline za názvem v detailu palety (ACRM-381)apps/web/src/ds/global-search.cssŠtěpán · 246c9c292