@gustavolmo/react-window-manager 0.2.0 → 0.3.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 -644
- package/dist/index.css.map +1 -1
- package/dist/index.d.ts +7 -101
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +787 -678
- package/dist/index.js.map +1 -1
- package/dist/window-manager/internal/assets/svg-win-icons.d.ts +8 -0
- package/dist/window-manager/internal/assets/svg-win-icons.d.ts.map +1 -0
- package/dist/window-manager/internal/features/cursor/cursor-move-listener.d.ts +2 -0
- package/dist/window-manager/internal/features/cursor/cursor-move-listener.d.ts.map +1 -0
- package/dist/window-manager/internal/features/cursor/cursor-state.d.ts +9 -0
- package/dist/window-manager/internal/features/cursor/cursor-state.d.ts.map +1 -0
- package/dist/window-manager/internal/features/docking/docking-api.d.ts +15 -0
- package/dist/window-manager/internal/features/docking/docking-api.d.ts.map +1 -0
- package/dist/window-manager/internal/features/docking/docking-controls.d.ts +2 -0
- package/dist/window-manager/internal/features/docking/docking-controls.d.ts.map +1 -0
- package/dist/window-manager/internal/features/drag/drag-handle.d.ts +6 -0
- package/dist/window-manager/internal/features/drag/drag-handle.d.ts.map +1 -0
- package/dist/window-manager/internal/features/grid/grid-api.d.ts +4 -0
- package/dist/window-manager/internal/features/grid/grid-api.d.ts.map +1 -0
- package/dist/window-manager/internal/features/resizing/resizing-api.d.ts +7 -0
- package/dist/window-manager/internal/features/resizing/resizing-api.d.ts.map +1 -0
- package/dist/window-manager/internal/features/resizing/resizing-controls.d.ts +6 -0
- package/dist/window-manager/internal/features/resizing/resizing-controls.d.ts.map +1 -0
- package/dist/window-manager/internal/features/stack/stack-api.d.ts +6 -0
- package/dist/window-manager/internal/features/stack/stack-api.d.ts.map +1 -0
- package/dist/window-manager/internal/features/view-port/view-port-resize-listener.d.ts +2 -0
- package/dist/window-manager/internal/features/view-port/view-port-resize-listener.d.ts.map +1 -0
- package/dist/window-manager/internal/features/window-button.d.ts +11 -0
- package/dist/window-manager/internal/features/window-button.d.ts.map +1 -0
- package/dist/window-manager/internal/features/window-layout.d.ts +17 -0
- package/dist/window-manager/internal/features/window-layout.d.ts.map +1 -0
- package/dist/window-manager/internal/features/workspace/workspace-api.d.ts +6 -0
- package/dist/window-manager/internal/features/workspace/workspace-api.d.ts.map +1 -0
- package/dist/window-manager/internal/features/workspace/workspace-state.d.ts +3 -0
- package/dist/window-manager/internal/features/workspace/workspace-state.d.ts.map +1 -0
- package/dist/window-manager/model/window-types.d.ts +46 -0
- package/dist/window-manager/model/window-types.d.ts.map +1 -0
- package/dist/window-manager/model/workspace-types.d.ts +20 -0
- package/dist/window-manager/model/workspace-types.d.ts.map +1 -0
- package/dist/window-manager/registration/window-store-factory.d.ts +14 -0
- package/dist/window-manager/registration/window-store-factory.d.ts.map +1 -0
- package/dist/window-manager/rwm.d.ts +33 -0
- package/dist/window-manager/rwm.d.ts.map +1 -0
- package/dist/window-manager/workspace-layout.d.ts +19 -0
- package/dist/window-manager/workspace-layout.d.ts.map +1 -0
- package/package.json +6 -3
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/window-manager/window-store-factory.tsx","../src/window-manager/global-actions/window-global-actions.ts","../src/window-manager/window-button.tsx","../src/screen-manager/cursor-state.ts","../src/screen-manager/screen-listeners.tsx","../src/window-manager/workspace-layout.tsx","../src/window-manager/window-layout.tsx","../src/window-assets/svg-win-icons.tsx","../src/window-manager/components/docking-controls.tsx","../src/window-manager/components/resizing-controls.tsx"],"sourcesContent":["import { create, StoreApi, UseBoundStore } from 'zustand'\r\nimport { RefObject } from 'react'\r\nimport { Coord, ResizeState, WindowStates, WindowStore } from './window-types'\r\n\r\nexport const windowRegistry: Record<string, UseBoundStore<StoreApi<WindowStore>>> = {}\r\n\r\nexport const createWindowStore = (windowId: string, bottomOffsetPx: number) => {\r\n if (windowRegistry[windowId]) console.error('This store ID is already in use: ' + windowId)\r\n\r\n const zIndexAtLaunch = Object.keys(windowRegistry).length + 1\r\n\r\n const storeInstance = create<WindowStore>((set, get) => ({\r\n windowId: windowId,\r\n\r\n isActive: false,\r\n setIsActive: (isActive: boolean) => set({ isActive: isActive }),\r\n\r\n resetFlag: false,\r\n reset: () => set({ resetFlag: !get().resetFlag, isWinMinimized: true }),\r\n\r\n zIndex: zIndexAtLaunch,\r\n setZIndex: (newIndex: number) => set({ zIndex: newIndex }),\r\n\r\n self: undefined,\r\n setSelf: (ref: RefObject<HTMLDivElement | null>) => set({ self: ref }),\r\n\r\n winVisualState: 'demaximized',\r\n setWinVisualState: (newState: WindowStates) => set({ winVisualState: newState }),\r\n\r\n isWinMinimized: true,\r\n setIsWinMinimized: (isMini: boolean) => set({ isWinMinimized: isMini }),\r\n\r\n dragClickOffset: { pointX: 0, pointY: 0 },\r\n setDragClickOffset: (newCoord: Coord) =>\r\n set({ dragClickOffset: { pointX: newCoord.pointX, pointY: newCoord.pointY } }),\r\n\r\n isDragging: false,\r\n setIsDragging: (updatedIsDragging: boolean) => set({ isDragging: updatedIsDragging }),\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 isResizing: false,\r\n setIsResizing: (updatedIsResizing: ResizeState) => set({ isResizing: updatedIsResizing }),\r\n\r\n winWidth: window.innerWidth * 0.95,\r\n setWinWidth: (newWinWidth: number) => set({ winWidth: newWinWidth }),\r\n\r\n winHeight: window.innerHeight * 0.75,\r\n setWinHeight: (newWinHeight: number) => set({ winHeight: newWinHeight }),\r\n\r\n stopDragAndResize: () => set({ isDragging: false, isResizing: false }),\r\n\r\n maximizeWindow: () => {\r\n set({\r\n winCoord: { pointX: 0, pointY: 0 },\r\n winHeight: window.innerHeight - bottomOffsetPx,\r\n winWidth: window.innerWidth,\r\n winVisualState: 'maximized',\r\n })\r\n },\r\n demaximizeWindow: () => {\r\n set({\r\n winCoord: { pointX: 40, pointY: 40 },\r\n winWidth: window.innerWidth * 0.95,\r\n winHeight: window.innerHeight * 0.75,\r\n winVisualState: 'demaximized',\r\n })\r\n },\r\n\r\n minimizeWindow: () => set({ isWinMinimized: true }),\r\n openWindow: () => {\r\n const winRef = get().self\r\n if (get().isWinMinimized && winRef?.current) {\r\n set({ isWinMinimized: false })\r\n winRef.current.style.transform = 'translate(0, 0) scale(1)'\r\n }\r\n },\r\n\r\n dockWindowRight: () => {\r\n set({\r\n winCoord: { pointX: window.innerWidth / 2, pointY: 0 },\r\n winWidth: window.innerWidth / 2,\r\n winHeight: window.innerHeight - bottomOffsetPx,\r\n winVisualState: 'demaximized',\r\n })\r\n },\r\n dockWindowLeft: () => {\r\n set({\r\n winCoord: { pointX: 0, pointY: 0 },\r\n winWidth: window.innerWidth / 2,\r\n winHeight: window.innerHeight - bottomOffsetPx,\r\n winVisualState: 'demaximized',\r\n })\r\n },\r\n\r\n dockWindowTop: () => {\r\n set({\r\n winCoord: { pointX: 0, pointY: 0 },\r\n winWidth: window.innerWidth,\r\n winHeight: window.innerHeight / 2 - bottomOffsetPx / 2,\r\n winVisualState: 'demaximized',\r\n })\r\n },\r\n dockWindowBottom: () => {\r\n set({\r\n winCoord: { pointX: 0, pointY: window.innerHeight / 2 - bottomOffsetPx / 2 },\r\n winWidth: window.innerWidth,\r\n winHeight: window.innerHeight / 2 - bottomOffsetPx / 2,\r\n winVisualState: 'demaximized',\r\n })\r\n },\r\n\r\n dockWindowBottomRight: () =>\r\n set({\r\n winCoord: {\r\n pointX: window.innerWidth / 2,\r\n pointY: window.innerHeight / 2 - bottomOffsetPx / 2,\r\n },\r\n winWidth: window.innerWidth / 2,\r\n winHeight: window.innerHeight / 2 - bottomOffsetPx / 2,\r\n winVisualState: 'demaximized',\r\n }),\r\n dockWindowTopRight: () =>\r\n set({\r\n winCoord: { pointX: window.innerWidth / 2, pointY: 0 },\r\n winWidth: window.innerWidth / 2,\r\n winHeight: window.innerHeight / 2 - bottomOffsetPx / 2,\r\n winVisualState: 'demaximized',\r\n }),\r\n\r\n dockWindowBottomLeft: () =>\r\n set({\r\n winCoord: { pointX: 0, pointY: window.innerHeight / 2 - bottomOffsetPx / 2 },\r\n winWidth: window.innerWidth / 2,\r\n winHeight: window.innerHeight / 2 - bottomOffsetPx / 2,\r\n winVisualState: 'demaximized',\r\n }),\r\n dockWindowTopLeft: () =>\r\n set({\r\n winCoord: { pointX: 0, pointY: 0 },\r\n winWidth: window.innerWidth / 2,\r\n winHeight: window.innerHeight / 2 - bottomOffsetPx / 2,\r\n winVisualState: 'demaximized',\r\n }),\r\n\r\n WIN_MIN_WIDTH: 232,\r\n WIN_MIN_HEIGHT: 128,\r\n setWIN_MIN_WIDTH: (w: number) => set({ WIN_MIN_WIDTH: w }),\r\n setWIN_MIN_HEIGHT: (h: number) => set({ WIN_MIN_HEIGHT: h }),\r\n }))\r\n\r\n windowRegistry[windowId] = storeInstance\r\n\r\n return storeInstance\r\n}\r\n","import { windowRegistry } from '../window-store-factory'\r\n\r\nexport const stopAllDragAndResize = () => {\r\n for (const key of Object.keys(windowRegistry)) {\r\n windowRegistry[key].getState().stopDragAndResize()\r\n }\r\n}\r\n\r\nexport const resetAllWindows = () => {\r\n for (const key of Object.keys(windowRegistry)) {\r\n windowRegistry[key].getState().reset()\r\n }\r\n}\r\n\r\nexport const 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\nexport const getOpenedWindowCount = () => {\r\n let openWnidowCount = 0\r\n\r\n for (const key of Object.keys(windowRegistry)) {\r\n if (!windowRegistry[key].getState().isWinMinimized) openWnidowCount++\r\n }\r\n\r\n return openWnidowCount\r\n}\r\n","import { StoreApi, UseBoundStore } from 'zustand'\r\nimport { WindowStore } from './window-types'\r\nimport { bringTargetWindowToFront } from './global-actions/window-global-actions'\r\n\r\ntype Prop = {\r\n children: React.ReactNode\r\n useWindowStore: UseBoundStore<StoreApi<WindowStore>>\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 useWindowStore,\r\n className,\r\n isClosedClassName = 'brightness-[85%]',\r\n isOpenClassName = 'brightness-150',\r\n}: Prop) {\r\n const { openWindow, minimizeWindow, isWinMinimized, windowId, isActive } = useWindowStore()\r\n\r\n const handleOpenCloseWin = () => {\r\n if (isWinMinimized) {\r\n bringTargetWindowToFront(windowId)\r\n openWindow()\r\n return\r\n }\r\n\r\n if (isActive) {\r\n minimizeWindow()\r\n }\r\n\r\n 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 ${isWinMinimized ? isClosedClassName : isOpenClassName}`}\r\n >\r\n {children}\r\n </button>\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 { resetAllWindows } from '../window-manager/global-actions/window-global-actions'\r\nimport { useCursorState } from './cursor-state'\r\nimport { useEffect } from 'react'\r\n\r\nexport default function ScreenListeners() {\r\n return (\r\n <>\r\n <CursorCoordinates />\r\n <WindowResizeReset />\r\n </>\r\n )\r\n}\r\n\r\n/** @FixMe Until I find a better way to handle browser resize, the react window state resets if the browser resizes */\r\nfunction WindowResizeReset() {\r\n useEffect(() => {\r\n const handleWindowResize = () => {\r\n resetAllWindows()\r\n }\r\n\r\n window.addEventListener('resize', handleWindowResize)\r\n\r\n return () => document.removeEventListener('pointermove', handleWindowResize)\r\n }, [])\r\n\r\n return <></>\r\n}\r\n\r\nfunction CursorCoordinates() {\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 document.addEventListener('pointermove', handleWindowPosition)\r\n\r\n return () => document.removeEventListener('pointermove', handleWindowPosition)\r\n }, [setX, setY])\r\n\r\n return <></>\r\n}\r\n","import ScreenListeners from '../screen-manager/screen-listeners'\r\nimport { stopAllDragAndResize } from './global-actions/window-global-actions'\r\n\r\ntype Props = {\r\n children: React.ReactNode\r\n}\r\n\r\nexport default function WorkspaceLayout({ children }: Props) {\r\n return (\r\n <main\r\n onMouseLeave={stopAllDragAndResize}\r\n onMouseUp={stopAllDragAndResize}\r\n className=\"absolute overflow-hidden h-full w-full touch-none\"\r\n >\r\n <ScreenListeners />\r\n {children}\r\n </main>\r\n )\r\n}\r\n","import { useCursorState } from '../screen-manager/cursor-state'\r\nimport { useEffect, useRef } from 'react'\r\nimport { StoreApi, UseBoundStore } from 'zustand'\r\nimport { WindowStore, ResizeState } from './window-types'\r\nimport { iconWinMinimize, iconWinDemaximize, iconWinMaximize } from '../window-assets/svg-win-icons'\r\nimport { bringTargetWindowToFront } from './global-actions/window-global-actions'\r\nimport DockingControls from './components/docking-controls'\r\nimport ResizingControls from './components/resizing-controls'\r\n\r\ntype ResponsiveSizes = 'sm' | 'md' | 'lg' | 'xl' | 'never' | 'always' | number\r\ntype StoreProp = {\r\n children: React.ReactNode\r\n windowName: string | React.ReactNode\r\n useWindowStore: UseBoundStore<StoreApi<WindowStore>>\r\n /**\r\n * @default 'lg'\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 navbarChildren?: React.ReactNode\r\n defaultDock?: 'right' | 'left' | 'full'\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 responsiveBreak = 'lg',\r\n children,\r\n windowName,\r\n navbarChildren,\r\n useWindowStore,\r\n defaultDock,\r\n style,\r\n}: StoreProp) {\r\n const { x, y } = useCursorState()\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 isWinMinimized,\r\n\r\n dragClickOffset,\r\n setDragClickOffset,\r\n\r\n isDragging,\r\n setIsDragging,\r\n\r\n winCoord,\r\n setWinCoord,\r\n\r\n setIsResizing,\r\n\r\n winWidth,\r\n winHeight,\r\n\r\n minimizeWindow,\r\n maximizeWindow,\r\n demaximizeWindow,\r\n\r\n dockWindowRight,\r\n dockWindowLeft,\r\n } = useWindowStore()\r\n\r\n useEffect(() => {\r\n setSelf(windowRef)\r\n\r\n if (isMobile()) maximizeWindow()\r\n else if (defaultDock === 'left') dockWindowLeft()\r\n else if (defaultDock === 'right') dockWindowRight()\r\n else if (defaultDock === 'full') maximizeWindow()\r\n else demaximizeWindow()\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [setSelf, windowRef, resetFlag])\r\n\r\n useEffect(() => {\r\n if (isMobile()) return\r\n if (!isDragging) return\r\n\r\n if (winVisualState === 'maximized') demaximizeWindow()\r\n\r\n let adjustedX = x - dragClickOffset.pointX\r\n if (x > window.innerWidth || x < 0) adjustedX = winCoord.pointX\r\n\r\n let adjustedY = y - dragClickOffset.pointY\r\n if (y > window.innerHeight || y < 0) 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 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\r\n const handleNavbarClick = (isDragging: boolean) => {\r\n setDragClickOffset({ pointX: x - winCoord.pointX, pointY: y - winCoord.pointY })\r\n setIsDragging(isDragging)\r\n }\r\n\r\n const isMobile = (): boolean => {\r\n return window.innerWidth < responsiveBreakInPx(responsiveBreak)\r\n }\r\n\r\n const handleResizeClick = (isResizing: ResizeState) => {\r\n setIsResizing(isResizing)\r\n }\r\n\r\n const maximizeControl =\r\n winVisualState === 'maximized' ? (\r\n <button\r\n className={`block hover:bg-gray-100 hover:bg-opacity-20 px-5 h-full`}\r\n onClick={demaximizeWindow}\r\n >\r\n {iconWinDemaximize(style?.navControlsColor)}\r\n </button>\r\n ) : (\r\n <button\r\n className={`block hover:bg-gray-100 hover:bg-opacity-20 px-5 h-full`}\r\n onClick={maximizeWindow}\r\n >\r\n {iconWinMaximize(style?.navControlsColor)}\r\n </button>\r\n )\r\n\r\n const minimizeControl = (\r\n <button className=\"hover:bg-red-500 hover:bg-opacity-20 px-5 h-full\" onClick={minimizeWindow}>\r\n {iconWinMinimize(style?.navControlsColor)}\r\n </button>\r\n )\r\n\r\n return (\r\n <>\r\n {!isMobile() && <DockingControls useWindowStore={useWindowStore} />}\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={() => bringTargetWindowToFront(windowId)}\r\n onMouseUp={() => {\r\n handleNavbarClick(false)\r\n handleResizeClick(false)\r\n }}\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: isWinMinimized ? 0 : 1,\r\n transform: isWinMinimized\r\n ? `translate(${window.innerWidth / 2 - winCoord.pointX - winWidth / 2}px,\r\n ${window.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 <div\r\n onMouseDown={() => handleNavbarClick(true)}\r\n onDoubleClick={maximizeWindow}\r\n className=\"grow min-w-8 h-8 px-2 text-white flex items-center text-sm\"\r\n ></div>\r\n\r\n {!isMobile() && maximizeControl}\r\n {minimizeControl}\r\n </nav>\r\n\r\n {!isMobile() && <ResizingControls useWindowStore={useWindowStore} windowRef={windowRef} />}\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","export function iconWinMaximize(color?: string) {\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?: string) {\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?: string) {\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 { useEffect, useState } from 'react'\r\nimport { StoreApi, UseBoundStore } from 'zustand'\r\nimport { WindowStore } from '../window-types'\r\n\r\ntype Props = {\r\n useWindowStore: UseBoundStore<StoreApi<WindowStore>>\r\n}\r\n\r\nexport default function DockingControls({ useWindowStore }: Props) {\r\n const {\r\n isDragging,\r\n\r\n dockWindowRight,\r\n dockWindowLeft,\r\n\r\n dockWindowBottom,\r\n dockWindowTop,\r\n\r\n dockWindowTopLeft,\r\n dockWindowBottomLeft,\r\n dockWindowTopRight,\r\n dockWindowBottomRight,\r\n } = useWindowStore()\r\n\r\n const [isVisible, setIsVisible] = useState(false)\r\n const [isHovering, setIsHovering] = useState(false)\r\n useEffect(() => {\r\n let dealy: ReturnType<typeof setTimeout>\r\n\r\n if (isDragging) {\r\n dealy = setTimeout(() => {\r\n setIsVisible(true)\r\n }, 100)\r\n } else {\r\n setIsVisible(false)\r\n }\r\n\r\n return () => clearTimeout(dealy)\r\n }, [isDragging])\r\n\r\n const cornerDockControl = (\r\n <div className={`flex xl:p-0 shrink-0 gap-0.5`}>\r\n {/* LEFT SIDE */}\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={dockWindowTopLeft}\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={dockWindowBottomLeft}\r\n ></button>\r\n </div>\r\n {/* RIGHT SIDE */}\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={dockWindowTopRight}\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={dockWindowBottomRight}\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={dockWindowLeft}\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={dockWindowRight}\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={dockWindowTop}\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={dockWindowBottom}\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-4\"\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 return (\r\n <div\r\n className={`\r\n ${\r\n isVisible\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 { StoreApi, UseBoundStore } from 'zustand'\r\nimport { Coord, ResizeState, WindowStore } from '../window-types'\r\nimport { useCursorState } from '../../screen-manager/cursor-state'\r\nimport { RefObject, useEffect } from 'react'\r\nimport { windowRegistry } from '../window-store-factory'\r\nimport { getOpenedWindowCount } from '../global-actions/window-global-actions'\r\n\r\ntype Props = {\r\n useWindowStore: UseBoundStore<StoreApi<WindowStore>>\r\n windowRef: RefObject<HTMLDivElement | null>\r\n}\r\n\r\nexport default function ResizingControls({ useWindowStore, windowRef }: Props) {\r\n const { x, y } = useCursorState()\r\n const {\r\n windowId,\r\n\r\n setWinVisualState,\r\n\r\n winCoord,\r\n setWinCoord,\r\n\r\n isResizing,\r\n setIsResizing,\r\n\r\n winWidth,\r\n setWinWidth,\r\n\r\n winHeight,\r\n setWinHeight,\r\n\r\n WIN_MIN_WIDTH,\r\n WIN_MIN_HEIGHT,\r\n } = useWindowStore()\r\n\r\n useEffect(() => {\r\n if (!isResizing) return\r\n\r\n setWinVisualState('demaximized')\r\n if (isResizing === 'bottom-height') resizeBottomWinHeight()\r\n if (isResizing === 'top-height') resizeTopWinHeight()\r\n\r\n if (isResizing === 'right-width') resizeRightWinWidth()\r\n if (isResizing === 'left-width') resizeLeftWinWidth()\r\n\r\n if (isResizing === 'bottom-right-all') resizeRightBottomWidthAndHeight()\r\n if (isResizing === 'bottom-left-all') resizeLeftBottomWidthAndHeight()\r\n\r\n if (isResizing === 'top-right-all') resizeRightTopWidthAndHeight()\r\n if (isResizing === 'top-left-all') resizeLeftTopWidthAndHeight()\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [isResizing, x, y])\r\n\r\n const resizeRightWinWidth = () => {\r\n const winBox = windowRef.current?.getBoundingClientRect()\r\n if (!winBox) return\r\n\r\n const minWinWidth = x - winBox.left < WIN_MIN_WIDTH\r\n if (minWinWidth) return\r\n\r\n const cursorOutOfBounds = x > window.innerWidth || x < 0\r\n if (cursorOutOfBounds) return\r\n\r\n const sizeDiff = x - winBox.right\r\n setWinWidth(winWidth + sizeDiff)\r\n }\r\n\r\n const resizeLeftWinWidth = () => {\r\n const winBox = windowRef.current?.getBoundingClientRect()\r\n if (!winBox) return\r\n\r\n const minWinWidth = winBox.right - x <= WIN_MIN_WIDTH\r\n if (minWinWidth) return\r\n\r\n const cursorOutOfBounds = x > window.innerWidth || x < 0\r\n if (cursorOutOfBounds) return\r\n\r\n const sizeDiff = winBox.left - x\r\n setWinWidth(winWidth + sizeDiff)\r\n setWinCoord({ pointX: x, pointY: winCoord.pointY })\r\n }\r\n\r\n const resizeTopWinHeight = () => {\r\n const winBox = windowRef.current?.getBoundingClientRect()\r\n if (!winBox) return\r\n\r\n const minWinHeight = winBox.bottom - y <= WIN_MIN_HEIGHT\r\n if (minWinHeight) return\r\n\r\n const cursorOutOfBounds = y > window.innerHeight || y < 0\r\n if (cursorOutOfBounds) return\r\n\r\n const sizeDiff = winBox.top - y\r\n setWinHeight(winHeight + sizeDiff)\r\n setWinCoord({ pointX: winCoord.pointX, pointY: y })\r\n }\r\n\r\n const resizeBottomWinHeight = () => {\r\n const winBox = windowRef.current?.getBoundingClientRect()\r\n if (!winBox) return\r\n\r\n const minWinHeight = y - winBox.top < WIN_MIN_HEIGHT\r\n if (minWinHeight) return\r\n\r\n const cursorOutOfBounds = y > window.innerHeight || y < 0\r\n if (cursorOutOfBounds) return\r\n\r\n const sizeDiff = y - winBox.bottom\r\n setWinHeight(winHeight + sizeDiff)\r\n }\r\n\r\n const resizeRightBottomWidthAndHeight = () => {\r\n resizeRightWinWidth()\r\n resizeBottomWinHeight()\r\n }\r\n\r\n const resizeLeftBottomWidthAndHeight = () => {\r\n resizeLeftWinWidth()\r\n resizeBottomWinHeight()\r\n }\r\n\r\n const resizeRightTopWidthAndHeight = () => {\r\n resizeRightWinWidth()\r\n resizeTopWinHeight()\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 const resizeLeftTopWidthAndHeight = () => {\r\n const winBox = windowRef.current?.getBoundingClientRect()\r\n if (!winBox) return\r\n\r\n const cursorOutOfBoundsY = y > window.innerHeight || y < 0\r\n const cursorOutOfBoundsX = x > window.innerWidth || x < 0\r\n if (cursorOutOfBoundsY || cursorOutOfBoundsX) return\r\n\r\n const minWinHeight = winBox.bottom - y <= WIN_MIN_HEIGHT\r\n const minWinWidth = winBox.right - x <= WIN_MIN_WIDTH\r\n\r\n setWinCoord({\r\n pointX: minWinWidth ? winCoord.pointX : x,\r\n pointY: minWinHeight ? winCoord.pointY : y,\r\n })\r\n\r\n if (!minWinHeight) {\r\n const sizeDiffY = winBox.top - y\r\n setWinHeight(winHeight + sizeDiffY)\r\n }\r\n\r\n if (!minWinWidth) {\r\n const sizeDiffX = winBox.left - x\r\n setWinWidth(winWidth + sizeDiffX)\r\n }\r\n }\r\n\r\n const handleResizeClick = (isResizing: ResizeState) => {\r\n setIsResizing(isResizing)\r\n setRemoteIsResizing(isResizing)\r\n }\r\n\r\n /** @FixMe this function is a nice feature, but very complex, needs to be written in a clearer way */\r\n const setRemoteIsResizing = (currentResize: ResizeState) => {\r\n const tolerance = 4\r\n const allowDistantResize = getOpenedWindowCount() >= 3\r\n\r\n for (const key of Object.keys(windowRegistry)) {\r\n const remoteWin = windowRegistry[key].getState()\r\n const thisWin = windowRegistry[windowId].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 === 'right-width') {\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.setIsResizing('left-width')\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.setIsResizing('right-width')\r\n }\r\n }\r\n\r\n /*\r\n * thisWin left edge <::::> remoteWin right edge || remoteWin is stacked */\r\n if (currentResize === 'left-width') {\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.setIsResizing('right-width')\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.setIsResizing('left-width')\r\n }\r\n }\r\n\r\n /*\r\n * thisWin top edge <::::> remoteWin bottom edge || remoteWin is stacked */\r\n if (currentResize === 'top-height') {\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.setIsResizing('bottom-height')\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.setIsResizing('top-height')\r\n }\r\n }\r\n\r\n /*\r\n * thisWin bottom edge <::::> remoteWin top edge || remoteWin is stacked */\r\n if (currentResize === 'bottom-height') {\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.setIsResizing('top-height')\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.setIsResizing('bottom-height')\r\n }\r\n }\r\n }\r\n }\r\n\r\n return (\r\n <>\r\n <span\r\n onMouseDown={() => handleResizeClick('right-width')}\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 onMouseDown={() => handleResizeClick('left-width')}\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 onMouseDown={() => handleResizeClick('bottom-height')}\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 onMouseDown={() => handleResizeClick('top-height')}\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 onMouseDown={() => handleResizeClick('bottom-right-all')}\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 onMouseDown={() => handleResizeClick('bottom-left-all')}\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 onMouseDown={() => handleResizeClick('top-right-all')}\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 onMouseDown={() => handleResizeClick('top-left-all')}\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"],"mappings":"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","names":["window","create","jsx","jsx","jsxs","useEffect","jsx","useEffect","jsx","jsxs","useEffect","Fragment","jsx","jsxs","useEffect","isResizing","Fragment","jsx","jsxs","useEffect","isDragging"]}
|
|
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":";AAAA,SAAS,UAAAA,eAAuC;;;ACAhD,SAAS,aAAAC,YAAW,cAAc;;;ACiB5B;AAbC,SAAS,gBAAgB,EAAC,MAAK,GAAU;AAC9C,SACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAM;AAAA,MACN,MAAK;AAAA,MACL,SAAQ;AAAA,MACR,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,QAAQ,QAAQ,QAAQ;AAAA,MACxB,OAAO,QAAQ,QAAQ;AAAA,MACvB,WAAU;AAAA,MAEV;AAAA,QAAC;AAAA;AAAA,UACC,eAAc;AAAA,UACd,gBAAe;AAAA,UACf,GAAE;AAAA;AAAA,MACJ;AAAA;AAAA,EACF;AAEJ;AAEO,SAAS,kBAAkB,EAAC,MAAK,GAAU;AAChD,SACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAM;AAAA,MACN,MAAK;AAAA,MACL,SAAQ;AAAA,MACR,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,QAAQ,QAAQ,QAAQ;AAAA,MACxB,OAAO,QAAQ,QAAQ;AAAA,MACvB,WAAU;AAAA,MAEV;AAAA,QAAC;AAAA;AAAA,UACC,eAAc;AAAA,UACd,gBAAe;AAAA,UACf,GAAE;AAAA;AAAA,MACJ;AAAA;AAAA,EACF;AAEJ;AAEO,SAAS,gBAAgB,EAAC,MAAK,GAAU;AAC9C,SACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAM;AAAA,MACN,MAAK;AAAA,MACL,SAAQ;AAAA,MACR,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,QAAQ,QAAQ,QAAQ;AAAA,MACxB,OAAO,QAAQ,QAAQ;AAAA,MACvB,WAAU;AAAA,MAEV,8BAAC,UAAK,eAAc,SAAQ,gBAAe,SAAQ,GAAE,wBAAuB;AAAA;AAAA,EAC9E;AAEJ;;;AChEA,SAAS,cAAc;AAShB,IAAM,iBAAiB,OAAoB,CAAC,SAAS;AAAA,EAC1D,GAAG;AAAA,EACH,GAAG;AAAA,EACH,MAAM,CAAC,SAAiB,IAAI,EAAE,GAAG,KAAK,CAAC;AAAA,EACvC,MAAM,CAAC,SAAiB,IAAI,EAAE,GAAG,KAAK,CAAC;AACzC,EAAE;;;ACZF,SAAS,iBAAiB;;;ACF1B,SAAS,UAAAC,eAAc;AAGhB,IAAM,oBAAoBA,QAAuB,CAAC,SAAS;AAAA,EAChE,KAAK;AAAA,EACL,QAAQ,CAAC,WAA+B,IAAI,EAAE,KAAK,OAAO,CAAC;AAAA,EAE3D,gBAAgB;AAAA,EAChB,mBAAmB,CAAC,UAAkB,IAAI,EAAE,gBAAgB,MAAM,CAAC;AAAA,EAEnE,iBAAiB;AAAA,EACjB,oBAAoB,CAAC,eAAgC,IAAI,EAAE,iBAAiB,WAAW,CAAC;AAC1F,EAAE;;;ACTK,IAAM,QAAQ;AAAA,EACnB,SAAS,MAAqB;AAC5B,UAAM,OAAO,kBAAkB,SAAS,EAAE,KAAK,sBAAsB;AAErE,UAAM,MAAM,MAAM,OAAO;AACzB,UAAM,OAAO,MAAM,QAAQ;AAC3B,UAAM,cAAc,MAAM,UAAU;AACpC,UAAM,aAAa,MAAM,SAAS;AAElC,UAAM,SAAS,MAAM;AACrB,UAAM,QAAQ,OAAO;AAErB,UAAM,UAAU,OAAO,aAAa;AACpC,UAAM,UAAU,MAAM,cAAc;AAEpC,UAAM,WAAW;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,mBAAmB,MAAe;AAChC,UAAM,SAAS,MAAM,QAAQ;AAC7B,UAAM,aAAa,kBAAkB,SAAS,EAAE;AAChD,WAAO,OAAO,aAAa,oBAAoB,UAAU;AAAA,EAC3D;AACF;AAEA,IAAM,sBAAsB,CAAC,eAAwC;AACnE,UAAQ,YAAY;AAAA,IAClB,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;;;AC1CO,IAAM,YAAY;AAAA,EACvB,sBAAsB,MAAM;AAC1B,eAAW,OAAO,OAAO,KAAK,cAAc,GAAG;AAC7C,qBAAe,GAAG,EAAE,SAAS,EAAE,aAAa;AAC5C,qBAAe,GAAG,EAAE,SAAS,EAAE,eAAe;AAAA,IAChD;AAAA,EACF;AAAA,EAEA,iBAAiB,CAAC,OAAe,WAAwB;AACvD,mBAAe,KAAK,EAAE,SAAS,EAAE,cAAc,OAAO,CAAC;AAAA,EACzD;AAAA,EAEA,sBAAsB,CAAC,UAAkB;AACvC,UAAM,MAAM,gBAAgB,KAAK;AACjC,QAAI,CAAC,IAAI,IAAI;AAAc;AAE3B,QAAI,IAAI,kBAAkB,aAAa;AAEvC,YAAQ,IAAI,IAAI,cAAc;AAAA,MAC5B,KAAK;AACH,mBAAW,sBAAsB,GAAG;AACpC;AAAA,MAEF,KAAK;AACH,mBAAW,mBAAmB,GAAG;AACjC;AAAA,MAEF,KAAK;AACH,mBAAW,oBAAoB,GAAG;AAClC;AAAA,MAEF,KAAK;AACH,mBAAW,mBAAmB,GAAG;AACjC;AAAA,MAEF,KAAK;AACH,mBAAW,gCAAgC,GAAG;AAC9C;AAAA,MAEF,KAAK;AACH,mBAAW,+BAA+B,GAAG;AAC7C;AAAA,MAEF,KAAK;AACH,mBAAW,6BAA6B,GAAG;AAC3C;AAAA,MAEF,KAAK;AACH,mBAAW,4BAA4B,GAAG;AAC1C;AAAA,IACJ;AAAA,EACF;AACF;AAEA,IAAM,aAAa;AAAA,EACjB,qBAAqB,CAAC,cAA6B;AACjD,UAAM,EAAE,QAAQ,KAAK,QAAQ,GAAG,EAAE,IAAI;AAEtC,QAAI,CAAC;AAAQ;AAEb,UAAM,cAAc,IAAI,OAAO,OAAO,IAAI;AAC1C,QAAI;AAAa;AAEjB,UAAM,oBAAoB,IAAI,OAAO,SAAS,IAAI,OAAO;AACzD,QAAI;AAAmB;AAEvB,UAAM,WAAW,IAAI,OAAO;AAC5B,QAAI,YAAY,IAAI,WAAW,QAAQ;AAAA,EACzC;AAAA,EAEA,oBAAoB,CAAC,cAA6B;AAChD,UAAM,EAAE,QAAQ,KAAK,QAAQ,GAAG,EAAE,IAAI;AACtC,QAAI,CAAC;AAAQ;AAEb,UAAM,cAAc,OAAO,QAAQ,KAAK,IAAI;AAC5C,QAAI;AAAa;AAEjB,UAAM,oBAAoB,IAAI,OAAO,SAAS,IAAI,OAAO;AACzD,QAAI;AAAmB;AAEvB,UAAM,WAAW,OAAO,OAAO;AAC/B,QAAI,YAAY,IAAI,WAAW,QAAQ;AACvC,QAAI,YAAY,EAAE,QAAQ,GAAG,QAAQ,IAAI,SAAS,OAAO,CAAC;AAAA,EAC5D;AAAA,EAEA,oBAAoB,CAAC,cAA6B;AAChD,UAAM,EAAE,QAAQ,KAAK,QAAQ,GAAG,EAAE,IAAI;AAEtC,QAAI,CAAC;AAAQ;AAEb,UAAM,eAAe,OAAO,SAAS,KAAK,IAAI;AAC9C,QAAI;AAAc;AAElB,UAAM,oBAAoB,IAAI,OAAO,UAAU,IAAI,OAAO;AAC1D,QAAI;AAAmB;AAEvB,UAAM,WAAW,OAAO,MAAM;AAC9B,QAAI,aAAa,IAAI,YAAY,QAAQ;AACzC,QAAI,YAAY,EAAE,QAAQ,IAAI,SAAS,QAAQ,QAAQ,EAAE,CAAC;AAAA,EAC5D;AAAA,EAEA,uBAAuB,CAAC,cAA6B;AACnD,UAAM,EAAE,QAAQ,KAAK,QAAQ,GAAG,EAAE,IAAI;AACtC,QAAI,CAAC;AAAQ;AAEb,UAAM,eAAe,IAAI,OAAO,MAAM,IAAI;AAC1C,QAAI;AAAc;AAElB,UAAM,oBAAoB,IAAI,OAAO,UAAU,IAAI,OAAO;AAC1D,QAAI;AAAmB;AAEvB,UAAM,WAAW,IAAI,OAAO;AAC5B,QAAI,aAAa,IAAI,YAAY,QAAQ;AAAA,EAC3C;AAAA,EAEA,iCAAiC,CAAC,cAA6B;AAC7D,eAAW,oBAAoB,SAAS;AACxC,eAAW,sBAAsB,SAAS;AAAA,EAC5C;AAAA,EAEA,gCAAgC,CAAC,cAA6B;AAC5D,eAAW,mBAAmB,SAAS;AACvC,eAAW,sBAAsB,SAAS;AAAA,EAC5C;AAAA,EAEA,8BAA8B,CAAC,cAA6B;AAC1D,eAAW,oBAAoB,SAAS;AACxC,eAAW,mBAAmB,SAAS;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,6BAA6B,CAAC,cAA6B;AACzD,UAAM,EAAE,QAAQ,KAAK,QAAQ,GAAG,EAAE,IAAI;AACtC,QAAI,CAAC;AAAQ;AAEb,UAAM,qBAAqB,IAAI,OAAO,UAAU,IAAI,OAAO;AAC3D,UAAM,qBAAqB,IAAI,OAAO,SAAS,IAAI,OAAO;AAC1D,QAAI,sBAAsB;AAAoB;AAE9C,UAAM,eAAe,OAAO,SAAS,KAAK,IAAI;AAC9C,UAAM,cAAc,OAAO,QAAQ,KAAK,IAAI;AAE5C,QAAI,YAAY;AAAA,MACd,QAAQ,cAAc,IAAI,SAAS,SAAS;AAAA,MAC5C,QAAQ,eAAe,IAAI,SAAS,SAAS;AAAA,IAC/C,CAAC;AAED,QAAI,CAAC,cAAc;AACjB,YAAM,YAAY,OAAO,MAAM;AAC/B,UAAI,aAAa,IAAI,YAAY,SAAS;AAAA,IAC5C;AAEA,QAAI,CAAC,aAAa;AAChB,YAAM,YAAY,OAAO,OAAO;AAChC,UAAI,YAAY,IAAI,WAAW,SAAS;AAAA,IAC1C;AAAA,EACF;AACF;AAEA,IAAM,kBAAkB,CAAC,UAAiC;AACxD,QAAM,SAAS,MAAM,QAAQ;AAC7B,QAAM,MAAM,eAAe,KAAK,EAAE,SAAS;AAC3C,QAAM,SAAS,IAAI,MAAM,SAAS,sBAAsB;AACxD,QAAM,EAAE,GAAG,EAAE,IAAI,eAAe,SAAS;AAEzC,SAAO,EAAE,QAAQ,KAAK,QAAQ,GAAG,EAAE;AACrC;;;ACtLO,IAAM,WAAW;AAAA,EACtB,0BAA0B,CAAC,aAAqB;AAC9C,UAAM,eAAe,eAAe,QAAQ,EAAE,SAAS;AAEvD,eAAW,OAAO,OAAO,KAAK,cAAc,GAAG;AAC7C,YAAMC,UAAS,eAAe,GAAG,EAAE,SAAS;AAE5C,UAAIA,QAAO,aAAa,aAAa,UAAU;AAC7C;AAAA,MACF;AAEA,MAAAA,QAAO,YAAY,KAAK;AACxB,UAAIA,QAAO,UAAU,aAAa,QAAQ;AACxC,QAAAA,QAAO,UAAUA,QAAO,SAAS,CAAC;AAAA,MACpC;AAAA,IACF;AAEA,iBAAa,UAAU,OAAO,KAAK,cAAc,EAAE,MAAM;AACzD,iBAAa,YAAY,IAAI;AAAA,EAC/B;AAAA,EAEA,sBAAsB,MAAM;AAC1B,QAAI,kBAAkB;AACtB,eAAW,OAAO,OAAO,KAAK,cAAc;AAC1C,UAAI,CAAC,eAAe,GAAG,EAAE,SAAS,EAAE;AAAgB;AAEtD,WAAO;AAAA,EACT;AAAA,EAEA,YAAY,MAAM;AAChB,eAAW,OAAO,OAAO,KAAK,cAAc,GAAG;AAC7C,qBAAe,GAAG,EAAE,SAAS,EAAE,MAAM;AAAA,IACvC;AAAA,EACF;AACF;;;ACjCO,IAAM,UAAU;AAAA,EACrB,uBAAuB,CAAC,UAAkB,wBAAwB,KAAK;AACzE;AAUA,IAAM,0BAA0B,CAAC,UAAkB;AACjD,QAAM,YAAY;AAClB,QAAM,qBAAqB,SAAS,qBAAqB,KAAK;AAC9D,QAAM,UAAU,eAAe,KAAK,EAAE,SAAS;AAC/C,QAAM,gBAAgB,QAAQ;AAE9B,aAAW,OAAO,OAAO,KAAK,cAAc,GAAG;AAC7C,UAAM,YAAY,eAAe,GAAG,EAAE,SAAS;AAE/C,QAAI,UAAU,aAAa,QAAQ,UAAU;AAC3C;AAAA,IACF;AAEA,UAAM,gBAAgB,QAAQ,SAAS;AACvC,UAAM,cAAc,QAAQ,SAAS,SAAS,QAAQ;AACtD,UAAM,kBAAkB,UAAU,SAAS;AAC3C,UAAM,gBAAgB,UAAU,SAAS,SAAS,UAAU;AAE5D,UAAM,gBAAgB,QAAQ,SAAS;AACvC,UAAM,cAAc,QAAQ,SAAS,SAAS,QAAQ;AACtD,UAAM,kBAAkB,UAAU,SAAS;AAC3C,UAAM,gBAAgB,UAAU,SAAS,SAAS,UAAU;AAE5D,UAAM,kBACJ,kBAAkB,eAClB,kBAAkB,eAClB,oBAAoB,iBACpB,oBAAoB;AAGtB,QAAI,kBAAkB,KAAK;AACzB,YAAM,uBAAuB,KAAK,IAAI,cAAc,eAAe,KAAK;AACxE,YAAM,mBAAmB,iBAAiB,iBAAiB,eAAe;AAE1E,YAAM,eAAe,qBACjB,uBACA,wBAAwB;AAC5B,UAAI,cAAc;AAChB,kBAAU,gBAAgB,GAAG;AAAA,MAC/B;AAEA,YAAM,qBACJ,KAAK,IAAI,cAAc,aAAa,IAAI,aACxC,KAAK,IAAI,gBAAgB,eAAe,IAAI;AAC9C,YAAM,wBACJ,KAAK,IAAI,cAAc,eAAe,IAAI,aAC1C,KAAK,IAAI,gBAAgB,aAAa,IAAI;AAE5C,YAAM,gBAAgB,qBAClB,sBAAsB,kBACtB,sBAAsB;AAC1B,UAAI,eAAe;AACjB,kBAAU,gBAAgB,GAAG;AAAA,MAC/B;AAAA,IACF;AAIA,QAAI,kBAAkB,KAAK;AACzB,YAAM,uBAAuB,KAAK,IAAI,gBAAgB,aAAa,KAAK;AACxE,YAAM,mBAAmB,iBAAiB,iBAAiB,eAAe;AAE1E,YAAM,eAAe,qBACjB,uBACA,wBAAwB;AAC5B,UAAI,cAAc;AAChB,kBAAU,gBAAgB,GAAG;AAAA,MAC/B;AAEA,YAAM,qBACJ,KAAK,IAAI,cAAc,aAAa,IAAI,aACxC,KAAK,IAAI,gBAAgB,eAAe,IAAI;AAC9C,YAAM,wBACJ,KAAK,IAAI,cAAc,eAAe,IAAI,aAC1C,KAAK,IAAI,gBAAgB,aAAa,IAAI;AAE5C,YAAM,gBAAgB,qBAClB,sBAAsB,kBACtB,sBAAsB;AAC1B,UAAI,eAAe;AACjB,kBAAU,gBAAgB,GAAG;AAAA,MAC/B;AAAA,IACF;AAIA,QAAI,kBAAkB,KAAK;AACzB,YAAM,uBAAuB,KAAK,IAAI,gBAAgB,aAAa,KAAK;AACxE,YAAM,mBAAmB,iBAAiB,iBAAiB,eAAe;AAE1E,YAAM,eAAe,qBACjB,uBACA,wBAAwB;AAC5B,UAAI,cAAc;AAChB,kBAAU,gBAAgB,GAAG;AAAA,MAC/B;AAEA,YAAM,qBACJ,KAAK,IAAI,cAAc,aAAa,IAAI,aACxC,KAAK,IAAI,gBAAgB,eAAe,IAAI;AAC9C,YAAM,wBACJ,KAAK,IAAI,cAAc,eAAe,IAAI,aAC1C,KAAK,IAAI,gBAAgB,aAAa,IAAI;AAE5C,YAAM,gBAAgB,qBAClB,sBAAsB,kBACtB,sBAAsB;AAC1B,UAAI,eAAe;AACjB,kBAAU,gBAAgB,GAAG;AAAA,MAC/B;AAAA,IACF;AAIA,QAAI,kBAAkB,KAAK;AACzB,YAAM,uBAAuB,KAAK,IAAI,cAAc,eAAe,KAAK;AACxE,YAAM,mBAAmB,iBAAiB,iBAAiB,eAAe;AAE1E,YAAM,eAAe,qBACjB,uBACA,wBAAwB;AAC5B,UAAI,cAAc;AAChB,kBAAU,gBAAgB,GAAG;AAAA,MAC/B;AAEA,YAAM,qBACJ,KAAK,IAAI,cAAc,aAAa,IAAI,aACxC,KAAK,IAAI,gBAAgB,eAAe,IAAI;AAC9C,YAAM,wBACJ,KAAK,IAAI,cAAc,eAAe,IAAI,aAC1C,KAAK,IAAI,gBAAgB,aAAa,IAAI;AAE5C,YAAM,gBAAgB,qBAClB,sBAAsB,kBACtB,sBAAsB;AAC1B,UAAI,eAAe;AACjB,kBAAU,gBAAgB,GAAG;AAAA,MAC/B;AAAA,IACF;AAAA,EACF;AACF;;;ALjII,mBACE,OAAAC,MADF;AAfW,SAAR,iBAAkC,EAAE,MAAM,GAAU;AACzD,QAAM,EAAE,GAAG,EAAE,IAAI,eAAe;AAChC,QAAM,EAAE,UAAU,UAAU,WAAW,aAAa,IAAI,eAAe,KAAK,EAAE;AAE9E,YAAU,MAAM;AACd,cAAU,qBAAqB,KAAK;AAAA,EAEtC,GAAG,CAAC,cAAc,GAAG,CAAC,CAAC;AAEvB,QAAM,oBAAoB,CAACC,kBAA8B;AACvD,cAAU,gBAAgB,OAAOA,aAAY;AAC7C,YAAQ,sBAAsB,KAAK;AAAA,EACrC;AAEA,SACE,iCACE;AAAA,oBAAAD;AAAA,MAAC;AAAA;AAAA,QACC,WAAW,MAAM,kBAAkB,KAAK;AAAA,QACxC,aAAa,MAAM,kBAAkB,GAAG;AAAA,QACxC,IAAG;AAAA,QACH,WAAU;AAAA,QACV,OAAO;AAAA,UACL,KAAK,GAAG,SAAS;AAAA,UACjB,MAAM,GAAG,SAAS,SAAS,WAAW;AAAA,UACtC,QAAQ,GAAG;AAAA,QACb;AAAA;AAAA,IACD;AAAA,IACD,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,WAAW,MAAM,kBAAkB,KAAK;AAAA,QACxC,aAAa,MAAM,kBAAkB,GAAG;AAAA,QACxC,IAAG;AAAA,QACH,WAAU;AAAA,QACV,OAAO;AAAA,UACL,KAAK,GAAG,SAAS;AAAA,UACjB,MAAM,GAAG,SAAS,SAAS;AAAA,UAC3B,QAAQ,GAAG;AAAA,QACb;AAAA;AAAA,IACD;AAAA,IACD,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,WAAW,MAAM,kBAAkB,KAAK;AAAA,QACxC,aAAa,MAAM,kBAAkB,GAAG;AAAA,QACxC,IAAG;AAAA,QACH,WAAU;AAAA,QACV,OAAO;AAAA,UACL,KAAK,GAAG,SAAS,SAAS,YAAY;AAAA,UACtC,MAAM,GAAG,SAAS;AAAA,UAClB,OAAO,GAAG;AAAA,QACZ;AAAA;AAAA,IACD;AAAA,IACD,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,WAAW,MAAM,kBAAkB,KAAK;AAAA,QACxC,aAAa,MAAM,kBAAkB,GAAG;AAAA,QACxC,IAAG;AAAA,QACH,WAAU;AAAA,QACV,OAAO;AAAA,UACL,KAAK,GAAG,SAAS,SAAS;AAAA,UAC1B,MAAM,GAAG,SAAS;AAAA,UAClB,OAAO,GAAG;AAAA,QACZ;AAAA;AAAA,IACD;AAAA,IACD,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,WAAW,MAAM,kBAAkB,KAAK;AAAA,QACxC,aAAa,MAAM,kBAAkB,IAAI;AAAA,QACzC,IAAG;AAAA,QACH,WAAU;AAAA,QACV,OAAO;AAAA,UACL,KAAK,GAAG,SAAS,SAAS,YAAY;AAAA,UACtC,MAAM,GAAG,SAAS,SAAS,WAAW;AAAA,QACxC;AAAA;AAAA,IACD;AAAA,IACD,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,WAAW,MAAM,kBAAkB,KAAK;AAAA,QACxC,aAAa,MAAM,kBAAkB,IAAI;AAAA,QACzC,IAAG;AAAA,QACH,WAAU;AAAA,QACV,OAAO;AAAA,UACL,KAAK,GAAG,SAAS,SAAS,YAAY;AAAA,UACtC,MAAM,GAAG,SAAS,SAAS;AAAA,QAC7B;AAAA;AAAA,IACD;AAAA,IAED,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,WAAW,MAAM,kBAAkB,KAAK;AAAA,QACxC,aAAa,MAAM,kBAAkB,IAAI;AAAA,QACzC,IAAG;AAAA,QACH,WAAU;AAAA,QACV,OAAO;AAAA,UACL,KAAK,GAAG,SAAS,SAAS;AAAA,UAC1B,MAAM,GAAG,SAAS,SAAS,WAAW;AAAA,QACxC;AAAA;AAAA,IACD;AAAA,IACD,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,WAAW,MAAM,kBAAkB,KAAK;AAAA,QACxC,aAAa,MAAM,kBAAkB,IAAI;AAAA,QACzC,IAAG;AAAA,QACH,WAAU;AAAA,QACV,OAAO;AAAA,UACL,KAAK,GAAG,SAAS,SAAS;AAAA,UAC1B,MAAM,GAAG,SAAS,SAAS;AAAA,QAC7B;AAAA;AAAA,IACD;AAAA,KACH;AAEJ;;;AMlHA,SAAS,aAAAE,YAAW,gBAAgB;AA6ChC,gBAAAC,YAAA;AAlCW,SAAR,WAA4B,EAAE,MAAM,GAAU;AACnD,QAAM,EAAE,GAAG,EAAE,IAAI,eAAe;AAChC,QAAM,EAAE,gBAAgB,YAAY,UAAU,aAAa,cAAc,IACvE,eAAe,KAAK,EAAE;AAExB,QAAM,CAAC,iBAAiB,kBAAkB,IAAI,SAAgB;AAAA,IAC5D,QAAQ,MAAM,QAAQ,EAAE;AAAA,IACxB,QAAQ,MAAM,QAAQ,EAAE;AAAA,EAC1B,CAAC;AAED,EAAAC,WAAU,MAAM;AACd,QAAI,MAAM,kBAAkB;AAAG;AAC/B,QAAI,CAAC;AAAY;AAEjB,QAAI,mBAAmB;AAAa,cAAQ,iBAAiB,KAAK;AAElE,UAAM,SAAS,MAAM,QAAQ;AAE7B,QAAI,YAAY,IAAI,gBAAgB;AACpC,QAAI,IAAI,OAAO,SAAS,IAAI,OAAO;AAAM,kBAAY,SAAS;AAE9D,QAAI,YAAY,IAAI,gBAAgB;AACpC,QAAI,IAAI,OAAO,UAAU,IAAI,OAAO;AAAK,kBAAY,SAAS;AAE9D,gBAAY,EAAE,QAAQ,WAAW,QAAQ,UAAU,CAAC;AAAA,EAEtD,GAAG,CAAC,YAAY,GAAG,CAAC,CAAC;AAErB,QAAM,YAAY,CAACC,gBAAwB;AACzC,uBAAmB,EAAE,QAAQ,IAAI,SAAS,QAAQ,QAAQ,IAAI,SAAS,OAAO,CAAC;AAC/E,kBAAcA,WAAU;AAAA,EAC1B;AAEA,SACE,gBAAAF;AAAA,IAAC;AAAA;AAAA,MACC,aAAa,MAAM,UAAU,IAAI;AAAA,MACjC,WAAW,MAAM,UAAU,KAAK;AAAA,MAChC,eAAe,MAAM,QAAQ,eAAe,KAAK;AAAA,MACjD,WAAU;AAAA;AAAA,EACX;AAEL;;;AT0CQ,SAqBJ,YAAAG,WArBI,OAAAC,MA4CA,QAAAC,aA5CA;AA1DO,SAAR,aAA8B;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd;AACF,GAAsB;AACpB,QAAM,YAAY,OAAuB,IAAI;AAC7C,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IAEA;AAAA,IAEA;AAAA,IAEA;AAAA,IAEA;AAAA,IAEA;AAAA,IACA;AAAA,EACF,IAAI,eAAe,KAAK,EAAE;AAE1B,EAAAC,WAAU,MAAM;AACd,YAAQ,SAAS;AAEjB,QAAI,MAAM,kBAAkB,GAAG;AAC7B,cAAQ,eAAe,KAAK;AAC5B;AAAA,IACF;AAEA,kBAAc,WAAW,EAAE,KAAK;AAAA,EAElC,GAAG,CAAC,SAAS,WAAW,SAAS,CAAC;AAElC,QAAM,gBAA+D;AAAA,IACnE,OAAO,QAAQ;AAAA,IACf,MAAM,QAAQ;AAAA,IACd,MAAM,QAAQ;AAAA,IACd,KAAK,QAAQ;AAAA,IACb,QAAQ,QAAQ;AAAA,IAChB,aAAa,QAAQ;AAAA,IACrB,YAAY,QAAQ;AAAA,IACpB,gBAAgB,QAAQ;AAAA,IACxB,eAAe,QAAQ;AAAA,IACvB,SAAS,QAAQ;AAAA,EACnB;AAEA,QAAM,kBACJ,mBAAmB,cACjB,gBAAAF;AAAA,IAAC;AAAA;AAAA,MACC,WAAW;AAAA,MACX,SAAS,MAAM,QAAQ,iBAAiB,KAAK;AAAA,MAE7C,0BAAAA,KAAC,qBAAkB,OAAO,OAAO,kBAAkB;AAAA;AAAA,EACrD,IAEA,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,WAAW;AAAA,MACX,SAAS,MAAM,QAAQ,eAAe,KAAK;AAAA,MAE3C,0BAAAA,KAAC,mBAAgB,OAAO,OAAO,kBAAkB;AAAA;AAAA,EACnD;AAGJ,QAAM,eACJ,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV,SAAS,MAAM,QAAQ,YAAY,KAAK;AAAA,MAExC,0BAAAA,KAAC,mBAAgB,OAAO,OAAO,kBAAkB;AAAA;AAAA,EACnD;AAGF,SACE,gBAAAC,MAAAF,WAAA,EACE;AAAA,oBAAAE;AAAA,MAAC;AAAA;AAAA,QACC,IAAI;AAAA,QACJ,KAAK;AAAA,QACL,WAAW;AAAA,QACX,aAAa,MAAM,SAAS,yBAAyB,QAAQ;AAAA,QAC7D,OAAO;AAAA,UACL,iBAAiB,OAAO;AAAA,UACxB,KAAK,GAAG,SAAS;AAAA,UACjB,MAAM,GAAG,SAAS;AAAA,UAClB,OAAO,GAAG;AAAA,UACV,QAAQ,GAAG;AAAA,UACX,QAAQ,GAAG;AAAA;AAAA,UAGX,YAAY;AAAA,UACZ,SAAS,iBAAiB,IAAI;AAAA,UAC9B,WAAW,iBACP,aAAa,MAAM,QAAQ,EAAE,aAAa,IAAI,SAAS,SAAS,WAAW;AAAA,gBACzE,MAAM,QAAQ,EAAE,cAAc,SAAS,SAAS,YAAY,qBAC9D;AAAA,QACN;AAAA,QAEA;AAAA,0BAAAA;AAAA,YAAC;AAAA;AAAA,cACC,OAAO;AAAA,gBACL,iBAAiB,OAAO;AAAA,cAC1B;AAAA,cACA,WAAW;AAAA;AAAA,cAEP,WAAW,+BAA+B;AAAA,cAE9C;AAAA,gCAAAD,KAAC,SAAI,WAAU,yEACZ,sBACH;AAAA,gBAEA,gBAAAA,KAAC,SAAI,WAAU,0DACZ,0BACH;AAAA,gBAEA,gBAAAA,KAAC,cAAW,OAAc;AAAA,gBAEzB,CAAC,MAAM,kBAAkB,KAAK;AAAA,gBAC9B;AAAA;AAAA;AAAA,UACH;AAAA,UAEC,CAAC,MAAM,kBAAkB,KAAK,gBAAAA,KAAC,oBAAiB,OAAc;AAAA,UAG/D,gBAAAA,KAAC,SAAI,WAAW,qDAAsD,UAAS;AAAA;AAAA;AAAA,IACjF;AAAA,IAAO;AAAA,KACT;AAEJ;;;AUpII,gBAAAG,YAAA;AArBW,SAAR,aAA8B;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AAAA,EACA,oBAAoB;AAAA,EACpB,kBAAkB;AACpB,GAAsB;AACpB,QAAM,EAAE,gBAAgB,UAAU,SAAS,IAAI,eAAe,KAAK,EAAE;AAErE,QAAM,qBAAqB,MAAM;AAC/B,QAAI,gBAAgB;AAClB,eAAS,yBAAyB,QAAQ;AAC1C,cAAQ,WAAW,KAAK;AACxB;AAAA,IACF;AAEA,QAAI;AAAU,cAAQ,YAAY,KAAK;AACvC,aAAS,yBAAyB,QAAQ;AAAA,EAC5C;AAEA,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,IAAI,GAAG;AAAA,MACP,SAAS;AAAA,MACT,WAAW;AAAA,UACP;AAAA,UACA,iBAAiB,oBAAoB;AAAA,MAExC;AAAA;AAAA,EACH;AAEJ;;;AXyCM,gBAAAC,YAAA;AAzEN,IAAM,kBAAkB;AACxB,IAAM,mBAAmB;AAGlB,IAAM,iBAAuE,CAAC;AAU9E,IAAM,oBAAoB,MAA0B;AACzD,QAAM,iBAAiB,OAAO,KAAK,cAAc,EAAE,SAAS;AAC5D,QAAM,mBAAmB,gCAAgC,OAAO,KAAK,cAAc,EAAE;AAErF,QAAM,gBAAgBC,QAAoB,CAAC,KAAK,SAAS;AAAA,IACvD,UAAU;AAAA,IAEV,MAAM;AAAA,IACN,SAAS,CAAC,QAA0C,IAAI,EAAE,MAAM,IAAI,CAAC;AAAA,IAErE,eAAe;AAAA,IACf,kBAAkB,CAAC,MAAc,IAAI,EAAE,eAAe,EAAE,CAAC;AAAA,IAEzD,gBAAgB;AAAA,IAChB,mBAAmB,CAAC,MAAc,IAAI,EAAE,gBAAgB,EAAE,CAAC;AAAA,IAE3D,UAAU;AAAA,IACV,aAAa,CAAC,aAAsB;AAClC,wBAAkB,SAAS,EAAE,kBAAkB,IAAI,EAAE,QAAQ;AAC7D,UAAI,EAAE,SAAmB,CAAC;AAAA,IAC5B;AAAA,IAEA,WAAW;AAAA,IACX,OAAO,MAAM,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,WAAW,gBAAgB,KAAK,CAAC;AAAA,IAEtE,QAAQ;AAAA,IACR,WAAW,CAAC,aAAqB,IAAI,EAAE,QAAQ,SAAS,CAAC;AAAA,IAEzD,gBAAgB;AAAA,IAChB,mBAAmB,CAAC,aAA2B,IAAI,EAAE,gBAAgB,SAAS,CAAC;AAAA,IAE/E,gBAAgB;AAAA,IAChB,mBAAmB,CAAC,aAAsB,IAAI,EAAE,gBAAgB,SAAS,CAAC;AAAA,IAE1E,UAAU,EAAE,QAAQ,IAAI,QAAQ,GAAG;AAAA,IACnC,aAAa,CAAC,gBACZ,IAAI,EAAE,UAAU,EAAE,QAAQ,YAAY,QAAQ,QAAQ,YAAY,OAAO,EAAE,CAAC;AAAA,IAE9E,UAAU;AAAA,IACV,aAAa,CAAC,gBAAwB,IAAI,EAAE,UAAU,YAAY,CAAC;AAAA,IAEnE,WAAW;AAAA,IACX,cAAc,CAAC,iBAAyB,IAAI,EAAE,WAAW,aAAa,CAAC;AAAA,IAEvE,cAAc;AAAA,IACd,iBAAiB,CAAC,sBAAmC,IAAI,EAAE,cAAc,kBAAkB,CAAC;AAAA,IAE5F,YAAY;AAAA,IACZ,eAAe,CAAC,sBAA+B,IAAI,EAAE,YAAY,kBAAkB,CAAC;AAAA,EACtF,EAAE;AAEF,iBAAe,gBAAgB,IAAI;AAEnC,SAAO;AAAA,IACL,IAAI,cAAc,SAAS,EAAE;AAAA,IAE7B,OAAO;AAAA,IAEP,QAAQ,CAAC,UACP,gBAAAD,KAAC,gBAAc,GAAG,OAAO,OAAO,kBAAkB;AAAA,IAGpD,QAAQ,CAAC,UACP,gBAAAA,KAAC,gBAAc,GAAG,OAAO,OAAO,kBAAkB;AAAA,EAEtD;AACF;;;AY1FO,IAAM,UAAU;AAAA,EACrB,iBAAiB,CAAC,UAAkB;AAClC,mBAAe,KAAK,EAAE,SAAS;AAAA,MAC7B,UAAU,EAAE,QAAQ,MAAM,QAAQ,EAAE,SAAS,QAAQ,MAAM,QAAQ,EAAE,IAAI;AAAA,MACzE,UAAU,MAAM,QAAQ,EAAE,aAAa;AAAA,MACvC,WAAW,MAAM,QAAQ,EAAE;AAAA,MAC3B,gBAAgB;AAAA,IAClB,CAAC;AAAA,EACH;AAAA,EAEA,gBAAgB,CAAC,UAAkB;AACjC,mBAAe,KAAK,EAAE,SAAS;AAAA,MAC7B,UAAU,EAAE,QAAQ,MAAM,QAAQ,EAAE,MAAM,QAAQ,MAAM,QAAQ,EAAE,IAAI;AAAA,MACtE,UAAU,MAAM,QAAQ,EAAE,aAAa;AAAA,MACvC,WAAW,MAAM,QAAQ,EAAE;AAAA,MAC3B,gBAAgB;AAAA,IAClB,CAAC;AAAA,EACH;AAAA,EAEA,eAAe,CAAC,UAAkB;AAChC,mBAAe,KAAK,EAAE,SAAS;AAAA,MAC7B,UAAU,EAAE,QAAQ,MAAM,QAAQ,EAAE,MAAM,QAAQ,MAAM,QAAQ,EAAE,IAAI;AAAA,MACtE,UAAU,MAAM,QAAQ,EAAE;AAAA,MAC1B,WAAW,MAAM,QAAQ,EAAE,cAAc;AAAA,MACzC,gBAAgB;AAAA,IAClB,CAAC;AAAA,EACH;AAAA,EAEA,kBAAkB,CAAC,UAAkB;AACnC,mBAAe,KAAK,EAAE,SAAS;AAAA,MAC7B,UAAU,EAAE,QAAQ,MAAM,QAAQ,EAAE,MAAM,QAAQ,MAAM,QAAQ,EAAE,QAAQ;AAAA,MAC1E,UAAU,MAAM,QAAQ,EAAE;AAAA,MAC1B,WAAW,MAAM,QAAQ,EAAE,cAAc;AAAA,MACzC,gBAAgB;AAAA,IAClB,CAAC;AAAA,EACH;AAAA,EAEA,uBAAuB,CAAC,UAAkB;AACxC,mBAAe,KAAK,EAAE,SAAS;AAAA,MAC7B,UAAU;AAAA,QACR,QAAQ,MAAM,QAAQ,EAAE;AAAA,QACxB,QAAQ,MAAM,QAAQ,EAAE;AAAA,MAC1B;AAAA,MACA,UAAU,MAAM,QAAQ,EAAE,aAAa;AAAA,MACvC,WAAW,MAAM,QAAQ,EAAE,cAAc;AAAA,MACzC,gBAAgB;AAAA,IAClB,CAAC;AAAA,EACH;AAAA,EAEA,oBAAoB,CAAC,UAAkB;AACrC,mBAAe,KAAK,EAAE,SAAS;AAAA,MAC7B,UAAU,EAAE,QAAQ,MAAM,QAAQ,EAAE,SAAS,QAAQ,MAAM,QAAQ,EAAE,IAAI;AAAA,MACzE,UAAU,MAAM,QAAQ,EAAE,aAAa;AAAA,MACvC,WAAW,MAAM,QAAQ,EAAE,cAAc;AAAA,MACzC,gBAAgB;AAAA,IAClB,CAAC;AAAA,EACH;AAAA,EAEA,sBAAsB,CAAC,UAAkB;AACvC,mBAAe,KAAK,EAAE,SAAS;AAAA,MAC7B,UAAU,EAAE,QAAQ,MAAM,QAAQ,EAAE,MAAM,QAAQ,MAAM,QAAQ,EAAE,QAAQ;AAAA,MAC1E,UAAU,MAAM,QAAQ,EAAE,aAAa;AAAA,MACvC,WAAW,MAAM,QAAQ,EAAE,cAAc;AAAA,MACzC,gBAAgB;AAAA,IAClB,CAAC;AAAA,EACH;AAAA,EAEA,mBAAmB,CAAC,UAAkB;AACpC,mBAAe,KAAK,EAAE,SAAS;AAAA,MAC7B,UAAU,EAAE,QAAQ,MAAM,QAAQ,EAAE,MAAM,QAAQ,MAAM,QAAQ,EAAE,IAAI;AAAA,MACtE,UAAU,MAAM,QAAQ,EAAE,aAAa;AAAA,MACvC,WAAW,MAAM,QAAQ,EAAE,cAAc;AAAA,MACzC,gBAAgB;AAAA,IAClB,CAAC;AAAA,EACH;AAAA,EAEA,gBAAgB,CAAC,UAAkB;AACjC,mBAAe,KAAK,EAAE,SAAS;AAAA,MAC7B,UAAU,EAAE,QAAQ,MAAM,QAAQ,EAAE,MAAM,QAAQ,MAAM,QAAQ,EAAE,IAAI;AAAA,MACtE,WAAW,MAAM,QAAQ,EAAE;AAAA,MAC3B,UAAU,MAAM,QAAQ,EAAE;AAAA,MAC1B,gBAAgB;AAAA,IAClB,CAAC;AAAA,EACH;AAAA,EAEA,kBAAkB,CAAC,UAAkB;AACnC,mBAAe,KAAK,EAAE,SAAS;AAAA,MAC7B,UAAU,EAAE,QAAQ,MAAM,QAAQ,EAAE,OAAO,IAAI,QAAQ,MAAM,QAAQ,EAAE,MAAM,GAAG;AAAA,MAChF,UAAU,MAAM,QAAQ,EAAE,aAAa;AAAA,MACvC,WAAW,MAAM,QAAQ,EAAE,cAAc;AAAA,MACzC,gBAAgB;AAAA,IAClB,CAAC;AAAA,EACH;AAAA,EAEA,aAAa,CAAC,UAAkB;AAC9B,mBAAe,KAAK,EAAE,SAAS,EAAE,gBAAgB,KAAK,CAAC;AAAA,EACzD;AAAA,EAEA,YAAY,CAAC,UAAkB;AAC7B,UAAM,WAAW,eAAe,KAAK,EAAE,SAAS;AAChD,UAAM,SAAS,SAAS;AACxB,QAAI,SAAS,kBAAkB,QAAQ,SAAS;AAC9C,qBAAe,KAAK,EAAE,SAAS,EAAE,gBAAgB,MAAM,CAAC;AACxD,aAAO,QAAQ,MAAM,YAAY;AAAA,IACnC;AAAA,EACF;AACF;;;ACvGA,IAAM,MAAM;AAAA,EACR;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd,gBAAgB;AACpB;AAEA,IAAO,cAAQ;;;ACdf,SAAS,aAAAE,YAAW,UAAAC,eAAc;;;ACAlC,SAAS,YAAAC,iBAAgB;AAanB,SACE,OAAAC,MADF,QAAAC,aAAA;AARS,SAAR,kBAAmC;AACxC,QAAM,CAAC,YAAY,aAAa,IAAIC,UAAS,KAAK;AAElD,QAAM,EAAE,eAAe,IAAI,kBAAkB;AAC7C,QAAM,EAAE,WAAW,IAAI,eAAe,cAAc,EAAE;AAEtD,QAAM,oBACJ,gBAAAD,MAAC,SAAI,WAAW,gCACd;AAAA,oBAAAA,MAAC,SAAI,WAAU,wCACb;AAAA,sBAAAD;AAAA,QAAC;AAAA;AAAA,UACC,WAAU;AAAA,UACV,WAAW,MAAM,QAAQ,kBAAkB,cAAc;AAAA;AAAA,MAC1D;AAAA,MACD,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACC,WAAU;AAAA,UACV,WAAW,MAAM,QAAQ,qBAAqB,cAAc;AAAA;AAAA,MAC7D;AAAA,OACH;AAAA,IACA,gBAAAC,MAAC,SAAI,WAAU,wCACb;AAAA,sBAAAD;AAAA,QAAC;AAAA;AAAA,UACC,WAAU;AAAA,UACV,WAAW,MAAM,QAAQ,mBAAmB,cAAc;AAAA;AAAA,MAC3D;AAAA,MACD,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACC,WAAU;AAAA,UACV,WAAW,MAAM,QAAQ,sBAAsB,cAAc;AAAA;AAAA,MAC9D;AAAA,OACH;AAAA,KACF;AAGF,QAAM,kBACJ,gBAAAC,MAAC,SAAI,WAAW,sCACd;AAAA,oBAAAD;AAAA,MAAC;AAAA;AAAA,QACC,WAAU;AAAA,QACV,WAAW,MAAM,QAAQ,eAAe,cAAc;AAAA;AAAA,IACvD;AAAA,IACD,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,WAAU;AAAA,QACV,WAAW,MAAM,QAAQ,gBAAgB,cAAc;AAAA;AAAA,IACxD;AAAA,KACH;AAGF,QAAM,wBACJ,gBAAAC,MAAC,SAAI,WAAW,+CACd;AAAA,oBAAAD;AAAA,MAAC;AAAA;AAAA,QACC,WAAU;AAAA,QACV,WAAW,MAAM,QAAQ,cAAc,cAAc;AAAA;AAAA,IACtD;AAAA,IACD,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,WAAU;AAAA,QACV,WAAW,MAAM,QAAQ,iBAAiB,cAAc;AAAA;AAAA,IACzD;AAAA,KACH;AAGF,QAAM,mBACJ,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV,aAAa,MAAM,cAAc,IAAI;AAAA,MACrC,cAAc,MAAM,cAAc,KAAK;AAAA,MAEvC,0BAAAC;AAAA,QAAC;AAAA;AAAA,UACC,WAAW;AAAA;AAAA;AAAA;AAAA,UAKV;AAAA;AAAA,YACA;AAAA,YACA;AAAA;AAAA;AAAA,MACH;AAAA;AAAA,EACF;AAIF,SACE,gBAAAD;AAAA,IAAC;AAAA;AAAA,MACC,WAAW;AAAA,UAEP,aACI,aACE,qBACA,2BACF;AAAA;AAAA;AAAA;AAAA,MAMP;AAAA;AAAA,EACH;AAEJ;;;ACnGA,SAAS,aAAAG,kBAAiB;AAkBjB,qBAAAC,WAAA,OAAAC,YAAA;AAfF,SAAS,qBAAqB;AACnC,QAAM,EAAE,MAAM,KAAK,IAAI,eAAe;AAEtC,EAAAC,WAAU,MAAM;AACd,UAAM,uBAAuB,CAAC,MAAkB;AAC9C,QAAE,eAAe;AACjB,WAAK,EAAE,OAAO;AACd,WAAK,EAAE,OAAO;AAAA,IAChB;AAEA,WAAO,iBAAiB,eAAe,oBAAoB;AAE3D,WAAO,MAAM,OAAO,oBAAoB,eAAe,oBAAoB;AAAA,EAC7E,GAAG,CAAC,MAAM,IAAI,CAAC;AAEf,SAAO,gBAAAD,KAAAD,WAAA,EAAE;AACX;;;ACnBA,SAAS,aAAAG,kBAAiB;AAUjB,qBAAAC,WAAA,OAAAC,YAAA;AAPF,SAAS,yBAAyB;AACvC,EAAAC,WAAU,MAAM;AACd,WAAO,iBAAiB,UAAU,SAAS,UAAU;AAErD,WAAO,MAAM,OAAO,oBAAoB,UAAU,SAAS,UAAU;AAAA,EACvE,GAAG,CAAC,CAAC;AAEL,SAAO,gBAAAD,KAAAD,WAAA,EAAE;AACX;;;AHmCM,gBAAAG,OAEA,QAAAC,aAFA;AAnBS,SAAR,gBAAiC,EAAE,UAAU,WAAW,kBAAkB,KAAK,GAAU;AAC9F,QAAM,eAAeC,QAA2B,IAAI;AACpD,QAAM,EAAE,QAAQ,mBAAmB,IAAI,kBAAkB;AAEzD,EAAAC,WAAU,MAAM;AACd,WAAO,aAAa,OAAO;AAAA,EAC7B,GAAG,CAAC,CAAC;AAEL,EAAAA,WAAU,MAAM;AACd,uBAAmB,eAAe;AAAA,EACpC,GAAG,CAAC,eAAe,CAAC;AAEpB,SACE,gBAAAF;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,MACL,cAAc,UAAU;AAAA,MACxB,WAAW,UAAU;AAAA,MACrB,WAAW,YAAY,YAAY;AAAA,MAEnC;AAAA,wBAAAD,MAAC,0BAAuB;AAAA,QACxB,gBAAAA,MAAC,sBAAmB;AAAA,QACpB,gBAAAC,MAAC,SAAI,WAAU,2CACZ;AAAA,WAAC,MAAM,kBAAkB,KAAK,gBAAAD,MAAC,mBAAgB;AAAA,UAC/C;AAAA,WACH;AAAA;AAAA;AAAA,EACF;AAEJ;","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"]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
type Props = {
|
|
2
|
+
color?: string;
|
|
3
|
+
};
|
|
4
|
+
export declare function IconWinMaximize({ color }: Props): import("react/jsx-runtime").JSX.Element;
|
|
5
|
+
export declare function IconWinDemaximize({ color }: Props): import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
export declare function IconWinMinimize({ color }: Props): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=svg-win-icons.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"svg-win-icons.d.ts","sourceRoot":"","sources":["../../../../src/window-manager/internal/assets/svg-win-icons.tsx"],"names":[],"mappings":"AAAA,KAAK,KAAK,GAAG;IACX,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAED,wBAAgB,eAAe,CAAC,EAAC,KAAK,EAAC,EAAE,KAAK,2CAoB7C;AAED,wBAAgB,iBAAiB,CAAC,EAAC,KAAK,EAAC,EAAE,KAAK,2CAoB/C;AAED,wBAAgB,eAAe,CAAC,EAAC,KAAK,EAAC,EAAE,KAAK,2CAgB7C"}
|
|
@@ -0,0 +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,4CAgBjC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
type CursorState = {
|
|
2
|
+
x: number;
|
|
3
|
+
y: number;
|
|
4
|
+
setX: (x: number) => void;
|
|
5
|
+
setY: (y: number) => void;
|
|
6
|
+
};
|
|
7
|
+
export declare const useCursorState: import("zustand").UseBoundStore<import("zustand").StoreApi<CursorState>>;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=cursor-state.d.ts.map
|
|
@@ -0,0 +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,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;IACzB,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;CAC1B,CAAA;AAED,eAAO,MAAM,cAAc,0EAKxB,CAAA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export declare const dockApi: {
|
|
2
|
+
dockWindowRight: (winId: string) => void;
|
|
3
|
+
dockWindowLeft: (winId: string) => void;
|
|
4
|
+
dockWindowTop: (winId: string) => void;
|
|
5
|
+
dockWindowBottom: (winId: string) => void;
|
|
6
|
+
dockWindowBottomRight: (winId: string) => void;
|
|
7
|
+
dockWindowTopRight: (winId: string) => void;
|
|
8
|
+
dockWindowBottomLeft: (winId: string) => void;
|
|
9
|
+
dockWindowTopLeft: (winId: string) => void;
|
|
10
|
+
maximizeWindow: (winId: string) => void;
|
|
11
|
+
demaximizeWindow: (winId: string) => void;
|
|
12
|
+
closeWindow: (winId: string) => void;
|
|
13
|
+
openWindow: (winId: string) => void;
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=docking-api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docking-api.d.ts","sourceRoot":"","sources":["../../../../../src/window-manager/internal/features/docking/docking-api.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,OAAO;6BACO,MAAM;4BASP,MAAM;2BASP,MAAM;8BASH,MAAM;mCASD,MAAM;gCAYT,MAAM;kCASJ,MAAM;+BAST,MAAM;4BAST,MAAM;8BASJ,MAAM;yBASX,MAAM;wBAIP,MAAM;CAQ3B,CAAA"}
|
|
@@ -0,0 +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,4CA8FtC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drag-handle.d.ts","sourceRoot":"","sources":["../../../../../src/window-manager/internal/features/drag/drag-handle.tsx"],"names":[],"mappings":"AAOA,KAAK,KAAK,GAAG;IACX,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,EAAE,KAAK,EAAE,EAAE,KAAK,2CAyClD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grid-api.d.ts","sourceRoot":"","sources":["../../../../../src/window-manager/internal/features/grid/grid-api.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,OAAO;mCACa,MAAM;CACtC,CAAA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { ResizeState } from '../../../model/window-types';
|
|
2
|
+
export declare const resizeApi: {
|
|
3
|
+
stopAllDragAndResize: () => void;
|
|
4
|
+
setResizeAction: (winId: string, action: ResizeState) => void;
|
|
5
|
+
dispatchResizeAction: (winId: string) => void;
|
|
6
|
+
};
|
|
7
|
+
//# sourceMappingURL=resizing-api.d.ts.map
|
|
@@ -0,0 +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,WAAW,EAAe,MAAM,6BAA6B,CAAA;AActE,eAAO,MAAM,SAAS;;6BAQK,MAAM,UAAU,WAAW;kCAItB,MAAM;CAwCrC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resizing-controls.d.ts","sourceRoot":"","sources":["../../../../../src/window-manager/internal/features/resizing/resizing-controls.tsx"],"names":[],"mappings":"AAOA,KAAK,KAAK,GAAG;IACX,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,EAAE,KAAK,EAAE,EAAE,KAAK,2CAuGxD"}
|
|
@@ -0,0 +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;yCACkB,MAAM;;;CAiC5C,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view-port-resize-listener.d.ts","sourceRoot":"","sources":["../../../../../src/window-manager/internal/features/view-port/view-port-resize-listener.tsx"],"names":[],"mappings":"AAGA,wBAAgB,sBAAsB,4CAQrC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export type WindowButtonProps = {
|
|
2
|
+
children: React.ReactNode;
|
|
3
|
+
winId: string;
|
|
4
|
+
className?: string;
|
|
5
|
+
/** @default 'brightness-[85%]' */
|
|
6
|
+
isClosedClassName?: string;
|
|
7
|
+
/** @default 'brightness-150' */
|
|
8
|
+
isOpenClassName?: string;
|
|
9
|
+
};
|
|
10
|
+
export default function WindowButton({ children, winId, className, isClosedClassName, isOpenClassName, }: WindowButtonProps): import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
//# sourceMappingURL=window-button.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"window-button.d.ts","sourceRoot":"","sources":["../../../../src/window-manager/internal/features/window-button.tsx"],"names":[],"mappings":"AAIA,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,kCAAkC;IAClC,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,gCAAgC;IAChC,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB,CAAA;AAED,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,EACnC,QAAQ,EACR,KAAK,EACL,SAAS,EACT,iBAAsC,EACtC,eAAkC,GACnC,EAAE,iBAAiB,2CAyBnB"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
type DockPosition = 'right' | 'left' | 'full' | 'top' | 'bottom' | 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left' | 'default';
|
|
2
|
+
export type WindowLayoutProps = {
|
|
3
|
+
children: React.ReactNode;
|
|
4
|
+
windowName: string | React.ReactNode;
|
|
5
|
+
winId: string;
|
|
6
|
+
navbarChildren?: React.ReactNode;
|
|
7
|
+
defaultDock?: DockPosition;
|
|
8
|
+
/** @note use CSS values such as hex or supported color names */
|
|
9
|
+
style?: {
|
|
10
|
+
navBackgroundColor?: string;
|
|
11
|
+
windowBackgroundColor?: string;
|
|
12
|
+
navControlsColor?: string;
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
export default function WindowLayout({ children, windowName, navbarChildren, winId, defaultDock, style, }: WindowLayoutProps): import("react/jsx-runtime").JSX.Element;
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=window-layout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"window-layout.d.ts","sourceRoot":"","sources":["../../../../src/window-manager/internal/features/window-layout.tsx"],"names":[],"mappings":"AASA,KAAK,YAAY,GACb,OAAO,GACP,MAAM,GACN,MAAM,GACN,KAAK,GACL,QAAQ,GACR,WAAW,GACX,UAAU,GACV,cAAc,GACd,aAAa,GACb,SAAS,CAAA;AAEb,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,UAAU,EAAE,MAAM,GAAG,KAAK,CAAC,SAAS,CAAA;IACpC,KAAK,EAAE,MAAM,CAAA;IACb,cAAc,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAChC,WAAW,CAAC,EAAE,YAAY,CAAA;IAE1B,gEAAgE;IAChE,KAAK,CAAC,EAAE;QACN,kBAAkB,CAAC,EAAE,MAAM,CAAA;QAC3B,qBAAqB,CAAC,EAAE,MAAM,CAAA;QAC9B,gBAAgB,CAAC,EAAE,MAAM,CAAA;KAC1B,CAAA;CACF,CAAA;AAED,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,EACnC,QAAQ,EACR,UAAU,EACV,cAAc,EACd,KAAK,EACL,WAAuB,EACvB,KAAK,GACN,EAAE,iBAAiB,2CA4HnB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-api.d.ts","sourceRoot":"","sources":["../../../../../src/window-manager/internal/features/workspace/workspace-api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,aAAa,EAAE,MAAM,gCAAgC,CAAA;AAG/E,eAAO,MAAM,KAAK;mBACH,aAAa;6BA4BH,OAAO;CAK/B,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-state.d.ts","sourceRoot":"","sources":["../../../../../src/window-manager/internal/features/workspace/workspace-state.ts"],"names":[],"mappings":"AACA,OAAO,EAAmB,cAAc,EAAE,MAAM,gCAAgC,CAAA;AAEhF,eAAO,MAAM,iBAAiB,6EAS3B,CAAA"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { JSX, RefObject } from 'react';
|
|
2
|
+
import { WindowLayoutProps } from '../internal/features/window-layout';
|
|
3
|
+
import { WindowButtonProps } from '../internal/features/window-button';
|
|
4
|
+
import { StoreApi, UseBoundStore } from 'zustand';
|
|
5
|
+
export type ResizeState = false | 's' | 'e' | 'n' | 'w' | 'se' | 'sw' | 'ne' | 'nw';
|
|
6
|
+
export type WindowStates = 'maximized' | 'demaximized';
|
|
7
|
+
export type Coord = {
|
|
8
|
+
pointX: number;
|
|
9
|
+
pointY: number;
|
|
10
|
+
};
|
|
11
|
+
export type WindowRegistration = {
|
|
12
|
+
id: string;
|
|
13
|
+
store: UseBoundStore<StoreApi<WindowStore>>;
|
|
14
|
+
Window: (props: Omit<WindowLayoutProps, 'winId'>) => JSX.Element;
|
|
15
|
+
Button: (props: Omit<WindowButtonProps, 'winId'>) => JSX.Element;
|
|
16
|
+
};
|
|
17
|
+
export type WindowStore = {
|
|
18
|
+
windowId: string;
|
|
19
|
+
isActive: boolean;
|
|
20
|
+
setIsActive: (isActive: boolean) => void;
|
|
21
|
+
resetFlag: boolean;
|
|
22
|
+
reset: () => void;
|
|
23
|
+
zIndex: number;
|
|
24
|
+
setZIndex: (newIndex: number) => void;
|
|
25
|
+
self: RefObject<HTMLDivElement | null> | undefined;
|
|
26
|
+
setSelf: (ref: RefObject<HTMLDivElement | null>) => void;
|
|
27
|
+
winVisualState: WindowStates;
|
|
28
|
+
setWinVisualState: (newState: WindowStates) => void;
|
|
29
|
+
isWindowClosed: boolean;
|
|
30
|
+
setisWindowClosed: (isMini: boolean) => void;
|
|
31
|
+
isDragging: boolean;
|
|
32
|
+
setIsDragging: (updatedIsDragging: boolean) => void;
|
|
33
|
+
winCoord: Coord;
|
|
34
|
+
setWinCoord: (newWinCoord: Coord) => void;
|
|
35
|
+
resizeAction: ResizeState;
|
|
36
|
+
setResizeAction: (updatedIsResizing: ResizeState) => void;
|
|
37
|
+
winWidth: number;
|
|
38
|
+
setWinWidth: (newWinWidth: number) => void;
|
|
39
|
+
winHeight: number;
|
|
40
|
+
setWinHeight: (newWinHeight: number) => void;
|
|
41
|
+
WIN_MIN_WIDTH: number;
|
|
42
|
+
WIN_MIN_HEIGHT: number;
|
|
43
|
+
setWIN_MIN_WIDTH: (w: number) => void;
|
|
44
|
+
setWIN_MIN_HEIGHT: (h: number) => void;
|
|
45
|
+
};
|
|
46
|
+
//# sourceMappingURL=window-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"window-types.d.ts","sourceRoot":"","sources":["../../../src/window-manager/model/window-types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAA;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAA;AACtE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAEjD,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;AACnF,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,aAAa,CAAA;AACtD,MAAM,MAAM,KAAK,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAA;AAEtD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAA;IAC3C,MAAM,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,iBAAiB,EAAE,OAAO,CAAC,KAAK,GAAG,CAAC,OAAO,CAAA;IAChE,MAAM,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,iBAAiB,EAAE,OAAO,CAAC,KAAK,GAAG,CAAC,OAAO,CAAA;CACjE,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,EAAE,MAAM,CAAA;IAEhB,QAAQ,EAAE,OAAO,CAAA;IACjB,WAAW,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAA;IAExC,SAAS,EAAE,OAAO,CAAA;IAClB,KAAK,EAAE,MAAM,IAAI,CAAA;IAEjB,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAA;IAErC,IAAI,EAAE,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,SAAS,CAAA;IAClD,OAAO,EAAE,CAAC,GAAG,EAAE,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,IAAI,CAAA;IAExD,cAAc,EAAE,YAAY,CAAA;IAC5B,iBAAiB,EAAE,CAAC,QAAQ,EAAE,YAAY,KAAK,IAAI,CAAA;IAEnD,cAAc,EAAE,OAAO,CAAA;IACvB,iBAAiB,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAA;IAE5C,UAAU,EAAE,OAAO,CAAA;IACnB,aAAa,EAAE,CAAC,iBAAiB,EAAE,OAAO,KAAK,IAAI,CAAA;IAEnD,QAAQ,EAAE,KAAK,CAAA;IACf,WAAW,EAAE,CAAC,WAAW,EAAE,KAAK,KAAK,IAAI,CAAA;IAEzC,YAAY,EAAE,WAAW,CAAA;IACzB,eAAe,EAAE,CAAC,iBAAiB,EAAE,WAAW,KAAK,IAAI,CAAA;IAEzD,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAA;IAE1C,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAA;IAG5C,aAAa,EAAE,MAAM,CAAA;IACrB,cAAc,EAAE,MAAM,CAAA;IACtB,gBAAgB,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;IACrC,iBAAiB,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;CACvC,CAAA"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export type ResponsiveSizes = 'sm' | 'md' | 'lg' | 'xl' | 'never' | 'always' | number;
|
|
2
|
+
export type WorkspaceRect = {
|
|
3
|
+
top: number;
|
|
4
|
+
left: number;
|
|
5
|
+
innerHeight: number;
|
|
6
|
+
innerWidth: number;
|
|
7
|
+
bottom: number;
|
|
8
|
+
right: number;
|
|
9
|
+
centerX: number;
|
|
10
|
+
centerY: number;
|
|
11
|
+
};
|
|
12
|
+
export type WorkspaceStore = {
|
|
13
|
+
ref: HTMLElement | null;
|
|
14
|
+
setRef: (newRef: HTMLElement | null) => void;
|
|
15
|
+
activeWindowId: string;
|
|
16
|
+
setActiveWindowId: (newId: string) => void;
|
|
17
|
+
responsiveBreak: ResponsiveSizes;
|
|
18
|
+
setResponsiveBreak: (breakPoint: ResponsiveSizes) => void;
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=workspace-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-types.d.ts","sourceRoot":"","sources":["../../../src/window-manager/model/workspace-types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAA;AAErF,MAAM,MAAM,aAAa,GAAG;IAC1B,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,GAAG,EAAE,WAAW,GAAG,IAAI,CAAA;IACvB,MAAM,EAAE,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAA;IAE5C,cAAc,EAAE,MAAM,CAAA;IACtB,iBAAiB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAE1C,eAAe,EAAE,eAAe,CAAA;IAChC,kBAAkB,EAAE,CAAC,UAAU,EAAE,eAAe,KAAK,IAAI,CAAA;CAC1D,CAAA"}
|