@industry-theme/file-city-panel 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"panels.bundle.js","sources":["../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/activity.js","../node_modules/lucide-react/dist/esm/icons/building-2.js","../node_modules/lucide-react/dist/esm/icons/chart-column.js","../node_modules/lucide-react/dist/esm/icons/chevron-down.js","../node_modules/lucide-react/dist/esm/icons/file.js","../node_modules/lucide-react/dist/esm/icons/folder.js","../node_modules/lucide-react/dist/esm/icons/list.js","../node_modules/lucide-react/dist/esm/icons/x.js","../node_modules/@principal-ade/industry-theme/dist/esm/index.js","../src/panels/components/Legend.tsx","../node_modules/@principal-ai/file-city-react/dist/builder/cityDataUtils.js","../node_modules/@principal-ai/file-city-react/dist/render/client/drawLayeredBuildings.js","../node_modules/@principal-ai/file-city-react/dist/components/ArchitectureMapHighlightLayers.js","../node_modules/@principal-ai/file-city-react/dist/utils/fileColorHighlightLayers.js","../node_modules/d3-hierarchy/src/hierarchy/count.js","../node_modules/d3-hierarchy/src/hierarchy/each.js","../node_modules/d3-hierarchy/src/hierarchy/eachBefore.js","../node_modules/d3-hierarchy/src/hierarchy/eachAfter.js","../node_modules/d3-hierarchy/src/hierarchy/find.js","../node_modules/d3-hierarchy/src/hierarchy/sum.js","../node_modules/d3-hierarchy/src/hierarchy/sort.js","../node_modules/d3-hierarchy/src/hierarchy/path.js","../node_modules/d3-hierarchy/src/hierarchy/ancestors.js","../node_modules/d3-hierarchy/src/hierarchy/descendants.js","../node_modules/d3-hierarchy/src/hierarchy/leaves.js","../node_modules/d3-hierarchy/src/hierarchy/links.js","../node_modules/d3-hierarchy/src/hierarchy/iterator.js","../node_modules/d3-hierarchy/src/hierarchy/index.js","../node_modules/d3-hierarchy/src/accessors.js","../node_modules/d3-hierarchy/src/constant.js","../node_modules/d3-hierarchy/src/treemap/round.js","../node_modules/d3-hierarchy/src/treemap/dice.js","../node_modules/d3-hierarchy/src/treemap/slice.js","../node_modules/d3-hierarchy/src/treemap/squarify.js","../node_modules/d3-hierarchy/src/treemap/index.js","../node_modules/@principal-ai/file-city-builder/dist/types/ui-metadata.js","../node_modules/@principal-ai/file-city-builder/dist/GridLayoutManager.js","../node_modules/@principal-ai/file-city-builder/dist/CodeCityBuilderWithGrid.js","../node_modules/@principal-ai/file-city-builder/dist/MultiVersionCityBuilder.js","../node_modules/@principal-ai/file-city-builder/dist/buildMultiVersionCity.js","../node_modules/@principal-ai/file-city-builder/dist/FileTreeBuilder.js","../node_modules/@principal-ai/file-city-builder/dist/types/sorts.js","../node_modules/@principal-ai/file-city-react/dist/hooks/useCodeCityData.js","../node_modules/classcat/index.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/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.js","../node_modules/use-sync-external-store/shim/with-selector.js","../node_modules/zustand/esm/vanilla.mjs","../node_modules/zustand/esm/traditional.mjs","../node_modules/zustand/esm/shallow.mjs","../node_modules/d3-dispatch/src/dispatch.js","../node_modules/d3-selection/src/namespaces.js","../node_modules/d3-selection/src/namespace.js","../node_modules/d3-selection/src/creator.js","../node_modules/d3-selection/src/selector.js","../node_modules/d3-selection/src/selection/select.js","../node_modules/d3-selection/src/array.js","../node_modules/d3-selection/src/selectorAll.js","../node_modules/d3-selection/src/selection/selectAll.js","../node_modules/d3-selection/src/matcher.js","../node_modules/d3-selection/src/selection/selectChild.js","../node_modules/d3-selection/src/selection/selectChildren.js","../node_modules/d3-selection/src/selection/filter.js","../node_modules/d3-selection/src/selection/sparse.js","../node_modules/d3-selection/src/selection/enter.js","../node_modules/d3-selection/src/constant.js","../node_modules/d3-selection/src/selection/data.js","../node_modules/d3-selection/src/selection/exit.js","../node_modules/d3-selection/src/selection/join.js","../node_modules/d3-selection/src/selection/merge.js","../node_modules/d3-selection/src/selection/order.js","../node_modules/d3-selection/src/selection/sort.js","../node_modules/d3-selection/src/selection/call.js","../node_modules/d3-selection/src/selection/nodes.js","../node_modules/d3-selection/src/selection/node.js","../node_modules/d3-selection/src/selection/size.js","../node_modules/d3-selection/src/selection/empty.js","../node_modules/d3-selection/src/selection/each.js","../node_modules/d3-selection/src/selection/attr.js","../node_modules/d3-selection/src/window.js","../node_modules/d3-selection/src/selection/style.js","../node_modules/d3-selection/src/selection/property.js","../node_modules/d3-selection/src/selection/classed.js","../node_modules/d3-selection/src/selection/text.js","../node_modules/d3-selection/src/selection/html.js","../node_modules/d3-selection/src/selection/raise.js","../node_modules/d3-selection/src/selection/lower.js","../node_modules/d3-selection/src/selection/append.js","../node_modules/d3-selection/src/selection/insert.js","../node_modules/d3-selection/src/selection/remove.js","../node_modules/d3-selection/src/selection/clone.js","../node_modules/d3-selection/src/selection/datum.js","../node_modules/d3-selection/src/selection/on.js","../node_modules/d3-selection/src/selection/dispatch.js","../node_modules/d3-selection/src/selection/iterator.js","../node_modules/d3-selection/src/selection/index.js","../node_modules/d3-selection/src/select.js","../node_modules/d3-selection/src/sourceEvent.js","../node_modules/d3-selection/src/pointer.js","../node_modules/d3-drag/src/noevent.js","../node_modules/d3-drag/src/nodrag.js","../node_modules/d3-drag/src/constant.js","../node_modules/d3-drag/src/event.js","../node_modules/d3-drag/src/drag.js","../node_modules/d3-color/src/define.js","../node_modules/d3-color/src/color.js","../node_modules/d3-interpolate/src/constant.js","../node_modules/d3-interpolate/src/color.js","../node_modules/d3-interpolate/src/rgb.js","../node_modules/d3-interpolate/src/number.js","../node_modules/d3-interpolate/src/string.js","../node_modules/d3-interpolate/src/transform/decompose.js","../node_modules/d3-interpolate/src/transform/parse.js","../node_modules/d3-interpolate/src/transform/index.js","../node_modules/d3-interpolate/src/zoom.js","../node_modules/d3-timer/src/timer.js","../node_modules/d3-timer/src/timeout.js","../node_modules/d3-transition/src/transition/schedule.js","../node_modules/d3-transition/src/interrupt.js","../node_modules/d3-transition/src/selection/interrupt.js","../node_modules/d3-transition/src/transition/tween.js","../node_modules/d3-transition/src/transition/interpolate.js","../node_modules/d3-transition/src/transition/attr.js","../node_modules/d3-transition/src/transition/attrTween.js","../node_modules/d3-transition/src/transition/delay.js","../node_modules/d3-transition/src/transition/duration.js","../node_modules/d3-transition/src/transition/ease.js","../node_modules/d3-transition/src/transition/easeVarying.js","../node_modules/d3-transition/src/transition/filter.js","../node_modules/d3-transition/src/transition/merge.js","../node_modules/d3-transition/src/transition/on.js","../node_modules/d3-transition/src/transition/remove.js","../node_modules/d3-transition/src/transition/select.js","../node_modules/d3-transition/src/transition/selectAll.js","../node_modules/d3-transition/src/transition/selection.js","../node_modules/d3-transition/src/transition/style.js","../node_modules/d3-transition/src/transition/styleTween.js","../node_modules/d3-transition/src/transition/text.js","../node_modules/d3-transition/src/transition/textTween.js","../node_modules/d3-transition/src/transition/transition.js","../node_modules/d3-transition/src/transition/end.js","../node_modules/d3-transition/src/transition/index.js","../node_modules/d3-ease/src/cubic.js","../node_modules/d3-transition/src/selection/transition.js","../node_modules/d3-transition/src/selection/index.js","../node_modules/d3-zoom/src/constant.js","../node_modules/d3-zoom/src/event.js","../node_modules/d3-zoom/src/transform.js","../node_modules/d3-zoom/src/noevent.js","../node_modules/d3-zoom/src/zoom.js","../node_modules/@reactflow/core/dist/esm/index.mjs","../node_modules/@reactflow/minimap/dist/esm/index.mjs","../node_modules/@reactflow/controls/dist/esm/index.mjs","../node_modules/@reactflow/background/dist/esm/index.mjs","../node_modules/@reactflow/node-toolbar/dist/esm/index.mjs","../node_modules/@reactflow/node-resizer/dist/esm/index.mjs","../node_modules/@principal-ai/file-city-react/dist/components/CityViewWithReactFlow.js","../node_modules/@principal-ai/file-city-react/dist/index.js","../src/panels/utils/qualityLayers.ts","../src/panels/CodeCityPanel.tsx","../src/tools/index.ts","../src/index.tsx"],"sourcesContent":["/**\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: \"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2\",\n key: \"169zse\"\n }\n ]\n];\nconst Activity = createLucideIcon(\"activity\", __iconNode);\n\nexport { __iconNode, Activity as default };\n//# sourceMappingURL=activity.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: \"M10 12h4\", key: \"a56b0p\" }],\n [\"path\", { d: \"M10 8h4\", key: \"1sr2af\" }],\n [\"path\", { d: \"M14 21v-3a2 2 0 0 0-4 0v3\", key: \"1rgiei\" }],\n [\n \"path\",\n {\n d: \"M6 10H4a2 2 0 0 0-2 2v7a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2h-2\",\n key: \"secmi2\"\n }\n ],\n [\"path\", { d: \"M6 21V5a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v16\", key: \"16ra0t\" }]\n];\nconst Building2 = createLucideIcon(\"building-2\", __iconNode);\n\nexport { __iconNode, Building2 as default };\n//# sourceMappingURL=building-2.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: \"M3 3v16a2 2 0 0 0 2 2h16\", key: \"c24i48\" }],\n [\"path\", { d: \"M18 17V9\", key: \"2bz60n\" }],\n [\"path\", { d: \"M13 17V5\", key: \"1frdt8\" }],\n [\"path\", { d: \"M8 17v-3\", key: \"17ska0\" }]\n];\nconst ChartColumn = createLucideIcon(\"chart-column\", __iconNode);\n\nexport { __iconNode, ChartColumn as default };\n//# sourceMappingURL=chart-column.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 = [\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];\nconst File = createLucideIcon(\"file\", __iconNode);\n\nexport { __iconNode, File as default };\n//# sourceMappingURL=file.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 [\"path\", { d: \"M3 5h.01\", key: \"18ugdj\" }],\n [\"path\", { d: \"M3 12h.01\", key: \"nlz23k\" }],\n [\"path\", { d: \"M3 19h.01\", key: \"noohij\" }],\n [\"path\", { d: \"M8 5h13\", key: \"1pao27\" }],\n [\"path\", { d: \"M8 12h13\", key: \"1za7za\" }],\n [\"path\", { d: \"M8 19h13\", key: \"m83p4d\" }]\n];\nconst List = createLucideIcon(\"list\", __iconNode);\n\nexport { __iconNode, List as default };\n//# sourceMappingURL=list.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","// 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, 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.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","import React from 'react';\nimport { Activity, X, BarChart3 } from 'lucide-react';\nimport { useTheme } from '@principal-ade/industry-theme';\nimport type { ColorMode } from '../utils/qualityLayers';\n\nexport interface LegendFileType {\n id: string;\n name: string;\n fillColor: string;\n borderColor?: string;\n count: number;\n enabled: boolean;\n}\n\nexport interface LegendGitStatus {\n id: string;\n name: string;\n color: string;\n count: number;\n enabled: boolean;\n}\n\nexport interface LegendAgentLayer {\n id: string;\n name: string;\n color: string;\n count: number;\n enabled: boolean;\n}\n\nexport interface LegendQualityMetric {\n id: string;\n name: string;\n color: string;\n count: number;\n enabled: boolean;\n}\n\ninterface LegendProps {\n fileTypes: LegendFileType[];\n gitStatus?: LegendGitStatus[];\n agentLayers?: LegendAgentLayer[];\n qualityMetrics?: LegendQualityMetric[];\n colorMode?: ColorMode;\n onItemClick?: (id: string) => void;\n onGitStatusClick?: (id: string) => void;\n onAgentLayerClick?: (id: string) => void;\n onQualityMetricClick?: (id: string) => void;\n onClearAgentLayers?: () => void;\n position?: 'bottom' | 'right';\n maxSize?: number;\n}\n\n/**\n * Legend component that displays file type colors and layer information.\n * Shows styled rectangles that mimic the actual building rendering.\n * Supports both bottom and right positioning with responsive layout.\n */\nexport const Legend: React.FC<LegendProps> = ({\n fileTypes,\n gitStatus,\n agentLayers,\n qualityMetrics,\n colorMode,\n onItemClick,\n onGitStatusClick,\n onAgentLayerClick,\n onQualityMetricClick,\n onClearAgentLayers,\n position = 'bottom',\n maxSize,\n}) => {\n const { theme } = useTheme();\n\n const hasGitStatus = gitStatus && gitStatus.length > 0;\n const hasAgentLayers = agentLayers && agentLayers.length > 0;\n const hasQualityMetrics = qualityMetrics && qualityMetrics.length > 0;\n\n if (fileTypes.length === 0 && !hasGitStatus && !hasAgentLayers && !hasQualityMetrics) {\n return null;\n }\n\n // Get the quality mode label for display\n const qualityModeLabels: Record<string, string> = {\n coverage: 'Test Coverage',\n eslint: 'Linting Quality',\n typescript: 'Type Safety',\n prettier: 'Code Formatting',\n knip: 'Dead Code Analysis',\n alexandria: 'Documentation',\n };\n\n const isRight = position === 'right';\n\n return (\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: '12px',\n padding: '12px 16px',\n backgroundColor: theme.colors.background,\n borderTop: isRight ? 'none' : `1px solid ${theme.colors.border}`,\n borderLeft: isRight ? `1px solid ${theme.colors.border}` : 'none',\n overflowY: 'auto',\n overflowX: 'hidden',\n boxSizing: 'border-box',\n ...(isRight\n ? {\n width: maxSize,\n maxWidth: maxSize,\n height: '100%',\n }\n : {\n maxHeight: maxSize && maxSize > 0 ? maxSize : undefined,\n width: '100%',\n }),\n flexShrink: 0,\n }}\n >\n {/* Quality metrics section - shows coverage/linting/type safety metrics */}\n {hasQualityMetrics && colorMode && (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '8px' }}>\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n fontSize: '11px',\n fontWeight: 600,\n color: theme.colors.textSecondary,\n textTransform: 'uppercase',\n letterSpacing: '0.5px',\n }}\n >\n <BarChart3 size={12} />\n {qualityModeLabels[colorMode] || 'Quality Metrics'}\n </div>\n\n {/* Quality metric items */}\n <div\n style={{\n display: 'flex',\n flexWrap: 'wrap',\n gap: '8px',\n }}\n >\n {qualityMetrics!.map((metric) => (\n <button\n key={metric.id}\n onClick={() => onQualityMetricClick?.(metric.id)}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '6px 10px',\n backgroundColor: theme.colors.backgroundLight,\n border: `1px solid ${theme.colors.border}`,\n borderRadius: '4px',\n cursor: onQualityMetricClick ? 'pointer' : 'default',\n opacity: metric.enabled ? 1 : 0.4,\n transition: 'all 0.15s ease',\n minWidth: '100px',\n flex: '1 1 100px',\n maxWidth: '200px',\n boxSizing: 'border-box',\n }}\n >\n {/* Colored circle for metric category */}\n <div\n style={{\n width: '12px',\n height: '12px',\n backgroundColor: metric.color,\n borderRadius: '50%',\n flexShrink: 0,\n boxShadow: '0 1px 2px rgba(0,0,0,0.2)',\n }}\n />\n <span\n style={{\n fontSize: '11px',\n color: theme.colors.text,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n flex: 1,\n minWidth: 0,\n }}\n >\n {metric.name}\n </span>\n <span\n style={{\n fontSize: '10px',\n color: theme.colors.textSecondary,\n flexShrink: 0,\n }}\n >\n {metric.count} {metric.count === 1 ? 'file' : 'files'}\n </span>\n </button>\n ))}\n </div>\n </div>\n )}\n\n {/* Agent activity section - shows active agent layers */}\n {hasAgentLayers && (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '8px' }}>\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n }}\n >\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n fontSize: '11px',\n fontWeight: 600,\n color: theme.colors.primary,\n textTransform: 'uppercase',\n letterSpacing: '0.5px',\n }}\n >\n <Activity size={12} />\n Agent Activity\n </div>\n {onClearAgentLayers && (\n <button\n onClick={onClearAgentLayers}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n padding: '2px 6px',\n fontSize: '10px',\n color: theme.colors.textSecondary,\n backgroundColor: 'transparent',\n border: `1px solid ${theme.colors.border}`,\n borderRadius: '3px',\n cursor: 'pointer',\n transition: 'all 0.15s ease',\n }}\n title=\"Clear agent activity\"\n >\n <X size={10} />\n Clear\n </button>\n )}\n </div>\n <div\n style={{\n display: 'flex',\n flexWrap: 'wrap',\n gap: '8px',\n }}\n >\n {agentLayers!.map((layer) => (\n <button\n key={layer.id}\n onClick={() => onAgentLayerClick?.(layer.id)}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '6px 10px',\n backgroundColor: theme.colors.backgroundLight,\n border: `1px solid ${theme.colors.primary}40`,\n borderRadius: '4px',\n cursor: onAgentLayerClick ? 'pointer' : 'default',\n opacity: layer.enabled ? 1 : 0.4,\n transition: 'all 0.15s ease',\n minWidth: '120px',\n flex: '1 1 120px',\n maxWidth: '250px',\n boxSizing: 'border-box',\n }}\n >\n {/* Colored circle for agent layer */}\n <div\n style={{\n width: '12px',\n height: '12px',\n backgroundColor: layer.color,\n borderRadius: '50%',\n flexShrink: 0,\n boxShadow: `0 0 4px ${layer.color}80`,\n }}\n />\n <span\n style={{\n fontSize: '11px',\n color: theme.colors.text,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n flex: 1,\n minWidth: 0,\n }}\n >\n {layer.name}\n </span>\n <span\n style={{\n fontSize: '10px',\n color: theme.colors.textSecondary,\n flexShrink: 0,\n }}\n >\n {layer.count}\n </span>\n </button>\n ))}\n </div>\n </div>\n )}\n\n {/* Git status section */}\n {hasGitStatus && (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '8px' }}>\n <div\n style={{\n fontSize: '11px',\n fontWeight: 600,\n color: theme.colors.textSecondary,\n textTransform: 'uppercase',\n letterSpacing: '0.5px',\n }}\n >\n Git Changes\n </div>\n <div\n style={{\n display: 'flex',\n flexWrap: 'wrap',\n gap: '8px',\n }}\n >\n {gitStatus!.map((status) => (\n <button\n key={status.id}\n onClick={() => onGitStatusClick?.(status.id)}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '6px 10px',\n backgroundColor: theme.colors.backgroundLight,\n border: `1px solid ${theme.colors.border}`,\n borderRadius: '4px',\n cursor: onGitStatusClick ? 'pointer' : 'default',\n opacity: status.enabled ? 1 : 0.4,\n transition: 'all 0.15s ease',\n minWidth: '100px',\n flex: '1 1 100px',\n maxWidth: '200px',\n boxSizing: 'border-box',\n }}\n >\n {/* Colored circle for git status */}\n <div\n style={{\n width: '12px',\n height: '12px',\n backgroundColor: status.color,\n borderRadius: '50%',\n flexShrink: 0,\n boxShadow: '0 1px 2px rgba(0,0,0,0.2)',\n }}\n />\n <span\n style={{\n fontSize: '12px',\n color: theme.colors.text,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n flex: 1,\n minWidth: 0,\n }}\n >\n {status.name}\n </span>\n <span\n style={{\n fontSize: '10px',\n color: theme.colors.textSecondary,\n flexShrink: 0,\n }}\n >\n {status.count}\n </span>\n </button>\n ))}\n </div>\n </div>\n )}\n\n {/* File types section */}\n {fileTypes.length > 0 && (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '8px' }}>\n <div\n style={{\n fontSize: '11px',\n fontWeight: 600,\n color: theme.colors.textSecondary,\n textTransform: 'uppercase',\n letterSpacing: '0.5px',\n }}\n >\n File Types\n </div>\n <div\n style={{\n display: 'flex',\n flexWrap: 'wrap',\n gap: '8px',\n }}\n >\n {fileTypes.map((fileType) => (\n <button\n key={fileType.id}\n onClick={() => onItemClick?.(fileType.id)}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '6px 10px',\n backgroundColor: theme.colors.backgroundLight,\n border: `1px solid ${theme.colors.border}`,\n borderRadius: '4px',\n cursor: onItemClick ? 'pointer' : 'default',\n opacity: fileType.enabled ? 1 : 0.4,\n transition: 'all 0.15s ease',\n minWidth: '100px',\n flex: '1 1 100px',\n maxWidth: '200px',\n boxSizing: 'border-box',\n }}\n >\n {/* Styled rectangle preview */}\n <div\n style={{\n width: '18px',\n height: '14px',\n backgroundColor: fileType.fillColor,\n border: fileType.borderColor\n ? `2px solid ${fileType.borderColor}`\n : 'none',\n borderRadius: '2px',\n flexShrink: 0,\n boxShadow: '0 1px 2px rgba(0,0,0,0.2)',\n }}\n />\n <span\n style={{\n fontSize: '12px',\n color: theme.colors.text,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n flex: 1,\n minWidth: 0,\n }}\n >\n {fileType.name}\n </span>\n <span\n style={{\n fontSize: '10px',\n color: theme.colors.textSecondary,\n flexShrink: 0,\n }}\n >\n {fileType.count}\n </span>\n </button>\n ))}\n </div>\n </div>\n )}\n </div>\n );\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.filterCityDataForMultipleDirectories = exports.filterCityDataForSubdirectory = exports.filterCityDataForSelectiveRender = void 0;\n// Utility functions for selective rendering\nconst filterCityDataForSelectiveRender = (cityData, selectiveRender) => {\n if (!selectiveRender || selectiveRender.mode === 'all') {\n return cityData;\n }\n const { mode, directories, rootDirectory, showParentContext } = selectiveRender;\n switch (mode) {\n case 'filter':\n return filterCityData(cityData, directories || new Set());\n case 'focus':\n // Focus mode doesn't filter data, just affects rendering\n return cityData;\n case 'drilldown':\n return drilldownCityData(cityData, rootDirectory || '', showParentContext || false);\n default:\n return cityData;\n }\n};\nexports.filterCityDataForSelectiveRender = filterCityDataForSelectiveRender;\nconst filterCityData = (cityData, visibleDirectories) => {\n const filteredBuildings = cityData.buildings.filter(building => {\n // Check if building is in any of the visible directories\n return Array.from(visibleDirectories).some(dir => building.path.startsWith(dir + '/') || building.path === dir);\n });\n const filteredDistricts = cityData.districts.filter(district => {\n // Include district if it's in the visible set or is a parent of a visible directory\n return Array.from(visibleDirectories).some(dir => district.path === dir ||\n dir.startsWith(district.path + '/') ||\n district.path.startsWith(dir + '/'));\n });\n return {\n ...cityData,\n buildings: filteredBuildings,\n districts: filteredDistricts,\n bounds: recalculateBounds(filteredBuildings, filteredDistricts),\n };\n};\nconst drilldownCityData = (cityData, rootDirectory, showParentContext) => {\n if (!rootDirectory)\n return cityData;\n // Filter buildings to only those within the root directory\n const filteredBuildings = cityData.buildings\n .filter(building => building.path.startsWith(rootDirectory + '/') || building.path === rootDirectory)\n .map(building => ({\n ...building,\n // Adjust path to be relative to the new root\n path: building.path.startsWith(rootDirectory + '/')\n ? building.path.substring(rootDirectory.length + 1)\n : building.path,\n }));\n // Filter districts to only those within the root directory\n const filteredDistricts = cityData.districts\n .filter(district => district.path.startsWith(rootDirectory + '/') || district.path === rootDirectory)\n .map(district => ({\n ...district,\n // Adjust path to be relative to the new root\n path: district.path.startsWith(rootDirectory + '/')\n ? district.path.substring(rootDirectory.length + 1)\n : district.path === rootDirectory\n ? ''\n : district.path,\n }));\n // If showing parent context, add immediate parent district\n if (showParentContext && rootDirectory) {\n const parentPath = rootDirectory.split('/').slice(0, -1).join('/');\n const parentDistrict = cityData.districts.find(d => d.path === parentPath);\n if (parentDistrict) {\n filteredDistricts.unshift({\n ...parentDistrict,\n path: '../' + parentDistrict.path.split('/').pop(),\n });\n }\n }\n return {\n ...cityData,\n buildings: filteredBuildings,\n districts: filteredDistricts,\n bounds: recalculateBounds(filteredBuildings, filteredDistricts),\n metadata: {\n ...cityData.metadata,\n rootPath: rootDirectory,\n },\n };\n};\nconst recalculateBounds = (buildings, districts) => {\n if (buildings.length === 0 && districts.length === 0) {\n return { minX: 0, maxX: 100, minZ: 0, maxZ: 100 };\n }\n const allX = [\n ...buildings.map(b => b.position.x),\n ...districts.flatMap(d => [d.worldBounds.minX, d.worldBounds.maxX]),\n ];\n const allZ = [\n ...buildings.map(b => b.position.z),\n ...districts.flatMap(d => [d.worldBounds.minZ, d.worldBounds.maxZ]),\n ];\n return {\n minX: Math.min(...allX),\n maxX: Math.max(...allX),\n minZ: Math.min(...allZ),\n maxZ: Math.max(...allZ),\n };\n};\n/**\n * Filter city data to only include a subdirectory and optionally remap coordinates\n * to make the subdirectory the new origin (0,0)\n */\nconst filterCityDataForSubdirectory = (cityData, subdirectoryPath, autoCenter = true) => {\n if (!subdirectoryPath)\n return cityData;\n // Normalize path - remove leading/trailing slashes\n const normalizedPath = subdirectoryPath.replace(/^\\/+|\\/+$/g, '');\n // Filter buildings to only those within the subdirectory\n const filteredBuildings = cityData.buildings.filter(building => building.path === normalizedPath ||\n building.path.startsWith(normalizedPath + '/') ||\n building.path.startsWith(`/${normalizedPath}`));\n // Filter districts to only those within the subdirectory\n const filteredDistricts = cityData.districts.filter(district => district.path === normalizedPath ||\n district.path.startsWith(normalizedPath + '/') ||\n district.path.startsWith(`/${normalizedPath}`));\n // Find the subdirectory district to get its bounds\n const subdirectoryDistrict = cityData.districts.find(d => d.path === normalizedPath);\n if (!subdirectoryDistrict && filteredBuildings.length === 0) {\n // Subdirectory not found or empty\n return {\n ...cityData,\n buildings: [],\n districts: [],\n bounds: { minX: 0, maxX: 100, minZ: 0, maxZ: 100 },\n metadata: {\n ...cityData.metadata,\n rootPath: normalizedPath,\n },\n };\n }\n // Calculate the bounds of the subdirectory content\n const contentBounds = recalculateBounds(filteredBuildings, filteredDistricts);\n let remappedBuildings;\n let remappedDistricts;\n let newBounds;\n if (autoCenter) {\n // Calculate offset to make subdirectory origin (0,0)\n const offsetX = -contentBounds.minX;\n const offsetZ = -contentBounds.minZ;\n // Remap building coordinates relative to subdirectory origin\n remappedBuildings = filteredBuildings.map(building => ({\n ...building,\n position: {\n ...building.position,\n x: building.position.x + offsetX,\n z: building.position.z + offsetZ,\n },\n // Make path relative to subdirectory\n path: building.path === normalizedPath\n ? building.path.split('/').pop() || building.path\n : building.path.substring(normalizedPath.length + 1),\n }));\n // Remap district coordinates relative to subdirectory origin\n remappedDistricts = filteredDistricts.map(district => ({\n ...district,\n worldBounds: {\n minX: district.worldBounds.minX + offsetX,\n maxX: district.worldBounds.maxX + offsetX,\n minZ: district.worldBounds.minZ + offsetZ,\n maxZ: district.worldBounds.maxZ + offsetZ,\n },\n // Make path relative to subdirectory\n path: district.path === normalizedPath\n ? '' // The subdirectory itself becomes the root\n : district.path.substring(normalizedPath.length + 1),\n }));\n // New bounds with origin at (0,0)\n newBounds = {\n minX: 0,\n maxX: contentBounds.maxX - contentBounds.minX,\n minZ: 0,\n maxZ: contentBounds.maxZ - contentBounds.minZ,\n };\n }\n else {\n // Preserve original coordinates when autoCenter is disabled\n remappedBuildings = filteredBuildings.map(building => ({\n ...building,\n // Make path relative to subdirectory\n path: building.path === normalizedPath\n ? building.path.split('/').pop() || building.path\n : building.path.substring(normalizedPath.length + 1),\n }));\n remappedDistricts = filteredDistricts.map(district => ({\n ...district,\n // Make path relative to subdirectory\n path: district.path === normalizedPath\n ? '' // The subdirectory itself becomes the root\n : district.path.substring(normalizedPath.length + 1),\n }));\n // Preserve original full city bounds to maintain spatial context\n newBounds = cityData.bounds;\n }\n return {\n ...cityData,\n buildings: remappedBuildings,\n districts: remappedDistricts,\n bounds: newBounds,\n metadata: {\n ...cityData.metadata,\n rootPath: normalizedPath,\n totalFiles: filteredBuildings.length,\n totalDirectories: filteredDistricts.length,\n },\n };\n};\nexports.filterCityDataForSubdirectory = filterCityDataForSubdirectory;\n/**\n * Filter city data based on multiple directory filters with include/exclude modes\n */\nconst filterCityDataForMultipleDirectories = (cityData, filters, autoCenter = true, combineMode = 'union') => {\n if (!filters || filters.length === 0)\n return cityData;\n // Normalize all filter paths\n const normalizedFilters = filters.map(filter => ({\n ...filter,\n path: filter.path.replace(/^\\/+|\\/+$/g, ''),\n }));\n const includeFilters = normalizedFilters.filter(f => f.mode === 'include');\n const excludeFilters = normalizedFilters.filter(f => f.mode === 'exclude');\n // Helper function to check if a path matches a filter\n const matchesFilter = (itemPath, filterPath) => {\n const normalizedItemPath = itemPath.replace(/^\\/+/, '');\n return normalizedItemPath === filterPath || normalizedItemPath.startsWith(filterPath + '/');\n };\n // Filter buildings based on include/exclude rules\n const filteredBuildings = cityData.buildings.filter(building => {\n // Check excludes first (they take precedence)\n for (const filter of excludeFilters) {\n if (matchesFilter(building.path, filter.path)) {\n return false;\n }\n }\n // If we have includes, must match based on combine mode\n if (includeFilters.length > 0) {\n if (combineMode === 'union') {\n // Union: match any include filter\n return includeFilters.some(filter => matchesFilter(building.path, filter.path));\n }\n else {\n // Intersection: must match all include filters (rare use case)\n return includeFilters.every(filter => matchesFilter(building.path, filter.path));\n }\n }\n // No includes means include everything (except excludes)\n return true;\n });\n // Filter districts with the same logic\n const filteredDistricts = cityData.districts.filter(district => {\n // Check excludes first\n for (const filter of excludeFilters) {\n if (matchesFilter(district.path, filter.path)) {\n return false;\n }\n }\n // Check if district contains any included content\n if (includeFilters.length > 0) {\n if (combineMode === 'union') {\n // Include district if it matches any filter or contains matching content\n return includeFilters.some(filter => matchesFilter(district.path, filter.path) || matchesFilter(filter.path, district.path));\n }\n else {\n // Intersection mode for districts is complex - simplify to union behavior\n return includeFilters.some(filter => matchesFilter(district.path, filter.path) || matchesFilter(filter.path, district.path));\n }\n }\n return true;\n });\n // If nothing matches, return empty city\n if (filteredBuildings.length === 0 && filteredDistricts.length === 0) {\n return {\n ...cityData,\n buildings: [],\n districts: [],\n bounds: { minX: 0, maxX: 100, minZ: 0, maxZ: 100 },\n metadata: {\n ...cityData.metadata,\n rootPath: filters.map(f => `${f.mode}:${f.path}`).join(', '),\n },\n };\n }\n // Calculate bounds and optionally recenter\n const contentBounds = recalculateBounds(filteredBuildings, filteredDistricts);\n if (autoCenter) {\n // Calculate offset to center the content\n const offsetX = -contentBounds.minX;\n const offsetZ = -contentBounds.minZ;\n // Remap coordinates\n const remappedBuildings = filteredBuildings.map(building => ({\n ...building,\n position: {\n ...building.position,\n x: building.position.x + offsetX,\n z: building.position.z + offsetZ,\n },\n }));\n const remappedDistricts = filteredDistricts.map(district => ({\n ...district,\n worldBounds: {\n minX: district.worldBounds.minX + offsetX,\n maxX: district.worldBounds.maxX + offsetX,\n minZ: district.worldBounds.minZ + offsetZ,\n maxZ: district.worldBounds.maxZ + offsetZ,\n },\n }));\n return {\n ...cityData,\n buildings: remappedBuildings,\n districts: remappedDistricts,\n bounds: {\n minX: 0,\n maxX: contentBounds.maxX - contentBounds.minX,\n minZ: 0,\n maxZ: contentBounds.maxZ - contentBounds.minZ,\n },\n metadata: {\n ...cityData.metadata,\n rootPath: filters.map(f => `${f.mode}:${f.path}`).join(', '),\n totalFiles: remappedBuildings.length,\n totalDirectories: remappedDistricts.length,\n },\n };\n }\n else {\n // Return filtered data with original coordinates and bounds\n return {\n ...cityData,\n buildings: filteredBuildings,\n districts: filteredDistricts,\n bounds: cityData.bounds, // Preserve original bounds when autoCenter is false\n metadata: {\n ...cityData.metadata,\n rootPath: filters.map(f => `${f.mode}:${f.path}`).join(', '),\n totalFiles: filteredBuildings.length,\n totalDirectories: filteredDistricts.length,\n },\n };\n }\n};\nexports.filterCityDataForMultipleDirectories = filterCityDataForMultipleDirectories;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.drawGrid = drawGrid;\nexports.drawLayeredDistricts = drawLayeredDistricts;\nexports.drawLayeredBuildings = drawLayeredBuildings;\n// Helper to check if a path matches a layer item\nfunction pathMatchesItem(path, item, checkType = 'children') {\n if (item.type === 'file') {\n return path === item.path;\n }\n else {\n // Directory match\n if (checkType === 'exact') {\n // Only match the directory itself, not its children\n return path === item.path;\n }\n else {\n // Match directory and all its children (original behavior)\n return path === item.path || path.startsWith(item.path + '/');\n }\n }\n}\n// Helper function to draw rounded rectangles\nfunction drawRoundedRect(ctx, x, y, width, height, radius, fill, stroke) {\n ctx.beginPath();\n ctx.moveTo(x + radius, y);\n ctx.lineTo(x + width - radius, y);\n ctx.quadraticCurveTo(x + width, y, x + width, y + radius);\n ctx.lineTo(x + width, y + height - radius);\n ctx.quadraticCurveTo(x + width, y + height, x + width - radius, y + height);\n ctx.lineTo(x + radius, y + height);\n ctx.quadraticCurveTo(x, y + height, x, y + height - radius);\n ctx.lineTo(x, y + radius);\n ctx.quadraticCurveTo(x, y, x + radius, y);\n ctx.closePath();\n if (fill)\n ctx.fill();\n if (stroke)\n ctx.stroke();\n}\n// Get all layer items that apply to a given path\nfunction getLayerItemsForPath(path, layers, checkType = 'children') {\n const matches = [];\n for (const layer of layers) {\n if (!layer.enabled)\n continue;\n for (const item of layer.items) {\n if (pathMatchesItem(path, item, checkType)) {\n matches.push({ layer, item });\n }\n }\n }\n // Sort by priority (highest first)\n return matches.sort((a, b) => b.layer.priority - a.layer.priority);\n}\n// Draw grid helper (copied from original)\nfunction drawGrid(ctx, width, height, gridSize) {\n ctx.save();\n ctx.strokeStyle = 'rgba(255, 255, 255, 0.05)';\n ctx.lineWidth = 1;\n for (let x = 0; x < width; x += gridSize) {\n ctx.beginPath();\n ctx.moveTo(x, 0);\n ctx.lineTo(x, height);\n ctx.stroke();\n }\n for (let y = 0; y < height; y += gridSize) {\n ctx.beginPath();\n ctx.moveTo(0, y);\n ctx.lineTo(width, y);\n ctx.stroke();\n }\n ctx.restore();\n}\n// Helper function to break text intelligently\nfunction breakTextIntelligently(text) {\n // First try hyphen\n if (text.includes('-')) {\n const parts = text.split('-');\n // If we get reasonable parts, use them\n if (parts.length >= 2 && parts.every(p => p.length > 0)) {\n // Group parts to avoid too many lines\n if (parts.length > 3) {\n const mid = Math.ceil(parts.length / 2);\n return [parts.slice(0, mid).join('-'), parts.slice(mid).join('-')];\n }\n return parts;\n }\n }\n // Then try underscore\n if (text.includes('_')) {\n const parts = text.split('_');\n if (parts.length >= 2 && parts.every(p => p.length > 0)) {\n if (parts.length > 3) {\n const mid = Math.ceil(parts.length / 2);\n return [parts.slice(0, mid).join('_'), parts.slice(mid).join('_')];\n }\n return parts;\n }\n }\n // Then try camelCase\n const camelCaseParts = text.match(/[A-Z]?[a-z]+|[A-Z]+(?=[A-Z][a-z]|\\b)/g);\n if (camelCaseParts && camelCaseParts.length >= 2) {\n if (camelCaseParts.length > 3) {\n const mid = Math.ceil(camelCaseParts.length / 2);\n return [camelCaseParts.slice(0, mid).join(''), camelCaseParts.slice(mid).join('')];\n }\n return camelCaseParts;\n }\n // If no good break points, try breaking at word boundaries\n const words = text.split(/\\s+/);\n if (words.length >= 2) {\n const mid = Math.ceil(words.length / 2);\n return [words.slice(0, mid).join(' '), words.slice(mid).join(' ')];\n }\n // Last resort - break in the middle\n if (text.length > 20) {\n const mid = Math.floor(text.length / 2);\n // Try to find a better break point near the middle\n const searchRange = Math.floor(text.length * 0.2);\n let breakPoint = mid;\n // Look for special characters near the middle\n for (let i = 0; i < searchRange; i++) {\n if (mid + i < text.length && /[\\W_]/.test(text[mid + i])) {\n breakPoint = mid + i;\n break;\n }\n if (mid - i >= 0 && /[\\W_]/.test(text[mid - i])) {\n breakPoint = mid - i;\n break;\n }\n }\n return [text.substring(0, breakPoint).trim(), text.substring(breakPoint).trim()];\n }\n // Return as single line if text is short\n return [text];\n}\n// Render strategies implementation\nfunction renderBorderStrategy(ctx, bounds, layer, item, borderRadius = 0) {\n ctx.save();\n ctx.strokeStyle = layer.color;\n ctx.lineWidth = layer.borderWidth || 2;\n ctx.globalAlpha = layer.opacity || 1;\n ctx.setLineDash([]);\n if (item.type === 'directory') {\n // Sharp corners for directories\n ctx.strokeRect(bounds.x, bounds.y, bounds.width, bounds.height);\n }\n else {\n // Use configurable border radius for files/buildings\n const radius = Math.min(borderRadius, Math.min(bounds.width, bounds.height) / 6);\n if (radius > 0) {\n drawRoundedRect(ctx, bounds.x, bounds.y, bounds.width, bounds.height, radius, false, true);\n }\n else {\n ctx.strokeRect(bounds.x, bounds.y, bounds.width, bounds.height);\n }\n }\n ctx.restore();\n}\nfunction renderFillStrategy(ctx, bounds, layer, item, borderRadius = 0) {\n ctx.save();\n ctx.fillStyle = layer.color;\n ctx.globalAlpha = layer.opacity || 0.3;\n if (item.type === 'directory') {\n // Sharp corners for directories\n ctx.fillRect(bounds.x, bounds.y, bounds.width, bounds.height);\n }\n else {\n // Use configurable border radius for files/buildings\n const radius = Math.min(borderRadius, Math.min(bounds.width, bounds.height) / 6);\n if (radius > 0) {\n drawRoundedRect(ctx, bounds.x, bounds.y, bounds.width, bounds.height, radius, true, false);\n }\n else {\n ctx.fillRect(bounds.x, bounds.y, bounds.width, bounds.height);\n }\n }\n ctx.restore();\n}\nfunction renderGlowStrategy(ctx, bounds, layer, item, borderRadius = 0) {\n ctx.save();\n ctx.shadowColor = layer.color;\n ctx.shadowBlur = 10;\n ctx.fillStyle = layer.color;\n ctx.globalAlpha = layer.opacity || 0.5;\n if (item.type === 'directory') {\n // Sharp corners for directories\n ctx.fillRect(bounds.x, bounds.y, bounds.width, bounds.height);\n }\n else {\n // Use configurable border radius for files/buildings\n const radius = Math.min(borderRadius, Math.min(bounds.width, bounds.height) / 6);\n if (radius > 0) {\n drawRoundedRect(ctx, bounds.x, bounds.y, bounds.width, bounds.height, radius, true, false);\n }\n else {\n ctx.fillRect(bounds.x, bounds.y, bounds.width, bounds.height);\n }\n }\n ctx.restore();\n}\nfunction renderPatternStrategy(ctx, bounds, layer, _item) {\n ctx.save();\n ctx.strokeStyle = layer.color;\n ctx.lineWidth = 1;\n ctx.globalAlpha = layer.opacity || 0.5;\n // Create diagonal line pattern\n const spacing = 5;\n ctx.beginPath();\n for (let offset = -bounds.height; offset < bounds.width; offset += spacing) {\n ctx.moveTo(bounds.x + offset, bounds.y);\n ctx.lineTo(bounds.x + offset + bounds.height, bounds.y + bounds.height);\n }\n ctx.stroke();\n ctx.restore();\n}\nfunction renderCoverStrategy(ctx, bounds, layer, item, _scale) {\n const coverOptions = item.coverOptions || {};\n ctx.save();\n // Create clipping path for the cover area - always use sharp corners for directories\n ctx.beginPath();\n ctx.rect(bounds.x, bounds.y, bounds.width, bounds.height);\n ctx.clip();\n // Background - always use sharp corners for directory covers\n ctx.fillStyle = coverOptions.backgroundColor || layer.color;\n ctx.globalAlpha = coverOptions.opacity || 0.8;\n ctx.fillRect(bounds.x, bounds.y, bounds.width, bounds.height);\n // Reset alpha for text/icon\n ctx.globalAlpha = 1;\n // Image/SVG (takes precedence over text icon)\n if (coverOptions.image) {\n const img = new Image();\n img.onload = () => {\n const imageSize = coverOptions.iconSize || Math.min(bounds.width, bounds.height) * 0.4;\n const imageX = bounds.x + bounds.width / 2 - imageSize / 2;\n const imageY = coverOptions.text\n ? bounds.y + bounds.height * 0.25\n : bounds.y + bounds.height / 2 - imageSize / 2;\n ctx.drawImage(img, imageX, imageY, imageSize, imageSize);\n };\n img.src = coverOptions.image;\n }\n // Text Icon (fallback if no image)\n else if (coverOptions.icon) {\n const iconSize = coverOptions.iconSize || Math.min(bounds.width, bounds.height) * 0.3;\n ctx.font = `${iconSize}px Arial`;\n ctx.fillStyle = '#ffffff';\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n const iconY = coverOptions.text\n ? bounds.y + bounds.height * 0.35\n : bounds.y + bounds.height * 0.5;\n ctx.fillText(coverOptions.icon, bounds.x + bounds.width / 2, iconY);\n }\n // Text\n if (coverOptions.text) {\n let textSize = coverOptions.textSize || Math.min(bounds.width, bounds.height) * 0.15;\n ctx.font = `${textSize}px -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif`;\n ctx.fillStyle = '#ffffff';\n ctx.textAlign = 'center';\n // Measure text and see if it fits\n const padding = bounds.width * 0.1;\n const maxWidth = bounds.width - padding * 2;\n const textToRender = coverOptions.text;\n let textWidth = ctx.measureText(textToRender).width;\n // If text is too wide, try breaking it up\n if (textWidth > maxWidth) {\n // Try to break by common separators\n const breakableText = breakTextIntelligently(coverOptions.text);\n if (breakableText.length > 1) {\n // Render multiple lines\n const lineHeight = textSize * 1.2;\n const totalHeight = lineHeight * breakableText.length;\n const startY = bounds.y + (bounds.height - totalHeight) / 2 + lineHeight / 2;\n // Adjust text size if needed to fit all lines\n const maxLines = Math.floor((bounds.height * 0.8) / lineHeight);\n if (breakableText.length > maxLines) {\n textSize = textSize * (maxLines / breakableText.length);\n ctx.font = `${textSize}px -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif`;\n }\n breakableText.forEach((line, index) => {\n const y = startY + index * lineHeight;\n ctx.textBaseline = 'middle';\n ctx.fillText(line, bounds.x + bounds.width / 2, y);\n });\n }\n else {\n // Single line - scale down text if needed\n while (textWidth > maxWidth && textSize > 8) {\n textSize--;\n ctx.font = `${textSize}px -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif`;\n textWidth = ctx.measureText(textToRender).width;\n }\n const textY = coverOptions.icon\n ? bounds.y + bounds.height * 0.65\n : bounds.y + bounds.height * 0.5;\n ctx.textBaseline = 'middle';\n ctx.fillText(textToRender, bounds.x + bounds.width / 2, textY);\n }\n }\n else {\n // Text fits - render normally\n const textY = coverOptions.icon\n ? bounds.y + bounds.height * 0.65\n : bounds.y + bounds.height * 0.5;\n ctx.textBaseline = 'middle';\n ctx.fillText(textToRender, bounds.x + bounds.width / 2, textY);\n }\n }\n ctx.restore();\n}\n// Apply layer rendering to a specific item\nfunction applyLayerRendering(ctx, bounds, layer, item, scale, borderRadius = 0) {\n const strategy = item.renderStrategy || 'border';\n switch (strategy) {\n case 'border':\n renderBorderStrategy(ctx, bounds, layer, item, borderRadius);\n break;\n case 'fill':\n renderFillStrategy(ctx, bounds, layer, item, borderRadius);\n break;\n case 'glow':\n renderGlowStrategy(ctx, bounds, layer, item, borderRadius);\n break;\n case 'pattern':\n renderPatternStrategy(ctx, bounds, layer, item);\n break;\n case 'cover':\n renderCoverStrategy(ctx, bounds, layer, item, scale);\n break;\n case 'custom':\n if (item.customRender) {\n item.customRender(ctx, bounds, scale);\n }\n break;\n }\n}\n// Draw districts with layer support\nfunction drawLayeredDistricts(ctx, districts, worldToCanvas, scale, // This includes the zoom scale for text proportionality\nlayers, hoveredDistrict, fullSize, defaultDirectoryColor, layoutConfig, abstractedPaths, // Paths of directories that are abstracted (have covers)\nshowDirectoryLabels = true, borderRadius = 0) {\n districts.forEach(district => {\n const districtPath = district.path || '';\n const isRoot = !districtPath || districtPath === '';\n // Check if this root district has layer matches (like covers) - if so, render it\n const rootLayerMatches = getLayerItemsForPath(districtPath, layers, 'exact');\n const hasLayerRendering = rootLayerMatches.length > 0;\n // Skip root districts unless they have layer rendering (covers, highlights, etc.)\n if (isRoot && !hasLayerRendering)\n return;\n const canvasPos = worldToCanvas(district.worldBounds.minX, district.worldBounds.minZ);\n const width = (district.worldBounds.maxX - district.worldBounds.minX) * scale;\n const depth = (district.worldBounds.maxZ - district.worldBounds.minZ) * scale;\n const bounds = {\n x: canvasPos.x,\n y: canvasPos.y,\n width: width,\n height: depth,\n };\n // Get base color\n const baseColorHex = defaultDirectoryColor || '#4B5155';\n const hexToRgb = (hex) => {\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n return result\n ? [parseInt(result[1], 16), parseInt(result[2], 16), parseInt(result[3], 16)]\n : [75, 80, 85];\n };\n const baseColor = hexToRgb(baseColorHex);\n // Base rendering\n let opacity = 0.3;\n let borderOpacity = 0.6;\n // Check if district has layer highlighting - use exact matching for districts\n const layerMatches = getLayerItemsForPath(districtPath, layers, 'exact');\n const hasLayerHighlight = layerMatches.length > 0;\n if (hasLayerHighlight) {\n opacity = 0.5;\n borderOpacity = 0.8;\n }\n const isHovered = hoveredDistrict === district;\n if (isHovered) {\n opacity = Math.max(opacity, 0.4);\n borderOpacity = Math.max(borderOpacity, 0.7);\n }\n // Fill districts with configurable border radius\n ctx.fillStyle = `rgba(${baseColor[0]}, ${baseColor[1]}, ${baseColor[2]}, ${opacity})`;\n if (borderRadius > 0) {\n drawRoundedRect(ctx, bounds.x, bounds.y, bounds.width, bounds.height, borderRadius, true, false);\n }\n else {\n ctx.fillRect(bounds.x, bounds.y, bounds.width, bounds.height);\n }\n // Border with configurable border radius\n ctx.strokeStyle = `rgba(${Math.min(255, baseColor[0] + 40)}, ${Math.min(255, baseColor[1] + 40)}, ${Math.min(255, baseColor[2] + 40)}, ${borderOpacity})`;\n ctx.lineWidth = 1;\n if (borderRadius > 0) {\n drawRoundedRect(ctx, bounds.x, bounds.y, bounds.width, bounds.height, borderRadius, false, true);\n }\n else {\n ctx.strokeRect(bounds.x, bounds.y, bounds.width, bounds.height);\n }\n // Apply layer-specific rendering (covers, etc.)\n for (const match of layerMatches) {\n // Only apply if this is specifically a directory item or if it's a cover strategy\n if (match.item.type === 'directory' || match.item.renderStrategy === 'cover') {\n applyLayerRendering(ctx, bounds, match.layer, match.item, scale, borderRadius);\n }\n }\n // Hover highlight with configurable border radius\n if (isHovered) {\n ctx.strokeStyle = '#ffffff';\n ctx.lineWidth = 2;\n if (borderRadius > 0) {\n drawRoundedRect(ctx, bounds.x, bounds.y, bounds.width, bounds.height, borderRadius, false, true);\n }\n else {\n ctx.strokeRect(bounds.x, bounds.y, bounds.width, bounds.height);\n }\n }\n // Check if this district has a cover layer item or is abstracted\n const hasCover = layerMatches.some(match => match.item.renderStrategy === 'cover' && match.layer.enabled) ||\n (abstractedPaths && abstractedPaths.has(districtPath));\n // Skip label rendering if district has a cover or is abstracted\n if (showDirectoryLabels && !hasCover) {\n // Check if this is a grid cell with dedicated label space\n const isGridCell = district.path?.startsWith('grid-cell-') && district.label;\n let districtName;\n let labelBounds;\n if (isGridCell && district.label) {\n // Use grid cell label configuration\n districtName = district.label.text;\n // Transform label bounds from world space to canvas space\n const labelCanvasPos = worldToCanvas(district.label.bounds.minX, district.label.bounds.minZ);\n const labelCanvasWidth = (district.label.bounds.maxX - district.label.bounds.minX) * scale;\n const labelCanvasHeight = (district.label.bounds.maxZ - district.label.bounds.minZ) * scale;\n labelBounds = {\n x: labelCanvasPos.x,\n y: labelCanvasPos.y,\n width: labelCanvasWidth,\n height: labelCanvasHeight,\n };\n }\n else {\n // Use traditional district name from path\n districtName = district.path?.split('/').pop() || 'root';\n }\n // Calculate actual available label space\n let availableLabelHeight;\n let actualLabelHeight;\n let labelWidth;\n let labelX;\n let labelY;\n if (labelBounds) {\n // For grid cells, use dedicated label space\n availableLabelHeight = labelBounds.height;\n actualLabelHeight = labelBounds.height * scale;\n labelWidth = labelBounds.width;\n labelX = labelBounds.x;\n labelY = labelBounds.y;\n }\n else {\n // For traditional districts, use padding space\n availableLabelHeight = layoutConfig?.paddingTop || (fullSize ? 24 : 20);\n actualLabelHeight = availableLabelHeight * scale;\n labelWidth = bounds.width;\n labelX = bounds.x;\n labelY = bounds.y;\n }\n // Only check absolute label space, not ratio\n const minMeaningfulLabelSpace = fullSize ? 12 : 10; // Just need readable space\n // For grid cells with dedicated label space, always show the label\n const labelSpaceSufficient = labelBounds\n ? true\n : actualLabelHeight >= minMeaningfulLabelSpace;\n if (labelSpaceSufficient) {\n ctx.save();\n ctx.fillStyle = hasLayerHighlight ? 'rgba(255, 255, 255, 0.9)' : 'rgba(255, 255, 255, 0.7)';\n // Step 1: Start with proportional sizing (for visual consistency)\n // For grid cell labels, use larger base size\n const baseFontSize = labelBounds ? (fullSize ? 28 : 20) : fullSize ? 18 : 13;\n const scaleFactor = Math.min(Math.max(scale / 1.0, 0.5), 3.0);\n const proportionalFontSize = baseFontSize * scaleFactor;\n // Step 2: Clamp to readable bounds (for usability)\n const minReadableSize = labelBounds ? 14 : 10; // Larger minimum for grid labels\n // No max for grid labels - let them scale with cell size, regular labels still capped\n const maxReadableSize = labelBounds ? Number.MAX_SAFE_INTEGER : 24;\n const clampedSize = Math.min(Math.max(proportionalFontSize, minReadableSize), maxReadableSize);\n // Step 3: Apply container-fit within those bounds (for proper fitting)\n const horizontalPadding = 8; // Small padding from edges\n const availableWidth = labelWidth - horizontalPadding * 2;\n // Start with the clamped proportional size, but respect container limits\n let fontSize = Math.min(clampedSize, availableLabelHeight * 0.8); // Use 80% of available height as max\n // Use bold font for grid cell labels, normal for others\n const fontWeight = labelBounds ? 'bold' : 'normal';\n ctx.font = `${fontWeight} ${fontSize}px -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif`;\n let textWidth = ctx.measureText(districtName).width;\n // Scale down if text is too wide for the container\n while (textWidth > availableWidth && fontSize > minReadableSize) {\n fontSize--;\n ctx.font = `${fontWeight} ${fontSize}px -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif`;\n textWidth = ctx.measureText(districtName).width;\n }\n // For grid cells, always render the label. For others, check minimum size\n if (labelBounds || fontSize >= minReadableSize) {\n ctx.textAlign = 'center';\n if (labelBounds) {\n // For grid cells, position label in dedicated label space\n // Position near bottom of label area for better visual connection to content\n ctx.textBaseline = 'bottom';\n ctx.fillText(districtName, labelX + labelWidth / 2, labelY + labelBounds.height * 0.95);\n }\n else {\n // For traditional districts, position at bottom of district\n ctx.textBaseline = 'bottom';\n const bottomPadding = 2;\n ctx.fillText(districtName, labelX + labelWidth / 2, labelY + bounds.height - bottomPadding);\n }\n }\n ctx.restore();\n }\n } // End of !hasCover check\n });\n}\n/**\n * Draw a React symbol (⚛) at the given position\n */\nfunction drawReactSymbol(ctx, x, y, size, color = '#00D8FF', glow = true) {\n ctx.save();\n // Position and setup\n ctx.translate(x, y);\n // Glow effect for React symbol\n if (glow) {\n ctx.shadowColor = color;\n ctx.shadowBlur = 8;\n }\n // Draw the React symbol (⚛)\n ctx.fillStyle = color;\n ctx.font = `${size}px Arial`;\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n ctx.fillText('⚛', 0, 0);\n ctx.restore();\n}\n/**\n * Check if a file is a React file (JSX/TSX)\n */\nfunction isReactFile(fileExtension) {\n if (!fileExtension)\n return false;\n const ext = fileExtension.toLowerCase();\n return ext === '.jsx' || ext === '.tsx';\n}\n// Draw buildings with layer support\nfunction drawLayeredBuildings(ctx, buildings, worldToCanvas, scale, layers, hoveredBuilding, defaultBuildingColor, showFileNames, hoverBorderColor, disableOpacityDimming, showFileTypeIcons, borderRadius = 0) {\n buildings.forEach(building => {\n const pos = worldToCanvas(building.position.x, building.position.z);\n // Calculate building dimensions\n let width, height;\n if (building.dimensions[0] > 50 || building.dimensions[2] > 50) {\n width = building.dimensions[0] * scale * 0.95;\n height = building.dimensions[2] * scale * 0.95;\n }\n else {\n const size = Math.max(2, Math.max(building.dimensions[0], building.dimensions[2]) * scale * 0.9);\n width = size;\n height = size;\n }\n const bounds = {\n x: pos.x - width / 2,\n y: pos.y - height / 2,\n width: width,\n height: height,\n };\n // Get layer matches for this building - only check file items, not parent directories\n const layerMatches = getLayerItemsForPath(building.path, layers).filter(match => match.item.type === 'file'); // Only apply file-specific highlights to buildings\n const hasLayerHighlight = layerMatches.length > 0;\n const isHovered = hoveredBuilding === building;\n // Building color\n let color;\n if (building.color) {\n color = building.color;\n }\n else {\n color = defaultBuildingColor || '#A1A7AE';\n }\n // Opacity\n let opacity = 1;\n if (!disableOpacityDimming) {\n opacity = hasLayerHighlight ? 1 : 0.3;\n }\n // Draw building with configurable border radius\n ctx.globalAlpha = opacity;\n ctx.fillStyle = color;\n const actualRadius = Math.min(borderRadius, Math.min(bounds.width, bounds.height) / 6);\n if (actualRadius > 0) {\n drawRoundedRect(ctx, bounds.x, bounds.y, bounds.width, bounds.height, actualRadius, true, false);\n }\n else {\n ctx.fillRect(bounds.x, bounds.y, bounds.width, bounds.height);\n }\n ctx.globalAlpha = 1;\n // Apply layer-specific rendering\n for (const match of layerMatches) {\n applyLayerRendering(ctx, bounds, match.layer, match.item, scale, actualRadius);\n }\n // Hover effect with configurable border radius\n if (isHovered) {\n ctx.strokeStyle = hoverBorderColor ? `${hoverBorderColor}CC` : 'rgba(255, 255, 255, 0.8)';\n ctx.lineWidth = 1;\n ctx.setLineDash([]);\n if (actualRadius > 0) {\n drawRoundedRect(ctx, bounds.x - 1, bounds.y - 1, bounds.width + 2, bounds.height + 2, actualRadius, false, true);\n }\n else {\n ctx.strokeRect(bounds.x - 1, bounds.y - 1, bounds.width + 2, bounds.height + 2);\n }\n }\n // Draw React symbol for JSX/TSX files (only if enabled)\n if (showFileTypeIcons && isReactFile(building.fileExtension)) {\n // Position React symbol centered in the building\n // Size is 75% of the smaller dimension\n const reactSize = Math.min(width, height) * 0.75;\n const reactX = pos.x;\n const reactY = pos.y;\n drawReactSymbol(ctx, reactX, reactY, reactSize);\n }\n // Draw filename if enabled\n if (showFileNames && width > 100 && height > 30) {\n const fileName = building.path.split('/').pop() || '';\n ctx.save();\n const fontSize = Math.min(30, Math.max(10, Math.floor(Math.min(width, height) * 0.3)));\n ctx.font = `${fontSize}px -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif`;\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n const textMetrics = ctx.measureText(fileName);\n const textWidth = textMetrics.width;\n if (textWidth < width - 8) {\n // Background for contrast\n const textPadding = 2;\n const textHeight = fontSize * 1.2;\n ctx.fillStyle = 'rgba(0, 0, 0, 0.7)';\n ctx.fillRect(pos.x - textWidth / 2 - textPadding, pos.y - textHeight / 2, textWidth + textPadding * 2, textHeight);\n // Text\n ctx.fillStyle = 'rgba(255, 255, 255, 0.95)';\n ctx.fillText(fileName, pos.x, pos.y);\n }\n ctx.restore();\n }\n });\n}\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || (function () {\n var ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n };\n return function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ArchitectureMapHighlightLayers = void 0;\nconst react_1 = __importStar(require(\"react\"));\nconst industry_theme_1 = require(\"@principal-ade/industry-theme\");\nconst cityDataUtils_1 = require(\"../builder/cityDataUtils\");\nconst drawLayeredBuildings_1 = require(\"../render/client/drawLayeredBuildings\");\nconst DEFAULT_DISPLAY_OPTIONS = {\n showGrid: false,\n showConnections: true,\n maxConnections: 20,\n gridSize: 50,\n padding: 20,\n};\n// Spatial Grid for fast hit testing (copied from original for now)\nclass SpatialGrid {\n constructor(bounds, cellSize = 100) {\n this.grid = new Map();\n this.bounds = bounds;\n this.cellSize = cellSize;\n }\n getCellsForBounds(minX, maxX, minZ, maxZ) {\n const cells = [];\n const startCellX = Math.floor((minX - this.bounds.minX) / this.cellSize);\n const endCellX = Math.floor((maxX - this.bounds.minX) / this.cellSize);\n const startCellZ = Math.floor((minZ - this.bounds.minZ) / this.cellSize);\n const endCellZ = Math.floor((maxZ - this.bounds.minZ) / this.cellSize);\n for (let x = startCellX; x <= endCellX; x++) {\n for (let z = startCellZ; z <= endCellZ; z++) {\n cells.push(`${x},${z}`);\n }\n }\n return cells;\n }\n addBuilding(building) {\n const size = Math.max(building.dimensions[0], building.dimensions[2]);\n const halfSize = size / 2;\n const minX = building.position.x - halfSize;\n const maxX = building.position.x + halfSize;\n const minZ = building.position.z - halfSize;\n const maxZ = building.position.z + halfSize;\n const cells = this.getCellsForBounds(minX, maxX, minZ, maxZ);\n cells.forEach(cellKey => {\n if (!this.grid.has(cellKey)) {\n this.grid.set(cellKey, []);\n }\n const cellItems = this.grid.get(cellKey);\n if (cellItems) {\n cellItems.push(building);\n }\n });\n }\n addDistrict(district) {\n const cells = this.getCellsForBounds(district.worldBounds.minX, district.worldBounds.maxX, district.worldBounds.minZ, district.worldBounds.maxZ);\n cells.forEach(cellKey => {\n if (!this.grid.has(cellKey)) {\n this.grid.set(cellKey, []);\n }\n const cellItems = this.grid.get(cellKey);\n if (cellItems) {\n cellItems.push(district);\n }\n });\n }\n query(x, z, radius = 10) {\n const cells = this.getCellsForBounds(x - radius, x + radius, z - radius, z + radius);\n const results = [];\n const seen = new Set();\n cells.forEach(cellKey => {\n const items = this.grid.get(cellKey);\n if (items) {\n items.forEach(item => {\n const key = 'dimensions' in item ? `b_${item.path}` : `d_${item.path}`;\n if (!seen.has(key)) {\n seen.add(key);\n results.push(item);\n }\n });\n }\n });\n return results;\n }\n clear() {\n this.grid.clear();\n }\n}\nfunction ArchitectureMapHighlightLayersInner({ cityData, highlightLayers = [], onLayerToggle, focusDirectory = null, rootDirectoryName, onDirectorySelect, onFileClick, enableZoom = false, fullSize = false, showGrid = false, showFileNames = false, className = '', selectiveRender, canvasBackgroundColor, hoverBorderColor, disableOpacityDimming = true, defaultDirectoryColor, defaultBuildingColor, subdirectoryMode, showLayerControls = false, showFileTypeIcons = true, showDirectoryLabels = true, transform = { rotation: 0 }, // Default to no rotation\nonHover, buildingBorderRadius = 0, districtBorderRadius = 0, }) {\n const { theme } = (0, industry_theme_1.useTheme)();\n // Use theme colors as defaults, with prop overrides\n const resolvedCanvasBackgroundColor = canvasBackgroundColor ?? theme.colors.background;\n const resolvedHoverBorderColor = hoverBorderColor ?? theme.colors.text;\n const resolvedDefaultDirectoryColor = defaultDirectoryColor ?? theme.colors.backgroundSecondary;\n const resolvedDefaultBuildingColor = defaultBuildingColor ?? theme.colors.muted;\n const canvasRef = (0, react_1.useRef)(null);\n const containerRef = (0, react_1.useRef)(null);\n const [interactionState, setInteractionState] = (0, react_1.useState)({\n hoveredDistrict: null,\n hoveredBuilding: null,\n mousePos: { x: 0, y: 0 },\n });\n const [zoomState, setZoomState] = (0, react_1.useState)({\n scale: 1,\n offsetX: 0,\n offsetY: 0,\n isDragging: false,\n lastMousePos: { x: 0, y: 0 },\n hasMouseMoved: false,\n });\n (0, react_1.useEffect)(() => {\n if (!enableZoom) {\n setZoomState(prev => ({\n ...prev,\n scale: 1,\n offsetX: 0,\n offsetY: 0,\n isDragging: false,\n hasMouseMoved: false,\n }));\n }\n }, [enableZoom]);\n const [hitTestCache, setHitTestCache] = (0, react_1.useState)(null);\n const calculateCanvasResolution = (fileCount, _cityBounds) => {\n const minSize = 400;\n const scaleFactor = Math.sqrt(fileCount / 5);\n const resolution = Math.max(minSize, minSize + scaleFactor * 300);\n return { width: resolution, height: resolution };\n };\n const [canvasSize, setCanvasSize] = (0, react_1.useState)(() => calculateCanvasResolution(cityData?.buildings?.length || 10, cityData?.bounds));\n const [displayOptions] = (0, react_1.useState)({\n ...DEFAULT_DISPLAY_OPTIONS,\n showGrid,\n });\n const filteredCityData = (0, react_1.useMemo)(() => {\n if (!cityData) {\n return undefined;\n }\n let processedData = cityData;\n if (subdirectoryMode?.enabled) {\n const autoCenter = subdirectoryMode.autoCenter === true;\n // Use new multi-filter function if filters are provided\n if (subdirectoryMode.filters && subdirectoryMode.filters.length > 0) {\n processedData = (0, cityDataUtils_1.filterCityDataForMultipleDirectories)(cityData, subdirectoryMode.filters, autoCenter, subdirectoryMode.combineMode || 'union');\n }\n else if (subdirectoryMode.rootPath) {\n // Fallback to single path for backward compatibility\n processedData = (0, cityDataUtils_1.filterCityDataForSubdirectory)(cityData, subdirectoryMode.rootPath, autoCenter);\n }\n }\n return (0, cityDataUtils_1.filterCityDataForSelectiveRender)(processedData, selectiveRender);\n }, [cityData, selectiveRender, subdirectoryMode]);\n const canvasSizingData = (0, react_1.useMemo)(() => {\n if (subdirectoryMode?.enabled && subdirectoryMode.autoCenter !== true && cityData) {\n return cityData;\n }\n return filteredCityData;\n }, [subdirectoryMode?.enabled, subdirectoryMode?.autoCenter, cityData, filteredCityData]);\n // Build hit test cache with spatial indexing\n const buildHitTestCache = (0, react_1.useCallback)((cityData, scale, offsetX, offsetZ, zoomState, abstractedPaths) => {\n const spatialGrid = new SpatialGrid(cityData.bounds);\n // Only add visible buildings to spatial grid\n cityData.buildings.forEach(building => {\n // Check if this building is inside any abstracted directory\n let currentPath = building.path;\n let isAbstracted = false;\n while (currentPath.includes('/')) {\n currentPath = currentPath.substring(0, currentPath.lastIndexOf('/'));\n if (abstractedPaths.has(currentPath)) {\n isAbstracted = true;\n break;\n }\n }\n if (!isAbstracted) {\n spatialGrid.addBuilding(building);\n }\n });\n // Add districts to spatial grid\n cityData.districts.forEach(district => {\n if (!district.path) {\n spatialGrid.addDistrict(district); // Keep root\n return;\n }\n // For hit testing, we need to include abstracted districts too\n // because they have visual covers that users can click on.\n // Only skip children of abstracted directories.\n let isChildOfAbstracted = false;\n for (const abstractedPath of abstractedPaths) {\n if (abstractedPath && district.path.startsWith(abstractedPath + '/')) {\n isChildOfAbstracted = true;\n break;\n }\n }\n if (!isChildOfAbstracted) {\n spatialGrid.addDistrict(district);\n }\n });\n return {\n spatialGrid,\n transformParams: {\n scale,\n offsetX,\n offsetZ,\n zoomScale: zoomState.scale,\n zoomOffsetX: zoomState.offsetX,\n zoomOffsetY: zoomState.offsetY,\n },\n abstractedPaths,\n timestamp: Date.now(),\n };\n }, []);\n // Update canvas size when city data changes\n (0, react_1.useEffect)(() => {\n if (canvasSizingData) {\n const newSize = calculateCanvasResolution(canvasSizingData.buildings.length, canvasSizingData.bounds);\n setCanvasSize(newSize);\n }\n }, [canvasSizingData, subdirectoryMode]);\n // Separate stable and dynamic layers for performance optimization\n const stableLayers = (0, react_1.useMemo)(() => highlightLayers.filter(layer => layer.dynamic !== true), [highlightLayers]);\n const dynamicLayers = (0, react_1.useMemo)(() => highlightLayers.filter(layer => layer.dynamic === true), [highlightLayers]);\n // Combine all layers for rendering (moved up so abstractionLayer can use it)\n const allLayersWithoutAbstraction = (0, react_1.useMemo)(() => [...stableLayers, ...dynamicLayers], [stableLayers, dynamicLayers]);\n // Calculate abstracted directories based on current zoom using tree structure\n const abstractionLayer = (0, react_1.useMemo)(() => {\n // Find the abstraction layer in our highlight layers\n const abstractionLayerDef = highlightLayers.find(layer => layer.id === 'directory-abstraction' && layer.abstractionLayer);\n if (!abstractionLayerDef || !abstractionLayerDef.enabled || !filteredCityData) {\n return null;\n }\n const config = abstractionLayerDef.abstractionConfig;\n // Disable abstraction when zoomed in beyond a certain threshold\n const maxZoomForAbstraction = config?.maxZoomLevel ?? 5.0;\n if (zoomState.scale > maxZoomForAbstraction) {\n return null; // No abstractions when zoomed in\n }\n // Calculate which directories are too small at current zoom\n const abstractedItems = [];\n if (canvasRef.current) {\n const displayWidth = canvasRef.current.clientWidth || canvasSize.width;\n const displayHeight = canvasRef.current.clientHeight || canvasSize.height;\n const coordinateSystemData = subdirectoryMode?.enabled && subdirectoryMode.autoCenter !== true && cityData\n ? cityData\n : filteredCityData;\n const { scale } = calculateScaleAndOffset(coordinateSystemData, displayWidth, displayHeight, displayOptions.padding);\n const totalScale = scale * zoomState.scale;\n // Get all highlighted paths from enabled layers\n const highlightedPaths = new Set();\n allLayersWithoutAbstraction.forEach(layer => {\n if (layer.enabled && layer.id !== 'directory-abstraction') {\n layer.items.forEach(item => {\n if (item.type === 'file') {\n highlightedPaths.add(item.path);\n }\n });\n }\n });\n // Build directory tree\n const nodeMap = new Map();\n const rootNode = {\n path: '',\n district: {\n path: '',\n worldBounds: filteredCityData.bounds,\n fileCount: 0,\n type: 'directory',\n },\n screenSize: { width: Infinity, height: Infinity },\n children: [],\n buildings: [],\n containsHighlights: false,\n shouldAbstract: false,\n };\n nodeMap.set('', rootNode);\n // Create nodes for all districts\n filteredCityData.districts.forEach(district => {\n if (!district.path)\n return;\n const screenWidth = (district.worldBounds.maxX - district.worldBounds.minX) * totalScale;\n const screenHeight = (district.worldBounds.maxZ - district.worldBounds.minZ) * totalScale;\n const node = {\n path: district.path,\n district: district,\n screenSize: { width: screenWidth, height: screenHeight },\n children: [],\n buildings: [],\n containsHighlights: false,\n shouldAbstract: false,\n };\n nodeMap.set(district.path, node);\n });\n // Build parent-child relationships\n nodeMap.forEach((node, path) => {\n if (!path)\n return; // Skip root\n // Find parent path\n const lastSlash = path.lastIndexOf('/');\n const parentPath = lastSlash > 0 ? path.substring(0, lastSlash) : '';\n const parent = nodeMap.get(parentPath);\n if (parent) {\n parent.children.push(node);\n }\n else {\n rootNode.children.push(node);\n }\n });\n // Assign buildings to their directories and check for highlights\n filteredCityData.buildings.forEach(building => {\n const dirPath = building.path.substring(0, building.path.lastIndexOf('/')) || '';\n const node = nodeMap.get(dirPath);\n if (node) {\n node.buildings.push(building);\n if (highlightedPaths.has(building.path)) {\n // Mark this node and all parents as containing highlights\n let current = node;\n let depth = 0;\n while (current && depth < 100) {\n // Add safety limit\n depth++;\n current.containsHighlights = true;\n const parentPath = current.path.lastIndexOf('/') > 0\n ? current.path.substring(0, current.path.lastIndexOf('/'))\n : '';\n if (parentPath === current.path)\n break; // Prevent infinite loop\n current = nodeMap.get(parentPath);\n }\n if (depth >= 100) {\n console.error('[Abstraction] Highlight propagation exceeded depth limit');\n }\n }\n }\n });\n if (config?.allowRootAbstraction) {\n const cityWidth = (filteredCityData.bounds.maxX - filteredCityData.bounds.minX) * totalScale;\n const cityHeight = (filteredCityData.bounds.maxZ - filteredCityData.bounds.minZ) * totalScale;\n const cityArea = cityWidth * cityHeight;\n const canvasArea = displayWidth * displayHeight;\n const minPercentage = config?.minPercentage || 0.01;\n const cityMeetsThreshold = cityArea >= canvasArea * minPercentage;\n if (!cityMeetsThreshold && !highlightedPaths.size) {\n // Abstract the entire city\n // Build meaningful project info text\n const projectInfo = config.projectInfo;\n let displayText = '';\n if (projectInfo?.repoName || projectInfo?.rootDirectoryName) {\n displayText = projectInfo.repoName || projectInfo.rootDirectoryName || 'Project';\n if (projectInfo.currentBranch) {\n displayText += `\\n${projectInfo.currentBranch}`;\n }\n }\n else {\n displayText = 'Project Overview';\n }\n abstractedItems.push({\n path: '', // Empty path for root\n type: 'directory',\n renderStrategy: 'cover',\n coverOptions: {\n text: displayText,\n backgroundColor: config?.backgroundColor ?? '#1e40af',\n opacity: 1.0,\n borderRadius: 6,\n textSize: 16,\n },\n });\n // Return early with just the city abstraction\n return {\n ...abstractionLayerDef,\n items: abstractedItems,\n };\n }\n }\n // BFS to determine abstractions for subdirectories\n const queue = [...rootNode.children];\n while (queue.length > 0) {\n const node = queue.shift();\n if (!node)\n continue;\n // Decision logic - using percentage of canvas/viewport area\n // Current screen area of the directory\n const currentArea = node.screenSize.width * node.screenSize.height;\n // Canvas/viewport area\n const canvasArea = displayWidth * displayHeight;\n // Check if current size is at least X% of canvas\n const minPercentage = config?.minPercentage || 0.01; // Default 1% of canvas\n const meetsThreshold = currentArea >= canvasArea * minPercentage;\n if (meetsThreshold) {\n // Large enough - show contents, continue to children\n queue.push(...node.children);\n }\n else if (node.containsHighlights) {\n // Too small but has highlights - show contents, continue to children\n queue.push(...node.children);\n }\n else {\n // Too small and no highlights - abstract this level\n node.shouldAbstract = true;\n const dirName = node.path.split('/').pop() || node.path;\n abstractedItems.push({\n path: node.path,\n type: 'directory',\n renderStrategy: 'cover',\n coverOptions: {\n text: dirName,\n backgroundColor: config?.backgroundColor ?? '#1e40af',\n opacity: 1.0,\n borderRadius: 6,\n textSize: 12,\n },\n });\n // Don't process children - they're covered by this abstraction\n }\n }\n }\n // Return a new layer with calculated items\n return {\n ...abstractionLayerDef,\n items: abstractedItems,\n };\n }, [\n highlightLayers,\n filteredCityData,\n canvasSize,\n displayOptions.padding,\n zoomState.scale,\n subdirectoryMode,\n cityData,\n allLayersWithoutAbstraction,\n ]);\n // Combine all layers for rendering, including calculated abstraction layer\n const allLayers = (0, react_1.useMemo)(() => {\n const layers = [...stableLayers, ...dynamicLayers];\n // Replace abstraction layer with calculated one if it exists\n if (abstractionLayer) {\n const index = layers.findIndex(l => l.id === 'directory-abstraction');\n if (index >= 0) {\n layers[index] = abstractionLayer;\n }\n }\n return layers;\n }, [stableLayers, dynamicLayers, abstractionLayer]);\n // Update hit test cache when geometry or abstraction changes\n (0, react_1.useEffect)(() => {\n if (!filteredCityData)\n return;\n const width = canvasRef.current?.clientWidth || canvasSize.width;\n const height = canvasRef.current?.clientHeight || canvasSize.height;\n const { scale, offsetX, offsetZ } = calculateScaleAndOffset(filteredCityData, width, height, displayOptions.padding);\n // Get abstracted paths from the abstraction layer\n const abstractedPaths = new Set();\n if (abstractionLayer && abstractionLayer.enabled) {\n abstractionLayer.items.forEach(item => {\n if (item.type === 'directory') {\n abstractedPaths.add(item.path);\n }\n });\n }\n const newCache = buildHitTestCache(filteredCityData, scale, offsetX, offsetZ, zoomState, abstractedPaths);\n setHitTestCache(newCache);\n }, [\n filteredCityData,\n canvasSize,\n displayOptions.padding,\n zoomState,\n buildHitTestCache,\n abstractionLayer,\n ]);\n // Main canvas drawing with layer-based highlighting\n (0, react_1.useEffect)(() => {\n if (!canvasRef.current || !filteredCityData) {\n return;\n }\n const canvas = canvasRef.current;\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n return;\n }\n // Performance monitoring start available for debugging\n const displayWidth = canvas.clientWidth || canvasSize.width;\n const displayHeight = canvas.clientHeight || canvasSize.height;\n canvas.width = displayWidth;\n canvas.height = displayHeight;\n ctx.fillStyle = resolvedCanvasBackgroundColor;\n ctx.fillRect(0, 0, displayWidth, displayHeight);\n if (displayOptions.showGrid) {\n (0, drawLayeredBuildings_1.drawGrid)(ctx, displayWidth, displayHeight, displayOptions.gridSize);\n }\n const coordinateSystemData = subdirectoryMode?.enabled && subdirectoryMode.autoCenter !== true && cityData\n ? cityData\n : filteredCityData;\n const { scale, offsetX, offsetZ } = calculateScaleAndOffset(coordinateSystemData, displayWidth, displayHeight, displayOptions.padding);\n const worldToCanvas = (x, z) => ({\n x: ((x - coordinateSystemData.bounds.minX) * scale + offsetX) * zoomState.scale +\n zoomState.offsetX,\n y: ((z - coordinateSystemData.bounds.minZ) * scale + offsetZ) * zoomState.scale +\n zoomState.offsetY,\n });\n // Get abstracted paths for filtering child districts\n const abstractedPathsForDistricts = new Set();\n const abstractionLayerForDistricts = allLayers.find(l => l.id === 'directory-abstraction');\n if (abstractionLayerForDistricts && abstractionLayerForDistricts.enabled) {\n abstractionLayerForDistricts.items.forEach(item => {\n if (item.type === 'directory') {\n abstractedPathsForDistricts.add(item.path);\n }\n });\n }\n // Keep abstracted districts (for covers) but filter out their children\n let visibleDistricts = abstractedPathsForDistricts.size > 0\n ? filteredCityData.districts.filter(district => {\n // Check for root abstraction first\n if (abstractedPathsForDistricts.has('')) {\n // If root is abstracted, only show root district\n return !district.path || district.path === '';\n }\n if (!district.path)\n return true; // Keep root\n // Keep the abstracted district itself (we need it for the cover)\n if (abstractedPathsForDistricts.has(district.path)) {\n return true;\n }\n // Filter out children of abstracted directories\n for (const abstractedPath of abstractedPathsForDistricts) {\n if (district.path.startsWith(abstractedPath + '/')) {\n return false; // Skip child of abstracted directory\n }\n }\n return true;\n })\n : filteredCityData.districts;\n // If root is abstracted and there's no root district, create one for the cover\n if (abstractedPathsForDistricts.has('')) {\n const hasRootDistrict = visibleDistricts.some(d => !d.path || d.path === '');\n if (!hasRootDistrict) {\n visibleDistricts = [\n {\n path: '',\n worldBounds: filteredCityData.bounds,\n fileCount: filteredCityData.buildings.length, // Total file count\n type: 'directory',\n },\n ...visibleDistricts,\n ];\n }\n }\n // Draw districts with layer support\n (0, drawLayeredBuildings_1.drawLayeredDistricts)(ctx, visibleDistricts, worldToCanvas, scale * zoomState.scale, allLayers, interactionState.hoveredDistrict, fullSize, resolvedDefaultDirectoryColor, filteredCityData.metadata.layoutConfig, abstractedPathsForDistricts, // Pass abstracted paths to skip labels\n showDirectoryLabels, districtBorderRadius);\n // Get abstracted directory paths for filtering from the actual layers being rendered\n const abstractedPaths = new Set();\n const activeAbstractionLayer = allLayers.find(l => l.id === 'directory-abstraction');\n if (activeAbstractionLayer && activeAbstractionLayer.enabled) {\n activeAbstractionLayer.items.forEach(item => {\n if (item.type === 'directory') {\n abstractedPaths.add(item.path);\n }\n });\n }\n // Filter out buildings that are in abstracted directories\n const visibleBuildings = abstractedPaths.size > 0\n ? filteredCityData.buildings.filter(building => {\n // Check for root abstraction first\n if (abstractedPaths.has('')) {\n // If root is abstracted, hide all buildings\n return false;\n }\n const buildingDir = building.path.substring(0, building.path.lastIndexOf('/')) || '';\n // Simple direct check first\n for (const abstractedPath of abstractedPaths) {\n if (buildingDir === abstractedPath) {\n return false;\n }\n // Also check if building is in a subdirectory of abstracted path\n if (buildingDir.startsWith(abstractedPath + '/')) {\n return false;\n }\n }\n return true;\n })\n : filteredCityData.buildings;\n // Log only if we see buildings that should have been filtered\n if (abstractedPaths.size > 0) {\n const suspiciousBuildings = visibleBuildings.filter(building => {\n const buildingDir = building.path.substring(0, building.path.lastIndexOf('/')) || '';\n // Check if this building's parent is visually covered\n for (const abstractedPath of abstractedPaths) {\n if (buildingDir === abstractedPath || buildingDir.startsWith(abstractedPath + '/')) {\n return true;\n }\n }\n return false;\n });\n if (suspiciousBuildings.length > 0) {\n console.error(`[Building Filter] WARNING: ${suspiciousBuildings.length} buildings are being rendered in abstracted directories!`);\n suspiciousBuildings.slice(0, 3).forEach(building => {\n console.error(` - ${building.path}`);\n });\n }\n }\n // Draw buildings with layer support\n (0, drawLayeredBuildings_1.drawLayeredBuildings)(ctx, visibleBuildings, worldToCanvas, scale * zoomState.scale, allLayers, interactionState.hoveredBuilding, resolvedDefaultBuildingColor, showFileNames, resolvedHoverBorderColor, disableOpacityDimming, showFileTypeIcons, buildingBorderRadius);\n // Performance monitoring end available for debugging\n // Performance stats available but not logged to reduce console noise\n // Uncomment for debugging: render time, buildings/districts counts, layer counts\n }, [\n filteredCityData,\n canvasSize,\n displayOptions,\n zoomState,\n selectiveRender,\n rootDirectoryName,\n highlightLayers,\n interactionState.hoveredBuilding,\n interactionState.hoveredDistrict,\n resolvedDefaultDirectoryColor,\n showFileNames,\n fullSize,\n resolvedHoverBorderColor,\n disableOpacityDimming,\n focusDirectory,\n subdirectoryMode,\n cityData,\n resolvedCanvasBackgroundColor,\n showDirectoryLabels,\n allLayers,\n buildingBorderRadius,\n resolvedDefaultBuildingColor,\n districtBorderRadius,\n showFileTypeIcons,\n ]);\n // Optimized hit testing\n const performHitTest = (0, react_1.useCallback)((canvasX, canvasY) => {\n if (!hitTestCache || !filteredCityData) {\n return { hoveredBuilding: null, hoveredDistrict: null };\n }\n const width = canvasRef.current?.clientWidth || canvasSize.width;\n const height = canvasRef.current?.clientHeight || canvasSize.height;\n const coordinateSystemData = subdirectoryMode?.enabled && subdirectoryMode.autoCenter !== true && cityData\n ? cityData\n : filteredCityData;\n const { scale, offsetX, offsetZ } = calculateScaleAndOffset(coordinateSystemData, width, height, displayOptions.padding);\n const screenX = (canvasX - zoomState.offsetX) / zoomState.scale;\n const screenY = (canvasY - zoomState.offsetY) / zoomState.scale;\n const worldX = (screenX - offsetX) / scale + coordinateSystemData.bounds.minX;\n const worldZ = (screenY - offsetZ) / scale + coordinateSystemData.bounds.minZ;\n const nearbyItems = hitTestCache.spatialGrid.query(worldX, worldZ, 20);\n let hoveredBuilding = null;\n let hoveredDistrict = null;\n let minBuildingDistance = Infinity;\n let deepestDistrictLevel = -1;\n for (const item of nearbyItems) {\n if ('dimensions' in item) {\n const building = item;\n const size = Math.max(building.dimensions[0], building.dimensions[2]);\n const halfSize = size / 2;\n if (worldX >= building.position.x - halfSize &&\n worldX <= building.position.x + halfSize &&\n worldZ >= building.position.z - halfSize &&\n worldZ <= building.position.z + halfSize) {\n const distance = Math.sqrt(Math.pow(worldX - building.position.x, 2) + Math.pow(worldZ - building.position.z, 2));\n if (distance < minBuildingDistance) {\n minBuildingDistance = distance;\n hoveredBuilding = building;\n }\n }\n }\n }\n for (const item of nearbyItems) {\n if (!('dimensions' in item)) {\n const district = item;\n const districtPath = district.path || '';\n const isRoot = !districtPath || districtPath === '';\n // Skip root districts UNLESS they are abstracted (have covers)\n if (isRoot && !hitTestCache.abstractedPaths.has(''))\n continue;\n if (worldX >= district.worldBounds.minX &&\n worldX <= district.worldBounds.maxX &&\n worldZ >= district.worldBounds.minZ &&\n worldZ <= district.worldBounds.maxZ) {\n const level = districtPath.split('/').filter(Boolean).length;\n if (level > deepestDistrictLevel) {\n deepestDistrictLevel = level;\n hoveredDistrict = district;\n }\n }\n }\n }\n return { hoveredBuilding, hoveredDistrict };\n }, [\n hitTestCache,\n filteredCityData,\n canvasSize,\n displayOptions.padding,\n zoomState,\n subdirectoryMode,\n cityData,\n ]);\n // Mouse event handlers\n // Call onHover callback when interaction state changes\n (0, react_1.useEffect)(() => {\n if (onHover && interactionState) {\n const fileTooltip = interactionState.hoveredBuilding\n ? {\n text: interactionState.hoveredBuilding.path.split('/').pop() ||\n interactionState.hoveredBuilding.path,\n }\n : null;\n const directoryTooltip = interactionState.hoveredDistrict && interactionState.hoveredDistrict.path !== '/'\n ? { text: interactionState.hoveredDistrict.path || '/' }\n : null;\n onHover({\n hoveredDistrict: interactionState.hoveredDistrict,\n hoveredBuilding: interactionState.hoveredBuilding,\n mousePos: interactionState.mousePos,\n fileTooltip,\n directoryTooltip,\n fileCount: interactionState.hoveredDistrict\n ? Math.round(interactionState.hoveredDistrict.fileCount || 0)\n : null,\n });\n }\n }, [interactionState, onHover]);\n // Helper function to transform mouse coordinates based on rotation/flip\n const transformMouseCoordinates = (0, react_1.useCallback)((x, y, canvasWidth, canvasHeight) => {\n const centerX = canvasWidth / 2;\n const centerY = canvasHeight / 2;\n // Translate to center\n let transformedX = x - centerX;\n let transformedY = y - centerY;\n // Apply inverse rotation (negative angle to undo visual rotation)\n const rotationDegrees = transform?.rotation || 0;\n if (rotationDegrees) {\n const angle = -(rotationDegrees * Math.PI) / 180;\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n const newX = transformedX * cos - transformedY * sin;\n const newY = transformedX * sin + transformedY * cos;\n transformedX = newX;\n transformedY = newY;\n }\n // Apply inverse flips\n if (transform?.flipHorizontal) {\n transformedX = -transformedX;\n }\n if (transform?.flipVertical) {\n transformedY = -transformedY;\n }\n // Translate back from center\n transformedX += centerX;\n transformedY += centerY;\n return { x: transformedX, y: transformedY };\n }, [transform]);\n const handleMouseMoveInternal = (0, react_1.useCallback)((e) => {\n if (!canvasRef.current || !containerRef.current || !filteredCityData || zoomState.isDragging)\n return;\n // Get the container rect for mouse position\n const containerRect = containerRef.current.getBoundingClientRect();\n // Get mouse position relative to the container\n const rawX = e.clientX - containerRect.left;\n const rawY = e.clientY - containerRect.top;\n // Use canvas dimensions for transformation since that's what the hit testing uses\n const canvasWidth = canvasRef.current.width;\n const canvasHeight = canvasRef.current.height;\n // Transform the mouse coordinates to account for rotation/flips\n const { x, y } = transformMouseCoordinates(rawX, rawY, canvasWidth, canvasHeight);\n const { hoveredBuilding, hoveredDistrict } = performHitTest(x, y);\n setInteractionState(prev => {\n const hoveredItemChanged = prev.hoveredBuilding !== hoveredBuilding || prev.hoveredDistrict !== hoveredDistrict;\n const positionChanged = prev.mousePos.x !== x || prev.mousePos.y !== y;\n if (!hoveredItemChanged && !positionChanged) {\n return prev;\n }\n // Tooltip data will be calculated in onHover callback\n return {\n hoveredBuilding,\n hoveredDistrict,\n mousePos: { x, y },\n };\n });\n }, [filteredCityData, zoomState.isDragging, performHitTest, transformMouseCoordinates]);\n const handleMouseMove = (0, react_1.useCallback)((e) => {\n if (enableZoom && zoomState.isDragging) {\n const rawDeltaX = e.clientX - zoomState.lastMousePos.x;\n const rawDeltaY = e.clientY - zoomState.lastMousePos.y;\n // Transform the drag deltas based on rotation/flips\n let deltaX = rawDeltaX;\n let deltaY = rawDeltaY;\n const rotationDegrees = transform?.rotation || 0;\n if (rotationDegrees) {\n // Apply inverse rotation to the deltas\n const angle = -(rotationDegrees * Math.PI) / 180;\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n deltaX = rawDeltaX * cos - rawDeltaY * sin;\n deltaY = rawDeltaX * sin + rawDeltaY * cos;\n }\n // Apply inverse flips\n if (transform?.flipHorizontal) {\n deltaX = -deltaX;\n }\n if (transform?.flipVertical) {\n deltaY = -deltaY;\n }\n setZoomState(prev => ({\n ...prev,\n offsetX: prev.offsetX + deltaX,\n offsetY: prev.offsetY + deltaY,\n lastMousePos: { x: e.clientX, y: e.clientY },\n hasMouseMoved: true,\n }));\n return;\n }\n handleMouseMoveInternal(e);\n }, [enableZoom, zoomState.isDragging, zoomState.lastMousePos, handleMouseMoveInternal, transform]);\n const handleClick = () => {\n if (zoomState.hasMouseMoved) {\n return;\n }\n if (interactionState.hoveredBuilding && onFileClick) {\n /*const fullPath = subdirectoryMode?.enabled && subdirectoryMode.rootPath\n ? `${subdirectoryMode.rootPath}/${interactionState.hoveredBuilding.path}`\n : interactionState.hoveredBuilding.path;*/\n onFileClick(interactionState.hoveredBuilding.path, 'file');\n return;\n }\n if (interactionState.hoveredDistrict) {\n const districtPath = interactionState.hoveredDistrict.path || '';\n const isRoot = !districtPath || districtPath === '';\n const fullPath = subdirectoryMode?.enabled && subdirectoryMode.rootPath && !isRoot\n ? `${subdirectoryMode.rootPath}/${districtPath}`\n : districtPath;\n if (onFileClick && !isRoot) {\n onFileClick(fullPath, 'directory');\n }\n else if (onDirectorySelect) {\n onDirectorySelect(focusDirectory === fullPath ? null : fullPath);\n }\n }\n };\n const handleMouseLeave = (0, react_1.useCallback)(() => {\n setInteractionState(prev => ({\n ...prev,\n hoveredDistrict: null,\n hoveredBuilding: null,\n }));\n }, []);\n const handleWheel = (e) => {\n if (!enableZoom || !canvasRef.current) {\n return;\n }\n const rect = canvasRef.current.getBoundingClientRect();\n const mouseX = e.clientX - rect.left;\n const mouseY = e.clientY - rect.top;\n const zoomFactor = e.deltaY > 0 ? 0.9 : 1.1;\n const newScale = Math.max(0.1, Math.min(5, zoomState.scale * zoomFactor));\n const scaleChange = newScale / zoomState.scale;\n const newOffsetX = mouseX - (mouseX - zoomState.offsetX) * scaleChange;\n const newOffsetY = mouseY - (mouseY - zoomState.offsetY) * scaleChange;\n setZoomState(prev => ({\n ...prev,\n scale: newScale,\n offsetX: newOffsetX,\n offsetY: newOffsetY,\n }));\n };\n const handleMouseDown = (e) => {\n setZoomState(prev => ({\n ...prev,\n isDragging: enableZoom ? true : false,\n lastMousePos: enableZoom ? { x: e.clientX, y: e.clientY } : prev.lastMousePos,\n hasMouseMoved: false,\n }));\n };\n const handleMouseUp = (0, react_1.useCallback)(() => {\n setZoomState(prev => ({ ...prev, isDragging: false }));\n }, []);\n const interactionCursor = (0, react_1.useMemo)(() => {\n if (enableZoom) {\n if (zoomState.isDragging) {\n return 'grabbing';\n }\n if (interactionState.hoveredBuilding || interactionState.hoveredDistrict) {\n return 'pointer';\n }\n return 'grab';\n }\n if (interactionState.hoveredBuilding || interactionState.hoveredDistrict) {\n return 'pointer';\n }\n return 'default';\n }, [\n enableZoom,\n zoomState.isDragging,\n interactionState.hoveredBuilding,\n interactionState.hoveredDistrict,\n ]);\n if (!filteredCityData) {\n return (react_1.default.createElement(\"div\", { className: className, style: {\n width: '100%',\n height: '100%',\n minHeight: '250px',\n backgroundColor: theme.colors.backgroundSecondary,\n borderRadius: `${theme.radii[2]}px`,\n padding: `${theme.space[4]}px`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n } },\n react_1.default.createElement(\"div\", { style: { color: theme.colors.textMuted, fontFamily: theme.fonts.body } }, \"No city data available\")));\n }\n return (react_1.default.createElement(\"div\", { ref: containerRef, className: className, style: {\n position: 'relative',\n width: '100%',\n height: '100%',\n overflow: 'hidden',\n backgroundColor: resolvedCanvasBackgroundColor,\n transform: (() => {\n const transforms = [];\n // Apply rotation\n const rotationDegrees = transform?.rotation || 0;\n if (rotationDegrees) {\n transforms.push(`rotate(${rotationDegrees}deg)`);\n }\n // Apply flips\n if (transform?.flipHorizontal) {\n transforms.push('scaleX(-1)');\n }\n if (transform?.flipVertical) {\n transforms.push('scaleY(-1)');\n }\n return transforms.length > 0 ? transforms.join(' ') : undefined;\n })(),\n } },\n showLayerControls && highlightLayers.length > 0 && (react_1.default.createElement(\"div\", { style: {\n position: 'absolute',\n bottom: `${theme.space[4]}px`,\n left: `${theme.space[4]}px`,\n zIndex: 10,\n display: 'flex',\n flexDirection: 'column',\n gap: `${theme.space[2]}px`,\n } }, highlightLayers.map(layer => (react_1.default.createElement(\"button\", { key: layer.id, onClick: () => onLayerToggle?.(layer.id, !layer.enabled), style: {\n padding: `${theme.space[2]}px ${theme.space[3]}px`,\n borderRadius: `${theme.radii[2]}px`,\n boxShadow: '0 4px 6px rgba(0, 0, 0, 0.1)',\n transition: 'all 0.2s ease',\n display: 'flex',\n alignItems: 'center',\n gap: `${theme.space[2]}px`,\n fontSize: `${theme.fontSizes[0]}px`,\n fontWeight: theme.fontWeights.medium,\n fontFamily: theme.fonts.body,\n backgroundColor: layer.enabled\n ? theme.colors.backgroundSecondary\n : theme.colors.background,\n color: layer.enabled ? theme.colors.text : theme.colors.textSecondary,\n border: `2px solid ${layer.enabled ? layer.color : theme.colors.border}`,\n minWidth: '120px',\n cursor: 'pointer',\n }, title: `Toggle ${layer.name}` },\n react_1.default.createElement(\"div\", { style: {\n width: '12px',\n height: '12px',\n borderRadius: '50%',\n backgroundColor: layer.color,\n opacity: layer.enabled ? 1 : 0.4,\n transition: 'opacity 0.2s ease',\n } }),\n react_1.default.createElement(\"span\", { style: { textAlign: 'left', flex: 1 } }, layer.name),\n layer.items && layer.items.length > 0 && (react_1.default.createElement(\"span\", { style: {\n fontSize: `${theme.fontSizes[0]}px`,\n color: layer.enabled ? theme.colors.textSecondary : theme.colors.textMuted,\n } }, layer.items.length))))))),\n react_1.default.createElement(\"canvas\", { ref: canvasRef, style: {\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n objectFit: 'contain',\n zIndex: 1,\n } }),\n react_1.default.createElement(\"div\", { style: {\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n zIndex: 2,\n cursor: interactionCursor,\n }, onMouseMove: handleMouseMove, onMouseDown: handleMouseDown, onMouseUp: handleMouseUp, onClick: handleClick, onMouseLeave: handleMouseLeave, onWheel: handleWheel })));\n}\nfunction calculateScaleAndOffset(cityData, width, height, padding) {\n const cityWidth = cityData.bounds.maxX - cityData.bounds.minX;\n const cityDepth = cityData.bounds.maxZ - cityData.bounds.minZ;\n const horizontalPadding = padding;\n const verticalPadding = padding * 2;\n const scaleX = (width - horizontalPadding) / cityDepth;\n const scaleZ = (height - verticalPadding) / cityWidth;\n const scale = Math.min(scaleX, scaleZ);\n const scaledCityWidth = cityDepth * scale;\n const scaledCityHeight = cityWidth * scale;\n const offsetX = (width - scaledCityWidth) / 2;\n const offsetZ = (height - scaledCityHeight) / 2;\n return { scale, offsetX, offsetZ };\n}\nexports.ArchitectureMapHighlightLayers = ArchitectureMapHighlightLayersInner;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createFileColorHighlightLayers = createFileColorHighlightLayers;\nexports.getDefaultFileColorConfig = getDefaultFileColorConfig;\nexports.getFileColorMapping = getFileColorMapping;\nconst files_json_1 = __importDefault(require(\"../config/files.json\"));\n/**\n * Creates highlight layers for files based on file extension configurations.\n *\n * @param files - Array of file objects with at least a path property\n * @param config - Optional configuration object with suffix mappings. If not provided, uses default config from files.json\n * @returns Array of HighlightLayer objects for the map visualization\n *\n * @example\n * // Using default configuration\n * const files = [{ path: 'src/index.ts' }, { path: 'src/App.tsx' }];\n * const layers = createFileColorHighlightLayers(files);\n *\n * @example\n * // Using custom configuration\n * const customConfig: FileSuffixColorConfig = {\n * version: \"1.0.0\",\n * description: \"Custom colors\",\n * lastUpdated: \"2025-01-26\",\n * suffixConfigs: {\n * \".ts\": {\n * primary: {\n * color: \"#ff0000\",\n * renderStrategy: \"border\"\n * }\n * }\n * }\n * };\n * const layers = createFileColorHighlightLayers(files, customConfig);\n */\nfunction createFileColorHighlightLayers(files, config) {\n if (!files || files.length === 0) {\n return [];\n }\n // Use provided config or fall back to default from files.json\n const colorConfig = config || files_json_1.default;\n const { suffixConfigs, defaultConfig: defaultFileConfig, includeUnmatched = true } = colorConfig;\n // Validation\n if (!suffixConfigs || typeof suffixConfigs !== 'object') {\n console.error('[FileColorHighlightLayers] Invalid suffixConfigs structure');\n return [];\n }\n // Group files by their extension\n const filesBySuffix = new Map();\n const unmatchedFilesBySuffix = new Map();\n const noExtensionFiles = [];\n files.forEach(file => {\n const filePath = file.path;\n const lastSlash = filePath.lastIndexOf('/');\n const fileName = lastSlash === -1 ? filePath : filePath.substring(lastSlash + 1);\n const lastDot = fileName.lastIndexOf('.');\n // Check for exact filename match first (e.g., LICENSE, Makefile)\n if (suffixConfigs[fileName]) {\n if (!filesBySuffix.has(fileName)) {\n filesBySuffix.set(fileName, []);\n }\n const fileNameFiles = filesBySuffix.get(fileName);\n if (fileNameFiles) {\n fileNameFiles.push(filePath);\n }\n return;\n }\n if (lastDot === -1 || lastDot === fileName.length - 1) {\n // No extension or ends with dot\n if (includeUnmatched) {\n noExtensionFiles.push(filePath);\n }\n return;\n }\n const extension = fileName.substring(lastDot).toLowerCase();\n if (suffixConfigs[extension]) {\n if (!filesBySuffix.has(extension)) {\n filesBySuffix.set(extension, []);\n }\n const extFiles = filesBySuffix.get(extension);\n if (extFiles) {\n extFiles.push(filePath);\n }\n }\n else if (includeUnmatched) {\n // Group unmatched files by their extension for individual legend entries\n if (!unmatchedFilesBySuffix.has(extension)) {\n unmatchedFilesBySuffix.set(extension, []);\n }\n const unmatchedExtFiles = unmatchedFilesBySuffix.get(extension);\n if (unmatchedExtFiles) {\n unmatchedExtFiles.push(filePath);\n }\n }\n });\n // Create highlight layers\n const layers = [];\n // Sort by file count (more files first) for consistent ordering\n const sortedSuffixes = Array.from(filesBySuffix.entries()).sort(([, filesA], [, filesB]) => filesB.length - filesA.length);\n // Create layers for matched files\n let basePriority = 1;\n sortedSuffixes.forEach(([suffix, files]) => {\n const suffixConfig = suffixConfigs[suffix];\n // Remove leading dot for extensions, use as-is for exact filenames\n const extensionName = suffix.startsWith('.') ? suffix.substring(1) : suffix;\n // Create primary layer\n const primaryLayer = {\n id: `ext-${extensionName}-primary`,\n name: suffixConfig.displayName || extensionName.toUpperCase(),\n color: suffixConfig.primary.color,\n enabled: true,\n opacity: suffixConfig.primary.opacity ?? 1.0,\n priority: suffixConfig.primary.priority ?? basePriority,\n items: files.map((path) => ({\n path,\n type: 'file',\n renderStrategy: suffixConfig.primary.renderStrategy,\n ...(suffixConfig.primary.coverOptions && {\n coverOptions: suffixConfig.primary.coverOptions,\n }),\n ...(suffixConfig.primary.customRender && {\n customRender: suffixConfig.primary.customRender,\n }),\n })),\n };\n if (suffixConfig.primary.borderWidth) {\n primaryLayer.borderWidth = suffixConfig.primary.borderWidth;\n }\n layers.push(primaryLayer);\n // Create secondary layer if configured\n if (suffixConfig.secondary) {\n const secondary = suffixConfig.secondary;\n const secondaryLayer = {\n id: `ext-${extensionName}-secondary`,\n name: `${suffixConfig.displayName || extensionName.toUpperCase()} Secondary`,\n color: secondary.color,\n enabled: true,\n opacity: secondary.opacity ?? 1.0,\n priority: secondary.priority ?? basePriority + 100, // Higher priority by default\n items: files.map((path) => ({\n path,\n type: 'file',\n renderStrategy: secondary.renderStrategy,\n ...(secondary.coverOptions && { coverOptions: secondary.coverOptions }),\n ...(secondary.customRender && { customRender: secondary.customRender }),\n })),\n };\n if (secondary.borderWidth) {\n secondaryLayer.borderWidth = secondary.borderWidth;\n }\n layers.push(secondaryLayer);\n }\n basePriority += 2; // Leave room for primary + secondary layers\n });\n // Add layers for unmatched file extensions (each extension gets its own legend entry)\n if (includeUnmatched && defaultFileConfig) {\n // Sort unmatched extensions by file count\n const sortedUnmatchedSuffixes = Array.from(unmatchedFilesBySuffix.entries()).sort(([, filesA], [, filesB]) => filesB.length - filesA.length);\n sortedUnmatchedSuffixes.forEach(([suffix, files]) => {\n const extensionName = suffix.startsWith('.') ? suffix.substring(1) : suffix;\n const unmatchedLayer = {\n id: `ext-${extensionName}-primary`,\n name: extensionName.toUpperCase(),\n color: defaultFileConfig.primary.color,\n enabled: true,\n opacity: defaultFileConfig.primary.opacity ?? 1.0,\n priority: defaultFileConfig.primary.priority ?? basePriority,\n items: files.map((path) => ({\n path,\n type: 'file',\n renderStrategy: defaultFileConfig.primary.renderStrategy,\n ...(defaultFileConfig.primary.coverOptions && {\n coverOptions: defaultFileConfig.primary.coverOptions,\n }),\n ...(defaultFileConfig.primary.customRender && {\n customRender: defaultFileConfig.primary.customRender,\n }),\n })),\n };\n if (defaultFileConfig.primary.borderWidth) {\n unmatchedLayer.borderWidth = defaultFileConfig.primary.borderWidth;\n }\n layers.push(unmatchedLayer);\n // Add secondary layer if configured\n if (defaultFileConfig.secondary) {\n const secondary = defaultFileConfig.secondary;\n const unmatchedSecondaryLayer = {\n id: `ext-${extensionName}-secondary`,\n name: `${extensionName.toUpperCase()} Secondary`,\n color: secondary.color,\n enabled: true,\n opacity: secondary.opacity ?? 1.0,\n priority: secondary.priority ?? basePriority + 100,\n items: files.map((path) => ({\n path,\n type: 'file',\n renderStrategy: secondary.renderStrategy,\n ...(secondary.coverOptions && { coverOptions: secondary.coverOptions }),\n ...(secondary.customRender && { customRender: secondary.customRender }),\n })),\n };\n if (secondary.borderWidth) {\n unmatchedSecondaryLayer.borderWidth = secondary.borderWidth;\n }\n layers.push(unmatchedSecondaryLayer);\n }\n basePriority += 2;\n });\n // Add layer for files with no extension\n if (noExtensionFiles.length > 0) {\n const noExtLayer = {\n id: 'other-files-primary',\n name: 'OTHER',\n color: defaultFileConfig.primary.color,\n enabled: true,\n opacity: defaultFileConfig.primary.opacity ?? 1.0,\n priority: defaultFileConfig.primary.priority ?? basePriority,\n items: noExtensionFiles.map((path) => ({\n path,\n type: 'file',\n renderStrategy: defaultFileConfig.primary.renderStrategy,\n ...(defaultFileConfig.primary.coverOptions && {\n coverOptions: defaultFileConfig.primary.coverOptions,\n }),\n ...(defaultFileConfig.primary.customRender && {\n customRender: defaultFileConfig.primary.customRender,\n }),\n })),\n };\n if (defaultFileConfig.primary.borderWidth) {\n noExtLayer.borderWidth = defaultFileConfig.primary.borderWidth;\n }\n layers.push(noExtLayer);\n if (defaultFileConfig.secondary) {\n const secondary = defaultFileConfig.secondary;\n const noExtSecondaryLayer = {\n id: 'other-files-secondary',\n name: 'OTHER Secondary',\n color: secondary.color,\n enabled: true,\n opacity: secondary.opacity ?? 1.0,\n priority: secondary.priority ?? basePriority + 100,\n items: noExtensionFiles.map((path) => ({\n path,\n type: 'file',\n renderStrategy: secondary.renderStrategy,\n ...(secondary.coverOptions && { coverOptions: secondary.coverOptions }),\n ...(secondary.customRender && { customRender: secondary.customRender }),\n })),\n };\n if (secondary.borderWidth) {\n noExtSecondaryLayer.borderWidth = secondary.borderWidth;\n }\n layers.push(noExtSecondaryLayer);\n }\n }\n }\n return layers;\n}\n/**\n * Get the default file color configuration.\n * This returns the configuration loaded from files.json.\n */\nfunction getDefaultFileColorConfig() {\n return files_json_1.default;\n}\n/**\n * Get a simple color mapping from the configuration.\n * This is useful for backwards compatibility or simpler use cases.\n *\n * @param config - Optional configuration. If not provided, uses default config.\n * @returns Record mapping file extensions to hex color strings\n */\nfunction getFileColorMapping(config) {\n const colorConfig = config || files_json_1.default;\n return Object.entries(colorConfig.suffixConfigs).reduce((acc, [extension, suffixConfig]) => {\n acc[extension] = suffixConfig.primary.color;\n return acc;\n }, {});\n}\n","function count(node) {\n var sum = 0,\n children = node.children,\n i = children && children.length;\n if (!i) sum = 1;\n else while (--i >= 0) sum += children[i].value;\n node.value = sum;\n}\n\nexport default function() {\n return this.eachAfter(count);\n}\n","export default function(callback, that) {\n let index = -1;\n for (const node of this) {\n callback.call(that, node, ++index, this);\n }\n return this;\n}\n","export default function(callback, that) {\n var node = this, nodes = [node], children, i, index = -1;\n while (node = nodes.pop()) {\n callback.call(that, node, ++index, this);\n if (children = node.children) {\n for (i = children.length - 1; i >= 0; --i) {\n nodes.push(children[i]);\n }\n }\n }\n return this;\n}\n","export default function(callback, that) {\n var node = this, nodes = [node], next = [], children, i, n, index = -1;\n while (node = nodes.pop()) {\n next.push(node);\n if (children = node.children) {\n for (i = 0, n = children.length; i < n; ++i) {\n nodes.push(children[i]);\n }\n }\n }\n while (node = next.pop()) {\n callback.call(that, node, ++index, this);\n }\n return this;\n}\n","export default function(callback, that) {\n let index = -1;\n for (const node of this) {\n if (callback.call(that, node, ++index, this)) {\n return node;\n }\n }\n}\n","export default function(value) {\n return this.eachAfter(function(node) {\n var sum = +value(node.data) || 0,\n children = node.children,\n i = children && children.length;\n while (--i >= 0) sum += children[i].value;\n node.value = sum;\n });\n}\n","export default function(compare) {\n return this.eachBefore(function(node) {\n if (node.children) {\n node.children.sort(compare);\n }\n });\n}\n","export default function(end) {\n var start = this,\n ancestor = leastCommonAncestor(start, end),\n nodes = [start];\n while (start !== ancestor) {\n start = start.parent;\n nodes.push(start);\n }\n var k = nodes.length;\n while (end !== ancestor) {\n nodes.splice(k, 0, end);\n end = end.parent;\n }\n return nodes;\n}\n\nfunction leastCommonAncestor(a, b) {\n if (a === b) return a;\n var aNodes = a.ancestors(),\n bNodes = b.ancestors(),\n c = null;\n a = aNodes.pop();\n b = bNodes.pop();\n while (a === b) {\n c = a;\n a = aNodes.pop();\n b = bNodes.pop();\n }\n return c;\n}\n","export default function() {\n var node = this, nodes = [node];\n while (node = node.parent) {\n nodes.push(node);\n }\n return nodes;\n}\n","export default function() {\n return Array.from(this);\n}\n","export default function() {\n var leaves = [];\n this.eachBefore(function(node) {\n if (!node.children) {\n leaves.push(node);\n }\n });\n return leaves;\n}\n","export default function() {\n var root = this, links = [];\n root.each(function(node) {\n if (node !== root) { // Don’t include the root’s parent, if any.\n links.push({source: node.parent, target: node});\n }\n });\n return links;\n}\n","export default function*() {\n var node = this, current, next = [node], children, i, n;\n do {\n current = next.reverse(), next = [];\n while (node = current.pop()) {\n yield node;\n if (children = node.children) {\n for (i = 0, n = children.length; i < n; ++i) {\n next.push(children[i]);\n }\n }\n }\n } while (next.length);\n}\n","import node_count from \"./count.js\";\nimport node_each from \"./each.js\";\nimport node_eachBefore from \"./eachBefore.js\";\nimport node_eachAfter from \"./eachAfter.js\";\nimport node_find from \"./find.js\";\nimport node_sum from \"./sum.js\";\nimport node_sort from \"./sort.js\";\nimport node_path from \"./path.js\";\nimport node_ancestors from \"./ancestors.js\";\nimport node_descendants from \"./descendants.js\";\nimport node_leaves from \"./leaves.js\";\nimport node_links from \"./links.js\";\nimport node_iterator from \"./iterator.js\";\n\nexport default function hierarchy(data, children) {\n if (data instanceof Map) {\n data = [undefined, data];\n if (children === undefined) children = mapChildren;\n } else if (children === undefined) {\n children = objectChildren;\n }\n\n var root = new Node(data),\n node,\n nodes = [root],\n child,\n childs,\n i,\n n;\n\n while (node = nodes.pop()) {\n if ((childs = children(node.data)) && (n = (childs = Array.from(childs)).length)) {\n node.children = childs;\n for (i = n - 1; i >= 0; --i) {\n nodes.push(child = childs[i] = new Node(childs[i]));\n child.parent = node;\n child.depth = node.depth + 1;\n }\n }\n }\n\n return root.eachBefore(computeHeight);\n}\n\nfunction node_copy() {\n return hierarchy(this).eachBefore(copyData);\n}\n\nfunction objectChildren(d) {\n return d.children;\n}\n\nfunction mapChildren(d) {\n return Array.isArray(d) ? d[1] : null;\n}\n\nfunction copyData(node) {\n if (node.data.value !== undefined) node.value = node.data.value;\n node.data = node.data.data;\n}\n\nexport function computeHeight(node) {\n var height = 0;\n do node.height = height;\n while ((node = node.parent) && (node.height < ++height));\n}\n\nexport function Node(data) {\n this.data = data;\n this.depth =\n this.height = 0;\n this.parent = null;\n}\n\nNode.prototype = hierarchy.prototype = {\n constructor: Node,\n count: node_count,\n each: node_each,\n eachAfter: node_eachAfter,\n eachBefore: node_eachBefore,\n find: node_find,\n sum: node_sum,\n sort: node_sort,\n path: node_path,\n ancestors: node_ancestors,\n descendants: node_descendants,\n leaves: node_leaves,\n links: node_links,\n copy: node_copy,\n [Symbol.iterator]: node_iterator\n};\n","export function optional(f) {\n return f == null ? null : required(f);\n}\n\nexport function required(f) {\n if (typeof f !== \"function\") throw new Error;\n return f;\n}\n","export function constantZero() {\n return 0;\n}\n\nexport default function(x) {\n return function() {\n return x;\n };\n}\n","export default function(node) {\n node.x0 = Math.round(node.x0);\n node.y0 = Math.round(node.y0);\n node.x1 = Math.round(node.x1);\n node.y1 = Math.round(node.y1);\n}\n","export default function(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n node,\n i = -1,\n n = nodes.length,\n k = parent.value && (x1 - x0) / parent.value;\n\n while (++i < n) {\n node = nodes[i], node.y0 = y0, node.y1 = y1;\n node.x0 = x0, node.x1 = x0 += node.value * k;\n }\n}\n","export default function(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n node,\n i = -1,\n n = nodes.length,\n k = parent.value && (y1 - y0) / parent.value;\n\n while (++i < n) {\n node = nodes[i], node.x0 = x0, node.x1 = x1;\n node.y0 = y0, node.y1 = y0 += node.value * k;\n }\n}\n","import treemapDice from \"./dice.js\";\nimport treemapSlice from \"./slice.js\";\n\nexport var phi = (1 + Math.sqrt(5)) / 2;\n\nexport function squarifyRatio(ratio, parent, x0, y0, x1, y1) {\n var rows = [],\n nodes = parent.children,\n row,\n nodeValue,\n i0 = 0,\n i1 = 0,\n n = nodes.length,\n dx, dy,\n value = parent.value,\n sumValue,\n minValue,\n maxValue,\n newRatio,\n minRatio,\n alpha,\n beta;\n\n while (i0 < n) {\n dx = x1 - x0, dy = y1 - y0;\n\n // Find the next non-empty node.\n do sumValue = nodes[i1++].value; while (!sumValue && i1 < n);\n minValue = maxValue = sumValue;\n alpha = Math.max(dy / dx, dx / dy) / (value * ratio);\n beta = sumValue * sumValue * alpha;\n minRatio = Math.max(maxValue / beta, beta / minValue);\n\n // Keep adding nodes while the aspect ratio maintains or improves.\n for (; i1 < n; ++i1) {\n sumValue += nodeValue = nodes[i1].value;\n if (nodeValue < minValue) minValue = nodeValue;\n if (nodeValue > maxValue) maxValue = nodeValue;\n beta = sumValue * sumValue * alpha;\n newRatio = Math.max(maxValue / beta, beta / minValue);\n if (newRatio > minRatio) { sumValue -= nodeValue; break; }\n minRatio = newRatio;\n }\n\n // Position and record the row orientation.\n rows.push(row = {value: sumValue, dice: dx < dy, children: nodes.slice(i0, i1)});\n if (row.dice) treemapDice(row, x0, y0, x1, value ? y0 += dy * sumValue / value : y1);\n else treemapSlice(row, x0, y0, value ? x0 += dx * sumValue / value : x1, y1);\n value -= sumValue, i0 = i1;\n }\n\n return rows;\n}\n\nexport default (function custom(ratio) {\n\n function squarify(parent, x0, y0, x1, y1) {\n squarifyRatio(ratio, parent, x0, y0, x1, y1);\n }\n\n squarify.ratio = function(x) {\n return custom((x = +x) > 1 ? x : 1);\n };\n\n return squarify;\n})(phi);\n","import roundNode from \"./round.js\";\nimport squarify from \"./squarify.js\";\nimport {required} from \"../accessors.js\";\nimport constant, {constantZero} from \"../constant.js\";\n\nexport default function() {\n var tile = squarify,\n round = false,\n dx = 1,\n dy = 1,\n paddingStack = [0],\n paddingInner = constantZero,\n paddingTop = constantZero,\n paddingRight = constantZero,\n paddingBottom = constantZero,\n paddingLeft = constantZero;\n\n function treemap(root) {\n root.x0 =\n root.y0 = 0;\n root.x1 = dx;\n root.y1 = dy;\n root.eachBefore(positionNode);\n paddingStack = [0];\n if (round) root.eachBefore(roundNode);\n return root;\n }\n\n function positionNode(node) {\n var p = paddingStack[node.depth],\n x0 = node.x0 + p,\n y0 = node.y0 + p,\n x1 = node.x1 - p,\n y1 = node.y1 - p;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n node.x0 = x0;\n node.y0 = y0;\n node.x1 = x1;\n node.y1 = y1;\n if (node.children) {\n p = paddingStack[node.depth + 1] = paddingInner(node) / 2;\n x0 += paddingLeft(node) - p;\n y0 += paddingTop(node) - p;\n x1 -= paddingRight(node) - p;\n y1 -= paddingBottom(node) - p;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n tile(node, x0, y0, x1, y1);\n }\n }\n\n treemap.round = function(x) {\n return arguments.length ? (round = !!x, treemap) : round;\n };\n\n treemap.size = function(x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], treemap) : [dx, dy];\n };\n\n treemap.tile = function(x) {\n return arguments.length ? (tile = required(x), treemap) : tile;\n };\n\n treemap.padding = function(x) {\n return arguments.length ? treemap.paddingInner(x).paddingOuter(x) : treemap.paddingInner();\n };\n\n treemap.paddingInner = function(x) {\n return arguments.length ? (paddingInner = typeof x === \"function\" ? x : constant(+x), treemap) : paddingInner;\n };\n\n treemap.paddingOuter = function(x) {\n return arguments.length ? treemap.paddingTop(x).paddingRight(x).paddingBottom(x).paddingLeft(x) : treemap.paddingTop();\n };\n\n treemap.paddingTop = function(x) {\n return arguments.length ? (paddingTop = typeof x === \"function\" ? x : constant(+x), treemap) : paddingTop;\n };\n\n treemap.paddingRight = function(x) {\n return arguments.length ? (paddingRight = typeof x === \"function\" ? x : constant(+x), treemap) : paddingRight;\n };\n\n treemap.paddingBottom = function(x) {\n return arguments.length ? (paddingBottom = typeof x === \"function\" ? x : constant(+x), treemap) : paddingBottom;\n };\n\n treemap.paddingLeft = function(x) {\n return arguments.length ? (paddingLeft = typeof x === \"function\" ? x : constant(+x), treemap) : paddingLeft;\n };\n\n return treemap;\n}\n","/**\n * UI metadata configuration for CodebaseView\n * These are rendering/visualization specific fields that extend\n * the core data model from a24z-memory.\n */\n/**\n * Type guard to check if metadata has UI configuration\n */\nexport function hasUIMetadata(metadata) {\n return (typeof metadata === 'object' &&\n metadata !== null &&\n 'ui' in metadata &&\n typeof metadata.ui === 'object');\n}\n/**\n * Get UI metadata from a CodebaseView's metadata field\n * Returns defaults if no UI metadata is present\n */\nexport function getUIMetadata(metadata) {\n if (!metadata || !hasUIMetadata(metadata)) {\n // Return undefined when no UI metadata is present\n return undefined;\n }\n // Merge provided metadata with defaults\n return mergeWithDefaults(metadata.ui);\n}\n/**\n * Set UI metadata in a metadata object\n */\nexport function setUIMetadata(metadata, ui) {\n return {\n ...metadata,\n ui,\n };\n}\n/**\n * Get UI metadata for a specific file cell\n */\nexport function getCellUIMetadata(cellMetadata) {\n if (!cellMetadata || typeof cellMetadata.ui !== 'object') {\n return undefined;\n }\n // Extract only the FileCellUIMetadata fields from the ui object\n const ui = cellMetadata.ui;\n return {\n color: typeof ui.color === 'string' ? ui.color : undefined,\n };\n}\n/**\n * Set UI metadata for a file cell\n */\nexport function setCellUIMetadata(cellMetadata, ui) {\n return {\n ...cellMetadata,\n ui,\n };\n}\n/**\n * Default UI metadata values\n */\nexport const DEFAULT_UI_METADATA = {\n enabled: true,\n rows: 2,\n cols: 2,\n cellPadding: 10,\n showCellLabels: true,\n cellLabelPosition: 'top',\n cellLabelHeightPercent: 0.12,\n};\n/**\n * Merge UI metadata with defaults\n */\nexport function mergeWithDefaults(ui) {\n return {\n ...DEFAULT_UI_METADATA,\n ...ui,\n };\n}\n//# sourceMappingURL=ui-metadata.js.map","import { getUIMetadata } from './types/ui-metadata';\n/**\n * Manages grid-based spatial layout for city visualization\n */\nexport class GridLayoutManager {\n // Cache compiled pattern matchers for performance\n /**\n * Get the grid dimensions for a codebase view config.\n * If rows/cols are not specified, compute them from cell coordinates.\n */\n getGridDimensions(config) {\n const ui = getUIMetadata(config.metadata);\n if (ui?.rows !== undefined && ui?.cols !== undefined) {\n return { rows: ui.rows, cols: ui.cols };\n }\n // Compute dimensions from cell coordinates\n let maxRow = 0;\n let maxCol = 0;\n for (const cell of Object.values(config.referenceGroups)) {\n const [row, col] = cell.coordinates;\n maxRow = Math.max(maxRow, row);\n maxCol = Math.max(maxCol, col);\n }\n return {\n rows: ui?.rows ?? maxRow + 1,\n cols: ui?.cols ?? maxCol + 1,\n };\n }\n /**\n * Split a file tree into a grid of smaller trees based on configuration\n */\n splitTreeIntoGrid(fileTree, config) {\n const grid = new Map();\n const { rows, cols } = this.getGridDimensions(config);\n // Initialize empty cells\n for (let row = 0; row < rows; row++) {\n for (let col = 0; col < cols; col++) {\n const key = `${row},${col}`;\n grid.set(key, this.createEmptyFileTree());\n }\n }\n // Track which items have been assigned\n const assignedItems = new Set();\n // Assign directories to their target cells, considering priority\n const cellAssignments = this.assignDirectoriesToCells(fileTree.root, config, assignedItems);\n // Place assigned directories into their cells\n cellAssignments.forEach((items, cellKey) => {\n const cellTree = grid.get(cellKey);\n if (cellTree) {\n cellTree.root.children = items;\n this.updateTreeStats(cellTree);\n }\n });\n // Files not matching any cell patterns are not included in the grid\n return grid;\n }\n /**\n * Calculate the bounds for a specific cell in the grid\n */\n calculateCellBounds(totalWidth, totalHeight, row, col, rows, cols, padding = 0, config) {\n // Calculate label space if configured (uses defaults from getUIMetadata)\n const ui = config ? getUIMetadata(config.metadata) : getUIMetadata(undefined);\n const showLabels = ui?.showCellLabels ?? true;\n let labelHeight = 0;\n // Calculate the base cell dimensions (content area without labels)\n // The totalHeight formula from CodeCityBuilderWithGrid is:\n // totalHeight = (maxCellHeight * rows) + (cellSpacing * (rows + 1)) + (labelHeight * rows) + (outerPadding * 2)\n // where cellSpacing = labelHeight when labels shown, and outerPadding = cellSpacing * 2\n let baseCellHeight = 0;\n let cellSpacing = padding; // Will be updated if labels are shown\n let outerPadding = padding * 2; // Outer padding around entire grid\n if (showLabels) {\n if (ui?.cellLabelHeight !== undefined) {\n // Use explicit pixel height if provided\n labelHeight = ui.cellLabelHeight;\n cellSpacing = labelHeight; // Use label height as spacing\n outerPadding = cellSpacing * 2; // Outer padding is 2x cell spacing\n // totalHeight = (baseCellHeight * rows) + (cellSpacing * (rows + 1)) + (labelHeight * rows) + (outerPadding * 2)\n // totalHeight = (baseCellHeight * rows) + (labelHeight * (rows + 1)) + (labelHeight * rows) + (labelHeight * 4)\n // totalHeight = (baseCellHeight * rows) + (labelHeight * (2 * rows + 5))\n // baseCellHeight = (totalHeight - labelHeight * (2 * rows + 5)) / rows\n baseCellHeight = Math.max(0, (totalHeight - labelHeight * (2 * rows + 5)) / rows);\n }\n else {\n // Calculate label height based on percentage of base cell height\n // Note: CodeCityBuilderWithGrid uses 0.15 (15%) as default, with min 30px\n const heightPercent = ui?.cellLabelHeightPercent || 0.15;\n const minLabelHeight = 30;\n // First, calculate assuming percentage-based label\n // totalHeight = baseCellHeight * rows + baseCellHeight * heightPercent * (2 * rows + 5)\n // totalHeight = baseCellHeight * (rows + heightPercent * (2 * rows + 5))\n const tentativeBaseCellHeight = totalHeight / (rows + heightPercent * (2 * rows + 5));\n const tentativeLabelHeight = tentativeBaseCellHeight * heightPercent;\n if (tentativeLabelHeight >= minLabelHeight) {\n // Percentage-based calculation works\n baseCellHeight = tentativeBaseCellHeight;\n labelHeight = tentativeLabelHeight;\n cellSpacing = labelHeight;\n outerPadding = cellSpacing * 2;\n }\n else {\n // Need to use minimum label height\n labelHeight = minLabelHeight;\n cellSpacing = labelHeight;\n outerPadding = cellSpacing * 2;\n // Recalculate base cell height with fixed label\n baseCellHeight = Math.max(0, (totalHeight - labelHeight * (2 * rows + 5)) / rows);\n }\n }\n }\n else {\n // No labels, so use the full height minus padding and outer padding\n outerPadding = padding * 2;\n const totalPadding = padding * (rows + 1) + outerPadding * 2;\n baseCellHeight = (totalHeight - totalPadding) / rows;\n cellSpacing = padding;\n }\n // The cell content height is the base cell height\n const cellHeight = baseCellHeight;\n const labelPosition = ui?.cellLabelPosition || (showLabels ? 'top' : 'none');\n // Calculate Y position for this row (add outer padding offset)\n // Each row takes up (cellHeight + labelHeight) plus cellSpacing\n const rowY = outerPadding + row * (cellHeight + labelHeight) + (row + 1) * cellSpacing;\n let contentY = rowY;\n let contentHeight = cellHeight;\n let labelBounds = undefined;\n if (labelHeight > 0 && labelPosition !== 'none') {\n // Reserve space for label at the top of the cell\n if (labelPosition === 'top') {\n // Calculate X position with cellSpacing and outer padding\n const adjustedCellWidth = (totalWidth - outerPadding * 2 - cellSpacing * (cols + 1)) / cols;\n const colX = outerPadding + col * adjustedCellWidth + (col + 1) * cellSpacing;\n labelBounds = {\n x: colX,\n y: rowY,\n width: adjustedCellWidth,\n height: labelHeight,\n };\n // Move content down to make room for label\n contentY = rowY + labelHeight;\n contentHeight = cellHeight;\n }\n else if (labelPosition === 'bottom') {\n // Content comes first, then label\n contentY = rowY;\n contentHeight = cellHeight;\n // Calculate X position with cellSpacing and outer padding\n const adjustedCellWidth = (totalWidth - outerPadding * 2 - cellSpacing * (cols + 1)) / cols;\n const colX = outerPadding + col * adjustedCellWidth + (col + 1) * cellSpacing;\n labelBounds = {\n x: colX,\n y: rowY + cellHeight,\n width: adjustedCellWidth,\n height: labelHeight,\n };\n }\n }\n // Calculate final position with cellSpacing and outer padding\n const adjustedCellWidth = (totalWidth - outerPadding * 2 - cellSpacing * (cols + 1)) / cols;\n const colX = outerPadding + col * adjustedCellWidth + (col + 1) * cellSpacing;\n return {\n x: colX,\n y: contentY,\n width: adjustedCellWidth,\n height: contentHeight,\n labelBounds,\n };\n }\n /**\n * Assign directories to cells based on cell configuration\n */\n assignDirectoriesToCells(root, config, assignedItems) {\n const cellAssignments = new Map();\n // Sort cells by priority (higher priority first)\n const sortedCells = Object.entries(config.referenceGroups).sort((a, b) => {\n const priorityA = a[1].priority || 0;\n const priorityB = b[1].priority || 0;\n return priorityB - priorityA;\n });\n // Collect all items with their paths for matching\n const allItemsWithPaths = this.collectAllItemsWithPaths(root);\n // Process each cell\n for (const [_cellName, cellConfig] of sortedCells) {\n const cellKey = `${cellConfig.coordinates[0]},${cellConfig.coordinates[1]}`;\n if (!cellAssignments.has(cellKey)) {\n cellAssignments.set(cellKey, []);\n }\n const cellItems = cellAssignments.get(cellKey);\n if (!cellItems) {\n throw new Error(`Cell items not found for key: ${cellKey}`);\n }\n // Find matching items using their full paths\n for (const { item, path } of allItemsWithPaths) {\n // Skip if already assigned\n if (assignedItems.has(path)) {\n continue;\n }\n // Check if item is in the cell's file list\n const matches = cellConfig.files && cellConfig.files.includes(path);\n if (matches) {\n cellItems.push(item);\n assignedItems.add(path);\n // If this is a directory, mark all descendants as assigned\n // This prevents them from being added as unassigned items\n if ('children' in item) {\n const markDescendantsAssigned = (node, parentPath) => {\n const nodePath = parentPath ? `${parentPath}/${node.name}` : node.name;\n assignedItems.add(nodePath);\n if ('children' in node) {\n for (const child of node.children) {\n markDescendantsAssigned(child, nodePath);\n }\n }\n };\n // Mark all children (but not the item itself, it's already marked)\n for (const child of item.children) {\n markDescendantsAssigned(child, path);\n }\n }\n }\n }\n }\n return cellAssignments;\n }\n /**\n * Recursively collect all items with their relative paths\n */\n collectAllItemsWithPaths(node, basePath = '') {\n const results = [];\n // For the root node, just process its children\n if (basePath === '' && node.name === 'root') {\n if ('children' in node) {\n for (const child of node.children) {\n results.push(...this.collectAllItemsWithPaths(child, ''));\n }\n }\n return results;\n }\n const currentPath = basePath ? `${basePath}/${node.name}` : node.name;\n // Add current item\n results.push({ item: node, path: currentPath });\n // Recursively collect children if it's a directory\n if ('children' in node) {\n for (const child of node.children) {\n results.push(...this.collectAllItemsWithPaths(child, currentPath));\n }\n }\n return results;\n }\n /**\n * Create an empty file tree\n */\n createEmptyFileTree() {\n const root = {\n name: 'cell-root',\n path: '',\n relativePath: '',\n children: [],\n fileCount: 0,\n totalSize: 0,\n depth: 0,\n };\n return {\n root,\n stats: {\n totalFiles: 0,\n totalDirectories: 0,\n totalSize: 0,\n maxDepth: 0,\n },\n allFiles: [],\n allDirectories: [],\n sha: '',\n metadata: {\n id: 'empty-cell',\n timestamp: new Date(),\n sourceType: 'grid-cell',\n sourceInfo: {},\n },\n };\n }\n /**\n * Update statistics for a file tree\n */\n updateTreeStats(tree) {\n const stats = {\n totalFiles: 0,\n totalDirectories: 0,\n totalSize: 0,\n maxDepth: 0,\n };\n this.calculateStats(tree.root, stats, 0);\n tree.stats = {\n ...tree.stats,\n ...stats,\n };\n }\n /**\n * Recursively calculate statistics for a directory\n */\n calculateStats(node, stats, depth) {\n stats.maxDepth = Math.max(stats.maxDepth, depth);\n if ('children' in node) {\n // It's a directory\n stats.totalDirectories++;\n for (const child of node.children) {\n this.calculateStats(child, stats, depth + 1);\n }\n }\n else {\n // It's a file\n stats.totalFiles++;\n stats.totalSize += node.size || 0;\n }\n }\n}\n//# sourceMappingURL=GridLayoutManager.js.map","import { hierarchy, treemap, treemapSquarify } from 'd3-hierarchy';\nimport { getUIMetadata } from './types/ui-metadata';\nimport { GridLayoutManager } from './GridLayoutManager';\n/**\n * CodeCityBuilderWithGrid - D3 Treemap Implementation with Grid Layout\n *\n * This class converts a FileSystemTree into a CityData visualization using D3's\n * robust treemap algorithms with grid-based spatial organization.\n *\n * Grid Layout:\n * - Default: 1x1 grid (traditional single treemap)\n * - Multi-cell: Organize code into spatial regions (src, tests, docs, etc.)\n * - Each directory becomes a district (rectangular boundary)\n * - Each file becomes a building (3D block) within those districts\n *\n * The grid system provides better organization for large codebases while\n * maintaining backward compatibility through the 1x1 default configuration.\n */\nexport class CodeCityBuilderWithGrid {\n constructor(options) {\n this.minBuildingSize = 4;\n this.maxBuildingSize = 40;\n // LRU cache for treemap results\n this.layoutCache = new Map();\n this.cacheHits = 0;\n this.cacheMisses = 0;\n // Removed theme and color parameters - these should be handled in the React layer\n this.maxCacheSize = options?.maxCacheSize ?? 20;\n }\n /**\n * Generate a cache key from file tree and options\n * Uses a fast hash of the structural properties that affect layout\n */\n generateCacheKey(fileSystemTree, rootPath, options) {\n // Extract only the options that affect treemap layout\n const cacheRelevantOptions = {\n padding: options.padding,\n paddingOuter: options.paddingOuter,\n paddingTop: options.paddingTop,\n paddingBottom: options.paddingBottom,\n paddingLeft: options.paddingLeft,\n paddingRight: options.paddingRight,\n paddingInner: options.paddingInner,\n round: options.round,\n maxNestingDepth: options.maxNestingDepth,\n deepNestingStrategy: options.deepNestingStrategy,\n minimumBuildingSizeOverride: options.minimumBuildingSizeOverride,\n deepNestingSizeBoost: options.deepNestingSizeBoost,\n flattenThreshold: options.flattenThreshold,\n };\n // Build tree identity from multiple factors to ensure uniqueness\n // For grid cells, metadata.id may be 'empty-cell' for all cells, so we need\n // additional differentiators based on actual content\n const statsKey = `${fileSystemTree.stats.totalFiles}:${fileSystemTree.stats.totalDirectories}:${fileSystemTree.stats.totalSize}`;\n // Include top-level children names to differentiate grid cells with same stats\n const childrenKey = fileSystemTree.root.children\n .map(child => child.name)\n .sort()\n .join(',');\n // Use metadata ID if it's meaningful (not 'empty-cell' from grid splitting)\n const metadataId = fileSystemTree.metadata?.id;\n const isGridCell = metadataId === 'empty-cell';\n const treeIdentity = isGridCell\n ? `grid:${statsKey}:${childrenKey}`\n : metadataId\n ? `${metadataId}:${fileSystemTree.metadata?.timestamp?.getTime() ?? 0}`\n : `stats:${statsKey}:${childrenKey}`;\n const optionsHash = JSON.stringify(cacheRelevantOptions);\n return `${treeIdentity}|${rootPath}|${optionsHash}`;\n }\n /**\n * Get cached result or undefined if not cached\n */\n getCached(key) {\n const entry = this.layoutCache.get(key);\n if (entry) {\n this.cacheHits++;\n // Move to end for LRU behavior (delete and re-add)\n this.layoutCache.delete(key);\n this.layoutCache.set(key, entry);\n return entry.cityData;\n }\n this.cacheMisses++;\n return undefined;\n }\n /**\n * Store result in cache with LRU eviction\n */\n setCached(key, cityData) {\n // Evict oldest entries if at capacity\n while (this.layoutCache.size >= this.maxCacheSize) {\n const oldestKey = this.layoutCache.keys().next().value;\n if (oldestKey) {\n this.layoutCache.delete(oldestKey);\n }\n }\n this.layoutCache.set(key, {\n cityData,\n createdAt: Date.now(),\n });\n }\n /**\n * Clear all cached treemap results\n */\n clearCache() {\n this.layoutCache.clear();\n this.cacheHits = 0;\n this.cacheMisses = 0;\n }\n /**\n * Get cache statistics for debugging/monitoring\n */\n getCacheStats() {\n const total = this.cacheHits + this.cacheMisses;\n return {\n size: this.layoutCache.size,\n maxSize: this.maxCacheSize,\n hits: this.cacheHits,\n misses: this.cacheMisses,\n hitRate: total > 0 ? this.cacheHits / total : 0,\n };\n }\n /**\n * Calculate maximum depth of directory hierarchy\n */\n calculateMaxDepth(directory, currentDepth = 0) {\n let maxDepth = currentDepth;\n directory.children.forEach(child => {\n if ('children' in child) {\n const childDepth = this.calculateMaxDepth(child, currentDepth + 1);\n maxDepth = Math.max(maxDepth, childDepth);\n }\n });\n return maxDepth;\n }\n /**\n * Analyze file system complexity for content-aware sizing\n */\n analyzeFileSystemComplexity(directory, stats = {\n totalFiles: 0,\n totalDirectories: 0,\n totalFileSize: 0,\n maxDepth: 0,\n avgFilesPerDirectory: 0,\n }, currentDepth = 0) {\n stats.totalDirectories++;\n stats.maxDepth = Math.max(stats.maxDepth, currentDepth);\n directory.children.forEach(child => {\n if ('children' in child) {\n this.analyzeFileSystemComplexity(child, stats, currentDepth + 1);\n }\n else {\n const file = child;\n stats.totalFiles++;\n stats.totalFileSize += file.size || 0;\n }\n });\n if (currentDepth === 0) {\n stats.avgFilesPerDirectory = stats.totalFiles / Math.max(1, stats.totalDirectories);\n }\n return stats;\n }\n /**\n * Legacy square root scaling (original method)\n */\n calculateLegacySqrtSize(totalFiles) {\n const minDimension = 500;\n const maxDimension = 1200;\n // Square root scaling: balanced growth\n const filesPerUnit = 10;\n const scaleFactor = Math.max(1, Math.sqrt(totalFiles / filesPerUnit));\n const width = Math.min(Math.max(minDimension * scaleFactor, minDimension), maxDimension);\n const height = width; // Keep square\n return { width, height };\n }\n /**\n * Calculate optimal size using the specified sizing strategy\n */\n calculateOptimalSize(totalFiles, totalDirectories, _options) {\n const result = this.calculateLegacySqrtSize(totalFiles);\n // Enforce minimum dimensions based on file count and directory structure\n if (totalFiles > 0) {\n // More aggressive minimum dimensions to prevent overlaps\n const baseMinPerFile = 50; // Base minimum dimension per file\n const directoryMultiplier = Math.max(1, totalDirectories / totalFiles); // Penalty for spread out files\n // Use a formula that ensures enough space even for worst-case scenarios\n const minDimension = Math.max(1000, // Absolute minimum\n baseMinPerFile * Math.sqrt(totalFiles) * (1 + directoryMultiplier));\n if (result.width < minDimension || result.height < minDimension) {\n result.width = Math.max(result.width, minDimension);\n result.height = Math.max(result.height, minDimension);\n }\n }\n return result;\n }\n /**\n * Post-process buildings to enforce minimum sizes for deeply nested items\n */\n enforceMinimumBuildingSizes(buildings, options) {\n if (!options.minimumBuildingSizeOverride) {\n return buildings;\n }\n const minSize = 6;\n const minArea = minSize * minSize;\n const adjustedBuildings = buildings.map(building => {\n const currentArea = building.dimensions[0] * building.dimensions[2];\n if (currentArea < minArea) {\n const scaleFactor = Math.sqrt(minArea / currentArea);\n return {\n ...building,\n dimensions: [\n Math.max(minSize, building.dimensions[0] * scaleFactor),\n building.dimensions[1], // Keep height unchanged\n Math.max(minSize, building.dimensions[2] * scaleFactor),\n ],\n };\n }\n return building;\n });\n return adjustedBuildings;\n }\n /**\n * Main method to convert file system tree to city data using D3 treemap with grid layout\n *\n * @param fileSystemTree - The file system structure to visualize\n * @param rootPath - The root path for the visualization\n * @param options - Treemap configuration options\n * @returns CityData with districts and buildings positioned via grid-based D3 treemap\n */\n buildCityFromFileSystem(fileSystemTree, rootPath = '', options = {}) {\n // Always use grid layout - default to 1x1 grid if not specified\n const gridConfig = options.gridLayout || {\n id: 'default-single-cell',\n version: '1.0',\n name: 'Default Single Cell View',\n description: 'Default single-cell grid layout for entire codebase',\n overviewPath: 'README.md',\n category: 'default',\n displayOrder: 0,\n referenceGroups: {\n main: {\n files: ['*'],\n coordinates: [0, 0],\n },\n },\n metadata: {\n ui: {\n enabled: true,\n rows: 1,\n cols: 1,\n },\n },\n };\n return this.buildCityWithGridLayout(fileSystemTree, rootPath, {\n ...options,\n gridLayout: gridConfig,\n });\n }\n /**\n * Build city with grid-based spatial layout (now the primary implementation)\n *\n * @param fileSystemTree - The file system structure to visualize\n * @param rootPath - The root path for the visualization\n * @param options - Treemap configuration options with grid layout\n * @returns CityData with districts and buildings positioned in grid cells\n */\n buildCityWithGridLayout(fileSystemTree, rootPath = '', options = {}) {\n if (!options.gridLayout) {\n throw new Error('Grid layout configuration is required');\n }\n const gridConfig = options.gridLayout;\n // Multi-cell grid layout - get dimensions first\n const gridManager = new GridLayoutManager();\n const { rows, cols } = gridManager.getGridDimensions(gridConfig);\n // Optimization: For single-cell grids (1x1), skip the grid splitting overhead\n if (rows === 1 && cols === 1) {\n // Direct single-cell rendering without grid overhead\n return this.buildSingleCellCity(fileSystemTree, rootPath, options);\n }\n const gridTrees = gridManager.splitTreeIntoGrid(fileSystemTree, gridConfig);\n // PHASE 1: Calculate adaptive dimensions for each cell\n let maxCellWidth = 0;\n let maxCellHeight = 0;\n gridTrees.forEach(cellTree => {\n // Skip empty cells\n if (cellTree.root.children.length === 0) {\n return;\n }\n const totalFiles = cellTree.stats.totalFiles;\n const totalDirectories = cellTree.stats.totalDirectories;\n // Calculate optimal size for this cell using adaptive sizing\n const cellDimensions = this.calculateOptimalSize(totalFiles, totalDirectories, options);\n // Track maximum dimensions needed\n maxCellWidth = Math.max(maxCellWidth, cellDimensions.width);\n maxCellHeight = Math.max(maxCellHeight, cellDimensions.height);\n });\n // PHASE 2: Calculate total grid canvas size based on uniform cell size + label space\n const ui = getUIMetadata(gridConfig.metadata);\n const cellPadding = ui?.cellPadding ?? 10;\n // Calculate label space to add to total canvas size\n const showLabels = ui?.showCellLabels ?? true;\n let labelHeight = 0;\n if (showLabels) {\n if (ui?.cellLabelHeight !== undefined) {\n // Use explicit pixel height if provided\n labelHeight = ui.cellLabelHeight;\n }\n else {\n // Use percentage-based height (uses default from ui-metadata)\n const heightPercent = ui?.cellLabelHeightPercent ?? 0.12;\n const calculatedHeight = maxCellHeight * heightPercent;\n // Apply reasonable bounds: min 30px\n labelHeight = Math.max(30, calculatedHeight);\n }\n }\n const totalLabelHeight = labelHeight * rows; // Labels for each row\n // Add padding equal to label height around each cell for better spacing\n const cellSpacing = labelHeight > 0 ? labelHeight : cellPadding;\n // Add outer padding around the entire grid (2x the cell spacing for good breathing room)\n const outerPadding = cellSpacing * 2;\n // For single column layouts, constrain the width to maintain a reasonable aspect ratio\n let effectiveMaxCellWidth = maxCellWidth;\n if (cols === 1) {\n // For single column, limit width to be no more than 2x the height for better proportions\n effectiveMaxCellWidth = Math.min(maxCellWidth, maxCellHeight * 2);\n }\n const totalWidth = effectiveMaxCellWidth * cols + cellSpacing * (cols + 1) + outerPadding * 2;\n const totalHeight = maxCellHeight * rows + cellSpacing * (rows + 1) + totalLabelHeight + outerPadding * 2;\n const allBuildings = [];\n const allDistricts = [];\n // PHASE 3: Build each cell using the uniform maximum dimensions\n gridTrees.forEach((cellTree, cellKey) => {\n const [row, col] = cellKey.split(',').map(Number);\n // Calculate bounds for this cell using uniform dimensions\n const cellBounds = gridManager.calculateCellBounds(totalWidth, totalHeight, row, col, rows, cols, cellSpacing, // Use cellSpacing which equals labelHeight when labels are shown\n gridConfig);\n // Skip empty cells\n if (cellTree.root.children.length === 0) {\n return;\n }\n // Build city for this cell using the uniform maximum dimensions\n const cellOptions = {\n ...options,\n gridLayout: undefined, // Prevent recursion\n };\n // Build the city for this cell using treemap layout\n const cellCity = this.buildSingleCellCity(cellTree, rootPath, cellOptions);\n // Translate all positions to the grid cell location\n cellCity.buildings.forEach(building => {\n building.position.x += cellBounds.x;\n building.position.z += cellBounds.y; // Map Y to Z for 3D visualization\n });\n cellCity.districts.forEach(district => {\n district.worldBounds.minX += cellBounds.x;\n district.worldBounds.maxX += cellBounds.x;\n district.worldBounds.minZ += cellBounds.y;\n district.worldBounds.maxZ += cellBounds.y;\n });\n // Add a cell boundary district for visual clarity (optional)\n const cellDistrict = {\n path: `grid-cell-${row}-${col}`,\n worldBounds: {\n minX: cellBounds.x,\n maxX: cellBounds.x + cellBounds.width,\n minZ: cellBounds.y,\n maxZ: cellBounds.y + cellBounds.height,\n },\n fileCount: cellCity.buildings.length,\n type: 'directory',\n };\n // Add label metadata if configured (default: true unless explicitly disabled)\n const showLabels = ui?.showCellLabels !== undefined ? ui.showCellLabels : true;\n if (showLabels && cellBounds.labelBounds) {\n // Determine label text from group configuration\n let labelText = 'Misc';\n // Find the cell name for this position\n for (const [cellName, cellConfig] of Object.entries(gridConfig.referenceGroups)) {\n if (cellConfig.coordinates[0] === row && cellConfig.coordinates[1] === col) {\n labelText = cellName;\n break;\n }\n }\n cellDistrict.label = {\n text: labelText,\n bounds: {\n minX: cellBounds.labelBounds.x,\n maxX: cellBounds.labelBounds.x + cellBounds.labelBounds.width,\n minZ: cellBounds.labelBounds.y,\n maxZ: cellBounds.labelBounds.y + cellBounds.labelBounds.height,\n },\n position: (ui?.cellLabelPosition || 'top'),\n };\n }\n allBuildings.push(...cellCity.buildings);\n allDistricts.push(cellDistrict, ...cellCity.districts);\n });\n // Calculate overall bounds - use the total canvas dimensions we calculated\n // This ensures the bounds include the outer padding we added\n const bounds = {\n minX: 0,\n maxX: totalWidth,\n minZ: 0,\n maxZ: totalHeight,\n };\n return {\n buildings: allBuildings,\n districts: allDistricts,\n bounds,\n metadata: {\n totalFiles: allBuildings.length,\n totalDirectories: allDistricts.length,\n analyzedAt: new Date(),\n rootPath,\n layoutConfig: {\n paddingTop: options.paddingTop || 20,\n paddingBottom: options.paddingBottom || 20,\n paddingLeft: options.paddingLeft || 4,\n paddingRight: options.paddingRight || 4,\n paddingInner: options.paddingInner || 4,\n paddingOuter: options.paddingOuter || 8,\n },\n },\n };\n }\n /**\n * Build city for a single grid cell using treemap layout\n * This is the core treemap implementation without grid splitting\n *\n * Results are cached based on file tree identity and layout options.\n * Cache hits skip the expensive D3 treemap computation entirely.\n */\n buildSingleCellCity(fileSystemTree, rootPath = '', options = {}) {\n // Check cache first\n const cacheKey = this.generateCacheKey(fileSystemTree, rootPath, options);\n const cached = this.getCached(cacheKey);\n if (cached) {\n return cached;\n }\n const { padding = 4, paddingOuter = 8, paddingTop = 20, paddingBottom = 20, paddingLeft = 4, paddingRight = 4, paddingInner = 4, round = true, tile = treemapSquarify, } = options;\n // Always calculate adaptive dimensions\n const totalFiles = fileSystemTree.stats.totalFiles;\n const totalDirectories = fileSystemTree.stats.totalDirectories;\n const sizeResult = this.calculateOptimalSize(totalFiles, totalDirectories, options);\n const width = sizeResult.width;\n const height = sizeResult.height;\n const buildings = [];\n const districts = [];\n // Step 1: Convert FileSystemTree to D3 hierarchy format\n const hierarchyData = this.convertToD3Hierarchy(fileSystemTree.root);\n // Step 2: Deep nesting handling - DISABLED (see comments in original implementation)\n const processedHierarchyData = hierarchyData;\n // Step 3: Create D3 hierarchy and calculate file counts\n const hierarchyRoot = hierarchy(processedHierarchyData)\n .sum(d => {\n if (d.type === 'file') {\n return d.weight || 1;\n }\n if (d.type === 'directory') {\n // Directories should not take space themselves - only their file children should\n // Previously set to 1, but this created empty space at every directory level\n return 0;\n }\n return 0;\n })\n .sort((a, b) => (b.value || 0) - (a.value || 0));\n // Step 4: Create D3 treemap layout\n const treemapLayout = treemap()\n .size([width, height])\n .padding(padding)\n .paddingOuter(paddingOuter)\n .paddingTop(paddingTop)\n .paddingBottom(paddingBottom)\n .paddingLeft(paddingLeft)\n .paddingRight(paddingRight)\n .paddingInner(paddingInner)\n .tile(tile)\n .round(round);\n // Step 5: Apply treemap layout\n const root = treemapLayout(hierarchyRoot);\n // Step 6: Convert D3 treemap nodes back to districts and buildings\n this.convertD3TreemapToCityData(root, districts, buildings, rootPath);\n // Calculate overall bounds\n const bounds = this.calculateBounds(buildings, districts);\n // Post-process buildings to enforce minimum sizes for deeply nested items\n const finalBuildings = this.enforceMinimumBuildingSizes(buildings, options);\n const result = {\n buildings: finalBuildings,\n districts,\n bounds,\n metadata: {\n totalFiles: fileSystemTree.stats.totalFiles,\n totalDirectories: fileSystemTree.stats.totalDirectories,\n analyzedAt: new Date(),\n rootPath,\n layoutConfig: {\n paddingTop,\n paddingBottom,\n paddingLeft,\n paddingRight,\n paddingInner,\n paddingOuter,\n },\n },\n };\n // Cache the result before returning\n this.setCached(cacheKey, result);\n return result;\n }\n /**\n * Convert FileSystemTree format to D3 hierarchy format\n *\n * D3 expects a specific hierarchy structure with name, children, and value properties.\n * This method recursively transforms our FileSystemTree into that format.\n */\n convertToD3Hierarchy(directory) {\n const children = [];\n // Sort children using configured sort functions\n const sortedChildren = [...directory.children];\n // Add subdirectories\n sortedChildren.forEach(child => {\n if ('children' in child) {\n // It's a directory\n const subdir = child;\n children.push(this.convertToD3Hierarchy(subdir));\n }\n else {\n // It's a file\n const file = child;\n children.push({\n name: file.name,\n relativePath: file.relativePath,\n type: 'file',\n size: file.size,\n extension: file.extension,\n lastModified: file.lastModified,\n });\n }\n });\n return {\n name: directory.name,\n relativePath: directory.relativePath,\n type: 'directory',\n fileCount: directory.fileCount,\n totalSize: directory.totalSize,\n children: children.length > 0 ? children : undefined,\n };\n }\n /**\n * Convert D3 treemap layout results back to our CityData format\n *\n * This method traverses the D3 treemap result and creates districts for directories\n * and buildings for files, using the calculated rectangle positions and sizes.\n */\n convertD3TreemapToCityData(node, districts, buildings, rootPath, depth = 0, parentPath = '') {\n const data = node.data;\n if (data.type === 'file') {\n // Create building for file using the data's relativePath\n const building = this.createBuildingFromD3Node(node, data, rootPath);\n buildings.push(building);\n }\n else if (data.type === 'directory') {\n // Always create district for directory, even if it has no direct area allocated\n // This ensures directories containing only subdirectories are still rendered\n const hasArea = (node.x1 || 0) > (node.x0 || 0) && (node.y1 || 0) > (node.y0 || 0);\n const hasChildren = node.children && node.children.length > 0;\n // Create district if it has area OR if it has children (subdirectories/files)\n if (hasArea || hasChildren) {\n // Use the relativePath from the data\n let fullPath;\n if (depth === 0) {\n // Root directory - use the root path or empty for relative trees\n fullPath = rootPath.startsWith('/') ? rootPath.substring(1) : rootPath;\n }\n else {\n // Child directory - construct path properly\n const cleanRoot = rootPath.startsWith('/') ? rootPath.substring(1) : rootPath;\n if (cleanRoot === '' || cleanRoot === '.') {\n // For relative path trees, use relativePath directly\n fullPath = data.relativePath || data.name;\n }\n else {\n // For rooted trees, prefix with root\n fullPath = `${cleanRoot}/${data.relativePath}`;\n }\n }\n // Remove any incorrect prefix like \"PrincipleMD/\"\n if (fullPath.startsWith('PrincipleMD/')) {\n console.warn('⚠️ Removing incorrect PrincipleMD prefix from district path:', fullPath);\n fullPath = fullPath.substring('PrincipleMD/'.length);\n }\n // For directories without area, compute bounds from children\n let bounds = {\n minX: node.x0 || 0,\n maxX: node.x1 || 0,\n minZ: node.y0 || 0,\n maxZ: node.y1 || 0,\n };\n // If no area allocated but has children, compute bounds from children\n if (!hasArea && hasChildren) {\n const childBounds = this.computeBoundsFromChildren(node);\n if (childBounds) {\n bounds = childBounds;\n }\n }\n // Calculate actual file count (direct files in this directory only)\n const directFileCount = node.children\n ? node.children.filter(child => child.data.type === 'file').length\n : 0;\n const district = {\n path: fullPath,\n worldBounds: bounds,\n fileCount: directFileCount, // Direct files only, not D3 sum\n type: 'directory',\n };\n districts.push(district);\n }\n }\n // Recursively process children\n if (node.children) {\n // Pass the current node's path as parent path for children\n const currentPath = data.type === 'directory' ? data.relativePath || data.name || '' : parentPath;\n node.children.forEach(child => {\n this.convertD3TreemapToCityData(child, districts, buildings, rootPath, depth + 1, currentPath);\n });\n }\n }\n /**\n * Create a building from D3 treemap node data\n *\n * Buildings are positioned at the center of their allocated treemap rectangle,\n * with dimensions that fill the rectangle and height based on file size.\n *\n * UPDATED: Use D3's built-in padding system for proper space management\n * instead of manual post-processing adjustments.\n */\n createBuildingFromD3Node(node, fileData, rootPath = '') {\n // Calculate building dimensions from treemap rectangle\n const rawWidth = (node.x1 || 0) - (node.x0 || 0);\n const rawDepth = (node.y1 || 0) - (node.y0 || 0);\n // SIMPLIFIED: D3 treemap now handles padding and label space properly\n // Apply minimal padding to prevent buildings from exactly touching district edges\n const paddingFactor = 0.95; // Slight reduction for visual separation\n const width = Math.max(1, rawWidth * paddingFactor);\n const depth = Math.max(1, rawDepth * paddingFactor);\n // Calculate center position - treemap already accounts for label space\n const centerX = (node.x0 || 0) + rawWidth / 2;\n const centerZ = (node.y0 || 0) + rawDepth / 2;\n // Calculate building height based on file size (normalized)\n const sizeRatio = Math.min((fileData.size || 0) / 10000, 1); // Normalize to 10KB max\n const buildingHeight = this.minBuildingSize + sizeRatio * (this.maxBuildingSize - this.minBuildingSize);\n // Use the relativePath from fileData with the root prefix\n const cleanRoot = rootPath.startsWith('/') ? rootPath.substring(1) : rootPath;\n let fullFilePath;\n if (cleanRoot === '' || cleanRoot === '.') {\n // For relative path trees, use relativePath directly\n fullFilePath = fileData.relativePath || fileData.name;\n }\n else {\n // For rooted trees, prefix with root\n fullFilePath = `${cleanRoot}/${fileData.relativePath}`;\n }\n return {\n path: fullFilePath,\n position: { x: centerX, y: buildingHeight / 2, z: centerZ },\n dimensions: [width, buildingHeight, depth], // [width, height, depth]\n type: 'file',\n // Removed color property to allow theme system to work\n size: fileData.size,\n fileExtension: fileData.extension,\n lastModified: fileData.lastModified,\n };\n }\n /**\n * Compute bounds from children nodes when a directory has no allocated area\n */\n computeBoundsFromChildren(node) {\n if (!node.children || node.children.length === 0) {\n return null;\n }\n let minX = Infinity;\n let maxX = -Infinity;\n let minZ = Infinity;\n let maxZ = -Infinity;\n // Recursively compute bounds from all descendant nodes that have area\n const computeBounds = (n) => {\n // Check if this node has area\n if (n.x0 !== undefined && n.x1 !== undefined && n.y0 !== undefined && n.y1 !== undefined) {\n const hasArea = (n.x1 || 0) > (n.x0 || 0) && (n.y1 || 0) > (n.y0 || 0);\n if (hasArea) {\n minX = Math.min(minX, n.x0 || 0);\n maxX = Math.max(maxX, n.x1 || 0);\n minZ = Math.min(minZ, n.y0 || 0);\n maxZ = Math.max(maxZ, n.y1 || 0);\n }\n }\n // Recursively check children\n if (n.children) {\n n.children.forEach(child => computeBounds(child));\n }\n };\n // Start computing from children\n node.children.forEach(child => computeBounds(child));\n // Return null if no bounds were found\n if (minX === Infinity || maxX === -Infinity || minZ === Infinity || maxZ === -Infinity) {\n return null;\n }\n return { minX, maxX, minZ, maxZ };\n }\n // Removed color-related methods:\n // - generateLegend: Legends should be handled in the React layer\n // - updateBuildingTypeDistribution: Type distribution for colors not needed in builder\n // - updateColorConfig: Color configuration belongs in presentation layer\n // - getDistrictColor: Colors should be determined by React components\n // - getBuildingColor: Colors should be determined by React components\n /**\n * Calculate overall bounds of the city\n *\n * This determines the total area covered by all districts and buildings\n * for camera positioning and viewport calculations.\n */\n calculateBounds(buildings, districts) {\n let minX = Infinity;\n let maxX = -Infinity;\n let minZ = Infinity;\n let maxZ = -Infinity;\n // Check building bounds\n buildings.forEach(building => {\n const halfWidth = building.dimensions[0] / 2;\n const halfDepth = building.dimensions[2] / 2;\n minX = Math.min(minX, building.position.x - halfWidth);\n maxX = Math.max(maxX, building.position.x + halfWidth);\n minZ = Math.min(minZ, building.position.z - halfDepth);\n maxZ = Math.max(maxZ, building.position.z + halfDepth);\n });\n // Check district bounds\n districts.forEach(district => {\n minX = Math.min(minX, district.worldBounds.minX);\n maxX = Math.max(maxX, district.worldBounds.maxX);\n minZ = Math.min(minZ, district.worldBounds.minZ);\n maxZ = Math.max(maxZ, district.worldBounds.maxZ);\n });\n // Fallback if no items\n if (buildings.length === 0 && districts.length === 0) {\n return { minX: 0, maxX: 100, minZ: 0, maxZ: 100 };\n }\n return { minX, maxX, minZ, maxZ };\n }\n}\n//# sourceMappingURL=CodeCityBuilderWithGrid.js.map","import { CodeCityBuilderWithGrid } from './CodeCityBuilderWithGrid';\n/**\n * Multi-version city builder that preserves all city data including grid labels.\n * This builder creates a single union city from multiple file trees and provides\n * filtered views for each version while maintaining all visual metadata.\n */\nexport class MultiVersionCityBuilder {\n /**\n * Build a multi-version city that preserves all metadata including grid labels\n */\n static build(versionTrees, options = {}) {\n // Step 1: Merge all trees into a union tree\n const unionTree = this.mergeTreesByPath(versionTrees);\n // Step 2: Build the union city with all features preserved\n const builder = new CodeCityBuilderWithGrid();\n const unionCity = builder.buildCityFromFileSystem(unionTree, '', {\n gridLayout: options.gridLayout,\n });\n // Step 3: Build presence sets for filtering\n const presenceByVersion = this.buildPresenceSets(versionTrees);\n return { unionCity, presenceByVersion };\n }\n /**\n * Get a filtered view of the city for a specific version\n */\n static getVersionView(unionCity, presentFiles, options = {}) {\n // Filter buildings to only those present in this version\n const visibleBuildings = unionCity.buildings.filter(b => {\n if (options.filterPrefix && !b.path.startsWith(options.filterPrefix))\n return false;\n return presentFiles.has(b.path);\n });\n // Calculate which districts have visible files\n const districtsWithFiles = new Set();\n for (const building of visibleBuildings) {\n // Find the district this building belongs to\n const districtPath = unionCity.districts.reduce((best, d) => building.path.startsWith(d.path) && d.path.length > best.length ? d.path : best, '');\n districtsWithFiles.add(districtPath);\n }\n // Filter districts to only those with files (but preserve ALL district properties including labels)\n const visibleDistricts = unionCity.districts\n .filter(d => {\n if (options.filterPrefix && !d.path.startsWith(options.filterPrefix))\n return false;\n // Always keep grid cell districts (they have labels)\n if (d.path.startsWith('grid-cell-'))\n return true;\n return districtsWithFiles.has(d.path) || d.path === '';\n })\n .map(d => ({\n ...d, // Preserve all properties including label\n fileCount: visibleBuildings.filter(b => b.path.startsWith(d.path) &&\n !unionCity.districts.some(other => other.path !== d.path &&\n other.path.startsWith(d.path) &&\n b.path.startsWith(other.path))).length,\n }));\n // Return a new city data with filtered elements but all metadata preserved\n return {\n buildings: visibleBuildings,\n districts: visibleDistricts,\n bounds: unionCity.bounds,\n metadata: {\n ...unionCity.metadata,\n totalFiles: visibleBuildings.length,\n totalDirectories: visibleDistricts.length,\n },\n };\n }\n static normalizeRootPath(path) {\n return path.startsWith('/') ? path.substring(1) : path;\n }\n static mergeTreesByPath(versionTrees) {\n const first = Array.from(versionTrees.values())[0];\n if (!first)\n throw new Error('mergeTreesByPath: no trees provided');\n const computedRootName = 'root';\n const rootNode = {\n name: computedRootName,\n isDir: true,\n children: new Map(),\n files: new Map(),\n };\n const addTree = (tree) => {\n for (const f of tree.allFiles) {\n const rel = f.relativePath || this.normalizeRootPath(f.path);\n const parts = rel.split('/').filter((p) => p !== '');\n if (parts.length === 0)\n continue;\n let node = rootNode;\n for (let i = 0; i < parts.length - 1; i++) {\n const p = parts[i];\n let child = node.children.get(p);\n if (!child) {\n child = { name: p, isDir: true, children: new Map(), files: new Map() };\n node.children.set(p, child);\n }\n node = child;\n }\n const fname = parts[parts.length - 1];\n if (!node.files.has(fname)) {\n node.files.set(fname, {\n ...f,\n name: fname,\n relativePath: rel,\n });\n }\n }\n };\n versionTrees.forEach(addTree);\n const toDirectoryInfo = (node, parentPath) => {\n const isRoot = node === rootNode;\n const fullPath = isRoot ? '' : parentPath === '' ? node.name : `${parentPath}/${node.name}`;\n const relPath = isRoot ? '' : parentPath === '' ? node.name : `${parentPath}/${node.name}`;\n const children = [];\n for (const [, childNode] of node.children) {\n children.push(toDirectoryInfo(childNode, fullPath));\n }\n for (const [, file] of node.files) {\n const fileFullPath = fullPath === '' ? file.name : `${fullPath}/${file.name}`;\n const fileRelPath = relPath === '' ? file.name : `${relPath}/${file.name}`;\n const completeFile = {\n ...file,\n path: fileFullPath,\n relativePath: fileRelPath,\n };\n children.push(completeFile);\n }\n const dirInfo = {\n path: fullPath,\n name: node.name,\n children,\n fileCount: children.filter(c => !('children' in c)).length,\n totalSize: 0,\n depth: fullPath.split('/').length - 1,\n relativePath: relPath,\n };\n return dirInfo;\n };\n let root = toDirectoryInfo(rootNode, '');\n // Override some root properties\n root = {\n ...root,\n path: '.',\n name: 'root',\n relativePath: '',\n };\n const allFiles = [];\n const allDirectories = [];\n const collect = (dir) => {\n allDirectories.push(dir);\n for (const child of dir.children) {\n if (child.children)\n collect(child);\n else\n allFiles.push(child);\n }\n };\n collect(root);\n const unionTree = {\n sha: 'union',\n root,\n allFiles,\n allDirectories,\n stats: {\n totalFiles: allFiles.length,\n totalDirectories: allDirectories.length,\n totalSize: 0,\n maxDepth: 0,\n },\n metadata: {\n id: 'union-tree',\n timestamp: new Date(),\n sourceType: 'multi-version',\n sourceInfo: {},\n },\n };\n return unionTree;\n }\n static buildPresenceSets(versionTrees) {\n const presenceByVersion = new Map();\n for (const [id, tree] of versionTrees.entries()) {\n const set = new Set();\n for (const f of tree.allFiles) {\n const filePath = f.relativePath || f.path;\n set.add(filePath);\n }\n presenceByVersion.set(id, set);\n }\n return presenceByVersion;\n }\n}\n//# sourceMappingURL=MultiVersionCityBuilder.js.map","import { MultiVersionCityBuilder } from './MultiVersionCityBuilder';\n/**\n * Build a multi-version city using the simplified approach.\n * This is the recommended way to build multi-version cities.\n */\nexport function buildMultiVersionCity(versionTrees, options = {}) {\n const result = MultiVersionCityBuilder.build(versionTrees, options);\n return {\n ...result,\n getVersionView: (versionId, filterPrefix) => {\n const presentFiles = result.presenceByVersion.get(versionId);\n if (!presentFiles)\n return undefined;\n return MultiVersionCityBuilder.getVersionView(result.unionCity, presentFiles, {\n filterPrefix,\n });\n },\n };\n}\n//# sourceMappingURL=buildMultiVersionCity.js.map","export function getFilesFromGitHubTree(tree) {\n return tree.tree.map(item => ({\n name: item.path.split('/').pop() || item.path,\n path: item.path,\n relativePath: item.path,\n size: item.size || 0,\n extension: item.path.includes('.') ? '.' + item.path.split('.').pop() : '',\n lastModified: new Date(),\n isDirectory: item.type === 'tree',\n }));\n}\nexport function buildFileSystemTreeFromFileInfoList(treeFiles, sha) {\n // Build directory structure\n const root = {\n name: 'root',\n path: '',\n relativePath: '',\n type: 'directory',\n children: [],\n fileCount: treeFiles.length,\n totalSize: treeFiles.reduce((sum, file) => sum + (file.size || 0), 0),\n depth: 0,\n };\n // Group files by directory\n const directories = new Map();\n directories.set('', root);\n treeFiles.forEach(file => {\n const pathParts = file.path.split('/');\n const fileName = pathParts.pop() || file.path;\n // Create directory structure\n let currentPath = '';\n let currentDir = root;\n pathParts.forEach((dirName, index) => {\n currentPath = currentPath ? `${currentPath}/${dirName}` : dirName;\n if (!directories.has(currentPath)) {\n const newDir = {\n name: dirName,\n path: currentPath,\n relativePath: currentPath,\n type: 'directory',\n children: [],\n fileCount: 0,\n totalSize: 0,\n depth: index + 1,\n };\n directories.set(currentPath, newDir);\n currentDir.children.push(newDir);\n }\n const nextDir = directories.get(currentPath);\n if (!nextDir) {\n throw new Error(`Directory not found: ${currentPath}`);\n }\n currentDir = nextDir;\n });\n // Add file to its directory\n const fileNode = {\n name: fileName,\n path: file.path,\n relativePath: file.path,\n type: 'file',\n size: file.size || 0,\n extension: fileName.includes('.') ? '.' + fileName.split('.').pop() : '',\n lastModified: new Date(), // GitHub API doesn't provide this in tree\n };\n currentDir.children.push(fileNode);\n });\n // Calculate file counts and sizes for directories\n const calculateStats = (dir) => {\n let fileCount = 0;\n let totalSize = 0;\n dir.children.forEach((child) => {\n if (child.type === 'file') {\n fileCount++;\n totalSize += child.size;\n }\n else {\n calculateStats(child);\n fileCount += child.fileCount;\n totalSize += child.totalSize;\n }\n });\n dir.fileCount = fileCount;\n dir.totalSize = totalSize;\n };\n calculateStats(root);\n // Convert internal types to DirectoryInfo/FileInfo\n const convertToFileTreeNode = (node) => {\n if (node.type === 'file') {\n const fileNode = {\n name: node.name,\n path: node.path,\n relativePath: node.relativePath,\n size: node.size,\n extension: node.extension,\n lastModified: node.lastModified,\n isDirectory: false,\n };\n return fileNode;\n }\n else {\n const dirNode = {\n name: node.name,\n path: node.path,\n relativePath: node.relativePath,\n children: node.children.map(convertToFileTreeNode),\n fileCount: node.fileCount,\n totalSize: node.totalSize,\n depth: node.depth,\n };\n return dirNode;\n }\n };\n const rootAsDirectoryInfo = convertToFileTreeNode(root);\n const allDirectoriesConverted = Array.from(directories.values())\n .filter(d => d.path !== '')\n .map(d => convertToFileTreeNode(d));\n // Generate legend data\n return {\n sha,\n root: rootAsDirectoryInfo,\n stats: {\n totalFiles: treeFiles.length,\n totalDirectories: directories.size - 1, // Exclude root\n totalSize: root.totalSize,\n maxDepth: Math.max(...treeFiles.map(f => f.path.split('/').length)),\n // Let CodeCityBuilder handle the analysis\n // Let CodeCityBuilder handle the analysis\n // Let CodeCityBuilder handle the analysis\n },\n allFiles: treeFiles.map(f => ({\n name: f.path.split('/').pop() || f.path,\n path: f.path,\n relativePath: f.path,\n size: f.size || 0,\n extension: f.path.includes('.') ? '.' + f.path.split('.').pop() : '',\n lastModified: new Date(),\n isDirectory: false,\n })),\n allDirectories: allDirectoriesConverted,\n metadata: {\n id: 'file-tree',\n timestamp: new Date(),\n sourceType: 'github-tree',\n sourceInfo: {},\n },\n };\n}\nexport function filterFileSystemTreeForProject(fileSystemTree, projectPath) {\n // Handle root project case\n if (projectPath === '') {\n // For root project, exclude files that are in subdirectories with package.json files\n // This is more complex and might need the search index profile to know which subdirs to exclude\n // For now, we'll just return the original tree\n return fileSystemTree;\n }\n // Filter allFiles to only include files within the project directory\n const projectPrefix = projectPath + '/';\n const filteredFiles = fileSystemTree.allFiles.filter((file) => {\n const isInProject = file.relativePath.startsWith(projectPrefix);\n return isInProject;\n });\n if (filteredFiles.length === 0) {\n throw new Error(`No files found for project path \"${projectPath}\"`);\n }\n // Rebuild the directory structure for the filtered files\n const filteredTree = buildFileSystemTreeFromFileInfoList(filteredFiles, fileSystemTree.sha);\n return filteredTree;\n}\n//# sourceMappingURL=FileTreeBuilder.js.map","export const CommonSorts = {\n // Directory sorts\n directoryAlphabetical: (a, b) => a.name.localeCompare(b.name),\n directoryAlphabeticalReverse: (a, b) => b.name.localeCompare(a.name),\n directorySize: (a, b) => b.fileCount - a.fileCount,\n directorySizeReverse: (a, b) => a.fileCount - b.fileCount,\n // File sorts\n fileAlphabetical: (a, b) => a.name.localeCompare(b.name),\n fileAlphabeticalReverse: (a, b) => b.name.localeCompare(a.name),\n fileSize: (a, b) => b.size - a.size,\n fileSizeReverse: (a, b) => a.size - b.size,\n fileExtension: (a, b) => {\n const extA = a.name.split('.').pop() || '';\n const extB = b.name.split('.').pop() || '';\n return extA.localeCompare(extB) || a.name.localeCompare(b.name);\n },\n fileModificationTime: (a, b) => {\n if (!a.lastModified || !b.lastModified)\n return 0;\n return b.lastModified.getTime() - a.lastModified.getTime();\n },\n fileModificationTimeReverse: (a, b) => {\n if (!a.lastModified || !b.lastModified)\n return 0;\n return a.lastModified.getTime() - b.lastModified.getTime();\n },\n};\n//# sourceMappingURL=sorts.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.useCodeCityData = useCodeCityData;\nconst react_1 = require(\"react\");\nconst file_city_builder_1 = require(\"@principal-ai/file-city-builder\");\nfunction useCodeCityData({ fileSystemTree, autoUpdate = true, }) {\n const [cityData, setCityData] = (0, react_1.useState)(null);\n const [isLoading, setIsLoading] = (0, react_1.useState)(false);\n const [error, setError] = (0, react_1.useState)(null);\n // UI state\n const [highlightedPaths, setHighlightedPaths] = (0, react_1.useState)(new Set());\n const [selectedPaths, setSelectedPaths] = (0, react_1.useState)(new Set());\n const [focusDirectory, setFocusDirectory] = (0, react_1.useState)(null);\n // Rebuild city data\n const rebuild = (0, react_1.useMemo)(() => {\n return () => {\n if (!fileSystemTree) {\n setCityData(null);\n setError('No file system tree provided');\n return;\n }\n setIsLoading(true);\n setError(null);\n try {\n // Create a single-version map for the builder\n const versionMap = new Map([['main', fileSystemTree]]);\n const { unionCity } = file_city_builder_1.MultiVersionCityBuilder.build(versionMap);\n setCityData(unionCity);\n }\n catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to build city data');\n setCityData(null);\n }\n finally {\n setIsLoading(false);\n }\n };\n }, [fileSystemTree]);\n // Auto rebuild when dependencies change\n (0, react_1.useEffect)(() => {\n if (autoUpdate) {\n rebuild();\n }\n }, [autoUpdate, rebuild]);\n return {\n cityData,\n isLoading,\n error,\n rebuild,\n setHighlightedPaths,\n setSelectedPaths,\n setFocusDirectory,\n highlightedPaths,\n selectedPaths,\n focusDirectory,\n };\n}\n","export default function cc(names) {\n if (typeof names === \"string\" || typeof names === \"number\") return \"\" + names\n\n let out = \"\"\n\n if (Array.isArray(names)) {\n for (let i = 0, tmp; i < names.length; i++) {\n if ((tmp = cc(names[i])) !== \"\") {\n out += (out && \" \") + tmp\n }\n }\n } else {\n for (let k in names) {\n if (names[k]) out += (out && \" \") + k\n }\n }\n\n return out\n}\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","/**\n * @license React\n * use-sync-external-store-shim/with-selector.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\"),\n shim = require(\"use-sync-external-store/shim\");\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 useSyncExternalStore = shim.useSyncExternalStore,\n useRef = React.useRef,\n useEffect = React.useEffect,\n useMemo = React.useMemo,\n useDebugValue = React.useDebugValue;\nexports.useSyncExternalStoreWithSelector = function (\n subscribe,\n getSnapshot,\n getServerSnapshot,\n selector,\n isEqual\n) {\n var instRef = useRef(null);\n if (null === instRef.current) {\n var inst = { hasValue: !1, value: null };\n instRef.current = inst;\n } else inst = instRef.current;\n instRef = useMemo(\n function () {\n function memoizedSelector(nextSnapshot) {\n if (!hasMemo) {\n hasMemo = !0;\n memoizedSnapshot = nextSnapshot;\n nextSnapshot = selector(nextSnapshot);\n if (void 0 !== isEqual && inst.hasValue) {\n var currentSelection = inst.value;\n if (isEqual(currentSelection, nextSnapshot))\n return (memoizedSelection = currentSelection);\n }\n return (memoizedSelection = nextSnapshot);\n }\n currentSelection = memoizedSelection;\n if (objectIs(memoizedSnapshot, nextSnapshot)) return currentSelection;\n var nextSelection = selector(nextSnapshot);\n if (void 0 !== isEqual && isEqual(currentSelection, nextSelection))\n return (memoizedSnapshot = nextSnapshot), currentSelection;\n memoizedSnapshot = nextSnapshot;\n return (memoizedSelection = nextSelection);\n }\n var hasMemo = !1,\n memoizedSnapshot,\n memoizedSelection,\n maybeGetServerSnapshot =\n void 0 === getServerSnapshot ? null : getServerSnapshot;\n return [\n function () {\n return memoizedSelector(getSnapshot());\n },\n null === maybeGetServerSnapshot\n ? void 0\n : function () {\n return memoizedSelector(maybeGetServerSnapshot());\n }\n ];\n },\n [getSnapshot, getServerSnapshot, selector, isEqual]\n );\n var value = useSyncExternalStore(subscribe, instRef[0], instRef[1]);\n useEffect(\n function () {\n inst.hasValue = !0;\n inst.value = value;\n },\n [value]\n );\n useDebugValue(value);\n return value;\n};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim/with-selector.production.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim/with-selector.development.js');\n}\n","const createStoreImpl = (createState) => {\n let state;\n const listeners = /* @__PURE__ */ new Set();\n const setState = (partial, replace) => {\n const nextState = typeof partial === \"function\" ? partial(state) : partial;\n if (!Object.is(nextState, state)) {\n const previousState = state;\n state = (replace != null ? replace : typeof nextState !== \"object\" || nextState === null) ? nextState : Object.assign({}, state, nextState);\n listeners.forEach((listener) => listener(state, previousState));\n }\n };\n const getState = () => state;\n const getInitialState = () => initialState;\n const subscribe = (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n };\n const destroy = () => {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\") {\n console.warn(\n \"[DEPRECATED] The `destroy` method will be unsupported in a future version. Instead use unsubscribe function returned by subscribe. Everything will be garbage-collected if store is garbage-collected.\"\n );\n }\n listeners.clear();\n };\n const api = { setState, getState, getInitialState, subscribe, destroy };\n const initialState = state = createState(setState, getState, api);\n return api;\n};\nconst createStore = (createState) => createState ? createStoreImpl(createState) : createStoreImpl;\nvar vanilla = (createState) => {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\") {\n console.warn(\n \"[DEPRECATED] Default export is deprecated. Instead use import { createStore } from 'zustand/vanilla'.\"\n );\n }\n return createStore(createState);\n};\n\nexport { createStore, vanilla as default };\n","import ReactExports from 'react';\nimport useSyncExternalStoreExports from 'use-sync-external-store/shim/with-selector.js';\nimport { createStore } from 'zustand/vanilla';\n\nconst { useDebugValue } = ReactExports;\nconst { useSyncExternalStoreWithSelector } = useSyncExternalStoreExports;\nconst identity = (arg) => arg;\nfunction useStoreWithEqualityFn(api, selector = identity, equalityFn) {\n const slice = useSyncExternalStoreWithSelector(\n api.subscribe,\n api.getState,\n api.getServerState || api.getInitialState,\n selector,\n equalityFn\n );\n useDebugValue(slice);\n return slice;\n}\nconst createWithEqualityFnImpl = (createState, defaultEqualityFn) => {\n const api = createStore(createState);\n const useBoundStoreWithEqualityFn = (selector, equalityFn = defaultEqualityFn) => useStoreWithEqualityFn(api, selector, equalityFn);\n Object.assign(useBoundStoreWithEqualityFn, api);\n return useBoundStoreWithEqualityFn;\n};\nconst createWithEqualityFn = (createState, defaultEqualityFn) => createState ? createWithEqualityFnImpl(createState, defaultEqualityFn) : createWithEqualityFnImpl;\n\nexport { createWithEqualityFn, useStoreWithEqualityFn };\n","function shallow$1(objA, objB) {\n if (Object.is(objA, objB)) {\n return true;\n }\n if (typeof objA !== \"object\" || objA === null || typeof objB !== \"object\" || objB === null) {\n return false;\n }\n if (objA instanceof Map && objB instanceof Map) {\n if (objA.size !== objB.size) return false;\n for (const [key, value] of objA) {\n if (!Object.is(value, objB.get(key))) {\n return false;\n }\n }\n return true;\n }\n if (objA instanceof Set && objB instanceof Set) {\n if (objA.size !== objB.size) return false;\n for (const value of objA) {\n if (!objB.has(value)) {\n return false;\n }\n }\n return true;\n }\n const keysA = Object.keys(objA);\n if (keysA.length !== Object.keys(objB).length) {\n return false;\n }\n for (const keyA of keysA) {\n if (!Object.prototype.hasOwnProperty.call(objB, keyA) || !Object.is(objA[keyA], objB[keyA])) {\n return false;\n }\n }\n return true;\n}\n\nvar shallow = (objA, objB) => {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\") {\n console.warn(\n \"[DEPRECATED] Default export is deprecated. Instead use `import { shallow } from 'zustand/shallow'`.\"\n );\n }\n return shallow$1(objA, objB);\n};\n\nexport { shallow as default, shallow$1 as shallow };\n","var noop = {value: () => {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nexport default dispatch;\n","export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: xhtml,\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n","import namespaces from \"./namespaces.js\";\n\nexport default function(name) {\n var prefix = name += \"\", i = prefix.indexOf(\":\");\n if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name; // eslint-disable-line no-prototype-builtins\n}\n","import namespace from \"./namespace.js\";\nimport {xhtml} from \"./namespaces.js\";\n\nfunction creatorInherit(name) {\n return function() {\n var document = this.ownerDocument,\n uri = this.namespaceURI;\n return uri === xhtml && document.documentElement.namespaceURI === xhtml\n ? document.createElement(name)\n : document.createElementNS(uri, name);\n };\n}\n\nfunction creatorFixed(fullname) {\n return function() {\n return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n };\n}\n\nexport default function(name) {\n var fullname = namespace(name);\n return (fullname.local\n ? creatorFixed\n : creatorInherit)(fullname);\n}\n","function none() {}\n\nexport default function(selector) {\n return selector == null ? none : function() {\n return this.querySelector(selector);\n };\n}\n","import {Selection} from \"./index.js\";\nimport selector from \"../selector.js\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","// Given something array like (or null), returns something that is strictly an\n// array. This is used to ensure that array-like objects passed to d3.selectAll\n// or selection.selectAll are converted into proper arrays when creating a\n// selection; we don’t ever want to create a selection backed by a live\n// HTMLCollection or NodeList. However, note that selection.selectAll will use a\n// static NodeList as a group, since it safely derived from querySelectorAll.\nexport default function array(x) {\n return x == null ? [] : Array.isArray(x) ? x : Array.from(x);\n}\n","function empty() {\n return [];\n}\n\nexport default function(selector) {\n return selector == null ? empty : function() {\n return this.querySelectorAll(selector);\n };\n}\n","import {Selection} from \"./index.js\";\nimport array from \"../array.js\";\nimport selectorAll from \"../selectorAll.js\";\n\nfunction arrayAll(select) {\n return function() {\n return array(select.apply(this, arguments));\n };\n}\n\nexport default function(select) {\n if (typeof select === \"function\") select = arrayAll(select);\n else select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n subgroups.push(select.call(node, node.__data__, i, group));\n parents.push(node);\n }\n }\n }\n\n return new Selection(subgroups, parents);\n}\n","export default function(selector) {\n return function() {\n return this.matches(selector);\n };\n}\n\nexport function childMatcher(selector) {\n return function(node) {\n return node.matches(selector);\n };\n}\n\n","import {childMatcher} from \"../matcher.js\";\n\nvar find = Array.prototype.find;\n\nfunction childFind(match) {\n return function() {\n return find.call(this.children, match);\n };\n}\n\nfunction childFirst() {\n return this.firstElementChild;\n}\n\nexport default function(match) {\n return this.select(match == null ? childFirst\n : childFind(typeof match === \"function\" ? match : childMatcher(match)));\n}\n","import {childMatcher} from \"../matcher.js\";\n\nvar filter = Array.prototype.filter;\n\nfunction children() {\n return Array.from(this.children);\n}\n\nfunction childrenFilter(match) {\n return function() {\n return filter.call(this.children, match);\n };\n}\n\nexport default function(match) {\n return this.selectAll(match == null ? children\n : childrenFilter(typeof match === \"function\" ? match : childMatcher(match)));\n}\n","import {Selection} from \"./index.js\";\nimport matcher from \"../matcher.js\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","export default function(update) {\n return new Array(update.length);\n}\n","import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n this.ownerDocument = parent.ownerDocument;\n this.namespaceURI = parent.namespaceURI;\n this._next = null;\n this._parent = parent;\n this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n constructor: EnterNode,\n appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n querySelector: function(selector) { return this._parent.querySelector(selector); },\n querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import {Selection} from \"./index.js\";\nimport {EnterNode} from \"./enter.js\";\nimport constant from \"../constant.js\";\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n var i = 0,\n node,\n groupLength = group.length,\n dataLength = data.length;\n\n // Put any non-null nodes that fit into update.\n // Put any null nodes into enter.\n // Put any remaining data into enter.\n for (; i < dataLength; ++i) {\n if (node = group[i]) {\n node.__data__ = data[i];\n update[i] = node;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Put any non-null nodes that don’t fit into exit.\n for (; i < groupLength; ++i) {\n if (node = group[i]) {\n exit[i] = node;\n }\n }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n var i,\n node,\n nodeByKeyValue = new Map,\n groupLength = group.length,\n dataLength = data.length,\n keyValues = new Array(groupLength),\n keyValue;\n\n // Compute the key for each node.\n // If multiple nodes have the same key, the duplicates are added to exit.\n for (i = 0; i < groupLength; ++i) {\n if (node = group[i]) {\n keyValues[i] = keyValue = key.call(node, node.__data__, i, group) + \"\";\n if (nodeByKeyValue.has(keyValue)) {\n exit[i] = node;\n } else {\n nodeByKeyValue.set(keyValue, node);\n }\n }\n }\n\n // Compute the key for each datum.\n // If there a node associated with this key, join and add it to update.\n // If there is not (or the key is a duplicate), add it to enter.\n for (i = 0; i < dataLength; ++i) {\n keyValue = key.call(parent, data[i], i, data) + \"\";\n if (node = nodeByKeyValue.get(keyValue)) {\n update[i] = node;\n node.__data__ = data[i];\n nodeByKeyValue.delete(keyValue);\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Add any remaining nodes that were not bound to data to exit.\n for (i = 0; i < groupLength; ++i) {\n if ((node = group[i]) && (nodeByKeyValue.get(keyValues[i]) === node)) {\n exit[i] = node;\n }\n }\n}\n\nfunction datum(node) {\n return node.__data__;\n}\n\nexport default function(value, key) {\n if (!arguments.length) return Array.from(this, datum);\n\n var bind = key ? bindKey : bindIndex,\n parents = this._parents,\n groups = this._groups;\n\n if (typeof value !== \"function\") value = constant(value);\n\n for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n var parent = parents[j],\n group = groups[j],\n groupLength = group.length,\n data = arraylike(value.call(parent, parent && parent.__data__, j, parents)),\n dataLength = data.length,\n enterGroup = enter[j] = new Array(dataLength),\n updateGroup = update[j] = new Array(dataLength),\n exitGroup = exit[j] = new Array(groupLength);\n\n bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n // Now connect the enter nodes to their following update node, such that\n // appendChild can insert the materialized enter node before this node,\n // rather than at the end of the parent node.\n for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n if (previous = enterGroup[i0]) {\n if (i0 >= i1) i1 = i0 + 1;\n while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n previous._next = next || null;\n }\n }\n }\n\n update = new Selection(update, parents);\n update._enter = enter;\n update._exit = exit;\n return update;\n}\n\n// Given some data, this returns an array-like view of it: an object that\n// exposes a length property and allows numeric indexing. Note that unlike\n// selectAll, this isn’t worried about “live” collections because the resulting\n// array will only be used briefly while data is being bound. (It is possible to\n// cause the data to change while iterating by using a key function, but please\n// don’t; we’d rather avoid a gratuitous copy.)\nfunction arraylike(data) {\n return typeof data === \"object\" && \"length\" in data\n ? data // Array, TypedArray, NodeList, array-like\n : Array.from(data); // Map, Set, iterable, string, or anything else\n}\n","import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n","export default function(onenter, onupdate, onexit) {\n var enter = this.enter(), update = this, exit = this.exit();\n if (typeof onenter === \"function\") {\n enter = onenter(enter);\n if (enter) enter = enter.selection();\n } else {\n enter = enter.append(onenter + \"\");\n }\n if (onupdate != null) {\n update = onupdate(update);\n if (update) update = update.selection();\n }\n if (onexit == null) exit.remove(); else onexit(exit);\n return enter && update ? enter.merge(update).order() : update;\n}\n","import {Selection} from \"./index.js\";\n\nexport default function(context) {\n var selection = context.selection ? context.selection() : context;\n\n for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Selection(merges, this._parents);\n}\n","export default function() {\n\n for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n if (node = group[i]) {\n if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n\n return this;\n}\n","import {Selection} from \"./index.js\";\n\nexport default function(compare) {\n if (!compare) compare = ascending;\n\n function compareNode(a, b) {\n return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n }\n\n for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n sortgroup[i] = node;\n }\n }\n sortgroup.sort(compareNode);\n }\n\n return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export default function() {\n var callback = arguments[0];\n arguments[0] = this;\n callback.apply(null, arguments);\n return this;\n}\n","export default function() {\n return Array.from(this);\n}\n","export default function() {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n var node = group[i];\n if (node) return node;\n }\n }\n\n return null;\n}\n","export default function() {\n let size = 0;\n for (const node of this) ++size; // eslint-disable-line no-unused-vars\n return size;\n}\n","export default function() {\n return !this.node();\n}\n","export default function(callback) {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) callback.call(node, node.__data__, i, group);\n }\n }\n\n return this;\n}\n","import namespace from \"../namespace.js\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, value) {\n return function() {\n this.setAttribute(name, value);\n };\n}\n\nfunction attrConstantNS(fullname, value) {\n return function() {\n this.setAttributeNS(fullname.space, fullname.local, value);\n };\n}\n\nfunction attrFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttribute(name);\n else this.setAttribute(name, v);\n };\n}\n\nfunction attrFunctionNS(fullname, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n else this.setAttributeNS(fullname.space, fullname.local, v);\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name);\n\n if (arguments.length < 2) {\n var node = this.node();\n return fullname.local\n ? node.getAttributeNS(fullname.space, fullname.local)\n : node.getAttribute(fullname);\n }\n\n return this.each((value == null\n ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)\n : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n","export default function(node) {\n return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n || (node.document && node) // node is a Window\n || node.defaultView; // node is a Document\n}\n","import defaultView from \"../window.js\";\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, value, priority) {\n return function() {\n this.style.setProperty(name, value, priority);\n };\n}\n\nfunction styleFunction(name, value, priority) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.style.removeProperty(name);\n else this.style.setProperty(name, v, priority);\n };\n}\n\nexport default function(name, value, priority) {\n return arguments.length > 1\n ? this.each((value == null\n ? styleRemove : typeof value === \"function\"\n ? styleFunction\n : styleConstant)(name, value, priority == null ? \"\" : priority))\n : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n return node.style.getPropertyValue(name)\n || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n","function propertyRemove(name) {\n return function() {\n delete this[name];\n };\n}\n\nfunction propertyConstant(name, value) {\n return function() {\n this[name] = value;\n };\n}\n\nfunction propertyFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) delete this[name];\n else this[name] = v;\n };\n}\n\nexport default function(name, value) {\n return arguments.length > 1\n ? this.each((value == null\n ? propertyRemove : typeof value === \"function\"\n ? propertyFunction\n : propertyConstant)(name, value))\n : this.node()[name];\n}\n","function classArray(string) {\n return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n this._node = node;\n this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n add: function(name) {\n var i = this._names.indexOf(name);\n if (i < 0) {\n this._names.push(name);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n remove: function(name) {\n var i = this._names.indexOf(name);\n if (i >= 0) {\n this._names.splice(i, 1);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n contains: function(name) {\n return this._names.indexOf(name) >= 0;\n }\n};\n\nfunction classedAdd(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n return function() {\n classedAdd(this, names);\n };\n}\n\nfunction classedFalse(names) {\n return function() {\n classedRemove(this, names);\n };\n}\n\nfunction classedFunction(names, value) {\n return function() {\n (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n };\n}\n\nexport default function(name, value) {\n var names = classArray(name + \"\");\n\n if (arguments.length < 2) {\n var list = classList(this.node()), i = -1, n = names.length;\n while (++i < n) if (!list.contains(names[i])) return false;\n return true;\n }\n\n return this.each((typeof value === \"function\"\n ? classedFunction : value\n ? classedTrue\n : classedFalse)(names, value));\n}\n","function textRemove() {\n this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? textRemove : (typeof value === \"function\"\n ? textFunction\n : textConstant)(value))\n : this.node().textContent;\n}\n","function htmlRemove() {\n this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n return function() {\n this.innerHTML = value;\n };\n}\n\nfunction htmlFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? htmlRemove : (typeof value === \"function\"\n ? htmlFunction\n : htmlConstant)(value))\n : this.node().innerHTML;\n}\n","function raise() {\n if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n return this.each(raise);\n}\n","function lower() {\n if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n return this.each(lower);\n}\n","import creator from \"../creator.js\";\n\nexport default function(name) {\n var create = typeof name === \"function\" ? name : creator(name);\n return this.select(function() {\n return this.appendChild(create.apply(this, arguments));\n });\n}\n","import creator from \"../creator.js\";\nimport selector from \"../selector.js\";\n\nfunction constantNull() {\n return null;\n}\n\nexport default function(name, before) {\n var create = typeof name === \"function\" ? name : creator(name),\n select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n return this.select(function() {\n return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n });\n}\n","function remove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n return this.each(remove);\n}\n","function selection_cloneShallow() {\n var clone = this.cloneNode(false), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nfunction selection_cloneDeep() {\n var clone = this.cloneNode(true), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nexport default function(deep) {\n return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n","export default function(value) {\n return arguments.length\n ? this.property(\"__data__\", value)\n : this.node().__data__;\n}\n","function contextListener(listener) {\n return function(event) {\n listener.call(this, event, this.__data__);\n };\n}\n\nfunction parseTypenames(typenames) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n return {type: t, name: name};\n });\n}\n\nfunction onRemove(typename) {\n return function() {\n var on = this.__on;\n if (!on) return;\n for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.options);\n } else {\n on[++i] = o;\n }\n }\n if (++i) on.length = i;\n else delete this.__on;\n };\n}\n\nfunction onAdd(typename, value, options) {\n return function() {\n var on = this.__on, o, listener = contextListener(value);\n if (on) for (var j = 0, m = on.length; j < m; ++j) {\n if ((o = on[j]).type === typename.type && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.options);\n this.addEventListener(o.type, o.listener = listener, o.options = options);\n o.value = value;\n return;\n }\n }\n this.addEventListener(typename.type, listener, options);\n o = {type: typename.type, name: typename.name, value: value, listener: listener, options: options};\n if (!on) this.__on = [o];\n else on.push(o);\n };\n}\n\nexport default function(typename, value, options) {\n var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n if (arguments.length < 2) {\n var on = this.node().__on;\n if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n for (i = 0, o = on[j]; i < n; ++i) {\n if ((t = typenames[i]).type === o.type && t.name === o.name) {\n return o.value;\n }\n }\n }\n return;\n }\n\n on = value ? onAdd : onRemove;\n for (i = 0; i < n; ++i) this.each(on(typenames[i], value, options));\n return this;\n}\n","import defaultView from \"../window.js\";\n\nfunction dispatchEvent(node, type, params) {\n var window = defaultView(node),\n event = window.CustomEvent;\n\n if (typeof event === \"function\") {\n event = new event(type, params);\n } else {\n event = window.document.createEvent(\"Event\");\n if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n else event.initEvent(type, false, false);\n }\n\n node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n return function() {\n return dispatchEvent(this, type, params);\n };\n}\n\nfunction dispatchFunction(type, params) {\n return function() {\n return dispatchEvent(this, type, params.apply(this, arguments));\n };\n}\n\nexport default function(type, params) {\n return this.each((typeof params === \"function\"\n ? dispatchFunction\n : dispatchConstant)(type, params));\n}\n","export default function*() {\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) yield node;\n }\n }\n}\n","import selection_select from \"./select.js\";\nimport selection_selectAll from \"./selectAll.js\";\nimport selection_selectChild from \"./selectChild.js\";\nimport selection_selectChildren from \"./selectChildren.js\";\nimport selection_filter from \"./filter.js\";\nimport selection_data from \"./data.js\";\nimport selection_enter from \"./enter.js\";\nimport selection_exit from \"./exit.js\";\nimport selection_join from \"./join.js\";\nimport selection_merge from \"./merge.js\";\nimport selection_order from \"./order.js\";\nimport selection_sort from \"./sort.js\";\nimport selection_call from \"./call.js\";\nimport selection_nodes from \"./nodes.js\";\nimport selection_node from \"./node.js\";\nimport selection_size from \"./size.js\";\nimport selection_empty from \"./empty.js\";\nimport selection_each from \"./each.js\";\nimport selection_attr from \"./attr.js\";\nimport selection_style from \"./style.js\";\nimport selection_property from \"./property.js\";\nimport selection_classed from \"./classed.js\";\nimport selection_text from \"./text.js\";\nimport selection_html from \"./html.js\";\nimport selection_raise from \"./raise.js\";\nimport selection_lower from \"./lower.js\";\nimport selection_append from \"./append.js\";\nimport selection_insert from \"./insert.js\";\nimport selection_remove from \"./remove.js\";\nimport selection_clone from \"./clone.js\";\nimport selection_datum from \"./datum.js\";\nimport selection_on from \"./on.js\";\nimport selection_dispatch from \"./dispatch.js\";\nimport selection_iterator from \"./iterator.js\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n this._groups = groups;\n this._parents = parents;\n}\n\nfunction selection() {\n return new Selection([[document.documentElement]], root);\n}\n\nfunction selection_selection() {\n return this;\n}\n\nSelection.prototype = selection.prototype = {\n constructor: Selection,\n select: selection_select,\n selectAll: selection_selectAll,\n selectChild: selection_selectChild,\n selectChildren: selection_selectChildren,\n filter: selection_filter,\n data: selection_data,\n enter: selection_enter,\n exit: selection_exit,\n join: selection_join,\n merge: selection_merge,\n selection: selection_selection,\n order: selection_order,\n sort: selection_sort,\n call: selection_call,\n nodes: selection_nodes,\n node: selection_node,\n size: selection_size,\n empty: selection_empty,\n each: selection_each,\n attr: selection_attr,\n style: selection_style,\n property: selection_property,\n classed: selection_classed,\n text: selection_text,\n html: selection_html,\n raise: selection_raise,\n lower: selection_lower,\n append: selection_append,\n insert: selection_insert,\n remove: selection_remove,\n clone: selection_clone,\n datum: selection_datum,\n on: selection_on,\n dispatch: selection_dispatch,\n [Symbol.iterator]: selection_iterator\n};\n\nexport default selection;\n","import {Selection, root} from \"./selection/index.js\";\n\nexport default function(selector) {\n return typeof selector === \"string\"\n ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n : new Selection([[selector]], root);\n}\n","export default function(event) {\n let sourceEvent;\n while (sourceEvent = event.sourceEvent) event = sourceEvent;\n return event;\n}\n","import sourceEvent from \"./sourceEvent.js\";\n\nexport default function(event, node) {\n event = sourceEvent(event);\n if (node === undefined) node = event.currentTarget;\n if (node) {\n var svg = node.ownerSVGElement || node;\n if (svg.createSVGPoint) {\n var point = svg.createSVGPoint();\n point.x = event.clientX, point.y = event.clientY;\n point = point.matrixTransform(node.getScreenCTM().inverse());\n return [point.x, point.y];\n }\n if (node.getBoundingClientRect) {\n var rect = node.getBoundingClientRect();\n return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n }\n }\n return [event.pageX, event.pageY];\n}\n","// These are typically used in conjunction with noevent to ensure that we can\n// preventDefault on the event.\nexport const nonpassive = {passive: false};\nexport const nonpassivecapture = {capture: true, passive: false};\n\nexport function nopropagation(event) {\n event.stopImmediatePropagation();\n}\n\nexport default function(event) {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n","import {select} from \"d3-selection\";\nimport noevent, {nonpassivecapture} from \"./noevent.js\";\n\nexport default function(view) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", noevent, nonpassivecapture);\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", noevent, nonpassivecapture);\n } else {\n root.__noselect = root.style.MozUserSelect;\n root.style.MozUserSelect = \"none\";\n }\n}\n\nexport function yesdrag(view, noclick) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", null);\n if (noclick) {\n selection.on(\"click.drag\", noevent, nonpassivecapture);\n setTimeout(function() { selection.on(\"click.drag\", null); }, 0);\n }\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", null);\n } else {\n root.style.MozUserSelect = root.__noselect;\n delete root.__noselect;\n }\n}\n","export default x => () => x;\n","export default function DragEvent(type, {\n sourceEvent,\n subject,\n target,\n identifier,\n active,\n x, y, dx, dy,\n dispatch\n}) {\n Object.defineProperties(this, {\n type: {value: type, enumerable: true, configurable: true},\n sourceEvent: {value: sourceEvent, enumerable: true, configurable: true},\n subject: {value: subject, enumerable: true, configurable: true},\n target: {value: target, enumerable: true, configurable: true},\n identifier: {value: identifier, enumerable: true, configurable: true},\n active: {value: active, enumerable: true, configurable: true},\n x: {value: x, enumerable: true, configurable: true},\n y: {value: y, enumerable: true, configurable: true},\n dx: {value: dx, enumerable: true, configurable: true},\n dy: {value: dy, enumerable: true, configurable: true},\n _: {value: dispatch}\n });\n}\n\nDragEvent.prototype.on = function() {\n var value = this._.on.apply(this._, arguments);\n return value === this._ ? this : value;\n};\n","import {dispatch} from \"d3-dispatch\";\nimport {select, pointer} from \"d3-selection\";\nimport nodrag, {yesdrag} from \"./nodrag.js\";\nimport noevent, {nonpassive, nonpassivecapture, nopropagation} from \"./noevent.js\";\nimport constant from \"./constant.js\";\nimport DragEvent from \"./event.js\";\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter(event) {\n return !event.ctrlKey && !event.button;\n}\n\nfunction defaultContainer() {\n return this.parentNode;\n}\n\nfunction defaultSubject(event, d) {\n return d == null ? {x: event.x, y: event.y} : d;\n}\n\nfunction defaultTouchable() {\n return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\nexport default function() {\n var filter = defaultFilter,\n container = defaultContainer,\n subject = defaultSubject,\n touchable = defaultTouchable,\n gestures = {},\n listeners = dispatch(\"start\", \"drag\", \"end\"),\n active = 0,\n mousedownx,\n mousedowny,\n mousemoving,\n touchending,\n clickDistance2 = 0;\n\n function drag(selection) {\n selection\n .on(\"mousedown.drag\", mousedowned)\n .filter(touchable)\n .on(\"touchstart.drag\", touchstarted)\n .on(\"touchmove.drag\", touchmoved, nonpassive)\n .on(\"touchend.drag touchcancel.drag\", touchended)\n .style(\"touch-action\", \"none\")\n .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n }\n\n function mousedowned(event, d) {\n if (touchending || !filter.call(this, event, d)) return;\n var gesture = beforestart(this, container.call(this, event, d), event, d, \"mouse\");\n if (!gesture) return;\n select(event.view)\n .on(\"mousemove.drag\", mousemoved, nonpassivecapture)\n .on(\"mouseup.drag\", mouseupped, nonpassivecapture);\n nodrag(event.view);\n nopropagation(event);\n mousemoving = false;\n mousedownx = event.clientX;\n mousedowny = event.clientY;\n gesture(\"start\", event);\n }\n\n function mousemoved(event) {\n noevent(event);\n if (!mousemoving) {\n var dx = event.clientX - mousedownx, dy = event.clientY - mousedowny;\n mousemoving = dx * dx + dy * dy > clickDistance2;\n }\n gestures.mouse(\"drag\", event);\n }\n\n function mouseupped(event) {\n select(event.view).on(\"mousemove.drag mouseup.drag\", null);\n yesdrag(event.view, mousemoving);\n noevent(event);\n gestures.mouse(\"end\", event);\n }\n\n function touchstarted(event, d) {\n if (!filter.call(this, event, d)) return;\n var touches = event.changedTouches,\n c = container.call(this, event, d),\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = beforestart(this, c, event, d, touches[i].identifier, touches[i])) {\n nopropagation(event);\n gesture(\"start\", event, touches[i]);\n }\n }\n }\n\n function touchmoved(event) {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n noevent(event);\n gesture(\"drag\", event, touches[i]);\n }\n }\n }\n\n function touchended(event) {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n nopropagation(event);\n gesture(\"end\", event, touches[i]);\n }\n }\n }\n\n function beforestart(that, container, event, d, identifier, touch) {\n var dispatch = listeners.copy(),\n p = pointer(touch || event, container), dx, dy,\n s;\n\n if ((s = subject.call(that, new DragEvent(\"beforestart\", {\n sourceEvent: event,\n target: drag,\n identifier,\n active,\n x: p[0],\n y: p[1],\n dx: 0,\n dy: 0,\n dispatch\n }), d)) == null) return;\n\n dx = s.x - p[0] || 0;\n dy = s.y - p[1] || 0;\n\n return function gesture(type, event, touch) {\n var p0 = p, n;\n switch (type) {\n case \"start\": gestures[identifier] = gesture, n = active++; break;\n case \"end\": delete gestures[identifier], --active; // falls through\n case \"drag\": p = pointer(touch || event, container), n = active; break;\n }\n dispatch.call(\n type,\n that,\n new DragEvent(type, {\n sourceEvent: event,\n subject: s,\n target: drag,\n identifier,\n active: n,\n x: p[0] + dx,\n y: p[1] + dy,\n dx: p[0] - p0[0],\n dy: p[1] - p0[1],\n dispatch\n }),\n d\n );\n };\n }\n\n drag.filter = function(_) {\n return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), drag) : filter;\n };\n\n drag.container = function(_) {\n return arguments.length ? (container = typeof _ === \"function\" ? _ : constant(_), drag) : container;\n };\n\n drag.subject = function(_) {\n return arguments.length ? (subject = typeof _ === \"function\" ? _ : constant(_), drag) : subject;\n };\n\n drag.touchable = function(_) {\n return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), drag) : touchable;\n };\n\n drag.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? drag : value;\n };\n\n drag.clickDistance = function(_) {\n return arguments.length ? (clickDistance2 = (_ = +_) * _, drag) : Math.sqrt(clickDistance2);\n };\n\n return drag;\n}\n","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp(`^rgb\\\\(${reI},${reI},${reI}\\\\)$`),\n reRgbPercent = new RegExp(`^rgb\\\\(${reP},${reP},${reP}\\\\)$`),\n reRgbaInteger = new RegExp(`^rgba\\\\(${reI},${reI},${reI},${reN}\\\\)$`),\n reRgbaPercent = new RegExp(`^rgba\\\\(${reP},${reP},${reP},${reN}\\\\)$`),\n reHslPercent = new RegExp(`^hsl\\\\(${reN},${reP},${reP}\\\\)$`),\n reHslaPercent = new RegExp(`^hsla\\\\(${reN},${reP},${reP},${reN}\\\\)$`);\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n copy(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHex8: color_formatHex8,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHex8() {\n return this.rgb().formatHex8();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n var m, l;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n : null) // invalid hex\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb() {\n return this;\n },\n clamp() {\n return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity));\n },\n displayable() {\n return (-0.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatHex8: rgb_formatHex8,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}`;\n}\n\nfunction rgb_formatHex8() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity) ? 1 : this.opacity) * 255)}`;\n}\n\nfunction rgb_formatRgb() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"rgb(\" : \"rgba(\"}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${a === 1 ? \")\" : `, ${a})`}`;\n}\n\nfunction clampa(opacity) {\n return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity));\n}\n\nfunction clampi(value) {\n return Math.max(0, Math.min(255, Math.round(value) || 0));\n}\n\nfunction hex(value) {\n value = clampi(value);\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n clamp() {\n return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity));\n },\n displayable() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n formatHsl() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"hsl(\" : \"hsla(\"}${clamph(this.h)}, ${clampt(this.s) * 100}%, ${clampt(this.l) * 100}%${a === 1 ? \")\" : `, ${a})`}`;\n }\n}));\n\nfunction clamph(value) {\n value = (value || 0) % 360;\n return value < 0 ? value + 360 : value;\n}\n\nfunction clampt(value) {\n return Math.max(0, Math.min(1, value || 0));\n}\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n","export default x => () => x;\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return a * (1 - t) + b * t;\n };\n}\n","import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n","import decompose, {identity} from \"./decompose.js\";\n\nvar svgNode;\n\n/* eslint-disable no-undef */\nexport function parseCss(value) {\n const m = new (typeof DOMMatrix === \"function\" ? DOMMatrix : WebKitCSSMatrix)(value + \"\");\n return m.isIdentity ? identity : decompose(m.a, m.b, m.c, m.d, m.e, m.f);\n}\n\nexport function parseSvg(value) {\n if (value == null) return identity;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","import number from \"../number.js\";\nimport {parseCss, parseSvg} from \"./parse.js\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function(a, b) {\n var s = [], // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","var epsilon2 = 1e-12;\n\nfunction cosh(x) {\n return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\nexport default (function zoomRho(rho, rho2, rho4) {\n\n // p0 = [ux0, uy0, w0]\n // p1 = [ux1, uy1, w1]\n function zoom(p0, p1) {\n var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n dx = ux1 - ux0,\n dy = uy1 - uy0,\n d2 = dx * dx + dy * dy,\n i,\n S;\n\n // Special case for u0 ≅ u1.\n if (d2 < epsilon2) {\n S = Math.log(w1 / w0) / rho;\n i = function(t) {\n return [\n ux0 + t * dx,\n uy0 + t * dy,\n w0 * Math.exp(rho * t * S)\n ];\n }\n }\n\n // General case.\n else {\n var d1 = Math.sqrt(d2),\n b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n S = (r1 - r0) / rho;\n i = function(t) {\n var s = t * S,\n coshr0 = cosh(r0),\n u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n return [\n ux0 + u * dx,\n uy0 + u * dy,\n w0 * coshr0 / cosh(rho * s + r0)\n ];\n }\n }\n\n i.duration = S * 1000 * rho / Math.SQRT2;\n\n return i;\n }\n\n zoom.rho = function(_) {\n var _1 = Math.max(1e-3, +_), _2 = _1 * _1, _4 = _2 * _2;\n return zoomRho(_1, _2, _4);\n };\n\n return zoom;\n})(Math.SQRT2, 2, 4);\n","var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(undefined, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n","import {Timer} from \"./timer.js\";\n\nexport default function(callback, delay, time) {\n var t = new Timer;\n delay = delay == null ? 0 : +delay;\n t.restart(elapsed => {\n t.stop();\n callback(elapsed + delay);\n }, delay, time);\n return t;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer, timeout} from \"d3-timer\";\n\nvar emptyOn = dispatch(\"start\", \"end\", \"cancel\", \"interrupt\");\nvar emptyTween = [];\n\nexport var CREATED = 0;\nexport var SCHEDULED = 1;\nexport var STARTING = 2;\nexport var STARTED = 3;\nexport var RUNNING = 4;\nexport var ENDING = 5;\nexport var ENDED = 6;\n\nexport default function(node, name, id, index, group, timing) {\n var schedules = node.__transition;\n if (!schedules) node.__transition = {};\n else if (id in schedules) return;\n create(node, id, {\n name: name,\n index: index, // For context during callback.\n group: group, // For context during callback.\n on: emptyOn,\n tween: emptyTween,\n time: timing.time,\n delay: timing.delay,\n duration: timing.duration,\n ease: timing.ease,\n timer: null,\n state: CREATED\n });\n}\n\nexport function init(node, id) {\n var schedule = get(node, id);\n if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n return schedule;\n}\n\nexport function set(node, id) {\n var schedule = get(node, id);\n if (schedule.state > STARTED) throw new Error(\"too late; already running\");\n return schedule;\n}\n\nexport function get(node, id) {\n var schedule = node.__transition;\n if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n return schedule;\n}\n\nfunction create(node, id, self) {\n var schedules = node.__transition,\n tween;\n\n // Initialize the self timer when the transition is created.\n // Note the actual delay is not known until the first callback!\n schedules[id] = self;\n self.timer = timer(schedule, 0, self.time);\n\n function schedule(elapsed) {\n self.state = SCHEDULED;\n self.timer.restart(start, self.delay, self.time);\n\n // If the elapsed delay is less than our first sleep, start immediately.\n if (self.delay <= elapsed) start(elapsed - self.delay);\n }\n\n function start(elapsed) {\n var i, j, n, o;\n\n // If the state is not SCHEDULED, then we previously errored on start.\n if (self.state !== SCHEDULED) return stop();\n\n for (i in schedules) {\n o = schedules[i];\n if (o.name !== self.name) continue;\n\n // While this element already has a starting transition during this frame,\n // defer starting an interrupting transition until that transition has a\n // chance to tick (and possibly end); see d3/d3-transition#54!\n if (o.state === STARTED) return timeout(start);\n\n // Interrupt the active transition, if any.\n if (o.state === RUNNING) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n\n // Cancel any pre-empted transitions.\n else if (+i < id) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"cancel\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n }\n\n // Defer the first tick to end of the current frame; see d3/d3#1576.\n // Note the transition may be canceled after start and before the first tick!\n // Note this must be scheduled before the start event; see d3/d3-transition#16!\n // Assuming this is successful, subsequent callbacks go straight to tick.\n timeout(function() {\n if (self.state === STARTED) {\n self.state = RUNNING;\n self.timer.restart(tick, self.delay, self.time);\n tick(elapsed);\n }\n });\n\n // Dispatch the start event.\n // Note this must be done before the tween are initialized.\n self.state = STARTING;\n self.on.call(\"start\", node, node.__data__, self.index, self.group);\n if (self.state !== STARTING) return; // interrupted\n self.state = STARTED;\n\n // Initialize the tween, deleting null tween.\n tween = new Array(n = self.tween.length);\n for (i = 0, j = -1; i < n; ++i) {\n if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n tween[++j] = o;\n }\n }\n tween.length = j + 1;\n }\n\n function tick(elapsed) {\n var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n i = -1,\n n = tween.length;\n\n while (++i < n) {\n tween[i].call(node, t);\n }\n\n // Dispatch the end event.\n if (self.state === ENDING) {\n self.on.call(\"end\", node, node.__data__, self.index, self.group);\n stop();\n }\n }\n\n function stop() {\n self.state = ENDED;\n self.timer.stop();\n delete schedules[id];\n for (var i in schedules) return; // eslint-disable-line no-unused-vars\n delete node.__transition;\n }\n}\n","import {STARTING, ENDING, ENDED} from \"./transition/schedule.js\";\n\nexport default function(node, name) {\n var schedules = node.__transition,\n schedule,\n active,\n empty = true,\n i;\n\n if (!schedules) return;\n\n name = name == null ? null : name + \"\";\n\n for (i in schedules) {\n if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n active = schedule.state > STARTING && schedule.state < ENDING;\n schedule.state = ENDED;\n schedule.timer.stop();\n schedule.on.call(active ? \"interrupt\" : \"cancel\", node, node.__data__, schedule.index, schedule.group);\n delete schedules[i];\n }\n\n if (empty) delete node.__transition;\n}\n","import interrupt from \"../interrupt.js\";\n\nexport default function(name) {\n return this.each(function() {\n interrupt(this, name);\n });\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction tweenRemove(id, name) {\n var tween0, tween1;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = tween0 = tween;\n for (var i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1 = tween1.slice();\n tween1.splice(i, 1);\n break;\n }\n }\n }\n\n schedule.tween = tween1;\n };\n}\n\nfunction tweenFunction(id, name, value) {\n var tween0, tween1;\n if (typeof value !== \"function\") throw new Error;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = (tween0 = tween).slice();\n for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1[i] = t;\n break;\n }\n }\n if (i === n) tween1.push(t);\n }\n\n schedule.tween = tween1;\n };\n}\n\nexport default function(name, value) {\n var id = this._id;\n\n name += \"\";\n\n if (arguments.length < 2) {\n var tween = get(this.node(), id).tween;\n for (var i = 0, n = tween.length, t; i < n; ++i) {\n if ((t = tween[i]).name === name) {\n return t.value;\n }\n }\n return null;\n }\n\n return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nexport function tweenValue(transition, name, value) {\n var id = transition._id;\n\n transition.each(function() {\n var schedule = set(this, id);\n (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n });\n\n return function(node) {\n return get(node, id).value[name];\n };\n}\n","import {color} from \"d3-color\";\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\n\nexport default function(a, b) {\n var c;\n return (typeof b === \"number\" ? interpolateNumber\n : b instanceof color ? interpolateRgb\n : (c = color(b)) ? (b = c, interpolateRgb)\n : interpolateString)(a, b);\n}\n","import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttribute(name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttributeNS(fullname.space, fullname.local);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttribute(name);\n string0 = this.getAttribute(name);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n string0 = this.getAttributeNS(fullname.space, fullname.local);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\n return this.attrTween(name, typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value));\n}\n","import {namespace} from \"d3-selection\";\n\nfunction attrInterpolate(name, i) {\n return function(t) {\n this.setAttribute(name, i.call(this, t));\n };\n}\n\nfunction attrInterpolateNS(fullname, i) {\n return function(t) {\n this.setAttributeNS(fullname.space, fullname.local, i.call(this, t));\n };\n}\n\nfunction attrTweenNS(fullname, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nfunction attrTween(name, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value) {\n var key = \"attr.\" + name;\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n var fullname = namespace(name);\n return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n","import {get, init} from \"./schedule.js\";\n\nfunction delayFunction(id, value) {\n return function() {\n init(this, id).delay = +value.apply(this, arguments);\n };\n}\n\nfunction delayConstant(id, value) {\n return value = +value, function() {\n init(this, id).delay = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? delayFunction\n : delayConstant)(id, value))\n : get(this.node(), id).delay;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction durationFunction(id, value) {\n return function() {\n set(this, id).duration = +value.apply(this, arguments);\n };\n}\n\nfunction durationConstant(id, value) {\n return value = +value, function() {\n set(this, id).duration = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? durationFunction\n : durationConstant)(id, value))\n : get(this.node(), id).duration;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction easeConstant(id, value) {\n if (typeof value !== \"function\") throw new Error;\n return function() {\n set(this, id).ease = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each(easeConstant(id, value))\n : get(this.node(), id).ease;\n}\n","import {set} from \"./schedule.js\";\n\nfunction easeVarying(id, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (typeof v !== \"function\") throw new Error;\n set(this, id).ease = v;\n };\n}\n\nexport default function(value) {\n if (typeof value !== \"function\") throw new Error;\n return this.each(easeVarying(this._id, value));\n}\n","import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Transition(subgroups, this._parents, this._name, this._id);\n}\n","import {Transition} from \"./index.js\";\n\nexport default function(transition) {\n if (transition._id !== this._id) throw new Error;\n\n for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Transition(merges, this._parents, this._name, this._id);\n}\n","import {get, set, init} from \"./schedule.js\";\n\nfunction start(name) {\n return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n var i = t.indexOf(\".\");\n if (i >= 0) t = t.slice(0, i);\n return !t || t === \"start\";\n });\n}\n\nfunction onFunction(id, name, listener) {\n var on0, on1, sit = start(name) ? init : set;\n return function() {\n var schedule = sit(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, listener) {\n var id = this._id;\n\n return arguments.length < 2\n ? get(this.node(), id).on.on(name)\n : this.each(onFunction(id, name, listener));\n}\n","function removeFunction(id) {\n return function() {\n var parent = this.parentNode;\n for (var i in this.__transition) if (+i !== id) return;\n if (parent) parent.removeChild(this);\n };\n}\n\nexport default function() {\n return this.on(\"end.remove\", removeFunction(this._id));\n}\n","import {selector} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n }\n }\n }\n\n return new Transition(subgroups, this._parents, name, id);\n}\n","import {selectorAll} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n if (child = children[k]) {\n schedule(child, name, id, k, children, inherit);\n }\n }\n subgroups.push(children);\n parents.push(node);\n }\n }\n }\n\n return new Transition(subgroups, parents, name, id);\n}\n","import {selection} from \"d3-selection\";\n\nvar Selection = selection.prototype.constructor;\n\nexport default function() {\n return new Selection(this._groups, this._parents);\n}\n","import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {set} from \"./schedule.js\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction styleNull(name, interpolate) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n string1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, string10 = string1);\n };\n}\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = style(this, name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction styleFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n value1 = value(this),\n string1 = value1 + \"\";\n if (value1 == null) string1 = value1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction styleMaybeRemove(id, name) {\n var on0, on1, listener0, key = \"style.\" + name, event = \"end.\" + key, remove;\n return function() {\n var schedule = set(this, id),\n on = schedule.on,\n listener = schedule.value[key] == null ? remove || (remove = styleRemove(name)) : undefined;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, value, priority) {\n var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n return value == null ? this\n .styleTween(name, styleNull(name, i))\n .on(\"end.style.\" + name, styleRemove(name))\n : typeof value === \"function\" ? this\n .styleTween(name, styleFunction(name, i, tweenValue(this, \"style.\" + name, value)))\n .each(styleMaybeRemove(this._id, name))\n : this\n .styleTween(name, styleConstant(name, i, value), priority)\n .on(\"end.style.\" + name, null);\n}\n","function styleInterpolate(name, i, priority) {\n return function(t) {\n this.style.setProperty(name, i.call(this, t), priority);\n };\n}\n\nfunction styleTween(name, value, priority) {\n var t, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);\n return t;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value, priority) {\n var key = \"style.\" + (name += \"\");\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n","import {tweenValue} from \"./tween.js\";\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var value1 = value(this);\n this.textContent = value1 == null ? \"\" : value1;\n };\n}\n\nexport default function(value) {\n return this.tween(\"text\", typeof value === \"function\"\n ? textFunction(tweenValue(this, \"text\", value))\n : textConstant(value == null ? \"\" : value + \"\"));\n}\n","function textInterpolate(i) {\n return function(t) {\n this.textContent = i.call(this, t);\n };\n}\n\nfunction textTween(value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && textInterpolate(i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(value) {\n var key = \"text\";\n if (arguments.length < 1) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, textTween(value));\n}\n","import {Transition, newId} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function() {\n var name = this._name,\n id0 = this._id,\n id1 = newId();\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n var inherit = get(node, id0);\n schedule(node, name, id1, i, group, {\n time: inherit.time + inherit.delay + inherit.duration,\n delay: 0,\n duration: inherit.duration,\n ease: inherit.ease\n });\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id1);\n}\n","import {set} from \"./schedule.js\";\n\nexport default function() {\n var on0, on1, that = this, id = that._id, size = that.size();\n return new Promise(function(resolve, reject) {\n var cancel = {value: reject},\n end = {value: function() { if (--size === 0) resolve(); }};\n\n that.each(function() {\n var schedule = set(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) {\n on1 = (on0 = on).copy();\n on1._.cancel.push(cancel);\n on1._.interrupt.push(cancel);\n on1._.end.push(end);\n }\n\n schedule.on = on1;\n });\n\n // The selection was empty, resolve end immediately\n if (size === 0) resolve();\n });\n}\n","import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr.js\";\nimport transition_attrTween from \"./attrTween.js\";\nimport transition_delay from \"./delay.js\";\nimport transition_duration from \"./duration.js\";\nimport transition_ease from \"./ease.js\";\nimport transition_easeVarying from \"./easeVarying.js\";\nimport transition_filter from \"./filter.js\";\nimport transition_merge from \"./merge.js\";\nimport transition_on from \"./on.js\";\nimport transition_remove from \"./remove.js\";\nimport transition_select from \"./select.js\";\nimport transition_selectAll from \"./selectAll.js\";\nimport transition_selection from \"./selection.js\";\nimport transition_style from \"./style.js\";\nimport transition_styleTween from \"./styleTween.js\";\nimport transition_text from \"./text.js\";\nimport transition_textTween from \"./textTween.js\";\nimport transition_transition from \"./transition.js\";\nimport transition_tween from \"./tween.js\";\nimport transition_end from \"./end.js\";\n\nvar id = 0;\n\nexport function Transition(groups, parents, name, id) {\n this._groups = groups;\n this._parents = parents;\n this._name = name;\n this._id = id;\n}\n\nexport default function transition(name) {\n return selection().transition(name);\n}\n\nexport function newId() {\n return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n constructor: Transition,\n select: transition_select,\n selectAll: transition_selectAll,\n selectChild: selection_prototype.selectChild,\n selectChildren: selection_prototype.selectChildren,\n filter: transition_filter,\n merge: transition_merge,\n selection: transition_selection,\n transition: transition_transition,\n call: selection_prototype.call,\n nodes: selection_prototype.nodes,\n node: selection_prototype.node,\n size: selection_prototype.size,\n empty: selection_prototype.empty,\n each: selection_prototype.each,\n on: transition_on,\n attr: transition_attr,\n attrTween: transition_attrTween,\n style: transition_style,\n styleTween: transition_styleTween,\n text: transition_text,\n textTween: transition_textTween,\n remove: transition_remove,\n tween: transition_tween,\n delay: transition_delay,\n duration: transition_duration,\n ease: transition_ease,\n easeVarying: transition_easeVarying,\n end: transition_end,\n [Symbol.iterator]: selection_prototype[Symbol.iterator]\n};\n","export function cubicIn(t) {\n return t * t * t;\n}\n\nexport function cubicOut(t) {\n return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n","import {Transition, newId} from \"../transition/index.js\";\nimport schedule from \"../transition/schedule.js\";\nimport {easeCubicInOut} from \"d3-ease\";\nimport {now} from \"d3-timer\";\n\nvar defaultTiming = {\n time: null, // Set on use.\n delay: 0,\n duration: 250,\n ease: easeCubicInOut\n};\n\nfunction inherit(node, id) {\n var timing;\n while (!(timing = node.__transition) || !(timing = timing[id])) {\n if (!(node = node.parentNode)) {\n throw new Error(`transition ${id} not found`);\n }\n }\n return timing;\n}\n\nexport default function(name) {\n var id,\n timing;\n\n if (name instanceof Transition) {\n id = name._id, name = name._name;\n } else {\n id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n }\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n schedule(node, name, id, i, group, timing || inherit(node, id));\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id);\n}\n","import {selection} from \"d3-selection\";\nimport selection_interrupt from \"./interrupt.js\";\nimport selection_transition from \"./transition.js\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n","export default x => () => x;\n","export default function ZoomEvent(type, {\n sourceEvent,\n target,\n transform,\n dispatch\n}) {\n Object.defineProperties(this, {\n type: {value: type, enumerable: true, configurable: true},\n sourceEvent: {value: sourceEvent, enumerable: true, configurable: true},\n target: {value: target, enumerable: true, configurable: true},\n transform: {value: transform, enumerable: true, configurable: true},\n _: {value: dispatch}\n });\n}\n","export function Transform(k, x, y) {\n this.k = k;\n this.x = x;\n this.y = y;\n}\n\nTransform.prototype = {\n constructor: Transform,\n scale: function(k) {\n return k === 1 ? this : new Transform(this.k * k, this.x, this.y);\n },\n translate: function(x, y) {\n return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y);\n },\n apply: function(point) {\n return [point[0] * this.k + this.x, point[1] * this.k + this.y];\n },\n applyX: function(x) {\n return x * this.k + this.x;\n },\n applyY: function(y) {\n return y * this.k + this.y;\n },\n invert: function(location) {\n return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];\n },\n invertX: function(x) {\n return (x - this.x) / this.k;\n },\n invertY: function(y) {\n return (y - this.y) / this.k;\n },\n rescaleX: function(x) {\n return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));\n },\n rescaleY: function(y) {\n return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));\n },\n toString: function() {\n return \"translate(\" + this.x + \",\" + this.y + \") scale(\" + this.k + \")\";\n }\n};\n\nexport var identity = new Transform(1, 0, 0);\n\ntransform.prototype = Transform.prototype;\n\nexport default function transform(node) {\n while (!node.__zoom) if (!(node = node.parentNode)) return identity;\n return node.__zoom;\n}\n","export function nopropagation(event) {\n event.stopImmediatePropagation();\n}\n\nexport default function(event) {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {dragDisable, dragEnable} from \"d3-drag\";\nimport {interpolateZoom} from \"d3-interpolate\";\nimport {select, pointer} from \"d3-selection\";\nimport {interrupt} from \"d3-transition\";\nimport constant from \"./constant.js\";\nimport ZoomEvent from \"./event.js\";\nimport {Transform, identity} from \"./transform.js\";\nimport noevent, {nopropagation} from \"./noevent.js\";\n\n// Ignore right-click, since that should open the context menu.\n// except for pinch-to-zoom, which is sent as a wheel+ctrlKey event\nfunction defaultFilter(event) {\n return (!event.ctrlKey || event.type === 'wheel') && !event.button;\n}\n\nfunction defaultExtent() {\n var e = this;\n if (e instanceof SVGElement) {\n e = e.ownerSVGElement || e;\n if (e.hasAttribute(\"viewBox\")) {\n e = e.viewBox.baseVal;\n return [[e.x, e.y], [e.x + e.width, e.y + e.height]];\n }\n return [[0, 0], [e.width.baseVal.value, e.height.baseVal.value]];\n }\n return [[0, 0], [e.clientWidth, e.clientHeight]];\n}\n\nfunction defaultTransform() {\n return this.__zoom || identity;\n}\n\nfunction defaultWheelDelta(event) {\n return -event.deltaY * (event.deltaMode === 1 ? 0.05 : event.deltaMode ? 1 : 0.002) * (event.ctrlKey ? 10 : 1);\n}\n\nfunction defaultTouchable() {\n return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\nfunction defaultConstrain(transform, extent, translateExtent) {\n var dx0 = transform.invertX(extent[0][0]) - translateExtent[0][0],\n dx1 = transform.invertX(extent[1][0]) - translateExtent[1][0],\n dy0 = transform.invertY(extent[0][1]) - translateExtent[0][1],\n dy1 = transform.invertY(extent[1][1]) - translateExtent[1][1];\n return transform.translate(\n dx1 > dx0 ? (dx0 + dx1) / 2 : Math.min(0, dx0) || Math.max(0, dx1),\n dy1 > dy0 ? (dy0 + dy1) / 2 : Math.min(0, dy0) || Math.max(0, dy1)\n );\n}\n\nexport default function() {\n var filter = defaultFilter,\n extent = defaultExtent,\n constrain = defaultConstrain,\n wheelDelta = defaultWheelDelta,\n touchable = defaultTouchable,\n scaleExtent = [0, Infinity],\n translateExtent = [[-Infinity, -Infinity], [Infinity, Infinity]],\n duration = 250,\n interpolate = interpolateZoom,\n listeners = dispatch(\"start\", \"zoom\", \"end\"),\n touchstarting,\n touchfirst,\n touchending,\n touchDelay = 500,\n wheelDelay = 150,\n clickDistance2 = 0,\n tapDistance = 10;\n\n function zoom(selection) {\n selection\n .property(\"__zoom\", defaultTransform)\n .on(\"wheel.zoom\", wheeled, {passive: false})\n .on(\"mousedown.zoom\", mousedowned)\n .on(\"dblclick.zoom\", dblclicked)\n .filter(touchable)\n .on(\"touchstart.zoom\", touchstarted)\n .on(\"touchmove.zoom\", touchmoved)\n .on(\"touchend.zoom touchcancel.zoom\", touchended)\n .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n }\n\n zoom.transform = function(collection, transform, point, event) {\n var selection = collection.selection ? collection.selection() : collection;\n selection.property(\"__zoom\", defaultTransform);\n if (collection !== selection) {\n schedule(collection, transform, point, event);\n } else {\n selection.interrupt().each(function() {\n gesture(this, arguments)\n .event(event)\n .start()\n .zoom(null, typeof transform === \"function\" ? transform.apply(this, arguments) : transform)\n .end();\n });\n }\n };\n\n zoom.scaleBy = function(selection, k, p, event) {\n zoom.scaleTo(selection, function() {\n var k0 = this.__zoom.k,\n k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\n return k0 * k1;\n }, p, event);\n };\n\n zoom.scaleTo = function(selection, k, p, event) {\n zoom.transform(selection, function() {\n var e = extent.apply(this, arguments),\n t0 = this.__zoom,\n p0 = p == null ? centroid(e) : typeof p === \"function\" ? p.apply(this, arguments) : p,\n p1 = t0.invert(p0),\n k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\n return constrain(translate(scale(t0, k1), p0, p1), e, translateExtent);\n }, p, event);\n };\n\n zoom.translateBy = function(selection, x, y, event) {\n zoom.transform(selection, function() {\n return constrain(this.__zoom.translate(\n typeof x === \"function\" ? x.apply(this, arguments) : x,\n typeof y === \"function\" ? y.apply(this, arguments) : y\n ), extent.apply(this, arguments), translateExtent);\n }, null, event);\n };\n\n zoom.translateTo = function(selection, x, y, p, event) {\n zoom.transform(selection, function() {\n var e = extent.apply(this, arguments),\n t = this.__zoom,\n p0 = p == null ? centroid(e) : typeof p === \"function\" ? p.apply(this, arguments) : p;\n return constrain(identity.translate(p0[0], p0[1]).scale(t.k).translate(\n typeof x === \"function\" ? -x.apply(this, arguments) : -x,\n typeof y === \"function\" ? -y.apply(this, arguments) : -y\n ), e, translateExtent);\n }, p, event);\n };\n\n function scale(transform, k) {\n k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], k));\n return k === transform.k ? transform : new Transform(k, transform.x, transform.y);\n }\n\n function translate(transform, p0, p1) {\n var x = p0[0] - p1[0] * transform.k, y = p0[1] - p1[1] * transform.k;\n return x === transform.x && y === transform.y ? transform : new Transform(transform.k, x, y);\n }\n\n function centroid(extent) {\n return [(+extent[0][0] + +extent[1][0]) / 2, (+extent[0][1] + +extent[1][1]) / 2];\n }\n\n function schedule(transition, transform, point, event) {\n transition\n .on(\"start.zoom\", function() { gesture(this, arguments).event(event).start(); })\n .on(\"interrupt.zoom end.zoom\", function() { gesture(this, arguments).event(event).end(); })\n .tween(\"zoom\", function() {\n var that = this,\n args = arguments,\n g = gesture(that, args).event(event),\n e = extent.apply(that, args),\n p = point == null ? centroid(e) : typeof point === \"function\" ? point.apply(that, args) : point,\n w = Math.max(e[1][0] - e[0][0], e[1][1] - e[0][1]),\n a = that.__zoom,\n b = typeof transform === \"function\" ? transform.apply(that, args) : transform,\n i = interpolate(a.invert(p).concat(w / a.k), b.invert(p).concat(w / b.k));\n return function(t) {\n if (t === 1) t = b; // Avoid rounding error on end.\n else { var l = i(t), k = w / l[2]; t = new Transform(k, p[0] - l[0] * k, p[1] - l[1] * k); }\n g.zoom(null, t);\n };\n });\n }\n\n function gesture(that, args, clean) {\n return (!clean && that.__zooming) || new Gesture(that, args);\n }\n\n function Gesture(that, args) {\n this.that = that;\n this.args = args;\n this.active = 0;\n this.sourceEvent = null;\n this.extent = extent.apply(that, args);\n this.taps = 0;\n }\n\n Gesture.prototype = {\n event: function(event) {\n if (event) this.sourceEvent = event;\n return this;\n },\n start: function() {\n if (++this.active === 1) {\n this.that.__zooming = this;\n this.emit(\"start\");\n }\n return this;\n },\n zoom: function(key, transform) {\n if (this.mouse && key !== \"mouse\") this.mouse[1] = transform.invert(this.mouse[0]);\n if (this.touch0 && key !== \"touch\") this.touch0[1] = transform.invert(this.touch0[0]);\n if (this.touch1 && key !== \"touch\") this.touch1[1] = transform.invert(this.touch1[0]);\n this.that.__zoom = transform;\n this.emit(\"zoom\");\n return this;\n },\n end: function() {\n if (--this.active === 0) {\n delete this.that.__zooming;\n this.emit(\"end\");\n }\n return this;\n },\n emit: function(type) {\n var d = select(this.that).datum();\n listeners.call(\n type,\n this.that,\n new ZoomEvent(type, {\n sourceEvent: this.sourceEvent,\n target: zoom,\n type,\n transform: this.that.__zoom,\n dispatch: listeners\n }),\n d\n );\n }\n };\n\n function wheeled(event, ...args) {\n if (!filter.apply(this, arguments)) return;\n var g = gesture(this, args).event(event),\n t = this.__zoom,\n k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], t.k * Math.pow(2, wheelDelta.apply(this, arguments)))),\n p = pointer(event);\n\n // If the mouse is in the same location as before, reuse it.\n // If there were recent wheel events, reset the wheel idle timeout.\n if (g.wheel) {\n if (g.mouse[0][0] !== p[0] || g.mouse[0][1] !== p[1]) {\n g.mouse[1] = t.invert(g.mouse[0] = p);\n }\n clearTimeout(g.wheel);\n }\n\n // If this wheel event won’t trigger a transform change, ignore it.\n else if (t.k === k) return;\n\n // Otherwise, capture the mouse point and location at the start.\n else {\n g.mouse = [p, t.invert(p)];\n interrupt(this);\n g.start();\n }\n\n noevent(event);\n g.wheel = setTimeout(wheelidled, wheelDelay);\n g.zoom(\"mouse\", constrain(translate(scale(t, k), g.mouse[0], g.mouse[1]), g.extent, translateExtent));\n\n function wheelidled() {\n g.wheel = null;\n g.end();\n }\n }\n\n function mousedowned(event, ...args) {\n if (touchending || !filter.apply(this, arguments)) return;\n var currentTarget = event.currentTarget,\n g = gesture(this, args, true).event(event),\n v = select(event.view).on(\"mousemove.zoom\", mousemoved, true).on(\"mouseup.zoom\", mouseupped, true),\n p = pointer(event, currentTarget),\n x0 = event.clientX,\n y0 = event.clientY;\n\n dragDisable(event.view);\n nopropagation(event);\n g.mouse = [p, this.__zoom.invert(p)];\n interrupt(this);\n g.start();\n\n function mousemoved(event) {\n noevent(event);\n if (!g.moved) {\n var dx = event.clientX - x0, dy = event.clientY - y0;\n g.moved = dx * dx + dy * dy > clickDistance2;\n }\n g.event(event)\n .zoom(\"mouse\", constrain(translate(g.that.__zoom, g.mouse[0] = pointer(event, currentTarget), g.mouse[1]), g.extent, translateExtent));\n }\n\n function mouseupped(event) {\n v.on(\"mousemove.zoom mouseup.zoom\", null);\n dragEnable(event.view, g.moved);\n noevent(event);\n g.event(event).end();\n }\n }\n\n function dblclicked(event, ...args) {\n if (!filter.apply(this, arguments)) return;\n var t0 = this.__zoom,\n p0 = pointer(event.changedTouches ? event.changedTouches[0] : event, this),\n p1 = t0.invert(p0),\n k1 = t0.k * (event.shiftKey ? 0.5 : 2),\n t1 = constrain(translate(scale(t0, k1), p0, p1), extent.apply(this, args), translateExtent);\n\n noevent(event);\n if (duration > 0) select(this).transition().duration(duration).call(schedule, t1, p0, event);\n else select(this).call(zoom.transform, t1, p0, event);\n }\n\n function touchstarted(event, ...args) {\n if (!filter.apply(this, arguments)) return;\n var touches = event.touches,\n n = touches.length,\n g = gesture(this, args, event.changedTouches.length === n).event(event),\n started, i, t, p;\n\n nopropagation(event);\n for (i = 0; i < n; ++i) {\n t = touches[i], p = pointer(t, this);\n p = [p, this.__zoom.invert(p), t.identifier];\n if (!g.touch0) g.touch0 = p, started = true, g.taps = 1 + !!touchstarting;\n else if (!g.touch1 && g.touch0[2] !== p[2]) g.touch1 = p, g.taps = 0;\n }\n\n if (touchstarting) touchstarting = clearTimeout(touchstarting);\n\n if (started) {\n if (g.taps < 2) touchfirst = p[0], touchstarting = setTimeout(function() { touchstarting = null; }, touchDelay);\n interrupt(this);\n g.start();\n }\n }\n\n function touchmoved(event, ...args) {\n if (!this.__zooming) return;\n var g = gesture(this, args).event(event),\n touches = event.changedTouches,\n n = touches.length, i, t, p, l;\n\n noevent(event);\n for (i = 0; i < n; ++i) {\n t = touches[i], p = pointer(t, this);\n if (g.touch0 && g.touch0[2] === t.identifier) g.touch0[0] = p;\n else if (g.touch1 && g.touch1[2] === t.identifier) g.touch1[0] = p;\n }\n t = g.that.__zoom;\n if (g.touch1) {\n var p0 = g.touch0[0], l0 = g.touch0[1],\n p1 = g.touch1[0], l1 = g.touch1[1],\n dp = (dp = p1[0] - p0[0]) * dp + (dp = p1[1] - p0[1]) * dp,\n dl = (dl = l1[0] - l0[0]) * dl + (dl = l1[1] - l0[1]) * dl;\n t = scale(t, Math.sqrt(dp / dl));\n p = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2];\n l = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2];\n }\n else if (g.touch0) p = g.touch0[0], l = g.touch0[1];\n else return;\n\n g.zoom(\"touch\", constrain(translate(t, p, l), g.extent, translateExtent));\n }\n\n function touchended(event, ...args) {\n if (!this.__zooming) return;\n var g = gesture(this, args).event(event),\n touches = event.changedTouches,\n n = touches.length, i, t;\n\n nopropagation(event);\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, touchDelay);\n for (i = 0; i < n; ++i) {\n t = touches[i];\n if (g.touch0 && g.touch0[2] === t.identifier) delete g.touch0;\n else if (g.touch1 && g.touch1[2] === t.identifier) delete g.touch1;\n }\n if (g.touch1 && !g.touch0) g.touch0 = g.touch1, delete g.touch1;\n if (g.touch0) g.touch0[1] = this.__zoom.invert(g.touch0[0]);\n else {\n g.end();\n // If this was a dbltap, reroute to the (optional) dblclick.zoom handler.\n if (g.taps === 2) {\n t = pointer(t, this);\n if (Math.hypot(touchfirst[0] - t[0], touchfirst[1] - t[1]) < tapDistance) {\n var p = select(this).on(\"dblclick.zoom\");\n if (p) p.apply(this, arguments);\n }\n }\n }\n }\n\n zoom.wheelDelta = function(_) {\n return arguments.length ? (wheelDelta = typeof _ === \"function\" ? _ : constant(+_), zoom) : wheelDelta;\n };\n\n zoom.filter = function(_) {\n return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), zoom) : filter;\n };\n\n zoom.touchable = function(_) {\n return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), zoom) : touchable;\n };\n\n zoom.extent = function(_) {\n return arguments.length ? (extent = typeof _ === \"function\" ? _ : constant([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), zoom) : extent;\n };\n\n zoom.scaleExtent = function(_) {\n return arguments.length ? (scaleExtent[0] = +_[0], scaleExtent[1] = +_[1], zoom) : [scaleExtent[0], scaleExtent[1]];\n };\n\n zoom.translateExtent = function(_) {\n return arguments.length ? (translateExtent[0][0] = +_[0][0], translateExtent[1][0] = +_[1][0], translateExtent[0][1] = +_[0][1], translateExtent[1][1] = +_[1][1], zoom) : [[translateExtent[0][0], translateExtent[0][1]], [translateExtent[1][0], translateExtent[1][1]]];\n };\n\n zoom.constrain = function(_) {\n return arguments.length ? (constrain = _, zoom) : constrain;\n };\n\n zoom.duration = function(_) {\n return arguments.length ? (duration = +_, zoom) : duration;\n };\n\n zoom.interpolate = function(_) {\n return arguments.length ? (interpolate = _, zoom) : interpolate;\n };\n\n zoom.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? zoom : value;\n };\n\n zoom.clickDistance = function(_) {\n return arguments.length ? (clickDistance2 = (_ = +_) * _, zoom) : Math.sqrt(clickDistance2);\n };\n\n zoom.tapDistance = function(_) {\n return arguments.length ? (tapDistance = +_, zoom) : tapDistance;\n };\n\n return zoom;\n}\n","import React, { createContext, useContext, useMemo, memo, useRef, useState, useEffect, forwardRef, useCallback } from 'react';\nimport cc from 'classcat';\nimport { useStoreWithEqualityFn, createWithEqualityFn } from 'zustand/traditional';\nimport { shallow } from 'zustand/shallow';\nimport { zoomIdentity, zoom } from 'd3-zoom';\nimport { select, pointer } from 'd3-selection';\nimport { drag } from 'd3-drag';\nimport { createPortal } from 'react-dom';\n\nconst StoreContext = createContext(null);\nconst Provider$1 = StoreContext.Provider;\n\nconst errorMessages = {\n error001: () => '[React Flow]: Seems like you have not used zustand provider as an ancestor. Help: https://reactflow.dev/error#001',\n error002: () => \"It looks like you've created a new nodeTypes or edgeTypes object. If this wasn't on purpose please define the nodeTypes/edgeTypes outside of the component or memoize them.\",\n error003: (nodeType) => `Node type \"${nodeType}\" not found. Using fallback type \"default\".`,\n error004: () => 'The React Flow parent container needs a width and a height to render the graph.',\n error005: () => 'Only child nodes can use a parent extent.',\n error006: () => \"Can't create edge. An edge needs a source and a target.\",\n error007: (id) => `The old edge with id=${id} does not exist.`,\n error009: (type) => `Marker type \"${type}\" doesn't exist.`,\n error008: (sourceHandle, edge) => `Couldn't create edge for ${!sourceHandle ? 'source' : 'target'} handle id: \"${!sourceHandle ? edge.sourceHandle : edge.targetHandle}\", edge id: ${edge.id}.`,\n error010: () => 'Handle: No node id found. Make sure to only use a Handle inside a custom Node.',\n error011: (edgeType) => `Edge type \"${edgeType}\" not found. Using fallback type \"default\".`,\n error012: (id) => `Node with id \"${id}\" does not exist, it may have been removed. This can happen when a node is deleted before the \"onNodeClick\" handler is called.`,\n};\n\nconst zustandErrorMessage = errorMessages['error001']();\nfunction useStore(selector, equalityFn) {\n const store = useContext(StoreContext);\n if (store === null) {\n throw new Error(zustandErrorMessage);\n }\n return useStoreWithEqualityFn(store, selector, equalityFn);\n}\nconst useStoreApi = () => {\n const store = useContext(StoreContext);\n if (store === null) {\n throw new Error(zustandErrorMessage);\n }\n return useMemo(() => ({\n getState: store.getState,\n setState: store.setState,\n subscribe: store.subscribe,\n destroy: store.destroy,\n }), [store]);\n};\n\nconst selector$g = (s) => (s.userSelectionActive ? 'none' : 'all');\nfunction Panel({ position, children, className, style, ...rest }) {\n const pointerEvents = useStore(selector$g);\n const positionClasses = `${position}`.split('-');\n return (React.createElement(\"div\", { className: cc(['react-flow__panel', className, ...positionClasses]), style: { ...style, pointerEvents }, ...rest }, children));\n}\n\nfunction Attribution({ proOptions, position = 'bottom-right' }) {\n if (proOptions?.hideAttribution) {\n return null;\n }\n return (React.createElement(Panel, { position: position, className: \"react-flow__attribution\", \"data-message\": \"Please only hide this attribution when you are subscribed to React Flow Pro: https://reactflow.dev/pro\" },\n React.createElement(\"a\", { href: \"https://reactflow.dev\", target: \"_blank\", rel: \"noopener noreferrer\", \"aria-label\": \"React Flow attribution\" }, \"React Flow\")));\n}\n\nconst EdgeText = ({ x, y, label, labelStyle = {}, labelShowBg = true, labelBgStyle = {}, labelBgPadding = [2, 4], labelBgBorderRadius = 2, children, className, ...rest }) => {\n const edgeRef = useRef(null);\n const [edgeTextBbox, setEdgeTextBbox] = useState({ x: 0, y: 0, width: 0, height: 0 });\n const edgeTextClasses = cc(['react-flow__edge-textwrapper', className]);\n useEffect(() => {\n if (edgeRef.current) {\n const textBbox = edgeRef.current.getBBox();\n setEdgeTextBbox({\n x: textBbox.x,\n y: textBbox.y,\n width: textBbox.width,\n height: textBbox.height,\n });\n }\n }, [label]);\n if (typeof label === 'undefined' || !label) {\n return null;\n }\n return (React.createElement(\"g\", { transform: `translate(${x - edgeTextBbox.width / 2} ${y - edgeTextBbox.height / 2})`, className: edgeTextClasses, visibility: edgeTextBbox.width ? 'visible' : 'hidden', ...rest },\n labelShowBg && (React.createElement(\"rect\", { width: edgeTextBbox.width + 2 * labelBgPadding[0], x: -labelBgPadding[0], y: -labelBgPadding[1], height: edgeTextBbox.height + 2 * labelBgPadding[1], className: \"react-flow__edge-textbg\", style: labelBgStyle, rx: labelBgBorderRadius, ry: labelBgBorderRadius })),\n React.createElement(\"text\", { className: \"react-flow__edge-text\", y: edgeTextBbox.height / 2, dy: \"0.3em\", ref: edgeRef, style: labelStyle }, label),\n children));\n};\nvar EdgeText$1 = memo(EdgeText);\n\nconst getDimensions = (node) => ({\n width: node.offsetWidth,\n height: node.offsetHeight,\n});\nconst clamp = (val, min = 0, max = 1) => Math.min(Math.max(val, min), max);\nconst clampPosition = (position = { x: 0, y: 0 }, extent) => ({\n x: clamp(position.x, extent[0][0], extent[1][0]),\n y: clamp(position.y, extent[0][1], extent[1][1]),\n});\n// returns a number between 0 and 1 that represents the velocity of the movement\n// when the mouse is close to the edge of the canvas\nconst calcAutoPanVelocity = (value, min, max) => {\n if (value < min) {\n return clamp(Math.abs(value - min), 1, 50) / 50;\n }\n else if (value > max) {\n return -clamp(Math.abs(value - max), 1, 50) / 50;\n }\n return 0;\n};\nconst calcAutoPan = (pos, bounds) => {\n const xMovement = calcAutoPanVelocity(pos.x, 35, bounds.width - 35) * 20;\n const yMovement = calcAutoPanVelocity(pos.y, 35, bounds.height - 35) * 20;\n return [xMovement, yMovement];\n};\nconst getHostForElement = (element) => element.getRootNode?.() || window?.document;\nconst getBoundsOfBoxes = (box1, box2) => ({\n x: Math.min(box1.x, box2.x),\n y: Math.min(box1.y, box2.y),\n x2: Math.max(box1.x2, box2.x2),\n y2: Math.max(box1.y2, box2.y2),\n});\nconst rectToBox = ({ x, y, width, height }) => ({\n x,\n y,\n x2: x + width,\n y2: y + height,\n});\nconst boxToRect = ({ x, y, x2, y2 }) => ({\n x,\n y,\n width: x2 - x,\n height: y2 - y,\n});\nconst nodeToRect = (node) => ({\n ...(node.positionAbsolute || { x: 0, y: 0 }),\n width: node.width || 0,\n height: node.height || 0,\n});\nconst getBoundsOfRects = (rect1, rect2) => boxToRect(getBoundsOfBoxes(rectToBox(rect1), rectToBox(rect2)));\nconst getOverlappingArea = (rectA, rectB) => {\n const xOverlap = Math.max(0, Math.min(rectA.x + rectA.width, rectB.x + rectB.width) - Math.max(rectA.x, rectB.x));\n const yOverlap = Math.max(0, Math.min(rectA.y + rectA.height, rectB.y + rectB.height) - Math.max(rectA.y, rectB.y));\n return Math.ceil(xOverlap * yOverlap);\n};\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst isRectObject = (obj) => isNumeric(obj.width) && isNumeric(obj.height) && isNumeric(obj.x) && isNumeric(obj.y);\n/* eslint-disable-next-line @typescript-eslint/no-explicit-any */\nconst isNumeric = (n) => !isNaN(n) && isFinite(n);\nconst internalsSymbol = Symbol.for('internals');\n// used for a11y key board controls for nodes and edges\nconst elementSelectionKeys = ['Enter', ' ', 'Escape'];\nconst devWarn = (id, message) => {\n if (process.env.NODE_ENV === 'development') {\n console.warn(`[React Flow]: ${message} Help: https://reactflow.dev/error#${id}`);\n }\n};\nconst isReactKeyboardEvent = (event) => 'nativeEvent' in event;\nfunction isInputDOMNode(event) {\n const kbEvent = isReactKeyboardEvent(event) ? event.nativeEvent : event;\n // using composed path for handling shadow dom\n const target = (kbEvent.composedPath?.()?.[0] || event.target);\n const isInput = ['INPUT', 'SELECT', 'TEXTAREA'].includes(target?.nodeName) || target?.hasAttribute('contenteditable');\n // when an input field is focused we don't want to trigger deletion or movement of nodes\n return isInput || !!target?.closest('.nokey');\n}\nconst isMouseEvent = (event) => 'clientX' in event;\nconst getEventPosition = (event, bounds) => {\n const isMouseTriggered = isMouseEvent(event);\n const evtX = isMouseTriggered ? event.clientX : event.touches?.[0].clientX;\n const evtY = isMouseTriggered ? event.clientY : event.touches?.[0].clientY;\n return {\n x: evtX - (bounds?.left ?? 0),\n y: evtY - (bounds?.top ?? 0),\n };\n};\nconst isMacOs = () => typeof navigator !== 'undefined' && navigator?.userAgent?.indexOf('Mac') >= 0;\n\nconst BaseEdge = ({ id, path, labelX, labelY, label, labelStyle, labelShowBg, labelBgStyle, labelBgPadding, labelBgBorderRadius, style, markerEnd, markerStart, interactionWidth = 20, }) => {\n return (React.createElement(React.Fragment, null,\n React.createElement(\"path\", { id: id, style: style, d: path, fill: \"none\", className: \"react-flow__edge-path\", markerEnd: markerEnd, markerStart: markerStart }),\n interactionWidth && (React.createElement(\"path\", { d: path, fill: \"none\", strokeOpacity: 0, strokeWidth: interactionWidth, className: \"react-flow__edge-interaction\" })),\n label && isNumeric(labelX) && isNumeric(labelY) ? (React.createElement(EdgeText$1, { x: labelX, y: labelY, label: label, labelStyle: labelStyle, labelShowBg: labelShowBg, labelBgStyle: labelBgStyle, labelBgPadding: labelBgPadding, labelBgBorderRadius: labelBgBorderRadius })) : null));\n};\nBaseEdge.displayName = 'BaseEdge';\n\nconst getMarkerEnd = (markerType, markerEndId) => {\n if (typeof markerEndId !== 'undefined' && markerEndId) {\n return `url(#${markerEndId})`;\n }\n return typeof markerType !== 'undefined' ? `url(#react-flow__${markerType})` : 'none';\n};\nfunction getMouseHandler$1(id, getState, handler) {\n return handler === undefined\n ? handler\n : (event) => {\n const edge = getState().edges.find((e) => e.id === id);\n if (edge) {\n handler(event, { ...edge });\n }\n };\n}\n// this is used for straight edges and simple smoothstep edges (LTR, RTL, BTT, TTB)\nfunction getEdgeCenter({ sourceX, sourceY, targetX, targetY, }) {\n const xOffset = Math.abs(targetX - sourceX) / 2;\n const centerX = targetX < sourceX ? targetX + xOffset : targetX - xOffset;\n const yOffset = Math.abs(targetY - sourceY) / 2;\n const centerY = targetY < sourceY ? targetY + yOffset : targetY - yOffset;\n return [centerX, centerY, xOffset, yOffset];\n}\nfunction getBezierEdgeCenter({ sourceX, sourceY, targetX, targetY, sourceControlX, sourceControlY, targetControlX, targetControlY, }) {\n // cubic bezier t=0.5 mid point, not the actual mid point, but easy to calculate\n // https://stackoverflow.com/questions/67516101/how-to-find-distance-mid-point-of-bezier-curve\n const centerX = sourceX * 0.125 + sourceControlX * 0.375 + targetControlX * 0.375 + targetX * 0.125;\n const centerY = sourceY * 0.125 + sourceControlY * 0.375 + targetControlY * 0.375 + targetY * 0.125;\n const offsetX = Math.abs(centerX - sourceX);\n const offsetY = Math.abs(centerY - sourceY);\n return [centerX, centerY, offsetX, offsetY];\n}\n\nvar ConnectionMode;\n(function (ConnectionMode) {\n ConnectionMode[\"Strict\"] = \"strict\";\n ConnectionMode[\"Loose\"] = \"loose\";\n})(ConnectionMode || (ConnectionMode = {}));\nvar PanOnScrollMode;\n(function (PanOnScrollMode) {\n PanOnScrollMode[\"Free\"] = \"free\";\n PanOnScrollMode[\"Vertical\"] = \"vertical\";\n PanOnScrollMode[\"Horizontal\"] = \"horizontal\";\n})(PanOnScrollMode || (PanOnScrollMode = {}));\nvar SelectionMode;\n(function (SelectionMode) {\n SelectionMode[\"Partial\"] = \"partial\";\n SelectionMode[\"Full\"] = \"full\";\n})(SelectionMode || (SelectionMode = {}));\n\nvar ConnectionLineType;\n(function (ConnectionLineType) {\n ConnectionLineType[\"Bezier\"] = \"default\";\n ConnectionLineType[\"Straight\"] = \"straight\";\n ConnectionLineType[\"Step\"] = \"step\";\n ConnectionLineType[\"SmoothStep\"] = \"smoothstep\";\n ConnectionLineType[\"SimpleBezier\"] = \"simplebezier\";\n})(ConnectionLineType || (ConnectionLineType = {}));\nvar MarkerType;\n(function (MarkerType) {\n MarkerType[\"Arrow\"] = \"arrow\";\n MarkerType[\"ArrowClosed\"] = \"arrowclosed\";\n})(MarkerType || (MarkerType = {}));\n\nvar Position;\n(function (Position) {\n Position[\"Left\"] = \"left\";\n Position[\"Top\"] = \"top\";\n Position[\"Right\"] = \"right\";\n Position[\"Bottom\"] = \"bottom\";\n})(Position || (Position = {}));\n\nfunction getControl({ pos, x1, y1, x2, y2 }) {\n if (pos === Position.Left || pos === Position.Right) {\n return [0.5 * (x1 + x2), y1];\n }\n return [x1, 0.5 * (y1 + y2)];\n}\nfunction getSimpleBezierPath({ sourceX, sourceY, sourcePosition = Position.Bottom, targetX, targetY, targetPosition = Position.Top, }) {\n const [sourceControlX, sourceControlY] = getControl({\n pos: sourcePosition,\n x1: sourceX,\n y1: sourceY,\n x2: targetX,\n y2: targetY,\n });\n const [targetControlX, targetControlY] = getControl({\n pos: targetPosition,\n x1: targetX,\n y1: targetY,\n x2: sourceX,\n y2: sourceY,\n });\n const [labelX, labelY, offsetX, offsetY] = getBezierEdgeCenter({\n sourceX,\n sourceY,\n targetX,\n targetY,\n sourceControlX,\n sourceControlY,\n targetControlX,\n targetControlY,\n });\n return [\n `M${sourceX},${sourceY} C${sourceControlX},${sourceControlY} ${targetControlX},${targetControlY} ${targetX},${targetY}`,\n labelX,\n labelY,\n offsetX,\n offsetY,\n ];\n}\nconst SimpleBezierEdge = memo(({ sourceX, sourceY, targetX, targetY, sourcePosition = Position.Bottom, targetPosition = Position.Top, label, labelStyle, labelShowBg, labelBgStyle, labelBgPadding, labelBgBorderRadius, style, markerEnd, markerStart, interactionWidth, }) => {\n const [path, labelX, labelY] = getSimpleBezierPath({\n sourceX,\n sourceY,\n sourcePosition,\n targetX,\n targetY,\n targetPosition,\n });\n return (React.createElement(BaseEdge, { path: path, labelX: labelX, labelY: labelY, label: label, labelStyle: labelStyle, labelShowBg: labelShowBg, labelBgStyle: labelBgStyle, labelBgPadding: labelBgPadding, labelBgBorderRadius: labelBgBorderRadius, style: style, markerEnd: markerEnd, markerStart: markerStart, interactionWidth: interactionWidth }));\n});\nSimpleBezierEdge.displayName = 'SimpleBezierEdge';\n\nconst handleDirections = {\n [Position.Left]: { x: -1, y: 0 },\n [Position.Right]: { x: 1, y: 0 },\n [Position.Top]: { x: 0, y: -1 },\n [Position.Bottom]: { x: 0, y: 1 },\n};\nconst getDirection = ({ source, sourcePosition = Position.Bottom, target, }) => {\n if (sourcePosition === Position.Left || sourcePosition === Position.Right) {\n return source.x < target.x ? { x: 1, y: 0 } : { x: -1, y: 0 };\n }\n return source.y < target.y ? { x: 0, y: 1 } : { x: 0, y: -1 };\n};\nconst distance = (a, b) => Math.sqrt(Math.pow(b.x - a.x, 2) + Math.pow(b.y - a.y, 2));\n// ith this function we try to mimic a orthogonal edge routing behaviour\n// It's not as good as a real orthogonal edge routing but it's faster and good enough as a default for step and smooth step edges\nfunction getPoints({ source, sourcePosition = Position.Bottom, target, targetPosition = Position.Top, center, offset, }) {\n const sourceDir = handleDirections[sourcePosition];\n const targetDir = handleDirections[targetPosition];\n const sourceGapped = { x: source.x + sourceDir.x * offset, y: source.y + sourceDir.y * offset };\n const targetGapped = { x: target.x + targetDir.x * offset, y: target.y + targetDir.y * offset };\n const dir = getDirection({\n source: sourceGapped,\n sourcePosition,\n target: targetGapped,\n });\n const dirAccessor = dir.x !== 0 ? 'x' : 'y';\n const currDir = dir[dirAccessor];\n let points = [];\n let centerX, centerY;\n const sourceGapOffset = { x: 0, y: 0 };\n const targetGapOffset = { x: 0, y: 0 };\n const [defaultCenterX, defaultCenterY, defaultOffsetX, defaultOffsetY] = getEdgeCenter({\n sourceX: source.x,\n sourceY: source.y,\n targetX: target.x,\n targetY: target.y,\n });\n // opposite handle positions, default case\n if (sourceDir[dirAccessor] * targetDir[dirAccessor] === -1) {\n centerX = center.x ?? defaultCenterX;\n centerY = center.y ?? defaultCenterY;\n // --->\n // |\n // >---\n const verticalSplit = [\n { x: centerX, y: sourceGapped.y },\n { x: centerX, y: targetGapped.y },\n ];\n // |\n // ---\n // |\n const horizontalSplit = [\n { x: sourceGapped.x, y: centerY },\n { x: targetGapped.x, y: centerY },\n ];\n if (sourceDir[dirAccessor] === currDir) {\n points = dirAccessor === 'x' ? verticalSplit : horizontalSplit;\n }\n else {\n points = dirAccessor === 'x' ? horizontalSplit : verticalSplit;\n }\n }\n else {\n // sourceTarget means we take x from source and y from target, targetSource is the opposite\n const sourceTarget = [{ x: sourceGapped.x, y: targetGapped.y }];\n const targetSource = [{ x: targetGapped.x, y: sourceGapped.y }];\n // this handles edges with same handle positions\n if (dirAccessor === 'x') {\n points = sourceDir.x === currDir ? targetSource : sourceTarget;\n }\n else {\n points = sourceDir.y === currDir ? sourceTarget : targetSource;\n }\n if (sourcePosition === targetPosition) {\n const diff = Math.abs(source[dirAccessor] - target[dirAccessor]);\n // if an edge goes from right to right for example (sourcePosition === targetPosition) and the distance between source.x and target.x is less than the offset, the added point and the gapped source/target will overlap. This leads to a weird edge path. To avoid this we add a gapOffset to the source/target\n if (diff <= offset) {\n const gapOffset = Math.min(offset - 1, offset - diff);\n if (sourceDir[dirAccessor] === currDir) {\n sourceGapOffset[dirAccessor] = (sourceGapped[dirAccessor] > source[dirAccessor] ? -1 : 1) * gapOffset;\n }\n else {\n targetGapOffset[dirAccessor] = (targetGapped[dirAccessor] > target[dirAccessor] ? -1 : 1) * gapOffset;\n }\n }\n }\n // these are conditions for handling mixed handle positions like Right -> Bottom for example\n if (sourcePosition !== targetPosition) {\n const dirAccessorOpposite = dirAccessor === 'x' ? 'y' : 'x';\n const isSameDir = sourceDir[dirAccessor] === targetDir[dirAccessorOpposite];\n const sourceGtTargetOppo = sourceGapped[dirAccessorOpposite] > targetGapped[dirAccessorOpposite];\n const sourceLtTargetOppo = sourceGapped[dirAccessorOpposite] < targetGapped[dirAccessorOpposite];\n const flipSourceTarget = (sourceDir[dirAccessor] === 1 && ((!isSameDir && sourceGtTargetOppo) || (isSameDir && sourceLtTargetOppo))) ||\n (sourceDir[dirAccessor] !== 1 && ((!isSameDir && sourceLtTargetOppo) || (isSameDir && sourceGtTargetOppo)));\n if (flipSourceTarget) {\n points = dirAccessor === 'x' ? sourceTarget : targetSource;\n }\n }\n const sourceGapPoint = { x: sourceGapped.x + sourceGapOffset.x, y: sourceGapped.y + sourceGapOffset.y };\n const targetGapPoint = { x: targetGapped.x + targetGapOffset.x, y: targetGapped.y + targetGapOffset.y };\n const maxXDistance = Math.max(Math.abs(sourceGapPoint.x - points[0].x), Math.abs(targetGapPoint.x - points[0].x));\n const maxYDistance = Math.max(Math.abs(sourceGapPoint.y - points[0].y), Math.abs(targetGapPoint.y - points[0].y));\n // we want to place the label on the longest segment of the edge\n if (maxXDistance >= maxYDistance) {\n centerX = (sourceGapPoint.x + targetGapPoint.x) / 2;\n centerY = points[0].y;\n }\n else {\n centerX = points[0].x;\n centerY = (sourceGapPoint.y + targetGapPoint.y) / 2;\n }\n }\n const pathPoints = [\n source,\n { x: sourceGapped.x + sourceGapOffset.x, y: sourceGapped.y + sourceGapOffset.y },\n ...points,\n { x: targetGapped.x + targetGapOffset.x, y: targetGapped.y + targetGapOffset.y },\n target,\n ];\n return [pathPoints, centerX, centerY, defaultOffsetX, defaultOffsetY];\n}\nfunction getBend(a, b, c, size) {\n const bendSize = Math.min(distance(a, b) / 2, distance(b, c) / 2, size);\n const { x, y } = b;\n // no bend\n if ((a.x === x && x === c.x) || (a.y === y && y === c.y)) {\n return `L${x} ${y}`;\n }\n // first segment is horizontal\n if (a.y === y) {\n const xDir = a.x < c.x ? -1 : 1;\n const yDir = a.y < c.y ? 1 : -1;\n return `L ${x + bendSize * xDir},${y}Q ${x},${y} ${x},${y + bendSize * yDir}`;\n }\n const xDir = a.x < c.x ? 1 : -1;\n const yDir = a.y < c.y ? -1 : 1;\n return `L ${x},${y + bendSize * yDir}Q ${x},${y} ${x + bendSize * xDir},${y}`;\n}\nfunction getSmoothStepPath({ sourceX, sourceY, sourcePosition = Position.Bottom, targetX, targetY, targetPosition = Position.Top, borderRadius = 5, centerX, centerY, offset = 20, }) {\n const [points, labelX, labelY, offsetX, offsetY] = getPoints({\n source: { x: sourceX, y: sourceY },\n sourcePosition,\n target: { x: targetX, y: targetY },\n targetPosition,\n center: { x: centerX, y: centerY },\n offset,\n });\n const path = points.reduce((res, p, i) => {\n let segment = '';\n if (i > 0 && i < points.length - 1) {\n segment = getBend(points[i - 1], p, points[i + 1], borderRadius);\n }\n else {\n segment = `${i === 0 ? 'M' : 'L'}${p.x} ${p.y}`;\n }\n res += segment;\n return res;\n }, '');\n return [path, labelX, labelY, offsetX, offsetY];\n}\nconst SmoothStepEdge = memo(({ sourceX, sourceY, targetX, targetY, label, labelStyle, labelShowBg, labelBgStyle, labelBgPadding, labelBgBorderRadius, style, sourcePosition = Position.Bottom, targetPosition = Position.Top, markerEnd, markerStart, pathOptions, interactionWidth, }) => {\n const [path, labelX, labelY] = getSmoothStepPath({\n sourceX,\n sourceY,\n sourcePosition,\n targetX,\n targetY,\n targetPosition,\n borderRadius: pathOptions?.borderRadius,\n offset: pathOptions?.offset,\n });\n return (React.createElement(BaseEdge, { path: path, labelX: labelX, labelY: labelY, label: label, labelStyle: labelStyle, labelShowBg: labelShowBg, labelBgStyle: labelBgStyle, labelBgPadding: labelBgPadding, labelBgBorderRadius: labelBgBorderRadius, style: style, markerEnd: markerEnd, markerStart: markerStart, interactionWidth: interactionWidth }));\n});\nSmoothStepEdge.displayName = 'SmoothStepEdge';\n\nconst StepEdge = memo((props) => (React.createElement(SmoothStepEdge, { ...props, pathOptions: useMemo(() => ({ borderRadius: 0, offset: props.pathOptions?.offset }), [props.pathOptions?.offset]) })));\nStepEdge.displayName = 'StepEdge';\n\nfunction getStraightPath({ sourceX, sourceY, targetX, targetY, }) {\n const [labelX, labelY, offsetX, offsetY] = getEdgeCenter({\n sourceX,\n sourceY,\n targetX,\n targetY,\n });\n return [`M ${sourceX},${sourceY}L ${targetX},${targetY}`, labelX, labelY, offsetX, offsetY];\n}\nconst StraightEdge = memo(({ sourceX, sourceY, targetX, targetY, label, labelStyle, labelShowBg, labelBgStyle, labelBgPadding, labelBgBorderRadius, style, markerEnd, markerStart, interactionWidth, }) => {\n const [path, labelX, labelY] = getStraightPath({ sourceX, sourceY, targetX, targetY });\n return (React.createElement(BaseEdge, { path: path, labelX: labelX, labelY: labelY, label: label, labelStyle: labelStyle, labelShowBg: labelShowBg, labelBgStyle: labelBgStyle, labelBgPadding: labelBgPadding, labelBgBorderRadius: labelBgBorderRadius, style: style, markerEnd: markerEnd, markerStart: markerStart, interactionWidth: interactionWidth }));\n});\nStraightEdge.displayName = 'StraightEdge';\n\nfunction calculateControlOffset(distance, curvature) {\n if (distance >= 0) {\n return 0.5 * distance;\n }\n return curvature * 25 * Math.sqrt(-distance);\n}\nfunction getControlWithCurvature({ pos, x1, y1, x2, y2, c }) {\n switch (pos) {\n case Position.Left:\n return [x1 - calculateControlOffset(x1 - x2, c), y1];\n case Position.Right:\n return [x1 + calculateControlOffset(x2 - x1, c), y1];\n case Position.Top:\n return [x1, y1 - calculateControlOffset(y1 - y2, c)];\n case Position.Bottom:\n return [x1, y1 + calculateControlOffset(y2 - y1, c)];\n }\n}\nfunction getBezierPath({ sourceX, sourceY, sourcePosition = Position.Bottom, targetX, targetY, targetPosition = Position.Top, curvature = 0.25, }) {\n const [sourceControlX, sourceControlY] = getControlWithCurvature({\n pos: sourcePosition,\n x1: sourceX,\n y1: sourceY,\n x2: targetX,\n y2: targetY,\n c: curvature,\n });\n const [targetControlX, targetControlY] = getControlWithCurvature({\n pos: targetPosition,\n x1: targetX,\n y1: targetY,\n x2: sourceX,\n y2: sourceY,\n c: curvature,\n });\n const [labelX, labelY, offsetX, offsetY] = getBezierEdgeCenter({\n sourceX,\n sourceY,\n targetX,\n targetY,\n sourceControlX,\n sourceControlY,\n targetControlX,\n targetControlY,\n });\n return [\n `M${sourceX},${sourceY} C${sourceControlX},${sourceControlY} ${targetControlX},${targetControlY} ${targetX},${targetY}`,\n labelX,\n labelY,\n offsetX,\n offsetY,\n ];\n}\nconst BezierEdge = memo(({ sourceX, sourceY, targetX, targetY, sourcePosition = Position.Bottom, targetPosition = Position.Top, label, labelStyle, labelShowBg, labelBgStyle, labelBgPadding, labelBgBorderRadius, style, markerEnd, markerStart, pathOptions, interactionWidth, }) => {\n const [path, labelX, labelY] = getBezierPath({\n sourceX,\n sourceY,\n sourcePosition,\n targetX,\n targetY,\n targetPosition,\n curvature: pathOptions?.curvature,\n });\n return (React.createElement(BaseEdge, { path: path, labelX: labelX, labelY: labelY, label: label, labelStyle: labelStyle, labelShowBg: labelShowBg, labelBgStyle: labelBgStyle, labelBgPadding: labelBgPadding, labelBgBorderRadius: labelBgBorderRadius, style: style, markerEnd: markerEnd, markerStart: markerStart, interactionWidth: interactionWidth }));\n});\nBezierEdge.displayName = 'BezierEdge';\n\nconst NodeIdContext = createContext(null);\nconst Provider = NodeIdContext.Provider;\nNodeIdContext.Consumer;\nconst useNodeId = () => {\n const nodeId = useContext(NodeIdContext);\n return nodeId;\n};\n\nconst isEdge = (element) => 'id' in element && 'source' in element && 'target' in element;\nconst isNode = (element) => 'id' in element && !('source' in element) && !('target' in element);\nconst getOutgoers = (node, nodes, edges) => {\n if (!isNode(node)) {\n return [];\n }\n const outgoerIds = edges.filter((e) => e.source === node.id).map((e) => e.target);\n return nodes.filter((n) => outgoerIds.includes(n.id));\n};\nconst getIncomers = (node, nodes, edges) => {\n if (!isNode(node)) {\n return [];\n }\n const incomersIds = edges.filter((e) => e.target === node.id).map((e) => e.source);\n return nodes.filter((n) => incomersIds.includes(n.id));\n};\nconst getEdgeId = ({ source, sourceHandle, target, targetHandle }) => `reactflow__edge-${source}${sourceHandle || ''}-${target}${targetHandle || ''}`;\nconst getMarkerId = (marker, rfId) => {\n if (typeof marker === 'undefined') {\n return '';\n }\n if (typeof marker === 'string') {\n return marker;\n }\n const idPrefix = rfId ? `${rfId}__` : '';\n return `${idPrefix}${Object.keys(marker)\n .sort()\n .map((key) => `${key}=${marker[key]}`)\n .join('&')}`;\n};\nconst connectionExists = (edge, edges) => {\n return edges.some((el) => el.source === edge.source &&\n el.target === edge.target &&\n (el.sourceHandle === edge.sourceHandle || (!el.sourceHandle && !edge.sourceHandle)) &&\n (el.targetHandle === edge.targetHandle || (!el.targetHandle && !edge.targetHandle)));\n};\nconst addEdge = (edgeParams, edges) => {\n if (!edgeParams.source || !edgeParams.target) {\n devWarn('006', errorMessages['error006']());\n return edges;\n }\n let edge;\n if (isEdge(edgeParams)) {\n edge = { ...edgeParams };\n }\n else {\n edge = {\n ...edgeParams,\n id: getEdgeId(edgeParams),\n };\n }\n if (connectionExists(edge, edges)) {\n return edges;\n }\n return edges.concat(edge);\n};\nconst reconnectEdge = (oldEdge, newConnection, edges, options = { shouldReplaceId: true }) => {\n const { id: oldEdgeId, ...rest } = oldEdge;\n if (!newConnection.source || !newConnection.target) {\n devWarn('006', errorMessages['error006']());\n return edges;\n }\n const foundEdge = edges.find((e) => e.id === oldEdgeId);\n if (!foundEdge) {\n devWarn('007', errorMessages['error007'](oldEdgeId));\n return edges;\n }\n // Remove old edge and create the new edge with parameters of old edge.\n const edge = {\n ...rest,\n id: options.shouldReplaceId ? getEdgeId(newConnection) : oldEdgeId,\n source: newConnection.source,\n target: newConnection.target,\n sourceHandle: newConnection.sourceHandle,\n targetHandle: newConnection.targetHandle,\n };\n return edges.filter((e) => e.id !== oldEdgeId).concat(edge);\n};\n/**\n *\n * @deprecated Use `reconnectEdge` instead.\n */\nconst updateEdge = (oldEdge, newConnection, edges, options = { shouldReplaceId: true }) => {\n console.warn('[DEPRECATED] `updateEdge` is deprecated. Instead use `reconnectEdge` https://reactflow.dev/api-reference/utils/reconnect-edge');\n return reconnectEdge(oldEdge, newConnection, edges, options);\n};\nconst pointToRendererPoint = ({ x, y }, [tx, ty, tScale], snapToGrid, [snapX, snapY]) => {\n const position = {\n x: (x - tx) / tScale,\n y: (y - ty) / tScale,\n };\n if (snapToGrid) {\n return {\n x: snapX * Math.round(position.x / snapX),\n y: snapY * Math.round(position.y / snapY),\n };\n }\n return position;\n};\nconst rendererPointToPoint = ({ x, y }, [tx, ty, tScale]) => {\n return {\n x: x * tScale + tx,\n y: y * tScale + ty,\n };\n};\nconst getNodePositionWithOrigin = (node, nodeOrigin = [0, 0]) => {\n if (!node) {\n return {\n x: 0,\n y: 0,\n positionAbsolute: {\n x: 0,\n y: 0,\n },\n };\n }\n const offsetX = (node.width ?? 0) * nodeOrigin[0];\n const offsetY = (node.height ?? 0) * nodeOrigin[1];\n const position = {\n x: node.position.x - offsetX,\n y: node.position.y - offsetY,\n };\n return {\n ...position,\n positionAbsolute: node.positionAbsolute\n ? {\n x: node.positionAbsolute.x - offsetX,\n y: node.positionAbsolute.y - offsetY,\n }\n : position,\n };\n};\nconst getNodesBounds = (nodes, nodeOrigin = [0, 0]) => {\n if (nodes.length === 0) {\n return { x: 0, y: 0, width: 0, height: 0 };\n }\n const box = nodes.reduce((currBox, node) => {\n const { x, y } = getNodePositionWithOrigin(node, nodeOrigin).positionAbsolute;\n return getBoundsOfBoxes(currBox, rectToBox({\n x,\n y,\n width: node.width || 0,\n height: node.height || 0,\n }));\n }, { x: Infinity, y: Infinity, x2: -Infinity, y2: -Infinity });\n return boxToRect(box);\n};\n// @deprecated Use `getNodesBounds`.\nconst getRectOfNodes = (nodes, nodeOrigin = [0, 0]) => {\n console.warn('[DEPRECATED] `getRectOfNodes` is deprecated. Instead use `getNodesBounds` https://reactflow.dev/api-reference/utils/get-nodes-bounds.');\n return getNodesBounds(nodes, nodeOrigin);\n};\nconst getNodesInside = (nodeInternals, rect, [tx, ty, tScale] = [0, 0, 1], partially = false, \n// set excludeNonSelectableNodes if you want to pay attention to the nodes \"selectable\" attribute\nexcludeNonSelectableNodes = false, nodeOrigin = [0, 0]) => {\n const paneRect = {\n x: (rect.x - tx) / tScale,\n y: (rect.y - ty) / tScale,\n width: rect.width / tScale,\n height: rect.height / tScale,\n };\n const visibleNodes = [];\n nodeInternals.forEach((node) => {\n const { width, height, selectable = true, hidden = false } = node;\n if ((excludeNonSelectableNodes && !selectable) || hidden) {\n return false;\n }\n const { positionAbsolute } = getNodePositionWithOrigin(node, nodeOrigin);\n const nodeRect = {\n x: positionAbsolute.x,\n y: positionAbsolute.y,\n width: width || 0,\n height: height || 0,\n };\n const overlappingArea = getOverlappingArea(paneRect, nodeRect);\n const notInitialized = typeof width === 'undefined' || typeof height === 'undefined' || width === null || height === null;\n const partiallyVisible = partially && overlappingArea > 0;\n const area = (width || 0) * (height || 0);\n const isVisible = notInitialized || partiallyVisible || overlappingArea >= area;\n if (isVisible || node.dragging) {\n visibleNodes.push(node);\n }\n });\n return visibleNodes;\n};\nconst getConnectedEdges = (nodes, edges) => {\n const nodeIds = nodes.map((node) => node.id);\n return edges.filter((edge) => nodeIds.includes(edge.source) || nodeIds.includes(edge.target));\n};\n// @deprecated Use `getViewportForBounds`.\nconst getTransformForBounds = (bounds, width, height, minZoom, maxZoom, padding = 0.1) => {\n const { x, y, zoom } = getViewportForBounds(bounds, width, height, minZoom, maxZoom, padding);\n console.warn('[DEPRECATED] `getTransformForBounds` is deprecated. Instead use `getViewportForBounds`. Beware that the return value is type Viewport (`{ x: number, y: number, zoom: number }`) instead of Transform (`[number, number, number]`). https://reactflow.dev/api-reference/utils/get-viewport-for-bounds');\n return [x, y, zoom];\n};\nconst getViewportForBounds = (bounds, width, height, minZoom, maxZoom, padding = 0.1) => {\n const xZoom = width / (bounds.width * (1 + padding));\n const yZoom = height / (bounds.height * (1 + padding));\n const zoom = Math.min(xZoom, yZoom);\n const clampedZoom = clamp(zoom, minZoom, maxZoom);\n const boundsCenterX = bounds.x + bounds.width / 2;\n const boundsCenterY = bounds.y + bounds.height / 2;\n const x = width / 2 - boundsCenterX * clampedZoom;\n const y = height / 2 - boundsCenterY * clampedZoom;\n return { x, y, zoom: clampedZoom };\n};\nconst getD3Transition = (selection, duration = 0) => {\n return selection.transition().duration(duration);\n};\n\n// this functions collects all handles and adds an absolute position\n// so that we can later find the closest handle to the mouse position\nfunction getHandles(node, handleBounds, type, currentHandle) {\n return (handleBounds[type] || []).reduce((res, h) => {\n if (`${node.id}-${h.id}-${type}` !== currentHandle) {\n res.push({\n id: h.id || null,\n type,\n nodeId: node.id,\n x: (node.positionAbsolute?.x ?? 0) + h.x + h.width / 2,\n y: (node.positionAbsolute?.y ?? 0) + h.y + h.height / 2,\n });\n }\n return res;\n }, []);\n}\nfunction getClosestHandle(event, doc, pos, connectionRadius, handles, validator) {\n // we always want to prioritize the handle below the mouse cursor over the closest distance handle,\n // because it could be that the center of another handle is closer to the mouse pointer than the handle below the cursor\n const { x, y } = getEventPosition(event);\n const domNodes = doc.elementsFromPoint(x, y);\n const handleBelow = domNodes.find((el) => el.classList.contains('react-flow__handle'));\n if (handleBelow) {\n const handleNodeId = handleBelow.getAttribute('data-nodeid');\n if (handleNodeId) {\n const handleType = getHandleType(undefined, handleBelow);\n const handleId = handleBelow.getAttribute('data-handleid');\n const validHandleResult = validator({ nodeId: handleNodeId, id: handleId, type: handleType });\n if (validHandleResult) {\n const handle = handles.find((h) => h.nodeId === handleNodeId && h.type === handleType && h.id === handleId);\n return {\n handle: {\n id: handleId,\n type: handleType,\n nodeId: handleNodeId,\n x: handle?.x || pos.x,\n y: handle?.y || pos.y,\n },\n validHandleResult,\n };\n }\n }\n }\n // if we couldn't find a handle below the mouse cursor we look for the closest distance based on the connectionRadius\n let closestHandles = [];\n let minDistance = Infinity;\n handles.forEach((handle) => {\n const distance = Math.sqrt((handle.x - pos.x) ** 2 + (handle.y - pos.y) ** 2);\n if (distance <= connectionRadius) {\n const validHandleResult = validator(handle);\n if (distance <= minDistance) {\n if (distance < minDistance) {\n closestHandles = [{ handle, validHandleResult }];\n }\n else if (distance === minDistance) {\n // when multiple handles are on the same distance we collect all of them\n closestHandles.push({\n handle,\n validHandleResult,\n });\n }\n minDistance = distance;\n }\n }\n });\n if (!closestHandles.length) {\n return { handle: null, validHandleResult: defaultResult() };\n }\n if (closestHandles.length === 1) {\n return closestHandles[0];\n }\n const hasValidHandle = closestHandles.some(({ validHandleResult }) => validHandleResult.isValid);\n const hasTargetHandle = closestHandles.some(({ handle }) => handle.type === 'target');\n // if multiple handles are layouted on top of each other we prefer the one with type = target and the one that is valid\n return (closestHandles.find(({ handle, validHandleResult }) => hasTargetHandle ? handle.type === 'target' : (hasValidHandle ? validHandleResult.isValid : true)) || closestHandles[0]);\n}\nconst nullConnection = { source: null, target: null, sourceHandle: null, targetHandle: null };\nconst defaultResult = () => ({\n handleDomNode: null,\n isValid: false,\n connection: nullConnection,\n endHandle: null,\n});\n// checks if and returns connection in fom of an object { source: 123, target: 312 }\nfunction isValidHandle(handle, connectionMode, fromNodeId, fromHandleId, fromType, isValidConnection, doc) {\n const isTarget = fromType === 'target';\n const handleToCheck = doc.querySelector(`.react-flow__handle[data-id=\"${handle?.nodeId}-${handle?.id}-${handle?.type}\"]`);\n const result = {\n ...defaultResult(),\n handleDomNode: handleToCheck,\n };\n if (handleToCheck) {\n const handleType = getHandleType(undefined, handleToCheck);\n const handleNodeId = handleToCheck.getAttribute('data-nodeid');\n const handleId = handleToCheck.getAttribute('data-handleid');\n const connectable = handleToCheck.classList.contains('connectable');\n const connectableEnd = handleToCheck.classList.contains('connectableend');\n const connection = {\n source: isTarget ? handleNodeId : fromNodeId,\n sourceHandle: isTarget ? handleId : fromHandleId,\n target: isTarget ? fromNodeId : handleNodeId,\n targetHandle: isTarget ? fromHandleId : handleId,\n };\n result.connection = connection;\n const isConnectable = connectable && connectableEnd;\n // in strict mode we don't allow target to target or source to source connections\n const isValid = isConnectable &&\n (connectionMode === ConnectionMode.Strict\n ? (isTarget && handleType === 'source') || (!isTarget && handleType === 'target')\n : handleNodeId !== fromNodeId || handleId !== fromHandleId);\n if (isValid) {\n result.endHandle = {\n nodeId: handleNodeId,\n handleId,\n type: handleType,\n };\n result.isValid = isValidConnection(connection);\n }\n }\n return result;\n}\nfunction getHandleLookup({ nodes, nodeId, handleId, handleType }) {\n return nodes.reduce((res, node) => {\n if (node[internalsSymbol]) {\n const { handleBounds } = node[internalsSymbol];\n let sourceHandles = [];\n let targetHandles = [];\n if (handleBounds) {\n sourceHandles = getHandles(node, handleBounds, 'source', `${nodeId}-${handleId}-${handleType}`);\n targetHandles = getHandles(node, handleBounds, 'target', `${nodeId}-${handleId}-${handleType}`);\n }\n res.push(...sourceHandles, ...targetHandles);\n }\n return res;\n }, []);\n}\nfunction getHandleType(edgeUpdaterType, handleDomNode) {\n if (edgeUpdaterType) {\n return edgeUpdaterType;\n }\n else if (handleDomNode?.classList.contains('target')) {\n return 'target';\n }\n else if (handleDomNode?.classList.contains('source')) {\n return 'source';\n }\n return null;\n}\nfunction resetRecentHandle(handleDomNode) {\n handleDomNode?.classList.remove('valid', 'connecting', 'react-flow__handle-valid', 'react-flow__handle-connecting');\n}\nfunction getConnectionStatus(isInsideConnectionRadius, isHandleValid) {\n let connectionStatus = null;\n if (isHandleValid) {\n connectionStatus = 'valid';\n }\n else if (isInsideConnectionRadius && !isHandleValid) {\n connectionStatus = 'invalid';\n }\n return connectionStatus;\n}\n\nfunction handlePointerDown({ event, handleId, nodeId, onConnect, isTarget, getState, setState, isValidConnection, edgeUpdaterType, onReconnectEnd, }) {\n // when react-flow is used inside a shadow root we can't use document\n const doc = getHostForElement(event.target);\n const { connectionMode, domNode, autoPanOnConnect, connectionRadius, onConnectStart, panBy, getNodes, cancelConnection, } = getState();\n let autoPanId = 0;\n let closestHandle;\n const { x, y } = getEventPosition(event);\n const clickedHandle = doc?.elementFromPoint(x, y);\n const handleType = getHandleType(edgeUpdaterType, clickedHandle);\n const containerBounds = domNode?.getBoundingClientRect();\n if (!containerBounds || !handleType) {\n return;\n }\n let prevActiveHandle;\n let connectionPosition = getEventPosition(event, containerBounds);\n let autoPanStarted = false;\n let connection = null;\n let isValid = false;\n let handleDomNode = null;\n const handleLookup = getHandleLookup({\n nodes: getNodes(),\n nodeId,\n handleId,\n handleType,\n });\n // when the user is moving the mouse close to the edge of the canvas while connecting we move the canvas\n const autoPan = () => {\n if (!autoPanOnConnect) {\n return;\n }\n const [xMovement, yMovement] = calcAutoPan(connectionPosition, containerBounds);\n panBy({ x: xMovement, y: yMovement });\n autoPanId = requestAnimationFrame(autoPan);\n };\n setState({\n connectionPosition,\n connectionStatus: null,\n // connectionNodeId etc will be removed in the next major in favor of connectionStartHandle\n connectionNodeId: nodeId,\n connectionHandleId: handleId,\n connectionHandleType: handleType,\n connectionStartHandle: {\n nodeId,\n handleId,\n type: handleType,\n },\n connectionEndHandle: null,\n });\n onConnectStart?.(event, { nodeId, handleId, handleType });\n function onPointerMove(event) {\n const { transform } = getState();\n connectionPosition = getEventPosition(event, containerBounds);\n const { handle, validHandleResult } = getClosestHandle(event, doc, pointToRendererPoint(connectionPosition, transform, false, [1, 1]), connectionRadius, handleLookup, (handle) => isValidHandle(handle, connectionMode, nodeId, handleId, isTarget ? 'target' : 'source', isValidConnection, doc));\n closestHandle = handle;\n if (!autoPanStarted) {\n autoPan();\n autoPanStarted = true;\n }\n handleDomNode = validHandleResult.handleDomNode;\n connection = validHandleResult.connection;\n isValid = validHandleResult.isValid;\n setState({\n connectionPosition: closestHandle && isValid\n ? rendererPointToPoint({\n x: closestHandle.x,\n y: closestHandle.y,\n }, transform)\n : connectionPosition,\n connectionStatus: getConnectionStatus(!!closestHandle, isValid),\n connectionEndHandle: validHandleResult.endHandle,\n });\n if (!closestHandle && !isValid && !handleDomNode) {\n return resetRecentHandle(prevActiveHandle);\n }\n if (connection.source !== connection.target && handleDomNode) {\n resetRecentHandle(prevActiveHandle);\n prevActiveHandle = handleDomNode;\n // @todo: remove the old class names \"react-flow__handle-\" in the next major version\n handleDomNode.classList.add('connecting', 'react-flow__handle-connecting');\n handleDomNode.classList.toggle('valid', isValid);\n handleDomNode.classList.toggle('react-flow__handle-valid', isValid);\n }\n }\n function onPointerUp(event) {\n if ((closestHandle || handleDomNode) && connection && isValid) {\n onConnect?.(connection);\n }\n // it's important to get a fresh reference from the store here\n // in order to get the latest state of onConnectEnd\n getState().onConnectEnd?.(event);\n if (edgeUpdaterType) {\n onReconnectEnd?.(event);\n }\n resetRecentHandle(prevActiveHandle);\n cancelConnection();\n cancelAnimationFrame(autoPanId);\n autoPanStarted = false;\n isValid = false;\n connection = null;\n handleDomNode = null;\n doc.removeEventListener('mousemove', onPointerMove);\n doc.removeEventListener('mouseup', onPointerUp);\n doc.removeEventListener('touchmove', onPointerMove);\n doc.removeEventListener('touchend', onPointerUp);\n }\n doc.addEventListener('mousemove', onPointerMove);\n doc.addEventListener('mouseup', onPointerUp);\n doc.addEventListener('touchmove', onPointerMove);\n doc.addEventListener('touchend', onPointerUp);\n}\n\nconst alwaysValid = () => true;\nconst selector$f = (s) => ({\n connectionStartHandle: s.connectionStartHandle,\n connectOnClick: s.connectOnClick,\n noPanClassName: s.noPanClassName,\n});\nconst connectingSelector = (nodeId, handleId, type) => (state) => {\n const { connectionStartHandle: startHandle, connectionEndHandle: endHandle, connectionClickStartHandle: clickHandle, } = state;\n return {\n connecting: (startHandle?.nodeId === nodeId && startHandle?.handleId === handleId && startHandle?.type === type) ||\n (endHandle?.nodeId === nodeId && endHandle?.handleId === handleId && endHandle?.type === type),\n clickConnecting: clickHandle?.nodeId === nodeId && clickHandle?.handleId === handleId && clickHandle?.type === type,\n };\n};\nconst Handle = forwardRef(({ type = 'source', position = Position.Top, isValidConnection, isConnectable = true, isConnectableStart = true, isConnectableEnd = true, id, onConnect, children, className, onMouseDown, onTouchStart, ...rest }, ref) => {\n const handleId = id || null;\n const isTarget = type === 'target';\n const store = useStoreApi();\n const nodeId = useNodeId();\n const { connectOnClick, noPanClassName } = useStore(selector$f, shallow);\n const { connecting, clickConnecting } = useStore(connectingSelector(nodeId, handleId, type), shallow);\n if (!nodeId) {\n store.getState().onError?.('010', errorMessages['error010']());\n }\n const onConnectExtended = (params) => {\n const { defaultEdgeOptions, onConnect: onConnectAction, hasDefaultEdges } = store.getState();\n const edgeParams = {\n ...defaultEdgeOptions,\n ...params,\n };\n if (hasDefaultEdges) {\n const { edges, setEdges } = store.getState();\n setEdges(addEdge(edgeParams, edges));\n }\n onConnectAction?.(edgeParams);\n onConnect?.(edgeParams);\n };\n const onPointerDown = (event) => {\n if (!nodeId) {\n return;\n }\n const isMouseTriggered = isMouseEvent(event);\n if (isConnectableStart && ((isMouseTriggered && event.button === 0) || !isMouseTriggered)) {\n handlePointerDown({\n event,\n handleId,\n nodeId,\n onConnect: onConnectExtended,\n isTarget,\n getState: store.getState,\n setState: store.setState,\n isValidConnection: isValidConnection || store.getState().isValidConnection || alwaysValid,\n });\n }\n if (isMouseTriggered) {\n onMouseDown?.(event);\n }\n else {\n onTouchStart?.(event);\n }\n };\n const onClick = (event) => {\n const { onClickConnectStart, onClickConnectEnd, connectionClickStartHandle, connectionMode, isValidConnection: isValidConnectionStore, } = store.getState();\n if (!nodeId || (!connectionClickStartHandle && !isConnectableStart)) {\n return;\n }\n if (!connectionClickStartHandle) {\n onClickConnectStart?.(event, { nodeId, handleId, handleType: type });\n store.setState({ connectionClickStartHandle: { nodeId, type, handleId } });\n return;\n }\n const doc = getHostForElement(event.target);\n const isValidConnectionHandler = isValidConnection || isValidConnectionStore || alwaysValid;\n const { connection, isValid } = isValidHandle({\n nodeId,\n id: handleId,\n type,\n }, connectionMode, connectionClickStartHandle.nodeId, connectionClickStartHandle.handleId || null, connectionClickStartHandle.type, isValidConnectionHandler, doc);\n if (isValid) {\n onConnectExtended(connection);\n }\n onClickConnectEnd?.(event);\n store.setState({ connectionClickStartHandle: null });\n };\n return (React.createElement(\"div\", { \"data-handleid\": handleId, \"data-nodeid\": nodeId, \"data-handlepos\": position, \"data-id\": `${nodeId}-${handleId}-${type}`, className: cc([\n 'react-flow__handle',\n `react-flow__handle-${position}`,\n 'nodrag',\n noPanClassName,\n className,\n {\n source: !isTarget,\n target: isTarget,\n connectable: isConnectable,\n connectablestart: isConnectableStart,\n connectableend: isConnectableEnd,\n connecting: clickConnecting,\n // this class is used to style the handle when the user is connecting\n connectionindicator: isConnectable && ((isConnectableStart && !connecting) || (isConnectableEnd && connecting)),\n },\n ]), onMouseDown: onPointerDown, onTouchStart: onPointerDown, onClick: connectOnClick ? onClick : undefined, ref: ref, ...rest }, children));\n});\nHandle.displayName = 'Handle';\nvar Handle$1 = memo(Handle);\n\nconst DefaultNode = ({ data, isConnectable, targetPosition = Position.Top, sourcePosition = Position.Bottom, }) => {\n return (React.createElement(React.Fragment, null,\n React.createElement(Handle$1, { type: \"target\", position: targetPosition, isConnectable: isConnectable }),\n data?.label,\n React.createElement(Handle$1, { type: \"source\", position: sourcePosition, isConnectable: isConnectable })));\n};\nDefaultNode.displayName = 'DefaultNode';\nvar DefaultNode$1 = memo(DefaultNode);\n\nconst InputNode = ({ data, isConnectable, sourcePosition = Position.Bottom }) => (React.createElement(React.Fragment, null,\n data?.label,\n React.createElement(Handle$1, { type: \"source\", position: sourcePosition, isConnectable: isConnectable })));\nInputNode.displayName = 'InputNode';\nvar InputNode$1 = memo(InputNode);\n\nconst OutputNode = ({ data, isConnectable, targetPosition = Position.Top }) => (React.createElement(React.Fragment, null,\n React.createElement(Handle$1, { type: \"target\", position: targetPosition, isConnectable: isConnectable }),\n data?.label));\nOutputNode.displayName = 'OutputNode';\nvar OutputNode$1 = memo(OutputNode);\n\nconst GroupNode = () => null;\nGroupNode.displayName = 'GroupNode';\n\nconst selector$e = (s) => ({\n selectedNodes: s.getNodes().filter((n) => n.selected),\n selectedEdges: s.edges.filter((e) => e.selected).map((e) => ({ ...e })),\n});\nconst selectId = (obj) => obj.id;\nfunction areEqual(a, b) {\n return (shallow(a.selectedNodes.map(selectId), b.selectedNodes.map(selectId)) &&\n shallow(a.selectedEdges.map(selectId), b.selectedEdges.map(selectId)));\n}\n// This is just a helper component for calling the onSelectionChange listener.\n// @TODO: Now that we have the onNodesChange and on EdgesChange listeners, do we still need this component?\nconst SelectionListener = memo(({ onSelectionChange }) => {\n const store = useStoreApi();\n const { selectedNodes, selectedEdges } = useStore(selector$e, areEqual);\n useEffect(() => {\n const params = { nodes: selectedNodes, edges: selectedEdges };\n onSelectionChange?.(params);\n store.getState().onSelectionChange.forEach((fn) => fn(params));\n }, [selectedNodes, selectedEdges, onSelectionChange]);\n return null;\n});\nSelectionListener.displayName = 'SelectionListener';\nconst changeSelector = (s) => !!s.onSelectionChange;\nfunction Wrapper$1({ onSelectionChange }) {\n const storeHasSelectionChange = useStore(changeSelector);\n if (onSelectionChange || storeHasSelectionChange) {\n return React.createElement(SelectionListener, { onSelectionChange: onSelectionChange });\n }\n return null;\n}\n\nconst selector$d = (s) => ({\n setNodes: s.setNodes,\n setEdges: s.setEdges,\n setDefaultNodesAndEdges: s.setDefaultNodesAndEdges,\n setMinZoom: s.setMinZoom,\n setMaxZoom: s.setMaxZoom,\n setTranslateExtent: s.setTranslateExtent,\n setNodeExtent: s.setNodeExtent,\n reset: s.reset,\n});\nfunction useStoreUpdater(value, setStoreState) {\n useEffect(() => {\n if (typeof value !== 'undefined') {\n setStoreState(value);\n }\n }, [value]);\n}\n// updates with values in store that don't have a dedicated setter function\nfunction useDirectStoreUpdater(key, value, setState) {\n useEffect(() => {\n if (typeof value !== 'undefined') {\n setState({ [key]: value });\n }\n }, [value]);\n}\nconst StoreUpdater = ({ nodes, edges, defaultNodes, defaultEdges, onConnect, onConnectStart, onConnectEnd, onClickConnectStart, onClickConnectEnd, nodesDraggable, nodesConnectable, nodesFocusable, edgesFocusable, edgesUpdatable, elevateNodesOnSelect, minZoom, maxZoom, nodeExtent, onNodesChange, onEdgesChange, elementsSelectable, connectionMode, snapGrid, snapToGrid, translateExtent, connectOnClick, defaultEdgeOptions, fitView, fitViewOptions, onNodesDelete, onEdgesDelete, onNodeDrag, onNodeDragStart, onNodeDragStop, onSelectionDrag, onSelectionDragStart, onSelectionDragStop, noPanClassName, nodeOrigin, rfId, autoPanOnConnect, autoPanOnNodeDrag, onError, connectionRadius, isValidConnection, nodeDragThreshold, }) => {\n const { setNodes, setEdges, setDefaultNodesAndEdges, setMinZoom, setMaxZoom, setTranslateExtent, setNodeExtent, reset, } = useStore(selector$d, shallow);\n const store = useStoreApi();\n useEffect(() => {\n const edgesWithDefaults = defaultEdges?.map((e) => ({ ...e, ...defaultEdgeOptions }));\n setDefaultNodesAndEdges(defaultNodes, edgesWithDefaults);\n return () => {\n reset();\n };\n }, []);\n useDirectStoreUpdater('defaultEdgeOptions', defaultEdgeOptions, store.setState);\n useDirectStoreUpdater('connectionMode', connectionMode, store.setState);\n useDirectStoreUpdater('onConnect', onConnect, store.setState);\n useDirectStoreUpdater('onConnectStart', onConnectStart, store.setState);\n useDirectStoreUpdater('onConnectEnd', onConnectEnd, store.setState);\n useDirectStoreUpdater('onClickConnectStart', onClickConnectStart, store.setState);\n useDirectStoreUpdater('onClickConnectEnd', onClickConnectEnd, store.setState);\n useDirectStoreUpdater('nodesDraggable', nodesDraggable, store.setState);\n useDirectStoreUpdater('nodesConnectable', nodesConnectable, store.setState);\n useDirectStoreUpdater('nodesFocusable', nodesFocusable, store.setState);\n useDirectStoreUpdater('edgesFocusable', edgesFocusable, store.setState);\n useDirectStoreUpdater('edgesUpdatable', edgesUpdatable, store.setState);\n useDirectStoreUpdater('elementsSelectable', elementsSelectable, store.setState);\n useDirectStoreUpdater('elevateNodesOnSelect', elevateNodesOnSelect, store.setState);\n useDirectStoreUpdater('snapToGrid', snapToGrid, store.setState);\n useDirectStoreUpdater('snapGrid', snapGrid, store.setState);\n useDirectStoreUpdater('onNodesChange', onNodesChange, store.setState);\n useDirectStoreUpdater('onEdgesChange', onEdgesChange, store.setState);\n useDirectStoreUpdater('connectOnClick', connectOnClick, store.setState);\n useDirectStoreUpdater('fitViewOnInit', fitView, store.setState);\n useDirectStoreUpdater('fitViewOnInitOptions', fitViewOptions, store.setState);\n useDirectStoreUpdater('onNodesDelete', onNodesDelete, store.setState);\n useDirectStoreUpdater('onEdgesDelete', onEdgesDelete, store.setState);\n useDirectStoreUpdater('onNodeDrag', onNodeDrag, store.setState);\n useDirectStoreUpdater('onNodeDragStart', onNodeDragStart, store.setState);\n useDirectStoreUpdater('onNodeDragStop', onNodeDragStop, store.setState);\n useDirectStoreUpdater('onSelectionDrag', onSelectionDrag, store.setState);\n useDirectStoreUpdater('onSelectionDragStart', onSelectionDragStart, store.setState);\n useDirectStoreUpdater('onSelectionDragStop', onSelectionDragStop, store.setState);\n useDirectStoreUpdater('noPanClassName', noPanClassName, store.setState);\n useDirectStoreUpdater('nodeOrigin', nodeOrigin, store.setState);\n useDirectStoreUpdater('rfId', rfId, store.setState);\n useDirectStoreUpdater('autoPanOnConnect', autoPanOnConnect, store.setState);\n useDirectStoreUpdater('autoPanOnNodeDrag', autoPanOnNodeDrag, store.setState);\n useDirectStoreUpdater('onError', onError, store.setState);\n useDirectStoreUpdater('connectionRadius', connectionRadius, store.setState);\n useDirectStoreUpdater('isValidConnection', isValidConnection, store.setState);\n useDirectStoreUpdater('nodeDragThreshold', nodeDragThreshold, store.setState);\n useStoreUpdater(nodes, setNodes);\n useStoreUpdater(edges, setEdges);\n useStoreUpdater(minZoom, setMinZoom);\n useStoreUpdater(maxZoom, setMaxZoom);\n useStoreUpdater(translateExtent, setTranslateExtent);\n useStoreUpdater(nodeExtent, setNodeExtent);\n return null;\n};\n\nconst style = { display: 'none' };\nconst ariaLiveStyle = {\n position: 'absolute',\n width: 1,\n height: 1,\n margin: -1,\n border: 0,\n padding: 0,\n overflow: 'hidden',\n clip: 'rect(0px, 0px, 0px, 0px)',\n clipPath: 'inset(100%)',\n};\nconst ARIA_NODE_DESC_KEY = 'react-flow__node-desc';\nconst ARIA_EDGE_DESC_KEY = 'react-flow__edge-desc';\nconst ARIA_LIVE_MESSAGE = 'react-flow__aria-live';\nconst selector$c = (s) => s.ariaLiveMessage;\nfunction AriaLiveMessage({ rfId }) {\n const ariaLiveMessage = useStore(selector$c);\n return (React.createElement(\"div\", { id: `${ARIA_LIVE_MESSAGE}-${rfId}`, \"aria-live\": \"assertive\", \"aria-atomic\": \"true\", style: ariaLiveStyle }, ariaLiveMessage));\n}\nfunction A11yDescriptions({ rfId, disableKeyboardA11y }) {\n return (React.createElement(React.Fragment, null,\n React.createElement(\"div\", { id: `${ARIA_NODE_DESC_KEY}-${rfId}`, style: style },\n \"Press enter or space to select a node.\",\n !disableKeyboardA11y && 'You can then use the arrow keys to move the node around.',\n \" Press delete to remove it and escape to cancel.\",\n ' '),\n React.createElement(\"div\", { id: `${ARIA_EDGE_DESC_KEY}-${rfId}`, style: style }, \"Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.\"),\n !disableKeyboardA11y && React.createElement(AriaLiveMessage, { rfId: rfId })));\n}\n\n// the keycode can be a string 'a' or an array of strings ['a', 'a+d']\n// a string means a single key 'a' or a combination when '+' is used 'a+d'\n// an array means different possibilities. Explainer: ['a', 'd+s'] here the\n// user can use the single key 'a' or the combination 'd' + 's'\nvar useKeyPress = (keyCode = null, options = { actInsideInputWithModifier: true }) => {\n const [keyPressed, setKeyPressed] = useState(false);\n // we need to remember if a modifier key is pressed in order to track it\n const modifierPressed = useRef(false);\n // we need to remember the pressed keys in order to support combinations\n const pressedKeys = useRef(new Set([]));\n // keyCodes = array with single keys [['a']] or key combinations [['a', 's']]\n // keysToWatch = array with all keys flattened ['a', 'd', 'ShiftLeft']\n // used to check if we store event.code or event.key. When the code is in the list of keysToWatch\n // we use the code otherwise the key. Explainer: When you press the left \"command\" key, the code is \"MetaLeft\"\n // and the key is \"Meta\". We want users to be able to pass keys and codes so we assume that the key is meant when\n // we can't find it in the list of keysToWatch.\n const [keyCodes, keysToWatch] = useMemo(() => {\n if (keyCode !== null) {\n const keyCodeArr = Array.isArray(keyCode) ? keyCode : [keyCode];\n const keys = keyCodeArr.filter((kc) => typeof kc === 'string').map((kc) => kc.split('+'));\n const keysFlat = keys.reduce((res, item) => res.concat(...item), []);\n return [keys, keysFlat];\n }\n return [[], []];\n }, [keyCode]);\n useEffect(() => {\n const doc = typeof document !== 'undefined' ? document : null;\n const target = options?.target || doc;\n if (keyCode !== null) {\n const downHandler = (event) => {\n modifierPressed.current = event.ctrlKey || event.metaKey || event.shiftKey;\n const preventAction = (!modifierPressed.current || (modifierPressed.current && !options.actInsideInputWithModifier)) &&\n isInputDOMNode(event);\n if (preventAction) {\n return false;\n }\n const keyOrCode = useKeyOrCode(event.code, keysToWatch);\n pressedKeys.current.add(event[keyOrCode]);\n if (isMatchingKey(keyCodes, pressedKeys.current, false)) {\n event.preventDefault();\n setKeyPressed(true);\n }\n };\n const upHandler = (event) => {\n const preventAction = (!modifierPressed.current || (modifierPressed.current && !options.actInsideInputWithModifier)) &&\n isInputDOMNode(event);\n if (preventAction) {\n return false;\n }\n const keyOrCode = useKeyOrCode(event.code, keysToWatch);\n if (isMatchingKey(keyCodes, pressedKeys.current, true)) {\n setKeyPressed(false);\n pressedKeys.current.clear();\n }\n else {\n pressedKeys.current.delete(event[keyOrCode]);\n }\n // fix for Mac: when cmd key is pressed, keyup is not triggered for any other key, see: https://stackoverflow.com/questions/27380018/when-cmd-key-is-kept-pressed-keyup-is-not-triggered-for-any-other-key\n if (event.key === 'Meta') {\n pressedKeys.current.clear();\n }\n modifierPressed.current = false;\n };\n const resetHandler = () => {\n pressedKeys.current.clear();\n setKeyPressed(false);\n };\n target?.addEventListener('keydown', downHandler);\n target?.addEventListener('keyup', upHandler);\n window.addEventListener('blur', resetHandler);\n return () => {\n target?.removeEventListener('keydown', downHandler);\n target?.removeEventListener('keyup', upHandler);\n window.removeEventListener('blur', resetHandler);\n };\n }\n }, [keyCode, setKeyPressed]);\n return keyPressed;\n};\n// utils\nfunction isMatchingKey(keyCodes, pressedKeys, isUp) {\n return (keyCodes\n // we only want to compare same sizes of keyCode definitions\n // and pressed keys. When the user specified 'Meta' as a key somewhere\n // this would also be truthy without this filter when user presses 'Meta' + 'r'\n .filter((keys) => isUp || keys.length === pressedKeys.size)\n // since we want to support multiple possibilities only one of the\n // combinations need to be part of the pressed keys\n .some((keys) => keys.every((k) => pressedKeys.has(k))));\n}\nfunction useKeyOrCode(eventCode, keysToWatch) {\n return keysToWatch.includes(eventCode) ? 'code' : 'key';\n}\n\nfunction calculateXYZPosition(node, nodeInternals, result, nodeOrigin) {\n const parentId = node.parentNode || node.parentId;\n if (!parentId) {\n return result;\n }\n const parentNode = nodeInternals.get(parentId);\n const parentNodePosition = getNodePositionWithOrigin(parentNode, nodeOrigin);\n return calculateXYZPosition(parentNode, nodeInternals, {\n x: (result.x ?? 0) + parentNodePosition.x,\n y: (result.y ?? 0) + parentNodePosition.y,\n z: (parentNode[internalsSymbol]?.z ?? 0) > (result.z ?? 0) ? parentNode[internalsSymbol]?.z ?? 0 : result.z ?? 0,\n }, nodeOrigin);\n}\nfunction updateAbsoluteNodePositions(nodeInternals, nodeOrigin, parentNodes) {\n nodeInternals.forEach((node) => {\n const parentId = node.parentNode || node.parentId;\n if (parentId && !nodeInternals.has(parentId)) {\n throw new Error(`Parent node ${parentId} not found`);\n }\n if (parentId || parentNodes?.[node.id]) {\n const { x, y, z } = calculateXYZPosition(node, nodeInternals, {\n ...node.position,\n z: node[internalsSymbol]?.z ?? 0,\n }, nodeOrigin);\n node.positionAbsolute = {\n x,\n y,\n };\n node[internalsSymbol].z = z;\n if (parentNodes?.[node.id]) {\n node[internalsSymbol].isParent = true;\n }\n }\n });\n}\nfunction createNodeInternals(nodes, nodeInternals, nodeOrigin, elevateNodesOnSelect) {\n const nextNodeInternals = new Map();\n const parentNodes = {};\n const selectedNodeZ = elevateNodesOnSelect ? 1000 : 0;\n nodes.forEach((node) => {\n const z = (isNumeric(node.zIndex) ? node.zIndex : 0) + (node.selected ? selectedNodeZ : 0);\n const currInternals = nodeInternals.get(node.id);\n const internals = {\n ...node,\n positionAbsolute: {\n x: node.position.x,\n y: node.position.y,\n },\n };\n const parentId = node.parentNode || node.parentId;\n if (parentId) {\n parentNodes[parentId] = true;\n }\n const resetHandleBounds = currInternals?.type && currInternals?.type !== node.type;\n Object.defineProperty(internals, internalsSymbol, {\n enumerable: false,\n value: {\n handleBounds: resetHandleBounds ? undefined : currInternals?.[internalsSymbol]?.handleBounds,\n z,\n },\n });\n nextNodeInternals.set(node.id, internals);\n });\n updateAbsoluteNodePositions(nextNodeInternals, nodeOrigin, parentNodes);\n return nextNodeInternals;\n}\nfunction fitView(get, options = {}) {\n const { getNodes, width, height, minZoom, maxZoom, d3Zoom, d3Selection, fitViewOnInitDone, fitViewOnInit, nodeOrigin, } = get();\n const isInitialFitView = options.initial && !fitViewOnInitDone && fitViewOnInit;\n const d3initialized = d3Zoom && d3Selection;\n if (d3initialized && (isInitialFitView || !options.initial)) {\n const nodes = getNodes().filter((n) => {\n const isVisible = options.includeHiddenNodes ? n.width && n.height : !n.hidden;\n if (options.nodes?.length) {\n return isVisible && options.nodes.some((optionNode) => optionNode.id === n.id);\n }\n return isVisible;\n });\n const nodesInitialized = nodes.every((n) => n.width && n.height);\n if (nodes.length > 0 && nodesInitialized) {\n const bounds = getNodesBounds(nodes, nodeOrigin);\n const { x, y, zoom } = getViewportForBounds(bounds, width, height, options.minZoom ?? minZoom, options.maxZoom ?? maxZoom, options.padding ?? 0.1);\n const nextTransform = zoomIdentity.translate(x, y).scale(zoom);\n if (typeof options.duration === 'number' && options.duration > 0) {\n d3Zoom.transform(getD3Transition(d3Selection, options.duration), nextTransform);\n }\n else {\n d3Zoom.transform(d3Selection, nextTransform);\n }\n return true;\n }\n }\n return false;\n}\nfunction handleControlledNodeSelectionChange(nodeChanges, nodeInternals) {\n nodeChanges.forEach((change) => {\n const node = nodeInternals.get(change.id);\n if (node) {\n nodeInternals.set(node.id, {\n ...node,\n [internalsSymbol]: node[internalsSymbol],\n selected: change.selected,\n });\n }\n });\n return new Map(nodeInternals);\n}\nfunction handleControlledEdgeSelectionChange(edgeChanges, edges) {\n return edges.map((e) => {\n const change = edgeChanges.find((change) => change.id === e.id);\n if (change) {\n e.selected = change.selected;\n }\n return e;\n });\n}\nfunction updateNodesAndEdgesSelections({ changedNodes, changedEdges, get, set }) {\n const { nodeInternals, edges, onNodesChange, onEdgesChange, hasDefaultNodes, hasDefaultEdges } = get();\n if (changedNodes?.length) {\n if (hasDefaultNodes) {\n set({ nodeInternals: handleControlledNodeSelectionChange(changedNodes, nodeInternals) });\n }\n onNodesChange?.(changedNodes);\n }\n if (changedEdges?.length) {\n if (hasDefaultEdges) {\n set({ edges: handleControlledEdgeSelectionChange(changedEdges, edges) });\n }\n onEdgesChange?.(changedEdges);\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nconst noop = () => { };\nconst initialViewportHelper = {\n zoomIn: noop,\n zoomOut: noop,\n zoomTo: noop,\n getZoom: () => 1,\n setViewport: noop,\n getViewport: () => ({ x: 0, y: 0, zoom: 1 }),\n fitView: () => false,\n setCenter: noop,\n fitBounds: noop,\n project: (position) => position,\n screenToFlowPosition: (position) => position,\n flowToScreenPosition: (position) => position,\n viewportInitialized: false,\n};\nconst selector$b = (s) => ({\n d3Zoom: s.d3Zoom,\n d3Selection: s.d3Selection,\n});\nconst useViewportHelper = () => {\n const store = useStoreApi();\n const { d3Zoom, d3Selection } = useStore(selector$b, shallow);\n const viewportHelperFunctions = useMemo(() => {\n if (d3Selection && d3Zoom) {\n return {\n zoomIn: (options) => d3Zoom.scaleBy(getD3Transition(d3Selection, options?.duration), 1.2),\n zoomOut: (options) => d3Zoom.scaleBy(getD3Transition(d3Selection, options?.duration), 1 / 1.2),\n zoomTo: (zoomLevel, options) => d3Zoom.scaleTo(getD3Transition(d3Selection, options?.duration), zoomLevel),\n getZoom: () => store.getState().transform[2],\n setViewport: (transform, options) => {\n const [x, y, zoom] = store.getState().transform;\n const nextTransform = zoomIdentity\n .translate(transform.x ?? x, transform.y ?? y)\n .scale(transform.zoom ?? zoom);\n d3Zoom.transform(getD3Transition(d3Selection, options?.duration), nextTransform);\n },\n getViewport: () => {\n const [x, y, zoom] = store.getState().transform;\n return { x, y, zoom };\n },\n fitView: (options) => fitView(store.getState, options),\n setCenter: (x, y, options) => {\n const { width, height, maxZoom } = store.getState();\n const nextZoom = typeof options?.zoom !== 'undefined' ? options.zoom : maxZoom;\n const centerX = width / 2 - x * nextZoom;\n const centerY = height / 2 - y * nextZoom;\n const transform = zoomIdentity.translate(centerX, centerY).scale(nextZoom);\n d3Zoom.transform(getD3Transition(d3Selection, options?.duration), transform);\n },\n fitBounds: (bounds, options) => {\n const { width, height, minZoom, maxZoom } = store.getState();\n const { x, y, zoom } = getViewportForBounds(bounds, width, height, minZoom, maxZoom, options?.padding ?? 0.1);\n const transform = zoomIdentity.translate(x, y).scale(zoom);\n d3Zoom.transform(getD3Transition(d3Selection, options?.duration), transform);\n },\n // @deprecated Use `screenToFlowPosition`.\n project: (position) => {\n const { transform, snapToGrid, snapGrid } = store.getState();\n console.warn('[DEPRECATED] `project` is deprecated. Instead use `screenToFlowPosition`. There is no need to subtract the react flow bounds anymore! https://reactflow.dev/api-reference/types/react-flow-instance#screen-to-flow-position');\n return pointToRendererPoint(position, transform, snapToGrid, snapGrid);\n },\n screenToFlowPosition: (position) => {\n const { transform, snapToGrid, snapGrid, domNode } = store.getState();\n if (!domNode) {\n return position;\n }\n const { x: domX, y: domY } = domNode.getBoundingClientRect();\n const relativePosition = {\n x: position.x - domX,\n y: position.y - domY,\n };\n return pointToRendererPoint(relativePosition, transform, snapToGrid, snapGrid);\n },\n flowToScreenPosition: (position) => {\n const { transform, domNode } = store.getState();\n if (!domNode) {\n return position;\n }\n const { x: domX, y: domY } = domNode.getBoundingClientRect();\n const rendererPosition = rendererPointToPoint(position, transform);\n return {\n x: rendererPosition.x + domX,\n y: rendererPosition.y + domY,\n };\n },\n viewportInitialized: true,\n };\n }\n return initialViewportHelper;\n }, [d3Zoom, d3Selection]);\n return viewportHelperFunctions;\n};\n\n/* eslint-disable-next-line @typescript-eslint/no-explicit-any */\nfunction useReactFlow() {\n const viewportHelper = useViewportHelper();\n const store = useStoreApi();\n const getNodes = useCallback(() => {\n return store\n .getState()\n .getNodes()\n .map((n) => ({ ...n }));\n }, []);\n const getNode = useCallback((id) => {\n return store.getState().nodeInternals.get(id);\n }, []);\n const getEdges = useCallback(() => {\n const { edges = [] } = store.getState();\n return edges.map((e) => ({ ...e }));\n }, []);\n const getEdge = useCallback((id) => {\n const { edges = [] } = store.getState();\n return edges.find((e) => e.id === id);\n }, []);\n const setNodes = useCallback((payload) => {\n const { getNodes, setNodes, hasDefaultNodes, onNodesChange } = store.getState();\n const nodes = getNodes();\n const nextNodes = typeof payload === 'function' ? payload(nodes) : payload;\n if (hasDefaultNodes) {\n setNodes(nextNodes);\n }\n else if (onNodesChange) {\n const changes = nextNodes.length === 0\n ? nodes.map((node) => ({ type: 'remove', id: node.id }))\n : nextNodes.map((node) => ({ item: node, type: 'reset' }));\n onNodesChange(changes);\n }\n }, []);\n const setEdges = useCallback((payload) => {\n const { edges = [], setEdges, hasDefaultEdges, onEdgesChange } = store.getState();\n const nextEdges = typeof payload === 'function' ? payload(edges) : payload;\n if (hasDefaultEdges) {\n setEdges(nextEdges);\n }\n else if (onEdgesChange) {\n const changes = nextEdges.length === 0\n ? edges.map((edge) => ({ type: 'remove', id: edge.id }))\n : nextEdges.map((edge) => ({ item: edge, type: 'reset' }));\n onEdgesChange(changes);\n }\n }, []);\n const addNodes = useCallback((payload) => {\n const nodes = Array.isArray(payload) ? payload : [payload];\n const { getNodes, setNodes, hasDefaultNodes, onNodesChange } = store.getState();\n if (hasDefaultNodes) {\n const currentNodes = getNodes();\n const nextNodes = [...currentNodes, ...nodes];\n setNodes(nextNodes);\n }\n else if (onNodesChange) {\n const changes = nodes.map((node) => ({ item: node, type: 'add' }));\n onNodesChange(changes);\n }\n }, []);\n const addEdges = useCallback((payload) => {\n const nextEdges = Array.isArray(payload) ? payload : [payload];\n const { edges = [], setEdges, hasDefaultEdges, onEdgesChange } = store.getState();\n if (hasDefaultEdges) {\n setEdges([...edges, ...nextEdges]);\n }\n else if (onEdgesChange) {\n const changes = nextEdges.map((edge) => ({ item: edge, type: 'add' }));\n onEdgesChange(changes);\n }\n }, []);\n const toObject = useCallback(() => {\n const { getNodes, edges = [], transform } = store.getState();\n const [x, y, zoom] = transform;\n return {\n nodes: getNodes().map((n) => ({ ...n })),\n edges: edges.map((e) => ({ ...e })),\n viewport: {\n x,\n y,\n zoom,\n },\n };\n }, []);\n const deleteElements = useCallback(({ nodes: nodesDeleted, edges: edgesDeleted }) => {\n const { nodeInternals, getNodes, edges, hasDefaultNodes, hasDefaultEdges, onNodesDelete, onEdgesDelete, onNodesChange, onEdgesChange, } = store.getState();\n const nodeIds = (nodesDeleted || []).map((node) => node.id);\n const edgeIds = (edgesDeleted || []).map((edge) => edge.id);\n const nodesToRemove = getNodes().reduce((res, node) => {\n const parentId = node.parentNode || node.parentId;\n const parentHit = !nodeIds.includes(node.id) && parentId && res.find((n) => n.id === parentId);\n const deletable = typeof node.deletable === 'boolean' ? node.deletable : true;\n if (deletable && (nodeIds.includes(node.id) || parentHit)) {\n res.push(node);\n }\n return res;\n }, []);\n const deletableEdges = edges.filter((e) => (typeof e.deletable === 'boolean' ? e.deletable : true));\n const initialHitEdges = deletableEdges.filter((e) => edgeIds.includes(e.id));\n if (nodesToRemove || initialHitEdges) {\n const connectedEdges = getConnectedEdges(nodesToRemove, deletableEdges);\n const edgesToRemove = [...initialHitEdges, ...connectedEdges];\n const edgeIdsToRemove = edgesToRemove.reduce((res, edge) => {\n if (!res.includes(edge.id)) {\n res.push(edge.id);\n }\n return res;\n }, []);\n if (hasDefaultEdges || hasDefaultNodes) {\n if (hasDefaultEdges) {\n store.setState({\n edges: edges.filter((e) => !edgeIdsToRemove.includes(e.id)),\n });\n }\n if (hasDefaultNodes) {\n nodesToRemove.forEach((node) => {\n nodeInternals.delete(node.id);\n });\n store.setState({\n nodeInternals: new Map(nodeInternals),\n });\n }\n }\n if (edgeIdsToRemove.length > 0) {\n onEdgesDelete?.(edgesToRemove);\n if (onEdgesChange) {\n onEdgesChange(edgeIdsToRemove.map((id) => ({\n id,\n type: 'remove',\n })));\n }\n }\n if (nodesToRemove.length > 0) {\n onNodesDelete?.(nodesToRemove);\n if (onNodesChange) {\n const nodeChanges = nodesToRemove.map((n) => ({ id: n.id, type: 'remove' }));\n onNodesChange(nodeChanges);\n }\n }\n }\n }, []);\n const getNodeRect = useCallback((nodeOrRect) => {\n const isRect = isRectObject(nodeOrRect);\n const node = isRect ? null : store.getState().nodeInternals.get(nodeOrRect.id);\n if (!isRect && !node) {\n return [null, null, isRect];\n }\n const nodeRect = isRect ? nodeOrRect : nodeToRect(node);\n return [nodeRect, node, isRect];\n }, []);\n const getIntersectingNodes = useCallback((nodeOrRect, partially = true, nodes) => {\n const [nodeRect, node, isRect] = getNodeRect(nodeOrRect);\n if (!nodeRect) {\n return [];\n }\n return (nodes || store.getState().getNodes()).filter((n) => {\n if (!isRect && (n.id === node.id || !n.positionAbsolute)) {\n return false;\n }\n const currNodeRect = nodeToRect(n);\n const overlappingArea = getOverlappingArea(currNodeRect, nodeRect);\n const partiallyVisible = partially && overlappingArea > 0;\n return partiallyVisible || overlappingArea >= nodeRect.width * nodeRect.height;\n });\n }, []);\n const isNodeIntersecting = useCallback((nodeOrRect, area, partially = true) => {\n const [nodeRect] = getNodeRect(nodeOrRect);\n if (!nodeRect) {\n return false;\n }\n const overlappingArea = getOverlappingArea(nodeRect, area);\n const partiallyVisible = partially && overlappingArea > 0;\n return partiallyVisible || overlappingArea >= nodeRect.width * nodeRect.height;\n }, []);\n return useMemo(() => {\n return {\n ...viewportHelper,\n getNodes,\n getNode,\n getEdges,\n getEdge,\n setNodes,\n setEdges,\n addNodes,\n addEdges,\n toObject,\n deleteElements,\n getIntersectingNodes,\n isNodeIntersecting,\n };\n }, [\n viewportHelper,\n getNodes,\n getNode,\n getEdges,\n getEdge,\n setNodes,\n setEdges,\n addNodes,\n addEdges,\n toObject,\n deleteElements,\n getIntersectingNodes,\n isNodeIntersecting,\n ]);\n}\n\nconst deleteKeyOptions = { actInsideInputWithModifier: false };\nvar useGlobalKeyHandler = ({ deleteKeyCode, multiSelectionKeyCode }) => {\n const store = useStoreApi();\n const { deleteElements } = useReactFlow();\n const deleteKeyPressed = useKeyPress(deleteKeyCode, deleteKeyOptions);\n const multiSelectionKeyPressed = useKeyPress(multiSelectionKeyCode);\n useEffect(() => {\n if (deleteKeyPressed) {\n const { edges, getNodes } = store.getState();\n const selectedNodes = getNodes().filter((node) => node.selected);\n const selectedEdges = edges.filter((edge) => edge.selected);\n deleteElements({ nodes: selectedNodes, edges: selectedEdges });\n store.setState({ nodesSelectionActive: false });\n }\n }, [deleteKeyPressed]);\n useEffect(() => {\n store.setState({ multiSelectionActive: multiSelectionKeyPressed });\n }, [multiSelectionKeyPressed]);\n};\n\nfunction useResizeHandler(rendererNode) {\n const store = useStoreApi();\n useEffect(() => {\n let resizeObserver;\n const updateDimensions = () => {\n if (!rendererNode.current) {\n return;\n }\n const size = getDimensions(rendererNode.current);\n if (size.height === 0 || size.width === 0) {\n store.getState().onError?.('004', errorMessages['error004']());\n }\n store.setState({ width: size.width || 500, height: size.height || 500 });\n };\n updateDimensions();\n window.addEventListener('resize', updateDimensions);\n if (rendererNode.current) {\n resizeObserver = new ResizeObserver(() => updateDimensions());\n resizeObserver.observe(rendererNode.current);\n }\n return () => {\n window.removeEventListener('resize', updateDimensions);\n if (resizeObserver && rendererNode.current) {\n resizeObserver.unobserve(rendererNode.current);\n }\n };\n }, []);\n}\n\nconst containerStyle = {\n position: 'absolute',\n width: '100%',\n height: '100%',\n top: 0,\n left: 0,\n};\n\n/* eslint-disable @typescript-eslint/ban-ts-comment */\nconst viewChanged = (prevViewport, eventTransform) => prevViewport.x !== eventTransform.x || prevViewport.y !== eventTransform.y || prevViewport.zoom !== eventTransform.k;\nconst eventToFlowTransform = (eventTransform) => ({\n x: eventTransform.x,\n y: eventTransform.y,\n zoom: eventTransform.k,\n});\nconst isWrappedWithClass = (event, className) => event.target.closest(`.${className}`);\nconst isRightClickPan = (panOnDrag, usedButton) => usedButton === 2 && Array.isArray(panOnDrag) && panOnDrag.includes(2);\nconst wheelDelta = (event) => {\n const factor = event.ctrlKey && isMacOs() ? 10 : 1;\n return -event.deltaY * (event.deltaMode === 1 ? 0.05 : event.deltaMode ? 1 : 0.002) * factor;\n};\nconst selector$a = (s) => ({\n d3Zoom: s.d3Zoom,\n d3Selection: s.d3Selection,\n d3ZoomHandler: s.d3ZoomHandler,\n userSelectionActive: s.userSelectionActive,\n});\nconst ZoomPane = ({ onMove, onMoveStart, onMoveEnd, onPaneContextMenu, zoomOnScroll = true, zoomOnPinch = true, panOnScroll = false, panOnScrollSpeed = 0.5, panOnScrollMode = PanOnScrollMode.Free, zoomOnDoubleClick = true, elementsSelectable, panOnDrag = true, defaultViewport, translateExtent, minZoom, maxZoom, zoomActivationKeyCode, preventScrolling = true, children, noWheelClassName, noPanClassName, }) => {\n const timerId = useRef();\n const store = useStoreApi();\n const isZoomingOrPanning = useRef(false);\n const zoomedWithRightMouseButton = useRef(false);\n const zoomPane = useRef(null);\n const prevTransform = useRef({ x: 0, y: 0, zoom: 0 });\n const { d3Zoom, d3Selection, d3ZoomHandler, userSelectionActive } = useStore(selector$a, shallow);\n const zoomActivationKeyPressed = useKeyPress(zoomActivationKeyCode);\n const mouseButton = useRef(0);\n const isPanScrolling = useRef(false);\n const panScrollTimeout = useRef();\n useResizeHandler(zoomPane);\n useEffect(() => {\n if (zoomPane.current) {\n const bbox = zoomPane.current.getBoundingClientRect();\n const d3ZoomInstance = zoom().scaleExtent([minZoom, maxZoom]).translateExtent(translateExtent);\n const selection = select(zoomPane.current).call(d3ZoomInstance);\n const updatedTransform = zoomIdentity\n .translate(defaultViewport.x, defaultViewport.y)\n .scale(clamp(defaultViewport.zoom, minZoom, maxZoom));\n const extent = [\n [0, 0],\n [bbox.width, bbox.height],\n ];\n const constrainedTransform = d3ZoomInstance.constrain()(updatedTransform, extent, translateExtent);\n d3ZoomInstance.transform(selection, constrainedTransform);\n d3ZoomInstance.wheelDelta(wheelDelta);\n store.setState({\n d3Zoom: d3ZoomInstance,\n d3Selection: selection,\n d3ZoomHandler: selection.on('wheel.zoom'),\n // we need to pass transform because zoom handler is not registered when we set the initial transform\n transform: [constrainedTransform.x, constrainedTransform.y, constrainedTransform.k],\n domNode: zoomPane.current.closest('.react-flow'),\n });\n }\n }, []);\n useEffect(() => {\n if (d3Selection && d3Zoom) {\n if (panOnScroll && !zoomActivationKeyPressed && !userSelectionActive) {\n d3Selection.on('wheel.zoom', (event) => {\n if (isWrappedWithClass(event, noWheelClassName)) {\n return false;\n }\n event.preventDefault();\n event.stopImmediatePropagation();\n const currentZoom = d3Selection.property('__zoom').k || 1;\n // macos and win set ctrlKey=true for pinch gesture on a trackpad\n if (event.ctrlKey && zoomOnPinch) {\n const point = pointer(event);\n const pinchDelta = wheelDelta(event);\n const zoom = currentZoom * Math.pow(2, pinchDelta);\n // @ts-ignore\n d3Zoom.scaleTo(d3Selection, zoom, point, event);\n return;\n }\n // increase scroll speed in firefox\n // firefox: deltaMode === 1; chrome: deltaMode === 0\n const deltaNormalize = event.deltaMode === 1 ? 20 : 1;\n let deltaX = panOnScrollMode === PanOnScrollMode.Vertical ? 0 : event.deltaX * deltaNormalize;\n let deltaY = panOnScrollMode === PanOnScrollMode.Horizontal ? 0 : event.deltaY * deltaNormalize;\n // this enables vertical scrolling with shift + scroll on windows\n if (!isMacOs() && event.shiftKey && panOnScrollMode !== PanOnScrollMode.Vertical) {\n deltaX = event.deltaY * deltaNormalize;\n deltaY = 0;\n }\n d3Zoom.translateBy(d3Selection, -(deltaX / currentZoom) * panOnScrollSpeed, -(deltaY / currentZoom) * panOnScrollSpeed, \n // @ts-ignore\n { internal: true });\n const nextViewport = eventToFlowTransform(d3Selection.property('__zoom'));\n const { onViewportChangeStart, onViewportChange, onViewportChangeEnd } = store.getState();\n clearTimeout(panScrollTimeout.current);\n // for pan on scroll we need to handle the event calls on our own\n // we can't use the start, zoom and end events from d3-zoom\n // because start and move gets called on every scroll event and not once at the beginning\n if (!isPanScrolling.current) {\n isPanScrolling.current = true;\n onMoveStart?.(event, nextViewport);\n onViewportChangeStart?.(nextViewport);\n }\n if (isPanScrolling.current) {\n onMove?.(event, nextViewport);\n onViewportChange?.(nextViewport);\n panScrollTimeout.current = setTimeout(() => {\n onMoveEnd?.(event, nextViewport);\n onViewportChangeEnd?.(nextViewport);\n isPanScrolling.current = false;\n }, 150);\n }\n }, { passive: false });\n }\n else if (typeof d3ZoomHandler !== 'undefined') {\n d3Selection.on('wheel.zoom', function (event, d) {\n // we still want to enable pinch zooming even if preventScrolling is set to false\n const invalidEvent = !preventScrolling && event.type === 'wheel' && !event.ctrlKey;\n if (invalidEvent || isWrappedWithClass(event, noWheelClassName)) {\n return null;\n }\n event.preventDefault();\n d3ZoomHandler.call(this, event, d);\n }, { passive: false });\n }\n }\n }, [\n userSelectionActive,\n panOnScroll,\n panOnScrollMode,\n d3Selection,\n d3Zoom,\n d3ZoomHandler,\n zoomActivationKeyPressed,\n zoomOnPinch,\n preventScrolling,\n noWheelClassName,\n onMoveStart,\n onMove,\n onMoveEnd,\n ]);\n useEffect(() => {\n if (d3Zoom) {\n d3Zoom.on('start', (event) => {\n if (!event.sourceEvent || event.sourceEvent.internal) {\n return null;\n }\n // we need to remember it here, because it's always 0 in the \"zoom\" event\n mouseButton.current = event.sourceEvent?.button;\n const { onViewportChangeStart } = store.getState();\n const flowTransform = eventToFlowTransform(event.transform);\n isZoomingOrPanning.current = true;\n prevTransform.current = flowTransform;\n if (event.sourceEvent?.type === 'mousedown') {\n store.setState({ paneDragging: true });\n }\n onViewportChangeStart?.(flowTransform);\n onMoveStart?.(event.sourceEvent, flowTransform);\n });\n }\n }, [d3Zoom, onMoveStart]);\n useEffect(() => {\n if (d3Zoom) {\n if (userSelectionActive && !isZoomingOrPanning.current) {\n d3Zoom.on('zoom', null);\n }\n else if (!userSelectionActive) {\n d3Zoom.on('zoom', (event) => {\n const { onViewportChange } = store.getState();\n store.setState({ transform: [event.transform.x, event.transform.y, event.transform.k] });\n zoomedWithRightMouseButton.current = !!(onPaneContextMenu && isRightClickPan(panOnDrag, mouseButton.current ?? 0));\n if ((onMove || onViewportChange) && !event.sourceEvent?.internal) {\n const flowTransform = eventToFlowTransform(event.transform);\n onViewportChange?.(flowTransform);\n onMove?.(event.sourceEvent, flowTransform);\n }\n });\n }\n }\n }, [userSelectionActive, d3Zoom, onMove, panOnDrag, onPaneContextMenu]);\n useEffect(() => {\n if (d3Zoom) {\n d3Zoom.on('end', (event) => {\n if (!event.sourceEvent || event.sourceEvent.internal) {\n return null;\n }\n const { onViewportChangeEnd } = store.getState();\n isZoomingOrPanning.current = false;\n store.setState({ paneDragging: false });\n if (onPaneContextMenu &&\n isRightClickPan(panOnDrag, mouseButton.current ?? 0) &&\n !zoomedWithRightMouseButton.current) {\n onPaneContextMenu(event.sourceEvent);\n }\n zoomedWithRightMouseButton.current = false;\n if ((onMoveEnd || onViewportChangeEnd) && viewChanged(prevTransform.current, event.transform)) {\n const flowTransform = eventToFlowTransform(event.transform);\n prevTransform.current = flowTransform;\n clearTimeout(timerId.current);\n timerId.current = setTimeout(() => {\n onViewportChangeEnd?.(flowTransform);\n onMoveEnd?.(event.sourceEvent, flowTransform);\n }, panOnScroll ? 150 : 0);\n }\n });\n }\n }, [d3Zoom, panOnScroll, panOnDrag, onMoveEnd, onPaneContextMenu]);\n useEffect(() => {\n if (d3Zoom) {\n d3Zoom.filter((event) => {\n const zoomScroll = zoomActivationKeyPressed || zoomOnScroll;\n const pinchZoom = zoomOnPinch && event.ctrlKey;\n if ((panOnDrag === true || (Array.isArray(panOnDrag) && panOnDrag.includes(1))) &&\n event.button === 1 &&\n event.type === 'mousedown' &&\n (isWrappedWithClass(event, 'react-flow__node') || isWrappedWithClass(event, 'react-flow__edge'))) {\n return true;\n }\n // if all interactions are disabled, we prevent all zoom events\n if (!panOnDrag && !zoomScroll && !panOnScroll && !zoomOnDoubleClick && !zoomOnPinch) {\n return false;\n }\n // during a selection we prevent all other interactions\n if (userSelectionActive) {\n return false;\n }\n // if zoom on double click is disabled, we prevent the double click event\n if (!zoomOnDoubleClick && event.type === 'dblclick') {\n return false;\n }\n // if the target element is inside an element with the nowheel class, we prevent zooming\n if (isWrappedWithClass(event, noWheelClassName) && event.type === 'wheel') {\n return false;\n }\n // if the target element is inside an element with the nopan class, we prevent panning\n if (isWrappedWithClass(event, noPanClassName) &&\n (event.type !== 'wheel' || (panOnScroll && event.type === 'wheel' && !zoomActivationKeyPressed))) {\n return false;\n }\n if (!zoomOnPinch && event.ctrlKey && event.type === 'wheel') {\n return false;\n }\n // when there is no scroll handling enabled, we prevent all wheel events\n if (!zoomScroll && !panOnScroll && !pinchZoom && event.type === 'wheel') {\n return false;\n }\n // if the pane is not movable, we prevent dragging it with mousestart or touchstart\n if (!panOnDrag && (event.type === 'mousedown' || event.type === 'touchstart')) {\n return false;\n }\n // if the pane is only movable using allowed clicks\n if (Array.isArray(panOnDrag) && !panOnDrag.includes(event.button) && event.type === 'mousedown') {\n return false;\n }\n // We only allow right clicks if pan on drag is set to right click\n const buttonAllowed = (Array.isArray(panOnDrag) && panOnDrag.includes(event.button)) || !event.button || event.button <= 1;\n // default filter for d3-zoom\n return (!event.ctrlKey || event.type === 'wheel') && buttonAllowed;\n });\n }\n }, [\n userSelectionActive,\n d3Zoom,\n zoomOnScroll,\n zoomOnPinch,\n panOnScroll,\n zoomOnDoubleClick,\n panOnDrag,\n elementsSelectable,\n zoomActivationKeyPressed,\n ]);\n return (React.createElement(\"div\", { className: \"react-flow__renderer\", ref: zoomPane, style: containerStyle }, children));\n};\n\nconst selector$9 = (s) => ({\n userSelectionActive: s.userSelectionActive,\n userSelectionRect: s.userSelectionRect,\n});\nfunction UserSelection() {\n const { userSelectionActive, userSelectionRect } = useStore(selector$9, shallow);\n const isActive = userSelectionActive && userSelectionRect;\n if (!isActive) {\n return null;\n }\n return (React.createElement(\"div\", { className: \"react-flow__selection react-flow__container\", style: {\n width: userSelectionRect.width,\n height: userSelectionRect.height,\n transform: `translate(${userSelectionRect.x}px, ${userSelectionRect.y}px)`,\n } }));\n}\n\nfunction handleParentExpand(res, updateItem) {\n const parentId = updateItem.parentNode || updateItem.parentId;\n const parent = res.find((e) => e.id === parentId);\n if (parent) {\n const extendWidth = updateItem.position.x + updateItem.width - parent.width;\n const extendHeight = updateItem.position.y + updateItem.height - parent.height;\n if (extendWidth > 0 || extendHeight > 0 || updateItem.position.x < 0 || updateItem.position.y < 0) {\n parent.style = { ...parent.style } || {};\n parent.style.width = parent.style.width ?? parent.width;\n parent.style.height = parent.style.height ?? parent.height;\n if (extendWidth > 0) {\n parent.style.width += extendWidth;\n }\n if (extendHeight > 0) {\n parent.style.height += extendHeight;\n }\n if (updateItem.position.x < 0) {\n const xDiff = Math.abs(updateItem.position.x);\n parent.position.x = parent.position.x - xDiff;\n parent.style.width += xDiff;\n updateItem.position.x = 0;\n }\n if (updateItem.position.y < 0) {\n const yDiff = Math.abs(updateItem.position.y);\n parent.position.y = parent.position.y - yDiff;\n parent.style.height += yDiff;\n updateItem.position.y = 0;\n }\n parent.width = parent.style.width;\n parent.height = parent.style.height;\n }\n }\n}\nfunction applyChanges(changes, elements) {\n // we need this hack to handle the setNodes and setEdges function of the useReactFlow hook for controlled flows\n if (changes.some((c) => c.type === 'reset')) {\n return changes.filter((c) => c.type === 'reset').map((c) => c.item);\n }\n const initElements = changes.filter((c) => c.type === 'add').map((c) => c.item);\n return elements.reduce((res, item) => {\n const currentChanges = changes.filter((c) => c.id === item.id);\n if (currentChanges.length === 0) {\n res.push(item);\n return res;\n }\n const updateItem = { ...item };\n for (const currentChange of currentChanges) {\n if (currentChange) {\n switch (currentChange.type) {\n case 'select': {\n updateItem.selected = currentChange.selected;\n break;\n }\n case 'position': {\n if (typeof currentChange.position !== 'undefined') {\n updateItem.position = currentChange.position;\n }\n if (typeof currentChange.positionAbsolute !== 'undefined') {\n updateItem.positionAbsolute = currentChange.positionAbsolute;\n }\n if (typeof currentChange.dragging !== 'undefined') {\n updateItem.dragging = currentChange.dragging;\n }\n if (updateItem.expandParent) {\n handleParentExpand(res, updateItem);\n }\n break;\n }\n case 'dimensions': {\n if (typeof currentChange.dimensions !== 'undefined') {\n updateItem.width = currentChange.dimensions.width;\n updateItem.height = currentChange.dimensions.height;\n }\n if (typeof currentChange.updateStyle !== 'undefined') {\n updateItem.style = { ...(updateItem.style || {}), ...currentChange.dimensions };\n }\n if (typeof currentChange.resizing === 'boolean') {\n updateItem.resizing = currentChange.resizing;\n }\n if (updateItem.expandParent) {\n handleParentExpand(res, updateItem);\n }\n break;\n }\n case 'remove': {\n return res;\n }\n }\n }\n }\n res.push(updateItem);\n return res;\n }, initElements);\n}\nfunction applyNodeChanges(changes, nodes) {\n return applyChanges(changes, nodes);\n}\nfunction applyEdgeChanges(changes, edges) {\n return applyChanges(changes, edges);\n}\nconst createSelectionChange = (id, selected) => ({\n id,\n type: 'select',\n selected,\n});\nfunction getSelectionChanges(items, selectedIds) {\n return items.reduce((res, item) => {\n const willBeSelected = selectedIds.includes(item.id);\n if (!item.selected && willBeSelected) {\n item.selected = true;\n res.push(createSelectionChange(item.id, true));\n }\n else if (item.selected && !willBeSelected) {\n item.selected = false;\n res.push(createSelectionChange(item.id, false));\n }\n return res;\n }, []);\n}\n\n/**\n * The user selection rectangle gets displayed when a user drags the mouse while pressing shift\n */\nconst wrapHandler = (handler, containerRef) => {\n return (event) => {\n if (event.target !== containerRef.current) {\n return;\n }\n handler?.(event);\n };\n};\nconst selector$8 = (s) => ({\n userSelectionActive: s.userSelectionActive,\n elementsSelectable: s.elementsSelectable,\n dragging: s.paneDragging,\n});\nconst Pane = memo(({ isSelecting, selectionMode = SelectionMode.Full, panOnDrag, onSelectionStart, onSelectionEnd, onPaneClick, onPaneContextMenu, onPaneScroll, onPaneMouseEnter, onPaneMouseMove, onPaneMouseLeave, children, }) => {\n const container = useRef(null);\n const store = useStoreApi();\n const prevSelectedNodesCount = useRef(0);\n const prevSelectedEdgesCount = useRef(0);\n const containerBounds = useRef();\n const { userSelectionActive, elementsSelectable, dragging } = useStore(selector$8, shallow);\n const resetUserSelection = () => {\n store.setState({ userSelectionActive: false, userSelectionRect: null });\n prevSelectedNodesCount.current = 0;\n prevSelectedEdgesCount.current = 0;\n };\n const onClick = (event) => {\n onPaneClick?.(event);\n store.getState().resetSelectedElements();\n store.setState({ nodesSelectionActive: false });\n };\n const onContextMenu = (event) => {\n if (Array.isArray(panOnDrag) && panOnDrag?.includes(2)) {\n event.preventDefault();\n return;\n }\n onPaneContextMenu?.(event);\n };\n const onWheel = onPaneScroll ? (event) => onPaneScroll(event) : undefined;\n const onMouseDown = (event) => {\n const { resetSelectedElements, domNode } = store.getState();\n containerBounds.current = domNode?.getBoundingClientRect();\n if (!elementsSelectable ||\n !isSelecting ||\n event.button !== 0 ||\n event.target !== container.current ||\n !containerBounds.current) {\n return;\n }\n const { x, y } = getEventPosition(event, containerBounds.current);\n resetSelectedElements();\n store.setState({\n userSelectionRect: {\n width: 0,\n height: 0,\n startX: x,\n startY: y,\n x,\n y,\n },\n });\n onSelectionStart?.(event);\n };\n const onMouseMove = (event) => {\n const { userSelectionRect, nodeInternals, edges, transform, onNodesChange, onEdgesChange, nodeOrigin, getNodes } = store.getState();\n if (!isSelecting || !containerBounds.current || !userSelectionRect) {\n return;\n }\n store.setState({ userSelectionActive: true, nodesSelectionActive: false });\n const mousePos = getEventPosition(event, containerBounds.current);\n const startX = userSelectionRect.startX ?? 0;\n const startY = userSelectionRect.startY ?? 0;\n const nextUserSelectRect = {\n ...userSelectionRect,\n x: mousePos.x < startX ? mousePos.x : startX,\n y: mousePos.y < startY ? mousePos.y : startY,\n width: Math.abs(mousePos.x - startX),\n height: Math.abs(mousePos.y - startY),\n };\n const nodes = getNodes();\n const selectedNodes = getNodesInside(nodeInternals, nextUserSelectRect, transform, selectionMode === SelectionMode.Partial, true, nodeOrigin);\n const selectedEdgeIds = getConnectedEdges(selectedNodes, edges).map((e) => e.id);\n const selectedNodeIds = selectedNodes.map((n) => n.id);\n if (prevSelectedNodesCount.current !== selectedNodeIds.length) {\n prevSelectedNodesCount.current = selectedNodeIds.length;\n const changes = getSelectionChanges(nodes, selectedNodeIds);\n if (changes.length) {\n onNodesChange?.(changes);\n }\n }\n if (prevSelectedEdgesCount.current !== selectedEdgeIds.length) {\n prevSelectedEdgesCount.current = selectedEdgeIds.length;\n const changes = getSelectionChanges(edges, selectedEdgeIds);\n if (changes.length) {\n onEdgesChange?.(changes);\n }\n }\n store.setState({\n userSelectionRect: nextUserSelectRect,\n });\n };\n const onMouseUp = (event) => {\n if (event.button !== 0) {\n return;\n }\n const { userSelectionRect } = store.getState();\n // We only want to trigger click functions when in selection mode if\n // the user did not move the mouse.\n if (!userSelectionActive && userSelectionRect && event.target === container.current) {\n onClick?.(event);\n }\n store.setState({ nodesSelectionActive: prevSelectedNodesCount.current > 0 });\n resetUserSelection();\n onSelectionEnd?.(event);\n };\n const onMouseLeave = (event) => {\n if (userSelectionActive) {\n store.setState({ nodesSelectionActive: prevSelectedNodesCount.current > 0 });\n onSelectionEnd?.(event);\n }\n resetUserSelection();\n };\n const hasActiveSelection = elementsSelectable && (isSelecting || userSelectionActive);\n return (React.createElement(\"div\", { className: cc(['react-flow__pane', { dragging, selection: isSelecting }]), onClick: hasActiveSelection ? undefined : wrapHandler(onClick, container), onContextMenu: wrapHandler(onContextMenu, container), onWheel: wrapHandler(onWheel, container), onMouseEnter: hasActiveSelection ? undefined : onPaneMouseEnter, onMouseDown: hasActiveSelection ? onMouseDown : undefined, onMouseMove: hasActiveSelection ? onMouseMove : onPaneMouseMove, onMouseUp: hasActiveSelection ? onMouseUp : undefined, onMouseLeave: hasActiveSelection ? onMouseLeave : onPaneMouseLeave, ref: container, style: containerStyle },\n children,\n React.createElement(UserSelection, null)));\n});\nPane.displayName = 'Pane';\n\nfunction isParentSelected(node, nodeInternals) {\n const parentId = node.parentNode || node.parentId;\n if (!parentId) {\n return false;\n }\n const parentNode = nodeInternals.get(parentId);\n if (!parentNode) {\n return false;\n }\n if (parentNode.selected) {\n return true;\n }\n return isParentSelected(parentNode, nodeInternals);\n}\nfunction hasSelector(target, selector, nodeRef) {\n let current = target;\n do {\n if (current?.matches(selector))\n return true;\n if (current === nodeRef.current)\n return false;\n current = current.parentElement;\n } while (current);\n return false;\n}\n// looks for all selected nodes and created a NodeDragItem for each of them\nfunction getDragItems(nodeInternals, nodesDraggable, mousePos, nodeId) {\n return Array.from(nodeInternals.values())\n .filter((n) => (n.selected || n.id === nodeId) &&\n (!n.parentNode || n.parentId || !isParentSelected(n, nodeInternals)) &&\n (n.draggable || (nodesDraggable && typeof n.draggable === 'undefined')))\n .map((n) => ({\n id: n.id,\n position: n.position || { x: 0, y: 0 },\n positionAbsolute: n.positionAbsolute || { x: 0, y: 0 },\n distance: {\n x: mousePos.x - (n.positionAbsolute?.x ?? 0),\n y: mousePos.y - (n.positionAbsolute?.y ?? 0),\n },\n delta: {\n x: 0,\n y: 0,\n },\n extent: n.extent,\n parentNode: n.parentNode || n.parentId,\n parentId: n.parentNode || n.parentId,\n width: n.width,\n height: n.height,\n expandParent: n.expandParent,\n }));\n}\nfunction clampNodeExtent(node, extent) {\n if (!extent || extent === 'parent') {\n return extent;\n }\n return [extent[0], [extent[1][0] - (node.width || 0), extent[1][1] - (node.height || 0)]];\n}\nfunction calcNextPosition(node, nextPosition, nodeInternals, nodeExtent, nodeOrigin = [0, 0], onError) {\n const clampedNodeExtent = clampNodeExtent(node, node.extent || nodeExtent);\n let currentExtent = clampedNodeExtent;\n const parentId = node.parentNode || node.parentId;\n if (node.extent === 'parent' && !node.expandParent) {\n if (parentId && node.width && node.height) {\n const parent = nodeInternals.get(parentId);\n const { x: parentX, y: parentY } = getNodePositionWithOrigin(parent, nodeOrigin).positionAbsolute;\n currentExtent =\n parent && isNumeric(parentX) && isNumeric(parentY) && isNumeric(parent.width) && isNumeric(parent.height)\n ? [\n [parentX + node.width * nodeOrigin[0], parentY + node.height * nodeOrigin[1]],\n [\n parentX + parent.width - node.width + node.width * nodeOrigin[0],\n parentY + parent.height - node.height + node.height * nodeOrigin[1],\n ],\n ]\n : currentExtent;\n }\n else {\n onError?.('005', errorMessages['error005']());\n currentExtent = clampedNodeExtent;\n }\n }\n else if (node.extent && parentId && node.extent !== 'parent') {\n const parent = nodeInternals.get(parentId);\n const { x: parentX, y: parentY } = getNodePositionWithOrigin(parent, nodeOrigin).positionAbsolute;\n currentExtent = [\n [node.extent[0][0] + parentX, node.extent[0][1] + parentY],\n [node.extent[1][0] + parentX, node.extent[1][1] + parentY],\n ];\n }\n let parentPosition = { x: 0, y: 0 };\n if (parentId) {\n const parentNode = nodeInternals.get(parentId);\n parentPosition = getNodePositionWithOrigin(parentNode, nodeOrigin).positionAbsolute;\n }\n const positionAbsolute = currentExtent && currentExtent !== 'parent'\n ? clampPosition(nextPosition, currentExtent)\n : nextPosition;\n return {\n position: {\n x: positionAbsolute.x - parentPosition.x,\n y: positionAbsolute.y - parentPosition.y,\n },\n positionAbsolute,\n };\n}\n// returns two params:\n// 1. the dragged node (or the first of the list, if we are dragging a node selection)\n// 2. array of selected nodes (for multi selections)\nfunction getEventHandlerParams({ nodeId, dragItems, nodeInternals, }) {\n const extentedDragItems = dragItems.map((n) => {\n const node = nodeInternals.get(n.id);\n return {\n ...node,\n position: n.position,\n positionAbsolute: n.positionAbsolute,\n };\n });\n return [nodeId ? extentedDragItems.find((n) => n.id === nodeId) : extentedDragItems[0], extentedDragItems];\n}\n\nconst getHandleBounds = (selector, nodeElement, zoom, nodeOrigin) => {\n const handles = nodeElement.querySelectorAll(selector);\n if (!handles || !handles.length) {\n return null;\n }\n const handlesArray = Array.from(handles);\n const nodeBounds = nodeElement.getBoundingClientRect();\n const nodeOffset = {\n x: nodeBounds.width * nodeOrigin[0],\n y: nodeBounds.height * nodeOrigin[1],\n };\n return handlesArray.map((handle) => {\n const handleBounds = handle.getBoundingClientRect();\n return {\n id: handle.getAttribute('data-handleid'),\n position: handle.getAttribute('data-handlepos'),\n x: (handleBounds.left - nodeBounds.left - nodeOffset.x) / zoom,\n y: (handleBounds.top - nodeBounds.top - nodeOffset.y) / zoom,\n ...getDimensions(handle),\n };\n });\n};\nfunction getMouseHandler(id, getState, handler) {\n return handler === undefined\n ? handler\n : (event) => {\n const node = getState().nodeInternals.get(id);\n if (node) {\n handler(event, { ...node });\n }\n };\n}\n// this handler is called by\n// 1. the click handler when node is not draggable or selectNodesOnDrag = false\n// or\n// 2. the on drag start handler when node is draggable and selectNodesOnDrag = true\nfunction handleNodeClick({ id, store, unselect = false, nodeRef, }) {\n const { addSelectedNodes, unselectNodesAndEdges, multiSelectionActive, nodeInternals, onError } = store.getState();\n const node = nodeInternals.get(id);\n if (!node) {\n onError?.('012', errorMessages['error012'](id));\n return;\n }\n store.setState({ nodesSelectionActive: false });\n if (!node.selected) {\n addSelectedNodes([id]);\n }\n else if (unselect || (node.selected && multiSelectionActive)) {\n unselectNodesAndEdges({ nodes: [node], edges: [] });\n requestAnimationFrame(() => nodeRef?.current?.blur());\n }\n}\n\nfunction useGetPointerPosition() {\n const store = useStoreApi();\n // returns the pointer position projected to the RF coordinate system\n const getPointerPosition = useCallback(({ sourceEvent }) => {\n const { transform, snapGrid, snapToGrid } = store.getState();\n const x = sourceEvent.touches ? sourceEvent.touches[0].clientX : sourceEvent.clientX;\n const y = sourceEvent.touches ? sourceEvent.touches[0].clientY : sourceEvent.clientY;\n const pointerPos = {\n x: (x - transform[0]) / transform[2],\n y: (y - transform[1]) / transform[2],\n };\n // we need the snapped position in order to be able to skip unnecessary drag events\n return {\n xSnapped: snapToGrid ? snapGrid[0] * Math.round(pointerPos.x / snapGrid[0]) : pointerPos.x,\n ySnapped: snapToGrid ? snapGrid[1] * Math.round(pointerPos.y / snapGrid[1]) : pointerPos.y,\n ...pointerPos,\n };\n }, []);\n return getPointerPosition;\n}\n\nfunction wrapSelectionDragFunc(selectionFunc) {\n return (event, _, nodes) => selectionFunc?.(event, nodes);\n}\nfunction useDrag({ nodeRef, disabled = false, noDragClassName, handleSelector, nodeId, isSelectable, selectNodesOnDrag, }) {\n const store = useStoreApi();\n const [dragging, setDragging] = useState(false);\n const dragItems = useRef([]);\n const lastPos = useRef({ x: null, y: null });\n const autoPanId = useRef(0);\n const containerBounds = useRef(null);\n const mousePosition = useRef({ x: 0, y: 0 });\n const dragEvent = useRef(null);\n const autoPanStarted = useRef(false);\n const dragStarted = useRef(false);\n const abortDrag = useRef(false);\n const getPointerPosition = useGetPointerPosition();\n useEffect(() => {\n if (nodeRef?.current) {\n const selection = select(nodeRef.current);\n const updateNodes = ({ x, y }) => {\n const { nodeInternals, onNodeDrag, onSelectionDrag, updateNodePositions, nodeExtent, snapGrid, snapToGrid, nodeOrigin, onError, } = store.getState();\n lastPos.current = { x, y };\n let hasChange = false;\n let nodesBox = { x: 0, y: 0, x2: 0, y2: 0 };\n if (dragItems.current.length > 1 && nodeExtent) {\n const rect = getNodesBounds(dragItems.current, nodeOrigin);\n nodesBox = rectToBox(rect);\n }\n dragItems.current = dragItems.current.map((n) => {\n const nextPosition = { x: x - n.distance.x, y: y - n.distance.y };\n if (snapToGrid) {\n nextPosition.x = snapGrid[0] * Math.round(nextPosition.x / snapGrid[0]);\n nextPosition.y = snapGrid[1] * Math.round(nextPosition.y / snapGrid[1]);\n }\n // if there is selection with multiple nodes and a node extent is set, we need to adjust the node extent for each node\n // based on its position so that the node stays at it's position relative to the selection.\n const adjustedNodeExtent = [\n [nodeExtent[0][0], nodeExtent[0][1]],\n [nodeExtent[1][0], nodeExtent[1][1]],\n ];\n if (dragItems.current.length > 1 && nodeExtent && !n.extent) {\n adjustedNodeExtent[0][0] = n.positionAbsolute.x - nodesBox.x + nodeExtent[0][0];\n adjustedNodeExtent[1][0] = n.positionAbsolute.x + (n.width ?? 0) - nodesBox.x2 + nodeExtent[1][0];\n adjustedNodeExtent[0][1] = n.positionAbsolute.y - nodesBox.y + nodeExtent[0][1];\n adjustedNodeExtent[1][1] = n.positionAbsolute.y + (n.height ?? 0) - nodesBox.y2 + nodeExtent[1][1];\n }\n const updatedPos = calcNextPosition(n, nextPosition, nodeInternals, adjustedNodeExtent, nodeOrigin, onError);\n // we want to make sure that we only fire a change event when there is a change\n hasChange = hasChange || n.position.x !== updatedPos.position.x || n.position.y !== updatedPos.position.y;\n n.position = updatedPos.position;\n n.positionAbsolute = updatedPos.positionAbsolute;\n return n;\n });\n if (!hasChange) {\n return;\n }\n updateNodePositions(dragItems.current, true, true);\n setDragging(true);\n const onDrag = nodeId ? onNodeDrag : wrapSelectionDragFunc(onSelectionDrag);\n if (onDrag && dragEvent.current) {\n const [currentNode, nodes] = getEventHandlerParams({\n nodeId,\n dragItems: dragItems.current,\n nodeInternals,\n });\n onDrag(dragEvent.current, currentNode, nodes);\n }\n };\n const autoPan = () => {\n if (!containerBounds.current) {\n return;\n }\n const [xMovement, yMovement] = calcAutoPan(mousePosition.current, containerBounds.current);\n if (xMovement !== 0 || yMovement !== 0) {\n const { transform, panBy } = store.getState();\n lastPos.current.x = (lastPos.current.x ?? 0) - xMovement / transform[2];\n lastPos.current.y = (lastPos.current.y ?? 0) - yMovement / transform[2];\n if (panBy({ x: xMovement, y: yMovement })) {\n updateNodes(lastPos.current);\n }\n }\n autoPanId.current = requestAnimationFrame(autoPan);\n };\n const startDrag = (event) => {\n const { nodeInternals, multiSelectionActive, nodesDraggable, unselectNodesAndEdges, onNodeDragStart, onSelectionDragStart, } = store.getState();\n dragStarted.current = true;\n const onStart = nodeId ? onNodeDragStart : wrapSelectionDragFunc(onSelectionDragStart);\n if ((!selectNodesOnDrag || !isSelectable) && !multiSelectionActive && nodeId) {\n if (!nodeInternals.get(nodeId)?.selected) {\n // we need to reset selected nodes when selectNodesOnDrag=false\n unselectNodesAndEdges();\n }\n }\n if (nodeId && isSelectable && selectNodesOnDrag) {\n handleNodeClick({\n id: nodeId,\n store,\n nodeRef: nodeRef,\n });\n }\n const pointerPos = getPointerPosition(event);\n lastPos.current = pointerPos;\n dragItems.current = getDragItems(nodeInternals, nodesDraggable, pointerPos, nodeId);\n if (onStart && dragItems.current) {\n const [currentNode, nodes] = getEventHandlerParams({\n nodeId,\n dragItems: dragItems.current,\n nodeInternals,\n });\n onStart(event.sourceEvent, currentNode, nodes);\n }\n };\n if (disabled) {\n selection.on('.drag', null);\n }\n else {\n const dragHandler = drag()\n .on('start', (event) => {\n const { domNode, nodeDragThreshold } = store.getState();\n if (nodeDragThreshold === 0) {\n startDrag(event);\n }\n abortDrag.current = false;\n const pointerPos = getPointerPosition(event);\n lastPos.current = pointerPos;\n containerBounds.current = domNode?.getBoundingClientRect() || null;\n mousePosition.current = getEventPosition(event.sourceEvent, containerBounds.current);\n })\n .on('drag', (event) => {\n const pointerPos = getPointerPosition(event);\n const { autoPanOnNodeDrag, nodeDragThreshold } = store.getState();\n if (event.sourceEvent.type === 'touchmove' && event.sourceEvent.touches.length > 1) {\n abortDrag.current = true;\n }\n if (abortDrag.current) {\n return;\n }\n if (!autoPanStarted.current && dragStarted.current && autoPanOnNodeDrag) {\n autoPanStarted.current = true;\n autoPan();\n }\n if (!dragStarted.current) {\n const x = pointerPos.xSnapped - (lastPos?.current?.x ?? 0);\n const y = pointerPos.ySnapped - (lastPos?.current?.y ?? 0);\n const distance = Math.sqrt(x * x + y * y);\n if (distance > nodeDragThreshold) {\n startDrag(event);\n }\n }\n // skip events without movement\n if ((lastPos.current.x !== pointerPos.xSnapped || lastPos.current.y !== pointerPos.ySnapped) &&\n dragItems.current &&\n dragStarted.current) {\n dragEvent.current = event.sourceEvent;\n mousePosition.current = getEventPosition(event.sourceEvent, containerBounds.current);\n updateNodes(pointerPos);\n }\n })\n .on('end', (event) => {\n if (!dragStarted.current || abortDrag.current) {\n return;\n }\n setDragging(false);\n autoPanStarted.current = false;\n dragStarted.current = false;\n cancelAnimationFrame(autoPanId.current);\n if (dragItems.current) {\n const { updateNodePositions, nodeInternals, onNodeDragStop, onSelectionDragStop } = store.getState();\n const onStop = nodeId ? onNodeDragStop : wrapSelectionDragFunc(onSelectionDragStop);\n updateNodePositions(dragItems.current, false, false);\n if (onStop) {\n const [currentNode, nodes] = getEventHandlerParams({\n nodeId,\n dragItems: dragItems.current,\n nodeInternals,\n });\n onStop(event.sourceEvent, currentNode, nodes);\n }\n }\n })\n .filter((event) => {\n const target = event.target;\n const isDraggable = !event.button &&\n (!noDragClassName || !hasSelector(target, `.${noDragClassName}`, nodeRef)) &&\n (!handleSelector || hasSelector(target, handleSelector, nodeRef));\n return isDraggable;\n });\n selection.call(dragHandler);\n return () => {\n selection.on('.drag', null);\n };\n }\n }\n }, [\n nodeRef,\n disabled,\n noDragClassName,\n handleSelector,\n isSelectable,\n store,\n nodeId,\n selectNodesOnDrag,\n getPointerPosition,\n ]);\n return dragging;\n}\n\nfunction useUpdateNodePositions() {\n const store = useStoreApi();\n const updatePositions = useCallback((params) => {\n const { nodeInternals, nodeExtent, updateNodePositions, getNodes, snapToGrid, snapGrid, onError, nodesDraggable } = store.getState();\n const selectedNodes = getNodes().filter((n) => n.selected && (n.draggable || (nodesDraggable && typeof n.draggable === 'undefined')));\n // by default a node moves 5px on each key press, or 20px if shift is pressed\n // if snap grid is enabled, we use that for the velocity.\n const xVelo = snapToGrid ? snapGrid[0] : 5;\n const yVelo = snapToGrid ? snapGrid[1] : 5;\n const factor = params.isShiftPressed ? 4 : 1;\n const positionDiffX = params.x * xVelo * factor;\n const positionDiffY = params.y * yVelo * factor;\n const nodeUpdates = selectedNodes.map((n) => {\n if (n.positionAbsolute) {\n const nextPosition = { x: n.positionAbsolute.x + positionDiffX, y: n.positionAbsolute.y + positionDiffY };\n if (snapToGrid) {\n nextPosition.x = snapGrid[0] * Math.round(nextPosition.x / snapGrid[0]);\n nextPosition.y = snapGrid[1] * Math.round(nextPosition.y / snapGrid[1]);\n }\n const { positionAbsolute, position } = calcNextPosition(n, nextPosition, nodeInternals, nodeExtent, undefined, onError);\n n.position = position;\n n.positionAbsolute = positionAbsolute;\n }\n return n;\n });\n updateNodePositions(nodeUpdates, true, false);\n }, []);\n return updatePositions;\n}\n\nconst arrowKeyDiffs = {\n ArrowUp: { x: 0, y: -1 },\n ArrowDown: { x: 0, y: 1 },\n ArrowLeft: { x: -1, y: 0 },\n ArrowRight: { x: 1, y: 0 },\n};\nvar wrapNode = (NodeComponent) => {\n const NodeWrapper = ({ id, type, data, xPos, yPos, xPosOrigin, yPosOrigin, selected, onClick, onMouseEnter, onMouseMove, onMouseLeave, onContextMenu, onDoubleClick, style, className, isDraggable, isSelectable, isConnectable, isFocusable, selectNodesOnDrag, sourcePosition, targetPosition, hidden, resizeObserver, dragHandle, zIndex, isParent, noDragClassName, noPanClassName, initialized, disableKeyboardA11y, ariaLabel, rfId, hasHandleBounds, }) => {\n const store = useStoreApi();\n const nodeRef = useRef(null);\n const prevNodeRef = useRef(null);\n const prevSourcePosition = useRef(sourcePosition);\n const prevTargetPosition = useRef(targetPosition);\n const prevType = useRef(type);\n const hasPointerEvents = isSelectable || isDraggable || onClick || onMouseEnter || onMouseMove || onMouseLeave;\n const updatePositions = useUpdateNodePositions();\n const onMouseEnterHandler = getMouseHandler(id, store.getState, onMouseEnter);\n const onMouseMoveHandler = getMouseHandler(id, store.getState, onMouseMove);\n const onMouseLeaveHandler = getMouseHandler(id, store.getState, onMouseLeave);\n const onContextMenuHandler = getMouseHandler(id, store.getState, onContextMenu);\n const onDoubleClickHandler = getMouseHandler(id, store.getState, onDoubleClick);\n const onSelectNodeHandler = (event) => {\n const { nodeDragThreshold } = store.getState();\n if (isSelectable && (!selectNodesOnDrag || !isDraggable || nodeDragThreshold > 0)) {\n // this handler gets called within the drag start event when selectNodesOnDrag=true\n handleNodeClick({\n id,\n store,\n nodeRef,\n });\n }\n if (onClick) {\n const node = store.getState().nodeInternals.get(id);\n if (node) {\n onClick(event, { ...node });\n }\n }\n };\n const onKeyDown = (event) => {\n if (isInputDOMNode(event)) {\n return;\n }\n if (disableKeyboardA11y) {\n return;\n }\n if (elementSelectionKeys.includes(event.key) && isSelectable) {\n const unselect = event.key === 'Escape';\n handleNodeClick({\n id,\n store,\n unselect,\n nodeRef,\n });\n }\n else if (isDraggable && selected && Object.prototype.hasOwnProperty.call(arrowKeyDiffs, event.key)) {\n store.setState({\n ariaLiveMessage: `Moved selected node ${event.key\n .replace('Arrow', '')\n .toLowerCase()}. New position, x: ${~~xPos}, y: ${~~yPos}`,\n });\n updatePositions({\n x: arrowKeyDiffs[event.key].x,\n y: arrowKeyDiffs[event.key].y,\n isShiftPressed: event.shiftKey,\n });\n }\n };\n useEffect(() => {\n return () => {\n if (prevNodeRef.current) {\n resizeObserver?.unobserve(prevNodeRef.current);\n prevNodeRef.current = null;\n }\n };\n }, []);\n useEffect(() => {\n if (nodeRef.current && !hidden) {\n const currNode = nodeRef.current;\n if (!initialized || !hasHandleBounds || prevNodeRef.current !== currNode) {\n // At this point we always want to make sure that the node gets re-measured / re-initialized.\n // We need to unobserve it first in case it is still observed\n if (prevNodeRef.current) {\n resizeObserver?.unobserve(prevNodeRef.current);\n }\n resizeObserver?.observe(currNode);\n prevNodeRef.current = currNode;\n }\n }\n }, [hidden, initialized, hasHandleBounds]);\n useEffect(() => {\n // when the user programmatically changes the source or handle position, we re-initialize the node\n const typeChanged = prevType.current !== type;\n const sourcePosChanged = prevSourcePosition.current !== sourcePosition;\n const targetPosChanged = prevTargetPosition.current !== targetPosition;\n if (nodeRef.current && (typeChanged || sourcePosChanged || targetPosChanged)) {\n if (typeChanged) {\n prevType.current = type;\n }\n if (sourcePosChanged) {\n prevSourcePosition.current = sourcePosition;\n }\n if (targetPosChanged) {\n prevTargetPosition.current = targetPosition;\n }\n store.getState().updateNodeDimensions([{ id, nodeElement: nodeRef.current, forceUpdate: true }]);\n }\n }, [id, type, sourcePosition, targetPosition]);\n const dragging = useDrag({\n nodeRef,\n disabled: hidden || !isDraggable,\n noDragClassName,\n handleSelector: dragHandle,\n nodeId: id,\n isSelectable,\n selectNodesOnDrag,\n });\n if (hidden) {\n return null;\n }\n return (React.createElement(\"div\", { className: cc([\n 'react-flow__node',\n `react-flow__node-${type}`,\n {\n // this is overwritable by passing `nopan` as a class name\n [noPanClassName]: isDraggable,\n },\n className,\n {\n selected,\n selectable: isSelectable,\n parent: isParent,\n dragging,\n },\n ]), ref: nodeRef, style: {\n zIndex,\n transform: `translate(${xPosOrigin}px,${yPosOrigin}px)`,\n pointerEvents: hasPointerEvents ? 'all' : 'none',\n visibility: initialized ? 'visible' : 'hidden',\n ...style,\n }, \"data-id\": id, \"data-testid\": `rf__node-${id}`, onMouseEnter: onMouseEnterHandler, onMouseMove: onMouseMoveHandler, onMouseLeave: onMouseLeaveHandler, onContextMenu: onContextMenuHandler, onClick: onSelectNodeHandler, onDoubleClick: onDoubleClickHandler, onKeyDown: isFocusable ? onKeyDown : undefined, tabIndex: isFocusable ? 0 : undefined, role: isFocusable ? 'button' : undefined, \"aria-describedby\": disableKeyboardA11y ? undefined : `${ARIA_NODE_DESC_KEY}-${rfId}`, \"aria-label\": ariaLabel },\n React.createElement(Provider, { value: id },\n React.createElement(NodeComponent, { id: id, data: data, type: type, xPos: xPos, yPos: yPos, selected: selected, isConnectable: isConnectable, sourcePosition: sourcePosition, targetPosition: targetPosition, dragging: dragging, dragHandle: dragHandle, zIndex: zIndex }))));\n };\n NodeWrapper.displayName = 'NodeWrapper';\n return memo(NodeWrapper);\n};\n\n/**\n * The nodes selection rectangle gets displayed when a user\n * made a selection with on or several nodes\n */\nconst selector$7 = (s) => {\n const selectedNodes = s.getNodes().filter((n) => n.selected);\n return {\n ...getNodesBounds(selectedNodes, s.nodeOrigin),\n transformString: `translate(${s.transform[0]}px,${s.transform[1]}px) scale(${s.transform[2]})`,\n userSelectionActive: s.userSelectionActive,\n };\n};\nfunction NodesSelection({ onSelectionContextMenu, noPanClassName, disableKeyboardA11y }) {\n const store = useStoreApi();\n const { width, height, x: left, y: top, transformString, userSelectionActive } = useStore(selector$7, shallow);\n const updatePositions = useUpdateNodePositions();\n const nodeRef = useRef(null);\n useEffect(() => {\n if (!disableKeyboardA11y) {\n nodeRef.current?.focus({\n preventScroll: true,\n });\n }\n }, [disableKeyboardA11y]);\n useDrag({\n nodeRef,\n });\n if (userSelectionActive || !width || !height) {\n return null;\n }\n const onContextMenu = onSelectionContextMenu\n ? (event) => {\n const selectedNodes = store\n .getState()\n .getNodes()\n .filter((n) => n.selected);\n onSelectionContextMenu(event, selectedNodes);\n }\n : undefined;\n const onKeyDown = (event) => {\n if (Object.prototype.hasOwnProperty.call(arrowKeyDiffs, event.key)) {\n updatePositions({\n x: arrowKeyDiffs[event.key].x,\n y: arrowKeyDiffs[event.key].y,\n isShiftPressed: event.shiftKey,\n });\n }\n };\n return (React.createElement(\"div\", { className: cc(['react-flow__nodesselection', 'react-flow__container', noPanClassName]), style: {\n transform: transformString,\n } },\n React.createElement(\"div\", { ref: nodeRef, className: \"react-flow__nodesselection-rect\", onContextMenu: onContextMenu, tabIndex: disableKeyboardA11y ? undefined : -1, onKeyDown: disableKeyboardA11y ? undefined : onKeyDown, style: {\n width,\n height,\n top,\n left,\n } })));\n}\nvar NodesSelection$1 = memo(NodesSelection);\n\nconst selector$6 = (s) => s.nodesSelectionActive;\nconst FlowRenderer = ({ children, onPaneClick, onPaneMouseEnter, onPaneMouseMove, onPaneMouseLeave, onPaneContextMenu, onPaneScroll, deleteKeyCode, onMove, onMoveStart, onMoveEnd, selectionKeyCode, selectionOnDrag, selectionMode, onSelectionStart, onSelectionEnd, multiSelectionKeyCode, panActivationKeyCode, zoomActivationKeyCode, elementsSelectable, zoomOnScroll, zoomOnPinch, panOnScroll: _panOnScroll, panOnScrollSpeed, panOnScrollMode, zoomOnDoubleClick, panOnDrag: _panOnDrag, defaultViewport, translateExtent, minZoom, maxZoom, preventScrolling, onSelectionContextMenu, noWheelClassName, noPanClassName, disableKeyboardA11y, }) => {\n const nodesSelectionActive = useStore(selector$6);\n const selectionKeyPressed = useKeyPress(selectionKeyCode);\n const panActivationKeyPressed = useKeyPress(panActivationKeyCode);\n const panOnDrag = panActivationKeyPressed || _panOnDrag;\n const panOnScroll = panActivationKeyPressed || _panOnScroll;\n const isSelecting = selectionKeyPressed || (selectionOnDrag && panOnDrag !== true);\n useGlobalKeyHandler({ deleteKeyCode, multiSelectionKeyCode });\n return (React.createElement(ZoomPane, { onMove: onMove, onMoveStart: onMoveStart, onMoveEnd: onMoveEnd, onPaneContextMenu: onPaneContextMenu, elementsSelectable: elementsSelectable, zoomOnScroll: zoomOnScroll, zoomOnPinch: zoomOnPinch, panOnScroll: panOnScroll, panOnScrollSpeed: panOnScrollSpeed, panOnScrollMode: panOnScrollMode, zoomOnDoubleClick: zoomOnDoubleClick, panOnDrag: !selectionKeyPressed && panOnDrag, defaultViewport: defaultViewport, translateExtent: translateExtent, minZoom: minZoom, maxZoom: maxZoom, zoomActivationKeyCode: zoomActivationKeyCode, preventScrolling: preventScrolling, noWheelClassName: noWheelClassName, noPanClassName: noPanClassName },\n React.createElement(Pane, { onSelectionStart: onSelectionStart, onSelectionEnd: onSelectionEnd, onPaneClick: onPaneClick, onPaneMouseEnter: onPaneMouseEnter, onPaneMouseMove: onPaneMouseMove, onPaneMouseLeave: onPaneMouseLeave, onPaneContextMenu: onPaneContextMenu, onPaneScroll: onPaneScroll, panOnDrag: panOnDrag, isSelecting: !!isSelecting, selectionMode: selectionMode },\n children,\n nodesSelectionActive && (React.createElement(NodesSelection$1, { onSelectionContextMenu: onSelectionContextMenu, noPanClassName: noPanClassName, disableKeyboardA11y: disableKeyboardA11y })))));\n};\nFlowRenderer.displayName = 'FlowRenderer';\nvar FlowRenderer$1 = memo(FlowRenderer);\n\nfunction useVisibleNodes(onlyRenderVisible) {\n const nodes = useStore(useCallback((s) => onlyRenderVisible\n ? getNodesInside(s.nodeInternals, { x: 0, y: 0, width: s.width, height: s.height }, s.transform, true)\n : s.getNodes(), [onlyRenderVisible]));\n return nodes;\n}\n\nfunction createNodeTypes(nodeTypes) {\n const standardTypes = {\n input: wrapNode((nodeTypes.input || InputNode$1)),\n default: wrapNode((nodeTypes.default || DefaultNode$1)),\n output: wrapNode((nodeTypes.output || OutputNode$1)),\n group: wrapNode((nodeTypes.group || GroupNode)),\n };\n const wrappedTypes = {};\n const specialTypes = Object.keys(nodeTypes)\n .filter((k) => !['input', 'default', 'output', 'group'].includes(k))\n .reduce((res, key) => {\n res[key] = wrapNode((nodeTypes[key] || DefaultNode$1));\n return res;\n }, wrappedTypes);\n return {\n ...standardTypes,\n ...specialTypes,\n };\n}\nconst getPositionWithOrigin = ({ x, y, width, height, origin, }) => {\n if (!width || !height) {\n return { x, y };\n }\n if (origin[0] < 0 || origin[1] < 0 || origin[0] > 1 || origin[1] > 1) {\n return { x, y };\n }\n return {\n x: x - width * origin[0],\n y: y - height * origin[1],\n };\n};\n\nconst selector$5 = (s) => ({\n nodesDraggable: s.nodesDraggable,\n nodesConnectable: s.nodesConnectable,\n nodesFocusable: s.nodesFocusable,\n elementsSelectable: s.elementsSelectable,\n updateNodeDimensions: s.updateNodeDimensions,\n onError: s.onError,\n});\nconst NodeRenderer = (props) => {\n const { nodesDraggable, nodesConnectable, nodesFocusable, elementsSelectable, updateNodeDimensions, onError } = useStore(selector$5, shallow);\n const nodes = useVisibleNodes(props.onlyRenderVisibleElements);\n const resizeObserverRef = useRef();\n const resizeObserver = useMemo(() => {\n if (typeof ResizeObserver === 'undefined') {\n return null;\n }\n const observer = new ResizeObserver((entries) => {\n const updates = entries.map((entry) => ({\n id: entry.target.getAttribute('data-id'),\n nodeElement: entry.target,\n forceUpdate: true,\n }));\n updateNodeDimensions(updates);\n });\n resizeObserverRef.current = observer;\n return observer;\n }, []);\n useEffect(() => {\n return () => {\n resizeObserverRef?.current?.disconnect();\n };\n }, []);\n return (React.createElement(\"div\", { className: \"react-flow__nodes\", style: containerStyle }, nodes.map((node) => {\n let nodeType = node.type || 'default';\n if (!props.nodeTypes[nodeType]) {\n onError?.('003', errorMessages['error003'](nodeType));\n nodeType = 'default';\n }\n const NodeComponent = (props.nodeTypes[nodeType] || props.nodeTypes.default);\n const isDraggable = !!(node.draggable || (nodesDraggable && typeof node.draggable === 'undefined'));\n const isSelectable = !!(node.selectable || (elementsSelectable && typeof node.selectable === 'undefined'));\n const isConnectable = !!(node.connectable || (nodesConnectable && typeof node.connectable === 'undefined'));\n const isFocusable = !!(node.focusable || (nodesFocusable && typeof node.focusable === 'undefined'));\n const clampedPosition = props.nodeExtent\n ? clampPosition(node.positionAbsolute, props.nodeExtent)\n : node.positionAbsolute;\n const posX = clampedPosition?.x ?? 0;\n const posY = clampedPosition?.y ?? 0;\n const posOrigin = getPositionWithOrigin({\n x: posX,\n y: posY,\n width: node.width ?? 0,\n height: node.height ?? 0,\n origin: props.nodeOrigin,\n });\n return (React.createElement(NodeComponent, { key: node.id, id: node.id, className: node.className, style: node.style, type: nodeType, data: node.data, sourcePosition: node.sourcePosition || Position.Bottom, targetPosition: node.targetPosition || Position.Top, hidden: node.hidden, xPos: posX, yPos: posY, xPosOrigin: posOrigin.x, yPosOrigin: posOrigin.y, selectNodesOnDrag: props.selectNodesOnDrag, onClick: props.onNodeClick, onMouseEnter: props.onNodeMouseEnter, onMouseMove: props.onNodeMouseMove, onMouseLeave: props.onNodeMouseLeave, onContextMenu: props.onNodeContextMenu, onDoubleClick: props.onNodeDoubleClick, selected: !!node.selected, isDraggable: isDraggable, isSelectable: isSelectable, isConnectable: isConnectable, isFocusable: isFocusable, resizeObserver: resizeObserver, dragHandle: node.dragHandle, zIndex: node[internalsSymbol]?.z ?? 0, isParent: !!node[internalsSymbol]?.isParent, noDragClassName: props.noDragClassName, noPanClassName: props.noPanClassName, initialized: !!node.width && !!node.height, rfId: props.rfId, disableKeyboardA11y: props.disableKeyboardA11y, ariaLabel: node.ariaLabel, hasHandleBounds: !!node[internalsSymbol]?.handleBounds }));\n })));\n};\nNodeRenderer.displayName = 'NodeRenderer';\nvar NodeRenderer$1 = memo(NodeRenderer);\n\nconst shiftX = (x, shift, position) => {\n if (position === Position.Left)\n return x - shift;\n if (position === Position.Right)\n return x + shift;\n return x;\n};\nconst shiftY = (y, shift, position) => {\n if (position === Position.Top)\n return y - shift;\n if (position === Position.Bottom)\n return y + shift;\n return y;\n};\nconst EdgeUpdaterClassName = 'react-flow__edgeupdater';\nconst EdgeAnchor = ({ position, centerX, centerY, radius = 10, onMouseDown, onMouseEnter, onMouseOut, type, }) => (React.createElement(\"circle\", { onMouseDown: onMouseDown, onMouseEnter: onMouseEnter, onMouseOut: onMouseOut, className: cc([EdgeUpdaterClassName, `${EdgeUpdaterClassName}-${type}`]), cx: shiftX(centerX, radius, position), cy: shiftY(centerY, radius, position), r: radius, stroke: \"transparent\", fill: \"transparent\" }));\n\nconst alwaysValidConnection = () => true;\nvar wrapEdge = (EdgeComponent) => {\n const EdgeWrapper = ({ id, className, type, data, onClick, onEdgeDoubleClick, selected, animated, label, labelStyle, labelShowBg, labelBgStyle, labelBgPadding, labelBgBorderRadius, style, source, target, sourceX, sourceY, targetX, targetY, sourcePosition, targetPosition, elementsSelectable, hidden, sourceHandleId, targetHandleId, onContextMenu, onMouseEnter, onMouseMove, onMouseLeave, reconnectRadius, onReconnect, onReconnectStart, onReconnectEnd, markerEnd, markerStart, rfId, ariaLabel, isFocusable, isReconnectable, pathOptions, interactionWidth, disableKeyboardA11y, }) => {\n const edgeRef = useRef(null);\n const [updateHover, setUpdateHover] = useState(false);\n const [updating, setUpdating] = useState(false);\n const store = useStoreApi();\n const markerStartUrl = useMemo(() => `url('#${getMarkerId(markerStart, rfId)}')`, [markerStart, rfId]);\n const markerEndUrl = useMemo(() => `url('#${getMarkerId(markerEnd, rfId)}')`, [markerEnd, rfId]);\n if (hidden) {\n return null;\n }\n const onEdgeClick = (event) => {\n const { edges, addSelectedEdges, unselectNodesAndEdges, multiSelectionActive } = store.getState();\n const edge = edges.find((e) => e.id === id);\n if (!edge) {\n return;\n }\n if (elementsSelectable) {\n store.setState({ nodesSelectionActive: false });\n if (edge.selected && multiSelectionActive) {\n unselectNodesAndEdges({ nodes: [], edges: [edge] });\n edgeRef.current?.blur();\n }\n else {\n addSelectedEdges([id]);\n }\n }\n if (onClick) {\n onClick(event, edge);\n }\n };\n const onEdgeDoubleClickHandler = getMouseHandler$1(id, store.getState, onEdgeDoubleClick);\n const onEdgeContextMenu = getMouseHandler$1(id, store.getState, onContextMenu);\n const onEdgeMouseEnter = getMouseHandler$1(id, store.getState, onMouseEnter);\n const onEdgeMouseMove = getMouseHandler$1(id, store.getState, onMouseMove);\n const onEdgeMouseLeave = getMouseHandler$1(id, store.getState, onMouseLeave);\n const handleEdgeUpdater = (event, isSourceHandle) => {\n // avoid triggering edge updater if mouse btn is not left\n if (event.button !== 0) {\n return;\n }\n const { edges, isValidConnection: isValidConnectionStore } = store.getState();\n const nodeId = isSourceHandle ? target : source;\n const handleId = (isSourceHandle ? targetHandleId : sourceHandleId) || null;\n const handleType = isSourceHandle ? 'target' : 'source';\n const isValidConnection = isValidConnectionStore || alwaysValidConnection;\n const isTarget = isSourceHandle;\n const edge = edges.find((e) => e.id === id);\n setUpdating(true);\n onReconnectStart?.(event, edge, handleType);\n const _onReconnectEnd = (evt) => {\n setUpdating(false);\n onReconnectEnd?.(evt, edge, handleType);\n };\n const onConnectEdge = (connection) => onReconnect?.(edge, connection);\n handlePointerDown({\n event,\n handleId,\n nodeId,\n onConnect: onConnectEdge,\n isTarget,\n getState: store.getState,\n setState: store.setState,\n isValidConnection,\n edgeUpdaterType: handleType,\n onReconnectEnd: _onReconnectEnd,\n });\n };\n const onEdgeUpdaterSourceMouseDown = (event) => handleEdgeUpdater(event, true);\n const onEdgeUpdaterTargetMouseDown = (event) => handleEdgeUpdater(event, false);\n const onEdgeUpdaterMouseEnter = () => setUpdateHover(true);\n const onEdgeUpdaterMouseOut = () => setUpdateHover(false);\n const inactive = !elementsSelectable && !onClick;\n const onKeyDown = (event) => {\n if (!disableKeyboardA11y && elementSelectionKeys.includes(event.key) && elementsSelectable) {\n const { unselectNodesAndEdges, addSelectedEdges, edges } = store.getState();\n const unselect = event.key === 'Escape';\n if (unselect) {\n edgeRef.current?.blur();\n unselectNodesAndEdges({ edges: [edges.find((e) => e.id === id)] });\n }\n else {\n addSelectedEdges([id]);\n }\n }\n };\n return (React.createElement(\"g\", { className: cc([\n 'react-flow__edge',\n `react-flow__edge-${type}`,\n className,\n { selected, animated, inactive, updating: updateHover },\n ]), onClick: onEdgeClick, onDoubleClick: onEdgeDoubleClickHandler, onContextMenu: onEdgeContextMenu, onMouseEnter: onEdgeMouseEnter, onMouseMove: onEdgeMouseMove, onMouseLeave: onEdgeMouseLeave, onKeyDown: isFocusable ? onKeyDown : undefined, tabIndex: isFocusable ? 0 : undefined, role: isFocusable ? 'button' : 'img', \"data-testid\": `rf__edge-${id}`, \"aria-label\": ariaLabel === null ? undefined : ariaLabel ? ariaLabel : `Edge from ${source} to ${target}`, \"aria-describedby\": isFocusable ? `${ARIA_EDGE_DESC_KEY}-${rfId}` : undefined, ref: edgeRef },\n !updating && (React.createElement(EdgeComponent, { id: id, source: source, target: target, selected: selected, animated: animated, label: label, labelStyle: labelStyle, labelShowBg: labelShowBg, labelBgStyle: labelBgStyle, labelBgPadding: labelBgPadding, labelBgBorderRadius: labelBgBorderRadius, data: data, style: style, sourceX: sourceX, sourceY: sourceY, targetX: targetX, targetY: targetY, sourcePosition: sourcePosition, targetPosition: targetPosition, sourceHandleId: sourceHandleId, targetHandleId: targetHandleId, markerStart: markerStartUrl, markerEnd: markerEndUrl, pathOptions: pathOptions, interactionWidth: interactionWidth })),\n isReconnectable && (React.createElement(React.Fragment, null,\n (isReconnectable === 'source' || isReconnectable === true) && (React.createElement(EdgeAnchor, { position: sourcePosition, centerX: sourceX, centerY: sourceY, radius: reconnectRadius, onMouseDown: onEdgeUpdaterSourceMouseDown, onMouseEnter: onEdgeUpdaterMouseEnter, onMouseOut: onEdgeUpdaterMouseOut, type: \"source\" })),\n (isReconnectable === 'target' || isReconnectable === true) && (React.createElement(EdgeAnchor, { position: targetPosition, centerX: targetX, centerY: targetY, radius: reconnectRadius, onMouseDown: onEdgeUpdaterTargetMouseDown, onMouseEnter: onEdgeUpdaterMouseEnter, onMouseOut: onEdgeUpdaterMouseOut, type: \"target\" }))))));\n };\n EdgeWrapper.displayName = 'EdgeWrapper';\n return memo(EdgeWrapper);\n};\n\nfunction createEdgeTypes(edgeTypes) {\n const standardTypes = {\n default: wrapEdge((edgeTypes.default || BezierEdge)),\n straight: wrapEdge((edgeTypes.bezier || StraightEdge)),\n step: wrapEdge((edgeTypes.step || StepEdge)),\n smoothstep: wrapEdge((edgeTypes.step || SmoothStepEdge)),\n simplebezier: wrapEdge((edgeTypes.simplebezier || SimpleBezierEdge)),\n };\n const wrappedTypes = {};\n const specialTypes = Object.keys(edgeTypes)\n .filter((k) => !['default', 'bezier'].includes(k))\n .reduce((res, key) => {\n res[key] = wrapEdge((edgeTypes[key] || BezierEdge));\n return res;\n }, wrappedTypes);\n return {\n ...standardTypes,\n ...specialTypes,\n };\n}\nfunction getHandlePosition(position, nodeRect, handle = null) {\n const x = (handle?.x || 0) + nodeRect.x;\n const y = (handle?.y || 0) + nodeRect.y;\n const width = handle?.width || nodeRect.width;\n const height = handle?.height || nodeRect.height;\n switch (position) {\n case Position.Top:\n return {\n x: x + width / 2,\n y,\n };\n case Position.Right:\n return {\n x: x + width,\n y: y + height / 2,\n };\n case Position.Bottom:\n return {\n x: x + width / 2,\n y: y + height,\n };\n case Position.Left:\n return {\n x,\n y: y + height / 2,\n };\n }\n}\nfunction getHandle(bounds, handleId) {\n if (!bounds) {\n return null;\n }\n if (bounds.length === 1 || !handleId) {\n return bounds[0];\n }\n else if (handleId) {\n return bounds.find((d) => d.id === handleId) || null;\n }\n return null;\n}\nconst getEdgePositions = (sourceNodeRect, sourceHandle, sourcePosition, targetNodeRect, targetHandle, targetPosition) => {\n const sourceHandlePos = getHandlePosition(sourcePosition, sourceNodeRect, sourceHandle);\n const targetHandlePos = getHandlePosition(targetPosition, targetNodeRect, targetHandle);\n return {\n sourceX: sourceHandlePos.x,\n sourceY: sourceHandlePos.y,\n targetX: targetHandlePos.x,\n targetY: targetHandlePos.y,\n };\n};\nfunction isEdgeVisible({ sourcePos, targetPos, sourceWidth, sourceHeight, targetWidth, targetHeight, width, height, transform, }) {\n const edgeBox = {\n x: Math.min(sourcePos.x, targetPos.x),\n y: Math.min(sourcePos.y, targetPos.y),\n x2: Math.max(sourcePos.x + sourceWidth, targetPos.x + targetWidth),\n y2: Math.max(sourcePos.y + sourceHeight, targetPos.y + targetHeight),\n };\n if (edgeBox.x === edgeBox.x2) {\n edgeBox.x2 += 1;\n }\n if (edgeBox.y === edgeBox.y2) {\n edgeBox.y2 += 1;\n }\n const viewBox = rectToBox({\n x: (0 - transform[0]) / transform[2],\n y: (0 - transform[1]) / transform[2],\n width: width / transform[2],\n height: height / transform[2],\n });\n const xOverlap = Math.max(0, Math.min(viewBox.x2, edgeBox.x2) - Math.max(viewBox.x, edgeBox.x));\n const yOverlap = Math.max(0, Math.min(viewBox.y2, edgeBox.y2) - Math.max(viewBox.y, edgeBox.y));\n const overlappingArea = Math.ceil(xOverlap * yOverlap);\n return overlappingArea > 0;\n}\nfunction getNodeData(node) {\n const handleBounds = node?.[internalsSymbol]?.handleBounds || null;\n const isValid = handleBounds &&\n node?.width &&\n node?.height &&\n typeof node?.positionAbsolute?.x !== 'undefined' &&\n typeof node?.positionAbsolute?.y !== 'undefined';\n return [\n {\n x: node?.positionAbsolute?.x || 0,\n y: node?.positionAbsolute?.y || 0,\n width: node?.width || 0,\n height: node?.height || 0,\n },\n handleBounds,\n !!isValid,\n ];\n}\n\nconst defaultEdgeTree = [{ level: 0, isMaxLevel: true, edges: [] }];\nfunction groupEdgesByZLevel(edges, nodeInternals, elevateEdgesOnSelect = false) {\n let maxLevel = -1;\n const levelLookup = edges.reduce((tree, edge) => {\n const hasZIndex = isNumeric(edge.zIndex);\n let z = hasZIndex ? edge.zIndex : 0;\n if (elevateEdgesOnSelect) {\n const targetNode = nodeInternals.get(edge.target);\n const sourceNode = nodeInternals.get(edge.source);\n const edgeOrConnectedNodeSelected = edge.selected || targetNode?.selected || sourceNode?.selected;\n const selectedZIndex = Math.max(sourceNode?.[internalsSymbol]?.z || 0, targetNode?.[internalsSymbol]?.z || 0, 1000);\n z = (hasZIndex ? edge.zIndex : 0) + (edgeOrConnectedNodeSelected ? selectedZIndex : 0);\n }\n if (tree[z]) {\n tree[z].push(edge);\n }\n else {\n tree[z] = [edge];\n }\n maxLevel = z > maxLevel ? z : maxLevel;\n return tree;\n }, {});\n const edgeTree = Object.entries(levelLookup).map(([key, edges]) => {\n const level = +key;\n return {\n edges,\n level,\n isMaxLevel: level === maxLevel,\n };\n });\n if (edgeTree.length === 0) {\n return defaultEdgeTree;\n }\n return edgeTree;\n}\nfunction useVisibleEdges(onlyRenderVisible, nodeInternals, elevateEdgesOnSelect) {\n const edges = useStore(useCallback((s) => {\n if (!onlyRenderVisible) {\n return s.edges;\n }\n return s.edges.filter((e) => {\n const sourceNode = nodeInternals.get(e.source);\n const targetNode = nodeInternals.get(e.target);\n return (sourceNode?.width &&\n sourceNode?.height &&\n targetNode?.width &&\n targetNode?.height &&\n isEdgeVisible({\n sourcePos: sourceNode.positionAbsolute || { x: 0, y: 0 },\n targetPos: targetNode.positionAbsolute || { x: 0, y: 0 },\n sourceWidth: sourceNode.width,\n sourceHeight: sourceNode.height,\n targetWidth: targetNode.width,\n targetHeight: targetNode.height,\n width: s.width,\n height: s.height,\n transform: s.transform,\n }));\n });\n }, [onlyRenderVisible, nodeInternals]));\n return groupEdgesByZLevel(edges, nodeInternals, elevateEdgesOnSelect);\n}\n\nconst ArrowSymbol = ({ color = 'none', strokeWidth = 1 }) => {\n return (React.createElement(\"polyline\", { style: {\n stroke: color,\n strokeWidth,\n }, strokeLinecap: \"round\", strokeLinejoin: \"round\", fill: \"none\", points: \"-5,-4 0,0 -5,4\" }));\n};\nconst ArrowClosedSymbol = ({ color = 'none', strokeWidth = 1 }) => {\n return (React.createElement(\"polyline\", { style: {\n stroke: color,\n fill: color,\n strokeWidth,\n }, strokeLinecap: \"round\", strokeLinejoin: \"round\", points: \"-5,-4 0,0 -5,4 -5,-4\" }));\n};\nconst MarkerSymbols = {\n [MarkerType.Arrow]: ArrowSymbol,\n [MarkerType.ArrowClosed]: ArrowClosedSymbol,\n};\nfunction useMarkerSymbol(type) {\n const store = useStoreApi();\n const symbol = useMemo(() => {\n const symbolExists = Object.prototype.hasOwnProperty.call(MarkerSymbols, type);\n if (!symbolExists) {\n store.getState().onError?.('009', errorMessages['error009'](type));\n return null;\n }\n return MarkerSymbols[type];\n }, [type]);\n return symbol;\n}\n\nconst Marker = ({ id, type, color, width = 12.5, height = 12.5, markerUnits = 'strokeWidth', strokeWidth, orient = 'auto-start-reverse', }) => {\n const Symbol = useMarkerSymbol(type);\n if (!Symbol) {\n return null;\n }\n return (React.createElement(\"marker\", { className: \"react-flow__arrowhead\", id: id, markerWidth: `${width}`, markerHeight: `${height}`, viewBox: \"-10 -10 20 20\", markerUnits: markerUnits, orient: orient, refX: \"0\", refY: \"0\" },\n React.createElement(Symbol, { color: color, strokeWidth: strokeWidth })));\n};\nconst markerSelector = ({ defaultColor, rfId }) => (s) => {\n const ids = [];\n return s.edges\n .reduce((markers, edge) => {\n [edge.markerStart, edge.markerEnd].forEach((marker) => {\n if (marker && typeof marker === 'object') {\n const markerId = getMarkerId(marker, rfId);\n if (!ids.includes(markerId)) {\n markers.push({ id: markerId, color: marker.color || defaultColor, ...marker });\n ids.push(markerId);\n }\n }\n });\n return markers;\n }, [])\n .sort((a, b) => a.id.localeCompare(b.id));\n};\n// when you have multiple flows on a page and you hide the first one, the other ones have no markers anymore\n// when they do have markers with the same ids. To prevent this the user can pass a unique id to the react flow wrapper\n// that we can then use for creating our unique marker ids\nconst MarkerDefinitions = ({ defaultColor, rfId }) => {\n const markers = useStore(useCallback(markerSelector({ defaultColor, rfId }), [defaultColor, rfId]), \n // the id includes all marker options, so we just need to look at that part of the marker\n (a, b) => !(a.length !== b.length || a.some((m, i) => m.id !== b[i].id)));\n return (React.createElement(\"defs\", null, markers.map((marker) => (React.createElement(Marker, { id: marker.id, key: marker.id, type: marker.type, color: marker.color, width: marker.width, height: marker.height, markerUnits: marker.markerUnits, strokeWidth: marker.strokeWidth, orient: marker.orient })))));\n};\nMarkerDefinitions.displayName = 'MarkerDefinitions';\nvar MarkerDefinitions$1 = memo(MarkerDefinitions);\n\nconst selector$4 = (s) => ({\n nodesConnectable: s.nodesConnectable,\n edgesFocusable: s.edgesFocusable,\n edgesUpdatable: s.edgesUpdatable,\n elementsSelectable: s.elementsSelectable,\n width: s.width,\n height: s.height,\n connectionMode: s.connectionMode,\n nodeInternals: s.nodeInternals,\n onError: s.onError,\n});\nconst EdgeRenderer = ({ defaultMarkerColor, onlyRenderVisibleElements, elevateEdgesOnSelect, rfId, edgeTypes, noPanClassName, onEdgeContextMenu, onEdgeMouseEnter, onEdgeMouseMove, onEdgeMouseLeave, onEdgeClick, onEdgeDoubleClick, onReconnect, onReconnectStart, onReconnectEnd, reconnectRadius, children, disableKeyboardA11y, }) => {\n const { edgesFocusable, edgesUpdatable, elementsSelectable, width, height, connectionMode, nodeInternals, onError } = useStore(selector$4, shallow);\n const edgeTree = useVisibleEdges(onlyRenderVisibleElements, nodeInternals, elevateEdgesOnSelect);\n if (!width) {\n return null;\n }\n return (React.createElement(React.Fragment, null,\n edgeTree.map(({ level, edges, isMaxLevel }) => (React.createElement(\"svg\", { key: level, style: { zIndex: level }, width: width, height: height, className: \"react-flow__edges react-flow__container\" },\n isMaxLevel && React.createElement(MarkerDefinitions$1, { defaultColor: defaultMarkerColor, rfId: rfId }),\n React.createElement(\"g\", null, edges.map((edge) => {\n const [sourceNodeRect, sourceHandleBounds, sourceIsValid] = getNodeData(nodeInternals.get(edge.source));\n const [targetNodeRect, targetHandleBounds, targetIsValid] = getNodeData(nodeInternals.get(edge.target));\n if (!sourceIsValid || !targetIsValid) {\n return null;\n }\n let edgeType = edge.type || 'default';\n if (!edgeTypes[edgeType]) {\n onError?.('011', errorMessages['error011'](edgeType));\n edgeType = 'default';\n }\n const EdgeComponent = edgeTypes[edgeType] || edgeTypes.default;\n // when connection type is loose we can define all handles as sources and connect source -> source\n const targetNodeHandles = connectionMode === ConnectionMode.Strict\n ? targetHandleBounds.target\n : (targetHandleBounds.target ?? []).concat(targetHandleBounds.source ?? []);\n const sourceHandle = getHandle(sourceHandleBounds.source, edge.sourceHandle);\n const targetHandle = getHandle(targetNodeHandles, edge.targetHandle);\n const sourcePosition = sourceHandle?.position || Position.Bottom;\n const targetPosition = targetHandle?.position || Position.Top;\n const isFocusable = !!(edge.focusable || (edgesFocusable && typeof edge.focusable === 'undefined'));\n const edgeReconnectable = edge.reconnectable || edge.updatable;\n const isReconnectable = typeof onReconnect !== 'undefined' &&\n (edgeReconnectable || (edgesUpdatable && typeof edgeReconnectable === 'undefined'));\n if (!sourceHandle || !targetHandle) {\n onError?.('008', errorMessages['error008'](sourceHandle, edge));\n return null;\n }\n const { sourceX, sourceY, targetX, targetY } = getEdgePositions(sourceNodeRect, sourceHandle, sourcePosition, targetNodeRect, targetHandle, targetPosition);\n return (React.createElement(EdgeComponent, { key: edge.id, id: edge.id, className: cc([edge.className, noPanClassName]), type: edgeType, data: edge.data, selected: !!edge.selected, animated: !!edge.animated, hidden: !!edge.hidden, label: edge.label, labelStyle: edge.labelStyle, labelShowBg: edge.labelShowBg, labelBgStyle: edge.labelBgStyle, labelBgPadding: edge.labelBgPadding, labelBgBorderRadius: edge.labelBgBorderRadius, style: edge.style, source: edge.source, target: edge.target, sourceHandleId: edge.sourceHandle, targetHandleId: edge.targetHandle, markerEnd: edge.markerEnd, markerStart: edge.markerStart, sourceX: sourceX, sourceY: sourceY, targetX: targetX, targetY: targetY, sourcePosition: sourcePosition, targetPosition: targetPosition, elementsSelectable: elementsSelectable, onContextMenu: onEdgeContextMenu, onMouseEnter: onEdgeMouseEnter, onMouseMove: onEdgeMouseMove, onMouseLeave: onEdgeMouseLeave, onClick: onEdgeClick, onEdgeDoubleClick: onEdgeDoubleClick, onReconnect: onReconnect, onReconnectStart: onReconnectStart, onReconnectEnd: onReconnectEnd, reconnectRadius: reconnectRadius, rfId: rfId, ariaLabel: edge.ariaLabel, isFocusable: isFocusable, isReconnectable: isReconnectable, pathOptions: 'pathOptions' in edge ? edge.pathOptions : undefined, interactionWidth: edge.interactionWidth, disableKeyboardA11y: disableKeyboardA11y }));\n }))))),\n children));\n};\nEdgeRenderer.displayName = 'EdgeRenderer';\nvar EdgeRenderer$1 = memo(EdgeRenderer);\n\nconst selector$3 = (s) => `translate(${s.transform[0]}px,${s.transform[1]}px) scale(${s.transform[2]})`;\nfunction Viewport({ children }) {\n const transform = useStore(selector$3);\n return (React.createElement(\"div\", { className: \"react-flow__viewport react-flow__container\", style: { transform } }, children));\n}\n\nfunction useOnInitHandler(onInit) {\n const rfInstance = useReactFlow();\n const isInitialized = useRef(false);\n useEffect(() => {\n if (!isInitialized.current && rfInstance.viewportInitialized && onInit) {\n setTimeout(() => onInit(rfInstance), 1);\n isInitialized.current = true;\n }\n }, [onInit, rfInstance.viewportInitialized]);\n}\n\nconst oppositePosition = {\n [Position.Left]: Position.Right,\n [Position.Right]: Position.Left,\n [Position.Top]: Position.Bottom,\n [Position.Bottom]: Position.Top,\n};\nconst ConnectionLine = ({ nodeId, handleType, style, type = ConnectionLineType.Bezier, CustomComponent, connectionStatus, }) => {\n const { fromNode, handleId, toX, toY, connectionMode } = useStore(useCallback((s) => ({\n fromNode: s.nodeInternals.get(nodeId),\n handleId: s.connectionHandleId,\n toX: (s.connectionPosition.x - s.transform[0]) / s.transform[2],\n toY: (s.connectionPosition.y - s.transform[1]) / s.transform[2],\n connectionMode: s.connectionMode,\n }), [nodeId]), shallow);\n const fromHandleBounds = fromNode?.[internalsSymbol]?.handleBounds;\n let handleBounds = fromHandleBounds?.[handleType];\n if (connectionMode === ConnectionMode.Loose) {\n handleBounds = handleBounds ? handleBounds : fromHandleBounds?.[handleType === 'source' ? 'target' : 'source'];\n }\n if (!fromNode || !handleBounds) {\n return null;\n }\n const fromHandle = handleId ? handleBounds.find((d) => d.id === handleId) : handleBounds[0];\n const fromHandleX = fromHandle ? fromHandle.x + fromHandle.width / 2 : (fromNode.width ?? 0) / 2;\n const fromHandleY = fromHandle ? fromHandle.y + fromHandle.height / 2 : fromNode.height ?? 0;\n const fromX = (fromNode.positionAbsolute?.x ?? 0) + fromHandleX;\n const fromY = (fromNode.positionAbsolute?.y ?? 0) + fromHandleY;\n const fromPosition = fromHandle?.position;\n const toPosition = fromPosition ? oppositePosition[fromPosition] : null;\n if (!fromPosition || !toPosition) {\n return null;\n }\n if (CustomComponent) {\n return (React.createElement(CustomComponent, { connectionLineType: type, connectionLineStyle: style, fromNode: fromNode, fromHandle: fromHandle, fromX: fromX, fromY: fromY, toX: toX, toY: toY, fromPosition: fromPosition, toPosition: toPosition, connectionStatus: connectionStatus }));\n }\n let dAttr = '';\n const pathParams = {\n sourceX: fromX,\n sourceY: fromY,\n sourcePosition: fromPosition,\n targetX: toX,\n targetY: toY,\n targetPosition: toPosition,\n };\n if (type === ConnectionLineType.Bezier) {\n // we assume the destination position is opposite to the source position\n [dAttr] = getBezierPath(pathParams);\n }\n else if (type === ConnectionLineType.Step) {\n [dAttr] = getSmoothStepPath({\n ...pathParams,\n borderRadius: 0,\n });\n }\n else if (type === ConnectionLineType.SmoothStep) {\n [dAttr] = getSmoothStepPath(pathParams);\n }\n else if (type === ConnectionLineType.SimpleBezier) {\n [dAttr] = getSimpleBezierPath(pathParams);\n }\n else {\n dAttr = `M${fromX},${fromY} ${toX},${toY}`;\n }\n return React.createElement(\"path\", { d: dAttr, fill: \"none\", className: \"react-flow__connection-path\", style: style });\n};\nConnectionLine.displayName = 'ConnectionLine';\nconst selector$2 = (s) => ({\n nodeId: s.connectionNodeId,\n handleType: s.connectionHandleType,\n nodesConnectable: s.nodesConnectable,\n connectionStatus: s.connectionStatus,\n width: s.width,\n height: s.height,\n});\nfunction ConnectionLineWrapper({ containerStyle, style, type, component }) {\n const { nodeId, handleType, nodesConnectable, width, height, connectionStatus } = useStore(selector$2, shallow);\n const isValid = !!(nodeId && handleType && width && nodesConnectable);\n if (!isValid) {\n return null;\n }\n return (React.createElement(\"svg\", { style: containerStyle, width: width, height: height, className: \"react-flow__edges react-flow__connectionline react-flow__container\" },\n React.createElement(\"g\", { className: cc(['react-flow__connection', connectionStatus]) },\n React.createElement(ConnectionLine, { nodeId: nodeId, handleType: handleType, style: style, type: type, CustomComponent: component, connectionStatus: connectionStatus }))));\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction useNodeOrEdgeTypes(nodeOrEdgeTypes, createTypes) {\n const typesKeysRef = useRef(null);\n const store = useStoreApi();\n const typesParsed = useMemo(() => {\n if (process.env.NODE_ENV === 'development') {\n const typeKeys = Object.keys(nodeOrEdgeTypes);\n if (shallow(typesKeysRef.current, typeKeys)) {\n store.getState().onError?.('002', errorMessages['error002']());\n }\n typesKeysRef.current = typeKeys;\n }\n return createTypes(nodeOrEdgeTypes);\n }, [nodeOrEdgeTypes]);\n return typesParsed;\n}\n\nconst GraphView = ({ nodeTypes, edgeTypes, onMove, onMoveStart, onMoveEnd, onInit, onNodeClick, onEdgeClick, onNodeDoubleClick, onEdgeDoubleClick, onNodeMouseEnter, onNodeMouseMove, onNodeMouseLeave, onNodeContextMenu, onSelectionContextMenu, onSelectionStart, onSelectionEnd, connectionLineType, connectionLineStyle, connectionLineComponent, connectionLineContainerStyle, selectionKeyCode, selectionOnDrag, selectionMode, multiSelectionKeyCode, panActivationKeyCode, zoomActivationKeyCode, deleteKeyCode, onlyRenderVisibleElements, elementsSelectable, selectNodesOnDrag, defaultViewport, translateExtent, minZoom, maxZoom, preventScrolling, defaultMarkerColor, zoomOnScroll, zoomOnPinch, panOnScroll, panOnScrollSpeed, panOnScrollMode, zoomOnDoubleClick, panOnDrag, onPaneClick, onPaneMouseEnter, onPaneMouseMove, onPaneMouseLeave, onPaneScroll, onPaneContextMenu, onEdgeContextMenu, onEdgeMouseEnter, onEdgeMouseMove, onEdgeMouseLeave, onReconnect, onReconnectStart, onReconnectEnd, reconnectRadius, noDragClassName, noWheelClassName, noPanClassName, elevateEdgesOnSelect, disableKeyboardA11y, nodeOrigin, nodeExtent, rfId, }) => {\n const nodeTypesWrapped = useNodeOrEdgeTypes(nodeTypes, createNodeTypes);\n const edgeTypesWrapped = useNodeOrEdgeTypes(edgeTypes, createEdgeTypes);\n useOnInitHandler(onInit);\n return (React.createElement(FlowRenderer$1, { onPaneClick: onPaneClick, onPaneMouseEnter: onPaneMouseEnter, onPaneMouseMove: onPaneMouseMove, onPaneMouseLeave: onPaneMouseLeave, onPaneContextMenu: onPaneContextMenu, onPaneScroll: onPaneScroll, deleteKeyCode: deleteKeyCode, selectionKeyCode: selectionKeyCode, selectionOnDrag: selectionOnDrag, selectionMode: selectionMode, onSelectionStart: onSelectionStart, onSelectionEnd: onSelectionEnd, multiSelectionKeyCode: multiSelectionKeyCode, panActivationKeyCode: panActivationKeyCode, zoomActivationKeyCode: zoomActivationKeyCode, elementsSelectable: elementsSelectable, onMove: onMove, onMoveStart: onMoveStart, onMoveEnd: onMoveEnd, zoomOnScroll: zoomOnScroll, zoomOnPinch: zoomOnPinch, zoomOnDoubleClick: zoomOnDoubleClick, panOnScroll: panOnScroll, panOnScrollSpeed: panOnScrollSpeed, panOnScrollMode: panOnScrollMode, panOnDrag: panOnDrag, defaultViewport: defaultViewport, translateExtent: translateExtent, minZoom: minZoom, maxZoom: maxZoom, onSelectionContextMenu: onSelectionContextMenu, preventScrolling: preventScrolling, noDragClassName: noDragClassName, noWheelClassName: noWheelClassName, noPanClassName: noPanClassName, disableKeyboardA11y: disableKeyboardA11y },\n React.createElement(Viewport, null,\n React.createElement(EdgeRenderer$1, { edgeTypes: edgeTypesWrapped, onEdgeClick: onEdgeClick, onEdgeDoubleClick: onEdgeDoubleClick, onlyRenderVisibleElements: onlyRenderVisibleElements, onEdgeContextMenu: onEdgeContextMenu, onEdgeMouseEnter: onEdgeMouseEnter, onEdgeMouseMove: onEdgeMouseMove, onEdgeMouseLeave: onEdgeMouseLeave, onReconnect: onReconnect, onReconnectStart: onReconnectStart, onReconnectEnd: onReconnectEnd, reconnectRadius: reconnectRadius, defaultMarkerColor: defaultMarkerColor, noPanClassName: noPanClassName, elevateEdgesOnSelect: !!elevateEdgesOnSelect, disableKeyboardA11y: disableKeyboardA11y, rfId: rfId },\n React.createElement(ConnectionLineWrapper, { style: connectionLineStyle, type: connectionLineType, component: connectionLineComponent, containerStyle: connectionLineContainerStyle })),\n React.createElement(\"div\", { className: \"react-flow__edgelabel-renderer\" }),\n React.createElement(NodeRenderer$1, { nodeTypes: nodeTypesWrapped, onNodeClick: onNodeClick, onNodeDoubleClick: onNodeDoubleClick, onNodeMouseEnter: onNodeMouseEnter, onNodeMouseMove: onNodeMouseMove, onNodeMouseLeave: onNodeMouseLeave, onNodeContextMenu: onNodeContextMenu, selectNodesOnDrag: selectNodesOnDrag, onlyRenderVisibleElements: onlyRenderVisibleElements, noPanClassName: noPanClassName, noDragClassName: noDragClassName, disableKeyboardA11y: disableKeyboardA11y, nodeOrigin: nodeOrigin, nodeExtent: nodeExtent, rfId: rfId }))));\n};\nGraphView.displayName = 'GraphView';\nvar GraphView$1 = memo(GraphView);\n\nconst infiniteExtent = [\n [Number.NEGATIVE_INFINITY, Number.NEGATIVE_INFINITY],\n [Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY],\n];\nconst initialState = {\n rfId: '1',\n width: 0,\n height: 0,\n transform: [0, 0, 1],\n nodeInternals: new Map(),\n edges: [],\n onNodesChange: null,\n onEdgesChange: null,\n hasDefaultNodes: false,\n hasDefaultEdges: false,\n d3Zoom: null,\n d3Selection: null,\n d3ZoomHandler: undefined,\n minZoom: 0.5,\n maxZoom: 2,\n translateExtent: infiniteExtent,\n nodeExtent: infiniteExtent,\n nodesSelectionActive: false,\n userSelectionActive: false,\n userSelectionRect: null,\n connectionNodeId: null,\n connectionHandleId: null,\n connectionHandleType: 'source',\n connectionPosition: { x: 0, y: 0 },\n connectionStatus: null,\n connectionMode: ConnectionMode.Strict,\n domNode: null,\n paneDragging: false,\n noPanClassName: 'nopan',\n nodeOrigin: [0, 0],\n nodeDragThreshold: 0,\n snapGrid: [15, 15],\n snapToGrid: false,\n nodesDraggable: true,\n nodesConnectable: true,\n nodesFocusable: true,\n edgesFocusable: true,\n edgesUpdatable: true,\n elementsSelectable: true,\n elevateNodesOnSelect: true,\n fitViewOnInit: false,\n fitViewOnInitDone: false,\n fitViewOnInitOptions: undefined,\n onSelectionChange: [],\n multiSelectionActive: false,\n connectionStartHandle: null,\n connectionEndHandle: null,\n connectionClickStartHandle: null,\n connectOnClick: true,\n ariaLiveMessage: '',\n autoPanOnConnect: true,\n autoPanOnNodeDrag: true,\n connectionRadius: 20,\n onError: devWarn,\n isValidConnection: undefined,\n};\n\nconst createRFStore = () => createWithEqualityFn((set, get) => ({\n ...initialState,\n setNodes: (nodes) => {\n const { nodeInternals, nodeOrigin, elevateNodesOnSelect } = get();\n set({ nodeInternals: createNodeInternals(nodes, nodeInternals, nodeOrigin, elevateNodesOnSelect) });\n },\n getNodes: () => {\n return Array.from(get().nodeInternals.values());\n },\n setEdges: (edges) => {\n const { defaultEdgeOptions = {} } = get();\n set({ edges: edges.map((e) => ({ ...defaultEdgeOptions, ...e })) });\n },\n setDefaultNodesAndEdges: (nodes, edges) => {\n const hasDefaultNodes = typeof nodes !== 'undefined';\n const hasDefaultEdges = typeof edges !== 'undefined';\n const nodeInternals = hasDefaultNodes\n ? createNodeInternals(nodes, new Map(), get().nodeOrigin, get().elevateNodesOnSelect)\n : new Map();\n const nextEdges = hasDefaultEdges ? edges : [];\n set({ nodeInternals, edges: nextEdges, hasDefaultNodes, hasDefaultEdges });\n },\n updateNodeDimensions: (updates) => {\n const { onNodesChange, nodeInternals, fitViewOnInit, fitViewOnInitDone, fitViewOnInitOptions, domNode, nodeOrigin, } = get();\n const viewportNode = domNode?.querySelector('.react-flow__viewport');\n if (!viewportNode) {\n return;\n }\n const style = window.getComputedStyle(viewportNode);\n const { m22: zoom } = new window.DOMMatrixReadOnly(style.transform);\n const changes = updates.reduce((res, update) => {\n const node = nodeInternals.get(update.id);\n if (node?.hidden) {\n nodeInternals.set(node.id, {\n ...node,\n [internalsSymbol]: {\n ...node[internalsSymbol],\n // we need to reset the handle bounds when the node is hidden\n // in order to force a new observation when the node is shown again\n handleBounds: undefined,\n },\n });\n }\n else if (node) {\n const dimensions = getDimensions(update.nodeElement);\n const doUpdate = !!(dimensions.width &&\n dimensions.height &&\n (node.width !== dimensions.width || node.height !== dimensions.height || update.forceUpdate));\n if (doUpdate) {\n nodeInternals.set(node.id, {\n ...node,\n [internalsSymbol]: {\n ...node[internalsSymbol],\n handleBounds: {\n source: getHandleBounds('.source', update.nodeElement, zoom, nodeOrigin),\n target: getHandleBounds('.target', update.nodeElement, zoom, nodeOrigin),\n },\n },\n ...dimensions,\n });\n res.push({\n id: node.id,\n type: 'dimensions',\n dimensions,\n });\n }\n }\n return res;\n }, []);\n updateAbsoluteNodePositions(nodeInternals, nodeOrigin);\n const nextFitViewOnInitDone = fitViewOnInitDone ||\n (fitViewOnInit && !fitViewOnInitDone && fitView(get, { initial: true, ...fitViewOnInitOptions }));\n set({ nodeInternals: new Map(nodeInternals), fitViewOnInitDone: nextFitViewOnInitDone });\n if (changes?.length > 0) {\n onNodesChange?.(changes);\n }\n },\n updateNodePositions: (nodeDragItems, positionChanged = true, dragging = false) => {\n const { triggerNodeChanges } = get();\n const changes = nodeDragItems.map((node) => {\n const change = {\n id: node.id,\n type: 'position',\n dragging,\n };\n if (positionChanged) {\n change.positionAbsolute = node.positionAbsolute;\n change.position = node.position;\n }\n return change;\n });\n triggerNodeChanges(changes);\n },\n triggerNodeChanges: (changes) => {\n const { onNodesChange, nodeInternals, hasDefaultNodes, nodeOrigin, getNodes, elevateNodesOnSelect } = get();\n if (changes?.length) {\n if (hasDefaultNodes) {\n const nodes = applyNodeChanges(changes, getNodes());\n const nextNodeInternals = createNodeInternals(nodes, nodeInternals, nodeOrigin, elevateNodesOnSelect);\n set({ nodeInternals: nextNodeInternals });\n }\n onNodesChange?.(changes);\n }\n },\n addSelectedNodes: (selectedNodeIds) => {\n const { multiSelectionActive, edges, getNodes } = get();\n let changedNodes;\n let changedEdges = null;\n if (multiSelectionActive) {\n changedNodes = selectedNodeIds.map((nodeId) => createSelectionChange(nodeId, true));\n }\n else {\n changedNodes = getSelectionChanges(getNodes(), selectedNodeIds);\n changedEdges = getSelectionChanges(edges, []);\n }\n updateNodesAndEdgesSelections({\n changedNodes,\n changedEdges,\n get,\n set,\n });\n },\n addSelectedEdges: (selectedEdgeIds) => {\n const { multiSelectionActive, edges, getNodes } = get();\n let changedEdges;\n let changedNodes = null;\n if (multiSelectionActive) {\n changedEdges = selectedEdgeIds.map((edgeId) => createSelectionChange(edgeId, true));\n }\n else {\n changedEdges = getSelectionChanges(edges, selectedEdgeIds);\n changedNodes = getSelectionChanges(getNodes(), []);\n }\n updateNodesAndEdgesSelections({\n changedNodes,\n changedEdges,\n get,\n set,\n });\n },\n unselectNodesAndEdges: ({ nodes, edges } = {}) => {\n const { edges: storeEdges, getNodes } = get();\n const nodesToUnselect = nodes ? nodes : getNodes();\n const edgesToUnselect = edges ? edges : storeEdges;\n const changedNodes = nodesToUnselect.map((n) => {\n n.selected = false;\n return createSelectionChange(n.id, false);\n });\n const changedEdges = edgesToUnselect.map((edge) => createSelectionChange(edge.id, false));\n updateNodesAndEdgesSelections({\n changedNodes,\n changedEdges,\n get,\n set,\n });\n },\n setMinZoom: (minZoom) => {\n const { d3Zoom, maxZoom } = get();\n d3Zoom?.scaleExtent([minZoom, maxZoom]);\n set({ minZoom });\n },\n setMaxZoom: (maxZoom) => {\n const { d3Zoom, minZoom } = get();\n d3Zoom?.scaleExtent([minZoom, maxZoom]);\n set({ maxZoom });\n },\n setTranslateExtent: (translateExtent) => {\n get().d3Zoom?.translateExtent(translateExtent);\n set({ translateExtent });\n },\n resetSelectedElements: () => {\n const { edges, getNodes } = get();\n const nodes = getNodes();\n const nodesToUnselect = nodes\n .filter((e) => e.selected)\n .map((n) => createSelectionChange(n.id, false));\n const edgesToUnselect = edges\n .filter((e) => e.selected)\n .map((e) => createSelectionChange(e.id, false));\n updateNodesAndEdgesSelections({\n changedNodes: nodesToUnselect,\n changedEdges: edgesToUnselect,\n get,\n set,\n });\n },\n setNodeExtent: (nodeExtent) => {\n const { nodeInternals } = get();\n nodeInternals.forEach((node) => {\n node.positionAbsolute = clampPosition(node.position, nodeExtent);\n });\n set({\n nodeExtent,\n nodeInternals: new Map(nodeInternals),\n });\n },\n panBy: (delta) => {\n const { transform, width, height, d3Zoom, d3Selection, translateExtent } = get();\n if (!d3Zoom || !d3Selection || (!delta.x && !delta.y)) {\n return false;\n }\n const nextTransform = zoomIdentity\n .translate(transform[0] + delta.x, transform[1] + delta.y)\n .scale(transform[2]);\n const extent = [\n [0, 0],\n [width, height],\n ];\n const constrainedTransform = d3Zoom?.constrain()(nextTransform, extent, translateExtent);\n d3Zoom.transform(d3Selection, constrainedTransform);\n const transformChanged = transform[0] !== constrainedTransform.x ||\n transform[1] !== constrainedTransform.y ||\n transform[2] !== constrainedTransform.k;\n return transformChanged;\n },\n cancelConnection: () => set({\n connectionNodeId: initialState.connectionNodeId,\n connectionHandleId: initialState.connectionHandleId,\n connectionHandleType: initialState.connectionHandleType,\n connectionStatus: initialState.connectionStatus,\n connectionStartHandle: initialState.connectionStartHandle,\n connectionEndHandle: initialState.connectionEndHandle,\n }),\n reset: () => set({ ...initialState }),\n}), Object.is);\n\nconst ReactFlowProvider = ({ children }) => {\n const storeRef = useRef(null);\n if (!storeRef.current) {\n storeRef.current = createRFStore();\n }\n return React.createElement(Provider$1, { value: storeRef.current }, children);\n};\nReactFlowProvider.displayName = 'ReactFlowProvider';\n\nconst Wrapper = ({ children }) => {\n const isWrapped = useContext(StoreContext);\n if (isWrapped) {\n // we need to wrap it with a fragment because it's not allowed for children to be a ReactNode\n // https://github.com/DefinitelyTyped/DefinitelyTyped/issues/18051\n return React.createElement(React.Fragment, null, children);\n }\n return React.createElement(ReactFlowProvider, null, children);\n};\nWrapper.displayName = 'ReactFlowWrapper';\n\nconst defaultNodeTypes = {\n input: InputNode$1,\n default: DefaultNode$1,\n output: OutputNode$1,\n group: GroupNode,\n};\nconst defaultEdgeTypes = {\n default: BezierEdge,\n straight: StraightEdge,\n step: StepEdge,\n smoothstep: SmoothStepEdge,\n simplebezier: SimpleBezierEdge,\n};\nconst initNodeOrigin = [0, 0];\nconst initSnapGrid = [15, 15];\nconst initDefaultViewport = { x: 0, y: 0, zoom: 1 };\nconst wrapperStyle = {\n width: '100%',\n height: '100%',\n overflow: 'hidden',\n position: 'relative',\n zIndex: 0,\n};\nconst ReactFlow = forwardRef(({ nodes, edges, defaultNodes, defaultEdges, className, nodeTypes = defaultNodeTypes, edgeTypes = defaultEdgeTypes, onNodeClick, onEdgeClick, onInit, onMove, onMoveStart, onMoveEnd, onConnect, onConnectStart, onConnectEnd, onClickConnectStart, onClickConnectEnd, onNodeMouseEnter, onNodeMouseMove, onNodeMouseLeave, onNodeContextMenu, onNodeDoubleClick, onNodeDragStart, onNodeDrag, onNodeDragStop, onNodesDelete, onEdgesDelete, onSelectionChange, onSelectionDragStart, onSelectionDrag, onSelectionDragStop, onSelectionContextMenu, onSelectionStart, onSelectionEnd, connectionMode = ConnectionMode.Strict, connectionLineType = ConnectionLineType.Bezier, connectionLineStyle, connectionLineComponent, connectionLineContainerStyle, deleteKeyCode = 'Backspace', selectionKeyCode = 'Shift', selectionOnDrag = false, selectionMode = SelectionMode.Full, panActivationKeyCode = 'Space', multiSelectionKeyCode = isMacOs() ? 'Meta' : 'Control', zoomActivationKeyCode = isMacOs() ? 'Meta' : 'Control', snapToGrid = false, snapGrid = initSnapGrid, onlyRenderVisibleElements = false, selectNodesOnDrag = true, nodesDraggable, nodesConnectable, nodesFocusable, nodeOrigin = initNodeOrigin, edgesFocusable, edgesUpdatable, elementsSelectable, defaultViewport = initDefaultViewport, minZoom = 0.5, maxZoom = 2, translateExtent = infiniteExtent, preventScrolling = true, nodeExtent, defaultMarkerColor = '#b1b1b7', zoomOnScroll = true, zoomOnPinch = true, panOnScroll = false, panOnScrollSpeed = 0.5, panOnScrollMode = PanOnScrollMode.Free, zoomOnDoubleClick = true, panOnDrag = true, onPaneClick, onPaneMouseEnter, onPaneMouseMove, onPaneMouseLeave, onPaneScroll, onPaneContextMenu, children, onEdgeContextMenu, onEdgeDoubleClick, onEdgeMouseEnter, onEdgeMouseMove, onEdgeMouseLeave, onEdgeUpdate, onEdgeUpdateStart, onEdgeUpdateEnd, onReconnect, onReconnectStart, onReconnectEnd, reconnectRadius = 10, edgeUpdaterRadius = 10, onNodesChange, onEdgesChange, noDragClassName = 'nodrag', noWheelClassName = 'nowheel', noPanClassName = 'nopan', fitView = false, fitViewOptions, connectOnClick = true, attributionPosition, proOptions, defaultEdgeOptions, elevateNodesOnSelect = true, elevateEdgesOnSelect = false, disableKeyboardA11y = false, autoPanOnConnect = true, autoPanOnNodeDrag = true, connectionRadius = 20, isValidConnection, onError, style, id, nodeDragThreshold, ...rest }, ref) => {\n const rfId = id || '1';\n return (React.createElement(\"div\", { ...rest, style: { ...style, ...wrapperStyle }, ref: ref, className: cc(['react-flow', className]), \"data-testid\": \"rf__wrapper\", id: id },\n React.createElement(Wrapper, null,\n React.createElement(GraphView$1, { onInit: onInit, onMove: onMove, onMoveStart: onMoveStart, onMoveEnd: onMoveEnd, onNodeClick: onNodeClick, onEdgeClick: onEdgeClick, onNodeMouseEnter: onNodeMouseEnter, onNodeMouseMove: onNodeMouseMove, onNodeMouseLeave: onNodeMouseLeave, onNodeContextMenu: onNodeContextMenu, onNodeDoubleClick: onNodeDoubleClick, nodeTypes: nodeTypes, edgeTypes: edgeTypes, connectionLineType: connectionLineType, connectionLineStyle: connectionLineStyle, connectionLineComponent: connectionLineComponent, connectionLineContainerStyle: connectionLineContainerStyle, selectionKeyCode: selectionKeyCode, selectionOnDrag: selectionOnDrag, selectionMode: selectionMode, deleteKeyCode: deleteKeyCode, multiSelectionKeyCode: multiSelectionKeyCode, panActivationKeyCode: panActivationKeyCode, zoomActivationKeyCode: zoomActivationKeyCode, onlyRenderVisibleElements: onlyRenderVisibleElements, selectNodesOnDrag: selectNodesOnDrag, defaultViewport: defaultViewport, translateExtent: translateExtent, minZoom: minZoom, maxZoom: maxZoom, preventScrolling: preventScrolling, zoomOnScroll: zoomOnScroll, zoomOnPinch: zoomOnPinch, zoomOnDoubleClick: zoomOnDoubleClick, panOnScroll: panOnScroll, panOnScrollSpeed: panOnScrollSpeed, panOnScrollMode: panOnScrollMode, panOnDrag: panOnDrag, onPaneClick: onPaneClick, onPaneMouseEnter: onPaneMouseEnter, onPaneMouseMove: onPaneMouseMove, onPaneMouseLeave: onPaneMouseLeave, onPaneScroll: onPaneScroll, onPaneContextMenu: onPaneContextMenu, onSelectionContextMenu: onSelectionContextMenu, onSelectionStart: onSelectionStart, onSelectionEnd: onSelectionEnd, onEdgeContextMenu: onEdgeContextMenu, onEdgeDoubleClick: onEdgeDoubleClick, onEdgeMouseEnter: onEdgeMouseEnter, onEdgeMouseMove: onEdgeMouseMove, onEdgeMouseLeave: onEdgeMouseLeave, onReconnect: onReconnect ?? onEdgeUpdate, onReconnectStart: onReconnectStart ?? onEdgeUpdateStart, onReconnectEnd: onReconnectEnd ?? onEdgeUpdateEnd, reconnectRadius: reconnectRadius ?? edgeUpdaterRadius, defaultMarkerColor: defaultMarkerColor, noDragClassName: noDragClassName, noWheelClassName: noWheelClassName, noPanClassName: noPanClassName, elevateEdgesOnSelect: elevateEdgesOnSelect, rfId: rfId, disableKeyboardA11y: disableKeyboardA11y, nodeOrigin: nodeOrigin, nodeExtent: nodeExtent }),\n React.createElement(StoreUpdater, { nodes: nodes, edges: edges, defaultNodes: defaultNodes, defaultEdges: defaultEdges, onConnect: onConnect, onConnectStart: onConnectStart, onConnectEnd: onConnectEnd, onClickConnectStart: onClickConnectStart, onClickConnectEnd: onClickConnectEnd, nodesDraggable: nodesDraggable, nodesConnectable: nodesConnectable, nodesFocusable: nodesFocusable, edgesFocusable: edgesFocusable, edgesUpdatable: edgesUpdatable, elementsSelectable: elementsSelectable, elevateNodesOnSelect: elevateNodesOnSelect, minZoom: minZoom, maxZoom: maxZoom, nodeExtent: nodeExtent, onNodesChange: onNodesChange, onEdgesChange: onEdgesChange, snapToGrid: snapToGrid, snapGrid: snapGrid, connectionMode: connectionMode, translateExtent: translateExtent, connectOnClick: connectOnClick, defaultEdgeOptions: defaultEdgeOptions, fitView: fitView, fitViewOptions: fitViewOptions, onNodesDelete: onNodesDelete, onEdgesDelete: onEdgesDelete, onNodeDragStart: onNodeDragStart, onNodeDrag: onNodeDrag, onNodeDragStop: onNodeDragStop, onSelectionDrag: onSelectionDrag, onSelectionDragStart: onSelectionDragStart, onSelectionDragStop: onSelectionDragStop, noPanClassName: noPanClassName, nodeOrigin: nodeOrigin, rfId: rfId, autoPanOnConnect: autoPanOnConnect, autoPanOnNodeDrag: autoPanOnNodeDrag, onError: onError, connectionRadius: connectionRadius, isValidConnection: isValidConnection, nodeDragThreshold: nodeDragThreshold }),\n React.createElement(Wrapper$1, { onSelectionChange: onSelectionChange }),\n children,\n React.createElement(Attribution, { proOptions: proOptions, position: attributionPosition }),\n React.createElement(A11yDescriptions, { rfId: rfId, disableKeyboardA11y: disableKeyboardA11y }))));\n});\nReactFlow.displayName = 'ReactFlow';\n\nconst selector$1 = (s) => s.domNode?.querySelector('.react-flow__edgelabel-renderer');\nfunction EdgeLabelRenderer({ children }) {\n const edgeLabelRenderer = useStore(selector$1);\n if (!edgeLabelRenderer) {\n return null;\n }\n return createPortal(children, edgeLabelRenderer);\n}\n\nfunction useUpdateNodeInternals() {\n const store = useStoreApi();\n return useCallback((id) => {\n const { domNode, updateNodeDimensions } = store.getState();\n const updateIds = Array.isArray(id) ? id : [id];\n const updates = updateIds.reduce((res, updateId) => {\n const nodeElement = domNode?.querySelector(`.react-flow__node[data-id=\"${updateId}\"]`);\n if (nodeElement) {\n res.push({ id: updateId, nodeElement, forceUpdate: true });\n }\n return res;\n }, []);\n requestAnimationFrame(() => updateNodeDimensions(updates));\n }, []);\n}\n\nconst nodesSelector = (state) => state.getNodes();\nfunction useNodes() {\n const nodes = useStore(nodesSelector, shallow);\n return nodes;\n}\n\nconst edgesSelector = (state) => state.edges;\nfunction useEdges() {\n const edges = useStore(edgesSelector, shallow);\n return edges;\n}\n\nconst viewportSelector = (state) => ({\n x: state.transform[0],\n y: state.transform[1],\n zoom: state.transform[2],\n});\nfunction useViewport() {\n const viewport = useStore(viewportSelector, shallow);\n return viewport;\n}\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\nfunction createUseItemsState(applyChanges) {\n return (initialItems) => {\n const [items, setItems] = useState(initialItems);\n const onItemsChange = useCallback((changes) => setItems((items) => applyChanges(changes, items)), []);\n return [items, setItems, onItemsChange];\n };\n}\nconst useNodesState = createUseItemsState(applyNodeChanges);\nconst useEdgesState = createUseItemsState(applyEdgeChanges);\n\nfunction useOnViewportChange({ onStart, onChange, onEnd }) {\n const store = useStoreApi();\n useEffect(() => {\n store.setState({ onViewportChangeStart: onStart });\n }, [onStart]);\n useEffect(() => {\n store.setState({ onViewportChange: onChange });\n }, [onChange]);\n useEffect(() => {\n store.setState({ onViewportChangeEnd: onEnd });\n }, [onEnd]);\n}\n\nfunction useOnSelectionChange({ onChange }) {\n const store = useStoreApi();\n useEffect(() => {\n const nextSelectionChangeHandlers = [...store.getState().onSelectionChange, onChange];\n store.setState({ onSelectionChange: nextSelectionChangeHandlers });\n return () => {\n const nextHandlers = store.getState().onSelectionChange.filter((fn) => fn !== onChange);\n store.setState({ onSelectionChange: nextHandlers });\n };\n }, [onChange]);\n}\n\nconst selector = (options) => (s) => {\n if (s.nodeInternals.size === 0) {\n return false;\n }\n return s\n .getNodes()\n .filter((n) => (options.includeHiddenNodes ? true : !n.hidden))\n .every((n) => n[internalsSymbol]?.handleBounds !== undefined);\n};\nconst defaultOptions = {\n includeHiddenNodes: false,\n};\nfunction useNodesInitialized(options = defaultOptions) {\n const initialized = useStore(selector(options));\n return initialized;\n}\n\nexport { BaseEdge, BezierEdge, ConnectionLineType, ConnectionMode, EdgeLabelRenderer, EdgeText$1 as EdgeText, Handle$1 as Handle, MarkerType, PanOnScrollMode, Panel, Position, ReactFlow, ReactFlowProvider, SelectionMode, SimpleBezierEdge, SmoothStepEdge, StepEdge, StraightEdge, addEdge, applyEdgeChanges, applyNodeChanges, boxToRect, clamp, getBezierPath, getBoundsOfRects, getConnectedEdges, getIncomers, getMarkerEnd, getNodePositionWithOrigin, getNodesBounds, getOutgoers, getRectOfNodes, getSimpleBezierPath, getSmoothStepPath, getStraightPath, getTransformForBounds, getViewportForBounds, handleParentExpand, internalsSymbol, isEdge, isNode, reconnectEdge, rectToBox, updateEdge, useEdges, useEdgesState, useGetPointerPosition, useKeyPress, useNodeId, useNodes, useNodesInitialized, useNodesState, useOnSelectionChange, useOnViewportChange, useReactFlow, useStore, useStoreApi, useUpdateNodeInternals, useViewport };\n","import React, { memo, useRef, useEffect } from 'react';\nimport cc from 'classcat';\nimport { shallow } from 'zustand/shallow';\nimport { zoom, zoomIdentity } from 'd3-zoom';\nimport { select, pointer } from 'd3-selection';\nimport { useStore, getNodePositionWithOrigin, useStoreApi, Panel, getBoundsOfRects, getNodesBounds } from '@reactflow/core';\n\nconst MiniMapNode = ({ id, x, y, width, height, style, color, strokeColor, strokeWidth, className, borderRadius, shapeRendering, onClick, selected, }) => {\n const { background, backgroundColor } = style || {};\n const fill = (color || background || backgroundColor);\n return (React.createElement(\"rect\", { className: cc(['react-flow__minimap-node', { selected }, className]), x: x, y: y, rx: borderRadius, ry: borderRadius, width: width, height: height, fill: fill, stroke: strokeColor, strokeWidth: strokeWidth, shapeRendering: shapeRendering, onClick: onClick ? (event) => onClick(event, id) : undefined }));\n};\nMiniMapNode.displayName = 'MiniMapNode';\nvar MiniMapNode$1 = memo(MiniMapNode);\n\n/* eslint-disable @typescript-eslint/ban-ts-comment */\nconst selector$1 = (s) => s.nodeOrigin;\nconst selectorNodes = (s) => s.getNodes().filter((node) => !node.hidden && node.width && node.height);\nconst getAttrFunction = (func) => (func instanceof Function ? func : () => func);\nfunction MiniMapNodes({ nodeStrokeColor = 'transparent', nodeColor = '#e2e2e2', nodeClassName = '', nodeBorderRadius = 5, nodeStrokeWidth = 2, \n// We need to rename the prop to be `CapitalCase` so that JSX will render it as\n// a component properly.\nnodeComponent: NodeComponent = MiniMapNode$1, onClick, }) {\n const nodes = useStore(selectorNodes, shallow);\n const nodeOrigin = useStore(selector$1);\n const nodeColorFunc = getAttrFunction(nodeColor);\n const nodeStrokeColorFunc = getAttrFunction(nodeStrokeColor);\n const nodeClassNameFunc = getAttrFunction(nodeClassName);\n const shapeRendering = typeof window === 'undefined' || !!window.chrome ? 'crispEdges' : 'geometricPrecision';\n return (React.createElement(React.Fragment, null, nodes.map((node) => {\n const { x, y } = getNodePositionWithOrigin(node, nodeOrigin).positionAbsolute;\n return (React.createElement(NodeComponent, { key: node.id, x: x, y: y, width: node.width, height: node.height, style: node.style, selected: node.selected, className: nodeClassNameFunc(node), color: nodeColorFunc(node), borderRadius: nodeBorderRadius, strokeColor: nodeStrokeColorFunc(node), strokeWidth: nodeStrokeWidth, shapeRendering: shapeRendering, onClick: onClick, id: node.id }));\n })));\n}\nvar MiniMapNodes$1 = memo(MiniMapNodes);\n\n/* eslint-disable @typescript-eslint/ban-ts-comment */\nconst defaultWidth = 200;\nconst defaultHeight = 150;\nconst selector = (s) => {\n const nodes = s.getNodes();\n const viewBB = {\n x: -s.transform[0] / s.transform[2],\n y: -s.transform[1] / s.transform[2],\n width: s.width / s.transform[2],\n height: s.height / s.transform[2],\n };\n return {\n viewBB,\n boundingRect: nodes.length > 0 ? getBoundsOfRects(getNodesBounds(nodes, s.nodeOrigin), viewBB) : viewBB,\n rfId: s.rfId,\n };\n};\nconst ARIA_LABEL_KEY = 'react-flow__minimap-desc';\nfunction MiniMap({ style, className, nodeStrokeColor = 'transparent', nodeColor = '#e2e2e2', nodeClassName = '', nodeBorderRadius = 5, nodeStrokeWidth = 2, \n// We need to rename the prop to be `CapitalCase` so that JSX will render it as\n// a component properly.\nnodeComponent, maskColor = 'rgb(240, 240, 240, 0.6)', maskStrokeColor = 'none', maskStrokeWidth = 1, position = 'bottom-right', onClick, onNodeClick, pannable = false, zoomable = false, ariaLabel = 'React Flow mini map', inversePan = false, zoomStep = 10, offsetScale = 5, }) {\n const store = useStoreApi();\n const svg = useRef(null);\n const { boundingRect, viewBB, rfId } = useStore(selector, shallow);\n const elementWidth = style?.width ?? defaultWidth;\n const elementHeight = style?.height ?? defaultHeight;\n const scaledWidth = boundingRect.width / elementWidth;\n const scaledHeight = boundingRect.height / elementHeight;\n const viewScale = Math.max(scaledWidth, scaledHeight);\n const viewWidth = viewScale * elementWidth;\n const viewHeight = viewScale * elementHeight;\n const offset = offsetScale * viewScale;\n const x = boundingRect.x - (viewWidth - boundingRect.width) / 2 - offset;\n const y = boundingRect.y - (viewHeight - boundingRect.height) / 2 - offset;\n const width = viewWidth + offset * 2;\n const height = viewHeight + offset * 2;\n const labelledBy = `${ARIA_LABEL_KEY}-${rfId}`;\n const viewScaleRef = useRef(0);\n viewScaleRef.current = viewScale;\n useEffect(() => {\n if (svg.current) {\n const selection = select(svg.current);\n const zoomHandler = (event) => {\n const { transform, d3Selection, d3Zoom } = store.getState();\n if (event.sourceEvent.type !== 'wheel' || !d3Selection || !d3Zoom) {\n return;\n }\n const pinchDelta = -event.sourceEvent.deltaY *\n (event.sourceEvent.deltaMode === 1 ? 0.05 : event.sourceEvent.deltaMode ? 1 : 0.002) *\n zoomStep;\n const zoom = transform[2] * Math.pow(2, pinchDelta);\n d3Zoom.scaleTo(d3Selection, zoom);\n };\n const panHandler = (event) => {\n const { transform, d3Selection, d3Zoom, translateExtent, width, height } = store.getState();\n if (event.sourceEvent.type !== 'mousemove' || !d3Selection || !d3Zoom) {\n return;\n }\n // @TODO: how to calculate the correct next position? Math.max(1, transform[2]) is a workaround.\n const moveScale = viewScaleRef.current * Math.max(1, transform[2]) * (inversePan ? -1 : 1);\n const position = {\n x: transform[0] - event.sourceEvent.movementX * moveScale,\n y: transform[1] - event.sourceEvent.movementY * moveScale,\n };\n const extent = [\n [0, 0],\n [width, height],\n ];\n const nextTransform = zoomIdentity.translate(position.x, position.y).scale(transform[2]);\n const constrainedTransform = d3Zoom.constrain()(nextTransform, extent, translateExtent);\n d3Zoom.transform(d3Selection, constrainedTransform);\n };\n const zoomAndPanHandler = zoom()\n // @ts-ignore\n .on('zoom', pannable ? panHandler : null)\n // @ts-ignore\n .on('zoom.wheel', zoomable ? zoomHandler : null);\n selection.call(zoomAndPanHandler);\n return () => {\n selection.on('zoom', null);\n };\n }\n }, [pannable, zoomable, inversePan, zoomStep]);\n const onSvgClick = onClick\n ? (event) => {\n const rfCoord = pointer(event);\n onClick(event, { x: rfCoord[0], y: rfCoord[1] });\n }\n : undefined;\n const onSvgNodeClick = onNodeClick\n ? (event, nodeId) => {\n const node = store.getState().nodeInternals.get(nodeId);\n onNodeClick(event, node);\n }\n : undefined;\n return (React.createElement(Panel, { position: position, style: style, className: cc(['react-flow__minimap', className]), \"data-testid\": \"rf__minimap\" },\n React.createElement(\"svg\", { width: elementWidth, height: elementHeight, viewBox: `${x} ${y} ${width} ${height}`, role: \"img\", \"aria-labelledby\": labelledBy, ref: svg, onClick: onSvgClick },\n ariaLabel && React.createElement(\"title\", { id: labelledBy }, ariaLabel),\n React.createElement(MiniMapNodes$1, { onClick: onSvgNodeClick, nodeColor: nodeColor, nodeStrokeColor: nodeStrokeColor, nodeBorderRadius: nodeBorderRadius, nodeClassName: nodeClassName, nodeStrokeWidth: nodeStrokeWidth, nodeComponent: nodeComponent }),\n React.createElement(\"path\", { className: \"react-flow__minimap-mask\", d: `M${x - offset},${y - offset}h${width + offset * 2}v${height + offset * 2}h${-width - offset * 2}z\n M${viewBB.x},${viewBB.y}h${viewBB.width}v${viewBB.height}h${-viewBB.width}z`, fill: maskColor, fillRule: \"evenodd\", stroke: maskStrokeColor, strokeWidth: maskStrokeWidth, pointerEvents: \"none\" }))));\n}\nMiniMap.displayName = 'MiniMap';\nvar MiniMap$1 = memo(MiniMap);\n\nexport { MiniMap$1 as MiniMap };\n","import React, { memo, useState, useEffect } from 'react';\nimport cc from 'classcat';\nimport { shallow } from 'zustand/shallow';\nimport { useStoreApi, useStore, useReactFlow, Panel } from '@reactflow/core';\n\nfunction PlusIcon() {\n return (React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", viewBox: \"0 0 32 32\" },\n React.createElement(\"path\", { d: \"M32 18.133H18.133V32h-4.266V18.133H0v-4.266h13.867V0h4.266v13.867H32z\" })));\n}\n\nfunction MinusIcon() {\n return (React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", viewBox: \"0 0 32 5\" },\n React.createElement(\"path\", { d: \"M0 0h32v4.2H0z\" })));\n}\n\nfunction FitViewIcon() {\n return (React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", viewBox: \"0 0 32 30\" },\n React.createElement(\"path\", { d: \"M3.692 4.63c0-.53.4-.938.939-.938h5.215V0H4.708C2.13 0 0 2.054 0 4.63v5.216h3.692V4.631zM27.354 0h-5.2v3.692h5.17c.53 0 .984.4.984.939v5.215H32V4.631A4.624 4.624 0 0027.354 0zm.954 24.83c0 .532-.4.94-.939.94h-5.215v3.768h5.215c2.577 0 4.631-2.13 4.631-4.707v-5.139h-3.692v5.139zm-23.677.94c-.531 0-.939-.4-.939-.94v-5.138H0v5.139c0 2.577 2.13 4.707 4.708 4.707h5.138V25.77H4.631z\" })));\n}\n\nfunction LockIcon() {\n return (React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", viewBox: \"0 0 25 32\" },\n React.createElement(\"path\", { d: \"M21.333 10.667H19.81V7.619C19.81 3.429 16.38 0 12.19 0 8 0 4.571 3.429 4.571 7.619v3.048H3.048A3.056 3.056 0 000 13.714v15.238A3.056 3.056 0 003.048 32h18.285a3.056 3.056 0 003.048-3.048V13.714a3.056 3.056 0 00-3.048-3.047zM12.19 24.533a3.056 3.056 0 01-3.047-3.047 3.056 3.056 0 013.047-3.048 3.056 3.056 0 013.048 3.048 3.056 3.056 0 01-3.048 3.047zm4.724-13.866H7.467V7.619c0-2.59 2.133-4.724 4.723-4.724 2.591 0 4.724 2.133 4.724 4.724v3.048z\" })));\n}\n\nfunction UnlockIcon() {\n return (React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", viewBox: \"0 0 25 32\" },\n React.createElement(\"path\", { d: \"M21.333 10.667H19.81V7.619C19.81 3.429 16.38 0 12.19 0c-4.114 1.828-1.37 2.133.305 2.438 1.676.305 4.42 2.59 4.42 5.181v3.048H3.047A3.056 3.056 0 000 13.714v15.238A3.056 3.056 0 003.048 32h18.285a3.056 3.056 0 003.048-3.048V13.714a3.056 3.056 0 00-3.048-3.047zM12.19 24.533a3.056 3.056 0 01-3.047-3.047 3.056 3.056 0 013.047-3.048 3.056 3.056 0 013.048 3.048 3.056 3.056 0 01-3.048 3.047z\" })));\n}\n\nconst ControlButton = ({ children, className, ...rest }) => (React.createElement(\"button\", { type: \"button\", className: cc(['react-flow__controls-button', className]), ...rest }, children));\nControlButton.displayName = 'ControlButton';\n\nconst selector = (s) => ({\n isInteractive: s.nodesDraggable || s.nodesConnectable || s.elementsSelectable,\n minZoomReached: s.transform[2] <= s.minZoom,\n maxZoomReached: s.transform[2] >= s.maxZoom,\n});\nconst Controls = ({ style, showZoom = true, showFitView = true, showInteractive = true, fitViewOptions, onZoomIn, onZoomOut, onFitView, onInteractiveChange, className, children, position = 'bottom-left', }) => {\n const store = useStoreApi();\n const [isVisible, setIsVisible] = useState(false);\n const { isInteractive, minZoomReached, maxZoomReached } = useStore(selector, shallow);\n const { zoomIn, zoomOut, fitView } = useReactFlow();\n useEffect(() => {\n setIsVisible(true);\n }, []);\n if (!isVisible) {\n return null;\n }\n const onZoomInHandler = () => {\n zoomIn();\n onZoomIn?.();\n };\n const onZoomOutHandler = () => {\n zoomOut();\n onZoomOut?.();\n };\n const onFitViewHandler = () => {\n fitView(fitViewOptions);\n onFitView?.();\n };\n const onToggleInteractivity = () => {\n store.setState({\n nodesDraggable: !isInteractive,\n nodesConnectable: !isInteractive,\n elementsSelectable: !isInteractive,\n });\n onInteractiveChange?.(!isInteractive);\n };\n return (React.createElement(Panel, { className: cc(['react-flow__controls', className]), position: position, style: style, \"data-testid\": \"rf__controls\" },\n showZoom && (React.createElement(React.Fragment, null,\n React.createElement(ControlButton, { onClick: onZoomInHandler, className: \"react-flow__controls-zoomin\", title: \"zoom in\", \"aria-label\": \"zoom in\", disabled: maxZoomReached },\n React.createElement(PlusIcon, null)),\n React.createElement(ControlButton, { onClick: onZoomOutHandler, className: \"react-flow__controls-zoomout\", title: \"zoom out\", \"aria-label\": \"zoom out\", disabled: minZoomReached },\n React.createElement(MinusIcon, null)))),\n showFitView && (React.createElement(ControlButton, { className: \"react-flow__controls-fitview\", onClick: onFitViewHandler, title: \"fit view\", \"aria-label\": \"fit view\" },\n React.createElement(FitViewIcon, null))),\n showInteractive && (React.createElement(ControlButton, { className: \"react-flow__controls-interactive\", onClick: onToggleInteractivity, title: \"toggle interactivity\", \"aria-label\": \"toggle interactivity\" }, isInteractive ? React.createElement(UnlockIcon, null) : React.createElement(LockIcon, null))),\n children));\n};\nControls.displayName = 'Controls';\nvar Controls$1 = memo(Controls);\n\nexport { ControlButton, Controls$1 as Controls };\n","import React, { memo, useRef } from 'react';\nimport cc from 'classcat';\nimport { useStore } from '@reactflow/core';\nimport { shallow } from 'zustand/shallow';\n\nvar BackgroundVariant;\n(function (BackgroundVariant) {\n BackgroundVariant[\"Lines\"] = \"lines\";\n BackgroundVariant[\"Dots\"] = \"dots\";\n BackgroundVariant[\"Cross\"] = \"cross\";\n})(BackgroundVariant || (BackgroundVariant = {}));\n\nfunction LinePattern({ color, dimensions, lineWidth }) {\n return (React.createElement(\"path\", { stroke: color, strokeWidth: lineWidth, d: `M${dimensions[0] / 2} 0 V${dimensions[1]} M0 ${dimensions[1] / 2} H${dimensions[0]}` }));\n}\nfunction DotPattern({ color, radius }) {\n return React.createElement(\"circle\", { cx: radius, cy: radius, r: radius, fill: color });\n}\n\nconst defaultColor = {\n [BackgroundVariant.Dots]: '#91919a',\n [BackgroundVariant.Lines]: '#eee',\n [BackgroundVariant.Cross]: '#e2e2e2',\n};\nconst defaultSize = {\n [BackgroundVariant.Dots]: 1,\n [BackgroundVariant.Lines]: 1,\n [BackgroundVariant.Cross]: 6,\n};\nconst selector = (s) => ({ transform: s.transform, patternId: `pattern-${s.rfId}` });\nfunction Background({ id, variant = BackgroundVariant.Dots, \n// only used for dots and cross\ngap = 20, \n// only used for lines and cross\nsize, lineWidth = 1, offset = 2, color, style, className, }) {\n const ref = useRef(null);\n const { transform, patternId } = useStore(selector, shallow);\n const patternColor = color || defaultColor[variant];\n const patternSize = size || defaultSize[variant];\n const isDots = variant === BackgroundVariant.Dots;\n const isCross = variant === BackgroundVariant.Cross;\n const gapXY = Array.isArray(gap) ? gap : [gap, gap];\n const scaledGap = [gapXY[0] * transform[2] || 1, gapXY[1] * transform[2] || 1];\n const scaledSize = patternSize * transform[2];\n const patternDimensions = isCross ? [scaledSize, scaledSize] : scaledGap;\n const patternOffset = isDots\n ? [scaledSize / offset, scaledSize / offset]\n : [patternDimensions[0] / offset, patternDimensions[1] / offset];\n return (React.createElement(\"svg\", { className: cc(['react-flow__background', className]), style: {\n ...style,\n position: 'absolute',\n width: '100%',\n height: '100%',\n top: 0,\n left: 0,\n }, ref: ref, \"data-testid\": \"rf__background\" },\n React.createElement(\"pattern\", { id: patternId + id, x: transform[0] % scaledGap[0], y: transform[1] % scaledGap[1], width: scaledGap[0], height: scaledGap[1], patternUnits: \"userSpaceOnUse\", patternTransform: `translate(-${patternOffset[0]},-${patternOffset[1]})` }, isDots ? (React.createElement(DotPattern, { color: patternColor, radius: scaledSize / offset })) : (React.createElement(LinePattern, { dimensions: patternDimensions, color: patternColor, lineWidth: lineWidth }))),\n React.createElement(\"rect\", { x: \"0\", y: \"0\", width: \"100%\", height: \"100%\", fill: `url(#${patternId + id})` })));\n}\nBackground.displayName = 'Background';\nvar Background$1 = memo(Background);\n\nexport { Background$1 as Background, BackgroundVariant };\n","import React, { useCallback } from 'react';\nimport { useStore, useNodeId, getNodesBounds, internalsSymbol, Position } from '@reactflow/core';\nimport cc from 'classcat';\nimport { shallow } from 'zustand/shallow';\nimport { createPortal } from 'react-dom';\n\nconst selector = (state) => state.domNode?.querySelector('.react-flow__renderer');\nfunction NodeToolbarPortal({ children }) {\n const wrapperRef = useStore(selector);\n if (!wrapperRef) {\n return null;\n }\n return createPortal(children, wrapperRef);\n}\n\nconst nodeEqualityFn = (a, b) => a?.positionAbsolute?.x === b?.positionAbsolute?.x &&\n a?.positionAbsolute?.y === b?.positionAbsolute?.y &&\n a?.width === b?.width &&\n a?.height === b?.height &&\n a?.selected === b?.selected &&\n a?.[internalsSymbol]?.z === b?.[internalsSymbol]?.z;\nconst nodesEqualityFn = (a, b) => {\n return a.length === b.length && a.every((node, i) => nodeEqualityFn(node, b[i]));\n};\nconst storeSelector = (state) => ({\n transform: state.transform,\n nodeOrigin: state.nodeOrigin,\n selectedNodesCount: state.getNodes().filter((node) => node.selected).length,\n});\nfunction getTransform(nodeRect, transform, position, offset, align) {\n let alignmentOffset = 0.5;\n if (align === 'start') {\n alignmentOffset = 0;\n }\n else if (align === 'end') {\n alignmentOffset = 1;\n }\n // position === Position.Top\n // we set the x any y position of the toolbar based on the nodes position\n let pos = [\n (nodeRect.x + nodeRect.width * alignmentOffset) * transform[2] + transform[0],\n nodeRect.y * transform[2] + transform[1] - offset,\n ];\n // and than shift it based on the alignment. The shift values are in %.\n let shift = [-100 * alignmentOffset, -100];\n switch (position) {\n case Position.Right:\n pos = [\n (nodeRect.x + nodeRect.width) * transform[2] + transform[0] + offset,\n (nodeRect.y + nodeRect.height * alignmentOffset) * transform[2] + transform[1],\n ];\n shift = [0, -100 * alignmentOffset];\n break;\n case Position.Bottom:\n pos[1] = (nodeRect.y + nodeRect.height) * transform[2] + transform[1] + offset;\n shift[1] = 0;\n break;\n case Position.Left:\n pos = [\n nodeRect.x * transform[2] + transform[0] - offset,\n (nodeRect.y + nodeRect.height * alignmentOffset) * transform[2] + transform[1],\n ];\n shift = [-100, -100 * alignmentOffset];\n break;\n }\n return `translate(${pos[0]}px, ${pos[1]}px) translate(${shift[0]}%, ${shift[1]}%)`;\n}\nfunction NodeToolbar({ nodeId, children, className, style, isVisible, position = Position.Top, offset = 10, align = 'center', ...rest }) {\n const contextNodeId = useNodeId();\n const nodesSelector = useCallback((state) => {\n const nodeIds = Array.isArray(nodeId) ? nodeId : [nodeId || contextNodeId || ''];\n return nodeIds.reduce((acc, id) => {\n const node = state.nodeInternals.get(id);\n if (node) {\n acc.push(node);\n }\n return acc;\n }, []);\n }, [nodeId, contextNodeId]);\n const nodes = useStore(nodesSelector, nodesEqualityFn);\n const { transform, nodeOrigin, selectedNodesCount } = useStore(storeSelector, shallow);\n const isActive = typeof isVisible === 'boolean' ? isVisible : nodes.length === 1 && nodes[0].selected && selectedNodesCount === 1;\n if (!isActive || !nodes.length) {\n return null;\n }\n const nodeRect = getNodesBounds(nodes, nodeOrigin);\n const zIndex = Math.max(...nodes.map((node) => (node[internalsSymbol]?.z || 1) + 1));\n const wrapperStyle = {\n position: 'absolute',\n transform: getTransform(nodeRect, transform, position, offset, align),\n zIndex,\n ...style,\n };\n return (React.createElement(NodeToolbarPortal, null,\n React.createElement(\"div\", { style: wrapperStyle, className: cc(['react-flow__node-toolbar', className]), ...rest }, children)));\n}\n\nexport { NodeToolbar };\n","import React, { memo, useRef, useEffect } from 'react';\nimport cc from 'classcat';\nimport { drag } from 'd3-drag';\nimport { select } from 'd3-selection';\nimport { useNodeId, useStoreApi, useGetPointerPosition, clamp } from '@reactflow/core';\n\nvar ResizeControlVariant;\n(function (ResizeControlVariant) {\n ResizeControlVariant[\"Line\"] = \"line\";\n ResizeControlVariant[\"Handle\"] = \"handle\";\n})(ResizeControlVariant || (ResizeControlVariant = {}));\n\n// returns an array of two numbers (0, 1 or -1) representing the direction of the resize\n// 0 = no change, 1 = increase, -1 = decrease\nfunction getDirection({ width, prevWidth, height, prevHeight, invertX, invertY }) {\n const deltaWidth = width - prevWidth;\n const deltaHeight = height - prevHeight;\n const direction = [deltaWidth > 0 ? 1 : deltaWidth < 0 ? -1 : 0, deltaHeight > 0 ? 1 : deltaHeight < 0 ? -1 : 0];\n if (deltaWidth && invertX) {\n direction[0] = direction[0] * -1;\n }\n if (deltaHeight && invertY) {\n direction[1] = direction[1] * -1;\n }\n return direction;\n}\n\nconst initPrevValues = { width: 0, height: 0, x: 0, y: 0 };\nconst initStartValues = {\n ...initPrevValues,\n pointerX: 0,\n pointerY: 0,\n aspectRatio: 1,\n};\nfunction ResizeControl({ nodeId, position, variant = ResizeControlVariant.Handle, className, style = {}, children, color, minWidth = 10, minHeight = 10, maxWidth = Number.MAX_VALUE, maxHeight = Number.MAX_VALUE, keepAspectRatio = false, shouldResize, onResizeStart, onResize, onResizeEnd, }) {\n const contextNodeId = useNodeId();\n const id = typeof nodeId === 'string' ? nodeId : contextNodeId;\n const store = useStoreApi();\n const resizeControlRef = useRef(null);\n const startValues = useRef(initStartValues);\n const prevValues = useRef(initPrevValues);\n const getPointerPosition = useGetPointerPosition();\n const defaultPosition = variant === ResizeControlVariant.Line ? 'right' : 'bottom-right';\n const controlPosition = position ?? defaultPosition;\n useEffect(() => {\n if (!resizeControlRef.current || !id) {\n return;\n }\n const selection = select(resizeControlRef.current);\n const enableX = controlPosition.includes('right') || controlPosition.includes('left');\n const enableY = controlPosition.includes('bottom') || controlPosition.includes('top');\n const invertX = controlPosition.includes('left');\n const invertY = controlPosition.includes('top');\n const dragHandler = drag()\n .on('start', (event) => {\n const node = store.getState().nodeInternals.get(id);\n const { xSnapped, ySnapped } = getPointerPosition(event);\n prevValues.current = {\n width: node?.width ?? 0,\n height: node?.height ?? 0,\n x: node?.position.x ?? 0,\n y: node?.position.y ?? 0,\n };\n startValues.current = {\n ...prevValues.current,\n pointerX: xSnapped,\n pointerY: ySnapped,\n aspectRatio: prevValues.current.width / prevValues.current.height,\n };\n onResizeStart?.(event, { ...prevValues.current });\n })\n .on('drag', (event) => {\n const { nodeInternals, triggerNodeChanges } = store.getState();\n const { xSnapped, ySnapped } = getPointerPosition(event);\n const node = nodeInternals.get(id);\n if (node) {\n const changes = [];\n const { pointerX: startX, pointerY: startY, width: startWidth, height: startHeight, x: startNodeX, y: startNodeY, aspectRatio, } = startValues.current;\n const { x: prevX, y: prevY, width: prevWidth, height: prevHeight } = prevValues.current;\n const distX = Math.floor(enableX ? xSnapped - startX : 0);\n const distY = Math.floor(enableY ? ySnapped - startY : 0);\n let width = clamp(startWidth + (invertX ? -distX : distX), minWidth, maxWidth);\n let height = clamp(startHeight + (invertY ? -distY : distY), minHeight, maxHeight);\n if (keepAspectRatio) {\n const nextAspectRatio = width / height;\n const isDiagonal = enableX && enableY;\n const isHorizontal = enableX && !enableY;\n const isVertical = enableY && !enableX;\n width = (nextAspectRatio <= aspectRatio && isDiagonal) || isVertical ? height * aspectRatio : width;\n height = (nextAspectRatio > aspectRatio && isDiagonal) || isHorizontal ? width / aspectRatio : height;\n if (width >= maxWidth) {\n width = maxWidth;\n height = maxWidth / aspectRatio;\n }\n else if (width <= minWidth) {\n width = minWidth;\n height = minWidth / aspectRatio;\n }\n if (height >= maxHeight) {\n height = maxHeight;\n width = maxHeight * aspectRatio;\n }\n else if (height <= minHeight) {\n height = minHeight;\n width = minHeight * aspectRatio;\n }\n }\n const isWidthChange = width !== prevWidth;\n const isHeightChange = height !== prevHeight;\n if (invertX || invertY) {\n const x = invertX ? startNodeX - (width - startWidth) : startNodeX;\n const y = invertY ? startNodeY - (height - startHeight) : startNodeY;\n // only transform the node if the width or height changes\n const isXPosChange = x !== prevX && isWidthChange;\n const isYPosChange = y !== prevY && isHeightChange;\n if (isXPosChange || isYPosChange) {\n const positionChange = {\n id: node.id,\n type: 'position',\n position: {\n x: isXPosChange ? x : prevX,\n y: isYPosChange ? y : prevY,\n },\n };\n changes.push(positionChange);\n prevValues.current.x = positionChange.position.x;\n prevValues.current.y = positionChange.position.y;\n }\n }\n if (isWidthChange || isHeightChange) {\n const dimensionChange = {\n id: id,\n type: 'dimensions',\n updateStyle: true,\n resizing: true,\n dimensions: {\n width: width,\n height: height,\n },\n };\n changes.push(dimensionChange);\n prevValues.current.width = width;\n prevValues.current.height = height;\n }\n if (changes.length === 0) {\n return;\n }\n const direction = getDirection({\n width: prevValues.current.width,\n prevWidth,\n height: prevValues.current.height,\n prevHeight,\n invertX,\n invertY,\n });\n const nextValues = { ...prevValues.current, direction };\n const callResize = shouldResize?.(event, nextValues);\n if (callResize === false) {\n return;\n }\n onResize?.(event, nextValues);\n triggerNodeChanges(changes);\n }\n })\n .on('end', (event) => {\n const dimensionChange = {\n id: id,\n type: 'dimensions',\n resizing: false,\n };\n onResizeEnd?.(event, { ...prevValues.current });\n store.getState().triggerNodeChanges([dimensionChange]);\n });\n selection.call(dragHandler);\n return () => {\n selection.on('.drag', null);\n };\n }, [\n id,\n controlPosition,\n minWidth,\n minHeight,\n maxWidth,\n maxHeight,\n keepAspectRatio,\n getPointerPosition,\n onResizeStart,\n onResize,\n onResizeEnd,\n ]);\n const positionClassNames = controlPosition.split('-');\n const colorStyleProp = variant === ResizeControlVariant.Line ? 'borderColor' : 'backgroundColor';\n const controlStyle = color ? { ...style, [colorStyleProp]: color } : style;\n return (React.createElement(\"div\", { className: cc(['react-flow__resize-control', 'nodrag', ...positionClassNames, variant, className]), ref: resizeControlRef, style: controlStyle }, children));\n}\nvar ResizeControl$1 = memo(ResizeControl);\n\nconst handleControls = ['top-left', 'top-right', 'bottom-left', 'bottom-right'];\nconst lineControls = ['top', 'right', 'bottom', 'left'];\nfunction NodeResizer({ nodeId, isVisible = true, handleClassName, handleStyle, lineClassName, lineStyle, color, minWidth = 10, minHeight = 10, maxWidth = Number.MAX_VALUE, maxHeight = Number.MAX_VALUE, keepAspectRatio = false, shouldResize, onResizeStart, onResize, onResizeEnd, }) {\n if (!isVisible) {\n return null;\n }\n return (React.createElement(React.Fragment, null,\n lineControls.map((c) => (React.createElement(ResizeControl$1, { key: c, className: lineClassName, style: lineStyle, nodeId: nodeId, position: c, variant: ResizeControlVariant.Line, color: color, minWidth: minWidth, minHeight: minHeight, maxWidth: maxWidth, maxHeight: maxHeight, onResizeStart: onResizeStart, keepAspectRatio: keepAspectRatio, shouldResize: shouldResize, onResize: onResize, onResizeEnd: onResizeEnd }))),\n handleControls.map((c) => (React.createElement(ResizeControl$1, { key: c, className: handleClassName, style: handleStyle, nodeId: nodeId, position: c, color: color, minWidth: minWidth, minHeight: minHeight, maxWidth: maxWidth, maxHeight: maxHeight, onResizeStart: onResizeStart, keepAspectRatio: keepAspectRatio, shouldResize: shouldResize, onResize: onResize, onResizeEnd: onResizeEnd })))));\n}\n\nexport { ResizeControl$1 as NodeResizeControl, NodeResizer, ResizeControlVariant };\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || (function () {\n var ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n };\n return function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CityViewWithReactFlow = void 0;\nconst react_1 = __importStar(require(\"react\"));\nconst reactflow_1 = __importStar(require(\"reactflow\"));\nrequire(\"reactflow/dist/style.css\");\nconst industry_theme_1 = require(\"@principal-ade/industry-theme\");\nconst file_city_builder_1 = require(\"@principal-ai/file-city-builder\");\nconst ArchitectureMapHighlightLayers_1 = require(\"./ArchitectureMapHighlightLayers\");\nconst CellNode = ({ data, selected }) => {\n const { label, fileTree, fileCount, directoryCount } = data;\n const { theme } = (0, industry_theme_1.useTheme)();\n // Build city data for this cell's file tree\n const cityBuilder = (0, react_1.useMemo)(() => new file_city_builder_1.CodeCityBuilderWithGrid(), []);\n const cityData = (0, react_1.useMemo)(() => {\n if (!fileTree || !fileTree.root || fileTree.root.children.length === 0) {\n return null;\n }\n try {\n const result = cityBuilder.buildCityFromFileSystem(fileTree);\n return result;\n }\n catch (error) {\n // Silently fail for production\n return null;\n }\n }, [fileTree, cityBuilder]);\n return (react_1.default.createElement(\"div\", { className: \"cell-node\", style: {\n background: selected\n ? `linear-gradient(135deg, ${theme.colors.primary} 0%, ${theme.colors.accent} 100%)`\n : `linear-gradient(135deg, ${theme.colors.backgroundSecondary} 0%, ${theme.colors.background} 100%)`,\n borderRadius: `${theme.radii[2]}px`,\n padding: `${theme.space[3]}px`,\n width: '450px',\n height: '450px',\n border: selected ? `3px solid ${theme.colors.accent}` : `2px solid ${theme.colors.border}`,\n boxShadow: selected\n ? `0 10px 25px ${theme.colors.accent}30`\n : '0 4px 6px rgba(0, 0, 0, 0.1)',\n display: 'flex',\n flexDirection: 'column',\n transition: 'all 0.3s ease',\n } },\n react_1.default.createElement(reactflow_1.Handle, { type: \"target\", position: reactflow_1.Position.Top, style: { background: theme.colors.accent } }),\n react_1.default.createElement(\"div\", { style: {\n marginBottom: `${theme.space[2]}px`,\n paddingBottom: `${theme.space[2]}px`,\n borderBottom: `1px solid ${theme.colors.border}`,\n } },\n react_1.default.createElement(\"h3\", { style: {\n margin: `0 0 ${theme.space[1]}px 0`,\n fontSize: `${theme.fontSizes[2]}px`,\n fontWeight: theme.fontWeights.bold,\n fontFamily: theme.fonts.heading,\n color: theme.colors.text,\n } }, label),\n react_1.default.createElement(\"div\", { style: {\n fontSize: `${theme.fontSizes[0]}px`,\n fontFamily: theme.fonts.body,\n color: theme.colors.textSecondary,\n display: 'flex',\n gap: `${theme.space[3]}px`,\n } },\n react_1.default.createElement(\"span\", null,\n fileCount,\n \" files\"),\n react_1.default.createElement(\"span\", null,\n directoryCount,\n \" directories\"))),\n react_1.default.createElement(\"div\", { style: {\n position: 'relative',\n background: theme.colors.background,\n borderRadius: `${theme.radii[1]}px`,\n overflow: 'hidden',\n width: '350px',\n height: '350px',\n } }, cityData ? (react_1.default.createElement(\"div\", { style: { width: '100%', height: '100%', position: 'relative', pointerEvents: 'none' } },\n react_1.default.createElement(ArchitectureMapHighlightLayers_1.ArchitectureMapHighlightLayers, { cityData: cityData, highlightLayers: [\n {\n id: 'typescript',\n name: 'TypeScript Files',\n enabled: true,\n color: theme.colors.success,\n opacity: 0.8,\n priority: 1,\n items: cityData.buildings\n .filter(b => b.path.endsWith('.ts') || b.path.endsWith('.tsx'))\n .map(b => ({\n path: b.path,\n type: 'file',\n opacity: 1,\n })),\n },\n ], showGrid: false, showDirectoryLabels: false, canvasBackgroundColor: theme.colors.background, defaultBuildingColor: theme.colors.muted, defaultDirectoryColor: theme.colors.backgroundSecondary, className: \"w-full h-full\", \n // Disable interactions to prevent conflicts with React Flow\n onFileClick: undefined }))) : (react_1.default.createElement(\"div\", { style: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n height: '100%',\n color: theme.colors.textMuted,\n fontSize: `${theme.fontSizes[1]}px`,\n fontFamily: theme.fonts.body,\n } }, \"Empty cell\"))),\n react_1.default.createElement(reactflow_1.Handle, { type: \"source\", position: reactflow_1.Position.Bottom, style: { background: theme.colors.accent } })));\n};\nconst nodeTypes = {\n cellNode: CellNode,\n};\nconst CityViewWithReactFlowInner = ({ fileTree, gridConfig, onCellClick, cellWidth = 450, cellHeight = 350, cellSpacing = 100, }) => {\n const { theme } = (0, industry_theme_1.useTheme)();\n const defaultGridConfig = {\n id: 'default',\n version: '1.0',\n name: 'Default Grid',\n description: 'Default single-cell grid layout',\n overviewPath: 'README.md',\n category: 'default',\n displayOrder: 0,\n referenceGroups: {\n main: {\n files: ['*'],\n coordinates: [0, 0],\n },\n },\n metadata: {\n ui: {\n enabled: true,\n rows: 1,\n cols: 1,\n },\n },\n };\n const config = gridConfig || defaultGridConfig;\n const { nodes, edges } = (0, react_1.useMemo)(() => {\n const gridManager = new file_city_builder_1.GridLayoutManager();\n const { rows, cols } = gridManager.getGridDimensions(config);\n const gridTrees = gridManager.splitTreeIntoGrid(fileTree, config);\n const generatedNodes = [];\n const generatedEdges = [];\n // Create cell nodes\n gridTrees.forEach((cellTree, cellKey) => {\n const [row, col] = cellKey.split(',').map(Number);\n // Find cell name from config\n let cellName = 'Cell';\n for (const [name, cellConfig] of Object.entries(config.referenceGroups)) {\n if (cellConfig.coordinates[0] === row && cellConfig.coordinates[1] === col) {\n cellName = name;\n break;\n }\n }\n const cellNode = {\n id: `cell-${row}-${col}`,\n type: 'cellNode',\n position: {\n x: col * (cellWidth + cellSpacing),\n y: row * (cellHeight + cellSpacing),\n },\n data: {\n label: cellName,\n fileTree: cellTree,\n fileCount: cellTree.stats.totalFiles,\n directoryCount: cellTree.stats.totalDirectories,\n coordinates: [row, col],\n },\n };\n generatedNodes.push(cellNode);\n });\n // Create subtle grid connections (optional)\n for (let row = 0; row < rows; row++) {\n for (let col = 0; col < cols; col++) {\n // Only add edges if both nodes exist (non-empty cells)\n const currentNode = generatedNodes.find(n => n.id === `cell-${row}-${col}`);\n if (!currentNode)\n continue;\n // Horizontal connections\n if (col < cols - 1) {\n const rightNode = generatedNodes.find(n => n.id === `cell-${row}-${col + 1}`);\n if (rightNode) {\n generatedEdges.push({\n id: `edge-${row}-${col}-to-${row}-${col + 1}`,\n source: `cell-${row}-${col}`,\n target: `cell-${row}-${col + 1}`,\n type: 'straight',\n animated: false,\n style: {\n stroke: `${theme.colors.border}40`,\n strokeWidth: 1,\n strokeDasharray: '5 10',\n },\n });\n }\n }\n // Vertical connections\n if (row < rows - 1) {\n const bottomNode = generatedNodes.find(n => n.id === `cell-${row + 1}-${col}`);\n if (bottomNode) {\n generatedEdges.push({\n id: `edge-${row}-${col}-to-${row + 1}-${col}`,\n source: `cell-${row}-${col}`,\n target: `cell-${row + 1}-${col}`,\n type: 'straight',\n animated: false,\n style: {\n stroke: `${theme.colors.border}40`,\n strokeWidth: 1,\n strokeDasharray: '5 10',\n },\n });\n }\n }\n }\n }\n return { nodes: generatedNodes, edges: generatedEdges };\n }, [fileTree, config, cellWidth, cellHeight, cellSpacing, theme]);\n const [nodesState, , onNodesChange] = (0, reactflow_1.useNodesState)(nodes);\n const [edgesState, , onEdgesChange] = (0, reactflow_1.useEdgesState)(edges);\n const onNodeClick = (0, react_1.useCallback)((_event, node) => {\n if (node.type === 'cellNode' && onCellClick) {\n onCellClick(node.id);\n }\n }, [onCellClick]);\n return (react_1.default.createElement(\"div\", { style: { width: '100%', height: '100%', background: theme.colors.background } },\n react_1.default.createElement(reactflow_1.ReactFlowProvider, null,\n react_1.default.createElement(reactflow_1.default, { nodes: nodesState, edges: edgesState, onNodesChange: onNodesChange, onEdgesChange: onEdgesChange, onNodeClick: onNodeClick, nodeTypes: nodeTypes, fitView: true, fitViewOptions: { padding: 0.2 }, attributionPosition: \"bottom-left\", defaultViewport: { x: 0, y: 0, zoom: 0.8 }, minZoom: 0.2, maxZoom: 2 },\n react_1.default.createElement(reactflow_1.Background, { variant: reactflow_1.BackgroundVariant.Dots, gap: 30, size: 1, color: `${theme.colors.border}40` }),\n react_1.default.createElement(reactflow_1.Controls, null),\n react_1.default.createElement(reactflow_1.MiniMap, { nodeColor: () => theme.colors.primary, style: {\n backgroundColor: theme.colors.backgroundSecondary,\n border: `1px solid ${theme.colors.border}`,\n }, maskColor: \"rgba(0, 0, 0, 0.6)\" })))));\n};\nexports.CityViewWithReactFlow = CityViewWithReactFlowInner;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.useTheme = exports.ThemeProvider = exports.CityViewWithReactFlow = exports.useCodeCityData = exports.MultiVersionCityBuilder = exports.getFileColorMapping = exports.getDefaultFileColorConfig = exports.createFileColorHighlightLayers = exports.filterCityDataForMultipleDirectories = exports.filterCityDataForSubdirectory = exports.filterCityDataForSelectiveRender = exports.ArchitectureMapHighlightLayers = void 0;\n// Main component export\nvar ArchitectureMapHighlightLayers_1 = require(\"./components/ArchitectureMapHighlightLayers\");\nObject.defineProperty(exports, \"ArchitectureMapHighlightLayers\", { enumerable: true, get: function () { return ArchitectureMapHighlightLayers_1.ArchitectureMapHighlightLayers; } });\n// Utility functions\nvar cityDataUtils_1 = require(\"./builder/cityDataUtils\");\nObject.defineProperty(exports, \"filterCityDataForSelectiveRender\", { enumerable: true, get: function () { return cityDataUtils_1.filterCityDataForSelectiveRender; } });\nObject.defineProperty(exports, \"filterCityDataForSubdirectory\", { enumerable: true, get: function () { return cityDataUtils_1.filterCityDataForSubdirectory; } });\nObject.defineProperty(exports, \"filterCityDataForMultipleDirectories\", { enumerable: true, get: function () { return cityDataUtils_1.filterCityDataForMultipleDirectories; } });\n// File color highlight layer utilities\nvar fileColorHighlightLayers_1 = require(\"./utils/fileColorHighlightLayers\");\nObject.defineProperty(exports, \"createFileColorHighlightLayers\", { enumerable: true, get: function () { return fileColorHighlightLayers_1.createFileColorHighlightLayers; } });\nObject.defineProperty(exports, \"getDefaultFileColorConfig\", { enumerable: true, get: function () { return fileColorHighlightLayers_1.getDefaultFileColorConfig; } });\nObject.defineProperty(exports, \"getFileColorMapping\", { enumerable: true, get: function () { return fileColorHighlightLayers_1.getFileColorMapping; } });\n// Re-export MultiVersionCityBuilder which was requested\nvar file_city_builder_1 = require(\"@principal-ai/file-city-builder\");\nObject.defineProperty(exports, \"MultiVersionCityBuilder\", { enumerable: true, get: function () { return file_city_builder_1.MultiVersionCityBuilder; } });\n// Export the useCodeCityData hook\nvar useCodeCityData_1 = require(\"./hooks/useCodeCityData\");\nObject.defineProperty(exports, \"useCodeCityData\", { enumerable: true, get: function () { return useCodeCityData_1.useCodeCityData; } });\n// Export React Flow based city view component\nvar CityViewWithReactFlow_1 = require(\"./components/CityViewWithReactFlow\");\nObject.defineProperty(exports, \"CityViewWithReactFlow\", { enumerable: true, get: function () { return CityViewWithReactFlow_1.CityViewWithReactFlow; } });\n// Re-export theme utilities for consumers\nvar industry_theme_1 = require(\"@principal-ade/industry-theme\");\nObject.defineProperty(exports, \"ThemeProvider\", { enumerable: true, get: function () { return industry_theme_1.ThemeProvider; } });\nObject.defineProperty(exports, \"useTheme\", { enumerable: true, get: function () { return industry_theme_1.useTheme; } });\n","/**\n * Quality highlight layer generators for File City visualization\n *\n * Creates highlight layers from quality metrics data (coverage, linting, etc.)\n */\n\nimport type { CityBuilding, LayerItem } from '@principal-ai/file-city-react';\n\n/**\n * Per-file metric data from quality lenses\n */\nexport interface FileMetricData {\n file: string;\n score: number;\n issueCount: number;\n errorCount: number;\n warningCount: number;\n infoCount: number;\n hintCount: number;\n fixableCount?: number;\n categories?: Record<string, number>;\n}\n\n/**\n * Quality data slice structure\n */\nexport interface QualitySliceData {\n fileCoverage?: Record<string, number>;\n fileMetrics?: {\n eslint?: FileMetricData[];\n typescript?: FileMetricData[];\n prettier?: FileMetricData[];\n knip?: FileMetricData[];\n alexandria?: FileMetricData[];\n };\n}\n\n/**\n * Highlight layer structure\n */\nexport interface HighlightLayer {\n id: string;\n name: string;\n enabled: boolean;\n color: string;\n priority: number;\n items: LayerItem[];\n opacity?: number;\n borderWidth?: number;\n}\n\n/**\n * Color mode options for the visualization\n */\nexport type ColorMode =\n | 'fileTypes'\n | 'git'\n | 'coverage'\n | 'eslint'\n | 'typescript'\n | 'prettier'\n | 'knip'\n | 'alexandria';\n\n/**\n * Color mode configuration\n */\nexport interface ColorModeConfig {\n id: ColorMode;\n name: string;\n description: string;\n icon?: string;\n}\n\n/**\n * Available color modes\n */\nexport const COLOR_MODES: ColorModeConfig[] = [\n { id: 'fileTypes', name: 'File Types', description: 'Color by file extension' },\n { id: 'git', name: 'Git Status', description: 'Color by git changes' },\n { id: 'coverage', name: 'Test Coverage', description: 'Color by test coverage %' },\n { id: 'eslint', name: 'Linting', description: 'Color by ESLint issues' },\n { id: 'typescript', name: 'Type Safety', description: 'Color by TypeScript errors' },\n { id: 'prettier', name: 'Formatting', description: 'Color by Prettier issues' },\n { id: 'knip', name: 'Dead Code', description: 'Color by unused exports' },\n { id: 'alexandria', name: 'Documentation', description: 'Color by doc coverage' },\n];\n\n/**\n * Default color modes (always available without quality data)\n */\nexport const DEFAULT_COLOR_MODES: ColorModeConfig[] = [\n { id: 'fileTypes', name: 'File Types', description: 'Color by file extension' },\n { id: 'git', name: 'Git Status', description: 'Color by git changes' },\n];\n\n/**\n * Quality-based color modes (require quality data)\n */\nexport const QUALITY_COLOR_MODES: ColorModeConfig[] = [\n { id: 'coverage', name: 'Test Coverage', description: 'Color by test coverage %' },\n { id: 'eslint', name: 'Linting', description: 'Color by ESLint issues' },\n { id: 'typescript', name: 'Type Safety', description: 'Color by TypeScript errors' },\n { id: 'prettier', name: 'Formatting', description: 'Color by Prettier issues' },\n { id: 'knip', name: 'Dead Code', description: 'Color by unused exports' },\n { id: 'alexandria', name: 'Documentation', description: 'Color by doc coverage' },\n];\n\n/**\n * File City color modes slice data structure.\n * Hosts populate this slice to control which color modes are available.\n * If not populated, only default modes (fileTypes, git) are available.\n */\nexport interface FileCityColorModesSliceData {\n /** Additional color modes to enable (beyond fileTypes and git) */\n enabledModes?: ColorMode[];\n /** Quality data for quality-based color modes */\n qualityData?: QualitySliceData;\n}\n\n/**\n * Convert a score (0-100) to a color on the red-yellow-green gradient\n * Higher scores = greener (better)\n */\nexport function scoreToColor(score: number): string {\n // Clamp score to 0-100\n const s = Math.max(0, Math.min(100, score));\n\n if (s >= 80) return '#22c55e'; // green-500\n if (s >= 60) return '#84cc16'; // lime-500\n if (s >= 40) return '#eab308'; // yellow-500\n if (s >= 20) return '#f97316'; // orange-500\n return '#ef4444'; // red-500\n}\n\n/**\n * Convert coverage percentage to color\n * High coverage = green, low coverage = red\n */\nexport function coverageToColor(coverage: number): string {\n return scoreToColor(coverage);\n}\n\n/**\n * Convert issue count to color (inverse - fewer issues = greener)\n * Uses a log scale for better distribution\n */\nexport function issueCountToColor(issueCount: number, maxIssues: number = 50): string {\n if (issueCount === 0) return '#22c55e'; // Perfect - green\n\n // Log scale: 1 issue = ~80, maxIssues = ~0\n const logScore = Math.max(0, 100 - (Math.log(issueCount + 1) / Math.log(maxIssues + 1)) * 100);\n return scoreToColor(logScore);\n}\n\n/**\n * Color thresholds for gradient legend\n */\nexport const SCORE_THRESHOLDS = [\n { min: 80, max: 100, color: '#22c55e', label: 'Excellent' },\n { min: 60, max: 79, color: '#84cc16', label: 'Good' },\n { min: 40, max: 59, color: '#eab308', label: 'Fair' },\n { min: 20, max: 39, color: '#f97316', label: 'Poor' },\n { min: 0, max: 19, color: '#ef4444', label: 'Critical' },\n];\n\n/**\n * Create highlight layers for test coverage visualization\n */\nexport function createCoverageHighlightLayers(\n buildings: CityBuilding[],\n fileCoverage: Record<string, number>\n): HighlightLayer[] {\n const buildingsByPath = new Map(buildings.map((b) => [b.path, b]));\n\n // Group files by coverage range - using clear percentage ranges\n const layerGroups: Record<string, LayerItem[]> = {\n high: [], // 80-100%\n medium: [], // 50-79%\n low: [], // 20-49%\n veryLow: [], // 1-19%\n zero: [], // 0%\n noData: [], // No coverage data\n };\n\n for (const [path, building] of buildingsByPath) {\n const coverage = fileCoverage[path];\n\n if (coverage === undefined) {\n layerGroups.noData.push({\n path: building.path,\n type: 'file' as const,\n renderStrategy: 'fill',\n });\n } else if (coverage >= 80) {\n layerGroups.high.push({\n path: building.path,\n type: 'file' as const,\n renderStrategy: 'fill',\n });\n } else if (coverage >= 50) {\n layerGroups.medium.push({\n path: building.path,\n type: 'file' as const,\n renderStrategy: 'fill',\n });\n } else if (coverage >= 20) {\n layerGroups.low.push({\n path: building.path,\n type: 'file' as const,\n renderStrategy: 'fill',\n });\n } else if (coverage > 0) {\n layerGroups.veryLow.push({\n path: building.path,\n type: 'file' as const,\n renderStrategy: 'fill',\n });\n } else {\n layerGroups.zero.push({\n path: building.path,\n type: 'file' as const,\n renderStrategy: 'fill',\n });\n }\n }\n\n const layers: HighlightLayer[] = [];\n\n if (layerGroups.high.length > 0) {\n layers.push({\n id: 'coverage-high',\n name: '80-100%',\n enabled: true,\n color: '#22c55e',\n priority: 50,\n items: layerGroups.high,\n });\n }\n\n if (layerGroups.medium.length > 0) {\n layers.push({\n id: 'coverage-medium',\n name: '50-79%',\n enabled: true,\n color: '#eab308',\n priority: 50,\n items: layerGroups.medium,\n });\n }\n\n if (layerGroups.low.length > 0) {\n layers.push({\n id: 'coverage-low',\n name: '20-49%',\n enabled: true,\n color: '#f97316',\n priority: 50,\n items: layerGroups.low,\n });\n }\n\n if (layerGroups.veryLow.length > 0) {\n layers.push({\n id: 'coverage-verylow',\n name: '1-19%',\n enabled: true,\n color: '#ef4444',\n priority: 50,\n items: layerGroups.veryLow,\n });\n }\n\n if (layerGroups.zero.length > 0) {\n layers.push({\n id: 'coverage-zero',\n name: '0%',\n enabled: true,\n color: '#991b1b',\n priority: 50,\n items: layerGroups.zero,\n });\n }\n\n if (layerGroups.noData.length > 0) {\n layers.push({\n id: 'coverage-nodata',\n name: 'No data',\n enabled: true,\n color: '#6b7280',\n priority: 40,\n items: layerGroups.noData,\n });\n }\n\n return layers;\n}\n\n/**\n * Create highlight layers for file metrics (ESLint, TypeScript, etc.)\n * Uses issue-count-based categories for clarity\n */\nexport function createMetricHighlightLayers(\n buildings: CityBuilding[],\n metrics: FileMetricData[],\n metricId: string,\n _metricName: string\n): HighlightLayer[] {\n const buildingsByPath = new Map(buildings.map((b) => [b.path, b]));\n const metricsByPath = new Map(metrics.map((m) => [m.file, m]));\n\n // Group files by issue count - more intuitive than abstract scores\n const layerGroups: Record<string, LayerItem[]> = {\n clean: [], // 0 issues\n minor: [], // 1-3 issues\n moderate: [], // 4-10 issues\n significant: [], // 11-25 issues\n severe: [], // 26+ issues\n noData: [], // No metric data\n };\n\n for (const [path, building] of buildingsByPath) {\n const metric = metricsByPath.get(path);\n\n if (!metric) {\n layerGroups.noData.push({\n path: building.path,\n type: 'file' as const,\n renderStrategy: 'fill',\n });\n } else {\n const issues = metric.issueCount;\n let bucket: keyof typeof layerGroups;\n if (issues === 0) bucket = 'clean';\n else if (issues <= 3) bucket = 'minor';\n else if (issues <= 10) bucket = 'moderate';\n else if (issues <= 25) bucket = 'significant';\n else bucket = 'severe';\n\n layerGroups[bucket].push({\n path: building.path,\n type: 'file' as const,\n renderStrategy: 'fill',\n });\n }\n }\n\n const layers: HighlightLayer[] = [];\n\n if (layerGroups.clean.length > 0) {\n layers.push({\n id: `${metricId}-clean`,\n name: '0 issues',\n enabled: true,\n color: '#22c55e',\n priority: 50,\n items: layerGroups.clean,\n });\n }\n\n if (layerGroups.minor.length > 0) {\n layers.push({\n id: `${metricId}-minor`,\n name: '1-3 issues',\n enabled: true,\n color: '#84cc16',\n priority: 50,\n items: layerGroups.minor,\n });\n }\n\n if (layerGroups.moderate.length > 0) {\n layers.push({\n id: `${metricId}-moderate`,\n name: '4-10 issues',\n enabled: true,\n color: '#eab308',\n priority: 50,\n items: layerGroups.moderate,\n });\n }\n\n if (layerGroups.significant.length > 0) {\n layers.push({\n id: `${metricId}-significant`,\n name: '11-25 issues',\n enabled: true,\n color: '#f97316',\n priority: 50,\n items: layerGroups.significant,\n });\n }\n\n if (layerGroups.severe.length > 0) {\n layers.push({\n id: `${metricId}-severe`,\n name: '26+ issues',\n enabled: true,\n color: '#ef4444',\n priority: 50,\n items: layerGroups.severe,\n });\n }\n\n if (layerGroups.noData.length > 0) {\n layers.push({\n id: `${metricId}-nodata`,\n name: 'No data',\n enabled: true,\n color: '#6b7280',\n priority: 40,\n items: layerGroups.noData,\n });\n }\n\n return layers;\n}\n\n/**\n * Create ESLint highlight layers\n */\nexport function createEslintHighlightLayers(\n buildings: CityBuilding[],\n eslintMetrics: FileMetricData[]\n): HighlightLayer[] {\n return createMetricHighlightLayers(buildings, eslintMetrics, 'eslint', 'Linting');\n}\n\n/**\n * Create TypeScript highlight layers\n */\nexport function createTypescriptHighlightLayers(\n buildings: CityBuilding[],\n typescriptMetrics: FileMetricData[]\n): HighlightLayer[] {\n return createMetricHighlightLayers(buildings, typescriptMetrics, 'typescript', 'Type Safety');\n}\n\n/**\n * Create Prettier highlight layers\n */\nexport function createPrettierHighlightLayers(\n buildings: CityBuilding[],\n prettierMetrics: FileMetricData[]\n): HighlightLayer[] {\n return createMetricHighlightLayers(buildings, prettierMetrics, 'prettier', 'Formatting');\n}\n\n/**\n * Create Knip highlight layers\n */\nexport function createKnipHighlightLayers(\n buildings: CityBuilding[],\n knipMetrics: FileMetricData[]\n): HighlightLayer[] {\n return createMetricHighlightLayers(buildings, knipMetrics, 'knip', 'Dead Code');\n}\n\n/**\n * Create Alexandria highlight layers\n */\nexport function createAlexandriaHighlightLayers(\n buildings: CityBuilding[],\n alexandriaMetrics: FileMetricData[]\n): HighlightLayer[] {\n return createMetricHighlightLayers(buildings, alexandriaMetrics, 'alexandria', 'Documentation');\n}\n\n/**\n * Check if quality data is available for a given color mode\n */\nexport function isColorModeAvailable(\n mode: ColorMode,\n qualityData: QualitySliceData | null | undefined,\n hasGitData: boolean\n): boolean {\n if (mode === 'fileTypes') return true;\n if (mode === 'git') return hasGitData;\n\n if (!qualityData) return false;\n\n switch (mode) {\n case 'coverage':\n return !!qualityData.fileCoverage && Object.keys(qualityData.fileCoverage).length > 0;\n case 'eslint':\n return !!qualityData.fileMetrics?.eslint && qualityData.fileMetrics.eslint.length > 0;\n case 'typescript':\n return !!qualityData.fileMetrics?.typescript && qualityData.fileMetrics.typescript.length > 0;\n case 'prettier':\n return !!qualityData.fileMetrics?.prettier && qualityData.fileMetrics.prettier.length > 0;\n case 'knip':\n return !!qualityData.fileMetrics?.knip && qualityData.fileMetrics.knip.length > 0;\n case 'alexandria':\n return !!qualityData.fileMetrics?.alexandria && qualityData.fileMetrics.alexandria.length > 0;\n default:\n return false;\n }\n}\n\n/**\n * Get highlight layers for a given color mode\n */\nexport function getLayersForColorMode(\n mode: ColorMode,\n buildings: CityBuilding[],\n qualityData: QualitySliceData | null | undefined,\n fileColorLayers: HighlightLayer[],\n gitLayers: HighlightLayer[]\n): HighlightLayer[] {\n switch (mode) {\n case 'fileTypes':\n return fileColorLayers;\n\n case 'git':\n return gitLayers;\n\n case 'coverage':\n if (qualityData?.fileCoverage) {\n return createCoverageHighlightLayers(buildings, qualityData.fileCoverage);\n }\n return [];\n\n case 'eslint':\n if (qualityData?.fileMetrics?.eslint) {\n return createEslintHighlightLayers(buildings, qualityData.fileMetrics.eslint);\n }\n return [];\n\n case 'typescript':\n if (qualityData?.fileMetrics?.typescript) {\n return createTypescriptHighlightLayers(buildings, qualityData.fileMetrics.typescript);\n }\n return [];\n\n case 'prettier':\n if (qualityData?.fileMetrics?.prettier) {\n return createPrettierHighlightLayers(buildings, qualityData.fileMetrics.prettier);\n }\n return [];\n\n case 'knip':\n if (qualityData?.fileMetrics?.knip) {\n return createKnipHighlightLayers(buildings, qualityData.fileMetrics.knip);\n }\n return [];\n\n case 'alexandria':\n if (qualityData?.fileMetrics?.alexandria) {\n return createAlexandriaHighlightLayers(buildings, qualityData.fileMetrics.alexandria);\n }\n return [];\n\n default:\n return fileColorLayers;\n }\n}\n","import React, { useState, useCallback, useEffect, useMemo, useRef } from 'react';\nimport {\n File,\n Folder,\n Building2,\n List,\n ChevronDown,\n} from 'lucide-react';\nimport { Legend, LegendFileType, LegendGitStatus, LegendAgentLayer, LegendQualityMetric } from './components/Legend';\nimport { useTheme } from '@principal-ade/industry-theme';\nimport {\n ArchitectureMapHighlightLayers,\n type CityData,\n type CityBuilding,\n type CityDistrict,\n type LayerItem,\n createFileColorHighlightLayers,\n} from '@principal-ai/file-city-react';\nimport {\n CodeCityBuilderWithGrid,\n buildFileSystemTreeFromFileInfoList,\n} from '@principal-ai/file-city-builder';\nimport type { FileTree } from '@principal-ai/repository-abstraction';\nimport type { PanelComponentProps } from '../types';\nimport {\n type ColorMode,\n type QualitySliceData,\n type FileCityColorModesSliceData,\n COLOR_MODES,\n DEFAULT_COLOR_MODES,\n isColorModeAvailable,\n getLayersForColorMode,\n SCORE_THRESHOLDS,\n} from './utils/qualityLayers';\n\n/**\n * Git status data - categorized file paths\n */\nexport interface GitStatus {\n staged: string[];\n unstaged: string[];\n untracked: string[];\n deleted: string[];\n}\n\n/** Git status category colors */\nconst GIT_STATUS_COLORS = {\n staged: '#22c55e', // Green\n unstaged: '#f59e0b', // Yellow/amber\n untracked: '#6b7280', // Gray\n deleted: '#ef4444', // Red\n} as const;\n\ninterface HoverInfo {\n hoveredDistrict: CityDistrict | null;\n hoveredBuilding: CityBuilding | null;\n fileTooltip: { text: string } | null;\n directoryTooltip: { text: string } | null;\n fileCount: number | null;\n}\n\ninterface HighlightLayer {\n id: string;\n name: string;\n enabled: boolean;\n color: string;\n priority: number;\n items: LayerItem[];\n opacity?: number;\n borderWidth?: number;\n}\n\n/** Package hover event payload */\ninterface PackageHoverPayload {\n packagePath: string;\n packageName: string;\n}\n\n/**\n * CodeCityPanelContent - Internal component that uses theme\n */\nconst CodeCityPanelContent: React.FC<PanelComponentProps> = ({\n context,\n actions,\n events,\n}) => {\n const { theme } = useTheme();\n const [cityData, setCityData] = useState<CityData | null>(null);\n const [hoverInfo, setHoverInfo] = useState<HoverInfo | null>(null);\n const [showLegend, setShowLegend] = useState(true);\n const [highlightLayers, setHighlightLayers] = useState<HighlightLayer[]>([]);\n // Base layers before package filtering - used for legend computation\n const [baseLayers, setBaseLayers] = useState<HighlightLayer[]>([]);\n const [loading, setLoading] = useState(false);\n const [containerSize, setContainerSize] = useState<{ width: number; height: number } | null>(null);\n const contentContainerRef = useRef<HTMLDivElement>(null);\n const [colorMode, setColorMode] = useState<ColorMode>('fileTypes');\n const [showColorModeDropdown, setShowColorModeDropdown] = useState(false);\n const colorModeDropdownRef = useRef<HTMLDivElement>(null);\n // State for package filtering (selected takes priority over hovered)\n const [hoveredPackagePath, setHoveredPackagePath] = useState<string | null>(null);\n const [selectedPackagePath, setSelectedPackagePath] = useState<string | null>(null);\n\n // Measure the content container to compute layout\n useEffect(() => {\n const container = contentContainerRef.current;\n if (!container) return;\n\n const resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const { width, height } = entry.contentRect;\n setContainerSize({ width, height });\n }\n });\n\n resizeObserver.observe(container);\n return () => resizeObserver.disconnect();\n }, []);\n\n // Compute layout: map gets minimum square size, legend fills remaining space\n const layout = useMemo(() => {\n if (!containerSize) {\n return { minMapSize: 0, legendPosition: 'bottom' as const, legendMaxSize: 0 };\n }\n\n const { width, height } = containerSize;\n const isLandscape = width > height;\n\n if (isLandscape) {\n // Landscape: legend on right, map min-width is the height (square)\n const minMapSize = height;\n const legendMaxSize = width - minMapSize;\n return { minMapSize, legendPosition: 'right' as const, legendMaxSize };\n } else {\n // Portrait: legend below, map min-height is the width (square)\n const minMapSize = width;\n const legendMaxSize = height - minMapSize;\n return { minMapSize, legendPosition: 'bottom' as const, legendMaxSize };\n }\n }, [containerSize]);\n\n // Get file tree slice for generating city data\n // Uses FileTree format from @principal-ai/repository-abstraction\n const fileTreeSlice = context.getSlice<FileTree>('fileTree');\n\n // Get git status slice for highlighting changed files\n const gitSlice = context.getSlice<GitStatus>('git');\n\n // Get agent highlight layers slice for showing agent activity\n const agentHighlightLayersSlice = context.getSlice<HighlightLayer[]>('agentHighlightLayers');\n\n // Get file city color modes slice for controlling available color modes\n // Hosts populate this to enable quality-based color modes\n // If not populated, only fileTypes and git modes are available\n const colorModesSlice = context.getSlice<FileCityColorModesSliceData>('fileCityColorModes');\n\n // Extract quality data from the color modes slice (not from quality slice directly)\n const qualityData = colorModesSlice?.data?.qualityData;\n\n // Track whether file color layers are currently registered\n const fileColorLayersRegistered = useRef(false);\n const gitLayersRegistered = useRef(false);\n const agentLayersRegistered = useRef(false);\n const lastHasGitOrAgentLayers = useRef<boolean | null>(null);\n\n // Reset all layer state when repository changes\n const currentRepoPath = context.currentScope.repository?.path;\n const lastRepoPath = useRef<string | undefined>(currentRepoPath);\n\n useEffect(() => {\n if (lastRepoPath.current !== currentRepoPath) {\n // Repository changed - reset all layer tracking state\n setHighlightLayers([]);\n fileColorLayersRegistered.current = false;\n gitLayersRegistered.current = false;\n agentLayersRegistered.current = false;\n lastHasGitOrAgentLayers.current = null;\n lastRepoPath.current = currentRepoPath;\n setColorMode('fileTypes'); // Reset to default color mode\n }\n }, [currentRepoPath]);\n\n // Close dropdown when clicking outside\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (colorModeDropdownRef.current && !colorModeDropdownRef.current.contains(event.target as Node)) {\n setShowColorModeDropdown(false);\n }\n };\n\n if (showColorModeDropdown) {\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }\n }, [showColorModeDropdown]);\n\n // Subscribe to package:hover and package:select events for filtering\n useEffect(() => {\n if (!events) return;\n\n const cleanupHover = events.on('package:hover', (event) => {\n const payload = event.payload as PackageHoverPayload | null;\n setHoveredPackagePath(payload?.packagePath ?? null);\n });\n\n const cleanupSelect = events.on('package:select', (event) => {\n const payload = event.payload as PackageHoverPayload | null;\n setSelectedPackagePath(payload?.packagePath ?? null);\n });\n\n return () => {\n cleanupHover?.();\n cleanupSelect?.();\n };\n }, [events]);\n\n // Compute available color modes based on data\n // Only show quality modes if the host has explicitly enabled them via colorModesSlice\n const availableColorModes = useMemo(() => {\n const hasGitData = gitSlice?.data && (\n gitSlice.data.staged.length > 0 ||\n gitSlice.data.unstaged.length > 0 ||\n gitSlice.data.untracked.length > 0 ||\n gitSlice.data.deleted.length > 0\n );\n\n // Get explicitly enabled modes from the slice, or default to just fileTypes + git\n const enabledModes = colorModesSlice?.data?.enabledModes;\n\n // Filter to modes that are both enabled and have data available\n return COLOR_MODES.filter(mode => {\n // fileTypes is always available\n if (mode.id === 'fileTypes') return true;\n // git is available if there's git data\n if (mode.id === 'git') return hasGitData;\n // Quality modes are only available if explicitly enabled AND have data\n if (!enabledModes?.includes(mode.id)) return false;\n return isColorModeAvailable(mode.id, qualityData, !!hasGitData);\n });\n }, [gitSlice?.data, colorModesSlice?.data?.enabledModes, qualityData]);\n\n // Auto-select color mode based on available modes\n useEffect(() => {\n const currentModeAvailable = availableColorModes.some(m => m.id === colorMode);\n\n // If current mode is no longer available, reset to best available\n if (!currentModeAvailable) {\n const nonFileTypesMode = availableColorModes.find(m => m.id !== 'fileTypes');\n setColorMode(nonFileTypesMode?.id || 'fileTypes');\n }\n // If we're on fileTypes but other modes are available, switch to first non-fileTypes\n else if (availableColorModes.length > 1 && colorMode === 'fileTypes') {\n const nonFileTypesMode = availableColorModes.find(m => m.id !== 'fileTypes');\n if (nonFileTypesMode) {\n setColorMode(nonFileTypesMode.id);\n }\n }\n }, [availableColorModes, colorMode]);\n\n // Get current color mode config\n const currentColorModeConfig = useMemo(() => {\n return COLOR_MODES.find(m => m.id === colorMode) || COLOR_MODES[0];\n }, [colorMode]);\n\n // Get metric value for hovered file (used in hover bar)\n const hoveredFileMetric = useMemo(() => {\n if (!hoverInfo?.hoveredBuilding?.path) return null;\n const filePath = hoverInfo.hoveredBuilding.path;\n\n if (!qualityData) return null;\n\n switch (colorMode) {\n case 'coverage': {\n const coverage = qualityData.fileCoverage?.[filePath];\n if (coverage !== undefined) {\n return { type: 'coverage', value: coverage, label: `${Math.round(coverage)}% coverage` };\n }\n return { type: 'coverage', value: null, label: 'No coverage data' };\n }\n case 'eslint': {\n const metric = qualityData.fileMetrics?.eslint?.find(m => m.file === filePath);\n if (metric) {\n const parts = [];\n if (metric.errorCount > 0) parts.push(`${metric.errorCount} error${metric.errorCount > 1 ? 's' : ''}`);\n if (metric.warningCount > 0) parts.push(`${metric.warningCount} warning${metric.warningCount > 1 ? 's' : ''}`);\n return { type: 'eslint', value: metric, label: parts.length > 0 ? parts.join(', ') : 'No issues' };\n }\n return { type: 'eslint', value: null, label: 'No lint data' };\n }\n case 'typescript': {\n const metric = qualityData.fileMetrics?.typescript?.find(m => m.file === filePath);\n if (metric) {\n const errors = metric.errorCount;\n return { type: 'typescript', value: metric, label: errors > 0 ? `${errors} type error${errors > 1 ? 's' : ''}` : 'No type errors' };\n }\n return { type: 'typescript', value: null, label: 'No type data' };\n }\n case 'prettier': {\n const metric = qualityData.fileMetrics?.prettier?.find(m => m.file === filePath);\n if (metric) {\n const issues = metric.issueCount;\n return { type: 'prettier', value: metric, label: issues > 0 ? `${issues} formatting issue${issues > 1 ? 's' : ''}` : 'Properly formatted' };\n }\n return { type: 'prettier', value: null, label: 'No format data' };\n }\n case 'knip': {\n const metric = qualityData.fileMetrics?.knip?.find(m => m.file === filePath);\n if (metric) {\n const issues = metric.issueCount;\n return { type: 'knip', value: metric, label: issues > 0 ? `${issues} unused export${issues > 1 ? 's' : ''}` : 'No dead code' };\n }\n return { type: 'knip', value: null, label: 'No dead code data' };\n }\n case 'alexandria': {\n const metric = qualityData.fileMetrics?.alexandria?.find(m => m.file === filePath);\n if (metric) {\n const issues = metric.issueCount;\n return { type: 'alexandria', value: metric, label: issues > 0 ? `${issues} doc issue${issues > 1 ? 's' : ''}` : 'Well documented' };\n }\n return { type: 'alexandria', value: null, label: 'No doc data' };\n }\n default:\n return null;\n }\n }, [hoverInfo?.hoveredBuilding?.path, colorMode, qualityData]);\n\n // Compute tree stats from cityData\n const computedTreeStats = useMemo(() => {\n if (!cityData) {\n return null;\n }\n\n // Use metadata if available\n if (\n cityData.metadata?.totalFiles !== undefined &&\n cityData.metadata?.totalDirectories !== undefined\n ) {\n return {\n fileCount: cityData.metadata.totalFiles,\n directoryCount: cityData.metadata.totalDirectories,\n };\n }\n\n // Count files from buildings array and directories from districts tree\n const fileCount = cityData.buildings?.length || 0;\n let directoryCount = 0;\n\n const countDistricts = (districts: CityDistrict[]) => {\n for (const district of districts) {\n directoryCount++;\n if (district.children) {\n countDistricts(district.children);\n }\n }\n };\n\n if (cityData.districts) {\n countDistricts(cityData.districts);\n }\n\n return { fileCount, directoryCount };\n }, [cityData]);\n\n // Memoize the hover handler\n const handleHover = useCallback((info: HoverInfo) => {\n setHoverInfo(info);\n }, []);\n\n // Generate file color layers from city data\n const fileColorLayers = useMemo(() => {\n if (!cityData || !cityData.buildings) {\n return [];\n }\n\n // Create file color layers based on file extensions\n const layers = createFileColorHighlightLayers(cityData.buildings);\n return layers;\n }, [cityData]);\n\n // Generate git status layers from city data and git slice\n const gitStatusLayers = useMemo((): HighlightLayer[] => {\n if (!cityData || !cityData.buildings || !gitSlice?.data) {\n return [];\n }\n\n const gitStatus = gitSlice.data;\n const buildingsByPath = new Map(\n cityData.buildings.map((b) => [b.path, b])\n );\n\n const createLayerItems = (paths: string[]): LayerItem[] => {\n const items: LayerItem[] = [];\n for (const path of paths) {\n const building = buildingsByPath.get(path);\n if (building) {\n items.push({\n path: building.path,\n type: 'file' as const,\n renderStrategy: 'fill',\n });\n }\n }\n return items;\n };\n\n const layers: HighlightLayer[] = [];\n\n // Staged files (green)\n if (gitStatus.staged.length > 0) {\n const items = createLayerItems(gitStatus.staged);\n if (items.length > 0) {\n layers.push({\n id: 'git-highlight-staged',\n name: 'Staged',\n enabled: true,\n color: GIT_STATUS_COLORS.staged,\n priority: 100,\n items,\n });\n }\n }\n\n // Unstaged/modified files (yellow)\n if (gitStatus.unstaged.length > 0) {\n const items = createLayerItems(gitStatus.unstaged);\n if (items.length > 0) {\n layers.push({\n id: 'git-highlight-unstaged',\n name: 'Modified',\n enabled: true,\n color: GIT_STATUS_COLORS.unstaged,\n priority: 90,\n items,\n });\n }\n }\n\n // Untracked files (gray)\n if (gitStatus.untracked.length > 0) {\n const items = createLayerItems(gitStatus.untracked);\n if (items.length > 0) {\n layers.push({\n id: 'git-highlight-untracked',\n name: 'Untracked',\n enabled: true,\n color: GIT_STATUS_COLORS.untracked,\n priority: 80,\n items,\n });\n }\n }\n\n // Deleted files (red) - these may not have buildings, but include for completeness\n if (gitStatus.deleted.length > 0) {\n const items = createLayerItems(gitStatus.deleted);\n if (items.length > 0) {\n layers.push({\n id: 'git-highlight-deleted',\n name: 'Deleted',\n enabled: true,\n color: GIT_STATUS_COLORS.deleted,\n priority: 110,\n items,\n });\n }\n }\n\n return layers;\n }, [cityData, gitSlice?.data]);\n\n // Generate quality-based layers using the utility functions\n const qualityLayers = useMemo((): HighlightLayer[] => {\n if (!cityData?.buildings) return [];\n\n // Only compute if we're in a quality color mode\n if (colorMode === 'fileTypes' || colorMode === 'git') return [];\n\n return getLayersForColorMode(\n colorMode,\n cityData.buildings,\n qualityData,\n [], // Not needed for quality modes\n [] // Not needed for quality modes\n );\n }, [cityData, colorMode, qualityData]);\n\n // Compute whether git/agent layers exist\n const hasGitOrAgentLayers = useMemo(() => {\n return highlightLayers.some(\n (layer) =>\n (layer.id.includes('git-highlight') ||\n layer.id.includes('agent') ||\n layer.id.includes('event-highlight')) &&\n !layer.id.startsWith('ext-')\n );\n }, [highlightLayers]);\n\n // Compute legend file types by grouping primary/secondary layers\n // Uses baseLayers (before package filtering) so legend stays visible during hover\n const legendFileTypes = useMemo((): LegendFileType[] => {\n // Group layers by extension (ext-ts-primary, ext-ts-secondary -> ts)\n const groupedByExt = new Map<string, { primary?: typeof baseLayers[0]; secondary?: typeof baseLayers[0] }>();\n\n baseLayers.forEach((layer) => {\n // Match ext-{name}-primary or ext-{name}-secondary\n const match = layer.id.match(/^ext-(\\w+)-(primary|secondary)$/);\n if (match) {\n const [, ext, type] = match;\n if (!groupedByExt.has(ext)) {\n groupedByExt.set(ext, {});\n }\n const group = groupedByExt.get(ext)!;\n if (type === 'primary') {\n group.primary = layer;\n } else {\n group.secondary = layer;\n }\n }\n });\n\n // Convert to LegendFileType array\n const fileTypes: LegendFileType[] = [];\n groupedByExt.forEach((group, ext) => {\n if (group.primary) {\n fileTypes.push({\n id: ext,\n name: group.primary.name,\n fillColor: group.primary.color,\n borderColor: group.secondary?.color,\n count: group.primary.items.length,\n enabled: group.primary.enabled,\n });\n }\n });\n\n // Sort by count (most files first)\n return fileTypes.sort((a, b) => b.count - a.count);\n }, [baseLayers]);\n\n // Compute legend git status items from base layers\n const legendGitStatus = useMemo((): LegendGitStatus[] => {\n const gitLayers = baseLayers.filter((layer) =>\n layer.id.startsWith('git-highlight-')\n );\n\n return gitLayers.map((layer) => ({\n id: layer.id,\n name: layer.name,\n color: layer.color,\n count: layer.items.length,\n enabled: layer.enabled,\n }));\n }, [baseLayers]);\n\n // Compute legend agent layer items from highlight layers\n const legendAgentLayers = useMemo((): LegendAgentLayer[] => {\n const agentLayers = highlightLayers.filter((layer) =>\n layer.id.startsWith('event-highlight')\n );\n\n return agentLayers.map((layer) => ({\n id: layer.id,\n name: layer.name,\n color: layer.color,\n count: layer.items.length,\n enabled: layer.enabled,\n }));\n }, [highlightLayers]);\n\n // Compute legend quality metrics from base layers (for quality color modes)\n const legendQualityMetrics = useMemo((): LegendQualityMetric[] => {\n // Check if we're in a quality color mode\n const qualityModeIds = ['coverage', 'eslint', 'typescript', 'prettier', 'knip', 'alexandria'];\n if (!qualityModeIds.includes(colorMode)) {\n return [];\n }\n\n // Find quality layers based on the color mode prefix\n const qualityLayerPrefixes: Record<string, string> = {\n coverage: 'coverage-',\n eslint: 'eslint-',\n typescript: 'typescript-',\n prettier: 'prettier-',\n knip: 'knip-',\n alexandria: 'alexandria-',\n };\n\n const prefix = qualityLayerPrefixes[colorMode];\n if (!prefix) return [];\n\n const relevantLayers = baseLayers.filter((layer) =>\n layer.id.startsWith(prefix)\n );\n\n return relevantLayers.map((layer) => ({\n id: layer.id,\n name: layer.name,\n color: layer.color,\n count: layer.items.length,\n enabled: layer.enabled,\n }));\n }, [baseLayers, colorMode]);\n\n // Toggle git status layer\n const toggleGitStatus = useCallback((id: string) => {\n setHighlightLayers((prev) =>\n prev.map((layer) => {\n if (layer.id === id) {\n return { ...layer, enabled: !layer.enabled };\n }\n return layer;\n })\n );\n }, []);\n\n // Toggle agent layer\n const toggleAgentLayer = useCallback((id: string) => {\n setHighlightLayers((prev) =>\n prev.map((layer) => {\n if (layer.id === id) {\n return { ...layer, enabled: !layer.enabled };\n }\n return layer;\n })\n );\n }, []);\n\n // Clear all agent layers\n const clearAgentLayers = useCallback(() => {\n setHighlightLayers((prev) =>\n prev.filter((layer) => !layer.id.startsWith('event-highlight'))\n );\n agentLayersRegistered.current = false;\n }, []);\n\n // Toggle quality metric layer\n const toggleQualityMetric = useCallback((id: string) => {\n setHighlightLayers((prev) =>\n prev.map((layer) => {\n if (layer.id === id) {\n return { ...layer, enabled: !layer.enabled };\n }\n return layer;\n })\n );\n }, []);\n\n // Toggle layers by extension (toggles both primary and secondary)\n const toggleFileType = useCallback((ext: string) => {\n setHighlightLayers((prev) => {\n // Find current state from primary layer\n const primaryLayer = prev.find((l) => l.id === `ext-${ext}-primary`);\n const newEnabled = primaryLayer ? !primaryLayer.enabled : true;\n\n return prev.map((layer) => {\n if (layer.id === `ext-${ext}-primary` || layer.id === `ext-${ext}-secondary`) {\n return { ...layer, enabled: newEnabled };\n }\n return layer;\n });\n });\n }, []);\n\n // Helper function to check if a file path is within a package\n const isFileInPackage = useCallback((filePath: string, packagePath: string): boolean => {\n // Handle root package (empty path)\n if (!packagePath || packagePath === '/' || packagePath === '.') {\n return true;\n }\n // Normalize paths and check if file starts with package path\n const normalizedFilePath = filePath.startsWith('/') ? filePath.slice(1) : filePath;\n const normalizedPackagePath = packagePath.startsWith('/') ? packagePath.slice(1) : packagePath;\n return normalizedFilePath.startsWith(normalizedPackagePath + '/') || normalizedFilePath === normalizedPackagePath;\n }, []);\n\n // Update highlight layers based on color mode\n // This effect manages which layers are shown based on the selected color mode\n useEffect(() => {\n // Get agent layers\n const agentLayers = agentHighlightLayersSlice?.data || [];\n const formattedAgentLayers: HighlightLayer[] = agentLayers.map((layer, idx) => ({\n id: layer.id || `event-highlight-${idx}`,\n name: layer.name,\n enabled: layer.enabled,\n color: layer.color,\n priority: layer.priority || 150,\n items: layer.items,\n }));\n\n // If agent layers are present, show ONLY agent layers (like git mode)\n // This prevents file type colors from obscuring agent activity\n if (formattedAgentLayers.length > 0) {\n setHighlightLayers(formattedAgentLayers);\n fileColorLayersRegistered.current = false;\n gitLayersRegistered.current = false;\n agentLayersRegistered.current = true;\n return;\n }\n\n // No agent layers - show the selected color mode\n let modeLayers: HighlightLayer[] = [];\n\n switch (colorMode) {\n case 'fileTypes':\n modeLayers = fileColorLayers.map((layer) => ({\n id: layer.id,\n name: layer.name,\n enabled: true,\n color: layer.color,\n opacity: layer.opacity,\n borderWidth: layer.borderWidth,\n priority: layer.priority || 0,\n items: layer.items,\n }));\n break;\n\n case 'git':\n modeLayers = gitStatusLayers;\n break;\n\n default:\n // Quality modes (coverage, eslint, typescript, etc.)\n modeLayers = qualityLayers;\n break;\n }\n\n // Store base layers for legend computation (before package filtering)\n setBaseLayers(modeLayers);\n\n // Active package path: selected takes priority over hovered\n const activePackagePath = selectedPackagePath ?? hoveredPackagePath;\n\n // Apply package filtering - dim files outside the active package\n if (activePackagePath !== null && modeLayers.length > 0) {\n // Create two sets of layers: full opacity for package files, dimmed for others\n const packageFilteredLayers: HighlightLayer[] = [];\n\n modeLayers.forEach((layer) => {\n // Split items into those inside and outside the package\n const insidePackage: LayerItem[] = [];\n const outsidePackage: LayerItem[] = [];\n\n layer.items.forEach((item) => {\n if (isFileInPackage(item.path, activePackagePath)) {\n insidePackage.push(item);\n } else {\n outsidePackage.push(item);\n }\n });\n\n // Add layer for files inside package (full visibility)\n if (insidePackage.length > 0) {\n packageFilteredLayers.push({\n ...layer,\n id: `${layer.id}-package-focus`,\n items: insidePackage,\n priority: (layer.priority || 0) + 100, // Higher priority for focused files\n });\n }\n\n // Add dimmed layer for files outside package\n if (outsidePackage.length > 0) {\n packageFilteredLayers.push({\n ...layer,\n id: `${layer.id}-dimmed`,\n items: outsidePackage,\n opacity: 0.15, // Dim files outside the active package\n priority: layer.priority || 0,\n });\n }\n });\n\n setHighlightLayers(packageFilteredLayers);\n } else {\n setHighlightLayers(modeLayers);\n }\n\n // Update tracking refs\n fileColorLayersRegistered.current = colorMode === 'fileTypes';\n gitLayersRegistered.current = colorMode === 'git';\n agentLayersRegistered.current = false;\n }, [colorMode, fileColorLayers, gitStatusLayers, qualityLayers, agentHighlightLayersSlice?.data, hoveredPackagePath, selectedPackagePath, isFileInPackage]);\n\n // Load city data from file tree\n useEffect(() => {\n if (!fileTreeSlice?.data || !fileTreeSlice.data.allFiles) {\n setLoading(false);\n return;\n }\n\n setLoading(true);\n try {\n // Convert FileTree.allFiles to FileInfo format for code-city-builder\n const fileInfoList = fileTreeSlice.data.allFiles.map((file) => {\n const pathParts = file.path.split('/');\n const fileName = file.name || pathParts[pathParts.length - 1];\n const extension = fileName.includes('.') ? fileName.split('.').pop() || '' : '';\n\n return {\n path: file.path,\n name: fileName,\n extension,\n size: file.size || 1000,\n lastModified: new Date(),\n isDirectory: false,\n relativePath: file.path,\n };\n });\n\n // Build the file system tree\n const fileSystemTree = buildFileSystemTreeFromFileInfoList(\n fileInfoList,\n fileTreeSlice.data.sha || 'unknown'\n );\n\n // Create a builder instance\n const builder = new CodeCityBuilderWithGrid();\n\n // Build the city data - use empty string for relative paths\n const data = builder.buildCityFromFileSystem(fileSystemTree, '');\n\n setCityData(data);\n } catch (error) {\n console.error('Failed to generate city data:', error);\n } finally {\n setLoading(false);\n }\n }, [fileTreeSlice?.data, fileTreeSlice?.loading, context.currentScope.repository?.path]);\n\n // Handle file click\n const handleFileClick = useCallback(\n (filePath: string) => {\n if (actions.openFile) {\n actions.openFile(filePath);\n }\n },\n [actions]\n );\n\n return (\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n width: '100%',\n backgroundColor: theme.colors.background,\n }}\n >\n {/* Header */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '0 16px',\n height: '40px',\n borderBottom: `1px solid ${theme.colors.border}`,\n backgroundColor: theme.colors.backgroundLight,\n flexShrink: 0,\n gap: '12px',\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', gap: '12px' }}>\n {computedTreeStats && (\n <>\n <div style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <File size={14} style={{ color: theme.colors.textSecondary }} />\n <span style={{ fontSize: '13px', color: theme.colors.text }}>\n {computedTreeStats.fileCount.toLocaleString()} files\n </span>\n </div>\n <div style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <Folder size={14} style={{ color: theme.colors.textSecondary }} />\n <span style={{ fontSize: '13px', color: theme.colors.text }}>\n {computedTreeStats.directoryCount.toLocaleString()} folders\n </span>\n </div>\n </>\n )}\n </div>\n\n {/* Color mode selector - only show if there are multiple modes */}\n {availableColorModes.length > 1 && (\n <div\n ref={colorModeDropdownRef}\n style={{ position: 'relative' }}\n >\n <button\n onClick={() => setShowColorModeDropdown(!showColorModeDropdown)}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n padding: '4px 10px',\n fontSize: '12px',\n color: theme.colors.text,\n backgroundColor: theme.colors.background,\n border: `1px solid ${theme.colors.border}`,\n borderRadius: '4px',\n cursor: 'pointer',\n transition: 'all 0.15s ease',\n minWidth: '120px',\n }}\n title=\"Change color mode\"\n >\n <span style={{ flex: 1, textAlign: 'left' }}>\n {currentColorModeConfig.name}\n </span>\n <ChevronDown\n size={14}\n style={{\n transform: showColorModeDropdown ? 'rotate(180deg)' : 'rotate(0deg)',\n transition: 'transform 0.15s ease',\n }}\n />\n </button>\n\n {/* Dropdown menu */}\n {showColorModeDropdown && (\n <div\n style={{\n position: 'absolute',\n top: '100%',\n left: 0,\n right: 0,\n marginTop: '4px',\n backgroundColor: theme.colors.background,\n border: `1px solid ${theme.colors.border}`,\n borderRadius: '4px',\n boxShadow: '0 4px 12px rgba(0, 0, 0, 0.15)',\n zIndex: 100,\n overflow: 'hidden',\n minWidth: '160px',\n }}\n >\n {availableColorModes.map((mode) => (\n <button\n key={mode.id}\n onClick={() => {\n setColorMode(mode.id);\n setShowColorModeDropdown(false);\n }}\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'flex-start',\n width: '100%',\n padding: '8px 12px',\n fontSize: '12px',\n color: mode.id === colorMode ? theme.colors.primary : theme.colors.text,\n backgroundColor: mode.id === colorMode ? theme.colors.primary + '15' : 'transparent',\n border: 'none',\n cursor: 'pointer',\n transition: 'background-color 0.15s ease',\n textAlign: 'left',\n }}\n onMouseEnter={(e) => {\n if (mode.id !== colorMode) {\n e.currentTarget.style.backgroundColor = theme.colors.backgroundLight;\n }\n }}\n onMouseLeave={(e) => {\n if (mode.id !== colorMode) {\n e.currentTarget.style.backgroundColor = 'transparent';\n }\n }}\n >\n <span style={{ fontWeight: mode.id === colorMode ? 600 : 400 }}>\n {mode.name}\n </span>\n <span\n style={{\n fontSize: '10px',\n color: theme.colors.textSecondary,\n marginTop: '2px',\n }}\n >\n {mode.description}\n </span>\n </button>\n ))}\n </div>\n )}\n </div>\n )}\n\n {(legendFileTypes.length > 0 || legendGitStatus.length > 0 || legendQualityMetrics.length > 0) && (\n <button\n onClick={() => setShowLegend(!showLegend)}\n style={{\n fontSize: '12px',\n color: showLegend\n ? theme.colors.primary\n : theme.colors.textSecondary,\n backgroundColor: showLegend\n ? theme.colors.primary + '22'\n : theme.colors.background,\n padding: '2px 8px',\n borderRadius: '4px',\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n border: showLegend\n ? `1px solid ${theme.colors.primary}`\n : '1px solid transparent',\n cursor: 'pointer',\n transition: 'all 0.2s ease',\n }}\n title={showLegend ? 'Hide legend' : 'Show legend'}\n >\n <List size={12} />\n Legend\n </button>\n )}\n </div>\n\n {/* Main content area with map and legend */}\n <div\n ref={contentContainerRef}\n style={{\n flex: 1,\n position: 'relative',\n overflow: 'hidden',\n display: 'flex',\n flexDirection: layout.legendPosition === 'right' ? 'row' : 'column',\n }}\n >\n {/* City visualization with hover bar */}\n <div\n style={{\n minWidth: layout.legendPosition === 'right' ? layout.minMapSize : undefined,\n minHeight: layout.legendPosition === 'bottom' ? layout.minMapSize : undefined,\n flex: 1,\n position: 'relative',\n display: 'flex',\n flexDirection: 'column',\n }}\n >\n {/* Map area */}\n <div style={{ flex: 1, position: 'relative', minHeight: 0 }}>\n {loading ? (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n height: '100%',\n color: theme.colors.textSecondary,\n }}\n >\n Loading repository structure...\n </div>\n ) : !cityData ? (\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n height: '100%',\n color: theme.colors.textSecondary,\n gap: '12px',\n }}\n >\n <Building2 size={32} style={{ opacity: 0.5 }} />\n <div>\n {context.currentScope.repository\n ? 'Building File City...'\n : 'No repository loaded'}\n </div>\n </div>\n ) : (\n <ArchitectureMapHighlightLayers\n cityData={cityData}\n highlightLayers={highlightLayers}\n showLayerControls={false}\n onLayerToggle={() => {}}\n defaultDirectoryColor=\"#111827\"\n onFileClick={handleFileClick}\n showFileTypeIcons={true}\n className=\"w-full h-full\"\n showDirectoryLabels={true}\n onHover={handleHover}\n />\n )}\n </div>\n\n {/* Hover Information Bar - inside map area */}\n <div\n style={{\n height: '48px',\n borderTop: `1px solid ${theme.colors.border}`,\n backgroundColor: theme.colors.background,\n display: 'flex',\n alignItems: 'center',\n padding: '0 12px',\n fontSize: '12px',\n color: theme.colors.text,\n gap: '12px',\n flexShrink: 0,\n }}\n >\n {hoverInfo &&\n (hoverInfo.hoveredBuilding || hoverInfo.hoveredDistrict) ? (\n <>\n {/* File/Directory name and path */}\n <div\n style={{\n flex: '1 1 auto',\n display: 'flex',\n flexDirection: 'column',\n gap: '1px',\n minWidth: 0,\n }}\n >\n {/* Name (filename or last directory part) */}\n <div\n style={{\n fontWeight: 600,\n color: theme.colors.primary,\n fontSize: '13px',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n {hoverInfo.fileTooltip?.text ||\n hoverInfo.hoveredDistrict?.path?.split('/').pop() ||\n hoverInfo.hoveredDistrict?.path ||\n 'Unknown'}\n </div>\n {/* Path */}\n <div\n style={{\n color: theme.colors.textSecondary,\n fontSize: '10px',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n {hoverInfo.hoveredBuilding?.path ||\n hoverInfo.hoveredDistrict?.path ||\n '/'}\n </div>\n </div>\n\n {/* File count for directories */}\n {hoverInfo.hoveredDistrict && hoverInfo.fileCount !== null && (\n <div\n style={{\n color: theme.colors.textSecondary,\n fontSize: '11px',\n flexShrink: 0,\n }}\n >\n {hoverInfo.fileCount}{' '}\n {hoverInfo.fileCount === 1 ? 'file' : 'files'}\n </div>\n )}\n\n {/* Quality metric for files in quality color modes */}\n {hoverInfo.hoveredBuilding && hoveredFileMetric && (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n padding: '4px 10px',\n backgroundColor: theme.colors.backgroundLight,\n borderRadius: '4px',\n border: `1px solid ${theme.colors.border}`,\n fontSize: '11px',\n fontWeight: 500,\n color: hoveredFileMetric.value === null\n ? theme.colors.textSecondary\n : theme.colors.text,\n flexShrink: 0,\n }}\n >\n {hoveredFileMetric.label}\n </div>\n )}\n </>\n ) : (selectedPackagePath || hoveredPackagePath) ? (\n /* Package filter indicator when not hovering a specific file */\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n color: theme.colors.text,\n fontSize: '11px',\n }}\n >\n <span\n style={{\n padding: '4px 10px',\n backgroundColor: selectedPackagePath\n ? theme.colors.primary + '20'\n : theme.colors.accent + '20',\n color: selectedPackagePath\n ? theme.colors.primary\n : theme.colors.accent,\n borderRadius: '4px',\n fontWeight: 500,\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n }}\n >\n <Folder size={12} />\n {selectedPackagePath ? 'Selected' : 'Showing'}: {selectedPackagePath || hoveredPackagePath || '/'}\n </span>\n <span style={{ color: theme.colors.textSecondary, fontStyle: 'italic' }}>\n {selectedPackagePath\n ? 'Click \"All Packages\" to clear selection'\n : 'Files outside this package are dimmed'}\n </span>\n </div>\n ) : (\n /* Default help text when not hovering */\n <div\n style={{\n color: theme.colors.textSecondary,\n fontStyle: 'italic',\n fontSize: '11px',\n }}\n >\n Hover over files and directories to see details • Click to open\n </div>\n )}\n </div>\n </div>\n\n {/* Legend panel - positioned based on layout */}\n {showLegend && (legendFileTypes.length > 0 || legendGitStatus.length > 0 || legendAgentLayers.length > 0 || legendQualityMetrics.length > 0) && (\n <Legend\n fileTypes={legendFileTypes}\n gitStatus={legendGitStatus}\n agentLayers={legendAgentLayers}\n qualityMetrics={legendQualityMetrics}\n colorMode={colorMode}\n onItemClick={toggleFileType}\n onGitStatusClick={toggleGitStatus}\n onAgentLayerClick={toggleAgentLayer}\n onQualityMetricClick={toggleQualityMetric}\n onClearAgentLayers={clearAgentLayers}\n position={layout.legendPosition}\n maxSize={layout.legendMaxSize}\n />\n )}\n </div>\n </div>\n );\n};\n\n/**\n * CodeCityPanel - A file visualization panel using the File City map.\n *\n * This panel shows:\n * - 3D visualization of repository structure\n * - File and directory hierarchy as a city metaphor\n * - Interactive hover and click functionality\n * - Highlight layers for different file types\n *\n * Note: This component expects to be rendered within a ThemeProvider from the host.\n */\nexport const CodeCityPanel: React.FC<PanelComponentProps> = (props) => {\n return <CodeCityPanelContent {...props} />;\n};\n\n/**\n * Preview component for panel selection\n */\nexport const CodeCityPanelPreview: 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 alignItems: 'center',\n justifyContent: 'center',\n gap: '8px',\n height: '80px',\n }}\n >\n <Building2 size={32} style={{ color: theme.colors.primary }} />\n <span\n style={{\n fontSize: '11px',\n color: theme.colors.textSecondary,\n }}\n >\n 3D Code City\n </span>\n </div>\n );\n};\n","/**\n * Panel Tools\n *\n * UTCP-compatible tools for the File City panel extension.\n * These tools can be invoked by AI agents and emit events that panels listen for.\n *\n * IMPORTANT: This file should NOT import any React components to ensure\n * it can be imported server-side without pulling in React dependencies.\n * Use the './tools' subpath export for server-safe imports.\n */\n\nimport type { PanelTool, PanelToolsMetadata } from '@principal-ade/utcp-panel-event';\n\n/**\n * Tool: Focus Building\n */\nexport const focusBuildingTool: PanelTool = {\n name: 'focus_building',\n description: 'Focuses the camera on a specific file (building) in the file city visualization',\n inputs: {\n type: 'object',\n properties: {\n filePath: {\n type: 'string',\n description: 'Path to the file to focus on',\n },\n animate: {\n type: 'boolean',\n description: 'Whether to animate the camera transition',\n },\n },\n required: ['filePath'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n message: { type: 'string' },\n },\n },\n tags: ['navigation', 'camera', 'focus'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: 'industry-theme.file-city-panel:focus-building',\n },\n};\n\n/**\n * Tool: Select District\n */\nexport const selectDistrictTool: PanelTool = {\n name: 'select_district',\n description: 'Selects and highlights a directory (district) in the file city visualization',\n inputs: {\n type: 'object',\n properties: {\n directoryPath: {\n type: 'string',\n description: 'Path to the directory to select',\n },\n expandChildren: {\n type: 'boolean',\n description: 'Whether to expand and show child buildings',\n },\n },\n required: ['directoryPath'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n selectedDistrict: { type: 'string' },\n },\n },\n tags: ['selection', 'district', 'directory'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: 'industry-theme.file-city-panel:select-district',\n },\n};\n\n/**\n * Tool: Reset View\n */\nexport const resetViewTool: PanelTool = {\n name: 'reset_view',\n description: 'Resets the file city view to the default camera position',\n inputs: {\n type: 'object',\n properties: {\n animate: {\n type: 'boolean',\n description: 'Whether to animate the camera reset',\n },\n },\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n },\n },\n tags: ['navigation', 'camera', 'reset'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: 'industry-theme.file-city-panel:reset-view',\n },\n};\n\n/**\n * All tools exported as an array.\n */\nexport const codeCityPanelTools: PanelTool[] = [\n focusBuildingTool,\n selectDistrictTool,\n resetViewTool,\n];\n\n/**\n * Panel tools metadata for registration with PanelToolRegistry.\n */\nexport const codeCityPanelToolsMetadata: PanelToolsMetadata = {\n id: 'industry-theme.file-city-panel',\n name: 'File City Panel',\n description: 'Tools provided by the file city visualization panel extension',\n tools: codeCityPanelTools,\n};\n","import { CodeCityPanel } from './panels/CodeCityPanel';\nimport type { PanelDefinition, PanelContextValue } from './types';\nimport { codeCityPanelTools } from './tools';\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: 'principal-ade.file-city-panel',\n name: 'File City Map',\n icon: '🏙️',\n version: '0.2.0',\n author: 'Principal AI',\n description:\n '3D visualization of repository structure using the File City metaphor',\n // Data slices this panel depends on\n // - fileTree: Required - repository file structure\n // - fileCityColorModes: Optional - controls which color modes are available\n // (if not provided, only fileTypes and git modes are shown)\n slices: ['fileTree', 'fileCityColorModes'],\n // UTCP-compatible tools this panel exposes\n tools: codeCityPanelTools,\n },\n component: CodeCityPanel,\n\n // Optional: Called when this specific panel is mounted\n onMount: async (context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log(\n 'File City Panel mounted',\n context.currentScope.repository?.path\n );\n\n // Refresh file tree data if available\n if (context.hasSlice('fileTree') && !context.isSliceLoading('fileTree')) {\n await context.refresh('repository', 'fileTree');\n }\n },\n\n // Optional: Called when this specific panel is unmounted\n onUnmount: async (_context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('File City Panel unmounting');\n },\n },\n];\n\n/**\n * Optional: Called once when the entire package is loaded.\n * Use this for package-level initialization.\n */\nexport const onPackageLoad = async () => {\n // eslint-disable-next-line no-console\n console.log('Panel package loaded - File City Panel Extension');\n};\n\n/**\n * Optional: Called once when the package is unloaded.\n * Use this for package-level cleanup.\n */\nexport const onPackageUnload = async () => {\n // eslint-disable-next-line no-console\n console.log('Panel package unloading - File City Panel Extension');\n};\n\n/**\n * Export tools for server-safe imports.\n * Use '@industry-theme/file-city-panel/tools' to import without React dependencies.\n */\nexport {\n codeCityPanelTools,\n codeCityPanelToolsMetadata,\n focusBuildingTool,\n selectDistrictTool,\n resetViewTool,\n} from './tools';\n\n/**\n * Export types for host applications to create the fileCityColorModes slice.\n */\nexport type {\n FileCityColorModesSliceData,\n QualitySliceData,\n ColorMode,\n ColorModeConfig,\n FileMetricData,\n HighlightLayer,\n} from './types';\n\n/**\n * Export color mode constants for host applications.\n */\nexport {\n COLOR_MODES,\n DEFAULT_COLOR_MODES,\n QUALITY_COLOR_MODES,\n} from './panels/utils/qualityLayers';\n"],"names":["array","color","children","__iconNode","theme","containerStyle","React2","BarChart3","filter","drawLayeredBuildings_1","drawLayeredBuildings","hex","this","o","require$$0","require$$1","require$$2","require$$3","cityData","zoomState","distance","suffixConfigs","includeUnmatched","files","start","root","squarify","treemap","constant","adjustedCellWidth","colX","showLabels","id","set","useCodeCityData_1","useCodeCityData","React","useState","useEffect","useDebugValue","shim","shimModule","useRef","useMemo","selector","withSelectorModule","initialState","ReactExports","identity","noop","parseTypenames","get","document","select","Selection","datum","selection","attrRemove","attrRemoveNS","attrConstant","attrConstantNS","attrFunction","attrFunctionNS","styleRemove","styleConstant","styleFunction","textConstant","textFunction","create","window","sourceEvent","nopropagation","noevent","dispatch","defaultFilter","defaultTouchable","drag","nodrag","container","event","touch","rgb","colorRgb","number","i","zoom","timeout","now","schedule","empty","interpolate","interpolateTransform","inherit","style","remove","easeCubicInOut","wheelDelta","extent","dragEnable","ConnectionMode","PanOnScrollMode","SelectionMode","ConnectionLineType","MarkerType","Position","getDirection","xDir","yDir","_a","handle","shallow","fitView","zoomIdentity","change","getNodes","setNodes","setEdges","edges","Symbol","defaultColor","selector$3","selector$2","selector$1","applyChanges","items","width","height","position","BackgroundVariant","nodesSelector","wrapperStyle","ResizeControlVariant","require$$4","require$$5","exports","_b","_d","_c","_f","_e","_h","_g","_j","_i","_k","createFileColorHighlightLayers","ArchitectureMapHighlightLayers"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,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,162]}