@surdeddd/wmkit 0.4.0 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/core/emitter.ts","../src/core/geometry.ts","../src/core/manager.ts","../src/dom/animate.ts","../src/dom/announcer.ts","../src/dom/shared.ts","../src/dom/drag.ts","../src/dom/resize.ts","../src/dom/controller.ts","../src/dom/binder.ts"],"names":["target"],"mappings":"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","file":"chunk-FPZDAKNP.js","sourcesContent":["export type Listener<T> = (payload: T) => void\n\nexport interface Emitter<Events extends Record<keyof Events, unknown>> {\n on<K extends keyof Events>(event: K, listener: Listener<Events[K]>): () => void\n emit<K extends keyof Events>(event: K, payload: Events[K]): void\n clear(): void\n}\n\nexport function createEmitter<Events extends Record<keyof Events, unknown>>(): Emitter<Events> {\n const listeners = new Map<keyof Events, Set<Listener<never>>>()\n\n return {\n on(event, listener) {\n let set = listeners.get(event)\n if (!set) {\n set = new Set()\n listeners.set(event, set)\n }\n set.add(listener as Listener<never>)\n return () => {\n set.delete(listener as Listener<never>)\n }\n },\n emit(event, payload) {\n const set = listeners.get(event)\n if (!set) return\n for (const listener of [...set]) {\n ;(listener as Listener<Events[typeof event]>)(payload)\n }\n },\n clear() {\n listeners.clear()\n },\n }\n}\n","import type { Bounds, Size, SnapZone } from './types'\n\nexport function clamp(value: number, min: number, max: number): number {\n return Math.min(Math.max(value, min), max)\n}\n\nexport function clampSize(size: Size, min: Size, max: Size | null): Size {\n return {\n width: clamp(size.width, min.width, max ? max.width : Number.POSITIVE_INFINITY),\n height: clamp(size.height, min.height, max ? max.height : Number.POSITIVE_INFINITY),\n }\n}\n\nexport function clampToViewport(bounds: Bounds, viewport: Size, minVisible: number): Bounds {\n if (viewport.width <= 0 || viewport.height <= 0) return bounds\n const visibleX = Math.min(minVisible, bounds.width)\n const visibleY = Math.min(minVisible, bounds.height)\n const x = clamp(bounds.x, visibleX - bounds.width, Math.max(0, viewport.width - visibleX))\n const y = clamp(bounds.y, 0, Math.max(0, viewport.height - visibleY))\n return x === bounds.x && y === bounds.y ? bounds : { ...bounds, x, y }\n}\n\nexport function boundsEqual(a: Bounds, b: Bounds): boolean {\n return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height\n}\n\nexport function applyAspect(\n size: Size,\n ratio: number,\n min: Size,\n max: Size | null,\n drive: 'width' | 'height',\n): Size {\n if (!Number.isFinite(ratio) || ratio <= 0) return clampSize(size, min, max)\n const maxWidth = max ? max.width : Number.POSITIVE_INFINITY\n const maxHeight = max ? max.height : Number.POSITIVE_INFINITY\n if (drive === 'height') {\n const height = clamp(\n size.height,\n Math.max(min.height, min.width / ratio),\n Math.min(maxHeight, maxWidth / ratio),\n )\n return { width: height * ratio, height }\n }\n const width = clamp(\n size.width,\n Math.max(min.width, min.height * ratio),\n Math.min(maxWidth, maxHeight * ratio),\n )\n return { width, height: width / ratio }\n}\n\nexport function zoneBounds(zone: SnapZone, viewport: Size): Bounds {\n const w = viewport.width\n const h = viewport.height\n const halfW = Math.round(w / 2)\n const halfH = Math.round(h / 2)\n const oneThird = Math.round(w / 3)\n const twoThirds = Math.round((w * 2) / 3)\n switch (zone) {\n case 'left-third':\n return { x: 0, y: 0, width: oneThird, height: h }\n case 'center-third':\n return { x: oneThird, y: 0, width: twoThirds - oneThird, height: h }\n case 'right-third':\n return { x: twoThirds, y: 0, width: w - twoThirds, height: h }\n case 'left':\n return { x: 0, y: 0, width: halfW, height: h }\n case 'right':\n return { x: halfW, y: 0, width: w - halfW, height: h }\n case 'top':\n return { x: 0, y: 0, width: w, height: halfH }\n case 'bottom':\n return { x: 0, y: halfH, width: w, height: h - halfH }\n case 'top-left':\n return { x: 0, y: 0, width: halfW, height: halfH }\n case 'top-right':\n return { x: halfW, y: 0, width: w - halfW, height: halfH }\n case 'bottom-left':\n return { x: 0, y: halfH, width: halfW, height: h - halfH }\n case 'bottom-right':\n return { x: halfW, y: halfH, width: w - halfW, height: h - halfH }\n }\n}\n\nexport interface SnapDetectOptions {\n threshold?: number\n cornerSize?: number\n}\n\nexport function detectSnapZone(\n x: number,\n y: number,\n viewport: Size,\n options: SnapDetectOptions = {},\n): SnapZone | null {\n const threshold = options.threshold ?? 12\n const cornerSize = options.cornerSize ?? 64\n const w = viewport.width\n const h = viewport.height\n if (w <= 0 || h <= 0) return null\n\n const nearLeft = x <= threshold\n const nearRight = x >= w - threshold\n const nearTop = y <= threshold\n const nearBottom = y >= h - threshold\n\n if (nearLeft || nearRight) {\n const side = nearLeft ? 'left' : 'right'\n if (y <= cornerSize) return `top-${side}` as SnapZone\n if (y >= h - cornerSize) return `bottom-${side}` as SnapZone\n return side\n }\n if (nearTop) {\n if (x <= cornerSize) return 'top-left'\n if (x >= w - cornerSize) return 'top-right'\n return 'top'\n }\n if (nearBottom) {\n if (x <= cornerSize) return 'bottom-left'\n if (x >= w - cornerSize) return 'bottom-right'\n return 'bottom'\n }\n return null\n}\n\nexport interface MagnetResult {\n x: number\n y: number\n snappedX: boolean\n snappedY: boolean\n}\n\nfunction nearestEdge(low: number, high: number, targetLow: number, targetHigh: number): number[] {\n return [targetLow - low, targetHigh - low, targetLow - high, targetHigh - high]\n}\n\nexport function magnetize(\n bounds: Bounds,\n targets: readonly Bounds[],\n threshold: number,\n): MagnetResult {\n const result: MagnetResult = { x: bounds.x, y: bounds.y, snappedX: false, snappedY: false }\n if (threshold <= 0 || targets.length === 0) return result\n let bestX = threshold + 1\n let bestY = threshold + 1\n for (const target of targets) {\n for (const delta of nearestEdge(\n bounds.x,\n bounds.x + bounds.width,\n target.x,\n target.x + target.width,\n )) {\n if (Math.abs(delta) <= threshold && Math.abs(delta) < Math.abs(bestX)) bestX = delta\n }\n for (const delta of nearestEdge(\n bounds.y,\n bounds.y + bounds.height,\n target.y,\n target.y + target.height,\n )) {\n if (Math.abs(delta) <= threshold && Math.abs(delta) < Math.abs(bestY)) bestY = delta\n }\n }\n if (Math.abs(bestX) <= threshold) {\n result.x = bounds.x + bestX\n result.snappedX = true\n }\n if (Math.abs(bestY) <= threshold) {\n result.y = bounds.y + bestY\n result.snappedY = true\n }\n return result\n}\n","import { createEmitter } from './emitter'\nimport { applyAspect, boundsEqual, clampSize, clampToViewport, zoneBounds } from './geometry'\nimport type {\n Bounds,\n HistoryEntry,\n ManagerEvents,\n ManagerOptions,\n ManagerState,\n SerializedState,\n SerializedWindowState,\n Size,\n SnapZone,\n WindowInit,\n WindowLayer,\n WindowManager,\n WindowStage,\n WindowState,\n WindowUpdate,\n} from './types'\n\nconst LAYER_RANK: Record<WindowLayer, number> = { normal: 0, floating: 1, modal: 2 }\nconst STAGES: readonly WindowStage[] = ['normal', 'minimized', 'maximized', 'snapped']\nconst LAYERS: readonly WindowLayer[] = ['normal', 'floating', 'modal']\nconst ZONES: readonly SnapZone[] = [\n 'left',\n 'right',\n 'top',\n 'bottom',\n 'top-left',\n 'top-right',\n 'bottom-left',\n 'bottom-right',\n 'left-third',\n 'center-third',\n 'right-third',\n]\n\nfunction normalizeWorkspace(value: number | undefined, fallback: number): number {\n return typeof value === 'number' && Number.isInteger(value) && value >= 0 ? value : fallback\n}\n\nexport function createWindowManager(options: ManagerOptions = {}): WindowManager {\n const emitter = createEmitter<ManagerEvents>()\n const keepInViewport = options.keepInViewport ?? true\n const minVisible = options.minVisible ?? 48\n const defaultSize = options.defaultSize ?? { width: 480, height: 320 }\n const cascadeOffset = options.cascadeOffset ?? 32\n const cascadeOrigin = options.cascadeOrigin ?? { x: 32, y: 32 }\n const idPrefix = options.idPrefix ?? 'wm'\n const historyLimit = options.historyLimit ?? 50\n\n let windows: Record<string, WindowState> = {}\n let order: string[] = []\n let focusedId: string | null = null\n let viewport: Size = options.viewport ?? { width: 0, height: 0 }\n let workspace = normalizeWorkspace(options.workspace, 0)\n let seq = 0\n let idCounter = 0\n let cascadeIndex = 0\n let snapshot: ManagerState | null = null\n let batchDepth = 0\n let batchDirty = false\n let historyDirty = false\n const pendingEvents: Array<() => void> = []\n const past: HistoryEntry[] = []\n let future: HistoryEntry[] = []\n let interactionDepth = 0\n let interactionRecorded = false\n let skipNextHistory = false\n let pendingHistory: HistoryEntry | null = null\n const layouts = new Map<string, SerializedState>()\n\n function getState(): ManagerState {\n if (!snapshot) {\n snapshot = { windows, order, focusedId, viewport, workspace }\n }\n return snapshot\n }\n\n function commit(): void {\n snapshot = null\n batchDirty = true\n historyDirty = true\n }\n\n function commitQuiet(): void {\n snapshot = null\n batchDirty = true\n }\n\n function flushEvents(): void {\n while (pendingEvents.length > 0) {\n for (const emit of pendingEvents.splice(0)) emit()\n }\n }\n\n function queueEvent(emit: () => void): void {\n pendingEvents.push(emit)\n }\n\n function setWindow(next: WindowState): void {\n windows = { ...windows, [next.id]: next }\n }\n\n function removeWindow(id: string): void {\n const { [id]: _removed, ...rest } = windows\n windows = rest\n order = order.filter((entry) => entry !== id)\n }\n\n function layerRankOf(id: string): number {\n return LAYER_RANK[(windows[id] as WindowState).layer]\n }\n\n function sortByLayer(ids: string[]): string[] {\n return ids\n .map((id, index) => ({ id, index, rank: layerRankOf(id) }))\n .sort((a, b) => (a.rank !== b.rank ? a.rank - b.rank : a.index - b.index))\n .map((entry) => entry.id)\n }\n\n function raise(id: string): boolean {\n const win = windows[id] as WindowState\n const without = order.filter((entry) => entry !== id)\n const rank = LAYER_RANK[win.layer]\n let insertAt = without.length\n for (let i = without.length - 1; i >= 0; i -= 1) {\n if (layerRankOf(without[i] as string) > rank) insertAt = i\n else break\n }\n const next = [...without.slice(0, insertAt), id, ...without.slice(insertAt)]\n const changed = next.length !== order.length || next.some((entry, i) => entry !== order[i])\n order = next\n return changed\n }\n\n function onActiveWorkspace(win: WindowState): boolean {\n return win.workspace === workspace\n }\n\n function topModalId(): string | null {\n for (let i = order.length - 1; i >= 0; i -= 1) {\n const win = windows[order[i] as string] as WindowState\n if (win.layer === 'modal' && win.stage !== 'minimized' && onActiveWorkspace(win))\n return win.id\n }\n return null\n }\n\n function focusTargets(): string[] {\n const modal = topModalId()\n return order.filter((id) => {\n const win = windows[id] as WindowState\n if (win.stage === 'minimized' || !onActiveWorkspace(win)) return false\n if (modal && win.layer !== 'modal') return false\n return true\n })\n }\n\n function focusTop(): void {\n const targets = focusTargets()\n focusedId = targets.length > 0 ? (targets[targets.length - 1] as string) : null\n }\n\n function emitFocus(win: WindowState, previous: string | null): void {\n queueEvent(() => emitter.emit('focus', { window: win, previous }))\n }\n\n function normalizeSize(\n size: Size,\n win: Pick<WindowState, 'minSize' | 'maxSize' | 'aspectRatio'>,\n drive: 'width' | 'height' = 'width',\n ): Size {\n if (win.aspectRatio === null) return clampSize(size, win.minSize, win.maxSize)\n return applyAspect(size, win.aspectRatio, win.minSize, win.maxSize, drive)\n }\n\n function positionForOpen(init: WindowInit): { x: number; y: number } {\n if (init.x !== undefined && init.y !== undefined) return { x: init.x, y: init.y }\n const offset = (cascadeIndex % 10) * cascadeOffset\n cascadeIndex += 1\n const base = { x: cascadeOrigin.x + offset, y: cascadeOrigin.y + offset }\n return { x: init.x ?? base.x, y: init.y ?? base.y }\n }\n\n function open(init: WindowInit = {}): WindowState {\n let id = init.id\n if (id === undefined) {\n do {\n id = `${idPrefix}-${++idCounter}`\n } while (windows[id])\n }\n if (windows[id]) throw new Error(`wmkit: window id \"${id}\" already exists`)\n\n const minSize = { width: init.minWidth ?? 160, height: init.minHeight ?? 100 }\n const maxSize =\n init.maxWidth !== undefined || init.maxHeight !== undefined\n ? {\n width: init.maxWidth ?? Number.POSITIVE_INFINITY,\n height: init.maxHeight ?? Number.POSITIVE_INFINITY,\n }\n : null\n const aspectRatio =\n init.aspectRatio !== undefined && Number.isFinite(init.aspectRatio) && init.aspectRatio > 0\n ? init.aspectRatio\n : null\n const requested = {\n width: init.width ?? defaultSize.width,\n height: init.height ?? defaultSize.height,\n }\n const size =\n aspectRatio === null\n ? clampSize(requested, minSize, maxSize)\n : applyAspect(requested, aspectRatio, minSize, maxSize, 'width')\n const position = positionForOpen(init)\n let bounds: Bounds = { ...position, ...size }\n if (keepInViewport) bounds = clampToViewport(bounds, viewport, minVisible)\n\n const requestedStage = init.stage ?? 'normal'\n const stage: WindowStage = requestedStage === 'snapped' ? 'normal' : requestedStage\n\n let win: WindowState = {\n id,\n title: init.title ?? 'Window',\n bounds,\n restoreBounds: null,\n restoreStage: null,\n stage: 'normal',\n snapZone: null,\n layer: init.layer ?? 'normal',\n workspace: normalizeWorkspace(init.workspace, workspace),\n minSize,\n maxSize,\n aspectRatio,\n openedSeq: ++seq,\n draggable: init.draggable ?? true,\n resizable: init.resizable ?? true,\n closable: init.closable ?? true,\n minimizable: init.minimizable ?? true,\n maximizable: init.maximizable ?? true,\n snappable: init.snappable ?? true,\n meta: init.meta ?? {},\n }\n\n if (stage === 'maximized') {\n win = { ...win, stage, restoreBounds: bounds, bounds: fullBounds() }\n } else if (stage === 'minimized') {\n win = { ...win, stage, restoreStage: 'normal' }\n }\n\n setWindow(win)\n raise(id)\n let focusPayload: { window: WindowState; previous: string | null } | null = null\n if (stage !== 'minimized' && onActiveWorkspace(win)) {\n const previous = focusedId\n const modal = topModalId()\n if (!modal || win.layer === 'modal') {\n focusedId = id\n focusPayload = { window: win, previous }\n } else {\n focusTop()\n }\n }\n queueEvent(() => emitter.emit('open', { window: win }))\n if (focusPayload) {\n const payload = focusPayload\n queueEvent(() => emitter.emit('focus', payload))\n }\n queueEvent(() => emitter.emit('order', { order }))\n commit()\n return win\n }\n\n function close(id: string): boolean {\n const win = windows[id]\n if (!win) return false\n removeWindow(id)\n queueEvent(() => emitter.emit('close', { window: win }))\n if (focusedId === id) {\n focusTop()\n if (focusedId) emitFocus(windows[focusedId] as WindowState, id)\n }\n queueEvent(() => emitter.emit('order', { order }))\n commit()\n return true\n }\n\n function closeAll(): void {\n for (const id of [...order]) close(id)\n }\n\n function focus(id: string): boolean {\n const win = windows[id]\n if (!win) return false\n if (!onActiveWorkspace(win)) setWorkspace(win.workspace)\n const modal = topModalId()\n if (modal && modal !== id && win.layer !== 'modal') {\n const modalWin = windows[modal]\n if (modalWin) queueEvent(() => emitter.emit('modalblocked', { window: modalWin }))\n commitQuiet()\n return false\n }\n if (win.stage === 'minimized') {\n restore(id)\n return focusedId === id\n }\n const previous = focusedId\n const raised = raise(id)\n const changed = focusedId !== id || raised\n focusedId = id\n if (changed) {\n emitFocus(win, previous)\n if (raised) queueEvent(() => emitter.emit('order', { order }))\n commit()\n }\n return true\n }\n\n function blur(): void {\n if (focusedId === null) return\n focusedId = null\n commit()\n }\n\n function cycleFocus(direction: 1 | -1 = 1): string | null {\n const targets = focusTargets()\n if (targets.length === 0) return null\n const current = focusedId ? targets.indexOf(focusedId) : -1\n const nextIndex =\n current === -1\n ? direction === 1\n ? 0\n : targets.length - 1\n : (current + direction + targets.length) % targets.length\n const id = targets[nextIndex] as string\n focus(id)\n return id\n }\n\n function fullBounds(): Bounds {\n return { x: 0, y: 0, width: viewport.width, height: viewport.height }\n }\n\n function snapBounds(win: WindowState, zone: SnapZone): Bounds {\n const rect = zoneBounds(zone, viewport)\n return { x: rect.x, y: rect.y, ...normalizeSize(rect, win) }\n }\n\n function focusUnlessBlocked(id: string): void {\n const modal = topModalId()\n if (modal === null || modal === id) focus(id)\n }\n\n function applyStage(id: string, build: (win: WindowState) => WindowState | null): boolean {\n const win = windows[id]\n if (!win) return false\n const next = build(win)\n if (!next) return false\n setWindow(next)\n queueEvent(() => emitter.emit('stage', { window: next, previous: win.stage }))\n commit()\n return true\n }\n\n function minimize(id: string): boolean {\n const result = applyStage(id, (win) => {\n if (win.stage === 'minimized') return null\n return { ...win, stage: 'minimized', restoreStage: win.stage }\n })\n if (result && focusedId === id) {\n const previous = focusedId\n focusTop()\n if (focusedId) emitFocus(windows[focusedId] as WindowState, previous)\n commit()\n }\n return result\n }\n\n function maximize(id: string): boolean {\n const result = applyStage(id, (win) => {\n if (win.stage === 'maximized') return null\n const restoreBounds = win.stage === 'normal' ? win.bounds : (win.restoreBounds ?? win.bounds)\n return {\n ...win,\n stage: 'maximized',\n snapZone: null,\n restoreBounds,\n restoreStage: null,\n bounds: fullBounds(),\n }\n })\n if (result) focus(id)\n return result\n }\n\n function toggleMaximize(id: string): boolean {\n const win = windows[id]\n if (!win) return false\n return win.stage === 'maximized' ? restore(id) : maximize(id)\n }\n\n function restore(id: string): boolean {\n const result = applyStage(id, (win) => {\n if (win.stage === 'minimized') {\n const target = win.restoreStage ?? 'normal'\n if (target === 'maximized') {\n return { ...win, stage: 'maximized', restoreStage: null, bounds: fullBounds() }\n }\n if (target === 'snapped' && win.snapZone) {\n return {\n ...win,\n stage: 'snapped',\n restoreStage: null,\n bounds: snapBounds(win, win.snapZone),\n }\n }\n return { ...win, stage: 'normal', restoreStage: null }\n }\n if (win.stage === 'normal') return null\n const target = win.restoreBounds ?? win.bounds\n const bounds: Bounds = { x: target.x, y: target.y, ...normalizeSize(target, win) }\n return {\n ...win,\n stage: 'normal',\n snapZone: null,\n restoreBounds: null,\n restoreStage: null,\n bounds: keepInViewport ? clampToViewport(bounds, viewport, minVisible) : bounds,\n }\n })\n if (result) focusUnlessBlocked(id)\n return result\n }\n\n function restoreTo(id: string, bounds: Bounds): boolean {\n const result = applyStage(id, (win) => {\n const size = normalizeSize(bounds, win)\n const next: Bounds = { x: bounds.x, y: bounds.y, ...size }\n return {\n ...win,\n stage: 'normal',\n snapZone: null,\n restoreBounds: null,\n restoreStage: null,\n bounds: keepInViewport ? clampToViewport(next, viewport, minVisible) : next,\n }\n })\n if (result) focusUnlessBlocked(id)\n return result\n }\n\n function snap(id: string, zone: SnapZone): boolean {\n const result = applyStage(id, (win) => {\n const restoreBounds = win.stage === 'normal' ? win.bounds : (win.restoreBounds ?? win.bounds)\n return {\n ...win,\n stage: 'snapped',\n snapZone: zone,\n restoreBounds,\n restoreStage: null,\n bounds: snapBounds(win, zone),\n }\n })\n if (result) focus(id)\n return result\n }\n\n function move(id: string, x: number, y: number): boolean {\n const win = windows[id]\n if (win?.stage !== 'normal') return false\n let bounds: Bounds = { ...win.bounds, x, y }\n if (keepInViewport) bounds = clampToViewport(bounds, viewport, minVisible)\n if (boundsEqual(bounds, win.bounds)) return true\n const next = { ...win, bounds }\n setWindow(next)\n queueEvent(() => emitter.emit('move', { window: next }))\n commit()\n return true\n }\n\n function moveBy(id: string, dx: number, dy: number): boolean {\n const win = windows[id]\n if (!win) return false\n return move(id, win.bounds.x + dx, win.bounds.y + dy)\n }\n\n function resize(id: string, patch: Partial<Bounds>): boolean {\n const win = windows[id]\n if (!win || win.stage === 'maximized' || win.stage === 'minimized') return false\n const merged: Bounds = { ...win.bounds, ...patch }\n const drive =\n Math.abs(merged.height - win.bounds.height) > Math.abs(merged.width - win.bounds.width)\n ? 'height'\n : 'width'\n const size = normalizeSize(merged, win, drive)\n let bounds: Bounds = { x: merged.x, y: merged.y, ...size }\n if (keepInViewport) bounds = clampToViewport(bounds, viewport, minVisible)\n const becameNormal = win.stage === 'snapped'\n if (boundsEqual(bounds, win.bounds) && !becameNormal) return true\n const next: WindowState = becameNormal\n ? { ...win, stage: 'normal', snapZone: null, restoreBounds: null, bounds }\n : { ...win, bounds }\n setWindow(next)\n if (becameNormal) queueEvent(() => emitter.emit('stage', { window: next, previous: 'snapped' }))\n queueEvent(() => emitter.emit('resize', { window: next }))\n commit()\n return true\n }\n\n function update(id: string, patch: WindowUpdate): boolean {\n const win = windows[id]\n if (!win) return false\n const next: WindowState = {\n ...win,\n title: patch.title ?? win.title,\n layer: patch.layer ?? win.layer,\n minSize: patch.minSize ?? win.minSize,\n maxSize: patch.maxSize === undefined ? win.maxSize : patch.maxSize,\n aspectRatio:\n patch.aspectRatio === undefined\n ? win.aspectRatio\n : patch.aspectRatio !== null &&\n Number.isFinite(patch.aspectRatio) &&\n patch.aspectRatio > 0\n ? patch.aspectRatio\n : null,\n draggable: patch.draggable ?? win.draggable,\n resizable: patch.resizable ?? win.resizable,\n closable: patch.closable ?? win.closable,\n minimizable: patch.minimizable ?? win.minimizable,\n maximizable: patch.maximizable ?? win.maximizable,\n snappable: patch.snappable ?? win.snappable,\n meta: patch.meta ? { ...win.meta, ...patch.meta } : win.meta,\n }\n const size = normalizeSize(next.bounds, next)\n const resized = size.width !== next.bounds.width || size.height !== next.bounds.height\n const finalWin = resized ? { ...next, bounds: { ...next.bounds, ...size } } : next\n setWindow(finalWin)\n if (patch.layer && patch.layer !== win.layer) {\n order = sortByLayer(order)\n queueEvent(() => emitter.emit('order', { order }))\n if (patch.layer === 'modal' && topModalId() === id && focusedId !== id) {\n const previous = focusedId\n focusedId = id\n emitFocus(finalWin, previous)\n }\n }\n queueEvent(() => emitter.emit('update', { window: finalWin }))\n if (resized) queueEvent(() => emitter.emit('resize', { window: finalWin }))\n commit()\n return true\n }\n\n function setViewport(next: Size): void {\n if (next.width === viewport.width && next.height === viewport.height) return\n viewport = { ...next }\n reflowViewport()\n commitQuiet()\n }\n\n function setWorkspace(next: number): boolean {\n const target = normalizeWorkspace(next, workspace)\n if (target === workspace) return false\n const previous = workspace\n workspace = target\n const previousFocus = focusedId\n focusTop()\n queueEvent(() => emitter.emit('workspace', { workspace: target, previous }))\n if (focusedId && focusedId !== previousFocus) {\n emitFocus(windows[focusedId] as WindowState, previousFocus)\n }\n commit()\n return true\n }\n\n function moveToWorkspace(id: string, next: number): boolean {\n const win = windows[id]\n if (!win) return false\n const target = normalizeWorkspace(next, win.workspace)\n if (target === win.workspace) return false\n const updated = { ...win, workspace: target }\n setWindow(updated)\n if (!onActiveWorkspace(updated) && focusedId === id) {\n focusTop()\n if (focusedId) emitFocus(windows[focusedId] as WindowState, id)\n }\n queueEvent(() => emitter.emit('update', { window: updated }))\n commit()\n return true\n }\n\n function sendToBack(id: string): boolean {\n const win = windows[id]\n if (!win) return false\n const without = order.filter((entry) => entry !== id)\n const rank = LAYER_RANK[win.layer]\n let insertAt = 0\n for (const entry of without) {\n if (layerRankOf(entry) < rank) insertAt += 1\n else break\n }\n const next = [...without.slice(0, insertAt), id, ...without.slice(insertAt)]\n if (next.every((entry, i) => entry === order[i])) return false\n order = next\n queueEvent(() => emitter.emit('order', { order }))\n if (focusedId === id) {\n focusTop()\n if (focusedId) emitFocus(windows[focusedId] as WindowState, id)\n }\n commit()\n return true\n }\n\n function center(id: string): boolean {\n const win = windows[id]\n if (win?.stage !== 'normal') return false\n return move(\n id,\n Math.round((viewport.width - win.bounds.width) / 2),\n Math.round((viewport.height - win.bounds.height) / 2),\n )\n }\n\n function minimized(): readonly WindowState[] {\n return Object.values(windows)\n .filter((win) => win.stage === 'minimized' && onActiveWorkspace(win))\n .sort((a, b) => a.openedSeq - b.openedSeq)\n }\n\n function captureEntry(): HistoryEntry {\n return { windows, order, focusedId, workspace }\n }\n\n function recordHistory(): void {\n if (!historyDirty) return\n if (skipNextHistory) {\n skipNextHistory = false\n return\n }\n if (historyLimit <= 0) return\n if (interactionDepth > 0) {\n if (interactionRecorded) return\n interactionRecorded = true\n }\n past.push(pendingHistory as HistoryEntry)\n if (past.length > historyLimit) past.shift()\n future = []\n }\n\n function transact<T>(run: () => T): T {\n if (batchDepth === 0) pendingHistory = captureEntry()\n batchDepth += 1\n try {\n return run()\n } finally {\n batchDepth -= 1\n if (batchDepth === 0) {\n if (batchDirty) {\n batchDirty = false\n recordHistory()\n historyDirty = false\n snapshot = null\n flushEvents()\n emitter.emit('change', { state: getState() })\n }\n pendingHistory = null\n }\n }\n }\n\n function reflowViewport(): void {\n for (const id of order) {\n const win = windows[id] as WindowState\n if (win.stage === 'maximized') {\n const updated = { ...win, bounds: fullBounds() }\n setWindow(updated)\n queueEvent(() => emitter.emit('resize', { window: updated }))\n } else if (win.stage === 'snapped' && win.snapZone) {\n const updated = { ...win, bounds: snapBounds(win, win.snapZone) }\n setWindow(updated)\n queueEvent(() => emitter.emit('resize', { window: updated }))\n } else if (win.stage === 'normal' && keepInViewport) {\n const bounds = clampToViewport(win.bounds, viewport, minVisible)\n if (!boundsEqual(bounds, win.bounds)) {\n const updated = { ...win, bounds }\n setWindow(updated)\n queueEvent(() => emitter.emit('move', { window: updated }))\n }\n }\n }\n }\n\n function applyEntry(entry: HistoryEntry): void {\n windows = entry.windows\n order = [...entry.order]\n focusedId = entry.focusedId\n const previousWorkspace = workspace\n workspace = entry.workspace\n if (workspace !== previousWorkspace) {\n queueEvent(() => emitter.emit('workspace', { workspace, previous: previousWorkspace }))\n }\n reflowViewport()\n commit()\n }\n\n function undo(): boolean {\n const entry = past.pop()\n if (!entry) return false\n future.push(captureEntry())\n skipNextHistory = true\n applyEntry(entry)\n return true\n }\n\n function redo(): boolean {\n const entry = future.pop()\n if (!entry) return false\n past.push(captureEntry())\n skipNextHistory = true\n applyEntry(entry)\n return true\n }\n\n function beginInteraction(): void {\n interactionDepth += 1\n if (interactionDepth === 1) interactionRecorded = false\n }\n\n function endInteraction(): void {\n if (interactionDepth > 0) interactionDepth -= 1\n }\n\n function abortInteraction(): void {\n if (interactionDepth > 0 && interactionRecorded) {\n past.pop()\n interactionRecorded = false\n }\n endInteraction()\n }\n\n function clearHistory(): void {\n past.length = 0\n future = []\n }\n\n function saveLayout(name: string): SerializedState {\n const data = serialize()\n layouts.set(name, structuredClone(data))\n return data\n }\n\n function loadLayout(name: string): boolean {\n const data = layouts.get(name)\n if (!data) return false\n return hydrate(structuredClone(data))\n }\n\n function getLayout(name: string): SerializedState | undefined {\n const data = layouts.get(name)\n return data ? structuredClone(data) : undefined\n }\n\n function setLayout(name: string, data: SerializedState): boolean {\n if (!isValidSerialized(data)) return false\n layouts.set(name, structuredClone(data))\n return true\n }\n\n function deleteLayout(name: string): boolean {\n return layouts.delete(name)\n }\n\n function layoutNames(): string[] {\n return [...layouts.keys()]\n }\n\n function arrange(mode: 'cascade' | 'tile'): void {\n const ids = order.filter((id) => {\n const win = windows[id] as WindowState\n return win.stage !== 'minimized' && onActiveWorkspace(win)\n })\n if (ids.length === 0) return\n if (mode === 'cascade') {\n ids.forEach((id, index) => {\n const win = windows[id] as WindowState\n const size = win.restoreBounds ?? win.bounds\n restoreTo(id, {\n x: cascadeOrigin.x + (index % 10) * cascadeOffset,\n y: cascadeOrigin.y + (index % 10) * cascadeOffset,\n width: size.width,\n height: size.height,\n })\n })\n return\n }\n if (viewport.width <= 0 || viewport.height <= 0) return\n const cols = Math.ceil(Math.sqrt(ids.length))\n const rows = Math.ceil(ids.length / cols)\n const cellWidth = Math.floor(viewport.width / cols)\n const cellHeight = Math.floor(viewport.height / rows)\n ids.forEach((id, index) => {\n restoreTo(id, {\n x: (index % cols) * cellWidth,\n y: Math.floor(index / cols) * cellHeight,\n width: cellWidth,\n height: cellHeight,\n })\n })\n }\n\n function minimizeAll(): void {\n for (const id of [...order]) {\n if (onActiveWorkspace(windows[id] as WindowState)) minimize(id)\n }\n }\n\n function restoreAll(): void {\n for (const win of minimized()) restore(win.id)\n }\n\n function serialize(): SerializedState {\n return {\n version: 1,\n windows: order\n .map((id) => windows[id] as WindowState)\n .map((win) => ({\n ...win,\n bounds: { ...win.bounds },\n restoreBounds: win.restoreBounds ? { ...win.restoreBounds } : null,\n minSize: { ...win.minSize },\n maxSize: win.maxSize\n ? {\n width: Number.isFinite(win.maxSize.width) ? win.maxSize.width : null,\n height: Number.isFinite(win.maxSize.height) ? win.maxSize.height : null,\n }\n : null,\n meta: { ...win.meta },\n })),\n order: [...order],\n focusedId,\n workspace,\n }\n }\n\n function isBounds(value: unknown): value is Bounds {\n if (typeof value !== 'object' || value === null) return false\n const bounds = value as Record<string, unknown>\n return (\n typeof bounds.x === 'number' &&\n typeof bounds.y === 'number' &&\n typeof bounds.width === 'number' &&\n typeof bounds.height === 'number'\n )\n }\n\n function isSize(value: unknown): value is Size {\n if (typeof value !== 'object' || value === null) return false\n const size = value as Record<string, unknown>\n return typeof size.width === 'number' && typeof size.height === 'number'\n }\n\n function isSizeAxis(value: unknown): value is number | null {\n return value === null || typeof value === 'number'\n }\n\n function readMaxSize(value: unknown): Size | null {\n if (typeof value !== 'object' || value === null) return null\n const size = value as Record<string, unknown>\n if (!isSizeAxis(size.width) || !isSizeAxis(size.height)) return null\n if (size.width === null && size.height === null) return null\n return {\n width: size.width ?? Number.POSITIVE_INFINITY,\n height: size.height ?? Number.POSITIVE_INFINITY,\n }\n }\n\n function isSerializedWindow(value: unknown): value is SerializedWindowState {\n if (typeof value !== 'object' || value === null) return false\n const win = value as Record<string, unknown>\n return (\n typeof win.id === 'string' &&\n win.id.length > 0 &&\n isBounds(win.bounds) &&\n STAGES.includes(win.stage as WindowStage) &&\n LAYERS.includes(win.layer as WindowLayer)\n )\n }\n\n function isValidSerialized(data: SerializedState): boolean {\n if (typeof data !== 'object' || data === null) return false\n if (data.version !== 1 || !Array.isArray(data.windows)) return false\n if (!data.windows.every(isSerializedWindow)) return false\n const ids = new Set(data.windows.map((win) => win.id))\n return ids.size === data.windows.length\n }\n\n function hydrate(data: SerializedState): boolean {\n if (!isValidSerialized(data)) return false\n\n const previousWindows = windows\n const nextWindows: Record<string, WindowState> = {}\n let maxSeq = 0\n for (const raw of data.windows) {\n if (nextWindows[raw.id]) return false\n const win: WindowState = {\n id: raw.id,\n title: typeof raw.title === 'string' ? raw.title : 'Window',\n bounds: { ...raw.bounds },\n restoreBounds:\n raw.restoreBounds && isBounds(raw.restoreBounds) ? { ...raw.restoreBounds } : null,\n restoreStage: STAGES.includes(raw.restoreStage as WindowStage) ? raw.restoreStage : null,\n stage: raw.stage,\n snapZone: ZONES.includes(raw.snapZone as SnapZone) ? raw.snapZone : null,\n layer: raw.layer,\n workspace: normalizeWorkspace(raw.workspace, 0),\n minSize: isSize(raw.minSize) ? { ...raw.minSize } : { width: 160, height: 100 },\n maxSize: readMaxSize(raw.maxSize),\n aspectRatio:\n typeof raw.aspectRatio === 'number' &&\n Number.isFinite(raw.aspectRatio) &&\n raw.aspectRatio > 0\n ? raw.aspectRatio\n : null,\n openedSeq: typeof raw.openedSeq === 'number' ? raw.openedSeq : ++maxSeq,\n draggable: raw.draggable !== false,\n resizable: raw.resizable !== false,\n closable: raw.closable !== false,\n minimizable: raw.minimizable !== false,\n maximizable: raw.maximizable !== false,\n snappable: raw.snappable !== false,\n meta: raw.meta && typeof raw.meta === 'object' ? raw.meta : {},\n }\n maxSeq = Math.max(maxSeq, win.openedSeq)\n nextWindows[win.id] = win\n }\n\n const requestedOrder = Array.isArray(data.order) ? data.order : []\n const seen = new Set<string>()\n const nextOrder: string[] = []\n for (const id of requestedOrder) {\n if (typeof id === 'string' && nextWindows[id] && !seen.has(id)) {\n seen.add(id)\n nextOrder.push(id)\n }\n }\n for (const id of Object.keys(nextWindows)) {\n if (!seen.has(id)) nextOrder.push(id)\n }\n\n windows = nextWindows\n order = nextOrder\n order = sortByLayer(order)\n seq = maxSeq\n const previousWorkspace = workspace\n workspace = normalizeWorkspace(data.workspace, 0)\n if (workspace !== previousWorkspace) {\n queueEvent(() => emitter.emit('workspace', { workspace, previous: previousWorkspace }))\n }\n focusedId = data.focusedId && windows[data.focusedId] ? data.focusedId : null\n const focusedCandidate = focusedId ? windows[focusedId] : undefined\n if (\n focusedCandidate &&\n (focusedCandidate.stage === 'minimized' || !onActiveWorkspace(focusedCandidate))\n ) {\n focusedId = null\n }\n if (!focusedId) focusTop()\n const modal = topModalId()\n if (modal) {\n const focusedWin = focusedId ? (windows[focusedId] as WindowState) : null\n if (focusedWin?.layer !== 'modal') focusedId = modal\n }\n for (const id of Object.keys(previousWindows)) {\n if (!windows[id]) {\n const closed = previousWindows[id] as WindowState\n queueEvent(() => emitter.emit('close', { window: closed }))\n }\n }\n for (const id of order) {\n if (!previousWindows[id]) {\n const opened = windows[id] as WindowState\n queueEvent(() => emitter.emit('open', { window: opened }))\n }\n }\n if (viewport.width > 0 && viewport.height > 0) reflowViewport()\n queueEvent(() => emitter.emit('order', { order }))\n clearHistory()\n skipNextHistory = true\n commit()\n return true\n }\n\n function destroy(): void {\n emitter.clear()\n }\n\n return {\n open: (init) => transact(() => open(init)),\n close: (id) => transact(() => close(id)),\n closeAll: () => transact(closeAll),\n focus: (id) => transact(() => focus(id)),\n blur: () => transact(blur),\n cycleFocus: (direction) => transact(() => cycleFocus(direction)),\n minimize: (id) => transact(() => minimize(id)),\n maximize: (id) => transact(() => maximize(id)),\n toggleMaximize: (id) => transact(() => toggleMaximize(id)),\n restore: (id) => transact(() => restore(id)),\n restoreTo: (id, bounds) => transact(() => restoreTo(id, bounds)),\n snap: (id, zone) => transact(() => snap(id, zone)),\n move: (id, x, y) => transact(() => move(id, x, y)),\n moveBy: (id, dx, dy) => transact(() => moveBy(id, dx, dy)),\n center: (id) => transact(() => center(id)),\n sendToBack: (id) => transact(() => sendToBack(id)),\n resize: (id, patch) => transact(() => resize(id, patch)),\n update: (id, patch) => transact(() => update(id, patch)),\n get: (id) => windows[id],\n getState,\n minimized,\n setViewport: (next) => transact(() => setViewport(next)),\n workspace: () => workspace,\n setWorkspace: (next) => transact(() => setWorkspace(next)),\n moveToWorkspace: (id, next) => transact(() => moveToWorkspace(id, next)),\n batch: (run) => transact(run),\n serialize,\n hydrate: (data) => transact(() => hydrate(data)),\n undo: () => transact(undo),\n redo: () => transact(redo),\n canUndo: () => past.length > 0,\n canRedo: () => future.length > 0,\n beginInteraction,\n endInteraction,\n abortInteraction,\n clearHistory,\n saveLayout,\n loadLayout: (name) => transact(() => loadLayout(name)),\n getLayout,\n setLayout,\n deleteLayout,\n layoutNames,\n arrange: (mode) => transact(() => arrange(mode)),\n minimizeAll: () => transact(minimizeAll),\n restoreAll: () => transact(restoreAll),\n subscribe: (listener) => emitter.on('change', ({ state }) => listener(state)),\n on: (event, listener) => emitter.on(event, listener),\n destroy,\n }\n}\n","export function prefersReducedMotion(win: Window): boolean {\n return win.matchMedia('(prefers-reduced-motion: reduce)').matches\n}\n\nexport interface FlipGhostOptions {\n duration?: number\n easing?: string\n}\n\nexport function flipFromTarget(\n source: HTMLElement,\n target: Element,\n options: FlipGhostOptions = {},\n): void {\n const view = source.ownerDocument.defaultView\n if (!view || prefersReducedMotion(view)) return\n if (typeof source.animate !== 'function') return\n\n const from = target.getBoundingClientRect()\n const to = source.getBoundingClientRect()\n if (from.width === 0 || to.width === 0) return\n\n const ghost = source.ownerDocument.createElement('div')\n const style = view.getComputedStyle(source)\n ghost.style.cssText = `position:fixed;left:${to.left}px;top:${to.top}px;width:${to.width}px;height:${to.height}px;margin:0;pointer-events:none;z-index:2147483647;border-radius:${style.borderRadius};background:${style.backgroundColor};box-shadow:${style.boxShadow};transform-origin:top left;will-change:transform,opacity`\n source.ownerDocument.body.append(ghost)\n\n const dx = from.left + from.width / 2 - (to.left + to.width / 2)\n const dy = from.top + from.height / 2 - (to.top + to.height / 2)\n const scaleX = Math.max(from.width / to.width, 0.05)\n const scaleY = Math.max(from.height / to.height, 0.05)\n\n const animation = ghost.animate(\n [\n { transform: `translate(${dx}px, ${dy}px) scale(${scaleX}, ${scaleY})`, opacity: 0.2 },\n { transform: 'translate(0, 0) scale(1, 1)', opacity: 0.9 },\n ],\n {\n duration: options.duration ?? 260,\n easing: options.easing ?? 'cubic-bezier(0.32, 0.72, 0, 1)',\n },\n )\n animation.onfinish = () => ghost.remove()\n animation.oncancel = () => ghost.remove()\n}\n\nexport function flipToTarget(\n source: HTMLElement,\n target: Element,\n options: FlipGhostOptions = {},\n): void {\n const view = source.ownerDocument.defaultView\n if (!view || prefersReducedMotion(view)) return\n if (typeof source.animate !== 'function') return\n\n const from = source.getBoundingClientRect()\n const to = target.getBoundingClientRect()\n if (from.width === 0 || to.width === 0) return\n\n const ghost = source.ownerDocument.createElement('div')\n const style = view.getComputedStyle(source)\n ghost.style.cssText = `position:fixed;left:${from.left}px;top:${from.top}px;width:${from.width}px;height:${from.height}px;margin:0;pointer-events:none;z-index:2147483647;border-radius:${style.borderRadius};background:${style.backgroundColor};box-shadow:${style.boxShadow};transform-origin:top left;will-change:transform,opacity`\n source.ownerDocument.body.append(ghost)\n\n const dx = to.left + to.width / 2 - (from.left + from.width / 2)\n const dy = to.top + to.height / 2 - (from.top + from.height / 2)\n const scaleX = Math.max(to.width / from.width, 0.05)\n const scaleY = Math.max(to.height / from.height, 0.05)\n\n const animation = ghost.animate(\n [\n { transform: 'translate(0, 0) scale(1, 1)', opacity: 0.9 },\n { transform: `translate(${dx}px, ${dy}px) scale(${scaleX}, ${scaleY})`, opacity: 0.2 },\n ],\n {\n duration: options.duration ?? 260,\n easing: options.easing ?? 'cubic-bezier(0.32, 0.72, 0, 1)',\n },\n )\n animation.onfinish = () => ghost.remove()\n animation.oncancel = () => ghost.remove()\n}\n","import type { WindowManager } from '../core/types'\n\nexport interface AnnouncerMessages {\n opened(title: string): string\n closed(title: string): string\n minimized(title: string): string\n restored(title: string): string\n maximized(title: string): string\n snapped(title: string, zone: string): string\n focused(title: string): string\n workspace(index: number): string\n}\n\nexport const defaultMessages: AnnouncerMessages = {\n opened: (title) => `${title} window opened`,\n closed: (title) => `${title} window closed`,\n minimized: (title) => `${title} minimized`,\n restored: (title) => `${title} restored`,\n maximized: (title) => `${title} maximized`,\n snapped: (title, zone) => `${title} snapped to ${zone.replace('-', ' ')}`,\n focused: (title) => `${title} focused`,\n workspace: (index) => `workspace ${index + 1}`,\n}\n\nexport interface Announcer {\n element: HTMLElement\n announce(message: string): void\n destroy(): void\n}\n\nexport function createAnnouncer(\n wm: WindowManager,\n container: HTMLElement,\n messages: Partial<AnnouncerMessages> = {},\n): Announcer {\n const dict: AnnouncerMessages = { ...defaultMessages, ...messages }\n const element = container.ownerDocument.createElement('div')\n element.setAttribute('role', 'status')\n element.setAttribute('aria-live', 'polite')\n element.dataset.wmAnnouncer = ''\n element.style.cssText =\n 'position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0'\n container.append(element)\n\n let clearTimer: ReturnType<typeof setTimeout> | undefined\n let lastMessage = ''\n let detailed = false\n\n function announce(message: string): void {\n lastMessage = message\n element.textContent = message\n if (clearTimer !== undefined) clearTimeout(clearTimer)\n clearTimer = setTimeout(() => {\n element.textContent = ''\n }, 2000)\n }\n\n const unsubscribers = [\n wm.on('open', ({ window: win }) => announce(dict.opened(win.title))),\n wm.on('close', ({ window: win }) => announce(dict.closed(win.title))),\n wm.on('stage', ({ window: win, previous }) => {\n if (win.stage === 'minimized') announce(dict.minimized(win.title))\n else if (win.stage === 'maximized') announce(dict.maximized(win.title))\n else if (win.stage === 'snapped' && win.snapZone)\n announce(dict.snapped(win.title, win.snapZone))\n else if (win.stage === 'normal' && previous !== 'normal') announce(dict.restored(win.title))\n else return\n detailed = true\n }),\n wm.on('focus', ({ window: win, previous }) => {\n if (detailed || previous === null || lastMessage === dict.opened(win.title)) return\n announce(dict.focused(win.title))\n }),\n wm.on('workspace', ({ workspace }) => {\n announce(dict.workspace(workspace))\n detailed = true\n }),\n wm.subscribe(() => {\n detailed = false\n }),\n ]\n\n return {\n element,\n announce,\n destroy() {\n for (const unsubscribe of unsubscribers) unsubscribe()\n if (clearTimer !== undefined) clearTimeout(clearTimer)\n element.remove()\n },\n }\n}\n","import type { SnapDetectOptions } from '../core/geometry'\nimport type { Bounds, WindowManager, WindowState } from '../core/types'\nimport type { AnnouncerMessages } from './announcer'\n\nexport const INTERACTIVE_SELECTOR =\n 'button, input, select, textarea, a[href], [contenteditable], [data-wm-close], [data-wm-minimize], [data-wm-maximize]'\n\nexport interface Point {\n x: number\n y: number\n}\n\nexport interface DesktopSnapOptions extends SnapDetectOptions {\n preview?: boolean\n topEdge?: 'maximize' | 'top' | 'none'\n}\n\nexport interface DesktopKeyboardOptions {\n moveStep?: number\n cycle?: boolean\n snapShortcuts?: boolean\n historyShortcuts?: boolean\n}\n\nexport interface HitAreaOptions {\n edge?: number\n corner?: number\n}\n\nexport interface MagnetismOptions {\n threshold?: number\n}\n\nexport interface DesktopOptions {\n snap?: boolean | DesktopSnapOptions\n keyboard?: boolean | DesktopKeyboardOptions\n announce?: boolean | Partial<AnnouncerMessages>\n autoViewport?: boolean\n hitAreas?: HitAreaOptions\n magnetism?: boolean | MagnetismOptions\n minimizeTarget?: (window: WindowState) => Element | null\n onTitlebarContextMenu?: (window: WindowState, event: MouseEvent) => void\n}\n\nexport interface WindowAttachOptions {\n handle?: HTMLElement | string\n resizeHandles?: boolean\n removeOnClose?: boolean\n}\n\nexport interface DesktopController {\n element: HTMLElement\n wm: WindowManager\n attachWindow(id: string, element: HTMLElement, options?: WindowAttachOptions): () => void\n destroy(): void\n}\n\nexport interface ActiveDrag {\n id: string\n finish(cancelled: boolean): void\n}\n\nexport interface SessionContext {\n wm: WindowManager\n doc: Document\n view: Window & typeof globalThis\n toLocal(event: PointerEvent): Point\n trackRect(): () => void\n windowElement(id: string): HTMLElement | undefined\n showPreview(bounds: Bounds): void\n hidePreview(): void\n snapEnabled: boolean\n snapDetect: Required<SnapDetectOptions>\n topEdge: 'maximize' | 'top' | 'none'\n hitEdge: number\n hitCorner: number\n magnetThreshold: number\n currentDrag(): ActiveDrag | null\n claimDrag(session: ActiveDrag): void\n releaseDrag(session: ActiveDrag): void\n}\n\nexport function windowOf(element: HTMLElement): Window & typeof globalThis {\n const view = element.ownerDocument.defaultView\n if (!view) throw new Error('wmkit: desktop element is not attached to a document')\n return view\n}\n","import { clamp, detectSnapZone, magnetize, zoneBounds } from '../core/geometry'\nimport type { Bounds, SnapZone, WindowStage } from '../core/types'\nimport { type ActiveDrag, INTERACTIVE_SELECTOR, type SessionContext } from './shared'\n\ninterface DragSession extends ActiveDrag {\n pointerId: number\n grabDX: number\n grabDY: number\n grabRatio: number\n startBounds: Bounds\n startStage: WindowStage\n startZone: SnapZone | null\n startRestoreBounds: Bounds | null\n restored: boolean\n moved: boolean\n zone: SnapZone | 'maximize' | null\n raf: number\n pendingX: number\n pendingY: number\n hasPending: boolean\n}\n\nexport function createDragStarter(ctx: SessionContext) {\n const { wm, doc, view } = ctx\n\n return function startDrag(id: string, handle: HTMLElement, event: PointerEvent): void {\n const win = wm.get(id)\n if (!win?.draggable || event.button !== 0 || ctx.currentDrag()) return\n const target = event.target as Element | null\n if (target?.closest(INTERACTIVE_SELECTOR)) return\n event.preventDefault()\n\n const releaseRect = ctx.trackRect()\n const point = ctx.toLocal(event)\n const startBounds = win.bounds\n const session: DragSession = {\n id,\n pointerId: event.pointerId,\n grabDX: point.x - startBounds.x,\n grabDY: point.y - startBounds.y,\n grabRatio: clamp((point.x - startBounds.x) / startBounds.width, 0.05, 0.95),\n startBounds,\n startStage: win.stage,\n startZone: win.snapZone,\n startRestoreBounds: win.restoreBounds,\n restored: win.stage === 'normal',\n moved: false,\n zone: null,\n raf: 0,\n pendingX: 0,\n pendingY: 0,\n hasPending: false,\n finish: () => {},\n }\n\n const el = ctx.windowElement(id)\n\n function flush(): void {\n if (!session.hasPending || ctx.currentDrag() !== session) return\n session.hasPending = false\n session.raf = 0\n const current = wm.get(id)\n if (!current) return\n\n if (!session.restored) {\n const source = current.restoreBounds ?? session.startBounds\n const width = source.width\n const height = source.height\n wm.restoreTo(id, {\n x: session.pendingX - width * session.grabRatio,\n y: session.pendingY - Math.min(session.grabDY, 24),\n width,\n height,\n })\n session.restored = true\n const restoredWin = wm.get(id)\n if (restoredWin) {\n session.grabDX = session.pendingX - restoredWin.bounds.x\n session.grabDY = session.pendingY - restoredWin.bounds.y\n }\n return\n }\n\n let nextX = session.pendingX - session.grabDX\n let nextY = session.pendingY - session.grabDY\n if (ctx.magnetThreshold > 0) {\n const state = wm.getState()\n const targets: Bounds[] = [\n { x: 0, y: 0, width: state.viewport.width, height: state.viewport.height },\n ]\n for (const otherId of state.order) {\n if (otherId === id) continue\n const other = state.windows[otherId]\n if (other && other.stage !== 'minimized' && other.workspace === state.workspace) {\n targets.push(other.bounds)\n }\n }\n const magnet = magnetize(\n { x: nextX, y: nextY, width: current.bounds.width, height: current.bounds.height },\n targets,\n ctx.magnetThreshold,\n )\n nextX = magnet.x\n nextY = magnet.y\n }\n wm.move(id, nextX, nextY)\n\n if (ctx.snapEnabled && current.snappable) {\n const viewport = wm.getState().viewport\n const rawZone = detectSnapZone(session.pendingX, session.pendingY, viewport, ctx.snapDetect)\n let zone: DragSession['zone'] = rawZone\n if (rawZone === 'top') {\n if (ctx.topEdge === 'maximize') zone = current.maximizable ? 'maximize' : null\n else if (ctx.topEdge === 'none') zone = null\n }\n session.zone = zone\n if (zone) {\n ctx.showPreview(\n zone === 'maximize'\n ? { x: 0, y: 0, width: viewport.width, height: viewport.height }\n : zoneBounds(zone, viewport),\n )\n } else {\n ctx.hidePreview()\n }\n }\n }\n\n function onMove(moveEvent: PointerEvent): void {\n if (moveEvent.pointerId !== session.pointerId) return\n const movePoint = ctx.toLocal(moveEvent)\n if (!session.moved) {\n const travelled =\n Math.abs(movePoint.x - (session.startBounds.x + session.grabDX)) +\n Math.abs(movePoint.y - (session.startBounds.y + session.grabDY))\n if (travelled < 3) return\n session.moved = true\n if (el) {\n el.dataset.wmDragging = ''\n el.style.willChange = 'transform'\n }\n }\n session.pendingX = movePoint.x\n session.pendingY = movePoint.y\n session.hasPending = true\n if (session.raf === 0) session.raf = view.requestAnimationFrame(flush)\n }\n\n function onUp(upEvent: PointerEvent): void {\n if (upEvent.pointerId !== session.pointerId) return\n finish(false)\n }\n\n function onCancel(cancelEvent: PointerEvent): void {\n if (cancelEvent.pointerId !== session.pointerId) return\n finish(true)\n }\n\n function onKeydown(keyEvent: KeyboardEvent): void {\n if (keyEvent.key === 'Escape') {\n keyEvent.preventDefault()\n finish(true)\n }\n }\n\n function finish(cancelled: boolean): void {\n if (ctx.currentDrag() !== session) return\n try {\n if (session.raf !== 0) view.cancelAnimationFrame(session.raf)\n if (session.hasPending && !cancelled) flush()\n if (cancelled) {\n if (session.moved && session.restored) {\n if (session.startStage === 'maximized') {\n wm.restoreTo(id, session.startRestoreBounds ?? session.startBounds)\n wm.maximize(id)\n } else if (session.startStage === 'snapped' && session.startZone) {\n wm.restoreTo(id, session.startRestoreBounds ?? session.startBounds)\n wm.snap(id, session.startZone)\n } else {\n wm.move(id, session.startBounds.x, session.startBounds.y)\n }\n }\n } else if (session.moved && session.zone) {\n if (session.zone === 'maximize') wm.maximize(id)\n else wm.snap(id, session.zone)\n }\n } finally {\n ctx.releaseDrag(session)\n releaseRect()\n handle.removeEventListener('pointermove', onMove)\n handle.removeEventListener('pointerup', onUp)\n handle.removeEventListener('pointercancel', onCancel)\n doc.removeEventListener('keydown', onKeydown, true)\n if (handle.hasPointerCapture(session.pointerId)) {\n handle.releasePointerCapture(session.pointerId)\n }\n if (el) {\n delete el.dataset.wmDragging\n el.style.willChange = ''\n }\n ctx.hidePreview()\n if (cancelled) wm.abortInteraction()\n else wm.endInteraction()\n }\n }\n\n session.finish = finish\n wm.beginInteraction()\n ctx.claimDrag(session)\n handle.setPointerCapture(event.pointerId)\n handle.addEventListener('pointermove', onMove)\n handle.addEventListener('pointerup', onUp)\n handle.addEventListener('pointercancel', onCancel)\n doc.addEventListener('keydown', onKeydown, true)\n }\n}\n","import { applyAspect, clampSize } from '../core/geometry'\nimport type { Bounds } from '../core/types'\nimport type { ActiveDrag, SessionContext } from './shared'\n\nexport const RESIZE_DIRECTIONS = ['n', 'e', 's', 'w', 'ne', 'nw', 'se', 'sw'] as const\nexport type ResizeDirection = (typeof RESIZE_DIRECTIONS)[number]\n\nconst RESIZE_CURSORS: Record<ResizeDirection, string> = {\n n: 'ns-resize',\n s: 'ns-resize',\n e: 'ew-resize',\n w: 'ew-resize',\n ne: 'nesw-resize',\n sw: 'nesw-resize',\n nw: 'nwse-resize',\n se: 'nwse-resize',\n}\n\nexport function createResizeStarter(ctx: SessionContext) {\n const { wm, doc, view } = ctx\n\n return function startResize(id: string, direction: ResizeDirection, event: PointerEvent): void {\n const win = wm.get(id)\n if (!win?.resizable || event.button !== 0 || ctx.currentDrag()) return\n event.preventDefault()\n event.stopPropagation()\n\n const handleEl = event.currentTarget as HTMLElement\n const session: ActiveDrag = { id, finish: (cancelled) => finish(cancelled) }\n ctx.claimDrag(session)\n wm.beginInteraction()\n const releaseRect = ctx.trackRect()\n const startPoint = ctx.toLocal(event)\n const start = win.bounds\n const startStage = win.stage\n const startZone = win.snapZone\n const startRestore = win.restoreBounds\n const minSize = win.minSize\n const maxSize = win.maxSize\n const aspect = win.aspectRatio\n const drive = direction === 'n' || direction === 's' ? 'height' : 'width'\n let raf = 0\n let pendingX = 0\n let pendingY = 0\n let hasPending = false\n const el = ctx.windowElement(id)\n if (el) el.dataset.wmResizing = direction\n\n function flush(): void {\n if (!hasPending) return\n hasPending = false\n raf = 0\n const dx = pendingX - startPoint.x\n const dy = pendingY - startPoint.y\n const top = direction.includes('n') ? Math.max(0, start.y + dy) : start.y\n const raw = {\n width: direction.includes('e')\n ? start.width + dx\n : direction.includes('w')\n ? start.width - dx\n : start.width,\n height: direction.includes('s')\n ? start.height + dy\n : direction.includes('n')\n ? start.y + start.height - top\n : start.height,\n }\n const size =\n aspect === null\n ? clampSize(raw, minSize, maxSize)\n : applyAspect(raw, aspect, minSize, maxSize, drive)\n const next: Bounds = {\n x: direction.includes('w') ? start.x + start.width - size.width : start.x,\n y: direction.includes('n') ? start.y + start.height - size.height : start.y,\n ...size,\n }\n wm.resize(id, next)\n }\n\n function onMove(moveEvent: PointerEvent): void {\n if (moveEvent.pointerId !== event.pointerId) return\n const movePoint = ctx.toLocal(moveEvent)\n pendingX = movePoint.x\n pendingY = movePoint.y\n hasPending = true\n if (raf === 0) raf = view.requestAnimationFrame(flush)\n }\n\n function finish(cancelled: boolean): void {\n if (ctx.currentDrag() !== session) return\n try {\n if (raf !== 0) view.cancelAnimationFrame(raf)\n if (hasPending && !cancelled) flush()\n if (cancelled) {\n if (startStage === 'snapped' && startZone) {\n wm.restoreTo(id, startRestore ?? start)\n wm.snap(id, startZone)\n } else {\n wm.resize(id, start)\n }\n }\n } finally {\n ctx.releaseDrag(session)\n releaseRect()\n handleEl.removeEventListener('pointermove', onMove)\n handleEl.removeEventListener('pointerup', onUp)\n handleEl.removeEventListener('pointercancel', onCancelPointer)\n doc.removeEventListener('keydown', onKeydown, true)\n if (handleEl.hasPointerCapture(event.pointerId)) {\n handleEl.releasePointerCapture(event.pointerId)\n }\n if (el) delete el.dataset.wmResizing\n if (cancelled) wm.abortInteraction()\n else wm.endInteraction()\n }\n }\n\n function onUp(upEvent: PointerEvent): void {\n if (upEvent.pointerId !== event.pointerId) return\n finish(false)\n }\n\n function onCancelPointer(cancelEvent: PointerEvent): void {\n if (cancelEvent.pointerId !== event.pointerId) return\n finish(true)\n }\n\n function onKeydown(keyEvent: KeyboardEvent): void {\n if (keyEvent.key === 'Escape') {\n keyEvent.preventDefault()\n finish(true)\n }\n }\n\n handleEl.setPointerCapture(event.pointerId)\n handleEl.addEventListener('pointermove', onMove)\n handleEl.addEventListener('pointerup', onUp)\n handleEl.addEventListener('pointercancel', onCancelPointer)\n doc.addEventListener('keydown', onKeydown, true)\n }\n}\n\nexport function createResizeHandles(\n doc: Document,\n edge: number,\n corner: number,\n): Array<{ element: HTMLElement; direction: ResizeDirection }> {\n const base = 'position:absolute;touch-action:none;user-select:none;-webkit-user-select:none;'\n const styles: Record<ResizeDirection, string> = {\n n: `top:${-edge / 2}px;left:${corner}px;right:${corner}px;height:${edge}px`,\n s: `bottom:${-edge / 2}px;left:${corner}px;right:${corner}px;height:${edge}px`,\n e: `right:${-edge / 2}px;top:${corner}px;bottom:${corner}px;width:${edge}px`,\n w: `left:${-edge / 2}px;top:${corner}px;bottom:${corner}px;width:${edge}px`,\n ne: `top:${-edge / 2}px;right:${-edge / 2}px;width:${corner}px;height:${corner}px`,\n nw: `top:${-edge / 2}px;left:${-edge / 2}px;width:${corner}px;height:${corner}px`,\n se: `bottom:${-edge / 2}px;right:${-edge / 2}px;width:${corner}px;height:${corner}px`,\n sw: `bottom:${-edge / 2}px;left:${-edge / 2}px;width:${corner}px;height:${corner}px`,\n }\n return RESIZE_DIRECTIONS.map((direction) => {\n const element = doc.createElement('div')\n element.dataset.wmResize = direction\n element.setAttribute('aria-hidden', 'true')\n element.style.cssText = `${base}${styles[direction]};cursor:${RESIZE_CURSORS[direction]}`\n return { element, direction }\n })\n}\n","import type { Bounds, SnapZone, WindowManager, WindowState } from '../core/types'\nimport { flipFromTarget, flipToTarget } from './animate'\nimport { type Announcer, createAnnouncer } from './announcer'\nimport { createDragStarter } from './drag'\nimport { createResizeHandles, createResizeStarter } from './resize'\nimport {\n type ActiveDrag,\n type DesktopController,\n type DesktopKeyboardOptions,\n type DesktopOptions,\n type DesktopSnapOptions,\n INTERACTIVE_SELECTOR,\n type Point,\n type SessionContext,\n type WindowAttachOptions,\n windowOf,\n} from './shared'\n\ninterface AttachedWindow {\n element: HTMLElement\n handle: HTMLElement | null\n handles: HTMLElement[]\n lastState: WindowState | null\n lastZ: number\n lastWorkspace: number\n cleanup: Array<() => void>\n}\n\nconst SNAP_SHORTCUTS: Record<string, SnapZone> = {\n ArrowLeft: 'left',\n ArrowRight: 'right',\n}\n\nconst FOCUSABLE_SELECTOR =\n 'button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])'\n\nexport function attachDesktop(\n wm: WindowManager,\n element: HTMLElement,\n options: DesktopOptions = {},\n): DesktopController {\n const doc = element.ownerDocument\n const view = windowOf(element)\n\n const coarsePointer =\n typeof view.matchMedia === 'function' && view.matchMedia('(pointer: coarse)').matches\n const snapEnabled = options.snap !== false\n const snapOptions: DesktopSnapOptions = typeof options.snap === 'object' ? options.snap : {}\n const snapPreviewEnabled = snapOptions.preview !== false\n const topEdge = snapOptions.topEdge ?? 'maximize'\n const keyboardEnabled = options.keyboard !== false\n const keyboardOptions: DesktopKeyboardOptions =\n typeof options.keyboard === 'object' ? options.keyboard : {}\n const moveStep = keyboardOptions.moveStep ?? 16\n const cycleEnabled = keyboardOptions.cycle !== false\n const snapShortcuts = keyboardOptions.snapShortcuts !== false\n const historyShortcuts = keyboardOptions.historyShortcuts !== false\n const hitEdge = options.hitAreas?.edge ?? (coarsePointer ? 16 : 8)\n const hitCorner = options.hitAreas?.corner ?? (coarsePointer ? 24 : 12)\n const magnetThreshold =\n options.magnetism === false\n ? 0\n : ((typeof options.magnetism === 'object' ? options.magnetism.threshold : undefined) ??\n (coarsePointer ? 12 : 8))\n\n element.dataset.wmDesktop = ''\n element.tabIndex = -1\n if (view.getComputedStyle(element).position === 'static') {\n element.style.position = 'relative'\n }\n\n const registry = new Map<string, AttachedWindow>()\n const cleanup: Array<() => void> = []\n let lastOrder: readonly string[] | null = null\n let lastFocused: string | null = null\n let drag: ActiveDrag | null = null\n let cachedRect: { left: number; top: number } | null = null\n let rectUsers = 0\n\n let announcer: Announcer | null = null\n if (options.announce !== false) {\n announcer = createAnnouncer(\n wm,\n element,\n typeof options.announce === 'object' ? options.announce : {},\n )\n cleanup.push(() => announcer?.destroy())\n }\n\n let preview: HTMLElement | null = null\n function showPreview(bounds: Bounds): void {\n if (!snapPreviewEnabled) return\n if (!preview) {\n preview = doc.createElement('div')\n preview.dataset.wmSnapPreview = ''\n preview.style.cssText =\n 'position:absolute;left:0;top:0;pointer-events:none;display:none;z-index:2147483646'\n element.append(preview)\n }\n preview.style.display = 'block'\n preview.style.transform = `translate3d(${bounds.x}px, ${bounds.y}px, 0)`\n preview.style.width = `${bounds.width}px`\n preview.style.height = `${bounds.height}px`\n }\n\n function hidePreview(): void {\n if (preview) preview.style.display = 'none'\n }\n\n function refreshRect(): void {\n const rect = element.getBoundingClientRect()\n cachedRect = { left: rect.left, top: rect.top }\n }\n\n const ctx: SessionContext = {\n wm,\n doc,\n view,\n toLocal(event: PointerEvent): Point {\n const rect = cachedRect ?? element.getBoundingClientRect()\n return { x: event.clientX - rect.left, y: event.clientY - rect.top }\n },\n trackRect() {\n if (rectUsers === 0) {\n refreshRect()\n view.addEventListener('scroll', refreshRect, true)\n view.addEventListener('resize', refreshRect)\n }\n rectUsers += 1\n let released = false\n return () => {\n if (released) return\n released = true\n rectUsers -= 1\n if (rectUsers === 0) {\n view.removeEventListener('scroll', refreshRect, true)\n view.removeEventListener('resize', refreshRect)\n cachedRect = null\n }\n }\n },\n windowElement: (id) => registry.get(id)?.element,\n showPreview,\n hidePreview,\n snapEnabled,\n snapDetect: {\n threshold: snapOptions.threshold ?? (coarsePointer ? 20 : 12),\n cornerSize: snapOptions.cornerSize ?? (coarsePointer ? 96 : 64),\n },\n topEdge,\n hitEdge,\n hitCorner,\n magnetThreshold,\n currentDrag: () => drag,\n claimDrag(session) {\n drag = session\n },\n releaseDrag(session) {\n if (drag === session) drag = null\n },\n }\n\n const startDrag = createDragStarter(ctx)\n const startResize = createResizeStarter(ctx)\n\n if (options.autoViewport !== false) {\n const applyViewport = () =>\n wm.setViewport({ width: element.clientWidth, height: element.clientHeight })\n applyViewport()\n const observer = new view.ResizeObserver(applyViewport)\n observer.observe(element)\n cleanup.push(() => observer.disconnect())\n }\n\n function syncWindow(\n attached: AttachedWindow,\n win: WindowState,\n zIndex: number,\n activeWorkspace: number,\n ): void {\n const el = attached.element\n const firstSync = attached.lastState === null\n if (firstSync) el.style.transition = 'none'\n if (attached.lastState !== win || attached.lastWorkspace !== activeWorkspace) {\n el.style.transform = `translate3d(${win.bounds.x}px, ${win.bounds.y}px, 0)`\n el.style.width = `${win.bounds.width}px`\n el.style.height = `${win.bounds.height}px`\n el.dataset.wmStage = win.stage\n el.dataset.wmLayer = win.layer\n el.dataset.wmWorkspace = String(win.workspace)\n const hide = win.stage === 'minimized' || win.workspace !== activeWorkspace\n if (hide && !el.hidden && el.contains(doc.activeElement)) {\n element.focus({ preventScroll: true })\n }\n el.hidden = hide\n el.setAttribute('aria-label', win.title)\n if (win.layer === 'modal') el.setAttribute('aria-modal', 'true')\n else el.removeAttribute('aria-modal')\n for (const handle of attached.handles) {\n handle.style.display =\n win.resizable && (win.stage === 'normal' || win.stage === 'snapped') ? '' : 'none'\n }\n attached.lastState = win\n attached.lastWorkspace = activeWorkspace\n }\n if (attached.lastZ !== zIndex) {\n el.style.zIndex = String(zIndex + 1)\n attached.lastZ = zIndex\n }\n if (firstSync) {\n void el.offsetWidth\n el.style.transition = ''\n }\n }\n\n function syncAll(): void {\n const state = wm.getState()\n const orderChanged = state.order !== lastOrder\n state.order.forEach((id, index) => {\n const attached = registry.get(id)\n const win = state.windows[id]\n if (!attached || !win) return\n if (\n orderChanged ||\n attached.lastState !== win ||\n attached.lastWorkspace !== state.workspace\n ) {\n syncWindow(attached, win, index, state.workspace)\n }\n })\n if (state.focusedId !== lastFocused) {\n if (lastFocused) {\n const prev = registry.get(lastFocused)\n if (prev) delete prev.element.dataset.wmFocused\n }\n if (state.focusedId) {\n const next = registry.get(state.focusedId)\n if (next) next.element.dataset.wmFocused = ''\n }\n lastFocused = state.focusedId\n }\n lastOrder = state.order\n }\n\n cleanup.push(wm.subscribe(syncAll))\n\n cleanup.push(\n wm.on('focus', ({ window: win }) => {\n const attached = registry.get(win.id)\n if (!attached) return\n if (!attached.element.contains(doc.activeElement)) {\n attached.element.focus({ preventScroll: true })\n }\n }),\n )\n\n cleanup.push(\n wm.on('modalblocked', ({ window: win }) => {\n const attached = registry.get(win.id)\n if (!attached) return\n delete attached.element.dataset.wmFlash\n void attached.element.offsetWidth\n attached.element.dataset.wmFlash = ''\n }),\n )\n\n cleanup.push(\n wm.on('stage', ({ window: win, previous }) => {\n const attached = registry.get(win.id)\n if (!attached) return\n if (win.stage === 'minimized' && previous !== 'minimized') {\n const target = options.minimizeTarget?.(win)\n if (target) flipToTarget(attached.element, target)\n } else if (previous === 'minimized' && win.stage !== 'minimized') {\n const target = options.minimizeTarget?.(win)\n if (target) view.requestAnimationFrame(() => flipFromTarget(attached.element, target))\n }\n }),\n )\n\n if (keyboardEnabled) {\n const onDesktopKeydown = (event: KeyboardEvent) => {\n if (cycleEnabled && event.key === 'F6') {\n event.preventDefault()\n wm.cycleFocus(event.shiftKey ? -1 : 1)\n return\n }\n if (!event.ctrlKey && !event.metaKey) return\n const target = event.target as Element | null\n if (target?.closest(INTERACTIVE_SELECTOR)) return\n if (historyShortcuts && (event.key === 'z' || event.key === 'Z')) {\n event.preventDefault()\n if (event.shiftKey) wm.redo()\n else wm.undo()\n return\n }\n if (!snapShortcuts || !event.altKey) return\n const focused = wm.getState().focusedId\n const win = focused ? wm.get(focused) : undefined\n if (!win) return\n const zone = SNAP_SHORTCUTS[event.key]\n if (zone) {\n event.preventDefault()\n if (win.snappable) wm.snap(win.id, zone)\n } else if (event.key === 'ArrowUp') {\n event.preventDefault()\n if (win.maximizable) wm.maximize(win.id)\n } else if (event.key === 'ArrowDown') {\n event.preventDefault()\n if (win.stage === 'normal') {\n if (win.minimizable) wm.minimize(win.id)\n } else {\n wm.restore(win.id)\n }\n }\n }\n element.addEventListener('keydown', onDesktopKeydown)\n cleanup.push(() => element.removeEventListener('keydown', onDesktopKeydown))\n }\n\n function endDrag(cancelled: boolean): void {\n if (drag) drag.finish(cancelled)\n }\n\n function attachWindow(\n id: string,\n windowElement: HTMLElement,\n windowOptions: WindowAttachOptions = {},\n ): () => void {\n const win = wm.get(id)\n if (!win) throw new Error(`wmkit: cannot attach unknown window \"${id}\"`)\n if (registry.has(id)) throw new Error(`wmkit: window \"${id}\" is already attached`)\n\n const attached: AttachedWindow = {\n element: windowElement,\n handle: null,\n handles: [],\n lastState: null,\n lastZ: -1,\n lastWorkspace: -1,\n cleanup: [],\n }\n\n windowElement.dataset.wmWindow = id\n windowElement.setAttribute('role', 'dialog')\n windowElement.tabIndex = -1\n windowElement.style.position = 'absolute'\n windowElement.style.left = '0'\n windowElement.style.top = '0'\n\n const titleEl = windowElement.querySelector('[data-wm-title]')\n if (titleEl) {\n if (!titleEl.id) titleEl.id = `wmkit-title-${id}`\n windowElement.setAttribute('aria-labelledby', titleEl.id)\n }\n\n const handle =\n typeof windowOptions.handle === 'string'\n ? windowElement.querySelector<HTMLElement>(windowOptions.handle)\n : (windowOptions.handle ?? windowElement.querySelector<HTMLElement>('[data-wm-drag]'))\n attached.handle = handle\n\n const onPointerDownFocus = () => {\n wm.focus(id)\n }\n windowElement.addEventListener('pointerdown', onPointerDownFocus, true)\n attached.cleanup.push(() =>\n windowElement.removeEventListener('pointerdown', onPointerDownFocus, true),\n )\n\n const onClick = (event: MouseEvent) => {\n const target = event.target as Element | null\n if (!target) return\n const current = wm.get(id)\n if (!current) return\n if (target.closest('[data-wm-close]')) {\n if (current.closable) wm.close(id)\n } else if (target.closest('[data-wm-minimize]')) {\n if (current.minimizable) wm.minimize(id)\n } else if (target.closest('[data-wm-maximize]')) {\n if (current.maximizable) wm.toggleMaximize(id)\n }\n }\n windowElement.addEventListener('click', onClick)\n attached.cleanup.push(() => windowElement.removeEventListener('click', onClick))\n\n if (handle) {\n handle.style.touchAction = 'none'\n const onHandleDown = (event: PointerEvent) => startDrag(id, handle, event)\n handle.addEventListener('pointerdown', onHandleDown)\n attached.cleanup.push(() => handle.removeEventListener('pointerdown', onHandleDown))\n\n const onDoubleClick = (event: MouseEvent) => {\n const target = event.target as Element | null\n if (target?.closest(INTERACTIVE_SELECTOR)) return\n const current = wm.get(id)\n if (current?.maximizable) wm.toggleMaximize(id)\n }\n handle.addEventListener('dblclick', onDoubleClick)\n attached.cleanup.push(() => handle.removeEventListener('dblclick', onDoubleClick))\n\n if (options.onTitlebarContextMenu) {\n const onContextMenu = (event: MouseEvent) => {\n const current = wm.get(id)\n if (!current) return\n event.preventDefault()\n options.onTitlebarContextMenu?.(current, event)\n }\n handle.addEventListener('contextmenu', onContextMenu)\n attached.cleanup.push(() => handle.removeEventListener('contextmenu', onContextMenu))\n }\n }\n\n if (windowOptions.resizeHandles !== false) {\n for (const { element: resizeHandle, direction } of createResizeHandles(\n doc,\n hitEdge,\n hitCorner,\n )) {\n const onResizeDown = (event: PointerEvent) => startResize(id, direction, event)\n resizeHandle.addEventListener('pointerdown', onResizeDown)\n attached.cleanup.push(() => resizeHandle.removeEventListener('pointerdown', onResizeDown))\n windowElement.append(resizeHandle)\n attached.handles.push(resizeHandle)\n }\n }\n\n const onWindowKeydown = (event: KeyboardEvent) => {\n const target = event.target as Element | null\n if (target?.closest(INTERACTIVE_SELECTOR)) return\n const current = wm.get(id)\n if (!current) return\n const arrows: Record<string, [number, number]> = {\n ArrowLeft: [-1, 0],\n ArrowRight: [1, 0],\n ArrowUp: [0, -1],\n ArrowDown: [0, 1],\n }\n if (event.ctrlKey || event.metaKey) return\n const vector = arrows[event.key]\n if (!vector || !keyboardEnabled) return\n const step = event.altKey ? 1 : moveStep\n const [dx, dy] = vector\n if (event.shiftKey) {\n if (!current.resizable) return\n event.preventDefault()\n wm.resize(id, {\n width: current.bounds.width + dx * step,\n height: current.bounds.height + dy * step,\n })\n } else if (current.draggable && current.stage === 'normal') {\n event.preventDefault()\n wm.moveBy(id, dx * step, dy * step)\n }\n }\n windowElement.addEventListener('keydown', onWindowKeydown)\n attached.cleanup.push(() => windowElement.removeEventListener('keydown', onWindowKeydown))\n\n const onModalTrap = (event: KeyboardEvent) => {\n if (event.key !== 'Tab') return\n const current = wm.get(id)\n if (current?.layer !== 'modal') return\n const focusables = [\n ...windowElement.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR),\n ].filter((node) => node.offsetParent !== null || node === doc.activeElement)\n if (focusables.length === 0) return\n const first = focusables[0]\n const last = focusables[focusables.length - 1]\n if (!first || !last) return\n if (!windowElement.contains(doc.activeElement)) {\n event.preventDefault()\n ;(event.shiftKey ? last : first).focus()\n return\n }\n if (event.shiftKey && doc.activeElement === first) {\n event.preventDefault()\n last.focus()\n } else if (!event.shiftKey && doc.activeElement === last) {\n event.preventDefault()\n first.focus()\n }\n }\n windowElement.addEventListener('keydown', onModalTrap)\n attached.cleanup.push(() => windowElement.removeEventListener('keydown', onModalTrap))\n\n const detach = () => {\n if (drag?.id === id) endDrag(true)\n for (const dispose of attached.cleanup) dispose()\n for (const resizeHandle of attached.handles) resizeHandle.remove()\n registry.delete(id)\n }\n\n if (windowOptions.removeOnClose) {\n const stopOnClose = wm.on('close', ({ window: closed }) => {\n if (closed.id !== id) return\n detach()\n windowElement.remove()\n })\n attached.cleanup.push(stopOnClose)\n }\n\n registry.set(id, attached)\n lastOrder = null\n lastFocused = null\n syncAll()\n if (wm.getState().focusedId === id && !windowElement.contains(doc.activeElement)) {\n windowElement.focus({ preventScroll: true })\n }\n\n return detach\n }\n\n return {\n element,\n wm,\n attachWindow,\n destroy() {\n endDrag(true)\n for (const [, attached] of registry) {\n for (const dispose of attached.cleanup) dispose()\n for (const resizeHandle of attached.handles) resizeHandle.remove()\n }\n registry.clear()\n for (const dispose of cleanup) dispose()\n preview?.remove()\n delete element.dataset.wmDesktop\n },\n }\n}\n","import type { WindowManager } from '../core/types'\nimport { attachDesktop } from './controller'\nimport type { DesktopController, DesktopOptions, WindowAttachOptions } from './shared'\n\nexport interface DesktopBinder {\n wm: WindowManager\n controller(): DesktopController | null\n bindDesktop(element: HTMLElement): () => void\n bindWindow(id: string, element: HTMLElement, options?: WindowAttachOptions): () => void\n destroy(): void\n}\n\ninterface PendingWindow {\n id: string\n element: HTMLElement\n options: WindowAttachOptions | undefined\n detach: (() => void) | null\n}\n\nexport function createDesktopBinder(\n wm: WindowManager,\n options: DesktopOptions = {},\n): DesktopBinder {\n let controller: DesktopController | null = null\n let stopOpen: (() => void) | null = null\n const entries = new Set<PendingWindow>()\n\n function attachEntry(entry: PendingWindow): void {\n if (controller && !entry.detach && wm.get(entry.id)) {\n entry.detach = controller.attachWindow(entry.id, entry.element, entry.options)\n }\n }\n\n function unbindDesktop(): void {\n stopOpen?.()\n stopOpen = null\n for (const entry of entries) entry.detach = null\n controller?.destroy()\n controller = null\n }\n\n return {\n wm,\n controller: () => controller,\n bindDesktop(element) {\n if (controller) throw new Error('wmkit: desktop is already bound')\n controller = attachDesktop(wm, element, options)\n stopOpen = wm.on('open', ({ window: win }) => {\n for (const entry of entries) {\n if (entry.id === win.id) attachEntry(entry)\n }\n })\n for (const entry of entries) attachEntry(entry)\n return unbindDesktop\n },\n bindWindow(id, element, windowOptions) {\n const entry: PendingWindow = { id, element, options: windowOptions, detach: null }\n entries.add(entry)\n attachEntry(entry)\n return () => {\n entry.detach?.()\n entry.detach = null\n entries.delete(entry)\n }\n },\n destroy() {\n unbindDesktop()\n entries.clear()\n },\n }\n}\n"]}