Vize

Window Manager

Draggable, resizable floating windows with z-order focus, snapping, minimize/maximize, docks, and persistence.

Package @vizejs/ui/window-manager
Maturity stable
Own the source vize lib pull window-manager
Requires context, controllable-state
Aliases floating windows, dock, mdi, desktop windows, taskbar
Covers WinBox.js, react-rnd, Golden Layout floating windows, macOS window management

Usage

import { FloatingWindow, WindowDock, WindowManager } from "@vizejs/ui/window-manager";

Or copy the source into your project with vize lib pull window-manager (see Source Distribution).

API

FloatingWindow

Source: src/families/layout/window-manager/floating-window.vue

Props

Prop Type Default Description
id (required) string required Stable window id used in the layout.
title (required) string required Accessible window title, also shown by docks.
defaultRect WindowRect { x: 0, y: 0, width: 320, height: 240 } Geometry used until the layout stores one for this window.
defaultMode WindowMode "normal" Mode used until the layout stores one for this window.
minWidth number 160 Minimum width in CSS pixels.
minHeight number 96 Minimum height in CSS pixels.
maxWidth number Infinity Maximum width in CSS pixels (also limited by the manager).
maxHeight number Infinity Maximum height in CSS pixels (also limited by the manager).
resizable boolean true Render resize handles on every edge and corner.

Events

Event Payload Description
close [] Fired when the slot's close action is used. The consumer removes the window.
modeChange [mode: WindowMode] Fired when the display mode changes.

Slots

Slot Slot props Description
default FloatingWindowSlotState Window chrome and content. Receives state, handle props, and window actions.

Exposed

Member Type Description
element Readonly<ShallowRef<HTMLElement | null>> Template ref to the rendered root element.
state —
active —
focus —

WindowDock

Source: src/families/layout/window-manager/window-dock.vue

Props

Prop Type Default Description
label string "Windows" Accessible name of the dock navigation.
filter WindowDockFilter "all" List every window, or only minimized ones.

Slots

Slot Slot props Description
default WindowDockSlotState Custom dock content. Receives the listed window summaries; defaults to one button per window.

WindowManager

Source: src/families/layout/window-manager/window-manager.vue

Props

Prop Type Default Description
layout WindowLayout undefined Controlled layout (v-model:layout). undefined selects uncontrolled behavior, which lets useWindowLayoutPersistence load a stored layout after mount.
defaultLayout WindowLayout emptyWindowLayout Initial uncontrolled layout. Windows missing from it use their own defaults.
snapThreshold number 8 Distance in CSS pixels at which moving windows snap to edges; 0 disables snapping.
keyboardStep number 16 Pixels moved or resized by one arrow key press on a drag handle.
baseZIndex number 1 z-index of the backmost window; later windows stack above it.

Events

Event Payload Description
update:layout [layout: WindowLayout] Fired with the next layout after any move, resize, focus, or mode change.

Slots

Slot Slot props Description
default WindowManagerSlotState FloatingWindow and WindowDock children. Receives the active id and window summaries.

Exposed

Member Type Description
element Readonly<ShallowRef<HTMLElement | null>> Template ref to the rendered root element.
layout —
activeId —
measure —

Behavior

Normative state x input -> outcome table for window-manager.vue, floating-window.vue, and window-dock.vue (@vizejs/ui/window-manager). Rows are proven by window-manager-model.test.ts, window-manager.test.ts, and window-manager-ssr.test.ts; compile-only assertions live in window-manager.types.test-d.ts.

# State Input Outcome Proven by
WM1 known / unknown bounds clamp rects stay inside known bounds (pinned top-left when too large); unknown bounds leave them untouched clamps rects inside known bounds and leaves unknown bounds untouched
WM2 moving rect snap edges within the threshold snap to bounds and neighbour edges; 0 disables snapping snaps edges to bounds and neighbours within the threshold
WM3 rect, delta move the rect moves, snaps, then clamps moves by a delta, then snaps and clamps
WM4 rect, edge, delta resize the opposite edge stays fixed and size respects min/max constraints and bounds resizes from every edge within constraints and bounds
WM5 stacking order raise the window moves to the front (unknown ids append; front stays the same array) raises windows to the front of the stacking order
WM6 stored text parse valid windows and known order ids survive; malformed input yields undefined parses stored layouts and drops malformed entries
WM7 defaults render labelled non-modal dialogs use default geometry, later windows stack higher, 8 resize handles render renders labelled non-modal windows with default geometry and stacking
WM8 normal window pointer down, drag handle the window becomes active and frontmost, moves with the pointer, and stops after pointerup pointer focus raises a window and dragging the handle moves it
WM9 normal window resize handle, arrows, Shift+arrows resize respects minimums; arrows move and Shift+arrows resize by keyboardStep resize handles and keyboard move/resize respect constraints
WM10 any window minimize/maximize/dock/close minimized windows are hidden, maximized fill the manager, dock buttons restore/minimize, close emits minimize, maximize, restore, close, and dock activation
WM11 controlled, measured drag near an edge controlled layouts render as given; moves emit snapped, clamped layouts controlled layouts drive geometry and snapping clamps to measured bounds
WM12 storage mount, change stored layouts load after mount, changes are written back, malformed data and missing scopes are handled persists layouts after mount and ignores malformed storage
WM13 no provider mount window or dock stable VIZE_UI_CONTEXT_MISSING: WindowManager diagnostic windows and docks outside a manager throw the context diagnostic
WM14 SSR isolated requests, hydrate byte-identical geometry/stacking/dock markup; hydration without warnings renders byte-identical window geometry, stacking, and dock markup, hydrates windows and dock without mismatch warnings
WM15 DOM/SSR/Vapor compile every SFC compiles in every renderer lane scripts/check-renderers.ts

Windows are non-modal role="dialog" regions named by title; the drag handle is a focusable element spread by the consumer (handleProps) that advertises its arrow-key shortcuts.