@widgetstools/react-dock-manager 0.1.2 → 0.1.3

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.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../../dock-manager-core/dist/index.js","../src/components/dock/DockManagerCore.tsx","../src/hooks/useTheme.ts"],"names":["_DockviewComponent","DockManagerCore","state","useState","useEffect"],"mappings":"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","file":"index.js","sourcesContent":["// src/types/dock.ts\nfunction createPreventableEvent(type, panelId) {\n const event = {\n type,\n panelId,\n defaultPrevented: false,\n preventDefault() {\n event.defaultPrevented = true;\n }\n };\n return event;\n}\n\n// src/types/resourceStrings.ts\nvar defaultResourceStrings = {\n close: \"Close\",\n closeOthers: \"Close Others\",\n closeAll: \"Close All\",\n float: \"Float\",\n pin: \"Pin\",\n unpin: \"Unpin\",\n maximize: \"Maximize\",\n restore: \"Restore\",\n dock: \"Dock\"\n};\n\n// src/layout/LayoutTree.ts\nvar _idCounter = 0;\nfunction genId(prefix) {\n return `${prefix}_${++_idCounter}`;\n}\nfunction resetIdCounter() {\n _idCounter = 0;\n}\nfunction removePanel(root, panelId) {\n return removePanelInner(root, panelId);\n}\nfunction removePanelInner(node, panelId) {\n if (node.type === \"tabgroup\") {\n if (!node.panels.includes(panelId))\n return node;\n const remaining = node.panels.filter((p) => p !== panelId);\n if (remaining.length === 0)\n return null;\n return {\n ...node,\n panels: remaining,\n activePanel: node.activePanel === panelId ? remaining[0] : node.activePanel\n };\n }\n const newChildren = [];\n const newSizes = [];\n for (let i = 0; i < node.children.length; i++) {\n const result = removePanelInner(node.children[i], panelId);\n if (result !== null) {\n newChildren.push(result);\n newSizes.push(node.sizes[i] ?? 100 / node.children.length);\n }\n }\n if (newChildren.length === 0)\n return null;\n if (newChildren.length === 1)\n return newChildren[0];\n return { ...node, children: newChildren, sizes: normalizeSizes(newSizes) };\n}\nfunction insertInGroup(root, targetGroupId, panelId) {\n if (root.type === \"tabgroup\") {\n if (root.id === targetGroupId) {\n return { ...root, panels: [...root.panels, panelId], activePanel: panelId };\n }\n return root;\n }\n return {\n ...root,\n children: root.children.map((child) => insertInGroup(child, targetGroupId, panelId))\n };\n}\nfunction insertBySplit(root, targetGroupId, panelId, position) {\n if (position === \"center\")\n return insertInGroup(root, targetGroupId, panelId);\n if (root.type === \"tabgroup\") {\n if (root.id === targetGroupId) {\n return splitGroup(root, panelId, position);\n }\n return root;\n }\n return {\n ...root,\n children: root.children.map((child) => insertBySplit(child, targetGroupId, panelId, position))\n };\n}\nfunction insertAtEdge(root, panelId, edge, sizePercent = 20) {\n const newGroup = {\n type: \"tabgroup\",\n id: genId(\"tg\"),\n panels: [panelId],\n activePanel: panelId\n };\n const isHorizontal = edge === \"left\" || edge === \"right\";\n const isAfter = edge === \"right\" || edge === \"bottom\";\n if (root.type === \"split\") {\n const dirMatch = isHorizontal && root.direction === \"horizontal\" || !isHorizontal && root.direction === \"vertical\";\n if (dirMatch) {\n const children2 = isAfter ? [...root.children, newGroup] : [newGroup, ...root.children];\n const oldTotal = root.sizes.reduce((a, b) => a + b, 0) || 100;\n const scale = (100 - sizePercent) / oldTotal;\n const sizes = isAfter ? [...root.sizes.map((s) => s * scale), sizePercent] : [sizePercent, ...root.sizes.map((s) => s * scale)];\n return { ...root, children: children2, sizes };\n }\n }\n const children = isAfter ? [root, newGroup] : [newGroup, root];\n return {\n type: \"split\",\n id: genId(\"split\"),\n direction: isHorizontal ? \"horizontal\" : \"vertical\",\n children,\n sizes: isAfter ? [100 - sizePercent, sizePercent] : [sizePercent, 100 - sizePercent]\n };\n}\nfunction movePanel(root, panelId, targetGroupId, position) {\n const sourceGroup = findTabGroupForPanel(root, panelId);\n if (sourceGroup === targetGroupId && position === \"center\")\n return root;\n if (sourceGroup === targetGroupId && position !== \"center\") {\n const group = findTabGroupById(root, sourceGroup);\n if (group && group.panels.length === 1)\n return root;\n }\n const afterRemove = removePanel(root, panelId);\n if (!afterRemove) {\n return { type: \"tabgroup\", id: genId(\"tg\"), panels: [panelId], activePanel: panelId };\n }\n if (position === \"center\") {\n if (findTabGroupById(afterRemove, targetGroupId)) {\n return insertInGroup(afterRemove, targetGroupId, panelId);\n }\n const firstGroup = findFirstTabGroup(afterRemove);\n if (firstGroup)\n return insertInGroup(afterRemove, firstGroup, panelId);\n return afterRemove;\n }\n if (findTabGroupById(afterRemove, targetGroupId)) {\n return insertBySplit(afterRemove, targetGroupId, panelId, position);\n }\n const edge = positionToEdge(position);\n return insertAtEdge(afterRemove, panelId, edge);\n}\nfunction findTabGroupForPanel(node, panelId) {\n if (node.type === \"tabgroup\")\n return node.panels.includes(panelId) ? node.id : null;\n for (const child of node.children) {\n const result = findTabGroupForPanel(child, panelId);\n if (result)\n return result;\n }\n return null;\n}\nfunction findFirstTabGroup(node) {\n if (node.type === \"tabgroup\")\n return node.id;\n for (const child of node.children) {\n const result = findFirstTabGroup(child);\n if (result)\n return result;\n }\n return null;\n}\nfunction findTabGroupById(node, id) {\n if (node.type === \"tabgroup\")\n return node.id === id ? node : null;\n for (const child of node.children) {\n const result = findTabGroupById(child, id);\n if (result)\n return result;\n }\n return null;\n}\nfunction findAllTabGroups(node) {\n if (node.type === \"tabgroup\")\n return [node];\n return node.children.flatMap((child) => findAllTabGroups(child));\n}\nfunction collectLayoutPanelIds(node) {\n if (node.type === \"tabgroup\")\n return new Set(node.panels);\n const ids = /* @__PURE__ */ new Set();\n for (const child of node.children) {\n for (const id of collectLayoutPanelIds(child))\n ids.add(id);\n }\n return ids;\n}\nfunction collectAllPanelsOrdered(node) {\n if (node.type === \"tabgroup\")\n return [...node.panels];\n return node.children.flatMap((child) => collectAllPanelsOrdered(child));\n}\nfunction countPanels(node) {\n if (node.type === \"tabgroup\")\n return node.panels.length;\n return node.children.reduce((sum, child) => sum + countPanels(child), 0);\n}\nfunction detectPanelEdge(node, panelId) {\n return detectEdgeInner(node, panelId, []);\n}\nfunction findTabGroupByEdge(node, edge) {\n if (node.type === \"tabgroup\")\n return null;\n const isHorizontal = edge === \"left\" || edge === \"right\";\n if (isHorizontal && node.direction !== \"horizontal\")\n return null;\n if (!isHorizontal && node.direction !== \"vertical\")\n return null;\n const idx = edge === \"left\" || edge === \"top\" ? 0 : node.children.length - 1;\n const child = node.children[idx];\n if (!child)\n return null;\n if (child.type === \"tabgroup\")\n return child.id;\n return findTabGroupByEdge(child, edge);\n}\nfunction setActivePanel(node, tabGroupId, panelId) {\n if (node.type === \"tabgroup\") {\n return node.id === tabGroupId && node.panels.includes(panelId) ? { ...node, activePanel: panelId } : node;\n }\n return { ...node, children: node.children.map((c) => setActivePanel(c, tabGroupId, panelId)) };\n}\nfunction updateSizes(node, splitId, sizes) {\n if (node.type === \"tabgroup\")\n return node;\n if (node.id === splitId)\n return { ...node, sizes };\n return { ...node, children: node.children.map((c) => updateSizes(c, splitId, sizes)) };\n}\nfunction updateTabGroup(node, tabGroupId, updater) {\n if (node.type === \"tabgroup\")\n return node.id === tabGroupId ? updater(node) : node;\n return { ...node, children: node.children.map((c) => updateTabGroup(c, tabGroupId, updater)) };\n}\nfunction reorderPanelToFront(node, tabGroupId, panelId) {\n return updateTabGroup(node, tabGroupId, (tg) => {\n if (!tg.panels.includes(panelId))\n return tg;\n return { ...tg, panels: [panelId, ...tg.panels.filter((p) => p !== panelId)], activePanel: panelId };\n });\n}\nfunction findNextPanel(node, currentPanelId) {\n const all = collectAllPanelsOrdered(node);\n const idx = all.indexOf(currentPanelId);\n if (idx === -1)\n return all[0] || null;\n return all[(idx + 1) % all.length] || null;\n}\nfunction findPreviousPanel(node, currentPanelId) {\n const all = collectAllPanelsOrdered(node);\n const idx = all.indexOf(currentPanelId);\n if (idx === -1)\n return all[all.length - 1] || null;\n return all[(idx - 1 + all.length) % all.length] || null;\n}\nfunction splitGroup(group, panelId, position) {\n const newGroup = {\n type: \"tabgroup\",\n id: genId(\"tg\"),\n panels: [panelId],\n activePanel: panelId\n };\n const isHorizontal = position === \"left\" || position === \"right\";\n const isBefore = position === \"left\" || position === \"top\";\n const children = isBefore ? [newGroup, group] : [group, newGroup];\n return {\n type: \"split\",\n id: genId(\"split\"),\n direction: isHorizontal ? \"horizontal\" : \"vertical\",\n children,\n sizes: [50, 50]\n };\n}\nfunction normalizeSizes(sizes) {\n const total = sizes.reduce((a, b) => a + b, 0);\n if (total === 0)\n return sizes.map(() => 100 / sizes.length);\n if (Math.abs(total - 100) < 0.01)\n return sizes;\n return sizes.map((s) => s / total * 100);\n}\nfunction detectEdgeInner(node, panelId, path) {\n if (node.type === \"tabgroup\") {\n if (path.includes(\"right\"))\n return \"right\";\n if (path.includes(\"bottom\"))\n return \"bottom\";\n if (path.includes(\"top\"))\n return \"top\";\n return \"left\";\n }\n for (let i = 0; i < node.children.length; i++) {\n if (!findTabGroupForPanel(node.children[i], panelId))\n continue;\n let pos = \"\";\n if (node.direction === \"horizontal\") {\n pos = i === 0 ? \"left\" : i === node.children.length - 1 ? \"right\" : \"\";\n } else {\n pos = i === 0 ? \"top\" : i === node.children.length - 1 ? \"bottom\" : \"\";\n }\n return detectEdgeInner(node.children[i], panelId, pos ? [...path, pos] : path);\n }\n return \"left\";\n}\nfunction positionToEdge(position) {\n if (position === \"left\")\n return \"left\";\n if (position === \"right\")\n return \"right\";\n if (position === \"top\")\n return \"top\";\n return \"bottom\";\n}\nfunction isPanelPlaced(state, panelId) {\n if (collectLayoutPanelIds(state.layout).has(panelId))\n return true;\n if (state.floatingPanels.some((fp) => fp.panelId === panelId))\n return true;\n if (state.unpinnedPanels.some((up) => up.panelId === panelId))\n return true;\n if (state.popoutPanels?.some((pp) => pp.panelId === panelId))\n return true;\n return false;\n}\n\n// src/reducer/dockReducer.ts\nfunction safeEmptyGroup() {\n return { type: \"tabgroup\", id: genId(\"tg\"), panels: [], activePanel: \"\" };\n}\nfunction fallbackActive(currentId, removedId, layout, floating) {\n if (currentId !== removedId)\n return currentId;\n const all = collectAllPanelsOrdered(layout);\n if (all.length > 0)\n return all[0];\n if (floating.length > 0)\n return floating[0].panelId;\n return \"\";\n}\nfunction removeFromPlacements(state, panelId) {\n return {\n floatingPanels: state.floatingPanels.filter((p) => p.panelId !== panelId),\n unpinnedPanels: state.unpinnedPanels.filter((p) => p.panelId !== panelId),\n popoutPanels: (state.popoutPanels || []).filter((p) => p.panelId !== panelId)\n };\n}\nfunction dockReducer(state, action) {\n switch (action.type) {\n case \"ADD_PANEL\": {\n const { panelId } = action.payload;\n if (state.panels[panelId])\n return state;\n const panel = {\n id: panelId,\n title: action.payload.title,\n icon: action.payload.icon,\n closable: action.payload.closable !== false,\n floatable: action.payload.floatable !== false,\n tabComponent: action.payload.tabComponent,\n widgetType: action.payload.widgetType,\n widgetProps: action.payload.widgetProps\n };\n const targetGroup = findFirstTabGroup(state.layout);\n const layout = targetGroup ? insertInGroup(state.layout, targetGroup, panelId) : { type: \"tabgroup\", id: genId(\"tg\"), panels: [panelId], activePanel: panelId };\n return {\n ...state,\n panels: { ...state.panels, [panelId]: panel },\n layout,\n activePaneId: panelId\n };\n }\n case \"CLOSE_PANEL\": {\n const { panelId } = action.payload;\n const layout = removePanel(state.layout, panelId) ?? safeEmptyGroup();\n const panels = { ...state.panels };\n delete panels[panelId];\n const placements = removeFromPlacements(state, panelId);\n const maximizedPanelId = state.maximizedPanelId === panelId ? void 0 : state.maximizedPanelId;\n const activePaneId = fallbackActive(state.activePaneId, panelId, layout, placements.floatingPanels);\n return { ...state, layout, panels, ...placements, maximizedPanelId, activePaneId };\n }\n case \"UPDATE_PANEL_CONFIG\": {\n const { panelId, updates } = action.payload;\n if (!state.panels[panelId])\n return state;\n return {\n ...state,\n panels: { ...state.panels, [panelId]: { ...state.panels[panelId], ...updates } }\n };\n }\n case \"MOVE_PANEL\": {\n const { panelId, targetTabGroupId, position } = action.payload;\n const sourceGroup = findTabGroupForPanel(state.layout, panelId);\n if (sourceGroup === targetTabGroupId && position === \"center\")\n return state;\n const targetGroup = findTabGroupById(state.layout, targetTabGroupId);\n if (sourceGroup === targetTabGroupId && targetGroup && targetGroup.panels.length === 1)\n return state;\n const sourcePanel = state.panels[panelId];\n if (sourcePanel?.documentOnly && targetGroup) {\n const isDocHost = targetGroup.panels.some((pid) => state.panels[pid]?.documentOnly) || targetTabGroupId === \"__root__\";\n if (!isDocHost && position === \"center\") {\n return state;\n }\n }\n const layout = movePanel(state.layout, panelId, targetTabGroupId, position);\n const placements = removeFromPlacements(state, panelId);\n return { ...state, layout, ...placements, activePaneId: panelId };\n }\n case \"FLOAT_PANEL\": {\n const { panelId, width, height } = action.payload;\n let { x, y } = action.payload;\n const sourceTabGroupId = findTabGroupForPanel(state.layout, panelId) || void 0;\n const layout = removePanel(state.layout, panelId) ?? safeEmptyGroup();\n const existingFloating = state.floatingPanels.filter((p) => p.panelId !== panelId);\n if (existingFloating.length > 0) {\n const last = existingFloating[existingFloating.length - 1];\n const cascadeX = last.x + 20;\n const cascadeY = last.y + 20;\n if (x === last.x || Math.abs(x - last.x) < 5) {\n x = cascadeX;\n y = cascadeY;\n }\n }\n const floatingPanels = [\n ...existingFloating,\n { panelId, x, y, width, height, zIndex: state.nextZIndex, sourceTabGroupId }\n ];\n return { ...state, layout, floatingPanels, nextZIndex: state.nextZIndex + 1, activePaneId: panelId };\n }\n case \"DOCK_FLOATING\": {\n const { panelId, targetTabGroupId, position } = action.payload;\n const floatingEntry = state.floatingPanels.find((p) => p.panelId === panelId);\n const floatingPanels = state.floatingPanels.filter((p) => p.panelId !== panelId);\n let target = targetTabGroupId && targetTabGroupId !== \"default\" ? targetTabGroupId : null;\n if (!target && floatingEntry?.sourceTabGroupId) {\n const sourceExists = findTabGroupById(state.layout, floatingEntry.sourceTabGroupId);\n if (sourceExists) {\n const layout2 = insertInGroup(state.layout, floatingEntry.sourceTabGroupId, panelId);\n return { ...state, floatingPanels, layout: layout2, activePaneId: panelId };\n }\n }\n if (!target) {\n target = findFirstTabGroup(state.layout);\n }\n const layout = target ? position === \"center\" ? insertInGroup(state.layout, target, panelId) : insertBySplit(state.layout, target, panelId, position) : { type: \"tabgroup\", id: genId(\"tg\"), panels: [panelId], activePanel: panelId };\n return { ...state, floatingPanels, layout, activePaneId: panelId };\n }\n case \"UPDATE_FLOATING\": {\n const { panelId, ...updates } = action.payload;\n return {\n ...state,\n floatingPanels: state.floatingPanels.map((p) => p.panelId === panelId ? { ...p, ...updates } : p)\n };\n }\n case \"BRING_TO_FRONT\": {\n const { panelId } = action.payload;\n return {\n ...state,\n floatingPanels: state.floatingPanels.map(\n (p) => p.panelId === panelId ? { ...p, zIndex: state.nextZIndex } : p\n ),\n nextZIndex: state.nextZIndex + 1,\n activePaneId: panelId\n };\n }\n case \"UNPIN_PANEL\": {\n const { panelId } = action.payload;\n const edge = detectPanelEdge(state.layout, panelId);\n const sourceTabGroupId = findTabGroupForPanel(state.layout, panelId) || void 0;\n const layout = removePanel(state.layout, panelId) ?? safeEmptyGroup();\n const unpinnedPanels = [\n ...state.unpinnedPanels.filter((p) => p.panelId !== panelId),\n { panelId, edge, size: 200, sourceTabGroupId }\n ];\n const activePaneId = fallbackActive(state.activePaneId, panelId, layout, state.floatingPanels);\n return { ...state, layout, unpinnedPanels, activePaneId };\n }\n case \"PIN_PANEL\": {\n const { panelId } = action.payload;\n const entry = state.unpinnedPanels.find((p) => p.panelId === panelId);\n const unpinnedPanels = state.unpinnedPanels.filter((p) => p.panelId !== panelId);\n let layout = removePanel(state.layout, panelId) ?? safeEmptyGroup();\n const edge = entry?.edge || \"left\";\n const sourceId = entry?.sourceTabGroupId;\n if (sourceId && findTabGroupById(layout, sourceId)) {\n layout = insertInGroup(layout, sourceId, panelId);\n } else {\n layout = insertAtEdge(layout, panelId, edge);\n }\n return { ...state, unpinnedPanels, layout, activePaneId: panelId };\n }\n case \"POPOUT_PANEL\": {\n const { panelId, windowName, x, y, width, height } = action.payload;\n const layout = removePanel(state.layout, panelId) ?? safeEmptyGroup();\n const floatingPanels = state.floatingPanels.filter((p) => p.panelId !== panelId);\n const popout = { panelId, windowName, x, y, width, height };\n return {\n ...state,\n layout,\n floatingPanels,\n popoutPanels: [...state.popoutPanels || [], popout]\n };\n }\n case \"DOCK_POPOUT\": {\n const { panelId, targetTabGroupId, position } = action.payload;\n const popoutPanels = (state.popoutPanels || []).filter((p) => p.panelId !== panelId);\n const target = targetTabGroupId && targetTabGroupId !== \"default\" ? targetTabGroupId : findFirstTabGroup(state.layout);\n const layout = target ? insertBySplit(state.layout, target, panelId, position) : { type: \"tabgroup\", id: genId(\"tg\"), panels: [panelId], activePanel: panelId };\n return { ...state, popoutPanels, layout, activePaneId: panelId };\n }\n case \"UPDATE_POPOUT\": {\n const { panelId, ...updates } = action.payload;\n return {\n ...state,\n popoutPanels: (state.popoutPanels || []).map(\n (p) => p.panelId === panelId ? { ...p, ...updates } : p\n )\n };\n }\n case \"SET_ACTIVE_PANEL\": {\n const { tabGroupId, panelId } = action.payload;\n return { ...state, layout: setActivePanel(state.layout, tabGroupId, panelId) };\n }\n case \"ACTIVATE_OVERFLOW_TAB\": {\n const { tabGroupId, panelId } = action.payload;\n return {\n ...state,\n layout: reorderPanelToFront(state.layout, tabGroupId, panelId),\n activePaneId: panelId\n };\n }\n case \"DOCK_TO_EDGE\": {\n const { panelId, edge } = action.payload;\n const dockEdge = edge === \"center\" ? \"bottom\" : edge;\n const afterRemove = removePanel(state.layout, panelId);\n let floatingPanels = state.floatingPanels.filter((fp) => fp.panelId !== panelId);\n let unpinnedPanels = state.unpinnedPanels.filter((up) => up.panelId !== panelId);\n let layout;\n if (afterRemove) {\n layout = insertAtEdge(afterRemove, panelId, dockEdge);\n } else {\n layout = { type: \"tabgroup\", id: genId(\"tg\"), panels: [panelId], activePanel: panelId };\n }\n return { ...state, layout, floatingPanels, unpinnedPanels, activePaneId: panelId };\n }\n case \"REORDER_TABS\": {\n const { tabGroupId, panelId, newIndex } = action.payload;\n const group = findTabGroupById(state.layout, tabGroupId);\n if (!group)\n return state;\n const oldIndex = group.panels.indexOf(panelId);\n if (oldIndex === -1 || oldIndex === newIndex)\n return state;\n const newPanels = [...group.panels];\n newPanels.splice(oldIndex, 1);\n newPanels.splice(newIndex, 0, panelId);\n const layout = updateTabGroup(state.layout, tabGroupId, (tg) => ({ ...tg, panels: newPanels }));\n return { ...state, layout };\n }\n case \"RESIZE_SPLIT\": {\n const { splitId, sizes } = action.payload;\n return { ...state, layout: updateSizes(state.layout, splitId, sizes) };\n }\n case \"SET_HEADER_POSITION\": {\n const { tabGroupId, headerPosition } = action.payload;\n return {\n ...state,\n layout: updateTabGroup(state.layout, tabGroupId, (tg) => ({ ...tg, headerPosition }))\n };\n }\n case \"MAXIMIZE_PANEL\": {\n const { panelId } = action.payload;\n if (!state.panels[panelId])\n return state;\n return { ...state, maximizedPanelId: panelId, activePaneId: panelId };\n }\n case \"RESTORE_PANEL\":\n return { ...state, maximizedPanelId: void 0 };\n case \"SET_ACTIVE_PANE\": {\n const { panelId } = action.payload;\n if (!state.panels[panelId])\n return state;\n return { ...state, activePaneId: panelId };\n }\n case \"NAVIGATE\": {\n const { direction } = action.payload;\n if (!state.activePaneId)\n return state;\n const nextId = direction === \"next\" ? findNextPanel(state.layout, state.activePaneId) : findPreviousPanel(state.layout, state.activePaneId);\n if (!nextId || nextId === state.activePaneId)\n return state;\n const tabGroupId = findTabGroupForPanel(state.layout, nextId);\n if (!tabGroupId)\n return state;\n return {\n ...state,\n layout: setActivePanel(state.layout, tabGroupId, nextId),\n activePaneId: nextId\n };\n }\n case \"LOAD_STATE\":\n return validateState(action.payload);\n default:\n return state;\n }\n}\nfunction validateState(state) {\n const s = { ...state };\n if (!Array.isArray(s.floatingPanels))\n s.floatingPanels = [];\n if (!Array.isArray(s.unpinnedPanels))\n s.unpinnedPanels = [];\n if (!Array.isArray(s.popoutPanels))\n s.popoutPanels = [];\n if (typeof s.nextZIndex !== \"number\" || s.nextZIndex < 1e3)\n s.nextZIndex = 1e3;\n if (!s.panels || typeof s.panels !== \"object\")\n s.panels = {};\n if (!s.layout) {\n s.layout = { type: \"tabgroup\", id: genId(\"tg\"), panels: [], activePanel: \"\" };\n }\n if (s.activePaneId && !s.panels[s.activePaneId]) {\n const allPanels = collectAllPanelsOrdered(s.layout);\n s.activePaneId = allPanels[0] || \"\";\n }\n if (s.maximizedPanelId && !s.panels[s.maximizedPanelId]) {\n s.maximizedPanelId = void 0;\n }\n return s;\n}\nfunction createDefaultState() {\n return {\n layout: { type: \"tabgroup\", id: genId(\"tg\"), panels: [], activePanel: \"\" },\n panels: {},\n floatingPanels: [],\n popoutPanels: [],\n unpinnedPanels: [],\n nextZIndex: 1e3,\n activePaneId: \"\"\n };\n}\n\n// src/api/DockviewApi.ts\nvar DockviewApi = class {\n /**\n * @param getState - Returns the current {@link DockManagerState} snapshot.\n * @param dispatch - Sends a {@link DockAction} to mutate state.\n * @param _onUndo - Optional undo callback wired by DockviewComponent.\n * @param _onRedo - Optional redo callback wired by DockviewComponent.\n */\n constructor(getState, dispatch, _onUndo, _onRedo) {\n this.getState = getState;\n this.dispatch = dispatch;\n this._onUndo = _onUndo;\n this._onRedo = _onRedo;\n // ── Layout Presets ──────────────────────────────────────────────\n this.presets = /* @__PURE__ */ new Map();\n // ── Developer Experience ──────────────────────────────────────\n this._debugMode = false;\n this._debugOverlayHandler = null;\n }\n // ── State queries ──────────────────────────────────────────────\n /** Get the current dock manager state (read-only snapshot) */\n get state() {\n return this.getState();\n }\n /** Get the currently active pane's panel ID */\n get activePanelId() {\n return this.getState().activePaneId;\n }\n /** Get the currently maximized panel ID, or undefined */\n get maximizedPanelId() {\n return this.getState().maximizedPanelId;\n }\n /**\n * Get a panel's configuration by ID.\n *\n * @param panelId - The panel to look up.\n * @returns The panel config, or `undefined` if no panel with that ID exists.\n */\n getPanel(panelId) {\n return this.getState().panels[panelId];\n }\n /**\n * Get all panel IDs in the docked layout tree (excludes floating and unpinned panels).\n *\n * @returns Panel IDs in depth-first order.\n */\n getLayoutPanelIds() {\n return collectAllPanelsOrdered(this.getState().layout);\n }\n /** Get all panel IDs across the entire dock manager */\n getAllPanelIds() {\n const state = this.getState();\n return Object.keys(state.panels);\n }\n /** Get the total number of panels */\n get panelCount() {\n return Object.keys(this.getState().panels).length;\n }\n /**\n * Check if a panel exists in the dock manager.\n *\n * @param panelId - The panel ID to check.\n * @returns `true` if the panel is registered (regardless of placement).\n */\n hasPanel(panelId) {\n return panelId in this.getState().panels;\n }\n /**\n * Check if a panel is placed somewhere visible (in the layout tree, floating, or unpinned).\n *\n * @param panelId - The panel ID to check.\n * @returns `true` if the panel occupies a slot in the UI.\n */\n isPanelPlaced(panelId) {\n return isPanelPlaced(this.getState(), panelId);\n }\n /**\n * Get the tab group ID that contains a given panel.\n *\n * @param panelId - The panel to search for.\n * @returns The containing tab group ID, or `null` if the panel is not in any group.\n */\n getGroupForPanel(panelId) {\n return findTabGroupForPanel(this.getState().layout, panelId);\n }\n /**\n * Get a tab group by its ID.\n *\n * @param groupId - The tab group ID.\n * @returns The tab group node, or `null` if not found.\n */\n getGroup(groupId) {\n return findTabGroupById(this.getState().layout, groupId);\n }\n /** Get all tab groups */\n getAllGroups() {\n return findAllTabGroups(this.getState().layout);\n }\n /** Get all floating panels */\n getFloatingPanels() {\n return this.getState().floatingPanels;\n }\n /**\n * Check if a panel is currently rendered as a floating window.\n *\n * @param panelId - The panel ID to check.\n * @returns `true` if the panel is floating.\n */\n isFloating(panelId) {\n return this.getState().floatingPanels.some((fp) => fp.panelId === panelId);\n }\n /** Check if a panel is the active pane */\n isActive(panelId) {\n return this.getState().activePaneId === panelId;\n }\n /** Check if a panel is maximized */\n isMaximized(panelId) {\n return this.getState().maximizedPanelId === panelId;\n }\n /** Get the layout tree */\n get layout() {\n return this.getState().layout;\n }\n // ── Panel operations ───────────────────────────────────────────\n /**\n * Add a new panel to the dock manager.\n *\n * By default the panel is inserted as a new tab in the first tab group.\n * Use `targetGroupId` and `position` to control placement.\n *\n * @param options - Panel creation and placement options.\n *\n * @example\n * ```ts\n * api.addPanel({ id: 'terminal', title: 'Terminal', closable: true });\n * api.addPanel({ id: 'output', title: 'Output', targetGroupId: 'tg_2', position: 'bottom' });\n * ```\n */\n addPanel(options) {\n const panelId = options.panelId || options.id;\n if (!panelId) {\n console.error(\"[DockviewApi] addPanel requires id or panelId\");\n return;\n }\n const { title, icon, closable, floatable, tabComponent, widgetType, widgetProps, targetGroupId, position } = options;\n this.dispatch({\n type: \"ADD_PANEL\",\n payload: { panelId, title, icon, closable, floatable, tabComponent, widgetType, widgetProps }\n });\n if (targetGroupId && (targetGroupId !== findFirstTabGroup(this.getState().layout) || position !== \"center\")) {\n this.dispatch({\n type: \"MOVE_PANEL\",\n payload: { panelId, targetTabGroupId: targetGroupId, position: position || \"center\" }\n });\n }\n }\n /**\n * Remove a panel from the dock manager entirely.\n *\n * The panel is removed from the layout tree, floating list, and unpinned list,\n * and its {@link PanelConfig} is deleted.\n *\n * @param panelId - The ID of the panel to close.\n */\n closePanel(panelId) {\n this.dispatch({ type: \"CLOSE_PANEL\", payload: { panelId } });\n }\n /**\n * Move a panel to a different location in the layout.\n *\n * @param options - Target group and position for the move.\n */\n movePanel(options) {\n this.dispatch({\n type: \"MOVE_PANEL\",\n payload: {\n panelId: options.panelId,\n targetTabGroupId: options.targetGroupId,\n position: options.position\n }\n });\n }\n /**\n * Set the active (visible) panel within a tab group, switching the displayed tab.\n *\n * @param groupId - The tab group containing the panel.\n * @param panelId - The panel to make active.\n */\n setActivePanel(groupId, panelId) {\n this.dispatch({ type: \"SET_ACTIVE_PANEL\", payload: { tabGroupId: groupId, panelId } });\n }\n /**\n * Set the globally active pane (highlighted with the focus indicator).\n *\n * @param panelId - The panel to focus.\n */\n setActivePane(panelId) {\n this.dispatch({ type: \"SET_ACTIVE_PANE\", payload: { panelId } });\n }\n /**\n * Update a panel's configuration (title, icon, closable, etc.).\n *\n * Only the provided fields are merged; unspecified fields remain unchanged.\n *\n * @param panelId - The panel to update.\n * @param updates - Partial config to merge.\n */\n updatePanel(panelId, updates) {\n this.dispatch({ type: \"UPDATE_PANEL_CONFIG\", payload: { panelId, updates } });\n }\n // ── Floating operations ────────────────────────────────────────\n /**\n * Float a panel by removing it from the layout tree and rendering it\n * as a draggable, resizable floating window.\n *\n * @param options - Position and size for the floating window.\n */\n floatPanel(options) {\n this.dispatch({\n type: \"FLOAT_PANEL\",\n payload: {\n panelId: options.panelId,\n x: options.x ?? 100,\n y: options.y ?? 100,\n width: options.width ?? 400,\n height: options.height ?? 300\n }\n });\n }\n /**\n * Dock a floating panel back into the layout tree.\n *\n * @param panelId - The floating panel to dock.\n * @param targetGroupId - The tab group to dock into. Defaults to `'default'` (first group).\n * @param position - Where to place it relative to the target. Defaults to `'center'`.\n */\n dockFloatingPanel(panelId, targetGroupId, position = \"center\") {\n this.dispatch({\n type: \"DOCK_FLOATING\",\n payload: {\n panelId,\n targetTabGroupId: targetGroupId || \"default\",\n position\n }\n });\n }\n /**\n * Update a floating panel's position and/or size.\n *\n * @param panelId - The floating panel to update.\n * @param updates - Partial position/size values to merge.\n */\n updateFloatingPanel(panelId, updates) {\n this.dispatch({ type: \"UPDATE_FLOATING\", payload: { panelId, ...updates } });\n }\n /**\n * Bring a floating panel to the front by assigning it the highest z-index.\n *\n * @param panelId - The floating panel to bring forward.\n */\n bringToFront(panelId) {\n this.dispatch({ type: \"BRING_TO_FRONT\", payload: { panelId } });\n }\n // ── Maximize/restore ───────────────────────────────────────────\n /**\n * Maximize a panel so it occupies the full container space.\n *\n * @param panelId - The panel to maximize.\n */\n maximizePanel(panelId) {\n this.dispatch({ type: \"MAXIMIZE_PANEL\", payload: { panelId } });\n }\n /** Restore the maximized panel to its original position */\n restorePanel() {\n this.dispatch({ type: \"RESTORE_PANEL\", payload: { panelId: \"\" } });\n }\n /**\n * Toggle maximize state for a panel. Maximizes if not already maximized,\n * restores if it is.\n *\n * @param panelId - The panel to toggle.\n */\n toggleMaximize(panelId) {\n if (this.getState().maximizedPanelId === panelId) {\n this.restorePanel();\n } else {\n this.maximizePanel(panelId);\n }\n }\n // ── Navigation ─────────────────────────────────────────────────\n /** Navigate to the next panel (Ctrl+Tab behavior) */\n navigateNext() {\n this.dispatch({ type: \"NAVIGATE\", payload: { direction: \"next\" } });\n }\n /** Navigate to the previous panel (Ctrl+Shift+Tab behavior) */\n navigatePrevious() {\n this.dispatch({ type: \"NAVIGATE\", payload: { direction: \"previous\" } });\n }\n // ── Layout operations ──────────────────────────────────────────\n /**\n * Resize the children of a split node.\n *\n * @param splitId - The split node to resize.\n * @param sizes - New size percentages for each child. Must sum to 100.\n */\n resizeSplit(splitId, sizes) {\n this.dispatch({ type: \"RESIZE_SPLIT\", payload: { splitId, sizes } });\n }\n /**\n * Set the header (tab bar) position for a tab group.\n *\n * @param groupId - The tab group to update.\n * @param position - The new header position, or `undefined` to reset to default.\n */\n setHeaderPosition(groupId, position) {\n this.dispatch({ type: \"SET_HEADER_POSITION\", payload: { tabGroupId: groupId, headerPosition: position } });\n }\n // ── Unpinned panels ────────────────────────────────────────────\n /**\n * Unpin a panel, removing it from the layout tree and displaying it\n * as an auto-hide strip along the nearest edge.\n *\n * @param panelId - The panel to unpin.\n */\n unpinPanel(panelId) {\n this.dispatch({ type: \"UNPIN_PANEL\", payload: { panelId } });\n }\n /**\n * Pin an unpinned panel back into the layout tree as a tab in the first group.\n *\n * @param panelId - The unpinned panel to restore.\n */\n pinPanel(panelId) {\n this.dispatch({ type: \"PIN_PANEL\", payload: { panelId } });\n }\n // ── State management ───────────────────────────────────────────\n /**\n * Replace the entire dock manager state (e.g., to restore a serialized layout).\n *\n * The state is validated and repaired before being applied.\n *\n * @param state - The complete state to load.\n */\n loadState(state) {\n this.dispatch({ type: \"LOAD_STATE\", payload: state });\n }\n /** Close all panels */\n closeAllPanels() {\n const panelIds = this.getAllPanelIds();\n for (const id of panelIds) {\n this.dispatch({ type: \"CLOSE_PANEL\", payload: { panelId: id } });\n }\n }\n // ── Undo / Redo ─────────────────────────────────────────────────\n /** Undo the last state change. */\n undo() {\n this._onUndo?.();\n }\n /** Redo a previously undone state change. */\n redo() {\n this._onRedo?.();\n }\n /** Reset layout to a given default state. */\n resetLayout(defaultState) {\n this.dispatch({ type: \"LOAD_STATE\", payload: defaultState });\n }\n /** Save the current state as a named preset. Returns the preset object. */\n savePreset(name) {\n const preset = { name, state: structuredClone(this.getState()) };\n this.presets.set(name, preset);\n return preset;\n }\n /** Load a previously saved preset. */\n loadPreset(preset) {\n this.dispatch({ type: \"LOAD_STATE\", payload: preset.state });\n }\n /** Get all saved presets. */\n getPresets() {\n return Array.from(this.presets.values());\n }\n // ── Floating operations (extended) ────────────────────────────\n /** Dock all floating panels back into the layout. */\n dockAllFloating() {\n const state = this.getState();\n for (const fp of [...state.floatingPanels]) {\n this.dispatch({\n type: \"DOCK_FLOATING\",\n payload: { panelId: fp.panelId, targetTabGroupId: \"default\", position: \"center\" }\n });\n }\n }\n // ── Persistence (URL) ─────────────────────────────────────────\n /** Export the current state as a base64 URL-safe string. */\n exportAsUrl() {\n const json = JSON.stringify(this.getState());\n if (typeof btoa === \"function\") {\n return btoa(unescape(encodeURIComponent(json)));\n }\n return Buffer.from(json, \"utf-8\").toString(\"base64\");\n }\n /** Import state from a base64 URL-safe string. */\n importFromUrl(urlString) {\n let json;\n if (typeof atob === \"function\") {\n json = decodeURIComponent(escape(atob(urlString)));\n } else {\n json = Buffer.from(urlString, \"base64\").toString(\"utf-8\");\n }\n const state = JSON.parse(json);\n this.dispatch({ type: \"LOAD_STATE\", payload: state });\n }\n /** Enable/disable debug overlay showing group IDs, panel IDs, split ratios. */\n setDebugMode(enabled) {\n this._debugMode = enabled;\n this._debugOverlayHandler?.(enabled);\n }\n /** @internal Set the debug overlay handler (called by DockviewComponent). */\n _setDebugOverlayHandler(handler) {\n this._debugOverlayHandler = handler;\n }\n /** Whether debug mode is currently enabled. */\n get debugMode() {\n return this._debugMode;\n }\n};\n\n// src/api/PanelApi.ts\nvar PanelApi = class {\n constructor(panelId) {\n // Internal state\n this._disposed = false;\n this._visible = true;\n this._disposeCallbacks = [];\n this._visibilityCallbacks = [];\n // External hooks (set by DockviewComponent)\n this._onUpdateConfig = null;\n this._onRequestAttention = null;\n this._getConfig = null;\n this.panelId = panelId;\n }\n // ── Configuration accessors ────────────────────────────────────────\n /** Get the widget type string */\n get widgetType() {\n return this._getConfig?.()?.widgetType || \"\";\n }\n /** Get the widget props */\n get widgetProps() {\n return this._getConfig?.()?.widgetProps || {};\n }\n // ── Header manipulation ────────────────────────────────────────────\n /** Get the current panel title */\n getTitle() {\n return this._getConfig?.()?.title || \"\";\n }\n /** Set the panel title (updates tab header text) */\n setTitle(title) {\n this._updateConfig({ title });\n }\n /** Set the panel icon (prefix before title text) */\n setIcon(icon) {\n this._updateConfig({ icon: icon || void 0 });\n }\n /**\n * Set a badge on the panel tab (notification count, unsaved dot, etc.)\n * @param badge - Badge text (e.g. \"3\", \"!\", \"●\"), or null to clear\n */\n setBadge(badge) {\n this._updateConfig({ badge });\n }\n /**\n * Request attention for this panel (triggers a CSS pulse animation on the tab).\n * Call with `false` to clear the attention state.\n */\n setAttention(attention) {\n this._onRequestAttention?.(this.panelId, attention);\n }\n /** Set the hidden state (hide without removing from layout) */\n setHidden(hidden) {\n this._updateConfig({ hidden });\n }\n /** Check if the panel is currently hidden */\n get isHidden() {\n return this._getConfig?.()?.hidden || false;\n }\n // ── Widget props ───────────────────────────────────────────────────\n /**\n * Update widget props (partial merge). Triggers state update + re-serialization.\n * @param props - Partial props to merge into existing widgetProps\n */\n updateProps(props) {\n const current = this._getConfig?.()?.widgetProps || {};\n this._updateConfig({ widgetProps: { ...current, ...props } });\n }\n // ── Lifecycle ──────────────────────────────────────────────────────\n /** Register a callback to be called when the panel is closed/disposed */\n onDidDispose(callback) {\n if (this._disposed) {\n callback();\n return;\n }\n this._disposeCallbacks.push(callback);\n }\n /** Register a callback for visibility changes (hidden/shown) */\n onDidChangeVisibility(callback) {\n this._visibilityCallbacks.push(callback);\n }\n /** Check if the panel content is currently visible */\n get isVisible() {\n return this._visible;\n }\n // ── Internal methods (called by DockviewComponent) ─────────────────\n /** @internal Set the config accessor */\n _setConfigAccessor(getConfig) {\n this._getConfig = getConfig;\n }\n /** @internal Set the update handler */\n _setUpdateHandler(handler) {\n this._onUpdateConfig = handler;\n }\n /** @internal Set the attention handler */\n _setAttentionHandler(handler) {\n this._onRequestAttention = handler;\n }\n /** @internal Notify visibility change */\n _setVisible(visible) {\n if (this._visible === visible)\n return;\n this._visible = visible;\n this._visibilityCallbacks.forEach((cb) => {\n try {\n cb(visible);\n } catch (e) {\n console.error(\"PanelApi visibility callback error:\", e);\n }\n });\n }\n /** @internal Dispose this API (called when panel is closed) */\n _dispose() {\n if (this._disposed)\n return;\n this._disposed = true;\n this._disposeCallbacks.forEach((cb) => {\n try {\n cb();\n } catch (e) {\n console.error(\"PanelApi dispose callback error:\", e);\n }\n });\n this._disposeCallbacks = [];\n this._visibilityCallbacks = [];\n this._onUpdateConfig = null;\n this._onRequestAttention = null;\n this._getConfig = null;\n }\n // ── Private ────────────────────────────────────────────────────────\n _updateConfig(updates) {\n if (this._disposed)\n return;\n this._onUpdateConfig?.(this.panelId, updates);\n }\n};\n\n// src/dom/DockIndicatorRenderer.ts\nvar THEME_COLORS = {\n light: {\n bg: \"rgba(255,255,255,0.92)\",\n border: \"rgba(0,0,0,0.2)\",\n accent: \"rgba(41,121,255,0.8)\",\n text: \"#555\",\n previewBg: \"rgba(41,121,255,0.12)\",\n previewBorder: \"rgba(41,121,255,0.5)\",\n ghost: \"rgba(255,255,255,0.95)\",\n ghostBorder: \"rgba(0,0,0,0.25)\",\n indicatorBg: \"rgba(255,255,255,0.92)\",\n indicatorBorder: \"rgba(0,0,0,0.25)\",\n indicatorActiveBg: \"rgba(41,121,255,0.2)\",\n indicatorActiveBorder: \"rgba(41,121,255,0.7)\"\n },\n dark: {\n bg: \"rgba(45,45,48,0.95)\",\n border: \"rgba(255,255,255,0.2)\",\n accent: \"rgba(0,122,204,0.8)\",\n text: \"#aaa\",\n previewBg: \"rgba(0,122,204,0.15)\",\n previewBorder: \"rgba(0,122,204,0.5)\",\n ghost: \"rgba(45,45,48,0.95)\",\n ghostBorder: \"rgba(255,255,255,0.25)\",\n indicatorBg: \"rgba(50,50,55,0.92)\",\n indicatorBorder: \"rgba(255,255,255,0.25)\",\n indicatorActiveBg: \"rgba(0,122,204,0.3)\",\n indicatorActiveBorder: \"rgba(0,122,204,0.8)\"\n }\n};\nvar DockIndicatorRenderer = class {\n constructor(theme) {\n // Ghost element\n this.ghostEl = null;\n // Preview rectangle\n this.previewEl = null;\n // Per-pane indicator containers\n this.paneIndicators = /* @__PURE__ */ new Map();\n // Edge indicators\n this.edgeIndicators = [];\n // Single-target indicator container (unused in current flow but kept for compatibility)\n this.indicatorContainer = null;\n this.theme = theme;\n }\n get paneIndicatorCount() {\n return this.paneIndicators.size;\n }\n setTheme(theme) {\n this.theme = theme;\n }\n // ── Ghost element ─────────────────────────────────────────────\n createGhost(x, y, sourceTitle, sourcePaneRect) {\n const c = THEME_COLORS[this.theme];\n const el = document.createElement(\"div\");\n const ghostW = sourcePaneRect ? Math.round(sourcePaneRect.width) : 280;\n const ghostH = sourcePaneRect ? Math.round(sourcePaneRect.height) : 180;\n const offsetX = Math.round(ghostW / 2);\n const offsetY = 14;\n Object.assign(el.style, {\n position: \"fixed\",\n left: `${x - offsetX}px`,\n top: `${y - offsetY}px`,\n zIndex: \"10001\",\n pointerEvents: \"none\",\n width: `${ghostW}px`,\n height: `${ghostH}px`,\n backgroundColor: c.ghost,\n border: `1px solid ${c.ghostBorder}`,\n borderRadius: \"4px\",\n boxShadow: \"0 8px 24px rgba(0,0,0,0.25)\",\n overflow: \"hidden\",\n opacity: \"0.75\",\n fontFamily: \"-apple-system, BlinkMacSystemFont, Segoe UI, system-ui, sans-serif\"\n });\n const titlebar = document.createElement(\"div\");\n Object.assign(titlebar.style, {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n padding: \"6px 12px\",\n fontSize: \"12px\",\n fontWeight: \"500\",\n borderBottom: `1px solid ${c.ghostBorder}`,\n color: c.text,\n minHeight: \"32px\"\n });\n titlebar.textContent = sourceTitle;\n el.appendChild(titlebar);\n const content = document.createElement(\"div\");\n Object.assign(content.style, { flex: \"1\", background: c.ghost });\n el.appendChild(content);\n document.body.appendChild(el);\n this.ghostEl = el;\n }\n moveGhost(x, y, sourcePaneRect) {\n if (this.ghostEl) {\n const ghostW = sourcePaneRect ? Math.round(sourcePaneRect.width) : 280;\n this.ghostEl.style.left = `${x - Math.round(ghostW / 2)}px`;\n this.ghostEl.style.top = `${y - 14}px`;\n }\n }\n hideGhost() {\n if (this.ghostEl)\n this.ghostEl.style.display = \"none\";\n }\n showGhost() {\n if (this.ghostEl)\n this.ghostEl.style.display = \"\";\n }\n removeGhost() {\n if (this.ghostEl && this.ghostEl.parentNode) {\n this.ghostEl.parentNode.removeChild(this.ghostEl);\n this.ghostEl = null;\n }\n }\n // ── Preview rectangle ─────────────────────────────────────────\n showPreview(rect, position) {\n const c = THEME_COLORS[this.theme];\n if (!this.previewEl) {\n const el = document.createElement(\"div\");\n Object.assign(el.style, {\n position: \"fixed\",\n zIndex: \"10000\",\n pointerEvents: \"none\",\n backgroundColor: c.previewBg,\n border: `1px solid ${c.previewBorder}`,\n borderRadius: \"2px\",\n transition: \"left 0.08s, top 0.08s, width 0.08s, height 0.08s\"\n });\n document.body.appendChild(el);\n this.previewEl = el;\n }\n let l = rect.left, t = rect.top, w = rect.width, h = rect.height;\n if (position === \"left\") {\n w = rect.width / 2;\n }\n if (position === \"right\") {\n l = rect.left + rect.width / 2;\n w = rect.width / 2;\n }\n if (position === \"top\") {\n h = rect.height / 2;\n }\n if (position === \"bottom\") {\n t = rect.top + rect.height / 2;\n h = rect.height / 2;\n }\n Object.assign(this.previewEl.style, {\n left: `${l}px`,\n top: `${t}px`,\n width: `${w}px`,\n height: `${h}px`,\n opacity: \"1\"\n });\n }\n hidePreview() {\n if (this.previewEl)\n this.previewEl.style.opacity = \"0\";\n }\n removePreview() {\n if (this.previewEl && this.previewEl.parentNode) {\n this.previewEl.parentNode.removeChild(this.previewEl);\n this.previewEl = null;\n }\n }\n // ── Single-target indicators (legacy) ─────────────────────────\n showIndicators(targetRect, activePos) {\n if (!this.indicatorContainer)\n this.createIndicatorDOM();\n const cx = targetRect.left + targetRect.width / 2;\n const cy = targetRect.top + targetRect.height / 2;\n if (this.indicatorContainer) {\n this.indicatorContainer.style.left = `${cx}px`;\n this.indicatorContainer.style.top = `${cy}px`;\n this.indicatorContainer.style.opacity = \"1\";\n }\n const c = THEME_COLORS[this.theme];\n if (this.indicatorContainer) {\n const indicators = this.indicatorContainer.querySelectorAll(\"[data-pos]\");\n indicators.forEach((el) => {\n const pos = el.getAttribute(\"data-pos\");\n const isActive = pos === activePos;\n const htmlEl = el;\n htmlEl.style.backgroundColor = isActive ? c.indicatorActiveBg : \"transparent\";\n htmlEl.style.borderColor = isActive ? c.indicatorActiveBorder : c.indicatorBorder;\n const svg2 = el.querySelector(\"svg\");\n if (svg2) {\n const color = isActive ? c.indicatorActiveBorder : c.text;\n svg2.querySelectorAll(\"path,polyline,rect,line\").forEach((s) => {\n if (s.getAttribute(\"stroke\"))\n s.setAttribute(\"stroke\", color);\n if (s.getAttribute(\"fill\") && s.getAttribute(\"fill\") !== \"none\")\n s.setAttribute(\"fill\", color);\n });\n }\n });\n }\n }\n hideIndicators() {\n if (this.indicatorContainer)\n this.indicatorContainer.style.opacity = \"0\";\n }\n removeIndicators() {\n if (this.indicatorContainer && this.indicatorContainer.parentNode) {\n this.indicatorContainer.parentNode.removeChild(this.indicatorContainer);\n this.indicatorContainer = null;\n }\n }\n getIndicatorUnderCursor(cx, cy) {\n if (!this.indicatorContainer)\n return null;\n const indicators = this.indicatorContainer.querySelectorAll(\"[data-pos]\");\n for (const el of indicators) {\n const rect = el.getBoundingClientRect();\n if (cx >= rect.left && cx <= rect.right && cy >= rect.top && cy <= rect.bottom) {\n return el.getAttribute(\"data-pos\");\n }\n }\n return null;\n }\n createIndicatorDOM() {\n const S2 = 28;\n const G = 4;\n const cont = document.createElement(\"div\");\n Object.assign(cont.style, {\n position: \"fixed\",\n zIndex: \"10002\",\n pointerEvents: \"none\",\n transform: \"translate(-50%, -50%)\",\n opacity: \"0\",\n transition: \"opacity 0.12s ease\"\n });\n const c = THEME_COLORS[this.theme];\n const caretSVG = (rotation) => `<svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" style=\"transform:rotate(${rotation}deg)\">\n <polyline points=\"6,18 12,12 18,18\" stroke=\"${c.text}\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" fill=\"none\"/>\n </svg>`;\n const centerSVG = `<svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\">\n <rect x=\"5\" y=\"5\" width=\"14\" height=\"14\" rx=\"1.5\" stroke=\"${c.text}\" stroke-width=\"2\" fill=\"none\"/>\n </svg>`;\n const mkIndicator = (pos, left, top, svg2) => {\n const el = document.createElement(\"div\");\n el.setAttribute(\"data-pos\", pos);\n Object.assign(el.style, {\n position: \"absolute\",\n width: `${S2}px`,\n height: `${S2}px`,\n left: `${left}px`,\n top: `${top}px`,\n backgroundColor: c.indicatorBg,\n border: `1.5px solid ${c.indicatorBorder}`,\n borderRadius: \"5px\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n transition: \"background-color 0.12s, border-color 0.12s, box-shadow 0.12s\",\n boxShadow: \"0 1px 4px rgba(0,0,0,0.12)\"\n });\n el.innerHTML = svg2;\n return el;\n };\n const half = S2 / 2;\n cont.appendChild(mkIndicator(\"top\", -half, -S2 - half - G, caretSVG(0)));\n cont.appendChild(mkIndicator(\"left\", -S2 - half - G, -half, caretSVG(-90)));\n cont.appendChild(mkIndicator(\"center\", -half, -half, centerSVG));\n cont.appendChild(mkIndicator(\"right\", half + G, -half, caretSVG(90)));\n cont.appendChild(mkIndicator(\"bottom\", -half, half + G, caretSVG(180)));\n document.body.appendChild(cont);\n this.indicatorContainer = cont;\n }\n // ── Per-pane indicators ───────────────────────────────────────\n /** Create indicators for all dock target panes. Caches bounding rects at creation time. */\n createAllPaneIndicators(container, sourceId) {\n this.removeAllPaneIndicators();\n const targets = container.querySelectorAll(\"[data-dock-target]\");\n const c = THEME_COLORS[this.theme];\n const S2 = 28;\n const G = 4;\n const caretSVG = (rotation) => `<svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" style=\"transform:rotate(${rotation}deg)\">\n <polyline points=\"6,18 12,12 18,18\" stroke=\"${c.text}\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" fill=\"none\"/>\n </svg>`;\n const centerSVG = `<svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\">\n <rect x=\"5\" y=\"5\" width=\"14\" height=\"14\" rx=\"1.5\" stroke=\"${c.text}\" stroke-width=\"2\" fill=\"none\"/>\n </svg>`;\n for (const target of targets) {\n const targetId = target.getAttribute(\"data-dock-target\");\n if (!targetId || targetId === sourceId)\n continue;\n const rect = target.getBoundingClientRect();\n if (rect.width < 80 || rect.height < 80)\n continue;\n const cx = rect.left + rect.width / 2;\n const cy = rect.top + rect.height / 2;\n const cont = document.createElement(\"div\");\n cont.setAttribute(\"data-indicator-target\", targetId);\n cont.style.cssText = `position:fixed;left:${cx}px;top:${cy}px;z-index:10002;pointer-events:none;transform:translate(-50%,-50%);transition:opacity 0.12s;`;\n const half = S2 / 2;\n const mkInd = (pos, left, top, svg2) => {\n const el = document.createElement(\"div\");\n el.setAttribute(\"data-pos\", pos);\n el.setAttribute(\"data-target-id\", targetId);\n el.style.cssText = `position:absolute;width:${S2}px;height:${S2}px;left:${left}px;top:${top}px;background:${c.indicatorBg};border:1.5px solid ${c.indicatorBorder};border-radius:5px;display:flex;align-items:center;justify-content:center;transition:background-color 0.12s,border-color 0.12s,box-shadow 0.12s;pointer-events:auto;box-shadow:0 1px 4px rgba(0,0,0,0.12);`;\n el.innerHTML = svg2;\n cont.appendChild(el);\n };\n mkInd(\"top\", -half, -S2 - half - G, caretSVG(0));\n mkInd(\"left\", -S2 - half - G, -half, caretSVG(-90));\n mkInd(\"center\", -half, -half, centerSVG);\n mkInd(\"right\", half + G, -half, caretSVG(90));\n mkInd(\"bottom\", -half, half + G, caretSVG(180));\n document.body.appendChild(cont);\n this.paneIndicators.set(targetId, { container: cont, rect });\n }\n }\n removeAllPaneIndicators() {\n for (const [, entry] of this.paneIndicators) {\n if (entry.container.parentNode)\n entry.container.parentNode.removeChild(entry.container);\n }\n this.paneIndicators.clear();\n }\n /** Hit test using cached rects for indicator sub-elements. */\n getPaneIndicatorUnderCursor(cx, cy) {\n for (const [targetId, entry] of this.paneIndicators) {\n const indicators = entry.container.querySelectorAll(\"[data-pos]\");\n for (const el of indicators) {\n const rect = el.getBoundingClientRect();\n if (cx >= rect.left && cx <= rect.right && cy >= rect.top && cy <= rect.bottom) {\n return { targetId, position: el.getAttribute(\"data-pos\") };\n }\n }\n }\n return null;\n }\n updateAllPaneIndicatorActive(activeTargetId, activePos) {\n const c = THEME_COLORS[this.theme];\n for (const [targetId, entry] of this.paneIndicators) {\n const indicators = entry.container.querySelectorAll(\"[data-pos]\");\n indicators.forEach((el) => {\n const pos = el.getAttribute(\"data-pos\");\n const isActive = targetId === activeTargetId && pos === activePos;\n const htmlEl = el;\n htmlEl.style.backgroundColor = isActive ? c.indicatorActiveBg : \"transparent\";\n htmlEl.style.borderColor = isActive ? c.indicatorActiveBorder : c.indicatorBorder;\n const svg2 = el.querySelector(\"svg\");\n if (svg2) {\n const color = isActive ? c.indicatorActiveBorder : c.text;\n svg2.querySelectorAll(\"path,polyline,rect,line\").forEach((s) => {\n if (s.getAttribute(\"stroke\"))\n s.setAttribute(\"stroke\", color);\n if (s.getAttribute(\"fill\") && s.getAttribute(\"fill\") !== \"none\")\n s.setAttribute(\"fill\", color);\n });\n }\n });\n }\n }\n // ── Edge indicators ───────────────────────────────────────────\n createEdgeIndicators(container) {\n this.removeEdgeIndicators();\n const containerRect = container.getBoundingClientRect();\n const c = THEME_COLORS[this.theme];\n const SIZE = 24;\n const positions = [\n { pos: \"top\", x: containerRect.left + containerRect.width / 2 - SIZE / 2, y: containerRect.top + 8, rotation: 0 },\n { pos: \"bottom\", x: containerRect.left + containerRect.width / 2 - SIZE / 2, y: containerRect.bottom - SIZE - 8, rotation: 180 },\n { pos: \"left\", x: containerRect.left + 8, y: containerRect.top + containerRect.height / 2 - SIZE / 2, rotation: -90 },\n { pos: \"right\", x: containerRect.right - SIZE - 8, y: containerRect.top + containerRect.height / 2 - SIZE / 2, rotation: 90 }\n ];\n for (const { pos, x, y, rotation } of positions) {\n const el = document.createElement(\"div\");\n el.setAttribute(\"data-edge-pos\", pos);\n el.style.cssText = `\n position:fixed; left:${x}px; top:${y}px; z-index:10003;\n width:${SIZE}px; height:${SIZE}px;\n display:flex; align-items:center; justify-content:center;\n background:${c.indicatorBg}; border:1.5px solid ${c.indicatorBorder};\n border-radius:5px; pointer-events:auto; cursor:pointer;\n box-shadow: 0 2px 6px rgba(0,0,0,0.15);\n transition: background-color 0.12s, border-color 0.12s, transform 0.12s, box-shadow 0.12s;\n `;\n el.innerHTML = `<svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" style=\"transform:rotate(${rotation}deg)\">\n <polyline points=\"6,18 12,12 18,18\" stroke=\"${c.text}\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" fill=\"none\"/>\n </svg>`;\n document.body.appendChild(el);\n this.edgeIndicators.push(el);\n }\n }\n removeEdgeIndicators() {\n for (const el of this.edgeIndicators) {\n if (el.parentNode)\n el.parentNode.removeChild(el);\n }\n this.edgeIndicators = [];\n }\n getEdgeIndicatorUnderCursor(cx, cy) {\n for (const el of this.edgeIndicators) {\n const rect = el.getBoundingClientRect();\n if (cx >= rect.left && cx <= rect.right && cy >= rect.top && cy <= rect.bottom) {\n return el.getAttribute(\"data-edge-pos\");\n }\n }\n return null;\n }\n updateEdgeIndicatorActive(activePos) {\n const c = THEME_COLORS[this.theme];\n for (const el of this.edgeIndicators) {\n const pos = el.getAttribute(\"data-edge-pos\");\n const isActive = pos === activePos;\n el.style.backgroundColor = isActive ? c.indicatorActiveBg : c.indicatorBg;\n el.style.borderColor = isActive ? c.indicatorActiveBorder : c.indicatorBorder;\n el.style.transform = isActive ? \"scale(1.15)\" : \"scale(1)\";\n const svg2 = el.querySelector(\"svg\");\n if (svg2) {\n const color = isActive ? c.indicatorActiveBorder : c.text;\n svg2.querySelectorAll(\"polyline\").forEach((s) => {\n s.setAttribute(\"stroke\", color);\n });\n }\n }\n }\n // ── Cleanup all ───────────────────────────────────────────────\n /** Hide all dock indicators without destroying them (for tab reorder sub-mode) */\n hideDockIndicators() {\n for (const [, entry] of this.paneIndicators) {\n entry.container.style.display = \"none\";\n }\n for (const el of this.edgeIndicators) {\n el.style.display = \"none\";\n }\n }\n /** Show all dock indicators (when exiting tab reorder sub-mode) */\n showDockIndicators() {\n for (const [, entry] of this.paneIndicators) {\n entry.container.style.display = \"\";\n }\n for (const el of this.edgeIndicators) {\n el.style.display = \"\";\n }\n }\n removeAll() {\n this.removeGhost();\n this.removePreview();\n this.removeIndicators();\n this.removeAllPaneIndicators();\n this.removeEdgeIndicators();\n }\n};\n\n// src/dom/TabReorderManager.ts\nvar TabReorderManager = class {\n constructor() {\n // Tab reorder state\n this.sourceTabEl = null;\n this.tabStripEl = null;\n this.tabGroupId = null;\n // Cached tabs array for reorder (avoid re-querying DOM on every mousemove)\n this.cachedTabs = null;\n }\n /**\n * Cache the tabs array from the tab strip and add reorder CSS classes.\n * Call when reorder starts.\n */\n cacheTabsArray() {\n if (this.tabStripEl) {\n this.cachedTabs = Array.from(this.tabStripEl.querySelectorAll(\"[data-tab-id]\"));\n }\n }\n /**\n * Add reorder CSS classes to all tabs in the strip.\n * Call once when reorder starts.\n */\n addReorderClasses() {\n if (!this.tabStripEl || !this.sourceTabEl)\n return;\n const tabs = this.tabStripEl.querySelectorAll(\"[data-tab-id]\");\n for (const tab of tabs) {\n if (tab !== this.sourceTabEl) {\n tab.classList.add(\"dock-tab-reordering\");\n }\n }\n this.sourceTabEl.classList.add(\"dock-tab-drag-source\");\n }\n /**\n * Remove reorder CSS classes and clear transforms from all tabs.\n * Call when reorder ends.\n */\n removeReorderClasses() {\n if (!this.tabStripEl)\n return;\n const tabs = this.tabStripEl.querySelectorAll(\"[data-tab-id]\");\n for (const tab of tabs) {\n tab.classList.remove(\"dock-tab-reordering\", \"dock-tab-drag-source\");\n tab.style.transform = \"\";\n }\n }\n /**\n * Clear the cached tabs array. Call when reorder ends.\n */\n clearCache() {\n this.cachedTabs = null;\n }\n /**\n * Handle horizontal tab reordering during drag within the tab strip.\n * Swaps tabs visually in the DOM when the cursor crosses a sibling tab's midpoint.\n * Uses FLIP animation for smooth position transitions.\n */\n handleReorderMove(cursorX) {\n if (!this.sourceTabEl || !this.tabStripEl)\n return;\n const tabs = this.cachedTabs || Array.from(this.tabStripEl.querySelectorAll(\"[data-tab-id]\"));\n const sourceIdx = tabs.indexOf(this.sourceTabEl);\n if (sourceIdx === -1)\n return;\n for (let i = 0; i < tabs.length; i++) {\n if (i === sourceIdx)\n continue;\n const tab = tabs[i];\n const rect = tab.getBoundingClientRect();\n const midX = rect.left + rect.width / 2;\n let shouldSwap = false;\n if (i > sourceIdx && cursorX > midX)\n shouldSwap = true;\n if (i < sourceIdx && cursorX < midX)\n shouldSwap = true;\n if (shouldSwap) {\n const parent = tab.parentNode;\n if (!parent)\n return;\n const firstRects = /* @__PURE__ */ new Map();\n for (const t of tabs) {\n firstRects.set(t, t.getBoundingClientRect().left);\n }\n if (i > sourceIdx) {\n parent.insertBefore(this.sourceTabEl, tab.nextSibling);\n } else {\n parent.insertBefore(this.sourceTabEl, tab);\n }\n for (const t of tabs) {\n if (t === this.sourceTabEl)\n continue;\n const firstLeft = firstRects.get(t);\n if (firstLeft === void 0)\n continue;\n const lastLeft = t.getBoundingClientRect().left;\n const delta = firstLeft - lastLeft;\n if (Math.abs(delta) > 0.5) {\n t.style.transition = \"none\";\n t.style.transform = `translateX(${delta}px)`;\n }\n }\n this.tabStripEl.offsetHeight;\n for (const t of tabs) {\n if (t === this.sourceTabEl)\n continue;\n if (t.style.transform) {\n t.style.transition = \"\";\n t.style.transform = \"\";\n }\n }\n this.cacheTabsArray();\n return;\n }\n }\n }\n /**\n * End the tab reorder operation.\n * @param commit - If true, returns the new index for dispatch. If false, DOM swaps are reverted by next render.\n * @param sourceId - The panel ID being reordered.\n * @param onReorderTab - Callback to dispatch the reorder action.\n */\n endReorder(commit, sourceId, onReorderTab) {\n this.removeReorderClasses();\n if (this.sourceTabEl) {\n this.sourceTabEl.style.opacity = \"\";\n }\n if (commit && this.sourceTabEl && this.tabStripEl && this.tabGroupId) {\n const tabs = Array.from(this.tabStripEl.querySelectorAll(\"[data-tab-id]\"));\n const newIndex = tabs.indexOf(this.sourceTabEl);\n if (newIndex !== -1 && onReorderTab) {\n onReorderTab(this.tabGroupId, sourceId, newIndex);\n }\n }\n this.clearCache();\n }\n /**\n * Reset all state. Call on cleanup.\n */\n reset() {\n this.sourceTabEl = null;\n this.tabStripEl = null;\n this.tabGroupId = null;\n this.clearCache();\n }\n};\n\n// src/dom/DockDragManager.ts\nvar DockDragManager = class {\n constructor(options) {\n // Drag state\n this.isPending = false;\n this.isDragging = false;\n this.isReordering = false;\n this._skipGhost = false;\n this.sourceId = \"\";\n this.sourceTitle = \"\";\n this.startX = 0;\n this.startY = 0;\n // Source pane dimensions for ghost sizing\n this.sourcePaneRect = null;\n // Current target\n this.currentTargetId = null;\n this.currentPosition = null;\n // rAF throttle for mousemove hitTest\n this.moveRafId = null;\n // Touch drag state\n this.longPressTimer = null;\n this.touchStartX = 0;\n this.touchStartY = 0;\n // ── Touch event handlers ────────────────────────────────────────\n this.onContainerTouchStart = (e) => {\n if (e.touches.length !== 1)\n return;\n const touch = e.touches[0];\n const target = touch.target;\n if (target.tagName === \"BUTTON\" || target.closest(\"button\"))\n return;\n const draggable = target.closest(\"[data-tab-id]\");\n if (!draggable)\n return;\n const panelId = draggable.getAttribute(\"data-tab-id\");\n if (!panelId)\n return;\n if (this.options.getPanelConfig) {\n const config = this.options.getPanelConfig(panelId);\n if (config?.disabled)\n return;\n }\n this.touchStartX = touch.clientX;\n this.touchStartY = touch.clientY;\n const title = draggable.getAttribute(\"data-drag-title\") || draggable.textContent?.trim() || panelId;\n const dockTarget = draggable.closest(\"[data-dock-target]\");\n this.sourcePaneRect = dockTarget?.getBoundingClientRect() || null;\n this.longPressTimer = setTimeout(() => {\n this.longPressTimer = null;\n e.preventDefault();\n this.beginTracking(panelId, title, this.touchStartX, this.touchStartY);\n const onTouchMove = (ev) => {\n if (ev.touches.length !== 1)\n return;\n ev.preventDefault();\n const t = ev.touches[0];\n this.onMouseMove({ clientX: t.clientX, clientY: t.clientY });\n };\n const onTouchEnd = (ev) => {\n const t = ev.changedTouches[0];\n this.onMouseUp({ clientX: t.clientX, clientY: t.clientY, button: 0 });\n document.removeEventListener(\"touchmove\", onTouchMove);\n document.removeEventListener(\"touchend\", onTouchEnd);\n };\n document.addEventListener(\"touchmove\", onTouchMove, { passive: false });\n document.addEventListener(\"touchend\", onTouchEnd);\n }, 300);\n const onEarlyMove = (ev) => {\n if (ev.touches.length !== 1)\n return;\n const t = ev.touches[0];\n const dx = t.clientX - this.touchStartX;\n const dy = t.clientY - this.touchStartY;\n if (Math.sqrt(dx * dx + dy * dy) > 10) {\n if (this.longPressTimer) {\n clearTimeout(this.longPressTimer);\n this.longPressTimer = null;\n }\n document.removeEventListener(\"touchmove\", onEarlyMove);\n }\n };\n const onEarlyEnd = () => {\n if (this.longPressTimer) {\n clearTimeout(this.longPressTimer);\n this.longPressTimer = null;\n }\n document.removeEventListener(\"touchmove\", onEarlyMove);\n document.removeEventListener(\"touchend\", onEarlyEnd);\n };\n document.addEventListener(\"touchmove\", onEarlyMove, { passive: true });\n document.addEventListener(\"touchend\", onEarlyEnd);\n };\n // ── Event delegation ───────────────────────────────────────────\n /**\n * Container-level mousedown handler. Detects clicks on [data-tab-id]\n * elements and starts drag tracking.\n */\n this.onContainerMouseDown = (e) => {\n if (e.button !== 0)\n return;\n const target = e.target;\n if (target.tagName === \"BUTTON\" || target.closest(\"button\"))\n return;\n const draggable = target.closest(\"[data-tab-id]\");\n if (!draggable)\n return;\n const panelId = draggable.getAttribute(\"data-tab-id\");\n if (!panelId)\n return;\n if (this.options.getPanelConfig) {\n const config = this.options.getPanelConfig(panelId);\n if (config?.disabled) {\n this.options.onSelect?.(panelId);\n return;\n }\n }\n const title = draggable.getAttribute(\"data-drag-title\") || draggable.textContent?.trim() || panelId;\n const dockTarget = draggable.closest(\"[data-dock-target]\");\n this.sourcePaneRect = dockTarget?.getBoundingClientRect() || null;\n const tabContainer = draggable.closest('[role=\"tablist\"]');\n if (tabContainer && tabContainer.querySelectorAll(\"[data-tab-id]\").length > 1) {\n this.reorder.sourceTabEl = draggable;\n this.reorder.tabStripEl = tabContainer;\n this.reorder.tabGroupId = dockTarget?.getAttribute(\"data-dock-target\") || null;\n } else {\n this.reorder.reset();\n }\n this.beginTracking(panelId, title, e.clientX, e.clientY);\n };\n // ── Mouse handlers ────────────────────────────────────────────\n this.onMouseMove = (e) => {\n const dx = e.clientX - this.startX;\n const dy = e.clientY - this.startY;\n const dist = Math.sqrt(dx * dx + dy * dy);\n if (this.isPending && !this.isDragging) {\n if (dist < 5)\n return;\n this.activateDrag(e);\n if (this.reorder.sourceTabEl && this.reorder.tabStripEl) {\n const stripRect = this.reorder.tabStripEl.getBoundingClientRect();\n const verticalMargin = 30;\n if (e.clientY >= stripRect.top - verticalMargin && e.clientY <= stripRect.bottom + verticalMargin) {\n this.isReordering = true;\n this.reorder.cacheTabsArray();\n this.reorder.addReorderClasses();\n this.indicators.hideGhost();\n this.indicators.hideDockIndicators();\n if (this.sourcePaneElement)\n this.sourcePaneElement.style.opacity = \"\";\n return;\n }\n }\n }\n if (!this.isDragging)\n return;\n if (this.isReordering && this.reorder.sourceTabEl && this.reorder.tabStripEl) {\n const stripRect = this.reorder.tabStripEl.getBoundingClientRect();\n const verticalMargin = 30;\n if (e.clientY < stripRect.top - verticalMargin || e.clientY > stripRect.bottom + verticalMargin) {\n this.isReordering = false;\n this.reorder.endReorder(false, this.sourceId);\n this.indicators.showGhost();\n this.indicators.showDockIndicators();\n if (this.sourcePaneElement)\n this.sourcePaneElement.style.opacity = \"0.5\";\n } else {\n this.reorder.handleReorderMove(e.clientX);\n return;\n }\n }\n const cx = e.clientX;\n const cy = e.clientY;\n if (this.moveRafId === null) {\n this.moveRafId = requestAnimationFrame(() => {\n this.moveRafId = null;\n this.indicators.moveGhost(cx, cy, this.sourcePaneRect);\n const edgePos = this.indicators.getEdgeIndicatorUnderCursor(cx, cy);\n if (edgePos) {\n const containerRect = this.container.getBoundingClientRect();\n this.currentTargetId = \"__root__\";\n this.currentPosition = edgePos;\n this.indicators.hideIndicators();\n this.indicators.showPreview(containerRect, edgePos);\n this.indicators.updateEdgeIndicatorActive(edgePos);\n return;\n }\n this.indicators.updateEdgeIndicatorActive(null);\n const paneHit = this.indicators.getPaneIndicatorUnderCursor(cx, cy);\n if (paneHit) {\n this.currentTargetId = paneHit.targetId;\n this.currentPosition = paneHit.position;\n this.indicators.updateAllPaneIndicatorActive(paneHit.targetId, paneHit.position);\n const el = this.container.querySelector(`[data-dock-target=\"${paneHit.targetId}\"]`);\n if (el) {\n this.indicators.showPreview(el.getBoundingClientRect(), paneHit.position);\n }\n } else {\n this.currentTargetId = null;\n this.currentPosition = null;\n this.indicators.updateAllPaneIndicatorActive(null, null);\n this.indicators.hidePreview();\n }\n });\n }\n };\n this.onMouseUp = (e) => {\n this.removeListeners();\n if (this.isDragging && this.sourceId) {\n if (this.moveRafId !== null) {\n cancelAnimationFrame(this.moveRafId);\n this.moveRafId = null;\n }\n const edgePos = this.indicators.getEdgeIndicatorUnderCursor(e.clientX, e.clientY);\n if (edgePos) {\n this.currentTargetId = \"__root__\";\n this.currentPosition = edgePos;\n } else {\n const paneHit = this.indicators.getPaneIndicatorUnderCursor(e.clientX, e.clientY);\n if (paneHit) {\n this.currentTargetId = paneHit.targetId;\n this.currentPosition = paneHit.position;\n }\n }\n if (this.isReordering && !this.currentTargetId) {\n this.reorder.endReorder(true, this.sourceId, this.options.onReorderTab);\n this.cleanup();\n return;\n }\n if (this.isReordering && this.currentTargetId) {\n this.isReordering = false;\n this.reorder.endReorder(false, this.sourceId);\n }\n if (this.currentTargetId && this.currentPosition) {\n if (this.options.onWillDrop) {\n const event = createPreventableEvent(\"willDrop\", this.sourceId);\n this.options.onWillDrop(event, this.sourceId, this.currentTargetId, this.currentPosition);\n if (event.defaultPrevented) {\n this.cleanup();\n return;\n }\n }\n this.options.onDrop(this.sourceId, this.currentTargetId, this.currentPosition);\n } else if (!this._skipGhost) {\n this.options.onFloat(this.sourceId, e.clientX - 50, e.clientY - 20);\n }\n } else if (this.isPending && this.sourceId) {\n this.options.onSelect?.(this.sourceId);\n }\n this.cleanup();\n };\n this.onKeyDown = (e) => {\n if (e.key === \"Escape\") {\n this.cancelDrag();\n }\n };\n // ── Drag lifecycle ────────────────────────────────────────────\n this.sourcePaneElement = null;\n this.container = options.containerElement;\n this.options = options;\n this.indicators = new DockIndicatorRenderer(options.theme);\n this.reorder = new TabReorderManager();\n this.container.addEventListener(\"mousedown\", this.onContainerMouseDown);\n this.container.addEventListener(\"touchstart\", this.onContainerTouchStart, { passive: false });\n }\n // ── Public API ─────────────────────────────────────────────────\n /**\n * Manually start a drag for a given source. Normally you don't need this —\n * the core auto-detects mousedown on [data-tab-id] elements via event\n * delegation. Use this only for custom drag sources not in the DOM tree.\n *\n * @param skipGhost - If true, don't create a ghost element (useful for floating windows\n * that are already visible — the window itself serves as the drag preview).\n */\n startDrag(sourceId, sourceTitle, event, skipGhost = false) {\n this._skipGhost = skipGhost;\n this.beginTracking(sourceId, sourceTitle, event.clientX, event.clientY);\n }\n /** Update theme at runtime */\n setTheme(theme) {\n this.options.theme = theme;\n this.indicators.setTheme(theme);\n }\n /** Update the onSelect callback */\n setOnSelect(onSelect) {\n this.options.onSelect = onSelect;\n }\n /** Update the onWillDrop callback */\n setOnWillDrop(onWillDrop) {\n this.options.onWillDrop = onWillDrop;\n }\n /** Clean up all listeners and DOM elements */\n dispose() {\n this.container.removeEventListener(\"mousedown\", this.onContainerMouseDown);\n this.container.removeEventListener(\"touchstart\", this.onContainerTouchStart);\n if (this.longPressTimer) {\n clearTimeout(this.longPressTimer);\n this.longPressTimer = null;\n }\n this.cancelDrag();\n }\n // ── Drag tracking ──────────────────────────────────────────────\n beginTracking(sourceId, sourceTitle, x, y) {\n this.sourceId = sourceId;\n this.sourceTitle = sourceTitle;\n this.startX = x;\n this.startY = y;\n this.isPending = true;\n this.isDragging = false;\n document.addEventListener(\"mousemove\", this.onMouseMove);\n document.addEventListener(\"mouseup\", this.onMouseUp);\n document.addEventListener(\"keydown\", this.onKeyDown);\n }\n activateDrag(e) {\n this.isPending = false;\n this.isDragging = true;\n document.body.style.cursor = \"grabbing\";\n document.body.style.userSelect = \"none\";\n const sourcePaneEl = this.container.querySelector(`[data-dock-target] [data-tab-id=\"${this.sourceId}\"]`);\n const dockTarget = sourcePaneEl?.closest(\"[data-dock-target]\");\n if (dockTarget) {\n this.sourcePaneElement = dockTarget;\n dockTarget.style.opacity = \"0.5\";\n }\n if (!this._skipGhost) {\n this.indicators.createGhost(e.clientX, e.clientY, this.sourceTitle, this.sourcePaneRect);\n }\n this.indicators.createAllPaneIndicators(this.container, this.sourceId);\n if (this.options.allowRootDock !== false) {\n this.indicators.createEdgeIndicators(this.container);\n }\n }\n cancelDrag() {\n this.removeListeners();\n this.cleanup();\n }\n removeListeners() {\n if (this.moveRafId !== null) {\n cancelAnimationFrame(this.moveRafId);\n this.moveRafId = null;\n }\n document.removeEventListener(\"mousemove\", this.onMouseMove);\n document.removeEventListener(\"mouseup\", this.onMouseUp);\n document.removeEventListener(\"keydown\", this.onKeyDown);\n }\n cleanup() {\n if (this.moveRafId !== null) {\n cancelAnimationFrame(this.moveRafId);\n this.moveRafId = null;\n }\n this.isPending = false;\n this.isDragging = false;\n this.isReordering = false;\n this._skipGhost = false;\n this.currentTargetId = null;\n this.currentPosition = null;\n this.sourcePaneRect = null;\n this.reorder.reset();\n document.body.style.cursor = \"\";\n document.body.style.userSelect = \"\";\n this.indicators.removeAll();\n if (this.sourcePaneElement) {\n this.sourcePaneElement.style.opacity = \"1\";\n this.sourcePaneElement = null;\n }\n }\n // ── Hit testing ───────────────────────────────────────────────\n hitTest(cx, cy) {\n const elements = document.elementsFromPoint(cx, cy);\n for (const el of elements) {\n const htmlEl = el;\n const attr = htmlEl.getAttribute?.(\"data-dock-target\");\n if (!attr)\n continue;\n if (this.options.getPanelConfig && this.sourceId) {\n const sourceConfig = this.options.getPanelConfig(this.sourceId);\n if (sourceConfig?.documentOnly) {\n if (!this.isDocumentHost(htmlEl)) {\n continue;\n }\n }\n }\n return { targetId: attr, targetRect: el.getBoundingClientRect() };\n }\n return { targetId: null, targetRect: null };\n }\n /** Check if a tab group element is a document host area */\n isDocumentHost(el) {\n if (el.getAttribute(\"data-document-host\") === \"true\")\n return true;\n if (this.options.getPanelConfig) {\n const tabEls = el.querySelectorAll(\"[data-tab-id]\");\n for (const tabEl of tabEls) {\n const pid = tabEl.getAttribute(\"data-tab-id\");\n if (pid) {\n const config = this.options.getPanelConfig(pid);\n if (config?.documentOnly)\n return true;\n }\n }\n const singlePanelId = el.getAttribute(\"data-panel-id\");\n if (singlePanelId) {\n const config = this.options.getPanelConfig(singlePanelId);\n if (config?.documentOnly)\n return true;\n }\n }\n return false;\n }\n /** Closest-edge zone detection with center dead zone */\n calcZone(cx, cy, rect) {\n const rx = (cx - rect.left) / rect.width;\n const ry = (cy - rect.top) / rect.height;\n const edgeThreshold = 0.25;\n if (rx < edgeThreshold)\n return \"left\";\n if (rx > 1 - edgeThreshold)\n return \"right\";\n if (ry < edgeThreshold)\n return \"top\";\n if (ry > 1 - edgeThreshold)\n return \"bottom\";\n return \"center\";\n }\n};\n\n// src/dom/FocusManager.ts\nvar FocusManager = class {\n constructor(options) {\n this.currentFocusedPanelId = null;\n this.onKeyDown = (e) => {\n const isMac = navigator.platform.toUpperCase().indexOf(\"MAC\") >= 0;\n const modKey = isMac ? e.metaKey : e.ctrlKey;\n if (e.ctrlKey && (e.key === \"Tab\" || e.key === \"PageDown\")) {\n e.preventDefault();\n this.options.onNavigate?.(e.shiftKey ? \"previous\" : \"next\");\n return;\n }\n if (e.ctrlKey && e.key === \"PageUp\") {\n e.preventDefault();\n this.options.onNavigate?.(\"previous\");\n return;\n }\n if (modKey && e.key === \"w\") {\n e.preventDefault();\n this.options.onCloseActivePanel?.();\n return;\n }\n if (modKey && e.shiftKey && (e.key === \"ArrowLeft\" || e.key === \"ArrowRight\")) {\n e.preventDefault();\n this.options.onNavigateTabGroup?.(e.key === \"ArrowLeft\" ? \"previous\" : \"next\");\n return;\n }\n if ((e.key === \"ArrowLeft\" || e.key === \"ArrowRight\") && !e.ctrlKey && !e.metaKey && !e.shiftKey && !e.altKey) {\n const target = e.target;\n const tabEl = target.closest('[role=\"tab\"]');\n if (tabEl) {\n const tabList = tabEl.closest('[role=\"tablist\"]');\n if (tabList) {\n const tabs = Array.from(tabList.querySelectorAll('[role=\"tab\"]'));\n const currentIndex = tabs.indexOf(tabEl);\n if (currentIndex >= 0) {\n e.preventDefault();\n let nextIndex;\n if (e.key === \"ArrowRight\") {\n nextIndex = currentIndex + 1 >= tabs.length ? 0 : currentIndex + 1;\n } else {\n nextIndex = currentIndex - 1 < 0 ? tabs.length - 1 : currentIndex - 1;\n }\n const nextTab = tabs[nextIndex];\n nextTab.focus();\n nextTab.click();\n }\n }\n }\n }\n };\n this.onFocusIn = (e) => {\n let el = e.target;\n while (el && el !== this.container) {\n const panelId = el.getAttribute(\"data-panel-id\");\n if (panelId) {\n if (this.currentFocusedPanelId !== panelId) {\n this.currentFocusedPanelId = panelId;\n this.options.onFocusChanged?.(panelId);\n }\n return;\n }\n el = el.parentElement;\n }\n };\n this.options = options;\n this.container = options.containerElement;\n this.attachListeners();\n }\n /** Get the currently focused panel ID */\n getFocusedPanelId() {\n return this.currentFocusedPanelId;\n }\n /** Programmatically set focus on a panel */\n setFocus(panelId) {\n if (this.currentFocusedPanelId === panelId)\n return;\n this.currentFocusedPanelId = panelId;\n this.options.onFocusChanged?.(panelId);\n const panelEl = this.container.querySelector(`[data-panel-id=\"${panelId}\"]`);\n if (panelEl) {\n panelEl.focus({ preventScroll: true });\n }\n }\n /** Clear focus */\n clearFocus() {\n if (this.currentFocusedPanelId === null)\n return;\n this.currentFocusedPanelId = null;\n this.options.onFocusChanged?.(null);\n }\n /** Update options (e.g., when callbacks change) */\n updateOptions(options) {\n Object.assign(this.options, options);\n }\n /** Clean up listeners */\n dispose() {\n this.container.removeEventListener(\"keydown\", this.onKeyDown);\n this.container.removeEventListener(\"focusin\", this.onFocusIn);\n }\n attachListeners() {\n this.container.addEventListener(\"keydown\", this.onKeyDown);\n this.container.addEventListener(\"focusin\", this.onFocusIn);\n }\n};\n\n// src/dom/KeyboardManager.ts\nfunction isTextInput(target) {\n if (!target || !target.tagName)\n return false;\n const el = target;\n const tag = el.tagName;\n if (tag === \"INPUT\" || tag === \"TEXTAREA\")\n return true;\n if (el.isContentEditable)\n return true;\n if (typeof el.getAttribute === \"function\" && el.getAttribute(\"contenteditable\") === \"true\") {\n return true;\n }\n return false;\n}\nfunction isModKey(e) {\n const isMac = typeof navigator !== \"undefined\" && navigator.platform.toUpperCase().indexOf(\"MAC\") >= 0;\n return isMac ? e.metaKey : e.ctrlKey;\n}\nfunction adjacentTabInGroup(layout, activePanelId, direction) {\n const tabGroupId = findTabGroupForPanel(layout, activePanelId);\n if (!tabGroupId)\n return null;\n const group = findTabGroupById(layout, tabGroupId);\n if (!group || group.panels.length < 2)\n return null;\n const idx = group.panels.indexOf(activePanelId);\n if (idx === -1)\n return null;\n let nextIdx;\n if (direction === \"next\") {\n nextIdx = (idx + 1) % group.panels.length;\n } else {\n nextIdx = (idx - 1 + group.panels.length) % group.panels.length;\n }\n return { tabGroupId, panelId: group.panels[nextIdx] };\n}\nvar KeyboardManager = class {\n constructor(options) {\n // ── Handler ──────────────────────────────────────────────────────\n this.onKeyDown = (e) => {\n if (isTextInput(e.target))\n return;\n const mod = isModKey(e);\n const state = this.options.getState();\n if (mod && !e.shiftKey && !e.altKey && e.key === \"z\") {\n e.preventDefault();\n this.options.onUndo?.();\n return;\n }\n if (mod && e.shiftKey && !e.altKey && e.key === \"Z\") {\n e.preventDefault();\n this.options.onRedo?.();\n return;\n }\n if (mod && !e.shiftKey && !e.altKey && e.key === \"p\") {\n e.preventDefault();\n this.options.onPanelFinder?.();\n return;\n }\n if (mod && !e.shiftKey && !e.altKey && e.key === \"w\") {\n e.preventDefault();\n const panelId = state.activePaneId;\n if (panelId && state.panels[panelId]?.closable !== false && !state.panels[panelId]?.disabled) {\n this.options.dispatch({ type: \"CLOSE_PANEL\", payload: { panelId } });\n }\n return;\n }\n if (mod && !e.shiftKey && !e.altKey && e.key === \"F6\") {\n e.preventDefault();\n const result = adjacentTabInGroup(state.layout, state.activePaneId, \"next\");\n if (result) {\n this.options.dispatch({\n type: \"SET_ACTIVE_PANEL\",\n payload: { tabGroupId: result.tabGroupId, panelId: result.panelId }\n });\n this.options.dispatch({ type: \"SET_ACTIVE_PANE\", payload: { panelId: result.panelId } });\n }\n return;\n }\n if (mod && e.shiftKey && !e.altKey && e.key === \"F6\") {\n e.preventDefault();\n const result = adjacentTabInGroup(state.layout, state.activePaneId, \"previous\");\n if (result) {\n this.options.dispatch({\n type: \"SET_ACTIVE_PANEL\",\n payload: { tabGroupId: result.tabGroupId, panelId: result.panelId }\n });\n this.options.dispatch({ type: \"SET_ACTIVE_PANE\", payload: { panelId: result.panelId } });\n }\n return;\n }\n if (!mod && !e.shiftKey && e.altKey && e.key === \"F6\") {\n e.preventDefault();\n this.options.dispatch({ type: \"NAVIGATE\", payload: { direction: \"next\" } });\n return;\n }\n if (!mod && e.shiftKey && e.altKey && e.key === \"F6\") {\n e.preventDefault();\n this.options.dispatch({ type: \"NAVIGATE\", payload: { direction: \"previous\" } });\n return;\n }\n if (mod && e.shiftKey && !e.altKey) {\n const edgeMap = {\n ArrowLeft: \"left\",\n ArrowRight: \"right\",\n ArrowUp: \"top\",\n ArrowDown: \"bottom\"\n };\n const edge = edgeMap[e.key];\n if (edge && state.activePaneId && !state.panels[state.activePaneId]?.disabled) {\n e.preventDefault();\n this.options.dispatch({\n type: \"DOCK_TO_EDGE\",\n payload: { panelId: state.activePaneId, edge }\n });\n return;\n }\n }\n if (e.key === \"Escape\" && !mod && !e.shiftKey && !e.altKey) {\n if (state.maximizedPanelId) {\n e.preventDefault();\n this.options.dispatch({\n type: \"RESTORE_PANEL\",\n payload: { panelId: state.maximizedPanelId }\n });\n return;\n }\n const isFloating = state.floatingPanels.some(\n (fp) => fp.panelId === state.activePaneId\n );\n if (isFloating && state.activePaneId) {\n e.preventDefault();\n this.options.dispatch({\n type: \"DOCK_FLOATING\",\n payload: {\n panelId: state.activePaneId,\n targetTabGroupId: \"default\",\n position: \"center\"\n }\n });\n return;\n }\n }\n if (e.key === \"F11\" && !mod && !e.shiftKey && !e.altKey) {\n e.preventDefault();\n if (state.maximizedPanelId) {\n this.options.dispatch({\n type: \"RESTORE_PANEL\",\n payload: { panelId: state.maximizedPanelId }\n });\n } else if (state.activePaneId && !state.panels[state.activePaneId]?.disabled) {\n this.options.dispatch({\n type: \"MAXIMIZE_PANEL\",\n payload: { panelId: state.activePaneId }\n });\n }\n return;\n }\n if (e.ctrlKey && !e.altKey && e.key === \"Tab\") {\n e.preventDefault();\n if (this.paneNavigatorHandler) {\n this.paneNavigatorHandler(e.shiftKey ? \"previous\" : \"next\");\n }\n return;\n }\n if (!mod && e.altKey && !e.shiftKey && e.key === \"F7\") {\n e.preventDefault();\n if (this.paneNavigatorHandler) {\n this.paneNavigatorHandler(\"next\");\n }\n return;\n }\n };\n this.paneNavigatorHandler = null;\n this.options = options;\n this.container = options.containerElement;\n this.container.addEventListener(\"keydown\", this.onKeyDown);\n }\n /** Remove the keydown listener. */\n dispose() {\n this.container.removeEventListener(\"keydown\", this.onKeyDown);\n }\n /** Set a handler for Ctrl+Tab pane navigation events. */\n setPaneNavigatorHandler(handler) {\n this.paneNavigatorHandler = handler;\n }\n};\n\n// src/dom/StateHistoryManager.ts\nvar DEFAULT_MAX_HISTORY = 20;\nvar StateHistoryManager = class {\n constructor(maxHistory = DEFAULT_MAX_HISTORY) {\n this.undoStack = [];\n this.redoStack = [];\n this.maxHistory = maxHistory;\n }\n /**\n * Push a state onto the undo stack. Clears the redo stack.\n * Call this BEFORE applying a mutation so the previous state can be restored.\n */\n push(state) {\n this.undoStack.push(state);\n if (this.undoStack.length > this.maxHistory) {\n this.undoStack.shift();\n }\n this.redoStack = [];\n }\n /** Whether there are states to undo to. */\n get canUndo() {\n return this.undoStack.length > 0;\n }\n /** Whether there are states to redo to. */\n get canRedo() {\n return this.redoStack.length > 0;\n }\n /**\n * Undo: pop from undo stack, push current state to redo stack.\n * @param currentState - The current state before undoing (will be pushed to redo stack).\n * @returns The previous state to restore, or null if nothing to undo.\n */\n undo(currentState) {\n if (this.undoStack.length === 0)\n return null;\n this.redoStack.push(currentState);\n return this.undoStack.pop();\n }\n /**\n * Redo: pop from redo stack, push current state to undo stack.\n * @param currentState - The current state before redoing (will be pushed to undo stack).\n * @returns The next state to restore, or null if nothing to redo.\n */\n redo(currentState) {\n if (this.redoStack.length === 0)\n return null;\n this.undoStack.push(currentState);\n return this.redoStack.pop();\n }\n /** Clear all history. */\n clear() {\n this.undoStack = [];\n this.redoStack = [];\n }\n};\n\n// src/dom/PanelFinder.ts\nvar PanelFinder = class {\n constructor(options) {\n this.overlayEl = null;\n this.isOpen = false;\n this.options = options;\n }\n /** Toggle the panel finder modal. */\n toggle() {\n if (this.isOpen) {\n this.close();\n } else {\n this.open();\n }\n }\n /** Open the panel finder modal. */\n open() {\n if (this.isOpen)\n return;\n this.isOpen = true;\n const overlay = document.createElement(\"div\");\n overlay.className = \"dock-panel-finder-overlay\";\n overlay.style.cssText = \"position:absolute;inset:0;z-index:10020;display:flex;align-items:flex-start;justify-content:center;padding-top:60px;background:rgba(0,0,0,0.2);\";\n const modal = document.createElement(\"div\");\n modal.className = \"dock-panel-finder\";\n modal.style.cssText = \"width:340px;max-height:400px;background:hsl(var(--dock-surface));border:1px solid hsl(var(--dock-border));border-radius:6px;box-shadow:0 8px 32px rgba(0,0,0,0.2);display:flex;flex-direction:column;overflow:hidden;\";\n const input = document.createElement(\"input\");\n input.type = \"text\";\n input.placeholder = \"Search panels...\";\n input.style.cssText = \"padding:10px 12px;border:none;border-bottom:1px solid hsl(var(--dock-border));background:transparent;color:hsl(var(--dock-text));font-size:13px;outline:none;\";\n modal.appendChild(input);\n const list = document.createElement(\"div\");\n list.style.cssText = \"overflow-y:auto;max-height:320px;padding:4px 0;\";\n modal.appendChild(list);\n overlay.appendChild(modal);\n this.options.containerElement.appendChild(overlay);\n this.overlayEl = overlay;\n const renderList = (filter) => {\n list.innerHTML = \"\";\n const state = this.options.getState();\n const panelIds = Object.keys(state.panels);\n const lowerFilter = filter.toLowerCase();\n for (const pid of panelIds) {\n const panel = state.panels[pid];\n if (!panel)\n continue;\n if (lowerFilter && !panel.title.toLowerCase().includes(lowerFilter))\n continue;\n const item = document.createElement(\"div\");\n item.className = \"dock-panel-finder-item\";\n item.style.cssText = \"padding:6px 12px;cursor:pointer;font-size:12px;color:hsl(var(--dock-text));transition:background 0.1s;\";\n item.textContent = panel.title;\n item.setAttribute(\"data-panel-id\", pid);\n const isFloating = state.floatingPanels.some((fp) => fp.panelId === pid);\n const isUnpinned = state.unpinnedPanels.some((up) => up.panelId === pid);\n if (isFloating || isUnpinned) {\n const badge = document.createElement(\"span\");\n badge.style.cssText = \"margin-left:8px;font-size:10px;opacity:0.6;\";\n badge.textContent = isFloating ? \"(floating)\" : \"(unpinned)\";\n item.appendChild(badge);\n }\n item.addEventListener(\"mouseenter\", () => {\n item.style.background = \"hsl(var(--dock-hover))\";\n });\n item.addEventListener(\"mouseleave\", () => {\n item.style.background = \"\";\n });\n item.addEventListener(\"click\", () => {\n this.options.onActivatePanel(pid);\n this.close();\n });\n list.appendChild(item);\n }\n };\n renderList(\"\");\n input.addEventListener(\"input\", () => renderList(input.value));\n overlay.addEventListener(\"mousedown\", (e) => {\n if (e.target === overlay)\n this.close();\n });\n const onKeyDown = (e) => {\n if (e.key === \"Escape\") {\n this.close();\n }\n };\n overlay.addEventListener(\"keydown\", onKeyDown);\n requestAnimationFrame(() => input.focus());\n }\n /** Close the panel finder modal. */\n close() {\n if (!this.isOpen)\n return;\n this.isOpen = false;\n if (this.overlayEl) {\n this.overlayEl.remove();\n this.overlayEl = null;\n }\n }\n dispose() {\n this.close();\n }\n};\n\n// src/dom/TabOverflowObserver.ts\nvar TabOverflowObserver = class {\n constructor(callback) {\n this.container = null;\n this.resizeObserver = null;\n this.mutationObserver = null;\n this.lastState = { visibleTabs: [], overflowTabs: [], hasOverflow: false };\n // Timer/rAF IDs for cleanup\n this.rafId = null;\n this.timeoutId = null;\n /** True only after a permanent dispose() call (not via re-observation). */\n this.permanentlyDisposed = false;\n /** True while actively observing. */\n this.observing = false;\n this.callback = callback;\n }\n /** Start observing a container element. Tab elements must have data-tab-id attributes. */\n observe(container) {\n this.teardownObservers();\n this.permanentlyDisposed = false;\n this.observing = true;\n this.container = container;\n this.resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n if (entry.contentRect.width > 0) {\n this.compute();\n return;\n }\n }\n });\n this.resizeObserver.observe(container);\n this.mutationObserver = new MutationObserver(() => {\n this.compute();\n });\n this.mutationObserver.observe(container, { childList: true, subtree: true });\n this.compute();\n this.rafId = requestAnimationFrame(() => {\n this.rafId = null;\n this.compute();\n });\n this.timeoutId = setTimeout(() => {\n this.timeoutId = null;\n this.compute();\n }, 100);\n }\n /** Force a recomputation */\n recompute() {\n this.compute();\n }\n /** Tear down observers and timers without marking as permanently disposed. */\n teardownObservers() {\n this.observing = false;\n if (this.rafId !== null) {\n cancelAnimationFrame(this.rafId);\n this.rafId = null;\n }\n if (this.timeoutId !== null) {\n clearTimeout(this.timeoutId);\n this.timeoutId = null;\n }\n if (this.resizeObserver) {\n this.resizeObserver.disconnect();\n this.resizeObserver = null;\n }\n if (this.mutationObserver) {\n this.mutationObserver.disconnect();\n this.mutationObserver = null;\n }\n this.container = null;\n }\n /** Stop observing and permanently clean up. After this, observe() can still be called. */\n dispose() {\n this.teardownObservers();\n this.permanentlyDisposed = true;\n }\n /** Get the current state */\n getState() {\n return this.lastState;\n }\n compute() {\n if (this.permanentlyDisposed || !this.observing || !this.container)\n return;\n const containerRect = this.container.getBoundingClientRect();\n const containerRight = containerRect.right;\n const tabs = this.container.querySelectorAll(\"[data-tab-id]\");\n const visibleTabs = [];\n const overflowTabs = [];\n tabs.forEach((tab) => {\n const tabId = tab.getAttribute(\"data-tab-id\");\n if (!tabId)\n return;\n const tabRect = tab.getBoundingClientRect();\n if (tabRect.right <= containerRight + 2) {\n visibleTabs.push(tabId);\n } else {\n overflowTabs.push(tabId);\n }\n });\n const newState = {\n visibleTabs,\n overflowTabs,\n hasOverflow: overflowTabs.length > 0\n };\n if (newState.hasOverflow !== this.lastState.hasOverflow || newState.visibleTabs.length !== this.lastState.visibleTabs.length || newState.overflowTabs.length !== this.lastState.overflowTabs.length) {\n this.lastState = newState;\n this.callback(newState);\n }\n }\n};\n\n// src/dom/icons.ts\nvar S = 14;\nvar SW = \"2\";\nfunction svg(paths, size = S) {\n return `<svg width=\"${size}\" height=\"${size}\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"${SW}\" stroke-linecap=\"round\" stroke-linejoin=\"round\">${paths}</svg>`;\n}\nfunction iconClose(size = 12) {\n return `<svg width=\"${size}\" height=\"${size}\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"><path d=\"M18 6L6 18M6 6l12 12\"/></svg>`;\n}\nfunction iconMaximize() {\n return svg('<polyline points=\"15 3 21 3 21 9\"/><polyline points=\"9 21 3 21 3 15\"/><line x1=\"21\" y1=\"3\" x2=\"14\" y2=\"10\"/><line x1=\"3\" y1=\"21\" x2=\"10\" y2=\"14\"/>');\n}\nfunction iconRestore() {\n return svg('<polyline points=\"4 14 10 14 10 20\"/><polyline points=\"20 10 14 10 14 4\"/><line x1=\"14\" y1=\"10\" x2=\"21\" y2=\"3\"/><line x1=\"3\" y1=\"21\" x2=\"10\" y2=\"14\"/>');\n}\nfunction iconFloat() {\n return svg('<rect x=\"2\" y=\"4\" width=\"20\" height=\"16\" rx=\"2\"/><path d=\"M10 4v4h10\"/>');\n}\nfunction iconDockBack() {\n return svg('<rect x=\"2\" y=\"2\" width=\"20\" height=\"20\" rx=\"2\"/><path d=\"M2 14h20\"/>');\n}\nfunction iconPin() {\n return svg('<path d=\"M12 17v5\"/><path d=\"M9 10.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H8a2 2 0 0 0 0 4 1 1 0 0 1 1 1z\"/>');\n}\nfunction iconUnpin() {\n return svg('<path d=\"M12 17v5\"/><path d=\"M15 9.34V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H7.89\"/><path d=\"m2 2 20 20\"/><path d=\"M9 9v1.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h11\"/>');\n}\n\n// src/dom/views/TabGroupView.ts\nvar TabGroupView = class {\n constructor(node, panels, activePaneId, maximizedPanelId, callbacks, resourceStrings) {\n this.previousPanels = null;\n this.bottomTabStripEl = null;\n this.tabContainerEl = null;\n this.titleEl = null;\n this.scrollLeftBtn = null;\n this.scrollRightBtn = null;\n // Header action slots\n this.prefixSlotEl = null;\n this.leftSlotEl = null;\n this.rightSlotEl = null;\n this.prefixSlotDisposable = null;\n this.leftSlotDisposable = null;\n this.rightSlotDisposable = null;\n // Content management\n this.contentSlots = /* @__PURE__ */ new Map();\n this.tabDisposables = /* @__PURE__ */ new Map();\n this.overflowState = { visibleTabs: [], overflowTabs: [], hasOverflow: false };\n // (scroll arrows replace the old dropdown)\n // rAF throttle for scroll events\n this.scrollRafPending = false;\n // ── Context Menu ──────────────────────────────────────────────────\n this.contextMenuEl = null;\n this.contextMenuCleanup = null;\n // ── Private: Content ────────────────────────────────────────────\n this.previousActiveId = null;\n this.node = node;\n this.panels = panels;\n this.activePaneId = activePaneId;\n this.maximizedPanelId = maximizedPanelId;\n this.callbacks = callbacks;\n this.resourceStrings = { ...defaultResourceStrings, ...resourceStrings };\n this.element = document.createElement(\"div\");\n this.element.style.cssText = \"display:flex;flex-direction:column;height:100%;width:100%;position:relative;\";\n this.element.className = this.getRootClassName();\n this.element.setAttribute(\"data-dock-target\", node.id);\n this.element.setAttribute(\"role\", \"region\");\n this.element.setAttribute(\"aria-label\", panels[node.activePanel]?.title || \"Panel\");\n this.element.tabIndex = -1;\n this.applyHasTabsAttr();\n this.element.setAttribute(\"data-panel-id\", node.activePanel);\n this.element.addEventListener(\"focus\", () => {\n this.callbacks.onSetActivePane(this.node.activePanel);\n });\n const isBottomTabs = node.headerPosition === \"bottom\" && node.panels.length > 1;\n this.headerEl = document.createElement(\"div\");\n this.headerEl.className = \"dock-panel-header\";\n this.headerEl.style.cssText = \"display:flex;align-items:center;justify-content:space-between;min-height:32px;padding:0 12px;flex-shrink:0;\";\n this.element.appendChild(this.headerEl);\n this.contentAreaEl = document.createElement(\"div\");\n this.contentAreaEl.setAttribute(\"role\", \"tabpanel\");\n this.contentAreaEl.id = `panel-${node.activePanel}`;\n this.contentAreaEl.setAttribute(\"aria-labelledby\", `tab-${node.activePanel}`);\n this.contentAreaEl.style.cssText = \"flex:1;position:relative;overflow:hidden;\";\n this.element.appendChild(this.contentAreaEl);\n if (isBottomTabs) {\n this.bottomTabStripEl = document.createElement(\"div\");\n this.bottomTabStripEl.className = \"dock-panel-header dock-bottom-tab-strip\";\n this.bottomTabStripEl.style.cssText = \"display:flex;align-items:center;min-height:28px;padding:0 8px;flex-shrink:0;border-top:1px solid hsl(var(--dock-border));border-bottom:none;\";\n this.element.appendChild(this.bottomTabStripEl);\n }\n this.actionButtonsEl = document.createElement(\"div\");\n this.actionButtonsEl.style.cssText = \"display:flex;align-items:center;gap:0;flex-shrink:0;margin-left:8px;\";\n this.buildHeader();\n this.buildContent();\n this.tabOverflowObserver = new TabOverflowObserver((state) => {\n this.overflowState = state;\n this.updateOverflowButton();\n });\n if (this.tabContainerEl) {\n this.tabOverflowObserver.observe(this.tabContainerEl);\n }\n }\n // ── Public API ──────────────────────────────────────────────────\n update(node, panels, activePaneId, maximizedPanelId) {\n const prevNode = this.node;\n const prevActivePaneId = this.activePaneId;\n this.node = node;\n this.panels = panels;\n this.activePaneId = activePaneId;\n this.maximizedPanelId = maximizedPanelId;\n this.element.setAttribute(\"data-panel-id\", node.activePanel);\n this.element.setAttribute(\"aria-label\", panels[node.activePanel]?.title || \"Panel\");\n this.applyHasTabsAttr();\n this.element.className = this.getRootClassName();\n this.contentAreaEl.id = `panel-${node.activePanel}`;\n this.contentAreaEl.setAttribute(\"aria-labelledby\", `tab-${node.activePanel}`);\n const panelsChanged = prevNode.panels.length !== node.panels.length || prevNode.panels.some((p, i) => p !== node.panels[i]);\n const activePanelChanged = prevNode.activePanel !== node.activePanel;\n const activePaneChanged = prevActivePaneId !== activePaneId;\n const prevPanels = this.previousPanels;\n this.previousPanels = panels;\n const configChanged = !panelsChanged && node.panels.some((id) => {\n const prev = prevPanels?.[id];\n const curr = panels[id];\n if (!prev || !curr)\n return false;\n return prev.title !== curr.title || prev.icon !== curr.icon || prev.badge !== curr.badge;\n });\n if (panelsChanged) {\n const needsBottomTabs = node.headerPosition === \"bottom\" && node.panels.length > 1;\n if (needsBottomTabs && !this.bottomTabStripEl) {\n this.bottomTabStripEl = document.createElement(\"div\");\n this.bottomTabStripEl.className = \"dock-panel-header dock-bottom-tab-strip\";\n this.bottomTabStripEl.style.cssText = \"display:flex;align-items:center;min-height:28px;padding:0 8px;flex-shrink:0;border-top:1px solid hsl(var(--dock-border));border-bottom:none;\";\n this.element.appendChild(this.bottomTabStripEl);\n }\n if (!needsBottomTabs && this.bottomTabStripEl) {\n this.bottomTabStripEl.parentNode?.removeChild(this.bottomTabStripEl);\n this.bottomTabStripEl = null;\n }\n this.clearHeader();\n this.buildHeader();\n if (this.tabContainerEl) {\n this.tabOverflowObserver.observe(this.tabContainerEl);\n requestAnimationFrame(() => this.updateScrollArrows());\n }\n } else if (activePanelChanged || activePaneChanged) {\n this.updateTabStyles();\n this.updateActionButtons();\n this.updateTitleElement();\n }\n if (configChanged) {\n if (this.callbacks.createTab) {\n this.updateCustomTabs(prevPanels);\n } else {\n this.updateTabLabels();\n }\n this.updateTitleElement();\n }\n if (activePanelChanged || panelsChanged) {\n this.buildContent();\n }\n }\n dispose() {\n this.hideTabContextMenu();\n this.tabOverflowObserver.dispose();\n for (const [, slot] of this.contentSlots) {\n slot.disposable.dispose();\n }\n this.contentSlots.clear();\n for (const [, d] of this.tabDisposables) {\n d.dispose();\n }\n this.tabDisposables.clear();\n this.prefixSlotDisposable?.dispose();\n this.leftSlotDisposable?.dispose();\n this.rightSlotDisposable?.dispose();\n if (this.element.parentNode) {\n this.element.parentNode.removeChild(this.element);\n }\n }\n // ── Private: Root class ─────────────────────────────────────────\n getRootClassName() {\n const isActive = this.node.panels.includes(this.activePaneId);\n return `dock-tab-group${isActive ? \" dock-pane-active\" : \"\"}`;\n }\n applyHasTabsAttr() {\n if (this.node.panels.length > 1) {\n this.element.setAttribute(\"data-has-tabs\", \"\");\n } else {\n this.element.removeAttribute(\"data-has-tabs\");\n }\n }\n // ── Private: Header building ────────────────────────────────────\n clearHeader() {\n for (const [, d] of this.tabDisposables) {\n d.dispose();\n }\n this.tabDisposables.clear();\n this.prefixSlotDisposable?.dispose();\n this.prefixSlotDisposable = null;\n this.leftSlotDisposable?.dispose();\n this.leftSlotDisposable = null;\n this.rightSlotDisposable?.dispose();\n this.rightSlotDisposable = null;\n this.headerEl.innerHTML = \"\";\n if (this.bottomTabStripEl) {\n this.bottomTabStripEl.innerHTML = \"\";\n }\n this.tabContainerEl = null;\n this.titleEl = null;\n this.overflowBtnContainer = null;\n this.prefixSlotEl = null;\n this.leftSlotEl = null;\n this.rightSlotEl = null;\n }\n buildHeader() {\n const hasTabs = this.node.panels.length > 1;\n const isBottomTabs = this.node.headerPosition === \"bottom\" && hasTabs;\n if (this.callbacks.createHeaderActions) {\n this.prefixSlotEl = document.createElement(\"div\");\n this.prefixSlotEl.style.cssText = \"display:flex;align-items:center;margin-right:4px;flex-shrink:0;\";\n this.headerEl.appendChild(this.prefixSlotEl);\n this.prefixSlotDisposable = this.callbacks.createHeaderActions(\"prefix\", this.node.id, this.prefixSlotEl);\n }\n if (this.callbacks.createHeaderActions) {\n this.leftSlotEl = document.createElement(\"div\");\n this.leftSlotEl.style.cssText = \"display:flex;align-items:center;margin-right:4px;flex-shrink:0;\";\n this.headerEl.appendChild(this.leftSlotEl);\n this.leftSlotDisposable = this.callbacks.createHeaderActions(\"left\", this.node.id, this.leftSlotEl);\n }\n if (isBottomTabs) {\n this.buildSingleTitle();\n if (this.bottomTabStripEl) {\n this.buildTabStrip(this.bottomTabStripEl);\n }\n } else if (hasTabs) {\n this.buildTabStrip(this.headerEl);\n } else {\n this.buildSingleTitle();\n }\n if (this.callbacks.createHeaderActions) {\n this.rightSlotEl = document.createElement(\"div\");\n this.rightSlotEl.style.cssText = \"display:flex;align-items:center;margin-left:4px;flex-shrink:0;\";\n this.headerEl.appendChild(this.rightSlotEl);\n this.rightSlotDisposable = this.callbacks.createHeaderActions(\"right\", this.node.id, this.rightSlotEl);\n }\n this.buildActionButtons();\n this.headerEl.appendChild(this.actionButtonsEl);\n }\n buildTabStrip(parentEl) {\n const outerWrap = document.createElement(\"div\");\n outerWrap.style.cssText = \"display:flex;align-items:center;gap:0;flex:1;overflow:hidden;position:relative;\";\n this.tabContainerEl = document.createElement(\"div\");\n this.tabContainerEl.setAttribute(\"role\", \"tablist\");\n this.tabContainerEl.setAttribute(\"aria-label\", \"Panel tabs\");\n this.tabContainerEl.style.cssText = \"display:flex;align-items:center;gap:0;overflow:hidden;flex:1;\";\n for (const panelId of this.node.panels) {\n const panel = this.panels[panelId];\n if (!panel)\n continue;\n const isSelected = panelId === this.node.activePanel;\n const isActivePane = this.node.panels.includes(this.activePaneId);\n const isSelectedAndActive = isSelected && isActivePane;\n const tabEl = document.createElement(\"div\");\n tabEl.setAttribute(\"data-tab-id\", panelId);\n tabEl.id = `tab-${panelId}`;\n tabEl.setAttribute(\"role\", \"tab\");\n tabEl.setAttribute(\"aria-selected\", String(isSelected));\n tabEl.setAttribute(\"aria-controls\", `panel-${panelId}`);\n tabEl.tabIndex = isSelected ? 0 : -1;\n const isDisabled = panel.disabled === true;\n let tabClass = isSelected ? \"dock-tab dock-tab-selected\" : \"dock-tab\";\n if (isDisabled)\n tabClass += \" dock-tab-disabled\";\n tabEl.className = tabClass;\n if (isDisabled) {\n tabEl.setAttribute(\"data-disabled\", \"true\");\n }\n if (isSelectedAndActive) {\n tabEl.style.color = \"hsl(var(--dock-tab-text-active))\";\n tabEl.style.borderBottomColor = \"hsl(var(--dock-primary))\";\n } else if (isSelected) {\n tabEl.style.color = \"hsl(var(--dock-tab-text))\";\n tabEl.style.borderBottomColor = \"transparent\";\n }\n if (this.callbacks.createTab) {\n const d = this.callbacks.createTab(panelId, tabEl, isSelected);\n this.tabDisposables.set(panelId, d);\n } else {\n this.buildDefaultTabContent(tabEl, panel, panelId, isSelected);\n }\n tabEl.addEventListener(\"dblclick\", (e) => {\n e.preventDefault();\n if (panel.disabled)\n return;\n if (this.callbacks.onToggleMaximize) {\n this.callbacks.onToggleMaximize(panelId);\n } else {\n if (this.maximizedPanelId === panelId) {\n this.callbacks.onRestorePanel(panelId);\n } else {\n this.callbacks.onMaximizePanel(panelId);\n }\n }\n });\n tabEl.addEventListener(\"contextmenu\", (e) => {\n e.preventDefault();\n e.stopPropagation();\n if (panel.disabled)\n return;\n this.showTabContextMenu(panelId, panel, e.clientX, e.clientY);\n });\n this.tabContainerEl.appendChild(tabEl);\n }\n const scrollBtnStyle = \"flex-shrink:0;padding:2px 4px;color:hsl(var(--dock-text-muted));cursor:pointer;background:none;border:none;display:none;align-items:center;justify-content:center;\";\n this.scrollLeftBtn = document.createElement(\"button\");\n this.scrollLeftBtn.style.cssText = scrollBtnStyle;\n this.scrollLeftBtn.setAttribute(\"aria-label\", \"Scroll tabs left\");\n this.scrollLeftBtn.innerHTML = '<svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\"><polyline points=\"15 18 9 12 15 6\"/></svg>';\n this.scrollLeftBtn.addEventListener(\"mousedown\", (e) => {\n e.stopPropagation();\n e.preventDefault();\n this.scrollTabs(\"left\");\n });\n outerWrap.appendChild(this.scrollLeftBtn);\n outerWrap.appendChild(this.tabContainerEl);\n this.scrollRightBtn = document.createElement(\"button\");\n this.scrollRightBtn.style.cssText = scrollBtnStyle;\n this.scrollRightBtn.setAttribute(\"aria-label\", \"Scroll tabs right\");\n this.scrollRightBtn.innerHTML = '<svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\"><polyline points=\"9 18 15 12 9 6\"/></svg>';\n this.scrollRightBtn.addEventListener(\"mousedown\", (e) => {\n e.stopPropagation();\n e.preventDefault();\n this.scrollTabs(\"right\");\n });\n outerWrap.appendChild(this.scrollRightBtn);\n this.tabContainerEl.addEventListener(\"scroll\", () => {\n if (!this.scrollRafPending) {\n this.scrollRafPending = true;\n requestAnimationFrame(() => {\n this.scrollRafPending = false;\n this.updateScrollArrows();\n });\n }\n });\n const target = parentEl || this.headerEl;\n target.appendChild(outerWrap);\n }\n buildSingleTitle() {\n const panelId = this.node.activePanel;\n const activePanel = this.panels[panelId];\n this.titleEl = document.createElement(\"span\");\n this.titleEl.className = \"dock-panel-title\";\n this.titleEl.setAttribute(\"data-tab-id\", panelId);\n this.titleEl.textContent = activePanel?.title || \"Panel\";\n this.titleEl.addEventListener(\"contextmenu\", (e) => {\n e.preventDefault();\n e.stopPropagation();\n if (activePanel && !activePanel.disabled) {\n this.showTabContextMenu(panelId, activePanel, e.clientX, e.clientY);\n }\n });\n this.headerEl.appendChild(this.titleEl);\n }\n buildDefaultTabContent(tabEl, panel, panelId, isSelected) {\n if (panel.icon) {\n const iconSpan = document.createElement(\"span\");\n iconSpan.style.marginRight = \"4px\";\n iconSpan.textContent = panel.icon;\n tabEl.appendChild(iconSpan);\n }\n const labelSpan = document.createElement(\"span\");\n labelSpan.className = \"dock-tab-label\";\n labelSpan.style.whiteSpace = \"nowrap\";\n labelSpan.textContent = panel.title;\n tabEl.appendChild(labelSpan);\n if (panel.closable !== false) {\n const closeBtn = document.createElement(\"button\");\n closeBtn.className = \"dock-tab-close\";\n closeBtn.setAttribute(\"data-action\", \"close\");\n closeBtn.setAttribute(\"data-panel-id\", panelId);\n closeBtn.setAttribute(\"aria-label\", `Close ${panel.title}`);\n closeBtn.innerHTML = iconClose(12);\n tabEl.appendChild(closeBtn);\n }\n }\n showTabContextMenu(panelId, panel, x, y) {\n this.hideTabContextMenu();\n const menu = document.createElement(\"div\");\n menu.className = \"dock-context-menu\";\n menu.style.cssText = `\n position:fixed; left:${x}px; top:${y}px; z-index:10010;\n background:hsl(var(--dock-surface)); border:1px solid hsl(var(--dock-border));\n border-radius:4px; box-shadow:0 4px 12px rgba(0,0,0,0.15);\n padding:4px 0; min-width:140px; font-size:12px;\n color:hsl(var(--dock-text));\n `;\n const addItem = (label, action, disabled = false) => {\n const item = document.createElement(\"div\");\n item.className = disabled ? \"dock-context-menu-item disabled\" : \"dock-context-menu-item\";\n item.textContent = label;\n if (!disabled) {\n item.addEventListener(\"click\", (e) => {\n e.stopPropagation();\n this.hideTabContextMenu();\n action();\n });\n }\n menu.appendChild(item);\n };\n const addSeparator = () => {\n const sep = document.createElement(\"div\");\n sep.className = \"dock-context-menu-separator\";\n menu.appendChild(sep);\n };\n addItem(this.resourceStrings.close, () => this.callbacks.onClosePanel(panelId), panel.closable === false);\n if (this.node.panels.length > 1) {\n addItem(this.resourceStrings.closeOthers, () => {\n for (const pid of this.node.panels) {\n if (pid !== panelId && this.panels[pid]?.closable !== false) {\n this.callbacks.onClosePanel(pid);\n }\n }\n });\n addItem(this.resourceStrings.closeAll, () => {\n for (const pid of this.node.panels) {\n if (this.panels[pid]?.closable !== false) {\n this.callbacks.onClosePanel(pid);\n }\n }\n });\n const panelIndex = this.node.panels.indexOf(panelId);\n if (panelIndex < this.node.panels.length - 1) {\n addItem(\"Close to the Right\", () => {\n for (let i = panelIndex + 1; i < this.node.panels.length; i++) {\n const pid = this.node.panels[i];\n if (this.panels[pid]?.closable !== false) {\n this.callbacks.onClosePanel(pid);\n }\n }\n });\n }\n }\n addSeparator();\n addItem(this.resourceStrings.float, () => this.callbacks.onFloatPanel(panelId), panel.floatable === false);\n if (panel.allowPinning !== false) {\n addItem(this.resourceStrings.unpin, () => this.callbacks.onUnpinPanel(panelId));\n }\n addSeparator();\n addItem(this.resourceStrings.maximize, () => this.callbacks.onMaximizePanel(panelId));\n document.body.appendChild(menu);\n this.contextMenuEl = menu;\n const onOutsideClick = (e) => {\n if (!menu.contains(e.target)) {\n this.hideTabContextMenu();\n }\n };\n document.addEventListener(\"mousedown\", onOutsideClick, true);\n this.contextMenuCleanup = () => {\n document.removeEventListener(\"mousedown\", onOutsideClick, true);\n };\n }\n hideTabContextMenu() {\n if (this.contextMenuEl) {\n if (this.contextMenuEl.parentNode) {\n this.contextMenuEl.parentNode.removeChild(this.contextMenuEl);\n }\n this.contextMenuEl = null;\n }\n if (this.contextMenuCleanup) {\n this.contextMenuCleanup();\n this.contextMenuCleanup = null;\n }\n }\n // ── Tab styling ──────────────────────────────────────────────────\n getTabStyle(isSelected, isSelectedAndActive) {\n const base = \"display:flex;align-items:center;gap:4px;padding:6px 12px;cursor:pointer;user-select:none;font-size:12px;transition:color 0.15s,border-color 0.15s;border-bottom:2px solid transparent;margin-bottom:-1px;\";\n if (isSelectedAndActive) {\n return base + \"color:hsl(var(--dock-tab-text-active));border-bottom-color:hsl(var(--dock-primary));font-weight:500;\";\n }\n if (isSelected) {\n return base + \"color:hsl(var(--dock-tab-text));font-weight:500;\";\n }\n return base + \"color:hsl(var(--dock-tab-text));\";\n }\n // ── Private: Action buttons ─────────────────────────────────────\n buildActionButtons() {\n this.actionButtonsEl.innerHTML = \"\";\n const activePanel = this.panels[this.node.activePanel];\n const isMaximized = this.maximizedPanelId === this.node.activePanel;\n const allowMaximize = activePanel?.allowMaximize !== false;\n const allowPinning = activePanel?.allowPinning !== false;\n if (activePanel?.disabled)\n return;\n if (allowPinning) {\n const unpinBtn = this.createActionButton(\"unpin\", this.node.activePanel, this.resourceStrings.unpin, iconUnpin());\n this.actionButtonsEl.appendChild(unpinBtn);\n }\n if (allowMaximize) {\n if (isMaximized) {\n const restoreBtn = this.createActionButton(\"restore\", this.node.activePanel, this.resourceStrings.restore, iconRestore());\n this.actionButtonsEl.appendChild(restoreBtn);\n } else {\n const maxBtn = this.createActionButton(\"maximize\", this.node.activePanel, this.resourceStrings.maximize, iconMaximize());\n this.actionButtonsEl.appendChild(maxBtn);\n }\n }\n if (!isMaximized) {\n const floatBtn = this.createActionButton(\"float\", this.node.activePanel, this.resourceStrings.float, iconFloat());\n this.actionButtonsEl.appendChild(floatBtn);\n }\n if (activePanel?.closable !== false) {\n const closeBtn = this.createActionButton(\"close\", this.node.activePanel, this.resourceStrings.close, iconClose(14));\n closeBtn.style.color = \"hsl(var(--dock-text-muted))\";\n this.actionButtonsEl.appendChild(closeBtn);\n }\n }\n updateActionButtons() {\n this.buildActionButtons();\n }\n createActionButton(action, panelId, title, iconHtml) {\n const btn = document.createElement(\"button\");\n btn.className = \"dock-action-btn\";\n btn.setAttribute(\"data-action\", action);\n btn.setAttribute(\"data-panel-id\", panelId);\n btn.title = title;\n btn.setAttribute(\"aria-label\", title);\n btn.innerHTML = iconHtml;\n return btn;\n }\n buildContent() {\n if (this.previousActiveId && this.previousActiveId !== this.node.activePanel) {\n const prev = this.contentSlots.get(this.previousActiveId);\n if (prev)\n prev.container.style.display = \"none\";\n }\n const activeId = this.node.activePanel;\n this.previousActiveId = activeId;\n if (!activeId || !this.panels[activeId]) {\n if (!this.contentAreaEl.querySelector(\".dock-empty-placeholder\")) {\n const placeholder2 = document.createElement(\"div\");\n placeholder2.className = \"dock-empty-placeholder\";\n placeholder2.style.cssText = \"display:flex;align-items:center;justify-content:center;height:100%;color:hsl(var(--dock-text-muted));font-size:14px;\";\n placeholder2.textContent = \"Empty\";\n this.contentAreaEl.appendChild(placeholder2);\n }\n return;\n }\n const placeholder = this.contentAreaEl.querySelector(\".dock-empty-placeholder\");\n if (placeholder)\n placeholder.remove();\n const existing = this.contentSlots.get(activeId);\n if (existing) {\n existing.container.style.display = \"\";\n return;\n }\n const container = document.createElement(\"div\");\n container.style.cssText = \"width:100%;height:100%;overflow:hidden;\";\n this.contentAreaEl.appendChild(container);\n const disposable = this.callbacks.createContent(activeId, container);\n this.contentSlots.set(activeId, { container, disposable });\n for (const [id, slot] of this.contentSlots) {\n if (!this.node.panels.includes(id)) {\n slot.disposable.dispose();\n slot.container.remove();\n this.contentSlots.delete(id);\n }\n }\n }\n // ── Private: Tab style updates ─────────────────────────────────\n updateTabStyles() {\n if (!this.tabContainerEl)\n return;\n const isActivePane = this.node.panels.includes(this.activePaneId);\n const tabs = this.tabContainerEl.querySelectorAll(\"[data-tab-id]\");\n tabs.forEach((tabEl) => {\n const panelId = tabEl.getAttribute(\"data-tab-id\");\n const isSelected = panelId === this.node.activePanel;\n const isSelectedAndActive = isSelected && isActivePane;\n tabEl.className = isSelected ? \"dock-tab dock-tab-selected\" : \"dock-tab\";\n tabEl.setAttribute(\"aria-selected\", String(isSelected));\n tabEl.tabIndex = isSelected ? 0 : -1;\n if (isSelectedAndActive) {\n tabEl.style.color = \"hsl(var(--dock-tab-text-active))\";\n tabEl.style.borderBottomColor = \"hsl(var(--dock-primary))\";\n } else if (isSelected) {\n tabEl.style.color = \"hsl(var(--dock-tab-text))\";\n tabEl.style.borderBottomColor = \"transparent\";\n } else {\n tabEl.style.color = \"\";\n tabEl.style.borderBottomColor = \"\";\n }\n });\n }\n updateTitleElement() {\n if (!this.titleEl)\n return;\n const activePanel = this.panels[this.node.activePanel];\n this.titleEl.textContent = activePanel?.title || \"Panel\";\n this.titleEl.setAttribute(\"data-tab-id\", this.node.activePanel);\n }\n /** Re-invoke createTab for tabs whose panel config changed (title/icon/badge) */\n updateCustomTabs(prevPanels) {\n if (!this.tabContainerEl || !this.callbacks.createTab)\n return;\n for (const panelId of this.node.panels) {\n const prev = prevPanels?.[panelId];\n const curr = this.panels[panelId];\n if (!prev || !curr)\n continue;\n if (prev.title === curr.title && prev.icon === curr.icon && prev.badge === curr.badge)\n continue;\n const tabEl = this.tabContainerEl.querySelector(`[data-tab-id=\"${panelId}\"]`);\n if (!tabEl)\n continue;\n const oldDisposable = this.tabDisposables.get(panelId);\n if (oldDisposable) {\n oldDisposable.dispose();\n this.tabDisposables.delete(panelId);\n }\n const isSelected = panelId === this.node.activePanel;\n const d = this.callbacks.createTab(panelId, tabEl, isSelected);\n this.tabDisposables.set(panelId, d);\n }\n }\n /** Update tab label text/icons without full header rebuild (for PanelApi.setTitle/setIcon/setBadge) */\n updateTabLabels() {\n if (!this.tabContainerEl)\n return;\n const tabs = this.tabContainerEl.querySelectorAll(\"[data-tab-id]\");\n tabs.forEach((tabEl) => {\n const panelId = tabEl.getAttribute(\"data-tab-id\");\n if (!panelId)\n return;\n const panel = this.panels[panelId];\n if (!panel)\n return;\n const labelEl = tabEl.querySelector(\".dock-tab-label\");\n if (labelEl)\n labelEl.textContent = panel.title;\n const iconEl = tabEl.querySelector(\".dock-tab-icon\");\n if (panel.icon) {\n if (iconEl) {\n iconEl.textContent = panel.icon;\n } else {\n const newIcon = document.createElement(\"span\");\n newIcon.className = \"dock-tab-icon\";\n newIcon.textContent = panel.icon;\n tabEl.insertBefore(newIcon, tabEl.firstChild);\n }\n } else if (iconEl) {\n iconEl.remove();\n }\n const badgeEl = tabEl.querySelector(\".dock-tab-badge\");\n if (panel.badge) {\n if (badgeEl) {\n badgeEl.textContent = panel.badge;\n } else {\n const newBadge = document.createElement(\"span\");\n newBadge.className = \"dock-tab-badge\";\n newBadge.textContent = panel.badge;\n tabEl.appendChild(newBadge);\n }\n } else if (badgeEl) {\n badgeEl.remove();\n }\n });\n }\n // ── Private: Scroll arrows ─────────────────────────────────────\n updateOverflowButton() {\n this.updateScrollArrows();\n }\n updateScrollArrows() {\n if (!this.tabContainerEl || !this.scrollLeftBtn || !this.scrollRightBtn)\n return;\n const el = this.tabContainerEl;\n const canScrollLeft = el.scrollLeft > 0;\n const canScrollRight = el.scrollLeft < el.scrollWidth - el.clientWidth - 1;\n this.scrollLeftBtn.style.display = canScrollLeft ? \"flex\" : \"none\";\n this.scrollRightBtn.style.display = canScrollRight ? \"flex\" : \"none\";\n }\n scrollTabs(direction) {\n if (!this.tabContainerEl)\n return;\n const scrollAmount = 120;\n this.tabContainerEl.scrollBy({\n left: direction === \"right\" ? scrollAmount : -scrollAmount,\n behavior: \"smooth\"\n });\n }\n};\n\n// src/dom/views/SplitView.ts\nvar SplitView = class {\n constructor(node, callbacks) {\n // DOM references\n this.childContainers = [];\n this.splitters = [];\n // Resize state\n this.resizingIndex = null;\n // Bound handlers for cleanup\n this.boundMouseMove = null;\n this.boundMouseUp = null;\n this.boundTouchMove = null;\n this.boundTouchEnd = null;\n // rAF throttle for resize dispatch\n this.resizeRafId = null;\n this.node = node;\n this.callbacks = callbacks;\n this.liveSizes = [...node.sizes];\n this.element = document.createElement(\"div\");\n this.element.style.cssText = `display:flex;height:100%;width:100%;flex-direction:${node.direction === \"horizontal\" ? \"row\" : \"column\"};`;\n this.buildChildren();\n }\n // ── Public API ──────────────────────────────────────────────────\n /**\n * Update sizes without rebuilding children. Call when only sizes changed.\n */\n updateSizes(sizes) {\n this.liveSizes = [...sizes];\n this.node = { ...this.node, sizes };\n const isHorizontal = this.node.direction === \"horizontal\";\n for (let i = 0; i < this.childContainers.length; i++) {\n const container = this.childContainers[i];\n if (isHorizontal) {\n container.style.width = `${sizes[i]}%`;\n } else {\n container.style.height = `${sizes[i]}%`;\n }\n }\n }\n /**\n * Get the child containers (for inserting child views into).\n */\n getChildContainers() {\n return this.childContainers;\n }\n /**\n * Full rebuild of children. Call when the structure changes.\n */\n rebuild(node) {\n this.node = node;\n this.liveSizes = [...node.sizes];\n this.element.innerHTML = \"\";\n this.childContainers = [];\n this.splitters = [];\n this.element.style.flexDirection = node.direction === \"horizontal\" ? \"row\" : \"column\";\n this.buildChildren();\n }\n dispose() {\n if (this.resizeRafId !== null) {\n cancelAnimationFrame(this.resizeRafId);\n this.resizeRafId = null;\n }\n this.removeDocumentListeners();\n if (this.element.parentNode) {\n this.element.parentNode.removeChild(this.element);\n }\n }\n // ── Private: Build ──────────────────────────────────────────────\n buildChildren() {\n const isHorizontal = this.node.direction === \"horizontal\";\n for (let i = 0; i < this.node.children.length; i++) {\n const childContainer = document.createElement(\"div\");\n childContainer.style.cssText = \"overflow:hidden;\";\n if (isHorizontal) {\n childContainer.style.width = `${this.node.sizes[i]}%`;\n childContainer.style.minWidth = \"40px\";\n childContainer.style.height = \"100%\";\n } else {\n childContainer.style.height = `${this.node.sizes[i]}%`;\n childContainer.style.minHeight = \"40px\";\n childContainer.style.width = \"100%\";\n }\n const childEl = this.callbacks.createChildView(this.node.children[i]);\n childContainer.appendChild(childEl);\n this.element.appendChild(childContainer);\n this.childContainers.push(childContainer);\n if (i < this.node.children.length - 1) {\n const splitter = this.createSplitter(i, isHorizontal);\n this.element.appendChild(splitter);\n this.splitters.push(splitter);\n }\n }\n }\n createSplitter(index, isHorizontal) {\n const splitter = document.createElement(\"div\");\n splitter.className = \"dock-splitter\";\n splitter.setAttribute(\"role\", \"separator\");\n splitter.setAttribute(\"aria-orientation\", isHorizontal ? \"vertical\" : \"horizontal\");\n splitter.setAttribute(\"aria-valuenow\", String(Math.round(this.liveSizes[index])));\n splitter.tabIndex = 0;\n splitter.style.cssText = `flex-shrink:0;position:relative;transition:background-color 0.15s;background:hsl(var(--dock-splitter));${isHorizontal ? \"width:1px;cursor:col-resize;\" : \"height:1px;cursor:row-resize;\"}`;\n const hitArea = document.createElement(\"div\");\n hitArea.style.cssText = \"position:absolute;\";\n if (isHorizontal) {\n hitArea.style.left = \"-6px\";\n hitArea.style.right = \"-6px\";\n hitArea.style.top = \"0\";\n hitArea.style.bottom = \"0\";\n } else {\n hitArea.style.left = \"0\";\n hitArea.style.right = \"0\";\n hitArea.style.top = \"-6px\";\n hitArea.style.bottom = \"-6px\";\n }\n splitter.appendChild(hitArea);\n splitter.addEventListener(\"mousedown\", (e) => {\n e.preventDefault();\n this.startResize(index);\n });\n splitter.addEventListener(\"dblclick\", (e) => {\n e.preventDefault();\n const equalSize = 100 / this.node.children.length;\n const equalSizes = this.node.children.map(() => equalSize);\n this.callbacks.onResizeSplit(this.node.id, equalSizes);\n });\n splitter.addEventListener(\"touchstart\", (e) => {\n if (e.touches.length !== 1)\n return;\n e.preventDefault();\n this.startResize(index);\n }, { passive: false });\n return splitter;\n }\n // ── Private: Resize ─────────────────────────────────────────────\n startResize(index) {\n this.resizingIndex = index;\n const isHorizontal = this.node.direction === \"horizontal\";\n const cachedRect = this.element.getBoundingClientRect();\n const totalSize = isHorizontal ? cachedRect.width : cachedRect.height;\n const cachedOffset = isHorizontal ? cachedRect.left : cachedRect.top;\n if (this.splitters[index]) {\n this.splitters[index].style.backgroundColor = \"hsl(var(--dock-primary))\";\n }\n this.boundMouseMove = (e) => {\n if (this.resizingIndex === null)\n return;\n const pos = (isHorizontal ? e.clientX : e.clientY) - cachedOffset;\n const percentage = pos / totalSize * 100;\n const newSizes = [...this.liveSizes];\n let cumBefore = 0;\n for (let i = 0; i < this.resizingIndex; i++) {\n cumBefore += newSizes[i];\n }\n const minPx = 50;\n const minPct = Math.max(1, minPx / totalSize * 100);\n const collapsePct = 30 / totalSize * 100;\n const combined = newSizes[this.resizingIndex] + newSizes[this.resizingIndex + 1];\n let newFirst = Math.max(0, Math.min(combined, percentage - cumBefore));\n let newSecond = combined - newFirst;\n if (newFirst < collapsePct) {\n newFirst = 0;\n newSecond = combined;\n } else if (newSecond < collapsePct) {\n newSecond = 0;\n newFirst = combined;\n } else {\n newFirst = Math.max(minPct, Math.min(combined - minPct, newFirst));\n newSecond = combined - newFirst;\n }\n newSizes[this.resizingIndex] = newFirst;\n newSizes[this.resizingIndex + 1] = newSecond;\n this.liveSizes = newSizes;\n for (let i = 0; i < this.childContainers.length; i++) {\n if (isHorizontal) {\n this.childContainers[i].style.width = `${newSizes[i]}%`;\n } else {\n this.childContainers[i].style.height = `${newSizes[i]}%`;\n }\n }\n if (this.resizeRafId === null) {\n this.resizeRafId = requestAnimationFrame(() => {\n this.resizeRafId = null;\n this.callbacks.onResizeSplit(this.node.id, this.liveSizes);\n });\n }\n };\n this.boundMouseUp = () => {\n if (this.resizeRafId !== null) {\n cancelAnimationFrame(this.resizeRafId);\n this.resizeRafId = null;\n }\n this.callbacks.onResizeSplit(this.node.id, this.liveSizes);\n if (this.resizingIndex !== null && this.splitters[this.resizingIndex]) {\n this.splitters[this.resizingIndex].style.backgroundColor = \"\";\n }\n this.resizingIndex = null;\n this.removeDocumentListeners();\n document.body.style.cursor = \"\";\n document.body.style.userSelect = \"\";\n };\n this.boundTouchMove = (e) => {\n if (e.touches.length !== 1)\n return;\n e.preventDefault();\n const touch = e.touches[0];\n this.boundMouseMove?.({ clientX: touch.clientX, clientY: touch.clientY });\n };\n this.boundTouchEnd = () => {\n this.boundMouseUp?.();\n };\n document.addEventListener(\"mousemove\", this.boundMouseMove);\n document.addEventListener(\"mouseup\", this.boundMouseUp);\n document.addEventListener(\"touchmove\", this.boundTouchMove, { passive: false });\n document.addEventListener(\"touchend\", this.boundTouchEnd);\n document.body.style.cursor = isHorizontal ? \"col-resize\" : \"row-resize\";\n document.body.style.userSelect = \"none\";\n }\n removeDocumentListeners() {\n if (this.boundMouseMove) {\n document.removeEventListener(\"mousemove\", this.boundMouseMove);\n this.boundMouseMove = null;\n }\n if (this.boundMouseUp) {\n document.removeEventListener(\"mouseup\", this.boundMouseUp);\n this.boundMouseUp = null;\n }\n if (this.boundTouchMove) {\n document.removeEventListener(\"touchmove\", this.boundTouchMove);\n this.boundTouchMove = null;\n }\n if (this.boundTouchEnd) {\n document.removeEventListener(\"touchend\", this.boundTouchEnd);\n this.boundTouchEnd = null;\n }\n }\n};\n\n// src/dom/views/FloatingWindowView.ts\nvar MIN_WIDTH = 200;\nvar MIN_HEIGHT = 120;\nvar CURSOR_MAP = {\n n: \"ns-resize\",\n s: \"ns-resize\",\n e: \"ew-resize\",\n w: \"ew-resize\",\n ne: \"nesw-resize\",\n nw: \"nwse-resize\",\n se: \"nwse-resize\",\n sw: \"nesw-resize\"\n};\nvar FloatingWindowView = class {\n constructor(floating, panel, activePaneId, callbacks, resourceStrings) {\n // Content management\n this.contentDisposable = null;\n // Drag state\n this.isDragging = false;\n this.disposed = false;\n this.dragStart = { x: 0, y: 0, panelX: 0, panelY: 0 };\n // Resize state\n this.resizeDir = null;\n this.resizeStart = { x: 0, y: 0, w: 0, h: 0, panelX: 0, panelY: 0 };\n // Bound handlers\n this.boundDragMove = null;\n this.boundDragUp = null;\n this.boundResizeMove = null;\n this.boundResizeUp = null;\n // rAF throttle IDs\n this.dragRafId = null;\n this.resizeRafId = null;\n // ── Private: Resize handles ─────────────────────────────────────\n /** Event delegation handler for resize handle mousedown */\n this.onResizeHandleMouseDown = (e) => {\n const target = e.target;\n const dir = target.getAttribute(\"data-resize\");\n if (!dir)\n return;\n e.preventDefault();\n e.stopPropagation();\n this.startResize(dir, e);\n };\n this.floating = floating;\n this.panel = panel;\n this.activePaneId = activePaneId;\n this.callbacks = callbacks;\n this.resourceStrings = { ...defaultResourceStrings, ...resourceStrings };\n this.element = document.createElement(\"div\");\n this.element.className = this.getRootClassName();\n this.element.style.cssText = this.getRootStyle();\n this.element.setAttribute(\"role\", \"dialog\");\n this.element.setAttribute(\"aria-label\", panel.title);\n this.element.addEventListener(\"mousedown\", () => {\n this.callbacks.onBringToFront(this.floating.panelId);\n this.callbacks.onSetActivePane(this.floating.panelId);\n });\n this.titleBarEl = document.createElement(\"div\");\n this.titleBarEl.className = \"dock-floating-titlebar\";\n this.titleBarEl.style.cssText = \"display:flex;align-items:center;justify-content:space-between;padding:0 12px;height:32px;cursor:move;user-select:none;flex-shrink:0;background:hsl(var(--dock-panel-header));\";\n this.element.appendChild(this.titleBarEl);\n this.titleTextEl = document.createElement(\"span\");\n this.titleTextEl.className = \"dock-floating-title\";\n this.titleTextEl.style.cssText = \"font-size:12px;font-weight:500;\";\n this.titleTextEl.textContent = panel.title;\n this.titleBarEl.appendChild(this.titleTextEl);\n const btnContainer = document.createElement(\"div\");\n btnContainer.style.cssText = \"display:flex;align-items:center;gap:0;\";\n const dockBackBtn = document.createElement(\"button\");\n dockBackBtn.className = \"dock-floating-titlebar-btn\";\n dockBackBtn.setAttribute(\"data-action\", \"dock-back\");\n dockBackBtn.setAttribute(\"data-panel-id\", floating.panelId);\n dockBackBtn.title = this.resourceStrings.dock;\n dockBackBtn.setAttribute(\"aria-label\", this.resourceStrings.dock);\n dockBackBtn.innerHTML = iconDockBack();\n btnContainer.appendChild(dockBackBtn);\n const closeBtn = document.createElement(\"button\");\n closeBtn.className = \"dock-floating-titlebar-btn\";\n closeBtn.setAttribute(\"data-action\", \"close\");\n closeBtn.setAttribute(\"data-panel-id\", floating.panelId);\n closeBtn.title = this.resourceStrings.close;\n closeBtn.setAttribute(\"aria-label\", this.resourceStrings.close);\n closeBtn.innerHTML = iconClose(14);\n btnContainer.appendChild(closeBtn);\n this.titleBarEl.appendChild(btnContainer);\n this.titleBarEl.addEventListener(\"mousedown\", (e) => {\n if (e.target.closest(\"button\"))\n return;\n e.preventDefault();\n this.startDrag(e);\n });\n this.titleBarEl.addEventListener(\"dblclick\", (e) => {\n if (e.target.closest(\"button\"))\n return;\n e.preventDefault();\n this.callbacks.onDockBack(this.floating.panelId);\n });\n this.titleBarEl.addEventListener(\"touchstart\", (e) => {\n if (e.target.closest(\"button\"))\n return;\n if (e.touches.length !== 1)\n return;\n e.preventDefault();\n const touch = e.touches[0];\n this.startDrag({ clientX: touch.clientX, clientY: touch.clientY });\n }, { passive: false });\n this.contentAreaEl = document.createElement(\"div\");\n this.contentAreaEl.style.cssText = \"flex:1;overflow:hidden;\";\n this.element.appendChild(this.contentAreaEl);\n this.contentDisposable = this.callbacks.createContent(floating.panelId, this.contentAreaEl);\n if (panel.floatingResizable !== false) {\n this.createResizeHandles();\n }\n }\n // ── Public API ──────────────────────────────────────────────────\n update(floating, panel, activePaneId) {\n this.floating = floating;\n this.panel = panel;\n this.activePaneId = activePaneId;\n this.element.style.left = `${floating.x}px`;\n this.element.style.top = `${floating.y}px`;\n this.element.style.width = `${floating.width}px`;\n this.element.style.height = `${floating.height}px`;\n this.element.style.zIndex = `${floating.zIndex + 1e3}`;\n this.element.className = this.getRootClassName();\n this.titleTextEl.textContent = panel.title;\n this.element.setAttribute(\"aria-label\", panel.title);\n }\n dispose() {\n this.disposed = true;\n if (this.dragRafId !== null) {\n cancelAnimationFrame(this.dragRafId);\n this.dragRafId = null;\n }\n if (this.resizeRafId !== null) {\n cancelAnimationFrame(this.resizeRafId);\n this.resizeRafId = null;\n }\n this.removeDragListeners();\n this.removeResizeListeners();\n this.element.removeEventListener(\"mousedown\", this.onResizeHandleMouseDown);\n if (this.contentDisposable) {\n this.contentDisposable.dispose();\n this.contentDisposable = null;\n }\n if (this.element.parentNode) {\n this.element.parentNode.removeChild(this.element);\n }\n }\n // ── Private: Styles ─────────────────────────────────────────────\n getRootClassName() {\n const isActive = this.activePaneId === this.floating.panelId;\n return `dock-floating-window${isActive ? \" dock-pane-active\" : \"\"}`;\n }\n getRootStyle() {\n return `position:absolute;display:flex;flex-direction:column;overflow:visible;border:1px solid hsl(var(--dock-border));border-radius:2px;background:hsl(var(--dock-surface));box-shadow:0 8px 32px hsl(var(--dock-float-shadow) / 0.18), 0 2px 8px hsl(var(--dock-float-shadow) / 0.1);left:${this.floating.x}px;top:${this.floating.y}px;width:${this.floating.width}px;height:${this.floating.height}px;z-index:${this.floating.zIndex + 1e3};`;\n }\n // ── Private: Title bar drag ─────────────────────────────────────\n startDrag(e) {\n this.isDragging = true;\n this.callbacks.onBringToFront(this.floating.panelId);\n this.dragStart = {\n x: e.clientX,\n y: e.clientY,\n panelX: this.floating.x,\n panelY: this.floating.y\n };\n let latestX = this.floating.x;\n let latestY = this.floating.y;\n let indicatorsShown = false;\n const dragManager = this.callbacks.getDragManager?.();\n this.boundDragMove = (ev) => {\n let newX = this.dragStart.panelX + ev.clientX - this.dragStart.x;\n let newY = this.dragStart.panelY + ev.clientY - this.dragStart.y;\n const containerRect = this.element.parentElement?.getBoundingClientRect();\n if (containerRect) {\n const snapDist = 10;\n const relX = newX;\n const relY = newY;\n const relRight = relX + this.floating.width;\n const relBottom = relY + this.floating.height;\n const containerW = containerRect.width;\n const containerH = containerRect.height;\n if (relX < snapDist)\n newX = 0;\n if (relY < snapDist)\n newY = 0;\n if (containerW - relRight < snapDist)\n newX = containerW - this.floating.width;\n if (containerH - relBottom < snapDist)\n newY = containerH - this.floating.height;\n }\n latestX = newX;\n latestY = newY;\n if (!indicatorsShown && dragManager) {\n const dx = ev.clientX - this.dragStart.x;\n const dy = ev.clientY - this.dragStart.y;\n if (Math.sqrt(dx * dx + dy * dy) >= 5) {\n indicatorsShown = true;\n dragManager.startDrag(\n this.floating.panelId,\n this.panel.title,\n ev,\n true\n /* skipGhost */\n );\n }\n }\n if (this.dragRafId === null) {\n this.dragRafId = requestAnimationFrame(() => {\n this.dragRafId = null;\n this.callbacks.onUpdateFloating(this.floating.panelId, { x: latestX, y: latestY });\n });\n }\n };\n this.boundDragUp = () => {\n try {\n if (this.dragRafId !== null) {\n cancelAnimationFrame(this.dragRafId);\n this.dragRafId = null;\n }\n if (indicatorsShown && dragManager) {\n queueMicrotask(() => {\n const stillFloating = !this.disposed;\n if (stillFloating) {\n this.callbacks.onUpdateFloating(this.floating.panelId, { x: latestX, y: latestY });\n }\n });\n } else {\n this.callbacks.onUpdateFloating(this.floating.panelId, { x: latestX, y: latestY });\n }\n this.isDragging = false;\n this.removeDragListeners();\n } finally {\n document.body.style.userSelect = \"\";\n }\n };\n const onTouchMove = (ev) => {\n if (ev.touches.length !== 1)\n return;\n ev.preventDefault();\n this.boundDragMove?.({ clientX: ev.touches[0].clientX, clientY: ev.touches[0].clientY });\n };\n const onTouchEnd = () => {\n this.boundDragUp?.();\n document.removeEventListener(\"touchmove\", onTouchMove);\n document.removeEventListener(\"touchend\", onTouchEnd);\n };\n document.addEventListener(\"mousemove\", this.boundDragMove);\n document.addEventListener(\"mouseup\", this.boundDragUp);\n document.addEventListener(\"touchmove\", onTouchMove, { passive: false });\n document.addEventListener(\"touchend\", onTouchEnd);\n document.body.style.userSelect = \"none\";\n }\n removeDragListeners() {\n if (this.boundDragMove) {\n document.removeEventListener(\"mousemove\", this.boundDragMove);\n this.boundDragMove = null;\n }\n if (this.boundDragUp) {\n document.removeEventListener(\"mouseup\", this.boundDragUp);\n this.boundDragUp = null;\n }\n }\n createResizeHandles() {\n const edgeSize = 4;\n const cornerSize = 10;\n const makeHandle = (dir, style) => {\n const handle = document.createElement(\"div\");\n handle.setAttribute(\"data-resize\", dir);\n handle.style.cssText = `position:absolute;${style}cursor:${CURSOR_MAP[dir]};`;\n this.element.appendChild(handle);\n };\n makeHandle(\"n\", `top:${-edgeSize}px;left:${cornerSize}px;right:${cornerSize}px;height:${edgeSize * 2}px;`);\n makeHandle(\"s\", `bottom:${-edgeSize}px;left:${cornerSize}px;right:${cornerSize}px;height:${edgeSize * 2}px;`);\n makeHandle(\"w\", `left:${-edgeSize}px;top:${cornerSize}px;bottom:${cornerSize}px;width:${edgeSize * 2}px;`);\n makeHandle(\"e\", `right:${-edgeSize}px;top:${cornerSize}px;bottom:${cornerSize}px;width:${edgeSize * 2}px;`);\n const cs = cornerSize + edgeSize;\n makeHandle(\"nw\", `top:${-edgeSize}px;left:${-edgeSize}px;width:${cs}px;height:${cs}px;`);\n makeHandle(\"ne\", `top:${-edgeSize}px;right:${-edgeSize}px;width:${cs}px;height:${cs}px;`);\n makeHandle(\"sw\", `bottom:${-edgeSize}px;left:${-edgeSize}px;width:${cs}px;height:${cs}px;`);\n makeHandle(\"se\", `bottom:${-edgeSize}px;right:${-edgeSize}px;width:${cs}px;height:${cs}px;`);\n this.element.addEventListener(\"mousedown\", this.onResizeHandleMouseDown);\n }\n startResize(dir, e) {\n this.resizeDir = dir;\n this.callbacks.onBringToFront(this.floating.panelId);\n this.resizeStart = {\n x: e.clientX,\n y: e.clientY,\n w: this.floating.width,\n h: this.floating.height,\n panelX: this.floating.x,\n panelY: this.floating.y\n };\n let latestUpdates = {};\n this.boundResizeMove = (ev) => {\n if (!this.resizeDir)\n return;\n const s = this.resizeStart;\n const dx = ev.clientX - s.x;\n const dy = ev.clientY - s.y;\n const updates = {};\n if (this.resizeDir.includes(\"e\")) {\n updates.width = Math.max(MIN_WIDTH, s.w + dx);\n } else if (this.resizeDir.includes(\"w\")) {\n const newWidth = Math.max(MIN_WIDTH, s.w - dx);\n updates.width = newWidth;\n updates.x = s.panelX + (s.w - newWidth);\n }\n if (this.resizeDir.includes(\"s\")) {\n updates.height = Math.max(MIN_HEIGHT, s.h + dy);\n } else if (this.resizeDir.includes(\"n\")) {\n const newHeight = Math.max(MIN_HEIGHT, s.h - dy);\n updates.height = newHeight;\n updates.y = s.panelY + (s.h - newHeight);\n }\n latestUpdates = updates;\n if (this.resizeRafId === null) {\n this.resizeRafId = requestAnimationFrame(() => {\n this.resizeRafId = null;\n this.callbacks.onUpdateFloating(this.floating.panelId, latestUpdates);\n });\n }\n };\n this.boundResizeUp = () => {\n try {\n if (this.resizeRafId !== null) {\n cancelAnimationFrame(this.resizeRafId);\n this.resizeRafId = null;\n }\n if (Object.keys(latestUpdates).length > 0) {\n this.callbacks.onUpdateFloating(this.floating.panelId, latestUpdates);\n }\n this.resizeDir = null;\n this.removeResizeListeners();\n } finally {\n document.body.style.cursor = \"\";\n document.body.style.userSelect = \"\";\n }\n };\n const onResizeTouchMove = (ev) => {\n if (ev.touches.length !== 1)\n return;\n ev.preventDefault();\n this.boundResizeMove?.({ clientX: ev.touches[0].clientX, clientY: ev.touches[0].clientY });\n };\n const onResizeTouchEnd = () => {\n this.boundResizeUp?.();\n document.removeEventListener(\"touchmove\", onResizeTouchMove);\n document.removeEventListener(\"touchend\", onResizeTouchEnd);\n };\n document.addEventListener(\"mousemove\", this.boundResizeMove);\n document.addEventListener(\"mouseup\", this.boundResizeUp);\n document.addEventListener(\"touchmove\", onResizeTouchMove, { passive: false });\n document.addEventListener(\"touchend\", onResizeTouchEnd);\n document.body.style.cursor = CURSOR_MAP[dir];\n document.body.style.userSelect = \"none\";\n }\n removeResizeListeners() {\n if (this.boundResizeMove) {\n document.removeEventListener(\"mousemove\", this.boundResizeMove);\n this.boundResizeMove = null;\n }\n if (this.boundResizeUp) {\n document.removeEventListener(\"mouseup\", this.boundResizeUp);\n this.boundResizeUp = null;\n }\n }\n};\n\n// src/dom/views/UnpinnedStripView.ts\nvar UnpinnedStripView = class {\n constructor(edge, unpinnedPanels, panels, callbacks) {\n this.flyoutEl = null;\n // Flyout state\n this.expandedPanelId = null;\n this.flyoutContentDisposable = null;\n this.closeTimeout = null;\n // Bound handlers for cleanup\n this.boundStripMouseOver = null;\n this.boundStripMouseOut = null;\n this.boundStripClick = null;\n this.edge = edge;\n this.unpinnedPanels = unpinnedPanels;\n this.panels = panels;\n this.callbacks = callbacks;\n this.element = document.createElement(\"div\");\n this.element.style.cssText = \"display:contents;\";\n this.stripEl = document.createElement(\"div\");\n const isVertical = edge === \"left\" || edge === \"right\";\n this.stripEl.style.cssText = `flex-shrink:0;display:flex;align-items:stretch;z-index:30;background:hsl(var(--dock-unpinned-bg));${isVertical ? `flex-direction:column;width:28px;border-right:1px solid hsl(var(--dock-border));${edge === \"right\" ? \"border-left:1px solid hsl(var(--dock-border));border-right:none;\" : \"\"}` : `flex-direction:row;height:28px;${edge === \"top\" ? \"border-bottom:1px solid hsl(var(--dock-border));\" : \"border-top:1px solid hsl(var(--dock-border));\"}`}`;\n this.element.appendChild(this.stripEl);\n this.setupStripDelegation();\n this.buildTabs();\n }\n // ── Public API ──────────────────────────────────────────────────\n update(unpinnedPanels, panels) {\n this.unpinnedPanels = unpinnedPanels;\n this.panels = panels;\n if (this.expandedPanelId && !unpinnedPanels.some((p) => p.panelId === this.expandedPanelId)) {\n this.closeFlyout();\n }\n this.stripEl.innerHTML = \"\";\n this.buildTabs();\n }\n dispose() {\n this.closeFlyout();\n if (this.closeTimeout) {\n clearTimeout(this.closeTimeout);\n this.closeTimeout = null;\n }\n if (this.boundStripMouseOver) {\n this.stripEl.removeEventListener(\"mouseover\", this.boundStripMouseOver);\n this.boundStripMouseOver = null;\n }\n if (this.boundStripMouseOut) {\n this.stripEl.removeEventListener(\"mouseout\", this.boundStripMouseOut);\n this.boundStripMouseOut = null;\n }\n if (this.boundStripClick) {\n this.stripEl.removeEventListener(\"click\", this.boundStripClick);\n this.boundStripClick = null;\n }\n this.stripEl.remove();\n this.element.remove();\n }\n // ── Private: Event delegation ──────────────────────────────────\n /** Set up event delegation on stripEl for all tab interactions */\n setupStripDelegation() {\n this.boundStripMouseOver = (e) => {\n const tabBtn = e.target.closest(\"[data-unpinned-id]\");\n if (!tabBtn)\n return;\n const panelId = tabBtn.getAttribute(\"data-unpinned-id\");\n if (!panelId)\n return;\n this.cancelClose();\n this.openFlyout(panelId);\n };\n this.boundStripMouseOut = (e) => {\n const tabBtn = e.target.closest(\"[data-unpinned-id]\");\n if (!tabBtn)\n return;\n this.scheduleClose();\n };\n this.boundStripClick = (e) => {\n const tabBtn = e.target.closest(\"[data-unpinned-id]\");\n if (!tabBtn)\n return;\n const panelId = tabBtn.getAttribute(\"data-unpinned-id\");\n if (!panelId)\n return;\n if (this.expandedPanelId === panelId) {\n this.closeFlyout();\n } else {\n this.openFlyout(panelId);\n }\n };\n this.stripEl.addEventListener(\"mouseover\", this.boundStripMouseOver);\n this.stripEl.addEventListener(\"mouseout\", this.boundStripMouseOut);\n this.stripEl.addEventListener(\"click\", this.boundStripClick);\n }\n // ── Private: Build ──────────────────────────────────────────────\n buildTabs() {\n const isVertical = this.edge === \"left\" || this.edge === \"right\";\n for (const unpinned of this.unpinnedPanels) {\n const panel = this.panels[unpinned.panelId];\n if (!panel)\n continue;\n const tabBtn = document.createElement(\"button\");\n tabBtn.className = \"dock-unpinned-tab\";\n tabBtn.setAttribute(\"data-unpinned-id\", unpinned.panelId);\n tabBtn.style.cssText = isVertical ? \"width:100%;padding:12px 0;\" : \"height:100%;padding:0 12px;\";\n tabBtn.title = panel.title;\n const labelSpan = document.createElement(\"span\");\n labelSpan.style.cssText = `font-size:11px;font-weight:500;white-space:nowrap;${isVertical ? \"writing-mode:vertical-lr;text-orientation:mixed;\" : \"\"}`;\n labelSpan.textContent = panel.title;\n tabBtn.appendChild(labelSpan);\n this.stripEl.appendChild(tabBtn);\n }\n }\n // ── Private: Flyout ─────────────────────────────────────────────\n openFlyout(panelId) {\n if (this.expandedPanelId === panelId)\n return;\n this.closeFlyout();\n this.expandedPanelId = panelId;\n const unpinned = this.unpinnedPanels.find((p) => p.panelId === panelId);\n const panel = this.panels[panelId];\n if (!unpinned || !panel)\n return;\n const isVertical = this.edge === \"left\" || this.edge === \"right\";\n this.flyoutEl = document.createElement(\"div\");\n this.flyoutEl.style.cssText = `position:absolute;display:flex;flex-direction:column;overflow:hidden;z-index:40;background:hsl(var(--dock-surface));box-shadow:0 4px 16px rgba(0,0,0,0.15);${this.edge === \"left\" ? `left:28px;top:0;bottom:0;border-right:1px solid hsl(var(--dock-border));width:${unpinned.size}px;` : this.edge === \"right\" ? `right:28px;top:0;bottom:0;border-left:1px solid hsl(var(--dock-border));width:${unpinned.size}px;` : this.edge === \"top\" ? `top:28px;left:0;right:0;border-bottom:1px solid hsl(var(--dock-border));height:${unpinned.size}px;` : `bottom:28px;left:0;right:0;border-top:1px solid hsl(var(--dock-border));height:${unpinned.size}px;`}`;\n this.flyoutEl.addEventListener(\"mouseenter\", () => this.cancelClose());\n this.flyoutEl.addEventListener(\"mouseleave\", () => this.scheduleClose());\n const header = document.createElement(\"div\");\n header.style.cssText = \"display:flex;align-items:center;justify-content:space-between;padding:0 12px;height:32px;flex-shrink:0;border-bottom:1px solid hsl(var(--dock-border));background:hsl(var(--dock-panel-header));\";\n const titleSpan = document.createElement(\"span\");\n titleSpan.style.cssText = \"font-size:12px;font-weight:500;color:hsl(var(--dock-text));\";\n titleSpan.textContent = panel.title;\n header.appendChild(titleSpan);\n const btnGroup = document.createElement(\"div\");\n btnGroup.style.cssText = \"display:flex;align-items:center;gap:0;\";\n const pinBtn = document.createElement(\"button\");\n pinBtn.style.cssText = \"padding:4px;color:hsl(var(--dock-text-muted));cursor:pointer;background:none;border:none;display:flex;align-items:center;\";\n pinBtn.title = \"Pin panel (dock back)\";\n pinBtn.innerHTML = iconPin();\n pinBtn.addEventListener(\"click\", () => {\n this.closeFlyout();\n this.callbacks.onPinPanel(panelId);\n });\n btnGroup.appendChild(pinBtn);\n const closeBtn = document.createElement(\"button\");\n closeBtn.setAttribute(\"data-action\", \"close\");\n closeBtn.setAttribute(\"data-panel-id\", panelId);\n closeBtn.style.cssText = \"padding:4px;color:hsl(var(--dock-text-muted));cursor:pointer;background:none;border:none;display:flex;align-items:center;\";\n closeBtn.title = \"Close panel\";\n closeBtn.innerHTML = iconClose(14);\n closeBtn.addEventListener(\"click\", () => {\n this.closeFlyout();\n this.callbacks.onClosePanel(panelId);\n });\n btnGroup.appendChild(closeBtn);\n header.appendChild(btnGroup);\n this.flyoutEl.appendChild(header);\n const contentContainer = document.createElement(\"div\");\n contentContainer.style.cssText = \"flex:1;overflow:hidden;\";\n this.flyoutEl.appendChild(contentContainer);\n this.flyoutContentDisposable = this.callbacks.createContent(panelId, contentContainer);\n const resizeHandle = document.createElement(\"div\");\n resizeHandle.className = \"dock-flyout-resize\";\n resizeHandle.style.cssText = `position:absolute;transition:background-color 0.15s;${this.edge === \"left\" ? \"right:0;top:0;bottom:0;width:4px;cursor:col-resize;\" : this.edge === \"right\" ? \"left:0;top:0;bottom:0;width:4px;cursor:col-resize;\" : \"top:0;left:0;right:0;height:4px;cursor:row-resize;\"}`;\n this.flyoutEl.appendChild(resizeHandle);\n this.stripEl.parentElement?.appendChild(this.flyoutEl);\n }\n closeFlyout() {\n if (this.flyoutContentDisposable) {\n this.flyoutContentDisposable.dispose();\n this.flyoutContentDisposable = null;\n }\n if (this.flyoutEl) {\n this.flyoutEl.remove();\n this.flyoutEl = null;\n }\n this.expandedPanelId = null;\n }\n scheduleClose() {\n this.closeTimeout = setTimeout(() => {\n this.closeFlyout();\n }, 300);\n }\n cancelClose() {\n if (this.closeTimeout) {\n clearTimeout(this.closeTimeout);\n this.closeTimeout = null;\n }\n }\n};\n\n// src/dom/views/MaximizeOverlayView.ts\nvar MaximizeOverlayView = class {\n constructor(panelId, panel, callbacks) {\n // Content management\n this.contentDisposable = null;\n this.panelId = panelId;\n this.panel = panel;\n this.callbacks = callbacks;\n this.element = document.createElement(\"div\");\n this.element.style.cssText = \"position:absolute;inset:0;z-index:9000;display:flex;flex-direction:column;background:hsl(var(--dock-surface));\";\n const headerEl = document.createElement(\"div\");\n headerEl.className = \"dock-panel-header\";\n headerEl.style.cssText = \"display:flex;align-items:center;justify-content:space-between;min-height:32px;padding:0 12px;flex-shrink:0;border-bottom:1px solid hsl(var(--dock-border));background:hsl(var(--dock-panel-header));\";\n const titleSpan = document.createElement(\"span\");\n titleSpan.style.cssText = \"font-size:12px;font-weight:500;color:hsl(var(--dock-text));user-select:none;\";\n if (panel.icon) {\n const iconSpan = document.createElement(\"span\");\n iconSpan.style.marginRight = \"4px\";\n iconSpan.textContent = panel.icon;\n titleSpan.appendChild(iconSpan);\n }\n const textNode = document.createTextNode(panel.title);\n titleSpan.appendChild(textNode);\n headerEl.appendChild(titleSpan);\n const restoreBtn = document.createElement(\"button\");\n restoreBtn.setAttribute(\"data-action\", \"restore\");\n restoreBtn.setAttribute(\"data-panel-id\", panelId);\n restoreBtn.style.cssText = \"padding:4px;color:hsl(var(--dock-text-muted));cursor:pointer;background:none;border:none;display:flex;align-items:center;transition:color 0.15s;\";\n restoreBtn.title = \"Restore\";\n restoreBtn.innerHTML = iconRestore();\n restoreBtn.addEventListener(\"mouseenter\", () => {\n restoreBtn.style.color = \"hsl(var(--dock-text))\";\n });\n restoreBtn.addEventListener(\"mouseleave\", () => {\n restoreBtn.style.color = \"hsl(var(--dock-text-muted))\";\n });\n headerEl.appendChild(restoreBtn);\n this.element.appendChild(headerEl);\n const contentEl = document.createElement(\"div\");\n contentEl.style.cssText = \"flex:1;position:relative;overflow:hidden;\";\n this.element.appendChild(contentEl);\n this.contentDisposable = this.callbacks.createContent(panelId, contentEl);\n }\n dispose() {\n if (this.contentDisposable) {\n this.contentDisposable.dispose();\n this.contentDisposable = null;\n }\n if (this.element.parentNode) {\n this.element.parentNode.removeChild(this.element);\n }\n }\n};\n\n// src/theme/DockTheme.ts\nvar COLOR_TO_CSS = {\n bg: \"--dock-bg\",\n surface: \"--dock-surface\",\n surfaceAlt: \"--dock-surface-alt\",\n panelHeader: \"--dock-panel-header\",\n tabBar: \"--dock-tab-bar\",\n tabActive: \"--dock-tab-active\",\n tabText: \"--dock-tab-text\",\n tabTextActive: \"--dock-tab-text-active\",\n text: \"--dock-text\",\n textSecondary: \"--dock-text-secondary\",\n textMuted: \"--dock-text-muted\",\n border: \"--dock-border\",\n splitter: \"--dock-splitter\",\n splitterHover: \"--dock-splitter-hover\",\n hover: \"--dock-hover\",\n primary: \"--dock-primary\",\n floatShadow: \"--dock-float-shadow\"\n};\nfunction applyTheme(container, theme) {\n const colors = theme.colors;\n for (const [key, cssVar] of Object.entries(COLOR_TO_CSS)) {\n const value = colors[key];\n if (value !== void 0) {\n container.style.setProperty(cssVar, value);\n }\n }\n container.style.setProperty(\"--dock-unpinned-bg\", colors.surfaceAlt);\n container.style.setProperty(\"--dock-maximize-overlay-bg\", colors.bg);\n container.style.setProperty(\"--dock-tab-overflow-bg\", colors.surfaceAlt);\n container.style.setProperty(\"--dock-tab-overflow-hover\", colors.hover);\n container.style.setProperty(\"--dock-scrollbar-thumb\", colors.textMuted);\n container.style.setProperty(\"--dock-scrollbar-track\", \"transparent\");\n}\nvar hsl = (h, s, l) => `${h} ${s}% ${l}%`;\nfunction createTheme(name, mode, base, accent, overrides) {\n const { hue: h, sat: s } = base;\n const { hue: ah, sat: as_ } = accent;\n let colors;\n if (mode === \"light\") {\n const bl = base.light ?? 96;\n const al = accent.light ?? 50;\n const ts = Math.max(s - 6, 0);\n colors = {\n bg: hsl(h, s, bl),\n surface: hsl(h, Math.max(s - 5, 0), Math.min(bl + 3, 100)),\n surfaceAlt: hsl(h, Math.max(s - 2, 0), bl - 1),\n panelHeader: hsl(h, Math.max(s - 2, 0), bl - 4),\n tabBar: hsl(h, Math.max(s - 5, 0), bl - 3),\n tabActive: hsl(h, Math.max(s - 5, 0), Math.min(bl + 3, 100)),\n tabText: hsl(h - 10, Math.max(ts - 8, 0), 35),\n tabTextActive: hsl(ah, as_, al),\n text: hsl(h - 10, Math.max(ts - 2, 0), 15),\n textSecondary: hsl(h - 10, Math.max(ts - 8, 0), 32),\n textMuted: hsl(h - 10, Math.max(ts - 12, 0), 48),\n border: hsl(h, Math.max(s - 6, 0), 80),\n splitter: hsl(h, Math.max(s - 6, 0), 87),\n splitterHover: hsl(ah, as_, al + 8),\n hover: hsl(h, Math.max(s - 5, 0), bl - 3),\n primary: hsl(ah, as_, al),\n floatShadow: hsl(h, Math.max(s, 0), 15)\n };\n } else {\n const bl = base.light ?? 10;\n const al = accent.light ?? 65;\n const ts = Math.round(s * 0.5);\n colors = {\n bg: hsl(h, s, bl),\n surface: hsl(h, s, bl + 3),\n surfaceAlt: hsl(h, Math.max(s - 2, 0), bl + 5),\n panelHeader: hsl(h, Math.max(s - 2, 0), bl + 8),\n tabBar: hsl(h, s, bl + 1),\n tabActive: hsl(h, s, bl + 3),\n tabText: hsl(h - 5, Math.max(ts, 8), 65),\n tabTextActive: hsl(ah, as_, al),\n text: hsl(h - 5, Math.round(s * 0.8), 90),\n textSecondary: hsl(h - 5, Math.max(ts, 8), 68),\n textMuted: hsl(h - 5, Math.max(ts - 3, 6), 50),\n border: hsl(h, Math.max(s - 2, 0), bl + 14),\n splitter: hsl(h, Math.max(s - 2, 0), bl + 10),\n splitterHover: hsl(ah, as_, al - 8),\n hover: hsl(h, Math.max(s - 2, 0), bl + 8),\n primary: hsl(ah, as_, al),\n floatShadow: hsl(h, Math.min(s + 5, 100), Math.max(bl - 7, 0))\n };\n }\n if (overrides) {\n Object.assign(colors, overrides);\n }\n return { name, mode, colors };\n}\nvar vsCodeLight = createTheme(\n \"VS Code Light\",\n \"light\",\n { hue: 220, sat: 20 },\n { hue: 217, sat: 91, light: 50 },\n { floatShadow: \"0 0% 0%\" }\n);\nvar githubLight = createTheme(\n \"GitHub Light\",\n \"light\",\n { hue: 210, sat: 20, light: 97 },\n { hue: 212, sat: 92, light: 45 },\n { floatShadow: \"210 20% 20%\" }\n);\nvar warmLight = createTheme(\n \"Warm Light\",\n \"light\",\n { hue: 40, sat: 30 },\n { hue: 25, sat: 80, light: 45 }\n);\nvar solarizedLight = createTheme(\n \"Solarized Light\",\n \"light\",\n { hue: 44, sat: 87, light: 94 },\n { hue: 175, sat: 59, light: 35 },\n {\n tabText: \"194 14% 35%\",\n text: \"192 81% 14%\",\n textSecondary: \"194 14% 32%\",\n textMuted: \"180 8% 48%\",\n floatShadow: \"44 20% 30%\"\n }\n);\nvar sepiaLight = createTheme(\n \"Sepia\",\n \"light\",\n { hue: 35, sat: 35, light: 94 },\n { hue: 18, sat: 60, light: 42 }\n);\nvar mintLight = createTheme(\n \"Mint\",\n \"light\",\n { hue: 150, sat: 20 },\n { hue: 162, sat: 63, light: 35 }\n);\nvar lavenderLight = createTheme(\n \"Lavender\",\n \"light\",\n { hue: 260, sat: 20 },\n { hue: 262, sat: 52, light: 50 }\n);\nvar vsCodeDark = createTheme(\n \"VS Code Dark\",\n \"dark\",\n { hue: 222, sat: 47, light: 7 },\n { hue: 217, sat: 91, light: 70 },\n { text: \"210 40% 96%\", floatShadow: \"0 0% 0%\" }\n);\nvar draculaDark = createTheme(\n \"Dracula Dark\",\n \"dark\",\n { hue: 231, sat: 15, light: 14 },\n { hue: 265, sat: 90, light: 72 },\n { text: \"60 30% 92%\" }\n);\nvar nordDark = createTheme(\n \"Nord Dark\",\n \"dark\",\n { hue: 220, sat: 16, light: 16 },\n { hue: 193, sat: 43, light: 60 },\n { text: \"219 28% 88%\" }\n);\nvar solarizedDark = createTheme(\n \"Solarized Dark\",\n \"dark\",\n { hue: 192, sat: 81, light: 8 },\n { hue: 175, sat: 59, light: 55 },\n {\n tabText: \"180 8% 65%\",\n text: \"44 87% 94%\",\n textSecondary: \"180 8% 68%\",\n textMuted: \"194 14% 50%\",\n floatShadow: \"192 60% 3%\"\n }\n);\nvar midnightDark = createTheme(\n \"Midnight Blue\",\n \"dark\",\n { hue: 225, sat: 30 },\n { hue: 210, sat: 60, light: 65 }\n);\nvar forestDark = createTheme(\n \"Forest Dark\",\n \"dark\",\n { hue: 160, sat: 18, light: 9 },\n { hue: 152, sat: 50, light: 55 }\n);\nvar slateDark = createTheme(\n \"Slate Dark\",\n \"dark\",\n { hue: 215, sat: 12, light: 11 },\n { hue: 205, sat: 40, light: 62 }\n);\nvar themes = {\n // Light\n vsCodeLight,\n githubLight,\n warmLight,\n solarizedLight,\n sepiaLight,\n mintLight,\n lavenderLight,\n // Dark\n vsCodeDark,\n draculaDark,\n nordDark,\n solarizedDark,\n midnightDark,\n forestDark,\n slateDark\n};\nfunction getThemeByName(name) {\n return Object.values(themes).find((t) => t.name === name);\n}\nfunction getThemesByMode(mode) {\n return Object.values(themes).filter((t) => t.mode === mode);\n}\n\n// src/dom/DockviewComponent.ts\nvar _DockviewComponent = class _DockviewComponent {\n /**\n * Create a new dock layout manager.\n *\n * @param element - The host DOM element. The dock layout will fill this element.\n * @param options - Configuration including initial state and renderer callbacks.\n */\n constructor(element, options) {\n // View maps for incremental rendering\n this.tabGroupViews = /* @__PURE__ */ new Map();\n this.splitViews = /* @__PURE__ */ new Map();\n this.floatingViews = /* @__PURE__ */ new Map();\n this.unpinnedStripViews = /* @__PURE__ */ new Map();\n this.panelApis = /* @__PURE__ */ new Map();\n /** Global content cache: content containers persist across layout changes (float/dock/move) */\n this.contentCache = /* @__PURE__ */ new Map();\n this._api = null;\n this.maximizeOverlay = null;\n this.panelFinder = null;\n this.debugOverlayEl = null;\n // ── Event delegation: action buttons ────────────────────────────\n this.onActionClick = (e) => {\n if (e.button !== 0)\n return;\n const target = e.target;\n const btn = target.closest(\"button[data-action]\");\n if (!btn)\n return;\n e.stopPropagation();\n const action = btn.getAttribute(\"data-action\");\n const panelId = btn.getAttribute(\"data-panel-id\") || \"\";\n switch (action) {\n case \"close\": {\n if (this.options.onWillClose) {\n const event = createPreventableEvent(\"willClose\", panelId);\n this.options.onWillClose(event, panelId);\n if (event.defaultPrevented)\n return;\n }\n this.dispatch({ type: \"CLOSE_PANEL\", payload: { panelId } });\n break;\n }\n case \"maximize\": {\n this.dispatch({ type: \"MAXIMIZE_PANEL\", payload: { panelId } });\n break;\n }\n case \"restore\": {\n this.dispatch({ type: \"RESTORE_PANEL\", payload: { panelId } });\n break;\n }\n case \"float\": {\n const rect = btn.closest(\".dock-tab-group\")?.getBoundingClientRect();\n const rootRect = this.rootEl.getBoundingClientRect();\n const fw = 400, fh = 300;\n let fx = rect ? rect.left + 40 : 200;\n let fy = rect ? rect.top + 40 : 200;\n fx = Math.max(rootRect.left, Math.min(fx, rootRect.right - fw - 20));\n fy = Math.max(rootRect.top, Math.min(fy, rootRect.bottom - fh - 20));\n fx -= rootRect.left;\n fy -= rootRect.top;\n this.dispatch({\n type: \"FLOAT_PANEL\",\n payload: { panelId, x: fx, y: fy, width: fw, height: fh }\n });\n break;\n }\n case \"unpin\": {\n this.dispatch({ type: \"UNPIN_PANEL\", payload: { panelId } });\n break;\n }\n case \"dock-back\": {\n this.dispatch({\n type: \"DOCK_FLOATING\",\n payload: { panelId, targetTabGroupId: \"default\", position: \"center\" }\n });\n break;\n }\n case \"pin\": {\n this.dispatch({ type: \"PIN_PANEL\", payload: { panelId } });\n break;\n }\n }\n };\n this.container = element;\n this.options = options;\n this.state = options.initialState;\n this.historyManager = new StateHistoryManager();\n this.rootEl = document.createElement(\"div\");\n this.rootEl.className = \"dock-manager-root\";\n this.rootEl.style.cssText = \"position:relative;width:100%;height:100%;overflow:hidden;display:flex;flex-direction:column;background:hsl(var(--dock-bg));\";\n this.rootEl.tabIndex = -1;\n this.applyThemeOption(options.theme);\n this.layoutRowEl = document.createElement(\"div\");\n this.layoutRowEl.style.cssText = \"flex:1;display:flex;flex-direction:row;overflow:hidden;position:relative;\";\n this.leftStripContainer = document.createElement(\"div\");\n this.leftStripContainer.style.cssText = \"position:relative;display:none;\";\n this.layoutRowEl.appendChild(this.leftStripContainer);\n this.centerEl = document.createElement(\"div\");\n this.centerEl.style.cssText = \"flex:1;overflow:hidden;position:relative;\";\n this.layoutRowEl.appendChild(this.centerEl);\n this.rightStripContainer = document.createElement(\"div\");\n this.rightStripContainer.style.cssText = \"position:relative;display:none;\";\n this.layoutRowEl.appendChild(this.rightStripContainer);\n this.topStripContainer = document.createElement(\"div\");\n this.topStripContainer.style.cssText = \"position:relative;display:none;\";\n this.rootEl.appendChild(this.topStripContainer);\n this.rootEl.appendChild(this.layoutRowEl);\n this.bottomStripContainer = document.createElement(\"div\");\n this.bottomStripContainer.style.cssText = \"position:relative;display:none;\";\n this.rootEl.appendChild(this.bottomStripContainer);\n this.layoutContentEl = document.createElement(\"div\");\n this.layoutContentEl.style.cssText = \"width:100%;height:100%;\";\n this.centerEl.appendChild(this.layoutContentEl);\n this.container.appendChild(this.rootEl);\n this.rootEl.addEventListener(\"mousedown\", this.onActionClick);\n this.dragManager = new DockDragManager({\n containerElement: this.rootEl,\n onDrop: (sourceId, targetId, position) => {\n const isFloating = this.state.floatingPanels.some((fp) => fp.panelId === sourceId);\n if (targetId === \"__root__\") {\n if (isFloating) {\n this.dispatch({ type: \"DOCK_FLOATING\", payload: { panelId: sourceId, targetTabGroupId: findFirstTabGroup(this.state.layout) || \"\", position: \"center\" } });\n this.dispatch({ type: \"DOCK_TO_EDGE\", payload: { panelId: sourceId, edge: position } });\n } else {\n this.dispatch({ type: \"DOCK_TO_EDGE\", payload: { panelId: sourceId, edge: position } });\n }\n } else if (isFloating) {\n this.dispatch({ type: \"DOCK_FLOATING\", payload: { panelId: sourceId, targetTabGroupId: targetId, position } });\n } else {\n this.dispatch({ type: \"MOVE_PANEL\", payload: { panelId: sourceId, targetTabGroupId: targetId, position } });\n }\n },\n onFloat: (sourceId, x, y) => {\n this.dispatch({\n type: \"FLOAT_PANEL\",\n payload: { panelId: sourceId, x, y, width: 400, height: 300 }\n });\n },\n onSelect: (sourceId) => {\n const tabGroupId = findTabGroupForPanel(this.state.layout, sourceId);\n if (tabGroupId) {\n this.dispatch({ type: \"SET_ACTIVE_PANEL\", payload: { tabGroupId, panelId: sourceId } });\n }\n this.dispatch({ type: \"SET_ACTIVE_PANE\", payload: { panelId: sourceId } });\n },\n onReorderTab: (tabGroupId, panelId, newIndex) => {\n this.dispatch({ type: \"REORDER_TABS\", payload: { tabGroupId, panelId, newIndex } });\n },\n onWillDrop: this.options.onWillDrop ? (event, sourceId, targetId, position) => {\n this.options.onWillDrop?.(event, sourceId, targetId, position);\n } : void 0,\n theme: this.resolveThemeMode(options.theme)\n });\n this.focusManager = new FocusManager({\n containerElement: this.rootEl,\n onFocusChanged: (panelId) => {\n if (panelId) {\n this.dispatch({ type: \"SET_ACTIVE_PANE\", payload: { panelId } });\n }\n },\n onNavigate: (direction) => {\n this.dispatch({ type: \"NAVIGATE\", payload: { direction } });\n },\n onCloseActivePanel: () => {\n const activePanelId = this.state.activePaneId;\n if (activePanelId && this.state.panels[activePanelId]?.closable !== false) {\n if (this.options.onWillClose) {\n const event = createPreventableEvent(\"willClose\", activePanelId);\n this.options.onWillClose(event, activePanelId);\n if (event.defaultPrevented)\n return;\n }\n this.dispatch({ type: \"CLOSE_PANEL\", payload: { panelId: activePanelId } });\n }\n },\n onNavigateTabGroup: (direction) => {\n this.dispatch({ type: \"NAVIGATE\", payload: { direction } });\n }\n });\n this.keyboardManager = new KeyboardManager({\n containerElement: this.rootEl,\n dispatch: (action) => this.dispatch(action),\n getState: () => this.state,\n onUndo: () => this.undo(),\n onRedo: () => this.redo(),\n onPanelFinder: () => this.panelFinder?.toggle()\n });\n this.panelFinder = new PanelFinder({\n containerElement: this.rootEl,\n getState: () => this.state,\n onActivatePanel: (panelId) => {\n const tabGroupId = findTabGroupForPanel(this.state.layout, panelId);\n if (tabGroupId) {\n this.dispatch({ type: \"SET_ACTIVE_PANEL\", payload: { tabGroupId, panelId } });\n }\n this.dispatch({ type: \"SET_ACTIVE_PANE\", payload: { panelId } });\n }\n });\n this.render();\n }\n dispatch(action) {\n const prevState = this.state;\n if (!_DockviewComponent.NON_UNDOABLE_ACTIONS.has(action.type)) {\n this.historyManager.push(prevState);\n }\n try {\n this.state = dockReducer(this.state, action);\n } catch (err) {\n console.error(\"[DockviewComponent] Reducer error for action\", action.type, err);\n return;\n }\n if (this.state !== prevState) {\n try {\n this.render();\n } catch (renderErr) {\n console.error(\"[DockviewComponent] Render error after action\", action.type, renderErr);\n }\n try {\n this.options.onStateChange?.(this.state);\n } catch (cbErr) {\n console.error(\"[DockviewComponent] onStateChange callback error:\", cbErr);\n }\n }\n }\n /** Undo the last state change. */\n undo() {\n const prevState = this.historyManager.undo(this.state);\n if (prevState) {\n this.state = prevState;\n this.render();\n this.options.onStateChange?.(this.state);\n }\n }\n /** Redo a previously undone state change. */\n redo() {\n const nextState = this.historyManager.redo(this.state);\n if (nextState) {\n this.state = nextState;\n this.render();\n this.options.onStateChange?.(this.state);\n }\n }\n /**\n * Get the current dock manager state.\n *\n * @returns The current {@link DockManagerState}.\n */\n getState() {\n return this.state;\n }\n /** Get a high-level API for programmatic control (lazy-initialized). */\n get api() {\n if (!this._api) {\n this._api = new DockviewApi(\n () => this.state,\n (action) => this.dispatch(action),\n () => this.undo(),\n () => this.redo()\n );\n this._api._setDebugOverlayHandler((enabled) => this.setDebugOverlay(enabled));\n }\n return this._api;\n }\n // ── Theme helpers ──────────────────────────────────────────────────\n /** Resolve a theme option to a 'light' | 'dark' mode string */\n resolveThemeMode(theme) {\n if (!theme)\n return \"light\";\n if (typeof theme === \"string\")\n return theme;\n return theme.mode;\n }\n /** Apply theme option — handles string ('light'/'dark') or DockTheme object */\n applyThemeOption(theme) {\n const mode = this.resolveThemeMode(theme);\n if (mode === \"dark\") {\n this.rootEl.classList.add(\"dark\");\n } else {\n this.rootEl.classList.remove(\"dark\");\n }\n if (typeof theme === \"object\" && theme !== null) {\n applyTheme(this.rootEl, theme);\n } else {\n applyTheme(this.rootEl, mode === \"dark\" ? vsCodeDark : vsCodeLight);\n }\n if (this.dragManager) {\n this.dragManager.setTheme(mode);\n }\n }\n /**\n * Update component options at runtime (e.g., switch theme or change callbacks).\n *\n * @param options - Partial options to merge into the current configuration.\n */\n updateOptions(options) {\n Object.assign(this.options, options);\n if (options.theme !== void 0) {\n this.applyThemeOption(options.theme);\n }\n if (options.onWillDrop !== void 0) {\n this.dragManager.setOnWillDrop(\n options.onWillDrop ? (event, sourceId, targetId, position) => {\n options.onWillDrop?.(event, sourceId, targetId, position);\n } : void 0\n );\n }\n }\n /**\n * Get or create a {@link PanelApi} for a given panel.\n *\n * The returned API is wired to dispatch `UPDATE_PANEL_CONFIG` actions\n * back into this component. Panel APIs are cached and reused across renders.\n *\n * @param panelId - The panel to get an API for.\n * @returns The PanelApi instance for the given panel.\n */\n getPanelApi(panelId) {\n let api = this.panelApis.get(panelId);\n if (!api) {\n api = new PanelApi(panelId);\n api._setConfigAccessor(() => this.state.panels[panelId]);\n api._setUpdateHandler((id, updates) => {\n this.dispatch({ type: \"UPDATE_PANEL_CONFIG\", payload: { panelId: id, updates } });\n });\n api._setAttentionHandler((id, attention) => {\n const tabEl = this.rootEl.querySelector(`[data-tab-id=\"${id}\"]`);\n if (tabEl) {\n tabEl.classList.toggle(\"dock-tab-attention\", attention);\n }\n });\n this.panelApis.set(panelId, api);\n }\n return api;\n }\n /**\n * Dispose PanelApis for panels that no longer exist in state.\n */\n cleanupPanelApis() {\n for (const [panelId, api] of this.panelApis) {\n if (!this.state.panels[panelId]) {\n api._dispose();\n this.panelApis.delete(panelId);\n this.destroyContent(panelId);\n }\n }\n for (const panelId of this.contentCache.keys()) {\n if (!this.state.panels[panelId]) {\n this.destroyContent(panelId);\n }\n }\n }\n /** Enable or disable the debug overlay showing layout IDs and split ratios. */\n setDebugOverlay(enabled) {\n if (enabled) {\n if (!this.debugOverlayEl) {\n this.debugOverlayEl = document.createElement(\"div\");\n this.debugOverlayEl.className = \"dock-debug-overlay\";\n this.debugOverlayEl.style.cssText = \"position:absolute;inset:0;pointer-events:none;z-index:10030;\";\n this.rootEl.appendChild(this.debugOverlayEl);\n }\n this.updateDebugOverlay();\n } else {\n if (this.debugOverlayEl) {\n this.debugOverlayEl.remove();\n this.debugOverlayEl = null;\n }\n }\n }\n /** Update the debug overlay with current layout info. */\n updateDebugOverlay() {\n if (!this.debugOverlayEl)\n return;\n this.debugOverlayEl.innerHTML = \"\";\n const groups = this.rootEl.querySelectorAll(\"[data-dock-target]\");\n groups.forEach((el) => {\n const id = el.getAttribute(\"data-dock-target\");\n const panelId = el.getAttribute(\"data-panel-id\");\n const rect = el.getBoundingClientRect();\n const rootRect = this.rootEl.getBoundingClientRect();\n const label = document.createElement(\"div\");\n label.style.cssText = `position:absolute;left:${rect.left - rootRect.left}px;top:${rect.top - rootRect.top}px;background:rgba(0,0,0,0.6);color:#fff;font-size:9px;padding:1px 4px;border-radius:2px;font-family:monospace;z-index:1;`;\n label.textContent = `${id} | ${panelId || \"\"}`;\n this.debugOverlayEl.appendChild(label);\n });\n const splitters = this.rootEl.querySelectorAll(\".dock-splitter\");\n splitters.forEach((el) => {\n const val = el.getAttribute(\"aria-valuenow\");\n if (val) {\n const rect = el.getBoundingClientRect();\n const rootRect = this.rootEl.getBoundingClientRect();\n const label = document.createElement(\"div\");\n label.style.cssText = `position:absolute;left:${rect.left - rootRect.left}px;top:${rect.top - rootRect.top}px;background:rgba(128,0,255,0.7);color:#fff;font-size:9px;padding:1px 3px;border-radius:2px;font-family:monospace;`;\n label.textContent = `${val}%`;\n this.debugOverlayEl.appendChild(label);\n }\n });\n }\n /**\n * Clean up all resources: dispose sub-managers, views, panel APIs, and\n * remove the root DOM element from the container.\n *\n * After calling `dispose()`, this instance must not be used again.\n */\n dispose() {\n this.dragManager.dispose();\n this.focusManager.dispose();\n this.keyboardManager.dispose();\n this.panelFinder?.dispose();\n for (const [, api] of this.panelApis)\n api._dispose();\n this.panelApis.clear();\n for (const [, view] of this.tabGroupViews)\n view.dispose();\n this.tabGroupViews.clear();\n for (const [, view] of this.splitViews)\n view.dispose();\n this.splitViews.clear();\n for (const [, view] of this.floatingViews)\n view.dispose();\n this.floatingViews.clear();\n for (const [, view] of this.unpinnedStripViews)\n view.dispose();\n this.unpinnedStripViews.clear();\n if (this.maximizeOverlay) {\n this.maximizeOverlay.dispose();\n this.maximizeOverlay = null;\n }\n for (const panelId of this.contentCache.keys()) {\n this.destroyContent(panelId);\n }\n this.rootEl.removeEventListener(\"mousedown\", this.onActionClick);\n if (this.rootEl.parentNode) {\n this.rootEl.parentNode.removeChild(this.rootEl);\n }\n }\n // ── Content management ──────────────────────────────────────────\n /**\n * Get or create a content container for a panel. The container is cached\n * so that when a panel moves between locations (tab group → floating → tab group),\n * the content is preserved by reparenting the DOM element instead of destroying\n * and recreating it.\n */\n getOrCreateContent(panelId, parentContainer) {\n const cached = this.contentCache.get(panelId);\n if (cached) {\n cached.generation++;\n const myGen = cached.generation;\n parentContainer.appendChild(cached.container);\n return {\n dispose: () => {\n if (cached.generation === myGen) {\n cached.container.remove();\n }\n }\n };\n }\n const container = document.createElement(\"div\");\n container.style.cssText = \"width:100%;height:100%;overflow:hidden;\";\n parentContainer.appendChild(container);\n const disposable = this.options.createContent(panelId, container, this.getPanelApi(panelId));\n const entry = { container, disposable, generation: 0 };\n this.contentCache.set(panelId, entry);\n return {\n dispose: () => {\n if (entry.generation === 0) {\n container.remove();\n }\n }\n };\n }\n /**\n * Permanently destroy a panel's cached content (called when panel is closed).\n */\n destroyContent(panelId) {\n const cached = this.contentCache.get(panelId);\n if (cached) {\n cached.disposable.dispose();\n cached.container.remove();\n this.contentCache.delete(panelId);\n }\n }\n // ── Rendering ───────────────────────────────────────────────────\n render() {\n try {\n this.renderLayout();\n this.renderFloatingPanels();\n this.renderUnpinnedStrips();\n this.renderMaximizeOverlay();\n } catch (err) {\n console.error(\"[DockviewComponent] Render error:\", err);\n }\n }\n // ── Layout rendering ────────────────────────────────────────────\n renderLayout() {\n const layoutEl = this.renderLayoutNode(this.state.layout);\n if (this.layoutContentEl.firstChild !== layoutEl) {\n while (this.layoutContentEl.firstChild) {\n this.layoutContentEl.removeChild(this.layoutContentEl.firstChild);\n }\n this.layoutContentEl.appendChild(layoutEl);\n }\n while (this.layoutContentEl.lastChild !== this.layoutContentEl.firstChild) {\n if (this.layoutContentEl.lastChild) {\n this.layoutContentEl.removeChild(this.layoutContentEl.lastChild);\n }\n }\n this.cleanupStaleViews();\n this.cleanupPanelApis();\n }\n renderLayoutNode(node) {\n if (node.type === \"tabgroup\") {\n return this.renderTabGroup(node);\n } else {\n return this.renderSplit(node);\n }\n }\n renderTabGroup(node) {\n const existing = this.tabGroupViews.get(node.id);\n if (existing) {\n existing.update(node, this.state.panels, this.state.activePaneId, this.state.maximizedPanelId);\n return existing.element;\n }\n const callbacks = {\n onClosePanel: (panelId) => {\n if (this.options.onWillClose) {\n const event = createPreventableEvent(\"willClose\", panelId);\n this.options.onWillClose(event, panelId);\n if (event.defaultPrevented)\n return;\n }\n this.dispatch({ type: \"CLOSE_PANEL\", payload: { panelId } });\n },\n onFloatPanel: (panelId) => {\n this.dispatch({\n type: \"FLOAT_PANEL\",\n payload: { panelId, x: 200, y: 200, width: 400, height: 300 }\n });\n },\n onMaximizePanel: (panelId) => {\n this.dispatch({ type: \"MAXIMIZE_PANEL\", payload: { panelId } });\n },\n onRestorePanel: (panelId) => {\n this.dispatch({ type: \"RESTORE_PANEL\", payload: { panelId } });\n },\n onUnpinPanel: (panelId) => {\n this.dispatch({ type: \"UNPIN_PANEL\", payload: { panelId } });\n },\n onSetActivePanel: (tabGroupId, panelId) => {\n this.dispatch({ type: \"SET_ACTIVE_PANEL\", payload: { tabGroupId, panelId } });\n },\n onSetActivePane: (panelId) => {\n this.dispatch({ type: \"SET_ACTIVE_PANE\", payload: { panelId } });\n },\n onToggleMaximize: (panelId) => {\n if (this.state.maximizedPanelId === panelId) {\n this.dispatch({ type: \"RESTORE_PANEL\", payload: { panelId } });\n } else {\n this.dispatch({ type: \"MAXIMIZE_PANEL\", payload: { panelId } });\n }\n },\n createContent: (panelId, container) => this.getOrCreateContent(panelId, container),\n createTab: this.options.createTab,\n createHeaderActions: this.options.createHeaderActions\n };\n const view = new TabGroupView(\n node,\n this.state.panels,\n this.state.activePaneId,\n this.state.maximizedPanelId,\n callbacks\n );\n this.tabGroupViews.set(node.id, view);\n return view.element;\n }\n renderSplit(node) {\n const existing = this.splitViews.get(node.id);\n if (existing) {\n const containers = existing.getChildContainers();\n if (containers.length === node.children.length) {\n existing.updateSizes(node.sizes);\n for (let i = 0; i < node.children.length; i++) {\n const childEl = this.renderLayoutNode(node.children[i]);\n const container = containers[i];\n if (container.firstChild !== childEl) {\n while (container.firstChild) {\n container.removeChild(container.firstChild);\n }\n container.appendChild(childEl);\n }\n }\n return existing.element;\n } else {\n if (existing.element.parentNode) {\n existing.element.parentNode.removeChild(existing.element);\n }\n existing.dispose();\n this.splitViews.delete(node.id);\n }\n }\n const view = new SplitView(node, {\n onResizeSplit: (splitId, sizes) => {\n this.dispatch({ type: \"RESIZE_SPLIT\", payload: { splitId, sizes } });\n },\n createChildView: (childNode) => this.renderLayoutNode(childNode)\n });\n this.splitViews.set(node.id, view);\n return view.element;\n }\n // ── Floating panels ─────────────────────────────────────────────\n renderFloatingPanels() {\n const currentIds = new Set(this.state.floatingPanels.map((fp) => fp.panelId));\n for (const [id, view] of this.floatingViews) {\n if (!currentIds.has(id)) {\n view.dispose();\n this.floatingViews.delete(id);\n }\n }\n for (const fp of this.state.floatingPanels) {\n const panel = this.state.panels[fp.panelId];\n if (!panel)\n continue;\n const existing = this.floatingViews.get(fp.panelId);\n if (existing) {\n existing.update(fp, panel, this.state.activePaneId);\n } else {\n const callbacks = {\n onUpdateFloating: (panelId, updates) => {\n this.dispatch({\n type: \"UPDATE_FLOATING\",\n payload: { panelId, ...updates }\n });\n },\n onBringToFront: (panelId) => {\n this.dispatch({ type: \"BRING_TO_FRONT\", payload: { panelId } });\n },\n onDockBack: (panelId) => {\n const targetId = findFirstTabGroup(this.state.layout);\n if (targetId) {\n this.dispatch({\n type: \"DOCK_FLOATING\",\n payload: { panelId, targetTabGroupId: targetId, position: \"center\" }\n });\n }\n },\n onClosePanel: (panelId) => {\n if (this.options.onWillClose) {\n const event = createPreventableEvent(\"willClose\", panelId);\n this.options.onWillClose(event, panelId);\n if (event.defaultPrevented)\n return;\n }\n this.dispatch({ type: \"CLOSE_PANEL\", payload: { panelId } });\n },\n onSetActivePane: (panelId) => {\n this.dispatch({ type: \"SET_ACTIVE_PANE\", payload: { panelId } });\n },\n onDockToTarget: (panelId, targetId, position) => {\n this.dispatch({\n type: \"DOCK_FLOATING\",\n payload: { panelId, targetTabGroupId: targetId, position }\n });\n },\n getDragManager: () => this.dragManager,\n createContent: (panelId, container) => this.getOrCreateContent(panelId, container)\n };\n const view = new FloatingWindowView(fp, panel, this.state.activePaneId, callbacks);\n this.floatingViews.set(fp.panelId, view);\n this.rootEl.appendChild(view.element);\n }\n }\n }\n // ── Unpinned strips ─────────────────────────────────────────────\n renderUnpinnedStrips() {\n const edges = [\"left\", \"right\", \"top\", \"bottom\"];\n for (const edge of edges) {\n const edgePanels = this.state.unpinnedPanels.filter((p) => p.edge === edge);\n const container = edge === \"left\" ? this.leftStripContainer : edge === \"right\" ? this.rightStripContainer : edge === \"top\" ? this.topStripContainer : this.bottomStripContainer;\n if (edgePanels.length === 0) {\n const existing2 = this.unpinnedStripViews.get(edge);\n if (existing2) {\n existing2.dispose();\n this.unpinnedStripViews.delete(edge);\n }\n container.style.display = \"none\";\n continue;\n }\n container.style.display = \"\";\n const existing = this.unpinnedStripViews.get(edge);\n if (existing) {\n existing.update(edgePanels, this.state.panels);\n } else {\n const view = new UnpinnedStripView(edge, edgePanels, this.state.panels, {\n onPinPanel: (panelId) => {\n this.dispatch({ type: \"PIN_PANEL\", payload: { panelId } });\n },\n onClosePanel: (panelId) => {\n if (this.options.onWillClose) {\n const event = createPreventableEvent(\"willClose\", panelId);\n this.options.onWillClose(event, panelId);\n if (event.defaultPrevented)\n return;\n }\n this.dispatch({ type: \"CLOSE_PANEL\", payload: { panelId } });\n },\n createContent: (panelId, cont) => this.getOrCreateContent(panelId, cont)\n });\n this.unpinnedStripViews.set(edge, view);\n container.appendChild(view.stripEl);\n }\n }\n }\n // ── Maximize overlay ────────────────────────────────────────────\n renderMaximizeOverlay() {\n if (this.state.maximizedPanelId) {\n const panel = this.state.panels[this.state.maximizedPanelId];\n if (panel) {\n if (this.maximizeOverlay && this.maximizeOverlayPanelId !== this.state.maximizedPanelId) {\n this.maximizeOverlay.dispose();\n this.maximizeOverlay = null;\n }\n if (!this.maximizeOverlay) {\n this.maximizeOverlayPanelId = this.state.maximizedPanelId;\n this.maximizeOverlay = new MaximizeOverlayView(\n this.state.maximizedPanelId,\n panel,\n {\n onRestorePanel: (panelId) => {\n this.dispatch({ type: \"RESTORE_PANEL\", payload: { panelId } });\n },\n createContent: (panelId, container) => this.getOrCreateContent(panelId, container)\n }\n );\n this.rootEl.appendChild(this.maximizeOverlay.element);\n }\n }\n } else if (this.maximizeOverlay) {\n this.maximizeOverlay.dispose();\n this.maximizeOverlay = null;\n this.maximizeOverlayPanelId = void 0;\n }\n }\n // ── Cleanup stale views ─────────────────────────────────────────\n cleanupStaleViews() {\n const currentTabGroupIds = /* @__PURE__ */ new Set();\n const currentSplitIds = /* @__PURE__ */ new Set();\n this.collectNodeIds(this.state.layout, currentTabGroupIds, currentSplitIds);\n for (const [id, view] of this.tabGroupViews) {\n if (!currentTabGroupIds.has(id)) {\n view.dispose();\n this.tabGroupViews.delete(id);\n }\n }\n for (const [id, view] of this.splitViews) {\n if (!currentSplitIds.has(id)) {\n view.dispose();\n this.splitViews.delete(id);\n }\n }\n }\n collectNodeIds(node, tabGroupIds, splitIds) {\n if (node.type === \"tabgroup\") {\n tabGroupIds.add(node.id);\n } else {\n splitIds.add(node.id);\n for (const child of node.children) {\n this.collectNodeIds(child, tabGroupIds, splitIds);\n }\n }\n }\n};\n// ── Public API ──────────────────────────────────────────────────\n/**\n * Dispatch a {@link DockAction} to update state and re-render.\n *\n * If the reducer throws, the error is logged and the previous valid state\n * is preserved. If the state did not change (same reference), rendering is skipped.\n *\n * @param action - The action to dispatch.\n */\n/** Actions that are purely visual / navigational — don't push undo state for these */\n_DockviewComponent.NON_UNDOABLE_ACTIONS = /* @__PURE__ */ new Set([\n \"SET_ACTIVE_PANEL\",\n \"SET_ACTIVE_PANE\",\n \"NAVIGATE\",\n \"BRING_TO_FRONT\",\n \"UPDATE_FLOATING\",\n \"ACTIVATE_OVERFLOW_TAB\",\n \"RESIZE_SPLIT\"\n]);\nvar DockviewComponent = _DockviewComponent;\n\n// src/serialization/serializer.ts\nfunction isValidLayoutNode(node) {\n if (!node || typeof node !== \"object\")\n return false;\n if (node.type === \"tabgroup\") {\n return typeof node.id === \"string\" && Array.isArray(node.panels) && node.panels.every((p) => typeof p === \"string\") && typeof node.activePanel === \"string\";\n }\n if (node.type === \"split\") {\n return typeof node.id === \"string\" && (node.direction === \"horizontal\" || node.direction === \"vertical\") && Array.isArray(node.children) && node.children.every(isValidLayoutNode) && Array.isArray(node.sizes) && node.sizes.every((s) => typeof s === \"number\");\n }\n return false;\n}\nfunction isValidPanelConfig(panel) {\n return panel && typeof panel === \"object\" && typeof panel.id === \"string\" && typeof panel.title === \"string\";\n}\nfunction isValidDockState(data) {\n if (!data || typeof data !== \"object\")\n return false;\n if (!isValidLayoutNode(data.layout))\n return false;\n if (!data.panels || typeof data.panels !== \"object\")\n return false;\n for (const key of Object.keys(data.panels)) {\n if (!isValidPanelConfig(data.panels[key]))\n return false;\n }\n if (!Array.isArray(data.floatingPanels))\n return false;\n for (const fp of data.floatingPanels) {\n if (typeof fp.panelId !== \"string\" || typeof fp.x !== \"number\" || typeof fp.y !== \"number\" || typeof fp.width !== \"number\" || typeof fp.height !== \"number\") {\n return false;\n }\n }\n if (!Array.isArray(data.unpinnedPanels))\n return false;\n for (const up of data.unpinnedPanels) {\n if (typeof up.panelId !== \"string\" || ![\"left\", \"right\", \"bottom\"].includes(up.edge) || typeof up.size !== \"number\") {\n return false;\n }\n }\n if (data.popoutPanels !== void 0) {\n if (!Array.isArray(data.popoutPanels))\n return false;\n for (const pp of data.popoutPanels) {\n if (typeof pp.panelId !== \"string\" || typeof pp.windowName !== \"string\" || typeof pp.x !== \"number\" || typeof pp.y !== \"number\" || typeof pp.width !== \"number\" || typeof pp.height !== \"number\") {\n return false;\n }\n }\n }\n if (typeof data.nextZIndex !== \"number\")\n return false;\n if (data.maximizedPanelId !== void 0 && typeof data.maximizedPanelId !== \"string\")\n return false;\n return true;\n}\nfunction validateIntegrity(state) {\n const warnings = [];\n const knownPanelIds = new Set(Object.keys(state.panels));\n const layoutIds = collectLayoutPanelIds(state.layout);\n const floatingIds = new Set(state.floatingPanels.map((f) => f.panelId));\n const unpinnedIds = new Set(state.unpinnedPanels.map((u) => u.panelId));\n const popoutIds = new Set((state.popoutPanels || []).map((p) => p.panelId));\n for (const id of [...layoutIds, ...floatingIds, ...unpinnedIds, ...popoutIds]) {\n if (!knownPanelIds.has(id)) {\n warnings.push(`Panel \"${id}\" is referenced in layout but has no config in panels record`);\n }\n }\n const allPlaced = [...layoutIds, ...floatingIds, ...unpinnedIds, ...popoutIds];\n const seen = /* @__PURE__ */ new Set();\n for (const id of allPlaced) {\n if (seen.has(id)) {\n warnings.push(`Panel \"${id}\" appears in multiple placements (layout/floating/unpinned/popout)`);\n }\n seen.add(id);\n }\n if (state.maximizedPanelId && !knownPanelIds.has(state.maximizedPanelId)) {\n warnings.push(`maximizedPanelId \"${state.maximizedPanelId}\" does not exist in panels`);\n }\n return warnings;\n}\nfunction normalizeState(data) {\n const state = { ...data };\n if (!state.popoutPanels) {\n state.popoutPanels = [];\n }\n if (!state.activePaneId) {\n state.activePaneId = \"\";\n }\n if (state.popoutPanels.length > 0) {\n for (const popout of state.popoutPanels) {\n state.floatingPanels.push({\n panelId: popout.panelId,\n x: popout.x,\n y: popout.y,\n width: popout.width,\n height: popout.height,\n zIndex: state.nextZIndex++\n });\n }\n state.popoutPanels = [];\n }\n return state;\n}\nfunction serialize(state) {\n const payload = {\n version: 2,\n timestamp: Date.now(),\n state,\n layoutVersion: 1\n };\n return JSON.stringify(payload, null, 2);\n}\nfunction exportAsUrl(state) {\n const json = JSON.stringify(state);\n if (typeof btoa === \"function\") {\n return btoa(unescape(encodeURIComponent(json)));\n }\n return Buffer.from(json, \"utf-8\").toString(\"base64\");\n}\nfunction importFromUrl(urlString) {\n let json;\n if (typeof atob === \"function\") {\n json = decodeURIComponent(escape(atob(urlString)));\n } else {\n json = Buffer.from(urlString, \"base64\").toString(\"utf-8\");\n }\n return JSON.parse(json);\n}\nfunction deserialize(json) {\n let parsed;\n try {\n parsed = JSON.parse(json);\n } catch {\n throw new Error(\"Invalid JSON: unable to parse layout data\");\n }\n let stateData;\n if ((parsed.version === 1 || parsed.version === 2) && parsed.state) {\n stateData = parsed.state;\n } else if (parsed.layout && parsed.panels) {\n stateData = parsed;\n } else {\n throw new Error(\"Unrecognized layout format: missing version or layout/panels fields\");\n }\n if (!isValidDockState(stateData)) {\n throw new Error(\n \"Invalid layout structure: validation failed. Check layout tree, panels, and floating/unpinned arrays.\"\n );\n }\n const normalizedState = normalizeState(stateData);\n const warnings = validateIntegrity(normalizedState);\n return { state: normalizedState, warnings };\n}\nvar STORAGE_KEY = \"dock-manager-layout\";\nfunction saveToLocalStorage(state) {\n try {\n const json = serialize(state);\n localStorage.setItem(STORAGE_KEY, json);\n } catch (e) {\n console.warn(\"Failed to save dock layout to localStorage:\", e);\n }\n}\nfunction loadFromLocalStorage() {\n try {\n const json = localStorage.getItem(STORAGE_KEY);\n if (!json)\n return null;\n return deserialize(json);\n } catch (e) {\n console.warn(\"Failed to load dock layout from localStorage:\", e);\n return null;\n }\n}\nfunction clearLocalStorage() {\n localStorage.removeItem(STORAGE_KEY);\n}\nfunction exportToFile(state, filename) {\n const json = serialize(state);\n const blob = new Blob([json], { type: \"application/json\" });\n const url = URL.createObjectURL(blob);\n try {\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = filename || `dock-layout-${(/* @__PURE__ */ new Date()).toISOString().slice(0, 10)}.json`;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n } finally {\n URL.revokeObjectURL(url);\n }\n}\nfunction importFromFile() {\n return new Promise((resolve, reject) => {\n const input = document.createElement(\"input\");\n input.type = \"file\";\n input.accept = \".json\";\n input.onchange = (e) => {\n const file = e.target.files?.[0];\n if (!file) {\n reject(new Error(\"No file selected\"));\n return;\n }\n const reader = new FileReader();\n reader.onload = () => {\n try {\n const result = deserialize(reader.result);\n resolve(result);\n } catch (err) {\n reject(err);\n }\n };\n reader.onerror = () => reject(new Error(\"Failed to read file\"));\n reader.readAsText(file);\n };\n input.click();\n });\n}\n\n// src/dom/EventEmitter.ts\nvar EventEmitter = class {\n constructor() {\n this.listeners = /* @__PURE__ */ new Set();\n }\n on(listener) {\n this.listeners.add(listener);\n return () => this.listeners.delete(listener);\n }\n emit(value) {\n this.listeners.forEach((fn) => fn(value));\n }\n dispose() {\n this.listeners.clear();\n }\n};\n\n// src/dom/ContextMenuManager.ts\nfunction isSeparator(entry) {\n return \"separator\" in entry;\n}\nvar ContextMenuManager = class {\n constructor(options) {\n this.menuEl = null;\n this.outsideClickHandler = null;\n this.escapeHandler = null;\n // ── Handler ──────────────────────────────────────────────────────\n this.onContextMenu = (e) => {\n const target = e.target;\n const tabEl = target.closest(\"[data-tab-id]\");\n if (!tabEl)\n return;\n e.preventDefault();\n e.stopPropagation();\n const panelId = tabEl.getAttribute(\"data-tab-id\");\n if (!panelId)\n return;\n const state = this.options.getState();\n const panel = state.panels[panelId];\n if (!panel)\n return;\n if (panel.disabled)\n return;\n const tabGroupId = findTabGroupForPanel(state.layout, panelId);\n this.showMenu(panelId, panel, tabGroupId, e.clientX, e.clientY);\n };\n this.options = options;\n this.container = options.containerElement;\n this.resourceStrings = { ...defaultResourceStrings, ...options.resourceStrings };\n this.container.addEventListener(\"contextmenu\", this.onContextMenu);\n }\n /** Remove the contextmenu listener and close any open menu. */\n dispose() {\n this.container.removeEventListener(\"contextmenu\", this.onContextMenu);\n this.closeMenu();\n }\n // ── Menu construction ────────────────────────────────────────────\n buildMenuEntries(panelId, panel, tabGroupId) {\n const state = this.options.getState();\n const entries = [];\n entries.push({\n label: this.resourceStrings.close,\n action: () => {\n this.options.dispatch({ type: \"CLOSE_PANEL\", payload: { panelId } });\n },\n disabled: panel.closable === false\n });\n if (tabGroupId) {\n const group = this.findTabGroup(state.layout, tabGroupId);\n if (group && group.panels.length > 1) {\n entries.push({\n label: this.resourceStrings.closeOthers,\n action: () => {\n const currentState = this.options.getState();\n const currentGroup = this.findTabGroup(currentState.layout, tabGroupId);\n if (currentGroup) {\n for (const pid of currentGroup.panels) {\n if (pid !== panelId && currentState.panels[pid]?.closable !== false) {\n this.options.dispatch({ type: \"CLOSE_PANEL\", payload: { panelId: pid } });\n }\n }\n }\n },\n disabled: false\n });\n entries.push({\n label: this.resourceStrings.closeAll,\n action: () => {\n const currentState = this.options.getState();\n const currentGroup = this.findTabGroup(currentState.layout, tabGroupId);\n if (currentGroup) {\n for (const pid of currentGroup.panels) {\n if (currentState.panels[pid]?.closable !== false) {\n this.options.dispatch({ type: \"CLOSE_PANEL\", payload: { panelId: pid } });\n }\n }\n }\n },\n disabled: false\n });\n const panelIndex = group.panels.indexOf(panelId);\n if (panelIndex < group.panels.length - 1) {\n entries.push({\n label: \"Close to the Right\",\n action: () => {\n const currentState = this.options.getState();\n const currentGroup = this.findTabGroup(currentState.layout, tabGroupId);\n if (currentGroup) {\n const idx = currentGroup.panels.indexOf(panelId);\n for (let i = idx + 1; i < currentGroup.panels.length; i++) {\n const pid = currentGroup.panels[i];\n if (currentState.panels[pid]?.closable !== false) {\n this.options.dispatch({ type: \"CLOSE_PANEL\", payload: { panelId: pid } });\n }\n }\n }\n },\n disabled: false\n });\n }\n }\n }\n entries.push({ separator: true });\n entries.push({\n label: this.resourceStrings.float,\n action: () => {\n this.options.dispatch({\n type: \"FLOAT_PANEL\",\n payload: { panelId, x: 200, y: 200, width: 400, height: 300 }\n });\n },\n disabled: panel.floatable === false\n });\n if (panel.allowPinning !== false) {\n const isUnpinned = state.unpinnedPanels.some((up) => up.panelId === panelId);\n if (isUnpinned) {\n entries.push({\n label: this.resourceStrings.pin,\n action: () => {\n this.options.dispatch({ type: \"PIN_PANEL\", payload: { panelId } });\n },\n disabled: false\n });\n } else {\n entries.push({\n label: this.resourceStrings.unpin,\n action: () => {\n this.options.dispatch({ type: \"UNPIN_PANEL\", payload: { panelId } });\n },\n disabled: false\n });\n }\n }\n entries.push({ separator: true });\n entries.push({\n label: this.resourceStrings.maximize,\n action: () => {\n this.options.dispatch({ type: \"MAXIMIZE_PANEL\", payload: { panelId } });\n },\n disabled: false\n });\n return entries;\n }\n // ── Menu display ─────────────────────────────────────────────────\n showMenu(panelId, panel, tabGroupId, x, y) {\n this.closeMenu();\n const entries = this.buildMenuEntries(panelId, panel, tabGroupId);\n const menu = document.createElement(\"div\");\n menu.className = \"dock-context-menu\";\n menu.style.cssText = `position:fixed;z-index:10010;`;\n for (const entry of entries) {\n if (isSeparator(entry)) {\n const sep = document.createElement(\"div\");\n sep.className = \"dock-context-menu-separator\";\n menu.appendChild(sep);\n } else {\n const item = document.createElement(\"div\");\n item.className = \"dock-context-menu-item\" + (entry.disabled ? \" disabled\" : \"\");\n item.textContent = entry.label;\n if (!entry.disabled) {\n item.addEventListener(\"click\", (e) => {\n e.stopPropagation();\n this.closeMenu();\n entry.action();\n });\n }\n menu.appendChild(item);\n }\n }\n document.body.appendChild(menu);\n this.menuEl = menu;\n const menuRect = menu.getBoundingClientRect();\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n let finalX = x;\n let finalY = y;\n if (x + menuRect.width > viewportWidth) {\n finalX = viewportWidth - menuRect.width - 4;\n }\n if (y + menuRect.height > viewportHeight) {\n finalY = viewportHeight - menuRect.height - 4;\n }\n if (finalX < 0)\n finalX = 4;\n if (finalY < 0)\n finalY = 4;\n menu.style.left = `${finalX}px`;\n menu.style.top = `${finalY}px`;\n this.outsideClickHandler = (e) => {\n if (!menu.contains(e.target)) {\n this.closeMenu();\n }\n };\n setTimeout(() => {\n if (this.outsideClickHandler) {\n document.addEventListener(\"mousedown\", this.outsideClickHandler);\n }\n }, 0);\n this.escapeHandler = (e) => {\n if (e.key === \"Escape\") {\n this.closeMenu();\n }\n };\n document.addEventListener(\"keydown\", this.escapeHandler);\n }\n closeMenu() {\n if (this.menuEl) {\n if (this.menuEl.parentNode) {\n this.menuEl.parentNode.removeChild(this.menuEl);\n }\n this.menuEl = null;\n }\n if (this.outsideClickHandler) {\n document.removeEventListener(\"mousedown\", this.outsideClickHandler);\n this.outsideClickHandler = null;\n }\n if (this.escapeHandler) {\n document.removeEventListener(\"keydown\", this.escapeHandler);\n this.escapeHandler = null;\n }\n }\n // ── Helpers ──────────────────────────────────────────────────────\n findTabGroup(layout, tabGroupId) {\n if (layout.type === \"tabgroup\") {\n return layout.id === tabGroupId ? layout : null;\n }\n for (const child of layout.children) {\n const found = this.findTabGroup(child, tabGroupId);\n if (found)\n return found;\n }\n return null;\n }\n};\n\n// src/dom/PaneNavigator.ts\nvar PaneNavigator = class {\n constructor(options) {\n this.overlayEl = null;\n this.items = [];\n this.selectedIndex = 0;\n this.isVisible = false;\n // Bound handlers\n this.boundKeyDown = null;\n this.boundKeyUp = null;\n this.options = options;\n }\n /** Show the navigator and highlight the next/previous panel. */\n show(direction) {\n if (!this.isVisible) {\n this.buildItems();\n if (this.items.length === 0)\n return;\n this.createOverlay();\n this.isVisible = true;\n const state = this.options.getState();\n const currentIdx = this.items.findIndex((item) => item.panelId === state.activePaneId);\n this.selectedIndex = currentIdx >= 0 ? currentIdx : 0;\n this.boundKeyDown = this.onKeyDown.bind(this);\n this.boundKeyUp = this.onKeyUp.bind(this);\n document.addEventListener(\"keydown\", this.boundKeyDown, true);\n document.addEventListener(\"keyup\", this.boundKeyUp, true);\n }\n this.moveSelection(direction);\n this.updateHighlight();\n }\n /** Hide the navigator and activate the selected panel. */\n hide() {\n if (!this.isVisible)\n return;\n this.isVisible = false;\n const selectedItem = this.items[this.selectedIndex];\n if (this.overlayEl && this.overlayEl.parentNode) {\n this.overlayEl.parentNode.removeChild(this.overlayEl);\n this.overlayEl = null;\n }\n if (this.boundKeyDown) {\n document.removeEventListener(\"keydown\", this.boundKeyDown, true);\n this.boundKeyDown = null;\n }\n if (this.boundKeyUp) {\n document.removeEventListener(\"keyup\", this.boundKeyUp, true);\n this.boundKeyUp = null;\n }\n if (selectedItem) {\n this.options.onActivate(selectedItem.panelId);\n }\n }\n /** Whether the navigator is currently visible. */\n get visible() {\n return this.isVisible;\n }\n /** Clean up all listeners and DOM elements. */\n dispose() {\n this.hide();\n }\n // ── Private ───────────────────────────────────────────────────────\n buildItems() {\n const state = this.options.getState();\n const allPanelIds = collectAllPanelsOrdered(state.layout);\n const floatingIds = state.floatingPanels.map((fp) => fp.panelId);\n const allIds = [...allPanelIds, ...floatingIds];\n this.items = [];\n for (const pid of allIds) {\n const panel = state.panels[pid];\n if (!panel)\n continue;\n this.items.push({\n panelId: pid,\n title: panel.title,\n icon: panel.icon,\n isDocument: panel.documentOnly === true\n });\n }\n }\n moveSelection(direction) {\n if (this.items.length === 0)\n return;\n if (direction === \"next\") {\n this.selectedIndex = (this.selectedIndex + 1) % this.items.length;\n } else {\n this.selectedIndex = (this.selectedIndex - 1 + this.items.length) % this.items.length;\n }\n }\n onKeyDown(e) {\n if (e.key === \"Tab\" && e.ctrlKey) {\n e.preventDefault();\n e.stopPropagation();\n this.moveSelection(e.shiftKey ? \"previous\" : \"next\");\n this.updateHighlight();\n }\n if (e.key === \"Escape\") {\n e.preventDefault();\n this.hide();\n }\n }\n onKeyUp(e) {\n if (e.key === \"Control\") {\n this.hide();\n }\n }\n createOverlay() {\n const overlay = document.createElement(\"div\");\n overlay.className = \"dock-pane-navigator\";\n overlay.style.cssText = \"position:fixed;top:0;left:0;right:0;bottom:0;z-index:10100;display:flex;align-items:center;justify-content:center;background:rgba(0,0,0,0.3);\";\n const card = document.createElement(\"div\");\n card.style.cssText = \"background:hsl(var(--dock-surface, 0 0% 100%));border:1px solid hsl(var(--dock-border, 220 13% 87%));border-radius:8px;box-shadow:0 8px 32px rgba(0,0,0,0.2);padding:16px;min-width:400px;max-width:600px;display:flex;gap:24px;font-size:12px;color:hsl(var(--dock-text, 0 0% 15%));\";\n const docItems = this.items.filter((i) => i.isDocument);\n const toolItems = this.items.filter((i) => !i.isDocument);\n const createColumn = (title, items) => {\n const col = document.createElement(\"div\");\n col.style.cssText = \"flex:1;min-width:0;\";\n const heading = document.createElement(\"div\");\n heading.style.cssText = \"font-weight:600;margin-bottom:8px;opacity:0.6;font-size:11px;text-transform:uppercase;\";\n heading.textContent = title;\n col.appendChild(heading);\n for (const item of items) {\n const itemEl = document.createElement(\"div\");\n itemEl.className = \"dock-pane-navigator-item\";\n itemEl.setAttribute(\"data-panel-id\", item.panelId);\n itemEl.style.cssText = \"padding:6px 8px;border-radius:4px;display:flex;align-items:center;gap:6px;cursor:pointer;\";\n if (item.icon) {\n const iconEl = document.createElement(\"span\");\n iconEl.textContent = item.icon;\n itemEl.appendChild(iconEl);\n }\n const titleEl = document.createElement(\"span\");\n titleEl.style.cssText = \"overflow:hidden;text-overflow:ellipsis;white-space:nowrap;\";\n titleEl.textContent = item.title;\n itemEl.appendChild(titleEl);\n col.appendChild(itemEl);\n }\n return col;\n };\n if (docItems.length > 0) {\n card.appendChild(createColumn(\"Active Files\", docItems));\n }\n if (toolItems.length > 0) {\n card.appendChild(createColumn(\"Tool Windows\", toolItems));\n }\n if (docItems.length === 0 && toolItems.length === 0) {\n card.appendChild(createColumn(\"Panels\", this.items));\n }\n overlay.appendChild(card);\n this.options.containerElement.appendChild(overlay);\n this.overlayEl = overlay;\n }\n updateHighlight() {\n if (!this.overlayEl)\n return;\n const items = this.overlayEl.querySelectorAll(\".dock-pane-navigator-item\");\n const selectedItem = this.items[this.selectedIndex];\n items.forEach((el) => {\n const panelId = el.getAttribute(\"data-panel-id\");\n const isActive = panelId === selectedItem?.panelId;\n el.className = \"dock-pane-navigator-item\" + (isActive ? \" active\" : \"\");\n el.style.background = isActive ? \"hsl(var(--dock-primary, 217 91% 50%) / 0.15)\" : \"\";\n el.style.color = isActive ? \"hsl(var(--dock-primary, 217 91% 50%))\" : \"\";\n });\n }\n};\nexport {\n ContextMenuManager,\n DockviewApi,\n DockviewComponent,\n EventEmitter,\n KeyboardManager,\n PaneNavigator,\n PanelApi,\n PanelFinder,\n StateHistoryManager,\n applyTheme,\n clearLocalStorage,\n collectAllPanelsOrdered,\n collectLayoutPanelIds,\n countPanels,\n createDefaultState,\n createPreventableEvent,\n createTheme,\n defaultResourceStrings,\n deserialize,\n detectPanelEdge,\n dockReducer,\n draculaDark,\n exportAsUrl,\n exportToFile,\n findAllTabGroups,\n findFirstTabGroup,\n findTabGroupByEdge,\n findTabGroupById,\n findTabGroupForPanel,\n forestDark,\n genId,\n getThemeByName,\n getThemesByMode,\n githubLight,\n importFromFile,\n importFromUrl,\n insertAtEdge,\n insertBySplit,\n insertInGroup,\n isPanelPlaced,\n lavenderLight,\n loadFromLocalStorage,\n midnightDark,\n mintLight,\n movePanel,\n nordDark,\n removePanel,\n resetIdCounter,\n saveToLocalStorage,\n sepiaLight,\n serialize,\n slateDark,\n solarizedDark,\n solarizedLight,\n themes,\n validateState,\n vsCodeDark,\n vsCodeLight,\n warmLight\n};\n","/**\n * Thin React wrapper around the core DockviewComponent.\n *\n * This component:\n * 1. Creates a container div ref\n * 2. Instantiates DockviewComponent from core in useEffect\n * 3. Bridges React content rendering via portals into core-created DOM slots\n * 4. Forwards state changes back to React\n *\n * All DOM rendering, event handling, and layout logic lives in core.\n * React only provides panel content via portals.\n */\nimport React, {\n useRef,\n useEffect,\n useState,\n useImperativeHandle,\n forwardRef,\n} from 'react';\nimport { createPortal } from 'react-dom';\nimport type {\n DockManagerState,\n PanelConfig,\n PreventableDockEvent,\n DockPosition,\n DockTheme,\n DockResourceStrings,\n DockviewApi,\n} from '@widgetstools/dock-manager-core';\nimport {\n DockviewComponent,\n} from '@widgetstools/dock-manager-core';\nimport type {\n DockviewComponentOptions,\n IDisposable,\n} from '@widgetstools/dock-manager-core';\nimport type { DockAction } from '@widgetstools/dock-manager-core';\nimport { PanelApi } from '@widgetstools/dock-manager-core';\n\n// ── Types ────────────────────────────────────────────────────────────\n\n/** Props passed to widget components registered via the `widgets` prop */\nexport interface WidgetProps {\n panelId: string;\n panel: PanelConfig;\n api: PanelApi;\n}\n\nexport interface DockManagerCoreProps {\n /** Initial state for the dock manager */\n initialState: DockManagerState;\n /**\n * Widget registry: maps `panel.widgetType` strings to React components.\n * This is the simplest way to render panel content.\n *\n * Example: `widgets={{ clock: ClockWidget, editor: EditorWidget }}`\n */\n widgets?: Record<string, React.ComponentType<WidgetProps>>;\n /**\n * Render panel content. Called when a panel needs content mounted.\n * If both `widgets` and `renderPanel` are provided, the registry is tried\n * first and `renderPanel` is used as a fallback.\n */\n renderPanel?: (panelId: string, panel: PanelConfig, api: PanelApi) => React.ReactNode;\n /** Optional custom tab renderer */\n renderTab?: (panelId: string, panel: PanelConfig, isActive: boolean) => React.ReactNode;\n /** Optional header action slots */\n renderHeaderActions?: (slot: 'left' | 'right' | 'prefix', tabGroupId: string) => React.ReactNode;\n /** Called with the DockviewApi when the component is ready. Simplest way to access the API. */\n onReady?: (api: DockviewApi) => void;\n /** Called when state changes */\n onStateChange?: (state: DockManagerState) => void;\n /** Called before a panel is closed (preventable) */\n onWillClose?: (event: PreventableDockEvent, panelId: string) => void;\n /** Called before a drop (preventable) */\n onWillDrop?: (event: PreventableDockEvent, sourceId: string, targetId: string, position: DockPosition) => void;\n /** Theme: 'light', 'dark', or a DockTheme object */\n theme?: 'light' | 'dark' | DockTheme;\n /** Whether to show edge dock indicators. Defaults to true. */\n allowRootDock?: boolean;\n /** Custom strings for UI elements (tooltips, context menu, etc.) */\n resourceStrings?: Partial<DockResourceStrings>;\n /** Additional className for the root container */\n className?: string;\n}\n\nexport interface DockManagerCoreHandle {\n /** Dispatch an action to the dock manager */\n dispatch: (action: DockAction) => void;\n /** Get current state */\n getState: () => DockManagerState;\n /** Get the underlying DockviewComponent instance */\n getInstance: () => DockviewComponent | null;\n /** Get the DockviewApi for high-level programmatic control */\n getApi: () => DockviewApi | null;\n}\n\n// ── Portal tracking ──────────────────────────────────────────────────\n\ninterface PortalEntry {\n container: HTMLElement;\n panelId: string;\n type: 'content' | 'tab' | 'headerAction';\n api?: PanelApi;\n isActive?: boolean;\n slot?: 'left' | 'right' | 'prefix';\n tabGroupId?: string;\n}\n\n// ── Component ────────────────────────────────────────────────────────\n\nexport const DockManagerCore = forwardRef<DockManagerCoreHandle, DockManagerCoreProps>(\n function DockManagerCore(props, ref) {\n const {\n initialState,\n widgets,\n renderPanel,\n renderTab,\n renderHeaderActions,\n onReady,\n onStateChange,\n onWillClose,\n onWillDrop,\n theme = 'light',\n allowRootDock,\n resourceStrings,\n className,\n } = props;\n\n const containerRef = useRef<HTMLDivElement>(null);\n const dockRef = useRef<DockviewComponent | null>(null);\n const [portals, setPortals] = useState<Map<string, PortalEntry>>(new Map());\n const [, forceUpdate] = useState(0);\n\n // Keep refs to latest callbacks so core doesn't need to be re-created\n const callbackRefs = useRef({ renderPanel, renderTab, renderHeaderActions, onStateChange, onWillClose, onWillDrop, onReady, widgets });\n callbackRefs.current = { renderPanel, renderTab, renderHeaderActions, onStateChange, onWillClose, onWillDrop, onReady, widgets };\n\n // Initialize DockviewComponent\n useEffect(() => {\n if (!containerRef.current) return;\n\n const addPortal = (key: string, entry: PortalEntry) => {\n setPortals((prev) => new Map(prev).set(key, entry));\n };\n\n const removePortal = (key: string) => {\n setPortals((prev) => {\n const next = new Map(prev);\n next.delete(key);\n return next;\n });\n };\n\n let portalCounter = 0;\n\n const options: DockviewComponentOptions = {\n initialState,\n theme,\n allowRootDock,\n resourceStrings,\n\n createContent: (panelId: string, container: HTMLElement, api: PanelApi): IDisposable => {\n const key = `content:${panelId}:${++portalCounter}`;\n addPortal(key, { container, panelId, type: 'content', api });\n return { dispose: () => removePortal(key) };\n },\n\n createTab: renderTab\n ? (panelId: string, container: HTMLElement, isActive: boolean): IDisposable => {\n const key = `tab:${panelId}:${++portalCounter}`;\n addPortal(key, { container, panelId, type: 'tab', isActive });\n return { dispose: () => removePortal(key) };\n }\n : undefined,\n\n createHeaderActions: renderHeaderActions\n ? (slot, tabGroupId, container): IDisposable => {\n const key = `header:${slot}:${tabGroupId}:${++portalCounter}`;\n addPortal(key, { container, panelId: '', type: 'headerAction', slot, tabGroupId });\n return { dispose: () => removePortal(key) };\n }\n : undefined,\n\n onStateChange: (state: DockManagerState) => {\n callbackRefs.current.onStateChange?.(state);\n forceUpdate((n) => n + 1);\n },\n\n onWillClose: (event, panelId) => {\n callbackRefs.current.onWillClose?.(event, panelId);\n },\n\n onWillDrop: (event, sourceId, targetId, position) => {\n callbackRefs.current.onWillDrop?.(event, sourceId, targetId, position);\n },\n };\n\n const dock = new DockviewComponent(containerRef.current, options);\n dockRef.current = dock;\n\n // Fire onReady with the API\n callbackRefs.current.onReady?.(dock.api);\n\n return () => {\n dock.dispose();\n dockRef.current = null;\n setPortals(new Map());\n };\n }, []); // Only run once on mount\n\n // Sync options when props change\n const themeKey = typeof theme === 'object' ? theme.name : theme;\n useEffect(() => {\n if (!dockRef.current) return;\n dockRef.current.updateOptions({\n ...(theme !== undefined && { theme }),\n ...(allowRootDock !== undefined && { allowRootDock }),\n ...(resourceStrings !== undefined && { resourceStrings }),\n });\n }, [themeKey, allowRootDock, resourceStrings]); // eslint-disable-line react-hooks/exhaustive-deps\n\n // Imperative handle for parent components\n useImperativeHandle(ref, () => ({\n dispatch: (action: DockAction) => dockRef.current?.dispatch(action),\n getState: () => dockRef.current?.getState() ?? initialState,\n getInstance: () => dockRef.current,\n getApi: () => dockRef.current?.api ?? null,\n }));\n\n // Render portals into core-created DOM slots\n const portalElements: React.ReactNode[] = [];\n const state = dockRef.current?.getState();\n const cbs = callbackRefs.current;\n\n portals.forEach((entry, key) => {\n let content: React.ReactNode = null;\n\n switch (entry.type) {\n case 'content': {\n const panel = state?.panels[entry.panelId];\n if (panel && entry.api) {\n // Try widget registry first, then fall back to renderPanel\n const widgetType = panel.widgetType || '';\n const Widget = cbs.widgets?.[widgetType];\n if (Widget) {\n content = <Widget panelId={entry.panelId} panel={panel} api={entry.api} />;\n } else if (cbs.renderPanel) {\n content = cbs.renderPanel(entry.panelId, panel, entry.api);\n }\n }\n break;\n }\n case 'tab': {\n const panel = state?.panels[entry.panelId];\n if (panel && cbs.renderTab) {\n content = cbs.renderTab(entry.panelId, panel, entry.isActive ?? false);\n }\n break;\n }\n case 'headerAction': {\n if (cbs.renderHeaderActions && entry.slot && entry.tabGroupId) {\n content = cbs.renderHeaderActions(entry.slot, entry.tabGroupId);\n }\n break;\n }\n }\n\n if (content !== null && entry.container.isConnected) {\n portalElements.push(createPortal(content, entry.container, key));\n }\n });\n\n return (\n <>\n <div\n ref={containerRef}\n className={className}\n style={{ width: '100%', height: '100%' }}\n />\n {portalElements}\n </>\n );\n }\n);\n","import { useState, useEffect, useCallback } from 'react';\n\ntype Theme = 'light' | 'dark' | 'system';\n\nfunction getSystemTheme(): 'light' | 'dark' {\n if (typeof window === 'undefined') return 'dark';\n return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n}\n\nexport function useTheme(defaultTheme: Theme = 'dark') {\n const [theme, setThemeState] = useState<Theme>(() => {\n if (typeof window === 'undefined') return defaultTheme;\n const stored = window.localStorage?.getItem?.('dock-theme') as Theme | null;\n return stored || defaultTheme;\n });\n\n const resolvedTheme = theme === 'system' ? getSystemTheme() : theme;\n\n useEffect(() => {\n const root = document.documentElement;\n root.classList.remove('light', 'dark');\n root.classList.add(resolvedTheme);\n try {\n window.localStorage?.setItem?.('dock-theme', theme);\n } catch {}\n }, [theme, resolvedTheme]);\n\n // Listen for system theme changes when in \"system\" mode\n useEffect(() => {\n if (theme !== 'system') return;\n const mq = window.matchMedia('(prefers-color-scheme: dark)');\n const handler = () => {\n const root = document.documentElement;\n root.classList.remove('light', 'dark');\n root.classList.add(getSystemTheme());\n };\n mq.addEventListener('change', handler);\n return () => mq.removeEventListener('change', handler);\n }, [theme]);\n\n const setTheme = useCallback((t: Theme) => {\n setThemeState(t);\n }, []);\n\n const toggleTheme = useCallback(() => {\n setThemeState((prev) => {\n const resolved = prev === 'system' ? getSystemTheme() : prev;\n return resolved === 'dark' ? 'light' : 'dark';\n });\n }, []);\n\n return { theme, resolvedTheme, setTheme, toggleTheme };\n}\n"]}
1
+ {"version":3,"sources":["../src/components/dock/DockManagerCore.tsx","../src/hooks/useTheme.ts"],"names":["DockManagerCore","state","useState","useEffect"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Thin React wrapper around the core DockviewComponent.\n *\n * This component:\n * 1. Creates a container div ref\n * 2. Instantiates DockviewComponent from core in useEffect\n * 3. Bridges React content rendering via portals into core-created DOM slots\n * 4. Forwards state changes back to React\n *\n * All DOM rendering, event handling, and layout logic lives in core.\n * React only provides panel content via portals.\n */\nimport React, {\n useRef,\n useEffect,\n useState,\n useImperativeHandle,\n forwardRef,\n} from 'react';\nimport { createPortal } from 'react-dom';\nimport type {\n DockManagerState,\n PanelConfig,\n PreventableDockEvent,\n DockPosition,\n DockTheme,\n DockResourceStrings,\n DockviewApi,\n} from '@widgetstools/dock-manager-core';\nimport {\n DockviewComponent,\n} from '@widgetstools/dock-manager-core';\nimport type {\n DockviewComponentOptions,\n IDisposable,\n} from '@widgetstools/dock-manager-core';\nimport type { DockAction } from '@widgetstools/dock-manager-core';\nimport { PanelApi } from '@widgetstools/dock-manager-core';\n\n// ── Types ────────────────────────────────────────────────────────────\n\n/** Props passed to widget components registered via the `widgets` prop */\nexport interface WidgetProps {\n panelId: string;\n panel: PanelConfig;\n api: PanelApi;\n}\n\nexport interface DockManagerCoreProps {\n /** Initial state for the dock manager */\n initialState: DockManagerState;\n /**\n * Widget registry: maps `panel.widgetType` strings to React components.\n * This is the simplest way to render panel content.\n *\n * Example: `widgets={{ clock: ClockWidget, editor: EditorWidget }}`\n */\n widgets?: Record<string, React.ComponentType<WidgetProps>>;\n /**\n * Render panel content. Called when a panel needs content mounted.\n * If both `widgets` and `renderPanel` are provided, the registry is tried\n * first and `renderPanel` is used as a fallback.\n */\n renderPanel?: (panelId: string, panel: PanelConfig, api: PanelApi) => React.ReactNode;\n /** Optional custom tab renderer */\n renderTab?: (panelId: string, panel: PanelConfig, isActive: boolean) => React.ReactNode;\n /** Optional header action slots */\n renderHeaderActions?: (slot: 'left' | 'right' | 'prefix', tabGroupId: string) => React.ReactNode;\n /** Called with the DockviewApi when the component is ready. Simplest way to access the API. */\n onReady?: (api: DockviewApi) => void;\n /** Called when state changes */\n onStateChange?: (state: DockManagerState) => void;\n /** Called before a panel is closed (preventable) */\n onWillClose?: (event: PreventableDockEvent, panelId: string) => void;\n /** Called before a drop (preventable) */\n onWillDrop?: (event: PreventableDockEvent, sourceId: string, targetId: string, position: DockPosition) => void;\n /** Theme: 'light', 'dark', or a DockTheme object */\n theme?: 'light' | 'dark' | DockTheme;\n /** Whether to show edge dock indicators. Defaults to true. */\n allowRootDock?: boolean;\n /** Custom strings for UI elements (tooltips, context menu, etc.) */\n resourceStrings?: Partial<DockResourceStrings>;\n /** Additional className for the root container */\n className?: string;\n}\n\nexport interface DockManagerCoreHandle {\n /** Dispatch an action to the dock manager */\n dispatch: (action: DockAction) => void;\n /** Get current state */\n getState: () => DockManagerState;\n /** Get the underlying DockviewComponent instance */\n getInstance: () => DockviewComponent | null;\n /** Get the DockviewApi for high-level programmatic control */\n getApi: () => DockviewApi | null;\n}\n\n// ── Portal tracking ──────────────────────────────────────────────────\n\ninterface PortalEntry {\n container: HTMLElement;\n panelId: string;\n type: 'content' | 'tab' | 'headerAction';\n api?: PanelApi;\n isActive?: boolean;\n slot?: 'left' | 'right' | 'prefix';\n tabGroupId?: string;\n}\n\n// ── Component ────────────────────────────────────────────────────────\n\nexport const DockManagerCore = forwardRef<DockManagerCoreHandle, DockManagerCoreProps>(\n function DockManagerCore(props, ref) {\n const {\n initialState,\n widgets,\n renderPanel,\n renderTab,\n renderHeaderActions,\n onReady,\n onStateChange,\n onWillClose,\n onWillDrop,\n theme = 'light',\n allowRootDock,\n resourceStrings,\n className,\n } = props;\n\n const containerRef = useRef<HTMLDivElement>(null);\n const dockRef = useRef<DockviewComponent | null>(null);\n const [portals, setPortals] = useState<Map<string, PortalEntry>>(new Map());\n const [, forceUpdate] = useState(0);\n\n // Keep refs to latest callbacks so core doesn't need to be re-created\n const callbackRefs = useRef({ renderPanel, renderTab, renderHeaderActions, onStateChange, onWillClose, onWillDrop, onReady, widgets });\n callbackRefs.current = { renderPanel, renderTab, renderHeaderActions, onStateChange, onWillClose, onWillDrop, onReady, widgets };\n\n // Initialize DockviewComponent\n useEffect(() => {\n if (!containerRef.current) return;\n\n const addPortal = (key: string, entry: PortalEntry) => {\n setPortals((prev) => new Map(prev).set(key, entry));\n };\n\n const removePortal = (key: string) => {\n setPortals((prev) => {\n const next = new Map(prev);\n next.delete(key);\n return next;\n });\n };\n\n let portalCounter = 0;\n\n const options: DockviewComponentOptions = {\n initialState,\n theme,\n allowRootDock,\n resourceStrings,\n\n createContent: (panelId: string, container: HTMLElement, api: PanelApi): IDisposable => {\n const key = `content:${panelId}:${++portalCounter}`;\n addPortal(key, { container, panelId, type: 'content', api });\n return { dispose: () => removePortal(key) };\n },\n\n createTab: renderTab\n ? (panelId: string, container: HTMLElement, isActive: boolean): IDisposable => {\n const key = `tab:${panelId}:${++portalCounter}`;\n addPortal(key, { container, panelId, type: 'tab', isActive });\n return { dispose: () => removePortal(key) };\n }\n : undefined,\n\n createHeaderActions: renderHeaderActions\n ? (slot, tabGroupId, container): IDisposable => {\n const key = `header:${slot}:${tabGroupId}:${++portalCounter}`;\n addPortal(key, { container, panelId: '', type: 'headerAction', slot, tabGroupId });\n return { dispose: () => removePortal(key) };\n }\n : undefined,\n\n onStateChange: (state: DockManagerState) => {\n callbackRefs.current.onStateChange?.(state);\n forceUpdate((n) => n + 1);\n },\n\n onWillClose: (event, panelId) => {\n callbackRefs.current.onWillClose?.(event, panelId);\n },\n\n onWillDrop: (event, sourceId, targetId, position) => {\n callbackRefs.current.onWillDrop?.(event, sourceId, targetId, position);\n },\n };\n\n const dock = new DockviewComponent(containerRef.current, options);\n dockRef.current = dock;\n\n // Fire onReady with the API\n callbackRefs.current.onReady?.(dock.api);\n\n return () => {\n dock.dispose();\n dockRef.current = null;\n setPortals(new Map());\n };\n }, []); // Only run once on mount\n\n // Sync options when props change\n const themeKey = typeof theme === 'object' ? theme.name : theme;\n useEffect(() => {\n if (!dockRef.current) return;\n dockRef.current.updateOptions({\n ...(theme !== undefined && { theme }),\n ...(allowRootDock !== undefined && { allowRootDock }),\n ...(resourceStrings !== undefined && { resourceStrings }),\n });\n }, [themeKey, allowRootDock, resourceStrings]); // eslint-disable-line react-hooks/exhaustive-deps\n\n // Imperative handle for parent components\n useImperativeHandle(ref, () => ({\n dispatch: (action: DockAction) => dockRef.current?.dispatch(action),\n getState: () => dockRef.current?.getState() ?? initialState,\n getInstance: () => dockRef.current,\n getApi: () => dockRef.current?.api ?? null,\n }));\n\n // Render portals into core-created DOM slots\n const portalElements: React.ReactNode[] = [];\n const state = dockRef.current?.getState();\n const cbs = callbackRefs.current;\n\n portals.forEach((entry, key) => {\n let content: React.ReactNode = null;\n\n switch (entry.type) {\n case 'content': {\n const panel = state?.panels[entry.panelId];\n if (panel && entry.api) {\n // Try widget registry first, then fall back to renderPanel\n const widgetType = panel.widgetType || '';\n const Widget = cbs.widgets?.[widgetType];\n if (Widget) {\n content = <Widget panelId={entry.panelId} panel={panel} api={entry.api} />;\n } else if (cbs.renderPanel) {\n content = cbs.renderPanel(entry.panelId, panel, entry.api);\n }\n }\n break;\n }\n case 'tab': {\n const panel = state?.panels[entry.panelId];\n if (panel && cbs.renderTab) {\n content = cbs.renderTab(entry.panelId, panel, entry.isActive ?? false);\n }\n break;\n }\n case 'headerAction': {\n if (cbs.renderHeaderActions && entry.slot && entry.tabGroupId) {\n content = cbs.renderHeaderActions(entry.slot, entry.tabGroupId);\n }\n break;\n }\n }\n\n if (content !== null && entry.container.isConnected) {\n portalElements.push(createPortal(content, entry.container, key));\n }\n });\n\n return (\n <>\n <div\n ref={containerRef}\n className={className}\n style={{ width: '100%', height: '100%' }}\n />\n {portalElements}\n </>\n );\n }\n);\n","import { useState, useEffect, useCallback } from 'react';\n\ntype Theme = 'light' | 'dark' | 'system';\n\nfunction getSystemTheme(): 'light' | 'dark' {\n if (typeof window === 'undefined') return 'dark';\n return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n}\n\nexport function useTheme(defaultTheme: Theme = 'dark') {\n const [theme, setThemeState] = useState<Theme>(() => {\n if (typeof window === 'undefined') return defaultTheme;\n const stored = window.localStorage?.getItem?.('dock-theme') as Theme | null;\n return stored || defaultTheme;\n });\n\n const resolvedTheme = theme === 'system' ? getSystemTheme() : theme;\n\n useEffect(() => {\n const root = document.documentElement;\n root.classList.remove('light', 'dark');\n root.classList.add(resolvedTheme);\n try {\n window.localStorage?.setItem?.('dock-theme', theme);\n } catch {}\n }, [theme, resolvedTheme]);\n\n // Listen for system theme changes when in \"system\" mode\n useEffect(() => {\n if (theme !== 'system') return;\n const mq = window.matchMedia('(prefers-color-scheme: dark)');\n const handler = () => {\n const root = document.documentElement;\n root.classList.remove('light', 'dark');\n root.classList.add(getSystemTheme());\n };\n mq.addEventListener('change', handler);\n return () => mq.removeEventListener('change', handler);\n }, [theme]);\n\n const setTheme = useCallback((t: Theme) => {\n setThemeState(t);\n }, []);\n\n const toggleTheme = useCallback(() => {\n setThemeState((prev) => {\n const resolved = prev === 'system' ? getSystemTheme() : prev;\n return resolved === 'dark' ? 'light' : 'dark';\n });\n }, []);\n\n return { theme, resolvedTheme, setTheme, toggleTheme };\n}\n"]}