@gustavolmo/react-window-manager 0.4.2 → 0.4.4
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.
- package/dist/index.css +1 -1
- package/dist/index.d.ts +5 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +220 -55
- package/dist/index.js.map +1 -1
- package/dist/window-manager/internal/features/cursor/cursor-state.d.ts.map +1 -1
- package/dist/window-manager/internal/features/docking/docking-area-orchestrator.d.ts +2 -0
- package/dist/window-manager/internal/features/docking/docking-area-orchestrator.d.ts.map +1 -0
- package/dist/window-manager/internal/features/docking/docking-controls.d.ts.map +1 -1
- package/dist/window-manager/internal/features/drag/drag-api.d.ts.map +1 -1
- package/dist/window-manager/internal/features/grid/grid-orchestrator.d.ts +1 -1
- package/dist/window-manager/internal/features/grid/grid-orchestrator.d.ts.map +1 -1
- package/dist/window-manager/internal/features/history/history-api.d.ts +6 -0
- package/dist/window-manager/internal/features/history/history-api.d.ts.map +1 -0
- package/dist/window-manager/internal/features/history/history-keys-listener.d.ts +2 -0
- package/dist/window-manager/internal/features/history/history-keys-listener.d.ts.map +1 -0
- package/dist/window-manager/internal/features/resizing/resizing-api.d.ts +1 -1
- package/dist/window-manager/internal/features/resizing/resizing-api.d.ts.map +1 -1
- package/dist/window-manager/internal/features/window-layout.d.ts +1 -1
- package/dist/window-manager/internal/features/window-layout.d.ts.map +1 -1
- package/dist/window-manager/internal/features/workspace/workspace-api.d.ts +2 -2
- package/dist/window-manager/internal/features/workspace/workspace-api.d.ts.map +1 -1
- package/dist/window-manager/internal/features/workspace/workspace-resize-listener.d.ts.map +1 -1
- package/dist/window-manager/internal/features/workspace/workspace-state.d.ts +1 -1
- package/dist/window-manager/internal/features/workspace/workspace-state.d.ts.map +1 -1
- package/dist/window-manager/internal/runtime/dock-resolver/dock-commands.d.ts +2 -2
- package/dist/window-manager/internal/runtime/dock-resolver/dock-commands.d.ts.map +1 -1
- package/dist/window-manager/internal/runtime/drag-resolver/drag-commands.d.ts +1 -1
- package/dist/window-manager/internal/runtime/drag-resolver/drag-commands.d.ts.map +1 -1
- package/dist/window-manager/internal/runtime/drag-resolver/drag-loop.d.ts +1 -1
- package/dist/window-manager/internal/runtime/drag-resolver/drag-loop.d.ts.map +1 -1
- package/dist/window-manager/internal/runtime/focus-resolver/focus-commands.d.ts +1 -1
- package/dist/window-manager/internal/runtime/focus-resolver/focus-commands.d.ts.map +1 -1
- package/dist/window-manager/internal/runtime/history-resolver/app-history.d.ts +13 -0
- package/dist/window-manager/internal/runtime/history-resolver/app-history.d.ts.map +1 -0
- package/dist/window-manager/internal/runtime/history-resolver/history-commands.d.ts +6 -0
- package/dist/window-manager/internal/runtime/history-resolver/history-commands.d.ts.map +1 -0
- package/dist/window-manager/internal/runtime/resize-resolver/resize-commands.d.ts +2 -2
- package/dist/window-manager/internal/runtime/resize-resolver/resize-commands.d.ts.map +1 -1
- package/dist/window-manager/internal/runtime/resize-resolver/resize-loop-rules.d.ts +1 -1
- package/dist/window-manager/internal/runtime/resize-resolver/resize-loop-rules.d.ts.map +1 -1
- package/dist/window-manager/internal/runtime/resize-resolver/resize-loop.d.ts +1 -1
- package/dist/window-manager/internal/runtime/resize-resolver/resize-loop.d.ts.map +1 -1
- package/dist/window-manager/internal/runtime/rwm-runtime.d.ts +19 -10
- package/dist/window-manager/internal/runtime/rwm-runtime.d.ts.map +1 -1
- package/dist/window-manager/internal/runtime/workspace-resolver/workspace-commands.d.ts +2 -2
- package/dist/window-manager/internal/runtime/workspace-resolver/workspace-commands.d.ts.map +1 -1
- package/dist/window-manager/model/window-types.d.ts +2 -2
- package/dist/window-manager/model/window-types.d.ts.map +1 -1
- package/dist/window-manager/registration/window-registry.d.ts +1 -1
- package/dist/window-manager/registration/window-registry.d.ts.map +1 -1
- package/dist/window-manager/registration/window-store-factory.d.ts +1 -1
- package/dist/window-manager/registration/window-store-factory.d.ts.map +1 -1
- package/dist/window-manager/rwm.d.ts +4 -4
- package/dist/window-manager/workspace-layout.d.ts.map +1 -1
- package/package.json +49 -52
- package/dist/index.css.map +0 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/window-manager/registration/window-registry.ts","../src/window-manager/internal/features/workspace/workspace-state.ts","../src/window-manager/internal/runtime/dock-resolver/dock-commands.ts","../src/window-manager/internal/features/cursor/cursor-state.ts","../src/window-manager/internal/runtime/drag-resolver/drag-loop.ts","../src/window-manager/internal/runtime/drag-resolver/drag-commands.ts","../src/window-manager/internal/runtime/focus-resolver/focus-commands.ts","../src/window-manager/internal/runtime/workspace-resolver/workspace-commands.ts","../src/window-manager/internal/runtime/resize-resolver/resize-commands.ts","../src/window-manager/internal/runtime/resize-resolver/resize-loop-rules.ts","../src/window-manager/internal/runtime/resize-resolver/resize-loop.ts","../src/window-manager/internal/runtime/rwm-runtime.ts","../src/window-manager/internal/features/docking/docking-api.ts","../src/window-manager/internal/features/focus/focus-api.ts","../src/window-manager/internal/features/workspace/workspace-api.ts","../src/window-manager/rwm.ts","../src/window-manager/workspace-layout.tsx","../src/window-manager/internal/features/docking/docking-controls.tsx","../src/window-manager/internal/features/resizing/resizing-api.ts","../src/window-manager/internal/features/cursor/cursor-move-listener.tsx","../src/window-manager/internal/features/workspace/workspace-resize-listener.tsx","../src/window-manager/internal/features/drag/drag-api.ts","../src/window-manager/registration/window-store-factory.tsx","../src/window-manager/internal/features/window-layout.tsx","../src/window-manager/internal/assets/svg-win-icons.tsx","../src/window-manager/internal/features/grid/grid-orchestrator.ts","../src/window-manager/internal/features/resizing/resizing-controls.tsx","../src/window-manager/internal/features/drag/drag-handle.tsx","../src/window-manager/internal/features/window-button.tsx"],"sourcesContent":["import { WindowRegistry } from '../model/window-types'\r\n\r\nexport const windowRegistry: WindowRegistry = {}\r\n\r\n/* FIND ME:\r\n * Singletons like the registry and workspace should be scoped into instance based creation, allowing for a fully contained/scoped use of the library\r\n\r\n BASE IDEA:\r\n\r\n createWorkspace({ \"maybe-config?\" }) {\r\n const dependencies = get()\r\n const runtime = createRuntime(dependencies)\r\n const api = createApi(dependencies)\r\n\r\n return {\r\n workspaceElement(),\r\n createWindow(),\r\n }\r\n }\r\n */\r\n","import { create } from 'zustand'\r\nimport { WorkspaceStore } from '../../../model/workspace-types'\r\n\r\nexport const useWorkspaceState = create<WorkspaceStore>((set, get) => ({\r\n wsElement: null,\r\n setWsElement: (el: HTMLElement | null) => set({ wsElement: el }),\r\n\r\n isGridEnabled: true,\r\n isDockPanelEnabled: true,\r\n responsiveBreak: 'sm',\r\n\r\n isBelowBreakPoint: false,\r\n activeWindowId: 'react-dynamic-window-instance0',\r\n wsRect: {\r\n top: 0,\r\n left: 0,\r\n innerHeight: 0,\r\n innerWidth: 0,\r\n bottom: 0,\r\n right: 0,\r\n centerX: 0,\r\n centerY: 0,\r\n },\r\n}))\r\n","import { WorkspaceRect } from '../../../model/workspace-types'\r\nimport { WindowMutation } from '../rwm-runtime'\r\n\r\nexport type DockCommands =\r\n | 'DOCK_WINDOW_RIGHT'\r\n | 'DOCK_WINDOW_LEFT'\r\n | 'DOCK_WINDOW_TOP'\r\n | 'DOCK_WINDOW_BOTTOM'\r\n | 'DOCK_WINDOW_BOTTOM_RIGHT'\r\n | 'DOCK_WINDOW_TOP_RIGHT'\r\n | 'DOCK_WINDOW_BOTTOM_LEFT'\r\n | 'DOCK_WINDOW_TOP_LEFT'\r\n | 'MAXIMIZE_WINDOW'\r\n | 'DEMAXIMIZE_WINDOW'\r\n\r\ntype DockResolver = Record<\r\n DockCommands,\r\n (targetWinId: string, wsRect: WorkspaceRect) => WindowMutation[]\r\n>\r\nexport const dockCommandResolver: DockResolver = {\r\n DOCK_WINDOW_RIGHT: (targetWinId: string, wsRect: WorkspaceRect) => {\r\n return [\r\n {\r\n winId: targetWinId,\r\n patch: {\r\n winCoord: { pointX: wsRect.centerX, pointY: wsRect.top },\r\n winWidth: wsRect.innerWidth / 2,\r\n winHeight: wsRect.innerHeight,\r\n winVisualState: 'demaximized',\r\n isDragging: false,\r\n },\r\n },\r\n ]\r\n },\r\n DOCK_WINDOW_LEFT: (targetWinId: string, wsRect: WorkspaceRect) => {\r\n return [\r\n {\r\n winId: targetWinId,\r\n patch: {\r\n winCoord: { pointX: wsRect.left, pointY: wsRect.top },\r\n winWidth: wsRect.innerWidth / 2,\r\n winHeight: wsRect.innerHeight,\r\n winVisualState: 'demaximized',\r\n isDragging: false,\r\n },\r\n },\r\n ]\r\n },\r\n DOCK_WINDOW_TOP: (targetWinId: string, wsRect: WorkspaceRect) => {\r\n return [\r\n {\r\n winId: targetWinId,\r\n patch: {\r\n winCoord: { pointX: wsRect.left, pointY: wsRect.top },\r\n winWidth: wsRect.innerWidth,\r\n winHeight: wsRect.innerHeight / 2,\r\n winVisualState: 'demaximized',\r\n isDragging: false,\r\n },\r\n },\r\n ]\r\n },\r\n DOCK_WINDOW_BOTTOM: (targetWinId: string, wsRect: WorkspaceRect) => {\r\n return [\r\n {\r\n winId: targetWinId,\r\n patch: {\r\n winCoord: { pointX: wsRect.left, pointY: wsRect.centerY },\r\n winWidth: wsRect.innerWidth,\r\n winHeight: wsRect.innerHeight / 2,\r\n winVisualState: 'demaximized',\r\n isDragging: false,\r\n },\r\n },\r\n ]\r\n },\r\n DOCK_WINDOW_BOTTOM_RIGHT: (targetWinId: string, wsRect: WorkspaceRect) => {\r\n return [\r\n {\r\n winId: targetWinId,\r\n patch: {\r\n winCoord: {\r\n pointX: wsRect.centerX,\r\n pointY: wsRect.centerY,\r\n },\r\n winWidth: wsRect.innerWidth / 2,\r\n winHeight: wsRect.innerHeight / 2,\r\n winVisualState: 'demaximized',\r\n isDragging: false,\r\n },\r\n },\r\n ]\r\n },\r\n DOCK_WINDOW_TOP_RIGHT: (targetWinId: string, wsRect: WorkspaceRect) => {\r\n return [\r\n {\r\n winId: targetWinId,\r\n patch: {\r\n winCoord: { pointX: wsRect.centerX, pointY: wsRect.top },\r\n winWidth: wsRect.innerWidth / 2,\r\n winHeight: wsRect.innerHeight / 2,\r\n winVisualState: 'demaximized',\r\n isDragging: false,\r\n },\r\n },\r\n ]\r\n },\r\n DOCK_WINDOW_BOTTOM_LEFT: (targetWinId: string, wsRect: WorkspaceRect) => {\r\n return [\r\n {\r\n winId: targetWinId,\r\n patch: {\r\n winCoord: { pointX: wsRect.left, pointY: wsRect.centerY },\r\n winWidth: wsRect.innerWidth / 2,\r\n winHeight: wsRect.innerHeight / 2,\r\n winVisualState: 'demaximized',\r\n isDragging: false,\r\n },\r\n },\r\n ]\r\n },\r\n DOCK_WINDOW_TOP_LEFT: (targetWinId: string, wsRect: WorkspaceRect) => {\r\n return [\r\n {\r\n winId: targetWinId,\r\n patch: {\r\n winCoord: { pointX: wsRect.left, pointY: wsRect.top },\r\n winWidth: wsRect.innerWidth / 2,\r\n winHeight: wsRect.innerHeight / 2,\r\n winVisualState: 'demaximized',\r\n isDragging: false,\r\n },\r\n },\r\n ]\r\n },\r\n MAXIMIZE_WINDOW: (targetWinId: string, wsRect: WorkspaceRect) => {\r\n return [\r\n {\r\n winId: targetWinId,\r\n patch: {\r\n winCoord: { pointX: wsRect.left, pointY: wsRect.top },\r\n winHeight: wsRect.innerHeight,\r\n winWidth: wsRect.innerWidth,\r\n winVisualState: 'maximized',\r\n isDragging: false,\r\n },\r\n },\r\n ]\r\n },\r\n DEMAXIMIZE_WINDOW: (targetWinId: string, wsRect: WorkspaceRect) => {\r\n return [\r\n {\r\n winId: targetWinId,\r\n patch: {\r\n winCoord: { pointX: wsRect.left + 16, pointY: wsRect.top + 16 },\r\n winWidth: wsRect.innerWidth * 0.95,\r\n winHeight: wsRect.innerHeight * 0.75,\r\n winVisualState: 'demaximized',\r\n isDragging: false,\r\n },\r\n },\r\n ]\r\n },\r\n}\r\n","import { create } from 'zustand'\r\n\r\ntype CursorState = {\r\n x: number\r\n y: number\r\n}\r\n\r\nexport const cursorPosition = {\r\n x: 10,\r\n y: 10,\r\n}\r\n\r\nexport const setCursorPosition = ({ x, y }: CursorState) => {\r\n cursorPosition.x = x\r\n cursorPosition.y = y\r\n}\r\n","import { windowRegistry } from '../../../registration/window-registry'\r\nimport { cursorPosition } from '../../features/cursor/cursor-state'\r\nimport { useWorkspaceState } from '../../features/workspace/workspace-state'\r\nimport { WindowMutation } from '../rwm-runtime'\r\n\r\nexport type RafDragCommands = 'LOOP_DRAG'\r\n\r\ntype RafDragResolver = Record<\r\n RafDragCommands,\r\n (targetWinId: string, commitCb: (patchStack: WindowMutation[]) => void) => void\r\n>\r\nexport const rafDragLoopResolver: RafDragResolver = {\r\n LOOP_DRAG: (targetWinId: string, commit: (patchStack: WindowMutation[]) => void) => {\r\n const { x, y } = cursorPosition\r\n const { winCoord, isDragging, windowId } = windowRegistry[targetWinId].getState()\r\n\r\n if (!isDragging)\r\n throw new Error(`LOOP_DRAG called with isDragging false for winId: ${windowId}`)\r\n\r\n const pointerOffset = {\r\n left: x - winCoord.pointX,\r\n top: y - winCoord.pointY,\r\n }\r\n\r\n requestAnimationFrame(() => dragLoop(targetWinId, pointerOffset, commit))\r\n },\r\n}\r\n\r\ntype PointerOffset = { left: number; top: number }\r\nconst dragLoop = (\r\n targetWinId: string,\r\n pointerOffset: PointerOffset,\r\n commit: (patchStack: WindowMutation[]) => void\r\n) => {\r\n const { winCoord, isDragging } = windowRegistry[targetWinId].getState()\r\n const { wsRect } = useWorkspaceState.getState()\r\n const { x, y } = cursorPosition\r\n if (!isDragging) return\r\n\r\n let adjustedX = Math.round(x - pointerOffset.left)\r\n if (x > wsRect.right || x < wsRect.left) adjustedX = winCoord.pointX\r\n let adjustedY = Math.round(y - pointerOffset.top)\r\n if (y > wsRect.bottom || y < wsRect.top) adjustedY = winCoord.pointY\r\n\r\n if (adjustedX !== winCoord.pointX || adjustedY !== winCoord.pointY) {\r\n commit([\r\n {\r\n winId: targetWinId,\r\n patch: { winCoord: { pointX: adjustedX, pointY: adjustedY } },\r\n },\r\n ])\r\n }\r\n\r\n requestAnimationFrame(() => dragLoop(targetWinId, pointerOffset, commit))\r\n}\r\n","import { WindowStore } from '../../../model/window-types'\r\nimport { windowRegistry } from '../../../registration/window-registry'\r\nimport { useWorkspaceState } from '../../features/workspace/workspace-state'\r\nimport { WindowMutation } from '../rwm-runtime'\r\n\r\nexport type DragCommands = 'ENABLE_DRAG' | 'DISABLE_DRAG'\r\n\r\ntype DragResolver = Record<DragCommands, (targetWinId: string) => WindowMutation[]>\r\nexport const dragCommandResolver: DragResolver = {\r\n ENABLE_DRAG: (targetWinId: string) => {\r\n const { wsRect } = useWorkspaceState.getState()\r\n const { winVisualState } = windowRegistry[targetWinId].getState()\r\n\r\n const patch: Partial<WindowStore> =\r\n winVisualState === 'maximized'\r\n ? {\r\n winCoord: { pointX: wsRect.left + 16, pointY: wsRect.top + 4 },\r\n winWidth: wsRect.innerWidth * 0.95,\r\n winHeight: wsRect.innerHeight * 0.75,\r\n winVisualState: 'demaximized',\r\n isDragging: true,\r\n }\r\n : { isDragging: true }\r\n\r\n return [\r\n {\r\n winId: targetWinId,\r\n patch: patch,\r\n },\r\n ]\r\n },\r\n DISABLE_DRAG: (targetWinId: string) => {\r\n return [\r\n {\r\n winId: targetWinId,\r\n patch: {\r\n isDragging: false,\r\n },\r\n },\r\n ]\r\n },\r\n}\r\n","import { windowRegistry } from '../../../registration/window-registry'\r\nimport { BatchMutation, WindowMutation, WorkspaceMutation } from '../rwm-runtime'\r\n\r\nexport type FocusCommands = 'FOCUS_WINDOW' | 'CLOSE_WINDOW_AND_REFOCUS'\r\n\r\ntype FocusResolver = Record<FocusCommands, (targetWinId: string) => BatchMutation>\r\nexport const focusCommandResolver: FocusResolver = {\r\n FOCUS_WINDOW: (targetWinId: string) => {\r\n const targetWin = windowRegistry[targetWinId].getState()\r\n if (targetWin.isActive && !targetWin.isWindowClosed) return { win: [], ws: {} }\r\n\r\n const newStackOrderUpdate: WindowMutation[] = []\r\n const workspaceUpdate: WorkspaceMutation = { activeWindowId: targetWinId }\r\n\r\n for (const key of Object.keys(windowRegistry)) {\r\n const otherWin = windowRegistry[key].getState()\r\n if (otherWin.windowId === targetWin.windowId) continue\r\n\r\n const adjustedIndex =\r\n otherWin.zIndex >= targetWin.zIndex ? otherWin.zIndex - 1 : otherWin.zIndex\r\n\r\n newStackOrderUpdate.push({\r\n winId: otherWin.windowId,\r\n patch: {\r\n isActive: false,\r\n zIndex: adjustedIndex,\r\n },\r\n })\r\n }\r\n\r\n newStackOrderUpdate.push({\r\n winId: targetWin.windowId,\r\n patch: {\r\n isWindowClosed: false,\r\n isActive: true,\r\n zIndex: newStackOrderUpdate.length + 1,\r\n },\r\n })\r\n\r\n return {\r\n win: newStackOrderUpdate,\r\n ws: workspaceUpdate,\r\n }\r\n },\r\n CLOSE_WINDOW_AND_REFOCUS: (targetWinId: string) => {\r\n const isTargetWinClosed = windowRegistry[targetWinId].getState().isWindowClosed\r\n if (isTargetWinClosed) return { win: [], ws: {} }\r\n\r\n let prevIndex = 0\r\n let highestIndexWinId: string | undefined = undefined\r\n\r\n for (const key of Object.keys(windowRegistry)) {\r\n const { zIndex, windowId, isWindowClosed } = windowRegistry[key].getState()\r\n if (windowId === targetWinId) continue\r\n if (isWindowClosed) continue\r\n\r\n if (zIndex > prevIndex) {\r\n prevIndex = zIndex\r\n highestIndexWinId = windowId\r\n }\r\n }\r\n\r\n return !highestIndexWinId\r\n ? {\r\n ws: {},\r\n win: [\r\n {\r\n winId: targetWinId,\r\n patch: { isActive: false, isWindowClosed: true },\r\n },\r\n ],\r\n }\r\n : {\r\n ws: { activeWindowId: highestIndexWinId },\r\n win: [\r\n {\r\n winId: highestIndexWinId,\r\n patch: { isActive: true },\r\n },\r\n {\r\n winId: targetWinId,\r\n patch: { isActive: false, isWindowClosed: true },\r\n },\r\n ],\r\n }\r\n },\r\n}\r\n","import { ResponsiveSizes } from '../../../model/workspace-types'\r\nimport { windowRegistry } from '../../../registration/window-registry'\r\nimport { useWorkspaceState } from '../../features/workspace/workspace-state'\r\nimport { BatchMutation, WindowMutation, WorkspaceMutation } from '../rwm-runtime'\r\n\r\nexport type WorkspaceCommands =\r\n | 'UPDATE_WORKSPACE_SIZE'\r\n | 'SET_RESPONSIVE_BREAK'\r\n | 'SET_WORKSPACE_FEATURES'\r\n\r\nexport type WorkspaceCtx = {\r\n responsiveBreak?: ResponsiveSizes\r\n isDockPanelEnabled?: boolean\r\n isGridEnabled?: boolean\r\n}\r\n\r\ntype WorkspaceResolver = Record<\r\n WorkspaceCommands,\r\n (targetWinId?: string, ctx?: WorkspaceCtx) => BatchMutation\r\n>\r\nexport const workspaceCommandResolver: WorkspaceResolver = {\r\n UPDATE_WORKSPACE_SIZE: () => {\r\n const prevRect = useWorkspaceState.getState().wsRect\r\n const rect = useWorkspaceState.getState().wsElement?.getBoundingClientRect()\r\n const breakPoint = useWorkspaceState.getState().responsiveBreak\r\n\r\n const top = rect?.top ?? 0\r\n const left = rect?.left ?? 0\r\n const innerHeight = rect?.height ?? 0\r\n const innerWidth = rect?.width ?? 0\r\n const bottom = top + innerHeight\r\n const right = left + innerWidth\r\n const centerX = left + innerWidth / 2\r\n const centerY = top + innerHeight / 2\r\n\r\n const workspaceUpdate: WorkspaceMutation = {\r\n isBelowBreakPoint: innerWidth < responsiveBreakInPx(breakPoint),\r\n wsRect: {\r\n top: top,\r\n left: left,\r\n innerHeight: innerHeight,\r\n innerWidth: innerWidth,\r\n bottom: bottom,\r\n right: right,\r\n centerX: centerX,\r\n centerY: centerY,\r\n },\r\n }\r\n\r\n const windowBatchUpdate: WindowMutation[] = []\r\n const { innerHeight: prevWsHeight, innerWidth: prevWsWidth } = prevRect\r\n const currWsHeight = innerHeight\r\n const currWsWidth = innerWidth\r\n\r\n const widthChangeRatio = currWsWidth / prevWsWidth\r\n const heightChangeRatio = currWsHeight / prevWsHeight\r\n\r\n for (const key of Object.keys(windowRegistry)) {\r\n const win = windowRegistry[key].getState()\r\n\r\n windowBatchUpdate.push({\r\n winId: key,\r\n patch: {\r\n winWidth: win.winWidth * widthChangeRatio,\r\n winHeight: win.winHeight * heightChangeRatio,\r\n winCoord: {\r\n pointX: win.winCoord.pointX * widthChangeRatio,\r\n pointY: win.winCoord.pointY * heightChangeRatio,\r\n },\r\n },\r\n })\r\n }\r\n\r\n return {\r\n win: windowBatchUpdate,\r\n ws: workspaceUpdate,\r\n }\r\n },\r\n\r\n SET_WORKSPACE_FEATURES: (_?: string, ctx?: WorkspaceCtx) => {\r\n if (ctx?.isGridEnabled === undefined || ctx?.isDockPanelEnabled === undefined)\r\n throw new Error(`SET_WORKSPACE_FEATURES called without a ctx value`)\r\n\r\n return {\r\n win: [],\r\n ws: {\r\n isGridEnabled: ctx.isGridEnabled,\r\n isDockPanelEnabled: ctx.isDockPanelEnabled,\r\n },\r\n }\r\n },\r\n\r\n SET_RESPONSIVE_BREAK: (_?: string, ctx?: WorkspaceCtx) => {\r\n if (ctx?.responsiveBreak === undefined || ctx?.responsiveBreak === null)\r\n throw new Error(`SET_RESPONSIVE_BREAK called without a ctx value`)\r\n\r\n return {\r\n win: [],\r\n ws: {\r\n responsiveBreak: ctx.responsiveBreak,\r\n },\r\n }\r\n },\r\n}\r\n\r\nconst responsiveBreakInPx = (breakPoint: ResponsiveSizes): number => {\r\n switch (breakPoint) {\r\n case 'sm':\r\n return 640\r\n case 'md':\r\n return 768\r\n case 'lg':\r\n return 1024\r\n case 'xl':\r\n return 1280\r\n case 'never':\r\n return 0\r\n case 'always':\r\n return Infinity\r\n default:\r\n return breakPoint\r\n }\r\n}\r\n","import { ResizeDirection } from '../../../model/window-types'\r\nimport { windowRegistry } from '../../../registration/window-registry'\r\nimport { WindowMutation } from '../rwm-runtime'\r\n\r\nexport type ResizeCommands = 'ENABLE_RESIZE' | 'DISABLE_RESIZE'\r\n\r\ntype ResizeResolver = Record<\r\n ResizeCommands,\r\n (targetWinId: string, ctx: ResizeDirection) => WindowMutation[]\r\n>\r\nexport const resizeCommandResolver: ResizeResolver = {\r\n ENABLE_RESIZE: (targetWinId: string, direction: ResizeDirection) => {\r\n const currentResizeAction = windowRegistry[targetWinId].getState().resizeAction\r\n if (currentResizeAction)\r\n throw new Error(`ENABLE_RESIZE called on a window that is already resizing`)\r\n\r\n return [\r\n {\r\n winId: targetWinId,\r\n patch: {\r\n resizeAction: direction,\r\n winVisualState: 'demaximized',\r\n },\r\n },\r\n ]\r\n },\r\n DISABLE_RESIZE: (_: string) => {\r\n const patch: WindowMutation[] = []\r\n for (const key of Object.keys(windowRegistry))\r\n patch.push({\r\n winId: key,\r\n patch: {\r\n resizeAction: false,\r\n },\r\n })\r\n\r\n return patch\r\n },\r\n}\r\n","import { ResizeDirection } from '../../../model/window-types'\r\nimport { windowRegistry } from '../../../registration/window-registry'\r\n\r\nexport const resolveNeighbourResizeLimit = (activeWinId: string, direction: ResizeDirection) => {\r\n switch (direction) {\r\n case 'e':\r\n return neighbourResizeLimit.e(activeWinId)\r\n case 'w':\r\n return neighbourResizeLimit.w(activeWinId)\r\n case 'n':\r\n return neighbourResizeLimit.n(activeWinId)\r\n case 's':\r\n return neighbourResizeLimit.s(activeWinId)\r\n\r\n default:\r\n return undefined\r\n }\r\n}\r\n\r\nconst neighbourResizeLimit = {\r\n e: (activeWinId: string) => {\r\n let leftMostXAtMinWidth = undefined\r\n\r\n for (const key of Object.keys(windowRegistry)) {\r\n const neighbourWin = windowRegistry[key].getState()\r\n if (key === activeWinId) continue\r\n if (neighbourWin.resizeAction !== 'w') continue\r\n if (neighbourWin.isWindowClosed) continue\r\n\r\n const winBox = neighbourWin.winElement?.getBoundingClientRect()\r\n if (!winBox) continue\r\n\r\n const xAtMinWidth = winBox.right - neighbourWin.WIN_MIN_WIDTH\r\n\r\n if (leftMostXAtMinWidth === undefined) leftMostXAtMinWidth = xAtMinWidth\r\n if (leftMostXAtMinWidth > xAtMinWidth) leftMostXAtMinWidth = xAtMinWidth\r\n }\r\n\r\n return leftMostXAtMinWidth\r\n },\r\n\r\n w: (activeWinId: string) => {\r\n let rightMostXAtMinWidth = undefined\r\n\r\n for (const key of Object.keys(windowRegistry)) {\r\n const neighbourWin = windowRegistry[key].getState()\r\n if (key === activeWinId) continue\r\n if (neighbourWin.resizeAction !== 'e') continue\r\n if (neighbourWin.isWindowClosed) continue\r\n\r\n const winBox = neighbourWin.winElement?.getBoundingClientRect()\r\n if (!winBox) continue\r\n\r\n const xAtMinWidth = winBox.left + neighbourWin.WIN_MIN_WIDTH\r\n\r\n if (rightMostXAtMinWidth === undefined) rightMostXAtMinWidth = xAtMinWidth\r\n if (rightMostXAtMinWidth < xAtMinWidth) rightMostXAtMinWidth = xAtMinWidth\r\n }\r\n\r\n return rightMostXAtMinWidth\r\n },\r\n\r\n n: (currentWinId: string) => {\r\n let bottomMostYAtMinWidth = undefined\r\n\r\n for (const key of Object.keys(windowRegistry)) {\r\n const remoteWin = windowRegistry[key].getState()\r\n if (key === currentWinId) continue\r\n if (remoteWin.resizeAction !== 's') continue\r\n if (remoteWin.isWindowClosed) continue\r\n\r\n const winBox = remoteWin.winElement?.getBoundingClientRect()\r\n if (!winBox) continue\r\n\r\n const yAtMinWidth = winBox.top + remoteWin.WIN_MIN_HEIGHT\r\n\r\n if (bottomMostYAtMinWidth === undefined) bottomMostYAtMinWidth = yAtMinWidth\r\n if (bottomMostYAtMinWidth < yAtMinWidth) bottomMostYAtMinWidth = yAtMinWidth\r\n }\r\n\r\n return bottomMostYAtMinWidth\r\n },\r\n\r\n s: (currentWinId: string) => {\r\n let topMostYAtMinWidth = undefined\r\n\r\n for (const key of Object.keys(windowRegistry)) {\r\n const remoteWin = windowRegistry[key].getState()\r\n if (key === currentWinId) continue\r\n if (remoteWin.resizeAction !== 'n') continue\r\n if (remoteWin.isWindowClosed) continue\r\n\r\n const winBox = remoteWin.winElement?.getBoundingClientRect()\r\n if (!winBox) continue\r\n\r\n const yAtMinWidth = winBox.bottom - remoteWin.WIN_MIN_HEIGHT\r\n\r\n if (topMostYAtMinWidth === undefined) topMostYAtMinWidth = yAtMinWidth\r\n if (topMostYAtMinWidth > yAtMinWidth) topMostYAtMinWidth = yAtMinWidth\r\n }\r\n\r\n return topMostYAtMinWidth\r\n },\r\n}\r\n","import { WindowStore } from '../../../model/window-types'\r\nimport { WorkspaceRect } from '../../../model/workspace-types'\r\nimport { windowRegistry } from '../../../registration/window-registry'\r\nimport { cursorPosition } from '../../features/cursor/cursor-state'\r\nimport { useWorkspaceState } from '../../features/workspace/workspace-state'\r\nimport { WindowMutation } from '../rwm-runtime'\r\nimport { resolveNeighbourResizeLimit } from './resize-loop-rules'\r\n\r\nexport type RafResizeCommands = 'LOOP_RESIZE'\r\ntype RafResizeResolver = Record<\r\n RafResizeCommands,\r\n (targetWinId: string, commitCb: (patchStack: WindowMutation[]) => void) => void\r\n>\r\nexport const rafResizeLoopResolver: RafResizeResolver = {\r\n LOOP_RESIZE: (targetWinId: string, commitCb: (patchStack: WindowMutation[]) => void) => {\r\n const dep = getRafResizeDependencies(targetWinId)\r\n\r\n const resizeDirection = dep.win.resizeAction\r\n if (!resizeDirection)\r\n throw new Error(`LOOP_RESIZE called with resizeAction as false for winId: ${targetWinId}`)\r\n\r\n const winElementBox = dep.winBox\r\n if (!winElementBox)\r\n throw new Error(`LOOP_RESIZE called with null window element for winId: ${targetWinId}`)\r\n\r\n requestAnimationFrame(() => {\r\n const neighbourLimit = resolveNeighbourResizeLimit(dep.win.windowId, resizeDirection)\r\n resizer[resizeDirection](getRafResizeDependencies(targetWinId), commitCb, neighbourLimit)\r\n })\r\n },\r\n}\r\n\r\nconst resizer = {\r\n e: (\r\n resizeDep: ResizeDep,\r\n commit: (patchStack: WindowMutation[]) => void,\r\n neighbourLimit?: number\r\n ) => {\r\n const { wsRect, win, winBox, x } = resizeDep\r\n if (!win.resizeAction) return\r\n if (!winBox) return\r\n\r\n const cursorOutOfBounds = x > wsRect.right || x < wsRect.left\r\n const sizeDiff = x - winBox.right\r\n\r\n const isResizeActive = !cursorOutOfBounds && sizeDiff !== 0\r\n const minWinWidth = x - winBox.left < win.WIN_MIN_WIDTH\r\n\r\n const leftMostXAtMinWidth = neighbourLimit\r\n const isNeighbourLimit = leftMostXAtMinWidth && x > leftMostXAtMinWidth\r\n if (isNeighbourLimit && isResizeActive) {\r\n commit([\r\n {\r\n winId: win.windowId,\r\n patch: { winWidth: leftMostXAtMinWidth - win.winCoord.pointX },\r\n },\r\n ])\r\n } else if (!minWinWidth && isResizeActive) {\r\n commit([\r\n {\r\n winId: win.windowId,\r\n patch: { winWidth: win.winWidth + sizeDiff },\r\n },\r\n ])\r\n } else if (minWinWidth && isResizeActive) {\r\n commit([\r\n {\r\n winId: win.windowId,\r\n patch: { winWidth: win.WIN_MIN_WIDTH },\r\n },\r\n ])\r\n }\r\n\r\n requestAnimationFrame(() =>\r\n resizer.e(getRafResizeDependencies(win.windowId), commit, neighbourLimit)\r\n )\r\n },\r\n\r\n w: (\r\n resizeDep: ResizeDep,\r\n commit: (patchStack: WindowMutation[]) => void,\r\n neighbourLimit?: number\r\n ) => {\r\n const { wsRect, win, winBox, x } = resizeDep\r\n if (!win.resizeAction) return\r\n if (!winBox) return\r\n\r\n const cursorOutOfBounds = x > wsRect.right || x < wsRect.left\r\n const sizeDiff = winBox.left - x\r\n\r\n const isResizeActive = !cursorOutOfBounds && sizeDiff !== 0\r\n const minWinWidth = winBox.right - x <= win.WIN_MIN_WIDTH\r\n\r\n const rightMostXAtMinWidth = neighbourLimit\r\n const isNeighbourLimit = rightMostXAtMinWidth && x < rightMostXAtMinWidth\r\n if (isNeighbourLimit) {\r\n commit([\r\n {\r\n winId: win.windowId,\r\n patch: {\r\n winWidth: win.winCoord.pointX - rightMostXAtMinWidth + win.winWidth,\r\n winCoord: {\r\n pointX: rightMostXAtMinWidth,\r\n pointY: win.winCoord.pointY,\r\n },\r\n },\r\n },\r\n ])\r\n } else if (!minWinWidth && isResizeActive) {\r\n commit([\r\n {\r\n winId: win.windowId,\r\n patch: {\r\n winWidth: win.winWidth + sizeDiff,\r\n winCoord: { pointX: x, pointY: win.winCoord.pointY },\r\n },\r\n },\r\n ])\r\n } else if (minWinWidth && isResizeActive) {\r\n commit([\r\n {\r\n winId: win.windowId,\r\n patch: {\r\n winCoord: {\r\n pointX: win.winCoord.pointX + win.winWidth - win.WIN_MIN_WIDTH,\r\n pointY: win.winCoord.pointY,\r\n },\r\n winWidth: win.WIN_MIN_WIDTH,\r\n },\r\n },\r\n ])\r\n }\r\n\r\n requestAnimationFrame(() =>\r\n resizer.w(getRafResizeDependencies(win.windowId), commit, neighbourLimit)\r\n )\r\n },\r\n\r\n n: (\r\n resizeDep: ResizeDep,\r\n commit: (patchStack: WindowMutation[]) => void,\r\n neighbourLimit?: number\r\n ) => {\r\n const { wsRect, win, winBox, y } = resizeDep\r\n if (!win.resizeAction) return\r\n if (!winBox) return\r\n\r\n const cursorOutOfBounds = y > wsRect.bottom || y < wsRect.top\r\n const sizeDiff = winBox.top - y\r\n\r\n const isResizeActive = !cursorOutOfBounds && sizeDiff !== 0\r\n const minWinHeight = winBox.bottom - y <= win.WIN_MIN_HEIGHT\r\n\r\n const bottomMostYAtMinWidth = neighbourLimit\r\n const isNeighbourLimit = bottomMostYAtMinWidth && y < bottomMostYAtMinWidth\r\n if (isNeighbourLimit && isResizeActive) {\r\n commit([\r\n {\r\n winId: win.windowId,\r\n patch: {\r\n winHeight: win.winCoord.pointY - bottomMostYAtMinWidth + win.winHeight,\r\n winCoord: {\r\n pointX: win.winCoord.pointX,\r\n pointY: bottomMostYAtMinWidth,\r\n },\r\n },\r\n },\r\n ])\r\n } else if (!minWinHeight && isResizeActive) {\r\n commit([\r\n {\r\n winId: win.windowId,\r\n patch: {\r\n winHeight: win.winHeight + sizeDiff,\r\n winCoord: { pointX: win.winCoord.pointX, pointY: y },\r\n },\r\n },\r\n ])\r\n } else if (minWinHeight && isResizeActive) {\r\n commit([\r\n {\r\n winId: win.windowId,\r\n patch: {\r\n winHeight: win.WIN_MIN_HEIGHT,\r\n winCoord: {\r\n pointX: win.winCoord.pointX,\r\n pointY: win.winCoord.pointY + win.winHeight - win.WIN_MIN_HEIGHT,\r\n },\r\n },\r\n },\r\n ])\r\n }\r\n\r\n requestAnimationFrame(() =>\r\n resizer.n(getRafResizeDependencies(win.windowId), commit, neighbourLimit)\r\n )\r\n },\r\n\r\n s: (\r\n resizeDep: ResizeDep,\r\n commit: (patchStack: WindowMutation[]) => void,\r\n neighbourLimit?: number\r\n ) => {\r\n const { wsRect, win, winBox, y } = resizeDep\r\n if (!win.resizeAction) return\r\n if (!winBox) return\r\n\r\n const cursorOutOfBounds = y > wsRect.bottom || y < wsRect.top\r\n const sizeDiff = y - winBox.bottom\r\n\r\n const isResizeActive = !cursorOutOfBounds && sizeDiff !== 0\r\n const minWinHeight = y - winBox.top < win.WIN_MIN_HEIGHT\r\n\r\n const topMostYAtMinWidth = neighbourLimit\r\n const isNeighbourLimit = topMostYAtMinWidth && y > topMostYAtMinWidth\r\n if (isNeighbourLimit && isResizeActive) {\r\n commit([\r\n {\r\n winId: win.windowId,\r\n patch: {\r\n winHeight: topMostYAtMinWidth - win.winCoord.pointY,\r\n },\r\n },\r\n ])\r\n } else if (!minWinHeight && isResizeActive) {\r\n commit([\r\n {\r\n winId: win.windowId,\r\n patch: {\r\n winHeight: win.winHeight + sizeDiff,\r\n },\r\n },\r\n ])\r\n } else if (minWinHeight && isResizeActive) {\r\n commit([\r\n {\r\n winId: win.windowId,\r\n patch: { winHeight: win.WIN_MIN_HEIGHT },\r\n },\r\n ])\r\n }\r\n\r\n requestAnimationFrame(() =>\r\n resizer.s(getRafResizeDependencies(win.windowId), commit, neighbourLimit)\r\n )\r\n },\r\n\r\n nw: (resizeDep: ResizeDep, commit: (patchStack: WindowMutation[]) => void) => {\r\n const { wsRect, win, winBox, x, y } = resizeDep\r\n if (!win.resizeAction) return\r\n if (!winBox) return\r\n\r\n const cursorOutOfBoundsY = y > wsRect.bottom || y < wsRect.top\r\n const cursorOutOfBoundsX = x > wsRect.right || x < wsRect.left\r\n const isCursorOutOfBounds = cursorOutOfBoundsY || cursorOutOfBoundsX\r\n if (isCursorOutOfBounds) {\r\n return\r\n }\r\n\r\n const minWinHeight = winBox.bottom - y <= win.WIN_MIN_HEIGHT\r\n const minWinWidth = winBox.right - x <= win.WIN_MIN_WIDTH\r\n\r\n const sizeDiffY = winBox.top - y\r\n const sizeDiffX = winBox.left - x\r\n\r\n if (sizeDiffY !== 0 || sizeDiffX !== 0) {\r\n commit([\r\n {\r\n winId: win.windowId,\r\n patch: {\r\n winWidth: minWinWidth ? win.WIN_MIN_WIDTH : win.winWidth + sizeDiffX,\r\n winHeight: minWinHeight ? win.WIN_MIN_HEIGHT : win.winHeight + sizeDiffY,\r\n winCoord: {\r\n pointX: minWinWidth ? win.winCoord.pointX + win.winWidth - win.WIN_MIN_WIDTH : x,\r\n pointY: minWinHeight ? win.winCoord.pointY + win.winHeight - win.WIN_MIN_HEIGHT : y,\r\n },\r\n },\r\n },\r\n ])\r\n }\r\n\r\n requestAnimationFrame(() => resizer.nw(getRafResizeDependencies(win.windowId), commit))\r\n },\r\n\r\n se: (resizeDep: ResizeDep, commit: (patchStack: WindowMutation[]) => void) => {\r\n resizer.e(resizeDep, commit)\r\n resizer.s(resizeDep, commit)\r\n },\r\n\r\n sw: (resizeDep: ResizeDep, commit: (patchStack: WindowMutation[]) => void) => {\r\n resizer.w(resizeDep, commit)\r\n resizer.s(resizeDep, commit)\r\n },\r\n\r\n ne: (resizeDep: ResizeDep, commit: (patchStack: WindowMutation[]) => void) => {\r\n resizer.e(resizeDep, commit)\r\n resizer.n(resizeDep, commit)\r\n },\r\n}\r\n\r\ntype ResizeDep = {\r\n wsRect: WorkspaceRect\r\n win: WindowStore\r\n winBox: DOMRect | undefined\r\n x: number\r\n y: number\r\n}\r\n\r\nconst getRafResizeDependencies = (winId: string): ResizeDep => {\r\n const win = windowRegistry[winId].getState()\r\n const winBox = win.winElement?.getBoundingClientRect()\r\n const wsRect = useWorkspaceState.getState().wsRect\r\n const { x, y } = cursorPosition\r\n return { wsRect, win, winBox, x, y }\r\n}\r\n","import { ResizeDirection, WindowStore } from '../../model/window-types'\r\nimport { windowRegistry } from '../../registration/window-registry'\r\nimport { useWorkspaceState } from '../features/workspace/workspace-state'\r\nimport { dockCommandResolver, DockCommands } from './dock-resolver/dock-commands'\r\nimport { rafDragLoopResolver, RafDragCommands } from './drag-resolver/drag-loop'\r\nimport { dragCommandResolver, DragCommands } from './drag-resolver/drag-commands'\r\nimport { focusCommandResolver, FocusCommands } from './focus-resolver/focus-commands'\r\nimport {\r\n workspaceCommandResolver,\r\n WorkspaceCommands,\r\n WorkspaceCtx,\r\n} from './workspace-resolver/workspace-commands'\r\nimport { resizeCommandResolver, ResizeCommands } from './resize-resolver/resize-commands'\r\nimport { RafResizeCommands, rafResizeLoopResolver } from './resize-resolver/resize-loop'\r\nimport { WorkspaceStore } from '../../model/workspace-types'\r\n\r\n/**\r\n * FIND ME:\r\n * \r\n * Subsystem structure needs formalization\r\n => getDependencies\r\n => policy\r\n => stageChanges\r\n => commitChanges\r\n */\r\n\r\ntype rwmMessage =\r\n | { targetWinId: string; subsystem: 'DOCK'; cmd: DockCommands; ctx?: undefined }\r\n | { targetWinId: string; subsystem: 'DRAG'; cmd: DragCommands; ctx?: undefined }\r\n | { targetWinId: string; subsystem: 'FOCUS'; cmd: FocusCommands; ctx?: undefined }\r\n | { targetWinId: string; subsystem: 'RESIZE'; cmd: ResizeCommands; ctx: ResizeDirection }\r\n | { targetWinId?: string; subsystem: 'WORKSPACE'; cmd: WorkspaceCommands; ctx?: WorkspaceCtx }\r\n\r\nexport const rwmRuntime = {\r\n dispatch: ({ subsystem, cmd, targetWinId, ctx }: rwmMessage): void => {\r\n switch (subsystem) {\r\n case 'WORKSPACE': {\r\n const stagedChanges = workspaceCommandResolver[cmd](targetWinId, ctx)\r\n commitBatch(stagedChanges)\r\n break\r\n }\r\n case 'DRAG': {\r\n if (useWorkspaceState.getState().isBelowBreakPoint) return\r\n const stagedChanges = dragCommandResolver[cmd](targetWinId)\r\n commitToWindow(stagedChanges)\r\n break\r\n }\r\n case 'DOCK': {\r\n const { wsRect } = useWorkspaceState.getState()\r\n const stagedChanges = dockCommandResolver[cmd](targetWinId, wsRect)\r\n commitToWindow(stagedChanges)\r\n break\r\n }\r\n case 'RESIZE': {\r\n const stagedChanges = resizeCommandResolver[cmd](targetWinId, ctx)\r\n commitToWindow(stagedChanges)\r\n break\r\n }\r\n case 'FOCUS': {\r\n const stagedChanges = focusCommandResolver[cmd](targetWinId)\r\n commitBatch(stagedChanges)\r\n break\r\n }\r\n\r\n default:\r\n throw new Error(\r\n `Unregistered rwmRuntime subsystem called: ${{ subsystem, cmd, targetWinId, ctx }}`\r\n )\r\n }\r\n },\r\n}\r\n\r\ntype rafMessage =\r\n | { targetWinId: string; subsystem: 'RAF_DRAG'; cmd: RafDragCommands }\r\n | { targetWinId: string; subsystem: 'RAF_RESIZE'; cmd: RafResizeCommands }\r\n\r\nexport const rafRuntime = {\r\n dispatch: ({ subsystem, cmd, targetWinId }: rafMessage): void => {\r\n switch (subsystem) {\r\n case 'RAF_DRAG': {\r\n if (useWorkspaceState.getState().isBelowBreakPoint) return\r\n rafDragLoopResolver[cmd](targetWinId, commitToWindow)\r\n break\r\n }\r\n case 'RAF_RESIZE': {\r\n rafResizeLoopResolver[cmd](targetWinId, commitToWindow)\r\n break\r\n }\r\n\r\n default:\r\n throw new Error(\r\n `Unregistered rafRuntime subsystem called: ${{ subsystem, cmd, targetWinId }}`\r\n )\r\n }\r\n },\r\n}\r\n\r\nexport type BatchMutation = { ws: WorkspaceMutation; win: WindowMutation[] }\r\nfunction commitBatch({ win, ws }: BatchMutation) {\r\n commitToWorkspace(ws)\r\n commitToWindow(win)\r\n}\r\n\r\nexport type WindowMutation = { winId: string; patch: Partial<WindowStore> }\r\nfunction commitToWindow(patchStack: WindowMutation[]) {\r\n patchStack.forEach(({ winId, patch }) => {\r\n windowRegistry[winId].setState(patch)\r\n })\r\n}\r\n\r\nexport type WorkspaceMutation = Partial<WorkspaceStore>\r\nfunction commitToWorkspace(patch: WorkspaceMutation) {\r\n if (patch) {\r\n useWorkspaceState.setState(patch)\r\n }\r\n}\r\n\r\n/* FIND ME: Would be cool to add ctrl+z and ctrl+shift+z */\r\n// type AppMoment = { ws: WorkspaceStore; win: WindowRegistry }\r\n// export const appHistory: { ws: WorkspaceStore; win: WindowRegistry } = []\r\n","import { rwmRuntime } from '../../runtime/rwm-runtime'\r\n\r\nexport const dockApi = {\r\n dockWindowRight: (winId: string) =>\r\n rwmRuntime.dispatch({\r\n targetWinId: winId,\r\n subsystem: 'DOCK',\r\n cmd: 'DOCK_WINDOW_RIGHT',\r\n }),\r\n\r\n dockWindowLeft: (winId: string) =>\r\n rwmRuntime.dispatch({\r\n targetWinId: winId,\r\n subsystem: 'DOCK',\r\n cmd: 'DOCK_WINDOW_LEFT',\r\n }),\r\n\r\n dockWindowTop: (winId: string) =>\r\n rwmRuntime.dispatch({\r\n targetWinId: winId,\r\n subsystem: 'DOCK',\r\n cmd: 'DOCK_WINDOW_TOP',\r\n }),\r\n\r\n dockWindowBottom: (winId: string) =>\r\n rwmRuntime.dispatch({\r\n targetWinId: winId,\r\n subsystem: 'DOCK',\r\n cmd: 'DOCK_WINDOW_BOTTOM',\r\n }),\r\n\r\n dockWindowBottomRight: (winId: string) =>\r\n rwmRuntime.dispatch({\r\n targetWinId: winId,\r\n subsystem: 'DOCK',\r\n cmd: 'DOCK_WINDOW_BOTTOM_RIGHT',\r\n }),\r\n\r\n dockWindowTopRight: (winId: string) =>\r\n rwmRuntime.dispatch({\r\n targetWinId: winId,\r\n subsystem: 'DOCK',\r\n cmd: 'DOCK_WINDOW_TOP_RIGHT',\r\n }),\r\n\r\n dockWindowBottomLeft: (winId: string) =>\r\n rwmRuntime.dispatch({\r\n targetWinId: winId,\r\n subsystem: 'DOCK',\r\n cmd: 'DOCK_WINDOW_BOTTOM_LEFT',\r\n }),\r\n\r\n dockWindowTopLeft: (winId: string) =>\r\n rwmRuntime.dispatch({\r\n targetWinId: winId,\r\n subsystem: 'DOCK',\r\n cmd: 'DOCK_WINDOW_TOP_LEFT',\r\n }),\r\n\r\n maximizeWindow: (winId: string) =>\r\n rwmRuntime.dispatch({\r\n targetWinId: winId,\r\n subsystem: 'DOCK',\r\n cmd: 'MAXIMIZE_WINDOW',\r\n }),\r\n\r\n demaximizeWindow: (winId: string) =>\r\n rwmRuntime.dispatch({\r\n targetWinId: winId,\r\n subsystem: 'DOCK',\r\n cmd: 'DEMAXIMIZE_WINDOW',\r\n }),\r\n}\r\n","import { rwmRuntime } from '../../runtime/rwm-runtime'\r\n\r\nexport const focusApi = {\r\n bringWindowToFocus: (targetId: string) => {\r\n rwmRuntime.dispatch({\r\n targetWinId: targetId,\r\n subsystem: 'FOCUS',\r\n cmd: 'FOCUS_WINDOW',\r\n })\r\n },\r\n\r\n closeWindowAndRefocus: (targetId: string) => {\r\n rwmRuntime.dispatch({\r\n targetWinId: targetId,\r\n subsystem: 'FOCUS',\r\n cmd: 'CLOSE_WINDOW_AND_REFOCUS',\r\n })\r\n },\r\n}\r\n","import { ResponsiveSizes } from '../../../model/workspace-types'\r\nimport { rwmRuntime } from '../../runtime/rwm-runtime'\r\nimport { WorkspaceCtx } from '../../runtime/workspace-resolver/workspace-commands'\r\n\r\nexport const wsApi = {\r\n /**\r\n * Always relative to the WorkspaceLayout dimensions. Use `wsApi.setWsResponsiveBreak` to modify the value\r\n * @default 'sm'\r\n * @param sm uses mobile format at 640px\r\n * @param md uses mobile format at 768px\r\n * @param lg uses mobile format at 1024px\r\n * @param xl uses mobile format at 1280px\r\n * @param never never uses mobile format\r\n * @param always always uses mobile format\r\n * @param number set custom break point value in px */\r\n setWsResponsiveBreak: (breakPoint: ResponsiveSizes) => {\r\n rwmRuntime.dispatch({\r\n subsystem: 'WORKSPACE',\r\n cmd: 'SET_RESPONSIVE_BREAK',\r\n ctx: { responsiveBreak: breakPoint },\r\n })\r\n },\r\n\r\n setWsFeatures: ({ isDockPanelEnabled = true, isGridEnabled = true }: WorkspaceCtx) => {\r\n rwmRuntime.dispatch({\r\n subsystem: 'WORKSPACE',\r\n cmd: 'SET_WORKSPACE_FEATURES',\r\n ctx: { isDockPanelEnabled: isDockPanelEnabled, isGridEnabled: isGridEnabled },\r\n })\r\n },\r\n\r\n updateWsSize: () => {\r\n rwmRuntime.dispatch({ subsystem: 'WORKSPACE', cmd: 'UPDATE_WORKSPACE_SIZE' })\r\n },\r\n}\r\n","import { dockApi } from './internal/features/docking/docking-api'\r\nimport { focusApi } from './internal/features/focus/focus-api'\r\nimport { wsApi } from './internal/features/workspace/workspace-api'\r\nimport { useWorkspaceState } from './internal/features/workspace/workspace-state'\r\nimport { windowRegistry } from './registration/window-registry'\r\n\r\nconst { updateWsSize, ...publicWsApi } = wsApi\r\n\r\nconst rwm = {\r\n dockApi: dockApi,\r\n focusApi: focusApi,\r\n workspaceApi: publicWsApi,\r\n\r\n /**\r\n * @about\r\n * Zustand hook, can be used to access the current state of the workspace by either\r\n * calling `const { <someState> } = workspaceState()` inside a component or by calling\r\n * `workspaceState.getState()` anywhere.\r\n *\r\n * @note\r\n * The hook also exposes the `setState()` method, however, this is highly discouraged. Prefer calling\r\n * the exposed apis in rwm for state mutation.\r\n */\r\n workspaceState: useWorkspaceState,\r\n\r\n /**\r\n * @about\r\n * use the syntax `const { <someState> } = windowRegistry[<winId>]()` inside a component to access\r\n * the zustand hook or `windowRegistry[<winId>].getState()` to get the current state of a window anywhere\r\n *\r\n * @note\r\n * Each hook also exposes the `setState()` method, however, this is highly discouraged. Prefer calling\r\n * the exposed apis in rwm for state mutation.\r\n */\r\n windowRegistry: windowRegistry,\r\n}\r\n\r\nexport default rwm\r\n","import { useEffect, useRef } from 'react'\r\nimport { useWorkspaceState } from './internal/features/workspace/workspace-state'\r\nimport DockingControls from './internal/features/docking/docking-controls'\r\nimport { resizeApi } from './internal/features/resizing/resizing-api'\r\nimport { CursorMoveListener } from './internal/features/cursor/cursor-move-listener'\r\nimport WorkspaceResizeListener from './internal/features/workspace/workspace-resize-listener'\r\nimport { dragApi } from './internal/features/drag/drag-api'\r\n\r\ntype Props = {\r\n children: React.ReactNode\r\n className?: string\r\n}\r\n\r\nexport default function WorkspaceLayout({ children, className }: Props) {\r\n const { setWsElement, wsElement, isBelowBreakPoint, activeWindowId } = useWorkspaceState()\r\n const workspaceRef = useRef<HTMLElement | null>(null)\r\n\r\n useEffect(() => {\r\n if (!workspaceRef.current) return\r\n setWsElement(workspaceRef.current)\r\n }, [wsElement])\r\n\r\n const disabledDragAndResize = () => {\r\n dragApi.stopDrag(activeWindowId)\r\n resizeApi.stopResize(activeWindowId)\r\n }\r\n\r\n return (\r\n <section\r\n id=\"rwm-workspace-layout\"\r\n ref={workspaceRef}\r\n onPointerLeave={disabledDragAndResize}\r\n onPointerUp={disabledDragAndResize}\r\n className={className ? className : 'fixed overflow-hidden h-full w-full touch-none -z-50'}\r\n >\r\n <WorkspaceResizeListener />\r\n <CursorMoveListener />\r\n <div className=\" w-full h-full relative overflow-hidden\">\r\n {!isBelowBreakPoint && <DockingControls />}\r\n {children}\r\n </div>\r\n </section>\r\n )\r\n}\r\n","import { useState } from 'react'\r\nimport { windowRegistry } from '../../../registration/window-registry'\r\nimport { useWorkspaceState } from '../workspace/workspace-state'\r\nimport { dockApi } from './docking-api'\r\n\r\nexport default function DockingControls() {\r\n const [isHovering, setIsHovering] = useState(false)\r\n\r\n const { activeWindowId, isDockPanelEnabled, isBelowBreakPoint } = useWorkspaceState()\r\n const { isDragging } = windowRegistry[activeWindowId]()\r\n\r\n const cornerDockControl = (\r\n <div className={`flex xl:p-0 shrink-0 gap-0.5`}>\r\n <div className=\"flex flex-col justify-center gap-0.5\">\r\n <button\r\n className=\"hover:bg-zinc-300 border border-zinc-500 bg-zinc-600 w-10 h-6 rounded-sm\"\r\n onPointerUp={() => dockApi.dockWindowTopLeft(activeWindowId)}\r\n ></button>\r\n <button\r\n className=\"hover:bg-zinc-300 border border-zinc-500 bg-zinc-600 w-10 h-6 rounded-sm\"\r\n onPointerUp={() => dockApi.dockWindowBottomLeft(activeWindowId)}\r\n ></button>\r\n </div>\r\n <div className=\"flex flex-col justify-center gap-0.5\">\r\n <button\r\n className=\"hover:bg-zinc-300 border border-zinc-500 bg-zinc-600 w-10 h-6 rounded-sm\"\r\n onPointerUp={() => dockApi.dockWindowTopRight(activeWindowId)}\r\n ></button>\r\n <button\r\n className=\"hover:bg-zinc-300 border border-zinc-500 bg-zinc-600 w-10 h-6 rounded-sm\"\r\n onPointerUp={() => dockApi.dockWindowBottomRight(activeWindowId)}\r\n ></button>\r\n </div>\r\n </div>\r\n )\r\n\r\n const sideDideControl = (\r\n <div className={`flex shrink-0 items-center gap-0.5`}>\r\n <button\r\n className=\"hover:bg-zinc-300 border border-zinc-500 bg-zinc-600 w-8 h-12 rounded-sm\"\r\n onPointerUp={() => dockApi.dockWindowLeft(activeWindowId)}\r\n ></button>\r\n <button\r\n className=\"hover:bg-zinc-300 border border-zinc-500 bg-zinc-600 w-8 h-12 rounded-sm\"\r\n onPointerUp={() => dockApi.dockWindowRight(activeWindowId)}\r\n ></button>\r\n </div>\r\n )\r\n\r\n const horizontalDockControl = (\r\n <div className={`flex flex-col shrink-0 items-center gap-0.5`}>\r\n <button\r\n className=\"hover:bg-zinc-300 border border-zinc-500 bg-zinc-600 w-14 h-6 rounded-sm\"\r\n onPointerUp={() => dockApi.dockWindowTop(activeWindowId)}\r\n ></button>\r\n <button\r\n className=\"hover:bg-zinc-300 border border-zinc-500 bg-zinc-600 w-14 h-6 rounded-sm\"\r\n onPointerUp={() => dockApi.dockWindowBottom(activeWindowId)}\r\n ></button>\r\n </div>\r\n )\r\n\r\n const windowDockPanel = (\r\n <span\r\n className=\"pointer-events-auto px-4 pb-3\"\r\n onPointerOver={() => setIsHovering(true)}\r\n onPointerLeave={() => setIsHovering(false)}\r\n >\r\n <section\r\n className={`\r\n flex w-fit border border-zinc-600 border-t-0 rounded-b-md bg-zinc-800 \r\n overflow-hidden px-8 gap-4 h-full py-4 \r\n `}\r\n >\r\n {cornerDockControl}\r\n {horizontalDockControl}\r\n {sideDideControl}\r\n </section>\r\n </span>\r\n )\r\n\r\n // FIND ME\r\n /** @Note could easily add a 'drop on area to dock' feature - orchestrate empty slots and auto suggest arbitrary docking */\r\n if (isBelowBreakPoint) return\r\n if (!isDockPanelEnabled) return\r\n return (\r\n <>\r\n <div\r\n className={`\r\n ${\r\n isDragging\r\n ? isHovering\r\n ? 'top-0 opacity-50'\r\n : 'top-[-68px] opacity-80'\r\n : 'top-[-104px] opacity-0'\r\n } \r\n transition-all duration-500\r\n absolute z-50 flex items-center justify-center \r\n w-full mx-auto pointer-events-none`}\r\n >\r\n {windowDockPanel}\r\n </div>\r\n </>\r\n )\r\n}\r\n","import { ResizeDirection } from '../../../model/window-types'\r\nimport { rafRuntime, rwmRuntime } from '../../runtime/rwm-runtime'\r\n\r\nexport const resizeApi = {\r\n startResize: (winId: string, direction: ResizeDirection) => {\r\n rwmRuntime.dispatch({\r\n targetWinId: winId,\r\n subsystem: 'RESIZE',\r\n cmd: 'ENABLE_RESIZE',\r\n ctx: direction,\r\n })\r\n rafRuntime.dispatch({ targetWinId: winId, subsystem: 'RAF_RESIZE', cmd: 'LOOP_RESIZE' })\r\n },\r\n stopResize: (winId: string) => {\r\n rwmRuntime.dispatch({\r\n targetWinId: winId,\r\n subsystem: 'RESIZE',\r\n cmd: 'DISABLE_RESIZE',\r\n ctx: false,\r\n })\r\n },\r\n}\r\n","import { useEffect } from 'react'\r\nimport { setCursorPosition } from './cursor-state'\r\n\r\nexport function CursorMoveListener() {\r\n useEffect(() => {\r\n\r\n const handlePointerMove = (e: PointerEvent) => {\r\n e.preventDefault()\r\n setCursorPosition({ x: e.clientX, y: e.clientY })\r\n }\r\n\r\n window.addEventListener('pointermove', handlePointerMove)\r\n\r\n return () => window.removeEventListener('pointermove', handlePointerMove)\r\n }, [])\r\n\r\n return <></>\r\n}\r\n","import { useEffect } from 'react'\r\nimport { useWorkspaceState } from './workspace-state'\r\nimport { wsApi } from './workspace-api'\r\n\r\nexport default function WorkspaceResizeListener() {\r\n const { wsElement } = useWorkspaceState()\r\n\r\n useEffect(() => {\r\n if (!wsElement) return\r\n\r\n const onResize = () => {\r\n wsApi.updateWsSize()\r\n }\r\n\r\n onResize()\r\n const observer = new ResizeObserver(onResize)\r\n\r\n observer.observe(wsElement)\r\n return () => observer.disconnect()\r\n }, [wsElement])\r\n\r\n return <></>\r\n}\r\n","import { rafRuntime, rwmRuntime } from '../../runtime/rwm-runtime'\r\n\r\nexport const dragApi = {\r\n startDrag: (targetWinId: string) => {\r\n rwmRuntime.dispatch({\r\n targetWinId: targetWinId,\r\n subsystem: 'DRAG',\r\n cmd: 'ENABLE_DRAG',\r\n })\r\n rafRuntime.dispatch({ targetWinId: targetWinId, subsystem: 'RAF_DRAG', cmd: 'LOOP_DRAG' })\r\n },\r\n\r\n stopDrag: (targetWinId: string) => {\r\n rwmRuntime.dispatch({\r\n targetWinId: targetWinId,\r\n subsystem: 'DRAG',\r\n cmd: 'DISABLE_DRAG',\r\n })\r\n },\r\n}\r\n","import { create } from 'zustand'\r\nimport {\r\n RwmButtonProps,\r\n RwmWindowProps,\r\n WindowRegistration,\r\n WindowStore,\r\n} from '../model/window-types'\r\nimport WindowLayout from '../internal/features/window-layout'\r\nimport WindowButton from '../internal/features/window-button'\r\nimport { windowRegistry } from './window-registry'\r\n\r\nconst defaultMinWidth = 256\r\nconst defaultMinHeight = 64\r\n\r\n/**\r\n * @return `id` auto generated id at the root of the window component.`id` can be used in `windowRegistry` to access the state store associated to this window instnace\r\n * @return\r\n * `store` zustand state store associated to this window instnace\r\n * @return\r\n * `window` JSX component representing an interactive window\r\n * @return\r\n * `button` JSX component that control this window */\r\nexport const createWindowStore = (): WindowRegistration => {\r\n const zIndexAtLaunch = Object.keys(windowRegistry).length + 1\r\n const windowInstanceId = `react-dynamic-window-instance${Object.keys(windowRegistry).length}`\r\n\r\n const storeInstance = create<WindowStore>((set) => ({\r\n setWinElement: (ref: HTMLDivElement | null) => set({ winElement: ref }),\r\n winElement: undefined,\r\n windowId: windowInstanceId,\r\n\r\n zIndex: zIndexAtLaunch,\r\n\r\n winCoord: { pointX: 40, pointY: 40 },\r\n winWidth: defaultMinWidth,\r\n winHeight: defaultMinHeight,\r\n\r\n winVisualState: 'demaximized',\r\n\r\n isActive: false,\r\n isDragging: false,\r\n isWindowClosed: true,\r\n resizeAction: false,\r\n\r\n WIN_MIN_WIDTH: defaultMinWidth,\r\n WIN_MIN_HEIGHT: defaultMinHeight,\r\n }))\r\n\r\n windowRegistry[windowInstanceId] = storeInstance\r\n\r\n return {\r\n id: storeInstance.getState().windowId,\r\n\r\n store: storeInstance,\r\n\r\n Window: (props: RwmWindowProps) => <WindowLayout {...props} winId={windowInstanceId} />,\r\n\r\n Button: (props: RwmButtonProps) => <WindowButton {...props} winId={windowInstanceId} />,\r\n }\r\n}\r\n","import { useEffect, useRef } from 'react'\r\nimport { IconWinMinimize, IconWinDemaximize, IconWinMaximize } from '../assets/svg-win-icons'\r\nimport ResizingControls from './resizing/resizing-controls'\r\nimport { windowRegistry } from '../../registration/window-registry'\r\nimport { dockApi } from './docking/docking-api'\r\nimport DragHandle from './drag/drag-handle'\r\nimport { useWorkspaceState } from './workspace/workspace-state'\r\nimport { focusApi } from './focus/focus-api'\r\nimport { DockPosition } from '../../model/window-types'\r\n\r\nexport type WindowLayoutProps = {\r\n children: React.ReactNode\r\n windowName: string | React.ReactNode\r\n winId: string\r\n navbarChildren?: React.ReactNode\r\n\r\n /**\r\n * @default\r\n * 'bg-white shadow-lg border border-zinc-600 rounded-sm'\r\n */\r\n className?: string\r\n\r\n /**\r\n * @default\r\n * 'bg-neutral-800 ${isActive ? 'brightness-100' : 'brightness-150'}'\r\n */\r\n navbarClassName?: string\r\n\r\n /**\r\n * @default 'deafult'\r\n * @param `deafult` keeps the window near full width but detached from the workspace edges\r\n * @param `full`\r\n * @param `right`\r\n * @param `left`\r\n * @param `top`\r\n * @param `bottom`\r\n * @param `top-right`\r\n * @param `top-left`\r\n * @param `bottom-right`\r\n * @param `bottom-left`\r\n * */\r\n defaultDock?: DockPosition\r\n\r\n /** @note use CSS values such as hex or supported color names */\r\n style?: {\r\n navBackgroundColor?: string\r\n windowBackgroundColor?: string\r\n navControlsColor?: string\r\n }\r\n}\r\n\r\nexport default function WindowLayout({\r\n children,\r\n windowName,\r\n navbarChildren,\r\n navbarClassName,\r\n className,\r\n winId,\r\n defaultDock = 'default',\r\n style,\r\n}: WindowLayoutProps) {\r\n const { wsElement, wsRect, isBelowBreakPoint } = useWorkspaceState()\r\n const windowRef = useRef<HTMLDivElement>(null)\r\n const {\r\n setWinElement,\r\n\r\n windowId,\r\n zIndex,\r\n isActive,\r\n\r\n winVisualState,\r\n\r\n isWindowClosed,\r\n\r\n winCoord,\r\n\r\n winWidth,\r\n winHeight,\r\n } = windowRegistry[winId]()\r\n\r\n useEffect(() => {\r\n setWinElement(windowRef.current)\r\n }, [setWinElement])\r\n\r\n useEffect(() => {\r\n dockingResolver[defaultDock](winId)\r\n\r\n /* Initialization is dependent on the workspace (wsElement) being mounted */\r\n }, [wsElement])\r\n\r\n const dockingResolver: Record<DockPosition, (winId: string) => void> = {\r\n right: dockApi.dockWindowRight,\r\n left: dockApi.dockWindowLeft,\r\n full: dockApi.maximizeWindow,\r\n top: dockApi.dockWindowTop,\r\n bottom: dockApi.dockWindowBottom,\r\n 'top-right': dockApi.dockWindowTopRight,\r\n 'top-left': dockApi.dockWindowTopLeft,\r\n 'bottom-right': dockApi.dockWindowBottomRight,\r\n 'bottom-left': dockApi.dockWindowBottomLeft,\r\n default: dockApi.demaximizeWindow,\r\n }\r\n\r\n const maximizeControl =\r\n winVisualState === 'maximized' ? (\r\n <button\r\n className={`block hover:bg-gray-500 hover:bg-opacity-10 px-5 h-full`}\r\n onClick={() => dockApi.demaximizeWindow(winId)}\r\n >\r\n <IconWinDemaximize color={style?.navControlsColor} />\r\n </button>\r\n ) : (\r\n <button\r\n className={`block hover:bg-gray-500 hover:bg-opacity-10 px-5 h-full`}\r\n onClick={() => dockApi.maximizeWindow(winId)}\r\n >\r\n <IconWinMaximize color={style?.navControlsColor} />\r\n </button>\r\n )\r\n\r\n const closeControl = (\r\n <button\r\n className=\"hover:bg-red-500 hover:bg-opacity-20 px-5 h-full\"\r\n onClick={() => focusApi.closeWindowAndRefocus(winId)}\r\n >\r\n <IconWinMinimize color={style?.navControlsColor} />\r\n </button>\r\n )\r\n\r\n return (\r\n <>\r\n <div\r\n id={windowId}\r\n ref={windowRef}\r\n className={`fixed overflow-hidden ${className ? className : 'bg-white shadow-lg border border-zinc-600 rounded-sm'} `}\r\n onPointerDown={() => focusApi.bringWindowToFocus(windowId)}\r\n style={{\r\n backgroundColor: style?.windowBackgroundColor,\r\n top: isBelowBreakPoint ? wsRect.top : `${winCoord.pointY}px`,\r\n left: isBelowBreakPoint ? wsRect.left : `${winCoord.pointX}px`,\r\n width: isBelowBreakPoint ? wsRect.innerWidth : `${winWidth}px`,\r\n height: isBelowBreakPoint ? wsRect.innerHeight : `${winHeight}px`,\r\n zIndex: `${zIndex}`,\r\n\r\n /* MINIMIZE LOGIC */\r\n transition: 'transform 0.2s ease-in-out, opacity 0.3s ease-in-out',\r\n opacity: isWindowClosed ? 0 : 1,\r\n transform: isWindowClosed\r\n ? `translate(${wsRect.innerWidth / 2 - winCoord.pointX - winWidth / 2}px,\r\n ${wsRect.innerHeight - winCoord.pointY - winHeight / 2}px) scale(0.02)`\r\n : '',\r\n }}\r\n >\r\n <nav\r\n style={{\r\n backgroundColor: style?.navBackgroundColor,\r\n }}\r\n className={`h-[32px] w-full flex items-center\r\n ${\r\n navbarClassName\r\n ? navbarClassName\r\n : `bg-neutral-800 ${isActive ? 'brightness-100' : 'brightness-150'}`\r\n } \r\n `}\r\n >\r\n <div className=\"shrink h-8 px-2 text-white flex items-center text-sm truncate min-w-0\">\r\n {windowName}\r\n </div>\r\n\r\n <div className=\"h-8 px-2 text-white flex items-center text-sm truncate min-w-0\">\r\n {navbarChildren}\r\n </div>\r\n\r\n <DragHandle winId={winId} />\r\n\r\n {!isBelowBreakPoint && maximizeControl}\r\n {closeControl}\r\n </nav>\r\n\r\n {!isBelowBreakPoint && <ResizingControls winId={winId} />}\r\n\r\n {/* Offset the navbar => 'h-[calc(100%-32px)]' */}\r\n <div className={`relative w-full h-[calc(100%-32px)] overflow-auto select-text`}>\r\n {children}\r\n </div>\r\n </div>{' '}\r\n </>\r\n )\r\n}\r\n","type Props = {\r\n color?: string\r\n}\r\n\r\nexport function IconWinMaximize({color}: Props) {\r\n return (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n fill=\"none\"\r\n viewBox=\"0 0 24 24\"\r\n width={24}\r\n height={24}\r\n strokeWidth={1.5}\r\n stroke={color ? color : '#cccccc'}\r\n color={color ? color : '#cccccc'}\r\n className=\"size-6\"\r\n >\r\n <path\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n d=\"M5.25 7.5A2.25 2.25 0 0 1 7.5 5.25h9a2.25 2.25 0 0 1 2.25 2.25v9a2.25 2.25 0 0 1-2.25 2.25h-9a2.25 2.25 0 0 1-2.25-2.25v-9Z\"\r\n />\r\n </svg>\r\n )\r\n}\r\n\r\nexport function IconWinDemaximize({color}: Props) {\r\n return (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n fill=\"none\"\r\n viewBox=\"0 0 24 24\"\r\n width={24}\r\n height={24}\r\n strokeWidth={1.5}\r\n stroke={color ? color : '#cccccc'}\r\n color={color ? color : '#cccccc'}\r\n className=\"size-6\"\r\n >\r\n <path\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n d=\"M16.5 8.25V6a2.25 2.25 0 0 0-2.25-2.25H6A2.25 2.25 0 0 0 3.75 6v8.25A2.25 2.25 0 0 0 6 16.5h2.25m8.25-8.25H18a2.25 2.25 0 0 1 2.25 2.25V18A2.25 2.25 0 0 1 18 20.25h-7.5A2.25 2.25 0 0 1 8.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 0 0-2.25 2.25v6\"\r\n />\r\n </svg>\r\n )\r\n}\r\n\r\nexport function IconWinMinimize({color}: Props) {\r\n return (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n fill=\"none\"\r\n viewBox=\"0 0 24 24\"\r\n width={24}\r\n height={24}\r\n strokeWidth={1.5}\r\n stroke={color ? color : '#cccccc'}\r\n color={color ? color : '#cccccc'}\r\n className=\"size-6\"\r\n >\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M6 18 18 6M6 6l12 12\" />\r\n </svg>\r\n )\r\n}\r\n","import { ResizeDirection, WindowStore } from '../../../model/window-types'\r\nimport { windowRegistry } from '../../../registration/window-registry'\r\nimport { resizeApi } from '../resizing/resizing-api'\r\nimport { useWorkspaceState } from '../workspace/workspace-state'\r\n\r\nconst tolerance = 4\r\n\r\ntype resizeCaseDependencies = {\r\n remoteId: string\r\n thisWinStartY: number\r\n thisWinEndY: number\r\n remoteWinStartY: number\r\n remoteWinEndY: number\r\n thisWinStartX: number\r\n thisWinEndX: number\r\n remoteWinStartX: number\r\n remoteWinEndX: number\r\n isRemoteOutside: boolean\r\n}\r\n\r\nexport const resizeOrchestrator = {\r\n initializeResize: (winId: string, direction: ResizeDirection) => {\r\n if (!useWorkspaceState.getState().isGridEnabled) return\r\n\r\n if (getOpenWinCount() < 1)\r\n throw new Error(`gridOrchestrator initalized but all windows are closed`)\r\n\r\n initNeighbourResizeBehavior(winId, new Set<string>(), direction)\r\n resizeApi.startResize(winId, direction)\r\n },\r\n}\r\n\r\nconst initNeighbourResizeBehavior = (\r\n winId: string,\r\n visited: Set<string>,\r\n direction?: ResizeDirection\r\n) => {\r\n if (visited.has(winId)) return\r\n else visited.add(winId)\r\n\r\n const thisWin = windowRegistry[winId].getState()\r\n const currentResize = direction ? direction : thisWin.resizeAction\r\n\r\n for (const key of Object.keys(windowRegistry)) {\r\n const remoteWin = windowRegistry[key].getState()\r\n if (remoteWin.windowId === thisWin.windowId) continue\r\n if (remoteWin.isWindowClosed) continue\r\n if (remoteWin.resizeAction) continue\r\n if (visited.has(remoteWin.windowId)) continue\r\n\r\n const dependencies = buildDependencies(thisWin, remoteWin)\r\n\r\n /* thisWin right edge <::::> remoteWin left edge || remoteWin is stacked up or down */\r\n if (currentResize === 'e') {\r\n const isRemoteConneted = resizeCase.whenDraggingEast(dependencies)\r\n if (isRemoteConneted) initNeighbourResizeBehavior(remoteWin.windowId, visited)\r\n }\r\n\r\n /* thisWin left edge <::::> remoteWin right edge || remoteWin is stacked up or down */\r\n if (currentResize === 'w') {\r\n const isRemoteConneted = resizeCase.whenDragginWest(dependencies)\r\n if (isRemoteConneted) initNeighbourResizeBehavior(remoteWin.windowId, visited)\r\n }\r\n\r\n /* thisWin top edge <::::> remoteWin bottom edge || remoteWin is stacked left or right */\r\n if (currentResize === 'n') {\r\n const isRemoteConneted = resizeCase.whenDragginNorth(dependencies)\r\n if (isRemoteConneted) initNeighbourResizeBehavior(remoteWin.windowId, visited)\r\n }\r\n\r\n /* thisWin bottom edge <::::> remoteWin top edge || remoteWin is stacked left or right */\r\n if (currentResize === 's') {\r\n const isRemoteConneted = resizeCase.whenDraggingSouth(dependencies)\r\n if (isRemoteConneted) initNeighbourResizeBehavior(remoteWin.windowId, visited)\r\n }\r\n }\r\n}\r\n\r\nconst resizeCase = {\r\n whenDraggingEast: (d: resizeCaseDependencies): boolean => {\r\n const isOppositeEdgeAlignedOnXAxis = Math.abs(d.thisWinEndX - d.remoteWinStartX) <= tolerance\r\n const isOverlapOnYAxis =\r\n d.thisWinStartY <= d.remoteWinEndY && d.thisWinEndY >= d.remoteWinStartY\r\n\r\n const isEdgeResize = isOppositeEdgeAlignedOnXAxis && isOverlapOnYAxis\r\n if (isEdgeResize) {\r\n resizeApi.startResize(d.remoteId, 'w')\r\n return true\r\n }\r\n\r\n const isSameEdgeAlignedOnXAxis = Math.abs(d.thisWinEndX - d.remoteWinEndX) <= tolerance\r\n const isRemoteNorthOrSouthEdgeConnected =\r\n Math.abs(d.thisWinEndY - d.remoteWinStartY) < tolerance ||\r\n Math.abs(d.thisWinStartY - d.remoteWinEndY) < tolerance\r\n\r\n const isStackResize = isSameEdgeAlignedOnXAxis && isRemoteNorthOrSouthEdgeConnected\r\n if (isStackResize) {\r\n resizeApi.startResize(d.remoteId, 'e')\r\n return true\r\n }\r\n\r\n return false\r\n },\r\n\r\n whenDragginWest: (d: resizeCaseDependencies): boolean => {\r\n const isOppositeEdgeAlignedOnXAxis = Math.abs(d.thisWinStartX - d.remoteWinEndX) <= tolerance\r\n const isOverlapOnYAxis =\r\n d.thisWinStartY <= d.remoteWinEndY && d.thisWinEndY >= d.remoteWinStartY\r\n\r\n const isEdgeResize = isOppositeEdgeAlignedOnXAxis && isOverlapOnYAxis\r\n if (isEdgeResize) {\r\n resizeApi.startResize(d.remoteId, 'e')\r\n return true\r\n }\r\n\r\n const isSameEdgeAlignedOnXAxis = Math.abs(d.thisWinStartX - d.remoteWinStartX) <= tolerance\r\n const isRemoteNorthOrSouthEdgeConnected =\r\n Math.abs(d.thisWinEndY - d.remoteWinStartY) < tolerance ||\r\n Math.abs(d.thisWinStartY - d.remoteWinEndY) < tolerance\r\n\r\n const isStackResize = isSameEdgeAlignedOnXAxis && isRemoteNorthOrSouthEdgeConnected\r\n if (isStackResize) {\r\n resizeApi.startResize(d.remoteId, 'w')\r\n return true\r\n }\r\n\r\n return false\r\n },\r\n\r\n whenDragginNorth: (d: resizeCaseDependencies): boolean => {\r\n const isOppositeEdgeAlignedOnYAxis = Math.abs(d.thisWinStartY - d.remoteWinEndY) <= tolerance\r\n const isOverlapOnXAxis =\r\n d.thisWinStartX <= d.remoteWinEndX && d.thisWinEndX >= d.remoteWinStartX\r\n\r\n const isEdgeResize = isOppositeEdgeAlignedOnYAxis && isOverlapOnXAxis\r\n if (isEdgeResize) {\r\n resizeApi.startResize(d.remoteId, 's')\r\n return true\r\n }\r\n\r\n const isSameEdgeAlignedOnYAxis = Math.abs(d.thisWinStartY - d.remoteWinStartY) <= tolerance\r\n const isRemoteEastOrWestEdgeConnected =\r\n Math.abs(d.thisWinEndX - d.remoteWinStartX) < tolerance ||\r\n Math.abs(d.thisWinStartX - d.remoteWinEndX) < tolerance\r\n\r\n const isStackResize = isSameEdgeAlignedOnYAxis && isRemoteEastOrWestEdgeConnected\r\n if (isStackResize) {\r\n resizeApi.startResize(d.remoteId, 'n')\r\n return true\r\n }\r\n\r\n return false\r\n },\r\n\r\n whenDraggingSouth: (d: resizeCaseDependencies): boolean => {\r\n const isOppositeEdgeAlignedOnYAxis = Math.abs(d.thisWinEndY - d.remoteWinStartY) <= tolerance\r\n const isOverlapOnXAxis =\r\n d.thisWinStartX <= d.remoteWinEndX && d.thisWinEndX >= d.remoteWinStartX\r\n\r\n const isEdgeResize = isOppositeEdgeAlignedOnYAxis && isOverlapOnXAxis\r\n if (isEdgeResize) {\r\n resizeApi.startResize(d.remoteId, 'n')\r\n return true\r\n }\r\n\r\n const isSameEdgeAlignedOnYAxis = Math.abs(d.thisWinEndY - d.remoteWinEndY) <= tolerance\r\n const isRemoteEastOrWestEdgeConnected =\r\n Math.abs(d.thisWinEndX - d.remoteWinStartX) < tolerance ||\r\n Math.abs(d.thisWinStartX - d.remoteWinEndX) < tolerance\r\n\r\n const isStackResize = isSameEdgeAlignedOnYAxis && isRemoteEastOrWestEdgeConnected\r\n if (isStackResize) {\r\n resizeApi.startResize(d.remoteId, 's')\r\n return true\r\n }\r\n\r\n return false\r\n },\r\n}\r\n\r\nconst buildDependencies = (thisWin: WindowStore, remoteWin: WindowStore) => {\r\n const thisWinStartY = thisWin.winCoord.pointY\r\n const thisWinEndY = thisWin.winCoord.pointY + thisWin.winHeight\r\n\r\n const remoteWinStartY = remoteWin.winCoord.pointY\r\n const remoteWinEndY = remoteWin.winCoord.pointY + remoteWin.winHeight\r\n\r\n const thisWinStartX = thisWin.winCoord.pointX\r\n const thisWinEndX = thisWin.winCoord.pointX + thisWin.winWidth\r\n\r\n const remoteWinStartX = remoteWin.winCoord.pointX\r\n const remoteWinEndX = remoteWin.winCoord.pointX + remoteWin.winWidth\r\n\r\n const isRemoteOutside =\r\n remoteWinEndY !== thisWinEndY ||\r\n remoteWinEndX !== thisWinEndX ||\r\n remoteWinStartY !== thisWinStartY ||\r\n remoteWinStartX !== thisWinStartX\r\n\r\n return {\r\n remoteId: remoteWin.windowId,\r\n thisWinStartY: thisWinStartY,\r\n thisWinEndY: thisWinEndY,\r\n remoteWinStartY: remoteWinStartY,\r\n remoteWinEndY: remoteWinEndY,\r\n thisWinStartX: thisWinStartX,\r\n thisWinEndX: thisWinEndX,\r\n remoteWinStartX: remoteWinStartX,\r\n remoteWinEndX: remoteWinEndX,\r\n isRemoteOutside: isRemoteOutside,\r\n }\r\n}\r\n\r\nconst getOpenWinCount = () => {\r\n let openWnidowCount = 0\r\n for (const key of Object.keys(windowRegistry))\r\n if (!windowRegistry[key].getState().isWindowClosed) openWnidowCount++\r\n\r\n return openWnidowCount\r\n}\r\n","import { ResizeDirection } from '../../../model/window-types'\r\nimport { windowRegistry } from '../../../registration/window-registry'\r\nimport { resizeApi } from './resizing-api'\r\nimport { resizeOrchestrator } from '../grid/grid-orchestrator'\r\n\r\ntype Props = {\r\n winId: string\r\n}\r\n\r\nexport default function ResizingControls({ winId }: Props) {\r\n const { winCoord, winWidth, winHeight, resizeAction } = windowRegistry[winId]()\r\n\r\n const startResize = (direction: ResizeDirection) => {\r\n resizeOrchestrator.initializeResize(winId, direction)\r\n }\r\n\r\n const stopResize = () => {\r\n resizeApi.stopResize(winId)\r\n }\r\n\r\n return (\r\n <>\r\n <span\r\n onPointerUp={stopResize}\r\n onPointerDown={() => startResize('e')}\r\n id=\"win-resize-right-width\"\r\n className={`fixed w-2 ${resizeAction === 'e' ? 'opacity-50' : ''} opacity-0 mix-blend-difference cursor-w-resize z-10 flex-col flex justify-center items-center overflow-hidden`}\r\n style={{\r\n top: `${winCoord.pointY}px`,\r\n left: `${winCoord.pointX + winWidth - 4}px`,\r\n height: `${winHeight}px`,\r\n }}\r\n >\r\n <div className={`w-1 h-full bg-zinc-50`}></div>\r\n </span>\r\n <span\r\n onPointerUp={stopResize}\r\n onPointerDown={() => startResize('w')}\r\n id=\"win-resize-left-width\"\r\n className={`fixed w-2 ${resizeAction === 'w' ? 'opacity-50' : ''} opacity-0 mix-blend-difference cursor-w-resize z-10 flex-col flex justify-center items-center`}\r\n style={{\r\n top: `${winCoord.pointY}px`,\r\n left: `${winCoord.pointX - 4}px`,\r\n height: `${winHeight}px`,\r\n }}\r\n >\r\n <div className={`w-1 h-full bg-zinc-50`}></div>\r\n </span>\r\n <span\r\n onPointerUp={stopResize}\r\n onPointerDown={() => startResize('s')}\r\n id=\"win-resize-bottom-height\"\r\n className={`fixed h-2 ${resizeAction === 's' ? 'opacity-50' : ''} opacity-0 mix-blend-difference cursor-s-resize z-10 flex justify-center items-center`}\r\n style={{\r\n top: `${winCoord.pointY + winHeight - 4}px`,\r\n left: `${winCoord.pointX}px`,\r\n width: `${winWidth}px`,\r\n }}\r\n >\r\n <div className={`w-full h-1 bg-zinc-50`}></div>\r\n </span>\r\n <span\r\n onPointerUp={stopResize}\r\n onPointerDown={() => startResize('n')}\r\n id=\"win-resize-top-height\"\r\n className={`fixed h-2 ${resizeAction === 'n' ? 'opacity-50' : ''} opacity-0 mix-blend-difference cursor-s-resize z-10 flex justify-center items-center`}\r\n style={{\r\n top: `${winCoord.pointY - 4}px`,\r\n left: `${winCoord.pointX}px`,\r\n width: `${winWidth}px`,\r\n }}\r\n >\r\n <div className={`w-full h-1 bg-zinc-50`}></div>\r\n </span>\r\n <span\r\n onPointerUp={stopResize}\r\n onPointerDown={() => startResize('se')}\r\n id=\"win-resize-bottom-right-all\"\r\n className=\"fixed h-3 w-3 opacity-60 cursor-se-resize z-20\"\r\n style={{\r\n top: `${winCoord.pointY + winHeight - 8}px`,\r\n left: `${winCoord.pointX + winWidth - 8}px`,\r\n }}\r\n ></span>\r\n <span\r\n onPointerUp={stopResize}\r\n onPointerDown={() => startResize('sw')}\r\n id=\"win-resize-bottom-left-all\"\r\n className=\"fixed h-3 w-3 opacity-60 cursor-sw-resize z-20\"\r\n style={{\r\n top: `${winCoord.pointY + winHeight - 8}px`,\r\n left: `${winCoord.pointX - 8}px`,\r\n }}\r\n ></span>\r\n\r\n <span\r\n onPointerUp={stopResize}\r\n onPointerDown={() => startResize('ne')}\r\n id=\"win-resize-top-right-all\"\r\n className=\"fixed h-3 w-3 opacity-60 cursor-ne-resize z-20\"\r\n style={{\r\n top: `${winCoord.pointY - 6}px`,\r\n left: `${winCoord.pointX + winWidth - 6}px`,\r\n }}\r\n ></span>\r\n <span\r\n onPointerUp={stopResize}\r\n onPointerDown={() => startResize('nw')}\r\n id=\"win-resize-top-left-all\"\r\n className=\"fixed h-3 w-3 opacity-60 cursor-nw-resize z-20\"\r\n style={{\r\n top: `${winCoord.pointY - 6}px`,\r\n left: `${winCoord.pointX - 6}px`,\r\n }}\r\n ></span>\r\n </>\r\n )\r\n}\r\n","import { dockApi } from '../docking/docking-api'\r\nimport { dragApi } from './drag-api'\r\n\r\ntype Props = {\r\n winId: string\r\n}\r\n\r\nexport default function DragHandle({ winId }: Props) {\r\n return (\r\n <div\r\n onPointerDown={() => dragApi.startDrag(winId)}\r\n onPointerUp={() => dragApi.stopDrag(winId)}\r\n onDoubleClick={() => dockApi.maximizeWindow(winId)}\r\n className={`\r\n grow min-w-8 h-8 px-2 text-white flex items-center text-sm bg-zinc-100 bg-opacity-0 \r\n hover:bg-opacity-20 hover:mix-blend-overlay`}\r\n ></div>\r\n )\r\n}\r\n","import { windowRegistry } from '../../registration/window-registry'\r\nimport { focusApi } from './focus/focus-api'\r\n\r\nexport type WindowButtonProps = {\r\n children: React.ReactNode\r\n winId: string\r\n className?: string\r\n\r\n /** @default 'brightness-[85%] border-t-2 border-t-transparent' */\r\n isClosedClassName?: string\r\n\r\n /** @default 'brightness-150 border-t-2 border-t-transparent' */\r\n isOpenClassName?: string\r\n\r\n /** @default 'brightness-150 border-t-2 border-zinc-400 bg-zinc-50/10' */\r\n isActiveClassName?: string\r\n}\r\n\r\nexport default function WindowButton({\r\n children,\r\n winId,\r\n className,\r\n isClosedClassName = 'brightness-[85%] border-t-2 border-t-transparent',\r\n isOpenClassName = 'brightness-150 border-t-2 border-t-transparent',\r\n isActiveClassName = 'brightness-150 border-t-2 border-zinc-400 bg-zinc-50/10',\r\n}: WindowButtonProps) {\r\n const { isWindowClosed, windowId, isActive } = windowRegistry[winId]()\r\n\r\n const handleOpenCloseWin = () => {\r\n if (!isWindowClosed && isActive) {\r\n focusApi.closeWindowAndRefocus(windowId)\r\n } else {\r\n focusApi.bringWindowToFocus(windowId)\r\n }\r\n }\r\n\r\n return (\r\n <button\r\n id={`${windowId}_button`}\r\n onClick={handleOpenCloseWin}\r\n className={`\r\n ${className} \r\n ${isWindowClosed ? isClosedClassName : isActive ? isActiveClassName : isOpenClassName}\r\n `}\r\n >\r\n {children}\r\n </button>\r\n )\r\n}\r\n"],"mappings":"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","names":["useEffect","Fragment","jsx","useEffect","Fragment","jsx","useEffect","jsx","jsxs","useEffect","create","useEffect","useRef","jsx","Fragment","jsx","jsxs","jsx","Fragment","jsx","jsxs","useRef","useEffect","jsx","jsx","create"]}
|
|
1
|
+
{"version":3,"sources":["../src/window-manager/registration/window-registry.ts","../src/window-manager/internal/features/workspace/workspace-state.ts","../src/window-manager/internal/runtime/dock-resolver/dock-commands.ts","../src/window-manager/internal/features/cursor/cursor-state.ts","../src/window-manager/internal/runtime/drag-resolver/drag-loop.ts","../src/window-manager/internal/runtime/drag-resolver/drag-commands.ts","../src/window-manager/internal/runtime/focus-resolver/focus-commands.ts","../src/window-manager/internal/runtime/workspace-resolver/workspace-commands.ts","../src/window-manager/internal/runtime/resize-resolver/resize-commands.ts","../src/window-manager/internal/runtime/resize-resolver/resize-loop-rules.ts","../src/window-manager/internal/runtime/resize-resolver/resize-loop.ts","../src/window-manager/internal/runtime/history-resolver/app-history.ts","../src/window-manager/internal/runtime/history-resolver/history-commands.ts","../src/window-manager/internal/runtime/rwm-runtime.ts","../src/window-manager/internal/features/docking/docking-api.ts","../src/window-manager/internal/features/focus/focus-api.ts","../src/window-manager/internal/features/workspace/workspace-api.ts","../src/window-manager/rwm.ts","../src/window-manager/workspace-layout.tsx","../src/window-manager/internal/features/docking/docking-controls.tsx","../src/window-manager/internal/features/resizing/resizing-api.ts","../src/window-manager/internal/features/cursor/cursor-move-listener.tsx","../src/window-manager/internal/features/workspace/workspace-resize-listener.tsx","../src/window-manager/internal/features/history/history-api.ts","../src/window-manager/internal/features/drag/drag-api.ts","../src/window-manager/internal/features/history/history-keys-listener.tsx","../src/window-manager/registration/window-store-factory.tsx","../src/window-manager/internal/features/window-layout.tsx","../src/window-manager/internal/assets/svg-win-icons.tsx","../src/window-manager/internal/features/grid/grid-orchestrator.ts","../src/window-manager/internal/features/resizing/resizing-controls.tsx","../src/window-manager/internal/features/drag/drag-handle.tsx","../src/window-manager/internal/features/window-button.tsx"],"sourcesContent":["import { WindowRegistry } from '../model/window-types.js'\r\n\r\nexport const windowRegistry: WindowRegistry = {}\r\n\r\n/* FIND ME:\r\n * Singletons like the registry and workspace should be scoped into instance based creation, allowing for a fully contained/scoped use of the library\r\n\r\n BASE IDEA:\r\n\r\n createWorkspace({ \"maybe-config?\" }) {\r\n const dependencies = get()\r\n const runtime = createRuntime(dependencies)\r\n const api = createApi(dependencies)\r\n\r\n return {\r\n workspaceElement(),\r\n createWindow(),\r\n }\r\n }\r\n */\r\n","import { create } from 'zustand'\r\nimport { WorkspaceStore } from '../../../model/workspace-types.js'\r\n\r\nexport const useWorkspaceState = create<WorkspaceStore>((set, get) => ({\r\n wsElement: null,\r\n setWsElement: (el: HTMLElement | null) => set({ wsElement: el }),\r\n\r\n isGridEnabled: true,\r\n isDockPanelEnabled: true,\r\n responsiveBreak: 'sm',\r\n\r\n isBelowBreakPoint: false,\r\n activeWindowId: 'react-dynamic-window-instance0',\r\n wsRect: {\r\n top: 0,\r\n left: 0,\r\n innerHeight: 0,\r\n innerWidth: 0,\r\n bottom: 0,\r\n right: 0,\r\n centerX: 0,\r\n centerY: 0,\r\n },\r\n}))\r\n","import { WorkspaceRect } from '../../../model/workspace-types.js'\r\nimport { WindowMutation } from '../rwm-runtime.js'\r\n\r\n/*\r\n * FIND ME\r\n * could add a 'drop on area to dock' feature - orchestrate empty slots and auto suggest arbitrary docking \r\n * 'DOCK_WINDOW_ON_LOCATION'\r\n * */\r\n\r\nexport type DockCommands =\r\n | 'DOCK_WINDOW_RIGHT'\r\n | 'DOCK_WINDOW_LEFT'\r\n | 'DOCK_WINDOW_TOP'\r\n | 'DOCK_WINDOW_BOTTOM'\r\n | 'DOCK_WINDOW_BOTTOM_RIGHT'\r\n | 'DOCK_WINDOW_TOP_RIGHT'\r\n | 'DOCK_WINDOW_BOTTOM_LEFT'\r\n | 'DOCK_WINDOW_TOP_LEFT'\r\n | 'MAXIMIZE_WINDOW'\r\n | 'DEMAXIMIZE_WINDOW'\r\n\r\ntype DockResolver = Record<\r\n DockCommands,\r\n (targetWinId: string, wsRect: WorkspaceRect) => WindowMutation[]\r\n>\r\nexport const dockCommandResolver: DockResolver = {\r\n DOCK_WINDOW_RIGHT: (targetWinId: string, wsRect: WorkspaceRect) => {\r\n return [\r\n {\r\n winId: targetWinId,\r\n patch: {\r\n winCoord: { pointX: wsRect.centerX, pointY: wsRect.top },\r\n winWidth: wsRect.innerWidth / 2,\r\n winHeight: wsRect.innerHeight,\r\n winVisualState: 'demaximized',\r\n isDragging: false,\r\n },\r\n },\r\n ]\r\n },\r\n DOCK_WINDOW_LEFT: (targetWinId: string, wsRect: WorkspaceRect) => {\r\n return [\r\n {\r\n winId: targetWinId,\r\n patch: {\r\n winCoord: { pointX: wsRect.left, pointY: wsRect.top },\r\n winWidth: wsRect.innerWidth / 2,\r\n winHeight: wsRect.innerHeight,\r\n winVisualState: 'demaximized',\r\n isDragging: false,\r\n },\r\n },\r\n ]\r\n },\r\n DOCK_WINDOW_TOP: (targetWinId: string, wsRect: WorkspaceRect) => {\r\n return [\r\n {\r\n winId: targetWinId,\r\n patch: {\r\n winCoord: { pointX: wsRect.left, pointY: wsRect.top },\r\n winWidth: wsRect.innerWidth,\r\n winHeight: wsRect.innerHeight / 2,\r\n winVisualState: 'demaximized',\r\n isDragging: false,\r\n },\r\n },\r\n ]\r\n },\r\n DOCK_WINDOW_BOTTOM: (targetWinId: string, wsRect: WorkspaceRect) => {\r\n return [\r\n {\r\n winId: targetWinId,\r\n patch: {\r\n winCoord: { pointX: wsRect.left, pointY: wsRect.centerY },\r\n winWidth: wsRect.innerWidth,\r\n winHeight: wsRect.innerHeight / 2,\r\n winVisualState: 'demaximized',\r\n isDragging: false,\r\n },\r\n },\r\n ]\r\n },\r\n DOCK_WINDOW_BOTTOM_RIGHT: (targetWinId: string, wsRect: WorkspaceRect) => {\r\n return [\r\n {\r\n winId: targetWinId,\r\n patch: {\r\n winCoord: {\r\n pointX: wsRect.centerX,\r\n pointY: wsRect.centerY,\r\n },\r\n winWidth: wsRect.innerWidth / 2,\r\n winHeight: wsRect.innerHeight / 2,\r\n winVisualState: 'demaximized',\r\n isDragging: false,\r\n },\r\n },\r\n ]\r\n },\r\n DOCK_WINDOW_TOP_RIGHT: (targetWinId: string, wsRect: WorkspaceRect) => {\r\n return [\r\n {\r\n winId: targetWinId,\r\n patch: {\r\n winCoord: { pointX: wsRect.centerX, pointY: wsRect.top },\r\n winWidth: wsRect.innerWidth / 2,\r\n winHeight: wsRect.innerHeight / 2,\r\n winVisualState: 'demaximized',\r\n isDragging: false,\r\n },\r\n },\r\n ]\r\n },\r\n DOCK_WINDOW_BOTTOM_LEFT: (targetWinId: string, wsRect: WorkspaceRect) => {\r\n return [\r\n {\r\n winId: targetWinId,\r\n patch: {\r\n winCoord: { pointX: wsRect.left, pointY: wsRect.centerY },\r\n winWidth: wsRect.innerWidth / 2,\r\n winHeight: wsRect.innerHeight / 2,\r\n winVisualState: 'demaximized',\r\n isDragging: false,\r\n },\r\n },\r\n ]\r\n },\r\n DOCK_WINDOW_TOP_LEFT: (targetWinId: string, wsRect: WorkspaceRect) => {\r\n return [\r\n {\r\n winId: targetWinId,\r\n patch: {\r\n winCoord: { pointX: wsRect.left, pointY: wsRect.top },\r\n winWidth: wsRect.innerWidth / 2,\r\n winHeight: wsRect.innerHeight / 2,\r\n winVisualState: 'demaximized',\r\n isDragging: false,\r\n },\r\n },\r\n ]\r\n },\r\n MAXIMIZE_WINDOW: (targetWinId: string, wsRect: WorkspaceRect) => {\r\n return [\r\n {\r\n winId: targetWinId,\r\n patch: {\r\n winCoord: { pointX: wsRect.left, pointY: wsRect.top },\r\n winHeight: wsRect.innerHeight,\r\n winWidth: wsRect.innerWidth,\r\n winVisualState: 'maximized',\r\n isDragging: false,\r\n },\r\n },\r\n ]\r\n },\r\n DEMAXIMIZE_WINDOW: (targetWinId: string, wsRect: WorkspaceRect) => {\r\n return [\r\n {\r\n winId: targetWinId,\r\n patch: {\r\n winCoord: { pointX: wsRect.left + 16, pointY: wsRect.top + 16 },\r\n winWidth: wsRect.innerWidth * 0.95,\r\n winHeight: wsRect.innerHeight * 0.75,\r\n winVisualState: 'demaximized',\r\n isDragging: false,\r\n },\r\n },\r\n ]\r\n },\r\n}\r\n","type CursorState = {\r\n x: number\r\n y: number\r\n}\r\n\r\nexport const cursorPosition = {\r\n x: 10,\r\n y: 10,\r\n}\r\n\r\nexport const setCursorPosition = ({ x, y }: CursorState) => {\r\n cursorPosition.x = x\r\n cursorPosition.y = y\r\n}\r\n","import { windowRegistry } from '../../../registration/window-registry.js'\r\nimport { cursorPosition } from '../../features/cursor/cursor-state.js'\r\nimport { useWorkspaceState } from '../../features/workspace/workspace-state.js'\r\nimport { WindowMutation } from '../rwm-runtime.js'\r\n\r\nexport type RafDragCommands = 'LOOP_DRAG'\r\n\r\ntype RafDragResolver = Record<\r\n RafDragCommands,\r\n (targetWinId: string, commitCb: (patchStack: WindowMutation[]) => void) => void\r\n>\r\nexport const rafDragLoopResolver: RafDragResolver = {\r\n LOOP_DRAG: (targetWinId: string, commit: (patchStack: WindowMutation[]) => void) => {\r\n const { x, y } = cursorPosition\r\n const { winCoord, isDragging, windowId } = windowRegistry[targetWinId].getState()\r\n\r\n if (!isDragging)\r\n throw new Error(`LOOP_DRAG called with isDragging false for winId: ${windowId}`)\r\n\r\n const pointerOffset = {\r\n left: x - winCoord.pointX,\r\n top: y - winCoord.pointY,\r\n }\r\n\r\n requestAnimationFrame(() => dragLoop(targetWinId, pointerOffset, commit))\r\n },\r\n}\r\n\r\ntype PointerOffset = { left: number; top: number }\r\nconst dragLoop = (\r\n targetWinId: string,\r\n pointerOffset: PointerOffset,\r\n commit: (patchStack: WindowMutation[]) => void\r\n) => {\r\n const { winCoord, isDragging } = windowRegistry[targetWinId].getState()\r\n const { wsRect } = useWorkspaceState.getState()\r\n const { x, y } = cursorPosition\r\n if (!isDragging) return\r\n\r\n let adjustedX = Math.round(x - pointerOffset.left)\r\n if (x > wsRect.right || x < wsRect.left) adjustedX = winCoord.pointX\r\n let adjustedY = Math.round(y - pointerOffset.top)\r\n if (y > wsRect.bottom || y < wsRect.top) adjustedY = winCoord.pointY\r\n\r\n if (adjustedX !== winCoord.pointX || adjustedY !== winCoord.pointY) {\r\n commit([\r\n {\r\n winId: targetWinId,\r\n patch: { winCoord: { pointX: adjustedX, pointY: adjustedY } },\r\n },\r\n ])\r\n }\r\n\r\n requestAnimationFrame(() => dragLoop(targetWinId, pointerOffset, commit))\r\n}\r\n","import { WindowStore } from '../../../model/window-types.js'\r\nimport { windowRegistry } from '../../../registration/window-registry.js'\r\nimport { useWorkspaceState } from '../../features/workspace/workspace-state.js'\r\nimport { WindowMutation } from '../rwm-runtime.js'\r\n\r\nexport type DragCommands = 'ENABLE_DRAG' | 'DISABLE_DRAG'\r\n\r\ntype DragResolver = Record<DragCommands, (targetWinId: string) => WindowMutation[]>\r\nexport const dragCommandResolver: DragResolver = {\r\n ENABLE_DRAG: (targetWinId: string) => {\r\n const { wsRect } = useWorkspaceState.getState()\r\n const { winVisualState } = windowRegistry[targetWinId].getState()\r\n\r\n const patch: Partial<WindowStore> =\r\n winVisualState === 'maximized'\r\n ? {\r\n winCoord: { pointX: wsRect.left + 16, pointY: wsRect.top + 4 },\r\n winWidth: wsRect.innerWidth * 0.95,\r\n winHeight: wsRect.innerHeight * 0.75,\r\n winVisualState: 'demaximized',\r\n isDragging: true,\r\n }\r\n : { isDragging: true }\r\n\r\n return [\r\n {\r\n winId: targetWinId,\r\n patch: patch,\r\n },\r\n ]\r\n },\r\n DISABLE_DRAG: (targetWinId: string) => {\r\n return [\r\n {\r\n winId: targetWinId,\r\n patch: {\r\n isDragging: false,\r\n },\r\n },\r\n ]\r\n },\r\n}\r\n","import { windowRegistry } from '../../../registration/window-registry.js'\r\nimport { BatchMutation, WindowMutation, WorkspaceMutation } from '../rwm-runtime.js'\r\n\r\nexport type FocusCommands = 'FOCUS_WINDOW' | 'CLOSE_WINDOW_AND_REFOCUS'\r\n\r\ntype FocusResolver = Record<FocusCommands, (targetWinId: string) => BatchMutation>\r\nexport const focusCommandResolver: FocusResolver = {\r\n FOCUS_WINDOW: (targetWinId: string) => {\r\n const targetWin = windowRegistry[targetWinId].getState()\r\n if (targetWin.isActive && !targetWin.isWindowClosed) return { win: [], ws: {} }\r\n\r\n const newStackOrderUpdate: WindowMutation[] = []\r\n const workspaceUpdate: WorkspaceMutation = { activeWindowId: targetWinId }\r\n\r\n for (const key of Object.keys(windowRegistry)) {\r\n const otherWin = windowRegistry[key].getState()\r\n if (otherWin.windowId === targetWin.windowId) continue\r\n\r\n const adjustedIndex =\r\n otherWin.zIndex >= targetWin.zIndex ? otherWin.zIndex - 1 : otherWin.zIndex\r\n\r\n newStackOrderUpdate.push({\r\n winId: otherWin.windowId,\r\n patch: {\r\n isActive: false,\r\n zIndex: adjustedIndex,\r\n },\r\n })\r\n }\r\n\r\n newStackOrderUpdate.push({\r\n winId: targetWin.windowId,\r\n patch: {\r\n isWindowClosed: false,\r\n isActive: true,\r\n zIndex: newStackOrderUpdate.length + 1,\r\n },\r\n })\r\n\r\n return {\r\n win: newStackOrderUpdate,\r\n ws: workspaceUpdate,\r\n }\r\n },\r\n CLOSE_WINDOW_AND_REFOCUS: (targetWinId: string) => {\r\n const isTargetWinClosed = windowRegistry[targetWinId].getState().isWindowClosed\r\n if (isTargetWinClosed) return { win: [], ws: {} }\r\n\r\n let prevIndex = 0\r\n let highestIndexWinId: string | undefined = undefined\r\n\r\n for (const key of Object.keys(windowRegistry)) {\r\n const { zIndex, windowId, isWindowClosed } = windowRegistry[key].getState()\r\n if (windowId === targetWinId) continue\r\n if (isWindowClosed) continue\r\n\r\n if (zIndex > prevIndex) {\r\n prevIndex = zIndex\r\n highestIndexWinId = windowId\r\n }\r\n }\r\n\r\n return !highestIndexWinId\r\n ? {\r\n ws: {},\r\n win: [\r\n {\r\n winId: targetWinId,\r\n patch: { isActive: false, isWindowClosed: true },\r\n },\r\n ],\r\n }\r\n : {\r\n ws: { activeWindowId: highestIndexWinId },\r\n win: [\r\n {\r\n winId: highestIndexWinId,\r\n patch: { isActive: true },\r\n },\r\n {\r\n winId: targetWinId,\r\n patch: { isActive: false, isWindowClosed: true },\r\n },\r\n ],\r\n }\r\n },\r\n}\r\n","import { ResponsiveSizes } from '../../../model/workspace-types.js'\r\nimport { windowRegistry } from '../../../registration/window-registry.js'\r\nimport { useWorkspaceState } from '../../features/workspace/workspace-state.js'\r\nimport { BatchMutation, WindowMutation, WorkspaceMutation } from '../rwm-runtime.js'\r\n\r\nexport type WorkspaceCommands =\r\n | 'UPDATE_WORKSPACE_SIZE'\r\n | 'SET_RESPONSIVE_BREAK'\r\n | 'SET_WORKSPACE_FEATURES'\r\n\r\nexport type WorkspaceCtx = {\r\n responsiveBreak?: ResponsiveSizes\r\n isDockPanelEnabled?: boolean\r\n isGridEnabled?: boolean\r\n}\r\n\r\ntype WorkspaceResolver = Record<\r\n WorkspaceCommands,\r\n (targetWinId?: string, ctx?: WorkspaceCtx) => BatchMutation\r\n>\r\nexport const workspaceCommandResolver: WorkspaceResolver = {\r\n UPDATE_WORKSPACE_SIZE: () => {\r\n const prevRect = useWorkspaceState.getState().wsRect\r\n const rect = useWorkspaceState.getState().wsElement?.getBoundingClientRect()\r\n const breakPoint = useWorkspaceState.getState().responsiveBreak\r\n\r\n const top = rect?.top ?? 0\r\n const left = rect?.left ?? 0\r\n const innerHeight = rect?.height ?? 0\r\n const innerWidth = rect?.width ?? 0\r\n const bottom = top + innerHeight\r\n const right = left + innerWidth\r\n const centerX = left + innerWidth / 2\r\n const centerY = top + innerHeight / 2\r\n\r\n const workspaceUpdate: WorkspaceMutation = {\r\n isBelowBreakPoint: innerWidth < responsiveBreakInPx(breakPoint),\r\n wsRect: {\r\n top: top,\r\n left: left,\r\n innerHeight: innerHeight,\r\n innerWidth: innerWidth,\r\n bottom: bottom,\r\n right: right,\r\n centerX: centerX,\r\n centerY: centerY,\r\n },\r\n }\r\n\r\n const windowBatchUpdate: WindowMutation[] = []\r\n const { innerHeight: prevWsHeight, innerWidth: prevWsWidth } = prevRect\r\n const currWsHeight = innerHeight\r\n const currWsWidth = innerWidth\r\n\r\n const widthChangeRatio = currWsWidth / prevWsWidth\r\n const heightChangeRatio = currWsHeight / prevWsHeight\r\n\r\n for (const key of Object.keys(windowRegistry)) {\r\n const win = windowRegistry[key].getState()\r\n\r\n windowBatchUpdate.push({\r\n winId: key,\r\n patch: {\r\n winWidth: win.winWidth * widthChangeRatio,\r\n winHeight: win.winHeight * heightChangeRatio,\r\n winCoord: {\r\n pointX: win.winCoord.pointX * widthChangeRatio,\r\n pointY: win.winCoord.pointY * heightChangeRatio,\r\n },\r\n },\r\n })\r\n }\r\n\r\n return {\r\n win: windowBatchUpdate,\r\n ws: workspaceUpdate,\r\n }\r\n },\r\n\r\n SET_WORKSPACE_FEATURES: (_?: string, ctx?: WorkspaceCtx) => {\r\n if (ctx?.isGridEnabled === undefined || ctx?.isDockPanelEnabled === undefined)\r\n throw new Error(`SET_WORKSPACE_FEATURES called without a ctx value`)\r\n\r\n return {\r\n win: [],\r\n ws: {\r\n isGridEnabled: ctx.isGridEnabled,\r\n isDockPanelEnabled: ctx.isDockPanelEnabled,\r\n },\r\n }\r\n },\r\n\r\n SET_RESPONSIVE_BREAK: (_?: string, ctx?: WorkspaceCtx) => {\r\n if (ctx?.responsiveBreak === undefined || ctx?.responsiveBreak === null)\r\n throw new Error(`SET_RESPONSIVE_BREAK called without a ctx value`)\r\n\r\n return {\r\n win: [],\r\n ws: {\r\n responsiveBreak: ctx.responsiveBreak,\r\n },\r\n }\r\n },\r\n}\r\n\r\nconst responsiveBreakInPx = (breakPoint: ResponsiveSizes): number => {\r\n switch (breakPoint) {\r\n case 'sm':\r\n return 640\r\n case 'md':\r\n return 768\r\n case 'lg':\r\n return 1024\r\n case 'xl':\r\n return 1280\r\n case 'never':\r\n return 0\r\n case 'always':\r\n return Infinity\r\n default:\r\n return breakPoint\r\n }\r\n}\r\n","import { ResizeDirection } from '../../../model/window-types.js'\r\nimport { windowRegistry } from '../../../registration/window-registry.js'\r\nimport { WindowMutation } from '../rwm-runtime.js'\r\n\r\nexport type ResizeCommands = 'ENABLE_RESIZE' | 'DISABLE_RESIZE'\r\n\r\ntype ResizeResolver = Record<\r\n ResizeCommands,\r\n (targetWinId: string, ctx: ResizeDirection) => WindowMutation[]\r\n>\r\nexport const resizeCommandResolver: ResizeResolver = {\r\n ENABLE_RESIZE: (targetWinId: string, direction: ResizeDirection) => {\r\n const currentResizeAction = windowRegistry[targetWinId].getState().resizeAction\r\n if (currentResizeAction)\r\n throw new Error(`ENABLE_RESIZE called on a window that is already resizing`)\r\n\r\n return [\r\n {\r\n winId: targetWinId,\r\n patch: {\r\n resizeAction: direction,\r\n winVisualState: 'demaximized',\r\n },\r\n },\r\n ]\r\n },\r\n DISABLE_RESIZE: (_: string) => {\r\n const patch: WindowMutation[] = []\r\n for (const key of Object.keys(windowRegistry))\r\n patch.push({\r\n winId: key,\r\n patch: {\r\n resizeAction: false,\r\n },\r\n })\r\n\r\n return patch\r\n },\r\n}\r\n","import { ResizeDirection } from '../../../model/window-types.js'\r\nimport { windowRegistry } from '../../../registration/window-registry.js'\r\n\r\nexport const resolveNeighbourResizeLimit = (activeWinId: string, direction: ResizeDirection) => {\r\n switch (direction) {\r\n case 'e':\r\n return neighbourResizeLimit.e(activeWinId)\r\n case 'w':\r\n return neighbourResizeLimit.w(activeWinId)\r\n case 'n':\r\n return neighbourResizeLimit.n(activeWinId)\r\n case 's':\r\n return neighbourResizeLimit.s(activeWinId)\r\n\r\n default:\r\n return undefined\r\n }\r\n}\r\n\r\nconst neighbourResizeLimit = {\r\n e: (activeWinId: string) => {\r\n let leftMostXAtMinWidth = undefined\r\n\r\n for (const key of Object.keys(windowRegistry)) {\r\n const neighbourWin = windowRegistry[key].getState()\r\n if (key === activeWinId) continue\r\n if (neighbourWin.resizeAction !== 'w') continue\r\n if (neighbourWin.isWindowClosed) continue\r\n\r\n const winBox = neighbourWin.winElement?.getBoundingClientRect()\r\n if (!winBox) continue\r\n\r\n const xAtMinWidth = winBox.right - neighbourWin.WIN_MIN_WIDTH\r\n\r\n if (leftMostXAtMinWidth === undefined) leftMostXAtMinWidth = xAtMinWidth\r\n if (leftMostXAtMinWidth > xAtMinWidth) leftMostXAtMinWidth = xAtMinWidth\r\n }\r\n\r\n return leftMostXAtMinWidth\r\n },\r\n\r\n w: (activeWinId: string) => {\r\n let rightMostXAtMinWidth = undefined\r\n\r\n for (const key of Object.keys(windowRegistry)) {\r\n const neighbourWin = windowRegistry[key].getState()\r\n if (key === activeWinId) continue\r\n if (neighbourWin.resizeAction !== 'e') continue\r\n if (neighbourWin.isWindowClosed) continue\r\n\r\n const winBox = neighbourWin.winElement?.getBoundingClientRect()\r\n if (!winBox) continue\r\n\r\n const xAtMinWidth = winBox.left + neighbourWin.WIN_MIN_WIDTH\r\n\r\n if (rightMostXAtMinWidth === undefined) rightMostXAtMinWidth = xAtMinWidth\r\n if (rightMostXAtMinWidth < xAtMinWidth) rightMostXAtMinWidth = xAtMinWidth\r\n }\r\n\r\n return rightMostXAtMinWidth\r\n },\r\n\r\n n: (currentWinId: string) => {\r\n let bottomMostYAtMinWidth = undefined\r\n\r\n for (const key of Object.keys(windowRegistry)) {\r\n const remoteWin = windowRegistry[key].getState()\r\n if (key === currentWinId) continue\r\n if (remoteWin.resizeAction !== 's') continue\r\n if (remoteWin.isWindowClosed) continue\r\n\r\n const winBox = remoteWin.winElement?.getBoundingClientRect()\r\n if (!winBox) continue\r\n\r\n const yAtMinWidth = winBox.top + remoteWin.WIN_MIN_HEIGHT\r\n\r\n if (bottomMostYAtMinWidth === undefined) bottomMostYAtMinWidth = yAtMinWidth\r\n if (bottomMostYAtMinWidth < yAtMinWidth) bottomMostYAtMinWidth = yAtMinWidth\r\n }\r\n\r\n return bottomMostYAtMinWidth\r\n },\r\n\r\n s: (currentWinId: string) => {\r\n let topMostYAtMinWidth = undefined\r\n\r\n for (const key of Object.keys(windowRegistry)) {\r\n const remoteWin = windowRegistry[key].getState()\r\n if (key === currentWinId) continue\r\n if (remoteWin.resizeAction !== 'n') continue\r\n if (remoteWin.isWindowClosed) continue\r\n\r\n const winBox = remoteWin.winElement?.getBoundingClientRect()\r\n if (!winBox) continue\r\n\r\n const yAtMinWidth = winBox.bottom - remoteWin.WIN_MIN_HEIGHT\r\n\r\n if (topMostYAtMinWidth === undefined) topMostYAtMinWidth = yAtMinWidth\r\n if (topMostYAtMinWidth > yAtMinWidth) topMostYAtMinWidth = yAtMinWidth\r\n }\r\n\r\n return topMostYAtMinWidth\r\n },\r\n}\r\n","import { WindowStore } from '../../../model/window-types.js'\r\nimport { WorkspaceRect } from '../../../model/workspace-types.js'\r\nimport { windowRegistry } from '../../../registration/window-registry.js'\r\nimport { cursorPosition } from '../../features/cursor/cursor-state.js'\r\nimport { useWorkspaceState } from '../../features/workspace/workspace-state.js'\r\nimport { WindowMutation } from '../rwm-runtime.js'\r\nimport { resolveNeighbourResizeLimit } from './resize-loop-rules.js'\r\n\r\nexport type RafResizeCommands = 'LOOP_RESIZE'\r\ntype RafResizeResolver = Record<\r\n RafResizeCommands,\r\n (targetWinId: string, commitCb: (patchStack: WindowMutation[]) => void) => void\r\n>\r\nexport const rafResizeLoopResolver: RafResizeResolver = {\r\n LOOP_RESIZE: (targetWinId: string, commitCb: (patchStack: WindowMutation[]) => void) => {\r\n const dep = getRafResizeDependencies(targetWinId)\r\n\r\n const resizeDirection = dep.win.resizeAction\r\n if (!resizeDirection)\r\n throw new Error(`LOOP_RESIZE called with resizeAction as false for winId: ${targetWinId}`)\r\n\r\n const winElementBox = dep.winBox\r\n if (!winElementBox)\r\n throw new Error(`LOOP_RESIZE called with null window element for winId: ${targetWinId}`)\r\n\r\n requestAnimationFrame(() => {\r\n const neighbourLimit = resolveNeighbourResizeLimit(dep.win.windowId, resizeDirection)\r\n resizer[resizeDirection](getRafResizeDependencies(targetWinId), commitCb, neighbourLimit)\r\n })\r\n },\r\n}\r\n\r\nconst resizer = {\r\n e: (\r\n resizeDep: ResizeDep,\r\n commit: (patchStack: WindowMutation[]) => void,\r\n neighbourLimit?: number\r\n ) => {\r\n const { wsRect, win, winBox, x } = resizeDep\r\n if (!win.resizeAction) return\r\n if (!winBox) return\r\n\r\n const cursorOutOfBounds = x > wsRect.right || x < wsRect.left\r\n const sizeDiff = x - winBox.right\r\n\r\n const isResizeActive = !cursorOutOfBounds && sizeDiff !== 0\r\n const minWinWidth = x - winBox.left < win.WIN_MIN_WIDTH\r\n\r\n const leftMostXAtMinWidth = neighbourLimit\r\n const isNeighbourLimit = leftMostXAtMinWidth && x > leftMostXAtMinWidth\r\n if (isNeighbourLimit && isResizeActive) {\r\n commit([\r\n {\r\n winId: win.windowId,\r\n patch: { winWidth: leftMostXAtMinWidth - win.winCoord.pointX },\r\n },\r\n ])\r\n } else if (!minWinWidth && isResizeActive) {\r\n commit([\r\n {\r\n winId: win.windowId,\r\n patch: { winWidth: win.winWidth + sizeDiff },\r\n },\r\n ])\r\n } else if (minWinWidth && isResizeActive) {\r\n commit([\r\n {\r\n winId: win.windowId,\r\n patch: { winWidth: win.WIN_MIN_WIDTH },\r\n },\r\n ])\r\n }\r\n\r\n requestAnimationFrame(() =>\r\n resizer.e(getRafResizeDependencies(win.windowId), commit, neighbourLimit)\r\n )\r\n },\r\n\r\n w: (\r\n resizeDep: ResizeDep,\r\n commit: (patchStack: WindowMutation[]) => void,\r\n neighbourLimit?: number\r\n ) => {\r\n const { wsRect, win, winBox, x } = resizeDep\r\n if (!win.resizeAction) return\r\n if (!winBox) return\r\n\r\n const cursorOutOfBounds = x > wsRect.right || x < wsRect.left\r\n const sizeDiff = winBox.left - x\r\n\r\n const isResizeActive = !cursorOutOfBounds && sizeDiff !== 0\r\n const minWinWidth = winBox.right - x <= win.WIN_MIN_WIDTH\r\n\r\n const rightMostXAtMinWidth = neighbourLimit\r\n const isNeighbourLimit = rightMostXAtMinWidth && x < rightMostXAtMinWidth\r\n if (isNeighbourLimit) {\r\n commit([\r\n {\r\n winId: win.windowId,\r\n patch: {\r\n winWidth: win.winCoord.pointX - rightMostXAtMinWidth + win.winWidth,\r\n winCoord: {\r\n pointX: rightMostXAtMinWidth,\r\n pointY: win.winCoord.pointY,\r\n },\r\n },\r\n },\r\n ])\r\n } else if (!minWinWidth && isResizeActive) {\r\n commit([\r\n {\r\n winId: win.windowId,\r\n patch: {\r\n winWidth: win.winWidth + sizeDiff,\r\n winCoord: { pointX: x, pointY: win.winCoord.pointY },\r\n },\r\n },\r\n ])\r\n } else if (minWinWidth && isResizeActive) {\r\n commit([\r\n {\r\n winId: win.windowId,\r\n patch: {\r\n winCoord: {\r\n pointX: win.winCoord.pointX + win.winWidth - win.WIN_MIN_WIDTH,\r\n pointY: win.winCoord.pointY,\r\n },\r\n winWidth: win.WIN_MIN_WIDTH,\r\n },\r\n },\r\n ])\r\n }\r\n\r\n requestAnimationFrame(() =>\r\n resizer.w(getRafResizeDependencies(win.windowId), commit, neighbourLimit)\r\n )\r\n },\r\n\r\n n: (\r\n resizeDep: ResizeDep,\r\n commit: (patchStack: WindowMutation[]) => void,\r\n neighbourLimit?: number\r\n ) => {\r\n const { wsRect, win, winBox, y } = resizeDep\r\n if (!win.resizeAction) return\r\n if (!winBox) return\r\n\r\n const cursorOutOfBounds = y > wsRect.bottom || y < wsRect.top\r\n const sizeDiff = winBox.top - y\r\n\r\n const isResizeActive = !cursorOutOfBounds && sizeDiff !== 0\r\n const minWinHeight = winBox.bottom - y <= win.WIN_MIN_HEIGHT\r\n\r\n const bottomMostYAtMinWidth = neighbourLimit\r\n const isNeighbourLimit = bottomMostYAtMinWidth && y < bottomMostYAtMinWidth\r\n if (isNeighbourLimit && isResizeActive) {\r\n commit([\r\n {\r\n winId: win.windowId,\r\n patch: {\r\n winHeight: win.winCoord.pointY - bottomMostYAtMinWidth + win.winHeight,\r\n winCoord: {\r\n pointX: win.winCoord.pointX,\r\n pointY: bottomMostYAtMinWidth,\r\n },\r\n },\r\n },\r\n ])\r\n } else if (!minWinHeight && isResizeActive) {\r\n commit([\r\n {\r\n winId: win.windowId,\r\n patch: {\r\n winHeight: win.winHeight + sizeDiff,\r\n winCoord: { pointX: win.winCoord.pointX, pointY: y },\r\n },\r\n },\r\n ])\r\n } else if (minWinHeight && isResizeActive) {\r\n commit([\r\n {\r\n winId: win.windowId,\r\n patch: {\r\n winHeight: win.WIN_MIN_HEIGHT,\r\n winCoord: {\r\n pointX: win.winCoord.pointX,\r\n pointY: win.winCoord.pointY + win.winHeight - win.WIN_MIN_HEIGHT,\r\n },\r\n },\r\n },\r\n ])\r\n }\r\n\r\n requestAnimationFrame(() =>\r\n resizer.n(getRafResizeDependencies(win.windowId), commit, neighbourLimit)\r\n )\r\n },\r\n\r\n s: (\r\n resizeDep: ResizeDep,\r\n commit: (patchStack: WindowMutation[]) => void,\r\n neighbourLimit?: number\r\n ) => {\r\n const { wsRect, win, winBox, y } = resizeDep\r\n if (!win.resizeAction) return\r\n if (!winBox) return\r\n\r\n const cursorOutOfBounds = y > wsRect.bottom || y < wsRect.top\r\n const sizeDiff = y - winBox.bottom\r\n\r\n const isResizeActive = !cursorOutOfBounds && sizeDiff !== 0\r\n const minWinHeight = y - winBox.top < win.WIN_MIN_HEIGHT\r\n\r\n const topMostYAtMinWidth = neighbourLimit\r\n const isNeighbourLimit = topMostYAtMinWidth && y > topMostYAtMinWidth\r\n if (isNeighbourLimit && isResizeActive) {\r\n commit([\r\n {\r\n winId: win.windowId,\r\n patch: {\r\n winHeight: topMostYAtMinWidth - win.winCoord.pointY,\r\n },\r\n },\r\n ])\r\n } else if (!minWinHeight && isResizeActive) {\r\n commit([\r\n {\r\n winId: win.windowId,\r\n patch: {\r\n winHeight: win.winHeight + sizeDiff,\r\n },\r\n },\r\n ])\r\n } else if (minWinHeight && isResizeActive) {\r\n commit([\r\n {\r\n winId: win.windowId,\r\n patch: { winHeight: win.WIN_MIN_HEIGHT },\r\n },\r\n ])\r\n }\r\n\r\n requestAnimationFrame(() =>\r\n resizer.s(getRafResizeDependencies(win.windowId), commit, neighbourLimit)\r\n )\r\n },\r\n\r\n nw: (resizeDep: ResizeDep, commit: (patchStack: WindowMutation[]) => void) => {\r\n const { wsRect, win, winBox, x, y } = resizeDep\r\n if (!win.resizeAction) return\r\n if (!winBox) return\r\n\r\n const cursorOutOfBoundsY = y > wsRect.bottom || y < wsRect.top\r\n const cursorOutOfBoundsX = x > wsRect.right || x < wsRect.left\r\n const isCursorOutOfBounds = cursorOutOfBoundsY || cursorOutOfBoundsX\r\n if (isCursorOutOfBounds) {\r\n return\r\n }\r\n\r\n const minWinHeight = winBox.bottom - y <= win.WIN_MIN_HEIGHT\r\n const minWinWidth = winBox.right - x <= win.WIN_MIN_WIDTH\r\n\r\n const sizeDiffY = winBox.top - y\r\n const sizeDiffX = winBox.left - x\r\n\r\n if (sizeDiffY !== 0 || sizeDiffX !== 0) {\r\n commit([\r\n {\r\n winId: win.windowId,\r\n patch: {\r\n winWidth: minWinWidth ? win.WIN_MIN_WIDTH : win.winWidth + sizeDiffX,\r\n winHeight: minWinHeight ? win.WIN_MIN_HEIGHT : win.winHeight + sizeDiffY,\r\n winCoord: {\r\n pointX: minWinWidth ? win.winCoord.pointX + win.winWidth - win.WIN_MIN_WIDTH : x,\r\n pointY: minWinHeight ? win.winCoord.pointY + win.winHeight - win.WIN_MIN_HEIGHT : y,\r\n },\r\n },\r\n },\r\n ])\r\n }\r\n\r\n requestAnimationFrame(() => resizer.nw(getRafResizeDependencies(win.windowId), commit))\r\n },\r\n\r\n se: (resizeDep: ResizeDep, commit: (patchStack: WindowMutation[]) => void) => {\r\n resizer.e(resizeDep, commit)\r\n resizer.s(resizeDep, commit)\r\n },\r\n\r\n sw: (resizeDep: ResizeDep, commit: (patchStack: WindowMutation[]) => void) => {\r\n resizer.w(resizeDep, commit)\r\n resizer.s(resizeDep, commit)\r\n },\r\n\r\n ne: (resizeDep: ResizeDep, commit: (patchStack: WindowMutation[]) => void) => {\r\n resizer.e(resizeDep, commit)\r\n resizer.n(resizeDep, commit)\r\n },\r\n}\r\n\r\ntype ResizeDep = {\r\n wsRect: WorkspaceRect\r\n win: WindowStore\r\n winBox: DOMRect | undefined\r\n x: number\r\n y: number\r\n}\r\n\r\nconst getRafResizeDependencies = (winId: string): ResizeDep => {\r\n const win = windowRegistry[winId].getState()\r\n const winBox = win.winElement?.getBoundingClientRect()\r\n const wsRect = useWorkspaceState.getState().wsRect\r\n const { x, y } = cursorPosition\r\n return { wsRect, win, winBox, x, y }\r\n}\r\n","import { WindowStore } from '../../../model/window-types.js'\r\nimport { WorkspaceStore } from '../../../model/workspace-types.js'\r\nimport { windowRegistry } from '../../../registration/window-registry.js'\r\nimport { useWorkspaceState } from '../../features/workspace/workspace-state.js'\r\n\r\nexport const MAX_HISTORY = 100\r\nconst excludedCommands = [\r\n 'UPDATE_WORKSPACE_SIZE',\r\n 'SET_RESPONSIVE_BREAK',\r\n 'SET_WORKSPACE_FEATURES',\r\n\r\n 'APPLY_PREVIOUS',\r\n 'APPLY_NEXT',\r\n\r\n 'ENABLE_DRAG',\r\n 'ENABLE_RESIZE',\r\n]\r\n\r\nexport type HistorySnapshot = {\r\n ws: Partial<WorkspaceStore>\r\n winState: Partial<WindowStore>[]\r\n}\r\n\r\nexport const appHistory: {\r\n snapshots: HistorySnapshot[]\r\n ptr: number\r\n} = {\r\n snapshots: [],\r\n ptr: -1,\r\n}\r\n\r\nexport function saveSnapshot(cmd: string) {\r\n if (excludedCommands.includes(cmd)) return\r\n\r\n const snapshot = getSnapshot()\r\n if (!snapshot) return\r\n\r\n if (appHistory.ptr < appHistory.snapshots.length - 1) {\r\n appHistory.snapshots = appHistory.snapshots.slice(0, appHistory.ptr + 1)\r\n }\r\n\r\n appHistory.snapshots.push(snapshot)\r\n\r\n if (appHistory.snapshots.length > MAX_HISTORY) {\r\n appHistory.snapshots.shift()\r\n }\r\n\r\n appHistory.ptr = appHistory.snapshots.length - 1\r\n}\r\n\r\nconst getSnapshot = (): HistorySnapshot | undefined => {\r\n const { wsElement, setWsElement, ...wsSnapshot } = useWorkspaceState.getState()\r\n const wsUpdate = structuredClone(wsSnapshot)\r\n\r\n const winStateSnapshots: Partial<WindowStore>[] = []\r\n for (const key of Object.keys(windowRegistry)) {\r\n const { winElement, setWinElement, isDragging, resizeAction, ...windowSnapshot } =\r\n windowRegistry[key].getState()\r\n\r\n winStateSnapshots.push(structuredClone(windowSnapshot))\r\n }\r\n\r\n if (!isValidSnapshot(winStateSnapshots)) {\r\n return\r\n }\r\n\r\n return {\r\n ws: wsUpdate,\r\n winState: winStateSnapshots,\r\n }\r\n}\r\n\r\nconst isValidSnapshot = (winStateSnapshots: Partial<WindowStore>[]) => {\r\n if (appHistory.ptr < 0) return true\r\n const prevSnapshot = appHistory.snapshots[appHistory.ptr].winState\r\n\r\n for (const newWinState of winStateSnapshots) {\r\n for (const prevWinState of prevSnapshot) {\r\n if (newWinState.windowId !== prevWinState.windowId) continue\r\n\r\n if (\r\n newWinState.zIndex !== prevWinState.zIndex ||\r\n newWinState.winVisualState !== prevWinState.winVisualState ||\r\n newWinState.isWindowClosed !== prevWinState.isWindowClosed ||\r\n newWinState.winCoord?.pointX !== prevWinState.winCoord?.pointX ||\r\n newWinState.winCoord?.pointY !== prevWinState.winCoord?.pointY ||\r\n newWinState.winWidth !== prevWinState.winWidth ||\r\n newWinState.winHeight !== prevWinState.winHeight\r\n )\r\n return true\r\n }\r\n }\r\n\r\n return false\r\n}\r\n","import { BatchMutation, WindowMutation } from '../rwm-runtime.js'\r\nimport { appHistory } from './app-history.js'\r\n\r\nexport type HistoryCommands = 'APPLY_PREVIOUS' | 'APPLY_NEXT' | 'CLEAR_HISTORY'\r\n\r\ntype HistoryResolver = Record<HistoryCommands, () => BatchMutation>\r\nexport const historyCommandResolver: HistoryResolver = {\r\n APPLY_PREVIOUS: () => {\r\n if (appHistory.ptr <= 0) return { ws: {}, win: [] }\r\n\r\n appHistory.ptr -= 1\r\n const snapshot = appHistory.snapshots[appHistory.ptr]\r\n\r\n const wsUpdate = snapshot.ws\r\n const winBatchUpdate: WindowMutation[] = []\r\n\r\n snapshot.winState.forEach((win) => {\r\n const { windowId, setWinElement, ...state } = win\r\n winBatchUpdate.push({\r\n winId: windowId!,\r\n patch: { ...state },\r\n })\r\n })\r\n\r\n return {\r\n ws: wsUpdate,\r\n win: winBatchUpdate,\r\n }\r\n },\r\n\r\n APPLY_NEXT: () => {\r\n if (appHistory.ptr >= appHistory.snapshots.length - 1) return { ws: {}, win: [] }\r\n\r\n appHistory.ptr += 1\r\n const snapshot = appHistory.snapshots[appHistory.ptr]\r\n\r\n const wsUpdate = snapshot.ws\r\n const winBatchUpdate: WindowMutation[] = []\r\n\r\n snapshot.winState.forEach((win) => {\r\n const { windowId, setWinElement, ...state } = win\r\n winBatchUpdate.push({\r\n winId: windowId!,\r\n patch: { ...state },\r\n })\r\n })\r\n\r\n return {\r\n ws: wsUpdate,\r\n win: winBatchUpdate,\r\n }\r\n },\r\n CLEAR_HISTORY: () => {\r\n appHistory.ptr = -1\r\n appHistory.snapshots = []\r\n\r\n return {\r\n ws: {},\r\n win: [],\r\n }\r\n },\r\n}\r\n","import { ResizeDirection, WindowStore } from '../../model/window-types.js'\r\nimport { windowRegistry } from '../../registration/window-registry.js'\r\nimport { useWorkspaceState } from '../features/workspace/workspace-state.js'\r\nimport { dockCommandResolver, DockCommands } from './dock-resolver/dock-commands.js'\r\nimport { rafDragLoopResolver, RafDragCommands } from './drag-resolver/drag-loop.js'\r\nimport { dragCommandResolver, DragCommands } from './drag-resolver/drag-commands.js'\r\nimport { focusCommandResolver, FocusCommands } from './focus-resolver/focus-commands.js'\r\nimport {\r\n workspaceCommandResolver,\r\n WorkspaceCommands,\r\n WorkspaceCtx,\r\n} from './workspace-resolver/workspace-commands.js'\r\nimport { resizeCommandResolver, ResizeCommands } from './resize-resolver/resize-commands.js'\r\nimport { RafResizeCommands, rafResizeLoopResolver } from './resize-resolver/resize-loop.js'\r\nimport { WorkspaceStore } from '../../model/workspace-types.js'\r\nimport { HistorySnapshot, saveSnapshot } from './history-resolver/app-history.js'\r\nimport { historyCommandResolver, HistoryCommands } from './history-resolver/history-commands.js'\r\n\r\n/**\r\n * FIND ME:\r\n * \r\n * 1. do we need a STACK subsystem? \r\n * \r\n * 2. Subsystem structure needs formalization\r\n => getDependencies\r\n => policy\r\n => stageChanges\r\n => commitChanges\r\n */\r\n\r\ntype rwmMessage =\r\n | { targetWinId: string; subsystem: 'DOCK'; cmd: DockCommands; ctx?: undefined }\r\n | { targetWinId: string; subsystem: 'DRAG'; cmd: DragCommands; ctx?: undefined }\r\n | { targetWinId: string; subsystem: 'FOCUS'; cmd: FocusCommands; ctx?: undefined }\r\n | { targetWinId: string; subsystem: 'RESIZE'; cmd: ResizeCommands; ctx: ResizeDirection }\r\n | { targetWinId?: string; subsystem: 'WORKSPACE'; cmd: WorkspaceCommands; ctx?: WorkspaceCtx }\r\n | { targetWinId?: string; subsystem: 'HISTORY'; cmd: HistoryCommands; ctx?: HistorySnapshot }\r\n\r\nexport const rwmRuntime = {\r\n dispatch: ({ subsystem, cmd, targetWinId, ctx }: rwmMessage): void => {\r\n switch (subsystem) {\r\n case 'WORKSPACE': {\r\n const stagedChanges = workspaceCommandResolver[cmd](targetWinId, ctx)\r\n commitBatch(stagedChanges)\r\n break\r\n }\r\n case 'DRAG': {\r\n if (useWorkspaceState.getState().isBelowBreakPoint) return\r\n const stagedChanges = dragCommandResolver[cmd](targetWinId)\r\n commitToWindow(stagedChanges)\r\n break\r\n }\r\n case 'DOCK': {\r\n const { wsRect } = useWorkspaceState.getState()\r\n const stagedChanges = dockCommandResolver[cmd](targetWinId, wsRect)\r\n commitToWindow(stagedChanges)\r\n break\r\n }\r\n case 'RESIZE': {\r\n const stagedChanges = resizeCommandResolver[cmd](targetWinId, ctx)\r\n commitToWindow(stagedChanges)\r\n break\r\n }\r\n case 'FOCUS': {\r\n const stagedChanges = focusCommandResolver[cmd](targetWinId)\r\n commitBatch(stagedChanges)\r\n break\r\n }\r\n case 'HISTORY': {\r\n const stagedChanges = historyCommandResolver[cmd]()\r\n commitBatch(stagedChanges)\r\n break\r\n }\r\n\r\n default:\r\n throw new Error(\r\n `Unregistered rwmRuntime subsystem called: ${{ subsystem, cmd, targetWinId, ctx }}`\r\n )\r\n }\r\n\r\n saveSnapshot(cmd)\r\n },\r\n}\r\n\r\ntype rafMessage =\r\n | { targetWinId: string; subsystem: 'RAF_DRAG'; cmd: RafDragCommands }\r\n | { targetWinId: string; subsystem: 'RAF_RESIZE'; cmd: RafResizeCommands }\r\n\r\nexport const rafRuntime = {\r\n dispatch: ({ subsystem, cmd, targetWinId }: rafMessage): void => {\r\n switch (subsystem) {\r\n case 'RAF_DRAG': {\r\n if (useWorkspaceState.getState().isBelowBreakPoint) return\r\n rafDragLoopResolver[cmd](targetWinId, commitToWindow)\r\n break\r\n }\r\n case 'RAF_RESIZE': {\r\n rafResizeLoopResolver[cmd](targetWinId, commitToWindow)\r\n break\r\n }\r\n\r\n default:\r\n throw new Error(\r\n `Unregistered rafRuntime subsystem called: ${{ subsystem, cmd, targetWinId }}`\r\n )\r\n }\r\n },\r\n}\r\n\r\nexport type BatchMutation = { ws: WorkspaceMutation; win: WindowMutation[] }\r\nfunction commitBatch({ win, ws }: BatchMutation) {\r\n commitToWorkspace(ws)\r\n commitToWindow(win)\r\n}\r\n\r\nexport type WindowMutation = { winId: string; patch: Partial<WindowStore> }\r\nfunction commitToWindow(patchStack: WindowMutation[]) {\r\n patchStack.forEach(({ winId, patch }) => {\r\n windowRegistry[winId].setState(patch)\r\n })\r\n}\r\n\r\nexport type WorkspaceMutation = Partial<WorkspaceStore>\r\nfunction commitToWorkspace(patch: WorkspaceMutation) {\r\n if (patch) {\r\n useWorkspaceState.setState(patch)\r\n }\r\n}\r\n","import { rwmRuntime } from '../../runtime/rwm-runtime.js'\r\n\r\nexport const dockApi = {\r\n dockWindowRight: (winId: string) =>\r\n rwmRuntime.dispatch({\r\n targetWinId: winId,\r\n subsystem: 'DOCK',\r\n cmd: 'DOCK_WINDOW_RIGHT',\r\n }),\r\n\r\n dockWindowLeft: (winId: string) =>\r\n rwmRuntime.dispatch({\r\n targetWinId: winId,\r\n subsystem: 'DOCK',\r\n cmd: 'DOCK_WINDOW_LEFT',\r\n }),\r\n\r\n dockWindowTop: (winId: string) =>\r\n rwmRuntime.dispatch({\r\n targetWinId: winId,\r\n subsystem: 'DOCK',\r\n cmd: 'DOCK_WINDOW_TOP',\r\n }),\r\n\r\n dockWindowBottom: (winId: string) =>\r\n rwmRuntime.dispatch({\r\n targetWinId: winId,\r\n subsystem: 'DOCK',\r\n cmd: 'DOCK_WINDOW_BOTTOM',\r\n }),\r\n\r\n dockWindowBottomRight: (winId: string) =>\r\n rwmRuntime.dispatch({\r\n targetWinId: winId,\r\n subsystem: 'DOCK',\r\n cmd: 'DOCK_WINDOW_BOTTOM_RIGHT',\r\n }),\r\n\r\n dockWindowTopRight: (winId: string) =>\r\n rwmRuntime.dispatch({\r\n targetWinId: winId,\r\n subsystem: 'DOCK',\r\n cmd: 'DOCK_WINDOW_TOP_RIGHT',\r\n }),\r\n\r\n dockWindowBottomLeft: (winId: string) =>\r\n rwmRuntime.dispatch({\r\n targetWinId: winId,\r\n subsystem: 'DOCK',\r\n cmd: 'DOCK_WINDOW_BOTTOM_LEFT',\r\n }),\r\n\r\n dockWindowTopLeft: (winId: string) =>\r\n rwmRuntime.dispatch({\r\n targetWinId: winId,\r\n subsystem: 'DOCK',\r\n cmd: 'DOCK_WINDOW_TOP_LEFT',\r\n }),\r\n\r\n maximizeWindow: (winId: string) =>\r\n rwmRuntime.dispatch({\r\n targetWinId: winId,\r\n subsystem: 'DOCK',\r\n cmd: 'MAXIMIZE_WINDOW',\r\n }),\r\n\r\n demaximizeWindow: (winId: string) =>\r\n rwmRuntime.dispatch({\r\n targetWinId: winId,\r\n subsystem: 'DOCK',\r\n cmd: 'DEMAXIMIZE_WINDOW',\r\n }),\r\n}\r\n","import { rwmRuntime } from '../../runtime/rwm-runtime.js'\r\n\r\nexport const focusApi = {\r\n bringWindowToFocus: (targetId: string) => {\r\n rwmRuntime.dispatch({\r\n targetWinId: targetId,\r\n subsystem: 'FOCUS',\r\n cmd: 'FOCUS_WINDOW',\r\n })\r\n },\r\n\r\n closeWindowAndRefocus: (targetId: string) => {\r\n rwmRuntime.dispatch({\r\n targetWinId: targetId,\r\n subsystem: 'FOCUS',\r\n cmd: 'CLOSE_WINDOW_AND_REFOCUS',\r\n })\r\n },\r\n}\r\n","import { ResponsiveSizes } from '../../../model/workspace-types.js'\r\nimport { rwmRuntime } from '../../runtime/rwm-runtime.js'\r\nimport { WorkspaceCtx } from '../../runtime/workspace-resolver/workspace-commands.js'\r\n\r\nexport const wsApi = {\r\n /**\r\n * Always relative to the WorkspaceLayout dimensions. Use `wsApi.setWsResponsiveBreak` to modify the value\r\n * @default 'sm'\r\n * @param sm uses mobile format at 640px\r\n * @param md uses mobile format at 768px\r\n * @param lg uses mobile format at 1024px\r\n * @param xl uses mobile format at 1280px\r\n * @param never never uses mobile format\r\n * @param always always uses mobile format\r\n * @param number set custom break point value in px */\r\n setWsResponsiveBreak: (breakPoint: ResponsiveSizes) => {\r\n rwmRuntime.dispatch({\r\n subsystem: 'WORKSPACE',\r\n cmd: 'SET_RESPONSIVE_BREAK',\r\n ctx: { responsiveBreak: breakPoint },\r\n })\r\n },\r\n\r\n setWsFeatures: ({ isDockPanelEnabled = true, isGridEnabled = true }: WorkspaceCtx) => {\r\n rwmRuntime.dispatch({\r\n subsystem: 'WORKSPACE',\r\n cmd: 'SET_WORKSPACE_FEATURES',\r\n ctx: { isDockPanelEnabled: isDockPanelEnabled, isGridEnabled: isGridEnabled },\r\n })\r\n },\r\n\r\n updateWsSize: () => {\r\n rwmRuntime.dispatch({ subsystem: 'WORKSPACE', cmd: 'UPDATE_WORKSPACE_SIZE' })\r\n },\r\n}\r\n","import { dockApi } from './internal/features/docking/docking-api.js'\r\nimport { focusApi } from './internal/features/focus/focus-api.js'\r\nimport { wsApi } from './internal/features/workspace/workspace-api.js'\r\nimport { useWorkspaceState } from './internal/features/workspace/workspace-state.js'\r\nimport { windowRegistry } from './registration/window-registry.js'\r\n\r\nconst { updateWsSize, ...publicWsApi } = wsApi\r\n\r\nconst rwm = {\r\n dockApi: dockApi,\r\n focusApi: focusApi,\r\n workspaceApi: publicWsApi,\r\n\r\n /**\r\n * @about\r\n * Zustand hook, can be used to access the current state of the workspace by either\r\n * calling `const { <someState> } = workspaceState()` inside a component or by calling\r\n * `workspaceState.getState()` anywhere.\r\n *\r\n * @note\r\n * The hook also exposes the `setState()` method, however, this is highly discouraged. Prefer calling\r\n * the exposed apis in rwm for state mutation.\r\n */\r\n workspaceState: useWorkspaceState,\r\n\r\n /**\r\n * @about\r\n * use the syntax `const { <someState> } = windowRegistry[<winId>]()` inside a component to access\r\n * the zustand hook or `windowRegistry[<winId>].getState()` to get the current state of a window anywhere\r\n *\r\n * @note\r\n * Each hook also exposes the `setState()` method, however, this is highly discouraged. Prefer calling\r\n * the exposed apis in rwm for state mutation.\r\n */\r\n windowRegistry: windowRegistry,\r\n}\r\n\r\nexport default rwm\r\n","import { useEffect, useRef } from 'react'\r\nimport { useWorkspaceState } from './internal/features/workspace/workspace-state.js'\r\nimport DockingControls from './internal/features/docking/docking-controls.js'\r\nimport { resizeApi } from './internal/features/resizing/resizing-api.js'\r\nimport { CursorMoveListener } from './internal/features/cursor/cursor-move-listener.js'\r\nimport WorkspaceResizeListener from './internal/features/workspace/workspace-resize-listener.js'\r\nimport { dragApi } from './internal/features/drag/drag-api.js'\r\nimport { HistoryKeysListener } from './internal/features/history/history-keys-listener.js'\r\n\r\ntype Props = {\r\n children: React.ReactNode\r\n className?: string\r\n}\r\n\r\nexport default function WorkspaceLayout({ children, className }: Props) {\r\n const { setWsElement, wsElement, isBelowBreakPoint, activeWindowId } = useWorkspaceState()\r\n const workspaceRef = useRef<HTMLElement | null>(null)\r\n\r\n useEffect(() => {\r\n if (!workspaceRef.current) return\r\n setWsElement(workspaceRef.current)\r\n }, [wsElement])\r\n\r\n const disabledDragAndResize = () => {\r\n dragApi.stopDrag(activeWindowId)\r\n resizeApi.stopResize(activeWindowId)\r\n }\r\n\r\n return (\r\n <section\r\n id=\"rwm-workspace-layout\"\r\n ref={workspaceRef}\r\n onPointerLeave={disabledDragAndResize}\r\n onPointerUp={disabledDragAndResize}\r\n className={className ? className : 'fixed overflow-hidden h-full w-full touch-none -z-50'}\r\n >\r\n <WorkspaceResizeListener />\r\n <HistoryKeysListener />\r\n <CursorMoveListener />\r\n <div className=\" w-full h-full relative overflow-hidden\">\r\n {!isBelowBreakPoint && <DockingControls />}\r\n {children}\r\n </div>\r\n </section>\r\n )\r\n}\r\n","import { useState } from 'react'\r\nimport { windowRegistry } from '../../../registration/window-registry.js'\r\nimport { useWorkspaceState } from '../workspace/workspace-state.js'\r\nimport { dockApi } from './docking-api.js'\r\n\r\nexport default function DockingControls() {\r\n const [isHovering, setIsHovering] = useState(false)\r\n\r\n const { activeWindowId, isDockPanelEnabled, isBelowBreakPoint } = useWorkspaceState()\r\n const { isDragging } = windowRegistry[activeWindowId]()\r\n\r\n const cornerDockControl = (\r\n <div className={`flex xl:p-0 shrink-0 gap-0.5`}>\r\n <div className=\"flex flex-col justify-center gap-0.5\">\r\n <button\r\n className=\"hover:bg-zinc-300 border border-zinc-500 bg-zinc-600 w-10 h-6 rounded-sm\"\r\n onPointerUp={() => dockApi.dockWindowTopLeft(activeWindowId)}\r\n ></button>\r\n <button\r\n className=\"hover:bg-zinc-300 border border-zinc-500 bg-zinc-600 w-10 h-6 rounded-sm\"\r\n onPointerUp={() => dockApi.dockWindowBottomLeft(activeWindowId)}\r\n ></button>\r\n </div>\r\n <div className=\"flex flex-col justify-center gap-0.5\">\r\n <button\r\n className=\"hover:bg-zinc-300 border border-zinc-500 bg-zinc-600 w-10 h-6 rounded-sm\"\r\n onPointerUp={() => dockApi.dockWindowTopRight(activeWindowId)}\r\n ></button>\r\n <button\r\n className=\"hover:bg-zinc-300 border border-zinc-500 bg-zinc-600 w-10 h-6 rounded-sm\"\r\n onPointerUp={() => dockApi.dockWindowBottomRight(activeWindowId)}\r\n ></button>\r\n </div>\r\n </div>\r\n )\r\n\r\n const sideDideControl = (\r\n <div className={`flex shrink-0 items-center gap-0.5`}>\r\n <button\r\n className=\"hover:bg-zinc-300 border border-zinc-500 bg-zinc-600 w-8 h-12 rounded-sm\"\r\n onPointerUp={() => dockApi.dockWindowLeft(activeWindowId)}\r\n ></button>\r\n <button\r\n className=\"hover:bg-zinc-300 border border-zinc-500 bg-zinc-600 w-8 h-12 rounded-sm\"\r\n onPointerUp={() => dockApi.dockWindowRight(activeWindowId)}\r\n ></button>\r\n </div>\r\n )\r\n\r\n const horizontalDockControl = (\r\n <div className={`flex flex-col shrink-0 items-center gap-0.5`}>\r\n <button\r\n className=\"hover:bg-zinc-300 border border-zinc-500 bg-zinc-600 w-14 h-6 rounded-sm\"\r\n onPointerUp={() => dockApi.dockWindowTop(activeWindowId)}\r\n ></button>\r\n <button\r\n className=\"hover:bg-zinc-300 border border-zinc-500 bg-zinc-600 w-14 h-6 rounded-sm\"\r\n onPointerUp={() => dockApi.dockWindowBottom(activeWindowId)}\r\n ></button>\r\n </div>\r\n )\r\n\r\n const windowDockPanel = (\r\n <span\r\n className=\"pointer-events-auto px-4 pb-3\"\r\n onPointerOver={() => setIsHovering(true)}\r\n onPointerLeave={() => setIsHovering(false)}\r\n >\r\n <section\r\n className={`\r\n flex w-fit border border-zinc-600 border-t-0 rounded-b-md bg-zinc-800 \r\n overflow-hidden px-8 gap-4 h-full py-4 \r\n `}\r\n >\r\n {cornerDockControl}\r\n {horizontalDockControl}\r\n {sideDideControl}\r\n </section>\r\n </span>\r\n )\r\n\r\n if (isBelowBreakPoint) return\r\n if (!isDockPanelEnabled) return\r\n return (\r\n <>\r\n <div\r\n className={`\r\n ${\r\n isDragging\r\n ? isHovering\r\n ? 'top-0 opacity-50'\r\n : 'top-[-68px] opacity-80'\r\n : 'top-[-104px] opacity-0'\r\n } \r\n transition-all duration-500\r\n absolute z-50 flex items-center justify-center \r\n w-full mx-auto pointer-events-none`}\r\n >\r\n {windowDockPanel}\r\n </div>\r\n </>\r\n )\r\n}\r\n","import { ResizeDirection } from '../../../model/window-types.js'\r\nimport { windowRegistry } from '../../../registration/window-registry.js'\r\nimport { rafRuntime, rwmRuntime } from '../../runtime/rwm-runtime.js'\r\n\r\nexport const resizeApi = {\r\n startResize: (winId: string, direction: ResizeDirection) => {\r\n rwmRuntime.dispatch({\r\n targetWinId: winId,\r\n subsystem: 'RESIZE',\r\n cmd: 'ENABLE_RESIZE',\r\n ctx: direction,\r\n })\r\n rafRuntime.dispatch({ targetWinId: winId, subsystem: 'RAF_RESIZE', cmd: 'LOOP_RESIZE' })\r\n },\r\n\r\n stopResize: (winId: string) => {\r\n const isNotResizing = !windowRegistry[winId].getState().resizeAction\r\n if (isNotResizing) return\r\n\r\n rwmRuntime.dispatch({\r\n targetWinId: winId,\r\n subsystem: 'RESIZE',\r\n cmd: 'DISABLE_RESIZE',\r\n ctx: false,\r\n })\r\n },\r\n}\r\n","import { useEffect } from 'react'\r\nimport { setCursorPosition } from './cursor-state.js'\r\n\r\nexport function CursorMoveListener() {\r\n useEffect(() => {\r\n\r\n const handlePointerMove = (e: PointerEvent) => {\r\n e.preventDefault()\r\n setCursorPosition({ x: e.clientX, y: e.clientY })\r\n }\r\n\r\n window.addEventListener('pointermove', handlePointerMove)\r\n\r\n return () => window.removeEventListener('pointermove', handlePointerMove)\r\n }, [])\r\n\r\n return <></>\r\n}\r\n","import { useEffect } from 'react'\r\nimport { useWorkspaceState } from './workspace-state.js'\r\nimport { wsApi } from './workspace-api.js'\r\nimport { appHistoryApi } from '../history/history-api.js'\r\n\r\nexport default function WorkspaceResizeListener() {\r\n const { wsElement } = useWorkspaceState()\r\n\r\n useEffect(() => {\r\n if (!wsElement) return\r\n\r\n const onResize = () => {\r\n wsApi.updateWsSize()\r\n /* FIND ME:\r\n * Shitty way to deal with history not being compatible with browser resize */\r\n appHistoryApi.clearHistory()\r\n }\r\n\r\n onResize()\r\n const observer = new ResizeObserver(onResize)\r\n\r\n observer.observe(wsElement)\r\n return () => observer.disconnect()\r\n }, [wsElement])\r\n\r\n return <></>\r\n}\r\n","import { rwmRuntime } from '../../runtime/rwm-runtime.js'\r\n\r\nexport const appHistoryApi = {\r\n moveToPreviousSnapshot: () => {\r\n rwmRuntime.dispatch({ subsystem: 'HISTORY', cmd: 'APPLY_PREVIOUS' })\r\n },\r\n\r\n moveToNextSnapshot: () => {\r\n rwmRuntime.dispatch({ subsystem: 'HISTORY', cmd: 'APPLY_NEXT' })\r\n },\r\n\r\n clearHistory: () => {\r\n rwmRuntime.dispatch({ subsystem: 'HISTORY', cmd: 'CLEAR_HISTORY' })\r\n },\r\n}\r\n","import { windowRegistry } from '../../../registration/window-registry.js'\r\nimport { rafRuntime, rwmRuntime } from '../../runtime/rwm-runtime.js'\r\n\r\nexport const dragApi = {\r\n startDrag: (targetWinId: string) => {\r\n rwmRuntime.dispatch({\r\n targetWinId: targetWinId,\r\n subsystem: 'DRAG',\r\n cmd: 'ENABLE_DRAG',\r\n })\r\n rafRuntime.dispatch({ targetWinId: targetWinId, subsystem: 'RAF_DRAG', cmd: 'LOOP_DRAG' })\r\n },\r\n\r\n stopDrag: (targetWinId: string) => {\r\n const isNotDragging =!windowRegistry[targetWinId].getState().isDragging\r\n if (isNotDragging) return\r\n\r\n rwmRuntime.dispatch({\r\n targetWinId: targetWinId,\r\n subsystem: 'DRAG',\r\n cmd: 'DISABLE_DRAG',\r\n })\r\n },\r\n}\r\n","import { useEffect } from 'react'\r\nimport { appHistoryApi } from './history-api.js'\r\n\r\nexport function HistoryKeysListener() {\r\n useEffect(() => {\r\n const handleKeyDown = (e: KeyboardEvent) => {\r\n const ctrlOrCmd = e.metaKey || e.ctrlKey\r\n if (!ctrlOrCmd) return\r\n\r\n if (e.key.toLowerCase() === 'z' && !e.shiftKey) {\r\n e.preventDefault()\r\n appHistoryApi.moveToPreviousSnapshot()\r\n }\r\n\r\n if (e.key.toLowerCase() === 'z' && e.shiftKey) {\r\n e.preventDefault()\r\n appHistoryApi.moveToNextSnapshot()\r\n }\r\n }\r\n\r\n window.addEventListener('keydown', handleKeyDown)\r\n return () => window.removeEventListener('keydown', handleKeyDown)\r\n }, [])\r\n\r\n return <></>\r\n}\r\n","import { create } from 'zustand'\r\nimport {\r\n RwmButtonProps,\r\n RwmWindowProps,\r\n WindowRegistration,\r\n WindowStore,\r\n} from '../model/window-types.js'\r\nimport WindowLayout from '../internal/features/window-layout.js'\r\nimport WindowButton from '../internal/features/window-button.js'\r\nimport { windowRegistry } from './window-registry.js'\r\n\r\nconst defaultMinWidth = 256\r\nconst defaultMinHeight = 64\r\n\r\n/**\r\n * @return `id` auto generated id at the root of the window component.`id` can be used in `windowRegistry` to access the state store associated to this window instnace\r\n * @return\r\n * `store` zustand state store associated to this window instnace\r\n * @return\r\n * `window` JSX component representing an interactive window\r\n * @return\r\n * `button` JSX component that control this window */\r\nexport const createWindowStore = (): WindowRegistration => {\r\n const zIndexAtLaunch = Object.keys(windowRegistry).length + 1\r\n const windowInstanceId = `react-dynamic-window-instance${Object.keys(windowRegistry).length}`\r\n\r\n const storeInstance = create<WindowStore>((set) => ({\r\n setWinElement: (ref: HTMLDivElement | null) => set({ winElement: ref }),\r\n winElement: undefined,\r\n windowId: windowInstanceId,\r\n\r\n zIndex: zIndexAtLaunch,\r\n\r\n winCoord: { pointX: 40, pointY: 40 },\r\n winWidth: defaultMinWidth,\r\n winHeight: defaultMinHeight,\r\n\r\n winVisualState: 'demaximized',\r\n\r\n isActive: false,\r\n isWindowClosed: true,\r\n\r\n isDragging: false,\r\n resizeAction: false,\r\n\r\n WIN_MIN_WIDTH: defaultMinWidth,\r\n WIN_MIN_HEIGHT: defaultMinHeight,\r\n }))\r\n\r\n windowRegistry[windowInstanceId] = storeInstance\r\n\r\n return {\r\n id: storeInstance.getState().windowId,\r\n\r\n store: storeInstance,\r\n\r\n Window: (props: RwmWindowProps) => <WindowLayout {...props} winId={windowInstanceId} />,\r\n\r\n Button: (props: RwmButtonProps) => <WindowButton {...props} winId={windowInstanceId} />,\r\n }\r\n}\r\n","import { useEffect, useRef } from 'react'\r\nimport { IconWinMinimize, IconWinDemaximize, IconWinMaximize } from '../assets/svg-win-icons.js'\r\nimport ResizingControls from './resizing/resizing-controls.js'\r\nimport { windowRegistry } from '../../registration/window-registry.js'\r\nimport { dockApi } from './docking/docking-api.js'\r\nimport DragHandle from './drag/drag-handle.js'\r\nimport { useWorkspaceState } from './workspace/workspace-state.js'\r\nimport { focusApi } from './focus/focus-api.js'\r\nimport { DockPosition } from '../../model/window-types.js'\r\nimport { appHistoryApi } from './history/history-api.js'\r\n\r\nexport type WindowLayoutProps = {\r\n children: React.ReactNode\r\n windowName: string | React.ReactNode\r\n winId: string\r\n navbarChildren?: React.ReactNode\r\n\r\n /**\r\n * @default\r\n * 'bg-white shadow-lg border border-zinc-600 rounded-sm'\r\n */\r\n className?: string\r\n\r\n /**\r\n * @default\r\n * 'bg-neutral-800 ${isActive ? 'brightness-100' : 'brightness-150'}'\r\n */\r\n navbarClassName?: string\r\n\r\n /**\r\n * @default 'deafult'\r\n * @param `deafult` keeps the window near full width but detached from the workspace edges\r\n * @param `full`\r\n * @param `right`\r\n * @param `left`\r\n * @param `top`\r\n * @param `bottom`\r\n * @param `top-right`\r\n * @param `top-left`\r\n * @param `bottom-right`\r\n * @param `bottom-left`\r\n * */\r\n defaultDock?: DockPosition\r\n\r\n /** @note use CSS values such as hex or supported color names */\r\n style?: {\r\n navBackgroundColor?: string\r\n windowBackgroundColor?: string\r\n navControlsColor?: string\r\n }\r\n}\r\n\r\nexport default function WindowLayout({\r\n children,\r\n windowName,\r\n navbarChildren,\r\n navbarClassName,\r\n className,\r\n winId,\r\n defaultDock = 'default',\r\n style,\r\n}: WindowLayoutProps) {\r\n const { wsElement, wsRect, isBelowBreakPoint } = useWorkspaceState()\r\n const windowRef = useRef<HTMLDivElement>(null)\r\n const {\r\n setWinElement,\r\n\r\n windowId,\r\n zIndex,\r\n isActive,\r\n\r\n winVisualState,\r\n\r\n isWindowClosed,\r\n\r\n winCoord,\r\n\r\n winWidth,\r\n winHeight,\r\n } = windowRegistry[winId]()\r\n\r\n useEffect(() => {\r\n setWinElement(windowRef.current)\r\n }, [setWinElement])\r\n\r\n useEffect(() => {\r\n dockingResolver[defaultDock](winId)\r\n appHistoryApi.clearHistory()\r\n /* Initialization is dependent on the workspace (wsElement) being mounted */\r\n }, [wsElement])\r\n\r\n /* FIND ME:\r\n * This needs to die - Need to find a better way to do this */\r\n const dockingResolver: Record<DockPosition, (winId: string) => void> = {\r\n right: dockApi.dockWindowRight,\r\n left: dockApi.dockWindowLeft,\r\n full: dockApi.maximizeWindow,\r\n top: dockApi.dockWindowTop,\r\n bottom: dockApi.dockWindowBottom,\r\n 'top-right': dockApi.dockWindowTopRight,\r\n 'top-left': dockApi.dockWindowTopLeft,\r\n 'bottom-right': dockApi.dockWindowBottomRight,\r\n 'bottom-left': dockApi.dockWindowBottomLeft,\r\n default: dockApi.demaximizeWindow,\r\n }\r\n\r\n const maximizeControl =\r\n winVisualState === 'maximized' ? (\r\n <button\r\n className={`block hover:bg-gray-500 hover:bg-opacity-10 px-5 h-full`}\r\n onClick={() => dockApi.demaximizeWindow(winId)}\r\n >\r\n <IconWinDemaximize color={style?.navControlsColor} />\r\n </button>\r\n ) : (\r\n <button\r\n className={`block hover:bg-gray-500 hover:bg-opacity-10 px-5 h-full`}\r\n onClick={() => dockApi.maximizeWindow(winId)}\r\n >\r\n <IconWinMaximize color={style?.navControlsColor} />\r\n </button>\r\n )\r\n\r\n const closeControl = (\r\n <button\r\n className=\"hover:bg-red-500 hover:bg-opacity-20 px-5 h-full\"\r\n onClick={() => focusApi.closeWindowAndRefocus(winId)}\r\n >\r\n <IconWinMinimize color={style?.navControlsColor} />\r\n </button>\r\n )\r\n\r\n return (\r\n <>\r\n <div\r\n id={windowId}\r\n ref={windowRef}\r\n className={`fixed overflow-hidden ${className ? className : 'bg-white shadow-lg border border-zinc-600 rounded-sm'} `}\r\n onPointerDown={() => focusApi.bringWindowToFocus(windowId)}\r\n style={{\r\n backgroundColor: style?.windowBackgroundColor,\r\n top: isBelowBreakPoint ? wsRect.top : `${winCoord.pointY}px`,\r\n left: isBelowBreakPoint ? wsRect.left : `${winCoord.pointX}px`,\r\n width: isBelowBreakPoint ? wsRect.innerWidth : `${winWidth}px`,\r\n height: isBelowBreakPoint ? wsRect.innerHeight : `${winHeight}px`,\r\n zIndex: `${zIndex}`,\r\n\r\n /* MINIMIZE LOGIC */\r\n transition: 'transform 0.2s ease-in-out, opacity 0.3s ease-in-out',\r\n opacity: isWindowClosed ? 0 : 1,\r\n transform: isWindowClosed\r\n ? `translate(${wsRect.innerWidth / 2 - winCoord.pointX - winWidth / 2}px,\r\n ${wsRect.innerHeight - winCoord.pointY - winHeight / 2}px) scale(0.02)`\r\n : '',\r\n }}\r\n >\r\n <nav\r\n style={{\r\n backgroundColor: style?.navBackgroundColor,\r\n }}\r\n className={`h-[32px] w-full flex items-center\r\n ${\r\n navbarClassName\r\n ? navbarClassName\r\n : `bg-neutral-800 ${isActive ? 'brightness-100' : 'brightness-150'}`\r\n } \r\n `}\r\n >\r\n <div className=\"shrink h-8 px-2 text-white flex items-center text-sm truncate min-w-0\">\r\n {windowName}\r\n </div>\r\n\r\n <div className=\"h-8 px-2 text-white flex items-center text-sm truncate min-w-0\">\r\n {navbarChildren}\r\n </div>\r\n\r\n <DragHandle winId={winId} />\r\n\r\n {!isBelowBreakPoint && maximizeControl}\r\n {closeControl}\r\n </nav>\r\n\r\n {!isBelowBreakPoint && <ResizingControls winId={winId} />}\r\n\r\n {/* Offset the navbar => 'h-[calc(100%-32px)]' */}\r\n <div className={`relative w-full h-[calc(100%-32px)] overflow-auto select-text`}>\r\n {children}\r\n </div>\r\n </div>{' '}\r\n </>\r\n )\r\n}\r\n","type Props = {\r\n color?: string\r\n}\r\n\r\nexport function IconWinMaximize({color}: Props) {\r\n return (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n fill=\"none\"\r\n viewBox=\"0 0 24 24\"\r\n width={24}\r\n height={24}\r\n strokeWidth={1.5}\r\n stroke={color ? color : '#cccccc'}\r\n color={color ? color : '#cccccc'}\r\n className=\"size-6\"\r\n >\r\n <path\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n d=\"M5.25 7.5A2.25 2.25 0 0 1 7.5 5.25h9a2.25 2.25 0 0 1 2.25 2.25v9a2.25 2.25 0 0 1-2.25 2.25h-9a2.25 2.25 0 0 1-2.25-2.25v-9Z\"\r\n />\r\n </svg>\r\n )\r\n}\r\n\r\nexport function IconWinDemaximize({color}: Props) {\r\n return (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n fill=\"none\"\r\n viewBox=\"0 0 24 24\"\r\n width={24}\r\n height={24}\r\n strokeWidth={1.5}\r\n stroke={color ? color : '#cccccc'}\r\n color={color ? color : '#cccccc'}\r\n className=\"size-6\"\r\n >\r\n <path\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n d=\"M16.5 8.25V6a2.25 2.25 0 0 0-2.25-2.25H6A2.25 2.25 0 0 0 3.75 6v8.25A2.25 2.25 0 0 0 6 16.5h2.25m8.25-8.25H18a2.25 2.25 0 0 1 2.25 2.25V18A2.25 2.25 0 0 1 18 20.25h-7.5A2.25 2.25 0 0 1 8.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 0 0-2.25 2.25v6\"\r\n />\r\n </svg>\r\n )\r\n}\r\n\r\nexport function IconWinMinimize({color}: Props) {\r\n return (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n fill=\"none\"\r\n viewBox=\"0 0 24 24\"\r\n width={24}\r\n height={24}\r\n strokeWidth={1.5}\r\n stroke={color ? color : '#cccccc'}\r\n color={color ? color : '#cccccc'}\r\n className=\"size-6\"\r\n >\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M6 18 18 6M6 6l12 12\" />\r\n </svg>\r\n )\r\n}\r\n","import { ResizeDirection, WindowStore } from '../../../model/window-types.js'\r\nimport { windowRegistry } from '../../../registration/window-registry.js'\r\nimport { resizeApi } from '../resizing/resizing-api.js'\r\nimport { useWorkspaceState } from '../workspace/workspace-state.js'\r\n\r\nconst tolerance = 4\r\n\r\ntype resizeCaseDependencies = {\r\n remoteId: string\r\n thisWinStartY: number\r\n thisWinEndY: number\r\n remoteWinStartY: number\r\n remoteWinEndY: number\r\n thisWinStartX: number\r\n thisWinEndX: number\r\n remoteWinStartX: number\r\n remoteWinEndX: number\r\n isRemoteOutside: boolean\r\n}\r\n\r\nexport const resizeOrchestrator = {\r\n initializeResize: (winId: string, direction: ResizeDirection) => {\r\n if (!useWorkspaceState.getState().isGridEnabled) return\r\n\r\n if (getOpenWinCount() < 1)\r\n throw new Error(`gridOrchestrator initalized but all windows are closed`)\r\n\r\n initNeighbourResizeBehavior(winId, new Set<string>(), direction)\r\n resizeApi.startResize(winId, direction)\r\n },\r\n}\r\n\r\nconst initNeighbourResizeBehavior = (\r\n winId: string,\r\n visited: Set<string>,\r\n direction?: ResizeDirection\r\n) => {\r\n if (visited.has(winId)) return\r\n else visited.add(winId)\r\n\r\n const thisWin = windowRegistry[winId].getState()\r\n const currentResize = direction ? direction : thisWin.resizeAction\r\n\r\n for (const key of Object.keys(windowRegistry)) {\r\n const remoteWin = windowRegistry[key].getState()\r\n if (remoteWin.windowId === thisWin.windowId) continue\r\n if (remoteWin.isWindowClosed) continue\r\n if (remoteWin.resizeAction) continue\r\n if (visited.has(remoteWin.windowId)) continue\r\n\r\n const dependencies = buildDependencies(thisWin, remoteWin)\r\n\r\n /* thisWin right edge <::::> remoteWin left edge || remoteWin is stacked up or down */\r\n if (currentResize === 'e') {\r\n const isRemoteConneted = resizeCase.whenDraggingEast(dependencies)\r\n if (isRemoteConneted) initNeighbourResizeBehavior(remoteWin.windowId, visited)\r\n }\r\n\r\n /* thisWin left edge <::::> remoteWin right edge || remoteWin is stacked up or down */\r\n if (currentResize === 'w') {\r\n const isRemoteConneted = resizeCase.whenDragginWest(dependencies)\r\n if (isRemoteConneted) initNeighbourResizeBehavior(remoteWin.windowId, visited)\r\n }\r\n\r\n /* thisWin top edge <::::> remoteWin bottom edge || remoteWin is stacked left or right */\r\n if (currentResize === 'n') {\r\n const isRemoteConneted = resizeCase.whenDragginNorth(dependencies)\r\n if (isRemoteConneted) initNeighbourResizeBehavior(remoteWin.windowId, visited)\r\n }\r\n\r\n /* thisWin bottom edge <::::> remoteWin top edge || remoteWin is stacked left or right */\r\n if (currentResize === 's') {\r\n const isRemoteConneted = resizeCase.whenDraggingSouth(dependencies)\r\n if (isRemoteConneted) initNeighbourResizeBehavior(remoteWin.windowId, visited)\r\n }\r\n }\r\n}\r\n\r\nconst resizeCase = {\r\n whenDraggingEast: (d: resizeCaseDependencies): boolean => {\r\n const isOppositeEdgeAlignedOnXAxis = Math.abs(d.thisWinEndX - d.remoteWinStartX) <= tolerance\r\n const isOverlapOnYAxis =\r\n d.thisWinStartY <= d.remoteWinEndY && d.thisWinEndY >= d.remoteWinStartY\r\n\r\n const isEdgeResize = isOppositeEdgeAlignedOnXAxis && isOverlapOnYAxis\r\n if (isEdgeResize) {\r\n resizeApi.startResize(d.remoteId, 'w')\r\n return true\r\n }\r\n\r\n const isSameEdgeAlignedOnXAxis = Math.abs(d.thisWinEndX - d.remoteWinEndX) <= tolerance\r\n const isRemoteNorthOrSouthEdgeConnected =\r\n Math.abs(d.thisWinEndY - d.remoteWinStartY) < tolerance ||\r\n Math.abs(d.thisWinStartY - d.remoteWinEndY) < tolerance\r\n\r\n const isStackResize = isSameEdgeAlignedOnXAxis && isRemoteNorthOrSouthEdgeConnected\r\n if (isStackResize) {\r\n resizeApi.startResize(d.remoteId, 'e')\r\n return true\r\n }\r\n\r\n return false\r\n },\r\n\r\n whenDragginWest: (d: resizeCaseDependencies): boolean => {\r\n const isOppositeEdgeAlignedOnXAxis = Math.abs(d.thisWinStartX - d.remoteWinEndX) <= tolerance\r\n const isOverlapOnYAxis =\r\n d.thisWinStartY <= d.remoteWinEndY && d.thisWinEndY >= d.remoteWinStartY\r\n\r\n const isEdgeResize = isOppositeEdgeAlignedOnXAxis && isOverlapOnYAxis\r\n if (isEdgeResize) {\r\n resizeApi.startResize(d.remoteId, 'e')\r\n return true\r\n }\r\n\r\n const isSameEdgeAlignedOnXAxis = Math.abs(d.thisWinStartX - d.remoteWinStartX) <= tolerance\r\n const isRemoteNorthOrSouthEdgeConnected =\r\n Math.abs(d.thisWinEndY - d.remoteWinStartY) < tolerance ||\r\n Math.abs(d.thisWinStartY - d.remoteWinEndY) < tolerance\r\n\r\n const isStackResize = isSameEdgeAlignedOnXAxis && isRemoteNorthOrSouthEdgeConnected\r\n if (isStackResize) {\r\n resizeApi.startResize(d.remoteId, 'w')\r\n return true\r\n }\r\n\r\n return false\r\n },\r\n\r\n whenDragginNorth: (d: resizeCaseDependencies): boolean => {\r\n const isOppositeEdgeAlignedOnYAxis = Math.abs(d.thisWinStartY - d.remoteWinEndY) <= tolerance\r\n const isOverlapOnXAxis =\r\n d.thisWinStartX <= d.remoteWinEndX && d.thisWinEndX >= d.remoteWinStartX\r\n\r\n const isEdgeResize = isOppositeEdgeAlignedOnYAxis && isOverlapOnXAxis\r\n if (isEdgeResize) {\r\n resizeApi.startResize(d.remoteId, 's')\r\n return true\r\n }\r\n\r\n const isSameEdgeAlignedOnYAxis = Math.abs(d.thisWinStartY - d.remoteWinStartY) <= tolerance\r\n const isRemoteEastOrWestEdgeConnected =\r\n Math.abs(d.thisWinEndX - d.remoteWinStartX) < tolerance ||\r\n Math.abs(d.thisWinStartX - d.remoteWinEndX) < tolerance\r\n\r\n const isStackResize = isSameEdgeAlignedOnYAxis && isRemoteEastOrWestEdgeConnected\r\n if (isStackResize) {\r\n resizeApi.startResize(d.remoteId, 'n')\r\n return true\r\n }\r\n\r\n return false\r\n },\r\n\r\n whenDraggingSouth: (d: resizeCaseDependencies): boolean => {\r\n const isOppositeEdgeAlignedOnYAxis = Math.abs(d.thisWinEndY - d.remoteWinStartY) <= tolerance\r\n const isOverlapOnXAxis =\r\n d.thisWinStartX <= d.remoteWinEndX && d.thisWinEndX >= d.remoteWinStartX\r\n\r\n const isEdgeResize = isOppositeEdgeAlignedOnYAxis && isOverlapOnXAxis\r\n if (isEdgeResize) {\r\n resizeApi.startResize(d.remoteId, 'n')\r\n return true\r\n }\r\n\r\n const isSameEdgeAlignedOnYAxis = Math.abs(d.thisWinEndY - d.remoteWinEndY) <= tolerance\r\n const isRemoteEastOrWestEdgeConnected =\r\n Math.abs(d.thisWinEndX - d.remoteWinStartX) < tolerance ||\r\n Math.abs(d.thisWinStartX - d.remoteWinEndX) < tolerance\r\n\r\n const isStackResize = isSameEdgeAlignedOnYAxis && isRemoteEastOrWestEdgeConnected\r\n if (isStackResize) {\r\n resizeApi.startResize(d.remoteId, 's')\r\n return true\r\n }\r\n\r\n return false\r\n },\r\n}\r\n\r\nconst buildDependencies = (thisWin: WindowStore, remoteWin: WindowStore) => {\r\n const thisWinStartY = thisWin.winCoord.pointY\r\n const thisWinEndY = thisWin.winCoord.pointY + thisWin.winHeight\r\n\r\n const remoteWinStartY = remoteWin.winCoord.pointY\r\n const remoteWinEndY = remoteWin.winCoord.pointY + remoteWin.winHeight\r\n\r\n const thisWinStartX = thisWin.winCoord.pointX\r\n const thisWinEndX = thisWin.winCoord.pointX + thisWin.winWidth\r\n\r\n const remoteWinStartX = remoteWin.winCoord.pointX\r\n const remoteWinEndX = remoteWin.winCoord.pointX + remoteWin.winWidth\r\n\r\n const isRemoteOutside =\r\n remoteWinEndY !== thisWinEndY ||\r\n remoteWinEndX !== thisWinEndX ||\r\n remoteWinStartY !== thisWinStartY ||\r\n remoteWinStartX !== thisWinStartX\r\n\r\n return {\r\n remoteId: remoteWin.windowId,\r\n thisWinStartY: thisWinStartY,\r\n thisWinEndY: thisWinEndY,\r\n remoteWinStartY: remoteWinStartY,\r\n remoteWinEndY: remoteWinEndY,\r\n thisWinStartX: thisWinStartX,\r\n thisWinEndX: thisWinEndX,\r\n remoteWinStartX: remoteWinStartX,\r\n remoteWinEndX: remoteWinEndX,\r\n isRemoteOutside: isRemoteOutside,\r\n }\r\n}\r\n\r\nconst getOpenWinCount = () => {\r\n let openWnidowCount = 0\r\n for (const key of Object.keys(windowRegistry))\r\n if (!windowRegistry[key].getState().isWindowClosed) openWnidowCount++\r\n\r\n return openWnidowCount\r\n}\r\n","import { ResizeDirection } from '../../../model/window-types.js'\r\nimport { windowRegistry } from '../../../registration/window-registry.js'\r\nimport { resizeApi } from './resizing-api.js'\r\nimport { resizeOrchestrator } from '../grid/grid-orchestrator.js'\r\n\r\ntype Props = {\r\n winId: string\r\n}\r\n\r\nexport default function ResizingControls({ winId }: Props) {\r\n const { winCoord, winWidth, winHeight, resizeAction } = windowRegistry[winId]()\r\n\r\n const startResize = (direction: ResizeDirection) => {\r\n resizeOrchestrator.initializeResize(winId, direction)\r\n }\r\n\r\n const stopResize = () => {\r\n resizeApi.stopResize(winId)\r\n }\r\n\r\n return (\r\n <>\r\n <span\r\n onPointerUp={stopResize}\r\n onPointerDown={() => startResize('e')}\r\n id=\"win-resize-right-width\"\r\n className={`fixed w-2 ${resizeAction === 'e' ? 'opacity-50' : ''} opacity-0 mix-blend-difference cursor-w-resize z-10 flex-col flex justify-center items-center overflow-hidden`}\r\n style={{\r\n top: `${winCoord.pointY}px`,\r\n left: `${winCoord.pointX + winWidth - 4}px`,\r\n height: `${winHeight}px`,\r\n }}\r\n >\r\n <div className={`w-1 h-full bg-zinc-50`}></div>\r\n </span>\r\n <span\r\n onPointerUp={stopResize}\r\n onPointerDown={() => startResize('w')}\r\n id=\"win-resize-left-width\"\r\n className={`fixed w-2 ${resizeAction === 'w' ? 'opacity-50' : ''} opacity-0 mix-blend-difference cursor-w-resize z-10 flex-col flex justify-center items-center`}\r\n style={{\r\n top: `${winCoord.pointY}px`,\r\n left: `${winCoord.pointX - 4}px`,\r\n height: `${winHeight}px`,\r\n }}\r\n >\r\n <div className={`w-1 h-full bg-zinc-50`}></div>\r\n </span>\r\n <span\r\n onPointerUp={stopResize}\r\n onPointerDown={() => startResize('s')}\r\n id=\"win-resize-bottom-height\"\r\n className={`fixed h-2 ${resizeAction === 's' ? 'opacity-50' : ''} opacity-0 mix-blend-difference cursor-s-resize z-10 flex justify-center items-center`}\r\n style={{\r\n top: `${winCoord.pointY + winHeight - 4}px`,\r\n left: `${winCoord.pointX}px`,\r\n width: `${winWidth}px`,\r\n }}\r\n >\r\n <div className={`w-full h-1 bg-zinc-50`}></div>\r\n </span>\r\n <span\r\n onPointerUp={stopResize}\r\n onPointerDown={() => startResize('n')}\r\n id=\"win-resize-top-height\"\r\n className={`fixed h-2 ${resizeAction === 'n' ? 'opacity-50' : ''} opacity-0 mix-blend-difference cursor-s-resize z-10 flex justify-center items-center`}\r\n style={{\r\n top: `${winCoord.pointY - 4}px`,\r\n left: `${winCoord.pointX}px`,\r\n width: `${winWidth}px`,\r\n }}\r\n >\r\n <div className={`w-full h-1 bg-zinc-50`}></div>\r\n </span>\r\n <span\r\n onPointerUp={stopResize}\r\n onPointerDown={() => startResize('se')}\r\n id=\"win-resize-bottom-right-all\"\r\n className=\"fixed h-3 w-3 opacity-60 cursor-se-resize z-20\"\r\n style={{\r\n top: `${winCoord.pointY + winHeight - 8}px`,\r\n left: `${winCoord.pointX + winWidth - 8}px`,\r\n }}\r\n ></span>\r\n <span\r\n onPointerUp={stopResize}\r\n onPointerDown={() => startResize('sw')}\r\n id=\"win-resize-bottom-left-all\"\r\n className=\"fixed h-3 w-3 opacity-60 cursor-sw-resize z-20\"\r\n style={{\r\n top: `${winCoord.pointY + winHeight - 8}px`,\r\n left: `${winCoord.pointX - 8}px`,\r\n }}\r\n ></span>\r\n\r\n <span\r\n onPointerUp={stopResize}\r\n onPointerDown={() => startResize('ne')}\r\n id=\"win-resize-top-right-all\"\r\n className=\"fixed h-3 w-3 opacity-60 cursor-ne-resize z-20\"\r\n style={{\r\n top: `${winCoord.pointY - 8}px`,\r\n left: `${winCoord.pointX + winWidth - 8}px`,\r\n }}\r\n ></span>\r\n <span\r\n onPointerUp={stopResize}\r\n onPointerDown={() => startResize('nw')}\r\n id=\"win-resize-top-left-all\"\r\n className=\"fixed h-3 w-3 opacity-60 cursor-nw-resize z-20\"\r\n style={{\r\n top: `${winCoord.pointY - 8}px`,\r\n left: `${winCoord.pointX - 8}px`,\r\n }}\r\n ></span>\r\n </>\r\n )\r\n}\r\n","import { dockApi } from '../docking/docking-api.js'\r\nimport { dragApi } from './drag-api.js'\r\n\r\ntype Props = {\r\n winId: string\r\n}\r\n\r\nexport default function DragHandle({ winId }: Props) {\r\n return (\r\n <div\r\n onPointerDown={() => dragApi.startDrag(winId)}\r\n onPointerUp={() => dragApi.stopDrag(winId)}\r\n onDoubleClick={() => dockApi.maximizeWindow(winId)}\r\n className={`\r\n grow min-w-8 h-8 px-2 text-white flex items-center text-sm bg-zinc-100 bg-opacity-0 \r\n hover:bg-opacity-20 hover:mix-blend-overlay`}\r\n ></div>\r\n )\r\n}\r\n","import { windowRegistry } from '../../registration/window-registry.js'\r\nimport { focusApi } from './focus/focus-api.js'\r\n\r\nexport type WindowButtonProps = {\r\n children: React.ReactNode\r\n winId: string\r\n className?: string\r\n\r\n /** @default 'brightness-[85%] border-t-2 border-t-transparent' */\r\n isClosedClassName?: string\r\n\r\n /** @default 'brightness-150 border-t-2 border-t-transparent' */\r\n isOpenClassName?: string\r\n\r\n /** @default 'brightness-150 border-t-2 border-zinc-400 bg-zinc-50/10' */\r\n isActiveClassName?: string\r\n}\r\n\r\nexport default function WindowButton({\r\n children,\r\n winId,\r\n className,\r\n isClosedClassName = 'brightness-[85%] border-t-2 border-t-transparent',\r\n isOpenClassName = 'brightness-150 border-t-2 border-t-transparent',\r\n isActiveClassName = 'brightness-150 border-t-2 border-zinc-400 bg-zinc-50/10',\r\n}: WindowButtonProps) {\r\n const { isWindowClosed, windowId, isActive } = windowRegistry[winId]()\r\n\r\n const handleOpenCloseWin = () => {\r\n if (!isWindowClosed && isActive) {\r\n focusApi.closeWindowAndRefocus(windowId)\r\n } else {\r\n focusApi.bringWindowToFocus(windowId)\r\n }\r\n }\r\n\r\n return (\r\n <button\r\n id={`${windowId}_button`}\r\n onClick={handleOpenCloseWin}\r\n className={`\r\n ${className} \r\n ${isWindowClosed ? isClosedClassName : isActive ? isActiveClassName : isOpenClassName}\r\n `}\r\n >\r\n {children}\r\n </button>\r\n )\r\n}\r\n"],"mappings":"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","names":["useEffect","Fragment","jsx","useEffect","Fragment","jsx","useEffect","useEffect","Fragment","jsx","useEffect","jsx","jsxs","useEffect","create","useEffect","useRef","jsx","Fragment","jsx","jsxs","jsx","Fragment","jsx","jsxs","useRef","useEffect","jsx","jsx","create"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cursor-state.d.ts","sourceRoot":"","sources":["../../../../../src/window-manager/internal/features/cursor/cursor-state.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cursor-state.d.ts","sourceRoot":"","sources":["../../../../../src/window-manager/internal/features/cursor/cursor-state.ts"],"names":[],"mappings":"AAAA,KAAK,WAAW,GAAG;IACjB,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;CACV,CAAA;AAED,eAAO,MAAM,cAAc;;;CAG1B,CAAA;AAED,eAAO,MAAM,iBAAiB,aAAc,WAAW,SAGtD,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docking-area-orchestrator.d.ts","sourceRoot":"","sources":["../../../../../src/window-manager/internal/features/docking/docking-area-orchestrator.ts"],"names":[],"mappings":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docking-controls.d.ts","sourceRoot":"","sources":["../../../../../src/window-manager/internal/features/docking/docking-controls.tsx"],"names":[],"mappings":"AAKA,MAAM,CAAC,OAAO,UAAU,eAAe,
|
|
1
|
+
{"version":3,"file":"docking-controls.d.ts","sourceRoot":"","sources":["../../../../../src/window-manager/internal/features/docking/docking-controls.tsx"],"names":[],"mappings":"AAKA,MAAM,CAAC,OAAO,UAAU,eAAe,wDAiGtC"}
|