@gustavolmo/react-window-manager 0.1.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 +546 -0
- package/dist/index.css.map +1 -0
- package/dist/index.d.ts +81 -0
- package/dist/index.js +674 -0
- package/dist/index.js.map +1 -0
- package/package.json +42 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/window-manager/window-store-factory.tsx","../src/window-manager/window-global-actions.ts","../src/window-manager/window-button.tsx","../src/screen-manager/screen-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"],"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 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: 360,\r\n WIN_MIN_HEIGHT: 240,\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","import { StoreApi, UseBoundStore } from 'zustand'\r\nimport { WindowStore } from './window-types'\r\nimport { bringTargetWindowToFront } from './window-global-actions'\r\n\r\ntype StoreProp = {\r\n children: React.ReactNode\r\n useWindowStore: UseBoundStore<StoreApi<WindowStore>>\r\n styles?: string\r\n closedStyle?: string\r\n openStyle?: string\r\n}\r\n\r\nexport default function WindowButton({\r\n children,\r\n useWindowStore,\r\n styles,\r\n closedStyle = 'brightness-[85%]',\r\n openStyle = 'brightness-150',\r\n}: StoreProp) {\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 ${styles} \r\n ${isWinMinimized ? closedStyle : openStyle}`}\r\n >\r\n {children}\r\n </button>\r\n )\r\n}\r\n","import { create } from 'zustand'\r\n\r\n/** @Note\r\n *The word SCREEN is being used to distinguish between the\r\n * window feature in this library and the real browser window\r\n * SCREEN == BROWSER REAL WINDOW\r\n */\r\ntype ScreenState = {\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 useScreenState = create<ScreenState>((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/window-global-actions'\r\nimport { useScreenState } from './screen-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/* FIX ME: Until I find a better way to handle window resize, the state restes on resize */\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 } = useScreenState()\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 './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 { useScreenState } from '../screen-manager/screen-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 './window-global-actions'\r\n\r\ntype StoreProp = {\r\n responsiveBreak?: 'sm' | 'md' | 'lg' | 'xl' | 'never'\r\n children: React.ReactNode\r\n windowName: string | React.ReactNode\r\n navbarChildren?: React.ReactNode\r\n defaultDock?: 'right' | 'left' | 'full'\r\n useWindowStore: UseBoundStore<StoreApi<WindowStore>>\r\n}\r\n\r\nconst responsiveBreakInPx = {\r\n sm: 640,\r\n md: 768,\r\n lg: 1024,\r\n xl: 1280,\r\n never: 0,\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}: StoreProp) {\r\n const { x, y } = useScreenState()\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 setWinVisualState,\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 isResizing,\r\n setIsResizing,\r\n\r\n winWidth,\r\n setWinWidth,\r\n\r\n winHeight,\r\n setWinHeight,\r\n\r\n minimizeWindow,\r\n maximizeWindow,\r\n demaximizeWindow,\r\n\r\n dockWindowRight,\r\n dockWindowLeft,\r\n\r\n dockWindowTopLeft,\r\n dockWindowBottomLeft,\r\n dockWindowTopRight,\r\n dockWindowBottomRight,\r\n\r\n WIN_MIN_WIDTH,\r\n WIN_MIN_HEIGHT,\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 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 // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [isResizing, x, y])\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 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 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 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 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 handleResizeClick = (isResizing: ResizeState) => {\r\n setIsResizing(isResizing)\r\n }\r\n\r\n const cornerDockControl = (\r\n <div className={`flex xl:p-0 px-2 shrink-0 gap-1`}>\r\n {/* LEFT SIDE */}\r\n <div className=\"flex flex-col justify-center gap-1\">\r\n <button\r\n className=\"hover:bg-gray-100 hover:bg-opacity-20 border w-4 h-[10px] rounded-sm\"\r\n onClick={dockWindowTopLeft}\r\n ></button>\r\n <button\r\n className=\"hover:bg-gray-100 hover:bg-opacity-20 border w-4 h-[10px] rounded-sm\"\r\n onClick={dockWindowBottomLeft}\r\n ></button>\r\n </div>\r\n {/* RIGHT SIDE */}\r\n <div className=\"flex flex-col justify-center gap-1\">\r\n <button\r\n className=\"hover:bg-gray-100 hover:bg-opacity-20 border w-4 h-[10px] rounded-sm\"\r\n onClick={dockWindowTopRight}\r\n ></button>\r\n <button\r\n className=\"hover:bg-gray-100 hover:bg-opacity-20 border w-4 h-[10px] rounded-sm\"\r\n onClick={dockWindowBottomRight}\r\n ></button>\r\n </div>\r\n </div>\r\n )\r\n\r\n const sideDideControl = (\r\n <div className={`flex px-2 shrink-0 items-center gap-1`}>\r\n <button\r\n className=\"hover:bg-gray-100 hover:bg-opacity-20 px-[1px] border w-4 h-6 rounded-sm\"\r\n onClick={dockWindowLeft}\r\n ></button>\r\n <button\r\n className=\"hover:bg-gray-100 hover:bg-opacity-20 px-[1px] border w-4 h-6 rounded-sm\"\r\n onClick={dockWindowRight}\r\n ></button>\r\n </div>\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()}\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()}\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()}\r\n </button>\r\n )\r\n\r\n return (\r\n <div\r\n onMouseDown={() => bringTargetWindowToFront(windowId)}\r\n id={windowId}\r\n ref={windowRef}\r\n style={{\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 onMouseUp={() => {\r\n handleNavbarClick(false)\r\n handleResizeClick(false)\r\n }}\r\n className={`fixed bg-white shadow-lg border border-zinc-600`}\r\n >\r\n <nav\r\n className={`h-[32px] w-full bg-neutral-800 flex items-center\r\n ${isActive ? 'brightness-100 opacity-100' : 'brightness-75 opacity-90'}`}\r\n >\r\n <div\r\n onMouseDown={() => handleNavbarClick(true)}\r\n onDoubleClick={maximizeWindow}\r\n className=\"w-full h-8 px-2 text-white flex items-center text-sm truncate\"\r\n >\r\n {windowName}\r\n {navbarChildren}\r\n </div>\r\n\r\n {!isMobile() && cornerDockControl}\r\n {!isMobile() && sideDideControl}\r\n {!isMobile() && maximizeControl}\r\n {minimizeControl}\r\n </nav>\r\n\r\n {/* FIX ME: Add resize on top right and left? */}\r\n <span\r\n onMouseDown={() => handleResizeClick('right-width')}\r\n id=\"win-resize-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-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-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-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-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-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 {/* Offset the navbar => 'h-[calc(100%-32px)]' */}\r\n <div className={`w-full h-[calc(100%-32px)] overflow-auto`}>{children}</div>\r\n </div>\r\n )\r\n}\r\n","export function iconWinMaximize() {\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=\"white\"\r\n color=\"white\"\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() {\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=\"white\"\r\n color=\"white\"\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() {\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=\"white\"\r\n color=\"white\"\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"],"mappings":"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","names":["window","create","jsx","jsx","jsxs","useEffect","jsx","jsx","jsxs","useEffect","isDragging","isResizing"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@gustavolmo/react-window-manager",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"private": false,
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"import": "./dist/index.js"
|
|
12
|
+
},
|
|
13
|
+
"./*": "./dist/*.js",
|
|
14
|
+
"./index.css": "./dist/index.css"
|
|
15
|
+
},
|
|
16
|
+
"files": ["dist"],
|
|
17
|
+
"peerDependencies": {
|
|
18
|
+
"react": "^19.0.0",
|
|
19
|
+
"react-dom": "^19.0.0"
|
|
20
|
+
},
|
|
21
|
+
"dependencies": {
|
|
22
|
+
"zustand": "^5.0.3"
|
|
23
|
+
},
|
|
24
|
+
"devDependencies": {
|
|
25
|
+
"tsup": "^6.6.0",
|
|
26
|
+
"typescript": "~5.7.2",
|
|
27
|
+
"react": "^19.0.0",
|
|
28
|
+
"react-dom": "^19.0.0",
|
|
29
|
+
"@types/react": "^19.0.8",
|
|
30
|
+
"@types/react-dom": "^19.0.3",
|
|
31
|
+
"tailwindcss": "^3.4.17",
|
|
32
|
+
"eslint": "^9.19.0"
|
|
33
|
+
},
|
|
34
|
+
"scripts": {
|
|
35
|
+
"build": "tsup",
|
|
36
|
+
"build:types": "tsc -p tsconfig.build.json --emitDeclarationOnly",
|
|
37
|
+
"build:css": "tailwindcss -c tailwind.config.js -i ./src/index.css -o ./dist/index.css --minify",
|
|
38
|
+
"clean": "rimraf dist",
|
|
39
|
+
"dev": "tsup --watch",
|
|
40
|
+
"lint": "eslint src --ext .ts,.tsx"
|
|
41
|
+
}
|
|
42
|
+
}
|