{"version":3,"file":"windowStore-CfJzd1tm.cjs","sources":["../app/components/windows/windowStore.ts"],"sourcesContent":["\"use client\";\n\nimport { create } from \"zustand\";\nimport type {\n  CreateWindowParams,\n  WindowBounds,\n  WindowId,\n  WindowRecord,\n  ToolType,\n} from \"./windowTypes\";\n\nexport type WindowStoreState = {\n  windows: Record<WindowId, WindowRecord>;\n  order: WindowId[]; // top-most is last\n  nextZ: number;\n  createWindow: (params: CreateWindowParams) => WindowId;\n  closeWindow: (id: WindowId) => void;\n  focusWindow: (id: WindowId) => void;\n  updateBounds: (id: WindowId, bounds: Partial<WindowBounds>) => void;\n  minimizeWindow: (id: WindowId) => void;\n  restoreWindow: (id: WindowId) => void;\n  isOpen: (type: ToolType) => boolean;\n  getByType: (type: ToolType) => WindowRecord | undefined;\n  updateRotation: (id: WindowId, rotationDeg: number) => void;\n};\n\nfunction createId(): WindowId {\n  return Math.random().toString(36).slice(2, 9);\n}\n\nconst DEFAULT_BOUNDS: WindowBounds = { width: 360, height: 420, x: 80, y: 80 };\n\nexport const useWindowStore = create<WindowStoreState>((set, get) => ({\n  windows: {},\n  order: [],\n  nextZ: 1,\n  createWindow: ({\n    type,\n    title,\n    initialBounds,\n    minWidth,\n    minHeight,\n    isFrameless,\n    isResizable,\n    rotationDeg,\n  }) => {\n    const id = createId();\n    const bounds: WindowBounds = {\n      ...DEFAULT_BOUNDS,\n      ...initialBounds,\n    } as WindowBounds;\n    const zIndex = get().nextZ;\n    const record: WindowRecord = {\n      id,\n      type,\n      title,\n      zIndex,\n      bounds,\n      isFocused: true,\n      isMinimized: false,\n      minWidth,\n      minHeight,\n      isFrameless,\n      isResizable,\n      rotationDeg,\n    };\n    set((state) => ({\n      windows: { ...state.windows, [id]: record },\n      order: [...state.order.filter((w) => w !== id), id],\n      nextZ: zIndex + 1,\n    }));\n    return id;\n  },\n  closeWindow: (id) => {\n    set((state) => {\n      const windows = { ...state.windows };\n      delete windows[id];\n      return { windows, order: state.order.filter((w) => w !== id) };\n    });\n  },\n  focusWindow: (id) => {\n    set((state) => {\n      const win = state.windows[id];\n      if (!win) return state;\n      const zIndex = state.nextZ;\n      return {\n        windows: {\n          ...state.windows,\n          [id]: { ...win, zIndex, isFocused: true },\n        },\n        order: [...state.order.filter((w) => w !== id), id],\n        nextZ: zIndex + 1,\n      };\n    });\n  },\n  updateBounds: (id, bounds) => {\n    set((state) => {\n      const win = state.windows[id];\n      if (!win) return state;\n      return {\n        windows: {\n          ...state.windows,\n          [id]: { ...win, bounds: { ...win.bounds, ...bounds } },\n        },\n      };\n    });\n  },\n  minimizeWindow: (id) => {\n    set((state) => {\n      const win = state.windows[id];\n      if (!win) return state;\n      return {\n        windows: { ...state.windows, [id]: { ...win, isMinimized: true } },\n      };\n    });\n  },\n  restoreWindow: (id) => {\n    set((state) => {\n      const win = state.windows[id];\n      if (!win) return state;\n      return {\n        windows: { ...state.windows, [id]: { ...win, isMinimized: false } },\n      };\n    });\n  },\n  isOpen: (type) => {\n    return Object.values(get().windows).some((w) => w.type === type);\n  },\n  getByType: (type) => {\n    return Object.values(get().windows).find((w) => w.type === type);\n  },\n  updateRotation: (id, rotationDeg) => {\n    set((state) => {\n      const win = state.windows[id];\n      if (!win) return state;\n      return {\n        windows: { ...state.windows, [id]: { ...win, rotationDeg } },\n      };\n    });\n  },\n}));\n"],"names":["createId","DEFAULT_BOUNDS","useWindowStore","create","set","get","type","title","initialBounds","minWidth","minHeight","isFrameless","isResizable","rotationDeg","id","bounds","zIndex","record","state","w","windows","win"],"mappings":"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"}