Make Quick Chat and task popups honor their most recent interaction order. - Place Quick Chat in the task-detail peer stack while retaining higher utility windows. - Raise Create Room dialogs above Chat on each open, including mobile sheets. - Add stacking regression coverage and operator documentation with screenshots. Files changed: docs/assets/fn-8248-chat-above-task.png | Bin 0 -> 55108 bytes docs/assets/fn-8248-mobile-create-room.png | Bin 0 -> 56699 bytes docs/assets/fn-8248-task-above-chat.png | Bin 0 -> 74263 bytes docs/dashboard-guide.md | 5 +- packages/dashboard/app/App.tsx | 13 +++- .../dashboard/app/components/CreateRoomModal.tsx | 15 ++++- .../dashboard/app/components/FloatingWindow.tsx | 11 +++- .../components/__tests__/CreateRoomModal.test.tsx | 72 +++++++++++++++++++++ .../FloatingWindowStack.cross-type.test.tsx | 37 +++++++---- .../app/components/floatingWindowStack.ts | 10 +-- 10 files changed, 139 insertions(+), 24 deletions(-) Fusion-Task-Id: FN-8248 Fusion-Task-Lineage: 94ef20f1-96da-4249-9812-169f780c9451 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
35 lines
2.6 KiB
TypeScript
35 lines
2.6 KiB
TypeScript
/*
|
|
FNXC:FloatingWindow 2026-06-22-21:30:
|
|
SHARED floating-utility z-index stack. This is the ONE source of z-index for utility floating modals in the dashboard (FloatingWindow utility callers, the right-dock pop-out, the floating terminal, the floating New Task dialog) so they interoperate in a SINGLE stack instead of each type owning a private counter. Utility windows claim `nextFloatingZ()` on mount/open and again on every panel pointerdown/focus, so the most-recently-interacted utility window is always on top REGARDLESS of type.
|
|
|
|
FNXC:FloatingWindow 2026-06-22-22:30:
|
|
Base band sits at 10100+ — ABOVE the page overlay/popover band (log viewer, workflow-editor modal, selection popover, static fullscreen fallbacks at z 10000-10001) so a utility floating window the user is dragging is never painted over by those. Transient top-right toasts are bumped to 10500 (styles.css) so system feedback still shows above a dragged utility window. The workflow prompt fullscreen overlay is itself a floating utility surface and claims `nextFloatingZ()` when opened, because a static z 10000 fallback is hidden by the workflow editor's full-screen mobile FloatingWindow sheet. The counter is module-level and intentionally monotonic: it only ever climbs, which is fine for a session-length dashboard. All floating overlays are `pointer-events: none` (click-through) so raising panels into this shared band never traps clicks on the page behind them. CRITICAL: every floating modal must be portaled to document.body so this shared z is compared in ONE root stacking context (an inline panel cannot beat siblings outside its own context no matter its z).
|
|
|
|
FNXC:TaskPopupLayer 2026-07-17-15:55:
|
|
Task-detail popups and Quick Chat are interaction-stack peers in this lower board-layer band: the
|
|
most recently mounted or pointer/focus-interacted peer is on top. Terminal, right-dock expand,
|
|
Files, New Task, and other utility surfaces continue to use the separate 10100+ utility band.
|
|
*/
|
|
let topZ = 10100;
|
|
let taskDetailTopZ = 220;
|
|
|
|
/** Claim the front of the shared floating-utility stack. Monotonic, session-length. */
|
|
export function nextFloatingZ(): number {
|
|
return ++topZ;
|
|
}
|
|
|
|
/** Current top of the floating-utility stack (read-only). Lets a utility window skip a needless bump when already on top. */
|
|
export function currentFloatingZ(): number {
|
|
return topZ;
|
|
}
|
|
|
|
/** Claim the front of the task-popup peer stack (task details and Quick Chat). Monotonic, session-length. */
|
|
export function nextTaskDetailFloatingZ(): number {
|
|
return ++taskDetailTopZ;
|
|
}
|
|
|
|
/** Current top of the task-popup peer stack (read-only). */
|
|
export function currentTaskDetailFloatingZ(): number {
|
|
return taskDetailTopZ;
|
|
}
|