LearnNewsExamplesServices
Frontmatter
id18122
titleMaximize fills the app viewport and stops an edge-band pane at half of it: the presentation should fill the dock host, inset by a gap, with a shadow
stateClosed
labels
bugdesign
assigneesneo-fable
createdAtSep 2, 2026, 6:24 PM
updatedAtSep 2, 2026, 7:35 PM
githubUrlhttps://github.com/neomjs/neo/issues/18122
authorneo-fable
commentsCount0
parentIssue13158
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAtSep 2, 2026, 7:35 PM

Maximize fills the app viewport and stops an edge-band pane at half of it: the presentation should fill the dock host, inset by a gap, with a shadow

neo-fable
neo-fable commented on Sep 2, 2026, 6:24 PM

Sub-issue of #13158 (dock layouts). Reported by the operator on the Workstation, 2026-09-02 ~16:20Z: maximizing the Queues pane fills half the screen while maximizing other items fills it all; and the intent, stated with it: maximize should fill the workspace (not the viewport), with a slight gap and a box-shadow. #18027 (the FLIP flash) is the neighbour and does not cover this.

Measured (served Workstation, 1280×720 CSS px, DPR 2)

  • Neo.dashboard.dock.Workspace#measureDockMaximizeRect measures the workspace root (me.id), which on the Workstation is the whole app view: {x: 0, y: 0, w: 1239, h: 720} — the viewport, tour bar and status bar included. The dock host (getDockHost(), .neo-dashboard-dock-query-host) is {x: 0, y: 98, w: 1239, h: 622}.
  • Maximizing the center node right-top-tabs (Metrics) writes left: 0; top: 0; width: 1239px; height: 720px and renders exactly that: the app viewport.
  • Maximizing the edge-band node left-tabs (Queues) writes the same inline rect but renders 640 × 720 — half the viewport — because .neo-dashboard-dock-edge-band keeps max-inline-size: var(--dock-edge-band-left-max-inline-size, var(--dock-edge-band-max-inline-size, 50%)) (and its min/inline-size) under .neo-dock-maximized; a max-* constraint applies to an inline width too. Center nodes carry no such cap, which is the asymmetry the operator saw.
  • The containing block is the viewport for both (the maximized node is position: fixed; the dock host's container-type: size does not capture it in Chrome), so the written rect is in viewport coordinates.

The Fix

  1. Fill the dock host. measureDockMaximizeRect measures getDockHost() (fallback: the workspace root when no host is mounted). The resize re-measure follows the same source.
  2. Gap and shadow as tokens on .neo-dashboard, owned by the paint contract, never a literal in the worker: --dock-maximize-gap (engine default a slight inset) and --dock-maximize-shadow (a neutral soft shadow, like the drop chips'). The worker writes the rect as calc() against the gap token — left: calc(<x>px + var(--dock-maximize-gap)), width: calc(<w>px - 2 * var(--dock-maximize-gap)), likewise top/height — so the token resolves in CSS and a consumer tunes it without touching the engine; the FLIP still measures the DOM and is unaffected.
  3. Lift the band caps under maximize: .neo-dashboard-dock-edge-band.neo-dock-maximized clears max-inline-size / max-block-size / min-* for the maximized node only, so an edge-band pane maximizes to the same rect as a center pane.

Acceptance Criteria

  • AC-1 Component (DockMaximize.spec.mjs, the fixture has a right edge band): a maximized center node's rect equals the dock host's rect inset by the gap on every side, not the viewport; red on dev (today it equals the workspace root).
  • AC-2 Component: a maximized edge-band node (edge-tabs) renders the same rect as the center node; red on dev (today it stops at half).
  • AC-3 Component: the maximized node carries the shadow token's value and no residual max-inline-size; Escape restores as before.
  • AC-4 The workspace resize re-measure keeps the host-based rect (existing arm stays green); the FLIP arms and the rest of component/dashboard + unit/dashboard stay green.
  • AC-5 The Workstation by eye: Queues and Metrics maximize to the same inset panel above the dock area, tour bar and status bar still visible, both themes.

Out of Scope

  • The FLIP flash (#18027).
  • A consumer-tuned gap per app (the tokens make it possible; the Workstation keeps the engine default unless the operator asks).

Sweep 16:20Z before filing: live latest-open (#18027 is the only maximize ticket, on the FLIP flash), A2A (no claim), Knowledge Base (no leaf).

Authored by Mnemosyne (@neo-fable, Claude Fable 5.1, Claude Code) · session 37bbc610-f0cd-4abb-95c2-eb70336a86f3

tobiu referenced in commit 7440871 - "fix(dock): maximize fills the dock host inset by a gap, on a shadow, for edge-band and center nodes alike (#18122) (#18124) on Sep 2, 2026, 7:35 PM
tobiu closed this issue on Sep 2, 2026, 7:35 PM