Modal redesign: unified modal pattern + rework of suggest-changes modal #45
Reference in New Issue
Block a user
No description provided.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Trigger
m's feedback 2026-05-20 10:36 on the suggest-changes modal (just shipped via t-paliad-216 Slice B):
Two asks bundled: (a) fix the suggest-changes modal specifically, (b) establish a unified modal pattern for paliad so future modals (and the existing ones being retrofitted) share the same shape, typography, layout, and behaviour.
Immediate fix — suggest-changes modal
The current
approval-edit-modal.ts(introduced 2026-05-20 in commit66a0676) renders only the editable subset of fields per entity_type (deadlines: due_date / title / description; appointments: title / start_time / end_time / location). m wants:created_at,updated_at,approved_bystay read-only).Same treatment for the appointment variant of the modal.
Longer-term — unified modal pattern
Current modal surfaces in the frontend (incomplete list, audit during design):
frontend/src/client/components/approval-edit-modal.ts(the one this issue is reworking)frontend/src/client/filter-bar/save-modal.tsfrontend/src/client/event-types.tsfrontend/src/client/broadcast.tsfrontend/src/client/fristenrechner.tsdeadlines-detail.tsx,appointments-calendar.tsx,admin-*.tsx, etc.Each surface today defines its own DOM shape, its own CSS, its own close behaviour, its own focus management. The result: every modal looks subtly different, and contributors copy whichever modal was nearest when they needed one.
Design goals for a unified modal primitive:
frontend/src/styles/) defining the modal frame: backdrop, container, header / body / footer regions, focus ring, scroll behaviour at long content, mobile breakpoint. Typography baseline matches the rest of the app (the existing.entity-table/.entity-eventcards' type scale).openModal({title, body, footer, onClose})or a class — that handles: focus trap, ESC-to-close, backdrop-click-to-close, ARIA roles, body-scroll-lock. Existing surfaces are retrofit (or stubbed for later refit; the existing ones don't have to all migrate in this issue).<dialog>element if it works for our browser baseline (modern; supportsshowModal()+ backdrop pseudo + native focus management); otherwise the existing div-based pattern with manual focus management.docs/for future contributors.Out of scope
Acceptance
docs/design-modal-pattern-*.md.Role recommendation
inventor (hertz, retain context) — hertz just shipped the current suggest-changes modal end-to-end (Slices A+B+C), so re-engaging is cheaper than fresh-spawn. Design phase: audit existing modals + propose the unified primitive + lay out the suggest-changes redesign concretely. Then coder shift implements both.
Branch:
mai/hertz/inventor-unified-modal.