Fix #311: split-button close controls #315

Merged
crueber merged 2 commits from fix/issue-311 into main 2026-09-10 23:21:01 +00:00
Owner

One-click Close (completed) + not-planned dropdown segment for Close and Comment-and-Close; outside-click dismisses open menus. No backend change (state_reason vocabulary unchanged); dark+light via existing btn/card/zinc classes; keyboard support intact (menu role, arrows, Escape-with-focus-return). Incidental fix: Comment-and-Close chooser passed props.disabled (always undefined) instead of the busy guard — both split menus now disable from getBusy(). Tests: node --test full unit suite 595/595 green (incl. new web/test/unit/split-close.test.js); vite+esbuild build green. Browser check both themes left explicitly open (shared obscura daemon blocks loopback; build + headless pins verify). Closes #311.

One-click Close (completed) + not-planned dropdown segment for Close and Comment-and-Close; outside-click dismisses open menus. No backend change (state_reason vocabulary unchanged); dark+light via existing btn/card/zinc classes; keyboard support intact (menu role, arrows, Escape-with-focus-return). Incidental fix: Comment-and-Close chooser passed props.disabled (always undefined) instead of the busy guard — both split menus now disable from getBusy(). Tests: node --test full unit suite 595/595 green (incl. new web/test/unit/split-close.test.js); vite+esbuild build green. Browser check both themes left explicitly open (shared obscura daemon blocks loopback; build + headless pins verify). Closes #311.
08 §2 CommentComposer: ChooserMenu becomes SplitCloseMenu — primary
segment closes immediately as completed, dropdown segment offers the
not-planned alternate only; document click listener dismisses open
menus (RefPicker pattern, onCleanup removal). No backend change.
Headless cover in web/test/unit/split-close.test.js; 08 Decisions
appended.
Both #109 chooser menus already disabled from getBusy(); the split
menus keep that wiring for all three controls. Doc now states the
kept behavior instead of a fix that never happened.
Sign in to join this conversation.
No description provided.