@industry-theme/repository-composition-panels 0.2.2 → 0.2.4

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.
@@ -1 +1 @@
1
- {"version":3,"file":"panels.bundle.js","sources":["../node_modules/@principal-ade/industry-theme/dist/esm/index.js","../node_modules/lucide-react/dist/esm/shared/src/utils.js","../node_modules/lucide-react/dist/esm/defaultAttributes.js","../node_modules/lucide-react/dist/esm/Icon.js","../node_modules/lucide-react/dist/esm/createLucideIcon.js","../node_modules/lucide-react/dist/esm/icons/boxes.js","../node_modules/lucide-react/dist/esm/icons/check.js","../node_modules/lucide-react/dist/esm/icons/chevron-down.js","../node_modules/lucide-react/dist/esm/icons/chevron-right.js","../node_modules/lucide-react/dist/esm/icons/circle-alert.js","../node_modules/lucide-react/dist/esm/icons/circle-question-mark.js","../node_modules/lucide-react/dist/esm/icons/copy.js","../node_modules/lucide-react/dist/esm/icons/external-link.js","../node_modules/lucide-react/dist/esm/icons/file-code.js","../node_modules/lucide-react/dist/esm/icons/file-question-mark.js","../node_modules/lucide-react/dist/esm/icons/folder.js","../node_modules/lucide-react/dist/esm/icons/git-branch.js","../node_modules/lucide-react/dist/esm/icons/minus.js","../node_modules/lucide-react/dist/esm/icons/package.js","../node_modules/lucide-react/dist/esm/icons/plus.js","../node_modules/lucide-react/dist/esm/icons/scale.js","../node_modules/lucide-react/dist/esm/icons/search.js","../node_modules/lucide-react/dist/esm/icons/settings.js","../node_modules/lucide-react/dist/esm/icons/square-pen.js","../node_modules/lucide-react/dist/esm/icons/terminal.js","../node_modules/lucide-react/dist/esm/icons/x.js","../node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.js","../node_modules/use-sync-external-store/shim/index.js","../node_modules/react-arborist/dist/module/context.js","../node_modules/react-arborist/dist/module/utils.js","../node_modules/react-arborist/dist/module/components/default-cursor.js","../node_modules/react-arborist/dist/module/components/default-row.js","../node_modules/react-arborist/dist/module/components/default-node.js","../node_modules/react-arborist/dist/module/state/edit-slice.js","../node_modules/react-arborist/dist/module/state/focus-slice.js","../node_modules/react-arborist/dist/module/interfaces/node-api.js","../node_modules/react-arborist/dist/module/data/create-root.js","../node_modules/react-arborist/dist/module/state/open-slice.js","../node_modules/react-arborist/dist/module/state/initial.js","../node_modules/react-arborist/dist/module/state/selection-slice.js","../node_modules/react-arborist/dist/module/state/dnd-slice.js","../node_modules/react-arborist/dist/module/components/default-drag-preview.js","../node_modules/@babel/runtime/helpers/esm/extends.js","../node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","../node_modules/memoize-one/dist/memoize-one.esm.js","../node_modules/react-window/dist/index.esm.js","../node_modules/react-arborist/dist/module/components/cursor.js","../node_modules/react-arborist/dist/module/components/list-outer-element.js","../node_modules/react-arborist/dist/module/components/list-inner-element.js","../node_modules/react-dnd/dist/esm/core/DndContext.js","../node_modules/dnd-core/dist/esm/interfaces.js","../node_modules/@react-dnd/invariant/dist/invariant.esm.js","../node_modules/dnd-core/dist/esm/actions/dragDrop/types.js","../node_modules/dnd-core/dist/esm/actions/dragDrop/local/setClientOffset.js","../node_modules/dnd-core/dist/esm/utils/js_utils.js","../node_modules/dnd-core/dist/esm/actions/dragDrop/beginDrag.js","../node_modules/dnd-core/dist/esm/actions/dragDrop/publishDragSource.js","../node_modules/dnd-core/dist/esm/utils/matchesType.js","../node_modules/dnd-core/dist/esm/actions/dragDrop/hover.js","../node_modules/dnd-core/dist/esm/actions/dragDrop/drop.js","../node_modules/dnd-core/dist/esm/actions/dragDrop/endDrag.js","../node_modules/dnd-core/dist/esm/actions/dragDrop/index.js","../node_modules/dnd-core/dist/esm/classes/DragDropManagerImpl.js","../node_modules/dnd-core/node_modules/redux/es/redux.js","../node_modules/dnd-core/dist/esm/utils/equality.js","../node_modules/dnd-core/dist/esm/reducers/dragOffset.js","../node_modules/dnd-core/dist/esm/actions/registry.js","../node_modules/dnd-core/dist/esm/reducers/dragOperation.js","../node_modules/dnd-core/dist/esm/reducers/refCount.js","../node_modules/dnd-core/dist/esm/utils/dirtiness.js","../node_modules/dnd-core/dist/esm/reducers/dirtyHandlerIds.js","../node_modules/dnd-core/dist/esm/reducers/stateId.js","../node_modules/dnd-core/dist/esm/reducers/index.js","../node_modules/dnd-core/dist/esm/utils/coords.js","../node_modules/dnd-core/dist/esm/classes/DragDropMonitorImpl.js","../node_modules/dnd-core/dist/esm/utils/getNextUniqueId.js","../node_modules/dnd-core/dist/esm/contracts.js","../node_modules/@react-dnd/asap/dist/esm/makeRequestCall.mjs","../node_modules/@react-dnd/asap/dist/esm/AsapQueue.mjs","../node_modules/@react-dnd/asap/dist/esm/RawTask.mjs","../node_modules/@react-dnd/asap/dist/esm/TaskFactory.mjs","../node_modules/@react-dnd/asap/dist/esm/asap.mjs","../node_modules/dnd-core/dist/esm/classes/HandlerRegistryImpl.js","../node_modules/dnd-core/dist/esm/createDragDropManager.js","../node_modules/react-dnd/dist/esm/core/DndProvider.js","../node_modules/react-dnd/dist/esm/internals/DragSourceMonitorImpl.js","../node_modules/react-dnd/dist/esm/internals/DropTargetMonitorImpl.js","../node_modules/react-dnd/dist/esm/internals/wrapConnectorHooks.js","../node_modules/react-dnd/dist/esm/internals/isRef.js","../node_modules/@react-dnd/shallowequal/dist/shallowequal.esm.js","../node_modules/react-dnd/dist/esm/internals/SourceConnector.js","../node_modules/react-dnd/dist/esm/internals/TargetConnector.js","../node_modules/react-dnd/dist/esm/internals/registration.js","../node_modules/react-dnd/dist/esm/hooks/useIsomorphicLayoutEffect.js","../node_modules/react-dnd/dist/esm/hooks/useDrag/DragSourceImpl.js","../node_modules/react-dnd/dist/esm/hooks/useDrag/useDragSource.js","../node_modules/react-dnd/dist/esm/hooks/useDragDropManager.js","../node_modules/react-dnd/dist/esm/hooks/useDrag/useDragType.js","../node_modules/react-dnd/dist/esm/hooks/useDrag/useRegisteredDragSource.js","../node_modules/react-dnd/dist/esm/hooks/useOptionalFactory.js","../node_modules/react-dnd/dist/esm/hooks/useDrag/useDragSourceMonitor.js","../node_modules/react-dnd/dist/esm/hooks/useDrag/useDragSourceConnector.js","../node_modules/fast-deep-equal/index.js","../node_modules/react-dnd/dist/esm/hooks/useCollector.js","../node_modules/react-dnd/dist/esm/hooks/useMonitorOutput.js","../node_modules/react-dnd/dist/esm/hooks/useCollectedProps.js","../node_modules/react-dnd/dist/esm/hooks/useDrag/connectors.js","../node_modules/react-dnd/dist/esm/hooks/useDrag/useDrag.js","../node_modules/react-dnd/dist/esm/hooks/useDrop/useAccept.js","../node_modules/react-dnd/dist/esm/hooks/useDrop/DropTargetImpl.js","../node_modules/react-dnd/dist/esm/hooks/useDrop/useDropTarget.js","../node_modules/react-dnd/dist/esm/hooks/useDrop/useRegisteredDropTarget.js","../node_modules/react-dnd/dist/esm/hooks/useDrop/useDropTargetMonitor.js","../node_modules/react-dnd/dist/esm/hooks/useDrop/useDropTargetConnector.js","../node_modules/react-dnd/dist/esm/hooks/useDrop/connectors.js","../node_modules/react-dnd/dist/esm/hooks/useDrop/useDrop.js","../node_modules/react-dnd/dist/esm/hooks/useDragLayer.js","../node_modules/react-dnd-html5-backend/dist/esm/utils/js_utils.js","../node_modules/react-dnd-html5-backend/dist/esm/EnterLeaveCounter.js","../node_modules/react-dnd-html5-backend/dist/esm/BrowserDetector.js","../node_modules/react-dnd-html5-backend/dist/esm/MonotonicInterpolant.js","../node_modules/react-dnd-html5-backend/dist/esm/OffsetUtils.js","../node_modules/react-dnd-html5-backend/dist/esm/NativeTypes.js","../node_modules/react-dnd-html5-backend/dist/esm/NativeDragSources/getDataFromDataTransfer.js","../node_modules/react-dnd-html5-backend/dist/esm/NativeDragSources/nativeTypesConfig.js","../node_modules/react-dnd-html5-backend/dist/esm/NativeDragSources/NativeDragSource.js","../node_modules/react-dnd-html5-backend/dist/esm/NativeDragSources/index.js","../node_modules/react-dnd-html5-backend/dist/esm/OptionsReader.js","../node_modules/react-dnd-html5-backend/dist/esm/HTML5BackendImpl.js","../node_modules/react-dnd-html5-backend/dist/esm/getEmptyImage.js","../node_modules/react-dnd-html5-backend/dist/esm/index.js","../node_modules/react-arborist/dist/module/dnd/drag-hook.js","../node_modules/react-arborist/dist/module/dnd/compute-drop.js","../node_modules/react-arborist/dist/module/dnd/drop-hook.js","../node_modules/react-arborist/dist/module/hooks/use-fresh-node.js","../node_modules/react-arborist/dist/module/components/row-container.js","../node_modules/react-arborist/dist/module/components/default-container.js","../node_modules/react-arborist/dist/module/data/create-list.js","../node_modules/react-arborist/dist/module/data/create-index.js","../node_modules/react-arborist/dist/module/interfaces/tree-api.js","../node_modules/redux/dist/redux.mjs","../node_modules/react-arborist/dist/module/state/drag-slice.js","../node_modules/react-arborist/dist/module/state/root-reducer.js","../node_modules/react-arborist/dist/module/components/provider.js","../node_modules/react-arborist/dist/module/dnd/outer-drop-hook.js","../node_modules/react-arborist/dist/module/components/outer-drop.js","../node_modules/react-arborist/dist/module/components/tree-container.js","../node_modules/react-arborist/dist/module/components/drag-preview-container.js","../node_modules/react-arborist/dist/module/data/simple-tree.js","../node_modules/react-arborist/dist/module/hooks/use-simple-tree.js","../node_modules/react-arborist/dist/module/hooks/use-validated-props.js","../node_modules/react-arborist/dist/module/components/tree.js","../node_modules/@principal-ade/dynamic-file-tree/dist/index.mjs","../node_modules/@principal-ai/repository-abstraction/dist/index.mjs","../src/panels/GitChangesPanel.tsx","../src/panels/PackageCompositionPanel.tsx","../src/panels/components/DependencyInfoModal.tsx","../src/panels/components/DependencyRow.tsx","../src/panels/components/FilterBar.tsx","../src/panels/DependenciesPanel.tsx","../src/index.tsx"],"sourcesContent":["// src/glassmorphismTheme.ts\nvar glassmorphismTheme = {\n space: [0, 4, 8, 16, 32, 64, 128, 256, 512],\n fonts: {\n body: '\"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n heading: '\"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n monospace: '\"Fira Code\", \"SF Mono\", Monaco, Inconsolata, monospace'\n },\n fontSizes: [12, 14, 16, 18, 20, 24, 32, 48, 64, 96],\n fontScale: 1,\n fontWeights: {\n body: 400,\n heading: 600,\n bold: 700,\n light: 300,\n medium: 500,\n semibold: 600\n },\n lineHeights: {\n body: 1.6,\n heading: 1.3,\n tight: 1.4,\n relaxed: 1.8\n },\n breakpoints: [\"640px\", \"768px\", \"1024px\", \"1280px\"],\n sizes: [16, 32, 64, 128, 256, 512, 768, 1024, 1536],\n radii: [0, 8, 12, 16, 20, 24, 32, 40],\n shadows: [\n \"none\",\n \"0 8px 32px 0 rgba(31, 38, 135, 0.15)\",\n \"0 12px 40px 0 rgba(31, 38, 135, 0.2)\",\n \"0 16px 48px 0 rgba(31, 38, 135, 0.25)\",\n \"0 20px 56px 0 rgba(31, 38, 135, 0.3)\",\n \"0 24px 64px 0 rgba(31, 38, 135, 0.35)\"\n ],\n zIndices: [0, 1, 10, 20, 30, 40, 50],\n colors: {\n text: \"rgba(255, 255, 255, 0.95)\",\n background: \"rgba(255, 255, 255, 0.1)\",\n primary: \"rgba(99, 102, 241, 0.9)\",\n secondary: \"rgba(139, 92, 246, 0.9)\",\n accent: \"rgba(236, 72, 153, 0.9)\",\n highlight: \"rgba(99, 102, 241, 0.2)\",\n muted: \"rgba(255, 255, 255, 0.05)\",\n success: \"rgba(34, 197, 94, 0.9)\",\n warning: \"rgba(251, 146, 60, 0.9)\",\n error: \"rgba(239, 68, 68, 0.9)\",\n info: \"rgba(59, 130, 246, 0.9)\",\n border: \"rgba(255, 255, 255, 0.18)\",\n backgroundSecondary: \"rgba(255, 255, 255, 0.15)\",\n backgroundTertiary: \"rgba(255, 255, 255, 0.2)\",\n backgroundLight: \"rgba(255, 255, 255, 0.08)\",\n backgroundHover: \"rgba(255, 255, 255, 0.25)\",\n surface: \"rgba(255, 255, 255, 0.12)\",\n textSecondary: \"rgba(255, 255, 255, 0.8)\",\n textTertiary: \"rgba(255, 255, 255, 0.6)\",\n textMuted: \"rgba(255, 255, 255, 0.5)\",\n highlightBg: \"rgba(251, 191, 36, 0.3)\",\n highlightBorder: \"rgba(251, 191, 36, 0.5)\"\n },\n modes: {\n dark: {\n text: \"rgba(255, 255, 255, 0.95)\",\n background: \"rgba(0, 0, 0, 0.3)\",\n primary: \"rgba(129, 140, 248, 0.9)\",\n secondary: \"rgba(167, 139, 250, 0.9)\",\n accent: \"rgba(244, 114, 182, 0.9)\",\n highlight: \"rgba(129, 140, 248, 0.25)\",\n muted: \"rgba(0, 0, 0, 0.15)\",\n success: \"rgba(74, 222, 128, 0.9)\",\n warning: \"rgba(251, 191, 36, 0.9)\",\n error: \"rgba(248, 113, 113, 0.9)\",\n info: \"rgba(96, 165, 250, 0.9)\",\n border: \"rgba(255, 255, 255, 0.15)\",\n backgroundSecondary: \"rgba(0, 0, 0, 0.4)\",\n backgroundTertiary: \"rgba(0, 0, 0, 0.5)\",\n backgroundLight: \"rgba(0, 0, 0, 0.2)\",\n backgroundHover: \"rgba(255, 255, 255, 0.1)\",\n surface: \"rgba(0, 0, 0, 0.35)\",\n textSecondary: \"rgba(255, 255, 255, 0.8)\",\n textTertiary: \"rgba(255, 255, 255, 0.6)\",\n textMuted: \"rgba(255, 255, 255, 0.4)\",\n highlightBg: \"rgba(251, 191, 36, 0.35)\",\n highlightBorder: \"rgba(251, 191, 36, 0.6)\"\n },\n frosted: {\n text: \"rgba(31, 41, 55, 0.95)\",\n background: \"rgba(255, 255, 255, 0.3)\",\n primary: \"rgba(79, 70, 229, 0.95)\",\n secondary: \"rgba(124, 58, 237, 0.95)\",\n accent: \"rgba(219, 39, 119, 0.95)\",\n highlight: \"rgba(79, 70, 229, 0.15)\",\n muted: \"rgba(255, 255, 255, 0.4)\",\n success: \"rgba(16, 185, 129, 0.95)\",\n warning: \"rgba(245, 158, 11, 0.95)\",\n error: \"rgba(220, 38, 38, 0.95)\",\n info: \"rgba(37, 99, 235, 0.95)\",\n border: \"rgba(255, 255, 255, 0.5)\",\n backgroundSecondary: \"rgba(255, 255, 255, 0.4)\",\n backgroundTertiary: \"rgba(255, 255, 255, 0.5)\",\n backgroundLight: \"rgba(255, 255, 255, 0.25)\",\n backgroundHover: \"rgba(255, 255, 255, 0.6)\",\n surface: \"rgba(255, 255, 255, 0.35)\",\n textSecondary: \"rgba(31, 41, 55, 0.8)\",\n textTertiary: \"rgba(31, 41, 55, 0.6)\",\n textMuted: \"rgba(31, 41, 55, 0.5)\",\n highlightBg: \"rgba(251, 191, 36, 0.4)\",\n highlightBorder: \"rgba(251, 191, 36, 0.7)\"\n }\n },\n buttons: {\n primary: {\n color: \"white\",\n bg: \"primary\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"rgba(255, 255, 255, 0.2)\",\n \"&:hover\": {\n bg: \"secondary\"\n }\n },\n secondary: {\n color: \"text\",\n bg: \"rgba(255, 255, 255, 0.1)\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"rgba(255, 255, 255, 0.2)\",\n \"&:hover\": {\n bg: \"rgba(255, 255, 255, 0.2)\"\n }\n },\n ghost: {\n color: \"text\",\n bg: \"transparent\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"transparent\",\n \"&:hover\": {\n borderColor: \"rgba(255, 255, 255, 0.2)\",\n bg: \"rgba(255, 255, 255, 0.05)\"\n }\n }\n },\n text: {\n heading: {\n fontFamily: \"heading\",\n fontWeight: \"heading\",\n lineHeight: \"heading\"\n },\n body: {\n fontFamily: \"body\",\n fontWeight: \"body\",\n lineHeight: \"body\"\n },\n caption: {\n fontSize: 1,\n color: \"textSecondary\"\n }\n },\n cards: {\n primary: {\n bg: \"surface\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 3\n },\n secondary: {\n bg: \"backgroundSecondary\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 3\n }\n }\n};\n// src/defaultThemes.ts\nvar defaultMarkdownTheme = {\n space: [0, 4, 8, 16, 32, 64, 128, 256, 512],\n fonts: {\n body: '\"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n heading: '\"Crimson Text\", \"Georgia\", \"Times New Roman\", serif',\n monospace: '\"Fira Code\", \"SF Mono\", Monaco, Inconsolata, monospace'\n },\n fontSizes: [12, 14, 16, 18, 20, 24, 32, 48, 64, 96],\n fontScale: 1,\n fontWeights: {\n body: 400,\n heading: 600,\n bold: 700,\n light: 300,\n medium: 500,\n semibold: 600\n },\n lineHeights: {\n body: 1.6,\n heading: 1.3,\n tight: 1.25,\n relaxed: 1.75\n },\n breakpoints: [\"640px\", \"768px\", \"1024px\", \"1280px\"],\n sizes: [16, 32, 64, 128, 256, 512, 768, 1024, 1536],\n radii: [0, 2, 4, 6, 8, 12, 16, 24],\n shadows: [\n \"none\",\n \"0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06)\",\n \"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)\",\n \"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)\",\n \"0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)\",\n \"0 25px 50px -12px rgba(0, 0, 0, 0.25)\"\n ],\n zIndices: [0, 1, 10, 20, 30, 40, 50],\n colors: {\n text: \"#1a1a1a\",\n background: \"#ffffff\",\n primary: \"#007acc\",\n secondary: \"#005a9e\",\n accent: \"#1a1a1a\",\n highlight: \"rgba(0, 122, 204, 0.1)\",\n muted: \"#f0f0f0\",\n success: \"#28a745\",\n warning: \"#ffc107\",\n error: \"#dc3545\",\n info: \"#17a2b8\",\n border: \"rgba(0, 0, 0, 0.1)\",\n backgroundSecondary: \"#f8f9fa\",\n backgroundTertiary: \"#e9ecef\",\n backgroundLight: \"rgba(0, 0, 0, 0.03)\",\n backgroundHover: \"rgba(0, 0, 0, 0.05)\",\n surface: \"#ffffff\",\n textSecondary: \"#555555\",\n textTertiary: \"#888888\",\n textMuted: \"#aaaaaa\",\n highlightBg: \"rgba(255, 235, 59, 0.3)\",\n highlightBorder: \"rgba(255, 235, 59, 0.6)\"\n },\n buttons: {\n primary: {\n color: \"white\",\n bg: \"primary\",\n \"&:hover\": { bg: \"secondary\" }\n },\n secondary: {\n color: \"primary\",\n bg: \"transparent\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"primary\",\n \"&:hover\": { bg: \"highlight\" }\n },\n ghost: {\n color: \"text\",\n bg: \"transparent\",\n \"&:hover\": { bg: \"backgroundHover\" }\n }\n },\n text: {\n heading: {\n fontFamily: \"heading\",\n fontWeight: \"heading\",\n lineHeight: \"heading\"\n },\n body: {\n fontFamily: \"body\",\n fontWeight: \"body\",\n lineHeight: \"body\"\n },\n caption: {\n fontSize: 1,\n color: \"textSecondary\"\n }\n },\n cards: {\n primary: {\n bg: \"surface\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 2\n },\n secondary: {\n bg: \"backgroundSecondary\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 2\n }\n }\n};\nvar defaultTerminalTheme = {\n space: [0, 4, 8, 16, 32, 64, 128, 256, 512],\n fonts: {\n body: '\"Courier New\", Courier, monospace',\n heading: '\"Courier New\", Courier, monospace',\n monospace: '\"Courier New\", Courier, monospace'\n },\n fontSizes: [12, 14, 16, 18, 20, 24, 32, 48, 64, 96],\n fontScale: 1,\n fontWeights: {\n body: 400,\n heading: 500,\n bold: 600,\n light: 300,\n medium: 500,\n semibold: 600\n },\n lineHeights: {\n body: 1.4,\n heading: 1.2,\n tight: 1.3,\n relaxed: 1.6\n },\n breakpoints: [\"640px\", \"768px\", \"1024px\", \"1280px\"],\n sizes: [16, 32, 64, 128, 256, 512, 768, 1024, 1536],\n radii: [0, 2, 4, 6, 8, 12, 16, 24],\n shadows: [\n \"none\",\n \"0 0 5px rgba(255, 193, 7, 0.1)\",\n \"0 0 10px rgba(255, 193, 7, 0.15)\",\n \"0 0 15px rgba(255, 193, 7, 0.2)\",\n \"0 0 20px rgba(255, 193, 7, 0.25)\",\n \"0 0 30px rgba(255, 193, 7, 0.3)\"\n ],\n zIndices: [0, 1, 10, 20, 30, 40, 50],\n colors: {\n text: \"#ffc107\",\n background: \"#000000\",\n primary: \"#ffc107\",\n secondary: \"#ffb300\",\n accent: \"#ffffff\",\n highlight: \"rgba(255, 193, 7, 0.1)\",\n muted: \"#1a1a1a\",\n success: \"#4caf50\",\n warning: \"#ff9800\",\n error: \"#f44336\",\n info: \"#2196f3\",\n border: \"rgba(255, 193, 7, 0.2)\",\n backgroundSecondary: \"#0a0a0a\",\n backgroundTertiary: \"#111111\",\n backgroundLight: \"rgba(255, 193, 7, 0.03)\",\n backgroundHover: \"rgba(255, 193, 7, 0.05)\",\n surface: \"#050505\",\n textSecondary: \"#e0e0e0\",\n textTertiary: \"#b0b0b0\",\n textMuted: \"#808080\",\n highlightBg: \"rgba(255, 193, 7, 0.2)\",\n highlightBorder: \"rgba(255, 193, 7, 0.4)\"\n },\n buttons: {\n primary: {\n color: \"black\",\n bg: \"primary\",\n borderWidth: 0,\n \"&:hover\": { bg: \"secondary\" }\n },\n secondary: {\n color: \"primary\",\n bg: \"transparent\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"primary\",\n \"&:hover\": { bg: \"highlight\" }\n },\n ghost: {\n color: \"text\",\n bg: \"transparent\",\n \"&:hover\": { bg: \"backgroundHover\" }\n }\n },\n text: {\n heading: {\n fontFamily: \"heading\",\n fontWeight: \"heading\",\n lineHeight: \"heading\"\n },\n body: {\n fontFamily: \"body\",\n fontWeight: \"body\",\n lineHeight: \"body\"\n },\n caption: {\n fontSize: 1,\n color: \"textSecondary\"\n }\n },\n cards: {\n primary: {\n bg: \"surface\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 0\n },\n secondary: {\n bg: \"backgroundSecondary\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 0\n }\n }\n};\nvar defaultEditorTheme = {\n space: [0, 4, 8, 16, 32, 64, 128, 256, 512],\n fonts: {\n body: '\"Fira Code\", \"SF Mono\", Monaco, Inconsolata, monospace',\n heading: '\"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n monospace: '\"Fira Code\", \"SF Mono\", Monaco, Inconsolata, monospace'\n },\n fontSizes: [12, 14, 16, 18, 20, 24, 32, 48, 64, 96],\n fontScale: 1,\n fontWeights: {\n body: 400,\n heading: 600,\n bold: 700,\n light: 300,\n medium: 500,\n semibold: 600\n },\n lineHeights: {\n body: 1.5,\n heading: 1.2,\n tight: 1.3,\n relaxed: 1.7\n },\n breakpoints: [\"640px\", \"768px\", \"1024px\", \"1280px\"],\n sizes: [16, 32, 64, 128, 256, 512, 768, 1024, 1536],\n radii: [0, 2, 4, 6, 8, 12, 16, 24],\n shadows: [\n \"none\",\n \"0 1px 2px rgba(0, 0, 0, 0.05)\",\n \"0 2px 4px rgba(0, 0, 0, 0.1)\",\n \"0 4px 8px rgba(0, 0, 0, 0.15)\",\n \"0 8px 16px rgba(0, 0, 0, 0.2)\",\n \"0 12px 24px rgba(0, 0, 0, 0.25)\"\n ],\n zIndices: [0, 1, 10, 20, 30, 40, 50],\n colors: {\n text: \"#d4d4d4\",\n background: \"#1e1e1e\",\n primary: \"#569cd6\",\n secondary: \"#408ac9\",\n accent: \"#c586c0\",\n highlight: \"rgba(86, 156, 214, 0.1)\",\n muted: \"#2a2a2a\",\n success: \"#6a9955\",\n warning: \"#d18616\",\n error: \"#f44747\",\n info: \"#569cd6\",\n border: \"rgba(255, 255, 255, 0.1)\",\n backgroundSecondary: \"#252526\",\n backgroundTertiary: \"#333333\",\n backgroundLight: \"rgba(255, 255, 255, 0.03)\",\n backgroundHover: \"rgba(255, 255, 255, 0.05)\",\n surface: \"#252526\",\n textSecondary: \"#cccccc\",\n textTertiary: \"#999999\",\n textMuted: \"#666666\",\n highlightBg: \"rgba(255, 235, 59, 0.2)\",\n highlightBorder: \"rgba(255, 235, 59, 0.4)\"\n },\n buttons: {\n primary: {\n color: \"white\",\n bg: \"primary\",\n \"&:hover\": { bg: \"secondary\" }\n },\n secondary: {\n color: \"primary\",\n bg: \"transparent\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"primary\",\n \"&:hover\": { bg: \"highlight\" }\n },\n ghost: {\n color: \"text\",\n bg: \"transparent\",\n \"&:hover\": { bg: \"backgroundHover\" }\n }\n },\n text: {\n heading: {\n fontFamily: \"heading\",\n fontWeight: \"heading\",\n lineHeight: \"heading\"\n },\n body: {\n fontFamily: \"body\",\n fontWeight: \"body\",\n lineHeight: \"body\"\n },\n caption: {\n fontSize: 1,\n color: \"textSecondary\"\n }\n },\n cards: {\n primary: {\n bg: \"surface\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 1\n },\n secondary: {\n bg: \"backgroundSecondary\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 1\n }\n }\n};\n// src/landingPageTheme.ts\nvar landingPageTheme = {\n space: [0, 4, 8, 12, 16, 20, 24, 32, 40, 48, 64, 80, 100, 128],\n fonts: {\n body: 'Inter, \"Geist Sans\", system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\n heading: '-apple-system, BlinkMacSystemFont, \"SF Pro Display\", \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\n monospace: '\"SF Mono\", Monaco, Inconsolata, \"Fira Code\", monospace'\n },\n fontSizes: [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 24, 28, 32, 36, 48, 56, 68, 84, 96],\n fontScale: 1,\n fontWeights: {\n body: 400,\n heading: 600,\n bold: 700,\n light: 300,\n medium: 500,\n semibold: 600\n },\n lineHeights: {\n body: 1.6,\n heading: 1.2,\n tight: 1.05,\n relaxed: 1.7\n },\n breakpoints: [\"640px\", \"768px\", \"1024px\", \"1280px\", \"1400px\"],\n sizes: [16, 32, 64, 128, 200, 240, 256, 300, 512, 740, 768, 820, 900, 1024, 1200, 1400, 1536],\n radii: [0, 2, 4, 6, 7, 8, 9, 10, 12, 14, 16, 24],\n shadows: [\n \"none\",\n \"0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06)\",\n \"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)\",\n \"0 4px 12px rgba(0, 194, 255, 0.4)\",\n \"0 6px 24px rgba(0, 194, 255, 0.1)\",\n \"0 8px 32px rgba(0, 0, 0, 0.4)\"\n ],\n zIndices: [0, 1, 10, 20, 30, 40, 50, 1000],\n colors: {\n text: \"#ffffff\",\n background: \"#000000\",\n primary: \"#00C2FF\",\n secondary: \"#0098CC\",\n accent: \"#0066FF\",\n highlight: \"rgba(0, 194, 255, 0.15)\",\n muted: \"#1a1a1a\",\n success: \"#4caf50\",\n warning: \"#ff9800\",\n error: \"#f44336\",\n info: \"#2196f3\",\n border: \"rgba(0, 194, 255, 0.2)\",\n backgroundSecondary: \"#0a1628\",\n backgroundTertiary: \"#0f1c2e\",\n backgroundLight: \"rgba(0, 194, 255, 0.04)\",\n backgroundHover: \"rgba(0, 194, 255, 0.1)\",\n surface: \"rgba(0, 0, 0, 0.4)\",\n textSecondary: \"#d1d5db\",\n textTertiary: \"#9ca3af\",\n textMuted: \"#6b7280\",\n highlightBg: \"rgba(255, 235, 59, 0.25)\",\n highlightBorder: \"rgba(255, 235, 59, 0.5)\"\n },\n buttons: {\n primary: {\n color: \"#000000\",\n bg: \"#00C2FF\",\n borderWidth: 0,\n padding: \"8px 20px\",\n fontSize: 14,\n fontWeight: 600,\n cursor: \"pointer\",\n \"&:hover\": {\n bg: \"#00D9FF\"\n }\n },\n secondary: {\n color: \"#00C2FF\",\n bg: \"transparent\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"rgba(0, 194, 255, 0.3)\",\n padding: \"8px 16px\",\n fontSize: 14,\n fontWeight: 600,\n cursor: \"pointer\",\n \"&:hover\": {\n bg: \"rgba(0, 194, 255, 0.1)\",\n borderColor: \"#00C2FF\"\n }\n },\n ghost: {\n color: \"#00C2FF\",\n bg: \"transparent\",\n borderWidth: 0,\n padding: \"8px 16px\",\n fontSize: 14,\n fontWeight: 500,\n cursor: \"pointer\",\n \"&:hover\": {\n color: \"#00D9FF\",\n bg: \"rgba(0, 194, 255, 0.1)\"\n }\n }\n },\n text: {\n heading: {\n fontFamily: \"heading\",\n fontWeight: \"heading\",\n lineHeight: \"heading\",\n color: \"#ffffff\"\n },\n body: {\n fontFamily: \"body\",\n fontWeight: \"body\",\n lineHeight: \"body\",\n color: \"text\"\n },\n caption: {\n fontSize: 1,\n color: \"textSecondary\"\n }\n },\n cards: {\n primary: {\n bg: \"surface\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 4\n },\n secondary: {\n bg: \"rgba(0, 194, 255, 0.05)\",\n border: \"1px solid\",\n borderColor: \"rgba(0, 194, 255, 0.2)\",\n borderRadius: 4\n }\n }\n};\nvar landingPageLightTheme = {\n ...landingPageTheme,\n colors: {\n text: \"#1a1a1a\",\n background: \"#ffffff\",\n primary: \"#0098CC\",\n secondary: \"#00C2FF\",\n accent: \"#0066FF\",\n highlight: \"rgba(0, 152, 204, 0.1)\",\n muted: \"#f0f0f0\",\n success: \"#4caf50\",\n warning: \"#ff9800\",\n error: \"#f44336\",\n info: \"#2196f3\",\n border: \"rgba(0, 152, 204, 0.2)\",\n backgroundSecondary: \"#f8f9fa\",\n backgroundTertiary: \"#e9ecef\",\n backgroundLight: \"rgba(0, 152, 204, 0.03)\",\n backgroundHover: \"rgba(0, 152, 204, 0.05)\",\n surface: \"rgba(255, 255, 255, 0.95)\",\n textSecondary: \"#555555\",\n textTertiary: \"#888888\",\n textMuted: \"#aaaaaa\",\n highlightBg: \"rgba(255, 235, 59, 0.3)\",\n highlightBorder: \"rgba(255, 235, 59, 0.6)\"\n },\n buttons: {\n primary: {\n color: \"#ffffff\",\n bg: \"#0098CC\",\n borderWidth: 0,\n padding: \"8px 20px\",\n fontSize: 14,\n fontWeight: 600,\n cursor: \"pointer\",\n \"&:hover\": {\n bg: \"#007aa8\"\n }\n },\n secondary: {\n color: \"#0098CC\",\n bg: \"transparent\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"rgba(0, 152, 204, 0.3)\",\n padding: \"8px 16px\",\n fontSize: 14,\n fontWeight: 600,\n cursor: \"pointer\",\n \"&:hover\": {\n bg: \"rgba(0, 152, 204, 0.05)\",\n borderColor: \"#0098CC\"\n }\n },\n ghost: {\n color: \"#0098CC\",\n bg: \"transparent\",\n borderWidth: 0,\n padding: \"8px 16px\",\n fontSize: 14,\n fontWeight: 500,\n cursor: \"pointer\",\n \"&:hover\": {\n color: \"#007aa8\",\n bg: \"rgba(0, 152, 204, 0.05)\"\n }\n }\n }\n};\n\n// src/themes.ts\nvar regalTheme = {\n space: [0, 4, 8, 16, 32, 64, 128, 256, 512],\n fonts: {\n body: '\"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n heading: '\"Crimson Text\", \"Georgia\", \"Times New Roman\", serif',\n monospace: '\"Fira Code\", \"SF Mono\", Monaco, Inconsolata, monospace'\n },\n fontSizes: [12, 14, 16, 18, 20, 24, 32, 48, 64, 96],\n fontScale: 1,\n fontWeights: {\n body: 400,\n heading: 600,\n bold: 700,\n light: 300,\n medium: 500,\n semibold: 600\n },\n lineHeights: {\n body: 1.5,\n heading: 1.2,\n tight: 1.25,\n relaxed: 1.75\n },\n breakpoints: [\"640px\", \"768px\", \"1024px\", \"1280px\"],\n sizes: [16, 32, 64, 128, 256, 512, 768, 1024, 1536],\n radii: [0, 2, 4, 6, 8, 12, 16, 24],\n shadows: [\n \"none\",\n \"0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06)\",\n \"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)\",\n \"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)\",\n \"0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)\",\n \"0 25px 50px -12px rgba(0, 0, 0, 0.25)\"\n ],\n zIndices: [0, 1, 10, 20, 30, 40, 50],\n colors: {\n text: \"#f1e8dc\",\n background: \"#1a1f2e\",\n primary: \"#d4a574\",\n secondary: \"#e0b584\",\n accent: \"#c9b8a3\",\n highlight: \"rgba(212, 165, 116, 0.15)\",\n muted: \"#8b7968\",\n success: \"#5c8a72\",\n warning: \"#d4a574\",\n error: \"#a85751\",\n info: \"#d4a574\",\n border: \"rgba(212, 165, 116, 0.2)\",\n backgroundSecondary: \"#212738\",\n backgroundTertiary: \"#2d3446\",\n backgroundLight: \"rgba(212, 165, 116, 0.08)\",\n backgroundHover: \"rgba(212, 165, 116, 0.15)\",\n surface: \"#212738\",\n textSecondary: \"#c9b8a3\",\n textTertiary: \"#8b7968\",\n textMuted: \"#8b7968\",\n highlightBg: \"rgba(255, 193, 7, 0.25)\",\n highlightBorder: \"rgba(255, 193, 7, 0.5)\"\n },\n buttons: {\n primary: {\n color: \"background\",\n bg: \"primary\",\n \"&:hover\": {\n bg: \"secondary\"\n }\n },\n secondary: {\n color: \"text\",\n bg: \"muted\",\n \"&:hover\": {\n bg: \"backgroundSecondary\"\n }\n },\n ghost: {\n color: \"primary\",\n bg: \"transparent\",\n \"&:hover\": {\n bg: \"muted\"\n }\n }\n },\n text: {\n heading: {\n fontFamily: \"heading\",\n fontWeight: \"heading\",\n lineHeight: \"heading\"\n },\n body: {\n fontFamily: \"body\",\n fontWeight: \"body\",\n lineHeight: \"body\"\n },\n caption: {\n fontSize: 1,\n color: \"textSecondary\"\n }\n },\n cards: {\n primary: {\n bg: \"background\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 2\n },\n secondary: {\n bg: \"backgroundSecondary\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 2\n }\n }\n};\nvar terminalTheme = {\n space: [0, 4, 8, 16, 32, 64, 128, 256, 512],\n fonts: {\n body: '\"SF Mono\", \"Monaco\", \"Inconsolata\", \"Fira Code\", monospace',\n heading: '\"SF Mono\", \"Monaco\", \"Inconsolata\", \"Fira Code\", monospace',\n monospace: '\"SF Mono\", \"Monaco\", \"Inconsolata\", \"Fira Code\", monospace'\n },\n fontSizes: [12, 14, 16, 18, 20, 24, 32, 48, 64, 96],\n fontScale: 1,\n fontWeights: {\n body: 400,\n heading: 500,\n bold: 600,\n light: 300,\n medium: 500,\n semibold: 600\n },\n lineHeights: {\n body: 1.6,\n heading: 1.3,\n tight: 1.4,\n relaxed: 1.8\n },\n breakpoints: [\"640px\", \"768px\", \"1024px\", \"1280px\"],\n sizes: [16, 32, 64, 128, 256, 512, 768, 1024, 1536],\n radii: [0, 2, 4, 6, 8, 12, 16, 24],\n shadows: [\n \"none\",\n \"0 1px 2px 0 rgba(0, 0, 0, 0.05)\",\n \"0 2px 4px 0 rgba(0, 0, 0, 0.06)\",\n \"0 4px 6px 0 rgba(0, 0, 0, 0.07)\",\n \"0 8px 12px 0 rgba(0, 0, 0, 0.08)\",\n \"0 16px 24px 0 rgba(0, 0, 0, 0.10)\"\n ],\n zIndices: [0, 1, 10, 20, 30, 40, 50],\n colors: {\n text: \"#e4e4e4\",\n background: \"rgba(10, 10, 10, 0.85)\",\n primary: \"#66b3ff\",\n secondary: \"#80c4ff\",\n accent: \"#66ff99\",\n highlight: \"rgba(102, 179, 255, 0.15)\",\n muted: \"rgba(26, 26, 26, 0.8)\",\n success: \"#66ff99\",\n warning: \"#ffcc66\",\n error: \"#ff6666\",\n info: \"#66b3ff\",\n border: \"rgba(255, 255, 255, 0.1)\",\n backgroundSecondary: \"rgba(15, 15, 15, 0.9)\",\n backgroundTertiary: \"rgba(20, 20, 20, 0.9)\",\n backgroundLight: \"rgba(255, 255, 255, 0.05)\",\n backgroundHover: \"rgba(102, 179, 255, 0.08)\",\n surface: \"rgba(15, 15, 15, 0.95)\",\n textSecondary: \"rgba(255, 255, 255, 0.7)\",\n textTertiary: \"rgba(255, 255, 255, 0.5)\",\n textMuted: \"rgba(255, 255, 255, 0.4)\",\n highlightBg: \"rgba(255, 235, 59, 0.25)\",\n highlightBorder: \"rgba(255, 235, 59, 0.5)\"\n },\n modes: {\n light: {\n text: \"#1a1a1a\",\n background: \"rgba(255, 255, 255, 0.9)\",\n primary: \"#0066cc\",\n secondary: \"#0052a3\",\n accent: \"#00cc88\",\n highlight: \"rgba(0, 102, 204, 0.08)\",\n muted: \"rgba(245, 245, 245, 0.8)\",\n success: \"#00cc88\",\n warning: \"#ffaa00\",\n error: \"#ff3333\",\n info: \"#0066cc\",\n border: \"rgba(0, 0, 0, 0.1)\",\n backgroundSecondary: \"rgba(250, 250, 250, 0.9)\",\n backgroundTertiary: \"rgba(245, 245, 245, 0.9)\",\n backgroundLight: \"rgba(0, 0, 0, 0.02)\",\n backgroundHover: \"rgba(0, 102, 204, 0.04)\",\n surface: \"rgba(255, 255, 255, 0.95)\",\n textSecondary: \"rgba(0, 0, 0, 0.6)\",\n textTertiary: \"rgba(0, 0, 0, 0.4)\",\n textMuted: \"rgba(0, 0, 0, 0.3)\",\n highlightBg: \"rgba(255, 235, 59, 0.3)\",\n highlightBorder: \"rgba(255, 235, 59, 0.6)\"\n }\n },\n buttons: {\n primary: {\n color: \"white\",\n bg: \"primary\",\n borderWidth: 0,\n \"&:hover\": {\n bg: \"secondary\"\n }\n },\n secondary: {\n color: \"primary\",\n bg: \"transparent\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"primary\",\n \"&:hover\": {\n bg: \"highlight\"\n }\n },\n ghost: {\n color: \"text\",\n bg: \"transparent\",\n \"&:hover\": {\n bg: \"backgroundHover\"\n }\n }\n },\n text: {\n heading: {\n fontFamily: \"heading\",\n fontWeight: \"heading\",\n lineHeight: \"heading\"\n },\n body: {\n fontFamily: \"body\",\n fontWeight: \"body\",\n lineHeight: \"body\"\n },\n caption: {\n fontSize: 1,\n color: \"textSecondary\"\n }\n },\n cards: {\n primary: {\n bg: \"surface\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 1\n },\n secondary: {\n bg: \"backgroundSecondary\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 1\n }\n }\n};\nvar matrixTheme = {\n space: [0, 4, 8, 16, 32, 64, 128, 256, 512],\n fonts: {\n body: '\"Courier New\", \"Courier\", \"Lucida Console\", \"Monaco\", monospace',\n heading: '\"Courier New\", \"Courier\", \"Lucida Console\", \"Monaco\", monospace',\n monospace: '\"Courier New\", \"Courier\", \"Lucida Console\", \"Monaco\", monospace'\n },\n fontSizes: [12, 14, 16, 18, 20, 24, 32, 48, 64, 96],\n fontScale: 1,\n fontWeights: {\n body: 400,\n heading: 500,\n bold: 600,\n light: 300,\n medium: 500,\n semibold: 600\n },\n lineHeights: {\n body: 1.5,\n heading: 1.2,\n tight: 1.3,\n relaxed: 1.7\n },\n breakpoints: [\"640px\", \"768px\", \"1024px\", \"1280px\"],\n sizes: [16, 32, 64, 128, 256, 512, 768, 1024, 1536],\n radii: [0, 2, 4, 6, 8, 12, 16, 24],\n shadows: [\n \"none\",\n \"0 0 5px rgba(0, 216, 53, 0.15)\",\n \"0 0 10px rgba(0, 216, 53, 0.2)\",\n \"0 0 15px rgba(0, 216, 53, 0.25)\",\n \"0 0 20px rgba(0, 216, 53, 0.3)\",\n \"0 0 30px rgba(0, 216, 53, 0.4)\"\n ],\n zIndices: [0, 1, 10, 20, 30, 40, 50],\n colors: {\n text: \"#a8a8a8\",\n background: \"#000000\",\n primary: \"#00d835\",\n secondary: \"#00a828\",\n accent: \"#00d835\",\n highlight: \"rgba(0, 216, 53, 0.15)\",\n muted: \"#0a0a0a\",\n success: \"#00d835\",\n warning: \"#d4a000\",\n error: \"#d63333\",\n info: \"#00a8d6\",\n border: \"rgba(0, 216, 53, 0.2)\",\n backgroundSecondary: \"#0a0a0a\",\n backgroundTertiary: \"#111111\",\n backgroundLight: \"rgba(0, 216, 53, 0.03)\",\n backgroundHover: \"rgba(0, 216, 53, 0.08)\",\n surface: \"#050505\",\n textSecondary: \"#808080\",\n textTertiary: \"#606060\",\n textMuted: \"#484848\",\n highlightBg: \"rgba(0, 216, 53, 0.25)\",\n highlightBorder: \"rgba(0, 216, 53, 0.5)\"\n },\n buttons: {\n primary: {\n color: \"black\",\n bg: \"primary\",\n borderWidth: 0,\n \"&:hover\": {\n bg: \"secondary\"\n }\n },\n secondary: {\n color: \"primary\",\n bg: \"transparent\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"primary\",\n \"&:hover\": {\n bg: \"highlight\"\n }\n },\n ghost: {\n color: \"text\",\n bg: \"transparent\",\n \"&:hover\": {\n bg: \"backgroundHover\"\n }\n }\n },\n text: {\n heading: {\n fontFamily: \"heading\",\n fontWeight: \"heading\",\n lineHeight: \"heading\"\n },\n body: {\n fontFamily: \"body\",\n fontWeight: \"body\",\n lineHeight: \"body\"\n },\n caption: {\n fontSize: 1,\n color: \"textSecondary\"\n }\n },\n cards: {\n primary: {\n bg: \"surface\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 0\n },\n secondary: {\n bg: \"backgroundSecondary\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 0\n }\n }\n};\nvar matrixMinimalTheme = {\n space: [0, 4, 8, 16, 32, 64, 128, 256, 512],\n fonts: {\n body: '\"Courier New\", \"Courier\", \"Lucida Console\", \"Monaco\", monospace',\n heading: '\"Courier New\", \"Courier\", \"Lucida Console\", \"Monaco\", monospace',\n monospace: '\"Courier New\", \"Courier\", \"Lucida Console\", \"Monaco\", monospace'\n },\n fontSizes: [12, 14, 16, 18, 20, 24, 32, 48, 64, 96],\n fontScale: 1,\n fontWeights: {\n body: 400,\n heading: 500,\n bold: 600,\n light: 300,\n medium: 500,\n semibold: 600\n },\n lineHeights: {\n body: 1.5,\n heading: 1.2,\n tight: 1.3,\n relaxed: 1.7\n },\n breakpoints: [\"640px\", \"768px\", \"1024px\", \"1280px\"],\n sizes: [16, 32, 64, 128, 256, 512, 768, 1024, 1536],\n radii: [0, 2, 4, 6, 8, 12, 16, 24],\n shadows: [\n \"none\",\n \"0 1px 2px rgba(0, 0, 0, 0.05)\",\n \"0 2px 4px rgba(0, 0, 0, 0.1)\",\n \"0 4px 8px rgba(0, 0, 0, 0.15)\",\n \"0 8px 16px rgba(0, 0, 0, 0.2)\",\n \"0 0 20px rgba(0, 216, 53, 0.1)\"\n ],\n zIndices: [0, 1, 10, 20, 30, 40, 50],\n colors: {\n text: \"#a8a8a8\",\n background: \"#000000\",\n primary: \"#b8b8b8\",\n secondary: \"#909090\",\n accent: \"#00d835\",\n highlight: \"rgba(0, 216, 53, 0.1)\",\n muted: \"#0a0a0a\",\n success: \"#00d835\",\n warning: \"#d4a000\",\n error: \"#d63333\",\n info: \"#00a8d6\",\n border: \"rgba(184, 184, 184, 0.1)\",\n backgroundSecondary: \"#0a0a0a\",\n backgroundTertiary: \"#111111\",\n backgroundLight: \"rgba(184, 184, 184, 0.02)\",\n backgroundHover: \"rgba(0, 216, 53, 0.05)\",\n surface: \"#050505\",\n textSecondary: \"#808080\",\n textTertiary: \"#606060\",\n textMuted: \"#484848\",\n highlightBg: \"rgba(0, 216, 53, 0.2)\",\n highlightBorder: \"rgba(0, 216, 53, 0.4)\"\n },\n buttons: {\n primary: {\n color: \"black\",\n bg: \"primary\",\n borderWidth: 0,\n \"&:hover\": {\n bg: \"secondary\"\n }\n },\n secondary: {\n color: \"primary\",\n bg: \"transparent\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"primary\",\n \"&:hover\": {\n bg: \"backgroundHover\"\n }\n },\n ghost: {\n color: \"text\",\n bg: \"transparent\",\n \"&:hover\": {\n bg: \"backgroundHover\"\n }\n }\n },\n text: {\n heading: {\n fontFamily: \"heading\",\n fontWeight: \"heading\",\n lineHeight: \"heading\"\n },\n body: {\n fontFamily: \"body\",\n fontWeight: \"body\",\n lineHeight: \"body\"\n },\n caption: {\n fontSize: 1,\n color: \"textSecondary\"\n }\n },\n cards: {\n primary: {\n bg: \"surface\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 0\n },\n secondary: {\n bg: \"backgroundSecondary\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 0\n }\n }\n};\nvar slateTheme = {\n space: [0, 4, 8, 16, 32, 64, 128, 256, 512],\n fonts: {\n body: '\"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n heading: '\"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n monospace: '\"Fira Code\", \"SF Mono\", Monaco, Inconsolata, monospace'\n },\n fontSizes: [12, 14, 16, 18, 20, 24, 32, 48, 64, 96],\n fontScale: 1,\n fontWeights: {\n body: 400,\n heading: 600,\n bold: 700,\n light: 300,\n medium: 500,\n semibold: 600\n },\n lineHeights: {\n body: 1.6,\n heading: 1.3,\n tight: 1.25,\n relaxed: 1.75\n },\n breakpoints: [\"640px\", \"768px\", \"1024px\", \"1280px\"],\n sizes: [16, 32, 64, 128, 256, 512, 768, 1024, 1536],\n radii: [0, 2, 4, 6, 8, 12, 16, 24],\n shadows: [\n \"none\",\n \"0 1px 3px 0 rgba(0, 0, 0, 0.2)\",\n \"0 4px 6px -1px rgba(0, 0, 0, 0.2)\",\n \"0 10px 15px -3px rgba(0, 0, 0, 0.2)\",\n \"0 20px 25px -5px rgba(0, 0, 0, 0.25)\",\n \"0 25px 50px -12px rgba(0, 0, 0, 0.3)\"\n ],\n zIndices: [0, 1, 10, 20, 30, 40, 50],\n colors: {\n text: \"#9ca3af\",\n background: \"#1a1c1e\",\n primary: \"#d1d5db\",\n secondary: \"#6b7280\",\n accent: \"#f59e0b\",\n highlight: \"rgba(209, 213, 219, 0.15)\",\n muted: \"#2d3134\",\n success: \"#10b981\",\n warning: \"#f59e0b\",\n error: \"#ef4444\",\n info: \"#3b82f6\",\n border: \"rgba(156, 163, 175, 0.15)\",\n backgroundSecondary: \"#22252a\",\n backgroundTertiary: \"#2d3134\",\n backgroundLight: \"rgba(156, 163, 175, 0.05)\",\n backgroundHover: \"rgba(156, 163, 175, 0.1)\",\n surface: \"#1f2124\",\n textSecondary: \"#e5e7eb\",\n textTertiary: \"#6b7280\",\n textMuted: \"#4b5563\",\n highlightBg: \"rgba(245, 158, 11, 0.25)\",\n highlightBorder: \"rgba(245, 158, 11, 0.5)\"\n },\n buttons: {\n primary: {\n color: \"#1a1c1e\",\n bg: \"primary\",\n borderWidth: 0,\n \"&:hover\": {\n bg: \"#9ca3af\"\n }\n },\n secondary: {\n color: \"#e5e7eb\",\n bg: \"secondary\",\n borderWidth: 0,\n \"&:hover\": {\n bg: \"#4b5563\"\n }\n },\n ghost: {\n color: \"textSecondary\",\n bg: \"transparent\",\n \"&:hover\": {\n bg: \"backgroundHover\"\n }\n }\n },\n text: {\n heading: {\n fontFamily: \"heading\",\n fontWeight: \"heading\",\n lineHeight: \"heading\",\n color: \"textSecondary\"\n },\n body: {\n fontFamily: \"body\",\n fontWeight: \"body\",\n lineHeight: \"body\"\n },\n caption: {\n fontSize: 1,\n color: \"textTertiary\"\n }\n },\n cards: {\n primary: {\n bg: \"surface\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 3\n },\n secondary: {\n bg: \"backgroundSecondary\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 3\n }\n }\n};\n// src/ThemeProvider.tsx\nimport React, { createContext, useContext, useState, useEffect } from \"react\";\n\n// src/themeHelpers.ts\nfunction overrideColors(theme, colors) {\n return {\n ...theme,\n colors: {\n ...theme.colors,\n ...colors\n }\n };\n}\nfunction makeTheme(baseTheme, overrides) {\n return {\n ...baseTheme,\n ...overrides,\n colors: {\n ...baseTheme.colors,\n ...overrides.colors\n },\n fonts: {\n ...baseTheme.fonts,\n ...overrides.fonts\n }\n };\n}\nfunction addMode(theme, modeName, colors, baseMode) {\n let baseColors;\n if (baseMode && theme.modes && theme.modes[baseMode]) {\n baseColors = {\n ...theme.colors,\n ...theme.modes[baseMode]\n };\n } else {\n baseColors = theme.colors;\n }\n const newMode = {\n ...baseColors,\n ...colors\n };\n return {\n ...theme,\n modes: {\n ...theme.modes,\n [modeName]: newMode\n }\n };\n}\nfunction getMode(theme, mode) {\n if (!mode || !theme.modes || !theme.modes[mode]) {\n return theme.colors;\n }\n return {\n ...theme.colors,\n ...theme.modes[mode]\n };\n}\n\n// src/ThemeProvider.tsx\nvar ThemeContext;\nvar getThemeContext = () => {\n if (typeof window !== \"undefined\") {\n const globalWindow = window;\n if (!globalWindow.__principlemd_theme_context__) {\n globalWindow.__principlemd_theme_context__ = createContext(undefined);\n }\n return globalWindow.__principlemd_theme_context__;\n } else {\n if (!ThemeContext) {\n ThemeContext = createContext(undefined);\n }\n return ThemeContext;\n }\n};\nvar ThemeContextSingleton = getThemeContext();\nvar useTheme = () => {\n const context = useContext(ThemeContextSingleton);\n if (!context) {\n throw new Error(\"useTheme must be used within a ThemeProvider\");\n }\n return context;\n};\nvar ThemeProvider = ({\n children,\n theme: customTheme = theme,\n initialMode\n}) => {\n const [mode, setMode] = useState(initialMode);\n const activeTheme = React.useMemo(() => {\n if (!mode || !customTheme.modes || !customTheme.modes[mode]) {\n return customTheme;\n }\n return {\n ...customTheme,\n colors: getMode(customTheme, mode)\n };\n }, [customTheme, mode]);\n useEffect(() => {\n if (!initialMode) {\n const savedMode = localStorage.getItem(\"principlemd-theme-mode\");\n if (savedMode) {\n setMode(savedMode);\n }\n }\n }, [initialMode]);\n useEffect(() => {\n if (mode) {\n localStorage.setItem(\"principlemd-theme-mode\", mode);\n } else {\n localStorage.removeItem(\"principlemd-theme-mode\");\n }\n }, [mode]);\n const value = {\n theme: activeTheme,\n mode,\n setMode\n };\n return /* @__PURE__ */ React.createElement(ThemeContextSingleton.Provider, {\n value\n }, children);\n};\nvar withTheme = (Component) => {\n return (props) => {\n const { theme: theme2 } = useTheme();\n return /* @__PURE__ */ React.createElement(Component, {\n ...props,\n theme: theme2\n });\n };\n};\n// src/utils.ts\nvar getColor = (theme2, colorKey) => {\n const colors = theme2.colors;\n const value = colors[colorKey];\n return typeof value === \"string\" ? value : colorKey;\n};\nvar getSpace = (theme2, index) => {\n return theme2.space[index] || 0;\n};\nvar getFontSize = (theme2, index) => {\n return theme2.fontSizes[index] || theme2.fontSizes[2];\n};\nvar getRadius = (theme2, index) => {\n return theme2.radii[index] || 0;\n};\nvar getShadow = (theme2, index) => {\n return theme2.shadows[index] || \"none\";\n};\nvar getZIndex = (theme2, index) => {\n return theme2.zIndices[index] || 0;\n};\nvar responsive = (values) => {\n return values.reduce((acc, value, index) => {\n if (index === 0) {\n return value;\n }\n return {\n ...acc,\n [`@media screen and (min-width: ${values[index - 1]})`]: value\n };\n }, {});\n};\nvar sx = (styles) => styles;\nvar createStyle = (theme2, styleObj) => {\n const processValue = (value) => {\n if (typeof value === \"string\") {\n if (value in theme2.colors) {\n return getColor(theme2, value);\n }\n return value;\n }\n if (typeof value === \"number\") {\n return value;\n }\n if (Array.isArray(value)) {\n return value.map(processValue);\n }\n if (typeof value === \"object\" && value !== null) {\n const processed2 = {};\n for (const [key, val] of Object.entries(value)) {\n processed2[key] = processValue(val);\n }\n return processed2;\n }\n return value;\n };\n const processed = {};\n for (const [key, val] of Object.entries(styleObj)) {\n processed[key] = processValue(val);\n }\n return processed;\n};\nvar mergeThemes = (baseTheme, ...overrides) => {\n return overrides.reduce((theme2, override) => ({\n space: override.space || theme2.space,\n fonts: { ...theme2.fonts, ...override.fonts || {} },\n fontSizes: override.fontSizes || theme2.fontSizes,\n fontWeights: { ...theme2.fontWeights, ...override.fontWeights || {} },\n lineHeights: { ...theme2.lineHeights, ...override.lineHeights || {} },\n breakpoints: override.breakpoints || theme2.breakpoints,\n sizes: override.sizes || theme2.sizes,\n radii: override.radii || theme2.radii,\n shadows: override.shadows || theme2.shadows,\n zIndices: override.zIndices || theme2.zIndices,\n colors: {\n ...theme2.colors,\n ...override.colors || {}\n },\n buttons: { ...theme2.buttons, ...override.buttons || {} },\n text: { ...theme2.text, ...override.text || {} },\n cards: { ...theme2.cards, ...override.cards || {} }\n }), baseTheme);\n};\n// src/ThemeShowcase.tsx\nimport React2 from \"react\";\nvar ThemeShowcase = ({\n theme: theme2,\n title,\n showValues = true,\n sections = [\"colors\", \"typography\", \"spacing\", \"shadows\", \"radii\"]\n}) => {\n const containerStyle = {\n fontFamily: theme2.fonts.body,\n color: theme2.colors.text,\n backgroundColor: theme2.colors.background,\n padding: theme2.space[4],\n minHeight: \"100vh\"\n };\n const sectionStyle = {\n marginBottom: theme2.space[5],\n padding: theme2.space[4],\n backgroundColor: theme2.colors.surface || theme2.colors.backgroundSecondary,\n borderRadius: theme2.radii[2],\n border: `1px solid ${theme2.colors.border}`\n };\n const headingStyle = {\n fontFamily: theme2.fonts.heading,\n fontSize: theme2.fontSizes[5],\n fontWeight: theme2.fontWeights.heading,\n marginBottom: theme2.space[3],\n color: theme2.colors.primary\n };\n const subheadingStyle = {\n fontFamily: theme2.fonts.heading,\n fontSize: theme2.fontSizes[3],\n fontWeight: theme2.fontWeights.medium,\n marginBottom: theme2.space[2],\n marginTop: theme2.space[3],\n color: theme2.colors.text\n };\n return /* @__PURE__ */ React2.createElement(\"div\", {\n style: containerStyle\n }, title && /* @__PURE__ */ React2.createElement(\"h1\", {\n style: {\n ...headingStyle,\n fontSize: theme2.fontSizes[6],\n marginBottom: theme2.space[4]\n }\n }, title), sections.includes(\"colors\") && /* @__PURE__ */ React2.createElement(\"div\", {\n style: sectionStyle\n }, /* @__PURE__ */ React2.createElement(\"h2\", {\n style: headingStyle\n }, \"Colors\"), /* @__PURE__ */ React2.createElement(\"h3\", {\n style: subheadingStyle\n }, \"Primary Colors\"), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fill, minmax(200px, 1fr))\",\n gap: theme2.space[3],\n marginBottom: theme2.space[3]\n }\n }, [\"text\", \"background\", \"primary\", \"secondary\", \"accent\", \"muted\"].map((key) => {\n const color = theme2.colors[key];\n if (!color)\n return null;\n return /* @__PURE__ */ React2.createElement(\"div\", {\n key,\n style: {\n display: \"flex\",\n alignItems: \"center\",\n padding: theme2.space[2],\n backgroundColor: theme2.colors.backgroundLight || theme2.colors.backgroundTertiary,\n borderRadius: theme2.radii[1]\n }\n }, /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n width: 40,\n height: 40,\n backgroundColor: color,\n border: `1px solid ${theme2.colors.border}`,\n borderRadius: theme2.radii[1],\n marginRight: theme2.space[2]\n }\n }), /* @__PURE__ */ React2.createElement(\"div\", null, /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[1],\n fontWeight: theme2.fontWeights.medium\n }\n }, key), showValues && /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[0],\n color: theme2.colors.textSecondary\n }\n }, color)));\n })), /* @__PURE__ */ React2.createElement(\"h3\", {\n style: subheadingStyle\n }, \"Status Colors\"), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fill, minmax(200px, 1fr))\",\n gap: theme2.space[3],\n marginBottom: theme2.space[3]\n }\n }, [\"success\", \"warning\", \"error\", \"info\"].map((key) => {\n const color = theme2.colors[key];\n if (!color)\n return null;\n return /* @__PURE__ */ React2.createElement(\"div\", {\n key,\n style: {\n display: \"flex\",\n alignItems: \"center\",\n padding: theme2.space[2],\n backgroundColor: theme2.colors.backgroundLight || theme2.colors.backgroundTertiary,\n borderRadius: theme2.radii[1]\n }\n }, /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n width: 40,\n height: 40,\n backgroundColor: color,\n border: `1px solid ${theme2.colors.border}`,\n borderRadius: theme2.radii[1],\n marginRight: theme2.space[2]\n }\n }), /* @__PURE__ */ React2.createElement(\"div\", null, /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[1],\n fontWeight: theme2.fontWeights.medium\n }\n }, key), showValues && /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[0],\n color: theme2.colors.textSecondary\n }\n }, color)));\n })), /* @__PURE__ */ React2.createElement(\"h3\", {\n style: subheadingStyle\n }, \"Background Colors\"), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fill, minmax(200px, 1fr))\",\n gap: theme2.space[3]\n }\n }, [\"backgroundSecondary\", \"backgroundTertiary\", \"backgroundLight\", \"backgroundHover\", \"surface\"].map((key) => {\n const color = theme2.colors[key];\n if (!color)\n return null;\n return /* @__PURE__ */ React2.createElement(\"div\", {\n key,\n style: {\n padding: theme2.space[3],\n backgroundColor: color,\n border: `1px solid ${theme2.colors.border}`,\n borderRadius: theme2.radii[1]\n }\n }, /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[1],\n fontWeight: theme2.fontWeights.medium\n }\n }, key), showValues && /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[0],\n color: theme2.colors.textSecondary,\n marginTop: theme2.space[1]\n }\n }, color));\n }))), sections.includes(\"typography\") && /* @__PURE__ */ React2.createElement(\"div\", {\n style: sectionStyle\n }, /* @__PURE__ */ React2.createElement(\"h2\", {\n style: headingStyle\n }, \"Typography\"), /* @__PURE__ */ React2.createElement(\"h3\", {\n style: subheadingStyle\n }, \"Font Families\"), /* @__PURE__ */ React2.createElement(\"div\", {\n style: { marginBottom: theme2.space[4] }\n }, /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.heading,\n fontSize: theme2.fontSizes[4],\n marginBottom: theme2.space[2]\n }\n }, \"Heading Font: \", showValues && /* @__PURE__ */ React2.createElement(\"span\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[1],\n color: theme2.colors.textSecondary\n }\n }, \" \", theme2.fonts.heading)), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.body,\n fontSize: theme2.fontSizes[2],\n marginBottom: theme2.space[2]\n }\n }, \"Body Font: \", showValues && /* @__PURE__ */ React2.createElement(\"span\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[1],\n color: theme2.colors.textSecondary\n }\n }, \" \", theme2.fonts.body)), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[2]\n }\n }, \"Monospace Font: \", showValues && /* @__PURE__ */ React2.createElement(\"span\", {\n style: {\n fontSize: theme2.fontSizes[1],\n color: theme2.colors.textSecondary\n }\n }, \" \", theme2.fonts.monospace))), /* @__PURE__ */ React2.createElement(\"h3\", {\n style: subheadingStyle\n }, \"Font Sizes\"), /* @__PURE__ */ React2.createElement(\"div\", {\n style: { marginBottom: theme2.space[4] }\n }, theme2.fontSizes.map((size, index) => /* @__PURE__ */ React2.createElement(\"div\", {\n key: index,\n style: {\n fontSize: size,\n lineHeight: theme2.lineHeights.body,\n marginBottom: theme2.space[1]\n }\n }, \"Size \", index, \": Sample Text \", showValues && `(${size}px)`))), /* @__PURE__ */ React2.createElement(\"h3\", {\n style: subheadingStyle\n }, \"Font Weights\"), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fit, minmax(150px, 1fr))\",\n gap: theme2.space[2]\n }\n }, Object.entries(theme2.fontWeights).map(([name, weight]) => /* @__PURE__ */ React2.createElement(\"div\", {\n key: name,\n style: {\n fontWeight: weight,\n fontSize: theme2.fontSizes[2]\n }\n }, name, \" \", showValues && `(${weight})`)))), sections.includes(\"spacing\") && /* @__PURE__ */ React2.createElement(\"div\", {\n style: sectionStyle\n }, /* @__PURE__ */ React2.createElement(\"h2\", {\n style: headingStyle\n }, \"Spacing\"), /* @__PURE__ */ React2.createElement(\"div\", {\n style: { display: \"flex\", flexDirection: \"column\", gap: theme2.space[2] }\n }, theme2.space.map((space, index) => /* @__PURE__ */ React2.createElement(\"div\", {\n key: index,\n style: { display: \"flex\", alignItems: \"center\" }\n }, /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n width: 60,\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[1],\n color: theme2.colors.textSecondary\n }\n }, \"[\", index, \"]\"), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n height: 24,\n width: space,\n backgroundColor: theme2.colors.primary,\n borderRadius: theme2.radii[1]\n }\n }), showValues && /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n marginLeft: theme2.space[2],\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[1],\n color: theme2.colors.textSecondary\n }\n }, space, \"px\"))))), sections.includes(\"radii\") && /* @__PURE__ */ React2.createElement(\"div\", {\n style: sectionStyle\n }, /* @__PURE__ */ React2.createElement(\"h2\", {\n style: headingStyle\n }, \"Border Radii\"), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fill, minmax(100px, 1fr))\",\n gap: theme2.space[3]\n }\n }, theme2.radii.map((radius, index) => /* @__PURE__ */ React2.createElement(\"div\", {\n key: index,\n style: { textAlign: \"center\" }\n }, /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n width: 80,\n height: 80,\n backgroundColor: theme2.colors.primary,\n borderRadius: radius,\n marginBottom: theme2.space[1],\n margin: \"0 auto\"\n }\n }), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[0],\n color: theme2.colors.textSecondary\n }\n }, \"[\", index, \"] \", showValues && `${radius}px`))))), sections.includes(\"shadows\") && /* @__PURE__ */ React2.createElement(\"div\", {\n style: sectionStyle\n }, /* @__PURE__ */ React2.createElement(\"h2\", {\n style: headingStyle\n }, \"Shadows\"), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fill, minmax(150px, 1fr))\",\n gap: theme2.space[4]\n }\n }, theme2.shadows.map((shadow, index) => /* @__PURE__ */ React2.createElement(\"div\", {\n key: index,\n style: { textAlign: \"center\" }\n }, /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n width: 100,\n height: 100,\n backgroundColor: theme2.colors.background,\n boxShadow: shadow,\n borderRadius: theme2.radii[2],\n margin: \"0 auto\",\n marginBottom: theme2.space[2],\n border: `1px solid ${theme2.colors.border}`\n }\n }), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[0],\n color: theme2.colors.textSecondary\n }\n }, \"Shadow [\", index, \"]\"), showValues && /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[0],\n color: theme2.colors.textMuted,\n marginTop: theme2.space[1]\n }\n }, shadow === \"none\" ? \"none\" : \"...\"))))), theme2.modes && Object.keys(theme2.modes).length > 0 && /* @__PURE__ */ React2.createElement(\"div\", {\n style: sectionStyle\n }, /* @__PURE__ */ React2.createElement(\"h2\", {\n style: headingStyle\n }, \"Available Modes\"), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n display: \"flex\",\n gap: theme2.space[2],\n flexWrap: \"wrap\"\n }\n }, /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n padding: `${theme2.space[2]}px ${theme2.space[3]}px`,\n backgroundColor: theme2.colors.primary,\n color: \"#ffffff\",\n borderRadius: theme2.radii[2],\n fontFamily: theme2.fonts.body,\n fontSize: theme2.fontSizes[1]\n }\n }, \"default\"), Object.keys(theme2.modes).map((modeName) => /* @__PURE__ */ React2.createElement(\"div\", {\n key: modeName,\n style: {\n padding: `${theme2.space[2]}px ${theme2.space[3]}px`,\n backgroundColor: theme2.colors.secondary,\n color: theme2.colors.text,\n borderRadius: theme2.radii[2],\n fontFamily: theme2.fonts.body,\n fontSize: theme2.fontSizes[1]\n }\n }, modeName)))));\n};\n\n// src/index.ts\nvar theme = terminalTheme;\nfunction scaleThemeFonts(theme2, scale) {\n const currentScale = theme2.fontScale || 1;\n const effectiveScale = scale / currentScale;\n return {\n ...theme2,\n fontSizes: theme2.fontSizes.map((size) => Math.round(size * effectiveScale)),\n fontScale: scale\n };\n}\nfunction increaseFontScale(theme2) {\n const currentScale = theme2.fontScale || 1;\n const newScale = Math.min(currentScale * 1.1, 2);\n return scaleThemeFonts(theme2, newScale);\n}\nfunction decreaseFontScale(theme2) {\n const currentScale = theme2.fontScale || 1;\n const newScale = Math.max(currentScale * 0.9, 0.5);\n return scaleThemeFonts(theme2, newScale);\n}\nfunction resetFontScale(theme2) {\n return scaleThemeFonts(theme2, 1);\n}\nvar src_default = theme;\nexport {\n withTheme,\n useTheme,\n theme,\n terminalTheme,\n sx,\n slateTheme,\n scaleThemeFonts,\n responsive,\n resetFontScale,\n regalTheme,\n overrideColors,\n mergeThemes,\n matrixTheme,\n matrixMinimalTheme,\n makeTheme,\n landingPageTheme,\n landingPageLightTheme,\n increaseFontScale,\n glassmorphismTheme,\n getZIndex,\n getSpace,\n getShadow,\n getRadius,\n getMode,\n getFontSize,\n getColor,\n defaultTerminalTheme,\n defaultMarkdownTheme,\n defaultEditorTheme,\n src_default as default,\n decreaseFontScale,\n createStyle,\n addMode,\n ThemeShowcase,\n ThemeProvider\n};\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\nconst toCamelCase = (string) => string.replace(\n /^([A-Z])|[\\s-_]+(\\w)/g,\n (match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase()\n);\nconst toPascalCase = (string) => {\n const camelCase = toCamelCase(string);\n return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);\n};\nconst mergeClasses = (...classes) => classes.filter((className, index, array) => {\n return Boolean(className) && className.trim() !== \"\" && array.indexOf(className) === index;\n}).join(\" \").trim();\nconst hasA11yProp = (props) => {\n for (const prop in props) {\n if (prop.startsWith(\"aria-\") || prop === \"role\" || prop === \"title\") {\n return true;\n }\n }\n};\n\nexport { hasA11yProp, mergeClasses, toCamelCase, toKebabCase, toPascalCase };\n//# sourceMappingURL=utils.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nvar defaultAttributes = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n};\n\nexport { defaultAttributes as default };\n//# sourceMappingURL=defaultAttributes.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport defaultAttributes from './defaultAttributes.js';\nimport { mergeClasses, hasA11yProp } from './shared/src/utils.js';\n\nconst Icon = forwardRef(\n ({\n color = \"currentColor\",\n size = 24,\n strokeWidth = 2,\n absoluteStrokeWidth,\n className = \"\",\n children,\n iconNode,\n ...rest\n }, ref) => createElement(\n \"svg\",\n {\n ref,\n ...defaultAttributes,\n width: size,\n height: size,\n stroke: color,\n strokeWidth: absoluteStrokeWidth ? Number(strokeWidth) * 24 / Number(size) : strokeWidth,\n className: mergeClasses(\"lucide\", className),\n ...!children && !hasA11yProp(rest) && { \"aria-hidden\": \"true\" },\n ...rest\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...Array.isArray(children) ? children : [children]\n ]\n )\n);\n\nexport { Icon as default };\n//# sourceMappingURL=Icon.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport { mergeClasses, toKebabCase, toPascalCase } from './shared/src/utils.js';\nimport Icon from './Icon.js';\n\nconst createLucideIcon = (iconName, iconNode) => {\n const Component = forwardRef(\n ({ className, ...props }, ref) => createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(\n `lucide-${toKebabCase(toPascalCase(iconName))}`,\n `lucide-${iconName}`,\n className\n ),\n ...props\n })\n );\n Component.displayName = toPascalCase(iconName);\n return Component;\n};\n\nexport { createLucideIcon as default };\n//# sourceMappingURL=createLucideIcon.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M2.97 12.92A2 2 0 0 0 2 14.63v3.24a2 2 0 0 0 .97 1.71l3 1.8a2 2 0 0 0 2.06 0L12 19v-5.5l-5-3-4.03 2.42Z\",\n key: \"lc1i9w\"\n }\n ],\n [\"path\", { d: \"m7 16.5-4.74-2.85\", key: \"1o9zyk\" }],\n [\"path\", { d: \"m7 16.5 5-3\", key: \"va8pkn\" }],\n [\"path\", { d: \"M7 16.5v5.17\", key: \"jnp8gn\" }],\n [\n \"path\",\n {\n d: \"M12 13.5V19l3.97 2.38a2 2 0 0 0 2.06 0l3-1.8a2 2 0 0 0 .97-1.71v-3.24a2 2 0 0 0-.97-1.71L17 10.5l-5 3Z\",\n key: \"8zsnat\"\n }\n ],\n [\"path\", { d: \"m17 16.5-5-3\", key: \"8arw3v\" }],\n [\"path\", { d: \"m17 16.5 4.74-2.85\", key: \"8rfmw\" }],\n [\"path\", { d: \"M17 16.5v5.17\", key: \"k6z78m\" }],\n [\n \"path\",\n {\n d: \"M7.97 4.42A2 2 0 0 0 7 6.13v4.37l5 3 5-3V6.13a2 2 0 0 0-.97-1.71l-3-1.8a2 2 0 0 0-2.06 0l-3 1.8Z\",\n key: \"1xygjf\"\n }\n ],\n [\"path\", { d: \"M12 8 7.26 5.15\", key: \"1vbdud\" }],\n [\"path\", { d: \"m12 8 4.74-2.85\", key: \"3rx089\" }],\n [\"path\", { d: \"M12 13.5V8\", key: \"1io7kd\" }]\n];\nconst Boxes = createLucideIcon(\"boxes\", __iconNode);\n\nexport { __iconNode, Boxes as default };\n//# sourceMappingURL=boxes.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"M20 6 9 17l-5-5\", key: \"1gmf2c\" }]];\nconst Check = createLucideIcon(\"check\", __iconNode);\n\nexport { __iconNode, Check as default };\n//# sourceMappingURL=check.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"m6 9 6 6 6-6\", key: \"qrunsl\" }]];\nconst ChevronDown = createLucideIcon(\"chevron-down\", __iconNode);\n\nexport { __iconNode, ChevronDown as default };\n//# sourceMappingURL=chevron-down.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"m9 18 6-6-6-6\", key: \"mthhwq\" }]];\nconst ChevronRight = createLucideIcon(\"chevron-right\", __iconNode);\n\nexport { __iconNode, ChevronRight as default };\n//# sourceMappingURL=chevron-right.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"line\", { x1: \"12\", x2: \"12\", y1: \"8\", y2: \"12\", key: \"1pkeuh\" }],\n [\"line\", { x1: \"12\", x2: \"12.01\", y1: \"16\", y2: \"16\", key: \"4dfq90\" }]\n];\nconst CircleAlert = createLucideIcon(\"circle-alert\", __iconNode);\n\nexport { __iconNode, CircleAlert as default };\n//# sourceMappingURL=circle-alert.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"path\", { d: \"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3\", key: \"1u773s\" }],\n [\"path\", { d: \"M12 17h.01\", key: \"p32p05\" }]\n];\nconst CircleQuestionMark = createLucideIcon(\"circle-question-mark\", __iconNode);\n\nexport { __iconNode, CircleQuestionMark as default };\n//# sourceMappingURL=circle-question-mark.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"rect\", { width: \"14\", height: \"14\", x: \"8\", y: \"8\", rx: \"2\", ry: \"2\", key: \"17jyea\" }],\n [\"path\", { d: \"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\", key: \"zix9uf\" }]\n];\nconst Copy = createLucideIcon(\"copy\", __iconNode);\n\nexport { __iconNode, Copy as default };\n//# sourceMappingURL=copy.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M15 3h6v6\", key: \"1q9fwt\" }],\n [\"path\", { d: \"M10 14 21 3\", key: \"gplh6r\" }],\n [\"path\", { d: \"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\", key: \"a6xqqp\" }]\n];\nconst ExternalLink = createLucideIcon(\"external-link\", __iconNode);\n\nexport { __iconNode, ExternalLink as default };\n//# sourceMappingURL=external-link.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z\",\n key: \"1oefj6\"\n }\n ],\n [\"path\", { d: \"M14 2v5a1 1 0 0 0 1 1h5\", key: \"wfsgrz\" }],\n [\"path\", { d: \"M10 12.5 8 15l2 2.5\", key: \"1tg20x\" }],\n [\"path\", { d: \"m14 12.5 2 2.5-2 2.5\", key: \"yinavb\" }]\n];\nconst FileCode = createLucideIcon(\"file-code\", __iconNode);\n\nexport { __iconNode, FileCode as default };\n//# sourceMappingURL=file-code.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z\",\n key: \"1oefj6\"\n }\n ],\n [\"path\", { d: \"M12 17h.01\", key: \"p32p05\" }],\n [\"path\", { d: \"M9.1 9a3 3 0 0 1 5.82 1c0 2-3 3-3 3\", key: \"mhlwft\" }]\n];\nconst FileQuestionMark = createLucideIcon(\"file-question-mark\", __iconNode);\n\nexport { __iconNode, FileQuestionMark as default };\n//# sourceMappingURL=file-question-mark.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z\",\n key: \"1kt360\"\n }\n ]\n];\nconst Folder = createLucideIcon(\"folder\", __iconNode);\n\nexport { __iconNode, Folder as default };\n//# sourceMappingURL=folder.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"line\", { x1: \"6\", x2: \"6\", y1: \"3\", y2: \"15\", key: \"17qcm7\" }],\n [\"circle\", { cx: \"18\", cy: \"6\", r: \"3\", key: \"1h7g24\" }],\n [\"circle\", { cx: \"6\", cy: \"18\", r: \"3\", key: \"fqmcym\" }],\n [\"path\", { d: \"M18 9a9 9 0 0 1-9 9\", key: \"n2h4wq\" }]\n];\nconst GitBranch = createLucideIcon(\"git-branch\", __iconNode);\n\nexport { __iconNode, GitBranch as default };\n//# sourceMappingURL=git-branch.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"M5 12h14\", key: \"1ays0h\" }]];\nconst Minus = createLucideIcon(\"minus\", __iconNode);\n\nexport { __iconNode, Minus as default };\n//# sourceMappingURL=minus.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z\",\n key: \"1a0edw\"\n }\n ],\n [\"path\", { d: \"M12 22V12\", key: \"d0xqtd\" }],\n [\"polyline\", { points: \"3.29 7 12 12 20.71 7\", key: \"ousv84\" }],\n [\"path\", { d: \"m7.5 4.27 9 5.15\", key: \"1c824w\" }]\n];\nconst Package = createLucideIcon(\"package\", __iconNode);\n\nexport { __iconNode, Package as default };\n//# sourceMappingURL=package.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M5 12h14\", key: \"1ays0h\" }],\n [\"path\", { d: \"M12 5v14\", key: \"s699le\" }]\n];\nconst Plus = createLucideIcon(\"plus\", __iconNode);\n\nexport { __iconNode, Plus as default };\n//# sourceMappingURL=plus.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"m16 16 3-8 3 8c-.87.65-1.92 1-3 1s-2.13-.35-3-1Z\", key: \"7g6ntu\" }],\n [\"path\", { d: \"m2 16 3-8 3 8c-.87.65-1.92 1-3 1s-2.13-.35-3-1Z\", key: \"ijws7r\" }],\n [\"path\", { d: \"M7 21h10\", key: \"1b0cd5\" }],\n [\"path\", { d: \"M12 3v18\", key: \"108xh3\" }],\n [\"path\", { d: \"M3 7h2c2 0 5-1 7-2 2 1 5 2 7 2h2\", key: \"3gwbw2\" }]\n];\nconst Scale = createLucideIcon(\"scale\", __iconNode);\n\nexport { __iconNode, Scale as default };\n//# sourceMappingURL=scale.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"m21 21-4.34-4.34\", key: \"14j7rj\" }],\n [\"circle\", { cx: \"11\", cy: \"11\", r: \"8\", key: \"4ej97u\" }]\n];\nconst Search = createLucideIcon(\"search\", __iconNode);\n\nexport { __iconNode, Search as default };\n//# sourceMappingURL=search.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915\",\n key: \"1i5ecw\"\n }\n ],\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"3\", key: \"1v7zrd\" }]\n];\nconst Settings = createLucideIcon(\"settings\", __iconNode);\n\nexport { __iconNode, Settings as default };\n//# sourceMappingURL=settings.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\", key: \"1m0v6g\" }],\n [\n \"path\",\n {\n d: \"M18.375 2.625a1 1 0 0 1 3 3l-9.013 9.014a2 2 0 0 1-.853.505l-2.873.84a.5.5 0 0 1-.62-.62l.84-2.873a2 2 0 0 1 .506-.852z\",\n key: \"ohrbg2\"\n }\n ]\n];\nconst SquarePen = createLucideIcon(\"square-pen\", __iconNode);\n\nexport { __iconNode, SquarePen as default };\n//# sourceMappingURL=square-pen.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M12 19h8\", key: \"baeox8\" }],\n [\"path\", { d: \"m4 17 6-6-6-6\", key: \"1yngyt\" }]\n];\nconst Terminal = createLucideIcon(\"terminal\", __iconNode);\n\nexport { __iconNode, Terminal as default };\n//# sourceMappingURL=terminal.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M18 6 6 18\", key: \"1bl5f8\" }],\n [\"path\", { d: \"m6 6 12 12\", key: \"d8bk6v\" }]\n];\nconst X = createLucideIcon(\"x\", __iconNode);\n\nexport { __iconNode, X as default };\n//# sourceMappingURL=x.js.map\n","/**\n * @license React\n * use-sync-external-store-shim.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar React = require(\"react\");\nfunction is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useState = React.useState,\n useEffect = React.useEffect,\n useLayoutEffect = React.useLayoutEffect,\n useDebugValue = React.useDebugValue;\nfunction useSyncExternalStore$2(subscribe, getSnapshot) {\n var value = getSnapshot(),\n _useState = useState({ inst: { value: value, getSnapshot: getSnapshot } }),\n inst = _useState[0].inst,\n forceUpdate = _useState[1];\n useLayoutEffect(\n function () {\n inst.value = value;\n inst.getSnapshot = getSnapshot;\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n },\n [subscribe, value, getSnapshot]\n );\n useEffect(\n function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n return subscribe(function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n });\n },\n [subscribe]\n );\n useDebugValue(value);\n return value;\n}\nfunction checkIfSnapshotChanged(inst) {\n var latestGetSnapshot = inst.getSnapshot;\n inst = inst.value;\n try {\n var nextValue = latestGetSnapshot();\n return !objectIs(inst, nextValue);\n } catch (error) {\n return !0;\n }\n}\nfunction useSyncExternalStore$1(subscribe, getSnapshot) {\n return getSnapshot();\n}\nvar shim =\n \"undefined\" === typeof window ||\n \"undefined\" === typeof window.document ||\n \"undefined\" === typeof window.document.createElement\n ? useSyncExternalStore$1\n : useSyncExternalStore$2;\nexports.useSyncExternalStore =\n void 0 !== React.useSyncExternalStore ? React.useSyncExternalStore : shim;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim.production.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim.development.js');\n}\n","import { createContext, useContext } from \"react\";\nexport const TreeApiContext = createContext(null);\nexport function useTreeApi() {\n const value = useContext(TreeApiContext);\n if (value === null)\n throw new Error(\"No Tree Api Provided\");\n return value;\n}\nexport const NodesContext = createContext(null);\nexport function useNodesContext() {\n const value = useContext(NodesContext);\n if (value === null)\n throw new Error(\"Provide a NodesContext\");\n return value;\n}\nexport const DndContext = createContext(null);\nexport function useDndContext() {\n const value = useContext(DndContext);\n if (value === null)\n throw new Error(\"Provide a DnDContext\");\n return value;\n}\nexport const DataUpdatesContext = createContext(0);\nexport function useDataUpdates() {\n useContext(DataUpdatesContext);\n}\n","export function bound(n, min, max) {\n return Math.max(Math.min(n, max), min);\n}\nexport function isItem(node) {\n return node && node.isLeaf;\n}\nexport function isClosed(node) {\n return node && node.isInternal && !node.isOpen;\n}\nexport function isOpenWithEmptyChildren(node) {\n var _a;\n return node && node.isOpen && !((_a = node.children) === null || _a === void 0 ? void 0 : _a.length);\n}\n/**\n * Is first param a descendant of the second param\n */\nexport const isDescendant = (a, b) => {\n let n = a;\n while (n) {\n if (n.id === b.id)\n return true;\n n = n.parent;\n }\n return false;\n};\nexport const indexOf = (node) => {\n if (!node.parent)\n throw Error(\"Node does not have a parent\");\n return node.parent.children.findIndex((c) => c.id === node.id);\n};\nexport function noop() { }\nexport function dfs(node, id) {\n if (!node)\n return null;\n if (node.id === id)\n return node;\n if (node.children) {\n for (let child of node.children) {\n const result = dfs(child, id);\n if (result)\n return result;\n }\n }\n return null;\n}\nexport function walk(node, fn) {\n fn(node);\n if (node.children) {\n for (let child of node.children) {\n walk(child, fn);\n }\n }\n}\nexport function focusNextElement(target) {\n const elements = getFocusable(target);\n let next;\n for (let i = 0; i < elements.length; ++i) {\n const item = elements[i];\n if (item === target) {\n next = nextItem(elements, i);\n break;\n }\n }\n // @ts-ignore ??\n next === null || next === void 0 ? void 0 : next.focus();\n}\nexport function focusPrevElement(target) {\n const elements = getFocusable(target);\n let next;\n for (let i = 0; i < elements.length; ++i) {\n const item = elements[i];\n if (item === target) {\n next = prevItem(elements, i);\n break;\n }\n }\n // @ts-ignore\n next === null || next === void 0 ? void 0 : next.focus();\n}\nfunction nextItem(list, index) {\n if (index + 1 < list.length) {\n return list[index + 1];\n }\n else {\n return list[0];\n }\n}\nfunction prevItem(list, index) {\n if (index - 1 >= 0) {\n return list[index - 1];\n }\n else {\n return list[list.length - 1];\n }\n}\nfunction getFocusable(target) {\n return Array.from(document.querySelectorAll('button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"]):not([disabled]), details:not([disabled]), summary:not(:disabled)')).filter((e) => e === target || !target.contains(e));\n}\nexport function access(obj, accessor) {\n if (typeof accessor === \"boolean\")\n return accessor;\n if (typeof accessor === \"string\")\n return obj[accessor];\n return accessor(obj);\n}\nexport function identifyNull(obj) {\n if (obj === null)\n return null;\n else\n return identify(obj);\n}\nexport function identify(obj) {\n return typeof obj === \"string\" ? obj : obj.id;\n}\nexport function mergeRefs(...refs) {\n return (instance) => {\n refs.forEach((ref) => {\n if (typeof ref === \"function\") {\n ref(instance);\n }\n else if (ref != null) {\n ref.current = instance;\n }\n });\n };\n}\nexport function safeRun(fn, ...args) {\n if (fn)\n return fn(...args);\n}\nexport function waitFor(fn) {\n return new Promise((resolve, reject) => {\n let tries = 0;\n function check() {\n tries += 1;\n if (tries === 100)\n reject();\n if (fn())\n resolve();\n else\n setTimeout(check, 10);\n }\n check();\n });\n}\nexport function getInsertIndex(tree) {\n var _a, _b;\n const focus = tree.focusedNode;\n if (!focus)\n return (_b = (_a = tree.root.children) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0;\n if (focus.isOpen)\n return 0;\n if (focus.parent)\n return focus.childIndex + 1;\n return 0;\n}\nexport function getInsertParentId(tree) {\n const focus = tree.focusedNode;\n if (!focus)\n return null;\n if (focus.isOpen)\n return focus.id;\n if (focus.parent && !focus.parent.isRoot)\n return focus.parent.id;\n return null;\n}\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport React from \"react\";\nconst placeholderStyle = {\n display: \"flex\",\n alignItems: \"center\",\n zIndex: 1,\n};\nconst lineStyle = {\n flex: 1,\n height: \"2px\",\n background: \"#4B91E2\",\n borderRadius: \"1px\",\n};\nconst circleStyle = {\n width: \"4px\",\n height: \"4px\",\n boxShadow: \"0 0 0 3px #4B91E2\",\n borderRadius: \"50%\",\n};\nexport const DefaultCursor = React.memo(function DefaultCursor({ top, left, indent, }) {\n const style = {\n position: \"absolute\",\n pointerEvents: \"none\",\n top: top - 2 + \"px\",\n left: left + \"px\",\n right: indent + \"px\",\n };\n return (_jsxs(\"div\", { style: Object.assign(Object.assign({}, placeholderStyle), style), children: [_jsx(\"div\", { style: Object.assign({}, circleStyle) }), _jsx(\"div\", { style: Object.assign({}, lineStyle) })] }));\n});\n","import { jsx as _jsx } from \"react/jsx-runtime\";\nexport function DefaultRow({ node, attrs, innerRef, children, }) {\n return (_jsx(\"div\", Object.assign({}, attrs, { ref: innerRef, onFocus: (e) => e.stopPropagation(), onClick: node.handleClick, children: children })));\n}\n","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { useEffect, useRef } from \"react\";\nexport function DefaultNode(props) {\n return (_jsxs(\"div\", { ref: props.dragHandle, style: props.style, children: [_jsx(\"span\", { onClick: (e) => {\n e.stopPropagation();\n props.node.toggle();\n }, children: props.node.isLeaf ? \"🌳\" : props.node.isOpen ? \"🗁\" : \"🗀\" }), \" \", props.node.isEditing ? _jsx(Edit, Object.assign({}, props)) : _jsx(Show, Object.assign({}, props))] }));\n}\nfunction Show(props) {\n return (_jsx(_Fragment, { children: _jsx(\"span\", { children: props.node.data.name }) }));\n}\nfunction Edit({ node }) {\n const input = useRef();\n useEffect(() => {\n var _a, _b;\n (_a = input.current) === null || _a === void 0 ? void 0 : _a.focus();\n (_b = input.current) === null || _b === void 0 ? void 0 : _b.select();\n }, []);\n return (_jsx(\"input\", { ref: input, \n // @ts-ignore\n defaultValue: node.data.name, onBlur: () => node.reset(), onKeyDown: (e) => {\n var _a;\n if (e.key === \"Escape\")\n node.reset();\n if (e.key === \"Enter\")\n node.submit(((_a = input.current) === null || _a === void 0 ? void 0 : _a.value) || \"\");\n } }));\n}\n","/* Actions */\nexport function edit(id) {\n return { type: \"EDIT\", id };\n}\n/* Reducer */\nexport function reducer(state = { id: null }, action) {\n if (action.type === \"EDIT\") {\n return Object.assign(Object.assign({}, state), { id: action.id });\n }\n else {\n return state;\n }\n}\n","/* Types */\n/* Actions */\nexport function focus(id) {\n return { type: \"FOCUS\", id };\n}\nexport function treeBlur() {\n return { type: \"TREE_BLUR\" };\n}\n/* Reducer */\nexport function reducer(state = { id: null, treeFocused: false }, action) {\n if (action.type === \"FOCUS\") {\n return Object.assign(Object.assign({}, state), { id: action.id, treeFocused: true });\n }\n else if (action.type === \"TREE_BLUR\") {\n return Object.assign(Object.assign({}, state), { treeFocused: false });\n }\n else {\n return state;\n }\n}\n","import { ROOT_ID } from \"../data/create-root\";\nexport class NodeApi {\n constructor(params) {\n this.handleClick = (e) => {\n if (e.metaKey && !this.tree.props.disableMultiSelection) {\n this.isSelected ? this.deselect() : this.selectMulti();\n }\n else if (e.shiftKey && !this.tree.props.disableMultiSelection) {\n this.selectContiguous();\n }\n else {\n this.select();\n this.activate();\n }\n };\n this.tree = params.tree;\n this.id = params.id;\n this.data = params.data;\n this.level = params.level;\n this.children = params.children;\n this.parent = params.parent;\n this.isDraggable = params.isDraggable;\n this.rowIndex = params.rowIndex;\n }\n get isRoot() {\n return this.id === ROOT_ID;\n }\n get isLeaf() {\n return !Array.isArray(this.children);\n }\n get isInternal() {\n return !this.isLeaf;\n }\n get isOpen() {\n return this.isLeaf ? false : this.tree.isOpen(this.id);\n }\n get isClosed() {\n return this.isLeaf ? false : !this.tree.isOpen(this.id);\n }\n get isEditable() {\n return this.tree.isEditable(this.data);\n }\n get isEditing() {\n return this.tree.editingId === this.id;\n }\n get isSelected() {\n return this.tree.isSelected(this.id);\n }\n get isOnlySelection() {\n return this.isSelected && this.tree.hasOneSelection;\n }\n get isSelectedStart() {\n var _a;\n return this.isSelected && !((_a = this.prev) === null || _a === void 0 ? void 0 : _a.isSelected);\n }\n get isSelectedEnd() {\n var _a;\n return this.isSelected && !((_a = this.next) === null || _a === void 0 ? void 0 : _a.isSelected);\n }\n get isFocused() {\n return this.tree.isFocused(this.id);\n }\n get isDragging() {\n return this.tree.isDragging(this.id);\n }\n get willReceiveDrop() {\n return this.tree.willReceiveDrop(this.id);\n }\n get state() {\n return {\n isClosed: this.isClosed,\n isDragging: this.isDragging,\n isEditing: this.isEditing,\n isFocused: this.isFocused,\n isInternal: this.isInternal,\n isLeaf: this.isLeaf,\n isOpen: this.isOpen,\n isSelected: this.isSelected,\n isSelectedEnd: this.isSelectedEnd,\n isSelectedStart: this.isSelectedStart,\n willReceiveDrop: this.willReceiveDrop,\n };\n }\n get childIndex() {\n if (this.parent && this.parent.children) {\n return this.parent.children.findIndex((child) => child.id === this.id);\n }\n else {\n return -1;\n }\n }\n get next() {\n if (this.rowIndex === null)\n return null;\n return this.tree.at(this.rowIndex + 1);\n }\n get prev() {\n if (this.rowIndex === null)\n return null;\n return this.tree.at(this.rowIndex - 1);\n }\n get nextSibling() {\n var _a, _b;\n const i = this.childIndex;\n return (_b = (_a = this.parent) === null || _a === void 0 ? void 0 : _a.children[i + 1]) !== null && _b !== void 0 ? _b : null;\n }\n isAncestorOf(node) {\n if (!node)\n return false;\n let ancestor = node;\n while (ancestor) {\n if (ancestor.id === this.id)\n return true;\n ancestor = ancestor.parent;\n }\n return false;\n }\n select() {\n this.tree.select(this);\n }\n deselect() {\n this.tree.deselect(this);\n }\n selectMulti() {\n this.tree.selectMulti(this);\n }\n selectContiguous() {\n this.tree.selectContiguous(this);\n }\n activate() {\n this.tree.activate(this);\n }\n focus() {\n this.tree.focus(this);\n }\n toggle() {\n this.tree.toggle(this);\n }\n open() {\n this.tree.open(this);\n }\n openParents() {\n this.tree.openParents(this);\n }\n close() {\n this.tree.close(this);\n }\n submit(value) {\n this.tree.submit(this, value);\n }\n reset() {\n this.tree.reset();\n }\n clone() {\n return new NodeApi(Object.assign({}, this));\n }\n edit() {\n return this.tree.edit(this);\n }\n}\n","import { NodeApi } from \"../interfaces/node-api\";\nexport const ROOT_ID = \"__REACT_ARBORIST_INTERNAL_ROOT__\";\nexport function createRoot(tree) {\n var _a;\n function visitSelfAndChildren(data, level, parent) {\n const id = tree.accessId(data);\n const node = new NodeApi({\n tree,\n data,\n level,\n parent,\n id,\n children: null,\n isDraggable: tree.isDraggable(data),\n rowIndex: null,\n });\n const children = tree.accessChildren(data);\n if (children) {\n node.children = children.map((child) => visitSelfAndChildren(child, level + 1, node));\n }\n return node;\n }\n const root = new NodeApi({\n tree,\n id: ROOT_ID,\n // @ts-ignore\n data: { id: ROOT_ID },\n level: -1,\n parent: null,\n children: null,\n isDraggable: true,\n rowIndex: null,\n });\n const data = (_a = tree.props.data) !== null && _a !== void 0 ? _a : [];\n root.children = data.map((child) => {\n return visitSelfAndChildren(child, 0, root);\n });\n return root;\n}\n","/* Actions */\nexport const actions = {\n open(id, filtered) {\n return { type: \"VISIBILITY_OPEN\", id, filtered };\n },\n close(id, filtered) {\n return { type: \"VISIBILITY_CLOSE\", id, filtered };\n },\n toggle(id, filtered) {\n return { type: \"VISIBILITY_TOGGLE\", id, filtered };\n },\n clear(filtered) {\n return { type: \"VISIBILITY_CLEAR\", filtered };\n },\n};\n/* Reducer */\nfunction openMapReducer(state = {}, action) {\n if (action.type === \"VISIBILITY_OPEN\") {\n return Object.assign(Object.assign({}, state), { [action.id]: true });\n }\n else if (action.type === \"VISIBILITY_CLOSE\") {\n return Object.assign(Object.assign({}, state), { [action.id]: false });\n }\n else if (action.type === \"VISIBILITY_TOGGLE\") {\n const prev = state[action.id];\n return Object.assign(Object.assign({}, state), { [action.id]: !prev });\n }\n else if (action.type === \"VISIBILITY_CLEAR\") {\n return {};\n }\n else {\n return state;\n }\n}\nexport function reducer(state = { filtered: {}, unfiltered: {} }, action) {\n if (!action.type.startsWith(\"VISIBILITY\"))\n return state;\n if (action.filtered) {\n return Object.assign(Object.assign({}, state), { filtered: openMapReducer(state.filtered, action) });\n }\n else {\n return Object.assign(Object.assign({}, state), { unfiltered: openMapReducer(state.unfiltered, action) });\n }\n}\n","export const initialState = (props) => {\n var _a;\n return ({\n nodes: {\n // Changes together\n open: { filtered: {}, unfiltered: (_a = props === null || props === void 0 ? void 0 : props.initialOpenState) !== null && _a !== void 0 ? _a : {} },\n focus: { id: null, treeFocused: false },\n edit: { id: null },\n drag: {\n id: null,\n selectedIds: [],\n destinationParentId: null,\n destinationIndex: null,\n },\n selection: { ids: new Set(), anchor: null, mostRecent: null },\n },\n dnd: {\n cursor: { type: \"none\" },\n dragId: null,\n dragIds: [],\n parentId: null,\n index: -1,\n },\n });\n};\n","import { identify } from \"../utils\";\nimport { initialState } from \"./initial\";\n/* Actions */\nexport const actions = {\n clear: () => ({ type: \"SELECTION_CLEAR\" }),\n only: (id) => ({\n type: \"SELECTION_ONLY\",\n id: identify(id),\n }),\n add: (id) => ({\n type: \"SELECTION_ADD\",\n ids: (Array.isArray(id) ? id : [id]).map(identify),\n }),\n remove: (id) => ({\n type: \"SELECTION_REMOVE\",\n ids: (Array.isArray(id) ? id : [id]).map(identify),\n }),\n set: (args) => (Object.assign({ type: \"SELECTION_SET\" }, args)),\n mostRecent: (id) => ({\n type: \"SELECTION_MOST_RECENT\",\n id: id === null ? null : identify(id),\n }),\n anchor: (id) => ({\n type: \"SELECTION_ANCHOR\",\n id: id === null ? null : identify(id),\n }),\n};\n/* Reducer */\nexport function reducer(state = initialState()[\"nodes\"][\"selection\"], action) {\n const ids = state.ids;\n switch (action.type) {\n case \"SELECTION_CLEAR\":\n return Object.assign(Object.assign({}, state), { ids: new Set() });\n case \"SELECTION_ONLY\":\n return Object.assign(Object.assign({}, state), { ids: new Set([action.id]) });\n case \"SELECTION_ADD\":\n if (action.ids.length === 0)\n return state;\n action.ids.forEach((id) => ids.add(id));\n return Object.assign(Object.assign({}, state), { ids: new Set(ids) });\n case \"SELECTION_REMOVE\":\n if (action.ids.length === 0)\n return state;\n action.ids.forEach((id) => ids.delete(id));\n return Object.assign(Object.assign({}, state), { ids: new Set(ids) });\n case \"SELECTION_SET\":\n return Object.assign(Object.assign({}, state), { ids: action.ids, mostRecent: action.mostRecent, anchor: action.anchor });\n case \"SELECTION_MOST_RECENT\":\n return Object.assign(Object.assign({}, state), { mostRecent: action.id });\n case \"SELECTION_ANCHOR\":\n return Object.assign(Object.assign({}, state), { anchor: action.id });\n default:\n return state;\n }\n}\n","import { initialState } from \"./initial\";\n/* Actions */\nexport const actions = {\n cursor(cursor) {\n return { type: \"DND_CURSOR\", cursor };\n },\n dragStart(id, dragIds) {\n return { type: \"DND_DRAG_START\", id, dragIds };\n },\n dragEnd() {\n return { type: \"DND_DRAG_END\" };\n },\n hovering(parentId, index) {\n return { type: \"DND_HOVERING\", parentId, index };\n },\n};\n/* Reducer */\nexport function reducer(state = initialState()[\"dnd\"], action) {\n switch (action.type) {\n case \"DND_CURSOR\":\n return Object.assign(Object.assign({}, state), { cursor: action.cursor });\n case \"DND_DRAG_START\":\n return Object.assign(Object.assign({}, state), { dragId: action.id, dragIds: action.dragIds });\n case \"DND_DRAG_END\":\n return initialState()[\"dnd\"];\n case \"DND_HOVERING\":\n return Object.assign(Object.assign({}, state), { parentId: action.parentId, index: action.index });\n default:\n return state;\n }\n}\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { memo } from \"react\";\nimport { useTreeApi } from \"../context\";\nconst layerStyles = {\n position: \"fixed\",\n pointerEvents: \"none\",\n zIndex: 100,\n left: 0,\n top: 0,\n width: \"100%\",\n height: \"100%\",\n};\nconst getStyle = (offset) => {\n if (!offset)\n return { display: \"none\" };\n const { x, y } = offset;\n return { transform: `translate(${x}px, ${y}px)` };\n};\nconst getCountStyle = (offset) => {\n if (!offset)\n return { display: \"none\" };\n const { x, y } = offset;\n return { transform: `translate(${x + 10}px, ${y + 10}px)` };\n};\nexport function DefaultDragPreview({ offset, mouse, id, dragIds, isDragging, }) {\n return (_jsxs(Overlay, { isDragging: isDragging, children: [_jsx(Position, { offset: offset, children: _jsx(PreviewNode, { id: id, dragIds: dragIds }) }), _jsx(Count, { mouse: mouse, count: dragIds.length })] }));\n}\nconst Overlay = memo(function Overlay(props) {\n if (!props.isDragging)\n return null;\n return _jsx(\"div\", { style: layerStyles, children: props.children });\n});\nfunction Position(props) {\n return (_jsx(\"div\", { className: \"row preview\", style: getStyle(props.offset), children: props.children }));\n}\nfunction Count(props) {\n const { count, mouse } = props;\n if (count > 1)\n return (_jsx(\"div\", { className: \"selected-count\", style: getCountStyle(mouse), children: count }));\n else\n return null;\n}\nconst PreviewNode = memo(function PreviewNode(props) {\n const tree = useTreeApi();\n const node = tree.get(props.id);\n if (!node)\n return null;\n return (_jsx(tree.renderNode, { preview: true, node: node, style: {\n paddingLeft: node.level * tree.indent,\n opacity: 0.2,\n background: \"transparent\",\n }, tree: tree }));\n});\n","function _extends() {\n return _extends = Object.assign ? Object.assign.bind() : function (n) {\n for (var e = 1; e < arguments.length; e++) {\n var t = arguments[e];\n for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n }\n return n;\n }, _extends.apply(null, arguments);\n}\nexport { _extends as default };","function _assertThisInitialized(e) {\n if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n return e;\n}\nexport { _assertThisInitialized as default };","function _setPrototypeOf(t, e) {\n return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {\n return t.__proto__ = e, t;\n }, _setPrototypeOf(t, e);\n}\nexport { _setPrototypeOf as default };","import setPrototypeOf from \"./setPrototypeOf.js\";\nfunction _inheritsLoose(t, o) {\n t.prototype = Object.create(o.prototype), t.prototype.constructor = t, setPrototypeOf(t, o);\n}\nexport { _inheritsLoose as default };","var safeIsNaN = Number.isNaN ||\n function ponyfill(value) {\n return typeof value === 'number' && value !== value;\n };\nfunction isEqual(first, second) {\n if (first === second) {\n return true;\n }\n if (safeIsNaN(first) && safeIsNaN(second)) {\n return true;\n }\n return false;\n}\nfunction areInputsEqual(newInputs, lastInputs) {\n if (newInputs.length !== lastInputs.length) {\n return false;\n }\n for (var i = 0; i < newInputs.length; i++) {\n if (!isEqual(newInputs[i], lastInputs[i])) {\n return false;\n }\n }\n return true;\n}\n\nfunction memoizeOne(resultFn, isEqual) {\n if (isEqual === void 0) { isEqual = areInputsEqual; }\n var lastThis;\n var lastArgs = [];\n var lastResult;\n var calledOnce = false;\n function memoized() {\n var newArgs = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n newArgs[_i] = arguments[_i];\n }\n if (calledOnce && lastThis === this && isEqual(newArgs, lastArgs)) {\n return lastResult;\n }\n lastResult = resultFn.apply(this, newArgs);\n calledOnce = true;\n lastThis = this;\n lastArgs = newArgs;\n return lastResult;\n }\n return memoized;\n}\n\nexport default memoizeOne;\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport _assertThisInitialized from '@babel/runtime/helpers/esm/assertThisInitialized';\nimport _inheritsLoose from '@babel/runtime/helpers/esm/inheritsLoose';\nimport memoizeOne from 'memoize-one';\nimport { createElement, PureComponent } from 'react';\nimport _objectWithoutPropertiesLoose from '@babel/runtime/helpers/esm/objectWithoutPropertiesLoose';\n\n// Animation frame based implementation of setTimeout.\n// Inspired by Joe Lambert, https://gist.github.com/joelambert/1002116#file-requesttimeout-js\nvar hasNativePerformanceNow = typeof performance === 'object' && typeof performance.now === 'function';\nvar now = hasNativePerformanceNow ? function () {\n return performance.now();\n} : function () {\n return Date.now();\n};\nfunction cancelTimeout(timeoutID) {\n cancelAnimationFrame(timeoutID.id);\n}\nfunction requestTimeout(callback, delay) {\n var start = now();\n\n function tick() {\n if (now() - start >= delay) {\n callback.call(null);\n } else {\n timeoutID.id = requestAnimationFrame(tick);\n }\n }\n\n var timeoutID = {\n id: requestAnimationFrame(tick)\n };\n return timeoutID;\n}\n\nvar size = -1; // This utility copied from \"dom-helpers\" package.\n\nfunction getScrollbarSize(recalculate) {\n if (recalculate === void 0) {\n recalculate = false;\n }\n\n if (size === -1 || recalculate) {\n var div = document.createElement('div');\n var style = div.style;\n style.width = '50px';\n style.height = '50px';\n style.overflow = 'scroll';\n document.body.appendChild(div);\n size = div.offsetWidth - div.clientWidth;\n document.body.removeChild(div);\n }\n\n return size;\n}\nvar cachedRTLResult = null; // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n// Chrome does not seem to adhere; its scrollLeft values are positive (measured relative to the left).\n// Safari's elastic bounce makes detecting this even more complicated wrt potential false positives.\n// The safest way to check this is to intentionally set a negative offset,\n// and then verify that the subsequent \"scroll\" event matches the negative offset.\n// If it does not match, then we can assume a non-standard RTL scroll implementation.\n\nfunction getRTLOffsetType(recalculate) {\n if (recalculate === void 0) {\n recalculate = false;\n }\n\n if (cachedRTLResult === null || recalculate) {\n var outerDiv = document.createElement('div');\n var outerStyle = outerDiv.style;\n outerStyle.width = '50px';\n outerStyle.height = '50px';\n outerStyle.overflow = 'scroll';\n outerStyle.direction = 'rtl';\n var innerDiv = document.createElement('div');\n var innerStyle = innerDiv.style;\n innerStyle.width = '100px';\n innerStyle.height = '100px';\n outerDiv.appendChild(innerDiv);\n document.body.appendChild(outerDiv);\n\n if (outerDiv.scrollLeft > 0) {\n cachedRTLResult = 'positive-descending';\n } else {\n outerDiv.scrollLeft = 1;\n\n if (outerDiv.scrollLeft === 0) {\n cachedRTLResult = 'negative';\n } else {\n cachedRTLResult = 'positive-ascending';\n }\n }\n\n document.body.removeChild(outerDiv);\n return cachedRTLResult;\n }\n\n return cachedRTLResult;\n}\n\nvar IS_SCROLLING_DEBOUNCE_INTERVAL = 150;\n\nvar defaultItemKey = function defaultItemKey(_ref) {\n var columnIndex = _ref.columnIndex,\n data = _ref.data,\n rowIndex = _ref.rowIndex;\n return rowIndex + \":\" + columnIndex;\n}; // In DEV mode, this Set helps us only log a warning once per component instance.\n// This avoids spamming the console every time a render happens.\n\n\nvar devWarningsOverscanCount = null;\nvar devWarningsOverscanRowsColumnsCount = null;\nvar devWarningsTagName = null;\n\nif (process.env.NODE_ENV !== 'production') {\n if (typeof window !== 'undefined' && typeof window.WeakSet !== 'undefined') {\n devWarningsOverscanCount = /*#__PURE__*/new WeakSet();\n devWarningsOverscanRowsColumnsCount = /*#__PURE__*/new WeakSet();\n devWarningsTagName = /*#__PURE__*/new WeakSet();\n }\n}\n\nfunction createGridComponent(_ref2) {\n var _class;\n\n var getColumnOffset = _ref2.getColumnOffset,\n getColumnStartIndexForOffset = _ref2.getColumnStartIndexForOffset,\n getColumnStopIndexForStartIndex = _ref2.getColumnStopIndexForStartIndex,\n getColumnWidth = _ref2.getColumnWidth,\n getEstimatedTotalHeight = _ref2.getEstimatedTotalHeight,\n getEstimatedTotalWidth = _ref2.getEstimatedTotalWidth,\n getOffsetForColumnAndAlignment = _ref2.getOffsetForColumnAndAlignment,\n getOffsetForRowAndAlignment = _ref2.getOffsetForRowAndAlignment,\n getRowHeight = _ref2.getRowHeight,\n getRowOffset = _ref2.getRowOffset,\n getRowStartIndexForOffset = _ref2.getRowStartIndexForOffset,\n getRowStopIndexForStartIndex = _ref2.getRowStopIndexForStartIndex,\n initInstanceProps = _ref2.initInstanceProps,\n shouldResetStyleCacheOnItemSizeChange = _ref2.shouldResetStyleCacheOnItemSizeChange,\n validateProps = _ref2.validateProps;\n return _class = /*#__PURE__*/function (_PureComponent) {\n _inheritsLoose(Grid, _PureComponent);\n\n // Always use explicit constructor for React components.\n // It produces less code after transpilation. (#26)\n // eslint-disable-next-line no-useless-constructor\n function Grid(props) {\n var _this;\n\n _this = _PureComponent.call(this, props) || this;\n _this._instanceProps = initInstanceProps(_this.props, _assertThisInitialized(_this));\n _this._resetIsScrollingTimeoutId = null;\n _this._outerRef = void 0;\n _this.state = {\n instance: _assertThisInitialized(_this),\n isScrolling: false,\n horizontalScrollDirection: 'forward',\n scrollLeft: typeof _this.props.initialScrollLeft === 'number' ? _this.props.initialScrollLeft : 0,\n scrollTop: typeof _this.props.initialScrollTop === 'number' ? _this.props.initialScrollTop : 0,\n scrollUpdateWasRequested: false,\n verticalScrollDirection: 'forward'\n };\n _this._callOnItemsRendered = void 0;\n _this._callOnItemsRendered = memoizeOne(function (overscanColumnStartIndex, overscanColumnStopIndex, overscanRowStartIndex, overscanRowStopIndex, visibleColumnStartIndex, visibleColumnStopIndex, visibleRowStartIndex, visibleRowStopIndex) {\n return _this.props.onItemsRendered({\n overscanColumnStartIndex: overscanColumnStartIndex,\n overscanColumnStopIndex: overscanColumnStopIndex,\n overscanRowStartIndex: overscanRowStartIndex,\n overscanRowStopIndex: overscanRowStopIndex,\n visibleColumnStartIndex: visibleColumnStartIndex,\n visibleColumnStopIndex: visibleColumnStopIndex,\n visibleRowStartIndex: visibleRowStartIndex,\n visibleRowStopIndex: visibleRowStopIndex\n });\n });\n _this._callOnScroll = void 0;\n _this._callOnScroll = memoizeOne(function (scrollLeft, scrollTop, horizontalScrollDirection, verticalScrollDirection, scrollUpdateWasRequested) {\n return _this.props.onScroll({\n horizontalScrollDirection: horizontalScrollDirection,\n scrollLeft: scrollLeft,\n scrollTop: scrollTop,\n verticalScrollDirection: verticalScrollDirection,\n scrollUpdateWasRequested: scrollUpdateWasRequested\n });\n });\n _this._getItemStyle = void 0;\n\n _this._getItemStyle = function (rowIndex, columnIndex) {\n var _this$props = _this.props,\n columnWidth = _this$props.columnWidth,\n direction = _this$props.direction,\n rowHeight = _this$props.rowHeight;\n\n var itemStyleCache = _this._getItemStyleCache(shouldResetStyleCacheOnItemSizeChange && columnWidth, shouldResetStyleCacheOnItemSizeChange && direction, shouldResetStyleCacheOnItemSizeChange && rowHeight);\n\n var key = rowIndex + \":\" + columnIndex;\n var style;\n\n if (itemStyleCache.hasOwnProperty(key)) {\n style = itemStyleCache[key];\n } else {\n var _offset = getColumnOffset(_this.props, columnIndex, _this._instanceProps);\n\n var isRtl = direction === 'rtl';\n itemStyleCache[key] = style = {\n position: 'absolute',\n left: isRtl ? undefined : _offset,\n right: isRtl ? _offset : undefined,\n top: getRowOffset(_this.props, rowIndex, _this._instanceProps),\n height: getRowHeight(_this.props, rowIndex, _this._instanceProps),\n width: getColumnWidth(_this.props, columnIndex, _this._instanceProps)\n };\n }\n\n return style;\n };\n\n _this._getItemStyleCache = void 0;\n _this._getItemStyleCache = memoizeOne(function (_, __, ___) {\n return {};\n });\n\n _this._onScroll = function (event) {\n var _event$currentTarget = event.currentTarget,\n clientHeight = _event$currentTarget.clientHeight,\n clientWidth = _event$currentTarget.clientWidth,\n scrollLeft = _event$currentTarget.scrollLeft,\n scrollTop = _event$currentTarget.scrollTop,\n scrollHeight = _event$currentTarget.scrollHeight,\n scrollWidth = _event$currentTarget.scrollWidth;\n\n _this.setState(function (prevState) {\n if (prevState.scrollLeft === scrollLeft && prevState.scrollTop === scrollTop) {\n // Scroll position may have been updated by cDM/cDU,\n // In which case we don't need to trigger another render,\n // And we don't want to update state.isScrolling.\n return null;\n }\n\n var direction = _this.props.direction; // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n // This is not the case for all browsers though (e.g. Chrome reports values as positive, measured relative to the left).\n // It's also easier for this component if we convert offsets to the same format as they would be in for ltr.\n // So the simplest solution is to determine which browser behavior we're dealing with, and convert based on it.\n\n var calculatedScrollLeft = scrollLeft;\n\n if (direction === 'rtl') {\n switch (getRTLOffsetType()) {\n case 'negative':\n calculatedScrollLeft = -scrollLeft;\n break;\n\n case 'positive-descending':\n calculatedScrollLeft = scrollWidth - clientWidth - scrollLeft;\n break;\n }\n } // Prevent Safari's elastic scrolling from causing visual shaking when scrolling past bounds.\n\n\n calculatedScrollLeft = Math.max(0, Math.min(calculatedScrollLeft, scrollWidth - clientWidth));\n var calculatedScrollTop = Math.max(0, Math.min(scrollTop, scrollHeight - clientHeight));\n return {\n isScrolling: true,\n horizontalScrollDirection: prevState.scrollLeft < scrollLeft ? 'forward' : 'backward',\n scrollLeft: calculatedScrollLeft,\n scrollTop: calculatedScrollTop,\n verticalScrollDirection: prevState.scrollTop < scrollTop ? 'forward' : 'backward',\n scrollUpdateWasRequested: false\n };\n }, _this._resetIsScrollingDebounced);\n };\n\n _this._outerRefSetter = function (ref) {\n var outerRef = _this.props.outerRef;\n _this._outerRef = ref;\n\n if (typeof outerRef === 'function') {\n outerRef(ref);\n } else if (outerRef != null && typeof outerRef === 'object' && outerRef.hasOwnProperty('current')) {\n outerRef.current = ref;\n }\n };\n\n _this._resetIsScrollingDebounced = function () {\n if (_this._resetIsScrollingTimeoutId !== null) {\n cancelTimeout(_this._resetIsScrollingTimeoutId);\n }\n\n _this._resetIsScrollingTimeoutId = requestTimeout(_this._resetIsScrolling, IS_SCROLLING_DEBOUNCE_INTERVAL);\n };\n\n _this._resetIsScrolling = function () {\n _this._resetIsScrollingTimeoutId = null;\n\n _this.setState({\n isScrolling: false\n }, function () {\n // Clear style cache after state update has been committed.\n // This way we don't break pure sCU for items that don't use isScrolling param.\n _this._getItemStyleCache(-1);\n });\n };\n\n return _this;\n }\n\n Grid.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps, prevState) {\n validateSharedProps(nextProps, prevState);\n validateProps(nextProps);\n return null;\n };\n\n var _proto = Grid.prototype;\n\n _proto.scrollTo = function scrollTo(_ref3) {\n var scrollLeft = _ref3.scrollLeft,\n scrollTop = _ref3.scrollTop;\n\n if (scrollLeft !== undefined) {\n scrollLeft = Math.max(0, scrollLeft);\n }\n\n if (scrollTop !== undefined) {\n scrollTop = Math.max(0, scrollTop);\n }\n\n this.setState(function (prevState) {\n if (scrollLeft === undefined) {\n scrollLeft = prevState.scrollLeft;\n }\n\n if (scrollTop === undefined) {\n scrollTop = prevState.scrollTop;\n }\n\n if (prevState.scrollLeft === scrollLeft && prevState.scrollTop === scrollTop) {\n return null;\n }\n\n return {\n horizontalScrollDirection: prevState.scrollLeft < scrollLeft ? 'forward' : 'backward',\n scrollLeft: scrollLeft,\n scrollTop: scrollTop,\n scrollUpdateWasRequested: true,\n verticalScrollDirection: prevState.scrollTop < scrollTop ? 'forward' : 'backward'\n };\n }, this._resetIsScrollingDebounced);\n };\n\n _proto.scrollToItem = function scrollToItem(_ref4) {\n var _ref4$align = _ref4.align,\n align = _ref4$align === void 0 ? 'auto' : _ref4$align,\n columnIndex = _ref4.columnIndex,\n rowIndex = _ref4.rowIndex;\n var _this$props2 = this.props,\n columnCount = _this$props2.columnCount,\n height = _this$props2.height,\n rowCount = _this$props2.rowCount,\n width = _this$props2.width;\n var _this$state = this.state,\n scrollLeft = _this$state.scrollLeft,\n scrollTop = _this$state.scrollTop;\n var scrollbarSize = getScrollbarSize();\n\n if (columnIndex !== undefined) {\n columnIndex = Math.max(0, Math.min(columnIndex, columnCount - 1));\n }\n\n if (rowIndex !== undefined) {\n rowIndex = Math.max(0, Math.min(rowIndex, rowCount - 1));\n }\n\n var estimatedTotalHeight = getEstimatedTotalHeight(this.props, this._instanceProps);\n var estimatedTotalWidth = getEstimatedTotalWidth(this.props, this._instanceProps); // The scrollbar size should be considered when scrolling an item into view,\n // to ensure it's fully visible.\n // But we only need to account for its size when it's actually visible.\n\n var horizontalScrollbarSize = estimatedTotalWidth > width ? scrollbarSize : 0;\n var verticalScrollbarSize = estimatedTotalHeight > height ? scrollbarSize : 0;\n this.scrollTo({\n scrollLeft: columnIndex !== undefined ? getOffsetForColumnAndAlignment(this.props, columnIndex, align, scrollLeft, this._instanceProps, verticalScrollbarSize) : scrollLeft,\n scrollTop: rowIndex !== undefined ? getOffsetForRowAndAlignment(this.props, rowIndex, align, scrollTop, this._instanceProps, horizontalScrollbarSize) : scrollTop\n });\n };\n\n _proto.componentDidMount = function componentDidMount() {\n var _this$props3 = this.props,\n initialScrollLeft = _this$props3.initialScrollLeft,\n initialScrollTop = _this$props3.initialScrollTop;\n\n if (this._outerRef != null) {\n var outerRef = this._outerRef;\n\n if (typeof initialScrollLeft === 'number') {\n outerRef.scrollLeft = initialScrollLeft;\n }\n\n if (typeof initialScrollTop === 'number') {\n outerRef.scrollTop = initialScrollTop;\n }\n }\n\n this._callPropsCallbacks();\n };\n\n _proto.componentDidUpdate = function componentDidUpdate() {\n var direction = this.props.direction;\n var _this$state2 = this.state,\n scrollLeft = _this$state2.scrollLeft,\n scrollTop = _this$state2.scrollTop,\n scrollUpdateWasRequested = _this$state2.scrollUpdateWasRequested;\n\n if (scrollUpdateWasRequested && this._outerRef != null) {\n // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n // This is not the case for all browsers though (e.g. Chrome reports values as positive, measured relative to the left).\n // So we need to determine which browser behavior we're dealing with, and mimic it.\n var outerRef = this._outerRef;\n\n if (direction === 'rtl') {\n switch (getRTLOffsetType()) {\n case 'negative':\n outerRef.scrollLeft = -scrollLeft;\n break;\n\n case 'positive-ascending':\n outerRef.scrollLeft = scrollLeft;\n break;\n\n default:\n var clientWidth = outerRef.clientWidth,\n scrollWidth = outerRef.scrollWidth;\n outerRef.scrollLeft = scrollWidth - clientWidth - scrollLeft;\n break;\n }\n } else {\n outerRef.scrollLeft = Math.max(0, scrollLeft);\n }\n\n outerRef.scrollTop = Math.max(0, scrollTop);\n }\n\n this._callPropsCallbacks();\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (this._resetIsScrollingTimeoutId !== null) {\n cancelTimeout(this._resetIsScrollingTimeoutId);\n }\n };\n\n _proto.render = function render() {\n var _this$props4 = this.props,\n children = _this$props4.children,\n className = _this$props4.className,\n columnCount = _this$props4.columnCount,\n direction = _this$props4.direction,\n height = _this$props4.height,\n innerRef = _this$props4.innerRef,\n innerElementType = _this$props4.innerElementType,\n innerTagName = _this$props4.innerTagName,\n itemData = _this$props4.itemData,\n _this$props4$itemKey = _this$props4.itemKey,\n itemKey = _this$props4$itemKey === void 0 ? defaultItemKey : _this$props4$itemKey,\n outerElementType = _this$props4.outerElementType,\n outerTagName = _this$props4.outerTagName,\n rowCount = _this$props4.rowCount,\n style = _this$props4.style,\n useIsScrolling = _this$props4.useIsScrolling,\n width = _this$props4.width;\n var isScrolling = this.state.isScrolling;\n\n var _this$_getHorizontalR = this._getHorizontalRangeToRender(),\n columnStartIndex = _this$_getHorizontalR[0],\n columnStopIndex = _this$_getHorizontalR[1];\n\n var _this$_getVerticalRan = this._getVerticalRangeToRender(),\n rowStartIndex = _this$_getVerticalRan[0],\n rowStopIndex = _this$_getVerticalRan[1];\n\n var items = [];\n\n if (columnCount > 0 && rowCount) {\n for (var _rowIndex = rowStartIndex; _rowIndex <= rowStopIndex; _rowIndex++) {\n for (var _columnIndex = columnStartIndex; _columnIndex <= columnStopIndex; _columnIndex++) {\n items.push(createElement(children, {\n columnIndex: _columnIndex,\n data: itemData,\n isScrolling: useIsScrolling ? isScrolling : undefined,\n key: itemKey({\n columnIndex: _columnIndex,\n data: itemData,\n rowIndex: _rowIndex\n }),\n rowIndex: _rowIndex,\n style: this._getItemStyle(_rowIndex, _columnIndex)\n }));\n }\n }\n } // Read this value AFTER items have been created,\n // So their actual sizes (if variable) are taken into consideration.\n\n\n var estimatedTotalHeight = getEstimatedTotalHeight(this.props, this._instanceProps);\n var estimatedTotalWidth = getEstimatedTotalWidth(this.props, this._instanceProps);\n return createElement(outerElementType || outerTagName || 'div', {\n className: className,\n onScroll: this._onScroll,\n ref: this._outerRefSetter,\n style: _extends({\n position: 'relative',\n height: height,\n width: width,\n overflow: 'auto',\n WebkitOverflowScrolling: 'touch',\n willChange: 'transform',\n direction: direction\n }, style)\n }, createElement(innerElementType || innerTagName || 'div', {\n children: items,\n ref: innerRef,\n style: {\n height: estimatedTotalHeight,\n pointerEvents: isScrolling ? 'none' : undefined,\n width: estimatedTotalWidth\n }\n }));\n };\n\n _proto._callPropsCallbacks = function _callPropsCallbacks() {\n var _this$props5 = this.props,\n columnCount = _this$props5.columnCount,\n onItemsRendered = _this$props5.onItemsRendered,\n onScroll = _this$props5.onScroll,\n rowCount = _this$props5.rowCount;\n\n if (typeof onItemsRendered === 'function') {\n if (columnCount > 0 && rowCount > 0) {\n var _this$_getHorizontalR2 = this._getHorizontalRangeToRender(),\n _overscanColumnStartIndex = _this$_getHorizontalR2[0],\n _overscanColumnStopIndex = _this$_getHorizontalR2[1],\n _visibleColumnStartIndex = _this$_getHorizontalR2[2],\n _visibleColumnStopIndex = _this$_getHorizontalR2[3];\n\n var _this$_getVerticalRan2 = this._getVerticalRangeToRender(),\n _overscanRowStartIndex = _this$_getVerticalRan2[0],\n _overscanRowStopIndex = _this$_getVerticalRan2[1],\n _visibleRowStartIndex = _this$_getVerticalRan2[2],\n _visibleRowStopIndex = _this$_getVerticalRan2[3];\n\n this._callOnItemsRendered(_overscanColumnStartIndex, _overscanColumnStopIndex, _overscanRowStartIndex, _overscanRowStopIndex, _visibleColumnStartIndex, _visibleColumnStopIndex, _visibleRowStartIndex, _visibleRowStopIndex);\n }\n }\n\n if (typeof onScroll === 'function') {\n var _this$state3 = this.state,\n _horizontalScrollDirection = _this$state3.horizontalScrollDirection,\n _scrollLeft = _this$state3.scrollLeft,\n _scrollTop = _this$state3.scrollTop,\n _scrollUpdateWasRequested = _this$state3.scrollUpdateWasRequested,\n _verticalScrollDirection = _this$state3.verticalScrollDirection;\n\n this._callOnScroll(_scrollLeft, _scrollTop, _horizontalScrollDirection, _verticalScrollDirection, _scrollUpdateWasRequested);\n }\n } // Lazily create and cache item styles while scrolling,\n // So that pure component sCU will prevent re-renders.\n // We maintain this cache, and pass a style prop rather than index,\n // So that List can clear cached styles and force item re-render if necessary.\n ;\n\n _proto._getHorizontalRangeToRender = function _getHorizontalRangeToRender() {\n var _this$props6 = this.props,\n columnCount = _this$props6.columnCount,\n overscanColumnCount = _this$props6.overscanColumnCount,\n overscanColumnsCount = _this$props6.overscanColumnsCount,\n overscanCount = _this$props6.overscanCount,\n rowCount = _this$props6.rowCount;\n var _this$state4 = this.state,\n horizontalScrollDirection = _this$state4.horizontalScrollDirection,\n isScrolling = _this$state4.isScrolling,\n scrollLeft = _this$state4.scrollLeft;\n var overscanCountResolved = overscanColumnCount || overscanColumnsCount || overscanCount || 1;\n\n if (columnCount === 0 || rowCount === 0) {\n return [0, 0, 0, 0];\n }\n\n var startIndex = getColumnStartIndexForOffset(this.props, scrollLeft, this._instanceProps);\n var stopIndex = getColumnStopIndexForStartIndex(this.props, startIndex, scrollLeft, this._instanceProps); // Overscan by one item in each direction so that tab/focus works.\n // If there isn't at least one extra item, tab loops back around.\n\n var overscanBackward = !isScrolling || horizontalScrollDirection === 'backward' ? Math.max(1, overscanCountResolved) : 1;\n var overscanForward = !isScrolling || horizontalScrollDirection === 'forward' ? Math.max(1, overscanCountResolved) : 1;\n return [Math.max(0, startIndex - overscanBackward), Math.max(0, Math.min(columnCount - 1, stopIndex + overscanForward)), startIndex, stopIndex];\n };\n\n _proto._getVerticalRangeToRender = function _getVerticalRangeToRender() {\n var _this$props7 = this.props,\n columnCount = _this$props7.columnCount,\n overscanCount = _this$props7.overscanCount,\n overscanRowCount = _this$props7.overscanRowCount,\n overscanRowsCount = _this$props7.overscanRowsCount,\n rowCount = _this$props7.rowCount;\n var _this$state5 = this.state,\n isScrolling = _this$state5.isScrolling,\n verticalScrollDirection = _this$state5.verticalScrollDirection,\n scrollTop = _this$state5.scrollTop;\n var overscanCountResolved = overscanRowCount || overscanRowsCount || overscanCount || 1;\n\n if (columnCount === 0 || rowCount === 0) {\n return [0, 0, 0, 0];\n }\n\n var startIndex = getRowStartIndexForOffset(this.props, scrollTop, this._instanceProps);\n var stopIndex = getRowStopIndexForStartIndex(this.props, startIndex, scrollTop, this._instanceProps); // Overscan by one item in each direction so that tab/focus works.\n // If there isn't at least one extra item, tab loops back around.\n\n var overscanBackward = !isScrolling || verticalScrollDirection === 'backward' ? Math.max(1, overscanCountResolved) : 1;\n var overscanForward = !isScrolling || verticalScrollDirection === 'forward' ? Math.max(1, overscanCountResolved) : 1;\n return [Math.max(0, startIndex - overscanBackward), Math.max(0, Math.min(rowCount - 1, stopIndex + overscanForward)), startIndex, stopIndex];\n };\n\n return Grid;\n }(PureComponent), _class.defaultProps = {\n direction: 'ltr',\n itemData: undefined,\n useIsScrolling: false\n }, _class;\n}\n\nvar validateSharedProps = function validateSharedProps(_ref5, _ref6) {\n var children = _ref5.children,\n direction = _ref5.direction,\n height = _ref5.height,\n innerTagName = _ref5.innerTagName,\n outerTagName = _ref5.outerTagName,\n overscanColumnsCount = _ref5.overscanColumnsCount,\n overscanCount = _ref5.overscanCount,\n overscanRowsCount = _ref5.overscanRowsCount,\n width = _ref5.width;\n var instance = _ref6.instance;\n\n if (process.env.NODE_ENV !== 'production') {\n if (typeof overscanCount === 'number') {\n if (devWarningsOverscanCount && !devWarningsOverscanCount.has(instance)) {\n devWarningsOverscanCount.add(instance);\n console.warn('The overscanCount prop has been deprecated. ' + 'Please use the overscanColumnCount and overscanRowCount props instead.');\n }\n }\n\n if (typeof overscanColumnsCount === 'number' || typeof overscanRowsCount === 'number') {\n if (devWarningsOverscanRowsColumnsCount && !devWarningsOverscanRowsColumnsCount.has(instance)) {\n devWarningsOverscanRowsColumnsCount.add(instance);\n console.warn('The overscanColumnsCount and overscanRowsCount props have been deprecated. ' + 'Please use the overscanColumnCount and overscanRowCount props instead.');\n }\n }\n\n if (innerTagName != null || outerTagName != null) {\n if (devWarningsTagName && !devWarningsTagName.has(instance)) {\n devWarningsTagName.add(instance);\n console.warn('The innerTagName and outerTagName props have been deprecated. ' + 'Please use the innerElementType and outerElementType props instead.');\n }\n }\n\n if (children == null) {\n throw Error('An invalid \"children\" prop has been specified. ' + 'Value should be a React component. ' + (\"\\\"\" + (children === null ? 'null' : typeof children) + \"\\\" was specified.\"));\n }\n\n switch (direction) {\n case 'ltr':\n case 'rtl':\n // Valid values\n break;\n\n default:\n throw Error('An invalid \"direction\" prop has been specified. ' + 'Value should be either \"ltr\" or \"rtl\". ' + (\"\\\"\" + direction + \"\\\" was specified.\"));\n }\n\n if (typeof width !== 'number') {\n throw Error('An invalid \"width\" prop has been specified. ' + 'Grids must specify a number for width. ' + (\"\\\"\" + (width === null ? 'null' : typeof width) + \"\\\" was specified.\"));\n }\n\n if (typeof height !== 'number') {\n throw Error('An invalid \"height\" prop has been specified. ' + 'Grids must specify a number for height. ' + (\"\\\"\" + (height === null ? 'null' : typeof height) + \"\\\" was specified.\"));\n }\n }\n};\n\nvar DEFAULT_ESTIMATED_ITEM_SIZE = 50;\n\nvar getEstimatedTotalHeight = function getEstimatedTotalHeight(_ref, _ref2) {\n var rowCount = _ref.rowCount;\n var rowMetadataMap = _ref2.rowMetadataMap,\n estimatedRowHeight = _ref2.estimatedRowHeight,\n lastMeasuredRowIndex = _ref2.lastMeasuredRowIndex;\n var totalSizeOfMeasuredRows = 0; // Edge case check for when the number of items decreases while a scroll is in progress.\n // https://github.com/bvaughn/react-window/pull/138\n\n if (lastMeasuredRowIndex >= rowCount) {\n lastMeasuredRowIndex = rowCount - 1;\n }\n\n if (lastMeasuredRowIndex >= 0) {\n var itemMetadata = rowMetadataMap[lastMeasuredRowIndex];\n totalSizeOfMeasuredRows = itemMetadata.offset + itemMetadata.size;\n }\n\n var numUnmeasuredItems = rowCount - lastMeasuredRowIndex - 1;\n var totalSizeOfUnmeasuredItems = numUnmeasuredItems * estimatedRowHeight;\n return totalSizeOfMeasuredRows + totalSizeOfUnmeasuredItems;\n};\n\nvar getEstimatedTotalWidth = function getEstimatedTotalWidth(_ref3, _ref4) {\n var columnCount = _ref3.columnCount;\n var columnMetadataMap = _ref4.columnMetadataMap,\n estimatedColumnWidth = _ref4.estimatedColumnWidth,\n lastMeasuredColumnIndex = _ref4.lastMeasuredColumnIndex;\n var totalSizeOfMeasuredRows = 0; // Edge case check for when the number of items decreases while a scroll is in progress.\n // https://github.com/bvaughn/react-window/pull/138\n\n if (lastMeasuredColumnIndex >= columnCount) {\n lastMeasuredColumnIndex = columnCount - 1;\n }\n\n if (lastMeasuredColumnIndex >= 0) {\n var itemMetadata = columnMetadataMap[lastMeasuredColumnIndex];\n totalSizeOfMeasuredRows = itemMetadata.offset + itemMetadata.size;\n }\n\n var numUnmeasuredItems = columnCount - lastMeasuredColumnIndex - 1;\n var totalSizeOfUnmeasuredItems = numUnmeasuredItems * estimatedColumnWidth;\n return totalSizeOfMeasuredRows + totalSizeOfUnmeasuredItems;\n};\n\nvar getItemMetadata = function getItemMetadata(itemType, props, index, instanceProps) {\n var itemMetadataMap, itemSize, lastMeasuredIndex;\n\n if (itemType === 'column') {\n itemMetadataMap = instanceProps.columnMetadataMap;\n itemSize = props.columnWidth;\n lastMeasuredIndex = instanceProps.lastMeasuredColumnIndex;\n } else {\n itemMetadataMap = instanceProps.rowMetadataMap;\n itemSize = props.rowHeight;\n lastMeasuredIndex = instanceProps.lastMeasuredRowIndex;\n }\n\n if (index > lastMeasuredIndex) {\n var offset = 0;\n\n if (lastMeasuredIndex >= 0) {\n var itemMetadata = itemMetadataMap[lastMeasuredIndex];\n offset = itemMetadata.offset + itemMetadata.size;\n }\n\n for (var i = lastMeasuredIndex + 1; i <= index; i++) {\n var size = itemSize(i);\n itemMetadataMap[i] = {\n offset: offset,\n size: size\n };\n offset += size;\n }\n\n if (itemType === 'column') {\n instanceProps.lastMeasuredColumnIndex = index;\n } else {\n instanceProps.lastMeasuredRowIndex = index;\n }\n }\n\n return itemMetadataMap[index];\n};\n\nvar findNearestItem = function findNearestItem(itemType, props, instanceProps, offset) {\n var itemMetadataMap, lastMeasuredIndex;\n\n if (itemType === 'column') {\n itemMetadataMap = instanceProps.columnMetadataMap;\n lastMeasuredIndex = instanceProps.lastMeasuredColumnIndex;\n } else {\n itemMetadataMap = instanceProps.rowMetadataMap;\n lastMeasuredIndex = instanceProps.lastMeasuredRowIndex;\n }\n\n var lastMeasuredItemOffset = lastMeasuredIndex > 0 ? itemMetadataMap[lastMeasuredIndex].offset : 0;\n\n if (lastMeasuredItemOffset >= offset) {\n // If we've already measured items within this range just use a binary search as it's faster.\n return findNearestItemBinarySearch(itemType, props, instanceProps, lastMeasuredIndex, 0, offset);\n } else {\n // If we haven't yet measured this high, fallback to an exponential search with an inner binary search.\n // The exponential search avoids pre-computing sizes for the full set of items as a binary search would.\n // The overall complexity for this approach is O(log n).\n return findNearestItemExponentialSearch(itemType, props, instanceProps, Math.max(0, lastMeasuredIndex), offset);\n }\n};\n\nvar findNearestItemBinarySearch = function findNearestItemBinarySearch(itemType, props, instanceProps, high, low, offset) {\n while (low <= high) {\n var middle = low + Math.floor((high - low) / 2);\n var currentOffset = getItemMetadata(itemType, props, middle, instanceProps).offset;\n\n if (currentOffset === offset) {\n return middle;\n } else if (currentOffset < offset) {\n low = middle + 1;\n } else if (currentOffset > offset) {\n high = middle - 1;\n }\n }\n\n if (low > 0) {\n return low - 1;\n } else {\n return 0;\n }\n};\n\nvar findNearestItemExponentialSearch = function findNearestItemExponentialSearch(itemType, props, instanceProps, index, offset) {\n var itemCount = itemType === 'column' ? props.columnCount : props.rowCount;\n var interval = 1;\n\n while (index < itemCount && getItemMetadata(itemType, props, index, instanceProps).offset < offset) {\n index += interval;\n interval *= 2;\n }\n\n return findNearestItemBinarySearch(itemType, props, instanceProps, Math.min(index, itemCount - 1), Math.floor(index / 2), offset);\n};\n\nvar getOffsetForIndexAndAlignment = function getOffsetForIndexAndAlignment(itemType, props, index, align, scrollOffset, instanceProps, scrollbarSize) {\n var size = itemType === 'column' ? props.width : props.height;\n var itemMetadata = getItemMetadata(itemType, props, index, instanceProps); // Get estimated total size after ItemMetadata is computed,\n // To ensure it reflects actual measurements instead of just estimates.\n\n var estimatedTotalSize = itemType === 'column' ? getEstimatedTotalWidth(props, instanceProps) : getEstimatedTotalHeight(props, instanceProps);\n var maxOffset = Math.max(0, Math.min(estimatedTotalSize - size, itemMetadata.offset));\n var minOffset = Math.max(0, itemMetadata.offset - size + scrollbarSize + itemMetadata.size);\n\n if (align === 'smart') {\n if (scrollOffset >= minOffset - size && scrollOffset <= maxOffset + size) {\n align = 'auto';\n } else {\n align = 'center';\n }\n }\n\n switch (align) {\n case 'start':\n return maxOffset;\n\n case 'end':\n return minOffset;\n\n case 'center':\n return Math.round(minOffset + (maxOffset - minOffset) / 2);\n\n case 'auto':\n default:\n if (scrollOffset >= minOffset && scrollOffset <= maxOffset) {\n return scrollOffset;\n } else if (minOffset > maxOffset) {\n // Because we only take into account the scrollbar size when calculating minOffset\n // this value can be larger than maxOffset when at the end of the list\n return minOffset;\n } else if (scrollOffset < minOffset) {\n return minOffset;\n } else {\n return maxOffset;\n }\n\n }\n};\n\nvar VariableSizeGrid = /*#__PURE__*/createGridComponent({\n getColumnOffset: function getColumnOffset(props, index, instanceProps) {\n return getItemMetadata('column', props, index, instanceProps).offset;\n },\n getColumnStartIndexForOffset: function getColumnStartIndexForOffset(props, scrollLeft, instanceProps) {\n return findNearestItem('column', props, instanceProps, scrollLeft);\n },\n getColumnStopIndexForStartIndex: function getColumnStopIndexForStartIndex(props, startIndex, scrollLeft, instanceProps) {\n var columnCount = props.columnCount,\n width = props.width;\n var itemMetadata = getItemMetadata('column', props, startIndex, instanceProps);\n var maxOffset = scrollLeft + width;\n var offset = itemMetadata.offset + itemMetadata.size;\n var stopIndex = startIndex;\n\n while (stopIndex < columnCount - 1 && offset < maxOffset) {\n stopIndex++;\n offset += getItemMetadata('column', props, stopIndex, instanceProps).size;\n }\n\n return stopIndex;\n },\n getColumnWidth: function getColumnWidth(props, index, instanceProps) {\n return instanceProps.columnMetadataMap[index].size;\n },\n getEstimatedTotalHeight: getEstimatedTotalHeight,\n getEstimatedTotalWidth: getEstimatedTotalWidth,\n getOffsetForColumnAndAlignment: function getOffsetForColumnAndAlignment(props, index, align, scrollOffset, instanceProps, scrollbarSize) {\n return getOffsetForIndexAndAlignment('column', props, index, align, scrollOffset, instanceProps, scrollbarSize);\n },\n getOffsetForRowAndAlignment: function getOffsetForRowAndAlignment(props, index, align, scrollOffset, instanceProps, scrollbarSize) {\n return getOffsetForIndexAndAlignment('row', props, index, align, scrollOffset, instanceProps, scrollbarSize);\n },\n getRowOffset: function getRowOffset(props, index, instanceProps) {\n return getItemMetadata('row', props, index, instanceProps).offset;\n },\n getRowHeight: function getRowHeight(props, index, instanceProps) {\n return instanceProps.rowMetadataMap[index].size;\n },\n getRowStartIndexForOffset: function getRowStartIndexForOffset(props, scrollTop, instanceProps) {\n return findNearestItem('row', props, instanceProps, scrollTop);\n },\n getRowStopIndexForStartIndex: function getRowStopIndexForStartIndex(props, startIndex, scrollTop, instanceProps) {\n var rowCount = props.rowCount,\n height = props.height;\n var itemMetadata = getItemMetadata('row', props, startIndex, instanceProps);\n var maxOffset = scrollTop + height;\n var offset = itemMetadata.offset + itemMetadata.size;\n var stopIndex = startIndex;\n\n while (stopIndex < rowCount - 1 && offset < maxOffset) {\n stopIndex++;\n offset += getItemMetadata('row', props, stopIndex, instanceProps).size;\n }\n\n return stopIndex;\n },\n initInstanceProps: function initInstanceProps(props, instance) {\n var _ref5 = props,\n estimatedColumnWidth = _ref5.estimatedColumnWidth,\n estimatedRowHeight = _ref5.estimatedRowHeight;\n var instanceProps = {\n columnMetadataMap: {},\n estimatedColumnWidth: estimatedColumnWidth || DEFAULT_ESTIMATED_ITEM_SIZE,\n estimatedRowHeight: estimatedRowHeight || DEFAULT_ESTIMATED_ITEM_SIZE,\n lastMeasuredColumnIndex: -1,\n lastMeasuredRowIndex: -1,\n rowMetadataMap: {}\n };\n\n instance.resetAfterColumnIndex = function (columnIndex, shouldForceUpdate) {\n if (shouldForceUpdate === void 0) {\n shouldForceUpdate = true;\n }\n\n instance.resetAfterIndices({\n columnIndex: columnIndex,\n shouldForceUpdate: shouldForceUpdate\n });\n };\n\n instance.resetAfterRowIndex = function (rowIndex, shouldForceUpdate) {\n if (shouldForceUpdate === void 0) {\n shouldForceUpdate = true;\n }\n\n instance.resetAfterIndices({\n rowIndex: rowIndex,\n shouldForceUpdate: shouldForceUpdate\n });\n };\n\n instance.resetAfterIndices = function (_ref6) {\n var columnIndex = _ref6.columnIndex,\n rowIndex = _ref6.rowIndex,\n _ref6$shouldForceUpda = _ref6.shouldForceUpdate,\n shouldForceUpdate = _ref6$shouldForceUpda === void 0 ? true : _ref6$shouldForceUpda;\n\n if (typeof columnIndex === 'number') {\n instanceProps.lastMeasuredColumnIndex = Math.min(instanceProps.lastMeasuredColumnIndex, columnIndex - 1);\n }\n\n if (typeof rowIndex === 'number') {\n instanceProps.lastMeasuredRowIndex = Math.min(instanceProps.lastMeasuredRowIndex, rowIndex - 1);\n } // We could potentially optimize further by only evicting styles after this index,\n // But since styles are only cached while scrolling is in progress-\n // It seems an unnecessary optimization.\n // It's unlikely that resetAfterIndex() will be called while a user is scrolling.\n\n\n instance._getItemStyleCache(-1);\n\n if (shouldForceUpdate) {\n instance.forceUpdate();\n }\n };\n\n return instanceProps;\n },\n shouldResetStyleCacheOnItemSizeChange: false,\n validateProps: function validateProps(_ref7) {\n var columnWidth = _ref7.columnWidth,\n rowHeight = _ref7.rowHeight;\n\n if (process.env.NODE_ENV !== 'production') {\n if (typeof columnWidth !== 'function') {\n throw Error('An invalid \"columnWidth\" prop has been specified. ' + 'Value should be a function. ' + (\"\\\"\" + (columnWidth === null ? 'null' : typeof columnWidth) + \"\\\" was specified.\"));\n } else if (typeof rowHeight !== 'function') {\n throw Error('An invalid \"rowHeight\" prop has been specified. ' + 'Value should be a function. ' + (\"\\\"\" + (rowHeight === null ? 'null' : typeof rowHeight) + \"\\\" was specified.\"));\n }\n }\n }\n});\n\nvar IS_SCROLLING_DEBOUNCE_INTERVAL$1 = 150;\n\nvar defaultItemKey$1 = function defaultItemKey(index, data) {\n return index;\n}; // In DEV mode, this Set helps us only log a warning once per component instance.\n// This avoids spamming the console every time a render happens.\n\n\nvar devWarningsDirection = null;\nvar devWarningsTagName$1 = null;\n\nif (process.env.NODE_ENV !== 'production') {\n if (typeof window !== 'undefined' && typeof window.WeakSet !== 'undefined') {\n devWarningsDirection = /*#__PURE__*/new WeakSet();\n devWarningsTagName$1 = /*#__PURE__*/new WeakSet();\n }\n}\n\nfunction createListComponent(_ref) {\n var _class;\n\n var getItemOffset = _ref.getItemOffset,\n getEstimatedTotalSize = _ref.getEstimatedTotalSize,\n getItemSize = _ref.getItemSize,\n getOffsetForIndexAndAlignment = _ref.getOffsetForIndexAndAlignment,\n getStartIndexForOffset = _ref.getStartIndexForOffset,\n getStopIndexForStartIndex = _ref.getStopIndexForStartIndex,\n initInstanceProps = _ref.initInstanceProps,\n shouldResetStyleCacheOnItemSizeChange = _ref.shouldResetStyleCacheOnItemSizeChange,\n validateProps = _ref.validateProps;\n return _class = /*#__PURE__*/function (_PureComponent) {\n _inheritsLoose(List, _PureComponent);\n\n // Always use explicit constructor for React components.\n // It produces less code after transpilation. (#26)\n // eslint-disable-next-line no-useless-constructor\n function List(props) {\n var _this;\n\n _this = _PureComponent.call(this, props) || this;\n _this._instanceProps = initInstanceProps(_this.props, _assertThisInitialized(_this));\n _this._outerRef = void 0;\n _this._resetIsScrollingTimeoutId = null;\n _this.state = {\n instance: _assertThisInitialized(_this),\n isScrolling: false,\n scrollDirection: 'forward',\n scrollOffset: typeof _this.props.initialScrollOffset === 'number' ? _this.props.initialScrollOffset : 0,\n scrollUpdateWasRequested: false\n };\n _this._callOnItemsRendered = void 0;\n _this._callOnItemsRendered = memoizeOne(function (overscanStartIndex, overscanStopIndex, visibleStartIndex, visibleStopIndex) {\n return _this.props.onItemsRendered({\n overscanStartIndex: overscanStartIndex,\n overscanStopIndex: overscanStopIndex,\n visibleStartIndex: visibleStartIndex,\n visibleStopIndex: visibleStopIndex\n });\n });\n _this._callOnScroll = void 0;\n _this._callOnScroll = memoizeOne(function (scrollDirection, scrollOffset, scrollUpdateWasRequested) {\n return _this.props.onScroll({\n scrollDirection: scrollDirection,\n scrollOffset: scrollOffset,\n scrollUpdateWasRequested: scrollUpdateWasRequested\n });\n });\n _this._getItemStyle = void 0;\n\n _this._getItemStyle = function (index) {\n var _this$props = _this.props,\n direction = _this$props.direction,\n itemSize = _this$props.itemSize,\n layout = _this$props.layout;\n\n var itemStyleCache = _this._getItemStyleCache(shouldResetStyleCacheOnItemSizeChange && itemSize, shouldResetStyleCacheOnItemSizeChange && layout, shouldResetStyleCacheOnItemSizeChange && direction);\n\n var style;\n\n if (itemStyleCache.hasOwnProperty(index)) {\n style = itemStyleCache[index];\n } else {\n var _offset = getItemOffset(_this.props, index, _this._instanceProps);\n\n var size = getItemSize(_this.props, index, _this._instanceProps); // TODO Deprecate direction \"horizontal\"\n\n var isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n var isRtl = direction === 'rtl';\n var offsetHorizontal = isHorizontal ? _offset : 0;\n itemStyleCache[index] = style = {\n position: 'absolute',\n left: isRtl ? undefined : offsetHorizontal,\n right: isRtl ? offsetHorizontal : undefined,\n top: !isHorizontal ? _offset : 0,\n height: !isHorizontal ? size : '100%',\n width: isHorizontal ? size : '100%'\n };\n }\n\n return style;\n };\n\n _this._getItemStyleCache = void 0;\n _this._getItemStyleCache = memoizeOne(function (_, __, ___) {\n return {};\n });\n\n _this._onScrollHorizontal = function (event) {\n var _event$currentTarget = event.currentTarget,\n clientWidth = _event$currentTarget.clientWidth,\n scrollLeft = _event$currentTarget.scrollLeft,\n scrollWidth = _event$currentTarget.scrollWidth;\n\n _this.setState(function (prevState) {\n if (prevState.scrollOffset === scrollLeft) {\n // Scroll position may have been updated by cDM/cDU,\n // In which case we don't need to trigger another render,\n // And we don't want to update state.isScrolling.\n return null;\n }\n\n var direction = _this.props.direction;\n var scrollOffset = scrollLeft;\n\n if (direction === 'rtl') {\n // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n // This is not the case for all browsers though (e.g. Chrome reports values as positive, measured relative to the left).\n // It's also easier for this component if we convert offsets to the same format as they would be in for ltr.\n // So the simplest solution is to determine which browser behavior we're dealing with, and convert based on it.\n switch (getRTLOffsetType()) {\n case 'negative':\n scrollOffset = -scrollLeft;\n break;\n\n case 'positive-descending':\n scrollOffset = scrollWidth - clientWidth - scrollLeft;\n break;\n }\n } // Prevent Safari's elastic scrolling from causing visual shaking when scrolling past bounds.\n\n\n scrollOffset = Math.max(0, Math.min(scrollOffset, scrollWidth - clientWidth));\n return {\n isScrolling: true,\n scrollDirection: prevState.scrollOffset < scrollOffset ? 'forward' : 'backward',\n scrollOffset: scrollOffset,\n scrollUpdateWasRequested: false\n };\n }, _this._resetIsScrollingDebounced);\n };\n\n _this._onScrollVertical = function (event) {\n var _event$currentTarget2 = event.currentTarget,\n clientHeight = _event$currentTarget2.clientHeight,\n scrollHeight = _event$currentTarget2.scrollHeight,\n scrollTop = _event$currentTarget2.scrollTop;\n\n _this.setState(function (prevState) {\n if (prevState.scrollOffset === scrollTop) {\n // Scroll position may have been updated by cDM/cDU,\n // In which case we don't need to trigger another render,\n // And we don't want to update state.isScrolling.\n return null;\n } // Prevent Safari's elastic scrolling from causing visual shaking when scrolling past bounds.\n\n\n var scrollOffset = Math.max(0, Math.min(scrollTop, scrollHeight - clientHeight));\n return {\n isScrolling: true,\n scrollDirection: prevState.scrollOffset < scrollOffset ? 'forward' : 'backward',\n scrollOffset: scrollOffset,\n scrollUpdateWasRequested: false\n };\n }, _this._resetIsScrollingDebounced);\n };\n\n _this._outerRefSetter = function (ref) {\n var outerRef = _this.props.outerRef;\n _this._outerRef = ref;\n\n if (typeof outerRef === 'function') {\n outerRef(ref);\n } else if (outerRef != null && typeof outerRef === 'object' && outerRef.hasOwnProperty('current')) {\n outerRef.current = ref;\n }\n };\n\n _this._resetIsScrollingDebounced = function () {\n if (_this._resetIsScrollingTimeoutId !== null) {\n cancelTimeout(_this._resetIsScrollingTimeoutId);\n }\n\n _this._resetIsScrollingTimeoutId = requestTimeout(_this._resetIsScrolling, IS_SCROLLING_DEBOUNCE_INTERVAL$1);\n };\n\n _this._resetIsScrolling = function () {\n _this._resetIsScrollingTimeoutId = null;\n\n _this.setState({\n isScrolling: false\n }, function () {\n // Clear style cache after state update has been committed.\n // This way we don't break pure sCU for items that don't use isScrolling param.\n _this._getItemStyleCache(-1, null);\n });\n };\n\n return _this;\n }\n\n List.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps, prevState) {\n validateSharedProps$1(nextProps, prevState);\n validateProps(nextProps);\n return null;\n };\n\n var _proto = List.prototype;\n\n _proto.scrollTo = function scrollTo(scrollOffset) {\n scrollOffset = Math.max(0, scrollOffset);\n this.setState(function (prevState) {\n if (prevState.scrollOffset === scrollOffset) {\n return null;\n }\n\n return {\n scrollDirection: prevState.scrollOffset < scrollOffset ? 'forward' : 'backward',\n scrollOffset: scrollOffset,\n scrollUpdateWasRequested: true\n };\n }, this._resetIsScrollingDebounced);\n };\n\n _proto.scrollToItem = function scrollToItem(index, align) {\n if (align === void 0) {\n align = 'auto';\n }\n\n var _this$props2 = this.props,\n itemCount = _this$props2.itemCount,\n layout = _this$props2.layout;\n var scrollOffset = this.state.scrollOffset;\n index = Math.max(0, Math.min(index, itemCount - 1)); // The scrollbar size should be considered when scrolling an item into view, to ensure it's fully visible.\n // But we only need to account for its size when it's actually visible.\n // This is an edge case for lists; normally they only scroll in the dominant direction.\n\n var scrollbarSize = 0;\n\n if (this._outerRef) {\n var outerRef = this._outerRef;\n\n if (layout === 'vertical') {\n scrollbarSize = outerRef.scrollWidth > outerRef.clientWidth ? getScrollbarSize() : 0;\n } else {\n scrollbarSize = outerRef.scrollHeight > outerRef.clientHeight ? getScrollbarSize() : 0;\n }\n }\n\n this.scrollTo(getOffsetForIndexAndAlignment(this.props, index, align, scrollOffset, this._instanceProps, scrollbarSize));\n };\n\n _proto.componentDidMount = function componentDidMount() {\n var _this$props3 = this.props,\n direction = _this$props3.direction,\n initialScrollOffset = _this$props3.initialScrollOffset,\n layout = _this$props3.layout;\n\n if (typeof initialScrollOffset === 'number' && this._outerRef != null) {\n var outerRef = this._outerRef; // TODO Deprecate direction \"horizontal\"\n\n if (direction === 'horizontal' || layout === 'horizontal') {\n outerRef.scrollLeft = initialScrollOffset;\n } else {\n outerRef.scrollTop = initialScrollOffset;\n }\n }\n\n this._callPropsCallbacks();\n };\n\n _proto.componentDidUpdate = function componentDidUpdate() {\n var _this$props4 = this.props,\n direction = _this$props4.direction,\n layout = _this$props4.layout;\n var _this$state = this.state,\n scrollOffset = _this$state.scrollOffset,\n scrollUpdateWasRequested = _this$state.scrollUpdateWasRequested;\n\n if (scrollUpdateWasRequested && this._outerRef != null) {\n var outerRef = this._outerRef; // TODO Deprecate direction \"horizontal\"\n\n if (direction === 'horizontal' || layout === 'horizontal') {\n if (direction === 'rtl') {\n // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n // This is not the case for all browsers though (e.g. Chrome reports values as positive, measured relative to the left).\n // So we need to determine which browser behavior we're dealing with, and mimic it.\n switch (getRTLOffsetType()) {\n case 'negative':\n outerRef.scrollLeft = -scrollOffset;\n break;\n\n case 'positive-ascending':\n outerRef.scrollLeft = scrollOffset;\n break;\n\n default:\n var clientWidth = outerRef.clientWidth,\n scrollWidth = outerRef.scrollWidth;\n outerRef.scrollLeft = scrollWidth - clientWidth - scrollOffset;\n break;\n }\n } else {\n outerRef.scrollLeft = scrollOffset;\n }\n } else {\n outerRef.scrollTop = scrollOffset;\n }\n }\n\n this._callPropsCallbacks();\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (this._resetIsScrollingTimeoutId !== null) {\n cancelTimeout(this._resetIsScrollingTimeoutId);\n }\n };\n\n _proto.render = function render() {\n var _this$props5 = this.props,\n children = _this$props5.children,\n className = _this$props5.className,\n direction = _this$props5.direction,\n height = _this$props5.height,\n innerRef = _this$props5.innerRef,\n innerElementType = _this$props5.innerElementType,\n innerTagName = _this$props5.innerTagName,\n itemCount = _this$props5.itemCount,\n itemData = _this$props5.itemData,\n _this$props5$itemKey = _this$props5.itemKey,\n itemKey = _this$props5$itemKey === void 0 ? defaultItemKey$1 : _this$props5$itemKey,\n layout = _this$props5.layout,\n outerElementType = _this$props5.outerElementType,\n outerTagName = _this$props5.outerTagName,\n style = _this$props5.style,\n useIsScrolling = _this$props5.useIsScrolling,\n width = _this$props5.width;\n var isScrolling = this.state.isScrolling; // TODO Deprecate direction \"horizontal\"\n\n var isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n var onScroll = isHorizontal ? this._onScrollHorizontal : this._onScrollVertical;\n\n var _this$_getRangeToRend = this._getRangeToRender(),\n startIndex = _this$_getRangeToRend[0],\n stopIndex = _this$_getRangeToRend[1];\n\n var items = [];\n\n if (itemCount > 0) {\n for (var _index = startIndex; _index <= stopIndex; _index++) {\n items.push(createElement(children, {\n data: itemData,\n key: itemKey(_index, itemData),\n index: _index,\n isScrolling: useIsScrolling ? isScrolling : undefined,\n style: this._getItemStyle(_index)\n }));\n }\n } // Read this value AFTER items have been created,\n // So their actual sizes (if variable) are taken into consideration.\n\n\n var estimatedTotalSize = getEstimatedTotalSize(this.props, this._instanceProps);\n return createElement(outerElementType || outerTagName || 'div', {\n className: className,\n onScroll: onScroll,\n ref: this._outerRefSetter,\n style: _extends({\n position: 'relative',\n height: height,\n width: width,\n overflow: 'auto',\n WebkitOverflowScrolling: 'touch',\n willChange: 'transform',\n direction: direction\n }, style)\n }, createElement(innerElementType || innerTagName || 'div', {\n children: items,\n ref: innerRef,\n style: {\n height: isHorizontal ? '100%' : estimatedTotalSize,\n pointerEvents: isScrolling ? 'none' : undefined,\n width: isHorizontal ? estimatedTotalSize : '100%'\n }\n }));\n };\n\n _proto._callPropsCallbacks = function _callPropsCallbacks() {\n if (typeof this.props.onItemsRendered === 'function') {\n var itemCount = this.props.itemCount;\n\n if (itemCount > 0) {\n var _this$_getRangeToRend2 = this._getRangeToRender(),\n _overscanStartIndex = _this$_getRangeToRend2[0],\n _overscanStopIndex = _this$_getRangeToRend2[1],\n _visibleStartIndex = _this$_getRangeToRend2[2],\n _visibleStopIndex = _this$_getRangeToRend2[3];\n\n this._callOnItemsRendered(_overscanStartIndex, _overscanStopIndex, _visibleStartIndex, _visibleStopIndex);\n }\n }\n\n if (typeof this.props.onScroll === 'function') {\n var _this$state2 = this.state,\n _scrollDirection = _this$state2.scrollDirection,\n _scrollOffset = _this$state2.scrollOffset,\n _scrollUpdateWasRequested = _this$state2.scrollUpdateWasRequested;\n\n this._callOnScroll(_scrollDirection, _scrollOffset, _scrollUpdateWasRequested);\n }\n } // Lazily create and cache item styles while scrolling,\n // So that pure component sCU will prevent re-renders.\n // We maintain this cache, and pass a style prop rather than index,\n // So that List can clear cached styles and force item re-render if necessary.\n ;\n\n _proto._getRangeToRender = function _getRangeToRender() {\n var _this$props6 = this.props,\n itemCount = _this$props6.itemCount,\n overscanCount = _this$props6.overscanCount;\n var _this$state3 = this.state,\n isScrolling = _this$state3.isScrolling,\n scrollDirection = _this$state3.scrollDirection,\n scrollOffset = _this$state3.scrollOffset;\n\n if (itemCount === 0) {\n return [0, 0, 0, 0];\n }\n\n var startIndex = getStartIndexForOffset(this.props, scrollOffset, this._instanceProps);\n var stopIndex = getStopIndexForStartIndex(this.props, startIndex, scrollOffset, this._instanceProps); // Overscan by one item in each direction so that tab/focus works.\n // If there isn't at least one extra item, tab loops back around.\n\n var overscanBackward = !isScrolling || scrollDirection === 'backward' ? Math.max(1, overscanCount) : 1;\n var overscanForward = !isScrolling || scrollDirection === 'forward' ? Math.max(1, overscanCount) : 1;\n return [Math.max(0, startIndex - overscanBackward), Math.max(0, Math.min(itemCount - 1, stopIndex + overscanForward)), startIndex, stopIndex];\n };\n\n return List;\n }(PureComponent), _class.defaultProps = {\n direction: 'ltr',\n itemData: undefined,\n layout: 'vertical',\n overscanCount: 2,\n useIsScrolling: false\n }, _class;\n} // NOTE: I considered further wrapping individual items with a pure ListItem component.\n// This would avoid ever calling the render function for the same index more than once,\n// But it would also add the overhead of a lot of components/fibers.\n// I assume people already do this (render function returning a class component),\n// So my doing it would just unnecessarily double the wrappers.\n\nvar validateSharedProps$1 = function validateSharedProps(_ref2, _ref3) {\n var children = _ref2.children,\n direction = _ref2.direction,\n height = _ref2.height,\n layout = _ref2.layout,\n innerTagName = _ref2.innerTagName,\n outerTagName = _ref2.outerTagName,\n width = _ref2.width;\n var instance = _ref3.instance;\n\n if (process.env.NODE_ENV !== 'production') {\n if (innerTagName != null || outerTagName != null) {\n if (devWarningsTagName$1 && !devWarningsTagName$1.has(instance)) {\n devWarningsTagName$1.add(instance);\n console.warn('The innerTagName and outerTagName props have been deprecated. ' + 'Please use the innerElementType and outerElementType props instead.');\n }\n } // TODO Deprecate direction \"horizontal\"\n\n\n var isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n\n switch (direction) {\n case 'horizontal':\n case 'vertical':\n if (devWarningsDirection && !devWarningsDirection.has(instance)) {\n devWarningsDirection.add(instance);\n console.warn('The direction prop should be either \"ltr\" (default) or \"rtl\". ' + 'Please use the layout prop to specify \"vertical\" (default) or \"horizontal\" orientation.');\n }\n\n break;\n\n case 'ltr':\n case 'rtl':\n // Valid values\n break;\n\n default:\n throw Error('An invalid \"direction\" prop has been specified. ' + 'Value should be either \"ltr\" or \"rtl\". ' + (\"\\\"\" + direction + \"\\\" was specified.\"));\n }\n\n switch (layout) {\n case 'horizontal':\n case 'vertical':\n // Valid values\n break;\n\n default:\n throw Error('An invalid \"layout\" prop has been specified. ' + 'Value should be either \"horizontal\" or \"vertical\". ' + (\"\\\"\" + layout + \"\\\" was specified.\"));\n }\n\n if (children == null) {\n throw Error('An invalid \"children\" prop has been specified. ' + 'Value should be a React component. ' + (\"\\\"\" + (children === null ? 'null' : typeof children) + \"\\\" was specified.\"));\n }\n\n if (isHorizontal && typeof width !== 'number') {\n throw Error('An invalid \"width\" prop has been specified. ' + 'Horizontal lists must specify a number for width. ' + (\"\\\"\" + (width === null ? 'null' : typeof width) + \"\\\" was specified.\"));\n } else if (!isHorizontal && typeof height !== 'number') {\n throw Error('An invalid \"height\" prop has been specified. ' + 'Vertical lists must specify a number for height. ' + (\"\\\"\" + (height === null ? 'null' : typeof height) + \"\\\" was specified.\"));\n }\n }\n};\n\nvar DEFAULT_ESTIMATED_ITEM_SIZE$1 = 50;\n\nvar getItemMetadata$1 = function getItemMetadata(props, index, instanceProps) {\n var _ref = props,\n itemSize = _ref.itemSize;\n var itemMetadataMap = instanceProps.itemMetadataMap,\n lastMeasuredIndex = instanceProps.lastMeasuredIndex;\n\n if (index > lastMeasuredIndex) {\n var offset = 0;\n\n if (lastMeasuredIndex >= 0) {\n var itemMetadata = itemMetadataMap[lastMeasuredIndex];\n offset = itemMetadata.offset + itemMetadata.size;\n }\n\n for (var i = lastMeasuredIndex + 1; i <= index; i++) {\n var size = itemSize(i);\n itemMetadataMap[i] = {\n offset: offset,\n size: size\n };\n offset += size;\n }\n\n instanceProps.lastMeasuredIndex = index;\n }\n\n return itemMetadataMap[index];\n};\n\nvar findNearestItem$1 = function findNearestItem(props, instanceProps, offset) {\n var itemMetadataMap = instanceProps.itemMetadataMap,\n lastMeasuredIndex = instanceProps.lastMeasuredIndex;\n var lastMeasuredItemOffset = lastMeasuredIndex > 0 ? itemMetadataMap[lastMeasuredIndex].offset : 0;\n\n if (lastMeasuredItemOffset >= offset) {\n // If we've already measured items within this range just use a binary search as it's faster.\n return findNearestItemBinarySearch$1(props, instanceProps, lastMeasuredIndex, 0, offset);\n } else {\n // If we haven't yet measured this high, fallback to an exponential search with an inner binary search.\n // The exponential search avoids pre-computing sizes for the full set of items as a binary search would.\n // The overall complexity for this approach is O(log n).\n return findNearestItemExponentialSearch$1(props, instanceProps, Math.max(0, lastMeasuredIndex), offset);\n }\n};\n\nvar findNearestItemBinarySearch$1 = function findNearestItemBinarySearch(props, instanceProps, high, low, offset) {\n while (low <= high) {\n var middle = low + Math.floor((high - low) / 2);\n var currentOffset = getItemMetadata$1(props, middle, instanceProps).offset;\n\n if (currentOffset === offset) {\n return middle;\n } else if (currentOffset < offset) {\n low = middle + 1;\n } else if (currentOffset > offset) {\n high = middle - 1;\n }\n }\n\n if (low > 0) {\n return low - 1;\n } else {\n return 0;\n }\n};\n\nvar findNearestItemExponentialSearch$1 = function findNearestItemExponentialSearch(props, instanceProps, index, offset) {\n var itemCount = props.itemCount;\n var interval = 1;\n\n while (index < itemCount && getItemMetadata$1(props, index, instanceProps).offset < offset) {\n index += interval;\n interval *= 2;\n }\n\n return findNearestItemBinarySearch$1(props, instanceProps, Math.min(index, itemCount - 1), Math.floor(index / 2), offset);\n};\n\nvar getEstimatedTotalSize = function getEstimatedTotalSize(_ref2, _ref3) {\n var itemCount = _ref2.itemCount;\n var itemMetadataMap = _ref3.itemMetadataMap,\n estimatedItemSize = _ref3.estimatedItemSize,\n lastMeasuredIndex = _ref3.lastMeasuredIndex;\n var totalSizeOfMeasuredItems = 0; // Edge case check for when the number of items decreases while a scroll is in progress.\n // https://github.com/bvaughn/react-window/pull/138\n\n if (lastMeasuredIndex >= itemCount) {\n lastMeasuredIndex = itemCount - 1;\n }\n\n if (lastMeasuredIndex >= 0) {\n var itemMetadata = itemMetadataMap[lastMeasuredIndex];\n totalSizeOfMeasuredItems = itemMetadata.offset + itemMetadata.size;\n }\n\n var numUnmeasuredItems = itemCount - lastMeasuredIndex - 1;\n var totalSizeOfUnmeasuredItems = numUnmeasuredItems * estimatedItemSize;\n return totalSizeOfMeasuredItems + totalSizeOfUnmeasuredItems;\n};\n\nvar VariableSizeList = /*#__PURE__*/createListComponent({\n getItemOffset: function getItemOffset(props, index, instanceProps) {\n return getItemMetadata$1(props, index, instanceProps).offset;\n },\n getItemSize: function getItemSize(props, index, instanceProps) {\n return instanceProps.itemMetadataMap[index].size;\n },\n getEstimatedTotalSize: getEstimatedTotalSize,\n getOffsetForIndexAndAlignment: function getOffsetForIndexAndAlignment(props, index, align, scrollOffset, instanceProps, scrollbarSize) {\n var direction = props.direction,\n height = props.height,\n layout = props.layout,\n width = props.width; // TODO Deprecate direction \"horizontal\"\n\n var isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n var size = isHorizontal ? width : height;\n var itemMetadata = getItemMetadata$1(props, index, instanceProps); // Get estimated total size after ItemMetadata is computed,\n // To ensure it reflects actual measurements instead of just estimates.\n\n var estimatedTotalSize = getEstimatedTotalSize(props, instanceProps);\n var maxOffset = Math.max(0, Math.min(estimatedTotalSize - size, itemMetadata.offset));\n var minOffset = Math.max(0, itemMetadata.offset - size + itemMetadata.size + scrollbarSize);\n\n if (align === 'smart') {\n if (scrollOffset >= minOffset - size && scrollOffset <= maxOffset + size) {\n align = 'auto';\n } else {\n align = 'center';\n }\n }\n\n switch (align) {\n case 'start':\n return maxOffset;\n\n case 'end':\n return minOffset;\n\n case 'center':\n return Math.round(minOffset + (maxOffset - minOffset) / 2);\n\n case 'auto':\n default:\n if (scrollOffset >= minOffset && scrollOffset <= maxOffset) {\n return scrollOffset;\n } else if (scrollOffset < minOffset) {\n return minOffset;\n } else {\n return maxOffset;\n }\n\n }\n },\n getStartIndexForOffset: function getStartIndexForOffset(props, offset, instanceProps) {\n return findNearestItem$1(props, instanceProps, offset);\n },\n getStopIndexForStartIndex: function getStopIndexForStartIndex(props, startIndex, scrollOffset, instanceProps) {\n var direction = props.direction,\n height = props.height,\n itemCount = props.itemCount,\n layout = props.layout,\n width = props.width; // TODO Deprecate direction \"horizontal\"\n\n var isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n var size = isHorizontal ? width : height;\n var itemMetadata = getItemMetadata$1(props, startIndex, instanceProps);\n var maxOffset = scrollOffset + size;\n var offset = itemMetadata.offset + itemMetadata.size;\n var stopIndex = startIndex;\n\n while (stopIndex < itemCount - 1 && offset < maxOffset) {\n stopIndex++;\n offset += getItemMetadata$1(props, stopIndex, instanceProps).size;\n }\n\n return stopIndex;\n },\n initInstanceProps: function initInstanceProps(props, instance) {\n var _ref4 = props,\n estimatedItemSize = _ref4.estimatedItemSize;\n var instanceProps = {\n itemMetadataMap: {},\n estimatedItemSize: estimatedItemSize || DEFAULT_ESTIMATED_ITEM_SIZE$1,\n lastMeasuredIndex: -1\n };\n\n instance.resetAfterIndex = function (index, shouldForceUpdate) {\n if (shouldForceUpdate === void 0) {\n shouldForceUpdate = true;\n }\n\n instanceProps.lastMeasuredIndex = Math.min(instanceProps.lastMeasuredIndex, index - 1); // We could potentially optimize further by only evicting styles after this index,\n // But since styles are only cached while scrolling is in progress-\n // It seems an unnecessary optimization.\n // It's unlikely that resetAfterIndex() will be called while a user is scrolling.\n\n instance._getItemStyleCache(-1);\n\n if (shouldForceUpdate) {\n instance.forceUpdate();\n }\n };\n\n return instanceProps;\n },\n shouldResetStyleCacheOnItemSizeChange: false,\n validateProps: function validateProps(_ref5) {\n var itemSize = _ref5.itemSize;\n\n if (process.env.NODE_ENV !== 'production') {\n if (typeof itemSize !== 'function') {\n throw Error('An invalid \"itemSize\" prop has been specified. ' + 'Value should be a function. ' + (\"\\\"\" + (itemSize === null ? 'null' : typeof itemSize) + \"\\\" was specified.\"));\n }\n }\n }\n});\n\nvar FixedSizeGrid = /*#__PURE__*/createGridComponent({\n getColumnOffset: function getColumnOffset(_ref, index) {\n var columnWidth = _ref.columnWidth;\n return index * columnWidth;\n },\n getColumnWidth: function getColumnWidth(_ref2, index) {\n var columnWidth = _ref2.columnWidth;\n return columnWidth;\n },\n getRowOffset: function getRowOffset(_ref3, index) {\n var rowHeight = _ref3.rowHeight;\n return index * rowHeight;\n },\n getRowHeight: function getRowHeight(_ref4, index) {\n var rowHeight = _ref4.rowHeight;\n return rowHeight;\n },\n getEstimatedTotalHeight: function getEstimatedTotalHeight(_ref5) {\n var rowCount = _ref5.rowCount,\n rowHeight = _ref5.rowHeight;\n return rowHeight * rowCount;\n },\n getEstimatedTotalWidth: function getEstimatedTotalWidth(_ref6) {\n var columnCount = _ref6.columnCount,\n columnWidth = _ref6.columnWidth;\n return columnWidth * columnCount;\n },\n getOffsetForColumnAndAlignment: function getOffsetForColumnAndAlignment(_ref7, columnIndex, align, scrollLeft, instanceProps, scrollbarSize) {\n var columnCount = _ref7.columnCount,\n columnWidth = _ref7.columnWidth,\n width = _ref7.width;\n var lastColumnOffset = Math.max(0, columnCount * columnWidth - width);\n var maxOffset = Math.min(lastColumnOffset, columnIndex * columnWidth);\n var minOffset = Math.max(0, columnIndex * columnWidth - width + scrollbarSize + columnWidth);\n\n if (align === 'smart') {\n if (scrollLeft >= minOffset - width && scrollLeft <= maxOffset + width) {\n align = 'auto';\n } else {\n align = 'center';\n }\n }\n\n switch (align) {\n case 'start':\n return maxOffset;\n\n case 'end':\n return minOffset;\n\n case 'center':\n // \"Centered\" offset is usually the average of the min and max.\n // But near the edges of the list, this doesn't hold true.\n var middleOffset = Math.round(minOffset + (maxOffset - minOffset) / 2);\n\n if (middleOffset < Math.ceil(width / 2)) {\n return 0; // near the beginning\n } else if (middleOffset > lastColumnOffset + Math.floor(width / 2)) {\n return lastColumnOffset; // near the end\n } else {\n return middleOffset;\n }\n\n case 'auto':\n default:\n if (scrollLeft >= minOffset && scrollLeft <= maxOffset) {\n return scrollLeft;\n } else if (minOffset > maxOffset) {\n // Because we only take into account the scrollbar size when calculating minOffset\n // this value can be larger than maxOffset when at the end of the list\n return minOffset;\n } else if (scrollLeft < minOffset) {\n return minOffset;\n } else {\n return maxOffset;\n }\n\n }\n },\n getOffsetForRowAndAlignment: function getOffsetForRowAndAlignment(_ref8, rowIndex, align, scrollTop, instanceProps, scrollbarSize) {\n var rowHeight = _ref8.rowHeight,\n height = _ref8.height,\n rowCount = _ref8.rowCount;\n var lastRowOffset = Math.max(0, rowCount * rowHeight - height);\n var maxOffset = Math.min(lastRowOffset, rowIndex * rowHeight);\n var minOffset = Math.max(0, rowIndex * rowHeight - height + scrollbarSize + rowHeight);\n\n if (align === 'smart') {\n if (scrollTop >= minOffset - height && scrollTop <= maxOffset + height) {\n align = 'auto';\n } else {\n align = 'center';\n }\n }\n\n switch (align) {\n case 'start':\n return maxOffset;\n\n case 'end':\n return minOffset;\n\n case 'center':\n // \"Centered\" offset is usually the average of the min and max.\n // But near the edges of the list, this doesn't hold true.\n var middleOffset = Math.round(minOffset + (maxOffset - minOffset) / 2);\n\n if (middleOffset < Math.ceil(height / 2)) {\n return 0; // near the beginning\n } else if (middleOffset > lastRowOffset + Math.floor(height / 2)) {\n return lastRowOffset; // near the end\n } else {\n return middleOffset;\n }\n\n case 'auto':\n default:\n if (scrollTop >= minOffset && scrollTop <= maxOffset) {\n return scrollTop;\n } else if (minOffset > maxOffset) {\n // Because we only take into account the scrollbar size when calculating minOffset\n // this value can be larger than maxOffset when at the end of the list\n return minOffset;\n } else if (scrollTop < minOffset) {\n return minOffset;\n } else {\n return maxOffset;\n }\n\n }\n },\n getColumnStartIndexForOffset: function getColumnStartIndexForOffset(_ref9, scrollLeft) {\n var columnWidth = _ref9.columnWidth,\n columnCount = _ref9.columnCount;\n return Math.max(0, Math.min(columnCount - 1, Math.floor(scrollLeft / columnWidth)));\n },\n getColumnStopIndexForStartIndex: function getColumnStopIndexForStartIndex(_ref10, startIndex, scrollLeft) {\n var columnWidth = _ref10.columnWidth,\n columnCount = _ref10.columnCount,\n width = _ref10.width;\n var left = startIndex * columnWidth;\n var numVisibleColumns = Math.ceil((width + scrollLeft - left) / columnWidth);\n return Math.max(0, Math.min(columnCount - 1, startIndex + numVisibleColumns - 1 // -1 is because stop index is inclusive\n ));\n },\n getRowStartIndexForOffset: function getRowStartIndexForOffset(_ref11, scrollTop) {\n var rowHeight = _ref11.rowHeight,\n rowCount = _ref11.rowCount;\n return Math.max(0, Math.min(rowCount - 1, Math.floor(scrollTop / rowHeight)));\n },\n getRowStopIndexForStartIndex: function getRowStopIndexForStartIndex(_ref12, startIndex, scrollTop) {\n var rowHeight = _ref12.rowHeight,\n rowCount = _ref12.rowCount,\n height = _ref12.height;\n var top = startIndex * rowHeight;\n var numVisibleRows = Math.ceil((height + scrollTop - top) / rowHeight);\n return Math.max(0, Math.min(rowCount - 1, startIndex + numVisibleRows - 1 // -1 is because stop index is inclusive\n ));\n },\n initInstanceProps: function initInstanceProps(props) {// Noop\n },\n shouldResetStyleCacheOnItemSizeChange: true,\n validateProps: function validateProps(_ref13) {\n var columnWidth = _ref13.columnWidth,\n rowHeight = _ref13.rowHeight;\n\n if (process.env.NODE_ENV !== 'production') {\n if (typeof columnWidth !== 'number') {\n throw Error('An invalid \"columnWidth\" prop has been specified. ' + 'Value should be a number. ' + (\"\\\"\" + (columnWidth === null ? 'null' : typeof columnWidth) + \"\\\" was specified.\"));\n }\n\n if (typeof rowHeight !== 'number') {\n throw Error('An invalid \"rowHeight\" prop has been specified. ' + 'Value should be a number. ' + (\"\\\"\" + (rowHeight === null ? 'null' : typeof rowHeight) + \"\\\" was specified.\"));\n }\n }\n }\n});\n\nvar FixedSizeList = /*#__PURE__*/createListComponent({\n getItemOffset: function getItemOffset(_ref, index) {\n var itemSize = _ref.itemSize;\n return index * itemSize;\n },\n getItemSize: function getItemSize(_ref2, index) {\n var itemSize = _ref2.itemSize;\n return itemSize;\n },\n getEstimatedTotalSize: function getEstimatedTotalSize(_ref3) {\n var itemCount = _ref3.itemCount,\n itemSize = _ref3.itemSize;\n return itemSize * itemCount;\n },\n getOffsetForIndexAndAlignment: function getOffsetForIndexAndAlignment(_ref4, index, align, scrollOffset, instanceProps, scrollbarSize) {\n var direction = _ref4.direction,\n height = _ref4.height,\n itemCount = _ref4.itemCount,\n itemSize = _ref4.itemSize,\n layout = _ref4.layout,\n width = _ref4.width;\n // TODO Deprecate direction \"horizontal\"\n var isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n var size = isHorizontal ? width : height;\n var lastItemOffset = Math.max(0, itemCount * itemSize - size);\n var maxOffset = Math.min(lastItemOffset, index * itemSize);\n var minOffset = Math.max(0, index * itemSize - size + itemSize + scrollbarSize);\n\n if (align === 'smart') {\n if (scrollOffset >= minOffset - size && scrollOffset <= maxOffset + size) {\n align = 'auto';\n } else {\n align = 'center';\n }\n }\n\n switch (align) {\n case 'start':\n return maxOffset;\n\n case 'end':\n return minOffset;\n\n case 'center':\n {\n // \"Centered\" offset is usually the average of the min and max.\n // But near the edges of the list, this doesn't hold true.\n var middleOffset = Math.round(minOffset + (maxOffset - minOffset) / 2);\n\n if (middleOffset < Math.ceil(size / 2)) {\n return 0; // near the beginning\n } else if (middleOffset > lastItemOffset + Math.floor(size / 2)) {\n return lastItemOffset; // near the end\n } else {\n return middleOffset;\n }\n }\n\n case 'auto':\n default:\n if (scrollOffset >= minOffset && scrollOffset <= maxOffset) {\n return scrollOffset;\n } else if (scrollOffset < minOffset) {\n return minOffset;\n } else {\n return maxOffset;\n }\n\n }\n },\n getStartIndexForOffset: function getStartIndexForOffset(_ref5, offset) {\n var itemCount = _ref5.itemCount,\n itemSize = _ref5.itemSize;\n return Math.max(0, Math.min(itemCount - 1, Math.floor(offset / itemSize)));\n },\n getStopIndexForStartIndex: function getStopIndexForStartIndex(_ref6, startIndex, scrollOffset) {\n var direction = _ref6.direction,\n height = _ref6.height,\n itemCount = _ref6.itemCount,\n itemSize = _ref6.itemSize,\n layout = _ref6.layout,\n width = _ref6.width;\n // TODO Deprecate direction \"horizontal\"\n var isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n var offset = startIndex * itemSize;\n var size = isHorizontal ? width : height;\n var numVisibleItems = Math.ceil((size + scrollOffset - offset) / itemSize);\n return Math.max(0, Math.min(itemCount - 1, startIndex + numVisibleItems - 1 // -1 is because stop index is inclusive\n ));\n },\n initInstanceProps: function initInstanceProps(props) {// Noop\n },\n shouldResetStyleCacheOnItemSizeChange: true,\n validateProps: function validateProps(_ref7) {\n var itemSize = _ref7.itemSize;\n\n if (process.env.NODE_ENV !== 'production') {\n if (typeof itemSize !== 'number') {\n throw Error('An invalid \"itemSize\" prop has been specified. ' + 'Value should be a number. ' + (\"\\\"\" + (itemSize === null ? 'null' : typeof itemSize) + \"\\\" was specified.\"));\n }\n }\n }\n});\n\n// Pulled from react-compat\n// https://github.com/developit/preact-compat/blob/7c5de00e7c85e2ffd011bf3af02899b63f699d3a/src/index.js#L349\nfunction shallowDiffers(prev, next) {\n for (var attribute in prev) {\n if (!(attribute in next)) {\n return true;\n }\n }\n\n for (var _attribute in next) {\n if (prev[_attribute] !== next[_attribute]) {\n return true;\n }\n }\n\n return false;\n}\n\nvar _excluded = [\"style\"],\n _excluded2 = [\"style\"];\n// It knows to compare individual style props and ignore the wrapper object.\n// See https://reactjs.org/docs/react-api.html#reactmemo\n\nfunction areEqual(prevProps, nextProps) {\n var prevStyle = prevProps.style,\n prevRest = _objectWithoutPropertiesLoose(prevProps, _excluded);\n\n var nextStyle = nextProps.style,\n nextRest = _objectWithoutPropertiesLoose(nextProps, _excluded2);\n\n return !shallowDiffers(prevStyle, nextStyle) && !shallowDiffers(prevRest, nextRest);\n}\n\n// It knows to compare individual style props and ignore the wrapper object.\n// See https://reactjs.org/docs/react-component.html#shouldcomponentupdate\n\nfunction shouldComponentUpdate(nextProps, nextState) {\n return !areEqual(this.props, nextProps) || shallowDiffers(this.state, nextState);\n}\n\nexport { FixedSizeGrid, FixedSizeList, VariableSizeGrid, VariableSizeList, areEqual, shouldComponentUpdate };\n//# sourceMappingURL=index.esm.js.map\n","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { useDndContext, useTreeApi } from \"../context\";\nexport function Cursor() {\n var _a, _b;\n const tree = useTreeApi();\n const state = useDndContext();\n const cursor = state.cursor;\n if (!cursor || cursor.type !== \"line\")\n return null;\n const indent = tree.indent;\n const top = tree.rowHeight * cursor.index +\n ((_b = (_a = tree.props.padding) !== null && _a !== void 0 ? _a : tree.props.paddingTop) !== null && _b !== void 0 ? _b : 0);\n const left = indent * cursor.level;\n const Cursor = tree.renderCursor;\n return _jsx(Cursor, { top, left, indent });\n}\n","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { forwardRef } from \"react\";\nimport { useTreeApi } from \"../context\";\nimport { Cursor } from \"./cursor\";\nexport const ListOuterElement = forwardRef(function Outer(props, ref) {\n const { children } = props, rest = __rest(props, [\"children\"]);\n const tree = useTreeApi();\n return (_jsxs(\"div\", Object.assign({ \n // @ts-ignore\n ref: ref }, rest, { onClick: (e) => {\n if (e.currentTarget === e.target)\n tree.deselectAll();\n }, children: [_jsx(DropContainer, {}), children] })));\n});\nconst DropContainer = () => {\n const tree = useTreeApi();\n return (_jsx(\"div\", { style: {\n height: tree.visibleNodes.length * tree.rowHeight,\n width: \"100%\",\n position: \"absolute\",\n left: \"0\",\n right: \"0\",\n }, children: _jsx(Cursor, {}) }));\n};\n","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { forwardRef } from \"react\";\nimport { useTreeApi } from \"../context\";\nexport const ListInnerElement = forwardRef(function InnerElement(_a, ref) {\n var _b, _c, _d, _e;\n var { style } = _a, rest = __rest(_a, [\"style\"]);\n const tree = useTreeApi();\n const paddingTop = (_c = (_b = tree.props.padding) !== null && _b !== void 0 ? _b : tree.props.paddingTop) !== null && _c !== void 0 ? _c : 0;\n const paddingBottom = (_e = (_d = tree.props.padding) !== null && _d !== void 0 ? _d : tree.props.paddingBottom) !== null && _e !== void 0 ? _e : 0;\n return (_jsx(\"div\", Object.assign({ ref: ref, style: Object.assign(Object.assign({}, style), { height: `${parseFloat(style.height) + paddingTop + paddingBottom}px` }) }, rest)));\n});\n","import { createContext } from 'react';\n/**\n * Create the React Context\n */\n\nexport var DndContext = createContext({\n dragDropManager: undefined\n});","export var HandlerRole;\n\n(function (HandlerRole) {\n HandlerRole[\"SOURCE\"] = \"SOURCE\";\n HandlerRole[\"TARGET\"] = \"TARGET\";\n})(HandlerRole || (HandlerRole = {}));","/**\r\n * Use invariant() to assert state which your program assumes to be true.\r\n *\r\n * Provide sprintf-style format (only %s is supported) and arguments\r\n * to provide information about what broke and what you were\r\n * expecting.\r\n *\r\n * The invariant message will be stripped in production, but the invariant\r\n * will remain to ensure logic does not differ in production.\r\n */\nfunction invariant(condition, format) {\n for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n\n if (process.env.NODE_ENV !== 'production') {\n if (format === undefined) {\n throw new Error('invariant requires an error message argument');\n }\n }\n\n if (!condition) {\n var error;\n\n if (format === undefined) {\n error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');\n } else {\n var argIndex = 0;\n error = new Error(format.replace(/%s/g, function () {\n return args[argIndex++];\n }));\n error.name = 'Invariant Violation';\n }\n\n error.framesToPop = 1; // we don't care about invariant's own frame\n\n throw error;\n }\n}\n\nexport { invariant };\n//# sourceMappingURL=invariant.esm.js.map\n","export var INIT_COORDS = 'dnd-core/INIT_COORDS';\nexport var BEGIN_DRAG = 'dnd-core/BEGIN_DRAG';\nexport var PUBLISH_DRAG_SOURCE = 'dnd-core/PUBLISH_DRAG_SOURCE';\nexport var HOVER = 'dnd-core/HOVER';\nexport var DROP = 'dnd-core/DROP';\nexport var END_DRAG = 'dnd-core/END_DRAG';","import { INIT_COORDS } from '../types';\nexport function setClientOffset(clientOffset, sourceClientOffset) {\n return {\n type: INIT_COORDS,\n payload: {\n sourceClientOffset: sourceClientOffset || null,\n clientOffset: clientOffset || null\n }\n };\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n// cheap lodash replacements\n\n/**\n * drop-in replacement for _.get\n * @param obj\n * @param path\n * @param defaultValue\n */\nexport function get(obj, path, defaultValue) {\n return path.split('.').reduce(function (a, c) {\n return a && a[c] ? a[c] : defaultValue || null;\n }, obj);\n}\n/**\n * drop-in replacement for _.without\n */\n\nexport function without(items, item) {\n return items.filter(function (i) {\n return i !== item;\n });\n}\n/**\n * drop-in replacement for _.isString\n * @param input\n */\n\nexport function isString(input) {\n return typeof input === 'string';\n}\n/**\n * drop-in replacement for _.isString\n * @param input\n */\n\nexport function isObject(input) {\n return _typeof(input) === 'object';\n}\n/**\n * repalcement for _.xor\n * @param itemsA\n * @param itemsB\n */\n\nexport function xor(itemsA, itemsB) {\n var map = new Map();\n\n var insertItem = function insertItem(item) {\n map.set(item, map.has(item) ? map.get(item) + 1 : 1);\n };\n\n itemsA.forEach(insertItem);\n itemsB.forEach(insertItem);\n var result = [];\n map.forEach(function (count, key) {\n if (count === 1) {\n result.push(key);\n }\n });\n return result;\n}\n/**\n * replacement for _.intersection\n * @param itemsA\n * @param itemsB\n */\n\nexport function intersection(itemsA, itemsB) {\n return itemsA.filter(function (t) {\n return itemsB.indexOf(t) > -1;\n });\n}","import { invariant } from '@react-dnd/invariant';\nimport { setClientOffset } from './local/setClientOffset';\nimport { isObject } from '../../utils/js_utils';\nimport { BEGIN_DRAG, INIT_COORDS } from './types';\nvar ResetCoordinatesAction = {\n type: INIT_COORDS,\n payload: {\n clientOffset: null,\n sourceClientOffset: null\n }\n};\nexport function createBeginDrag(manager) {\n return function beginDrag() {\n var sourceIds = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n publishSource: true\n };\n var _options$publishSourc = options.publishSource,\n publishSource = _options$publishSourc === void 0 ? true : _options$publishSourc,\n clientOffset = options.clientOffset,\n getSourceClientOffset = options.getSourceClientOffset;\n var monitor = manager.getMonitor();\n var registry = manager.getRegistry(); // Initialize the coordinates using the client offset\n\n manager.dispatch(setClientOffset(clientOffset));\n verifyInvariants(sourceIds, monitor, registry); // Get the draggable source\n\n var sourceId = getDraggableSource(sourceIds, monitor);\n\n if (sourceId === null) {\n manager.dispatch(ResetCoordinatesAction);\n return;\n } // Get the source client offset\n\n\n var sourceClientOffset = null;\n\n if (clientOffset) {\n if (!getSourceClientOffset) {\n throw new Error('getSourceClientOffset must be defined');\n }\n\n verifyGetSourceClientOffsetIsFunction(getSourceClientOffset);\n sourceClientOffset = getSourceClientOffset(sourceId);\n } // Initialize the full coordinates\n\n\n manager.dispatch(setClientOffset(clientOffset, sourceClientOffset));\n var source = registry.getSource(sourceId);\n var item = source.beginDrag(monitor, sourceId); // If source.beginDrag returns null, this is an indicator to cancel the drag\n\n if (item == null) {\n return undefined;\n }\n\n verifyItemIsObject(item);\n registry.pinSource(sourceId);\n var itemType = registry.getSourceType(sourceId);\n return {\n type: BEGIN_DRAG,\n payload: {\n itemType: itemType,\n item: item,\n sourceId: sourceId,\n clientOffset: clientOffset || null,\n sourceClientOffset: sourceClientOffset || null,\n isSourcePublic: !!publishSource\n }\n };\n };\n}\n\nfunction verifyInvariants(sourceIds, monitor, registry) {\n invariant(!monitor.isDragging(), 'Cannot call beginDrag while dragging.');\n sourceIds.forEach(function (sourceId) {\n invariant(registry.getSource(sourceId), 'Expected sourceIds to be registered.');\n });\n}\n\nfunction verifyGetSourceClientOffsetIsFunction(getSourceClientOffset) {\n invariant(typeof getSourceClientOffset === 'function', 'When clientOffset is provided, getSourceClientOffset must be a function.');\n}\n\nfunction verifyItemIsObject(item) {\n invariant(isObject(item), 'Item must be an object.');\n}\n\nfunction getDraggableSource(sourceIds, monitor) {\n var sourceId = null;\n\n for (var i = sourceIds.length - 1; i >= 0; i--) {\n if (monitor.canDragSource(sourceIds[i])) {\n sourceId = sourceIds[i];\n break;\n }\n }\n\n return sourceId;\n}","import { PUBLISH_DRAG_SOURCE } from './types';\nexport function createPublishDragSource(manager) {\n return function publishDragSource() {\n var monitor = manager.getMonitor();\n\n if (monitor.isDragging()) {\n return {\n type: PUBLISH_DRAG_SOURCE\n };\n }\n };\n}","export function matchesType(targetType, draggedItemType) {\n if (draggedItemType === null) {\n return targetType === null;\n }\n\n return Array.isArray(targetType) ? targetType.some(function (t) {\n return t === draggedItemType;\n }) : targetType === draggedItemType;\n}","import { invariant } from '@react-dnd/invariant';\nimport { matchesType } from '../../utils/matchesType';\nimport { HOVER } from './types';\nexport function createHover(manager) {\n return function hover(targetIdsArg) {\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n clientOffset = _ref.clientOffset;\n\n verifyTargetIdsIsArray(targetIdsArg);\n var targetIds = targetIdsArg.slice(0);\n var monitor = manager.getMonitor();\n var registry = manager.getRegistry();\n checkInvariants(targetIds, monitor, registry);\n var draggedItemType = monitor.getItemType();\n removeNonMatchingTargetIds(targetIds, registry, draggedItemType);\n hoverAllTargets(targetIds, monitor, registry);\n return {\n type: HOVER,\n payload: {\n targetIds: targetIds,\n clientOffset: clientOffset || null\n }\n };\n };\n}\n\nfunction verifyTargetIdsIsArray(targetIdsArg) {\n invariant(Array.isArray(targetIdsArg), 'Expected targetIds to be an array.');\n}\n\nfunction checkInvariants(targetIds, monitor, registry) {\n invariant(monitor.isDragging(), 'Cannot call hover while not dragging.');\n invariant(!monitor.didDrop(), 'Cannot call hover after drop.');\n\n for (var i = 0; i < targetIds.length; i++) {\n var targetId = targetIds[i];\n invariant(targetIds.lastIndexOf(targetId) === i, 'Expected targetIds to be unique in the passed array.');\n var target = registry.getTarget(targetId);\n invariant(target, 'Expected targetIds to be registered.');\n }\n}\n\nfunction removeNonMatchingTargetIds(targetIds, registry, draggedItemType) {\n // Remove those targetIds that don't match the targetType. This\n // fixes shallow isOver which would only be non-shallow because of\n // non-matching targets.\n for (var i = targetIds.length - 1; i >= 0; i--) {\n var targetId = targetIds[i];\n var targetType = registry.getTargetType(targetId);\n\n if (!matchesType(targetType, draggedItemType)) {\n targetIds.splice(i, 1);\n }\n }\n}\n\nfunction hoverAllTargets(targetIds, monitor, registry) {\n // Finally call hover on all matching targets.\n targetIds.forEach(function (targetId) {\n var target = registry.getTarget(targetId);\n target.hover(monitor, targetId);\n });\n}","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { invariant } from '@react-dnd/invariant';\nimport { DROP } from './types';\nimport { isObject } from '../../utils/js_utils';\nexport function createDrop(manager) {\n return function drop() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var monitor = manager.getMonitor();\n var registry = manager.getRegistry();\n verifyInvariants(monitor);\n var targetIds = getDroppableTargets(monitor); // Multiple actions are dispatched here, which is why this doesn't return an action\n\n targetIds.forEach(function (targetId, index) {\n var dropResult = determineDropResult(targetId, index, registry, monitor);\n var action = {\n type: DROP,\n payload: {\n dropResult: _objectSpread(_objectSpread({}, options), dropResult)\n }\n };\n manager.dispatch(action);\n });\n };\n}\n\nfunction verifyInvariants(monitor) {\n invariant(monitor.isDragging(), 'Cannot call drop while not dragging.');\n invariant(!monitor.didDrop(), 'Cannot call drop twice during one drag operation.');\n}\n\nfunction determineDropResult(targetId, index, registry, monitor) {\n var target = registry.getTarget(targetId);\n var dropResult = target ? target.drop(monitor, targetId) : undefined;\n verifyDropResultType(dropResult);\n\n if (typeof dropResult === 'undefined') {\n dropResult = index === 0 ? {} : monitor.getDropResult();\n }\n\n return dropResult;\n}\n\nfunction verifyDropResultType(dropResult) {\n invariant(typeof dropResult === 'undefined' || isObject(dropResult), 'Drop result must either be an object or undefined.');\n}\n\nfunction getDroppableTargets(monitor) {\n var targetIds = monitor.getTargetIds().filter(monitor.canDropOnTarget, monitor);\n targetIds.reverse();\n return targetIds;\n}","import { invariant } from '@react-dnd/invariant';\nimport { END_DRAG } from './types';\nexport function createEndDrag(manager) {\n return function endDrag() {\n var monitor = manager.getMonitor();\n var registry = manager.getRegistry();\n verifyIsDragging(monitor);\n var sourceId = monitor.getSourceId();\n\n if (sourceId != null) {\n var source = registry.getSource(sourceId, true);\n source.endDrag(monitor, sourceId);\n registry.unpinSource();\n }\n\n return {\n type: END_DRAG\n };\n };\n}\n\nfunction verifyIsDragging(monitor) {\n invariant(monitor.isDragging(), 'Cannot call endDrag while not dragging.');\n}","import { createBeginDrag } from './beginDrag';\nimport { createPublishDragSource } from './publishDragSource';\nimport { createHover } from './hover';\nimport { createDrop } from './drop';\nimport { createEndDrag } from './endDrag';\nexport * from './types';\nexport function createDragDropActions(manager) {\n return {\n beginDrag: createBeginDrag(manager),\n publishDragSource: createPublishDragSource(manager),\n hover: createHover(manager),\n drop: createDrop(manager),\n endDrag: createEndDrag(manager)\n };\n}","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { createDragDropActions } from '../actions/dragDrop';\nexport var DragDropManagerImpl = /*#__PURE__*/function () {\n function DragDropManagerImpl(store, monitor) {\n var _this = this;\n\n _classCallCheck(this, DragDropManagerImpl);\n\n _defineProperty(this, \"store\", void 0);\n\n _defineProperty(this, \"monitor\", void 0);\n\n _defineProperty(this, \"backend\", void 0);\n\n _defineProperty(this, \"isSetUp\", false);\n\n _defineProperty(this, \"handleRefCountChange\", function () {\n var shouldSetUp = _this.store.getState().refCount > 0;\n\n if (_this.backend) {\n if (shouldSetUp && !_this.isSetUp) {\n _this.backend.setup();\n\n _this.isSetUp = true;\n } else if (!shouldSetUp && _this.isSetUp) {\n _this.backend.teardown();\n\n _this.isSetUp = false;\n }\n }\n });\n\n this.store = store;\n this.monitor = monitor;\n store.subscribe(this.handleRefCountChange);\n }\n\n _createClass(DragDropManagerImpl, [{\n key: \"receiveBackend\",\n value: function receiveBackend(backend) {\n this.backend = backend;\n }\n }, {\n key: \"getMonitor\",\n value: function getMonitor() {\n return this.monitor;\n }\n }, {\n key: \"getBackend\",\n value: function getBackend() {\n return this.backend;\n }\n }, {\n key: \"getRegistry\",\n value: function getRegistry() {\n return this.monitor.registry;\n }\n }, {\n key: \"getActions\",\n value: function getActions() {\n /* eslint-disable-next-line @typescript-eslint/no-this-alias */\n var manager = this;\n var dispatch = this.store.dispatch;\n\n function bindActionCreator(actionCreator) {\n return function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var action = actionCreator.apply(manager, args);\n\n if (typeof action !== 'undefined') {\n dispatch(action);\n }\n };\n }\n\n var actions = createDragDropActions(this);\n return Object.keys(actions).reduce(function (boundActions, key) {\n var action = actions[key];\n boundActions[key] = bindActionCreator(action);\n return boundActions;\n }, {});\n }\n }, {\n key: \"dispatch\",\n value: function dispatch(action) {\n this.store.dispatch(action);\n }\n }]);\n\n return DragDropManagerImpl;\n}();","import _objectSpread from '@babel/runtime/helpers/esm/objectSpread2';\n\n/**\n * Adapted from React: https://github.com/facebook/react/blob/master/packages/shared/formatProdErrorMessage.js\n *\n * Do not require this module directly! Use normal throw error calls. These messages will be replaced with error codes\n * during build.\n * @param {number} code\n */\nfunction formatProdErrorMessage(code) {\n return \"Minified Redux error #\" + code + \"; visit https://redux.js.org/Errors?code=\" + code + \" for the full message or \" + 'use the non-minified dev environment for full errors. ';\n}\n\n// Inlined version of the `symbol-observable` polyfill\nvar $$observable = (function () {\n return typeof Symbol === 'function' && Symbol.observable || '@@observable';\n})();\n\n/**\n * These are private action types reserved by Redux.\n * For any unknown actions, you must return the current state.\n * If the current state is undefined, you must return the initial state.\n * Do not reference these action types directly in your code.\n */\nvar randomString = function randomString() {\n return Math.random().toString(36).substring(7).split('').join('.');\n};\n\nvar ActionTypes = {\n INIT: \"@@redux/INIT\" + randomString(),\n REPLACE: \"@@redux/REPLACE\" + randomString(),\n PROBE_UNKNOWN_ACTION: function PROBE_UNKNOWN_ACTION() {\n return \"@@redux/PROBE_UNKNOWN_ACTION\" + randomString();\n }\n};\n\n/**\n * @param {any} obj The object to inspect.\n * @returns {boolean} True if the argument appears to be a plain object.\n */\nfunction isPlainObject(obj) {\n if (typeof obj !== 'object' || obj === null) return false;\n var proto = obj;\n\n while (Object.getPrototypeOf(proto) !== null) {\n proto = Object.getPrototypeOf(proto);\n }\n\n return Object.getPrototypeOf(obj) === proto;\n}\n\n// Inlined / shortened version of `kindOf` from https://github.com/jonschlinkert/kind-of\nfunction miniKindOf(val) {\n if (val === void 0) return 'undefined';\n if (val === null) return 'null';\n var type = typeof val;\n\n switch (type) {\n case 'boolean':\n case 'string':\n case 'number':\n case 'symbol':\n case 'function':\n {\n return type;\n }\n }\n\n if (Array.isArray(val)) return 'array';\n if (isDate(val)) return 'date';\n if (isError(val)) return 'error';\n var constructorName = ctorName(val);\n\n switch (constructorName) {\n case 'Symbol':\n case 'Promise':\n case 'WeakMap':\n case 'WeakSet':\n case 'Map':\n case 'Set':\n return constructorName;\n } // other\n\n\n return type.slice(8, -1).toLowerCase().replace(/\\s/g, '');\n}\n\nfunction ctorName(val) {\n return typeof val.constructor === 'function' ? val.constructor.name : null;\n}\n\nfunction isError(val) {\n return val instanceof Error || typeof val.message === 'string' && val.constructor && typeof val.constructor.stackTraceLimit === 'number';\n}\n\nfunction isDate(val) {\n if (val instanceof Date) return true;\n return typeof val.toDateString === 'function' && typeof val.getDate === 'function' && typeof val.setDate === 'function';\n}\n\nfunction kindOf(val) {\n var typeOfVal = typeof val;\n\n if (process.env.NODE_ENV !== 'production') {\n typeOfVal = miniKindOf(val);\n }\n\n return typeOfVal;\n}\n\n/**\n * @deprecated\n *\n * **We recommend using the `configureStore` method\n * of the `@reduxjs/toolkit` package**, which replaces `createStore`.\n *\n * Redux Toolkit is our recommended approach for writing Redux logic today,\n * including store setup, reducers, data fetching, and more.\n *\n * **For more details, please read this Redux docs page:**\n * **https://redux.js.org/introduction/why-rtk-is-redux-today**\n *\n * `configureStore` from Redux Toolkit is an improved version of `createStore` that\n * simplifies setup and helps avoid common bugs.\n *\n * You should not be using the `redux` core package by itself today, except for learning purposes.\n * The `createStore` method from the core `redux` package will not be removed, but we encourage\n * all users to migrate to using Redux Toolkit for all Redux code.\n *\n * If you want to use `createStore` without this visual deprecation warning, use\n * the `legacy_createStore` import instead:\n *\n * `import { legacy_createStore as createStore} from 'redux'`\n *\n */\n\nfunction createStore(reducer, preloadedState, enhancer) {\n var _ref2;\n\n if (typeof preloadedState === 'function' && typeof enhancer === 'function' || typeof enhancer === 'function' && typeof arguments[3] === 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(0) : 'It looks like you are passing several store enhancers to ' + 'createStore(). This is not supported. Instead, compose them ' + 'together to a single function. See https://redux.js.org/tutorials/fundamentals/part-4-store#creating-a-store-with-enhancers for an example.');\n }\n\n if (typeof preloadedState === 'function' && typeof enhancer === 'undefined') {\n enhancer = preloadedState;\n preloadedState = undefined;\n }\n\n if (typeof enhancer !== 'undefined') {\n if (typeof enhancer !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(1) : \"Expected the enhancer to be a function. Instead, received: '\" + kindOf(enhancer) + \"'\");\n }\n\n return enhancer(createStore)(reducer, preloadedState);\n }\n\n if (typeof reducer !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(2) : \"Expected the root reducer to be a function. Instead, received: '\" + kindOf(reducer) + \"'\");\n }\n\n var currentReducer = reducer;\n var currentState = preloadedState;\n var currentListeners = [];\n var nextListeners = currentListeners;\n var isDispatching = false;\n /**\n * This makes a shallow copy of currentListeners so we can use\n * nextListeners as a temporary list while dispatching.\n *\n * This prevents any bugs around consumers calling\n * subscribe/unsubscribe in the middle of a dispatch.\n */\n\n function ensureCanMutateNextListeners() {\n if (nextListeners === currentListeners) {\n nextListeners = currentListeners.slice();\n }\n }\n /**\n * Reads the state tree managed by the store.\n *\n * @returns {any} The current state tree of your application.\n */\n\n\n function getState() {\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(3) : 'You may not call store.getState() while the reducer is executing. ' + 'The reducer has already received the state as an argument. ' + 'Pass it down from the top reducer instead of reading it from the store.');\n }\n\n return currentState;\n }\n /**\n * Adds a change listener. It will be called any time an action is dispatched,\n * and some part of the state tree may potentially have changed. You may then\n * call `getState()` to read the current state tree inside the callback.\n *\n * You may call `dispatch()` from a change listener, with the following\n * caveats:\n *\n * 1. The subscriptions are snapshotted just before every `dispatch()` call.\n * If you subscribe or unsubscribe while the listeners are being invoked, this\n * will not have any effect on the `dispatch()` that is currently in progress.\n * However, the next `dispatch()` call, whether nested or not, will use a more\n * recent snapshot of the subscription list.\n *\n * 2. The listener should not expect to see all state changes, as the state\n * might have been updated multiple times during a nested `dispatch()` before\n * the listener is called. It is, however, guaranteed that all subscribers\n * registered before the `dispatch()` started will be called with the latest\n * state by the time it exits.\n *\n * @param {Function} listener A callback to be invoked on every dispatch.\n * @returns {Function} A function to remove this change listener.\n */\n\n\n function subscribe(listener) {\n if (typeof listener !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(4) : \"Expected the listener to be a function. Instead, received: '\" + kindOf(listener) + \"'\");\n }\n\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(5) : 'You may not call store.subscribe() while the reducer is executing. ' + 'If you would like to be notified after the store has been updated, subscribe from a ' + 'component and invoke store.getState() in the callback to access the latest state. ' + 'See https://redux.js.org/api/store#subscribelistener for more details.');\n }\n\n var isSubscribed = true;\n ensureCanMutateNextListeners();\n nextListeners.push(listener);\n return function unsubscribe() {\n if (!isSubscribed) {\n return;\n }\n\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(6) : 'You may not unsubscribe from a store listener while the reducer is executing. ' + 'See https://redux.js.org/api/store#subscribelistener for more details.');\n }\n\n isSubscribed = false;\n ensureCanMutateNextListeners();\n var index = nextListeners.indexOf(listener);\n nextListeners.splice(index, 1);\n currentListeners = null;\n };\n }\n /**\n * Dispatches an action. It is the only way to trigger a state change.\n *\n * The `reducer` function, used to create the store, will be called with the\n * current state tree and the given `action`. Its return value will\n * be considered the **next** state of the tree, and the change listeners\n * will be notified.\n *\n * The base implementation only supports plain object actions. If you want to\n * dispatch a Promise, an Observable, a thunk, or something else, you need to\n * wrap your store creating function into the corresponding middleware. For\n * example, see the documentation for the `redux-thunk` package. Even the\n * middleware will eventually dispatch plain object actions using this method.\n *\n * @param {Object} action A plain object representing “what changed”. It is\n * a good idea to keep actions serializable so you can record and replay user\n * sessions, or use the time travelling `redux-devtools`. An action must have\n * a `type` property which may not be `undefined`. It is a good idea to use\n * string constants for action types.\n *\n * @returns {Object} For convenience, the same action object you dispatched.\n *\n * Note that, if you use a custom middleware, it may wrap `dispatch()` to\n * return something else (for example, a Promise you can await).\n */\n\n\n function dispatch(action) {\n if (!isPlainObject(action)) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(7) : \"Actions must be plain objects. Instead, the actual type was: '\" + kindOf(action) + \"'. You may need to add middleware to your store setup to handle dispatching other values, such as 'redux-thunk' to handle dispatching functions. See https://redux.js.org/tutorials/fundamentals/part-4-store#middleware and https://redux.js.org/tutorials/fundamentals/part-6-async-logic#using-the-redux-thunk-middleware for examples.\");\n }\n\n if (typeof action.type === 'undefined') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(8) : 'Actions may not have an undefined \"type\" property. You may have misspelled an action type string constant.');\n }\n\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(9) : 'Reducers may not dispatch actions.');\n }\n\n try {\n isDispatching = true;\n currentState = currentReducer(currentState, action);\n } finally {\n isDispatching = false;\n }\n\n var listeners = currentListeners = nextListeners;\n\n for (var i = 0; i < listeners.length; i++) {\n var listener = listeners[i];\n listener();\n }\n\n return action;\n }\n /**\n * Replaces the reducer currently used by the store to calculate the state.\n *\n * You might need this if your app implements code splitting and you want to\n * load some of the reducers dynamically. You might also need this if you\n * implement a hot reloading mechanism for Redux.\n *\n * @param {Function} nextReducer The reducer for the store to use instead.\n * @returns {void}\n */\n\n\n function replaceReducer(nextReducer) {\n if (typeof nextReducer !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(10) : \"Expected the nextReducer to be a function. Instead, received: '\" + kindOf(nextReducer));\n }\n\n currentReducer = nextReducer; // This action has a similiar effect to ActionTypes.INIT.\n // Any reducers that existed in both the new and old rootReducer\n // will receive the previous state. This effectively populates\n // the new state tree with any relevant data from the old one.\n\n dispatch({\n type: ActionTypes.REPLACE\n });\n }\n /**\n * Interoperability point for observable/reactive libraries.\n * @returns {observable} A minimal observable of state changes.\n * For more information, see the observable proposal:\n * https://github.com/tc39/proposal-observable\n */\n\n\n function observable() {\n var _ref;\n\n var outerSubscribe = subscribe;\n return _ref = {\n /**\n * The minimal observable subscription method.\n * @param {Object} observer Any object that can be used as an observer.\n * The observer object should have a `next` method.\n * @returns {subscription} An object with an `unsubscribe` method that can\n * be used to unsubscribe the observable from the store, and prevent further\n * emission of values from the observable.\n */\n subscribe: function subscribe(observer) {\n if (typeof observer !== 'object' || observer === null) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(11) : \"Expected the observer to be an object. Instead, received: '\" + kindOf(observer) + \"'\");\n }\n\n function observeState() {\n if (observer.next) {\n observer.next(getState());\n }\n }\n\n observeState();\n var unsubscribe = outerSubscribe(observeState);\n return {\n unsubscribe: unsubscribe\n };\n }\n }, _ref[$$observable] = function () {\n return this;\n }, _ref;\n } // When a store is created, an \"INIT\" action is dispatched so that every\n // reducer returns their initial state. This effectively populates\n // the initial state tree.\n\n\n dispatch({\n type: ActionTypes.INIT\n });\n return _ref2 = {\n dispatch: dispatch,\n subscribe: subscribe,\n getState: getState,\n replaceReducer: replaceReducer\n }, _ref2[$$observable] = observable, _ref2;\n}\n/**\n * Creates a Redux store that holds the state tree.\n *\n * **We recommend using `configureStore` from the\n * `@reduxjs/toolkit` package**, which replaces `createStore`:\n * **https://redux.js.org/introduction/why-rtk-is-redux-today**\n *\n * The only way to change the data in the store is to call `dispatch()` on it.\n *\n * There should only be a single store in your app. To specify how different\n * parts of the state tree respond to actions, you may combine several reducers\n * into a single reducer function by using `combineReducers`.\n *\n * @param {Function} reducer A function that returns the next state tree, given\n * the current state tree and the action to handle.\n *\n * @param {any} [preloadedState] The initial state. You may optionally specify it\n * to hydrate the state from the server in universal apps, or to restore a\n * previously serialized user session.\n * If you use `combineReducers` to produce the root reducer function, this must be\n * an object with the same shape as `combineReducers` keys.\n *\n * @param {Function} [enhancer] The store enhancer. You may optionally specify it\n * to enhance the store with third-party capabilities such as middleware,\n * time travel, persistence, etc. The only store enhancer that ships with Redux\n * is `applyMiddleware()`.\n *\n * @returns {Store} A Redux store that lets you read the state, dispatch actions\n * and subscribe to changes.\n */\n\nvar legacy_createStore = createStore;\n\n/**\n * Prints a warning in the console if it exists.\n *\n * @param {String} message The warning message.\n * @returns {void}\n */\nfunction warning(message) {\n /* eslint-disable no-console */\n if (typeof console !== 'undefined' && typeof console.error === 'function') {\n console.error(message);\n }\n /* eslint-enable no-console */\n\n\n try {\n // This error was thrown as a convenience so that if you enable\n // \"break on all exceptions\" in your console,\n // it would pause the execution at this line.\n throw new Error(message);\n } catch (e) {} // eslint-disable-line no-empty\n\n}\n\nfunction getUnexpectedStateShapeWarningMessage(inputState, reducers, action, unexpectedKeyCache) {\n var reducerKeys = Object.keys(reducers);\n var argumentName = action && action.type === ActionTypes.INIT ? 'preloadedState argument passed to createStore' : 'previous state received by the reducer';\n\n if (reducerKeys.length === 0) {\n return 'Store does not have a valid reducer. Make sure the argument passed ' + 'to combineReducers is an object whose values are reducers.';\n }\n\n if (!isPlainObject(inputState)) {\n return \"The \" + argumentName + \" has unexpected type of \\\"\" + kindOf(inputState) + \"\\\". Expected argument to be an object with the following \" + (\"keys: \\\"\" + reducerKeys.join('\", \"') + \"\\\"\");\n }\n\n var unexpectedKeys = Object.keys(inputState).filter(function (key) {\n return !reducers.hasOwnProperty(key) && !unexpectedKeyCache[key];\n });\n unexpectedKeys.forEach(function (key) {\n unexpectedKeyCache[key] = true;\n });\n if (action && action.type === ActionTypes.REPLACE) return;\n\n if (unexpectedKeys.length > 0) {\n return \"Unexpected \" + (unexpectedKeys.length > 1 ? 'keys' : 'key') + \" \" + (\"\\\"\" + unexpectedKeys.join('\", \"') + \"\\\" found in \" + argumentName + \". \") + \"Expected to find one of the known reducer keys instead: \" + (\"\\\"\" + reducerKeys.join('\", \"') + \"\\\". Unexpected keys will be ignored.\");\n }\n}\n\nfunction assertReducerShape(reducers) {\n Object.keys(reducers).forEach(function (key) {\n var reducer = reducers[key];\n var initialState = reducer(undefined, {\n type: ActionTypes.INIT\n });\n\n if (typeof initialState === 'undefined') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(12) : \"The slice reducer for key \\\"\" + key + \"\\\" returned undefined during initialization. \" + \"If the state passed to the reducer is undefined, you must \" + \"explicitly return the initial state. The initial state may \" + \"not be undefined. If you don't want to set a value for this reducer, \" + \"you can use null instead of undefined.\");\n }\n\n if (typeof reducer(undefined, {\n type: ActionTypes.PROBE_UNKNOWN_ACTION()\n }) === 'undefined') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(13) : \"The slice reducer for key \\\"\" + key + \"\\\" returned undefined when probed with a random type. \" + (\"Don't try to handle '\" + ActionTypes.INIT + \"' or other actions in \\\"redux/*\\\" \") + \"namespace. They are considered private. Instead, you must return the \" + \"current state for any unknown actions, unless it is undefined, \" + \"in which case you must return the initial state, regardless of the \" + \"action type. The initial state may not be undefined, but can be null.\");\n }\n });\n}\n/**\n * Turns an object whose values are different reducer functions, into a single\n * reducer function. It will call every child reducer, and gather their results\n * into a single state object, whose keys correspond to the keys of the passed\n * reducer functions.\n *\n * @param {Object} reducers An object whose values correspond to different\n * reducer functions that need to be combined into one. One handy way to obtain\n * it is to use ES6 `import * as reducers` syntax. The reducers may never return\n * undefined for any action. Instead, they should return their initial state\n * if the state passed to them was undefined, and the current state for any\n * unrecognized action.\n *\n * @returns {Function} A reducer function that invokes every reducer inside the\n * passed object, and builds a state object with the same shape.\n */\n\n\nfunction combineReducers(reducers) {\n var reducerKeys = Object.keys(reducers);\n var finalReducers = {};\n\n for (var i = 0; i < reducerKeys.length; i++) {\n var key = reducerKeys[i];\n\n if (process.env.NODE_ENV !== 'production') {\n if (typeof reducers[key] === 'undefined') {\n warning(\"No reducer provided for key \\\"\" + key + \"\\\"\");\n }\n }\n\n if (typeof reducers[key] === 'function') {\n finalReducers[key] = reducers[key];\n }\n }\n\n var finalReducerKeys = Object.keys(finalReducers); // This is used to make sure we don't warn about the same\n // keys multiple times.\n\n var unexpectedKeyCache;\n\n if (process.env.NODE_ENV !== 'production') {\n unexpectedKeyCache = {};\n }\n\n var shapeAssertionError;\n\n try {\n assertReducerShape(finalReducers);\n } catch (e) {\n shapeAssertionError = e;\n }\n\n return function combination(state, action) {\n if (state === void 0) {\n state = {};\n }\n\n if (shapeAssertionError) {\n throw shapeAssertionError;\n }\n\n if (process.env.NODE_ENV !== 'production') {\n var warningMessage = getUnexpectedStateShapeWarningMessage(state, finalReducers, action, unexpectedKeyCache);\n\n if (warningMessage) {\n warning(warningMessage);\n }\n }\n\n var hasChanged = false;\n var nextState = {};\n\n for (var _i = 0; _i < finalReducerKeys.length; _i++) {\n var _key = finalReducerKeys[_i];\n var reducer = finalReducers[_key];\n var previousStateForKey = state[_key];\n var nextStateForKey = reducer(previousStateForKey, action);\n\n if (typeof nextStateForKey === 'undefined') {\n var actionType = action && action.type;\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(14) : \"When called with an action of type \" + (actionType ? \"\\\"\" + String(actionType) + \"\\\"\" : '(unknown type)') + \", the slice reducer for key \\\"\" + _key + \"\\\" returned undefined. \" + \"To ignore an action, you must explicitly return the previous state. \" + \"If you want this reducer to hold no value, you can return null instead of undefined.\");\n }\n\n nextState[_key] = nextStateForKey;\n hasChanged = hasChanged || nextStateForKey !== previousStateForKey;\n }\n\n hasChanged = hasChanged || finalReducerKeys.length !== Object.keys(state).length;\n return hasChanged ? nextState : state;\n };\n}\n\nfunction bindActionCreator(actionCreator, dispatch) {\n return function () {\n return dispatch(actionCreator.apply(this, arguments));\n };\n}\n/**\n * Turns an object whose values are action creators, into an object with the\n * same keys, but with every function wrapped into a `dispatch` call so they\n * may be invoked directly. This is just a convenience method, as you can call\n * `store.dispatch(MyActionCreators.doSomething())` yourself just fine.\n *\n * For convenience, you can also pass an action creator as the first argument,\n * and get a dispatch wrapped function in return.\n *\n * @param {Function|Object} actionCreators An object whose values are action\n * creator functions. One handy way to obtain it is to use ES6 `import * as`\n * syntax. You may also pass a single function.\n *\n * @param {Function} dispatch The `dispatch` function available on your Redux\n * store.\n *\n * @returns {Function|Object} The object mimicking the original object, but with\n * every action creator wrapped into the `dispatch` call. If you passed a\n * function as `actionCreators`, the return value will also be a single\n * function.\n */\n\n\nfunction bindActionCreators(actionCreators, dispatch) {\n if (typeof actionCreators === 'function') {\n return bindActionCreator(actionCreators, dispatch);\n }\n\n if (typeof actionCreators !== 'object' || actionCreators === null) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(16) : \"bindActionCreators expected an object or a function, but instead received: '\" + kindOf(actionCreators) + \"'. \" + \"Did you write \\\"import ActionCreators from\\\" instead of \\\"import * as ActionCreators from\\\"?\");\n }\n\n var boundActionCreators = {};\n\n for (var key in actionCreators) {\n var actionCreator = actionCreators[key];\n\n if (typeof actionCreator === 'function') {\n boundActionCreators[key] = bindActionCreator(actionCreator, dispatch);\n }\n }\n\n return boundActionCreators;\n}\n\n/**\n * Composes single-argument functions from right to left. The rightmost\n * function can take multiple arguments as it provides the signature for\n * the resulting composite function.\n *\n * @param {...Function} funcs The functions to compose.\n * @returns {Function} A function obtained by composing the argument functions\n * from right to left. For example, compose(f, g, h) is identical to doing\n * (...args) => f(g(h(...args))).\n */\nfunction compose() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n if (funcs.length === 0) {\n return function (arg) {\n return arg;\n };\n }\n\n if (funcs.length === 1) {\n return funcs[0];\n }\n\n return funcs.reduce(function (a, b) {\n return function () {\n return a(b.apply(void 0, arguments));\n };\n });\n}\n\n/**\n * Creates a store enhancer that applies middleware to the dispatch method\n * of the Redux store. This is handy for a variety of tasks, such as expressing\n * asynchronous actions in a concise manner, or logging every action payload.\n *\n * See `redux-thunk` package as an example of the Redux middleware.\n *\n * Because middleware is potentially asynchronous, this should be the first\n * store enhancer in the composition chain.\n *\n * Note that each middleware will be given the `dispatch` and `getState` functions\n * as named arguments.\n *\n * @param {...Function} middlewares The middleware chain to be applied.\n * @returns {Function} A store enhancer applying the middleware.\n */\n\nfunction applyMiddleware() {\n for (var _len = arguments.length, middlewares = new Array(_len), _key = 0; _key < _len; _key++) {\n middlewares[_key] = arguments[_key];\n }\n\n return function (createStore) {\n return function () {\n var store = createStore.apply(void 0, arguments);\n\n var _dispatch = function dispatch() {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(15) : 'Dispatching while constructing your middleware is not allowed. ' + 'Other middleware would not be applied to this dispatch.');\n };\n\n var middlewareAPI = {\n getState: store.getState,\n dispatch: function dispatch() {\n return _dispatch.apply(void 0, arguments);\n }\n };\n var chain = middlewares.map(function (middleware) {\n return middleware(middlewareAPI);\n });\n _dispatch = compose.apply(void 0, chain)(store.dispatch);\n return _objectSpread(_objectSpread({}, store), {}, {\n dispatch: _dispatch\n });\n };\n };\n}\n\nexport { ActionTypes as __DO_NOT_USE__ActionTypes, applyMiddleware, bindActionCreators, combineReducers, compose, createStore, legacy_createStore };\n","export var strictEquality = function strictEquality(a, b) {\n return a === b;\n};\n/**\n * Determine if two cartesian coordinate offsets are equal\n * @param offsetA\n * @param offsetB\n */\n\nexport function areCoordsEqual(offsetA, offsetB) {\n if (!offsetA && !offsetB) {\n return true;\n } else if (!offsetA || !offsetB) {\n return false;\n } else {\n return offsetA.x === offsetB.x && offsetA.y === offsetB.y;\n }\n}\n/**\n * Determines if two arrays of items are equal\n * @param a The first array of items\n * @param b The second array of items\n */\n\nexport function areArraysEqual(a, b) {\n var isEqual = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : strictEquality;\n\n if (a.length !== b.length) {\n return false;\n }\n\n for (var i = 0; i < a.length; ++i) {\n if (!isEqual(a[i], b[i])) {\n return false;\n }\n }\n\n return true;\n}","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { INIT_COORDS, BEGIN_DRAG, HOVER, END_DRAG, DROP } from '../actions/dragDrop';\nimport { areCoordsEqual } from '../utils/equality';\nvar initialState = {\n initialSourceClientOffset: null,\n initialClientOffset: null,\n clientOffset: null\n};\nexport function reduce() {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;\n var action = arguments.length > 1 ? arguments[1] : undefined;\n var payload = action.payload;\n\n switch (action.type) {\n case INIT_COORDS:\n case BEGIN_DRAG:\n return {\n initialSourceClientOffset: payload.sourceClientOffset,\n initialClientOffset: payload.clientOffset,\n clientOffset: payload.clientOffset\n };\n\n case HOVER:\n if (areCoordsEqual(state.clientOffset, payload.clientOffset)) {\n return state;\n }\n\n return _objectSpread(_objectSpread({}, state), {}, {\n clientOffset: payload.clientOffset\n });\n\n case END_DRAG:\n case DROP:\n return initialState;\n\n default:\n return state;\n }\n}","export var ADD_SOURCE = 'dnd-core/ADD_SOURCE';\nexport var ADD_TARGET = 'dnd-core/ADD_TARGET';\nexport var REMOVE_SOURCE = 'dnd-core/REMOVE_SOURCE';\nexport var REMOVE_TARGET = 'dnd-core/REMOVE_TARGET';\nexport function addSource(sourceId) {\n return {\n type: ADD_SOURCE,\n payload: {\n sourceId: sourceId\n }\n };\n}\nexport function addTarget(targetId) {\n return {\n type: ADD_TARGET,\n payload: {\n targetId: targetId\n }\n };\n}\nexport function removeSource(sourceId) {\n return {\n type: REMOVE_SOURCE,\n payload: {\n sourceId: sourceId\n }\n };\n}\nexport function removeTarget(targetId) {\n return {\n type: REMOVE_TARGET,\n payload: {\n targetId: targetId\n }\n };\n}","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { BEGIN_DRAG, PUBLISH_DRAG_SOURCE, HOVER, END_DRAG, DROP } from '../actions/dragDrop';\nimport { REMOVE_TARGET } from '../actions/registry';\nimport { without } from '../utils/js_utils';\nvar initialState = {\n itemType: null,\n item: null,\n sourceId: null,\n targetIds: [],\n dropResult: null,\n didDrop: false,\n isSourcePublic: null\n};\nexport function reduce() {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;\n var action = arguments.length > 1 ? arguments[1] : undefined;\n var payload = action.payload;\n\n switch (action.type) {\n case BEGIN_DRAG:\n return _objectSpread(_objectSpread({}, state), {}, {\n itemType: payload.itemType,\n item: payload.item,\n sourceId: payload.sourceId,\n isSourcePublic: payload.isSourcePublic,\n dropResult: null,\n didDrop: false\n });\n\n case PUBLISH_DRAG_SOURCE:\n return _objectSpread(_objectSpread({}, state), {}, {\n isSourcePublic: true\n });\n\n case HOVER:\n return _objectSpread(_objectSpread({}, state), {}, {\n targetIds: payload.targetIds\n });\n\n case REMOVE_TARGET:\n if (state.targetIds.indexOf(payload.targetId) === -1) {\n return state;\n }\n\n return _objectSpread(_objectSpread({}, state), {}, {\n targetIds: without(state.targetIds, payload.targetId)\n });\n\n case DROP:\n return _objectSpread(_objectSpread({}, state), {}, {\n dropResult: payload.dropResult,\n didDrop: true,\n targetIds: []\n });\n\n case END_DRAG:\n return _objectSpread(_objectSpread({}, state), {}, {\n itemType: null,\n item: null,\n sourceId: null,\n dropResult: null,\n didDrop: false,\n isSourcePublic: null,\n targetIds: []\n });\n\n default:\n return state;\n }\n}","import { ADD_SOURCE, ADD_TARGET, REMOVE_SOURCE, REMOVE_TARGET } from '../actions/registry';\nexport function reduce() {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var action = arguments.length > 1 ? arguments[1] : undefined;\n\n switch (action.type) {\n case ADD_SOURCE:\n case ADD_TARGET:\n return state + 1;\n\n case REMOVE_SOURCE:\n case REMOVE_TARGET:\n return state - 1;\n\n default:\n return state;\n }\n}","import { intersection } from './js_utils';\nexport var NONE = [];\nexport var ALL = [];\nNONE.__IS_NONE__ = true;\nALL.__IS_ALL__ = true;\n/**\n * Determines if the given handler IDs are dirty or not.\n *\n * @param dirtyIds The set of dirty handler ids\n * @param handlerIds The set of handler ids to check\n */\n\nexport function areDirty(dirtyIds, handlerIds) {\n if (dirtyIds === NONE) {\n return false;\n }\n\n if (dirtyIds === ALL || typeof handlerIds === 'undefined') {\n return true;\n }\n\n var commonIds = intersection(handlerIds, dirtyIds);\n return commonIds.length > 0;\n}","import { BEGIN_DRAG, PUBLISH_DRAG_SOURCE, HOVER, END_DRAG, DROP } from '../actions/dragDrop';\nimport { ADD_SOURCE, ADD_TARGET, REMOVE_SOURCE, REMOVE_TARGET } from '../actions/registry';\nimport { areArraysEqual } from '../utils/equality';\nimport { NONE, ALL } from '../utils/dirtiness';\nimport { xor } from '../utils/js_utils';\nexport function reduce() {\n var _state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : NONE;\n\n var action = arguments.length > 1 ? arguments[1] : undefined;\n\n switch (action.type) {\n case HOVER:\n break;\n\n case ADD_SOURCE:\n case ADD_TARGET:\n case REMOVE_TARGET:\n case REMOVE_SOURCE:\n return NONE;\n\n case BEGIN_DRAG:\n case PUBLISH_DRAG_SOURCE:\n case END_DRAG:\n case DROP:\n default:\n return ALL;\n }\n\n var _action$payload = action.payload,\n _action$payload$targe = _action$payload.targetIds,\n targetIds = _action$payload$targe === void 0 ? [] : _action$payload$targe,\n _action$payload$prevT = _action$payload.prevTargetIds,\n prevTargetIds = _action$payload$prevT === void 0 ? [] : _action$payload$prevT;\n var result = xor(targetIds, prevTargetIds);\n var didChange = result.length > 0 || !areArraysEqual(targetIds, prevTargetIds);\n\n if (!didChange) {\n return NONE;\n } // Check the target ids at the innermost position. If they are valid, add them\n // to the result\n\n\n var prevInnermostTargetId = prevTargetIds[prevTargetIds.length - 1];\n var innermostTargetId = targetIds[targetIds.length - 1];\n\n if (prevInnermostTargetId !== innermostTargetId) {\n if (prevInnermostTargetId) {\n result.push(prevInnermostTargetId);\n }\n\n if (innermostTargetId) {\n result.push(innermostTargetId);\n }\n }\n\n return result;\n}","export function reduce() {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n return state + 1;\n}","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { reduce as dragOffset } from './dragOffset';\nimport { reduce as dragOperation } from './dragOperation';\nimport { reduce as refCount } from './refCount';\nimport { reduce as dirtyHandlerIds } from './dirtyHandlerIds';\nimport { reduce as stateId } from './stateId';\nimport { get } from '../utils/js_utils';\nexport function reduce() {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var action = arguments.length > 1 ? arguments[1] : undefined;\n return {\n dirtyHandlerIds: dirtyHandlerIds(state.dirtyHandlerIds, {\n type: action.type,\n payload: _objectSpread(_objectSpread({}, action.payload), {}, {\n prevTargetIds: get(state, 'dragOperation.targetIds', [])\n })\n }),\n dragOffset: dragOffset(state.dragOffset, action),\n refCount: refCount(state.refCount, action),\n dragOperation: dragOperation(state.dragOperation, action),\n stateId: stateId(state.stateId)\n };\n}","/**\n * Coordinate addition\n * @param a The first coordinate\n * @param b The second coordinate\n */\nexport function add(a, b) {\n return {\n x: a.x + b.x,\n y: a.y + b.y\n };\n}\n/**\n * Coordinate subtraction\n * @param a The first coordinate\n * @param b The second coordinate\n */\n\nexport function subtract(a, b) {\n return {\n x: a.x - b.x,\n y: a.y - b.y\n };\n}\n/**\n * Returns the cartesian distance of the drag source component's position, based on its position\n * at the time when the current drag operation has started, and the movement difference.\n *\n * Returns null if no item is being dragged.\n *\n * @param state The offset state to compute from\n */\n\nexport function getSourceClientOffset(state) {\n var clientOffset = state.clientOffset,\n initialClientOffset = state.initialClientOffset,\n initialSourceClientOffset = state.initialSourceClientOffset;\n\n if (!clientOffset || !initialClientOffset || !initialSourceClientOffset) {\n return null;\n }\n\n return subtract(add(clientOffset, initialSourceClientOffset), initialClientOffset);\n}\n/**\n * Determines the x,y offset between the client offset and the initial client offset\n *\n * @param state The offset state to compute from\n */\n\nexport function getDifferenceFromInitialOffset(state) {\n var clientOffset = state.clientOffset,\n initialClientOffset = state.initialClientOffset;\n\n if (!clientOffset || !initialClientOffset) {\n return null;\n }\n\n return subtract(clientOffset, initialClientOffset);\n}","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { invariant } from '@react-dnd/invariant';\nimport { matchesType } from '../utils/matchesType';\nimport { getSourceClientOffset as _getSourceClientOffset, getDifferenceFromInitialOffset as _getDifferenceFromInitialOffset } from '../utils/coords';\nimport { areDirty } from '../utils/dirtiness';\nexport var DragDropMonitorImpl = /*#__PURE__*/function () {\n function DragDropMonitorImpl(store, registry) {\n _classCallCheck(this, DragDropMonitorImpl);\n\n _defineProperty(this, \"store\", void 0);\n\n _defineProperty(this, \"registry\", void 0);\n\n this.store = store;\n this.registry = registry;\n }\n\n _createClass(DragDropMonitorImpl, [{\n key: \"subscribeToStateChange\",\n value: function subscribeToStateChange(listener) {\n var _this = this;\n\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n handlerIds: undefined\n };\n var handlerIds = options.handlerIds;\n invariant(typeof listener === 'function', 'listener must be a function.');\n invariant(typeof handlerIds === 'undefined' || Array.isArray(handlerIds), 'handlerIds, when specified, must be an array of strings.');\n var prevStateId = this.store.getState().stateId;\n\n var handleChange = function handleChange() {\n var state = _this.store.getState();\n\n var currentStateId = state.stateId;\n\n try {\n var canSkipListener = currentStateId === prevStateId || currentStateId === prevStateId + 1 && !areDirty(state.dirtyHandlerIds, handlerIds);\n\n if (!canSkipListener) {\n listener();\n }\n } finally {\n prevStateId = currentStateId;\n }\n };\n\n return this.store.subscribe(handleChange);\n }\n }, {\n key: \"subscribeToOffsetChange\",\n value: function subscribeToOffsetChange(listener) {\n var _this2 = this;\n\n invariant(typeof listener === 'function', 'listener must be a function.');\n var previousState = this.store.getState().dragOffset;\n\n var handleChange = function handleChange() {\n var nextState = _this2.store.getState().dragOffset;\n\n if (nextState === previousState) {\n return;\n }\n\n previousState = nextState;\n listener();\n };\n\n return this.store.subscribe(handleChange);\n }\n }, {\n key: \"canDragSource\",\n value: function canDragSource(sourceId) {\n if (!sourceId) {\n return false;\n }\n\n var source = this.registry.getSource(sourceId);\n invariant(source, \"Expected to find a valid source. sourceId=\".concat(sourceId));\n\n if (this.isDragging()) {\n return false;\n }\n\n return source.canDrag(this, sourceId);\n }\n }, {\n key: \"canDropOnTarget\",\n value: function canDropOnTarget(targetId) {\n // undefined on initial render\n if (!targetId) {\n return false;\n }\n\n var target = this.registry.getTarget(targetId);\n invariant(target, \"Expected to find a valid target. targetId=\".concat(targetId));\n\n if (!this.isDragging() || this.didDrop()) {\n return false;\n }\n\n var targetType = this.registry.getTargetType(targetId);\n var draggedItemType = this.getItemType();\n return matchesType(targetType, draggedItemType) && target.canDrop(this, targetId);\n }\n }, {\n key: \"isDragging\",\n value: function isDragging() {\n return Boolean(this.getItemType());\n }\n }, {\n key: \"isDraggingSource\",\n value: function isDraggingSource(sourceId) {\n // undefined on initial render\n if (!sourceId) {\n return false;\n }\n\n var source = this.registry.getSource(sourceId, true);\n invariant(source, \"Expected to find a valid source. sourceId=\".concat(sourceId));\n\n if (!this.isDragging() || !this.isSourcePublic()) {\n return false;\n }\n\n var sourceType = this.registry.getSourceType(sourceId);\n var draggedItemType = this.getItemType();\n\n if (sourceType !== draggedItemType) {\n return false;\n }\n\n return source.isDragging(this, sourceId);\n }\n }, {\n key: \"isOverTarget\",\n value: function isOverTarget(targetId) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n shallow: false\n };\n\n // undefined on initial render\n if (!targetId) {\n return false;\n }\n\n var shallow = options.shallow;\n\n if (!this.isDragging()) {\n return false;\n }\n\n var targetType = this.registry.getTargetType(targetId);\n var draggedItemType = this.getItemType();\n\n if (draggedItemType && !matchesType(targetType, draggedItemType)) {\n return false;\n }\n\n var targetIds = this.getTargetIds();\n\n if (!targetIds.length) {\n return false;\n }\n\n var index = targetIds.indexOf(targetId);\n\n if (shallow) {\n return index === targetIds.length - 1;\n } else {\n return index > -1;\n }\n }\n }, {\n key: \"getItemType\",\n value: function getItemType() {\n return this.store.getState().dragOperation.itemType;\n }\n }, {\n key: \"getItem\",\n value: function getItem() {\n return this.store.getState().dragOperation.item;\n }\n }, {\n key: \"getSourceId\",\n value: function getSourceId() {\n return this.store.getState().dragOperation.sourceId;\n }\n }, {\n key: \"getTargetIds\",\n value: function getTargetIds() {\n return this.store.getState().dragOperation.targetIds;\n }\n }, {\n key: \"getDropResult\",\n value: function getDropResult() {\n return this.store.getState().dragOperation.dropResult;\n }\n }, {\n key: \"didDrop\",\n value: function didDrop() {\n return this.store.getState().dragOperation.didDrop;\n }\n }, {\n key: \"isSourcePublic\",\n value: function isSourcePublic() {\n return Boolean(this.store.getState().dragOperation.isSourcePublic);\n }\n }, {\n key: \"getInitialClientOffset\",\n value: function getInitialClientOffset() {\n return this.store.getState().dragOffset.initialClientOffset;\n }\n }, {\n key: \"getInitialSourceClientOffset\",\n value: function getInitialSourceClientOffset() {\n return this.store.getState().dragOffset.initialSourceClientOffset;\n }\n }, {\n key: \"getClientOffset\",\n value: function getClientOffset() {\n return this.store.getState().dragOffset.clientOffset;\n }\n }, {\n key: \"getSourceClientOffset\",\n value: function getSourceClientOffset() {\n return _getSourceClientOffset(this.store.getState().dragOffset);\n }\n }, {\n key: \"getDifferenceFromInitialOffset\",\n value: function getDifferenceFromInitialOffset() {\n return _getDifferenceFromInitialOffset(this.store.getState().dragOffset);\n }\n }]);\n\n return DragDropMonitorImpl;\n}();","var nextUniqueId = 0;\nexport function getNextUniqueId() {\n return nextUniqueId++;\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nimport { invariant } from '@react-dnd/invariant';\nexport function validateSourceContract(source) {\n invariant(typeof source.canDrag === 'function', 'Expected canDrag to be a function.');\n invariant(typeof source.beginDrag === 'function', 'Expected beginDrag to be a function.');\n invariant(typeof source.endDrag === 'function', 'Expected endDrag to be a function.');\n}\nexport function validateTargetContract(target) {\n invariant(typeof target.canDrop === 'function', 'Expected canDrop to be a function.');\n invariant(typeof target.hover === 'function', 'Expected hover to be a function.');\n invariant(typeof target.drop === 'function', 'Expected beginDrag to be a function.');\n}\nexport function validateType(type, allowArray) {\n if (allowArray && Array.isArray(type)) {\n type.forEach(function (t) {\n return validateType(t, false);\n });\n return;\n }\n\n invariant(typeof type === 'string' || _typeof(type) === 'symbol', allowArray ? 'Type can only be a string, a symbol, or an array of either.' : 'Type can only be a string or a symbol.');\n}","// Safari 6 and 6.1 for desktop, iPad, and iPhone are the only browsers that\n// have WebKitMutationObserver but not un-prefixed MutationObserver.\n// Must use `global` or `self` instead of `window` to work in both frames and web\n// workers. `global` is a provision of Browserify, Mr, Mrs, or Mop.\n/* globals self */ const scope = typeof global !== 'undefined' ? global : self;\nconst BrowserMutationObserver = scope.MutationObserver || scope.WebKitMutationObserver;\nexport function makeRequestCallFromTimer(callback) {\n return function requestCall() {\n // We dispatch a timeout with a specified delay of 0 for engines that\n // can reliably accommodate that request. This will usually be snapped\n // to a 4 milisecond delay, but once we're flushing, there's no delay\n // between events.\n const timeoutHandle = setTimeout(handleTimer, 0);\n // However, since this timer gets frequently dropped in Firefox\n // workers, we enlist an interval handle that will try to fire\n // an event 20 times per second until it succeeds.\n const intervalHandle = setInterval(handleTimer, 50);\n function handleTimer() {\n // Whichever timer succeeds will cancel both timers and\n // execute the callback.\n clearTimeout(timeoutHandle);\n clearInterval(intervalHandle);\n callback();\n }\n };\n}\n// To request a high priority event, we induce a mutation observer by toggling\n// the text of a text node between \"1\" and \"-1\".\nexport function makeRequestCallFromMutationObserver(callback) {\n let toggle = 1;\n const observer = new BrowserMutationObserver(callback);\n const node = document.createTextNode('');\n observer.observe(node, {\n characterData: true\n });\n return function requestCall() {\n toggle = -toggle;\n node.data = toggle;\n };\n}\nexport const makeRequestCall = typeof BrowserMutationObserver === 'function' ? // reliably everywhere they are implemented.\n// They are implemented in all modern browsers.\n//\n// - Android 4-4.3\n// - Chrome 26-34\n// - Firefox 14-29\n// - Internet Explorer 11\n// - iPad Safari 6-7.1\n// - iPhone Safari 7-7.1\n// - Safari 6-7\nmakeRequestCallFromMutationObserver : // task queue, are implemented in Internet Explorer 10, Safari 5.0-1, and Opera\n// 11-12, and in web workers in many engines.\n// Although message channels yield to any queued rendering and IO tasks, they\n// would be better than imposing the 4ms delay of timers.\n// However, they do not work reliably in Internet Explorer or Safari.\n// Internet Explorer 10 is the only browser that has setImmediate but does\n// not have MutationObservers.\n// Although setImmediate yields to the browser's renderer, it would be\n// preferrable to falling back to setTimeout since it does not have\n// the minimum 4ms penalty.\n// Unfortunately there appears to be a bug in Internet Explorer 10 Mobile (and\n// Desktop to a lesser extent) that renders both setImmediate and\n// MessageChannel useless for the purposes of ASAP.\n// https://github.com/kriskowal/q/issues/396\n// Timers are implemented universally.\n// We fall back to timers in workers in most engines, and in foreground\n// contexts in the following browsers.\n// However, note that even this simple case requires nuances to operate in a\n// broad spectrum of browsers.\n//\n// - Firefox 3-13\n// - Internet Explorer 6-9\n// - iPad Safari 4.3\n// - Lynx 2.8.7\nmakeRequestCallFromTimer;\n\n//# sourceMappingURL=makeRequestCall.mjs.map","import { makeRequestCall, makeRequestCallFromTimer } from './makeRequestCall.mjs';\nexport class AsapQueue {\n // Use the fastest means possible to execute a task in its own turn, with\n // priority over other events including IO, animation, reflow, and redraw\n // events in browsers.\n //\n // An exception thrown by a task will permanently interrupt the processing of\n // subsequent tasks. The higher level `asap` function ensures that if an\n // exception is thrown by a task, that the task queue will continue flushing as\n // soon as possible, but if you use `rawAsap` directly, you are responsible to\n // either ensure that no exceptions are thrown from your task, or to manually\n // call `rawAsap.requestFlush` if an exception is thrown.\n enqueueTask(task) {\n const { queue: q , requestFlush } = this;\n if (!q.length) {\n requestFlush();\n this.flushing = true;\n }\n // Equivalent to push, but avoids a function call.\n q[q.length] = task;\n }\n constructor(){\n this.queue = [];\n // We queue errors to ensure they are thrown in right order (FIFO).\n // Array-as-queue is good enough here, since we are just dealing with exceptions.\n this.pendingErrors = [];\n // Once a flush has been requested, no further calls to `requestFlush` are\n // necessary until the next `flush` completes.\n // @ts-ignore\n this.flushing = false;\n // The position of the next task to execute in the task queue. This is\n // preserved between calls to `flush` so that it can be resumed if\n // a task throws an exception.\n this.index = 0;\n // If a task schedules additional tasks recursively, the task queue can grow\n // unbounded. To prevent memory exhaustion, the task queue will periodically\n // truncate already-completed tasks.\n this.capacity = 1024;\n // The flush function processes all tasks that have been scheduled with\n // `rawAsap` unless and until one of those tasks throws an exception.\n // If a task throws an exception, `flush` ensures that its state will remain\n // consistent and will resume where it left off when called again.\n // However, `flush` does not make any arrangements to be called again if an\n // exception is thrown.\n this.flush = ()=>{\n const { queue: q } = this;\n while(this.index < q.length){\n const currentIndex = this.index;\n // Advance the index before calling the task. This ensures that we will\n // begin flushing on the next task the task throws an error.\n this.index++;\n q[currentIndex].call();\n // Prevent leaking memory for long chains of recursive calls to `asap`.\n // If we call `asap` within tasks scheduled by `asap`, the queue will\n // grow, but to avoid an O(n) walk for every task we execute, we don't\n // shift tasks off the queue after they have been executed.\n // Instead, we periodically shift 1024 tasks off the queue.\n if (this.index > this.capacity) {\n // Manually shift all values starting at the index back to the\n // beginning of the queue.\n for(let scan = 0, newLength = q.length - this.index; scan < newLength; scan++){\n q[scan] = q[scan + this.index];\n }\n q.length -= this.index;\n this.index = 0;\n }\n }\n q.length = 0;\n this.index = 0;\n this.flushing = false;\n };\n // In a web browser, exceptions are not fatal. However, to avoid\n // slowing down the queue of pending tasks, we rethrow the error in a\n // lower priority turn.\n this.registerPendingError = (err)=>{\n this.pendingErrors.push(err);\n this.requestErrorThrow();\n };\n // `requestFlush` requests that the high priority event queue be flushed as\n // soon as possible.\n // This is useful to prevent an error thrown in a task from stalling the event\n // queue if the exception handled by Node.js’s\n // `process.on(\"uncaughtException\")` or by a domain.\n // `requestFlush` is implemented using a strategy based on data collected from\n // every available SauceLabs Selenium web driver worker at time of writing.\n // https://docs.google.com/spreadsheets/d/1mG-5UYGup5qxGdEMWkhP6BWCz053NUb2E1QoUTU16uA/edit#gid=783724593\n this.requestFlush = makeRequestCall(this.flush);\n this.requestErrorThrow = makeRequestCallFromTimer(()=>{\n // Throw first error\n if (this.pendingErrors.length) {\n throw this.pendingErrors.shift();\n }\n });\n }\n} // The message channel technique was discovered by Malte Ubl and was the\n // original foundation for this library.\n // http://www.nonblocking.io/2011/06/windownexttick.html\n // Safari 6.0.5 (at least) intermittently fails to create message ports on a\n // page's first load. Thankfully, this version of Safari supports\n // MutationObservers, so we don't need to fall back in that case.\n // function makeRequestCallFromMessageChannel(callback) {\n // var channel = new MessageChannel();\n // channel.port1.onmessage = callback;\n // return function requestCall() {\n // channel.port2.postMessage(0);\n // };\n // }\n // For reasons explained above, we are also unable to use `setImmediate`\n // under any circumstances.\n // Even if we were, there is another bug in Internet Explorer 10.\n // It is not sufficient to assign `setImmediate` to `requestFlush` because\n // `setImmediate` must be called *by name* and therefore must be wrapped in a\n // closure.\n // Never forget.\n // function makeRequestCallFromSetImmediate(callback) {\n // return function requestCall() {\n // setImmediate(callback);\n // };\n // }\n // Safari 6.0 has a problem where timers will get lost while the user is\n // scrolling. This problem does not impact ASAP because Safari 6.0 supports\n // mutation observers, so that implementation is used instead.\n // However, if we ever elect to use timers in Safari, the prevalent work-around\n // is to add a scroll event listener that calls for a flush.\n // `setTimeout` does not call the passed callback if the delay is less than\n // approximately 7 in web workers in Firefox 8 through 18, and sometimes not\n // even then.\n // This is for `asap.js` only.\n // Its name will be periodically randomized to break any code that depends on\n // // its existence.\n // rawAsap.makeRequestCallFromTimer = makeRequestCallFromTimer\n // ASAP was originally a nextTick shim included in Q. This was factored out\n // into this ASAP package. It was later adapted to RSVP which made further\n // amendments. These decisions, particularly to marginalize MessageChannel and\n // to capture the MutationObserver implementation in a closure, were integrated\n // back into ASAP proper.\n // https://github.com/tildeio/rsvp.js/blob/cddf7232546a9cf858524b75cde6f9edf72620a7/lib/rsvp/asap.js\n\n//# sourceMappingURL=AsapQueue.mjs.map","// `call`, just like a function.\nexport class RawTask {\n call() {\n try {\n this.task && this.task();\n } catch (error) {\n this.onError(error);\n } finally{\n this.task = null;\n this.release(this);\n }\n }\n constructor(onError, release){\n this.onError = onError;\n this.release = release;\n this.task = null;\n }\n}\n\n//# sourceMappingURL=RawTask.mjs.map","import { RawTask } from './RawTask.mjs';\nexport class TaskFactory {\n create(task) {\n const tasks = this.freeTasks;\n const t1 = tasks.length ? tasks.pop() : new RawTask(this.onError, (t)=>tasks[tasks.length] = t\n );\n t1.task = task;\n return t1;\n }\n constructor(onError){\n this.onError = onError;\n this.freeTasks = [];\n }\n}\n\n//# sourceMappingURL=TaskFactory.mjs.map","import { AsapQueue } from './AsapQueue.mjs';\nimport { TaskFactory } from './TaskFactory.mjs';\nconst asapQueue = new AsapQueue();\nconst taskFactory = new TaskFactory(asapQueue.registerPendingError);\n/**\n * Calls a task as soon as possible after returning, in its own event, with priority\n * over other events like animation, reflow, and repaint. An error thrown from an\n * event will not interrupt, nor even substantially slow down the processing of\n * other events, but will be rather postponed to a lower priority event.\n * @param {{call}} task A callable object, typically a function that takes no\n * arguments.\n */ export function asap(task) {\n asapQueue.enqueueTask(taskFactory.create(task));\n}\n\n//# sourceMappingURL=asap.mjs.map","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport { invariant } from '@react-dnd/invariant';\nimport { addSource as _addSource, addTarget as _addTarget, removeSource as _removeSource, removeTarget as _removeTarget } from '../actions/registry';\nimport { getNextUniqueId } from '../utils/getNextUniqueId';\nimport { HandlerRole } from '../interfaces';\nimport { validateSourceContract, validateTargetContract, validateType } from '../contracts';\nimport { asap } from '@react-dnd/asap';\n\nfunction getNextHandlerId(role) {\n var id = getNextUniqueId().toString();\n\n switch (role) {\n case HandlerRole.SOURCE:\n return \"S\".concat(id);\n\n case HandlerRole.TARGET:\n return \"T\".concat(id);\n\n default:\n throw new Error(\"Unknown Handler Role: \".concat(role));\n }\n}\n\nfunction parseRoleFromHandlerId(handlerId) {\n switch (handlerId[0]) {\n case 'S':\n return HandlerRole.SOURCE;\n\n case 'T':\n return HandlerRole.TARGET;\n\n default:\n invariant(false, \"Cannot parse handler ID: \".concat(handlerId));\n }\n}\n\nfunction mapContainsValue(map, searchValue) {\n var entries = map.entries();\n var isDone = false;\n\n do {\n var _entries$next = entries.next(),\n done = _entries$next.done,\n _entries$next$value = _slicedToArray(_entries$next.value, 2),\n value = _entries$next$value[1];\n\n if (value === searchValue) {\n return true;\n }\n\n isDone = !!done;\n } while (!isDone);\n\n return false;\n}\n\nexport var HandlerRegistryImpl = /*#__PURE__*/function () {\n function HandlerRegistryImpl(store) {\n _classCallCheck(this, HandlerRegistryImpl);\n\n _defineProperty(this, \"types\", new Map());\n\n _defineProperty(this, \"dragSources\", new Map());\n\n _defineProperty(this, \"dropTargets\", new Map());\n\n _defineProperty(this, \"pinnedSourceId\", null);\n\n _defineProperty(this, \"pinnedSource\", null);\n\n _defineProperty(this, \"store\", void 0);\n\n this.store = store;\n }\n\n _createClass(HandlerRegistryImpl, [{\n key: \"addSource\",\n value: function addSource(type, source) {\n validateType(type);\n validateSourceContract(source);\n var sourceId = this.addHandler(HandlerRole.SOURCE, type, source);\n this.store.dispatch(_addSource(sourceId));\n return sourceId;\n }\n }, {\n key: \"addTarget\",\n value: function addTarget(type, target) {\n validateType(type, true);\n validateTargetContract(target);\n var targetId = this.addHandler(HandlerRole.TARGET, type, target);\n this.store.dispatch(_addTarget(targetId));\n return targetId;\n }\n }, {\n key: \"containsHandler\",\n value: function containsHandler(handler) {\n return mapContainsValue(this.dragSources, handler) || mapContainsValue(this.dropTargets, handler);\n }\n }, {\n key: \"getSource\",\n value: function getSource(sourceId) {\n var includePinned = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n invariant(this.isSourceId(sourceId), 'Expected a valid source ID.');\n var isPinned = includePinned && sourceId === this.pinnedSourceId;\n var source = isPinned ? this.pinnedSource : this.dragSources.get(sourceId);\n return source;\n }\n }, {\n key: \"getTarget\",\n value: function getTarget(targetId) {\n invariant(this.isTargetId(targetId), 'Expected a valid target ID.');\n return this.dropTargets.get(targetId);\n }\n }, {\n key: \"getSourceType\",\n value: function getSourceType(sourceId) {\n invariant(this.isSourceId(sourceId), 'Expected a valid source ID.');\n return this.types.get(sourceId);\n }\n }, {\n key: \"getTargetType\",\n value: function getTargetType(targetId) {\n invariant(this.isTargetId(targetId), 'Expected a valid target ID.');\n return this.types.get(targetId);\n }\n }, {\n key: \"isSourceId\",\n value: function isSourceId(handlerId) {\n var role = parseRoleFromHandlerId(handlerId);\n return role === HandlerRole.SOURCE;\n }\n }, {\n key: \"isTargetId\",\n value: function isTargetId(handlerId) {\n var role = parseRoleFromHandlerId(handlerId);\n return role === HandlerRole.TARGET;\n }\n }, {\n key: \"removeSource\",\n value: function removeSource(sourceId) {\n var _this = this;\n\n invariant(this.getSource(sourceId), 'Expected an existing source.');\n this.store.dispatch(_removeSource(sourceId));\n asap(function () {\n _this.dragSources.delete(sourceId);\n\n _this.types.delete(sourceId);\n });\n }\n }, {\n key: \"removeTarget\",\n value: function removeTarget(targetId) {\n invariant(this.getTarget(targetId), 'Expected an existing target.');\n this.store.dispatch(_removeTarget(targetId));\n this.dropTargets.delete(targetId);\n this.types.delete(targetId);\n }\n }, {\n key: \"pinSource\",\n value: function pinSource(sourceId) {\n var source = this.getSource(sourceId);\n invariant(source, 'Expected an existing source.');\n this.pinnedSourceId = sourceId;\n this.pinnedSource = source;\n }\n }, {\n key: \"unpinSource\",\n value: function unpinSource() {\n invariant(this.pinnedSource, 'No source is pinned at the time.');\n this.pinnedSourceId = null;\n this.pinnedSource = null;\n }\n }, {\n key: \"addHandler\",\n value: function addHandler(role, type, handler) {\n var id = getNextHandlerId(role);\n this.types.set(id, type);\n\n if (role === HandlerRole.SOURCE) {\n this.dragSources.set(id, handler);\n } else if (role === HandlerRole.TARGET) {\n this.dropTargets.set(id, handler);\n }\n\n return id;\n }\n }]);\n\n return HandlerRegistryImpl;\n}();","import { DragDropManagerImpl } from './classes/DragDropManagerImpl';\nimport { createStore } from 'redux';\nimport { reduce } from './reducers';\nimport { DragDropMonitorImpl } from './classes/DragDropMonitorImpl';\nimport { HandlerRegistryImpl } from './classes/HandlerRegistryImpl';\nexport function createDragDropManager(backendFactory) {\n var globalContext = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;\n var backendOptions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var debugMode = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n var store = makeStoreInstance(debugMode);\n var monitor = new DragDropMonitorImpl(store, new HandlerRegistryImpl(store));\n var manager = new DragDropManagerImpl(store, monitor);\n var backend = backendFactory(manager, globalContext, backendOptions);\n manager.receiveBackend(backend);\n return manager;\n}\n\nfunction makeStoreInstance(debugMode) {\n // TODO: if we ever make a react-native version of this,\n // we'll need to consider how to pull off dev-tooling\n var reduxDevTools = typeof window !== 'undefined' && window.__REDUX_DEVTOOLS_EXTENSION__;\n return createStore(reduce, debugMode && reduxDevTools && reduxDevTools({\n name: 'dnd-core',\n instanceId: 'dnd-core'\n }));\n}","var _excluded = [\"children\"];\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { useEffect, memo } from 'react';\nimport { createDragDropManager } from 'dnd-core';\nimport { DndContext } from './DndContext';\nvar refCount = 0;\nvar INSTANCE_SYM = Symbol.for('__REACT_DND_CONTEXT_INSTANCE__');\n/**\n * A React component that provides the React-DnD context\n */\n\nexport var DndProvider = memo(function DndProvider(_ref) {\n var children = _ref.children,\n props = _objectWithoutProperties(_ref, _excluded);\n\n var _getDndContextValue = getDndContextValue(props),\n _getDndContextValue2 = _slicedToArray(_getDndContextValue, 2),\n manager = _getDndContextValue2[0],\n isGlobalInstance = _getDndContextValue2[1]; // memoized from props\n\n /**\n * If the global context was used to store the DND context\n * then where theres no more references to it we should\n * clean it up to avoid memory leaks\n */\n\n\n useEffect(function () {\n if (isGlobalInstance) {\n var context = getGlobalContext();\n ++refCount;\n return function () {\n if (--refCount === 0) {\n context[INSTANCE_SYM] = null;\n }\n };\n }\n }, []);\n return _jsx(DndContext.Provider, Object.assign({\n value: manager\n }, {\n children: children\n }), void 0);\n});\n\nfunction getDndContextValue(props) {\n if ('manager' in props) {\n var _manager = {\n dragDropManager: props.manager\n };\n return [_manager, false];\n }\n\n var manager = createSingletonDndContext(props.backend, props.context, props.options, props.debugMode);\n var isGlobalInstance = !props.context;\n return [manager, isGlobalInstance];\n}\n\nfunction createSingletonDndContext(backend) {\n var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : getGlobalContext();\n var options = arguments.length > 2 ? arguments[2] : undefined;\n var debugMode = arguments.length > 3 ? arguments[3] : undefined;\n var ctx = context;\n\n if (!ctx[INSTANCE_SYM]) {\n ctx[INSTANCE_SYM] = {\n dragDropManager: createDragDropManager(backend, context, options, debugMode)\n };\n }\n\n return ctx[INSTANCE_SYM];\n}\n\nfunction getGlobalContext() {\n return typeof global !== 'undefined' ? global : window;\n}","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { invariant } from '@react-dnd/invariant';\nvar isCallingCanDrag = false;\nvar isCallingIsDragging = false;\nexport var DragSourceMonitorImpl = /*#__PURE__*/function () {\n function DragSourceMonitorImpl(manager) {\n _classCallCheck(this, DragSourceMonitorImpl);\n\n _defineProperty(this, \"internalMonitor\", void 0);\n\n _defineProperty(this, \"sourceId\", null);\n\n this.internalMonitor = manager.getMonitor();\n }\n\n _createClass(DragSourceMonitorImpl, [{\n key: \"receiveHandlerId\",\n value: function receiveHandlerId(sourceId) {\n this.sourceId = sourceId;\n }\n }, {\n key: \"getHandlerId\",\n value: function getHandlerId() {\n return this.sourceId;\n }\n }, {\n key: \"canDrag\",\n value: function canDrag() {\n invariant(!isCallingCanDrag, 'You may not call monitor.canDrag() inside your canDrag() implementation. ' + 'Read more: http://react-dnd.github.io/react-dnd/docs/api/drag-source-monitor');\n\n try {\n isCallingCanDrag = true;\n return this.internalMonitor.canDragSource(this.sourceId);\n } finally {\n isCallingCanDrag = false;\n }\n }\n }, {\n key: \"isDragging\",\n value: function isDragging() {\n if (!this.sourceId) {\n return false;\n }\n\n invariant(!isCallingIsDragging, 'You may not call monitor.isDragging() inside your isDragging() implementation. ' + 'Read more: http://react-dnd.github.io/react-dnd/docs/api/drag-source-monitor');\n\n try {\n isCallingIsDragging = true;\n return this.internalMonitor.isDraggingSource(this.sourceId);\n } finally {\n isCallingIsDragging = false;\n }\n }\n }, {\n key: \"subscribeToStateChange\",\n value: function subscribeToStateChange(listener, options) {\n return this.internalMonitor.subscribeToStateChange(listener, options);\n }\n }, {\n key: \"isDraggingSource\",\n value: function isDraggingSource(sourceId) {\n return this.internalMonitor.isDraggingSource(sourceId);\n }\n }, {\n key: \"isOverTarget\",\n value: function isOverTarget(targetId, options) {\n return this.internalMonitor.isOverTarget(targetId, options);\n }\n }, {\n key: \"getTargetIds\",\n value: function getTargetIds() {\n return this.internalMonitor.getTargetIds();\n }\n }, {\n key: \"isSourcePublic\",\n value: function isSourcePublic() {\n return this.internalMonitor.isSourcePublic();\n }\n }, {\n key: \"getSourceId\",\n value: function getSourceId() {\n return this.internalMonitor.getSourceId();\n }\n }, {\n key: \"subscribeToOffsetChange\",\n value: function subscribeToOffsetChange(listener) {\n return this.internalMonitor.subscribeToOffsetChange(listener);\n }\n }, {\n key: \"canDragSource\",\n value: function canDragSource(sourceId) {\n return this.internalMonitor.canDragSource(sourceId);\n }\n }, {\n key: \"canDropOnTarget\",\n value: function canDropOnTarget(targetId) {\n return this.internalMonitor.canDropOnTarget(targetId);\n }\n }, {\n key: \"getItemType\",\n value: function getItemType() {\n return this.internalMonitor.getItemType();\n }\n }, {\n key: \"getItem\",\n value: function getItem() {\n return this.internalMonitor.getItem();\n }\n }, {\n key: \"getDropResult\",\n value: function getDropResult() {\n return this.internalMonitor.getDropResult();\n }\n }, {\n key: \"didDrop\",\n value: function didDrop() {\n return this.internalMonitor.didDrop();\n }\n }, {\n key: \"getInitialClientOffset\",\n value: function getInitialClientOffset() {\n return this.internalMonitor.getInitialClientOffset();\n }\n }, {\n key: \"getInitialSourceClientOffset\",\n value: function getInitialSourceClientOffset() {\n return this.internalMonitor.getInitialSourceClientOffset();\n }\n }, {\n key: \"getSourceClientOffset\",\n value: function getSourceClientOffset() {\n return this.internalMonitor.getSourceClientOffset();\n }\n }, {\n key: \"getClientOffset\",\n value: function getClientOffset() {\n return this.internalMonitor.getClientOffset();\n }\n }, {\n key: \"getDifferenceFromInitialOffset\",\n value: function getDifferenceFromInitialOffset() {\n return this.internalMonitor.getDifferenceFromInitialOffset();\n }\n }]);\n\n return DragSourceMonitorImpl;\n}();","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { invariant } from '@react-dnd/invariant';\nvar isCallingCanDrop = false;\nexport var DropTargetMonitorImpl = /*#__PURE__*/function () {\n function DropTargetMonitorImpl(manager) {\n _classCallCheck(this, DropTargetMonitorImpl);\n\n _defineProperty(this, \"internalMonitor\", void 0);\n\n _defineProperty(this, \"targetId\", null);\n\n this.internalMonitor = manager.getMonitor();\n }\n\n _createClass(DropTargetMonitorImpl, [{\n key: \"receiveHandlerId\",\n value: function receiveHandlerId(targetId) {\n this.targetId = targetId;\n }\n }, {\n key: \"getHandlerId\",\n value: function getHandlerId() {\n return this.targetId;\n }\n }, {\n key: \"subscribeToStateChange\",\n value: function subscribeToStateChange(listener, options) {\n return this.internalMonitor.subscribeToStateChange(listener, options);\n }\n }, {\n key: \"canDrop\",\n value: function canDrop() {\n // Cut out early if the target id has not been set. This should prevent errors\n // where the user has an older version of dnd-core like in\n // https://github.com/react-dnd/react-dnd/issues/1310\n if (!this.targetId) {\n return false;\n }\n\n invariant(!isCallingCanDrop, 'You may not call monitor.canDrop() inside your canDrop() implementation. ' + 'Read more: http://react-dnd.github.io/react-dnd/docs/api/drop-target-monitor');\n\n try {\n isCallingCanDrop = true;\n return this.internalMonitor.canDropOnTarget(this.targetId);\n } finally {\n isCallingCanDrop = false;\n }\n }\n }, {\n key: \"isOver\",\n value: function isOver(options) {\n if (!this.targetId) {\n return false;\n }\n\n return this.internalMonitor.isOverTarget(this.targetId, options);\n }\n }, {\n key: \"getItemType\",\n value: function getItemType() {\n return this.internalMonitor.getItemType();\n }\n }, {\n key: \"getItem\",\n value: function getItem() {\n return this.internalMonitor.getItem();\n }\n }, {\n key: \"getDropResult\",\n value: function getDropResult() {\n return this.internalMonitor.getDropResult();\n }\n }, {\n key: \"didDrop\",\n value: function didDrop() {\n return this.internalMonitor.didDrop();\n }\n }, {\n key: \"getInitialClientOffset\",\n value: function getInitialClientOffset() {\n return this.internalMonitor.getInitialClientOffset();\n }\n }, {\n key: \"getInitialSourceClientOffset\",\n value: function getInitialSourceClientOffset() {\n return this.internalMonitor.getInitialSourceClientOffset();\n }\n }, {\n key: \"getSourceClientOffset\",\n value: function getSourceClientOffset() {\n return this.internalMonitor.getSourceClientOffset();\n }\n }, {\n key: \"getClientOffset\",\n value: function getClientOffset() {\n return this.internalMonitor.getClientOffset();\n }\n }, {\n key: \"getDifferenceFromInitialOffset\",\n value: function getDifferenceFromInitialOffset() {\n return this.internalMonitor.getDifferenceFromInitialOffset();\n }\n }]);\n\n return DropTargetMonitorImpl;\n}();","import { invariant } from '@react-dnd/invariant';\nimport { cloneElement, isValidElement } from 'react';\n\nfunction throwIfCompositeComponentElement(element) {\n // Custom components can no longer be wrapped directly in React DnD 2.0\n // so that we don't need to depend on findDOMNode() from react-dom.\n if (typeof element.type === 'string') {\n return;\n }\n\n var displayName = element.type.displayName || element.type.name || 'the component';\n throw new Error('Only native element nodes can now be passed to React DnD connectors.' + \"You can either wrap \".concat(displayName, \" into a <div>, or turn it into a \") + 'drag source or a drop target itself.');\n}\n\nfunction wrapHookToRecognizeElement(hook) {\n return function () {\n var elementOrNode = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n // When passed a node, call the hook straight away.\n if (!isValidElement(elementOrNode)) {\n var node = elementOrNode;\n hook(node, options); // return the node so it can be chained (e.g. when within callback refs\n // <div ref={node => connectDragSource(connectDropTarget(node))}/>\n\n return node;\n } // If passed a ReactElement, clone it and attach this function as a ref.\n // This helps us achieve a neat API where user doesn't even know that refs\n // are being used under the hood.\n\n\n var element = elementOrNode;\n throwIfCompositeComponentElement(element); // When no options are passed, use the hook directly\n\n var ref = options ? function (node) {\n return hook(node, options);\n } : hook;\n return cloneWithRef(element, ref);\n };\n}\n\nexport function wrapConnectorHooks(hooks) {\n var wrappedHooks = {};\n Object.keys(hooks).forEach(function (key) {\n var hook = hooks[key]; // ref objects should be passed straight through without wrapping\n\n if (key.endsWith('Ref')) {\n wrappedHooks[key] = hooks[key];\n } else {\n var wrappedHook = wrapHookToRecognizeElement(hook);\n\n wrappedHooks[key] = function () {\n return wrappedHook;\n };\n }\n });\n return wrappedHooks;\n}\n\nfunction setRef(ref, node) {\n if (typeof ref === 'function') {\n ref(node);\n } else {\n ref.current = node;\n }\n}\n\nfunction cloneWithRef(element, newRef) {\n var previousRef = element.ref;\n invariant(typeof previousRef !== 'string', 'Cannot connect React DnD to an element with an existing string ref. ' + 'Please convert it to use a callback ref instead, or wrap it into a <span> or <div>. ' + 'Read more: https://reactjs.org/docs/refs-and-the-dom.html#callback-refs');\n\n if (!previousRef) {\n // When there is no ref on the element, use the new ref directly\n return cloneElement(element, {\n ref: newRef\n });\n } else {\n return cloneElement(element, {\n ref: function ref(node) {\n setRef(previousRef, node);\n setRef(newRef, node);\n }\n });\n }\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nexport function isRef(obj) {\n return (// eslint-disable-next-line no-prototype-builtins\n obj !== null && _typeof(obj) === 'object' && Object.prototype.hasOwnProperty.call(obj, 'current')\n );\n}","function shallowEqual(objA, objB, compare, compareContext) {\n var compareResult = compare ? compare.call(compareContext, objA, objB) : void 0;\n\n if (compareResult !== void 0) {\n return !!compareResult;\n }\n\n if (objA === objB) {\n return true;\n }\n\n if (typeof objA !== 'object' || !objA || typeof objB !== 'object' || !objB) {\n return false;\n }\n\n var keysA = Object.keys(objA);\n var keysB = Object.keys(objB);\n\n if (keysA.length !== keysB.length) {\n return false;\n }\n\n var bHasOwnProperty = Object.prototype.hasOwnProperty.bind(objB); // Test for A's keys different from B.\n\n for (var idx = 0; idx < keysA.length; idx++) {\n var key = keysA[idx];\n\n if (!bHasOwnProperty(key)) {\n return false;\n }\n\n var valueA = objA[key];\n var valueB = objB[key];\n compareResult = compare ? compare.call(compareContext, valueA, valueB, key) : void 0;\n\n if (compareResult === false || compareResult === void 0 && valueA !== valueB) {\n return false;\n }\n }\n\n return true;\n}\n\nexport { shallowEqual };\n//# sourceMappingURL=shallowequal.esm.js.map\n","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { wrapConnectorHooks } from './wrapConnectorHooks';\nimport { isRef } from './isRef';\nimport { shallowEqual } from '@react-dnd/shallowequal';\nexport var SourceConnector = /*#__PURE__*/function () {\n // The drop target may either be attached via ref or connect function\n // The drag preview may either be attached via ref or connect function\n function SourceConnector(backend) {\n var _this = this;\n\n _classCallCheck(this, SourceConnector);\n\n _defineProperty(this, \"hooks\", wrapConnectorHooks({\n dragSource: function dragSource(node, options) {\n _this.clearDragSource();\n\n _this.dragSourceOptions = options || null;\n\n if (isRef(node)) {\n _this.dragSourceRef = node;\n } else {\n _this.dragSourceNode = node;\n }\n\n _this.reconnectDragSource();\n },\n dragPreview: function dragPreview(node, options) {\n _this.clearDragPreview();\n\n _this.dragPreviewOptions = options || null;\n\n if (isRef(node)) {\n _this.dragPreviewRef = node;\n } else {\n _this.dragPreviewNode = node;\n }\n\n _this.reconnectDragPreview();\n }\n }));\n\n _defineProperty(this, \"handlerId\", null);\n\n _defineProperty(this, \"dragSourceRef\", null);\n\n _defineProperty(this, \"dragSourceNode\", void 0);\n\n _defineProperty(this, \"dragSourceOptionsInternal\", null);\n\n _defineProperty(this, \"dragSourceUnsubscribe\", void 0);\n\n _defineProperty(this, \"dragPreviewRef\", null);\n\n _defineProperty(this, \"dragPreviewNode\", void 0);\n\n _defineProperty(this, \"dragPreviewOptionsInternal\", null);\n\n _defineProperty(this, \"dragPreviewUnsubscribe\", void 0);\n\n _defineProperty(this, \"lastConnectedHandlerId\", null);\n\n _defineProperty(this, \"lastConnectedDragSource\", null);\n\n _defineProperty(this, \"lastConnectedDragSourceOptions\", null);\n\n _defineProperty(this, \"lastConnectedDragPreview\", null);\n\n _defineProperty(this, \"lastConnectedDragPreviewOptions\", null);\n\n _defineProperty(this, \"backend\", void 0);\n\n this.backend = backend;\n }\n\n _createClass(SourceConnector, [{\n key: \"receiveHandlerId\",\n value: function receiveHandlerId(newHandlerId) {\n if (this.handlerId === newHandlerId) {\n return;\n }\n\n this.handlerId = newHandlerId;\n this.reconnect();\n }\n }, {\n key: \"connectTarget\",\n get: function get() {\n return this.dragSource;\n }\n }, {\n key: \"dragSourceOptions\",\n get: function get() {\n return this.dragSourceOptionsInternal;\n },\n set: function set(options) {\n this.dragSourceOptionsInternal = options;\n }\n }, {\n key: \"dragPreviewOptions\",\n get: function get() {\n return this.dragPreviewOptionsInternal;\n },\n set: function set(options) {\n this.dragPreviewOptionsInternal = options;\n }\n }, {\n key: \"reconnect\",\n value: function reconnect() {\n this.reconnectDragSource();\n this.reconnectDragPreview();\n }\n }, {\n key: \"reconnectDragSource\",\n value: function reconnectDragSource() {\n var dragSource = this.dragSource; // if nothing has changed then don't resubscribe\n\n var didChange = this.didHandlerIdChange() || this.didConnectedDragSourceChange() || this.didDragSourceOptionsChange();\n\n if (didChange) {\n this.disconnectDragSource();\n }\n\n if (!this.handlerId) {\n return;\n }\n\n if (!dragSource) {\n this.lastConnectedDragSource = dragSource;\n return;\n }\n\n if (didChange) {\n this.lastConnectedHandlerId = this.handlerId;\n this.lastConnectedDragSource = dragSource;\n this.lastConnectedDragSourceOptions = this.dragSourceOptions;\n this.dragSourceUnsubscribe = this.backend.connectDragSource(this.handlerId, dragSource, this.dragSourceOptions);\n }\n }\n }, {\n key: \"reconnectDragPreview\",\n value: function reconnectDragPreview() {\n var dragPreview = this.dragPreview; // if nothing has changed then don't resubscribe\n\n var didChange = this.didHandlerIdChange() || this.didConnectedDragPreviewChange() || this.didDragPreviewOptionsChange();\n\n if (didChange) {\n this.disconnectDragPreview();\n }\n\n if (!this.handlerId) {\n return;\n }\n\n if (!dragPreview) {\n this.lastConnectedDragPreview = dragPreview;\n return;\n }\n\n if (didChange) {\n this.lastConnectedHandlerId = this.handlerId;\n this.lastConnectedDragPreview = dragPreview;\n this.lastConnectedDragPreviewOptions = this.dragPreviewOptions;\n this.dragPreviewUnsubscribe = this.backend.connectDragPreview(this.handlerId, dragPreview, this.dragPreviewOptions);\n }\n }\n }, {\n key: \"didHandlerIdChange\",\n value: function didHandlerIdChange() {\n return this.lastConnectedHandlerId !== this.handlerId;\n }\n }, {\n key: \"didConnectedDragSourceChange\",\n value: function didConnectedDragSourceChange() {\n return this.lastConnectedDragSource !== this.dragSource;\n }\n }, {\n key: \"didConnectedDragPreviewChange\",\n value: function didConnectedDragPreviewChange() {\n return this.lastConnectedDragPreview !== this.dragPreview;\n }\n }, {\n key: \"didDragSourceOptionsChange\",\n value: function didDragSourceOptionsChange() {\n return !shallowEqual(this.lastConnectedDragSourceOptions, this.dragSourceOptions);\n }\n }, {\n key: \"didDragPreviewOptionsChange\",\n value: function didDragPreviewOptionsChange() {\n return !shallowEqual(this.lastConnectedDragPreviewOptions, this.dragPreviewOptions);\n }\n }, {\n key: \"disconnectDragSource\",\n value: function disconnectDragSource() {\n if (this.dragSourceUnsubscribe) {\n this.dragSourceUnsubscribe();\n this.dragSourceUnsubscribe = undefined;\n }\n }\n }, {\n key: \"disconnectDragPreview\",\n value: function disconnectDragPreview() {\n if (this.dragPreviewUnsubscribe) {\n this.dragPreviewUnsubscribe();\n this.dragPreviewUnsubscribe = undefined;\n this.dragPreviewNode = null;\n this.dragPreviewRef = null;\n }\n }\n }, {\n key: \"dragSource\",\n get: function get() {\n return this.dragSourceNode || this.dragSourceRef && this.dragSourceRef.current;\n }\n }, {\n key: \"dragPreview\",\n get: function get() {\n return this.dragPreviewNode || this.dragPreviewRef && this.dragPreviewRef.current;\n }\n }, {\n key: \"clearDragSource\",\n value: function clearDragSource() {\n this.dragSourceNode = null;\n this.dragSourceRef = null;\n }\n }, {\n key: \"clearDragPreview\",\n value: function clearDragPreview() {\n this.dragPreviewNode = null;\n this.dragPreviewRef = null;\n }\n }]);\n\n return SourceConnector;\n}();","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { shallowEqual } from '@react-dnd/shallowequal';\nimport { wrapConnectorHooks } from './wrapConnectorHooks';\nimport { isRef } from './isRef';\nexport var TargetConnector = /*#__PURE__*/function () {\n // The drop target may either be attached via ref or connect function\n function TargetConnector(backend) {\n var _this = this;\n\n _classCallCheck(this, TargetConnector);\n\n _defineProperty(this, \"hooks\", wrapConnectorHooks({\n dropTarget: function dropTarget(node, options) {\n _this.clearDropTarget();\n\n _this.dropTargetOptions = options;\n\n if (isRef(node)) {\n _this.dropTargetRef = node;\n } else {\n _this.dropTargetNode = node;\n }\n\n _this.reconnect();\n }\n }));\n\n _defineProperty(this, \"handlerId\", null);\n\n _defineProperty(this, \"dropTargetRef\", null);\n\n _defineProperty(this, \"dropTargetNode\", void 0);\n\n _defineProperty(this, \"dropTargetOptionsInternal\", null);\n\n _defineProperty(this, \"unsubscribeDropTarget\", void 0);\n\n _defineProperty(this, \"lastConnectedHandlerId\", null);\n\n _defineProperty(this, \"lastConnectedDropTarget\", null);\n\n _defineProperty(this, \"lastConnectedDropTargetOptions\", null);\n\n _defineProperty(this, \"backend\", void 0);\n\n this.backend = backend;\n }\n\n _createClass(TargetConnector, [{\n key: \"connectTarget\",\n get: function get() {\n return this.dropTarget;\n }\n }, {\n key: \"reconnect\",\n value: function reconnect() {\n // if nothing has changed then don't resubscribe\n var didChange = this.didHandlerIdChange() || this.didDropTargetChange() || this.didOptionsChange();\n\n if (didChange) {\n this.disconnectDropTarget();\n }\n\n var dropTarget = this.dropTarget;\n\n if (!this.handlerId) {\n return;\n }\n\n if (!dropTarget) {\n this.lastConnectedDropTarget = dropTarget;\n return;\n }\n\n if (didChange) {\n this.lastConnectedHandlerId = this.handlerId;\n this.lastConnectedDropTarget = dropTarget;\n this.lastConnectedDropTargetOptions = this.dropTargetOptions;\n this.unsubscribeDropTarget = this.backend.connectDropTarget(this.handlerId, dropTarget, this.dropTargetOptions);\n }\n }\n }, {\n key: \"receiveHandlerId\",\n value: function receiveHandlerId(newHandlerId) {\n if (newHandlerId === this.handlerId) {\n return;\n }\n\n this.handlerId = newHandlerId;\n this.reconnect();\n }\n }, {\n key: \"dropTargetOptions\",\n get: function get() {\n return this.dropTargetOptionsInternal;\n },\n set: function set(options) {\n this.dropTargetOptionsInternal = options;\n }\n }, {\n key: \"didHandlerIdChange\",\n value: function didHandlerIdChange() {\n return this.lastConnectedHandlerId !== this.handlerId;\n }\n }, {\n key: \"didDropTargetChange\",\n value: function didDropTargetChange() {\n return this.lastConnectedDropTarget !== this.dropTarget;\n }\n }, {\n key: \"didOptionsChange\",\n value: function didOptionsChange() {\n return !shallowEqual(this.lastConnectedDropTargetOptions, this.dropTargetOptions);\n }\n }, {\n key: \"disconnectDropTarget\",\n value: function disconnectDropTarget() {\n if (this.unsubscribeDropTarget) {\n this.unsubscribeDropTarget();\n this.unsubscribeDropTarget = undefined;\n }\n }\n }, {\n key: \"dropTarget\",\n get: function get() {\n return this.dropTargetNode || this.dropTargetRef && this.dropTargetRef.current;\n }\n }, {\n key: \"clearDropTarget\",\n value: function clearDropTarget() {\n this.dropTargetRef = null;\n this.dropTargetNode = null;\n }\n }]);\n\n return TargetConnector;\n}();","export function registerTarget(type, target, manager) {\n var registry = manager.getRegistry();\n var targetId = registry.addTarget(type, target);\n return [targetId, function () {\n return registry.removeTarget(targetId);\n }];\n}\nexport function registerSource(type, source, manager) {\n var registry = manager.getRegistry();\n var sourceId = registry.addSource(type, source);\n return [sourceId, function () {\n return registry.removeSource(sourceId);\n }];\n}","import { useLayoutEffect, useEffect } from 'react'; // suppress the useLayoutEffect warning on server side.\n\nexport var useIsomorphicLayoutEffect = typeof window !== 'undefined' ? useLayoutEffect : useEffect;","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nexport var DragSourceImpl = /*#__PURE__*/function () {\n function DragSourceImpl(spec, monitor, connector) {\n _classCallCheck(this, DragSourceImpl);\n\n _defineProperty(this, \"spec\", void 0);\n\n _defineProperty(this, \"monitor\", void 0);\n\n _defineProperty(this, \"connector\", void 0);\n\n this.spec = spec;\n this.monitor = monitor;\n this.connector = connector;\n }\n\n _createClass(DragSourceImpl, [{\n key: \"beginDrag\",\n value: function beginDrag() {\n var _result;\n\n var spec = this.spec;\n var monitor = this.monitor;\n var result = null;\n\n if (_typeof(spec.item) === 'object') {\n result = spec.item;\n } else if (typeof spec.item === 'function') {\n result = spec.item(monitor);\n } else {\n result = {};\n }\n\n return (_result = result) !== null && _result !== void 0 ? _result : null;\n }\n }, {\n key: \"canDrag\",\n value: function canDrag() {\n var spec = this.spec;\n var monitor = this.monitor;\n\n if (typeof spec.canDrag === 'boolean') {\n return spec.canDrag;\n } else if (typeof spec.canDrag === 'function') {\n return spec.canDrag(monitor);\n } else {\n return true;\n }\n }\n }, {\n key: \"isDragging\",\n value: function isDragging(globalMonitor, target) {\n var spec = this.spec;\n var monitor = this.monitor;\n var isDragging = spec.isDragging;\n return isDragging ? isDragging(monitor) : target === globalMonitor.getSourceId();\n }\n }, {\n key: \"endDrag\",\n value: function endDrag() {\n var spec = this.spec;\n var monitor = this.monitor;\n var connector = this.connector;\n var end = spec.end;\n\n if (end) {\n end(monitor.getItem(), monitor);\n }\n\n connector.reconnect();\n }\n }]);\n\n return DragSourceImpl;\n}();","import { useEffect, useMemo } from 'react';\nimport { DragSourceImpl } from './DragSourceImpl';\nexport function useDragSource(spec, monitor, connector) {\n var handler = useMemo(function () {\n return new DragSourceImpl(spec, monitor, connector);\n }, [monitor, connector]);\n useEffect(function () {\n handler.spec = spec;\n }, [spec]);\n return handler;\n}","import { useContext } from 'react';\nimport { invariant } from '@react-dnd/invariant';\nimport { DndContext } from '../core';\n/**\n * A hook to retrieve the DragDropManager from Context\n */\n\nexport function useDragDropManager() {\n var _useContext = useContext(DndContext),\n dragDropManager = _useContext.dragDropManager;\n\n invariant(dragDropManager != null, 'Expected drag drop context');\n return dragDropManager;\n}","import { invariant } from '@react-dnd/invariant';\nimport { useMemo } from 'react';\nexport function useDragType(spec) {\n return useMemo(function () {\n var result = spec.type;\n invariant(result != null, 'spec.type must be defined');\n return result;\n }, [spec]);\n}","function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport { registerSource } from '../../internals';\nimport { useIsomorphicLayoutEffect } from '../useIsomorphicLayoutEffect';\nimport { useDragSource } from './useDragSource';\nimport { useDragDropManager } from '../useDragDropManager';\nimport { useDragType } from './useDragType';\nexport function useRegisteredDragSource(spec, monitor, connector) {\n var manager = useDragDropManager();\n var handler = useDragSource(spec, monitor, connector);\n var itemType = useDragType(spec);\n useIsomorphicLayoutEffect(function registerDragSource() {\n if (itemType != null) {\n var _registerSource = registerSource(itemType, handler, manager),\n _registerSource2 = _slicedToArray(_registerSource, 2),\n handlerId = _registerSource2[0],\n unregister = _registerSource2[1];\n\n monitor.receiveHandlerId(handlerId);\n connector.receiveHandlerId(handlerId);\n return unregister;\n }\n }, [manager, monitor, connector, handler, itemType]);\n}","function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nimport { useMemo } from 'react';\nexport function useOptionalFactory(arg, deps) {\n var memoDeps = _toConsumableArray(deps || []);\n\n if (deps == null && typeof arg !== 'function') {\n memoDeps.push(arg);\n }\n\n return useMemo(function () {\n return typeof arg === 'function' ? arg() : arg;\n }, memoDeps);\n}","import { useMemo } from 'react';\nimport { DragSourceMonitorImpl } from '../../internals';\nimport { useDragDropManager } from '../useDragDropManager';\nexport function useDragSourceMonitor() {\n var manager = useDragDropManager();\n return useMemo(function () {\n return new DragSourceMonitorImpl(manager);\n }, [manager]);\n}","import { useMemo } from 'react';\nimport { SourceConnector } from '../../internals';\nimport { useDragDropManager } from '../useDragDropManager';\nimport { useIsomorphicLayoutEffect } from '../useIsomorphicLayoutEffect';\nexport function useDragSourceConnector(dragSourceOptions, dragPreviewOptions) {\n var manager = useDragDropManager();\n var connector = useMemo(function () {\n return new SourceConnector(manager.getBackend());\n }, [manager]);\n useIsomorphicLayoutEffect(function () {\n connector.dragSourceOptions = dragSourceOptions || null;\n connector.reconnect();\n return function () {\n return connector.disconnectDragSource();\n };\n }, [connector, dragSourceOptions]);\n useIsomorphicLayoutEffect(function () {\n connector.dragPreviewOptions = dragPreviewOptions || null;\n connector.reconnect();\n return function () {\n return connector.disconnectDragPreview();\n };\n }, [connector, dragPreviewOptions]);\n return connector;\n}","'use strict';\n\n// do not edit .js files directly - edit src/index.jst\n\n\n\nmodule.exports = function equal(a, b) {\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n for (i = length; i-- !== 0;) {\n var key = keys[i];\n\n if (!equal(a[key], b[key])) return false;\n }\n\n return true;\n }\n\n // true if both NaN, false otherwise\n return a!==a && b!==b;\n};\n","function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport equal from 'fast-deep-equal';\nimport { useState, useCallback } from 'react';\nimport { useIsomorphicLayoutEffect } from './useIsomorphicLayoutEffect';\n/**\n *\n * @param monitor The monitor to collect state from\n * @param collect The collecting function\n * @param onUpdate A method to invoke when updates occur\n */\n\nexport function useCollector(monitor, collect, onUpdate) {\n var _useState = useState(function () {\n return collect(monitor);\n }),\n _useState2 = _slicedToArray(_useState, 2),\n collected = _useState2[0],\n setCollected = _useState2[1];\n\n var updateCollected = useCallback(function () {\n var nextValue = collect(monitor); // This needs to be a deep-equality check because some monitor-collected values\n // include XYCoord objects that may be equivalent, but do not have instance equality.\n\n if (!equal(collected, nextValue)) {\n setCollected(nextValue);\n\n if (onUpdate) {\n onUpdate();\n }\n }\n }, [collected, monitor, onUpdate]); // update the collected properties after react renders.\n // Note that the \"Dustbin Stress Test\" fails if this is not\n // done when the component updates\n\n useIsomorphicLayoutEffect(updateCollected);\n return [collected, updateCollected];\n}","function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport { useIsomorphicLayoutEffect } from './useIsomorphicLayoutEffect';\nimport { useCollector } from './useCollector';\nexport function useMonitorOutput(monitor, collect, onCollect) {\n var _useCollector = useCollector(monitor, collect, onCollect),\n _useCollector2 = _slicedToArray(_useCollector, 2),\n collected = _useCollector2[0],\n updateCollected = _useCollector2[1];\n\n useIsomorphicLayoutEffect(function subscribeToMonitorStateChange() {\n var handlerId = monitor.getHandlerId();\n\n if (handlerId == null) {\n return;\n }\n\n return monitor.subscribeToStateChange(updateCollected, {\n handlerIds: [handlerId]\n });\n }, [monitor, updateCollected]);\n return collected;\n}","import { useMonitorOutput } from './useMonitorOutput';\nexport function useCollectedProps(collector, monitor, connector) {\n return useMonitorOutput(monitor, collector || function () {\n return {};\n }, function () {\n return connector.reconnect();\n });\n}","import { useMemo } from 'react';\nexport function useConnectDragSource(connector) {\n return useMemo(function () {\n return connector.hooks.dragSource();\n }, [connector]);\n}\nexport function useConnectDragPreview(connector) {\n return useMemo(function () {\n return connector.hooks.dragPreview();\n }, [connector]);\n}","import { useRegisteredDragSource } from './useRegisteredDragSource';\nimport { useOptionalFactory } from '../useOptionalFactory';\nimport { useDragSourceMonitor } from './useDragSourceMonitor';\nimport { useDragSourceConnector } from './useDragSourceConnector';\nimport { useCollectedProps } from '../useCollectedProps';\nimport { useConnectDragPreview, useConnectDragSource } from './connectors';\nimport { invariant } from '@react-dnd/invariant';\n/**\n * useDragSource hook\n * @param sourceSpec The drag source specification (object or function, function preferred)\n * @param deps The memoization deps array to use when evaluating spec changes\n */\n\nexport function useDrag(specArg, deps) {\n var spec = useOptionalFactory(specArg, deps);\n invariant(!spec.begin, \"useDrag::spec.begin was deprecated in v14. Replace spec.begin() with spec.item(). (see more here - https://react-dnd.github.io/react-dnd/docs/api/use-drag)\");\n var monitor = useDragSourceMonitor();\n var connector = useDragSourceConnector(spec.options, spec.previewOptions);\n useRegisteredDragSource(spec, monitor, connector);\n return [useCollectedProps(spec.collect, monitor, connector), useConnectDragSource(connector), useConnectDragPreview(connector)];\n}","import { invariant } from '@react-dnd/invariant';\nimport { useMemo } from 'react';\n/**\n * Internal utility hook to get an array-version of spec.accept.\n * The main utility here is that we aren't creating a new array on every render if a non-array spec.accept is passed in.\n * @param spec\n */\n\nexport function useAccept(spec) {\n var accept = spec.accept;\n return useMemo(function () {\n invariant(spec.accept != null, 'accept must be defined');\n return Array.isArray(accept) ? accept : [accept];\n }, [accept]);\n}","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nexport var DropTargetImpl = /*#__PURE__*/function () {\n function DropTargetImpl(spec, monitor) {\n _classCallCheck(this, DropTargetImpl);\n\n _defineProperty(this, \"spec\", void 0);\n\n _defineProperty(this, \"monitor\", void 0);\n\n this.spec = spec;\n this.monitor = monitor;\n }\n\n _createClass(DropTargetImpl, [{\n key: \"canDrop\",\n value: function canDrop() {\n var spec = this.spec;\n var monitor = this.monitor;\n return spec.canDrop ? spec.canDrop(monitor.getItem(), monitor) : true;\n }\n }, {\n key: \"hover\",\n value: function hover() {\n var spec = this.spec;\n var monitor = this.monitor;\n\n if (spec.hover) {\n spec.hover(monitor.getItem(), monitor);\n }\n }\n }, {\n key: \"drop\",\n value: function drop() {\n var spec = this.spec;\n var monitor = this.monitor;\n\n if (spec.drop) {\n return spec.drop(monitor.getItem(), monitor);\n }\n }\n }]);\n\n return DropTargetImpl;\n}();","import { useEffect, useMemo } from 'react';\nimport { DropTargetImpl } from './DropTargetImpl';\nexport function useDropTarget(spec, monitor) {\n var dropTarget = useMemo(function () {\n return new DropTargetImpl(spec, monitor);\n }, [monitor]);\n useEffect(function () {\n dropTarget.spec = spec;\n }, [spec]);\n return dropTarget;\n}","function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport { registerTarget } from '../../internals';\nimport { useDragDropManager } from '../useDragDropManager';\nimport { useIsomorphicLayoutEffect } from '../useIsomorphicLayoutEffect';\nimport { useAccept } from './useAccept';\nimport { useDropTarget } from './useDropTarget';\nexport function useRegisteredDropTarget(spec, monitor, connector) {\n var manager = useDragDropManager();\n var dropTarget = useDropTarget(spec, monitor);\n var accept = useAccept(spec);\n useIsomorphicLayoutEffect(function registerDropTarget() {\n var _registerTarget = registerTarget(accept, dropTarget, manager),\n _registerTarget2 = _slicedToArray(_registerTarget, 2),\n handlerId = _registerTarget2[0],\n unregister = _registerTarget2[1];\n\n monitor.receiveHandlerId(handlerId);\n connector.receiveHandlerId(handlerId);\n return unregister;\n }, [manager, monitor, dropTarget, connector, accept.map(function (a) {\n return a.toString();\n }).join('|')]);\n}","import { useMemo } from 'react';\nimport { DropTargetMonitorImpl } from '../../internals';\nimport { useDragDropManager } from '../useDragDropManager';\nexport function useDropTargetMonitor() {\n var manager = useDragDropManager();\n return useMemo(function () {\n return new DropTargetMonitorImpl(manager);\n }, [manager]);\n}","import { useMemo } from 'react';\nimport { TargetConnector } from '../../internals';\nimport { useDragDropManager } from '../useDragDropManager';\nimport { useIsomorphicLayoutEffect } from '../useIsomorphicLayoutEffect';\nexport function useDropTargetConnector(options) {\n var manager = useDragDropManager();\n var connector = useMemo(function () {\n return new TargetConnector(manager.getBackend());\n }, [manager]);\n useIsomorphicLayoutEffect(function () {\n connector.dropTargetOptions = options || null;\n connector.reconnect();\n return function () {\n return connector.disconnectDropTarget();\n };\n }, [options]);\n return connector;\n}","import { useMemo } from 'react';\nexport function useConnectDropTarget(connector) {\n return useMemo(function () {\n return connector.hooks.dropTarget();\n }, [connector]);\n}","import { useRegisteredDropTarget } from './useRegisteredDropTarget';\nimport { useOptionalFactory } from '../useOptionalFactory';\nimport { useDropTargetMonitor } from './useDropTargetMonitor';\nimport { useDropTargetConnector } from './useDropTargetConnector';\nimport { useCollectedProps } from '../useCollectedProps';\nimport { useConnectDropTarget } from './connectors';\n/**\n * useDropTarget Hook\n * @param spec The drop target specification (object or function, function preferred)\n * @param deps The memoization deps array to use when evaluating spec changes\n */\n\nexport function useDrop(specArg, deps) {\n var spec = useOptionalFactory(specArg, deps);\n var monitor = useDropTargetMonitor();\n var connector = useDropTargetConnector(spec.options);\n useRegisteredDropTarget(spec, monitor, connector);\n return [useCollectedProps(spec.collect, monitor, connector), useConnectDropTarget(connector)];\n}","function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport { useEffect } from 'react';\nimport { useDragDropManager } from './useDragDropManager';\nimport { useCollector } from './useCollector';\n/**\n * useDragLayer Hook\n * @param collector The property collector\n */\n\nexport function useDragLayer(collect) {\n var dragDropManager = useDragDropManager();\n var monitor = dragDropManager.getMonitor();\n\n var _useCollector = useCollector(monitor, collect),\n _useCollector2 = _slicedToArray(_useCollector, 2),\n collected = _useCollector2[0],\n updateCollected = _useCollector2[1];\n\n useEffect(function () {\n return monitor.subscribeToOffsetChange(updateCollected);\n });\n useEffect(function () {\n return monitor.subscribeToStateChange(updateCollected);\n });\n return collected;\n}","// cheap lodash replacements\nexport function memoize(fn) {\n var result = null;\n\n var memoized = function memoized() {\n if (result == null) {\n result = fn();\n }\n\n return result;\n };\n\n return memoized;\n}\n/**\n * drop-in replacement for _.without\n */\n\nexport function without(items, item) {\n return items.filter(function (i) {\n return i !== item;\n });\n}\nexport function union(itemsA, itemsB) {\n var set = new Set();\n\n var insertItem = function insertItem(item) {\n return set.add(item);\n };\n\n itemsA.forEach(insertItem);\n itemsB.forEach(insertItem);\n var result = [];\n set.forEach(function (key) {\n return result.push(key);\n });\n return result;\n}","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { union, without } from './utils/js_utils';\nexport var EnterLeaveCounter = /*#__PURE__*/function () {\n function EnterLeaveCounter(isNodeInDocument) {\n _classCallCheck(this, EnterLeaveCounter);\n\n _defineProperty(this, \"entered\", []);\n\n _defineProperty(this, \"isNodeInDocument\", void 0);\n\n this.isNodeInDocument = isNodeInDocument;\n }\n\n _createClass(EnterLeaveCounter, [{\n key: \"enter\",\n value: function enter(enteringNode) {\n var _this = this;\n\n var previousLength = this.entered.length;\n\n var isNodeEntered = function isNodeEntered(node) {\n return _this.isNodeInDocument(node) && (!node.contains || node.contains(enteringNode));\n };\n\n this.entered = union(this.entered.filter(isNodeEntered), [enteringNode]);\n return previousLength === 0 && this.entered.length > 0;\n }\n }, {\n key: \"leave\",\n value: function leave(leavingNode) {\n var previousLength = this.entered.length;\n this.entered = without(this.entered.filter(this.isNodeInDocument), leavingNode);\n return previousLength > 0 && this.entered.length === 0;\n }\n }, {\n key: \"reset\",\n value: function reset() {\n this.entered = [];\n }\n }]);\n\n return EnterLeaveCounter;\n}();","import { memoize } from './utils/js_utils';\nexport var isFirefox = memoize(function () {\n return /firefox/i.test(navigator.userAgent);\n});\nexport var isSafari = memoize(function () {\n return Boolean(window.safari);\n});","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nexport var MonotonicInterpolant = /*#__PURE__*/function () {\n function MonotonicInterpolant(xs, ys) {\n _classCallCheck(this, MonotonicInterpolant);\n\n _defineProperty(this, \"xs\", void 0);\n\n _defineProperty(this, \"ys\", void 0);\n\n _defineProperty(this, \"c1s\", void 0);\n\n _defineProperty(this, \"c2s\", void 0);\n\n _defineProperty(this, \"c3s\", void 0);\n\n var length = xs.length; // Rearrange xs and ys so that xs is sorted\n\n var indexes = [];\n\n for (var i = 0; i < length; i++) {\n indexes.push(i);\n }\n\n indexes.sort(function (a, b) {\n return xs[a] < xs[b] ? -1 : 1;\n }); // Get consecutive differences and slopes\n\n var dys = [];\n var dxs = [];\n var ms = [];\n var dx;\n var dy;\n\n for (var _i = 0; _i < length - 1; _i++) {\n dx = xs[_i + 1] - xs[_i];\n dy = ys[_i + 1] - ys[_i];\n dxs.push(dx);\n dys.push(dy);\n ms.push(dy / dx);\n } // Get degree-1 coefficients\n\n\n var c1s = [ms[0]];\n\n for (var _i2 = 0; _i2 < dxs.length - 1; _i2++) {\n var m2 = ms[_i2];\n var mNext = ms[_i2 + 1];\n\n if (m2 * mNext <= 0) {\n c1s.push(0);\n } else {\n dx = dxs[_i2];\n var dxNext = dxs[_i2 + 1];\n var common = dx + dxNext;\n c1s.push(3 * common / ((common + dxNext) / m2 + (common + dx) / mNext));\n }\n }\n\n c1s.push(ms[ms.length - 1]); // Get degree-2 and degree-3 coefficients\n\n var c2s = [];\n var c3s = [];\n var m;\n\n for (var _i3 = 0; _i3 < c1s.length - 1; _i3++) {\n m = ms[_i3];\n var c1 = c1s[_i3];\n var invDx = 1 / dxs[_i3];\n\n var _common = c1 + c1s[_i3 + 1] - m - m;\n\n c2s.push((m - c1 - _common) * invDx);\n c3s.push(_common * invDx * invDx);\n }\n\n this.xs = xs;\n this.ys = ys;\n this.c1s = c1s;\n this.c2s = c2s;\n this.c3s = c3s;\n }\n\n _createClass(MonotonicInterpolant, [{\n key: \"interpolate\",\n value: function interpolate(x) {\n var xs = this.xs,\n ys = this.ys,\n c1s = this.c1s,\n c2s = this.c2s,\n c3s = this.c3s; // The rightmost point in the dataset should give an exact result\n\n var i = xs.length - 1;\n\n if (x === xs[i]) {\n return ys[i];\n } // Search for the interval x is in, returning the corresponding y if x is one of the original xs\n\n\n var low = 0;\n var high = c3s.length - 1;\n var mid;\n\n while (low <= high) {\n mid = Math.floor(0.5 * (low + high));\n var xHere = xs[mid];\n\n if (xHere < x) {\n low = mid + 1;\n } else if (xHere > x) {\n high = mid - 1;\n } else {\n return ys[mid];\n }\n }\n\n i = Math.max(0, high); // Interpolate\n\n var diff = x - xs[i];\n var diffSq = diff * diff;\n return ys[i] + c1s[i] * diff + c2s[i] * diffSq + c3s[i] * diff * diffSq;\n }\n }]);\n\n return MonotonicInterpolant;\n}();","import { isSafari, isFirefox } from './BrowserDetector';\nimport { MonotonicInterpolant } from './MonotonicInterpolant';\nvar ELEMENT_NODE = 1;\nexport function getNodeClientOffset(node) {\n var el = node.nodeType === ELEMENT_NODE ? node : node.parentElement;\n\n if (!el) {\n return null;\n }\n\n var _el$getBoundingClient = el.getBoundingClientRect(),\n top = _el$getBoundingClient.top,\n left = _el$getBoundingClient.left;\n\n return {\n x: left,\n y: top\n };\n}\nexport function getEventClientOffset(e) {\n return {\n x: e.clientX,\n y: e.clientY\n };\n}\n\nfunction isImageNode(node) {\n var _document$documentEle;\n\n return node.nodeName === 'IMG' && (isFirefox() || !((_document$documentEle = document.documentElement) !== null && _document$documentEle !== void 0 && _document$documentEle.contains(node)));\n}\n\nfunction getDragPreviewSize(isImage, dragPreview, sourceWidth, sourceHeight) {\n var dragPreviewWidth = isImage ? dragPreview.width : sourceWidth;\n var dragPreviewHeight = isImage ? dragPreview.height : sourceHeight; // Work around @2x coordinate discrepancies in browsers\n\n if (isSafari() && isImage) {\n dragPreviewHeight /= window.devicePixelRatio;\n dragPreviewWidth /= window.devicePixelRatio;\n }\n\n return {\n dragPreviewWidth: dragPreviewWidth,\n dragPreviewHeight: dragPreviewHeight\n };\n}\n\nexport function getDragPreviewOffset(sourceNode, dragPreview, clientOffset, anchorPoint, offsetPoint) {\n // The browsers will use the image intrinsic size under different conditions.\n // Firefox only cares if it's an image, but WebKit also wants it to be detached.\n var isImage = isImageNode(dragPreview);\n var dragPreviewNode = isImage ? sourceNode : dragPreview;\n var dragPreviewNodeOffsetFromClient = getNodeClientOffset(dragPreviewNode);\n var offsetFromDragPreview = {\n x: clientOffset.x - dragPreviewNodeOffsetFromClient.x,\n y: clientOffset.y - dragPreviewNodeOffsetFromClient.y\n };\n var sourceWidth = sourceNode.offsetWidth,\n sourceHeight = sourceNode.offsetHeight;\n var anchorX = anchorPoint.anchorX,\n anchorY = anchorPoint.anchorY;\n\n var _getDragPreviewSize = getDragPreviewSize(isImage, dragPreview, sourceWidth, sourceHeight),\n dragPreviewWidth = _getDragPreviewSize.dragPreviewWidth,\n dragPreviewHeight = _getDragPreviewSize.dragPreviewHeight;\n\n var calculateYOffset = function calculateYOffset() {\n var interpolantY = new MonotonicInterpolant([0, 0.5, 1], [// Dock to the top\n offsetFromDragPreview.y, // Align at the center\n offsetFromDragPreview.y / sourceHeight * dragPreviewHeight, // Dock to the bottom\n offsetFromDragPreview.y + dragPreviewHeight - sourceHeight]);\n var y = interpolantY.interpolate(anchorY); // Work around Safari 8 positioning bug\n\n if (isSafari() && isImage) {\n // We'll have to wait for @3x to see if this is entirely correct\n y += (window.devicePixelRatio - 1) * dragPreviewHeight;\n }\n\n return y;\n };\n\n var calculateXOffset = function calculateXOffset() {\n // Interpolate coordinates depending on anchor point\n // If you know a simpler way to do this, let me know\n var interpolantX = new MonotonicInterpolant([0, 0.5, 1], [// Dock to the left\n offsetFromDragPreview.x, // Align at the center\n offsetFromDragPreview.x / sourceWidth * dragPreviewWidth, // Dock to the right\n offsetFromDragPreview.x + dragPreviewWidth - sourceWidth]);\n return interpolantX.interpolate(anchorX);\n }; // Force offsets if specified in the options.\n\n\n var offsetX = offsetPoint.offsetX,\n offsetY = offsetPoint.offsetY;\n var isManualOffsetX = offsetX === 0 || offsetX;\n var isManualOffsetY = offsetY === 0 || offsetY;\n return {\n x: isManualOffsetX ? offsetX : calculateXOffset(),\n y: isManualOffsetY ? offsetY : calculateYOffset()\n };\n}","export var FILE = '__NATIVE_FILE__';\nexport var URL = '__NATIVE_URL__';\nexport var TEXT = '__NATIVE_TEXT__';\nexport var HTML = '__NATIVE_HTML__';","export function getDataFromDataTransfer(dataTransfer, typesToTry, defaultValue) {\n var result = typesToTry.reduce(function (resultSoFar, typeToTry) {\n return resultSoFar || dataTransfer.getData(typeToTry);\n }, '');\n return result != null ? result : defaultValue;\n}","var _nativeTypesConfig;\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport * as NativeTypes from '../NativeTypes';\nimport { getDataFromDataTransfer } from './getDataFromDataTransfer';\nexport var nativeTypesConfig = (_nativeTypesConfig = {}, _defineProperty(_nativeTypesConfig, NativeTypes.FILE, {\n exposeProperties: {\n files: function files(dataTransfer) {\n return Array.prototype.slice.call(dataTransfer.files);\n },\n items: function items(dataTransfer) {\n return dataTransfer.items;\n },\n dataTransfer: function dataTransfer(_dataTransfer) {\n return _dataTransfer;\n }\n },\n matchesTypes: ['Files']\n}), _defineProperty(_nativeTypesConfig, NativeTypes.HTML, {\n exposeProperties: {\n html: function html(dataTransfer, matchesTypes) {\n return getDataFromDataTransfer(dataTransfer, matchesTypes, '');\n },\n dataTransfer: function dataTransfer(_dataTransfer2) {\n return _dataTransfer2;\n }\n },\n matchesTypes: ['Html', 'text/html']\n}), _defineProperty(_nativeTypesConfig, NativeTypes.URL, {\n exposeProperties: {\n urls: function urls(dataTransfer, matchesTypes) {\n return getDataFromDataTransfer(dataTransfer, matchesTypes, '').split('\\n');\n },\n dataTransfer: function dataTransfer(_dataTransfer3) {\n return _dataTransfer3;\n }\n },\n matchesTypes: ['Url', 'text/uri-list']\n}), _defineProperty(_nativeTypesConfig, NativeTypes.TEXT, {\n exposeProperties: {\n text: function text(dataTransfer, matchesTypes) {\n return getDataFromDataTransfer(dataTransfer, matchesTypes, '');\n },\n dataTransfer: function dataTransfer(_dataTransfer4) {\n return _dataTransfer4;\n }\n },\n matchesTypes: ['Text', 'text/plain']\n}), _nativeTypesConfig);","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nexport var NativeDragSource = /*#__PURE__*/function () {\n function NativeDragSource(config) {\n _classCallCheck(this, NativeDragSource);\n\n _defineProperty(this, \"item\", void 0);\n\n _defineProperty(this, \"config\", void 0);\n\n this.config = config;\n this.item = {};\n this.initializeExposedProperties();\n }\n\n _createClass(NativeDragSource, [{\n key: \"initializeExposedProperties\",\n value: function initializeExposedProperties() {\n var _this = this;\n\n Object.keys(this.config.exposeProperties).forEach(function (property) {\n Object.defineProperty(_this.item, property, {\n configurable: true,\n enumerable: true,\n get: function get() {\n // eslint-disable-next-line no-console\n console.warn(\"Browser doesn't allow reading \\\"\".concat(property, \"\\\" until the drop event.\"));\n return null;\n }\n });\n });\n }\n }, {\n key: \"loadDataTransfer\",\n value: function loadDataTransfer(dataTransfer) {\n var _this2 = this;\n\n if (dataTransfer) {\n var newProperties = {};\n Object.keys(this.config.exposeProperties).forEach(function (property) {\n newProperties[property] = {\n value: _this2.config.exposeProperties[property](dataTransfer, _this2.config.matchesTypes),\n configurable: true,\n enumerable: true\n };\n });\n Object.defineProperties(this.item, newProperties);\n }\n }\n }, {\n key: \"canDrag\",\n value: function canDrag() {\n return true;\n }\n }, {\n key: \"beginDrag\",\n value: function beginDrag() {\n return this.item;\n }\n }, {\n key: \"isDragging\",\n value: function isDragging(monitor, handle) {\n return handle === monitor.getSourceId();\n }\n }, {\n key: \"endDrag\",\n value: function endDrag() {// empty\n }\n }]);\n\n return NativeDragSource;\n}();","import { nativeTypesConfig } from './nativeTypesConfig';\nimport { NativeDragSource } from './NativeDragSource';\nexport function createNativeDragSource(type, dataTransfer) {\n var result = new NativeDragSource(nativeTypesConfig[type]);\n result.loadDataTransfer(dataTransfer);\n return result;\n}\nexport function matchNativeItemType(dataTransfer) {\n if (!dataTransfer) {\n return null;\n }\n\n var dataTransferTypes = Array.prototype.slice.call(dataTransfer.types || []);\n return Object.keys(nativeTypesConfig).filter(function (nativeItemType) {\n var matchesTypes = nativeTypesConfig[nativeItemType].matchesTypes;\n return matchesTypes.some(function (t) {\n return dataTransferTypes.indexOf(t) > -1;\n });\n })[0] || null;\n}","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nexport var OptionsReader = /*#__PURE__*/function () {\n function OptionsReader(globalContext, options) {\n _classCallCheck(this, OptionsReader);\n\n _defineProperty(this, \"ownerDocument\", null);\n\n _defineProperty(this, \"globalContext\", void 0);\n\n _defineProperty(this, \"optionsArgs\", void 0);\n\n this.globalContext = globalContext;\n this.optionsArgs = options;\n }\n\n _createClass(OptionsReader, [{\n key: \"window\",\n get: function get() {\n if (this.globalContext) {\n return this.globalContext;\n } else if (typeof window !== 'undefined') {\n return window;\n }\n\n return undefined;\n }\n }, {\n key: \"document\",\n get: function get() {\n var _this$globalContext;\n\n if ((_this$globalContext = this.globalContext) !== null && _this$globalContext !== void 0 && _this$globalContext.document) {\n return this.globalContext.document;\n } else if (this.window) {\n return this.window.document;\n } else {\n return undefined;\n }\n }\n }, {\n key: \"rootElement\",\n get: function get() {\n var _this$optionsArgs;\n\n return ((_this$optionsArgs = this.optionsArgs) === null || _this$optionsArgs === void 0 ? void 0 : _this$optionsArgs.rootElement) || this.window;\n }\n }]);\n\n return OptionsReader;\n}();","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { EnterLeaveCounter } from './EnterLeaveCounter';\nimport { getNodeClientOffset, getEventClientOffset, getDragPreviewOffset } from './OffsetUtils';\nimport { createNativeDragSource, matchNativeItemType } from './NativeDragSources';\nimport * as NativeTypes from './NativeTypes';\nimport { OptionsReader } from './OptionsReader';\nexport var HTML5BackendImpl = /*#__PURE__*/function () {\n // React-Dnd Components\n // Internal State\n function HTML5BackendImpl(manager, globalContext, options) {\n var _this = this;\n\n _classCallCheck(this, HTML5BackendImpl);\n\n _defineProperty(this, \"options\", void 0);\n\n _defineProperty(this, \"actions\", void 0);\n\n _defineProperty(this, \"monitor\", void 0);\n\n _defineProperty(this, \"registry\", void 0);\n\n _defineProperty(this, \"enterLeaveCounter\", void 0);\n\n _defineProperty(this, \"sourcePreviewNodes\", new Map());\n\n _defineProperty(this, \"sourcePreviewNodeOptions\", new Map());\n\n _defineProperty(this, \"sourceNodes\", new Map());\n\n _defineProperty(this, \"sourceNodeOptions\", new Map());\n\n _defineProperty(this, \"dragStartSourceIds\", null);\n\n _defineProperty(this, \"dropTargetIds\", []);\n\n _defineProperty(this, \"dragEnterTargetIds\", []);\n\n _defineProperty(this, \"currentNativeSource\", null);\n\n _defineProperty(this, \"currentNativeHandle\", null);\n\n _defineProperty(this, \"currentDragSourceNode\", null);\n\n _defineProperty(this, \"altKeyPressed\", false);\n\n _defineProperty(this, \"mouseMoveTimeoutTimer\", null);\n\n _defineProperty(this, \"asyncEndDragFrameId\", null);\n\n _defineProperty(this, \"dragOverTargetIds\", null);\n\n _defineProperty(this, \"lastClientOffset\", null);\n\n _defineProperty(this, \"hoverRafId\", null);\n\n _defineProperty(this, \"getSourceClientOffset\", function (sourceId) {\n var source = _this.sourceNodes.get(sourceId);\n\n return source && getNodeClientOffset(source) || null;\n });\n\n _defineProperty(this, \"endDragNativeItem\", function () {\n if (!_this.isDraggingNativeItem()) {\n return;\n }\n\n _this.actions.endDrag();\n\n if (_this.currentNativeHandle) {\n _this.registry.removeSource(_this.currentNativeHandle);\n }\n\n _this.currentNativeHandle = null;\n _this.currentNativeSource = null;\n });\n\n _defineProperty(this, \"isNodeInDocument\", function (node) {\n // Check the node either in the main document or in the current context\n return Boolean(node && _this.document && _this.document.body && _this.document.body.contains(node));\n });\n\n _defineProperty(this, \"endDragIfSourceWasRemovedFromDOM\", function () {\n var node = _this.currentDragSourceNode;\n\n if (node == null || _this.isNodeInDocument(node)) {\n return;\n }\n\n if (_this.clearCurrentDragSourceNode() && _this.monitor.isDragging()) {\n _this.actions.endDrag();\n }\n });\n\n _defineProperty(this, \"handleTopDragStartCapture\", function () {\n _this.clearCurrentDragSourceNode();\n\n _this.dragStartSourceIds = [];\n });\n\n _defineProperty(this, \"handleTopDragStart\", function (e) {\n if (e.defaultPrevented) {\n return;\n }\n\n var dragStartSourceIds = _this.dragStartSourceIds;\n _this.dragStartSourceIds = null;\n var clientOffset = getEventClientOffset(e); // Avoid crashing if we missed a drop event or our previous drag died\n\n if (_this.monitor.isDragging()) {\n _this.actions.endDrag();\n } // Don't publish the source just yet (see why below)\n\n\n _this.actions.beginDrag(dragStartSourceIds || [], {\n publishSource: false,\n getSourceClientOffset: _this.getSourceClientOffset,\n clientOffset: clientOffset\n });\n\n var dataTransfer = e.dataTransfer;\n var nativeType = matchNativeItemType(dataTransfer);\n\n if (_this.monitor.isDragging()) {\n if (dataTransfer && typeof dataTransfer.setDragImage === 'function') {\n // Use custom drag image if user specifies it.\n // If child drag source refuses drag but parent agrees,\n // use parent's node as drag image. Neither works in IE though.\n var sourceId = _this.monitor.getSourceId();\n\n var sourceNode = _this.sourceNodes.get(sourceId);\n\n var dragPreview = _this.sourcePreviewNodes.get(sourceId) || sourceNode;\n\n if (dragPreview) {\n var _this$getCurrentSourc = _this.getCurrentSourcePreviewNodeOptions(),\n anchorX = _this$getCurrentSourc.anchorX,\n anchorY = _this$getCurrentSourc.anchorY,\n offsetX = _this$getCurrentSourc.offsetX,\n offsetY = _this$getCurrentSourc.offsetY;\n\n var anchorPoint = {\n anchorX: anchorX,\n anchorY: anchorY\n };\n var offsetPoint = {\n offsetX: offsetX,\n offsetY: offsetY\n };\n var dragPreviewOffset = getDragPreviewOffset(sourceNode, dragPreview, clientOffset, anchorPoint, offsetPoint);\n dataTransfer.setDragImage(dragPreview, dragPreviewOffset.x, dragPreviewOffset.y);\n }\n }\n\n try {\n // Firefox won't drag without setting data\n dataTransfer === null || dataTransfer === void 0 ? void 0 : dataTransfer.setData('application/json', {});\n } catch (err) {// IE doesn't support MIME types in setData\n } // Store drag source node so we can check whether\n // it is removed from DOM and trigger endDrag manually.\n\n\n _this.setCurrentDragSourceNode(e.target); // Now we are ready to publish the drag source.. or are we not?\n\n\n var _this$getCurrentSourc2 = _this.getCurrentSourcePreviewNodeOptions(),\n captureDraggingState = _this$getCurrentSourc2.captureDraggingState;\n\n if (!captureDraggingState) {\n // Usually we want to publish it in the next tick so that browser\n // is able to screenshot the current (not yet dragging) state.\n //\n // It also neatly avoids a situation where render() returns null\n // in the same tick for the source element, and browser freaks out.\n setTimeout(function () {\n return _this.actions.publishDragSource();\n }, 0);\n } else {\n // In some cases the user may want to override this behavior, e.g.\n // to work around IE not supporting custom drag previews.\n //\n // When using a custom drag layer, the only way to prevent\n // the default drag preview from drawing in IE is to screenshot\n // the dragging state in which the node itself has zero opacity\n // and height. In this case, though, returning null from render()\n // will abruptly end the dragging, which is not obvious.\n //\n // This is the reason such behavior is strictly opt-in.\n _this.actions.publishDragSource();\n }\n } else if (nativeType) {\n // A native item (such as URL) dragged from inside the document\n _this.beginDragNativeItem(nativeType);\n } else if (dataTransfer && !dataTransfer.types && (e.target && !e.target.hasAttribute || !e.target.hasAttribute('draggable'))) {\n // Looks like a Safari bug: dataTransfer.types is null, but there was no draggable.\n // Just let it drag. It's a native type (URL or text) and will be picked up in\n // dragenter handler.\n return;\n } else {\n // If by this time no drag source reacted, tell browser not to drag.\n e.preventDefault();\n }\n });\n\n _defineProperty(this, \"handleTopDragEndCapture\", function () {\n if (_this.clearCurrentDragSourceNode() && _this.monitor.isDragging()) {\n // Firefox can dispatch this event in an infinite loop\n // if dragend handler does something like showing an alert.\n // Only proceed if we have not handled it already.\n _this.actions.endDrag();\n }\n });\n\n _defineProperty(this, \"handleTopDragEnterCapture\", function (e) {\n _this.dragEnterTargetIds = [];\n\n var isFirstEnter = _this.enterLeaveCounter.enter(e.target);\n\n if (!isFirstEnter || _this.monitor.isDragging()) {\n return;\n }\n\n var dataTransfer = e.dataTransfer;\n var nativeType = matchNativeItemType(dataTransfer);\n\n if (nativeType) {\n // A native item (such as file or URL) dragged from outside the document\n _this.beginDragNativeItem(nativeType, dataTransfer);\n }\n });\n\n _defineProperty(this, \"handleTopDragEnter\", function (e) {\n var dragEnterTargetIds = _this.dragEnterTargetIds;\n _this.dragEnterTargetIds = [];\n\n if (!_this.monitor.isDragging()) {\n // This is probably a native item type we don't understand.\n return;\n }\n\n _this.altKeyPressed = e.altKey; // If the target changes position as the result of `dragenter`, `dragover` might still\n // get dispatched despite target being no longer there. The easy solution is to check\n // whether there actually is a target before firing `hover`.\n\n if (dragEnterTargetIds.length > 0) {\n _this.actions.hover(dragEnterTargetIds, {\n clientOffset: getEventClientOffset(e)\n });\n }\n\n var canDrop = dragEnterTargetIds.some(function (targetId) {\n return _this.monitor.canDropOnTarget(targetId);\n });\n\n if (canDrop) {\n // IE requires this to fire dragover events\n e.preventDefault();\n\n if (e.dataTransfer) {\n e.dataTransfer.dropEffect = _this.getCurrentDropEffect();\n }\n }\n });\n\n _defineProperty(this, \"handleTopDragOverCapture\", function () {\n _this.dragOverTargetIds = [];\n });\n\n _defineProperty(this, \"handleTopDragOver\", function (e) {\n var dragOverTargetIds = _this.dragOverTargetIds;\n _this.dragOverTargetIds = [];\n\n if (!_this.monitor.isDragging()) {\n // This is probably a native item type we don't understand.\n // Prevent default \"drop and blow away the whole document\" action.\n e.preventDefault();\n\n if (e.dataTransfer) {\n e.dataTransfer.dropEffect = 'none';\n }\n\n return;\n }\n\n _this.altKeyPressed = e.altKey;\n _this.lastClientOffset = getEventClientOffset(e);\n\n if (_this.hoverRafId === null && typeof requestAnimationFrame !== 'undefined') {\n _this.hoverRafId = requestAnimationFrame(function () {\n if (_this.monitor.isDragging()) {\n _this.actions.hover(dragOverTargetIds || [], {\n clientOffset: _this.lastClientOffset\n });\n }\n\n _this.hoverRafId = null;\n });\n }\n\n var canDrop = (dragOverTargetIds || []).some(function (targetId) {\n return _this.monitor.canDropOnTarget(targetId);\n });\n\n if (canDrop) {\n // Show user-specified drop effect.\n e.preventDefault();\n\n if (e.dataTransfer) {\n e.dataTransfer.dropEffect = _this.getCurrentDropEffect();\n }\n } else if (_this.isDraggingNativeItem()) {\n // Don't show a nice cursor but still prevent default\n // \"drop and blow away the whole document\" action.\n e.preventDefault();\n } else {\n e.preventDefault();\n\n if (e.dataTransfer) {\n e.dataTransfer.dropEffect = 'none';\n }\n }\n });\n\n _defineProperty(this, \"handleTopDragLeaveCapture\", function (e) {\n if (_this.isDraggingNativeItem()) {\n e.preventDefault();\n }\n\n var isLastLeave = _this.enterLeaveCounter.leave(e.target);\n\n if (!isLastLeave) {\n return;\n }\n\n if (_this.isDraggingNativeItem()) {\n setTimeout(function () {\n return _this.endDragNativeItem();\n }, 0);\n }\n });\n\n _defineProperty(this, \"handleTopDropCapture\", function (e) {\n _this.dropTargetIds = [];\n\n if (_this.isDraggingNativeItem()) {\n var _this$currentNativeSo;\n\n e.preventDefault();\n (_this$currentNativeSo = _this.currentNativeSource) === null || _this$currentNativeSo === void 0 ? void 0 : _this$currentNativeSo.loadDataTransfer(e.dataTransfer);\n } else if (matchNativeItemType(e.dataTransfer)) {\n // Dragging some elements, like <a> and <img> may still behave like a native drag event,\n // even if the current drag event matches a user-defined type.\n // Stop the default behavior when we're not expecting a native item to be dropped.\n e.preventDefault();\n }\n\n _this.enterLeaveCounter.reset();\n });\n\n _defineProperty(this, \"handleTopDrop\", function (e) {\n var dropTargetIds = _this.dropTargetIds;\n _this.dropTargetIds = [];\n\n _this.actions.hover(dropTargetIds, {\n clientOffset: getEventClientOffset(e)\n });\n\n _this.actions.drop({\n dropEffect: _this.getCurrentDropEffect()\n });\n\n if (_this.isDraggingNativeItem()) {\n _this.endDragNativeItem();\n } else if (_this.monitor.isDragging()) {\n _this.actions.endDrag();\n }\n });\n\n _defineProperty(this, \"handleSelectStart\", function (e) {\n var target = e.target; // Only IE requires us to explicitly say\n // we want drag drop operation to start\n\n if (typeof target.dragDrop !== 'function') {\n return;\n } // Inputs and textareas should be selectable\n\n\n if (target.tagName === 'INPUT' || target.tagName === 'SELECT' || target.tagName === 'TEXTAREA' || target.isContentEditable) {\n return;\n } // For other targets, ask IE\n // to enable drag and drop\n\n\n e.preventDefault();\n target.dragDrop();\n });\n\n this.options = new OptionsReader(globalContext, options);\n this.actions = manager.getActions();\n this.monitor = manager.getMonitor();\n this.registry = manager.getRegistry();\n this.enterLeaveCounter = new EnterLeaveCounter(this.isNodeInDocument);\n }\n /**\n * Generate profiling statistics for the HTML5Backend.\n */\n\n\n _createClass(HTML5BackendImpl, [{\n key: \"profile\",\n value: function profile() {\n var _this$dragStartSource, _this$dragOverTargetI;\n\n return {\n sourcePreviewNodes: this.sourcePreviewNodes.size,\n sourcePreviewNodeOptions: this.sourcePreviewNodeOptions.size,\n sourceNodeOptions: this.sourceNodeOptions.size,\n sourceNodes: this.sourceNodes.size,\n dragStartSourceIds: ((_this$dragStartSource = this.dragStartSourceIds) === null || _this$dragStartSource === void 0 ? void 0 : _this$dragStartSource.length) || 0,\n dropTargetIds: this.dropTargetIds.length,\n dragEnterTargetIds: this.dragEnterTargetIds.length,\n dragOverTargetIds: ((_this$dragOverTargetI = this.dragOverTargetIds) === null || _this$dragOverTargetI === void 0 ? void 0 : _this$dragOverTargetI.length) || 0\n };\n } // public for test\n\n }, {\n key: \"window\",\n get: function get() {\n return this.options.window;\n }\n }, {\n key: \"document\",\n get: function get() {\n return this.options.document;\n }\n /**\n * Get the root element to use for event subscriptions\n */\n\n }, {\n key: \"rootElement\",\n get: function get() {\n return this.options.rootElement;\n }\n }, {\n key: \"setup\",\n value: function setup() {\n var root = this.rootElement;\n\n if (root === undefined) {\n return;\n }\n\n if (root.__isReactDndBackendSetUp) {\n throw new Error('Cannot have two HTML5 backends at the same time.');\n }\n\n root.__isReactDndBackendSetUp = true;\n this.addEventListeners(root);\n }\n }, {\n key: \"teardown\",\n value: function teardown() {\n var root = this.rootElement;\n\n if (root === undefined) {\n return;\n }\n\n root.__isReactDndBackendSetUp = false;\n this.removeEventListeners(this.rootElement);\n this.clearCurrentDragSourceNode();\n\n if (this.asyncEndDragFrameId) {\n var _this$window;\n\n (_this$window = this.window) === null || _this$window === void 0 ? void 0 : _this$window.cancelAnimationFrame(this.asyncEndDragFrameId);\n }\n }\n }, {\n key: \"connectDragPreview\",\n value: function connectDragPreview(sourceId, node, options) {\n var _this2 = this;\n\n this.sourcePreviewNodeOptions.set(sourceId, options);\n this.sourcePreviewNodes.set(sourceId, node);\n return function () {\n _this2.sourcePreviewNodes.delete(sourceId);\n\n _this2.sourcePreviewNodeOptions.delete(sourceId);\n };\n }\n }, {\n key: \"connectDragSource\",\n value: function connectDragSource(sourceId, node, options) {\n var _this3 = this;\n\n this.sourceNodes.set(sourceId, node);\n this.sourceNodeOptions.set(sourceId, options);\n\n var handleDragStart = function handleDragStart(e) {\n return _this3.handleDragStart(e, sourceId);\n };\n\n var handleSelectStart = function handleSelectStart(e) {\n return _this3.handleSelectStart(e);\n };\n\n node.setAttribute('draggable', 'true');\n node.addEventListener('dragstart', handleDragStart);\n node.addEventListener('selectstart', handleSelectStart);\n return function () {\n _this3.sourceNodes.delete(sourceId);\n\n _this3.sourceNodeOptions.delete(sourceId);\n\n node.removeEventListener('dragstart', handleDragStart);\n node.removeEventListener('selectstart', handleSelectStart);\n node.setAttribute('draggable', 'false');\n };\n }\n }, {\n key: \"connectDropTarget\",\n value: function connectDropTarget(targetId, node) {\n var _this4 = this;\n\n var handleDragEnter = function handleDragEnter(e) {\n return _this4.handleDragEnter(e, targetId);\n };\n\n var handleDragOver = function handleDragOver(e) {\n return _this4.handleDragOver(e, targetId);\n };\n\n var handleDrop = function handleDrop(e) {\n return _this4.handleDrop(e, targetId);\n };\n\n node.addEventListener('dragenter', handleDragEnter);\n node.addEventListener('dragover', handleDragOver);\n node.addEventListener('drop', handleDrop);\n return function () {\n node.removeEventListener('dragenter', handleDragEnter);\n node.removeEventListener('dragover', handleDragOver);\n node.removeEventListener('drop', handleDrop);\n };\n }\n }, {\n key: \"addEventListeners\",\n value: function addEventListeners(target) {\n // SSR Fix (https://github.com/react-dnd/react-dnd/pull/813\n if (!target.addEventListener) {\n return;\n }\n\n target.addEventListener('dragstart', this.handleTopDragStart);\n target.addEventListener('dragstart', this.handleTopDragStartCapture, true);\n target.addEventListener('dragend', this.handleTopDragEndCapture, true);\n target.addEventListener('dragenter', this.handleTopDragEnter);\n target.addEventListener('dragenter', this.handleTopDragEnterCapture, true);\n target.addEventListener('dragleave', this.handleTopDragLeaveCapture, true);\n target.addEventListener('dragover', this.handleTopDragOver);\n target.addEventListener('dragover', this.handleTopDragOverCapture, true);\n target.addEventListener('drop', this.handleTopDrop);\n target.addEventListener('drop', this.handleTopDropCapture, true);\n }\n }, {\n key: \"removeEventListeners\",\n value: function removeEventListeners(target) {\n // SSR Fix (https://github.com/react-dnd/react-dnd/pull/813\n if (!target.removeEventListener) {\n return;\n }\n\n target.removeEventListener('dragstart', this.handleTopDragStart);\n target.removeEventListener('dragstart', this.handleTopDragStartCapture, true);\n target.removeEventListener('dragend', this.handleTopDragEndCapture, true);\n target.removeEventListener('dragenter', this.handleTopDragEnter);\n target.removeEventListener('dragenter', this.handleTopDragEnterCapture, true);\n target.removeEventListener('dragleave', this.handleTopDragLeaveCapture, true);\n target.removeEventListener('dragover', this.handleTopDragOver);\n target.removeEventListener('dragover', this.handleTopDragOverCapture, true);\n target.removeEventListener('drop', this.handleTopDrop);\n target.removeEventListener('drop', this.handleTopDropCapture, true);\n }\n }, {\n key: \"getCurrentSourceNodeOptions\",\n value: function getCurrentSourceNodeOptions() {\n var sourceId = this.monitor.getSourceId();\n var sourceNodeOptions = this.sourceNodeOptions.get(sourceId);\n return _objectSpread({\n dropEffect: this.altKeyPressed ? 'copy' : 'move'\n }, sourceNodeOptions || {});\n }\n }, {\n key: \"getCurrentDropEffect\",\n value: function getCurrentDropEffect() {\n if (this.isDraggingNativeItem()) {\n // It makes more sense to default to 'copy' for native resources\n return 'copy';\n }\n\n return this.getCurrentSourceNodeOptions().dropEffect;\n }\n }, {\n key: \"getCurrentSourcePreviewNodeOptions\",\n value: function getCurrentSourcePreviewNodeOptions() {\n var sourceId = this.monitor.getSourceId();\n var sourcePreviewNodeOptions = this.sourcePreviewNodeOptions.get(sourceId);\n return _objectSpread({\n anchorX: 0.5,\n anchorY: 0.5,\n captureDraggingState: false\n }, sourcePreviewNodeOptions || {});\n }\n }, {\n key: \"isDraggingNativeItem\",\n value: function isDraggingNativeItem() {\n var itemType = this.monitor.getItemType();\n return Object.keys(NativeTypes).some(function (key) {\n return NativeTypes[key] === itemType;\n });\n }\n }, {\n key: \"beginDragNativeItem\",\n value: function beginDragNativeItem(type, dataTransfer) {\n this.clearCurrentDragSourceNode();\n this.currentNativeSource = createNativeDragSource(type, dataTransfer);\n this.currentNativeHandle = this.registry.addSource(type, this.currentNativeSource);\n this.actions.beginDrag([this.currentNativeHandle]);\n }\n }, {\n key: \"setCurrentDragSourceNode\",\n value: function setCurrentDragSourceNode(node) {\n var _this5 = this;\n\n this.clearCurrentDragSourceNode();\n this.currentDragSourceNode = node; // A timeout of > 0 is necessary to resolve Firefox issue referenced\n // See:\n // * https://github.com/react-dnd/react-dnd/pull/928\n // * https://github.com/react-dnd/react-dnd/issues/869\n\n var MOUSE_MOVE_TIMEOUT = 1000; // Receiving a mouse event in the middle of a dragging operation\n // means it has ended and the drag source node disappeared from DOM,\n // so the browser didn't dispatch the dragend event.\n //\n // We need to wait before we start listening for mousemove events.\n // This is needed because the drag preview needs to be drawn or else it fires an 'mousemove' event\n // immediately in some browsers.\n //\n // See:\n // * https://github.com/react-dnd/react-dnd/pull/928\n // * https://github.com/react-dnd/react-dnd/issues/869\n //\n\n this.mouseMoveTimeoutTimer = setTimeout(function () {\n var _this5$rootElement;\n\n return (_this5$rootElement = _this5.rootElement) === null || _this5$rootElement === void 0 ? void 0 : _this5$rootElement.addEventListener('mousemove', _this5.endDragIfSourceWasRemovedFromDOM, true);\n }, MOUSE_MOVE_TIMEOUT);\n }\n }, {\n key: \"clearCurrentDragSourceNode\",\n value: function clearCurrentDragSourceNode() {\n if (this.currentDragSourceNode) {\n this.currentDragSourceNode = null;\n\n if (this.rootElement) {\n var _this$window2;\n\n (_this$window2 = this.window) === null || _this$window2 === void 0 ? void 0 : _this$window2.clearTimeout(this.mouseMoveTimeoutTimer || undefined);\n this.rootElement.removeEventListener('mousemove', this.endDragIfSourceWasRemovedFromDOM, true);\n }\n\n this.mouseMoveTimeoutTimer = null;\n return true;\n }\n\n return false;\n }\n }, {\n key: \"handleDragStart\",\n value: function handleDragStart(e, sourceId) {\n if (e.defaultPrevented) {\n return;\n }\n\n if (!this.dragStartSourceIds) {\n this.dragStartSourceIds = [];\n }\n\n this.dragStartSourceIds.unshift(sourceId);\n }\n }, {\n key: \"handleDragEnter\",\n value: function handleDragEnter(e, targetId) {\n this.dragEnterTargetIds.unshift(targetId);\n }\n }, {\n key: \"handleDragOver\",\n value: function handleDragOver(e, targetId) {\n if (this.dragOverTargetIds === null) {\n this.dragOverTargetIds = [];\n }\n\n this.dragOverTargetIds.unshift(targetId);\n }\n }, {\n key: \"handleDrop\",\n value: function handleDrop(e, targetId) {\n this.dropTargetIds.unshift(targetId);\n }\n }]);\n\n return HTML5BackendImpl;\n}();","var emptyImage;\nexport function getEmptyImage() {\n if (!emptyImage) {\n emptyImage = new Image();\n emptyImage.src = 'data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==';\n }\n\n return emptyImage;\n}","import { HTML5BackendImpl } from './HTML5BackendImpl';\nimport * as NativeTypes from './NativeTypes';\nexport { getEmptyImage } from './getEmptyImage';\nexport { NativeTypes };\nexport var HTML5Backend = function createBackend(manager, context, options) {\n return new HTML5BackendImpl(manager, context, options);\n};","import { useEffect } from \"react\";\nimport { useDrag } from \"react-dnd\";\nimport { getEmptyImage } from \"react-dnd-html5-backend\";\nimport { useTreeApi } from \"../context\";\nimport { actions as dnd } from \"../state/dnd-slice\";\nexport function useDragHook(node) {\n const tree = useTreeApi();\n const ids = tree.selectedIds;\n const [_, ref, preview] = useDrag(() => ({\n canDrag: () => node.isDraggable,\n type: \"NODE\",\n item: () => {\n // This is fired once at the begging of a drag operation\n const dragIds = tree.isSelected(node.id) ? Array.from(ids) : [node.id];\n tree.dispatch(dnd.dragStart(node.id, dragIds));\n return { id: node.id, dragIds };\n },\n end: () => {\n tree.hideCursor();\n tree.dispatch(dnd.dragEnd());\n },\n }), [ids, node]);\n useEffect(() => {\n preview(getEmptyImage());\n }, [preview]);\n return ref;\n}\n","import { bound, indexOf, isClosed, isItem, isOpenWithEmptyChildren, } from \"../utils\";\nfunction measureHover(el, offset) {\n const rect = el.getBoundingClientRect();\n const x = offset.x - Math.round(rect.x);\n const y = offset.y - Math.round(rect.y);\n const height = rect.height;\n const inTopHalf = y < height / 2;\n const inBottomHalf = !inTopHalf;\n const pad = height / 4;\n const inMiddle = y > pad && y < height - pad;\n const atTop = !inMiddle && inTopHalf;\n const atBottom = !inMiddle && inBottomHalf;\n return { x, inTopHalf, inBottomHalf, inMiddle, atTop, atBottom };\n}\nfunction getNodesAroundCursor(node, prev, next, hover) {\n if (!node) {\n // We're hovering over the empty part of the list, not over an item,\n // Put the cursor below the last item which is \"prev\"\n return [prev, null];\n }\n if (node.isInternal) {\n if (hover.atTop) {\n return [prev, node];\n }\n else if (hover.inMiddle) {\n return [node, node];\n }\n else {\n return [node, next];\n }\n }\n else {\n if (hover.inTopHalf) {\n return [prev, node];\n }\n else {\n return [node, next];\n }\n }\n}\nfunction dropAt(parentId, index) {\n return { parentId: parentId || null, index };\n}\nfunction lineCursor(index, level) {\n return {\n type: \"line\",\n index,\n level,\n };\n}\nfunction noCursor() {\n return {\n type: \"none\",\n };\n}\nfunction highlightCursor(id) {\n return {\n type: \"highlight\",\n id,\n };\n}\nfunction walkUpFrom(node, level) {\n var _a;\n let drop = node;\n while (drop.parent && drop.level > level) {\n drop = drop.parent;\n }\n const parentId = ((_a = drop.parent) === null || _a === void 0 ? void 0 : _a.id) || null;\n const index = indexOf(drop) + 1;\n return { parentId, index };\n}\n/**\n * This is the most complex, tricky function in the whole repo.\n */\nexport function computeDrop(args) {\n var _a;\n const hover = measureHover(args.element, args.offset);\n const indent = args.indent;\n const hoverLevel = Math.round(Math.max(0, hover.x - indent) / indent);\n const { node, nextNode, prevNode } = args;\n const [above, below] = getNodesAroundCursor(node, prevNode, nextNode, hover);\n /* Hovering over the middle of a folder */\n if (node && node.isInternal && hover.inMiddle) {\n return {\n drop: dropAt(node.id, null),\n cursor: highlightCursor(node.id),\n };\n }\n /*\n * Now we only need to care about the node above the cursor\n * ----------- -------\n */\n /* There is no node above the cursor line */\n if (!above) {\n return {\n drop: dropAt((_a = below === null || below === void 0 ? void 0 : below.parent) === null || _a === void 0 ? void 0 : _a.id, 0),\n cursor: lineCursor(0, 0),\n };\n }\n /* The node above the cursor line is an item */\n if (isItem(above)) {\n const level = bound(hoverLevel, (below === null || below === void 0 ? void 0 : below.level) || 0, above.level);\n return {\n drop: walkUpFrom(above, level),\n cursor: lineCursor(above.rowIndex + 1, level),\n };\n }\n /* The node above the cursor line is a closed folder */\n if (isClosed(above)) {\n const level = bound(hoverLevel, (below === null || below === void 0 ? void 0 : below.level) || 0, above.level);\n return {\n drop: walkUpFrom(above, level),\n cursor: lineCursor(above.rowIndex + 1, level),\n };\n }\n /* The node above the cursor line is an open folder with no children */\n if (isOpenWithEmptyChildren(above)) {\n const level = bound(hoverLevel, 0, above.level + 1);\n if (level > above.level) {\n /* Will be the first child of the empty folder */\n return {\n drop: dropAt(above.id, 0),\n cursor: lineCursor(above.rowIndex + 1, level),\n };\n }\n else {\n /* Will be a sibling or grandsibling of the empty folder */\n return {\n drop: walkUpFrom(above, level),\n cursor: lineCursor(above.rowIndex + 1, level),\n };\n }\n }\n /* The node above the cursor is a an open folder with children */\n return {\n drop: dropAt(above === null || above === void 0 ? void 0 : above.id, 0),\n cursor: lineCursor(above.rowIndex + 1, above.level + 1),\n };\n}\n","import { useDrop } from \"react-dnd\";\nimport { useTreeApi } from \"../context\";\nimport { computeDrop } from \"./compute-drop\";\nimport { actions as dnd } from \"../state/dnd-slice\";\nimport { safeRun } from \"../utils\";\nimport { ROOT_ID } from \"../data/create-root\";\nexport function useDropHook(el, node) {\n const tree = useTreeApi();\n const [_, dropRef] = useDrop(() => ({\n accept: \"NODE\",\n canDrop: () => tree.canDrop(),\n hover: (_item, m) => {\n const offset = m.getClientOffset();\n if (!el.current || !offset)\n return;\n const { cursor, drop } = computeDrop({\n element: el.current,\n offset: offset,\n indent: tree.indent,\n node: node,\n prevNode: node.prev,\n nextNode: node.next,\n });\n if (drop)\n tree.dispatch(dnd.hovering(drop.parentId, drop.index));\n if (m.canDrop()) {\n if (cursor)\n tree.showCursor(cursor);\n }\n else {\n tree.hideCursor();\n }\n },\n drop: (_, m) => {\n if (!m.canDrop())\n return null;\n let { parentId, index, dragIds } = tree.state.dnd;\n safeRun(tree.props.onMove, {\n dragIds,\n parentId: parentId === ROOT_ID ? null : parentId,\n index: index === null ? 0 : index, // When it's null it was dropped over a folder\n dragNodes: tree.dragNodes,\n parentNode: tree.get(parentId),\n });\n tree.open(parentId);\n },\n }), [node, el.current, tree.props]);\n return dropRef;\n}\n","import { useMemo } from \"react\";\nimport { useTreeApi } from \"../context\";\nexport function useFreshNode(index) {\n const tree = useTreeApi();\n const original = tree.at(index);\n if (!original)\n throw new Error(`Could not find node for index: ${index}`);\n return useMemo(() => {\n const fresh = original.clone();\n tree.visibleNodes[index] = fresh; // sneaky\n return fresh;\n // Return a fresh instance if the state values change\n }, [...Object.values(original.state), original]);\n}\n","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport React, { useCallback, useEffect, useMemo, useRef } from \"react\";\nimport { useDataUpdates, useNodesContext, useTreeApi } from \"../context\";\nimport { useDragHook } from \"../dnd/drag-hook\";\nimport { useDropHook } from \"../dnd/drop-hook\";\nimport { useFreshNode } from \"../hooks/use-fresh-node\";\nexport const RowContainer = React.memo(function RowContainer({ index, style, }) {\n /* When will the <Row> will re-render.\n *\n * The row component is memo'd so it will only render\n * when a new instance of the NodeApi class is passed\n * to it.\n *\n * The TreeApi instance is stable. It does not\n * change when the internal state changes.\n *\n * The TreeApi has all the references to the nodes.\n * We need to clone the nodes when their state\n * changes. The node class contains no state itself,\n * It always checks the tree for state. The tree's\n * state will always be up to date.\n */\n useDataUpdates(); // Re-render when tree props or visability changes\n const _ = useNodesContext(); // So that we re-render appropriately\n const tree = useTreeApi(); // Tree already has the fresh state\n const node = useFreshNode(index);\n const el = useRef(null);\n const dragRef = useDragHook(node);\n const dropRef = useDropHook(el, node);\n const innerRef = useCallback((n) => {\n el.current = n;\n dropRef(n);\n }, [dropRef]);\n const indent = tree.indent * node.level;\n const nodeStyle = useMemo(() => ({ paddingLeft: indent }), [indent]);\n const rowStyle = useMemo(() => {\n var _a, _b;\n return (Object.assign(Object.assign({}, style), { top: parseFloat(style.top) +\n ((_b = (_a = tree.props.padding) !== null && _a !== void 0 ? _a : tree.props.paddingTop) !== null && _b !== void 0 ? _b : 0) }));\n }, [style, tree.props.padding, tree.props.paddingTop]);\n const rowAttrs = {\n role: \"treeitem\",\n \"aria-level\": node.level + 1,\n \"aria-selected\": node.isSelected,\n \"aria-expanded\": node.isOpen,\n style: rowStyle,\n tabIndex: -1,\n className: tree.props.rowClassName,\n };\n useEffect(() => {\n var _a;\n if (!node.isEditing && node.isFocused) {\n (_a = el.current) === null || _a === void 0 ? void 0 : _a.focus({ preventScroll: true });\n }\n }, [node.isEditing, node.isFocused, el.current]);\n const Node = tree.renderNode;\n const Row = tree.renderRow;\n return (_jsx(Row, { node: node, innerRef: innerRef, attrs: rowAttrs, children: _jsx(Node, { node: node, tree: tree, style: nodeStyle, dragHandle: dragRef }) }));\n});\n","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { FixedSizeList } from \"react-window\";\nimport { useDataUpdates, useTreeApi } from \"../context\";\nimport { focusNextElement, focusPrevElement } from \"../utils\";\nimport { ListOuterElement } from \"./list-outer-element\";\nimport { ListInnerElement } from \"./list-inner-element\";\nimport { RowContainer } from \"./row-container\";\nlet focusSearchTerm = \"\";\nlet timeoutId = null;\n/**\n * All these keyboard shortcuts seem like they should be configurable.\n * Each operation should be a given a name and separated from\n * the event handler. Future clean up welcome.\n */\nexport function DefaultContainer() {\n useDataUpdates();\n const tree = useTreeApi();\n return (_jsx(\"div\", { role: \"tree\", style: {\n height: tree.height,\n width: tree.width,\n minHeight: 0,\n minWidth: 0,\n }, onContextMenu: tree.props.onContextMenu, onClick: tree.props.onClick, tabIndex: 0, onFocus: (e) => {\n if (!e.currentTarget.contains(e.relatedTarget)) {\n tree.onFocus();\n }\n }, onBlur: (e) => {\n if (!e.currentTarget.contains(e.relatedTarget)) {\n tree.onBlur();\n }\n }, onKeyDown: (e) => {\n var _a;\n if (tree.isEditing) {\n return;\n }\n if (e.key === \"Backspace\") {\n if (!tree.props.onDelete)\n return;\n const ids = Array.from(tree.selectedIds);\n if (ids.length > 1) {\n let nextFocus = tree.mostRecentNode;\n while (nextFocus && nextFocus.isSelected) {\n nextFocus = nextFocus.nextSibling;\n }\n if (!nextFocus)\n nextFocus = tree.lastNode;\n tree.focus(nextFocus, { scroll: false });\n tree.delete(Array.from(ids));\n }\n else {\n const node = tree.focusedNode;\n if (node) {\n const sib = node.nextSibling;\n const parent = node.parent;\n tree.focus(sib || parent, { scroll: false });\n tree.delete(node);\n }\n }\n return;\n }\n if (e.key === \"Tab\" && !e.shiftKey) {\n e.preventDefault();\n focusNextElement(e.currentTarget);\n return;\n }\n if (e.key === \"Tab\" && e.shiftKey) {\n e.preventDefault();\n focusPrevElement(e.currentTarget);\n return;\n }\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n const next = tree.nextNode;\n if (e.metaKey) {\n tree.select(tree.focusedNode);\n tree.activate(tree.focusedNode);\n return;\n }\n else if (!e.shiftKey || tree.props.disableMultiSelection) {\n tree.focus(next);\n return;\n }\n else {\n if (!next)\n return;\n const current = tree.focusedNode;\n if (!current) {\n tree.focus(tree.firstNode);\n }\n else if (current.isSelected) {\n tree.selectContiguous(next);\n }\n else {\n tree.selectMulti(next);\n }\n return;\n }\n }\n if (e.key === \"ArrowUp\") {\n e.preventDefault();\n const prev = tree.prevNode;\n if (!e.shiftKey || tree.props.disableMultiSelection) {\n tree.focus(prev);\n return;\n }\n else {\n if (!prev)\n return;\n const current = tree.focusedNode;\n if (!current) {\n tree.focus(tree.lastNode); // ?\n }\n else if (current.isSelected) {\n tree.selectContiguous(prev);\n }\n else {\n tree.selectMulti(prev);\n }\n return;\n }\n }\n if (e.key === \"ArrowRight\") {\n const node = tree.focusedNode;\n if (!node)\n return;\n if (node.isInternal && node.isOpen) {\n tree.focus(tree.nextNode);\n }\n else if (node.isInternal)\n tree.open(node.id);\n return;\n }\n if (e.key === \"ArrowLeft\") {\n const node = tree.focusedNode;\n if (!node || node.isRoot)\n return;\n if (node.isInternal && node.isOpen)\n tree.close(node.id);\n else if (!((_a = node.parent) === null || _a === void 0 ? void 0 : _a.isRoot)) {\n tree.focus(node.parent);\n }\n return;\n }\n if (e.key === \"a\" && e.metaKey && !tree.props.disableMultiSelection) {\n e.preventDefault();\n tree.selectAll();\n return;\n }\n if (e.key === \"a\" && !e.metaKey && tree.props.onCreate) {\n tree.createLeaf();\n return;\n }\n if (e.key === \"A\" && !e.metaKey) {\n if (!tree.props.onCreate)\n return;\n tree.createInternal();\n return;\n }\n if (e.key === \"Home\") {\n // add shift keys\n e.preventDefault();\n tree.focus(tree.firstNode);\n return;\n }\n if (e.key === \"End\") {\n // add shift keys\n e.preventDefault();\n tree.focus(tree.lastNode);\n return;\n }\n if (e.key === \"Enter\") {\n const node = tree.focusedNode;\n if (!node)\n return;\n if (!node.isEditable || !tree.props.onRename)\n return;\n setTimeout(() => {\n if (node)\n tree.edit(node);\n });\n return;\n }\n if (e.key === \" \") {\n e.preventDefault();\n const node = tree.focusedNode;\n if (!node)\n return;\n if (node.isLeaf) {\n node.select();\n node.activate();\n }\n else {\n node.toggle();\n }\n return;\n }\n if (e.key === \"*\") {\n const node = tree.focusedNode;\n if (!node)\n return;\n tree.openSiblings(node);\n return;\n }\n if (e.key === \"PageUp\") {\n e.preventDefault();\n tree.pageUp();\n return;\n }\n if (e.key === \"PageDown\") {\n e.preventDefault();\n tree.pageDown();\n }\n // If they type a sequence of characters\n // collect them. Reset them after a timeout.\n // Use it to search the tree for a node, then focus it.\n // Clean this up a bit later\n clearTimeout(timeoutId);\n focusSearchTerm += e.key;\n timeoutId = setTimeout(() => {\n focusSearchTerm = \"\";\n }, 600);\n const node = tree.visibleNodes.find((n) => {\n // @ts-ignore\n const name = n.data.name;\n if (typeof name === \"string\") {\n return name.toLowerCase().startsWith(focusSearchTerm);\n }\n else\n return false;\n });\n if (node)\n tree.focus(node.id);\n }, children: _jsx(FixedSizeList, { className: tree.props.className, outerRef: tree.listEl, itemCount: tree.visibleNodes.length, height: tree.height, width: tree.width, itemSize: tree.rowHeight, overscanCount: tree.overscanCount, itemKey: (index) => { var _a; return ((_a = tree.visibleNodes[index]) === null || _a === void 0 ? void 0 : _a.id) || index; }, outerElementType: ListOuterElement, innerElementType: ListInnerElement, onScroll: tree.props.onScroll, onItemsRendered: tree.onItemsRendered.bind(tree), ref: tree.list, children: RowContainer }) }));\n}\n","export function createList(tree) {\n if (tree.isFiltered) {\n return flattenAndFilterTree(tree.root, tree.isMatch.bind(tree));\n }\n else {\n return flattenTree(tree.root);\n }\n}\nfunction flattenTree(root) {\n const list = [];\n function collect(node) {\n var _a;\n if (node.level >= 0) {\n list.push(node);\n }\n if (node.isOpen) {\n (_a = node.children) === null || _a === void 0 ? void 0 : _a.forEach(collect);\n }\n }\n collect(root);\n list.forEach(assignRowIndex);\n return list;\n}\nfunction flattenAndFilterTree(root, isMatch) {\n const matches = {};\n const list = [];\n function markMatch(node) {\n const yes = !node.isRoot && isMatch(node);\n if (yes) {\n matches[node.id] = true;\n let parent = node.parent;\n while (parent) {\n matches[parent.id] = true;\n parent = parent.parent;\n }\n }\n if (node.children) {\n for (let child of node.children)\n markMatch(child);\n }\n }\n function collect(node) {\n var _a;\n if (node.level >= 0 && matches[node.id]) {\n list.push(node);\n }\n if (node.isOpen) {\n (_a = node.children) === null || _a === void 0 ? void 0 : _a.forEach(collect);\n }\n }\n markMatch(root);\n collect(root);\n list.forEach(assignRowIndex);\n return list;\n}\nfunction assignRowIndex(node, index) {\n node.rowIndex = index;\n}\n","export const createIndex = (nodes) => {\n return nodes.reduce((map, node, index) => {\n map[node.id] = index;\n return map;\n }, {});\n};\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport * as utils from \"../utils\";\nimport { DefaultCursor } from \"../components/default-cursor\";\nimport { DefaultRow } from \"../components/default-row\";\nimport { DefaultNode } from \"../components/default-node\";\nimport { edit } from \"../state/edit-slice\";\nimport { focus, treeBlur } from \"../state/focus-slice\";\nimport { createRoot, ROOT_ID } from \"../data/create-root\";\nimport { actions as visibility } from \"../state/open-slice\";\nimport { actions as selection } from \"../state/selection-slice\";\nimport { actions as dnd } from \"../state/dnd-slice\";\nimport { DefaultDragPreview } from \"../components/default-drag-preview\";\nimport { DefaultContainer } from \"../components/default-container\";\nimport { createList } from \"../data/create-list\";\nimport { createIndex } from \"../data/create-index\";\nconst { safeRun, identify, identifyNull } = utils;\nexport class TreeApi {\n constructor(store, props, list, listEl) {\n this.store = store;\n this.props = props;\n this.list = list;\n this.listEl = listEl;\n this.visibleStartIndex = 0;\n this.visibleStopIndex = 0;\n /* Changes here must also be made in update() */\n this.root = createRoot(this);\n this.visibleNodes = createList(this);\n this.idToIndex = createIndex(this.visibleNodes);\n }\n /* Changes here must also be made in constructor() */\n update(props) {\n this.props = props;\n this.root = createRoot(this);\n this.visibleNodes = createList(this);\n this.idToIndex = createIndex(this.visibleNodes);\n }\n /* Store helpers */\n dispatch(action) {\n return this.store.dispatch(action);\n }\n get state() {\n return this.store.getState();\n }\n get openState() {\n return this.state.nodes.open.unfiltered;\n }\n /* Tree Props */\n get width() {\n var _a;\n return (_a = this.props.width) !== null && _a !== void 0 ? _a : 300;\n }\n get height() {\n var _a;\n return (_a = this.props.height) !== null && _a !== void 0 ? _a : 500;\n }\n get indent() {\n var _a;\n return (_a = this.props.indent) !== null && _a !== void 0 ? _a : 24;\n }\n get rowHeight() {\n var _a;\n return (_a = this.props.rowHeight) !== null && _a !== void 0 ? _a : 24;\n }\n get overscanCount() {\n var _a;\n return (_a = this.props.overscanCount) !== null && _a !== void 0 ? _a : 1;\n }\n get searchTerm() {\n return (this.props.searchTerm || \"\").trim();\n }\n get matchFn() {\n var _a;\n const match = (_a = this.props.searchMatch) !== null && _a !== void 0 ? _a : ((node, term) => {\n const string = JSON.stringify(Object.values(node.data));\n return string.toLocaleLowerCase().includes(term.toLocaleLowerCase());\n });\n return (node) => match(node, this.searchTerm);\n }\n accessChildren(data) {\n var _a;\n const get = this.props.childrenAccessor || \"children\";\n return (_a = utils.access(data, get)) !== null && _a !== void 0 ? _a : null;\n }\n accessId(data) {\n const get = this.props.idAccessor || \"id\";\n const id = utils.access(data, get);\n if (!id)\n throw new Error(\"Data must contain an 'id' property or props.idAccessor must return a string\");\n return id;\n }\n /* Node Access */\n get firstNode() {\n var _a;\n return (_a = this.visibleNodes[0]) !== null && _a !== void 0 ? _a : null;\n }\n get lastNode() {\n var _a;\n return (_a = this.visibleNodes[this.visibleNodes.length - 1]) !== null && _a !== void 0 ? _a : null;\n }\n get focusedNode() {\n var _a;\n return (_a = this.get(this.state.nodes.focus.id)) !== null && _a !== void 0 ? _a : null;\n }\n get mostRecentNode() {\n var _a;\n return (_a = this.get(this.state.nodes.selection.mostRecent)) !== null && _a !== void 0 ? _a : null;\n }\n get nextNode() {\n const index = this.indexOf(this.focusedNode);\n if (index === null)\n return null;\n else\n return this.at(index + 1);\n }\n get prevNode() {\n const index = this.indexOf(this.focusedNode);\n if (index === null)\n return null;\n else\n return this.at(index - 1);\n }\n get(id) {\n if (!id)\n return null;\n if (id in this.idToIndex)\n return this.visibleNodes[this.idToIndex[id]] || null;\n else\n return null;\n }\n at(index) {\n return this.visibleNodes[index] || null;\n }\n nodesBetween(startId, endId) {\n var _a;\n if (startId === null || endId === null)\n return [];\n const index1 = (_a = this.indexOf(startId)) !== null && _a !== void 0 ? _a : 0;\n const index2 = this.indexOf(endId);\n if (index2 === null)\n return [];\n const start = Math.min(index1, index2);\n const end = Math.max(index1, index2);\n return this.visibleNodes.slice(start, end + 1);\n }\n indexOf(id) {\n const key = utils.identifyNull(id);\n if (!key)\n return null;\n return this.idToIndex[key];\n }\n /* Data Operations */\n get editingId() {\n return this.state.nodes.edit.id;\n }\n createInternal() {\n return this.create({ type: \"internal\" });\n }\n createLeaf() {\n return this.create({ type: \"leaf\" });\n }\n create() {\n return __awaiter(this, arguments, void 0, function* (opts = {}) {\n var _a, _b;\n const parentId = opts.parentId === undefined\n ? utils.getInsertParentId(this)\n : opts.parentId;\n const index = (_a = opts.index) !== null && _a !== void 0 ? _a : utils.getInsertIndex(this);\n const type = (_b = opts.type) !== null && _b !== void 0 ? _b : \"leaf\";\n const data = yield safeRun(this.props.onCreate, {\n type,\n parentId,\n index,\n parentNode: this.get(parentId),\n });\n if (data) {\n this.focus(data);\n setTimeout(() => {\n this.edit(data).then(() => {\n this.select(data);\n this.activate(data);\n });\n });\n }\n });\n }\n delete(node) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!node)\n return;\n const idents = Array.isArray(node) ? node : [node];\n const ids = idents.map(identify);\n const nodes = ids.map((id) => this.get(id)).filter((n) => !!n);\n yield safeRun(this.props.onDelete, { nodes, ids });\n });\n }\n edit(node) {\n const id = identify(node);\n this.resolveEdit({ cancelled: true });\n this.scrollTo(id);\n this.dispatch(edit(id));\n return new Promise((resolve) => {\n TreeApi.editPromise = resolve;\n });\n }\n submit(identity, value) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!identity)\n return;\n const id = identify(identity);\n yield safeRun(this.props.onRename, {\n id,\n name: value,\n node: this.get(id),\n });\n this.dispatch(edit(null));\n this.resolveEdit({ cancelled: false, value });\n setTimeout(() => this.onFocus()); // Return focus to element;\n });\n }\n reset() {\n this.dispatch(edit(null));\n this.resolveEdit({ cancelled: true });\n setTimeout(() => this.onFocus()); // Return focus to element;\n }\n activate(id) {\n const node = this.get(identifyNull(id));\n if (!node)\n return;\n safeRun(this.props.onActivate, node);\n }\n resolveEdit(value) {\n const resolve = TreeApi.editPromise;\n if (resolve)\n resolve(value);\n TreeApi.editPromise = null;\n }\n /* Focus and Selection */\n get selectedIds() {\n return this.state.nodes.selection.ids;\n }\n get selectedNodes() {\n let nodes = [];\n for (let id of Array.from(this.selectedIds)) {\n const node = this.get(id);\n if (node)\n nodes.push(node);\n }\n return nodes;\n }\n focus(node, opts = {}) {\n if (!node)\n return;\n /* Focus is responsible for scrolling, while selection is\n * responsible for focus. If selectionFollowsFocus, then\n * just select it. */\n if (this.props.selectionFollowsFocus) {\n this.select(node);\n }\n else {\n this.dispatch(focus(identify(node)));\n if (opts.scroll !== false)\n this.scrollTo(node);\n if (this.focusedNode)\n safeRun(this.props.onFocus, this.focusedNode);\n }\n }\n pageUp() {\n var _a, _b;\n const start = this.visibleStartIndex;\n const stop = this.visibleStopIndex;\n const page = stop - start;\n let index = (_b = (_a = this.focusedNode) === null || _a === void 0 ? void 0 : _a.rowIndex) !== null && _b !== void 0 ? _b : 0;\n if (index > start) {\n index = start;\n }\n else {\n index = Math.max(start - page, 0);\n }\n this.focus(this.at(index));\n }\n pageDown() {\n var _a, _b;\n const start = this.visibleStartIndex;\n const stop = this.visibleStopIndex;\n const page = stop - start;\n let index = (_b = (_a = this.focusedNode) === null || _a === void 0 ? void 0 : _a.rowIndex) !== null && _b !== void 0 ? _b : 0;\n if (index < stop) {\n index = stop;\n }\n else {\n index = Math.min(index + page, this.visibleNodes.length - 1);\n }\n this.focus(this.at(index));\n }\n select(node, opts = {}) {\n if (!node)\n return;\n const changeFocus = opts.focus !== false;\n const id = identify(node);\n if (changeFocus)\n this.dispatch(focus(id));\n this.dispatch(selection.only(id));\n this.dispatch(selection.anchor(id));\n this.dispatch(selection.mostRecent(id));\n this.scrollTo(id, opts.align);\n if (this.focusedNode && changeFocus) {\n safeRun(this.props.onFocus, this.focusedNode);\n }\n safeRun(this.props.onSelect, this.selectedNodes);\n }\n deselect(node) {\n if (!node)\n return;\n const id = identify(node);\n this.dispatch(selection.remove(id));\n safeRun(this.props.onSelect, this.selectedNodes);\n }\n selectMulti(identity) {\n const node = this.get(identifyNull(identity));\n if (!node)\n return;\n this.dispatch(focus(node.id));\n this.dispatch(selection.add(node.id));\n this.dispatch(selection.anchor(node.id));\n this.dispatch(selection.mostRecent(node.id));\n this.scrollTo(node);\n if (this.focusedNode)\n safeRun(this.props.onFocus, this.focusedNode);\n safeRun(this.props.onSelect, this.selectedNodes);\n }\n selectContiguous(identity) {\n if (!identity)\n return;\n const id = identify(identity);\n const { anchor, mostRecent } = this.state.nodes.selection;\n this.dispatch(focus(id));\n this.dispatch(selection.remove(this.nodesBetween(anchor, mostRecent)));\n this.dispatch(selection.add(this.nodesBetween(anchor, identifyNull(id))));\n this.dispatch(selection.mostRecent(id));\n this.scrollTo(id);\n if (this.focusedNode)\n safeRun(this.props.onFocus, this.focusedNode);\n safeRun(this.props.onSelect, this.selectedNodes);\n }\n deselectAll() {\n this.setSelection({ ids: [], anchor: null, mostRecent: null });\n safeRun(this.props.onSelect, this.selectedNodes);\n }\n selectAll() {\n var _a;\n this.setSelection({\n ids: Object.keys(this.idToIndex),\n anchor: this.firstNode,\n mostRecent: this.lastNode,\n });\n this.dispatch(focus((_a = this.lastNode) === null || _a === void 0 ? void 0 : _a.id));\n if (this.focusedNode)\n safeRun(this.props.onFocus, this.focusedNode);\n safeRun(this.props.onSelect, this.selectedNodes);\n }\n setSelection(args) {\n var _a;\n const ids = new Set((_a = args.ids) === null || _a === void 0 ? void 0 : _a.map(identify));\n const anchor = identifyNull(args.anchor);\n const mostRecent = identifyNull(args.mostRecent);\n this.dispatch(selection.set({ ids, anchor, mostRecent }));\n safeRun(this.props.onSelect, this.selectedNodes);\n }\n /* Drag and Drop */\n get cursorParentId() {\n const { cursor } = this.state.dnd;\n switch (cursor.type) {\n case \"highlight\":\n return cursor.id;\n default:\n return null;\n }\n }\n get cursorOverFolder() {\n return this.state.dnd.cursor.type === \"highlight\";\n }\n get dragNodes() {\n return this.state.dnd.dragIds\n .map((id) => this.get(id))\n .filter((n) => !!n);\n }\n get dragNode() {\n return this.get(this.state.nodes.drag.id);\n }\n get dragDestinationParent() {\n return this.get(this.state.nodes.drag.destinationParentId);\n }\n get dragDestinationIndex() {\n return this.state.nodes.drag.destinationIndex;\n }\n canDrop() {\n var _a;\n if (this.isFiltered)\n return false;\n const parentNode = (_a = this.get(this.state.dnd.parentId)) !== null && _a !== void 0 ? _a : this.root;\n const dragNodes = this.dragNodes;\n const isDisabled = this.props.disableDrop;\n for (const drag of dragNodes) {\n if (!drag)\n return false;\n if (!parentNode)\n return false;\n if (drag.isInternal && utils.isDescendant(parentNode, drag))\n return false;\n }\n // Allow the user to insert their own logic\n if (typeof isDisabled == \"function\") {\n return !isDisabled({\n parentNode,\n dragNodes: this.dragNodes,\n index: this.state.dnd.index || 0,\n });\n }\n else if (typeof isDisabled == \"string\") {\n // @ts-ignore\n return !parentNode.data[isDisabled];\n }\n else if (typeof isDisabled === \"boolean\") {\n return !isDisabled;\n }\n else {\n return true;\n }\n }\n hideCursor() {\n this.dispatch(dnd.cursor({ type: \"none\" }));\n }\n showCursor(cursor) {\n this.dispatch(dnd.cursor(cursor));\n }\n /* Visibility */\n open(identity) {\n const id = identifyNull(identity);\n if (!id)\n return;\n if (this.isOpen(id))\n return;\n this.dispatch(visibility.open(id, this.isFiltered));\n safeRun(this.props.onToggle, id);\n }\n close(identity) {\n const id = identifyNull(identity);\n if (!id)\n return;\n if (!this.isOpen(id))\n return;\n this.dispatch(visibility.close(id, this.isFiltered));\n safeRun(this.props.onToggle, id);\n }\n toggle(identity) {\n const id = identifyNull(identity);\n if (!id)\n return;\n return this.isOpen(id) ? this.close(id) : this.open(id);\n }\n openParents(identity) {\n const id = identifyNull(identity);\n if (!id)\n return;\n const node = utils.dfs(this.root, id);\n let parent = node === null || node === void 0 ? void 0 : node.parent;\n while (parent) {\n this.open(parent.id);\n parent = parent.parent;\n }\n }\n openSiblings(node) {\n const parent = node.parent;\n if (!parent) {\n this.toggle(node.id);\n }\n else if (parent.children) {\n const isOpen = node.isOpen;\n for (let sibling of parent.children) {\n if (sibling.isInternal) {\n isOpen ? this.close(sibling.id) : this.open(sibling.id);\n }\n }\n this.scrollTo(this.focusedNode);\n }\n }\n openAll() {\n utils.walk(this.root, (node) => {\n if (node.isInternal)\n node.open();\n });\n }\n closeAll() {\n utils.walk(this.root, (node) => {\n if (node.isInternal)\n node.close();\n });\n }\n /* Scrolling */\n scrollTo(identity, align = \"smart\") {\n if (!identity)\n return;\n const id = identify(identity);\n this.openParents(id);\n return utils\n .waitFor(() => id in this.idToIndex)\n .then(() => {\n var _a;\n const index = this.idToIndex[id];\n if (index === undefined)\n return;\n (_a = this.list.current) === null || _a === void 0 ? void 0 : _a.scrollToItem(index, align);\n })\n .catch(() => {\n // Id: ${id} never appeared in the list.\n });\n }\n /* State Checks */\n get isEditing() {\n return this.state.nodes.edit.id !== null;\n }\n get isFiltered() {\n var _a;\n return !!((_a = this.props.searchTerm) === null || _a === void 0 ? void 0 : _a.trim());\n }\n get hasFocus() {\n return this.state.nodes.focus.treeFocused;\n }\n get hasNoSelection() {\n return this.state.nodes.selection.ids.size === 0;\n }\n get hasOneSelection() {\n return this.state.nodes.selection.ids.size === 1;\n }\n get hasMultipleSelections() {\n return this.state.nodes.selection.ids.size > 1;\n }\n isSelected(id) {\n if (!id)\n return false;\n return this.state.nodes.selection.ids.has(id);\n }\n isOpen(id) {\n var _a, _b, _c;\n if (!id)\n return false;\n if (id === ROOT_ID)\n return true;\n const def = (_a = this.props.openByDefault) !== null && _a !== void 0 ? _a : true;\n if (this.isFiltered) {\n return (_b = this.state.nodes.open.filtered[id]) !== null && _b !== void 0 ? _b : true; // Filtered folders are always opened by default\n }\n else {\n return (_c = this.state.nodes.open.unfiltered[id]) !== null && _c !== void 0 ? _c : def;\n }\n }\n isEditable(data) {\n const check = this.props.disableEdit || (() => false);\n return !utils.access(data, check);\n }\n isDraggable(data) {\n const check = this.props.disableDrag || (() => false);\n return !utils.access(data, check);\n }\n isDragging(node) {\n const id = identifyNull(node);\n if (!id)\n return false;\n return this.state.nodes.drag.id === id;\n }\n isFocused(id) {\n return this.hasFocus && this.state.nodes.focus.id === id;\n }\n isMatch(node) {\n return this.matchFn(node);\n }\n willReceiveDrop(node) {\n const id = identifyNull(node);\n if (!id)\n return false;\n const { destinationParentId, destinationIndex } = this.state.nodes.drag;\n return id === destinationParentId && destinationIndex === null;\n }\n /* Tree Event Handlers */\n onFocus() {\n const node = this.focusedNode || this.firstNode;\n if (node)\n this.dispatch(focus(node.id));\n }\n onBlur() {\n this.dispatch(treeBlur());\n }\n onItemsRendered(args) {\n this.visibleStartIndex = args.visibleStartIndex;\n this.visibleStopIndex = args.visibleStopIndex;\n }\n /* Get Renderers */\n get renderContainer() {\n return this.props.renderContainer || DefaultContainer;\n }\n get renderRow() {\n return this.props.renderRow || DefaultRow;\n }\n get renderNode() {\n return this.props.children || DefaultNode;\n }\n get renderDragPreview() {\n return this.props.renderDragPreview || DefaultDragPreview;\n }\n get renderCursor() {\n return this.props.renderCursor || DefaultCursor;\n }\n}\n","// src/utils/formatProdErrorMessage.ts\nfunction formatProdErrorMessage(code) {\n return `Minified Redux error #${code}; visit https://redux.js.org/Errors?code=${code} for the full message or use the non-minified dev environment for full errors. `;\n}\n\n// src/utils/symbol-observable.ts\nvar $$observable = /* @__PURE__ */ (() => typeof Symbol === \"function\" && Symbol.observable || \"@@observable\")();\nvar symbol_observable_default = $$observable;\n\n// src/utils/actionTypes.ts\nvar randomString = () => Math.random().toString(36).substring(7).split(\"\").join(\".\");\nvar ActionTypes = {\n INIT: `@@redux/INIT${/* @__PURE__ */ randomString()}`,\n REPLACE: `@@redux/REPLACE${/* @__PURE__ */ randomString()}`,\n PROBE_UNKNOWN_ACTION: () => `@@redux/PROBE_UNKNOWN_ACTION${randomString()}`\n};\nvar actionTypes_default = ActionTypes;\n\n// src/utils/isPlainObject.ts\nfunction isPlainObject(obj) {\n if (typeof obj !== \"object\" || obj === null)\n return false;\n let proto = obj;\n while (Object.getPrototypeOf(proto) !== null) {\n proto = Object.getPrototypeOf(proto);\n }\n return Object.getPrototypeOf(obj) === proto || Object.getPrototypeOf(obj) === null;\n}\n\n// src/utils/kindOf.ts\nfunction miniKindOf(val) {\n if (val === void 0)\n return \"undefined\";\n if (val === null)\n return \"null\";\n const type = typeof val;\n switch (type) {\n case \"boolean\":\n case \"string\":\n case \"number\":\n case \"symbol\":\n case \"function\": {\n return type;\n }\n }\n if (Array.isArray(val))\n return \"array\";\n if (isDate(val))\n return \"date\";\n if (isError(val))\n return \"error\";\n const constructorName = ctorName(val);\n switch (constructorName) {\n case \"Symbol\":\n case \"Promise\":\n case \"WeakMap\":\n case \"WeakSet\":\n case \"Map\":\n case \"Set\":\n return constructorName;\n }\n return Object.prototype.toString.call(val).slice(8, -1).toLowerCase().replace(/\\s/g, \"\");\n}\nfunction ctorName(val) {\n return typeof val.constructor === \"function\" ? val.constructor.name : null;\n}\nfunction isError(val) {\n return val instanceof Error || typeof val.message === \"string\" && val.constructor && typeof val.constructor.stackTraceLimit === \"number\";\n}\nfunction isDate(val) {\n if (val instanceof Date)\n return true;\n return typeof val.toDateString === \"function\" && typeof val.getDate === \"function\" && typeof val.setDate === \"function\";\n}\nfunction kindOf(val) {\n let typeOfVal = typeof val;\n if (process.env.NODE_ENV !== \"production\") {\n typeOfVal = miniKindOf(val);\n }\n return typeOfVal;\n}\n\n// src/createStore.ts\nfunction createStore(reducer, preloadedState, enhancer) {\n if (typeof reducer !== \"function\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(2) : `Expected the root reducer to be a function. Instead, received: '${kindOf(reducer)}'`);\n }\n if (typeof preloadedState === \"function\" && typeof enhancer === \"function\" || typeof enhancer === \"function\" && typeof arguments[3] === \"function\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(0) : \"It looks like you are passing several store enhancers to createStore(). This is not supported. Instead, compose them together to a single function. See https://redux.js.org/tutorials/fundamentals/part-4-store#creating-a-store-with-enhancers for an example.\");\n }\n if (typeof preloadedState === \"function\" && typeof enhancer === \"undefined\") {\n enhancer = preloadedState;\n preloadedState = void 0;\n }\n if (typeof enhancer !== \"undefined\") {\n if (typeof enhancer !== \"function\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(1) : `Expected the enhancer to be a function. Instead, received: '${kindOf(enhancer)}'`);\n }\n return enhancer(createStore)(reducer, preloadedState);\n }\n let currentReducer = reducer;\n let currentState = preloadedState;\n let currentListeners = /* @__PURE__ */ new Map();\n let nextListeners = currentListeners;\n let listenerIdCounter = 0;\n let isDispatching = false;\n function ensureCanMutateNextListeners() {\n if (nextListeners === currentListeners) {\n nextListeners = /* @__PURE__ */ new Map();\n currentListeners.forEach((listener, key) => {\n nextListeners.set(key, listener);\n });\n }\n }\n function getState() {\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(3) : \"You may not call store.getState() while the reducer is executing. The reducer has already received the state as an argument. Pass it down from the top reducer instead of reading it from the store.\");\n }\n return currentState;\n }\n function subscribe(listener) {\n if (typeof listener !== \"function\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(4) : `Expected the listener to be a function. Instead, received: '${kindOf(listener)}'`);\n }\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(5) : \"You may not call store.subscribe() while the reducer is executing. If you would like to be notified after the store has been updated, subscribe from a component and invoke store.getState() in the callback to access the latest state. See https://redux.js.org/api/store#subscribelistener for more details.\");\n }\n let isSubscribed = true;\n ensureCanMutateNextListeners();\n const listenerId = listenerIdCounter++;\n nextListeners.set(listenerId, listener);\n return function unsubscribe() {\n if (!isSubscribed) {\n return;\n }\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(6) : \"You may not unsubscribe from a store listener while the reducer is executing. See https://redux.js.org/api/store#subscribelistener for more details.\");\n }\n isSubscribed = false;\n ensureCanMutateNextListeners();\n nextListeners.delete(listenerId);\n currentListeners = null;\n };\n }\n function dispatch(action) {\n if (!isPlainObject(action)) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(7) : `Actions must be plain objects. Instead, the actual type was: '${kindOf(action)}'. You may need to add middleware to your store setup to handle dispatching other values, such as 'redux-thunk' to handle dispatching functions. See https://redux.js.org/tutorials/fundamentals/part-4-store#middleware and https://redux.js.org/tutorials/fundamentals/part-6-async-logic#using-the-redux-thunk-middleware for examples.`);\n }\n if (typeof action.type === \"undefined\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(8) : 'Actions may not have an undefined \"type\" property. You may have misspelled an action type string constant.');\n }\n if (typeof action.type !== \"string\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(17) : `Action \"type\" property must be a string. Instead, the actual type was: '${kindOf(action.type)}'. Value was: '${action.type}' (stringified)`);\n }\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(9) : \"Reducers may not dispatch actions.\");\n }\n try {\n isDispatching = true;\n currentState = currentReducer(currentState, action);\n } finally {\n isDispatching = false;\n }\n const listeners = currentListeners = nextListeners;\n listeners.forEach((listener) => {\n listener();\n });\n return action;\n }\n function replaceReducer(nextReducer) {\n if (typeof nextReducer !== \"function\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(10) : `Expected the nextReducer to be a function. Instead, received: '${kindOf(nextReducer)}`);\n }\n currentReducer = nextReducer;\n dispatch({\n type: actionTypes_default.REPLACE\n });\n }\n function observable() {\n const outerSubscribe = subscribe;\n return {\n /**\n * The minimal observable subscription method.\n * @param observer Any object that can be used as an observer.\n * The observer object should have a `next` method.\n * @returns An object with an `unsubscribe` method that can\n * be used to unsubscribe the observable from the store, and prevent further\n * emission of values from the observable.\n */\n subscribe(observer) {\n if (typeof observer !== \"object\" || observer === null) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(11) : `Expected the observer to be an object. Instead, received: '${kindOf(observer)}'`);\n }\n function observeState() {\n const observerAsObserver = observer;\n if (observerAsObserver.next) {\n observerAsObserver.next(getState());\n }\n }\n observeState();\n const unsubscribe = outerSubscribe(observeState);\n return {\n unsubscribe\n };\n },\n [symbol_observable_default]() {\n return this;\n }\n };\n }\n dispatch({\n type: actionTypes_default.INIT\n });\n const store = {\n dispatch,\n subscribe,\n getState,\n replaceReducer,\n [symbol_observable_default]: observable\n };\n return store;\n}\nfunction legacy_createStore(reducer, preloadedState, enhancer) {\n return createStore(reducer, preloadedState, enhancer);\n}\n\n// src/utils/warning.ts\nfunction warning(message) {\n if (typeof console !== \"undefined\" && typeof console.error === \"function\") {\n console.error(message);\n }\n try {\n throw new Error(message);\n } catch (e) {\n }\n}\n\n// src/combineReducers.ts\nfunction getUnexpectedStateShapeWarningMessage(inputState, reducers, action, unexpectedKeyCache) {\n const reducerKeys = Object.keys(reducers);\n const argumentName = action && action.type === actionTypes_default.INIT ? \"preloadedState argument passed to createStore\" : \"previous state received by the reducer\";\n if (reducerKeys.length === 0) {\n return \"Store does not have a valid reducer. Make sure the argument passed to combineReducers is an object whose values are reducers.\";\n }\n if (!isPlainObject(inputState)) {\n return `The ${argumentName} has unexpected type of \"${kindOf(inputState)}\". Expected argument to be an object with the following keys: \"${reducerKeys.join('\", \"')}\"`;\n }\n const unexpectedKeys = Object.keys(inputState).filter((key) => !reducers.hasOwnProperty(key) && !unexpectedKeyCache[key]);\n unexpectedKeys.forEach((key) => {\n unexpectedKeyCache[key] = true;\n });\n if (action && action.type === actionTypes_default.REPLACE)\n return;\n if (unexpectedKeys.length > 0) {\n return `Unexpected ${unexpectedKeys.length > 1 ? \"keys\" : \"key\"} \"${unexpectedKeys.join('\", \"')}\" found in ${argumentName}. Expected to find one of the known reducer keys instead: \"${reducerKeys.join('\", \"')}\". Unexpected keys will be ignored.`;\n }\n}\nfunction assertReducerShape(reducers) {\n Object.keys(reducers).forEach((key) => {\n const reducer = reducers[key];\n const initialState = reducer(void 0, {\n type: actionTypes_default.INIT\n });\n if (typeof initialState === \"undefined\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(12) : `The slice reducer for key \"${key}\" returned undefined during initialization. If the state passed to the reducer is undefined, you must explicitly return the initial state. The initial state may not be undefined. If you don't want to set a value for this reducer, you can use null instead of undefined.`);\n }\n if (typeof reducer(void 0, {\n type: actionTypes_default.PROBE_UNKNOWN_ACTION()\n }) === \"undefined\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(13) : `The slice reducer for key \"${key}\" returned undefined when probed with a random type. Don't try to handle '${actionTypes_default.INIT}' or other actions in \"redux/*\" namespace. They are considered private. Instead, you must return the current state for any unknown actions, unless it is undefined, in which case you must return the initial state, regardless of the action type. The initial state may not be undefined, but can be null.`);\n }\n });\n}\nfunction combineReducers(reducers) {\n const reducerKeys = Object.keys(reducers);\n const finalReducers = {};\n for (let i = 0; i < reducerKeys.length; i++) {\n const key = reducerKeys[i];\n if (process.env.NODE_ENV !== \"production\") {\n if (typeof reducers[key] === \"undefined\") {\n warning(`No reducer provided for key \"${key}\"`);\n }\n }\n if (typeof reducers[key] === \"function\") {\n finalReducers[key] = reducers[key];\n }\n }\n const finalReducerKeys = Object.keys(finalReducers);\n let unexpectedKeyCache;\n if (process.env.NODE_ENV !== \"production\") {\n unexpectedKeyCache = {};\n }\n let shapeAssertionError;\n try {\n assertReducerShape(finalReducers);\n } catch (e) {\n shapeAssertionError = e;\n }\n return function combination(state = {}, action) {\n if (shapeAssertionError) {\n throw shapeAssertionError;\n }\n if (process.env.NODE_ENV !== \"production\") {\n const warningMessage = getUnexpectedStateShapeWarningMessage(state, finalReducers, action, unexpectedKeyCache);\n if (warningMessage) {\n warning(warningMessage);\n }\n }\n let hasChanged = false;\n const nextState = {};\n for (let i = 0; i < finalReducerKeys.length; i++) {\n const key = finalReducerKeys[i];\n const reducer = finalReducers[key];\n const previousStateForKey = state[key];\n const nextStateForKey = reducer(previousStateForKey, action);\n if (typeof nextStateForKey === \"undefined\") {\n const actionType = action && action.type;\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(14) : `When called with an action of type ${actionType ? `\"${String(actionType)}\"` : \"(unknown type)\"}, the slice reducer for key \"${key}\" returned undefined. To ignore an action, you must explicitly return the previous state. If you want this reducer to hold no value, you can return null instead of undefined.`);\n }\n nextState[key] = nextStateForKey;\n hasChanged = hasChanged || nextStateForKey !== previousStateForKey;\n }\n hasChanged = hasChanged || finalReducerKeys.length !== Object.keys(state).length;\n return hasChanged ? nextState : state;\n };\n}\n\n// src/bindActionCreators.ts\nfunction bindActionCreator(actionCreator, dispatch) {\n return function(...args) {\n return dispatch(actionCreator.apply(this, args));\n };\n}\nfunction bindActionCreators(actionCreators, dispatch) {\n if (typeof actionCreators === \"function\") {\n return bindActionCreator(actionCreators, dispatch);\n }\n if (typeof actionCreators !== \"object\" || actionCreators === null) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(16) : `bindActionCreators expected an object or a function, but instead received: '${kindOf(actionCreators)}'. Did you write \"import ActionCreators from\" instead of \"import * as ActionCreators from\"?`);\n }\n const boundActionCreators = {};\n for (const key in actionCreators) {\n const actionCreator = actionCreators[key];\n if (typeof actionCreator === \"function\") {\n boundActionCreators[key] = bindActionCreator(actionCreator, dispatch);\n }\n }\n return boundActionCreators;\n}\n\n// src/compose.ts\nfunction compose(...funcs) {\n if (funcs.length === 0) {\n return (arg) => arg;\n }\n if (funcs.length === 1) {\n return funcs[0];\n }\n return funcs.reduce((a, b) => (...args) => a(b(...args)));\n}\n\n// src/applyMiddleware.ts\nfunction applyMiddleware(...middlewares) {\n return (createStore2) => (reducer, preloadedState) => {\n const store = createStore2(reducer, preloadedState);\n let dispatch = () => {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(15) : \"Dispatching while constructing your middleware is not allowed. Other middleware would not be applied to this dispatch.\");\n };\n const middlewareAPI = {\n getState: store.getState,\n dispatch: (action, ...args) => dispatch(action, ...args)\n };\n const chain = middlewares.map((middleware) => middleware(middlewareAPI));\n dispatch = compose(...chain)(store.dispatch);\n return {\n ...store,\n dispatch\n };\n };\n}\n\n// src/utils/isAction.ts\nfunction isAction(action) {\n return isPlainObject(action) && \"type\" in action && typeof action.type === \"string\";\n}\nexport {\n actionTypes_default as __DO_NOT_USE__ActionTypes,\n applyMiddleware,\n bindActionCreators,\n combineReducers,\n compose,\n createStore,\n isAction,\n isPlainObject,\n legacy_createStore\n};\n//# sourceMappingURL=redux.mjs.map","import { initialState } from \"./initial\";\n/* Reducer */\nexport function reducer(state = initialState().nodes.drag, action) {\n switch (action.type) {\n case \"DND_DRAG_START\":\n return Object.assign(Object.assign({}, state), { id: action.id, selectedIds: action.dragIds });\n case \"DND_DRAG_END\":\n return Object.assign(Object.assign({}, state), { id: null, destinationParentId: null, destinationIndex: null, selectedIds: [] });\n case \"DND_HOVERING\":\n if (action.parentId !== state.destinationParentId ||\n action.index != state.destinationIndex) {\n return Object.assign(Object.assign({}, state), { destinationParentId: action.parentId, destinationIndex: action.index });\n }\n else {\n return state;\n }\n default:\n return state;\n }\n}\n","import { combineReducers } from \"redux\";\nimport { reducer as focus } from \"./focus-slice\";\nimport { reducer as edit } from \"./edit-slice\";\nimport { reducer as dnd } from \"./dnd-slice\";\nimport { reducer as selection } from \"./selection-slice\";\nimport { reducer as open } from \"./open-slice\";\nimport { reducer as drag } from \"./drag-slice\";\nexport const rootReducer = combineReducers({\n nodes: combineReducers({\n focus,\n edit,\n open,\n selection,\n drag,\n }),\n dnd,\n});\n","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { useEffect, useImperativeHandle, useMemo, useRef, } from \"react\";\nimport { useSyncExternalStore } from \"use-sync-external-store/shim\";\nimport { DataUpdatesContext, DndContext, NodesContext, TreeApiContext, } from \"../context\";\nimport { TreeApi } from \"../interfaces/tree-api\";\nimport { initialState } from \"../state/initial\";\nimport { rootReducer } from \"../state/root-reducer\";\nimport { HTML5Backend } from \"react-dnd-html5-backend\";\nimport { DndProvider } from \"react-dnd\";\nimport { createStore } from \"redux\";\nimport { actions as visibility } from \"../state/open-slice\";\nconst SERVER_STATE = initialState();\nexport function TreeProvider({ treeProps, imperativeHandle, children, }) {\n const list = useRef(null);\n const listEl = useRef(null);\n const store = useRef(\n // @ts-ignore\n createStore(rootReducer, initialState(treeProps)));\n const state = useSyncExternalStore(store.current.subscribe, store.current.getState, () => SERVER_STATE);\n /* The tree api object is stable. */\n const api = useMemo(() => {\n return new TreeApi(store.current, treeProps, list, listEl);\n }, []);\n /* Make sure the tree instance stays in sync */\n const updateCount = useRef(0);\n useMemo(() => {\n updateCount.current += 1;\n api.update(treeProps);\n }, [...Object.values(treeProps), state.nodes.open]);\n /* Expose the tree api */\n useImperativeHandle(imperativeHandle, () => api);\n /* Change selection based on props */\n useEffect(() => {\n if (api.props.selection) {\n api.select(api.props.selection, { focus: false });\n }\n else {\n api.deselectAll();\n }\n }, [api.props.selection]);\n /* Clear visability for filtered nodes */\n useEffect(() => {\n if (!api.props.searchTerm) {\n store.current.dispatch(visibility.clear(true));\n }\n }, [api.props.searchTerm]);\n return (_jsx(TreeApiContext.Provider, { value: api, children: _jsx(DataUpdatesContext.Provider, { value: updateCount.current, children: _jsx(NodesContext.Provider, { value: state.nodes, children: _jsx(DndContext.Provider, { value: state.dnd, children: _jsx(DndProvider, Object.assign({ backend: HTML5Backend, options: { rootElement: api.props.dndRootElement || undefined } }, (treeProps.dndManager && { manager: treeProps.dndManager }), { children: children })) }) }) }) }));\n}\n","import { useDrop } from \"react-dnd\";\nimport { useTreeApi } from \"../context\";\nimport { computeDrop } from \"./compute-drop\";\nimport { actions as dnd } from \"../state/dnd-slice\";\nexport function useOuterDrop() {\n const tree = useTreeApi();\n // In case we drop an item at the bottom of the list\n const [, drop] = useDrop(() => ({\n accept: \"NODE\",\n canDrop: (_item, m) => {\n if (!m.isOver({ shallow: true }))\n return false;\n return tree.canDrop();\n },\n hover: (_item, m) => {\n if (!m.isOver({ shallow: true }))\n return;\n const offset = m.getClientOffset();\n if (!tree.listEl.current || !offset)\n return;\n const { cursor, drop } = computeDrop({\n element: tree.listEl.current,\n offset: offset,\n indent: tree.indent,\n node: null,\n prevNode: tree.visibleNodes[tree.visibleNodes.length - 1],\n nextNode: null,\n });\n if (drop)\n tree.dispatch(dnd.hovering(drop.parentId, drop.index));\n if (m.canDrop()) {\n if (cursor)\n tree.showCursor(cursor);\n }\n else {\n tree.hideCursor();\n }\n },\n }), [tree]);\n drop(tree.listEl);\n}\n","import { useOuterDrop } from \"../dnd/outer-drop-hook\";\nexport function OuterDrop(props) {\n useOuterDrop();\n return props.children;\n}\n","import { jsx as _jsx, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { useTreeApi } from \"../context\";\nimport { DefaultContainer } from \"./default-container\";\nexport function TreeContainer() {\n const tree = useTreeApi();\n const Container = tree.props.renderContainer || DefaultContainer;\n return (_jsx(_Fragment, { children: _jsx(Container, {}) }));\n}\n","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { useDragLayer } from \"react-dnd\";\nimport { useTreeApi } from \"../context\";\nimport { DefaultDragPreview } from \"./default-drag-preview\";\nexport function DragPreviewContainer() {\n const tree = useTreeApi();\n const { offset, mouse, item, isDragging } = useDragLayer((m) => {\n return {\n offset: m.getSourceClientOffset(),\n mouse: m.getClientOffset(),\n item: m.getItem(),\n isDragging: m.isDragging(),\n };\n });\n const DragPreview = tree.props.renderDragPreview || DefaultDragPreview;\n return (_jsx(DragPreview, { offset: offset, mouse: mouse, id: (item === null || item === void 0 ? void 0 : item.id) || null, dragIds: (item === null || item === void 0 ? void 0 : item.dragIds) || [], isDragging: isDragging }));\n}\n","export class SimpleTree {\n constructor(data) {\n this.root = createRoot(data);\n }\n get data() {\n var _a, _b;\n return (_b = (_a = this.root.children) === null || _a === void 0 ? void 0 : _a.map((node) => node.data)) !== null && _b !== void 0 ? _b : [];\n }\n create(args) {\n const parent = args.parentId ? this.find(args.parentId) : this.root;\n if (!parent)\n return null;\n parent.addChild(args.data, args.index);\n }\n move(args) {\n const src = this.find(args.id);\n const parent = args.parentId ? this.find(args.parentId) : this.root;\n if (!src || !parent)\n return;\n parent.addChild(src.data, args.index);\n src.drop();\n }\n update(args) {\n const node = this.find(args.id);\n if (node)\n node.update(args.changes);\n }\n drop(args) {\n const node = this.find(args.id);\n if (node)\n node.drop();\n }\n find(id, node = this.root) {\n if (!node)\n return null;\n if (node.id === id)\n return node;\n if (node.children) {\n for (let child of node.children) {\n const found = this.find(id, child);\n if (found)\n return found;\n }\n return null;\n }\n return null;\n }\n}\nfunction createRoot(data) {\n const root = new SimpleNode({ id: \"ROOT\" }, null);\n root.children = data.map((d) => createNode(d, root));\n return root;\n}\nfunction createNode(data, parent) {\n const node = new SimpleNode(data, parent);\n if (data.children)\n node.children = data.children.map((d) => createNode(d, node));\n return node;\n}\nclass SimpleNode {\n constructor(data, parent) {\n this.data = data;\n this.parent = parent;\n this.id = data.id;\n }\n hasParent() {\n return !!this.parent;\n }\n get childIndex() {\n return this.hasParent() ? this.parent.children.indexOf(this) : -1;\n }\n addChild(data, index) {\n var _a, _b;\n const node = createNode(data, this);\n this.children = (_a = this.children) !== null && _a !== void 0 ? _a : [];\n this.children.splice(index, 0, node);\n this.data.children = (_b = this.data.children) !== null && _b !== void 0 ? _b : [];\n this.data.children.splice(index, 0, data);\n }\n removeChild(index) {\n var _a, _b;\n (_a = this.children) === null || _a === void 0 ? void 0 : _a.splice(index, 1);\n (_b = this.data.children) === null || _b === void 0 ? void 0 : _b.splice(index, 1);\n }\n update(changes) {\n if (this.hasParent()) {\n const i = this.childIndex;\n this.parent.addChild(Object.assign(Object.assign({}, this.data), changes), i);\n this.drop();\n }\n }\n drop() {\n if (this.hasParent())\n this.parent.removeChild(this.childIndex);\n }\n}\n","import { useMemo, useState } from \"react\";\nimport { SimpleTree } from \"../data/simple-tree\";\nlet nextId = 0;\nexport function useSimpleTree(initialData) {\n const [data, setData] = useState(initialData);\n const tree = useMemo(() => new SimpleTree(data), [data]);\n const onMove = (args) => {\n for (const id of args.dragIds) {\n tree.move({ id, parentId: args.parentId, index: args.index });\n }\n setData(tree.data);\n };\n const onRename = ({ name, id }) => {\n tree.update({ id, changes: { name } });\n setData(tree.data);\n };\n const onCreate = ({ parentId, index, type }) => {\n const data = { id: `simple-tree-id-${nextId++}`, name: \"\" };\n if (type === \"internal\")\n data.children = [];\n tree.create({ parentId, index, data });\n setData(tree.data);\n return data;\n };\n const onDelete = (args) => {\n args.ids.forEach((id) => tree.drop({ id }));\n setData(tree.data);\n };\n const controller = { onMove, onRename, onCreate, onDelete };\n return [data, controller];\n}\n","import { useSimpleTree } from \"./use-simple-tree\";\nexport function useValidatedProps(props) {\n if (props.initialData && props.data) {\n throw new Error(`React Arborist Tree => Provide either a data or initialData prop, but not both.`);\n }\n if (props.initialData &&\n (props.onCreate || props.onDelete || props.onMove || props.onRename)) {\n throw new Error(`React Arborist Tree => You passed the initialData prop along with a data handler.\nUse the data prop if you want to provide your own handlers.`);\n }\n if (props.initialData) {\n /**\n * Let's break the rules of hooks here. If the initialData prop\n * is provided, we will assume it will not change for the life of\n * the component.\n *\n * We will provide the real data and the handlers to update it.\n * */\n const [data, controller] = useSimpleTree(props.initialData);\n return Object.assign(Object.assign(Object.assign({}, props), controller), { data });\n }\n else {\n return props;\n }\n}\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { forwardRef } from \"react\";\nimport { TreeProvider } from \"./provider\";\nimport { OuterDrop } from \"./outer-drop\";\nimport { TreeContainer } from \"./tree-container\";\nimport { DragPreviewContainer } from \"./drag-preview-container\";\nimport { useValidatedProps } from \"../hooks/use-validated-props\";\nfunction TreeComponent(props, ref) {\n const treeProps = useValidatedProps(props);\n return (_jsxs(TreeProvider, { treeProps: treeProps, imperativeHandle: ref, children: [_jsx(OuterDrop, { children: _jsx(TreeContainer, {}) }), _jsx(DragPreviewContainer, {})] }));\n}\nexport const Tree = forwardRef(TreeComponent);\n","// src/hooks/useContainerHeight.ts\nimport { useRef, useEffect, useState } from \"react\";\nvar useContainerHeight = (initialHeight = 600) => {\n const containerRef = useRef(null);\n const [containerHeight, setContainerHeight] = useState(initialHeight);\n useEffect(() => {\n const updateHeight = () => {\n if (containerRef.current) {\n const height = containerRef.current.clientHeight;\n if (height > 0) {\n setContainerHeight(height);\n }\n }\n };\n updateHeight();\n window.addEventListener(\"resize\", updateHeight);\n return () => window.removeEventListener(\"resize\", updateHeight);\n }, []);\n return [containerRef, containerHeight];\n};\n// src/components/DirectoryFilterInput.tsx\nimport React, { useState as useState2, useCallback, useRef as useRef2, useEffect as useEffect2 } from \"react\";\nvar DirectoryFilterInput = ({\n fileTree,\n theme,\n filters = [],\n onFiltersChange,\n placeholder = \"Type to filter by directory path\"\n}) => {\n const [inputValue, setInputValue] = useState2(\"\");\n const [activeFilters, setActiveFilters] = useState2(filters);\n const [showDropdown, setShowDropdown] = useState2(false);\n const [selectedIndex, setSelectedIndex] = useState2(0);\n const [excludeMode, setExcludeMode] = useState2(false);\n const inputRef = useRef2(null);\n const getAllDirectories = useCallback(() => {\n if (!fileTree?.allDirectories)\n return [];\n const directories = new Set;\n fileTree.allDirectories.forEach((dir) => {\n directories.add(dir.relativePath);\n });\n return Array.from(directories).sort();\n }, [fileTree]);\n const getMatchingDirectories = useCallback(() => {\n if (!inputValue)\n return [];\n const allDirs = getAllDirectories();\n const lowerInput = inputValue.toLowerCase();\n return allDirs.filter((dir) => {\n const lowerDir = dir.toLowerCase();\n return lowerDir.includes(lowerInput) && lowerDir !== lowerInput;\n }).slice(0, 10);\n }, [inputValue, getAllDirectories]);\n const matchingDirectories = getMatchingDirectories();\n useEffect2(() => {\n setShowDropdown(inputValue.length > 0 && matchingDirectories.length > 0);\n setSelectedIndex(0);\n }, [inputValue, matchingDirectories.length]);\n const addFilter = useCallback((path, mode) => {\n const newFilter = {\n id: `filter-${Date.now()}-${Math.random()}`,\n path,\n mode\n };\n const updatedFilters = [...activeFilters, newFilter];\n setActiveFilters(updatedFilters);\n onFiltersChange?.(updatedFilters);\n setInputValue(\"\");\n setExcludeMode(false);\n }, [activeFilters, onFiltersChange]);\n const removeFilter = useCallback((filterId) => {\n const updatedFilters = activeFilters.filter((f) => f.id !== filterId);\n setActiveFilters(updatedFilters);\n onFiltersChange?.(updatedFilters);\n }, [activeFilters, onFiltersChange]);\n const toggleFilterMode = useCallback((filterId) => {\n const updatedFilters = activeFilters.map((f) => f.id === filterId ? { ...f, mode: f.mode === \"include\" ? \"exclude\" : \"include\" } : f);\n setActiveFilters(updatedFilters);\n onFiltersChange?.(updatedFilters);\n }, [activeFilters, onFiltersChange]);\n const getCommonPrefix = useCallback(() => {\n if (matchingDirectories.length === 0)\n return null;\n if (matchingDirectories.length === 1) {\n return matchingDirectories[0];\n }\n let commonPrefix = matchingDirectories[0];\n for (let i = 1;i < matchingDirectories.length; i++) {\n const current = matchingDirectories[i];\n let j = 0;\n while (j < commonPrefix.length && j < current.length && commonPrefix[j] === current[j]) {\n j++;\n }\n commonPrefix = commonPrefix.substring(0, j);\n }\n const lastSlash = commonPrefix.lastIndexOf(\"/\");\n if (lastSlash > inputValue.length - 1) {\n return commonPrefix.substring(0, lastSlash + 1);\n }\n return commonPrefix.length > inputValue.length ? commonPrefix : null;\n }, [matchingDirectories, inputValue]);\n const handleKeyDown = useCallback((e) => {\n switch (e.key) {\n case \"Tab\":\n if (showDropdown && matchingDirectories.length > 0) {\n e.preventDefault();\n const commonPrefix = getCommonPrefix();\n if (commonPrefix) {\n setInputValue(commonPrefix);\n }\n }\n break;\n case \"ArrowDown\":\n if (showDropdown && matchingDirectories.length > 0) {\n e.preventDefault();\n setSelectedIndex((prev) => prev < matchingDirectories.length - 1 ? prev + 1 : prev);\n }\n break;\n case \"ArrowUp\":\n if (showDropdown && matchingDirectories.length > 0) {\n e.preventDefault();\n setSelectedIndex((prev) => prev > 0 ? prev - 1 : prev);\n }\n break;\n case \"Enter\":\n e.preventDefault();\n if (showDropdown && matchingDirectories[selectedIndex]) {\n addFilter(matchingDirectories[selectedIndex], excludeMode ? \"exclude\" : \"include\");\n } else if (inputValue.trim()) {\n addFilter(inputValue.trim(), excludeMode ? \"exclude\" : \"include\");\n }\n setShowDropdown(false);\n break;\n case \"Escape\":\n if (showDropdown) {\n e.preventDefault();\n setShowDropdown(false);\n }\n break;\n }\n }, [showDropdown, matchingDirectories, selectedIndex, inputValue, excludeMode, addFilter, getCommonPrefix]);\n return /* @__PURE__ */ React.createElement(\"div\", null, /* @__PURE__ */ React.createElement(\"div\", {\n className: \"relative\"\n }, /* @__PURE__ */ React.createElement(\"div\", {\n className: \"flex items-center gap-2\"\n }, /* @__PURE__ */ React.createElement(\"input\", {\n ref: inputRef,\n type: \"text\",\n value: inputValue,\n onChange: (e) => setInputValue(e.target.value),\n onKeyDown: handleKeyDown,\n onFocus: () => setShowDropdown(inputValue.length > 0 && matchingDirectories.length > 0),\n placeholder,\n style: {\n flex: 1,\n padding: \"8px 12px\",\n fontSize: \"14px\",\n borderRadius: \"4px\",\n border: `1px solid ${showDropdown ? theme.colors.primary : theme.colors.border}`,\n backgroundColor: theme.colors.backgroundSecondary || theme.colors.background,\n color: theme.colors.text,\n outline: \"none\",\n transition: \"border-color 0.2s\"\n }\n }), inputValue && /* @__PURE__ */ React.createElement(\"button\", {\n onClick: () => setExcludeMode(!excludeMode),\n style: {\n padding: \"8px 12px\",\n fontSize: \"12px\",\n fontWeight: 500,\n borderRadius: \"4px\",\n border: `1px solid ${excludeMode ? theme.colors.primary : theme.colors.border}`,\n backgroundColor: excludeMode ? `${theme.colors.primary}20` : theme.colors.backgroundSecondary || theme.colors.background,\n color: excludeMode ? theme.colors.text : theme.colors.textSecondary,\n cursor: \"pointer\",\n transition: \"all 0.2s\"\n },\n title: excludeMode ? \"Excluding files in this directory\" : \"Including only files in this directory\"\n }, excludeMode ? \"Exclude\" : \"Include\")), showDropdown && matchingDirectories.length > 0 && /* @__PURE__ */ React.createElement(\"div\", {\n style: {\n position: \"absolute\",\n zIndex: 10,\n width: \"100%\",\n marginTop: \"4px\",\n borderRadius: \"4px\",\n border: `1px solid ${theme.colors.primary}`,\n backgroundColor: theme.colors.background,\n boxShadow: `0 4px 6px -1px ${theme.colors.border}40`,\n maxHeight: \"256px\",\n overflowY: \"auto\"\n }\n }, matchingDirectories.map((dir, index) => /* @__PURE__ */ React.createElement(\"div\", {\n key: dir,\n style: {\n padding: \"8px 12px\",\n cursor: \"pointer\",\n fontSize: \"14px\",\n backgroundColor: index === selectedIndex ? theme.colors.primary : \"transparent\",\n color: index === selectedIndex ? \"#ffffff\" : theme.colors.text || theme.colors.textSecondary,\n transition: \"background-color 0.15s, color 0.15s\",\n fontWeight: index === selectedIndex ? 500 : 400\n },\n onMouseEnter: () => setSelectedIndex(index),\n onClick: () => {\n addFilter(dir, excludeMode ? \"exclude\" : \"include\");\n setShowDropdown(false);\n }\n }, dir)))), activeFilters.length > 0 && /* @__PURE__ */ React.createElement(\"div\", {\n style: { marginTop: \"8px\", display: \"flex\", flexWrap: \"wrap\", gap: \"8px\" }\n }, activeFilters.map((filter) => /* @__PURE__ */ React.createElement(\"div\", {\n key: filter.id,\n style: {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"4px\",\n padding: \"4px 8px\",\n borderRadius: \"4px\",\n fontSize: \"12px\",\n backgroundColor: filter.mode === \"include\" ? `${theme.colors.primary}20` : `${theme.colors.error}20`,\n border: `1px solid ${filter.mode === \"include\" ? theme.colors.primary : theme.colors.error}`,\n color: theme.colors.text\n }\n }, /* @__PURE__ */ React.createElement(\"span\", {\n onClick: () => toggleFilterMode(filter.id),\n style: {\n cursor: \"pointer\",\n userSelect: \"none\"\n },\n title: \"Click to toggle include/exclude\"\n }, filter.mode === \"include\" ? \"✓\" : \"✗\", \" \", filter.path), /* @__PURE__ */ React.createElement(\"button\", {\n onClick: () => removeFilter(filter.id),\n style: {\n marginLeft: \"4px\",\n background: \"none\",\n border: \"none\",\n color: theme.colors.textSecondary,\n cursor: \"pointer\",\n padding: 0,\n fontSize: \"14px\"\n },\n title: \"Remove filter\"\n }, \"×\")))));\n};\n// src/components/TreeNode.tsx\nimport { ChevronRight, ChevronDown } from \"lucide-react\";\nimport React2, { useState as useState3 } from \"react\";\nfunction TreeNode({\n node,\n style,\n dragHandle,\n theme,\n rightContent,\n extraContent,\n isSelectedDirectory = false,\n nameColor,\n horizontalNodePadding = \"8px\",\n onContextMenu\n}) {\n const [isHovered, setIsHovered] = useState3(false);\n const isFolder = node.isInternal;\n const caret = isFolder ? /* @__PURE__ */ React2.createElement(\"span\", {\n style: { marginRight: \"4px\", display: \"flex\", alignItems: \"center\" }\n }, node.isOpen ? /* @__PURE__ */ React2.createElement(ChevronDown, {\n size: 16,\n color: theme.colors.text\n }) : /* @__PURE__ */ React2.createElement(ChevronRight, {\n size: 16,\n color: theme.colors.text\n })) : null;\n const backgroundColor = node.isSelected ? `${theme.colors.primary}20` : isSelectedDirectory ? `${theme.colors.primary}15` : isHovered ? `${theme.colors.text}10` : \"transparent\";\n const border = node.isSelected ? `1px solid ${theme.colors.primary}` : \"1px solid transparent\";\n const color = nameColor ? nameColor : node.isSelected || isSelectedDirectory ? theme.colors.primary : theme.colors.text;\n return /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n ...style,\n backgroundColor,\n border,\n color,\n cursor: \"pointer\",\n paddingLeft: `calc(${horizontalNodePadding} + ${node.level * 16}px)`,\n paddingRight: horizontalNodePadding,\n paddingTop: \"3px\",\n paddingBottom: \"3px\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n boxSizing: \"border-box\",\n lineHeight: \"20px\"\n },\n ref: dragHandle,\n onClick: () => node.isInternal ? node.toggle() : node.select(),\n onContextMenu: (e) => {\n if (onContextMenu) {\n e.preventDefault();\n onContextMenu(e, node);\n }\n },\n onMouseEnter: () => setIsHovered(true),\n onMouseLeave: () => setIsHovered(false)\n }, /* @__PURE__ */ React2.createElement(\"div\", {\n style: { display: \"flex\", alignItems: \"center\", minWidth: 0, flex: 1 }\n }, caret, /* @__PURE__ */ React2.createElement(\"span\", {\n style: {\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n overflowWrap: \"normal\",\n wordBreak: \"normal\"\n }\n }, node.data.name), extraContent), rightContent && /* @__PURE__ */ React2.createElement(\"div\", {\n style: { flexShrink: 0 }\n }, rightContent));\n}\n// src/components/DynamicFileTree.tsx\nimport React3, { useMemo } from \"react\";\nimport { Tree } from \"react-arborist\";\nvar sortNodes = (a, b) => {\n const aIsDir = !!a.children;\n const bIsDir = !!b.children;\n if (aIsDir && !bIsDir)\n return -1;\n if (!aIsDir && bIsDir)\n return 1;\n return a.name.localeCompare(b.name, undefined, { sensitivity: \"base\" });\n};\nvar transformFileTree = (fileTree) => {\n const transformNode = (node, parentId) => {\n const id = parentId ? `${parentId}/${node.name}` : node.name;\n const arborNode = {\n id,\n name: node.name\n };\n if (\"children\" in node && node.children) {\n arborNode.children = node.children.map((child) => transformNode(child, id)).sort(sortNodes);\n }\n return arborNode;\n };\n return fileTree.root.children.map((node) => transformNode(node, \"\")).sort(sortNodes);\n};\nvar filterFileTreeNodes = (nodes, selectedDirs, pathPrefix = \"\") => {\n if (selectedDirs.size === 0)\n return nodes;\n const result = [];\n for (const node of nodes) {\n const currentPath = pathPrefix ? `${pathPrefix}/${node.name}` : node.name;\n const isSelected = selectedDirs.has(currentPath);\n const isAncestor = Array.from(selectedDirs).some((sel) => sel.startsWith(`${currentPath}/`));\n const isDescendant = Array.from(selectedDirs).some((sel) => currentPath.startsWith(`${sel}/`));\n if (\"children\" in node && node.children) {\n if (isSelected || isDescendant) {\n result.push(node);\n } else if (isAncestor) {\n const filteredChildren = filterFileTreeNodes(node.children, selectedDirs, currentPath);\n if (filteredChildren.length > 0) {\n result.push({ ...node, children: filteredChildren });\n }\n }\n } else {\n if (isDescendant) {\n result.push(node);\n }\n }\n }\n return result;\n};\nvar countVisibleNodes = (nodes, defaultOpen, initialOpenState) => {\n let count = 0;\n const countNode = (node) => {\n count++;\n if (node.children && node.children.length > 0) {\n const isOpen = initialOpenState !== undefined ? initialOpenState[node.id] ?? defaultOpen : defaultOpen;\n if (isOpen) {\n node.children.forEach(countNode);\n }\n }\n };\n nodes.forEach(countNode);\n return count;\n};\nvar DynamicFileTree = ({\n fileTree,\n theme,\n selectedDirectories = [],\n selectedFile,\n onDirectorySelect,\n onFileSelect,\n initialOpenState,\n defaultOpen = false,\n horizontalNodePadding,\n onContextMenu,\n initialHeight = 600,\n autoHeight = false\n}) => {\n const NodeRenderer = (props) => {\n const nodePath = props.node.data.id;\n const isSelectedOrChild = selectedDirectories.some((selectedDir) => {\n if (nodePath === selectedDir)\n return true;\n return nodePath.startsWith(selectedDir + \"/\");\n });\n return /* @__PURE__ */ React3.createElement(TreeNode, {\n ...props,\n theme,\n isSelectedDirectory: isSelectedOrChild,\n horizontalNodePadding,\n onContextMenu: (e, node) => {\n if (onContextMenu) {\n onContextMenu(e, node.data.id, !!node.data.children);\n }\n }\n });\n };\n const treeData = useMemo(() => {\n if (!selectedDirectories || selectedDirectories.length === 0) {\n return transformFileTree(fileTree);\n }\n const selectedDirsSet = new Set(selectedDirectories);\n const filteredNodes = filterFileTreeNodes(fileTree.root.children, selectedDirsSet);\n const filteredFileTree = {\n ...fileTree,\n root: { ...fileTree.root, children: filteredNodes }\n };\n return transformFileTree(filteredFileTree);\n }, [fileTree, selectedDirectories]);\n const handleSelect = (selectedNodes) => {\n const selectedFiles = selectedNodes.filter((node) => !node.data.children).map((node) => node.data.id);\n const selectedDirs = selectedNodes.filter((node) => node.data.children).map((node) => node.data.id);\n if (onFileSelect && selectedFiles.length > 0) {\n onFileSelect(selectedFiles[0]);\n }\n if (onDirectorySelect) {\n onDirectorySelect(selectedDirs);\n }\n };\n const calculatedHeight = useMemo(() => {\n if (autoHeight) {\n const visibleNodeCount = countVisibleNodes(treeData, defaultOpen, initialOpenState);\n const rowHeight = 28;\n return visibleNodeCount * rowHeight;\n }\n return initialHeight;\n }, [autoHeight, treeData, defaultOpen, initialOpenState, initialHeight]);\n const [containerRef, containerHeight] = useContainerHeight(calculatedHeight);\n return /* @__PURE__ */ React3.createElement(\"div\", {\n ref: containerRef,\n style: {\n backgroundColor: theme.colors.background,\n color: theme.colors.text,\n fontFamily: theme.fonts.body,\n ...autoHeight ? {} : { height: \"100%\" }\n }\n }, /* @__PURE__ */ React3.createElement(Tree, {\n initialData: treeData,\n onSelect: handleSelect,\n openByDefault: defaultOpen,\n ...initialOpenState !== undefined && { initialOpenState },\n ...selectedFile !== undefined && { selection: selectedFile },\n width: \"100%\",\n height: containerHeight,\n rowHeight: 28\n }, NodeRenderer));\n};\n// src/components/OrderedFileList.tsx\nimport React4, { useMemo as useMemo2 } from \"react\";\nvar OrderedFileList = ({\n fileTree,\n theme,\n onFileSelect,\n padding = \"8px\",\n selectedFile,\n sortBy = \"lastModified\",\n sortOrder = \"desc\",\n onContextMenu\n}) => {\n const [containerRef, containerHeight] = useContainerHeight();\n const sortedFiles = useMemo2(() => {\n const files = [...fileTree.allFiles];\n files.sort((a, b) => {\n let comparison = 0;\n switch (sortBy) {\n case \"lastModified\": {\n const timeA = new Date(a.lastModified).getTime();\n const timeB = new Date(b.lastModified).getTime();\n comparison = timeB - timeA;\n break;\n }\n case \"size\": {\n comparison = b.size - a.size;\n break;\n }\n case \"name\": {\n comparison = a.name.localeCompare(b.name, undefined, { sensitivity: \"base\" });\n break;\n }\n }\n return sortOrder === \"asc\" ? -comparison : comparison;\n });\n return files;\n }, [fileTree.allFiles, sortBy, sortOrder]);\n const formatDate = (date) => {\n const now = new Date;\n const fileDate = new Date(date);\n const diffMs = now.getTime() - fileDate.getTime();\n const diffMins = Math.floor(diffMs / 60000);\n const diffHours = Math.floor(diffMs / 3600000);\n const diffDays = Math.floor(diffMs / 86400000);\n if (diffMins < 1)\n return \"Just now\";\n if (diffMins < 60)\n return `${diffMins}m ago`;\n if (diffHours < 24)\n return `${diffHours}h ago`;\n if (diffDays < 7)\n return `${diffDays}d ago`;\n return fileDate.toLocaleDateString(undefined, {\n month: \"short\",\n day: \"numeric\",\n year: fileDate.getFullYear() !== now.getFullYear() ? \"numeric\" : undefined\n });\n };\n const formatSize = (bytes) => {\n if (bytes === 0)\n return \"0 B\";\n const k = 1024;\n const sizes = [\"B\", \"KB\", \"MB\", \"GB\"];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return `${parseFloat((bytes / Math.pow(k, i)).toFixed(1))} ${sizes[i]}`;\n };\n const handleFileClick = (file) => {\n if (onFileSelect) {\n onFileSelect(file.relativePath);\n }\n };\n const handleContextMenu = (event, file) => {\n if (onContextMenu) {\n event.preventDefault();\n onContextMenu(event, file.relativePath);\n }\n };\n return /* @__PURE__ */ React4.createElement(\"div\", {\n ref: containerRef,\n style: {\n backgroundColor: theme.colors.background,\n color: theme.colors.text,\n fontFamily: theme.fonts.body,\n height: \"100%\",\n overflow: \"auto\",\n padding\n }\n }, /* @__PURE__ */ React4.createElement(\"div\", {\n style: {\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"2px\"\n }\n }, sortedFiles.map((file) => {\n const isSelected = selectedFile === file.relativePath;\n return /* @__PURE__ */ React4.createElement(\"div\", {\n key: file.relativePath,\n onClick: () => handleFileClick(file),\n onContextMenu: (e) => handleContextMenu(e, file),\n style: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n padding: \"8px 12px\",\n borderRadius: \"4px\",\n cursor: \"pointer\",\n backgroundColor: isSelected ? theme.colors.primary + \"20\" : \"transparent\",\n border: isSelected ? `1px solid ${theme.colors.primary}` : \"1px solid transparent\",\n transition: \"all 0.15s ease\"\n },\n onMouseEnter: (e) => {\n if (!isSelected) {\n e.currentTarget.style.backgroundColor = theme.colors.primary + \"10\";\n }\n },\n onMouseLeave: (e) => {\n if (!isSelected) {\n e.currentTarget.style.backgroundColor = \"transparent\";\n }\n }\n }, /* @__PURE__ */ React4.createElement(\"div\", {\n style: {\n display: \"flex\",\n flexDirection: \"column\",\n flex: 1,\n minWidth: 0\n }\n }, /* @__PURE__ */ React4.createElement(\"div\", {\n style: {\n fontSize: \"14px\",\n fontWeight: isSelected ? 500 : 400,\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\"\n },\n title: file.relativePath\n }, file.name), /* @__PURE__ */ React4.createElement(\"div\", {\n style: {\n fontSize: \"12px\",\n color: theme.colors.secondary || theme.colors.text + \"99\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\"\n },\n title: file.relativePath\n }, file.relativePath)), /* @__PURE__ */ React4.createElement(\"div\", {\n style: {\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"flex-end\",\n fontSize: \"12px\",\n color: theme.colors.secondary || theme.colors.text + \"99\",\n marginLeft: \"16px\",\n flexShrink: 0\n }\n }, /* @__PURE__ */ React4.createElement(\"div\", null, formatDate(file.lastModified)), /* @__PURE__ */ React4.createElement(\"div\", null, formatSize(file.size))));\n })), sortedFiles.length === 0 && /* @__PURE__ */ React4.createElement(\"div\", {\n style: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n height: containerHeight,\n color: theme.colors.secondary || theme.colors.text + \"99\",\n fontSize: \"14px\"\n }\n }, \"No files found\"));\n};\n// src/components/GitOrderedFileList.tsx\nimport {\n Plus,\n Minus,\n Edit,\n AlertCircle,\n GitBranch,\n FileQuestion\n} from \"lucide-react\";\nimport React5, { useMemo as useMemo3 } from \"react\";\nvar getGitStatusDisplay = (status, theme) => {\n switch (status) {\n case \"M\":\n case \"MM\":\n return {\n icon: /* @__PURE__ */ React5.createElement(Edit, {\n size: 14\n }),\n color: theme.colors.primary || \"#007bff\",\n label: \"Modified\",\n priority: 2\n };\n case \"A\":\n return {\n icon: /* @__PURE__ */ React5.createElement(Plus, {\n size: 14\n }),\n color: \"#28a745\",\n label: \"Added\",\n priority: 1\n };\n case \"D\":\n return {\n icon: /* @__PURE__ */ React5.createElement(Minus, {\n size: 14\n }),\n color: \"#dc3545\",\n label: \"Deleted\",\n priority: 3\n };\n case \"R\":\n return {\n icon: /* @__PURE__ */ React5.createElement(GitBranch, {\n size: 14\n }),\n color: \"#6f42c1\",\n label: \"Renamed\",\n priority: 4\n };\n case \"C\":\n return {\n icon: /* @__PURE__ */ React5.createElement(GitBranch, {\n size: 14\n }),\n color: \"#20c997\",\n label: \"Copied\",\n priority: 5\n };\n case \"U\":\n return {\n icon: /* @__PURE__ */ React5.createElement(AlertCircle, {\n size: 14\n }),\n color: \"#fd7e14\",\n label: \"Unmerged\",\n priority: 0\n };\n case \"??\":\n return {\n icon: /* @__PURE__ */ React5.createElement(FileQuestion, {\n size: 14\n }),\n color: \"#6c757d\",\n label: \"Untracked\",\n priority: 6\n };\n case \"AM\":\n return {\n icon: /* @__PURE__ */ React5.createElement(Plus, {\n size: 14\n }),\n color: \"#17a2b8\",\n label: \"Added & Modified\",\n priority: 1\n };\n default:\n return null;\n }\n};\nvar GitOrderedFileList = ({\n fileTree,\n theme,\n gitStatusData,\n onFileSelect,\n padding = \"8px\",\n selectedFile,\n sortBy = \"lastModified\",\n sortOrder = \"desc\",\n showOnlyChanged = false,\n onContextMenu\n}) => {\n const [containerRef, containerHeight] = useContainerHeight();\n const gitStatusMap = useMemo3(() => {\n const map = new Map;\n gitStatusData.forEach((item) => {\n map.set(item.filePath, item.status);\n });\n return map;\n }, [gitStatusData]);\n const filesWithGitStatus = useMemo3(() => {\n const enhanced = fileTree.allFiles.map((file) => ({\n ...file,\n gitStatus: gitStatusMap.get(file.relativePath)\n }));\n if (showOnlyChanged) {\n return enhanced.filter((file) => file.gitStatus && file.gitStatus !== null);\n }\n return enhanced;\n }, [fileTree.allFiles, gitStatusMap, showOnlyChanged]);\n const sortedFiles = useMemo3(() => {\n const files = [...filesWithGitStatus];\n files.sort((a, b) => {\n let comparison = 0;\n switch (sortBy) {\n case \"lastModified\": {\n const timeA = new Date(a.lastModified).getTime();\n const timeB = new Date(b.lastModified).getTime();\n comparison = timeB - timeA;\n break;\n }\n case \"size\": {\n comparison = b.size - a.size;\n break;\n }\n case \"name\": {\n comparison = a.name.localeCompare(b.name, undefined, { sensitivity: \"base\" });\n break;\n }\n case \"gitStatus\": {\n const aDisplay = a.gitStatus ? getGitStatusDisplay(a.gitStatus, theme) : null;\n const bDisplay = b.gitStatus ? getGitStatusDisplay(b.gitStatus, theme) : null;\n const aPriority = aDisplay?.priority ?? 999;\n const bPriority = bDisplay?.priority ?? 999;\n comparison = aPriority - bPriority;\n break;\n }\n }\n return sortOrder === \"asc\" ? -comparison : comparison;\n });\n return files;\n }, [filesWithGitStatus, sortBy, sortOrder, theme]);\n const formatDate = (date) => {\n const now = new Date;\n const fileDate = new Date(date);\n const diffMs = now.getTime() - fileDate.getTime();\n const diffMins = Math.floor(diffMs / 60000);\n const diffHours = Math.floor(diffMs / 3600000);\n const diffDays = Math.floor(diffMs / 86400000);\n if (diffMins < 1)\n return \"Just now\";\n if (diffMins < 60)\n return `${diffMins}m ago`;\n if (diffHours < 24)\n return `${diffHours}h ago`;\n if (diffDays < 7)\n return `${diffDays}d ago`;\n return fileDate.toLocaleDateString(undefined, {\n month: \"short\",\n day: \"numeric\",\n year: fileDate.getFullYear() !== now.getFullYear() ? \"numeric\" : undefined\n });\n };\n const formatSize = (bytes) => {\n if (bytes === 0)\n return \"0 B\";\n const k = 1024;\n const sizes = [\"B\", \"KB\", \"MB\", \"GB\"];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return `${parseFloat((bytes / Math.pow(k, i)).toFixed(1))} ${sizes[i]}`;\n };\n const handleFileClick = (file) => {\n if (onFileSelect) {\n onFileSelect(file.relativePath);\n }\n };\n const handleContextMenu = (event, file) => {\n if (onContextMenu) {\n event.preventDefault();\n onContextMenu(event, file.relativePath);\n }\n };\n return /* @__PURE__ */ React5.createElement(\"div\", {\n ref: containerRef,\n style: {\n backgroundColor: theme.colors.background,\n color: theme.colors.text,\n fontFamily: theme.fonts.body,\n height: \"100%\",\n overflow: \"auto\",\n padding\n }\n }, /* @__PURE__ */ React5.createElement(\"div\", {\n style: {\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"2px\"\n }\n }, sortedFiles.map((file) => {\n const isSelected = selectedFile === file.relativePath;\n const gitDisplay = file.gitStatus ? getGitStatusDisplay(file.gitStatus, theme) : null;\n return /* @__PURE__ */ React5.createElement(\"div\", {\n key: file.relativePath,\n onClick: () => handleFileClick(file),\n onContextMenu: (e) => handleContextMenu(e, file),\n style: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n padding: \"8px 12px\",\n borderRadius: \"4px\",\n cursor: \"pointer\",\n backgroundColor: isSelected ? theme.colors.primary + \"20\" : \"transparent\",\n border: isSelected ? `1px solid ${theme.colors.primary}` : \"1px solid transparent\",\n transition: \"all 0.15s ease\"\n },\n onMouseEnter: (e) => {\n if (!isSelected) {\n e.currentTarget.style.backgroundColor = theme.colors.primary + \"10\";\n }\n },\n onMouseLeave: (e) => {\n if (!isSelected) {\n e.currentTarget.style.backgroundColor = \"transparent\";\n }\n }\n }, /* @__PURE__ */ React5.createElement(\"div\", {\n style: {\n display: \"flex\",\n alignItems: \"center\",\n flex: 1,\n minWidth: 0,\n gap: \"8px\"\n }\n }, gitDisplay && /* @__PURE__ */ React5.createElement(\"div\", {\n style: {\n display: \"flex\",\n alignItems: \"center\",\n color: gitDisplay.color,\n flexShrink: 0\n },\n title: gitDisplay.label\n }, gitDisplay.icon), /* @__PURE__ */ React5.createElement(\"div\", {\n style: {\n display: \"flex\",\n flexDirection: \"column\",\n flex: 1,\n minWidth: 0\n }\n }, /* @__PURE__ */ React5.createElement(\"div\", {\n style: {\n fontSize: \"14px\",\n fontWeight: isSelected ? 500 : 400,\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n color: gitDisplay?.color || theme.colors.text\n },\n title: file.relativePath\n }, file.name), /* @__PURE__ */ React5.createElement(\"div\", {\n style: {\n fontSize: \"12px\",\n color: theme.colors.secondary || theme.colors.text + \"99\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\"\n },\n title: file.relativePath\n }, file.relativePath))), /* @__PURE__ */ React5.createElement(\"div\", {\n style: {\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"flex-end\",\n fontSize: \"12px\",\n color: theme.colors.secondary || theme.colors.text + \"99\",\n marginLeft: \"16px\",\n flexShrink: 0\n }\n }, /* @__PURE__ */ React5.createElement(\"div\", null, formatDate(file.lastModified)), /* @__PURE__ */ React5.createElement(\"div\", null, formatSize(file.size))));\n })), sortedFiles.length === 0 && /* @__PURE__ */ React5.createElement(\"div\", {\n style: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n height: containerHeight,\n color: theme.colors.secondary || theme.colors.text + \"99\",\n fontSize: \"14px\"\n }\n }, showOnlyChanged ? \"No changed files\" : \"No files found\"));\n};\n// src/components/FileTreeContainer.tsx\nimport React6, { useState as useState4, useMemo as useMemo4 } from \"react\";\nvar FileTreeContainer = ({\n fileTree,\n theme,\n selectedFile,\n onFileSelect,\n onContextMenu\n}) => {\n const [filters, setFilters] = useState4([]);\n const selectedDirectories = useMemo4(() => {\n return filters.filter((f) => f.mode === \"include\").map((f) => f.path);\n }, [filters]);\n return /* @__PURE__ */ React6.createElement(\"div\", {\n style: { display: \"flex\", flexDirection: \"column\", height: \"100%\" }\n }, /* @__PURE__ */ React6.createElement(DirectoryFilterInput, {\n fileTree,\n theme,\n filters,\n onFiltersChange: setFilters\n }), /* @__PURE__ */ React6.createElement(\"div\", {\n style: { flex: 1, marginTop: \"1rem\", overflow: \"hidden\" }\n }, /* @__PURE__ */ React6.createElement(DynamicFileTree, {\n fileTree,\n theme,\n selectedDirectories,\n selectedFile,\n onFileSelect,\n onContextMenu\n })));\n};\n// src/components/GitStatusFileTree.tsx\nimport {\n Plus as Plus2,\n Minus as Minus2,\n Edit as Edit2,\n AlertCircle as AlertCircle2,\n GitBranch as GitBranch2,\n FileQuestion as FileQuestion2\n} from \"lucide-react\";\nimport React7, { useMemo as useMemo5 } from \"react\";\nimport { Tree as Tree2 } from \"react-arborist\";\nvar getGitStatusDisplay2 = (status, theme) => {\n switch (status) {\n case \"M\":\n case \"MM\":\n return {\n icon: /* @__PURE__ */ React7.createElement(Edit2, {\n size: 14\n }),\n color: theme.colors.primary || \"#007bff\",\n label: \"Modified\"\n };\n case \"A\":\n return {\n icon: /* @__PURE__ */ React7.createElement(Plus2, {\n size: 14\n }),\n color: \"#28a745\",\n label: \"Added\"\n };\n case \"D\":\n return {\n icon: /* @__PURE__ */ React7.createElement(Minus2, {\n size: 14\n }),\n color: \"#dc3545\",\n label: \"Deleted\"\n };\n case \"R\":\n return {\n icon: /* @__PURE__ */ React7.createElement(GitBranch2, {\n size: 14\n }),\n color: \"#6f42c1\",\n label: \"Renamed\"\n };\n case \"C\":\n return {\n icon: /* @__PURE__ */ React7.createElement(GitBranch2, {\n size: 14\n }),\n color: \"#20c997\",\n label: \"Copied\"\n };\n case \"U\":\n return {\n icon: /* @__PURE__ */ React7.createElement(AlertCircle2, {\n size: 14\n }),\n color: \"#fd7e14\",\n label: \"Unmerged\"\n };\n case \"??\":\n return {\n icon: /* @__PURE__ */ React7.createElement(FileQuestion2, {\n size: 14\n }),\n color: \"#6c757d\",\n label: \"Untracked\"\n };\n case \"AM\":\n return {\n icon: /* @__PURE__ */ React7.createElement(Plus2, {\n size: 14\n }),\n color: \"#17a2b8\",\n label: \"Added & Modified\"\n };\n default:\n return null;\n }\n};\nvar sortGitNodes = (a, b) => {\n const aIsDir = !!a.children;\n const bIsDir = !!b.children;\n if (aIsDir && !bIsDir)\n return -1;\n if (!aIsDir && bIsDir)\n return 1;\n return a.name.localeCompare(b.name, undefined, { sensitivity: \"base\" });\n};\nvar transformGitFileTree = (fileTree, gitStatusMap) => {\n const transformNode = (node, parentId) => {\n const id = parentId ? `${parentId}/${node.name}` : node.name;\n const gitStatus = gitStatusMap.get(id);\n const arborNode = {\n id,\n name: node.name,\n gitStatus\n };\n if (\"children\" in node && node.children) {\n arborNode.children = node.children.map((child) => transformNode(child, id)).sort(sortGitNodes);\n if (arborNode.children) {\n const hasChangedChildren = arborNode.children.some((child) => child.gitStatus || child.hasChangedChildren);\n arborNode.hasChangedChildren = hasChangedChildren;\n }\n }\n return arborNode;\n };\n return fileTree.root.children.map((node) => transformNode(node, \"\")).sort(sortGitNodes);\n};\nvar filterGitStatusNodes = (nodes, showUnchangedFiles) => {\n if (showUnchangedFiles)\n return nodes;\n const result = [];\n for (const node of nodes) {\n if (node.children) {\n if (node.gitStatus || node.hasChangedChildren) {\n const filteredChildren = filterGitStatusNodes(node.children, showUnchangedFiles);\n result.push({ ...node, children: filteredChildren });\n }\n } else {\n if (node.gitStatus) {\n result.push(node);\n }\n }\n }\n return result;\n};\nvar countVisibleNodes2 = (nodes, openByDefault) => {\n let count = 0;\n const countNode = (node) => {\n count++;\n if (node.children && node.children.length > 0) {\n if (openByDefault) {\n node.children.forEach(countNode);\n }\n }\n };\n nodes.forEach(countNode);\n return count;\n};\nvar GitStatusFileTree = ({\n fileTree,\n theme,\n gitStatusData,\n selectedDirectories = [],\n selectedFile,\n onDirectorySelect,\n onFileSelect,\n showUnchangedFiles = true,\n transparentBackground = false,\n horizontalNodePadding,\n onContextMenu,\n openByDefault,\n initialHeight = 600,\n autoHeight = false\n}) => {\n const gitStatusMap = useMemo5(() => {\n const map = new Map;\n gitStatusData.forEach((item) => {\n map.set(item.filePath, item.status);\n });\n return map;\n }, [gitStatusData]);\n const NodeRenderer = (props) => {\n const { node } = props;\n const gitDisplay = node.data.gitStatus ? getGitStatusDisplay2(node.data.gitStatus, theme) : null;\n let nameColor;\n if (gitDisplay) {\n nameColor = gitDisplay.color;\n } else if (node.data.hasChangedChildren) {\n const baseColor = theme.colors.primary || \"#007bff\";\n nameColor = baseColor + \"80\";\n }\n const rightContent = gitDisplay ? /* @__PURE__ */ React7.createElement(\"div\", {\n style: {\n display: \"flex\",\n alignItems: \"center\",\n color: gitDisplay.color,\n marginRight: \"8px\"\n },\n title: gitDisplay.label\n }, gitDisplay.icon, /* @__PURE__ */ React7.createElement(\"span\", {\n style: {\n marginLeft: \"4px\",\n fontSize: \"12px\",\n fontWeight: \"bold\"\n }\n }, node.data.gitStatus)) : null;\n return /* @__PURE__ */ React7.createElement(TreeNode, {\n ...props,\n theme,\n rightContent,\n nameColor,\n horizontalNodePadding,\n onContextMenu: (e, node2) => {\n if (onContextMenu) {\n onContextMenu(e, node2.data.id, !!node2.data.children);\n }\n }\n });\n };\n const treeData = useMemo5(() => {\n let transformedData = transformGitFileTree(fileTree, gitStatusMap);\n if (!showUnchangedFiles) {\n transformedData = filterGitStatusNodes(transformedData, showUnchangedFiles);\n }\n if (selectedDirectories && selectedDirectories.length > 0) {}\n return transformedData;\n }, [fileTree, gitStatusMap, showUnchangedFiles, selectedDirectories]);\n const handleSelect = (selectedNodes) => {\n const selectedFiles = selectedNodes.filter((node) => !node.data.children).map((node) => node.data.id);\n const selectedDirs = selectedNodes.filter((node) => node.data.children).map((node) => node.data.id);\n if (onFileSelect && selectedFiles.length > 0) {\n onFileSelect(selectedFiles[0]);\n }\n if (onDirectorySelect) {\n onDirectorySelect(selectedDirs);\n }\n };\n const calculatedHeight = useMemo5(() => {\n if (autoHeight) {\n const visibleNodeCount = countVisibleNodes2(treeData, openByDefault ?? false);\n const rowHeight = 28;\n return visibleNodeCount * rowHeight;\n }\n return initialHeight;\n }, [autoHeight, treeData, openByDefault, initialHeight]);\n const [containerRef, containerHeight] = useContainerHeight(calculatedHeight);\n return /* @__PURE__ */ React7.createElement(\"div\", {\n ref: containerRef,\n style: {\n backgroundColor: transparentBackground ? \"transparent\" : theme.colors.background,\n color: theme.colors.text,\n fontFamily: theme.fonts.body,\n ...autoHeight ? {} : { height: \"100%\" }\n }\n }, /* @__PURE__ */ React7.createElement(Tree2, {\n initialData: treeData,\n onSelect: handleSelect,\n ...selectedFile !== undefined && { selection: selectedFile },\n ...openByDefault !== undefined && { openByDefault },\n width: \"100%\",\n height: containerHeight,\n rowHeight: 28\n }, NodeRenderer));\n};\n// src/components/GitStatusFileTreeContainer.tsx\nimport { RefreshCw, Eye, EyeOff, AlertCircle as AlertCircle3 } from \"lucide-react\";\nimport React8, { useState as useState5, useMemo as useMemo6 } from \"react\";\nvar GitStatusFileTreeContainer = ({\n fileTree,\n theme,\n gitStatusData,\n selectedFile,\n onFileSelect,\n onRefresh,\n isLoading = false,\n error = null,\n showControls = true,\n onContextMenu,\n initialHeight,\n autoHeight\n}) => {\n const [filters, setFilters] = useState5([]);\n const [showUnchangedFiles, setShowUnchangedFiles] = useState5(true);\n const selectedDirectories = useMemo6(() => {\n return filters.filter((f) => f.mode === \"include\").map((f) => f.path);\n }, [filters]);\n const changedFilesCount = gitStatusData.length;\n const hasChanges = changedFilesCount > 0;\n const handleRefresh = () => {\n onRefresh?.();\n };\n const toggleShowUnchangedFiles = () => {\n setShowUnchangedFiles(!showUnchangedFiles);\n };\n return /* @__PURE__ */ React8.createElement(\"div\", {\n style: { display: \"flex\", flexDirection: \"column\", height: \"100%\" }\n }, showControls && /* @__PURE__ */ React8.createElement(\"div\", {\n style: {\n padding: \"12px\",\n borderBottom: `1px solid ${theme.colors.border || \"#e0e0e0\"}`,\n backgroundColor: theme.colors.backgroundSecondary || theme.colors.background\n }\n }, /* @__PURE__ */ React8.createElement(\"div\", {\n style: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n marginBottom: \"8px\"\n }\n }, /* @__PURE__ */ React8.createElement(\"div\", {\n style: { display: \"flex\", alignItems: \"center\", gap: \"8px\" }\n }, /* @__PURE__ */ React8.createElement(\"h3\", {\n style: {\n margin: 0,\n fontSize: \"14px\",\n fontWeight: \"bold\",\n color: theme.colors.text\n }\n }, \"Git Status\"), hasChanges && /* @__PURE__ */ React8.createElement(\"span\", {\n style: {\n backgroundColor: theme.colors.primary,\n color: \"#ffffff\",\n padding: \"2px 8px\",\n borderRadius: \"12px\",\n fontSize: \"12px\",\n fontWeight: \"bold\"\n }\n }, changedFilesCount), isLoading && /* @__PURE__ */ React8.createElement(RefreshCw, {\n size: 16,\n color: theme.colors.text,\n className: \"git-status-spinner\"\n })), /* @__PURE__ */ React8.createElement(\"div\", {\n style: { display: \"flex\", gap: \"8px\" }\n }, /* @__PURE__ */ React8.createElement(\"button\", {\n onClick: toggleShowUnchangedFiles,\n style: {\n background: \"none\",\n border: `1px solid ${theme.colors.border || \"#ccc\"}`,\n borderRadius: \"4px\",\n padding: \"4px 8px\",\n cursor: \"pointer\",\n display: \"flex\",\n alignItems: \"center\",\n gap: \"4px\",\n fontSize: \"12px\",\n color: theme.colors.text\n },\n title: showUnchangedFiles ? \"Hide unchanged files\" : \"Show all files\"\n }, showUnchangedFiles ? /* @__PURE__ */ React8.createElement(EyeOff, {\n size: 14\n }) : /* @__PURE__ */ React8.createElement(Eye, {\n size: 14\n }), showUnchangedFiles ? \"Hide unchanged\" : \"Show all\"), /* @__PURE__ */ React8.createElement(\"button\", {\n onClick: handleRefresh,\n disabled: isLoading,\n style: {\n background: \"none\",\n border: `1px solid ${theme.colors.border || \"#ccc\"}`,\n borderRadius: \"4px\",\n padding: \"4px 8px\",\n cursor: isLoading ? \"not-allowed\" : \"pointer\",\n display: \"flex\",\n alignItems: \"center\",\n gap: \"4px\",\n fontSize: \"12px\",\n color: theme.colors.text,\n opacity: isLoading ? 0.6 : 1\n },\n title: \"Refresh git status\"\n }, /* @__PURE__ */ React8.createElement(RefreshCw, {\n size: 14\n }), \"Refresh\"))), error && /* @__PURE__ */ React8.createElement(\"div\", {\n style: {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n padding: \"8px\",\n backgroundColor: \"#fff3cd\",\n border: \"1px solid #ffeaa7\",\n borderRadius: \"4px\",\n fontSize: \"12px\",\n color: \"#856404\"\n }\n }, /* @__PURE__ */ React8.createElement(AlertCircle3, {\n size: 14\n }), error), !error && hasChanges && /* @__PURE__ */ React8.createElement(\"div\", {\n style: {\n fontSize: \"12px\",\n color: theme.colors.textSecondary || \"#666\",\n marginTop: \"4px\"\n }\n }, changedFilesCount, \" file\", changedFilesCount !== 1 ? \"s\" : \"\", \" with changes\")), /* @__PURE__ */ React8.createElement(DirectoryFilterInput, {\n fileTree,\n theme,\n filters,\n onFiltersChange: setFilters\n }), /* @__PURE__ */ React8.createElement(\"div\", {\n style: { flex: 1, marginTop: \"1rem\", overflow: \"hidden\" }\n }, /* @__PURE__ */ React8.createElement(GitStatusFileTree, {\n fileTree,\n theme,\n gitStatusData,\n selectedDirectories,\n selectedFile,\n onFileSelect,\n showUnchangedFiles,\n onContextMenu,\n initialHeight,\n autoHeight\n })));\n};\n// src/components/MultiFileTree/MultiFileTree.tsx\nimport React10, { useState as useState6, useMemo as useMemo8 } from \"react\";\n\n// src/utils/multiTree/pathUtils.ts\nfunction extractNameFromPath(path) {\n if (!path)\n return \"\";\n const parts = path.split(\"/\");\n return parts[parts.length - 1] || \"\";\n}\nfunction parseUnifiedPath(path) {\n const pathSegments = path.split(\"/\");\n const sourceName = pathSegments[0];\n const originalPath = pathSegments.slice(1).join(\"/\");\n return {\n sourceName,\n originalPath\n };\n}\nfunction updateTreePaths(node, prefix) {\n const originalPath = node.path || \"\";\n const updatedPath = `${prefix}/${originalPath}`;\n const updatedRelativePath = `${prefix}/${node.relativePath || originalPath}`;\n if (\"children\" in node) {\n const dirNode = node;\n const nodeName = dirNode.name || extractNameFromPath(originalPath);\n const updatedDir = {\n ...dirNode,\n path: updatedPath,\n name: nodeName,\n relativePath: updatedRelativePath,\n depth: (dirNode.depth || 0) + 1,\n children: (dirNode.children || []).map((child) => updateTreePaths(child, prefix))\n };\n return updatedDir;\n } else {\n const fileNode = node;\n const nodeName = fileNode.name || extractNameFromPath(originalPath);\n return {\n ...fileNode,\n path: updatedPath,\n name: nodeName,\n relativePath: updatedRelativePath\n };\n }\n}\n\n// src/utils/multiTree/combineRepositoryTrees.ts\nfunction combineRepositoryTrees(sources, options = {}) {\n const rootDirectoryName = options.rootDirectoryName || \"Repositories\";\n if (sources.length === 0) {\n return {\n sha: \"empty\",\n root: {\n path: \"\",\n name: rootDirectoryName,\n children: [],\n fileCount: 0,\n totalSize: 0,\n depth: 0,\n relativePath: \"\"\n },\n allFiles: [],\n allDirectories: [],\n stats: {\n totalFiles: 0,\n totalDirectories: 0,\n totalSize: 0,\n maxDepth: 0\n },\n metadata: {\n id: \"combined-tree\",\n timestamp: new Date,\n sourceType: \"combined\",\n sourceInfo: {}\n }\n };\n }\n const rootChildren = [];\n const allFiles = [];\n const allDirectories = [];\n let totalFileCount = 0;\n let totalDirectoryCount = 0;\n let totalSizeBytes = 0;\n let maxDepth = 0;\n const rootDir = {\n path: \"\",\n name: rootDirectoryName,\n children: [],\n fileCount: 0,\n totalSize: 0,\n depth: 0,\n relativePath: \"\"\n };\n sources.forEach((source) => {\n const sourceTree = source.tree;\n if (!sourceTree || !sourceTree.root) {\n return;\n }\n const sourceName = source.name || \"unknown-source\";\n const sourceDir = {\n path: sourceName,\n name: sourceName,\n children: sourceTree.root.children ? sourceTree.root.children.map((child) => {\n return updateTreePaths(child, sourceName);\n }) : [],\n fileCount: sourceTree.root.fileCount || 0,\n totalSize: sourceTree.root.totalSize || 0,\n depth: 1,\n relativePath: sourceName\n };\n rootChildren.push(sourceDir);\n allDirectories.push(sourceDir);\n if (sourceTree.allFiles) {\n sourceTree.allFiles.forEach((file) => {\n const updatedFile = {\n ...file,\n path: `${sourceName}/${file.path || \"\"}`,\n name: file.name || extractNameFromPath(file.path) || \"unknown\"\n };\n allFiles.push(updatedFile);\n });\n }\n if (sourceTree.allDirectories) {\n sourceTree.allDirectories.forEach((dir) => {\n const updatedDir = {\n ...dir,\n path: `${sourceName}/${dir.path || \"\"}`,\n name: dir.name || extractNameFromPath(dir.path) || \"unknown\"\n };\n allDirectories.push(updatedDir);\n });\n }\n if (sourceTree.stats) {\n totalFileCount += sourceTree.stats.totalFiles || 0;\n totalDirectoryCount += sourceTree.stats.totalDirectories || 0;\n totalSizeBytes += sourceTree.stats.totalSize || 0;\n maxDepth = Math.max(maxDepth, (sourceTree.stats.maxDepth || 0) + 1);\n }\n });\n rootDir.children = rootChildren;\n rootDir.fileCount = totalFileCount;\n rootDir.totalSize = totalSizeBytes;\n allDirectories.unshift(rootDir);\n return {\n sha: \"combined\",\n root: rootDir,\n allFiles,\n allDirectories,\n stats: {\n totalFiles: totalFileCount,\n totalDirectories: totalDirectoryCount + sources.length + 1,\n totalSize: totalSizeBytes,\n maxDepth: maxDepth + 1\n },\n metadata: {\n id: \"combined-tree\",\n timestamp: new Date,\n sourceType: \"combined\",\n sourceInfo: { sourceCount: sources.length }\n }\n };\n}\n// src/utils/multiTree/filterFileTree.ts\nfunction filterFileTreeByPaths(tree, selectedPaths) {\n if (selectedPaths.length === 0) {\n return tree;\n }\n const shouldIncludePath = (path) => {\n return selectedPaths.some((selectedPath) => path.startsWith(selectedPath) || selectedPath.startsWith(path));\n };\n const filterDirectory = (dir) => {\n if (!shouldIncludePath(dir.path)) {\n return null;\n }\n const filteredChildren = dir.children.map((child) => {\n if (\"children\" in child) {\n return filterDirectory(child);\n } else {\n return shouldIncludePath(child.path) ? child : null;\n }\n }).filter((child) => child !== null);\n if (filteredChildren.length === 0 && !selectedPaths.includes(dir.path)) {\n return null;\n }\n return {\n ...dir,\n children: filteredChildren,\n fileCount: filteredChildren.filter((c) => !(\"children\" in c)).length\n };\n };\n const filteredRoot = filterDirectory(tree.root);\n if (!filteredRoot) {\n return tree;\n }\n const allFiles = tree.allFiles.filter((f) => shouldIncludePath(f.path));\n const allDirectories = tree.allDirectories.filter((d) => shouldIncludePath(d.path));\n return {\n ...tree,\n root: filteredRoot,\n allFiles,\n allDirectories,\n stats: {\n ...tree.stats,\n totalFiles: allFiles.length,\n totalDirectories: allDirectories.length\n }\n };\n}\n// src/components/MultiFileTree/MultiFileTreeCore.tsx\nimport React9, { useMemo as useMemo7 } from \"react\";\nvar MultiFileTreeCore = ({\n sources,\n theme,\n selectedDirectories = [],\n viewMode = \"all\",\n onFileSelect,\n initialOpenState,\n defaultOpen = false,\n horizontalNodePadding\n}) => {\n const unifiedTree = useMemo7(() => {\n return combineRepositoryTrees(sources);\n }, [sources]);\n const displayTree = useMemo7(() => {\n if (viewMode === \"selected\" && selectedDirectories.length > 0) {\n return filterFileTreeByPaths(unifiedTree, selectedDirectories);\n }\n return unifiedTree;\n }, [unifiedTree, viewMode, selectedDirectories]);\n const handleFileSelect = (filePath) => {\n if (!onFileSelect)\n return;\n const { sourceName, originalPath } = parseUnifiedPath(filePath);\n const source = sources.find((s) => s.name === sourceName);\n if (source) {\n onFileSelect(source, originalPath);\n }\n };\n return /* @__PURE__ */ React9.createElement(DynamicFileTree, {\n key: `unified-${viewMode}-${selectedDirectories.join(\",\")}`,\n fileTree: displayTree,\n theme,\n selectedDirectories,\n onFileSelect: handleFileSelect,\n initialOpenState,\n defaultOpen,\n horizontalNodePadding\n });\n};\n\n// src/components/MultiFileTree/MultiFileTree.tsx\nvar MultiFileTree = ({\n sources,\n theme,\n showHeader = true,\n showFilters = true,\n showViewModeToggle = true,\n showSelectedFileIndicator = true,\n initialViewMode = \"all\",\n rootDirectoryName = \"Repositories\",\n title = \"Repository Explorer\",\n onFileSelect,\n initialOpenState,\n defaultOpen = false,\n horizontalNodePadding\n}) => {\n const [selectedFile, setSelectedFile] = useState6(null);\n const [viewMode, setViewMode] = useState6(initialViewMode);\n const [directoryFilters, setDirectoryFilters] = useState6([]);\n const unifiedTree = useMemo8(() => {\n return combineRepositoryTrees(sources, { rootDirectoryName });\n }, [sources, rootDirectoryName]);\n const currentSelectedDirs = directoryFilters.filter((f) => f.mode === \"include\").map((f) => f.path);\n const handleFileSelect = (source, filePath) => {\n setSelectedFile({ source, path: filePath });\n if (onFileSelect) {\n onFileSelect(source, filePath);\n }\n };\n const handleFiltersChange = (filters) => {\n setDirectoryFilters(filters);\n };\n return /* @__PURE__ */ React10.createElement(\"div\", {\n style: {\n width: \"100%\",\n height: \"100%\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"16px\"\n }\n }, /* @__PURE__ */ React10.createElement(\"div\", {\n style: {\n flex: 1,\n border: `2px solid ${theme.colors.border}`,\n borderRadius: \"12px\",\n overflow: \"hidden\",\n backgroundColor: theme.colors.background,\n display: \"flex\",\n flexDirection: \"column\"\n }\n }, showHeader && /* @__PURE__ */ React10.createElement(\"div\", {\n style: {\n padding: \"16px\",\n borderBottom: `1px solid ${theme.colors.border}`,\n backgroundColor: theme.colors.backgroundSecondary,\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n flexWrap: \"wrap\",\n gap: \"12px\"\n }\n }, /* @__PURE__ */ React10.createElement(\"h4\", {\n style: {\n fontSize: \"16px\",\n fontWeight: \"600\",\n color: theme.colors.text,\n margin: 0\n }\n }, title), showViewModeToggle && /* @__PURE__ */ React10.createElement(\"div\", {\n style: {\n display: \"flex\",\n gap: \"8px\"\n }\n }, /* @__PURE__ */ React10.createElement(\"button\", {\n onClick: () => setViewMode(\"all\"),\n style: {\n padding: \"6px 12px\",\n fontSize: \"13px\",\n fontWeight: \"500\",\n backgroundColor: viewMode === \"all\" ? theme.colors.primary : \"transparent\",\n color: viewMode === \"all\" ? theme.colors.background : theme.colors.text,\n border: `1px solid ${viewMode === \"all\" ? theme.colors.primary : theme.colors.border}`,\n borderRadius: \"6px\",\n cursor: \"pointer\",\n transition: \"all 0.2s ease\"\n }\n }, \"Show All\"), /* @__PURE__ */ React10.createElement(\"button\", {\n onClick: () => setViewMode(\"selected\"),\n disabled: currentSelectedDirs.length === 0,\n style: {\n padding: \"6px 12px\",\n fontSize: \"13px\",\n fontWeight: \"500\",\n backgroundColor: viewMode === \"selected\" ? theme.colors.primary : \"transparent\",\n color: viewMode === \"selected\" ? theme.colors.background : currentSelectedDirs.length === 0 ? theme.colors.textSecondary : theme.colors.text,\n border: `1px solid ${viewMode === \"selected\" ? theme.colors.primary : theme.colors.border}`,\n borderRadius: \"6px\",\n cursor: currentSelectedDirs.length === 0 ? \"not-allowed\" : \"pointer\",\n transition: \"all 0.2s ease\",\n opacity: currentSelectedDirs.length === 0 ? 0.5 : 1\n },\n title: currentSelectedDirs.length === 0 ? \"Select directories below first\" : `Show only selected directories (${currentSelectedDirs.length})`\n }, \"Show Selected (\", currentSelectedDirs.length, \")\"))), showFilters && /* @__PURE__ */ React10.createElement(\"div\", {\n style: {\n padding: \"16px\",\n borderBottom: `1px solid ${theme.colors.border}`,\n backgroundColor: theme.colors.background\n }\n }, /* @__PURE__ */ React10.createElement(\"div\", {\n style: {\n fontSize: \"13px\",\n fontWeight: \"500\",\n color: theme.colors.text,\n marginBottom: \"8px\"\n }\n }, \"Select Directories to Filter:\"), /* @__PURE__ */ React10.createElement(DirectoryFilterInput, {\n fileTree: unifiedTree,\n theme,\n filters: directoryFilters,\n onFiltersChange: handleFiltersChange\n }), currentSelectedDirs.length === 0 && /* @__PURE__ */ React10.createElement(\"div\", {\n style: {\n fontSize: \"12px\",\n color: theme.colors.textSecondary,\n marginTop: \"8px\",\n fontStyle: \"italic\"\n }\n }, 'Type to search and select directories from any repository. Selected directories will be highlighted when you click \"Show Selected\".'), currentSelectedDirs.length > 0 && viewMode === \"all\" && /* @__PURE__ */ React10.createElement(\"div\", {\n style: {\n fontSize: \"12px\",\n color: theme.colors.primary,\n marginTop: \"8px\"\n }\n }, \"✓ \", currentSelectedDirs.length, \" director\", currentSelectedDirs.length === 1 ? \"y\" : \"ies\", ' selected. Click \"Show Selected\" to filter the view.')), /* @__PURE__ */ React10.createElement(\"div\", {\n style: {\n flex: 1,\n overflow: \"auto\",\n padding: \"16px\"\n }\n }, viewMode === \"selected\" && currentSelectedDirs.length > 0 && /* @__PURE__ */ React10.createElement(\"div\", {\n style: {\n fontSize: \"13px\",\n color: theme.colors.textSecondary,\n marginBottom: \"12px\",\n padding: \"8px 12px\",\n backgroundColor: theme.colors.backgroundSecondary,\n borderRadius: \"6px\",\n border: `1px solid ${theme.colors.border}`\n }\n }, \"Showing only selected directories:\", \" \", currentSelectedDirs.map((dir) => {\n const segments = dir.split(\"/\");\n return segments.length > 1 ? `${segments[0]}/${segments[segments.length - 1]}` : dir;\n }).join(\", \")), /* @__PURE__ */ React10.createElement(MultiFileTreeCore, {\n sources,\n theme,\n selectedDirectories: currentSelectedDirs,\n viewMode,\n onFileSelect: handleFileSelect,\n initialOpenState,\n defaultOpen,\n horizontalNodePadding\n }))), showSelectedFileIndicator && selectedFile && /* @__PURE__ */ React10.createElement(\"div\", {\n style: {\n padding: \"12px 16px\",\n backgroundColor: theme.colors.backgroundSecondary,\n borderRadius: \"8px\",\n border: `1px solid ${theme.colors.border}`,\n fontSize: \"12px\",\n color: theme.colors.textSecondary\n }\n }, \"Selected: \", selectedFile.source.name, \" / \", selectedFile.path));\n};\nexport {\n useContainerHeight,\n updateTreePaths,\n parseUnifiedPath,\n filterFileTreeByPaths,\n extractNameFromPath,\n combineRepositoryTrees,\n TreeNode,\n OrderedFileList,\n MultiFileTreeCore,\n MultiFileTree,\n GitStatusFileTreeContainer,\n GitStatusFileTree,\n GitOrderedFileList,\n FileTreeContainer,\n DynamicFileTree,\n DirectoryFilterInput\n};\n","class _{static buildTreeFromPaths(j,k=\"\"){let q=k.endsWith(\"/\")?k.slice(0,-1):k,E=new Map,J=[],O=[],X=new Set;j.forEach((K)=>{let Q=K.split(\"/\");for(let W=1;W<Q.length;W++)X.add(Q.slice(0,W).join(\"/\"))}),Array.from(X).forEach((K)=>{let Q=K.split(\"/\"),W=Q[Q.length-1]||\"\",Y=Q.length-1,M={path:K,name:W,children:[],fileCount:0,totalSize:0,depth:Y,relativePath:this.calculateRelativePath(K,q)};E.set(K,M),O.push(M)}),j.forEach((K)=>{let Q=K.split(\"/\"),W=Q[Q.length-1]||\"\",Y=this.extractExtension(W),M=Q.slice(0,-1).join(\"/\"),A={path:K,name:W,extension:Y,size:0,lastModified:new Date,isDirectory:!1,relativePath:this.calculateRelativePath(K,q)};J.push(A);let H=E.get(M);if(H&&\"children\"in H)H.children.push(A),H.fileCount++}),Array.from(X).sort((K,Q)=>Q.length-K.length).forEach((K)=>{let Q=K.split(\"/\");if(Q.length>1){let W=Q.slice(0,-1).join(\"/\"),Y=E.get(W),M=E.get(K);if(Y&&M&&\"children\"in Y)Y.children.push(M)}});let $=q?q.split(\"/\").pop()||\"root\":\"root\",Z=[];return O.forEach((K)=>{if(K.path.split(\"/\").length===1)Z.push(K)}),J.forEach((K)=>{if(K.path.split(\"/\").length===1)Z.push(K)}),{root:{path:q||\".\",name:$,children:Z,fileCount:J.length,totalSize:0,depth:0,relativePath:\"\"},allFiles:J,allDirectories:O}}static buildTreeFromFileInfos(j,k=\"\"){let q=k.endsWith(\"/\")?k.slice(0,-1):k,E=new Map,J=[],O=new Set;j.forEach((V)=>{let K=V.path.split(\"/\");for(let Q=1;Q<K.length;Q++)O.add(K.slice(0,Q).join(\"/\"))}),Array.from(O).forEach((V)=>{let K=V.split(\"/\"),Q=K[K.length-1]||\"\",W={path:V,name:Q,children:[],fileCount:0,totalSize:0,depth:K.length-1,relativePath:this.calculateRelativePath(V,q)};E.set(V,W),J.push(W)}),j.forEach((V)=>{let Q=V.path.split(\"/\").slice(0,-1).join(\"/\"),W=E.get(Q);if(W)W.children.push(V),W.fileCount++,W.totalSize+=V.size||0}),Array.from(O).sort((V,K)=>K.length-V.length).forEach((V)=>{let K=V.split(\"/\");if(K.length>1){let Q=K.slice(0,-1).join(\"/\"),W=E.get(Q),Y=E.get(V);if(W&&Y)W.children.push(Y),W.fileCount+=Y.fileCount,W.totalSize+=Y.totalSize}});let X=q?q.split(\"/\").pop()||\"root\":\"root\",$=[];return J.forEach((V)=>{if(V.path.split(\"/\").length===1)$.push(V)}),j.forEach((V)=>{if(V.path.split(\"/\").length===1)$.push(V)}),{root:{path:q||\".\",name:X,children:$,fileCount:j.length,totalSize:j.reduce((V,K)=>V+(K.size||0),0),depth:0,relativePath:\"\"},allFiles:j,allDirectories:J}}static calculateStats(j,k){return{totalFiles:j.length,totalDirectories:k.length,totalSize:j.reduce((q,E)=>q+(E.size||0),0),maxDepth:this.calculateMaxDepth(k)}}static calculateMaxDepth(j){if(j.length===0)return 0;return Math.max(...j.map((k)=>k.depth||0))}static extractExtension(j){if(!j.includes(\".\"))return\"\";let k=j.split(\".\");return\".\"+k[k.length-1].toLowerCase()}static calculateRelativePath(j,k){if(!k||k===\"\"||k===\".\")return j;if(j===k)return\"\";if(j.startsWith(k)){let q=j.substring(k.length);return q.startsWith(\"/\")?q.substring(1):q}return j}static hashPaths(j){let q=[...j].sort().join(`\n`),E=0;for(let J=0;J<q.length;J++){let O=q.charCodeAt(J);E=(E<<5)-E+O,E=E&E}return`paths-${Math.abs(E).toString(36)}`}static simpleHash(j){let k=0;for(let q=0;q<j.length;q++){let E=j.charCodeAt(q);k=(k<<5)-k+E,k=k&k}return Math.abs(k).toString(36)}}class G{generateTimestampId(){return Date.now().toString(36)}simpleHash(j){let k=0;for(let q=0;q<j.length;q++){let E=j.charCodeAt(q);k=(k<<5)-k+E,k=k&k}return Math.abs(k).toString(36)}}class N extends G{build(j){let{files:k,rootPath:q=\"\"}=j,{root:E,allFiles:J,allDirectories:O}=_.buildTreeFromPaths(k,q),X=_.calculateStats(J,O);return{sha:this.calculateSha(j),metadata:this.generateMetadata(j),root:E,allFiles:J,allDirectories:O,stats:X}}generateMetadata(j){let{files:k,rootPath:q=\"\"}=j,E=this.calculateSha(j);return{id:`paths-${E}-${this.generateTimestampId()}`,timestamp:new Date,sourceType:\"paths\",sourceSha:E,sourceInfo:{fileCount:k.length,rootPath:q||\".\"}}}calculateSha(j){return _.hashPaths(j.files)}}class L extends G{build(j){let{files:k,rootPath:q=\"\"}=j,E=k.map((Z)=>({path:Z.path,name:this.getFileName(Z.path),extension:this.getFileExtension(Z.path),size:Z.size||0,lastModified:Z.lastModified||new Date,isDirectory:!1,relativePath:this.calculateRelativePath(Z.path,q)})),{root:J,allFiles:O,allDirectories:X}=_.buildTreeFromFileInfos(E,q),$=_.calculateStats(O,X);return{sha:this.calculateSha(j),metadata:this.generateMetadata(j),root:J,allFiles:O,allDirectories:X,stats:$}}generateMetadata(j){let{commitSha:k,branch:q,files:E,rootPath:J=\"\",isDirty:O=!1}=j;return{id:`git-${k}${O?\"-dirty\":\"\"}-${this.generateTimestampId()}`,timestamp:new Date,sourceType:\"git\",sourceSha:k,sourceInfo:{commitSha:k,branch:q,rootPath:J||\".\",isDirty:O,fileCount:E.length}}}calculateSha(j){let{commitSha:k,isDirty:q}=j;return q?`${k}-dirty`:k}getFileName(j){let k=j.split(\"/\");return k[k.length-1]||\"\"}getFileExtension(j){if(!j.includes(\".\"))return\"\";let k=j.split(\".\");return\".\"+k[k.length-1].toLowerCase()}calculateRelativePath(j,k){if(!k||k===\"\"||k===\".\")return j;if(j===k)return\"\";if(j.startsWith(k)){let q=j.substring(k.length);return q.startsWith(\"/\")?q.substring(1):q}return j}}var R={localWorkingCopy(j,k,q,E,J){return{id:`local-${j}`,type:\"local\",owner:k,name:q,remoteUrl:E,location:j,locationType:\"working\",label:`Local: ${q}${J?` (${J})`:\"\"}`,provider:\"local\",metadata:{currentBranch:J}}},remoteBranch(j,k,q,E,J=\"github\"){return{id:`${J}-${j}-${k}-${E}`,type:\"remote\",owner:j,name:k,remoteUrl:q,location:E,locationType:\"branch\",label:`${k}@${E}`,provider:J,apiUrl:J===\"github\"?\"https://api.github.com\":void 0}},remoteTag(j,k,q,E,J=\"github\"){return{id:`${J}-${j}-${k}-tag-${E}`,type:\"remote\",owner:j,name:k,remoteUrl:q,location:E,locationType:\"tag\",label:`${k}@${E}`,provider:J,apiUrl:J===\"github\"?\"https://api.github.com\":void 0}},remoteCommit(j,k,q,E,J=\"github\"){let O=E.substring(0,7);return{id:`${J}-${j}-${k}-commit-${O}`,type:\"remote\",owner:j,name:k,remoteUrl:q,location:E,locationType:\"commit\",label:`${k}@${O}`,provider:J,apiUrl:J===\"github\"?\"https://api.github.com\":void 0,metadata:{commitSha:E}}},temporary(j,k,q){return{...j,id:`temp-${j.id}-${Date.now()}`,location:k,locationType:q,label:`${j.label} (temporary)`,isTemporary:!0,createdAt:Date.now()}}},x=(j)=>j.type===\"local\",z=(j)=>j.type===\"remote\",B=(j)=>j.isTemporary===!0,C=(j)=>j.provider===\"github\";function D(j){if(j.label)return j.label;let k=j.type===\"local\"?\"Local: \":\"\",q=j.locationType===\"branch\"?`@${j.location}`:j.locationType===\"tag\"?`@${j.location}`:j.locationType===\"commit\"?`@${j.location.substring(0,7)}`:\"\";return`${k}${j.name}${q}`}function g(j){if(j.type===\"local\")return`local:${j.location}`;return`${j.provider}:${j.owner}/${j.name}:${j.locationType}:${j.location}`}function w(j){return!j.isTemporary}function F(j){if(j.isTemporary)return 300000;if(j.type===\"local\")return 600000;if(j.locationType===\"commit\")return 3600000;return 1800000}function T(j,k){if(j.isDefault&&!k.isDefault)return-1;if(!j.isDefault&&k.isDefault)return 1;if(j.type===\"local\"&&k.type===\"remote\")return-1;if(j.type===\"remote\"&&k.type===\"local\")return 1;return j.label.localeCompare(k.label)}class U{files=new Map;binaryFiles=new Map;exists(j){return this.files.has(j)||this.binaryFiles.has(j)||this.isDirectory(j)}readFile(j){let k=this.files.get(j);if(k===void 0)throw new Error(`File not found: ${j}`);return k}writeFile(j,k){let q=this.dirname(j);if(q&&q!==\"/\"&&q!==j)this.createDir(q);this.files.set(j,k)}deleteFile(j){this.files.delete(j),this.binaryFiles.delete(j)}readBinaryFile(j){let k=this.binaryFiles.get(j);if(k===void 0)throw new Error(`Binary file not found: ${j}`);return k}writeBinaryFile(j,k){let q=this.dirname(j);if(q&&q!==\"/\"&&q!==j)this.createDir(q);this.binaryFiles.set(j,k)}createDir(j){if(!j||j===\"/\")return;this.files.set(j+\"/.dir\",\"\")}readDir(j){if((this.files.has(j)||this.binaryFiles.has(j))&&!j.endsWith(\"/.dir\"))throw new Error(`ENOTDIR: not a directory, scandir '${j}'`);if(!this.isDirectory(j))throw new Error(`ENOENT: no such file or directory, scandir '${j}'`);let k=j.endsWith(\"/\")?j.slice(0,-1):j,q=k===\"/\"?\"\":`${k}/`,E=new Set;for(let J of this.files.keys())if(J.startsWith(q)){let O=J.slice(q.length);if(O){if(O===\".dir\")continue;if(O.endsWith(\"/.dir\")){let X=O.slice(0,-5).split(\"/\")[0];if(X)E.add(X)}else{let X=O.split(\"/\")[0];if(X&&X!==\".dir\")E.add(X)}}}for(let J of this.binaryFiles.keys())if(J.startsWith(q)){let O=J.slice(q.length);if(O){let X=O.split(\"/\");if(X[0])E.add(X[0])}}return Array.from(E)}deleteDir(j){let k=`${j}/`;for(let q of this.files.keys())if(q.startsWith(k)||q===j+\"/.dir\")this.files.delete(q);for(let q of this.binaryFiles.keys())if(q.startsWith(k))this.binaryFiles.delete(q)}join(...j){return j.join(\"/\").replace(/\\/+/g,\"/\").replace(/\\/$/,\"\")||\"/\"}dirname(j){let k=j.lastIndexOf(\"/\");return k<=0?\"/\":j.slice(0,k)}isAbsolute(j){return j.startsWith(\"/\")}relative(j,k){if(k.startsWith(j))return k.slice(j.length+1);return k}isDirectory(j){if(this.files.has(j+\"/.dir\"))return!0;let k=`${j}/`;for(let q of this.files.keys())if(q.startsWith(k))return!0;for(let q of this.binaryFiles.keys())if(q.startsWith(k))return!0;return!1}normalizeRepositoryPath(j){let k=j;while(k&&k!==\"/\"){if(this.exists(this.join(k,\".git\")))return k;k=this.dirname(k)}throw new Error(`Not a git repository: ${j}`)}findProjectRoot(j){return this.normalizeRepositoryPath(j)}getRepositoryName(j){let k=j.split(\"/\").filter((q)=>q);return k[k.length-1]||\"root\"}clear(){this.files.clear(),this.binaryFiles.clear()}getFiles(){return new Map(this.files)}setupTestRepo(j){this.createDir(j),this.createDir(this.join(j,\".git\")),this.createDir(this.join(j,\".alexandria\"))}debug(){console.log(\"InMemory FileSystem Contents:\");for(let[j,k]of this.files.entries())if(!j.endsWith(\"/.dir\"))console.log(` ${j}: ${k.length} bytes`)}}export{w as shouldCacheSource,B as isTemporarySource,z as isRemoteSource,x as isLocalSource,C as isGitHubSource,g as getSourceIdentifier,D as getSourceDisplayName,F as getSourceCacheTTL,R as createFileTreeSource,T as compareFileTreeSources,N as PathsFileTreeBuilder,U as InMemoryFileSystemAdapter,L as GitFileTreeBuilder,_ as FileTreeCore};\n\n//# debugId=49C15B26110733AA64756E2164756E21\n//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL2ZpbGVUcmVlQ29yZS50cyIsICJzcmMvZmlsZVRyZWVCdWlsZGVyLnRzIiwgInNyYy9idWlsZGVycy9QYXRoc0ZpbGVUcmVlQnVpbGRlci50cyIsICJzcmMvYnVpbGRlcnMvR2l0RmlsZVRyZWVCdWlsZGVyLnRzIiwgInNyYy9maWxlVHJlZVNvdXJjZS50cyIsICJzcmMvYWRhcHRlcnMvSW5NZW1vcnlGaWxlU3lzdGVtQWRhcHRlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsKICAgICIvKipcbiAqIENvcmUgdXRpbGl0aWVzIGZvciBGaWxlVHJlZSBvcGVyYXRpb25zXG4gKiBTaGFyZWQgbG9naWMgdGhhdCBhbGwgYnVpbGRlcnMgY2FuIHVzZVxuICovXG5cbmltcG9ydCB7IEZpbGVJbmZvLCBEaXJlY3RvcnlJbmZvLCBGaWxlVHJlZU5vZGUgfSBmcm9tICcuL2ZpbGVUcmVlJztcbmltcG9ydCB7IEZpbGVUcmVlU3RhdHMgfSBmcm9tICcuL2ZpbGVUcmVlQnVpbGRlcic7XG5cbi8qKlxuICogQ29yZSB1dGlsaXRpZXMgdGhhdCBhbGwgYnVpbGRlcnMgY2FuIHVzZVxuICogVGhlc2UgYXJlIHRoZSB0cnVseSBjb21tb24gb3BlcmF0aW9uc1xuICovXG5leHBvcnQgY2xhc3MgRmlsZVRyZWVDb3JlIHtcbiAgLyoqXG4gICAqIEJ1aWxkIHRyZWUgc3RydWN0dXJlIGZyb20gZmlsZSBwYXRoc1xuICAgKiBUaGlzIGlzIHRoZSBjb3JlIGFsZ29yaXRobSB0aGF0IGV2ZXJ5b25lIG5lZWRzXG4gICAqL1xuICBzdGF0aWMgYnVpbGRUcmVlRnJvbVBhdGhzKFxuICAgIHBhdGhzOiBzdHJpbmdbXSxcbiAgICByb290UGF0aDogc3RyaW5nID0gJydcbiAgKToge1xuICAgIHJvb3Q6IERpcmVjdG9yeUluZm87XG4gICAgYWxsRmlsZXM6IEZpbGVJbmZvW107XG4gICAgYWxsRGlyZWN0b3JpZXM6IERpcmVjdG9yeUluZm9bXTtcbiAgfSB7XG4gICAgY29uc3Qgbm9ybWFsaXplZFJvb3QgPSByb290UGF0aC5lbmRzV2l0aCgnLycpID8gcm9vdFBhdGguc2xpY2UoMCwgLTEpIDogcm9vdFBhdGg7XG5cbiAgICAvLyBCdWlsZCB0cmVlIHN0cnVjdHVyZSBmcm9tIGZpbGUgcGF0aHNcbiAgICBjb25zdCB0cmVlOiBNYXA8c3RyaW5nLCBGaWxlVHJlZU5vZGU+ID0gbmV3IE1hcCgpO1xuICAgIGNvbnN0IGFsbEZpbGVzOiBGaWxlSW5mb1tdID0gW107XG4gICAgY29uc3QgYWxsRGlyZWN0b3JpZXM6IERpcmVjdG9yeUluZm9bXSA9IFtdO1xuXG4gICAgLy8gRmlyc3QsIGNyZWF0ZSBhbGwgZGlyZWN0b3JpZXNcbiAgICBjb25zdCBkaXJlY3RvcnlQYXRocyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIHBhdGhzLmZvckVhY2goZmlsZVBhdGggPT4ge1xuICAgICAgY29uc3QgcGFydHMgPSBmaWxlUGF0aC5zcGxpdCgnLycpO1xuICAgICAgLy8gQnVpbGQgYWxsIHBhcmVudCBkaXJlY3RvcnkgcGF0aHNcbiAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgcGFydHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZGlyZWN0b3J5UGF0aHMuYWRkKHBhcnRzLnNsaWNlKDAsIGkpLmpvaW4oJy8nKSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBDcmVhdGUgRGlyZWN0b3J5SW5mbyBvYmplY3RzIGFuZCBhZGQgdG8gdHJlZVxuICAgIEFycmF5LmZyb20oZGlyZWN0b3J5UGF0aHMpLmZvckVhY2goZGlyUGF0aCA9PiB7XG4gICAgICBjb25zdCBwYXJ0cyA9IGRpclBhdGguc3BsaXQoJy8nKTtcbiAgICAgIGNvbnN0IG5hbWUgPSBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXSB8fCAnJztcbiAgICAgIGNvbnN0IGRlcHRoID0gcGFydHMubGVuZ3RoIC0gMTtcblxuICAgICAgY29uc3QgZGlySW5mbzogRGlyZWN0b3J5SW5mbyA9IHtcbiAgICAgICAgcGF0aDogZGlyUGF0aCxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgICBmaWxlQ291bnQ6IDAsXG4gICAgICAgIHRvdGFsU2l6ZTogMCxcbiAgICAgICAgZGVwdGgsXG4gICAgICAgIHJlbGF0aXZlUGF0aDogdGhpcy5jYWxjdWxhdGVSZWxhdGl2ZVBhdGgoZGlyUGF0aCwgbm9ybWFsaXplZFJvb3QpLFxuICAgICAgfTtcblxuICAgICAgdHJlZS5zZXQoZGlyUGF0aCwgZGlySW5mbyk7XG4gICAgICBhbGxEaXJlY3Rvcmllcy5wdXNoKGRpckluZm8pO1xuICAgIH0pO1xuXG4gICAgLy8gVGhlbiwgY3JlYXRlIGFsbCBmaWxlcyBhbmQgYWRkIHRoZW0gdG8gdGhlaXIgcGFyZW50IGRpcmVjdG9yaWVzXG4gICAgcGF0aHMuZm9yRWFjaChmaWxlUGF0aCA9PiB7XG4gICAgICBjb25zdCBwYXJ0cyA9IGZpbGVQYXRoLnNwbGl0KCcvJyk7XG4gICAgICBjb25zdCBuYW1lID0gcGFydHNbcGFydHMubGVuZ3RoIC0gMV0gfHwgJyc7XG4gICAgICBjb25zdCBleHRlbnNpb24gPSB0aGlzLmV4dHJhY3RFeHRlbnNpb24obmFtZSk7XG4gICAgICBjb25zdCBwYXJlbnRQYXRoID0gcGFydHMuc2xpY2UoMCwgLTEpLmpvaW4oJy8nKTtcblxuICAgICAgY29uc3QgZmlsZUluZm86IEZpbGVJbmZvID0ge1xuICAgICAgICBwYXRoOiBmaWxlUGF0aCxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgZXh0ZW5zaW9uLFxuICAgICAgICBzaXplOiAwLFxuICAgICAgICBsYXN0TW9kaWZpZWQ6IG5ldyBEYXRlKCksXG4gICAgICAgIGlzRGlyZWN0b3J5OiBmYWxzZSxcbiAgICAgICAgcmVsYXRpdmVQYXRoOiB0aGlzLmNhbGN1bGF0ZVJlbGF0aXZlUGF0aChmaWxlUGF0aCwgbm9ybWFsaXplZFJvb3QpLFxuICAgICAgfTtcblxuICAgICAgYWxsRmlsZXMucHVzaChmaWxlSW5mbyk7XG5cbiAgICAgIC8vIEFkZCBmaWxlIHRvIGl0cyBwYXJlbnQgZGlyZWN0b3J5XG4gICAgICBjb25zdCBwYXJlbnQgPSB0cmVlLmdldChwYXJlbnRQYXRoKTtcbiAgICAgIGlmIChwYXJlbnQgJiYgJ2NoaWxkcmVuJyBpbiBwYXJlbnQpIHtcbiAgICAgICAgcGFyZW50LmNoaWxkcmVuLnB1c2goZmlsZUluZm8pO1xuICAgICAgICBwYXJlbnQuZmlsZUNvdW50Kys7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBCdWlsZCB0aGUgdHJlZSBzdHJ1Y3R1cmUgYnkgbGlua2luZyBkaXJlY3RvcmllcyB0byB0aGVpciBwYXJlbnRzXG4gICAgQXJyYXkuZnJvbShkaXJlY3RvcnlQYXRocylcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBiLmxlbmd0aCAtIGEubGVuZ3RoKVxuICAgICAgLmZvckVhY2goZGlyUGF0aCA9PiB7XG4gICAgICAgIGNvbnN0IHBhcnRzID0gZGlyUGF0aC5zcGxpdCgnLycpO1xuICAgICAgICBpZiAocGFydHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgIGNvbnN0IHBhcmVudFBhdGggPSBwYXJ0cy5zbGljZSgwLCAtMSkuam9pbignLycpO1xuICAgICAgICAgIGNvbnN0IHBhcmVudCA9IHRyZWUuZ2V0KHBhcmVudFBhdGgpO1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSB0cmVlLmdldChkaXJQYXRoKTtcblxuICAgICAgICAgIGlmIChwYXJlbnQgJiYgY3VycmVudCAmJiAnY2hpbGRyZW4nIGluIHBhcmVudCkge1xuICAgICAgICAgICAgcGFyZW50LmNoaWxkcmVuLnB1c2goY3VycmVudCBhcyBEaXJlY3RvcnlJbmZvKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgLy8gRmluZCBvciBjcmVhdGUgcm9vdCBkaXJlY3RvcnlcbiAgICBjb25zdCByb290TmFtZSA9IG5vcm1hbGl6ZWRSb290ID8gbm9ybWFsaXplZFJvb3Quc3BsaXQoJy8nKS5wb3AoKSB8fCAncm9vdCcgOiAncm9vdCc7XG5cbiAgICAvLyBGaW5kIHRvcC1sZXZlbCBkaXJlY3RvcmllcyBhbmQgZmlsZXMgKHRob3NlIHdpdGggb25seSBvbmUgcGF0aCBzZWdtZW50KVxuICAgIGNvbnN0IHRvcExldmVsQ2hpbGRyZW46IEZpbGVUcmVlTm9kZVtdID0gW107XG5cbiAgICAvLyBBZGQgdG9wLWxldmVsIGRpcmVjdG9yaWVzXG4gICAgYWxsRGlyZWN0b3JpZXMuZm9yRWFjaChkaXIgPT4ge1xuICAgICAgY29uc3QgcGFydHMgPSBkaXIucGF0aC5zcGxpdCgnLycpO1xuICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICB0b3BMZXZlbENoaWxkcmVuLnB1c2goZGlyKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIEFkZCB0b3AtbGV2ZWwgZmlsZXMgKGlmIGFueSlcbiAgICBhbGxGaWxlcy5mb3JFYWNoKGZpbGUgPT4ge1xuICAgICAgY29uc3QgcGFydHMgPSBmaWxlLnBhdGguc3BsaXQoJy8nKTtcbiAgICAgIGlmIChwYXJ0cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgdG9wTGV2ZWxDaGlsZHJlbi5wdXNoKGZpbGUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3Qgcm9vdDogRGlyZWN0b3J5SW5mbyA9IHtcbiAgICAgIHBhdGg6IG5vcm1hbGl6ZWRSb290IHx8ICcuJyxcbiAgICAgIG5hbWU6IHJvb3ROYW1lLFxuICAgICAgY2hpbGRyZW46IHRvcExldmVsQ2hpbGRyZW4sXG4gICAgICBmaWxlQ291bnQ6IGFsbEZpbGVzLmxlbmd0aCxcbiAgICAgIHRvdGFsU2l6ZTogMCxcbiAgICAgIGRlcHRoOiAwLFxuICAgICAgcmVsYXRpdmVQYXRoOiAnJyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHsgcm9vdCwgYWxsRmlsZXMsIGFsbERpcmVjdG9yaWVzIH07XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgdHJlZSBzdHJ1Y3R1cmUgZnJvbSBGaWxlSW5mbyBhcnJheSAod2l0aCBtZXRhZGF0YSlcbiAgICovXG4gIHN0YXRpYyBidWlsZFRyZWVGcm9tRmlsZUluZm9zKFxuICAgIGZpbGVJbmZvczogRmlsZUluZm9bXSxcbiAgICByb290UGF0aDogc3RyaW5nID0gJydcbiAgKToge1xuICAgIHJvb3Q6IERpcmVjdG9yeUluZm87XG4gICAgYWxsRmlsZXM6IEZpbGVJbmZvW107XG4gICAgYWxsRGlyZWN0b3JpZXM6IERpcmVjdG9yeUluZm9bXTtcbiAgfSB7XG4gICAgY29uc3Qgbm9ybWFsaXplZFJvb3QgPSByb290UGF0aC5lbmRzV2l0aCgnLycpID8gcm9vdFBhdGguc2xpY2UoMCwgLTEpIDogcm9vdFBhdGg7XG4gICAgY29uc3QgZGlyZWN0b3JpZXMgPSBuZXcgTWFwPHN0cmluZywgRGlyZWN0b3J5SW5mbz4oKTtcbiAgICBjb25zdCBhbGxEaXJlY3RvcmllczogRGlyZWN0b3J5SW5mb1tdID0gW107XG5cbiAgICAvLyBDcmVhdGUgYWxsIG5lY2Vzc2FyeSBkaXJlY3Rvcmllc1xuICAgIGNvbnN0IGRpcmVjdG9yeVBhdGhzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgZmlsZUluZm9zLmZvckVhY2goZmlsZSA9PiB7XG4gICAgICBjb25zdCBwYXJ0cyA9IGZpbGUucGF0aC5zcGxpdCgnLycpO1xuICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBwYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBkaXJlY3RvcnlQYXRocy5hZGQocGFydHMuc2xpY2UoMCwgaSkuam9pbignLycpKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIENyZWF0ZSBEaXJlY3RvcnlJbmZvIG9iamVjdHNcbiAgICBBcnJheS5mcm9tKGRpcmVjdG9yeVBhdGhzKS5mb3JFYWNoKGRpclBhdGggPT4ge1xuICAgICAgY29uc3QgcGFydHMgPSBkaXJQYXRoLnNwbGl0KCcvJyk7XG4gICAgICBjb25zdCBuYW1lID0gcGFydHNbcGFydHMubGVuZ3RoIC0gMV0gfHwgJyc7XG5cbiAgICAgIGNvbnN0IGRpckluZm86IERpcmVjdG9yeUluZm8gPSB7XG4gICAgICAgIHBhdGg6IGRpclBhdGgsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICAgICAgZmlsZUNvdW50OiAwLFxuICAgICAgICB0b3RhbFNpemU6IDAsXG4gICAgICAgIGRlcHRoOiBwYXJ0cy5sZW5ndGggLSAxLFxuICAgICAgICByZWxhdGl2ZVBhdGg6IHRoaXMuY2FsY3VsYXRlUmVsYXRpdmVQYXRoKGRpclBhdGgsIG5vcm1hbGl6ZWRSb290KSxcbiAgICAgIH07XG5cbiAgICAgIGRpcmVjdG9yaWVzLnNldChkaXJQYXRoLCBkaXJJbmZvKTtcbiAgICAgIGFsbERpcmVjdG9yaWVzLnB1c2goZGlySW5mbyk7XG4gICAgfSk7XG5cbiAgICAvLyBBZGQgZmlsZXMgdG8gdGhlaXIgcGFyZW50IGRpcmVjdG9yaWVzXG4gICAgZmlsZUluZm9zLmZvckVhY2goZmlsZSA9PiB7XG4gICAgICBjb25zdCBwYXJ0cyA9IGZpbGUucGF0aC5zcGxpdCgnLycpO1xuICAgICAgY29uc3QgcGFyZW50UGF0aCA9IHBhcnRzLnNsaWNlKDAsIC0xKS5qb2luKCcvJyk7XG4gICAgICBjb25zdCBwYXJlbnQgPSBkaXJlY3Rvcmllcy5nZXQocGFyZW50UGF0aCk7XG5cbiAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgcGFyZW50LmNoaWxkcmVuLnB1c2goZmlsZSk7XG4gICAgICAgIHBhcmVudC5maWxlQ291bnQrKztcbiAgICAgICAgcGFyZW50LnRvdGFsU2l6ZSArPSBmaWxlLnNpemUgfHwgMDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIExpbmsgZGlyZWN0b3JpZXMgdG8gdGhlaXIgcGFyZW50c1xuICAgIEFycmF5LmZyb20oZGlyZWN0b3J5UGF0aHMpXG4gICAgICAuc29ydCgoYSwgYikgPT4gYi5sZW5ndGggLSBhLmxlbmd0aClcbiAgICAgIC5mb3JFYWNoKGRpclBhdGggPT4ge1xuICAgICAgICBjb25zdCBwYXJ0cyA9IGRpclBhdGguc3BsaXQoJy8nKTtcbiAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICBjb25zdCBwYXJlbnRQYXRoID0gcGFydHMuc2xpY2UoMCwgLTEpLmpvaW4oJy8nKTtcbiAgICAgICAgICBjb25zdCBwYXJlbnQgPSBkaXJlY3Rvcmllcy5nZXQocGFyZW50UGF0aCk7XG4gICAgICAgICAgY29uc3QgY3VycmVudCA9IGRpcmVjdG9yaWVzLmdldChkaXJQYXRoKTtcblxuICAgICAgICAgIGlmIChwYXJlbnQgJiYgY3VycmVudCkge1xuICAgICAgICAgICAgcGFyZW50LmNoaWxkcmVuLnB1c2goY3VycmVudCk7XG4gICAgICAgICAgICBwYXJlbnQuZmlsZUNvdW50ICs9IGN1cnJlbnQuZmlsZUNvdW50O1xuICAgICAgICAgICAgcGFyZW50LnRvdGFsU2l6ZSArPSBjdXJyZW50LnRvdGFsU2l6ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgLy8gQ3JlYXRlIHJvb3RcbiAgICBjb25zdCByb290TmFtZSA9IG5vcm1hbGl6ZWRSb290ID8gbm9ybWFsaXplZFJvb3Quc3BsaXQoJy8nKS5wb3AoKSB8fCAncm9vdCcgOiAncm9vdCc7XG4gICAgY29uc3QgdG9wTGV2ZWxDaGlsZHJlbjogRmlsZVRyZWVOb2RlW10gPSBbXTtcblxuICAgIC8vIEZpbmQgdG9wLWxldmVsIGl0ZW1zXG4gICAgYWxsRGlyZWN0b3JpZXMuZm9yRWFjaChkaXIgPT4ge1xuICAgICAgaWYgKGRpci5wYXRoLnNwbGl0KCcvJykubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHRvcExldmVsQ2hpbGRyZW4ucHVzaChkaXIpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZmlsZUluZm9zLmZvckVhY2goZmlsZSA9PiB7XG4gICAgICBpZiAoZmlsZS5wYXRoLnNwbGl0KCcvJykubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHRvcExldmVsQ2hpbGRyZW4ucHVzaChmaWxlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IHJvb3Q6IERpcmVjdG9yeUluZm8gPSB7XG4gICAgICBwYXRoOiBub3JtYWxpemVkUm9vdCB8fCAnLicsXG4gICAgICBuYW1lOiByb290TmFtZSxcbiAgICAgIGNoaWxkcmVuOiB0b3BMZXZlbENoaWxkcmVuLFxuICAgICAgZmlsZUNvdW50OiBmaWxlSW5mb3MubGVuZ3RoLFxuICAgICAgdG90YWxTaXplOiBmaWxlSW5mb3MucmVkdWNlKChzdW0sIGYpID0+IHN1bSArIChmLnNpemUgfHwgMCksIDApLFxuICAgICAgZGVwdGg6IDAsXG4gICAgICByZWxhdGl2ZVBhdGg6ICcnLFxuICAgIH07XG5cbiAgICByZXR1cm4geyByb290LCBhbGxGaWxlczogZmlsZUluZm9zLCBhbGxEaXJlY3RvcmllcyB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSBzdGFuZGFyZCBzdGF0aXN0aWNzIGZvciBhIHRyZWVcbiAgICovXG4gIHN0YXRpYyBjYWxjdWxhdGVTdGF0cyhcbiAgICBmaWxlczogRmlsZUluZm9bXSxcbiAgICBkaXJlY3RvcmllczogRGlyZWN0b3J5SW5mb1tdXG4gICk6IEZpbGVUcmVlU3RhdHMge1xuICAgIHJldHVybiB7XG4gICAgICB0b3RhbEZpbGVzOiBmaWxlcy5sZW5ndGgsXG4gICAgICB0b3RhbERpcmVjdG9yaWVzOiBkaXJlY3Rvcmllcy5sZW5ndGgsXG4gICAgICB0b3RhbFNpemU6IGZpbGVzLnJlZHVjZSgoc3VtLCBmKSA9PiBzdW0gKyAoZi5zaXplIHx8IDApLCAwKSxcbiAgICAgIG1heERlcHRoOiB0aGlzLmNhbGN1bGF0ZU1heERlcHRoKGRpcmVjdG9yaWVzKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSBtYXhpbXVtIGRlcHRoIGluIGRpcmVjdG9yeSB0cmVlXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBjYWxjdWxhdGVNYXhEZXB0aChkaXJlY3RvcmllczogRGlyZWN0b3J5SW5mb1tdKTogbnVtYmVyIHtcbiAgICBpZiAoZGlyZWN0b3JpZXMubGVuZ3RoID09PSAwKSByZXR1cm4gMDtcbiAgICByZXR1cm4gTWF0aC5tYXgoLi4uZGlyZWN0b3JpZXMubWFwKGQgPT4gZC5kZXB0aCB8fCAwKSk7XG4gIH1cblxuICAvKipcbiAgICogRXh0cmFjdCBmaWxlIGV4dGVuc2lvbiBmcm9tIGZpbGVuYW1lXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBleHRyYWN0RXh0ZW5zaW9uKGZpbGVuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghZmlsZW5hbWUuaW5jbHVkZXMoJy4nKSkgcmV0dXJuICcnO1xuICAgIGNvbnN0IHBhcnRzID0gZmlsZW5hbWUuc3BsaXQoJy4nKTtcbiAgICByZXR1cm4gJy4nICsgcGFydHNbcGFydHMubGVuZ3RoIC0gMV0udG9Mb3dlckNhc2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgcmVsYXRpdmUgcGF0aCBmcm9tIHJvb3RcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGNhbGN1bGF0ZVJlbGF0aXZlUGF0aChmdWxsUGF0aDogc3RyaW5nLCByb290UGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIXJvb3RQYXRoIHx8IHJvb3RQYXRoID09PSAnJyB8fCByb290UGF0aCA9PT0gJy4nKSB7XG4gICAgICByZXR1cm4gZnVsbFBhdGg7XG4gICAgfVxuXG4gICAgaWYgKGZ1bGxQYXRoID09PSByb290UGF0aCkgcmV0dXJuICcnO1xuXG4gICAgaWYgKGZ1bGxQYXRoLnN0YXJ0c1dpdGgocm9vdFBhdGgpKSB7XG4gICAgICBjb25zdCByZWxhdGl2ZSA9IGZ1bGxQYXRoLnN1YnN0cmluZyhyb290UGF0aC5sZW5ndGgpO1xuICAgICAgcmV0dXJuIHJlbGF0aXZlLnN0YXJ0c1dpdGgoJy8nKSA/IHJlbGF0aXZlLnN1YnN0cmluZygxKSA6IHJlbGF0aXZlO1xuICAgIH1cblxuICAgIHJldHVybiBmdWxsUGF0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBhIGNvbnRlbnQgaGFzaCBmb3IgYW4gYXJyYXkgb2YgcGF0aHNcbiAgICogUmV0dXJucyBhIHN0YWJsZSwgZGV0ZXJtaW5pc3RpYyBoYXNoXG4gICAqL1xuICBzdGF0aWMgaGFzaFBhdGhzKHBhdGhzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gICAgY29uc3Qgc29ydGVkUGF0aHMgPSBbLi4ucGF0aHNdLnNvcnQoKTtcbiAgICBjb25zdCBjb250ZW50ID0gc29ydGVkUGF0aHMuam9pbignXFxuJyk7XG5cbiAgICBsZXQgaGFzaCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb250ZW50Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBjaGFyID0gY29udGVudC5jaGFyQ29kZUF0KGkpO1xuICAgICAgaGFzaCA9ICgoaGFzaCA8PCA1KSAtIGhhc2gpICsgY2hhcjtcbiAgICAgIGhhc2ggPSBoYXNoICYgaGFzaDsgLy8gQ29udmVydCB0byAzMi1iaXQgaW50ZWdlclxuICAgIH1cblxuICAgIHJldHVybiBgcGF0aHMtJHtNYXRoLmFicyhoYXNoKS50b1N0cmluZygzNil9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBhIHNpbXBsZSBoYXNoIGZvciBhbnkgc3RyaW5nIGNvbnRlbnRcbiAgICovXG4gIHN0YXRpYyBzaW1wbGVIYXNoKGNvbnRlbnQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgbGV0IGhhc2ggPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29udGVudC5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgY2hhciA9IGNvbnRlbnQuY2hhckNvZGVBdChpKTtcbiAgICAgIGhhc2ggPSAoKGhhc2ggPDwgNSkgLSBoYXNoKSArIGNoYXI7XG4gICAgICBoYXNoID0gaGFzaCAmIGhhc2g7XG4gICAgfVxuICAgIHJldHVybiBNYXRoLmFicyhoYXNoKS50b1N0cmluZygzNik7XG4gIH1cbn0iLAogICAgIi8qKlxuICogQ29yZSBpbnRlcmZhY2VzIGZvciBGaWxlVHJlZSBjcmVhdGlvblxuICogUHJvdmlkZXMgYSBjb25zaXN0ZW50IGNvbnRyYWN0IGZvciBhbGwgRmlsZVRyZWUgYnVpbGRlcnNcbiAqL1xuXG5pbXBvcnQgeyBGaWxlSW5mbywgRGlyZWN0b3J5SW5mbywgRmlsZVRyZWUgfSBmcm9tICcuL2ZpbGVUcmVlJztcblxuLyoqXG4gKiBDb3JlIG1ldGFkYXRhIHRoYXQgZXZlcnkgRmlsZVRyZWUgbXVzdCBoYXZlXG4gKiBCdWlsZGVycyBjYW4gZXh0ZW5kIHRoaXMgd2l0aCBhZGRpdGlvbmFsIGZpZWxkc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpbGVUcmVlTWV0YWRhdGEge1xuICAvKiogVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoaXMgdHJlZSBpbnN0YW5jZSAqL1xuICBpZDogc3RyaW5nO1xuXG4gIC8qKiBXaGVuIHRoaXMgdHJlZSB3YXMgY3JlYXRlZCAqL1xuICB0aW1lc3RhbXA6IERhdGU7XG5cbiAgLyoqIFR5cGUgZGlzY3JpbWluYXRvciAoZ2l0LCBmaWxlc3lzdGVtLCBnaXRodWIsIGZpbHRlcmVkLCBldGMuKSAqL1xuICBzb3VyY2VUeXBlOiBzdHJpbmc7XG5cbiAgLyoqIE9yaWdpbmFsIFNIQSBpZiBhdmFpbGFibGUgKGdpdCBjb21taXQsIGNvbnRlbnQgaGFzaCwgZXRjLikgKi9cbiAgc291cmNlU2hhPzogc3RyaW5nO1xuXG4gIC8qKiBFeHRlbnNpYmxlIHNvdXJjZSBpbmZvcm1hdGlvbiAtIGJ1aWxkZXJzIGRlZmluZSB0aGVpciBvd24gc3RydWN0dXJlICovXG4gIHNvdXJjZUluZm86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG4vKipcbiAqIFN0YXRpc3RpY3MgYWJvdXQgdGhlIGZpbGUgdHJlZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpbGVUcmVlU3RhdHMge1xuICB0b3RhbEZpbGVzOiBudW1iZXI7XG4gIHRvdGFsRGlyZWN0b3JpZXM6IG51bWJlcjtcbiAgdG90YWxTaXplOiBudW1iZXI7XG4gIG1heERlcHRoOiBudW1iZXI7XG59XG5cbi8vIEZpbGVUcmVlV2l0aE1ldGFkYXRhIGlzIG5vdyBqdXN0IGFuIGFsaWFzIGZvciBGaWxlVHJlZSBzaW5jZSBtZXRhZGF0YSBpcyByZXF1aXJlZFxuZXhwb3J0IHR5cGUgRmlsZVRyZWVXaXRoTWV0YWRhdGEgPSBGaWxlVHJlZTtcblxuLyoqXG4gKiBDb3JlIGludGVyZmFjZSB0aGF0IGFsbCBGaWxlVHJlZSBidWlsZGVycyBtdXN0IGltcGxlbWVudFxuICogVGhpcyBlbnN1cmVzIGNvbnNpc3RlbnQgdHJlZSBjcmVhdGlvbiBhY3Jvc3MgYWxsIHNvdXJjZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaWxlVHJlZUJ1aWxkZXI8VFNvdXJjZSA9IHVua25vd24+IHtcbiAgLyoqXG4gICAqIEJ1aWxkIGEgRmlsZVRyZWUgZnJvbSB0aGUgc291cmNlIGRhdGFcbiAgICovXG4gIGJ1aWxkKHNvdXJjZTogVFNvdXJjZSk6IFByb21pc2U8RmlsZVRyZWVXaXRoTWV0YWRhdGE+IHwgRmlsZVRyZWVXaXRoTWV0YWRhdGE7XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIG1ldGFkYXRhIGZvciB0aGlzIHRyZWVcbiAgICogVGhpcyBpcyB3aGF0IG1ha2VzIGVhY2ggdHJlZSBpZGVudGlmaWFibGUgYW5kIHRyYWNlYWJsZVxuICAgKi9cbiAgZ2VuZXJhdGVNZXRhZGF0YShzb3VyY2U6IFRTb3VyY2UpOiBGaWxlVHJlZU1ldGFkYXRhO1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgYSB1bmlxdWUsIHN0YWJsZSBpZGVudGlmaWVyIGZvciB0aGUgdHJlZSBjb250ZW50XG4gICAqIFNob3VsZCBiZSBkZXRlcm1pbmlzdGljIGJhc2VkIG9uIHRoZSBzb3VyY2VcbiAgICovXG4gIGNhbGN1bGF0ZVNoYShzb3VyY2U6IFRTb3VyY2UpOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgRmlsZVRyZWUgYnVpbGRlcnNcbiAqIFByb3ZpZGVzIGNvbW1vbiBmdW5jdGlvbmFsaXR5IHRoYXQgYnVpbGRlcnMgY2FuIG92ZXJyaWRlXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlRmlsZVRyZWVCdWlsZGVyPFRTb3VyY2UgPSB1bmtub3duPiBpbXBsZW1lbnRzIEZpbGVUcmVlQnVpbGRlcjxUU291cmNlPiB7XG4gIGFic3RyYWN0IGJ1aWxkKHNvdXJjZTogVFNvdXJjZSk6IFByb21pc2U8RmlsZVRyZWVXaXRoTWV0YWRhdGE+IHwgRmlsZVRyZWVXaXRoTWV0YWRhdGE7XG4gIGFic3RyYWN0IGdlbmVyYXRlTWV0YWRhdGEoc291cmNlOiBUU291cmNlKTogRmlsZVRyZWVNZXRhZGF0YTtcbiAgYWJzdHJhY3QgY2FsY3VsYXRlU2hhKHNvdXJjZTogVFNvdXJjZSk6IHN0cmluZztcblxuICAvKipcbiAgICogR2VuZXJhdGUgYSB0aW1lc3RhbXAtYmFzZWQgSUQgc3VmZml4XG4gICAqL1xuICBwcm90ZWN0ZWQgZ2VuZXJhdGVUaW1lc3RhbXBJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBEYXRlLm5vdygpLnRvU3RyaW5nKDM2KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaW1wbGUgaGFzaCBmdW5jdGlvbiBmb3IgY29udGVudC1iYXNlZCBJRHNcbiAgICovXG4gIHByb3RlY3RlZCBzaW1wbGVIYXNoKGNvbnRlbnQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgbGV0IGhhc2ggPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29udGVudC5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgY2hhciA9IGNvbnRlbnQuY2hhckNvZGVBdChpKTtcbiAgICAgIGhhc2ggPSAoKGhhc2ggPDwgNSkgLSBoYXNoKSArIGNoYXI7XG4gICAgICBoYXNoID0gaGFzaCAmIGhhc2g7IC8vIENvbnZlcnQgdG8gMzItYml0IGludGVnZXJcbiAgICB9XG4gICAgcmV0dXJuIE1hdGguYWJzKGhhc2gpLnRvU3RyaW5nKDM2KTtcbiAgfVxufSIsCiAgICAiLyoqXG4gKiBGaWxlVHJlZSBidWlsZGVyIGZvciBzaW1wbGUgcGF0aCBhcnJheXNcbiAqIE1haW50YWlucyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggZXhpc3RpbmcgY3JlYXRlRmlsZVRyZWVGcm9tUGF0aHNcbiAqL1xuXG5pbXBvcnQgeyBCYXNlRmlsZVRyZWVCdWlsZGVyLCBGaWxlVHJlZU1ldGFkYXRhLCBGaWxlVHJlZVdpdGhNZXRhZGF0YSB9IGZyb20gJy4uL2ZpbGVUcmVlQnVpbGRlcic7XG5pbXBvcnQgeyBGaWxlVHJlZUNvcmUgfSBmcm9tICcuLi9maWxlVHJlZUNvcmUnO1xuXG4vKipcbiAqIFNvdXJjZSBkYXRhIGZvciBidWlsZGluZyBmcm9tIHBhdGhzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGF0aHNTb3VyY2Uge1xuICAvKiogQXJyYXkgb2YgZmlsZSBwYXRocyAqL1xuICBmaWxlczogc3RyaW5nW107XG5cbiAgLyoqIE9wdGlvbmFsIHJvb3QgcGF0aCBmb3IgcmVsYXRpdmUgcGF0aCBjYWxjdWxhdGlvbiAqL1xuICByb290UGF0aD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBCdWlsZHMgRmlsZVRyZWUgZnJvbSBzaW1wbGUgcGF0aCBhcnJheXNcbiAqIFRoaXMgaXMgdGhlIG1vc3QgYmFzaWMgYnVpbGRlciwgdXNlZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICovXG5leHBvcnQgY2xhc3MgUGF0aHNGaWxlVHJlZUJ1aWxkZXIgZXh0ZW5kcyBCYXNlRmlsZVRyZWVCdWlsZGVyPFBhdGhzU291cmNlPiB7XG4gIGJ1aWxkKHNvdXJjZTogUGF0aHNTb3VyY2UpOiBGaWxlVHJlZVdpdGhNZXRhZGF0YSB7XG4gICAgY29uc3QgeyBmaWxlcywgcm9vdFBhdGggPSAnJyB9ID0gc291cmNlO1xuXG4gICAgLy8gVXNlIGNvcmUgdXRpbGl0aWVzIHRvIGJ1aWxkIHRyZWUgc3RydWN0dXJlXG4gICAgY29uc3QgeyByb290LCBhbGxGaWxlcywgYWxsRGlyZWN0b3JpZXMgfSA9IEZpbGVUcmVlQ29yZS5idWlsZFRyZWVGcm9tUGF0aHMoXG4gICAgICBmaWxlcyxcbiAgICAgIHJvb3RQYXRoXG4gICAgKTtcblxuICAgIC8vIENhbGN1bGF0ZSBzdGF0aXN0aWNzXG4gICAgY29uc3Qgc3RhdHMgPSBGaWxlVHJlZUNvcmUuY2FsY3VsYXRlU3RhdHMoYWxsRmlsZXMsIGFsbERpcmVjdG9yaWVzKTtcblxuICAgIC8vIEJ1aWxkIHRoZSBjb21wbGV0ZSB0cmVlXG4gICAgcmV0dXJuIHtcbiAgICAgIHNoYTogdGhpcy5jYWxjdWxhdGVTaGEoc291cmNlKSxcbiAgICAgIG1ldGFkYXRhOiB0aGlzLmdlbmVyYXRlTWV0YWRhdGEoc291cmNlKSxcbiAgICAgIHJvb3QsXG4gICAgICBhbGxGaWxlcyxcbiAgICAgIGFsbERpcmVjdG9yaWVzLFxuICAgICAgc3RhdHMsXG4gICAgfTtcbiAgfVxuXG4gIGdlbmVyYXRlTWV0YWRhdGEoc291cmNlOiBQYXRoc1NvdXJjZSk6IEZpbGVUcmVlTWV0YWRhdGEge1xuICAgIGNvbnN0IHsgZmlsZXMsIHJvb3RQYXRoID0gJycgfSA9IHNvdXJjZTtcbiAgICBjb25zdCBzaGEgPSB0aGlzLmNhbGN1bGF0ZVNoYShzb3VyY2UpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBgcGF0aHMtJHtzaGF9LSR7dGhpcy5nZW5lcmF0ZVRpbWVzdGFtcElkKCl9YCxcbiAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKSxcbiAgICAgIHNvdXJjZVR5cGU6ICdwYXRocycsXG4gICAgICBzb3VyY2VTaGE6IHNoYSxcbiAgICAgIHNvdXJjZUluZm86IHtcbiAgICAgICAgZmlsZUNvdW50OiBmaWxlcy5sZW5ndGgsXG4gICAgICAgIHJvb3RQYXRoOiByb290UGF0aCB8fCAnLicsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBjYWxjdWxhdGVTaGEoc291cmNlOiBQYXRoc1NvdXJjZSk6IHN0cmluZyB7XG4gICAgLy8gR2VuZXJhdGUgYSBzdGFibGUgaGFzaCBiYXNlZCBvbiB0aGUgZmlsZSBwYXRoc1xuICAgIHJldHVybiBGaWxlVHJlZUNvcmUuaGFzaFBhdGhzKHNvdXJjZS5maWxlcyk7XG4gIH1cbn0iLAogICAgIi8qKlxuICogRmlsZVRyZWUgYnVpbGRlciBmb3IgZ2l0IHJlcG9zaXRvcmllc1xuICogQ3JlYXRlcyBGaWxlVHJlZXMgZnJvbSBnaXQgc3RhdGUgaW5mb3JtYXRpb25cbiAqL1xuXG5pbXBvcnQgeyBCYXNlRmlsZVRyZWVCdWlsZGVyLCBGaWxlVHJlZU1ldGFkYXRhLCBGaWxlVHJlZVdpdGhNZXRhZGF0YSB9IGZyb20gJy4uL2ZpbGVUcmVlQnVpbGRlcic7XG5pbXBvcnQgeyBGaWxlVHJlZUNvcmUgfSBmcm9tICcuLi9maWxlVHJlZUNvcmUnO1xuaW1wb3J0IHsgRmlsZUluZm8gfSBmcm9tICcuLi9maWxlVHJlZSc7XG5cbi8qKlxuICogU291cmNlIGRhdGEgZm9yIGJ1aWxkaW5nIGZyb20gZ2l0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2l0U291cmNlIHtcbiAgLyoqIEdpdCBjb21taXQgU0hBICovXG4gIGNvbW1pdFNoYTogc3RyaW5nO1xuXG4gIC8qKiBDdXJyZW50IGJyYW5jaCBuYW1lICovXG4gIGJyYW5jaD86IHN0cmluZztcblxuICAvKiogTGlzdCBvZiBmaWxlcyBpbiB0aGUgcmVwb3NpdG9yeSAqL1xuICBmaWxlczogQXJyYXk8e1xuICAgIHBhdGg6IHN0cmluZztcbiAgICBzaXplPzogbnVtYmVyO1xuICAgIG1vZGU/OiBzdHJpbmc7XG4gICAgbGFzdE1vZGlmaWVkPzogRGF0ZTtcbiAgfT47XG5cbiAgLyoqIFJvb3QgcGF0aCBvZiB0aGUgcmVwb3NpdG9yeSAqL1xuICByb290UGF0aD86IHN0cmluZztcblxuICAvKiogV2hldGhlciB0aGUgd29ya2luZyBkaXJlY3RvcnkgaXMgZGlydHkgKi9cbiAgaXNEaXJ0eT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogRXh0ZW5kZWQgbWV0YWRhdGEgZm9yIGdpdCBzb3VyY2VzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2l0RmlsZVRyZWVNZXRhZGF0YSBleHRlbmRzIEZpbGVUcmVlTWV0YWRhdGEge1xuICBzb3VyY2VJbmZvOiB7XG4gICAgY29tbWl0U2hhOiBzdHJpbmc7XG4gICAgYnJhbmNoPzogc3RyaW5nO1xuICAgIHJvb3RQYXRoOiBzdHJpbmc7XG4gICAgaXNEaXJ0eTogYm9vbGVhbjtcbiAgICBmaWxlQ291bnQ6IG51bWJlcjtcbiAgfTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgRmlsZVRyZWUgZnJvbSBnaXQgcmVwb3NpdG9yeSBpbmZvcm1hdGlvblxuICogSWRlYWwgZm9yIHVzZSB3aXRoIHJlcG9zaXRvcnktbW9uaXRvcmluZ1xuICovXG5leHBvcnQgY2xhc3MgR2l0RmlsZVRyZWVCdWlsZGVyIGV4dGVuZHMgQmFzZUZpbGVUcmVlQnVpbGRlcjxHaXRTb3VyY2U+IHtcbiAgYnVpbGQoc291cmNlOiBHaXRTb3VyY2UpOiBGaWxlVHJlZVdpdGhNZXRhZGF0YSB7XG4gICAgY29uc3QgeyBmaWxlcywgcm9vdFBhdGggPSAnJyB9ID0gc291cmNlO1xuXG4gICAgLy8gQ29udmVydCBnaXQgZmlsZXMgdG8gRmlsZUluZm8gZm9ybWF0XG4gICAgY29uc3QgZmlsZUluZm9zOiBGaWxlSW5mb1tdID0gZmlsZXMubWFwKGZpbGUgPT4gKHtcbiAgICAgIHBhdGg6IGZpbGUucGF0aCxcbiAgICAgIG5hbWU6IHRoaXMuZ2V0RmlsZU5hbWUoZmlsZS5wYXRoKSxcbiAgICAgIGV4dGVuc2lvbjogdGhpcy5nZXRGaWxlRXh0ZW5zaW9uKGZpbGUucGF0aCksXG4gICAgICBzaXplOiBmaWxlLnNpemUgfHwgMCxcbiAgICAgIGxhc3RNb2RpZmllZDogZmlsZS5sYXN0TW9kaWZpZWQgfHwgbmV3IERhdGUoKSxcbiAgICAgIGlzRGlyZWN0b3J5OiBmYWxzZSxcbiAgICAgIHJlbGF0aXZlUGF0aDogdGhpcy5jYWxjdWxhdGVSZWxhdGl2ZVBhdGgoZmlsZS5wYXRoLCByb290UGF0aCksXG4gICAgfSkpO1xuXG4gICAgLy8gVXNlIGNvcmUgdXRpbGl0aWVzIHRvIGJ1aWxkIHRyZWUgc3RydWN0dXJlXG4gICAgY29uc3QgeyByb290LCBhbGxGaWxlcywgYWxsRGlyZWN0b3JpZXMgfSA9IEZpbGVUcmVlQ29yZS5idWlsZFRyZWVGcm9tRmlsZUluZm9zKFxuICAgICAgZmlsZUluZm9zLFxuICAgICAgcm9vdFBhdGhcbiAgICApO1xuXG4gICAgLy8gQ2FsY3VsYXRlIHN0YXRpc3RpY3NcbiAgICBjb25zdCBzdGF0cyA9IEZpbGVUcmVlQ29yZS5jYWxjdWxhdGVTdGF0cyhhbGxGaWxlcywgYWxsRGlyZWN0b3JpZXMpO1xuXG4gICAgLy8gQnVpbGQgdGhlIGNvbXBsZXRlIHRyZWVcbiAgICByZXR1cm4ge1xuICAgICAgc2hhOiB0aGlzLmNhbGN1bGF0ZVNoYShzb3VyY2UpLFxuICAgICAgbWV0YWRhdGE6IHRoaXMuZ2VuZXJhdGVNZXRhZGF0YShzb3VyY2UpIGFzIEdpdEZpbGVUcmVlTWV0YWRhdGEsXG4gICAgICByb290LFxuICAgICAgYWxsRmlsZXMsXG4gICAgICBhbGxEaXJlY3RvcmllcyxcbiAgICAgIHN0YXRzLFxuICAgIH07XG4gIH1cblxuICBnZW5lcmF0ZU1ldGFkYXRhKHNvdXJjZTogR2l0U291cmNlKTogR2l0RmlsZVRyZWVNZXRhZGF0YSB7XG4gICAgY29uc3QgeyBjb21taXRTaGEsIGJyYW5jaCwgZmlsZXMsIHJvb3RQYXRoID0gJycsIGlzRGlydHkgPSBmYWxzZSB9ID0gc291cmNlO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBgZ2l0LSR7Y29tbWl0U2hhfSR7aXNEaXJ0eSA/ICctZGlydHknIDogJyd9LSR7dGhpcy5nZW5lcmF0ZVRpbWVzdGFtcElkKCl9YCxcbiAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKSxcbiAgICAgIHNvdXJjZVR5cGU6ICdnaXQnLFxuICAgICAgc291cmNlU2hhOiBjb21taXRTaGEsXG4gICAgICBzb3VyY2VJbmZvOiB7XG4gICAgICAgIGNvbW1pdFNoYSxcbiAgICAgICAgYnJhbmNoLFxuICAgICAgICByb290UGF0aDogcm9vdFBhdGggfHwgJy4nLFxuICAgICAgICBpc0RpcnR5LFxuICAgICAgICBmaWxlQ291bnQ6IGZpbGVzLmxlbmd0aCxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGNhbGN1bGF0ZVNoYShzb3VyY2U6IEdpdFNvdXJjZSk6IHN0cmluZyB7XG4gICAgLy8gRm9yIGdpdCwgdXNlIHRoZSBjb21taXQgU0hBLCB3aXRoIGRpcnR5IGZsYWcgaWYgYXBwbGljYWJsZVxuICAgIGNvbnN0IHsgY29tbWl0U2hhLCBpc0RpcnR5IH0gPSBzb3VyY2U7XG4gICAgcmV0dXJuIGlzRGlydHkgPyBgJHtjb21taXRTaGF9LWRpcnR5YCA6IGNvbW1pdFNoYTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RmlsZU5hbWUocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBwYXJ0cyA9IHBhdGguc3BsaXQoJy8nKTtcbiAgICByZXR1cm4gcGFydHNbcGFydHMubGVuZ3RoIC0gMV0gfHwgJyc7XG4gIH1cblxuICBwcml2YXRlIGdldEZpbGVFeHRlbnNpb24oZmlsZW5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCFmaWxlbmFtZS5pbmNsdWRlcygnLicpKSByZXR1cm4gJyc7XG4gICAgY29uc3QgcGFydHMgPSBmaWxlbmFtZS5zcGxpdCgnLicpO1xuICAgIHJldHVybiAnLicgKyBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXS50b0xvd2VyQ2FzZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjYWxjdWxhdGVSZWxhdGl2ZVBhdGgoZnVsbFBhdGg6IHN0cmluZywgcm9vdFBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCFyb290UGF0aCB8fCByb290UGF0aCA9PT0gJycgfHwgcm9vdFBhdGggPT09ICcuJykge1xuICAgICAgcmV0dXJuIGZ1bGxQYXRoO1xuICAgIH1cblxuICAgIGlmIChmdWxsUGF0aCA9PT0gcm9vdFBhdGgpIHJldHVybiAnJztcblxuICAgIGlmIChmdWxsUGF0aC5zdGFydHNXaXRoKHJvb3RQYXRoKSkge1xuICAgICAgY29uc3QgcmVsYXRpdmUgPSBmdWxsUGF0aC5zdWJzdHJpbmcocm9vdFBhdGgubGVuZ3RoKTtcbiAgICAgIHJldHVybiByZWxhdGl2ZS5zdGFydHNXaXRoKCcvJykgPyByZWxhdGl2ZS5zdWJzdHJpbmcoMSkgOiByZWxhdGl2ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZnVsbFBhdGg7XG4gIH1cbn0iLAogICAgImltcG9ydCB7IEZpbGVUcmVlIH0gZnJvbSAnLi9maWxlVHJlZSc7XG5cbi8qKlxuICogRmlsZSBUcmVlIFNvdXJjZSBNb2RlbFxuICpcbiAqIFByb3ZpZGVzIHJpY2ggbWV0YWRhdGEgYWJvdXQgdGhlIG9yaWdpbiBvZiBhIEZpbGVUcmVlLlxuICogRGVzaWduZWQgdG8gYmUgcHJvdmlkZXItYWdub3N0aWMgYW5kIHN1cHBvcnQgYm90aCBsb2NhbCBhbmQgcmVtb3RlIHNvdXJjZXMuXG4gKi9cblxuLy8gU291cmNlIHR5cGVzIC0gd2hhdCB3ZSBhY3R1YWxseSB1c2VcbmV4cG9ydCB0eXBlIFNvdXJjZVR5cGUgPSAnbG9jYWwnIHwgJ3JlbW90ZSc7XG5cbi8vIExvY2F0aW9uIHR5cGVzIC0gaG93IHdlIHJlZmVyZW5jZSB0aGUgc291cmNlXG5leHBvcnQgdHlwZSBMb2NhdGlvblR5cGUgPSAncGF0aCcgfCAnYnJhbmNoJyB8ICd0YWcnIHwgJ2NvbW1pdCcgfCAnd29ya2luZyc7XG5cbi8vIFByb3ZpZGVyIHR5cGVzIC0ga2VwdCBzaW1wbGUsIGV4cGFuZCBvbmx5IHdoZW4gbmVlZGVkXG5leHBvcnQgdHlwZSBQcm92aWRlclR5cGUgPSAnZ2l0aHViJyB8ICdnaXRsYWInIHwgJ2dlbmVyaWMnIHwgJ2xvY2FsJztcblxuLyoqXG4gKiBDb3JlIGZpbGUgdHJlZSBzb3VyY2UgZGVzY3JpcHRvclxuICogUmVwcmVzZW50cyBhIHNvdXJjZSB0aGF0IGNhbiBiZSByZXNvbHZlZCB0byBhIEZpbGVUcmVlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlsZVRyZWVTb3VyY2Uge1xuICAvLyBJZGVudGl0eVxuICBpZDogc3RyaW5nOyAvLyBTaW1wbGUgdW5pcXVlIElEIChlLmcuLCBcImxvY2FsLS9wYXRoL3RvL3JlcG9cIiBvciBcImdpdGh1Yi1vd25lci1yZXBvLW1haW5cIilcbiAgdHlwZTogU291cmNlVHlwZTsgLy8gJ2xvY2FsJyBvciAncmVtb3RlJ1xuXG4gIC8vIFJlcG9zaXRvcnkgaWRlbnRpdHlcbiAgb3duZXI6IHN0cmluZzsgLy8gUmVwb3NpdG9yeSBvd25lci9vcmdhbml6YXRpb25cbiAgbmFtZTogc3RyaW5nOyAvLyBSZXBvc2l0b3J5IG5hbWVcbiAgcmVtb3RlVXJsOiBzdHJpbmc7IC8vIFRoZSByZW1vdGUgVVJMIChmb3IgYm90aCBsb2NhbCBjbG9uZXMgYW5kIHJlbW90ZSBzb3VyY2VzKVxuXG4gIC8vIFNvdXJjZSBsb2NhdGlvblxuICBsb2NhdGlvbjogc3RyaW5nOyAvLyBQYXRoIGZvciBsb2NhbCwgYnJhbmNoL3RhZy9jb21taXQgZm9yIHJlbW90ZVxuICBsb2NhdGlvblR5cGU6IExvY2F0aW9uVHlwZTsgLy8gSG93IHRvIGludGVycHJldCB0aGUgbG9jYXRpb25cblxuICAvLyBEaXNwbGF5ICYgVUlcbiAgbGFiZWw6IHN0cmluZzsgLy8gSHVtYW4tZnJpZW5kbHkgZGlzcGxheSBuYW1lXG4gIGNvbG9yPzogc3RyaW5nOyAvLyBPcHRpb25hbCBjb2xvciBmb3IgVUkgZGlmZmVyZW50aWF0aW9uXG4gIGljb24/OiBzdHJpbmc7IC8vIE9wdGlvbmFsIGljb24gaWRlbnRpZmllclxuXG4gIC8vIFN0YXRlICYgbWV0YWRhdGFcbiAgaXNUZW1wb3Jhcnk/OiBib29sZWFuOyAvLyBUcnVlIGZvciB1bnNhdmVkL2V4cGVyaW1lbnRhbCBzb3VyY2VzXG4gIGlzRGVmYXVsdD86IGJvb2xlYW47IC8vIFRydWUgZm9yIHRoZSBkZWZhdWx0IHNvdXJjZSBpbiBhIHNldFxuICBsYXN0QWNjZXNzZWQ/OiBudW1iZXI7IC8vIFRpbWVzdGFtcCBvZiBsYXN0IGFjY2Vzc1xuICBjcmVhdGVkQXQ/OiBudW1iZXI7IC8vIFdoZW4gdGhpcyBzb3VyY2Ugd2FzIGNyZWF0ZWRcblxuICAvLyBQcm92aWRlciBpbmZvIChvcHRpb25hbCwgbWFpbmx5IGZvciByZW1vdGVzKVxuICBwcm92aWRlcj86IFByb3ZpZGVyVHlwZTsgLy8gV2hpY2ggcHJvdmlkZXIgKGdpdGh1YiwgZ2l0bGFiLCBldGMuKVxuICBhcGlVcmw/OiBzdHJpbmc7IC8vIEFQSSBlbmRwb2ludCBmb3IgcmVtb3RlIHNvdXJjZXNcblxuICAvLyBBZGRpdGlvbmFsIG1ldGFkYXRhXG4gIG1ldGFkYXRhPzoge1xuICAgIGN1cnJlbnRCcmFuY2g/OiBzdHJpbmc7IC8vIEZvciBsb2NhbCB3b3JraW5nIGNvcGllc1xuICAgIGNvbW1pdFNoYT86IHN0cmluZzsgLy8gU3BlY2lmaWMgY29tbWl0IGlmIGxvY2tlZCB0byBvbmVcbiAgICBpc0RpcnR5PzogYm9vbGVhbjsgLy8gRm9yIGxvY2FsIHNvdXJjZXMgd2l0aCB1bmNvbW1pdHRlZCBjaGFuZ2VzXG4gICAgc3ViZGlyPzogc3RyaW5nOyAvLyBJZiBmb2N1c2luZyBvbiBhIHN1YmRpcmVjdG9yeSAobW9ub3JlcG8gc3VwcG9ydClcbiAgICBba2V5OiBzdHJpbmddOiB1bmtub3duOyAvLyBFeHRlbnNpYmxlIGZvciBmdXR1cmUgbmVlZHNcbiAgfTtcbn1cblxuLyoqXG4gKiBTdGF0aXN0aWNzIGFib3V0IGEgbG9hZGVkIGZpbGUgdHJlZSBzb3VyY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTb3VyY2VUcmVlU3RhdHMge1xuICBmaWxlQ291bnQ6IG51bWJlcjtcbiAgZGlyZWN0b3J5Q291bnQ6IG51bWJlcjtcbiAgbG9hZGVkQXQ6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBFeHRlbmRlZCBzb3VyY2Ugd2l0aCBsb2FkZWQgdHJlZSBkYXRhXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9hZGVkRmlsZVRyZWVTb3VyY2UgZXh0ZW5kcyBGaWxlVHJlZVNvdXJjZSB7XG4gIHRyZWU6IEZpbGVUcmVlOyAvLyBUaGUgbG9hZGVkIEZpbGVUcmVlXG4gIHRyZWVTdGF0czogU291cmNlVHJlZVN0YXRzO1xuICBmaWx0ZXJMYXllcnM/OiBhbnlbXTsgLy8gRmlsdGVyIGxheWVycyB0aGF0IHdlcmUgYXBwbGllZFxufVxuXG4vKipcbiAqIEZhY3RvcnkgZnVuY3Rpb25zIGZvciBjcmVhdGluZyBzb3VyY2VzXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVGaWxlVHJlZVNvdXJjZSA9IHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIGxvY2FsIGZpbGUgdHJlZSBzb3VyY2UgKHdvcmtpbmcgY29weSlcbiAgICovXG4gIGxvY2FsV29ya2luZ0NvcHkoXG4gICAgcGF0aDogc3RyaW5nLFxuICAgIG93bmVyOiBzdHJpbmcsXG4gICAgcmVwbzogc3RyaW5nLFxuICAgIHJlbW90ZVVybDogc3RyaW5nLFxuICAgIGN1cnJlbnRCcmFuY2g/OiBzdHJpbmcsXG4gICk6IEZpbGVUcmVlU291cmNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGBsb2NhbC0ke3BhdGh9YCxcbiAgICAgIHR5cGU6ICdsb2NhbCcsXG4gICAgICBvd25lcixcbiAgICAgIG5hbWU6IHJlcG8sXG4gICAgICByZW1vdGVVcmwsXG4gICAgICBsb2NhdGlvbjogcGF0aCxcbiAgICAgIGxvY2F0aW9uVHlwZTogJ3dvcmtpbmcnLFxuICAgICAgbGFiZWw6IGBMb2NhbDogJHtyZXBvfSR7Y3VycmVudEJyYW5jaCA/IGAgKCR7Y3VycmVudEJyYW5jaH0pYCA6ICcnfWAsXG4gICAgICBwcm92aWRlcjogJ2xvY2FsJyxcbiAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgIGN1cnJlbnRCcmFuY2gsXG4gICAgICB9LFxuICAgIH07XG4gIH0sXG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIHJlbW90ZSBicmFuY2ggc291cmNlIChHaXRIdWIsIGV0Yy4pXG4gICAqL1xuICByZW1vdGVCcmFuY2goXG4gICAgb3duZXI6IHN0cmluZyxcbiAgICByZXBvOiBzdHJpbmcsXG4gICAgcmVtb3RlVXJsOiBzdHJpbmcsXG4gICAgYnJhbmNoOiBzdHJpbmcsXG4gICAgcHJvdmlkZXI6IFByb3ZpZGVyVHlwZSA9ICdnaXRodWInLFxuICApOiBGaWxlVHJlZVNvdXJjZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBgJHtwcm92aWRlcn0tJHtvd25lcn0tJHtyZXBvfS0ke2JyYW5jaH1gLFxuICAgICAgdHlwZTogJ3JlbW90ZScsXG4gICAgICBvd25lcixcbiAgICAgIG5hbWU6IHJlcG8sXG4gICAgICByZW1vdGVVcmwsXG4gICAgICBsb2NhdGlvbjogYnJhbmNoLFxuICAgICAgbG9jYXRpb25UeXBlOiAnYnJhbmNoJyxcbiAgICAgIGxhYmVsOiBgJHtyZXBvfUAke2JyYW5jaH1gLFxuICAgICAgcHJvdmlkZXIsXG4gICAgICBhcGlVcmw6IHByb3ZpZGVyID09PSAnZ2l0aHViJyA/ICdodHRwczovL2FwaS5naXRodWIuY29tJyA6IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9LFxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSByZW1vdGUgdGFnIHNvdXJjZVxuICAgKi9cbiAgcmVtb3RlVGFnKFxuICAgIG93bmVyOiBzdHJpbmcsXG4gICAgcmVwbzogc3RyaW5nLFxuICAgIHJlbW90ZVVybDogc3RyaW5nLFxuICAgIHRhZzogc3RyaW5nLFxuICAgIHByb3ZpZGVyOiBQcm92aWRlclR5cGUgPSAnZ2l0aHViJyxcbiAgKTogRmlsZVRyZWVTb3VyY2Uge1xuICAgIHJldHVybiB7XG4gICAgICBpZDogYCR7cHJvdmlkZXJ9LSR7b3duZXJ9LSR7cmVwb30tdGFnLSR7dGFnfWAsXG4gICAgICB0eXBlOiAncmVtb3RlJyxcbiAgICAgIG93bmVyLFxuICAgICAgbmFtZTogcmVwbyxcbiAgICAgIHJlbW90ZVVybCxcbiAgICAgIGxvY2F0aW9uOiB0YWcsXG4gICAgICBsb2NhdGlvblR5cGU6ICd0YWcnLFxuICAgICAgbGFiZWw6IGAke3JlcG99QCR7dGFnfWAsXG4gICAgICBwcm92aWRlcixcbiAgICAgIGFwaVVybDogcHJvdmlkZXIgPT09ICdnaXRodWInID8gJ2h0dHBzOi8vYXBpLmdpdGh1Yi5jb20nIDogdW5kZWZpbmVkLFxuICAgIH07XG4gIH0sXG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIHJlbW90ZSBjb21taXQgc291cmNlXG4gICAqL1xuICByZW1vdGVDb21taXQoXG4gICAgb3duZXI6IHN0cmluZyxcbiAgICByZXBvOiBzdHJpbmcsXG4gICAgcmVtb3RlVXJsOiBzdHJpbmcsXG4gICAgY29tbWl0U2hhOiBzdHJpbmcsXG4gICAgcHJvdmlkZXI6IFByb3ZpZGVyVHlwZSA9ICdnaXRodWInLFxuICApOiBGaWxlVHJlZVNvdXJjZSB7XG4gICAgY29uc3Qgc2hvcnRTaGEgPSBjb21taXRTaGEuc3Vic3RyaW5nKDAsIDcpO1xuICAgIHJldHVybiB7XG4gICAgICBpZDogYCR7cHJvdmlkZXJ9LSR7b3duZXJ9LSR7cmVwb30tY29tbWl0LSR7c2hvcnRTaGF9YCxcbiAgICAgIHR5cGU6ICdyZW1vdGUnLFxuICAgICAgb3duZXIsXG4gICAgICBuYW1lOiByZXBvLFxuICAgICAgcmVtb3RlVXJsLFxuICAgICAgbG9jYXRpb246IGNvbW1pdFNoYSxcbiAgICAgIGxvY2F0aW9uVHlwZTogJ2NvbW1pdCcsXG4gICAgICBsYWJlbDogYCR7cmVwb31AJHtzaG9ydFNoYX1gLFxuICAgICAgcHJvdmlkZXIsXG4gICAgICBhcGlVcmw6IHByb3ZpZGVyID09PSAnZ2l0aHViJyA/ICdodHRwczovL2FwaS5naXRodWIuY29tJyA6IHVuZGVmaW5lZCxcbiAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgIGNvbW1pdFNoYSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfSxcblxuICAvKipcbiAgICogQ3JlYXRlIGEgdGVtcG9yYXJ5L2V4cGVyaW1lbnRhbCBzb3VyY2VcbiAgICovXG4gIHRlbXBvcmFyeShcbiAgICBiYXNlU291cmNlOiBGaWxlVHJlZVNvdXJjZSxcbiAgICBsb2NhdGlvbjogc3RyaW5nLFxuICAgIGxvY2F0aW9uVHlwZTogTG9jYXRpb25UeXBlLFxuICApOiBGaWxlVHJlZVNvdXJjZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmJhc2VTb3VyY2UsXG4gICAgICBpZDogYHRlbXAtJHtiYXNlU291cmNlLmlkfS0ke0RhdGUubm93KCl9YCxcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgbG9jYXRpb25UeXBlLFxuICAgICAgbGFiZWw6IGAke2Jhc2VTb3VyY2UubGFiZWx9ICh0ZW1wb3JhcnkpYCxcbiAgICAgIGlzVGVtcG9yYXJ5OiB0cnVlLFxuICAgICAgY3JlYXRlZEF0OiBEYXRlLm5vdygpLFxuICAgIH07XG4gIH0sXG59O1xuXG4vKipcbiAqIFR5cGUgZ3VhcmRzXG4gKi9cbmV4cG9ydCBjb25zdCBpc0xvY2FsU291cmNlID0gKHNvdXJjZTogRmlsZVRyZWVTb3VyY2UpOiBib29sZWFuID0+XG4gIHNvdXJjZS50eXBlID09PSAnbG9jYWwnO1xuZXhwb3J0IGNvbnN0IGlzUmVtb3RlU291cmNlID0gKHNvdXJjZTogRmlsZVRyZWVTb3VyY2UpOiBib29sZWFuID0+XG4gIHNvdXJjZS50eXBlID09PSAncmVtb3RlJztcbmV4cG9ydCBjb25zdCBpc1RlbXBvcmFyeVNvdXJjZSA9IChzb3VyY2U6IEZpbGVUcmVlU291cmNlKTogYm9vbGVhbiA9PlxuICBzb3VyY2UuaXNUZW1wb3JhcnkgPT09IHRydWU7XG5leHBvcnQgY29uc3QgaXNHaXRIdWJTb3VyY2UgPSAoc291cmNlOiBGaWxlVHJlZVNvdXJjZSk6IGJvb2xlYW4gPT5cbiAgc291cmNlLnByb3ZpZGVyID09PSAnZ2l0aHViJztcblxuLyoqXG4gKiBVdGlsaXR5IGZ1bmN0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U291cmNlRGlzcGxheU5hbWUoc291cmNlOiBGaWxlVHJlZVNvdXJjZSk6IHN0cmluZyB7XG4gIGlmIChzb3VyY2UubGFiZWwpIHJldHVybiBzb3VyY2UubGFiZWw7XG5cbiAgY29uc3QgcHJlZml4ID0gc291cmNlLnR5cGUgPT09ICdsb2NhbCcgPyAnTG9jYWw6ICcgOiAnJztcbiAgY29uc3Qgc3VmZml4ID1cbiAgICBzb3VyY2UubG9jYXRpb25UeXBlID09PSAnYnJhbmNoJ1xuICAgICAgPyBgQCR7c291cmNlLmxvY2F0aW9ufWBcbiAgICAgIDogc291cmNlLmxvY2F0aW9uVHlwZSA9PT0gJ3RhZydcbiAgICAgICAgPyBgQCR7c291cmNlLmxvY2F0aW9ufWBcbiAgICAgICAgOiBzb3VyY2UubG9jYXRpb25UeXBlID09PSAnY29tbWl0J1xuICAgICAgICAgID8gYEAke3NvdXJjZS5sb2NhdGlvbi5zdWJzdHJpbmcoMCwgNyl9YFxuICAgICAgICAgIDogJyc7XG5cbiAgcmV0dXJuIGAke3ByZWZpeH0ke3NvdXJjZS5uYW1lfSR7c3VmZml4fWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTb3VyY2VJZGVudGlmaWVyKHNvdXJjZTogRmlsZVRyZWVTb3VyY2UpOiBzdHJpbmcge1xuICAvLyBSZXR1cm5zIGEgc3RhYmxlIGlkZW50aWZpZXIgZm9yIGRlZHVwbGljYXRpb25cbiAgaWYgKHNvdXJjZS50eXBlID09PSAnbG9jYWwnKSB7XG4gICAgcmV0dXJuIGBsb2NhbDoke3NvdXJjZS5sb2NhdGlvbn1gO1xuICB9XG4gIHJldHVybiBgJHtzb3VyY2UucHJvdmlkZXJ9OiR7c291cmNlLm93bmVyfS8ke3NvdXJjZS5uYW1lfToke3NvdXJjZS5sb2NhdGlvblR5cGV9OiR7c291cmNlLmxvY2F0aW9ufWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaG91bGRDYWNoZVNvdXJjZShzb3VyY2U6IEZpbGVUcmVlU291cmNlKTogYm9vbGVhbiB7XG4gIC8vIFRlbXBvcmFyeSBzb3VyY2VzIG1pZ2h0IG5vdCBuZWVkIGNhY2hpbmcsIG9yIG5lZWQgc2hvcnRlciBUVExcbiAgcmV0dXJuICFzb3VyY2UuaXNUZW1wb3Jhcnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTb3VyY2VDYWNoZVRUTChzb3VyY2U6IEZpbGVUcmVlU291cmNlKTogbnVtYmVyIHtcbiAgLy8gQ2FjaGUgVFRMIGluIG1pbGxpc2Vjb25kc1xuICBpZiAoc291cmNlLmlzVGVtcG9yYXJ5KSByZXR1cm4gNSAqIDYwICogMTAwMDsgLy8gNSBtaW51dGVzIGZvciB0ZW1wb3JhcnlcbiAgaWYgKHNvdXJjZS50eXBlID09PSAnbG9jYWwnKSByZXR1cm4gMTAgKiA2MCAqIDEwMDA7IC8vIDEwIG1pbnV0ZXMgZm9yIGxvY2FsXG4gIGlmIChzb3VyY2UubG9jYXRpb25UeXBlID09PSAnY29tbWl0JykgcmV0dXJuIDYwICogNjAgKiAxMDAwOyAvLyAxIGhvdXIgZm9yIGNvbW1pdHMgKGltbXV0YWJsZSlcbiAgcmV0dXJuIDMwICogNjAgKiAxMDAwOyAvLyAzMCBtaW51dGVzIGRlZmF1bHRcbn1cblxuLyoqXG4gKiBTb3VyY2UgY29tcGFyaXNvbiBmb3Igc29ydGluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcGFyZUZpbGVUcmVlU291cmNlcyhcbiAgYTogRmlsZVRyZWVTb3VyY2UsXG4gIGI6IEZpbGVUcmVlU291cmNlLFxuKTogbnVtYmVyIHtcbiAgLy8gU29ydCBvcmRlcjogZGVmYXVsdCBmaXJzdCwgdGhlbiBsb2NhbCwgdGhlbiByZW1vdGUsIHRoZW4gYnkgbGFiZWxcbiAgaWYgKGEuaXNEZWZhdWx0ICYmICFiLmlzRGVmYXVsdCkgcmV0dXJuIC0xO1xuICBpZiAoIWEuaXNEZWZhdWx0ICYmIGIuaXNEZWZhdWx0KSByZXR1cm4gMTtcbiAgaWYgKGEudHlwZSA9PT0gJ2xvY2FsJyAmJiBiLnR5cGUgPT09ICdyZW1vdGUnKSByZXR1cm4gLTE7XG4gIGlmIChhLnR5cGUgPT09ICdyZW1vdGUnICYmIGIudHlwZSA9PT0gJ2xvY2FsJykgcmV0dXJuIDE7XG4gIHJldHVybiBhLmxhYmVsLmxvY2FsZUNvbXBhcmUoYi5sYWJlbCk7XG59XG4iLAogICAgIi8qKlxuICogSW4tbWVtb3J5IGltcGxlbWVudGF0aW9uIG9mIEZpbGVTeXN0ZW1BZGFwdGVyIGZvciB0ZXN0aW5nXG4gKiBUaGlzIGFsbG93cyB0ZXN0cyB0byBydW4gd2l0aG91dCB0b3VjaGluZyB0aGUgcmVhbCBmaWxlc3lzdGVtLFxuICogbWFraW5nIHRoZW0gZmFzdGVyIGFuZCBtb3JlIHJlbGlhYmxlLlxuICovXG5cbmltcG9ydCB7IEZpbGVTeXN0ZW1BZGFwdGVyIH0gZnJvbSBcIi4vRmlsZVN5c3RlbUFkYXB0ZXJcIjtcblxuZXhwb3J0IGNsYXNzIEluTWVtb3J5RmlsZVN5c3RlbUFkYXB0ZXIgaW1wbGVtZW50cyBGaWxlU3lzdGVtQWRhcHRlciB7XG4gIHByaXZhdGUgZmlsZXMgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICBwcml2YXRlIGJpbmFyeUZpbGVzID0gbmV3IE1hcDxzdHJpbmcsIFVpbnQ4QXJyYXk+KCk7XG5cbiAgZXhpc3RzKHBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmZpbGVzLmhhcyhwYXRoKSB8fFxuICAgICAgdGhpcy5iaW5hcnlGaWxlcy5oYXMocGF0aCkgfHxcbiAgICAgIHRoaXMuaXNEaXJlY3RvcnkocGF0aClcbiAgICApO1xuICB9XG5cbiAgcmVhZEZpbGUocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5maWxlcy5nZXQocGF0aCk7XG4gICAgaWYgKGNvbnRlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGaWxlIG5vdCBmb3VuZDogJHtwYXRofWApO1xuICAgIH1cbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuXG4gIHdyaXRlRmlsZShwYXRoOiBzdHJpbmcsIGNvbnRlbnQ6IHN0cmluZyk6IHZvaWQge1xuICAgIC8vIEVuc3VyZSBwYXJlbnQgZGlyZWN0b3J5IGV4aXN0cyBpbiBvdXIgdHJhY2tpbmdcbiAgICBjb25zdCBkaXIgPSB0aGlzLmRpcm5hbWUocGF0aCk7XG4gICAgaWYgKGRpciAmJiBkaXIgIT09IFwiL1wiICYmIGRpciAhPT0gcGF0aCkge1xuICAgICAgdGhpcy5jcmVhdGVEaXIoZGlyKTtcbiAgICB9XG4gICAgdGhpcy5maWxlcy5zZXQocGF0aCwgY29udGVudCk7XG4gIH1cblxuICBkZWxldGVGaWxlKHBhdGg6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuZmlsZXMuZGVsZXRlKHBhdGgpO1xuICAgIHRoaXMuYmluYXJ5RmlsZXMuZGVsZXRlKHBhdGgpO1xuICB9XG5cbiAgcmVhZEJpbmFyeUZpbGUocGF0aDogc3RyaW5nKTogVWludDhBcnJheSB7XG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuYmluYXJ5RmlsZXMuZ2V0KHBhdGgpO1xuICAgIGlmIChjb250ZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQmluYXJ5IGZpbGUgbm90IGZvdW5kOiAke3BhdGh9YCk7XG4gICAgfVxuICAgIHJldHVybiBjb250ZW50O1xuICB9XG5cbiAgd3JpdGVCaW5hcnlGaWxlKHBhdGg6IHN0cmluZywgY29udGVudDogVWludDhBcnJheSk6IHZvaWQge1xuICAgIC8vIEVuc3VyZSBwYXJlbnQgZGlyZWN0b3J5IGV4aXN0cyBpbiBvdXIgdHJhY2tpbmdcbiAgICBjb25zdCBkaXIgPSB0aGlzLmRpcm5hbWUocGF0aCk7XG4gICAgaWYgKGRpciAmJiBkaXIgIT09IFwiL1wiICYmIGRpciAhPT0gcGF0aCkge1xuICAgICAgdGhpcy5jcmVhdGVEaXIoZGlyKTtcbiAgICB9XG4gICAgdGhpcy5iaW5hcnlGaWxlcy5zZXQocGF0aCwgY29udGVudCk7XG4gIH1cblxuICBjcmVhdGVEaXIocGF0aDogc3RyaW5nKTogdm9pZCB7XG4gICAgLy8gSW4gbWVtb3J5LCBkaXJlY3RvcmllcyBhcmUgaW1wbGljaXRcbiAgICAvLyBXZSB0cmFjayB0aGVtIGJ5IGVuc3VyaW5nIHRoZXkgYXBwZWFyIGluIHJlYWREaXIgcmVzdWx0c1xuICAgIGlmICghcGF0aCB8fCBwYXRoID09PSBcIi9cIikgcmV0dXJuO1xuXG4gICAgLy8gQWRkIGEgbWFya2VyIGZvciB0aGUgZGlyZWN0b3J5XG4gICAgdGhpcy5maWxlcy5zZXQocGF0aCArIFwiLy5kaXJcIiwgXCJcIik7XG4gIH1cblxuICByZWFkRGlyKHBhdGg6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAvLyBDaGVjayBpZiB0aGlzIHBhdGggaXMgYWN0dWFsbHkgYSBmaWxlIChub3QgYSBkaXJlY3RvcnkpXG4gICAgaWYgKFxuICAgICAgKHRoaXMuZmlsZXMuaGFzKHBhdGgpIHx8IHRoaXMuYmluYXJ5RmlsZXMuaGFzKHBhdGgpKSAmJlxuICAgICAgIXBhdGguZW5kc1dpdGgoXCIvLmRpclwiKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFTk9URElSOiBub3QgYSBkaXJlY3RvcnksIHNjYW5kaXIgJyR7cGF0aH0nYCk7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIGRpcmVjdG9yeSBleGlzdHNcbiAgICBpZiAoIXRoaXMuaXNEaXJlY3RvcnkocGF0aCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRU5PRU5UOiBubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5LCBzY2FuZGlyICcke3BhdGh9J2ApO1xuICAgIH1cblxuICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gcGF0aC5lbmRzV2l0aChcIi9cIikgPyBwYXRoLnNsaWNlKDAsIC0xKSA6IHBhdGg7XG4gICAgY29uc3QgcHJlZml4ID0gbm9ybWFsaXplZFBhdGggPT09IFwiL1wiID8gXCJcIiA6IGAke25vcm1hbGl6ZWRQYXRofS9gO1xuICAgIGNvbnN0IGl0ZW1zID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICBmb3IgKGNvbnN0IGZpbGVQYXRoIG9mIHRoaXMuZmlsZXMua2V5cygpKSB7XG4gICAgICBpZiAoZmlsZVBhdGguc3RhcnRzV2l0aChwcmVmaXgpKSB7XG4gICAgICAgIGNvbnN0IHJlbGF0aXZlUGF0aCA9IGZpbGVQYXRoLnNsaWNlKHByZWZpeC5sZW5ndGgpO1xuICAgICAgICBpZiAocmVsYXRpdmVQYXRoKSB7XG4gICAgICAgICAgLy8gU2tpcCAuZGlyIG1hcmtlcnMgYXQgdGhlIGN1cnJlbnQgbGV2ZWxcbiAgICAgICAgICBpZiAocmVsYXRpdmVQYXRoID09PSBcIi5kaXJcIikge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhIHN1YmRpcmVjdG9yeSAuZGlyIG1hcmtlclxuICAgICAgICAgIGlmIChyZWxhdGl2ZVBhdGguZW5kc1dpdGgoXCIvLmRpclwiKSkge1xuICAgICAgICAgICAgLy8gVGhpcyBpbmRpY2F0ZXMgYSBzdWJkaXJlY3RvcnkgZXhpc3RzLCBhZGQgaXQgd2l0aG91dCB0aGUgLmRpclxuICAgICAgICAgICAgY29uc3QgZGlyTmFtZSA9IHJlbGF0aXZlUGF0aC5zbGljZSgwLCAtNSkuc3BsaXQoXCIvXCIpWzBdO1xuICAgICAgICAgICAgaWYgKGRpck5hbWUpIHtcbiAgICAgICAgICAgICAgaXRlbXMuYWRkKGRpck5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBHZXQgdGhlIGZpcnN0IHNlZ21lbnQgKGVpdGhlciBhIGZpbGUgb3IgZGlyZWN0b3J5IG5hbWUpXG4gICAgICAgICAgICBjb25zdCBmaXJzdFNlZ21lbnQgPSByZWxhdGl2ZVBhdGguc3BsaXQoXCIvXCIpWzBdO1xuICAgICAgICAgICAgaWYgKGZpcnN0U2VnbWVudCAmJiBmaXJzdFNlZ21lbnQgIT09IFwiLmRpclwiKSB7XG4gICAgICAgICAgICAgIGl0ZW1zLmFkZChmaXJzdFNlZ21lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFsc28gY2hlY2sgYmluYXJ5IGZpbGVzXG4gICAgZm9yIChjb25zdCBmaWxlUGF0aCBvZiB0aGlzLmJpbmFyeUZpbGVzLmtleXMoKSkge1xuICAgICAgaWYgKGZpbGVQYXRoLnN0YXJ0c1dpdGgocHJlZml4KSkge1xuICAgICAgICBjb25zdCByZWxhdGl2ZVBhdGggPSBmaWxlUGF0aC5zbGljZShwcmVmaXgubGVuZ3RoKTtcbiAgICAgICAgaWYgKHJlbGF0aXZlUGF0aCkge1xuICAgICAgICAgIGNvbnN0IHBhcnRzID0gcmVsYXRpdmVQYXRoLnNwbGl0KFwiL1wiKTtcbiAgICAgICAgICBpZiAocGFydHNbMF0pIHtcbiAgICAgICAgICAgIGl0ZW1zLmFkZChwYXJ0c1swXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIEFycmF5LmZyb20oaXRlbXMpO1xuICB9XG5cbiAgZGVsZXRlRGlyKHBhdGg6IHN0cmluZyk6IHZvaWQge1xuICAgIC8vIEluIG1lbW9yeSwganVzdCByZW1vdmUgYWxsIGZpbGVzIGluIHRoZSBkaXJlY3RvcnlcbiAgICBjb25zdCBwcmVmaXggPSBgJHtwYXRofS9gO1xuICAgIGZvciAoY29uc3QgZmlsZVBhdGggb2YgdGhpcy5maWxlcy5rZXlzKCkpIHtcbiAgICAgIGlmIChmaWxlUGF0aC5zdGFydHNXaXRoKHByZWZpeCkgfHwgZmlsZVBhdGggPT09IHBhdGggKyBcIi8uZGlyXCIpIHtcbiAgICAgICAgdGhpcy5maWxlcy5kZWxldGUoZmlsZVBhdGgpO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IGZpbGVQYXRoIG9mIHRoaXMuYmluYXJ5RmlsZXMua2V5cygpKSB7XG4gICAgICBpZiAoZmlsZVBhdGguc3RhcnRzV2l0aChwcmVmaXgpKSB7XG4gICAgICAgIHRoaXMuYmluYXJ5RmlsZXMuZGVsZXRlKGZpbGVQYXRoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBqb2luKC4uLnBhdGhzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHBhdGhzLmpvaW4oXCIvXCIpLnJlcGxhY2UoL1xcLysvZywgXCIvXCIpLnJlcGxhY2UoL1xcLyQvLCBcIlwiKSB8fCBcIi9cIjtcbiAgfVxuXG4gIGRpcm5hbWUocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBsYXN0U2xhc2ggPSBwYXRoLmxhc3RJbmRleE9mKFwiL1wiKTtcbiAgICByZXR1cm4gbGFzdFNsYXNoIDw9IDAgPyBcIi9cIiA6IHBhdGguc2xpY2UoMCwgbGFzdFNsYXNoKTtcbiAgfVxuXG4gIGlzQWJzb2x1dGUocGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHBhdGguc3RhcnRzV2l0aChcIi9cIik7XG4gIH1cblxuICByZWxhdGl2ZShmcm9tOiBzdHJpbmcsIHRvOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIC8vIFNpbXBsZSBpbXBsZW1lbnRhdGlvbiBmb3IgdGVzdGluZ1xuICAgIGlmICh0by5zdGFydHNXaXRoKGZyb20pKSB7XG4gICAgICByZXR1cm4gdG8uc2xpY2UoZnJvbS5sZW5ndGggKyAxKTtcbiAgICB9XG4gICAgcmV0dXJuIHRvO1xuICB9XG5cbiAgaXNEaXJlY3RvcnkocGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgLy8gQ2hlY2sgaWYgd2UgaGF2ZSBhIGRpcmVjdG9yeSBtYXJrZXJcbiAgICBpZiAodGhpcy5maWxlcy5oYXMocGF0aCArIFwiLy5kaXJcIikpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIGFueSBmaWxlcyBleGlzdCB1bmRlciB0aGlzIHBhdGhcbiAgICBjb25zdCBwcmVmaXggPSBgJHtwYXRofS9gO1xuICAgIGZvciAoY29uc3QgZmlsZVBhdGggb2YgdGhpcy5maWxlcy5rZXlzKCkpIHtcbiAgICAgIGlmIChmaWxlUGF0aC5zdGFydHNXaXRoKHByZWZpeCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAoY29uc3QgZmlsZVBhdGggb2YgdGhpcy5iaW5hcnlGaWxlcy5rZXlzKCkpIHtcbiAgICAgIGlmIChmaWxlUGF0aC5zdGFydHNXaXRoKHByZWZpeCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIFJlcG9zaXRvcnkgb3BlcmF0aW9uc1xuICBub3JtYWxpemVSZXBvc2l0b3J5UGF0aChpbnB1dFBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgLy8gRm9yIHRlc3RpbmcsIGp1c3QgZmluZCB0aGUgY2xvc2VzdCBwYXJlbnQgZGlyZWN0b3J5IHdpdGggLmdpdFxuICAgIGxldCBjdXJyZW50ID0gaW5wdXRQYXRoO1xuICAgIHdoaWxlIChjdXJyZW50ICYmIGN1cnJlbnQgIT09IFwiL1wiKSB7XG4gICAgICBpZiAodGhpcy5leGlzdHModGhpcy5qb2luKGN1cnJlbnQsIFwiLmdpdFwiKSkpIHtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9XG4gICAgICBjdXJyZW50ID0gdGhpcy5kaXJuYW1lKGN1cnJlbnQpO1xuICAgIH1cblxuICAgIC8vIElmIG5vIC5naXQgZm91bmQsIHRocm93IGFuIGVycm9yXG4gICAgdGhyb3cgbmV3IEVycm9yKGBOb3QgYSBnaXQgcmVwb3NpdG9yeTogJHtpbnB1dFBhdGh9YCk7XG4gIH1cblxuICBmaW5kUHJvamVjdFJvb3QoaW5wdXRQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLm5vcm1hbGl6ZVJlcG9zaXRvcnlQYXRoKGlucHV0UGF0aCk7XG4gIH1cblxuICBnZXRSZXBvc2l0b3J5TmFtZShyZXBvc2l0b3J5UGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBzZWdtZW50cyA9IHJlcG9zaXRvcnlQYXRoLnNwbGl0KFwiL1wiKS5maWx0ZXIoKHMpID0+IHMpO1xuICAgIHJldHVybiBzZWdtZW50c1tzZWdtZW50cy5sZW5ndGggLSAxXSB8fCBcInJvb3RcIjtcbiAgfVxuXG4gIC8vIFRlc3QgdXRpbGl0aWVzXG4gIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuZmlsZXMuY2xlYXIoKTtcbiAgICB0aGlzLmJpbmFyeUZpbGVzLmNsZWFyKCk7XG4gIH1cblxuICBnZXRGaWxlcygpOiBNYXA8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICByZXR1cm4gbmV3IE1hcCh0aGlzLmZpbGVzKTtcbiAgfVxuXG4gIC8vIEhlbHBlciB0byBzZXQgdXAgYSB0ZXN0IHJlcG9zaXRvcnkgc3RydWN0dXJlXG4gIHNldHVwVGVzdFJlcG8ocmVwb1BhdGg6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuY3JlYXRlRGlyKHJlcG9QYXRoKTtcbiAgICB0aGlzLmNyZWF0ZURpcih0aGlzLmpvaW4ocmVwb1BhdGgsIFwiLmdpdFwiKSk7XG4gICAgdGhpcy5jcmVhdGVEaXIodGhpcy5qb2luKHJlcG9QYXRoLCBcIi5hbGV4YW5kcmlhXCIpKTtcbiAgfVxuXG4gIC8vIEhlbHBlciB0byBkZWJ1ZyB3aGF0J3MgaW4gdGhlIGZpbGVzeXN0ZW1cbiAgZGVidWcoKTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coXCJJbk1lbW9yeSBGaWxlU3lzdGVtIENvbnRlbnRzOlwiKTtcbiAgICBmb3IgKGNvbnN0IFtwYXRoLCBjb250ZW50XSBvZiB0aGlzLmZpbGVzLmVudHJpZXMoKSkge1xuICAgICAgaWYgKCFwYXRoLmVuZHNXaXRoKFwiLy5kaXJcIikpIHtcbiAgICAgICAgY29uc29sZS5sb2coYCAgJHtwYXRofTogJHtjb250ZW50Lmxlbmd0aH0gYnl0ZXNgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIKICBdLAogICJtYXBwaW5ncyI6ICJBQVlPLE1BQU0sQ0FBYSxPQUtqQixtQkFBa0IsQ0FDdkIsRUFDQSxFQUFtQixHQUtuQixDQUNBLElBQU0sRUFBaUIsRUFBUyxTQUFTLEdBQUcsRUFBSSxFQUFTLE1BQU0sRUFBRyxFQUFFLEVBQUksRUFHbEUsRUFBa0MsSUFBSSxJQUN0QyxFQUF1QixDQUFDLEVBQ3hCLEVBQWtDLENBQUMsRUFHbkMsRUFBaUIsSUFBSSxJQUMzQixFQUFNLFFBQVEsS0FBWSxDQUN4QixJQUFNLEVBQVEsRUFB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QUFLLEdBQUcsRUFBRSxRQUFRLE9BQVEsR0FBRyxFQUFFLFFBQVEsTUFBTyxFQUFFLEdBQUssSUFHcEUsT0FBTyxDQUFDLEVBQXNCLENBQzVCLElBQU0sRUFBWSxFQUFLLFlBQVksR0FBRyxFQUN0QyxPQUFPLEdBQWEsRUFBSSxJQUFNLEVBQUssTUFBTSxFQUFHLENBQVMsRUFHdkQsVUFBVSxDQUFDLEVBQXVCLENBQ2hDLE9BQU8sRUFBSyxXQUFXLEdBQUcsRUFHNUIsUUFBUSxDQUFDLEVBQWMsRUFBb0IsQ0FFekMsR0FBSSxFQUFHLFdBQVcsQ0FBSSxFQUNwQixPQUFPLEVBQUcsTUFBTSxFQUFLLE9BQVMsQ0FBQyxFQUVqQyxPQUFPLEVBR1QsV0FBVyxDQUFDLEVBQXVCLENBRWpDLEdBQUksS0FBSyxNQUFNLElBQUksRUFBTyxPQUFPLEVBQy9CLE1BQU8sR0FJVCxJQUFNLEVBQVMsR0FBRyxLQUNsQixRQUFXLEtBQVksS0FBSyxNQUFNLEtBQUssRUFDckMsR0FBSSxFQUFTLFdBQVcsQ0FBTSxFQUM1QixNQUFPLEdBR1gsUUFBVyxLQUFZLEtBQUssWUFBWSxLQUFLLEVBQzNDLEdBQUksRUFBUyxXQUFXLENBQU0sRUFDNUIsTUFBTyxHQUdYLE1BQU8sR0FJVCx1QkFBdUIsQ0FBQyxFQUEyQixDQUVqRCxJQUFJLEVBQVUsRUFDZCxNQUFPLEdBQVcsSUFBWSxJQUFLLENBQ2pDLEdBQUksS0FBSyxPQUFPLEtBQUssS0FBSyxFQUFTLE1BQU0sQ0FBQyxFQUN4QyxPQUFPLEVBRVQsRUFBVSxLQUFLLFFBQVEsQ0FBTyxFQUloQyxNQUFNLElBQUksTUFBTSx5QkFBeUIsR0FBVyxFQUd0RCxlQUFlLENBQUMsRUFBMkIsQ0FDekMsT0FBTyxLQUFLLHdCQUF3QixDQUFTLEVBRy9DLGlCQUFpQixDQUFDLEVBQWdDLENBQ2hELElBQU0sRUFBVyxFQUFlLE1BQU0sR0FBRyxFQUFFLE9BQU8sQ0FBQyxJQUFNLENBQUMsRUFDMUQsT0FBTyxFQUFTLEVBQVMsT0FBUyxJQUFNLE9BSTFDLEtBQUssRUFBUyxDQUNaLEtBQUssTUFBTSxNQUFNLEVBQ2pCLEtBQUssWUFBWSxNQUFNLEVBR3pCLFFBQVEsRUFBd0IsQ0FDOUIsT0FBTyxJQUFJLElBQUksS0FBSyxLQUFLLEVBSTNCLGFBQWEsQ0FBQyxFQUF3QixDQUNwQyxLQUFLLFVBQVUsQ0FBUSxFQUN2QixLQUFLLFVBQVUsS0FBSyxLQUFLLEVBQVUsTUFBTSxDQUFDLEVBQzFDLEtBQUssVUFBVSxLQUFLLEtBQUssRUFBVSxhQUFhLENBQUMsRUFJbkQsS0FBSyxFQUFTLENBQ1osUUFBUSxJQUFJLCtCQUErQixFQUMzQyxRQUFZLEVBQU0sS0FBWSxLQUFLLE1BQU0sUUFBUSxFQUMvQyxJQUFLLEVBQUssU0FBUyxPQUFPLEVBQ3hCLFFBQVEsSUFBSSxLQUFLLE1BQVMsRUFBUSxjQUFjLEVBSXhEIiwKICAiZGVidWdJZCI6ICI0OUMxNUIyNjExMDczM0FBNjQ3NTZFMjE2NDc1NkUyMSIsCiAgIm5hbWVzIjogW10KfQ==\n","import React, { useCallback, useMemo, useState, useEffect, useRef } from 'react';\nimport { useTheme } from '@principal-ade/industry-theme';\nimport { GitStatusFileTree, type GitFileStatus } from '@principal-ade/dynamic-file-tree';\nimport { PathsFileTreeBuilder, type FileTree } from '@principal-ai/repository-abstraction';\nimport type { GitStatus, GitChangeSelectionStatus, PanelComponentProps } from '../types';\n\nexport interface GitChangesPanelProps {\n /** Git status data with categorized file paths */\n gitStatus: GitStatus;\n /** Optional file tree for \"Full Tree\" view mode */\n fileTree?: FileTree | null;\n /** Root path for the repository (used for building file trees) */\n rootPath?: string;\n /** Whether git status is currently loading */\n isLoading?: boolean;\n /** Callback when a file is clicked */\n onFileClick?: (filePath: string, status?: GitChangeSelectionStatus) => void;\n /** Message to display when there are no changes */\n emptyMessage?: string;\n /** Message to display while loading */\n loadingMessage?: string;\n /** Currently selected file path */\n selectedFile?: string;\n}\n\n/**\n * GitChangesPanelContent - Internal component that renders the git changes UI\n * Can be used directly with props or via the framework wrapper\n */\nexport const GitChangesPanelContent: React.FC<GitChangesPanelProps> = ({\n gitStatus,\n fileTree,\n rootPath,\n isLoading = false,\n onFileClick,\n emptyMessage = 'No git changes to display',\n loadingMessage = 'Loading git changes...',\n selectedFile,\n}) => {\n const { theme } = useTheme();\n\n // Calculate if there are changes\n const hasChanges =\n gitStatus.staged.length > 0 ||\n gitStatus.unstaged.length > 0 ||\n gitStatus.untracked.length > 0 ||\n gitStatus.deleted.length > 0;\n\n // State for toggling between full tree and changes only\n const [showFullTree, setShowFullTree] = useState(false);\n const userHasToggledView = useRef(false);\n\n // Update default view mode based on whether there are changes\n useEffect(() => {\n if (!isLoading && !userHasToggledView.current) {\n const rafId = requestAnimationFrame(() => {\n setShowFullTree(!hasChanges);\n });\n return () => cancelAnimationFrame(rafId);\n }\n }, [hasChanges, isLoading]);\n\n // Determine file status based on git status data\n const getFileStatus = useCallback(\n (filePath: string): GitChangeSelectionStatus | undefined => {\n if (gitStatus.staged.includes(filePath)) {\n return 'staged';\n }\n if (gitStatus.deleted.includes(filePath)) {\n return 'deleted';\n }\n if (gitStatus.untracked.includes(filePath)) {\n return 'untracked';\n }\n if (gitStatus.unstaged.includes(filePath)) {\n return 'unstaged';\n }\n return undefined;\n },\n [gitStatus],\n );\n\n const handleFileSelect = useCallback(\n (filePath: string) => {\n const status = getFileStatus(filePath);\n onFileClick?.(filePath, status);\n },\n [getFileStatus, onFileClick],\n );\n\n const gitChangesData = useMemo(() => {\n if (isLoading) {\n return null;\n }\n\n // Helper function to expand directories using the fileTree\n const expandDirectories = (paths: string[]): string[] => {\n if (!fileTree?.allFiles) return paths;\n\n const expandedPaths: string[] = [];\n\n for (const path of paths) {\n const normalizedPath = path.endsWith('/') ? path.slice(0, -1) : path;\n const matchingFiles = fileTree.allFiles.filter(\n (file) =>\n file.path.startsWith(normalizedPath + '/') ||\n file.path === normalizedPath,\n );\n\n if (matchingFiles.length > 0) {\n expandedPaths.push(...matchingFiles.map((f) => f.path));\n } else {\n expandedPaths.push(normalizedPath);\n }\n }\n\n return expandedPaths;\n };\n\n // Expand untracked directories to show all files\n const expandedUntracked = expandDirectories(gitStatus.untracked);\n\n const statusData: GitFileStatus[] = [\n ...gitStatus.staged.map((filePath) => ({\n filePath,\n indexStatus: 'A',\n workingTreeStatus: ' ',\n status: 'A' as const,\n })),\n ...gitStatus.unstaged.map((filePath) => ({\n filePath,\n indexStatus: ' ',\n workingTreeStatus: 'M',\n status: 'M' as const,\n })),\n ...gitStatus.deleted.map((filePath) => ({\n filePath,\n indexStatus: ' ',\n workingTreeStatus: 'D',\n status: 'D' as const,\n })),\n ...expandedUntracked.map((filePath) => ({\n filePath,\n indexStatus: '?',\n workingTreeStatus: '?',\n status: '??' as const,\n })),\n ];\n\n // If showing full tree, use the complete fileTree\n if (showFullTree && fileTree) {\n return { tree: fileTree, statusData };\n }\n\n // Changes only mode - show only changed files\n if (!hasChanges) {\n return null;\n }\n\n const allChangedFiles = [\n ...gitStatus.staged,\n ...gitStatus.unstaged,\n ...expandedUntracked,\n ...gitStatus.deleted,\n ].sort((a, b) => a.localeCompare(b));\n\n const builder = new PathsFileTreeBuilder();\n const tree = builder.build({ files: allChangedFiles, rootPath: rootPath ?? '' });\n\n return { tree, statusData };\n }, [isLoading, hasChanges, fileTree, gitStatus, rootPath, showFullTree]);\n\n // Toggle button component\n const ToggleButtons = () => (\n <div\n style={{\n display: 'flex',\n alignItems: 'stretch',\n backgroundColor: theme.colors.backgroundTertiary,\n width: '100%',\n }}\n >\n <button\n onClick={() => {\n userHasToggledView.current = true;\n setShowFullTree(true);\n }}\n style={{\n flex: 1,\n padding: '6px 12px',\n fontSize: theme.fontSizes[1],\n backgroundColor: showFullTree\n ? theme.colors.backgroundSecondary\n : 'transparent',\n color: showFullTree ? theme.colors.text : theme.colors.textSecondary,\n border: showFullTree\n ? `1px solid ${theme.colors.border}`\n : '1px solid transparent',\n cursor: 'pointer',\n fontWeight: showFullTree ? 600 : 400,\n transition: 'all 0.2s',\n }}\n >\n Full Tree\n </button>\n <button\n onClick={() => {\n userHasToggledView.current = true;\n setShowFullTree(false);\n }}\n style={{\n flex: 1,\n padding: '6px 12px',\n fontSize: theme.fontSizes[1],\n backgroundColor: !showFullTree\n ? theme.colors.backgroundSecondary\n : 'transparent',\n color: !showFullTree ? theme.colors.text : theme.colors.textSecondary,\n border: !showFullTree\n ? `1px solid ${theme.colors.border}`\n : '1px solid transparent',\n cursor: 'pointer',\n fontWeight: !showFullTree ? 600 : 400,\n transition: 'all 0.2s',\n }}\n >\n Changes Only\n </button>\n </div>\n );\n\n // Content area\n const Content = () => {\n if (isLoading) {\n return (\n <div\n style={{\n padding: '20px',\n textAlign: 'center',\n color: theme.colors.textSecondary,\n }}\n >\n {loadingMessage}\n </div>\n );\n }\n\n if (!hasChanges && !showFullTree) {\n return (\n <div\n style={{\n padding: '20px',\n textAlign: 'center',\n color: theme.colors.textSecondary,\n }}\n >\n {emptyMessage}\n </div>\n );\n }\n\n if (!gitChangesData) {\n return null;\n }\n\n return (\n <GitStatusFileTree\n key={`${showFullTree}-${gitChangesData.statusData.length}`}\n fileTree={gitChangesData.tree}\n theme={theme}\n gitStatusData={gitChangesData.statusData}\n onFileSelect={handleFileSelect}\n selectedFile={selectedFile}\n transparentBackground={true}\n horizontalNodePadding=\"16px\"\n openByDefault={!showFullTree}\n />\n );\n };\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', height: '100%' }}>\n <div style={{ borderBottom: `1px solid ${theme.colors.border}` }}>\n <ToggleButtons />\n </div>\n <div style={{ flex: 1, overflow: 'auto' }}>\n <Content />\n </div>\n </div>\n );\n};\n\nexport const GitChangesPanelPreview: React.FC = () => {\n const { theme } = useTheme();\n\n return (\n <div\n style={{\n padding: '12px',\n fontSize: '12px',\n color: theme.colors.text,\n display: 'flex',\n flexDirection: 'column',\n gap: '6px',\n }}\n >\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n color: '#22c55e',\n }}\n >\n <span>+</span>\n <span>new-file.ts</span>\n </div>\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n color: '#f59e0b',\n }}\n >\n <span>M</span>\n <span>modified.ts</span>\n </div>\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n color: '#ef4444',\n }}\n >\n <span>-</span>\n <span>deleted.ts</span>\n </div>\n </div>\n );\n};\n\n/**\n * GitChangesPanel - Panel Framework compatible component\n * Uses context.getSlice('git') and context.getSlice('fileTree') to get data\n */\nexport const GitChangesPanel: React.FC<PanelComponentProps> = ({ context }) => {\n // Get data slices from context\n const gitSlice = context.getSlice<GitStatus>('git');\n const fileTreeSlice = context.getSlice<FileTree>('fileTree');\n\n // Extract data with defaults\n const gitStatus = gitSlice?.data ?? {\n staged: [],\n unstaged: [],\n untracked: [],\n deleted: [],\n };\n const fileTree = fileTreeSlice?.data ?? null;\n const isLoading = gitSlice?.loading || fileTreeSlice?.loading || false;\n\n // Get repository path from context scope\n const rootPath = context.currentScope.type === 'repository'\n ? context.currentScope.repository?.path\n : undefined;\n\n return (\n <GitChangesPanelContent\n gitStatus={gitStatus}\n fileTree={fileTree}\n rootPath={rootPath}\n isLoading={isLoading}\n />\n );\n};\n","import React, { useState, useMemo } from 'react';\nimport { useTheme } from '@principal-ade/industry-theme';\nimport {\n Package,\n ChevronDown,\n ChevronRight,\n FileCode,\n Terminal,\n Settings,\n Folder,\n ExternalLink,\n} from 'lucide-react';\nimport type { PanelComponentProps } from '../types';\nimport type { PackageLayer, ConfigFile, PackageCommand } from '../types/composition';\n\nexport interface PackageCompositionPanelProps {\n /** Detected packages in the repository */\n packages: PackageLayer[];\n /** Whether package data is loading */\n isLoading?: boolean;\n /** Message to display when there are no packages */\n emptyMessage?: string;\n /** Callback when a command is clicked */\n onCommandClick?: (command: PackageCommand, packagePath: string) => void;\n /** Callback when a config file is clicked */\n onConfigClick?: (configFile: ConfigFile) => void;\n /** Callback when a package folder is clicked */\n onPackageClick?: (packagePath: string) => void;\n}\n\ninterface PackageCardProps {\n pkg: PackageLayer;\n isExpanded: boolean;\n onToggle: () => void;\n onCommandClick?: (command: PackageCommand, packagePath: string) => void;\n onConfigClick?: (configFile: ConfigFile) => void;\n onPackageClick?: (packagePath: string) => void;\n}\n\nconst PackageCard: React.FC<PackageCardProps> = ({\n pkg,\n isExpanded,\n onToggle,\n onCommandClick,\n onConfigClick,\n onPackageClick,\n}) => {\n const { theme } = useTheme();\n const [activeTab, setActiveTab] = useState<'commands' | 'configs'>('commands');\n\n const configFiles = useMemo(() => {\n if (!pkg.configFiles) return [];\n return Object.entries(pkg.configFiles)\n .filter(([, config]) => config?.exists)\n .map(([name, config]) => ({ name, ...config! }));\n }, [pkg.configFiles]);\n\n const commands = pkg.packageData.availableCommands || [];\n\n return (\n <div\n style={{\n backgroundColor: theme.colors.backgroundSecondary,\n borderRadius: '8px',\n border: `1px solid ${theme.colors.border}`,\n overflow: 'hidden',\n }}\n >\n {/* Header */}\n <button\n onClick={onToggle}\n style={{\n width: '100%',\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '12px 16px',\n backgroundColor: 'transparent',\n border: 'none',\n cursor: 'pointer',\n color: theme.colors.text,\n textAlign: 'left',\n }}\n >\n {isExpanded ? (\n <ChevronDown size={16} color={theme.colors.textSecondary} />\n ) : (\n <ChevronRight size={16} color={theme.colors.textSecondary} />\n )}\n <Package size={18} color={theme.colors.accent} />\n <div style={{ flex: 1, minWidth: 0 }}>\n <div\n style={{\n fontSize: theme.fontSizes[2],\n fontWeight: 600,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n {pkg.packageData.name}\n </div>\n {pkg.packageData.version && (\n <div\n style={{\n fontSize: theme.fontSizes[0],\n color: theme.colors.textSecondary,\n }}\n >\n v{pkg.packageData.version}\n </div>\n )}\n </div>\n {pkg.packageData.path && (\n <button\n onClick={(e) => {\n e.stopPropagation();\n onPackageClick?.(pkg.packageData.path);\n }}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n padding: '4px 8px',\n backgroundColor: theme.colors.backgroundTertiary,\n border: `1px solid ${theme.colors.border}`,\n borderRadius: '4px',\n color: theme.colors.textSecondary,\n fontSize: theme.fontSizes[0],\n cursor: 'pointer',\n }}\n title=\"Open package folder\"\n >\n <Folder size={12} />\n {pkg.packageData.path || '/'}\n </button>\n )}\n </button>\n\n {/* Expanded Content */}\n {isExpanded && (\n <div style={{ borderTop: `1px solid ${theme.colors.border}` }}>\n {/* Tabs */}\n <div\n style={{\n display: 'flex',\n backgroundColor: theme.colors.backgroundTertiary,\n borderBottom: `1px solid ${theme.colors.border}`,\n }}\n >\n {[\n { id: 'commands' as const, label: 'Commands', count: commands.length },\n { id: 'configs' as const, label: 'Configs', count: configFiles.length },\n ].map((tab) => (\n <button\n key={tab.id}\n onClick={() => setActiveTab(tab.id)}\n style={{\n flex: 1,\n padding: '8px 12px',\n backgroundColor: activeTab === tab.id ? theme.colors.backgroundSecondary : 'transparent',\n border: 'none',\n borderBottom:\n activeTab === tab.id ? `2px solid ${theme.colors.accent}` : '2px solid transparent',\n color: activeTab === tab.id ? theme.colors.text : theme.colors.textSecondary,\n fontSize: theme.fontSizes[1],\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '6px',\n }}\n >\n {tab.label}\n <span\n style={{\n backgroundColor: theme.colors.backgroundTertiary,\n padding: '1px 6px',\n borderRadius: '10px',\n fontSize: theme.fontSizes[0],\n }}\n >\n {tab.count}\n </span>\n </button>\n ))}\n </div>\n\n {/* Tab Content */}\n <div style={{ padding: '12px', maxHeight: '300px', overflow: 'auto' }}>\n {activeTab === 'commands' && (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '6px' }}>\n {commands.length === 0 ? (\n <div style={{ color: theme.colors.textSecondary, fontSize: theme.fontSizes[1] }}>\n No commands available\n </div>\n ) : (\n commands.map((cmd, idx) => (\n <button\n key={idx}\n onClick={() => onCommandClick?.(cmd, pkg.packageData.path)}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '8px 12px',\n backgroundColor: theme.colors.backgroundTertiary,\n border: `1px solid ${theme.colors.border}`,\n borderRadius: '6px',\n color: theme.colors.text,\n cursor: 'pointer',\n textAlign: 'left',\n }}\n >\n <Terminal size={14} color={theme.colors.accent} />\n <div style={{ flex: 1, minWidth: 0 }}>\n <div style={{ fontWeight: 500, fontSize: theme.fontSizes[1] }}>{cmd.name}</div>\n <div\n style={{\n fontSize: theme.fontSizes[0],\n color: theme.colors.textSecondary,\n fontFamily: 'monospace',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n {cmd.command}\n </div>\n </div>\n {cmd.isLensCommand && (\n <span\n style={{\n padding: '2px 6px',\n backgroundColor: theme.colors.accent + '20',\n color: theme.colors.accent,\n borderRadius: '4px',\n fontSize: theme.fontSizes[0],\n }}\n >\n {cmd.lensId}\n </span>\n )}\n <ExternalLink size={12} color={theme.colors.textSecondary} />\n </button>\n ))\n )}\n </div>\n )}\n\n {activeTab === 'configs' && (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '6px' }}>\n {configFiles.length === 0 ? (\n <div style={{ color: theme.colors.textSecondary, fontSize: theme.fontSizes[1] }}>\n No config files detected\n </div>\n ) : (\n configFiles.map((config, idx) => (\n <button\n key={idx}\n onClick={() => onConfigClick?.(config)}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '8px 12px',\n backgroundColor: theme.colors.backgroundTertiary,\n border: `1px solid ${theme.colors.border}`,\n borderRadius: '6px',\n color: theme.colors.text,\n cursor: 'pointer',\n textAlign: 'left',\n }}\n >\n <Settings size={14} color={theme.colors.textSecondary} />\n <div style={{ flex: 1 }}>\n <div style={{ fontWeight: 500, fontSize: theme.fontSizes[1] }}>{config.name}</div>\n <div\n style={{\n fontSize: theme.fontSizes[0],\n color: theme.colors.textSecondary,\n fontFamily: 'monospace',\n }}\n >\n {config.path}\n </div>\n </div>\n {config.isInline && (\n <span\n style={{\n padding: '2px 6px',\n backgroundColor: theme.colors.textSecondary + '20',\n color: theme.colors.textSecondary,\n borderRadius: '4px',\n fontSize: theme.fontSizes[0],\n }}\n >\n inline\n </span>\n )}\n </button>\n ))\n )}\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n );\n};\n\n/**\n * PackageCompositionPanelContent - Internal component that renders the package composition UI\n */\nexport const PackageCompositionPanelContent: React.FC<PackageCompositionPanelProps> = ({\n packages,\n isLoading = false,\n emptyMessage = 'No packages detected',\n onCommandClick,\n onConfigClick,\n onPackageClick,\n}) => {\n const { theme } = useTheme();\n const [expandedPackages, setExpandedPackages] = useState<Set<string>>(new Set());\n\n const togglePackage = (packageId: string) => {\n setExpandedPackages((prev) => {\n const next = new Set(prev);\n if (next.has(packageId)) {\n next.delete(packageId);\n } else {\n next.add(packageId);\n }\n return next;\n });\n };\n\n // Expand first package by default\n React.useEffect(() => {\n if (packages.length > 0 && expandedPackages.size === 0) {\n setExpandedPackages(new Set([packages[0].id]));\n }\n }, [packages, expandedPackages.size]);\n\n if (isLoading) {\n return (\n <div\n style={{\n padding: '20px',\n textAlign: 'center',\n color: theme.colors.textSecondary,\n }}\n >\n Loading packages...\n </div>\n );\n }\n\n if (packages.length === 0) {\n return (\n <div\n style={{\n padding: '20px',\n textAlign: 'center',\n color: theme.colors.textSecondary,\n }}\n >\n {emptyMessage}\n </div>\n );\n }\n\n // Sort packages: monorepo roots first, then by path\n const sortedPackages = [...packages].sort((a, b) => {\n if (a.packageData.isMonorepoRoot && !b.packageData.isMonorepoRoot) return -1;\n if (!a.packageData.isMonorepoRoot && b.packageData.isMonorepoRoot) return 1;\n return a.packageData.path.localeCompare(b.packageData.path);\n });\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', height: '100%' }}>\n {/* Header */}\n <div\n style={{\n padding: '12px 16px',\n borderBottom: `1px solid ${theme.colors.border}`,\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n }}\n >\n <FileCode size={16} color={theme.colors.accent} />\n <span style={{ fontSize: theme.fontSizes[1], color: theme.colors.textSecondary }}>\n {packages.length} package{packages.length !== 1 ? 's' : ''} detected\n </span>\n </div>\n\n {/* Package List */}\n <div style={{ flex: 1, overflow: 'auto', padding: '12px', display: 'flex', flexDirection: 'column', gap: '8px' }}>\n {sortedPackages.map((pkg) => (\n <PackageCard\n key={pkg.id}\n pkg={pkg}\n isExpanded={expandedPackages.has(pkg.id)}\n onToggle={() => togglePackage(pkg.id)}\n onCommandClick={onCommandClick}\n onConfigClick={onConfigClick}\n onPackageClick={onPackageClick}\n />\n ))}\n </div>\n </div>\n );\n};\n\nexport const PackageCompositionPanelPreview: React.FC = () => {\n const { theme } = useTheme();\n\n return (\n <div\n style={{\n padding: '12px',\n fontSize: '12px',\n color: theme.colors.text,\n display: 'flex',\n flexDirection: 'column',\n gap: '6px',\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', gap: '6px' }}>\n <Package size={14} color={theme.colors.accent} />\n <span>my-app</span>\n </div>\n <div style={{ display: 'flex', alignItems: 'center', gap: '6px', paddingLeft: '8px' }}>\n <Terminal size={12} color={theme.colors.textSecondary} />\n <span style={{ color: theme.colors.textSecondary }}>5 commands</span>\n </div>\n <div style={{ display: 'flex', alignItems: 'center', gap: '6px', paddingLeft: '8px' }}>\n <Settings size={12} color={theme.colors.textSecondary} />\n <span style={{ color: theme.colors.textSecondary }}>3 configs</span>\n </div>\n </div>\n );\n};\n\n/**\n * PackageCompositionPanel - Panel Framework compatible component\n * Uses context.getSlice('packages') to get package layer data\n */\nexport const PackageCompositionPanel: React.FC<PanelComponentProps> = ({ context }) => {\n // Get packages slice from context\n const packagesSlice = context.getSlice<PackageLayer[]>('packages');\n\n const packages = packagesSlice?.data ?? [];\n const isLoading = packagesSlice?.loading || false;\n\n return (\n <PackageCompositionPanelContent\n packages={packages}\n isLoading={isLoading}\n />\n );\n};\n","import React from 'react';\nimport { X, Package, Scale, HelpCircle } from 'lucide-react';\nimport { useTheme, type Theme } from '@principal-ade/industry-theme';\n\ninterface DependencyInfoModalProps {\n isOpen: boolean;\n onClose: () => void;\n}\n\nexport const DependencyInfoModal: React.FC<DependencyInfoModalProps> = ({\n isOpen,\n onClose,\n}) => {\n const { theme } = useTheme();\n\n if (!isOpen) return null;\n\n return (\n <>\n {/* Backdrop */}\n <div\n style={{\n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: theme.colors.muted,\n zIndex: theme.zIndices[4],\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n onClick={onClose}\n >\n {/* Modal */}\n <div\n style={{\n backgroundColor: theme.colors.background,\n borderRadius: `${theme.radii[3]}px`,\n maxWidth: '600px',\n maxHeight: '80vh',\n width: '90%',\n overflow: 'hidden',\n display: 'flex',\n flexDirection: 'column',\n boxShadow: theme.shadows[3],\n }}\n onClick={(e) => e.stopPropagation()}\n >\n {/* Header */}\n <div\n style={{\n padding: `${theme.space[4]}px`,\n borderBottom: `1px solid ${theme.colors.border}`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n }}\n >\n <h2\n style={{\n fontSize: `${theme.fontSizes[4]}px`,\n fontWeight: theme.fontWeights.semibold,\n color: theme.colors.text,\n display: 'flex',\n alignItems: 'center',\n gap: `${theme.space[2]}px`,\n margin: 0,\n }}\n >\n <HelpCircle size={20} />\n Understanding Dependencies\n </h2>\n <button\n onClick={onClose}\n style={{\n background: 'none',\n border: 'none',\n color: theme.colors.textSecondary,\n cursor: 'pointer',\n padding: `${theme.space[1]}px`,\n }}\n >\n <X size={20} />\n </button>\n </div>\n\n {/* Content */}\n <div\n style={{\n padding: `${theme.space[4]}px`,\n overflow: 'auto',\n flex: 1,\n }}\n >\n {/* Dependency Types */}\n <Section\n icon={<Package size={18} />}\n title=\"Dependency Types\"\n theme={theme}\n >\n <InfoItem\n badge={{ text: 'prod', color: theme.colors.primary }}\n title=\"Production Dependencies\"\n description=\"Required for your application to run in production. These are bundled with your app and affect its size and security.\"\n theme={theme}\n />\n <InfoItem\n badge={{ text: 'dev', color: theme.colors.secondary }}\n title=\"Development Dependencies\"\n description=\"Only needed during development (build tools, testing, linters). Not included in production builds.\"\n theme={theme}\n />\n <InfoItem\n badge={{ text: 'peer', color: theme.colors.accent }}\n title=\"Peer Dependencies\"\n description=\"Expected to be provided by the consumer of your package. Important for library authors to specify compatibility.\"\n theme={theme}\n />\n </Section>\n\n {/* Licenses */}\n <Section\n icon={<Scale size={18} />}\n title=\"Common Licenses\"\n theme={theme}\n >\n <InfoItem\n badge={{ text: 'MIT', color: theme.colors.success }}\n title=\"Permissive Licenses (MIT, Apache, BSD)\"\n description=\"Few restrictions. Can use in commercial projects. Must include copyright notice.\"\n theme={theme}\n />\n <InfoItem\n badge={{ text: 'GPL', color: theme.colors.warning }}\n title=\"Copyleft Licenses (GPL, LGPL, AGPL)\"\n description=\"Requires sharing source code of derivative works. Can impact your project's licensing.\"\n theme={theme}\n />\n </Section>\n </div>\n </div>\n </div>\n </>\n );\n};\n\n// Helper Components\nconst Section: React.FC<{\n icon: React.ReactNode;\n title: string;\n theme: Theme;\n children: React.ReactNode;\n}> = ({ icon, title, theme, children }) => (\n <div style={{ marginBottom: `${theme.space[5]}px` }}>\n <h3\n style={{\n fontSize: `${theme.fontSizes[2]}px`,\n fontWeight: theme.fontWeights.semibold,\n color: theme.colors.text,\n marginBottom: `${theme.space[3]}px`,\n display: 'flex',\n alignItems: 'center',\n gap: `${theme.space[2]}px`,\n }}\n >\n {icon}\n {title}\n </h3>\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: `${theme.space[2]}px`,\n }}\n >\n {children}\n </div>\n </div>\n);\n\nconst InfoItem: React.FC<{\n badge: { text: string; color: string };\n title: string;\n description: string;\n theme: Theme;\n}> = ({ badge, title, description, theme }) => (\n <div\n style={{\n padding: `${theme.space[3]}px`,\n backgroundColor: theme.colors.backgroundSecondary,\n borderRadius: `${theme.radii[2]}px`,\n border: `1px solid ${theme.colors.border}`,\n }}\n >\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: `${theme.space[2]}px`,\n marginBottom: `${theme.space[1]}px`,\n }}\n >\n <span\n style={{\n padding: `${theme.space[1]}px ${theme.space[2]}px`,\n borderRadius: `${theme.radii[1]}px`,\n fontSize: `${theme.fontSizes[0]}px`,\n fontWeight: theme.fontWeights.medium,\n backgroundColor: `${badge.color}20`,\n color: badge.color,\n }}\n >\n {badge.text}\n </span>\n <span\n style={{\n fontSize: `${theme.fontSizes[1]}px`,\n fontWeight: theme.fontWeights.medium,\n color: theme.colors.text,\n }}\n >\n {title}\n </span>\n </div>\n <div\n style={{\n fontSize: `${theme.fontSizes[1]}px`,\n color: theme.colors.textSecondary,\n lineHeight: theme.lineHeights.relaxed,\n }}\n >\n {description}\n </div>\n </div>\n);\n","import React, { useState } from 'react';\nimport { ExternalLink, Copy, Check } from 'lucide-react';\nimport { useTheme } from '@principal-ade/industry-theme';\nimport type { DependencyItem } from '../../types/dependencies';\n\ninterface DependencyRowProps {\n dependency: DependencyItem;\n}\n\nexport const DependencyRow: React.FC<DependencyRowProps> = ({ dependency }) => {\n const { theme } = useTheme();\n const [isHovered, setIsHovered] = useState(false);\n const [copied, setCopied] = useState(false);\n\n const getDependencyTypeBadgeStyle = (type: string) => {\n const baseStyle = {\n padding: `${theme.space[1]}px ${theme.space[2]}px`,\n borderRadius: `${theme.radii[1]}px`,\n fontSize: `${theme.fontSizes[0]}px`,\n fontWeight: theme.fontWeights.medium,\n minWidth: '36px',\n textAlign: 'center' as const,\n };\n\n switch (type) {\n case 'production':\n return {\n ...baseStyle,\n backgroundColor: `${theme.colors.primary}20`,\n color: theme.colors.primary,\n };\n case 'development':\n return {\n ...baseStyle,\n backgroundColor: `${theme.colors.secondary}20`,\n color: theme.colors.secondary,\n };\n case 'peer':\n return {\n ...baseStyle,\n backgroundColor: `${theme.colors.accent}20`,\n color: theme.colors.accent,\n };\n default:\n return {\n ...baseStyle,\n backgroundColor: theme.colors.backgroundLight,\n color: theme.colors.textSecondary,\n };\n }\n };\n\n const handleCopy = async (e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n try {\n const copyText = `${dependency.name}@${dependency.version}`;\n await navigator.clipboard.writeText(copyText);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n } catch (err) {\n console.error('Failed to copy:', err);\n }\n };\n\n const actionButtonStyle: React.CSSProperties = {\n padding: `${theme.space[1]}px`,\n borderRadius: `${theme.radii[1]}px`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n border: 'none',\n backgroundColor: 'transparent',\n cursor: 'pointer',\n transition: 'all 0.15s ease',\n opacity: isHovered ? 1 : 0,\n pointerEvents: isHovered ? 'auto' : 'none',\n };\n\n return (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: `${theme.space[2]}px ${theme.space[3]}px`,\n backgroundColor: theme.colors.background,\n borderRadius: `${theme.radii[1]}px`,\n fontSize: `${theme.fontSizes[1]}px`,\n border: `1px solid ${theme.colors.border}`,\n transition: 'all 0.2s',\n }}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n >\n {/* Type badge and package name */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: `${theme.space[2]}px`,\n flex: 1,\n minWidth: 0,\n }}\n >\n <span style={getDependencyTypeBadgeStyle(dependency.dependencyType)}>\n {dependency.dependencyType === 'production'\n ? 'prod'\n : dependency.dependencyType === 'development'\n ? 'dev'\n : 'peer'}\n </span>\n <span\n style={{\n fontWeight: theme.fontWeights.medium,\n color: theme.colors.text,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n {dependency.name}\n </span>\n {/* NPM link - next to package name */}\n <a\n href={`https://www.npmjs.com/package/${dependency.name}`}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{\n ...actionButtonStyle,\n color: theme.colors.textSecondary,\n textDecoration: 'none',\n flexShrink: 0,\n }}\n title=\"View on npm\"\n >\n <ExternalLink size={12} />\n </a>\n </div>\n\n {/* Copy button and version */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n }}\n >\n {/* Copy button - left of version */}\n <button\n type=\"button\"\n onClick={handleCopy}\n style={{\n ...actionButtonStyle,\n color: copied ? theme.colors.success || '#10b981' : theme.colors.textSecondary,\n }}\n title={copied ? 'Copied!' : `Copy ${dependency.name}@${dependency.version}`}\n >\n {copied ? <Check size={12} /> : <Copy size={12} />}\n </button>\n\n <span style={{ color: theme.colors.textSecondary }}>\n {dependency.version}\n </span>\n </div>\n </div>\n );\n};\n","import React from 'react';\nimport { Search, X } from 'lucide-react';\nimport { useTheme } from '@principal-ade/industry-theme';\n\ntype ToggleableFilterType = 'production' | 'development' | 'peer';\n\ninterface FilterBarProps {\n activeFilters: Set<ToggleableFilterType>;\n onToggleFilter: (type: ToggleableFilterType) => void;\n searchQuery: string;\n onSearchChange: (query: string) => void;\n counts: {\n all: number;\n production: number;\n development: number;\n peer: number;\n };\n}\n\nexport const FilterBar: React.FC<FilterBarProps> = ({\n activeFilters,\n onToggleFilter,\n searchQuery,\n onSearchChange,\n counts,\n}) => {\n const { theme } = useTheme();\n\n // Only show filter buttons for types that have dependencies\n const availableFilters: ToggleableFilterType[] = [\n ...(counts.peer > 0 ? (['peer'] as const) : []),\n ...(counts.production > 0 ? (['production'] as const) : []),\n ...(counts.development > 0 ? (['development'] as const) : []),\n ];\n\n // Don't show filters if there's only one type\n const showFilters = availableFilters.length > 1;\n\n return (\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: `${theme.space[2]}px`,\n }}\n >\n {/* Search Bar */}\n <div\n style={{\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n }}\n >\n <Search\n size={14}\n style={{\n position: 'absolute',\n left: `${theme.space[3]}px`,\n color: theme.colors.textSecondary,\n pointerEvents: 'none',\n }}\n />\n <input\n type=\"text\"\n placeholder=\"Search dependencies...\"\n value={searchQuery}\n onChange={(e) => onSearchChange(e.target.value)}\n style={{\n width: '100%',\n padding: `${theme.space[2]}px ${theme.space[5]}px`,\n borderRadius: `${theme.radii[2]}px`,\n border: `1px solid ${theme.colors.border}`,\n backgroundColor: theme.colors.backgroundSecondary,\n color: theme.colors.text,\n fontSize: `${theme.fontSizes[1]}px`,\n fontFamily: theme.fonts.body,\n outline: 'none',\n transition: 'all 0.2s',\n }}\n />\n {searchQuery && (\n <button\n onClick={() => onSearchChange('')}\n style={{\n position: 'absolute',\n right: `${theme.space[2]}px`,\n padding: `${theme.space[1]}px`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: 'transparent',\n border: 'none',\n cursor: 'pointer',\n borderRadius: `${theme.radii[1]}px`,\n }}\n title=\"Clear search\"\n >\n <X size={14} color={theme.colors.textSecondary} />\n </button>\n )}\n </div>\n\n {/* Type Filter Toggles */}\n {showFilters && (\n <div style={{ display: 'flex', gap: `${theme.space[1]}px`, width: '100%' }}>\n {availableFilters.map((type) => {\n const isActive = activeFilters.has(type);\n return (\n <button\n key={type}\n onClick={() => onToggleFilter(type)}\n style={{\n flex: 1,\n padding: `${theme.space[1]}px ${theme.space[2]}px`,\n fontSize: `${theme.fontSizes[0]}px`,\n fontWeight: theme.fontWeights.medium,\n fontFamily: theme.fonts.body,\n borderRadius: `${theme.radii[1]}px`,\n border: `1px solid ${isActive ? theme.colors.primary : theme.colors.border}`,\n backgroundColor: isActive\n ? `${theme.colors.primary}20`\n : theme.colors.backgroundSecondary,\n color: isActive ? theme.colors.primary : theme.colors.text,\n cursor: 'pointer',\n transition: 'all 0.2s',\n }}\n >\n {type === 'production'\n ? 'Prod'\n : type === 'development'\n ? 'Dev'\n : 'Peer'}\n <span\n style={{ marginLeft: `${theme.space[1]}px`, opacity: 0.7 }}\n >\n ({counts[type]})\n </span>\n </button>\n );\n })}\n </div>\n )}\n </div>\n );\n};\n","import React, { useState, useMemo } from 'react';\nimport { Package, HelpCircle, Boxes } from 'lucide-react';\nimport { ThemeProvider, useTheme } from '@principal-ade/industry-theme';\nimport type { PanelComponentProps } from '../types';\nimport type {\n PackageLayer,\n DependencyItem,\n PackagesSliceData,\n} from '../types/dependencies';\nimport { DependencyInfoModal, DependencyRow, FilterBar } from './components';\n\n/**\n * Sort order for dependency types: peer, production, development\n */\nconst dependencyTypeOrder: Record<DependencyItem['dependencyType'], number> = {\n peer: 0,\n production: 1,\n development: 2,\n};\n\n/**\n * Extract dependencies from a PackageLayer into DependencyItems\n */\nfunction extractDependencies(packageLayer: PackageLayer): DependencyItem[] {\n const { dependencies, devDependencies, peerDependencies } =\n packageLayer.packageData;\n\n const items: DependencyItem[] = [];\n\n if (dependencies) {\n Object.entries(dependencies).forEach(([name, version]) => {\n items.push({ name, version, dependencyType: 'production' });\n });\n }\n\n if (devDependencies) {\n Object.entries(devDependencies).forEach(([name, version]) => {\n items.push({ name, version, dependencyType: 'development' });\n });\n }\n\n if (peerDependencies) {\n Object.entries(peerDependencies).forEach(([name, version]) => {\n items.push({ name, version, dependencyType: 'peer' });\n });\n }\n\n // Sort by type (peer, prod, dev) then by name\n return items.sort((a, b) => {\n const typeCompare = dependencyTypeOrder[a.dependencyType] - dependencyTypeOrder[b.dependencyType];\n if (typeCompare !== 0) return typeCompare;\n return a.name.localeCompare(b.name);\n });\n}\n\n/**\n * DependenciesPanelContent - Internal component that uses theme\n */\nconst DependenciesPanelContent: React.FC<PanelComponentProps> = ({\n context,\n}) => {\n const { theme } = useTheme();\n\n // State\n const [selectedPackagePath, setSelectedPackagePath] = useState<string | null>(\n null\n );\n const [activeFilters, setActiveFilters] = useState<Set<'production' | 'development' | 'peer'>>(new Set());\n const [searchQuery, setSearchQuery] = useState('');\n const [showInfoModal, setShowInfoModal] = useState(false);\n\n // Get packages slice data\n const packagesSlice = context.getSlice<PackagesSliceData>('packages');\n const isLoading = context.isSliceLoading('packages');\n const hasPackages = context.hasSlice('packages');\n\n const packages = useMemo(() => {\n return packagesSlice?.data?.packages ?? [];\n }, [packagesSlice?.data?.packages]);\n\n // Auto-select: single package, or root package in monorepo\n const effectiveSelectedPath = useMemo(() => {\n if (selectedPackagePath !== null) return selectedPackagePath;\n if (packages.length === 1) return packages[0].packageData.path;\n // For monorepos, auto-select root package (path: '')\n const rootPackage = packages.find((p) => p.packageData.path === '');\n if (rootPackage) return '';\n return null;\n }, [selectedPackagePath, packages]);\n\n // Get selected package\n const selectedPackage = useMemo(() => {\n if (effectiveSelectedPath === null) return null;\n return packages.find((p) => p.packageData.path === effectiveSelectedPath);\n }, [effectiveSelectedPath, packages]);\n\n // Extract dependencies from selected package\n const dependencyItems = useMemo(() => {\n if (!selectedPackage) return [];\n return extractDependencies(selectedPackage);\n }, [selectedPackage]);\n\n // Calculate counts\n const counts = useMemo(() => {\n return {\n all: dependencyItems.length,\n production: dependencyItems.filter((d) => d.dependencyType === 'production')\n .length,\n development: dependencyItems.filter(\n (d) => d.dependencyType === 'development'\n ).length,\n peer: dependencyItems.filter((d) => d.dependencyType === 'peer').length,\n };\n }, [dependencyItems]);\n\n // Handle filter toggle\n const handleToggleFilter = (type: 'production' | 'development' | 'peer') => {\n setActiveFilters((prev) => {\n const next = new Set(prev);\n if (next.has(type)) {\n next.delete(type);\n } else {\n next.add(type);\n }\n return next;\n });\n };\n\n // Filter dependencies\n const filteredDependencies = useMemo(() => {\n let filtered = [...dependencyItems];\n\n // Apply search\n if (searchQuery.trim()) {\n const query = searchQuery.toLowerCase();\n filtered = filtered.filter((dep) =>\n dep.name.toLowerCase().includes(query)\n );\n }\n\n // Apply type filter: empty set or all types selected = show all\n const allTypes: Array<'production' | 'development' | 'peer'> = ['production', 'development', 'peer'];\n const availableTypes = allTypes.filter((t) => counts[t] > 0);\n const isAllSelected = activeFilters.size === 0 || availableTypes.every((t) => activeFilters.has(t));\n\n if (!isAllSelected && activeFilters.size > 0) {\n filtered = filtered.filter((dep) => activeFilters.has(dep.dependencyType));\n }\n\n return filtered;\n }, [dependencyItems, searchQuery, activeFilters, counts]);\n\n // Loading state\n if (isLoading) {\n return (\n <div\n style={{\n padding: `${theme.space[3]}px`,\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: theme.colors.textSecondary,\n backgroundColor: theme.colors.background,\n fontFamily: theme.fonts.body,\n }}\n >\n Loading packages...\n </div>\n );\n }\n\n // No packages available\n if (!hasPackages || packages.length === 0) {\n return (\n <div\n style={{\n padding: `${theme.space[3]}px`,\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n gap: `${theme.space[2]}px`,\n color: theme.colors.textSecondary,\n backgroundColor: theme.colors.background,\n fontFamily: theme.fonts.body,\n }}\n >\n <Package size={32} />\n <p style={{ margin: 0 }}>No package data available</p>\n </div>\n );\n }\n\n return (\n <div\n style={{\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n backgroundColor: theme.colors.background,\n color: theme.colors.text,\n fontFamily: theme.fonts.body,\n overflow: 'hidden',\n }}\n >\n {/* Fixed Header Section */}\n <div\n style={{\n flexShrink: 0,\n padding: `${theme.space[3]}px`,\n paddingBottom: `${theme.space[2]}px`,\n display: 'flex',\n flexDirection: 'column',\n gap: `${theme.space[2]}px`,\n borderBottom: `1px solid ${theme.colors.border}`,\n }}\n >\n {/* Title Row */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n }}\n >\n <h3\n style={{\n fontSize: `${theme.fontSizes[2]}px`,\n fontWeight: theme.fontWeights.semibold,\n color: theme.colors.text,\n display: 'flex',\n alignItems: 'center',\n gap: `${theme.space[2]}px`,\n margin: 0,\n }}\n >\n {packages.length > 1 ? (\n <>\n <Boxes size={16} />\n Monorepo Dependencies\n <span\n style={{\n fontSize: `${theme.fontSizes[0]}px`,\n fontWeight: theme.fontWeights.body,\n color: theme.colors.textSecondary,\n }}\n >\n ({packages.length})\n </span>\n </>\n ) : (\n <>\n <Package size={16} />\n Dependencies\n </>\n )}\n </h3>\n <button\n onClick={() => setShowInfoModal(true)}\n style={{\n padding: `${theme.space[1]}px ${theme.space[2]}px`,\n fontSize: `${theme.fontSizes[0]}px`,\n fontWeight: theme.fontWeights.medium,\n fontFamily: theme.fonts.body,\n borderRadius: `${theme.radii[1]}px`,\n border: `1px solid ${theme.colors.border}`,\n backgroundColor: theme.colors.backgroundSecondary,\n color: theme.colors.primary,\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n gap: `${theme.space[1]}px`,\n transition: 'all 0.2s',\n }}\n >\n <HelpCircle size={12} />\n Learn More\n </button>\n </div>\n\n {/* Package Selection (only if multiple packages) */}\n {packages.length > 1 && (\n <select\n value={effectiveSelectedPath ?? '__none__'}\n onChange={(e) => setSelectedPackagePath(e.target.value === '__none__' ? null : e.target.value)}\n style={{\n width: '100%',\n padding: `${theme.space[2]}px`,\n borderRadius: `${theme.radii[1]}px`,\n border: `1px solid ${theme.colors.border}`,\n backgroundColor: theme.colors.backgroundSecondary,\n color: theme.colors.text,\n fontSize: `${theme.fontSizes[1]}px`,\n fontFamily: theme.fonts.body,\n cursor: 'pointer',\n }}\n >\n {packages.map((pkg) => (\n <option key={pkg.packageData.path || '__root__'} value={pkg.packageData.path}>\n {pkg.packageData.name} ({pkg.packageData.path || 'root'})\n </option>\n ))}\n </select>\n )}\n\n {/* Package Info (single package) */}\n {packages.length === 1 && selectedPackage && (\n <div\n style={{\n fontSize: `${theme.fontSizes[0]}px`,\n color: theme.colors.textSecondary,\n }}\n >\n {selectedPackage.packageData.name} • {dependencyItems.length} dependencies\n </div>\n )}\n\n {/* Filter Bar */}\n {selectedPackage && dependencyItems.length > 0 && (\n <FilterBar\n activeFilters={activeFilters}\n onToggleFilter={handleToggleFilter}\n searchQuery={searchQuery}\n onSearchChange={setSearchQuery}\n counts={counts}\n />\n )}\n </div>\n\n {/* Scrollable Dependencies List */}\n {selectedPackage && dependencyItems.length > 0 && (\n <div\n style={{\n flex: 1,\n overflow: 'auto',\n padding: `${theme.space[2]}px ${theme.space[3]}px ${theme.space[3]}px`,\n }}\n >\n {/* Results Count */}\n <div\n style={{\n fontSize: `${theme.fontSizes[0]}px`,\n color: theme.colors.textSecondary,\n marginBottom: `${theme.space[2]}px`,\n }}\n >\n Showing {filteredDependencies.length} of {dependencyItems.length} dependencies\n </div>\n\n {/* Dependency Items */}\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: `${theme.space[1]}px`,\n }}\n >\n {filteredDependencies.length === 0 ? (\n <div\n style={{\n padding: `${theme.space[3]}px`,\n textAlign: 'center',\n color: theme.colors.textSecondary,\n fontSize: `${theme.fontSizes[1]}px`,\n }}\n >\n No dependencies match your filters\n </div>\n ) : (\n filteredDependencies.map((dep) => (\n <DependencyRow\n key={`${dep.name}-${dep.dependencyType}`}\n dependency={dep}\n />\n ))\n )}\n </div>\n </div>\n )}\n\n {/* No package selected */}\n {!selectedPackage && packages.length > 1 && (\n <div\n style={{\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: theme.colors.textSecondary,\n fontSize: `${theme.fontSizes[1]}px`,\n }}\n >\n Select a package to view its dependencies\n </div>\n )}\n\n {/* Info Modal */}\n <DependencyInfoModal\n isOpen={showInfoModal}\n onClose={() => setShowInfoModal(false)}\n />\n </div>\n );\n};\n\n/**\n * DependenciesPanel - Main panel component with ThemeProvider wrapper\n */\nexport const DependenciesPanel: React.FC<PanelComponentProps> = (props) => {\n return (\n <ThemeProvider>\n <DependenciesPanelContent {...props} />\n </ThemeProvider>\n );\n};\n","import { GitChangesPanel } from './panels/GitChangesPanel';\nimport { PackageCompositionPanel } from './panels/PackageCompositionPanel';\nimport { DependenciesPanel } from './panels/DependenciesPanel';\nimport type { PanelDefinition, PanelContextValue } from './types';\n\n/**\n * Export array of panel definitions.\n * This is the required export for panel extensions.\n */\nexport const panels: PanelDefinition[] = [\n {\n metadata: {\n id: 'industry-theme.git-changes',\n name: 'Git Changes',\n icon: 'GitBranch',\n version: '0.1.0',\n author: 'Industry Theme',\n description: 'View repository git changes with file tree visualization',\n slices: ['git', 'fileTree'],\n },\n component: GitChangesPanel,\n\n onMount: async (context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('Git Changes Panel mounted');\n\n // Refresh git status if available\n if (\n context.hasSlice('git') &&\n !context.isSliceLoading('git')\n ) {\n await context.refresh('repository', 'git');\n }\n },\n\n onUnmount: async (_context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('Git Changes Panel unmounting');\n },\n },\n {\n metadata: {\n id: 'industry-theme.package-composition',\n name: 'Package Composition',\n icon: 'Package',\n version: '0.1.0',\n author: 'Industry Theme',\n description: 'View detected packages, dependencies, configs, and available commands',\n slices: ['packages'],\n },\n component: PackageCompositionPanel,\n\n onMount: async (context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('Package Composition Panel mounted');\n\n // Refresh packages if available\n if (\n context.hasSlice('packages') &&\n !context.isSliceLoading('packages')\n ) {\n await context.refresh('repository', 'packages');\n }\n },\n\n onUnmount: async (_context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('Package Composition Panel unmounting');\n },\n },\n {\n metadata: {\n id: 'industry-theme.dependencies',\n name: 'Dependencies',\n icon: 'Package',\n version: '0.1.0',\n author: 'Industry Theme',\n description: 'View and explore package dependencies',\n slices: ['packages'],\n },\n component: DependenciesPanel,\n\n onMount: async (context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('Dependencies Panel mounted');\n\n // Refresh packages if available\n if (\n context.hasSlice('packages') &&\n !context.isSliceLoading('packages')\n ) {\n await context.refresh('repository', 'packages');\n }\n },\n\n onUnmount: async (_context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('Dependencies Panel unmounting');\n },\n },\n];\n\n/**\n * Optional: Called once when the entire package is loaded.\n */\nexport const onPackageLoad = async () => {\n // eslint-disable-next-line no-console\n console.log('Repository Composition Panels package loaded');\n};\n\n/**\n * Optional: Called once when the package is unloaded.\n */\nexport const onPackageUnload = async () => {\n // eslint-disable-next-line no-console\n console.log('Repository Composition Panels package unloading');\n};\n\n// Re-export components for direct usage (e.g., in Storybook)\nexport { GitChangesPanel, GitChangesPanelContent, GitChangesPanelPreview } from './panels/GitChangesPanel';\nexport type { GitChangesPanelProps } from './panels/GitChangesPanel';\nexport { PackageCompositionPanel, PackageCompositionPanelContent, PackageCompositionPanelPreview } from './panels/PackageCompositionPanel';\nexport type { PackageCompositionPanelProps } from './panels/PackageCompositionPanel';\nexport { DependenciesPanel } from './panels/DependenciesPanel';\n\n// Re-export types\nexport type {\n GitStatus,\n GitChangeSelectionStatus,\n GitFileStatus,\n FileTree,\n PanelComponentProps,\n PanelDefinition,\n PanelContextValue,\n PackageLayer,\n PackageCommand,\n ConfigFile,\n QualityMetrics,\n DependencyItem,\n PackageSummary,\n PackagesSliceData,\n} from './types';\n"],"names":["theme","React","size","__iconNode","require$$0","useState","useEffect","useLayoutEffect","shim","shimModule","DndContext","identifyNull","identify","safeRun","focus","DefaultCursor","_jsxs","_jsx","_Fragment","reducer","createRoot","data","actions","initialState","Overlay","PreviewNode","t","e","setPrototypeOf","isEqual","defaultItemKey","getItemOffset","getEstimatedTotalSize","getItemSize","getOffsetForIndexAndAlignment","getStartIndexForOffset","getStopIndexForStartIndex","initInstanceProps","validateProps","_","items","validateSharedProps","Cursor","__rest","HandlerRole","_typeof","obj","without","insertItem","getSourceClientOffset","verifyInvariants","ownKeys","_objectSpread","_defineProperty","_classCallCheck","_defineProperties","_createClass","DragDropManagerImpl","formatProdErrorMessage","$$observable","randomString","ActionTypes","isPlainObject","createStore","subscribe","strictEquality","reduce","dirtyHandlerIds","dragOffset","refCount","dragOperation","stateId","DragDropMonitorImpl","handleChange","_getSourceClientOffset","getDifferenceFromInitialOffset","_getDifferenceFromInitialOffset","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","_arrayLikeToArray","HandlerRegistryImpl","addSource","_addSource","addTarget","_addTarget","removeSource","_removeSource","removeTarget","_removeTarget","DndProvider","DragSourceMonitorImpl","DropTargetMonitorImpl","node","SourceConnector","get","TargetConnector","DragSourceImpl","isDragging","equal","DropTargetImpl","memoized","EnterLeaveCounter","isNodeEntered","MonotonicInterpolant","calculateYOffset","calculateXOffset","dataTransfer","NativeTypes.FILE","NativeTypes.HTML","NativeTypes.URL","NativeTypes.TEXT","NativeDragSource","OptionsReader","HTML5BackendImpl","handleDragStart","handleSelectStart","handleDragEnter","handleDragOver","handleDrop","dnd","RowContainer","utils.access","utils.identifyNull","utils.getInsertParentId","utils.getInsertIndex","selection","utils.isDescendant","visibility","utils.dfs","utils.walk","utils\n .waitFor","edit","open","drag","useSyncExternalStore","drop","useState3","React7","Edit2","Plus2","Minus2","GitBranch2","AlertCircle2","FileQuestion2","useMemo5","Tree2","X","PathsFileTreeBuilder","HelpCircle","_a"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155]}
1
+ {"version":3,"file":"panels.bundle.js","sources":["../node_modules/@principal-ade/industry-theme/dist/esm/index.js","../node_modules/lucide-react/dist/esm/shared/src/utils.js","../node_modules/lucide-react/dist/esm/defaultAttributes.js","../node_modules/lucide-react/dist/esm/Icon.js","../node_modules/lucide-react/dist/esm/createLucideIcon.js","../node_modules/lucide-react/dist/esm/icons/arrow-right.js","../node_modules/lucide-react/dist/esm/icons/box.js","../node_modules/lucide-react/dist/esm/icons/boxes.js","../node_modules/lucide-react/dist/esm/icons/check.js","../node_modules/lucide-react/dist/esm/icons/chevron-down.js","../node_modules/lucide-react/dist/esm/icons/chevron-left.js","../node_modules/lucide-react/dist/esm/icons/chevron-right.js","../node_modules/lucide-react/dist/esm/icons/circle-alert.js","../node_modules/lucide-react/dist/esm/icons/circle-question-mark.js","../node_modules/lucide-react/dist/esm/icons/copy.js","../node_modules/lucide-react/dist/esm/icons/external-link.js","../node_modules/lucide-react/dist/esm/icons/file-code.js","../node_modules/lucide-react/dist/esm/icons/file-question-mark.js","../node_modules/lucide-react/dist/esm/icons/file-text.js","../node_modules/lucide-react/dist/esm/icons/folder.js","../node_modules/lucide-react/dist/esm/icons/git-branch.js","../node_modules/lucide-react/dist/esm/icons/layers.js","../node_modules/lucide-react/dist/esm/icons/layout-grid.js","../node_modules/lucide-react/dist/esm/icons/minus.js","../node_modules/lucide-react/dist/esm/icons/package.js","../node_modules/lucide-react/dist/esm/icons/plus.js","../node_modules/lucide-react/dist/esm/icons/scale.js","../node_modules/lucide-react/dist/esm/icons/search.js","../node_modules/lucide-react/dist/esm/icons/settings.js","../node_modules/lucide-react/dist/esm/icons/square-pen.js","../node_modules/lucide-react/dist/esm/icons/terminal.js","../node_modules/lucide-react/dist/esm/icons/x.js","../node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.js","../node_modules/use-sync-external-store/shim/index.js","../node_modules/react-arborist/dist/module/context.js","../node_modules/react-arborist/dist/module/utils.js","../node_modules/react-arborist/dist/module/components/default-cursor.js","../node_modules/react-arborist/dist/module/components/default-row.js","../node_modules/react-arborist/dist/module/components/default-node.js","../node_modules/react-arborist/dist/module/state/edit-slice.js","../node_modules/react-arborist/dist/module/state/focus-slice.js","../node_modules/react-arborist/dist/module/interfaces/node-api.js","../node_modules/react-arborist/dist/module/data/create-root.js","../node_modules/react-arborist/dist/module/state/open-slice.js","../node_modules/react-arborist/dist/module/state/initial.js","../node_modules/react-arborist/dist/module/state/selection-slice.js","../node_modules/react-arborist/dist/module/state/dnd-slice.js","../node_modules/react-arborist/dist/module/components/default-drag-preview.js","../node_modules/@babel/runtime/helpers/esm/extends.js","../node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","../node_modules/memoize-one/dist/memoize-one.esm.js","../node_modules/react-window/dist/index.esm.js","../node_modules/react-arborist/dist/module/components/cursor.js","../node_modules/react-arborist/dist/module/components/list-outer-element.js","../node_modules/react-arborist/dist/module/components/list-inner-element.js","../node_modules/react-dnd/dist/esm/core/DndContext.js","../node_modules/dnd-core/dist/esm/interfaces.js","../node_modules/@react-dnd/invariant/dist/invariant.esm.js","../node_modules/dnd-core/dist/esm/actions/dragDrop/types.js","../node_modules/dnd-core/dist/esm/actions/dragDrop/local/setClientOffset.js","../node_modules/dnd-core/dist/esm/utils/js_utils.js","../node_modules/dnd-core/dist/esm/actions/dragDrop/beginDrag.js","../node_modules/dnd-core/dist/esm/actions/dragDrop/publishDragSource.js","../node_modules/dnd-core/dist/esm/utils/matchesType.js","../node_modules/dnd-core/dist/esm/actions/dragDrop/hover.js","../node_modules/dnd-core/dist/esm/actions/dragDrop/drop.js","../node_modules/dnd-core/dist/esm/actions/dragDrop/endDrag.js","../node_modules/dnd-core/dist/esm/actions/dragDrop/index.js","../node_modules/dnd-core/dist/esm/classes/DragDropManagerImpl.js","../node_modules/dnd-core/node_modules/redux/es/redux.js","../node_modules/dnd-core/dist/esm/utils/equality.js","../node_modules/dnd-core/dist/esm/reducers/dragOffset.js","../node_modules/dnd-core/dist/esm/actions/registry.js","../node_modules/dnd-core/dist/esm/reducers/dragOperation.js","../node_modules/dnd-core/dist/esm/reducers/refCount.js","../node_modules/dnd-core/dist/esm/utils/dirtiness.js","../node_modules/dnd-core/dist/esm/reducers/dirtyHandlerIds.js","../node_modules/dnd-core/dist/esm/reducers/stateId.js","../node_modules/dnd-core/dist/esm/reducers/index.js","../node_modules/dnd-core/dist/esm/utils/coords.js","../node_modules/dnd-core/dist/esm/classes/DragDropMonitorImpl.js","../node_modules/dnd-core/dist/esm/utils/getNextUniqueId.js","../node_modules/dnd-core/dist/esm/contracts.js","../node_modules/@react-dnd/asap/dist/esm/makeRequestCall.mjs","../node_modules/@react-dnd/asap/dist/esm/AsapQueue.mjs","../node_modules/@react-dnd/asap/dist/esm/RawTask.mjs","../node_modules/@react-dnd/asap/dist/esm/TaskFactory.mjs","../node_modules/@react-dnd/asap/dist/esm/asap.mjs","../node_modules/dnd-core/dist/esm/classes/HandlerRegistryImpl.js","../node_modules/dnd-core/dist/esm/createDragDropManager.js","../node_modules/react-dnd/dist/esm/core/DndProvider.js","../node_modules/react-dnd/dist/esm/internals/DragSourceMonitorImpl.js","../node_modules/react-dnd/dist/esm/internals/DropTargetMonitorImpl.js","../node_modules/react-dnd/dist/esm/internals/wrapConnectorHooks.js","../node_modules/react-dnd/dist/esm/internals/isRef.js","../node_modules/@react-dnd/shallowequal/dist/shallowequal.esm.js","../node_modules/react-dnd/dist/esm/internals/SourceConnector.js","../node_modules/react-dnd/dist/esm/internals/TargetConnector.js","../node_modules/react-dnd/dist/esm/internals/registration.js","../node_modules/react-dnd/dist/esm/hooks/useIsomorphicLayoutEffect.js","../node_modules/react-dnd/dist/esm/hooks/useDrag/DragSourceImpl.js","../node_modules/react-dnd/dist/esm/hooks/useDrag/useDragSource.js","../node_modules/react-dnd/dist/esm/hooks/useDragDropManager.js","../node_modules/react-dnd/dist/esm/hooks/useDrag/useDragType.js","../node_modules/react-dnd/dist/esm/hooks/useDrag/useRegisteredDragSource.js","../node_modules/react-dnd/dist/esm/hooks/useOptionalFactory.js","../node_modules/react-dnd/dist/esm/hooks/useDrag/useDragSourceMonitor.js","../node_modules/react-dnd/dist/esm/hooks/useDrag/useDragSourceConnector.js","../node_modules/fast-deep-equal/index.js","../node_modules/react-dnd/dist/esm/hooks/useCollector.js","../node_modules/react-dnd/dist/esm/hooks/useMonitorOutput.js","../node_modules/react-dnd/dist/esm/hooks/useCollectedProps.js","../node_modules/react-dnd/dist/esm/hooks/useDrag/connectors.js","../node_modules/react-dnd/dist/esm/hooks/useDrag/useDrag.js","../node_modules/react-dnd/dist/esm/hooks/useDrop/useAccept.js","../node_modules/react-dnd/dist/esm/hooks/useDrop/DropTargetImpl.js","../node_modules/react-dnd/dist/esm/hooks/useDrop/useDropTarget.js","../node_modules/react-dnd/dist/esm/hooks/useDrop/useRegisteredDropTarget.js","../node_modules/react-dnd/dist/esm/hooks/useDrop/useDropTargetMonitor.js","../node_modules/react-dnd/dist/esm/hooks/useDrop/useDropTargetConnector.js","../node_modules/react-dnd/dist/esm/hooks/useDrop/connectors.js","../node_modules/react-dnd/dist/esm/hooks/useDrop/useDrop.js","../node_modules/react-dnd/dist/esm/hooks/useDragLayer.js","../node_modules/react-dnd-html5-backend/dist/esm/utils/js_utils.js","../node_modules/react-dnd-html5-backend/dist/esm/EnterLeaveCounter.js","../node_modules/react-dnd-html5-backend/dist/esm/BrowserDetector.js","../node_modules/react-dnd-html5-backend/dist/esm/MonotonicInterpolant.js","../node_modules/react-dnd-html5-backend/dist/esm/OffsetUtils.js","../node_modules/react-dnd-html5-backend/dist/esm/NativeTypes.js","../node_modules/react-dnd-html5-backend/dist/esm/NativeDragSources/getDataFromDataTransfer.js","../node_modules/react-dnd-html5-backend/dist/esm/NativeDragSources/nativeTypesConfig.js","../node_modules/react-dnd-html5-backend/dist/esm/NativeDragSources/NativeDragSource.js","../node_modules/react-dnd-html5-backend/dist/esm/NativeDragSources/index.js","../node_modules/react-dnd-html5-backend/dist/esm/OptionsReader.js","../node_modules/react-dnd-html5-backend/dist/esm/HTML5BackendImpl.js","../node_modules/react-dnd-html5-backend/dist/esm/getEmptyImage.js","../node_modules/react-dnd-html5-backend/dist/esm/index.js","../node_modules/react-arborist/dist/module/dnd/drag-hook.js","../node_modules/react-arborist/dist/module/dnd/compute-drop.js","../node_modules/react-arborist/dist/module/dnd/drop-hook.js","../node_modules/react-arborist/dist/module/hooks/use-fresh-node.js","../node_modules/react-arborist/dist/module/components/row-container.js","../node_modules/react-arborist/dist/module/components/default-container.js","../node_modules/react-arborist/dist/module/data/create-list.js","../node_modules/react-arborist/dist/module/data/create-index.js","../node_modules/react-arborist/dist/module/interfaces/tree-api.js","../node_modules/redux/dist/redux.mjs","../node_modules/react-arborist/dist/module/state/drag-slice.js","../node_modules/react-arborist/dist/module/state/root-reducer.js","../node_modules/react-arborist/dist/module/components/provider.js","../node_modules/react-arborist/dist/module/dnd/outer-drop-hook.js","../node_modules/react-arborist/dist/module/components/outer-drop.js","../node_modules/react-arborist/dist/module/components/tree-container.js","../node_modules/react-arborist/dist/module/components/drag-preview-container.js","../node_modules/react-arborist/dist/module/data/simple-tree.js","../node_modules/react-arborist/dist/module/hooks/use-simple-tree.js","../node_modules/react-arborist/dist/module/hooks/use-validated-props.js","../node_modules/react-arborist/dist/module/components/tree.js","../node_modules/@principal-ade/dynamic-file-tree/dist/index.mjs","../node_modules/@principal-ai/repository-abstraction/dist/index.mjs","../src/panels/GitChangesPanel.tsx","../src/panels/components/PackageManagerIcon.tsx","../src/panels/components/DependencyInfoModal.tsx","../src/panels/components/DependencyRow.tsx","../src/panels/components/FilterBar.tsx","../src/panels/PackageCompositionPanel.tsx","../src/panels/DependenciesPanel.tsx","../src/services/LocalSearchService.ts","../src/panels/SearchPanel.tsx","../src/index.tsx"],"sourcesContent":["// src/glassmorphismTheme.ts\nvar glassmorphismTheme = {\n space: [0, 4, 8, 16, 32, 64, 128, 256, 512],\n fonts: {\n body: '\"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n heading: '\"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n monospace: '\"Fira Code\", \"SF Mono\", Monaco, Inconsolata, monospace'\n },\n fontSizes: [12, 14, 16, 18, 20, 24, 32, 48, 64, 96],\n fontScale: 1,\n fontWeights: {\n body: 400,\n heading: 600,\n bold: 700,\n light: 300,\n medium: 500,\n semibold: 600\n },\n lineHeights: {\n body: 1.6,\n heading: 1.3,\n tight: 1.4,\n relaxed: 1.8\n },\n breakpoints: [\"640px\", \"768px\", \"1024px\", \"1280px\"],\n sizes: [16, 32, 64, 128, 256, 512, 768, 1024, 1536],\n radii: [0, 8, 12, 16, 20, 24, 32, 40],\n shadows: [\n \"none\",\n \"0 8px 32px 0 rgba(31, 38, 135, 0.15)\",\n \"0 12px 40px 0 rgba(31, 38, 135, 0.2)\",\n \"0 16px 48px 0 rgba(31, 38, 135, 0.25)\",\n \"0 20px 56px 0 rgba(31, 38, 135, 0.3)\",\n \"0 24px 64px 0 rgba(31, 38, 135, 0.35)\"\n ],\n zIndices: [0, 1, 10, 20, 30, 40, 50],\n colors: {\n text: \"rgba(255, 255, 255, 0.95)\",\n background: \"rgba(255, 255, 255, 0.1)\",\n primary: \"rgba(99, 102, 241, 0.9)\",\n secondary: \"rgba(139, 92, 246, 0.9)\",\n accent: \"rgba(236, 72, 153, 0.9)\",\n highlight: \"rgba(99, 102, 241, 0.2)\",\n muted: \"rgba(255, 255, 255, 0.05)\",\n success: \"rgba(34, 197, 94, 0.9)\",\n warning: \"rgba(251, 146, 60, 0.9)\",\n error: \"rgba(239, 68, 68, 0.9)\",\n info: \"rgba(59, 130, 246, 0.9)\",\n border: \"rgba(255, 255, 255, 0.18)\",\n backgroundSecondary: \"rgba(255, 255, 255, 0.15)\",\n backgroundTertiary: \"rgba(255, 255, 255, 0.2)\",\n backgroundLight: \"rgba(255, 255, 255, 0.08)\",\n backgroundHover: \"rgba(255, 255, 255, 0.25)\",\n surface: \"rgba(255, 255, 255, 0.12)\",\n textSecondary: \"rgba(255, 255, 255, 0.8)\",\n textTertiary: \"rgba(255, 255, 255, 0.6)\",\n textMuted: \"rgba(255, 255, 255, 0.5)\",\n highlightBg: \"rgba(251, 191, 36, 0.3)\",\n highlightBorder: \"rgba(251, 191, 36, 0.5)\"\n },\n modes: {\n dark: {\n text: \"rgba(255, 255, 255, 0.95)\",\n background: \"rgba(0, 0, 0, 0.3)\",\n primary: \"rgba(129, 140, 248, 0.9)\",\n secondary: \"rgba(167, 139, 250, 0.9)\",\n accent: \"rgba(244, 114, 182, 0.9)\",\n highlight: \"rgba(129, 140, 248, 0.25)\",\n muted: \"rgba(0, 0, 0, 0.15)\",\n success: \"rgba(74, 222, 128, 0.9)\",\n warning: \"rgba(251, 191, 36, 0.9)\",\n error: \"rgba(248, 113, 113, 0.9)\",\n info: \"rgba(96, 165, 250, 0.9)\",\n border: \"rgba(255, 255, 255, 0.15)\",\n backgroundSecondary: \"rgba(0, 0, 0, 0.4)\",\n backgroundTertiary: \"rgba(0, 0, 0, 0.5)\",\n backgroundLight: \"rgba(0, 0, 0, 0.2)\",\n backgroundHover: \"rgba(255, 255, 255, 0.1)\",\n surface: \"rgba(0, 0, 0, 0.35)\",\n textSecondary: \"rgba(255, 255, 255, 0.8)\",\n textTertiary: \"rgba(255, 255, 255, 0.6)\",\n textMuted: \"rgba(255, 255, 255, 0.4)\",\n highlightBg: \"rgba(251, 191, 36, 0.35)\",\n highlightBorder: \"rgba(251, 191, 36, 0.6)\"\n },\n frosted: {\n text: \"rgba(31, 41, 55, 0.95)\",\n background: \"rgba(255, 255, 255, 0.3)\",\n primary: \"rgba(79, 70, 229, 0.95)\",\n secondary: \"rgba(124, 58, 237, 0.95)\",\n accent: \"rgba(219, 39, 119, 0.95)\",\n highlight: \"rgba(79, 70, 229, 0.15)\",\n muted: \"rgba(255, 255, 255, 0.4)\",\n success: \"rgba(16, 185, 129, 0.95)\",\n warning: \"rgba(245, 158, 11, 0.95)\",\n error: \"rgba(220, 38, 38, 0.95)\",\n info: \"rgba(37, 99, 235, 0.95)\",\n border: \"rgba(255, 255, 255, 0.5)\",\n backgroundSecondary: \"rgba(255, 255, 255, 0.4)\",\n backgroundTertiary: \"rgba(255, 255, 255, 0.5)\",\n backgroundLight: \"rgba(255, 255, 255, 0.25)\",\n backgroundHover: \"rgba(255, 255, 255, 0.6)\",\n surface: \"rgba(255, 255, 255, 0.35)\",\n textSecondary: \"rgba(31, 41, 55, 0.8)\",\n textTertiary: \"rgba(31, 41, 55, 0.6)\",\n textMuted: \"rgba(31, 41, 55, 0.5)\",\n highlightBg: \"rgba(251, 191, 36, 0.4)\",\n highlightBorder: \"rgba(251, 191, 36, 0.7)\"\n }\n },\n buttons: {\n primary: {\n color: \"white\",\n bg: \"primary\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"rgba(255, 255, 255, 0.2)\",\n \"&:hover\": {\n bg: \"secondary\"\n }\n },\n secondary: {\n color: \"text\",\n bg: \"rgba(255, 255, 255, 0.1)\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"rgba(255, 255, 255, 0.2)\",\n \"&:hover\": {\n bg: \"rgba(255, 255, 255, 0.2)\"\n }\n },\n ghost: {\n color: \"text\",\n bg: \"transparent\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"transparent\",\n \"&:hover\": {\n borderColor: \"rgba(255, 255, 255, 0.2)\",\n bg: \"rgba(255, 255, 255, 0.05)\"\n }\n }\n },\n text: {\n heading: {\n fontFamily: \"heading\",\n fontWeight: \"heading\",\n lineHeight: \"heading\"\n },\n body: {\n fontFamily: \"body\",\n fontWeight: \"body\",\n lineHeight: \"body\"\n },\n caption: {\n fontSize: 1,\n color: \"textSecondary\"\n }\n },\n cards: {\n primary: {\n bg: \"surface\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 3\n },\n secondary: {\n bg: \"backgroundSecondary\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 3\n }\n }\n};\n// src/defaultThemes.ts\nvar defaultMarkdownTheme = {\n space: [0, 4, 8, 16, 32, 64, 128, 256, 512],\n fonts: {\n body: '\"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n heading: '\"Crimson Text\", \"Georgia\", \"Times New Roman\", serif',\n monospace: '\"Fira Code\", \"SF Mono\", Monaco, Inconsolata, monospace'\n },\n fontSizes: [12, 14, 16, 18, 20, 24, 32, 48, 64, 96],\n fontScale: 1,\n fontWeights: {\n body: 400,\n heading: 600,\n bold: 700,\n light: 300,\n medium: 500,\n semibold: 600\n },\n lineHeights: {\n body: 1.6,\n heading: 1.3,\n tight: 1.25,\n relaxed: 1.75\n },\n breakpoints: [\"640px\", \"768px\", \"1024px\", \"1280px\"],\n sizes: [16, 32, 64, 128, 256, 512, 768, 1024, 1536],\n radii: [0, 2, 4, 6, 8, 12, 16, 24],\n shadows: [\n \"none\",\n \"0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06)\",\n \"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)\",\n \"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)\",\n \"0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)\",\n \"0 25px 50px -12px rgba(0, 0, 0, 0.25)\"\n ],\n zIndices: [0, 1, 10, 20, 30, 40, 50],\n colors: {\n text: \"#1a1a1a\",\n background: \"#ffffff\",\n primary: \"#007acc\",\n secondary: \"#005a9e\",\n accent: \"#1a1a1a\",\n highlight: \"rgba(0, 122, 204, 0.1)\",\n muted: \"#f0f0f0\",\n success: \"#28a745\",\n warning: \"#ffc107\",\n error: \"#dc3545\",\n info: \"#17a2b8\",\n border: \"rgba(0, 0, 0, 0.1)\",\n backgroundSecondary: \"#f8f9fa\",\n backgroundTertiary: \"#e9ecef\",\n backgroundLight: \"rgba(0, 0, 0, 0.03)\",\n backgroundHover: \"rgba(0, 0, 0, 0.05)\",\n surface: \"#ffffff\",\n textSecondary: \"#555555\",\n textTertiary: \"#888888\",\n textMuted: \"#aaaaaa\",\n highlightBg: \"rgba(255, 235, 59, 0.3)\",\n highlightBorder: \"rgba(255, 235, 59, 0.6)\"\n },\n buttons: {\n primary: {\n color: \"white\",\n bg: \"primary\",\n \"&:hover\": { bg: \"secondary\" }\n },\n secondary: {\n color: \"primary\",\n bg: \"transparent\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"primary\",\n \"&:hover\": { bg: \"highlight\" }\n },\n ghost: {\n color: \"text\",\n bg: \"transparent\",\n \"&:hover\": { bg: \"backgroundHover\" }\n }\n },\n text: {\n heading: {\n fontFamily: \"heading\",\n fontWeight: \"heading\",\n lineHeight: \"heading\"\n },\n body: {\n fontFamily: \"body\",\n fontWeight: \"body\",\n lineHeight: \"body\"\n },\n caption: {\n fontSize: 1,\n color: \"textSecondary\"\n }\n },\n cards: {\n primary: {\n bg: \"surface\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 2\n },\n secondary: {\n bg: \"backgroundSecondary\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 2\n }\n }\n};\nvar defaultTerminalTheme = {\n space: [0, 4, 8, 16, 32, 64, 128, 256, 512],\n fonts: {\n body: '\"Courier New\", Courier, monospace',\n heading: '\"Courier New\", Courier, monospace',\n monospace: '\"Courier New\", Courier, monospace'\n },\n fontSizes: [12, 14, 16, 18, 20, 24, 32, 48, 64, 96],\n fontScale: 1,\n fontWeights: {\n body: 400,\n heading: 500,\n bold: 600,\n light: 300,\n medium: 500,\n semibold: 600\n },\n lineHeights: {\n body: 1.4,\n heading: 1.2,\n tight: 1.3,\n relaxed: 1.6\n },\n breakpoints: [\"640px\", \"768px\", \"1024px\", \"1280px\"],\n sizes: [16, 32, 64, 128, 256, 512, 768, 1024, 1536],\n radii: [0, 2, 4, 6, 8, 12, 16, 24],\n shadows: [\n \"none\",\n \"0 0 5px rgba(255, 193, 7, 0.1)\",\n \"0 0 10px rgba(255, 193, 7, 0.15)\",\n \"0 0 15px rgba(255, 193, 7, 0.2)\",\n \"0 0 20px rgba(255, 193, 7, 0.25)\",\n \"0 0 30px rgba(255, 193, 7, 0.3)\"\n ],\n zIndices: [0, 1, 10, 20, 30, 40, 50],\n colors: {\n text: \"#ffc107\",\n background: \"#000000\",\n primary: \"#ffc107\",\n secondary: \"#ffb300\",\n accent: \"#ffffff\",\n highlight: \"rgba(255, 193, 7, 0.1)\",\n muted: \"#1a1a1a\",\n success: \"#4caf50\",\n warning: \"#ff9800\",\n error: \"#f44336\",\n info: \"#2196f3\",\n border: \"rgba(255, 193, 7, 0.2)\",\n backgroundSecondary: \"#0a0a0a\",\n backgroundTertiary: \"#111111\",\n backgroundLight: \"rgba(255, 193, 7, 0.03)\",\n backgroundHover: \"rgba(255, 193, 7, 0.05)\",\n surface: \"#050505\",\n textSecondary: \"#e0e0e0\",\n textTertiary: \"#b0b0b0\",\n textMuted: \"#808080\",\n highlightBg: \"rgba(255, 193, 7, 0.2)\",\n highlightBorder: \"rgba(255, 193, 7, 0.4)\"\n },\n buttons: {\n primary: {\n color: \"black\",\n bg: \"primary\",\n borderWidth: 0,\n \"&:hover\": { bg: \"secondary\" }\n },\n secondary: {\n color: \"primary\",\n bg: \"transparent\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"primary\",\n \"&:hover\": { bg: \"highlight\" }\n },\n ghost: {\n color: \"text\",\n bg: \"transparent\",\n \"&:hover\": { bg: \"backgroundHover\" }\n }\n },\n text: {\n heading: {\n fontFamily: \"heading\",\n fontWeight: \"heading\",\n lineHeight: \"heading\"\n },\n body: {\n fontFamily: \"body\",\n fontWeight: \"body\",\n lineHeight: \"body\"\n },\n caption: {\n fontSize: 1,\n color: \"textSecondary\"\n }\n },\n cards: {\n primary: {\n bg: \"surface\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 0\n },\n secondary: {\n bg: \"backgroundSecondary\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 0\n }\n }\n};\nvar defaultEditorTheme = {\n space: [0, 4, 8, 16, 32, 64, 128, 256, 512],\n fonts: {\n body: '\"Fira Code\", \"SF Mono\", Monaco, Inconsolata, monospace',\n heading: '\"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n monospace: '\"Fira Code\", \"SF Mono\", Monaco, Inconsolata, monospace'\n },\n fontSizes: [12, 14, 16, 18, 20, 24, 32, 48, 64, 96],\n fontScale: 1,\n fontWeights: {\n body: 400,\n heading: 600,\n bold: 700,\n light: 300,\n medium: 500,\n semibold: 600\n },\n lineHeights: {\n body: 1.5,\n heading: 1.2,\n tight: 1.3,\n relaxed: 1.7\n },\n breakpoints: [\"640px\", \"768px\", \"1024px\", \"1280px\"],\n sizes: [16, 32, 64, 128, 256, 512, 768, 1024, 1536],\n radii: [0, 2, 4, 6, 8, 12, 16, 24],\n shadows: [\n \"none\",\n \"0 1px 2px rgba(0, 0, 0, 0.05)\",\n \"0 2px 4px rgba(0, 0, 0, 0.1)\",\n \"0 4px 8px rgba(0, 0, 0, 0.15)\",\n \"0 8px 16px rgba(0, 0, 0, 0.2)\",\n \"0 12px 24px rgba(0, 0, 0, 0.25)\"\n ],\n zIndices: [0, 1, 10, 20, 30, 40, 50],\n colors: {\n text: \"#d4d4d4\",\n background: \"#1e1e1e\",\n primary: \"#569cd6\",\n secondary: \"#408ac9\",\n accent: \"#c586c0\",\n highlight: \"rgba(86, 156, 214, 0.1)\",\n muted: \"#2a2a2a\",\n success: \"#6a9955\",\n warning: \"#d18616\",\n error: \"#f44747\",\n info: \"#569cd6\",\n border: \"rgba(255, 255, 255, 0.1)\",\n backgroundSecondary: \"#252526\",\n backgroundTertiary: \"#333333\",\n backgroundLight: \"rgba(255, 255, 255, 0.03)\",\n backgroundHover: \"rgba(255, 255, 255, 0.05)\",\n surface: \"#252526\",\n textSecondary: \"#cccccc\",\n textTertiary: \"#999999\",\n textMuted: \"#666666\",\n highlightBg: \"rgba(255, 235, 59, 0.2)\",\n highlightBorder: \"rgba(255, 235, 59, 0.4)\"\n },\n buttons: {\n primary: {\n color: \"white\",\n bg: \"primary\",\n \"&:hover\": { bg: \"secondary\" }\n },\n secondary: {\n color: \"primary\",\n bg: \"transparent\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"primary\",\n \"&:hover\": { bg: \"highlight\" }\n },\n ghost: {\n color: \"text\",\n bg: \"transparent\",\n \"&:hover\": { bg: \"backgroundHover\" }\n }\n },\n text: {\n heading: {\n fontFamily: \"heading\",\n fontWeight: \"heading\",\n lineHeight: \"heading\"\n },\n body: {\n fontFamily: \"body\",\n fontWeight: \"body\",\n lineHeight: \"body\"\n },\n caption: {\n fontSize: 1,\n color: \"textSecondary\"\n }\n },\n cards: {\n primary: {\n bg: \"surface\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 1\n },\n secondary: {\n bg: \"backgroundSecondary\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 1\n }\n }\n};\n// src/landingPageTheme.ts\nvar landingPageTheme = {\n space: [0, 4, 8, 12, 16, 20, 24, 32, 40, 48, 64, 80, 100, 128],\n fonts: {\n body: 'Inter, \"Geist Sans\", system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\n heading: '-apple-system, BlinkMacSystemFont, \"SF Pro Display\", \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\n monospace: '\"SF Mono\", Monaco, Inconsolata, \"Fira Code\", monospace'\n },\n fontSizes: [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 24, 28, 32, 36, 48, 56, 68, 84, 96],\n fontScale: 1,\n fontWeights: {\n body: 400,\n heading: 600,\n bold: 700,\n light: 300,\n medium: 500,\n semibold: 600\n },\n lineHeights: {\n body: 1.6,\n heading: 1.2,\n tight: 1.05,\n relaxed: 1.7\n },\n breakpoints: [\"640px\", \"768px\", \"1024px\", \"1280px\", \"1400px\"],\n sizes: [16, 32, 64, 128, 200, 240, 256, 300, 512, 740, 768, 820, 900, 1024, 1200, 1400, 1536],\n radii: [0, 2, 4, 6, 7, 8, 9, 10, 12, 14, 16, 24],\n shadows: [\n \"none\",\n \"0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06)\",\n \"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)\",\n \"0 4px 12px rgba(0, 194, 255, 0.4)\",\n \"0 6px 24px rgba(0, 194, 255, 0.1)\",\n \"0 8px 32px rgba(0, 0, 0, 0.4)\"\n ],\n zIndices: [0, 1, 10, 20, 30, 40, 50, 1000],\n colors: {\n text: \"#ffffff\",\n background: \"#000000\",\n primary: \"#00C2FF\",\n secondary: \"#0098CC\",\n accent: \"#0066FF\",\n highlight: \"rgba(0, 194, 255, 0.15)\",\n muted: \"#1a1a1a\",\n success: \"#4caf50\",\n warning: \"#ff9800\",\n error: \"#f44336\",\n info: \"#2196f3\",\n border: \"rgba(0, 194, 255, 0.2)\",\n backgroundSecondary: \"#0a1628\",\n backgroundTertiary: \"#0f1c2e\",\n backgroundLight: \"rgba(0, 194, 255, 0.04)\",\n backgroundHover: \"rgba(0, 194, 255, 0.1)\",\n surface: \"rgba(0, 0, 0, 0.4)\",\n textSecondary: \"#d1d5db\",\n textTertiary: \"#9ca3af\",\n textMuted: \"#6b7280\",\n highlightBg: \"rgba(255, 235, 59, 0.25)\",\n highlightBorder: \"rgba(255, 235, 59, 0.5)\"\n },\n buttons: {\n primary: {\n color: \"#000000\",\n bg: \"#00C2FF\",\n borderWidth: 0,\n padding: \"8px 20px\",\n fontSize: 14,\n fontWeight: 600,\n cursor: \"pointer\",\n \"&:hover\": {\n bg: \"#00D9FF\"\n }\n },\n secondary: {\n color: \"#00C2FF\",\n bg: \"transparent\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"rgba(0, 194, 255, 0.3)\",\n padding: \"8px 16px\",\n fontSize: 14,\n fontWeight: 600,\n cursor: \"pointer\",\n \"&:hover\": {\n bg: \"rgba(0, 194, 255, 0.1)\",\n borderColor: \"#00C2FF\"\n }\n },\n ghost: {\n color: \"#00C2FF\",\n bg: \"transparent\",\n borderWidth: 0,\n padding: \"8px 16px\",\n fontSize: 14,\n fontWeight: 500,\n cursor: \"pointer\",\n \"&:hover\": {\n color: \"#00D9FF\",\n bg: \"rgba(0, 194, 255, 0.1)\"\n }\n }\n },\n text: {\n heading: {\n fontFamily: \"heading\",\n fontWeight: \"heading\",\n lineHeight: \"heading\",\n color: \"#ffffff\"\n },\n body: {\n fontFamily: \"body\",\n fontWeight: \"body\",\n lineHeight: \"body\",\n color: \"text\"\n },\n caption: {\n fontSize: 1,\n color: \"textSecondary\"\n }\n },\n cards: {\n primary: {\n bg: \"surface\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 4\n },\n secondary: {\n bg: \"rgba(0, 194, 255, 0.05)\",\n border: \"1px solid\",\n borderColor: \"rgba(0, 194, 255, 0.2)\",\n borderRadius: 4\n }\n }\n};\nvar landingPageLightTheme = {\n ...landingPageTheme,\n colors: {\n text: \"#1a1a1a\",\n background: \"#ffffff\",\n primary: \"#0098CC\",\n secondary: \"#00C2FF\",\n accent: \"#0066FF\",\n highlight: \"rgba(0, 152, 204, 0.1)\",\n muted: \"#f0f0f0\",\n success: \"#4caf50\",\n warning: \"#ff9800\",\n error: \"#f44336\",\n info: \"#2196f3\",\n border: \"rgba(0, 152, 204, 0.2)\",\n backgroundSecondary: \"#f8f9fa\",\n backgroundTertiary: \"#e9ecef\",\n backgroundLight: \"rgba(0, 152, 204, 0.03)\",\n backgroundHover: \"rgba(0, 152, 204, 0.05)\",\n surface: \"rgba(255, 255, 255, 0.95)\",\n textSecondary: \"#555555\",\n textTertiary: \"#888888\",\n textMuted: \"#aaaaaa\",\n highlightBg: \"rgba(255, 235, 59, 0.3)\",\n highlightBorder: \"rgba(255, 235, 59, 0.6)\"\n },\n buttons: {\n primary: {\n color: \"#ffffff\",\n bg: \"#0098CC\",\n borderWidth: 0,\n padding: \"8px 20px\",\n fontSize: 14,\n fontWeight: 600,\n cursor: \"pointer\",\n \"&:hover\": {\n bg: \"#007aa8\"\n }\n },\n secondary: {\n color: \"#0098CC\",\n bg: \"transparent\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"rgba(0, 152, 204, 0.3)\",\n padding: \"8px 16px\",\n fontSize: 14,\n fontWeight: 600,\n cursor: \"pointer\",\n \"&:hover\": {\n bg: \"rgba(0, 152, 204, 0.05)\",\n borderColor: \"#0098CC\"\n }\n },\n ghost: {\n color: \"#0098CC\",\n bg: \"transparent\",\n borderWidth: 0,\n padding: \"8px 16px\",\n fontSize: 14,\n fontWeight: 500,\n cursor: \"pointer\",\n \"&:hover\": {\n color: \"#007aa8\",\n bg: \"rgba(0, 152, 204, 0.05)\"\n }\n }\n }\n};\n\n// src/themes.ts\nvar regalTheme = {\n space: [0, 4, 8, 16, 32, 64, 128, 256, 512],\n fonts: {\n body: '\"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n heading: '\"Crimson Text\", \"Georgia\", \"Times New Roman\", serif',\n monospace: '\"Fira Code\", \"SF Mono\", Monaco, Inconsolata, monospace'\n },\n fontSizes: [12, 14, 16, 18, 20, 24, 32, 48, 64, 96],\n fontScale: 1,\n fontWeights: {\n body: 400,\n heading: 600,\n bold: 700,\n light: 300,\n medium: 500,\n semibold: 600\n },\n lineHeights: {\n body: 1.5,\n heading: 1.2,\n tight: 1.25,\n relaxed: 1.75\n },\n breakpoints: [\"640px\", \"768px\", \"1024px\", \"1280px\"],\n sizes: [16, 32, 64, 128, 256, 512, 768, 1024, 1536],\n radii: [0, 2, 4, 6, 8, 12, 16, 24],\n shadows: [\n \"none\",\n \"0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06)\",\n \"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)\",\n \"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)\",\n \"0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)\",\n \"0 25px 50px -12px rgba(0, 0, 0, 0.25)\"\n ],\n zIndices: [0, 1, 10, 20, 30, 40, 50],\n colors: {\n text: \"#f1e8dc\",\n background: \"#1a1f2e\",\n primary: \"#d4a574\",\n secondary: \"#e0b584\",\n accent: \"#c9b8a3\",\n highlight: \"rgba(212, 165, 116, 0.15)\",\n muted: \"#8b7968\",\n success: \"#5c8a72\",\n warning: \"#d4a574\",\n error: \"#a85751\",\n info: \"#d4a574\",\n border: \"rgba(212, 165, 116, 0.2)\",\n backgroundSecondary: \"#212738\",\n backgroundTertiary: \"#2d3446\",\n backgroundLight: \"rgba(212, 165, 116, 0.08)\",\n backgroundHover: \"rgba(212, 165, 116, 0.15)\",\n surface: \"#212738\",\n textSecondary: \"#c9b8a3\",\n textTertiary: \"#8b7968\",\n textMuted: \"#8b7968\",\n highlightBg: \"rgba(255, 193, 7, 0.25)\",\n highlightBorder: \"rgba(255, 193, 7, 0.5)\"\n },\n buttons: {\n primary: {\n color: \"background\",\n bg: \"primary\",\n \"&:hover\": {\n bg: \"secondary\"\n }\n },\n secondary: {\n color: \"text\",\n bg: \"muted\",\n \"&:hover\": {\n bg: \"backgroundSecondary\"\n }\n },\n ghost: {\n color: \"primary\",\n bg: \"transparent\",\n \"&:hover\": {\n bg: \"muted\"\n }\n }\n },\n text: {\n heading: {\n fontFamily: \"heading\",\n fontWeight: \"heading\",\n lineHeight: \"heading\"\n },\n body: {\n fontFamily: \"body\",\n fontWeight: \"body\",\n lineHeight: \"body\"\n },\n caption: {\n fontSize: 1,\n color: \"textSecondary\"\n }\n },\n cards: {\n primary: {\n bg: \"background\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 2\n },\n secondary: {\n bg: \"backgroundSecondary\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 2\n }\n }\n};\nvar terminalTheme = {\n space: [0, 4, 8, 16, 32, 64, 128, 256, 512],\n fonts: {\n body: '\"SF Mono\", \"Monaco\", \"Inconsolata\", \"Fira Code\", monospace',\n heading: '\"SF Mono\", \"Monaco\", \"Inconsolata\", \"Fira Code\", monospace',\n monospace: '\"SF Mono\", \"Monaco\", \"Inconsolata\", \"Fira Code\", monospace'\n },\n fontSizes: [12, 14, 16, 18, 20, 24, 32, 48, 64, 96],\n fontScale: 1,\n fontWeights: {\n body: 400,\n heading: 500,\n bold: 600,\n light: 300,\n medium: 500,\n semibold: 600\n },\n lineHeights: {\n body: 1.6,\n heading: 1.3,\n tight: 1.4,\n relaxed: 1.8\n },\n breakpoints: [\"640px\", \"768px\", \"1024px\", \"1280px\"],\n sizes: [16, 32, 64, 128, 256, 512, 768, 1024, 1536],\n radii: [0, 2, 4, 6, 8, 12, 16, 24],\n shadows: [\n \"none\",\n \"0 1px 2px 0 rgba(0, 0, 0, 0.05)\",\n \"0 2px 4px 0 rgba(0, 0, 0, 0.06)\",\n \"0 4px 6px 0 rgba(0, 0, 0, 0.07)\",\n \"0 8px 12px 0 rgba(0, 0, 0, 0.08)\",\n \"0 16px 24px 0 rgba(0, 0, 0, 0.10)\"\n ],\n zIndices: [0, 1, 10, 20, 30, 40, 50],\n colors: {\n text: \"#e4e4e4\",\n background: \"rgba(10, 10, 10, 0.85)\",\n primary: \"#66b3ff\",\n secondary: \"#80c4ff\",\n accent: \"#66ff99\",\n highlight: \"rgba(102, 179, 255, 0.15)\",\n muted: \"rgba(26, 26, 26, 0.8)\",\n success: \"#66ff99\",\n warning: \"#ffcc66\",\n error: \"#ff6666\",\n info: \"#66b3ff\",\n border: \"rgba(255, 255, 255, 0.1)\",\n backgroundSecondary: \"rgba(15, 15, 15, 0.9)\",\n backgroundTertiary: \"rgba(20, 20, 20, 0.9)\",\n backgroundLight: \"rgba(255, 255, 255, 0.05)\",\n backgroundHover: \"rgba(102, 179, 255, 0.08)\",\n surface: \"rgba(15, 15, 15, 0.95)\",\n textSecondary: \"rgba(255, 255, 255, 0.7)\",\n textTertiary: \"rgba(255, 255, 255, 0.5)\",\n textMuted: \"rgba(255, 255, 255, 0.4)\",\n highlightBg: \"rgba(255, 235, 59, 0.25)\",\n highlightBorder: \"rgba(255, 235, 59, 0.5)\"\n },\n modes: {\n light: {\n text: \"#1a1a1a\",\n background: \"rgba(255, 255, 255, 0.9)\",\n primary: \"#0066cc\",\n secondary: \"#0052a3\",\n accent: \"#00cc88\",\n highlight: \"rgba(0, 102, 204, 0.08)\",\n muted: \"rgba(245, 245, 245, 0.8)\",\n success: \"#00cc88\",\n warning: \"#ffaa00\",\n error: \"#ff3333\",\n info: \"#0066cc\",\n border: \"rgba(0, 0, 0, 0.1)\",\n backgroundSecondary: \"rgba(250, 250, 250, 0.9)\",\n backgroundTertiary: \"rgba(245, 245, 245, 0.9)\",\n backgroundLight: \"rgba(0, 0, 0, 0.02)\",\n backgroundHover: \"rgba(0, 102, 204, 0.04)\",\n surface: \"rgba(255, 255, 255, 0.95)\",\n textSecondary: \"rgba(0, 0, 0, 0.6)\",\n textTertiary: \"rgba(0, 0, 0, 0.4)\",\n textMuted: \"rgba(0, 0, 0, 0.3)\",\n highlightBg: \"rgba(255, 235, 59, 0.3)\",\n highlightBorder: \"rgba(255, 235, 59, 0.6)\"\n }\n },\n buttons: {\n primary: {\n color: \"white\",\n bg: \"primary\",\n borderWidth: 0,\n \"&:hover\": {\n bg: \"secondary\"\n }\n },\n secondary: {\n color: \"primary\",\n bg: \"transparent\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"primary\",\n \"&:hover\": {\n bg: \"highlight\"\n }\n },\n ghost: {\n color: \"text\",\n bg: \"transparent\",\n \"&:hover\": {\n bg: \"backgroundHover\"\n }\n }\n },\n text: {\n heading: {\n fontFamily: \"heading\",\n fontWeight: \"heading\",\n lineHeight: \"heading\"\n },\n body: {\n fontFamily: \"body\",\n fontWeight: \"body\",\n lineHeight: \"body\"\n },\n caption: {\n fontSize: 1,\n color: \"textSecondary\"\n }\n },\n cards: {\n primary: {\n bg: \"surface\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 1\n },\n secondary: {\n bg: \"backgroundSecondary\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 1\n }\n }\n};\nvar matrixTheme = {\n space: [0, 4, 8, 16, 32, 64, 128, 256, 512],\n fonts: {\n body: '\"Courier New\", \"Courier\", \"Lucida Console\", \"Monaco\", monospace',\n heading: '\"Courier New\", \"Courier\", \"Lucida Console\", \"Monaco\", monospace',\n monospace: '\"Courier New\", \"Courier\", \"Lucida Console\", \"Monaco\", monospace'\n },\n fontSizes: [12, 14, 16, 18, 20, 24, 32, 48, 64, 96],\n fontScale: 1,\n fontWeights: {\n body: 400,\n heading: 500,\n bold: 600,\n light: 300,\n medium: 500,\n semibold: 600\n },\n lineHeights: {\n body: 1.5,\n heading: 1.2,\n tight: 1.3,\n relaxed: 1.7\n },\n breakpoints: [\"640px\", \"768px\", \"1024px\", \"1280px\"],\n sizes: [16, 32, 64, 128, 256, 512, 768, 1024, 1536],\n radii: [0, 2, 4, 6, 8, 12, 16, 24],\n shadows: [\n \"none\",\n \"0 0 5px rgba(0, 216, 53, 0.15)\",\n \"0 0 10px rgba(0, 216, 53, 0.2)\",\n \"0 0 15px rgba(0, 216, 53, 0.25)\",\n \"0 0 20px rgba(0, 216, 53, 0.3)\",\n \"0 0 30px rgba(0, 216, 53, 0.4)\"\n ],\n zIndices: [0, 1, 10, 20, 30, 40, 50],\n colors: {\n text: \"#a8a8a8\",\n background: \"#000000\",\n primary: \"#00d835\",\n secondary: \"#00a828\",\n accent: \"#00d835\",\n highlight: \"rgba(0, 216, 53, 0.15)\",\n muted: \"#0a0a0a\",\n success: \"#00d835\",\n warning: \"#d4a000\",\n error: \"#d63333\",\n info: \"#00a8d6\",\n border: \"rgba(0, 216, 53, 0.2)\",\n backgroundSecondary: \"#0a0a0a\",\n backgroundTertiary: \"#111111\",\n backgroundLight: \"rgba(0, 216, 53, 0.03)\",\n backgroundHover: \"rgba(0, 216, 53, 0.08)\",\n surface: \"#050505\",\n textSecondary: \"#808080\",\n textTertiary: \"#606060\",\n textMuted: \"#484848\",\n highlightBg: \"rgba(0, 216, 53, 0.25)\",\n highlightBorder: \"rgba(0, 216, 53, 0.5)\"\n },\n buttons: {\n primary: {\n color: \"black\",\n bg: \"primary\",\n borderWidth: 0,\n \"&:hover\": {\n bg: \"secondary\"\n }\n },\n secondary: {\n color: \"primary\",\n bg: \"transparent\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"primary\",\n \"&:hover\": {\n bg: \"highlight\"\n }\n },\n ghost: {\n color: \"text\",\n bg: \"transparent\",\n \"&:hover\": {\n bg: \"backgroundHover\"\n }\n }\n },\n text: {\n heading: {\n fontFamily: \"heading\",\n fontWeight: \"heading\",\n lineHeight: \"heading\"\n },\n body: {\n fontFamily: \"body\",\n fontWeight: \"body\",\n lineHeight: \"body\"\n },\n caption: {\n fontSize: 1,\n color: \"textSecondary\"\n }\n },\n cards: {\n primary: {\n bg: \"surface\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 0\n },\n secondary: {\n bg: \"backgroundSecondary\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 0\n }\n }\n};\nvar matrixMinimalTheme = {\n space: [0, 4, 8, 16, 32, 64, 128, 256, 512],\n fonts: {\n body: '\"Courier New\", \"Courier\", \"Lucida Console\", \"Monaco\", monospace',\n heading: '\"Courier New\", \"Courier\", \"Lucida Console\", \"Monaco\", monospace',\n monospace: '\"Courier New\", \"Courier\", \"Lucida Console\", \"Monaco\", monospace'\n },\n fontSizes: [12, 14, 16, 18, 20, 24, 32, 48, 64, 96],\n fontScale: 1,\n fontWeights: {\n body: 400,\n heading: 500,\n bold: 600,\n light: 300,\n medium: 500,\n semibold: 600\n },\n lineHeights: {\n body: 1.5,\n heading: 1.2,\n tight: 1.3,\n relaxed: 1.7\n },\n breakpoints: [\"640px\", \"768px\", \"1024px\", \"1280px\"],\n sizes: [16, 32, 64, 128, 256, 512, 768, 1024, 1536],\n radii: [0, 2, 4, 6, 8, 12, 16, 24],\n shadows: [\n \"none\",\n \"0 1px 2px rgba(0, 0, 0, 0.05)\",\n \"0 2px 4px rgba(0, 0, 0, 0.1)\",\n \"0 4px 8px rgba(0, 0, 0, 0.15)\",\n \"0 8px 16px rgba(0, 0, 0, 0.2)\",\n \"0 0 20px rgba(0, 216, 53, 0.1)\"\n ],\n zIndices: [0, 1, 10, 20, 30, 40, 50],\n colors: {\n text: \"#a8a8a8\",\n background: \"#000000\",\n primary: \"#b8b8b8\",\n secondary: \"#909090\",\n accent: \"#00d835\",\n highlight: \"rgba(0, 216, 53, 0.1)\",\n muted: \"#0a0a0a\",\n success: \"#00d835\",\n warning: \"#d4a000\",\n error: \"#d63333\",\n info: \"#00a8d6\",\n border: \"rgba(184, 184, 184, 0.1)\",\n backgroundSecondary: \"#0a0a0a\",\n backgroundTertiary: \"#111111\",\n backgroundLight: \"rgba(184, 184, 184, 0.02)\",\n backgroundHover: \"rgba(0, 216, 53, 0.05)\",\n surface: \"#050505\",\n textSecondary: \"#808080\",\n textTertiary: \"#606060\",\n textMuted: \"#484848\",\n highlightBg: \"rgba(0, 216, 53, 0.2)\",\n highlightBorder: \"rgba(0, 216, 53, 0.4)\"\n },\n buttons: {\n primary: {\n color: \"black\",\n bg: \"primary\",\n borderWidth: 0,\n \"&:hover\": {\n bg: \"secondary\"\n }\n },\n secondary: {\n color: \"primary\",\n bg: \"transparent\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"primary\",\n \"&:hover\": {\n bg: \"backgroundHover\"\n }\n },\n ghost: {\n color: \"text\",\n bg: \"transparent\",\n \"&:hover\": {\n bg: \"backgroundHover\"\n }\n }\n },\n text: {\n heading: {\n fontFamily: \"heading\",\n fontWeight: \"heading\",\n lineHeight: \"heading\"\n },\n body: {\n fontFamily: \"body\",\n fontWeight: \"body\",\n lineHeight: \"body\"\n },\n caption: {\n fontSize: 1,\n color: \"textSecondary\"\n }\n },\n cards: {\n primary: {\n bg: \"surface\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 0\n },\n secondary: {\n bg: \"backgroundSecondary\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 0\n }\n }\n};\nvar slateTheme = {\n space: [0, 4, 8, 16, 32, 64, 128, 256, 512],\n fonts: {\n body: '\"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n heading: '\"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n monospace: '\"Fira Code\", \"SF Mono\", Monaco, Inconsolata, monospace'\n },\n fontSizes: [12, 14, 16, 18, 20, 24, 32, 48, 64, 96],\n fontScale: 1,\n fontWeights: {\n body: 400,\n heading: 600,\n bold: 700,\n light: 300,\n medium: 500,\n semibold: 600\n },\n lineHeights: {\n body: 1.6,\n heading: 1.3,\n tight: 1.25,\n relaxed: 1.75\n },\n breakpoints: [\"640px\", \"768px\", \"1024px\", \"1280px\"],\n sizes: [16, 32, 64, 128, 256, 512, 768, 1024, 1536],\n radii: [0, 2, 4, 6, 8, 12, 16, 24],\n shadows: [\n \"none\",\n \"0 1px 3px 0 rgba(0, 0, 0, 0.2)\",\n \"0 4px 6px -1px rgba(0, 0, 0, 0.2)\",\n \"0 10px 15px -3px rgba(0, 0, 0, 0.2)\",\n \"0 20px 25px -5px rgba(0, 0, 0, 0.25)\",\n \"0 25px 50px -12px rgba(0, 0, 0, 0.3)\"\n ],\n zIndices: [0, 1, 10, 20, 30, 40, 50],\n colors: {\n text: \"#9ca3af\",\n background: \"#1a1c1e\",\n primary: \"#d1d5db\",\n secondary: \"#6b7280\",\n accent: \"#f59e0b\",\n highlight: \"rgba(209, 213, 219, 0.15)\",\n muted: \"#2d3134\",\n success: \"#10b981\",\n warning: \"#f59e0b\",\n error: \"#ef4444\",\n info: \"#3b82f6\",\n border: \"rgba(156, 163, 175, 0.15)\",\n backgroundSecondary: \"#22252a\",\n backgroundTertiary: \"#2d3134\",\n backgroundLight: \"rgba(156, 163, 175, 0.05)\",\n backgroundHover: \"rgba(156, 163, 175, 0.1)\",\n surface: \"#1f2124\",\n textSecondary: \"#e5e7eb\",\n textTertiary: \"#6b7280\",\n textMuted: \"#4b5563\",\n highlightBg: \"rgba(245, 158, 11, 0.25)\",\n highlightBorder: \"rgba(245, 158, 11, 0.5)\"\n },\n buttons: {\n primary: {\n color: \"#1a1c1e\",\n bg: \"primary\",\n borderWidth: 0,\n \"&:hover\": {\n bg: \"#9ca3af\"\n }\n },\n secondary: {\n color: \"#e5e7eb\",\n bg: \"secondary\",\n borderWidth: 0,\n \"&:hover\": {\n bg: \"#4b5563\"\n }\n },\n ghost: {\n color: \"textSecondary\",\n bg: \"transparent\",\n \"&:hover\": {\n bg: \"backgroundHover\"\n }\n }\n },\n text: {\n heading: {\n fontFamily: \"heading\",\n fontWeight: \"heading\",\n lineHeight: \"heading\",\n color: \"textSecondary\"\n },\n body: {\n fontFamily: \"body\",\n fontWeight: \"body\",\n lineHeight: \"body\"\n },\n caption: {\n fontSize: 1,\n color: \"textTertiary\"\n }\n },\n cards: {\n primary: {\n bg: \"surface\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 3\n },\n secondary: {\n bg: \"backgroundSecondary\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 3\n }\n }\n};\n// src/ThemeProvider.tsx\nimport React, { createContext, useContext, useState, useEffect } from \"react\";\n\n// src/themeHelpers.ts\nfunction overrideColors(theme, colors) {\n return {\n ...theme,\n colors: {\n ...theme.colors,\n ...colors\n }\n };\n}\nfunction makeTheme(baseTheme, overrides) {\n return {\n ...baseTheme,\n ...overrides,\n colors: {\n ...baseTheme.colors,\n ...overrides.colors\n },\n fonts: {\n ...baseTheme.fonts,\n ...overrides.fonts\n }\n };\n}\nfunction addMode(theme, modeName, colors, baseMode) {\n let baseColors;\n if (baseMode && theme.modes && theme.modes[baseMode]) {\n baseColors = {\n ...theme.colors,\n ...theme.modes[baseMode]\n };\n } else {\n baseColors = theme.colors;\n }\n const newMode = {\n ...baseColors,\n ...colors\n };\n return {\n ...theme,\n modes: {\n ...theme.modes,\n [modeName]: newMode\n }\n };\n}\nfunction getMode(theme, mode) {\n if (!mode || !theme.modes || !theme.modes[mode]) {\n return theme.colors;\n }\n return {\n ...theme.colors,\n ...theme.modes[mode]\n };\n}\n\n// src/ThemeProvider.tsx\nvar ThemeContext;\nvar getThemeContext = () => {\n if (typeof window !== \"undefined\") {\n const globalWindow = window;\n if (!globalWindow.__principlemd_theme_context__) {\n globalWindow.__principlemd_theme_context__ = createContext(undefined);\n }\n return globalWindow.__principlemd_theme_context__;\n } else {\n if (!ThemeContext) {\n ThemeContext = createContext(undefined);\n }\n return ThemeContext;\n }\n};\nvar ThemeContextSingleton = getThemeContext();\nvar useTheme = () => {\n const context = useContext(ThemeContextSingleton);\n if (!context) {\n throw new Error(\"useTheme must be used within a ThemeProvider\");\n }\n return context;\n};\nvar ThemeProvider = ({\n children,\n theme: customTheme = theme,\n initialMode\n}) => {\n const [mode, setMode] = useState(initialMode);\n const activeTheme = React.useMemo(() => {\n if (!mode || !customTheme.modes || !customTheme.modes[mode]) {\n return customTheme;\n }\n return {\n ...customTheme,\n colors: getMode(customTheme, mode)\n };\n }, [customTheme, mode]);\n useEffect(() => {\n if (!initialMode) {\n const savedMode = localStorage.getItem(\"principlemd-theme-mode\");\n if (savedMode) {\n setMode(savedMode);\n }\n }\n }, [initialMode]);\n useEffect(() => {\n if (mode) {\n localStorage.setItem(\"principlemd-theme-mode\", mode);\n } else {\n localStorage.removeItem(\"principlemd-theme-mode\");\n }\n }, [mode]);\n const value = {\n theme: activeTheme,\n mode,\n setMode\n };\n return /* @__PURE__ */ React.createElement(ThemeContextSingleton.Provider, {\n value\n }, children);\n};\nvar withTheme = (Component) => {\n return (props) => {\n const { theme: theme2 } = useTheme();\n return /* @__PURE__ */ React.createElement(Component, {\n ...props,\n theme: theme2\n });\n };\n};\n// src/utils.ts\nvar getColor = (theme2, colorKey) => {\n const colors = theme2.colors;\n const value = colors[colorKey];\n return typeof value === \"string\" ? value : colorKey;\n};\nvar getSpace = (theme2, index) => {\n return theme2.space[index] || 0;\n};\nvar getFontSize = (theme2, index) => {\n return theme2.fontSizes[index] || theme2.fontSizes[2];\n};\nvar getRadius = (theme2, index) => {\n return theme2.radii[index] || 0;\n};\nvar getShadow = (theme2, index) => {\n return theme2.shadows[index] || \"none\";\n};\nvar getZIndex = (theme2, index) => {\n return theme2.zIndices[index] || 0;\n};\nvar responsive = (values) => {\n return values.reduce((acc, value, index) => {\n if (index === 0) {\n return value;\n }\n return {\n ...acc,\n [`@media screen and (min-width: ${values[index - 1]})`]: value\n };\n }, {});\n};\nvar sx = (styles) => styles;\nvar createStyle = (theme2, styleObj) => {\n const processValue = (value) => {\n if (typeof value === \"string\") {\n if (value in theme2.colors) {\n return getColor(theme2, value);\n }\n return value;\n }\n if (typeof value === \"number\") {\n return value;\n }\n if (Array.isArray(value)) {\n return value.map(processValue);\n }\n if (typeof value === \"object\" && value !== null) {\n const processed2 = {};\n for (const [key, val] of Object.entries(value)) {\n processed2[key] = processValue(val);\n }\n return processed2;\n }\n return value;\n };\n const processed = {};\n for (const [key, val] of Object.entries(styleObj)) {\n processed[key] = processValue(val);\n }\n return processed;\n};\nvar mergeThemes = (baseTheme, ...overrides) => {\n return overrides.reduce((theme2, override) => ({\n space: override.space || theme2.space,\n fonts: { ...theme2.fonts, ...override.fonts || {} },\n fontSizes: override.fontSizes || theme2.fontSizes,\n fontWeights: { ...theme2.fontWeights, ...override.fontWeights || {} },\n lineHeights: { ...theme2.lineHeights, ...override.lineHeights || {} },\n breakpoints: override.breakpoints || theme2.breakpoints,\n sizes: override.sizes || theme2.sizes,\n radii: override.radii || theme2.radii,\n shadows: override.shadows || theme2.shadows,\n zIndices: override.zIndices || theme2.zIndices,\n colors: {\n ...theme2.colors,\n ...override.colors || {}\n },\n buttons: { ...theme2.buttons, ...override.buttons || {} },\n text: { ...theme2.text, ...override.text || {} },\n cards: { ...theme2.cards, ...override.cards || {} }\n }), baseTheme);\n};\n// src/ThemeShowcase.tsx\nimport React2 from \"react\";\nvar ThemeShowcase = ({\n theme: theme2,\n title,\n showValues = true,\n sections = [\"colors\", \"typography\", \"spacing\", \"shadows\", \"radii\"]\n}) => {\n const containerStyle = {\n fontFamily: theme2.fonts.body,\n color: theme2.colors.text,\n backgroundColor: theme2.colors.background,\n padding: theme2.space[4],\n minHeight: \"100vh\"\n };\n const sectionStyle = {\n marginBottom: theme2.space[5],\n padding: theme2.space[4],\n backgroundColor: theme2.colors.surface || theme2.colors.backgroundSecondary,\n borderRadius: theme2.radii[2],\n border: `1px solid ${theme2.colors.border}`\n };\n const headingStyle = {\n fontFamily: theme2.fonts.heading,\n fontSize: theme2.fontSizes[5],\n fontWeight: theme2.fontWeights.heading,\n marginBottom: theme2.space[3],\n color: theme2.colors.primary\n };\n const subheadingStyle = {\n fontFamily: theme2.fonts.heading,\n fontSize: theme2.fontSizes[3],\n fontWeight: theme2.fontWeights.medium,\n marginBottom: theme2.space[2],\n marginTop: theme2.space[3],\n color: theme2.colors.text\n };\n return /* @__PURE__ */ React2.createElement(\"div\", {\n style: containerStyle\n }, title && /* @__PURE__ */ React2.createElement(\"h1\", {\n style: {\n ...headingStyle,\n fontSize: theme2.fontSizes[6],\n marginBottom: theme2.space[4]\n }\n }, title), sections.includes(\"colors\") && /* @__PURE__ */ React2.createElement(\"div\", {\n style: sectionStyle\n }, /* @__PURE__ */ React2.createElement(\"h2\", {\n style: headingStyle\n }, \"Colors\"), /* @__PURE__ */ React2.createElement(\"h3\", {\n style: subheadingStyle\n }, \"Primary Colors\"), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fill, minmax(200px, 1fr))\",\n gap: theme2.space[3],\n marginBottom: theme2.space[3]\n }\n }, [\"text\", \"background\", \"primary\", \"secondary\", \"accent\", \"muted\"].map((key) => {\n const color = theme2.colors[key];\n if (!color)\n return null;\n return /* @__PURE__ */ React2.createElement(\"div\", {\n key,\n style: {\n display: \"flex\",\n alignItems: \"center\",\n padding: theme2.space[2],\n backgroundColor: theme2.colors.backgroundLight || theme2.colors.backgroundTertiary,\n borderRadius: theme2.radii[1]\n }\n }, /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n width: 40,\n height: 40,\n backgroundColor: color,\n border: `1px solid ${theme2.colors.border}`,\n borderRadius: theme2.radii[1],\n marginRight: theme2.space[2]\n }\n }), /* @__PURE__ */ React2.createElement(\"div\", null, /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[1],\n fontWeight: theme2.fontWeights.medium\n }\n }, key), showValues && /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[0],\n color: theme2.colors.textSecondary\n }\n }, color)));\n })), /* @__PURE__ */ React2.createElement(\"h3\", {\n style: subheadingStyle\n }, \"Status Colors\"), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fill, minmax(200px, 1fr))\",\n gap: theme2.space[3],\n marginBottom: theme2.space[3]\n }\n }, [\"success\", \"warning\", \"error\", \"info\"].map((key) => {\n const color = theme2.colors[key];\n if (!color)\n return null;\n return /* @__PURE__ */ React2.createElement(\"div\", {\n key,\n style: {\n display: \"flex\",\n alignItems: \"center\",\n padding: theme2.space[2],\n backgroundColor: theme2.colors.backgroundLight || theme2.colors.backgroundTertiary,\n borderRadius: theme2.radii[1]\n }\n }, /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n width: 40,\n height: 40,\n backgroundColor: color,\n border: `1px solid ${theme2.colors.border}`,\n borderRadius: theme2.radii[1],\n marginRight: theme2.space[2]\n }\n }), /* @__PURE__ */ React2.createElement(\"div\", null, /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[1],\n fontWeight: theme2.fontWeights.medium\n }\n }, key), showValues && /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[0],\n color: theme2.colors.textSecondary\n }\n }, color)));\n })), /* @__PURE__ */ React2.createElement(\"h3\", {\n style: subheadingStyle\n }, \"Background Colors\"), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fill, minmax(200px, 1fr))\",\n gap: theme2.space[3]\n }\n }, [\"backgroundSecondary\", \"backgroundTertiary\", \"backgroundLight\", \"backgroundHover\", \"surface\"].map((key) => {\n const color = theme2.colors[key];\n if (!color)\n return null;\n return /* @__PURE__ */ React2.createElement(\"div\", {\n key,\n style: {\n padding: theme2.space[3],\n backgroundColor: color,\n border: `1px solid ${theme2.colors.border}`,\n borderRadius: theme2.radii[1]\n }\n }, /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[1],\n fontWeight: theme2.fontWeights.medium\n }\n }, key), showValues && /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[0],\n color: theme2.colors.textSecondary,\n marginTop: theme2.space[1]\n }\n }, color));\n }))), sections.includes(\"typography\") && /* @__PURE__ */ React2.createElement(\"div\", {\n style: sectionStyle\n }, /* @__PURE__ */ React2.createElement(\"h2\", {\n style: headingStyle\n }, \"Typography\"), /* @__PURE__ */ React2.createElement(\"h3\", {\n style: subheadingStyle\n }, \"Font Families\"), /* @__PURE__ */ React2.createElement(\"div\", {\n style: { marginBottom: theme2.space[4] }\n }, /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.heading,\n fontSize: theme2.fontSizes[4],\n marginBottom: theme2.space[2]\n }\n }, \"Heading Font: \", showValues && /* @__PURE__ */ React2.createElement(\"span\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[1],\n color: theme2.colors.textSecondary\n }\n }, \" \", theme2.fonts.heading)), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.body,\n fontSize: theme2.fontSizes[2],\n marginBottom: theme2.space[2]\n }\n }, \"Body Font: \", showValues && /* @__PURE__ */ React2.createElement(\"span\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[1],\n color: theme2.colors.textSecondary\n }\n }, \" \", theme2.fonts.body)), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[2]\n }\n }, \"Monospace Font: \", showValues && /* @__PURE__ */ React2.createElement(\"span\", {\n style: {\n fontSize: theme2.fontSizes[1],\n color: theme2.colors.textSecondary\n }\n }, \" \", theme2.fonts.monospace))), /* @__PURE__ */ React2.createElement(\"h3\", {\n style: subheadingStyle\n }, \"Font Sizes\"), /* @__PURE__ */ React2.createElement(\"div\", {\n style: { marginBottom: theme2.space[4] }\n }, theme2.fontSizes.map((size, index) => /* @__PURE__ */ React2.createElement(\"div\", {\n key: index,\n style: {\n fontSize: size,\n lineHeight: theme2.lineHeights.body,\n marginBottom: theme2.space[1]\n }\n }, \"Size \", index, \": Sample Text \", showValues && `(${size}px)`))), /* @__PURE__ */ React2.createElement(\"h3\", {\n style: subheadingStyle\n }, \"Font Weights\"), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fit, minmax(150px, 1fr))\",\n gap: theme2.space[2]\n }\n }, Object.entries(theme2.fontWeights).map(([name, weight]) => /* @__PURE__ */ React2.createElement(\"div\", {\n key: name,\n style: {\n fontWeight: weight,\n fontSize: theme2.fontSizes[2]\n }\n }, name, \" \", showValues && `(${weight})`)))), sections.includes(\"spacing\") && /* @__PURE__ */ React2.createElement(\"div\", {\n style: sectionStyle\n }, /* @__PURE__ */ React2.createElement(\"h2\", {\n style: headingStyle\n }, \"Spacing\"), /* @__PURE__ */ React2.createElement(\"div\", {\n style: { display: \"flex\", flexDirection: \"column\", gap: theme2.space[2] }\n }, theme2.space.map((space, index) => /* @__PURE__ */ React2.createElement(\"div\", {\n key: index,\n style: { display: \"flex\", alignItems: \"center\" }\n }, /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n width: 60,\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[1],\n color: theme2.colors.textSecondary\n }\n }, \"[\", index, \"]\"), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n height: 24,\n width: space,\n backgroundColor: theme2.colors.primary,\n borderRadius: theme2.radii[1]\n }\n }), showValues && /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n marginLeft: theme2.space[2],\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[1],\n color: theme2.colors.textSecondary\n }\n }, space, \"px\"))))), sections.includes(\"radii\") && /* @__PURE__ */ React2.createElement(\"div\", {\n style: sectionStyle\n }, /* @__PURE__ */ React2.createElement(\"h2\", {\n style: headingStyle\n }, \"Border Radii\"), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fill, minmax(100px, 1fr))\",\n gap: theme2.space[3]\n }\n }, theme2.radii.map((radius, index) => /* @__PURE__ */ React2.createElement(\"div\", {\n key: index,\n style: { textAlign: \"center\" }\n }, /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n width: 80,\n height: 80,\n backgroundColor: theme2.colors.primary,\n borderRadius: radius,\n marginBottom: theme2.space[1],\n margin: \"0 auto\"\n }\n }), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[0],\n color: theme2.colors.textSecondary\n }\n }, \"[\", index, \"] \", showValues && `${radius}px`))))), sections.includes(\"shadows\") && /* @__PURE__ */ React2.createElement(\"div\", {\n style: sectionStyle\n }, /* @__PURE__ */ React2.createElement(\"h2\", {\n style: headingStyle\n }, \"Shadows\"), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fill, minmax(150px, 1fr))\",\n gap: theme2.space[4]\n }\n }, theme2.shadows.map((shadow, index) => /* @__PURE__ */ React2.createElement(\"div\", {\n key: index,\n style: { textAlign: \"center\" }\n }, /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n width: 100,\n height: 100,\n backgroundColor: theme2.colors.background,\n boxShadow: shadow,\n borderRadius: theme2.radii[2],\n margin: \"0 auto\",\n marginBottom: theme2.space[2],\n border: `1px solid ${theme2.colors.border}`\n }\n }), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[0],\n color: theme2.colors.textSecondary\n }\n }, \"Shadow [\", index, \"]\"), showValues && /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[0],\n color: theme2.colors.textMuted,\n marginTop: theme2.space[1]\n }\n }, shadow === \"none\" ? \"none\" : \"...\"))))), theme2.modes && Object.keys(theme2.modes).length > 0 && /* @__PURE__ */ React2.createElement(\"div\", {\n style: sectionStyle\n }, /* @__PURE__ */ React2.createElement(\"h2\", {\n style: headingStyle\n }, \"Available Modes\"), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n display: \"flex\",\n gap: theme2.space[2],\n flexWrap: \"wrap\"\n }\n }, /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n padding: `${theme2.space[2]}px ${theme2.space[3]}px`,\n backgroundColor: theme2.colors.primary,\n color: \"#ffffff\",\n borderRadius: theme2.radii[2],\n fontFamily: theme2.fonts.body,\n fontSize: theme2.fontSizes[1]\n }\n }, \"default\"), Object.keys(theme2.modes).map((modeName) => /* @__PURE__ */ React2.createElement(\"div\", {\n key: modeName,\n style: {\n padding: `${theme2.space[2]}px ${theme2.space[3]}px`,\n backgroundColor: theme2.colors.secondary,\n color: theme2.colors.text,\n borderRadius: theme2.radii[2],\n fontFamily: theme2.fonts.body,\n fontSize: theme2.fontSizes[1]\n }\n }, modeName)))));\n};\n\n// src/index.ts\nvar theme = terminalTheme;\nfunction scaleThemeFonts(theme2, scale) {\n const currentScale = theme2.fontScale || 1;\n const effectiveScale = scale / currentScale;\n return {\n ...theme2,\n fontSizes: theme2.fontSizes.map((size) => Math.round(size * effectiveScale)),\n fontScale: scale\n };\n}\nfunction increaseFontScale(theme2) {\n const currentScale = theme2.fontScale || 1;\n const newScale = Math.min(currentScale * 1.1, 2);\n return scaleThemeFonts(theme2, newScale);\n}\nfunction decreaseFontScale(theme2) {\n const currentScale = theme2.fontScale || 1;\n const newScale = Math.max(currentScale * 0.9, 0.5);\n return scaleThemeFonts(theme2, newScale);\n}\nfunction resetFontScale(theme2) {\n return scaleThemeFonts(theme2, 1);\n}\nvar src_default = theme;\nexport {\n withTheme,\n useTheme,\n theme,\n terminalTheme,\n sx,\n slateTheme,\n scaleThemeFonts,\n responsive,\n resetFontScale,\n regalTheme,\n overrideColors,\n mergeThemes,\n matrixTheme,\n matrixMinimalTheme,\n makeTheme,\n landingPageTheme,\n landingPageLightTheme,\n increaseFontScale,\n glassmorphismTheme,\n getZIndex,\n getSpace,\n getShadow,\n getRadius,\n getMode,\n getFontSize,\n getColor,\n defaultTerminalTheme,\n defaultMarkdownTheme,\n defaultEditorTheme,\n src_default as default,\n decreaseFontScale,\n createStyle,\n addMode,\n ThemeShowcase,\n ThemeProvider\n};\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\nconst toCamelCase = (string) => string.replace(\n /^([A-Z])|[\\s-_]+(\\w)/g,\n (match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase()\n);\nconst toPascalCase = (string) => {\n const camelCase = toCamelCase(string);\n return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);\n};\nconst mergeClasses = (...classes) => classes.filter((className, index, array) => {\n return Boolean(className) && className.trim() !== \"\" && array.indexOf(className) === index;\n}).join(\" \").trim();\nconst hasA11yProp = (props) => {\n for (const prop in props) {\n if (prop.startsWith(\"aria-\") || prop === \"role\" || prop === \"title\") {\n return true;\n }\n }\n};\n\nexport { hasA11yProp, mergeClasses, toCamelCase, toKebabCase, toPascalCase };\n//# sourceMappingURL=utils.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nvar defaultAttributes = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n};\n\nexport { defaultAttributes as default };\n//# sourceMappingURL=defaultAttributes.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport defaultAttributes from './defaultAttributes.js';\nimport { mergeClasses, hasA11yProp } from './shared/src/utils.js';\n\nconst Icon = forwardRef(\n ({\n color = \"currentColor\",\n size = 24,\n strokeWidth = 2,\n absoluteStrokeWidth,\n className = \"\",\n children,\n iconNode,\n ...rest\n }, ref) => createElement(\n \"svg\",\n {\n ref,\n ...defaultAttributes,\n width: size,\n height: size,\n stroke: color,\n strokeWidth: absoluteStrokeWidth ? Number(strokeWidth) * 24 / Number(size) : strokeWidth,\n className: mergeClasses(\"lucide\", className),\n ...!children && !hasA11yProp(rest) && { \"aria-hidden\": \"true\" },\n ...rest\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...Array.isArray(children) ? children : [children]\n ]\n )\n);\n\nexport { Icon as default };\n//# sourceMappingURL=Icon.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport { mergeClasses, toKebabCase, toPascalCase } from './shared/src/utils.js';\nimport Icon from './Icon.js';\n\nconst createLucideIcon = (iconName, iconNode) => {\n const Component = forwardRef(\n ({ className, ...props }, ref) => createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(\n `lucide-${toKebabCase(toPascalCase(iconName))}`,\n `lucide-${iconName}`,\n className\n ),\n ...props\n })\n );\n Component.displayName = toPascalCase(iconName);\n return Component;\n};\n\nexport { createLucideIcon as default };\n//# sourceMappingURL=createLucideIcon.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M5 12h14\", key: \"1ays0h\" }],\n [\"path\", { d: \"m12 5 7 7-7 7\", key: \"xquz4c\" }]\n];\nconst ArrowRight = createLucideIcon(\"arrow-right\", __iconNode);\n\nexport { __iconNode, ArrowRight as default };\n//# sourceMappingURL=arrow-right.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z\",\n key: \"hh9hay\"\n }\n ],\n [\"path\", { d: \"m3.3 7 8.7 5 8.7-5\", key: \"g66t2b\" }],\n [\"path\", { d: \"M12 22V12\", key: \"d0xqtd\" }]\n];\nconst Box = createLucideIcon(\"box\", __iconNode);\n\nexport { __iconNode, Box as default };\n//# sourceMappingURL=box.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M2.97 12.92A2 2 0 0 0 2 14.63v3.24a2 2 0 0 0 .97 1.71l3 1.8a2 2 0 0 0 2.06 0L12 19v-5.5l-5-3-4.03 2.42Z\",\n key: \"lc1i9w\"\n }\n ],\n [\"path\", { d: \"m7 16.5-4.74-2.85\", key: \"1o9zyk\" }],\n [\"path\", { d: \"m7 16.5 5-3\", key: \"va8pkn\" }],\n [\"path\", { d: \"M7 16.5v5.17\", key: \"jnp8gn\" }],\n [\n \"path\",\n {\n d: \"M12 13.5V19l3.97 2.38a2 2 0 0 0 2.06 0l3-1.8a2 2 0 0 0 .97-1.71v-3.24a2 2 0 0 0-.97-1.71L17 10.5l-5 3Z\",\n key: \"8zsnat\"\n }\n ],\n [\"path\", { d: \"m17 16.5-5-3\", key: \"8arw3v\" }],\n [\"path\", { d: \"m17 16.5 4.74-2.85\", key: \"8rfmw\" }],\n [\"path\", { d: \"M17 16.5v5.17\", key: \"k6z78m\" }],\n [\n \"path\",\n {\n d: \"M7.97 4.42A2 2 0 0 0 7 6.13v4.37l5 3 5-3V6.13a2 2 0 0 0-.97-1.71l-3-1.8a2 2 0 0 0-2.06 0l-3 1.8Z\",\n key: \"1xygjf\"\n }\n ],\n [\"path\", { d: \"M12 8 7.26 5.15\", key: \"1vbdud\" }],\n [\"path\", { d: \"m12 8 4.74-2.85\", key: \"3rx089\" }],\n [\"path\", { d: \"M12 13.5V8\", key: \"1io7kd\" }]\n];\nconst Boxes = createLucideIcon(\"boxes\", __iconNode);\n\nexport { __iconNode, Boxes as default };\n//# sourceMappingURL=boxes.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"M20 6 9 17l-5-5\", key: \"1gmf2c\" }]];\nconst Check = createLucideIcon(\"check\", __iconNode);\n\nexport { __iconNode, Check as default };\n//# sourceMappingURL=check.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"m6 9 6 6 6-6\", key: \"qrunsl\" }]];\nconst ChevronDown = createLucideIcon(\"chevron-down\", __iconNode);\n\nexport { __iconNode, ChevronDown as default };\n//# sourceMappingURL=chevron-down.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"m15 18-6-6 6-6\", key: \"1wnfg3\" }]];\nconst ChevronLeft = createLucideIcon(\"chevron-left\", __iconNode);\n\nexport { __iconNode, ChevronLeft as default };\n//# sourceMappingURL=chevron-left.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"m9 18 6-6-6-6\", key: \"mthhwq\" }]];\nconst ChevronRight = createLucideIcon(\"chevron-right\", __iconNode);\n\nexport { __iconNode, ChevronRight as default };\n//# sourceMappingURL=chevron-right.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"line\", { x1: \"12\", x2: \"12\", y1: \"8\", y2: \"12\", key: \"1pkeuh\" }],\n [\"line\", { x1: \"12\", x2: \"12.01\", y1: \"16\", y2: \"16\", key: \"4dfq90\" }]\n];\nconst CircleAlert = createLucideIcon(\"circle-alert\", __iconNode);\n\nexport { __iconNode, CircleAlert as default };\n//# sourceMappingURL=circle-alert.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"path\", { d: \"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3\", key: \"1u773s\" }],\n [\"path\", { d: \"M12 17h.01\", key: \"p32p05\" }]\n];\nconst CircleQuestionMark = createLucideIcon(\"circle-question-mark\", __iconNode);\n\nexport { __iconNode, CircleQuestionMark as default };\n//# sourceMappingURL=circle-question-mark.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"rect\", { width: \"14\", height: \"14\", x: \"8\", y: \"8\", rx: \"2\", ry: \"2\", key: \"17jyea\" }],\n [\"path\", { d: \"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\", key: \"zix9uf\" }]\n];\nconst Copy = createLucideIcon(\"copy\", __iconNode);\n\nexport { __iconNode, Copy as default };\n//# sourceMappingURL=copy.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M15 3h6v6\", key: \"1q9fwt\" }],\n [\"path\", { d: \"M10 14 21 3\", key: \"gplh6r\" }],\n [\"path\", { d: \"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\", key: \"a6xqqp\" }]\n];\nconst ExternalLink = createLucideIcon(\"external-link\", __iconNode);\n\nexport { __iconNode, ExternalLink as default };\n//# sourceMappingURL=external-link.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z\",\n key: \"1oefj6\"\n }\n ],\n [\"path\", { d: \"M14 2v5a1 1 0 0 0 1 1h5\", key: \"wfsgrz\" }],\n [\"path\", { d: \"M10 12.5 8 15l2 2.5\", key: \"1tg20x\" }],\n [\"path\", { d: \"m14 12.5 2 2.5-2 2.5\", key: \"yinavb\" }]\n];\nconst FileCode = createLucideIcon(\"file-code\", __iconNode);\n\nexport { __iconNode, FileCode as default };\n//# sourceMappingURL=file-code.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z\",\n key: \"1oefj6\"\n }\n ],\n [\"path\", { d: \"M12 17h.01\", key: \"p32p05\" }],\n [\"path\", { d: \"M9.1 9a3 3 0 0 1 5.82 1c0 2-3 3-3 3\", key: \"mhlwft\" }]\n];\nconst FileQuestionMark = createLucideIcon(\"file-question-mark\", __iconNode);\n\nexport { __iconNode, FileQuestionMark as default };\n//# sourceMappingURL=file-question-mark.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z\",\n key: \"1oefj6\"\n }\n ],\n [\"path\", { d: \"M14 2v5a1 1 0 0 0 1 1h5\", key: \"wfsgrz\" }],\n [\"path\", { d: \"M10 9H8\", key: \"b1mrlr\" }],\n [\"path\", { d: \"M16 13H8\", key: \"t4e002\" }],\n [\"path\", { d: \"M16 17H8\", key: \"z1uh3a\" }]\n];\nconst FileText = createLucideIcon(\"file-text\", __iconNode);\n\nexport { __iconNode, FileText as default };\n//# sourceMappingURL=file-text.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z\",\n key: \"1kt360\"\n }\n ]\n];\nconst Folder = createLucideIcon(\"folder\", __iconNode);\n\nexport { __iconNode, Folder as default };\n//# sourceMappingURL=folder.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"line\", { x1: \"6\", x2: \"6\", y1: \"3\", y2: \"15\", key: \"17qcm7\" }],\n [\"circle\", { cx: \"18\", cy: \"6\", r: \"3\", key: \"1h7g24\" }],\n [\"circle\", { cx: \"6\", cy: \"18\", r: \"3\", key: \"fqmcym\" }],\n [\"path\", { d: \"M18 9a9 9 0 0 1-9 9\", key: \"n2h4wq\" }]\n];\nconst GitBranch = createLucideIcon(\"git-branch\", __iconNode);\n\nexport { __iconNode, GitBranch as default };\n//# sourceMappingURL=git-branch.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z\",\n key: \"zw3jo\"\n }\n ],\n [\n \"path\",\n {\n d: \"M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12\",\n key: \"1wduqc\"\n }\n ],\n [\n \"path\",\n {\n d: \"M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17\",\n key: \"kqbvx6\"\n }\n ]\n];\nconst Layers = createLucideIcon(\"layers\", __iconNode);\n\nexport { __iconNode, Layers as default };\n//# sourceMappingURL=layers.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"rect\", { width: \"7\", height: \"7\", x: \"3\", y: \"3\", rx: \"1\", key: \"1g98yp\" }],\n [\"rect\", { width: \"7\", height: \"7\", x: \"14\", y: \"3\", rx: \"1\", key: \"6d4xhi\" }],\n [\"rect\", { width: \"7\", height: \"7\", x: \"14\", y: \"14\", rx: \"1\", key: \"nxv5o0\" }],\n [\"rect\", { width: \"7\", height: \"7\", x: \"3\", y: \"14\", rx: \"1\", key: \"1bb6yr\" }]\n];\nconst LayoutGrid = createLucideIcon(\"layout-grid\", __iconNode);\n\nexport { __iconNode, LayoutGrid as default };\n//# sourceMappingURL=layout-grid.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"M5 12h14\", key: \"1ays0h\" }]];\nconst Minus = createLucideIcon(\"minus\", __iconNode);\n\nexport { __iconNode, Minus as default };\n//# sourceMappingURL=minus.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z\",\n key: \"1a0edw\"\n }\n ],\n [\"path\", { d: \"M12 22V12\", key: \"d0xqtd\" }],\n [\"polyline\", { points: \"3.29 7 12 12 20.71 7\", key: \"ousv84\" }],\n [\"path\", { d: \"m7.5 4.27 9 5.15\", key: \"1c824w\" }]\n];\nconst Package = createLucideIcon(\"package\", __iconNode);\n\nexport { __iconNode, Package as default };\n//# sourceMappingURL=package.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M5 12h14\", key: \"1ays0h\" }],\n [\"path\", { d: \"M12 5v14\", key: \"s699le\" }]\n];\nconst Plus = createLucideIcon(\"plus\", __iconNode);\n\nexport { __iconNode, Plus as default };\n//# sourceMappingURL=plus.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"m16 16 3-8 3 8c-.87.65-1.92 1-3 1s-2.13-.35-3-1Z\", key: \"7g6ntu\" }],\n [\"path\", { d: \"m2 16 3-8 3 8c-.87.65-1.92 1-3 1s-2.13-.35-3-1Z\", key: \"ijws7r\" }],\n [\"path\", { d: \"M7 21h10\", key: \"1b0cd5\" }],\n [\"path\", { d: \"M12 3v18\", key: \"108xh3\" }],\n [\"path\", { d: \"M3 7h2c2 0 5-1 7-2 2 1 5 2 7 2h2\", key: \"3gwbw2\" }]\n];\nconst Scale = createLucideIcon(\"scale\", __iconNode);\n\nexport { __iconNode, Scale as default };\n//# sourceMappingURL=scale.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"m21 21-4.34-4.34\", key: \"14j7rj\" }],\n [\"circle\", { cx: \"11\", cy: \"11\", r: \"8\", key: \"4ej97u\" }]\n];\nconst Search = createLucideIcon(\"search\", __iconNode);\n\nexport { __iconNode, Search as default };\n//# sourceMappingURL=search.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915\",\n key: \"1i5ecw\"\n }\n ],\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"3\", key: \"1v7zrd\" }]\n];\nconst Settings = createLucideIcon(\"settings\", __iconNode);\n\nexport { __iconNode, Settings as default };\n//# sourceMappingURL=settings.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\", key: \"1m0v6g\" }],\n [\n \"path\",\n {\n d: \"M18.375 2.625a1 1 0 0 1 3 3l-9.013 9.014a2 2 0 0 1-.853.505l-2.873.84a.5.5 0 0 1-.62-.62l.84-2.873a2 2 0 0 1 .506-.852z\",\n key: \"ohrbg2\"\n }\n ]\n];\nconst SquarePen = createLucideIcon(\"square-pen\", __iconNode);\n\nexport { __iconNode, SquarePen as default };\n//# sourceMappingURL=square-pen.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M12 19h8\", key: \"baeox8\" }],\n [\"path\", { d: \"m4 17 6-6-6-6\", key: \"1yngyt\" }]\n];\nconst Terminal = createLucideIcon(\"terminal\", __iconNode);\n\nexport { __iconNode, Terminal as default };\n//# sourceMappingURL=terminal.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M18 6 6 18\", key: \"1bl5f8\" }],\n [\"path\", { d: \"m6 6 12 12\", key: \"d8bk6v\" }]\n];\nconst X = createLucideIcon(\"x\", __iconNode);\n\nexport { __iconNode, X as default };\n//# sourceMappingURL=x.js.map\n","/**\n * @license React\n * use-sync-external-store-shim.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar React = require(\"react\");\nfunction is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useState = React.useState,\n useEffect = React.useEffect,\n useLayoutEffect = React.useLayoutEffect,\n useDebugValue = React.useDebugValue;\nfunction useSyncExternalStore$2(subscribe, getSnapshot) {\n var value = getSnapshot(),\n _useState = useState({ inst: { value: value, getSnapshot: getSnapshot } }),\n inst = _useState[0].inst,\n forceUpdate = _useState[1];\n useLayoutEffect(\n function () {\n inst.value = value;\n inst.getSnapshot = getSnapshot;\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n },\n [subscribe, value, getSnapshot]\n );\n useEffect(\n function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n return subscribe(function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n });\n },\n [subscribe]\n );\n useDebugValue(value);\n return value;\n}\nfunction checkIfSnapshotChanged(inst) {\n var latestGetSnapshot = inst.getSnapshot;\n inst = inst.value;\n try {\n var nextValue = latestGetSnapshot();\n return !objectIs(inst, nextValue);\n } catch (error) {\n return !0;\n }\n}\nfunction useSyncExternalStore$1(subscribe, getSnapshot) {\n return getSnapshot();\n}\nvar shim =\n \"undefined\" === typeof window ||\n \"undefined\" === typeof window.document ||\n \"undefined\" === typeof window.document.createElement\n ? useSyncExternalStore$1\n : useSyncExternalStore$2;\nexports.useSyncExternalStore =\n void 0 !== React.useSyncExternalStore ? React.useSyncExternalStore : shim;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim.production.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim.development.js');\n}\n","import { createContext, useContext } from \"react\";\nexport const TreeApiContext = createContext(null);\nexport function useTreeApi() {\n const value = useContext(TreeApiContext);\n if (value === null)\n throw new Error(\"No Tree Api Provided\");\n return value;\n}\nexport const NodesContext = createContext(null);\nexport function useNodesContext() {\n const value = useContext(NodesContext);\n if (value === null)\n throw new Error(\"Provide a NodesContext\");\n return value;\n}\nexport const DndContext = createContext(null);\nexport function useDndContext() {\n const value = useContext(DndContext);\n if (value === null)\n throw new Error(\"Provide a DnDContext\");\n return value;\n}\nexport const DataUpdatesContext = createContext(0);\nexport function useDataUpdates() {\n useContext(DataUpdatesContext);\n}\n","export function bound(n, min, max) {\n return Math.max(Math.min(n, max), min);\n}\nexport function isItem(node) {\n return node && node.isLeaf;\n}\nexport function isClosed(node) {\n return node && node.isInternal && !node.isOpen;\n}\nexport function isOpenWithEmptyChildren(node) {\n var _a;\n return node && node.isOpen && !((_a = node.children) === null || _a === void 0 ? void 0 : _a.length);\n}\n/**\n * Is first param a descendant of the second param\n */\nexport const isDescendant = (a, b) => {\n let n = a;\n while (n) {\n if (n.id === b.id)\n return true;\n n = n.parent;\n }\n return false;\n};\nexport const indexOf = (node) => {\n if (!node.parent)\n throw Error(\"Node does not have a parent\");\n return node.parent.children.findIndex((c) => c.id === node.id);\n};\nexport function noop() { }\nexport function dfs(node, id) {\n if (!node)\n return null;\n if (node.id === id)\n return node;\n if (node.children) {\n for (let child of node.children) {\n const result = dfs(child, id);\n if (result)\n return result;\n }\n }\n return null;\n}\nexport function walk(node, fn) {\n fn(node);\n if (node.children) {\n for (let child of node.children) {\n walk(child, fn);\n }\n }\n}\nexport function focusNextElement(target) {\n const elements = getFocusable(target);\n let next;\n for (let i = 0; i < elements.length; ++i) {\n const item = elements[i];\n if (item === target) {\n next = nextItem(elements, i);\n break;\n }\n }\n // @ts-ignore ??\n next === null || next === void 0 ? void 0 : next.focus();\n}\nexport function focusPrevElement(target) {\n const elements = getFocusable(target);\n let next;\n for (let i = 0; i < elements.length; ++i) {\n const item = elements[i];\n if (item === target) {\n next = prevItem(elements, i);\n break;\n }\n }\n // @ts-ignore\n next === null || next === void 0 ? void 0 : next.focus();\n}\nfunction nextItem(list, index) {\n if (index + 1 < list.length) {\n return list[index + 1];\n }\n else {\n return list[0];\n }\n}\nfunction prevItem(list, index) {\n if (index - 1 >= 0) {\n return list[index - 1];\n }\n else {\n return list[list.length - 1];\n }\n}\nfunction getFocusable(target) {\n return Array.from(document.querySelectorAll('button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"]):not([disabled]), details:not([disabled]), summary:not(:disabled)')).filter((e) => e === target || !target.contains(e));\n}\nexport function access(obj, accessor) {\n if (typeof accessor === \"boolean\")\n return accessor;\n if (typeof accessor === \"string\")\n return obj[accessor];\n return accessor(obj);\n}\nexport function identifyNull(obj) {\n if (obj === null)\n return null;\n else\n return identify(obj);\n}\nexport function identify(obj) {\n return typeof obj === \"string\" ? obj : obj.id;\n}\nexport function mergeRefs(...refs) {\n return (instance) => {\n refs.forEach((ref) => {\n if (typeof ref === \"function\") {\n ref(instance);\n }\n else if (ref != null) {\n ref.current = instance;\n }\n });\n };\n}\nexport function safeRun(fn, ...args) {\n if (fn)\n return fn(...args);\n}\nexport function waitFor(fn) {\n return new Promise((resolve, reject) => {\n let tries = 0;\n function check() {\n tries += 1;\n if (tries === 100)\n reject();\n if (fn())\n resolve();\n else\n setTimeout(check, 10);\n }\n check();\n });\n}\nexport function getInsertIndex(tree) {\n var _a, _b;\n const focus = tree.focusedNode;\n if (!focus)\n return (_b = (_a = tree.root.children) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0;\n if (focus.isOpen)\n return 0;\n if (focus.parent)\n return focus.childIndex + 1;\n return 0;\n}\nexport function getInsertParentId(tree) {\n const focus = tree.focusedNode;\n if (!focus)\n return null;\n if (focus.isOpen)\n return focus.id;\n if (focus.parent && !focus.parent.isRoot)\n return focus.parent.id;\n return null;\n}\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport React from \"react\";\nconst placeholderStyle = {\n display: \"flex\",\n alignItems: \"center\",\n zIndex: 1,\n};\nconst lineStyle = {\n flex: 1,\n height: \"2px\",\n background: \"#4B91E2\",\n borderRadius: \"1px\",\n};\nconst circleStyle = {\n width: \"4px\",\n height: \"4px\",\n boxShadow: \"0 0 0 3px #4B91E2\",\n borderRadius: \"50%\",\n};\nexport const DefaultCursor = React.memo(function DefaultCursor({ top, left, indent, }) {\n const style = {\n position: \"absolute\",\n pointerEvents: \"none\",\n top: top - 2 + \"px\",\n left: left + \"px\",\n right: indent + \"px\",\n };\n return (_jsxs(\"div\", { style: Object.assign(Object.assign({}, placeholderStyle), style), children: [_jsx(\"div\", { style: Object.assign({}, circleStyle) }), _jsx(\"div\", { style: Object.assign({}, lineStyle) })] }));\n});\n","import { jsx as _jsx } from \"react/jsx-runtime\";\nexport function DefaultRow({ node, attrs, innerRef, children, }) {\n return (_jsx(\"div\", Object.assign({}, attrs, { ref: innerRef, onFocus: (e) => e.stopPropagation(), onClick: node.handleClick, children: children })));\n}\n","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { useEffect, useRef } from \"react\";\nexport function DefaultNode(props) {\n return (_jsxs(\"div\", { ref: props.dragHandle, style: props.style, children: [_jsx(\"span\", { onClick: (e) => {\n e.stopPropagation();\n props.node.toggle();\n }, children: props.node.isLeaf ? \"🌳\" : props.node.isOpen ? \"🗁\" : \"🗀\" }), \" \", props.node.isEditing ? _jsx(Edit, Object.assign({}, props)) : _jsx(Show, Object.assign({}, props))] }));\n}\nfunction Show(props) {\n return (_jsx(_Fragment, { children: _jsx(\"span\", { children: props.node.data.name }) }));\n}\nfunction Edit({ node }) {\n const input = useRef();\n useEffect(() => {\n var _a, _b;\n (_a = input.current) === null || _a === void 0 ? void 0 : _a.focus();\n (_b = input.current) === null || _b === void 0 ? void 0 : _b.select();\n }, []);\n return (_jsx(\"input\", { ref: input, \n // @ts-ignore\n defaultValue: node.data.name, onBlur: () => node.reset(), onKeyDown: (e) => {\n var _a;\n if (e.key === \"Escape\")\n node.reset();\n if (e.key === \"Enter\")\n node.submit(((_a = input.current) === null || _a === void 0 ? void 0 : _a.value) || \"\");\n } }));\n}\n","/* Actions */\nexport function edit(id) {\n return { type: \"EDIT\", id };\n}\n/* Reducer */\nexport function reducer(state = { id: null }, action) {\n if (action.type === \"EDIT\") {\n return Object.assign(Object.assign({}, state), { id: action.id });\n }\n else {\n return state;\n }\n}\n","/* Types */\n/* Actions */\nexport function focus(id) {\n return { type: \"FOCUS\", id };\n}\nexport function treeBlur() {\n return { type: \"TREE_BLUR\" };\n}\n/* Reducer */\nexport function reducer(state = { id: null, treeFocused: false }, action) {\n if (action.type === \"FOCUS\") {\n return Object.assign(Object.assign({}, state), { id: action.id, treeFocused: true });\n }\n else if (action.type === \"TREE_BLUR\") {\n return Object.assign(Object.assign({}, state), { treeFocused: false });\n }\n else {\n return state;\n }\n}\n","import { ROOT_ID } from \"../data/create-root\";\nexport class NodeApi {\n constructor(params) {\n this.handleClick = (e) => {\n if (e.metaKey && !this.tree.props.disableMultiSelection) {\n this.isSelected ? this.deselect() : this.selectMulti();\n }\n else if (e.shiftKey && !this.tree.props.disableMultiSelection) {\n this.selectContiguous();\n }\n else {\n this.select();\n this.activate();\n }\n };\n this.tree = params.tree;\n this.id = params.id;\n this.data = params.data;\n this.level = params.level;\n this.children = params.children;\n this.parent = params.parent;\n this.isDraggable = params.isDraggable;\n this.rowIndex = params.rowIndex;\n }\n get isRoot() {\n return this.id === ROOT_ID;\n }\n get isLeaf() {\n return !Array.isArray(this.children);\n }\n get isInternal() {\n return !this.isLeaf;\n }\n get isOpen() {\n return this.isLeaf ? false : this.tree.isOpen(this.id);\n }\n get isClosed() {\n return this.isLeaf ? false : !this.tree.isOpen(this.id);\n }\n get isEditable() {\n return this.tree.isEditable(this.data);\n }\n get isEditing() {\n return this.tree.editingId === this.id;\n }\n get isSelected() {\n return this.tree.isSelected(this.id);\n }\n get isOnlySelection() {\n return this.isSelected && this.tree.hasOneSelection;\n }\n get isSelectedStart() {\n var _a;\n return this.isSelected && !((_a = this.prev) === null || _a === void 0 ? void 0 : _a.isSelected);\n }\n get isSelectedEnd() {\n var _a;\n return this.isSelected && !((_a = this.next) === null || _a === void 0 ? void 0 : _a.isSelected);\n }\n get isFocused() {\n return this.tree.isFocused(this.id);\n }\n get isDragging() {\n return this.tree.isDragging(this.id);\n }\n get willReceiveDrop() {\n return this.tree.willReceiveDrop(this.id);\n }\n get state() {\n return {\n isClosed: this.isClosed,\n isDragging: this.isDragging,\n isEditing: this.isEditing,\n isFocused: this.isFocused,\n isInternal: this.isInternal,\n isLeaf: this.isLeaf,\n isOpen: this.isOpen,\n isSelected: this.isSelected,\n isSelectedEnd: this.isSelectedEnd,\n isSelectedStart: this.isSelectedStart,\n willReceiveDrop: this.willReceiveDrop,\n };\n }\n get childIndex() {\n if (this.parent && this.parent.children) {\n return this.parent.children.findIndex((child) => child.id === this.id);\n }\n else {\n return -1;\n }\n }\n get next() {\n if (this.rowIndex === null)\n return null;\n return this.tree.at(this.rowIndex + 1);\n }\n get prev() {\n if (this.rowIndex === null)\n return null;\n return this.tree.at(this.rowIndex - 1);\n }\n get nextSibling() {\n var _a, _b;\n const i = this.childIndex;\n return (_b = (_a = this.parent) === null || _a === void 0 ? void 0 : _a.children[i + 1]) !== null && _b !== void 0 ? _b : null;\n }\n isAncestorOf(node) {\n if (!node)\n return false;\n let ancestor = node;\n while (ancestor) {\n if (ancestor.id === this.id)\n return true;\n ancestor = ancestor.parent;\n }\n return false;\n }\n select() {\n this.tree.select(this);\n }\n deselect() {\n this.tree.deselect(this);\n }\n selectMulti() {\n this.tree.selectMulti(this);\n }\n selectContiguous() {\n this.tree.selectContiguous(this);\n }\n activate() {\n this.tree.activate(this);\n }\n focus() {\n this.tree.focus(this);\n }\n toggle() {\n this.tree.toggle(this);\n }\n open() {\n this.tree.open(this);\n }\n openParents() {\n this.tree.openParents(this);\n }\n close() {\n this.tree.close(this);\n }\n submit(value) {\n this.tree.submit(this, value);\n }\n reset() {\n this.tree.reset();\n }\n clone() {\n return new NodeApi(Object.assign({}, this));\n }\n edit() {\n return this.tree.edit(this);\n }\n}\n","import { NodeApi } from \"../interfaces/node-api\";\nexport const ROOT_ID = \"__REACT_ARBORIST_INTERNAL_ROOT__\";\nexport function createRoot(tree) {\n var _a;\n function visitSelfAndChildren(data, level, parent) {\n const id = tree.accessId(data);\n const node = new NodeApi({\n tree,\n data,\n level,\n parent,\n id,\n children: null,\n isDraggable: tree.isDraggable(data),\n rowIndex: null,\n });\n const children = tree.accessChildren(data);\n if (children) {\n node.children = children.map((child) => visitSelfAndChildren(child, level + 1, node));\n }\n return node;\n }\n const root = new NodeApi({\n tree,\n id: ROOT_ID,\n // @ts-ignore\n data: { id: ROOT_ID },\n level: -1,\n parent: null,\n children: null,\n isDraggable: true,\n rowIndex: null,\n });\n const data = (_a = tree.props.data) !== null && _a !== void 0 ? _a : [];\n root.children = data.map((child) => {\n return visitSelfAndChildren(child, 0, root);\n });\n return root;\n}\n","/* Actions */\nexport const actions = {\n open(id, filtered) {\n return { type: \"VISIBILITY_OPEN\", id, filtered };\n },\n close(id, filtered) {\n return { type: \"VISIBILITY_CLOSE\", id, filtered };\n },\n toggle(id, filtered) {\n return { type: \"VISIBILITY_TOGGLE\", id, filtered };\n },\n clear(filtered) {\n return { type: \"VISIBILITY_CLEAR\", filtered };\n },\n};\n/* Reducer */\nfunction openMapReducer(state = {}, action) {\n if (action.type === \"VISIBILITY_OPEN\") {\n return Object.assign(Object.assign({}, state), { [action.id]: true });\n }\n else if (action.type === \"VISIBILITY_CLOSE\") {\n return Object.assign(Object.assign({}, state), { [action.id]: false });\n }\n else if (action.type === \"VISIBILITY_TOGGLE\") {\n const prev = state[action.id];\n return Object.assign(Object.assign({}, state), { [action.id]: !prev });\n }\n else if (action.type === \"VISIBILITY_CLEAR\") {\n return {};\n }\n else {\n return state;\n }\n}\nexport function reducer(state = { filtered: {}, unfiltered: {} }, action) {\n if (!action.type.startsWith(\"VISIBILITY\"))\n return state;\n if (action.filtered) {\n return Object.assign(Object.assign({}, state), { filtered: openMapReducer(state.filtered, action) });\n }\n else {\n return Object.assign(Object.assign({}, state), { unfiltered: openMapReducer(state.unfiltered, action) });\n }\n}\n","export const initialState = (props) => {\n var _a;\n return ({\n nodes: {\n // Changes together\n open: { filtered: {}, unfiltered: (_a = props === null || props === void 0 ? void 0 : props.initialOpenState) !== null && _a !== void 0 ? _a : {} },\n focus: { id: null, treeFocused: false },\n edit: { id: null },\n drag: {\n id: null,\n selectedIds: [],\n destinationParentId: null,\n destinationIndex: null,\n },\n selection: { ids: new Set(), anchor: null, mostRecent: null },\n },\n dnd: {\n cursor: { type: \"none\" },\n dragId: null,\n dragIds: [],\n parentId: null,\n index: -1,\n },\n });\n};\n","import { identify } from \"../utils\";\nimport { initialState } from \"./initial\";\n/* Actions */\nexport const actions = {\n clear: () => ({ type: \"SELECTION_CLEAR\" }),\n only: (id) => ({\n type: \"SELECTION_ONLY\",\n id: identify(id),\n }),\n add: (id) => ({\n type: \"SELECTION_ADD\",\n ids: (Array.isArray(id) ? id : [id]).map(identify),\n }),\n remove: (id) => ({\n type: \"SELECTION_REMOVE\",\n ids: (Array.isArray(id) ? id : [id]).map(identify),\n }),\n set: (args) => (Object.assign({ type: \"SELECTION_SET\" }, args)),\n mostRecent: (id) => ({\n type: \"SELECTION_MOST_RECENT\",\n id: id === null ? null : identify(id),\n }),\n anchor: (id) => ({\n type: \"SELECTION_ANCHOR\",\n id: id === null ? null : identify(id),\n }),\n};\n/* Reducer */\nexport function reducer(state = initialState()[\"nodes\"][\"selection\"], action) {\n const ids = state.ids;\n switch (action.type) {\n case \"SELECTION_CLEAR\":\n return Object.assign(Object.assign({}, state), { ids: new Set() });\n case \"SELECTION_ONLY\":\n return Object.assign(Object.assign({}, state), { ids: new Set([action.id]) });\n case \"SELECTION_ADD\":\n if (action.ids.length === 0)\n return state;\n action.ids.forEach((id) => ids.add(id));\n return Object.assign(Object.assign({}, state), { ids: new Set(ids) });\n case \"SELECTION_REMOVE\":\n if (action.ids.length === 0)\n return state;\n action.ids.forEach((id) => ids.delete(id));\n return Object.assign(Object.assign({}, state), { ids: new Set(ids) });\n case \"SELECTION_SET\":\n return Object.assign(Object.assign({}, state), { ids: action.ids, mostRecent: action.mostRecent, anchor: action.anchor });\n case \"SELECTION_MOST_RECENT\":\n return Object.assign(Object.assign({}, state), { mostRecent: action.id });\n case \"SELECTION_ANCHOR\":\n return Object.assign(Object.assign({}, state), { anchor: action.id });\n default:\n return state;\n }\n}\n","import { initialState } from \"./initial\";\n/* Actions */\nexport const actions = {\n cursor(cursor) {\n return { type: \"DND_CURSOR\", cursor };\n },\n dragStart(id, dragIds) {\n return { type: \"DND_DRAG_START\", id, dragIds };\n },\n dragEnd() {\n return { type: \"DND_DRAG_END\" };\n },\n hovering(parentId, index) {\n return { type: \"DND_HOVERING\", parentId, index };\n },\n};\n/* Reducer */\nexport function reducer(state = initialState()[\"dnd\"], action) {\n switch (action.type) {\n case \"DND_CURSOR\":\n return Object.assign(Object.assign({}, state), { cursor: action.cursor });\n case \"DND_DRAG_START\":\n return Object.assign(Object.assign({}, state), { dragId: action.id, dragIds: action.dragIds });\n case \"DND_DRAG_END\":\n return initialState()[\"dnd\"];\n case \"DND_HOVERING\":\n return Object.assign(Object.assign({}, state), { parentId: action.parentId, index: action.index });\n default:\n return state;\n }\n}\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { memo } from \"react\";\nimport { useTreeApi } from \"../context\";\nconst layerStyles = {\n position: \"fixed\",\n pointerEvents: \"none\",\n zIndex: 100,\n left: 0,\n top: 0,\n width: \"100%\",\n height: \"100%\",\n};\nconst getStyle = (offset) => {\n if (!offset)\n return { display: \"none\" };\n const { x, y } = offset;\n return { transform: `translate(${x}px, ${y}px)` };\n};\nconst getCountStyle = (offset) => {\n if (!offset)\n return { display: \"none\" };\n const { x, y } = offset;\n return { transform: `translate(${x + 10}px, ${y + 10}px)` };\n};\nexport function DefaultDragPreview({ offset, mouse, id, dragIds, isDragging, }) {\n return (_jsxs(Overlay, { isDragging: isDragging, children: [_jsx(Position, { offset: offset, children: _jsx(PreviewNode, { id: id, dragIds: dragIds }) }), _jsx(Count, { mouse: mouse, count: dragIds.length })] }));\n}\nconst Overlay = memo(function Overlay(props) {\n if (!props.isDragging)\n return null;\n return _jsx(\"div\", { style: layerStyles, children: props.children });\n});\nfunction Position(props) {\n return (_jsx(\"div\", { className: \"row preview\", style: getStyle(props.offset), children: props.children }));\n}\nfunction Count(props) {\n const { count, mouse } = props;\n if (count > 1)\n return (_jsx(\"div\", { className: \"selected-count\", style: getCountStyle(mouse), children: count }));\n else\n return null;\n}\nconst PreviewNode = memo(function PreviewNode(props) {\n const tree = useTreeApi();\n const node = tree.get(props.id);\n if (!node)\n return null;\n return (_jsx(tree.renderNode, { preview: true, node: node, style: {\n paddingLeft: node.level * tree.indent,\n opacity: 0.2,\n background: \"transparent\",\n }, tree: tree }));\n});\n","function _extends() {\n return _extends = Object.assign ? Object.assign.bind() : function (n) {\n for (var e = 1; e < arguments.length; e++) {\n var t = arguments[e];\n for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n }\n return n;\n }, _extends.apply(null, arguments);\n}\nexport { _extends as default };","function _assertThisInitialized(e) {\n if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n return e;\n}\nexport { _assertThisInitialized as default };","function _setPrototypeOf(t, e) {\n return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {\n return t.__proto__ = e, t;\n }, _setPrototypeOf(t, e);\n}\nexport { _setPrototypeOf as default };","import setPrototypeOf from \"./setPrototypeOf.js\";\nfunction _inheritsLoose(t, o) {\n t.prototype = Object.create(o.prototype), t.prototype.constructor = t, setPrototypeOf(t, o);\n}\nexport { _inheritsLoose as default };","var safeIsNaN = Number.isNaN ||\n function ponyfill(value) {\n return typeof value === 'number' && value !== value;\n };\nfunction isEqual(first, second) {\n if (first === second) {\n return true;\n }\n if (safeIsNaN(first) && safeIsNaN(second)) {\n return true;\n }\n return false;\n}\nfunction areInputsEqual(newInputs, lastInputs) {\n if (newInputs.length !== lastInputs.length) {\n return false;\n }\n for (var i = 0; i < newInputs.length; i++) {\n if (!isEqual(newInputs[i], lastInputs[i])) {\n return false;\n }\n }\n return true;\n}\n\nfunction memoizeOne(resultFn, isEqual) {\n if (isEqual === void 0) { isEqual = areInputsEqual; }\n var lastThis;\n var lastArgs = [];\n var lastResult;\n var calledOnce = false;\n function memoized() {\n var newArgs = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n newArgs[_i] = arguments[_i];\n }\n if (calledOnce && lastThis === this && isEqual(newArgs, lastArgs)) {\n return lastResult;\n }\n lastResult = resultFn.apply(this, newArgs);\n calledOnce = true;\n lastThis = this;\n lastArgs = newArgs;\n return lastResult;\n }\n return memoized;\n}\n\nexport default memoizeOne;\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport _assertThisInitialized from '@babel/runtime/helpers/esm/assertThisInitialized';\nimport _inheritsLoose from '@babel/runtime/helpers/esm/inheritsLoose';\nimport memoizeOne from 'memoize-one';\nimport { createElement, PureComponent } from 'react';\nimport _objectWithoutPropertiesLoose from '@babel/runtime/helpers/esm/objectWithoutPropertiesLoose';\n\n// Animation frame based implementation of setTimeout.\n// Inspired by Joe Lambert, https://gist.github.com/joelambert/1002116#file-requesttimeout-js\nvar hasNativePerformanceNow = typeof performance === 'object' && typeof performance.now === 'function';\nvar now = hasNativePerformanceNow ? function () {\n return performance.now();\n} : function () {\n return Date.now();\n};\nfunction cancelTimeout(timeoutID) {\n cancelAnimationFrame(timeoutID.id);\n}\nfunction requestTimeout(callback, delay) {\n var start = now();\n\n function tick() {\n if (now() - start >= delay) {\n callback.call(null);\n } else {\n timeoutID.id = requestAnimationFrame(tick);\n }\n }\n\n var timeoutID = {\n id: requestAnimationFrame(tick)\n };\n return timeoutID;\n}\n\nvar size = -1; // This utility copied from \"dom-helpers\" package.\n\nfunction getScrollbarSize(recalculate) {\n if (recalculate === void 0) {\n recalculate = false;\n }\n\n if (size === -1 || recalculate) {\n var div = document.createElement('div');\n var style = div.style;\n style.width = '50px';\n style.height = '50px';\n style.overflow = 'scroll';\n document.body.appendChild(div);\n size = div.offsetWidth - div.clientWidth;\n document.body.removeChild(div);\n }\n\n return size;\n}\nvar cachedRTLResult = null; // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n// Chrome does not seem to adhere; its scrollLeft values are positive (measured relative to the left).\n// Safari's elastic bounce makes detecting this even more complicated wrt potential false positives.\n// The safest way to check this is to intentionally set a negative offset,\n// and then verify that the subsequent \"scroll\" event matches the negative offset.\n// If it does not match, then we can assume a non-standard RTL scroll implementation.\n\nfunction getRTLOffsetType(recalculate) {\n if (recalculate === void 0) {\n recalculate = false;\n }\n\n if (cachedRTLResult === null || recalculate) {\n var outerDiv = document.createElement('div');\n var outerStyle = outerDiv.style;\n outerStyle.width = '50px';\n outerStyle.height = '50px';\n outerStyle.overflow = 'scroll';\n outerStyle.direction = 'rtl';\n var innerDiv = document.createElement('div');\n var innerStyle = innerDiv.style;\n innerStyle.width = '100px';\n innerStyle.height = '100px';\n outerDiv.appendChild(innerDiv);\n document.body.appendChild(outerDiv);\n\n if (outerDiv.scrollLeft > 0) {\n cachedRTLResult = 'positive-descending';\n } else {\n outerDiv.scrollLeft = 1;\n\n if (outerDiv.scrollLeft === 0) {\n cachedRTLResult = 'negative';\n } else {\n cachedRTLResult = 'positive-ascending';\n }\n }\n\n document.body.removeChild(outerDiv);\n return cachedRTLResult;\n }\n\n return cachedRTLResult;\n}\n\nvar IS_SCROLLING_DEBOUNCE_INTERVAL = 150;\n\nvar defaultItemKey = function defaultItemKey(_ref) {\n var columnIndex = _ref.columnIndex,\n data = _ref.data,\n rowIndex = _ref.rowIndex;\n return rowIndex + \":\" + columnIndex;\n}; // In DEV mode, this Set helps us only log a warning once per component instance.\n// This avoids spamming the console every time a render happens.\n\n\nvar devWarningsOverscanCount = null;\nvar devWarningsOverscanRowsColumnsCount = null;\nvar devWarningsTagName = null;\n\nif (process.env.NODE_ENV !== 'production') {\n if (typeof window !== 'undefined' && typeof window.WeakSet !== 'undefined') {\n devWarningsOverscanCount = /*#__PURE__*/new WeakSet();\n devWarningsOverscanRowsColumnsCount = /*#__PURE__*/new WeakSet();\n devWarningsTagName = /*#__PURE__*/new WeakSet();\n }\n}\n\nfunction createGridComponent(_ref2) {\n var _class;\n\n var getColumnOffset = _ref2.getColumnOffset,\n getColumnStartIndexForOffset = _ref2.getColumnStartIndexForOffset,\n getColumnStopIndexForStartIndex = _ref2.getColumnStopIndexForStartIndex,\n getColumnWidth = _ref2.getColumnWidth,\n getEstimatedTotalHeight = _ref2.getEstimatedTotalHeight,\n getEstimatedTotalWidth = _ref2.getEstimatedTotalWidth,\n getOffsetForColumnAndAlignment = _ref2.getOffsetForColumnAndAlignment,\n getOffsetForRowAndAlignment = _ref2.getOffsetForRowAndAlignment,\n getRowHeight = _ref2.getRowHeight,\n getRowOffset = _ref2.getRowOffset,\n getRowStartIndexForOffset = _ref2.getRowStartIndexForOffset,\n getRowStopIndexForStartIndex = _ref2.getRowStopIndexForStartIndex,\n initInstanceProps = _ref2.initInstanceProps,\n shouldResetStyleCacheOnItemSizeChange = _ref2.shouldResetStyleCacheOnItemSizeChange,\n validateProps = _ref2.validateProps;\n return _class = /*#__PURE__*/function (_PureComponent) {\n _inheritsLoose(Grid, _PureComponent);\n\n // Always use explicit constructor for React components.\n // It produces less code after transpilation. (#26)\n // eslint-disable-next-line no-useless-constructor\n function Grid(props) {\n var _this;\n\n _this = _PureComponent.call(this, props) || this;\n _this._instanceProps = initInstanceProps(_this.props, _assertThisInitialized(_this));\n _this._resetIsScrollingTimeoutId = null;\n _this._outerRef = void 0;\n _this.state = {\n instance: _assertThisInitialized(_this),\n isScrolling: false,\n horizontalScrollDirection: 'forward',\n scrollLeft: typeof _this.props.initialScrollLeft === 'number' ? _this.props.initialScrollLeft : 0,\n scrollTop: typeof _this.props.initialScrollTop === 'number' ? _this.props.initialScrollTop : 0,\n scrollUpdateWasRequested: false,\n verticalScrollDirection: 'forward'\n };\n _this._callOnItemsRendered = void 0;\n _this._callOnItemsRendered = memoizeOne(function (overscanColumnStartIndex, overscanColumnStopIndex, overscanRowStartIndex, overscanRowStopIndex, visibleColumnStartIndex, visibleColumnStopIndex, visibleRowStartIndex, visibleRowStopIndex) {\n return _this.props.onItemsRendered({\n overscanColumnStartIndex: overscanColumnStartIndex,\n overscanColumnStopIndex: overscanColumnStopIndex,\n overscanRowStartIndex: overscanRowStartIndex,\n overscanRowStopIndex: overscanRowStopIndex,\n visibleColumnStartIndex: visibleColumnStartIndex,\n visibleColumnStopIndex: visibleColumnStopIndex,\n visibleRowStartIndex: visibleRowStartIndex,\n visibleRowStopIndex: visibleRowStopIndex\n });\n });\n _this._callOnScroll = void 0;\n _this._callOnScroll = memoizeOne(function (scrollLeft, scrollTop, horizontalScrollDirection, verticalScrollDirection, scrollUpdateWasRequested) {\n return _this.props.onScroll({\n horizontalScrollDirection: horizontalScrollDirection,\n scrollLeft: scrollLeft,\n scrollTop: scrollTop,\n verticalScrollDirection: verticalScrollDirection,\n scrollUpdateWasRequested: scrollUpdateWasRequested\n });\n });\n _this._getItemStyle = void 0;\n\n _this._getItemStyle = function (rowIndex, columnIndex) {\n var _this$props = _this.props,\n columnWidth = _this$props.columnWidth,\n direction = _this$props.direction,\n rowHeight = _this$props.rowHeight;\n\n var itemStyleCache = _this._getItemStyleCache(shouldResetStyleCacheOnItemSizeChange && columnWidth, shouldResetStyleCacheOnItemSizeChange && direction, shouldResetStyleCacheOnItemSizeChange && rowHeight);\n\n var key = rowIndex + \":\" + columnIndex;\n var style;\n\n if (itemStyleCache.hasOwnProperty(key)) {\n style = itemStyleCache[key];\n } else {\n var _offset = getColumnOffset(_this.props, columnIndex, _this._instanceProps);\n\n var isRtl = direction === 'rtl';\n itemStyleCache[key] = style = {\n position: 'absolute',\n left: isRtl ? undefined : _offset,\n right: isRtl ? _offset : undefined,\n top: getRowOffset(_this.props, rowIndex, _this._instanceProps),\n height: getRowHeight(_this.props, rowIndex, _this._instanceProps),\n width: getColumnWidth(_this.props, columnIndex, _this._instanceProps)\n };\n }\n\n return style;\n };\n\n _this._getItemStyleCache = void 0;\n _this._getItemStyleCache = memoizeOne(function (_, __, ___) {\n return {};\n });\n\n _this._onScroll = function (event) {\n var _event$currentTarget = event.currentTarget,\n clientHeight = _event$currentTarget.clientHeight,\n clientWidth = _event$currentTarget.clientWidth,\n scrollLeft = _event$currentTarget.scrollLeft,\n scrollTop = _event$currentTarget.scrollTop,\n scrollHeight = _event$currentTarget.scrollHeight,\n scrollWidth = _event$currentTarget.scrollWidth;\n\n _this.setState(function (prevState) {\n if (prevState.scrollLeft === scrollLeft && prevState.scrollTop === scrollTop) {\n // Scroll position may have been updated by cDM/cDU,\n // In which case we don't need to trigger another render,\n // And we don't want to update state.isScrolling.\n return null;\n }\n\n var direction = _this.props.direction; // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n // This is not the case for all browsers though (e.g. Chrome reports values as positive, measured relative to the left).\n // It's also easier for this component if we convert offsets to the same format as they would be in for ltr.\n // So the simplest solution is to determine which browser behavior we're dealing with, and convert based on it.\n\n var calculatedScrollLeft = scrollLeft;\n\n if (direction === 'rtl') {\n switch (getRTLOffsetType()) {\n case 'negative':\n calculatedScrollLeft = -scrollLeft;\n break;\n\n case 'positive-descending':\n calculatedScrollLeft = scrollWidth - clientWidth - scrollLeft;\n break;\n }\n } // Prevent Safari's elastic scrolling from causing visual shaking when scrolling past bounds.\n\n\n calculatedScrollLeft = Math.max(0, Math.min(calculatedScrollLeft, scrollWidth - clientWidth));\n var calculatedScrollTop = Math.max(0, Math.min(scrollTop, scrollHeight - clientHeight));\n return {\n isScrolling: true,\n horizontalScrollDirection: prevState.scrollLeft < scrollLeft ? 'forward' : 'backward',\n scrollLeft: calculatedScrollLeft,\n scrollTop: calculatedScrollTop,\n verticalScrollDirection: prevState.scrollTop < scrollTop ? 'forward' : 'backward',\n scrollUpdateWasRequested: false\n };\n }, _this._resetIsScrollingDebounced);\n };\n\n _this._outerRefSetter = function (ref) {\n var outerRef = _this.props.outerRef;\n _this._outerRef = ref;\n\n if (typeof outerRef === 'function') {\n outerRef(ref);\n } else if (outerRef != null && typeof outerRef === 'object' && outerRef.hasOwnProperty('current')) {\n outerRef.current = ref;\n }\n };\n\n _this._resetIsScrollingDebounced = function () {\n if (_this._resetIsScrollingTimeoutId !== null) {\n cancelTimeout(_this._resetIsScrollingTimeoutId);\n }\n\n _this._resetIsScrollingTimeoutId = requestTimeout(_this._resetIsScrolling, IS_SCROLLING_DEBOUNCE_INTERVAL);\n };\n\n _this._resetIsScrolling = function () {\n _this._resetIsScrollingTimeoutId = null;\n\n _this.setState({\n isScrolling: false\n }, function () {\n // Clear style cache after state update has been committed.\n // This way we don't break pure sCU for items that don't use isScrolling param.\n _this._getItemStyleCache(-1);\n });\n };\n\n return _this;\n }\n\n Grid.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps, prevState) {\n validateSharedProps(nextProps, prevState);\n validateProps(nextProps);\n return null;\n };\n\n var _proto = Grid.prototype;\n\n _proto.scrollTo = function scrollTo(_ref3) {\n var scrollLeft = _ref3.scrollLeft,\n scrollTop = _ref3.scrollTop;\n\n if (scrollLeft !== undefined) {\n scrollLeft = Math.max(0, scrollLeft);\n }\n\n if (scrollTop !== undefined) {\n scrollTop = Math.max(0, scrollTop);\n }\n\n this.setState(function (prevState) {\n if (scrollLeft === undefined) {\n scrollLeft = prevState.scrollLeft;\n }\n\n if (scrollTop === undefined) {\n scrollTop = prevState.scrollTop;\n }\n\n if (prevState.scrollLeft === scrollLeft && prevState.scrollTop === scrollTop) {\n return null;\n }\n\n return {\n horizontalScrollDirection: prevState.scrollLeft < scrollLeft ? 'forward' : 'backward',\n scrollLeft: scrollLeft,\n scrollTop: scrollTop,\n scrollUpdateWasRequested: true,\n verticalScrollDirection: prevState.scrollTop < scrollTop ? 'forward' : 'backward'\n };\n }, this._resetIsScrollingDebounced);\n };\n\n _proto.scrollToItem = function scrollToItem(_ref4) {\n var _ref4$align = _ref4.align,\n align = _ref4$align === void 0 ? 'auto' : _ref4$align,\n columnIndex = _ref4.columnIndex,\n rowIndex = _ref4.rowIndex;\n var _this$props2 = this.props,\n columnCount = _this$props2.columnCount,\n height = _this$props2.height,\n rowCount = _this$props2.rowCount,\n width = _this$props2.width;\n var _this$state = this.state,\n scrollLeft = _this$state.scrollLeft,\n scrollTop = _this$state.scrollTop;\n var scrollbarSize = getScrollbarSize();\n\n if (columnIndex !== undefined) {\n columnIndex = Math.max(0, Math.min(columnIndex, columnCount - 1));\n }\n\n if (rowIndex !== undefined) {\n rowIndex = Math.max(0, Math.min(rowIndex, rowCount - 1));\n }\n\n var estimatedTotalHeight = getEstimatedTotalHeight(this.props, this._instanceProps);\n var estimatedTotalWidth = getEstimatedTotalWidth(this.props, this._instanceProps); // The scrollbar size should be considered when scrolling an item into view,\n // to ensure it's fully visible.\n // But we only need to account for its size when it's actually visible.\n\n var horizontalScrollbarSize = estimatedTotalWidth > width ? scrollbarSize : 0;\n var verticalScrollbarSize = estimatedTotalHeight > height ? scrollbarSize : 0;\n this.scrollTo({\n scrollLeft: columnIndex !== undefined ? getOffsetForColumnAndAlignment(this.props, columnIndex, align, scrollLeft, this._instanceProps, verticalScrollbarSize) : scrollLeft,\n scrollTop: rowIndex !== undefined ? getOffsetForRowAndAlignment(this.props, rowIndex, align, scrollTop, this._instanceProps, horizontalScrollbarSize) : scrollTop\n });\n };\n\n _proto.componentDidMount = function componentDidMount() {\n var _this$props3 = this.props,\n initialScrollLeft = _this$props3.initialScrollLeft,\n initialScrollTop = _this$props3.initialScrollTop;\n\n if (this._outerRef != null) {\n var outerRef = this._outerRef;\n\n if (typeof initialScrollLeft === 'number') {\n outerRef.scrollLeft = initialScrollLeft;\n }\n\n if (typeof initialScrollTop === 'number') {\n outerRef.scrollTop = initialScrollTop;\n }\n }\n\n this._callPropsCallbacks();\n };\n\n _proto.componentDidUpdate = function componentDidUpdate() {\n var direction = this.props.direction;\n var _this$state2 = this.state,\n scrollLeft = _this$state2.scrollLeft,\n scrollTop = _this$state2.scrollTop,\n scrollUpdateWasRequested = _this$state2.scrollUpdateWasRequested;\n\n if (scrollUpdateWasRequested && this._outerRef != null) {\n // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n // This is not the case for all browsers though (e.g. Chrome reports values as positive, measured relative to the left).\n // So we need to determine which browser behavior we're dealing with, and mimic it.\n var outerRef = this._outerRef;\n\n if (direction === 'rtl') {\n switch (getRTLOffsetType()) {\n case 'negative':\n outerRef.scrollLeft = -scrollLeft;\n break;\n\n case 'positive-ascending':\n outerRef.scrollLeft = scrollLeft;\n break;\n\n default:\n var clientWidth = outerRef.clientWidth,\n scrollWidth = outerRef.scrollWidth;\n outerRef.scrollLeft = scrollWidth - clientWidth - scrollLeft;\n break;\n }\n } else {\n outerRef.scrollLeft = Math.max(0, scrollLeft);\n }\n\n outerRef.scrollTop = Math.max(0, scrollTop);\n }\n\n this._callPropsCallbacks();\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (this._resetIsScrollingTimeoutId !== null) {\n cancelTimeout(this._resetIsScrollingTimeoutId);\n }\n };\n\n _proto.render = function render() {\n var _this$props4 = this.props,\n children = _this$props4.children,\n className = _this$props4.className,\n columnCount = _this$props4.columnCount,\n direction = _this$props4.direction,\n height = _this$props4.height,\n innerRef = _this$props4.innerRef,\n innerElementType = _this$props4.innerElementType,\n innerTagName = _this$props4.innerTagName,\n itemData = _this$props4.itemData,\n _this$props4$itemKey = _this$props4.itemKey,\n itemKey = _this$props4$itemKey === void 0 ? defaultItemKey : _this$props4$itemKey,\n outerElementType = _this$props4.outerElementType,\n outerTagName = _this$props4.outerTagName,\n rowCount = _this$props4.rowCount,\n style = _this$props4.style,\n useIsScrolling = _this$props4.useIsScrolling,\n width = _this$props4.width;\n var isScrolling = this.state.isScrolling;\n\n var _this$_getHorizontalR = this._getHorizontalRangeToRender(),\n columnStartIndex = _this$_getHorizontalR[0],\n columnStopIndex = _this$_getHorizontalR[1];\n\n var _this$_getVerticalRan = this._getVerticalRangeToRender(),\n rowStartIndex = _this$_getVerticalRan[0],\n rowStopIndex = _this$_getVerticalRan[1];\n\n var items = [];\n\n if (columnCount > 0 && rowCount) {\n for (var _rowIndex = rowStartIndex; _rowIndex <= rowStopIndex; _rowIndex++) {\n for (var _columnIndex = columnStartIndex; _columnIndex <= columnStopIndex; _columnIndex++) {\n items.push(createElement(children, {\n columnIndex: _columnIndex,\n data: itemData,\n isScrolling: useIsScrolling ? isScrolling : undefined,\n key: itemKey({\n columnIndex: _columnIndex,\n data: itemData,\n rowIndex: _rowIndex\n }),\n rowIndex: _rowIndex,\n style: this._getItemStyle(_rowIndex, _columnIndex)\n }));\n }\n }\n } // Read this value AFTER items have been created,\n // So their actual sizes (if variable) are taken into consideration.\n\n\n var estimatedTotalHeight = getEstimatedTotalHeight(this.props, this._instanceProps);\n var estimatedTotalWidth = getEstimatedTotalWidth(this.props, this._instanceProps);\n return createElement(outerElementType || outerTagName || 'div', {\n className: className,\n onScroll: this._onScroll,\n ref: this._outerRefSetter,\n style: _extends({\n position: 'relative',\n height: height,\n width: width,\n overflow: 'auto',\n WebkitOverflowScrolling: 'touch',\n willChange: 'transform',\n direction: direction\n }, style)\n }, createElement(innerElementType || innerTagName || 'div', {\n children: items,\n ref: innerRef,\n style: {\n height: estimatedTotalHeight,\n pointerEvents: isScrolling ? 'none' : undefined,\n width: estimatedTotalWidth\n }\n }));\n };\n\n _proto._callPropsCallbacks = function _callPropsCallbacks() {\n var _this$props5 = this.props,\n columnCount = _this$props5.columnCount,\n onItemsRendered = _this$props5.onItemsRendered,\n onScroll = _this$props5.onScroll,\n rowCount = _this$props5.rowCount;\n\n if (typeof onItemsRendered === 'function') {\n if (columnCount > 0 && rowCount > 0) {\n var _this$_getHorizontalR2 = this._getHorizontalRangeToRender(),\n _overscanColumnStartIndex = _this$_getHorizontalR2[0],\n _overscanColumnStopIndex = _this$_getHorizontalR2[1],\n _visibleColumnStartIndex = _this$_getHorizontalR2[2],\n _visibleColumnStopIndex = _this$_getHorizontalR2[3];\n\n var _this$_getVerticalRan2 = this._getVerticalRangeToRender(),\n _overscanRowStartIndex = _this$_getVerticalRan2[0],\n _overscanRowStopIndex = _this$_getVerticalRan2[1],\n _visibleRowStartIndex = _this$_getVerticalRan2[2],\n _visibleRowStopIndex = _this$_getVerticalRan2[3];\n\n this._callOnItemsRendered(_overscanColumnStartIndex, _overscanColumnStopIndex, _overscanRowStartIndex, _overscanRowStopIndex, _visibleColumnStartIndex, _visibleColumnStopIndex, _visibleRowStartIndex, _visibleRowStopIndex);\n }\n }\n\n if (typeof onScroll === 'function') {\n var _this$state3 = this.state,\n _horizontalScrollDirection = _this$state3.horizontalScrollDirection,\n _scrollLeft = _this$state3.scrollLeft,\n _scrollTop = _this$state3.scrollTop,\n _scrollUpdateWasRequested = _this$state3.scrollUpdateWasRequested,\n _verticalScrollDirection = _this$state3.verticalScrollDirection;\n\n this._callOnScroll(_scrollLeft, _scrollTop, _horizontalScrollDirection, _verticalScrollDirection, _scrollUpdateWasRequested);\n }\n } // Lazily create and cache item styles while scrolling,\n // So that pure component sCU will prevent re-renders.\n // We maintain this cache, and pass a style prop rather than index,\n // So that List can clear cached styles and force item re-render if necessary.\n ;\n\n _proto._getHorizontalRangeToRender = function _getHorizontalRangeToRender() {\n var _this$props6 = this.props,\n columnCount = _this$props6.columnCount,\n overscanColumnCount = _this$props6.overscanColumnCount,\n overscanColumnsCount = _this$props6.overscanColumnsCount,\n overscanCount = _this$props6.overscanCount,\n rowCount = _this$props6.rowCount;\n var _this$state4 = this.state,\n horizontalScrollDirection = _this$state4.horizontalScrollDirection,\n isScrolling = _this$state4.isScrolling,\n scrollLeft = _this$state4.scrollLeft;\n var overscanCountResolved = overscanColumnCount || overscanColumnsCount || overscanCount || 1;\n\n if (columnCount === 0 || rowCount === 0) {\n return [0, 0, 0, 0];\n }\n\n var startIndex = getColumnStartIndexForOffset(this.props, scrollLeft, this._instanceProps);\n var stopIndex = getColumnStopIndexForStartIndex(this.props, startIndex, scrollLeft, this._instanceProps); // Overscan by one item in each direction so that tab/focus works.\n // If there isn't at least one extra item, tab loops back around.\n\n var overscanBackward = !isScrolling || horizontalScrollDirection === 'backward' ? Math.max(1, overscanCountResolved) : 1;\n var overscanForward = !isScrolling || horizontalScrollDirection === 'forward' ? Math.max(1, overscanCountResolved) : 1;\n return [Math.max(0, startIndex - overscanBackward), Math.max(0, Math.min(columnCount - 1, stopIndex + overscanForward)), startIndex, stopIndex];\n };\n\n _proto._getVerticalRangeToRender = function _getVerticalRangeToRender() {\n var _this$props7 = this.props,\n columnCount = _this$props7.columnCount,\n overscanCount = _this$props7.overscanCount,\n overscanRowCount = _this$props7.overscanRowCount,\n overscanRowsCount = _this$props7.overscanRowsCount,\n rowCount = _this$props7.rowCount;\n var _this$state5 = this.state,\n isScrolling = _this$state5.isScrolling,\n verticalScrollDirection = _this$state5.verticalScrollDirection,\n scrollTop = _this$state5.scrollTop;\n var overscanCountResolved = overscanRowCount || overscanRowsCount || overscanCount || 1;\n\n if (columnCount === 0 || rowCount === 0) {\n return [0, 0, 0, 0];\n }\n\n var startIndex = getRowStartIndexForOffset(this.props, scrollTop, this._instanceProps);\n var stopIndex = getRowStopIndexForStartIndex(this.props, startIndex, scrollTop, this._instanceProps); // Overscan by one item in each direction so that tab/focus works.\n // If there isn't at least one extra item, tab loops back around.\n\n var overscanBackward = !isScrolling || verticalScrollDirection === 'backward' ? Math.max(1, overscanCountResolved) : 1;\n var overscanForward = !isScrolling || verticalScrollDirection === 'forward' ? Math.max(1, overscanCountResolved) : 1;\n return [Math.max(0, startIndex - overscanBackward), Math.max(0, Math.min(rowCount - 1, stopIndex + overscanForward)), startIndex, stopIndex];\n };\n\n return Grid;\n }(PureComponent), _class.defaultProps = {\n direction: 'ltr',\n itemData: undefined,\n useIsScrolling: false\n }, _class;\n}\n\nvar validateSharedProps = function validateSharedProps(_ref5, _ref6) {\n var children = _ref5.children,\n direction = _ref5.direction,\n height = _ref5.height,\n innerTagName = _ref5.innerTagName,\n outerTagName = _ref5.outerTagName,\n overscanColumnsCount = _ref5.overscanColumnsCount,\n overscanCount = _ref5.overscanCount,\n overscanRowsCount = _ref5.overscanRowsCount,\n width = _ref5.width;\n var instance = _ref6.instance;\n\n if (process.env.NODE_ENV !== 'production') {\n if (typeof overscanCount === 'number') {\n if (devWarningsOverscanCount && !devWarningsOverscanCount.has(instance)) {\n devWarningsOverscanCount.add(instance);\n console.warn('The overscanCount prop has been deprecated. ' + 'Please use the overscanColumnCount and overscanRowCount props instead.');\n }\n }\n\n if (typeof overscanColumnsCount === 'number' || typeof overscanRowsCount === 'number') {\n if (devWarningsOverscanRowsColumnsCount && !devWarningsOverscanRowsColumnsCount.has(instance)) {\n devWarningsOverscanRowsColumnsCount.add(instance);\n console.warn('The overscanColumnsCount and overscanRowsCount props have been deprecated. ' + 'Please use the overscanColumnCount and overscanRowCount props instead.');\n }\n }\n\n if (innerTagName != null || outerTagName != null) {\n if (devWarningsTagName && !devWarningsTagName.has(instance)) {\n devWarningsTagName.add(instance);\n console.warn('The innerTagName and outerTagName props have been deprecated. ' + 'Please use the innerElementType and outerElementType props instead.');\n }\n }\n\n if (children == null) {\n throw Error('An invalid \"children\" prop has been specified. ' + 'Value should be a React component. ' + (\"\\\"\" + (children === null ? 'null' : typeof children) + \"\\\" was specified.\"));\n }\n\n switch (direction) {\n case 'ltr':\n case 'rtl':\n // Valid values\n break;\n\n default:\n throw Error('An invalid \"direction\" prop has been specified. ' + 'Value should be either \"ltr\" or \"rtl\". ' + (\"\\\"\" + direction + \"\\\" was specified.\"));\n }\n\n if (typeof width !== 'number') {\n throw Error('An invalid \"width\" prop has been specified. ' + 'Grids must specify a number for width. ' + (\"\\\"\" + (width === null ? 'null' : typeof width) + \"\\\" was specified.\"));\n }\n\n if (typeof height !== 'number') {\n throw Error('An invalid \"height\" prop has been specified. ' + 'Grids must specify a number for height. ' + (\"\\\"\" + (height === null ? 'null' : typeof height) + \"\\\" was specified.\"));\n }\n }\n};\n\nvar DEFAULT_ESTIMATED_ITEM_SIZE = 50;\n\nvar getEstimatedTotalHeight = function getEstimatedTotalHeight(_ref, _ref2) {\n var rowCount = _ref.rowCount;\n var rowMetadataMap = _ref2.rowMetadataMap,\n estimatedRowHeight = _ref2.estimatedRowHeight,\n lastMeasuredRowIndex = _ref2.lastMeasuredRowIndex;\n var totalSizeOfMeasuredRows = 0; // Edge case check for when the number of items decreases while a scroll is in progress.\n // https://github.com/bvaughn/react-window/pull/138\n\n if (lastMeasuredRowIndex >= rowCount) {\n lastMeasuredRowIndex = rowCount - 1;\n }\n\n if (lastMeasuredRowIndex >= 0) {\n var itemMetadata = rowMetadataMap[lastMeasuredRowIndex];\n totalSizeOfMeasuredRows = itemMetadata.offset + itemMetadata.size;\n }\n\n var numUnmeasuredItems = rowCount - lastMeasuredRowIndex - 1;\n var totalSizeOfUnmeasuredItems = numUnmeasuredItems * estimatedRowHeight;\n return totalSizeOfMeasuredRows + totalSizeOfUnmeasuredItems;\n};\n\nvar getEstimatedTotalWidth = function getEstimatedTotalWidth(_ref3, _ref4) {\n var columnCount = _ref3.columnCount;\n var columnMetadataMap = _ref4.columnMetadataMap,\n estimatedColumnWidth = _ref4.estimatedColumnWidth,\n lastMeasuredColumnIndex = _ref4.lastMeasuredColumnIndex;\n var totalSizeOfMeasuredRows = 0; // Edge case check for when the number of items decreases while a scroll is in progress.\n // https://github.com/bvaughn/react-window/pull/138\n\n if (lastMeasuredColumnIndex >= columnCount) {\n lastMeasuredColumnIndex = columnCount - 1;\n }\n\n if (lastMeasuredColumnIndex >= 0) {\n var itemMetadata = columnMetadataMap[lastMeasuredColumnIndex];\n totalSizeOfMeasuredRows = itemMetadata.offset + itemMetadata.size;\n }\n\n var numUnmeasuredItems = columnCount - lastMeasuredColumnIndex - 1;\n var totalSizeOfUnmeasuredItems = numUnmeasuredItems * estimatedColumnWidth;\n return totalSizeOfMeasuredRows + totalSizeOfUnmeasuredItems;\n};\n\nvar getItemMetadata = function getItemMetadata(itemType, props, index, instanceProps) {\n var itemMetadataMap, itemSize, lastMeasuredIndex;\n\n if (itemType === 'column') {\n itemMetadataMap = instanceProps.columnMetadataMap;\n itemSize = props.columnWidth;\n lastMeasuredIndex = instanceProps.lastMeasuredColumnIndex;\n } else {\n itemMetadataMap = instanceProps.rowMetadataMap;\n itemSize = props.rowHeight;\n lastMeasuredIndex = instanceProps.lastMeasuredRowIndex;\n }\n\n if (index > lastMeasuredIndex) {\n var offset = 0;\n\n if (lastMeasuredIndex >= 0) {\n var itemMetadata = itemMetadataMap[lastMeasuredIndex];\n offset = itemMetadata.offset + itemMetadata.size;\n }\n\n for (var i = lastMeasuredIndex + 1; i <= index; i++) {\n var size = itemSize(i);\n itemMetadataMap[i] = {\n offset: offset,\n size: size\n };\n offset += size;\n }\n\n if (itemType === 'column') {\n instanceProps.lastMeasuredColumnIndex = index;\n } else {\n instanceProps.lastMeasuredRowIndex = index;\n }\n }\n\n return itemMetadataMap[index];\n};\n\nvar findNearestItem = function findNearestItem(itemType, props, instanceProps, offset) {\n var itemMetadataMap, lastMeasuredIndex;\n\n if (itemType === 'column') {\n itemMetadataMap = instanceProps.columnMetadataMap;\n lastMeasuredIndex = instanceProps.lastMeasuredColumnIndex;\n } else {\n itemMetadataMap = instanceProps.rowMetadataMap;\n lastMeasuredIndex = instanceProps.lastMeasuredRowIndex;\n }\n\n var lastMeasuredItemOffset = lastMeasuredIndex > 0 ? itemMetadataMap[lastMeasuredIndex].offset : 0;\n\n if (lastMeasuredItemOffset >= offset) {\n // If we've already measured items within this range just use a binary search as it's faster.\n return findNearestItemBinarySearch(itemType, props, instanceProps, lastMeasuredIndex, 0, offset);\n } else {\n // If we haven't yet measured this high, fallback to an exponential search with an inner binary search.\n // The exponential search avoids pre-computing sizes for the full set of items as a binary search would.\n // The overall complexity for this approach is O(log n).\n return findNearestItemExponentialSearch(itemType, props, instanceProps, Math.max(0, lastMeasuredIndex), offset);\n }\n};\n\nvar findNearestItemBinarySearch = function findNearestItemBinarySearch(itemType, props, instanceProps, high, low, offset) {\n while (low <= high) {\n var middle = low + Math.floor((high - low) / 2);\n var currentOffset = getItemMetadata(itemType, props, middle, instanceProps).offset;\n\n if (currentOffset === offset) {\n return middle;\n } else if (currentOffset < offset) {\n low = middle + 1;\n } else if (currentOffset > offset) {\n high = middle - 1;\n }\n }\n\n if (low > 0) {\n return low - 1;\n } else {\n return 0;\n }\n};\n\nvar findNearestItemExponentialSearch = function findNearestItemExponentialSearch(itemType, props, instanceProps, index, offset) {\n var itemCount = itemType === 'column' ? props.columnCount : props.rowCount;\n var interval = 1;\n\n while (index < itemCount && getItemMetadata(itemType, props, index, instanceProps).offset < offset) {\n index += interval;\n interval *= 2;\n }\n\n return findNearestItemBinarySearch(itemType, props, instanceProps, Math.min(index, itemCount - 1), Math.floor(index / 2), offset);\n};\n\nvar getOffsetForIndexAndAlignment = function getOffsetForIndexAndAlignment(itemType, props, index, align, scrollOffset, instanceProps, scrollbarSize) {\n var size = itemType === 'column' ? props.width : props.height;\n var itemMetadata = getItemMetadata(itemType, props, index, instanceProps); // Get estimated total size after ItemMetadata is computed,\n // To ensure it reflects actual measurements instead of just estimates.\n\n var estimatedTotalSize = itemType === 'column' ? getEstimatedTotalWidth(props, instanceProps) : getEstimatedTotalHeight(props, instanceProps);\n var maxOffset = Math.max(0, Math.min(estimatedTotalSize - size, itemMetadata.offset));\n var minOffset = Math.max(0, itemMetadata.offset - size + scrollbarSize + itemMetadata.size);\n\n if (align === 'smart') {\n if (scrollOffset >= minOffset - size && scrollOffset <= maxOffset + size) {\n align = 'auto';\n } else {\n align = 'center';\n }\n }\n\n switch (align) {\n case 'start':\n return maxOffset;\n\n case 'end':\n return minOffset;\n\n case 'center':\n return Math.round(minOffset + (maxOffset - minOffset) / 2);\n\n case 'auto':\n default:\n if (scrollOffset >= minOffset && scrollOffset <= maxOffset) {\n return scrollOffset;\n } else if (minOffset > maxOffset) {\n // Because we only take into account the scrollbar size when calculating minOffset\n // this value can be larger than maxOffset when at the end of the list\n return minOffset;\n } else if (scrollOffset < minOffset) {\n return minOffset;\n } else {\n return maxOffset;\n }\n\n }\n};\n\nvar VariableSizeGrid = /*#__PURE__*/createGridComponent({\n getColumnOffset: function getColumnOffset(props, index, instanceProps) {\n return getItemMetadata('column', props, index, instanceProps).offset;\n },\n getColumnStartIndexForOffset: function getColumnStartIndexForOffset(props, scrollLeft, instanceProps) {\n return findNearestItem('column', props, instanceProps, scrollLeft);\n },\n getColumnStopIndexForStartIndex: function getColumnStopIndexForStartIndex(props, startIndex, scrollLeft, instanceProps) {\n var columnCount = props.columnCount,\n width = props.width;\n var itemMetadata = getItemMetadata('column', props, startIndex, instanceProps);\n var maxOffset = scrollLeft + width;\n var offset = itemMetadata.offset + itemMetadata.size;\n var stopIndex = startIndex;\n\n while (stopIndex < columnCount - 1 && offset < maxOffset) {\n stopIndex++;\n offset += getItemMetadata('column', props, stopIndex, instanceProps).size;\n }\n\n return stopIndex;\n },\n getColumnWidth: function getColumnWidth(props, index, instanceProps) {\n return instanceProps.columnMetadataMap[index].size;\n },\n getEstimatedTotalHeight: getEstimatedTotalHeight,\n getEstimatedTotalWidth: getEstimatedTotalWidth,\n getOffsetForColumnAndAlignment: function getOffsetForColumnAndAlignment(props, index, align, scrollOffset, instanceProps, scrollbarSize) {\n return getOffsetForIndexAndAlignment('column', props, index, align, scrollOffset, instanceProps, scrollbarSize);\n },\n getOffsetForRowAndAlignment: function getOffsetForRowAndAlignment(props, index, align, scrollOffset, instanceProps, scrollbarSize) {\n return getOffsetForIndexAndAlignment('row', props, index, align, scrollOffset, instanceProps, scrollbarSize);\n },\n getRowOffset: function getRowOffset(props, index, instanceProps) {\n return getItemMetadata('row', props, index, instanceProps).offset;\n },\n getRowHeight: function getRowHeight(props, index, instanceProps) {\n return instanceProps.rowMetadataMap[index].size;\n },\n getRowStartIndexForOffset: function getRowStartIndexForOffset(props, scrollTop, instanceProps) {\n return findNearestItem('row', props, instanceProps, scrollTop);\n },\n getRowStopIndexForStartIndex: function getRowStopIndexForStartIndex(props, startIndex, scrollTop, instanceProps) {\n var rowCount = props.rowCount,\n height = props.height;\n var itemMetadata = getItemMetadata('row', props, startIndex, instanceProps);\n var maxOffset = scrollTop + height;\n var offset = itemMetadata.offset + itemMetadata.size;\n var stopIndex = startIndex;\n\n while (stopIndex < rowCount - 1 && offset < maxOffset) {\n stopIndex++;\n offset += getItemMetadata('row', props, stopIndex, instanceProps).size;\n }\n\n return stopIndex;\n },\n initInstanceProps: function initInstanceProps(props, instance) {\n var _ref5 = props,\n estimatedColumnWidth = _ref5.estimatedColumnWidth,\n estimatedRowHeight = _ref5.estimatedRowHeight;\n var instanceProps = {\n columnMetadataMap: {},\n estimatedColumnWidth: estimatedColumnWidth || DEFAULT_ESTIMATED_ITEM_SIZE,\n estimatedRowHeight: estimatedRowHeight || DEFAULT_ESTIMATED_ITEM_SIZE,\n lastMeasuredColumnIndex: -1,\n lastMeasuredRowIndex: -1,\n rowMetadataMap: {}\n };\n\n instance.resetAfterColumnIndex = function (columnIndex, shouldForceUpdate) {\n if (shouldForceUpdate === void 0) {\n shouldForceUpdate = true;\n }\n\n instance.resetAfterIndices({\n columnIndex: columnIndex,\n shouldForceUpdate: shouldForceUpdate\n });\n };\n\n instance.resetAfterRowIndex = function (rowIndex, shouldForceUpdate) {\n if (shouldForceUpdate === void 0) {\n shouldForceUpdate = true;\n }\n\n instance.resetAfterIndices({\n rowIndex: rowIndex,\n shouldForceUpdate: shouldForceUpdate\n });\n };\n\n instance.resetAfterIndices = function (_ref6) {\n var columnIndex = _ref6.columnIndex,\n rowIndex = _ref6.rowIndex,\n _ref6$shouldForceUpda = _ref6.shouldForceUpdate,\n shouldForceUpdate = _ref6$shouldForceUpda === void 0 ? true : _ref6$shouldForceUpda;\n\n if (typeof columnIndex === 'number') {\n instanceProps.lastMeasuredColumnIndex = Math.min(instanceProps.lastMeasuredColumnIndex, columnIndex - 1);\n }\n\n if (typeof rowIndex === 'number') {\n instanceProps.lastMeasuredRowIndex = Math.min(instanceProps.lastMeasuredRowIndex, rowIndex - 1);\n } // We could potentially optimize further by only evicting styles after this index,\n // But since styles are only cached while scrolling is in progress-\n // It seems an unnecessary optimization.\n // It's unlikely that resetAfterIndex() will be called while a user is scrolling.\n\n\n instance._getItemStyleCache(-1);\n\n if (shouldForceUpdate) {\n instance.forceUpdate();\n }\n };\n\n return instanceProps;\n },\n shouldResetStyleCacheOnItemSizeChange: false,\n validateProps: function validateProps(_ref7) {\n var columnWidth = _ref7.columnWidth,\n rowHeight = _ref7.rowHeight;\n\n if (process.env.NODE_ENV !== 'production') {\n if (typeof columnWidth !== 'function') {\n throw Error('An invalid \"columnWidth\" prop has been specified. ' + 'Value should be a function. ' + (\"\\\"\" + (columnWidth === null ? 'null' : typeof columnWidth) + \"\\\" was specified.\"));\n } else if (typeof rowHeight !== 'function') {\n throw Error('An invalid \"rowHeight\" prop has been specified. ' + 'Value should be a function. ' + (\"\\\"\" + (rowHeight === null ? 'null' : typeof rowHeight) + \"\\\" was specified.\"));\n }\n }\n }\n});\n\nvar IS_SCROLLING_DEBOUNCE_INTERVAL$1 = 150;\n\nvar defaultItemKey$1 = function defaultItemKey(index, data) {\n return index;\n}; // In DEV mode, this Set helps us only log a warning once per component instance.\n// This avoids spamming the console every time a render happens.\n\n\nvar devWarningsDirection = null;\nvar devWarningsTagName$1 = null;\n\nif (process.env.NODE_ENV !== 'production') {\n if (typeof window !== 'undefined' && typeof window.WeakSet !== 'undefined') {\n devWarningsDirection = /*#__PURE__*/new WeakSet();\n devWarningsTagName$1 = /*#__PURE__*/new WeakSet();\n }\n}\n\nfunction createListComponent(_ref) {\n var _class;\n\n var getItemOffset = _ref.getItemOffset,\n getEstimatedTotalSize = _ref.getEstimatedTotalSize,\n getItemSize = _ref.getItemSize,\n getOffsetForIndexAndAlignment = _ref.getOffsetForIndexAndAlignment,\n getStartIndexForOffset = _ref.getStartIndexForOffset,\n getStopIndexForStartIndex = _ref.getStopIndexForStartIndex,\n initInstanceProps = _ref.initInstanceProps,\n shouldResetStyleCacheOnItemSizeChange = _ref.shouldResetStyleCacheOnItemSizeChange,\n validateProps = _ref.validateProps;\n return _class = /*#__PURE__*/function (_PureComponent) {\n _inheritsLoose(List, _PureComponent);\n\n // Always use explicit constructor for React components.\n // It produces less code after transpilation. (#26)\n // eslint-disable-next-line no-useless-constructor\n function List(props) {\n var _this;\n\n _this = _PureComponent.call(this, props) || this;\n _this._instanceProps = initInstanceProps(_this.props, _assertThisInitialized(_this));\n _this._outerRef = void 0;\n _this._resetIsScrollingTimeoutId = null;\n _this.state = {\n instance: _assertThisInitialized(_this),\n isScrolling: false,\n scrollDirection: 'forward',\n scrollOffset: typeof _this.props.initialScrollOffset === 'number' ? _this.props.initialScrollOffset : 0,\n scrollUpdateWasRequested: false\n };\n _this._callOnItemsRendered = void 0;\n _this._callOnItemsRendered = memoizeOne(function (overscanStartIndex, overscanStopIndex, visibleStartIndex, visibleStopIndex) {\n return _this.props.onItemsRendered({\n overscanStartIndex: overscanStartIndex,\n overscanStopIndex: overscanStopIndex,\n visibleStartIndex: visibleStartIndex,\n visibleStopIndex: visibleStopIndex\n });\n });\n _this._callOnScroll = void 0;\n _this._callOnScroll = memoizeOne(function (scrollDirection, scrollOffset, scrollUpdateWasRequested) {\n return _this.props.onScroll({\n scrollDirection: scrollDirection,\n scrollOffset: scrollOffset,\n scrollUpdateWasRequested: scrollUpdateWasRequested\n });\n });\n _this._getItemStyle = void 0;\n\n _this._getItemStyle = function (index) {\n var _this$props = _this.props,\n direction = _this$props.direction,\n itemSize = _this$props.itemSize,\n layout = _this$props.layout;\n\n var itemStyleCache = _this._getItemStyleCache(shouldResetStyleCacheOnItemSizeChange && itemSize, shouldResetStyleCacheOnItemSizeChange && layout, shouldResetStyleCacheOnItemSizeChange && direction);\n\n var style;\n\n if (itemStyleCache.hasOwnProperty(index)) {\n style = itemStyleCache[index];\n } else {\n var _offset = getItemOffset(_this.props, index, _this._instanceProps);\n\n var size = getItemSize(_this.props, index, _this._instanceProps); // TODO Deprecate direction \"horizontal\"\n\n var isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n var isRtl = direction === 'rtl';\n var offsetHorizontal = isHorizontal ? _offset : 0;\n itemStyleCache[index] = style = {\n position: 'absolute',\n left: isRtl ? undefined : offsetHorizontal,\n right: isRtl ? offsetHorizontal : undefined,\n top: !isHorizontal ? _offset : 0,\n height: !isHorizontal ? size : '100%',\n width: isHorizontal ? size : '100%'\n };\n }\n\n return style;\n };\n\n _this._getItemStyleCache = void 0;\n _this._getItemStyleCache = memoizeOne(function (_, __, ___) {\n return {};\n });\n\n _this._onScrollHorizontal = function (event) {\n var _event$currentTarget = event.currentTarget,\n clientWidth = _event$currentTarget.clientWidth,\n scrollLeft = _event$currentTarget.scrollLeft,\n scrollWidth = _event$currentTarget.scrollWidth;\n\n _this.setState(function (prevState) {\n if (prevState.scrollOffset === scrollLeft) {\n // Scroll position may have been updated by cDM/cDU,\n // In which case we don't need to trigger another render,\n // And we don't want to update state.isScrolling.\n return null;\n }\n\n var direction = _this.props.direction;\n var scrollOffset = scrollLeft;\n\n if (direction === 'rtl') {\n // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n // This is not the case for all browsers though (e.g. Chrome reports values as positive, measured relative to the left).\n // It's also easier for this component if we convert offsets to the same format as they would be in for ltr.\n // So the simplest solution is to determine which browser behavior we're dealing with, and convert based on it.\n switch (getRTLOffsetType()) {\n case 'negative':\n scrollOffset = -scrollLeft;\n break;\n\n case 'positive-descending':\n scrollOffset = scrollWidth - clientWidth - scrollLeft;\n break;\n }\n } // Prevent Safari's elastic scrolling from causing visual shaking when scrolling past bounds.\n\n\n scrollOffset = Math.max(0, Math.min(scrollOffset, scrollWidth - clientWidth));\n return {\n isScrolling: true,\n scrollDirection: prevState.scrollOffset < scrollOffset ? 'forward' : 'backward',\n scrollOffset: scrollOffset,\n scrollUpdateWasRequested: false\n };\n }, _this._resetIsScrollingDebounced);\n };\n\n _this._onScrollVertical = function (event) {\n var _event$currentTarget2 = event.currentTarget,\n clientHeight = _event$currentTarget2.clientHeight,\n scrollHeight = _event$currentTarget2.scrollHeight,\n scrollTop = _event$currentTarget2.scrollTop;\n\n _this.setState(function (prevState) {\n if (prevState.scrollOffset === scrollTop) {\n // Scroll position may have been updated by cDM/cDU,\n // In which case we don't need to trigger another render,\n // And we don't want to update state.isScrolling.\n return null;\n } // Prevent Safari's elastic scrolling from causing visual shaking when scrolling past bounds.\n\n\n var scrollOffset = Math.max(0, Math.min(scrollTop, scrollHeight - clientHeight));\n return {\n isScrolling: true,\n scrollDirection: prevState.scrollOffset < scrollOffset ? 'forward' : 'backward',\n scrollOffset: scrollOffset,\n scrollUpdateWasRequested: false\n };\n }, _this._resetIsScrollingDebounced);\n };\n\n _this._outerRefSetter = function (ref) {\n var outerRef = _this.props.outerRef;\n _this._outerRef = ref;\n\n if (typeof outerRef === 'function') {\n outerRef(ref);\n } else if (outerRef != null && typeof outerRef === 'object' && outerRef.hasOwnProperty('current')) {\n outerRef.current = ref;\n }\n };\n\n _this._resetIsScrollingDebounced = function () {\n if (_this._resetIsScrollingTimeoutId !== null) {\n cancelTimeout(_this._resetIsScrollingTimeoutId);\n }\n\n _this._resetIsScrollingTimeoutId = requestTimeout(_this._resetIsScrolling, IS_SCROLLING_DEBOUNCE_INTERVAL$1);\n };\n\n _this._resetIsScrolling = function () {\n _this._resetIsScrollingTimeoutId = null;\n\n _this.setState({\n isScrolling: false\n }, function () {\n // Clear style cache after state update has been committed.\n // This way we don't break pure sCU for items that don't use isScrolling param.\n _this._getItemStyleCache(-1, null);\n });\n };\n\n return _this;\n }\n\n List.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps, prevState) {\n validateSharedProps$1(nextProps, prevState);\n validateProps(nextProps);\n return null;\n };\n\n var _proto = List.prototype;\n\n _proto.scrollTo = function scrollTo(scrollOffset) {\n scrollOffset = Math.max(0, scrollOffset);\n this.setState(function (prevState) {\n if (prevState.scrollOffset === scrollOffset) {\n return null;\n }\n\n return {\n scrollDirection: prevState.scrollOffset < scrollOffset ? 'forward' : 'backward',\n scrollOffset: scrollOffset,\n scrollUpdateWasRequested: true\n };\n }, this._resetIsScrollingDebounced);\n };\n\n _proto.scrollToItem = function scrollToItem(index, align) {\n if (align === void 0) {\n align = 'auto';\n }\n\n var _this$props2 = this.props,\n itemCount = _this$props2.itemCount,\n layout = _this$props2.layout;\n var scrollOffset = this.state.scrollOffset;\n index = Math.max(0, Math.min(index, itemCount - 1)); // The scrollbar size should be considered when scrolling an item into view, to ensure it's fully visible.\n // But we only need to account for its size when it's actually visible.\n // This is an edge case for lists; normally they only scroll in the dominant direction.\n\n var scrollbarSize = 0;\n\n if (this._outerRef) {\n var outerRef = this._outerRef;\n\n if (layout === 'vertical') {\n scrollbarSize = outerRef.scrollWidth > outerRef.clientWidth ? getScrollbarSize() : 0;\n } else {\n scrollbarSize = outerRef.scrollHeight > outerRef.clientHeight ? getScrollbarSize() : 0;\n }\n }\n\n this.scrollTo(getOffsetForIndexAndAlignment(this.props, index, align, scrollOffset, this._instanceProps, scrollbarSize));\n };\n\n _proto.componentDidMount = function componentDidMount() {\n var _this$props3 = this.props,\n direction = _this$props3.direction,\n initialScrollOffset = _this$props3.initialScrollOffset,\n layout = _this$props3.layout;\n\n if (typeof initialScrollOffset === 'number' && this._outerRef != null) {\n var outerRef = this._outerRef; // TODO Deprecate direction \"horizontal\"\n\n if (direction === 'horizontal' || layout === 'horizontal') {\n outerRef.scrollLeft = initialScrollOffset;\n } else {\n outerRef.scrollTop = initialScrollOffset;\n }\n }\n\n this._callPropsCallbacks();\n };\n\n _proto.componentDidUpdate = function componentDidUpdate() {\n var _this$props4 = this.props,\n direction = _this$props4.direction,\n layout = _this$props4.layout;\n var _this$state = this.state,\n scrollOffset = _this$state.scrollOffset,\n scrollUpdateWasRequested = _this$state.scrollUpdateWasRequested;\n\n if (scrollUpdateWasRequested && this._outerRef != null) {\n var outerRef = this._outerRef; // TODO Deprecate direction \"horizontal\"\n\n if (direction === 'horizontal' || layout === 'horizontal') {\n if (direction === 'rtl') {\n // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n // This is not the case for all browsers though (e.g. Chrome reports values as positive, measured relative to the left).\n // So we need to determine which browser behavior we're dealing with, and mimic it.\n switch (getRTLOffsetType()) {\n case 'negative':\n outerRef.scrollLeft = -scrollOffset;\n break;\n\n case 'positive-ascending':\n outerRef.scrollLeft = scrollOffset;\n break;\n\n default:\n var clientWidth = outerRef.clientWidth,\n scrollWidth = outerRef.scrollWidth;\n outerRef.scrollLeft = scrollWidth - clientWidth - scrollOffset;\n break;\n }\n } else {\n outerRef.scrollLeft = scrollOffset;\n }\n } else {\n outerRef.scrollTop = scrollOffset;\n }\n }\n\n this._callPropsCallbacks();\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (this._resetIsScrollingTimeoutId !== null) {\n cancelTimeout(this._resetIsScrollingTimeoutId);\n }\n };\n\n _proto.render = function render() {\n var _this$props5 = this.props,\n children = _this$props5.children,\n className = _this$props5.className,\n direction = _this$props5.direction,\n height = _this$props5.height,\n innerRef = _this$props5.innerRef,\n innerElementType = _this$props5.innerElementType,\n innerTagName = _this$props5.innerTagName,\n itemCount = _this$props5.itemCount,\n itemData = _this$props5.itemData,\n _this$props5$itemKey = _this$props5.itemKey,\n itemKey = _this$props5$itemKey === void 0 ? defaultItemKey$1 : _this$props5$itemKey,\n layout = _this$props5.layout,\n outerElementType = _this$props5.outerElementType,\n outerTagName = _this$props5.outerTagName,\n style = _this$props5.style,\n useIsScrolling = _this$props5.useIsScrolling,\n width = _this$props5.width;\n var isScrolling = this.state.isScrolling; // TODO Deprecate direction \"horizontal\"\n\n var isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n var onScroll = isHorizontal ? this._onScrollHorizontal : this._onScrollVertical;\n\n var _this$_getRangeToRend = this._getRangeToRender(),\n startIndex = _this$_getRangeToRend[0],\n stopIndex = _this$_getRangeToRend[1];\n\n var items = [];\n\n if (itemCount > 0) {\n for (var _index = startIndex; _index <= stopIndex; _index++) {\n items.push(createElement(children, {\n data: itemData,\n key: itemKey(_index, itemData),\n index: _index,\n isScrolling: useIsScrolling ? isScrolling : undefined,\n style: this._getItemStyle(_index)\n }));\n }\n } // Read this value AFTER items have been created,\n // So their actual sizes (if variable) are taken into consideration.\n\n\n var estimatedTotalSize = getEstimatedTotalSize(this.props, this._instanceProps);\n return createElement(outerElementType || outerTagName || 'div', {\n className: className,\n onScroll: onScroll,\n ref: this._outerRefSetter,\n style: _extends({\n position: 'relative',\n height: height,\n width: width,\n overflow: 'auto',\n WebkitOverflowScrolling: 'touch',\n willChange: 'transform',\n direction: direction\n }, style)\n }, createElement(innerElementType || innerTagName || 'div', {\n children: items,\n ref: innerRef,\n style: {\n height: isHorizontal ? '100%' : estimatedTotalSize,\n pointerEvents: isScrolling ? 'none' : undefined,\n width: isHorizontal ? estimatedTotalSize : '100%'\n }\n }));\n };\n\n _proto._callPropsCallbacks = function _callPropsCallbacks() {\n if (typeof this.props.onItemsRendered === 'function') {\n var itemCount = this.props.itemCount;\n\n if (itemCount > 0) {\n var _this$_getRangeToRend2 = this._getRangeToRender(),\n _overscanStartIndex = _this$_getRangeToRend2[0],\n _overscanStopIndex = _this$_getRangeToRend2[1],\n _visibleStartIndex = _this$_getRangeToRend2[2],\n _visibleStopIndex = _this$_getRangeToRend2[3];\n\n this._callOnItemsRendered(_overscanStartIndex, _overscanStopIndex, _visibleStartIndex, _visibleStopIndex);\n }\n }\n\n if (typeof this.props.onScroll === 'function') {\n var _this$state2 = this.state,\n _scrollDirection = _this$state2.scrollDirection,\n _scrollOffset = _this$state2.scrollOffset,\n _scrollUpdateWasRequested = _this$state2.scrollUpdateWasRequested;\n\n this._callOnScroll(_scrollDirection, _scrollOffset, _scrollUpdateWasRequested);\n }\n } // Lazily create and cache item styles while scrolling,\n // So that pure component sCU will prevent re-renders.\n // We maintain this cache, and pass a style prop rather than index,\n // So that List can clear cached styles and force item re-render if necessary.\n ;\n\n _proto._getRangeToRender = function _getRangeToRender() {\n var _this$props6 = this.props,\n itemCount = _this$props6.itemCount,\n overscanCount = _this$props6.overscanCount;\n var _this$state3 = this.state,\n isScrolling = _this$state3.isScrolling,\n scrollDirection = _this$state3.scrollDirection,\n scrollOffset = _this$state3.scrollOffset;\n\n if (itemCount === 0) {\n return [0, 0, 0, 0];\n }\n\n var startIndex = getStartIndexForOffset(this.props, scrollOffset, this._instanceProps);\n var stopIndex = getStopIndexForStartIndex(this.props, startIndex, scrollOffset, this._instanceProps); // Overscan by one item in each direction so that tab/focus works.\n // If there isn't at least one extra item, tab loops back around.\n\n var overscanBackward = !isScrolling || scrollDirection === 'backward' ? Math.max(1, overscanCount) : 1;\n var overscanForward = !isScrolling || scrollDirection === 'forward' ? Math.max(1, overscanCount) : 1;\n return [Math.max(0, startIndex - overscanBackward), Math.max(0, Math.min(itemCount - 1, stopIndex + overscanForward)), startIndex, stopIndex];\n };\n\n return List;\n }(PureComponent), _class.defaultProps = {\n direction: 'ltr',\n itemData: undefined,\n layout: 'vertical',\n overscanCount: 2,\n useIsScrolling: false\n }, _class;\n} // NOTE: I considered further wrapping individual items with a pure ListItem component.\n// This would avoid ever calling the render function for the same index more than once,\n// But it would also add the overhead of a lot of components/fibers.\n// I assume people already do this (render function returning a class component),\n// So my doing it would just unnecessarily double the wrappers.\n\nvar validateSharedProps$1 = function validateSharedProps(_ref2, _ref3) {\n var children = _ref2.children,\n direction = _ref2.direction,\n height = _ref2.height,\n layout = _ref2.layout,\n innerTagName = _ref2.innerTagName,\n outerTagName = _ref2.outerTagName,\n width = _ref2.width;\n var instance = _ref3.instance;\n\n if (process.env.NODE_ENV !== 'production') {\n if (innerTagName != null || outerTagName != null) {\n if (devWarningsTagName$1 && !devWarningsTagName$1.has(instance)) {\n devWarningsTagName$1.add(instance);\n console.warn('The innerTagName and outerTagName props have been deprecated. ' + 'Please use the innerElementType and outerElementType props instead.');\n }\n } // TODO Deprecate direction \"horizontal\"\n\n\n var isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n\n switch (direction) {\n case 'horizontal':\n case 'vertical':\n if (devWarningsDirection && !devWarningsDirection.has(instance)) {\n devWarningsDirection.add(instance);\n console.warn('The direction prop should be either \"ltr\" (default) or \"rtl\". ' + 'Please use the layout prop to specify \"vertical\" (default) or \"horizontal\" orientation.');\n }\n\n break;\n\n case 'ltr':\n case 'rtl':\n // Valid values\n break;\n\n default:\n throw Error('An invalid \"direction\" prop has been specified. ' + 'Value should be either \"ltr\" or \"rtl\". ' + (\"\\\"\" + direction + \"\\\" was specified.\"));\n }\n\n switch (layout) {\n case 'horizontal':\n case 'vertical':\n // Valid values\n break;\n\n default:\n throw Error('An invalid \"layout\" prop has been specified. ' + 'Value should be either \"horizontal\" or \"vertical\". ' + (\"\\\"\" + layout + \"\\\" was specified.\"));\n }\n\n if (children == null) {\n throw Error('An invalid \"children\" prop has been specified. ' + 'Value should be a React component. ' + (\"\\\"\" + (children === null ? 'null' : typeof children) + \"\\\" was specified.\"));\n }\n\n if (isHorizontal && typeof width !== 'number') {\n throw Error('An invalid \"width\" prop has been specified. ' + 'Horizontal lists must specify a number for width. ' + (\"\\\"\" + (width === null ? 'null' : typeof width) + \"\\\" was specified.\"));\n } else if (!isHorizontal && typeof height !== 'number') {\n throw Error('An invalid \"height\" prop has been specified. ' + 'Vertical lists must specify a number for height. ' + (\"\\\"\" + (height === null ? 'null' : typeof height) + \"\\\" was specified.\"));\n }\n }\n};\n\nvar DEFAULT_ESTIMATED_ITEM_SIZE$1 = 50;\n\nvar getItemMetadata$1 = function getItemMetadata(props, index, instanceProps) {\n var _ref = props,\n itemSize = _ref.itemSize;\n var itemMetadataMap = instanceProps.itemMetadataMap,\n lastMeasuredIndex = instanceProps.lastMeasuredIndex;\n\n if (index > lastMeasuredIndex) {\n var offset = 0;\n\n if (lastMeasuredIndex >= 0) {\n var itemMetadata = itemMetadataMap[lastMeasuredIndex];\n offset = itemMetadata.offset + itemMetadata.size;\n }\n\n for (var i = lastMeasuredIndex + 1; i <= index; i++) {\n var size = itemSize(i);\n itemMetadataMap[i] = {\n offset: offset,\n size: size\n };\n offset += size;\n }\n\n instanceProps.lastMeasuredIndex = index;\n }\n\n return itemMetadataMap[index];\n};\n\nvar findNearestItem$1 = function findNearestItem(props, instanceProps, offset) {\n var itemMetadataMap = instanceProps.itemMetadataMap,\n lastMeasuredIndex = instanceProps.lastMeasuredIndex;\n var lastMeasuredItemOffset = lastMeasuredIndex > 0 ? itemMetadataMap[lastMeasuredIndex].offset : 0;\n\n if (lastMeasuredItemOffset >= offset) {\n // If we've already measured items within this range just use a binary search as it's faster.\n return findNearestItemBinarySearch$1(props, instanceProps, lastMeasuredIndex, 0, offset);\n } else {\n // If we haven't yet measured this high, fallback to an exponential search with an inner binary search.\n // The exponential search avoids pre-computing sizes for the full set of items as a binary search would.\n // The overall complexity for this approach is O(log n).\n return findNearestItemExponentialSearch$1(props, instanceProps, Math.max(0, lastMeasuredIndex), offset);\n }\n};\n\nvar findNearestItemBinarySearch$1 = function findNearestItemBinarySearch(props, instanceProps, high, low, offset) {\n while (low <= high) {\n var middle = low + Math.floor((high - low) / 2);\n var currentOffset = getItemMetadata$1(props, middle, instanceProps).offset;\n\n if (currentOffset === offset) {\n return middle;\n } else if (currentOffset < offset) {\n low = middle + 1;\n } else if (currentOffset > offset) {\n high = middle - 1;\n }\n }\n\n if (low > 0) {\n return low - 1;\n } else {\n return 0;\n }\n};\n\nvar findNearestItemExponentialSearch$1 = function findNearestItemExponentialSearch(props, instanceProps, index, offset) {\n var itemCount = props.itemCount;\n var interval = 1;\n\n while (index < itemCount && getItemMetadata$1(props, index, instanceProps).offset < offset) {\n index += interval;\n interval *= 2;\n }\n\n return findNearestItemBinarySearch$1(props, instanceProps, Math.min(index, itemCount - 1), Math.floor(index / 2), offset);\n};\n\nvar getEstimatedTotalSize = function getEstimatedTotalSize(_ref2, _ref3) {\n var itemCount = _ref2.itemCount;\n var itemMetadataMap = _ref3.itemMetadataMap,\n estimatedItemSize = _ref3.estimatedItemSize,\n lastMeasuredIndex = _ref3.lastMeasuredIndex;\n var totalSizeOfMeasuredItems = 0; // Edge case check for when the number of items decreases while a scroll is in progress.\n // https://github.com/bvaughn/react-window/pull/138\n\n if (lastMeasuredIndex >= itemCount) {\n lastMeasuredIndex = itemCount - 1;\n }\n\n if (lastMeasuredIndex >= 0) {\n var itemMetadata = itemMetadataMap[lastMeasuredIndex];\n totalSizeOfMeasuredItems = itemMetadata.offset + itemMetadata.size;\n }\n\n var numUnmeasuredItems = itemCount - lastMeasuredIndex - 1;\n var totalSizeOfUnmeasuredItems = numUnmeasuredItems * estimatedItemSize;\n return totalSizeOfMeasuredItems + totalSizeOfUnmeasuredItems;\n};\n\nvar VariableSizeList = /*#__PURE__*/createListComponent({\n getItemOffset: function getItemOffset(props, index, instanceProps) {\n return getItemMetadata$1(props, index, instanceProps).offset;\n },\n getItemSize: function getItemSize(props, index, instanceProps) {\n return instanceProps.itemMetadataMap[index].size;\n },\n getEstimatedTotalSize: getEstimatedTotalSize,\n getOffsetForIndexAndAlignment: function getOffsetForIndexAndAlignment(props, index, align, scrollOffset, instanceProps, scrollbarSize) {\n var direction = props.direction,\n height = props.height,\n layout = props.layout,\n width = props.width; // TODO Deprecate direction \"horizontal\"\n\n var isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n var size = isHorizontal ? width : height;\n var itemMetadata = getItemMetadata$1(props, index, instanceProps); // Get estimated total size after ItemMetadata is computed,\n // To ensure it reflects actual measurements instead of just estimates.\n\n var estimatedTotalSize = getEstimatedTotalSize(props, instanceProps);\n var maxOffset = Math.max(0, Math.min(estimatedTotalSize - size, itemMetadata.offset));\n var minOffset = Math.max(0, itemMetadata.offset - size + itemMetadata.size + scrollbarSize);\n\n if (align === 'smart') {\n if (scrollOffset >= minOffset - size && scrollOffset <= maxOffset + size) {\n align = 'auto';\n } else {\n align = 'center';\n }\n }\n\n switch (align) {\n case 'start':\n return maxOffset;\n\n case 'end':\n return minOffset;\n\n case 'center':\n return Math.round(minOffset + (maxOffset - minOffset) / 2);\n\n case 'auto':\n default:\n if (scrollOffset >= minOffset && scrollOffset <= maxOffset) {\n return scrollOffset;\n } else if (scrollOffset < minOffset) {\n return minOffset;\n } else {\n return maxOffset;\n }\n\n }\n },\n getStartIndexForOffset: function getStartIndexForOffset(props, offset, instanceProps) {\n return findNearestItem$1(props, instanceProps, offset);\n },\n getStopIndexForStartIndex: function getStopIndexForStartIndex(props, startIndex, scrollOffset, instanceProps) {\n var direction = props.direction,\n height = props.height,\n itemCount = props.itemCount,\n layout = props.layout,\n width = props.width; // TODO Deprecate direction \"horizontal\"\n\n var isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n var size = isHorizontal ? width : height;\n var itemMetadata = getItemMetadata$1(props, startIndex, instanceProps);\n var maxOffset = scrollOffset + size;\n var offset = itemMetadata.offset + itemMetadata.size;\n var stopIndex = startIndex;\n\n while (stopIndex < itemCount - 1 && offset < maxOffset) {\n stopIndex++;\n offset += getItemMetadata$1(props, stopIndex, instanceProps).size;\n }\n\n return stopIndex;\n },\n initInstanceProps: function initInstanceProps(props, instance) {\n var _ref4 = props,\n estimatedItemSize = _ref4.estimatedItemSize;\n var instanceProps = {\n itemMetadataMap: {},\n estimatedItemSize: estimatedItemSize || DEFAULT_ESTIMATED_ITEM_SIZE$1,\n lastMeasuredIndex: -1\n };\n\n instance.resetAfterIndex = function (index, shouldForceUpdate) {\n if (shouldForceUpdate === void 0) {\n shouldForceUpdate = true;\n }\n\n instanceProps.lastMeasuredIndex = Math.min(instanceProps.lastMeasuredIndex, index - 1); // We could potentially optimize further by only evicting styles after this index,\n // But since styles are only cached while scrolling is in progress-\n // It seems an unnecessary optimization.\n // It's unlikely that resetAfterIndex() will be called while a user is scrolling.\n\n instance._getItemStyleCache(-1);\n\n if (shouldForceUpdate) {\n instance.forceUpdate();\n }\n };\n\n return instanceProps;\n },\n shouldResetStyleCacheOnItemSizeChange: false,\n validateProps: function validateProps(_ref5) {\n var itemSize = _ref5.itemSize;\n\n if (process.env.NODE_ENV !== 'production') {\n if (typeof itemSize !== 'function') {\n throw Error('An invalid \"itemSize\" prop has been specified. ' + 'Value should be a function. ' + (\"\\\"\" + (itemSize === null ? 'null' : typeof itemSize) + \"\\\" was specified.\"));\n }\n }\n }\n});\n\nvar FixedSizeGrid = /*#__PURE__*/createGridComponent({\n getColumnOffset: function getColumnOffset(_ref, index) {\n var columnWidth = _ref.columnWidth;\n return index * columnWidth;\n },\n getColumnWidth: function getColumnWidth(_ref2, index) {\n var columnWidth = _ref2.columnWidth;\n return columnWidth;\n },\n getRowOffset: function getRowOffset(_ref3, index) {\n var rowHeight = _ref3.rowHeight;\n return index * rowHeight;\n },\n getRowHeight: function getRowHeight(_ref4, index) {\n var rowHeight = _ref4.rowHeight;\n return rowHeight;\n },\n getEstimatedTotalHeight: function getEstimatedTotalHeight(_ref5) {\n var rowCount = _ref5.rowCount,\n rowHeight = _ref5.rowHeight;\n return rowHeight * rowCount;\n },\n getEstimatedTotalWidth: function getEstimatedTotalWidth(_ref6) {\n var columnCount = _ref6.columnCount,\n columnWidth = _ref6.columnWidth;\n return columnWidth * columnCount;\n },\n getOffsetForColumnAndAlignment: function getOffsetForColumnAndAlignment(_ref7, columnIndex, align, scrollLeft, instanceProps, scrollbarSize) {\n var columnCount = _ref7.columnCount,\n columnWidth = _ref7.columnWidth,\n width = _ref7.width;\n var lastColumnOffset = Math.max(0, columnCount * columnWidth - width);\n var maxOffset = Math.min(lastColumnOffset, columnIndex * columnWidth);\n var minOffset = Math.max(0, columnIndex * columnWidth - width + scrollbarSize + columnWidth);\n\n if (align === 'smart') {\n if (scrollLeft >= minOffset - width && scrollLeft <= maxOffset + width) {\n align = 'auto';\n } else {\n align = 'center';\n }\n }\n\n switch (align) {\n case 'start':\n return maxOffset;\n\n case 'end':\n return minOffset;\n\n case 'center':\n // \"Centered\" offset is usually the average of the min and max.\n // But near the edges of the list, this doesn't hold true.\n var middleOffset = Math.round(minOffset + (maxOffset - minOffset) / 2);\n\n if (middleOffset < Math.ceil(width / 2)) {\n return 0; // near the beginning\n } else if (middleOffset > lastColumnOffset + Math.floor(width / 2)) {\n return lastColumnOffset; // near the end\n } else {\n return middleOffset;\n }\n\n case 'auto':\n default:\n if (scrollLeft >= minOffset && scrollLeft <= maxOffset) {\n return scrollLeft;\n } else if (minOffset > maxOffset) {\n // Because we only take into account the scrollbar size when calculating minOffset\n // this value can be larger than maxOffset when at the end of the list\n return minOffset;\n } else if (scrollLeft < minOffset) {\n return minOffset;\n } else {\n return maxOffset;\n }\n\n }\n },\n getOffsetForRowAndAlignment: function getOffsetForRowAndAlignment(_ref8, rowIndex, align, scrollTop, instanceProps, scrollbarSize) {\n var rowHeight = _ref8.rowHeight,\n height = _ref8.height,\n rowCount = _ref8.rowCount;\n var lastRowOffset = Math.max(0, rowCount * rowHeight - height);\n var maxOffset = Math.min(lastRowOffset, rowIndex * rowHeight);\n var minOffset = Math.max(0, rowIndex * rowHeight - height + scrollbarSize + rowHeight);\n\n if (align === 'smart') {\n if (scrollTop >= minOffset - height && scrollTop <= maxOffset + height) {\n align = 'auto';\n } else {\n align = 'center';\n }\n }\n\n switch (align) {\n case 'start':\n return maxOffset;\n\n case 'end':\n return minOffset;\n\n case 'center':\n // \"Centered\" offset is usually the average of the min and max.\n // But near the edges of the list, this doesn't hold true.\n var middleOffset = Math.round(minOffset + (maxOffset - minOffset) / 2);\n\n if (middleOffset < Math.ceil(height / 2)) {\n return 0; // near the beginning\n } else if (middleOffset > lastRowOffset + Math.floor(height / 2)) {\n return lastRowOffset; // near the end\n } else {\n return middleOffset;\n }\n\n case 'auto':\n default:\n if (scrollTop >= minOffset && scrollTop <= maxOffset) {\n return scrollTop;\n } else if (minOffset > maxOffset) {\n // Because we only take into account the scrollbar size when calculating minOffset\n // this value can be larger than maxOffset when at the end of the list\n return minOffset;\n } else if (scrollTop < minOffset) {\n return minOffset;\n } else {\n return maxOffset;\n }\n\n }\n },\n getColumnStartIndexForOffset: function getColumnStartIndexForOffset(_ref9, scrollLeft) {\n var columnWidth = _ref9.columnWidth,\n columnCount = _ref9.columnCount;\n return Math.max(0, Math.min(columnCount - 1, Math.floor(scrollLeft / columnWidth)));\n },\n getColumnStopIndexForStartIndex: function getColumnStopIndexForStartIndex(_ref10, startIndex, scrollLeft) {\n var columnWidth = _ref10.columnWidth,\n columnCount = _ref10.columnCount,\n width = _ref10.width;\n var left = startIndex * columnWidth;\n var numVisibleColumns = Math.ceil((width + scrollLeft - left) / columnWidth);\n return Math.max(0, Math.min(columnCount - 1, startIndex + numVisibleColumns - 1 // -1 is because stop index is inclusive\n ));\n },\n getRowStartIndexForOffset: function getRowStartIndexForOffset(_ref11, scrollTop) {\n var rowHeight = _ref11.rowHeight,\n rowCount = _ref11.rowCount;\n return Math.max(0, Math.min(rowCount - 1, Math.floor(scrollTop / rowHeight)));\n },\n getRowStopIndexForStartIndex: function getRowStopIndexForStartIndex(_ref12, startIndex, scrollTop) {\n var rowHeight = _ref12.rowHeight,\n rowCount = _ref12.rowCount,\n height = _ref12.height;\n var top = startIndex * rowHeight;\n var numVisibleRows = Math.ceil((height + scrollTop - top) / rowHeight);\n return Math.max(0, Math.min(rowCount - 1, startIndex + numVisibleRows - 1 // -1 is because stop index is inclusive\n ));\n },\n initInstanceProps: function initInstanceProps(props) {// Noop\n },\n shouldResetStyleCacheOnItemSizeChange: true,\n validateProps: function validateProps(_ref13) {\n var columnWidth = _ref13.columnWidth,\n rowHeight = _ref13.rowHeight;\n\n if (process.env.NODE_ENV !== 'production') {\n if (typeof columnWidth !== 'number') {\n throw Error('An invalid \"columnWidth\" prop has been specified. ' + 'Value should be a number. ' + (\"\\\"\" + (columnWidth === null ? 'null' : typeof columnWidth) + \"\\\" was specified.\"));\n }\n\n if (typeof rowHeight !== 'number') {\n throw Error('An invalid \"rowHeight\" prop has been specified. ' + 'Value should be a number. ' + (\"\\\"\" + (rowHeight === null ? 'null' : typeof rowHeight) + \"\\\" was specified.\"));\n }\n }\n }\n});\n\nvar FixedSizeList = /*#__PURE__*/createListComponent({\n getItemOffset: function getItemOffset(_ref, index) {\n var itemSize = _ref.itemSize;\n return index * itemSize;\n },\n getItemSize: function getItemSize(_ref2, index) {\n var itemSize = _ref2.itemSize;\n return itemSize;\n },\n getEstimatedTotalSize: function getEstimatedTotalSize(_ref3) {\n var itemCount = _ref3.itemCount,\n itemSize = _ref3.itemSize;\n return itemSize * itemCount;\n },\n getOffsetForIndexAndAlignment: function getOffsetForIndexAndAlignment(_ref4, index, align, scrollOffset, instanceProps, scrollbarSize) {\n var direction = _ref4.direction,\n height = _ref4.height,\n itemCount = _ref4.itemCount,\n itemSize = _ref4.itemSize,\n layout = _ref4.layout,\n width = _ref4.width;\n // TODO Deprecate direction \"horizontal\"\n var isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n var size = isHorizontal ? width : height;\n var lastItemOffset = Math.max(0, itemCount * itemSize - size);\n var maxOffset = Math.min(lastItemOffset, index * itemSize);\n var minOffset = Math.max(0, index * itemSize - size + itemSize + scrollbarSize);\n\n if (align === 'smart') {\n if (scrollOffset >= minOffset - size && scrollOffset <= maxOffset + size) {\n align = 'auto';\n } else {\n align = 'center';\n }\n }\n\n switch (align) {\n case 'start':\n return maxOffset;\n\n case 'end':\n return minOffset;\n\n case 'center':\n {\n // \"Centered\" offset is usually the average of the min and max.\n // But near the edges of the list, this doesn't hold true.\n var middleOffset = Math.round(minOffset + (maxOffset - minOffset) / 2);\n\n if (middleOffset < Math.ceil(size / 2)) {\n return 0; // near the beginning\n } else if (middleOffset > lastItemOffset + Math.floor(size / 2)) {\n return lastItemOffset; // near the end\n } else {\n return middleOffset;\n }\n }\n\n case 'auto':\n default:\n if (scrollOffset >= minOffset && scrollOffset <= maxOffset) {\n return scrollOffset;\n } else if (scrollOffset < minOffset) {\n return minOffset;\n } else {\n return maxOffset;\n }\n\n }\n },\n getStartIndexForOffset: function getStartIndexForOffset(_ref5, offset) {\n var itemCount = _ref5.itemCount,\n itemSize = _ref5.itemSize;\n return Math.max(0, Math.min(itemCount - 1, Math.floor(offset / itemSize)));\n },\n getStopIndexForStartIndex: function getStopIndexForStartIndex(_ref6, startIndex, scrollOffset) {\n var direction = _ref6.direction,\n height = _ref6.height,\n itemCount = _ref6.itemCount,\n itemSize = _ref6.itemSize,\n layout = _ref6.layout,\n width = _ref6.width;\n // TODO Deprecate direction \"horizontal\"\n var isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n var offset = startIndex * itemSize;\n var size = isHorizontal ? width : height;\n var numVisibleItems = Math.ceil((size + scrollOffset - offset) / itemSize);\n return Math.max(0, Math.min(itemCount - 1, startIndex + numVisibleItems - 1 // -1 is because stop index is inclusive\n ));\n },\n initInstanceProps: function initInstanceProps(props) {// Noop\n },\n shouldResetStyleCacheOnItemSizeChange: true,\n validateProps: function validateProps(_ref7) {\n var itemSize = _ref7.itemSize;\n\n if (process.env.NODE_ENV !== 'production') {\n if (typeof itemSize !== 'number') {\n throw Error('An invalid \"itemSize\" prop has been specified. ' + 'Value should be a number. ' + (\"\\\"\" + (itemSize === null ? 'null' : typeof itemSize) + \"\\\" was specified.\"));\n }\n }\n }\n});\n\n// Pulled from react-compat\n// https://github.com/developit/preact-compat/blob/7c5de00e7c85e2ffd011bf3af02899b63f699d3a/src/index.js#L349\nfunction shallowDiffers(prev, next) {\n for (var attribute in prev) {\n if (!(attribute in next)) {\n return true;\n }\n }\n\n for (var _attribute in next) {\n if (prev[_attribute] !== next[_attribute]) {\n return true;\n }\n }\n\n return false;\n}\n\nvar _excluded = [\"style\"],\n _excluded2 = [\"style\"];\n// It knows to compare individual style props and ignore the wrapper object.\n// See https://reactjs.org/docs/react-api.html#reactmemo\n\nfunction areEqual(prevProps, nextProps) {\n var prevStyle = prevProps.style,\n prevRest = _objectWithoutPropertiesLoose(prevProps, _excluded);\n\n var nextStyle = nextProps.style,\n nextRest = _objectWithoutPropertiesLoose(nextProps, _excluded2);\n\n return !shallowDiffers(prevStyle, nextStyle) && !shallowDiffers(prevRest, nextRest);\n}\n\n// It knows to compare individual style props and ignore the wrapper object.\n// See https://reactjs.org/docs/react-component.html#shouldcomponentupdate\n\nfunction shouldComponentUpdate(nextProps, nextState) {\n return !areEqual(this.props, nextProps) || shallowDiffers(this.state, nextState);\n}\n\nexport { FixedSizeGrid, FixedSizeList, VariableSizeGrid, VariableSizeList, areEqual, shouldComponentUpdate };\n//# sourceMappingURL=index.esm.js.map\n","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { useDndContext, useTreeApi } from \"../context\";\nexport function Cursor() {\n var _a, _b;\n const tree = useTreeApi();\n const state = useDndContext();\n const cursor = state.cursor;\n if (!cursor || cursor.type !== \"line\")\n return null;\n const indent = tree.indent;\n const top = tree.rowHeight * cursor.index +\n ((_b = (_a = tree.props.padding) !== null && _a !== void 0 ? _a : tree.props.paddingTop) !== null && _b !== void 0 ? _b : 0);\n const left = indent * cursor.level;\n const Cursor = tree.renderCursor;\n return _jsx(Cursor, { top, left, indent });\n}\n","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { forwardRef } from \"react\";\nimport { useTreeApi } from \"../context\";\nimport { Cursor } from \"./cursor\";\nexport const ListOuterElement = forwardRef(function Outer(props, ref) {\n const { children } = props, rest = __rest(props, [\"children\"]);\n const tree = useTreeApi();\n return (_jsxs(\"div\", Object.assign({ \n // @ts-ignore\n ref: ref }, rest, { onClick: (e) => {\n if (e.currentTarget === e.target)\n tree.deselectAll();\n }, children: [_jsx(DropContainer, {}), children] })));\n});\nconst DropContainer = () => {\n const tree = useTreeApi();\n return (_jsx(\"div\", { style: {\n height: tree.visibleNodes.length * tree.rowHeight,\n width: \"100%\",\n position: \"absolute\",\n left: \"0\",\n right: \"0\",\n }, children: _jsx(Cursor, {}) }));\n};\n","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { forwardRef } from \"react\";\nimport { useTreeApi } from \"../context\";\nexport const ListInnerElement = forwardRef(function InnerElement(_a, ref) {\n var _b, _c, _d, _e;\n var { style } = _a, rest = __rest(_a, [\"style\"]);\n const tree = useTreeApi();\n const paddingTop = (_c = (_b = tree.props.padding) !== null && _b !== void 0 ? _b : tree.props.paddingTop) !== null && _c !== void 0 ? _c : 0;\n const paddingBottom = (_e = (_d = tree.props.padding) !== null && _d !== void 0 ? _d : tree.props.paddingBottom) !== null && _e !== void 0 ? _e : 0;\n return (_jsx(\"div\", Object.assign({ ref: ref, style: Object.assign(Object.assign({}, style), { height: `${parseFloat(style.height) + paddingTop + paddingBottom}px` }) }, rest)));\n});\n","import { createContext } from 'react';\n/**\n * Create the React Context\n */\n\nexport var DndContext = createContext({\n dragDropManager: undefined\n});","export var HandlerRole;\n\n(function (HandlerRole) {\n HandlerRole[\"SOURCE\"] = \"SOURCE\";\n HandlerRole[\"TARGET\"] = \"TARGET\";\n})(HandlerRole || (HandlerRole = {}));","/**\r\n * Use invariant() to assert state which your program assumes to be true.\r\n *\r\n * Provide sprintf-style format (only %s is supported) and arguments\r\n * to provide information about what broke and what you were\r\n * expecting.\r\n *\r\n * The invariant message will be stripped in production, but the invariant\r\n * will remain to ensure logic does not differ in production.\r\n */\nfunction invariant(condition, format) {\n for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n\n if (process.env.NODE_ENV !== 'production') {\n if (format === undefined) {\n throw new Error('invariant requires an error message argument');\n }\n }\n\n if (!condition) {\n var error;\n\n if (format === undefined) {\n error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');\n } else {\n var argIndex = 0;\n error = new Error(format.replace(/%s/g, function () {\n return args[argIndex++];\n }));\n error.name = 'Invariant Violation';\n }\n\n error.framesToPop = 1; // we don't care about invariant's own frame\n\n throw error;\n }\n}\n\nexport { invariant };\n//# sourceMappingURL=invariant.esm.js.map\n","export var INIT_COORDS = 'dnd-core/INIT_COORDS';\nexport var BEGIN_DRAG = 'dnd-core/BEGIN_DRAG';\nexport var PUBLISH_DRAG_SOURCE = 'dnd-core/PUBLISH_DRAG_SOURCE';\nexport var HOVER = 'dnd-core/HOVER';\nexport var DROP = 'dnd-core/DROP';\nexport var END_DRAG = 'dnd-core/END_DRAG';","import { INIT_COORDS } from '../types';\nexport function setClientOffset(clientOffset, sourceClientOffset) {\n return {\n type: INIT_COORDS,\n payload: {\n sourceClientOffset: sourceClientOffset || null,\n clientOffset: clientOffset || null\n }\n };\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n// cheap lodash replacements\n\n/**\n * drop-in replacement for _.get\n * @param obj\n * @param path\n * @param defaultValue\n */\nexport function get(obj, path, defaultValue) {\n return path.split('.').reduce(function (a, c) {\n return a && a[c] ? a[c] : defaultValue || null;\n }, obj);\n}\n/**\n * drop-in replacement for _.without\n */\n\nexport function without(items, item) {\n return items.filter(function (i) {\n return i !== item;\n });\n}\n/**\n * drop-in replacement for _.isString\n * @param input\n */\n\nexport function isString(input) {\n return typeof input === 'string';\n}\n/**\n * drop-in replacement for _.isString\n * @param input\n */\n\nexport function isObject(input) {\n return _typeof(input) === 'object';\n}\n/**\n * repalcement for _.xor\n * @param itemsA\n * @param itemsB\n */\n\nexport function xor(itemsA, itemsB) {\n var map = new Map();\n\n var insertItem = function insertItem(item) {\n map.set(item, map.has(item) ? map.get(item) + 1 : 1);\n };\n\n itemsA.forEach(insertItem);\n itemsB.forEach(insertItem);\n var result = [];\n map.forEach(function (count, key) {\n if (count === 1) {\n result.push(key);\n }\n });\n return result;\n}\n/**\n * replacement for _.intersection\n * @param itemsA\n * @param itemsB\n */\n\nexport function intersection(itemsA, itemsB) {\n return itemsA.filter(function (t) {\n return itemsB.indexOf(t) > -1;\n });\n}","import { invariant } from '@react-dnd/invariant';\nimport { setClientOffset } from './local/setClientOffset';\nimport { isObject } from '../../utils/js_utils';\nimport { BEGIN_DRAG, INIT_COORDS } from './types';\nvar ResetCoordinatesAction = {\n type: INIT_COORDS,\n payload: {\n clientOffset: null,\n sourceClientOffset: null\n }\n};\nexport function createBeginDrag(manager) {\n return function beginDrag() {\n var sourceIds = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n publishSource: true\n };\n var _options$publishSourc = options.publishSource,\n publishSource = _options$publishSourc === void 0 ? true : _options$publishSourc,\n clientOffset = options.clientOffset,\n getSourceClientOffset = options.getSourceClientOffset;\n var monitor = manager.getMonitor();\n var registry = manager.getRegistry(); // Initialize the coordinates using the client offset\n\n manager.dispatch(setClientOffset(clientOffset));\n verifyInvariants(sourceIds, monitor, registry); // Get the draggable source\n\n var sourceId = getDraggableSource(sourceIds, monitor);\n\n if (sourceId === null) {\n manager.dispatch(ResetCoordinatesAction);\n return;\n } // Get the source client offset\n\n\n var sourceClientOffset = null;\n\n if (clientOffset) {\n if (!getSourceClientOffset) {\n throw new Error('getSourceClientOffset must be defined');\n }\n\n verifyGetSourceClientOffsetIsFunction(getSourceClientOffset);\n sourceClientOffset = getSourceClientOffset(sourceId);\n } // Initialize the full coordinates\n\n\n manager.dispatch(setClientOffset(clientOffset, sourceClientOffset));\n var source = registry.getSource(sourceId);\n var item = source.beginDrag(monitor, sourceId); // If source.beginDrag returns null, this is an indicator to cancel the drag\n\n if (item == null) {\n return undefined;\n }\n\n verifyItemIsObject(item);\n registry.pinSource(sourceId);\n var itemType = registry.getSourceType(sourceId);\n return {\n type: BEGIN_DRAG,\n payload: {\n itemType: itemType,\n item: item,\n sourceId: sourceId,\n clientOffset: clientOffset || null,\n sourceClientOffset: sourceClientOffset || null,\n isSourcePublic: !!publishSource\n }\n };\n };\n}\n\nfunction verifyInvariants(sourceIds, monitor, registry) {\n invariant(!monitor.isDragging(), 'Cannot call beginDrag while dragging.');\n sourceIds.forEach(function (sourceId) {\n invariant(registry.getSource(sourceId), 'Expected sourceIds to be registered.');\n });\n}\n\nfunction verifyGetSourceClientOffsetIsFunction(getSourceClientOffset) {\n invariant(typeof getSourceClientOffset === 'function', 'When clientOffset is provided, getSourceClientOffset must be a function.');\n}\n\nfunction verifyItemIsObject(item) {\n invariant(isObject(item), 'Item must be an object.');\n}\n\nfunction getDraggableSource(sourceIds, monitor) {\n var sourceId = null;\n\n for (var i = sourceIds.length - 1; i >= 0; i--) {\n if (monitor.canDragSource(sourceIds[i])) {\n sourceId = sourceIds[i];\n break;\n }\n }\n\n return sourceId;\n}","import { PUBLISH_DRAG_SOURCE } from './types';\nexport function createPublishDragSource(manager) {\n return function publishDragSource() {\n var monitor = manager.getMonitor();\n\n if (monitor.isDragging()) {\n return {\n type: PUBLISH_DRAG_SOURCE\n };\n }\n };\n}","export function matchesType(targetType, draggedItemType) {\n if (draggedItemType === null) {\n return targetType === null;\n }\n\n return Array.isArray(targetType) ? targetType.some(function (t) {\n return t === draggedItemType;\n }) : targetType === draggedItemType;\n}","import { invariant } from '@react-dnd/invariant';\nimport { matchesType } from '../../utils/matchesType';\nimport { HOVER } from './types';\nexport function createHover(manager) {\n return function hover(targetIdsArg) {\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n clientOffset = _ref.clientOffset;\n\n verifyTargetIdsIsArray(targetIdsArg);\n var targetIds = targetIdsArg.slice(0);\n var monitor = manager.getMonitor();\n var registry = manager.getRegistry();\n checkInvariants(targetIds, monitor, registry);\n var draggedItemType = monitor.getItemType();\n removeNonMatchingTargetIds(targetIds, registry, draggedItemType);\n hoverAllTargets(targetIds, monitor, registry);\n return {\n type: HOVER,\n payload: {\n targetIds: targetIds,\n clientOffset: clientOffset || null\n }\n };\n };\n}\n\nfunction verifyTargetIdsIsArray(targetIdsArg) {\n invariant(Array.isArray(targetIdsArg), 'Expected targetIds to be an array.');\n}\n\nfunction checkInvariants(targetIds, monitor, registry) {\n invariant(monitor.isDragging(), 'Cannot call hover while not dragging.');\n invariant(!monitor.didDrop(), 'Cannot call hover after drop.');\n\n for (var i = 0; i < targetIds.length; i++) {\n var targetId = targetIds[i];\n invariant(targetIds.lastIndexOf(targetId) === i, 'Expected targetIds to be unique in the passed array.');\n var target = registry.getTarget(targetId);\n invariant(target, 'Expected targetIds to be registered.');\n }\n}\n\nfunction removeNonMatchingTargetIds(targetIds, registry, draggedItemType) {\n // Remove those targetIds that don't match the targetType. This\n // fixes shallow isOver which would only be non-shallow because of\n // non-matching targets.\n for (var i = targetIds.length - 1; i >= 0; i--) {\n var targetId = targetIds[i];\n var targetType = registry.getTargetType(targetId);\n\n if (!matchesType(targetType, draggedItemType)) {\n targetIds.splice(i, 1);\n }\n }\n}\n\nfunction hoverAllTargets(targetIds, monitor, registry) {\n // Finally call hover on all matching targets.\n targetIds.forEach(function (targetId) {\n var target = registry.getTarget(targetId);\n target.hover(monitor, targetId);\n });\n}","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { invariant } from '@react-dnd/invariant';\nimport { DROP } from './types';\nimport { isObject } from '../../utils/js_utils';\nexport function createDrop(manager) {\n return function drop() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var monitor = manager.getMonitor();\n var registry = manager.getRegistry();\n verifyInvariants(monitor);\n var targetIds = getDroppableTargets(monitor); // Multiple actions are dispatched here, which is why this doesn't return an action\n\n targetIds.forEach(function (targetId, index) {\n var dropResult = determineDropResult(targetId, index, registry, monitor);\n var action = {\n type: DROP,\n payload: {\n dropResult: _objectSpread(_objectSpread({}, options), dropResult)\n }\n };\n manager.dispatch(action);\n });\n };\n}\n\nfunction verifyInvariants(monitor) {\n invariant(monitor.isDragging(), 'Cannot call drop while not dragging.');\n invariant(!monitor.didDrop(), 'Cannot call drop twice during one drag operation.');\n}\n\nfunction determineDropResult(targetId, index, registry, monitor) {\n var target = registry.getTarget(targetId);\n var dropResult = target ? target.drop(monitor, targetId) : undefined;\n verifyDropResultType(dropResult);\n\n if (typeof dropResult === 'undefined') {\n dropResult = index === 0 ? {} : monitor.getDropResult();\n }\n\n return dropResult;\n}\n\nfunction verifyDropResultType(dropResult) {\n invariant(typeof dropResult === 'undefined' || isObject(dropResult), 'Drop result must either be an object or undefined.');\n}\n\nfunction getDroppableTargets(monitor) {\n var targetIds = monitor.getTargetIds().filter(monitor.canDropOnTarget, monitor);\n targetIds.reverse();\n return targetIds;\n}","import { invariant } from '@react-dnd/invariant';\nimport { END_DRAG } from './types';\nexport function createEndDrag(manager) {\n return function endDrag() {\n var monitor = manager.getMonitor();\n var registry = manager.getRegistry();\n verifyIsDragging(monitor);\n var sourceId = monitor.getSourceId();\n\n if (sourceId != null) {\n var source = registry.getSource(sourceId, true);\n source.endDrag(monitor, sourceId);\n registry.unpinSource();\n }\n\n return {\n type: END_DRAG\n };\n };\n}\n\nfunction verifyIsDragging(monitor) {\n invariant(monitor.isDragging(), 'Cannot call endDrag while not dragging.');\n}","import { createBeginDrag } from './beginDrag';\nimport { createPublishDragSource } from './publishDragSource';\nimport { createHover } from './hover';\nimport { createDrop } from './drop';\nimport { createEndDrag } from './endDrag';\nexport * from './types';\nexport function createDragDropActions(manager) {\n return {\n beginDrag: createBeginDrag(manager),\n publishDragSource: createPublishDragSource(manager),\n hover: createHover(manager),\n drop: createDrop(manager),\n endDrag: createEndDrag(manager)\n };\n}","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { createDragDropActions } from '../actions/dragDrop';\nexport var DragDropManagerImpl = /*#__PURE__*/function () {\n function DragDropManagerImpl(store, monitor) {\n var _this = this;\n\n _classCallCheck(this, DragDropManagerImpl);\n\n _defineProperty(this, \"store\", void 0);\n\n _defineProperty(this, \"monitor\", void 0);\n\n _defineProperty(this, \"backend\", void 0);\n\n _defineProperty(this, \"isSetUp\", false);\n\n _defineProperty(this, \"handleRefCountChange\", function () {\n var shouldSetUp = _this.store.getState().refCount > 0;\n\n if (_this.backend) {\n if (shouldSetUp && !_this.isSetUp) {\n _this.backend.setup();\n\n _this.isSetUp = true;\n } else if (!shouldSetUp && _this.isSetUp) {\n _this.backend.teardown();\n\n _this.isSetUp = false;\n }\n }\n });\n\n this.store = store;\n this.monitor = monitor;\n store.subscribe(this.handleRefCountChange);\n }\n\n _createClass(DragDropManagerImpl, [{\n key: \"receiveBackend\",\n value: function receiveBackend(backend) {\n this.backend = backend;\n }\n }, {\n key: \"getMonitor\",\n value: function getMonitor() {\n return this.monitor;\n }\n }, {\n key: \"getBackend\",\n value: function getBackend() {\n return this.backend;\n }\n }, {\n key: \"getRegistry\",\n value: function getRegistry() {\n return this.monitor.registry;\n }\n }, {\n key: \"getActions\",\n value: function getActions() {\n /* eslint-disable-next-line @typescript-eslint/no-this-alias */\n var manager = this;\n var dispatch = this.store.dispatch;\n\n function bindActionCreator(actionCreator) {\n return function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var action = actionCreator.apply(manager, args);\n\n if (typeof action !== 'undefined') {\n dispatch(action);\n }\n };\n }\n\n var actions = createDragDropActions(this);\n return Object.keys(actions).reduce(function (boundActions, key) {\n var action = actions[key];\n boundActions[key] = bindActionCreator(action);\n return boundActions;\n }, {});\n }\n }, {\n key: \"dispatch\",\n value: function dispatch(action) {\n this.store.dispatch(action);\n }\n }]);\n\n return DragDropManagerImpl;\n}();","import _objectSpread from '@babel/runtime/helpers/esm/objectSpread2';\n\n/**\n * Adapted from React: https://github.com/facebook/react/blob/master/packages/shared/formatProdErrorMessage.js\n *\n * Do not require this module directly! Use normal throw error calls. These messages will be replaced with error codes\n * during build.\n * @param {number} code\n */\nfunction formatProdErrorMessage(code) {\n return \"Minified Redux error #\" + code + \"; visit https://redux.js.org/Errors?code=\" + code + \" for the full message or \" + 'use the non-minified dev environment for full errors. ';\n}\n\n// Inlined version of the `symbol-observable` polyfill\nvar $$observable = (function () {\n return typeof Symbol === 'function' && Symbol.observable || '@@observable';\n})();\n\n/**\n * These are private action types reserved by Redux.\n * For any unknown actions, you must return the current state.\n * If the current state is undefined, you must return the initial state.\n * Do not reference these action types directly in your code.\n */\nvar randomString = function randomString() {\n return Math.random().toString(36).substring(7).split('').join('.');\n};\n\nvar ActionTypes = {\n INIT: \"@@redux/INIT\" + randomString(),\n REPLACE: \"@@redux/REPLACE\" + randomString(),\n PROBE_UNKNOWN_ACTION: function PROBE_UNKNOWN_ACTION() {\n return \"@@redux/PROBE_UNKNOWN_ACTION\" + randomString();\n }\n};\n\n/**\n * @param {any} obj The object to inspect.\n * @returns {boolean} True if the argument appears to be a plain object.\n */\nfunction isPlainObject(obj) {\n if (typeof obj !== 'object' || obj === null) return false;\n var proto = obj;\n\n while (Object.getPrototypeOf(proto) !== null) {\n proto = Object.getPrototypeOf(proto);\n }\n\n return Object.getPrototypeOf(obj) === proto;\n}\n\n// Inlined / shortened version of `kindOf` from https://github.com/jonschlinkert/kind-of\nfunction miniKindOf(val) {\n if (val === void 0) return 'undefined';\n if (val === null) return 'null';\n var type = typeof val;\n\n switch (type) {\n case 'boolean':\n case 'string':\n case 'number':\n case 'symbol':\n case 'function':\n {\n return type;\n }\n }\n\n if (Array.isArray(val)) return 'array';\n if (isDate(val)) return 'date';\n if (isError(val)) return 'error';\n var constructorName = ctorName(val);\n\n switch (constructorName) {\n case 'Symbol':\n case 'Promise':\n case 'WeakMap':\n case 'WeakSet':\n case 'Map':\n case 'Set':\n return constructorName;\n } // other\n\n\n return type.slice(8, -1).toLowerCase().replace(/\\s/g, '');\n}\n\nfunction ctorName(val) {\n return typeof val.constructor === 'function' ? val.constructor.name : null;\n}\n\nfunction isError(val) {\n return val instanceof Error || typeof val.message === 'string' && val.constructor && typeof val.constructor.stackTraceLimit === 'number';\n}\n\nfunction isDate(val) {\n if (val instanceof Date) return true;\n return typeof val.toDateString === 'function' && typeof val.getDate === 'function' && typeof val.setDate === 'function';\n}\n\nfunction kindOf(val) {\n var typeOfVal = typeof val;\n\n if (process.env.NODE_ENV !== 'production') {\n typeOfVal = miniKindOf(val);\n }\n\n return typeOfVal;\n}\n\n/**\n * @deprecated\n *\n * **We recommend using the `configureStore` method\n * of the `@reduxjs/toolkit` package**, which replaces `createStore`.\n *\n * Redux Toolkit is our recommended approach for writing Redux logic today,\n * including store setup, reducers, data fetching, and more.\n *\n * **For more details, please read this Redux docs page:**\n * **https://redux.js.org/introduction/why-rtk-is-redux-today**\n *\n * `configureStore` from Redux Toolkit is an improved version of `createStore` that\n * simplifies setup and helps avoid common bugs.\n *\n * You should not be using the `redux` core package by itself today, except for learning purposes.\n * The `createStore` method from the core `redux` package will not be removed, but we encourage\n * all users to migrate to using Redux Toolkit for all Redux code.\n *\n * If you want to use `createStore` without this visual deprecation warning, use\n * the `legacy_createStore` import instead:\n *\n * `import { legacy_createStore as createStore} from 'redux'`\n *\n */\n\nfunction createStore(reducer, preloadedState, enhancer) {\n var _ref2;\n\n if (typeof preloadedState === 'function' && typeof enhancer === 'function' || typeof enhancer === 'function' && typeof arguments[3] === 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(0) : 'It looks like you are passing several store enhancers to ' + 'createStore(). This is not supported. Instead, compose them ' + 'together to a single function. See https://redux.js.org/tutorials/fundamentals/part-4-store#creating-a-store-with-enhancers for an example.');\n }\n\n if (typeof preloadedState === 'function' && typeof enhancer === 'undefined') {\n enhancer = preloadedState;\n preloadedState = undefined;\n }\n\n if (typeof enhancer !== 'undefined') {\n if (typeof enhancer !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(1) : \"Expected the enhancer to be a function. Instead, received: '\" + kindOf(enhancer) + \"'\");\n }\n\n return enhancer(createStore)(reducer, preloadedState);\n }\n\n if (typeof reducer !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(2) : \"Expected the root reducer to be a function. Instead, received: '\" + kindOf(reducer) + \"'\");\n }\n\n var currentReducer = reducer;\n var currentState = preloadedState;\n var currentListeners = [];\n var nextListeners = currentListeners;\n var isDispatching = false;\n /**\n * This makes a shallow copy of currentListeners so we can use\n * nextListeners as a temporary list while dispatching.\n *\n * This prevents any bugs around consumers calling\n * subscribe/unsubscribe in the middle of a dispatch.\n */\n\n function ensureCanMutateNextListeners() {\n if (nextListeners === currentListeners) {\n nextListeners = currentListeners.slice();\n }\n }\n /**\n * Reads the state tree managed by the store.\n *\n * @returns {any} The current state tree of your application.\n */\n\n\n function getState() {\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(3) : 'You may not call store.getState() while the reducer is executing. ' + 'The reducer has already received the state as an argument. ' + 'Pass it down from the top reducer instead of reading it from the store.');\n }\n\n return currentState;\n }\n /**\n * Adds a change listener. It will be called any time an action is dispatched,\n * and some part of the state tree may potentially have changed. You may then\n * call `getState()` to read the current state tree inside the callback.\n *\n * You may call `dispatch()` from a change listener, with the following\n * caveats:\n *\n * 1. The subscriptions are snapshotted just before every `dispatch()` call.\n * If you subscribe or unsubscribe while the listeners are being invoked, this\n * will not have any effect on the `dispatch()` that is currently in progress.\n * However, the next `dispatch()` call, whether nested or not, will use a more\n * recent snapshot of the subscription list.\n *\n * 2. The listener should not expect to see all state changes, as the state\n * might have been updated multiple times during a nested `dispatch()` before\n * the listener is called. It is, however, guaranteed that all subscribers\n * registered before the `dispatch()` started will be called with the latest\n * state by the time it exits.\n *\n * @param {Function} listener A callback to be invoked on every dispatch.\n * @returns {Function} A function to remove this change listener.\n */\n\n\n function subscribe(listener) {\n if (typeof listener !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(4) : \"Expected the listener to be a function. Instead, received: '\" + kindOf(listener) + \"'\");\n }\n\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(5) : 'You may not call store.subscribe() while the reducer is executing. ' + 'If you would like to be notified after the store has been updated, subscribe from a ' + 'component and invoke store.getState() in the callback to access the latest state. ' + 'See https://redux.js.org/api/store#subscribelistener for more details.');\n }\n\n var isSubscribed = true;\n ensureCanMutateNextListeners();\n nextListeners.push(listener);\n return function unsubscribe() {\n if (!isSubscribed) {\n return;\n }\n\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(6) : 'You may not unsubscribe from a store listener while the reducer is executing. ' + 'See https://redux.js.org/api/store#subscribelistener for more details.');\n }\n\n isSubscribed = false;\n ensureCanMutateNextListeners();\n var index = nextListeners.indexOf(listener);\n nextListeners.splice(index, 1);\n currentListeners = null;\n };\n }\n /**\n * Dispatches an action. It is the only way to trigger a state change.\n *\n * The `reducer` function, used to create the store, will be called with the\n * current state tree and the given `action`. Its return value will\n * be considered the **next** state of the tree, and the change listeners\n * will be notified.\n *\n * The base implementation only supports plain object actions. If you want to\n * dispatch a Promise, an Observable, a thunk, or something else, you need to\n * wrap your store creating function into the corresponding middleware. For\n * example, see the documentation for the `redux-thunk` package. Even the\n * middleware will eventually dispatch plain object actions using this method.\n *\n * @param {Object} action A plain object representing “what changed”. It is\n * a good idea to keep actions serializable so you can record and replay user\n * sessions, or use the time travelling `redux-devtools`. An action must have\n * a `type` property which may not be `undefined`. It is a good idea to use\n * string constants for action types.\n *\n * @returns {Object} For convenience, the same action object you dispatched.\n *\n * Note that, if you use a custom middleware, it may wrap `dispatch()` to\n * return something else (for example, a Promise you can await).\n */\n\n\n function dispatch(action) {\n if (!isPlainObject(action)) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(7) : \"Actions must be plain objects. Instead, the actual type was: '\" + kindOf(action) + \"'. You may need to add middleware to your store setup to handle dispatching other values, such as 'redux-thunk' to handle dispatching functions. See https://redux.js.org/tutorials/fundamentals/part-4-store#middleware and https://redux.js.org/tutorials/fundamentals/part-6-async-logic#using-the-redux-thunk-middleware for examples.\");\n }\n\n if (typeof action.type === 'undefined') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(8) : 'Actions may not have an undefined \"type\" property. You may have misspelled an action type string constant.');\n }\n\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(9) : 'Reducers may not dispatch actions.');\n }\n\n try {\n isDispatching = true;\n currentState = currentReducer(currentState, action);\n } finally {\n isDispatching = false;\n }\n\n var listeners = currentListeners = nextListeners;\n\n for (var i = 0; i < listeners.length; i++) {\n var listener = listeners[i];\n listener();\n }\n\n return action;\n }\n /**\n * Replaces the reducer currently used by the store to calculate the state.\n *\n * You might need this if your app implements code splitting and you want to\n * load some of the reducers dynamically. You might also need this if you\n * implement a hot reloading mechanism for Redux.\n *\n * @param {Function} nextReducer The reducer for the store to use instead.\n * @returns {void}\n */\n\n\n function replaceReducer(nextReducer) {\n if (typeof nextReducer !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(10) : \"Expected the nextReducer to be a function. Instead, received: '\" + kindOf(nextReducer));\n }\n\n currentReducer = nextReducer; // This action has a similiar effect to ActionTypes.INIT.\n // Any reducers that existed in both the new and old rootReducer\n // will receive the previous state. This effectively populates\n // the new state tree with any relevant data from the old one.\n\n dispatch({\n type: ActionTypes.REPLACE\n });\n }\n /**\n * Interoperability point for observable/reactive libraries.\n * @returns {observable} A minimal observable of state changes.\n * For more information, see the observable proposal:\n * https://github.com/tc39/proposal-observable\n */\n\n\n function observable() {\n var _ref;\n\n var outerSubscribe = subscribe;\n return _ref = {\n /**\n * The minimal observable subscription method.\n * @param {Object} observer Any object that can be used as an observer.\n * The observer object should have a `next` method.\n * @returns {subscription} An object with an `unsubscribe` method that can\n * be used to unsubscribe the observable from the store, and prevent further\n * emission of values from the observable.\n */\n subscribe: function subscribe(observer) {\n if (typeof observer !== 'object' || observer === null) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(11) : \"Expected the observer to be an object. Instead, received: '\" + kindOf(observer) + \"'\");\n }\n\n function observeState() {\n if (observer.next) {\n observer.next(getState());\n }\n }\n\n observeState();\n var unsubscribe = outerSubscribe(observeState);\n return {\n unsubscribe: unsubscribe\n };\n }\n }, _ref[$$observable] = function () {\n return this;\n }, _ref;\n } // When a store is created, an \"INIT\" action is dispatched so that every\n // reducer returns their initial state. This effectively populates\n // the initial state tree.\n\n\n dispatch({\n type: ActionTypes.INIT\n });\n return _ref2 = {\n dispatch: dispatch,\n subscribe: subscribe,\n getState: getState,\n replaceReducer: replaceReducer\n }, _ref2[$$observable] = observable, _ref2;\n}\n/**\n * Creates a Redux store that holds the state tree.\n *\n * **We recommend using `configureStore` from the\n * `@reduxjs/toolkit` package**, which replaces `createStore`:\n * **https://redux.js.org/introduction/why-rtk-is-redux-today**\n *\n * The only way to change the data in the store is to call `dispatch()` on it.\n *\n * There should only be a single store in your app. To specify how different\n * parts of the state tree respond to actions, you may combine several reducers\n * into a single reducer function by using `combineReducers`.\n *\n * @param {Function} reducer A function that returns the next state tree, given\n * the current state tree and the action to handle.\n *\n * @param {any} [preloadedState] The initial state. You may optionally specify it\n * to hydrate the state from the server in universal apps, or to restore a\n * previously serialized user session.\n * If you use `combineReducers` to produce the root reducer function, this must be\n * an object with the same shape as `combineReducers` keys.\n *\n * @param {Function} [enhancer] The store enhancer. You may optionally specify it\n * to enhance the store with third-party capabilities such as middleware,\n * time travel, persistence, etc. The only store enhancer that ships with Redux\n * is `applyMiddleware()`.\n *\n * @returns {Store} A Redux store that lets you read the state, dispatch actions\n * and subscribe to changes.\n */\n\nvar legacy_createStore = createStore;\n\n/**\n * Prints a warning in the console if it exists.\n *\n * @param {String} message The warning message.\n * @returns {void}\n */\nfunction warning(message) {\n /* eslint-disable no-console */\n if (typeof console !== 'undefined' && typeof console.error === 'function') {\n console.error(message);\n }\n /* eslint-enable no-console */\n\n\n try {\n // This error was thrown as a convenience so that if you enable\n // \"break on all exceptions\" in your console,\n // it would pause the execution at this line.\n throw new Error(message);\n } catch (e) {} // eslint-disable-line no-empty\n\n}\n\nfunction getUnexpectedStateShapeWarningMessage(inputState, reducers, action, unexpectedKeyCache) {\n var reducerKeys = Object.keys(reducers);\n var argumentName = action && action.type === ActionTypes.INIT ? 'preloadedState argument passed to createStore' : 'previous state received by the reducer';\n\n if (reducerKeys.length === 0) {\n return 'Store does not have a valid reducer. Make sure the argument passed ' + 'to combineReducers is an object whose values are reducers.';\n }\n\n if (!isPlainObject(inputState)) {\n return \"The \" + argumentName + \" has unexpected type of \\\"\" + kindOf(inputState) + \"\\\". Expected argument to be an object with the following \" + (\"keys: \\\"\" + reducerKeys.join('\", \"') + \"\\\"\");\n }\n\n var unexpectedKeys = Object.keys(inputState).filter(function (key) {\n return !reducers.hasOwnProperty(key) && !unexpectedKeyCache[key];\n });\n unexpectedKeys.forEach(function (key) {\n unexpectedKeyCache[key] = true;\n });\n if (action && action.type === ActionTypes.REPLACE) return;\n\n if (unexpectedKeys.length > 0) {\n return \"Unexpected \" + (unexpectedKeys.length > 1 ? 'keys' : 'key') + \" \" + (\"\\\"\" + unexpectedKeys.join('\", \"') + \"\\\" found in \" + argumentName + \". \") + \"Expected to find one of the known reducer keys instead: \" + (\"\\\"\" + reducerKeys.join('\", \"') + \"\\\". Unexpected keys will be ignored.\");\n }\n}\n\nfunction assertReducerShape(reducers) {\n Object.keys(reducers).forEach(function (key) {\n var reducer = reducers[key];\n var initialState = reducer(undefined, {\n type: ActionTypes.INIT\n });\n\n if (typeof initialState === 'undefined') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(12) : \"The slice reducer for key \\\"\" + key + \"\\\" returned undefined during initialization. \" + \"If the state passed to the reducer is undefined, you must \" + \"explicitly return the initial state. The initial state may \" + \"not be undefined. If you don't want to set a value for this reducer, \" + \"you can use null instead of undefined.\");\n }\n\n if (typeof reducer(undefined, {\n type: ActionTypes.PROBE_UNKNOWN_ACTION()\n }) === 'undefined') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(13) : \"The slice reducer for key \\\"\" + key + \"\\\" returned undefined when probed with a random type. \" + (\"Don't try to handle '\" + ActionTypes.INIT + \"' or other actions in \\\"redux/*\\\" \") + \"namespace. They are considered private. Instead, you must return the \" + \"current state for any unknown actions, unless it is undefined, \" + \"in which case you must return the initial state, regardless of the \" + \"action type. The initial state may not be undefined, but can be null.\");\n }\n });\n}\n/**\n * Turns an object whose values are different reducer functions, into a single\n * reducer function. It will call every child reducer, and gather their results\n * into a single state object, whose keys correspond to the keys of the passed\n * reducer functions.\n *\n * @param {Object} reducers An object whose values correspond to different\n * reducer functions that need to be combined into one. One handy way to obtain\n * it is to use ES6 `import * as reducers` syntax. The reducers may never return\n * undefined for any action. Instead, they should return their initial state\n * if the state passed to them was undefined, and the current state for any\n * unrecognized action.\n *\n * @returns {Function} A reducer function that invokes every reducer inside the\n * passed object, and builds a state object with the same shape.\n */\n\n\nfunction combineReducers(reducers) {\n var reducerKeys = Object.keys(reducers);\n var finalReducers = {};\n\n for (var i = 0; i < reducerKeys.length; i++) {\n var key = reducerKeys[i];\n\n if (process.env.NODE_ENV !== 'production') {\n if (typeof reducers[key] === 'undefined') {\n warning(\"No reducer provided for key \\\"\" + key + \"\\\"\");\n }\n }\n\n if (typeof reducers[key] === 'function') {\n finalReducers[key] = reducers[key];\n }\n }\n\n var finalReducerKeys = Object.keys(finalReducers); // This is used to make sure we don't warn about the same\n // keys multiple times.\n\n var unexpectedKeyCache;\n\n if (process.env.NODE_ENV !== 'production') {\n unexpectedKeyCache = {};\n }\n\n var shapeAssertionError;\n\n try {\n assertReducerShape(finalReducers);\n } catch (e) {\n shapeAssertionError = e;\n }\n\n return function combination(state, action) {\n if (state === void 0) {\n state = {};\n }\n\n if (shapeAssertionError) {\n throw shapeAssertionError;\n }\n\n if (process.env.NODE_ENV !== 'production') {\n var warningMessage = getUnexpectedStateShapeWarningMessage(state, finalReducers, action, unexpectedKeyCache);\n\n if (warningMessage) {\n warning(warningMessage);\n }\n }\n\n var hasChanged = false;\n var nextState = {};\n\n for (var _i = 0; _i < finalReducerKeys.length; _i++) {\n var _key = finalReducerKeys[_i];\n var reducer = finalReducers[_key];\n var previousStateForKey = state[_key];\n var nextStateForKey = reducer(previousStateForKey, action);\n\n if (typeof nextStateForKey === 'undefined') {\n var actionType = action && action.type;\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(14) : \"When called with an action of type \" + (actionType ? \"\\\"\" + String(actionType) + \"\\\"\" : '(unknown type)') + \", the slice reducer for key \\\"\" + _key + \"\\\" returned undefined. \" + \"To ignore an action, you must explicitly return the previous state. \" + \"If you want this reducer to hold no value, you can return null instead of undefined.\");\n }\n\n nextState[_key] = nextStateForKey;\n hasChanged = hasChanged || nextStateForKey !== previousStateForKey;\n }\n\n hasChanged = hasChanged || finalReducerKeys.length !== Object.keys(state).length;\n return hasChanged ? nextState : state;\n };\n}\n\nfunction bindActionCreator(actionCreator, dispatch) {\n return function () {\n return dispatch(actionCreator.apply(this, arguments));\n };\n}\n/**\n * Turns an object whose values are action creators, into an object with the\n * same keys, but with every function wrapped into a `dispatch` call so they\n * may be invoked directly. This is just a convenience method, as you can call\n * `store.dispatch(MyActionCreators.doSomething())` yourself just fine.\n *\n * For convenience, you can also pass an action creator as the first argument,\n * and get a dispatch wrapped function in return.\n *\n * @param {Function|Object} actionCreators An object whose values are action\n * creator functions. One handy way to obtain it is to use ES6 `import * as`\n * syntax. You may also pass a single function.\n *\n * @param {Function} dispatch The `dispatch` function available on your Redux\n * store.\n *\n * @returns {Function|Object} The object mimicking the original object, but with\n * every action creator wrapped into the `dispatch` call. If you passed a\n * function as `actionCreators`, the return value will also be a single\n * function.\n */\n\n\nfunction bindActionCreators(actionCreators, dispatch) {\n if (typeof actionCreators === 'function') {\n return bindActionCreator(actionCreators, dispatch);\n }\n\n if (typeof actionCreators !== 'object' || actionCreators === null) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(16) : \"bindActionCreators expected an object or a function, but instead received: '\" + kindOf(actionCreators) + \"'. \" + \"Did you write \\\"import ActionCreators from\\\" instead of \\\"import * as ActionCreators from\\\"?\");\n }\n\n var boundActionCreators = {};\n\n for (var key in actionCreators) {\n var actionCreator = actionCreators[key];\n\n if (typeof actionCreator === 'function') {\n boundActionCreators[key] = bindActionCreator(actionCreator, dispatch);\n }\n }\n\n return boundActionCreators;\n}\n\n/**\n * Composes single-argument functions from right to left. The rightmost\n * function can take multiple arguments as it provides the signature for\n * the resulting composite function.\n *\n * @param {...Function} funcs The functions to compose.\n * @returns {Function} A function obtained by composing the argument functions\n * from right to left. For example, compose(f, g, h) is identical to doing\n * (...args) => f(g(h(...args))).\n */\nfunction compose() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n if (funcs.length === 0) {\n return function (arg) {\n return arg;\n };\n }\n\n if (funcs.length === 1) {\n return funcs[0];\n }\n\n return funcs.reduce(function (a, b) {\n return function () {\n return a(b.apply(void 0, arguments));\n };\n });\n}\n\n/**\n * Creates a store enhancer that applies middleware to the dispatch method\n * of the Redux store. This is handy for a variety of tasks, such as expressing\n * asynchronous actions in a concise manner, or logging every action payload.\n *\n * See `redux-thunk` package as an example of the Redux middleware.\n *\n * Because middleware is potentially asynchronous, this should be the first\n * store enhancer in the composition chain.\n *\n * Note that each middleware will be given the `dispatch` and `getState` functions\n * as named arguments.\n *\n * @param {...Function} middlewares The middleware chain to be applied.\n * @returns {Function} A store enhancer applying the middleware.\n */\n\nfunction applyMiddleware() {\n for (var _len = arguments.length, middlewares = new Array(_len), _key = 0; _key < _len; _key++) {\n middlewares[_key] = arguments[_key];\n }\n\n return function (createStore) {\n return function () {\n var store = createStore.apply(void 0, arguments);\n\n var _dispatch = function dispatch() {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(15) : 'Dispatching while constructing your middleware is not allowed. ' + 'Other middleware would not be applied to this dispatch.');\n };\n\n var middlewareAPI = {\n getState: store.getState,\n dispatch: function dispatch() {\n return _dispatch.apply(void 0, arguments);\n }\n };\n var chain = middlewares.map(function (middleware) {\n return middleware(middlewareAPI);\n });\n _dispatch = compose.apply(void 0, chain)(store.dispatch);\n return _objectSpread(_objectSpread({}, store), {}, {\n dispatch: _dispatch\n });\n };\n };\n}\n\nexport { ActionTypes as __DO_NOT_USE__ActionTypes, applyMiddleware, bindActionCreators, combineReducers, compose, createStore, legacy_createStore };\n","export var strictEquality = function strictEquality(a, b) {\n return a === b;\n};\n/**\n * Determine if two cartesian coordinate offsets are equal\n * @param offsetA\n * @param offsetB\n */\n\nexport function areCoordsEqual(offsetA, offsetB) {\n if (!offsetA && !offsetB) {\n return true;\n } else if (!offsetA || !offsetB) {\n return false;\n } else {\n return offsetA.x === offsetB.x && offsetA.y === offsetB.y;\n }\n}\n/**\n * Determines if two arrays of items are equal\n * @param a The first array of items\n * @param b The second array of items\n */\n\nexport function areArraysEqual(a, b) {\n var isEqual = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : strictEquality;\n\n if (a.length !== b.length) {\n return false;\n }\n\n for (var i = 0; i < a.length; ++i) {\n if (!isEqual(a[i], b[i])) {\n return false;\n }\n }\n\n return true;\n}","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { INIT_COORDS, BEGIN_DRAG, HOVER, END_DRAG, DROP } from '../actions/dragDrop';\nimport { areCoordsEqual } from '../utils/equality';\nvar initialState = {\n initialSourceClientOffset: null,\n initialClientOffset: null,\n clientOffset: null\n};\nexport function reduce() {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;\n var action = arguments.length > 1 ? arguments[1] : undefined;\n var payload = action.payload;\n\n switch (action.type) {\n case INIT_COORDS:\n case BEGIN_DRAG:\n return {\n initialSourceClientOffset: payload.sourceClientOffset,\n initialClientOffset: payload.clientOffset,\n clientOffset: payload.clientOffset\n };\n\n case HOVER:\n if (areCoordsEqual(state.clientOffset, payload.clientOffset)) {\n return state;\n }\n\n return _objectSpread(_objectSpread({}, state), {}, {\n clientOffset: payload.clientOffset\n });\n\n case END_DRAG:\n case DROP:\n return initialState;\n\n default:\n return state;\n }\n}","export var ADD_SOURCE = 'dnd-core/ADD_SOURCE';\nexport var ADD_TARGET = 'dnd-core/ADD_TARGET';\nexport var REMOVE_SOURCE = 'dnd-core/REMOVE_SOURCE';\nexport var REMOVE_TARGET = 'dnd-core/REMOVE_TARGET';\nexport function addSource(sourceId) {\n return {\n type: ADD_SOURCE,\n payload: {\n sourceId: sourceId\n }\n };\n}\nexport function addTarget(targetId) {\n return {\n type: ADD_TARGET,\n payload: {\n targetId: targetId\n }\n };\n}\nexport function removeSource(sourceId) {\n return {\n type: REMOVE_SOURCE,\n payload: {\n sourceId: sourceId\n }\n };\n}\nexport function removeTarget(targetId) {\n return {\n type: REMOVE_TARGET,\n payload: {\n targetId: targetId\n }\n };\n}","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { BEGIN_DRAG, PUBLISH_DRAG_SOURCE, HOVER, END_DRAG, DROP } from '../actions/dragDrop';\nimport { REMOVE_TARGET } from '../actions/registry';\nimport { without } from '../utils/js_utils';\nvar initialState = {\n itemType: null,\n item: null,\n sourceId: null,\n targetIds: [],\n dropResult: null,\n didDrop: false,\n isSourcePublic: null\n};\nexport function reduce() {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;\n var action = arguments.length > 1 ? arguments[1] : undefined;\n var payload = action.payload;\n\n switch (action.type) {\n case BEGIN_DRAG:\n return _objectSpread(_objectSpread({}, state), {}, {\n itemType: payload.itemType,\n item: payload.item,\n sourceId: payload.sourceId,\n isSourcePublic: payload.isSourcePublic,\n dropResult: null,\n didDrop: false\n });\n\n case PUBLISH_DRAG_SOURCE:\n return _objectSpread(_objectSpread({}, state), {}, {\n isSourcePublic: true\n });\n\n case HOVER:\n return _objectSpread(_objectSpread({}, state), {}, {\n targetIds: payload.targetIds\n });\n\n case REMOVE_TARGET:\n if (state.targetIds.indexOf(payload.targetId) === -1) {\n return state;\n }\n\n return _objectSpread(_objectSpread({}, state), {}, {\n targetIds: without(state.targetIds, payload.targetId)\n });\n\n case DROP:\n return _objectSpread(_objectSpread({}, state), {}, {\n dropResult: payload.dropResult,\n didDrop: true,\n targetIds: []\n });\n\n case END_DRAG:\n return _objectSpread(_objectSpread({}, state), {}, {\n itemType: null,\n item: null,\n sourceId: null,\n dropResult: null,\n didDrop: false,\n isSourcePublic: null,\n targetIds: []\n });\n\n default:\n return state;\n }\n}","import { ADD_SOURCE, ADD_TARGET, REMOVE_SOURCE, REMOVE_TARGET } from '../actions/registry';\nexport function reduce() {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var action = arguments.length > 1 ? arguments[1] : undefined;\n\n switch (action.type) {\n case ADD_SOURCE:\n case ADD_TARGET:\n return state + 1;\n\n case REMOVE_SOURCE:\n case REMOVE_TARGET:\n return state - 1;\n\n default:\n return state;\n }\n}","import { intersection } from './js_utils';\nexport var NONE = [];\nexport var ALL = [];\nNONE.__IS_NONE__ = true;\nALL.__IS_ALL__ = true;\n/**\n * Determines if the given handler IDs are dirty or not.\n *\n * @param dirtyIds The set of dirty handler ids\n * @param handlerIds The set of handler ids to check\n */\n\nexport function areDirty(dirtyIds, handlerIds) {\n if (dirtyIds === NONE) {\n return false;\n }\n\n if (dirtyIds === ALL || typeof handlerIds === 'undefined') {\n return true;\n }\n\n var commonIds = intersection(handlerIds, dirtyIds);\n return commonIds.length > 0;\n}","import { BEGIN_DRAG, PUBLISH_DRAG_SOURCE, HOVER, END_DRAG, DROP } from '../actions/dragDrop';\nimport { ADD_SOURCE, ADD_TARGET, REMOVE_SOURCE, REMOVE_TARGET } from '../actions/registry';\nimport { areArraysEqual } from '../utils/equality';\nimport { NONE, ALL } from '../utils/dirtiness';\nimport { xor } from '../utils/js_utils';\nexport function reduce() {\n var _state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : NONE;\n\n var action = arguments.length > 1 ? arguments[1] : undefined;\n\n switch (action.type) {\n case HOVER:\n break;\n\n case ADD_SOURCE:\n case ADD_TARGET:\n case REMOVE_TARGET:\n case REMOVE_SOURCE:\n return NONE;\n\n case BEGIN_DRAG:\n case PUBLISH_DRAG_SOURCE:\n case END_DRAG:\n case DROP:\n default:\n return ALL;\n }\n\n var _action$payload = action.payload,\n _action$payload$targe = _action$payload.targetIds,\n targetIds = _action$payload$targe === void 0 ? [] : _action$payload$targe,\n _action$payload$prevT = _action$payload.prevTargetIds,\n prevTargetIds = _action$payload$prevT === void 0 ? [] : _action$payload$prevT;\n var result = xor(targetIds, prevTargetIds);\n var didChange = result.length > 0 || !areArraysEqual(targetIds, prevTargetIds);\n\n if (!didChange) {\n return NONE;\n } // Check the target ids at the innermost position. If they are valid, add them\n // to the result\n\n\n var prevInnermostTargetId = prevTargetIds[prevTargetIds.length - 1];\n var innermostTargetId = targetIds[targetIds.length - 1];\n\n if (prevInnermostTargetId !== innermostTargetId) {\n if (prevInnermostTargetId) {\n result.push(prevInnermostTargetId);\n }\n\n if (innermostTargetId) {\n result.push(innermostTargetId);\n }\n }\n\n return result;\n}","export function reduce() {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n return state + 1;\n}","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { reduce as dragOffset } from './dragOffset';\nimport { reduce as dragOperation } from './dragOperation';\nimport { reduce as refCount } from './refCount';\nimport { reduce as dirtyHandlerIds } from './dirtyHandlerIds';\nimport { reduce as stateId } from './stateId';\nimport { get } from '../utils/js_utils';\nexport function reduce() {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var action = arguments.length > 1 ? arguments[1] : undefined;\n return {\n dirtyHandlerIds: dirtyHandlerIds(state.dirtyHandlerIds, {\n type: action.type,\n payload: _objectSpread(_objectSpread({}, action.payload), {}, {\n prevTargetIds: get(state, 'dragOperation.targetIds', [])\n })\n }),\n dragOffset: dragOffset(state.dragOffset, action),\n refCount: refCount(state.refCount, action),\n dragOperation: dragOperation(state.dragOperation, action),\n stateId: stateId(state.stateId)\n };\n}","/**\n * Coordinate addition\n * @param a The first coordinate\n * @param b The second coordinate\n */\nexport function add(a, b) {\n return {\n x: a.x + b.x,\n y: a.y + b.y\n };\n}\n/**\n * Coordinate subtraction\n * @param a The first coordinate\n * @param b The second coordinate\n */\n\nexport function subtract(a, b) {\n return {\n x: a.x - b.x,\n y: a.y - b.y\n };\n}\n/**\n * Returns the cartesian distance of the drag source component's position, based on its position\n * at the time when the current drag operation has started, and the movement difference.\n *\n * Returns null if no item is being dragged.\n *\n * @param state The offset state to compute from\n */\n\nexport function getSourceClientOffset(state) {\n var clientOffset = state.clientOffset,\n initialClientOffset = state.initialClientOffset,\n initialSourceClientOffset = state.initialSourceClientOffset;\n\n if (!clientOffset || !initialClientOffset || !initialSourceClientOffset) {\n return null;\n }\n\n return subtract(add(clientOffset, initialSourceClientOffset), initialClientOffset);\n}\n/**\n * Determines the x,y offset between the client offset and the initial client offset\n *\n * @param state The offset state to compute from\n */\n\nexport function getDifferenceFromInitialOffset(state) {\n var clientOffset = state.clientOffset,\n initialClientOffset = state.initialClientOffset;\n\n if (!clientOffset || !initialClientOffset) {\n return null;\n }\n\n return subtract(clientOffset, initialClientOffset);\n}","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { invariant } from '@react-dnd/invariant';\nimport { matchesType } from '../utils/matchesType';\nimport { getSourceClientOffset as _getSourceClientOffset, getDifferenceFromInitialOffset as _getDifferenceFromInitialOffset } from '../utils/coords';\nimport { areDirty } from '../utils/dirtiness';\nexport var DragDropMonitorImpl = /*#__PURE__*/function () {\n function DragDropMonitorImpl(store, registry) {\n _classCallCheck(this, DragDropMonitorImpl);\n\n _defineProperty(this, \"store\", void 0);\n\n _defineProperty(this, \"registry\", void 0);\n\n this.store = store;\n this.registry = registry;\n }\n\n _createClass(DragDropMonitorImpl, [{\n key: \"subscribeToStateChange\",\n value: function subscribeToStateChange(listener) {\n var _this = this;\n\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n handlerIds: undefined\n };\n var handlerIds = options.handlerIds;\n invariant(typeof listener === 'function', 'listener must be a function.');\n invariant(typeof handlerIds === 'undefined' || Array.isArray(handlerIds), 'handlerIds, when specified, must be an array of strings.');\n var prevStateId = this.store.getState().stateId;\n\n var handleChange = function handleChange() {\n var state = _this.store.getState();\n\n var currentStateId = state.stateId;\n\n try {\n var canSkipListener = currentStateId === prevStateId || currentStateId === prevStateId + 1 && !areDirty(state.dirtyHandlerIds, handlerIds);\n\n if (!canSkipListener) {\n listener();\n }\n } finally {\n prevStateId = currentStateId;\n }\n };\n\n return this.store.subscribe(handleChange);\n }\n }, {\n key: \"subscribeToOffsetChange\",\n value: function subscribeToOffsetChange(listener) {\n var _this2 = this;\n\n invariant(typeof listener === 'function', 'listener must be a function.');\n var previousState = this.store.getState().dragOffset;\n\n var handleChange = function handleChange() {\n var nextState = _this2.store.getState().dragOffset;\n\n if (nextState === previousState) {\n return;\n }\n\n previousState = nextState;\n listener();\n };\n\n return this.store.subscribe(handleChange);\n }\n }, {\n key: \"canDragSource\",\n value: function canDragSource(sourceId) {\n if (!sourceId) {\n return false;\n }\n\n var source = this.registry.getSource(sourceId);\n invariant(source, \"Expected to find a valid source. sourceId=\".concat(sourceId));\n\n if (this.isDragging()) {\n return false;\n }\n\n return source.canDrag(this, sourceId);\n }\n }, {\n key: \"canDropOnTarget\",\n value: function canDropOnTarget(targetId) {\n // undefined on initial render\n if (!targetId) {\n return false;\n }\n\n var target = this.registry.getTarget(targetId);\n invariant(target, \"Expected to find a valid target. targetId=\".concat(targetId));\n\n if (!this.isDragging() || this.didDrop()) {\n return false;\n }\n\n var targetType = this.registry.getTargetType(targetId);\n var draggedItemType = this.getItemType();\n return matchesType(targetType, draggedItemType) && target.canDrop(this, targetId);\n }\n }, {\n key: \"isDragging\",\n value: function isDragging() {\n return Boolean(this.getItemType());\n }\n }, {\n key: \"isDraggingSource\",\n value: function isDraggingSource(sourceId) {\n // undefined on initial render\n if (!sourceId) {\n return false;\n }\n\n var source = this.registry.getSource(sourceId, true);\n invariant(source, \"Expected to find a valid source. sourceId=\".concat(sourceId));\n\n if (!this.isDragging() || !this.isSourcePublic()) {\n return false;\n }\n\n var sourceType = this.registry.getSourceType(sourceId);\n var draggedItemType = this.getItemType();\n\n if (sourceType !== draggedItemType) {\n return false;\n }\n\n return source.isDragging(this, sourceId);\n }\n }, {\n key: \"isOverTarget\",\n value: function isOverTarget(targetId) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n shallow: false\n };\n\n // undefined on initial render\n if (!targetId) {\n return false;\n }\n\n var shallow = options.shallow;\n\n if (!this.isDragging()) {\n return false;\n }\n\n var targetType = this.registry.getTargetType(targetId);\n var draggedItemType = this.getItemType();\n\n if (draggedItemType && !matchesType(targetType, draggedItemType)) {\n return false;\n }\n\n var targetIds = this.getTargetIds();\n\n if (!targetIds.length) {\n return false;\n }\n\n var index = targetIds.indexOf(targetId);\n\n if (shallow) {\n return index === targetIds.length - 1;\n } else {\n return index > -1;\n }\n }\n }, {\n key: \"getItemType\",\n value: function getItemType() {\n return this.store.getState().dragOperation.itemType;\n }\n }, {\n key: \"getItem\",\n value: function getItem() {\n return this.store.getState().dragOperation.item;\n }\n }, {\n key: \"getSourceId\",\n value: function getSourceId() {\n return this.store.getState().dragOperation.sourceId;\n }\n }, {\n key: \"getTargetIds\",\n value: function getTargetIds() {\n return this.store.getState().dragOperation.targetIds;\n }\n }, {\n key: \"getDropResult\",\n value: function getDropResult() {\n return this.store.getState().dragOperation.dropResult;\n }\n }, {\n key: \"didDrop\",\n value: function didDrop() {\n return this.store.getState().dragOperation.didDrop;\n }\n }, {\n key: \"isSourcePublic\",\n value: function isSourcePublic() {\n return Boolean(this.store.getState().dragOperation.isSourcePublic);\n }\n }, {\n key: \"getInitialClientOffset\",\n value: function getInitialClientOffset() {\n return this.store.getState().dragOffset.initialClientOffset;\n }\n }, {\n key: \"getInitialSourceClientOffset\",\n value: function getInitialSourceClientOffset() {\n return this.store.getState().dragOffset.initialSourceClientOffset;\n }\n }, {\n key: \"getClientOffset\",\n value: function getClientOffset() {\n return this.store.getState().dragOffset.clientOffset;\n }\n }, {\n key: \"getSourceClientOffset\",\n value: function getSourceClientOffset() {\n return _getSourceClientOffset(this.store.getState().dragOffset);\n }\n }, {\n key: \"getDifferenceFromInitialOffset\",\n value: function getDifferenceFromInitialOffset() {\n return _getDifferenceFromInitialOffset(this.store.getState().dragOffset);\n }\n }]);\n\n return DragDropMonitorImpl;\n}();","var nextUniqueId = 0;\nexport function getNextUniqueId() {\n return nextUniqueId++;\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nimport { invariant } from '@react-dnd/invariant';\nexport function validateSourceContract(source) {\n invariant(typeof source.canDrag === 'function', 'Expected canDrag to be a function.');\n invariant(typeof source.beginDrag === 'function', 'Expected beginDrag to be a function.');\n invariant(typeof source.endDrag === 'function', 'Expected endDrag to be a function.');\n}\nexport function validateTargetContract(target) {\n invariant(typeof target.canDrop === 'function', 'Expected canDrop to be a function.');\n invariant(typeof target.hover === 'function', 'Expected hover to be a function.');\n invariant(typeof target.drop === 'function', 'Expected beginDrag to be a function.');\n}\nexport function validateType(type, allowArray) {\n if (allowArray && Array.isArray(type)) {\n type.forEach(function (t) {\n return validateType(t, false);\n });\n return;\n }\n\n invariant(typeof type === 'string' || _typeof(type) === 'symbol', allowArray ? 'Type can only be a string, a symbol, or an array of either.' : 'Type can only be a string or a symbol.');\n}","// Safari 6 and 6.1 for desktop, iPad, and iPhone are the only browsers that\n// have WebKitMutationObserver but not un-prefixed MutationObserver.\n// Must use `global` or `self` instead of `window` to work in both frames and web\n// workers. `global` is a provision of Browserify, Mr, Mrs, or Mop.\n/* globals self */ const scope = typeof global !== 'undefined' ? global : self;\nconst BrowserMutationObserver = scope.MutationObserver || scope.WebKitMutationObserver;\nexport function makeRequestCallFromTimer(callback) {\n return function requestCall() {\n // We dispatch a timeout with a specified delay of 0 for engines that\n // can reliably accommodate that request. This will usually be snapped\n // to a 4 milisecond delay, but once we're flushing, there's no delay\n // between events.\n const timeoutHandle = setTimeout(handleTimer, 0);\n // However, since this timer gets frequently dropped in Firefox\n // workers, we enlist an interval handle that will try to fire\n // an event 20 times per second until it succeeds.\n const intervalHandle = setInterval(handleTimer, 50);\n function handleTimer() {\n // Whichever timer succeeds will cancel both timers and\n // execute the callback.\n clearTimeout(timeoutHandle);\n clearInterval(intervalHandle);\n callback();\n }\n };\n}\n// To request a high priority event, we induce a mutation observer by toggling\n// the text of a text node between \"1\" and \"-1\".\nexport function makeRequestCallFromMutationObserver(callback) {\n let toggle = 1;\n const observer = new BrowserMutationObserver(callback);\n const node = document.createTextNode('');\n observer.observe(node, {\n characterData: true\n });\n return function requestCall() {\n toggle = -toggle;\n node.data = toggle;\n };\n}\nexport const makeRequestCall = typeof BrowserMutationObserver === 'function' ? // reliably everywhere they are implemented.\n// They are implemented in all modern browsers.\n//\n// - Android 4-4.3\n// - Chrome 26-34\n// - Firefox 14-29\n// - Internet Explorer 11\n// - iPad Safari 6-7.1\n// - iPhone Safari 7-7.1\n// - Safari 6-7\nmakeRequestCallFromMutationObserver : // task queue, are implemented in Internet Explorer 10, Safari 5.0-1, and Opera\n// 11-12, and in web workers in many engines.\n// Although message channels yield to any queued rendering and IO tasks, they\n// would be better than imposing the 4ms delay of timers.\n// However, they do not work reliably in Internet Explorer or Safari.\n// Internet Explorer 10 is the only browser that has setImmediate but does\n// not have MutationObservers.\n// Although setImmediate yields to the browser's renderer, it would be\n// preferrable to falling back to setTimeout since it does not have\n// the minimum 4ms penalty.\n// Unfortunately there appears to be a bug in Internet Explorer 10 Mobile (and\n// Desktop to a lesser extent) that renders both setImmediate and\n// MessageChannel useless for the purposes of ASAP.\n// https://github.com/kriskowal/q/issues/396\n// Timers are implemented universally.\n// We fall back to timers in workers in most engines, and in foreground\n// contexts in the following browsers.\n// However, note that even this simple case requires nuances to operate in a\n// broad spectrum of browsers.\n//\n// - Firefox 3-13\n// - Internet Explorer 6-9\n// - iPad Safari 4.3\n// - Lynx 2.8.7\nmakeRequestCallFromTimer;\n\n//# sourceMappingURL=makeRequestCall.mjs.map","import { makeRequestCall, makeRequestCallFromTimer } from './makeRequestCall.mjs';\nexport class AsapQueue {\n // Use the fastest means possible to execute a task in its own turn, with\n // priority over other events including IO, animation, reflow, and redraw\n // events in browsers.\n //\n // An exception thrown by a task will permanently interrupt the processing of\n // subsequent tasks. The higher level `asap` function ensures that if an\n // exception is thrown by a task, that the task queue will continue flushing as\n // soon as possible, but if you use `rawAsap` directly, you are responsible to\n // either ensure that no exceptions are thrown from your task, or to manually\n // call `rawAsap.requestFlush` if an exception is thrown.\n enqueueTask(task) {\n const { queue: q , requestFlush } = this;\n if (!q.length) {\n requestFlush();\n this.flushing = true;\n }\n // Equivalent to push, but avoids a function call.\n q[q.length] = task;\n }\n constructor(){\n this.queue = [];\n // We queue errors to ensure they are thrown in right order (FIFO).\n // Array-as-queue is good enough here, since we are just dealing with exceptions.\n this.pendingErrors = [];\n // Once a flush has been requested, no further calls to `requestFlush` are\n // necessary until the next `flush` completes.\n // @ts-ignore\n this.flushing = false;\n // The position of the next task to execute in the task queue. This is\n // preserved between calls to `flush` so that it can be resumed if\n // a task throws an exception.\n this.index = 0;\n // If a task schedules additional tasks recursively, the task queue can grow\n // unbounded. To prevent memory exhaustion, the task queue will periodically\n // truncate already-completed tasks.\n this.capacity = 1024;\n // The flush function processes all tasks that have been scheduled with\n // `rawAsap` unless and until one of those tasks throws an exception.\n // If a task throws an exception, `flush` ensures that its state will remain\n // consistent and will resume where it left off when called again.\n // However, `flush` does not make any arrangements to be called again if an\n // exception is thrown.\n this.flush = ()=>{\n const { queue: q } = this;\n while(this.index < q.length){\n const currentIndex = this.index;\n // Advance the index before calling the task. This ensures that we will\n // begin flushing on the next task the task throws an error.\n this.index++;\n q[currentIndex].call();\n // Prevent leaking memory for long chains of recursive calls to `asap`.\n // If we call `asap` within tasks scheduled by `asap`, the queue will\n // grow, but to avoid an O(n) walk for every task we execute, we don't\n // shift tasks off the queue after they have been executed.\n // Instead, we periodically shift 1024 tasks off the queue.\n if (this.index > this.capacity) {\n // Manually shift all values starting at the index back to the\n // beginning of the queue.\n for(let scan = 0, newLength = q.length - this.index; scan < newLength; scan++){\n q[scan] = q[scan + this.index];\n }\n q.length -= this.index;\n this.index = 0;\n }\n }\n q.length = 0;\n this.index = 0;\n this.flushing = false;\n };\n // In a web browser, exceptions are not fatal. However, to avoid\n // slowing down the queue of pending tasks, we rethrow the error in a\n // lower priority turn.\n this.registerPendingError = (err)=>{\n this.pendingErrors.push(err);\n this.requestErrorThrow();\n };\n // `requestFlush` requests that the high priority event queue be flushed as\n // soon as possible.\n // This is useful to prevent an error thrown in a task from stalling the event\n // queue if the exception handled by Node.js’s\n // `process.on(\"uncaughtException\")` or by a domain.\n // `requestFlush` is implemented using a strategy based on data collected from\n // every available SauceLabs Selenium web driver worker at time of writing.\n // https://docs.google.com/spreadsheets/d/1mG-5UYGup5qxGdEMWkhP6BWCz053NUb2E1QoUTU16uA/edit#gid=783724593\n this.requestFlush = makeRequestCall(this.flush);\n this.requestErrorThrow = makeRequestCallFromTimer(()=>{\n // Throw first error\n if (this.pendingErrors.length) {\n throw this.pendingErrors.shift();\n }\n });\n }\n} // The message channel technique was discovered by Malte Ubl and was the\n // original foundation for this library.\n // http://www.nonblocking.io/2011/06/windownexttick.html\n // Safari 6.0.5 (at least) intermittently fails to create message ports on a\n // page's first load. Thankfully, this version of Safari supports\n // MutationObservers, so we don't need to fall back in that case.\n // function makeRequestCallFromMessageChannel(callback) {\n // var channel = new MessageChannel();\n // channel.port1.onmessage = callback;\n // return function requestCall() {\n // channel.port2.postMessage(0);\n // };\n // }\n // For reasons explained above, we are also unable to use `setImmediate`\n // under any circumstances.\n // Even if we were, there is another bug in Internet Explorer 10.\n // It is not sufficient to assign `setImmediate` to `requestFlush` because\n // `setImmediate` must be called *by name* and therefore must be wrapped in a\n // closure.\n // Never forget.\n // function makeRequestCallFromSetImmediate(callback) {\n // return function requestCall() {\n // setImmediate(callback);\n // };\n // }\n // Safari 6.0 has a problem where timers will get lost while the user is\n // scrolling. This problem does not impact ASAP because Safari 6.0 supports\n // mutation observers, so that implementation is used instead.\n // However, if we ever elect to use timers in Safari, the prevalent work-around\n // is to add a scroll event listener that calls for a flush.\n // `setTimeout` does not call the passed callback if the delay is less than\n // approximately 7 in web workers in Firefox 8 through 18, and sometimes not\n // even then.\n // This is for `asap.js` only.\n // Its name will be periodically randomized to break any code that depends on\n // // its existence.\n // rawAsap.makeRequestCallFromTimer = makeRequestCallFromTimer\n // ASAP was originally a nextTick shim included in Q. This was factored out\n // into this ASAP package. It was later adapted to RSVP which made further\n // amendments. These decisions, particularly to marginalize MessageChannel and\n // to capture the MutationObserver implementation in a closure, were integrated\n // back into ASAP proper.\n // https://github.com/tildeio/rsvp.js/blob/cddf7232546a9cf858524b75cde6f9edf72620a7/lib/rsvp/asap.js\n\n//# sourceMappingURL=AsapQueue.mjs.map","// `call`, just like a function.\nexport class RawTask {\n call() {\n try {\n this.task && this.task();\n } catch (error) {\n this.onError(error);\n } finally{\n this.task = null;\n this.release(this);\n }\n }\n constructor(onError, release){\n this.onError = onError;\n this.release = release;\n this.task = null;\n }\n}\n\n//# sourceMappingURL=RawTask.mjs.map","import { RawTask } from './RawTask.mjs';\nexport class TaskFactory {\n create(task) {\n const tasks = this.freeTasks;\n const t1 = tasks.length ? tasks.pop() : new RawTask(this.onError, (t)=>tasks[tasks.length] = t\n );\n t1.task = task;\n return t1;\n }\n constructor(onError){\n this.onError = onError;\n this.freeTasks = [];\n }\n}\n\n//# sourceMappingURL=TaskFactory.mjs.map","import { AsapQueue } from './AsapQueue.mjs';\nimport { TaskFactory } from './TaskFactory.mjs';\nconst asapQueue = new AsapQueue();\nconst taskFactory = new TaskFactory(asapQueue.registerPendingError);\n/**\n * Calls a task as soon as possible after returning, in its own event, with priority\n * over other events like animation, reflow, and repaint. An error thrown from an\n * event will not interrupt, nor even substantially slow down the processing of\n * other events, but will be rather postponed to a lower priority event.\n * @param {{call}} task A callable object, typically a function that takes no\n * arguments.\n */ export function asap(task) {\n asapQueue.enqueueTask(taskFactory.create(task));\n}\n\n//# sourceMappingURL=asap.mjs.map","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport { invariant } from '@react-dnd/invariant';\nimport { addSource as _addSource, addTarget as _addTarget, removeSource as _removeSource, removeTarget as _removeTarget } from '../actions/registry';\nimport { getNextUniqueId } from '../utils/getNextUniqueId';\nimport { HandlerRole } from '../interfaces';\nimport { validateSourceContract, validateTargetContract, validateType } from '../contracts';\nimport { asap } from '@react-dnd/asap';\n\nfunction getNextHandlerId(role) {\n var id = getNextUniqueId().toString();\n\n switch (role) {\n case HandlerRole.SOURCE:\n return \"S\".concat(id);\n\n case HandlerRole.TARGET:\n return \"T\".concat(id);\n\n default:\n throw new Error(\"Unknown Handler Role: \".concat(role));\n }\n}\n\nfunction parseRoleFromHandlerId(handlerId) {\n switch (handlerId[0]) {\n case 'S':\n return HandlerRole.SOURCE;\n\n case 'T':\n return HandlerRole.TARGET;\n\n default:\n invariant(false, \"Cannot parse handler ID: \".concat(handlerId));\n }\n}\n\nfunction mapContainsValue(map, searchValue) {\n var entries = map.entries();\n var isDone = false;\n\n do {\n var _entries$next = entries.next(),\n done = _entries$next.done,\n _entries$next$value = _slicedToArray(_entries$next.value, 2),\n value = _entries$next$value[1];\n\n if (value === searchValue) {\n return true;\n }\n\n isDone = !!done;\n } while (!isDone);\n\n return false;\n}\n\nexport var HandlerRegistryImpl = /*#__PURE__*/function () {\n function HandlerRegistryImpl(store) {\n _classCallCheck(this, HandlerRegistryImpl);\n\n _defineProperty(this, \"types\", new Map());\n\n _defineProperty(this, \"dragSources\", new Map());\n\n _defineProperty(this, \"dropTargets\", new Map());\n\n _defineProperty(this, \"pinnedSourceId\", null);\n\n _defineProperty(this, \"pinnedSource\", null);\n\n _defineProperty(this, \"store\", void 0);\n\n this.store = store;\n }\n\n _createClass(HandlerRegistryImpl, [{\n key: \"addSource\",\n value: function addSource(type, source) {\n validateType(type);\n validateSourceContract(source);\n var sourceId = this.addHandler(HandlerRole.SOURCE, type, source);\n this.store.dispatch(_addSource(sourceId));\n return sourceId;\n }\n }, {\n key: \"addTarget\",\n value: function addTarget(type, target) {\n validateType(type, true);\n validateTargetContract(target);\n var targetId = this.addHandler(HandlerRole.TARGET, type, target);\n this.store.dispatch(_addTarget(targetId));\n return targetId;\n }\n }, {\n key: \"containsHandler\",\n value: function containsHandler(handler) {\n return mapContainsValue(this.dragSources, handler) || mapContainsValue(this.dropTargets, handler);\n }\n }, {\n key: \"getSource\",\n value: function getSource(sourceId) {\n var includePinned = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n invariant(this.isSourceId(sourceId), 'Expected a valid source ID.');\n var isPinned = includePinned && sourceId === this.pinnedSourceId;\n var source = isPinned ? this.pinnedSource : this.dragSources.get(sourceId);\n return source;\n }\n }, {\n key: \"getTarget\",\n value: function getTarget(targetId) {\n invariant(this.isTargetId(targetId), 'Expected a valid target ID.');\n return this.dropTargets.get(targetId);\n }\n }, {\n key: \"getSourceType\",\n value: function getSourceType(sourceId) {\n invariant(this.isSourceId(sourceId), 'Expected a valid source ID.');\n return this.types.get(sourceId);\n }\n }, {\n key: \"getTargetType\",\n value: function getTargetType(targetId) {\n invariant(this.isTargetId(targetId), 'Expected a valid target ID.');\n return this.types.get(targetId);\n }\n }, {\n key: \"isSourceId\",\n value: function isSourceId(handlerId) {\n var role = parseRoleFromHandlerId(handlerId);\n return role === HandlerRole.SOURCE;\n }\n }, {\n key: \"isTargetId\",\n value: function isTargetId(handlerId) {\n var role = parseRoleFromHandlerId(handlerId);\n return role === HandlerRole.TARGET;\n }\n }, {\n key: \"removeSource\",\n value: function removeSource(sourceId) {\n var _this = this;\n\n invariant(this.getSource(sourceId), 'Expected an existing source.');\n this.store.dispatch(_removeSource(sourceId));\n asap(function () {\n _this.dragSources.delete(sourceId);\n\n _this.types.delete(sourceId);\n });\n }\n }, {\n key: \"removeTarget\",\n value: function removeTarget(targetId) {\n invariant(this.getTarget(targetId), 'Expected an existing target.');\n this.store.dispatch(_removeTarget(targetId));\n this.dropTargets.delete(targetId);\n this.types.delete(targetId);\n }\n }, {\n key: \"pinSource\",\n value: function pinSource(sourceId) {\n var source = this.getSource(sourceId);\n invariant(source, 'Expected an existing source.');\n this.pinnedSourceId = sourceId;\n this.pinnedSource = source;\n }\n }, {\n key: \"unpinSource\",\n value: function unpinSource() {\n invariant(this.pinnedSource, 'No source is pinned at the time.');\n this.pinnedSourceId = null;\n this.pinnedSource = null;\n }\n }, {\n key: \"addHandler\",\n value: function addHandler(role, type, handler) {\n var id = getNextHandlerId(role);\n this.types.set(id, type);\n\n if (role === HandlerRole.SOURCE) {\n this.dragSources.set(id, handler);\n } else if (role === HandlerRole.TARGET) {\n this.dropTargets.set(id, handler);\n }\n\n return id;\n }\n }]);\n\n return HandlerRegistryImpl;\n}();","import { DragDropManagerImpl } from './classes/DragDropManagerImpl';\nimport { createStore } from 'redux';\nimport { reduce } from './reducers';\nimport { DragDropMonitorImpl } from './classes/DragDropMonitorImpl';\nimport { HandlerRegistryImpl } from './classes/HandlerRegistryImpl';\nexport function createDragDropManager(backendFactory) {\n var globalContext = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;\n var backendOptions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var debugMode = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n var store = makeStoreInstance(debugMode);\n var monitor = new DragDropMonitorImpl(store, new HandlerRegistryImpl(store));\n var manager = new DragDropManagerImpl(store, monitor);\n var backend = backendFactory(manager, globalContext, backendOptions);\n manager.receiveBackend(backend);\n return manager;\n}\n\nfunction makeStoreInstance(debugMode) {\n // TODO: if we ever make a react-native version of this,\n // we'll need to consider how to pull off dev-tooling\n var reduxDevTools = typeof window !== 'undefined' && window.__REDUX_DEVTOOLS_EXTENSION__;\n return createStore(reduce, debugMode && reduxDevTools && reduxDevTools({\n name: 'dnd-core',\n instanceId: 'dnd-core'\n }));\n}","var _excluded = [\"children\"];\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { useEffect, memo } from 'react';\nimport { createDragDropManager } from 'dnd-core';\nimport { DndContext } from './DndContext';\nvar refCount = 0;\nvar INSTANCE_SYM = Symbol.for('__REACT_DND_CONTEXT_INSTANCE__');\n/**\n * A React component that provides the React-DnD context\n */\n\nexport var DndProvider = memo(function DndProvider(_ref) {\n var children = _ref.children,\n props = _objectWithoutProperties(_ref, _excluded);\n\n var _getDndContextValue = getDndContextValue(props),\n _getDndContextValue2 = _slicedToArray(_getDndContextValue, 2),\n manager = _getDndContextValue2[0],\n isGlobalInstance = _getDndContextValue2[1]; // memoized from props\n\n /**\n * If the global context was used to store the DND context\n * then where theres no more references to it we should\n * clean it up to avoid memory leaks\n */\n\n\n useEffect(function () {\n if (isGlobalInstance) {\n var context = getGlobalContext();\n ++refCount;\n return function () {\n if (--refCount === 0) {\n context[INSTANCE_SYM] = null;\n }\n };\n }\n }, []);\n return _jsx(DndContext.Provider, Object.assign({\n value: manager\n }, {\n children: children\n }), void 0);\n});\n\nfunction getDndContextValue(props) {\n if ('manager' in props) {\n var _manager = {\n dragDropManager: props.manager\n };\n return [_manager, false];\n }\n\n var manager = createSingletonDndContext(props.backend, props.context, props.options, props.debugMode);\n var isGlobalInstance = !props.context;\n return [manager, isGlobalInstance];\n}\n\nfunction createSingletonDndContext(backend) {\n var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : getGlobalContext();\n var options = arguments.length > 2 ? arguments[2] : undefined;\n var debugMode = arguments.length > 3 ? arguments[3] : undefined;\n var ctx = context;\n\n if (!ctx[INSTANCE_SYM]) {\n ctx[INSTANCE_SYM] = {\n dragDropManager: createDragDropManager(backend, context, options, debugMode)\n };\n }\n\n return ctx[INSTANCE_SYM];\n}\n\nfunction getGlobalContext() {\n return typeof global !== 'undefined' ? global : window;\n}","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { invariant } from '@react-dnd/invariant';\nvar isCallingCanDrag = false;\nvar isCallingIsDragging = false;\nexport var DragSourceMonitorImpl = /*#__PURE__*/function () {\n function DragSourceMonitorImpl(manager) {\n _classCallCheck(this, DragSourceMonitorImpl);\n\n _defineProperty(this, \"internalMonitor\", void 0);\n\n _defineProperty(this, \"sourceId\", null);\n\n this.internalMonitor = manager.getMonitor();\n }\n\n _createClass(DragSourceMonitorImpl, [{\n key: \"receiveHandlerId\",\n value: function receiveHandlerId(sourceId) {\n this.sourceId = sourceId;\n }\n }, {\n key: \"getHandlerId\",\n value: function getHandlerId() {\n return this.sourceId;\n }\n }, {\n key: \"canDrag\",\n value: function canDrag() {\n invariant(!isCallingCanDrag, 'You may not call monitor.canDrag() inside your canDrag() implementation. ' + 'Read more: http://react-dnd.github.io/react-dnd/docs/api/drag-source-monitor');\n\n try {\n isCallingCanDrag = true;\n return this.internalMonitor.canDragSource(this.sourceId);\n } finally {\n isCallingCanDrag = false;\n }\n }\n }, {\n key: \"isDragging\",\n value: function isDragging() {\n if (!this.sourceId) {\n return false;\n }\n\n invariant(!isCallingIsDragging, 'You may not call monitor.isDragging() inside your isDragging() implementation. ' + 'Read more: http://react-dnd.github.io/react-dnd/docs/api/drag-source-monitor');\n\n try {\n isCallingIsDragging = true;\n return this.internalMonitor.isDraggingSource(this.sourceId);\n } finally {\n isCallingIsDragging = false;\n }\n }\n }, {\n key: \"subscribeToStateChange\",\n value: function subscribeToStateChange(listener, options) {\n return this.internalMonitor.subscribeToStateChange(listener, options);\n }\n }, {\n key: \"isDraggingSource\",\n value: function isDraggingSource(sourceId) {\n return this.internalMonitor.isDraggingSource(sourceId);\n }\n }, {\n key: \"isOverTarget\",\n value: function isOverTarget(targetId, options) {\n return this.internalMonitor.isOverTarget(targetId, options);\n }\n }, {\n key: \"getTargetIds\",\n value: function getTargetIds() {\n return this.internalMonitor.getTargetIds();\n }\n }, {\n key: \"isSourcePublic\",\n value: function isSourcePublic() {\n return this.internalMonitor.isSourcePublic();\n }\n }, {\n key: \"getSourceId\",\n value: function getSourceId() {\n return this.internalMonitor.getSourceId();\n }\n }, {\n key: \"subscribeToOffsetChange\",\n value: function subscribeToOffsetChange(listener) {\n return this.internalMonitor.subscribeToOffsetChange(listener);\n }\n }, {\n key: \"canDragSource\",\n value: function canDragSource(sourceId) {\n return this.internalMonitor.canDragSource(sourceId);\n }\n }, {\n key: \"canDropOnTarget\",\n value: function canDropOnTarget(targetId) {\n return this.internalMonitor.canDropOnTarget(targetId);\n }\n }, {\n key: \"getItemType\",\n value: function getItemType() {\n return this.internalMonitor.getItemType();\n }\n }, {\n key: \"getItem\",\n value: function getItem() {\n return this.internalMonitor.getItem();\n }\n }, {\n key: \"getDropResult\",\n value: function getDropResult() {\n return this.internalMonitor.getDropResult();\n }\n }, {\n key: \"didDrop\",\n value: function didDrop() {\n return this.internalMonitor.didDrop();\n }\n }, {\n key: \"getInitialClientOffset\",\n value: function getInitialClientOffset() {\n return this.internalMonitor.getInitialClientOffset();\n }\n }, {\n key: \"getInitialSourceClientOffset\",\n value: function getInitialSourceClientOffset() {\n return this.internalMonitor.getInitialSourceClientOffset();\n }\n }, {\n key: \"getSourceClientOffset\",\n value: function getSourceClientOffset() {\n return this.internalMonitor.getSourceClientOffset();\n }\n }, {\n key: \"getClientOffset\",\n value: function getClientOffset() {\n return this.internalMonitor.getClientOffset();\n }\n }, {\n key: \"getDifferenceFromInitialOffset\",\n value: function getDifferenceFromInitialOffset() {\n return this.internalMonitor.getDifferenceFromInitialOffset();\n }\n }]);\n\n return DragSourceMonitorImpl;\n}();","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { invariant } from '@react-dnd/invariant';\nvar isCallingCanDrop = false;\nexport var DropTargetMonitorImpl = /*#__PURE__*/function () {\n function DropTargetMonitorImpl(manager) {\n _classCallCheck(this, DropTargetMonitorImpl);\n\n _defineProperty(this, \"internalMonitor\", void 0);\n\n _defineProperty(this, \"targetId\", null);\n\n this.internalMonitor = manager.getMonitor();\n }\n\n _createClass(DropTargetMonitorImpl, [{\n key: \"receiveHandlerId\",\n value: function receiveHandlerId(targetId) {\n this.targetId = targetId;\n }\n }, {\n key: \"getHandlerId\",\n value: function getHandlerId() {\n return this.targetId;\n }\n }, {\n key: \"subscribeToStateChange\",\n value: function subscribeToStateChange(listener, options) {\n return this.internalMonitor.subscribeToStateChange(listener, options);\n }\n }, {\n key: \"canDrop\",\n value: function canDrop() {\n // Cut out early if the target id has not been set. This should prevent errors\n // where the user has an older version of dnd-core like in\n // https://github.com/react-dnd/react-dnd/issues/1310\n if (!this.targetId) {\n return false;\n }\n\n invariant(!isCallingCanDrop, 'You may not call monitor.canDrop() inside your canDrop() implementation. ' + 'Read more: http://react-dnd.github.io/react-dnd/docs/api/drop-target-monitor');\n\n try {\n isCallingCanDrop = true;\n return this.internalMonitor.canDropOnTarget(this.targetId);\n } finally {\n isCallingCanDrop = false;\n }\n }\n }, {\n key: \"isOver\",\n value: function isOver(options) {\n if (!this.targetId) {\n return false;\n }\n\n return this.internalMonitor.isOverTarget(this.targetId, options);\n }\n }, {\n key: \"getItemType\",\n value: function getItemType() {\n return this.internalMonitor.getItemType();\n }\n }, {\n key: \"getItem\",\n value: function getItem() {\n return this.internalMonitor.getItem();\n }\n }, {\n key: \"getDropResult\",\n value: function getDropResult() {\n return this.internalMonitor.getDropResult();\n }\n }, {\n key: \"didDrop\",\n value: function didDrop() {\n return this.internalMonitor.didDrop();\n }\n }, {\n key: \"getInitialClientOffset\",\n value: function getInitialClientOffset() {\n return this.internalMonitor.getInitialClientOffset();\n }\n }, {\n key: \"getInitialSourceClientOffset\",\n value: function getInitialSourceClientOffset() {\n return this.internalMonitor.getInitialSourceClientOffset();\n }\n }, {\n key: \"getSourceClientOffset\",\n value: function getSourceClientOffset() {\n return this.internalMonitor.getSourceClientOffset();\n }\n }, {\n key: \"getClientOffset\",\n value: function getClientOffset() {\n return this.internalMonitor.getClientOffset();\n }\n }, {\n key: \"getDifferenceFromInitialOffset\",\n value: function getDifferenceFromInitialOffset() {\n return this.internalMonitor.getDifferenceFromInitialOffset();\n }\n }]);\n\n return DropTargetMonitorImpl;\n}();","import { invariant } from '@react-dnd/invariant';\nimport { cloneElement, isValidElement } from 'react';\n\nfunction throwIfCompositeComponentElement(element) {\n // Custom components can no longer be wrapped directly in React DnD 2.0\n // so that we don't need to depend on findDOMNode() from react-dom.\n if (typeof element.type === 'string') {\n return;\n }\n\n var displayName = element.type.displayName || element.type.name || 'the component';\n throw new Error('Only native element nodes can now be passed to React DnD connectors.' + \"You can either wrap \".concat(displayName, \" into a <div>, or turn it into a \") + 'drag source or a drop target itself.');\n}\n\nfunction wrapHookToRecognizeElement(hook) {\n return function () {\n var elementOrNode = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n // When passed a node, call the hook straight away.\n if (!isValidElement(elementOrNode)) {\n var node = elementOrNode;\n hook(node, options); // return the node so it can be chained (e.g. when within callback refs\n // <div ref={node => connectDragSource(connectDropTarget(node))}/>\n\n return node;\n } // If passed a ReactElement, clone it and attach this function as a ref.\n // This helps us achieve a neat API where user doesn't even know that refs\n // are being used under the hood.\n\n\n var element = elementOrNode;\n throwIfCompositeComponentElement(element); // When no options are passed, use the hook directly\n\n var ref = options ? function (node) {\n return hook(node, options);\n } : hook;\n return cloneWithRef(element, ref);\n };\n}\n\nexport function wrapConnectorHooks(hooks) {\n var wrappedHooks = {};\n Object.keys(hooks).forEach(function (key) {\n var hook = hooks[key]; // ref objects should be passed straight through without wrapping\n\n if (key.endsWith('Ref')) {\n wrappedHooks[key] = hooks[key];\n } else {\n var wrappedHook = wrapHookToRecognizeElement(hook);\n\n wrappedHooks[key] = function () {\n return wrappedHook;\n };\n }\n });\n return wrappedHooks;\n}\n\nfunction setRef(ref, node) {\n if (typeof ref === 'function') {\n ref(node);\n } else {\n ref.current = node;\n }\n}\n\nfunction cloneWithRef(element, newRef) {\n var previousRef = element.ref;\n invariant(typeof previousRef !== 'string', 'Cannot connect React DnD to an element with an existing string ref. ' + 'Please convert it to use a callback ref instead, or wrap it into a <span> or <div>. ' + 'Read more: https://reactjs.org/docs/refs-and-the-dom.html#callback-refs');\n\n if (!previousRef) {\n // When there is no ref on the element, use the new ref directly\n return cloneElement(element, {\n ref: newRef\n });\n } else {\n return cloneElement(element, {\n ref: function ref(node) {\n setRef(previousRef, node);\n setRef(newRef, node);\n }\n });\n }\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nexport function isRef(obj) {\n return (// eslint-disable-next-line no-prototype-builtins\n obj !== null && _typeof(obj) === 'object' && Object.prototype.hasOwnProperty.call(obj, 'current')\n );\n}","function shallowEqual(objA, objB, compare, compareContext) {\n var compareResult = compare ? compare.call(compareContext, objA, objB) : void 0;\n\n if (compareResult !== void 0) {\n return !!compareResult;\n }\n\n if (objA === objB) {\n return true;\n }\n\n if (typeof objA !== 'object' || !objA || typeof objB !== 'object' || !objB) {\n return false;\n }\n\n var keysA = Object.keys(objA);\n var keysB = Object.keys(objB);\n\n if (keysA.length !== keysB.length) {\n return false;\n }\n\n var bHasOwnProperty = Object.prototype.hasOwnProperty.bind(objB); // Test for A's keys different from B.\n\n for (var idx = 0; idx < keysA.length; idx++) {\n var key = keysA[idx];\n\n if (!bHasOwnProperty(key)) {\n return false;\n }\n\n var valueA = objA[key];\n var valueB = objB[key];\n compareResult = compare ? compare.call(compareContext, valueA, valueB, key) : void 0;\n\n if (compareResult === false || compareResult === void 0 && valueA !== valueB) {\n return false;\n }\n }\n\n return true;\n}\n\nexport { shallowEqual };\n//# sourceMappingURL=shallowequal.esm.js.map\n","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { wrapConnectorHooks } from './wrapConnectorHooks';\nimport { isRef } from './isRef';\nimport { shallowEqual } from '@react-dnd/shallowequal';\nexport var SourceConnector = /*#__PURE__*/function () {\n // The drop target may either be attached via ref or connect function\n // The drag preview may either be attached via ref or connect function\n function SourceConnector(backend) {\n var _this = this;\n\n _classCallCheck(this, SourceConnector);\n\n _defineProperty(this, \"hooks\", wrapConnectorHooks({\n dragSource: function dragSource(node, options) {\n _this.clearDragSource();\n\n _this.dragSourceOptions = options || null;\n\n if (isRef(node)) {\n _this.dragSourceRef = node;\n } else {\n _this.dragSourceNode = node;\n }\n\n _this.reconnectDragSource();\n },\n dragPreview: function dragPreview(node, options) {\n _this.clearDragPreview();\n\n _this.dragPreviewOptions = options || null;\n\n if (isRef(node)) {\n _this.dragPreviewRef = node;\n } else {\n _this.dragPreviewNode = node;\n }\n\n _this.reconnectDragPreview();\n }\n }));\n\n _defineProperty(this, \"handlerId\", null);\n\n _defineProperty(this, \"dragSourceRef\", null);\n\n _defineProperty(this, \"dragSourceNode\", void 0);\n\n _defineProperty(this, \"dragSourceOptionsInternal\", null);\n\n _defineProperty(this, \"dragSourceUnsubscribe\", void 0);\n\n _defineProperty(this, \"dragPreviewRef\", null);\n\n _defineProperty(this, \"dragPreviewNode\", void 0);\n\n _defineProperty(this, \"dragPreviewOptionsInternal\", null);\n\n _defineProperty(this, \"dragPreviewUnsubscribe\", void 0);\n\n _defineProperty(this, \"lastConnectedHandlerId\", null);\n\n _defineProperty(this, \"lastConnectedDragSource\", null);\n\n _defineProperty(this, \"lastConnectedDragSourceOptions\", null);\n\n _defineProperty(this, \"lastConnectedDragPreview\", null);\n\n _defineProperty(this, \"lastConnectedDragPreviewOptions\", null);\n\n _defineProperty(this, \"backend\", void 0);\n\n this.backend = backend;\n }\n\n _createClass(SourceConnector, [{\n key: \"receiveHandlerId\",\n value: function receiveHandlerId(newHandlerId) {\n if (this.handlerId === newHandlerId) {\n return;\n }\n\n this.handlerId = newHandlerId;\n this.reconnect();\n }\n }, {\n key: \"connectTarget\",\n get: function get() {\n return this.dragSource;\n }\n }, {\n key: \"dragSourceOptions\",\n get: function get() {\n return this.dragSourceOptionsInternal;\n },\n set: function set(options) {\n this.dragSourceOptionsInternal = options;\n }\n }, {\n key: \"dragPreviewOptions\",\n get: function get() {\n return this.dragPreviewOptionsInternal;\n },\n set: function set(options) {\n this.dragPreviewOptionsInternal = options;\n }\n }, {\n key: \"reconnect\",\n value: function reconnect() {\n this.reconnectDragSource();\n this.reconnectDragPreview();\n }\n }, {\n key: \"reconnectDragSource\",\n value: function reconnectDragSource() {\n var dragSource = this.dragSource; // if nothing has changed then don't resubscribe\n\n var didChange = this.didHandlerIdChange() || this.didConnectedDragSourceChange() || this.didDragSourceOptionsChange();\n\n if (didChange) {\n this.disconnectDragSource();\n }\n\n if (!this.handlerId) {\n return;\n }\n\n if (!dragSource) {\n this.lastConnectedDragSource = dragSource;\n return;\n }\n\n if (didChange) {\n this.lastConnectedHandlerId = this.handlerId;\n this.lastConnectedDragSource = dragSource;\n this.lastConnectedDragSourceOptions = this.dragSourceOptions;\n this.dragSourceUnsubscribe = this.backend.connectDragSource(this.handlerId, dragSource, this.dragSourceOptions);\n }\n }\n }, {\n key: \"reconnectDragPreview\",\n value: function reconnectDragPreview() {\n var dragPreview = this.dragPreview; // if nothing has changed then don't resubscribe\n\n var didChange = this.didHandlerIdChange() || this.didConnectedDragPreviewChange() || this.didDragPreviewOptionsChange();\n\n if (didChange) {\n this.disconnectDragPreview();\n }\n\n if (!this.handlerId) {\n return;\n }\n\n if (!dragPreview) {\n this.lastConnectedDragPreview = dragPreview;\n return;\n }\n\n if (didChange) {\n this.lastConnectedHandlerId = this.handlerId;\n this.lastConnectedDragPreview = dragPreview;\n this.lastConnectedDragPreviewOptions = this.dragPreviewOptions;\n this.dragPreviewUnsubscribe = this.backend.connectDragPreview(this.handlerId, dragPreview, this.dragPreviewOptions);\n }\n }\n }, {\n key: \"didHandlerIdChange\",\n value: function didHandlerIdChange() {\n return this.lastConnectedHandlerId !== this.handlerId;\n }\n }, {\n key: \"didConnectedDragSourceChange\",\n value: function didConnectedDragSourceChange() {\n return this.lastConnectedDragSource !== this.dragSource;\n }\n }, {\n key: \"didConnectedDragPreviewChange\",\n value: function didConnectedDragPreviewChange() {\n return this.lastConnectedDragPreview !== this.dragPreview;\n }\n }, {\n key: \"didDragSourceOptionsChange\",\n value: function didDragSourceOptionsChange() {\n return !shallowEqual(this.lastConnectedDragSourceOptions, this.dragSourceOptions);\n }\n }, {\n key: \"didDragPreviewOptionsChange\",\n value: function didDragPreviewOptionsChange() {\n return !shallowEqual(this.lastConnectedDragPreviewOptions, this.dragPreviewOptions);\n }\n }, {\n key: \"disconnectDragSource\",\n value: function disconnectDragSource() {\n if (this.dragSourceUnsubscribe) {\n this.dragSourceUnsubscribe();\n this.dragSourceUnsubscribe = undefined;\n }\n }\n }, {\n key: \"disconnectDragPreview\",\n value: function disconnectDragPreview() {\n if (this.dragPreviewUnsubscribe) {\n this.dragPreviewUnsubscribe();\n this.dragPreviewUnsubscribe = undefined;\n this.dragPreviewNode = null;\n this.dragPreviewRef = null;\n }\n }\n }, {\n key: \"dragSource\",\n get: function get() {\n return this.dragSourceNode || this.dragSourceRef && this.dragSourceRef.current;\n }\n }, {\n key: \"dragPreview\",\n get: function get() {\n return this.dragPreviewNode || this.dragPreviewRef && this.dragPreviewRef.current;\n }\n }, {\n key: \"clearDragSource\",\n value: function clearDragSource() {\n this.dragSourceNode = null;\n this.dragSourceRef = null;\n }\n }, {\n key: \"clearDragPreview\",\n value: function clearDragPreview() {\n this.dragPreviewNode = null;\n this.dragPreviewRef = null;\n }\n }]);\n\n return SourceConnector;\n}();","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { shallowEqual } from '@react-dnd/shallowequal';\nimport { wrapConnectorHooks } from './wrapConnectorHooks';\nimport { isRef } from './isRef';\nexport var TargetConnector = /*#__PURE__*/function () {\n // The drop target may either be attached via ref or connect function\n function TargetConnector(backend) {\n var _this = this;\n\n _classCallCheck(this, TargetConnector);\n\n _defineProperty(this, \"hooks\", wrapConnectorHooks({\n dropTarget: function dropTarget(node, options) {\n _this.clearDropTarget();\n\n _this.dropTargetOptions = options;\n\n if (isRef(node)) {\n _this.dropTargetRef = node;\n } else {\n _this.dropTargetNode = node;\n }\n\n _this.reconnect();\n }\n }));\n\n _defineProperty(this, \"handlerId\", null);\n\n _defineProperty(this, \"dropTargetRef\", null);\n\n _defineProperty(this, \"dropTargetNode\", void 0);\n\n _defineProperty(this, \"dropTargetOptionsInternal\", null);\n\n _defineProperty(this, \"unsubscribeDropTarget\", void 0);\n\n _defineProperty(this, \"lastConnectedHandlerId\", null);\n\n _defineProperty(this, \"lastConnectedDropTarget\", null);\n\n _defineProperty(this, \"lastConnectedDropTargetOptions\", null);\n\n _defineProperty(this, \"backend\", void 0);\n\n this.backend = backend;\n }\n\n _createClass(TargetConnector, [{\n key: \"connectTarget\",\n get: function get() {\n return this.dropTarget;\n }\n }, {\n key: \"reconnect\",\n value: function reconnect() {\n // if nothing has changed then don't resubscribe\n var didChange = this.didHandlerIdChange() || this.didDropTargetChange() || this.didOptionsChange();\n\n if (didChange) {\n this.disconnectDropTarget();\n }\n\n var dropTarget = this.dropTarget;\n\n if (!this.handlerId) {\n return;\n }\n\n if (!dropTarget) {\n this.lastConnectedDropTarget = dropTarget;\n return;\n }\n\n if (didChange) {\n this.lastConnectedHandlerId = this.handlerId;\n this.lastConnectedDropTarget = dropTarget;\n this.lastConnectedDropTargetOptions = this.dropTargetOptions;\n this.unsubscribeDropTarget = this.backend.connectDropTarget(this.handlerId, dropTarget, this.dropTargetOptions);\n }\n }\n }, {\n key: \"receiveHandlerId\",\n value: function receiveHandlerId(newHandlerId) {\n if (newHandlerId === this.handlerId) {\n return;\n }\n\n this.handlerId = newHandlerId;\n this.reconnect();\n }\n }, {\n key: \"dropTargetOptions\",\n get: function get() {\n return this.dropTargetOptionsInternal;\n },\n set: function set(options) {\n this.dropTargetOptionsInternal = options;\n }\n }, {\n key: \"didHandlerIdChange\",\n value: function didHandlerIdChange() {\n return this.lastConnectedHandlerId !== this.handlerId;\n }\n }, {\n key: \"didDropTargetChange\",\n value: function didDropTargetChange() {\n return this.lastConnectedDropTarget !== this.dropTarget;\n }\n }, {\n key: \"didOptionsChange\",\n value: function didOptionsChange() {\n return !shallowEqual(this.lastConnectedDropTargetOptions, this.dropTargetOptions);\n }\n }, {\n key: \"disconnectDropTarget\",\n value: function disconnectDropTarget() {\n if (this.unsubscribeDropTarget) {\n this.unsubscribeDropTarget();\n this.unsubscribeDropTarget = undefined;\n }\n }\n }, {\n key: \"dropTarget\",\n get: function get() {\n return this.dropTargetNode || this.dropTargetRef && this.dropTargetRef.current;\n }\n }, {\n key: \"clearDropTarget\",\n value: function clearDropTarget() {\n this.dropTargetRef = null;\n this.dropTargetNode = null;\n }\n }]);\n\n return TargetConnector;\n}();","export function registerTarget(type, target, manager) {\n var registry = manager.getRegistry();\n var targetId = registry.addTarget(type, target);\n return [targetId, function () {\n return registry.removeTarget(targetId);\n }];\n}\nexport function registerSource(type, source, manager) {\n var registry = manager.getRegistry();\n var sourceId = registry.addSource(type, source);\n return [sourceId, function () {\n return registry.removeSource(sourceId);\n }];\n}","import { useLayoutEffect, useEffect } from 'react'; // suppress the useLayoutEffect warning on server side.\n\nexport var useIsomorphicLayoutEffect = typeof window !== 'undefined' ? useLayoutEffect : useEffect;","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nexport var DragSourceImpl = /*#__PURE__*/function () {\n function DragSourceImpl(spec, monitor, connector) {\n _classCallCheck(this, DragSourceImpl);\n\n _defineProperty(this, \"spec\", void 0);\n\n _defineProperty(this, \"monitor\", void 0);\n\n _defineProperty(this, \"connector\", void 0);\n\n this.spec = spec;\n this.monitor = monitor;\n this.connector = connector;\n }\n\n _createClass(DragSourceImpl, [{\n key: \"beginDrag\",\n value: function beginDrag() {\n var _result;\n\n var spec = this.spec;\n var monitor = this.monitor;\n var result = null;\n\n if (_typeof(spec.item) === 'object') {\n result = spec.item;\n } else if (typeof spec.item === 'function') {\n result = spec.item(monitor);\n } else {\n result = {};\n }\n\n return (_result = result) !== null && _result !== void 0 ? _result : null;\n }\n }, {\n key: \"canDrag\",\n value: function canDrag() {\n var spec = this.spec;\n var monitor = this.monitor;\n\n if (typeof spec.canDrag === 'boolean') {\n return spec.canDrag;\n } else if (typeof spec.canDrag === 'function') {\n return spec.canDrag(monitor);\n } else {\n return true;\n }\n }\n }, {\n key: \"isDragging\",\n value: function isDragging(globalMonitor, target) {\n var spec = this.spec;\n var monitor = this.monitor;\n var isDragging = spec.isDragging;\n return isDragging ? isDragging(monitor) : target === globalMonitor.getSourceId();\n }\n }, {\n key: \"endDrag\",\n value: function endDrag() {\n var spec = this.spec;\n var monitor = this.monitor;\n var connector = this.connector;\n var end = spec.end;\n\n if (end) {\n end(monitor.getItem(), monitor);\n }\n\n connector.reconnect();\n }\n }]);\n\n return DragSourceImpl;\n}();","import { useEffect, useMemo } from 'react';\nimport { DragSourceImpl } from './DragSourceImpl';\nexport function useDragSource(spec, monitor, connector) {\n var handler = useMemo(function () {\n return new DragSourceImpl(spec, monitor, connector);\n }, [monitor, connector]);\n useEffect(function () {\n handler.spec = spec;\n }, [spec]);\n return handler;\n}","import { useContext } from 'react';\nimport { invariant } from '@react-dnd/invariant';\nimport { DndContext } from '../core';\n/**\n * A hook to retrieve the DragDropManager from Context\n */\n\nexport function useDragDropManager() {\n var _useContext = useContext(DndContext),\n dragDropManager = _useContext.dragDropManager;\n\n invariant(dragDropManager != null, 'Expected drag drop context');\n return dragDropManager;\n}","import { invariant } from '@react-dnd/invariant';\nimport { useMemo } from 'react';\nexport function useDragType(spec) {\n return useMemo(function () {\n var result = spec.type;\n invariant(result != null, 'spec.type must be defined');\n return result;\n }, [spec]);\n}","function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport { registerSource } from '../../internals';\nimport { useIsomorphicLayoutEffect } from '../useIsomorphicLayoutEffect';\nimport { useDragSource } from './useDragSource';\nimport { useDragDropManager } from '../useDragDropManager';\nimport { useDragType } from './useDragType';\nexport function useRegisteredDragSource(spec, monitor, connector) {\n var manager = useDragDropManager();\n var handler = useDragSource(spec, monitor, connector);\n var itemType = useDragType(spec);\n useIsomorphicLayoutEffect(function registerDragSource() {\n if (itemType != null) {\n var _registerSource = registerSource(itemType, handler, manager),\n _registerSource2 = _slicedToArray(_registerSource, 2),\n handlerId = _registerSource2[0],\n unregister = _registerSource2[1];\n\n monitor.receiveHandlerId(handlerId);\n connector.receiveHandlerId(handlerId);\n return unregister;\n }\n }, [manager, monitor, connector, handler, itemType]);\n}","function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nimport { useMemo } from 'react';\nexport function useOptionalFactory(arg, deps) {\n var memoDeps = _toConsumableArray(deps || []);\n\n if (deps == null && typeof arg !== 'function') {\n memoDeps.push(arg);\n }\n\n return useMemo(function () {\n return typeof arg === 'function' ? arg() : arg;\n }, memoDeps);\n}","import { useMemo } from 'react';\nimport { DragSourceMonitorImpl } from '../../internals';\nimport { useDragDropManager } from '../useDragDropManager';\nexport function useDragSourceMonitor() {\n var manager = useDragDropManager();\n return useMemo(function () {\n return new DragSourceMonitorImpl(manager);\n }, [manager]);\n}","import { useMemo } from 'react';\nimport { SourceConnector } from '../../internals';\nimport { useDragDropManager } from '../useDragDropManager';\nimport { useIsomorphicLayoutEffect } from '../useIsomorphicLayoutEffect';\nexport function useDragSourceConnector(dragSourceOptions, dragPreviewOptions) {\n var manager = useDragDropManager();\n var connector = useMemo(function () {\n return new SourceConnector(manager.getBackend());\n }, [manager]);\n useIsomorphicLayoutEffect(function () {\n connector.dragSourceOptions = dragSourceOptions || null;\n connector.reconnect();\n return function () {\n return connector.disconnectDragSource();\n };\n }, [connector, dragSourceOptions]);\n useIsomorphicLayoutEffect(function () {\n connector.dragPreviewOptions = dragPreviewOptions || null;\n connector.reconnect();\n return function () {\n return connector.disconnectDragPreview();\n };\n }, [connector, dragPreviewOptions]);\n return connector;\n}","'use strict';\n\n// do not edit .js files directly - edit src/index.jst\n\n\n\nmodule.exports = function equal(a, b) {\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n for (i = length; i-- !== 0;) {\n var key = keys[i];\n\n if (!equal(a[key], b[key])) return false;\n }\n\n return true;\n }\n\n // true if both NaN, false otherwise\n return a!==a && b!==b;\n};\n","function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport equal from 'fast-deep-equal';\nimport { useState, useCallback } from 'react';\nimport { useIsomorphicLayoutEffect } from './useIsomorphicLayoutEffect';\n/**\n *\n * @param monitor The monitor to collect state from\n * @param collect The collecting function\n * @param onUpdate A method to invoke when updates occur\n */\n\nexport function useCollector(monitor, collect, onUpdate) {\n var _useState = useState(function () {\n return collect(monitor);\n }),\n _useState2 = _slicedToArray(_useState, 2),\n collected = _useState2[0],\n setCollected = _useState2[1];\n\n var updateCollected = useCallback(function () {\n var nextValue = collect(monitor); // This needs to be a deep-equality check because some monitor-collected values\n // include XYCoord objects that may be equivalent, but do not have instance equality.\n\n if (!equal(collected, nextValue)) {\n setCollected(nextValue);\n\n if (onUpdate) {\n onUpdate();\n }\n }\n }, [collected, monitor, onUpdate]); // update the collected properties after react renders.\n // Note that the \"Dustbin Stress Test\" fails if this is not\n // done when the component updates\n\n useIsomorphicLayoutEffect(updateCollected);\n return [collected, updateCollected];\n}","function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport { useIsomorphicLayoutEffect } from './useIsomorphicLayoutEffect';\nimport { useCollector } from './useCollector';\nexport function useMonitorOutput(monitor, collect, onCollect) {\n var _useCollector = useCollector(monitor, collect, onCollect),\n _useCollector2 = _slicedToArray(_useCollector, 2),\n collected = _useCollector2[0],\n updateCollected = _useCollector2[1];\n\n useIsomorphicLayoutEffect(function subscribeToMonitorStateChange() {\n var handlerId = monitor.getHandlerId();\n\n if (handlerId == null) {\n return;\n }\n\n return monitor.subscribeToStateChange(updateCollected, {\n handlerIds: [handlerId]\n });\n }, [monitor, updateCollected]);\n return collected;\n}","import { useMonitorOutput } from './useMonitorOutput';\nexport function useCollectedProps(collector, monitor, connector) {\n return useMonitorOutput(monitor, collector || function () {\n return {};\n }, function () {\n return connector.reconnect();\n });\n}","import { useMemo } from 'react';\nexport function useConnectDragSource(connector) {\n return useMemo(function () {\n return connector.hooks.dragSource();\n }, [connector]);\n}\nexport function useConnectDragPreview(connector) {\n return useMemo(function () {\n return connector.hooks.dragPreview();\n }, [connector]);\n}","import { useRegisteredDragSource } from './useRegisteredDragSource';\nimport { useOptionalFactory } from '../useOptionalFactory';\nimport { useDragSourceMonitor } from './useDragSourceMonitor';\nimport { useDragSourceConnector } from './useDragSourceConnector';\nimport { useCollectedProps } from '../useCollectedProps';\nimport { useConnectDragPreview, useConnectDragSource } from './connectors';\nimport { invariant } from '@react-dnd/invariant';\n/**\n * useDragSource hook\n * @param sourceSpec The drag source specification (object or function, function preferred)\n * @param deps The memoization deps array to use when evaluating spec changes\n */\n\nexport function useDrag(specArg, deps) {\n var spec = useOptionalFactory(specArg, deps);\n invariant(!spec.begin, \"useDrag::spec.begin was deprecated in v14. Replace spec.begin() with spec.item(). (see more here - https://react-dnd.github.io/react-dnd/docs/api/use-drag)\");\n var monitor = useDragSourceMonitor();\n var connector = useDragSourceConnector(spec.options, spec.previewOptions);\n useRegisteredDragSource(spec, monitor, connector);\n return [useCollectedProps(spec.collect, monitor, connector), useConnectDragSource(connector), useConnectDragPreview(connector)];\n}","import { invariant } from '@react-dnd/invariant';\nimport { useMemo } from 'react';\n/**\n * Internal utility hook to get an array-version of spec.accept.\n * The main utility here is that we aren't creating a new array on every render if a non-array spec.accept is passed in.\n * @param spec\n */\n\nexport function useAccept(spec) {\n var accept = spec.accept;\n return useMemo(function () {\n invariant(spec.accept != null, 'accept must be defined');\n return Array.isArray(accept) ? accept : [accept];\n }, [accept]);\n}","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nexport var DropTargetImpl = /*#__PURE__*/function () {\n function DropTargetImpl(spec, monitor) {\n _classCallCheck(this, DropTargetImpl);\n\n _defineProperty(this, \"spec\", void 0);\n\n _defineProperty(this, \"monitor\", void 0);\n\n this.spec = spec;\n this.monitor = monitor;\n }\n\n _createClass(DropTargetImpl, [{\n key: \"canDrop\",\n value: function canDrop() {\n var spec = this.spec;\n var monitor = this.monitor;\n return spec.canDrop ? spec.canDrop(monitor.getItem(), monitor) : true;\n }\n }, {\n key: \"hover\",\n value: function hover() {\n var spec = this.spec;\n var monitor = this.monitor;\n\n if (spec.hover) {\n spec.hover(monitor.getItem(), monitor);\n }\n }\n }, {\n key: \"drop\",\n value: function drop() {\n var spec = this.spec;\n var monitor = this.monitor;\n\n if (spec.drop) {\n return spec.drop(monitor.getItem(), monitor);\n }\n }\n }]);\n\n return DropTargetImpl;\n}();","import { useEffect, useMemo } from 'react';\nimport { DropTargetImpl } from './DropTargetImpl';\nexport function useDropTarget(spec, monitor) {\n var dropTarget = useMemo(function () {\n return new DropTargetImpl(spec, monitor);\n }, [monitor]);\n useEffect(function () {\n dropTarget.spec = spec;\n }, [spec]);\n return dropTarget;\n}","function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport { registerTarget } from '../../internals';\nimport { useDragDropManager } from '../useDragDropManager';\nimport { useIsomorphicLayoutEffect } from '../useIsomorphicLayoutEffect';\nimport { useAccept } from './useAccept';\nimport { useDropTarget } from './useDropTarget';\nexport function useRegisteredDropTarget(spec, monitor, connector) {\n var manager = useDragDropManager();\n var dropTarget = useDropTarget(spec, monitor);\n var accept = useAccept(spec);\n useIsomorphicLayoutEffect(function registerDropTarget() {\n var _registerTarget = registerTarget(accept, dropTarget, manager),\n _registerTarget2 = _slicedToArray(_registerTarget, 2),\n handlerId = _registerTarget2[0],\n unregister = _registerTarget2[1];\n\n monitor.receiveHandlerId(handlerId);\n connector.receiveHandlerId(handlerId);\n return unregister;\n }, [manager, monitor, dropTarget, connector, accept.map(function (a) {\n return a.toString();\n }).join('|')]);\n}","import { useMemo } from 'react';\nimport { DropTargetMonitorImpl } from '../../internals';\nimport { useDragDropManager } from '../useDragDropManager';\nexport function useDropTargetMonitor() {\n var manager = useDragDropManager();\n return useMemo(function () {\n return new DropTargetMonitorImpl(manager);\n }, [manager]);\n}","import { useMemo } from 'react';\nimport { TargetConnector } from '../../internals';\nimport { useDragDropManager } from '../useDragDropManager';\nimport { useIsomorphicLayoutEffect } from '../useIsomorphicLayoutEffect';\nexport function useDropTargetConnector(options) {\n var manager = useDragDropManager();\n var connector = useMemo(function () {\n return new TargetConnector(manager.getBackend());\n }, [manager]);\n useIsomorphicLayoutEffect(function () {\n connector.dropTargetOptions = options || null;\n connector.reconnect();\n return function () {\n return connector.disconnectDropTarget();\n };\n }, [options]);\n return connector;\n}","import { useMemo } from 'react';\nexport function useConnectDropTarget(connector) {\n return useMemo(function () {\n return connector.hooks.dropTarget();\n }, [connector]);\n}","import { useRegisteredDropTarget } from './useRegisteredDropTarget';\nimport { useOptionalFactory } from '../useOptionalFactory';\nimport { useDropTargetMonitor } from './useDropTargetMonitor';\nimport { useDropTargetConnector } from './useDropTargetConnector';\nimport { useCollectedProps } from '../useCollectedProps';\nimport { useConnectDropTarget } from './connectors';\n/**\n * useDropTarget Hook\n * @param spec The drop target specification (object or function, function preferred)\n * @param deps The memoization deps array to use when evaluating spec changes\n */\n\nexport function useDrop(specArg, deps) {\n var spec = useOptionalFactory(specArg, deps);\n var monitor = useDropTargetMonitor();\n var connector = useDropTargetConnector(spec.options);\n useRegisteredDropTarget(spec, monitor, connector);\n return [useCollectedProps(spec.collect, monitor, connector), useConnectDropTarget(connector)];\n}","function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport { useEffect } from 'react';\nimport { useDragDropManager } from './useDragDropManager';\nimport { useCollector } from './useCollector';\n/**\n * useDragLayer Hook\n * @param collector The property collector\n */\n\nexport function useDragLayer(collect) {\n var dragDropManager = useDragDropManager();\n var monitor = dragDropManager.getMonitor();\n\n var _useCollector = useCollector(monitor, collect),\n _useCollector2 = _slicedToArray(_useCollector, 2),\n collected = _useCollector2[0],\n updateCollected = _useCollector2[1];\n\n useEffect(function () {\n return monitor.subscribeToOffsetChange(updateCollected);\n });\n useEffect(function () {\n return monitor.subscribeToStateChange(updateCollected);\n });\n return collected;\n}","// cheap lodash replacements\nexport function memoize(fn) {\n var result = null;\n\n var memoized = function memoized() {\n if (result == null) {\n result = fn();\n }\n\n return result;\n };\n\n return memoized;\n}\n/**\n * drop-in replacement for _.without\n */\n\nexport function without(items, item) {\n return items.filter(function (i) {\n return i !== item;\n });\n}\nexport function union(itemsA, itemsB) {\n var set = new Set();\n\n var insertItem = function insertItem(item) {\n return set.add(item);\n };\n\n itemsA.forEach(insertItem);\n itemsB.forEach(insertItem);\n var result = [];\n set.forEach(function (key) {\n return result.push(key);\n });\n return result;\n}","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { union, without } from './utils/js_utils';\nexport var EnterLeaveCounter = /*#__PURE__*/function () {\n function EnterLeaveCounter(isNodeInDocument) {\n _classCallCheck(this, EnterLeaveCounter);\n\n _defineProperty(this, \"entered\", []);\n\n _defineProperty(this, \"isNodeInDocument\", void 0);\n\n this.isNodeInDocument = isNodeInDocument;\n }\n\n _createClass(EnterLeaveCounter, [{\n key: \"enter\",\n value: function enter(enteringNode) {\n var _this = this;\n\n var previousLength = this.entered.length;\n\n var isNodeEntered = function isNodeEntered(node) {\n return _this.isNodeInDocument(node) && (!node.contains || node.contains(enteringNode));\n };\n\n this.entered = union(this.entered.filter(isNodeEntered), [enteringNode]);\n return previousLength === 0 && this.entered.length > 0;\n }\n }, {\n key: \"leave\",\n value: function leave(leavingNode) {\n var previousLength = this.entered.length;\n this.entered = without(this.entered.filter(this.isNodeInDocument), leavingNode);\n return previousLength > 0 && this.entered.length === 0;\n }\n }, {\n key: \"reset\",\n value: function reset() {\n this.entered = [];\n }\n }]);\n\n return EnterLeaveCounter;\n}();","import { memoize } from './utils/js_utils';\nexport var isFirefox = memoize(function () {\n return /firefox/i.test(navigator.userAgent);\n});\nexport var isSafari = memoize(function () {\n return Boolean(window.safari);\n});","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nexport var MonotonicInterpolant = /*#__PURE__*/function () {\n function MonotonicInterpolant(xs, ys) {\n _classCallCheck(this, MonotonicInterpolant);\n\n _defineProperty(this, \"xs\", void 0);\n\n _defineProperty(this, \"ys\", void 0);\n\n _defineProperty(this, \"c1s\", void 0);\n\n _defineProperty(this, \"c2s\", void 0);\n\n _defineProperty(this, \"c3s\", void 0);\n\n var length = xs.length; // Rearrange xs and ys so that xs is sorted\n\n var indexes = [];\n\n for (var i = 0; i < length; i++) {\n indexes.push(i);\n }\n\n indexes.sort(function (a, b) {\n return xs[a] < xs[b] ? -1 : 1;\n }); // Get consecutive differences and slopes\n\n var dys = [];\n var dxs = [];\n var ms = [];\n var dx;\n var dy;\n\n for (var _i = 0; _i < length - 1; _i++) {\n dx = xs[_i + 1] - xs[_i];\n dy = ys[_i + 1] - ys[_i];\n dxs.push(dx);\n dys.push(dy);\n ms.push(dy / dx);\n } // Get degree-1 coefficients\n\n\n var c1s = [ms[0]];\n\n for (var _i2 = 0; _i2 < dxs.length - 1; _i2++) {\n var m2 = ms[_i2];\n var mNext = ms[_i2 + 1];\n\n if (m2 * mNext <= 0) {\n c1s.push(0);\n } else {\n dx = dxs[_i2];\n var dxNext = dxs[_i2 + 1];\n var common = dx + dxNext;\n c1s.push(3 * common / ((common + dxNext) / m2 + (common + dx) / mNext));\n }\n }\n\n c1s.push(ms[ms.length - 1]); // Get degree-2 and degree-3 coefficients\n\n var c2s = [];\n var c3s = [];\n var m;\n\n for (var _i3 = 0; _i3 < c1s.length - 1; _i3++) {\n m = ms[_i3];\n var c1 = c1s[_i3];\n var invDx = 1 / dxs[_i3];\n\n var _common = c1 + c1s[_i3 + 1] - m - m;\n\n c2s.push((m - c1 - _common) * invDx);\n c3s.push(_common * invDx * invDx);\n }\n\n this.xs = xs;\n this.ys = ys;\n this.c1s = c1s;\n this.c2s = c2s;\n this.c3s = c3s;\n }\n\n _createClass(MonotonicInterpolant, [{\n key: \"interpolate\",\n value: function interpolate(x) {\n var xs = this.xs,\n ys = this.ys,\n c1s = this.c1s,\n c2s = this.c2s,\n c3s = this.c3s; // The rightmost point in the dataset should give an exact result\n\n var i = xs.length - 1;\n\n if (x === xs[i]) {\n return ys[i];\n } // Search for the interval x is in, returning the corresponding y if x is one of the original xs\n\n\n var low = 0;\n var high = c3s.length - 1;\n var mid;\n\n while (low <= high) {\n mid = Math.floor(0.5 * (low + high));\n var xHere = xs[mid];\n\n if (xHere < x) {\n low = mid + 1;\n } else if (xHere > x) {\n high = mid - 1;\n } else {\n return ys[mid];\n }\n }\n\n i = Math.max(0, high); // Interpolate\n\n var diff = x - xs[i];\n var diffSq = diff * diff;\n return ys[i] + c1s[i] * diff + c2s[i] * diffSq + c3s[i] * diff * diffSq;\n }\n }]);\n\n return MonotonicInterpolant;\n}();","import { isSafari, isFirefox } from './BrowserDetector';\nimport { MonotonicInterpolant } from './MonotonicInterpolant';\nvar ELEMENT_NODE = 1;\nexport function getNodeClientOffset(node) {\n var el = node.nodeType === ELEMENT_NODE ? node : node.parentElement;\n\n if (!el) {\n return null;\n }\n\n var _el$getBoundingClient = el.getBoundingClientRect(),\n top = _el$getBoundingClient.top,\n left = _el$getBoundingClient.left;\n\n return {\n x: left,\n y: top\n };\n}\nexport function getEventClientOffset(e) {\n return {\n x: e.clientX,\n y: e.clientY\n };\n}\n\nfunction isImageNode(node) {\n var _document$documentEle;\n\n return node.nodeName === 'IMG' && (isFirefox() || !((_document$documentEle = document.documentElement) !== null && _document$documentEle !== void 0 && _document$documentEle.contains(node)));\n}\n\nfunction getDragPreviewSize(isImage, dragPreview, sourceWidth, sourceHeight) {\n var dragPreviewWidth = isImage ? dragPreview.width : sourceWidth;\n var dragPreviewHeight = isImage ? dragPreview.height : sourceHeight; // Work around @2x coordinate discrepancies in browsers\n\n if (isSafari() && isImage) {\n dragPreviewHeight /= window.devicePixelRatio;\n dragPreviewWidth /= window.devicePixelRatio;\n }\n\n return {\n dragPreviewWidth: dragPreviewWidth,\n dragPreviewHeight: dragPreviewHeight\n };\n}\n\nexport function getDragPreviewOffset(sourceNode, dragPreview, clientOffset, anchorPoint, offsetPoint) {\n // The browsers will use the image intrinsic size under different conditions.\n // Firefox only cares if it's an image, but WebKit also wants it to be detached.\n var isImage = isImageNode(dragPreview);\n var dragPreviewNode = isImage ? sourceNode : dragPreview;\n var dragPreviewNodeOffsetFromClient = getNodeClientOffset(dragPreviewNode);\n var offsetFromDragPreview = {\n x: clientOffset.x - dragPreviewNodeOffsetFromClient.x,\n y: clientOffset.y - dragPreviewNodeOffsetFromClient.y\n };\n var sourceWidth = sourceNode.offsetWidth,\n sourceHeight = sourceNode.offsetHeight;\n var anchorX = anchorPoint.anchorX,\n anchorY = anchorPoint.anchorY;\n\n var _getDragPreviewSize = getDragPreviewSize(isImage, dragPreview, sourceWidth, sourceHeight),\n dragPreviewWidth = _getDragPreviewSize.dragPreviewWidth,\n dragPreviewHeight = _getDragPreviewSize.dragPreviewHeight;\n\n var calculateYOffset = function calculateYOffset() {\n var interpolantY = new MonotonicInterpolant([0, 0.5, 1], [// Dock to the top\n offsetFromDragPreview.y, // Align at the center\n offsetFromDragPreview.y / sourceHeight * dragPreviewHeight, // Dock to the bottom\n offsetFromDragPreview.y + dragPreviewHeight - sourceHeight]);\n var y = interpolantY.interpolate(anchorY); // Work around Safari 8 positioning bug\n\n if (isSafari() && isImage) {\n // We'll have to wait for @3x to see if this is entirely correct\n y += (window.devicePixelRatio - 1) * dragPreviewHeight;\n }\n\n return y;\n };\n\n var calculateXOffset = function calculateXOffset() {\n // Interpolate coordinates depending on anchor point\n // If you know a simpler way to do this, let me know\n var interpolantX = new MonotonicInterpolant([0, 0.5, 1], [// Dock to the left\n offsetFromDragPreview.x, // Align at the center\n offsetFromDragPreview.x / sourceWidth * dragPreviewWidth, // Dock to the right\n offsetFromDragPreview.x + dragPreviewWidth - sourceWidth]);\n return interpolantX.interpolate(anchorX);\n }; // Force offsets if specified in the options.\n\n\n var offsetX = offsetPoint.offsetX,\n offsetY = offsetPoint.offsetY;\n var isManualOffsetX = offsetX === 0 || offsetX;\n var isManualOffsetY = offsetY === 0 || offsetY;\n return {\n x: isManualOffsetX ? offsetX : calculateXOffset(),\n y: isManualOffsetY ? offsetY : calculateYOffset()\n };\n}","export var FILE = '__NATIVE_FILE__';\nexport var URL = '__NATIVE_URL__';\nexport var TEXT = '__NATIVE_TEXT__';\nexport var HTML = '__NATIVE_HTML__';","export function getDataFromDataTransfer(dataTransfer, typesToTry, defaultValue) {\n var result = typesToTry.reduce(function (resultSoFar, typeToTry) {\n return resultSoFar || dataTransfer.getData(typeToTry);\n }, '');\n return result != null ? result : defaultValue;\n}","var _nativeTypesConfig;\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport * as NativeTypes from '../NativeTypes';\nimport { getDataFromDataTransfer } from './getDataFromDataTransfer';\nexport var nativeTypesConfig = (_nativeTypesConfig = {}, _defineProperty(_nativeTypesConfig, NativeTypes.FILE, {\n exposeProperties: {\n files: function files(dataTransfer) {\n return Array.prototype.slice.call(dataTransfer.files);\n },\n items: function items(dataTransfer) {\n return dataTransfer.items;\n },\n dataTransfer: function dataTransfer(_dataTransfer) {\n return _dataTransfer;\n }\n },\n matchesTypes: ['Files']\n}), _defineProperty(_nativeTypesConfig, NativeTypes.HTML, {\n exposeProperties: {\n html: function html(dataTransfer, matchesTypes) {\n return getDataFromDataTransfer(dataTransfer, matchesTypes, '');\n },\n dataTransfer: function dataTransfer(_dataTransfer2) {\n return _dataTransfer2;\n }\n },\n matchesTypes: ['Html', 'text/html']\n}), _defineProperty(_nativeTypesConfig, NativeTypes.URL, {\n exposeProperties: {\n urls: function urls(dataTransfer, matchesTypes) {\n return getDataFromDataTransfer(dataTransfer, matchesTypes, '').split('\\n');\n },\n dataTransfer: function dataTransfer(_dataTransfer3) {\n return _dataTransfer3;\n }\n },\n matchesTypes: ['Url', 'text/uri-list']\n}), _defineProperty(_nativeTypesConfig, NativeTypes.TEXT, {\n exposeProperties: {\n text: function text(dataTransfer, matchesTypes) {\n return getDataFromDataTransfer(dataTransfer, matchesTypes, '');\n },\n dataTransfer: function dataTransfer(_dataTransfer4) {\n return _dataTransfer4;\n }\n },\n matchesTypes: ['Text', 'text/plain']\n}), _nativeTypesConfig);","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nexport var NativeDragSource = /*#__PURE__*/function () {\n function NativeDragSource(config) {\n _classCallCheck(this, NativeDragSource);\n\n _defineProperty(this, \"item\", void 0);\n\n _defineProperty(this, \"config\", void 0);\n\n this.config = config;\n this.item = {};\n this.initializeExposedProperties();\n }\n\n _createClass(NativeDragSource, [{\n key: \"initializeExposedProperties\",\n value: function initializeExposedProperties() {\n var _this = this;\n\n Object.keys(this.config.exposeProperties).forEach(function (property) {\n Object.defineProperty(_this.item, property, {\n configurable: true,\n enumerable: true,\n get: function get() {\n // eslint-disable-next-line no-console\n console.warn(\"Browser doesn't allow reading \\\"\".concat(property, \"\\\" until the drop event.\"));\n return null;\n }\n });\n });\n }\n }, {\n key: \"loadDataTransfer\",\n value: function loadDataTransfer(dataTransfer) {\n var _this2 = this;\n\n if (dataTransfer) {\n var newProperties = {};\n Object.keys(this.config.exposeProperties).forEach(function (property) {\n newProperties[property] = {\n value: _this2.config.exposeProperties[property](dataTransfer, _this2.config.matchesTypes),\n configurable: true,\n enumerable: true\n };\n });\n Object.defineProperties(this.item, newProperties);\n }\n }\n }, {\n key: \"canDrag\",\n value: function canDrag() {\n return true;\n }\n }, {\n key: \"beginDrag\",\n value: function beginDrag() {\n return this.item;\n }\n }, {\n key: \"isDragging\",\n value: function isDragging(monitor, handle) {\n return handle === monitor.getSourceId();\n }\n }, {\n key: \"endDrag\",\n value: function endDrag() {// empty\n }\n }]);\n\n return NativeDragSource;\n}();","import { nativeTypesConfig } from './nativeTypesConfig';\nimport { NativeDragSource } from './NativeDragSource';\nexport function createNativeDragSource(type, dataTransfer) {\n var result = new NativeDragSource(nativeTypesConfig[type]);\n result.loadDataTransfer(dataTransfer);\n return result;\n}\nexport function matchNativeItemType(dataTransfer) {\n if (!dataTransfer) {\n return null;\n }\n\n var dataTransferTypes = Array.prototype.slice.call(dataTransfer.types || []);\n return Object.keys(nativeTypesConfig).filter(function (nativeItemType) {\n var matchesTypes = nativeTypesConfig[nativeItemType].matchesTypes;\n return matchesTypes.some(function (t) {\n return dataTransferTypes.indexOf(t) > -1;\n });\n })[0] || null;\n}","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nexport var OptionsReader = /*#__PURE__*/function () {\n function OptionsReader(globalContext, options) {\n _classCallCheck(this, OptionsReader);\n\n _defineProperty(this, \"ownerDocument\", null);\n\n _defineProperty(this, \"globalContext\", void 0);\n\n _defineProperty(this, \"optionsArgs\", void 0);\n\n this.globalContext = globalContext;\n this.optionsArgs = options;\n }\n\n _createClass(OptionsReader, [{\n key: \"window\",\n get: function get() {\n if (this.globalContext) {\n return this.globalContext;\n } else if (typeof window !== 'undefined') {\n return window;\n }\n\n return undefined;\n }\n }, {\n key: \"document\",\n get: function get() {\n var _this$globalContext;\n\n if ((_this$globalContext = this.globalContext) !== null && _this$globalContext !== void 0 && _this$globalContext.document) {\n return this.globalContext.document;\n } else if (this.window) {\n return this.window.document;\n } else {\n return undefined;\n }\n }\n }, {\n key: \"rootElement\",\n get: function get() {\n var _this$optionsArgs;\n\n return ((_this$optionsArgs = this.optionsArgs) === null || _this$optionsArgs === void 0 ? void 0 : _this$optionsArgs.rootElement) || this.window;\n }\n }]);\n\n return OptionsReader;\n}();","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { EnterLeaveCounter } from './EnterLeaveCounter';\nimport { getNodeClientOffset, getEventClientOffset, getDragPreviewOffset } from './OffsetUtils';\nimport { createNativeDragSource, matchNativeItemType } from './NativeDragSources';\nimport * as NativeTypes from './NativeTypes';\nimport { OptionsReader } from './OptionsReader';\nexport var HTML5BackendImpl = /*#__PURE__*/function () {\n // React-Dnd Components\n // Internal State\n function HTML5BackendImpl(manager, globalContext, options) {\n var _this = this;\n\n _classCallCheck(this, HTML5BackendImpl);\n\n _defineProperty(this, \"options\", void 0);\n\n _defineProperty(this, \"actions\", void 0);\n\n _defineProperty(this, \"monitor\", void 0);\n\n _defineProperty(this, \"registry\", void 0);\n\n _defineProperty(this, \"enterLeaveCounter\", void 0);\n\n _defineProperty(this, \"sourcePreviewNodes\", new Map());\n\n _defineProperty(this, \"sourcePreviewNodeOptions\", new Map());\n\n _defineProperty(this, \"sourceNodes\", new Map());\n\n _defineProperty(this, \"sourceNodeOptions\", new Map());\n\n _defineProperty(this, \"dragStartSourceIds\", null);\n\n _defineProperty(this, \"dropTargetIds\", []);\n\n _defineProperty(this, \"dragEnterTargetIds\", []);\n\n _defineProperty(this, \"currentNativeSource\", null);\n\n _defineProperty(this, \"currentNativeHandle\", null);\n\n _defineProperty(this, \"currentDragSourceNode\", null);\n\n _defineProperty(this, \"altKeyPressed\", false);\n\n _defineProperty(this, \"mouseMoveTimeoutTimer\", null);\n\n _defineProperty(this, \"asyncEndDragFrameId\", null);\n\n _defineProperty(this, \"dragOverTargetIds\", null);\n\n _defineProperty(this, \"lastClientOffset\", null);\n\n _defineProperty(this, \"hoverRafId\", null);\n\n _defineProperty(this, \"getSourceClientOffset\", function (sourceId) {\n var source = _this.sourceNodes.get(sourceId);\n\n return source && getNodeClientOffset(source) || null;\n });\n\n _defineProperty(this, \"endDragNativeItem\", function () {\n if (!_this.isDraggingNativeItem()) {\n return;\n }\n\n _this.actions.endDrag();\n\n if (_this.currentNativeHandle) {\n _this.registry.removeSource(_this.currentNativeHandle);\n }\n\n _this.currentNativeHandle = null;\n _this.currentNativeSource = null;\n });\n\n _defineProperty(this, \"isNodeInDocument\", function (node) {\n // Check the node either in the main document or in the current context\n return Boolean(node && _this.document && _this.document.body && _this.document.body.contains(node));\n });\n\n _defineProperty(this, \"endDragIfSourceWasRemovedFromDOM\", function () {\n var node = _this.currentDragSourceNode;\n\n if (node == null || _this.isNodeInDocument(node)) {\n return;\n }\n\n if (_this.clearCurrentDragSourceNode() && _this.monitor.isDragging()) {\n _this.actions.endDrag();\n }\n });\n\n _defineProperty(this, \"handleTopDragStartCapture\", function () {\n _this.clearCurrentDragSourceNode();\n\n _this.dragStartSourceIds = [];\n });\n\n _defineProperty(this, \"handleTopDragStart\", function (e) {\n if (e.defaultPrevented) {\n return;\n }\n\n var dragStartSourceIds = _this.dragStartSourceIds;\n _this.dragStartSourceIds = null;\n var clientOffset = getEventClientOffset(e); // Avoid crashing if we missed a drop event or our previous drag died\n\n if (_this.monitor.isDragging()) {\n _this.actions.endDrag();\n } // Don't publish the source just yet (see why below)\n\n\n _this.actions.beginDrag(dragStartSourceIds || [], {\n publishSource: false,\n getSourceClientOffset: _this.getSourceClientOffset,\n clientOffset: clientOffset\n });\n\n var dataTransfer = e.dataTransfer;\n var nativeType = matchNativeItemType(dataTransfer);\n\n if (_this.monitor.isDragging()) {\n if (dataTransfer && typeof dataTransfer.setDragImage === 'function') {\n // Use custom drag image if user specifies it.\n // If child drag source refuses drag but parent agrees,\n // use parent's node as drag image. Neither works in IE though.\n var sourceId = _this.monitor.getSourceId();\n\n var sourceNode = _this.sourceNodes.get(sourceId);\n\n var dragPreview = _this.sourcePreviewNodes.get(sourceId) || sourceNode;\n\n if (dragPreview) {\n var _this$getCurrentSourc = _this.getCurrentSourcePreviewNodeOptions(),\n anchorX = _this$getCurrentSourc.anchorX,\n anchorY = _this$getCurrentSourc.anchorY,\n offsetX = _this$getCurrentSourc.offsetX,\n offsetY = _this$getCurrentSourc.offsetY;\n\n var anchorPoint = {\n anchorX: anchorX,\n anchorY: anchorY\n };\n var offsetPoint = {\n offsetX: offsetX,\n offsetY: offsetY\n };\n var dragPreviewOffset = getDragPreviewOffset(sourceNode, dragPreview, clientOffset, anchorPoint, offsetPoint);\n dataTransfer.setDragImage(dragPreview, dragPreviewOffset.x, dragPreviewOffset.y);\n }\n }\n\n try {\n // Firefox won't drag without setting data\n dataTransfer === null || dataTransfer === void 0 ? void 0 : dataTransfer.setData('application/json', {});\n } catch (err) {// IE doesn't support MIME types in setData\n } // Store drag source node so we can check whether\n // it is removed from DOM and trigger endDrag manually.\n\n\n _this.setCurrentDragSourceNode(e.target); // Now we are ready to publish the drag source.. or are we not?\n\n\n var _this$getCurrentSourc2 = _this.getCurrentSourcePreviewNodeOptions(),\n captureDraggingState = _this$getCurrentSourc2.captureDraggingState;\n\n if (!captureDraggingState) {\n // Usually we want to publish it in the next tick so that browser\n // is able to screenshot the current (not yet dragging) state.\n //\n // It also neatly avoids a situation where render() returns null\n // in the same tick for the source element, and browser freaks out.\n setTimeout(function () {\n return _this.actions.publishDragSource();\n }, 0);\n } else {\n // In some cases the user may want to override this behavior, e.g.\n // to work around IE not supporting custom drag previews.\n //\n // When using a custom drag layer, the only way to prevent\n // the default drag preview from drawing in IE is to screenshot\n // the dragging state in which the node itself has zero opacity\n // and height. In this case, though, returning null from render()\n // will abruptly end the dragging, which is not obvious.\n //\n // This is the reason such behavior is strictly opt-in.\n _this.actions.publishDragSource();\n }\n } else if (nativeType) {\n // A native item (such as URL) dragged from inside the document\n _this.beginDragNativeItem(nativeType);\n } else if (dataTransfer && !dataTransfer.types && (e.target && !e.target.hasAttribute || !e.target.hasAttribute('draggable'))) {\n // Looks like a Safari bug: dataTransfer.types is null, but there was no draggable.\n // Just let it drag. It's a native type (URL or text) and will be picked up in\n // dragenter handler.\n return;\n } else {\n // If by this time no drag source reacted, tell browser not to drag.\n e.preventDefault();\n }\n });\n\n _defineProperty(this, \"handleTopDragEndCapture\", function () {\n if (_this.clearCurrentDragSourceNode() && _this.monitor.isDragging()) {\n // Firefox can dispatch this event in an infinite loop\n // if dragend handler does something like showing an alert.\n // Only proceed if we have not handled it already.\n _this.actions.endDrag();\n }\n });\n\n _defineProperty(this, \"handleTopDragEnterCapture\", function (e) {\n _this.dragEnterTargetIds = [];\n\n var isFirstEnter = _this.enterLeaveCounter.enter(e.target);\n\n if (!isFirstEnter || _this.monitor.isDragging()) {\n return;\n }\n\n var dataTransfer = e.dataTransfer;\n var nativeType = matchNativeItemType(dataTransfer);\n\n if (nativeType) {\n // A native item (such as file or URL) dragged from outside the document\n _this.beginDragNativeItem(nativeType, dataTransfer);\n }\n });\n\n _defineProperty(this, \"handleTopDragEnter\", function (e) {\n var dragEnterTargetIds = _this.dragEnterTargetIds;\n _this.dragEnterTargetIds = [];\n\n if (!_this.monitor.isDragging()) {\n // This is probably a native item type we don't understand.\n return;\n }\n\n _this.altKeyPressed = e.altKey; // If the target changes position as the result of `dragenter`, `dragover` might still\n // get dispatched despite target being no longer there. The easy solution is to check\n // whether there actually is a target before firing `hover`.\n\n if (dragEnterTargetIds.length > 0) {\n _this.actions.hover(dragEnterTargetIds, {\n clientOffset: getEventClientOffset(e)\n });\n }\n\n var canDrop = dragEnterTargetIds.some(function (targetId) {\n return _this.monitor.canDropOnTarget(targetId);\n });\n\n if (canDrop) {\n // IE requires this to fire dragover events\n e.preventDefault();\n\n if (e.dataTransfer) {\n e.dataTransfer.dropEffect = _this.getCurrentDropEffect();\n }\n }\n });\n\n _defineProperty(this, \"handleTopDragOverCapture\", function () {\n _this.dragOverTargetIds = [];\n });\n\n _defineProperty(this, \"handleTopDragOver\", function (e) {\n var dragOverTargetIds = _this.dragOverTargetIds;\n _this.dragOverTargetIds = [];\n\n if (!_this.monitor.isDragging()) {\n // This is probably a native item type we don't understand.\n // Prevent default \"drop and blow away the whole document\" action.\n e.preventDefault();\n\n if (e.dataTransfer) {\n e.dataTransfer.dropEffect = 'none';\n }\n\n return;\n }\n\n _this.altKeyPressed = e.altKey;\n _this.lastClientOffset = getEventClientOffset(e);\n\n if (_this.hoverRafId === null && typeof requestAnimationFrame !== 'undefined') {\n _this.hoverRafId = requestAnimationFrame(function () {\n if (_this.monitor.isDragging()) {\n _this.actions.hover(dragOverTargetIds || [], {\n clientOffset: _this.lastClientOffset\n });\n }\n\n _this.hoverRafId = null;\n });\n }\n\n var canDrop = (dragOverTargetIds || []).some(function (targetId) {\n return _this.monitor.canDropOnTarget(targetId);\n });\n\n if (canDrop) {\n // Show user-specified drop effect.\n e.preventDefault();\n\n if (e.dataTransfer) {\n e.dataTransfer.dropEffect = _this.getCurrentDropEffect();\n }\n } else if (_this.isDraggingNativeItem()) {\n // Don't show a nice cursor but still prevent default\n // \"drop and blow away the whole document\" action.\n e.preventDefault();\n } else {\n e.preventDefault();\n\n if (e.dataTransfer) {\n e.dataTransfer.dropEffect = 'none';\n }\n }\n });\n\n _defineProperty(this, \"handleTopDragLeaveCapture\", function (e) {\n if (_this.isDraggingNativeItem()) {\n e.preventDefault();\n }\n\n var isLastLeave = _this.enterLeaveCounter.leave(e.target);\n\n if (!isLastLeave) {\n return;\n }\n\n if (_this.isDraggingNativeItem()) {\n setTimeout(function () {\n return _this.endDragNativeItem();\n }, 0);\n }\n });\n\n _defineProperty(this, \"handleTopDropCapture\", function (e) {\n _this.dropTargetIds = [];\n\n if (_this.isDraggingNativeItem()) {\n var _this$currentNativeSo;\n\n e.preventDefault();\n (_this$currentNativeSo = _this.currentNativeSource) === null || _this$currentNativeSo === void 0 ? void 0 : _this$currentNativeSo.loadDataTransfer(e.dataTransfer);\n } else if (matchNativeItemType(e.dataTransfer)) {\n // Dragging some elements, like <a> and <img> may still behave like a native drag event,\n // even if the current drag event matches a user-defined type.\n // Stop the default behavior when we're not expecting a native item to be dropped.\n e.preventDefault();\n }\n\n _this.enterLeaveCounter.reset();\n });\n\n _defineProperty(this, \"handleTopDrop\", function (e) {\n var dropTargetIds = _this.dropTargetIds;\n _this.dropTargetIds = [];\n\n _this.actions.hover(dropTargetIds, {\n clientOffset: getEventClientOffset(e)\n });\n\n _this.actions.drop({\n dropEffect: _this.getCurrentDropEffect()\n });\n\n if (_this.isDraggingNativeItem()) {\n _this.endDragNativeItem();\n } else if (_this.monitor.isDragging()) {\n _this.actions.endDrag();\n }\n });\n\n _defineProperty(this, \"handleSelectStart\", function (e) {\n var target = e.target; // Only IE requires us to explicitly say\n // we want drag drop operation to start\n\n if (typeof target.dragDrop !== 'function') {\n return;\n } // Inputs and textareas should be selectable\n\n\n if (target.tagName === 'INPUT' || target.tagName === 'SELECT' || target.tagName === 'TEXTAREA' || target.isContentEditable) {\n return;\n } // For other targets, ask IE\n // to enable drag and drop\n\n\n e.preventDefault();\n target.dragDrop();\n });\n\n this.options = new OptionsReader(globalContext, options);\n this.actions = manager.getActions();\n this.monitor = manager.getMonitor();\n this.registry = manager.getRegistry();\n this.enterLeaveCounter = new EnterLeaveCounter(this.isNodeInDocument);\n }\n /**\n * Generate profiling statistics for the HTML5Backend.\n */\n\n\n _createClass(HTML5BackendImpl, [{\n key: \"profile\",\n value: function profile() {\n var _this$dragStartSource, _this$dragOverTargetI;\n\n return {\n sourcePreviewNodes: this.sourcePreviewNodes.size,\n sourcePreviewNodeOptions: this.sourcePreviewNodeOptions.size,\n sourceNodeOptions: this.sourceNodeOptions.size,\n sourceNodes: this.sourceNodes.size,\n dragStartSourceIds: ((_this$dragStartSource = this.dragStartSourceIds) === null || _this$dragStartSource === void 0 ? void 0 : _this$dragStartSource.length) || 0,\n dropTargetIds: this.dropTargetIds.length,\n dragEnterTargetIds: this.dragEnterTargetIds.length,\n dragOverTargetIds: ((_this$dragOverTargetI = this.dragOverTargetIds) === null || _this$dragOverTargetI === void 0 ? void 0 : _this$dragOverTargetI.length) || 0\n };\n } // public for test\n\n }, {\n key: \"window\",\n get: function get() {\n return this.options.window;\n }\n }, {\n key: \"document\",\n get: function get() {\n return this.options.document;\n }\n /**\n * Get the root element to use for event subscriptions\n */\n\n }, {\n key: \"rootElement\",\n get: function get() {\n return this.options.rootElement;\n }\n }, {\n key: \"setup\",\n value: function setup() {\n var root = this.rootElement;\n\n if (root === undefined) {\n return;\n }\n\n if (root.__isReactDndBackendSetUp) {\n throw new Error('Cannot have two HTML5 backends at the same time.');\n }\n\n root.__isReactDndBackendSetUp = true;\n this.addEventListeners(root);\n }\n }, {\n key: \"teardown\",\n value: function teardown() {\n var root = this.rootElement;\n\n if (root === undefined) {\n return;\n }\n\n root.__isReactDndBackendSetUp = false;\n this.removeEventListeners(this.rootElement);\n this.clearCurrentDragSourceNode();\n\n if (this.asyncEndDragFrameId) {\n var _this$window;\n\n (_this$window = this.window) === null || _this$window === void 0 ? void 0 : _this$window.cancelAnimationFrame(this.asyncEndDragFrameId);\n }\n }\n }, {\n key: \"connectDragPreview\",\n value: function connectDragPreview(sourceId, node, options) {\n var _this2 = this;\n\n this.sourcePreviewNodeOptions.set(sourceId, options);\n this.sourcePreviewNodes.set(sourceId, node);\n return function () {\n _this2.sourcePreviewNodes.delete(sourceId);\n\n _this2.sourcePreviewNodeOptions.delete(sourceId);\n };\n }\n }, {\n key: \"connectDragSource\",\n value: function connectDragSource(sourceId, node, options) {\n var _this3 = this;\n\n this.sourceNodes.set(sourceId, node);\n this.sourceNodeOptions.set(sourceId, options);\n\n var handleDragStart = function handleDragStart(e) {\n return _this3.handleDragStart(e, sourceId);\n };\n\n var handleSelectStart = function handleSelectStart(e) {\n return _this3.handleSelectStart(e);\n };\n\n node.setAttribute('draggable', 'true');\n node.addEventListener('dragstart', handleDragStart);\n node.addEventListener('selectstart', handleSelectStart);\n return function () {\n _this3.sourceNodes.delete(sourceId);\n\n _this3.sourceNodeOptions.delete(sourceId);\n\n node.removeEventListener('dragstart', handleDragStart);\n node.removeEventListener('selectstart', handleSelectStart);\n node.setAttribute('draggable', 'false');\n };\n }\n }, {\n key: \"connectDropTarget\",\n value: function connectDropTarget(targetId, node) {\n var _this4 = this;\n\n var handleDragEnter = function handleDragEnter(e) {\n return _this4.handleDragEnter(e, targetId);\n };\n\n var handleDragOver = function handleDragOver(e) {\n return _this4.handleDragOver(e, targetId);\n };\n\n var handleDrop = function handleDrop(e) {\n return _this4.handleDrop(e, targetId);\n };\n\n node.addEventListener('dragenter', handleDragEnter);\n node.addEventListener('dragover', handleDragOver);\n node.addEventListener('drop', handleDrop);\n return function () {\n node.removeEventListener('dragenter', handleDragEnter);\n node.removeEventListener('dragover', handleDragOver);\n node.removeEventListener('drop', handleDrop);\n };\n }\n }, {\n key: \"addEventListeners\",\n value: function addEventListeners(target) {\n // SSR Fix (https://github.com/react-dnd/react-dnd/pull/813\n if (!target.addEventListener) {\n return;\n }\n\n target.addEventListener('dragstart', this.handleTopDragStart);\n target.addEventListener('dragstart', this.handleTopDragStartCapture, true);\n target.addEventListener('dragend', this.handleTopDragEndCapture, true);\n target.addEventListener('dragenter', this.handleTopDragEnter);\n target.addEventListener('dragenter', this.handleTopDragEnterCapture, true);\n target.addEventListener('dragleave', this.handleTopDragLeaveCapture, true);\n target.addEventListener('dragover', this.handleTopDragOver);\n target.addEventListener('dragover', this.handleTopDragOverCapture, true);\n target.addEventListener('drop', this.handleTopDrop);\n target.addEventListener('drop', this.handleTopDropCapture, true);\n }\n }, {\n key: \"removeEventListeners\",\n value: function removeEventListeners(target) {\n // SSR Fix (https://github.com/react-dnd/react-dnd/pull/813\n if (!target.removeEventListener) {\n return;\n }\n\n target.removeEventListener('dragstart', this.handleTopDragStart);\n target.removeEventListener('dragstart', this.handleTopDragStartCapture, true);\n target.removeEventListener('dragend', this.handleTopDragEndCapture, true);\n target.removeEventListener('dragenter', this.handleTopDragEnter);\n target.removeEventListener('dragenter', this.handleTopDragEnterCapture, true);\n target.removeEventListener('dragleave', this.handleTopDragLeaveCapture, true);\n target.removeEventListener('dragover', this.handleTopDragOver);\n target.removeEventListener('dragover', this.handleTopDragOverCapture, true);\n target.removeEventListener('drop', this.handleTopDrop);\n target.removeEventListener('drop', this.handleTopDropCapture, true);\n }\n }, {\n key: \"getCurrentSourceNodeOptions\",\n value: function getCurrentSourceNodeOptions() {\n var sourceId = this.monitor.getSourceId();\n var sourceNodeOptions = this.sourceNodeOptions.get(sourceId);\n return _objectSpread({\n dropEffect: this.altKeyPressed ? 'copy' : 'move'\n }, sourceNodeOptions || {});\n }\n }, {\n key: \"getCurrentDropEffect\",\n value: function getCurrentDropEffect() {\n if (this.isDraggingNativeItem()) {\n // It makes more sense to default to 'copy' for native resources\n return 'copy';\n }\n\n return this.getCurrentSourceNodeOptions().dropEffect;\n }\n }, {\n key: \"getCurrentSourcePreviewNodeOptions\",\n value: function getCurrentSourcePreviewNodeOptions() {\n var sourceId = this.monitor.getSourceId();\n var sourcePreviewNodeOptions = this.sourcePreviewNodeOptions.get(sourceId);\n return _objectSpread({\n anchorX: 0.5,\n anchorY: 0.5,\n captureDraggingState: false\n }, sourcePreviewNodeOptions || {});\n }\n }, {\n key: \"isDraggingNativeItem\",\n value: function isDraggingNativeItem() {\n var itemType = this.monitor.getItemType();\n return Object.keys(NativeTypes).some(function (key) {\n return NativeTypes[key] === itemType;\n });\n }\n }, {\n key: \"beginDragNativeItem\",\n value: function beginDragNativeItem(type, dataTransfer) {\n this.clearCurrentDragSourceNode();\n this.currentNativeSource = createNativeDragSource(type, dataTransfer);\n this.currentNativeHandle = this.registry.addSource(type, this.currentNativeSource);\n this.actions.beginDrag([this.currentNativeHandle]);\n }\n }, {\n key: \"setCurrentDragSourceNode\",\n value: function setCurrentDragSourceNode(node) {\n var _this5 = this;\n\n this.clearCurrentDragSourceNode();\n this.currentDragSourceNode = node; // A timeout of > 0 is necessary to resolve Firefox issue referenced\n // See:\n // * https://github.com/react-dnd/react-dnd/pull/928\n // * https://github.com/react-dnd/react-dnd/issues/869\n\n var MOUSE_MOVE_TIMEOUT = 1000; // Receiving a mouse event in the middle of a dragging operation\n // means it has ended and the drag source node disappeared from DOM,\n // so the browser didn't dispatch the dragend event.\n //\n // We need to wait before we start listening for mousemove events.\n // This is needed because the drag preview needs to be drawn or else it fires an 'mousemove' event\n // immediately in some browsers.\n //\n // See:\n // * https://github.com/react-dnd/react-dnd/pull/928\n // * https://github.com/react-dnd/react-dnd/issues/869\n //\n\n this.mouseMoveTimeoutTimer = setTimeout(function () {\n var _this5$rootElement;\n\n return (_this5$rootElement = _this5.rootElement) === null || _this5$rootElement === void 0 ? void 0 : _this5$rootElement.addEventListener('mousemove', _this5.endDragIfSourceWasRemovedFromDOM, true);\n }, MOUSE_MOVE_TIMEOUT);\n }\n }, {\n key: \"clearCurrentDragSourceNode\",\n value: function clearCurrentDragSourceNode() {\n if (this.currentDragSourceNode) {\n this.currentDragSourceNode = null;\n\n if (this.rootElement) {\n var _this$window2;\n\n (_this$window2 = this.window) === null || _this$window2 === void 0 ? void 0 : _this$window2.clearTimeout(this.mouseMoveTimeoutTimer || undefined);\n this.rootElement.removeEventListener('mousemove', this.endDragIfSourceWasRemovedFromDOM, true);\n }\n\n this.mouseMoveTimeoutTimer = null;\n return true;\n }\n\n return false;\n }\n }, {\n key: \"handleDragStart\",\n value: function handleDragStart(e, sourceId) {\n if (e.defaultPrevented) {\n return;\n }\n\n if (!this.dragStartSourceIds) {\n this.dragStartSourceIds = [];\n }\n\n this.dragStartSourceIds.unshift(sourceId);\n }\n }, {\n key: \"handleDragEnter\",\n value: function handleDragEnter(e, targetId) {\n this.dragEnterTargetIds.unshift(targetId);\n }\n }, {\n key: \"handleDragOver\",\n value: function handleDragOver(e, targetId) {\n if (this.dragOverTargetIds === null) {\n this.dragOverTargetIds = [];\n }\n\n this.dragOverTargetIds.unshift(targetId);\n }\n }, {\n key: \"handleDrop\",\n value: function handleDrop(e, targetId) {\n this.dropTargetIds.unshift(targetId);\n }\n }]);\n\n return HTML5BackendImpl;\n}();","var emptyImage;\nexport function getEmptyImage() {\n if (!emptyImage) {\n emptyImage = new Image();\n emptyImage.src = 'data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==';\n }\n\n return emptyImage;\n}","import { HTML5BackendImpl } from './HTML5BackendImpl';\nimport * as NativeTypes from './NativeTypes';\nexport { getEmptyImage } from './getEmptyImage';\nexport { NativeTypes };\nexport var HTML5Backend = function createBackend(manager, context, options) {\n return new HTML5BackendImpl(manager, context, options);\n};","import { useEffect } from \"react\";\nimport { useDrag } from \"react-dnd\";\nimport { getEmptyImage } from \"react-dnd-html5-backend\";\nimport { useTreeApi } from \"../context\";\nimport { actions as dnd } from \"../state/dnd-slice\";\nexport function useDragHook(node) {\n const tree = useTreeApi();\n const ids = tree.selectedIds;\n const [_, ref, preview] = useDrag(() => ({\n canDrag: () => node.isDraggable,\n type: \"NODE\",\n item: () => {\n // This is fired once at the begging of a drag operation\n const dragIds = tree.isSelected(node.id) ? Array.from(ids) : [node.id];\n tree.dispatch(dnd.dragStart(node.id, dragIds));\n return { id: node.id, dragIds };\n },\n end: () => {\n tree.hideCursor();\n tree.dispatch(dnd.dragEnd());\n },\n }), [ids, node]);\n useEffect(() => {\n preview(getEmptyImage());\n }, [preview]);\n return ref;\n}\n","import { bound, indexOf, isClosed, isItem, isOpenWithEmptyChildren, } from \"../utils\";\nfunction measureHover(el, offset) {\n const rect = el.getBoundingClientRect();\n const x = offset.x - Math.round(rect.x);\n const y = offset.y - Math.round(rect.y);\n const height = rect.height;\n const inTopHalf = y < height / 2;\n const inBottomHalf = !inTopHalf;\n const pad = height / 4;\n const inMiddle = y > pad && y < height - pad;\n const atTop = !inMiddle && inTopHalf;\n const atBottom = !inMiddle && inBottomHalf;\n return { x, inTopHalf, inBottomHalf, inMiddle, atTop, atBottom };\n}\nfunction getNodesAroundCursor(node, prev, next, hover) {\n if (!node) {\n // We're hovering over the empty part of the list, not over an item,\n // Put the cursor below the last item which is \"prev\"\n return [prev, null];\n }\n if (node.isInternal) {\n if (hover.atTop) {\n return [prev, node];\n }\n else if (hover.inMiddle) {\n return [node, node];\n }\n else {\n return [node, next];\n }\n }\n else {\n if (hover.inTopHalf) {\n return [prev, node];\n }\n else {\n return [node, next];\n }\n }\n}\nfunction dropAt(parentId, index) {\n return { parentId: parentId || null, index };\n}\nfunction lineCursor(index, level) {\n return {\n type: \"line\",\n index,\n level,\n };\n}\nfunction noCursor() {\n return {\n type: \"none\",\n };\n}\nfunction highlightCursor(id) {\n return {\n type: \"highlight\",\n id,\n };\n}\nfunction walkUpFrom(node, level) {\n var _a;\n let drop = node;\n while (drop.parent && drop.level > level) {\n drop = drop.parent;\n }\n const parentId = ((_a = drop.parent) === null || _a === void 0 ? void 0 : _a.id) || null;\n const index = indexOf(drop) + 1;\n return { parentId, index };\n}\n/**\n * This is the most complex, tricky function in the whole repo.\n */\nexport function computeDrop(args) {\n var _a;\n const hover = measureHover(args.element, args.offset);\n const indent = args.indent;\n const hoverLevel = Math.round(Math.max(0, hover.x - indent) / indent);\n const { node, nextNode, prevNode } = args;\n const [above, below] = getNodesAroundCursor(node, prevNode, nextNode, hover);\n /* Hovering over the middle of a folder */\n if (node && node.isInternal && hover.inMiddle) {\n return {\n drop: dropAt(node.id, null),\n cursor: highlightCursor(node.id),\n };\n }\n /*\n * Now we only need to care about the node above the cursor\n * ----------- -------\n */\n /* There is no node above the cursor line */\n if (!above) {\n return {\n drop: dropAt((_a = below === null || below === void 0 ? void 0 : below.parent) === null || _a === void 0 ? void 0 : _a.id, 0),\n cursor: lineCursor(0, 0),\n };\n }\n /* The node above the cursor line is an item */\n if (isItem(above)) {\n const level = bound(hoverLevel, (below === null || below === void 0 ? void 0 : below.level) || 0, above.level);\n return {\n drop: walkUpFrom(above, level),\n cursor: lineCursor(above.rowIndex + 1, level),\n };\n }\n /* The node above the cursor line is a closed folder */\n if (isClosed(above)) {\n const level = bound(hoverLevel, (below === null || below === void 0 ? void 0 : below.level) || 0, above.level);\n return {\n drop: walkUpFrom(above, level),\n cursor: lineCursor(above.rowIndex + 1, level),\n };\n }\n /* The node above the cursor line is an open folder with no children */\n if (isOpenWithEmptyChildren(above)) {\n const level = bound(hoverLevel, 0, above.level + 1);\n if (level > above.level) {\n /* Will be the first child of the empty folder */\n return {\n drop: dropAt(above.id, 0),\n cursor: lineCursor(above.rowIndex + 1, level),\n };\n }\n else {\n /* Will be a sibling or grandsibling of the empty folder */\n return {\n drop: walkUpFrom(above, level),\n cursor: lineCursor(above.rowIndex + 1, level),\n };\n }\n }\n /* The node above the cursor is a an open folder with children */\n return {\n drop: dropAt(above === null || above === void 0 ? void 0 : above.id, 0),\n cursor: lineCursor(above.rowIndex + 1, above.level + 1),\n };\n}\n","import { useDrop } from \"react-dnd\";\nimport { useTreeApi } from \"../context\";\nimport { computeDrop } from \"./compute-drop\";\nimport { actions as dnd } from \"../state/dnd-slice\";\nimport { safeRun } from \"../utils\";\nimport { ROOT_ID } from \"../data/create-root\";\nexport function useDropHook(el, node) {\n const tree = useTreeApi();\n const [_, dropRef] = useDrop(() => ({\n accept: \"NODE\",\n canDrop: () => tree.canDrop(),\n hover: (_item, m) => {\n const offset = m.getClientOffset();\n if (!el.current || !offset)\n return;\n const { cursor, drop } = computeDrop({\n element: el.current,\n offset: offset,\n indent: tree.indent,\n node: node,\n prevNode: node.prev,\n nextNode: node.next,\n });\n if (drop)\n tree.dispatch(dnd.hovering(drop.parentId, drop.index));\n if (m.canDrop()) {\n if (cursor)\n tree.showCursor(cursor);\n }\n else {\n tree.hideCursor();\n }\n },\n drop: (_, m) => {\n if (!m.canDrop())\n return null;\n let { parentId, index, dragIds } = tree.state.dnd;\n safeRun(tree.props.onMove, {\n dragIds,\n parentId: parentId === ROOT_ID ? null : parentId,\n index: index === null ? 0 : index, // When it's null it was dropped over a folder\n dragNodes: tree.dragNodes,\n parentNode: tree.get(parentId),\n });\n tree.open(parentId);\n },\n }), [node, el.current, tree.props]);\n return dropRef;\n}\n","import { useMemo } from \"react\";\nimport { useTreeApi } from \"../context\";\nexport function useFreshNode(index) {\n const tree = useTreeApi();\n const original = tree.at(index);\n if (!original)\n throw new Error(`Could not find node for index: ${index}`);\n return useMemo(() => {\n const fresh = original.clone();\n tree.visibleNodes[index] = fresh; // sneaky\n return fresh;\n // Return a fresh instance if the state values change\n }, [...Object.values(original.state), original]);\n}\n","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport React, { useCallback, useEffect, useMemo, useRef } from \"react\";\nimport { useDataUpdates, useNodesContext, useTreeApi } from \"../context\";\nimport { useDragHook } from \"../dnd/drag-hook\";\nimport { useDropHook } from \"../dnd/drop-hook\";\nimport { useFreshNode } from \"../hooks/use-fresh-node\";\nexport const RowContainer = React.memo(function RowContainer({ index, style, }) {\n /* When will the <Row> will re-render.\n *\n * The row component is memo'd so it will only render\n * when a new instance of the NodeApi class is passed\n * to it.\n *\n * The TreeApi instance is stable. It does not\n * change when the internal state changes.\n *\n * The TreeApi has all the references to the nodes.\n * We need to clone the nodes when their state\n * changes. The node class contains no state itself,\n * It always checks the tree for state. The tree's\n * state will always be up to date.\n */\n useDataUpdates(); // Re-render when tree props or visability changes\n const _ = useNodesContext(); // So that we re-render appropriately\n const tree = useTreeApi(); // Tree already has the fresh state\n const node = useFreshNode(index);\n const el = useRef(null);\n const dragRef = useDragHook(node);\n const dropRef = useDropHook(el, node);\n const innerRef = useCallback((n) => {\n el.current = n;\n dropRef(n);\n }, [dropRef]);\n const indent = tree.indent * node.level;\n const nodeStyle = useMemo(() => ({ paddingLeft: indent }), [indent]);\n const rowStyle = useMemo(() => {\n var _a, _b;\n return (Object.assign(Object.assign({}, style), { top: parseFloat(style.top) +\n ((_b = (_a = tree.props.padding) !== null && _a !== void 0 ? _a : tree.props.paddingTop) !== null && _b !== void 0 ? _b : 0) }));\n }, [style, tree.props.padding, tree.props.paddingTop]);\n const rowAttrs = {\n role: \"treeitem\",\n \"aria-level\": node.level + 1,\n \"aria-selected\": node.isSelected,\n \"aria-expanded\": node.isOpen,\n style: rowStyle,\n tabIndex: -1,\n className: tree.props.rowClassName,\n };\n useEffect(() => {\n var _a;\n if (!node.isEditing && node.isFocused) {\n (_a = el.current) === null || _a === void 0 ? void 0 : _a.focus({ preventScroll: true });\n }\n }, [node.isEditing, node.isFocused, el.current]);\n const Node = tree.renderNode;\n const Row = tree.renderRow;\n return (_jsx(Row, { node: node, innerRef: innerRef, attrs: rowAttrs, children: _jsx(Node, { node: node, tree: tree, style: nodeStyle, dragHandle: dragRef }) }));\n});\n","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { FixedSizeList } from \"react-window\";\nimport { useDataUpdates, useTreeApi } from \"../context\";\nimport { focusNextElement, focusPrevElement } from \"../utils\";\nimport { ListOuterElement } from \"./list-outer-element\";\nimport { ListInnerElement } from \"./list-inner-element\";\nimport { RowContainer } from \"./row-container\";\nlet focusSearchTerm = \"\";\nlet timeoutId = null;\n/**\n * All these keyboard shortcuts seem like they should be configurable.\n * Each operation should be a given a name and separated from\n * the event handler. Future clean up welcome.\n */\nexport function DefaultContainer() {\n useDataUpdates();\n const tree = useTreeApi();\n return (_jsx(\"div\", { role: \"tree\", style: {\n height: tree.height,\n width: tree.width,\n minHeight: 0,\n minWidth: 0,\n }, onContextMenu: tree.props.onContextMenu, onClick: tree.props.onClick, tabIndex: 0, onFocus: (e) => {\n if (!e.currentTarget.contains(e.relatedTarget)) {\n tree.onFocus();\n }\n }, onBlur: (e) => {\n if (!e.currentTarget.contains(e.relatedTarget)) {\n tree.onBlur();\n }\n }, onKeyDown: (e) => {\n var _a;\n if (tree.isEditing) {\n return;\n }\n if (e.key === \"Backspace\") {\n if (!tree.props.onDelete)\n return;\n const ids = Array.from(tree.selectedIds);\n if (ids.length > 1) {\n let nextFocus = tree.mostRecentNode;\n while (nextFocus && nextFocus.isSelected) {\n nextFocus = nextFocus.nextSibling;\n }\n if (!nextFocus)\n nextFocus = tree.lastNode;\n tree.focus(nextFocus, { scroll: false });\n tree.delete(Array.from(ids));\n }\n else {\n const node = tree.focusedNode;\n if (node) {\n const sib = node.nextSibling;\n const parent = node.parent;\n tree.focus(sib || parent, { scroll: false });\n tree.delete(node);\n }\n }\n return;\n }\n if (e.key === \"Tab\" && !e.shiftKey) {\n e.preventDefault();\n focusNextElement(e.currentTarget);\n return;\n }\n if (e.key === \"Tab\" && e.shiftKey) {\n e.preventDefault();\n focusPrevElement(e.currentTarget);\n return;\n }\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n const next = tree.nextNode;\n if (e.metaKey) {\n tree.select(tree.focusedNode);\n tree.activate(tree.focusedNode);\n return;\n }\n else if (!e.shiftKey || tree.props.disableMultiSelection) {\n tree.focus(next);\n return;\n }\n else {\n if (!next)\n return;\n const current = tree.focusedNode;\n if (!current) {\n tree.focus(tree.firstNode);\n }\n else if (current.isSelected) {\n tree.selectContiguous(next);\n }\n else {\n tree.selectMulti(next);\n }\n return;\n }\n }\n if (e.key === \"ArrowUp\") {\n e.preventDefault();\n const prev = tree.prevNode;\n if (!e.shiftKey || tree.props.disableMultiSelection) {\n tree.focus(prev);\n return;\n }\n else {\n if (!prev)\n return;\n const current = tree.focusedNode;\n if (!current) {\n tree.focus(tree.lastNode); // ?\n }\n else if (current.isSelected) {\n tree.selectContiguous(prev);\n }\n else {\n tree.selectMulti(prev);\n }\n return;\n }\n }\n if (e.key === \"ArrowRight\") {\n const node = tree.focusedNode;\n if (!node)\n return;\n if (node.isInternal && node.isOpen) {\n tree.focus(tree.nextNode);\n }\n else if (node.isInternal)\n tree.open(node.id);\n return;\n }\n if (e.key === \"ArrowLeft\") {\n const node = tree.focusedNode;\n if (!node || node.isRoot)\n return;\n if (node.isInternal && node.isOpen)\n tree.close(node.id);\n else if (!((_a = node.parent) === null || _a === void 0 ? void 0 : _a.isRoot)) {\n tree.focus(node.parent);\n }\n return;\n }\n if (e.key === \"a\" && e.metaKey && !tree.props.disableMultiSelection) {\n e.preventDefault();\n tree.selectAll();\n return;\n }\n if (e.key === \"a\" && !e.metaKey && tree.props.onCreate) {\n tree.createLeaf();\n return;\n }\n if (e.key === \"A\" && !e.metaKey) {\n if (!tree.props.onCreate)\n return;\n tree.createInternal();\n return;\n }\n if (e.key === \"Home\") {\n // add shift keys\n e.preventDefault();\n tree.focus(tree.firstNode);\n return;\n }\n if (e.key === \"End\") {\n // add shift keys\n e.preventDefault();\n tree.focus(tree.lastNode);\n return;\n }\n if (e.key === \"Enter\") {\n const node = tree.focusedNode;\n if (!node)\n return;\n if (!node.isEditable || !tree.props.onRename)\n return;\n setTimeout(() => {\n if (node)\n tree.edit(node);\n });\n return;\n }\n if (e.key === \" \") {\n e.preventDefault();\n const node = tree.focusedNode;\n if (!node)\n return;\n if (node.isLeaf) {\n node.select();\n node.activate();\n }\n else {\n node.toggle();\n }\n return;\n }\n if (e.key === \"*\") {\n const node = tree.focusedNode;\n if (!node)\n return;\n tree.openSiblings(node);\n return;\n }\n if (e.key === \"PageUp\") {\n e.preventDefault();\n tree.pageUp();\n return;\n }\n if (e.key === \"PageDown\") {\n e.preventDefault();\n tree.pageDown();\n }\n // If they type a sequence of characters\n // collect them. Reset them after a timeout.\n // Use it to search the tree for a node, then focus it.\n // Clean this up a bit later\n clearTimeout(timeoutId);\n focusSearchTerm += e.key;\n timeoutId = setTimeout(() => {\n focusSearchTerm = \"\";\n }, 600);\n const node = tree.visibleNodes.find((n) => {\n // @ts-ignore\n const name = n.data.name;\n if (typeof name === \"string\") {\n return name.toLowerCase().startsWith(focusSearchTerm);\n }\n else\n return false;\n });\n if (node)\n tree.focus(node.id);\n }, children: _jsx(FixedSizeList, { className: tree.props.className, outerRef: tree.listEl, itemCount: tree.visibleNodes.length, height: tree.height, width: tree.width, itemSize: tree.rowHeight, overscanCount: tree.overscanCount, itemKey: (index) => { var _a; return ((_a = tree.visibleNodes[index]) === null || _a === void 0 ? void 0 : _a.id) || index; }, outerElementType: ListOuterElement, innerElementType: ListInnerElement, onScroll: tree.props.onScroll, onItemsRendered: tree.onItemsRendered.bind(tree), ref: tree.list, children: RowContainer }) }));\n}\n","export function createList(tree) {\n if (tree.isFiltered) {\n return flattenAndFilterTree(tree.root, tree.isMatch.bind(tree));\n }\n else {\n return flattenTree(tree.root);\n }\n}\nfunction flattenTree(root) {\n const list = [];\n function collect(node) {\n var _a;\n if (node.level >= 0) {\n list.push(node);\n }\n if (node.isOpen) {\n (_a = node.children) === null || _a === void 0 ? void 0 : _a.forEach(collect);\n }\n }\n collect(root);\n list.forEach(assignRowIndex);\n return list;\n}\nfunction flattenAndFilterTree(root, isMatch) {\n const matches = {};\n const list = [];\n function markMatch(node) {\n const yes = !node.isRoot && isMatch(node);\n if (yes) {\n matches[node.id] = true;\n let parent = node.parent;\n while (parent) {\n matches[parent.id] = true;\n parent = parent.parent;\n }\n }\n if (node.children) {\n for (let child of node.children)\n markMatch(child);\n }\n }\n function collect(node) {\n var _a;\n if (node.level >= 0 && matches[node.id]) {\n list.push(node);\n }\n if (node.isOpen) {\n (_a = node.children) === null || _a === void 0 ? void 0 : _a.forEach(collect);\n }\n }\n markMatch(root);\n collect(root);\n list.forEach(assignRowIndex);\n return list;\n}\nfunction assignRowIndex(node, index) {\n node.rowIndex = index;\n}\n","export const createIndex = (nodes) => {\n return nodes.reduce((map, node, index) => {\n map[node.id] = index;\n return map;\n }, {});\n};\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport * as utils from \"../utils\";\nimport { DefaultCursor } from \"../components/default-cursor\";\nimport { DefaultRow } from \"../components/default-row\";\nimport { DefaultNode } from \"../components/default-node\";\nimport { edit } from \"../state/edit-slice\";\nimport { focus, treeBlur } from \"../state/focus-slice\";\nimport { createRoot, ROOT_ID } from \"../data/create-root\";\nimport { actions as visibility } from \"../state/open-slice\";\nimport { actions as selection } from \"../state/selection-slice\";\nimport { actions as dnd } from \"../state/dnd-slice\";\nimport { DefaultDragPreview } from \"../components/default-drag-preview\";\nimport { DefaultContainer } from \"../components/default-container\";\nimport { createList } from \"../data/create-list\";\nimport { createIndex } from \"../data/create-index\";\nconst { safeRun, identify, identifyNull } = utils;\nexport class TreeApi {\n constructor(store, props, list, listEl) {\n this.store = store;\n this.props = props;\n this.list = list;\n this.listEl = listEl;\n this.visibleStartIndex = 0;\n this.visibleStopIndex = 0;\n /* Changes here must also be made in update() */\n this.root = createRoot(this);\n this.visibleNodes = createList(this);\n this.idToIndex = createIndex(this.visibleNodes);\n }\n /* Changes here must also be made in constructor() */\n update(props) {\n this.props = props;\n this.root = createRoot(this);\n this.visibleNodes = createList(this);\n this.idToIndex = createIndex(this.visibleNodes);\n }\n /* Store helpers */\n dispatch(action) {\n return this.store.dispatch(action);\n }\n get state() {\n return this.store.getState();\n }\n get openState() {\n return this.state.nodes.open.unfiltered;\n }\n /* Tree Props */\n get width() {\n var _a;\n return (_a = this.props.width) !== null && _a !== void 0 ? _a : 300;\n }\n get height() {\n var _a;\n return (_a = this.props.height) !== null && _a !== void 0 ? _a : 500;\n }\n get indent() {\n var _a;\n return (_a = this.props.indent) !== null && _a !== void 0 ? _a : 24;\n }\n get rowHeight() {\n var _a;\n return (_a = this.props.rowHeight) !== null && _a !== void 0 ? _a : 24;\n }\n get overscanCount() {\n var _a;\n return (_a = this.props.overscanCount) !== null && _a !== void 0 ? _a : 1;\n }\n get searchTerm() {\n return (this.props.searchTerm || \"\").trim();\n }\n get matchFn() {\n var _a;\n const match = (_a = this.props.searchMatch) !== null && _a !== void 0 ? _a : ((node, term) => {\n const string = JSON.stringify(Object.values(node.data));\n return string.toLocaleLowerCase().includes(term.toLocaleLowerCase());\n });\n return (node) => match(node, this.searchTerm);\n }\n accessChildren(data) {\n var _a;\n const get = this.props.childrenAccessor || \"children\";\n return (_a = utils.access(data, get)) !== null && _a !== void 0 ? _a : null;\n }\n accessId(data) {\n const get = this.props.idAccessor || \"id\";\n const id = utils.access(data, get);\n if (!id)\n throw new Error(\"Data must contain an 'id' property or props.idAccessor must return a string\");\n return id;\n }\n /* Node Access */\n get firstNode() {\n var _a;\n return (_a = this.visibleNodes[0]) !== null && _a !== void 0 ? _a : null;\n }\n get lastNode() {\n var _a;\n return (_a = this.visibleNodes[this.visibleNodes.length - 1]) !== null && _a !== void 0 ? _a : null;\n }\n get focusedNode() {\n var _a;\n return (_a = this.get(this.state.nodes.focus.id)) !== null && _a !== void 0 ? _a : null;\n }\n get mostRecentNode() {\n var _a;\n return (_a = this.get(this.state.nodes.selection.mostRecent)) !== null && _a !== void 0 ? _a : null;\n }\n get nextNode() {\n const index = this.indexOf(this.focusedNode);\n if (index === null)\n return null;\n else\n return this.at(index + 1);\n }\n get prevNode() {\n const index = this.indexOf(this.focusedNode);\n if (index === null)\n return null;\n else\n return this.at(index - 1);\n }\n get(id) {\n if (!id)\n return null;\n if (id in this.idToIndex)\n return this.visibleNodes[this.idToIndex[id]] || null;\n else\n return null;\n }\n at(index) {\n return this.visibleNodes[index] || null;\n }\n nodesBetween(startId, endId) {\n var _a;\n if (startId === null || endId === null)\n return [];\n const index1 = (_a = this.indexOf(startId)) !== null && _a !== void 0 ? _a : 0;\n const index2 = this.indexOf(endId);\n if (index2 === null)\n return [];\n const start = Math.min(index1, index2);\n const end = Math.max(index1, index2);\n return this.visibleNodes.slice(start, end + 1);\n }\n indexOf(id) {\n const key = utils.identifyNull(id);\n if (!key)\n return null;\n return this.idToIndex[key];\n }\n /* Data Operations */\n get editingId() {\n return this.state.nodes.edit.id;\n }\n createInternal() {\n return this.create({ type: \"internal\" });\n }\n createLeaf() {\n return this.create({ type: \"leaf\" });\n }\n create() {\n return __awaiter(this, arguments, void 0, function* (opts = {}) {\n var _a, _b;\n const parentId = opts.parentId === undefined\n ? utils.getInsertParentId(this)\n : opts.parentId;\n const index = (_a = opts.index) !== null && _a !== void 0 ? _a : utils.getInsertIndex(this);\n const type = (_b = opts.type) !== null && _b !== void 0 ? _b : \"leaf\";\n const data = yield safeRun(this.props.onCreate, {\n type,\n parentId,\n index,\n parentNode: this.get(parentId),\n });\n if (data) {\n this.focus(data);\n setTimeout(() => {\n this.edit(data).then(() => {\n this.select(data);\n this.activate(data);\n });\n });\n }\n });\n }\n delete(node) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!node)\n return;\n const idents = Array.isArray(node) ? node : [node];\n const ids = idents.map(identify);\n const nodes = ids.map((id) => this.get(id)).filter((n) => !!n);\n yield safeRun(this.props.onDelete, { nodes, ids });\n });\n }\n edit(node) {\n const id = identify(node);\n this.resolveEdit({ cancelled: true });\n this.scrollTo(id);\n this.dispatch(edit(id));\n return new Promise((resolve) => {\n TreeApi.editPromise = resolve;\n });\n }\n submit(identity, value) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!identity)\n return;\n const id = identify(identity);\n yield safeRun(this.props.onRename, {\n id,\n name: value,\n node: this.get(id),\n });\n this.dispatch(edit(null));\n this.resolveEdit({ cancelled: false, value });\n setTimeout(() => this.onFocus()); // Return focus to element;\n });\n }\n reset() {\n this.dispatch(edit(null));\n this.resolveEdit({ cancelled: true });\n setTimeout(() => this.onFocus()); // Return focus to element;\n }\n activate(id) {\n const node = this.get(identifyNull(id));\n if (!node)\n return;\n safeRun(this.props.onActivate, node);\n }\n resolveEdit(value) {\n const resolve = TreeApi.editPromise;\n if (resolve)\n resolve(value);\n TreeApi.editPromise = null;\n }\n /* Focus and Selection */\n get selectedIds() {\n return this.state.nodes.selection.ids;\n }\n get selectedNodes() {\n let nodes = [];\n for (let id of Array.from(this.selectedIds)) {\n const node = this.get(id);\n if (node)\n nodes.push(node);\n }\n return nodes;\n }\n focus(node, opts = {}) {\n if (!node)\n return;\n /* Focus is responsible for scrolling, while selection is\n * responsible for focus. If selectionFollowsFocus, then\n * just select it. */\n if (this.props.selectionFollowsFocus) {\n this.select(node);\n }\n else {\n this.dispatch(focus(identify(node)));\n if (opts.scroll !== false)\n this.scrollTo(node);\n if (this.focusedNode)\n safeRun(this.props.onFocus, this.focusedNode);\n }\n }\n pageUp() {\n var _a, _b;\n const start = this.visibleStartIndex;\n const stop = this.visibleStopIndex;\n const page = stop - start;\n let index = (_b = (_a = this.focusedNode) === null || _a === void 0 ? void 0 : _a.rowIndex) !== null && _b !== void 0 ? _b : 0;\n if (index > start) {\n index = start;\n }\n else {\n index = Math.max(start - page, 0);\n }\n this.focus(this.at(index));\n }\n pageDown() {\n var _a, _b;\n const start = this.visibleStartIndex;\n const stop = this.visibleStopIndex;\n const page = stop - start;\n let index = (_b = (_a = this.focusedNode) === null || _a === void 0 ? void 0 : _a.rowIndex) !== null && _b !== void 0 ? _b : 0;\n if (index < stop) {\n index = stop;\n }\n else {\n index = Math.min(index + page, this.visibleNodes.length - 1);\n }\n this.focus(this.at(index));\n }\n select(node, opts = {}) {\n if (!node)\n return;\n const changeFocus = opts.focus !== false;\n const id = identify(node);\n if (changeFocus)\n this.dispatch(focus(id));\n this.dispatch(selection.only(id));\n this.dispatch(selection.anchor(id));\n this.dispatch(selection.mostRecent(id));\n this.scrollTo(id, opts.align);\n if (this.focusedNode && changeFocus) {\n safeRun(this.props.onFocus, this.focusedNode);\n }\n safeRun(this.props.onSelect, this.selectedNodes);\n }\n deselect(node) {\n if (!node)\n return;\n const id = identify(node);\n this.dispatch(selection.remove(id));\n safeRun(this.props.onSelect, this.selectedNodes);\n }\n selectMulti(identity) {\n const node = this.get(identifyNull(identity));\n if (!node)\n return;\n this.dispatch(focus(node.id));\n this.dispatch(selection.add(node.id));\n this.dispatch(selection.anchor(node.id));\n this.dispatch(selection.mostRecent(node.id));\n this.scrollTo(node);\n if (this.focusedNode)\n safeRun(this.props.onFocus, this.focusedNode);\n safeRun(this.props.onSelect, this.selectedNodes);\n }\n selectContiguous(identity) {\n if (!identity)\n return;\n const id = identify(identity);\n const { anchor, mostRecent } = this.state.nodes.selection;\n this.dispatch(focus(id));\n this.dispatch(selection.remove(this.nodesBetween(anchor, mostRecent)));\n this.dispatch(selection.add(this.nodesBetween(anchor, identifyNull(id))));\n this.dispatch(selection.mostRecent(id));\n this.scrollTo(id);\n if (this.focusedNode)\n safeRun(this.props.onFocus, this.focusedNode);\n safeRun(this.props.onSelect, this.selectedNodes);\n }\n deselectAll() {\n this.setSelection({ ids: [], anchor: null, mostRecent: null });\n safeRun(this.props.onSelect, this.selectedNodes);\n }\n selectAll() {\n var _a;\n this.setSelection({\n ids: Object.keys(this.idToIndex),\n anchor: this.firstNode,\n mostRecent: this.lastNode,\n });\n this.dispatch(focus((_a = this.lastNode) === null || _a === void 0 ? void 0 : _a.id));\n if (this.focusedNode)\n safeRun(this.props.onFocus, this.focusedNode);\n safeRun(this.props.onSelect, this.selectedNodes);\n }\n setSelection(args) {\n var _a;\n const ids = new Set((_a = args.ids) === null || _a === void 0 ? void 0 : _a.map(identify));\n const anchor = identifyNull(args.anchor);\n const mostRecent = identifyNull(args.mostRecent);\n this.dispatch(selection.set({ ids, anchor, mostRecent }));\n safeRun(this.props.onSelect, this.selectedNodes);\n }\n /* Drag and Drop */\n get cursorParentId() {\n const { cursor } = this.state.dnd;\n switch (cursor.type) {\n case \"highlight\":\n return cursor.id;\n default:\n return null;\n }\n }\n get cursorOverFolder() {\n return this.state.dnd.cursor.type === \"highlight\";\n }\n get dragNodes() {\n return this.state.dnd.dragIds\n .map((id) => this.get(id))\n .filter((n) => !!n);\n }\n get dragNode() {\n return this.get(this.state.nodes.drag.id);\n }\n get dragDestinationParent() {\n return this.get(this.state.nodes.drag.destinationParentId);\n }\n get dragDestinationIndex() {\n return this.state.nodes.drag.destinationIndex;\n }\n canDrop() {\n var _a;\n if (this.isFiltered)\n return false;\n const parentNode = (_a = this.get(this.state.dnd.parentId)) !== null && _a !== void 0 ? _a : this.root;\n const dragNodes = this.dragNodes;\n const isDisabled = this.props.disableDrop;\n for (const drag of dragNodes) {\n if (!drag)\n return false;\n if (!parentNode)\n return false;\n if (drag.isInternal && utils.isDescendant(parentNode, drag))\n return false;\n }\n // Allow the user to insert their own logic\n if (typeof isDisabled == \"function\") {\n return !isDisabled({\n parentNode,\n dragNodes: this.dragNodes,\n index: this.state.dnd.index || 0,\n });\n }\n else if (typeof isDisabled == \"string\") {\n // @ts-ignore\n return !parentNode.data[isDisabled];\n }\n else if (typeof isDisabled === \"boolean\") {\n return !isDisabled;\n }\n else {\n return true;\n }\n }\n hideCursor() {\n this.dispatch(dnd.cursor({ type: \"none\" }));\n }\n showCursor(cursor) {\n this.dispatch(dnd.cursor(cursor));\n }\n /* Visibility */\n open(identity) {\n const id = identifyNull(identity);\n if (!id)\n return;\n if (this.isOpen(id))\n return;\n this.dispatch(visibility.open(id, this.isFiltered));\n safeRun(this.props.onToggle, id);\n }\n close(identity) {\n const id = identifyNull(identity);\n if (!id)\n return;\n if (!this.isOpen(id))\n return;\n this.dispatch(visibility.close(id, this.isFiltered));\n safeRun(this.props.onToggle, id);\n }\n toggle(identity) {\n const id = identifyNull(identity);\n if (!id)\n return;\n return this.isOpen(id) ? this.close(id) : this.open(id);\n }\n openParents(identity) {\n const id = identifyNull(identity);\n if (!id)\n return;\n const node = utils.dfs(this.root, id);\n let parent = node === null || node === void 0 ? void 0 : node.parent;\n while (parent) {\n this.open(parent.id);\n parent = parent.parent;\n }\n }\n openSiblings(node) {\n const parent = node.parent;\n if (!parent) {\n this.toggle(node.id);\n }\n else if (parent.children) {\n const isOpen = node.isOpen;\n for (let sibling of parent.children) {\n if (sibling.isInternal) {\n isOpen ? this.close(sibling.id) : this.open(sibling.id);\n }\n }\n this.scrollTo(this.focusedNode);\n }\n }\n openAll() {\n utils.walk(this.root, (node) => {\n if (node.isInternal)\n node.open();\n });\n }\n closeAll() {\n utils.walk(this.root, (node) => {\n if (node.isInternal)\n node.close();\n });\n }\n /* Scrolling */\n scrollTo(identity, align = \"smart\") {\n if (!identity)\n return;\n const id = identify(identity);\n this.openParents(id);\n return utils\n .waitFor(() => id in this.idToIndex)\n .then(() => {\n var _a;\n const index = this.idToIndex[id];\n if (index === undefined)\n return;\n (_a = this.list.current) === null || _a === void 0 ? void 0 : _a.scrollToItem(index, align);\n })\n .catch(() => {\n // Id: ${id} never appeared in the list.\n });\n }\n /* State Checks */\n get isEditing() {\n return this.state.nodes.edit.id !== null;\n }\n get isFiltered() {\n var _a;\n return !!((_a = this.props.searchTerm) === null || _a === void 0 ? void 0 : _a.trim());\n }\n get hasFocus() {\n return this.state.nodes.focus.treeFocused;\n }\n get hasNoSelection() {\n return this.state.nodes.selection.ids.size === 0;\n }\n get hasOneSelection() {\n return this.state.nodes.selection.ids.size === 1;\n }\n get hasMultipleSelections() {\n return this.state.nodes.selection.ids.size > 1;\n }\n isSelected(id) {\n if (!id)\n return false;\n return this.state.nodes.selection.ids.has(id);\n }\n isOpen(id) {\n var _a, _b, _c;\n if (!id)\n return false;\n if (id === ROOT_ID)\n return true;\n const def = (_a = this.props.openByDefault) !== null && _a !== void 0 ? _a : true;\n if (this.isFiltered) {\n return (_b = this.state.nodes.open.filtered[id]) !== null && _b !== void 0 ? _b : true; // Filtered folders are always opened by default\n }\n else {\n return (_c = this.state.nodes.open.unfiltered[id]) !== null && _c !== void 0 ? _c : def;\n }\n }\n isEditable(data) {\n const check = this.props.disableEdit || (() => false);\n return !utils.access(data, check);\n }\n isDraggable(data) {\n const check = this.props.disableDrag || (() => false);\n return !utils.access(data, check);\n }\n isDragging(node) {\n const id = identifyNull(node);\n if (!id)\n return false;\n return this.state.nodes.drag.id === id;\n }\n isFocused(id) {\n return this.hasFocus && this.state.nodes.focus.id === id;\n }\n isMatch(node) {\n return this.matchFn(node);\n }\n willReceiveDrop(node) {\n const id = identifyNull(node);\n if (!id)\n return false;\n const { destinationParentId, destinationIndex } = this.state.nodes.drag;\n return id === destinationParentId && destinationIndex === null;\n }\n /* Tree Event Handlers */\n onFocus() {\n const node = this.focusedNode || this.firstNode;\n if (node)\n this.dispatch(focus(node.id));\n }\n onBlur() {\n this.dispatch(treeBlur());\n }\n onItemsRendered(args) {\n this.visibleStartIndex = args.visibleStartIndex;\n this.visibleStopIndex = args.visibleStopIndex;\n }\n /* Get Renderers */\n get renderContainer() {\n return this.props.renderContainer || DefaultContainer;\n }\n get renderRow() {\n return this.props.renderRow || DefaultRow;\n }\n get renderNode() {\n return this.props.children || DefaultNode;\n }\n get renderDragPreview() {\n return this.props.renderDragPreview || DefaultDragPreview;\n }\n get renderCursor() {\n return this.props.renderCursor || DefaultCursor;\n }\n}\n","// src/utils/formatProdErrorMessage.ts\nfunction formatProdErrorMessage(code) {\n return `Minified Redux error #${code}; visit https://redux.js.org/Errors?code=${code} for the full message or use the non-minified dev environment for full errors. `;\n}\n\n// src/utils/symbol-observable.ts\nvar $$observable = /* @__PURE__ */ (() => typeof Symbol === \"function\" && Symbol.observable || \"@@observable\")();\nvar symbol_observable_default = $$observable;\n\n// src/utils/actionTypes.ts\nvar randomString = () => Math.random().toString(36).substring(7).split(\"\").join(\".\");\nvar ActionTypes = {\n INIT: `@@redux/INIT${/* @__PURE__ */ randomString()}`,\n REPLACE: `@@redux/REPLACE${/* @__PURE__ */ randomString()}`,\n PROBE_UNKNOWN_ACTION: () => `@@redux/PROBE_UNKNOWN_ACTION${randomString()}`\n};\nvar actionTypes_default = ActionTypes;\n\n// src/utils/isPlainObject.ts\nfunction isPlainObject(obj) {\n if (typeof obj !== \"object\" || obj === null)\n return false;\n let proto = obj;\n while (Object.getPrototypeOf(proto) !== null) {\n proto = Object.getPrototypeOf(proto);\n }\n return Object.getPrototypeOf(obj) === proto || Object.getPrototypeOf(obj) === null;\n}\n\n// src/utils/kindOf.ts\nfunction miniKindOf(val) {\n if (val === void 0)\n return \"undefined\";\n if (val === null)\n return \"null\";\n const type = typeof val;\n switch (type) {\n case \"boolean\":\n case \"string\":\n case \"number\":\n case \"symbol\":\n case \"function\": {\n return type;\n }\n }\n if (Array.isArray(val))\n return \"array\";\n if (isDate(val))\n return \"date\";\n if (isError(val))\n return \"error\";\n const constructorName = ctorName(val);\n switch (constructorName) {\n case \"Symbol\":\n case \"Promise\":\n case \"WeakMap\":\n case \"WeakSet\":\n case \"Map\":\n case \"Set\":\n return constructorName;\n }\n return Object.prototype.toString.call(val).slice(8, -1).toLowerCase().replace(/\\s/g, \"\");\n}\nfunction ctorName(val) {\n return typeof val.constructor === \"function\" ? val.constructor.name : null;\n}\nfunction isError(val) {\n return val instanceof Error || typeof val.message === \"string\" && val.constructor && typeof val.constructor.stackTraceLimit === \"number\";\n}\nfunction isDate(val) {\n if (val instanceof Date)\n return true;\n return typeof val.toDateString === \"function\" && typeof val.getDate === \"function\" && typeof val.setDate === \"function\";\n}\nfunction kindOf(val) {\n let typeOfVal = typeof val;\n if (process.env.NODE_ENV !== \"production\") {\n typeOfVal = miniKindOf(val);\n }\n return typeOfVal;\n}\n\n// src/createStore.ts\nfunction createStore(reducer, preloadedState, enhancer) {\n if (typeof reducer !== \"function\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(2) : `Expected the root reducer to be a function. Instead, received: '${kindOf(reducer)}'`);\n }\n if (typeof preloadedState === \"function\" && typeof enhancer === \"function\" || typeof enhancer === \"function\" && typeof arguments[3] === \"function\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(0) : \"It looks like you are passing several store enhancers to createStore(). This is not supported. Instead, compose them together to a single function. See https://redux.js.org/tutorials/fundamentals/part-4-store#creating-a-store-with-enhancers for an example.\");\n }\n if (typeof preloadedState === \"function\" && typeof enhancer === \"undefined\") {\n enhancer = preloadedState;\n preloadedState = void 0;\n }\n if (typeof enhancer !== \"undefined\") {\n if (typeof enhancer !== \"function\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(1) : `Expected the enhancer to be a function. Instead, received: '${kindOf(enhancer)}'`);\n }\n return enhancer(createStore)(reducer, preloadedState);\n }\n let currentReducer = reducer;\n let currentState = preloadedState;\n let currentListeners = /* @__PURE__ */ new Map();\n let nextListeners = currentListeners;\n let listenerIdCounter = 0;\n let isDispatching = false;\n function ensureCanMutateNextListeners() {\n if (nextListeners === currentListeners) {\n nextListeners = /* @__PURE__ */ new Map();\n currentListeners.forEach((listener, key) => {\n nextListeners.set(key, listener);\n });\n }\n }\n function getState() {\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(3) : \"You may not call store.getState() while the reducer is executing. The reducer has already received the state as an argument. Pass it down from the top reducer instead of reading it from the store.\");\n }\n return currentState;\n }\n function subscribe(listener) {\n if (typeof listener !== \"function\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(4) : `Expected the listener to be a function. Instead, received: '${kindOf(listener)}'`);\n }\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(5) : \"You may not call store.subscribe() while the reducer is executing. If you would like to be notified after the store has been updated, subscribe from a component and invoke store.getState() in the callback to access the latest state. See https://redux.js.org/api/store#subscribelistener for more details.\");\n }\n let isSubscribed = true;\n ensureCanMutateNextListeners();\n const listenerId = listenerIdCounter++;\n nextListeners.set(listenerId, listener);\n return function unsubscribe() {\n if (!isSubscribed) {\n return;\n }\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(6) : \"You may not unsubscribe from a store listener while the reducer is executing. See https://redux.js.org/api/store#subscribelistener for more details.\");\n }\n isSubscribed = false;\n ensureCanMutateNextListeners();\n nextListeners.delete(listenerId);\n currentListeners = null;\n };\n }\n function dispatch(action) {\n if (!isPlainObject(action)) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(7) : `Actions must be plain objects. Instead, the actual type was: '${kindOf(action)}'. You may need to add middleware to your store setup to handle dispatching other values, such as 'redux-thunk' to handle dispatching functions. See https://redux.js.org/tutorials/fundamentals/part-4-store#middleware and https://redux.js.org/tutorials/fundamentals/part-6-async-logic#using-the-redux-thunk-middleware for examples.`);\n }\n if (typeof action.type === \"undefined\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(8) : 'Actions may not have an undefined \"type\" property. You may have misspelled an action type string constant.');\n }\n if (typeof action.type !== \"string\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(17) : `Action \"type\" property must be a string. Instead, the actual type was: '${kindOf(action.type)}'. Value was: '${action.type}' (stringified)`);\n }\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(9) : \"Reducers may not dispatch actions.\");\n }\n try {\n isDispatching = true;\n currentState = currentReducer(currentState, action);\n } finally {\n isDispatching = false;\n }\n const listeners = currentListeners = nextListeners;\n listeners.forEach((listener) => {\n listener();\n });\n return action;\n }\n function replaceReducer(nextReducer) {\n if (typeof nextReducer !== \"function\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(10) : `Expected the nextReducer to be a function. Instead, received: '${kindOf(nextReducer)}`);\n }\n currentReducer = nextReducer;\n dispatch({\n type: actionTypes_default.REPLACE\n });\n }\n function observable() {\n const outerSubscribe = subscribe;\n return {\n /**\n * The minimal observable subscription method.\n * @param observer Any object that can be used as an observer.\n * The observer object should have a `next` method.\n * @returns An object with an `unsubscribe` method that can\n * be used to unsubscribe the observable from the store, and prevent further\n * emission of values from the observable.\n */\n subscribe(observer) {\n if (typeof observer !== \"object\" || observer === null) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(11) : `Expected the observer to be an object. Instead, received: '${kindOf(observer)}'`);\n }\n function observeState() {\n const observerAsObserver = observer;\n if (observerAsObserver.next) {\n observerAsObserver.next(getState());\n }\n }\n observeState();\n const unsubscribe = outerSubscribe(observeState);\n return {\n unsubscribe\n };\n },\n [symbol_observable_default]() {\n return this;\n }\n };\n }\n dispatch({\n type: actionTypes_default.INIT\n });\n const store = {\n dispatch,\n subscribe,\n getState,\n replaceReducer,\n [symbol_observable_default]: observable\n };\n return store;\n}\nfunction legacy_createStore(reducer, preloadedState, enhancer) {\n return createStore(reducer, preloadedState, enhancer);\n}\n\n// src/utils/warning.ts\nfunction warning(message) {\n if (typeof console !== \"undefined\" && typeof console.error === \"function\") {\n console.error(message);\n }\n try {\n throw new Error(message);\n } catch (e) {\n }\n}\n\n// src/combineReducers.ts\nfunction getUnexpectedStateShapeWarningMessage(inputState, reducers, action, unexpectedKeyCache) {\n const reducerKeys = Object.keys(reducers);\n const argumentName = action && action.type === actionTypes_default.INIT ? \"preloadedState argument passed to createStore\" : \"previous state received by the reducer\";\n if (reducerKeys.length === 0) {\n return \"Store does not have a valid reducer. Make sure the argument passed to combineReducers is an object whose values are reducers.\";\n }\n if (!isPlainObject(inputState)) {\n return `The ${argumentName} has unexpected type of \"${kindOf(inputState)}\". Expected argument to be an object with the following keys: \"${reducerKeys.join('\", \"')}\"`;\n }\n const unexpectedKeys = Object.keys(inputState).filter((key) => !reducers.hasOwnProperty(key) && !unexpectedKeyCache[key]);\n unexpectedKeys.forEach((key) => {\n unexpectedKeyCache[key] = true;\n });\n if (action && action.type === actionTypes_default.REPLACE)\n return;\n if (unexpectedKeys.length > 0) {\n return `Unexpected ${unexpectedKeys.length > 1 ? \"keys\" : \"key\"} \"${unexpectedKeys.join('\", \"')}\" found in ${argumentName}. Expected to find one of the known reducer keys instead: \"${reducerKeys.join('\", \"')}\". Unexpected keys will be ignored.`;\n }\n}\nfunction assertReducerShape(reducers) {\n Object.keys(reducers).forEach((key) => {\n const reducer = reducers[key];\n const initialState = reducer(void 0, {\n type: actionTypes_default.INIT\n });\n if (typeof initialState === \"undefined\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(12) : `The slice reducer for key \"${key}\" returned undefined during initialization. If the state passed to the reducer is undefined, you must explicitly return the initial state. The initial state may not be undefined. If you don't want to set a value for this reducer, you can use null instead of undefined.`);\n }\n if (typeof reducer(void 0, {\n type: actionTypes_default.PROBE_UNKNOWN_ACTION()\n }) === \"undefined\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(13) : `The slice reducer for key \"${key}\" returned undefined when probed with a random type. Don't try to handle '${actionTypes_default.INIT}' or other actions in \"redux/*\" namespace. They are considered private. Instead, you must return the current state for any unknown actions, unless it is undefined, in which case you must return the initial state, regardless of the action type. The initial state may not be undefined, but can be null.`);\n }\n });\n}\nfunction combineReducers(reducers) {\n const reducerKeys = Object.keys(reducers);\n const finalReducers = {};\n for (let i = 0; i < reducerKeys.length; i++) {\n const key = reducerKeys[i];\n if (process.env.NODE_ENV !== \"production\") {\n if (typeof reducers[key] === \"undefined\") {\n warning(`No reducer provided for key \"${key}\"`);\n }\n }\n if (typeof reducers[key] === \"function\") {\n finalReducers[key] = reducers[key];\n }\n }\n const finalReducerKeys = Object.keys(finalReducers);\n let unexpectedKeyCache;\n if (process.env.NODE_ENV !== \"production\") {\n unexpectedKeyCache = {};\n }\n let shapeAssertionError;\n try {\n assertReducerShape(finalReducers);\n } catch (e) {\n shapeAssertionError = e;\n }\n return function combination(state = {}, action) {\n if (shapeAssertionError) {\n throw shapeAssertionError;\n }\n if (process.env.NODE_ENV !== \"production\") {\n const warningMessage = getUnexpectedStateShapeWarningMessage(state, finalReducers, action, unexpectedKeyCache);\n if (warningMessage) {\n warning(warningMessage);\n }\n }\n let hasChanged = false;\n const nextState = {};\n for (let i = 0; i < finalReducerKeys.length; i++) {\n const key = finalReducerKeys[i];\n const reducer = finalReducers[key];\n const previousStateForKey = state[key];\n const nextStateForKey = reducer(previousStateForKey, action);\n if (typeof nextStateForKey === \"undefined\") {\n const actionType = action && action.type;\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(14) : `When called with an action of type ${actionType ? `\"${String(actionType)}\"` : \"(unknown type)\"}, the slice reducer for key \"${key}\" returned undefined. To ignore an action, you must explicitly return the previous state. If you want this reducer to hold no value, you can return null instead of undefined.`);\n }\n nextState[key] = nextStateForKey;\n hasChanged = hasChanged || nextStateForKey !== previousStateForKey;\n }\n hasChanged = hasChanged || finalReducerKeys.length !== Object.keys(state).length;\n return hasChanged ? nextState : state;\n };\n}\n\n// src/bindActionCreators.ts\nfunction bindActionCreator(actionCreator, dispatch) {\n return function(...args) {\n return dispatch(actionCreator.apply(this, args));\n };\n}\nfunction bindActionCreators(actionCreators, dispatch) {\n if (typeof actionCreators === \"function\") {\n return bindActionCreator(actionCreators, dispatch);\n }\n if (typeof actionCreators !== \"object\" || actionCreators === null) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(16) : `bindActionCreators expected an object or a function, but instead received: '${kindOf(actionCreators)}'. Did you write \"import ActionCreators from\" instead of \"import * as ActionCreators from\"?`);\n }\n const boundActionCreators = {};\n for (const key in actionCreators) {\n const actionCreator = actionCreators[key];\n if (typeof actionCreator === \"function\") {\n boundActionCreators[key] = bindActionCreator(actionCreator, dispatch);\n }\n }\n return boundActionCreators;\n}\n\n// src/compose.ts\nfunction compose(...funcs) {\n if (funcs.length === 0) {\n return (arg) => arg;\n }\n if (funcs.length === 1) {\n return funcs[0];\n }\n return funcs.reduce((a, b) => (...args) => a(b(...args)));\n}\n\n// src/applyMiddleware.ts\nfunction applyMiddleware(...middlewares) {\n return (createStore2) => (reducer, preloadedState) => {\n const store = createStore2(reducer, preloadedState);\n let dispatch = () => {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(15) : \"Dispatching while constructing your middleware is not allowed. Other middleware would not be applied to this dispatch.\");\n };\n const middlewareAPI = {\n getState: store.getState,\n dispatch: (action, ...args) => dispatch(action, ...args)\n };\n const chain = middlewares.map((middleware) => middleware(middlewareAPI));\n dispatch = compose(...chain)(store.dispatch);\n return {\n ...store,\n dispatch\n };\n };\n}\n\n// src/utils/isAction.ts\nfunction isAction(action) {\n return isPlainObject(action) && \"type\" in action && typeof action.type === \"string\";\n}\nexport {\n actionTypes_default as __DO_NOT_USE__ActionTypes,\n applyMiddleware,\n bindActionCreators,\n combineReducers,\n compose,\n createStore,\n isAction,\n isPlainObject,\n legacy_createStore\n};\n//# sourceMappingURL=redux.mjs.map","import { initialState } from \"./initial\";\n/* Reducer */\nexport function reducer(state = initialState().nodes.drag, action) {\n switch (action.type) {\n case \"DND_DRAG_START\":\n return Object.assign(Object.assign({}, state), { id: action.id, selectedIds: action.dragIds });\n case \"DND_DRAG_END\":\n return Object.assign(Object.assign({}, state), { id: null, destinationParentId: null, destinationIndex: null, selectedIds: [] });\n case \"DND_HOVERING\":\n if (action.parentId !== state.destinationParentId ||\n action.index != state.destinationIndex) {\n return Object.assign(Object.assign({}, state), { destinationParentId: action.parentId, destinationIndex: action.index });\n }\n else {\n return state;\n }\n default:\n return state;\n }\n}\n","import { combineReducers } from \"redux\";\nimport { reducer as focus } from \"./focus-slice\";\nimport { reducer as edit } from \"./edit-slice\";\nimport { reducer as dnd } from \"./dnd-slice\";\nimport { reducer as selection } from \"./selection-slice\";\nimport { reducer as open } from \"./open-slice\";\nimport { reducer as drag } from \"./drag-slice\";\nexport const rootReducer = combineReducers({\n nodes: combineReducers({\n focus,\n edit,\n open,\n selection,\n drag,\n }),\n dnd,\n});\n","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { useEffect, useImperativeHandle, useMemo, useRef, } from \"react\";\nimport { useSyncExternalStore } from \"use-sync-external-store/shim\";\nimport { DataUpdatesContext, DndContext, NodesContext, TreeApiContext, } from \"../context\";\nimport { TreeApi } from \"../interfaces/tree-api\";\nimport { initialState } from \"../state/initial\";\nimport { rootReducer } from \"../state/root-reducer\";\nimport { HTML5Backend } from \"react-dnd-html5-backend\";\nimport { DndProvider } from \"react-dnd\";\nimport { createStore } from \"redux\";\nimport { actions as visibility } from \"../state/open-slice\";\nconst SERVER_STATE = initialState();\nexport function TreeProvider({ treeProps, imperativeHandle, children, }) {\n const list = useRef(null);\n const listEl = useRef(null);\n const store = useRef(\n // @ts-ignore\n createStore(rootReducer, initialState(treeProps)));\n const state = useSyncExternalStore(store.current.subscribe, store.current.getState, () => SERVER_STATE);\n /* The tree api object is stable. */\n const api = useMemo(() => {\n return new TreeApi(store.current, treeProps, list, listEl);\n }, []);\n /* Make sure the tree instance stays in sync */\n const updateCount = useRef(0);\n useMemo(() => {\n updateCount.current += 1;\n api.update(treeProps);\n }, [...Object.values(treeProps), state.nodes.open]);\n /* Expose the tree api */\n useImperativeHandle(imperativeHandle, () => api);\n /* Change selection based on props */\n useEffect(() => {\n if (api.props.selection) {\n api.select(api.props.selection, { focus: false });\n }\n else {\n api.deselectAll();\n }\n }, [api.props.selection]);\n /* Clear visability for filtered nodes */\n useEffect(() => {\n if (!api.props.searchTerm) {\n store.current.dispatch(visibility.clear(true));\n }\n }, [api.props.searchTerm]);\n return (_jsx(TreeApiContext.Provider, { value: api, children: _jsx(DataUpdatesContext.Provider, { value: updateCount.current, children: _jsx(NodesContext.Provider, { value: state.nodes, children: _jsx(DndContext.Provider, { value: state.dnd, children: _jsx(DndProvider, Object.assign({ backend: HTML5Backend, options: { rootElement: api.props.dndRootElement || undefined } }, (treeProps.dndManager && { manager: treeProps.dndManager }), { children: children })) }) }) }) }));\n}\n","import { useDrop } from \"react-dnd\";\nimport { useTreeApi } from \"../context\";\nimport { computeDrop } from \"./compute-drop\";\nimport { actions as dnd } from \"../state/dnd-slice\";\nexport function useOuterDrop() {\n const tree = useTreeApi();\n // In case we drop an item at the bottom of the list\n const [, drop] = useDrop(() => ({\n accept: \"NODE\",\n canDrop: (_item, m) => {\n if (!m.isOver({ shallow: true }))\n return false;\n return tree.canDrop();\n },\n hover: (_item, m) => {\n if (!m.isOver({ shallow: true }))\n return;\n const offset = m.getClientOffset();\n if (!tree.listEl.current || !offset)\n return;\n const { cursor, drop } = computeDrop({\n element: tree.listEl.current,\n offset: offset,\n indent: tree.indent,\n node: null,\n prevNode: tree.visibleNodes[tree.visibleNodes.length - 1],\n nextNode: null,\n });\n if (drop)\n tree.dispatch(dnd.hovering(drop.parentId, drop.index));\n if (m.canDrop()) {\n if (cursor)\n tree.showCursor(cursor);\n }\n else {\n tree.hideCursor();\n }\n },\n }), [tree]);\n drop(tree.listEl);\n}\n","import { useOuterDrop } from \"../dnd/outer-drop-hook\";\nexport function OuterDrop(props) {\n useOuterDrop();\n return props.children;\n}\n","import { jsx as _jsx, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { useTreeApi } from \"../context\";\nimport { DefaultContainer } from \"./default-container\";\nexport function TreeContainer() {\n const tree = useTreeApi();\n const Container = tree.props.renderContainer || DefaultContainer;\n return (_jsx(_Fragment, { children: _jsx(Container, {}) }));\n}\n","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { useDragLayer } from \"react-dnd\";\nimport { useTreeApi } from \"../context\";\nimport { DefaultDragPreview } from \"./default-drag-preview\";\nexport function DragPreviewContainer() {\n const tree = useTreeApi();\n const { offset, mouse, item, isDragging } = useDragLayer((m) => {\n return {\n offset: m.getSourceClientOffset(),\n mouse: m.getClientOffset(),\n item: m.getItem(),\n isDragging: m.isDragging(),\n };\n });\n const DragPreview = tree.props.renderDragPreview || DefaultDragPreview;\n return (_jsx(DragPreview, { offset: offset, mouse: mouse, id: (item === null || item === void 0 ? void 0 : item.id) || null, dragIds: (item === null || item === void 0 ? void 0 : item.dragIds) || [], isDragging: isDragging }));\n}\n","export class SimpleTree {\n constructor(data) {\n this.root = createRoot(data);\n }\n get data() {\n var _a, _b;\n return (_b = (_a = this.root.children) === null || _a === void 0 ? void 0 : _a.map((node) => node.data)) !== null && _b !== void 0 ? _b : [];\n }\n create(args) {\n const parent = args.parentId ? this.find(args.parentId) : this.root;\n if (!parent)\n return null;\n parent.addChild(args.data, args.index);\n }\n move(args) {\n const src = this.find(args.id);\n const parent = args.parentId ? this.find(args.parentId) : this.root;\n if (!src || !parent)\n return;\n parent.addChild(src.data, args.index);\n src.drop();\n }\n update(args) {\n const node = this.find(args.id);\n if (node)\n node.update(args.changes);\n }\n drop(args) {\n const node = this.find(args.id);\n if (node)\n node.drop();\n }\n find(id, node = this.root) {\n if (!node)\n return null;\n if (node.id === id)\n return node;\n if (node.children) {\n for (let child of node.children) {\n const found = this.find(id, child);\n if (found)\n return found;\n }\n return null;\n }\n return null;\n }\n}\nfunction createRoot(data) {\n const root = new SimpleNode({ id: \"ROOT\" }, null);\n root.children = data.map((d) => createNode(d, root));\n return root;\n}\nfunction createNode(data, parent) {\n const node = new SimpleNode(data, parent);\n if (data.children)\n node.children = data.children.map((d) => createNode(d, node));\n return node;\n}\nclass SimpleNode {\n constructor(data, parent) {\n this.data = data;\n this.parent = parent;\n this.id = data.id;\n }\n hasParent() {\n return !!this.parent;\n }\n get childIndex() {\n return this.hasParent() ? this.parent.children.indexOf(this) : -1;\n }\n addChild(data, index) {\n var _a, _b;\n const node = createNode(data, this);\n this.children = (_a = this.children) !== null && _a !== void 0 ? _a : [];\n this.children.splice(index, 0, node);\n this.data.children = (_b = this.data.children) !== null && _b !== void 0 ? _b : [];\n this.data.children.splice(index, 0, data);\n }\n removeChild(index) {\n var _a, _b;\n (_a = this.children) === null || _a === void 0 ? void 0 : _a.splice(index, 1);\n (_b = this.data.children) === null || _b === void 0 ? void 0 : _b.splice(index, 1);\n }\n update(changes) {\n if (this.hasParent()) {\n const i = this.childIndex;\n this.parent.addChild(Object.assign(Object.assign({}, this.data), changes), i);\n this.drop();\n }\n }\n drop() {\n if (this.hasParent())\n this.parent.removeChild(this.childIndex);\n }\n}\n","import { useMemo, useState } from \"react\";\nimport { SimpleTree } from \"../data/simple-tree\";\nlet nextId = 0;\nexport function useSimpleTree(initialData) {\n const [data, setData] = useState(initialData);\n const tree = useMemo(() => new SimpleTree(data), [data]);\n const onMove = (args) => {\n for (const id of args.dragIds) {\n tree.move({ id, parentId: args.parentId, index: args.index });\n }\n setData(tree.data);\n };\n const onRename = ({ name, id }) => {\n tree.update({ id, changes: { name } });\n setData(tree.data);\n };\n const onCreate = ({ parentId, index, type }) => {\n const data = { id: `simple-tree-id-${nextId++}`, name: \"\" };\n if (type === \"internal\")\n data.children = [];\n tree.create({ parentId, index, data });\n setData(tree.data);\n return data;\n };\n const onDelete = (args) => {\n args.ids.forEach((id) => tree.drop({ id }));\n setData(tree.data);\n };\n const controller = { onMove, onRename, onCreate, onDelete };\n return [data, controller];\n}\n","import { useSimpleTree } from \"./use-simple-tree\";\nexport function useValidatedProps(props) {\n if (props.initialData && props.data) {\n throw new Error(`React Arborist Tree => Provide either a data or initialData prop, but not both.`);\n }\n if (props.initialData &&\n (props.onCreate || props.onDelete || props.onMove || props.onRename)) {\n throw new Error(`React Arborist Tree => You passed the initialData prop along with a data handler.\nUse the data prop if you want to provide your own handlers.`);\n }\n if (props.initialData) {\n /**\n * Let's break the rules of hooks here. If the initialData prop\n * is provided, we will assume it will not change for the life of\n * the component.\n *\n * We will provide the real data and the handlers to update it.\n * */\n const [data, controller] = useSimpleTree(props.initialData);\n return Object.assign(Object.assign(Object.assign({}, props), controller), { data });\n }\n else {\n return props;\n }\n}\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { forwardRef } from \"react\";\nimport { TreeProvider } from \"./provider\";\nimport { OuterDrop } from \"./outer-drop\";\nimport { TreeContainer } from \"./tree-container\";\nimport { DragPreviewContainer } from \"./drag-preview-container\";\nimport { useValidatedProps } from \"../hooks/use-validated-props\";\nfunction TreeComponent(props, ref) {\n const treeProps = useValidatedProps(props);\n return (_jsxs(TreeProvider, { treeProps: treeProps, imperativeHandle: ref, children: [_jsx(OuterDrop, { children: _jsx(TreeContainer, {}) }), _jsx(DragPreviewContainer, {})] }));\n}\nexport const Tree = forwardRef(TreeComponent);\n","// src/hooks/useContainerHeight.ts\nimport { useRef, useEffect, useState } from \"react\";\nvar useContainerHeight = (initialHeight = 600) => {\n const containerRef = useRef(null);\n const [containerHeight, setContainerHeight] = useState(initialHeight);\n useEffect(() => {\n const updateHeight = () => {\n if (containerRef.current) {\n const height = containerRef.current.clientHeight;\n if (height > 0) {\n setContainerHeight(height);\n }\n }\n };\n updateHeight();\n window.addEventListener(\"resize\", updateHeight);\n return () => window.removeEventListener(\"resize\", updateHeight);\n }, []);\n return [containerRef, containerHeight];\n};\n// src/components/DirectoryFilterInput.tsx\nimport React, { useState as useState2, useCallback, useRef as useRef2, useEffect as useEffect2 } from \"react\";\nvar DirectoryFilterInput = ({\n fileTree,\n theme,\n filters = [],\n onFiltersChange,\n placeholder = \"Type to filter by directory path\"\n}) => {\n const [inputValue, setInputValue] = useState2(\"\");\n const [activeFilters, setActiveFilters] = useState2(filters);\n const [showDropdown, setShowDropdown] = useState2(false);\n const [selectedIndex, setSelectedIndex] = useState2(0);\n const [excludeMode, setExcludeMode] = useState2(false);\n const inputRef = useRef2(null);\n const getAllDirectories = useCallback(() => {\n if (!fileTree?.allDirectories)\n return [];\n const directories = new Set;\n fileTree.allDirectories.forEach((dir) => {\n directories.add(dir.relativePath);\n });\n return Array.from(directories).sort();\n }, [fileTree]);\n const getMatchingDirectories = useCallback(() => {\n if (!inputValue)\n return [];\n const allDirs = getAllDirectories();\n const lowerInput = inputValue.toLowerCase();\n return allDirs.filter((dir) => {\n const lowerDir = dir.toLowerCase();\n return lowerDir.includes(lowerInput) && lowerDir !== lowerInput;\n }).slice(0, 10);\n }, [inputValue, getAllDirectories]);\n const matchingDirectories = getMatchingDirectories();\n useEffect2(() => {\n setShowDropdown(inputValue.length > 0 && matchingDirectories.length > 0);\n setSelectedIndex(0);\n }, [inputValue, matchingDirectories.length]);\n const addFilter = useCallback((path, mode) => {\n const newFilter = {\n id: `filter-${Date.now()}-${Math.random()}`,\n path,\n mode\n };\n const updatedFilters = [...activeFilters, newFilter];\n setActiveFilters(updatedFilters);\n onFiltersChange?.(updatedFilters);\n setInputValue(\"\");\n setExcludeMode(false);\n }, [activeFilters, onFiltersChange]);\n const removeFilter = useCallback((filterId) => {\n const updatedFilters = activeFilters.filter((f) => f.id !== filterId);\n setActiveFilters(updatedFilters);\n onFiltersChange?.(updatedFilters);\n }, [activeFilters, onFiltersChange]);\n const toggleFilterMode = useCallback((filterId) => {\n const updatedFilters = activeFilters.map((f) => f.id === filterId ? { ...f, mode: f.mode === \"include\" ? \"exclude\" : \"include\" } : f);\n setActiveFilters(updatedFilters);\n onFiltersChange?.(updatedFilters);\n }, [activeFilters, onFiltersChange]);\n const getCommonPrefix = useCallback(() => {\n if (matchingDirectories.length === 0)\n return null;\n if (matchingDirectories.length === 1) {\n return matchingDirectories[0];\n }\n let commonPrefix = matchingDirectories[0];\n for (let i = 1;i < matchingDirectories.length; i++) {\n const current = matchingDirectories[i];\n let j = 0;\n while (j < commonPrefix.length && j < current.length && commonPrefix[j] === current[j]) {\n j++;\n }\n commonPrefix = commonPrefix.substring(0, j);\n }\n const lastSlash = commonPrefix.lastIndexOf(\"/\");\n if (lastSlash > inputValue.length - 1) {\n return commonPrefix.substring(0, lastSlash + 1);\n }\n return commonPrefix.length > inputValue.length ? commonPrefix : null;\n }, [matchingDirectories, inputValue]);\n const handleKeyDown = useCallback((e) => {\n switch (e.key) {\n case \"Tab\":\n if (showDropdown && matchingDirectories.length > 0) {\n e.preventDefault();\n const commonPrefix = getCommonPrefix();\n if (commonPrefix) {\n setInputValue(commonPrefix);\n }\n }\n break;\n case \"ArrowDown\":\n if (showDropdown && matchingDirectories.length > 0) {\n e.preventDefault();\n setSelectedIndex((prev) => prev < matchingDirectories.length - 1 ? prev + 1 : prev);\n }\n break;\n case \"ArrowUp\":\n if (showDropdown && matchingDirectories.length > 0) {\n e.preventDefault();\n setSelectedIndex((prev) => prev > 0 ? prev - 1 : prev);\n }\n break;\n case \"Enter\":\n e.preventDefault();\n if (showDropdown && matchingDirectories[selectedIndex]) {\n addFilter(matchingDirectories[selectedIndex], excludeMode ? \"exclude\" : \"include\");\n } else if (inputValue.trim()) {\n addFilter(inputValue.trim(), excludeMode ? \"exclude\" : \"include\");\n }\n setShowDropdown(false);\n break;\n case \"Escape\":\n if (showDropdown) {\n e.preventDefault();\n setShowDropdown(false);\n }\n break;\n }\n }, [showDropdown, matchingDirectories, selectedIndex, inputValue, excludeMode, addFilter, getCommonPrefix]);\n return /* @__PURE__ */ React.createElement(\"div\", null, /* @__PURE__ */ React.createElement(\"div\", {\n className: \"relative\"\n }, /* @__PURE__ */ React.createElement(\"div\", {\n className: \"flex items-center gap-2\"\n }, /* @__PURE__ */ React.createElement(\"input\", {\n ref: inputRef,\n type: \"text\",\n value: inputValue,\n onChange: (e) => setInputValue(e.target.value),\n onKeyDown: handleKeyDown,\n onFocus: () => setShowDropdown(inputValue.length > 0 && matchingDirectories.length > 0),\n placeholder,\n style: {\n flex: 1,\n padding: \"8px 12px\",\n fontSize: \"14px\",\n borderRadius: \"4px\",\n border: `1px solid ${showDropdown ? theme.colors.primary : theme.colors.border}`,\n backgroundColor: theme.colors.backgroundSecondary || theme.colors.background,\n color: theme.colors.text,\n outline: \"none\",\n transition: \"border-color 0.2s\"\n }\n }), inputValue && /* @__PURE__ */ React.createElement(\"button\", {\n onClick: () => setExcludeMode(!excludeMode),\n style: {\n padding: \"8px 12px\",\n fontSize: \"12px\",\n fontWeight: 500,\n borderRadius: \"4px\",\n border: `1px solid ${excludeMode ? theme.colors.primary : theme.colors.border}`,\n backgroundColor: excludeMode ? `${theme.colors.primary}20` : theme.colors.backgroundSecondary || theme.colors.background,\n color: excludeMode ? theme.colors.text : theme.colors.textSecondary,\n cursor: \"pointer\",\n transition: \"all 0.2s\"\n },\n title: excludeMode ? \"Excluding files in this directory\" : \"Including only files in this directory\"\n }, excludeMode ? \"Exclude\" : \"Include\")), showDropdown && matchingDirectories.length > 0 && /* @__PURE__ */ React.createElement(\"div\", {\n style: {\n position: \"absolute\",\n zIndex: 10,\n width: \"100%\",\n marginTop: \"4px\",\n borderRadius: \"4px\",\n border: `1px solid ${theme.colors.primary}`,\n backgroundColor: theme.colors.background,\n boxShadow: `0 4px 6px -1px ${theme.colors.border}40`,\n maxHeight: \"256px\",\n overflowY: \"auto\"\n }\n }, matchingDirectories.map((dir, index) => /* @__PURE__ */ React.createElement(\"div\", {\n key: dir,\n style: {\n padding: \"8px 12px\",\n cursor: \"pointer\",\n fontSize: \"14px\",\n backgroundColor: index === selectedIndex ? theme.colors.primary : \"transparent\",\n color: index === selectedIndex ? \"#ffffff\" : theme.colors.text || theme.colors.textSecondary,\n transition: \"background-color 0.15s, color 0.15s\",\n fontWeight: index === selectedIndex ? 500 : 400\n },\n onMouseEnter: () => setSelectedIndex(index),\n onClick: () => {\n addFilter(dir, excludeMode ? \"exclude\" : \"include\");\n setShowDropdown(false);\n }\n }, dir)))), activeFilters.length > 0 && /* @__PURE__ */ React.createElement(\"div\", {\n style: { marginTop: \"8px\", display: \"flex\", flexWrap: \"wrap\", gap: \"8px\" }\n }, activeFilters.map((filter) => /* @__PURE__ */ React.createElement(\"div\", {\n key: filter.id,\n style: {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"4px\",\n padding: \"4px 8px\",\n borderRadius: \"4px\",\n fontSize: \"12px\",\n backgroundColor: filter.mode === \"include\" ? `${theme.colors.primary}20` : `${theme.colors.error}20`,\n border: `1px solid ${filter.mode === \"include\" ? theme.colors.primary : theme.colors.error}`,\n color: theme.colors.text\n }\n }, /* @__PURE__ */ React.createElement(\"span\", {\n onClick: () => toggleFilterMode(filter.id),\n style: {\n cursor: \"pointer\",\n userSelect: \"none\"\n },\n title: \"Click to toggle include/exclude\"\n }, filter.mode === \"include\" ? \"✓\" : \"✗\", \" \", filter.path), /* @__PURE__ */ React.createElement(\"button\", {\n onClick: () => removeFilter(filter.id),\n style: {\n marginLeft: \"4px\",\n background: \"none\",\n border: \"none\",\n color: theme.colors.textSecondary,\n cursor: \"pointer\",\n padding: 0,\n fontSize: \"14px\"\n },\n title: \"Remove filter\"\n }, \"×\")))));\n};\n// src/components/TreeNode.tsx\nimport { ChevronRight, ChevronDown } from \"lucide-react\";\nimport React2, { useState as useState3 } from \"react\";\nfunction TreeNode({\n node,\n style,\n dragHandle,\n theme,\n rightContent,\n extraContent,\n isSelectedDirectory = false,\n nameColor,\n horizontalNodePadding = \"8px\",\n onContextMenu\n}) {\n const [isHovered, setIsHovered] = useState3(false);\n const isFolder = node.isInternal;\n const caret = isFolder ? /* @__PURE__ */ React2.createElement(\"span\", {\n style: { marginRight: \"4px\", display: \"flex\", alignItems: \"center\" }\n }, node.isOpen ? /* @__PURE__ */ React2.createElement(ChevronDown, {\n size: 16,\n color: theme.colors.text\n }) : /* @__PURE__ */ React2.createElement(ChevronRight, {\n size: 16,\n color: theme.colors.text\n })) : null;\n const backgroundColor = node.isSelected ? `${theme.colors.primary}20` : isSelectedDirectory ? `${theme.colors.primary}15` : isHovered ? `${theme.colors.text}10` : \"transparent\";\n const border = node.isSelected ? `1px solid ${theme.colors.primary}` : \"1px solid transparent\";\n const color = nameColor ? nameColor : node.isSelected || isSelectedDirectory ? theme.colors.primary : theme.colors.text;\n return /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n ...style,\n backgroundColor,\n border,\n color,\n cursor: \"pointer\",\n paddingLeft: `calc(${horizontalNodePadding} + ${node.level * 16}px)`,\n paddingRight: horizontalNodePadding,\n paddingTop: \"3px\",\n paddingBottom: \"3px\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n boxSizing: \"border-box\",\n lineHeight: \"20px\"\n },\n ref: dragHandle,\n onClick: () => node.isInternal ? node.toggle() : node.select(),\n onContextMenu: (e) => {\n if (onContextMenu) {\n e.preventDefault();\n onContextMenu(e, node);\n }\n },\n onMouseEnter: () => setIsHovered(true),\n onMouseLeave: () => setIsHovered(false)\n }, /* @__PURE__ */ React2.createElement(\"div\", {\n style: { display: \"flex\", alignItems: \"center\", minWidth: 0, flex: 1 }\n }, caret, /* @__PURE__ */ React2.createElement(\"span\", {\n style: {\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n overflowWrap: \"normal\",\n wordBreak: \"normal\"\n }\n }, node.data.name), extraContent), rightContent && /* @__PURE__ */ React2.createElement(\"div\", {\n style: { flexShrink: 0 }\n }, rightContent));\n}\n// src/components/DynamicFileTree.tsx\nimport React3, { useMemo } from \"react\";\nimport { Tree } from \"react-arborist\";\nvar sortNodes = (a, b) => {\n const aIsDir = !!a.children;\n const bIsDir = !!b.children;\n if (aIsDir && !bIsDir)\n return -1;\n if (!aIsDir && bIsDir)\n return 1;\n return a.name.localeCompare(b.name, undefined, { sensitivity: \"base\" });\n};\nvar transformFileTree = (fileTree) => {\n const transformNode = (node, parentId) => {\n const id = parentId ? `${parentId}/${node.name}` : node.name;\n const arborNode = {\n id,\n name: node.name\n };\n if (\"children\" in node && node.children) {\n arborNode.children = node.children.map((child) => transformNode(child, id)).sort(sortNodes);\n }\n return arborNode;\n };\n return fileTree.root.children.map((node) => transformNode(node, \"\")).sort(sortNodes);\n};\nvar filterFileTreeNodes = (nodes, selectedDirs, pathPrefix = \"\") => {\n if (selectedDirs.size === 0)\n return nodes;\n const result = [];\n for (const node of nodes) {\n const currentPath = pathPrefix ? `${pathPrefix}/${node.name}` : node.name;\n const isSelected = selectedDirs.has(currentPath);\n const isAncestor = Array.from(selectedDirs).some((sel) => sel.startsWith(`${currentPath}/`));\n const isDescendant = Array.from(selectedDirs).some((sel) => currentPath.startsWith(`${sel}/`));\n if (\"children\" in node && node.children) {\n if (isSelected || isDescendant) {\n result.push(node);\n } else if (isAncestor) {\n const filteredChildren = filterFileTreeNodes(node.children, selectedDirs, currentPath);\n if (filteredChildren.length > 0) {\n result.push({ ...node, children: filteredChildren });\n }\n }\n } else {\n if (isDescendant) {\n result.push(node);\n }\n }\n }\n return result;\n};\nvar countVisibleNodes = (nodes, defaultOpen, initialOpenState) => {\n let count = 0;\n const countNode = (node) => {\n count++;\n if (node.children && node.children.length > 0) {\n const isOpen = initialOpenState !== undefined ? initialOpenState[node.id] ?? defaultOpen : defaultOpen;\n if (isOpen) {\n node.children.forEach(countNode);\n }\n }\n };\n nodes.forEach(countNode);\n return count;\n};\nvar DynamicFileTree = ({\n fileTree,\n theme,\n selectedDirectories = [],\n selectedFile,\n onDirectorySelect,\n onFileSelect,\n initialOpenState,\n defaultOpen = false,\n horizontalNodePadding,\n onContextMenu,\n initialHeight = 600,\n autoHeight = false\n}) => {\n const NodeRenderer = (props) => {\n const nodePath = props.node.data.id;\n const isSelectedOrChild = selectedDirectories.some((selectedDir) => {\n if (nodePath === selectedDir)\n return true;\n return nodePath.startsWith(selectedDir + \"/\");\n });\n return /* @__PURE__ */ React3.createElement(TreeNode, {\n ...props,\n theme,\n isSelectedDirectory: isSelectedOrChild,\n horizontalNodePadding,\n onContextMenu: (e, node) => {\n if (onContextMenu) {\n onContextMenu(e, node.data.id, !!node.data.children);\n }\n }\n });\n };\n const treeData = useMemo(() => {\n if (!selectedDirectories || selectedDirectories.length === 0) {\n return transformFileTree(fileTree);\n }\n const selectedDirsSet = new Set(selectedDirectories);\n const filteredNodes = filterFileTreeNodes(fileTree.root.children, selectedDirsSet);\n const filteredFileTree = {\n ...fileTree,\n root: { ...fileTree.root, children: filteredNodes }\n };\n return transformFileTree(filteredFileTree);\n }, [fileTree, selectedDirectories]);\n const handleSelect = (selectedNodes) => {\n const selectedFiles = selectedNodes.filter((node) => !node.data.children).map((node) => node.data.id);\n const selectedDirs = selectedNodes.filter((node) => node.data.children).map((node) => node.data.id);\n if (onFileSelect && selectedFiles.length > 0) {\n onFileSelect(selectedFiles[0]);\n }\n if (onDirectorySelect) {\n onDirectorySelect(selectedDirs);\n }\n };\n const calculatedHeight = useMemo(() => {\n if (autoHeight) {\n const visibleNodeCount = countVisibleNodes(treeData, defaultOpen, initialOpenState);\n const rowHeight = 28;\n return visibleNodeCount * rowHeight;\n }\n return initialHeight;\n }, [autoHeight, treeData, defaultOpen, initialOpenState, initialHeight]);\n const [containerRef, containerHeight] = useContainerHeight(calculatedHeight);\n return /* @__PURE__ */ React3.createElement(\"div\", {\n ref: containerRef,\n style: {\n backgroundColor: theme.colors.background,\n color: theme.colors.text,\n fontFamily: theme.fonts.body,\n ...autoHeight ? {} : { height: \"100%\" }\n }\n }, /* @__PURE__ */ React3.createElement(Tree, {\n initialData: treeData,\n onSelect: handleSelect,\n openByDefault: defaultOpen,\n ...initialOpenState !== undefined && { initialOpenState },\n ...selectedFile !== undefined && { selection: selectedFile },\n width: \"100%\",\n height: containerHeight,\n rowHeight: 28\n }, NodeRenderer));\n};\n// src/components/OrderedFileList.tsx\nimport React4, { useMemo as useMemo2 } from \"react\";\nvar OrderedFileList = ({\n fileTree,\n theme,\n onFileSelect,\n padding = \"8px\",\n selectedFile,\n sortBy = \"lastModified\",\n sortOrder = \"desc\",\n onContextMenu\n}) => {\n const [containerRef, containerHeight] = useContainerHeight();\n const sortedFiles = useMemo2(() => {\n const files = [...fileTree.allFiles];\n files.sort((a, b) => {\n let comparison = 0;\n switch (sortBy) {\n case \"lastModified\": {\n const timeA = new Date(a.lastModified).getTime();\n const timeB = new Date(b.lastModified).getTime();\n comparison = timeB - timeA;\n break;\n }\n case \"size\": {\n comparison = b.size - a.size;\n break;\n }\n case \"name\": {\n comparison = a.name.localeCompare(b.name, undefined, { sensitivity: \"base\" });\n break;\n }\n }\n return sortOrder === \"asc\" ? -comparison : comparison;\n });\n return files;\n }, [fileTree.allFiles, sortBy, sortOrder]);\n const formatDate = (date) => {\n const now = new Date;\n const fileDate = new Date(date);\n const diffMs = now.getTime() - fileDate.getTime();\n const diffMins = Math.floor(diffMs / 60000);\n const diffHours = Math.floor(diffMs / 3600000);\n const diffDays = Math.floor(diffMs / 86400000);\n if (diffMins < 1)\n return \"Just now\";\n if (diffMins < 60)\n return `${diffMins}m ago`;\n if (diffHours < 24)\n return `${diffHours}h ago`;\n if (diffDays < 7)\n return `${diffDays}d ago`;\n return fileDate.toLocaleDateString(undefined, {\n month: \"short\",\n day: \"numeric\",\n year: fileDate.getFullYear() !== now.getFullYear() ? \"numeric\" : undefined\n });\n };\n const formatSize = (bytes) => {\n if (bytes === 0)\n return \"0 B\";\n const k = 1024;\n const sizes = [\"B\", \"KB\", \"MB\", \"GB\"];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return `${parseFloat((bytes / Math.pow(k, i)).toFixed(1))} ${sizes[i]}`;\n };\n const handleFileClick = (file) => {\n if (onFileSelect) {\n onFileSelect(file.relativePath);\n }\n };\n const handleContextMenu = (event, file) => {\n if (onContextMenu) {\n event.preventDefault();\n onContextMenu(event, file.relativePath);\n }\n };\n return /* @__PURE__ */ React4.createElement(\"div\", {\n ref: containerRef,\n style: {\n backgroundColor: theme.colors.background,\n color: theme.colors.text,\n fontFamily: theme.fonts.body,\n height: \"100%\",\n overflow: \"auto\",\n padding\n }\n }, /* @__PURE__ */ React4.createElement(\"div\", {\n style: {\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"2px\"\n }\n }, sortedFiles.map((file) => {\n const isSelected = selectedFile === file.relativePath;\n return /* @__PURE__ */ React4.createElement(\"div\", {\n key: file.relativePath,\n onClick: () => handleFileClick(file),\n onContextMenu: (e) => handleContextMenu(e, file),\n style: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n padding: \"8px 12px\",\n borderRadius: \"4px\",\n cursor: \"pointer\",\n backgroundColor: isSelected ? theme.colors.primary + \"20\" : \"transparent\",\n border: isSelected ? `1px solid ${theme.colors.primary}` : \"1px solid transparent\",\n transition: \"all 0.15s ease\"\n },\n onMouseEnter: (e) => {\n if (!isSelected) {\n e.currentTarget.style.backgroundColor = theme.colors.primary + \"10\";\n }\n },\n onMouseLeave: (e) => {\n if (!isSelected) {\n e.currentTarget.style.backgroundColor = \"transparent\";\n }\n }\n }, /* @__PURE__ */ React4.createElement(\"div\", {\n style: {\n display: \"flex\",\n flexDirection: \"column\",\n flex: 1,\n minWidth: 0\n }\n }, /* @__PURE__ */ React4.createElement(\"div\", {\n style: {\n fontSize: \"14px\",\n fontWeight: isSelected ? 500 : 400,\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\"\n },\n title: file.relativePath\n }, file.name), /* @__PURE__ */ React4.createElement(\"div\", {\n style: {\n fontSize: \"12px\",\n color: theme.colors.secondary || theme.colors.text + \"99\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\"\n },\n title: file.relativePath\n }, file.relativePath)), /* @__PURE__ */ React4.createElement(\"div\", {\n style: {\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"flex-end\",\n fontSize: \"12px\",\n color: theme.colors.secondary || theme.colors.text + \"99\",\n marginLeft: \"16px\",\n flexShrink: 0\n }\n }, /* @__PURE__ */ React4.createElement(\"div\", null, formatDate(file.lastModified)), /* @__PURE__ */ React4.createElement(\"div\", null, formatSize(file.size))));\n })), sortedFiles.length === 0 && /* @__PURE__ */ React4.createElement(\"div\", {\n style: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n height: containerHeight,\n color: theme.colors.secondary || theme.colors.text + \"99\",\n fontSize: \"14px\"\n }\n }, \"No files found\"));\n};\n// src/components/GitOrderedFileList.tsx\nimport {\n Plus,\n Minus,\n Edit,\n AlertCircle,\n GitBranch,\n FileQuestion\n} from \"lucide-react\";\nimport React5, { useMemo as useMemo3 } from \"react\";\nvar getGitStatusDisplay = (status, theme) => {\n switch (status) {\n case \"M\":\n case \"MM\":\n return {\n icon: /* @__PURE__ */ React5.createElement(Edit, {\n size: 14\n }),\n color: theme.colors.primary || \"#007bff\",\n label: \"Modified\",\n priority: 2\n };\n case \"A\":\n return {\n icon: /* @__PURE__ */ React5.createElement(Plus, {\n size: 14\n }),\n color: \"#28a745\",\n label: \"Added\",\n priority: 1\n };\n case \"D\":\n return {\n icon: /* @__PURE__ */ React5.createElement(Minus, {\n size: 14\n }),\n color: \"#dc3545\",\n label: \"Deleted\",\n priority: 3\n };\n case \"R\":\n return {\n icon: /* @__PURE__ */ React5.createElement(GitBranch, {\n size: 14\n }),\n color: \"#6f42c1\",\n label: \"Renamed\",\n priority: 4\n };\n case \"C\":\n return {\n icon: /* @__PURE__ */ React5.createElement(GitBranch, {\n size: 14\n }),\n color: \"#20c997\",\n label: \"Copied\",\n priority: 5\n };\n case \"U\":\n return {\n icon: /* @__PURE__ */ React5.createElement(AlertCircle, {\n size: 14\n }),\n color: \"#fd7e14\",\n label: \"Unmerged\",\n priority: 0\n };\n case \"??\":\n return {\n icon: /* @__PURE__ */ React5.createElement(FileQuestion, {\n size: 14\n }),\n color: \"#6c757d\",\n label: \"Untracked\",\n priority: 6\n };\n case \"AM\":\n return {\n icon: /* @__PURE__ */ React5.createElement(Plus, {\n size: 14\n }),\n color: \"#17a2b8\",\n label: \"Added & Modified\",\n priority: 1\n };\n default:\n return null;\n }\n};\nvar GitOrderedFileList = ({\n fileTree,\n theme,\n gitStatusData,\n onFileSelect,\n padding = \"8px\",\n selectedFile,\n sortBy = \"lastModified\",\n sortOrder = \"desc\",\n showOnlyChanged = false,\n onContextMenu\n}) => {\n const [containerRef, containerHeight] = useContainerHeight();\n const gitStatusMap = useMemo3(() => {\n const map = new Map;\n gitStatusData.forEach((item) => {\n map.set(item.filePath, item.status);\n });\n return map;\n }, [gitStatusData]);\n const filesWithGitStatus = useMemo3(() => {\n const enhanced = fileTree.allFiles.map((file) => ({\n ...file,\n gitStatus: gitStatusMap.get(file.relativePath)\n }));\n if (showOnlyChanged) {\n return enhanced.filter((file) => file.gitStatus && file.gitStatus !== null);\n }\n return enhanced;\n }, [fileTree.allFiles, gitStatusMap, showOnlyChanged]);\n const sortedFiles = useMemo3(() => {\n const files = [...filesWithGitStatus];\n files.sort((a, b) => {\n let comparison = 0;\n switch (sortBy) {\n case \"lastModified\": {\n const timeA = new Date(a.lastModified).getTime();\n const timeB = new Date(b.lastModified).getTime();\n comparison = timeB - timeA;\n break;\n }\n case \"size\": {\n comparison = b.size - a.size;\n break;\n }\n case \"name\": {\n comparison = a.name.localeCompare(b.name, undefined, { sensitivity: \"base\" });\n break;\n }\n case \"gitStatus\": {\n const aDisplay = a.gitStatus ? getGitStatusDisplay(a.gitStatus, theme) : null;\n const bDisplay = b.gitStatus ? getGitStatusDisplay(b.gitStatus, theme) : null;\n const aPriority = aDisplay?.priority ?? 999;\n const bPriority = bDisplay?.priority ?? 999;\n comparison = aPriority - bPriority;\n break;\n }\n }\n return sortOrder === \"asc\" ? -comparison : comparison;\n });\n return files;\n }, [filesWithGitStatus, sortBy, sortOrder, theme]);\n const formatDate = (date) => {\n const now = new Date;\n const fileDate = new Date(date);\n const diffMs = now.getTime() - fileDate.getTime();\n const diffMins = Math.floor(diffMs / 60000);\n const diffHours = Math.floor(diffMs / 3600000);\n const diffDays = Math.floor(diffMs / 86400000);\n if (diffMins < 1)\n return \"Just now\";\n if (diffMins < 60)\n return `${diffMins}m ago`;\n if (diffHours < 24)\n return `${diffHours}h ago`;\n if (diffDays < 7)\n return `${diffDays}d ago`;\n return fileDate.toLocaleDateString(undefined, {\n month: \"short\",\n day: \"numeric\",\n year: fileDate.getFullYear() !== now.getFullYear() ? \"numeric\" : undefined\n });\n };\n const formatSize = (bytes) => {\n if (bytes === 0)\n return \"0 B\";\n const k = 1024;\n const sizes = [\"B\", \"KB\", \"MB\", \"GB\"];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return `${parseFloat((bytes / Math.pow(k, i)).toFixed(1))} ${sizes[i]}`;\n };\n const handleFileClick = (file) => {\n if (onFileSelect) {\n onFileSelect(file.relativePath);\n }\n };\n const handleContextMenu = (event, file) => {\n if (onContextMenu) {\n event.preventDefault();\n onContextMenu(event, file.relativePath);\n }\n };\n return /* @__PURE__ */ React5.createElement(\"div\", {\n ref: containerRef,\n style: {\n backgroundColor: theme.colors.background,\n color: theme.colors.text,\n fontFamily: theme.fonts.body,\n height: \"100%\",\n overflow: \"auto\",\n padding\n }\n }, /* @__PURE__ */ React5.createElement(\"div\", {\n style: {\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"2px\"\n }\n }, sortedFiles.map((file) => {\n const isSelected = selectedFile === file.relativePath;\n const gitDisplay = file.gitStatus ? getGitStatusDisplay(file.gitStatus, theme) : null;\n return /* @__PURE__ */ React5.createElement(\"div\", {\n key: file.relativePath,\n onClick: () => handleFileClick(file),\n onContextMenu: (e) => handleContextMenu(e, file),\n style: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n padding: \"8px 12px\",\n borderRadius: \"4px\",\n cursor: \"pointer\",\n backgroundColor: isSelected ? theme.colors.primary + \"20\" : \"transparent\",\n border: isSelected ? `1px solid ${theme.colors.primary}` : \"1px solid transparent\",\n transition: \"all 0.15s ease\"\n },\n onMouseEnter: (e) => {\n if (!isSelected) {\n e.currentTarget.style.backgroundColor = theme.colors.primary + \"10\";\n }\n },\n onMouseLeave: (e) => {\n if (!isSelected) {\n e.currentTarget.style.backgroundColor = \"transparent\";\n }\n }\n }, /* @__PURE__ */ React5.createElement(\"div\", {\n style: {\n display: \"flex\",\n alignItems: \"center\",\n flex: 1,\n minWidth: 0,\n gap: \"8px\"\n }\n }, gitDisplay && /* @__PURE__ */ React5.createElement(\"div\", {\n style: {\n display: \"flex\",\n alignItems: \"center\",\n color: gitDisplay.color,\n flexShrink: 0\n },\n title: gitDisplay.label\n }, gitDisplay.icon), /* @__PURE__ */ React5.createElement(\"div\", {\n style: {\n display: \"flex\",\n flexDirection: \"column\",\n flex: 1,\n minWidth: 0\n }\n }, /* @__PURE__ */ React5.createElement(\"div\", {\n style: {\n fontSize: \"14px\",\n fontWeight: isSelected ? 500 : 400,\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n color: gitDisplay?.color || theme.colors.text\n },\n title: file.relativePath\n }, file.name), /* @__PURE__ */ React5.createElement(\"div\", {\n style: {\n fontSize: \"12px\",\n color: theme.colors.secondary || theme.colors.text + \"99\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\"\n },\n title: file.relativePath\n }, file.relativePath))), /* @__PURE__ */ React5.createElement(\"div\", {\n style: {\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"flex-end\",\n fontSize: \"12px\",\n color: theme.colors.secondary || theme.colors.text + \"99\",\n marginLeft: \"16px\",\n flexShrink: 0\n }\n }, /* @__PURE__ */ React5.createElement(\"div\", null, formatDate(file.lastModified)), /* @__PURE__ */ React5.createElement(\"div\", null, formatSize(file.size))));\n })), sortedFiles.length === 0 && /* @__PURE__ */ React5.createElement(\"div\", {\n style: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n height: containerHeight,\n color: theme.colors.secondary || theme.colors.text + \"99\",\n fontSize: \"14px\"\n }\n }, showOnlyChanged ? \"No changed files\" : \"No files found\"));\n};\n// src/components/FileTreeContainer.tsx\nimport React6, { useState as useState4, useMemo as useMemo4 } from \"react\";\nvar FileTreeContainer = ({\n fileTree,\n theme,\n selectedFile,\n onFileSelect,\n onContextMenu\n}) => {\n const [filters, setFilters] = useState4([]);\n const selectedDirectories = useMemo4(() => {\n return filters.filter((f) => f.mode === \"include\").map((f) => f.path);\n }, [filters]);\n return /* @__PURE__ */ React6.createElement(\"div\", {\n style: { display: \"flex\", flexDirection: \"column\", height: \"100%\" }\n }, /* @__PURE__ */ React6.createElement(DirectoryFilterInput, {\n fileTree,\n theme,\n filters,\n onFiltersChange: setFilters\n }), /* @__PURE__ */ React6.createElement(\"div\", {\n style: { flex: 1, marginTop: \"1rem\", overflow: \"hidden\" }\n }, /* @__PURE__ */ React6.createElement(DynamicFileTree, {\n fileTree,\n theme,\n selectedDirectories,\n selectedFile,\n onFileSelect,\n onContextMenu\n })));\n};\n// src/components/GitStatusFileTree.tsx\nimport {\n Plus as Plus2,\n Minus as Minus2,\n Edit as Edit2,\n AlertCircle as AlertCircle2,\n GitBranch as GitBranch2,\n FileQuestion as FileQuestion2\n} from \"lucide-react\";\nimport React7, { useMemo as useMemo5 } from \"react\";\nimport { Tree as Tree2 } from \"react-arborist\";\nvar getGitStatusDisplay2 = (status, theme) => {\n switch (status) {\n case \"M\":\n case \"MM\":\n return {\n icon: /* @__PURE__ */ React7.createElement(Edit2, {\n size: 14\n }),\n color: theme.colors.primary || \"#007bff\",\n label: \"Modified\"\n };\n case \"A\":\n return {\n icon: /* @__PURE__ */ React7.createElement(Plus2, {\n size: 14\n }),\n color: \"#28a745\",\n label: \"Added\"\n };\n case \"D\":\n return {\n icon: /* @__PURE__ */ React7.createElement(Minus2, {\n size: 14\n }),\n color: \"#dc3545\",\n label: \"Deleted\"\n };\n case \"R\":\n return {\n icon: /* @__PURE__ */ React7.createElement(GitBranch2, {\n size: 14\n }),\n color: \"#6f42c1\",\n label: \"Renamed\"\n };\n case \"C\":\n return {\n icon: /* @__PURE__ */ React7.createElement(GitBranch2, {\n size: 14\n }),\n color: \"#20c997\",\n label: \"Copied\"\n };\n case \"U\":\n return {\n icon: /* @__PURE__ */ React7.createElement(AlertCircle2, {\n size: 14\n }),\n color: \"#fd7e14\",\n label: \"Unmerged\"\n };\n case \"??\":\n return {\n icon: /* @__PURE__ */ React7.createElement(FileQuestion2, {\n size: 14\n }),\n color: \"#6c757d\",\n label: \"Untracked\"\n };\n case \"AM\":\n return {\n icon: /* @__PURE__ */ React7.createElement(Plus2, {\n size: 14\n }),\n color: \"#17a2b8\",\n label: \"Added & Modified\"\n };\n default:\n return null;\n }\n};\nvar sortGitNodes = (a, b) => {\n const aIsDir = !!a.children;\n const bIsDir = !!b.children;\n if (aIsDir && !bIsDir)\n return -1;\n if (!aIsDir && bIsDir)\n return 1;\n return a.name.localeCompare(b.name, undefined, { sensitivity: \"base\" });\n};\nvar transformGitFileTree = (fileTree, gitStatusMap) => {\n const transformNode = (node, parentId) => {\n const id = parentId ? `${parentId}/${node.name}` : node.name;\n const gitStatus = gitStatusMap.get(id);\n const arborNode = {\n id,\n name: node.name,\n gitStatus\n };\n if (\"children\" in node && node.children) {\n arborNode.children = node.children.map((child) => transformNode(child, id)).sort(sortGitNodes);\n if (arborNode.children) {\n const hasChangedChildren = arborNode.children.some((child) => child.gitStatus || child.hasChangedChildren);\n arborNode.hasChangedChildren = hasChangedChildren;\n }\n }\n return arborNode;\n };\n return fileTree.root.children.map((node) => transformNode(node, \"\")).sort(sortGitNodes);\n};\nvar filterGitStatusNodes = (nodes, showUnchangedFiles) => {\n if (showUnchangedFiles)\n return nodes;\n const result = [];\n for (const node of nodes) {\n if (node.children) {\n if (node.gitStatus || node.hasChangedChildren) {\n const filteredChildren = filterGitStatusNodes(node.children, showUnchangedFiles);\n result.push({ ...node, children: filteredChildren });\n }\n } else {\n if (node.gitStatus) {\n result.push(node);\n }\n }\n }\n return result;\n};\nvar countVisibleNodes2 = (nodes, openByDefault) => {\n let count = 0;\n const countNode = (node) => {\n count++;\n if (node.children && node.children.length > 0) {\n if (openByDefault) {\n node.children.forEach(countNode);\n }\n }\n };\n nodes.forEach(countNode);\n return count;\n};\nvar GitStatusFileTree = ({\n fileTree,\n theme,\n gitStatusData,\n selectedDirectories = [],\n selectedFile,\n onDirectorySelect,\n onFileSelect,\n showUnchangedFiles = true,\n transparentBackground = false,\n horizontalNodePadding,\n onContextMenu,\n openByDefault,\n initialHeight = 600,\n autoHeight = false\n}) => {\n const gitStatusMap = useMemo5(() => {\n const map = new Map;\n gitStatusData.forEach((item) => {\n map.set(item.filePath, item.status);\n });\n return map;\n }, [gitStatusData]);\n const NodeRenderer = (props) => {\n const { node } = props;\n const gitDisplay = node.data.gitStatus ? getGitStatusDisplay2(node.data.gitStatus, theme) : null;\n let nameColor;\n if (gitDisplay) {\n nameColor = gitDisplay.color;\n } else if (node.data.hasChangedChildren) {\n const baseColor = theme.colors.primary || \"#007bff\";\n nameColor = baseColor + \"80\";\n }\n const rightContent = gitDisplay ? /* @__PURE__ */ React7.createElement(\"div\", {\n style: {\n display: \"flex\",\n alignItems: \"center\",\n color: gitDisplay.color,\n marginRight: \"8px\"\n },\n title: gitDisplay.label\n }, gitDisplay.icon, /* @__PURE__ */ React7.createElement(\"span\", {\n style: {\n marginLeft: \"4px\",\n fontSize: \"12px\",\n fontWeight: \"bold\"\n }\n }, node.data.gitStatus)) : null;\n return /* @__PURE__ */ React7.createElement(TreeNode, {\n ...props,\n theme,\n rightContent,\n nameColor,\n horizontalNodePadding,\n onContextMenu: (e, node2) => {\n if (onContextMenu) {\n onContextMenu(e, node2.data.id, !!node2.data.children);\n }\n }\n });\n };\n const treeData = useMemo5(() => {\n let transformedData = transformGitFileTree(fileTree, gitStatusMap);\n if (!showUnchangedFiles) {\n transformedData = filterGitStatusNodes(transformedData, showUnchangedFiles);\n }\n if (selectedDirectories && selectedDirectories.length > 0) {}\n return transformedData;\n }, [fileTree, gitStatusMap, showUnchangedFiles, selectedDirectories]);\n const handleSelect = (selectedNodes) => {\n const selectedFiles = selectedNodes.filter((node) => !node.data.children).map((node) => node.data.id);\n const selectedDirs = selectedNodes.filter((node) => node.data.children).map((node) => node.data.id);\n if (onFileSelect && selectedFiles.length > 0) {\n onFileSelect(selectedFiles[0]);\n }\n if (onDirectorySelect) {\n onDirectorySelect(selectedDirs);\n }\n };\n const calculatedHeight = useMemo5(() => {\n if (autoHeight) {\n const visibleNodeCount = countVisibleNodes2(treeData, openByDefault ?? false);\n const rowHeight = 28;\n return visibleNodeCount * rowHeight;\n }\n return initialHeight;\n }, [autoHeight, treeData, openByDefault, initialHeight]);\n const [containerRef, containerHeight] = useContainerHeight(calculatedHeight);\n return /* @__PURE__ */ React7.createElement(\"div\", {\n ref: containerRef,\n style: {\n backgroundColor: transparentBackground ? \"transparent\" : theme.colors.background,\n color: theme.colors.text,\n fontFamily: theme.fonts.body,\n ...autoHeight ? {} : { height: \"100%\" }\n }\n }, /* @__PURE__ */ React7.createElement(Tree2, {\n initialData: treeData,\n onSelect: handleSelect,\n ...selectedFile !== undefined && { selection: selectedFile },\n ...openByDefault !== undefined && { openByDefault },\n width: \"100%\",\n height: containerHeight,\n rowHeight: 28\n }, NodeRenderer));\n};\n// src/components/GitStatusFileTreeContainer.tsx\nimport { RefreshCw, Eye, EyeOff, AlertCircle as AlertCircle3 } from \"lucide-react\";\nimport React8, { useState as useState5, useMemo as useMemo6 } from \"react\";\nvar GitStatusFileTreeContainer = ({\n fileTree,\n theme,\n gitStatusData,\n selectedFile,\n onFileSelect,\n onRefresh,\n isLoading = false,\n error = null,\n showControls = true,\n onContextMenu,\n initialHeight,\n autoHeight\n}) => {\n const [filters, setFilters] = useState5([]);\n const [showUnchangedFiles, setShowUnchangedFiles] = useState5(true);\n const selectedDirectories = useMemo6(() => {\n return filters.filter((f) => f.mode === \"include\").map((f) => f.path);\n }, [filters]);\n const changedFilesCount = gitStatusData.length;\n const hasChanges = changedFilesCount > 0;\n const handleRefresh = () => {\n onRefresh?.();\n };\n const toggleShowUnchangedFiles = () => {\n setShowUnchangedFiles(!showUnchangedFiles);\n };\n return /* @__PURE__ */ React8.createElement(\"div\", {\n style: { display: \"flex\", flexDirection: \"column\", height: \"100%\" }\n }, showControls && /* @__PURE__ */ React8.createElement(\"div\", {\n style: {\n padding: \"12px\",\n borderBottom: `1px solid ${theme.colors.border || \"#e0e0e0\"}`,\n backgroundColor: theme.colors.backgroundSecondary || theme.colors.background\n }\n }, /* @__PURE__ */ React8.createElement(\"div\", {\n style: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n marginBottom: \"8px\"\n }\n }, /* @__PURE__ */ React8.createElement(\"div\", {\n style: { display: \"flex\", alignItems: \"center\", gap: \"8px\" }\n }, /* @__PURE__ */ React8.createElement(\"h3\", {\n style: {\n margin: 0,\n fontSize: \"14px\",\n fontWeight: \"bold\",\n color: theme.colors.text\n }\n }, \"Git Status\"), hasChanges && /* @__PURE__ */ React8.createElement(\"span\", {\n style: {\n backgroundColor: theme.colors.primary,\n color: \"#ffffff\",\n padding: \"2px 8px\",\n borderRadius: \"12px\",\n fontSize: \"12px\",\n fontWeight: \"bold\"\n }\n }, changedFilesCount), isLoading && /* @__PURE__ */ React8.createElement(RefreshCw, {\n size: 16,\n color: theme.colors.text,\n className: \"git-status-spinner\"\n })), /* @__PURE__ */ React8.createElement(\"div\", {\n style: { display: \"flex\", gap: \"8px\" }\n }, /* @__PURE__ */ React8.createElement(\"button\", {\n onClick: toggleShowUnchangedFiles,\n style: {\n background: \"none\",\n border: `1px solid ${theme.colors.border || \"#ccc\"}`,\n borderRadius: \"4px\",\n padding: \"4px 8px\",\n cursor: \"pointer\",\n display: \"flex\",\n alignItems: \"center\",\n gap: \"4px\",\n fontSize: \"12px\",\n color: theme.colors.text\n },\n title: showUnchangedFiles ? \"Hide unchanged files\" : \"Show all files\"\n }, showUnchangedFiles ? /* @__PURE__ */ React8.createElement(EyeOff, {\n size: 14\n }) : /* @__PURE__ */ React8.createElement(Eye, {\n size: 14\n }), showUnchangedFiles ? \"Hide unchanged\" : \"Show all\"), /* @__PURE__ */ React8.createElement(\"button\", {\n onClick: handleRefresh,\n disabled: isLoading,\n style: {\n background: \"none\",\n border: `1px solid ${theme.colors.border || \"#ccc\"}`,\n borderRadius: \"4px\",\n padding: \"4px 8px\",\n cursor: isLoading ? \"not-allowed\" : \"pointer\",\n display: \"flex\",\n alignItems: \"center\",\n gap: \"4px\",\n fontSize: \"12px\",\n color: theme.colors.text,\n opacity: isLoading ? 0.6 : 1\n },\n title: \"Refresh git status\"\n }, /* @__PURE__ */ React8.createElement(RefreshCw, {\n size: 14\n }), \"Refresh\"))), error && /* @__PURE__ */ React8.createElement(\"div\", {\n style: {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n padding: \"8px\",\n backgroundColor: \"#fff3cd\",\n border: \"1px solid #ffeaa7\",\n borderRadius: \"4px\",\n fontSize: \"12px\",\n color: \"#856404\"\n }\n }, /* @__PURE__ */ React8.createElement(AlertCircle3, {\n size: 14\n }), error), !error && hasChanges && /* @__PURE__ */ React8.createElement(\"div\", {\n style: {\n fontSize: \"12px\",\n color: theme.colors.textSecondary || \"#666\",\n marginTop: \"4px\"\n }\n }, changedFilesCount, \" file\", changedFilesCount !== 1 ? \"s\" : \"\", \" with changes\")), /* @__PURE__ */ React8.createElement(DirectoryFilterInput, {\n fileTree,\n theme,\n filters,\n onFiltersChange: setFilters\n }), /* @__PURE__ */ React8.createElement(\"div\", {\n style: { flex: 1, marginTop: \"1rem\", overflow: \"hidden\" }\n }, /* @__PURE__ */ React8.createElement(GitStatusFileTree, {\n fileTree,\n theme,\n gitStatusData,\n selectedDirectories,\n selectedFile,\n onFileSelect,\n showUnchangedFiles,\n onContextMenu,\n initialHeight,\n autoHeight\n })));\n};\n// src/components/MultiFileTree/MultiFileTree.tsx\nimport React10, { useState as useState6, useMemo as useMemo8 } from \"react\";\n\n// src/utils/multiTree/pathUtils.ts\nfunction extractNameFromPath(path) {\n if (!path)\n return \"\";\n const parts = path.split(\"/\");\n return parts[parts.length - 1] || \"\";\n}\nfunction parseUnifiedPath(path) {\n const pathSegments = path.split(\"/\");\n const sourceName = pathSegments[0];\n const originalPath = pathSegments.slice(1).join(\"/\");\n return {\n sourceName,\n originalPath\n };\n}\nfunction updateTreePaths(node, prefix) {\n const originalPath = node.path || \"\";\n const updatedPath = `${prefix}/${originalPath}`;\n const updatedRelativePath = `${prefix}/${node.relativePath || originalPath}`;\n if (\"children\" in node) {\n const dirNode = node;\n const nodeName = dirNode.name || extractNameFromPath(originalPath);\n const updatedDir = {\n ...dirNode,\n path: updatedPath,\n name: nodeName,\n relativePath: updatedRelativePath,\n depth: (dirNode.depth || 0) + 1,\n children: (dirNode.children || []).map((child) => updateTreePaths(child, prefix))\n };\n return updatedDir;\n } else {\n const fileNode = node;\n const nodeName = fileNode.name || extractNameFromPath(originalPath);\n return {\n ...fileNode,\n path: updatedPath,\n name: nodeName,\n relativePath: updatedRelativePath\n };\n }\n}\n\n// src/utils/multiTree/combineRepositoryTrees.ts\nfunction combineRepositoryTrees(sources, options = {}) {\n const rootDirectoryName = options.rootDirectoryName || \"Repositories\";\n if (sources.length === 0) {\n return {\n sha: \"empty\",\n root: {\n path: \"\",\n name: rootDirectoryName,\n children: [],\n fileCount: 0,\n totalSize: 0,\n depth: 0,\n relativePath: \"\"\n },\n allFiles: [],\n allDirectories: [],\n stats: {\n totalFiles: 0,\n totalDirectories: 0,\n totalSize: 0,\n maxDepth: 0\n },\n metadata: {\n id: \"combined-tree\",\n timestamp: new Date,\n sourceType: \"combined\",\n sourceInfo: {}\n }\n };\n }\n const rootChildren = [];\n const allFiles = [];\n const allDirectories = [];\n let totalFileCount = 0;\n let totalDirectoryCount = 0;\n let totalSizeBytes = 0;\n let maxDepth = 0;\n const rootDir = {\n path: \"\",\n name: rootDirectoryName,\n children: [],\n fileCount: 0,\n totalSize: 0,\n depth: 0,\n relativePath: \"\"\n };\n sources.forEach((source) => {\n const sourceTree = source.tree;\n if (!sourceTree || !sourceTree.root) {\n return;\n }\n const sourceName = source.name || \"unknown-source\";\n const sourceDir = {\n path: sourceName,\n name: sourceName,\n children: sourceTree.root.children ? sourceTree.root.children.map((child) => {\n return updateTreePaths(child, sourceName);\n }) : [],\n fileCount: sourceTree.root.fileCount || 0,\n totalSize: sourceTree.root.totalSize || 0,\n depth: 1,\n relativePath: sourceName\n };\n rootChildren.push(sourceDir);\n allDirectories.push(sourceDir);\n if (sourceTree.allFiles) {\n sourceTree.allFiles.forEach((file) => {\n const updatedFile = {\n ...file,\n path: `${sourceName}/${file.path || \"\"}`,\n name: file.name || extractNameFromPath(file.path) || \"unknown\"\n };\n allFiles.push(updatedFile);\n });\n }\n if (sourceTree.allDirectories) {\n sourceTree.allDirectories.forEach((dir) => {\n const updatedDir = {\n ...dir,\n path: `${sourceName}/${dir.path || \"\"}`,\n name: dir.name || extractNameFromPath(dir.path) || \"unknown\"\n };\n allDirectories.push(updatedDir);\n });\n }\n if (sourceTree.stats) {\n totalFileCount += sourceTree.stats.totalFiles || 0;\n totalDirectoryCount += sourceTree.stats.totalDirectories || 0;\n totalSizeBytes += sourceTree.stats.totalSize || 0;\n maxDepth = Math.max(maxDepth, (sourceTree.stats.maxDepth || 0) + 1);\n }\n });\n rootDir.children = rootChildren;\n rootDir.fileCount = totalFileCount;\n rootDir.totalSize = totalSizeBytes;\n allDirectories.unshift(rootDir);\n return {\n sha: \"combined\",\n root: rootDir,\n allFiles,\n allDirectories,\n stats: {\n totalFiles: totalFileCount,\n totalDirectories: totalDirectoryCount + sources.length + 1,\n totalSize: totalSizeBytes,\n maxDepth: maxDepth + 1\n },\n metadata: {\n id: \"combined-tree\",\n timestamp: new Date,\n sourceType: \"combined\",\n sourceInfo: { sourceCount: sources.length }\n }\n };\n}\n// src/utils/multiTree/filterFileTree.ts\nfunction filterFileTreeByPaths(tree, selectedPaths) {\n if (selectedPaths.length === 0) {\n return tree;\n }\n const shouldIncludePath = (path) => {\n return selectedPaths.some((selectedPath) => path.startsWith(selectedPath) || selectedPath.startsWith(path));\n };\n const filterDirectory = (dir) => {\n if (!shouldIncludePath(dir.path)) {\n return null;\n }\n const filteredChildren = dir.children.map((child) => {\n if (\"children\" in child) {\n return filterDirectory(child);\n } else {\n return shouldIncludePath(child.path) ? child : null;\n }\n }).filter((child) => child !== null);\n if (filteredChildren.length === 0 && !selectedPaths.includes(dir.path)) {\n return null;\n }\n return {\n ...dir,\n children: filteredChildren,\n fileCount: filteredChildren.filter((c) => !(\"children\" in c)).length\n };\n };\n const filteredRoot = filterDirectory(tree.root);\n if (!filteredRoot) {\n return tree;\n }\n const allFiles = tree.allFiles.filter((f) => shouldIncludePath(f.path));\n const allDirectories = tree.allDirectories.filter((d) => shouldIncludePath(d.path));\n return {\n ...tree,\n root: filteredRoot,\n allFiles,\n allDirectories,\n stats: {\n ...tree.stats,\n totalFiles: allFiles.length,\n totalDirectories: allDirectories.length\n }\n };\n}\n// src/components/MultiFileTree/MultiFileTreeCore.tsx\nimport React9, { useMemo as useMemo7 } from \"react\";\nvar MultiFileTreeCore = ({\n sources,\n theme,\n selectedDirectories = [],\n viewMode = \"all\",\n onFileSelect,\n initialOpenState,\n defaultOpen = false,\n horizontalNodePadding\n}) => {\n const unifiedTree = useMemo7(() => {\n return combineRepositoryTrees(sources);\n }, [sources]);\n const displayTree = useMemo7(() => {\n if (viewMode === \"selected\" && selectedDirectories.length > 0) {\n return filterFileTreeByPaths(unifiedTree, selectedDirectories);\n }\n return unifiedTree;\n }, [unifiedTree, viewMode, selectedDirectories]);\n const handleFileSelect = (filePath) => {\n if (!onFileSelect)\n return;\n const { sourceName, originalPath } = parseUnifiedPath(filePath);\n const source = sources.find((s) => s.name === sourceName);\n if (source) {\n onFileSelect(source, originalPath);\n }\n };\n return /* @__PURE__ */ React9.createElement(DynamicFileTree, {\n key: `unified-${viewMode}-${selectedDirectories.join(\",\")}`,\n fileTree: displayTree,\n theme,\n selectedDirectories,\n onFileSelect: handleFileSelect,\n initialOpenState,\n defaultOpen,\n horizontalNodePadding\n });\n};\n\n// src/components/MultiFileTree/MultiFileTree.tsx\nvar MultiFileTree = ({\n sources,\n theme,\n showHeader = true,\n showFilters = true,\n showViewModeToggle = true,\n showSelectedFileIndicator = true,\n initialViewMode = \"all\",\n rootDirectoryName = \"Repositories\",\n title = \"Repository Explorer\",\n onFileSelect,\n initialOpenState,\n defaultOpen = false,\n horizontalNodePadding\n}) => {\n const [selectedFile, setSelectedFile] = useState6(null);\n const [viewMode, setViewMode] = useState6(initialViewMode);\n const [directoryFilters, setDirectoryFilters] = useState6([]);\n const unifiedTree = useMemo8(() => {\n return combineRepositoryTrees(sources, { rootDirectoryName });\n }, [sources, rootDirectoryName]);\n const currentSelectedDirs = directoryFilters.filter((f) => f.mode === \"include\").map((f) => f.path);\n const handleFileSelect = (source, filePath) => {\n setSelectedFile({ source, path: filePath });\n if (onFileSelect) {\n onFileSelect(source, filePath);\n }\n };\n const handleFiltersChange = (filters) => {\n setDirectoryFilters(filters);\n };\n return /* @__PURE__ */ React10.createElement(\"div\", {\n style: {\n width: \"100%\",\n height: \"100%\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"16px\"\n }\n }, /* @__PURE__ */ React10.createElement(\"div\", {\n style: {\n flex: 1,\n border: `2px solid ${theme.colors.border}`,\n borderRadius: \"12px\",\n overflow: \"hidden\",\n backgroundColor: theme.colors.background,\n display: \"flex\",\n flexDirection: \"column\"\n }\n }, showHeader && /* @__PURE__ */ React10.createElement(\"div\", {\n style: {\n padding: \"16px\",\n borderBottom: `1px solid ${theme.colors.border}`,\n backgroundColor: theme.colors.backgroundSecondary,\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n flexWrap: \"wrap\",\n gap: \"12px\"\n }\n }, /* @__PURE__ */ React10.createElement(\"h4\", {\n style: {\n fontSize: \"16px\",\n fontWeight: \"600\",\n color: theme.colors.text,\n margin: 0\n }\n }, title), showViewModeToggle && /* @__PURE__ */ React10.createElement(\"div\", {\n style: {\n display: \"flex\",\n gap: \"8px\"\n }\n }, /* @__PURE__ */ React10.createElement(\"button\", {\n onClick: () => setViewMode(\"all\"),\n style: {\n padding: \"6px 12px\",\n fontSize: \"13px\",\n fontWeight: \"500\",\n backgroundColor: viewMode === \"all\" ? theme.colors.primary : \"transparent\",\n color: viewMode === \"all\" ? theme.colors.background : theme.colors.text,\n border: `1px solid ${viewMode === \"all\" ? theme.colors.primary : theme.colors.border}`,\n borderRadius: \"6px\",\n cursor: \"pointer\",\n transition: \"all 0.2s ease\"\n }\n }, \"Show All\"), /* @__PURE__ */ React10.createElement(\"button\", {\n onClick: () => setViewMode(\"selected\"),\n disabled: currentSelectedDirs.length === 0,\n style: {\n padding: \"6px 12px\",\n fontSize: \"13px\",\n fontWeight: \"500\",\n backgroundColor: viewMode === \"selected\" ? theme.colors.primary : \"transparent\",\n color: viewMode === \"selected\" ? theme.colors.background : currentSelectedDirs.length === 0 ? theme.colors.textSecondary : theme.colors.text,\n border: `1px solid ${viewMode === \"selected\" ? theme.colors.primary : theme.colors.border}`,\n borderRadius: \"6px\",\n cursor: currentSelectedDirs.length === 0 ? \"not-allowed\" : \"pointer\",\n transition: \"all 0.2s ease\",\n opacity: currentSelectedDirs.length === 0 ? 0.5 : 1\n },\n title: currentSelectedDirs.length === 0 ? \"Select directories below first\" : `Show only selected directories (${currentSelectedDirs.length})`\n }, \"Show Selected (\", currentSelectedDirs.length, \")\"))), showFilters && /* @__PURE__ */ React10.createElement(\"div\", {\n style: {\n padding: \"16px\",\n borderBottom: `1px solid ${theme.colors.border}`,\n backgroundColor: theme.colors.background\n }\n }, /* @__PURE__ */ React10.createElement(\"div\", {\n style: {\n fontSize: \"13px\",\n fontWeight: \"500\",\n color: theme.colors.text,\n marginBottom: \"8px\"\n }\n }, \"Select Directories to Filter:\"), /* @__PURE__ */ React10.createElement(DirectoryFilterInput, {\n fileTree: unifiedTree,\n theme,\n filters: directoryFilters,\n onFiltersChange: handleFiltersChange\n }), currentSelectedDirs.length === 0 && /* @__PURE__ */ React10.createElement(\"div\", {\n style: {\n fontSize: \"12px\",\n color: theme.colors.textSecondary,\n marginTop: \"8px\",\n fontStyle: \"italic\"\n }\n }, 'Type to search and select directories from any repository. Selected directories will be highlighted when you click \"Show Selected\".'), currentSelectedDirs.length > 0 && viewMode === \"all\" && /* @__PURE__ */ React10.createElement(\"div\", {\n style: {\n fontSize: \"12px\",\n color: theme.colors.primary,\n marginTop: \"8px\"\n }\n }, \"✓ \", currentSelectedDirs.length, \" director\", currentSelectedDirs.length === 1 ? \"y\" : \"ies\", ' selected. Click \"Show Selected\" to filter the view.')), /* @__PURE__ */ React10.createElement(\"div\", {\n style: {\n flex: 1,\n overflow: \"auto\",\n padding: \"16px\"\n }\n }, viewMode === \"selected\" && currentSelectedDirs.length > 0 && /* @__PURE__ */ React10.createElement(\"div\", {\n style: {\n fontSize: \"13px\",\n color: theme.colors.textSecondary,\n marginBottom: \"12px\",\n padding: \"8px 12px\",\n backgroundColor: theme.colors.backgroundSecondary,\n borderRadius: \"6px\",\n border: `1px solid ${theme.colors.border}`\n }\n }, \"Showing only selected directories:\", \" \", currentSelectedDirs.map((dir) => {\n const segments = dir.split(\"/\");\n return segments.length > 1 ? `${segments[0]}/${segments[segments.length - 1]}` : dir;\n }).join(\", \")), /* @__PURE__ */ React10.createElement(MultiFileTreeCore, {\n sources,\n theme,\n selectedDirectories: currentSelectedDirs,\n viewMode,\n onFileSelect: handleFileSelect,\n initialOpenState,\n defaultOpen,\n horizontalNodePadding\n }))), showSelectedFileIndicator && selectedFile && /* @__PURE__ */ React10.createElement(\"div\", {\n style: {\n padding: \"12px 16px\",\n backgroundColor: theme.colors.backgroundSecondary,\n borderRadius: \"8px\",\n border: `1px solid ${theme.colors.border}`,\n fontSize: \"12px\",\n color: theme.colors.textSecondary\n }\n }, \"Selected: \", selectedFile.source.name, \" / \", selectedFile.path));\n};\nexport {\n useContainerHeight,\n updateTreePaths,\n parseUnifiedPath,\n filterFileTreeByPaths,\n extractNameFromPath,\n combineRepositoryTrees,\n TreeNode,\n OrderedFileList,\n MultiFileTreeCore,\n MultiFileTree,\n GitStatusFileTreeContainer,\n GitStatusFileTree,\n GitOrderedFileList,\n FileTreeContainer,\n DynamicFileTree,\n DirectoryFilterInput\n};\n","class _{static buildTreeFromPaths(j,k=\"\"){let q=k.endsWith(\"/\")?k.slice(0,-1):k,E=new Map,J=[],O=[],X=new Set;j.forEach((K)=>{let Q=K.split(\"/\");for(let W=1;W<Q.length;W++)X.add(Q.slice(0,W).join(\"/\"))}),Array.from(X).forEach((K)=>{let Q=K.split(\"/\"),W=Q[Q.length-1]||\"\",Y=Q.length-1,M={path:K,name:W,children:[],fileCount:0,totalSize:0,depth:Y,relativePath:this.calculateRelativePath(K,q)};E.set(K,M),O.push(M)}),j.forEach((K)=>{let Q=K.split(\"/\"),W=Q[Q.length-1]||\"\",Y=this.extractExtension(W),M=Q.slice(0,-1).join(\"/\"),A={path:K,name:W,extension:Y,size:0,lastModified:new Date,isDirectory:!1,relativePath:this.calculateRelativePath(K,q)};J.push(A);let H=E.get(M);if(H&&\"children\"in H)H.children.push(A),H.fileCount++}),Array.from(X).sort((K,Q)=>Q.length-K.length).forEach((K)=>{let Q=K.split(\"/\");if(Q.length>1){let W=Q.slice(0,-1).join(\"/\"),Y=E.get(W),M=E.get(K);if(Y&&M&&\"children\"in Y)Y.children.push(M)}});let $=q?q.split(\"/\").pop()||\"root\":\"root\",Z=[];return O.forEach((K)=>{if(K.path.split(\"/\").length===1)Z.push(K)}),J.forEach((K)=>{if(K.path.split(\"/\").length===1)Z.push(K)}),{root:{path:q||\".\",name:$,children:Z,fileCount:J.length,totalSize:0,depth:0,relativePath:\"\"},allFiles:J,allDirectories:O}}static buildTreeFromFileInfos(j,k=\"\"){let q=k.endsWith(\"/\")?k.slice(0,-1):k,E=new Map,J=[],O=new Set;j.forEach((V)=>{let K=V.path.split(\"/\");for(let Q=1;Q<K.length;Q++)O.add(K.slice(0,Q).join(\"/\"))}),Array.from(O).forEach((V)=>{let K=V.split(\"/\"),Q=K[K.length-1]||\"\",W={path:V,name:Q,children:[],fileCount:0,totalSize:0,depth:K.length-1,relativePath:this.calculateRelativePath(V,q)};E.set(V,W),J.push(W)}),j.forEach((V)=>{let Q=V.path.split(\"/\").slice(0,-1).join(\"/\"),W=E.get(Q);if(W)W.children.push(V),W.fileCount++,W.totalSize+=V.size||0}),Array.from(O).sort((V,K)=>K.length-V.length).forEach((V)=>{let K=V.split(\"/\");if(K.length>1){let Q=K.slice(0,-1).join(\"/\"),W=E.get(Q),Y=E.get(V);if(W&&Y)W.children.push(Y),W.fileCount+=Y.fileCount,W.totalSize+=Y.totalSize}});let X=q?q.split(\"/\").pop()||\"root\":\"root\",$=[];return J.forEach((V)=>{if(V.path.split(\"/\").length===1)$.push(V)}),j.forEach((V)=>{if(V.path.split(\"/\").length===1)$.push(V)}),{root:{path:q||\".\",name:X,children:$,fileCount:j.length,totalSize:j.reduce((V,K)=>V+(K.size||0),0),depth:0,relativePath:\"\"},allFiles:j,allDirectories:J}}static calculateStats(j,k){return{totalFiles:j.length,totalDirectories:k.length,totalSize:j.reduce((q,E)=>q+(E.size||0),0),maxDepth:this.calculateMaxDepth(k)}}static calculateMaxDepth(j){if(j.length===0)return 0;return Math.max(...j.map((k)=>k.depth||0))}static extractExtension(j){if(!j.includes(\".\"))return\"\";let k=j.split(\".\");return\".\"+k[k.length-1].toLowerCase()}static calculateRelativePath(j,k){if(!k||k===\"\"||k===\".\")return j;if(j===k)return\"\";if(j.startsWith(k)){let q=j.substring(k.length);return q.startsWith(\"/\")?q.substring(1):q}return j}static hashPaths(j){let q=[...j].sort().join(`\n`),E=0;for(let J=0;J<q.length;J++){let O=q.charCodeAt(J);E=(E<<5)-E+O,E=E&E}return`paths-${Math.abs(E).toString(36)}`}static simpleHash(j){let k=0;for(let q=0;q<j.length;q++){let E=j.charCodeAt(q);k=(k<<5)-k+E,k=k&k}return Math.abs(k).toString(36)}}class G{generateTimestampId(){return Date.now().toString(36)}simpleHash(j){let k=0;for(let q=0;q<j.length;q++){let E=j.charCodeAt(q);k=(k<<5)-k+E,k=k&k}return Math.abs(k).toString(36)}}class N extends G{build(j){let{files:k,rootPath:q=\"\"}=j,{root:E,allFiles:J,allDirectories:O}=_.buildTreeFromPaths(k,q),X=_.calculateStats(J,O);return{sha:this.calculateSha(j),metadata:this.generateMetadata(j),root:E,allFiles:J,allDirectories:O,stats:X}}generateMetadata(j){let{files:k,rootPath:q=\"\"}=j,E=this.calculateSha(j);return{id:`paths-${E}-${this.generateTimestampId()}`,timestamp:new Date,sourceType:\"paths\",sourceSha:E,sourceInfo:{fileCount:k.length,rootPath:q||\".\"}}}calculateSha(j){return _.hashPaths(j.files)}}class L extends G{build(j){let{files:k,rootPath:q=\"\"}=j,E=k.map((Z)=>({path:Z.path,name:this.getFileName(Z.path),extension:this.getFileExtension(Z.path),size:Z.size||0,lastModified:Z.lastModified||new Date,isDirectory:!1,relativePath:this.calculateRelativePath(Z.path,q)})),{root:J,allFiles:O,allDirectories:X}=_.buildTreeFromFileInfos(E,q),$=_.calculateStats(O,X);return{sha:this.calculateSha(j),metadata:this.generateMetadata(j),root:J,allFiles:O,allDirectories:X,stats:$}}generateMetadata(j){let{commitSha:k,branch:q,files:E,rootPath:J=\"\",isDirty:O=!1}=j;return{id:`git-${k}${O?\"-dirty\":\"\"}-${this.generateTimestampId()}`,timestamp:new Date,sourceType:\"git\",sourceSha:k,sourceInfo:{commitSha:k,branch:q,rootPath:J||\".\",isDirty:O,fileCount:E.length}}}calculateSha(j){let{commitSha:k,isDirty:q}=j;return q?`${k}-dirty`:k}getFileName(j){let k=j.split(\"/\");return k[k.length-1]||\"\"}getFileExtension(j){if(!j.includes(\".\"))return\"\";let k=j.split(\".\");return\".\"+k[k.length-1].toLowerCase()}calculateRelativePath(j,k){if(!k||k===\"\"||k===\".\")return j;if(j===k)return\"\";if(j.startsWith(k)){let q=j.substring(k.length);return q.startsWith(\"/\")?q.substring(1):q}return j}}var R={localWorkingCopy(j,k,q,E,J){return{id:`local-${j}`,type:\"local\",owner:k,name:q,remoteUrl:E,location:j,locationType:\"working\",label:`Local: ${q}${J?` (${J})`:\"\"}`,provider:\"local\",metadata:{currentBranch:J}}},remoteBranch(j,k,q,E,J=\"github\"){return{id:`${J}-${j}-${k}-${E}`,type:\"remote\",owner:j,name:k,remoteUrl:q,location:E,locationType:\"branch\",label:`${k}@${E}`,provider:J,apiUrl:J===\"github\"?\"https://api.github.com\":void 0}},remoteTag(j,k,q,E,J=\"github\"){return{id:`${J}-${j}-${k}-tag-${E}`,type:\"remote\",owner:j,name:k,remoteUrl:q,location:E,locationType:\"tag\",label:`${k}@${E}`,provider:J,apiUrl:J===\"github\"?\"https://api.github.com\":void 0}},remoteCommit(j,k,q,E,J=\"github\"){let O=E.substring(0,7);return{id:`${J}-${j}-${k}-commit-${O}`,type:\"remote\",owner:j,name:k,remoteUrl:q,location:E,locationType:\"commit\",label:`${k}@${O}`,provider:J,apiUrl:J===\"github\"?\"https://api.github.com\":void 0,metadata:{commitSha:E}}},temporary(j,k,q){return{...j,id:`temp-${j.id}-${Date.now()}`,location:k,locationType:q,label:`${j.label} (temporary)`,isTemporary:!0,createdAt:Date.now()}}},x=(j)=>j.type===\"local\",z=(j)=>j.type===\"remote\",B=(j)=>j.isTemporary===!0,C=(j)=>j.provider===\"github\";function D(j){if(j.label)return j.label;let k=j.type===\"local\"?\"Local: \":\"\",q=j.locationType===\"branch\"?`@${j.location}`:j.locationType===\"tag\"?`@${j.location}`:j.locationType===\"commit\"?`@${j.location.substring(0,7)}`:\"\";return`${k}${j.name}${q}`}function g(j){if(j.type===\"local\")return`local:${j.location}`;return`${j.provider}:${j.owner}/${j.name}:${j.locationType}:${j.location}`}function w(j){return!j.isTemporary}function F(j){if(j.isTemporary)return 300000;if(j.type===\"local\")return 600000;if(j.locationType===\"commit\")return 3600000;return 1800000}function T(j,k){if(j.isDefault&&!k.isDefault)return-1;if(!j.isDefault&&k.isDefault)return 1;if(j.type===\"local\"&&k.type===\"remote\")return-1;if(j.type===\"remote\"&&k.type===\"local\")return 1;return j.label.localeCompare(k.label)}class U{files=new Map;binaryFiles=new Map;exists(j){return this.files.has(j)||this.binaryFiles.has(j)||this.isDirectory(j)}readFile(j){let k=this.files.get(j);if(k===void 0)throw new Error(`File not found: ${j}`);return k}writeFile(j,k){let q=this.dirname(j);if(q&&q!==\"/\"&&q!==j)this.createDir(q);this.files.set(j,k)}deleteFile(j){this.files.delete(j),this.binaryFiles.delete(j)}readBinaryFile(j){let k=this.binaryFiles.get(j);if(k===void 0)throw new Error(`Binary file not found: ${j}`);return k}writeBinaryFile(j,k){let q=this.dirname(j);if(q&&q!==\"/\"&&q!==j)this.createDir(q);this.binaryFiles.set(j,k)}createDir(j){if(!j||j===\"/\")return;this.files.set(j+\"/.dir\",\"\")}readDir(j){if((this.files.has(j)||this.binaryFiles.has(j))&&!j.endsWith(\"/.dir\"))throw new Error(`ENOTDIR: not a directory, scandir '${j}'`);if(!this.isDirectory(j))throw new Error(`ENOENT: no such file or directory, scandir '${j}'`);let k=j.endsWith(\"/\")?j.slice(0,-1):j,q=k===\"/\"?\"\":`${k}/`,E=new Set;for(let J of this.files.keys())if(J.startsWith(q)){let O=J.slice(q.length);if(O){if(O===\".dir\")continue;if(O.endsWith(\"/.dir\")){let X=O.slice(0,-5).split(\"/\")[0];if(X)E.add(X)}else{let X=O.split(\"/\")[0];if(X&&X!==\".dir\")E.add(X)}}}for(let J of this.binaryFiles.keys())if(J.startsWith(q)){let O=J.slice(q.length);if(O){let X=O.split(\"/\");if(X[0])E.add(X[0])}}return Array.from(E)}deleteDir(j){let k=`${j}/`;for(let q of this.files.keys())if(q.startsWith(k)||q===j+\"/.dir\")this.files.delete(q);for(let q of this.binaryFiles.keys())if(q.startsWith(k))this.binaryFiles.delete(q)}join(...j){return j.join(\"/\").replace(/\\/+/g,\"/\").replace(/\\/$/,\"\")||\"/\"}dirname(j){let k=j.lastIndexOf(\"/\");return k<=0?\"/\":j.slice(0,k)}isAbsolute(j){return j.startsWith(\"/\")}relative(j,k){if(k.startsWith(j))return k.slice(j.length+1);return k}isDirectory(j){if(this.files.has(j+\"/.dir\"))return!0;let k=`${j}/`;for(let q of this.files.keys())if(q.startsWith(k))return!0;for(let q of this.binaryFiles.keys())if(q.startsWith(k))return!0;return!1}normalizeRepositoryPath(j){let k=j;while(k&&k!==\"/\"){if(this.exists(this.join(k,\".git\")))return k;k=this.dirname(k)}throw new Error(`Not a git repository: ${j}`)}findProjectRoot(j){return this.normalizeRepositoryPath(j)}getRepositoryName(j){let k=j.split(\"/\").filter((q)=>q);return k[k.length-1]||\"root\"}clear(){this.files.clear(),this.binaryFiles.clear()}getFiles(){return new Map(this.files)}setupTestRepo(j){this.createDir(j),this.createDir(this.join(j,\".git\")),this.createDir(this.join(j,\".alexandria\"))}debug(){console.log(\"InMemory FileSystem Contents:\");for(let[j,k]of this.files.entries())if(!j.endsWith(\"/.dir\"))console.log(` ${j}: ${k.length} bytes`)}}export{w as shouldCacheSource,B as isTemporarySource,z as isRemoteSource,x as isLocalSource,C as isGitHubSource,g as getSourceIdentifier,D as getSourceDisplayName,F as getSourceCacheTTL,R as createFileTreeSource,T as compareFileTreeSources,N as PathsFileTreeBuilder,U as InMemoryFileSystemAdapter,L as GitFileTreeBuilder,_ as FileTreeCore};\n\n//# debugId=49C15B26110733AA64756E2164756E21\n//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL2ZpbGVUcmVlQ29yZS50cyIsICJzcmMvZmlsZVRyZWVCdWlsZGVyLnRzIiwgInNyYy9idWlsZGVycy9QYXRoc0ZpbGVUcmVlQnVpbGRlci50cyIsICJzcmMvYnVpbGRlcnMvR2l0RmlsZVRyZWVCdWlsZGVyLnRzIiwgInNyYy9maWxlVHJlZVNvdXJjZS50cyIsICJzcmMvYWRhcHRlcnMvSW5NZW1vcnlGaWxlU3lzdGVtQWRhcHRlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsKICAgICIvKipcbiAqIENvcmUgdXRpbGl0aWVzIGZvciBGaWxlVHJlZSBvcGVyYXRpb25zXG4gKiBTaGFyZWQgbG9naWMgdGhhdCBhbGwgYnVpbGRlcnMgY2FuIHVzZVxuICovXG5cbmltcG9ydCB7IEZpbGVJbmZvLCBEaXJlY3RvcnlJbmZvLCBGaWxlVHJlZU5vZGUgfSBmcm9tICcuL2ZpbGVUcmVlJztcbmltcG9ydCB7IEZpbGVUcmVlU3RhdHMgfSBmcm9tICcuL2ZpbGVUcmVlQnVpbGRlcic7XG5cbi8qKlxuICogQ29yZSB1dGlsaXRpZXMgdGhhdCBhbGwgYnVpbGRlcnMgY2FuIHVzZVxuICogVGhlc2UgYXJlIHRoZSB0cnVseSBjb21tb24gb3BlcmF0aW9uc1xuICovXG5leHBvcnQgY2xhc3MgRmlsZVRyZWVDb3JlIHtcbiAgLyoqXG4gICAqIEJ1aWxkIHRyZWUgc3RydWN0dXJlIGZyb20gZmlsZSBwYXRoc1xuICAgKiBUaGlzIGlzIHRoZSBjb3JlIGFsZ29yaXRobSB0aGF0IGV2ZXJ5b25lIG5lZWRzXG4gICAqL1xuICBzdGF0aWMgYnVpbGRUcmVlRnJvbVBhdGhzKFxuICAgIHBhdGhzOiBzdHJpbmdbXSxcbiAgICByb290UGF0aDogc3RyaW5nID0gJydcbiAgKToge1xuICAgIHJvb3Q6IERpcmVjdG9yeUluZm87XG4gICAgYWxsRmlsZXM6IEZpbGVJbmZvW107XG4gICAgYWxsRGlyZWN0b3JpZXM6IERpcmVjdG9yeUluZm9bXTtcbiAgfSB7XG4gICAgY29uc3Qgbm9ybWFsaXplZFJvb3QgPSByb290UGF0aC5lbmRzV2l0aCgnLycpID8gcm9vdFBhdGguc2xpY2UoMCwgLTEpIDogcm9vdFBhdGg7XG5cbiAgICAvLyBCdWlsZCB0cmVlIHN0cnVjdHVyZSBmcm9tIGZpbGUgcGF0aHNcbiAgICBjb25zdCB0cmVlOiBNYXA8c3RyaW5nLCBGaWxlVHJlZU5vZGU+ID0gbmV3IE1hcCgpO1xuICAgIGNvbnN0IGFsbEZpbGVzOiBGaWxlSW5mb1tdID0gW107XG4gICAgY29uc3QgYWxsRGlyZWN0b3JpZXM6IERpcmVjdG9yeUluZm9bXSA9IFtdO1xuXG4gICAgLy8gRmlyc3QsIGNyZWF0ZSBhbGwgZGlyZWN0b3JpZXNcbiAgICBjb25zdCBkaXJlY3RvcnlQYXRocyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIHBhdGhzLmZvckVhY2goZmlsZVBhdGggPT4ge1xuICAgICAgY29uc3QgcGFydHMgPSBmaWxlUGF0aC5zcGxpdCgnLycpO1xuICAgICAgLy8gQnVpbGQgYWxsIHBhcmVudCBkaXJlY3RvcnkgcGF0aHNcbiAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgcGFydHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZGlyZWN0b3J5UGF0aHMuYWRkKHBhcnRzLnNsaWNlKDAsIGkpLmpvaW4oJy8nKSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBDcmVhdGUgRGlyZWN0b3J5SW5mbyBvYmplY3RzIGFuZCBhZGQgdG8gdHJlZVxuICAgIEFycmF5LmZyb20oZGlyZWN0b3J5UGF0aHMpLmZvckVhY2goZGlyUGF0aCA9PiB7XG4gICAgICBjb25zdCBwYXJ0cyA9IGRpclBhdGguc3BsaXQoJy8nKTtcbiAgICAgIGNvbnN0IG5hbWUgPSBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXSB8fCAnJztcbiAgICAgIGNvbnN0IGRlcHRoID0gcGFydHMubGVuZ3RoIC0gMTtcblxuICAgICAgY29uc3QgZGlySW5mbzogRGlyZWN0b3J5SW5mbyA9IHtcbiAgICAgICAgcGF0aDogZGlyUGF0aCxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgICBmaWxlQ291bnQ6IDAsXG4gICAgICAgIHRvdGFsU2l6ZTogMCxcbiAgICAgICAgZGVwdGgsXG4gICAgICAgIHJlbGF0aXZlUGF0aDogdGhpcy5jYWxjdWxhdGVSZWxhdGl2ZVBhdGgoZGlyUGF0aCwgbm9ybWFsaXplZFJvb3QpLFxuICAgICAgfTtcblxuICAgICAgdHJlZS5zZXQoZGlyUGF0aCwgZGlySW5mbyk7XG4gICAgICBhbGxEaXJlY3Rvcmllcy5wdXNoKGRpckluZm8pO1xuICAgIH0pO1xuXG4gICAgLy8gVGhlbiwgY3JlYXRlIGFsbCBmaWxlcyBhbmQgYWRkIHRoZW0gdG8gdGhlaXIgcGFyZW50IGRpcmVjdG9yaWVzXG4gICAgcGF0aHMuZm9yRWFjaChmaWxlUGF0aCA9PiB7XG4gICAgICBjb25zdCBwYXJ0cyA9IGZpbGVQYXRoLnNwbGl0KCcvJyk7XG4gICAgICBjb25zdCBuYW1lID0gcGFydHNbcGFydHMubGVuZ3RoIC0gMV0gfHwgJyc7XG4gICAgICBjb25zdCBleHRlbnNpb24gPSB0aGlzLmV4dHJhY3RFeHRlbnNpb24obmFtZSk7XG4gICAgICBjb25zdCBwYXJlbnRQYXRoID0gcGFydHMuc2xpY2UoMCwgLTEpLmpvaW4oJy8nKTtcblxuICAgICAgY29uc3QgZmlsZUluZm86IEZpbGVJbmZvID0ge1xuICAgICAgICBwYXRoOiBmaWxlUGF0aCxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgZXh0ZW5zaW9uLFxuICAgICAgICBzaXplOiAwLFxuICAgICAgICBsYXN0TW9kaWZpZWQ6IG5ldyBEYXRlKCksXG4gICAgICAgIGlzRGlyZWN0b3J5OiBmYWxzZSxcbiAgICAgICAgcmVsYXRpdmVQYXRoOiB0aGlzLmNhbGN1bGF0ZVJlbGF0aXZlUGF0aChmaWxlUGF0aCwgbm9ybWFsaXplZFJvb3QpLFxuICAgICAgfTtcblxuICAgICAgYWxsRmlsZXMucHVzaChmaWxlSW5mbyk7XG5cbiAgICAgIC8vIEFkZCBmaWxlIHRvIGl0cyBwYXJlbnQgZGlyZWN0b3J5XG4gICAgICBjb25zdCBwYXJlbnQgPSB0cmVlLmdldChwYXJlbnRQYXRoKTtcbiAgICAgIGlmIChwYXJlbnQgJiYgJ2NoaWxkcmVuJyBpbiBwYXJlbnQpIHtcbiAgICAgICAgcGFyZW50LmNoaWxkcmVuLnB1c2goZmlsZUluZm8pO1xuICAgICAgICBwYXJlbnQuZmlsZUNvdW50Kys7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBCdWlsZCB0aGUgdHJlZSBzdHJ1Y3R1cmUgYnkgbGlua2luZyBkaXJlY3RvcmllcyB0byB0aGVpciBwYXJlbnRzXG4gICAgQXJyYXkuZnJvbShkaXJlY3RvcnlQYXRocylcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBiLmxlbmd0aCAtIGEubGVuZ3RoKVxuICAgICAgLmZvckVhY2goZGlyUGF0aCA9PiB7XG4gICAgICAgIGNvbnN0IHBhcnRzID0gZGlyUGF0aC5zcGxpdCgnLycpO1xuICAgICAgICBpZiAocGFydHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgIGNvbnN0IHBhcmVudFBhdGggPSBwYXJ0cy5zbGljZSgwLCAtMSkuam9pbignLycpO1xuICAgICAgICAgIGNvbnN0IHBhcmVudCA9IHRyZWUuZ2V0KHBhcmVudFBhdGgpO1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSB0cmVlLmdldChkaXJQYXRoKTtcblxuICAgICAgICAgIGlmIChwYXJlbnQgJiYgY3VycmVudCAmJiAnY2hpbGRyZW4nIGluIHBhcmVudCkge1xuICAgICAgICAgICAgcGFyZW50LmNoaWxkcmVuLnB1c2goY3VycmVudCBhcyBEaXJlY3RvcnlJbmZvKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgLy8gRmluZCBvciBjcmVhdGUgcm9vdCBkaXJlY3RvcnlcbiAgICBjb25zdCByb290TmFtZSA9IG5vcm1hbGl6ZWRSb290ID8gbm9ybWFsaXplZFJvb3Quc3BsaXQoJy8nKS5wb3AoKSB8fCAncm9vdCcgOiAncm9vdCc7XG5cbiAgICAvLyBGaW5kIHRvcC1sZXZlbCBkaXJlY3RvcmllcyBhbmQgZmlsZXMgKHRob3NlIHdpdGggb25seSBvbmUgcGF0aCBzZWdtZW50KVxuICAgIGNvbnN0IHRvcExldmVsQ2hpbGRyZW46IEZpbGVUcmVlTm9kZVtdID0gW107XG5cbiAgICAvLyBBZGQgdG9wLWxldmVsIGRpcmVjdG9yaWVzXG4gICAgYWxsRGlyZWN0b3JpZXMuZm9yRWFjaChkaXIgPT4ge1xuICAgICAgY29uc3QgcGFydHMgPSBkaXIucGF0aC5zcGxpdCgnLycpO1xuICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICB0b3BMZXZlbENoaWxkcmVuLnB1c2goZGlyKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIEFkZCB0b3AtbGV2ZWwgZmlsZXMgKGlmIGFueSlcbiAgICBhbGxGaWxlcy5mb3JFYWNoKGZpbGUgPT4ge1xuICAgICAgY29uc3QgcGFydHMgPSBmaWxlLnBhdGguc3BsaXQoJy8nKTtcbiAgICAgIGlmIChwYXJ0cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgdG9wTGV2ZWxDaGlsZHJlbi5wdXNoKGZpbGUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3Qgcm9vdDogRGlyZWN0b3J5SW5mbyA9IHtcbiAgICAgIHBhdGg6IG5vcm1hbGl6ZWRSb290IHx8ICcuJyxcbiAgICAgIG5hbWU6IHJvb3ROYW1lLFxuICAgICAgY2hpbGRyZW46IHRvcExldmVsQ2hpbGRyZW4sXG4gICAgICBmaWxlQ291bnQ6IGFsbEZpbGVzLmxlbmd0aCxcbiAgICAgIHRvdGFsU2l6ZTogMCxcbiAgICAgIGRlcHRoOiAwLFxuICAgICAgcmVsYXRpdmVQYXRoOiAnJyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHsgcm9vdCwgYWxsRmlsZXMsIGFsbERpcmVjdG9yaWVzIH07XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgdHJlZSBzdHJ1Y3R1cmUgZnJvbSBGaWxlSW5mbyBhcnJheSAod2l0aCBtZXRhZGF0YSlcbiAgICovXG4gIHN0YXRpYyBidWlsZFRyZWVGcm9tRmlsZUluZm9zKFxuICAgIGZpbGVJbmZvczogRmlsZUluZm9bXSxcbiAgICByb290UGF0aDogc3RyaW5nID0gJydcbiAgKToge1xuICAgIHJvb3Q6IERpcmVjdG9yeUluZm87XG4gICAgYWxsRmlsZXM6IEZpbGVJbmZvW107XG4gICAgYWxsRGlyZWN0b3JpZXM6IERpcmVjdG9yeUluZm9bXTtcbiAgfSB7XG4gICAgY29uc3Qgbm9ybWFsaXplZFJvb3QgPSByb290UGF0aC5lbmRzV2l0aCgnLycpID8gcm9vdFBhdGguc2xpY2UoMCwgLTEpIDogcm9vdFBhdGg7XG4gICAgY29uc3QgZGlyZWN0b3JpZXMgPSBuZXcgTWFwPHN0cmluZywgRGlyZWN0b3J5SW5mbz4oKTtcbiAgICBjb25zdCBhbGxEaXJlY3RvcmllczogRGlyZWN0b3J5SW5mb1tdID0gW107XG5cbiAgICAvLyBDcmVhdGUgYWxsIG5lY2Vzc2FyeSBkaXJlY3Rvcmllc1xuICAgIGNvbnN0IGRpcmVjdG9yeVBhdGhzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgZmlsZUluZm9zLmZvckVhY2goZmlsZSA9PiB7XG4gICAgICBjb25zdCBwYXJ0cyA9IGZpbGUucGF0aC5zcGxpdCgnLycpO1xuICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBwYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBkaXJlY3RvcnlQYXRocy5hZGQocGFydHMuc2xpY2UoMCwgaSkuam9pbignLycpKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIENyZWF0ZSBEaXJlY3RvcnlJbmZvIG9iamVjdHNcbiAgICBBcnJheS5mcm9tKGRpcmVjdG9yeVBhdGhzKS5mb3JFYWNoKGRpclBhdGggPT4ge1xuICAgICAgY29uc3QgcGFydHMgPSBkaXJQYXRoLnNwbGl0KCcvJyk7XG4gICAgICBjb25zdCBuYW1lID0gcGFydHNbcGFydHMubGVuZ3RoIC0gMV0gfHwgJyc7XG5cbiAgICAgIGNvbnN0IGRpckluZm86IERpcmVjdG9yeUluZm8gPSB7XG4gICAgICAgIHBhdGg6IGRpclBhdGgsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICAgICAgZmlsZUNvdW50OiAwLFxuICAgICAgICB0b3RhbFNpemU6IDAsXG4gICAgICAgIGRlcHRoOiBwYXJ0cy5sZW5ndGggLSAxLFxuICAgICAgICByZWxhdGl2ZVBhdGg6IHRoaXMuY2FsY3VsYXRlUmVsYXRpdmVQYXRoKGRpclBhdGgsIG5vcm1hbGl6ZWRSb290KSxcbiAgICAgIH07XG5cbiAgICAgIGRpcmVjdG9yaWVzLnNldChkaXJQYXRoLCBkaXJJbmZvKTtcbiAgICAgIGFsbERpcmVjdG9yaWVzLnB1c2goZGlySW5mbyk7XG4gICAgfSk7XG5cbiAgICAvLyBBZGQgZmlsZXMgdG8gdGhlaXIgcGFyZW50IGRpcmVjdG9yaWVzXG4gICAgZmlsZUluZm9zLmZvckVhY2goZmlsZSA9PiB7XG4gICAgICBjb25zdCBwYXJ0cyA9IGZpbGUucGF0aC5zcGxpdCgnLycpO1xuICAgICAgY29uc3QgcGFyZW50UGF0aCA9IHBhcnRzLnNsaWNlKDAsIC0xKS5qb2luKCcvJyk7XG4gICAgICBjb25zdCBwYXJlbnQgPSBkaXJlY3Rvcmllcy5nZXQocGFyZW50UGF0aCk7XG5cbiAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgcGFyZW50LmNoaWxkcmVuLnB1c2goZmlsZSk7XG4gICAgICAgIHBhcmVudC5maWxlQ291bnQrKztcbiAgICAgICAgcGFyZW50LnRvdGFsU2l6ZSArPSBmaWxlLnNpemUgfHwgMDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIExpbmsgZGlyZWN0b3JpZXMgdG8gdGhlaXIgcGFyZW50c1xuICAgIEFycmF5LmZyb20oZGlyZWN0b3J5UGF0aHMpXG4gICAgICAuc29ydCgoYSwgYikgPT4gYi5sZW5ndGggLSBhLmxlbmd0aClcbiAgICAgIC5mb3JFYWNoKGRpclBhdGggPT4ge1xuICAgICAgICBjb25zdCBwYXJ0cyA9IGRpclBhdGguc3BsaXQoJy8nKTtcbiAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICBjb25zdCBwYXJlbnRQYXRoID0gcGFydHMuc2xpY2UoMCwgLTEpLmpvaW4oJy8nKTtcbiAgICAgICAgICBjb25zdCBwYXJlbnQgPSBkaXJlY3Rvcmllcy5nZXQocGFyZW50UGF0aCk7XG4gICAgICAgICAgY29uc3QgY3VycmVudCA9IGRpcmVjdG9yaWVzLmdldChkaXJQYXRoKTtcblxuICAgICAgICAgIGlmIChwYXJlbnQgJiYgY3VycmVudCkge1xuICAgICAgICAgICAgcGFyZW50LmNoaWxkcmVuLnB1c2goY3VycmVudCk7XG4gICAgICAgICAgICBwYXJlbnQuZmlsZUNvdW50ICs9IGN1cnJlbnQuZmlsZUNvdW50O1xuICAgICAgICAgICAgcGFyZW50LnRvdGFsU2l6ZSArPSBjdXJyZW50LnRvdGFsU2l6ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgLy8gQ3JlYXRlIHJvb3RcbiAgICBjb25zdCByb290TmFtZSA9IG5vcm1hbGl6ZWRSb290ID8gbm9ybWFsaXplZFJvb3Quc3BsaXQoJy8nKS5wb3AoKSB8fCAncm9vdCcgOiAncm9vdCc7XG4gICAgY29uc3QgdG9wTGV2ZWxDaGlsZHJlbjogRmlsZVRyZWVOb2RlW10gPSBbXTtcblxuICAgIC8vIEZpbmQgdG9wLWxldmVsIGl0ZW1zXG4gICAgYWxsRGlyZWN0b3JpZXMuZm9yRWFjaChkaXIgPT4ge1xuICAgICAgaWYgKGRpci5wYXRoLnNwbGl0KCcvJykubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHRvcExldmVsQ2hpbGRyZW4ucHVzaChkaXIpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZmlsZUluZm9zLmZvckVhY2goZmlsZSA9PiB7XG4gICAgICBpZiAoZmlsZS5wYXRoLnNwbGl0KCcvJykubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHRvcExldmVsQ2hpbGRyZW4ucHVzaChmaWxlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IHJvb3Q6IERpcmVjdG9yeUluZm8gPSB7XG4gICAgICBwYXRoOiBub3JtYWxpemVkUm9vdCB8fCAnLicsXG4gICAgICBuYW1lOiByb290TmFtZSxcbiAgICAgIGNoaWxkcmVuOiB0b3BMZXZlbENoaWxkcmVuLFxuICAgICAgZmlsZUNvdW50OiBmaWxlSW5mb3MubGVuZ3RoLFxuICAgICAgdG90YWxTaXplOiBmaWxlSW5mb3MucmVkdWNlKChzdW0sIGYpID0+IHN1bSArIChmLnNpemUgfHwgMCksIDApLFxuICAgICAgZGVwdGg6IDAsXG4gICAgICByZWxhdGl2ZVBhdGg6ICcnLFxuICAgIH07XG5cbiAgICByZXR1cm4geyByb290LCBhbGxGaWxlczogZmlsZUluZm9zLCBhbGxEaXJlY3RvcmllcyB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSBzdGFuZGFyZCBzdGF0aXN0aWNzIGZvciBhIHRyZWVcbiAgICovXG4gIHN0YXRpYyBjYWxjdWxhdGVTdGF0cyhcbiAgICBmaWxlczogRmlsZUluZm9bXSxcbiAgICBkaXJlY3RvcmllczogRGlyZWN0b3J5SW5mb1tdXG4gICk6IEZpbGVUcmVlU3RhdHMge1xuICAgIHJldHVybiB7XG4gICAgICB0b3RhbEZpbGVzOiBmaWxlcy5sZW5ndGgsXG4gICAgICB0b3RhbERpcmVjdG9yaWVzOiBkaXJlY3Rvcmllcy5sZW5ndGgsXG4gICAgICB0b3RhbFNpemU6IGZpbGVzLnJlZHVjZSgoc3VtLCBmKSA9PiBzdW0gKyAoZi5zaXplIHx8IDApLCAwKSxcbiAgICAgIG1heERlcHRoOiB0aGlzLmNhbGN1bGF0ZU1heERlcHRoKGRpcmVjdG9yaWVzKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSBtYXhpbXVtIGRlcHRoIGluIGRpcmVjdG9yeSB0cmVlXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBjYWxjdWxhdGVNYXhEZXB0aChkaXJlY3RvcmllczogRGlyZWN0b3J5SW5mb1tdKTogbnVtYmVyIHtcbiAgICBpZiAoZGlyZWN0b3JpZXMubGVuZ3RoID09PSAwKSByZXR1cm4gMDtcbiAgICByZXR1cm4gTWF0aC5tYXgoLi4uZGlyZWN0b3JpZXMubWFwKGQgPT4gZC5kZXB0aCB8fCAwKSk7XG4gIH1cblxuICAvKipcbiAgICogRXh0cmFjdCBmaWxlIGV4dGVuc2lvbiBmcm9tIGZpbGVuYW1lXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBleHRyYWN0RXh0ZW5zaW9uKGZpbGVuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghZmlsZW5hbWUuaW5jbHVkZXMoJy4nKSkgcmV0dXJuICcnO1xuICAgIGNvbnN0IHBhcnRzID0gZmlsZW5hbWUuc3BsaXQoJy4nKTtcbiAgICByZXR1cm4gJy4nICsgcGFydHNbcGFydHMubGVuZ3RoIC0gMV0udG9Mb3dlckNhc2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgcmVsYXRpdmUgcGF0aCBmcm9tIHJvb3RcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGNhbGN1bGF0ZVJlbGF0aXZlUGF0aChmdWxsUGF0aDogc3RyaW5nLCByb290UGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIXJvb3RQYXRoIHx8IHJvb3RQYXRoID09PSAnJyB8fCByb290UGF0aCA9PT0gJy4nKSB7XG4gICAgICByZXR1cm4gZnVsbFBhdGg7XG4gICAgfVxuXG4gICAgaWYgKGZ1bGxQYXRoID09PSByb290UGF0aCkgcmV0dXJuICcnO1xuXG4gICAgaWYgKGZ1bGxQYXRoLnN0YXJ0c1dpdGgocm9vdFBhdGgpKSB7XG4gICAgICBjb25zdCByZWxhdGl2ZSA9IGZ1bGxQYXRoLnN1YnN0cmluZyhyb290UGF0aC5sZW5ndGgpO1xuICAgICAgcmV0dXJuIHJlbGF0aXZlLnN0YXJ0c1dpdGgoJy8nKSA/IHJlbGF0aXZlLnN1YnN0cmluZygxKSA6IHJlbGF0aXZlO1xuICAgIH1cblxuICAgIHJldHVybiBmdWxsUGF0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBhIGNvbnRlbnQgaGFzaCBmb3IgYW4gYXJyYXkgb2YgcGF0aHNcbiAgICogUmV0dXJucyBhIHN0YWJsZSwgZGV0ZXJtaW5pc3RpYyBoYXNoXG4gICAqL1xuICBzdGF0aWMgaGFzaFBhdGhzKHBhdGhzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gICAgY29uc3Qgc29ydGVkUGF0aHMgPSBbLi4ucGF0aHNdLnNvcnQoKTtcbiAgICBjb25zdCBjb250ZW50ID0gc29ydGVkUGF0aHMuam9pbignXFxuJyk7XG5cbiAgICBsZXQgaGFzaCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb250ZW50Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBjaGFyID0gY29udGVudC5jaGFyQ29kZUF0KGkpO1xuICAgICAgaGFzaCA9ICgoaGFzaCA8PCA1KSAtIGhhc2gpICsgY2hhcjtcbiAgICAgIGhhc2ggPSBoYXNoICYgaGFzaDsgLy8gQ29udmVydCB0byAzMi1iaXQgaW50ZWdlclxuICAgIH1cblxuICAgIHJldHVybiBgcGF0aHMtJHtNYXRoLmFicyhoYXNoKS50b1N0cmluZygzNil9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBhIHNpbXBsZSBoYXNoIGZvciBhbnkgc3RyaW5nIGNvbnRlbnRcbiAgICovXG4gIHN0YXRpYyBzaW1wbGVIYXNoKGNvbnRlbnQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgbGV0IGhhc2ggPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29udGVudC5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgY2hhciA9IGNvbnRlbnQuY2hhckNvZGVBdChpKTtcbiAgICAgIGhhc2ggPSAoKGhhc2ggPDwgNSkgLSBoYXNoKSArIGNoYXI7XG4gICAgICBoYXNoID0gaGFzaCAmIGhhc2g7XG4gICAgfVxuICAgIHJldHVybiBNYXRoLmFicyhoYXNoKS50b1N0cmluZygzNik7XG4gIH1cbn0iLAogICAgIi8qKlxuICogQ29yZSBpbnRlcmZhY2VzIGZvciBGaWxlVHJlZSBjcmVhdGlvblxuICogUHJvdmlkZXMgYSBjb25zaXN0ZW50IGNvbnRyYWN0IGZvciBhbGwgRmlsZVRyZWUgYnVpbGRlcnNcbiAqL1xuXG5pbXBvcnQgeyBGaWxlSW5mbywgRGlyZWN0b3J5SW5mbywgRmlsZVRyZWUgfSBmcm9tICcuL2ZpbGVUcmVlJztcblxuLyoqXG4gKiBDb3JlIG1ldGFkYXRhIHRoYXQgZXZlcnkgRmlsZVRyZWUgbXVzdCBoYXZlXG4gKiBCdWlsZGVycyBjYW4gZXh0ZW5kIHRoaXMgd2l0aCBhZGRpdGlvbmFsIGZpZWxkc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpbGVUcmVlTWV0YWRhdGEge1xuICAvKiogVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoaXMgdHJlZSBpbnN0YW5jZSAqL1xuICBpZDogc3RyaW5nO1xuXG4gIC8qKiBXaGVuIHRoaXMgdHJlZSB3YXMgY3JlYXRlZCAqL1xuICB0aW1lc3RhbXA6IERhdGU7XG5cbiAgLyoqIFR5cGUgZGlzY3JpbWluYXRvciAoZ2l0LCBmaWxlc3lzdGVtLCBnaXRodWIsIGZpbHRlcmVkLCBldGMuKSAqL1xuICBzb3VyY2VUeXBlOiBzdHJpbmc7XG5cbiAgLyoqIE9yaWdpbmFsIFNIQSBpZiBhdmFpbGFibGUgKGdpdCBjb21taXQsIGNvbnRlbnQgaGFzaCwgZXRjLikgKi9cbiAgc291cmNlU2hhPzogc3RyaW5nO1xuXG4gIC8qKiBFeHRlbnNpYmxlIHNvdXJjZSBpbmZvcm1hdGlvbiAtIGJ1aWxkZXJzIGRlZmluZSB0aGVpciBvd24gc3RydWN0dXJlICovXG4gIHNvdXJjZUluZm86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG4vKipcbiAqIFN0YXRpc3RpY3MgYWJvdXQgdGhlIGZpbGUgdHJlZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpbGVUcmVlU3RhdHMge1xuICB0b3RhbEZpbGVzOiBudW1iZXI7XG4gIHRvdGFsRGlyZWN0b3JpZXM6IG51bWJlcjtcbiAgdG90YWxTaXplOiBudW1iZXI7XG4gIG1heERlcHRoOiBudW1iZXI7XG59XG5cbi8vIEZpbGVUcmVlV2l0aE1ldGFkYXRhIGlzIG5vdyBqdXN0IGFuIGFsaWFzIGZvciBGaWxlVHJlZSBzaW5jZSBtZXRhZGF0YSBpcyByZXF1aXJlZFxuZXhwb3J0IHR5cGUgRmlsZVRyZWVXaXRoTWV0YWRhdGEgPSBGaWxlVHJlZTtcblxuLyoqXG4gKiBDb3JlIGludGVyZmFjZSB0aGF0IGFsbCBGaWxlVHJlZSBidWlsZGVycyBtdXN0IGltcGxlbWVudFxuICogVGhpcyBlbnN1cmVzIGNvbnNpc3RlbnQgdHJlZSBjcmVhdGlvbiBhY3Jvc3MgYWxsIHNvdXJjZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaWxlVHJlZUJ1aWxkZXI8VFNvdXJjZSA9IHVua25vd24+IHtcbiAgLyoqXG4gICAqIEJ1aWxkIGEgRmlsZVRyZWUgZnJvbSB0aGUgc291cmNlIGRhdGFcbiAgICovXG4gIGJ1aWxkKHNvdXJjZTogVFNvdXJjZSk6IFByb21pc2U8RmlsZVRyZWVXaXRoTWV0YWRhdGE+IHwgRmlsZVRyZWVXaXRoTWV0YWRhdGE7XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIG1ldGFkYXRhIGZvciB0aGlzIHRyZWVcbiAgICogVGhpcyBpcyB3aGF0IG1ha2VzIGVhY2ggdHJlZSBpZGVudGlmaWFibGUgYW5kIHRyYWNlYWJsZVxuICAgKi9cbiAgZ2VuZXJhdGVNZXRhZGF0YShzb3VyY2U6IFRTb3VyY2UpOiBGaWxlVHJlZU1ldGFkYXRhO1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgYSB1bmlxdWUsIHN0YWJsZSBpZGVudGlmaWVyIGZvciB0aGUgdHJlZSBjb250ZW50XG4gICAqIFNob3VsZCBiZSBkZXRlcm1pbmlzdGljIGJhc2VkIG9uIHRoZSBzb3VyY2VcbiAgICovXG4gIGNhbGN1bGF0ZVNoYShzb3VyY2U6IFRTb3VyY2UpOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgRmlsZVRyZWUgYnVpbGRlcnNcbiAqIFByb3ZpZGVzIGNvbW1vbiBmdW5jdGlvbmFsaXR5IHRoYXQgYnVpbGRlcnMgY2FuIG92ZXJyaWRlXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlRmlsZVRyZWVCdWlsZGVyPFRTb3VyY2UgPSB1bmtub3duPiBpbXBsZW1lbnRzIEZpbGVUcmVlQnVpbGRlcjxUU291cmNlPiB7XG4gIGFic3RyYWN0IGJ1aWxkKHNvdXJjZTogVFNvdXJjZSk6IFByb21pc2U8RmlsZVRyZWVXaXRoTWV0YWRhdGE+IHwgRmlsZVRyZWVXaXRoTWV0YWRhdGE7XG4gIGFic3RyYWN0IGdlbmVyYXRlTWV0YWRhdGEoc291cmNlOiBUU291cmNlKTogRmlsZVRyZWVNZXRhZGF0YTtcbiAgYWJzdHJhY3QgY2FsY3VsYXRlU2hhKHNvdXJjZTogVFNvdXJjZSk6IHN0cmluZztcblxuICAvKipcbiAgICogR2VuZXJhdGUgYSB0aW1lc3RhbXAtYmFzZWQgSUQgc3VmZml4XG4gICAqL1xuICBwcm90ZWN0ZWQgZ2VuZXJhdGVUaW1lc3RhbXBJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBEYXRlLm5vdygpLnRvU3RyaW5nKDM2KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaW1wbGUgaGFzaCBmdW5jdGlvbiBmb3IgY29udGVudC1iYXNlZCBJRHNcbiAgICovXG4gIHByb3RlY3RlZCBzaW1wbGVIYXNoKGNvbnRlbnQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgbGV0IGhhc2ggPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29udGVudC5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgY2hhciA9IGNvbnRlbnQuY2hhckNvZGVBdChpKTtcbiAgICAgIGhhc2ggPSAoKGhhc2ggPDwgNSkgLSBoYXNoKSArIGNoYXI7XG4gICAgICBoYXNoID0gaGFzaCAmIGhhc2g7IC8vIENvbnZlcnQgdG8gMzItYml0IGludGVnZXJcbiAgICB9XG4gICAgcmV0dXJuIE1hdGguYWJzKGhhc2gpLnRvU3RyaW5nKDM2KTtcbiAgfVxufSIsCiAgICAiLyoqXG4gKiBGaWxlVHJlZSBidWlsZGVyIGZvciBzaW1wbGUgcGF0aCBhcnJheXNcbiAqIE1haW50YWlucyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggZXhpc3RpbmcgY3JlYXRlRmlsZVRyZWVGcm9tUGF0aHNcbiAqL1xuXG5pbXBvcnQgeyBCYXNlRmlsZVRyZWVCdWlsZGVyLCBGaWxlVHJlZU1ldGFkYXRhLCBGaWxlVHJlZVdpdGhNZXRhZGF0YSB9IGZyb20gJy4uL2ZpbGVUcmVlQnVpbGRlcic7XG5pbXBvcnQgeyBGaWxlVHJlZUNvcmUgfSBmcm9tICcuLi9maWxlVHJlZUNvcmUnO1xuXG4vKipcbiAqIFNvdXJjZSBkYXRhIGZvciBidWlsZGluZyBmcm9tIHBhdGhzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGF0aHNTb3VyY2Uge1xuICAvKiogQXJyYXkgb2YgZmlsZSBwYXRocyAqL1xuICBmaWxlczogc3RyaW5nW107XG5cbiAgLyoqIE9wdGlvbmFsIHJvb3QgcGF0aCBmb3IgcmVsYXRpdmUgcGF0aCBjYWxjdWxhdGlvbiAqL1xuICByb290UGF0aD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBCdWlsZHMgRmlsZVRyZWUgZnJvbSBzaW1wbGUgcGF0aCBhcnJheXNcbiAqIFRoaXMgaXMgdGhlIG1vc3QgYmFzaWMgYnVpbGRlciwgdXNlZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICovXG5leHBvcnQgY2xhc3MgUGF0aHNGaWxlVHJlZUJ1aWxkZXIgZXh0ZW5kcyBCYXNlRmlsZVRyZWVCdWlsZGVyPFBhdGhzU291cmNlPiB7XG4gIGJ1aWxkKHNvdXJjZTogUGF0aHNTb3VyY2UpOiBGaWxlVHJlZVdpdGhNZXRhZGF0YSB7XG4gICAgY29uc3QgeyBmaWxlcywgcm9vdFBhdGggPSAnJyB9ID0gc291cmNlO1xuXG4gICAgLy8gVXNlIGNvcmUgdXRpbGl0aWVzIHRvIGJ1aWxkIHRyZWUgc3RydWN0dXJlXG4gICAgY29uc3QgeyByb290LCBhbGxGaWxlcywgYWxsRGlyZWN0b3JpZXMgfSA9IEZpbGVUcmVlQ29yZS5idWlsZFRyZWVGcm9tUGF0aHMoXG4gICAgICBmaWxlcyxcbiAgICAgIHJvb3RQYXRoXG4gICAgKTtcblxuICAgIC8vIENhbGN1bGF0ZSBzdGF0aXN0aWNzXG4gICAgY29uc3Qgc3RhdHMgPSBGaWxlVHJlZUNvcmUuY2FsY3VsYXRlU3RhdHMoYWxsRmlsZXMsIGFsbERpcmVjdG9yaWVzKTtcblxuICAgIC8vIEJ1aWxkIHRoZSBjb21wbGV0ZSB0cmVlXG4gICAgcmV0dXJuIHtcbiAgICAgIHNoYTogdGhpcy5jYWxjdWxhdGVTaGEoc291cmNlKSxcbiAgICAgIG1ldGFkYXRhOiB0aGlzLmdlbmVyYXRlTWV0YWRhdGEoc291cmNlKSxcbiAgICAgIHJvb3QsXG4gICAgICBhbGxGaWxlcyxcbiAgICAgIGFsbERpcmVjdG9yaWVzLFxuICAgICAgc3RhdHMsXG4gICAgfTtcbiAgfVxuXG4gIGdlbmVyYXRlTWV0YWRhdGEoc291cmNlOiBQYXRoc1NvdXJjZSk6IEZpbGVUcmVlTWV0YWRhdGEge1xuICAgIGNvbnN0IHsgZmlsZXMsIHJvb3RQYXRoID0gJycgfSA9IHNvdXJjZTtcbiAgICBjb25zdCBzaGEgPSB0aGlzLmNhbGN1bGF0ZVNoYShzb3VyY2UpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBgcGF0aHMtJHtzaGF9LSR7dGhpcy5nZW5lcmF0ZVRpbWVzdGFtcElkKCl9YCxcbiAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKSxcbiAgICAgIHNvdXJjZVR5cGU6ICdwYXRocycsXG4gICAgICBzb3VyY2VTaGE6IHNoYSxcbiAgICAgIHNvdXJjZUluZm86IHtcbiAgICAgICAgZmlsZUNvdW50OiBmaWxlcy5sZW5ndGgsXG4gICAgICAgIHJvb3RQYXRoOiByb290UGF0aCB8fCAnLicsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBjYWxjdWxhdGVTaGEoc291cmNlOiBQYXRoc1NvdXJjZSk6IHN0cmluZyB7XG4gICAgLy8gR2VuZXJhdGUgYSBzdGFibGUgaGFzaCBiYXNlZCBvbiB0aGUgZmlsZSBwYXRoc1xuICAgIHJldHVybiBGaWxlVHJlZUNvcmUuaGFzaFBhdGhzKHNvdXJjZS5maWxlcyk7XG4gIH1cbn0iLAogICAgIi8qKlxuICogRmlsZVRyZWUgYnVpbGRlciBmb3IgZ2l0IHJlcG9zaXRvcmllc1xuICogQ3JlYXRlcyBGaWxlVHJlZXMgZnJvbSBnaXQgc3RhdGUgaW5mb3JtYXRpb25cbiAqL1xuXG5pbXBvcnQgeyBCYXNlRmlsZVRyZWVCdWlsZGVyLCBGaWxlVHJlZU1ldGFkYXRhLCBGaWxlVHJlZVdpdGhNZXRhZGF0YSB9IGZyb20gJy4uL2ZpbGVUcmVlQnVpbGRlcic7XG5pbXBvcnQgeyBGaWxlVHJlZUNvcmUgfSBmcm9tICcuLi9maWxlVHJlZUNvcmUnO1xuaW1wb3J0IHsgRmlsZUluZm8gfSBmcm9tICcuLi9maWxlVHJlZSc7XG5cbi8qKlxuICogU291cmNlIGRhdGEgZm9yIGJ1aWxkaW5nIGZyb20gZ2l0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2l0U291cmNlIHtcbiAgLyoqIEdpdCBjb21taXQgU0hBICovXG4gIGNvbW1pdFNoYTogc3RyaW5nO1xuXG4gIC8qKiBDdXJyZW50IGJyYW5jaCBuYW1lICovXG4gIGJyYW5jaD86IHN0cmluZztcblxuICAvKiogTGlzdCBvZiBmaWxlcyBpbiB0aGUgcmVwb3NpdG9yeSAqL1xuICBmaWxlczogQXJyYXk8e1xuICAgIHBhdGg6IHN0cmluZztcbiAgICBzaXplPzogbnVtYmVyO1xuICAgIG1vZGU/OiBzdHJpbmc7XG4gICAgbGFzdE1vZGlmaWVkPzogRGF0ZTtcbiAgfT47XG5cbiAgLyoqIFJvb3QgcGF0aCBvZiB0aGUgcmVwb3NpdG9yeSAqL1xuICByb290UGF0aD86IHN0cmluZztcblxuICAvKiogV2hldGhlciB0aGUgd29ya2luZyBkaXJlY3RvcnkgaXMgZGlydHkgKi9cbiAgaXNEaXJ0eT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogRXh0ZW5kZWQgbWV0YWRhdGEgZm9yIGdpdCBzb3VyY2VzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2l0RmlsZVRyZWVNZXRhZGF0YSBleHRlbmRzIEZpbGVUcmVlTWV0YWRhdGEge1xuICBzb3VyY2VJbmZvOiB7XG4gICAgY29tbWl0U2hhOiBzdHJpbmc7XG4gICAgYnJhbmNoPzogc3RyaW5nO1xuICAgIHJvb3RQYXRoOiBzdHJpbmc7XG4gICAgaXNEaXJ0eTogYm9vbGVhbjtcbiAgICBmaWxlQ291bnQ6IG51bWJlcjtcbiAgfTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgRmlsZVRyZWUgZnJvbSBnaXQgcmVwb3NpdG9yeSBpbmZvcm1hdGlvblxuICogSWRlYWwgZm9yIHVzZSB3aXRoIHJlcG9zaXRvcnktbW9uaXRvcmluZ1xuICovXG5leHBvcnQgY2xhc3MgR2l0RmlsZVRyZWVCdWlsZGVyIGV4dGVuZHMgQmFzZUZpbGVUcmVlQnVpbGRlcjxHaXRTb3VyY2U+IHtcbiAgYnVpbGQoc291cmNlOiBHaXRTb3VyY2UpOiBGaWxlVHJlZVdpdGhNZXRhZGF0YSB7XG4gICAgY29uc3QgeyBmaWxlcywgcm9vdFBhdGggPSAnJyB9ID0gc291cmNlO1xuXG4gICAgLy8gQ29udmVydCBnaXQgZmlsZXMgdG8gRmlsZUluZm8gZm9ybWF0XG4gICAgY29uc3QgZmlsZUluZm9zOiBGaWxlSW5mb1tdID0gZmlsZXMubWFwKGZpbGUgPT4gKHtcbiAgICAgIHBhdGg6IGZpbGUucGF0aCxcbiAgICAgIG5hbWU6IHRoaXMuZ2V0RmlsZU5hbWUoZmlsZS5wYXRoKSxcbiAgICAgIGV4dGVuc2lvbjogdGhpcy5nZXRGaWxlRXh0ZW5zaW9uKGZpbGUucGF0aCksXG4gICAgICBzaXplOiBmaWxlLnNpemUgfHwgMCxcbiAgICAgIGxhc3RNb2RpZmllZDogZmlsZS5sYXN0TW9kaWZpZWQgfHwgbmV3IERhdGUoKSxcbiAgICAgIGlzRGlyZWN0b3J5OiBmYWxzZSxcbiAgICAgIHJlbGF0aXZlUGF0aDogdGhpcy5jYWxjdWxhdGVSZWxhdGl2ZVBhdGgoZmlsZS5wYXRoLCByb290UGF0aCksXG4gICAgfSkpO1xuXG4gICAgLy8gVXNlIGNvcmUgdXRpbGl0aWVzIHRvIGJ1aWxkIHRyZWUgc3RydWN0dXJlXG4gICAgY29uc3QgeyByb290LCBhbGxGaWxlcywgYWxsRGlyZWN0b3JpZXMgfSA9IEZpbGVUcmVlQ29yZS5idWlsZFRyZWVGcm9tRmlsZUluZm9zKFxuICAgICAgZmlsZUluZm9zLFxuICAgICAgcm9vdFBhdGhcbiAgICApO1xuXG4gICAgLy8gQ2FsY3VsYXRlIHN0YXRpc3RpY3NcbiAgICBjb25zdCBzdGF0cyA9IEZpbGVUcmVlQ29yZS5jYWxjdWxhdGVTdGF0cyhhbGxGaWxlcywgYWxsRGlyZWN0b3JpZXMpO1xuXG4gICAgLy8gQnVpbGQgdGhlIGNvbXBsZXRlIHRyZWVcbiAgICByZXR1cm4ge1xuICAgICAgc2hhOiB0aGlzLmNhbGN1bGF0ZVNoYShzb3VyY2UpLFxuICAgICAgbWV0YWRhdGE6IHRoaXMuZ2VuZXJhdGVNZXRhZGF0YShzb3VyY2UpIGFzIEdpdEZpbGVUcmVlTWV0YWRhdGEsXG4gICAgICByb290LFxuICAgICAgYWxsRmlsZXMsXG4gICAgICBhbGxEaXJlY3RvcmllcyxcbiAgICAgIHN0YXRzLFxuICAgIH07XG4gIH1cblxuICBnZW5lcmF0ZU1ldGFkYXRhKHNvdXJjZTogR2l0U291cmNlKTogR2l0RmlsZVRyZWVNZXRhZGF0YSB7XG4gICAgY29uc3QgeyBjb21taXRTaGEsIGJyYW5jaCwgZmlsZXMsIHJvb3RQYXRoID0gJycsIGlzRGlydHkgPSBmYWxzZSB9ID0gc291cmNlO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBgZ2l0LSR7Y29tbWl0U2hhfSR7aXNEaXJ0eSA/ICctZGlydHknIDogJyd9LSR7dGhpcy5nZW5lcmF0ZVRpbWVzdGFtcElkKCl9YCxcbiAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKSxcbiAgICAgIHNvdXJjZVR5cGU6ICdnaXQnLFxuICAgICAgc291cmNlU2hhOiBjb21taXRTaGEsXG4gICAgICBzb3VyY2VJbmZvOiB7XG4gICAgICAgIGNvbW1pdFNoYSxcbiAgICAgICAgYnJhbmNoLFxuICAgICAgICByb290UGF0aDogcm9vdFBhdGggfHwgJy4nLFxuICAgICAgICBpc0RpcnR5LFxuICAgICAgICBmaWxlQ291bnQ6IGZpbGVzLmxlbmd0aCxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGNhbGN1bGF0ZVNoYShzb3VyY2U6IEdpdFNvdXJjZSk6IHN0cmluZyB7XG4gICAgLy8gRm9yIGdpdCwgdXNlIHRoZSBjb21taXQgU0hBLCB3aXRoIGRpcnR5IGZsYWcgaWYgYXBwbGljYWJsZVxuICAgIGNvbnN0IHsgY29tbWl0U2hhLCBpc0RpcnR5IH0gPSBzb3VyY2U7XG4gICAgcmV0dXJuIGlzRGlydHkgPyBgJHtjb21taXRTaGF9LWRpcnR5YCA6IGNvbW1pdFNoYTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RmlsZU5hbWUocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBwYXJ0cyA9IHBhdGguc3BsaXQoJy8nKTtcbiAgICByZXR1cm4gcGFydHNbcGFydHMubGVuZ3RoIC0gMV0gfHwgJyc7XG4gIH1cblxuICBwcml2YXRlIGdldEZpbGVFeHRlbnNpb24oZmlsZW5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCFmaWxlbmFtZS5pbmNsdWRlcygnLicpKSByZXR1cm4gJyc7XG4gICAgY29uc3QgcGFydHMgPSBmaWxlbmFtZS5zcGxpdCgnLicpO1xuICAgIHJldHVybiAnLicgKyBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXS50b0xvd2VyQ2FzZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjYWxjdWxhdGVSZWxhdGl2ZVBhdGgoZnVsbFBhdGg6IHN0cmluZywgcm9vdFBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCFyb290UGF0aCB8fCByb290UGF0aCA9PT0gJycgfHwgcm9vdFBhdGggPT09ICcuJykge1xuICAgICAgcmV0dXJuIGZ1bGxQYXRoO1xuICAgIH1cblxuICAgIGlmIChmdWxsUGF0aCA9PT0gcm9vdFBhdGgpIHJldHVybiAnJztcblxuICAgIGlmIChmdWxsUGF0aC5zdGFydHNXaXRoKHJvb3RQYXRoKSkge1xuICAgICAgY29uc3QgcmVsYXRpdmUgPSBmdWxsUGF0aC5zdWJzdHJpbmcocm9vdFBhdGgubGVuZ3RoKTtcbiAgICAgIHJldHVybiByZWxhdGl2ZS5zdGFydHNXaXRoKCcvJykgPyByZWxhdGl2ZS5zdWJzdHJpbmcoMSkgOiByZWxhdGl2ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZnVsbFBhdGg7XG4gIH1cbn0iLAogICAgImltcG9ydCB7IEZpbGVUcmVlIH0gZnJvbSAnLi9maWxlVHJlZSc7XG5cbi8qKlxuICogRmlsZSBUcmVlIFNvdXJjZSBNb2RlbFxuICpcbiAqIFByb3ZpZGVzIHJpY2ggbWV0YWRhdGEgYWJvdXQgdGhlIG9yaWdpbiBvZiBhIEZpbGVUcmVlLlxuICogRGVzaWduZWQgdG8gYmUgcHJvdmlkZXItYWdub3N0aWMgYW5kIHN1cHBvcnQgYm90aCBsb2NhbCBhbmQgcmVtb3RlIHNvdXJjZXMuXG4gKi9cblxuLy8gU291cmNlIHR5cGVzIC0gd2hhdCB3ZSBhY3R1YWxseSB1c2VcbmV4cG9ydCB0eXBlIFNvdXJjZVR5cGUgPSAnbG9jYWwnIHwgJ3JlbW90ZSc7XG5cbi8vIExvY2F0aW9uIHR5cGVzIC0gaG93IHdlIHJlZmVyZW5jZSB0aGUgc291cmNlXG5leHBvcnQgdHlwZSBMb2NhdGlvblR5cGUgPSAncGF0aCcgfCAnYnJhbmNoJyB8ICd0YWcnIHwgJ2NvbW1pdCcgfCAnd29ya2luZyc7XG5cbi8vIFByb3ZpZGVyIHR5cGVzIC0ga2VwdCBzaW1wbGUsIGV4cGFuZCBvbmx5IHdoZW4gbmVlZGVkXG5leHBvcnQgdHlwZSBQcm92aWRlclR5cGUgPSAnZ2l0aHViJyB8ICdnaXRsYWInIHwgJ2dlbmVyaWMnIHwgJ2xvY2FsJztcblxuLyoqXG4gKiBDb3JlIGZpbGUgdHJlZSBzb3VyY2UgZGVzY3JpcHRvclxuICogUmVwcmVzZW50cyBhIHNvdXJjZSB0aGF0IGNhbiBiZSByZXNvbHZlZCB0byBhIEZpbGVUcmVlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlsZVRyZWVTb3VyY2Uge1xuICAvLyBJZGVudGl0eVxuICBpZDogc3RyaW5nOyAvLyBTaW1wbGUgdW5pcXVlIElEIChlLmcuLCBcImxvY2FsLS9wYXRoL3RvL3JlcG9cIiBvciBcImdpdGh1Yi1vd25lci1yZXBvLW1haW5cIilcbiAgdHlwZTogU291cmNlVHlwZTsgLy8gJ2xvY2FsJyBvciAncmVtb3RlJ1xuXG4gIC8vIFJlcG9zaXRvcnkgaWRlbnRpdHlcbiAgb3duZXI6IHN0cmluZzsgLy8gUmVwb3NpdG9yeSBvd25lci9vcmdhbml6YXRpb25cbiAgbmFtZTogc3RyaW5nOyAvLyBSZXBvc2l0b3J5IG5hbWVcbiAgcmVtb3RlVXJsOiBzdHJpbmc7IC8vIFRoZSByZW1vdGUgVVJMIChmb3IgYm90aCBsb2NhbCBjbG9uZXMgYW5kIHJlbW90ZSBzb3VyY2VzKVxuXG4gIC8vIFNvdXJjZSBsb2NhdGlvblxuICBsb2NhdGlvbjogc3RyaW5nOyAvLyBQYXRoIGZvciBsb2NhbCwgYnJhbmNoL3RhZy9jb21taXQgZm9yIHJlbW90ZVxuICBsb2NhdGlvblR5cGU6IExvY2F0aW9uVHlwZTsgLy8gSG93IHRvIGludGVycHJldCB0aGUgbG9jYXRpb25cblxuICAvLyBEaXNwbGF5ICYgVUlcbiAgbGFiZWw6IHN0cmluZzsgLy8gSHVtYW4tZnJpZW5kbHkgZGlzcGxheSBuYW1lXG4gIGNvbG9yPzogc3RyaW5nOyAvLyBPcHRpb25hbCBjb2xvciBmb3IgVUkgZGlmZmVyZW50aWF0aW9uXG4gIGljb24/OiBzdHJpbmc7IC8vIE9wdGlvbmFsIGljb24gaWRlbnRpZmllclxuXG4gIC8vIFN0YXRlICYgbWV0YWRhdGFcbiAgaXNUZW1wb3Jhcnk/OiBib29sZWFuOyAvLyBUcnVlIGZvciB1bnNhdmVkL2V4cGVyaW1lbnRhbCBzb3VyY2VzXG4gIGlzRGVmYXVsdD86IGJvb2xlYW47IC8vIFRydWUgZm9yIHRoZSBkZWZhdWx0IHNvdXJjZSBpbiBhIHNldFxuICBsYXN0QWNjZXNzZWQ/OiBudW1iZXI7IC8vIFRpbWVzdGFtcCBvZiBsYXN0IGFjY2Vzc1xuICBjcmVhdGVkQXQ/OiBudW1iZXI7IC8vIFdoZW4gdGhpcyBzb3VyY2Ugd2FzIGNyZWF0ZWRcblxuICAvLyBQcm92aWRlciBpbmZvIChvcHRpb25hbCwgbWFpbmx5IGZvciByZW1vdGVzKVxuICBwcm92aWRlcj86IFByb3ZpZGVyVHlwZTsgLy8gV2hpY2ggcHJvdmlkZXIgKGdpdGh1YiwgZ2l0bGFiLCBldGMuKVxuICBhcGlVcmw/OiBzdHJpbmc7IC8vIEFQSSBlbmRwb2ludCBmb3IgcmVtb3RlIHNvdXJjZXNcblxuICAvLyBBZGRpdGlvbmFsIG1ldGFkYXRhXG4gIG1ldGFkYXRhPzoge1xuICAgIGN1cnJlbnRCcmFuY2g/OiBzdHJpbmc7IC8vIEZvciBsb2NhbCB3b3JraW5nIGNvcGllc1xuICAgIGNvbW1pdFNoYT86IHN0cmluZzsgLy8gU3BlY2lmaWMgY29tbWl0IGlmIGxvY2tlZCB0byBvbmVcbiAgICBpc0RpcnR5PzogYm9vbGVhbjsgLy8gRm9yIGxvY2FsIHNvdXJjZXMgd2l0aCB1bmNvbW1pdHRlZCBjaGFuZ2VzXG4gICAgc3ViZGlyPzogc3RyaW5nOyAvLyBJZiBmb2N1c2luZyBvbiBhIHN1YmRpcmVjdG9yeSAobW9ub3JlcG8gc3VwcG9ydClcbiAgICBba2V5OiBzdHJpbmddOiB1bmtub3duOyAvLyBFeHRlbnNpYmxlIGZvciBmdXR1cmUgbmVlZHNcbiAgfTtcbn1cblxuLyoqXG4gKiBTdGF0aXN0aWNzIGFib3V0IGEgbG9hZGVkIGZpbGUgdHJlZSBzb3VyY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTb3VyY2VUcmVlU3RhdHMge1xuICBmaWxlQ291bnQ6IG51bWJlcjtcbiAgZGlyZWN0b3J5Q291bnQ6IG51bWJlcjtcbiAgbG9hZGVkQXQ6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBFeHRlbmRlZCBzb3VyY2Ugd2l0aCBsb2FkZWQgdHJlZSBkYXRhXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9hZGVkRmlsZVRyZWVTb3VyY2UgZXh0ZW5kcyBGaWxlVHJlZVNvdXJjZSB7XG4gIHRyZWU6IEZpbGVUcmVlOyAvLyBUaGUgbG9hZGVkIEZpbGVUcmVlXG4gIHRyZWVTdGF0czogU291cmNlVHJlZVN0YXRzO1xuICBmaWx0ZXJMYXllcnM/OiBhbnlbXTsgLy8gRmlsdGVyIGxheWVycyB0aGF0IHdlcmUgYXBwbGllZFxufVxuXG4vKipcbiAqIEZhY3RvcnkgZnVuY3Rpb25zIGZvciBjcmVhdGluZyBzb3VyY2VzXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVGaWxlVHJlZVNvdXJjZSA9IHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIGxvY2FsIGZpbGUgdHJlZSBzb3VyY2UgKHdvcmtpbmcgY29weSlcbiAgICovXG4gIGxvY2FsV29ya2luZ0NvcHkoXG4gICAgcGF0aDogc3RyaW5nLFxuICAgIG93bmVyOiBzdHJpbmcsXG4gICAgcmVwbzogc3RyaW5nLFxuICAgIHJlbW90ZVVybDogc3RyaW5nLFxuICAgIGN1cnJlbnRCcmFuY2g/OiBzdHJpbmcsXG4gICk6IEZpbGVUcmVlU291cmNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGBsb2NhbC0ke3BhdGh9YCxcbiAgICAgIHR5cGU6ICdsb2NhbCcsXG4gICAgICBvd25lcixcbiAgICAgIG5hbWU6IHJlcG8sXG4gICAgICByZW1vdGVVcmwsXG4gICAgICBsb2NhdGlvbjogcGF0aCxcbiAgICAgIGxvY2F0aW9uVHlwZTogJ3dvcmtpbmcnLFxuICAgICAgbGFiZWw6IGBMb2NhbDogJHtyZXBvfSR7Y3VycmVudEJyYW5jaCA/IGAgKCR7Y3VycmVudEJyYW5jaH0pYCA6ICcnfWAsXG4gICAgICBwcm92aWRlcjogJ2xvY2FsJyxcbiAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgIGN1cnJlbnRCcmFuY2gsXG4gICAgICB9LFxuICAgIH07XG4gIH0sXG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIHJlbW90ZSBicmFuY2ggc291cmNlIChHaXRIdWIsIGV0Yy4pXG4gICAqL1xuICByZW1vdGVCcmFuY2goXG4gICAgb3duZXI6IHN0cmluZyxcbiAgICByZXBvOiBzdHJpbmcsXG4gICAgcmVtb3RlVXJsOiBzdHJpbmcsXG4gICAgYnJhbmNoOiBzdHJpbmcsXG4gICAgcHJvdmlkZXI6IFByb3ZpZGVyVHlwZSA9ICdnaXRodWInLFxuICApOiBGaWxlVHJlZVNvdXJjZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBgJHtwcm92aWRlcn0tJHtvd25lcn0tJHtyZXBvfS0ke2JyYW5jaH1gLFxuICAgICAgdHlwZTogJ3JlbW90ZScsXG4gICAgICBvd25lcixcbiAgICAgIG5hbWU6IHJlcG8sXG4gICAgICByZW1vdGVVcmwsXG4gICAgICBsb2NhdGlvbjogYnJhbmNoLFxuICAgICAgbG9jYXRpb25UeXBlOiAnYnJhbmNoJyxcbiAgICAgIGxhYmVsOiBgJHtyZXBvfUAke2JyYW5jaH1gLFxuICAgICAgcHJvdmlkZXIsXG4gICAgICBhcGlVcmw6IHByb3ZpZGVyID09PSAnZ2l0aHViJyA/ICdodHRwczovL2FwaS5naXRodWIuY29tJyA6IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9LFxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSByZW1vdGUgdGFnIHNvdXJjZVxuICAgKi9cbiAgcmVtb3RlVGFnKFxuICAgIG93bmVyOiBzdHJpbmcsXG4gICAgcmVwbzogc3RyaW5nLFxuICAgIHJlbW90ZVVybDogc3RyaW5nLFxuICAgIHRhZzogc3RyaW5nLFxuICAgIHByb3ZpZGVyOiBQcm92aWRlclR5cGUgPSAnZ2l0aHViJyxcbiAgKTogRmlsZVRyZWVTb3VyY2Uge1xuICAgIHJldHVybiB7XG4gICAgICBpZDogYCR7cHJvdmlkZXJ9LSR7b3duZXJ9LSR7cmVwb30tdGFnLSR7dGFnfWAsXG4gICAgICB0eXBlOiAncmVtb3RlJyxcbiAgICAgIG93bmVyLFxuICAgICAgbmFtZTogcmVwbyxcbiAgICAgIHJlbW90ZVVybCxcbiAgICAgIGxvY2F0aW9uOiB0YWcsXG4gICAgICBsb2NhdGlvblR5cGU6ICd0YWcnLFxuICAgICAgbGFiZWw6IGAke3JlcG99QCR7dGFnfWAsXG4gICAgICBwcm92aWRlcixcbiAgICAgIGFwaVVybDogcHJvdmlkZXIgPT09ICdnaXRodWInID8gJ2h0dHBzOi8vYXBpLmdpdGh1Yi5jb20nIDogdW5kZWZpbmVkLFxuICAgIH07XG4gIH0sXG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIHJlbW90ZSBjb21taXQgc291cmNlXG4gICAqL1xuICByZW1vdGVDb21taXQoXG4gICAgb3duZXI6IHN0cmluZyxcbiAgICByZXBvOiBzdHJpbmcsXG4gICAgcmVtb3RlVXJsOiBzdHJpbmcsXG4gICAgY29tbWl0U2hhOiBzdHJpbmcsXG4gICAgcHJvdmlkZXI6IFByb3ZpZGVyVHlwZSA9ICdnaXRodWInLFxuICApOiBGaWxlVHJlZVNvdXJjZSB7XG4gICAgY29uc3Qgc2hvcnRTaGEgPSBjb21taXRTaGEuc3Vic3RyaW5nKDAsIDcpO1xuICAgIHJldHVybiB7XG4gICAgICBpZDogYCR7cHJvdmlkZXJ9LSR7b3duZXJ9LSR7cmVwb30tY29tbWl0LSR7c2hvcnRTaGF9YCxcbiAgICAgIHR5cGU6ICdyZW1vdGUnLFxuICAgICAgb3duZXIsXG4gICAgICBuYW1lOiByZXBvLFxuICAgICAgcmVtb3RlVXJsLFxuICAgICAgbG9jYXRpb246IGNvbW1pdFNoYSxcbiAgICAgIGxvY2F0aW9uVHlwZTogJ2NvbW1pdCcsXG4gICAgICBsYWJlbDogYCR7cmVwb31AJHtzaG9ydFNoYX1gLFxuICAgICAgcHJvdmlkZXIsXG4gICAgICBhcGlVcmw6IHByb3ZpZGVyID09PSAnZ2l0aHViJyA/ICdodHRwczovL2FwaS5naXRodWIuY29tJyA6IHVuZGVmaW5lZCxcbiAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgIGNvbW1pdFNoYSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfSxcblxuICAvKipcbiAgICogQ3JlYXRlIGEgdGVtcG9yYXJ5L2V4cGVyaW1lbnRhbCBzb3VyY2VcbiAgICovXG4gIHRlbXBvcmFyeShcbiAgICBiYXNlU291cmNlOiBGaWxlVHJlZVNvdXJjZSxcbiAgICBsb2NhdGlvbjogc3RyaW5nLFxuICAgIGxvY2F0aW9uVHlwZTogTG9jYXRpb25UeXBlLFxuICApOiBGaWxlVHJlZVNvdXJjZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmJhc2VTb3VyY2UsXG4gICAgICBpZDogYHRlbXAtJHtiYXNlU291cmNlLmlkfS0ke0RhdGUubm93KCl9YCxcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgbG9jYXRpb25UeXBlLFxuICAgICAgbGFiZWw6IGAke2Jhc2VTb3VyY2UubGFiZWx9ICh0ZW1wb3JhcnkpYCxcbiAgICAgIGlzVGVtcG9yYXJ5OiB0cnVlLFxuICAgICAgY3JlYXRlZEF0OiBEYXRlLm5vdygpLFxuICAgIH07XG4gIH0sXG59O1xuXG4vKipcbiAqIFR5cGUgZ3VhcmRzXG4gKi9cbmV4cG9ydCBjb25zdCBpc0xvY2FsU291cmNlID0gKHNvdXJjZTogRmlsZVRyZWVTb3VyY2UpOiBib29sZWFuID0+XG4gIHNvdXJjZS50eXBlID09PSAnbG9jYWwnO1xuZXhwb3J0IGNvbnN0IGlzUmVtb3RlU291cmNlID0gKHNvdXJjZTogRmlsZVRyZWVTb3VyY2UpOiBib29sZWFuID0+XG4gIHNvdXJjZS50eXBlID09PSAncmVtb3RlJztcbmV4cG9ydCBjb25zdCBpc1RlbXBvcmFyeVNvdXJjZSA9IChzb3VyY2U6IEZpbGVUcmVlU291cmNlKTogYm9vbGVhbiA9PlxuICBzb3VyY2UuaXNUZW1wb3JhcnkgPT09IHRydWU7XG5leHBvcnQgY29uc3QgaXNHaXRIdWJTb3VyY2UgPSAoc291cmNlOiBGaWxlVHJlZVNvdXJjZSk6IGJvb2xlYW4gPT5cbiAgc291cmNlLnByb3ZpZGVyID09PSAnZ2l0aHViJztcblxuLyoqXG4gKiBVdGlsaXR5IGZ1bmN0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U291cmNlRGlzcGxheU5hbWUoc291cmNlOiBGaWxlVHJlZVNvdXJjZSk6IHN0cmluZyB7XG4gIGlmIChzb3VyY2UubGFiZWwpIHJldHVybiBzb3VyY2UubGFiZWw7XG5cbiAgY29uc3QgcHJlZml4ID0gc291cmNlLnR5cGUgPT09ICdsb2NhbCcgPyAnTG9jYWw6ICcgOiAnJztcbiAgY29uc3Qgc3VmZml4ID1cbiAgICBzb3VyY2UubG9jYXRpb25UeXBlID09PSAnYnJhbmNoJ1xuICAgICAgPyBgQCR7c291cmNlLmxvY2F0aW9ufWBcbiAgICAgIDogc291cmNlLmxvY2F0aW9uVHlwZSA9PT0gJ3RhZydcbiAgICAgICAgPyBgQCR7c291cmNlLmxvY2F0aW9ufWBcbiAgICAgICAgOiBzb3VyY2UubG9jYXRpb25UeXBlID09PSAnY29tbWl0J1xuICAgICAgICAgID8gYEAke3NvdXJjZS5sb2NhdGlvbi5zdWJzdHJpbmcoMCwgNyl9YFxuICAgICAgICAgIDogJyc7XG5cbiAgcmV0dXJuIGAke3ByZWZpeH0ke3NvdXJjZS5uYW1lfSR7c3VmZml4fWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTb3VyY2VJZGVudGlmaWVyKHNvdXJjZTogRmlsZVRyZWVTb3VyY2UpOiBzdHJpbmcge1xuICAvLyBSZXR1cm5zIGEgc3RhYmxlIGlkZW50aWZpZXIgZm9yIGRlZHVwbGljYXRpb25cbiAgaWYgKHNvdXJjZS50eXBlID09PSAnbG9jYWwnKSB7XG4gICAgcmV0dXJuIGBsb2NhbDoke3NvdXJjZS5sb2NhdGlvbn1gO1xuICB9XG4gIHJldHVybiBgJHtzb3VyY2UucHJvdmlkZXJ9OiR7c291cmNlLm93bmVyfS8ke3NvdXJjZS5uYW1lfToke3NvdXJjZS5sb2NhdGlvblR5cGV9OiR7c291cmNlLmxvY2F0aW9ufWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaG91bGRDYWNoZVNvdXJjZShzb3VyY2U6IEZpbGVUcmVlU291cmNlKTogYm9vbGVhbiB7XG4gIC8vIFRlbXBvcmFyeSBzb3VyY2VzIG1pZ2h0IG5vdCBuZWVkIGNhY2hpbmcsIG9yIG5lZWQgc2hvcnRlciBUVExcbiAgcmV0dXJuICFzb3VyY2UuaXNUZW1wb3Jhcnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTb3VyY2VDYWNoZVRUTChzb3VyY2U6IEZpbGVUcmVlU291cmNlKTogbnVtYmVyIHtcbiAgLy8gQ2FjaGUgVFRMIGluIG1pbGxpc2Vjb25kc1xuICBpZiAoc291cmNlLmlzVGVtcG9yYXJ5KSByZXR1cm4gNSAqIDYwICogMTAwMDsgLy8gNSBtaW51dGVzIGZvciB0ZW1wb3JhcnlcbiAgaWYgKHNvdXJjZS50eXBlID09PSAnbG9jYWwnKSByZXR1cm4gMTAgKiA2MCAqIDEwMDA7IC8vIDEwIG1pbnV0ZXMgZm9yIGxvY2FsXG4gIGlmIChzb3VyY2UubG9jYXRpb25UeXBlID09PSAnY29tbWl0JykgcmV0dXJuIDYwICogNjAgKiAxMDAwOyAvLyAxIGhvdXIgZm9yIGNvbW1pdHMgKGltbXV0YWJsZSlcbiAgcmV0dXJuIDMwICogNjAgKiAxMDAwOyAvLyAzMCBtaW51dGVzIGRlZmF1bHRcbn1cblxuLyoqXG4gKiBTb3VyY2UgY29tcGFyaXNvbiBmb3Igc29ydGluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcGFyZUZpbGVUcmVlU291cmNlcyhcbiAgYTogRmlsZVRyZWVTb3VyY2UsXG4gIGI6IEZpbGVUcmVlU291cmNlLFxuKTogbnVtYmVyIHtcbiAgLy8gU29ydCBvcmRlcjogZGVmYXVsdCBmaXJzdCwgdGhlbiBsb2NhbCwgdGhlbiByZW1vdGUsIHRoZW4gYnkgbGFiZWxcbiAgaWYgKGEuaXNEZWZhdWx0ICYmICFiLmlzRGVmYXVsdCkgcmV0dXJuIC0xO1xuICBpZiAoIWEuaXNEZWZhdWx0ICYmIGIuaXNEZWZhdWx0KSByZXR1cm4gMTtcbiAgaWYgKGEudHlwZSA9PT0gJ2xvY2FsJyAmJiBiLnR5cGUgPT09ICdyZW1vdGUnKSByZXR1cm4gLTE7XG4gIGlmIChhLnR5cGUgPT09ICdyZW1vdGUnICYmIGIudHlwZSA9PT0gJ2xvY2FsJykgcmV0dXJuIDE7XG4gIHJldHVybiBhLmxhYmVsLmxvY2FsZUNvbXBhcmUoYi5sYWJlbCk7XG59XG4iLAogICAgIi8qKlxuICogSW4tbWVtb3J5IGltcGxlbWVudGF0aW9uIG9mIEZpbGVTeXN0ZW1BZGFwdGVyIGZvciB0ZXN0aW5nXG4gKiBUaGlzIGFsbG93cyB0ZXN0cyB0byBydW4gd2l0aG91dCB0b3VjaGluZyB0aGUgcmVhbCBmaWxlc3lzdGVtLFxuICogbWFraW5nIHRoZW0gZmFzdGVyIGFuZCBtb3JlIHJlbGlhYmxlLlxuICovXG5cbmltcG9ydCB7IEZpbGVTeXN0ZW1BZGFwdGVyIH0gZnJvbSBcIi4vRmlsZVN5c3RlbUFkYXB0ZXJcIjtcblxuZXhwb3J0IGNsYXNzIEluTWVtb3J5RmlsZVN5c3RlbUFkYXB0ZXIgaW1wbGVtZW50cyBGaWxlU3lzdGVtQWRhcHRlciB7XG4gIHByaXZhdGUgZmlsZXMgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICBwcml2YXRlIGJpbmFyeUZpbGVzID0gbmV3IE1hcDxzdHJpbmcsIFVpbnQ4QXJyYXk+KCk7XG5cbiAgZXhpc3RzKHBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmZpbGVzLmhhcyhwYXRoKSB8fFxuICAgICAgdGhpcy5iaW5hcnlGaWxlcy5oYXMocGF0aCkgfHxcbiAgICAgIHRoaXMuaXNEaXJlY3RvcnkocGF0aClcbiAgICApO1xuICB9XG5cbiAgcmVhZEZpbGUocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5maWxlcy5nZXQocGF0aCk7XG4gICAgaWYgKGNvbnRlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGaWxlIG5vdCBmb3VuZDogJHtwYXRofWApO1xuICAgIH1cbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuXG4gIHdyaXRlRmlsZShwYXRoOiBzdHJpbmcsIGNvbnRlbnQ6IHN0cmluZyk6IHZvaWQge1xuICAgIC8vIEVuc3VyZSBwYXJlbnQgZGlyZWN0b3J5IGV4aXN0cyBpbiBvdXIgdHJhY2tpbmdcbiAgICBjb25zdCBkaXIgPSB0aGlzLmRpcm5hbWUocGF0aCk7XG4gICAgaWYgKGRpciAmJiBkaXIgIT09IFwiL1wiICYmIGRpciAhPT0gcGF0aCkge1xuICAgICAgdGhpcy5jcmVhdGVEaXIoZGlyKTtcbiAgICB9XG4gICAgdGhpcy5maWxlcy5zZXQocGF0aCwgY29udGVudCk7XG4gIH1cblxuICBkZWxldGVGaWxlKHBhdGg6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuZmlsZXMuZGVsZXRlKHBhdGgpO1xuICAgIHRoaXMuYmluYXJ5RmlsZXMuZGVsZXRlKHBhdGgpO1xuICB9XG5cbiAgcmVhZEJpbmFyeUZpbGUocGF0aDogc3RyaW5nKTogVWludDhBcnJheSB7XG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuYmluYXJ5RmlsZXMuZ2V0KHBhdGgpO1xuICAgIGlmIChjb250ZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQmluYXJ5IGZpbGUgbm90IGZvdW5kOiAke3BhdGh9YCk7XG4gICAgfVxuICAgIHJldHVybiBjb250ZW50O1xuICB9XG5cbiAgd3JpdGVCaW5hcnlGaWxlKHBhdGg6IHN0cmluZywgY29udGVudDogVWludDhBcnJheSk6IHZvaWQge1xuICAgIC8vIEVuc3VyZSBwYXJlbnQgZGlyZWN0b3J5IGV4aXN0cyBpbiBvdXIgdHJhY2tpbmdcbiAgICBjb25zdCBkaXIgPSB0aGlzLmRpcm5hbWUocGF0aCk7XG4gICAgaWYgKGRpciAmJiBkaXIgIT09IFwiL1wiICYmIGRpciAhPT0gcGF0aCkge1xuICAgICAgdGhpcy5jcmVhdGVEaXIoZGlyKTtcbiAgICB9XG4gICAgdGhpcy5iaW5hcnlGaWxlcy5zZXQocGF0aCwgY29udGVudCk7XG4gIH1cblxuICBjcmVhdGVEaXIocGF0aDogc3RyaW5nKTogdm9pZCB7XG4gICAgLy8gSW4gbWVtb3J5LCBkaXJlY3RvcmllcyBhcmUgaW1wbGljaXRcbiAgICAvLyBXZSB0cmFjayB0aGVtIGJ5IGVuc3VyaW5nIHRoZXkgYXBwZWFyIGluIHJlYWREaXIgcmVzdWx0c1xuICAgIGlmICghcGF0aCB8fCBwYXRoID09PSBcIi9cIikgcmV0dXJuO1xuXG4gICAgLy8gQWRkIGEgbWFya2VyIGZvciB0aGUgZGlyZWN0b3J5XG4gICAgdGhpcy5maWxlcy5zZXQocGF0aCArIFwiLy5kaXJcIiwgXCJcIik7XG4gIH1cblxuICByZWFkRGlyKHBhdGg6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAvLyBDaGVjayBpZiB0aGlzIHBhdGggaXMgYWN0dWFsbHkgYSBmaWxlIChub3QgYSBkaXJlY3RvcnkpXG4gICAgaWYgKFxuICAgICAgKHRoaXMuZmlsZXMuaGFzKHBhdGgpIHx8IHRoaXMuYmluYXJ5RmlsZXMuaGFzKHBhdGgpKSAmJlxuICAgICAgIXBhdGguZW5kc1dpdGgoXCIvLmRpclwiKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFTk9URElSOiBub3QgYSBkaXJlY3RvcnksIHNjYW5kaXIgJyR7cGF0aH0nYCk7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIGRpcmVjdG9yeSBleGlzdHNcbiAgICBpZiAoIXRoaXMuaXNEaXJlY3RvcnkocGF0aCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRU5PRU5UOiBubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5LCBzY2FuZGlyICcke3BhdGh9J2ApO1xuICAgIH1cblxuICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gcGF0aC5lbmRzV2l0aChcIi9cIikgPyBwYXRoLnNsaWNlKDAsIC0xKSA6IHBhdGg7XG4gICAgY29uc3QgcHJlZml4ID0gbm9ybWFsaXplZFBhdGggPT09IFwiL1wiID8gXCJcIiA6IGAke25vcm1hbGl6ZWRQYXRofS9gO1xuICAgIGNvbnN0IGl0ZW1zID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICBmb3IgKGNvbnN0IGZpbGVQYXRoIG9mIHRoaXMuZmlsZXMua2V5cygpKSB7XG4gICAgICBpZiAoZmlsZVBhdGguc3RhcnRzV2l0aChwcmVmaXgpKSB7XG4gICAgICAgIGNvbnN0IHJlbGF0aXZlUGF0aCA9IGZpbGVQYXRoLnNsaWNlKHByZWZpeC5sZW5ndGgpO1xuICAgICAgICBpZiAocmVsYXRpdmVQYXRoKSB7XG4gICAgICAgICAgLy8gU2tpcCAuZGlyIG1hcmtlcnMgYXQgdGhlIGN1cnJlbnQgbGV2ZWxcbiAgICAgICAgICBpZiAocmVsYXRpdmVQYXRoID09PSBcIi5kaXJcIikge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhIHN1YmRpcmVjdG9yeSAuZGlyIG1hcmtlclxuICAgICAgICAgIGlmIChyZWxhdGl2ZVBhdGguZW5kc1dpdGgoXCIvLmRpclwiKSkge1xuICAgICAgICAgICAgLy8gVGhpcyBpbmRpY2F0ZXMgYSBzdWJkaXJlY3RvcnkgZXhpc3RzLCBhZGQgaXQgd2l0aG91dCB0aGUgLmRpclxuICAgICAgICAgICAgY29uc3QgZGlyTmFtZSA9IHJlbGF0aXZlUGF0aC5zbGljZSgwLCAtNSkuc3BsaXQoXCIvXCIpWzBdO1xuICAgICAgICAgICAgaWYgKGRpck5hbWUpIHtcbiAgICAgICAgICAgICAgaXRlbXMuYWRkKGRpck5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBHZXQgdGhlIGZpcnN0IHNlZ21lbnQgKGVpdGhlciBhIGZpbGUgb3IgZGlyZWN0b3J5IG5hbWUpXG4gICAgICAgICAgICBjb25zdCBmaXJzdFNlZ21lbnQgPSByZWxhdGl2ZVBhdGguc3BsaXQoXCIvXCIpWzBdO1xuICAgICAgICAgICAgaWYgKGZpcnN0U2VnbWVudCAmJiBmaXJzdFNlZ21lbnQgIT09IFwiLmRpclwiKSB7XG4gICAgICAgICAgICAgIGl0ZW1zLmFkZChmaXJzdFNlZ21lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFsc28gY2hlY2sgYmluYXJ5IGZpbGVzXG4gICAgZm9yIChjb25zdCBmaWxlUGF0aCBvZiB0aGlzLmJpbmFyeUZpbGVzLmtleXMoKSkge1xuICAgICAgaWYgKGZpbGVQYXRoLnN0YXJ0c1dpdGgocHJlZml4KSkge1xuICAgICAgICBjb25zdCByZWxhdGl2ZVBhdGggPSBmaWxlUGF0aC5zbGljZShwcmVmaXgubGVuZ3RoKTtcbiAgICAgICAgaWYgKHJlbGF0aXZlUGF0aCkge1xuICAgICAgICAgIGNvbnN0IHBhcnRzID0gcmVsYXRpdmVQYXRoLnNwbGl0KFwiL1wiKTtcbiAgICAgICAgICBpZiAocGFydHNbMF0pIHtcbiAgICAgICAgICAgIGl0ZW1zLmFkZChwYXJ0c1swXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIEFycmF5LmZyb20oaXRlbXMpO1xuICB9XG5cbiAgZGVsZXRlRGlyKHBhdGg6IHN0cmluZyk6IHZvaWQge1xuICAgIC8vIEluIG1lbW9yeSwganVzdCByZW1vdmUgYWxsIGZpbGVzIGluIHRoZSBkaXJlY3RvcnlcbiAgICBjb25zdCBwcmVmaXggPSBgJHtwYXRofS9gO1xuICAgIGZvciAoY29uc3QgZmlsZVBhdGggb2YgdGhpcy5maWxlcy5rZXlzKCkpIHtcbiAgICAgIGlmIChmaWxlUGF0aC5zdGFydHNXaXRoKHByZWZpeCkgfHwgZmlsZVBhdGggPT09IHBhdGggKyBcIi8uZGlyXCIpIHtcbiAgICAgICAgdGhpcy5maWxlcy5kZWxldGUoZmlsZVBhdGgpO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IGZpbGVQYXRoIG9mIHRoaXMuYmluYXJ5RmlsZXMua2V5cygpKSB7XG4gICAgICBpZiAoZmlsZVBhdGguc3RhcnRzV2l0aChwcmVmaXgpKSB7XG4gICAgICAgIHRoaXMuYmluYXJ5RmlsZXMuZGVsZXRlKGZpbGVQYXRoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBqb2luKC4uLnBhdGhzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHBhdGhzLmpvaW4oXCIvXCIpLnJlcGxhY2UoL1xcLysvZywgXCIvXCIpLnJlcGxhY2UoL1xcLyQvLCBcIlwiKSB8fCBcIi9cIjtcbiAgfVxuXG4gIGRpcm5hbWUocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBsYXN0U2xhc2ggPSBwYXRoLmxhc3RJbmRleE9mKFwiL1wiKTtcbiAgICByZXR1cm4gbGFzdFNsYXNoIDw9IDAgPyBcIi9cIiA6IHBhdGguc2xpY2UoMCwgbGFzdFNsYXNoKTtcbiAgfVxuXG4gIGlzQWJzb2x1dGUocGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHBhdGguc3RhcnRzV2l0aChcIi9cIik7XG4gIH1cblxuICByZWxhdGl2ZShmcm9tOiBzdHJpbmcsIHRvOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIC8vIFNpbXBsZSBpbXBsZW1lbnRhdGlvbiBmb3IgdGVzdGluZ1xuICAgIGlmICh0by5zdGFydHNXaXRoKGZyb20pKSB7XG4gICAgICByZXR1cm4gdG8uc2xpY2UoZnJvbS5sZW5ndGggKyAxKTtcbiAgICB9XG4gICAgcmV0dXJuIHRvO1xuICB9XG5cbiAgaXNEaXJlY3RvcnkocGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgLy8gQ2hlY2sgaWYgd2UgaGF2ZSBhIGRpcmVjdG9yeSBtYXJrZXJcbiAgICBpZiAodGhpcy5maWxlcy5oYXMocGF0aCArIFwiLy5kaXJcIikpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIGFueSBmaWxlcyBleGlzdCB1bmRlciB0aGlzIHBhdGhcbiAgICBjb25zdCBwcmVmaXggPSBgJHtwYXRofS9gO1xuICAgIGZvciAoY29uc3QgZmlsZVBhdGggb2YgdGhpcy5maWxlcy5rZXlzKCkpIHtcbiAgICAgIGlmIChmaWxlUGF0aC5zdGFydHNXaXRoKHByZWZpeCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAoY29uc3QgZmlsZVBhdGggb2YgdGhpcy5iaW5hcnlGaWxlcy5rZXlzKCkpIHtcbiAgICAgIGlmIChmaWxlUGF0aC5zdGFydHNXaXRoKHByZWZpeCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIFJlcG9zaXRvcnkgb3BlcmF0aW9uc1xuICBub3JtYWxpemVSZXBvc2l0b3J5UGF0aChpbnB1dFBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgLy8gRm9yIHRlc3RpbmcsIGp1c3QgZmluZCB0aGUgY2xvc2VzdCBwYXJlbnQgZGlyZWN0b3J5IHdpdGggLmdpdFxuICAgIGxldCBjdXJyZW50ID0gaW5wdXRQYXRoO1xuICAgIHdoaWxlIChjdXJyZW50ICYmIGN1cnJlbnQgIT09IFwiL1wiKSB7XG4gICAgICBpZiAodGhpcy5leGlzdHModGhpcy5qb2luKGN1cnJlbnQsIFwiLmdpdFwiKSkpIHtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9XG4gICAgICBjdXJyZW50ID0gdGhpcy5kaXJuYW1lKGN1cnJlbnQpO1xuICAgIH1cblxuICAgIC8vIElmIG5vIC5naXQgZm91bmQsIHRocm93IGFuIGVycm9yXG4gICAgdGhyb3cgbmV3IEVycm9yKGBOb3QgYSBnaXQgcmVwb3NpdG9yeTogJHtpbnB1dFBhdGh9YCk7XG4gIH1cblxuICBmaW5kUHJvamVjdFJvb3QoaW5wdXRQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLm5vcm1hbGl6ZVJlcG9zaXRvcnlQYXRoKGlucHV0UGF0aCk7XG4gIH1cblxuICBnZXRSZXBvc2l0b3J5TmFtZShyZXBvc2l0b3J5UGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBzZWdtZW50cyA9IHJlcG9zaXRvcnlQYXRoLnNwbGl0KFwiL1wiKS5maWx0ZXIoKHMpID0+IHMpO1xuICAgIHJldHVybiBzZWdtZW50c1tzZWdtZW50cy5sZW5ndGggLSAxXSB8fCBcInJvb3RcIjtcbiAgfVxuXG4gIC8vIFRlc3QgdXRpbGl0aWVzXG4gIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuZmlsZXMuY2xlYXIoKTtcbiAgICB0aGlzLmJpbmFyeUZpbGVzLmNsZWFyKCk7XG4gIH1cblxuICBnZXRGaWxlcygpOiBNYXA8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICByZXR1cm4gbmV3IE1hcCh0aGlzLmZpbGVzKTtcbiAgfVxuXG4gIC8vIEhlbHBlciB0byBzZXQgdXAgYSB0ZXN0IHJlcG9zaXRvcnkgc3RydWN0dXJlXG4gIHNldHVwVGVzdFJlcG8ocmVwb1BhdGg6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuY3JlYXRlRGlyKHJlcG9QYXRoKTtcbiAgICB0aGlzLmNyZWF0ZURpcih0aGlzLmpvaW4ocmVwb1BhdGgsIFwiLmdpdFwiKSk7XG4gICAgdGhpcy5jcmVhdGVEaXIodGhpcy5qb2luKHJlcG9QYXRoLCBcIi5hbGV4YW5kcmlhXCIpKTtcbiAgfVxuXG4gIC8vIEhlbHBlciB0byBkZWJ1ZyB3aGF0J3MgaW4gdGhlIGZpbGVzeXN0ZW1cbiAgZGVidWcoKTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coXCJJbk1lbW9yeSBGaWxlU3lzdGVtIENvbnRlbnRzOlwiKTtcbiAgICBmb3IgKGNvbnN0IFtwYXRoLCBjb250ZW50XSBvZiB0aGlzLmZpbGVzLmVudHJpZXMoKSkge1xuICAgICAgaWYgKCFwYXRoLmVuZHNXaXRoKFwiLy5kaXJcIikpIHtcbiAgICAgICAgY29uc29sZS5sb2coYCAgJHtwYXRofTogJHtjb250ZW50Lmxlbmd0aH0gYnl0ZXNgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIKICBdLAogICJtYXBwaW5ncyI6ICJBQVlPLE1BQU0sQ0FBYSxPQUtqQixtQkFBa0IsQ0FDdkIsRUFDQSxFQUFtQixHQUtuQixDQUNBLElBQU0sRUFBaUIsRUFBUyxTQUFTLEdBQUcsRUFBSSxFQUFTLE1BQU0sRUFBRyxFQUFFLEVBQUksRUFHbEUsRUFBa0MsSUFBSSxJQUN0QyxFQUF1QixDQUFDLEVBQ3hCLEVBQWtDLENBQUMsRUFHbkMsRUFBaUIsSUFBSSxJQUMzQixFQUFNLFFBQVEsS0FBWSxDQUN4QixJQUFNLEVBQVEsRUFB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QUFLLEdBQUcsRUFBRSxRQUFRLE9BQVEsR0FBRyxFQUFFLFFBQVEsTUFBTyxFQUFFLEdBQUssSUFHcEUsT0FBTyxDQUFDLEVBQXNCLENBQzVCLElBQU0sRUFBWSxFQUFLLFlBQVksR0FBRyxFQUN0QyxPQUFPLEdBQWEsRUFBSSxJQUFNLEVBQUssTUFBTSxFQUFHLENBQVMsRUFHdkQsVUFBVSxDQUFDLEVBQXVCLENBQ2hDLE9BQU8sRUFBSyxXQUFXLEdBQUcsRUFHNUIsUUFBUSxDQUFDLEVBQWMsRUFBb0IsQ0FFekMsR0FBSSxFQUFHLFdBQVcsQ0FBSSxFQUNwQixPQUFPLEVBQUcsTUFBTSxFQUFLLE9BQVMsQ0FBQyxFQUVqQyxPQUFPLEVBR1QsV0FBVyxDQUFDLEVBQXVCLENBRWpDLEdBQUksS0FBSyxNQUFNLElBQUksRUFBTyxPQUFPLEVBQy9CLE1BQU8sR0FJVCxJQUFNLEVBQVMsR0FBRyxLQUNsQixRQUFXLEtBQVksS0FBSyxNQUFNLEtBQUssRUFDckMsR0FBSSxFQUFTLFdBQVcsQ0FBTSxFQUM1QixNQUFPLEdBR1gsUUFBVyxLQUFZLEtBQUssWUFBWSxLQUFLLEVBQzNDLEdBQUksRUFBUyxXQUFXLENBQU0sRUFDNUIsTUFBTyxHQUdYLE1BQU8sR0FJVCx1QkFBdUIsQ0FBQyxFQUEyQixDQUVqRCxJQUFJLEVBQVUsRUFDZCxNQUFPLEdBQVcsSUFBWSxJQUFLLENBQ2pDLEdBQUksS0FBSyxPQUFPLEtBQUssS0FBSyxFQUFTLE1BQU0sQ0FBQyxFQUN4QyxPQUFPLEVBRVQsRUFBVSxLQUFLLFFBQVEsQ0FBTyxFQUloQyxNQUFNLElBQUksTUFBTSx5QkFBeUIsR0FBVyxFQUd0RCxlQUFlLENBQUMsRUFBMkIsQ0FDekMsT0FBTyxLQUFLLHdCQUF3QixDQUFTLEVBRy9DLGlCQUFpQixDQUFDLEVBQWdDLENBQ2hELElBQU0sRUFBVyxFQUFlLE1BQU0sR0FBRyxFQUFFLE9BQU8sQ0FBQyxJQUFNLENBQUMsRUFDMUQsT0FBTyxFQUFTLEVBQVMsT0FBUyxJQUFNLE9BSTFDLEtBQUssRUFBUyxDQUNaLEtBQUssTUFBTSxNQUFNLEVBQ2pCLEtBQUssWUFBWSxNQUFNLEVBR3pCLFFBQVEsRUFBd0IsQ0FDOUIsT0FBTyxJQUFJLElBQUksS0FBSyxLQUFLLEVBSTNCLGFBQWEsQ0FBQyxFQUF3QixDQUNwQyxLQUFLLFVBQVUsQ0FBUSxFQUN2QixLQUFLLFVBQVUsS0FBSyxLQUFLLEVBQVUsTUFBTSxDQUFDLEVBQzFDLEtBQUssVUFBVSxLQUFLLEtBQUssRUFBVSxhQUFhLENBQUMsRUFJbkQsS0FBSyxFQUFTLENBQ1osUUFBUSxJQUFJLCtCQUErQixFQUMzQyxRQUFZLEVBQU0sS0FBWSxLQUFLLE1BQU0sUUFBUSxFQUMvQyxJQUFLLEVBQUssU0FBUyxPQUFPLEVBQ3hCLFFBQVEsSUFBSSxLQUFLLE1BQVMsRUFBUSxjQUFjLEVBSXhEIiwKICAiZGVidWdJZCI6ICI0OUMxNUIyNjExMDczM0FBNjQ3NTZFMjE2NDc1NkUyMSIsCiAgIm5hbWVzIjogW10KfQ==\n","import React, { useCallback, useMemo, useState, useEffect, useRef } from 'react';\nimport { useTheme } from '@principal-ade/industry-theme';\nimport { GitStatusFileTree, type GitFileStatus } from '@principal-ade/dynamic-file-tree';\nimport { PathsFileTreeBuilder, type FileTree } from '@principal-ai/repository-abstraction';\nimport type { GitStatus, GitChangeSelectionStatus, PanelComponentProps } from '../types';\n\nexport interface GitChangesPanelProps {\n /** Git status data with categorized file paths */\n gitStatus: GitStatus;\n /** Optional file tree for \"Full Tree\" view mode */\n fileTree?: FileTree | null;\n /** Root path for the repository (used for building file trees) */\n rootPath?: string;\n /** Whether git status is currently loading */\n isLoading?: boolean;\n /** Callback when a file is clicked */\n onFileClick?: (filePath: string, status?: GitChangeSelectionStatus) => void;\n /** Message to display when there are no changes */\n emptyMessage?: string;\n /** Message to display while loading */\n loadingMessage?: string;\n /** Currently selected file path */\n selectedFile?: string;\n}\n\n/**\n * GitChangesPanelContent - Internal component that renders the git changes UI\n * Can be used directly with props or via the framework wrapper\n */\nexport const GitChangesPanelContent: React.FC<GitChangesPanelProps> = ({\n gitStatus,\n fileTree,\n rootPath,\n isLoading = false,\n onFileClick,\n emptyMessage = 'No git changes to display',\n loadingMessage = 'Loading git changes...',\n selectedFile,\n}) => {\n const { theme } = useTheme();\n\n // Calculate if there are changes\n const hasChanges =\n gitStatus.staged.length > 0 ||\n gitStatus.unstaged.length > 0 ||\n gitStatus.untracked.length > 0 ||\n gitStatus.deleted.length > 0;\n\n // State for toggling between full tree and changes only\n const [showFullTree, setShowFullTree] = useState(false);\n const userHasToggledView = useRef(false);\n\n // Update default view mode based on whether there are changes\n useEffect(() => {\n if (!isLoading && !userHasToggledView.current) {\n const rafId = requestAnimationFrame(() => {\n setShowFullTree(!hasChanges);\n });\n return () => cancelAnimationFrame(rafId);\n }\n }, [hasChanges, isLoading]);\n\n // Determine file status based on git status data\n const getFileStatus = useCallback(\n (filePath: string): GitChangeSelectionStatus | undefined => {\n if (gitStatus.staged.includes(filePath)) {\n return 'staged';\n }\n if (gitStatus.deleted.includes(filePath)) {\n return 'deleted';\n }\n if (gitStatus.untracked.includes(filePath)) {\n return 'untracked';\n }\n if (gitStatus.unstaged.includes(filePath)) {\n return 'unstaged';\n }\n return undefined;\n },\n [gitStatus],\n );\n\n const handleFileSelect = useCallback(\n (filePath: string) => {\n const status = getFileStatus(filePath);\n onFileClick?.(filePath, status);\n },\n [getFileStatus, onFileClick],\n );\n\n const gitChangesData = useMemo(() => {\n if (isLoading) {\n return null;\n }\n\n // Helper function to expand directories using the fileTree\n const expandDirectories = (paths: string[]): string[] => {\n if (!fileTree?.allFiles) return paths;\n\n const expandedPaths: string[] = [];\n\n for (const path of paths) {\n const normalizedPath = path.endsWith('/') ? path.slice(0, -1) : path;\n const matchingFiles = fileTree.allFiles.filter(\n (file) =>\n file.path.startsWith(normalizedPath + '/') ||\n file.path === normalizedPath,\n );\n\n if (matchingFiles.length > 0) {\n expandedPaths.push(...matchingFiles.map((f) => f.path));\n } else {\n expandedPaths.push(normalizedPath);\n }\n }\n\n return expandedPaths;\n };\n\n // Expand untracked directories to show all files\n const expandedUntracked = expandDirectories(gitStatus.untracked);\n\n const statusData: GitFileStatus[] = [\n ...gitStatus.staged.map((filePath) => ({\n filePath,\n indexStatus: 'A',\n workingTreeStatus: ' ',\n status: 'A' as const,\n })),\n ...gitStatus.unstaged.map((filePath) => ({\n filePath,\n indexStatus: ' ',\n workingTreeStatus: 'M',\n status: 'M' as const,\n })),\n ...gitStatus.deleted.map((filePath) => ({\n filePath,\n indexStatus: ' ',\n workingTreeStatus: 'D',\n status: 'D' as const,\n })),\n ...expandedUntracked.map((filePath) => ({\n filePath,\n indexStatus: '?',\n workingTreeStatus: '?',\n status: '??' as const,\n })),\n ];\n\n // If showing full tree, use the complete fileTree\n if (showFullTree && fileTree) {\n return { tree: fileTree, statusData };\n }\n\n // Changes only mode - show only changed files\n if (!hasChanges) {\n return null;\n }\n\n const allChangedFiles = [\n ...gitStatus.staged,\n ...gitStatus.unstaged,\n ...expandedUntracked,\n ...gitStatus.deleted,\n ].sort((a, b) => a.localeCompare(b));\n\n const builder = new PathsFileTreeBuilder();\n const tree = builder.build({ files: allChangedFiles, rootPath: rootPath ?? '' });\n\n return { tree, statusData };\n }, [isLoading, hasChanges, fileTree, gitStatus, rootPath, showFullTree]);\n\n // Toggle button component\n const ToggleButtons = () => (\n <div\n style={{\n display: 'flex',\n alignItems: 'stretch',\n backgroundColor: theme.colors.backgroundTertiary,\n width: '100%',\n }}\n >\n <button\n onClick={() => {\n userHasToggledView.current = true;\n setShowFullTree(true);\n }}\n style={{\n flex: 1,\n padding: '6px 12px',\n fontSize: theme.fontSizes[1],\n backgroundColor: showFullTree\n ? theme.colors.backgroundSecondary\n : 'transparent',\n color: showFullTree ? theme.colors.text : theme.colors.textSecondary,\n border: showFullTree\n ? `1px solid ${theme.colors.border}`\n : '1px solid transparent',\n cursor: 'pointer',\n fontWeight: showFullTree ? 600 : 400,\n transition: 'all 0.2s',\n }}\n >\n Full Tree\n </button>\n <button\n onClick={() => {\n userHasToggledView.current = true;\n setShowFullTree(false);\n }}\n style={{\n flex: 1,\n padding: '6px 12px',\n fontSize: theme.fontSizes[1],\n backgroundColor: !showFullTree\n ? theme.colors.backgroundSecondary\n : 'transparent',\n color: !showFullTree ? theme.colors.text : theme.colors.textSecondary,\n border: !showFullTree\n ? `1px solid ${theme.colors.border}`\n : '1px solid transparent',\n cursor: 'pointer',\n fontWeight: !showFullTree ? 600 : 400,\n transition: 'all 0.2s',\n }}\n >\n Changes Only\n </button>\n </div>\n );\n\n // Content area\n const Content = () => {\n if (isLoading) {\n return (\n <div\n style={{\n padding: '20px',\n textAlign: 'center',\n color: theme.colors.textSecondary,\n }}\n >\n {loadingMessage}\n </div>\n );\n }\n\n if (!hasChanges && !showFullTree) {\n return (\n <div\n style={{\n padding: '20px',\n textAlign: 'center',\n color: theme.colors.textSecondary,\n }}\n >\n {emptyMessage}\n </div>\n );\n }\n\n if (!gitChangesData) {\n return null;\n }\n\n return (\n <GitStatusFileTree\n key={`${showFullTree}-${gitChangesData.statusData.length}`}\n fileTree={gitChangesData.tree}\n theme={theme}\n gitStatusData={gitChangesData.statusData}\n onFileSelect={handleFileSelect}\n selectedFile={selectedFile}\n transparentBackground={true}\n horizontalNodePadding=\"16px\"\n openByDefault={!showFullTree}\n />\n );\n };\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', height: '100%' }}>\n <div style={{ borderBottom: `1px solid ${theme.colors.border}` }}>\n <ToggleButtons />\n </div>\n <div style={{ flex: 1, overflow: 'auto' }}>\n <Content />\n </div>\n </div>\n );\n};\n\nexport const GitChangesPanelPreview: React.FC = () => {\n const { theme } = useTheme();\n\n return (\n <div\n style={{\n padding: '12px',\n fontSize: '12px',\n color: theme.colors.text,\n display: 'flex',\n flexDirection: 'column',\n gap: '6px',\n }}\n >\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n color: '#22c55e',\n }}\n >\n <span>+</span>\n <span>new-file.ts</span>\n </div>\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n color: '#f59e0b',\n }}\n >\n <span>M</span>\n <span>modified.ts</span>\n </div>\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n color: '#ef4444',\n }}\n >\n <span>-</span>\n <span>deleted.ts</span>\n </div>\n </div>\n );\n};\n\n/**\n * GitChangesPanel - Panel Framework compatible component\n * Uses context.getSlice('git') and context.getSlice('fileTree') to get data\n */\nexport const GitChangesPanel: React.FC<PanelComponentProps> = ({ context }) => {\n // Get data slices from context\n const gitSlice = context.getSlice<GitStatus>('git');\n const fileTreeSlice = context.getSlice<FileTree>('fileTree');\n\n // Extract data with defaults\n const gitStatus = gitSlice?.data ?? {\n staged: [],\n unstaged: [],\n untracked: [],\n deleted: [],\n };\n const fileTree = fileTreeSlice?.data ?? null;\n const isLoading = gitSlice?.loading || fileTreeSlice?.loading || false;\n\n // Get repository path from context scope\n const rootPath = context.currentScope.type === 'repository'\n ? context.currentScope.repository?.path\n : undefined;\n\n return (\n <GitChangesPanelContent\n gitStatus={gitStatus}\n fileTree={fileTree}\n rootPath={rootPath}\n isLoading={isLoading}\n />\n );\n};\n","import React from 'react';\nimport { Package } from 'lucide-react';\n\ntype PackageManager = 'npm' | 'yarn' | 'pnpm' | 'bun' | 'pip' | 'poetry' | 'pipenv' | 'cargo' | 'unknown';\n\ninterface PackageManagerIconProps {\n packageManager: PackageManager;\n size?: number;\n color?: string;\n}\n\n// Official SVG paths from Simple Icons (https://simpleicons.org)\n// All icons use viewBox=\"0 0 24 24\"\n\nconst NpmIcon: React.FC<{ size: number }> = ({ size }) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"#CB3837\"\n role=\"img\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <title>npm</title>\n <path d=\"M1.763 0C.786 0 0 .786 0 1.763v20.474C0 23.214.786 24 1.763 24h20.474c.977 0 1.763-.786 1.763-1.763V1.763C24 .786 23.214 0 22.237 0zM5.13 5.323l13.837.019-.009 13.836h-3.464l.01-10.382h-3.456L12.04 19.17H5.113z\" />\n </svg>\n);\n\nconst YarnIcon: React.FC<{ size: number }> = ({ size }) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"#2C8EBB\"\n role=\"img\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <title>Yarn</title>\n <path d=\"M12 0C5.375 0 0 5.375 0 12s5.375 12 12 12 12-5.375 12-12S18.625 0 12 0zm.768 4.105c.183 0 .363.053.525.157.125.083.287.185.755 1.154.31-.088.468-.042.551-.019.204.056.366.19.463.375.477.917.542 2.553.334 3.605-.241 1.232-.755 2.029-1.131 2.576.324.329.778.899 1.117 1.825.278.774.31 1.478.273 2.015a5.51 5.51 0 0 0 .602-.329c.593-.366 1.487-.917 2.553-.931.714-.009 1.269.445 1.353 1.103a1.23 1.23 0 0 1-.945 1.362c-.649.158-.95.278-1.821.843-1.232.797-2.539 1.242-3.012 1.39a1.686 1.686 0 0 1-.704.343c-.737.181-3.266.315-3.466.315h-.046c-.783 0-1.214-.241-1.45-.491-.658.329-1.51.19-2.122-.134a1.078 1.078 0 0 1-.58-1.153 1.243 1.243 0 0 1-.153-.195c-.162-.25-.528-.936-.454-1.946.056-.723.556-1.367.88-1.71a5.522 5.522 0 0 1 .408-2.256c.306-.727.885-1.348 1.32-1.737-.32-.537-.644-1.367-.329-2.21.227-.602.412-.936.82-1.08h-.005c.199-.074.389-.153.486-.259a3.418 3.418 0 0 1 2.298-1.103c.037-.093.079-.185.125-.283.31-.658.639-1.029 1.024-1.168a.94.94 0 0 1 .328-.06zm.006.7c-.507.016-1.001 1.519-1.001 1.519s-1.27-.204-2.266.871c-.199.218-.468.334-.746.44-.079.028-.176.023-.417.672-.371.991.625 2.094.625 2.094s-1.186.839-1.626 1.881c-.486 1.144-.338 2.261-.338 2.261s-.843.732-.899 1.487c-.051.663.139 1.2.343 1.515.227.343.51.176.51.176s-.561.653-.037.931c.477.25 1.283.394 1.71-.037.31-.31.371-1.001.486-1.283.028-.065.12.111.209.199.097.093.264.195.264.195s-.755.324-.445 1.066c.102.246.468.403 1.066.398.222-.005 2.664-.139 3.313-.296.375-.088.505-.283.505-.283s1.566-.431 2.998-1.357c.917-.598 1.293-.76 2.034-.936.612-.148.57-1.098-.241-1.084-.839.009-1.575.44-2.196.825-1.163.718-1.742.672-1.742.672l-.018-.032c-.079-.13.371-1.293-.134-2.678-.547-1.515-1.413-1.881-1.344-1.997.297-.5 1.038-1.297 1.334-2.78.176-.899.13-2.377-.269-3.151-.074-.144-.732.241-.732.241s-.616-1.371-.788-1.483a.271.271 0 0 0-.157-.046z\" />\n </svg>\n);\n\nconst PnpmIcon: React.FC<{ size: number }> = ({ size }) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"#F69220\"\n role=\"img\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <title>pnpm</title>\n <path d=\"M0 0v7.5h7.5V0zm8.25 0v7.5h7.498V0zm8.25 0v7.5H24V0zM8.25 8.25v7.5h7.498v-7.5zm8.25 0v7.5H24v-7.5zM0 16.5V24h7.5v-7.5zm8.25 0V24h7.498v-7.5zm8.25 0V24H24v-7.5z\" />\n </svg>\n);\n\nconst BunIcon: React.FC<{ size: number }> = ({ size }) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"#FBF0DF\"\n role=\"img\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <title>Bun</title>\n <path d=\"M12 22.596c6.628 0 12-4.338 12-9.688 0-3.318-2.057-6.248-5.219-7.986-1.286-.715-2.297-1.357-3.139-1.89C14.058 2.025 13.08 1.404 12 1.404c-1.097 0-2.334.785-3.966 1.821a49.92 49.92 0 0 1-2.816 1.697C2.057 6.66 0 9.59 0 12.908c0 5.35 5.372 9.687 12 9.687v.001ZM10.599 4.715c.334-.759.503-1.58.498-2.409 0-.145.202-.187.23-.029.658 2.783-.902 4.162-2.057 4.624-.124.048-.199-.121-.103-.209a5.763 5.763 0 0 0 1.432-1.977Zm2.058-.102a5.82 5.82 0 0 0-.782-2.306v-.016c-.069-.123.086-.263.185-.172 1.962 2.111 1.307 4.067.556 5.051-.082.103-.23-.003-.189-.126a5.85 5.85 0 0 0 .23-2.431Zm1.776-.561a5.727 5.727 0 0 0-1.612-1.806v-.014c-.112-.085-.024-.274.114-.218 2.595 1.087 2.774 3.18 2.459 4.407a.116.116 0 0 1-.049.071.11.11 0 0 1-.153-.026.122.122 0 0 1-.022-.083 5.891 5.891 0 0 0-.737-2.331Zm-5.087.561c-.617.546-1.282.76-2.063 1-.117 0-.195-.078-.156-.181 1.752-.909 2.376-1.649 2.999-2.778 0 0 .155-.118.188.085 0 .304-.349 1.329-.968 1.874Zm4.945 11.237a2.957 2.957 0 0 1-.937 1.553c-.346.346-.8.565-1.286.62a2.178 2.178 0 0 1-1.327-.62 2.955 2.955 0 0 1-.925-1.553.244.244 0 0 1 .064-.198.234.234 0 0 1 .193-.069h3.965a.226.226 0 0 1 .19.07c.05.053.073.125.063.197Zm-5.458-2.176a1.862 1.862 0 0 1-2.384-.245 1.98 1.98 0 0 1-.233-2.447c.207-.319.503-.566.848-.713a1.84 1.84 0 0 1 1.092-.11c.366.075.703.261.967.531a1.98 1.98 0 0 1 .408 2.114 1.931 1.931 0 0 1-.698.869v.001Zm8.495.005a1.86 1.86 0 0 1-2.381-.253 1.964 1.964 0 0 1-.547-1.366c0-.384.11-.76.32-1.079.207-.319.503-.567.849-.713a1.844 1.844 0 0 1 1.093-.108c.367.076.704.262.968.534a1.98 1.98 0 0 1 .4 2.117 1.932 1.932 0 0 1-.702.868Z\" />\n </svg>\n);\n\nconst PythonIcon: React.FC<{ size: number }> = ({ size }) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"#3776AB\"\n role=\"img\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <title>Python</title>\n <path d=\"M14.25.18l.9.2.73.26.59.3.45.32.34.34.25.34.16.33.1.3.04.26.02.2-.01.13V8.5l-.05.63-.13.55-.21.46-.26.38-.3.31-.33.25-.35.19-.35.14-.33.1-.3.07-.26.04-.21.02H8.77l-.69.05-.59.14-.5.22-.41.27-.33.32-.27.35-.2.36-.15.37-.1.35-.07.32-.04.27-.02.21v3.06H3.17l-.21-.03-.28-.07-.32-.12-.35-.18-.36-.26-.36-.36-.35-.46-.32-.59-.28-.73-.21-.88-.14-1.05-.05-1.23.06-1.22.16-1.04.24-.87.32-.71.36-.57.4-.44.42-.33.42-.24.4-.16.36-.1.32-.05.24-.01h.16l.06.01h8.16v-.83H6.18l-.01-2.75-.02-.37.05-.34.11-.31.17-.28.25-.26.31-.23.38-.2.44-.18.51-.15.58-.12.64-.1.71-.06.77-.04.84-.02 1.27.05zm-6.3 1.98l-.23.33-.08.41.08.41.23.34.33.22.41.09.41-.09.33-.22.23-.34.08-.41-.08-.41-.23-.33-.33-.22-.41-.09-.41.09zm13.09 3.95l.28.06.32.12.35.18.36.27.36.35.35.47.32.59.28.73.21.88.14 1.04.05 1.23-.06 1.23-.16 1.04-.24.86-.32.71-.36.57-.4.45-.42.33-.42.24-.4.16-.36.09-.32.05-.24.02-.16-.01h-8.22v.82h5.84l.01 2.76.02.36-.05.34-.11.31-.17.29-.25.25-.31.24-.38.2-.44.17-.51.15-.58.13-.64.09-.71.07-.77.04-.84.01-1.27-.04-1.07-.14-.9-.2-.73-.25-.59-.3-.45-.33-.34-.34-.25-.34-.16-.33-.1-.3-.04-.25-.02-.2.01-.13v-5.34l.05-.64.13-.54.21-.46.26-.38.3-.32.33-.24.35-.2.35-.14.33-.1.3-.06.26-.04.21-.02.13-.01h5.84l.69-.05.59-.14.5-.21.41-.28.33-.32.27-.35.2-.36.15-.36.1-.35.07-.32.04-.28.02-.21V6.07h2.09l.14.01zm-6.47 14.25l-.23.33-.08.41.08.41.23.33.33.23.41.08.41-.08.33-.23.23-.33.08-.41-.08-.41-.23-.33-.33-.23-.41-.08-.41.08z\" />\n </svg>\n);\n\nconst PoetryIcon: React.FC<{ size: number }> = ({ size }) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"#60A5FA\"\n role=\"img\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <title>Poetry</title>\n <path d=\"M21.604 0a19.144 19.144 0 0 1-5.268 13.213L2.396 0l13.583 13.583a19.149 19.149 0 0 1-13.583 5.624V0h19.208Zm-1.911 17.297A24.455 24.455 0 0 1 7.189 24l-4.053-4.053a19.91 19.91 0 0 0 13.37-5.838l3.187 3.188Z\" />\n </svg>\n);\n\nconst RustIcon: React.FC<{ size: number }> = ({ size }) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"#000000\"\n role=\"img\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <title>Rust</title>\n <path d=\"M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172l-1.1532.2724a14.0183 14.0183 0 00-.2278-.1873l.0415-1.1845a.3442.3442 0 00-.49-.328l-1.076.491c-.0872-.0476-.1742-.0952-.2623-.1407l-.1903-1.1673A.3483.3483 0 0016.256.955l-.9597.6905a8.4867 8.4867 0 00-.2855-.086l-.414-1.1066a.3483.3483 0 00-.5781-.1154l-.8069.8666a9.2936 9.2936 0 00-.2936-.0284L12.2946.1683a.3462.3462 0 00-.5892 0l-.6236 1.0073a13.7383 13.7383 0 00-.2936.0284L9.9803.3374a.3462.3462 0 00-.578.1154l-.4141 1.1065c-.0962.0274-.1903.0567-.2855.086L7.744.955a.3483.3483 0 00-.5447.2258L7.009 2.348a9.3574 9.3574 0 00-.2622.1407l-1.0762-.491a.3462.3462 0 00-.49.328l.0416 1.1845a7.9826 7.9826 0 00-.2278.1873L3.8413 3.425a.3472.3472 0 00-.4171.4171l.2713 1.1531c-.0628.075-.1255.1509-.1863.2268l-1.1845-.0415a.3462.3462 0 00-.328.49l.491 1.0761a9.167 9.167 0 00-.1407.2622l-1.1662.1894a.3483.3483 0 00-.2258.5446l.6904.9587a13.303 13.303 0 00-.087.2855l-1.1065.414a.3483.3483 0 00-.1155.5781l.8656.807a9.2936 9.2936 0 00-.0283.2935l-1.0073.6236a.3442.3442 0 000 .5892l1.0073.6236c.008.0982.0182.1964.0283.2936l-.8656.8079a.3462.3462 0 00.1155.578l1.1065.4141c.0273.0962.0567.1914.087.2855l-.6904.9587a.3452.3452 0 00.2268.5447l1.1662.1893c.0456.088.0922.1751.1408.2622l-.491 1.0762a.3462.3462 0 00.328.49l1.1834-.0415c.0618.0769.1235.1528.1873.2277l-.2713 1.1541a.3462.3462 0 00.4171.4161l1.153-.2713c.075.0638.151.1255.2279.1863l-.0415 1.1845a.3442.3442 0 00.49.327l1.0761-.49c.087.0486.1741.0951.2622.1407l.1903 1.1662a.3483.3483 0 00.5447.2268l.9587-.6904a9.299 9.299 0 00.2855.087l.414 1.1066a.3452.3452 0 00.5781.1154l.8079-.8656c.0972.0111.1954.0203.2936.0294l.6236 1.0073a.3472.3472 0 00.5892 0l.6236-1.0073c.0982-.0091.1964-.0183.2936-.0294l.8069.8656a.3483.3483 0 00.578-.1154l.4141-1.1066a8.4626 8.4626 0 00.2855-.087l.9587.6904a.3452.3452 0 00.5447-.2268l.1903-1.1662c.088-.0456.1751-.0931.2622-.1407l1.0762.49a.3472.3472 0 00.49-.327l-.0415-1.1845a6.7267 6.7267 0 00.2267-.1863l1.1531.2713a.3472.3472 0 00.4171-.416l-.2713-1.1542c.0628-.0749.1255-.1508.1863-.2278l1.1845.0415a.3442.3442 0 00.328-.49l-.49-1.076c.0475-.0872.0951-.1742.1407-.2623l1.1662-.1893a.3483.3483 0 00.2258-.5447l-.6904-.9587.087-.2855 1.1066-.414a.3462.3462 0 00.1154-.5781l-.8656-.8079c.0101-.0972.0202-.1954.0283-.2936l1.0073-.6236a.3442.3442 0 000-.5892zm-6.7413 8.3551a.7138.7138 0 01.2986-1.396.714.714 0 11-.2997 1.396zm-.3422-2.3142a.649.649 0 00-.7715.5l-.3573 1.6685c-1.1035.501-2.3285.7795-3.6193.7795a8.7368 8.7368 0 01-3.6951-.814l-.3574-1.6684a.648.648 0 00-.7714-.499l-1.473.3158a8.7216 8.7216 0 01-.7613-.898h7.1676c.081 0 .1356-.0141.1356-.088v-2.536c0-.074-.0536-.0881-.1356-.0881h-2.0966v-1.6077h2.2677c.2065 0 1.1065.0587 1.394 1.2088.0901.3533.2875 1.5044.4232 1.8729.1346.413.6833 1.2381 1.2685 1.2381h3.5716a.7492.7492 0 00.1296-.0131 8.7874 8.7874 0 01-.8119.9526zM6.8369 20.024a.714.714 0 11-.2997-1.396.714.714 0 01.2997 1.396zM4.1177 8.9972a.7137.7137 0 11-1.304.5791.7137.7137 0 011.304-.579zm-.8352 1.9813l1.5347-.6824a.65.65 0 00.33-.8585l-.3158-.7147h1.2432v5.6025H3.5669a8.7753 8.7753 0 01-.2834-3.348zm6.7343-.5437V8.7836h2.9601c.153 0 1.0792.1772 1.0792.8697 0 .575-.7107.7815-1.2948.7815zm10.7574 1.4862c0 .2187-.008.4363-.0243.651h-.9c-.09 0-.1265.0586-.1265.1477v.413c0 .973-.5487 1.1846-1.0296 1.2382-.4576.0517-.9648-.1913-1.0275-.4717-.2704-1.5186-.7198-1.8436-1.4305-2.4034.8817-.5599 1.799-1.386 1.799-2.4915 0-1.1936-.819-1.9458-1.3769-2.3153-.7825-.5163-1.6491-.6195-1.883-.6195H5.4682a8.7651 8.7651 0 014.907-2.7699l1.0974 1.151a.648.648 0 00.9182.0213l1.227-1.1743a8.7753 8.7753 0 016.0044 4.2762l-.8403 1.8982a.652.652 0 00.33.8585l1.6178.7188c.0283.2875.0425.577.0425.8717zm-9.3006-9.5993a.7128.7128 0 11.984 1.0316.7137.7137 0 01-.984-1.0316zm8.3389 6.71a.7107.7107 0 01.9395-.3625.7137.7137 0 11-.9405.3635z\" />\n </svg>\n);\n\nexport const PackageManagerIcon: React.FC<PackageManagerIconProps> = ({\n packageManager,\n size = 18,\n color,\n}) => {\n switch (packageManager) {\n case 'npm':\n return <NpmIcon size={size} />;\n case 'yarn':\n return <YarnIcon size={size} />;\n case 'pnpm':\n return <PnpmIcon size={size} />;\n case 'bun':\n return <BunIcon size={size} />;\n case 'pip':\n case 'pipenv':\n return <PythonIcon size={size} />;\n case 'poetry':\n return <PoetryIcon size={size} />;\n case 'cargo':\n return <RustIcon size={size} />;\n case 'unknown':\n default:\n return <Package size={size} color={color} />;\n }\n};\n\nexport default PackageManagerIcon;\n","import React from 'react';\nimport { X, Package, Scale, HelpCircle } from 'lucide-react';\nimport { useTheme, type Theme } from '@principal-ade/industry-theme';\n\ninterface DependencyInfoModalProps {\n isOpen: boolean;\n onClose: () => void;\n}\n\nexport const DependencyInfoModal: React.FC<DependencyInfoModalProps> = ({\n isOpen,\n onClose,\n}) => {\n const { theme } = useTheme();\n\n if (!isOpen) return null;\n\n return (\n <>\n {/* Backdrop */}\n <div\n style={{\n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: theme.colors.muted,\n zIndex: theme.zIndices[4],\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n onClick={onClose}\n >\n {/* Modal */}\n <div\n style={{\n backgroundColor: theme.colors.background,\n borderRadius: `${theme.radii[3]}px`,\n maxWidth: '600px',\n maxHeight: '80vh',\n width: '90%',\n overflow: 'hidden',\n display: 'flex',\n flexDirection: 'column',\n boxShadow: theme.shadows[3],\n }}\n onClick={(e) => e.stopPropagation()}\n >\n {/* Header */}\n <div\n style={{\n padding: `${theme.space[4]}px`,\n borderBottom: `1px solid ${theme.colors.border}`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n }}\n >\n <h2\n style={{\n fontSize: `${theme.fontSizes[4]}px`,\n fontWeight: theme.fontWeights.semibold,\n color: theme.colors.text,\n display: 'flex',\n alignItems: 'center',\n gap: `${theme.space[2]}px`,\n margin: 0,\n }}\n >\n <HelpCircle size={20} />\n Understanding Dependencies\n </h2>\n <button\n onClick={onClose}\n style={{\n background: 'none',\n border: 'none',\n color: theme.colors.textSecondary,\n cursor: 'pointer',\n padding: `${theme.space[1]}px`,\n }}\n >\n <X size={20} />\n </button>\n </div>\n\n {/* Content */}\n <div\n style={{\n padding: `${theme.space[4]}px`,\n overflow: 'auto',\n flex: 1,\n }}\n >\n {/* Dependency Types */}\n <Section\n icon={<Package size={18} />}\n title=\"Dependency Types\"\n theme={theme}\n >\n <InfoItem\n badge={{ text: 'prod', color: theme.colors.primary }}\n title=\"Production Dependencies\"\n description=\"Required for your application to run in production. These are bundled with your app and affect its size and security.\"\n theme={theme}\n />\n <InfoItem\n badge={{ text: 'dev', color: theme.colors.secondary }}\n title=\"Development Dependencies\"\n description=\"Only needed during development (build tools, testing, linters). Not included in production builds.\"\n theme={theme}\n />\n <InfoItem\n badge={{ text: 'peer', color: theme.colors.accent }}\n title=\"Peer Dependencies\"\n description=\"Expected to be provided by the consumer of your package. Important for library authors to specify compatibility.\"\n theme={theme}\n />\n </Section>\n\n {/* Licenses */}\n <Section\n icon={<Scale size={18} />}\n title=\"Common Licenses\"\n theme={theme}\n >\n <InfoItem\n badge={{ text: 'MIT', color: theme.colors.success }}\n title=\"Permissive Licenses (MIT, Apache, BSD)\"\n description=\"Few restrictions. Can use in commercial projects. Must include copyright notice.\"\n theme={theme}\n />\n <InfoItem\n badge={{ text: 'GPL', color: theme.colors.warning }}\n title=\"Copyleft Licenses (GPL, LGPL, AGPL)\"\n description=\"Requires sharing source code of derivative works. Can impact your project's licensing.\"\n theme={theme}\n />\n </Section>\n </div>\n </div>\n </div>\n </>\n );\n};\n\n// Helper Components\nconst Section: React.FC<{\n icon: React.ReactNode;\n title: string;\n theme: Theme;\n children: React.ReactNode;\n}> = ({ icon, title, theme, children }) => (\n <div style={{ marginBottom: `${theme.space[5]}px` }}>\n <h3\n style={{\n fontSize: `${theme.fontSizes[2]}px`,\n fontWeight: theme.fontWeights.semibold,\n color: theme.colors.text,\n marginBottom: `${theme.space[3]}px`,\n display: 'flex',\n alignItems: 'center',\n gap: `${theme.space[2]}px`,\n }}\n >\n {icon}\n {title}\n </h3>\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: `${theme.space[2]}px`,\n }}\n >\n {children}\n </div>\n </div>\n);\n\nconst InfoItem: React.FC<{\n badge: { text: string; color: string };\n title: string;\n description: string;\n theme: Theme;\n}> = ({ badge, title, description, theme }) => (\n <div\n style={{\n padding: `${theme.space[3]}px`,\n backgroundColor: theme.colors.backgroundSecondary,\n borderRadius: `${theme.radii[2]}px`,\n border: `1px solid ${theme.colors.border}`,\n }}\n >\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: `${theme.space[2]}px`,\n marginBottom: `${theme.space[1]}px`,\n }}\n >\n <span\n style={{\n padding: `${theme.space[1]}px ${theme.space[2]}px`,\n borderRadius: `${theme.radii[1]}px`,\n fontSize: `${theme.fontSizes[0]}px`,\n fontWeight: theme.fontWeights.medium,\n backgroundColor: `${badge.color}20`,\n color: badge.color,\n }}\n >\n {badge.text}\n </span>\n <span\n style={{\n fontSize: `${theme.fontSizes[1]}px`,\n fontWeight: theme.fontWeights.medium,\n color: theme.colors.text,\n }}\n >\n {title}\n </span>\n </div>\n <div\n style={{\n fontSize: `${theme.fontSizes[1]}px`,\n color: theme.colors.textSecondary,\n lineHeight: theme.lineHeights.relaxed,\n }}\n >\n {description}\n </div>\n </div>\n);\n","import React, { useState } from 'react';\nimport { ExternalLink, Copy, Check } from 'lucide-react';\nimport { useTheme } from '@principal-ade/industry-theme';\nimport type { DependencyItem } from '../../types/dependencies';\n\ninterface DependencyRowProps {\n dependency: DependencyItem;\n}\n\nexport const DependencyRow: React.FC<DependencyRowProps> = ({ dependency }) => {\n const { theme } = useTheme();\n const [isHovered, setIsHovered] = useState(false);\n const [copied, setCopied] = useState(false);\n\n const getDependencyTypeBadgeStyle = (type: string) => {\n const baseStyle = {\n padding: `${theme.space[1]}px ${theme.space[2]}px`,\n borderRadius: `${theme.radii[1]}px`,\n fontSize: `${theme.fontSizes[0]}px`,\n fontWeight: theme.fontWeights.medium,\n minWidth: '36px',\n textAlign: 'center' as const,\n };\n\n switch (type) {\n case 'production':\n return {\n ...baseStyle,\n backgroundColor: `${theme.colors.primary}20`,\n color: theme.colors.primary,\n };\n case 'development':\n return {\n ...baseStyle,\n backgroundColor: `${theme.colors.secondary}20`,\n color: theme.colors.secondary,\n };\n case 'peer':\n return {\n ...baseStyle,\n backgroundColor: `${theme.colors.accent}20`,\n color: theme.colors.accent,\n };\n default:\n return {\n ...baseStyle,\n backgroundColor: theme.colors.backgroundLight,\n color: theme.colors.textSecondary,\n };\n }\n };\n\n const handleCopy = async (e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n try {\n const copyText = `${dependency.name}@${dependency.version}`;\n await navigator.clipboard.writeText(copyText);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n } catch (err) {\n console.error('Failed to copy:', err);\n }\n };\n\n const actionButtonStyle: React.CSSProperties = {\n padding: `${theme.space[1]}px`,\n borderRadius: `${theme.radii[1]}px`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n border: 'none',\n backgroundColor: 'transparent',\n cursor: 'pointer',\n transition: 'all 0.15s ease',\n opacity: isHovered ? 1 : 0,\n pointerEvents: isHovered ? 'auto' : 'none',\n };\n\n return (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: `${theme.space[2]}px ${theme.space[3]}px`,\n backgroundColor: theme.colors.background,\n borderRadius: `${theme.radii[1]}px`,\n fontSize: `${theme.fontSizes[1]}px`,\n border: `1px solid ${theme.colors.border}`,\n transition: 'all 0.2s',\n }}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n >\n {/* Type badge and package name */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: `${theme.space[2]}px`,\n flex: 1,\n minWidth: 0,\n }}\n >\n <span style={getDependencyTypeBadgeStyle(dependency.dependencyType)}>\n {dependency.dependencyType === 'production'\n ? 'prod'\n : dependency.dependencyType === 'development'\n ? 'dev'\n : 'peer'}\n </span>\n <span\n style={{\n fontWeight: theme.fontWeights.medium,\n color: theme.colors.text,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n {dependency.name}\n </span>\n {/* NPM link - next to package name */}\n <a\n href={`https://www.npmjs.com/package/${dependency.name}`}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{\n ...actionButtonStyle,\n color: theme.colors.textSecondary,\n textDecoration: 'none',\n flexShrink: 0,\n }}\n title=\"View on npm\"\n >\n <ExternalLink size={12} />\n </a>\n </div>\n\n {/* Copy button and version */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n }}\n >\n {/* Copy button - left of version */}\n <button\n type=\"button\"\n onClick={handleCopy}\n style={{\n ...actionButtonStyle,\n color: copied ? theme.colors.success || '#10b981' : theme.colors.textSecondary,\n }}\n title={copied ? 'Copied!' : `Copy ${dependency.name}@${dependency.version}`}\n >\n {copied ? <Check size={12} /> : <Copy size={12} />}\n </button>\n\n <span style={{ color: theme.colors.textSecondary }}>\n {dependency.version}\n </span>\n </div>\n </div>\n );\n};\n","import React from 'react';\nimport { Search, X } from 'lucide-react';\nimport { useTheme } from '@principal-ade/industry-theme';\n\ntype ToggleableFilterType = 'production' | 'development' | 'peer';\n\ninterface FilterBarProps {\n activeFilters: Set<ToggleableFilterType>;\n onToggleFilter: (type: ToggleableFilterType) => void;\n searchQuery: string;\n onSearchChange: (query: string) => void;\n counts: {\n all: number;\n production: number;\n development: number;\n peer: number;\n };\n}\n\nexport const FilterBar: React.FC<FilterBarProps> = ({\n activeFilters,\n onToggleFilter,\n searchQuery,\n onSearchChange,\n counts,\n}) => {\n const { theme } = useTheme();\n\n // Only show filter buttons for types that have dependencies\n const availableFilters: ToggleableFilterType[] = [\n ...(counts.peer > 0 ? (['peer'] as const) : []),\n ...(counts.production > 0 ? (['production'] as const) : []),\n ...(counts.development > 0 ? (['development'] as const) : []),\n ];\n\n // Don't show filters if there's only one type\n const showFilters = availableFilters.length > 1;\n\n return (\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: `${theme.space[2]}px`,\n }}\n >\n {/* Search Bar */}\n <div\n style={{\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n }}\n >\n <Search\n size={14}\n style={{\n position: 'absolute',\n left: `${theme.space[3]}px`,\n color: theme.colors.textSecondary,\n pointerEvents: 'none',\n }}\n />\n <input\n type=\"text\"\n placeholder=\"Search dependencies...\"\n value={searchQuery}\n onChange={(e) => onSearchChange(e.target.value)}\n style={{\n width: '100%',\n padding: `${theme.space[2]}px ${theme.space[5]}px`,\n borderRadius: `${theme.radii[2]}px`,\n border: `1px solid ${theme.colors.border}`,\n backgroundColor: theme.colors.backgroundSecondary,\n color: theme.colors.text,\n fontSize: `${theme.fontSizes[1]}px`,\n fontFamily: theme.fonts.body,\n outline: 'none',\n transition: 'all 0.2s',\n }}\n />\n {searchQuery && (\n <button\n onClick={() => onSearchChange('')}\n style={{\n position: 'absolute',\n right: `${theme.space[2]}px`,\n padding: `${theme.space[1]}px`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: 'transparent',\n border: 'none',\n cursor: 'pointer',\n borderRadius: `${theme.radii[1]}px`,\n }}\n title=\"Clear search\"\n >\n <X size={14} color={theme.colors.textSecondary} />\n </button>\n )}\n </div>\n\n {/* Type Filter Toggles */}\n {showFilters && (\n <div style={{ display: 'flex', gap: `${theme.space[1]}px`, width: '100%' }}>\n {availableFilters.map((type) => {\n const isActive = activeFilters.has(type);\n return (\n <button\n key={type}\n onClick={() => onToggleFilter(type)}\n style={{\n flex: 1,\n padding: `${theme.space[1]}px ${theme.space[2]}px`,\n fontSize: `${theme.fontSizes[0]}px`,\n fontWeight: theme.fontWeights.medium,\n fontFamily: theme.fonts.body,\n borderRadius: `${theme.radii[1]}px`,\n border: `1px solid ${isActive ? theme.colors.primary : theme.colors.border}`,\n backgroundColor: isActive\n ? `${theme.colors.primary}20`\n : theme.colors.backgroundSecondary,\n color: isActive ? theme.colors.primary : theme.colors.text,\n cursor: 'pointer',\n transition: 'all 0.2s',\n }}\n >\n {type === 'production'\n ? 'Prod'\n : type === 'development'\n ? 'Dev'\n : 'Peer'}\n <span\n style={{ marginLeft: `${theme.space[1]}px`, opacity: 0.7 }}\n >\n ({counts[type]})\n </span>\n </button>\n );\n })}\n </div>\n )}\n </div>\n );\n};\n","import React, { useState, useMemo } from 'react';\nimport { useTheme } from '@principal-ade/industry-theme';\nimport {\n ChevronDown,\n ChevronRight,\n ChevronLeft,\n FileCode,\n Terminal,\n Settings,\n Folder,\n ExternalLink,\n Package,\n ArrowRight,\n Layers,\n Box,\n LayoutGrid,\n} from 'lucide-react';\nimport { PackageManagerIcon } from './components/PackageManagerIcon';\nimport { DependencyRow, FilterBar, DependencyInfoModal } from './components';\nimport type { PanelComponentProps } from '../types';\nimport type { PackageLayer, ConfigFile, PackageCommand } from '../types/composition';\nimport type { PackagesSliceData, DependencyItem } from '../types/dependencies';\n\n/**\n * Sort order for dependency types: peer, production, development\n */\nconst dependencyTypeOrder: Record<DependencyItem['dependencyType'], number> = {\n peer: 0,\n production: 1,\n development: 2,\n};\n\n/**\n * Extract dependencies from a PackageLayer into DependencyItems\n */\nfunction extractDependencies(packageLayer: PackageLayer): DependencyItem[] {\n const { dependencies, devDependencies, peerDependencies } = packageLayer.packageData;\n\n const items: DependencyItem[] = [];\n\n if (dependencies) {\n Object.entries(dependencies).forEach(([name, version]) => {\n items.push({ name, version, dependencyType: 'production' });\n });\n }\n\n if (devDependencies) {\n Object.entries(devDependencies).forEach(([name, version]) => {\n items.push({ name, version, dependencyType: 'development' });\n });\n }\n\n if (peerDependencies) {\n Object.entries(peerDependencies).forEach(([name, version]) => {\n items.push({ name, version, dependencyType: 'peer' });\n });\n }\n\n // Sort by type (peer, prod, dev) then by name\n return items.sort((a, b) => {\n const typeCompare = dependencyTypeOrder[a.dependencyType] - dependencyTypeOrder[b.dependencyType];\n if (typeCompare !== 0) return typeCompare;\n return a.name.localeCompare(b.name);\n });\n}\n\n/**\n * Find internal dependencies - packages in the monorepo that this package depends on\n */\nfunction findInternalDependencies(\n pkg: PackageLayer,\n allPackages: PackageLayer[]\n): { dependsOn: PackageLayer[]; usedBy: PackageLayer[] } {\n const currentName = pkg.packageData.name;\n\n // Get all dependency names for this package\n const allDeps = new Set([\n ...Object.keys(pkg.packageData.dependencies || {}),\n ...Object.keys(pkg.packageData.devDependencies || {}),\n ...Object.keys(pkg.packageData.peerDependencies || {}),\n ]);\n\n // Find which internal packages this one depends on\n const dependsOn = allPackages.filter(\n (p) => p.packageData.name !== currentName && allDeps.has(p.packageData.name)\n );\n\n // Find which internal packages depend on this one\n const usedBy = allPackages.filter((other) => {\n if (other.packageData.name === currentName) return false;\n const otherDeps = new Set([\n ...Object.keys(other.packageData.dependencies || {}),\n ...Object.keys(other.packageData.devDependencies || {}),\n ...Object.keys(other.packageData.peerDependencies || {}),\n ]);\n return otherDeps.has(currentName);\n });\n\n return { dependsOn, usedBy };\n}\n\ninterface PackageSummaryCardProps {\n pkg: PackageLayer;\n allPackages: PackageLayer[];\n onClick: () => void;\n}\n\nconst PackageSummaryCard: React.FC<PackageSummaryCardProps> = ({ pkg, allPackages, onClick }) => {\n const { theme } = useTheme();\n\n const deps = pkg.packageData.dependencies || {};\n const devDeps = pkg.packageData.devDependencies || {};\n const peerDeps = pkg.packageData.peerDependencies || {};\n const totalDeps = Object.keys(deps).length + Object.keys(devDeps).length + Object.keys(peerDeps).length;\n\n const configFiles = pkg.configFiles\n ? Object.values(pkg.configFiles).filter((c) => c?.exists).length\n : 0;\n\n const commands = pkg.packageData.availableCommands?.length || 0;\n\n const { dependsOn, usedBy } = useMemo(\n () => findInternalDependencies(pkg, allPackages),\n [pkg, allPackages]\n );\n\n const hasInternalDeps = dependsOn.length > 0 || usedBy.length > 0;\n\n // Determine package role in dependency graph\n const packageRole = useMemo(() => {\n if (dependsOn.length === 0 && usedBy.length === 0) {\n return null; // isolated, no indicator needed\n }\n if (dependsOn.length === 0 && usedBy.length > 0) {\n return { label: 'core', icon: Box, color: '#10b981' }; // leaf/foundation\n }\n if (dependsOn.length > 0 && usedBy.length === 0) {\n return { label: 'app', icon: Layers, color: '#8b5cf6' }; // root/application\n }\n return { label: 'shared', icon: LayoutGrid, color: '#f59e0b' }; // middle layer\n }, [dependsOn.length, usedBy.length]);\n\n return (\n <button\n onClick={onClick}\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n padding: '12px',\n backgroundColor: theme.colors.backgroundSecondary,\n border: `1px solid ${theme.colors.border}`,\n borderRadius: '8px',\n cursor: 'pointer',\n textAlign: 'left',\n transition: 'all 0.15s ease',\n width: '100%',\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.borderColor = theme.colors.accent;\n e.currentTarget.style.backgroundColor = theme.colors.backgroundTertiary;\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.borderColor = theme.colors.border;\n e.currentTarget.style.backgroundColor = theme.colors.backgroundSecondary;\n }}\n >\n {/* Package Header */}\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>\n <PackageManagerIcon packageManager={pkg.packageData.packageManager} size={20} />\n <div style={{ flex: 1, minWidth: 0 }}>\n <div\n style={{\n fontSize: theme.fontSizes[2],\n fontWeight: 600,\n color: theme.colors.text,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n {pkg.packageData.name}\n </div>\n <div\n style={{\n fontSize: theme.fontSizes[0],\n color: theme.colors.textSecondary,\n }}\n >\n {pkg.packageData.path || '/'}\n {pkg.packageData.version && ` • v${pkg.packageData.version}`}\n </div>\n </div>\n {packageRole && (\n <span\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n padding: '3px 8px',\n backgroundColor: packageRole.color + '20',\n color: packageRole.color,\n borderRadius: '4px',\n fontSize: theme.fontSizes[0],\n fontWeight: 500,\n flexShrink: 0,\n }}\n >\n <packageRole.icon size={12} />\n {packageRole.label}\n </span>\n )}\n <ChevronRight size={16} color={theme.colors.textSecondary} />\n </div>\n\n {/* Internal Dependencies */}\n {hasInternalDeps && (\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: '4px',\n fontSize: theme.fontSizes[0],\n }}\n >\n {dependsOn.length > 0 && (\n <div style={{ display: 'flex', alignItems: 'center', gap: '6px', flexWrap: 'wrap' }}>\n <span style={{ color: theme.colors.textSecondary, display: 'flex', alignItems: 'center', gap: '2px' }}>\n <ArrowRight size={10} />\n uses\n </span>\n {dependsOn.map((dep) => (\n <span\n key={dep.id}\n style={{\n padding: '2px 6px',\n backgroundColor: theme.colors.accent + '15',\n color: theme.colors.accent,\n borderRadius: '4px',\n fontWeight: 500,\n }}\n >\n {dep.packageData.name}\n </span>\n ))}\n </div>\n )}\n {usedBy.length > 0 && (\n <div style={{ display: 'flex', alignItems: 'center', gap: '6px', flexWrap: 'wrap' }}>\n <span style={{ color: theme.colors.textSecondary }}>used by</span>\n {usedBy.map((dep) => (\n <span\n key={dep.id}\n style={{\n padding: '2px 6px',\n backgroundColor: theme.colors.textSecondary + '20',\n color: theme.colors.textSecondary,\n borderRadius: '4px',\n fontWeight: 500,\n }}\n >\n {dep.packageData.name}\n </span>\n ))}\n </div>\n )}\n </div>\n )}\n\n {/* Stats Row */}\n <div\n style={{\n display: 'flex',\n gap: '12px',\n fontSize: theme.fontSizes[0],\n color: theme.colors.textSecondary,\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <Terminal size={12} />\n <span>{commands}</span>\n </div>\n <div style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <Settings size={12} />\n <span>{configFiles}</span>\n </div>\n <div style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <Package size={12} />\n <span>{totalDeps}</span>\n </div>\n </div>\n </button>\n );\n};\n\nexport interface PackageCompositionPanelProps {\n /** Detected packages in the repository */\n packages: PackageLayer[];\n /** Whether package data is loading */\n isLoading?: boolean;\n /** Message to display when there are no packages */\n emptyMessage?: string;\n /** Callback when a command is clicked */\n onCommandClick?: (command: PackageCommand, packagePath: string) => void;\n /** Callback when a config file is clicked */\n onConfigClick?: (configFile: ConfigFile) => void;\n /** Callback when a package folder is clicked */\n onPackageClick?: (packagePath: string) => void;\n}\n\ninterface PackageCardProps {\n pkg: PackageLayer;\n isExpanded: boolean;\n onToggle: () => void;\n onCommandClick?: (command: PackageCommand, packagePath: string) => void;\n onConfigClick?: (configFile: ConfigFile) => void;\n onPackageClick?: (packagePath: string) => void;\n /** When true, renders without the card wrapper and dropdown - for single package view */\n standalone?: boolean;\n}\n\nconst PackageCard: React.FC<PackageCardProps> = ({\n pkg,\n isExpanded,\n onToggle,\n onCommandClick,\n onConfigClick,\n onPackageClick,\n standalone = false,\n}) => {\n const { theme } = useTheme();\n const [activeTab, setActiveTab] = useState<'commands' | 'configs' | 'dependencies'>('commands');\n const [activeFilters, setActiveFilters] = useState<Set<'production' | 'development' | 'peer'>>(new Set());\n const [searchQuery, setSearchQuery] = useState('');\n const [showInfoModal, setShowInfoModal] = useState(false);\n\n const configFiles = useMemo(() => {\n if (!pkg.configFiles) return [];\n return Object.entries(pkg.configFiles)\n .filter(([, config]) => config?.exists)\n .map(([name, config]) => ({ name, ...config! }));\n }, [pkg.configFiles]);\n\n const commands = pkg.packageData.availableCommands || [];\n\n // Extract and process dependencies\n const dependencyItems = useMemo(() => extractDependencies(pkg), [pkg]);\n\n const depCounts = useMemo(() => ({\n all: dependencyItems.length,\n production: dependencyItems.filter((d) => d.dependencyType === 'production').length,\n development: dependencyItems.filter((d) => d.dependencyType === 'development').length,\n peer: dependencyItems.filter((d) => d.dependencyType === 'peer').length,\n }), [dependencyItems]);\n\n const handleToggleFilter = (type: 'production' | 'development' | 'peer') => {\n setActiveFilters((prev) => {\n const next = new Set(prev);\n if (next.has(type)) {\n next.delete(type);\n } else {\n next.add(type);\n }\n return next;\n });\n };\n\n const filteredDependencies = useMemo(() => {\n let filtered = [...dependencyItems];\n\n if (searchQuery.trim()) {\n const query = searchQuery.toLowerCase();\n filtered = filtered.filter((dep) => dep.name.toLowerCase().includes(query));\n }\n\n const allTypes: Array<'production' | 'development' | 'peer'> = ['production', 'development', 'peer'];\n const availableTypes = allTypes.filter((t) => depCounts[t] > 0);\n const isAllSelected = activeFilters.size === 0 || availableTypes.every((t) => activeFilters.has(t));\n\n if (!isAllSelected && activeFilters.size > 0) {\n filtered = filtered.filter((dep) => activeFilters.has(dep.dependencyType));\n }\n\n return filtered;\n }, [dependencyItems, searchQuery, activeFilters, depCounts]);\n\n // Standalone mode: render content directly without card wrapper\n if (standalone) {\n return (\n <div style={{ display: 'flex', flexDirection: 'column', height: '100%' }}>\n {/* Package Info Header */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '12px 16px',\n borderBottom: `1px solid ${theme.colors.border}`,\n }}\n >\n <PackageManagerIcon packageManager={pkg.packageData.packageManager} size={18} />\n <div style={{ flex: 1, minWidth: 0 }}>\n <div\n style={{\n fontSize: theme.fontSizes[2],\n fontWeight: 600,\n color: theme.colors.text,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n {pkg.packageData.name}\n </div>\n {pkg.packageData.version && (\n <div\n style={{\n fontSize: theme.fontSizes[0],\n color: theme.colors.textSecondary,\n }}\n >\n v{pkg.packageData.version}\n </div>\n )}\n </div>\n {pkg.packageData.path && (\n <button\n onClick={() => onPackageClick?.(pkg.packageData.path)}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n padding: '4px 8px',\n backgroundColor: theme.colors.backgroundTertiary,\n border: `1px solid ${theme.colors.border}`,\n borderRadius: '4px',\n color: theme.colors.textSecondary,\n fontSize: theme.fontSizes[0],\n cursor: 'pointer',\n }}\n title=\"Open package folder\"\n >\n <Folder size={12} />\n {pkg.packageData.path || '/'}\n </button>\n )}\n </div>\n\n {/* Tabs */}\n <div\n style={{\n display: 'flex',\n backgroundColor: theme.colors.backgroundTertiary,\n borderBottom: `1px solid ${theme.colors.border}`,\n }}\n >\n {[\n { id: 'commands' as const, label: 'Commands', count: commands.length },\n { id: 'configs' as const, label: 'Configs', count: configFiles.length },\n { id: 'dependencies' as const, label: 'Dependencies', count: dependencyItems.length },\n ].map((tab) => (\n <button\n key={tab.id}\n onClick={() => setActiveTab(tab.id)}\n style={{\n flex: 1,\n padding: '8px 12px',\n backgroundColor: activeTab === tab.id ? theme.colors.backgroundSecondary : 'transparent',\n border: 'none',\n borderBottom:\n activeTab === tab.id ? `2px solid ${theme.colors.accent}` : '2px solid transparent',\n color: activeTab === tab.id ? theme.colors.text : theme.colors.textSecondary,\n fontSize: theme.fontSizes[1],\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '6px',\n }}\n >\n {tab.label}\n <span\n style={{\n backgroundColor: theme.colors.backgroundTertiary,\n padding: '1px 6px',\n borderRadius: '10px',\n fontSize: theme.fontSizes[0],\n }}\n >\n {tab.count}\n </span>\n </button>\n ))}\n </div>\n\n {/* Tab Content */}\n <div style={{ flex: 1, padding: activeTab === 'dependencies' ? '0' : '12px', overflow: 'auto' }}>\n {activeTab === 'commands' && (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '6px' }}>\n {commands.length === 0 ? (\n <div style={{ color: theme.colors.textSecondary, fontSize: theme.fontSizes[1] }}>\n No commands available\n </div>\n ) : (\n commands.map((cmd, idx) => (\n <button\n key={idx}\n onClick={() => onCommandClick?.(cmd, pkg.packageData.path)}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '8px 12px',\n backgroundColor: theme.colors.backgroundTertiary,\n border: `1px solid ${theme.colors.border}`,\n borderRadius: '6px',\n color: theme.colors.text,\n cursor: 'pointer',\n textAlign: 'left',\n }}\n >\n <Terminal size={14} color={theme.colors.accent} />\n <div style={{ flex: 1, minWidth: 0 }}>\n <div style={{ fontWeight: 500, fontSize: theme.fontSizes[1] }}>{cmd.name}</div>\n <div\n style={{\n fontSize: theme.fontSizes[0],\n color: theme.colors.textSecondary,\n fontFamily: 'monospace',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n {cmd.command}\n </div>\n </div>\n {cmd.isLensCommand && (\n <span\n style={{\n padding: '2px 6px',\n backgroundColor: theme.colors.accent + '20',\n color: theme.colors.accent,\n borderRadius: '4px',\n fontSize: theme.fontSizes[0],\n }}\n >\n {cmd.lensId}\n </span>\n )}\n <ExternalLink size={12} color={theme.colors.textSecondary} />\n </button>\n ))\n )}\n </div>\n )}\n\n {activeTab === 'configs' && (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '6px' }}>\n {configFiles.length === 0 ? (\n <div style={{ color: theme.colors.textSecondary, fontSize: theme.fontSizes[1] }}>\n No config files detected\n </div>\n ) : (\n configFiles.map((config, idx) => (\n <button\n key={idx}\n onClick={() => onConfigClick?.(config)}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '8px 12px',\n backgroundColor: theme.colors.backgroundTertiary,\n border: `1px solid ${theme.colors.border}`,\n borderRadius: '6px',\n color: theme.colors.text,\n cursor: 'pointer',\n textAlign: 'left',\n }}\n >\n <Settings size={14} color={theme.colors.textSecondary} />\n <div style={{ flex: 1 }}>\n <div style={{ fontWeight: 500, fontSize: theme.fontSizes[1] }}>{config.name}</div>\n <div\n style={{\n fontSize: theme.fontSizes[0],\n color: theme.colors.textSecondary,\n fontFamily: 'monospace',\n }}\n >\n {config.path}\n </div>\n </div>\n {config.isInline && (\n <span\n style={{\n padding: '2px 6px',\n backgroundColor: theme.colors.textSecondary + '20',\n color: theme.colors.textSecondary,\n borderRadius: '4px',\n fontSize: theme.fontSizes[0],\n }}\n >\n inline\n </span>\n )}\n </button>\n ))\n )}\n </div>\n )}\n\n {activeTab === 'dependencies' && (\n <div style={{ display: 'flex', flexDirection: 'column', height: '100%' }}>\n {dependencyItems.length === 0 ? (\n <div\n style={{\n padding: '12px',\n color: theme.colors.textSecondary,\n fontSize: theme.fontSizes[1],\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '8px',\n }}\n >\n <Package size={16} />\n No dependencies\n </div>\n ) : (\n <>\n {/* Filter Bar */}\n <div style={{ padding: '12px', borderBottom: `1px solid ${theme.colors.border}` }}>\n <FilterBar\n activeFilters={activeFilters}\n onToggleFilter={handleToggleFilter}\n searchQuery={searchQuery}\n onSearchChange={setSearchQuery}\n counts={depCounts}\n />\n </div>\n\n {/* Dependency List */}\n <div style={{ flex: 1, overflow: 'auto', padding: '8px 12px' }}>\n <div\n style={{\n fontSize: theme.fontSizes[0],\n color: theme.colors.textSecondary,\n marginBottom: '8px',\n }}\n >\n Showing {filteredDependencies.length} of {dependencyItems.length}\n </div>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '4px' }}>\n {filteredDependencies.length === 0 ? (\n <div\n style={{\n padding: '12px',\n textAlign: 'center',\n color: theme.colors.textSecondary,\n fontSize: theme.fontSizes[1],\n }}\n >\n No dependencies match your filters\n </div>\n ) : (\n filteredDependencies.map((dep) => (\n <DependencyRow\n key={`${dep.name}-${dep.dependencyType}`}\n dependency={dep}\n />\n ))\n )}\n </div>\n </div>\n </>\n )}\n\n {/* Info Modal */}\n <DependencyInfoModal\n isOpen={showInfoModal}\n onClose={() => setShowInfoModal(false)}\n />\n </div>\n )}\n </div>\n </div>\n );\n }\n\n return (\n <div\n style={{\n backgroundColor: theme.colors.backgroundSecondary,\n borderRadius: '8px',\n border: `1px solid ${theme.colors.border}`,\n overflow: 'hidden',\n }}\n >\n {/* Header */}\n <button\n onClick={onToggle}\n style={{\n width: '100%',\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '12px 16px',\n backgroundColor: 'transparent',\n border: 'none',\n cursor: 'pointer',\n color: theme.colors.text,\n textAlign: 'left',\n }}\n >\n {isExpanded ? (\n <ChevronDown size={16} color={theme.colors.textSecondary} />\n ) : (\n <ChevronRight size={16} color={theme.colors.textSecondary} />\n )}\n <PackageManagerIcon packageManager={pkg.packageData.packageManager} size={18} />\n <div style={{ flex: 1, minWidth: 0 }}>\n <div\n style={{\n fontSize: theme.fontSizes[2],\n fontWeight: 600,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n {pkg.packageData.name}\n </div>\n {pkg.packageData.version && (\n <div\n style={{\n fontSize: theme.fontSizes[0],\n color: theme.colors.textSecondary,\n }}\n >\n v{pkg.packageData.version}\n </div>\n )}\n </div>\n {pkg.packageData.path && (\n <button\n onClick={(e) => {\n e.stopPropagation();\n onPackageClick?.(pkg.packageData.path);\n }}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n padding: '4px 8px',\n backgroundColor: theme.colors.backgroundTertiary,\n border: `1px solid ${theme.colors.border}`,\n borderRadius: '4px',\n color: theme.colors.textSecondary,\n fontSize: theme.fontSizes[0],\n cursor: 'pointer',\n }}\n title=\"Open package folder\"\n >\n <Folder size={12} />\n {pkg.packageData.path || '/'}\n </button>\n )}\n </button>\n\n {/* Expanded Content */}\n {isExpanded && (\n <div style={{ borderTop: `1px solid ${theme.colors.border}` }}>\n {/* Tabs */}\n <div\n style={{\n display: 'flex',\n backgroundColor: theme.colors.backgroundTertiary,\n borderBottom: `1px solid ${theme.colors.border}`,\n }}\n >\n {[\n { id: 'commands' as const, label: 'Commands', count: commands.length },\n { id: 'configs' as const, label: 'Configs', count: configFiles.length },\n { id: 'dependencies' as const, label: 'Deps', count: dependencyItems.length },\n ].map((tab) => (\n <button\n key={tab.id}\n onClick={() => setActiveTab(tab.id)}\n style={{\n flex: 1,\n padding: '8px 12px',\n backgroundColor: activeTab === tab.id ? theme.colors.backgroundSecondary : 'transparent',\n border: 'none',\n borderBottom:\n activeTab === tab.id ? `2px solid ${theme.colors.accent}` : '2px solid transparent',\n color: activeTab === tab.id ? theme.colors.text : theme.colors.textSecondary,\n fontSize: theme.fontSizes[1],\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '6px',\n }}\n >\n {tab.label}\n <span\n style={{\n backgroundColor: theme.colors.backgroundTertiary,\n padding: '1px 6px',\n borderRadius: '10px',\n fontSize: theme.fontSizes[0],\n }}\n >\n {tab.count}\n </span>\n </button>\n ))}\n </div>\n\n {/* Tab Content */}\n <div style={{ padding: activeTab === 'dependencies' ? '0' : '12px', maxHeight: '300px', overflow: 'auto' }}>\n {activeTab === 'commands' && (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '6px' }}>\n {commands.length === 0 ? (\n <div style={{ color: theme.colors.textSecondary, fontSize: theme.fontSizes[1] }}>\n No commands available\n </div>\n ) : (\n commands.map((cmd, idx) => (\n <button\n key={idx}\n onClick={() => onCommandClick?.(cmd, pkg.packageData.path)}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '8px 12px',\n backgroundColor: theme.colors.backgroundTertiary,\n border: `1px solid ${theme.colors.border}`,\n borderRadius: '6px',\n color: theme.colors.text,\n cursor: 'pointer',\n textAlign: 'left',\n }}\n >\n <Terminal size={14} color={theme.colors.accent} />\n <div style={{ flex: 1, minWidth: 0 }}>\n <div style={{ fontWeight: 500, fontSize: theme.fontSizes[1] }}>{cmd.name}</div>\n <div\n style={{\n fontSize: theme.fontSizes[0],\n color: theme.colors.textSecondary,\n fontFamily: 'monospace',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n {cmd.command}\n </div>\n </div>\n {cmd.isLensCommand && (\n <span\n style={{\n padding: '2px 6px',\n backgroundColor: theme.colors.accent + '20',\n color: theme.colors.accent,\n borderRadius: '4px',\n fontSize: theme.fontSizes[0],\n }}\n >\n {cmd.lensId}\n </span>\n )}\n <ExternalLink size={12} color={theme.colors.textSecondary} />\n </button>\n ))\n )}\n </div>\n )}\n\n {activeTab === 'configs' && (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '6px' }}>\n {configFiles.length === 0 ? (\n <div style={{ color: theme.colors.textSecondary, fontSize: theme.fontSizes[1] }}>\n No config files detected\n </div>\n ) : (\n configFiles.map((config, idx) => (\n <button\n key={idx}\n onClick={() => onConfigClick?.(config)}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '8px 12px',\n backgroundColor: theme.colors.backgroundTertiary,\n border: `1px solid ${theme.colors.border}`,\n borderRadius: '6px',\n color: theme.colors.text,\n cursor: 'pointer',\n textAlign: 'left',\n }}\n >\n <Settings size={14} color={theme.colors.textSecondary} />\n <div style={{ flex: 1 }}>\n <div style={{ fontWeight: 500, fontSize: theme.fontSizes[1] }}>{config.name}</div>\n <div\n style={{\n fontSize: theme.fontSizes[0],\n color: theme.colors.textSecondary,\n fontFamily: 'monospace',\n }}\n >\n {config.path}\n </div>\n </div>\n {config.isInline && (\n <span\n style={{\n padding: '2px 6px',\n backgroundColor: theme.colors.textSecondary + '20',\n color: theme.colors.textSecondary,\n borderRadius: '4px',\n fontSize: theme.fontSizes[0],\n }}\n >\n inline\n </span>\n )}\n </button>\n ))\n )}\n </div>\n )}\n\n {activeTab === 'dependencies' && (\n <div style={{ display: 'flex', flexDirection: 'column', height: '100%' }}>\n {dependencyItems.length === 0 ? (\n <div\n style={{\n padding: '12px',\n color: theme.colors.textSecondary,\n fontSize: theme.fontSizes[1],\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '8px',\n }}\n >\n <Package size={16} />\n No dependencies\n </div>\n ) : (\n <>\n {/* Filter Bar */}\n <div style={{ padding: '12px', borderBottom: `1px solid ${theme.colors.border}` }}>\n <FilterBar\n activeFilters={activeFilters}\n onToggleFilter={handleToggleFilter}\n searchQuery={searchQuery}\n onSearchChange={setSearchQuery}\n counts={depCounts}\n />\n </div>\n\n {/* Dependency List */}\n <div style={{ flex: 1, overflow: 'auto', padding: '8px 12px' }}>\n <div\n style={{\n fontSize: theme.fontSizes[0],\n color: theme.colors.textSecondary,\n marginBottom: '8px',\n }}\n >\n Showing {filteredDependencies.length} of {dependencyItems.length}\n </div>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '4px' }}>\n {filteredDependencies.length === 0 ? (\n <div\n style={{\n padding: '12px',\n textAlign: 'center',\n color: theme.colors.textSecondary,\n fontSize: theme.fontSizes[1],\n }}\n >\n No dependencies match your filters\n </div>\n ) : (\n filteredDependencies.map((dep) => (\n <DependencyRow\n key={`${dep.name}-${dep.dependencyType}`}\n dependency={dep}\n />\n ))\n )}\n </div>\n </div>\n </>\n )}\n\n {/* Info Modal */}\n <DependencyInfoModal\n isOpen={showInfoModal}\n onClose={() => setShowInfoModal(false)}\n />\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n );\n};\n\n/**\n * PackageCompositionPanelContent - Internal component that renders the package composition UI\n */\nexport const PackageCompositionPanelContent: React.FC<PackageCompositionPanelProps> = ({\n packages,\n isLoading = false,\n emptyMessage = 'No packages detected',\n onCommandClick,\n onConfigClick,\n onPackageClick,\n}) => {\n const { theme } = useTheme();\n const [selectedPackageId, setSelectedPackageId] = useState<string | null>(null);\n\n // Sort packages: monorepo roots first, then by path\n const sortedPackages = useMemo(() => {\n return [...packages].sort((a, b) => {\n if (a.packageData.isMonorepoRoot && !b.packageData.isMonorepoRoot) return -1;\n if (!a.packageData.isMonorepoRoot && b.packageData.isMonorepoRoot) return 1;\n return a.packageData.path.localeCompare(b.packageData.path);\n });\n }, [packages]);\n\n const selectedPackage = useMemo(() => {\n if (!selectedPackageId) return null;\n return packages.find((p) => p.id === selectedPackageId) || null;\n }, [selectedPackageId, packages]);\n\n if (isLoading) {\n return (\n <div\n style={{\n padding: '20px',\n textAlign: 'center',\n color: theme.colors.textSecondary,\n }}\n >\n Loading packages...\n </div>\n );\n }\n\n if (packages.length === 0) {\n return (\n <div\n style={{\n padding: '20px',\n textAlign: 'center',\n color: theme.colors.textSecondary,\n }}\n >\n {emptyMessage}\n </div>\n );\n }\n\n // Single package: render standalone without card wrapper\n if (packages.length === 1) {\n return (\n <PackageCard\n pkg={packages[0]}\n isExpanded={true}\n onToggle={() => {}}\n onCommandClick={onCommandClick}\n onConfigClick={onConfigClick}\n onPackageClick={onPackageClick}\n standalone\n />\n );\n }\n\n // Multi-package (monorepo): summary cards with slide-to-detail\n return (\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n overflow: 'hidden',\n position: 'relative',\n }}\n >\n {/* Sliding Container */}\n <div\n style={{\n display: 'flex',\n width: '200%',\n height: '100%',\n transform: selectedPackage ? 'translateX(-50%)' : 'translateX(0)',\n transition: 'transform 0.25s ease-in-out',\n }}\n >\n {/* Summary View (left panel) */}\n <div\n style={{\n width: '50%',\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n }}\n >\n {/* Header */}\n <div\n style={{\n padding: '12px 16px',\n borderBottom: `1px solid ${theme.colors.border}`,\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n flexShrink: 0,\n }}\n >\n <FileCode size={16} color={theme.colors.accent} />\n <span style={{ fontSize: theme.fontSizes[1], color: theme.colors.textSecondary }}>\n {packages.length} packages\n </span>\n </div>\n\n {/* Summary Cards */}\n <div\n style={{\n flex: 1,\n overflow: 'auto',\n padding: '12px',\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n }}\n >\n {sortedPackages.map((pkg) => (\n <PackageSummaryCard\n key={pkg.id}\n pkg={pkg}\n allPackages={packages}\n onClick={() => setSelectedPackageId(pkg.id)}\n />\n ))}\n </div>\n </div>\n\n {/* Detail View (right panel) */}\n <div\n style={{\n width: '50%',\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n }}\n >\n {/* Back Header */}\n <div\n style={{\n padding: '8px 12px',\n borderBottom: `1px solid ${theme.colors.border}`,\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n flexShrink: 0,\n }}\n >\n <button\n onClick={() => setSelectedPackageId(null)}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n padding: '4px 8px',\n backgroundColor: 'transparent',\n border: 'none',\n borderRadius: '4px',\n color: theme.colors.accent,\n fontSize: theme.fontSizes[1],\n cursor: 'pointer',\n transition: 'background-color 0.15s ease',\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = theme.colors.backgroundTertiary;\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent';\n }}\n >\n <ChevronLeft size={16} />\n All Packages\n </button>\n </div>\n\n {/* Package Detail */}\n <div style={{ flex: 1, overflow: 'hidden' }}>\n {selectedPackage && (\n <PackageCard\n pkg={selectedPackage}\n isExpanded={true}\n onToggle={() => {}}\n onCommandClick={onCommandClick}\n onConfigClick={onConfigClick}\n onPackageClick={onPackageClick}\n standalone\n />\n )}\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nexport const PackageCompositionPanelPreview: React.FC = () => {\n const { theme } = useTheme();\n\n return (\n <div\n style={{\n padding: '12px',\n fontSize: '12px',\n color: theme.colors.text,\n display: 'flex',\n flexDirection: 'column',\n gap: '6px',\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', gap: '6px' }}>\n <PackageManagerIcon packageManager=\"npm\" size={14} />\n <span>my-app</span>\n </div>\n <div style={{ display: 'flex', alignItems: 'center', gap: '6px', paddingLeft: '8px' }}>\n <Terminal size={12} color={theme.colors.textSecondary} />\n <span style={{ color: theme.colors.textSecondary }}>5 commands</span>\n </div>\n <div style={{ display: 'flex', alignItems: 'center', gap: '6px', paddingLeft: '8px' }}>\n <Settings size={12} color={theme.colors.textSecondary} />\n <span style={{ color: theme.colors.textSecondary }}>3 configs</span>\n </div>\n <div style={{ display: 'flex', alignItems: 'center', gap: '6px', paddingLeft: '8px' }}>\n <Package size={12} color={theme.colors.textSecondary} />\n <span style={{ color: theme.colors.textSecondary }}>12 deps</span>\n </div>\n </div>\n );\n};\n\n/**\n * PackageCompositionPanel - Panel Framework compatible component\n * Uses context.getSlice('packages') to get package layer data\n */\nexport const PackageCompositionPanel: React.FC<PanelComponentProps> = ({ context }) => {\n // Get packages slice from context - data shape is { packages: PackageLayer[], summary: PackageSummary }\n const packagesSlice = context.getSlice<PackagesSliceData>('packages');\n\n const packages = packagesSlice?.data?.packages ?? [];\n const isLoading = packagesSlice?.loading || false;\n\n return (\n <PackageCompositionPanelContent\n packages={packages}\n isLoading={isLoading}\n />\n );\n};\n","import React, { useState, useMemo } from 'react';\nimport { Package, HelpCircle, Boxes } from 'lucide-react';\nimport { ThemeProvider, useTheme } from '@principal-ade/industry-theme';\nimport type { PanelComponentProps } from '../types';\nimport type {\n PackageLayer,\n DependencyItem,\n PackagesSliceData,\n} from '../types/dependencies';\nimport { DependencyInfoModal, DependencyRow, FilterBar } from './components';\n\n/**\n * Sort order for dependency types: peer, production, development\n */\nconst dependencyTypeOrder: Record<DependencyItem['dependencyType'], number> = {\n peer: 0,\n production: 1,\n development: 2,\n};\n\n/**\n * Extract dependencies from a PackageLayer into DependencyItems\n */\nfunction extractDependencies(packageLayer: PackageLayer): DependencyItem[] {\n const { dependencies, devDependencies, peerDependencies } =\n packageLayer.packageData;\n\n const items: DependencyItem[] = [];\n\n if (dependencies) {\n Object.entries(dependencies).forEach(([name, version]) => {\n items.push({ name, version, dependencyType: 'production' });\n });\n }\n\n if (devDependencies) {\n Object.entries(devDependencies).forEach(([name, version]) => {\n items.push({ name, version, dependencyType: 'development' });\n });\n }\n\n if (peerDependencies) {\n Object.entries(peerDependencies).forEach(([name, version]) => {\n items.push({ name, version, dependencyType: 'peer' });\n });\n }\n\n // Sort by type (peer, prod, dev) then by name\n return items.sort((a, b) => {\n const typeCompare = dependencyTypeOrder[a.dependencyType] - dependencyTypeOrder[b.dependencyType];\n if (typeCompare !== 0) return typeCompare;\n return a.name.localeCompare(b.name);\n });\n}\n\n/**\n * DependenciesPanelContent - Internal component that uses theme\n */\nconst DependenciesPanelContent: React.FC<PanelComponentProps> = ({\n context,\n}) => {\n const { theme } = useTheme();\n\n // State\n const [selectedPackagePath, setSelectedPackagePath] = useState<string | null>(\n null\n );\n const [activeFilters, setActiveFilters] = useState<Set<'production' | 'development' | 'peer'>>(new Set());\n const [searchQuery, setSearchQuery] = useState('');\n const [showInfoModal, setShowInfoModal] = useState(false);\n\n // Get packages slice data\n const packagesSlice = context.getSlice<PackagesSliceData>('packages');\n const isLoading = context.isSliceLoading('packages');\n const hasPackages = context.hasSlice('packages');\n\n const packages = useMemo(() => {\n return packagesSlice?.data?.packages ?? [];\n }, [packagesSlice?.data?.packages]);\n\n // Auto-select: single package, or root package in monorepo\n const effectiveSelectedPath = useMemo(() => {\n if (selectedPackagePath !== null) return selectedPackagePath;\n if (packages.length === 1) return packages[0].packageData.path;\n // For monorepos, auto-select root package (path: '')\n const rootPackage = packages.find((p) => p.packageData.path === '');\n if (rootPackage) return '';\n return null;\n }, [selectedPackagePath, packages]);\n\n // Get selected package\n const selectedPackage = useMemo(() => {\n if (effectiveSelectedPath === null) return null;\n return packages.find((p) => p.packageData.path === effectiveSelectedPath);\n }, [effectiveSelectedPath, packages]);\n\n // Extract dependencies from selected package\n const dependencyItems = useMemo(() => {\n if (!selectedPackage) return [];\n return extractDependencies(selectedPackage);\n }, [selectedPackage]);\n\n // Calculate counts\n const counts = useMemo(() => {\n return {\n all: dependencyItems.length,\n production: dependencyItems.filter((d) => d.dependencyType === 'production')\n .length,\n development: dependencyItems.filter(\n (d) => d.dependencyType === 'development'\n ).length,\n peer: dependencyItems.filter((d) => d.dependencyType === 'peer').length,\n };\n }, [dependencyItems]);\n\n // Handle filter toggle\n const handleToggleFilter = (type: 'production' | 'development' | 'peer') => {\n setActiveFilters((prev) => {\n const next = new Set(prev);\n if (next.has(type)) {\n next.delete(type);\n } else {\n next.add(type);\n }\n return next;\n });\n };\n\n // Filter dependencies\n const filteredDependencies = useMemo(() => {\n let filtered = [...dependencyItems];\n\n // Apply search\n if (searchQuery.trim()) {\n const query = searchQuery.toLowerCase();\n filtered = filtered.filter((dep) =>\n dep.name.toLowerCase().includes(query)\n );\n }\n\n // Apply type filter: empty set or all types selected = show all\n const allTypes: Array<'production' | 'development' | 'peer'> = ['production', 'development', 'peer'];\n const availableTypes = allTypes.filter((t) => counts[t] > 0);\n const isAllSelected = activeFilters.size === 0 || availableTypes.every((t) => activeFilters.has(t));\n\n if (!isAllSelected && activeFilters.size > 0) {\n filtered = filtered.filter((dep) => activeFilters.has(dep.dependencyType));\n }\n\n return filtered;\n }, [dependencyItems, searchQuery, activeFilters, counts]);\n\n // Loading state\n if (isLoading) {\n return (\n <div\n style={{\n padding: `${theme.space[3]}px`,\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: theme.colors.textSecondary,\n backgroundColor: theme.colors.background,\n fontFamily: theme.fonts.body,\n }}\n >\n Loading packages...\n </div>\n );\n }\n\n // No packages available\n if (!hasPackages || packages.length === 0) {\n return (\n <div\n style={{\n padding: `${theme.space[3]}px`,\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n gap: `${theme.space[2]}px`,\n color: theme.colors.textSecondary,\n backgroundColor: theme.colors.background,\n fontFamily: theme.fonts.body,\n }}\n >\n <Package size={32} />\n <p style={{ margin: 0 }}>No package data available</p>\n </div>\n );\n }\n\n return (\n <div\n style={{\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n backgroundColor: theme.colors.background,\n color: theme.colors.text,\n fontFamily: theme.fonts.body,\n overflow: 'hidden',\n }}\n >\n {/* Fixed Header Section */}\n <div\n style={{\n flexShrink: 0,\n padding: `${theme.space[3]}px`,\n paddingBottom: `${theme.space[2]}px`,\n display: 'flex',\n flexDirection: 'column',\n gap: `${theme.space[2]}px`,\n borderBottom: `1px solid ${theme.colors.border}`,\n }}\n >\n {/* Title Row */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n }}\n >\n <h3\n style={{\n fontSize: `${theme.fontSizes[2]}px`,\n fontWeight: theme.fontWeights.semibold,\n color: theme.colors.text,\n display: 'flex',\n alignItems: 'center',\n gap: `${theme.space[2]}px`,\n margin: 0,\n }}\n >\n {packages.length > 1 ? (\n <>\n <Boxes size={16} />\n Monorepo Dependencies\n <span\n style={{\n fontSize: `${theme.fontSizes[0]}px`,\n fontWeight: theme.fontWeights.body,\n color: theme.colors.textSecondary,\n }}\n >\n ({packages.length})\n </span>\n </>\n ) : (\n <>\n <Package size={16} />\n Dependencies\n </>\n )}\n </h3>\n <button\n onClick={() => setShowInfoModal(true)}\n style={{\n padding: `${theme.space[1]}px ${theme.space[2]}px`,\n fontSize: `${theme.fontSizes[0]}px`,\n fontWeight: theme.fontWeights.medium,\n fontFamily: theme.fonts.body,\n borderRadius: `${theme.radii[1]}px`,\n border: `1px solid ${theme.colors.border}`,\n backgroundColor: theme.colors.backgroundSecondary,\n color: theme.colors.primary,\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n gap: `${theme.space[1]}px`,\n transition: 'all 0.2s',\n }}\n >\n <HelpCircle size={12} />\n Learn More\n </button>\n </div>\n\n {/* Package Selection (only if multiple packages) */}\n {packages.length > 1 && (\n <select\n value={effectiveSelectedPath ?? '__none__'}\n onChange={(e) => setSelectedPackagePath(e.target.value === '__none__' ? null : e.target.value)}\n style={{\n width: '100%',\n padding: `${theme.space[2]}px`,\n borderRadius: `${theme.radii[1]}px`,\n border: `1px solid ${theme.colors.border}`,\n backgroundColor: theme.colors.backgroundSecondary,\n color: theme.colors.text,\n fontSize: `${theme.fontSizes[1]}px`,\n fontFamily: theme.fonts.body,\n cursor: 'pointer',\n }}\n >\n {packages.map((pkg) => (\n <option key={pkg.packageData.path || '__root__'} value={pkg.packageData.path}>\n {pkg.packageData.name} ({pkg.packageData.path || 'root'})\n </option>\n ))}\n </select>\n )}\n\n {/* Package Info (single package) */}\n {packages.length === 1 && selectedPackage && (\n <div\n style={{\n fontSize: `${theme.fontSizes[0]}px`,\n color: theme.colors.textSecondary,\n }}\n >\n {selectedPackage.packageData.name} • {dependencyItems.length} dependencies\n </div>\n )}\n\n {/* Filter Bar */}\n {selectedPackage && dependencyItems.length > 0 && (\n <FilterBar\n activeFilters={activeFilters}\n onToggleFilter={handleToggleFilter}\n searchQuery={searchQuery}\n onSearchChange={setSearchQuery}\n counts={counts}\n />\n )}\n </div>\n\n {/* Scrollable Dependencies List */}\n {selectedPackage && dependencyItems.length > 0 && (\n <div\n style={{\n flex: 1,\n overflow: 'auto',\n padding: `${theme.space[2]}px ${theme.space[3]}px ${theme.space[3]}px`,\n }}\n >\n {/* Results Count */}\n <div\n style={{\n fontSize: `${theme.fontSizes[0]}px`,\n color: theme.colors.textSecondary,\n marginBottom: `${theme.space[2]}px`,\n }}\n >\n Showing {filteredDependencies.length} of {dependencyItems.length} dependencies\n </div>\n\n {/* Dependency Items */}\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: `${theme.space[1]}px`,\n }}\n >\n {filteredDependencies.length === 0 ? (\n <div\n style={{\n padding: `${theme.space[3]}px`,\n textAlign: 'center',\n color: theme.colors.textSecondary,\n fontSize: `${theme.fontSizes[1]}px`,\n }}\n >\n No dependencies match your filters\n </div>\n ) : (\n filteredDependencies.map((dep) => (\n <DependencyRow\n key={`${dep.name}-${dep.dependencyType}`}\n dependency={dep}\n />\n ))\n )}\n </div>\n </div>\n )}\n\n {/* No package selected */}\n {!selectedPackage && packages.length > 1 && (\n <div\n style={{\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: theme.colors.textSecondary,\n fontSize: `${theme.fontSizes[1]}px`,\n }}\n >\n Select a package to view its dependencies\n </div>\n )}\n\n {/* Info Modal */}\n <DependencyInfoModal\n isOpen={showInfoModal}\n onClose={() => setShowInfoModal(false)}\n />\n </div>\n );\n};\n\n/**\n * DependenciesPanel - Main panel component with ThemeProvider wrapper\n */\nexport const DependenciesPanel: React.FC<PanelComponentProps> = (props) => {\n return (\n <ThemeProvider>\n <DependenciesPanelContent {...props} />\n </ThemeProvider>\n );\n};\n","import type { FileTree } from '@principal-ai/repository-abstraction';\n\nexport interface FileDocument {\n id: string;\n path: string;\n name: string;\n relativePath: string;\n}\n\nexport interface SearchResult {\n path: string;\n name: string;\n relativePath: string;\n score: number;\n}\n\nexport interface DirectoryFilter {\n id: string;\n path: string;\n mode: 'include' | 'exclude';\n}\n\nexport interface SearchOptions {\n directoryFilter?: string;\n excludeDirectory?: boolean;\n fileType?: string;\n limit?: number;\n directoryFilters?: DirectoryFilter[];\n}\n\n/**\n * LocalSearchService - Filename search on FileTree data\n * Content search is provided by the host application\n */\nclass LocalSearchService {\n private documentsMap: Map<string, FileDocument> = new Map();\n private baseDirectory: string = '';\n private initialized = false;\n\n /**\n * Index files from FileTree\n */\n indexFileSystemTree(tree: FileTree, baseDirectory: string): void {\n this.baseDirectory = baseDirectory;\n this.documentsMap.clear();\n\n let index = 0;\n for (const file of tree.allFiles) {\n const absolutePath = file.path.startsWith('/')\n ? file.path\n : `${baseDirectory}/${file.path}`.replace(/\\/+/g, '/');\n\n const doc: FileDocument = {\n id: index.toString(),\n path: absolutePath,\n name: file.name,\n relativePath: file.relativePath,\n };\n\n this.documentsMap.set(doc.id, doc);\n index++;\n }\n\n this.initialized = true;\n }\n\n /**\n * Convert glob pattern to regex\n */\n private globToRegex(pattern: string): RegExp {\n const escapedPattern = pattern\n .replace(/[.+^${}()|[\\]\\\\]/g, '\\\\$&')\n .replace(/\\*/g, '.*')\n .replace(/\\?/g, '.');\n return new RegExp(`^${escapedPattern}$`, 'i');\n }\n\n /**\n * Check if query contains wildcards\n */\n private hasWildcards(query: string): boolean {\n return query.includes('*') || query.includes('?');\n }\n\n /**\n * Check if document matches filter options\n */\n private matchesFilters(doc: FileDocument, options?: SearchOptions): boolean {\n if (options?.directoryFilters && options.directoryFilters.length > 0) {\n const includeFilters = options.directoryFilters.filter(f => f.mode === 'include');\n const excludeFilters = options.directoryFilters.filter(f => f.mode === 'exclude');\n\n for (const filter of excludeFilters) {\n if (doc.relativePath.toLowerCase().includes(filter.path.toLowerCase())) {\n return false;\n }\n }\n\n if (includeFilters.length > 0) {\n const matchesInclude = includeFilters.some(filter =>\n doc.relativePath.toLowerCase().includes(filter.path.toLowerCase())\n );\n if (!matchesInclude) return false;\n }\n } else if (options?.directoryFilter) {\n const shouldInclude = options.excludeDirectory\n ? !doc.relativePath.includes(options.directoryFilter)\n : doc.relativePath.includes(options.directoryFilter);\n\n if (!shouldInclude) return false;\n }\n\n if (options?.fileType) {\n const fileExtension = doc.name.split('.').pop()?.toLowerCase() || '';\n if (fileExtension !== options.fileType.toLowerCase()) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Calculate relevance score for a match\n */\n private calculateScore(doc: FileDocument, query: string): number {\n const lowerQuery = query.toLowerCase();\n const lowerName = doc.name.toLowerCase();\n const lowerPath = doc.relativePath.toLowerCase();\n\n let score = 0;\n\n if (lowerName === lowerQuery) {\n score += 100;\n } else if (lowerName.startsWith(lowerQuery)) {\n score += 80;\n } else if (lowerName.includes(lowerQuery)) {\n score += 60;\n } else if (lowerPath.includes(lowerQuery)) {\n score += 40;\n }\n\n score += Math.max(0, 20 - doc.relativePath.split('/').length * 2);\n\n return score;\n }\n\n /**\n * Search files by filename\n */\n search(query: string, options?: SearchOptions): SearchResult[] {\n if (!this.initialized || !query.trim()) {\n return [];\n }\n\n const limit = options?.limit || 100;\n const results: SearchResult[] = [];\n\n if (this.hasWildcards(query)) {\n const regex = this.globToRegex(query);\n\n this.documentsMap.forEach(doc => {\n if (doc && doc.name && regex.test(doc.name)) {\n if (!this.matchesFilters(doc, options)) return;\n\n results.push({\n path: doc.path,\n name: doc.name,\n relativePath: doc.relativePath,\n score: 90,\n });\n }\n });\n\n return results.slice(0, limit);\n }\n\n const lowerQuery = query.toLowerCase();\n\n this.documentsMap.forEach(doc => {\n if (!doc) return;\n\n const lowerName = doc.name.toLowerCase();\n const lowerPath = doc.relativePath.toLowerCase();\n\n if (lowerName.includes(lowerQuery) || lowerPath.includes(lowerQuery)) {\n if (!this.matchesFilters(doc, options)) return;\n\n results.push({\n path: doc.path,\n name: doc.name,\n relativePath: doc.relativePath,\n score: this.calculateScore(doc, query),\n });\n }\n });\n\n results.sort((a, b) => b.score - a.score);\n return results.slice(0, limit);\n }\n\n /**\n * Get unique directories from indexed files\n */\n getDirectories(): string[] {\n const directories = new Set<string>();\n\n this.documentsMap.forEach(doc => {\n const parts = doc.relativePath.split('/');\n let path = '';\n for (let i = 0; i < parts.length - 1; i++) {\n path = path ? `${path}/${parts[i]}` : parts[i];\n directories.add(path);\n }\n });\n\n return Array.from(directories).sort();\n }\n\n /**\n * Clear the search index\n */\n clear(): void {\n this.documentsMap.clear();\n this.initialized = false;\n }\n\n isInitialized(): boolean {\n return this.initialized;\n }\n}\n\nexport const localSearchService = new LocalSearchService();\n","import React, { useState, useEffect, useCallback, useRef, useMemo } from 'react';\nimport { useTheme } from '@principal-ade/industry-theme';\nimport { FileText, Copy, Check, X } from 'lucide-react';\nimport type { FileTree } from '@principal-ai/repository-abstraction';\nimport type { PanelComponentProps } from '../types';\nimport {\n localSearchService,\n type SearchResult,\n type DirectoryFilter,\n} from '../services/LocalSearchService';\n\nexport interface SearchPanelProps {\n /** File tree data for searching */\n fileTree: FileTree | null;\n /** Base directory / root path for the repository */\n baseDirectory?: string;\n /** Whether data is currently loading */\n isLoading?: boolean;\n /** Callback when a file is selected */\n onFileSelect?: (filePath: string) => void;\n /** Callback when search results change */\n onSearchResultsChange?: (results: SearchResult[]) => void;\n /** Callback when a search result is hovered */\n onSearchResultHover?: (filePath: string | null) => void;\n /** Callback when directory filters change */\n onDirectoryFiltersChange?: (filters: DirectoryFilter[]) => void;\n /** Currently selected file path */\n selectedFile?: string | null;\n}\n\n/**\n * SearchPanelContent - Filename search panel for repository files\n */\nexport const SearchPanelContent: React.FC<SearchPanelProps> = ({\n fileTree,\n baseDirectory = '',\n isLoading = false,\n onFileSelect,\n onSearchResultsChange,\n onSearchResultHover,\n onDirectoryFiltersChange,\n selectedFile,\n}) => {\n const { theme } = useTheme();\n\n // Search state\n const [searchQuery, setSearchQuery] = useState('');\n const [searchResults, setSearchResults] = useState<SearchResult[]>([]);\n const [directoryFilter, setDirectoryFilter] = useState('');\n const [directoryFilters, setDirectoryFilters] = useState<DirectoryFilter[]>([]);\n const [excludeDirectory, setExcludeDirectory] = useState(false);\n\n // UI state\n const [showDirectoryDropdown, setShowDirectoryDropdown] = useState(false);\n const [selectedDirectoryIndex, setSelectedDirectoryIndex] = useState(0);\n const [selectedSearchIndex, setSelectedSearchIndex] = useState(-1);\n const [isSearchResultsFocused, setIsSearchResultsFocused] = useState(false);\n const [copiedPath, setCopiedPath] = useState<string | null>(null);\n\n // Refs\n const searchInputRef = useRef<HTMLInputElement>(null);\n const directoryInputRef = useRef<HTMLInputElement>(null);\n const searchResultsRef = useRef<HTMLDivElement>(null);\n const suppressDropdownRef = useRef<boolean>(false);\n\n // Focus search input on mount\n useEffect(() => {\n searchInputRef.current?.focus();\n }, []);\n\n // Index file tree when it changes\n useEffect(() => {\n if (fileTree && baseDirectory) {\n localSearchService.indexFileSystemTree(fileTree, baseDirectory);\n }\n }, [fileTree, baseDirectory]);\n\n // Notify parent when directory filters change\n useEffect(() => {\n onDirectoryFiltersChange?.(directoryFilters);\n }, [directoryFilters, onDirectoryFiltersChange]);\n\n // Get matching directories for dropdown\n const matchingDirectories = useMemo(() => {\n if (!directoryFilter || !fileTree) return [];\n\n const directories = localSearchService.getDirectories();\n\n return directories\n .filter(dir => {\n const lowerDir = dir.toLowerCase();\n const lowerFilter = directoryFilter.toLowerCase();\n return lowerDir.includes(lowerFilter) && lowerDir !== lowerFilter;\n })\n .map(dir => ({\n path: dir,\n displayPath: dir,\n score: dir.toLowerCase().startsWith(directoryFilter.toLowerCase()) ? 100 : 80,\n }))\n .sort((a, b) => b.score - a.score)\n .slice(0, 10);\n }, [directoryFilter, fileTree]);\n\n // Update dropdown visibility\n useEffect(() => {\n if (suppressDropdownRef.current) {\n suppressDropdownRef.current = false;\n return;\n }\n setShowDirectoryDropdown(directoryFilter.length > 0 && matchingDirectories.length > 0);\n setSelectedDirectoryIndex(0);\n }, [directoryFilter, matchingDirectories.length]);\n\n // Add directory filter\n const addDirectoryFilter = useCallback(\n (path: string, mode: 'include' | 'exclude' = 'include') => {\n if (!path.trim()) return;\n\n const existingFilter = directoryFilters.find(f => f.path === path);\n if (existingFilter) {\n setDirectoryFilters(filters =>\n filters.map(f =>\n f.path === path\n ? { ...f, mode: f.mode === 'include' ? 'exclude' : 'include' }\n : f\n )\n );\n } else {\n const newFilter: DirectoryFilter = {\n id: `filter-${Date.now()}`,\n path: path.trim(),\n mode,\n };\n setDirectoryFilters(filters => [...filters, newFilter]);\n }\n },\n [directoryFilters]\n );\n\n // Remove directory filter\n const removeDirectoryFilter = useCallback((filterId: string) => {\n setDirectoryFilters(filters => filters.filter(f => f.id !== filterId));\n }, []);\n\n // Toggle filter mode\n const toggleFilterMode = useCallback((filterId: string) => {\n setDirectoryFilters(filters =>\n filters.map(f =>\n f.id === filterId\n ? { ...f, mode: f.mode === 'include' ? 'exclude' : 'include' }\n : f\n )\n );\n }, []);\n\n // Handle directory keyboard navigation\n const handleDirectoryKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n switch (e.key) {\n case 'ArrowDown':\n if (showDirectoryDropdown && matchingDirectories.length > 0) {\n e.preventDefault();\n setSelectedDirectoryIndex(prev =>\n prev < matchingDirectories.length - 1 ? prev + 1 : prev\n );\n }\n break;\n case 'ArrowUp':\n if (showDirectoryDropdown && matchingDirectories.length > 0) {\n e.preventDefault();\n setSelectedDirectoryIndex(prev => (prev > 0 ? prev - 1 : prev));\n }\n break;\n case 'Enter':\n e.preventDefault();\n setShowDirectoryDropdown(false);\n suppressDropdownRef.current = true;\n\n if (matchingDirectories.length > 0 && matchingDirectories[selectedDirectoryIndex]) {\n const dir = matchingDirectories[selectedDirectoryIndex];\n addDirectoryFilter(dir.path, excludeDirectory ? 'exclude' : 'include');\n setDirectoryFilter('');\n } else if (directoryFilter.trim()) {\n addDirectoryFilter(directoryFilter, excludeDirectory ? 'exclude' : 'include');\n setDirectoryFilter('');\n }\n break;\n case 'Escape':\n if (showDirectoryDropdown) {\n e.preventDefault();\n setShowDirectoryDropdown(false);\n }\n break;\n }\n },\n [\n showDirectoryDropdown,\n matchingDirectories,\n selectedDirectoryIndex,\n directoryFilter,\n addDirectoryFilter,\n excludeDirectory,\n ]\n );\n\n // Perform search\n const performSearch = useCallback(\n (query: string) => {\n if (!query.trim()) {\n setSearchResults([]);\n onSearchResultsChange?.([]);\n return;\n }\n\n const results = localSearchService.search(query, {\n directoryFilters: directoryFilters.length > 0 ? directoryFilters : undefined,\n limit: 100,\n });\n\n setSearchResults(results);\n onSearchResultsChange?.(results);\n },\n [directoryFilters, onSearchResultsChange]\n );\n\n // Handle search input changes\n useEffect(() => {\n performSearch(searchQuery);\n }, [searchQuery, performSearch]);\n\n // Reset selection when results change\n useEffect(() => {\n setSelectedSearchIndex(-1);\n setIsSearchResultsFocused(false);\n }, [searchResults]);\n\n // Scroll selected item into view\n useEffect(() => {\n if (isSearchResultsFocused && selectedSearchIndex >= 0 && searchResultsRef.current) {\n const selectedElement = searchResultsRef.current.querySelector(\n `.search-result-item:nth-child(${selectedSearchIndex + 1})`\n );\n selectedElement?.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n }\n }, [selectedSearchIndex, isSearchResultsFocused]);\n\n // Handle search keyboard navigation\n const handleSearchKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n switch (e.key) {\n case 'Tab':\n if (\n e.target === searchInputRef.current &&\n !e.shiftKey &&\n searchResults.length > 0\n ) {\n e.preventDefault();\n setIsSearchResultsFocused(true);\n setSelectedSearchIndex(0);\n searchResultsRef.current?.focus();\n }\n break;\n case 'ArrowDown':\n if (isSearchResultsFocused && searchResults.length > 0) {\n e.preventDefault();\n setSelectedSearchIndex(prev =>\n prev < searchResults.length - 1 ? prev + 1 : prev\n );\n }\n break;\n case 'ArrowUp':\n if (isSearchResultsFocused && searchResults.length > 0) {\n e.preventDefault();\n setSelectedSearchIndex(prev => (prev > 0 ? prev - 1 : 0));\n }\n break;\n case 'Enter':\n if (isSearchResultsFocused && selectedSearchIndex >= 0) {\n e.preventDefault();\n const result = searchResults[selectedSearchIndex];\n onFileSelect?.(result.relativePath);\n }\n break;\n case 'Escape':\n if (isSearchResultsFocused) {\n e.preventDefault();\n setIsSearchResultsFocused(false);\n setSelectedSearchIndex(-1);\n searchInputRef.current?.focus();\n }\n break;\n }\n },\n [searchResults, isSearchResultsFocused, selectedSearchIndex, onFileSelect]\n );\n\n // Handle copy path\n const handleCopyPath = useCallback((path: string) => {\n navigator.clipboard.writeText(path).then(() => {\n setCopiedPath(path);\n setTimeout(() => setCopiedPath(null), 2000);\n });\n }, []);\n\n // Highlight matched text\n const highlightMatch = (text: string, match: string): React.ReactNode => {\n if (!match) return text;\n\n const escapedMatch = match.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const regex = new RegExp(`(${escapedMatch})`, 'gi');\n const parts = text.split(regex);\n\n return parts.map((part, i) =>\n regex.test(part) ? (\n <span\n key={i}\n style={{\n backgroundColor: `${theme.colors.primary}40`,\n fontWeight: 'bold',\n }}\n >\n {part}\n </span>\n ) : (\n part\n )\n );\n };\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', height: '100%' }}>\n {/* Search Inputs */}\n <div style={{ borderBottom: `1px solid ${theme.colors.border}` }}>\n {/* Directory Filter Input */}\n <div style={{ padding: '12px', paddingBottom: '8px', position: 'relative' }}>\n <div\n style={{\n marginBottom: '4px',\n fontSize: theme.fontSizes[0],\n color: theme.colors.textSecondary,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n }}\n >\n <span>Directory Filter</span>\n </div>\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>\n <input\n ref={directoryInputRef}\n type=\"text\"\n value={directoryFilter}\n onChange={e => {\n setDirectoryFilter(e.target.value);\n suppressDropdownRef.current = false;\n }}\n onKeyDown={handleDirectoryKeyDown}\n onFocus={() =>\n setShowDirectoryDropdown(\n directoryFilter.length > 0 && matchingDirectories.length > 0\n )\n }\n onBlur={() => {\n setTimeout(() => {\n if (!directoryInputRef.current?.contains(document.activeElement)) {\n setShowDirectoryDropdown(false);\n }\n }, 200);\n }}\n placeholder=\"Type to filter by directory path\"\n style={{\n flex: 1,\n padding: '8px 12px',\n fontSize: theme.fontSizes[1],\n borderRadius: '4px',\n border: `1px solid ${\n directoryFilter && showDirectoryDropdown\n ? theme.colors.primary\n : theme.colors.border\n }`,\n backgroundColor: theme.colors.backgroundSecondary || theme.colors.background,\n color: theme.colors.text,\n outline: 'none',\n }}\n />\n {directoryFilter && (\n <button\n onClick={() => setExcludeDirectory(!excludeDirectory)}\n style={{\n padding: '8px 12px',\n fontSize: theme.fontSizes[0],\n fontWeight: 500,\n borderRadius: '4px',\n border: `1px solid ${\n excludeDirectory ? theme.colors.primary : theme.colors.border\n }`,\n backgroundColor: excludeDirectory\n ? `${theme.colors.primary}20`\n : theme.colors.backgroundSecondary || theme.colors.background,\n color: excludeDirectory ? theme.colors.text : theme.colors.textSecondary,\n cursor: 'pointer',\n }}\n title={\n excludeDirectory\n ? 'Excluding files in this directory'\n : 'Including only files in this directory'\n }\n >\n {excludeDirectory ? 'Exclude' : 'Include'}\n </button>\n )}\n </div>\n\n {/* Directory Dropdown */}\n {showDirectoryDropdown && matchingDirectories.length > 0 && (\n <div\n style={{\n position: 'absolute',\n zIndex: 10,\n width: 'calc(100% - 24px)',\n marginTop: '4px',\n borderRadius: '4px',\n border: `1px solid ${theme.colors.primary}`,\n backgroundColor: theme.colors.background,\n boxShadow: `0 4px 6px -1px ${theme.colors.border}40`,\n maxHeight: '256px',\n overflowY: 'auto',\n }}\n >\n {matchingDirectories.map((dir, index) => (\n <div\n key={dir.path}\n style={{\n padding: '8px 12px',\n cursor: 'pointer',\n fontSize: theme.fontSizes[1],\n backgroundColor:\n index === selectedDirectoryIndex\n ? `${theme.colors.primary}20`\n : 'transparent',\n color:\n index === selectedDirectoryIndex\n ? theme.colors.text\n : theme.colors.textSecondary,\n }}\n onMouseEnter={() => setSelectedDirectoryIndex(index)}\n onClick={() => {\n addDirectoryFilter(dir.path, excludeDirectory ? 'exclude' : 'include');\n setDirectoryFilter('');\n setShowDirectoryDropdown(false);\n directoryInputRef.current?.focus();\n }}\n >\n {dir.displayPath}\n </div>\n ))}\n </div>\n )}\n\n {/* Active Directory Filters */}\n {directoryFilters.length > 0 && (\n <div style={{ marginTop: '8px', display: 'flex', flexWrap: 'wrap', gap: '8px' }}>\n {directoryFilters.map(filter => (\n <div\n key={filter.id}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n padding: '4px 8px',\n borderRadius: '4px',\n fontSize: theme.fontSizes[0],\n backgroundColor:\n filter.mode === 'include'\n ? `${theme.colors.primary}20`\n : `${theme.colors.error}20`,\n border: `1px solid ${\n filter.mode === 'include' ? theme.colors.primary : theme.colors.error\n }`,\n color: theme.colors.text,\n }}\n >\n <span\n style={{ cursor: 'pointer' }}\n onClick={() => toggleFilterMode(filter.id)}\n title=\"Click to toggle include/exclude\"\n >\n {filter.mode === 'include' ? '✓' : '✗'} {filter.path}\n </span>\n <button\n onClick={() => removeDirectoryFilter(filter.id)}\n style={{\n marginLeft: '4px',\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n color: theme.colors.textSecondary,\n padding: 0,\n display: 'flex',\n alignItems: 'center',\n }}\n title=\"Remove filter\"\n >\n <X size={12} />\n </button>\n </div>\n ))}\n </div>\n )}\n </div>\n\n {/* Main Search Input */}\n <div\n style={{\n padding: '12px',\n paddingTop: '8px',\n borderTop: `1px solid ${theme.colors.border}40`,\n }}\n >\n <div style={{ position: 'relative' }}>\n <input\n ref={searchInputRef}\n type=\"text\"\n value={searchQuery}\n onChange={e => setSearchQuery(e.target.value)}\n onKeyDown={handleSearchKeyDown}\n placeholder=\"Search files...\"\n style={{\n width: '100%',\n padding: '8px 12px',\n paddingRight: '36px',\n fontSize: theme.fontSizes[1],\n borderRadius: '4px',\n border: `1px solid ${theme.colors.border}`,\n backgroundColor: theme.colors.backgroundSecondary || theme.colors.background,\n color: theme.colors.text,\n outline: 'none',\n boxSizing: 'border-box',\n }}\n />\n <div\n style={{\n position: 'absolute',\n right: '8px',\n top: '50%',\n transform: 'translateY(-50%)',\n }}\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke={theme.colors.textSecondary}\n strokeWidth=\"2\"\n >\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <path d=\"m21 21-4.35-4.35\" />\n </svg>\n </div>\n </div>\n <div\n style={{\n marginTop: '4px',\n fontSize: theme.fontSizes[0],\n color: theme.colors.textSecondary,\n }}\n >\n Supports wildcards: *.tsx, test?.js\n </div>\n </div>\n </div>\n\n {/* Results */}\n <div\n ref={searchResultsRef}\n tabIndex={-1}\n onKeyDown={handleSearchKeyDown}\n onBlur={() => {\n setTimeout(() => {\n if (document.activeElement !== searchInputRef.current) {\n setIsSearchResultsFocused(false);\n setSelectedSearchIndex(-1);\n }\n }, 100);\n }}\n style={{ flex: 1, overflowY: 'auto', outline: 'none' }}\n >\n {isLoading ? (\n <div\n style={{\n padding: '40px 20px',\n textAlign: 'center',\n color: theme.colors.textSecondary,\n }}\n >\n Loading file tree...\n </div>\n ) : !searchQuery && searchResults.length === 0 ? (\n <div\n style={{\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '32px',\n }}\n >\n <div style={{ textAlign: 'center', maxWidth: '320px' }}>\n <div style={{ marginBottom: '24px', position: 'relative', display: 'inline-block' }}>\n <svg\n width=\"64\"\n height=\"64\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n style={{ color: theme.colors.primary, opacity: 0.8 }}\n >\n <circle\n cx=\"11\"\n cy=\"11\"\n r=\"8\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeDasharray=\"4 2\"\n />\n <path\n d=\"m21 21-4.35-4.35\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n />\n </svg>\n </div>\n\n <h3\n style={{\n fontSize: theme.fontSizes[3],\n fontWeight: 600,\n marginBottom: '8px',\n color: theme.colors.text,\n }}\n >\n Search files\n </h3>\n\n <p\n style={{\n fontSize: theme.fontSizes[1],\n marginBottom: '16px',\n color: theme.colors.textSecondary,\n }}\n >\n Search through filenames to find what you need\n </p>\n\n <div style={{ textAlign: 'left' }}>\n <div style={{ display: 'flex', alignItems: 'flex-start', gap: '8px', marginBottom: '8px' }}>\n <span style={{ fontSize: theme.fontSizes[0], color: theme.colors.primary }}>\n 💡\n </span>\n <div>\n <div style={{ fontSize: theme.fontSizes[0], fontWeight: 500, color: theme.colors.text }}>\n Quick search\n </div>\n <div style={{ fontSize: theme.fontSizes[0], color: theme.colors.textSecondary }}>\n Type to instantly filter by filename\n </div>\n </div>\n </div>\n\n <div style={{ display: 'flex', alignItems: 'flex-start', gap: '8px' }}>\n <span style={{ fontSize: theme.fontSizes[0], color: theme.colors.primary }}>\n 📁\n </span>\n <div>\n <div style={{ fontSize: theme.fontSizes[0], fontWeight: 500, color: theme.colors.text }}>\n Filter by directory\n </div>\n <div style={{ fontSize: theme.fontSizes[0], color: theme.colors.textSecondary }}>\n Use the directory filter to narrow your search\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n ) : searchQuery && searchResults.length === 0 ? (\n <div\n style={{\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '32px',\n }}\n >\n <div style={{ textAlign: 'center', maxWidth: '320px' }}>\n <div style={{ marginBottom: '16px' }}>\n <svg\n width=\"64\"\n height=\"64\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n style={{ color: theme.colors.textSecondary, opacity: 0.5 }}\n >\n <circle cx=\"11\" cy=\"11\" r=\"8\" stroke=\"currentColor\" strokeWidth=\"2\" />\n <path d=\"m21 21-4.35-4.35\" stroke=\"currentColor\" strokeWidth=\"2\" />\n <path d=\"M8 11h6M11 8v6\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" />\n </svg>\n </div>\n\n <h3\n style={{\n fontSize: theme.fontSizes[2],\n fontWeight: 500,\n marginBottom: '8px',\n color: theme.colors.text,\n }}\n >\n No results found\n </h3>\n\n <p\n style={{\n fontSize: theme.fontSizes[1],\n color: theme.colors.textSecondary,\n }}\n >\n No files match{' '}\n <span style={{ fontFamily: 'monospace', color: theme.colors.primary }}>\n \"{searchQuery}\"\n </span>\n </p>\n </div>\n </div>\n ) : (\n <div>\n {searchResults.map((result, index) => {\n const isCurrentFile = selectedFile === result.path || selectedFile === result.relativePath;\n const isSelected = isSearchResultsFocused && index === selectedSearchIndex;\n\n return (\n <div\n key={`${result.path}-${index}`}\n className=\"search-result-item\"\n style={{\n padding: '8px 12px',\n cursor: 'pointer',\n backgroundColor: isSelected\n ? `${theme.colors.primary}25`\n : isCurrentFile\n ? `${theme.colors.primary}15`\n : 'transparent',\n borderLeft: isCurrentFile\n ? `3px solid ${theme.colors.primary}`\n : isSelected\n ? `3px solid ${theme.colors.primary}80`\n : '3px solid transparent',\n borderBottom: `1px solid ${theme.colors.border}20`,\n transition: 'background-color 0.15s',\n }}\n onClick={() => onFileSelect?.(result.relativePath)}\n onMouseEnter={() => {\n if (isSearchResultsFocused) {\n setSelectedSearchIndex(index);\n }\n onSearchResultHover?.(result.relativePath);\n }}\n onMouseLeave={() => onSearchResultHover?.(null)}\n >\n <div style={{ display: 'flex', alignItems: 'flex-start', gap: '8px' }}>\n <div style={{ flexShrink: 0, marginTop: '2px' }}>\n <FileText size={14} color={theme.colors.textSecondary} />\n </div>\n <div style={{ flex: 1, minWidth: 0 }}>\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', gap: '8px' }}>\n <div style={{ flex: 1, minWidth: 0 }}>\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>\n <div\n style={{\n fontSize: theme.fontSizes[1],\n fontWeight: 500,\n color: theme.colors.text,\n }}\n >\n {highlightMatch(result.name, searchQuery)}\n </div>\n {isCurrentFile && (\n <span\n style={{\n fontSize: '10px',\n padding: '2px 6px',\n borderRadius: '4px',\n backgroundColor: `${theme.colors.primary}20`,\n color: theme.colors.primary,\n }}\n >\n CURRENT\n </span>\n )}\n </div>\n <div\n style={{\n fontSize: theme.fontSizes[0],\n marginTop: '2px',\n color: theme.colors.textSecondary,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n {result.relativePath}\n </div>\n </div>\n <button\n style={{\n flexShrink: 0,\n padding: '4px',\n borderRadius: '4px',\n border: `1px solid ${\n copiedPath === result.path ? theme.colors.success : theme.colors.border\n }`,\n backgroundColor:\n copiedPath === result.path\n ? `${theme.colors.success}20`\n : theme.colors.backgroundSecondary || theme.colors.background,\n color:\n copiedPath === result.path\n ? theme.colors.success\n : theme.colors.textSecondary,\n cursor: 'pointer',\n opacity: isSelected || isCurrentFile ? 0.7 : 0,\n transition: 'opacity 0.15s',\n }}\n onMouseEnter={e => {\n (e.currentTarget as HTMLElement).style.opacity = '1';\n }}\n onMouseLeave={e => {\n if (!isSelected && !isCurrentFile && copiedPath !== result.path) {\n (e.currentTarget as HTMLElement).style.opacity = '0';\n }\n }}\n onClick={e => {\n e.stopPropagation();\n handleCopyPath(result.path);\n }}\n title={copiedPath === result.path ? 'Copied!' : 'Copy full path'}\n >\n {copiedPath === result.path ? <Check size={14} /> : <Copy size={14} />}\n </button>\n </div>\n </div>\n </div>\n </div>\n );\n })}\n </div>\n )}\n </div>\n\n {/* Results Summary */}\n {searchQuery && searchResults.length > 0 && (\n <div\n style={{\n padding: '8px 12px',\n borderTop: `1px solid ${theme.colors.border}`,\n fontSize: theme.fontSizes[0],\n color: theme.colors.textSecondary,\n backgroundColor: theme.colors.backgroundSecondary || theme.colors.background,\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>\n <span>\n Found {searchResults.length} result{searchResults.length !== 1 ? 's' : ''} for \"\n {searchQuery}\"\n </span>\n {directoryFilters.length > 0 && (\n <span\n style={{\n padding: '2px 6px',\n borderRadius: '4px',\n backgroundColor: `${theme.colors.primary}20`,\n color: theme.colors.textSecondary,\n }}\n >\n {directoryFilters.length} filter{directoryFilters.length !== 1 ? 's' : ''}\n </span>\n )}\n </div>\n </div>\n )}\n </div>\n );\n};\n\n/**\n * SearchPanelPreview - Preview component for panel switcher\n */\nexport const SearchPanelPreview: React.FC = () => {\n const { theme } = useTheme();\n\n return (\n <div\n style={{\n padding: '12px',\n fontSize: '12px',\n color: theme.colors.text,\n display: 'flex',\n flexDirection: 'column',\n gap: '6px',\n }}\n >\n <div\n style={{\n padding: '6px 8px',\n borderRadius: '4px',\n backgroundColor: theme.colors.backgroundSecondary,\n border: `1px solid ${theme.colors.border}`,\n color: theme.colors.textSecondary,\n fontSize: '11px',\n }}\n >\n Search files...\n </div>\n <div style={{ display: 'flex', alignItems: 'center', gap: '6px', opacity: 0.7 }}>\n <FileText size={12} />\n <span>index.tsx</span>\n </div>\n <div style={{ display: 'flex', alignItems: 'center', gap: '6px', opacity: 0.7 }}>\n <FileText size={12} />\n <span>utils.ts</span>\n </div>\n </div>\n );\n};\n\n/**\n * SearchPanel - Panel Framework compatible component\n * Uses context.getSlice('fileTree') to get data\n */\nexport const SearchPanel: React.FC<PanelComponentProps> = ({ context }) => {\n const fileTreeSlice = context.getSlice<FileTree>('fileTree');\n\n const fileTree = fileTreeSlice?.data ?? null;\n const isLoading = fileTreeSlice?.loading || false;\n\n const rootPath =\n context.currentScope.type === 'repository'\n ? context.currentScope.repository?.path\n : undefined;\n\n return (\n <SearchPanelContent\n fileTree={fileTree}\n baseDirectory={rootPath}\n isLoading={isLoading}\n />\n );\n};\n","import { GitChangesPanel } from './panels/GitChangesPanel';\nimport { PackageCompositionPanel } from './panels/PackageCompositionPanel';\nimport { DependenciesPanel } from './panels/DependenciesPanel';\nimport { SearchPanel } from './panels/SearchPanel';\nimport type { PanelDefinition, PanelContextValue } from './types';\n\n/**\n * Export array of panel definitions.\n * This is the required export for panel extensions.\n */\nexport const panels: PanelDefinition[] = [\n {\n metadata: {\n id: 'industry-theme.git-changes',\n name: 'Git Changes',\n icon: 'GitBranch',\n version: '0.1.0',\n author: 'Industry Theme',\n description: 'View repository git changes with file tree visualization',\n slices: ['git', 'fileTree'],\n },\n component: GitChangesPanel,\n\n onMount: async (context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('Git Changes Panel mounted');\n\n // Refresh git status if available\n if (\n context.hasSlice('git') &&\n !context.isSliceLoading('git')\n ) {\n await context.refresh('repository', 'git');\n }\n },\n\n onUnmount: async (_context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('Git Changes Panel unmounting');\n },\n },\n {\n metadata: {\n id: 'industry-theme.package-composition',\n name: 'Package Composition',\n icon: 'Package',\n version: '0.1.0',\n author: 'Industry Theme',\n description: 'View detected packages, dependencies, configs, and available commands',\n slices: ['packages'],\n },\n component: PackageCompositionPanel,\n\n onMount: async (context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('Package Composition Panel mounted');\n\n // Refresh packages if available\n if (\n context.hasSlice('packages') &&\n !context.isSliceLoading('packages')\n ) {\n await context.refresh('repository', 'packages');\n }\n },\n\n onUnmount: async (_context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('Package Composition Panel unmounting');\n },\n },\n {\n metadata: {\n id: 'industry-theme.dependencies',\n name: 'Dependencies',\n icon: 'Package',\n version: '0.1.0',\n author: 'Industry Theme',\n description: 'View and explore package dependencies',\n slices: ['packages'],\n },\n component: DependenciesPanel,\n\n onMount: async (context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('Dependencies Panel mounted');\n\n // Refresh packages if available\n if (\n context.hasSlice('packages') &&\n !context.isSliceLoading('packages')\n ) {\n await context.refresh('repository', 'packages');\n }\n },\n\n onUnmount: async (_context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('Dependencies Panel unmounting');\n },\n },\n {\n metadata: {\n id: 'industry-theme.search',\n name: 'Search',\n icon: 'Search',\n version: '0.1.0',\n author: 'Industry Theme',\n description: 'Search files in the repository by filename',\n slices: ['fileTree'],\n },\n component: SearchPanel,\n\n onMount: async (context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('Search Panel mounted');\n\n // Refresh fileTree if available\n if (\n context.hasSlice('fileTree') &&\n !context.isSliceLoading('fileTree')\n ) {\n await context.refresh('repository', 'fileTree');\n }\n },\n\n onUnmount: async (_context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('Search Panel unmounting');\n },\n },\n];\n\n/**\n * Optional: Called once when the entire package is loaded.\n */\nexport const onPackageLoad = async () => {\n // eslint-disable-next-line no-console\n console.log('Repository Composition Panels package loaded');\n};\n\n/**\n * Optional: Called once when the package is unloaded.\n */\nexport const onPackageUnload = async () => {\n // eslint-disable-next-line no-console\n console.log('Repository Composition Panels package unloading');\n};\n\n// Re-export components for direct usage (e.g., in Storybook)\nexport { GitChangesPanel, GitChangesPanelContent, GitChangesPanelPreview } from './panels/GitChangesPanel';\nexport type { GitChangesPanelProps } from './panels/GitChangesPanel';\nexport { PackageCompositionPanel, PackageCompositionPanelContent, PackageCompositionPanelPreview } from './panels/PackageCompositionPanel';\nexport type { PackageCompositionPanelProps } from './panels/PackageCompositionPanel';\nexport { DependenciesPanel } from './panels/DependenciesPanel';\nexport { SearchPanel, SearchPanelContent, SearchPanelPreview } from './panels/SearchPanel';\nexport type { SearchPanelProps } from './panels/SearchPanel';\n\n// Re-export types\nexport type {\n GitStatus,\n GitChangeSelectionStatus,\n GitFileStatus,\n FileTree,\n PanelComponentProps,\n PanelDefinition,\n PanelContextValue,\n PackageLayer,\n PackageCommand,\n ConfigFile,\n QualityMetrics,\n DependencyItem,\n PackageSummary,\n PackagesSliceData,\n} from './types';\n"],"names":["theme","React","size","__iconNode","require$$0","useState","useEffect","useLayoutEffect","shim","shimModule","DndContext","identifyNull","identify","safeRun","focus","DefaultCursor","_jsxs","_jsx","_Fragment","reducer","createRoot","data","actions","initialState","Overlay","PreviewNode","t","e","setPrototypeOf","isEqual","defaultItemKey","getItemOffset","getEstimatedTotalSize","getItemSize","getOffsetForIndexAndAlignment","getStartIndexForOffset","getStopIndexForStartIndex","initInstanceProps","validateProps","_","items","validateSharedProps","Cursor","__rest","HandlerRole","_typeof","obj","without","insertItem","getSourceClientOffset","verifyInvariants","ownKeys","_objectSpread","_defineProperty","_classCallCheck","_defineProperties","_createClass","DragDropManagerImpl","formatProdErrorMessage","$$observable","randomString","ActionTypes","isPlainObject","createStore","subscribe","strictEquality","reduce","dirtyHandlerIds","dragOffset","refCount","dragOperation","stateId","DragDropMonitorImpl","handleChange","_getSourceClientOffset","getDifferenceFromInitialOffset","_getDifferenceFromInitialOffset","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","_arrayLikeToArray","HandlerRegistryImpl","addSource","_addSource","addTarget","_addTarget","removeSource","_removeSource","removeTarget","_removeTarget","DndProvider","DragSourceMonitorImpl","DropTargetMonitorImpl","node","SourceConnector","get","TargetConnector","DragSourceImpl","isDragging","equal","DropTargetImpl","memoized","EnterLeaveCounter","isNodeEntered","MonotonicInterpolant","calculateYOffset","calculateXOffset","dataTransfer","NativeTypes.FILE","NativeTypes.HTML","NativeTypes.URL","NativeTypes.TEXT","NativeDragSource","OptionsReader","HTML5BackendImpl","handleDragStart","handleSelectStart","handleDragEnter","handleDragOver","handleDrop","dnd","RowContainer","utils.access","utils.identifyNull","utils.getInsertParentId","utils.getInsertIndex","selection","utils.isDescendant","visibility","utils.dfs","utils.walk","utils\n .waitFor","edit","open","drag","useSyncExternalStore","drop","useState3","React7","Edit2","Plus2","Minus2","GitBranch2","AlertCircle2","FileQuestion2","useMemo5","Tree2","X","PathsFileTreeBuilder","HelpCircle","dependencyTypeOrder","extractDependencies","_a","text"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161]}