@gustavolmo/react-window-manager 0.3.0 → 0.4.0
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.css.map +1 -1
- package/dist/index.js +1290 -734
- package/dist/index.js.map +1 -1
- package/dist/window-manager/internal/features/cursor/cursor-move-listener.d.ts.map +1 -1
- package/dist/window-manager/internal/features/cursor/cursor-state.d.ts +1 -2
- package/dist/window-manager/internal/features/cursor/cursor-state.d.ts.map +1 -1
- package/dist/window-manager/internal/features/docking/docking-api.d.ts +0 -2
- package/dist/window-manager/internal/features/docking/docking-api.d.ts.map +1 -1
- package/dist/window-manager/internal/features/docking/docking-controls.d.ts +1 -1
- 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 +5 -0
- package/dist/window-manager/internal/features/drag/drag-api.d.ts.map +1 -0
- package/dist/window-manager/internal/features/drag/drag-handle.d.ts.map +1 -1
- package/dist/window-manager/internal/features/focus/focus-api.d.ts +5 -0
- package/dist/window-manager/internal/features/focus/focus-api.d.ts.map +1 -0
- package/dist/window-manager/internal/features/grid/grid-orchestrator.d.ts +4 -0
- package/dist/window-manager/internal/features/grid/grid-orchestrator.d.ts.map +1 -0
- package/dist/window-manager/internal/features/resizing/resizing-api.d.ts +3 -4
- package/dist/window-manager/internal/features/resizing/resizing-api.d.ts.map +1 -1
- package/dist/window-manager/internal/features/resizing/resizing-controls.d.ts.map +1 -1
- package/dist/window-manager/internal/features/stack/stack-api.d.ts +0 -2
- package/dist/window-manager/internal/features/stack/stack-api.d.ts.map +1 -1
- package/dist/window-manager/internal/features/window-button.d.ts +5 -3
- package/dist/window-manager/internal/features/window-button.d.ts.map +1 -1
- package/dist/window-manager/internal/features/window-layout.d.ts +14 -2
- package/dist/window-manager/internal/features/window-layout.d.ts.map +1 -1
- package/dist/window-manager/internal/features/workspace/workspace-api.d.ts +15 -3
- 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 +2 -0
- package/dist/window-manager/internal/features/workspace/workspace-resize-listener.d.ts.map +1 -0
- 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 +10 -0
- package/dist/window-manager/internal/runtime/dock-resolver/dock-commands.d.ts.map +1 -0
- package/dist/window-manager/internal/runtime/drag-resolver/drag-commands.d.ts +7 -0
- package/dist/window-manager/internal/runtime/drag-resolver/drag-commands.d.ts.map +1 -0
- package/dist/window-manager/internal/runtime/drag-resolver/drag-loop.d.ts +6 -0
- package/dist/window-manager/internal/runtime/drag-resolver/drag-loop.d.ts.map +1 -0
- package/dist/window-manager/internal/runtime/focus-resolver/focus-commands.d.ts +6 -0
- package/dist/window-manager/internal/runtime/focus-resolver/focus-commands.d.ts.map +1 -0
- package/dist/window-manager/internal/runtime/resize-resolver/resize-commands.d.ts +7 -0
- package/dist/window-manager/internal/runtime/resize-resolver/resize-commands.d.ts.map +1 -0
- package/dist/window-manager/internal/runtime/resize-resolver/resize-loop.d.ts +6 -0
- package/dist/window-manager/internal/runtime/resize-resolver/resize-loop.d.ts.map +1 -0
- package/dist/window-manager/internal/runtime/rwm-runtime.d.ts +67 -0
- package/dist/window-manager/internal/runtime/rwm-runtime.d.ts.map +1 -0
- package/dist/window-manager/internal/runtime/stack-resolver/stack-commands.d.ts +6 -0
- package/dist/window-manager/internal/runtime/stack-resolver/stack-commands.d.ts.map +1 -0
- package/dist/window-manager/internal/runtime/workspace-resolver/workspace-commands.d.ts +12 -0
- package/dist/window-manager/internal/runtime/workspace-resolver/workspace-commands.d.ts.map +1 -0
- package/dist/window-manager/model/window-types.d.ts +14 -22
- package/dist/window-manager/model/window-types.d.ts.map +1 -1
- package/dist/window-manager/model/workspace-types.d.ts +18 -6
- package/dist/window-manager/model/workspace-types.d.ts.map +1 -1
- package/dist/window-manager/registration/window-registry.d.ts +3 -0
- package/dist/window-manager/registration/window-registry.d.ts.map +1 -0
- package/dist/window-manager/registration/window-store-factory.d.ts +1 -4
- package/dist/window-manager/registration/window-store-factory.d.ts.map +1 -1
- package/dist/window-manager/rwm.d.ts +25 -10
- package/dist/window-manager/rwm.d.ts.map +1 -1
- package/dist/window-manager/workspace-layout.d.ts +1 -13
- package/dist/window-manager/workspace-layout.d.ts.map +1 -1
- package/package.json +5 -4
- package/dist/window-manager/internal/features/grid/grid-api.d.ts +0 -4
- package/dist/window-manager/internal/features/grid/grid-api.d.ts.map +0 -1
- package/dist/window-manager/internal/features/view-port/view-port-resize-listener.d.ts +0 -2
- package/dist/window-manager/internal/features/view-port/view-port-resize-listener.d.ts.map +0 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../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/cursor/cursor-state.ts","../src/window-manager/internal/features/resizing/resizing-controls.tsx","../src/window-manager/internal/features/workspace/workspace-state.ts","../src/window-manager/internal/features/workspace/workspace-api.ts","../src/window-manager/internal/features/resizing/resizing-api.ts","../src/window-manager/internal/features/stack/stack-api.ts","../src/window-manager/internal/features/grid/grid-api.ts","../src/window-manager/internal/features/drag/drag-handle.tsx","../src/window-manager/internal/features/window-button.tsx","../src/window-manager/internal/features/docking/docking-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/cursor/cursor-move-listener.tsx","../src/window-manager/internal/features/view-port/view-port-resize-listener.tsx"],"sourcesContent":["import { create, StoreApi, UseBoundStore } from 'zustand'\r\nimport { RefObject } from 'react'\r\nimport {\r\n Coord,\r\n ResizeState,\r\n WindowRegistration,\r\n WindowStates,\r\n WindowStore,\r\n} from '../model/window-types'\r\nimport WindowLayout, { WindowLayoutProps } from '../internal/features/window-layout'\r\nimport WindowButton, { WindowButtonProps } from '../internal/features/window-button'\r\nimport { useWorkspaceState } from '../internal/features/workspace/workspace-state'\r\n\r\nconst windownMinWidth = 232\r\nconst windownMinHeight = 128\r\n\r\n/** @howToUse use the syntax `windowRegistry[<winId>]()` to access a store */\r\nexport const windowRegistry: Record<string, UseBoundStore<StoreApi<WindowStore>>> = {}\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, get) => ({\r\n windowId: windowInstanceId,\r\n\r\n self: undefined,\r\n setSelf: (ref: RefObject<HTMLDivElement | null>) => set({ self: ref }),\r\n\r\n WIN_MIN_WIDTH: windownMinWidth,\r\n setWIN_MIN_WIDTH: (w: number) => set({ WIN_MIN_WIDTH: w }),\r\n\r\n WIN_MIN_HEIGHT: windownMinHeight,\r\n setWIN_MIN_HEIGHT: (h: number) => set({ WIN_MIN_HEIGHT: h }),\r\n\r\n isActive: false,\r\n setIsActive: (isActive: boolean) => {\r\n useWorkspaceState.getState().setActiveWindowId(get().windowId)\r\n set({ isActive: isActive })\r\n },\r\n\r\n resetFlag: false,\r\n reset: () => set({ resetFlag: !get().resetFlag, isWindowClosed: true }),\r\n\r\n zIndex: zIndexAtLaunch,\r\n setZIndex: (newIndex: number) => set({ zIndex: newIndex }),\r\n\r\n winVisualState: 'demaximized',\r\n setWinVisualState: (newState: WindowStates) => set({ winVisualState: newState }),\r\n\r\n isWindowClosed: true,\r\n setisWindowClosed: (isClosed: boolean) => set({ isWindowClosed: isClosed }),\r\n\r\n winCoord: { pointX: 40, pointY: 40 },\r\n setWinCoord: (newWinCoord: Coord) =>\r\n set({ winCoord: { pointX: newWinCoord.pointX, pointY: newWinCoord.pointY } }),\r\n\r\n winWidth: windownMinWidth,\r\n setWinWidth: (newWinWidth: number) => set({ winWidth: newWinWidth }),\r\n\r\n winHeight: windownMinHeight,\r\n setWinHeight: (newWinHeight: number) => set({ winHeight: newWinHeight }),\r\n\r\n resizeAction: false,\r\n setResizeAction: (updatedIsResizing: ResizeState) => set({ resizeAction: updatedIsResizing }),\r\n\r\n isDragging: false,\r\n setIsDragging: (updatedIsDragging: boolean) => set({ isDragging: updatedIsDragging }),\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: Omit<WindowLayoutProps, 'winId'>) => (\r\n <WindowLayout {...props} winId={windowInstanceId} />\r\n ),\r\n\r\n Button: (props: Omit<WindowButtonProps, 'winId'>) => (\r\n <WindowButton {...props} winId={windowInstanceId} />\r\n ),\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-store-factory'\r\nimport { stackApi } from './stack/stack-api'\r\nimport { dockApi } from './docking/docking-api'\r\nimport { wsApi } from './workspace/workspace-api'\r\nimport DragHandle from './drag/drag-handle'\r\n\r\ntype DockPosition =\r\n | 'right'\r\n | 'left'\r\n | 'full'\r\n | 'top'\r\n | 'bottom'\r\n | 'top-right'\r\n | 'top-left'\r\n | 'bottom-right'\r\n | 'bottom-left'\r\n | 'default'\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 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 winId,\r\n defaultDock = 'default',\r\n style,\r\n}: WindowLayoutProps) {\r\n const windowRef = useRef<HTMLDivElement>(null)\r\n const {\r\n windowId,\r\n zIndex,\r\n isActive,\r\n setSelf,\r\n\r\n resetFlag,\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 setSelf(windowRef)\r\n\r\n if (wsApi.isBelowBreakPoint()) {\r\n dockApi.maximizeWindow(winId)\r\n return\r\n }\r\n\r\n dockingRoutes[defaultDock](winId)\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [setSelf, windowRef, resetFlag])\r\n\r\n const dockingRoutes: 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={() => dockApi.closeWindow(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 bg-white shadow-lg border border-zinc-600 rounded-sm overflow-hidden`}\r\n onMouseDown={() => stackApi.bringTargetWindowToFront(windowId)}\r\n style={{\r\n backgroundColor: style?.windowBackgroundColor,\r\n top: `${winCoord.pointY}px`,\r\n left: `${winCoord.pointX}px`,\r\n width: `${winWidth}px`,\r\n height: `${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(${wsApi.getRect().innerWidth / 2 - winCoord.pointX - winWidth / 2}px,\r\n ${wsApi.getRect().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={`\r\n h-[32px] w-full flex items-center bg-neutral-800\r\n ${isActive ? 'brightness-100 opacity-100' : 'brightness-75 opacity-80'}`}\r\n >\r\n <div className=\"w-fit shrink-0 h-8 px-2 text-white flex items-center text-sm truncate\">\r\n {windowName}\r\n </div>\r\n\r\n <div className=\"h-8 px-2 text-white flex items-center text-sm truncate\">\r\n {navbarChildren}\r\n </div>\r\n\r\n <DragHandle winId={winId} />\r\n\r\n {!wsApi.isBelowBreakPoint() && maximizeControl}\r\n {closeControl}\r\n </nav>\r\n\r\n {!wsApi.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`}>{children}</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 { create } from 'zustand'\r\n\r\ntype CursorState = {\r\n x: number\r\n y: number\r\n setX: (x: number) => void\r\n setY: (y: number) => void\r\n}\r\n\r\nexport const useCursorState = create<CursorState>((set) => ({\r\n x: 10,\r\n y: 10,\r\n setX: (newX: number) => set({ x: newX }),\r\n setY: (newY: number) => set({ y: newY }),\r\n}))\r\n","import { ResizeState } from '../../../model/window-types'\r\nimport { useCursorState } from '../cursor/cursor-state'\r\nimport { useEffect } from 'react'\r\nimport { windowRegistry } from '../../../registration/window-store-factory'\r\nimport { resizeApi } from './resizing-api'\r\nimport { gridApi } from '../grid/grid-api'\r\n\r\ntype Props = {\r\n winId: string\r\n}\r\n\r\nexport default function ResizingControls({ winId }: Props) {\r\n const { x, y } = useCursorState()\r\n const { winCoord, winWidth, winHeight, resizeAction } = windowRegistry[winId]()\r\n\r\n useEffect(() => {\r\n resizeApi.dispatchResizeAction(winId)\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [resizeAction, x, y])\r\n\r\n const handleResizeClick = (resizeAction: ResizeState) => {\r\n resizeApi.setResizeAction(winId, resizeAction)\r\n gridApi.orchestrateGridResize(winId)\r\n }\r\n\r\n return (\r\n <>\r\n <span\r\n onMouseUp={() => handleResizeClick(false)}\r\n onMouseDown={() => handleResizeClick('e')}\r\n id=\"win-resize-right-width\"\r\n className=\"fixed w-2 opacity-60 cursor-w-resize z-10\"\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 ></span>\r\n <span\r\n onMouseUp={() => handleResizeClick(false)}\r\n onMouseDown={() => handleResizeClick('w')}\r\n id=\"win-resize-left-width\"\r\n className=\"fixed w-2 opacity-60 cursor-w-resize z-10\"\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 ></span>\r\n <span\r\n onMouseUp={() => handleResizeClick(false)}\r\n onMouseDown={() => handleResizeClick('s')}\r\n id=\"win-resize-bottom-height\"\r\n className=\"fixed h-2 opacity-60 cursor-s-resize z-10\"\r\n style={{\r\n top: `${winCoord.pointY + winHeight - 6}px`,\r\n left: `${winCoord.pointX}px`,\r\n width: `${winWidth}px`,\r\n }}\r\n ></span>\r\n <span\r\n onMouseUp={() => handleResizeClick(false)}\r\n onMouseDown={() => handleResizeClick('n')}\r\n id=\"win-resize-top-height\"\r\n className=\"fixed h-2 opacity-60 cursor-s-resize z-10\"\r\n style={{\r\n top: `${winCoord.pointY - 6}px`,\r\n left: `${winCoord.pointX}px`,\r\n width: `${winWidth}px`,\r\n }}\r\n ></span>\r\n <span\r\n onMouseUp={() => handleResizeClick(false)}\r\n onMouseDown={() => handleResizeClick('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 onMouseUp={() => handleResizeClick(false)}\r\n onMouseDown={() => handleResizeClick('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 onMouseUp={() => handleResizeClick(false)}\r\n onMouseDown={() => handleResizeClick('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 onMouseUp={() => handleResizeClick(false)}\r\n onMouseDown={() => handleResizeClick('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 { create } from 'zustand'\r\nimport { ResponsiveSizes, WorkspaceStore } from '../../../model/workspace-types'\r\n\r\nexport const useWorkspaceState = create<WorkspaceStore>((set) => ({\r\n ref: null,\r\n setRef: (newRef: HTMLElement | null) => set({ ref: newRef }),\r\n\r\n activeWindowId: 'react-dynamic-window-instance0',\r\n setActiveWindowId: (newId: string) => set({ activeWindowId: newId }),\r\n\r\n responsiveBreak: 'sm',\r\n setResponsiveBreak: (breakPoint: ResponsiveSizes) => set({ responsiveBreak: breakPoint }),\r\n}))\r\n","import { ResponsiveSizes, WorkspaceRect } from '../../../model/workspace-types'\r\nimport { useWorkspaceState } from './workspace-state'\r\n\r\nexport const wsApi = {\r\n getRect: (): WorkspaceRect => {\r\n const rect = useWorkspaceState.getState().ref?.getBoundingClientRect()\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\r\n const bottom = top + innerHeight\r\n const right = left + innerWidth\r\n\r\n const centerX = left + innerWidth / 2\r\n const centerY = top + innerHeight / 2\r\n\r\n const wsWindow = {\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 return wsWindow\r\n },\r\n\r\n isBelowBreakPoint: (): boolean => {\r\n const wSpace = wsApi.getRect()\r\n const breakPoint = useWorkspaceState.getState().responsiveBreak\r\n return wSpace.innerWidth < responsiveBreakInPx(breakPoint)\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 { ResizeState, WindowStore } from '../../../model/window-types'\r\nimport { WorkspaceRect } from '../../../model/workspace-types'\r\nimport { windowRegistry } from '../../../registration/window-store-factory'\r\nimport { useCursorState } from '../cursor/cursor-state'\r\nimport { wsApi } from '../workspace/workspace-api'\r\n\r\ntype ResizeContext = {\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\nexport const resizeApi = {\r\n stopAllDragAndResize: () => {\r\n for (const key of Object.keys(windowRegistry)) {\r\n windowRegistry[key].getState().isDragging = false\r\n windowRegistry[key].getState().resizeAction = false\r\n }\r\n },\r\n\r\n setResizeAction: (winId: string, action: ResizeState) => {\r\n windowRegistry[winId].setState({ resizeAction: action })\r\n },\r\n\r\n dispatchResizeAction: (winId: string) => {\r\n const ctx = getDependencies(winId)\r\n if (!ctx.win.resizeAction) return\r\n\r\n ctx.win.setWinVisualState('demaximized')\r\n\r\n switch (ctx.win.resizeAction) {\r\n case 's':\r\n privateApi.resizeBottomWinHeight(ctx)\r\n break\r\n\r\n case 'n':\r\n privateApi.resizeTopWinHeight(ctx)\r\n break\r\n\r\n case 'e':\r\n privateApi.resizeRightWinWidth(ctx)\r\n break\r\n\r\n case 'w':\r\n privateApi.resizeLeftWinWidth(ctx)\r\n break\r\n\r\n case 'se':\r\n privateApi.resizeRightBottomWidthAndHeight(ctx)\r\n break\r\n\r\n case 'sw':\r\n privateApi.resizeLeftBottomWidthAndHeight(ctx)\r\n break\r\n\r\n case 'ne':\r\n privateApi.resizeRightTopWidthAndHeight(ctx)\r\n break\r\n\r\n case 'nw':\r\n privateApi.resizeLeftTopWidthAndHeight(ctx)\r\n break\r\n }\r\n },\r\n}\r\n\r\nconst privateApi = {\r\n resizeRightWinWidth: (resizeCtx: ResizeContext) => {\r\n const { wsRect, win, winBox, x, y } = resizeCtx\r\n\r\n if (!winBox) return\r\n\r\n const minWinWidth = x - winBox.left < win.WIN_MIN_WIDTH\r\n if (minWinWidth) return\r\n\r\n const cursorOutOfBounds = x > wsRect.right || x < wsRect.left\r\n if (cursorOutOfBounds) return\r\n\r\n const sizeDiff = x - winBox.right\r\n win.setWinWidth(win.winWidth + sizeDiff)\r\n },\r\n\r\n resizeLeftWinWidth: (resizeCtx: ResizeContext) => {\r\n const { wsRect, win, winBox, x, y } = resizeCtx\r\n if (!winBox) return\r\n\r\n const minWinWidth = winBox.right - x <= win.WIN_MIN_WIDTH\r\n if (minWinWidth) return\r\n\r\n const cursorOutOfBounds = x > wsRect.right || x < wsRect.left\r\n if (cursorOutOfBounds) return\r\n\r\n const sizeDiff = winBox.left - x\r\n win.setWinWidth(win.winWidth + sizeDiff)\r\n win.setWinCoord({ pointX: x, pointY: win.winCoord.pointY })\r\n },\r\n\r\n resizeTopWinHeight: (resizeCtx: ResizeContext) => {\r\n const { wsRect, win, winBox, x, y } = resizeCtx\r\n\r\n if (!winBox) return\r\n\r\n const minWinHeight = winBox.bottom - y <= win.WIN_MIN_HEIGHT\r\n if (minWinHeight) return\r\n\r\n const cursorOutOfBounds = y > wsRect.bottom || y < wsRect.top\r\n if (cursorOutOfBounds) return\r\n\r\n const sizeDiff = winBox.top - y\r\n win.setWinHeight(win.winHeight + sizeDiff)\r\n win.setWinCoord({ pointX: win.winCoord.pointX, pointY: y })\r\n },\r\n\r\n resizeBottomWinHeight: (resizeCtx: ResizeContext) => {\r\n const { wsRect, win, winBox, x, y } = resizeCtx\r\n if (!winBox) return\r\n\r\n const minWinHeight = y - winBox.top < win.WIN_MIN_HEIGHT\r\n if (minWinHeight) return\r\n\r\n const cursorOutOfBounds = y > wsRect.bottom || y < wsRect.top\r\n if (cursorOutOfBounds) return\r\n\r\n const sizeDiff = y - winBox.bottom\r\n win.setWinHeight(win.winHeight + sizeDiff)\r\n },\r\n\r\n resizeRightBottomWidthAndHeight: (resizeCtx: ResizeContext) => {\r\n privateApi.resizeRightWinWidth(resizeCtx)\r\n privateApi.resizeBottomWinHeight(resizeCtx)\r\n },\r\n\r\n resizeLeftBottomWidthAndHeight: (resizeCtx: ResizeContext) => {\r\n privateApi.resizeLeftWinWidth(resizeCtx)\r\n privateApi.resizeBottomWinHeight(resizeCtx)\r\n },\r\n\r\n resizeRightTopWidthAndHeight: (resizeCtx: ResizeContext) => {\r\n privateApi.resizeRightWinWidth(resizeCtx)\r\n privateApi.resizeTopWinHeight(resizeCtx)\r\n },\r\n\r\n /**\r\n * @note this specific case needs it's own logic instead of simply calling\r\n * resizeLeftWinWidth & resizeTopWinHeight. Since both manipulate\r\n * winWidth, winHeight and winCoord, one's logic will override the other\r\n */\r\n resizeLeftTopWidthAndHeight: (resizeCtx: ResizeContext) => {\r\n const { wsRect, win, winBox, x, y } = resizeCtx\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 if (cursorOutOfBoundsY || cursorOutOfBoundsX) return\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 win.setWinCoord({\r\n pointX: minWinWidth ? win.winCoord.pointX : x,\r\n pointY: minWinHeight ? win.winCoord.pointY : y,\r\n })\r\n\r\n if (!minWinHeight) {\r\n const sizeDiffY = winBox.top - y\r\n win.setWinHeight(win.winHeight + sizeDiffY)\r\n }\r\n\r\n if (!minWinWidth) {\r\n const sizeDiffX = winBox.left - x\r\n win.setWinWidth(win.winWidth + sizeDiffX)\r\n }\r\n },\r\n}\r\n\r\nconst getDependencies = (winId: string): ResizeContext => {\r\n const wsRect = wsApi.getRect()\r\n const win = windowRegistry[winId].getState()\r\n const winBox = win.self?.current?.getBoundingClientRect()\r\n const { x, y } = useCursorState.getState()\r\n\r\n return { wsRect, win, winBox, x, y }\r\n}\r\n","import { windowRegistry } from '../../../registration/window-store-factory'\r\n\r\nexport const stackApi = {\r\n bringTargetWindowToFront: (targetId: string) => {\r\n const targetWindow = windowRegistry[targetId].getState()\r\n\r\n for (const key of Object.keys(windowRegistry)) {\r\n const window = windowRegistry[key].getState()\r\n\r\n if (window.windowId === targetWindow.windowId) {\r\n continue\r\n }\r\n\r\n window.setIsActive(false)\r\n if (window.zIndex >= targetWindow.zIndex) {\r\n window.setZIndex(window.zIndex - 1)\r\n }\r\n }\r\n\r\n targetWindow.setZIndex(Object.keys(windowRegistry).length)\r\n targetWindow.setIsActive(true)\r\n },\r\n\r\n getOpenedWindowCount: () => {\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\r\n resetStack: () => {\r\n for (const key of Object.keys(windowRegistry)) {\r\n windowRegistry[key].getState().reset()\r\n }\r\n },\r\n}\r\n","import { windowRegistry } from '../../../registration/window-store-factory'\r\nimport { stackApi } from '../stack/stack-api'\r\n\r\nexport const gridApi = {\r\n orchestrateGridResize: (winId: string) => orchestrationGridResize(winId),\r\n}\r\n\r\n/**\r\n * @FixMe Most complex feature:\r\n * this function is a nice feature, needs to be written in a clearer way.\r\n * Multi-window tiling can be brittle\r\n * - isRemoteOutside needs refinement\r\n * - needs a stop if the other window stops moving\r\n * - stack should detect alignment\r\n * */\r\nconst orchestrationGridResize = (winId: string) => {\r\n const tolerance = 4\r\n const allowDistantResize = stackApi.getOpenedWindowCount() >= 3\r\n const thisWin = windowRegistry[winId].getState()\r\n const currentResize = thisWin.resizeAction\r\n\r\n for (const key of Object.keys(windowRegistry)) {\r\n const remoteWin = windowRegistry[key].getState()\r\n\r\n if (remoteWin.windowId === thisWin.windowId) {\r\n continue\r\n }\r\n\r\n const thisWinStartY = thisWin.winCoord.pointY\r\n const thisWinEndY = thisWin.winCoord.pointY + thisWin.winHeight\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 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 * thisWin right edge <::::> remoteWin left edge || remoteWin is stacked */\r\n if (currentResize === 'e') {\r\n const isEdgeAlignedOnXAxis = Math.abs(thisWinEndX - remoteWinStartX) <= tolerance\r\n const isOverlapOnYAxis = thisWinStartY <= remoteWinEndY && thisWinEndY >= remoteWinStartY\r\n\r\n const isEdgeResize = allowDistantResize\r\n ? isEdgeAlignedOnXAxis\r\n : isEdgeAlignedOnXAxis && isOverlapOnYAxis\r\n if (isEdgeResize) {\r\n remoteWin.setResizeAction('w')\r\n }\r\n\r\n const isRemoteOnSameLane =\r\n Math.abs(thisWinEndX - remoteWinEndX) < tolerance &&\r\n Math.abs(thisWinStartX - remoteWinStartX) < tolerance\r\n const isRemoteEdgeConnected =\r\n Math.abs(thisWinEndY - remoteWinStartY) < tolerance ||\r\n Math.abs(thisWinStartY - remoteWinEndY) < tolerance\r\n\r\n const isStackResize = allowDistantResize\r\n ? isRemoteOnSameLane && isRemoteOutside\r\n : isRemoteOnSameLane && isRemoteEdgeConnected\r\n if (isStackResize) {\r\n remoteWin.setResizeAction('e')\r\n }\r\n }\r\n\r\n /*\r\n * thisWin left edge <::::> remoteWin right edge || remoteWin is stacked */\r\n if (currentResize === 'w') {\r\n const isEdgeAlignedOnXAxis = Math.abs(thisWinStartX - remoteWinEndX) <= tolerance\r\n const isOverlapOnYAxis = thisWinStartY <= remoteWinEndY && thisWinEndY >= remoteWinStartY\r\n\r\n const isEdgeResize = allowDistantResize\r\n ? isEdgeAlignedOnXAxis\r\n : isEdgeAlignedOnXAxis && isOverlapOnYAxis\r\n if (isEdgeResize) {\r\n remoteWin.setResizeAction('e')\r\n }\r\n\r\n const isRemoteOnSameLane =\r\n Math.abs(thisWinEndX - remoteWinEndX) < tolerance &&\r\n Math.abs(thisWinStartX - remoteWinStartX) < tolerance\r\n const isRemoteEdgeConnected =\r\n Math.abs(thisWinEndY - remoteWinStartY) < tolerance ||\r\n Math.abs(thisWinStartY - remoteWinEndY) < tolerance\r\n\r\n const isStackResize = allowDistantResize\r\n ? isRemoteOnSameLane && isRemoteOutside\r\n : isRemoteOnSameLane && isRemoteEdgeConnected\r\n if (isStackResize) {\r\n remoteWin.setResizeAction('w')\r\n }\r\n }\r\n\r\n /*\r\n * thisWin top edge <::::> remoteWin bottom edge || remoteWin is stacked */\r\n if (currentResize === 'n') {\r\n const isEdgeAlignedOnYAxis = Math.abs(thisWinStartY - remoteWinEndY) <= tolerance\r\n const isOverlapOnXAxis = thisWinStartX <= remoteWinEndX && thisWinEndX >= remoteWinStartX\r\n\r\n const isEdgeResize = allowDistantResize\r\n ? isEdgeAlignedOnYAxis\r\n : isEdgeAlignedOnYAxis && isOverlapOnXAxis\r\n if (isEdgeResize) {\r\n remoteWin.setResizeAction('s')\r\n }\r\n\r\n const isRemoteOnSameLane =\r\n Math.abs(thisWinEndY - remoteWinEndY) < tolerance &&\r\n Math.abs(thisWinStartY - remoteWinStartY) < tolerance\r\n const isRemoteEdgeConnected =\r\n Math.abs(thisWinEndX - remoteWinStartX) < tolerance ||\r\n Math.abs(thisWinStartX - remoteWinEndX) < tolerance\r\n\r\n const isStackResize = allowDistantResize\r\n ? isRemoteOnSameLane && isRemoteOutside\r\n : isRemoteOnSameLane && isRemoteEdgeConnected\r\n if (isStackResize) {\r\n remoteWin.setResizeAction('n')\r\n }\r\n }\r\n\r\n /*\r\n * thisWin bottom edge <::::> remoteWin top edge || remoteWin is stacked */\r\n if (currentResize === 's') {\r\n const isEdgeAlignedOnYAxis = Math.abs(thisWinEndY - remoteWinStartY) <= tolerance\r\n const isOverlapOnXAxis = thisWinStartX <= remoteWinEndX && thisWinEndX >= remoteWinStartX\r\n\r\n const isEdgeResize = allowDistantResize\r\n ? isEdgeAlignedOnYAxis\r\n : isEdgeAlignedOnYAxis && isOverlapOnXAxis\r\n if (isEdgeResize) {\r\n remoteWin.setResizeAction('n')\r\n }\r\n\r\n const isRemoteOnSameLane =\r\n Math.abs(thisWinEndY - remoteWinEndY) < tolerance &&\r\n Math.abs(thisWinStartY - remoteWinStartY) < tolerance\r\n const isRemoteEdgeConnected =\r\n Math.abs(thisWinEndX - remoteWinStartX) < tolerance ||\r\n Math.abs(thisWinStartX - remoteWinEndX) < tolerance\r\n\r\n const isStackResize = allowDistantResize\r\n ? isRemoteOnSameLane && isRemoteOutside\r\n : isRemoteOnSameLane && isRemoteEdgeConnected\r\n if (isStackResize) {\r\n remoteWin.setResizeAction('s')\r\n }\r\n }\r\n }\r\n}\r\n","import { useEffect, useState } from 'react'\r\nimport { dockApi } from '../docking/docking-api'\r\nimport { wsApi } from '../workspace/workspace-api'\r\nimport { windowRegistry } from '../../../registration/window-store-factory'\r\nimport { Coord } from '../../../model/window-types'\r\nimport { useCursorState } from '../cursor/cursor-state'\r\n\r\ntype Props = {\r\n winId: string\r\n}\r\n\r\nexport default function DragHandle({ winId }: Props) {\r\n const { x, y } = useCursorState()\r\n const { winVisualState, isDragging, winCoord, setWinCoord, setIsDragging } =\r\n windowRegistry[winId]()\r\n\r\n const [dragClickOffset, setDragClickOffset] = useState<Coord>({\r\n pointX: wsApi.getRect().left,\r\n pointY: wsApi.getRect().top,\r\n })\r\n\r\n useEffect(() => {\r\n if (wsApi.isBelowBreakPoint()) return\r\n if (!isDragging) return\r\n\r\n if (winVisualState === 'maximized') dockApi.demaximizeWindow(winId)\r\n\r\n const wsRect = wsApi.getRect()\r\n\r\n let adjustedX = x - dragClickOffset.pointX\r\n if (x > wsRect.right || x < wsRect.left) adjustedX = winCoord.pointX\r\n\r\n let adjustedY = y - dragClickOffset.pointY\r\n if (y > wsRect.bottom || y < wsRect.top) adjustedY = winCoord.pointY\r\n\r\n setWinCoord({ pointX: adjustedX, pointY: adjustedY })\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [isDragging, x, y])\r\n\r\n const startDrag = (isDragging: boolean) => {\r\n setDragClickOffset({ pointX: x - winCoord.pointX, pointY: y - winCoord.pointY })\r\n setIsDragging(isDragging)\r\n }\r\n\r\n return (\r\n <div\r\n onMouseDown={() => startDrag(true)}\r\n onMouseUp={() => startDrag(false)}\r\n onDoubleClick={() => dockApi.maximizeWindow(winId)}\r\n className=\"grow min-w-8 h-8 px-2 text-white flex items-center text-sm bg-white bg-opacity-0 hover:bg-opacity-5 mix-blend-difference\"\r\n ></div>\r\n )\r\n}\r\n","import { windowRegistry } from '../../registration/window-store-factory'\r\nimport { dockApi } from './docking/docking-api'\r\nimport { stackApi } from './stack/stack-api'\r\n\r\nexport type WindowButtonProps = {\r\n children: React.ReactNode\r\n winId: string\r\n className?: string\r\n /** @default 'brightness-[85%]' */\r\n isClosedClassName?: string\r\n /** @default 'brightness-150' */\r\n isOpenClassName?: string\r\n}\r\n\r\nexport default function WindowButton({\r\n children,\r\n winId,\r\n className,\r\n isClosedClassName = 'brightness-[85%]',\r\n isOpenClassName = 'brightness-150',\r\n}: WindowButtonProps) {\r\n const { isWindowClosed, windowId, isActive } = windowRegistry[winId]()\r\n\r\n const handleOpenCloseWin = () => {\r\n if (isWindowClosed) {\r\n stackApi.bringTargetWindowToFront(windowId)\r\n dockApi.openWindow(winId)\r\n return\r\n }\r\n\r\n if (isActive) dockApi.closeWindow(winId)\r\n stackApi.bringTargetWindowToFront(windowId)\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 : isOpenClassName}`}\r\n >\r\n {children}\r\n </button>\r\n )\r\n}\r\n","import { windowRegistry } from '../../../registration/window-store-factory'\r\nimport { wsApi } from '../workspace/workspace-api'\r\n\r\nexport const dockApi = {\r\n dockWindowRight: (winId: string) => {\r\n windowRegistry[winId].setState({\r\n winCoord: { pointX: wsApi.getRect().centerX, pointY: wsApi.getRect().top },\r\n winWidth: wsApi.getRect().innerWidth / 2,\r\n winHeight: wsApi.getRect().innerHeight,\r\n winVisualState: 'demaximized',\r\n })\r\n },\r\n\r\n dockWindowLeft: (winId: string) => {\r\n windowRegistry[winId].setState({\r\n winCoord: { pointX: wsApi.getRect().left, pointY: wsApi.getRect().top },\r\n winWidth: wsApi.getRect().innerWidth / 2,\r\n winHeight: wsApi.getRect().innerHeight,\r\n winVisualState: 'demaximized',\r\n })\r\n },\r\n\r\n dockWindowTop: (winId: string) => {\r\n windowRegistry[winId].setState({\r\n winCoord: { pointX: wsApi.getRect().left, pointY: wsApi.getRect().top },\r\n winWidth: wsApi.getRect().innerWidth,\r\n winHeight: wsApi.getRect().innerHeight / 2,\r\n winVisualState: 'demaximized',\r\n })\r\n },\r\n\r\n dockWindowBottom: (winId: string) => {\r\n windowRegistry[winId].setState({\r\n winCoord: { pointX: wsApi.getRect().left, pointY: wsApi.getRect().centerY },\r\n winWidth: wsApi.getRect().innerWidth,\r\n winHeight: wsApi.getRect().innerHeight / 2,\r\n winVisualState: 'demaximized',\r\n })\r\n },\r\n\r\n dockWindowBottomRight: (winId: string) => {\r\n windowRegistry[winId].setState({\r\n winCoord: {\r\n pointX: wsApi.getRect().centerX,\r\n pointY: wsApi.getRect().centerY,\r\n },\r\n winWidth: wsApi.getRect().innerWidth / 2,\r\n winHeight: wsApi.getRect().innerHeight / 2,\r\n winVisualState: 'demaximized',\r\n })\r\n },\r\n\r\n dockWindowTopRight: (winId: string) => {\r\n windowRegistry[winId].setState({\r\n winCoord: { pointX: wsApi.getRect().centerX, pointY: wsApi.getRect().top },\r\n winWidth: wsApi.getRect().innerWidth / 2,\r\n winHeight: wsApi.getRect().innerHeight / 2,\r\n winVisualState: 'demaximized',\r\n })\r\n },\r\n\r\n dockWindowBottomLeft: (winId: string) => {\r\n windowRegistry[winId].setState({\r\n winCoord: { pointX: wsApi.getRect().left, pointY: wsApi.getRect().centerY },\r\n winWidth: wsApi.getRect().innerWidth / 2,\r\n winHeight: wsApi.getRect().innerHeight / 2,\r\n winVisualState: 'demaximized',\r\n })\r\n },\r\n\r\n dockWindowTopLeft: (winId: string) => {\r\n windowRegistry[winId].setState({\r\n winCoord: { pointX: wsApi.getRect().left, pointY: wsApi.getRect().top },\r\n winWidth: wsApi.getRect().innerWidth / 2,\r\n winHeight: wsApi.getRect().innerHeight / 2,\r\n winVisualState: 'demaximized',\r\n })\r\n },\r\n\r\n maximizeWindow: (winId: string) => {\r\n windowRegistry[winId].setState({\r\n winCoord: { pointX: wsApi.getRect().left, pointY: wsApi.getRect().top },\r\n winHeight: wsApi.getRect().innerHeight,\r\n winWidth: wsApi.getRect().innerWidth,\r\n winVisualState: 'maximized',\r\n })\r\n },\r\n\r\n demaximizeWindow: (winId: string) => {\r\n windowRegistry[winId].setState({\r\n winCoord: { pointX: wsApi.getRect().left + 16, pointY: wsApi.getRect().top + 16 },\r\n winWidth: wsApi.getRect().innerWidth * 0.95,\r\n winHeight: wsApi.getRect().innerHeight * 0.75,\r\n winVisualState: 'demaximized',\r\n })\r\n },\r\n\r\n closeWindow: (winId: string) => {\r\n windowRegistry[winId].setState({ isWindowClosed: true })\r\n },\r\n\r\n openWindow: (winId: string) => {\r\n const winState = windowRegistry[winId].getState()\r\n const winRef = winState.self\r\n if (winState.isWindowClosed && winRef?.current) {\r\n windowRegistry[winId].setState({ isWindowClosed: false })\r\n winRef.current.style.transform = 'translate(0, 0) scale(1)'\r\n }\r\n },\r\n}\r\n","import { dockApi } from \"./internal/features/docking/docking-api\"\r\nimport { resizeApi } from \"./internal/features/resizing/resizing-api\"\r\nimport { stackApi } from \"./internal/features/stack/stack-api\"\r\nimport { wsApi } from \"./internal/features/workspace/workspace-api\"\r\nimport { useWorkspaceState } from \"./internal/features/workspace/workspace-state\"\r\n\r\nconst rwm = {\r\n dockApi: dockApi,\r\n resizeApi: resizeApi,\r\n stackApi: stackApi,\r\n workspaceApi: wsApi,\r\n worskpaceState: useWorkspaceState\r\n}\r\n\r\nexport default rwm","import { useEffect, useRef } from 'react'\r\nimport {\r\n useWorkspaceState,\r\n} 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 { ViewPortResizeListener } from './internal/features/view-port/view-port-resize-listener'\r\nimport { wsApi } from './internal/features/workspace/workspace-api'\r\nimport { ResponsiveSizes } from './model/workspace-types'\r\n\r\ntype Props = {\r\n children: React.ReactNode\r\n className?: string\r\n /**\r\n * Always relative to the WorkspaceLayout dimensions\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 responsiveBreak?: ResponsiveSizes\r\n}\r\n\r\nexport default function WorkspaceLayout({ children, className, responsiveBreak = 'sm' }: Props) {\r\n const workspaceRef = useRef<HTMLElement | null>(null)\r\n const { setRef, setResponsiveBreak } = useWorkspaceState()\r\n\r\n useEffect(() => {\r\n setRef(workspaceRef.current)\r\n }, [])\r\n\r\n useEffect(() => {\r\n setResponsiveBreak(responsiveBreak)\r\n }, [responsiveBreak])\r\n\r\n return (\r\n <section\r\n ref={workspaceRef}\r\n onMouseLeave={resizeApi.stopAllDragAndResize}\r\n onMouseUp={resizeApi.stopAllDragAndResize}\r\n className={className ? className : 'fixed overflow-hidden h-full w-full touch-none'}\r\n >\r\n <ViewPortResizeListener />\r\n <CursorMoveListener />\r\n <div className=\" w-full h-full relative overflow-hidden\">\r\n {!wsApi.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-store-factory'\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 } = 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 onMouseUp={() => 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 onMouseUp={() => 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 onMouseUp={() => 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 onMouseUp={() => 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 onMouseUp={() => 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 onMouseUp={() => 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 onMouseUp={() => 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 onMouseUp={() => dockApi.dockWindowBottom(activeWindowId)}\r\n ></button>\r\n </div>\r\n )\r\n\r\n const windowDockPannel = (\r\n <span\r\n className=\"pointer-events-auto px-4 pb-2\"\r\n onMouseOver={() => setIsHovering(true)}\r\n onMouseLeave={() => 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 /** @Note could easily add a drop on area to dock feature */\r\n return (\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 {windowDockPannel}\r\n </div>\r\n )\r\n}\r\n","import { useEffect } from 'react'\r\nimport { useCursorState } from './cursor-state'\r\n\r\nexport function CursorMoveListener() {\r\n const { setX, setY } = useCursorState()\r\n\r\n useEffect(() => {\r\n const handleWindowPosition = (e: MouseEvent) => {\r\n e.preventDefault()\r\n setX(e.clientX)\r\n setY(e.clientY)\r\n }\r\n\r\n window.addEventListener('pointermove', handleWindowPosition)\r\n\r\n return () => window.removeEventListener('pointermove', handleWindowPosition)\r\n }, [setX, setY])\r\n\r\n return <></>\r\n}\r\n","import { useEffect } from 'react'\r\nimport { stackApi } from '../stack/stack-api'\r\n\r\nexport function ViewPortResizeListener() {\r\n useEffect(() => {\r\n window.addEventListener('resize', stackApi.resetStack)\r\n\r\n return () => window.removeEventListener('resize', stackApi.resetStack)\r\n }, [])\r\n\r\n return <></>\r\n}\r\n"],"mappings":"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","names":["create","useEffect","create","window","jsx","resizeAction","useEffect","jsx","useEffect","isDragging","Fragment","jsx","jsxs","useEffect","jsx","jsx","create","useEffect","useRef","useState","jsx","jsxs","useState","useEffect","Fragment","jsx","useEffect","useEffect","Fragment","jsx","useEffect","jsx","jsxs","useRef","useEffect"]}
|
|
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/stack-resolver/stack-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.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/stack/stack-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","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 isDockPannelEnabled: 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 { useWorkspaceState } from '../../features/workspace/workspace-state'\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\r\nexport const getDockDependencies = () => {\r\n const { wsRect } = useWorkspaceState.getState()\r\n return { wsRect }\r\n}\r\n","import { create } from 'zustand'\r\n\r\ntype CursorState = {\r\n x: number\r\n y: number\r\n setXY: (x: number, y: number) => void\r\n}\r\n\r\nexport const useCursorState = create<CursorState>((set) => ({\r\n x: 10,\r\n y: 10,\r\n setXY: (x: number, y: number) => set({ x: x, y: y }),\r\n}))\r\n","import { windowRegistry } from '../../../registration/window-registry'\r\nimport { useCursorState } 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 } = useCursorState.getState()\r\n const { winCoord, isDragging, windowId } = windowRegistry[targetWinId].getState()\r\n\r\n if (!isDragging)\r\n throw new Error(`INIT_DRAG_LOOP 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 } = useCursorState.getState()\r\n if (!isDragging) return\r\n\r\n let adjustedX = x - pointerOffset.left\r\n if (x > wsRect.right || x < wsRect.left) adjustedX = winCoord.pointX\r\n let adjustedY = 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\r\nexport const isDragAllowed = (): boolean => {\r\n return !useWorkspaceState.getState().isBelowBreakPoint\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 { windowRegistry } from \"../../../registration/window-registry\"\r\nimport { WindowMutation } from \"../rwm-runtime\"\r\n\r\nexport type StackCommands = 'RESET_STACK'\r\n\r\ntype StackResolver = Record<StackCommands, (targetWinId?: string) => WindowMutation[]>\r\nexport const stackCommandResolver: StackResolver = {\r\n RESET_STACK: () => {\r\n const batchUpdate: WindowMutation[] = []\r\n for (const key of Object.keys(windowRegistry)) {\r\n const { resetFlag } = windowRegistry[key].getState()\r\n batchUpdate.push({\r\n winId: key,\r\n patch: {\r\n resetFlag: !resetFlag, // FIND ME: reset flag is anti-pattern\r\n isWindowClosed: true,\r\n isActive: false,\r\n },\r\n })\r\n }\r\n\r\n return batchUpdate\r\n },\r\n}\r\n","import { ResponsiveSizes } from '../../../model/workspace-types'\r\nimport { useWorkspaceState } from '../../features/workspace/workspace-state'\r\nimport { WorkspaceMutation } from '../rwm-runtime'\r\n\r\nexport type WorkspaceCommands =\r\n | 'UPDATE_WORKSPACE_RECT'\r\n | 'SET_RESPONSIVE_BREAK'\r\n | 'SET_WORKSPACE_FEATURES'\r\n\r\nexport type WorkspaceCtx = {\r\n responsiveBreak?: ResponsiveSizes\r\n isDockPannelEnabled?: boolean\r\n isGridEnabled?: boolean\r\n}\r\n\r\ntype WorkspaceResolver = Record<\r\n WorkspaceCommands,\r\n (targetWinId?: string, ctx?: WorkspaceCtx) => WorkspaceMutation\r\n>\r\nexport const workspaceCommandResolver: WorkspaceResolver = {\r\n UPDATE_WORKSPACE_RECT: () => {\r\n const rect = useWorkspaceState.getState().wsElement?.getBoundingClientRect()\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 breakPoint = useWorkspaceState.getState().responsiveBreak\r\n const isBelowBreakPoint = innerWidth < responsiveBreakInPx(breakPoint)\r\n\r\n return {\r\n isBelowBreakPoint: isBelowBreakPoint,\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\r\n SET_WORKSPACE_FEATURES: (_?: string, ctx?: WorkspaceCtx) => {\r\n if (ctx?.isGridEnabled === undefined || ctx?.isDockPannelEnabled === undefined)\r\n throw new Error(`SET_WORKSPACE_FEATURES called without a ctx value`)\r\n\r\n return {\r\n isGridEnabled: ctx.isGridEnabled,\r\n isDockPannelEnabled: ctx.isDockPannelEnabled,\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 responsiveBreak: ctx.responsiveBreak,\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 risizing`)\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 { WindowStore } from '../../../model/window-types'\r\nimport { WorkspaceRect } from '../../../model/workspace-types'\r\nimport { windowRegistry } from '../../../registration/window-registry'\r\nimport { useCursorState } from '../../features/cursor/cursor-state'\r\nimport { useWorkspaceState } from '../../features/workspace/workspace-state'\r\nimport { WindowMutation } from '../rwm-runtime'\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 resizer[resizeDirection](getRafResizeDependencies(targetWinId), commitCb)\r\n )\r\n },\r\n}\r\n\r\nconst resizer = {\r\n e: (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 cursorOutOfBounds = x > wsRect.right || x < wsRect.left\r\n const minWinWidth = x - winBox.left < win.WIN_MIN_WIDTH\r\n const sizeDiff = x - winBox.right\r\n\r\n if (!minWinWidth && !cursorOutOfBounds && sizeDiff !== 0) {\r\n commit([\r\n {\r\n winId: win.windowId,\r\n patch: { winWidth: win.winWidth + sizeDiff },\r\n },\r\n ])\r\n }\r\n\r\n requestAnimationFrame(() => resizer.e(getRafResizeDependencies(win.windowId), commit))\r\n },\r\n\r\n w: (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 minWinWidth = winBox.right - x <= win.WIN_MIN_WIDTH\r\n const cursorOutOfBounds = x > wsRect.right || x < wsRect.left\r\n const sizeDiff = winBox.left - x\r\n\r\n if (!minWinWidth && !cursorOutOfBounds && sizeDiff !== 0) {\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 }\r\n\r\n requestAnimationFrame(() => resizer.w(getRafResizeDependencies(win.windowId), commit))\r\n },\r\n\r\n n: (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 minWinHeight = winBox.bottom - y <= win.WIN_MIN_HEIGHT\r\n const cursorOutOfBounds = y > wsRect.bottom || y < wsRect.top\r\n const sizeDiff = winBox.top - y\r\n\r\n if (!minWinHeight && !cursorOutOfBounds && sizeDiff !== 0) {\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 }\r\n\r\n requestAnimationFrame(() => resizer.n(getRafResizeDependencies(win.windowId), commit))\r\n },\r\n\r\n s: (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 minWinHeight = y - winBox.top < win.WIN_MIN_HEIGHT\r\n const cursorOutOfBounds = y > wsRect.bottom || y < wsRect.top\r\n const sizeDiff = y - winBox.bottom\r\n\r\n if (!minWinHeight && !cursorOutOfBounds && sizeDiff !== 0) {\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 }\r\n\r\n requestAnimationFrame(() => resizer.s(getRafResizeDependencies(win.windowId), commit))\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 requestAnimationFrame(() => resizer.nw(getRafResizeDependencies(win.windowId), commit))\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 const sizeDiffY = winBox.top - y\r\n const sizeDiffX = winBox.left - x\r\n\r\n const stagedChagnes: WindowMutation[] = []\r\n\r\n if (sizeDiffY !== 0 || sizeDiffX !== 0) {\r\n stagedChagnes.push({\r\n winId: win.windowId,\r\n patch: {\r\n winCoord: {\r\n pointX: minWinWidth ? win.winCoord.pointX : x,\r\n pointY: minWinHeight ? win.winCoord.pointY : y,\r\n },\r\n },\r\n })\r\n }\r\n\r\n if (!minWinHeight && sizeDiffY !== 0) {\r\n stagedChagnes.push({\r\n winId: win.windowId,\r\n patch: { winHeight: win.winHeight + sizeDiffY },\r\n })\r\n }\r\n\r\n if (!minWinWidth && sizeDiffX !== 0) {\r\n stagedChagnes.push({\r\n winId: win.windowId,\r\n patch: { winWidth: win.winWidth + sizeDiffX },\r\n })\r\n }\r\n\r\n commit(stagedChagnes)\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 } = useCursorState.getState()\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 {\r\n dockCommandResolver,\r\n DockCommands,\r\n getDockDependencies,\r\n} from './dock-resolver/dock-commands'\r\nimport { rafDragLoopResolver, RafDragCommands } from './drag-resolver/drag-loop'\r\nimport { dragCommandResolver, DragCommands, isDragAllowed } from './drag-resolver/drag-commands'\r\nimport { focusCommandResolver, FocusCommands } from './focus-resolver/focus-commands'\r\nimport { stackCommandResolver, StackCommands } from './stack-resolver/stack-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 SUBSYSTEM\r\n - POLICY?\r\n - CTX?\r\n - STAGING\r\n - COMMIT\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: 'STACK'; cmd: StackCommands; ctx?: undefined }\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 commitToWorkspace(stagedChanges)\r\n break\r\n }\r\n case 'DRAG': {\r\n if (!isDragAllowed()) 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 } = getDockDependencies()\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 'STACK': {\r\n const stagedChanges = stackCommandResolver[cmd](targetWinId)\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 },\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 (!isDragAllowed()) 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 },\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'\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 { rwmRuntime } from '../../runtime/rwm-runtime'\r\n\r\nexport const stackApi = {\r\n resetStack: () => {\r\n rwmRuntime.dispatch({ subsystem: 'STACK', cmd: 'RESET_STACK' })\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: ({ isDockPannelEnabled = true, isGridEnabled = true }: WorkspaceCtx) => {\r\n rwmRuntime.dispatch({\r\n subsystem: 'WORKSPACE',\r\n cmd: 'SET_WORKSPACE_FEATURES',\r\n ctx: { isDockPannelEnabled: isDockPannelEnabled, isGridEnabled: isGridEnabled },\r\n })\r\n },\r\n\r\n updateWsRect: () => {\r\n rwmRuntime.dispatch({ subsystem: 'WORKSPACE', cmd: 'UPDATE_WORKSPACE_RECT' })\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 { stackApi } from './internal/features/stack/stack-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 { updateWsRect, ...publicWsApi } = wsApi\r\n\r\nconst rwm = {\r\n dockApi: dockApi,\r\n focusApi: focusApi,\r\n stackApi: stackApi,\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> } = worskpaceState()` inside a component or by calling\r\n * `worskpaceState.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 worskpaceState: 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'}\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, isDockPannelEnabled, 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 windowDockPannel = (\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 */\r\n if (isBelowBreakPoint) return;\r\n if (!isDockPannelEnabled) 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 {windowDockPannel}\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 { useCursorState } from './cursor-state'\r\n\r\nexport function CursorMoveListener() {\r\n const { setXY } = useCursorState()\r\n\r\n useEffect(() => {\r\n const handleWindowPosition = (e: PointerEvent) => {\r\n e.preventDefault()\r\n setXY(e.clientX, e.clientY)\r\n }\r\n\r\n window.addEventListener('pointermove', handleWindowPosition)\r\n\r\n return () => window.removeEventListener('pointermove', handleWindowPosition)\r\n }, [setXY])\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\nimport { stackApi } from '../stack/stack-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.updateWsRect()\r\n stackApi.resetStack() // FIND ME: Reset should not be needed once we figure out how to maintain proportions\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 = 232\r\nconst defaultMinHeight = 128\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, get) => ({\r\n setWinElement: (ref: HTMLDivElement | null) => set({ winElement: ref }),\r\n winElement: undefined,\r\n windowId: windowInstanceId,\r\n resetFlag: false,\r\n\r\n zIndex: zIndexAtLaunch,\r\n winCoord: { pointX: 40, pointY: 40 },\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 winWidth: defaultMinWidth,\r\n winHeight: defaultMinHeight,\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 '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 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 windowId,\r\n zIndex,\r\n isActive,\r\n setWinElement,\r\n\r\n resetFlag,\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, windowRef.current])\r\n\r\n useEffect(() => {\r\n if (isBelowBreakPoint) {\r\n dockApi.maximizeWindow(winId)\r\n } else {\r\n dockingRoutes[defaultDock](winId)\r\n }\r\n /* Initialization is dependent on the workspace (wsElement) being mounted */\r\n }, [wsElement, resetFlag]) // FIND ME: reset flag is anti-pattern\r\n\r\n const dockingRoutes: 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 bg-white shadow-lg border border-zinc-600 rounded-sm overflow-hidden`}\r\n onPointerDown={() => focusApi.bringWindowToFocus(windowId)}\r\n style={{\r\n backgroundColor: style?.windowBackgroundColor,\r\n top: `${winCoord.pointY}px`,\r\n left: `${winCoord.pointX}px`,\r\n width: `${winWidth}px`,\r\n height: `${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={`\r\n h-[32px] w-full flex items-center bg-neutral-800\r\n ${isActive ? 'brightness-100 opacity-100' : 'brightness-75 opacity-80'}`}\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 {<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`}>{children}</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 { 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 gridOrchestrator = {\r\n attachAdjacentGridBehavior: (winId: string) => {\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 if (getDraggingWinCount() < 1)\r\n throw new Error(`gridOrchestrator initalized but no window is currently resizing`)\r\n\r\n attachAdjacentGridBehavior(winId)\r\n },\r\n}\r\n\r\nconst attachAdjacentGridBehavior = (winId: string, visited = new Set<string>()) => {\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 = 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) attachAdjacentGridBehavior(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) attachAdjacentGridBehavior(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) attachAdjacentGridBehavior(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) attachAdjacentGridBehavior(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 getDraggingWinCount = () => {\r\n let isWindowResizingCount = 0\r\n for (const key of Object.keys(windowRegistry))\r\n if (windowRegistry[key].getState().resizeAction) isWindowResizingCount++\r\n\r\n return isWindowResizingCount\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 { gridOrchestrator } 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 resizeApi.startResize(winId, direction)\r\n gridOrchestrator.attachAdjacentGridBehavior(winId)\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-white bg-opacity-0 \r\n hover:bg-opacity-5 mix-blend-difference`}\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 {children}\r\n </button>\r\n )\r\n}\r\n"],"mappings":"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","names":["create","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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cursor-move-listener.d.ts","sourceRoot":"","sources":["../../../../../src/window-manager/internal/features/cursor/cursor-move-listener.tsx"],"names":[],"mappings":"AAGA,wBAAgB,kBAAkB,
|
|
1
|
+
{"version":3,"file":"cursor-move-listener.d.ts","sourceRoot":"","sources":["../../../../../src/window-manager/internal/features/cursor/cursor-move-listener.tsx"],"names":[],"mappings":"AAGA,wBAAgB,kBAAkB,4CAejC"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
type CursorState = {
|
|
2
2
|
x: number;
|
|
3
3
|
y: number;
|
|
4
|
-
|
|
5
|
-
setY: (y: number) => void;
|
|
4
|
+
setXY: (x: number, y: number) => void;
|
|
6
5
|
};
|
|
7
6
|
export declare const useCursorState: import("zustand").UseBoundStore<import("zustand").StoreApi<CursorState>>;
|
|
8
7
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cursor-state.d.ts","sourceRoot":"","sources":["../../../../../src/window-manager/internal/features/cursor/cursor-state.ts"],"names":[],"mappings":"AAEA,KAAK,WAAW,GAAG;IACjB,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,
|
|
1
|
+
{"version":3,"file":"cursor-state.d.ts","sourceRoot":"","sources":["../../../../../src/window-manager/internal/features/cursor/cursor-state.ts"],"names":[],"mappings":"AAEA,KAAK,WAAW,GAAG;IACjB,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,KAAK,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;CACtC,CAAA;AAED,eAAO,MAAM,cAAc,0EAIxB,CAAA"}
|
|
@@ -9,7 +9,5 @@ export declare const dockApi: {
|
|
|
9
9
|
dockWindowTopLeft: (winId: string) => void;
|
|
10
10
|
maximizeWindow: (winId: string) => void;
|
|
11
11
|
demaximizeWindow: (winId: string) => void;
|
|
12
|
-
closeWindow: (winId: string) => void;
|
|
13
|
-
openWindow: (winId: string) => void;
|
|
14
12
|
};
|
|
15
13
|
//# sourceMappingURL=docking-api.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docking-api.d.ts","sourceRoot":"","sources":["../../../../../src/window-manager/internal/features/docking/docking-api.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"docking-api.d.ts","sourceRoot":"","sources":["../../../../../src/window-manager/internal/features/docking/docking-api.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,OAAO;6BACO,MAAM;4BAOP,MAAM;2BAOP,MAAM;8BAOH,MAAM;mCAOD,MAAM;gCAOT,MAAM;kCAOJ,MAAM;+BAOT,MAAM;4BAOT,MAAM;8BAOJ,MAAM;CAMjC,CAAA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export default function DockingControls(): import("react/jsx-runtime").JSX.Element;
|
|
1
|
+
export default function DockingControls(): import("react/jsx-runtime").JSX.Element | undefined;
|
|
2
2
|
//# sourceMappingURL=docking-controls.d.ts.map
|
|
@@ -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,wDAmGtC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drag-api.d.ts","sourceRoot":"","sources":["../../../../../src/window-manager/internal/features/drag/drag-api.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,OAAO;6BACO,MAAM;4BASP,MAAM;CAO/B,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drag-handle.d.ts","sourceRoot":"","sources":["../../../../../src/window-manager/internal/features/drag/drag-handle.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"drag-handle.d.ts","sourceRoot":"","sources":["../../../../../src/window-manager/internal/features/drag/drag-handle.tsx"],"names":[],"mappings":"AAGA,KAAK,KAAK,GAAG;IACX,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,EAAE,KAAK,EAAE,EAAE,KAAK,2CAWlD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"focus-api.d.ts","sourceRoot":"","sources":["../../../../../src/window-manager/internal/features/focus/focus-api.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,QAAQ;mCACY,MAAM;sCAQH,MAAM;CAOzC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grid-orchestrator.d.ts","sourceRoot":"","sources":["../../../../../src/window-manager/internal/features/grid/grid-orchestrator.ts"],"names":[],"mappings":"AAoBA,eAAO,MAAM,gBAAgB;wCACS,MAAM;CAW3C,CAAA"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ResizeDirection } from '../../../model/window-types';
|
|
2
2
|
export declare const resizeApi: {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
dispatchResizeAction: (winId: string) => void;
|
|
3
|
+
startResize: (winId: string, direction: ResizeDirection) => void;
|
|
4
|
+
stopResize: (winId: string) => void;
|
|
6
5
|
};
|
|
7
6
|
//# sourceMappingURL=resizing-api.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resizing-api.d.ts","sourceRoot":"","sources":["../../../../../src/window-manager/internal/features/resizing/resizing-api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"resizing-api.d.ts","sourceRoot":"","sources":["../../../../../src/window-manager/internal/features/resizing/resizing-api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAG7D,eAAO,MAAM,SAAS;yBACC,MAAM,aAAa,eAAe;wBASnC,MAAM;CAQ3B,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resizing-controls.d.ts","sourceRoot":"","sources":["../../../../../src/window-manager/internal/features/resizing/resizing-controls.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"resizing-controls.d.ts","sourceRoot":"","sources":["../../../../../src/window-manager/internal/features/resizing/resizing-controls.tsx"],"names":[],"mappings":"AAKA,KAAK,KAAK,GAAG;IACX,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,EAAE,KAAK,EAAE,EAAE,KAAK,2CA6GxD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stack-api.d.ts","sourceRoot":"","sources":["../../../../../src/window-manager/internal/features/stack/stack-api.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,QAAQ
|
|
1
|
+
{"version":3,"file":"stack-api.d.ts","sourceRoot":"","sources":["../../../../../src/window-manager/internal/features/stack/stack-api.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,QAAQ;;CAIpB,CAAA"}
|
|
@@ -2,10 +2,12 @@ export type WindowButtonProps = {
|
|
|
2
2
|
children: React.ReactNode;
|
|
3
3
|
winId: string;
|
|
4
4
|
className?: string;
|
|
5
|
-
/** @default 'brightness-[85%]' */
|
|
5
|
+
/** @default 'brightness-[85%] border-t-2 border-t-transparent' */
|
|
6
6
|
isClosedClassName?: string;
|
|
7
|
-
/** @default 'brightness-150' */
|
|
7
|
+
/** @default 'brightness-150 border-t-2 border-t-transparent' */
|
|
8
8
|
isOpenClassName?: string;
|
|
9
|
+
/** @default 'brightness-150 border-t-2 border-zinc-400 bg-zinc-50/10' */
|
|
10
|
+
isActiveClassName?: string;
|
|
9
11
|
};
|
|
10
|
-
export default function WindowButton({ children, winId, className, isClosedClassName, isOpenClassName, }: WindowButtonProps): import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
export default function WindowButton({ children, winId, className, isClosedClassName, isOpenClassName, isActiveClassName, }: WindowButtonProps): import("react/jsx-runtime").JSX.Element;
|
|
11
13
|
//# sourceMappingURL=window-button.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"window-button.d.ts","sourceRoot":"","sources":["../../../../src/window-manager/internal/features/window-button.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"window-button.d.ts","sourceRoot":"","sources":["../../../../src/window-manager/internal/features/window-button.tsx"],"names":[],"mappings":"AAGA,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;IAElB,kEAAkE;IAClE,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAE1B,gEAAgE;IAChE,eAAe,CAAC,EAAE,MAAM,CAAA;IAExB,yEAAyE;IACzE,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B,CAAA;AAED,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,EACnC,QAAQ,EACR,KAAK,EACL,SAAS,EACT,iBAAsE,EACtE,eAAkE,EAClE,iBAA6E,GAC9E,EAAE,iBAAiB,2CAsBnB"}
|