From 610315f25d844596458193fabcdfcf616963779a Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Sat, 15 Aug 2026 06:27:57 +0000 Subject: [PATCH 1/6] Show typed extras and graph neighbors when a node is selected. The inspector now explains what the node is for, surfaces field types, permissions, schema fields, and other extracted metadata, and lists incoming/outgoing edges so a click shows the load path around that node. Co-authored-by: zord.lack.net --- tests/e2e/test_ui_flows.py | 5 +- ui/src/ImpactGraph.tsx | 105 ++++++++++- ui/src/nodeInspector.test.ts | 141 +++++++++++++++ ui/src/nodeInspector.ts | 342 +++++++++++++++++++++++++++++++++++ ui/src/styles.css | 103 ++++++++++- ui/src/styles.test.ts | 12 ++ 6 files changed, 696 insertions(+), 12 deletions(-) create mode 100644 ui/src/nodeInspector.test.ts create mode 100644 ui/src/nodeInspector.ts diff --git a/tests/e2e/test_ui_flows.py b/tests/e2e/test_ui_flows.py index 4965762..2ba6bcf 100644 --- a/tests/e2e/test_ui_flows.py +++ b/tests/e2e/test_ui_flows.py @@ -114,7 +114,10 @@ def test_ui_index_review_graph_copy_and_workspace(live_app, browser_page): page.locator(".react-flow__node").first.click() inspector = page.get_by_test_id("graph-inspector") inspector.wait_for(timeout=10_000) - assert inspector.inner_text().strip() + body = inspector.inner_text() + assert body.strip() + assert "Inputs" in body and "Outputs" in body + assert page.get_by_test_id("graph-inspector-purpose").inner_text().strip() overflow = inspector.evaluate( """el => { const pane = el.parentElement; diff --git a/ui/src/ImpactGraph.tsx b/ui/src/ImpactGraph.tsx index ddb1b3b..177abb7 100644 --- a/ui/src/ImpactGraph.tsx +++ b/ui/src/ImpactGraph.tsx @@ -23,6 +23,7 @@ import { type GraphFamily, type GraphProjection, } from "./graphView"; +import { inspectNode, type InspectorLink } from "./nodeInspector"; import { layoutNodes, type GraphEdge, type GraphNode } from "./types"; const LayeredGraph3D = lazy(() => @@ -100,22 +101,106 @@ export function toReactFlowElements( return { rfNodes, rfEdges }; } -function GraphInspector({ node }: { node: GraphNode }) { +function GraphInspector({ + node, + nodes, + edges, +}: { + node: GraphNode; + nodes: GraphNode[]; + edges: GraphEdge[]; +}) { + const info = inspectNode(node, nodes, edges); return ( ); } +function InspectorLinks({ + title, + testId, + links, + extra, + empty, +}: { + title: string; + testId: string; + links: InspectorLink[]; + extra: number; + empty: string; +}) { + return ( +
+

+ {title} + {links.length + extra} +

+ {links.length ? ( +
    + {links.map((link, i) => ( +
  • + + {wrapHint(link.name)} + + + {link.typeLabel ? `${link.typeLabel} · ` : ""} + {link.edgeLabel} + {link.inferred ? " · inferred" : ""} + +
  • + ))} +
+ ) : ( +

{empty}

+ )} + {extra ?

+{extra} more

: null} +
+ ); +} + export function ImpactGraph({ nodes, edges }: { nodes: GraphNode[]; edges: GraphEdge[] }) { const [selectedId, setSelectedId] = useState(null); const [projection, setProjection] = useState(null); @@ -270,7 +355,7 @@ export function ImpactGraph({ nodes, edges }: { nodes: GraphNode[]; edges: Graph }} /> - {selected ? : null} + {selected ? : null} ) : ( @@ -306,7 +391,7 @@ export function ImpactGraph({ nodes, edges }: { nodes: GraphNode[]; edges: Graph /> - {selected ? : null} + {selected ? : null} )} diff --git a/ui/src/nodeInspector.test.ts b/ui/src/nodeInspector.test.ts new file mode 100644 index 0000000..c9ca90d --- /dev/null +++ b/ui/src/nodeInspector.test.ts @@ -0,0 +1,141 @@ +import { describe, expect, it } from "vitest"; +import { factsFromExtra, inspectNode, typePurpose } from "./nodeInspector"; +import type { GraphEdge, GraphNode } from "./types"; + +function node(partial: Partial & Pick): GraphNode { + return { + qualified_name: partial.qualified_name ?? partial.name, + ...partial, + }; +} + +describe("typePurpose", () => { + it("explains known types and falls back by family", () => { + expect(typePurpose("django.field")).toMatch(/column/i); + expect(typePurpose("react.form_schema")).toMatch(/typed/i); + expect(typePurpose("django.mystery")).toMatch(/Django/); + }); +}); + +describe("factsFromExtra", () => { + it("surfaces typed field metadata and skips noise", () => { + const facts = factsFromExtra({ + field_type: "DecimalField", + unique: true, + db_index: false, + referenced: true, + on_delete: "CASCADE", + related_name: "invoices", + }); + expect(facts.map((f) => f.label)).toEqual(["Type", "on_delete", "related_name", "Unique"]); + expect(facts[0].value).toBe("DecimalField"); + expect(facts.find((f) => f.key === "unique")?.value).toBe("yes"); + }); + + it("keeps a false idempotency flag and joins field lists", () => { + const facts = factsFromExtra({ + looks_idempotent_on_pk: false, + fields: ["id", "total", "status"], + placeholder: true, + }); + expect(facts).toEqual([ + { key: "fields", label: "Fields", value: "id, total, status" }, + { key: "looks_idempotent_on_pk", label: "Idempotent on pk", value: "no" }, + ]); + }); +}); + +describe("inspectNode", () => { + const view = node({ + id: "django.view:billing.InvoiceViewSet", + type: "django.view", + name: "InvoiceViewSet", + qualified_name: "billing.InvoiceViewSet", + file_path: "backend/billing/views.py", + start_line: 12, + context: "billing", + extra: { + app: "billing", + bases: ["ModelViewSet"], + permissions: ["IsAuthenticated"], + }, + }); + const ser = node({ + id: "django.serializer:billing.InvoiceSerializer", + type: "django.serializer", + name: "InvoiceSerializer", + }); + const route = node({ + id: "django.route:billing:/api/invoices/{id}", + type: "django.route", + name: "/api/invoices/{id}", + }); + const ghost = { + id: "ghost", + src: view.id, + dst: "django.model:billing.Missing", + type: "queries_model", + weight: "expensive", + confidence: 0.6, + } satisfies GraphEdge; + const uses = { + id: "uses", + src: view.id, + dst: ser.id, + type: "uses_serializer", + weight: "expensive", + confidence: 1, + } satisfies GraphEdge; + const publishes = { + id: "pub", + src: route.id, + dst: view.id, + type: "publishes_route", + weight: "critical", + confidence: 1, + } satisfies GraphEdge; + + it("builds purpose, typed facts, and input/output neighbors", () => { + const info = inspectNode(view, [view, ser, route], [uses, publishes, ghost]); + expect(info.typeLabel).toBe("view"); + expect(info.layer).toBe("views"); + expect(info.purpose).toMatch(/Request handler/); + expect(info.roles).toEqual([]); + expect(info.file).toBe("backend/billing/views.py:12"); + expect(info.facts.map((f) => `${f.label}: ${f.value}`)).toEqual([ + "Extends: ModelViewSet", + "Permissions: IsAuthenticated", + "App: billing", + ]); + expect(info.inputs).toEqual([ + expect.objectContaining({ + name: "/api/invoices/{id}", + typeLabel: "route", + edgeLabel: "publishes route", + inferred: false, + }), + ]); + expect(info.outputs.map((l) => l.name)).toEqual(["InvoiceSerializer", "billing.Missing"]); + expect(info.outputs[1].inferred).toBe(true); + expect(info.outputs[1].typeLabel).toBe(""); + }); + + it("tags sinks and contracts", () => { + const info = inspectNode(route, [route], []); + expect(info.roles).toEqual(["sink", "contract"]); + }); + + it("caps long neighbor lists", () => { + const fieldEdges: GraphEdge[] = Array.from({ length: 20 }, (_, i) => ({ + id: `f${i}`, + src: view.id, + dst: `django.field:billing.Invoice.f${i}`, + type: "has_field", + weight: "cheap", + confidence: 1, + })); + const info = inspectNode(view, [view], fieldEdges); + expect(info.outputs).toHaveLength(16); + expect(info.extraOutputs).toBe(4); + }); +}); diff --git a/ui/src/nodeInspector.ts b/ui/src/nodeInspector.ts new file mode 100644 index 0000000..4b8d72b --- /dev/null +++ b/ui/src/nodeInspector.ts @@ -0,0 +1,342 @@ +import { kindLabel, typeLabel } from "./format"; +import { LAYER_LABELS } from "./graphView"; +import { layerFor, type GraphEdge, type GraphNode } from "./types"; + +const LINK_LIMIT = 16; +const LIST_LIMIT = 12; + +export const SINK_TYPES = new Set([ + "django.route", + "react.route", + "react.page", + "django.task", + "django.migration_op", + "django.permission", + "django.throttle", + "django.admin", + "django.management_command", + "openapi.path", +]); + +export const CONTRACT_TYPES = new Set([ + "django.serializer", + "django.serializer_field", + "django.form", + "openapi.path", + "react.form_schema", + "django.route", +]); + +const TYPE_PURPOSE: Record = { + "arch.context": "Ownership boundary from loadpath.yml — the context this code belongs to.", + "django.app": "Django app package that owns models, views, and jobs.", + "django.route": "HTTP URL that publishes a view. A sink: this is where a change becomes a public request.", + "django.url_name": "Named URL used by reverse() / {% url %} lookups.", + "django.view": "Request handler (class-based view, function view, or ViewSet).", + "django.viewset_action": "One ViewSet action (list, create, retrieve, update, destroy).", + "django.permission": "Auth gate on a view — who is allowed to hit this path.", + "django.throttle": "Rate-limit class attached to a view.", + "django.serializer": "Request/response contract: which fields go in and come out.", + "django.form": "Django form that validates submitted input.", + "django.serializer_field": "One field on a serializer or form — the typed slot on the contract.", + "django.service": "Internal service or use-case. Work that is not itself an HTTP sink.", + "django.model": "ORM model. Schema and relations live here.", + "django.field": "Model column. Type, indexes, and relations are the contract of the table.", + "django.relation": "Model-to-model relation (FK / M2M / O2O).", + "django.task": "Celery or Dramatiq job. Once enqueued, this is a sink.", + "django.receiver": "Signal handler that runs after a model event.", + "django.signal": "Django signal that receivers subscribe to.", + "django.test": "Backend test that mentions symbols on this path.", + "django.admin": "Django admin class for a model.", + "django.migration_op": "Schema migration operation (CreateModel, AlterField, …).", + "django.management_command": "manage.py command — an operational sink.", + "openapi.path": "Generated OpenAPI operation. The typed HTTP contract between stacks.", + "react.api_client": "Frontend fetch or generated client call to an API path.", + "react.query_key": "React Query cache key. Invalidation and reads share this name.", + "react.hook": "Data hook wrapping query or mutation calls.", + "react.feature": "Frontend feature module (folder).", + "react.route": "Client-side route. A sink: this is a URL the user can open.", + "react.page": "Page or screen component rendered by a route.", + "react.component": "UI component.", + "react.form_schema": "Zod (or similar) schema — typed form inputs on the client.", + "react.test": "Frontend test covering a page, hook, or component.", + "react.context": "React context provider.", +}; + +const FACT_LABELS: Record = { + field_type: "Type", + fields: "Fields", + form_fields: "Form fields", + permissions: "Permissions", + throttles: "Throttles", + authentication: "Authentication", + pagination: "Pagination", + filterset: "Filterset", + bases: "Extends", + on_delete: "on_delete", + related_name: "related_name", + unique: "Unique", + db_index: "Indexed", + relation: "Relation field", + looks_idempotent_on_pk: "Idempotent on pk", + broker: "Broker", + route: "Route", + url_name: "URL name", + view: "View", + include: "Includes", + mounted_at: "Mounted at", + full_path: "Full path", + method: "Method", + path: "Path", + operation_id: "Operation", + raw: "URL", + kind: "Schema", + exclude: "Excludes", + queryset_in_serializer: "Queryset in serializer", + get_queryset: "Custom get_queryset", + get_serializer_class: "Dynamic serializer", + dynamic: "Dynamic", + fbv: "Function view", + ninja: "Django Ninja", + django_form: "Django form", + mutation: "Mutation", + has_error_boundary: "Error boundary", + invalidation: "Cache invalidation", + inferred: "Inferred stitch", + generated: "Generated", + shared: "Shared module", + element: "Renders", + model_name: "Model", + field_name: "Field", + op: "Operation", + app: "App", + feature: "Feature", + from_view: "From view", + mentions: "Mentions", + nodeid: "Test id", + task: "Task", + to: "Related to", +}; + +const FACT_ORDER = [ + "field_type", + "method", + "path", + "operation_id", + "raw", + "route", + "mounted_at", + "full_path", + "url_name", + "view", + "element", + "fields", + "form_fields", + "exclude", + "kind", + "bases", + "permissions", + "authentication", + "throttles", + "pagination", + "filterset", + "on_delete", + "related_name", + "to", + "unique", + "db_index", + "relation", + "looks_idempotent_on_pk", + "broker", + "task", + "model_name", + "field_name", + "op", + "app", + "feature", + "from_view", + "include", + "fbv", + "ninja", + "django_form", + "mutation", + "has_error_boundary", + "invalidation", + "inferred", + "generated", + "shared", + "queryset_in_serializer", + "get_queryset", + "get_serializer_class", + "dynamic", + "mentions", + "nodeid", +]; + +const HIDDEN_EXTRA_KEYS = new Set([ + "referenced", + "placeholder", + "booted", + "line", + "call", + "from", + "import", + "local", + "source", + "file", + "plain_handler", + "string_ref", + "pagination_sink", + "match", + "via", + "generated_client", + "django", + "react", + "superseded_by_generated", + "foreign_app", + "imported", +]); + +const ALWAYS_SHOW_FALSE = new Set(["looks_idempotent_on_pk"]); + +export type InspectorLink = { + id: string; + name: string; + type: string; + typeLabel: string; + edgeType: string; + edgeLabel: string; + inferred: boolean; +}; + +export type InspectorFact = { + key: string; + label: string; + value: string; +}; + +export type NodeInspection = { + type: string; + typeLabel: string; + layer: string; + purpose: string; + name: string; + qualifiedName: string; + file?: string; + context?: string | null; + roles: string[]; + facts: InspectorFact[]; + inputs: InspectorLink[]; + outputs: InspectorLink[]; + extraInputs: number; + extraOutputs: number; +}; + +export function typePurpose(type: string): string { + if (TYPE_PURPOSE[type]) return TYPE_PURPOSE[type]; + if (type.startsWith("react.")) return "A React node on the load path."; + if (type.startsWith("django.")) return "A Django node on the load path."; + if (type.startsWith("openapi.")) return "A stitch node between Django and React."; + return "A node on the architecture graph."; +} + +export function inspectNode( + node: GraphNode, + nodes: GraphNode[], + edges: GraphEdge[], +): NodeInspection { + const byId = new Map(nodes.map((n) => [n.id, n])); + const roles: string[] = []; + if (SINK_TYPES.has(node.type)) roles.push("sink"); + if (CONTRACT_TYPES.has(node.type)) roles.push("contract"); + const extra = node.extra ?? {}; + if (extra.inferred) roles.push("inferred"); + if (extra.generated) roles.push("generated"); + if (extra.mutation) roles.push("mutation"); + if (extra.fbv) roles.push("function view"); + if (extra.ninja) roles.push("ninja"); + + const incoming = edges.filter((e) => e.dst === node.id); + const outgoing = edges.filter((e) => e.src === node.id); + const inputs = incoming.slice(0, LINK_LIMIT).map((e) => toLink(e, byId, e.src)); + const outputs = outgoing.slice(0, LINK_LIMIT).map((e) => toLink(e, byId, e.dst)); + + const loc = node.file_path + ? `${node.file_path}${node.start_line ? `:${node.start_line}` : ""}` + : undefined; + + return { + type: node.type, + typeLabel: kindLabel(typeLabel(node.type)), + layer: LAYER_LABELS[layerFor(node.type)] ?? "other", + purpose: typePurpose(node.type), + name: node.name, + qualifiedName: node.qualified_name, + file: loc, + context: node.context, + roles, + facts: factsFromExtra(extra), + inputs, + outputs, + extraInputs: Math.max(0, incoming.length - LINK_LIMIT), + extraOutputs: Math.max(0, outgoing.length - LINK_LIMIT), + }; +} + +function toLink(edge: GraphEdge, byId: Map, otherId: string): InspectorLink { + const other = byId.get(otherId); + const fallback = otherId.includes(":") ? otherId.slice(otherId.indexOf(":") + 1) : otherId; + return { + id: otherId, + name: other?.name || fallback, + type: other?.type || "", + typeLabel: other ? kindLabel(typeLabel(other.type)) : "", + edgeType: edge.type, + edgeLabel: kindLabel(edge.type), + inferred: edge.confidence < 0.8, + }; +} + +export function factsFromExtra(extra: Record): InspectorFact[] { + const keys = [ + ...FACT_ORDER.filter((k) => k in extra), + ...Object.keys(extra).filter((k) => !FACT_ORDER.includes(k) && !HIDDEN_EXTRA_KEYS.has(k)), + ]; + const facts: InspectorFact[] = []; + const seen = new Set(); + for (const key of keys) { + if (seen.has(key) || HIDDEN_EXTRA_KEYS.has(key)) continue; + seen.add(key); + const formatted = formatFact(key, extra[key]); + if (formatted == null) continue; + facts.push({ + key, + label: FACT_LABELS[key] ?? kindLabel(key), + value: formatted, + }); + } + return facts; +} + +function formatFact(key: string, raw: unknown): string | null { + if (raw == null) return null; + if (typeof raw === "boolean") { + if (!raw && !ALWAYS_SHOW_FALSE.has(key)) return null; + return raw ? "yes" : "no"; + } + if (typeof raw === "number") return String(raw); + if (typeof raw === "string") { + const trimmed = raw.trim(); + return trimmed || null; + } + if (Array.isArray(raw)) { + const items = raw + .map((item) => (typeof item === "string" || typeof item === "number" ? String(item) : "")) + .filter(Boolean); + if (!items.length) return null; + const shown = items.slice(0, LIST_LIMIT); + const more = items.length - shown.length; + return more > 0 ? `${shown.join(", ")} +${more} more` : shown.join(", "); + } + return null; +} diff --git a/ui/src/styles.css b/ui/src/styles.css index b9e511c..72b3667 100644 --- a/ui/src/styles.css +++ b/ui/src/styles.css @@ -1491,15 +1491,18 @@ h2 { font-size: 13px; margin: 0; font-weight: 600; } top: 12px; right: 12px; z-index: 5; - width: 260px; + width: 300px; max-width: calc(100% - 24px); + max-height: calc(100% - 24px); overflow-x: hidden; + overflow-y: auto; overflow-wrap: break-word; background: var(--surface); border: 1px solid var(--line); border-radius: var(--radius-lg); padding: 10px 12px; box-shadow: 0 8px 24px var(--shadow); + font-size: 12px; } .inspector .t { font-size: 11px; color: var(--muted); text-transform: uppercase; letter-spacing: 0.06em; } .inspector .n, @@ -1508,6 +1511,104 @@ h2 { font-size: 13px; margin: 0; font-weight: 600; } overflow-wrap: break-word; } .inspector .n { font-weight: 600; margin: 4px 0; } +.inspector-head { + display: flex; + align-items: center; + justify-content: space-between; + gap: 8px; +} +.inspector-roles { + display: flex; + flex-wrap: wrap; + justify-content: flex-end; + gap: 4px; +} +.inspector-chip { + font-size: 10px; + text-transform: uppercase; + letter-spacing: 0.04em; + padding: 1px 6px; + border-radius: 999px; + border: 1px solid var(--line); + color: var(--muted); + white-space: nowrap; +} +.inspector-purpose { + margin: 6px 0 8px; + color: var(--ink); + font-size: 12px; + line-height: 1.4; +} +.inspector-layer { margin-top: 4px; font-size: 11px; } +.inspector-facts { + margin: 10px 0 0; + padding-top: 8px; + border-top: 1px solid var(--line); +} +.inspector-fact { + display: grid; + grid-template-columns: minmax(64px, 92px) minmax(0, 1fr); + gap: 8px; + padding: 3px 0; + align-items: start; +} +.inspector-fact dt { + color: var(--muted); + font-size: 11px; + margin: 0; +} +.inspector-fact dd { + margin: 0; + overflow-wrap: break-word; +} +.inspector-section { + margin-top: 10px; + padding-top: 8px; + border-top: 1px solid var(--line); +} +.inspector-section h3 { + margin: 0 0 6px; + display: flex; + align-items: center; + justify-content: space-between; + color: var(--muted); + font-size: 11px; + text-transform: uppercase; + letter-spacing: 0.07em; + font-weight: 600; +} +.inspector-section .count { + font-family: var(--mono); + letter-spacing: 0; + text-transform: none; + border: 1px solid var(--line); + border-radius: 999px; + padding: 0 7px; + height: 18px; + display: inline-flex; + align-items: center; + font-size: 11px; +} +.inspector-section ul { + list-style: none; + margin: 0; + padding: 0; +} +.inspector-section li { + padding: 4px 0; + border-bottom: 1px solid color-mix(in srgb, var(--line) 70%, transparent); +} +.inspector-section li:last-child { border-bottom: 0; } +.inspector-link-name { + display: block; + font-weight: 600; + overflow-wrap: break-word; +} +.inspector-link-meta { + display: block; + color: var(--muted); + font-size: 11px; +} .lp-node { padding: 8px 10px; border-radius: var(--radius); diff --git a/ui/src/styles.test.ts b/ui/src/styles.test.ts index 00c22ce..ce46e7b 100644 --- a/ui/src/styles.test.ts +++ b/ui/src/styles.test.ts @@ -26,10 +26,22 @@ describe("graph selected-node overflow", () => { const name = document.querySelector(".inspector .n") as HTMLElement; expect(getComputedStyle(inspector).overflowWrap).toBe("break-word"); expect(getComputedStyle(inspector).overflowX).toBe("hidden"); + expect(getComputedStyle(inspector).overflowY).toBe("auto"); expect(getComputedStyle(inspector).maxWidth).not.toBe("none"); + expect(getComputedStyle(inspector).maxHeight).not.toBe("none"); expect(getComputedStyle(name).overflowWrap).toBe("break-word"); }); + it("lets inspector fact values shrink and wrap", () => { + mount( + ``, + ); + const fact = document.querySelector(".inspector-fact") as HTMLElement; + const dd = document.querySelector(".inspector-fact dd") as HTMLElement; + expect(getComputedStyle(fact).display).toBe("grid"); + expect(getComputedStyle(dd).overflowWrap).toBe("break-word"); + }); + it("ellipsizes long titles inside graph nodes", () => { mount(`
test_index_summary_includes_contexts_and_more
`); const name = document.querySelector(".lp-node .n") as HTMLElement; From 55099285030bf89318ae39456e50bbfe080c7185 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Sat, 15 Aug 2026 06:29:13 +0000 Subject: [PATCH 2/6] Assert inspector sections by test id, not CSS-uppercase labels. Co-authored-by: zord.lack.net --- tests/e2e/test_ui_flows.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/e2e/test_ui_flows.py b/tests/e2e/test_ui_flows.py index 2ba6bcf..98ff0ad 100644 --- a/tests/e2e/test_ui_flows.py +++ b/tests/e2e/test_ui_flows.py @@ -114,10 +114,10 @@ def test_ui_index_review_graph_copy_and_workspace(live_app, browser_page): page.locator(".react-flow__node").first.click() inspector = page.get_by_test_id("graph-inspector") inspector.wait_for(timeout=10_000) - body = inspector.inner_text() - assert body.strip() - assert "Inputs" in body and "Outputs" in body + assert inspector.inner_text().strip() assert page.get_by_test_id("graph-inspector-purpose").inner_text().strip() + assert page.get_by_test_id("graph-inspector-inputs").is_visible() + assert page.get_by_test_id("graph-inspector-outputs").is_visible() overflow = inspector.evaluate( """el => { const pane = el.parentElement; From 075db7a17935fc13bbd88ca320964a07901762f6 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Sat, 15 Aug 2026 07:26:18 +0000 Subject: [PATCH 3/6] Drop duplicate inspector facts and add a close control. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Role chips (generated, inferred, mutation, …) were also listed as yes/no facts, and App repeated the bounded context. Closing the panel lets you click nodes the overlay was covering. Co-authored-by: zord.lack.net --- ui/src/ImpactGraph.tsx | 26 +++++++++++++++++++++++--- ui/src/nodeInspector.test.ts | 28 +++++++++++++++++++++++++++- ui/src/nodeInspector.ts | 5 +++-- ui/src/styles.css | 14 ++++++++++++++ 4 files changed, 67 insertions(+), 6 deletions(-) diff --git a/ui/src/ImpactGraph.tsx b/ui/src/ImpactGraph.tsx index 177abb7..cf0888c 100644 --- a/ui/src/ImpactGraph.tsx +++ b/ui/src/ImpactGraph.tsx @@ -105,10 +105,12 @@ function GraphInspector({ node, nodes, edges, + onClose, }: { node: GraphNode; nodes: GraphNode[]; edges: GraphEdge[]; + onClose: () => void; }) { const info = inspectNode(node, nodes, edges); return ( @@ -121,6 +123,15 @@ function GraphInspector({ {role} ))} +
{wrapHint(info.name)}
@@ -240,6 +251,11 @@ export function ImpactGraph({ nodes, edges }: { nodes: GraphNode[]; edges: Graph setSelectedId(node.id); }; + const clearSelection = () => { + setSelectedId(null); + setNeighborhoodOnly(false); + }; + const toggleFamily = (family: GraphFamily) => { setFamilies((current) => { const next = new Set(current); @@ -355,7 +371,9 @@ export function ImpactGraph({ nodes, edges }: { nodes: GraphNode[]; edges: Graph }} /> - {selected ? : null} + {selected ? ( + + ) : null} ) : ( @@ -371,7 +389,7 @@ export function ImpactGraph({ nodes, edges }: { nodes: GraphNode[]; edges: Graph elementsSelectable deleteKeyCode={null} onNodeClick={onNodeClick} - onPaneClick={() => setSelectedId(null)} + onPaneClick={clearSelection} proOptions={{ hideAttribution: false }} data-testid="impact-graph" > @@ -391,7 +409,9 @@ export function ImpactGraph({ nodes, edges }: { nodes: GraphNode[]; edges: Graph /> - {selected ? : null} + {selected ? ( + + ) : null} )} diff --git a/ui/src/nodeInspector.test.ts b/ui/src/nodeInspector.test.ts index c9ca90d..2aae8e3 100644 --- a/ui/src/nodeInspector.test.ts +++ b/ui/src/nodeInspector.test.ts @@ -43,6 +43,18 @@ describe("factsFromExtra", () => { { key: "looks_idempotent_on_pk", label: "Idempotent on pk", value: "no" }, ]); }); + + it("does not repeat role chips as facts", () => { + const facts = factsFromExtra({ + generated: true, + inferred: true, + mutation: true, + fbv: true, + ninja: true, + method: "GET", + }); + expect(facts.map((f) => f.key)).toEqual(["method"]); + }); }); describe("inspectNode", () => { @@ -105,7 +117,6 @@ describe("inspectNode", () => { expect(info.facts.map((f) => `${f.label}: ${f.value}`)).toEqual([ "Extends: ModelViewSet", "Permissions: IsAuthenticated", - "App: billing", ]); expect(info.inputs).toEqual([ expect.objectContaining({ @@ -125,6 +136,21 @@ describe("inspectNode", () => { expect(info.roles).toEqual(["sink", "contract"]); }); + it("keeps app when it is not the bounded context", () => { + const info = inspectNode( + node({ + id: "django.view:billing.InvoiceViewSet", + type: "django.view", + name: "InvoiceViewSet", + context: "commerce", + extra: { app: "billing" }, + }), + [], + [], + ); + expect(info.facts).toEqual([{ key: "app", label: "App", value: "billing" }]); + }); + it("caps long neighbor lists", () => { const fieldEdges: GraphEdge[] = Array.from({ length: 20 }, (_, i) => ({ id: `f${i}`, diff --git a/ui/src/nodeInspector.ts b/ui/src/nodeInspector.ts index 4b8d72b..9c42ed0 100644 --- a/ui/src/nodeInspector.ts +++ b/ui/src/nodeInspector.ts @@ -198,6 +198,7 @@ const HIDDEN_EXTRA_KEYS = new Set([ ]); const ALWAYS_SHOW_FALSE = new Set(["looks_idempotent_on_pk"]); +const ROLE_FACT_KEYS = new Set(["inferred", "generated", "mutation", "fbv", "ninja"]); export type InspectorLink = { id: string; @@ -275,7 +276,7 @@ export function inspectNode( file: loc, context: node.context, roles, - facts: factsFromExtra(extra), + facts: factsFromExtra(extra).filter((fact) => !(fact.key === "app" && fact.value === node.context)), inputs, outputs, extraInputs: Math.max(0, incoming.length - LINK_LIMIT), @@ -305,7 +306,7 @@ export function factsFromExtra(extra: Record): InspectorFact[] const facts: InspectorFact[] = []; const seen = new Set(); for (const key of keys) { - if (seen.has(key) || HIDDEN_EXTRA_KEYS.has(key)) continue; + if (seen.has(key) || HIDDEN_EXTRA_KEYS.has(key) || ROLE_FACT_KEYS.has(key)) continue; seen.add(key); const formatted = formatFact(key, extra[key]); if (formatted == null) continue; diff --git a/ui/src/styles.css b/ui/src/styles.css index 72b3667..b1798bc 100644 --- a/ui/src/styles.css +++ b/ui/src/styles.css @@ -1533,6 +1533,20 @@ h2 { font-size: 13px; margin: 0; font-weight: 600; } color: var(--muted); white-space: nowrap; } +.inspector-close { + flex: 0 0 auto; + width: 22px; + height: 22px; + padding: 0; + border: 1px solid var(--line); + border-radius: var(--radius); + background: transparent; + color: var(--muted); + font-size: 16px; + line-height: 1; + cursor: pointer; +} +.inspector-close:hover { color: var(--ink); } .inspector-purpose { margin: 6px 0 8px; color: var(--ink); From 8c2a2514e02332bfe9ae9e3a82c5f925cb4e4881 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Sat, 15 Aug 2026 07:26:27 +0000 Subject: [PATCH 4/6] Rebuild the packaged UI on latest main. Co-authored-by: zord.lack.net --- ...CUJpCaK3.js => LayeredGraph3D-D0jeyZhs.js} | 2 +- src/loadpath/static/assets/index-B-0zenwG.js | 62 +++++++++++++++++++ ...{index-BSKSsotG.css => index-Mu6nhLaV.css} | 2 +- src/loadpath/static/assets/index-_7_dtN73.js | 62 ------------------- src/loadpath/static/index.html | 4 +- 5 files changed, 66 insertions(+), 66 deletions(-) rename src/loadpath/static/assets/{LayeredGraph3D-CUJpCaK3.js => LayeredGraph3D-D0jeyZhs.js} (99%) create mode 100644 src/loadpath/static/assets/index-B-0zenwG.js rename src/loadpath/static/assets/{index-BSKSsotG.css => index-Mu6nhLaV.css} (92%) delete mode 100644 src/loadpath/static/assets/index-_7_dtN73.js diff --git a/src/loadpath/static/assets/LayeredGraph3D-CUJpCaK3.js b/src/loadpath/static/assets/LayeredGraph3D-D0jeyZhs.js similarity index 99% rename from src/loadpath/static/assets/LayeredGraph3D-CUJpCaK3.js rename to src/loadpath/static/assets/LayeredGraph3D-D0jeyZhs.js index 808599f..f21b480 100644 --- a/src/loadpath/static/assets/LayeredGraph3D-CUJpCaK3.js +++ b/src/loadpath/static/assets/LayeredGraph3D-D0jeyZhs.js @@ -1,4 +1,4 @@ -import{r as bn,l as tc,c as nc,a as ic,L as sc,j as jn,t as rc}from"./index-_7_dtN73.js";/** +import{r as bn,l as tc,c as nc,a as ic,L as sc,j as jn,t as rc}from"./index-B-0zenwG.js";/** * @license * Copyright 2010-2026 Three.js Authors * SPDX-License-Identifier: MIT diff --git a/src/loadpath/static/assets/index-B-0zenwG.js b/src/loadpath/static/assets/index-B-0zenwG.js new file mode 100644 index 0000000..deb63ce --- /dev/null +++ b/src/loadpath/static/assets/index-B-0zenwG.js @@ -0,0 +1,62 @@ +(function(){const r=document.createElement("link").relList;if(r&&r.supports&&r.supports("modulepreload"))return;for(const a of document.querySelectorAll('link[rel="modulepreload"]'))l(a);new MutationObserver(a=>{for(const u of a)if(u.type==="childList")for(const d of u.addedNodes)d.tagName==="LINK"&&d.rel==="modulepreload"&&l(d)}).observe(document,{childList:!0,subtree:!0});function i(a){const u={};return a.integrity&&(u.integrity=a.integrity),a.referrerPolicy&&(u.referrerPolicy=a.referrerPolicy),a.crossOrigin==="use-credentials"?u.credentials="include":a.crossOrigin==="anonymous"?u.credentials="omit":u.credentials="same-origin",u}function l(a){if(a.ep)return;a.ep=!0;const u=i(a);fetch(a.href,u)}})();function vp(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var wu={exports:{}},oi={},_u={exports:{}},Pe={};/** + * @license React + * react.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var Hf;function G0(){if(Hf)return Pe;Hf=1;var t=Symbol.for("react.element"),r=Symbol.for("react.portal"),i=Symbol.for("react.fragment"),l=Symbol.for("react.strict_mode"),a=Symbol.for("react.profiler"),u=Symbol.for("react.provider"),d=Symbol.for("react.context"),f=Symbol.for("react.forward_ref"),p=Symbol.for("react.suspense"),y=Symbol.for("react.memo"),g=Symbol.for("react.lazy"),x=Symbol.iterator;function v(P){return P===null||typeof P!="object"?null:(P=x&&P[x]||P["@@iterator"],typeof P=="function"?P:null)}var _={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},S=Object.assign,C={};function E(P,T,ne){this.props=P,this.context=T,this.refs=C,this.updater=ne||_}E.prototype.isReactComponent={},E.prototype.setState=function(P,T){if(typeof P!="object"&&typeof P!="function"&&P!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,P,T,"setState")},E.prototype.forceUpdate=function(P){this.updater.enqueueForceUpdate(this,P,"forceUpdate")};function N(){}N.prototype=E.prototype;function b(P,T,ne){this.props=P,this.context=T,this.refs=C,this.updater=ne||_}var k=b.prototype=new N;k.constructor=b,S(k,E.prototype),k.isPureReactComponent=!0;var j=Array.isArray,R=Object.prototype.hasOwnProperty,D={current:null},H={key:!0,ref:!0,__self:!0,__source:!0};function X(P,T,ne){var re,ue={},ce=null,de=null;if(T!=null)for(re in T.ref!==void 0&&(de=T.ref),T.key!==void 0&&(ce=""+T.key),T)R.call(T,re)&&!H.hasOwnProperty(re)&&(ue[re]=T[re]);var Q=arguments.length-2;if(Q===1)ue.children=ne;else if(1>>1,T=A[P];if(0>>1;Pa(ue,F))cea(de,ue)?(A[P]=de,A[ce]=F,P=ce):(A[P]=ue,A[re]=F,P=re);else if(cea(de,F))A[P]=de,A[ce]=F,P=ce;else break e}}return z}function a(A,z){var F=A.sortIndex-z.sortIndex;return F!==0?F:A.id-z.id}if(typeof performance=="object"&&typeof performance.now=="function"){var u=performance;t.unstable_now=function(){return u.now()}}else{var d=Date,f=d.now();t.unstable_now=function(){return d.now()-f}}var p=[],y=[],g=1,x=null,v=3,_=!1,S=!1,C=!1,E=typeof setTimeout=="function"?setTimeout:null,N=typeof clearTimeout=="function"?clearTimeout:null,b=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function k(A){for(var z=i(y);z!==null;){if(z.callback===null)l(y);else if(z.startTime<=A)l(y),z.sortIndex=z.expirationTime,r(p,z);else break;z=i(y)}}function j(A){if(C=!1,k(A),!S)if(i(p)!==null)S=!0,B(R);else{var z=i(y);z!==null&&U(j,z.startTime-A)}}function R(A,z){S=!1,C&&(C=!1,N(X),X=-1),_=!0;var F=v;try{for(k(z),x=i(p);x!==null&&(!(x.expirationTime>z)||A&&!Z());){var P=x.callback;if(typeof P=="function"){x.callback=null,v=x.priorityLevel;var T=P(x.expirationTime<=z);z=t.unstable_now(),typeof T=="function"?x.callback=T:x===i(p)&&l(p),k(z)}else l(p);x=i(p)}if(x!==null)var ne=!0;else{var re=i(y);re!==null&&U(j,re.startTime-z),ne=!1}return ne}finally{x=null,v=F,_=!1}}var D=!1,H=null,X=-1,V=5,ee=-1;function Z(){return!(t.unstable_now()-eeA||125P?(A.sortIndex=F,r(y,A),i(p)===null&&A===i(y)&&(C?(N(X),X=-1):C=!0,U(j,F-P))):(A.sortIndex=T,r(p,A),S||_||(S=!0,B(R))),A},t.unstable_shouldYield=Z,t.unstable_wrapCallback=function(A){var z=v;return function(){var F=v;v=z;try{return A.apply(this,arguments)}finally{v=F}}}})(Eu)),Eu}var Yf;function J0(){return Yf||(Yf=1,ku.exports=Z0()),ku.exports}/** + * @license React + * react-dom.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var Xf;function ey(){if(Xf)return kt;Xf=1;var t=Si(),r=J0();function i(e){for(var n="https://reactjs.org/docs/error-decoder.html?invariant="+e,o=1;o"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),p=Object.prototype.hasOwnProperty,y=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,g={},x={};function v(e){return p.call(x,e)?!0:p.call(g,e)?!1:y.test(e)?x[e]=!0:(g[e]=!0,!1)}function _(e,n,o,s){if(o!==null&&o.type===0)return!1;switch(typeof n){case"function":case"symbol":return!0;case"boolean":return s?!1:o!==null?!o.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function S(e,n,o,s){if(n===null||typeof n>"u"||_(e,n,o,s))return!0;if(s)return!1;if(o!==null)switch(o.type){case 3:return!n;case 4:return n===!1;case 5:return isNaN(n);case 6:return isNaN(n)||1>n}return!1}function C(e,n,o,s,c,h,w){this.acceptsBooleans=n===2||n===3||n===4,this.attributeName=s,this.attributeNamespace=c,this.mustUseProperty=o,this.propertyName=e,this.type=n,this.sanitizeURL=h,this.removeEmptyString=w}var E={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){E[e]=new C(e,0,!1,e,null,!1,!1)}),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var n=e[0];E[n]=new C(n,1,!1,e[1],null,!1,!1)}),["contentEditable","draggable","spellCheck","value"].forEach(function(e){E[e]=new C(e,2,!1,e.toLowerCase(),null,!1,!1)}),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){E[e]=new C(e,2,!1,e,null,!1,!1)}),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){E[e]=new C(e,3,!1,e.toLowerCase(),null,!1,!1)}),["checked","multiple","muted","selected"].forEach(function(e){E[e]=new C(e,3,!0,e,null,!1,!1)}),["capture","download"].forEach(function(e){E[e]=new C(e,4,!1,e,null,!1,!1)}),["cols","rows","size","span"].forEach(function(e){E[e]=new C(e,6,!1,e,null,!1,!1)}),["rowSpan","start"].forEach(function(e){E[e]=new C(e,5,!1,e.toLowerCase(),null,!1,!1)});var N=/[\-:]([a-z])/g;function b(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var n=e.replace(N,b);E[n]=new C(n,1,!1,e,null,!1,!1)}),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var n=e.replace(N,b);E[n]=new C(n,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)}),["xml:base","xml:lang","xml:space"].forEach(function(e){var n=e.replace(N,b);E[n]=new C(n,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)}),["tabIndex","crossOrigin"].forEach(function(e){E[e]=new C(e,1,!1,e.toLowerCase(),null,!1,!1)}),E.xlinkHref=new C("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach(function(e){E[e]=new C(e,1,!1,e.toLowerCase(),null,!0,!0)});function k(e,n,o,s){var c=E.hasOwnProperty(n)?E[n]:null;(c!==null?c.type!==0:s||!(2I||c[w]!==h[I]){var L=` +`+c[w].replace(" at new "," at ");return e.displayName&&L.includes("")&&(L=L.replace("",e.displayName)),L}while(1<=w&&0<=I);break}}}finally{ne=!1,Error.prepareStackTrace=o}return(e=e?e.displayName||e.name:"")?T(e):""}function ue(e){switch(e.tag){case 5:return T(e.type);case 16:return T("Lazy");case 13:return T("Suspense");case 19:return T("SuspenseList");case 0:case 2:case 15:return e=re(e.type,!1),e;case 11:return e=re(e.type.render,!1),e;case 1:return e=re(e.type,!0),e;default:return""}}function ce(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case H:return"Fragment";case D:return"Portal";case V:return"Profiler";case X:return"StrictMode";case J:return"Suspense";case M:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case Z:return(e.displayName||"Context")+".Consumer";case ee:return(e._context.displayName||"Context")+".Provider";case te:var n=e.render;return e=e.displayName,e||(e=n.displayName||n.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case W:return n=e.displayName||null,n!==null?n:ce(e.type)||"Memo";case B:n=e._payload,e=e._init;try{return ce(e(n))}catch{}}return null}function de(e){var n=e.type;switch(e.tag){case 24:return"Cache";case 9:return(n.displayName||"Context")+".Consumer";case 10:return(n._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=n.render,e=e.displayName||e.name||"",n.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return n;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return ce(n);case 8:return n===X?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof n=="function")return n.displayName||n.name||null;if(typeof n=="string")return n}return null}function Q(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function se(e){var n=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(n==="checkbox"||n==="radio")}function fe(e){var n=se(e)?"checked":"value",o=Object.getOwnPropertyDescriptor(e.constructor.prototype,n),s=""+e[n];if(!e.hasOwnProperty(n)&&typeof o<"u"&&typeof o.get=="function"&&typeof o.set=="function"){var c=o.get,h=o.set;return Object.defineProperty(e,n,{configurable:!0,get:function(){return c.call(this)},set:function(w){s=""+w,h.call(this,w)}}),Object.defineProperty(e,n,{enumerable:o.enumerable}),{getValue:function(){return s},setValue:function(w){s=""+w},stopTracking:function(){e._valueTracker=null,delete e[n]}}}}function me(e){e._valueTracker||(e._valueTracker=fe(e))}function xe(e){if(!e)return!1;var n=e._valueTracker;if(!n)return!0;var o=n.getValue(),s="";return e&&(s=se(e)?e.checked?"true":"false":e.value),e=s,e!==o?(n.setValue(e),!0):!1}function pe(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function Ce(e,n){var o=n.checked;return F({},n,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:o??e._wrapperState.initialChecked})}function je(e,n){var o=n.defaultValue==null?"":n.defaultValue,s=n.checked!=null?n.checked:n.defaultChecked;o=Q(n.value!=null?n.value:o),e._wrapperState={initialChecked:s,initialValue:o,controlled:n.type==="checkbox"||n.type==="radio"?n.checked!=null:n.value!=null}}function Me(e,n){n=n.checked,n!=null&&k(e,"checked",n,!1)}function Re(e,n){Me(e,n);var o=Q(n.value),s=n.type;if(o!=null)s==="number"?(o===0&&e.value===""||e.value!=o)&&(e.value=""+o):e.value!==""+o&&(e.value=""+o);else if(s==="submit"||s==="reset"){e.removeAttribute("value");return}n.hasOwnProperty("value")?rt(e,n.type,o):n.hasOwnProperty("defaultValue")&&rt(e,n.type,Q(n.defaultValue)),n.checked==null&&n.defaultChecked!=null&&(e.defaultChecked=!!n.defaultChecked)}function Xe(e,n,o){if(n.hasOwnProperty("value")||n.hasOwnProperty("defaultValue")){var s=n.type;if(!(s!=="submit"&&s!=="reset"||n.value!==void 0&&n.value!==null))return;n=""+e._wrapperState.initialValue,o||n===e.value||(e.value=n),e.defaultValue=n}o=e.name,o!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,o!==""&&(e.name=o)}function rt(e,n,o){(n!=="number"||pe(e.ownerDocument)!==e)&&(o==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+o&&(e.defaultValue=""+o))}var Ze=Array.isArray;function Je(e,n,o,s){if(e=e.options,n){n={};for(var c=0;c"+n.valueOf().toString()+"",n=pt.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;n.firstChild;)e.appendChild(n.firstChild)}});function Ut(e,n){if(n){var o=e.firstChild;if(o&&o===e.lastChild&&o.nodeType===3){o.nodeValue=n;return}}e.textContent=n}var hn={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},Ir=["Webkit","ms","Moz","O"];Object.keys(hn).forEach(function(e){Ir.forEach(function(n){n=n+e.charAt(0).toUpperCase()+e.substring(1),hn[n]=hn[e]})});function er(e,n,o){return n==null||typeof n=="boolean"||n===""?"":o||typeof n!="number"||n===0||hn.hasOwnProperty(e)&&hn[e]?(""+n).trim():n+"px"}function tr(e,n){e=e.style;for(var o in n)if(n.hasOwnProperty(o)){var s=o.indexOf("--")===0,c=er(o,n[o],s);o==="float"&&(o="cssFloat"),s?e.setProperty(o,c):e[o]=c}}var br=F({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function jn(e,n){if(n){if(br[e]&&(n.children!=null||n.dangerouslySetInnerHTML!=null))throw Error(i(137,e));if(n.dangerouslySetInnerHTML!=null){if(n.children!=null)throw Error(i(60));if(typeof n.dangerouslySetInnerHTML!="object"||!("__html"in n.dangerouslySetInnerHTML))throw Error(i(61))}if(n.style!=null&&typeof n.style!="object")throw Error(i(62))}}function Mn(e,n){if(e.indexOf("-")===-1)return typeof n.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var Pn=null;function q(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var ye=null,Le=null,Nt=null;function Ct(e){if(e=Vo(e)){if(typeof ye!="function")throw Error(i(280));var n=e.stateNode;n&&(n=os(n),ye(e.stateNode,e.type,n))}}function Pi(e){Le?Nt?Nt.push(e):Nt=[e]:Le=e}function Ii(){if(Le){var e=Le,n=Nt;if(Nt=Le=null,Ct(e),n)for(e=0;e>>=0,e===0?32:31-(Ol(e)/Fl|0)|0}var Ar=64,Dr=4194304;function ir(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function pn(e,n){var o=e.pendingLanes;if(o===0)return 0;var s=0,c=e.suspendedLanes,h=e.pingedLanes,w=o&268435455;if(w!==0){var I=w&~c;I!==0?s=ir(I):(h&=w,h!==0&&(s=ir(h)))}else w=o&~c,w!==0?s=ir(w):h!==0&&(s=ir(h));if(s===0)return 0;if(n!==0&&n!==s&&(n&c)===0&&(c=s&-s,h=n&-n,c>=h||c===16&&(h&4194240)!==0))return n;if((s&4)!==0&&(s|=o&16),n=e.entangledLanes,n!==0)for(e=e.entanglements,n&=s;0o;o++)n.push(e);return n}function lr(e,n,o){e.pendingLanes|=n,n!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,n=31-Mt(n),e[n]=o}function Vl(e,n){var o=e.pendingLanes&~n;e.pendingLanes=n,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=n,e.mutableReadLanes&=n,e.entangledLanes&=n,n=e.entanglements;var s=e.eventTimes;for(e=e.expirationTimes;0=Lo),Rc=" ",Lc=!1;function zc(e,n){switch(e){case"keyup":return Vg.indexOf(n.keyCode)!==-1;case"keydown":return n.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Ac(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var Hr=!1;function Wg(e,n){switch(e){case"compositionend":return Ac(n);case"keypress":return n.which!==32?null:(Lc=!0,Rc);case"textInput":return e=n.data,e===Rc&&Lc?null:e;default:return null}}function Yg(e,n){if(Hr)return e==="compositionend"||!ea&&zc(e,n)?(e=jc(),Xi=Gl=Ln=null,Hr=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(n.ctrlKey||n.altKey||n.metaKey)||n.ctrlKey&&n.altKey){if(n.char&&1=n)return{node:o,offset:n-e};e=s}e:{for(;o;){if(o.nextSibling){o=o.nextSibling;break e}o=o.parentNode}o=void 0}o=Vc(o)}}function Wc(e,n){return e&&n?e===n?!0:e&&e.nodeType===3?!1:n&&n.nodeType===3?Wc(e,n.parentNode):"contains"in e?e.contains(n):e.compareDocumentPosition?!!(e.compareDocumentPosition(n)&16):!1:!1}function Yc(){for(var e=window,n=pe();n instanceof e.HTMLIFrameElement;){try{var o=typeof n.contentWindow.location.href=="string"}catch{o=!1}if(o)e=n.contentWindow;else break;n=pe(e.document)}return n}function ra(e){var n=e&&e.nodeName&&e.nodeName.toLowerCase();return n&&(n==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||n==="textarea"||e.contentEditable==="true")}function t0(e){var n=Yc(),o=e.focusedElem,s=e.selectionRange;if(n!==o&&o&&o.ownerDocument&&Wc(o.ownerDocument.documentElement,o)){if(s!==null&&ra(o)){if(n=s.start,e=s.end,e===void 0&&(e=n),"selectionStart"in o)o.selectionStart=n,o.selectionEnd=Math.min(e,o.value.length);else if(e=(n=o.ownerDocument||document)&&n.defaultView||window,e.getSelection){e=e.getSelection();var c=o.textContent.length,h=Math.min(s.start,c);s=s.end===void 0?h:Math.min(s.end,c),!e.extend&&h>s&&(c=s,s=h,h=c),c=Uc(o,h);var w=Uc(o,s);c&&w&&(e.rangeCount!==1||e.anchorNode!==c.node||e.anchorOffset!==c.offset||e.focusNode!==w.node||e.focusOffset!==w.offset)&&(n=n.createRange(),n.setStart(c.node,c.offset),e.removeAllRanges(),h>s?(e.addRange(n),e.extend(w.node,w.offset)):(n.setEnd(w.node,w.offset),e.addRange(n)))}}for(n=[],e=o;e=e.parentNode;)e.nodeType===1&&n.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof o.focus=="function"&&o.focus(),o=0;o=document.documentMode,Br=null,oa=null,$o=null,ia=!1;function Xc(e,n,o){var s=o.window===o?o.document:o.nodeType===9?o:o.ownerDocument;ia||Br==null||Br!==pe(s)||(s=Br,"selectionStart"in s&&ra(s)?s={start:s.selectionStart,end:s.selectionEnd}:(s=(s.ownerDocument&&s.ownerDocument.defaultView||window).getSelection(),s={anchorNode:s.anchorNode,anchorOffset:s.anchorOffset,focusNode:s.focusNode,focusOffset:s.focusOffset}),$o&&Do($o,s)||($o=s,s=ts(oa,"onSelect"),0Xr||(e.current=ya[Xr],ya[Xr]=null,Xr--)}function Ae(e,n){Xr++,ya[Xr]=e.current,e.current=n}var $n={},at=Dn($n),vt=Dn(!1),ur=$n;function Gr(e,n){var o=e.type.contextTypes;if(!o)return $n;var s=e.stateNode;if(s&&s.__reactInternalMemoizedUnmaskedChildContext===n)return s.__reactInternalMemoizedMaskedChildContext;var c={},h;for(h in o)c[h]=n[h];return s&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=n,e.__reactInternalMemoizedMaskedChildContext=c),c}function xt(e){return e=e.childContextTypes,e!=null}function is(){$e(vt),$e(at)}function ad(e,n,o){if(at.current!==$n)throw Error(i(168));Ae(at,n),Ae(vt,o)}function ud(e,n,o){var s=e.stateNode;if(n=n.childContextTypes,typeof s.getChildContext!="function")return o;s=s.getChildContext();for(var c in s)if(!(c in n))throw Error(i(108,de(e)||"Unknown",c));return F({},o,s)}function ss(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||$n,ur=at.current,Ae(at,e),Ae(vt,vt.current),!0}function cd(e,n,o){var s=e.stateNode;if(!s)throw Error(i(169));o?(e=ud(e,n,ur),s.__reactInternalMemoizedMergedChildContext=e,$e(vt),$e(at),Ae(at,e)):$e(vt),Ae(vt,o)}var gn=null,ls=!1,va=!1;function dd(e){gn===null?gn=[e]:gn.push(e)}function h0(e){ls=!0,dd(e)}function On(){if(!va&&gn!==null){va=!0;var e=0,n=ze;try{var o=gn;for(ze=1;e>=w,c-=w,yn=1<<32-Mt(n)+c|o<Ne?(nt=Ee,Ee=null):nt=Ee.sibling;var Te=oe(Y,Ee,G[Ne],ae);if(Te===null){Ee===null&&(Ee=nt);break}e&&Ee&&Te.alternate===null&&n(Y,Ee),$=h(Te,$,Ne),ke===null?_e=Te:ke.sibling=Te,ke=Te,Ee=nt}if(Ne===G.length)return o(Y,Ee),Fe&&dr(Y,Ne),_e;if(Ee===null){for(;NeNe?(nt=Ee,Ee=null):nt=Ee.sibling;var Gn=oe(Y,Ee,Te.value,ae);if(Gn===null){Ee===null&&(Ee=nt);break}e&&Ee&&Gn.alternate===null&&n(Y,Ee),$=h(Gn,$,Ne),ke===null?_e=Gn:ke.sibling=Gn,ke=Gn,Ee=nt}if(Te.done)return o(Y,Ee),Fe&&dr(Y,Ne),_e;if(Ee===null){for(;!Te.done;Ne++,Te=G.next())Te=le(Y,Te.value,ae),Te!==null&&($=h(Te,$,Ne),ke===null?_e=Te:ke.sibling=Te,ke=Te);return Fe&&dr(Y,Ne),_e}for(Ee=s(Y,Ee);!Te.done;Ne++,Te=G.next())Te=he(Ee,Y,Ne,Te.value,ae),Te!==null&&(e&&Te.alternate!==null&&Ee.delete(Te.key===null?Ne:Te.key),$=h(Te,$,Ne),ke===null?_e=Te:ke.sibling=Te,ke=Te);return e&&Ee.forEach(function(X0){return n(Y,X0)}),Fe&&dr(Y,Ne),_e}function Ye(Y,$,G,ae){if(typeof G=="object"&&G!==null&&G.type===H&&G.key===null&&(G=G.props.children),typeof G=="object"&&G!==null){switch(G.$$typeof){case R:e:{for(var _e=G.key,ke=$;ke!==null;){if(ke.key===_e){if(_e=G.type,_e===H){if(ke.tag===7){o(Y,ke.sibling),$=c(ke,G.props.children),$.return=Y,Y=$;break e}}else if(ke.elementType===_e||typeof _e=="object"&&_e!==null&&_e.$$typeof===B&&yd(_e)===ke.type){o(Y,ke.sibling),$=c(ke,G.props),$.ref=Uo(Y,ke,G),$.return=Y,Y=$;break e}o(Y,ke);break}else n(Y,ke);ke=ke.sibling}G.type===H?($=xr(G.props.children,Y.mode,ae,G.key),$.return=Y,Y=$):(ae=zs(G.type,G.key,G.props,null,Y.mode,ae),ae.ref=Uo(Y,$,G),ae.return=Y,Y=ae)}return w(Y);case D:e:{for(ke=G.key;$!==null;){if($.key===ke)if($.tag===4&&$.stateNode.containerInfo===G.containerInfo&&$.stateNode.implementation===G.implementation){o(Y,$.sibling),$=c($,G.children||[]),$.return=Y,Y=$;break e}else{o(Y,$);break}else n(Y,$);$=$.sibling}$=mu(G,Y.mode,ae),$.return=Y,Y=$}return w(Y);case B:return ke=G._init,Ye(Y,$,ke(G._payload),ae)}if(Ze(G))return ve(Y,$,G,ae);if(z(G))return we(Y,$,G,ae);ds(Y,G)}return typeof G=="string"&&G!==""||typeof G=="number"?(G=""+G,$!==null&&$.tag===6?(o(Y,$.sibling),$=c($,G),$.return=Y,Y=$):(o(Y,$),$=pu(G,Y.mode,ae),$.return=Y,Y=$),w(Y)):o(Y,$)}return Ye}var Zr=vd(!0),xd=vd(!1),fs=Dn(null),hs=null,Jr=null,Ea=null;function Na(){Ea=Jr=hs=null}function Ca(e){var n=fs.current;$e(fs),e._currentValue=n}function ja(e,n,o){for(;e!==null;){var s=e.alternate;if((e.childLanes&n)!==n?(e.childLanes|=n,s!==null&&(s.childLanes|=n)):s!==null&&(s.childLanes&n)!==n&&(s.childLanes|=n),e===o)break;e=e.return}}function eo(e,n){hs=e,Ea=Jr=null,e=e.dependencies,e!==null&&e.firstContext!==null&&((e.lanes&n)!==0&&(wt=!0),e.firstContext=null)}function Ot(e){var n=e._currentValue;if(Ea!==e)if(e={context:e,memoizedValue:n,next:null},Jr===null){if(hs===null)throw Error(i(308));Jr=e,hs.dependencies={lanes:0,firstContext:e}}else Jr=Jr.next=e;return n}var fr=null;function Ma(e){fr===null?fr=[e]:fr.push(e)}function wd(e,n,o,s){var c=n.interleaved;return c===null?(o.next=o,Ma(n)):(o.next=c.next,c.next=o),n.interleaved=o,xn(e,s)}function xn(e,n){e.lanes|=n;var o=e.alternate;for(o!==null&&(o.lanes|=n),o=e,e=e.return;e!==null;)e.childLanes|=n,o=e.alternate,o!==null&&(o.childLanes|=n),o=e,e=e.return;return o.tag===3?o.stateNode:null}var Fn=!1;function Pa(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function _d(e,n){e=e.updateQueue,n.updateQueue===e&&(n.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function wn(e,n){return{eventTime:e,lane:n,tag:0,payload:null,callback:null,next:null}}function Hn(e,n,o){var s=e.updateQueue;if(s===null)return null;if(s=s.shared,(Ie&2)!==0){var c=s.pending;return c===null?n.next=n:(n.next=c.next,c.next=n),s.pending=n,xn(e,o)}return c=s.interleaved,c===null?(n.next=n,Ma(s)):(n.next=c.next,c.next=n),s.interleaved=n,xn(e,o)}function ps(e,n,o){if(n=n.updateQueue,n!==null&&(n=n.shared,(o&4194240)!==0)){var s=n.lanes;s&=e.pendingLanes,o|=s,n.lanes=o,$r(e,o)}}function Sd(e,n){var o=e.updateQueue,s=e.alternate;if(s!==null&&(s=s.updateQueue,o===s)){var c=null,h=null;if(o=o.firstBaseUpdate,o!==null){do{var w={eventTime:o.eventTime,lane:o.lane,tag:o.tag,payload:o.payload,callback:o.callback,next:null};h===null?c=h=w:h=h.next=w,o=o.next}while(o!==null);h===null?c=h=n:h=h.next=n}else c=h=n;o={baseState:s.baseState,firstBaseUpdate:c,lastBaseUpdate:h,shared:s.shared,effects:s.effects},e.updateQueue=o;return}e=o.lastBaseUpdate,e===null?o.firstBaseUpdate=n:e.next=n,o.lastBaseUpdate=n}function ms(e,n,o,s){var c=e.updateQueue;Fn=!1;var h=c.firstBaseUpdate,w=c.lastBaseUpdate,I=c.shared.pending;if(I!==null){c.shared.pending=null;var L=I,K=L.next;L.next=null,w===null?h=K:w.next=K,w=L;var ie=e.alternate;ie!==null&&(ie=ie.updateQueue,I=ie.lastBaseUpdate,I!==w&&(I===null?ie.firstBaseUpdate=K:I.next=K,ie.lastBaseUpdate=L))}if(h!==null){var le=c.baseState;w=0,ie=K=L=null,I=h;do{var oe=I.lane,he=I.eventTime;if((s&oe)===oe){ie!==null&&(ie=ie.next={eventTime:he,lane:0,tag:I.tag,payload:I.payload,callback:I.callback,next:null});e:{var ve=e,we=I;switch(oe=n,he=o,we.tag){case 1:if(ve=we.payload,typeof ve=="function"){le=ve.call(he,le,oe);break e}le=ve;break e;case 3:ve.flags=ve.flags&-65537|128;case 0:if(ve=we.payload,oe=typeof ve=="function"?ve.call(he,le,oe):ve,oe==null)break e;le=F({},le,oe);break e;case 2:Fn=!0}}I.callback!==null&&I.lane!==0&&(e.flags|=64,oe=c.effects,oe===null?c.effects=[I]:oe.push(I))}else he={eventTime:he,lane:oe,tag:I.tag,payload:I.payload,callback:I.callback,next:null},ie===null?(K=ie=he,L=le):ie=ie.next=he,w|=oe;if(I=I.next,I===null){if(I=c.shared.pending,I===null)break;oe=I,I=oe.next,oe.next=null,c.lastBaseUpdate=oe,c.shared.pending=null}}while(!0);if(ie===null&&(L=le),c.baseState=L,c.firstBaseUpdate=K,c.lastBaseUpdate=ie,n=c.shared.interleaved,n!==null){c=n;do w|=c.lane,c=c.next;while(c!==n)}else h===null&&(c.shared.lanes=0);mr|=w,e.lanes=w,e.memoizedState=le}}function kd(e,n,o){if(e=n.effects,n.effects=null,e!==null)for(n=0;no?o:4,e(!0);var s=La.transition;La.transition={};try{e(!1),n()}finally{ze=o,La.transition=s}}function Bd(){return Ft().memoizedState}function y0(e,n,o){var s=Wn(e);if(o={lane:s,action:o,hasEagerState:!1,eagerState:null,next:null},Vd(e))Ud(n,o);else if(o=wd(e,n,o,s),o!==null){var c=gt();qt(o,e,s,c),Wd(o,n,s)}}function v0(e,n,o){var s=Wn(e),c={lane:s,action:o,hasEagerState:!1,eagerState:null,next:null};if(Vd(e))Ud(n,c);else{var h=e.alternate;if(e.lanes===0&&(h===null||h.lanes===0)&&(h=n.lastRenderedReducer,h!==null))try{var w=n.lastRenderedState,I=h(w,o);if(c.hasEagerState=!0,c.eagerState=I,Wt(I,w)){var L=n.interleaved;L===null?(c.next=c,Ma(n)):(c.next=L.next,L.next=c),n.interleaved=c;return}}catch{}finally{}o=wd(e,n,c,s),o!==null&&(c=gt(),qt(o,e,s,c),Wd(o,n,s))}}function Vd(e){var n=e.alternate;return e===Ve||n!==null&&n===Ve}function Ud(e,n){Go=vs=!0;var o=e.pending;o===null?n.next=n:(n.next=o.next,o.next=n),e.pending=n}function Wd(e,n,o){if((o&4194240)!==0){var s=n.lanes;s&=e.pendingLanes,o|=s,n.lanes=o,$r(e,o)}}var _s={readContext:Ot,useCallback:ut,useContext:ut,useEffect:ut,useImperativeHandle:ut,useInsertionEffect:ut,useLayoutEffect:ut,useMemo:ut,useReducer:ut,useRef:ut,useState:ut,useDebugValue:ut,useDeferredValue:ut,useTransition:ut,useMutableSource:ut,useSyncExternalStore:ut,useId:ut,unstable_isNewReconciler:!1},x0={readContext:Ot,useCallback:function(e,n){return an().memoizedState=[e,n===void 0?null:n],e},useContext:Ot,useEffect:Ld,useImperativeHandle:function(e,n,o){return o=o!=null?o.concat([e]):null,xs(4194308,4,Dd.bind(null,n,e),o)},useLayoutEffect:function(e,n){return xs(4194308,4,e,n)},useInsertionEffect:function(e,n){return xs(4,2,e,n)},useMemo:function(e,n){var o=an();return n=n===void 0?null:n,e=e(),o.memoizedState=[e,n],e},useReducer:function(e,n,o){var s=an();return n=o!==void 0?o(n):n,s.memoizedState=s.baseState=n,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:n},s.queue=e,e=e.dispatch=y0.bind(null,Ve,e),[s.memoizedState,e]},useRef:function(e){var n=an();return e={current:e},n.memoizedState=e},useState:Td,useDebugValue:Ha,useDeferredValue:function(e){return an().memoizedState=e},useTransition:function(){var e=Td(!1),n=e[0];return e=g0.bind(null,e[1]),an().memoizedState=e,[n,e]},useMutableSource:function(){},useSyncExternalStore:function(e,n,o){var s=Ve,c=an();if(Fe){if(o===void 0)throw Error(i(407));o=o()}else{if(o=n(),tt===null)throw Error(i(349));(pr&30)!==0||jd(s,n,o)}c.memoizedState=o;var h={value:o,getSnapshot:n};return c.queue=h,Ld(Pd.bind(null,s,h,e),[e]),s.flags|=2048,Ko(9,Md.bind(null,s,h,o,n),void 0,null),o},useId:function(){var e=an(),n=tt.identifierPrefix;if(Fe){var o=vn,s=yn;o=(s&~(1<<32-Mt(s)-1)).toString(32)+o,n=":"+n+"R"+o,o=Qo++,0<\/script>",e=e.removeChild(e.firstChild)):typeof s.is=="string"?e=w.createElement(o,{is:s.is}):(e=w.createElement(o),o==="select"&&(w=e,s.multiple?w.multiple=!0:s.size&&(w.size=s.size))):e=w.createElementNS(e,o),e[sn]=n,e[Bo]=s,ff(e,n,!1,!1),n.stateNode=e;e:{switch(w=Mn(o,s),o){case"dialog":De("cancel",e),De("close",e),c=s;break;case"iframe":case"object":case"embed":De("load",e),c=s;break;case"video":case"audio":for(c=0;cio&&(n.flags|=128,s=!0,Zo(h,!1),n.lanes=4194304)}else{if(!s)if(e=gs(w),e!==null){if(n.flags|=128,s=!0,o=e.updateQueue,o!==null&&(n.updateQueue=o,n.flags|=4),Zo(h,!0),h.tail===null&&h.tailMode==="hidden"&&!w.alternate&&!Fe)return ct(n),null}else 2*He()-h.renderingStartTime>io&&o!==1073741824&&(n.flags|=128,s=!0,Zo(h,!1),n.lanes=4194304);h.isBackwards?(w.sibling=n.child,n.child=w):(o=h.last,o!==null?o.sibling=w:n.child=w,h.last=w)}return h.tail!==null?(n=h.tail,h.rendering=n,h.tail=n.sibling,h.renderingStartTime=He(),n.sibling=null,o=Be.current,Ae(Be,s?o&1|2:o&1),n):(ct(n),null);case 22:case 23:return du(),s=n.memoizedState!==null,e!==null&&e.memoizedState!==null!==s&&(n.flags|=8192),s&&(n.mode&1)!==0?(Tt&1073741824)!==0&&(ct(n),n.subtreeFlags&6&&(n.flags|=8192)):ct(n),null;case 24:return null;case 25:return null}throw Error(i(156,n.tag))}function j0(e,n){switch(wa(n),n.tag){case 1:return xt(n.type)&&is(),e=n.flags,e&65536?(n.flags=e&-65537|128,n):null;case 3:return to(),$e(vt),$e(at),Ra(),e=n.flags,(e&65536)!==0&&(e&128)===0?(n.flags=e&-65537|128,n):null;case 5:return ba(n),null;case 13:if($e(Be),e=n.memoizedState,e!==null&&e.dehydrated!==null){if(n.alternate===null)throw Error(i(340));Kr()}return e=n.flags,e&65536?(n.flags=e&-65537|128,n):null;case 19:return $e(Be),null;case 4:return to(),null;case 10:return Ca(n.type._context),null;case 22:case 23:return du(),null;case 24:return null;default:return null}}var Ns=!1,dt=!1,M0=typeof WeakSet=="function"?WeakSet:Set,ge=null;function ro(e,n){var o=e.ref;if(o!==null)if(typeof o=="function")try{o(null)}catch(s){We(e,n,s)}else o.current=null}function Ja(e,n,o){try{o()}catch(s){We(e,n,s)}}var mf=!1;function P0(e,n){if(da=Wi,e=Yc(),ra(e)){if("selectionStart"in e)var o={start:e.selectionStart,end:e.selectionEnd};else e:{o=(o=e.ownerDocument)&&o.defaultView||window;var s=o.getSelection&&o.getSelection();if(s&&s.rangeCount!==0){o=s.anchorNode;var c=s.anchorOffset,h=s.focusNode;s=s.focusOffset;try{o.nodeType,h.nodeType}catch{o=null;break e}var w=0,I=-1,L=-1,K=0,ie=0,le=e,oe=null;t:for(;;){for(var he;le!==o||c!==0&&le.nodeType!==3||(I=w+c),le!==h||s!==0&&le.nodeType!==3||(L=w+s),le.nodeType===3&&(w+=le.nodeValue.length),(he=le.firstChild)!==null;)oe=le,le=he;for(;;){if(le===e)break t;if(oe===o&&++K===c&&(I=w),oe===h&&++ie===s&&(L=w),(he=le.nextSibling)!==null)break;le=oe,oe=le.parentNode}le=he}o=I===-1||L===-1?null:{start:I,end:L}}else o=null}o=o||{start:0,end:0}}else o=null;for(fa={focusedElem:e,selectionRange:o},Wi=!1,ge=n;ge!==null;)if(n=ge,e=n.child,(n.subtreeFlags&1028)!==0&&e!==null)e.return=n,ge=e;else for(;ge!==null;){n=ge;try{var ve=n.alternate;if((n.flags&1024)!==0)switch(n.tag){case 0:case 11:case 15:break;case 1:if(ve!==null){var we=ve.memoizedProps,Ye=ve.memoizedState,Y=n.stateNode,$=Y.getSnapshotBeforeUpdate(n.elementType===n.type?we:Xt(n.type,we),Ye);Y.__reactInternalSnapshotBeforeUpdate=$}break;case 3:var G=n.stateNode.containerInfo;G.nodeType===1?G.textContent="":G.nodeType===9&&G.documentElement&&G.removeChild(G.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(i(163))}}catch(ae){We(n,n.return,ae)}if(e=n.sibling,e!==null){e.return=n.return,ge=e;break}ge=n.return}return ve=mf,mf=!1,ve}function Jo(e,n,o){var s=n.updateQueue;if(s=s!==null?s.lastEffect:null,s!==null){var c=s=s.next;do{if((c.tag&e)===e){var h=c.destroy;c.destroy=void 0,h!==void 0&&Ja(n,o,h)}c=c.next}while(c!==s)}}function Cs(e,n){if(n=n.updateQueue,n=n!==null?n.lastEffect:null,n!==null){var o=n=n.next;do{if((o.tag&e)===e){var s=o.create;o.destroy=s()}o=o.next}while(o!==n)}}function eu(e){var n=e.ref;if(n!==null){var o=e.stateNode;switch(e.tag){case 5:e=o;break;default:e=o}typeof n=="function"?n(e):n.current=e}}function gf(e){var n=e.alternate;n!==null&&(e.alternate=null,gf(n)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(n=e.stateNode,n!==null&&(delete n[sn],delete n[Bo],delete n[ga],delete n[d0],delete n[f0])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function yf(e){return e.tag===5||e.tag===3||e.tag===4}function vf(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||yf(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function tu(e,n,o){var s=e.tag;if(s===5||s===6)e=e.stateNode,n?o.nodeType===8?o.parentNode.insertBefore(e,n):o.insertBefore(e,n):(o.nodeType===8?(n=o.parentNode,n.insertBefore(e,o)):(n=o,n.appendChild(e)),o=o._reactRootContainer,o!=null||n.onclick!==null||(n.onclick=rs));else if(s!==4&&(e=e.child,e!==null))for(tu(e,n,o),e=e.sibling;e!==null;)tu(e,n,o),e=e.sibling}function nu(e,n,o){var s=e.tag;if(s===5||s===6)e=e.stateNode,n?o.insertBefore(e,n):o.appendChild(e);else if(s!==4&&(e=e.child,e!==null))for(nu(e,n,o),e=e.sibling;e!==null;)nu(e,n,o),e=e.sibling}var it=null,Gt=!1;function Bn(e,n,o){for(o=o.child;o!==null;)xf(e,n,o),o=o.sibling}function xf(e,n,o){if(jt&&typeof jt.onCommitFiberUnmount=="function")try{jt.onCommitFiberUnmount(zr,o)}catch{}switch(o.tag){case 5:dt||ro(o,n);case 6:var s=it,c=Gt;it=null,Bn(e,n,o),it=s,Gt=c,it!==null&&(Gt?(e=it,o=o.stateNode,e.nodeType===8?e.parentNode.removeChild(o):e.removeChild(o)):it.removeChild(o.stateNode));break;case 18:it!==null&&(Gt?(e=it,o=o.stateNode,e.nodeType===8?ma(e.parentNode,o):e.nodeType===1&&ma(e,o),bo(e)):ma(it,o.stateNode));break;case 4:s=it,c=Gt,it=o.stateNode.containerInfo,Gt=!0,Bn(e,n,o),it=s,Gt=c;break;case 0:case 11:case 14:case 15:if(!dt&&(s=o.updateQueue,s!==null&&(s=s.lastEffect,s!==null))){c=s=s.next;do{var h=c,w=h.destroy;h=h.tag,w!==void 0&&((h&2)!==0||(h&4)!==0)&&Ja(o,n,w),c=c.next}while(c!==s)}Bn(e,n,o);break;case 1:if(!dt&&(ro(o,n),s=o.stateNode,typeof s.componentWillUnmount=="function"))try{s.props=o.memoizedProps,s.state=o.memoizedState,s.componentWillUnmount()}catch(I){We(o,n,I)}Bn(e,n,o);break;case 21:Bn(e,n,o);break;case 22:o.mode&1?(dt=(s=dt)||o.memoizedState!==null,Bn(e,n,o),dt=s):Bn(e,n,o);break;default:Bn(e,n,o)}}function wf(e){var n=e.updateQueue;if(n!==null){e.updateQueue=null;var o=e.stateNode;o===null&&(o=e.stateNode=new M0),n.forEach(function(s){var c=$0.bind(null,e,s);o.has(s)||(o.add(s),s.then(c,c))})}}function Qt(e,n){var o=n.deletions;if(o!==null)for(var s=0;sc&&(c=w),s&=~h}if(s=c,s=He()-s,s=(120>s?120:480>s?480:1080>s?1080:1920>s?1920:3e3>s?3e3:4320>s?4320:1960*b0(s/1960))-s,10e?16:e,Un===null)var s=!1;else{if(e=Un,Un=null,bs=0,(Ie&6)!==0)throw Error(i(331));var c=Ie;for(Ie|=4,ge=e.current;ge!==null;){var h=ge,w=h.child;if((ge.flags&16)!==0){var I=h.deletions;if(I!==null){for(var L=0;LHe()-iu?yr(e,0):ou|=o),St(e,n)}function Rf(e,n){n===0&&((e.mode&1)===0?n=1:(n=Dr,Dr<<=1,(Dr&130023424)===0&&(Dr=4194304)));var o=gt();e=xn(e,n),e!==null&&(lr(e,n,o),St(e,o))}function D0(e){var n=e.memoizedState,o=0;n!==null&&(o=n.retryLane),Rf(e,o)}function $0(e,n){var o=0;switch(e.tag){case 13:var s=e.stateNode,c=e.memoizedState;c!==null&&(o=c.retryLane);break;case 19:s=e.stateNode;break;default:throw Error(i(314))}s!==null&&s.delete(n),Rf(e,o)}var Lf;Lf=function(e,n,o){if(e!==null)if(e.memoizedProps!==n.pendingProps||vt.current)wt=!0;else{if((e.lanes&o)===0&&(n.flags&128)===0)return wt=!1,N0(e,n,o);wt=(e.flags&131072)!==0}else wt=!1,Fe&&(n.flags&1048576)!==0&&fd(n,us,n.index);switch(n.lanes=0,n.tag){case 2:var s=n.type;Es(e,n),e=n.pendingProps;var c=Gr(n,at.current);eo(n,o),c=Aa(null,n,s,e,c,o);var h=Da();return n.flags|=1,typeof c=="object"&&c!==null&&typeof c.render=="function"&&c.$$typeof===void 0?(n.tag=1,n.memoizedState=null,n.updateQueue=null,xt(s)?(h=!0,ss(n)):h=!1,n.memoizedState=c.state!==null&&c.state!==void 0?c.state:null,Pa(n),c.updater=Ss,n.stateNode=c,c._reactInternals=n,Va(n,s,e,o),n=Xa(null,n,s,!0,h,o)):(n.tag=0,Fe&&h&&xa(n),mt(null,n,c,o),n=n.child),n;case 16:s=n.elementType;e:{switch(Es(e,n),e=n.pendingProps,c=s._init,s=c(s._payload),n.type=s,c=n.tag=F0(s),e=Xt(s,e),c){case 0:n=Ya(null,n,s,e,o);break e;case 1:n=sf(null,n,s,e,o);break e;case 11:n=ef(null,n,s,e,o);break e;case 14:n=tf(null,n,s,Xt(s.type,e),o);break e}throw Error(i(306,s,""))}return n;case 0:return s=n.type,c=n.pendingProps,c=n.elementType===s?c:Xt(s,c),Ya(e,n,s,c,o);case 1:return s=n.type,c=n.pendingProps,c=n.elementType===s?c:Xt(s,c),sf(e,n,s,c,o);case 3:e:{if(lf(n),e===null)throw Error(i(387));s=n.pendingProps,h=n.memoizedState,c=h.element,_d(e,n),ms(n,s,null,o);var w=n.memoizedState;if(s=w.element,h.isDehydrated)if(h={element:s,isDehydrated:!1,cache:w.cache,pendingSuspenseBoundaries:w.pendingSuspenseBoundaries,transitions:w.transitions},n.updateQueue.baseState=h,n.memoizedState=h,n.flags&256){c=no(Error(i(423)),n),n=af(e,n,s,o,c);break e}else if(s!==c){c=no(Error(i(424)),n),n=af(e,n,s,o,c);break e}else for(bt=An(n.stateNode.containerInfo.firstChild),It=n,Fe=!0,Yt=null,o=xd(n,null,s,o),n.child=o;o;)o.flags=o.flags&-3|4096,o=o.sibling;else{if(Kr(),s===c){n=_n(e,n,o);break e}mt(e,n,s,o)}n=n.child}return n;case 5:return Ed(n),e===null&&Sa(n),s=n.type,c=n.pendingProps,h=e!==null?e.memoizedProps:null,w=c.children,ha(s,c)?w=null:h!==null&&ha(s,h)&&(n.flags|=32),of(e,n),mt(e,n,w,o),n.child;case 6:return e===null&&Sa(n),null;case 13:return uf(e,n,o);case 4:return Ia(n,n.stateNode.containerInfo),s=n.pendingProps,e===null?n.child=Zr(n,null,s,o):mt(e,n,s,o),n.child;case 11:return s=n.type,c=n.pendingProps,c=n.elementType===s?c:Xt(s,c),ef(e,n,s,c,o);case 7:return mt(e,n,n.pendingProps,o),n.child;case 8:return mt(e,n,n.pendingProps.children,o),n.child;case 12:return mt(e,n,n.pendingProps.children,o),n.child;case 10:e:{if(s=n.type._context,c=n.pendingProps,h=n.memoizedProps,w=c.value,Ae(fs,s._currentValue),s._currentValue=w,h!==null)if(Wt(h.value,w)){if(h.children===c.children&&!vt.current){n=_n(e,n,o);break e}}else for(h=n.child,h!==null&&(h.return=n);h!==null;){var I=h.dependencies;if(I!==null){w=h.child;for(var L=I.firstContext;L!==null;){if(L.context===s){if(h.tag===1){L=wn(-1,o&-o),L.tag=2;var K=h.updateQueue;if(K!==null){K=K.shared;var ie=K.pending;ie===null?L.next=L:(L.next=ie.next,ie.next=L),K.pending=L}}h.lanes|=o,L=h.alternate,L!==null&&(L.lanes|=o),ja(h.return,o,n),I.lanes|=o;break}L=L.next}}else if(h.tag===10)w=h.type===n.type?null:h.child;else if(h.tag===18){if(w=h.return,w===null)throw Error(i(341));w.lanes|=o,I=w.alternate,I!==null&&(I.lanes|=o),ja(w,o,n),w=h.sibling}else w=h.child;if(w!==null)w.return=h;else for(w=h;w!==null;){if(w===n){w=null;break}if(h=w.sibling,h!==null){h.return=w.return,w=h;break}w=w.return}h=w}mt(e,n,c.children,o),n=n.child}return n;case 9:return c=n.type,s=n.pendingProps.children,eo(n,o),c=Ot(c),s=s(c),n.flags|=1,mt(e,n,s,o),n.child;case 14:return s=n.type,c=Xt(s,n.pendingProps),c=Xt(s.type,c),tf(e,n,s,c,o);case 15:return nf(e,n,n.type,n.pendingProps,o);case 17:return s=n.type,c=n.pendingProps,c=n.elementType===s?c:Xt(s,c),Es(e,n),n.tag=1,xt(s)?(e=!0,ss(n)):e=!1,eo(n,o),Xd(n,s,c),Va(n,s,c,o),Xa(null,n,s,!0,e,o);case 19:return df(e,n,o);case 22:return rf(e,n,o)}throw Error(i(156,n.tag))};function zf(e,n){return Ai(e,n)}function O0(e,n,o,s){this.tag=e,this.key=o,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=n,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=s,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Bt(e,n,o,s){return new O0(e,n,o,s)}function hu(e){return e=e.prototype,!(!e||!e.isReactComponent)}function F0(e){if(typeof e=="function")return hu(e)?1:0;if(e!=null){if(e=e.$$typeof,e===te)return 11;if(e===W)return 14}return 2}function Xn(e,n){var o=e.alternate;return o===null?(o=Bt(e.tag,n,e.key,e.mode),o.elementType=e.elementType,o.type=e.type,o.stateNode=e.stateNode,o.alternate=e,e.alternate=o):(o.pendingProps=n,o.type=e.type,o.flags=0,o.subtreeFlags=0,o.deletions=null),o.flags=e.flags&14680064,o.childLanes=e.childLanes,o.lanes=e.lanes,o.child=e.child,o.memoizedProps=e.memoizedProps,o.memoizedState=e.memoizedState,o.updateQueue=e.updateQueue,n=e.dependencies,o.dependencies=n===null?null:{lanes:n.lanes,firstContext:n.firstContext},o.sibling=e.sibling,o.index=e.index,o.ref=e.ref,o}function zs(e,n,o,s,c,h){var w=2;if(s=e,typeof e=="function")hu(e)&&(w=1);else if(typeof e=="string")w=5;else e:switch(e){case H:return xr(o.children,c,h,n);case X:w=8,c|=8;break;case V:return e=Bt(12,o,n,c|2),e.elementType=V,e.lanes=h,e;case J:return e=Bt(13,o,n,c),e.elementType=J,e.lanes=h,e;case M:return e=Bt(19,o,n,c),e.elementType=M,e.lanes=h,e;case U:return As(o,c,h,n);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case ee:w=10;break e;case Z:w=9;break e;case te:w=11;break e;case W:w=14;break e;case B:w=16,s=null;break e}throw Error(i(130,e==null?e:typeof e,""))}return n=Bt(w,o,n,c),n.elementType=e,n.type=s,n.lanes=h,n}function xr(e,n,o,s){return e=Bt(7,e,s,n),e.lanes=o,e}function As(e,n,o,s){return e=Bt(22,e,s,n),e.elementType=U,e.lanes=o,e.stateNode={isHidden:!1},e}function pu(e,n,o){return e=Bt(6,e,null,n),e.lanes=o,e}function mu(e,n,o){return n=Bt(4,e.children!==null?e.children:[],e.key,n),n.lanes=o,n.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},n}function H0(e,n,o,s,c){this.tag=n,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=sr(0),this.expirationTimes=sr(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=sr(0),this.identifierPrefix=s,this.onRecoverableError=c,this.mutableSourceEagerHydrationData=null}function gu(e,n,o,s,c,h,w,I,L){return e=new H0(e,n,o,I,L),n===1?(n=1,h===!0&&(n|=8)):n=0,h=Bt(3,null,null,n),e.current=h,h.stateNode=e,h.memoizedState={element:s,isDehydrated:o,cache:null,transitions:null,pendingSuspenseBoundaries:null},Pa(h),e}function B0(e,n,o){var s=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(t)}catch(r){console.error(r)}}return t(),Su.exports=ey(),Su.exports}var Qf;function ty(){if(Qf)return Vs;Qf=1;var t=xp();return Vs.createRoot=t.createRoot,Vs.hydrateRoot=t.hydrateRoot,Vs}var ny=ty();function ry(t,r="Request failed"){const i=(t||"").trim();if(!i)return r;try{const a=JSON.parse(i).detail;if(typeof a=="string"&&a.trim())return a;if(Array.isArray(a)){const u=a.map(d=>typeof d=="string"?d:d&&typeof d=="object"&&"msg"in d?String(d.msg):"").filter(Boolean);if(u.length)return u.join("; ")}}catch{}return i}async function yt(t,r){const i=await fetch(t,{...r,headers:{"Content-Type":"application/json",...(r==null?void 0:r.headers)||{}}});if(!i.ok){const l=await i.text();throw new Error(ry(l,i.statusText||"Request failed"))}return i.json()}const oy=["github_token","bitbucket_token","ai_api_key","ai_model","ai_base_url"],ft={health:()=>yt("/api/health"),settings:()=>yt("/api/settings"),saveSettings:t=>{const r={...t};for(const i of oy)r[i]===""&&delete r[i];return yt("/api/settings",{method:"PUT",body:JSON.stringify(r)})},repos:()=>yt("/api/repos"),browse:t=>yt(`/api/fs${t?`?path=${encodeURIComponent(t)}`:""}`),gitRefs:(t,r=50)=>yt(`/api/git/refs?repo_path=${encodeURIComponent(t)}&limit=${r}`),index:(t,r=!0)=>yt("/api/index",{method:"POST",body:JSON.stringify({repo_path:t,incremental:r})}),indexStatus:t=>yt(`/api/index?repo_path=${encodeURIComponent(t)}`),architecture:t=>yt(`/api/architecture?repo_path=${encodeURIComponent(t)}`),review:(t,r,i,l=!0)=>yt("/api/review",{method:"POST",body:JSON.stringify({repo_path:t,base:r,head:i||null,reindex:l,incremental:!0,three_dot:!0})}),init:(t,r=!1)=>yt("/api/init",{method:"POST",body:JSON.stringify({repo_path:t,overwrite:r})}),postComment:(t,r,i,l)=>yt("/api/prs/comment",{method:"POST",body:JSON.stringify({provider:t,repo:r,number:i,markdown:l})}),graph:(t,r="full")=>yt(`/api/graph?repo_path=${encodeURIComponent(t)}&scope=${r}`),prs:(t,r,i="open")=>yt("/api/prs",{method:"POST",body:JSON.stringify({provider:t,repo:r,state:i})}),residual:t=>yt("/api/ai/residual",{method:"POST",body:JSON.stringify({review:t})})};function di(t){return t.replaceAll("_"," ")}function iy(t){return t.replaceAll("_"," ")}function gl(t){return t.split(".").pop()||t}function sy(t){if(!t)return"";const r=new Date(t);return Number.isNaN(r.getTime())?t:r.toLocaleString()}function ao(t){return t.replace(/([/\\._:@-])/g,"$1​")}function Pr({className:t,children:r}){return m.jsx("svg",{className:t,width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:r})}function ly({className:t}){return m.jsxs(Pr,{className:t,children:[m.jsx("path",{d:"M3 3.5h6.5L13 7v5.5H3z"}),m.jsx("path",{d:"M9.5 3.5V7H13"}),m.jsx("path",{d:"M5.5 9.5h5M5.5 11.5h3.5"})]})}function ay({className:t}){return m.jsxs(Pr,{className:t,children:[m.jsx("rect",{x:"2.5",y:"2.5",width:"4.5",height:"4.5",rx:"0.8"}),m.jsx("rect",{x:"9",y:"2.5",width:"4.5",height:"4.5",rx:"0.8"}),m.jsx("rect",{x:"2.5",y:"9",width:"4.5",height:"4.5",rx:"0.8"}),m.jsx("rect",{x:"9",y:"9",width:"4.5",height:"4.5",rx:"0.8"})]})}function uy({className:t}){return m.jsxs(Pr,{className:t,children:[m.jsx("circle",{cx:"4",cy:"8",r:"1.6"}),m.jsx("circle",{cx:"12",cy:"4",r:"1.6"}),m.jsx("circle",{cx:"12",cy:"12",r:"1.6"}),m.jsx("path",{d:"M5.5 7.2 10.4 4.8M5.5 8.8 10.4 11.2"})]})}function cy({className:t}){return m.jsxs(Pr,{className:t,children:[m.jsx("circle",{cx:"4.5",cy:"4",r:"1.4"}),m.jsx("circle",{cx:"4.5",cy:"12",r:"1.4"}),m.jsx("circle",{cx:"11.5",cy:"12",r:"1.4"}),m.jsx("path",{d:"M4.5 5.5v5M4.5 8h4.2a3 3 0 0 1 3 3"})]})}function dy({className:t}){return m.jsxs(Pr,{className:t,children:[m.jsx("circle",{cx:"8",cy:"8",r:"2.1"}),m.jsx("path",{d:"M8 2.5v1.6M8 11.9v1.6M2.5 8h1.6M11.9 8h1.6M4.1 4.1l1.1 1.1M10.8 10.8l1.1 1.1M11.9 4.1l-1.1 1.1M5.2 10.8l-1.1 1.1"})]})}function wp({className:t}){return m.jsx(Pr,{className:t,children:m.jsx("path",{d:"M2.5 4.5h4L8 6h5.5v6.5h-11z"})})}function fy({className:t}){return m.jsx(Pr,{className:t,children:m.jsx("path",{d:"M4 6.5 8 10.5 12 6.5"})})}const hy="modulepreload",py=function(t,r){return new URL(t,r).href},qf={},my=function(r,i,l){let a=Promise.resolve();if(i&&i.length>0){let d=function(g){return Promise.all(g.map(x=>Promise.resolve(x).then(v=>({status:"fulfilled",value:v}),v=>({status:"rejected",reason:v}))))};const f=document.getElementsByTagName("link"),p=document.querySelector("meta[property=csp-nonce]"),y=(p==null?void 0:p.nonce)||(p==null?void 0:p.getAttribute("nonce"));a=d(i.map(g=>{if(g=py(g,l),g in qf)return;qf[g]=!0;const x=g.endsWith(".css"),v=x?'[rel="stylesheet"]':"";if(!!l)for(let C=f.length-1;C>=0;C--){const E=f[C];if(E.href===g&&(!x||E.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${g}"]${v}`))return;const S=document.createElement("link");if(S.rel=x?"stylesheet":hy,x||(S.as="script"),S.crossOrigin="",S.href=g,y&&S.setAttribute("nonce",y),document.head.appendChild(S),x)return new Promise((C,E)=>{S.addEventListener("load",C),S.addEventListener("error",()=>E(new Error(`Unable to preload CSS for ${g}`)))})}))}function u(d){const f=new Event("vite:preloadError",{cancelable:!0});if(f.payload=d,window.dispatchEvent(f),!f.defaultPrevented)throw d}return a.then(d=>{for(const f of d||[])f.status==="rejected"&&u(f.reason);return r().catch(u)})};function Qe(t){if(typeof t=="string"||typeof t=="number")return""+t;let r="";if(Array.isArray(t))for(let i=0,l;i{}};function yl(){for(var t=0,r=arguments.length,i={},l;t=0&&(l=i.slice(a+1),i=i.slice(0,a)),i&&!r.hasOwnProperty(i))throw new Error("unknown type: "+i);return{type:i,name:l}})}el.prototype=yl.prototype={constructor:el,on:function(t,r){var i=this._,l=yy(t+"",i),a,u=-1,d=l.length;if(arguments.length<2){for(;++u0)for(var i=new Array(a),l=0,a,u;l=0&&(r=t.slice(0,i))!=="xmlns"&&(t=t.slice(i+1)),Zf.hasOwnProperty(r)?{space:Zf[r],local:t}:t}function xy(t){return function(){var r=this.ownerDocument,i=this.namespaceURI;return i===Ou&&r.documentElement.namespaceURI===Ou?r.createElement(t):r.createElementNS(i,t)}}function wy(t){return function(){return this.ownerDocument.createElementNS(t.space,t.local)}}function _p(t){var r=vl(t);return(r.local?wy:xy)(r)}function _y(){}function Ju(t){return t==null?_y:function(){return this.querySelector(t)}}function Sy(t){typeof t!="function"&&(t=Ju(t));for(var r=this._groups,i=r.length,l=new Array(i),a=0;a=k&&(k=b+1);!(R=E[k])&&++k=0;)(d=l[a])&&(u&&d.compareDocumentPosition(u)^4&&u.parentNode.insertBefore(d,u),u=d);return this}function Xy(t){t||(t=Gy);function r(x,v){return x&&v?t(x.__data__,v.__data__):!x-!v}for(var i=this._groups,l=i.length,a=new Array(l),u=0;ur?1:t>=r?0:NaN}function Qy(){var t=arguments[0];return arguments[0]=this,t.apply(null,arguments),this}function qy(){return Array.from(this)}function Ky(){for(var t=this._groups,r=0,i=t.length;r1?this.each((r==null?av:typeof r=="function"?cv:uv)(t,r,i??"")):ho(this.node(),t)}function ho(t,r){return t.style.getPropertyValue(r)||Cp(t).getComputedStyle(t,null).getPropertyValue(r)}function fv(t){return function(){delete this[t]}}function hv(t,r){return function(){this[t]=r}}function pv(t,r){return function(){var i=r.apply(this,arguments);i==null?delete this[t]:this[t]=i}}function mv(t,r){return arguments.length>1?this.each((r==null?fv:typeof r=="function"?pv:hv)(t,r)):this.node()[t]}function jp(t){return t.trim().split(/^|\s+/)}function ec(t){return t.classList||new Mp(t)}function Mp(t){this._node=t,this._names=jp(t.getAttribute("class")||"")}Mp.prototype={add:function(t){var r=this._names.indexOf(t);r<0&&(this._names.push(t),this._node.setAttribute("class",this._names.join(" ")))},remove:function(t){var r=this._names.indexOf(t);r>=0&&(this._names.splice(r,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(t){return this._names.indexOf(t)>=0}};function Pp(t,r){for(var i=ec(t),l=-1,a=r.length;++l=0&&(i=r.slice(l+1),r=r.slice(0,l)),{type:r,name:i}})}function Vv(t){return function(){var r=this.__on;if(r){for(var i=0,l=-1,a=r.length,u;i()=>t;function Fu(t,{sourceEvent:r,subject:i,target:l,identifier:a,active:u,x:d,y:f,dx:p,dy:y,dispatch:g}){Object.defineProperties(this,{type:{value:t,enumerable:!0,configurable:!0},sourceEvent:{value:r,enumerable:!0,configurable:!0},subject:{value:i,enumerable:!0,configurable:!0},target:{value:l,enumerable:!0,configurable:!0},identifier:{value:a,enumerable:!0,configurable:!0},active:{value:u,enumerable:!0,configurable:!0},x:{value:d,enumerable:!0,configurable:!0},y:{value:f,enumerable:!0,configurable:!0},dx:{value:p,enumerable:!0,configurable:!0},dy:{value:y,enumerable:!0,configurable:!0},_:{value:g}})}Fu.prototype.on=function(){var t=this._.on.apply(this._,arguments);return t===this._?this:t};function Jv(t){return!t.ctrlKey&&!t.button}function ex(){return this.parentNode}function tx(t,r){return r??{x:t.x,y:t.y}}function nx(){return navigator.maxTouchPoints||"ontouchstart"in this}function zp(){var t=Jv,r=ex,i=tx,l=nx,a={},u=yl("start","drag","end"),d=0,f,p,y,g,x=0;function v(j){j.on("mousedown.drag",_).filter(l).on("touchstart.drag",E).on("touchmove.drag",N,Zv).on("touchend.drag touchcancel.drag",b).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function _(j,R){if(!(g||!t.call(this,j,R))){var D=k(this,r.call(this,j,R),j,R,"mouse");D&&(Rt(j.view).on("mousemove.drag",S,fi).on("mouseup.drag",C,fi),Rp(j.view),Nu(j),y=!1,f=j.clientX,p=j.clientY,D("start",j))}}function S(j){if(co(j),!y){var R=j.clientX-f,D=j.clientY-p;y=R*R+D*D>x}a.mouse("drag",j)}function C(j){Rt(j.view).on("mousemove.drag mouseup.drag",null),Lp(j.view,y),co(j),a.mouse("end",j)}function E(j,R){if(t.call(this,j,R)){var D=j.changedTouches,H=r.call(this,j,R),X=D.length,V,ee;for(V=0;V>8&15|r>>4&240,r>>4&15|r&240,(r&15)<<4|r&15,1):i===8?Ws(r>>24&255,r>>16&255,r>>8&255,(r&255)/255):i===4?Ws(r>>12&15|r>>8&240,r>>8&15|r>>4&240,r>>4&15|r&240,((r&15)<<4|r&15)/255):null):(r=ox.exec(t))?new Et(r[1],r[2],r[3],1):(r=ix.exec(t))?new Et(r[1]*255/100,r[2]*255/100,r[3]*255/100,1):(r=sx.exec(t))?Ws(r[1],r[2],r[3],r[4]):(r=lx.exec(t))?Ws(r[1]*255/100,r[2]*255/100,r[3]*255/100,r[4]):(r=ax.exec(t))?ih(r[1],r[2]/100,r[3]/100,1):(r=ux.exec(t))?ih(r[1],r[2]/100,r[3]/100,r[4]):Jf.hasOwnProperty(t)?nh(Jf[t]):t==="transparent"?new Et(NaN,NaN,NaN,0):null}function nh(t){return new Et(t>>16&255,t>>8&255,t&255,1)}function Ws(t,r,i,l){return l<=0&&(t=r=i=NaN),new Et(t,r,i,l)}function fx(t){return t instanceof Ei||(t=Er(t)),t?(t=t.rgb(),new Et(t.r,t.g,t.b,t.opacity)):new Et}function Hu(t,r,i,l){return arguments.length===1?fx(t):new Et(t,r,i,l??1)}function Et(t,r,i,l){this.r=+t,this.g=+r,this.b=+i,this.opacity=+l}tc(Et,Hu,Ap(Ei,{brighter(t){return t=t==null?sl:Math.pow(sl,t),new Et(this.r*t,this.g*t,this.b*t,this.opacity)},darker(t){return t=t==null?hi:Math.pow(hi,t),new Et(this.r*t,this.g*t,this.b*t,this.opacity)},rgb(){return this},clamp(){return new Et(Sr(this.r),Sr(this.g),Sr(this.b),ll(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:rh,formatHex:rh,formatHex8:hx,formatRgb:oh,toString:oh}));function rh(){return`#${_r(this.r)}${_r(this.g)}${_r(this.b)}`}function hx(){return`#${_r(this.r)}${_r(this.g)}${_r(this.b)}${_r((isNaN(this.opacity)?1:this.opacity)*255)}`}function oh(){const t=ll(this.opacity);return`${t===1?"rgb(":"rgba("}${Sr(this.r)}, ${Sr(this.g)}, ${Sr(this.b)}${t===1?")":`, ${t})`}`}function ll(t){return isNaN(t)?1:Math.max(0,Math.min(1,t))}function Sr(t){return Math.max(0,Math.min(255,Math.round(t)||0))}function _r(t){return t=Sr(t),(t<16?"0":"")+t.toString(16)}function ih(t,r,i,l){return l<=0?t=r=i=NaN:i<=0||i>=1?t=r=NaN:r<=0&&(t=NaN),new Zt(t,r,i,l)}function Dp(t){if(t instanceof Zt)return new Zt(t.h,t.s,t.l,t.opacity);if(t instanceof Ei||(t=Er(t)),!t)return new Zt;if(t instanceof Zt)return t;t=t.rgb();var r=t.r/255,i=t.g/255,l=t.b/255,a=Math.min(r,i,l),u=Math.max(r,i,l),d=NaN,f=u-a,p=(u+a)/2;return f?(r===u?d=(i-l)/f+(i0&&p<1?0:d,new Zt(d,f,p,t.opacity)}function px(t,r,i,l){return arguments.length===1?Dp(t):new Zt(t,r,i,l??1)}function Zt(t,r,i,l){this.h=+t,this.s=+r,this.l=+i,this.opacity=+l}tc(Zt,px,Ap(Ei,{brighter(t){return t=t==null?sl:Math.pow(sl,t),new Zt(this.h,this.s,this.l*t,this.opacity)},darker(t){return t=t==null?hi:Math.pow(hi,t),new Zt(this.h,this.s,this.l*t,this.opacity)},rgb(){var t=this.h%360+(this.h<0)*360,r=isNaN(t)||isNaN(this.s)?0:this.s,i=this.l,l=i+(i<.5?i:1-i)*r,a=2*i-l;return new Et(Cu(t>=240?t-240:t+120,a,l),Cu(t,a,l),Cu(t<120?t+240:t-120,a,l),this.opacity)},clamp(){return new Zt(sh(this.h),Ys(this.s),Ys(this.l),ll(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const t=ll(this.opacity);return`${t===1?"hsl(":"hsla("}${sh(this.h)}, ${Ys(this.s)*100}%, ${Ys(this.l)*100}%${t===1?")":`, ${t})`}`}}));function sh(t){return t=(t||0)%360,t<0?t+360:t}function Ys(t){return Math.max(0,Math.min(1,t||0))}function Cu(t,r,i){return(t<60?r+(i-r)*t/60:t<180?i:t<240?r+(i-r)*(240-t)/60:r)*255}const nc=t=>()=>t;function mx(t,r){return function(i){return t+i*r}}function gx(t,r,i){return t=Math.pow(t,i),r=Math.pow(r,i)-t,i=1/i,function(l){return Math.pow(t+l*r,i)}}function yx(t){return(t=+t)==1?$p:function(r,i){return i-r?gx(r,i,t):nc(isNaN(r)?i:r)}}function $p(t,r){var i=r-t;return i?mx(t,i):nc(isNaN(t)?r:t)}const al=(function t(r){var i=yx(r);function l(a,u){var d=i((a=Hu(a)).r,(u=Hu(u)).r),f=i(a.g,u.g),p=i(a.b,u.b),y=$p(a.opacity,u.opacity);return function(g){return a.r=d(g),a.g=f(g),a.b=p(g),a.opacity=y(g),a+""}}return l.gamma=t,l})(1);function vx(t,r){r||(r=[]);var i=t?Math.min(r.length,t.length):0,l=r.slice(),a;return function(u){for(a=0;ai&&(u=r.slice(i,u),f[d]?f[d]+=u:f[++d]=u),(l=l[0])===(a=a[0])?f[d]?f[d]+=a:f[++d]=a:(f[++d]=null,p.push({i:d,x:cn(l,a)})),i=ju.lastIndex;return i180?g+=360:g-y>180&&(y+=360),v.push({i:x.push(a(x)+"rotate(",null,l)-2,x:cn(y,g)})):g&&x.push(a(x)+"rotate("+g+l)}function f(y,g,x,v){y!==g?v.push({i:x.push(a(x)+"skewX(",null,l)-2,x:cn(y,g)}):g&&x.push(a(x)+"skewX("+g+l)}function p(y,g,x,v,_,S){if(y!==x||g!==v){var C=_.push(a(_)+"scale(",null,",",null,")");S.push({i:C-4,x:cn(y,x)},{i:C-2,x:cn(g,v)})}else(x!==1||v!==1)&&_.push(a(_)+"scale("+x+","+v+")")}return function(y,g){var x=[],v=[];return y=t(y),g=t(g),u(y.translateX,y.translateY,g.translateX,g.translateY,x,v),d(y.rotate,g.rotate,x,v),f(y.skewX,g.skewX,x,v),p(y.scaleX,y.scaleY,g.scaleX,g.scaleY,x,v),y=g=null,function(_){for(var S=-1,C=v.length,E;++S=0&&t._call.call(void 0,r),t=t._next;--po}function uh(){Nr=(cl=mi.now())+xl,po=li=0;try{Rx()}finally{po=0,zx(),Nr=0}}function Lx(){var t=mi.now(),r=t-cl;r>Bp&&(xl-=r,cl=t)}function zx(){for(var t,r=ul,i,l=1/0;r;)r._call?(l>r._time&&(l=r._time),t=r,r=r._next):(i=r._next,r._next=null,r=t?t._next=i:ul=i);ai=t,Uu(l)}function Uu(t){if(!po){li&&(li=clearTimeout(li));var r=t-Nr;r>24?(t<1/0&&(li=setTimeout(uh,t-mi.now()-xl)),ii&&(ii=clearInterval(ii))):(ii||(cl=mi.now(),ii=setInterval(Lx,Bp)),po=1,Vp(uh))}}function ch(t,r,i){var l=new dl;return r=r==null?0:+r,l.restart(a=>{l.stop(),t(a+r)},r,i),l}var Ax=yl("start","end","cancel","interrupt"),Dx=[],Wp=0,dh=1,Wu=2,nl=3,fh=4,Yu=5,rl=6;function wl(t,r,i,l,a,u){var d=t.__transition;if(!d)t.__transition={};else if(i in d)return;$x(t,i,{name:r,index:l,group:a,on:Ax,tween:Dx,time:u.time,delay:u.delay,duration:u.duration,ease:u.ease,timer:null,state:Wp})}function oc(t,r){var i=nn(t,r);if(i.state>Wp)throw new Error("too late; already scheduled");return i}function fn(t,r){var i=nn(t,r);if(i.state>nl)throw new Error("too late; already running");return i}function nn(t,r){var i=t.__transition;if(!i||!(i=i[r]))throw new Error("transition not found");return i}function $x(t,r,i){var l=t.__transition,a;l[r]=i,i.timer=Up(u,0,i.time);function u(y){i.state=dh,i.timer.restart(d,i.delay,i.time),i.delay<=y&&d(y-i.delay)}function d(y){var g,x,v,_;if(i.state!==dh)return p();for(g in l)if(_=l[g],_.name===i.name){if(_.state===nl)return ch(d);_.state===fh?(_.state=rl,_.timer.stop(),_.on.call("interrupt",t,t.__data__,_.index,_.group),delete l[g]):+gWu&&l.state=0&&(r=r.slice(0,i)),!r||r==="start"})}function pw(t,r,i){var l,a,u=hw(r)?oc:fn;return function(){var d=u(this,t),f=d.on;f!==l&&(a=(l=f).copy()).on(r,i),d.on=a}}function mw(t,r){var i=this._id;return arguments.length<2?nn(this.node(),i).on.on(t):this.each(pw(i,t,r))}function gw(t){return function(){var r=this.parentNode;for(var i in this.__transition)if(+i!==t)return;r&&r.removeChild(this)}}function yw(){return this.on("end.remove",gw(this._id))}function vw(t){var r=this._name,i=this._id;typeof t!="function"&&(t=Ju(t));for(var l=this._groups,a=l.length,u=new Array(a),d=0;d()=>t;function Vw(t,{sourceEvent:r,target:i,transform:l,dispatch:a}){Object.defineProperties(this,{type:{value:t,enumerable:!0,configurable:!0},sourceEvent:{value:r,enumerable:!0,configurable:!0},target:{value:i,enumerable:!0,configurable:!0},transform:{value:l,enumerable:!0,configurable:!0},_:{value:a}})}function En(t,r,i){this.k=t,this.x=r,this.y=i}En.prototype={constructor:En,scale:function(t){return t===1?this:new En(this.k*t,this.x,this.y)},translate:function(t,r){return t===0&r===0?this:new En(this.k,this.x+this.k*t,this.y+this.k*r)},apply:function(t){return[t[0]*this.k+this.x,t[1]*this.k+this.y]},applyX:function(t){return t*this.k+this.x},applyY:function(t){return t*this.k+this.y},invert:function(t){return[(t[0]-this.x)/this.k,(t[1]-this.y)/this.k]},invertX:function(t){return(t-this.x)/this.k},invertY:function(t){return(t-this.y)/this.k},rescaleX:function(t){return t.copy().domain(t.range().map(this.invertX,this).map(t.invert,t))},rescaleY:function(t){return t.copy().domain(t.range().map(this.invertY,this).map(t.invert,t))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}};var _l=new En(1,0,0);Qp.prototype=En.prototype;function Qp(t){for(;!t.__zoom;)if(!(t=t.parentNode))return _l;return t.__zoom}function Mu(t){t.stopImmediatePropagation()}function si(t){t.preventDefault(),t.stopImmediatePropagation()}function Uw(t){return(!t.ctrlKey||t.type==="wheel")&&!t.button}function Ww(){var t=this;return t instanceof SVGElement?(t=t.ownerSVGElement||t,t.hasAttribute("viewBox")?(t=t.viewBox.baseVal,[[t.x,t.y],[t.x+t.width,t.y+t.height]]):[[0,0],[t.width.baseVal.value,t.height.baseVal.value]]):[[0,0],[t.clientWidth,t.clientHeight]]}function hh(){return this.__zoom||_l}function Yw(t){return-t.deltaY*(t.deltaMode===1?.05:t.deltaMode?1:.002)*(t.ctrlKey?10:1)}function Xw(){return navigator.maxTouchPoints||"ontouchstart"in this}function Gw(t,r,i){var l=t.invertX(r[0][0])-i[0][0],a=t.invertX(r[1][0])-i[1][0],u=t.invertY(r[0][1])-i[0][1],d=t.invertY(r[1][1])-i[1][1];return t.translate(a>l?(l+a)/2:Math.min(0,l)||Math.max(0,a),d>u?(u+d)/2:Math.min(0,u)||Math.max(0,d))}function qp(){var t=Uw,r=Ww,i=Gw,l=Yw,a=Xw,u=[0,1/0],d=[[-1/0,-1/0],[1/0,1/0]],f=250,p=tl,y=yl("start","zoom","end"),g,x,v,_=500,S=150,C=0,E=10;function N(M){M.property("__zoom",hh).on("wheel.zoom",X,{passive:!1}).on("mousedown.zoom",V).on("dblclick.zoom",ee).filter(a).on("touchstart.zoom",Z).on("touchmove.zoom",te).on("touchend.zoom touchcancel.zoom",J).style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}N.transform=function(M,W,B,U){var A=M.selection?M.selection():M;A.property("__zoom",hh),M!==A?R(M,W,B,U):A.interrupt().each(function(){D(this,arguments).event(U).start().zoom(null,typeof W=="function"?W.apply(this,arguments):W).end()})},N.scaleBy=function(M,W,B,U){N.scaleTo(M,function(){var A=this.__zoom.k,z=typeof W=="function"?W.apply(this,arguments):W;return A*z},B,U)},N.scaleTo=function(M,W,B,U){N.transform(M,function(){var A=r.apply(this,arguments),z=this.__zoom,F=B==null?j(A):typeof B=="function"?B.apply(this,arguments):B,P=z.invert(F),T=typeof W=="function"?W.apply(this,arguments):W;return i(k(b(z,T),F,P),A,d)},B,U)},N.translateBy=function(M,W,B,U){N.transform(M,function(){return i(this.__zoom.translate(typeof W=="function"?W.apply(this,arguments):W,typeof B=="function"?B.apply(this,arguments):B),r.apply(this,arguments),d)},null,U)},N.translateTo=function(M,W,B,U,A){N.transform(M,function(){var z=r.apply(this,arguments),F=this.__zoom,P=U==null?j(z):typeof U=="function"?U.apply(this,arguments):U;return i(_l.translate(P[0],P[1]).scale(F.k).translate(typeof W=="function"?-W.apply(this,arguments):-W,typeof B=="function"?-B.apply(this,arguments):-B),z,d)},U,A)};function b(M,W){return W=Math.max(u[0],Math.min(u[1],W)),W===M.k?M:new En(W,M.x,M.y)}function k(M,W,B){var U=W[0]-B[0]*M.k,A=W[1]-B[1]*M.k;return U===M.x&&A===M.y?M:new En(M.k,U,A)}function j(M){return[(+M[0][0]+ +M[1][0])/2,(+M[0][1]+ +M[1][1])/2]}function R(M,W,B,U){M.on("start.zoom",function(){D(this,arguments).event(U).start()}).on("interrupt.zoom end.zoom",function(){D(this,arguments).event(U).end()}).tween("zoom",function(){var A=this,z=arguments,F=D(A,z).event(U),P=r.apply(A,z),T=B==null?j(P):typeof B=="function"?B.apply(A,z):B,ne=Math.max(P[1][0]-P[0][0],P[1][1]-P[0][1]),re=A.__zoom,ue=typeof W=="function"?W.apply(A,z):W,ce=p(re.invert(T).concat(ne/re.k),ue.invert(T).concat(ne/ue.k));return function(de){if(de===1)de=ue;else{var Q=ce(de),se=ne/Q[2];de=new En(se,T[0]-Q[0]*se,T[1]-Q[1]*se)}F.zoom(null,de)}})}function D(M,W,B){return!B&&M.__zooming||new H(M,W)}function H(M,W){this.that=M,this.args=W,this.active=0,this.sourceEvent=null,this.extent=r.apply(M,W),this.taps=0}H.prototype={event:function(M){return M&&(this.sourceEvent=M),this},start:function(){return++this.active===1&&(this.that.__zooming=this,this.emit("start")),this},zoom:function(M,W){return this.mouse&&M!=="mouse"&&(this.mouse[1]=W.invert(this.mouse[0])),this.touch0&&M!=="touch"&&(this.touch0[1]=W.invert(this.touch0[0])),this.touch1&&M!=="touch"&&(this.touch1[1]=W.invert(this.touch1[0])),this.that.__zoom=W,this.emit("zoom"),this},end:function(){return--this.active===0&&(delete this.that.__zooming,this.emit("end")),this},emit:function(M){var W=Rt(this.that).datum();y.call(M,this.that,new Vw(M,{sourceEvent:this.sourceEvent,target:N,transform:this.that.__zoom,dispatch:y}),W)}};function X(M,...W){if(!t.apply(this,arguments))return;var B=D(this,W).event(M),U=this.__zoom,A=Math.max(u[0],Math.min(u[1],U.k*Math.pow(2,l.apply(this,arguments)))),z=Kt(M);if(B.wheel)(B.mouse[0][0]!==z[0]||B.mouse[0][1]!==z[1])&&(B.mouse[1]=U.invert(B.mouse[0]=z)),clearTimeout(B.wheel);else{if(U.k===A)return;B.mouse=[z,U.invert(z)],ol(this),B.start()}si(M),B.wheel=setTimeout(F,S),B.zoom("mouse",i(k(b(U,A),B.mouse[0],B.mouse[1]),B.extent,d));function F(){B.wheel=null,B.end()}}function V(M,...W){if(v||!t.apply(this,arguments))return;var B=M.currentTarget,U=D(this,W,!0).event(M),A=Rt(M.view).on("mousemove.zoom",T,!0).on("mouseup.zoom",ne,!0),z=Kt(M,B),F=M.clientX,P=M.clientY;Rp(M.view),Mu(M),U.mouse=[z,this.__zoom.invert(z)],ol(this),U.start();function T(re){if(si(re),!U.moved){var ue=re.clientX-F,ce=re.clientY-P;U.moved=ue*ue+ce*ce>C}U.event(re).zoom("mouse",i(k(U.that.__zoom,U.mouse[0]=Kt(re,B),U.mouse[1]),U.extent,d))}function ne(re){A.on("mousemove.zoom mouseup.zoom",null),Lp(re.view,U.moved),si(re),U.event(re).end()}}function ee(M,...W){if(t.apply(this,arguments)){var B=this.__zoom,U=Kt(M.changedTouches?M.changedTouches[0]:M,this),A=B.invert(U),z=B.k*(M.shiftKey?.5:2),F=i(k(b(B,z),U,A),r.apply(this,W),d);si(M),f>0?Rt(this).transition().duration(f).call(R,F,U,M):Rt(this).call(N.transform,F,U,M)}}function Z(M,...W){if(t.apply(this,arguments)){var B=M.touches,U=B.length,A=D(this,W,M.changedTouches.length===U).event(M),z,F,P,T;for(Mu(M),F=0;F`Seems like you have not used ${t==="svelte"?"SvelteFlowProvider":"ReactFlowProvider"} as an ancestor. Help: https://${t}flow.dev/error#001`,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.",error003:t=>`Node type "${t}" not found. Using fallback type "default".`,error004:()=>"The parent container needs a width and a height to render the graph.",error005:()=>"Only child nodes can use a parent extent.",error006:()=>"Can't create edge. An edge needs a source and a target.",error007:t=>`The old edge with id=${t} does not exist.`,error009:t=>`Marker type "${t}" doesn't exist.`,error008:(t,{id:r,sourceHandle:i,targetHandle:l})=>`Couldn't create edge for ${t} handle id: "${t==="source"?i:l}", edge id: ${r}.`,error010:()=>"Handle: No node id found. Make sure to only use a Handle inside a custom Node.",error011:t=>`Edge type "${t}" not found. Using fallback type "default".`,error012:t=>`Node with id "${t}" does not exist, it may have been removed. This can happen when a node is deleted before the "onNodeClick" handler is called.`,error013:(t="react")=>`It seems that you haven't loaded the styles. Please import '@xyflow/${t}/dist/style.css' or base.css to make sure everything is working properly.`,error014:()=>"useNodeConnections: No node ID found. Call useNodeConnections inside a custom Node or provide a node ID.",error015:()=>"It seems that you are trying to drag a node that is not initialized. Please use onNodesChange as explained in the docs.",error016:t=>`Edge with id "${t}" does not exist, it may have been removed. This can happen when an edge is deleted before the "onEdgeClick" handler is called.`},gi=[[Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY],[Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY]],Kp=["Enter"," ","Escape"],Zp={"node.a11yDescription.default":"Press enter or space to select a node. Press delete to remove it and escape to cancel.","node.a11yDescription.keyboardDisabled":"Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.","node.a11yDescription.ariaLiveMessage":({direction:t,x:r,y:i})=>`Moved selected node ${t}. New position, x: ${r}, y: ${i}`,"edge.a11yDescription.default":"Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.","controls.ariaLabel":"Control Panel","controls.zoomIn.ariaLabel":"Zoom In","controls.zoomOut.ariaLabel":"Zoom Out","controls.fitView.ariaLabel":"Fit View","controls.interactive.ariaLabel":"Toggle Interactivity","minimap.ariaLabel":"Mini Map","handle.ariaLabel":"Handle"};var mo;(function(t){t.Strict="strict",t.Loose="loose"})(mo||(mo={}));var kr;(function(t){t.Free="free",t.Vertical="vertical",t.Horizontal="horizontal"})(kr||(kr={}));var yi;(function(t){t.Partial="partial",t.Full="full"})(yi||(yi={}));const Jp={inProgress:!1,isValid:null,from:null,fromHandle:null,fromPosition:null,fromNode:null,to:null,toHandle:null,toPosition:null,toNode:null,pointer:null};var Zn;(function(t){t.Bezier="default",t.Straight="straight",t.Step="step",t.SmoothStep="smoothstep",t.SimpleBezier="simplebezier"})(Zn||(Zn={}));var vi;(function(t){t.Arrow="arrow",t.ArrowClosed="arrowclosed"})(vi||(vi={}));var Se;(function(t){t.Left="left",t.Top="top",t.Right="right",t.Bottom="bottom"})(Se||(Se={}));const ph={[Se.Left]:Se.Right,[Se.Right]:Se.Left,[Se.Top]:Se.Bottom,[Se.Bottom]:Se.Top};function em(t){return t===null?null:t?"valid":"invalid"}const tm=t=>!!t&&typeof t=="object"&&"id"in t&&"source"in t&&"target"in t,Qw=t=>!!t&&typeof t=="object"&&"id"in t&&"position"in t&&!("source"in t)&&!("target"in t),sc=t=>!!t&&typeof t=="object"&&"id"in t&&"internals"in t&&!("source"in t)&&!("target"in t),Ni=(t,r=[0,0])=>{const{width:i,height:l}=rn(t),a=t.origin??r,u=i*a[0],d=l*a[1];return{x:t.position.x-u,y:t.position.y-d}},qw=(t,r={nodeOrigin:[0,0]})=>{if(t.length===0)return{x:0,y:0,width:0,height:0};let i=!1;const l=t.reduce((a,u)=>{const d=typeof u=="string";let f=!r.nodeLookup&&!d?u:void 0;return r.nodeLookup&&(f=d?r.nodeLookup.get(u):sc(u)?u:r.nodeLookup.get(u.id)),f?(i=!0,Sl(a,fl(f,r.nodeOrigin))):a},{x:1/0,y:1/0,x2:-1/0,y2:-1/0});return i?kl(l):{x:0,y:0,width:0,height:0}},Ci=(t,r={})=>{let i={x:1/0,y:1/0,x2:-1/0,y2:-1/0},l=!1;return t.forEach(a=>{(r.filter===void 0||r.filter(a))&&(i=Sl(i,fl(a)),l=!0)}),l?kl(i):{x:0,y:0,width:0,height:0}},lc=(t,r,[i,l,a]=[0,0,1],u=!1,d=!1)=>{const f=(r.x-i)/a,p=(r.y-l)/a,y=r.width/a,g=r.height/a,x=[];for(const v of t.values()){const{measured:_,selectable:S=!0,hidden:C=!1}=v;if(d&&!S||C)continue;const E=_.width??v.width??v.initialWidth??0,N=_.height??v.height??v.initialHeight??0,{x:b,y:k}=v.internals.positionAbsolute,j=im(f,p,y,g,b,k,E,N),R=E*N,D=u&&j>0;(!v.internals.handleBounds||D||j>=R||v.dragging)&&x.push(v)}return x},Kw=(t,r)=>{const i=new Set;return t.forEach(l=>{i.add(l.id)}),r.filter(l=>i.has(l.source)||i.has(l.target))};function Zw(t,r){const i=new Map,l=r!=null&&r.nodes?new Set(r.nodes.map(a=>a.id)):null;return t.forEach(a=>{let u;if(r!=null&&r.includeHiddenNodes){const{width:d,height:f}=rn(a);u=d>0&&f>0}else u=!!(a.measured.width&&a.measured.height&&!a.hidden);u&&(!l||l.has(a.id))&&i.set(a.id,a)}),i}async function Jw({nodes:t,width:r,height:i,panZoom:l,minZoom:a,maxZoom:u},d){if(t.size===0)return!0;const f=Zw(t,d),p=Ci(f),y=uc(p,r,i,(d==null?void 0:d.minZoom)??a,(d==null?void 0:d.maxZoom)??u,(d==null?void 0:d.padding)??.1);return await l.setViewport(y,{duration:d==null?void 0:d.duration,ease:d==null?void 0:d.ease,interpolate:d==null?void 0:d.interpolate}),!0}function nm({nodeId:t,nextPosition:r,nodeLookup:i,nodeOrigin:l=[0,0],nodeExtent:a,onError:u}){const d=i.get(t),f=d.parentId?i.get(d.parentId):void 0,{x:p,y}=f?f.internals.positionAbsolute:{x:0,y:0},g=d.origin??l;let x=d.extent||a;if(d.extent==="parent"&&!d.expandParent)if(!f)u==null||u("005",tn.error005());else{const{width:_,height:S}=rn(f);_&&S&&(x=[[p,y],[p+_,y+S]])}else f&&jr(d.extent)&&(x=[[d.extent[0][0]+p,d.extent[0][1]+y],[d.extent[1][0]+p,d.extent[1][1]+y]]);const v=jr(x)?Cr(r,x,d.measured):r;return(d.measured.width===void 0||d.measured.height===void 0)&&(u==null||u("015",tn.error015())),{position:{x:v.x-p+(d.measured.width??0)*g[0],y:v.y-y+(d.measured.height??0)*g[1]},positionAbsolute:v}}async function e1({nodesToRemove:t=[],edgesToRemove:r=[],nodes:i,edges:l,onBeforeDelete:a}){const u=new Set(t.map(v=>v.id)),d=[];for(const v of i){if(v.deletable===!1)continue;const _=u.has(v.id),S=!_&&v.parentId&&d.find(C=>C.id===v.parentId);(_||S)&&d.push(v)}const f=new Set(r.map(v=>v.id)),p=l.filter(v=>v.deletable!==!1),g=Kw(d,p);for(const v of p)f.has(v.id)&&!g.find(S=>S.id===v.id)&&g.push(v);if(!a)return{edges:g,nodes:d};const x=await a({nodes:d,edges:g});return typeof x=="boolean"?x?{edges:g,nodes:d}:{edges:[],nodes:[]}:x}const go=(t,r=0,i=1)=>Math.min(Math.max(t,r),i),Cr=(t={x:0,y:0},r,i)=>({x:go(t.x,r[0][0],r[1][0]-((i==null?void 0:i.width)??0)),y:go(t.y,r[0][1],r[1][1]-((i==null?void 0:i.height)??0))});function rm(t,r,i){const{width:l,height:a}=rn(i),{x:u,y:d}=i.internals.positionAbsolute;return Cr(t,[[u,d],[u+l,d+a]],r)}const mh=(t,r,i)=>ti?-go(Math.abs(t-i),1,r)/r:0,ac=(t,r,i=15,l=40)=>{const a=mh(t.x,l,r.width-l)*i,u=mh(t.y,l,r.height-l)*i;return[a,u]},Sl=(t,r)=>({x:Math.min(t.x,r.x),y:Math.min(t.y,r.y),x2:Math.max(t.x2,r.x2),y2:Math.max(t.y2,r.y2)}),Xu=({x:t,y:r,width:i,height:l})=>({x:t,y:r,x2:t+i,y2:r+l}),kl=({x:t,y:r,x2:i,y2:l})=>({x:t,y:r,width:i-t,height:l-r}),xi=(t,r=[0,0])=>{var a,u;const{x:i,y:l}=sc(t)?t.internals.positionAbsolute:Ni(t,r);return{x:i,y:l,width:((a=t.measured)==null?void 0:a.width)??t.width??t.initialWidth??0,height:((u=t.measured)==null?void 0:u.height)??t.height??t.initialHeight??0}},fl=(t,r=[0,0])=>{var a,u;const{x:i,y:l}=sc(t)?t.internals.positionAbsolute:Ni(t,r);return{x:i,y:l,x2:i+(((a=t.measured)==null?void 0:a.width)??t.width??t.initialWidth??0),y2:l+(((u=t.measured)==null?void 0:u.height)??t.height??t.initialHeight??0)}},om=(t,r)=>kl(Sl(Xu(t),Xu(r))),im=(t,r,i,l,a,u,d,f)=>{const p=Math.max(0,Math.min(t+i,a+d)-Math.max(t,a)),y=Math.max(0,Math.min(r+l,u+f)-Math.max(r,u));return Math.ceil(p*y)},hl=(t,r)=>im(t.x,t.y,t.width,t.height,r.x,r.y,r.width,r.height),gh=t=>Jt(t.width)&&Jt(t.height)&&Jt(t.x)&&Jt(t.y),Jt=t=>!isNaN(t)&&isFinite(t),sm=(t,r)=>(i,l)=>{},ji=(t,r=[1,1])=>({x:r[0]*Math.round(t.x/r[0]),y:r[1]*Math.round(t.y/r[1])}),Mi=({x:t,y:r},[i,l,a],u=!1,d=[1,1])=>{const f={x:(t-i)/a,y:(r-l)/a};return u?ji(f,d):f},yo=({x:t,y:r},[i,l,a])=>({x:t*a+i,y:r*a+l});function lo(t,r){if(typeof t=="number")return Math.floor((r-r/(1+t))*.5);if(typeof t=="string"&&t.endsWith("px")){const i=parseFloat(t);if(!Number.isNaN(i))return Math.floor(i)}if(typeof t=="string"&&t.endsWith("%")){const i=parseFloat(t);if(!Number.isNaN(i))return Math.floor(r*i*.01)}return console.error(`The padding value "${t}" is invalid. Please provide a number or a string with a valid unit (px or %).`),0}function t1(t,r,i){if(typeof t=="string"||typeof t=="number"){const l=lo(t,i),a=lo(t,r);return{top:l,right:a,bottom:l,left:a,x:a*2,y:l*2}}if(typeof t=="object"){const l=lo(t.top??t.y??0,i),a=lo(t.bottom??t.y??0,i),u=lo(t.left??t.x??0,r),d=lo(t.right??t.x??0,r);return{top:l,right:d,bottom:a,left:u,x:u+d,y:l+a}}return{top:0,right:0,bottom:0,left:0,x:0,y:0}}function n1(t,r,i,l,a,u){const{x:d,y:f}=yo(t,[r,i,l]),{x:p,y}=yo({x:t.x+t.width,y:t.y+t.height},[r,i,l]),g=a-p,x=u-y;return{left:Math.floor(d),top:Math.floor(f),right:Math.floor(g),bottom:Math.floor(x)}}const uc=(t,r,i,l,a,u)=>{const d=t1(u,r,i),f=(r-d.x)/t.width,p=(i-d.y)/t.height,y=Math.min(f,p),g=go(y,l,a),x=t.x+t.width/2,v=t.y+t.height/2,_=r/2-x*g,S=i/2-v*g,C=n1(t,_,S,g,r,i),E={left:Math.min(C.left-d.left,0),top:Math.min(C.top-d.top,0),right:Math.min(C.right-d.right,0),bottom:Math.min(C.bottom-d.bottom,0)};return{x:_-E.left+E.right,y:S-E.top+E.bottom,zoom:g}},wi=()=>{var t;return typeof navigator<"u"&&((t=navigator==null?void 0:navigator.userAgent)==null?void 0:t.indexOf("Mac"))>=0};function jr(t){return t!=null&&t!=="parent"}function rn(t){var r,i;return{width:((r=t.measured)==null?void 0:r.width)??t.width??t.initialWidth??0,height:((i=t.measured)==null?void 0:i.height)??t.height??t.initialHeight??0}}function lm(t){var r,i;return(((r=t.measured)==null?void 0:r.width)??t.width??t.initialWidth)!==void 0&&(((i=t.measured)==null?void 0:i.height)??t.height??t.initialHeight)!==void 0}function am(t,r={width:0,height:0},i,l,a){const u={...t},d=l.get(i);if(d){const f=d.origin||a;u.x+=d.internals.positionAbsolute.x-(r.width??0)*f[0],u.y+=d.internals.positionAbsolute.y-(r.height??0)*f[1]}return u}function yh(t,r){if(t.size!==r.size)return!1;for(const i of t)if(!r.has(i))return!1;return!0}function r1(){let t,r;return{promise:new Promise((l,a)=>{t=l,r=a}),resolve:t,reject:r}}function o1(t){return{...Zp,...t||{}}}function ci(t,{snapGrid:r=[0,0],snapToGrid:i=!1,transform:l,containerBounds:a}){const{x:u,y:d}=en(t),f=Mi({x:u-((a==null?void 0:a.left)??0),y:d-((a==null?void 0:a.top)??0)},l),{x:p,y}=i?ji(f,r):f;return{xSnapped:p,ySnapped:y,...f}}const cc=t=>({width:t.offsetWidth,height:t.offsetHeight}),um=t=>{var r;return((r=t==null?void 0:t.getRootNode)==null?void 0:r.call(t))||(window==null?void 0:window.document)},i1=["INPUT","SELECT","TEXTAREA"];function cm(t){var l,a;const r=((a=(l=t.composedPath)==null?void 0:l.call(t))==null?void 0:a[0])||t.target;return(r==null?void 0:r.nodeType)!==1?!1:i1.includes(r.nodeName)||r.hasAttribute("contenteditable")||!!r.closest(".nokey")}const dm=t=>"clientX"in t,en=(t,r)=>{var u,d;const i=dm(t),l=i?t.clientX:(u=t.touches)==null?void 0:u[0].clientX,a=i?t.clientY:(d=t.touches)==null?void 0:d[0].clientY;return{x:l-((r==null?void 0:r.left)??0),y:a-((r==null?void 0:r.top)??0)}},vh=(t,r,i,l,a)=>{const u=r.querySelectorAll(`.${t}`);return!u||!u.length?null:Array.from(u).map(d=>{const f=d.getBoundingClientRect();return{id:d.getAttribute("data-handleid"),type:t,nodeId:a,position:d.getAttribute("data-handlepos"),x:(f.left-i.left)/l,y:(f.top-i.top)/l,...cc(d)}})};function fm({sourceX:t,sourceY:r,targetX:i,targetY:l,sourceControlX:a,sourceControlY:u,targetControlX:d,targetControlY:f}){const p=t*.125+a*.375+d*.375+i*.125,y=r*.125+u*.375+f*.375+l*.125,g=Math.abs(p-t),x=Math.abs(y-r);return[p,y,g,x]}function Qs(t,r){return t>=0?.5*t:r*25*Math.sqrt(-t)}function xh({pos:t,x1:r,y1:i,x2:l,y2:a,c:u}){switch(t){case Se.Left:return[r-Qs(r-l,u),i];case Se.Right:return[r+Qs(l-r,u),i];case Se.Top:return[r,i-Qs(i-a,u)];case Se.Bottom:return[r,i+Qs(a-i,u)]}}function hm({sourceX:t,sourceY:r,sourcePosition:i=Se.Bottom,targetX:l,targetY:a,targetPosition:u=Se.Top,curvature:d=.25}){const[f,p]=xh({pos:i,x1:t,y1:r,x2:l,y2:a,c:d}),[y,g]=xh({pos:u,x1:l,y1:a,x2:t,y2:r,c:d}),[x,v,_,S]=fm({sourceX:t,sourceY:r,targetX:l,targetY:a,sourceControlX:f,sourceControlY:p,targetControlX:y,targetControlY:g});return[`M${t},${r} C${f},${p} ${y},${g} ${l},${a}`,x,v,_,S]}function pm({sourceX:t,sourceY:r,targetX:i,targetY:l}){const a=Math.abs(i-t)/2,u=i0}const a1=({source:t,sourceHandle:r,target:i,targetHandle:l})=>`xy-edge__${t}${r||""}-${i}${l||""}`,u1=(t,r)=>r.some(i=>i.source===t.source&&i.target===t.target&&(i.sourceHandle===t.sourceHandle||!i.sourceHandle&&!t.sourceHandle)&&(i.targetHandle===t.targetHandle||!i.targetHandle&&!t.targetHandle)),c1=(t,r,i={})=>{var u;if(!t.source||!t.target)return(u=i.onError)==null||u.call(i,"006",tn.error006()),r;const l=i.getEdgeId||a1;let a;return tm(t)?a={...t}:a={...t,id:l(t)},u1(a,r)?r:(a.sourceHandle===null&&delete a.sourceHandle,a.targetHandle===null&&delete a.targetHandle,r.concat(a))};function mm({sourceX:t,sourceY:r,targetX:i,targetY:l}){const[a,u,d,f]=pm({sourceX:t,sourceY:r,targetX:i,targetY:l});return[`M ${t},${r}L ${i},${l}`,a,u,d,f]}const wh={[Se.Left]:{x:-1,y:0},[Se.Right]:{x:1,y:0},[Se.Top]:{x:0,y:-1},[Se.Bottom]:{x:0,y:1}},d1=({source:t,sourcePosition:r=Se.Bottom,target:i})=>r===Se.Left||r===Se.Right?t.xMath.sqrt(Math.pow(r.x-t.x,2)+Math.pow(r.y-t.y,2));function f1({source:t,sourcePosition:r=Se.Bottom,target:i,targetPosition:l=Se.Top,center:a,offset:u,stepPosition:d}){const f=wh[r],p=wh[l],y={x:t.x+f.x*u,y:t.y+f.y*u},g={x:i.x+p.x*u,y:i.y+p.y*u},x=d1({source:y,sourcePosition:r,target:g}),v=x.x!==0?"x":"y",_=x[v];let S=[],C,E;const N={x:0,y:0},b={x:0,y:0},[,,k,j]=pm({sourceX:t.x,sourceY:t.y,targetX:i.x,targetY:i.y});if(f[v]*p[v]===-1){v==="x"?(C=a.x??y.x+(g.x-y.x)*d,E=a.y??(y.y+g.y)/2):(C=a.x??(y.x+g.x)/2,E=a.y??y.y+(g.y-y.y)*d);const X=[{x:C,y:y.y},{x:C,y:g.y}],V=[{x:y.x,y:E},{x:g.x,y:E}];f[v]===_?S=v==="x"?X:V:S=v==="x"?V:X}else{const X=[{x:y.x,y:g.y}],V=[{x:g.x,y:y.y}];if(v==="x"?S=f.x===_?V:X:S=f.y===_?X:V,r===l){const M=Math.abs(t[v]-i[v]);if(M<=u){const W=Math.min(u-1,u-M);f[v]===_?N[v]=(y[v]>t[v]?-1:1)*W:b[v]=(g[v]>i[v]?-1:1)*W}}if(r!==l){const M=v==="x"?"y":"x",W=f[v]===p[M],B=y[M]>g[M],U=y[M]=J?(C=(ee.x+Z.x)/2,E=S[0].y):(C=S[0].x,E=(ee.y+Z.y)/2)}const R={x:y.x+N.x,y:y.y+N.y},D={x:g.x+b.x,y:g.y+b.y};return[[t,...R.x!==S[0].x||R.y!==S[0].y?[R]:[],...S,...D.x!==S[S.length-1].x||D.y!==S[S.length-1].y?[D]:[],i],C,E,k,j]}function h1(t,r,i,l){const a=Math.min(_h(t,r)/2,_h(r,i)/2,l),{x:u,y:d}=r;if(t.x===u&&u===i.x||t.y===d&&d===i.y)return`L${u} ${d}`;if(t.y===d){const y=t.xi.id===r):t[0])||null}function Qu(t,r){return t?typeof t=="string"?t:`${r?`${r}__`:""}${Object.keys(t).sort().map(l=>`${l}=${t[l]}`).join("&")}`:""}function m1(t,{id:r,defaultColor:i,defaultMarkerStart:l,defaultMarkerEnd:a}){const u=new Set;return t.reduce((d,f)=>([f.markerStart||l,f.markerEnd||a].forEach(p=>{if(p&&typeof p=="object"){const y=Qu(p,r);u.has(y)||(d.push({id:y,color:p.color||i,...p}),u.add(y))}}),d),[]).sort((d,f)=>d.id.localeCompare(f.id))}const gm=1e3,g1=10,dc={nodeOrigin:[0,0],nodeExtent:gi,elevateNodesOnSelect:!0,zIndexMode:"basic",defaults:{}},y1={...dc,checkEquality:!0};function fc(t,r){const i={...t};for(const l in r)r[l]!==void 0&&(i[l]=r[l]);return i}function v1(t,r,i){const l=fc(dc,i);for(const a of t.values())if(a.parentId)pc(a,t,r,l);else{const u=Ni(a,l.nodeOrigin),d=jr(a.extent)?a.extent:l.nodeExtent,f=Cr(u,d,rn(a));a.internals.positionAbsolute=f}}function x1(t,r){if(!t.handles)return t.measured?r==null?void 0:r.internals.handleBounds:void 0;const i=[],l=[];for(const a of t.handles){const u={id:a.id,width:a.width??1,height:a.height??1,nodeId:t.id,x:a.x,y:a.y,position:a.position,type:a.type};a.type==="source"?i.push(u):a.type==="target"&&l.push(u)}return{source:i,target:l}}function hc(t){return t==="manual"}function qu(t,r,i,l={}){var g,x;const a=fc(y1,l),u={i:0},d=new Map(r),f=a!=null&&a.elevateNodesOnSelect&&!hc(a.zIndexMode)?gm:0;let p=t.length>0,y=!1;r.clear(),i.clear();for(const v of t){let _=d.get(v.id);if(a.checkEquality&&v===(_==null?void 0:_.internals.userNode))r.set(v.id,_);else{const S=Ni(v,a.nodeOrigin),C=jr(v.extent)?v.extent:a.nodeExtent,E=Cr(S,C,rn(v));_={...a.defaults,...v,measured:{width:(g=v.measured)==null?void 0:g.width,height:(x=v.measured)==null?void 0:x.height},internals:{positionAbsolute:E,handleBounds:x1(v,_),z:ym(v,f,a.zIndexMode),userNode:v}},r.set(v.id,_)}(_.measured===void 0||_.measured.width===void 0||_.measured.height===void 0)&&!_.hidden&&(p=!1),v.parentId&&pc(_,r,i,l,u),y||(y=v.selected??!1)}return{nodesInitialized:p,hasSelectedNodes:y}}function w1(t,r){if(!t.parentId)return;const i=r.get(t.parentId);i?i.set(t.id,t):r.set(t.parentId,new Map([[t.id,t]]))}function pc(t,r,i,l,a){const{elevateNodesOnSelect:u,nodeOrigin:d,nodeExtent:f,zIndexMode:p}=fc(dc,l),y=t.parentId,g=r.get(y);if(!g){console.warn(`Parent node ${y} not found. Please make sure that parent nodes are in front of their child nodes in the nodes array.`);return}w1(t,i),a&&!g.parentId&&g.internals.rootParentIndex===void 0&&p==="auto"&&(g.internals.rootParentIndex=++a.i,g.internals.z=g.internals.z+a.i*g1),a&&g.internals.rootParentIndex!==void 0&&(a.i=g.internals.rootParentIndex);const x=u&&!hc(p)?gm:0,{x:v,y:_,z:S}=_1(t,g,d,f,x,p),{positionAbsolute:C}=t.internals,E=v!==C.x||_!==C.y;(E||S!==t.internals.z)&&r.set(t.id,{...t,internals:{...t.internals,positionAbsolute:E?{x:v,y:_}:C,z:S}})}function ym(t,r,i){const l=Jt(t.zIndex)?t.zIndex:0;return hc(i)?l:l+(t.selected?r:0)}function _1(t,r,i,l,a,u){const{x:d,y:f}=r.internals.positionAbsolute,p=rn(t),y=Ni(t,i),g=jr(t.extent)?Cr(y,t.extent,p):y;let x=Cr({x:d+g.x,y:f+g.y},l,p);t.extent==="parent"&&(x=rm(x,p,r));const v=ym(t,a,u),_=r.internals.z??0;return{x:x.x,y:x.y,z:_>=v?_+1:v}}function mc(t,r,i,l=[0,0]){var d;const a=[],u=new Map;for(const f of t){const p=r.get(f.parentId);if(!p)continue;const y=((d=u.get(f.parentId))==null?void 0:d.expandedRect)??xi(p),g=om(y,f.rect);u.set(f.parentId,{expandedRect:g,parent:p})}return u.size>0&&u.forEach(({expandedRect:f,parent:p},y)=>{var k;const g=p.internals.positionAbsolute,x=rn(p),v=p.origin??l,_=f.x0||S>0||N||b)&&(a.push({id:y,type:"position",position:{x:p.position.x-_+N,y:p.position.y-S+b}}),(k=i.get(y))==null||k.forEach(j=>{t.some(R=>R.id===j.id)||a.push({id:j.id,type:"position",position:{x:j.position.x+_,y:j.position.y+S}})})),(x.width0){const _=mc(v,r,i,a);y.push(..._)}return{changes:y,updatedInternals:p}}async function k1({delta:t,panZoom:r,transform:i,translateExtent:l,width:a,height:u}){if(!r||!t.x&&!t.y)return!1;const d=await r.setViewportConstrained({x:i[0]+t.x,y:i[1]+t.y,zoom:i[2]},[[0,0],[a,u]],l);return!!d&&(d.x!==i[0]||d.y!==i[1]||d.k!==i[2])}function Nh(t,r,i,l,a,u){let d=a;const f=l.get(d)||new Map;l.set(d,f.set(i,r)),d=`${a}-${t}`;const p=l.get(d)||new Map;if(l.set(d,p.set(i,r)),u){d=`${a}-${t}-${u}`;const y=l.get(d)||new Map;l.set(d,y.set(i,r))}}function vm(t,r,i){t.clear(),r.clear();for(const l of i){const{source:a,target:u,sourceHandle:d=null,targetHandle:f=null}=l,p={edgeId:l.id,source:a,target:u,sourceHandle:d,targetHandle:f},y=`${a}-${d}--${u}-${f}`,g=`${u}-${f}--${a}-${d}`;Nh("source",p,g,t,a,d),Nh("target",p,y,t,u,f),r.set(l.id,l)}}function xm(t,r){if(!t.parentId)return!1;const i=r.get(t.parentId);return i?i.selected?!0:xm(i,r):!1}function Ch(t,r,i){var a;let l=t;do{if((a=l==null?void 0:l.matches)!=null&&a.call(l,r))return!0;if(l===i)return!1;l=l==null?void 0:l.parentElement}while(l);return!1}function E1(t,r,i,l){const a=new Map;for(const[u,d]of t)if((d.selected||d.id===l)&&(!d.parentId||!xm(d,t))&&(d.draggable||r&&typeof d.draggable>"u")){const f=t.get(u);f&&a.set(u,{id:u,position:f.position||{x:0,y:0},distance:{x:i.x-f.internals.positionAbsolute.x,y:i.y-f.internals.positionAbsolute.y},extent:f.extent,parentId:f.parentId,origin:f.origin,expandParent:f.expandParent,internals:{positionAbsolute:f.internals.positionAbsolute||{x:0,y:0}},measured:{width:f.measured.width??0,height:f.measured.height??0}})}return a}function Pu({nodeId:t,dragItems:r,nodeLookup:i,dragging:l=!0}){var d,f,p;const a=[];for(const[y,g]of r){const x=(d=i.get(y))==null?void 0:d.internals.userNode;x&&a.push({...x,position:g.position,dragging:l})}if(!t)return[a[0],a];const u=(f=i.get(t))==null?void 0:f.internals.userNode;return[u?{...u,position:((p=r.get(t))==null?void 0:p.position)||u.position,dragging:l}:a[0],a]}function N1({dragItems:t,snapGrid:r,x:i,y:l}){const a=t.values().next().value;if(!a)return null;const u={x:i-a.distance.x,y:l-a.distance.y},d=ji(u,r);return{x:d.x-u.x,y:d.y-u.y}}function C1({onNodeMouseDown:t,getStoreItems:r,onDragStart:i,onDrag:l,onDragStop:a}){let u={x:null,y:null},d=0,f=new Map,p=!1,y={x:0,y:0},g=null,x=!1,v=null,_=!1,S=!1,C=null;function E({noDragClassName:b,handleSelector:k,domNode:j,isSelectable:R,nodeId:D,nodeClickDistance:H=0}){v=Rt(j);function X({x:te,y:J}){const{nodeLookup:M,nodeExtent:W,snapGrid:B,snapToGrid:U,nodeOrigin:A,onNodeDrag:z,onSelectionDrag:F,onError:P,updateNodePositions:T}=r();u={x:te,y:J};let ne=!1;const re=f.size>1,ue=re&&W?Xu(Ci(f)):null,ce=re&&U?N1({dragItems:f,snapGrid:B,x:te,y:J}):null;for(const[de,Q]of f){if(!M.has(de))continue;let se={x:te-Q.distance.x,y:J-Q.distance.y};U&&(se=ce?{x:Math.round(se.x+ce.x),y:Math.round(se.y+ce.y)}:ji(se,B));let fe=null;if(re&&W&&!Q.extent&&ue){const{positionAbsolute:pe}=Q.internals,Ce=pe.x-ue.x+W[0][0],je=pe.x+Q.measured.width-ue.x2+W[1][0],Me=pe.y-ue.y+W[0][1],Re=pe.y+Q.measured.height-ue.y2+W[1][1];fe=[[Ce,Me],[je,Re]]}const{position:me,positionAbsolute:xe}=nm({nodeId:de,nextPosition:se,nodeLookup:M,nodeExtent:fe||W,nodeOrigin:A,onError:P});ne=ne||Q.position.x!==me.x||Q.position.y!==me.y,Q.position=me,Q.internals.positionAbsolute=xe}if(S=S||ne,!!ne&&(T(f,!0),C&&(l||z||!D&&F))){const[de,Q]=Pu({nodeId:D,dragItems:f,nodeLookup:M});l==null||l(C,f,de,Q),z==null||z(C,de,Q),D||F==null||F(C,Q)}}async function V(){if(!g)return;const{transform:te,panBy:J,autoPanSpeed:M,autoPanOnNodeDrag:W}=r();if(!W){p=!1,cancelAnimationFrame(d);return}const[B,U]=ac(y,g,M);(B!==0||U!==0)&&(u.x=(u.x??0)-B/te[2],u.y=(u.y??0)-U/te[2],await J({x:B,y:U})&&X(u)),d=requestAnimationFrame(V)}function ee(te){var re;const{nodeLookup:J,multiSelectionActive:M,nodesDraggable:W,transform:B,snapGrid:U,snapToGrid:A,selectNodesOnDrag:z,onNodeDragStart:F,onSelectionDragStart:P,unselectNodesAndEdges:T}=r();x=!0,(!z||!R)&&!M&&D&&((re=J.get(D))!=null&&re.selected||T()),R&&z&&D&&(t==null||t(D));const ne=ci(te.sourceEvent,{transform:B,snapGrid:U,snapToGrid:A,containerBounds:g});if(u=ne,f=E1(J,W,ne,D),f.size>0&&(i||F||!D&&P)){const[ue,ce]=Pu({nodeId:D,dragItems:f,nodeLookup:J});i==null||i(te.sourceEvent,f,ue,ce),F==null||F(te.sourceEvent,ue,ce),D||P==null||P(te.sourceEvent,ce)}}const Z=zp().clickDistance(H).on("start",te=>{const{domNode:J,nodeDragThreshold:M,transform:W,snapGrid:B,snapToGrid:U}=r();g=(J==null?void 0:J.getBoundingClientRect())||null,_=!1,S=!1,C=te.sourceEvent,M===0&&ee(te),u=ci(te.sourceEvent,{transform:W,snapGrid:B,snapToGrid:U,containerBounds:g}),y=en(te.sourceEvent,g)}).on("drag",te=>{const{autoPanOnNodeDrag:J,transform:M,snapGrid:W,snapToGrid:B,nodeDragThreshold:U,nodeLookup:A}=r(),z=ci(te.sourceEvent,{transform:M,snapGrid:W,snapToGrid:B,containerBounds:g});if(C=te.sourceEvent,(te.sourceEvent.type==="touchmove"&&te.sourceEvent.touches.length>1||D&&!A.has(D))&&(_=!0),!_){if(!p&&J&&x&&(p=!0,V()),!x){const F=en(te.sourceEvent,g),P=F.x-y.x,T=F.y-y.y;Math.sqrt(P*P+T*T)>U&&ee(te)}(u.x!==z.xSnapped||u.y!==z.ySnapped)&&f&&x&&(y=en(te.sourceEvent,g),X(z))}}).on("end",te=>{if(!x||_){_&&f.size>0&&r().updateNodePositions(f,!1);return}if(p=!1,x=!1,cancelAnimationFrame(d),f.size>0){const{nodeLookup:J,updateNodePositions:M,onNodeDragStop:W,onSelectionDragStop:B}=r();if(S&&(M(f,!1),S=!1),a||W||!D&&B){const[U,A]=Pu({nodeId:D,dragItems:f,nodeLookup:J,dragging:!1});a==null||a(te.sourceEvent,f,U,A),W==null||W(te.sourceEvent,U,A),D||B==null||B(te.sourceEvent,A)}}}).filter(te=>{const J=te.target;return!te.button&&(!b||!Ch(J,`.${b}`,j))&&(!k||Ch(J,k,j))});v.call(Z)}function N(){v==null||v.on(".drag",null)}return{update:E,destroy:N}}function j1(t,r,i){const l=[],a={x:t.x-i,y:t.y-i,width:i*2,height:i*2};for(const u of r.values())hl(a,xi(u))>0&&l.push(u);return l}const M1=250;function P1(t,r,i,l){var f,p;let a=[],u=1/0;const d=j1(t,i,r+M1);for(const y of d){const g=[...((f=y.internals.handleBounds)==null?void 0:f.source)??[],...((p=y.internals.handleBounds)==null?void 0:p.target)??[]];for(const x of g){if(l.nodeId===x.nodeId&&l.type===x.type&&l.id===x.id)continue;const{x:v,y:_}=Mr(y,x,x.position,!0),S=Math.sqrt(Math.pow(v-t.x,2)+Math.pow(_-t.y,2));S>r||(S1){const y=l.type==="source"?"target":"source";return a.find(g=>g.type===y)??a[0]}return a[0]}function wm(t,r,i,l,a,u=!1){var y,g,x;const d=l.get(t);if(!d)return null;const f=a==="strict"?(y=d.internals.handleBounds)==null?void 0:y[r]:[...((g=d.internals.handleBounds)==null?void 0:g.source)??[],...((x=d.internals.handleBounds)==null?void 0:x.target)??[]],p=(i?f==null?void 0:f.find(v=>v.id===i):f==null?void 0:f[0])??null;return p&&u?{...p,...Mr(d,p,p.position,!0)}:p}function _m(t,r){return t||(r!=null&&r.classList.contains("target")?"target":r!=null&&r.classList.contains("source")?"source":null)}function I1(t,r){let i=null;return r?i=!0:t&&!r&&(i=!1),i}const Sm=()=>!0;function b1(t,{connectionMode:r,connectionRadius:i,handleId:l,nodeId:a,edgeUpdaterType:u,isTarget:d,domNode:f,nodeLookup:p,lib:y,autoPanOnConnect:g,flowId:x,panBy:v,cancelConnection:_,onConnectStart:S,onConnect:C,onConnectEnd:E,isValidConnection:N=Sm,onReconnectEnd:b,updateConnection:k,getTransform:j,getFromHandle:R,autoPanSpeed:D,dragThreshold:H=1,handleDomNode:X}){const V=um(t.target);let ee=0,Z;const{x:te,y:J}=en(t),M=_m(u,X),W=f==null?void 0:f.getBoundingClientRect();let B=!1;if(!W||!M)return;const U=wm(a,M,l,p,r);if(!U)return;let A=en(t,W),z=!1,F=null,P=!1,T=null;function ne(){if(!g||!W)return;const[me,xe]=ac(A,W,D);v({x:me,y:xe}),ee=requestAnimationFrame(ne)}const re={...U,nodeId:a,type:M,position:U.position},ue=p.get(a);let de={inProgress:!0,isValid:null,from:Mr(ue,re,Se.Left,!0),fromHandle:re,fromPosition:re.position,fromNode:ue,to:A,toHandle:null,toPosition:ph[re.position],toNode:null,pointer:A};function Q(){B=!0,k(de),S==null||S(t,{nodeId:a,handleId:l,handleType:M})}H===0&&Q();function se(me){if(!B){const{x:Re,y:Xe}=en(me),rt=Re-te,Ze=Xe-J;if(!(rt*rt+Ze*Ze>H*H))return;Q()}if(!R()||!re){fe(me);return}const xe=j();A=en(me,W),Z=P1(Mi(A,xe,!1,[1,1]),i,p,re),z||(ne(),z=!0);const pe=km(me,{handle:Z,connectionMode:r,fromNodeId:a,fromHandleId:l,fromType:d?"target":"source",isValidConnection:N,doc:V,lib:y,flowId:x,nodeLookup:p});T=pe.handleDomNode,F=pe.connection,P=I1(!!Z,pe.isValid);const Ce=p.get(a),je=Ce?Mr(Ce,re,Se.Left,!0):de.from,Me={...de,from:je,isValid:P,to:pe.toHandle&&P?yo({x:pe.toHandle.x,y:pe.toHandle.y},xe):A,toHandle:pe.toHandle,toPosition:P&&pe.toHandle?pe.toHandle.position:ph[re.position],toNode:pe.toHandle?p.get(pe.toHandle.nodeId):null,pointer:A};k(Me),de=Me}function fe(me){if(!("touches"in me&&me.touches.length>0)){if(B){(Z||T)&&F&&P&&(C==null||C(F));const{inProgress:xe,...pe}=de,Ce={...pe,toPosition:de.toHandle?de.toPosition:null};E==null||E(me,Ce),u&&(b==null||b(me,Ce))}_(),cancelAnimationFrame(ee),z=!1,P=!1,F=null,T=null,V.removeEventListener("mousemove",se),V.removeEventListener("mouseup",fe),V.removeEventListener("touchmove",se),V.removeEventListener("touchend",fe)}}V.addEventListener("mousemove",se),V.addEventListener("mouseup",fe),V.addEventListener("touchmove",se),V.addEventListener("touchend",fe)}function km(t,{handle:r,connectionMode:i,fromNodeId:l,fromHandleId:a,fromType:u,doc:d,lib:f,flowId:p,isValidConnection:y=Sm,nodeLookup:g}){const x=u==="target",v=r?d.querySelector(`.${f}-flow__handle[data-id="${p}-${r==null?void 0:r.nodeId}-${r==null?void 0:r.id}-${r==null?void 0:r.type}"]`):null,{x:_,y:S}=en(t),C=d.elementFromPoint(_,S),E=C!=null&&C.classList.contains(`${f}-flow__handle`)?C:v,N={handleDomNode:E,isValid:!1,connection:null,toHandle:null};if(E){const b=_m(void 0,E),k=E.getAttribute("data-nodeid"),j=E.getAttribute("data-handleid"),R=E.classList.contains("connectable"),D=E.classList.contains("connectableend");if(!k||!b)return N;const H={source:x?k:l,sourceHandle:x?j:a,target:x?l:k,targetHandle:x?a:j};N.connection=H;const V=R&&D&&(i===mo.Strict?x&&b==="source"||!x&&b==="target":k!==l||j!==a);N.isValid=V&&y(H),N.toHandle=wm(k,b,j,g,i,!0)}return N}const Ku={onPointerDown:b1,isValid:km};function T1({domNode:t,panZoom:r,getTransform:i,getViewScale:l}){const a=Rt(t);function u({translateExtent:f,width:p,height:y,zoomStep:g=1,pannable:x=!0,zoomable:v=!0,inversePan:_=!1}){const S=k=>{if(k.sourceEvent.type!=="wheel"||!r)return;const j=i(),R=k.sourceEvent.ctrlKey&&wi()?10:1,D=-k.sourceEvent.deltaY*(k.sourceEvent.deltaMode===1?.05:k.sourceEvent.deltaMode?1:.002)*g,H=j[2]*Math.pow(2,D*R);r.scaleTo(H)};let C=[0,0];const E=k=>{(k.sourceEvent.type==="mousedown"||k.sourceEvent.type==="touchstart")&&(C=[k.sourceEvent.clientX??k.sourceEvent.touches[0].clientX,k.sourceEvent.clientY??k.sourceEvent.touches[0].clientY])},N=k=>{const j=i();if(k.sourceEvent.type!=="mousemove"&&k.sourceEvent.type!=="touchmove"||!r)return;const R=[k.sourceEvent.clientX??k.sourceEvent.touches[0].clientX,k.sourceEvent.clientY??k.sourceEvent.touches[0].clientY],D=[R[0]-C[0],R[1]-C[1]];C=R;const H=l()*Math.max(j[2],Math.log(j[2]))*(_?-1:1),X={x:j[0]-D[0]*H,y:j[1]-D[1]*H},V=[[0,0],[p,y]];r.setViewportConstrained({x:X.x,y:X.y,zoom:j[2]},V,f)},b=qp().on("start",E).on("zoom",x?N:null).on("zoom.wheel",v?S:null);a.call(b,{})}function d(){a.on("zoom",null)}return{update:u,destroy:d,pointer:Kt}}const El=t=>({x:t.x,y:t.y,zoom:t.k}),Iu=({x:t,y:r,zoom:i})=>_l.translate(t,r).scale(i),Kn=(t,r)=>t.target.closest(`.${r}`),Em=(t,r)=>r===2&&Array.isArray(t)&&t.includes(2),R1=t=>((t*=2)<=1?t*t*t:(t-=2)*t*t+2)/2,bu=(t,r=0,i=R1,l=()=>{})=>{const a=typeof r=="number"&&r>0;return a||l(),a?t.transition().duration(r).ease(i).on("end",l):t},Nm=t=>{const r=t.ctrlKey&&wi()?10:1;return-t.deltaY*(t.deltaMode===1?.05:t.deltaMode?1:.002)*r};function L1({zoomPanValues:t,noWheelClassName:r,d3Selection:i,d3Zoom:l,panOnScrollMode:a,panOnScrollSpeed:u,zoomOnPinch:d,onPanZoomStart:f,onPanZoom:p,onPanZoomEnd:y}){return g=>{if(Kn(g,r))return g.ctrlKey&&g.preventDefault(),!1;g.preventDefault(),g.stopImmediatePropagation();const x=i.property("__zoom").k||1;if(g.ctrlKey&&d){const E=Kt(g),N=Nm(g),b=x*Math.pow(2,N);l.scaleTo(i,b,E,g);return}const v=g.deltaMode===1?20:1;let _=a===kr.Vertical?0:g.deltaX*v,S=a===kr.Horizontal?0:g.deltaY*v;!wi()&&g.shiftKey&&a!==kr.Vertical&&(_=g.deltaY*v,S=0),l.translateBy(i,-(_/x)*u,-(S/x)*u,{internal:!0});const C=El(i.property("__zoom"));clearTimeout(t.panScrollTimeout),t.isPanScrolling?p==null||p(g,C):(t.isPanScrolling=!0,f==null||f(g,C)),t.panScrollTimeout=setTimeout(()=>{y==null||y(g,C),t.isPanScrolling=!1},150)}}function z1({noWheelClassName:t,preventScrolling:r,d3ZoomHandler:i}){return function(l,a){const u=l.type==="wheel",d=!r&&u&&!l.ctrlKey,f=Kn(l,t);if(l.ctrlKey&&u&&f&&l.preventDefault(),d||f)return null;l.preventDefault(),i.call(this,l,a)}}function A1({zoomPanValues:t,onDraggingChange:r,onPanZoomStart:i}){return l=>{var u,d,f;if((u=l.sourceEvent)!=null&&u.internal)return;const a=El(l.transform);t.mouseButton=((d=l.sourceEvent)==null?void 0:d.button)||0,t.isZoomingOrPanning=!0,t.prevViewport=a,((f=l.sourceEvent)==null?void 0:f.type)==="mousedown"&&r(!0),i&&(i==null||i(l.sourceEvent,a))}}function D1({zoomPanValues:t,panOnDrag:r,onPaneContextMenu:i,onTransformChange:l,onPanZoom:a}){return u=>{var d,f;t.usedRightMouseButton=!!(i&&Em(r,t.mouseButton??0)),(d=u.sourceEvent)!=null&&d.sync||l([u.transform.x,u.transform.y,u.transform.k]),a&&!((f=u.sourceEvent)!=null&&f.internal)&&(a==null||a(u.sourceEvent,El(u.transform)))}}function $1({zoomPanValues:t,panOnDrag:r,panOnScroll:i,onDraggingChange:l,onPanZoomEnd:a,onPaneContextMenu:u}){return d=>{var f;if(!((f=d.sourceEvent)!=null&&f.internal)&&(t.isZoomingOrPanning=!1,u&&Em(r,t.mouseButton??0)&&!t.usedRightMouseButton&&d.sourceEvent&&u(d.sourceEvent),t.usedRightMouseButton=!1,l(!1),a)){const p=El(d.transform);t.prevViewport=p,clearTimeout(t.timerId),t.timerId=setTimeout(()=>{a==null||a(d.sourceEvent,p)},i?150:0)}}}function O1({panActivationKeyPressed:t,zoomActivationKeyPressed:r,zoomOnScroll:i,zoomOnPinch:l,panOnDrag:a,panOnScroll:u,zoomOnDoubleClick:d,userSelectionActive:f,noWheelClassName:p,noPanClassName:y,lib:g,connectionInProgress:x}){return v=>{var N;const _=r||i,S=l&&v.ctrlKey,C=v.type==="wheel";if(v.button===1&&v.type==="mousedown"&&(Kn(v,`${g}-flow__node`)||Kn(v,`${g}-flow__edge`)||Kn(v,`${g}-flow__selection`)||Kn(v,`${g}-flow__nodesselection`)))return!0;if(!a&&!_&&!u&&!d&&!l||f||x&&!C||Kn(v,p)&&C||Kn(v,y)&&(!C||u&&C&&!r)||!l&&v.ctrlKey&&C)return!1;if(!l&&v.type==="touchstart"&&((N=v.touches)==null?void 0:N.length)>1)return v.preventDefault(),!1;if(!_&&!u&&!S&&C||!a&&(v.type==="mousedown"||v.type==="touchstart")||Array.isArray(a)&&!a.includes(v.button)&&v.type==="mousedown")return!1;const E=Array.isArray(a)&&a.includes(v.button)||!v.button||v.button<=1;return(!v.ctrlKey||C||t)&&E}}function F1({domNode:t,minZoom:r,maxZoom:i,translateExtent:l,viewport:a,onPanZoom:u,onPanZoomStart:d,onPanZoomEnd:f,onDraggingChange:p}){const y={isZoomingOrPanning:!1,usedRightMouseButton:!1,prevViewport:{},mouseButton:0,timerId:void 0,panScrollTimeout:void 0,isPanScrolling:!1},g=t.getBoundingClientRect();let x=[[0,0],[g.width,g.height]];const v=typeof ResizeObserver<"u"?new ResizeObserver(J=>{const M=J[0];M&&(x=[[0,0],[M.contentRect.width,M.contentRect.height]])}):null;v==null||v.observe(t);const _=qp().extent(()=>x).scaleExtent([r,i]).translateExtent(l),S=Rt(t).call(_);j({x:a.x,y:a.y,zoom:go(a.zoom,r,i)},[[0,0],[g.width,g.height]],l);const C=S.on("wheel.zoom"),E=S.on("dblclick.zoom");_.wheelDelta(Nm);async function N(J,M){return S?new Promise(W=>{_==null||_.interpolate((M==null?void 0:M.interpolate)==="linear"?ui:tl).transform(bu(S,M==null?void 0:M.duration,M==null?void 0:M.ease,()=>W(!0)),J)}):!1}function b({noWheelClassName:J,noPanClassName:M,onPaneContextMenu:W,userSelectionActive:B,panOnScroll:U,panOnDrag:A,panOnScrollMode:z,panOnScrollSpeed:F,preventScrolling:P,zoomOnPinch:T,zoomOnScroll:ne,zoomOnDoubleClick:re,panActivationKeyPressed:ue=!1,zoomActivationKeyPressed:ce,lib:de,onTransformChange:Q,connectionInProgress:se,paneClickDistance:fe,selectionOnDrag:me}){B&&!y.isZoomingOrPanning&&k();const xe=U&&!ce&&!B;_.clickDistance(me?1/0:!Jt(fe)||fe<0?0:fe);const pe=xe?L1({zoomPanValues:y,noWheelClassName:J,d3Selection:S,d3Zoom:_,panOnScrollMode:z,panOnScrollSpeed:F,zoomOnPinch:T,onPanZoomStart:d,onPanZoom:u,onPanZoomEnd:f}):z1({noWheelClassName:J,preventScrolling:P,d3ZoomHandler:C});S.on("wheel.zoom",pe,{passive:!1});const Ce=A1({zoomPanValues:y,onDraggingChange:p,onPanZoomStart:d});_.on("start",Ce);const je=D1({zoomPanValues:y,panOnDrag:A,onPaneContextMenu:!!W,onPanZoom:u,onTransformChange:Q});_.on("zoom",je);const Me=$1({zoomPanValues:y,panOnDrag:A,panOnScroll:U,onPaneContextMenu:W,onPanZoomEnd:f,onDraggingChange:p});_.on("end",Me);const Re=O1({panActivationKeyPressed:ue,zoomActivationKeyPressed:ce,panOnDrag:A,zoomOnScroll:ne,panOnScroll:U,zoomOnDoubleClick:re,zoomOnPinch:T,userSelectionActive:B,noPanClassName:M,noWheelClassName:J,lib:de,connectionInProgress:se});_.filter(Re),re?S.on("dblclick.zoom",E):S.on("dblclick.zoom",null)}function k(){_.on("zoom",null)}async function j(J,M,W){const B=Iu(J),U=_==null?void 0:_.constrain()(B,M,W);return U&&await N(U),U}async function R(J,M){const W=Iu(J);return await N(W,M),W}function D(J){if(S){const M=Iu(J),W=S.property("__zoom");(W.k!==J.zoom||W.x!==J.x||W.y!==J.y)&&(_==null||_.transform(S,M,null,{sync:!0}))}}function H(){const J=S?Qp(S.node()):{x:0,y:0,k:1};return{x:J.x,y:J.y,zoom:J.k}}async function X(J,M){return S?new Promise(W=>{_==null||_.interpolate((M==null?void 0:M.interpolate)==="linear"?ui:tl).scaleTo(bu(S,M==null?void 0:M.duration,M==null?void 0:M.ease,()=>W(!0)),J)}):!1}async function V(J,M){return S?new Promise(W=>{_==null||_.interpolate((M==null?void 0:M.interpolate)==="linear"?ui:tl).scaleBy(bu(S,M==null?void 0:M.duration,M==null?void 0:M.ease,()=>W(!0)),J)}):!1}function ee(J){_==null||_.scaleExtent(J)}function Z(J){_==null||_.translateExtent(J)}function te(J){const M=!Jt(J)||J<0?0:J;_==null||_.clickDistance(M)}return{update:b,destroy:k,setViewport:R,setViewportConstrained:j,getViewport:H,scaleTo:X,scaleBy:V,setScaleExtent:ee,setTranslateExtent:Z,syncViewport:D,setClickDistance:te}}var vo;(function(t){t.Line="line",t.Handle="handle"})(vo||(vo={}));function H1({width:t,prevWidth:r,height:i,prevHeight:l,affectsX:a,affectsY:u}){const d=t-r,f=i-l,p=[d>0?1:d<0?-1:0,f>0?1:f<0?-1:0];return d&&a&&(p[0]=p[0]*-1),f&&u&&(p[1]=p[1]*-1),p}function jh(t){const r=t.includes("right")||t.includes("left"),i=t.includes("bottom")||t.includes("top"),l=t.includes("left"),a=t.includes("top");return{isHorizontal:r,isVertical:i,affectsX:l,affectsY:a}}function Qn(t,r){return Math.max(0,r-t)}function qn(t,r){return Math.max(0,t-r)}function qs(t,r,i){return Math.max(0,r-t,t-i)}function Mh(t,r){return t?!r:r}function B1(t,r,i,l,a,u,d,f){let{affectsX:p,affectsY:y}=r;const{isHorizontal:g,isVertical:x}=r,v=g&&x,{xSnapped:_,ySnapped:S}=i,{minWidth:C,maxWidth:E,minHeight:N,maxHeight:b}=l,{x:k,y:j,width:R,height:D,aspectRatio:H}=t;let X=Math.floor(g?_-t.pointerX:0),V=Math.floor(x?S-t.pointerY:0);const ee=R+(p?-X:X),Z=D+(y?-V:V),te=-u[0]*R,J=-u[1]*D;let M=qs(ee,C,E),W=qs(Z,N,b);if(d){let A=0,z=0;p&&X<0?A=Qn(k+X+te,d[0][0]):!p&&X>0&&(A=qn(k+ee+te,d[1][0])),y&&V<0?z=Qn(j+V+J,d[0][1]):!y&&V>0&&(z=qn(j+Z+J,d[1][1])),M=Math.max(M,A),W=Math.max(W,z)}if(f){let A=0,z=0;p&&X>0?A=qn(k+X,f[0][0]):!p&&X<0&&(A=Qn(k+ee,f[1][0])),y&&V>0?z=qn(j+V,f[0][1]):!y&&V<0&&(z=Qn(j+Z,f[1][1])),M=Math.max(M,A),W=Math.max(W,z)}if(a){if(g){const A=qs(ee/H,N,b)*H;if(M=Math.max(M,A),d){let z=0;!p&&!y||p&&!y&&v?z=qn(j+J+ee/H,d[1][1])*H:z=Qn(j+J+(p?X:-X)/H,d[0][1])*H,M=Math.max(M,z)}if(f){let z=0;!p&&!y||p&&!y&&v?z=Qn(j+ee/H,f[1][1])*H:z=qn(j+(p?X:-X)/H,f[0][1])*H,M=Math.max(M,z)}}if(x){const A=qs(Z*H,C,E)/H;if(W=Math.max(W,A),d){let z=0;!p&&!y||y&&!p&&v?z=qn(k+Z*H+te,d[1][0])/H:z=Qn(k+(y?V:-V)*H+te,d[0][0])/H,W=Math.max(W,z)}if(f){let z=0;!p&&!y||y&&!p&&v?z=Qn(k+Z*H,f[1][0])/H:z=qn(k+(y?V:-V)*H,f[0][0])/H,W=Math.max(W,z)}}}V=V+(V<0?W:-W),X=X+(X<0?M:-M),a&&(v?ee>Z*H?V=(Mh(p,y)?-X:X)/H:X=(Mh(p,y)?-V:V)*H:g?(V=X/H,y=p):(X=V*H,p=y));const B=p?k+X:k,U=y?j+V:j;return{width:R+(p?-X:X),height:D+(y?-V:V),x:u[0]*X*(p?-1:1)+B,y:u[1]*V*(y?-1:1)+U}}const Cm={width:0,height:0,x:0,y:0},V1={...Cm,pointerX:0,pointerY:0,aspectRatio:1};function U1(t,r,i){const l=r.position.x+t.position.x,a=r.position.y+t.position.y,u=t.measured.width??0,d=t.measured.height??0,f=i[0]*u,p=i[1]*d;return[[l-f,a-p],[l+u-f,a+d-p]]}function W1({domNode:t,nodeId:r,getStoreItems:i,onChange:l,onEnd:a}){const u=Rt(t);let d={controlDirection:jh("bottom-right"),boundaries:{minWidth:0,minHeight:0,maxWidth:Number.MAX_VALUE,maxHeight:Number.MAX_VALUE},resizeDirection:void 0,keepAspectRatio:!1};function f({controlPosition:y,boundaries:g,keepAspectRatio:x,resizeDirection:v,onResizeStart:_,onResize:S,onResizeEnd:C,shouldResize:E}){let N={...Cm},b={...V1};d={boundaries:g,resizeDirection:v,keepAspectRatio:x,controlDirection:jh(y)};let k,j=null,R=[],D,H,X,V=!1;const ee=zp().on("start",Z=>{const{nodeLookup:te,transform:J,snapGrid:M,snapToGrid:W,nodeOrigin:B,paneDomNode:U}=i();if(k=te.get(r),!k)return;j=(U==null?void 0:U.getBoundingClientRect())??null;const{xSnapped:A,ySnapped:z}=ci(Z.sourceEvent,{transform:J,snapGrid:M,snapToGrid:W,containerBounds:j});N={width:k.measured.width??0,height:k.measured.height??0,x:k.position.x??0,y:k.position.y??0},b={...N,pointerX:A,pointerY:z,aspectRatio:N.width/N.height},D=void 0,H=jr(k.extent)?k.extent:void 0,k.parentId&&(k.extent==="parent"||k.expandParent)&&(D=te.get(k.parentId)),D&&k.extent==="parent"&&(H=[[0,0],[D.measured.width,D.measured.height]]),R=[],X=void 0;for(const[F,P]of te)if(P.parentId===r&&(R.push({id:F,position:{...P.position},extent:P.extent}),P.extent==="parent"||P.expandParent)){const T=U1(P,k,P.origin??B);X?X=[[Math.min(T[0][0],X[0][0]),Math.min(T[0][1],X[0][1])],[Math.max(T[1][0],X[1][0]),Math.max(T[1][1],X[1][1])]]:X=T}_==null||_(Z,{...N})}).on("drag",Z=>{const{transform:te,snapGrid:J,snapToGrid:M,nodeOrigin:W}=i(),B=ci(Z.sourceEvent,{transform:te,snapGrid:J,snapToGrid:M,containerBounds:j}),U=[];if(!k)return;const{x:A,y:z,width:F,height:P}=N,T={},ne=k.origin??W,{width:re,height:ue,x:ce,y:de}=B1(b,d.controlDirection,B,d.boundaries,d.keepAspectRatio,ne,H,X),Q=re!==F,se=ue!==P,fe=ce!==A&&Q,me=de!==z&&se;if(!fe&&!me&&!Q&&!se)return;if((fe||me||ne[0]===1||ne[1]===1)&&(T.x=fe?ce:N.x,T.y=me?de:N.y,N.x=T.x,N.y=T.y,R.length>0)){const je=ce-A,Me=de-z;for(const Re of R)Re.position={x:Re.position.x-je+ne[0]*(re-F),y:Re.position.y-Me+ne[1]*(ue-P)},U.push(Re)}if((Q||se)&&(T.width=Q&&(!d.resizeDirection||d.resizeDirection==="horizontal")?re:N.width,T.height=se&&(!d.resizeDirection||d.resizeDirection==="vertical")?ue:N.height,N.width=T.width,N.height=T.height),D&&k.expandParent){const je=ne[0]*(T.width??0);T.x&&T.x{V&&(C==null||C(Z,{...N}),a==null||a({...N}),V=!1)});u.call(ee)}function p(){u.on(".drag",null)}return{update:f,destroy:p}}var Tu={exports:{}},Ru={},Lu={exports:{}},zu={};/** + * @license React + * use-sync-external-store-shim.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var Ph;function Y1(){if(Ph)return zu;Ph=1;var t=Si();function r(x,v){return x===v&&(x!==0||1/x===1/v)||x!==x&&v!==v}var i=typeof Object.is=="function"?Object.is:r,l=t.useState,a=t.useEffect,u=t.useLayoutEffect,d=t.useDebugValue;function f(x,v){var _=v(),S=l({inst:{value:_,getSnapshot:v}}),C=S[0].inst,E=S[1];return u(function(){C.value=_,C.getSnapshot=v,p(C)&&E({inst:C})},[x,_,v]),a(function(){return p(C)&&E({inst:C}),x(function(){p(C)&&E({inst:C})})},[x]),d(_),_}function p(x){var v=x.getSnapshot;x=x.value;try{var _=v();return!i(x,_)}catch{return!0}}function y(x,v){return v()}var g=typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?y:f;return zu.useSyncExternalStore=t.useSyncExternalStore!==void 0?t.useSyncExternalStore:g,zu}var Ih;function X1(){return Ih||(Ih=1,Lu.exports=Y1()),Lu.exports}/** + * @license React + * use-sync-external-store-shim/with-selector.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var bh;function G1(){if(bh)return Ru;bh=1;var t=Si(),r=X1();function i(y,g){return y===g&&(y!==0||1/y===1/g)||y!==y&&g!==g}var l=typeof Object.is=="function"?Object.is:i,a=r.useSyncExternalStore,u=t.useRef,d=t.useEffect,f=t.useMemo,p=t.useDebugValue;return Ru.useSyncExternalStoreWithSelector=function(y,g,x,v,_){var S=u(null);if(S.current===null){var C={hasValue:!1,value:null};S.current=C}else C=S.current;S=f(function(){function N(D){if(!b){if(b=!0,k=D,D=v(D),_!==void 0&&C.hasValue){var H=C.value;if(_(H,D))return j=H}return j=D}if(H=j,l(k,D))return H;var X=v(D);return _!==void 0&&_(H,X)?(k=D,H):(k=D,j=X)}var b=!1,k,j,R=x===void 0?null:x;return[function(){return N(g())},R===null?void 0:function(){return N(R())}]},[g,x,v,_]);var E=a(y,S[0],S[1]);return d(function(){C.hasValue=!0,C.value=E},[E]),p(E),E},Ru}var Th;function Q1(){return Th||(Th=1,Tu.exports=G1()),Tu.exports}var q1=Q1();const K1=vp(q1),Z1={},Rh=t=>{let r;const i=new Set,l=(g,x)=>{const v=typeof g=="function"?g(r):g;if(!Object.is(v,r)){const _=r;r=x??(typeof v!="object"||v===null)?v:Object.assign({},r,v),i.forEach(S=>S(r,_))}},a=()=>r,p={setState:l,getState:a,getInitialState:()=>y,subscribe:g=>(i.add(g),()=>i.delete(g)),destroy:()=>{(Z1?"production":void 0)!=="production"&&console.warn("[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."),i.clear()}},y=r=t(l,a,p);return p},J1=t=>t?Rh(t):Rh,{useDebugValue:e_}=K0,{useSyncExternalStoreWithSelector:t_}=K1,n_=t=>t;function jm(t,r=n_,i){const l=t_(t.subscribe,t.getState,t.getServerState||t.getInitialState,r,i);return e_(l),l}const Lh=(t,r)=>{const i=J1(t),l=(a,u=r)=>jm(i,a,u);return Object.assign(l,i),l},r_=(t,r)=>t?Lh(t,r):Lh;function Ue(t,r){if(Object.is(t,r))return!0;if(typeof t!="object"||t===null||typeof r!="object"||r===null)return!1;if(t instanceof Map&&r instanceof Map){if(t.size!==r.size)return!1;for(const[l,a]of t)if(!Object.is(a,r.get(l)))return!1;return!0}if(t instanceof Set&&r instanceof Set){if(t.size!==r.size)return!1;for(const l of t)if(!r.has(l))return!1;return!0}const i=Object.keys(t);if(i.length!==Object.keys(r).length)return!1;for(const l of i)if(!Object.prototype.hasOwnProperty.call(r,l)||!Object.is(t[l],r[l]))return!1;return!0}xp();const Nl=O.createContext(null),o_=Nl.Provider,Mm=tn.error001("react");function be(t,r){const i=O.useContext(Nl);if(i===null)throw new Error(Mm);return jm(i,t,r)}function Oe(){const t=O.useContext(Nl);if(t===null)throw new Error(Mm);return O.useMemo(()=>({getState:t.getState,setState:t.setState,subscribe:t.subscribe}),[t])}const zh={display:"none"},i_={position:"absolute",width:1,height:1,margin:-1,border:0,padding:0,overflow:"hidden",clip:"rect(0px, 0px, 0px, 0px)",clipPath:"inset(100%)"},Pm="react-flow__node-desc",Im="react-flow__edge-desc",s_="react-flow__aria-live",l_=t=>t.ariaLiveMessage,a_=t=>t.ariaLabelConfig;function u_({rfId:t}){const r=be(l_);return m.jsx("div",{id:`${s_}-${t}`,"aria-live":"assertive","aria-atomic":"true",style:i_,children:r})}function c_({rfId:t,disableKeyboardA11y:r}){const i=be(a_);return m.jsxs(m.Fragment,{children:[m.jsx("div",{id:`${Pm}-${t}`,style:zh,children:r?i["node.a11yDescription.default"]:i["node.a11yDescription.keyboardDisabled"]}),m.jsx("div",{id:`${Im}-${t}`,style:zh,children:i["edge.a11yDescription.default"]}),!r&&m.jsx(u_,{rfId:t})]})}const Cl=O.forwardRef(({position:t="top-left",children:r,className:i,style:l,...a},u)=>{const d=`${t}`.split("-");return m.jsx("div",{className:Qe(["react-flow__panel",i,...d]),style:l,ref:u,...a,children:r})});Cl.displayName="Panel";const Ah="https://reactflow.dev?utm_source=attribution";function d_({proOptions:t,position:r="bottom-right"}){return t!=null&&t.hideAttribution?null:m.jsx(Cl,{position:r,className:"react-flow__attribution","data-message":`Please only hide this attribution when you are subscribed to React Flow Pro: ${Ah}`,children:m.jsx("a",{href:Ah,target:"_blank",rel:"noopener noreferrer","aria-label":"React Flow attribution",children:"React Flow"})})}const f_=t=>{const r=[],i=[];for(const[,l]of t.nodeLookup)l.selected&&r.push(l.internals.userNode);for(const[,l]of t.edgeLookup)l.selected&&i.push(l);return{selectedNodes:r,selectedEdges:i}},Ks=t=>t.id;function h_(t,r){return Ue(t.selectedNodes.map(Ks),r.selectedNodes.map(Ks))&&Ue(t.selectedEdges.map(Ks),r.selectedEdges.map(Ks))}function p_({onSelectionChange:t}){const r=Oe(),{selectedNodes:i,selectedEdges:l}=be(f_,h_);return O.useEffect(()=>{const a={nodes:i,edges:l};t==null||t(a),r.getState().onSelectionChangeHandlers.forEach(u=>u(a))},[i,l,t]),null}const m_=t=>!!t.onSelectionChangeHandlers;function g_({onSelectionChange:t}){const r=be(m_);return t||r?m.jsx(p_,{onSelectionChange:t}):null}const bm=[0,0],y_={x:0,y:0,zoom:1},v_=["nodes","edges","defaultNodes","defaultEdges","onConnect","onConnectStart","onConnectEnd","onClickConnectStart","onClickConnectEnd","nodesDraggable","autoPanOnNodeFocus","nodesConnectable","nodesFocusable","edgesFocusable","edgesReconnectable","elevateNodesOnSelect","elevateEdgesOnSelect","minZoom","maxZoom","nodeExtent","onNodesChange","onEdgesChange","elementsSelectable","connectionMode","snapGrid","snapToGrid","translateExtent","connectOnClick","defaultEdgeOptions","fitView","fitViewOptions","onNodesDelete","onEdgesDelete","onDelete","onNodeDrag","onNodeDragStart","onNodeDragStop","onSelectionDrag","onSelectionDragStart","onSelectionDragStop","onMoveStart","onMove","onMoveEnd","noPanClassName","nodeOrigin","autoPanOnConnect","autoPanOnNodeDrag","onError","connectionRadius","isValidConnection","selectNodesOnDrag","nodeDragThreshold","connectionDragThreshold","onBeforeDelete","debug","autoPanSpeed","ariaLabelConfig","zIndexMode"],Dh=[...v_,"rfId"],x_=t=>({setNodes:t.setNodes,setEdges:t.setEdges,setMinZoom:t.setMinZoom,setMaxZoom:t.setMaxZoom,setTranslateExtent:t.setTranslateExtent,setNodeExtent:t.setNodeExtent,reset:t.reset,setDefaultNodesAndEdges:t.setDefaultNodesAndEdges}),$h={translateExtent:gi,nodeOrigin:bm,minZoom:.5,maxZoom:2,elementsSelectable:!0,noPanClassName:"nopan",rfId:"1"};function w_(t){const{setNodes:r,setEdges:i,setMinZoom:l,setMaxZoom:a,setTranslateExtent:u,setNodeExtent:d,reset:f,setDefaultNodesAndEdges:p}=be(x_,Ue),y=Oe();O.useEffect(()=>(p(t.defaultNodes,t.defaultEdges),()=>{g.current=$h,f()}),[]);const g=O.useRef($h);return O.useEffect(()=>{for(const x of Dh){const v=t[x],_=g.current[x];v!==_&&(typeof t[x]>"u"||(x==="nodes"?r(v):x==="edges"?i(v):x==="minZoom"?l(v):x==="maxZoom"?a(v):x==="translateExtent"?u(v):x==="nodeExtent"?d(v):x==="ariaLabelConfig"?y.setState({ariaLabelConfig:o1(v)}):x==="fitView"?y.setState({fitViewQueued:v}):x==="fitViewOptions"?y.setState({fitViewOptions:v}):y.setState({[x]:v})))}g.current=t},Dh.map(x=>t[x])),null}function Oh(){return typeof window>"u"||!window.matchMedia?null:window.matchMedia("(prefers-color-scheme: dark)")}function __(t){var l;const[r,i]=O.useState(t==="system"?null:t);return O.useEffect(()=>{if(t!=="system"){i(t);return}const a=Oh(),u=()=>i(a!=null&&a.matches?"dark":"light");return u(),a==null||a.addEventListener("change",u),()=>{a==null||a.removeEventListener("change",u)}},[t]),r!==null?r:(l=Oh())!=null&&l.matches?"dark":"light"}const Fh=typeof document<"u"?document:null;function _i(t=null,r={target:Fh,actInsideInputWithModifier:!0}){const[i,l]=O.useState(!1),a=O.useRef(!1),u=O.useRef(new Set([])),[d,f]=O.useMemo(()=>{if(t!==null){const y=(Array.isArray(t)?t:[t]).filter(x=>typeof x=="string").map(x=>x.replace(/\+/g,` +`).replace(` + +`,` ++`).split(` +`)),g=y.reduce((x,v)=>x.concat(...v),[]);return[y,g]}return[[],[]]},[t]);return O.useEffect(()=>{const p=(r==null?void 0:r.target)??Fh,y=(r==null?void 0:r.actInsideInputWithModifier)??!0;if(t!==null){const g=_=>{var E,N;if(a.current=_.ctrlKey||_.metaKey||_.shiftKey||_.altKey,(!a.current||a.current&&!y)&&cm(_))return!1;const C=Bh(_.code,f);if(u.current.add(_[C]),Hh(d,u.current,!1)){const b=((N=(E=_.composedPath)==null?void 0:E.call(_))==null?void 0:N[0])||_.target,k=(b==null?void 0:b.nodeName)==="BUTTON"||(b==null?void 0:b.nodeName)==="A";r.preventDefault!==!1&&(a.current||!k)&&_.preventDefault(),l(!0)}},x=_=>{const S=Bh(_.code,f);Hh(d,u.current,!0)?(l(!1),u.current.clear()):u.current.delete(_[S]),_.key==="Meta"&&u.current.clear(),a.current=!1},v=()=>{u.current.clear(),l(!1)};return p==null||p.addEventListener("keydown",g),p==null||p.addEventListener("keyup",x),window.addEventListener("blur",v),window.addEventListener("contextmenu",v),()=>{p==null||p.removeEventListener("keydown",g),p==null||p.removeEventListener("keyup",x),window.removeEventListener("blur",v),window.removeEventListener("contextmenu",v)}}},[t,l]),i}function Hh(t,r,i){return t.filter(l=>i||l.length===r.size).some(l=>l.every(a=>r.has(a)))}function Bh(t,r){return r.includes(t)?"code":"key"}const S_=()=>{const t=Oe();return O.useMemo(()=>({zoomIn:async r=>{const{panZoom:i}=t.getState();return i?i.scaleBy(1.2,r):!1},zoomOut:async r=>{const{panZoom:i}=t.getState();return i?i.scaleBy(1/1.2,r):!1},zoomTo:async(r,i)=>{const{panZoom:l}=t.getState();return l?l.scaleTo(r,i):!1},getZoom:()=>t.getState().transform[2],setViewport:async(r,i)=>{const{transform:[l,a,u],panZoom:d}=t.getState();return d?(await d.setViewport({x:r.x??l,y:r.y??a,zoom:r.zoom??u},i),!0):!1},getViewport:()=>{const[r,i,l]=t.getState().transform;return{x:r,y:i,zoom:l}},setCenter:async(r,i,l)=>t.getState().setCenter(r,i,l),fitBounds:async(r,i)=>{const{width:l,height:a,minZoom:u,maxZoom:d,panZoom:f}=t.getState(),p=uc(r,l,a,u,d,(i==null?void 0:i.padding)??.1);return f?(await f.setViewport(p,{duration:i==null?void 0:i.duration,ease:i==null?void 0:i.ease,interpolate:i==null?void 0:i.interpolate}),!0):!1},screenToFlowPosition:(r,i={})=>{const{transform:l,snapGrid:a,snapToGrid:u,domNode:d}=t.getState();if(!d)return r;const{x:f,y:p}=d.getBoundingClientRect(),y={x:r.x-f,y:r.y-p},g=i.snapGrid??a,x=i.snapToGrid??u;return Mi(y,l,x,g)},flowToScreenPosition:r=>{const{transform:i,domNode:l}=t.getState();if(!l)return r;const{x:a,y:u}=l.getBoundingClientRect(),d=yo(r,i);return{x:d.x+a,y:d.y+u}}}),[])};function Tm(t,r){const i=[],l=new Map,a=[];for(const u of t)if(u.type==="add"){a.push(u);continue}else if(u.type==="remove"||u.type==="replace")l.set(u.id,[u]);else{const d=l.get(u.id);d?d.push(u):l.set(u.id,[u])}for(const u of r){const d=l.get(u.id);if(!d){i.push(u);continue}if(d[0].type==="remove")continue;if(d[0].type==="replace"){i.push({...d[0].item});continue}const f={...u};for(const p of d)k_(p,f);i.push(f)}return a.length&&a.forEach(u=>{u.index!==void 0?i.splice(u.index,0,{...u.item}):i.push({...u.item})}),i}function k_(t,r){switch(t.type){case"select":{r.selected=t.selected;break}case"position":{typeof t.position<"u"&&(r.position=t.position),typeof t.dragging<"u"&&(r.dragging=t.dragging);break}case"dimensions":{typeof t.dimensions<"u"&&(r.measured={...t.dimensions},t.setAttributes&&((t.setAttributes===!0||t.setAttributes==="width")&&(r.width=t.dimensions.width),(t.setAttributes===!0||t.setAttributes==="height")&&(r.height=t.dimensions.height))),typeof t.resizing=="boolean"&&(r.resizing=t.resizing);break}}}function E_(t,r){return Tm(t,r)}function N_(t,r){return Tm(t,r)}function wr(t,r){return{id:t,type:"select",selected:r}}function uo(t,r=new Set,i=!1){const l=[];for(const[a,u]of t){const d=r.has(a);!(u.selected===void 0&&!d)&&u.selected!==d&&(i&&(u.selected=d),l.push(wr(u.id,d)))}return l}function Vh({items:t=[],lookup:r}){var a;const i=[],l=new Map(t.map(u=>[u.id,u]));for(const[u,d]of t.entries()){const f=r.get(d.id),p=((a=f==null?void 0:f.internals)==null?void 0:a.userNode)??f;p!==void 0&&p!==d&&i.push({id:d.id,item:d,type:"replace"}),p===void 0&&i.push({item:d,type:"add",index:u})}for(const[u]of r)l.get(u)===void 0&&i.push({id:u,type:"remove"});return i}function Uh(t){return{id:t.id,type:"remove"}}const C_=sm();function j_(t,r,i={}){return c1(t,r,{...i,onError:i.onError??C_})}const Wh=t=>Qw(t),M_=t=>tm(t);function Rm(t){return O.forwardRef(t)}const Lm=typeof window<"u"?O.useLayoutEffect:O.useEffect;function Yh(t){const[r,i]=O.useState(BigInt(0)),[l]=O.useState(()=>P_(()=>i(a=>a+BigInt(1))));return Lm(()=>{const a=l.get();a.length&&(t(a),l.reset())},[r]),l}function P_(t){let r=[];return{get:()=>r,reset:()=>{r=[]},push:i=>{r.push(i),t()}}}const zm=O.createContext(null);function I_({children:t}){const r=Oe(),i=O.useCallback(f=>{const{nodes:p=[],setNodes:y,hasDefaultNodes:g,onNodesChange:x,nodeLookup:v,fitViewQueued:_,onNodesChangeMiddlewareMap:S}=r.getState();let C=p;for(const N of f)C=typeof N=="function"?N(C):N;let E=Vh({items:C,lookup:v});for(const N of S.values())E=N(E);g&&y(C),E.length>0?x==null||x(E):_&&window.requestAnimationFrame(()=>{const{fitViewQueued:N,nodes:b,setNodes:k}=r.getState();N&&k(b)})},[]),l=Yh(i),a=O.useCallback(f=>{const{edges:p=[],setEdges:y,hasDefaultEdges:g,onEdgesChange:x,edgeLookup:v}=r.getState();let _=p;for(const S of f)_=typeof S=="function"?S(_):S;g?y(_):x&&x(Vh({items:_,lookup:v}))},[]),u=Yh(a),d=O.useMemo(()=>({nodeQueue:l,edgeQueue:u}),[]);return m.jsx(zm.Provider,{value:d,children:t})}function b_(){const t=O.useContext(zm);if(!t)throw new Error("useBatchContext must be used within a BatchProvider");return t}const T_=t=>!!t.panZoom;function gc(){const t=S_(),r=Oe(),i=b_(),l=be(T_),a=O.useMemo(()=>{const u=x=>r.getState().nodeLookup.get(x),d=x=>{i.nodeQueue.push(x)},f=x=>{i.edgeQueue.push(x)},p=x=>{var N,b;const{nodeLookup:v,nodeOrigin:_}=r.getState(),S=Wh(x)?x:v.get(x.id),C=S.parentId?am(S.position,S.measured,S.parentId,v,_):S.position,E={...S,position:C,width:((N=S.measured)==null?void 0:N.width)??S.width,height:((b=S.measured)==null?void 0:b.height)??S.height};return xi(E)},y=(x,v,_={replace:!1})=>{d(S=>S.map(C=>{if(C.id===x){const E=typeof v=="function"?v(C):v;return _.replace&&Wh(E)?E:{...C,...E}}return C}))},g=(x,v,_={replace:!1})=>{f(S=>S.map(C=>{if(C.id===x){const E=typeof v=="function"?v(C):v;return _.replace&&M_(E)?E:{...C,...E}}return C}))};return{getNodes:()=>r.getState().nodes.map(x=>({...x})),getNode:x=>{var v;return(v=u(x))==null?void 0:v.internals.userNode},getInternalNode:u,getEdges:()=>{const{edges:x=[]}=r.getState();return x.map(v=>({...v}))},getEdge:x=>r.getState().edgeLookup.get(x),setNodes:d,setEdges:f,addNodes:x=>{const v=Array.isArray(x)?x:[x];i.nodeQueue.push(_=>[..._,...v])},addEdges:x=>{const v=Array.isArray(x)?x:[x];i.edgeQueue.push(_=>[..._,...v])},toObject:()=>{const{nodes:x=[],edges:v=[],transform:_}=r.getState(),[S,C,E]=_;return{nodes:x.map(N=>({...N})),edges:v.map(N=>({...N})),viewport:{x:S,y:C,zoom:E}}},deleteElements:async({nodes:x=[],edges:v=[]})=>{const{nodes:_,edges:S,onNodesDelete:C,onEdgesDelete:E,triggerNodeChanges:N,triggerEdgeChanges:b,onDelete:k,onBeforeDelete:j}=r.getState(),{nodes:R,edges:D}=await e1({nodesToRemove:x,edgesToRemove:v,nodes:_,edges:S,onBeforeDelete:j}),H=D.length>0,X=R.length>0;if(H){const V=D.map(Uh);E==null||E(D),b(V)}if(X){const V=R.map(Uh);C==null||C(R),N(V)}return(X||H)&&(k==null||k({nodes:R,edges:D})),{deletedNodes:R,deletedEdges:D}},getIntersectingNodes:(x,v=!0,_)=>{const S=gh(x),C=S?x:p(x),E=_!==void 0;return C?(_||r.getState().nodes).filter(N=>{const b=r.getState().nodeLookup.get(N.id);if(b&&!S&&(N.id===x.id||!b.internals.positionAbsolute))return!1;const k=xi(E?N:b),j=hl(k,C);return v&&j>0||j>=k.width*k.height||j>=C.width*C.height}):[]},isNodeIntersecting:(x,v,_=!0)=>{const C=gh(x)?x:p(x);if(!C)return!1;const E=hl(C,v);return _&&E>0||E>=v.width*v.height||E>=C.width*C.height},updateNode:y,updateNodeData:(x,v,_={replace:!1})=>{y(x,S=>{const C=typeof v=="function"?v(S):v;return _.replace?{...S,data:C}:{...S,data:{...S.data,...C}}},_)},updateEdge:g,updateEdgeData:(x,v,_={replace:!1})=>{g(x,S=>{const C=typeof v=="function"?v(S):v;return _.replace?{...S,data:C}:{...S,data:{...S.data,...C}}},_)},getNodesBounds:x=>{const{nodeLookup:v,nodeOrigin:_}=r.getState();return qw(x,{nodeLookup:v,nodeOrigin:_})},getHandleConnections:({type:x,id:v,nodeId:_})=>{var S;return Array.from(((S=r.getState().connectionLookup.get(`${_}-${x}${v?`-${v}`:""}`))==null?void 0:S.values())??[])},getNodeConnections:({type:x,handleId:v,nodeId:_})=>{var S;return Array.from(((S=r.getState().connectionLookup.get(`${_}${x?v?`-${x}-${v}`:`-${x}`:""}`))==null?void 0:S.values())??[])},fitView:async x=>{const v=r.getState().fitViewResolver??r1();return r.setState({fitViewQueued:!0,fitViewOptions:x,fitViewResolver:v}),i.nodeQueue.push(_=>[..._]),v.promise}}},[]);return O.useMemo(()=>({...a,...t,viewportInitialized:l}),[l])}const Xh=t=>t.selected,R_=typeof window<"u"?window:void 0;function L_({deleteKeyCode:t,multiSelectionKeyCode:r}){const i=Oe(),{deleteElements:l}=gc(),a=_i(t,{actInsideInputWithModifier:!1}),u=_i(r,{target:R_});O.useEffect(()=>{if(a){const{edges:d,nodes:f}=i.getState();l({nodes:f.filter(Xh),edges:d.filter(Xh)}),i.setState({nodesSelectionActive:!1})}},[a]),O.useEffect(()=>{i.setState({multiSelectionActive:u})},[u])}function z_(t){const r=Oe();O.useEffect(()=>{const i=()=>{var a,u,d,f;if(!t.current||!(((u=(a=t.current).checkVisibility)==null?void 0:u.call(a))??!0))return!1;const l=cc(t.current);(l.height===0||l.width===0)&&((f=(d=r.getState()).onError)==null||f.call(d,"004",tn.error004())),r.setState({width:l.width||500,height:l.height||500})};if(t.current){i(),window.addEventListener("resize",i);const l=new ResizeObserver(()=>i());return l.observe(t.current),()=>{window.removeEventListener("resize",i),l&&t.current&&l.unobserve(t.current)}}},[])}const jl={position:"absolute",width:"100%",height:"100%",top:0,left:0},A_=t=>({userSelectionActive:t.userSelectionActive,lib:t.lib,connectionInProgress:t.connection.inProgress});function D_({onPaneContextMenu:t,zoomOnScroll:r=!0,zoomOnPinch:i=!0,panOnScroll:l=!1,panActivationKeyPressed:a,panOnScrollSpeed:u=.5,panOnScrollMode:d=kr.Free,zoomOnDoubleClick:f=!0,panOnDrag:p=!0,defaultViewport:y,translateExtent:g,minZoom:x,maxZoom:v,zoomActivationKeyCode:_,preventScrolling:S=!0,children:C,noWheelClassName:E,noPanClassName:N,onViewportChange:b,isControlledViewport:k,paneClickDistance:j,selectionOnDrag:R}){const D=Oe(),H=O.useRef(null),{userSelectionActive:X,lib:V,connectionInProgress:ee}=be(A_,Ue),Z=_i(_),te=O.useRef();z_(H);const J=O.useCallback(M=>{b==null||b({x:M[0],y:M[1],zoom:M[2]}),k||D.setState({transform:M})},[b,k]);return O.useEffect(()=>{if(H.current){te.current=F1({domNode:H.current,minZoom:x,maxZoom:v,translateExtent:g,viewport:y,onDraggingChange:U=>D.setState(A=>A.paneDragging===U?A:{paneDragging:U}),onPanZoomStart:(U,A)=>{const{onViewportChangeStart:z,onMoveStart:F}=D.getState();F==null||F(U,A),z==null||z(A)},onPanZoom:(U,A)=>{const{onViewportChange:z,onMove:F}=D.getState();F==null||F(U,A),z==null||z(A)},onPanZoomEnd:(U,A)=>{const{onViewportChangeEnd:z,onMoveEnd:F}=D.getState();F==null||F(U,A),z==null||z(A)}});const{x:M,y:W,zoom:B}=te.current.getViewport();return D.setState({panZoom:te.current,transform:[M,W,B],domNode:H.current.closest(".react-flow")}),()=>{var U;(U=te.current)==null||U.destroy()}}},[]),O.useEffect(()=>{var M;(M=te.current)==null||M.update({onPaneContextMenu:t,zoomOnScroll:r,zoomOnPinch:i,panOnScroll:l,panActivationKeyPressed:a,panOnScrollSpeed:u,panOnScrollMode:d,zoomOnDoubleClick:f,panOnDrag:p,zoomActivationKeyPressed:Z,preventScrolling:S,noPanClassName:N,userSelectionActive:X,noWheelClassName:E,lib:V,onTransformChange:J,connectionInProgress:ee,selectionOnDrag:R,paneClickDistance:j})},[t,r,i,l,a,u,d,f,p,Z,S,N,X,E,V,J,ee,R,j]),m.jsx("div",{className:"react-flow__renderer",ref:H,style:jl,children:C})}const $_=t=>({userSelectionActive:t.userSelectionActive,userSelectionRect:t.userSelectionRect});function O_(){const{userSelectionActive:t,userSelectionRect:r}=be($_,Ue);return t&&r?m.jsx("div",{className:"react-flow__selection react-flow__container",style:{width:r.width,height:r.height,transform:`translate(${r.x}px, ${r.y}px)`}}):null}const Au=(t,r)=>i=>{i.target===r.current&&(t==null||t(i))},F_=t=>({userSelectionActive:t.userSelectionActive,elementsSelectable:t.elementsSelectable,dragging:t.paneDragging,panBy:t.panBy,autoPanSpeed:t.autoPanSpeed});function H_({isSelecting:t,selectionKeyPressed:r,selectionMode:i=yi.Full,panOnDrag:l,autoPanOnSelection:a,paneClickDistance:u,selectionOnDrag:d,onSelectionStart:f,onSelectionEnd:p,onPaneClick:y,onPaneContextMenu:g,onPaneScroll:x,onPaneMouseEnter:v,onPaneMouseMove:_,onPaneMouseLeave:S,children:C}){const E=O.useRef(0),N=Oe(),{userSelectionActive:b,elementsSelectable:k,dragging:j,panBy:R,autoPanSpeed:D}=be(F_,Ue),H=k&&(t||b),X=O.useRef(null),V=O.useRef(),ee=O.useRef(new Set),Z=O.useRef(new Set),te=O.useRef(!1),J=O.useRef(!1),M=O.useRef({x:0,y:0}),W=O.useRef(!1),B=Q=>{if(J.current||te.current||N.getState().connection.inProgress){J.current=!1,te.current=!1;return}y==null||y(Q),N.getState().resetSelectedElements(),N.setState({nodesSelectionActive:!1})},U=Q=>{if(Array.isArray(l)&&(l!=null&&l.includes(2))){Q.preventDefault();return}g==null||g(Q)},A=x?Q=>x(Q):void 0,z=Q=>{J.current&&(Q.stopPropagation(),J.current=!1)},F=Q=>{var Re,Xe;if(Q.pointerType==="touch"&&l!==!1&&!r)return;const{domNode:se,transform:fe}=N.getState();if(V.current=se==null?void 0:se.getBoundingClientRect(),!V.current)return;const me=Q.target===X.current;if(!me&&!!Q.target.closest(".nokey")||!t||!(d&&me||r)||Q.button!==0||!Q.isPrimary)return;(Xe=(Re=Q.target)==null?void 0:Re.setPointerCapture)==null||Xe.call(Re,Q.pointerId),J.current=!1;const{x:Ce,y:je}=en(Q.nativeEvent,V.current),Me=Mi({x:Ce,y:je},fe);N.setState({userSelectionRect:{width:0,height:0,startX:Me.x,startY:Me.y,x:Ce,y:je}}),me||(Q.stopPropagation(),Q.preventDefault())};function P(Q,se){const{userSelectionRect:fe}=N.getState();if(!fe)return;const{transform:me,nodeLookup:xe,edgeLookup:pe,connectionLookup:Ce,triggerNodeChanges:je,triggerEdgeChanges:Me,defaultEdgeOptions:Re}=N.getState(),Xe={x:fe.startX,y:fe.startY},{x:rt,y:Ze}=yo(Xe,me),Je={startX:Xe.x,startY:Xe.y,x:Qlt.id)),Z.current=new Set;const At=(Re==null?void 0:Re.selectable)??!0;for(const lt of ee.current){const ht=Ce.get(lt);if(ht)for(const{edgeId:ot}of ht.values()){const pt=pe.get(ot);pt&&(pt.selectable??At)&&Z.current.add(ot)}}if(!yh(Vt,ee.current)){const lt=uo(xe,ee.current,!0);je(lt)}if(!yh(zt,Z.current)){const lt=uo(pe,Z.current);Me(lt)}N.setState({userSelectionRect:Je,userSelectionActive:!0,nodesSelectionActive:!1})}function T(){if(!a||!V.current)return;const[Q,se]=ac(M.current,V.current,D);R({x:Q,y:se}).then(fe=>{if(!J.current||!fe){E.current=requestAnimationFrame(T);return}const{x:me,y:xe}=M.current;P(me,xe),E.current=requestAnimationFrame(T)})}const ne=()=>{cancelAnimationFrame(E.current),E.current=0,W.current=!1};O.useEffect(()=>()=>ne(),[]);const re=Q=>{const{userSelectionRect:se,transform:fe,resetSelectedElements:me}=N.getState();if(!V.current||!se)return;const{x:xe,y:pe}=en(Q.nativeEvent,V.current);M.current={x:xe,y:pe};const Ce=yo({x:se.startX,y:se.startY},fe);if(!J.current){const je=r?0:u;if(Math.hypot(xe-Ce.x,pe-Ce.y)<=je)return;me(),f==null||f(Q)}J.current=!0,W.current||(T(),W.current=!0),P(xe,pe)},ue=Q=>{var se,fe;if(!H){Q.target===X.current&&N.getState().connection.inProgress&&(te.current=!0);return}Q.button===0&&((fe=(se=Q.target)==null?void 0:se.releasePointerCapture)==null||fe.call(se,Q.pointerId),!b&&Q.target===X.current&&N.getState().userSelectionRect&&(B==null||B(Q)),N.setState({userSelectionActive:!1,userSelectionRect:null}),J.current&&(p==null||p(Q),N.setState({nodesSelectionActive:ee.current.size>0})),ne())},ce=Q=>{var se,fe;(fe=(se=Q.target)==null?void 0:se.releasePointerCapture)==null||fe.call(se,Q.pointerId),ne()},de=l===!0||Array.isArray(l)&&l.includes(0);return m.jsxs("div",{className:Qe(["react-flow__pane",{draggable:de,dragging:j,selection:t}]),onClick:H?void 0:Au(B,X),onContextMenu:Au(U,X),onWheel:Au(A,X),onPointerEnter:H?void 0:v,onPointerMove:H?re:_,onPointerUp:ue,onPointerCancel:H?ce:void 0,onPointerDownCapture:H?F:void 0,onClickCapture:H?z:void 0,onPointerLeave:S,ref:X,style:jl,children:[C,m.jsx(O_,{})]})}function Zu({id:t,store:r,unselect:i=!1,nodeRef:l}){const{addSelectedNodes:a,unselectNodesAndEdges:u,multiSelectionActive:d,nodeLookup:f,onError:p}=r.getState(),y=f.get(t);if(!y){p==null||p("012",tn.error012(t));return}r.setState({nodesSelectionActive:!1}),y.selected?(i||y.selected&&d)&&(u({nodes:[y],edges:[]}),requestAnimationFrame(()=>{var g;return(g=l==null?void 0:l.current)==null?void 0:g.blur()})):a([t])}function Am({nodeRef:t,disabled:r=!1,noDragClassName:i,handleSelector:l,nodeId:a,isSelectable:u,nodeClickDistance:d}){const f=Oe(),[p,y]=O.useState(!1),g=O.useRef();return O.useEffect(()=>{if(!r)return g.current=C1({getStoreItems:()=>f.getState(),onNodeMouseDown:x=>{Zu({id:x,store:f,nodeRef:t})},onDragStart:()=>{y(!0)},onDragStop:()=>{y(!1)}}),()=>{var x;(x=g.current)==null||x.destroy(),g.current=void 0}},[r,f,t]),O.useEffect(()=>{r||!t.current||!g.current||g.current.update({noDragClassName:i,handleSelector:l,domNode:t.current,isSelectable:u,nodeId:a,nodeClickDistance:d})},[i,l,r,u,t,a,d]),p}const B_=t=>r=>r.selected&&(r.draggable||t&&typeof r.draggable>"u");function Dm(){const t=Oe();return O.useCallback(i=>{const{nodeExtent:l,snapToGrid:a,snapGrid:u,nodesDraggable:d,onError:f,updateNodePositions:p,nodeLookup:y,nodeOrigin:g}=t.getState(),x=new Map,v=B_(d),_=a?u[0]:5,S=a?u[1]:5,C=i.direction.x*_*i.factor,E=i.direction.y*S*i.factor;for(const[,N]of y){if(!v(N))continue;let b={x:N.internals.positionAbsolute.x+C,y:N.internals.positionAbsolute.y+E};a&&(b=ji(b,u));const{position:k,positionAbsolute:j}=nm({nodeId:N.id,nextPosition:b,nodeLookup:y,nodeExtent:l,nodeOrigin:g,onError:f});N.position=k,N.internals.positionAbsolute=j,x.set(N.id,N)}p(x)},[])}const yc=O.createContext(null),V_=yc.Provider;yc.Consumer;const $m=()=>O.useContext(yc),U_=t=>({connectOnClick:t.connectOnClick,noPanClassName:t.noPanClassName,rfId:t.rfId}),Om=O.createContext(null);function W_({children:t}){const r=be(U_,Ue);return m.jsx(Om.Provider,{value:r,children:t})}function Y_(){const t=O.useContext(Om);if(!t)throw new Error("useHandleConfig must be used within a HandleConfigProvider");return t}const X_={connectingFrom:!1,connectingTo:!1,clickConnecting:!1,isPossibleEndHandle:!0,connectionInProcess:!1,clickConnectionInProcess:!1,valid:!1},G_=(t,r,i)=>l=>{const{connectionClickStartHandle:a,connectionMode:u,connection:d}=l,{fromHandle:f,toHandle:p,isValid:y}=d;if(!f&&!a)return X_;const g=(p==null?void 0:p.nodeId)===t&&(p==null?void 0:p.id)===r&&(p==null?void 0:p.type)===i;return{connectingFrom:(f==null?void 0:f.nodeId)===t&&(f==null?void 0:f.id)===r&&(f==null?void 0:f.type)===i,connectingTo:g,clickConnecting:(a==null?void 0:a.nodeId)===t&&(a==null?void 0:a.id)===r&&(a==null?void 0:a.type)===i,isPossibleEndHandle:u===mo.Strict?(f==null?void 0:f.type)!==i:t!==(f==null?void 0:f.nodeId)||r!==(f==null?void 0:f.id),connectionInProcess:!!f,clickConnectionInProcess:!!a,valid:g&&y}};function Q_({type:t="source",position:r=Se.Top,isValidConnection:i,isConnectable:l=!0,isConnectableStart:a=!0,isConnectableEnd:u=!0,id:d,onConnect:f,children:p,className:y,onMouseDown:g,onTouchStart:x,...v},_){var W,B;const S=d||null,C=t==="target",E=Oe(),N=$m(),{connectOnClick:b,noPanClassName:k,rfId:j}=Y_(),{connectingFrom:R,connectingTo:D,clickConnecting:H,isPossibleEndHandle:X,connectionInProcess:V,clickConnectionInProcess:ee,valid:Z}=be(G_(N,S,t),Ue);N||(B=(W=E.getState()).onError)==null||B.call(W,"010",tn.error010());const te=U=>{const{defaultEdgeOptions:A,onConnect:z,hasDefaultEdges:F}=E.getState(),P={...A,...U};if(F){const{edges:T,setEdges:ne,onError:re}=E.getState();ne(j_(P,T,{onError:re}))}z==null||z(P),f==null||f(P)},J=U=>{if(!N)return;const A=dm(U.nativeEvent);if(a&&(A&&U.button===0||!A)){const z=E.getState();Ku.onPointerDown(U.nativeEvent,{handleDomNode:U.currentTarget,autoPanOnConnect:z.autoPanOnConnect,connectionMode:z.connectionMode,connectionRadius:z.connectionRadius,domNode:z.domNode,nodeLookup:z.nodeLookup,lib:z.lib,isTarget:C,handleId:S,nodeId:N,flowId:z.rfId,panBy:z.panBy,cancelConnection:z.cancelConnection,onConnectStart:z.onConnectStart,onConnectEnd:(...F)=>{var P,T;return(T=(P=E.getState()).onConnectEnd)==null?void 0:T.call(P,...F)},updateConnection:z.updateConnection,onConnect:te,isValidConnection:i||((...F)=>{var P,T;return((T=(P=E.getState()).isValidConnection)==null?void 0:T.call(P,...F))??!0}),getTransform:()=>E.getState().transform,getFromHandle:()=>E.getState().connection.fromHandle,autoPanSpeed:z.autoPanSpeed,dragThreshold:z.connectionDragThreshold})}A?g==null||g(U):x==null||x(U)},M=U=>{const{onClickConnectStart:A,onClickConnectEnd:z,connectionClickStartHandle:F,connectionMode:P,isValidConnection:T,lib:ne,rfId:re,nodeLookup:ue,connection:ce}=E.getState();if(!N||!F&&!a)return;if(!F){A==null||A(U.nativeEvent,{nodeId:N,handleId:S,handleType:t}),E.setState({connectionClickStartHandle:{nodeId:N,type:t,id:S}});return}const de=um(U.target),Q=i||T,{connection:se,isValid:fe}=Ku.isValid(U.nativeEvent,{handle:{nodeId:N,id:S,type:t},connectionMode:P,fromNodeId:F.nodeId,fromHandleId:F.id||null,fromType:F.type,isValidConnection:Q,flowId:re,doc:de,lib:ne,nodeLookup:ue});fe&&se&&te(se);const me=structuredClone(ce);delete me.inProgress,me.toPosition=me.toHandle?me.toHandle.position:null,z==null||z(U,me),E.setState({connectionClickStartHandle:null})};return m.jsx("div",{"data-handleid":S,"data-nodeid":N,"data-handlepos":r,"data-id":`${j}-${N}-${S}-${t}`,className:Qe(["react-flow__handle",`react-flow__handle-${r}`,"nodrag",k,y,{source:!C,target:C,connectable:l,connectablestart:a,connectableend:u,clickconnecting:H,connectingfrom:R,connectingto:D,valid:Z,connectionindicator:l&&(!V||X)&&(V||ee?u:a)}]),onMouseDown:J,onTouchStart:J,onClick:b?M:void 0,ref:_,...v,children:p})}const xo=O.memo(Rm(Q_));function q_({data:t,isConnectable:r,sourcePosition:i=Se.Bottom}){return m.jsxs(m.Fragment,{children:[t==null?void 0:t.label,m.jsx(xo,{type:"source",position:i,isConnectable:r})]})}function K_({data:t,isConnectable:r,targetPosition:i=Se.Top,sourcePosition:l=Se.Bottom}){return m.jsxs(m.Fragment,{children:[m.jsx(xo,{type:"target",position:i,isConnectable:r}),t==null?void 0:t.label,m.jsx(xo,{type:"source",position:l,isConnectable:r})]})}function Z_(){return null}function J_({data:t,isConnectable:r,targetPosition:i=Se.Top}){return m.jsxs(m.Fragment,{children:[m.jsx(xo,{type:"target",position:i,isConnectable:r}),t==null?void 0:t.label]})}const pl={ArrowUp:{x:0,y:-1},ArrowDown:{x:0,y:1},ArrowLeft:{x:-1,y:0},ArrowRight:{x:1,y:0}},Gh={input:q_,default:K_,output:J_,group:Z_};function eS(t){var r,i,l,a;return t.internals.handleBounds===void 0?{width:t.width??t.initialWidth??((r=t.style)==null?void 0:r.width),height:t.height??t.initialHeight??((i=t.style)==null?void 0:i.height)}:{width:t.width??((l=t.style)==null?void 0:l.width),height:t.height??((a=t.style)==null?void 0:a.height)}}const tS=t=>{const{width:r,height:i,x:l,y:a}=Ci(t.nodeLookup,{filter:u=>!!u.selected});return{width:Jt(r)?r:null,height:Jt(i)?i:null,userSelectionActive:t.userSelectionActive,transformString:`translate(${t.transform[0]}px,${t.transform[1]}px) scale(${t.transform[2]}) translate(${l}px,${a}px)`}};function nS({onSelectionContextMenu:t,noPanClassName:r,disableKeyboardA11y:i}){const l=Oe(),{width:a,height:u,transformString:d,userSelectionActive:f}=be(tS,Ue),p=Dm(),y=O.useRef(null);O.useEffect(()=>{var _;i||(_=y.current)==null||_.focus({preventScroll:!0})},[i]);const g=!f&&a!==null&&u!==null;if(Am({nodeRef:y,disabled:!g}),!g)return null;const x=t?_=>{const S=l.getState().nodes.filter(C=>C.selected);t(_,S)}:void 0,v=_=>{Object.prototype.hasOwnProperty.call(pl,_.key)&&(_.preventDefault(),p({direction:pl[_.key],factor:_.shiftKey?4:1}))};return m.jsx("div",{className:Qe(["react-flow__nodesselection","react-flow__container",r]),style:{transform:d},children:m.jsx("div",{ref:y,className:"react-flow__nodesselection-rect",onContextMenu:x,tabIndex:i?void 0:-1,onKeyDown:i?void 0:v,style:{width:a,height:u}})})}const Qh=typeof window<"u"?window:void 0,rS=t=>({nodesSelectionActive:t.nodesSelectionActive,userSelectionActive:t.userSelectionActive});function Fm({children:t,onPaneClick:r,onPaneMouseEnter:i,onPaneMouseMove:l,onPaneMouseLeave:a,onPaneContextMenu:u,onPaneScroll:d,paneClickDistance:f,deleteKeyCode:p,selectionKeyCode:y,selectionOnDrag:g,selectionMode:x,onSelectionStart:v,onSelectionEnd:_,multiSelectionKeyCode:S,panActivationKeyCode:C,zoomActivationKeyCode:E,elementsSelectable:N,zoomOnScroll:b,zoomOnPinch:k,panOnScroll:j,panOnScrollSpeed:R,panOnScrollMode:D,zoomOnDoubleClick:H,panOnDrag:X,autoPanOnSelection:V,defaultViewport:ee,translateExtent:Z,minZoom:te,maxZoom:J,preventScrolling:M,onSelectionContextMenu:W,noWheelClassName:B,noPanClassName:U,disableKeyboardA11y:A,onViewportChange:z,isControlledViewport:F}){const{nodesSelectionActive:P,userSelectionActive:T}=be(rS,Ue),ne=_i(y,{target:Qh}),re=_i(C,{target:Qh}),ue=re||X,ce=re||j,de=g&&ue!==!0,Q=ne||T||de;return L_({deleteKeyCode:p,multiSelectionKeyCode:S}),m.jsx(D_,{onPaneContextMenu:u,elementsSelectable:N,zoomOnScroll:b,zoomOnPinch:k,panOnScroll:ce,panActivationKeyPressed:re,panOnScrollSpeed:R,panOnScrollMode:D,zoomOnDoubleClick:H,panOnDrag:!ne&&ue,defaultViewport:ee,translateExtent:Z,minZoom:te,maxZoom:J,zoomActivationKeyCode:E,preventScrolling:M,noWheelClassName:B,noPanClassName:U,onViewportChange:z,isControlledViewport:F,paneClickDistance:f,selectionOnDrag:de,children:m.jsxs(H_,{onSelectionStart:v,onSelectionEnd:_,onPaneClick:r,onPaneMouseEnter:i,onPaneMouseMove:l,onPaneMouseLeave:a,onPaneContextMenu:u,onPaneScroll:d,panOnDrag:ue,autoPanOnSelection:V,isSelecting:!!Q,selectionMode:x,selectionKeyPressed:ne,paneClickDistance:f,selectionOnDrag:de,children:[t,P&&m.jsx(nS,{onSelectionContextMenu:W,noPanClassName:U,disableKeyboardA11y:A})]})})}Fm.displayName="FlowRenderer";const oS=O.memo(Fm),iS=t=>r=>t?lc(r.nodeLookup,{x:0,y:0,width:r.width,height:r.height},r.transform,!0).map(i=>i.id):Array.from(r.nodeLookup.keys());function sS(t){return be(O.useCallback(iS(t),[t]),Ue)}const lS=t=>t.updateNodeInternals;function aS(){const t=be(lS),[r]=O.useState(()=>typeof ResizeObserver>"u"?null:new ResizeObserver(i=>{const l=new Map;i.forEach(a=>{const u=a.target.getAttribute("data-id");l.set(u,{id:u,nodeElement:a.target,force:!0})}),t(l)}));return O.useEffect(()=>()=>{r==null||r.disconnect()},[r]),r}function uS({node:t,nodeType:r,hasDimensions:i,resizeObserver:l}){const a=Oe(),u=O.useRef(null),d=O.useRef(null),f=O.useRef(t.sourcePosition),p=O.useRef(t.targetPosition),y=O.useRef(r),g=i&&!!t.internals.handleBounds;return O.useEffect(()=>{u.current&&!t.hidden&&(!g||d.current!==u.current)&&(d.current&&(l==null||l.unobserve(d.current)),l==null||l.observe(u.current),d.current=u.current)},[g,t.hidden]),O.useEffect(()=>()=>{d.current&&(l==null||l.unobserve(d.current),d.current=null)},[]),O.useEffect(()=>{if(u.current){const x=y.current!==r,v=f.current!==t.sourcePosition,_=p.current!==t.targetPosition;(x||v||_)&&(y.current=r,f.current=t.sourcePosition,p.current=t.targetPosition,a.getState().updateNodeInternals(new Map([[t.id,{id:t.id,nodeElement:u.current,force:!0}]])))}},[t.id,r,t.sourcePosition,t.targetPosition]),u}function cS({id:t,onClick:r,onMouseEnter:i,onMouseMove:l,onMouseLeave:a,onContextMenu:u,onDoubleClick:d,nodesDraggable:f,elementsSelectable:p,nodesConnectable:y,nodesFocusable:g,resizeObserver:x,noDragClassName:v,noPanClassName:_,disableKeyboardA11y:S,rfId:C,nodeTypes:E,nodeClickDistance:N,onError:b}){const{node:k,internals:j,isParent:R}=be(Q=>{const se=Q.nodeLookup.get(t),fe=Q.parentLookup.has(t);return{node:se,internals:se.internals,isParent:fe}},Ue);let D=k.type||"default",H=(E==null?void 0:E[D])||Gh[D];H===void 0&&(b==null||b("003",tn.error003(D)),D="default",H=(E==null?void 0:E.default)||Gh.default);const X=!!(k.draggable||f&&typeof k.draggable>"u"),V=!!(k.selectable||p&&typeof k.selectable>"u"),ee=!!(k.connectable||y&&typeof k.connectable>"u"),Z=!!(k.focusable||g&&typeof k.focusable>"u"),te=Oe(),J=lm(k),M=uS({node:k,nodeType:D,hasDimensions:J,resizeObserver:x}),W=Am({nodeRef:M,disabled:k.hidden||!X,noDragClassName:v,handleSelector:k.dragHandle,nodeId:t,isSelectable:V,nodeClickDistance:N}),B=Dm();if(k.hidden)return null;const U=rn(k),A=eS(k),z=V||X||r||i||l||a,F=i?Q=>i(Q,{...j.userNode}):void 0,P=l?Q=>l(Q,{...j.userNode}):void 0,T=a?Q=>a(Q,{...j.userNode}):void 0,ne=u?Q=>u(Q,{...j.userNode}):void 0,re=d?Q=>d(Q,{...j.userNode}):void 0,ue=Q=>{const{selectNodesOnDrag:se,nodeDragThreshold:fe}=te.getState();V&&(!se||!X||fe>0)&&Zu({id:t,store:te,nodeRef:M}),r&&r(Q,{...j.userNode})},ce=Q=>{if(!(cm(Q.nativeEvent)||S)){if(Kp.includes(Q.key)&&V){const se=Q.key==="Escape";Zu({id:t,store:te,unselect:se,nodeRef:M})}else if(X&&k.selected&&Object.prototype.hasOwnProperty.call(pl,Q.key)){Q.preventDefault();const{ariaLabelConfig:se}=te.getState();te.setState({ariaLiveMessage:se["node.a11yDescription.ariaLiveMessage"]({direction:Q.key.replace("Arrow","").toLowerCase(),x:~~j.positionAbsolute.x,y:~~j.positionAbsolute.y})}),B({direction:pl[Q.key],factor:Q.shiftKey?4:1})}}},de=()=>{var Ce;if(S||!((Ce=M.current)!=null&&Ce.matches(":focus-visible")))return;const{transform:Q,width:se,height:fe,autoPanOnNodeFocus:me,setCenter:xe}=te.getState();if(!me)return;lc(new Map([[t,k]]),{x:0,y:0,width:se,height:fe},Q,!0).length>0||xe(k.position.x+U.width/2,k.position.y+U.height/2,{zoom:Q[2]})};return m.jsx("div",{className:Qe(["react-flow__node",`react-flow__node-${D}`,{[_]:X},k.className,{selected:k.selected,selectable:V,parent:R,draggable:X,dragging:W}]),ref:M,style:{zIndex:j.z,transform:`translate(${j.positionAbsolute.x}px,${j.positionAbsolute.y}px)`,pointerEvents:z?"all":"none",visibility:J?"visible":"hidden",...k.style,...A},"data-id":t,"data-testid":`rf__node-${t}`,onMouseEnter:F,onMouseMove:P,onMouseLeave:T,onContextMenu:ne,onClick:ue,onDoubleClick:re,onKeyDown:Z?ce:void 0,tabIndex:Z?0:void 0,onFocus:Z?de:void 0,role:k.ariaRole??(Z?"group":void 0),"aria-roledescription":"node","aria-describedby":S?void 0:`${Pm}-${C}`,"aria-label":k.ariaLabel,...k.domAttributes,children:m.jsx(V_,{value:t,children:m.jsx(H,{id:t,data:k.data,type:D,positionAbsoluteX:j.positionAbsolute.x,positionAbsoluteY:j.positionAbsolute.y,selected:k.selected??!1,selectable:V,draggable:X,deletable:k.deletable??!0,isConnectable:ee,sourcePosition:k.sourcePosition,targetPosition:k.targetPosition,dragging:W,dragHandle:k.dragHandle,zIndex:j.z,parentId:k.parentId,...U})})})}var dS=O.memo(cS);const fS=t=>({nodesConnectable:t.nodesConnectable,nodesFocusable:t.nodesFocusable,elementsSelectable:t.elementsSelectable,onError:t.onError});function Hm(t){const{nodesConnectable:r,nodesFocusable:i,elementsSelectable:l,onError:a}=be(fS,Ue),u=sS(t.onlyRenderVisibleElements),d=aS();return m.jsx("div",{className:"react-flow__nodes",style:jl,children:u.map(f=>m.jsx(dS,{id:f,nodeTypes:t.nodeTypes,nodeExtent:t.nodeExtent,onClick:t.onNodeClick,onMouseEnter:t.onNodeMouseEnter,onMouseMove:t.onNodeMouseMove,onMouseLeave:t.onNodeMouseLeave,onContextMenu:t.onNodeContextMenu,onDoubleClick:t.onNodeDoubleClick,noDragClassName:t.noDragClassName,noPanClassName:t.noPanClassName,rfId:t.rfId,disableKeyboardA11y:t.disableKeyboardA11y,resizeObserver:d,nodesDraggable:t.nodesDraggable??!0,nodesConnectable:r,nodesFocusable:i,elementsSelectable:l,nodeClickDistance:t.nodeClickDistance,onError:a},f))})}Hm.displayName="NodeRenderer";const hS=O.memo(Hm);function pS(t){return be(O.useCallback(i=>{if(!t)return i.edges.map(a=>a.id);const l=[];if(i.width&&i.height)for(const a of i.edges){const u=i.nodeLookup.get(a.source),d=i.nodeLookup.get(a.target);u&&d&&l1({sourceNode:u,targetNode:d,width:i.width,height:i.height,transform:i.transform})&&l.push(a.id)}return l},[t]),Ue)}const mS=({color:t="none",strokeWidth:r=1})=>{const i={strokeWidth:r,...t&&{stroke:t}};return m.jsx("polyline",{className:"arrow",style:i,strokeLinecap:"round",fill:"none",strokeLinejoin:"round",points:"-5,-4 0,0 -5,4"})},gS=({color:t="none",strokeWidth:r=1})=>{const i={strokeWidth:r,...t&&{stroke:t,fill:t}};return m.jsx("polyline",{className:"arrowclosed",style:i,strokeLinecap:"round",strokeLinejoin:"round",points:"-5,-4 0,0 -5,4 -5,-4"})},qh={[vi.Arrow]:mS,[vi.ArrowClosed]:gS};function yS(t){const r=Oe();return O.useMemo(()=>{var a,u;return Object.prototype.hasOwnProperty.call(qh,t)?qh[t]:((u=(a=r.getState()).onError)==null||u.call(a,"009",tn.error009(t)),null)},[t])}const vS=({id:t,type:r,color:i,width:l=12.5,height:a=12.5,markerUnits:u="strokeWidth",strokeWidth:d,orient:f="auto-start-reverse"})=>{const p=yS(r);return p?m.jsx("marker",{className:"react-flow__arrowhead",id:t,markerWidth:`${l}`,markerHeight:`${a}`,viewBox:"-10 -10 20 20",markerUnits:u,orient:f,refX:"0",refY:"0",children:m.jsx(p,{color:i,strokeWidth:d})}):null},Bm=({defaultColor:t,rfId:r})=>{const i=be(u=>u.edges),l=be(u=>u.defaultEdgeOptions),a=O.useMemo(()=>m1(i,{id:r,defaultColor:t,defaultMarkerStart:l==null?void 0:l.markerStart,defaultMarkerEnd:l==null?void 0:l.markerEnd}),[i,l,r,t]);return a.length?m.jsx("svg",{className:"react-flow__marker","aria-hidden":"true",children:m.jsx("defs",{children:a.map(u=>m.jsx(vS,{id:u.id,type:u.type,color:u.color,width:u.width,height:u.height,markerUnits:u.markerUnits,strokeWidth:u.strokeWidth,orient:u.orient},u.id))})}):null};Bm.displayName="MarkerDefinitions";var xS=O.memo(Bm);function Vm({x:t,y:r,label:i,labelStyle:l,labelShowBg:a=!0,labelBgStyle:u,labelBgPadding:d=[2,4],labelBgBorderRadius:f=2,children:p,className:y,...g}){const[x,v]=O.useState({x:1,y:0,width:0,height:0}),_=Qe(["react-flow__edge-textwrapper",y]),S=O.useRef(null);return O.useEffect(()=>{if(S.current){const C=S.current.getBBox();v({x:C.x,y:C.y,width:C.width,height:C.height})}},[i]),i?m.jsxs("g",{transform:`translate(${t-x.width/2} ${r-x.height/2})`,className:_,visibility:x.width?"visible":"hidden",...g,children:[a&&m.jsx("rect",{width:x.width+2*d[0],x:-d[0],y:-d[1],height:x.height+2*d[1],className:"react-flow__edge-textbg",style:u,rx:f,ry:f}),m.jsx("text",{className:"react-flow__edge-text",y:x.height/2,dy:"0.3em",ref:S,style:l,children:i}),p]}):null}Vm.displayName="EdgeText";const wS=O.memo(Vm);function Ml({path:t,labelX:r,labelY:i,label:l,labelStyle:a,labelShowBg:u,labelBgStyle:d,labelBgPadding:f,labelBgBorderRadius:p,interactionWidth:y=20,...g}){return m.jsxs(m.Fragment,{children:[m.jsx("path",{...g,d:t,fill:"none",className:Qe(["react-flow__edge-path",g.className])}),y?m.jsx("path",{d:t,fill:"none",strokeOpacity:0,strokeWidth:y,className:"react-flow__edge-interaction"}):null,l&&Jt(r)&&Jt(i)?m.jsx(wS,{x:r,y:i,label:l,labelStyle:a,labelShowBg:u,labelBgStyle:d,labelBgPadding:f,labelBgBorderRadius:p}):null]})}function Kh({pos:t,x1:r,y1:i,x2:l,y2:a}){return t===Se.Left||t===Se.Right?[.5*(r+l),i]:[r,.5*(i+a)]}function Um({sourceX:t,sourceY:r,sourcePosition:i=Se.Bottom,targetX:l,targetY:a,targetPosition:u=Se.Top}){const[d,f]=Kh({pos:i,x1:t,y1:r,x2:l,y2:a}),[p,y]=Kh({pos:u,x1:l,y1:a,x2:t,y2:r}),[g,x,v,_]=fm({sourceX:t,sourceY:r,targetX:l,targetY:a,sourceControlX:d,sourceControlY:f,targetControlX:p,targetControlY:y});return[`M${t},${r} C${d},${f} ${p},${y} ${l},${a}`,g,x,v,_]}function Wm(t){return O.memo(({id:r,sourceX:i,sourceY:l,targetX:a,targetY:u,sourcePosition:d,targetPosition:f,label:p,labelStyle:y,labelShowBg:g,labelBgStyle:x,labelBgPadding:v,labelBgBorderRadius:_,style:S,markerEnd:C,markerStart:E,interactionWidth:N})=>{const[b,k,j]=Um({sourceX:i,sourceY:l,sourcePosition:d,targetX:a,targetY:u,targetPosition:f}),R=t.isInternal?void 0:r;return m.jsx(Ml,{id:R,path:b,labelX:k,labelY:j,label:p,labelStyle:y,labelShowBg:g,labelBgStyle:x,labelBgPadding:v,labelBgBorderRadius:_,style:S,markerEnd:C,markerStart:E,interactionWidth:N})})}const _S=Wm({isInternal:!1}),Ym=Wm({isInternal:!0});_S.displayName="SimpleBezierEdge";Ym.displayName="SimpleBezierEdgeInternal";function Xm(t){return O.memo(({id:r,sourceX:i,sourceY:l,targetX:a,targetY:u,label:d,labelStyle:f,labelShowBg:p,labelBgStyle:y,labelBgPadding:g,labelBgBorderRadius:x,style:v,sourcePosition:_=Se.Bottom,targetPosition:S=Se.Top,markerEnd:C,markerStart:E,pathOptions:N,interactionWidth:b})=>{const[k,j,R]=Gu({sourceX:i,sourceY:l,sourcePosition:_,targetX:a,targetY:u,targetPosition:S,borderRadius:N==null?void 0:N.borderRadius,offset:N==null?void 0:N.offset,stepPosition:N==null?void 0:N.stepPosition}),D=t.isInternal?void 0:r;return m.jsx(Ml,{id:D,path:k,labelX:j,labelY:R,label:d,labelStyle:f,labelShowBg:p,labelBgStyle:y,labelBgPadding:g,labelBgBorderRadius:x,style:v,markerEnd:C,markerStart:E,interactionWidth:b})})}const Gm=Xm({isInternal:!1}),Qm=Xm({isInternal:!0});Gm.displayName="SmoothStepEdge";Qm.displayName="SmoothStepEdgeInternal";function qm(t){return O.memo(({id:r,...i})=>{var a;const l=t.isInternal?void 0:r;return m.jsx(Gm,{...i,id:l,pathOptions:O.useMemo(()=>{var u;return{borderRadius:0,offset:(u=i.pathOptions)==null?void 0:u.offset}},[(a=i.pathOptions)==null?void 0:a.offset])})})}const SS=qm({isInternal:!1}),Km=qm({isInternal:!0});SS.displayName="StepEdge";Km.displayName="StepEdgeInternal";function Zm(t){return O.memo(({id:r,sourceX:i,sourceY:l,targetX:a,targetY:u,label:d,labelStyle:f,labelShowBg:p,labelBgStyle:y,labelBgPadding:g,labelBgBorderRadius:x,style:v,markerEnd:_,markerStart:S,interactionWidth:C})=>{const[E,N,b]=mm({sourceX:i,sourceY:l,targetX:a,targetY:u}),k=t.isInternal?void 0:r;return m.jsx(Ml,{id:k,path:E,labelX:N,labelY:b,label:d,labelStyle:f,labelShowBg:p,labelBgStyle:y,labelBgPadding:g,labelBgBorderRadius:x,style:v,markerEnd:_,markerStart:S,interactionWidth:C})})}const kS=Zm({isInternal:!1}),Jm=Zm({isInternal:!0});kS.displayName="StraightEdge";Jm.displayName="StraightEdgeInternal";function eg(t){return O.memo(({id:r,sourceX:i,sourceY:l,targetX:a,targetY:u,sourcePosition:d=Se.Bottom,targetPosition:f=Se.Top,label:p,labelStyle:y,labelShowBg:g,labelBgStyle:x,labelBgPadding:v,labelBgBorderRadius:_,style:S,markerEnd:C,markerStart:E,pathOptions:N,interactionWidth:b})=>{const[k,j,R]=hm({sourceX:i,sourceY:l,sourcePosition:d,targetX:a,targetY:u,targetPosition:f,curvature:N==null?void 0:N.curvature}),D=t.isInternal?void 0:r;return m.jsx(Ml,{id:D,path:k,labelX:j,labelY:R,label:p,labelStyle:y,labelShowBg:g,labelBgStyle:x,labelBgPadding:v,labelBgBorderRadius:_,style:S,markerEnd:C,markerStart:E,interactionWidth:b})})}const ES=eg({isInternal:!1}),tg=eg({isInternal:!0});ES.displayName="BezierEdge";tg.displayName="BezierEdgeInternal";const Zh={default:tg,straight:Jm,step:Km,smoothstep:Qm,simplebezier:Ym},Jh={sourceX:null,sourceY:null,targetX:null,targetY:null,sourcePosition:null,targetPosition:null,zIndex:void 0},NS=(t,r,i)=>i===Se.Left?t-r:i===Se.Right?t+r:t,CS=(t,r,i)=>i===Se.Top?t-r:i===Se.Bottom?t+r:t,ep="react-flow__edgeupdater";function tp({position:t,centerX:r,centerY:i,radius:l=10,onMouseDown:a,onMouseEnter:u,onMouseOut:d,type:f}){return m.jsx("circle",{onMouseDown:a,onMouseEnter:u,onMouseOut:d,className:Qe([ep,`${ep}-${f}`]),cx:NS(r,l,t),cy:CS(i,l,t),r:l,stroke:"transparent",fill:"transparent"})}function jS({isReconnectable:t,reconnectRadius:r,edge:i,sourceX:l,sourceY:a,targetX:u,targetY:d,sourcePosition:f,targetPosition:p,onReconnect:y,onReconnectStart:g,onReconnectEnd:x,setReconnecting:v,setUpdateHover:_}){const S=Oe(),C=(j,R)=>{if(j.button!==0)return;const{autoPanOnConnect:D,domNode:H,connectionMode:X,connectionRadius:V,lib:ee,onConnectStart:Z,cancelConnection:te,nodeLookup:J,rfId:M,panBy:W,updateConnection:B}=S.getState(),U=R.type==="target",A=(P,T)=>{v(!1),x==null||x(P,i,R.type,T)},z=P=>y==null?void 0:y(i,P),F=(P,T)=>{v(!0),g==null||g(j,i,R.type),Z==null||Z(P,T)};Ku.onPointerDown(j.nativeEvent,{autoPanOnConnect:D,connectionMode:X,connectionRadius:V,domNode:H,handleId:R.id,nodeId:R.nodeId,nodeLookup:J,isTarget:U,edgeUpdaterType:R.type,lib:ee,flowId:M,cancelConnection:te,panBy:W,isValidConnection:(...P)=>{var T,ne;return((ne=(T=S.getState()).isValidConnection)==null?void 0:ne.call(T,...P))??!0},onConnect:z,onConnectStart:F,onConnectEnd:(...P)=>{var T,ne;return(ne=(T=S.getState()).onConnectEnd)==null?void 0:ne.call(T,...P)},onReconnectEnd:A,updateConnection:B,getTransform:()=>S.getState().transform,getFromHandle:()=>S.getState().connection.fromHandle,dragThreshold:S.getState().connectionDragThreshold,handleDomNode:j.currentTarget})},E=j=>C(j,{nodeId:i.target,id:i.targetHandle??null,type:"target"}),N=j=>C(j,{nodeId:i.source,id:i.sourceHandle??null,type:"source"}),b=()=>_(!0),k=()=>_(!1);return m.jsxs(m.Fragment,{children:[(t===!0||t==="source")&&m.jsx(tp,{position:f,centerX:l,centerY:a,radius:r,onMouseDown:E,onMouseEnter:b,onMouseOut:k,type:"source"}),(t===!0||t==="target")&&m.jsx(tp,{position:p,centerX:u,centerY:d,radius:r,onMouseDown:N,onMouseEnter:b,onMouseOut:k,type:"target"})]})}function MS({id:t,edgesFocusable:r,edgesReconnectable:i,elementsSelectable:l,onClick:a,onDoubleClick:u,onContextMenu:d,onMouseEnter:f,onMouseMove:p,onMouseLeave:y,reconnectRadius:g,onReconnect:x,onReconnectStart:v,onReconnectEnd:_,rfId:S,edgeTypes:C,noPanClassName:E,onError:N,disableKeyboardA11y:b}){let k=be(xe=>xe.edgeLookup.get(t));const j=be(xe=>xe.defaultEdgeOptions);k=j?{...j,...k}:k;let R=k.type||"default",D=(C==null?void 0:C[R])||Zh[R];D===void 0&&(N==null||N("011",tn.error011(R)),R="default",D=(C==null?void 0:C.default)||Zh.default);const H=!!(k.focusable||r&&typeof k.focusable>"u"),X=typeof x<"u"&&(k.reconnectable||i&&typeof k.reconnectable>"u"),V=!!(k.selectable||l&&typeof k.selectable>"u"),ee=O.useRef(null),[Z,te]=O.useState(!1),[J,M]=O.useState(!1),W=Oe(),{zIndex:B=k.zIndex,sourceX:U,sourceY:A,targetX:z,targetY:F,sourcePosition:P,targetPosition:T}=be(O.useCallback(xe=>{const pe=xe.nodeLookup.get(k.source),Ce=xe.nodeLookup.get(k.target);if(!pe||!Ce)return Jh;const je=p1({id:t,sourceNode:pe,targetNode:Ce,sourceHandle:k.sourceHandle||null,targetHandle:k.targetHandle||null,connectionMode:xe.connectionMode,onError:N}),Me=s1({selected:k.selected,zIndex:k.zIndex,sourceNode:pe,targetNode:Ce,elevateOnSelect:xe.elevateEdgesOnSelect,zIndexMode:xe.zIndexMode});return{...je||Jh,zIndex:Me}},[k.source,k.target,k.sourceHandle,k.targetHandle,k.selected,k.zIndex,N]),Ue),ne=O.useMemo(()=>k.markerStart?`url('#${Qu(k.markerStart,S)}')`:void 0,[k.markerStart,S]),re=O.useMemo(()=>k.markerEnd?`url('#${Qu(k.markerEnd,S)}')`:void 0,[k.markerEnd,S]);if(k.hidden||U===null||A===null||z===null||F===null)return null;const ue=xe=>{var Me;const{addSelectedEdges:pe,unselectNodesAndEdges:Ce,multiSelectionActive:je}=W.getState();V&&(W.setState({nodesSelectionActive:!1}),k.selected&&je?(Ce({nodes:[],edges:[k]}),(Me=ee.current)==null||Me.blur()):pe([t])),a&&a(xe,k)},ce=u?xe=>{u(xe,{...k})}:void 0,de=d?xe=>{d(xe,{...k})}:void 0,Q=f?xe=>{f(xe,{...k})}:void 0,se=p?xe=>{p(xe,{...k})}:void 0,fe=y?xe=>{y(xe,{...k})}:void 0,me=xe=>{var pe;if(!b&&Kp.includes(xe.key)&&V){const{unselectNodesAndEdges:Ce,addSelectedEdges:je}=W.getState();xe.key==="Escape"?((pe=ee.current)==null||pe.blur(),Ce({edges:[k]})):je([t])}};return m.jsx("svg",{style:{zIndex:B},children:m.jsxs("g",{className:Qe(["react-flow__edge",`react-flow__edge-${R}`,k.className,E,{selected:k.selected,animated:k.animated,inactive:!V&&!a,updating:Z,selectable:V}]),onClick:ue,onDoubleClick:ce,onContextMenu:de,onMouseEnter:Q,onMouseMove:se,onMouseLeave:fe,onKeyDown:H?me:void 0,tabIndex:H?0:void 0,role:k.ariaRole??(H?"group":"img"),"aria-roledescription":"edge","data-id":t,"data-testid":`rf__edge-${t}`,"aria-label":k.ariaLabel===null?void 0:k.ariaLabel||`Edge from ${k.source} to ${k.target}`,"aria-describedby":H?`${Im}-${S}`:void 0,ref:ee,...k.domAttributes,children:[!J&&m.jsx(D,{id:t,source:k.source,target:k.target,type:k.type,selected:k.selected,animated:k.animated,selectable:V,deletable:k.deletable??!0,label:k.label,labelStyle:k.labelStyle,labelShowBg:k.labelShowBg,labelBgStyle:k.labelBgStyle,labelBgPadding:k.labelBgPadding,labelBgBorderRadius:k.labelBgBorderRadius,sourceX:U,sourceY:A,targetX:z,targetY:F,sourcePosition:P,targetPosition:T,data:k.data,style:k.style,sourceHandleId:k.sourceHandle,targetHandleId:k.targetHandle,markerStart:ne,markerEnd:re,pathOptions:"pathOptions"in k?k.pathOptions:void 0,interactionWidth:k.interactionWidth}),X&&m.jsx(jS,{edge:k,isReconnectable:X,reconnectRadius:g,onReconnect:x,onReconnectStart:v,onReconnectEnd:_,sourceX:U,sourceY:A,targetX:z,targetY:F,sourcePosition:P,targetPosition:T,setUpdateHover:te,setReconnecting:M})]})})}var PS=O.memo(MS);const IS=t=>({edgesFocusable:t.edgesFocusable,edgesReconnectable:t.edgesReconnectable,elementsSelectable:t.elementsSelectable,connectionMode:t.connectionMode,onError:t.onError});function ng({defaultMarkerColor:t,onlyRenderVisibleElements:r,rfId:i,edgeTypes:l,noPanClassName:a,onReconnect:u,onEdgeContextMenu:d,onEdgeMouseEnter:f,onEdgeMouseMove:p,onEdgeMouseLeave:y,onEdgeClick:g,reconnectRadius:x,onEdgeDoubleClick:v,onReconnectStart:_,onReconnectEnd:S,disableKeyboardA11y:C}){const{edgesFocusable:E,edgesReconnectable:N,elementsSelectable:b,onError:k}=be(IS,Ue),j=pS(r);return m.jsxs("div",{className:"react-flow__edges",children:[m.jsx(xS,{defaultColor:t,rfId:i}),j.map(R=>m.jsx(PS,{id:R,edgesFocusable:E,edgesReconnectable:N,elementsSelectable:b,noPanClassName:a,onReconnect:u,onContextMenu:d,onMouseEnter:f,onMouseMove:p,onMouseLeave:y,onClick:g,reconnectRadius:x,onDoubleClick:v,onReconnectStart:_,onReconnectEnd:S,rfId:i,onError:k,edgeTypes:l,disableKeyboardA11y:C},R))]})}ng.displayName="EdgeRenderer";const bS=O.memo(ng),np=t=>`translate(${t[0]}px,${t[1]}px) scale(${t[2]})`;function TS({children:t}){const r=Oe(),i=O.useRef(null),[l]=O.useState(()=>r.getState().transform);return Lm(()=>{let a=null;const u=()=>{const d=r.getState().transform;a&&d[0]===a[0]&&d[1]===a[1]&&d[2]===a[2]||(a=d,i.current&&(i.current.style.transform=np(d)))};return u(),r.subscribe(u)},[r]),m.jsx("div",{ref:i,className:"react-flow__viewport xyflow__viewport react-flow__container",style:{transform:np(l)},children:t})}function RS(t){const r=gc(),i=O.useRef(!1);O.useEffect(()=>{!i.current&&r.viewportInitialized&&t&&(setTimeout(()=>t(r),1),i.current=!0)},[t,r.viewportInitialized])}const LS=t=>{var r;return(r=t.panZoom)==null?void 0:r.syncViewport};function zS(t){const r=be(LS),i=Oe();return O.useEffect(()=>{t&&(r==null||r(t),i.setState({transform:[t.x,t.y,t.zoom]}))},[t,r]),null}function AS(t){return t.connection.inProgress?{...t.connection,to:Mi(t.connection.to,t.transform)}:{...t.connection}}function DS(t){return AS}function $S(t){const r=DS();return be(r,Ue)}const OS=t=>({nodesConnectable:t.nodesConnectable,isValid:t.connection.isValid,inProgress:t.connection.inProgress,width:t.width,height:t.height});function FS({containerStyle:t,style:r,type:i,component:l}){const{nodesConnectable:a,width:u,height:d,isValid:f,inProgress:p}=be(OS,Ue);return!(u&&a&&p)?null:m.jsx("svg",{style:t,width:u,height:d,className:"react-flow__connectionline react-flow__container",children:m.jsx("g",{className:Qe(["react-flow__connection",em(f)]),children:m.jsx(rg,{style:r,type:i,CustomComponent:l,isValid:f})})})}const rg=({style:t,type:r=Zn.Bezier,CustomComponent:i,isValid:l})=>{const{inProgress:a,from:u,fromNode:d,fromHandle:f,fromPosition:p,to:y,toNode:g,toHandle:x,toPosition:v,pointer:_}=$S();if(!a)return;if(i)return m.jsx(i,{connectionLineType:r,connectionLineStyle:t,fromNode:d,fromHandle:f,fromX:u.x,fromY:u.y,toX:y.x,toY:y.y,fromPosition:p,toPosition:v,connectionStatus:em(l),toNode:g,toHandle:x,pointer:_});let S="";const C={sourceX:u.x,sourceY:u.y,sourcePosition:p,targetX:y.x,targetY:y.y,targetPosition:v};switch(r){case Zn.Bezier:[S]=hm(C);break;case Zn.SimpleBezier:[S]=Um(C);break;case Zn.Step:[S]=Gu({...C,borderRadius:0});break;case Zn.SmoothStep:[S]=Gu(C);break;default:[S]=mm(C)}return m.jsx("path",{d:S,fill:"none",className:"react-flow__connection-path",style:t})};rg.displayName="ConnectionLine";const HS={};function rp(t=HS){O.useRef(t),Oe(),O.useEffect(()=>{},[t])}function BS(){Oe(),O.useRef(!1),O.useEffect(()=>{},[])}function og({nodeTypes:t,edgeTypes:r,onInit:i,onNodeClick:l,onEdgeClick:a,onNodeDoubleClick:u,onEdgeDoubleClick:d,onNodeMouseEnter:f,onNodeMouseMove:p,onNodeMouseLeave:y,onNodeContextMenu:g,onSelectionContextMenu:x,onSelectionStart:v,onSelectionEnd:_,connectionLineType:S,connectionLineStyle:C,connectionLineComponent:E,connectionLineContainerStyle:N,selectionKeyCode:b,selectionOnDrag:k,selectionMode:j,multiSelectionKeyCode:R,panActivationKeyCode:D,zoomActivationKeyCode:H,deleteKeyCode:X,onlyRenderVisibleElements:V,elementsSelectable:ee,defaultViewport:Z,translateExtent:te,minZoom:J,maxZoom:M,preventScrolling:W,defaultMarkerColor:B,zoomOnScroll:U,zoomOnPinch:A,panOnScroll:z,panOnScrollSpeed:F,panOnScrollMode:P,zoomOnDoubleClick:T,panOnDrag:ne,autoPanOnSelection:re,onPaneClick:ue,onPaneMouseEnter:ce,onPaneMouseMove:de,onPaneMouseLeave:Q,onPaneScroll:se,onPaneContextMenu:fe,paneClickDistance:me,nodeClickDistance:xe,onEdgeContextMenu:pe,onEdgeMouseEnter:Ce,onEdgeMouseMove:je,onEdgeMouseLeave:Me,reconnectRadius:Re,onReconnect:Xe,onReconnectStart:rt,onReconnectEnd:Ze,noDragClassName:Je,noWheelClassName:Vt,noPanClassName:zt,disableKeyboardA11y:At,nodeExtent:lt,rfId:ht,viewport:ot,onViewportChange:pt,nodesDraggable:Cn}){return rp(t),rp(r),BS(),RS(i),zS(ot),m.jsx(oS,{onPaneClick:ue,onPaneMouseEnter:ce,onPaneMouseMove:de,onPaneMouseLeave:Q,onPaneContextMenu:fe,onPaneScroll:se,paneClickDistance:me,deleteKeyCode:X,selectionKeyCode:b,selectionOnDrag:k,selectionMode:j,onSelectionStart:v,onSelectionEnd:_,multiSelectionKeyCode:R,panActivationKeyCode:D,zoomActivationKeyCode:H,elementsSelectable:ee,zoomOnScroll:U,zoomOnPinch:A,zoomOnDoubleClick:T,panOnScroll:z,panOnScrollSpeed:F,panOnScrollMode:P,panOnDrag:ne,autoPanOnSelection:re,defaultViewport:Z,translateExtent:te,minZoom:J,maxZoom:M,onSelectionContextMenu:x,preventScrolling:W,noDragClassName:Je,noWheelClassName:Vt,noPanClassName:zt,disableKeyboardA11y:At,onViewportChange:pt,isControlledViewport:!!ot,children:m.jsxs(TS,{children:[m.jsx(bS,{edgeTypes:r,onEdgeClick:a,onEdgeDoubleClick:d,onReconnect:Xe,onReconnectStart:rt,onReconnectEnd:Ze,onlyRenderVisibleElements:V,onEdgeContextMenu:pe,onEdgeMouseEnter:Ce,onEdgeMouseMove:je,onEdgeMouseLeave:Me,reconnectRadius:Re,defaultMarkerColor:B,noPanClassName:zt,disableKeyboardA11y:At,rfId:ht}),m.jsx(FS,{style:C,type:S,component:E,containerStyle:N}),m.jsx("div",{className:"react-flow__edgelabel-renderer"}),m.jsx(hS,{nodeTypes:t,onNodeClick:l,onNodeDoubleClick:u,onNodeMouseEnter:f,onNodeMouseMove:p,onNodeMouseLeave:y,onNodeContextMenu:g,nodeClickDistance:xe,onlyRenderVisibleElements:V,noPanClassName:zt,noDragClassName:Je,disableKeyboardA11y:At,nodeExtent:lt,rfId:ht,nodesDraggable:Cn}),m.jsx("div",{className:"react-flow__viewport-portal"})]})})}og.displayName="GraphView";const VS=O.memo(og),US=sm(),op=({nodes:t,edges:r,defaultNodes:i,defaultEdges:l,width:a,height:u,fitView:d,fitViewOptions:f,minZoom:p=.5,maxZoom:y=2,nodeOrigin:g,nodeExtent:x,zIndexMode:v="basic"}={})=>{const _=new Map,S=new Map,C=new Map,E=new Map,N=l??r??[],b=i??t??[],k=g??[0,0],j=x??gi;vm(C,E,N);const{nodesInitialized:R}=qu(b,_,S,{nodeOrigin:k,nodeExtent:j,zIndexMode:v});let D=[0,0,1];if(d&&a&&u){const H=Ci(_,{filter:Z=>!!((Z.width||Z.initialWidth)&&(Z.height||Z.initialHeight))}),{x:X,y:V,zoom:ee}=uc(H,a,u,p,y,(f==null?void 0:f.padding)??.1);D=[X,V,ee]}return{rfId:"1",width:a??0,height:u??0,transform:D,nodes:b,nodesInitialized:R,nodeLookup:_,parentLookup:S,edges:N,edgeLookup:E,connectionLookup:C,onNodesChange:null,onEdgesChange:null,hasDefaultNodes:i!==void 0,hasDefaultEdges:l!==void 0,panZoom:null,minZoom:p,maxZoom:y,translateExtent:gi,nodeExtent:j,nodesSelectionActive:!1,userSelectionActive:!1,userSelectionRect:null,connectionMode:mo.Strict,domNode:null,paneDragging:!1,noPanClassName:"nopan",nodeOrigin:k,nodeDragThreshold:1,connectionDragThreshold:1,snapGrid:[15,15],snapToGrid:!1,nodesDraggable:!0,nodesConnectable:!0,nodesFocusable:!0,edgesFocusable:!0,edgesReconnectable:!0,elementsSelectable:!0,elevateNodesOnSelect:!0,elevateEdgesOnSelect:!0,selectNodesOnDrag:!0,multiSelectionActive:!1,fitViewQueued:d??!1,fitViewOptions:f,fitViewResolver:null,connection:{...Jp},connectionClickStartHandle:null,connectOnClick:!0,ariaLiveMessage:"",autoPanOnConnect:!0,autoPanOnNodeDrag:!0,autoPanOnNodeFocus:!0,autoPanSpeed:15,connectionRadius:20,onError:US,isValidConnection:void 0,onSelectionChangeHandlers:[],lib:"react",debug:!1,ariaLabelConfig:Zp,zIndexMode:v,onNodesChangeMiddlewareMap:new Map,onEdgesChangeMiddlewareMap:new Map}},WS=({nodes:t,edges:r,defaultNodes:i,defaultEdges:l,width:a,height:u,fitView:d,fitViewOptions:f,minZoom:p,maxZoom:y,nodeOrigin:g,nodeExtent:x,zIndexMode:v})=>r_((_,S)=>{async function C(){const{nodeLookup:E,panZoom:N,fitViewOptions:b,fitViewResolver:k,width:j,height:R,minZoom:D,maxZoom:H}=S();N&&(await Jw({nodes:E,width:j,height:R,panZoom:N,minZoom:D,maxZoom:H},b),k==null||k.resolve(!0),_({fitViewResolver:null}))}return{...op({nodes:t,edges:r,width:a,height:u,fitView:d,fitViewOptions:f,minZoom:p,maxZoom:y,nodeOrigin:g,nodeExtent:x,defaultNodes:i,defaultEdges:l,zIndexMode:v}),setNodes:E=>{const{nodeLookup:N,parentLookup:b,nodeOrigin:k,nodeExtent:j,elevateNodesOnSelect:R,fitViewQueued:D,zIndexMode:H,nodesSelectionActive:X}=S(),{nodesInitialized:V,hasSelectedNodes:ee}=qu(E,N,b,{nodeOrigin:k,nodeExtent:j,elevateNodesOnSelect:R,checkEquality:!0,zIndexMode:H}),Z=X&ⅇD&&V?(C(),_({nodes:E,nodesInitialized:V,fitViewQueued:!1,fitViewOptions:void 0,nodesSelectionActive:Z})):_({nodes:E,nodesInitialized:V,nodesSelectionActive:Z})},setEdges:E=>{const{connectionLookup:N,edgeLookup:b}=S();vm(N,b,E),_({edges:E})},setDefaultNodesAndEdges:(E,N)=>{if(E){const{setNodes:b}=S();b(E),_({hasDefaultNodes:!0})}if(N){const{setEdges:b}=S();b(N),_({hasDefaultEdges:!0})}},updateNodeInternals:E=>{const{triggerNodeChanges:N,nodeLookup:b,parentLookup:k,domNode:j,nodeOrigin:R,nodeExtent:D,debug:H,fitViewQueued:X,zIndexMode:V}=S(),{changes:ee,updatedInternals:Z}=S1(E,b,k,j,R,D,V);Z&&(v1(b,k,{nodeOrigin:R,nodeExtent:D,zIndexMode:V}),X?(C(),_({fitViewQueued:!1,fitViewOptions:void 0})):_({}),(ee==null?void 0:ee.length)>0&&(H&&console.log("React Flow: trigger node changes",ee),N==null||N(ee)))},updateNodePositions:(E,N=!1)=>{const b=[];let k=[];const{nodeLookup:j,triggerNodeChanges:R,connection:D,updateConnection:H,onNodesChangeMiddlewareMap:X}=S();for(const[V,ee]of E){const Z=j.get(V),te=!!(Z!=null&&Z.expandParent&&(Z!=null&&Z.parentId)&&(ee!=null&&ee.position)),J={id:V,type:"position",position:te?{x:Math.max(0,ee.position.x),y:Math.max(0,ee.position.y)}:ee.position,dragging:N};if(Z&&D.inProgress&&D.fromNode.id===Z.id){const M=Mr(Z,D.fromHandle,Se.Left,!0);H({...D,from:M})}te&&Z.parentId&&b.push({id:V,parentId:Z.parentId,rect:{...ee.internals.positionAbsolute,width:ee.measured.width??0,height:ee.measured.height??0}}),k.push(J)}if(b.length>0){const{parentLookup:V,nodeOrigin:ee}=S(),Z=mc(b,j,V,ee);k.push(...Z)}for(const V of X.values())k=V(k);R(k)},triggerNodeChanges:E=>{const{onNodesChange:N,setNodes:b,nodes:k,hasDefaultNodes:j,debug:R}=S();if(E!=null&&E.length){if(j){const D=E_(E,k);b(D)}R&&console.log("React Flow: trigger node changes",E),N==null||N(E)}},triggerEdgeChanges:E=>{const{onEdgesChange:N,setEdges:b,edges:k,hasDefaultEdges:j,debug:R}=S();if(E!=null&&E.length){if(j){const D=N_(E,k);b(D)}R&&console.log("React Flow: trigger edge changes",E),N==null||N(E)}},addSelectedNodes:E=>{const{multiSelectionActive:N,edgeLookup:b,nodeLookup:k,triggerNodeChanges:j,triggerEdgeChanges:R}=S();if(N){const D=E.map(H=>wr(H,!0));j(D);return}j(uo(k,new Set([...E]),!0)),R(uo(b))},addSelectedEdges:E=>{const{multiSelectionActive:N,edgeLookup:b,nodeLookup:k,triggerNodeChanges:j,triggerEdgeChanges:R}=S();if(N){const D=E.map(H=>wr(H,!0));R(D);return}R(uo(b,new Set([...E]))),j(uo(k,new Set,!0))},unselectNodesAndEdges:({nodes:E,edges:N}={})=>{const{edges:b,nodes:k,nodeLookup:j,triggerNodeChanges:R,triggerEdgeChanges:D}=S(),H=E||k,X=N||b,V=[];for(const Z of H){if(!Z.selected)continue;const te=j.get(Z.id);te&&(te.selected=!1),V.push(wr(Z.id,!1))}const ee=[];for(const Z of X)Z.selected&&ee.push(wr(Z.id,!1));R(V),D(ee)},setMinZoom:E=>{const{panZoom:N,maxZoom:b}=S();N==null||N.setScaleExtent([E,b]),_({minZoom:E})},setMaxZoom:E=>{const{panZoom:N,minZoom:b}=S();N==null||N.setScaleExtent([b,E]),_({maxZoom:E})},setTranslateExtent:E=>{var N;(N=S().panZoom)==null||N.setTranslateExtent(E),_({translateExtent:E})},resetSelectedElements:()=>{const{edges:E,nodes:N,triggerNodeChanges:b,triggerEdgeChanges:k,elementsSelectable:j}=S();if(!j)return;const R=N.reduce((H,X)=>X.selected?[...H,wr(X.id,!1)]:H,[]),D=E.reduce((H,X)=>X.selected?[...H,wr(X.id,!1)]:H,[]);b(R),k(D)},setNodeExtent:E=>{const{nodes:N,nodeLookup:b,parentLookup:k,nodeOrigin:j,elevateNodesOnSelect:R,nodeExtent:D,zIndexMode:H}=S();E[0][0]===D[0][0]&&E[0][1]===D[0][1]&&E[1][0]===D[1][0]&&E[1][1]===D[1][1]||(qu(N,b,k,{nodeOrigin:j,nodeExtent:E,elevateNodesOnSelect:R,checkEquality:!1,zIndexMode:H}),_({nodeExtent:E}))},panBy:E=>{const{transform:N,width:b,height:k,panZoom:j,translateExtent:R}=S();return k1({delta:E,panZoom:j,transform:N,translateExtent:R,width:b,height:k})},setCenter:async(E,N,b)=>{const{width:k,height:j,maxZoom:R,panZoom:D}=S();if(!D)return!1;const H=typeof(b==null?void 0:b.zoom)<"u"?b.zoom:R;return await D.setViewport({x:k/2-E*H,y:j/2-N*H,zoom:H},{duration:b==null?void 0:b.duration,ease:b==null?void 0:b.ease,interpolate:b==null?void 0:b.interpolate}),!0},cancelConnection:()=>{_({connection:{...Jp}})},updateConnection:E=>{_({connection:E})},reset:()=>_({...op()})}},Object.is);function ig({initialNodes:t,initialEdges:r,defaultNodes:i,defaultEdges:l,initialWidth:a,initialHeight:u,initialMinZoom:d,initialMaxZoom:f,initialFitViewOptions:p,fitView:y,nodeOrigin:g,nodeExtent:x,zIndexMode:v,children:_}){const[S]=O.useState(()=>WS({nodes:t,edges:r,defaultNodes:i,defaultEdges:l,width:a,height:u,fitView:y,minZoom:d,maxZoom:f,fitViewOptions:p,nodeOrigin:g,nodeExtent:x,zIndexMode:v}));return m.jsx(o_,{value:S,children:m.jsx(I_,{children:m.jsx(W_,{children:_})})})}function YS({children:t,nodes:r,edges:i,defaultNodes:l,defaultEdges:a,width:u,height:d,fitView:f,fitViewOptions:p,minZoom:y,maxZoom:g,nodeOrigin:x,nodeExtent:v,zIndexMode:_}){return O.useContext(Nl)?m.jsx(m.Fragment,{children:t}):m.jsx(ig,{initialNodes:r,initialEdges:i,defaultNodes:l,defaultEdges:a,initialWidth:u,initialHeight:d,fitView:f,initialFitViewOptions:p,initialMinZoom:y,initialMaxZoom:g,nodeOrigin:x,nodeExtent:v,zIndexMode:_,children:t})}const XS={width:"100%",height:"100%",overflow:"hidden",position:"relative",zIndex:0};function GS({nodes:t,edges:r,defaultNodes:i,defaultEdges:l,className:a,nodeTypes:u,edgeTypes:d,onNodeClick:f,onEdgeClick:p,onInit:y,onMove:g,onMoveStart:x,onMoveEnd:v,onConnect:_,onConnectStart:S,onConnectEnd:C,onClickConnectStart:E,onClickConnectEnd:N,onNodeMouseEnter:b,onNodeMouseMove:k,onNodeMouseLeave:j,onNodeContextMenu:R,onNodeDoubleClick:D,onNodeDragStart:H,onNodeDrag:X,onNodeDragStop:V,onNodesDelete:ee,onEdgesDelete:Z,onDelete:te,onSelectionChange:J,onSelectionDragStart:M,onSelectionDrag:W,onSelectionDragStop:B,onSelectionContextMenu:U,onSelectionStart:A,onSelectionEnd:z,onBeforeDelete:F,connectionMode:P,connectionLineType:T=Zn.Bezier,connectionLineStyle:ne,connectionLineComponent:re,connectionLineContainerStyle:ue,deleteKeyCode:ce="Backspace",selectionKeyCode:de="Shift",selectionOnDrag:Q=!1,selectionMode:se=yi.Full,panActivationKeyCode:fe="Space",multiSelectionKeyCode:me=wi()?"Meta":"Control",zoomActivationKeyCode:xe=wi()?"Meta":"Control",snapToGrid:pe,snapGrid:Ce,onlyRenderVisibleElements:je=!1,selectNodesOnDrag:Me,nodesDraggable:Re,autoPanOnNodeFocus:Xe,nodesConnectable:rt,nodesFocusable:Ze,nodeOrigin:Je=bm,edgesFocusable:Vt,edgesReconnectable:zt,elementsSelectable:At=!0,defaultViewport:lt=y_,minZoom:ht=.5,maxZoom:ot=2,translateExtent:pt=gi,preventScrolling:Cn=!0,nodeExtent:Ut,defaultMarkerColor:hn="#b1b1b7",zoomOnScroll:Ir=!0,zoomOnPinch:er=!0,panOnScroll:tr=!1,panOnScrollSpeed:br=.5,panOnScrollMode:jn=kr.Free,zoomOnDoubleClick:Mn=!0,panOnDrag:Pn=!0,onPaneClick:q,onPaneMouseEnter:ye,onPaneMouseMove:Le,onPaneMouseLeave:Nt,onPaneScroll:Ct,onPaneContextMenu:Pi,paneClickDistance:Ii=1,nodeClickDistance:bi=0,children:Ti,onReconnect:wo,onReconnectStart:Ri,onReconnectEnd:nr,onEdgeContextMenu:_o,onEdgeDoubleClick:rr,onEdgeMouseEnter:Il,onEdgeMouseMove:or,onEdgeMouseLeave:Tr,reconnectRadius:Rr=10,onNodesChange:So,onEdgesChange:bl,noDragClassName:Tl="nodrag",noWheelClassName:Rl="nowheel",noPanClassName:on="nopan",fitView:ko,fitViewOptions:Eo,connectOnClick:Ll,attributionPosition:Li,proOptions:zi,defaultEdgeOptions:Ai,elevateNodesOnSelect:Di=!0,elevateEdgesOnSelect:zl=!1,disableKeyboardA11y:$i=!1,autoPanOnConnect:He,autoPanOnNodeDrag:Al,autoPanOnSelection:No=!0,autoPanSpeed:Oi,connectionRadius:Lr,isValidConnection:Dl,onError:Fi,style:zr,id:jt,nodeDragThreshold:$l,connectionDragThreshold:Mt,viewport:Ol,onViewportChange:Fl,width:Hl,height:Ar,colorMode:Dr="light",debug:ir,onScroll:pn,ariaLabelConfig:Bl,zIndexMode:Hi="basic",...Co},Bi){const sr=jt||"1",lr=__(Dr),Vl=O.useCallback($r=>{$r.currentTarget.scrollTo({top:0,left:0,behavior:"instant"}),pn==null||pn($r)},[pn]);return m.jsx("div",{"data-testid":"rf__wrapper",...Co,onScroll:Vl,style:{...zr,...XS},ref:Bi,className:Qe(["react-flow",a,lr]),id:jt,role:"application",children:m.jsxs(YS,{nodes:t,edges:r,width:Hl,height:Ar,fitView:ko,fitViewOptions:Eo,minZoom:ht,maxZoom:ot,nodeOrigin:Je,nodeExtent:Ut,zIndexMode:Hi,children:[m.jsx(w_,{nodes:t,edges:r,defaultNodes:i,defaultEdges:l,onConnect:_,onConnectStart:S,onConnectEnd:C,onClickConnectStart:E,onClickConnectEnd:N,nodesDraggable:Re,autoPanOnNodeFocus:Xe,nodesConnectable:rt,nodesFocusable:Ze,edgesFocusable:Vt,edgesReconnectable:zt,elementsSelectable:At,elevateNodesOnSelect:Di,elevateEdgesOnSelect:zl,minZoom:ht,maxZoom:ot,nodeExtent:Ut,onNodesChange:So,onEdgesChange:bl,snapToGrid:pe,snapGrid:Ce,connectionMode:P,translateExtent:pt,connectOnClick:Ll,defaultEdgeOptions:Ai,fitView:ko,fitViewOptions:Eo,onNodesDelete:ee,onEdgesDelete:Z,onDelete:te,onNodeDragStart:H,onNodeDrag:X,onNodeDragStop:V,onSelectionDrag:W,onSelectionDragStart:M,onSelectionDragStop:B,onMove:g,onMoveStart:x,onMoveEnd:v,noPanClassName:on,nodeOrigin:Je,rfId:sr,autoPanOnConnect:He,autoPanOnNodeDrag:Al,autoPanSpeed:Oi,onError:Fi,connectionRadius:Lr,isValidConnection:Dl,selectNodesOnDrag:Me,nodeDragThreshold:$l,connectionDragThreshold:Mt,onBeforeDelete:F,debug:ir,ariaLabelConfig:Bl,zIndexMode:Hi}),m.jsx(VS,{onInit:y,onNodeClick:f,onEdgeClick:p,onNodeMouseEnter:b,onNodeMouseMove:k,onNodeMouseLeave:j,onNodeContextMenu:R,onNodeDoubleClick:D,nodeTypes:u,edgeTypes:d,connectionLineType:T,connectionLineStyle:ne,connectionLineComponent:re,connectionLineContainerStyle:ue,selectionKeyCode:de,selectionOnDrag:Q,selectionMode:se,deleteKeyCode:ce,multiSelectionKeyCode:me,panActivationKeyCode:fe,zoomActivationKeyCode:xe,onlyRenderVisibleElements:je,defaultViewport:lt,translateExtent:pt,minZoom:ht,maxZoom:ot,preventScrolling:Cn,zoomOnScroll:Ir,zoomOnPinch:er,zoomOnDoubleClick:Mn,panOnScroll:tr,panOnScrollSpeed:br,panOnScrollMode:jn,panOnDrag:Pn,autoPanOnSelection:No,onPaneClick:q,onPaneMouseEnter:ye,onPaneMouseMove:Le,onPaneMouseLeave:Nt,onPaneScroll:Ct,onPaneContextMenu:Pi,paneClickDistance:Ii,nodeClickDistance:bi,onSelectionContextMenu:U,onSelectionStart:A,onSelectionEnd:z,onReconnect:wo,onReconnectStart:Ri,onReconnectEnd:nr,onEdgeContextMenu:_o,onEdgeDoubleClick:rr,onEdgeMouseEnter:Il,onEdgeMouseMove:or,onEdgeMouseLeave:Tr,reconnectRadius:Rr,defaultMarkerColor:hn,noDragClassName:Tl,noWheelClassName:Rl,noPanClassName:on,rfId:sr,disableKeyboardA11y:$i,nodeExtent:Ut,viewport:Ol,onViewportChange:Fl,nodesDraggable:Re}),m.jsx(g_,{onSelectionChange:J}),Ti,m.jsx(d_,{proOptions:zi,position:Li}),m.jsx(c_,{rfId:sr,disableKeyboardA11y:$i})]})})}var QS=Rm(GS);function qS({dimensions:t,lineWidth:r,variant:i,className:l}){return m.jsx("path",{strokeWidth:r,d:`M${t[0]/2} 0 V${t[1]} M0 ${t[1]/2} H${t[0]}`,className:Qe(["react-flow__background-pattern",i,l])})}function KS({radius:t,className:r}){return m.jsx("circle",{cx:t,cy:t,r:t,className:Qe(["react-flow__background-pattern","dots",r])})}var Jn;(function(t){t.Lines="lines",t.Dots="dots",t.Cross="cross"})(Jn||(Jn={}));const ZS={[Jn.Dots]:1,[Jn.Lines]:1,[Jn.Cross]:6},JS=t=>({transform:t.transform,patternId:`pattern-${t.rfId}`});function sg({id:t,variant:r=Jn.Dots,gap:i=20,size:l,lineWidth:a=1,offset:u=0,color:d,bgColor:f,style:p,className:y,patternClassName:g}){const x=O.useRef(null),{transform:v,patternId:_}=be(JS,Ue),S=l||ZS[r],C=r===Jn.Dots,E=r===Jn.Cross,N=Array.isArray(i)?i:[i,i],b=[N[0]*v[2]||1,N[1]*v[2]||1],k=S*v[2],j=Array.isArray(u)?u:[u,u],R=E?[k,k]:b,D=[j[0]*v[2]+R[0]/2,j[1]*v[2]+R[1]/2],H=`${_}${t||""}`;return m.jsxs("svg",{className:Qe(["react-flow__background",y]),style:{...p,...jl,"--xy-background-color-props":f,"--xy-background-pattern-color-props":d},ref:x,"data-testid":"rf__background",children:[m.jsx("pattern",{id:H,x:v[0]%b[0],y:v[1]%b[1],width:b[0],height:b[1],patternUnits:"userSpaceOnUse",patternTransform:`translate(-${D[0]},-${D[1]})`,children:C?m.jsx(KS,{radius:k/2,className:g}):m.jsx(qS,{dimensions:R,lineWidth:a,variant:r,className:g})}),m.jsx("rect",{x:"0",y:"0",width:"100%",height:"100%",fill:`url(#${H})`})]})}sg.displayName="Background";const ek=O.memo(sg);function tk(){return m.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",children:m.jsx("path",{d:"M32 18.133H18.133V32h-4.266V18.133H0v-4.266h13.867V0h4.266v13.867H32z"})})}function nk(){return m.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 5",children:m.jsx("path",{d:"M0 0h32v4.2H0z"})})}function rk(){return m.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 30",children:m.jsx("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"})})}function ok(){return m.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 25 32",children:m.jsx("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"})})}function ik(){return m.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 25 32",children:m.jsx("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"})})}function Zs({children:t,className:r,...i}){return m.jsx("button",{type:"button",className:Qe(["react-flow__controls-button",r]),...i,children:t})}const sk=t=>({isInteractive:t.nodesDraggable||t.nodesConnectable||t.elementsSelectable,minZoomReached:t.transform[2]<=t.minZoom,maxZoomReached:t.transform[2]>=t.maxZoom,ariaLabelConfig:t.ariaLabelConfig});function lg({style:t,showZoom:r=!0,showFitView:i=!0,showInteractive:l=!0,fitViewOptions:a,onZoomIn:u,onZoomOut:d,onFitView:f,onInteractiveChange:p,className:y,children:g,position:x="bottom-left",orientation:v="vertical","aria-label":_}){const S=Oe(),{isInteractive:C,minZoomReached:E,maxZoomReached:N,ariaLabelConfig:b}=be(sk,Ue),{zoomIn:k,zoomOut:j,fitView:R}=gc(),D=()=>{k(),u==null||u()},H=()=>{j(),d==null||d()},X=()=>{R(a),f==null||f()},V=()=>{S.setState({nodesDraggable:!C,nodesConnectable:!C,elementsSelectable:!C}),p==null||p(!C)},ee=v==="horizontal"?"horizontal":"vertical";return m.jsxs(Cl,{className:Qe(["react-flow__controls",ee,y]),position:x,style:t,"data-testid":"rf__controls","aria-label":_??b["controls.ariaLabel"],children:[r&&m.jsxs(m.Fragment,{children:[m.jsx(Zs,{onClick:D,className:"react-flow__controls-zoomin",title:b["controls.zoomIn.ariaLabel"],"aria-label":b["controls.zoomIn.ariaLabel"],disabled:N,children:m.jsx(tk,{})}),m.jsx(Zs,{onClick:H,className:"react-flow__controls-zoomout",title:b["controls.zoomOut.ariaLabel"],"aria-label":b["controls.zoomOut.ariaLabel"],disabled:E,children:m.jsx(nk,{})})]}),i&&m.jsx(Zs,{className:"react-flow__controls-fitview",onClick:X,title:b["controls.fitView.ariaLabel"],"aria-label":b["controls.fitView.ariaLabel"],children:m.jsx(rk,{})}),l&&m.jsx(Zs,{className:"react-flow__controls-interactive",onClick:V,title:b["controls.interactive.ariaLabel"],"aria-label":b["controls.interactive.ariaLabel"],children:C?m.jsx(ik,{}):m.jsx(ok,{})}),g]})}lg.displayName="Controls";const lk=O.memo(lg);function ak({id:t,x:r,y:i,width:l,height:a,style:u,color:d,strokeColor:f,strokeWidth:p,className:y,borderRadius:g,shapeRendering:x,selected:v,onClick:_}){const{background:S,backgroundColor:C}=u||{},E=d||S||C;return m.jsx("rect",{className:Qe(["react-flow__minimap-node",{selected:v},y]),x:r,y:i,rx:g,ry:g,width:l,height:a,style:{fill:E,stroke:f,strokeWidth:p},shapeRendering:x,onClick:_?N=>_(N,t):void 0})}const uk=O.memo(ak),ck=t=>t.nodes.map(r=>r.id),Du=t=>t instanceof Function?t:()=>t;function dk({nodeStrokeColor:t,nodeColor:r,nodeClassName:i="",nodeBorderRadius:l=5,nodeStrokeWidth:a,nodeComponent:u=uk,onClick:d}){const f=be(ck,Ue),p=Du(r),y=Du(t),g=Du(i),x=typeof window>"u"||window.chrome?"crispEdges":"geometricPrecision";return m.jsx(m.Fragment,{children:f.map(v=>m.jsx(hk,{id:v,nodeColorFunc:p,nodeStrokeColorFunc:y,nodeClassNameFunc:g,nodeBorderRadius:l,nodeStrokeWidth:a,NodeComponent:u,onClick:d,shapeRendering:x},v))})}function fk({id:t,nodeColorFunc:r,nodeStrokeColorFunc:i,nodeClassNameFunc:l,nodeBorderRadius:a,nodeStrokeWidth:u,shapeRendering:d,NodeComponent:f,onClick:p}){const{node:y,x:g,y:x,width:v,height:_}=be(S=>{const C=S.nodeLookup.get(t);if(!C)return{node:void 0,x:0,y:0,width:0,height:0};const E=C.internals.userNode,{x:N,y:b}=C.internals.positionAbsolute,{width:k,height:j}=rn(E);return{node:E,x:N,y:b,width:k,height:j}},Ue);return!y||y.hidden||!lm(y)?null:m.jsx(f,{x:g,y:x,width:v,height:_,style:y.style,selected:!!y.selected,className:l(y),color:r(y),borderRadius:a,strokeColor:i(y),strokeWidth:u,shapeRendering:d,onClick:p,id:y.id})}const hk=O.memo(fk);var pk=O.memo(dk);const mk=200,gk=150,yk=t=>!t.hidden,vk=t=>{const r={x:-t.transform[0]/t.transform[2],y:-t.transform[1]/t.transform[2],width:t.width/t.transform[2],height:t.height/t.transform[2]};return{viewBB:r,boundingRect:t.nodeLookup.size>0?om(Ci(t.nodeLookup,{filter:yk}),r):r,rfId:t.rfId,panZoom:t.panZoom,translateExtent:t.translateExtent,flowWidth:t.width,flowHeight:t.height,ariaLabelConfig:t.ariaLabelConfig}},ip=(t,r)=>t.x===r.x&&t.y===r.y&&t.width===r.width&&t.height===r.height,xk=(t,r)=>ip(t.viewBB,r.viewBB)&&ip(t.boundingRect,r.boundingRect)&&t.rfId===r.rfId&&t.panZoom===r.panZoom&&t.translateExtent===r.translateExtent&&t.flowWidth===r.flowWidth&&t.flowHeight===r.flowHeight&&t.ariaLabelConfig===r.ariaLabelConfig,wk="react-flow__minimap-desc";function ag({style:t,className:r,nodeStrokeColor:i,nodeColor:l,nodeClassName:a="",nodeBorderRadius:u=5,nodeStrokeWidth:d,nodeComponent:f,bgColor:p,maskColor:y,maskStrokeColor:g,maskStrokeWidth:x,position:v="bottom-right",onClick:_,onNodeClick:S,pannable:C=!1,zoomable:E=!1,ariaLabel:N,inversePan:b,zoomStep:k=1,offsetScale:j=5}){const R=Oe(),D=O.useRef(null),{boundingRect:H,viewBB:X,rfId:V,panZoom:ee,translateExtent:Z,flowWidth:te,flowHeight:J,ariaLabelConfig:M}=be(vk,xk),W=(t==null?void 0:t.width)??mk,B=(t==null?void 0:t.height)??gk,U=H.width/W,A=H.height/B,z=Math.max(U,A),F=z*W,P=z*B,T=j*z,ne=H.x-(F-H.width)/2-T,re=H.y-(P-H.height)/2-T,ue=F+T*2,ce=P+T*2,de=`${wk}-${V}`,Q=O.useRef(0),se=O.useRef();Q.current=z,O.useEffect(()=>{if(D.current&&ee)return se.current=T1({domNode:D.current,panZoom:ee,getTransform:()=>R.getState().transform,getViewScale:()=>Q.current}),()=>{var pe;(pe=se.current)==null||pe.destroy()}},[ee]),O.useEffect(()=>{var pe;(pe=se.current)==null||pe.update({translateExtent:Z,width:te,height:J,inversePan:b,pannable:C,zoomStep:k,zoomable:E})},[C,E,b,k,Z,te,J]);const fe=_?pe=>{var Me;const[Ce,je]=((Me=se.current)==null?void 0:Me.pointer(pe))||[0,0];_(pe,{x:Ce,y:je})}:void 0,me=S?O.useCallback((pe,Ce)=>{const je=R.getState().nodeLookup.get(Ce).internals.userNode;S(pe,je)},[]):void 0,xe=N??M["minimap.ariaLabel"];return m.jsx(Cl,{position:v,style:{...t,"--xy-minimap-background-color-props":typeof p=="string"?p:void 0,"--xy-minimap-mask-background-color-props":typeof y=="string"?y:void 0,"--xy-minimap-mask-stroke-color-props":typeof g=="string"?g:void 0,"--xy-minimap-mask-stroke-width-props":typeof x=="number"?x*z:void 0,"--xy-minimap-node-background-color-props":typeof l=="string"?l:void 0,"--xy-minimap-node-stroke-color-props":typeof i=="string"?i:void 0,"--xy-minimap-node-stroke-width-props":typeof d=="number"?d:void 0},className:Qe(["react-flow__minimap",r]),"data-testid":"rf__minimap",children:m.jsxs("svg",{width:W,height:B,viewBox:`${ne} ${re} ${ue} ${ce}`,className:"react-flow__minimap-svg",role:"img","aria-labelledby":de,ref:D,onClick:fe,children:[xe&&m.jsx("title",{id:de,children:xe}),m.jsx(pk,{onClick:me,nodeColor:l,nodeStrokeColor:i,nodeBorderRadius:u,nodeClassName:a,nodeStrokeWidth:d,nodeComponent:f}),m.jsx("path",{className:"react-flow__minimap-mask",d:`M${ne-T},${re-T}h${ue+T*2}v${ce+T*2}h${-ue-T*2}z + M${X.x},${X.y}h${X.width}v${X.height}h${-X.width}z`,fillRule:"evenodd",pointerEvents:"none"})]})})}ag.displayName="MiniMap";const _k=O.memo(ag),Sk=t=>r=>t?`${Math.max(1/r.transform[2],1)}`:void 0,kk={[vo.Line]:"right",[vo.Handle]:"bottom-right"};function Ek({nodeId:t,position:r,variant:i=vo.Handle,className:l,style:a=void 0,children:u,color:d,minWidth:f=10,minHeight:p=10,maxWidth:y=Number.MAX_VALUE,maxHeight:g=Number.MAX_VALUE,keepAspectRatio:x=!1,resizeDirection:v,autoScale:_=!0,shouldResize:S,onResizeStart:C,onResize:E,onResizeEnd:N}){const b=$m(),k=typeof t=="string"?t:b,j=Oe(),R=O.useRef(null),D=i===vo.Handle,H=be(O.useCallback(Sk(D&&_),[D,_]),Ue),X=O.useRef(null),V=r??kk[i];O.useEffect(()=>{if(!(!R.current||!k))return X.current||(X.current=W1({domNode:R.current,nodeId:k,getStoreItems:()=>{const{nodeLookup:Z,transform:te,snapGrid:J,snapToGrid:M,nodeOrigin:W,domNode:B}=j.getState();return{nodeLookup:Z,transform:te,snapGrid:J,snapToGrid:M,nodeOrigin:W,paneDomNode:B}},onChange:(Z,te)=>{const{triggerNodeChanges:J,nodeLookup:M,parentLookup:W,nodeOrigin:B}=j.getState(),U=[],A={x:Z.x,y:Z.y},z=M.get(k);if(z&&z.expandParent&&z.parentId){const F=z.origin??B,P=Z.width??z.measured.width??0,T=Z.height??z.measured.height??0,ne={id:z.id,parentId:z.parentId,rect:{width:P,height:T,...am({x:Z.x??z.position.x,y:Z.y??z.position.y},{width:P,height:T},z.parentId,M,F)}},re=mc([ne],M,W,B);U.push(...re),A.x=Z.x?Math.max(F[0]*P,Z.x):void 0,A.y=Z.y?Math.max(F[1]*T,Z.y):void 0}if(A.x!==void 0&&A.y!==void 0){const F={id:k,type:"position",position:{...A}};U.push(F)}if(Z.width!==void 0&&Z.height!==void 0){const P={id:k,type:"dimensions",resizing:!0,setAttributes:v?v==="horizontal"?"width":"height":!0,dimensions:{width:Z.width,height:Z.height}};U.push(P)}for(const F of te){const P={...F,type:"position"};U.push(P)}J(U)},onEnd:({width:Z,height:te})=>{const J={id:k,type:"dimensions",resizing:!1,dimensions:{width:Z,height:te}};j.getState().triggerNodeChanges([J])}})),X.current.update({controlPosition:V,boundaries:{minWidth:f,minHeight:p,maxWidth:y,maxHeight:g},keepAspectRatio:x,resizeDirection:v,onResizeStart:C,onResize:E,onResizeEnd:N,shouldResize:S}),()=>{var Z;(Z=X.current)==null||Z.destroy()}},[V,f,p,y,g,x,C,E,N,S]);const ee=V.split("-");return m.jsx("div",{className:Qe(["react-flow__resize-control","nodrag",...ee,i,l]),ref:R,style:{...a,scale:H,...d&&{[D?"backgroundColor":"borderColor"]:d}},children:u})}O.memo(Ek);const Nk={"arch.context":0,"django.app":0,"django.route":1,"django.url_name":1,"django.view":2,"django.viewset_action":2,"django.permission":2,"django.serializer":3,"django.form":3,"django.serializer_field":4,"django.service":4,"django.model":5,"django.field":6,"django.relation":6,"django.task":7,"django.receiver":7,"django.signal":7,"django.test":7,"django.migration_op":7,"django.admin":7,"openapi.path":8,"react.api_client":9,"react.query_key":10,"react.hook":10,"react.feature":10,"react.route":11,"react.page":11,"react.component":12,"react.form_schema":13,"react.test":13,"react.context":12};function Pl(t){return Nk[t]??8}function Ck(t){const r=new Map;for(const l of t){const a=Pl(l.type),u=r.get(a)??[];u.push(l),r.set(a,u)}const i=new Map;for(const[l,a]of r)a.sort((u,d)=>u.name.localeCompare(d.name)),a.forEach((u,d)=>{i.set(u.id,{x:l*260,y:d*108})});return i}const ug=90,jk=new Set(["django.field","django.serializer_field","django.relation","django.test","react.test","django.url_name","django.throttle"]),sp={"arch.context":"#edf2f4","django.app":"#8d99ae","django.route":"#4cc9f0","django.view":"#4895ef","django.viewset_action":"#4361ee","django.permission":"#7b8cde","django.serializer":"#f4a261","django.form":"#e9c46a","django.serializer_field":"#e9c46a","django.service":"#90be6d","django.model":"#2a9d8f","django.field":"#8ac926","django.task":"#e76f51","django.receiver":"#e85d04","django.signal":"#f4a261","django.test":"#6c757d","django.admin":"#adb5bd","django.migration_op":"#9d4edd","openapi.path":"#00bbf9","react.api_client":"#ff6b6b","react.query_key":"#adb5bd","react.hook":"#7b2cbf","react.feature":"#9d4edd","react.route":"#c77dff","react.page":"#c77dff","react.component":"#9d4edd","react.form_schema":"#ffd166","react.test":"#6c757d"},Mk=Math.PI*(3-Math.sqrt(5)),cg=220,Pk=26,Ik={0:"context",1:"routes",2:"views",3:"serializers",4:"services",5:"models",6:"fields",7:"jobs / signals",8:"openapi",9:"api client",10:"hooks",11:"pages",12:"components",13:"forms / tests"};function dg(t){return t.startsWith("react.")?"react":t.startsWith("openapi.")?"stitch":t.startsWith("arch.")?"arch":"django"}function uE(t){return sp[t]?sp[t]:t.startsWith("react.")?"#9d4edd":t.startsWith("openapi.")?"#00bbf9":"#4a5568"}function bk(t){return t>=ug?"3d":"2d"}function Tk(t){return t>=ug?"overview":"full"}function Rk(t,r,i=1){const l=new Set([t]);let a=new Set([t]);for(let u=0;ui.families.has(dg(f.type)));i.detail==="overview"&&(l=l.filter(f=>!jk.has(f.type)));const a=new Set(l.map(f=>f.id)),u=r.filter(f=>a.has(f.src)&&a.has(f.dst)),d=i.focusId?Rk(i.focusId,u,1):new Set;if(i.neighborhoodOnly&&i.focusId&&d.size){l=l.filter(p=>d.has(p.id));const f=new Set(l.map(p=>p.id));return{nodes:l,edges:u.filter(p=>f.has(p.src)&&f.has(p.dst)),neighborIds:d}}return{nodes:l,edges:u,neighborIds:d}}function cE(t){const r=new Map;for(const l of t){const a=Pl(l.type),u=r.get(a)??[];u.push(l),r.set(a,u)}const i=new Map;for(const[l,a]of r){a.sort((d,f)=>d.name.localeCompare(f.name));const u=l*cg;a.forEach((d,f)=>{if(a.length===1){i.set(d.id,{x:u,y:0,z:0});return}const p=Pk*Math.sqrt(f+1),y=f*Mk;i.set(d.id,{x:u,y:p*Math.cos(y),z:p*Math.sin(y)})})}return i}function dE(t){const r=new Map;for(const i of t){const l=Pl(i.type);r.set(l,(r.get(l)||0)+1)}return[...r.entries()].sort((i,l)=>i[0]-l[0]).map(([i,l])=>({layer:i,x:i*cg,count:l}))}const Js=16,zk=12,Ak=new Set(["django.route","react.route","react.page","django.task","django.migration_op","django.permission","django.throttle","django.admin","django.management_command","openapi.path"]),Dk=new Set(["django.serializer","django.serializer_field","django.form","openapi.path","react.form_schema","django.route"]),lp={"arch.context":"Ownership boundary from loadpath.yml — the context this code belongs to.","django.app":"Django app package that owns models, views, and jobs.","django.route":"HTTP URL that publishes a view. A sink: this is where a change becomes a public request.","django.url_name":"Named URL used by reverse() / {% url %} lookups.","django.view":"Request handler (class-based view, function view, or ViewSet).","django.viewset_action":"One ViewSet action (list, create, retrieve, update, destroy).","django.permission":"Auth gate on a view — who is allowed to hit this path.","django.throttle":"Rate-limit class attached to a view.","django.serializer":"Request/response contract: which fields go in and come out.","django.form":"Django form that validates submitted input.","django.serializer_field":"One field on a serializer or form — the typed slot on the contract.","django.service":"Internal service or use-case. Work that is not itself an HTTP sink.","django.model":"ORM model. Schema and relations live here.","django.field":"Model column. Type, indexes, and relations are the contract of the table.","django.relation":"Model-to-model relation (FK / M2M / O2O).","django.task":"Celery or Dramatiq job. Once enqueued, this is a sink.","django.receiver":"Signal handler that runs after a model event.","django.signal":"Django signal that receivers subscribe to.","django.test":"Backend test that mentions symbols on this path.","django.admin":"Django admin class for a model.","django.migration_op":"Schema migration operation (CreateModel, AlterField, …).","django.management_command":"manage.py command — an operational sink.","openapi.path":"Generated OpenAPI operation. The typed HTTP contract between stacks.","react.api_client":"Frontend fetch or generated client call to an API path.","react.query_key":"React Query cache key. Invalidation and reads share this name.","react.hook":"Data hook wrapping query or mutation calls.","react.feature":"Frontend feature module (folder).","react.route":"Client-side route. A sink: this is a URL the user can open.","react.page":"Page or screen component rendered by a route.","react.component":"UI component.","react.form_schema":"Zod (or similar) schema — typed form inputs on the client.","react.test":"Frontend test covering a page, hook, or component.","react.context":"React context provider."},$k={field_type:"Type",fields:"Fields",form_fields:"Form fields",permissions:"Permissions",throttles:"Throttles",authentication:"Authentication",pagination:"Pagination",filterset:"Filterset",bases:"Extends",on_delete:"on_delete",related_name:"related_name",unique:"Unique",db_index:"Indexed",relation:"Relation field",looks_idempotent_on_pk:"Idempotent on pk",broker:"Broker",route:"Route",url_name:"URL name",view:"View",include:"Includes",mounted_at:"Mounted at",full_path:"Full path",method:"Method",path:"Path",operation_id:"Operation",raw:"URL",kind:"Schema",exclude:"Excludes",queryset_in_serializer:"Queryset in serializer",get_queryset:"Custom get_queryset",get_serializer_class:"Dynamic serializer",dynamic:"Dynamic",fbv:"Function view",ninja:"Django Ninja",django_form:"Django form",mutation:"Mutation",has_error_boundary:"Error boundary",invalidation:"Cache invalidation",inferred:"Inferred stitch",generated:"Generated",shared:"Shared module",element:"Renders",model_name:"Model",field_name:"Field",op:"Operation",app:"App",feature:"Feature",from_view:"From view",mentions:"Mentions",nodeid:"Test id",task:"Task",to:"Related to"},ap=["field_type","method","path","operation_id","raw","route","mounted_at","full_path","url_name","view","element","fields","form_fields","exclude","kind","bases","permissions","authentication","throttles","pagination","filterset","on_delete","related_name","to","unique","db_index","relation","looks_idempotent_on_pk","broker","task","model_name","field_name","op","app","feature","from_view","include","fbv","ninja","django_form","mutation","has_error_boundary","invalidation","inferred","generated","shared","queryset_in_serializer","get_queryset","get_serializer_class","dynamic","mentions","nodeid"],up=new Set(["referenced","placeholder","booted","line","call","from","import","local","source","file","plain_handler","string_ref","pagination_sink","match","via","generated_client","django","react","superseded_by_generated","foreign_app","imported"]),Ok=new Set(["looks_idempotent_on_pk"]),Fk=new Set(["inferred","generated","mutation","fbv","ninja"]);function Hk(t){return lp[t]?lp[t]:t.startsWith("react.")?"A React node on the load path.":t.startsWith("django.")?"A Django node on the load path.":t.startsWith("openapi.")?"A stitch node between Django and React.":"A node on the architecture graph."}function Bk(t,r,i){const l=new Map(r.map(x=>[x.id,x])),a=[];Ak.has(t.type)&&a.push("sink"),Dk.has(t.type)&&a.push("contract");const u=t.extra??{};u.inferred&&a.push("inferred"),u.generated&&a.push("generated"),u.mutation&&a.push("mutation"),u.fbv&&a.push("function view"),u.ninja&&a.push("ninja");const d=i.filter(x=>x.dst===t.id),f=i.filter(x=>x.src===t.id),p=d.slice(0,Js).map(x=>cp(x,l,x.src)),y=f.slice(0,Js).map(x=>cp(x,l,x.dst)),g=t.file_path?`${t.file_path}${t.start_line?`:${t.start_line}`:""}`:void 0;return{type:t.type,typeLabel:di(gl(t.type)),layer:Ik[Pl(t.type)]??"other",purpose:Hk(t.type),name:t.name,qualifiedName:t.qualified_name,file:g,context:t.context,roles:a,facts:Vk(u).filter(x=>!(x.key==="app"&&x.value===t.context)),inputs:p,outputs:y,extraInputs:Math.max(0,d.length-Js),extraOutputs:Math.max(0,f.length-Js)}}function cp(t,r,i){const l=r.get(i),a=i.includes(":")?i.slice(i.indexOf(":")+1):i;return{id:i,name:(l==null?void 0:l.name)||a,type:(l==null?void 0:l.type)||"",typeLabel:l?di(gl(l.type)):"",edgeType:t.type,edgeLabel:di(t.type),inferred:t.confidence<.8}}function Vk(t){const r=[...ap.filter(a=>a in t),...Object.keys(t).filter(a=>!ap.includes(a)&&!up.has(a))],i=[],l=new Set;for(const a of r){if(l.has(a)||up.has(a)||Fk.has(a))continue;l.add(a);const u=Uk(a,t[a]);u!=null&&i.push({key:a,label:$k[a]??di(a),value:u})}return i}function Uk(t,r){if(r==null)return null;if(typeof r=="boolean")return!r&&!Ok.has(t)?null:r?"yes":"no";if(typeof r=="number")return String(r);if(typeof r=="string")return r.trim()||null;if(Array.isArray(r)){const i=r.map(u=>typeof u=="string"||typeof u=="number"?String(u):"").filter(Boolean);if(!i.length)return null;const l=i.slice(0,zk),a=i.length-l.length;return a>0?`${l.join(", ")} +${a} more`:l.join(", ")}return null}const Wk=O.lazy(()=>my(()=>import("./LayeredGraph3D-D0jeyZhs.js"),[],import.meta.url).then(t=>({default:t.LayeredGraph3D}))),Yk={cheap:"var(--edge-cheap)",expensive:"var(--edge-expensive)",critical:"var(--edge-critical)"};function Xk({data:t,selected:r}){return m.jsxs("div",{className:r?"lp-node selected":"lp-node",children:[m.jsx(xo,{type:"target",position:Se.Left,isConnectable:!1}),m.jsx("div",{className:"t",children:gl(t.type)}),m.jsx("div",{className:"n",title:t.name,children:t.name}),m.jsx(xo,{type:"source",position:Se.Right,isConnectable:!1})]})}const Gk={load:Xk},dp=180,fp=56,Qk=new Set(["django","react","stitch","arch"]);function qk(t,r,i=null){const l=new Map(t.map(f=>[f.id,f])),a=Ck(t),u=t.map(f=>({id:f.id,type:"load",position:a.get(f.id)??{x:0,y:0},data:{name:f.name,type:f.type,file:f.file_path},selected:i===f.id,sourcePosition:Se.Right,targetPosition:Se.Left,width:dp,height:fp,style:{width:dp,height:fp}})),d=r.filter(f=>l.has(f.src)&&l.has(f.dst)).map(f=>{const p=Yk[f.weight]||"var(--edge-cheap)";return{id:f.id,source:f.src,target:f.dst,type:"smoothstep",animated:f.weight==="critical",style:{stroke:p,strokeWidth:f.weight==="critical"?2.4:1.2,strokeDasharray:f.confidence<.8?"6 4":void 0},markerEnd:{type:vi.ArrowClosed,width:14,height:14,color:p},label:f.type.replaceAll("_"," "),labelStyle:{fill:"var(--muted)",fontSize:10}}});return{rfNodes:u,rfEdges:d}}function hp({node:t,nodes:r,edges:i,onClose:l}){const a=Bk(t,r,i);return m.jsxs("aside",{className:"inspector","data-testid":"graph-inspector",children:[m.jsxs("div",{className:"inspector-head",children:[m.jsx("div",{className:"t",children:a.typeLabel}),m.jsxs("div",{className:"inspector-roles",children:[a.roles.map(u=>m.jsx("span",{className:"inspector-chip",children:u},u)),m.jsx("button",{type:"button",className:"inspector-close","data-testid":"graph-inspector-close","aria-label":"Close inspector",onClick:l,children:"×"})]})]}),m.jsx("div",{className:"n",children:ao(a.name)}),m.jsx("p",{className:"inspector-purpose","data-testid":"graph-inspector-purpose",children:a.purpose}),a.context?m.jsx("div",{className:"muted",children:ao(a.context)}):null,a.file?m.jsx("div",{className:"file",children:ao(a.file)}):null,m.jsx("div",{className:"muted",children:ao(a.qualifiedName)}),m.jsxs("div",{className:"muted inspector-layer",children:["layer · ",a.layer]}),a.facts.length?m.jsx("dl",{className:"inspector-facts","data-testid":"graph-inspector-facts",children:a.facts.map(u=>m.jsxs("div",{className:"inspector-fact",children:[m.jsx("dt",{children:u.label}),m.jsx("dd",{children:ao(u.value)})]},u.key))}):null,m.jsx(pp,{title:"Inputs",testId:"graph-inspector-inputs",links:a.inputs,extra:a.extraInputs,empty:"Nothing in this graph points here."}),m.jsx(pp,{title:"Outputs",testId:"graph-inspector-outputs",links:a.outputs,extra:a.extraOutputs,empty:"This node does not point at anything in this graph."})]})}function pp({title:t,testId:r,links:i,extra:l,empty:a}){return m.jsxs("section",{className:"inspector-section","data-testid":r,children:[m.jsxs("h3",{children:[t,m.jsx("span",{className:"count",children:i.length+l})]}),i.length?m.jsx("ul",{children:i.map((u,d)=>m.jsxs("li",{children:[m.jsx("span",{className:"inspector-link-name",title:u.name,children:ao(u.name)}),m.jsxs("span",{className:"inspector-link-meta",children:[u.typeLabel?`${u.typeLabel} · `:"",u.edgeLabel,u.inferred?" · inferred":""]})]},`${u.edgeType}:${u.id}:${d}`))}):m.jsx("p",{className:"muted",children:a}),l?m.jsxs("p",{className:"muted",children:["+",l," more"]}):null]})}function $u({nodes:t,edges:r}){const[i,l]=O.useState(null),[a,u]=O.useState(null),[d,f]=O.useState(null),[p,y]=O.useState(new Set(Qk)),[g,x]=O.useState(!1),v=typeof window<"u"&&window.matchMedia("(prefers-reduced-motion: reduce)").matches,_=a??bk(t.length),S=d??Tk(t.length),C=O.useMemo(()=>Lk(t,r,{detail:S,families:p,focusId:i,neighborhoodOnly:g&&_==="3d"}),[t,r,S,p,i,g,_]),E=O.useMemo(()=>new Map(C.nodes.map(V=>[V.id,V])),[C.nodes]),N=i?E.get(i)??null:null,{rfNodes:b,rfEdges:k}=O.useMemo(()=>{const V=qk(C.nodes,C.edges,i);return v&&(V.rfEdges=V.rfEdges.map(ee=>({...ee,animated:!1}))),V},[C.nodes,C.edges,i,v]);O.useEffect(()=>{i&&!E.has(i)&&l(null)},[E,i]);const j=(V,ee)=>{l(ee.id)},R=()=>{l(null),x(!1)},D=V=>{y(ee=>{const Z=new Set(ee);if(Z.has(V)){if(Z.size===1)return ee;Z.delete(V)}else Z.add(V);return Z})},H=O.useMemo(()=>{const V=new Set;for(const ee of t)V.add(dg(ee.type));return V},[t]),X=t.length-C.nodes.length;return m.jsxs("div",{className:"impact-graph",style:{flex:1,minHeight:0,position:"relative",display:"flex",flexDirection:"column"},children:[m.jsxs("div",{className:"graph-toolbar","data-testid":"graph-toolbar",children:[m.jsxs("div",{className:"seg","aria-label":"Graph projection",children:[m.jsx("button",{type:"button","data-testid":"graph-view-2d",className:_==="2d"?"active":"","aria-pressed":_==="2d",onClick:()=>u("2d"),children:"2D map"}),m.jsx("button",{type:"button","data-testid":"graph-view-3d",className:_==="3d"?"active":"","aria-pressed":_==="3d",onClick:()=>u("3d"),children:"3D layers"})]}),m.jsxs("div",{className:"seg","aria-label":"Graph detail",children:[m.jsx("button",{type:"button","data-testid":"graph-detail-overview",className:S==="overview"?"active":"","aria-pressed":S==="overview",onClick:()=>f("overview"),children:"Overview"}),m.jsx("button",{type:"button","data-testid":"graph-detail-full",className:S==="full"?"active":"","aria-pressed":S==="full",onClick:()=>f("full"),children:"Full"})]}),m.jsx("div",{className:"seg","aria-label":"Graph families",children:["django","stitch","react"].filter(V=>H.has(V)).map(V=>m.jsx("button",{type:"button","data-testid":`graph-family-${V}`,className:p.has(V)?"active":"","aria-pressed":p.has(V),onClick:()=>D(V),children:V},V))}),_==="3d"?m.jsx("button",{type:"button",className:g?"chip-btn active":"chip-btn","data-testid":"graph-neighborhood",disabled:!i,onClick:()=>x(V=>!V),children:g?"Neighborhood":"Focus neighbors"}):null,m.jsxs("span",{className:"muted graph-count",children:[C.nodes.length," nodes · ",C.edges.length," edges",X?` · ${X} hidden`:""]})]}),m.jsx("div",{className:"graph-stage",children:_==="3d"?m.jsxs("div",{className:"graph-3d","data-testid":"graph-3d",children:[m.jsx("p",{className:"graph-3d-hint",children:"Architecture layers are stacked in depth (Django → stitch → React). Drag to orbit, scroll to zoom, click a node to inspect it."}),m.jsx(O.Suspense,{fallback:m.jsx("p",{className:"muted graph-3d-hint",children:"Loading 3D layers…"}),children:m.jsx(Wk,{nodes:C.nodes,edges:C.edges,selectedId:i,neighborIds:C.neighborIds,onSelect:V=>{l(V),V||x(!1)}})}),N?m.jsx(hp,{node:N,nodes:t,edges:r,onClose:R}):null]}):m.jsxs(ig,{children:[m.jsxs(QS,{nodes:b,edges:k,nodeTypes:Gk,fitView:!0,fitViewOptions:{padding:.2,maxZoom:1.15},minZoom:.25,nodesDraggable:!1,nodesConnectable:!1,elementsSelectable:!0,deleteKeyCode:null,onNodeClick:j,onPaneClick:R,proOptions:{hideAttribution:!1},"data-testid":"impact-graph",children:[m.jsx(ek,{}),m.jsx(_k,{pannable:!0,zoomable:!0,ariaLabel:"Impact graph overview",nodeColor:"var(--muted)",nodeStrokeColor:"transparent",nodeStrokeWidth:0,maskColor:"rgba(0, 0, 0, 0.45)",maskStrokeColor:"var(--accent)",maskStrokeWidth:1.4,bgColor:"var(--graph-bg)",style:{width:184,height:128}}),m.jsx(lk,{})]}),N?m.jsx(hp,{node:N,nodes:t,edges:r,onClose:R}):null]})})]})}const mp=[{value:"HEAD",label:"HEAD",group:"preset"},{value:"HEAD~1",label:"HEAD~1",group:"preset"}],Kk=["preset","branch","tag","commit"];function Zk(t){var a;if(!(t!=null&&t.git))return[...mp];const r=((a=t.presets)!=null&&a.length?t.presets:mp.map(u=>u.value)).map(u=>({value:u,label:u,group:"preset"})),i=new Set(r.map(u=>u.value)),l=[...r];for(const u of t.branches||[])i.has(u.name)||(i.add(u.name),l.push({value:u.name,label:u.current?`${u.name} (current)`:u.name,detail:u.subject,group:"branch"}));for(const u of t.tags||[])i.has(u.name)||(i.add(u.name),l.push({value:u.name,label:u.name,detail:u.subject,group:"tag"}));for(const u of t.commits||[])i.has(u.sha)||(i.add(u.sha),l.push({value:u.sha,label:u.short,detail:u.subject,group:"commit"}));return l}function Jk(t,r){const i=r.trim().toLowerCase();return i?t.filter(l=>l.value.toLowerCase().includes(i)||l.label.toLowerCase().includes(i)||(l.detail||"").toLowerCase().includes(i)):t}function eE(t){return Kk.map(r=>({group:r,items:t.filter(i=>i.group===r)})).filter(r=>r.items.length>0)}function tE(t){return t==="preset"?"Common":t==="branch"?"Branches":t==="tag"?"Tags":"Recent commits"}function gp({value:t,onChange:r,placeholder:i,testId:l,menuTestId:a,refs:u,onNeedRefs:d}){const f=O.useId(),p=O.useRef(null),[y,g]=O.useState(!1),[x,v]=O.useState(null),[_,S]=O.useState(0),C=O.useMemo(()=>{const j=Zk(u);return x===null?j:Jk(j,x)},[u,x]),E=O.useMemo(()=>eE(C),[C]);O.useEffect(()=>{y&&d()},[y,d]),O.useEffect(()=>{S(0)},[x,y]);const N=()=>{g(!1),v(null)},b=j=>{r(j.value),N()},k=j=>{if(j.key==="ArrowDown"){if(j.preventDefault(),!y){g(!0);return}S(R=>Math.min(R+1,Math.max(C.length-1,0)))}else if(j.key==="ArrowUp"){if(j.preventDefault(),!y)return;S(R=>Math.max(R-1,0))}else if(j.key==="Enter"&&y){j.preventDefault();const R=C[_];R&&b(R)}else j.key==="Escape"&&y&&(j.preventDefault(),N())};return m.jsxs("div",{className:"combo",ref:p,onBlur:j=>{j.currentTarget.contains(j.relatedTarget)||N()},children:[m.jsxs("div",{className:"combo-row",children:[m.jsx("input",{"data-testid":l,value:t,placeholder:i,spellCheck:!1,role:"combobox","aria-expanded":y,"aria-controls":f,"aria-autocomplete":"list",onChange:j=>{r(j.target.value),y&&v(j.target.value)},onKeyDown:k}),m.jsx("button",{type:"button",className:"icon-btn combo-toggle","data-testid":`${l}-toggle`,"aria-label":"Show recent refs","aria-expanded":y,onMouseDown:j=>j.preventDefault(),onClick:()=>y?N():g(!0),children:m.jsx(fy,{})})]}),y?m.jsx("div",{className:"combo-menu",id:f,role:"listbox","data-testid":a,children:E.length===0?m.jsx("div",{className:"combo-empty muted",children:"No matching refs — the typed value is kept"}):E.map(j=>m.jsxs("div",{className:"combo-group",children:[m.jsx("div",{className:"combo-heading",children:tE(j.group)}),j.items.map(R=>{const D=C.indexOf(R);return m.jsxs("button",{type:"button",role:"option","aria-selected":D===_,className:D===_?"combo-option active":"combo-option","data-testid":`ref-option-${R.group}`,onMouseDown:H=>H.preventDefault(),onMouseEnter:()=>S(D),onClick:()=>b(R),children:[m.jsx("span",{className:"combo-label",children:R.label}),R.detail?m.jsx("span",{className:"combo-detail",children:R.detail}):null]},`${R.group}:${R.value}`)})]},j.group))}):null]})}function nE({initialPath:t,onSelect:r,onClose:i}){const[l,a]=O.useState(null),[u,d]=O.useState(t),[f,p]=O.useState(null),[y,g]=O.useState(""),[x,v]=O.useState(!1),_=O.useRef(null),S=O.useRef(0),C=async k=>{const j=S.current+1;S.current=j,v(!0);try{const R=await ft.browse(k);if(S.current!==j)return;a(R),d(R.path),p(R.is_git?R.path:null),g("")}catch(R){if(S.current!==j)return;g(R instanceof Error?R.message:String(R))}finally{S.current===j&&v(!1)}};O.useEffect(()=>{var k,j;C(t),(k=_.current)==null||k.focus(),(j=_.current)==null||j.select()},[t]);const E=f||(l==null?void 0:l.path)||u,N=f&&f!==(l==null?void 0:l.path)?f.split(/[\\/]/).filter(Boolean).pop():l!=null&&l.is_git?"this repository":"this folder",b=k=>{k.key==="Escape"&&(k.preventDefault(),i())};return m.jsx("div",{className:"modal-backdrop","data-testid":"repo-explorer","data-overlay":"true",onClick:i,onKeyDown:b,children:m.jsxs("div",{className:"modal",role:"dialog","aria-modal":"true","aria-labelledby":"explorer-title",onClick:k=>k.stopPropagation(),children:[m.jsxs("div",{className:"modal-head",children:[m.jsxs("div",{children:[m.jsx("h2",{id:"explorer-title",children:"Select repository"}),m.jsx("p",{className:"muted",children:"Browse to a git root, or paste the full path."})]}),m.jsx("button",{type:"button",className:"btn ghost","data-testid":"explorer-cancel",onClick:i,children:"Cancel"})]}),m.jsxs("form",{className:"explorer-path",onSubmit:k=>{k.preventDefault(),C(u)},children:[m.jsx("input",{ref:_,"data-testid":"explorer-path",value:u,onChange:k=>d(k.target.value),spellCheck:!1,"aria-label":"Directory path"}),m.jsx("button",{type:"button",className:"btn",disabled:!(l!=null&&l.parent),onClick:()=>(l==null?void 0:l.parent)&&void C(l.parent),children:"Up"}),m.jsx("button",{type:"button",className:"btn",onClick:()=>l&&void C(l.home),children:"Home"}),m.jsx("button",{type:"submit",className:"btn",children:"Go"})]}),y?m.jsx("div",{className:"error",role:"alert",children:y}):null,m.jsx("div",{className:"explorer-list",role:"listbox","aria-label":"Folders","aria-busy":x,children:l!=null&&l.entries.length?l.entries.map(k=>{const j=f===k.path;return m.jsxs("button",{type:"button",role:"option","aria-selected":j,className:j?"explorer-row active":"explorer-row","data-testid":"explorer-entry","data-path":k.path,onClick:()=>p(k.path),onDoubleClick:()=>void C(k.path),children:[m.jsx(wp,{}),m.jsx("span",{className:"explorer-name",children:k.name}),k.is_git?m.jsx("span",{className:"chip git-badge",children:"git"}):null]},k.path)}):m.jsx("div",{className:"muted explorer-empty",children:x?"Loading…":"No folders here"})}),m.jsxs("div",{className:"modal-foot",children:[m.jsx("span",{className:"muted explorer-current",title:E,children:E}),m.jsxs("button",{type:"button",className:"btn primary","data-testid":"explorer-use",disabled:!E,onClick:()=>E&&r(E),children:["Use ",N]})]})]})})}const ml=[{id:"obsidian",label:"Obsidian",group:"dark"},{id:"nord",label:"Nord",group:"dark"},{id:"solarized-dark",label:"Solarized Dark",group:"dark"},{id:"forest",label:"Forest",group:"dark"},{id:"rose",label:"Rose Pine",group:"dark"},{id:"amber",label:"Midnight Amber",group:"dark"},{id:"volcano",label:"Volcano",group:"dark"},{id:"lavender",label:"Lavender",group:"dark"},{id:"neon-noir",label:"Neon Noir",group:"dark"},{id:"synthwave",label:"Synthwave",group:"dark"},{id:"phosphor",label:"Phosphor",group:"dark"},{id:"aurora",label:"Aurora",group:"dark"},{id:"biolume",label:"Biolume",group:"dark"},{id:"carbon",label:"Carbon",group:"dark"},{id:"paper",label:"Paper",group:"light"},{id:"solarized-light",label:"Solarized Light",group:"light"},{id:"seafoam",label:"Seafoam",group:"light"},{id:"high-contrast",label:"High Contrast",group:"light"},{id:"sakura",label:"Sakura",group:"light"},{id:"citrus",label:"Citrus",group:"light"},{id:"peach",label:"Peach Fuzz",group:"light"},{id:"candy",label:"Cotton Candy",group:"light"},{id:"sky",label:"Clear Sky",group:"light"},{id:"coral",label:"Coral Reef",group:"light"}],rE="obsidian",fg="loadpath.theme";function oE(t){return ml.some(r=>r.id===t)}function hg(){try{const t=localStorage.getItem(fg)||"";if(oE(t))return t}catch{}return rE}function iE(t){var r;return((r=ml.find(i=>i.id===t))==null?void 0:r.group)==="light"?"light":"dark"}function pg(t){document.documentElement.dataset.theme=t,document.documentElement.style.colorScheme=iE(t);try{localStorage.setItem(fg,t)}catch{}}const yp=[{id:"review",label:"Review",testId:"tab-review",shortcut:"1",icon:ly},{id:"architecture",label:"Architecture",testId:"tab-architecture",shortcut:"2",icon:ay},{id:"graph",label:"Impact graph",testId:"tab-graph",shortcut:"3",icon:uy},{id:"prs",label:"Pull requests",testId:"tab-prs",shortcut:"4",icon:cy},{id:"settings",label:"Settings",testId:"tab-settings",shortcut:"5",icon:dy}];function sE(){var Ir,er,tr,br,jn,Mn,Pn;const[t,r]=O.useState("review"),[i,l]=O.useState(localStorage.getItem("loadpath.repo")||""),[a,u]=O.useState(localStorage.getItem("loadpath.base")||"HEAD~1"),[d,f]=O.useState(localStorage.getItem("loadpath.head")||"HEAD"),[p,y]=O.useState(null),[g,x]=O.useState(null),[v,_]=O.useState([]),[S,C]=O.useState("review"),[E,N]=O.useState(""),[b,k]=O.useState(""),[j,R]=O.useState(""),[D,H]=O.useState({}),[X,V]=O.useState([]),[ee,Z]=O.useState(localStorage.getItem("loadpath.scmRepo")||""),[te,J]=O.useState(localStorage.getItem("loadpath.provider")||"github"),[M,W]=O.useState(localStorage.getItem("loadpath.prNumber")||""),[B,U]=O.useState(""),[A,z]=O.useState(hg),[F,P]=O.useState(!1),[T,ne]=O.useState(!1),[re,ue]=O.useState(null),ce=O.useRef(i);ce.current=i;const de=O.useRef(!1);de.current=T;const Q=O.useRef(""),se=q=>{z(q),pg(q)},fe=O.useRef(""),me=q=>{fe.current=q,k(q)};O.useEffect(()=>{ft.settings().then(H).catch(()=>{}).finally(()=>P(!0)),ft.repos().then(q=>_(q.repos)).catch(()=>{})},[]);const xe=()=>i.trim()?!0:(N("Point at a local repository path first."),!1);O.useEffect(()=>{if(t!=="architecture"||!i.trim())return;const q=i;let ye=!1;return ft.architecture(q).then(Le=>{!ye&&ce.current===q&&x(Le)}).catch(()=>{}),()=>{ye=!0}},[t,i]);const pe=q=>{l(q),localStorage.setItem("loadpath.repo",q),q.trim()!==Q.current&&(Q.current="",ue(null))},Ce=O.useCallback(()=>{const q=ce.current.trim();!q||Q.current===q||(Q.current=q,ft.gitRefs(q).then(ye=>{ce.current.trim()===q&&ue(ye)}).catch(()=>{Q.current===q&&(Q.current="",ue(null))}))},[]),je=(q,ye)=>{u(q),f(ye),localStorage.setItem("loadpath.base",q),localStorage.setItem("loadpath.head",ye)},Me=(q,ye,Le)=>{J(q),Z(ye),localStorage.setItem("loadpath.provider",q),localStorage.setItem("loadpath.scmRepo",ye),Le!==void 0&&(W(Le),localStorage.setItem("loadpath.prNumber",Le))},Re=async(q=i)=>{if(!q.trim())return null;const ye=await ft.architecture(q);return ce.current===q&&x(ye),ye},Xe=async()=>{if(!fe.current&&xe()){N(""),R(""),me("Tracing load path…"),pe(i),je(a,d);try{const q=await ft.review(i,a,d,!0);y(q),C("review"),r("review"),await ft.repos().then(ye=>_(ye.repos)).catch(()=>{}),await Re(i)}catch(q){N(q instanceof Error?q.message:String(q))}finally{me("")}}},rt=async(q=!0)=>{if(!fe.current&&xe()){N(""),R(""),me(q?"Indexing…":"Full reindex…"),pe(i);try{await ft.index(i,q);const ye=await Re(i);await ft.repos().then(Le=>_(Le.repos)).catch(()=>{}),ye!=null&&ye.indexed&&(C("architecture"),r("architecture"))}catch(ye){N(ye instanceof Error?ye.message:String(ye))}finally{me("")}}},Ze=async()=>{if(!fe.current&&xe()){N(""),R(""),me("Detecting layout…"),pe(i);try{const q=await ft.init(i);R(q.message),await ft.repos().then(ye=>_(ye.repos)).catch(()=>{})}catch(q){N(q instanceof Error?q.message:String(q))}finally{me("")}}},Je=async()=>{if(p!=null&&p.markdown)try{await navigator.clipboard.writeText(p.markdown),R("Copied markdown brief")}catch(q){N(q instanceof Error?q.message:String(q))}},Vt=async()=>{if(!fe.current){if(!(p!=null&&p.markdown)||!ee||!M){N("Pick a pull request first (Pull requests tab), then post the brief.");return}me("Posting Loadpath brief…");try{const q=await ft.postComment(te,ee,Number(M),p.markdown);R(q.updated?"Updated the Loadpath PR comment":"Posted the Loadpath PR comment")}catch(q){N(q instanceof Error?q.message:String(q))}finally{me("")}}},zt=async()=>{if(!fe.current){N(""),me("Fetching pull requests…");try{const q=await ft.prs(te,ee);V(q.pull_requests)}catch(q){N(q instanceof Error?q.message:String(q))}finally{me("")}}},At=async q=>{q.preventDefault();const ye=new FormData(q.currentTarget),Le={github_token:String(ye.get("github_token")||""),bitbucket_token:String(ye.get("bitbucket_token")||""),bitbucket_username:String(ye.get("bitbucket_username")||""),ai_provider:String(ye.get("ai_provider")||"none"),ai_api_key:String(ye.get("ai_api_key")||""),ai_model:String(ye.get("ai_model")||""),ai_base_url:String(ye.get("ai_base_url")||"")},Nt=v.length?{...Le,workspaces:v.map(Ct=>({path:Ct.path,name:Ct.name}))}:Le;try{H(await ft.saveSettings(Nt)),R("Settings saved on this machine")}catch(Ct){N(Ct instanceof Error?Ct.message:String(Ct))}},lt=async()=>{if(!(!p||fe.current)){me("Residual analysis…");try{const q=await ft.residual(p);U(q.note)}catch(q){N(q instanceof Error?q.message:String(q))}finally{me("")}}},ht=O.useRef(Xe);ht.current=Xe;const ot=O.useRef(t);ot.current=t,O.useEffect(()=>{const q=ye=>{if(de.current){ye.key==="Escape"&&(ye.preventDefault(),ne(!1));return}const Le=ye.target;if(Le&&(Le.tagName==="INPUT"||Le.tagName==="TEXTAREA"||Le.tagName==="SELECT"||Le.isContentEditable)){ye.key==="Escape"&&Le.blur();return}if(ye.key==="Escape"){N(""),R("");return}const Nt=yp.find(Ct=>Ct.shortcut===ye.key);if(Nt&&!ye.metaKey&&!ye.ctrlKey&&!ye.altKey&&r(Nt.id),(ye.metaKey||ye.ctrlKey)&&ye.key==="Enter"){if(ot.current==="settings"||ot.current==="prs"||fe.current)return;ye.preventDefault(),ht.current()}};return window.addEventListener("keydown",q),()=>window.removeEventListener("keydown",q)},[]);const pt=O.useMemo(()=>S==="architecture"?(g==null?void 0:g.nodes)??[]:(p==null?void 0:p.nodes)??[],[S,g,p]),Cn=O.useMemo(()=>S==="architecture"?(g==null?void 0:g.edges)??[]:(p==null?void 0:p.edges)??[],[S,g,p]),Ut=p!=null&&p.index?`${p.index.counts.nodes} nodes · ${p.index.counts.edges} edges`:g!=null&&g.indexed?`${g.counts.nodes} nodes · ${g.counts.edges} edges`:"Not indexed",hn=((p==null?void 0:p.findings)||[]).filter(q=>!q.waived);return m.jsxs("div",{className:"app",children:[m.jsx("a",{className:"skip",href:"#main",children:"Skip to content"}),m.jsxs("nav",{className:"rail","data-testid":"rail","aria-label":"Primary",children:[m.jsxs("div",{className:"brand",children:[m.jsx("div",{className:"brand-mark",children:"Loadpath"}),m.jsx("div",{className:"brand-sub",children:"Load-path review"})]}),yp.map(q=>{const ye=q.icon,Le=t===q.id;return m.jsxs("button",{type:"button","data-testid":q.testId,className:Le?"nav-item active":"nav-item","aria-current":Le?"page":void 0,"aria-label":q.label,onClick:()=>r(q.id),children:[m.jsx(ye,{}),m.jsx("span",{children:q.label})]},q.id)}),m.jsxs("div",{className:"theme-pick",children:[m.jsx("label",{htmlFor:"theme-select",children:"Theme"}),m.jsx("select",{id:"theme-select","data-testid":"theme-select",value:A,onChange:q=>se(q.target.value),children:["dark","light"].map(q=>m.jsx("optgroup",{label:q==="dark"?"Dark":"Light",children:ml.filter(ye=>ye.group===q).map(ye=>m.jsx("option",{value:ye.id,children:ye.label},ye.id))},q))})]}),m.jsxs("div",{className:"rail-foot",children:[m.jsx("div",{className:"muted",role:"status",children:b||Ut}),m.jsxs("div",{className:"kbd-hint",children:[m.jsx("kbd",{children:"1"}),"–",m.jsx("kbd",{children:"5"})," tabs · ",m.jsx("kbd",{children:"Ctrl"}),"+",m.jsx("kbd",{children:"Enter"})," review"]})]})]}),m.jsxs("div",{className:"main",id:"main",children:[b?m.jsxs("div",{className:"progress",role:"status","aria-live":"polite","aria-busy":"true",children:[m.jsx("i",{}),m.jsx("span",{className:"sr-only",children:b})]}):null,m.jsxs("header",{className:"topbar","data-testid":"topbar",children:[v.length>0?m.jsxs("label",{className:"field workspace",children:[m.jsx("span",{children:"Workspace"}),m.jsxs("select",{"data-testid":"workspace-select",value:v.some(q=>q.path===i)?i:"",onChange:q=>{q.target.value&&pe(q.target.value)},children:[m.jsx("option",{value:"",children:"Indexed repos…"}),v.map(q=>m.jsxs("option",{value:q.path,children:[q.name,q.indexed?` (${q.counts.nodes})`:""]},q.path))]})]}):null,m.jsxs("label",{className:"field path",children:[m.jsx("span",{children:"Repository"}),m.jsxs("div",{className:"path-row",children:[m.jsx("input",{"data-testid":"repo-path",placeholder:"Local monorepo path",value:i,onChange:q=>{const ye=q.target.value;l(ye),ye.trim()!==Q.current&&(Q.current="",ue(null))},spellCheck:!1}),m.jsx("button",{type:"button",className:"icon-btn","data-testid":"btn-browse-repo","aria-label":"Browse for a local repository",onClick:()=>ne(!0),children:m.jsx(wp,{})})]})]}),m.jsxs("label",{className:"field ref",children:[m.jsx("span",{children:"Base"}),m.jsx(gp,{testId:"base-ref",menuTestId:"base-ref-menu",value:a,onChange:q=>je(q,d),placeholder:"base",refs:re,onNeedRefs:Ce})]}),m.jsxs("label",{className:"field ref",children:[m.jsx("span",{children:"Head"}),m.jsx(gp,{testId:"head-ref",menuTestId:"head-ref-menu",value:d,onChange:q=>je(a,q),placeholder:"head",refs:re,onNeedRefs:Ce})]}),m.jsxs("div",{className:"topbar-actions",children:[m.jsx("button",{type:"button","data-testid":"btn-init",disabled:!!b,onClick:Ze,children:"Draft config"}),m.jsx("button",{type:"button","data-testid":"btn-index",disabled:!!b,onClick:()=>rt(!0),children:"Index"}),m.jsx("button",{type:"button","data-testid":"btn-review",className:"btn primary",disabled:!!b,onClick:Xe,children:"Review"})]})]}),m.jsxs("div",{className:"alerts",children:[E?m.jsxs("div",{className:"error","data-testid":"error",role:"alert",children:[m.jsx("span",{children:E}),m.jsx("button",{type:"button",className:"dismiss",onClick:()=>N(""),"aria-label":"Dismiss error",children:"×"})]}):null,j?m.jsxs("div",{className:"banner","data-testid":"status-note",children:[m.jsx("span",{children:j}),m.jsx("button",{type:"button",className:"dismiss",onClick:()=>R(""),"aria-label":"Dismiss",children:"×"})]}):null,((Ir=p==null?void 0:p.index)!=null&&Ir.stale||g!=null&&g.stale)&&(t==="review"||t==="architecture")?m.jsx("div",{className:"banner stale","data-testid":"index-stale",children:"Index is stale — files changed since the last extract. Index again before trusting this walk."}):null,((er=p==null?void 0:p.index)==null?void 0:er.django_boot)==="failed"||(g==null?void 0:g.django_boot)==="failed"?m.jsx("div",{className:"banner warn","data-testid":"django-boot-failed",children:((tr=p==null?void 0:p.index)==null?void 0:tr.django_boot_detail)||(g==null?void 0:g.django_boot_detail)||"django.setup() failed"}):null,(br=p==null?void 0:p.workspace)!=null&&br.dirty_overlaps_review&&t==="review"?m.jsxs("div",{className:"banner warn","data-testid":"dirty-tree",children:["Uncommitted files overlap this review: ",(p.workspace.dirty_overlap||[]).slice(0,6).join(", ")]}):null]}),m.jsxs("div",{className:"stage",children:[t==="review"&&m.jsxs("div",{className:"content","data-testid":"review-layout",children:[m.jsx("aside",{className:"brief","data-testid":"brief",children:p?m.jsx(lE,{review:p,findings:hn,aiNote:B,busy:!!b,onAskAi:lt,onCopy:Je,onPost:Vt}):m.jsxs("div",{className:"empty","data-testid":"review-empty",children:[m.jsx("h2",{children:"Trace the force of this diff"}),m.jsx("p",{children:"The graph is the architecture. The brief is where this change travels — not a hunk list."}),m.jsxs("ol",{children:[m.jsx("li",{children:"Point at a Django + React monorepo, or pick an indexed workspace."}),m.jsxs("li",{children:["Index it. Missing ",m.jsx("code",{children:"loadpath.yml"})," is drafted from ",m.jsx("code",{children:"manage.py"})," and"," ",m.jsx("code",{children:"src/features"}),"."]}),m.jsx("li",{children:"Review a git range, or open a pull request so base/head become a three-dot merge-base."})]})]})}),m.jsx("div",{className:"graph-wrap","data-testid":"review-graph",children:p?m.jsx($u,{nodes:p.nodes,edges:p.edges}):null})]}),t==="architecture"&&m.jsxs("div",{className:"content","data-testid":"architecture-panel",children:[m.jsx("aside",{className:"brief","data-testid":"architecture-brief",children:g!=null&&g.indexed?m.jsx(aE,{architecture:g,busy:!!b,onReindex:()=>rt(!1),onReview:Xe}):m.jsx("p",{className:"muted","data-testid":"architecture-empty",children:"Index this repo to build the architecture graph. Review then walks that same graph for a git range — it does not start from a hunk list."})}),m.jsx("div",{className:"graph-wrap","data-testid":"architecture-graph",children:g!=null&&g.indexed?m.jsx($u,{nodes:g.nodes,edges:g.edges}):null})]}),t==="graph"&&m.jsxs("div",{className:"graph-wrap","data-testid":"graph-full",style:{height:"100%"},children:[m.jsxs("div",{className:"graph-modes",children:[m.jsxs("div",{className:"seg","aria-label":"Graph scope",children:[m.jsx("button",{type:"button","aria-pressed":S==="review","data-testid":"graph-mode-review",className:S==="review"?"active":"",onClick:()=>C("review"),children:"This review"}),m.jsx("button",{type:"button","aria-pressed":S==="architecture","data-testid":"graph-mode-architecture",className:S==="architecture"?"active":"",onClick:()=>C("architecture"),children:"Indexed architecture"})]}),m.jsxs("div",{className:"legend","aria-hidden":"true",children:[m.jsxs("span",{children:[m.jsx("i",{})," cheap"]}),m.jsxs("span",{children:[m.jsx("i",{className:"exp"})," expensive"]}),m.jsxs("span",{children:[m.jsx("i",{className:"crit"})," critical"]}),m.jsxs("span",{children:[m.jsx("i",{className:"dash"})," inferred"]})]})]}),pt.length?m.jsx($u,{nodes:pt,edges:Cn}):m.jsx("p",{className:"empty","data-testid":"graph-empty",children:"Index the repo or run a review first. Click a node to inspect it."})]}),t==="prs"&&m.jsxs("div",{className:"pr-list","data-testid":"pr-list",children:[m.jsxs("div",{className:"pr-toolbar",children:[m.jsxs("label",{className:"field provider",children:[m.jsx("span",{children:"Provider"}),m.jsxs("select",{"data-testid":"pr-provider",value:te,onChange:q=>Me(q.target.value,ee,M),children:[m.jsx("option",{value:"github",children:"GitHub"}),m.jsx("option",{value:"bitbucket",children:"Bitbucket"})]})]}),m.jsxs("label",{className:"field",children:[m.jsx("span",{children:"Repository"}),m.jsx("input",{"data-testid":"pr-repo",placeholder:"owner/repo",value:ee,onChange:q=>Me(te,q.target.value,M),spellCheck:!1})]}),m.jsx("button",{type:"button","data-testid":"btn-list-prs",className:"btn",disabled:!!b,onClick:zt,children:"List PRs"})]}),X.length===0?m.jsxs("div",{className:"empty","data-testid":"pr-empty",children:[m.jsx("h2",{children:"No pull requests loaded"}),m.jsx("p",{children:"Enter an owner/repo, then list open PRs. Reviewing a PR fills base and head from its SHAs."})]}):X.map(q=>m.jsxs("article",{className:"pr","data-testid":`pr-${q.number}`,children:[m.jsxs("h3",{children:["#",q.number," ",q.title]}),m.jsxs("div",{className:"pr-meta muted",children:[m.jsx("span",{className:`chip ${q.draft?"":"open"}`,children:q.draft?"draft":q.state}),m.jsx("span",{children:q.author}),m.jsxs("span",{children:[q.source_branch," → ",q.target_branch]})]}),m.jsxs("div",{className:"pr-actions",children:[m.jsxs("a",{href:q.url,target:"_blank",rel:"noreferrer",children:["Open on ",q.provider]}),m.jsx("button",{type:"button",className:"btn primary","data-testid":`pr-review-${q.number}`,onClick:()=>{je(q.base_sha||q.target_branch,q.head_sha||q.source_branch),Me(q.provider,q.repo,String(q.number)),r("review")},children:"Review this range"})]})]},`${q.provider}-${q.number}`))]}),t==="settings"&&F&&m.jsxs("form",{className:"settings","data-testid":"settings-form",onSubmit:At,children:[m.jsxs("div",{children:[m.jsx("h1",{children:"Settings"}),m.jsx("p",{className:"muted",children:"Tokens stay on this machine in ~/.loadpath/settings.json. AI runs only on residual uncertainty the graph could not close."})]}),m.jsxs("section",{className:"settings-card",children:[m.jsx("h2",{children:"Appearance"}),m.jsx("p",{className:"muted",children:"Local to this browser. High contrast is a first-class theme, not an afterthought."}),m.jsx("div",{className:"theme-grid","data-testid":"theme-grid",children:ml.map(q=>m.jsxs("button",{type:"button","data-theme":q.id,className:A===q.id?"theme-swatch active":"theme-swatch","data-testid":`theme-${q.id}`,onClick:()=>se(q.id),children:[m.jsx("div",{className:"swatch-bar","aria-hidden":"true"}),m.jsx("div",{className:"name",children:q.label}),m.jsx("div",{className:"group",children:q.group})]},q.id))})]}),m.jsxs("section",{className:"settings-card",children:[m.jsx("h2",{children:"Source control"}),m.jsx("label",{htmlFor:"github_token",children:"GitHub token"}),m.jsx("input",{id:"github_token",name:"github_token",type:"password",placeholder:"ghp_…",autoComplete:"off"}),m.jsx("label",{htmlFor:"bitbucket_token",children:"Bitbucket token"}),m.jsx("input",{id:"bitbucket_token",name:"bitbucket_token",type:"password",autoComplete:"off"}),m.jsx("label",{htmlFor:"bitbucket_username",children:"Bitbucket username (app passwords)"}),m.jsx("input",{id:"bitbucket_username",name:"bitbucket_username",defaultValue:String(D.bitbucket_username||"")})]}),m.jsxs("section",{className:"settings-card",children:[m.jsx("h2",{children:"Residual AI"}),m.jsx("label",{htmlFor:"ai_provider",children:"Provider"}),m.jsxs("select",{id:"ai_provider",name:"ai_provider",defaultValue:String(((jn=D.ai)==null?void 0:jn.provider)||"none"),children:[m.jsx("option",{value:"none",children:"none (graph only)"}),m.jsx("option",{value:"anthropic",children:"Anthropic"}),m.jsx("option",{value:"openai",children:"OpenAI"}),m.jsx("option",{value:"grok",children:"Grok / xAI"}),m.jsx("option",{value:"deepseek",children:"DeepSeek"}),m.jsx("option",{value:"cursor",children:"Cursor-compatible (OpenAI protocol)"}),m.jsx("option",{value:"ollama",children:"Ollama local"})]}),m.jsx("label",{htmlFor:"ai_api_key",children:"API key"}),m.jsx("input",{id:"ai_api_key",name:"ai_api_key",type:"password",autoComplete:"off"}),m.jsx("label",{htmlFor:"ai_model",children:"Model"}),m.jsx("input",{id:"ai_model",name:"ai_model","data-testid":"ai-model",placeholder:"optional override",defaultValue:String(((Mn=D.ai)==null?void 0:Mn.model)||"")}),m.jsx("label",{htmlFor:"ai_base_url",children:"Base URL"}),m.jsx("input",{id:"ai_base_url",name:"ai_base_url","data-testid":"ai-base-url",placeholder:"optional, OpenAI-compatible",defaultValue:String(((Pn=D.ai)==null?void 0:Pn.base_url)||"")}),m.jsx("button",{className:"btn primary",type:"submit","data-testid":"btn-save-settings",children:"Save"})]})]})]})]}),T?m.jsx(nE,{initialPath:i,onClose:()=>ne(!1),onSelect:q=>{pe(q),ne(!1)}}):null]})}function lE({review:t,findings:r,aiNote:i,busy:l,onAskAi:a,onCopy:u,onPost:d}){var p,y,g,x,v,_,S,C;const f=[...new Set(t.confidence.reasons||[])];return m.jsxs(m.Fragment,{children:[m.jsxs("div",{className:`merge-box ${t.confidence.level}`,children:[m.jsxs("div",{className:`level ${t.confidence.level}`,children:[t.confidence.level.toUpperCase()," — ",t.title]}),f.length?m.jsx("ul",{className:"reasons",children:f.map(E=>m.jsx("li",{children:E},E))}):null,t.low_risk?m.jsx("span",{className:"chip",children:"low-risk"}):null,t.change_kinds.map(E=>m.jsx("span",{className:"chip",children:di(E)},E))]}),m.jsxs("div",{className:"metrics",children:[m.jsxs("div",{className:"metric",children:[m.jsxs("div",{className:"n",children:[t.confidence.covered_sinks,"/",t.confidence.sinks]}),m.jsx("div",{className:"l",children:"Sinks tested"})]}),m.jsxs("div",{className:"metric",children:[m.jsx("div",{className:"n",children:r.length}),m.jsx("div",{className:"l",children:"Findings"})]}),m.jsxs("div",{className:"metric",children:[m.jsx("div",{className:"n",children:t.residuals.length}),m.jsx("div",{className:"l",children:"Residuals"})]})]}),m.jsx("pre",{className:"headline",children:t.headline}),t.index?m.jsxs("details",{className:"section",open:!0,children:[m.jsxs("summary",{children:["Index ",m.jsx("span",{className:"count",children:t.index.counts.nodes})]}),m.jsxs("div",{className:"muted",children:["Walked ",t.index.counts.nodes," nodes / ",t.index.counts.edges," edges",t.index.reindex_skipped?" from an unchanged index":t.index.reindexed?" after an incremental refresh":" from the existing index",t.index.django_boot&&t.index.django_boot!=="off"?` · Django boot ${t.index.django_boot}`:"",(p=t.workspace)!=null&&p.three_dot?" · three-dot range":""]})]}):null,m.jsxs("details",{className:"section",open:!0,children:[m.jsxs("summary",{children:["Read this ",m.jsx("span",{className:"count",children:t.read_order.length})]}),t.read_order.map((E,N)=>m.jsxs("div",{className:"read-item",children:[m.jsxs("span",{className:"file",children:[N+1,". ",E.path]}),m.jsx("div",{className:"why",children:E.why})]},E.path))]}),m.jsxs("details",{className:"section",children:[m.jsxs("summary",{children:["Clusters ",m.jsx("span",{className:"count",children:t.clusters.length})]}),t.clusters.map(E=>m.jsxs("div",{className:"muted",children:[m.jsx("strong",{children:E.title})," — ",E.files.join(", ")]},E.id))]}),m.jsxs("details",{className:"section",open:!0,children:[m.jsxs("summary",{children:["Architecture ",m.jsx("span",{className:"count",children:r.length})]}),r.length===0?m.jsx("div",{className:"muted",children:t.architecture_note}):r.map(E=>m.jsxs("div",{className:"finding",children:[m.jsx("span",{className:`chip ${E.severity}`,children:E.severity}),E.message]},E.rule+E.message))]}),m.jsx(mg,{cards:t.deepening}),m.jsxs("details",{className:"section",open:!0,children:[m.jsxs("summary",{children:["Residual ",m.jsx("span",{className:"count",children:t.residuals.length})]}),m.jsx("p",{className:"muted",children:"AI is only used here, on what the graph could not close."}),t.residuals.map(E=>m.jsx("div",{className:"residual muted",children:E},E))]}),(g=(y=t.evolution)==null?void 0:y.notes)!=null&&g.length||(v=(x=t.evolution)==null?void 0:x.hotspots)!=null&&v.some(E=>E.commits)?m.jsxs("details",{className:"section",children:[m.jsx("summary",{children:"Churn & coupling"}),(((_=t.evolution)==null?void 0:_.notes)||[]).map(E=>m.jsx("div",{className:"muted",children:E},E)),(((S=t.evolution)==null?void 0:S.hotspots)||[]).filter(E=>E.commits).slice(0,6).map(E=>m.jsxs("div",{className:"muted",children:[m.jsx("span",{className:"file",children:E.path})," — ",E.commits," commits, bus factor ",E.bus_factor]},E.path))]}):null,m.jsxs("div",{className:"btn-row",children:[m.jsx("button",{type:"button",className:"btn",disabled:l,onClick:a,children:"Ask configured model"}),m.jsx("button",{type:"button",className:"btn","data-testid":"btn-copy-markdown",onClick:u,children:"Copy markdown"}),m.jsx("button",{type:"button",className:"btn","data-testid":"btn-post-comment",onClick:d,children:"Post to PR"})]}),i?m.jsx("pre",{className:"headline",children:i}):null,m.jsx("div",{className:"kicker",children:"Reviewers"}),m.jsx("div",{className:"muted",children:t.suggested_reviewers.join(", ")||"—"}),(C=t.knowledge_owners)!=null&&C.length?m.jsxs("div",{className:"muted",children:["Knowledge: ",t.knowledge_owners.join(", ")]}):null]})}function aE({architecture:t,busy:r,onReindex:i,onReview:l}){const a=t.findings.filter(u=>!u.waived);return m.jsxs(m.Fragment,{children:[m.jsxs("div",{className:"merge-box high",children:[m.jsxs("div",{className:"level high",children:["INDEXED — ",t.counts.nodes," nodes"]}),m.jsxs("div",{className:"muted",style:{marginTop:8},children:[t.indexed_at?`Last index ${sy(t.indexed_at)}`:"Indexed",t.incremental?" · incremental":" · full",t.stale?" · stale":"",t.django_boot&&t.django_boot!=="off"?` · Django boot ${t.django_boot}`:""]}),m.jsxs("span",{className:"chip",children:[t.counts.edges," edges"]}),t.has_config?m.jsx("span",{className:"chip",children:"loadpath.yml"}):null]}),m.jsxs("details",{className:"section",open:!0,children:[m.jsx("summary",{children:"Bounded contexts"}),Object.values(t.contexts).map(u=>m.jsxs("div",{className:"muted",children:[m.jsx("strong",{children:u.name})," — ",(u.django_apps||[]).join(", ")||"no apps"," ·"," ",(u.owners||[]).join(", ")||"unowned"]},u.name))]}),m.jsxs("details",{className:"section",children:[m.jsxs("summary",{children:["Rules ",m.jsx("span",{className:"count",children:(t.rules||[]).length})]}),(t.rules||[]).map(u=>m.jsx("div",{className:"muted",children:u},u))]}),m.jsxs("details",{className:"section",open:!0,children:[m.jsxs("summary",{children:["Findings ",m.jsx("span",{className:"count",children:a.length})]}),a.length===0?m.jsx("div",{className:"muted",children:"No architecture rule hits on the full graph."}):a.map(u=>m.jsxs("div",{className:"finding",children:[m.jsx("span",{className:`chip ${u.severity}`,children:u.severity}),u.message]},u.rule+u.message))]}),m.jsx(mg,{cards:t.deepening}),m.jsxs("details",{className:"section",open:!0,children:[m.jsx("summary",{children:"Types"}),m.jsx("table",{className:"type-table",children:m.jsx("tbody",{children:Object.entries(t.type_counts||{}).sort((u,d)=>d[1]-u[1]).slice(0,12).map(([u,d])=>m.jsxs("tr",{children:[m.jsx("td",{children:gl(u)}),m.jsx("td",{children:d})]},u))})})]}),m.jsxs("div",{className:"btn-row",children:[m.jsx("button",{type:"button",className:"btn",disabled:r,onClick:i,"data-testid":"btn-full-reindex",children:"Full reindex"}),m.jsx("button",{type:"button",className:"btn primary",disabled:r,onClick:l,children:"Review against this index"})]})]})}function mg({cards:t}){const r=t||[];return r.length?m.jsxs("details",{className:"section",open:!0,"data-testid":"deepening-list",children:[m.jsxs("summary",{children:["Depth ",m.jsx("span",{className:"count",children:r.length})]}),m.jsx("p",{className:"muted",children:"Deepening opportunities: more behaviour behind a smaller interface, at a real seam."}),r.map(i=>m.jsxs("div",{className:"finding","data-testid":"deepening-card",children:[m.jsx("span",{className:`chip ${i.strength}`,children:iy(i.strength)}),i.top?m.jsx("span",{className:"chip",children:"top"}):null,m.jsx("strong",{children:i.title}),m.jsx("div",{className:"why",children:i.message}),i.deletion_test?m.jsxs("div",{className:"muted",children:["Deletion test: ",i.deletion_test]}):null,i.before&&i.after?m.jsxs("div",{className:"muted",children:[i.before," → ",i.after]}):null]},i.rule+i.title))]}):null}pg(hg());ny.createRoot(document.getElementById("root")).render(m.jsx(O.StrictMode,{children:m.jsx(sE,{})}));export{Ik as L,dE as a,uE as c,m as j,cE as l,O as r,gl as t}; diff --git a/src/loadpath/static/assets/index-BSKSsotG.css b/src/loadpath/static/assets/index-Mu6nhLaV.css similarity index 92% rename from src/loadpath/static/assets/index-BSKSsotG.css rename to src/loadpath/static/assets/index-Mu6nhLaV.css index bcfe35c..468bce8 100644 --- a/src/loadpath/static/assets/index-BSKSsotG.css +++ b/src/loadpath/static/assets/index-Mu6nhLaV.css @@ -1 +1 @@ -.react-flow{direction:ltr;--xy-edge-stroke-default: #b1b1b7;--xy-edge-stroke-width-default: 1;--xy-edge-stroke-selected-default: #555;--xy-connectionline-stroke-default: #b1b1b7;--xy-connectionline-stroke-width-default: 1;--xy-attribution-background-color-default: rgba(255, 255, 255, .5);--xy-minimap-background-color-default: #fff;--xy-minimap-mask-background-color-default: rgba(240, 240, 240, .6);--xy-minimap-mask-stroke-color-default: transparent;--xy-minimap-mask-stroke-width-default: 1;--xy-minimap-node-background-color-default: #e2e2e2;--xy-minimap-node-stroke-color-default: transparent;--xy-minimap-node-stroke-width-default: 2;--xy-background-color-default: transparent;--xy-background-pattern-dots-color-default: #91919a;--xy-background-pattern-lines-color-default: #eee;--xy-background-pattern-cross-color-default: #e2e2e2;background-color:var(--xy-background-color, var(--xy-background-color-default));--xy-node-color-default: inherit;--xy-node-border-default: 1px solid #1a192b;--xy-node-background-color-default: #fff;--xy-node-group-background-color-default: rgba(240, 240, 240, .25);--xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(0, 0, 0, .08);--xy-node-boxshadow-selected-default: 0 0 0 .5px #1a192b;--xy-node-border-radius-default: 3px;--xy-handle-background-color-default: #1a192b;--xy-handle-border-color-default: #fff;--xy-selection-background-color-default: rgba(0, 89, 220, .08);--xy-selection-border-default: 1px dotted rgba(0, 89, 220, .8);--xy-controls-button-background-color-default: #fefefe;--xy-controls-button-background-color-hover-default: #f4f4f4;--xy-controls-button-color-default: inherit;--xy-controls-button-color-hover-default: inherit;--xy-controls-button-border-color-default: #eee;--xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, .08);--xy-edge-label-background-color-default: #ffffff;--xy-edge-label-color-default: inherit;--xy-resize-background-color-default: #3367d9}.react-flow.dark{--xy-edge-stroke-default: #3e3e3e;--xy-edge-stroke-width-default: 1;--xy-edge-stroke-selected-default: #727272;--xy-connectionline-stroke-default: #b1b1b7;--xy-connectionline-stroke-width-default: 1;--xy-attribution-background-color-default: rgba(150, 150, 150, .25);--xy-minimap-background-color-default: #141414;--xy-minimap-mask-background-color-default: rgba(60, 60, 60, .6);--xy-minimap-mask-stroke-color-default: transparent;--xy-minimap-mask-stroke-width-default: 1;--xy-minimap-node-background-color-default: #2b2b2b;--xy-minimap-node-stroke-color-default: transparent;--xy-minimap-node-stroke-width-default: 2;--xy-background-color-default: #141414;--xy-background-pattern-dots-color-default: #555;--xy-background-pattern-lines-color-default: #333;--xy-background-pattern-cross-color-default: #333;--xy-node-color-default: #f8f8f8;--xy-node-border-default: 1px solid #3c3c3c;--xy-node-background-color-default: #1e1e1e;--xy-node-group-background-color-default: rgba(240, 240, 240, .25);--xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(255, 255, 255, .08);--xy-node-boxshadow-selected-default: 0 0 0 .5px #999;--xy-handle-background-color-default: #bebebe;--xy-handle-border-color-default: #1e1e1e;--xy-selection-background-color-default: rgba(200, 200, 220, .08);--xy-selection-border-default: 1px dotted rgba(200, 200, 220, .8);--xy-controls-button-background-color-default: #2b2b2b;--xy-controls-button-background-color-hover-default: #3e3e3e;--xy-controls-button-color-default: #f8f8f8;--xy-controls-button-color-hover-default: #fff;--xy-controls-button-border-color-default: #5b5b5b;--xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, .08);--xy-edge-label-background-color-default: #141414;--xy-edge-label-color-default: #f8f8f8}.react-flow__background{background-color:var(--xy-background-color-props, var(--xy-background-color, var(--xy-background-color-default)));pointer-events:none;z-index:-1}.react-flow__container{position:absolute;width:100%;height:100%;top:0;left:0}.react-flow__pane{z-index:1;touch-action:none}.react-flow__pane.draggable{cursor:grab}.react-flow__pane.dragging{cursor:grabbing}.react-flow__pane.selection{cursor:pointer}.react-flow__viewport{transform-origin:0 0;z-index:2;pointer-events:none}.react-flow__renderer{z-index:4}.react-flow__selection{z-index:6}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible{outline:none}.react-flow__edge-path{stroke:var(--xy-edge-stroke, var(--xy-edge-stroke-default));stroke-width:var(--xy-edge-stroke-width, var(--xy-edge-stroke-width-default));fill:none}.react-flow__connection-path{stroke:var(--xy-connectionline-stroke, var(--xy-connectionline-stroke-default));stroke-width:var(--xy-connectionline-stroke-width, var(--xy-connectionline-stroke-width-default));fill:none}.react-flow .react-flow__edges{position:absolute}.react-flow .react-flow__edges svg{overflow:visible;position:absolute;pointer-events:none}.react-flow__edge{pointer-events:visibleStroke}.react-flow__edge.selectable{cursor:pointer}.react-flow__edge.animated path{stroke-dasharray:5;animation:dashdraw .5s linear infinite}.react-flow__edge.animated path.react-flow__edge-interaction{stroke-dasharray:none;animation:none}.react-flow__edge.inactive{pointer-events:none}.react-flow__edge.selected,.react-flow__edge:focus,.react-flow__edge:focus-visible{outline:none}.react-flow__edge.selected .react-flow__edge-path,.react-flow__edge.selectable:focus .react-flow__edge-path,.react-flow__edge.selectable:focus-visible .react-flow__edge-path{stroke:var(--xy-edge-stroke-selected, var(--xy-edge-stroke-selected-default))}.react-flow__edge-textwrapper{pointer-events:all}.react-flow__edge .react-flow__edge-text{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__arrowhead polyline{stroke:var(--xy-edge-stroke, var(--xy-edge-stroke-default))}.react-flow__arrowhead polyline.arrowclosed{fill:var(--xy-edge-stroke, var(--xy-edge-stroke-default))}.react-flow__connection{pointer-events:none}.react-flow__connection .animated{stroke-dasharray:5;animation:dashdraw .5s linear infinite}svg.react-flow__connectionline{z-index:1001;overflow:visible;position:absolute}.react-flow__nodes{pointer-events:none;transform-origin:0 0}.react-flow__node{position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none;pointer-events:all;transform-origin:0 0;box-sizing:border-box;cursor:default}.react-flow__node.selectable{cursor:pointer}.react-flow__node.draggable{cursor:grab;pointer-events:all}.react-flow__node.draggable.dragging{cursor:grabbing}.react-flow__nodesselection{z-index:3;transform-origin:left top;pointer-events:none}.react-flow__nodesselection-rect{position:absolute;pointer-events:all;cursor:grab}.react-flow__handle{position:absolute;pointer-events:none;min-width:5px;min-height:5px;width:6px;height:6px;background-color:var(--xy-handle-background-color, var(--xy-handle-background-color-default));border:1px solid var(--xy-handle-border-color, var(--xy-handle-border-color-default));border-radius:100%}.react-flow__handle.connectingfrom{pointer-events:all}.react-flow__handle.connectionindicator{pointer-events:all;cursor:crosshair}.react-flow__handle-bottom{top:auto;left:50%;bottom:0;transform:translate(-50%,50%)}.react-flow__handle-top{top:0;left:50%;transform:translate(-50%,-50%)}.react-flow__handle-left{top:50%;left:0;transform:translate(-50%,-50%)}.react-flow__handle-right{top:50%;right:0;transform:translate(50%,-50%)}.react-flow__edgeupdater{cursor:move;pointer-events:all}.react-flow__pane.selection .react-flow__panel{pointer-events:none}.react-flow__panel{position:absolute;z-index:5;margin:15px}.react-flow__panel.top{top:0}.react-flow__panel.bottom{bottom:0}.react-flow__panel.top.center,.react-flow__panel.bottom.center{left:50%;transform:translate(-15px) translate(-50%)}.react-flow__panel.left{left:0}.react-flow__panel.right{right:0}.react-flow__panel.left.center,.react-flow__panel.right.center{top:50%;transform:translateY(-15px) translateY(-50%)}.react-flow__attribution{font-size:10px;background:var(--xy-attribution-background-color, var(--xy-attribution-background-color-default));padding:2px 3px;margin:0}.react-flow__attribution a{text-decoration:none;color:#999}@keyframes dashdraw{0%{stroke-dashoffset:10}}.react-flow__edgelabel-renderer{position:absolute;width:100%;height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;left:0;top:0}.react-flow__viewport-portal{position:absolute;width:100%;height:100%;left:0;top:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__minimap{background:var( --xy-minimap-background-color-props, var(--xy-minimap-background-color, var(--xy-minimap-background-color-default)) )}.react-flow__minimap-svg{display:block}.react-flow__minimap-mask{fill:var( --xy-minimap-mask-background-color-props, var(--xy-minimap-mask-background-color, var(--xy-minimap-mask-background-color-default)) );stroke:var( --xy-minimap-mask-stroke-color-props, var(--xy-minimap-mask-stroke-color, var(--xy-minimap-mask-stroke-color-default)) );stroke-width:var( --xy-minimap-mask-stroke-width-props, var(--xy-minimap-mask-stroke-width, var(--xy-minimap-mask-stroke-width-default)) )}.react-flow__minimap-node{fill:var( --xy-minimap-node-background-color-props, var(--xy-minimap-node-background-color, var(--xy-minimap-node-background-color-default)) );stroke:var( --xy-minimap-node-stroke-color-props, var(--xy-minimap-node-stroke-color, var(--xy-minimap-node-stroke-color-default)) );stroke-width:var( --xy-minimap-node-stroke-width-props, var(--xy-minimap-node-stroke-width, var(--xy-minimap-node-stroke-width-default)) )}.react-flow__background-pattern.dots{fill:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-dots-color-default)) )}.react-flow__background-pattern.lines{stroke:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-lines-color-default)) )}.react-flow__background-pattern.cross{stroke:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-cross-color-default)) )}.react-flow__controls{display:flex;flex-direction:column;box-shadow:var(--xy-controls-box-shadow, var(--xy-controls-box-shadow-default))}.react-flow__controls.horizontal{flex-direction:row}.react-flow__controls-button{display:flex;justify-content:center;align-items:center;height:26px;width:26px;padding:4px;border:none;background:var(--xy-controls-button-background-color, var(--xy-controls-button-background-color-default));border-bottom:1px solid var( --xy-controls-button-border-color-props, var(--xy-controls-button-border-color, var(--xy-controls-button-border-color-default)) );color:var( --xy-controls-button-color-props, var(--xy-controls-button-color, var(--xy-controls-button-color-default)) );cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__controls-button svg{width:100%;max-width:12px;max-height:12px;fill:currentColor}.react-flow__edge.updating .react-flow__edge-path{stroke:#777}.react-flow__edge-text{font-size:10px}.react-flow__node.selectable:focus,.react-flow__node.selectable:focus-visible{outline:none}.react-flow__node-input,.react-flow__node-default,.react-flow__node-output,.react-flow__node-group{padding:10px;border-radius:var(--xy-node-border-radius, var(--xy-node-border-radius-default));width:150px;font-size:12px;color:var(--xy-node-color, var(--xy-node-color-default));text-align:center;border:var(--xy-node-border, var(--xy-node-border-default));background-color:var(--xy-node-background-color, var(--xy-node-background-color-default))}.react-flow__node-input.selectable:hover,.react-flow__node-default.selectable:hover,.react-flow__node-output.selectable:hover,.react-flow__node-group.selectable:hover{box-shadow:var(--xy-node-boxshadow-hover, var(--xy-node-boxshadow-hover-default))}.react-flow__node-input.selectable.selected,.react-flow__node-input.selectable:focus,.react-flow__node-input.selectable:focus-visible,.react-flow__node-default.selectable.selected,.react-flow__node-default.selectable:focus,.react-flow__node-default.selectable:focus-visible,.react-flow__node-output.selectable.selected,.react-flow__node-output.selectable:focus,.react-flow__node-output.selectable:focus-visible,.react-flow__node-group.selectable.selected,.react-flow__node-group.selectable:focus,.react-flow__node-group.selectable:focus-visible{box-shadow:var(--xy-node-boxshadow-selected, var(--xy-node-boxshadow-selected-default))}.react-flow__node-group{background-color:var(--xy-node-group-background-color, var(--xy-node-group-background-color-default))}.react-flow__nodesselection-rect,.react-flow__selection{background:var(--xy-selection-background-color, var(--xy-selection-background-color-default));border:var(--xy-selection-border, var(--xy-selection-border-default))}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible,.react-flow__selection:focus,.react-flow__selection:focus-visible{outline:none}.react-flow__controls-button:hover{background:var( --xy-controls-button-background-color-hover-props, var(--xy-controls-button-background-color-hover, var(--xy-controls-button-background-color-hover-default)) );color:var( --xy-controls-button-color-hover-props, var(--xy-controls-button-color-hover, var(--xy-controls-button-color-hover-default)) )}.react-flow__controls-button:disabled{pointer-events:none}.react-flow__controls-button:disabled svg{fill-opacity:.4}.react-flow__controls-button:last-child{border-bottom:none}.react-flow__controls.horizontal .react-flow__controls-button{border-bottom:none;border-right:1px solid var( --xy-controls-button-border-color-props, var(--xy-controls-button-border-color, var(--xy-controls-button-border-color-default)) )}.react-flow__controls.horizontal .react-flow__controls-button:last-child{border-right:none}.react-flow__resize-control{position:absolute}.react-flow__resize-control.left,.react-flow__resize-control.right{cursor:ew-resize}.react-flow__resize-control.top,.react-flow__resize-control.bottom{cursor:ns-resize}.react-flow__resize-control.top.left,.react-flow__resize-control.bottom.right{cursor:nwse-resize}.react-flow__resize-control.bottom.left,.react-flow__resize-control.top.right{cursor:nesw-resize}.react-flow__resize-control.handle{width:5px;height:5px;border:1px solid #fff;border-radius:1px;background-color:var(--xy-resize-background-color, var(--xy-resize-background-color-default));translate:-50% -50%}.react-flow__resize-control.handle.left{left:0;top:50%}.react-flow__resize-control.handle.right{left:100%;top:50%}.react-flow__resize-control.handle.top{left:50%;top:0}.react-flow__resize-control.handle.bottom{left:50%;top:100%}.react-flow__resize-control.handle.top.left,.react-flow__resize-control.handle.bottom.left{left:0}.react-flow__resize-control.handle.top.right,.react-flow__resize-control.handle.bottom.right{left:100%}.react-flow__resize-control.line{border-color:var(--xy-resize-background-color, var(--xy-resize-background-color-default));border-width:0;border-style:solid}.react-flow__resize-control.line.left,.react-flow__resize-control.line.right{width:1px;transform:translate(-50%);top:0;height:100%}.react-flow__resize-control.line.left{left:0;border-left-width:1px}.react-flow__resize-control.line.right{left:100%;border-right-width:1px}.react-flow__resize-control.line.top,.react-flow__resize-control.line.bottom{height:1px;transform:translateY(-50%);left:0;width:100%}.react-flow__resize-control.line.top{top:0;border-top-width:1px}.react-flow__resize-control.line.bottom{border-bottom-width:1px;top:100%}.react-flow__edge-textbg{fill:var(--xy-edge-label-background-color, var(--xy-edge-label-background-color-default))}.react-flow__edge-text{fill:var(--xy-edge-label-color, var(--xy-edge-label-color-default))}:root,[data-theme=obsidian]{--bg: #070b10;--bg-2: #0d141c;--surface: #121a24;--line: #1e2c3c;--ink: #e7eef6;--muted: #8b9bb0;--high: #2a9d8f;--medium: #e9c46a;--low: #e76f51;--critical: #e85d04;--accent: #4cc9f0;--rail-from: #0b1219;--rail-to: #070b10;--rail-active: #15202c;--btn: #173044;--btn-line: #24506c;--btn-primary: #134e4a;--btn-primary-line: #2a9d8f;--node-bg: #101822;--node-line: #2a3d52;--graph-bg: #070b10;--graph-grid: rgba(42, 80, 120, .09);--edge-cheap: #4a5568;--edge-expensive: #f4a261;--edge-critical: #e85d04;--shadow: rgba(76, 201, 240, .08)}[data-theme=nord]{--bg: #2e3440;--bg-2: #3b4252;--surface: #434c5e;--line: #4c566a;--ink: #eceff4;--muted: #d8dee9;--high: #a3be8c;--medium: #ebcb8b;--low: #bf616a;--critical: #d08770;--accent: #88c0d0;--rail-from: #3b4252;--rail-to: #2e3440;--rail-active: #4c566a;--btn: #434c5e;--btn-line: #81a1c1;--btn-primary: #5e81ac;--btn-primary-line: #88c0d0;--node-bg: #3b4252;--node-line: #81a1c1;--graph-bg: #2e3440;--graph-grid: rgba(136, 192, 208, .12);--edge-cheap: #4c566a;--edge-expensive: #d08770;--edge-critical: #bf616a;--shadow: rgba(136, 192, 208, .12)}[data-theme=solarized-dark]{--bg: #002b36;--bg-2: #073642;--surface: #0a3944;--line: #16444f;--ink: #eee8d5;--muted: #93a1a1;--high: #859900;--medium: #b58900;--low: #dc322f;--critical: #cb4b16;--accent: #2aa198;--rail-from: #073642;--rail-to: #002b36;--rail-active: #16444f;--btn: #073642;--btn-line: #268bd2;--btn-primary: #0a4a42;--btn-primary-line: #2aa198;--node-bg: #073642;--node-line: #268bd2;--graph-bg: #002b36;--graph-grid: rgba(42, 161, 152, .12);--edge-cheap: #586e75;--edge-expensive: #cb4b16;--edge-critical: #dc322f;--shadow: rgba(42, 161, 152, .12)}[data-theme=forest]{--bg: #0e1510;--bg-2: #152019;--surface: #1b2a20;--line: #2c4334;--ink: #e4f0e6;--muted: #8eaa96;--high: #6ab04c;--medium: #c8a951;--low: #e17055;--critical: #d35400;--accent: #7bed9f;--rail-from: #152019;--rail-to: #0e1510;--rail-active: #1f3326;--btn: #1f3326;--btn-line: #3d6b4f;--btn-primary: #1e4d32;--btn-primary-line: #6ab04c;--node-bg: #16241b;--node-line: #3d6b4f;--graph-bg: #0e1510;--graph-grid: rgba(123, 237, 159, .1);--edge-cheap: #3d6b4f;--edge-expensive: #c8a951;--edge-critical: #d35400;--shadow: rgba(123, 237, 159, .1)}[data-theme=rose]{--bg: #191724;--bg-2: #1f1d2e;--surface: #26233a;--line: #403d52;--ink: #e0def4;--muted: #908caa;--high: #9ccfd8;--medium: #f6c177;--low: #eb6f92;--critical: #eb6f92;--accent: #c4a7e7;--rail-from: #1f1d2e;--rail-to: #191724;--rail-active: #26233a;--btn: #26233a;--btn-line: #c4a7e7;--btn-primary: #3a2f4d;--btn-primary-line: #c4a7e7;--node-bg: #1f1d2e;--node-line: #524f67;--graph-bg: #191724;--graph-grid: rgba(196, 167, 231, .12);--edge-cheap: #524f67;--edge-expensive: #f6c177;--edge-critical: #eb6f92;--shadow: rgba(196, 167, 231, .12)}[data-theme=amber]{--bg: #120e0a;--bg-2: #1c1610;--surface: #261e16;--line: #3d2f22;--ink: #f4e6d0;--muted: #b59a78;--high: #c4d6a0;--medium: #e9b44c;--low: #d8572a;--critical: #c0392b;--accent: #f0a05a;--rail-from: #1c1610;--rail-to: #120e0a;--rail-active: #2b2218;--btn: #2b2218;--btn-line: #8a5a2b;--btn-primary: #4a3418;--btn-primary-line: #f0a05a;--node-bg: #1c1610;--node-line: #8a5a2b;--graph-bg: #120e0a;--graph-grid: rgba(240, 160, 90, .12);--edge-cheap: #5c4a38;--edge-expensive: #e9b44c;--edge-critical: #d8572a;--shadow: rgba(240, 160, 90, .12)}[data-theme=volcano]{--bg: #14090a;--bg-2: #1e0e10;--surface: #2a1416;--line: #4a2226;--ink: #fde8e4;--muted: #c48b86;--high: #7bed9f;--medium: #f6c90e;--low: #ff6b6b;--critical: #ff3b3b;--accent: #ff7b54;--rail-from: #1e0e10;--rail-to: #14090a;--rail-active: #32181b;--btn: #32181b;--btn-line: #ff7b54;--btn-primary: #5a1f18;--btn-primary-line: #ff7b54;--node-bg: #1e0e10;--node-line: #7a3330;--graph-bg: #14090a;--graph-grid: rgba(255, 123, 84, .12);--edge-cheap: #5a3330;--edge-expensive: #ff7b54;--edge-critical: #ff3b3b;--shadow: rgba(255, 123, 84, .14)}[data-theme=lavender]{--bg: #12101c;--bg-2: #1a1730;--surface: #221e3c;--line: #3b3560;--ink: #efeaff;--muted: #b3a7d6;--high: #80ffdb;--medium: #ffd166;--low: #ff6b9d;--critical: #ff4d6d;--accent: #c77dff;--rail-from: #1a1730;--rail-to: #12101c;--rail-active: #2a2550;--btn: #2a2550;--btn-line: #c77dff;--btn-primary: #3d2a66;--btn-primary-line: #c77dff;--node-bg: #1a1730;--node-line: #5a4d8a;--graph-bg: #12101c;--graph-grid: rgba(199, 125, 255, .12);--edge-cheap: #5a4d8a;--edge-expensive: #ffd166;--edge-critical: #ff4d6d;--shadow: rgba(199, 125, 255, .14)}[data-theme=neon-noir]{--bg: #05060a;--bg-2: #0a0c14;--surface: #10131c;--line: #1e2436;--ink: #f0f4ff;--muted: #8b93b0;--high: #39ff88;--medium: #ffe66d;--low: #ff2d95;--critical: #ff3d5a;--accent: #00f0ff;--rail-from: #0a0c14;--rail-to: #05060a;--rail-active: #151a2a;--btn: #151a2a;--btn-line: #00f0ff;--btn-primary: #063a40;--btn-primary-line: #00f0ff;--node-bg: #0a0c14;--node-line: #2a3550;--graph-bg: #05060a;--graph-grid: rgba(0, 240, 255, .12);--edge-cheap: #3a4560;--edge-expensive: #ff2d95;--edge-critical: #ff3d5a;--shadow: rgba(0, 240, 255, .22)}[data-theme=synthwave]{--bg: #1a0a2e;--bg-2: #240b3d;--surface: #2d1250;--line: #4a1d7a;--ink: #ffe6fb;--muted: #c49ad8;--high: #00f5d4;--medium: #ffd60a;--low: #ff6b9d;--critical: #ff006e;--accent: #ff2bd6;--rail-from: #240b3d;--rail-to: #1a0a2e;--rail-active: #3a1570;--btn: #3a1570;--btn-line: #ff2bd6;--btn-primary: #5a0a4a;--btn-primary-line: #ff2bd6;--node-bg: #240b3d;--node-line: #7b2cbf;--graph-bg: #1a0a2e;--graph-grid: rgba(255, 43, 214, .16);--edge-cheap: #5a3a80;--edge-expensive: #ff9e00;--edge-critical: #ff006e;--shadow: rgba(255, 43, 214, .24)}[data-theme=phosphor]{--bg: #020804;--bg-2: #061208;--surface: #0a1a0e;--line: #163c1e;--ink: #c8ffc8;--muted: #5aaa5a;--high: #39ff14;--medium: #c8f542;--low: #ffb000;--critical: #ff5e00;--accent: #00ff66;--rail-from: #061208;--rail-to: #020804;--rail-active: #0e2414;--btn: #0e2414;--btn-line: #00ff66;--btn-primary: #0a3a18;--btn-primary-line: #00ff66;--node-bg: #061208;--node-line: #1e6a32;--graph-bg: #020804;--graph-grid: rgba(0, 255, 102, .12);--edge-cheap: #1e5a2a;--edge-expensive: #c8f542;--edge-critical: #ff5e00;--shadow: rgba(0, 255, 102, .2)}[data-theme=aurora]{--bg: #071018;--bg-2: #0c1c28;--surface: #122636;--line: #1e3d52;--ink: #e8fff6;--muted: #7eb8a8;--high: #5fffcf;--medium: #ffe566;--low: #ff7eb6;--critical: #ff4d6d;--accent: #7cffb2;--rail-from: #0c1c28;--rail-to: #071018;--rail-active: #163044;--btn: #163044;--btn-line: #7cffb2;--btn-primary: #0e3d3a;--btn-primary-line: #7cffb2;--node-bg: #0c1c28;--node-line: #2a6a78;--graph-bg: #071018;--graph-grid: rgba(124, 255, 178, .12);--edge-cheap: #2a5a68;--edge-expensive: #c9a0ff;--edge-critical: #ff4d6d;--shadow: rgba(124, 255, 178, .18)}[data-theme=biolume]{--bg: #02141c;--bg-2: #042430;--surface: #073040;--line: #0a4a5c;--ink: #e6fffb;--muted: #6eb8b0;--high: #5dffb0;--medium: #ffe066;--low: #ff79c6;--critical: #ff4d6d;--accent: #18e7d4;--rail-from: #042430;--rail-to: #02141c;--rail-active: #0a3848;--btn: #0a3848;--btn-line: #18e7d4;--btn-primary: #0a4a48;--btn-primary-line: #18e7d4;--node-bg: #042430;--node-line: #1a7080;--graph-bg: #02141c;--graph-grid: rgba(24, 231, 212, .12);--edge-cheap: #1a5a68;--edge-expensive: #ff79c6;--edge-critical: #ff4d6d;--shadow: rgba(24, 231, 212, .2)}[data-theme=carbon]{--bg: #0d0d0f;--bg-2: #16161a;--surface: #1e1e24;--line: #33333c;--ink: #f2f2f4;--muted: #9a9aa8;--high: #3dd68c;--medium: #f0c040;--low: #ff5a5a;--critical: #ff2a2a;--accent: #ff2a2a;--rail-from: #16161a;--rail-to: #0d0d0f;--rail-active: #24242c;--btn: #24242c;--btn-line: #ff2a2a;--btn-primary: #4a1212;--btn-primary-line: #ff2a2a;--node-bg: #16161a;--node-line: #4a4a55;--graph-bg: #0d0d0f;--graph-grid: rgba(255, 42, 42, .1);--edge-cheap: #4a4a55;--edge-expensive: #ff8a3d;--edge-critical: #ff2a2a;--shadow: rgba(255, 42, 42, .18)}[data-theme=paper]{--bg: #f6f1e8;--bg-2: #efe6d6;--surface: #fffaf2;--line: #d9cbb6;--ink: #2b241c;--muted: #6f6456;--high: #2a7a4b;--medium: #b5811a;--low: #c0392b;--critical: #a93226;--accent: #1d6a7a;--rail-from: #efe6d6;--rail-to: #e7dcc8;--rail-active: #e2d3bb;--btn: #fffaf2;--btn-line: #c9b79a;--btn-primary: #d7eee0;--btn-primary-line: #2a7a4b;--node-bg: #fffaf2;--node-line: #c9b79a;--graph-bg: #f6f1e8;--graph-grid: rgba(29, 106, 122, .1);--edge-cheap: #b7a48c;--edge-expensive: #c0392b;--edge-critical: #a93226;--shadow: rgba(43, 36, 28, .08)}[data-theme=solarized-light]{--bg: #fdf6e3;--bg-2: #eee8d5;--surface: #f5efdc;--line: #d6cba9;--ink: #657b83;--muted: #93a1a1;--high: #859900;--medium: #b58900;--low: #dc322f;--critical: #cb4b16;--accent: #268bd2;--rail-from: #eee8d5;--rail-to: #e6dfc8;--rail-active: #e0d9c0;--btn: #fdf6e3;--btn-line: #93a1a1;--btn-primary: #e8efc8;--btn-primary-line: #859900;--node-bg: #fdf6e3;--node-line: #93a1a1;--graph-bg: #fdf6e3;--graph-grid: rgba(38, 139, 210, .12);--edge-cheap: #93a1a1;--edge-expensive: #cb4b16;--edge-critical: #dc322f;--shadow: rgba(101, 123, 131, .1)}[data-theme=seafoam]{--bg: #eef7f4;--bg-2: #dff0ea;--surface: #ffffff;--line: #b7d5cc;--ink: #17332c;--muted: #4d7268;--high: #1b8a5a;--medium: #c48a14;--low: #c44536;--critical: #9b2d22;--accent: #1d9a8a;--rail-from: #dff0ea;--rail-to: #cfe6de;--rail-active: #c4ddd4;--btn: #ffffff;--btn-line: #8fbfb2;--btn-primary: #d4f0e4;--btn-primary-line: #1b8a5a;--node-bg: #ffffff;--node-line: #8fbfb2;--graph-bg: #eef7f4;--graph-grid: rgba(29, 154, 138, .12);--edge-cheap: #8fbfb2;--edge-expensive: #c48a14;--edge-critical: #c44536;--shadow: rgba(23, 51, 44, .08)}[data-theme=high-contrast]{--bg: #ffffff;--bg-2: #f2f2f2;--surface: #ffffff;--line: #111111;--ink: #000000;--muted: #222222;--high: #007a33;--medium: #8a5a00;--low: #b00000;--critical: #9b0000;--accent: #0033cc;--rail-from: #f2f2f2;--rail-to: #e6e6e6;--rail-active: #d9d9d9;--btn: #ffffff;--btn-line: #000000;--btn-primary: #d9f2e3;--btn-primary-line: #007a33;--node-bg: #ffffff;--node-line: #000000;--graph-bg: #ffffff;--graph-grid: rgba(0, 0, 0, .12);--edge-cheap: #444444;--edge-expensive: #8a5a00;--edge-critical: #b00000;--shadow: rgba(0, 0, 0, .12)}[data-theme=sakura]{--bg: #fff0f5;--bg-2: #ffe4ee;--surface: #fff7fa;--line: #f5b8cc;--ink: #4a1830;--muted: #a05a78;--high: #1a8a5c;--medium: #c48a14;--low: #d63d6e;--critical: #b01040;--accent: #e84a8a;--rail-from: #ffe4ee;--rail-to: #f8d4e0;--rail-active: #f5c8d8;--btn: #fff7fa;--btn-line: #e89ab0;--btn-primary: #ffd6e6;--btn-primary-line: #e84a8a;--node-bg: #fff7fa;--node-line: #e89ab0;--graph-bg: #fff0f5;--graph-grid: rgba(232, 74, 138, .12);--edge-cheap: #d4a0b0;--edge-expensive: #d63d6e;--edge-critical: #b01040;--shadow: rgba(74, 24, 48, .1)}[data-theme=citrus]{--bg: #fffce8;--bg-2: #fff3b0;--surface: #fffef5;--line: #e8d44a;--ink: #2a2a08;--muted: #6a6a20;--high: #2a8a20;--medium: #d4a000;--low: #e85d04;--critical: #c0392b;--accent: #5aad14;--rail-from: #fff3b0;--rail-to: #ffe98a;--rail-active: #ffe066;--btn: #fffef5;--btn-line: #d4c030;--btn-primary: #e8f5b8;--btn-primary-line: #5aad14;--node-bg: #fffef5;--node-line: #d4c030;--graph-bg: #fffce8;--graph-grid: rgba(90, 173, 20, .14);--edge-cheap: #c4b040;--edge-expensive: #e85d04;--edge-critical: #c0392b;--shadow: rgba(42, 42, 8, .1)}[data-theme=peach]{--bg: #fff3eb;--bg-2: #ffe0cc;--surface: #fffaf6;--line: #f0c4a8;--ink: #3a2218;--muted: #8a5a48;--high: #2a8a5c;--medium: #d48a14;--low: #e85d3a;--critical: #c0392b;--accent: #ff6b35;--rail-from: #ffe0cc;--rail-to: #ffd4b8;--rail-active: #ffc8a8;--btn: #fffaf6;--btn-line: #e8a888;--btn-primary: #ffe0cc;--btn-primary-line: #ff6b35;--node-bg: #fffaf6;--node-line: #e8a888;--graph-bg: #fff3eb;--graph-grid: rgba(255, 107, 53, .12);--edge-cheap: #d4a088;--edge-expensive: #e85d3a;--edge-critical: #c0392b;--shadow: rgba(58, 34, 24, .1)}[data-theme=candy]{--bg: #f4f0ff;--bg-2: #e8dcff;--surface: #fbf8ff;--line: #d4c0f0;--ink: #2a1848;--muted: #6a5890;--high: #1a8a6a;--medium: #c48a14;--low: #e84a8a;--critical: #c01060;--accent: #ff5eb1;--rail-from: #e8dcff;--rail-to: #ddd0ff;--rail-active: #d4c4ff;--btn: #fbf8ff;--btn-line: #c4a8e8;--btn-primary: #ffd6ec;--btn-primary-line: #ff5eb1;--node-bg: #fbf8ff;--node-line: #c4a8e8;--graph-bg: #f4f0ff;--graph-grid: rgba(255, 94, 177, .14);--edge-cheap: #b0a0d0;--edge-expensive: #e84a8a;--edge-critical: #c01060;--shadow: rgba(42, 24, 72, .1)}[data-theme=sky]{--bg: #e8f4ff;--bg-2: #cfe8ff;--surface: #f5faff;--line: #90c8f0;--ink: #0a2848;--muted: #3a6080;--high: #0a8a4a;--medium: #c48a14;--low: #e85d3a;--critical: #c0392b;--accent: #0077ff;--rail-from: #cfe8ff;--rail-to: #b8dcff;--rail-active: #a8d4ff;--btn: #f5faff;--btn-line: #70b0e0;--btn-primary: #cfe8ff;--btn-primary-line: #0077ff;--node-bg: #f5faff;--node-line: #70b0e0;--graph-bg: #e8f4ff;--graph-grid: rgba(0, 119, 255, .12);--edge-cheap: #80b0d0;--edge-expensive: #e85d3a;--edge-critical: #c0392b;--shadow: rgba(10, 40, 72, .1)}[data-theme=coral]{--bg: #fff1ee;--bg-2: #ffddd6;--surface: #fff8f6;--line: #f0b0a4;--ink: #3a1814;--muted: #8a5048;--high: #0d9488;--medium: #d48a14;--low: #e85d4a;--critical: #c0392b;--accent: #0d9488;--rail-from: #ffddd6;--rail-to: #ffd0c6;--rail-active: #ffc4b8;--btn: #fff8f6;--btn-line: #e89888;--btn-primary: #d4f4ee;--btn-primary-line: #0d9488;--node-bg: #fff8f6;--node-line: #e89888;--graph-bg: #fff1ee;--graph-grid: rgba(13, 148, 136, .14);--edge-cheap: #d4a098;--edge-expensive: #e85d4a;--edge-critical: #c0392b;--shadow: rgba(58, 24, 20, .1)}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}:root{--radius: 6px;--radius-lg: 10px;--control-h: 32px;--font: "IBM Plex Sans", ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif;--mono: "IBM Plex Mono", ui-monospace, "SF Mono", Menlo, Consolas, monospace;--focus-ring: 0 0 0 2px var(--bg), 0 0 0 4px var(--accent);--space: 8px}body{background:var(--bg);color:var(--ink);font-family:var(--font);font-size:13px;line-height:1.45;-webkit-font-smoothing:antialiased}button,input,select,textarea{font-family:inherit;font-size:inherit;color:inherit}button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible,a:focus-visible,summary:focus-visible{outline:none;box-shadow:var(--focus-ring)}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}.skip{position:absolute;left:12px;top:-40px;z-index:50;background:var(--surface);color:var(--ink);border:1px solid var(--accent);border-radius:var(--radius);padding:8px 12px}.skip:focus{top:12px}.app{display:grid;grid-template-columns:232px 1fr;height:100%}.rail{border-right:1px solid var(--line);background:linear-gradient(180deg,var(--rail-from),var(--rail-to));padding:16px 12px;display:flex;flex-direction:column;gap:2px;min-width:0}.brand{display:flex;flex-direction:column;gap:2px;padding:4px 8px 16px}.brand-mark{font-family:var(--mono);letter-spacing:.16em;font-size:11px;text-transform:uppercase;color:var(--accent);font-weight:600}.brand-sub{font-size:11px;color:var(--muted)}.nav-item{display:flex;align-items:center;gap:10px;background:transparent;border:0;text-align:left;padding:8px 10px;border-radius:var(--radius);color:var(--muted);cursor:pointer;width:100%}.nav-item:hover{background:color-mix(in srgb,var(--rail-active) 70%,transparent);color:var(--ink)}.nav-item.active{background:var(--rail-active);color:var(--ink);font-weight:500}.nav-item svg{flex-shrink:0}.theme-pick{margin-top:14px;display:grid;gap:4px;padding:0 2px}.theme-pick label{font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);font-weight:500}.theme-pick select,.field select,.field input,.topbar input,.topbar select,.settings input,.settings select,.explorer-path input{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:0 10px;height:var(--control-h);width:100%}.rail-foot{margin-top:auto;padding:12px 8px 4px;border-top:1px solid var(--line);display:grid;gap:6px}.kbd-hint{font-size:11px;color:var(--muted)}kbd{font-family:var(--mono);font-size:10px;border:1px solid var(--line);border-radius:4px;padding:0 4px;background:var(--surface)}.main{display:flex;flex-direction:column;min-width:0;min-height:0;position:relative;background:var(--bg)}.progress{position:absolute;top:0;left:0;right:0;height:2px;overflow:hidden;z-index:30;background:color-mix(in srgb,var(--accent) 20%,transparent)}.progress i{display:block;height:100%;width:32%;background:var(--accent);animation:indeterminate 1.1s ease-in-out infinite}@keyframes indeterminate{0%{transform:translate(-120%)}to{transform:translate(400%)}}.topbar{display:flex;gap:10px;align-items:flex-end;padding:10px 16px;border-bottom:1px solid var(--line);background:var(--bg-2);flex-wrap:wrap}.field{display:grid;gap:4px;min-width:0}.field>span{font-size:11px;color:var(--muted);font-weight:500}.field.path{flex:1;min-width:180px}.field.ref{width:188px;flex:0 0 188px}.field.workspace{width:180px;flex:0 0 180px}.path-row,.combo-row{display:flex;min-width:0}.path-row input,.combo-row input{flex:1;min-width:0}.combo{position:relative;min-width:0}.combo-row input{border-top-right-radius:0;border-bottom-right-radius:0}.topbar .icon-btn{width:var(--control-h);padding:0;flex:0 0 var(--control-h)}.combo-toggle{border-top-left-radius:0;border-bottom-left-radius:0;border-left:0}.combo-menu{position:absolute;top:calc(100% + 4px);right:0;left:auto;min-width:340px;max-width:min(480px,70vw);max-height:360px;overflow:auto;z-index:40;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:0 12px 32px var(--shadow);padding:6px 0}.combo-heading{font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);font-weight:600;padding:8px 12px 4px}.combo-menu .combo-option{display:flex;flex-direction:column;align-items:flex-start;gap:2px;width:100%;text-align:left;background:transparent;border:0;border-radius:0;height:auto;padding:6px 12px;color:var(--ink);cursor:pointer}.combo-menu .combo-option:hover,.combo-menu .combo-option.active{background:var(--rail-active)}.combo-label{font-family:var(--mono);font-size:12px}.combo-detail{color:var(--muted);font-size:12px;line-height:1.35;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}.combo-empty{padding:10px 12px}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:50;background:color-mix(in srgb,var(--bg) 72%,transparent);display:grid;place-items:center;padding:24px}.modal{width:min(720px,100%);max-height:min(640px,90vh);background:var(--bg-2);border:1px solid var(--line);border-radius:var(--radius-lg);box-shadow:0 16px 48px var(--shadow);display:flex;flex-direction:column;overflow:hidden}.modal-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;padding:14px 16px 10px;border-bottom:1px solid var(--line)}.modal-head h2{font-size:15px}.modal-head .muted{margin:4px 0 0}.explorer-path{display:flex;gap:8px;padding:12px 16px;border-bottom:1px solid var(--line)}.explorer-path input{flex:1;min-width:0}.explorer-list{flex:1;overflow:auto;padding:8px;min-height:220px}.explorer-row{display:flex;align-items:center;gap:8px;width:100%;text-align:left;background:transparent;border:0;border-radius:var(--radius);padding:8px 10px;color:var(--ink);cursor:pointer;height:auto}.explorer-row:hover,.explorer-row.active{background:var(--rail-active)}.explorer-name{min-width:0;overflow:hidden;text-overflow:ellipsis}.git-badge{margin-left:auto;margin-bottom:0}.explorer-empty{padding:18px 10px}.modal-foot{display:flex;align-items:center;gap:12px;padding:12px 16px;border-top:1px solid var(--line)}.explorer-current{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:var(--mono);font-size:12px}.topbar input,.topbar select{min-width:0}.topbar-actions{display:flex;gap:8px;margin-left:auto;align-items:center;padding-bottom:0}.btn,.topbar button{background:var(--btn);border:1px solid var(--btn-line);border-radius:var(--radius);height:var(--control-h);padding:0 12px;cursor:pointer;font-weight:500;display:inline-flex;align-items:center;justify-content:center;gap:6px;white-space:nowrap}.btn:hover,.topbar button:hover{filter:brightness(1.08)}.btn:disabled,.topbar button:disabled{opacity:.55;cursor:not-allowed;filter:none}.btn.primary{background:var(--btn-primary);border-color:var(--btn-primary-line)}.btn.ghost{background:transparent}.alerts{display:grid;gap:8px;padding:10px 16px 0}.alerts:empty{display:none;padding:0}.stage{flex:1;min-height:0;display:flex;flex-direction:column}.content{flex:1;min-height:0;display:grid;grid-template-columns:minmax(340px,420px) 1fr}.brief{overflow:auto;border-right:1px solid var(--line);padding:16px 18px 24px;background:radial-gradient(circle at 0 0,color-mix(in srgb,var(--accent) 8%,transparent),transparent 42%),var(--bg)}.graph-wrap{position:relative;min-height:0;display:flex;flex-direction:column}.impact-graph{flex:1;min-height:0;position:relative;display:flex;flex-direction:column}.graph-toolbar{display:flex;flex-wrap:wrap;gap:8px;align-items:center;padding:8px 14px;border-bottom:1px solid var(--line);background:var(--bg-2)}.graph-count{margin-left:auto;font-size:11px}.chip-btn{background:var(--surface);border:1px solid var(--line);border-radius:999px;padding:4px 12px;color:var(--muted);cursor:pointer;height:26px}.chip-btn:hover{color:var(--ink)}.chip-btn.active{background:var(--rail-active);color:var(--ink)}.chip-btn:disabled{opacity:.45;cursor:not-allowed}.graph-stage{flex:1;min-height:0;position:relative;display:flex;flex-direction:column}.graph-stage .react-flow,.graph-3d,.graph-3d-host,.graph-3d-canvas-host{flex:1;width:100%;height:100%;min-height:280px}.graph-3d{position:relative;background:var(--graph-bg);display:flex;flex-direction:column}.graph-3d-host{position:relative;min-height:0;display:flex;flex-direction:column}.graph-3d-canvas-host{position:relative;min-height:0}.graph-3d canvas{display:block;width:100%;height:100%}.graph-3d-tip{position:absolute;pointer-events:none;z-index:2;max-width:320px;padding:6px 8px;border-radius:var(--radius);background:var(--surface);border:1px solid var(--line);color:var(--ink);font-size:11px;line-height:1.35;box-shadow:0 8px 24px var(--shadow)}.graph-3d-tip .t{font-size:10px;color:var(--muted);text-transform:uppercase;letter-spacing:.08em}.graph-3d-tip .n{font-weight:600}.graph-3d-hint{position:absolute;left:10px;bottom:10px;z-index:2;margin:0;font-size:11px;color:var(--muted);max-width:min(420px,calc(100% - 24px));pointer-events:none}.graph-wrap .react-flow{background-color:var(--graph-bg);background-image:linear-gradient(var(--graph-grid) 1px,transparent 1px),linear-gradient(90deg,var(--graph-grid) 1px,transparent 1px);background-size:24px 24px}.react-flow__minimap{background:var(--graph-bg)!important;border:1px solid var(--line)!important;border-radius:var(--radius);overflow:hidden;box-shadow:0 8px 24px var(--shadow)}.react-flow__minimap-node{fill:var(--muted);stroke:none}.react-flow__minimap-node.selected{fill:var(--accent)}.react-flow__minimap-mask{fill:#00000073!important;stroke:var(--accent)!important}.react-flow__controls{box-shadow:none!important}.react-flow__controls-button{background:var(--surface)!important;border-bottom:1px solid var(--line)!important;fill:var(--ink)!important}h1{font-size:18px;margin:0 0 6px;font-weight:600}h2{font-size:13px;margin:0;font-weight:600}.merge-box{border:1px solid var(--line);background:var(--surface);border-radius:var(--radius-lg);padding:12px 14px;margin-bottom:12px}.merge-box.high{border-color:color-mix(in srgb,var(--high) 55%,var(--line))}.merge-box.medium{border-color:color-mix(in srgb,var(--medium) 55%,var(--line))}.merge-box.low{border-color:color-mix(in srgb,var(--low) 55%,var(--line))}.level{font-family:var(--mono);font-weight:600;font-size:14px}.level.high{color:var(--high)}.level.medium{color:var(--medium)}.level.low{color:var(--low)}.merge-title{margin-top:4px;font-size:13px;color:var(--ink)}.reasons{margin:10px 0 0;padding:0 0 0 18px;color:var(--muted)}.reasons li{margin:0 0 4px}.metrics{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:0 0 14px}.metric{border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);padding:8px 10px}.metric .n{font-family:var(--mono);font-size:16px;font-weight:600;font-variant-numeric:tabular-nums}.metric .l{font-size:11px;color:var(--muted);margin-top:2px}.section{border-top:1px solid var(--line);padding:8px 0 4px}.section>summary{cursor:pointer;list-style:none;display:flex;align-items:center;justify-content:space-between;color:var(--muted);font-size:11px;text-transform:uppercase;letter-spacing:.07em;font-weight:600;padding:6px 0}.section>summary::-webkit-details-marker{display:none}.section>summary .count{font-family:var(--mono);letter-spacing:0;text-transform:none;border:1px solid var(--line);border-radius:999px;padding:0 7px;height:18px;display:inline-flex;align-items:center;font-size:11px}.kicker{color:var(--muted);font-size:11px;text-transform:uppercase;letter-spacing:.08em;margin:16px 0 6px;font-weight:600}.chip{display:inline-flex;align-items:center;font-size:11px;padding:2px 8px;border-radius:999px;border:1px solid var(--line);margin:0 6px 6px 0;color:var(--muted);background:var(--surface)}.chip.blocker{color:var(--low);border-color:var(--low)}.chip.warning{color:var(--medium);border-color:var(--medium)}.chip.strong{color:var(--low);border-color:var(--low)}.chip.worth_exploring{color:var(--medium);border-color:var(--medium)}.chip.speculative{color:var(--muted);border-color:var(--line)}.chip.open{color:var(--high);border-color:color-mix(in srgb,var(--high) 50%,var(--line))}.file{font-family:var(--mono);font-size:12px;color:var(--accent)}.read-item,.finding,.residual{padding:8px 0;border-bottom:1px solid color-mix(in srgb,var(--line) 70%,transparent)}.read-item:last-child,.finding:last-child{border-bottom:0}.read-item .why{color:var(--muted);font-size:12px;margin-top:2px}.muted{color:var(--muted);font-size:13px;line-height:1.45}.error{color:var(--low);padding:8px 12px;border:1px solid var(--low);background:color-mix(in srgb,var(--low) 10%,var(--surface));border-radius:var(--radius);display:flex;justify-content:space-between;gap:12px;align-items:flex-start}.banner{padding:8px 12px;border-radius:var(--radius);border:1px solid var(--line);background:var(--surface);font-size:13px;line-height:1.45;display:flex;justify-content:space-between;gap:12px;align-items:flex-start}.banner.warn{border-color:var(--medium);color:var(--medium)}.banner.stale{border-color:var(--low);color:var(--low)}.banner .dismiss{background:transparent;border:0;color:inherit;cursor:pointer;height:auto;padding:0 2px;opacity:.7}.empty{padding:24px 8px;color:var(--muted);font-size:13px;line-height:1.55}.empty h2{font-size:16px;color:var(--ink);margin-bottom:8px}.empty ol{margin:12px 0 0 18px;padding:0}.empty code,code{font-family:var(--mono);font-size:12px;color:var(--accent)}.btn-row{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}.pr-list{padding:16px;overflow:auto}.pr-toolbar{display:flex;gap:8px;align-items:flex-end;margin-bottom:14px}.pr-toolbar .field{flex:1}.pr-toolbar .field.provider{flex:0 0 140px}.pr{border:1px solid var(--line);background:var(--surface);padding:12px 14px;border-radius:var(--radius-lg);margin-bottom:10px}.pr h3{margin:0 0 4px;font-size:14px;font-weight:600}.pr-meta{display:flex;flex-wrap:wrap;gap:8px 12px;align-items:center;margin:6px 0 10px}.pr-actions{display:flex;gap:8px;align-items:center}.settings{padding:24px;max-width:760px;overflow:auto;display:grid;gap:16px}.settings-card{border:1px solid var(--line);background:var(--surface);border-radius:var(--radius-lg);padding:16px;display:grid;gap:8px}.settings-card h2{font-size:14px;margin-bottom:2px}.settings label{font-size:12px;color:var(--muted);font-weight:500}.theme-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:8px}.theme-swatch{border:1px solid var(--line);background:var(--bg);color:var(--ink);border-radius:var(--radius);padding:10px;text-align:left;cursor:pointer;height:auto;box-shadow:0 1px 8px var(--shadow)}.theme-swatch.active{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent),0 1px 8px var(--shadow)}.theme-swatch .swatch-bar{height:6px;border-radius:3px;margin-bottom:8px;background:linear-gradient(90deg,var(--accent),var(--high),var(--medium),var(--low))}.theme-swatch .name{font-size:13px;font-weight:600}.theme-swatch .group{font-size:11px;color:var(--muted)}.headline{white-space:pre-wrap;font-family:var(--mono);font-size:12px;color:var(--muted);margin:8px 0 0}.graph-modes{display:flex;gap:8px;align-items:center;padding:8px 14px;border-bottom:1px solid var(--line);background:var(--bg-2)}.seg{display:inline-flex;border:1px solid var(--line);border-radius:999px;padding:2px;background:var(--surface)}.seg button,.graph-modes button{background:transparent;border:0;border-radius:999px;padding:4px 12px;color:var(--muted);cursor:pointer;height:26px}.seg button.active,.graph-modes button.active{background:var(--rail-active);color:var(--ink)}.legend{margin-left:auto;display:flex;gap:12px;color:var(--muted);font-size:11px}.legend i{display:inline-block;width:14px;height:2px;margin-right:6px;vertical-align:middle;background:var(--edge-cheap)}.legend i.exp{background:var(--edge-expensive)}.legend i.crit{background:var(--edge-critical);height:3px}.legend i.dash{border-top:2px dashed var(--muted);background:none;height:0}.inspector{position:absolute;top:12px;right:12px;z-index:5;width:260px;max-width:calc(100% - 24px);overflow-x:hidden;overflow-wrap:break-word;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-lg);padding:10px 12px;box-shadow:0 8px 24px var(--shadow)}.inspector .t{font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.06em}.inspector .n,.inspector .file,.inspector .muted{overflow-wrap:break-word}.inspector .n{font-weight:600;margin:4px 0}.lp-node{padding:8px 10px;border-radius:var(--radius);border:1px solid var(--node-line);background:var(--node-bg);width:180px;max-width:100%;height:56px;box-sizing:border-box;box-shadow:0 0 0 1px var(--shadow);overflow:visible;position:relative}.lp-node .t{font-size:10px;color:var(--muted);text-transform:uppercase;letter-spacing:.08em}.lp-node .n{font-size:13px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lp-node.selected{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent)}.react-flow__node-load .react-flow__handle{width:8px;height:8px;border:none;background:transparent;opacity:0}.type-table{width:100%;border-collapse:collapse;font-size:12px}.type-table td{padding:3px 0}.type-table td:last-child{text-align:right;font-family:var(--mono);font-variant-numeric:tabular-nums;color:var(--muted)}@media(prefers-reduced-motion:reduce){.progress i{animation:none;width:100%}*{scroll-behavior:auto!important}}@media(max-width:960px){.app{grid-template-columns:56px 1fr}.brand-sub,.nav-item span,.theme-pick,.kbd-hint,.rail-foot .muted{display:none}.nav-item{justify-content:center;padding:10px}.content{grid-template-columns:1fr}.brief{border-right:0;border-bottom:1px solid var(--line);max-height:42vh}} +.react-flow{direction:ltr;--xy-edge-stroke-default: #b1b1b7;--xy-edge-stroke-width-default: 1;--xy-edge-stroke-selected-default: #555;--xy-connectionline-stroke-default: #b1b1b7;--xy-connectionline-stroke-width-default: 1;--xy-attribution-background-color-default: rgba(255, 255, 255, .5);--xy-minimap-background-color-default: #fff;--xy-minimap-mask-background-color-default: rgba(240, 240, 240, .6);--xy-minimap-mask-stroke-color-default: transparent;--xy-minimap-mask-stroke-width-default: 1;--xy-minimap-node-background-color-default: #e2e2e2;--xy-minimap-node-stroke-color-default: transparent;--xy-minimap-node-stroke-width-default: 2;--xy-background-color-default: transparent;--xy-background-pattern-dots-color-default: #91919a;--xy-background-pattern-lines-color-default: #eee;--xy-background-pattern-cross-color-default: #e2e2e2;background-color:var(--xy-background-color, var(--xy-background-color-default));--xy-node-color-default: inherit;--xy-node-border-default: 1px solid #1a192b;--xy-node-background-color-default: #fff;--xy-node-group-background-color-default: rgba(240, 240, 240, .25);--xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(0, 0, 0, .08);--xy-node-boxshadow-selected-default: 0 0 0 .5px #1a192b;--xy-node-border-radius-default: 3px;--xy-handle-background-color-default: #1a192b;--xy-handle-border-color-default: #fff;--xy-selection-background-color-default: rgba(0, 89, 220, .08);--xy-selection-border-default: 1px dotted rgba(0, 89, 220, .8);--xy-controls-button-background-color-default: #fefefe;--xy-controls-button-background-color-hover-default: #f4f4f4;--xy-controls-button-color-default: inherit;--xy-controls-button-color-hover-default: inherit;--xy-controls-button-border-color-default: #eee;--xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, .08);--xy-edge-label-background-color-default: #ffffff;--xy-edge-label-color-default: inherit;--xy-resize-background-color-default: #3367d9}.react-flow.dark{--xy-edge-stroke-default: #3e3e3e;--xy-edge-stroke-width-default: 1;--xy-edge-stroke-selected-default: #727272;--xy-connectionline-stroke-default: #b1b1b7;--xy-connectionline-stroke-width-default: 1;--xy-attribution-background-color-default: rgba(150, 150, 150, .25);--xy-minimap-background-color-default: #141414;--xy-minimap-mask-background-color-default: rgba(60, 60, 60, .6);--xy-minimap-mask-stroke-color-default: transparent;--xy-minimap-mask-stroke-width-default: 1;--xy-minimap-node-background-color-default: #2b2b2b;--xy-minimap-node-stroke-color-default: transparent;--xy-minimap-node-stroke-width-default: 2;--xy-background-color-default: #141414;--xy-background-pattern-dots-color-default: #555;--xy-background-pattern-lines-color-default: #333;--xy-background-pattern-cross-color-default: #333;--xy-node-color-default: #f8f8f8;--xy-node-border-default: 1px solid #3c3c3c;--xy-node-background-color-default: #1e1e1e;--xy-node-group-background-color-default: rgba(240, 240, 240, .25);--xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(255, 255, 255, .08);--xy-node-boxshadow-selected-default: 0 0 0 .5px #999;--xy-handle-background-color-default: #bebebe;--xy-handle-border-color-default: #1e1e1e;--xy-selection-background-color-default: rgba(200, 200, 220, .08);--xy-selection-border-default: 1px dotted rgba(200, 200, 220, .8);--xy-controls-button-background-color-default: #2b2b2b;--xy-controls-button-background-color-hover-default: #3e3e3e;--xy-controls-button-color-default: #f8f8f8;--xy-controls-button-color-hover-default: #fff;--xy-controls-button-border-color-default: #5b5b5b;--xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, .08);--xy-edge-label-background-color-default: #141414;--xy-edge-label-color-default: #f8f8f8}.react-flow__background{background-color:var(--xy-background-color-props, var(--xy-background-color, var(--xy-background-color-default)));pointer-events:none;z-index:-1}.react-flow__container{position:absolute;width:100%;height:100%;top:0;left:0}.react-flow__pane{z-index:1;touch-action:none}.react-flow__pane.draggable{cursor:grab}.react-flow__pane.dragging{cursor:grabbing}.react-flow__pane.selection{cursor:pointer}.react-flow__viewport{transform-origin:0 0;z-index:2;pointer-events:none}.react-flow__renderer{z-index:4}.react-flow__selection{z-index:6}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible{outline:none}.react-flow__edge-path{stroke:var(--xy-edge-stroke, var(--xy-edge-stroke-default));stroke-width:var(--xy-edge-stroke-width, var(--xy-edge-stroke-width-default));fill:none}.react-flow__connection-path{stroke:var(--xy-connectionline-stroke, var(--xy-connectionline-stroke-default));stroke-width:var(--xy-connectionline-stroke-width, var(--xy-connectionline-stroke-width-default));fill:none}.react-flow .react-flow__edges{position:absolute}.react-flow .react-flow__edges svg{overflow:visible;position:absolute;pointer-events:none}.react-flow__edge{pointer-events:visibleStroke}.react-flow__edge.selectable{cursor:pointer}.react-flow__edge.animated path{stroke-dasharray:5;animation:dashdraw .5s linear infinite}.react-flow__edge.animated path.react-flow__edge-interaction{stroke-dasharray:none;animation:none}.react-flow__edge.inactive{pointer-events:none}.react-flow__edge.selected,.react-flow__edge:focus,.react-flow__edge:focus-visible{outline:none}.react-flow__edge.selected .react-flow__edge-path,.react-flow__edge.selectable:focus .react-flow__edge-path,.react-flow__edge.selectable:focus-visible .react-flow__edge-path{stroke:var(--xy-edge-stroke-selected, var(--xy-edge-stroke-selected-default))}.react-flow__edge-textwrapper{pointer-events:all}.react-flow__edge .react-flow__edge-text{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__arrowhead polyline{stroke:var(--xy-edge-stroke, var(--xy-edge-stroke-default))}.react-flow__arrowhead polyline.arrowclosed{fill:var(--xy-edge-stroke, var(--xy-edge-stroke-default))}.react-flow__connection{pointer-events:none}.react-flow__connection .animated{stroke-dasharray:5;animation:dashdraw .5s linear infinite}svg.react-flow__connectionline{z-index:1001;overflow:visible;position:absolute}.react-flow__nodes{pointer-events:none;transform-origin:0 0}.react-flow__node{position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none;pointer-events:all;transform-origin:0 0;box-sizing:border-box;cursor:default}.react-flow__node.selectable{cursor:pointer}.react-flow__node.draggable{cursor:grab;pointer-events:all}.react-flow__node.draggable.dragging{cursor:grabbing}.react-flow__nodesselection{z-index:3;transform-origin:left top;pointer-events:none}.react-flow__nodesselection-rect{position:absolute;pointer-events:all;cursor:grab}.react-flow__handle{position:absolute;pointer-events:none;min-width:5px;min-height:5px;width:6px;height:6px;background-color:var(--xy-handle-background-color, var(--xy-handle-background-color-default));border:1px solid var(--xy-handle-border-color, var(--xy-handle-border-color-default));border-radius:100%}.react-flow__handle.connectingfrom{pointer-events:all}.react-flow__handle.connectionindicator{pointer-events:all;cursor:crosshair}.react-flow__handle-bottom{top:auto;left:50%;bottom:0;transform:translate(-50%,50%)}.react-flow__handle-top{top:0;left:50%;transform:translate(-50%,-50%)}.react-flow__handle-left{top:50%;left:0;transform:translate(-50%,-50%)}.react-flow__handle-right{top:50%;right:0;transform:translate(50%,-50%)}.react-flow__edgeupdater{cursor:move;pointer-events:all}.react-flow__pane.selection .react-flow__panel{pointer-events:none}.react-flow__panel{position:absolute;z-index:5;margin:15px}.react-flow__panel.top{top:0}.react-flow__panel.bottom{bottom:0}.react-flow__panel.top.center,.react-flow__panel.bottom.center{left:50%;transform:translate(-15px) translate(-50%)}.react-flow__panel.left{left:0}.react-flow__panel.right{right:0}.react-flow__panel.left.center,.react-flow__panel.right.center{top:50%;transform:translateY(-15px) translateY(-50%)}.react-flow__attribution{font-size:10px;background:var(--xy-attribution-background-color, var(--xy-attribution-background-color-default));padding:2px 3px;margin:0}.react-flow__attribution a{text-decoration:none;color:#999}@keyframes dashdraw{0%{stroke-dashoffset:10}}.react-flow__edgelabel-renderer{position:absolute;width:100%;height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;left:0;top:0}.react-flow__viewport-portal{position:absolute;width:100%;height:100%;left:0;top:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__minimap{background:var( --xy-minimap-background-color-props, var(--xy-minimap-background-color, var(--xy-minimap-background-color-default)) )}.react-flow__minimap-svg{display:block}.react-flow__minimap-mask{fill:var( --xy-minimap-mask-background-color-props, var(--xy-minimap-mask-background-color, var(--xy-minimap-mask-background-color-default)) );stroke:var( --xy-minimap-mask-stroke-color-props, var(--xy-minimap-mask-stroke-color, var(--xy-minimap-mask-stroke-color-default)) );stroke-width:var( --xy-minimap-mask-stroke-width-props, var(--xy-minimap-mask-stroke-width, var(--xy-minimap-mask-stroke-width-default)) )}.react-flow__minimap-node{fill:var( --xy-minimap-node-background-color-props, var(--xy-minimap-node-background-color, var(--xy-minimap-node-background-color-default)) );stroke:var( --xy-minimap-node-stroke-color-props, var(--xy-minimap-node-stroke-color, var(--xy-minimap-node-stroke-color-default)) );stroke-width:var( --xy-minimap-node-stroke-width-props, var(--xy-minimap-node-stroke-width, var(--xy-minimap-node-stroke-width-default)) )}.react-flow__background-pattern.dots{fill:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-dots-color-default)) )}.react-flow__background-pattern.lines{stroke:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-lines-color-default)) )}.react-flow__background-pattern.cross{stroke:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-cross-color-default)) )}.react-flow__controls{display:flex;flex-direction:column;box-shadow:var(--xy-controls-box-shadow, var(--xy-controls-box-shadow-default))}.react-flow__controls.horizontal{flex-direction:row}.react-flow__controls-button{display:flex;justify-content:center;align-items:center;height:26px;width:26px;padding:4px;border:none;background:var(--xy-controls-button-background-color, var(--xy-controls-button-background-color-default));border-bottom:1px solid var( --xy-controls-button-border-color-props, var(--xy-controls-button-border-color, var(--xy-controls-button-border-color-default)) );color:var( --xy-controls-button-color-props, var(--xy-controls-button-color, var(--xy-controls-button-color-default)) );cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__controls-button svg{width:100%;max-width:12px;max-height:12px;fill:currentColor}.react-flow__edge.updating .react-flow__edge-path{stroke:#777}.react-flow__edge-text{font-size:10px}.react-flow__node.selectable:focus,.react-flow__node.selectable:focus-visible{outline:none}.react-flow__node-input,.react-flow__node-default,.react-flow__node-output,.react-flow__node-group{padding:10px;border-radius:var(--xy-node-border-radius, var(--xy-node-border-radius-default));width:150px;font-size:12px;color:var(--xy-node-color, var(--xy-node-color-default));text-align:center;border:var(--xy-node-border, var(--xy-node-border-default));background-color:var(--xy-node-background-color, var(--xy-node-background-color-default))}.react-flow__node-input.selectable:hover,.react-flow__node-default.selectable:hover,.react-flow__node-output.selectable:hover,.react-flow__node-group.selectable:hover{box-shadow:var(--xy-node-boxshadow-hover, var(--xy-node-boxshadow-hover-default))}.react-flow__node-input.selectable.selected,.react-flow__node-input.selectable:focus,.react-flow__node-input.selectable:focus-visible,.react-flow__node-default.selectable.selected,.react-flow__node-default.selectable:focus,.react-flow__node-default.selectable:focus-visible,.react-flow__node-output.selectable.selected,.react-flow__node-output.selectable:focus,.react-flow__node-output.selectable:focus-visible,.react-flow__node-group.selectable.selected,.react-flow__node-group.selectable:focus,.react-flow__node-group.selectable:focus-visible{box-shadow:var(--xy-node-boxshadow-selected, var(--xy-node-boxshadow-selected-default))}.react-flow__node-group{background-color:var(--xy-node-group-background-color, var(--xy-node-group-background-color-default))}.react-flow__nodesselection-rect,.react-flow__selection{background:var(--xy-selection-background-color, var(--xy-selection-background-color-default));border:var(--xy-selection-border, var(--xy-selection-border-default))}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible,.react-flow__selection:focus,.react-flow__selection:focus-visible{outline:none}.react-flow__controls-button:hover{background:var( --xy-controls-button-background-color-hover-props, var(--xy-controls-button-background-color-hover, var(--xy-controls-button-background-color-hover-default)) );color:var( --xy-controls-button-color-hover-props, var(--xy-controls-button-color-hover, var(--xy-controls-button-color-hover-default)) )}.react-flow__controls-button:disabled{pointer-events:none}.react-flow__controls-button:disabled svg{fill-opacity:.4}.react-flow__controls-button:last-child{border-bottom:none}.react-flow__controls.horizontal .react-flow__controls-button{border-bottom:none;border-right:1px solid var( --xy-controls-button-border-color-props, var(--xy-controls-button-border-color, var(--xy-controls-button-border-color-default)) )}.react-flow__controls.horizontal .react-flow__controls-button:last-child{border-right:none}.react-flow__resize-control{position:absolute}.react-flow__resize-control.left,.react-flow__resize-control.right{cursor:ew-resize}.react-flow__resize-control.top,.react-flow__resize-control.bottom{cursor:ns-resize}.react-flow__resize-control.top.left,.react-flow__resize-control.bottom.right{cursor:nwse-resize}.react-flow__resize-control.bottom.left,.react-flow__resize-control.top.right{cursor:nesw-resize}.react-flow__resize-control.handle{width:5px;height:5px;border:1px solid #fff;border-radius:1px;background-color:var(--xy-resize-background-color, var(--xy-resize-background-color-default));translate:-50% -50%}.react-flow__resize-control.handle.left{left:0;top:50%}.react-flow__resize-control.handle.right{left:100%;top:50%}.react-flow__resize-control.handle.top{left:50%;top:0}.react-flow__resize-control.handle.bottom{left:50%;top:100%}.react-flow__resize-control.handle.top.left,.react-flow__resize-control.handle.bottom.left{left:0}.react-flow__resize-control.handle.top.right,.react-flow__resize-control.handle.bottom.right{left:100%}.react-flow__resize-control.line{border-color:var(--xy-resize-background-color, var(--xy-resize-background-color-default));border-width:0;border-style:solid}.react-flow__resize-control.line.left,.react-flow__resize-control.line.right{width:1px;transform:translate(-50%);top:0;height:100%}.react-flow__resize-control.line.left{left:0;border-left-width:1px}.react-flow__resize-control.line.right{left:100%;border-right-width:1px}.react-flow__resize-control.line.top,.react-flow__resize-control.line.bottom{height:1px;transform:translateY(-50%);left:0;width:100%}.react-flow__resize-control.line.top{top:0;border-top-width:1px}.react-flow__resize-control.line.bottom{border-bottom-width:1px;top:100%}.react-flow__edge-textbg{fill:var(--xy-edge-label-background-color, var(--xy-edge-label-background-color-default))}.react-flow__edge-text{fill:var(--xy-edge-label-color, var(--xy-edge-label-color-default))}:root,[data-theme=obsidian]{--bg: #070b10;--bg-2: #0d141c;--surface: #121a24;--line: #1e2c3c;--ink: #e7eef6;--muted: #8b9bb0;--high: #2a9d8f;--medium: #e9c46a;--low: #e76f51;--critical: #e85d04;--accent: #4cc9f0;--rail-from: #0b1219;--rail-to: #070b10;--rail-active: #15202c;--btn: #173044;--btn-line: #24506c;--btn-primary: #134e4a;--btn-primary-line: #2a9d8f;--node-bg: #101822;--node-line: #2a3d52;--graph-bg: #070b10;--graph-grid: rgba(42, 80, 120, .09);--edge-cheap: #4a5568;--edge-expensive: #f4a261;--edge-critical: #e85d04;--shadow: rgba(76, 201, 240, .08)}[data-theme=nord]{--bg: #2e3440;--bg-2: #3b4252;--surface: #434c5e;--line: #4c566a;--ink: #eceff4;--muted: #d8dee9;--high: #a3be8c;--medium: #ebcb8b;--low: #bf616a;--critical: #d08770;--accent: #88c0d0;--rail-from: #3b4252;--rail-to: #2e3440;--rail-active: #4c566a;--btn: #434c5e;--btn-line: #81a1c1;--btn-primary: #5e81ac;--btn-primary-line: #88c0d0;--node-bg: #3b4252;--node-line: #81a1c1;--graph-bg: #2e3440;--graph-grid: rgba(136, 192, 208, .12);--edge-cheap: #4c566a;--edge-expensive: #d08770;--edge-critical: #bf616a;--shadow: rgba(136, 192, 208, .12)}[data-theme=solarized-dark]{--bg: #002b36;--bg-2: #073642;--surface: #0a3944;--line: #16444f;--ink: #eee8d5;--muted: #93a1a1;--high: #859900;--medium: #b58900;--low: #dc322f;--critical: #cb4b16;--accent: #2aa198;--rail-from: #073642;--rail-to: #002b36;--rail-active: #16444f;--btn: #073642;--btn-line: #268bd2;--btn-primary: #0a4a42;--btn-primary-line: #2aa198;--node-bg: #073642;--node-line: #268bd2;--graph-bg: #002b36;--graph-grid: rgba(42, 161, 152, .12);--edge-cheap: #586e75;--edge-expensive: #cb4b16;--edge-critical: #dc322f;--shadow: rgba(42, 161, 152, .12)}[data-theme=forest]{--bg: #0e1510;--bg-2: #152019;--surface: #1b2a20;--line: #2c4334;--ink: #e4f0e6;--muted: #8eaa96;--high: #6ab04c;--medium: #c8a951;--low: #e17055;--critical: #d35400;--accent: #7bed9f;--rail-from: #152019;--rail-to: #0e1510;--rail-active: #1f3326;--btn: #1f3326;--btn-line: #3d6b4f;--btn-primary: #1e4d32;--btn-primary-line: #6ab04c;--node-bg: #16241b;--node-line: #3d6b4f;--graph-bg: #0e1510;--graph-grid: rgba(123, 237, 159, .1);--edge-cheap: #3d6b4f;--edge-expensive: #c8a951;--edge-critical: #d35400;--shadow: rgba(123, 237, 159, .1)}[data-theme=rose]{--bg: #191724;--bg-2: #1f1d2e;--surface: #26233a;--line: #403d52;--ink: #e0def4;--muted: #908caa;--high: #9ccfd8;--medium: #f6c177;--low: #eb6f92;--critical: #eb6f92;--accent: #c4a7e7;--rail-from: #1f1d2e;--rail-to: #191724;--rail-active: #26233a;--btn: #26233a;--btn-line: #c4a7e7;--btn-primary: #3a2f4d;--btn-primary-line: #c4a7e7;--node-bg: #1f1d2e;--node-line: #524f67;--graph-bg: #191724;--graph-grid: rgba(196, 167, 231, .12);--edge-cheap: #524f67;--edge-expensive: #f6c177;--edge-critical: #eb6f92;--shadow: rgba(196, 167, 231, .12)}[data-theme=amber]{--bg: #120e0a;--bg-2: #1c1610;--surface: #261e16;--line: #3d2f22;--ink: #f4e6d0;--muted: #b59a78;--high: #c4d6a0;--medium: #e9b44c;--low: #d8572a;--critical: #c0392b;--accent: #f0a05a;--rail-from: #1c1610;--rail-to: #120e0a;--rail-active: #2b2218;--btn: #2b2218;--btn-line: #8a5a2b;--btn-primary: #4a3418;--btn-primary-line: #f0a05a;--node-bg: #1c1610;--node-line: #8a5a2b;--graph-bg: #120e0a;--graph-grid: rgba(240, 160, 90, .12);--edge-cheap: #5c4a38;--edge-expensive: #e9b44c;--edge-critical: #d8572a;--shadow: rgba(240, 160, 90, .12)}[data-theme=volcano]{--bg: #14090a;--bg-2: #1e0e10;--surface: #2a1416;--line: #4a2226;--ink: #fde8e4;--muted: #c48b86;--high: #7bed9f;--medium: #f6c90e;--low: #ff6b6b;--critical: #ff3b3b;--accent: #ff7b54;--rail-from: #1e0e10;--rail-to: #14090a;--rail-active: #32181b;--btn: #32181b;--btn-line: #ff7b54;--btn-primary: #5a1f18;--btn-primary-line: #ff7b54;--node-bg: #1e0e10;--node-line: #7a3330;--graph-bg: #14090a;--graph-grid: rgba(255, 123, 84, .12);--edge-cheap: #5a3330;--edge-expensive: #ff7b54;--edge-critical: #ff3b3b;--shadow: rgba(255, 123, 84, .14)}[data-theme=lavender]{--bg: #12101c;--bg-2: #1a1730;--surface: #221e3c;--line: #3b3560;--ink: #efeaff;--muted: #b3a7d6;--high: #80ffdb;--medium: #ffd166;--low: #ff6b9d;--critical: #ff4d6d;--accent: #c77dff;--rail-from: #1a1730;--rail-to: #12101c;--rail-active: #2a2550;--btn: #2a2550;--btn-line: #c77dff;--btn-primary: #3d2a66;--btn-primary-line: #c77dff;--node-bg: #1a1730;--node-line: #5a4d8a;--graph-bg: #12101c;--graph-grid: rgba(199, 125, 255, .12);--edge-cheap: #5a4d8a;--edge-expensive: #ffd166;--edge-critical: #ff4d6d;--shadow: rgba(199, 125, 255, .14)}[data-theme=neon-noir]{--bg: #05060a;--bg-2: #0a0c14;--surface: #10131c;--line: #1e2436;--ink: #f0f4ff;--muted: #8b93b0;--high: #39ff88;--medium: #ffe66d;--low: #ff2d95;--critical: #ff3d5a;--accent: #00f0ff;--rail-from: #0a0c14;--rail-to: #05060a;--rail-active: #151a2a;--btn: #151a2a;--btn-line: #00f0ff;--btn-primary: #063a40;--btn-primary-line: #00f0ff;--node-bg: #0a0c14;--node-line: #2a3550;--graph-bg: #05060a;--graph-grid: rgba(0, 240, 255, .12);--edge-cheap: #3a4560;--edge-expensive: #ff2d95;--edge-critical: #ff3d5a;--shadow: rgba(0, 240, 255, .22)}[data-theme=synthwave]{--bg: #1a0a2e;--bg-2: #240b3d;--surface: #2d1250;--line: #4a1d7a;--ink: #ffe6fb;--muted: #c49ad8;--high: #00f5d4;--medium: #ffd60a;--low: #ff6b9d;--critical: #ff006e;--accent: #ff2bd6;--rail-from: #240b3d;--rail-to: #1a0a2e;--rail-active: #3a1570;--btn: #3a1570;--btn-line: #ff2bd6;--btn-primary: #5a0a4a;--btn-primary-line: #ff2bd6;--node-bg: #240b3d;--node-line: #7b2cbf;--graph-bg: #1a0a2e;--graph-grid: rgba(255, 43, 214, .16);--edge-cheap: #5a3a80;--edge-expensive: #ff9e00;--edge-critical: #ff006e;--shadow: rgba(255, 43, 214, .24)}[data-theme=phosphor]{--bg: #020804;--bg-2: #061208;--surface: #0a1a0e;--line: #163c1e;--ink: #c8ffc8;--muted: #5aaa5a;--high: #39ff14;--medium: #c8f542;--low: #ffb000;--critical: #ff5e00;--accent: #00ff66;--rail-from: #061208;--rail-to: #020804;--rail-active: #0e2414;--btn: #0e2414;--btn-line: #00ff66;--btn-primary: #0a3a18;--btn-primary-line: #00ff66;--node-bg: #061208;--node-line: #1e6a32;--graph-bg: #020804;--graph-grid: rgba(0, 255, 102, .12);--edge-cheap: #1e5a2a;--edge-expensive: #c8f542;--edge-critical: #ff5e00;--shadow: rgba(0, 255, 102, .2)}[data-theme=aurora]{--bg: #071018;--bg-2: #0c1c28;--surface: #122636;--line: #1e3d52;--ink: #e8fff6;--muted: #7eb8a8;--high: #5fffcf;--medium: #ffe566;--low: #ff7eb6;--critical: #ff4d6d;--accent: #7cffb2;--rail-from: #0c1c28;--rail-to: #071018;--rail-active: #163044;--btn: #163044;--btn-line: #7cffb2;--btn-primary: #0e3d3a;--btn-primary-line: #7cffb2;--node-bg: #0c1c28;--node-line: #2a6a78;--graph-bg: #071018;--graph-grid: rgba(124, 255, 178, .12);--edge-cheap: #2a5a68;--edge-expensive: #c9a0ff;--edge-critical: #ff4d6d;--shadow: rgba(124, 255, 178, .18)}[data-theme=biolume]{--bg: #02141c;--bg-2: #042430;--surface: #073040;--line: #0a4a5c;--ink: #e6fffb;--muted: #6eb8b0;--high: #5dffb0;--medium: #ffe066;--low: #ff79c6;--critical: #ff4d6d;--accent: #18e7d4;--rail-from: #042430;--rail-to: #02141c;--rail-active: #0a3848;--btn: #0a3848;--btn-line: #18e7d4;--btn-primary: #0a4a48;--btn-primary-line: #18e7d4;--node-bg: #042430;--node-line: #1a7080;--graph-bg: #02141c;--graph-grid: rgba(24, 231, 212, .12);--edge-cheap: #1a5a68;--edge-expensive: #ff79c6;--edge-critical: #ff4d6d;--shadow: rgba(24, 231, 212, .2)}[data-theme=carbon]{--bg: #0d0d0f;--bg-2: #16161a;--surface: #1e1e24;--line: #33333c;--ink: #f2f2f4;--muted: #9a9aa8;--high: #3dd68c;--medium: #f0c040;--low: #ff5a5a;--critical: #ff2a2a;--accent: #ff2a2a;--rail-from: #16161a;--rail-to: #0d0d0f;--rail-active: #24242c;--btn: #24242c;--btn-line: #ff2a2a;--btn-primary: #4a1212;--btn-primary-line: #ff2a2a;--node-bg: #16161a;--node-line: #4a4a55;--graph-bg: #0d0d0f;--graph-grid: rgba(255, 42, 42, .1);--edge-cheap: #4a4a55;--edge-expensive: #ff8a3d;--edge-critical: #ff2a2a;--shadow: rgba(255, 42, 42, .18)}[data-theme=paper]{--bg: #f6f1e8;--bg-2: #efe6d6;--surface: #fffaf2;--line: #d9cbb6;--ink: #2b241c;--muted: #6f6456;--high: #2a7a4b;--medium: #b5811a;--low: #c0392b;--critical: #a93226;--accent: #1d6a7a;--rail-from: #efe6d6;--rail-to: #e7dcc8;--rail-active: #e2d3bb;--btn: #fffaf2;--btn-line: #c9b79a;--btn-primary: #d7eee0;--btn-primary-line: #2a7a4b;--node-bg: #fffaf2;--node-line: #c9b79a;--graph-bg: #f6f1e8;--graph-grid: rgba(29, 106, 122, .1);--edge-cheap: #b7a48c;--edge-expensive: #c0392b;--edge-critical: #a93226;--shadow: rgba(43, 36, 28, .08)}[data-theme=solarized-light]{--bg: #fdf6e3;--bg-2: #eee8d5;--surface: #f5efdc;--line: #d6cba9;--ink: #657b83;--muted: #93a1a1;--high: #859900;--medium: #b58900;--low: #dc322f;--critical: #cb4b16;--accent: #268bd2;--rail-from: #eee8d5;--rail-to: #e6dfc8;--rail-active: #e0d9c0;--btn: #fdf6e3;--btn-line: #93a1a1;--btn-primary: #e8efc8;--btn-primary-line: #859900;--node-bg: #fdf6e3;--node-line: #93a1a1;--graph-bg: #fdf6e3;--graph-grid: rgba(38, 139, 210, .12);--edge-cheap: #93a1a1;--edge-expensive: #cb4b16;--edge-critical: #dc322f;--shadow: rgba(101, 123, 131, .1)}[data-theme=seafoam]{--bg: #eef7f4;--bg-2: #dff0ea;--surface: #ffffff;--line: #b7d5cc;--ink: #17332c;--muted: #4d7268;--high: #1b8a5a;--medium: #c48a14;--low: #c44536;--critical: #9b2d22;--accent: #1d9a8a;--rail-from: #dff0ea;--rail-to: #cfe6de;--rail-active: #c4ddd4;--btn: #ffffff;--btn-line: #8fbfb2;--btn-primary: #d4f0e4;--btn-primary-line: #1b8a5a;--node-bg: #ffffff;--node-line: #8fbfb2;--graph-bg: #eef7f4;--graph-grid: rgba(29, 154, 138, .12);--edge-cheap: #8fbfb2;--edge-expensive: #c48a14;--edge-critical: #c44536;--shadow: rgba(23, 51, 44, .08)}[data-theme=high-contrast]{--bg: #ffffff;--bg-2: #f2f2f2;--surface: #ffffff;--line: #111111;--ink: #000000;--muted: #222222;--high: #007a33;--medium: #8a5a00;--low: #b00000;--critical: #9b0000;--accent: #0033cc;--rail-from: #f2f2f2;--rail-to: #e6e6e6;--rail-active: #d9d9d9;--btn: #ffffff;--btn-line: #000000;--btn-primary: #d9f2e3;--btn-primary-line: #007a33;--node-bg: #ffffff;--node-line: #000000;--graph-bg: #ffffff;--graph-grid: rgba(0, 0, 0, .12);--edge-cheap: #444444;--edge-expensive: #8a5a00;--edge-critical: #b00000;--shadow: rgba(0, 0, 0, .12)}[data-theme=sakura]{--bg: #fff0f5;--bg-2: #ffe4ee;--surface: #fff7fa;--line: #f5b8cc;--ink: #4a1830;--muted: #a05a78;--high: #1a8a5c;--medium: #c48a14;--low: #d63d6e;--critical: #b01040;--accent: #e84a8a;--rail-from: #ffe4ee;--rail-to: #f8d4e0;--rail-active: #f5c8d8;--btn: #fff7fa;--btn-line: #e89ab0;--btn-primary: #ffd6e6;--btn-primary-line: #e84a8a;--node-bg: #fff7fa;--node-line: #e89ab0;--graph-bg: #fff0f5;--graph-grid: rgba(232, 74, 138, .12);--edge-cheap: #d4a0b0;--edge-expensive: #d63d6e;--edge-critical: #b01040;--shadow: rgba(74, 24, 48, .1)}[data-theme=citrus]{--bg: #fffce8;--bg-2: #fff3b0;--surface: #fffef5;--line: #e8d44a;--ink: #2a2a08;--muted: #6a6a20;--high: #2a8a20;--medium: #d4a000;--low: #e85d04;--critical: #c0392b;--accent: #5aad14;--rail-from: #fff3b0;--rail-to: #ffe98a;--rail-active: #ffe066;--btn: #fffef5;--btn-line: #d4c030;--btn-primary: #e8f5b8;--btn-primary-line: #5aad14;--node-bg: #fffef5;--node-line: #d4c030;--graph-bg: #fffce8;--graph-grid: rgba(90, 173, 20, .14);--edge-cheap: #c4b040;--edge-expensive: #e85d04;--edge-critical: #c0392b;--shadow: rgba(42, 42, 8, .1)}[data-theme=peach]{--bg: #fff3eb;--bg-2: #ffe0cc;--surface: #fffaf6;--line: #f0c4a8;--ink: #3a2218;--muted: #8a5a48;--high: #2a8a5c;--medium: #d48a14;--low: #e85d3a;--critical: #c0392b;--accent: #ff6b35;--rail-from: #ffe0cc;--rail-to: #ffd4b8;--rail-active: #ffc8a8;--btn: #fffaf6;--btn-line: #e8a888;--btn-primary: #ffe0cc;--btn-primary-line: #ff6b35;--node-bg: #fffaf6;--node-line: #e8a888;--graph-bg: #fff3eb;--graph-grid: rgba(255, 107, 53, .12);--edge-cheap: #d4a088;--edge-expensive: #e85d3a;--edge-critical: #c0392b;--shadow: rgba(58, 34, 24, .1)}[data-theme=candy]{--bg: #f4f0ff;--bg-2: #e8dcff;--surface: #fbf8ff;--line: #d4c0f0;--ink: #2a1848;--muted: #6a5890;--high: #1a8a6a;--medium: #c48a14;--low: #e84a8a;--critical: #c01060;--accent: #ff5eb1;--rail-from: #e8dcff;--rail-to: #ddd0ff;--rail-active: #d4c4ff;--btn: #fbf8ff;--btn-line: #c4a8e8;--btn-primary: #ffd6ec;--btn-primary-line: #ff5eb1;--node-bg: #fbf8ff;--node-line: #c4a8e8;--graph-bg: #f4f0ff;--graph-grid: rgba(255, 94, 177, .14);--edge-cheap: #b0a0d0;--edge-expensive: #e84a8a;--edge-critical: #c01060;--shadow: rgba(42, 24, 72, .1)}[data-theme=sky]{--bg: #e8f4ff;--bg-2: #cfe8ff;--surface: #f5faff;--line: #90c8f0;--ink: #0a2848;--muted: #3a6080;--high: #0a8a4a;--medium: #c48a14;--low: #e85d3a;--critical: #c0392b;--accent: #0077ff;--rail-from: #cfe8ff;--rail-to: #b8dcff;--rail-active: #a8d4ff;--btn: #f5faff;--btn-line: #70b0e0;--btn-primary: #cfe8ff;--btn-primary-line: #0077ff;--node-bg: #f5faff;--node-line: #70b0e0;--graph-bg: #e8f4ff;--graph-grid: rgba(0, 119, 255, .12);--edge-cheap: #80b0d0;--edge-expensive: #e85d3a;--edge-critical: #c0392b;--shadow: rgba(10, 40, 72, .1)}[data-theme=coral]{--bg: #fff1ee;--bg-2: #ffddd6;--surface: #fff8f6;--line: #f0b0a4;--ink: #3a1814;--muted: #8a5048;--high: #0d9488;--medium: #d48a14;--low: #e85d4a;--critical: #c0392b;--accent: #0d9488;--rail-from: #ffddd6;--rail-to: #ffd0c6;--rail-active: #ffc4b8;--btn: #fff8f6;--btn-line: #e89888;--btn-primary: #d4f4ee;--btn-primary-line: #0d9488;--node-bg: #fff8f6;--node-line: #e89888;--graph-bg: #fff1ee;--graph-grid: rgba(13, 148, 136, .14);--edge-cheap: #d4a098;--edge-expensive: #e85d4a;--edge-critical: #c0392b;--shadow: rgba(58, 24, 20, .1)}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}:root{--radius: 6px;--radius-lg: 10px;--control-h: 32px;--font: "IBM Plex Sans", ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif;--mono: "IBM Plex Mono", ui-monospace, "SF Mono", Menlo, Consolas, monospace;--focus-ring: 0 0 0 2px var(--bg), 0 0 0 4px var(--accent);--space: 8px}body{background:var(--bg);color:var(--ink);font-family:var(--font);font-size:13px;line-height:1.45;-webkit-font-smoothing:antialiased}button,input,select,textarea{font-family:inherit;font-size:inherit;color:inherit}button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible,a:focus-visible,summary:focus-visible{outline:none;box-shadow:var(--focus-ring)}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}.skip{position:absolute;left:12px;top:-40px;z-index:50;background:var(--surface);color:var(--ink);border:1px solid var(--accent);border-radius:var(--radius);padding:8px 12px}.skip:focus{top:12px}.app{display:grid;grid-template-columns:232px 1fr;height:100%}.rail{border-right:1px solid var(--line);background:linear-gradient(180deg,var(--rail-from),var(--rail-to));padding:16px 12px;display:flex;flex-direction:column;gap:2px;min-width:0}.brand{display:flex;flex-direction:column;gap:2px;padding:4px 8px 16px}.brand-mark{font-family:var(--mono);letter-spacing:.16em;font-size:11px;text-transform:uppercase;color:var(--accent);font-weight:600}.brand-sub{font-size:11px;color:var(--muted)}.nav-item{display:flex;align-items:center;gap:10px;background:transparent;border:0;text-align:left;padding:8px 10px;border-radius:var(--radius);color:var(--muted);cursor:pointer;width:100%}.nav-item:hover{background:color-mix(in srgb,var(--rail-active) 70%,transparent);color:var(--ink)}.nav-item.active{background:var(--rail-active);color:var(--ink);font-weight:500}.nav-item svg{flex-shrink:0}.theme-pick{margin-top:14px;display:grid;gap:4px;padding:0 2px}.theme-pick label{font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);font-weight:500}.theme-pick select,.field select,.field input,.topbar input,.topbar select,.settings input,.settings select,.explorer-path input{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:0 10px;height:var(--control-h);width:100%}.rail-foot{margin-top:auto;padding:12px 8px 4px;border-top:1px solid var(--line);display:grid;gap:6px}.kbd-hint{font-size:11px;color:var(--muted)}kbd{font-family:var(--mono);font-size:10px;border:1px solid var(--line);border-radius:4px;padding:0 4px;background:var(--surface)}.main{display:flex;flex-direction:column;min-width:0;min-height:0;position:relative;background:var(--bg)}.progress{position:absolute;top:0;left:0;right:0;height:2px;overflow:hidden;z-index:30;background:color-mix(in srgb,var(--accent) 20%,transparent)}.progress i{display:block;height:100%;width:32%;background:var(--accent);animation:indeterminate 1.1s ease-in-out infinite}@keyframes indeterminate{0%{transform:translate(-120%)}to{transform:translate(400%)}}.topbar{display:flex;gap:10px;align-items:flex-end;padding:10px 16px;border-bottom:1px solid var(--line);background:var(--bg-2);flex-wrap:wrap}.field{display:grid;gap:4px;min-width:0}.field>span{font-size:11px;color:var(--muted);font-weight:500}.field.path{flex:1;min-width:180px}.field.ref{width:188px;flex:0 0 188px}.field.workspace{width:180px;flex:0 0 180px}.path-row,.combo-row{display:flex;min-width:0}.path-row input,.combo-row input{flex:1;min-width:0}.combo{position:relative;min-width:0}.combo-row input{border-top-right-radius:0;border-bottom-right-radius:0}.topbar .icon-btn{width:var(--control-h);padding:0;flex:0 0 var(--control-h)}.combo-toggle{border-top-left-radius:0;border-bottom-left-radius:0;border-left:0}.combo-menu{position:absolute;top:calc(100% + 4px);right:0;left:auto;min-width:340px;max-width:min(480px,70vw);max-height:360px;overflow:auto;z-index:40;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:0 12px 32px var(--shadow);padding:6px 0}.combo-heading{font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);font-weight:600;padding:8px 12px 4px}.combo-menu .combo-option{display:flex;flex-direction:column;align-items:flex-start;gap:2px;width:100%;text-align:left;background:transparent;border:0;border-radius:0;height:auto;padding:6px 12px;color:var(--ink);cursor:pointer}.combo-menu .combo-option:hover,.combo-menu .combo-option.active{background:var(--rail-active)}.combo-label{font-family:var(--mono);font-size:12px}.combo-detail{color:var(--muted);font-size:12px;line-height:1.35;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}.combo-empty{padding:10px 12px}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:50;background:color-mix(in srgb,var(--bg) 72%,transparent);display:grid;place-items:center;padding:24px}.modal{width:min(720px,100%);max-height:min(640px,90vh);background:var(--bg-2);border:1px solid var(--line);border-radius:var(--radius-lg);box-shadow:0 16px 48px var(--shadow);display:flex;flex-direction:column;overflow:hidden}.modal-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;padding:14px 16px 10px;border-bottom:1px solid var(--line)}.modal-head h2{font-size:15px}.modal-head .muted{margin:4px 0 0}.explorer-path{display:flex;gap:8px;padding:12px 16px;border-bottom:1px solid var(--line)}.explorer-path input{flex:1;min-width:0}.explorer-list{flex:1;overflow:auto;padding:8px;min-height:220px}.explorer-row{display:flex;align-items:center;gap:8px;width:100%;text-align:left;background:transparent;border:0;border-radius:var(--radius);padding:8px 10px;color:var(--ink);cursor:pointer;height:auto}.explorer-row:hover,.explorer-row.active{background:var(--rail-active)}.explorer-name{min-width:0;overflow:hidden;text-overflow:ellipsis}.git-badge{margin-left:auto;margin-bottom:0}.explorer-empty{padding:18px 10px}.modal-foot{display:flex;align-items:center;gap:12px;padding:12px 16px;border-top:1px solid var(--line)}.explorer-current{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:var(--mono);font-size:12px}.topbar input,.topbar select{min-width:0}.topbar-actions{display:flex;gap:8px;margin-left:auto;align-items:center;padding-bottom:0}.btn,.topbar button{background:var(--btn);border:1px solid var(--btn-line);border-radius:var(--radius);height:var(--control-h);padding:0 12px;cursor:pointer;font-weight:500;display:inline-flex;align-items:center;justify-content:center;gap:6px;white-space:nowrap}.btn:hover,.topbar button:hover{filter:brightness(1.08)}.btn:disabled,.topbar button:disabled{opacity:.55;cursor:not-allowed;filter:none}.btn.primary{background:var(--btn-primary);border-color:var(--btn-primary-line)}.btn.ghost{background:transparent}.alerts{display:grid;gap:8px;padding:10px 16px 0}.alerts:empty{display:none;padding:0}.stage{flex:1;min-height:0;display:flex;flex-direction:column}.content{flex:1;min-height:0;display:grid;grid-template-columns:minmax(340px,420px) 1fr}.brief{overflow:auto;border-right:1px solid var(--line);padding:16px 18px 24px;background:radial-gradient(circle at 0 0,color-mix(in srgb,var(--accent) 8%,transparent),transparent 42%),var(--bg)}.graph-wrap{position:relative;min-height:0;display:flex;flex-direction:column}.impact-graph{flex:1;min-height:0;position:relative;display:flex;flex-direction:column}.graph-toolbar{display:flex;flex-wrap:wrap;gap:8px;align-items:center;padding:8px 14px;border-bottom:1px solid var(--line);background:var(--bg-2)}.graph-count{margin-left:auto;font-size:11px}.chip-btn{background:var(--surface);border:1px solid var(--line);border-radius:999px;padding:4px 12px;color:var(--muted);cursor:pointer;height:26px}.chip-btn:hover{color:var(--ink)}.chip-btn.active{background:var(--rail-active);color:var(--ink)}.chip-btn:disabled{opacity:.45;cursor:not-allowed}.graph-stage{flex:1;min-height:0;position:relative;display:flex;flex-direction:column}.graph-stage .react-flow,.graph-3d,.graph-3d-host,.graph-3d-canvas-host{flex:1;width:100%;height:100%;min-height:280px}.graph-3d{position:relative;background:var(--graph-bg);display:flex;flex-direction:column}.graph-3d-host{position:relative;min-height:0;display:flex;flex-direction:column}.graph-3d-canvas-host{position:relative;min-height:0}.graph-3d canvas{display:block;width:100%;height:100%}.graph-3d-tip{position:absolute;pointer-events:none;z-index:2;max-width:320px;padding:6px 8px;border-radius:var(--radius);background:var(--surface);border:1px solid var(--line);color:var(--ink);font-size:11px;line-height:1.35;box-shadow:0 8px 24px var(--shadow)}.graph-3d-tip .t{font-size:10px;color:var(--muted);text-transform:uppercase;letter-spacing:.08em}.graph-3d-tip .n{font-weight:600}.graph-3d-hint{position:absolute;left:10px;bottom:10px;z-index:2;margin:0;font-size:11px;color:var(--muted);max-width:min(420px,calc(100% - 24px));pointer-events:none}.graph-wrap .react-flow{background-color:var(--graph-bg);background-image:linear-gradient(var(--graph-grid) 1px,transparent 1px),linear-gradient(90deg,var(--graph-grid) 1px,transparent 1px);background-size:24px 24px}.react-flow__minimap{background:var(--graph-bg)!important;border:1px solid var(--line)!important;border-radius:var(--radius);overflow:hidden;box-shadow:0 8px 24px var(--shadow)}.react-flow__minimap-node{fill:var(--muted);stroke:none}.react-flow__minimap-node.selected{fill:var(--accent)}.react-flow__minimap-mask{fill:#00000073!important;stroke:var(--accent)!important}.react-flow__controls{box-shadow:none!important}.react-flow__controls-button{background:var(--surface)!important;border-bottom:1px solid var(--line)!important;fill:var(--ink)!important}h1{font-size:18px;margin:0 0 6px;font-weight:600}h2{font-size:13px;margin:0;font-weight:600}.merge-box{border:1px solid var(--line);background:var(--surface);border-radius:var(--radius-lg);padding:12px 14px;margin-bottom:12px}.merge-box.high{border-color:color-mix(in srgb,var(--high) 55%,var(--line))}.merge-box.medium{border-color:color-mix(in srgb,var(--medium) 55%,var(--line))}.merge-box.low{border-color:color-mix(in srgb,var(--low) 55%,var(--line))}.level{font-family:var(--mono);font-weight:600;font-size:14px}.level.high{color:var(--high)}.level.medium{color:var(--medium)}.level.low{color:var(--low)}.merge-title{margin-top:4px;font-size:13px;color:var(--ink)}.reasons{margin:10px 0 0;padding:0 0 0 18px;color:var(--muted)}.reasons li{margin:0 0 4px}.metrics{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:0 0 14px}.metric{border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);padding:8px 10px}.metric .n{font-family:var(--mono);font-size:16px;font-weight:600;font-variant-numeric:tabular-nums}.metric .l{font-size:11px;color:var(--muted);margin-top:2px}.section{border-top:1px solid var(--line);padding:8px 0 4px}.section>summary{cursor:pointer;list-style:none;display:flex;align-items:center;justify-content:space-between;color:var(--muted);font-size:11px;text-transform:uppercase;letter-spacing:.07em;font-weight:600;padding:6px 0}.section>summary::-webkit-details-marker{display:none}.section>summary .count{font-family:var(--mono);letter-spacing:0;text-transform:none;border:1px solid var(--line);border-radius:999px;padding:0 7px;height:18px;display:inline-flex;align-items:center;font-size:11px}.kicker{color:var(--muted);font-size:11px;text-transform:uppercase;letter-spacing:.08em;margin:16px 0 6px;font-weight:600}.chip{display:inline-flex;align-items:center;font-size:11px;padding:2px 8px;border-radius:999px;border:1px solid var(--line);margin:0 6px 6px 0;color:var(--muted);background:var(--surface)}.chip.blocker{color:var(--low);border-color:var(--low)}.chip.warning{color:var(--medium);border-color:var(--medium)}.chip.strong{color:var(--low);border-color:var(--low)}.chip.worth_exploring{color:var(--medium);border-color:var(--medium)}.chip.speculative{color:var(--muted);border-color:var(--line)}.chip.open{color:var(--high);border-color:color-mix(in srgb,var(--high) 50%,var(--line))}.file{font-family:var(--mono);font-size:12px;color:var(--accent)}.read-item,.finding,.residual{padding:8px 0;border-bottom:1px solid color-mix(in srgb,var(--line) 70%,transparent)}.read-item:last-child,.finding:last-child{border-bottom:0}.read-item .why{color:var(--muted);font-size:12px;margin-top:2px}.muted{color:var(--muted);font-size:13px;line-height:1.45}.error{color:var(--low);padding:8px 12px;border:1px solid var(--low);background:color-mix(in srgb,var(--low) 10%,var(--surface));border-radius:var(--radius);display:flex;justify-content:space-between;gap:12px;align-items:flex-start}.banner{padding:8px 12px;border-radius:var(--radius);border:1px solid var(--line);background:var(--surface);font-size:13px;line-height:1.45;display:flex;justify-content:space-between;gap:12px;align-items:flex-start}.banner.warn{border-color:var(--medium);color:var(--medium)}.banner.stale{border-color:var(--low);color:var(--low)}.banner .dismiss{background:transparent;border:0;color:inherit;cursor:pointer;height:auto;padding:0 2px;opacity:.7}.empty{padding:24px 8px;color:var(--muted);font-size:13px;line-height:1.55}.empty h2{font-size:16px;color:var(--ink);margin-bottom:8px}.empty ol{margin:12px 0 0 18px;padding:0}.empty code,code{font-family:var(--mono);font-size:12px;color:var(--accent)}.btn-row{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}.pr-list{padding:16px;overflow:auto}.pr-toolbar{display:flex;gap:8px;align-items:flex-end;margin-bottom:14px}.pr-toolbar .field{flex:1}.pr-toolbar .field.provider{flex:0 0 140px}.pr{border:1px solid var(--line);background:var(--surface);padding:12px 14px;border-radius:var(--radius-lg);margin-bottom:10px}.pr h3{margin:0 0 4px;font-size:14px;font-weight:600}.pr-meta{display:flex;flex-wrap:wrap;gap:8px 12px;align-items:center;margin:6px 0 10px}.pr-actions{display:flex;gap:8px;align-items:center}.settings{padding:24px;max-width:760px;overflow:auto;display:grid;gap:16px}.settings-card{border:1px solid var(--line);background:var(--surface);border-radius:var(--radius-lg);padding:16px;display:grid;gap:8px}.settings-card h2{font-size:14px;margin-bottom:2px}.settings label{font-size:12px;color:var(--muted);font-weight:500}.theme-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:8px}.theme-swatch{border:1px solid var(--line);background:var(--bg);color:var(--ink);border-radius:var(--radius);padding:10px;text-align:left;cursor:pointer;height:auto;box-shadow:0 1px 8px var(--shadow)}.theme-swatch.active{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent),0 1px 8px var(--shadow)}.theme-swatch .swatch-bar{height:6px;border-radius:3px;margin-bottom:8px;background:linear-gradient(90deg,var(--accent),var(--high),var(--medium),var(--low))}.theme-swatch .name{font-size:13px;font-weight:600}.theme-swatch .group{font-size:11px;color:var(--muted)}.headline{white-space:pre-wrap;font-family:var(--mono);font-size:12px;color:var(--muted);margin:8px 0 0}.graph-modes{display:flex;gap:8px;align-items:center;padding:8px 14px;border-bottom:1px solid var(--line);background:var(--bg-2)}.seg{display:inline-flex;border:1px solid var(--line);border-radius:999px;padding:2px;background:var(--surface)}.seg button,.graph-modes button{background:transparent;border:0;border-radius:999px;padding:4px 12px;color:var(--muted);cursor:pointer;height:26px}.seg button.active,.graph-modes button.active{background:var(--rail-active);color:var(--ink)}.legend{margin-left:auto;display:flex;gap:12px;color:var(--muted);font-size:11px}.legend i{display:inline-block;width:14px;height:2px;margin-right:6px;vertical-align:middle;background:var(--edge-cheap)}.legend i.exp{background:var(--edge-expensive)}.legend i.crit{background:var(--edge-critical);height:3px}.legend i.dash{border-top:2px dashed var(--muted);background:none;height:0}.inspector{position:absolute;top:12px;right:12px;z-index:5;width:300px;max-width:calc(100% - 24px);max-height:calc(100% - 24px);overflow-x:hidden;overflow-y:auto;overflow-wrap:break-word;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-lg);padding:10px 12px;box-shadow:0 8px 24px var(--shadow);font-size:12px}.inspector .t{font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.06em}.inspector .n,.inspector .file,.inspector .muted{overflow-wrap:break-word}.inspector .n{font-weight:600;margin:4px 0}.inspector-head{display:flex;align-items:center;justify-content:space-between;gap:8px}.inspector-roles{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:4px}.inspector-chip{font-size:10px;text-transform:uppercase;letter-spacing:.04em;padding:1px 6px;border-radius:999px;border:1px solid var(--line);color:var(--muted);white-space:nowrap}.inspector-close{flex:0 0 auto;width:22px;height:22px;padding:0;border:1px solid var(--line);border-radius:var(--radius);background:transparent;color:var(--muted);font-size:16px;line-height:1;cursor:pointer}.inspector-close:hover{color:var(--ink)}.inspector-purpose{margin:6px 0 8px;color:var(--ink);font-size:12px;line-height:1.4}.inspector-layer{margin-top:4px;font-size:11px}.inspector-facts{margin:10px 0 0;padding-top:8px;border-top:1px solid var(--line)}.inspector-fact{display:grid;grid-template-columns:minmax(64px,92px) minmax(0,1fr);gap:8px;padding:3px 0;align-items:start}.inspector-fact dt{color:var(--muted);font-size:11px;margin:0}.inspector-fact dd{margin:0;overflow-wrap:break-word}.inspector-section{margin-top:10px;padding-top:8px;border-top:1px solid var(--line)}.inspector-section h3{margin:0 0 6px;display:flex;align-items:center;justify-content:space-between;color:var(--muted);font-size:11px;text-transform:uppercase;letter-spacing:.07em;font-weight:600}.inspector-section .count{font-family:var(--mono);letter-spacing:0;text-transform:none;border:1px solid var(--line);border-radius:999px;padding:0 7px;height:18px;display:inline-flex;align-items:center;font-size:11px}.inspector-section ul{list-style:none;margin:0;padding:0}.inspector-section li{padding:4px 0;border-bottom:1px solid color-mix(in srgb,var(--line) 70%,transparent)}.inspector-section li:last-child{border-bottom:0}.inspector-link-name{display:block;font-weight:600;overflow-wrap:break-word}.inspector-link-meta{display:block;color:var(--muted);font-size:11px}.lp-node{padding:8px 10px;border-radius:var(--radius);border:1px solid var(--node-line);background:var(--node-bg);width:180px;max-width:100%;height:56px;box-sizing:border-box;box-shadow:0 0 0 1px var(--shadow);overflow:visible;position:relative}.lp-node .t{font-size:10px;color:var(--muted);text-transform:uppercase;letter-spacing:.08em}.lp-node .n{font-size:13px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lp-node.selected{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent)}.react-flow__node-load .react-flow__handle{width:8px;height:8px;border:none;background:transparent;opacity:0}.type-table{width:100%;border-collapse:collapse;font-size:12px}.type-table td{padding:3px 0}.type-table td:last-child{text-align:right;font-family:var(--mono);font-variant-numeric:tabular-nums;color:var(--muted)}@media(prefers-reduced-motion:reduce){.progress i{animation:none;width:100%}*{scroll-behavior:auto!important}}@media(max-width:960px){.app{grid-template-columns:56px 1fr}.brand-sub,.nav-item span,.theme-pick,.kbd-hint,.rail-foot .muted{display:none}.nav-item{justify-content:center;padding:10px}.content{grid-template-columns:1fr}.brief{border-right:0;border-bottom:1px solid var(--line);max-height:42vh}} diff --git a/src/loadpath/static/assets/index-_7_dtN73.js b/src/loadpath/static/assets/index-_7_dtN73.js deleted file mode 100644 index 51d7561..0000000 --- a/src/loadpath/static/assets/index-_7_dtN73.js +++ /dev/null @@ -1,62 +0,0 @@ -(function(){const r=document.createElement("link").relList;if(r&&r.supports&&r.supports("modulepreload"))return;for(const a of document.querySelectorAll('link[rel="modulepreload"]'))l(a);new MutationObserver(a=>{for(const u of a)if(u.type==="childList")for(const d of u.addedNodes)d.tagName==="LINK"&&d.rel==="modulepreload"&&l(d)}).observe(document,{childList:!0,subtree:!0});function i(a){const u={};return a.integrity&&(u.integrity=a.integrity),a.referrerPolicy&&(u.referrerPolicy=a.referrerPolicy),a.crossOrigin==="use-credentials"?u.credentials="include":a.crossOrigin==="anonymous"?u.credentials="omit":u.credentials="same-origin",u}function l(a){if(a.ep)return;a.ep=!0;const u=i(a);fetch(a.href,u)}})();function dp(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var mu={exports:{}},ri={},yu={exports:{}},Pe={};/** - * @license React - * react.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var Of;function H0(){if(Of)return Pe;Of=1;var t=Symbol.for("react.element"),r=Symbol.for("react.portal"),i=Symbol.for("react.fragment"),l=Symbol.for("react.strict_mode"),a=Symbol.for("react.profiler"),u=Symbol.for("react.provider"),d=Symbol.for("react.context"),f=Symbol.for("react.forward_ref"),p=Symbol.for("react.suspense"),y=Symbol.for("react.memo"),m=Symbol.for("react.lazy"),x=Symbol.iterator;function v(P){return P===null||typeof P!="object"?null:(P=x&&P[x]||P["@@iterator"],typeof P=="function"?P:null)}var S={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},_=Object.assign,C={};function E(P,T,ne){this.props=P,this.context=T,this.refs=C,this.updater=ne||S}E.prototype.isReactComponent={},E.prototype.setState=function(P,T){if(typeof P!="object"&&typeof P!="function"&&P!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,P,T,"setState")},E.prototype.forceUpdate=function(P){this.updater.enqueueForceUpdate(this,P,"forceUpdate")};function N(){}N.prototype=E.prototype;function R(P,T,ne){this.props=P,this.context=T,this.refs=C,this.updater=ne||S}var k=R.prototype=new N;k.constructor=R,_(k,E.prototype),k.isPureReactComponent=!0;var j=Array.isArray,z=Object.prototype.hasOwnProperty,D={current:null},B={key:!0,ref:!0,__self:!0,__source:!0};function H(P,T,ne){var re,ue={},ce=null,de=null;if(T!=null)for(re in T.ref!==void 0&&(de=T.ref),T.key!==void 0&&(ce=""+T.key),T)z.call(T,re)&&!B.hasOwnProperty(re)&&(ue[re]=T[re]);var Q=arguments.length-2;if(Q===1)ue.children=ne;else if(1>>1,T=A[P];if(0>>1;Pa(ue,F))cea(de,ue)?(A[P]=de,A[ce]=F,P=ce):(A[P]=ue,A[re]=F,P=re);else if(cea(de,F))A[P]=de,A[ce]=F,P=ce;else break e}}return L}function a(A,L){var F=A.sortIndex-L.sortIndex;return F!==0?F:A.id-L.id}if(typeof performance=="object"&&typeof performance.now=="function"){var u=performance;t.unstable_now=function(){return u.now()}}else{var d=Date,f=d.now();t.unstable_now=function(){return d.now()-f}}var p=[],y=[],m=1,x=null,v=3,S=!1,_=!1,C=!1,E=typeof setTimeout=="function"?setTimeout:null,N=typeof clearTimeout=="function"?clearTimeout:null,R=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function k(A){for(var L=i(y);L!==null;){if(L.callback===null)l(y);else if(L.startTime<=A)l(y),L.sortIndex=L.expirationTime,r(p,L);else break;L=i(y)}}function j(A){if(C=!1,k(A),!_)if(i(p)!==null)_=!0,V(z);else{var L=i(y);L!==null&&U(j,L.startTime-A)}}function z(A,L){_=!1,C&&(C=!1,N(H),H=-1),S=!0;var F=v;try{for(k(L),x=i(p);x!==null&&(!(x.expirationTime>L)||A&&!Z());){var P=x.callback;if(typeof P=="function"){x.callback=null,v=x.priorityLevel;var T=P(x.expirationTime<=L);L=t.unstable_now(),typeof T=="function"?x.callback=T:x===i(p)&&l(p),k(L)}else l(p);x=i(p)}if(x!==null)var ne=!0;else{var re=i(y);re!==null&&U(j,re.startTime-L),ne=!1}return ne}finally{x=null,v=F,S=!1}}var D=!1,B=null,H=-1,X=5,ee=-1;function Z(){return!(t.unstable_now()-eeA||125P?(A.sortIndex=F,r(y,A),i(p)===null&&A===i(y)&&(C?(N(H),H=-1):C=!0,U(j,F-P))):(A.sortIndex=T,r(p,A),_||S||(_=!0,V(z))),A},t.unstable_shouldYield=Z,t.unstable_wrapCallback=function(A){var L=v;return function(){var F=v;v=L;try{return A.apply(this,arguments)}finally{v=F}}}})(wu)),wu}var Uf;function Y0(){return Uf||(Uf=1,xu.exports=W0()),xu.exports}/** - * @license React - * react-dom.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var Wf;function X0(){if(Wf)return kt;Wf=1;var t=wi(),r=Y0();function i(e){for(var n="https://reactjs.org/docs/error-decoder.html?invariant="+e,o=1;o"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),p=Object.prototype.hasOwnProperty,y=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,m={},x={};function v(e){return p.call(x,e)?!0:p.call(m,e)?!1:y.test(e)?x[e]=!0:(m[e]=!0,!1)}function S(e,n,o,s){if(o!==null&&o.type===0)return!1;switch(typeof n){case"function":case"symbol":return!0;case"boolean":return s?!1:o!==null?!o.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function _(e,n,o,s){if(n===null||typeof n>"u"||S(e,n,o,s))return!0;if(s)return!1;if(o!==null)switch(o.type){case 3:return!n;case 4:return n===!1;case 5:return isNaN(n);case 6:return isNaN(n)||1>n}return!1}function C(e,n,o,s,c,h,w){this.acceptsBooleans=n===2||n===3||n===4,this.attributeName=s,this.attributeNamespace=c,this.mustUseProperty=o,this.propertyName=e,this.type=n,this.sanitizeURL=h,this.removeEmptyString=w}var E={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){E[e]=new C(e,0,!1,e,null,!1,!1)}),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var n=e[0];E[n]=new C(n,1,!1,e[1],null,!1,!1)}),["contentEditable","draggable","spellCheck","value"].forEach(function(e){E[e]=new C(e,2,!1,e.toLowerCase(),null,!1,!1)}),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){E[e]=new C(e,2,!1,e,null,!1,!1)}),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){E[e]=new C(e,3,!1,e.toLowerCase(),null,!1,!1)}),["checked","multiple","muted","selected"].forEach(function(e){E[e]=new C(e,3,!0,e,null,!1,!1)}),["capture","download"].forEach(function(e){E[e]=new C(e,4,!1,e,null,!1,!1)}),["cols","rows","size","span"].forEach(function(e){E[e]=new C(e,6,!1,e,null,!1,!1)}),["rowSpan","start"].forEach(function(e){E[e]=new C(e,5,!1,e.toLowerCase(),null,!1,!1)});var N=/[\-:]([a-z])/g;function R(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var n=e.replace(N,R);E[n]=new C(n,1,!1,e,null,!1,!1)}),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var n=e.replace(N,R);E[n]=new C(n,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)}),["xml:base","xml:lang","xml:space"].forEach(function(e){var n=e.replace(N,R);E[n]=new C(n,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)}),["tabIndex","crossOrigin"].forEach(function(e){E[e]=new C(e,1,!1,e.toLowerCase(),null,!1,!1)}),E.xlinkHref=new C("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach(function(e){E[e]=new C(e,1,!1,e.toLowerCase(),null,!0,!0)});function k(e,n,o,s){var c=E.hasOwnProperty(n)?E[n]:null;(c!==null?c.type!==0:s||!(2I||c[w]!==h[I]){var b=` -`+c[w].replace(" at new "," at ");return e.displayName&&b.includes("")&&(b=b.replace("",e.displayName)),b}while(1<=w&&0<=I);break}}}finally{ne=!1,Error.prepareStackTrace=o}return(e=e?e.displayName||e.name:"")?T(e):""}function ue(e){switch(e.tag){case 5:return T(e.type);case 16:return T("Lazy");case 13:return T("Suspense");case 19:return T("SuspenseList");case 0:case 2:case 15:return e=re(e.type,!1),e;case 11:return e=re(e.type.render,!1),e;case 1:return e=re(e.type,!0),e;default:return""}}function ce(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case B:return"Fragment";case D:return"Portal";case X:return"Profiler";case H:return"StrictMode";case J:return"Suspense";case M:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case Z:return(e.displayName||"Context")+".Consumer";case ee:return(e._context.displayName||"Context")+".Provider";case te:var n=e.render;return e=e.displayName,e||(e=n.displayName||n.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case W:return n=e.displayName||null,n!==null?n:ce(e.type)||"Memo";case V:n=e._payload,e=e._init;try{return ce(e(n))}catch{}}return null}function de(e){var n=e.type;switch(e.tag){case 24:return"Cache";case 9:return(n.displayName||"Context")+".Consumer";case 10:return(n._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=n.render,e=e.displayName||e.name||"",n.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return n;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return ce(n);case 8:return n===H?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof n=="function")return n.displayName||n.name||null;if(typeof n=="string")return n}return null}function Q(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function se(e){var n=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(n==="checkbox"||n==="radio")}function fe(e){var n=se(e)?"checked":"value",o=Object.getOwnPropertyDescriptor(e.constructor.prototype,n),s=""+e[n];if(!e.hasOwnProperty(n)&&typeof o<"u"&&typeof o.get=="function"&&typeof o.set=="function"){var c=o.get,h=o.set;return Object.defineProperty(e,n,{configurable:!0,get:function(){return c.call(this)},set:function(w){s=""+w,h.call(this,w)}}),Object.defineProperty(e,n,{enumerable:o.enumerable}),{getValue:function(){return s},setValue:function(w){s=""+w},stopTracking:function(){e._valueTracker=null,delete e[n]}}}}function ge(e){e._valueTracker||(e._valueTracker=fe(e))}function xe(e){if(!e)return!1;var n=e._valueTracker;if(!n)return!0;var o=n.getValue(),s="";return e&&(s=se(e)?e.checked?"true":"false":e.value),e=s,e!==o?(n.setValue(e),!0):!1}function pe(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function Ce(e,n){var o=n.checked;return F({},n,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:o??e._wrapperState.initialChecked})}function je(e,n){var o=n.defaultValue==null?"":n.defaultValue,s=n.checked!=null?n.checked:n.defaultChecked;o=Q(n.value!=null?n.value:o),e._wrapperState={initialChecked:s,initialValue:o,controlled:n.type==="checkbox"||n.type==="radio"?n.checked!=null:n.value!=null}}function Me(e,n){n=n.checked,n!=null&&k(e,"checked",n,!1)}function be(e,n){Me(e,n);var o=Q(n.value),s=n.type;if(o!=null)s==="number"?(o===0&&e.value===""||e.value!=o)&&(e.value=""+o):e.value!==""+o&&(e.value=""+o);else if(s==="submit"||s==="reset"){e.removeAttribute("value");return}n.hasOwnProperty("value")?rt(e,n.type,o):n.hasOwnProperty("defaultValue")&&rt(e,n.type,Q(n.defaultValue)),n.checked==null&&n.defaultChecked!=null&&(e.defaultChecked=!!n.defaultChecked)}function Xe(e,n,o){if(n.hasOwnProperty("value")||n.hasOwnProperty("defaultValue")){var s=n.type;if(!(s!=="submit"&&s!=="reset"||n.value!==void 0&&n.value!==null))return;n=""+e._wrapperState.initialValue,o||n===e.value||(e.value=n),e.defaultValue=n}o=e.name,o!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,o!==""&&(e.name=o)}function rt(e,n,o){(n!=="number"||pe(e.ownerDocument)!==e)&&(o==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+o&&(e.defaultValue=""+o))}var Ze=Array.isArray;function Je(e,n,o,s){if(e=e.options,n){n={};for(var c=0;c"+n.valueOf().toString()+"",n=pt.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;n.firstChild;)e.appendChild(n.firstChild)}});function Ut(e,n){if(n){var o=e.firstChild;if(o&&o===e.lastChild&&o.nodeType===3){o.nodeValue=n;return}}e.textContent=n}var hn={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},Ir=["Webkit","ms","Moz","O"];Object.keys(hn).forEach(function(e){Ir.forEach(function(n){n=n+e.charAt(0).toUpperCase()+e.substring(1),hn[n]=hn[e]})});function er(e,n,o){return n==null||typeof n=="boolean"||n===""?"":o||typeof n!="number"||n===0||hn.hasOwnProperty(e)&&hn[e]?(""+n).trim():n+"px"}function tr(e,n){e=e.style;for(var o in n)if(n.hasOwnProperty(o)){var s=o.indexOf("--")===0,c=er(o,n[o],s);o==="float"&&(o="cssFloat"),s?e.setProperty(o,c):e[o]=c}}var Rr=F({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function jn(e,n){if(n){if(Rr[e]&&(n.children!=null||n.dangerouslySetInnerHTML!=null))throw Error(i(137,e));if(n.dangerouslySetInnerHTML!=null){if(n.children!=null)throw Error(i(60));if(typeof n.dangerouslySetInnerHTML!="object"||!("__html"in n.dangerouslySetInnerHTML))throw Error(i(61))}if(n.style!=null&&typeof n.style!="object")throw Error(i(62))}}function Mn(e,n){if(e.indexOf("-")===-1)return typeof n.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var Pn=null;function K(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var ye=null,ze=null,Nt=null;function Ct(e){if(e=Bo(e)){if(typeof ye!="function")throw Error(i(280));var n=e.stateNode;n&&(n=ns(n),ye(e.stateNode,e.type,n))}}function ji(e){ze?Nt?Nt.push(e):Nt=[e]:ze=e}function Mi(){if(ze){var e=ze,n=Nt;if(Nt=ze=null,Ct(e),n)for(e=0;e>>=0,e===0?32:31-(Ll(e)/Al|0)|0}var Ar=64,Dr=4194304;function ir(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function pn(e,n){var o=e.pendingLanes;if(o===0)return 0;var s=0,c=e.suspendedLanes,h=e.pingedLanes,w=o&268435455;if(w!==0){var I=w&~c;I!==0?s=ir(I):(h&=w,h!==0&&(s=ir(h)))}else w=o&~c,w!==0?s=ir(w):h!==0&&(s=ir(h));if(s===0)return 0;if(n!==0&&n!==s&&(n&c)===0&&(c=s&-s,h=n&-n,c>=h||c===16&&(h&4194240)!==0))return n;if((s&4)!==0&&(s|=o&16),n=e.entangledLanes,n!==0)for(e=e.entanglements,n&=s;0o;o++)n.push(e);return n}function lr(e,n,o){e.pendingLanes|=n,n!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,n=31-Mt(n),e[n]=o}function Ol(e,n){var o=e.pendingLanes&~n;e.pendingLanes=n,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=n,e.mutableReadLanes&=n,e.entangledLanes&=n,n=e.entanglements;var s=e.eventTimes;for(e=e.expirationTimes;0=bo),Rc=" ",Tc=!1;function bc(e,n){switch(e){case"keyup":return Am.indexOf(n.keyCode)!==-1;case"keydown":return n.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function zc(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var Hr=!1;function $m(e,n){switch(e){case"compositionend":return zc(n);case"keypress":return n.which!==32?null:(Tc=!0,Rc);case"textInput":return e=n.data,e===Rc&&Tc?null:e;default:return null}}function Om(e,n){if(Hr)return e==="compositionend"||!Kl&&bc(e,n)?(e=Nc(),Wi=Ul=zn=null,Hr=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(n.ctrlKey||n.altKey||n.metaKey)||n.ctrlKey&&n.altKey){if(n.char&&1=n)return{node:o,offset:n-e};e=s}e:{for(;o;){if(o.nextSibling){o=o.nextSibling;break e}o=o.parentNode}o=void 0}o=Hc(o)}}function Vc(e,n){return e&&n?e===n?!0:e&&e.nodeType===3?!1:n&&n.nodeType===3?Vc(e,n.parentNode):"contains"in e?e.contains(n):e.compareDocumentPosition?!!(e.compareDocumentPosition(n)&16):!1:!1}function Uc(){for(var e=window,n=pe();n instanceof e.HTMLIFrameElement;){try{var o=typeof n.contentWindow.location.href=="string"}catch{o=!1}if(o)e=n.contentWindow;else break;n=pe(e.document)}return n}function Jl(e){var n=e&&e.nodeName&&e.nodeName.toLowerCase();return n&&(n==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||n==="textarea"||e.contentEditable==="true")}function Gm(e){var n=Uc(),o=e.focusedElem,s=e.selectionRange;if(n!==o&&o&&o.ownerDocument&&Vc(o.ownerDocument.documentElement,o)){if(s!==null&&Jl(o)){if(n=s.start,e=s.end,e===void 0&&(e=n),"selectionStart"in o)o.selectionStart=n,o.selectionEnd=Math.min(e,o.value.length);else if(e=(n=o.ownerDocument||document)&&n.defaultView||window,e.getSelection){e=e.getSelection();var c=o.textContent.length,h=Math.min(s.start,c);s=s.end===void 0?h:Math.min(s.end,c),!e.extend&&h>s&&(c=s,s=h,h=c),c=Bc(o,h);var w=Bc(o,s);c&&w&&(e.rangeCount!==1||e.anchorNode!==c.node||e.anchorOffset!==c.offset||e.focusNode!==w.node||e.focusOffset!==w.offset)&&(n=n.createRange(),n.setStart(c.node,c.offset),e.removeAllRanges(),h>s?(e.addRange(n),e.extend(w.node,w.offset)):(n.setEnd(w.node,w.offset),e.addRange(n)))}}for(n=[],e=o;e=e.parentNode;)e.nodeType===1&&n.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof o.focus=="function"&&o.focus(),o=0;o=document.documentMode,Br=null,ea=null,Do=null,ta=!1;function Wc(e,n,o){var s=o.window===o?o.document:o.nodeType===9?o:o.ownerDocument;ta||Br==null||Br!==pe(s)||(s=Br,"selectionStart"in s&&Jl(s)?s={start:s.selectionStart,end:s.selectionEnd}:(s=(s.ownerDocument&&s.ownerDocument.defaultView||window).getSelection(),s={anchorNode:s.anchorNode,anchorOffset:s.anchorOffset,focusNode:s.focusNode,focusOffset:s.focusOffset}),Do&&Ao(Do,s)||(Do=s,s=Ji(ea,"onSelect"),0Xr||(e.current=ha[Xr],ha[Xr]=null,Xr--)}function Ae(e,n){Xr++,ha[Xr]=e.current,e.current=n}var $n={},at=Dn($n),vt=Dn(!1),ur=$n;function Gr(e,n){var o=e.type.contextTypes;if(!o)return $n;var s=e.stateNode;if(s&&s.__reactInternalMemoizedUnmaskedChildContext===n)return s.__reactInternalMemoizedMaskedChildContext;var c={},h;for(h in o)c[h]=n[h];return s&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=n,e.__reactInternalMemoizedMaskedChildContext=c),c}function xt(e){return e=e.childContextTypes,e!=null}function rs(){$e(vt),$e(at)}function sd(e,n,o){if(at.current!==$n)throw Error(i(168));Ae(at,n),Ae(vt,o)}function ld(e,n,o){var s=e.stateNode;if(n=n.childContextTypes,typeof s.getChildContext!="function")return o;s=s.getChildContext();for(var c in s)if(!(c in n))throw Error(i(108,de(e)||"Unknown",c));return F({},o,s)}function os(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||$n,ur=at.current,Ae(at,e),Ae(vt,vt.current),!0}function ad(e,n,o){var s=e.stateNode;if(!s)throw Error(i(169));o?(e=ld(e,n,ur),s.__reactInternalMemoizedMergedChildContext=e,$e(vt),$e(at),Ae(at,e)):$e(vt),Ae(vt,o)}var mn=null,is=!1,pa=!1;function ud(e){mn===null?mn=[e]:mn.push(e)}function s0(e){is=!0,ud(e)}function On(){if(!pa&&mn!==null){pa=!0;var e=0,n=Le;try{var o=mn;for(Le=1;e>=w,c-=w,yn=1<<32-Mt(n)+c|o<Ne?(nt=Ee,Ee=null):nt=Ee.sibling;var Te=oe(Y,Ee,G[Ne],ae);if(Te===null){Ee===null&&(Ee=nt);break}e&&Ee&&Te.alternate===null&&n(Y,Ee),$=h(Te,$,Ne),ke===null?Se=Te:ke.sibling=Te,ke=Te,Ee=nt}if(Ne===G.length)return o(Y,Ee),Fe&&dr(Y,Ne),Se;if(Ee===null){for(;NeNe?(nt=Ee,Ee=null):nt=Ee.sibling;var Gn=oe(Y,Ee,Te.value,ae);if(Gn===null){Ee===null&&(Ee=nt);break}e&&Ee&&Gn.alternate===null&&n(Y,Ee),$=h(Gn,$,Ne),ke===null?Se=Gn:ke.sibling=Gn,ke=Gn,Ee=nt}if(Te.done)return o(Y,Ee),Fe&&dr(Y,Ne),Se;if(Ee===null){for(;!Te.done;Ne++,Te=G.next())Te=le(Y,Te.value,ae),Te!==null&&($=h(Te,$,Ne),ke===null?Se=Te:ke.sibling=Te,ke=Te);return Fe&&dr(Y,Ne),Se}for(Ee=s(Y,Ee);!Te.done;Ne++,Te=G.next())Te=he(Ee,Y,Ne,Te.value,ae),Te!==null&&(e&&Te.alternate!==null&&Ee.delete(Te.key===null?Ne:Te.key),$=h(Te,$,Ne),ke===null?Se=Te:ke.sibling=Te,ke=Te);return e&&Ee.forEach(function(F0){return n(Y,F0)}),Fe&&dr(Y,Ne),Se}function Ye(Y,$,G,ae){if(typeof G=="object"&&G!==null&&G.type===B&&G.key===null&&(G=G.props.children),typeof G=="object"&&G!==null){switch(G.$$typeof){case z:e:{for(var Se=G.key,ke=$;ke!==null;){if(ke.key===Se){if(Se=G.type,Se===B){if(ke.tag===7){o(Y,ke.sibling),$=c(ke,G.props.children),$.return=Y,Y=$;break e}}else if(ke.elementType===Se||typeof Se=="object"&&Se!==null&&Se.$$typeof===V&&gd(Se)===ke.type){o(Y,ke.sibling),$=c(ke,G.props),$.ref=Vo(Y,ke,G),$.return=Y,Y=$;break e}o(Y,ke);break}else n(Y,ke);ke=ke.sibling}G.type===B?($=xr(G.props.children,Y.mode,ae,G.key),$.return=Y,Y=$):(ae=bs(G.type,G.key,G.props,null,Y.mode,ae),ae.ref=Vo(Y,$,G),ae.return=Y,Y=ae)}return w(Y);case D:e:{for(ke=G.key;$!==null;){if($.key===ke)if($.tag===4&&$.stateNode.containerInfo===G.containerInfo&&$.stateNode.implementation===G.implementation){o(Y,$.sibling),$=c($,G.children||[]),$.return=Y,Y=$;break e}else{o(Y,$);break}else n(Y,$);$=$.sibling}$=du(G,Y.mode,ae),$.return=Y,Y=$}return w(Y);case V:return ke=G._init,Ye(Y,$,ke(G._payload),ae)}if(Ze(G))return ve(Y,$,G,ae);if(L(G))return we(Y,$,G,ae);us(Y,G)}return typeof G=="string"&&G!==""||typeof G=="number"?(G=""+G,$!==null&&$.tag===6?(o(Y,$.sibling),$=c($,G),$.return=Y,Y=$):(o(Y,$),$=cu(G,Y.mode,ae),$.return=Y,Y=$),w(Y)):o(Y,$)}return Ye}var Zr=md(!0),yd=md(!1),cs=Dn(null),ds=null,Jr=null,wa=null;function Sa(){wa=Jr=ds=null}function _a(e){var n=cs.current;$e(cs),e._currentValue=n}function ka(e,n,o){for(;e!==null;){var s=e.alternate;if((e.childLanes&n)!==n?(e.childLanes|=n,s!==null&&(s.childLanes|=n)):s!==null&&(s.childLanes&n)!==n&&(s.childLanes|=n),e===o)break;e=e.return}}function eo(e,n){ds=e,wa=Jr=null,e=e.dependencies,e!==null&&e.firstContext!==null&&((e.lanes&n)!==0&&(wt=!0),e.firstContext=null)}function Ot(e){var n=e._currentValue;if(wa!==e)if(e={context:e,memoizedValue:n,next:null},Jr===null){if(ds===null)throw Error(i(308));Jr=e,ds.dependencies={lanes:0,firstContext:e}}else Jr=Jr.next=e;return n}var fr=null;function Ea(e){fr===null?fr=[e]:fr.push(e)}function vd(e,n,o,s){var c=n.interleaved;return c===null?(o.next=o,Ea(n)):(o.next=c.next,c.next=o),n.interleaved=o,xn(e,s)}function xn(e,n){e.lanes|=n;var o=e.alternate;for(o!==null&&(o.lanes|=n),o=e,e=e.return;e!==null;)e.childLanes|=n,o=e.alternate,o!==null&&(o.childLanes|=n),o=e,e=e.return;return o.tag===3?o.stateNode:null}var Fn=!1;function Na(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function xd(e,n){e=e.updateQueue,n.updateQueue===e&&(n.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function wn(e,n){return{eventTime:e,lane:n,tag:0,payload:null,callback:null,next:null}}function Hn(e,n,o){var s=e.updateQueue;if(s===null)return null;if(s=s.shared,(Ie&2)!==0){var c=s.pending;return c===null?n.next=n:(n.next=c.next,c.next=n),s.pending=n,xn(e,o)}return c=s.interleaved,c===null?(n.next=n,Ea(s)):(n.next=c.next,c.next=n),s.interleaved=n,xn(e,o)}function fs(e,n,o){if(n=n.updateQueue,n!==null&&(n=n.shared,(o&4194240)!==0)){var s=n.lanes;s&=e.pendingLanes,o|=s,n.lanes=o,$r(e,o)}}function wd(e,n){var o=e.updateQueue,s=e.alternate;if(s!==null&&(s=s.updateQueue,o===s)){var c=null,h=null;if(o=o.firstBaseUpdate,o!==null){do{var w={eventTime:o.eventTime,lane:o.lane,tag:o.tag,payload:o.payload,callback:o.callback,next:null};h===null?c=h=w:h=h.next=w,o=o.next}while(o!==null);h===null?c=h=n:h=h.next=n}else c=h=n;o={baseState:s.baseState,firstBaseUpdate:c,lastBaseUpdate:h,shared:s.shared,effects:s.effects},e.updateQueue=o;return}e=o.lastBaseUpdate,e===null?o.firstBaseUpdate=n:e.next=n,o.lastBaseUpdate=n}function hs(e,n,o,s){var c=e.updateQueue;Fn=!1;var h=c.firstBaseUpdate,w=c.lastBaseUpdate,I=c.shared.pending;if(I!==null){c.shared.pending=null;var b=I,q=b.next;b.next=null,w===null?h=q:w.next=q,w=b;var ie=e.alternate;ie!==null&&(ie=ie.updateQueue,I=ie.lastBaseUpdate,I!==w&&(I===null?ie.firstBaseUpdate=q:I.next=q,ie.lastBaseUpdate=b))}if(h!==null){var le=c.baseState;w=0,ie=q=b=null,I=h;do{var oe=I.lane,he=I.eventTime;if((s&oe)===oe){ie!==null&&(ie=ie.next={eventTime:he,lane:0,tag:I.tag,payload:I.payload,callback:I.callback,next:null});e:{var ve=e,we=I;switch(oe=n,he=o,we.tag){case 1:if(ve=we.payload,typeof ve=="function"){le=ve.call(he,le,oe);break e}le=ve;break e;case 3:ve.flags=ve.flags&-65537|128;case 0:if(ve=we.payload,oe=typeof ve=="function"?ve.call(he,le,oe):ve,oe==null)break e;le=F({},le,oe);break e;case 2:Fn=!0}}I.callback!==null&&I.lane!==0&&(e.flags|=64,oe=c.effects,oe===null?c.effects=[I]:oe.push(I))}else he={eventTime:he,lane:oe,tag:I.tag,payload:I.payload,callback:I.callback,next:null},ie===null?(q=ie=he,b=le):ie=ie.next=he,w|=oe;if(I=I.next,I===null){if(I=c.shared.pending,I===null)break;oe=I,I=oe.next,oe.next=null,c.lastBaseUpdate=oe,c.shared.pending=null}}while(!0);if(ie===null&&(b=le),c.baseState=b,c.firstBaseUpdate=q,c.lastBaseUpdate=ie,n=c.shared.interleaved,n!==null){c=n;do w|=c.lane,c=c.next;while(c!==n)}else h===null&&(c.shared.lanes=0);gr|=w,e.lanes=w,e.memoizedState=le}}function Sd(e,n,o){if(e=n.effects,n.effects=null,e!==null)for(n=0;no?o:4,e(!0);var s=Ia.transition;Ia.transition={};try{e(!1),n()}finally{Le=o,Ia.transition=s}}function Fd(){return Ft().memoizedState}function c0(e,n,o){var s=Wn(e);if(o={lane:s,action:o,hasEagerState:!1,eagerState:null,next:null},Hd(e))Bd(n,o);else if(o=vd(e,n,o,s),o!==null){var c=mt();Kt(o,e,s,c),Vd(o,n,s)}}function d0(e,n,o){var s=Wn(e),c={lane:s,action:o,hasEagerState:!1,eagerState:null,next:null};if(Hd(e))Bd(n,c);else{var h=e.alternate;if(e.lanes===0&&(h===null||h.lanes===0)&&(h=n.lastRenderedReducer,h!==null))try{var w=n.lastRenderedState,I=h(w,o);if(c.hasEagerState=!0,c.eagerState=I,Wt(I,w)){var b=n.interleaved;b===null?(c.next=c,Ea(n)):(c.next=b.next,b.next=c),n.interleaved=c;return}}catch{}finally{}o=vd(e,n,c,s),o!==null&&(c=mt(),Kt(o,e,s,c),Vd(o,n,s))}}function Hd(e){var n=e.alternate;return e===Ve||n!==null&&n===Ve}function Bd(e,n){Xo=ms=!0;var o=e.pending;o===null?n.next=n:(n.next=o.next,o.next=n),e.pending=n}function Vd(e,n,o){if((o&4194240)!==0){var s=n.lanes;s&=e.pendingLanes,o|=s,n.lanes=o,$r(e,o)}}var xs={readContext:Ot,useCallback:ut,useContext:ut,useEffect:ut,useImperativeHandle:ut,useInsertionEffect:ut,useLayoutEffect:ut,useMemo:ut,useReducer:ut,useRef:ut,useState:ut,useDebugValue:ut,useDeferredValue:ut,useTransition:ut,useMutableSource:ut,useSyncExternalStore:ut,useId:ut,unstable_isNewReconciler:!1},f0={readContext:Ot,useCallback:function(e,n){return an().memoizedState=[e,n===void 0?null:n],e},useContext:Ot,useEffect:Td,useImperativeHandle:function(e,n,o){return o=o!=null?o.concat([e]):null,ys(4194308,4,Ld.bind(null,n,e),o)},useLayoutEffect:function(e,n){return ys(4194308,4,e,n)},useInsertionEffect:function(e,n){return ys(4,2,e,n)},useMemo:function(e,n){var o=an();return n=n===void 0?null:n,e=e(),o.memoizedState=[e,n],e},useReducer:function(e,n,o){var s=an();return n=o!==void 0?o(n):n,s.memoizedState=s.baseState=n,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:n},s.queue=e,e=e.dispatch=c0.bind(null,Ve,e),[s.memoizedState,e]},useRef:function(e){var n=an();return e={current:e},n.memoizedState=e},useState:Id,useDebugValue:Da,useDeferredValue:function(e){return an().memoizedState=e},useTransition:function(){var e=Id(!1),n=e[0];return e=u0.bind(null,e[1]),an().memoizedState=e,[n,e]},useMutableSource:function(){},useSyncExternalStore:function(e,n,o){var s=Ve,c=an();if(Fe){if(o===void 0)throw Error(i(407));o=o()}else{if(o=n(),tt===null)throw Error(i(349));(pr&30)!==0||Nd(s,n,o)}c.memoizedState=o;var h={value:o,getSnapshot:n};return c.queue=h,Td(jd.bind(null,s,h,e),[e]),s.flags|=2048,Ko(9,Cd.bind(null,s,h,o,n),void 0,null),o},useId:function(){var e=an(),n=tt.identifierPrefix;if(Fe){var o=vn,s=yn;o=(s&~(1<<32-Mt(s)-1)).toString(32)+o,n=":"+n+"R"+o,o=Go++,0<\/script>",e=e.removeChild(e.firstChild)):typeof s.is=="string"?e=w.createElement(o,{is:s.is}):(e=w.createElement(o),o==="select"&&(w=e,s.multiple?w.multiple=!0:s.size&&(w.size=s.size))):e=w.createElementNS(e,o),e[sn]=n,e[Ho]=s,cf(e,n,!1,!1),n.stateNode=e;e:{switch(w=Mn(o,s),o){case"dialog":De("cancel",e),De("close",e),c=s;break;case"iframe":case"object":case"embed":De("load",e),c=s;break;case"video":case"audio":for(c=0;c<$o.length;c++)De($o[c],e);c=s;break;case"source":De("error",e),c=s;break;case"img":case"image":case"link":De("error",e),De("load",e),c=s;break;case"details":De("toggle",e),c=s;break;case"input":je(e,s),c=Ce(e,s),De("invalid",e);break;case"option":c=s;break;case"select":e._wrapperState={wasMultiple:!!s.multiple},c=F({},s,{value:void 0}),De("invalid",e);break;case"textarea":Lt(e,s),c=Vt(e,s),De("invalid",e);break;default:c=s}jn(o,c),I=c;for(h in I)if(I.hasOwnProperty(h)){var b=I[h];h==="style"?tr(e,b):h==="dangerouslySetInnerHTML"?(b=b?b.__html:void 0,b!=null&&Cn(e,b)):h==="children"?typeof b=="string"?(o!=="textarea"||b!=="")&&Ut(e,b):typeof b=="number"&&Ut(e,""+b):h!=="suppressContentEditableWarning"&&h!=="suppressHydrationWarning"&&h!=="autoFocus"&&(a.hasOwnProperty(h)?b!=null&&h==="onScroll"&&De("scroll",e):b!=null&&k(e,h,b,w))}switch(o){case"input":ge(e),Xe(e,s,!1);break;case"textarea":ge(e),lt(e);break;case"option":s.value!=null&&e.setAttribute("value",""+Q(s.value));break;case"select":e.multiple=!!s.multiple,h=s.value,h!=null?Je(e,!!s.multiple,h,!1):s.defaultValue!=null&&Je(e,!!s.multiple,s.defaultValue,!0);break;default:typeof c.onClick=="function"&&(e.onclick=ts)}switch(o){case"button":case"input":case"select":case"textarea":s=!!s.autoFocus;break e;case"img":s=!0;break e;default:s=!1}}s&&(n.flags|=4)}n.ref!==null&&(n.flags|=512,n.flags|=2097152)}return ct(n),null;case 6:if(e&&n.stateNode!=null)ff(e,n,e.memoizedProps,s);else{if(typeof s!="string"&&n.stateNode===null)throw Error(i(166));if(o=hr(Yo.current),hr(ln.current),as(n)){if(s=n.stateNode,o=n.memoizedProps,s[sn]=n,(h=s.nodeValue!==o)&&(e=It,e!==null))switch(e.tag){case 3:es(s.nodeValue,o,(e.mode&1)!==0);break;case 5:e.memoizedProps.suppressHydrationWarning!==!0&&es(s.nodeValue,o,(e.mode&1)!==0)}h&&(n.flags|=4)}else s=(o.nodeType===9?o:o.ownerDocument).createTextNode(s),s[sn]=n,n.stateNode=s}return ct(n),null;case 13:if($e(Be),s=n.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(Fe&&Rt!==null&&(n.mode&1)!==0&&(n.flags&128)===0)pd(),qr(),n.flags|=98560,h=!1;else if(h=as(n),s!==null&&s.dehydrated!==null){if(e===null){if(!h)throw Error(i(318));if(h=n.memoizedState,h=h!==null?h.dehydrated:null,!h)throw Error(i(317));h[sn]=n}else qr(),(n.flags&128)===0&&(n.memoizedState=null),n.flags|=4;ct(n),h=!1}else Yt!==null&&(iu(Yt),Yt=null),h=!0;if(!h)return n.flags&65536?n:null}return(n.flags&128)!==0?(n.lanes=o,n):(s=s!==null,s!==(e!==null&&e.memoizedState!==null)&&s&&(n.child.flags|=8192,(n.mode&1)!==0&&(e===null||(Be.current&1)!==0?qe===0&&(qe=3):au())),n.updateQueue!==null&&(n.flags|=4),ct(n),null);case 4:return to(),Ga(e,n),e===null&&Oo(n.stateNode.containerInfo),ct(n),null;case 10:return _a(n.type._context),ct(n),null;case 17:return xt(n.type)&&rs(),ct(n),null;case 19:if($e(Be),h=n.memoizedState,h===null)return ct(n),null;if(s=(n.flags&128)!==0,w=h.rendering,w===null)if(s)qo(h,!1);else{if(qe!==0||e!==null&&(e.flags&128)!==0)for(e=n.child;e!==null;){if(w=ps(e),w!==null){for(n.flags|=128,qo(h,!1),s=w.updateQueue,s!==null&&(n.updateQueue=s,n.flags|=4),n.subtreeFlags=0,s=o,o=n.child;o!==null;)h=o,e=s,h.flags&=14680066,w=h.alternate,w===null?(h.childLanes=0,h.lanes=e,h.child=null,h.subtreeFlags=0,h.memoizedProps=null,h.memoizedState=null,h.updateQueue=null,h.dependencies=null,h.stateNode=null):(h.childLanes=w.childLanes,h.lanes=w.lanes,h.child=w.child,h.subtreeFlags=0,h.deletions=null,h.memoizedProps=w.memoizedProps,h.memoizedState=w.memoizedState,h.updateQueue=w.updateQueue,h.type=w.type,e=w.dependencies,h.dependencies=e===null?null:{lanes:e.lanes,firstContext:e.firstContext}),o=o.sibling;return Ae(Be,Be.current&1|2),n.child}e=e.sibling}h.tail!==null&&He()>io&&(n.flags|=128,s=!0,qo(h,!1),n.lanes=4194304)}else{if(!s)if(e=ps(w),e!==null){if(n.flags|=128,s=!0,o=e.updateQueue,o!==null&&(n.updateQueue=o,n.flags|=4),qo(h,!0),h.tail===null&&h.tailMode==="hidden"&&!w.alternate&&!Fe)return ct(n),null}else 2*He()-h.renderingStartTime>io&&o!==1073741824&&(n.flags|=128,s=!0,qo(h,!1),n.lanes=4194304);h.isBackwards?(w.sibling=n.child,n.child=w):(o=h.last,o!==null?o.sibling=w:n.child=w,h.last=w)}return h.tail!==null?(n=h.tail,h.rendering=n,h.tail=n.sibling,h.renderingStartTime=He(),n.sibling=null,o=Be.current,Ae(Be,s?o&1|2:o&1),n):(ct(n),null);case 22:case 23:return lu(),s=n.memoizedState!==null,e!==null&&e.memoizedState!==null!==s&&(n.flags|=8192),s&&(n.mode&1)!==0?(Tt&1073741824)!==0&&(ct(n),n.subtreeFlags&6&&(n.flags|=8192)):ct(n),null;case 24:return null;case 25:return null}throw Error(i(156,n.tag))}function w0(e,n){switch(ma(n),n.tag){case 1:return xt(n.type)&&rs(),e=n.flags,e&65536?(n.flags=e&-65537|128,n):null;case 3:return to(),$e(vt),$e(at),Pa(),e=n.flags,(e&65536)!==0&&(e&128)===0?(n.flags=e&-65537|128,n):null;case 5:return ja(n),null;case 13:if($e(Be),e=n.memoizedState,e!==null&&e.dehydrated!==null){if(n.alternate===null)throw Error(i(340));qr()}return e=n.flags,e&65536?(n.flags=e&-65537|128,n):null;case 19:return $e(Be),null;case 4:return to(),null;case 10:return _a(n.type._context),null;case 22:case 23:return lu(),null;case 24:return null;default:return null}}var ks=!1,dt=!1,S0=typeof WeakSet=="function"?WeakSet:Set,me=null;function ro(e,n){var o=e.ref;if(o!==null)if(typeof o=="function")try{o(null)}catch(s){We(e,n,s)}else o.current=null}function Qa(e,n,o){try{o()}catch(s){We(e,n,s)}}var hf=!1;function _0(e,n){if(la=Vi,e=Uc(),Jl(e)){if("selectionStart"in e)var o={start:e.selectionStart,end:e.selectionEnd};else e:{o=(o=e.ownerDocument)&&o.defaultView||window;var s=o.getSelection&&o.getSelection();if(s&&s.rangeCount!==0){o=s.anchorNode;var c=s.anchorOffset,h=s.focusNode;s=s.focusOffset;try{o.nodeType,h.nodeType}catch{o=null;break e}var w=0,I=-1,b=-1,q=0,ie=0,le=e,oe=null;t:for(;;){for(var he;le!==o||c!==0&&le.nodeType!==3||(I=w+c),le!==h||s!==0&&le.nodeType!==3||(b=w+s),le.nodeType===3&&(w+=le.nodeValue.length),(he=le.firstChild)!==null;)oe=le,le=he;for(;;){if(le===e)break t;if(oe===o&&++q===c&&(I=w),oe===h&&++ie===s&&(b=w),(he=le.nextSibling)!==null)break;le=oe,oe=le.parentNode}le=he}o=I===-1||b===-1?null:{start:I,end:b}}else o=null}o=o||{start:0,end:0}}else o=null;for(aa={focusedElem:e,selectionRange:o},Vi=!1,me=n;me!==null;)if(n=me,e=n.child,(n.subtreeFlags&1028)!==0&&e!==null)e.return=n,me=e;else for(;me!==null;){n=me;try{var ve=n.alternate;if((n.flags&1024)!==0)switch(n.tag){case 0:case 11:case 15:break;case 1:if(ve!==null){var we=ve.memoizedProps,Ye=ve.memoizedState,Y=n.stateNode,$=Y.getSnapshotBeforeUpdate(n.elementType===n.type?we:Xt(n.type,we),Ye);Y.__reactInternalSnapshotBeforeUpdate=$}break;case 3:var G=n.stateNode.containerInfo;G.nodeType===1?G.textContent="":G.nodeType===9&&G.documentElement&&G.removeChild(G.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(i(163))}}catch(ae){We(n,n.return,ae)}if(e=n.sibling,e!==null){e.return=n.return,me=e;break}me=n.return}return ve=hf,hf=!1,ve}function Zo(e,n,o){var s=n.updateQueue;if(s=s!==null?s.lastEffect:null,s!==null){var c=s=s.next;do{if((c.tag&e)===e){var h=c.destroy;c.destroy=void 0,h!==void 0&&Qa(n,o,h)}c=c.next}while(c!==s)}}function Es(e,n){if(n=n.updateQueue,n=n!==null?n.lastEffect:null,n!==null){var o=n=n.next;do{if((o.tag&e)===e){var s=o.create;o.destroy=s()}o=o.next}while(o!==n)}}function Ka(e){var n=e.ref;if(n!==null){var o=e.stateNode;switch(e.tag){case 5:e=o;break;default:e=o}typeof n=="function"?n(e):n.current=e}}function pf(e){var n=e.alternate;n!==null&&(e.alternate=null,pf(n)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(n=e.stateNode,n!==null&&(delete n[sn],delete n[Ho],delete n[fa],delete n[o0],delete n[i0])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function gf(e){return e.tag===5||e.tag===3||e.tag===4}function mf(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||gf(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function qa(e,n,o){var s=e.tag;if(s===5||s===6)e=e.stateNode,n?o.nodeType===8?o.parentNode.insertBefore(e,n):o.insertBefore(e,n):(o.nodeType===8?(n=o.parentNode,n.insertBefore(e,o)):(n=o,n.appendChild(e)),o=o._reactRootContainer,o!=null||n.onclick!==null||(n.onclick=ts));else if(s!==4&&(e=e.child,e!==null))for(qa(e,n,o),e=e.sibling;e!==null;)qa(e,n,o),e=e.sibling}function Za(e,n,o){var s=e.tag;if(s===5||s===6)e=e.stateNode,n?o.insertBefore(e,n):o.appendChild(e);else if(s!==4&&(e=e.child,e!==null))for(Za(e,n,o),e=e.sibling;e!==null;)Za(e,n,o),e=e.sibling}var it=null,Gt=!1;function Bn(e,n,o){for(o=o.child;o!==null;)yf(e,n,o),o=o.sibling}function yf(e,n,o){if(jt&&typeof jt.onCommitFiberUnmount=="function")try{jt.onCommitFiberUnmount(Lr,o)}catch{}switch(o.tag){case 5:dt||ro(o,n);case 6:var s=it,c=Gt;it=null,Bn(e,n,o),it=s,Gt=c,it!==null&&(Gt?(e=it,o=o.stateNode,e.nodeType===8?e.parentNode.removeChild(o):e.removeChild(o)):it.removeChild(o.stateNode));break;case 18:it!==null&&(Gt?(e=it,o=o.stateNode,e.nodeType===8?da(e.parentNode,o):e.nodeType===1&&da(e,o),Io(e)):da(it,o.stateNode));break;case 4:s=it,c=Gt,it=o.stateNode.containerInfo,Gt=!0,Bn(e,n,o),it=s,Gt=c;break;case 0:case 11:case 14:case 15:if(!dt&&(s=o.updateQueue,s!==null&&(s=s.lastEffect,s!==null))){c=s=s.next;do{var h=c,w=h.destroy;h=h.tag,w!==void 0&&((h&2)!==0||(h&4)!==0)&&Qa(o,n,w),c=c.next}while(c!==s)}Bn(e,n,o);break;case 1:if(!dt&&(ro(o,n),s=o.stateNode,typeof s.componentWillUnmount=="function"))try{s.props=o.memoizedProps,s.state=o.memoizedState,s.componentWillUnmount()}catch(I){We(o,n,I)}Bn(e,n,o);break;case 21:Bn(e,n,o);break;case 22:o.mode&1?(dt=(s=dt)||o.memoizedState!==null,Bn(e,n,o),dt=s):Bn(e,n,o);break;default:Bn(e,n,o)}}function vf(e){var n=e.updateQueue;if(n!==null){e.updateQueue=null;var o=e.stateNode;o===null&&(o=e.stateNode=new S0),n.forEach(function(s){var c=R0.bind(null,e,s);o.has(s)||(o.add(s),s.then(c,c))})}}function Qt(e,n){var o=n.deletions;if(o!==null)for(var s=0;sc&&(c=w),s&=~h}if(s=c,s=He()-s,s=(120>s?120:480>s?480:1080>s?1080:1920>s?1920:3e3>s?3e3:4320>s?4320:1960*E0(s/1960))-s,10e?16:e,Un===null)var s=!1;else{if(e=Un,Un=null,Ps=0,(Ie&6)!==0)throw Error(i(331));var c=Ie;for(Ie|=4,me=e.current;me!==null;){var h=me,w=h.child;if((me.flags&16)!==0){var I=h.deletions;if(I!==null){for(var b=0;bHe()-tu?yr(e,0):eu|=o),_t(e,n)}function Rf(e,n){n===0&&((e.mode&1)===0?n=1:(n=Dr,Dr<<=1,(Dr&130023424)===0&&(Dr=4194304)));var o=mt();e=xn(e,n),e!==null&&(lr(e,n,o),_t(e,o))}function I0(e){var n=e.memoizedState,o=0;n!==null&&(o=n.retryLane),Rf(e,o)}function R0(e,n){var o=0;switch(e.tag){case 13:var s=e.stateNode,c=e.memoizedState;c!==null&&(o=c.retryLane);break;case 19:s=e.stateNode;break;default:throw Error(i(314))}s!==null&&s.delete(n),Rf(e,o)}var Tf;Tf=function(e,n,o){if(e!==null)if(e.memoizedProps!==n.pendingProps||vt.current)wt=!0;else{if((e.lanes&o)===0&&(n.flags&128)===0)return wt=!1,v0(e,n,o);wt=(e.flags&131072)!==0}else wt=!1,Fe&&(n.flags&1048576)!==0&&cd(n,ls,n.index);switch(n.lanes=0,n.tag){case 2:var s=n.type;_s(e,n),e=n.pendingProps;var c=Gr(n,at.current);eo(n,o),c=Ta(null,n,s,e,c,o);var h=ba();return n.flags|=1,typeof c=="object"&&c!==null&&typeof c.render=="function"&&c.$$typeof===void 0?(n.tag=1,n.memoizedState=null,n.updateQueue=null,xt(s)?(h=!0,os(n)):h=!1,n.memoizedState=c.state!==null&&c.state!==void 0?c.state:null,Na(n),c.updater=ws,n.stateNode=c,c._reactInternals=n,Oa(n,s,e,o),n=Va(null,n,s,!0,h,o)):(n.tag=0,Fe&&h&&ga(n),gt(null,n,c,o),n=n.child),n;case 16:s=n.elementType;e:{switch(_s(e,n),e=n.pendingProps,c=s._init,s=c(s._payload),n.type=s,c=n.tag=b0(s),e=Xt(s,e),c){case 0:n=Ba(null,n,s,e,o);break e;case 1:n=rf(null,n,s,e,o);break e;case 11:n=Zd(null,n,s,e,o);break e;case 14:n=Jd(null,n,s,Xt(s.type,e),o);break e}throw Error(i(306,s,""))}return n;case 0:return s=n.type,c=n.pendingProps,c=n.elementType===s?c:Xt(s,c),Ba(e,n,s,c,o);case 1:return s=n.type,c=n.pendingProps,c=n.elementType===s?c:Xt(s,c),rf(e,n,s,c,o);case 3:e:{if(of(n),e===null)throw Error(i(387));s=n.pendingProps,h=n.memoizedState,c=h.element,xd(e,n),hs(n,s,null,o);var w=n.memoizedState;if(s=w.element,h.isDehydrated)if(h={element:s,isDehydrated:!1,cache:w.cache,pendingSuspenseBoundaries:w.pendingSuspenseBoundaries,transitions:w.transitions},n.updateQueue.baseState=h,n.memoizedState=h,n.flags&256){c=no(Error(i(423)),n),n=sf(e,n,s,o,c);break e}else if(s!==c){c=no(Error(i(424)),n),n=sf(e,n,s,o,c);break e}else for(Rt=An(n.stateNode.containerInfo.firstChild),It=n,Fe=!0,Yt=null,o=yd(n,null,s,o),n.child=o;o;)o.flags=o.flags&-3|4096,o=o.sibling;else{if(qr(),s===c){n=Sn(e,n,o);break e}gt(e,n,s,o)}n=n.child}return n;case 5:return _d(n),e===null&&va(n),s=n.type,c=n.pendingProps,h=e!==null?e.memoizedProps:null,w=c.children,ua(s,c)?w=null:h!==null&&ua(s,h)&&(n.flags|=32),nf(e,n),gt(e,n,w,o),n.child;case 6:return e===null&&va(n),null;case 13:return lf(e,n,o);case 4:return Ca(n,n.stateNode.containerInfo),s=n.pendingProps,e===null?n.child=Zr(n,null,s,o):gt(e,n,s,o),n.child;case 11:return s=n.type,c=n.pendingProps,c=n.elementType===s?c:Xt(s,c),Zd(e,n,s,c,o);case 7:return gt(e,n,n.pendingProps,o),n.child;case 8:return gt(e,n,n.pendingProps.children,o),n.child;case 12:return gt(e,n,n.pendingProps.children,o),n.child;case 10:e:{if(s=n.type._context,c=n.pendingProps,h=n.memoizedProps,w=c.value,Ae(cs,s._currentValue),s._currentValue=w,h!==null)if(Wt(h.value,w)){if(h.children===c.children&&!vt.current){n=Sn(e,n,o);break e}}else for(h=n.child,h!==null&&(h.return=n);h!==null;){var I=h.dependencies;if(I!==null){w=h.child;for(var b=I.firstContext;b!==null;){if(b.context===s){if(h.tag===1){b=wn(-1,o&-o),b.tag=2;var q=h.updateQueue;if(q!==null){q=q.shared;var ie=q.pending;ie===null?b.next=b:(b.next=ie.next,ie.next=b),q.pending=b}}h.lanes|=o,b=h.alternate,b!==null&&(b.lanes|=o),ka(h.return,o,n),I.lanes|=o;break}b=b.next}}else if(h.tag===10)w=h.type===n.type?null:h.child;else if(h.tag===18){if(w=h.return,w===null)throw Error(i(341));w.lanes|=o,I=w.alternate,I!==null&&(I.lanes|=o),ka(w,o,n),w=h.sibling}else w=h.child;if(w!==null)w.return=h;else for(w=h;w!==null;){if(w===n){w=null;break}if(h=w.sibling,h!==null){h.return=w.return,w=h;break}w=w.return}h=w}gt(e,n,c.children,o),n=n.child}return n;case 9:return c=n.type,s=n.pendingProps.children,eo(n,o),c=Ot(c),s=s(c),n.flags|=1,gt(e,n,s,o),n.child;case 14:return s=n.type,c=Xt(s,n.pendingProps),c=Xt(s.type,c),Jd(e,n,s,c,o);case 15:return ef(e,n,n.type,n.pendingProps,o);case 17:return s=n.type,c=n.pendingProps,c=n.elementType===s?c:Xt(s,c),_s(e,n),n.tag=1,xt(s)?(e=!0,os(n)):e=!1,eo(n,o),Wd(n,s,c),Oa(n,s,c,o),Va(null,n,s,!0,e,o);case 19:return uf(e,n,o);case 22:return tf(e,n,o)}throw Error(i(156,n.tag))};function bf(e,n){return zi(e,n)}function T0(e,n,o,s){this.tag=e,this.key=o,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=n,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=s,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Bt(e,n,o,s){return new T0(e,n,o,s)}function uu(e){return e=e.prototype,!(!e||!e.isReactComponent)}function b0(e){if(typeof e=="function")return uu(e)?1:0;if(e!=null){if(e=e.$$typeof,e===te)return 11;if(e===W)return 14}return 2}function Xn(e,n){var o=e.alternate;return o===null?(o=Bt(e.tag,n,e.key,e.mode),o.elementType=e.elementType,o.type=e.type,o.stateNode=e.stateNode,o.alternate=e,e.alternate=o):(o.pendingProps=n,o.type=e.type,o.flags=0,o.subtreeFlags=0,o.deletions=null),o.flags=e.flags&14680064,o.childLanes=e.childLanes,o.lanes=e.lanes,o.child=e.child,o.memoizedProps=e.memoizedProps,o.memoizedState=e.memoizedState,o.updateQueue=e.updateQueue,n=e.dependencies,o.dependencies=n===null?null:{lanes:n.lanes,firstContext:n.firstContext},o.sibling=e.sibling,o.index=e.index,o.ref=e.ref,o}function bs(e,n,o,s,c,h){var w=2;if(s=e,typeof e=="function")uu(e)&&(w=1);else if(typeof e=="string")w=5;else e:switch(e){case B:return xr(o.children,c,h,n);case H:w=8,c|=8;break;case X:return e=Bt(12,o,n,c|2),e.elementType=X,e.lanes=h,e;case J:return e=Bt(13,o,n,c),e.elementType=J,e.lanes=h,e;case M:return e=Bt(19,o,n,c),e.elementType=M,e.lanes=h,e;case U:return zs(o,c,h,n);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case ee:w=10;break e;case Z:w=9;break e;case te:w=11;break e;case W:w=14;break e;case V:w=16,s=null;break e}throw Error(i(130,e==null?e:typeof e,""))}return n=Bt(w,o,n,c),n.elementType=e,n.type=s,n.lanes=h,n}function xr(e,n,o,s){return e=Bt(7,e,s,n),e.lanes=o,e}function zs(e,n,o,s){return e=Bt(22,e,s,n),e.elementType=U,e.lanes=o,e.stateNode={isHidden:!1},e}function cu(e,n,o){return e=Bt(6,e,null,n),e.lanes=o,e}function du(e,n,o){return n=Bt(4,e.children!==null?e.children:[],e.key,n),n.lanes=o,n.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},n}function z0(e,n,o,s,c){this.tag=n,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=sr(0),this.expirationTimes=sr(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=sr(0),this.identifierPrefix=s,this.onRecoverableError=c,this.mutableSourceEagerHydrationData=null}function fu(e,n,o,s,c,h,w,I,b){return e=new z0(e,n,o,I,b),n===1?(n=1,h===!0&&(n|=8)):n=0,h=Bt(3,null,null,n),e.current=h,h.stateNode=e,h.memoizedState={element:s,isDehydrated:o,cache:null,transitions:null,pendingSuspenseBoundaries:null},Na(h),e}function L0(e,n,o){var s=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(t)}catch(r){console.error(r)}}return t(),vu.exports=X0(),vu.exports}var Xf;function G0(){if(Xf)return Hs;Xf=1;var t=fp();return Hs.createRoot=t.createRoot,Hs.hydrateRoot=t.hydrateRoot,Hs}var Q0=G0();function K0(t,r="Request failed"){const i=(t||"").trim();if(!i)return r;try{const a=JSON.parse(i).detail;if(typeof a=="string"&&a.trim())return a;if(Array.isArray(a)){const u=a.map(d=>typeof d=="string"?d:d&&typeof d=="object"&&"msg"in d?String(d.msg):"").filter(Boolean);if(u.length)return u.join("; ")}}catch{}return i}async function yt(t,r){const i=await fetch(t,{...r,headers:{"Content-Type":"application/json",...(r==null?void 0:r.headers)||{}}});if(!i.ok){const l=await i.text();throw new Error(K0(l,i.statusText||"Request failed"))}return i.json()}const q0=["github_token","bitbucket_token","ai_api_key","ai_model","ai_base_url"],ft={health:()=>yt("/api/health"),settings:()=>yt("/api/settings"),saveSettings:t=>{const r={...t};for(const i of q0)r[i]===""&&delete r[i];return yt("/api/settings",{method:"PUT",body:JSON.stringify(r)})},repos:()=>yt("/api/repos"),browse:t=>yt(`/api/fs${t?`?path=${encodeURIComponent(t)}`:""}`),gitRefs:(t,r=50)=>yt(`/api/git/refs?repo_path=${encodeURIComponent(t)}&limit=${r}`),index:(t,r=!0)=>yt("/api/index",{method:"POST",body:JSON.stringify({repo_path:t,incremental:r})}),indexStatus:t=>yt(`/api/index?repo_path=${encodeURIComponent(t)}`),architecture:t=>yt(`/api/architecture?repo_path=${encodeURIComponent(t)}`),review:(t,r,i,l=!0)=>yt("/api/review",{method:"POST",body:JSON.stringify({repo_path:t,base:r,head:i||null,reindex:l,incremental:!0,three_dot:!0})}),init:(t,r=!1)=>yt("/api/init",{method:"POST",body:JSON.stringify({repo_path:t,overwrite:r})}),postComment:(t,r,i,l)=>yt("/api/prs/comment",{method:"POST",body:JSON.stringify({provider:t,repo:r,number:i,markdown:l})}),graph:(t,r="full")=>yt(`/api/graph?repo_path=${encodeURIComponent(t)}&scope=${r}`),prs:(t,r,i="open")=>yt("/api/prs",{method:"POST",body:JSON.stringify({provider:t,repo:r,state:i})}),residual:t=>yt("/api/ai/residual",{method:"POST",body:JSON.stringify({review:t})})};function Z0(t){return t.replaceAll("_"," ")}function J0(t){return t.replaceAll("_"," ")}function Qu(t){return t.split(".").pop()||t}function ey(t){if(!t)return"";const r=new Date(t);return Number.isNaN(r.getTime())?t:r.toLocaleString()}function Bs(t){return t.replace(/([/\\._:@-])/g,"$1​")}function Pr({className:t,children:r}){return g.jsx("svg",{className:t,width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:r})}function ty({className:t}){return g.jsxs(Pr,{className:t,children:[g.jsx("path",{d:"M3 3.5h6.5L13 7v5.5H3z"}),g.jsx("path",{d:"M9.5 3.5V7H13"}),g.jsx("path",{d:"M5.5 9.5h5M5.5 11.5h3.5"})]})}function ny({className:t}){return g.jsxs(Pr,{className:t,children:[g.jsx("rect",{x:"2.5",y:"2.5",width:"4.5",height:"4.5",rx:"0.8"}),g.jsx("rect",{x:"9",y:"2.5",width:"4.5",height:"4.5",rx:"0.8"}),g.jsx("rect",{x:"2.5",y:"9",width:"4.5",height:"4.5",rx:"0.8"}),g.jsx("rect",{x:"9",y:"9",width:"4.5",height:"4.5",rx:"0.8"})]})}function ry({className:t}){return g.jsxs(Pr,{className:t,children:[g.jsx("circle",{cx:"4",cy:"8",r:"1.6"}),g.jsx("circle",{cx:"12",cy:"4",r:"1.6"}),g.jsx("circle",{cx:"12",cy:"12",r:"1.6"}),g.jsx("path",{d:"M5.5 7.2 10.4 4.8M5.5 8.8 10.4 11.2"})]})}function oy({className:t}){return g.jsxs(Pr,{className:t,children:[g.jsx("circle",{cx:"4.5",cy:"4",r:"1.4"}),g.jsx("circle",{cx:"4.5",cy:"12",r:"1.4"}),g.jsx("circle",{cx:"11.5",cy:"12",r:"1.4"}),g.jsx("path",{d:"M4.5 5.5v5M4.5 8h4.2a3 3 0 0 1 3 3"})]})}function iy({className:t}){return g.jsxs(Pr,{className:t,children:[g.jsx("circle",{cx:"8",cy:"8",r:"2.1"}),g.jsx("path",{d:"M8 2.5v1.6M8 11.9v1.6M2.5 8h1.6M11.9 8h1.6M4.1 4.1l1.1 1.1M10.8 10.8l1.1 1.1M11.9 4.1l-1.1 1.1M5.2 10.8l-1.1 1.1"})]})}function hp({className:t}){return g.jsx(Pr,{className:t,children:g.jsx("path",{d:"M2.5 4.5h4L8 6h5.5v6.5h-11z"})})}function sy({className:t}){return g.jsx(Pr,{className:t,children:g.jsx("path",{d:"M4 6.5 8 10.5 12 6.5"})})}const ly="modulepreload",ay=function(t,r){return new URL(t,r).href},Gf={},uy=function(r,i,l){let a=Promise.resolve();if(i&&i.length>0){let d=function(m){return Promise.all(m.map(x=>Promise.resolve(x).then(v=>({status:"fulfilled",value:v}),v=>({status:"rejected",reason:v}))))};const f=document.getElementsByTagName("link"),p=document.querySelector("meta[property=csp-nonce]"),y=(p==null?void 0:p.nonce)||(p==null?void 0:p.getAttribute("nonce"));a=d(i.map(m=>{if(m=ay(m,l),m in Gf)return;Gf[m]=!0;const x=m.endsWith(".css"),v=x?'[rel="stylesheet"]':"";if(!!l)for(let C=f.length-1;C>=0;C--){const E=f[C];if(E.href===m&&(!x||E.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${m}"]${v}`))return;const _=document.createElement("link");if(_.rel=x?"stylesheet":ly,x||(_.as="script"),_.crossOrigin="",_.href=m,y&&_.setAttribute("nonce",y),document.head.appendChild(_),x)return new Promise((C,E)=>{_.addEventListener("load",C),_.addEventListener("error",()=>E(new Error(`Unable to preload CSS for ${m}`)))})}))}function u(d){const f=new Event("vite:preloadError",{cancelable:!0});if(f.payload=d,window.dispatchEvent(f),!f.defaultPrevented)throw d}return a.then(d=>{for(const f of d||[])f.status==="rejected"&&u(f.reason);return r().catch(u)})};function Qe(t){if(typeof t=="string"||typeof t=="number")return""+t;let r="";if(Array.isArray(t))for(let i=0,l;i{}};function pl(){for(var t=0,r=arguments.length,i={},l;t=0&&(l=i.slice(a+1),i=i.slice(0,a)),i&&!r.hasOwnProperty(i))throw new Error("unknown type: "+i);return{type:i,name:l}})}Zs.prototype=pl.prototype={constructor:Zs,on:function(t,r){var i=this._,l=dy(t+"",i),a,u=-1,d=l.length;if(arguments.length<2){for(;++u0)for(var i=new Array(a),l=0,a,u;l=0&&(r=t.slice(0,i))!=="xmlns"&&(t=t.slice(i+1)),Kf.hasOwnProperty(r)?{space:Kf[r],local:t}:t}function hy(t){return function(){var r=this.ownerDocument,i=this.namespaceURI;return i===Lu&&r.documentElement.namespaceURI===Lu?r.createElement(t):r.createElementNS(i,t)}}function py(t){return function(){return this.ownerDocument.createElementNS(t.space,t.local)}}function pp(t){var r=gl(t);return(r.local?py:hy)(r)}function gy(){}function Ku(t){return t==null?gy:function(){return this.querySelector(t)}}function my(t){typeof t!="function"&&(t=Ku(t));for(var r=this._groups,i=r.length,l=new Array(i),a=0;a=k&&(k=R+1);!(z=E[k])&&++k<_;);j._next=z||null}}return d=new zt(d,l),d._enter=f,d._exit=p,d}function Ay(t){return typeof t=="object"&&"length"in t?t:Array.from(t)}function Dy(){return new zt(this._exit||this._groups.map(vp),this._parents)}function $y(t,r,i){var l=this.enter(),a=this,u=this.exit();return typeof t=="function"?(l=t(l),l&&(l=l.selection())):l=l.append(t+""),r!=null&&(a=r(a),a&&(a=a.selection())),i==null?u.remove():i(u),l&&a?l.merge(a).order():a}function Oy(t){for(var r=t.selection?t.selection():t,i=this._groups,l=r._groups,a=i.length,u=l.length,d=Math.min(a,u),f=new Array(a),p=0;p=0;)(d=l[a])&&(u&&d.compareDocumentPosition(u)^4&&u.parentNode.insertBefore(d,u),u=d);return this}function Hy(t){t||(t=By);function r(x,v){return x&&v?t(x.__data__,v.__data__):!x-!v}for(var i=this._groups,l=i.length,a=new Array(l),u=0;ur?1:t>=r?0:NaN}function Vy(){var t=arguments[0];return arguments[0]=this,t.apply(null,arguments),this}function Uy(){return Array.from(this)}function Wy(){for(var t=this._groups,r=0,i=t.length;r1?this.each((r==null?nv:typeof r=="function"?ov:rv)(t,r,i??"")):fo(this.node(),t)}function fo(t,r){return t.style.getPropertyValue(r)||xp(t).getComputedStyle(t,null).getPropertyValue(r)}function sv(t){return function(){delete this[t]}}function lv(t,r){return function(){this[t]=r}}function av(t,r){return function(){var i=r.apply(this,arguments);i==null?delete this[t]:this[t]=i}}function uv(t,r){return arguments.length>1?this.each((r==null?sv:typeof r=="function"?av:lv)(t,r)):this.node()[t]}function wp(t){return t.trim().split(/^|\s+/)}function qu(t){return t.classList||new Sp(t)}function Sp(t){this._node=t,this._names=wp(t.getAttribute("class")||"")}Sp.prototype={add:function(t){var r=this._names.indexOf(t);r<0&&(this._names.push(t),this._node.setAttribute("class",this._names.join(" ")))},remove:function(t){var r=this._names.indexOf(t);r>=0&&(this._names.splice(r,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(t){return this._names.indexOf(t)>=0}};function _p(t,r){for(var i=qu(t),l=-1,a=r.length;++l=0&&(i=r.slice(l+1),r=r.slice(0,l)),{type:r,name:i}})}function Dv(t){return function(){var r=this.__on;if(r){for(var i=0,l=-1,a=r.length,u;i()=>t;function Au(t,{sourceEvent:r,subject:i,target:l,identifier:a,active:u,x:d,y:f,dx:p,dy:y,dispatch:m}){Object.defineProperties(this,{type:{value:t,enumerable:!0,configurable:!0},sourceEvent:{value:r,enumerable:!0,configurable:!0},subject:{value:i,enumerable:!0,configurable:!0},target:{value:l,enumerable:!0,configurable:!0},identifier:{value:a,enumerable:!0,configurable:!0},active:{value:u,enumerable:!0,configurable:!0},x:{value:d,enumerable:!0,configurable:!0},y:{value:f,enumerable:!0,configurable:!0},dx:{value:p,enumerable:!0,configurable:!0},dy:{value:y,enumerable:!0,configurable:!0},_:{value:m}})}Au.prototype.on=function(){var t=this._.on.apply(this._,arguments);return t===this._?this:t};function Xv(t){return!t.ctrlKey&&!t.button}function Gv(){return this.parentNode}function Qv(t,r){return r??{x:t.x,y:t.y}}function Kv(){return navigator.maxTouchPoints||"ontouchstart"in this}function Mp(){var t=Xv,r=Gv,i=Qv,l=Kv,a={},u=pl("start","drag","end"),d=0,f,p,y,m,x=0;function v(j){j.on("mousedown.drag",S).filter(l).on("touchstart.drag",E).on("touchmove.drag",N,Yv).on("touchend.drag touchcancel.drag",R).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function S(j,z){if(!(m||!t.call(this,j,z))){var D=k(this,r.call(this,j,z),j,z,"mouse");D&&(bt(j.view).on("mousemove.drag",_,ci).on("mouseup.drag",C,ci),Cp(j.view),Su(j),y=!1,f=j.clientX,p=j.clientY,D("start",j))}}function _(j){if(uo(j),!y){var z=j.clientX-f,D=j.clientY-p;y=z*z+D*D>x}a.mouse("drag",j)}function C(j){bt(j.view).on("mousemove.drag mouseup.drag",null),jp(j.view,y),uo(j),a.mouse("end",j)}function E(j,z){if(t.call(this,j,z)){var D=j.changedTouches,B=r.call(this,j,z),H=D.length,X,ee;for(X=0;X>8&15|r>>4&240,r>>4&15|r&240,(r&15)<<4|r&15,1):i===8?Us(r>>24&255,r>>16&255,r>>8&255,(r&255)/255):i===4?Us(r>>12&15|r>>8&240,r>>8&15|r>>4&240,r>>4&15|r&240,((r&15)<<4|r&15)/255):null):(r=Zv.exec(t))?new Et(r[1],r[2],r[3],1):(r=Jv.exec(t))?new Et(r[1]*255/100,r[2]*255/100,r[3]*255/100,1):(r=ex.exec(t))?Us(r[1],r[2],r[3],r[4]):(r=tx.exec(t))?Us(r[1]*255/100,r[2]*255/100,r[3]*255/100,r[4]):(r=nx.exec(t))?rh(r[1],r[2]/100,r[3]/100,1):(r=rx.exec(t))?rh(r[1],r[2]/100,r[3]/100,r[4]):qf.hasOwnProperty(t)?eh(qf[t]):t==="transparent"?new Et(NaN,NaN,NaN,0):null}function eh(t){return new Et(t>>16&255,t>>8&255,t&255,1)}function Us(t,r,i,l){return l<=0&&(t=r=i=NaN),new Et(t,r,i,l)}function sx(t){return t instanceof _i||(t=Er(t)),t?(t=t.rgb(),new Et(t.r,t.g,t.b,t.opacity)):new Et}function Du(t,r,i,l){return arguments.length===1?sx(t):new Et(t,r,i,l??1)}function Et(t,r,i,l){this.r=+t,this.g=+r,this.b=+i,this.opacity=+l}Zu(Et,Du,Pp(_i,{brighter(t){return t=t==null?ol:Math.pow(ol,t),new Et(this.r*t,this.g*t,this.b*t,this.opacity)},darker(t){return t=t==null?di:Math.pow(di,t),new Et(this.r*t,this.g*t,this.b*t,this.opacity)},rgb(){return this},clamp(){return new Et(_r(this.r),_r(this.g),_r(this.b),il(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:th,formatHex:th,formatHex8:lx,formatRgb:nh,toString:nh}));function th(){return`#${Sr(this.r)}${Sr(this.g)}${Sr(this.b)}`}function lx(){return`#${Sr(this.r)}${Sr(this.g)}${Sr(this.b)}${Sr((isNaN(this.opacity)?1:this.opacity)*255)}`}function nh(){const t=il(this.opacity);return`${t===1?"rgb(":"rgba("}${_r(this.r)}, ${_r(this.g)}, ${_r(this.b)}${t===1?")":`, ${t})`}`}function il(t){return isNaN(t)?1:Math.max(0,Math.min(1,t))}function _r(t){return Math.max(0,Math.min(255,Math.round(t)||0))}function Sr(t){return t=_r(t),(t<16?"0":"")+t.toString(16)}function rh(t,r,i,l){return l<=0?t=r=i=NaN:i<=0||i>=1?t=r=NaN:r<=0&&(t=NaN),new Zt(t,r,i,l)}function Ip(t){if(t instanceof Zt)return new Zt(t.h,t.s,t.l,t.opacity);if(t instanceof _i||(t=Er(t)),!t)return new Zt;if(t instanceof Zt)return t;t=t.rgb();var r=t.r/255,i=t.g/255,l=t.b/255,a=Math.min(r,i,l),u=Math.max(r,i,l),d=NaN,f=u-a,p=(u+a)/2;return f?(r===u?d=(i-l)/f+(i0&&p<1?0:d,new Zt(d,f,p,t.opacity)}function ax(t,r,i,l){return arguments.length===1?Ip(t):new Zt(t,r,i,l??1)}function Zt(t,r,i,l){this.h=+t,this.s=+r,this.l=+i,this.opacity=+l}Zu(Zt,ax,Pp(_i,{brighter(t){return t=t==null?ol:Math.pow(ol,t),new Zt(this.h,this.s,this.l*t,this.opacity)},darker(t){return t=t==null?di:Math.pow(di,t),new Zt(this.h,this.s,this.l*t,this.opacity)},rgb(){var t=this.h%360+(this.h<0)*360,r=isNaN(t)||isNaN(this.s)?0:this.s,i=this.l,l=i+(i<.5?i:1-i)*r,a=2*i-l;return new Et(_u(t>=240?t-240:t+120,a,l),_u(t,a,l),_u(t<120?t+240:t-120,a,l),this.opacity)},clamp(){return new Zt(oh(this.h),Ws(this.s),Ws(this.l),il(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const t=il(this.opacity);return`${t===1?"hsl(":"hsla("}${oh(this.h)}, ${Ws(this.s)*100}%, ${Ws(this.l)*100}%${t===1?")":`, ${t})`}`}}));function oh(t){return t=(t||0)%360,t<0?t+360:t}function Ws(t){return Math.max(0,Math.min(1,t||0))}function _u(t,r,i){return(t<60?r+(i-r)*t/60:t<180?i:t<240?r+(i-r)*(240-t)/60:r)*255}const Ju=t=>()=>t;function ux(t,r){return function(i){return t+i*r}}function cx(t,r,i){return t=Math.pow(t,i),r=Math.pow(r,i)-t,i=1/i,function(l){return Math.pow(t+l*r,i)}}function dx(t){return(t=+t)==1?Rp:function(r,i){return i-r?cx(r,i,t):Ju(isNaN(r)?i:r)}}function Rp(t,r){var i=r-t;return i?ux(t,i):Ju(isNaN(t)?r:t)}const sl=(function t(r){var i=dx(r);function l(a,u){var d=i((a=Du(a)).r,(u=Du(u)).r),f=i(a.g,u.g),p=i(a.b,u.b),y=Rp(a.opacity,u.opacity);return function(m){return a.r=d(m),a.g=f(m),a.b=p(m),a.opacity=y(m),a+""}}return l.gamma=t,l})(1);function fx(t,r){r||(r=[]);var i=t?Math.min(r.length,t.length):0,l=r.slice(),a;return function(u){for(a=0;ai&&(u=r.slice(i,u),f[d]?f[d]+=u:f[++d]=u),(l=l[0])===(a=a[0])?f[d]?f[d]+=a:f[++d]=a:(f[++d]=null,p.push({i:d,x:cn(l,a)})),i=ku.lastIndex;return i180?m+=360:m-y>180&&(y+=360),v.push({i:x.push(a(x)+"rotate(",null,l)-2,x:cn(y,m)})):m&&x.push(a(x)+"rotate("+m+l)}function f(y,m,x,v){y!==m?v.push({i:x.push(a(x)+"skewX(",null,l)-2,x:cn(y,m)}):m&&x.push(a(x)+"skewX("+m+l)}function p(y,m,x,v,S,_){if(y!==x||m!==v){var C=S.push(a(S)+"scale(",null,",",null,")");_.push({i:C-4,x:cn(y,x)},{i:C-2,x:cn(m,v)})}else(x!==1||v!==1)&&S.push(a(S)+"scale("+x+","+v+")")}return function(y,m){var x=[],v=[];return y=t(y),m=t(m),u(y.translateX,y.translateY,m.translateX,m.translateY,x,v),d(y.rotate,m.rotate,x,v),f(y.skewX,m.skewX,x,v),p(y.scaleX,y.scaleY,m.scaleX,m.scaleY,x,v),y=m=null,function(S){for(var _=-1,C=v.length,E;++_=0&&t._call.call(void 0,r),t=t._next;--ho}function lh(){Nr=(al=hi.now())+ml,ho=si=0;try{jx()}finally{ho=0,Px(),Nr=0}}function Mx(){var t=hi.now(),r=t-al;r>Lp&&(ml-=r,al=t)}function Px(){for(var t,r=ll,i,l=1/0;r;)r._call?(l>r._time&&(l=r._time),t=r,r=r._next):(i=r._next,r._next=null,r=t?t._next=i:ll=i);li=t,Fu(l)}function Fu(t){if(!ho){si&&(si=clearTimeout(si));var r=t-Nr;r>24?(t<1/0&&(si=setTimeout(lh,t-hi.now()-ml)),oi&&(oi=clearInterval(oi))):(oi||(al=hi.now(),oi=setInterval(Mx,Lp)),ho=1,Ap(lh))}}function ah(t,r,i){var l=new ul;return r=r==null?0:+r,l.restart(a=>{l.stop(),t(a+r)},r,i),l}var Ix=pl("start","end","cancel","interrupt"),Rx=[],$p=0,uh=1,Hu=2,el=3,ch=4,Bu=5,tl=6;function yl(t,r,i,l,a,u){var d=t.__transition;if(!d)t.__transition={};else if(i in d)return;Tx(t,i,{name:r,index:l,group:a,on:Ix,tween:Rx,time:u.time,delay:u.delay,duration:u.duration,ease:u.ease,timer:null,state:$p})}function tc(t,r){var i=nn(t,r);if(i.state>$p)throw new Error("too late; already scheduled");return i}function fn(t,r){var i=nn(t,r);if(i.state>el)throw new Error("too late; already running");return i}function nn(t,r){var i=t.__transition;if(!i||!(i=i[r]))throw new Error("transition not found");return i}function Tx(t,r,i){var l=t.__transition,a;l[r]=i,i.timer=Dp(u,0,i.time);function u(y){i.state=uh,i.timer.restart(d,i.delay,i.time),i.delay<=y&&d(y-i.delay)}function d(y){var m,x,v,S;if(i.state!==uh)return p();for(m in l)if(S=l[m],S.name===i.name){if(S.state===el)return ah(d);S.state===ch?(S.state=tl,S.timer.stop(),S.on.call("interrupt",t,t.__data__,S.index,S.group),delete l[m]):+mHu&&l.state=0&&(r=r.slice(0,i)),!r||r==="start"})}function aw(t,r,i){var l,a,u=lw(r)?tc:fn;return function(){var d=u(this,t),f=d.on;f!==l&&(a=(l=f).copy()).on(r,i),d.on=a}}function uw(t,r){var i=this._id;return arguments.length<2?nn(this.node(),i).on.on(t):this.each(aw(i,t,r))}function cw(t){return function(){var r=this.parentNode;for(var i in this.__transition)if(+i!==t)return;r&&r.removeChild(this)}}function dw(){return this.on("end.remove",cw(this._id))}function fw(t){var r=this._name,i=this._id;typeof t!="function"&&(t=Ku(t));for(var l=this._groups,a=l.length,u=new Array(a),d=0;d()=>t;function Dw(t,{sourceEvent:r,target:i,transform:l,dispatch:a}){Object.defineProperties(this,{type:{value:t,enumerable:!0,configurable:!0},sourceEvent:{value:r,enumerable:!0,configurable:!0},target:{value:i,enumerable:!0,configurable:!0},transform:{value:l,enumerable:!0,configurable:!0},_:{value:a}})}function En(t,r,i){this.k=t,this.x=r,this.y=i}En.prototype={constructor:En,scale:function(t){return t===1?this:new En(this.k*t,this.x,this.y)},translate:function(t,r){return t===0&r===0?this:new En(this.k,this.x+this.k*t,this.y+this.k*r)},apply:function(t){return[t[0]*this.k+this.x,t[1]*this.k+this.y]},applyX:function(t){return t*this.k+this.x},applyY:function(t){return t*this.k+this.y},invert:function(t){return[(t[0]-this.x)/this.k,(t[1]-this.y)/this.k]},invertX:function(t){return(t-this.x)/this.k},invertY:function(t){return(t-this.y)/this.k},rescaleX:function(t){return t.copy().domain(t.range().map(this.invertX,this).map(t.invert,t))},rescaleY:function(t){return t.copy().domain(t.range().map(this.invertY,this).map(t.invert,t))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}};var vl=new En(1,0,0);Bp.prototype=En.prototype;function Bp(t){for(;!t.__zoom;)if(!(t=t.parentNode))return vl;return t.__zoom}function Eu(t){t.stopImmediatePropagation()}function ii(t){t.preventDefault(),t.stopImmediatePropagation()}function $w(t){return(!t.ctrlKey||t.type==="wheel")&&!t.button}function Ow(){var t=this;return t instanceof SVGElement?(t=t.ownerSVGElement||t,t.hasAttribute("viewBox")?(t=t.viewBox.baseVal,[[t.x,t.y],[t.x+t.width,t.y+t.height]]):[[0,0],[t.width.baseVal.value,t.height.baseVal.value]]):[[0,0],[t.clientWidth,t.clientHeight]]}function dh(){return this.__zoom||vl}function Fw(t){return-t.deltaY*(t.deltaMode===1?.05:t.deltaMode?1:.002)*(t.ctrlKey?10:1)}function Hw(){return navigator.maxTouchPoints||"ontouchstart"in this}function Bw(t,r,i){var l=t.invertX(r[0][0])-i[0][0],a=t.invertX(r[1][0])-i[1][0],u=t.invertY(r[0][1])-i[0][1],d=t.invertY(r[1][1])-i[1][1];return t.translate(a>l?(l+a)/2:Math.min(0,l)||Math.max(0,a),d>u?(u+d)/2:Math.min(0,u)||Math.max(0,d))}function Vp(){var t=$w,r=Ow,i=Bw,l=Fw,a=Hw,u=[0,1/0],d=[[-1/0,-1/0],[1/0,1/0]],f=250,p=Js,y=pl("start","zoom","end"),m,x,v,S=500,_=150,C=0,E=10;function N(M){M.property("__zoom",dh).on("wheel.zoom",H,{passive:!1}).on("mousedown.zoom",X).on("dblclick.zoom",ee).filter(a).on("touchstart.zoom",Z).on("touchmove.zoom",te).on("touchend.zoom touchcancel.zoom",J).style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}N.transform=function(M,W,V,U){var A=M.selection?M.selection():M;A.property("__zoom",dh),M!==A?z(M,W,V,U):A.interrupt().each(function(){D(this,arguments).event(U).start().zoom(null,typeof W=="function"?W.apply(this,arguments):W).end()})},N.scaleBy=function(M,W,V,U){N.scaleTo(M,function(){var A=this.__zoom.k,L=typeof W=="function"?W.apply(this,arguments):W;return A*L},V,U)},N.scaleTo=function(M,W,V,U){N.transform(M,function(){var A=r.apply(this,arguments),L=this.__zoom,F=V==null?j(A):typeof V=="function"?V.apply(this,arguments):V,P=L.invert(F),T=typeof W=="function"?W.apply(this,arguments):W;return i(k(R(L,T),F,P),A,d)},V,U)},N.translateBy=function(M,W,V,U){N.transform(M,function(){return i(this.__zoom.translate(typeof W=="function"?W.apply(this,arguments):W,typeof V=="function"?V.apply(this,arguments):V),r.apply(this,arguments),d)},null,U)},N.translateTo=function(M,W,V,U,A){N.transform(M,function(){var L=r.apply(this,arguments),F=this.__zoom,P=U==null?j(L):typeof U=="function"?U.apply(this,arguments):U;return i(vl.translate(P[0],P[1]).scale(F.k).translate(typeof W=="function"?-W.apply(this,arguments):-W,typeof V=="function"?-V.apply(this,arguments):-V),L,d)},U,A)};function R(M,W){return W=Math.max(u[0],Math.min(u[1],W)),W===M.k?M:new En(W,M.x,M.y)}function k(M,W,V){var U=W[0]-V[0]*M.k,A=W[1]-V[1]*M.k;return U===M.x&&A===M.y?M:new En(M.k,U,A)}function j(M){return[(+M[0][0]+ +M[1][0])/2,(+M[0][1]+ +M[1][1])/2]}function z(M,W,V,U){M.on("start.zoom",function(){D(this,arguments).event(U).start()}).on("interrupt.zoom end.zoom",function(){D(this,arguments).event(U).end()}).tween("zoom",function(){var A=this,L=arguments,F=D(A,L).event(U),P=r.apply(A,L),T=V==null?j(P):typeof V=="function"?V.apply(A,L):V,ne=Math.max(P[1][0]-P[0][0],P[1][1]-P[0][1]),re=A.__zoom,ue=typeof W=="function"?W.apply(A,L):W,ce=p(re.invert(T).concat(ne/re.k),ue.invert(T).concat(ne/ue.k));return function(de){if(de===1)de=ue;else{var Q=ce(de),se=ne/Q[2];de=new En(se,T[0]-Q[0]*se,T[1]-Q[1]*se)}F.zoom(null,de)}})}function D(M,W,V){return!V&&M.__zooming||new B(M,W)}function B(M,W){this.that=M,this.args=W,this.active=0,this.sourceEvent=null,this.extent=r.apply(M,W),this.taps=0}B.prototype={event:function(M){return M&&(this.sourceEvent=M),this},start:function(){return++this.active===1&&(this.that.__zooming=this,this.emit("start")),this},zoom:function(M,W){return this.mouse&&M!=="mouse"&&(this.mouse[1]=W.invert(this.mouse[0])),this.touch0&&M!=="touch"&&(this.touch0[1]=W.invert(this.touch0[0])),this.touch1&&M!=="touch"&&(this.touch1[1]=W.invert(this.touch1[0])),this.that.__zoom=W,this.emit("zoom"),this},end:function(){return--this.active===0&&(delete this.that.__zooming,this.emit("end")),this},emit:function(M){var W=bt(this.that).datum();y.call(M,this.that,new Dw(M,{sourceEvent:this.sourceEvent,target:N,transform:this.that.__zoom,dispatch:y}),W)}};function H(M,...W){if(!t.apply(this,arguments))return;var V=D(this,W).event(M),U=this.__zoom,A=Math.max(u[0],Math.min(u[1],U.k*Math.pow(2,l.apply(this,arguments)))),L=qt(M);if(V.wheel)(V.mouse[0][0]!==L[0]||V.mouse[0][1]!==L[1])&&(V.mouse[1]=U.invert(V.mouse[0]=L)),clearTimeout(V.wheel);else{if(U.k===A)return;V.mouse=[L,U.invert(L)],nl(this),V.start()}ii(M),V.wheel=setTimeout(F,_),V.zoom("mouse",i(k(R(U,A),V.mouse[0],V.mouse[1]),V.extent,d));function F(){V.wheel=null,V.end()}}function X(M,...W){if(v||!t.apply(this,arguments))return;var V=M.currentTarget,U=D(this,W,!0).event(M),A=bt(M.view).on("mousemove.zoom",T,!0).on("mouseup.zoom",ne,!0),L=qt(M,V),F=M.clientX,P=M.clientY;Cp(M.view),Eu(M),U.mouse=[L,this.__zoom.invert(L)],nl(this),U.start();function T(re){if(ii(re),!U.moved){var ue=re.clientX-F,ce=re.clientY-P;U.moved=ue*ue+ce*ce>C}U.event(re).zoom("mouse",i(k(U.that.__zoom,U.mouse[0]=qt(re,V),U.mouse[1]),U.extent,d))}function ne(re){A.on("mousemove.zoom mouseup.zoom",null),jp(re.view,U.moved),ii(re),U.event(re).end()}}function ee(M,...W){if(t.apply(this,arguments)){var V=this.__zoom,U=qt(M.changedTouches?M.changedTouches[0]:M,this),A=V.invert(U),L=V.k*(M.shiftKey?.5:2),F=i(k(R(V,L),U,A),r.apply(this,W),d);ii(M),f>0?bt(this).transition().duration(f).call(z,F,U,M):bt(this).call(N.transform,F,U,M)}}function Z(M,...W){if(t.apply(this,arguments)){var V=M.touches,U=V.length,A=D(this,W,M.changedTouches.length===U).event(M),L,F,P,T;for(Eu(M),F=0;F`Seems like you have not used ${t==="svelte"?"SvelteFlowProvider":"ReactFlowProvider"} as an ancestor. Help: https://${t}flow.dev/error#001`,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.",error003:t=>`Node type "${t}" not found. Using fallback type "default".`,error004:()=>"The parent container needs a width and a height to render the graph.",error005:()=>"Only child nodes can use a parent extent.",error006:()=>"Can't create edge. An edge needs a source and a target.",error007:t=>`The old edge with id=${t} does not exist.`,error009:t=>`Marker type "${t}" doesn't exist.`,error008:(t,{id:r,sourceHandle:i,targetHandle:l})=>`Couldn't create edge for ${t} handle id: "${t==="source"?i:l}", edge id: ${r}.`,error010:()=>"Handle: No node id found. Make sure to only use a Handle inside a custom Node.",error011:t=>`Edge type "${t}" not found. Using fallback type "default".`,error012:t=>`Node with id "${t}" does not exist, it may have been removed. This can happen when a node is deleted before the "onNodeClick" handler is called.`,error013:(t="react")=>`It seems that you haven't loaded the styles. Please import '@xyflow/${t}/dist/style.css' or base.css to make sure everything is working properly.`,error014:()=>"useNodeConnections: No node ID found. Call useNodeConnections inside a custom Node or provide a node ID.",error015:()=>"It seems that you are trying to drag a node that is not initialized. Please use onNodesChange as explained in the docs.",error016:t=>`Edge with id "${t}" does not exist, it may have been removed. This can happen when an edge is deleted before the "onEdgeClick" handler is called.`},pi=[[Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY],[Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY]],Up=["Enter"," ","Escape"],Wp={"node.a11yDescription.default":"Press enter or space to select a node. Press delete to remove it and escape to cancel.","node.a11yDescription.keyboardDisabled":"Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.","node.a11yDescription.ariaLiveMessage":({direction:t,x:r,y:i})=>`Moved selected node ${t}. New position, x: ${r}, y: ${i}`,"edge.a11yDescription.default":"Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.","controls.ariaLabel":"Control Panel","controls.zoomIn.ariaLabel":"Zoom In","controls.zoomOut.ariaLabel":"Zoom Out","controls.fitView.ariaLabel":"Fit View","controls.interactive.ariaLabel":"Toggle Interactivity","minimap.ariaLabel":"Mini Map","handle.ariaLabel":"Handle"};var po;(function(t){t.Strict="strict",t.Loose="loose"})(po||(po={}));var kr;(function(t){t.Free="free",t.Vertical="vertical",t.Horizontal="horizontal"})(kr||(kr={}));var gi;(function(t){t.Partial="partial",t.Full="full"})(gi||(gi={}));const Yp={inProgress:!1,isValid:null,from:null,fromHandle:null,fromPosition:null,fromNode:null,to:null,toHandle:null,toPosition:null,toNode:null,pointer:null};var Zn;(function(t){t.Bezier="default",t.Straight="straight",t.Step="step",t.SmoothStep="smoothstep",t.SimpleBezier="simplebezier"})(Zn||(Zn={}));var mi;(function(t){t.Arrow="arrow",t.ArrowClosed="arrowclosed"})(mi||(mi={}));var _e;(function(t){t.Left="left",t.Top="top",t.Right="right",t.Bottom="bottom"})(_e||(_e={}));const fh={[_e.Left]:_e.Right,[_e.Right]:_e.Left,[_e.Top]:_e.Bottom,[_e.Bottom]:_e.Top};function Xp(t){return t===null?null:t?"valid":"invalid"}const Gp=t=>!!t&&typeof t=="object"&&"id"in t&&"source"in t&&"target"in t,Vw=t=>!!t&&typeof t=="object"&&"id"in t&&"position"in t&&!("source"in t)&&!("target"in t),rc=t=>!!t&&typeof t=="object"&&"id"in t&&"internals"in t&&!("source"in t)&&!("target"in t),ki=(t,r=[0,0])=>{const{width:i,height:l}=rn(t),a=t.origin??r,u=i*a[0],d=l*a[1];return{x:t.position.x-u,y:t.position.y-d}},Uw=(t,r={nodeOrigin:[0,0]})=>{if(t.length===0)return{x:0,y:0,width:0,height:0};let i=!1;const l=t.reduce((a,u)=>{const d=typeof u=="string";let f=!r.nodeLookup&&!d?u:void 0;return r.nodeLookup&&(f=d?r.nodeLookup.get(u):rc(u)?u:r.nodeLookup.get(u.id)),f?(i=!0,xl(a,cl(f,r.nodeOrigin))):a},{x:1/0,y:1/0,x2:-1/0,y2:-1/0});return i?wl(l):{x:0,y:0,width:0,height:0}},Ei=(t,r={})=>{let i={x:1/0,y:1/0,x2:-1/0,y2:-1/0},l=!1;return t.forEach(a=>{(r.filter===void 0||r.filter(a))&&(i=xl(i,cl(a)),l=!0)}),l?wl(i):{x:0,y:0,width:0,height:0}},oc=(t,r,[i,l,a]=[0,0,1],u=!1,d=!1)=>{const f=(r.x-i)/a,p=(r.y-l)/a,y=r.width/a,m=r.height/a,x=[];for(const v of t.values()){const{measured:S,selectable:_=!0,hidden:C=!1}=v;if(d&&!_||C)continue;const E=S.width??v.width??v.initialWidth??0,N=S.height??v.height??v.initialHeight??0,{x:R,y:k}=v.internals.positionAbsolute,j=Zp(f,p,y,m,R,k,E,N),z=E*N,D=u&&j>0;(!v.internals.handleBounds||D||j>=z||v.dragging)&&x.push(v)}return x},Ww=(t,r)=>{const i=new Set;return t.forEach(l=>{i.add(l.id)}),r.filter(l=>i.has(l.source)||i.has(l.target))};function Yw(t,r){const i=new Map,l=r!=null&&r.nodes?new Set(r.nodes.map(a=>a.id)):null;return t.forEach(a=>{let u;if(r!=null&&r.includeHiddenNodes){const{width:d,height:f}=rn(a);u=d>0&&f>0}else u=!!(a.measured.width&&a.measured.height&&!a.hidden);u&&(!l||l.has(a.id))&&i.set(a.id,a)}),i}async function Xw({nodes:t,width:r,height:i,panZoom:l,minZoom:a,maxZoom:u},d){if(t.size===0)return!0;const f=Yw(t,d),p=Ei(f),y=sc(p,r,i,(d==null?void 0:d.minZoom)??a,(d==null?void 0:d.maxZoom)??u,(d==null?void 0:d.padding)??.1);return await l.setViewport(y,{duration:d==null?void 0:d.duration,ease:d==null?void 0:d.ease,interpolate:d==null?void 0:d.interpolate}),!0}function Qp({nodeId:t,nextPosition:r,nodeLookup:i,nodeOrigin:l=[0,0],nodeExtent:a,onError:u}){const d=i.get(t),f=d.parentId?i.get(d.parentId):void 0,{x:p,y}=f?f.internals.positionAbsolute:{x:0,y:0},m=d.origin??l;let x=d.extent||a;if(d.extent==="parent"&&!d.expandParent)if(!f)u==null||u("005",tn.error005());else{const{width:S,height:_}=rn(f);S&&_&&(x=[[p,y],[p+S,y+_]])}else f&&jr(d.extent)&&(x=[[d.extent[0][0]+p,d.extent[0][1]+y],[d.extent[1][0]+p,d.extent[1][1]+y]]);const v=jr(x)?Cr(r,x,d.measured):r;return(d.measured.width===void 0||d.measured.height===void 0)&&(u==null||u("015",tn.error015())),{position:{x:v.x-p+(d.measured.width??0)*m[0],y:v.y-y+(d.measured.height??0)*m[1]},positionAbsolute:v}}async function Gw({nodesToRemove:t=[],edgesToRemove:r=[],nodes:i,edges:l,onBeforeDelete:a}){const u=new Set(t.map(v=>v.id)),d=[];for(const v of i){if(v.deletable===!1)continue;const S=u.has(v.id),_=!S&&v.parentId&&d.find(C=>C.id===v.parentId);(S||_)&&d.push(v)}const f=new Set(r.map(v=>v.id)),p=l.filter(v=>v.deletable!==!1),m=Ww(d,p);for(const v of p)f.has(v.id)&&!m.find(_=>_.id===v.id)&&m.push(v);if(!a)return{edges:m,nodes:d};const x=await a({nodes:d,edges:m});return typeof x=="boolean"?x?{edges:m,nodes:d}:{edges:[],nodes:[]}:x}const go=(t,r=0,i=1)=>Math.min(Math.max(t,r),i),Cr=(t={x:0,y:0},r,i)=>({x:go(t.x,r[0][0],r[1][0]-((i==null?void 0:i.width)??0)),y:go(t.y,r[0][1],r[1][1]-((i==null?void 0:i.height)??0))});function Kp(t,r,i){const{width:l,height:a}=rn(i),{x:u,y:d}=i.internals.positionAbsolute;return Cr(t,[[u,d],[u+l,d+a]],r)}const hh=(t,r,i)=>ti?-go(Math.abs(t-i),1,r)/r:0,ic=(t,r,i=15,l=40)=>{const a=hh(t.x,l,r.width-l)*i,u=hh(t.y,l,r.height-l)*i;return[a,u]},xl=(t,r)=>({x:Math.min(t.x,r.x),y:Math.min(t.y,r.y),x2:Math.max(t.x2,r.x2),y2:Math.max(t.y2,r.y2)}),Vu=({x:t,y:r,width:i,height:l})=>({x:t,y:r,x2:t+i,y2:r+l}),wl=({x:t,y:r,x2:i,y2:l})=>({x:t,y:r,width:i-t,height:l-r}),yi=(t,r=[0,0])=>{var a,u;const{x:i,y:l}=rc(t)?t.internals.positionAbsolute:ki(t,r);return{x:i,y:l,width:((a=t.measured)==null?void 0:a.width)??t.width??t.initialWidth??0,height:((u=t.measured)==null?void 0:u.height)??t.height??t.initialHeight??0}},cl=(t,r=[0,0])=>{var a,u;const{x:i,y:l}=rc(t)?t.internals.positionAbsolute:ki(t,r);return{x:i,y:l,x2:i+(((a=t.measured)==null?void 0:a.width)??t.width??t.initialWidth??0),y2:l+(((u=t.measured)==null?void 0:u.height)??t.height??t.initialHeight??0)}},qp=(t,r)=>wl(xl(Vu(t),Vu(r))),Zp=(t,r,i,l,a,u,d,f)=>{const p=Math.max(0,Math.min(t+i,a+d)-Math.max(t,a)),y=Math.max(0,Math.min(r+l,u+f)-Math.max(r,u));return Math.ceil(p*y)},dl=(t,r)=>Zp(t.x,t.y,t.width,t.height,r.x,r.y,r.width,r.height),ph=t=>Jt(t.width)&&Jt(t.height)&&Jt(t.x)&&Jt(t.y),Jt=t=>!isNaN(t)&&isFinite(t),Jp=(t,r)=>(i,l)=>{},Ni=(t,r=[1,1])=>({x:r[0]*Math.round(t.x/r[0]),y:r[1]*Math.round(t.y/r[1])}),Ci=({x:t,y:r},[i,l,a],u=!1,d=[1,1])=>{const f={x:(t-i)/a,y:(r-l)/a};return u?Ni(f,d):f},mo=({x:t,y:r},[i,l,a])=>({x:t*a+i,y:r*a+l});function lo(t,r){if(typeof t=="number")return Math.floor((r-r/(1+t))*.5);if(typeof t=="string"&&t.endsWith("px")){const i=parseFloat(t);if(!Number.isNaN(i))return Math.floor(i)}if(typeof t=="string"&&t.endsWith("%")){const i=parseFloat(t);if(!Number.isNaN(i))return Math.floor(r*i*.01)}return console.error(`The padding value "${t}" is invalid. Please provide a number or a string with a valid unit (px or %).`),0}function Qw(t,r,i){if(typeof t=="string"||typeof t=="number"){const l=lo(t,i),a=lo(t,r);return{top:l,right:a,bottom:l,left:a,x:a*2,y:l*2}}if(typeof t=="object"){const l=lo(t.top??t.y??0,i),a=lo(t.bottom??t.y??0,i),u=lo(t.left??t.x??0,r),d=lo(t.right??t.x??0,r);return{top:l,right:d,bottom:a,left:u,x:u+d,y:l+a}}return{top:0,right:0,bottom:0,left:0,x:0,y:0}}function Kw(t,r,i,l,a,u){const{x:d,y:f}=mo(t,[r,i,l]),{x:p,y}=mo({x:t.x+t.width,y:t.y+t.height},[r,i,l]),m=a-p,x=u-y;return{left:Math.floor(d),top:Math.floor(f),right:Math.floor(m),bottom:Math.floor(x)}}const sc=(t,r,i,l,a,u)=>{const d=Qw(u,r,i),f=(r-d.x)/t.width,p=(i-d.y)/t.height,y=Math.min(f,p),m=go(y,l,a),x=t.x+t.width/2,v=t.y+t.height/2,S=r/2-x*m,_=i/2-v*m,C=Kw(t,S,_,m,r,i),E={left:Math.min(C.left-d.left,0),top:Math.min(C.top-d.top,0),right:Math.min(C.right-d.right,0),bottom:Math.min(C.bottom-d.bottom,0)};return{x:S-E.left+E.right,y:_-E.top+E.bottom,zoom:m}},vi=()=>{var t;return typeof navigator<"u"&&((t=navigator==null?void 0:navigator.userAgent)==null?void 0:t.indexOf("Mac"))>=0};function jr(t){return t!=null&&t!=="parent"}function rn(t){var r,i;return{width:((r=t.measured)==null?void 0:r.width)??t.width??t.initialWidth??0,height:((i=t.measured)==null?void 0:i.height)??t.height??t.initialHeight??0}}function eg(t){var r,i;return(((r=t.measured)==null?void 0:r.width)??t.width??t.initialWidth)!==void 0&&(((i=t.measured)==null?void 0:i.height)??t.height??t.initialHeight)!==void 0}function tg(t,r={width:0,height:0},i,l,a){const u={...t},d=l.get(i);if(d){const f=d.origin||a;u.x+=d.internals.positionAbsolute.x-(r.width??0)*f[0],u.y+=d.internals.positionAbsolute.y-(r.height??0)*f[1]}return u}function gh(t,r){if(t.size!==r.size)return!1;for(const i of t)if(!r.has(i))return!1;return!0}function qw(){let t,r;return{promise:new Promise((l,a)=>{t=l,r=a}),resolve:t,reject:r}}function Zw(t){return{...Wp,...t||{}}}function ui(t,{snapGrid:r=[0,0],snapToGrid:i=!1,transform:l,containerBounds:a}){const{x:u,y:d}=en(t),f=Ci({x:u-((a==null?void 0:a.left)??0),y:d-((a==null?void 0:a.top)??0)},l),{x:p,y}=i?Ni(f,r):f;return{xSnapped:p,ySnapped:y,...f}}const lc=t=>({width:t.offsetWidth,height:t.offsetHeight}),ng=t=>{var r;return((r=t==null?void 0:t.getRootNode)==null?void 0:r.call(t))||(window==null?void 0:window.document)},Jw=["INPUT","SELECT","TEXTAREA"];function rg(t){var l,a;const r=((a=(l=t.composedPath)==null?void 0:l.call(t))==null?void 0:a[0])||t.target;return(r==null?void 0:r.nodeType)!==1?!1:Jw.includes(r.nodeName)||r.hasAttribute("contenteditable")||!!r.closest(".nokey")}const og=t=>"clientX"in t,en=(t,r)=>{var u,d;const i=og(t),l=i?t.clientX:(u=t.touches)==null?void 0:u[0].clientX,a=i?t.clientY:(d=t.touches)==null?void 0:d[0].clientY;return{x:l-((r==null?void 0:r.left)??0),y:a-((r==null?void 0:r.top)??0)}},mh=(t,r,i,l,a)=>{const u=r.querySelectorAll(`.${t}`);return!u||!u.length?null:Array.from(u).map(d=>{const f=d.getBoundingClientRect();return{id:d.getAttribute("data-handleid"),type:t,nodeId:a,position:d.getAttribute("data-handlepos"),x:(f.left-i.left)/l,y:(f.top-i.top)/l,...lc(d)}})};function ig({sourceX:t,sourceY:r,targetX:i,targetY:l,sourceControlX:a,sourceControlY:u,targetControlX:d,targetControlY:f}){const p=t*.125+a*.375+d*.375+i*.125,y=r*.125+u*.375+f*.375+l*.125,m=Math.abs(p-t),x=Math.abs(y-r);return[p,y,m,x]}function Gs(t,r){return t>=0?.5*t:r*25*Math.sqrt(-t)}function yh({pos:t,x1:r,y1:i,x2:l,y2:a,c:u}){switch(t){case _e.Left:return[r-Gs(r-l,u),i];case _e.Right:return[r+Gs(l-r,u),i];case _e.Top:return[r,i-Gs(i-a,u)];case _e.Bottom:return[r,i+Gs(a-i,u)]}}function sg({sourceX:t,sourceY:r,sourcePosition:i=_e.Bottom,targetX:l,targetY:a,targetPosition:u=_e.Top,curvature:d=.25}){const[f,p]=yh({pos:i,x1:t,y1:r,x2:l,y2:a,c:d}),[y,m]=yh({pos:u,x1:l,y1:a,x2:t,y2:r,c:d}),[x,v,S,_]=ig({sourceX:t,sourceY:r,targetX:l,targetY:a,sourceControlX:f,sourceControlY:p,targetControlX:y,targetControlY:m});return[`M${t},${r} C${f},${p} ${y},${m} ${l},${a}`,x,v,S,_]}function lg({sourceX:t,sourceY:r,targetX:i,targetY:l}){const a=Math.abs(i-t)/2,u=i0}const n1=({source:t,sourceHandle:r,target:i,targetHandle:l})=>`xy-edge__${t}${r||""}-${i}${l||""}`,r1=(t,r)=>r.some(i=>i.source===t.source&&i.target===t.target&&(i.sourceHandle===t.sourceHandle||!i.sourceHandle&&!t.sourceHandle)&&(i.targetHandle===t.targetHandle||!i.targetHandle&&!t.targetHandle)),o1=(t,r,i={})=>{var u;if(!t.source||!t.target)return(u=i.onError)==null||u.call(i,"006",tn.error006()),r;const l=i.getEdgeId||n1;let a;return Gp(t)?a={...t}:a={...t,id:l(t)},r1(a,r)?r:(a.sourceHandle===null&&delete a.sourceHandle,a.targetHandle===null&&delete a.targetHandle,r.concat(a))};function ag({sourceX:t,sourceY:r,targetX:i,targetY:l}){const[a,u,d,f]=lg({sourceX:t,sourceY:r,targetX:i,targetY:l});return[`M ${t},${r}L ${i},${l}`,a,u,d,f]}const vh={[_e.Left]:{x:-1,y:0},[_e.Right]:{x:1,y:0},[_e.Top]:{x:0,y:-1},[_e.Bottom]:{x:0,y:1}},i1=({source:t,sourcePosition:r=_e.Bottom,target:i})=>r===_e.Left||r===_e.Right?t.xMath.sqrt(Math.pow(r.x-t.x,2)+Math.pow(r.y-t.y,2));function s1({source:t,sourcePosition:r=_e.Bottom,target:i,targetPosition:l=_e.Top,center:a,offset:u,stepPosition:d}){const f=vh[r],p=vh[l],y={x:t.x+f.x*u,y:t.y+f.y*u},m={x:i.x+p.x*u,y:i.y+p.y*u},x=i1({source:y,sourcePosition:r,target:m}),v=x.x!==0?"x":"y",S=x[v];let _=[],C,E;const N={x:0,y:0},R={x:0,y:0},[,,k,j]=lg({sourceX:t.x,sourceY:t.y,targetX:i.x,targetY:i.y});if(f[v]*p[v]===-1){v==="x"?(C=a.x??y.x+(m.x-y.x)*d,E=a.y??(y.y+m.y)/2):(C=a.x??(y.x+m.x)/2,E=a.y??y.y+(m.y-y.y)*d);const H=[{x:C,y:y.y},{x:C,y:m.y}],X=[{x:y.x,y:E},{x:m.x,y:E}];f[v]===S?_=v==="x"?H:X:_=v==="x"?X:H}else{const H=[{x:y.x,y:m.y}],X=[{x:m.x,y:y.y}];if(v==="x"?_=f.x===S?X:H:_=f.y===S?H:X,r===l){const M=Math.abs(t[v]-i[v]);if(M<=u){const W=Math.min(u-1,u-M);f[v]===S?N[v]=(y[v]>t[v]?-1:1)*W:R[v]=(m[v]>i[v]?-1:1)*W}}if(r!==l){const M=v==="x"?"y":"x",W=f[v]===p[M],V=y[M]>m[M],U=y[M]=J?(C=(ee.x+Z.x)/2,E=_[0].y):(C=_[0].x,E=(ee.y+Z.y)/2)}const z={x:y.x+N.x,y:y.y+N.y},D={x:m.x+R.x,y:m.y+R.y};return[[t,...z.x!==_[0].x||z.y!==_[0].y?[z]:[],..._,...D.x!==_[_.length-1].x||D.y!==_[_.length-1].y?[D]:[],i],C,E,k,j]}function l1(t,r,i,l){const a=Math.min(xh(t,r)/2,xh(r,i)/2,l),{x:u,y:d}=r;if(t.x===u&&u===i.x||t.y===d&&d===i.y)return`L${u} ${d}`;if(t.y===d){const y=t.xi.id===r):t[0])||null}function Wu(t,r){return t?typeof t=="string"?t:`${r?`${r}__`:""}${Object.keys(t).sort().map(l=>`${l}=${t[l]}`).join("&")}`:""}function u1(t,{id:r,defaultColor:i,defaultMarkerStart:l,defaultMarkerEnd:a}){const u=new Set;return t.reduce((d,f)=>([f.markerStart||l,f.markerEnd||a].forEach(p=>{if(p&&typeof p=="object"){const y=Wu(p,r);u.has(y)||(d.push({id:y,color:p.color||i,...p}),u.add(y))}}),d),[]).sort((d,f)=>d.id.localeCompare(f.id))}const ug=1e3,c1=10,ac={nodeOrigin:[0,0],nodeExtent:pi,elevateNodesOnSelect:!0,zIndexMode:"basic",defaults:{}},d1={...ac,checkEquality:!0};function uc(t,r){const i={...t};for(const l in r)r[l]!==void 0&&(i[l]=r[l]);return i}function f1(t,r,i){const l=uc(ac,i);for(const a of t.values())if(a.parentId)dc(a,t,r,l);else{const u=ki(a,l.nodeOrigin),d=jr(a.extent)?a.extent:l.nodeExtent,f=Cr(u,d,rn(a));a.internals.positionAbsolute=f}}function h1(t,r){if(!t.handles)return t.measured?r==null?void 0:r.internals.handleBounds:void 0;const i=[],l=[];for(const a of t.handles){const u={id:a.id,width:a.width??1,height:a.height??1,nodeId:t.id,x:a.x,y:a.y,position:a.position,type:a.type};a.type==="source"?i.push(u):a.type==="target"&&l.push(u)}return{source:i,target:l}}function cc(t){return t==="manual"}function Yu(t,r,i,l={}){var m,x;const a=uc(d1,l),u={i:0},d=new Map(r),f=a!=null&&a.elevateNodesOnSelect&&!cc(a.zIndexMode)?ug:0;let p=t.length>0,y=!1;r.clear(),i.clear();for(const v of t){let S=d.get(v.id);if(a.checkEquality&&v===(S==null?void 0:S.internals.userNode))r.set(v.id,S);else{const _=ki(v,a.nodeOrigin),C=jr(v.extent)?v.extent:a.nodeExtent,E=Cr(_,C,rn(v));S={...a.defaults,...v,measured:{width:(m=v.measured)==null?void 0:m.width,height:(x=v.measured)==null?void 0:x.height},internals:{positionAbsolute:E,handleBounds:h1(v,S),z:cg(v,f,a.zIndexMode),userNode:v}},r.set(v.id,S)}(S.measured===void 0||S.measured.width===void 0||S.measured.height===void 0)&&!S.hidden&&(p=!1),v.parentId&&dc(S,r,i,l,u),y||(y=v.selected??!1)}return{nodesInitialized:p,hasSelectedNodes:y}}function p1(t,r){if(!t.parentId)return;const i=r.get(t.parentId);i?i.set(t.id,t):r.set(t.parentId,new Map([[t.id,t]]))}function dc(t,r,i,l,a){const{elevateNodesOnSelect:u,nodeOrigin:d,nodeExtent:f,zIndexMode:p}=uc(ac,l),y=t.parentId,m=r.get(y);if(!m){console.warn(`Parent node ${y} not found. Please make sure that parent nodes are in front of their child nodes in the nodes array.`);return}p1(t,i),a&&!m.parentId&&m.internals.rootParentIndex===void 0&&p==="auto"&&(m.internals.rootParentIndex=++a.i,m.internals.z=m.internals.z+a.i*c1),a&&m.internals.rootParentIndex!==void 0&&(a.i=m.internals.rootParentIndex);const x=u&&!cc(p)?ug:0,{x:v,y:S,z:_}=g1(t,m,d,f,x,p),{positionAbsolute:C}=t.internals,E=v!==C.x||S!==C.y;(E||_!==t.internals.z)&&r.set(t.id,{...t,internals:{...t.internals,positionAbsolute:E?{x:v,y:S}:C,z:_}})}function cg(t,r,i){const l=Jt(t.zIndex)?t.zIndex:0;return cc(i)?l:l+(t.selected?r:0)}function g1(t,r,i,l,a,u){const{x:d,y:f}=r.internals.positionAbsolute,p=rn(t),y=ki(t,i),m=jr(t.extent)?Cr(y,t.extent,p):y;let x=Cr({x:d+m.x,y:f+m.y},l,p);t.extent==="parent"&&(x=Kp(x,p,r));const v=cg(t,a,u),S=r.internals.z??0;return{x:x.x,y:x.y,z:S>=v?S+1:v}}function fc(t,r,i,l=[0,0]){var d;const a=[],u=new Map;for(const f of t){const p=r.get(f.parentId);if(!p)continue;const y=((d=u.get(f.parentId))==null?void 0:d.expandedRect)??yi(p),m=qp(y,f.rect);u.set(f.parentId,{expandedRect:m,parent:p})}return u.size>0&&u.forEach(({expandedRect:f,parent:p},y)=>{var k;const m=p.internals.positionAbsolute,x=rn(p),v=p.origin??l,S=f.x0||_>0||N||R)&&(a.push({id:y,type:"position",position:{x:p.position.x-S+N,y:p.position.y-_+R}}),(k=i.get(y))==null||k.forEach(j=>{t.some(z=>z.id===j.id)||a.push({id:j.id,type:"position",position:{x:j.position.x+S,y:j.position.y+_}})})),(x.width0){const S=fc(v,r,i,a);y.push(...S)}return{changes:y,updatedInternals:p}}async function y1({delta:t,panZoom:r,transform:i,translateExtent:l,width:a,height:u}){if(!r||!t.x&&!t.y)return!1;const d=await r.setViewportConstrained({x:i[0]+t.x,y:i[1]+t.y,zoom:i[2]},[[0,0],[a,u]],l);return!!d&&(d.x!==i[0]||d.y!==i[1]||d.k!==i[2])}function kh(t,r,i,l,a,u){let d=a;const f=l.get(d)||new Map;l.set(d,f.set(i,r)),d=`${a}-${t}`;const p=l.get(d)||new Map;if(l.set(d,p.set(i,r)),u){d=`${a}-${t}-${u}`;const y=l.get(d)||new Map;l.set(d,y.set(i,r))}}function dg(t,r,i){t.clear(),r.clear();for(const l of i){const{source:a,target:u,sourceHandle:d=null,targetHandle:f=null}=l,p={edgeId:l.id,source:a,target:u,sourceHandle:d,targetHandle:f},y=`${a}-${d}--${u}-${f}`,m=`${u}-${f}--${a}-${d}`;kh("source",p,m,t,a,d),kh("target",p,y,t,u,f),r.set(l.id,l)}}function fg(t,r){if(!t.parentId)return!1;const i=r.get(t.parentId);return i?i.selected?!0:fg(i,r):!1}function Eh(t,r,i){var a;let l=t;do{if((a=l==null?void 0:l.matches)!=null&&a.call(l,r))return!0;if(l===i)return!1;l=l==null?void 0:l.parentElement}while(l);return!1}function v1(t,r,i,l){const a=new Map;for(const[u,d]of t)if((d.selected||d.id===l)&&(!d.parentId||!fg(d,t))&&(d.draggable||r&&typeof d.draggable>"u")){const f=t.get(u);f&&a.set(u,{id:u,position:f.position||{x:0,y:0},distance:{x:i.x-f.internals.positionAbsolute.x,y:i.y-f.internals.positionAbsolute.y},extent:f.extent,parentId:f.parentId,origin:f.origin,expandParent:f.expandParent,internals:{positionAbsolute:f.internals.positionAbsolute||{x:0,y:0}},measured:{width:f.measured.width??0,height:f.measured.height??0}})}return a}function Nu({nodeId:t,dragItems:r,nodeLookup:i,dragging:l=!0}){var d,f,p;const a=[];for(const[y,m]of r){const x=(d=i.get(y))==null?void 0:d.internals.userNode;x&&a.push({...x,position:m.position,dragging:l})}if(!t)return[a[0],a];const u=(f=i.get(t))==null?void 0:f.internals.userNode;return[u?{...u,position:((p=r.get(t))==null?void 0:p.position)||u.position,dragging:l}:a[0],a]}function x1({dragItems:t,snapGrid:r,x:i,y:l}){const a=t.values().next().value;if(!a)return null;const u={x:i-a.distance.x,y:l-a.distance.y},d=Ni(u,r);return{x:d.x-u.x,y:d.y-u.y}}function w1({onNodeMouseDown:t,getStoreItems:r,onDragStart:i,onDrag:l,onDragStop:a}){let u={x:null,y:null},d=0,f=new Map,p=!1,y={x:0,y:0},m=null,x=!1,v=null,S=!1,_=!1,C=null;function E({noDragClassName:R,handleSelector:k,domNode:j,isSelectable:z,nodeId:D,nodeClickDistance:B=0}){v=bt(j);function H({x:te,y:J}){const{nodeLookup:M,nodeExtent:W,snapGrid:V,snapToGrid:U,nodeOrigin:A,onNodeDrag:L,onSelectionDrag:F,onError:P,updateNodePositions:T}=r();u={x:te,y:J};let ne=!1;const re=f.size>1,ue=re&&W?Vu(Ei(f)):null,ce=re&&U?x1({dragItems:f,snapGrid:V,x:te,y:J}):null;for(const[de,Q]of f){if(!M.has(de))continue;let se={x:te-Q.distance.x,y:J-Q.distance.y};U&&(se=ce?{x:Math.round(se.x+ce.x),y:Math.round(se.y+ce.y)}:Ni(se,V));let fe=null;if(re&&W&&!Q.extent&&ue){const{positionAbsolute:pe}=Q.internals,Ce=pe.x-ue.x+W[0][0],je=pe.x+Q.measured.width-ue.x2+W[1][0],Me=pe.y-ue.y+W[0][1],be=pe.y+Q.measured.height-ue.y2+W[1][1];fe=[[Ce,Me],[je,be]]}const{position:ge,positionAbsolute:xe}=Qp({nodeId:de,nextPosition:se,nodeLookup:M,nodeExtent:fe||W,nodeOrigin:A,onError:P});ne=ne||Q.position.x!==ge.x||Q.position.y!==ge.y,Q.position=ge,Q.internals.positionAbsolute=xe}if(_=_||ne,!!ne&&(T(f,!0),C&&(l||L||!D&&F))){const[de,Q]=Nu({nodeId:D,dragItems:f,nodeLookup:M});l==null||l(C,f,de,Q),L==null||L(C,de,Q),D||F==null||F(C,Q)}}async function X(){if(!m)return;const{transform:te,panBy:J,autoPanSpeed:M,autoPanOnNodeDrag:W}=r();if(!W){p=!1,cancelAnimationFrame(d);return}const[V,U]=ic(y,m,M);(V!==0||U!==0)&&(u.x=(u.x??0)-V/te[2],u.y=(u.y??0)-U/te[2],await J({x:V,y:U})&&H(u)),d=requestAnimationFrame(X)}function ee(te){var re;const{nodeLookup:J,multiSelectionActive:M,nodesDraggable:W,transform:V,snapGrid:U,snapToGrid:A,selectNodesOnDrag:L,onNodeDragStart:F,onSelectionDragStart:P,unselectNodesAndEdges:T}=r();x=!0,(!L||!z)&&!M&&D&&((re=J.get(D))!=null&&re.selected||T()),z&&L&&D&&(t==null||t(D));const ne=ui(te.sourceEvent,{transform:V,snapGrid:U,snapToGrid:A,containerBounds:m});if(u=ne,f=v1(J,W,ne,D),f.size>0&&(i||F||!D&&P)){const[ue,ce]=Nu({nodeId:D,dragItems:f,nodeLookup:J});i==null||i(te.sourceEvent,f,ue,ce),F==null||F(te.sourceEvent,ue,ce),D||P==null||P(te.sourceEvent,ce)}}const Z=Mp().clickDistance(B).on("start",te=>{const{domNode:J,nodeDragThreshold:M,transform:W,snapGrid:V,snapToGrid:U}=r();m=(J==null?void 0:J.getBoundingClientRect())||null,S=!1,_=!1,C=te.sourceEvent,M===0&&ee(te),u=ui(te.sourceEvent,{transform:W,snapGrid:V,snapToGrid:U,containerBounds:m}),y=en(te.sourceEvent,m)}).on("drag",te=>{const{autoPanOnNodeDrag:J,transform:M,snapGrid:W,snapToGrid:V,nodeDragThreshold:U,nodeLookup:A}=r(),L=ui(te.sourceEvent,{transform:M,snapGrid:W,snapToGrid:V,containerBounds:m});if(C=te.sourceEvent,(te.sourceEvent.type==="touchmove"&&te.sourceEvent.touches.length>1||D&&!A.has(D))&&(S=!0),!S){if(!p&&J&&x&&(p=!0,X()),!x){const F=en(te.sourceEvent,m),P=F.x-y.x,T=F.y-y.y;Math.sqrt(P*P+T*T)>U&&ee(te)}(u.x!==L.xSnapped||u.y!==L.ySnapped)&&f&&x&&(y=en(te.sourceEvent,m),H(L))}}).on("end",te=>{if(!x||S){S&&f.size>0&&r().updateNodePositions(f,!1);return}if(p=!1,x=!1,cancelAnimationFrame(d),f.size>0){const{nodeLookup:J,updateNodePositions:M,onNodeDragStop:W,onSelectionDragStop:V}=r();if(_&&(M(f,!1),_=!1),a||W||!D&&V){const[U,A]=Nu({nodeId:D,dragItems:f,nodeLookup:J,dragging:!1});a==null||a(te.sourceEvent,f,U,A),W==null||W(te.sourceEvent,U,A),D||V==null||V(te.sourceEvent,A)}}}).filter(te=>{const J=te.target;return!te.button&&(!R||!Eh(J,`.${R}`,j))&&(!k||Eh(J,k,j))});v.call(Z)}function N(){v==null||v.on(".drag",null)}return{update:E,destroy:N}}function S1(t,r,i){const l=[],a={x:t.x-i,y:t.y-i,width:i*2,height:i*2};for(const u of r.values())dl(a,yi(u))>0&&l.push(u);return l}const _1=250;function k1(t,r,i,l){var f,p;let a=[],u=1/0;const d=S1(t,i,r+_1);for(const y of d){const m=[...((f=y.internals.handleBounds)==null?void 0:f.source)??[],...((p=y.internals.handleBounds)==null?void 0:p.target)??[]];for(const x of m){if(l.nodeId===x.nodeId&&l.type===x.type&&l.id===x.id)continue;const{x:v,y:S}=Mr(y,x,x.position,!0),_=Math.sqrt(Math.pow(v-t.x,2)+Math.pow(S-t.y,2));_>r||(_1){const y=l.type==="source"?"target":"source";return a.find(m=>m.type===y)??a[0]}return a[0]}function hg(t,r,i,l,a,u=!1){var y,m,x;const d=l.get(t);if(!d)return null;const f=a==="strict"?(y=d.internals.handleBounds)==null?void 0:y[r]:[...((m=d.internals.handleBounds)==null?void 0:m.source)??[],...((x=d.internals.handleBounds)==null?void 0:x.target)??[]],p=(i?f==null?void 0:f.find(v=>v.id===i):f==null?void 0:f[0])??null;return p&&u?{...p,...Mr(d,p,p.position,!0)}:p}function pg(t,r){return t||(r!=null&&r.classList.contains("target")?"target":r!=null&&r.classList.contains("source")?"source":null)}function E1(t,r){let i=null;return r?i=!0:t&&!r&&(i=!1),i}const gg=()=>!0;function N1(t,{connectionMode:r,connectionRadius:i,handleId:l,nodeId:a,edgeUpdaterType:u,isTarget:d,domNode:f,nodeLookup:p,lib:y,autoPanOnConnect:m,flowId:x,panBy:v,cancelConnection:S,onConnectStart:_,onConnect:C,onConnectEnd:E,isValidConnection:N=gg,onReconnectEnd:R,updateConnection:k,getTransform:j,getFromHandle:z,autoPanSpeed:D,dragThreshold:B=1,handleDomNode:H}){const X=ng(t.target);let ee=0,Z;const{x:te,y:J}=en(t),M=pg(u,H),W=f==null?void 0:f.getBoundingClientRect();let V=!1;if(!W||!M)return;const U=hg(a,M,l,p,r);if(!U)return;let A=en(t,W),L=!1,F=null,P=!1,T=null;function ne(){if(!m||!W)return;const[ge,xe]=ic(A,W,D);v({x:ge,y:xe}),ee=requestAnimationFrame(ne)}const re={...U,nodeId:a,type:M,position:U.position},ue=p.get(a);let de={inProgress:!0,isValid:null,from:Mr(ue,re,_e.Left,!0),fromHandle:re,fromPosition:re.position,fromNode:ue,to:A,toHandle:null,toPosition:fh[re.position],toNode:null,pointer:A};function Q(){V=!0,k(de),_==null||_(t,{nodeId:a,handleId:l,handleType:M})}B===0&&Q();function se(ge){if(!V){const{x:be,y:Xe}=en(ge),rt=be-te,Ze=Xe-J;if(!(rt*rt+Ze*Ze>B*B))return;Q()}if(!z()||!re){fe(ge);return}const xe=j();A=en(ge,W),Z=k1(Ci(A,xe,!1,[1,1]),i,p,re),L||(ne(),L=!0);const pe=mg(ge,{handle:Z,connectionMode:r,fromNodeId:a,fromHandleId:l,fromType:d?"target":"source",isValidConnection:N,doc:X,lib:y,flowId:x,nodeLookup:p});T=pe.handleDomNode,F=pe.connection,P=E1(!!Z,pe.isValid);const Ce=p.get(a),je=Ce?Mr(Ce,re,_e.Left,!0):de.from,Me={...de,from:je,isValid:P,to:pe.toHandle&&P?mo({x:pe.toHandle.x,y:pe.toHandle.y},xe):A,toHandle:pe.toHandle,toPosition:P&&pe.toHandle?pe.toHandle.position:fh[re.position],toNode:pe.toHandle?p.get(pe.toHandle.nodeId):null,pointer:A};k(Me),de=Me}function fe(ge){if(!("touches"in ge&&ge.touches.length>0)){if(V){(Z||T)&&F&&P&&(C==null||C(F));const{inProgress:xe,...pe}=de,Ce={...pe,toPosition:de.toHandle?de.toPosition:null};E==null||E(ge,Ce),u&&(R==null||R(ge,Ce))}S(),cancelAnimationFrame(ee),L=!1,P=!1,F=null,T=null,X.removeEventListener("mousemove",se),X.removeEventListener("mouseup",fe),X.removeEventListener("touchmove",se),X.removeEventListener("touchend",fe)}}X.addEventListener("mousemove",se),X.addEventListener("mouseup",fe),X.addEventListener("touchmove",se),X.addEventListener("touchend",fe)}function mg(t,{handle:r,connectionMode:i,fromNodeId:l,fromHandleId:a,fromType:u,doc:d,lib:f,flowId:p,isValidConnection:y=gg,nodeLookup:m}){const x=u==="target",v=r?d.querySelector(`.${f}-flow__handle[data-id="${p}-${r==null?void 0:r.nodeId}-${r==null?void 0:r.id}-${r==null?void 0:r.type}"]`):null,{x:S,y:_}=en(t),C=d.elementFromPoint(S,_),E=C!=null&&C.classList.contains(`${f}-flow__handle`)?C:v,N={handleDomNode:E,isValid:!1,connection:null,toHandle:null};if(E){const R=pg(void 0,E),k=E.getAttribute("data-nodeid"),j=E.getAttribute("data-handleid"),z=E.classList.contains("connectable"),D=E.classList.contains("connectableend");if(!k||!R)return N;const B={source:x?k:l,sourceHandle:x?j:a,target:x?l:k,targetHandle:x?a:j};N.connection=B;const X=z&&D&&(i===po.Strict?x&&R==="source"||!x&&R==="target":k!==l||j!==a);N.isValid=X&&y(B),N.toHandle=hg(k,R,j,m,i,!0)}return N}const Xu={onPointerDown:N1,isValid:mg};function C1({domNode:t,panZoom:r,getTransform:i,getViewScale:l}){const a=bt(t);function u({translateExtent:f,width:p,height:y,zoomStep:m=1,pannable:x=!0,zoomable:v=!0,inversePan:S=!1}){const _=k=>{if(k.sourceEvent.type!=="wheel"||!r)return;const j=i(),z=k.sourceEvent.ctrlKey&&vi()?10:1,D=-k.sourceEvent.deltaY*(k.sourceEvent.deltaMode===1?.05:k.sourceEvent.deltaMode?1:.002)*m,B=j[2]*Math.pow(2,D*z);r.scaleTo(B)};let C=[0,0];const E=k=>{(k.sourceEvent.type==="mousedown"||k.sourceEvent.type==="touchstart")&&(C=[k.sourceEvent.clientX??k.sourceEvent.touches[0].clientX,k.sourceEvent.clientY??k.sourceEvent.touches[0].clientY])},N=k=>{const j=i();if(k.sourceEvent.type!=="mousemove"&&k.sourceEvent.type!=="touchmove"||!r)return;const z=[k.sourceEvent.clientX??k.sourceEvent.touches[0].clientX,k.sourceEvent.clientY??k.sourceEvent.touches[0].clientY],D=[z[0]-C[0],z[1]-C[1]];C=z;const B=l()*Math.max(j[2],Math.log(j[2]))*(S?-1:1),H={x:j[0]-D[0]*B,y:j[1]-D[1]*B},X=[[0,0],[p,y]];r.setViewportConstrained({x:H.x,y:H.y,zoom:j[2]},X,f)},R=Vp().on("start",E).on("zoom",x?N:null).on("zoom.wheel",v?_:null);a.call(R,{})}function d(){a.on("zoom",null)}return{update:u,destroy:d,pointer:qt}}const Sl=t=>({x:t.x,y:t.y,zoom:t.k}),Cu=({x:t,y:r,zoom:i})=>vl.translate(t,r).scale(i),qn=(t,r)=>t.target.closest(`.${r}`),yg=(t,r)=>r===2&&Array.isArray(t)&&t.includes(2),j1=t=>((t*=2)<=1?t*t*t:(t-=2)*t*t+2)/2,ju=(t,r=0,i=j1,l=()=>{})=>{const a=typeof r=="number"&&r>0;return a||l(),a?t.transition().duration(r).ease(i).on("end",l):t},vg=t=>{const r=t.ctrlKey&&vi()?10:1;return-t.deltaY*(t.deltaMode===1?.05:t.deltaMode?1:.002)*r};function M1({zoomPanValues:t,noWheelClassName:r,d3Selection:i,d3Zoom:l,panOnScrollMode:a,panOnScrollSpeed:u,zoomOnPinch:d,onPanZoomStart:f,onPanZoom:p,onPanZoomEnd:y}){return m=>{if(qn(m,r))return m.ctrlKey&&m.preventDefault(),!1;m.preventDefault(),m.stopImmediatePropagation();const x=i.property("__zoom").k||1;if(m.ctrlKey&&d){const E=qt(m),N=vg(m),R=x*Math.pow(2,N);l.scaleTo(i,R,E,m);return}const v=m.deltaMode===1?20:1;let S=a===kr.Vertical?0:m.deltaX*v,_=a===kr.Horizontal?0:m.deltaY*v;!vi()&&m.shiftKey&&a!==kr.Vertical&&(S=m.deltaY*v,_=0),l.translateBy(i,-(S/x)*u,-(_/x)*u,{internal:!0});const C=Sl(i.property("__zoom"));clearTimeout(t.panScrollTimeout),t.isPanScrolling?p==null||p(m,C):(t.isPanScrolling=!0,f==null||f(m,C)),t.panScrollTimeout=setTimeout(()=>{y==null||y(m,C),t.isPanScrolling=!1},150)}}function P1({noWheelClassName:t,preventScrolling:r,d3ZoomHandler:i}){return function(l,a){const u=l.type==="wheel",d=!r&&u&&!l.ctrlKey,f=qn(l,t);if(l.ctrlKey&&u&&f&&l.preventDefault(),d||f)return null;l.preventDefault(),i.call(this,l,a)}}function I1({zoomPanValues:t,onDraggingChange:r,onPanZoomStart:i}){return l=>{var u,d,f;if((u=l.sourceEvent)!=null&&u.internal)return;const a=Sl(l.transform);t.mouseButton=((d=l.sourceEvent)==null?void 0:d.button)||0,t.isZoomingOrPanning=!0,t.prevViewport=a,((f=l.sourceEvent)==null?void 0:f.type)==="mousedown"&&r(!0),i&&(i==null||i(l.sourceEvent,a))}}function R1({zoomPanValues:t,panOnDrag:r,onPaneContextMenu:i,onTransformChange:l,onPanZoom:a}){return u=>{var d,f;t.usedRightMouseButton=!!(i&&yg(r,t.mouseButton??0)),(d=u.sourceEvent)!=null&&d.sync||l([u.transform.x,u.transform.y,u.transform.k]),a&&!((f=u.sourceEvent)!=null&&f.internal)&&(a==null||a(u.sourceEvent,Sl(u.transform)))}}function T1({zoomPanValues:t,panOnDrag:r,panOnScroll:i,onDraggingChange:l,onPanZoomEnd:a,onPaneContextMenu:u}){return d=>{var f;if(!((f=d.sourceEvent)!=null&&f.internal)&&(t.isZoomingOrPanning=!1,u&&yg(r,t.mouseButton??0)&&!t.usedRightMouseButton&&d.sourceEvent&&u(d.sourceEvent),t.usedRightMouseButton=!1,l(!1),a)){const p=Sl(d.transform);t.prevViewport=p,clearTimeout(t.timerId),t.timerId=setTimeout(()=>{a==null||a(d.sourceEvent,p)},i?150:0)}}}function b1({panActivationKeyPressed:t,zoomActivationKeyPressed:r,zoomOnScroll:i,zoomOnPinch:l,panOnDrag:a,panOnScroll:u,zoomOnDoubleClick:d,userSelectionActive:f,noWheelClassName:p,noPanClassName:y,lib:m,connectionInProgress:x}){return v=>{var N;const S=r||i,_=l&&v.ctrlKey,C=v.type==="wheel";if(v.button===1&&v.type==="mousedown"&&(qn(v,`${m}-flow__node`)||qn(v,`${m}-flow__edge`)||qn(v,`${m}-flow__selection`)||qn(v,`${m}-flow__nodesselection`)))return!0;if(!a&&!S&&!u&&!d&&!l||f||x&&!C||qn(v,p)&&C||qn(v,y)&&(!C||u&&C&&!r)||!l&&v.ctrlKey&&C)return!1;if(!l&&v.type==="touchstart"&&((N=v.touches)==null?void 0:N.length)>1)return v.preventDefault(),!1;if(!S&&!u&&!_&&C||!a&&(v.type==="mousedown"||v.type==="touchstart")||Array.isArray(a)&&!a.includes(v.button)&&v.type==="mousedown")return!1;const E=Array.isArray(a)&&a.includes(v.button)||!v.button||v.button<=1;return(!v.ctrlKey||C||t)&&E}}function z1({domNode:t,minZoom:r,maxZoom:i,translateExtent:l,viewport:a,onPanZoom:u,onPanZoomStart:d,onPanZoomEnd:f,onDraggingChange:p}){const y={isZoomingOrPanning:!1,usedRightMouseButton:!1,prevViewport:{},mouseButton:0,timerId:void 0,panScrollTimeout:void 0,isPanScrolling:!1},m=t.getBoundingClientRect();let x=[[0,0],[m.width,m.height]];const v=typeof ResizeObserver<"u"?new ResizeObserver(J=>{const M=J[0];M&&(x=[[0,0],[M.contentRect.width,M.contentRect.height]])}):null;v==null||v.observe(t);const S=Vp().extent(()=>x).scaleExtent([r,i]).translateExtent(l),_=bt(t).call(S);j({x:a.x,y:a.y,zoom:go(a.zoom,r,i)},[[0,0],[m.width,m.height]],l);const C=_.on("wheel.zoom"),E=_.on("dblclick.zoom");S.wheelDelta(vg);async function N(J,M){return _?new Promise(W=>{S==null||S.interpolate((M==null?void 0:M.interpolate)==="linear"?ai:Js).transform(ju(_,M==null?void 0:M.duration,M==null?void 0:M.ease,()=>W(!0)),J)}):!1}function R({noWheelClassName:J,noPanClassName:M,onPaneContextMenu:W,userSelectionActive:V,panOnScroll:U,panOnDrag:A,panOnScrollMode:L,panOnScrollSpeed:F,preventScrolling:P,zoomOnPinch:T,zoomOnScroll:ne,zoomOnDoubleClick:re,panActivationKeyPressed:ue=!1,zoomActivationKeyPressed:ce,lib:de,onTransformChange:Q,connectionInProgress:se,paneClickDistance:fe,selectionOnDrag:ge}){V&&!y.isZoomingOrPanning&&k();const xe=U&&!ce&&!V;S.clickDistance(ge?1/0:!Jt(fe)||fe<0?0:fe);const pe=xe?M1({zoomPanValues:y,noWheelClassName:J,d3Selection:_,d3Zoom:S,panOnScrollMode:L,panOnScrollSpeed:F,zoomOnPinch:T,onPanZoomStart:d,onPanZoom:u,onPanZoomEnd:f}):P1({noWheelClassName:J,preventScrolling:P,d3ZoomHandler:C});_.on("wheel.zoom",pe,{passive:!1});const Ce=I1({zoomPanValues:y,onDraggingChange:p,onPanZoomStart:d});S.on("start",Ce);const je=R1({zoomPanValues:y,panOnDrag:A,onPaneContextMenu:!!W,onPanZoom:u,onTransformChange:Q});S.on("zoom",je);const Me=T1({zoomPanValues:y,panOnDrag:A,panOnScroll:U,onPaneContextMenu:W,onPanZoomEnd:f,onDraggingChange:p});S.on("end",Me);const be=b1({panActivationKeyPressed:ue,zoomActivationKeyPressed:ce,panOnDrag:A,zoomOnScroll:ne,panOnScroll:U,zoomOnDoubleClick:re,zoomOnPinch:T,userSelectionActive:V,noPanClassName:M,noWheelClassName:J,lib:de,connectionInProgress:se});S.filter(be),re?_.on("dblclick.zoom",E):_.on("dblclick.zoom",null)}function k(){S.on("zoom",null)}async function j(J,M,W){const V=Cu(J),U=S==null?void 0:S.constrain()(V,M,W);return U&&await N(U),U}async function z(J,M){const W=Cu(J);return await N(W,M),W}function D(J){if(_){const M=Cu(J),W=_.property("__zoom");(W.k!==J.zoom||W.x!==J.x||W.y!==J.y)&&(S==null||S.transform(_,M,null,{sync:!0}))}}function B(){const J=_?Bp(_.node()):{x:0,y:0,k:1};return{x:J.x,y:J.y,zoom:J.k}}async function H(J,M){return _?new Promise(W=>{S==null||S.interpolate((M==null?void 0:M.interpolate)==="linear"?ai:Js).scaleTo(ju(_,M==null?void 0:M.duration,M==null?void 0:M.ease,()=>W(!0)),J)}):!1}async function X(J,M){return _?new Promise(W=>{S==null||S.interpolate((M==null?void 0:M.interpolate)==="linear"?ai:Js).scaleBy(ju(_,M==null?void 0:M.duration,M==null?void 0:M.ease,()=>W(!0)),J)}):!1}function ee(J){S==null||S.scaleExtent(J)}function Z(J){S==null||S.translateExtent(J)}function te(J){const M=!Jt(J)||J<0?0:J;S==null||S.clickDistance(M)}return{update:R,destroy:k,setViewport:z,setViewportConstrained:j,getViewport:B,scaleTo:H,scaleBy:X,setScaleExtent:ee,setTranslateExtent:Z,syncViewport:D,setClickDistance:te}}var yo;(function(t){t.Line="line",t.Handle="handle"})(yo||(yo={}));function L1({width:t,prevWidth:r,height:i,prevHeight:l,affectsX:a,affectsY:u}){const d=t-r,f=i-l,p=[d>0?1:d<0?-1:0,f>0?1:f<0?-1:0];return d&&a&&(p[0]=p[0]*-1),f&&u&&(p[1]=p[1]*-1),p}function Nh(t){const r=t.includes("right")||t.includes("left"),i=t.includes("bottom")||t.includes("top"),l=t.includes("left"),a=t.includes("top");return{isHorizontal:r,isVertical:i,affectsX:l,affectsY:a}}function Qn(t,r){return Math.max(0,r-t)}function Kn(t,r){return Math.max(0,t-r)}function Qs(t,r,i){return Math.max(0,r-t,t-i)}function Ch(t,r){return t?!r:r}function A1(t,r,i,l,a,u,d,f){let{affectsX:p,affectsY:y}=r;const{isHorizontal:m,isVertical:x}=r,v=m&&x,{xSnapped:S,ySnapped:_}=i,{minWidth:C,maxWidth:E,minHeight:N,maxHeight:R}=l,{x:k,y:j,width:z,height:D,aspectRatio:B}=t;let H=Math.floor(m?S-t.pointerX:0),X=Math.floor(x?_-t.pointerY:0);const ee=z+(p?-H:H),Z=D+(y?-X:X),te=-u[0]*z,J=-u[1]*D;let M=Qs(ee,C,E),W=Qs(Z,N,R);if(d){let A=0,L=0;p&&H<0?A=Qn(k+H+te,d[0][0]):!p&&H>0&&(A=Kn(k+ee+te,d[1][0])),y&&X<0?L=Qn(j+X+J,d[0][1]):!y&&X>0&&(L=Kn(j+Z+J,d[1][1])),M=Math.max(M,A),W=Math.max(W,L)}if(f){let A=0,L=0;p&&H>0?A=Kn(k+H,f[0][0]):!p&&H<0&&(A=Qn(k+ee,f[1][0])),y&&X>0?L=Kn(j+X,f[0][1]):!y&&X<0&&(L=Qn(j+Z,f[1][1])),M=Math.max(M,A),W=Math.max(W,L)}if(a){if(m){const A=Qs(ee/B,N,R)*B;if(M=Math.max(M,A),d){let L=0;!p&&!y||p&&!y&&v?L=Kn(j+J+ee/B,d[1][1])*B:L=Qn(j+J+(p?H:-H)/B,d[0][1])*B,M=Math.max(M,L)}if(f){let L=0;!p&&!y||p&&!y&&v?L=Qn(j+ee/B,f[1][1])*B:L=Kn(j+(p?H:-H)/B,f[0][1])*B,M=Math.max(M,L)}}if(x){const A=Qs(Z*B,C,E)/B;if(W=Math.max(W,A),d){let L=0;!p&&!y||y&&!p&&v?L=Kn(k+Z*B+te,d[1][0])/B:L=Qn(k+(y?X:-X)*B+te,d[0][0])/B,W=Math.max(W,L)}if(f){let L=0;!p&&!y||y&&!p&&v?L=Qn(k+Z*B,f[1][0])/B:L=Kn(k+(y?X:-X)*B,f[0][0])/B,W=Math.max(W,L)}}}X=X+(X<0?W:-W),H=H+(H<0?M:-M),a&&(v?ee>Z*B?X=(Ch(p,y)?-H:H)/B:H=(Ch(p,y)?-X:X)*B:m?(X=H/B,y=p):(H=X*B,p=y));const V=p?k+H:k,U=y?j+X:j;return{width:z+(p?-H:H),height:D+(y?-X:X),x:u[0]*H*(p?-1:1)+V,y:u[1]*X*(y?-1:1)+U}}const xg={width:0,height:0,x:0,y:0},D1={...xg,pointerX:0,pointerY:0,aspectRatio:1};function $1(t,r,i){const l=r.position.x+t.position.x,a=r.position.y+t.position.y,u=t.measured.width??0,d=t.measured.height??0,f=i[0]*u,p=i[1]*d;return[[l-f,a-p],[l+u-f,a+d-p]]}function O1({domNode:t,nodeId:r,getStoreItems:i,onChange:l,onEnd:a}){const u=bt(t);let d={controlDirection:Nh("bottom-right"),boundaries:{minWidth:0,minHeight:0,maxWidth:Number.MAX_VALUE,maxHeight:Number.MAX_VALUE},resizeDirection:void 0,keepAspectRatio:!1};function f({controlPosition:y,boundaries:m,keepAspectRatio:x,resizeDirection:v,onResizeStart:S,onResize:_,onResizeEnd:C,shouldResize:E}){let N={...xg},R={...D1};d={boundaries:m,resizeDirection:v,keepAspectRatio:x,controlDirection:Nh(y)};let k,j=null,z=[],D,B,H,X=!1;const ee=Mp().on("start",Z=>{const{nodeLookup:te,transform:J,snapGrid:M,snapToGrid:W,nodeOrigin:V,paneDomNode:U}=i();if(k=te.get(r),!k)return;j=(U==null?void 0:U.getBoundingClientRect())??null;const{xSnapped:A,ySnapped:L}=ui(Z.sourceEvent,{transform:J,snapGrid:M,snapToGrid:W,containerBounds:j});N={width:k.measured.width??0,height:k.measured.height??0,x:k.position.x??0,y:k.position.y??0},R={...N,pointerX:A,pointerY:L,aspectRatio:N.width/N.height},D=void 0,B=jr(k.extent)?k.extent:void 0,k.parentId&&(k.extent==="parent"||k.expandParent)&&(D=te.get(k.parentId)),D&&k.extent==="parent"&&(B=[[0,0],[D.measured.width,D.measured.height]]),z=[],H=void 0;for(const[F,P]of te)if(P.parentId===r&&(z.push({id:F,position:{...P.position},extent:P.extent}),P.extent==="parent"||P.expandParent)){const T=$1(P,k,P.origin??V);H?H=[[Math.min(T[0][0],H[0][0]),Math.min(T[0][1],H[0][1])],[Math.max(T[1][0],H[1][0]),Math.max(T[1][1],H[1][1])]]:H=T}S==null||S(Z,{...N})}).on("drag",Z=>{const{transform:te,snapGrid:J,snapToGrid:M,nodeOrigin:W}=i(),V=ui(Z.sourceEvent,{transform:te,snapGrid:J,snapToGrid:M,containerBounds:j}),U=[];if(!k)return;const{x:A,y:L,width:F,height:P}=N,T={},ne=k.origin??W,{width:re,height:ue,x:ce,y:de}=A1(R,d.controlDirection,V,d.boundaries,d.keepAspectRatio,ne,B,H),Q=re!==F,se=ue!==P,fe=ce!==A&&Q,ge=de!==L&&se;if(!fe&&!ge&&!Q&&!se)return;if((fe||ge||ne[0]===1||ne[1]===1)&&(T.x=fe?ce:N.x,T.y=ge?de:N.y,N.x=T.x,N.y=T.y,z.length>0)){const je=ce-A,Me=de-L;for(const be of z)be.position={x:be.position.x-je+ne[0]*(re-F),y:be.position.y-Me+ne[1]*(ue-P)},U.push(be)}if((Q||se)&&(T.width=Q&&(!d.resizeDirection||d.resizeDirection==="horizontal")?re:N.width,T.height=se&&(!d.resizeDirection||d.resizeDirection==="vertical")?ue:N.height,N.width=T.width,N.height=T.height),D&&k.expandParent){const je=ne[0]*(T.width??0);T.x&&T.x{X&&(C==null||C(Z,{...N}),a==null||a({...N}),X=!1)});u.call(ee)}function p(){u.on(".drag",null)}return{update:f,destroy:p}}var Mu={exports:{}},Pu={},Iu={exports:{}},Ru={};/** - * @license React - * use-sync-external-store-shim.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var jh;function F1(){if(jh)return Ru;jh=1;var t=wi();function r(x,v){return x===v&&(x!==0||1/x===1/v)||x!==x&&v!==v}var i=typeof Object.is=="function"?Object.is:r,l=t.useState,a=t.useEffect,u=t.useLayoutEffect,d=t.useDebugValue;function f(x,v){var S=v(),_=l({inst:{value:S,getSnapshot:v}}),C=_[0].inst,E=_[1];return u(function(){C.value=S,C.getSnapshot=v,p(C)&&E({inst:C})},[x,S,v]),a(function(){return p(C)&&E({inst:C}),x(function(){p(C)&&E({inst:C})})},[x]),d(S),S}function p(x){var v=x.getSnapshot;x=x.value;try{var S=v();return!i(x,S)}catch{return!0}}function y(x,v){return v()}var m=typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?y:f;return Ru.useSyncExternalStore=t.useSyncExternalStore!==void 0?t.useSyncExternalStore:m,Ru}var Mh;function H1(){return Mh||(Mh=1,Iu.exports=F1()),Iu.exports}/** - * @license React - * use-sync-external-store-shim/with-selector.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var Ph;function B1(){if(Ph)return Pu;Ph=1;var t=wi(),r=H1();function i(y,m){return y===m&&(y!==0||1/y===1/m)||y!==y&&m!==m}var l=typeof Object.is=="function"?Object.is:i,a=r.useSyncExternalStore,u=t.useRef,d=t.useEffect,f=t.useMemo,p=t.useDebugValue;return Pu.useSyncExternalStoreWithSelector=function(y,m,x,v,S){var _=u(null);if(_.current===null){var C={hasValue:!1,value:null};_.current=C}else C=_.current;_=f(function(){function N(D){if(!R){if(R=!0,k=D,D=v(D),S!==void 0&&C.hasValue){var B=C.value;if(S(B,D))return j=B}return j=D}if(B=j,l(k,D))return B;var H=v(D);return S!==void 0&&S(B,H)?(k=D,B):(k=D,j=H)}var R=!1,k,j,z=x===void 0?null:x;return[function(){return N(m())},z===null?void 0:function(){return N(z())}]},[m,x,v,S]);var E=a(y,_[0],_[1]);return d(function(){C.hasValue=!0,C.value=E},[E]),p(E),E},Pu}var Ih;function V1(){return Ih||(Ih=1,Mu.exports=B1()),Mu.exports}var U1=V1();const W1=dp(U1),Y1={},Rh=t=>{let r;const i=new Set,l=(m,x)=>{const v=typeof m=="function"?m(r):m;if(!Object.is(v,r)){const S=r;r=x??(typeof v!="object"||v===null)?v:Object.assign({},r,v),i.forEach(_=>_(r,S))}},a=()=>r,p={setState:l,getState:a,getInitialState:()=>y,subscribe:m=>(i.add(m),()=>i.delete(m)),destroy:()=>{(Y1?"production":void 0)!=="production"&&console.warn("[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."),i.clear()}},y=r=t(l,a,p);return p},X1=t=>t?Rh(t):Rh,{useDebugValue:G1}=U0,{useSyncExternalStoreWithSelector:Q1}=W1,K1=t=>t;function wg(t,r=K1,i){const l=Q1(t.subscribe,t.getState,t.getServerState||t.getInitialState,r,i);return G1(l),l}const Th=(t,r)=>{const i=X1(t),l=(a,u=r)=>wg(i,a,u);return Object.assign(l,i),l},q1=(t,r)=>t?Th(t,r):Th;function Ue(t,r){if(Object.is(t,r))return!0;if(typeof t!="object"||t===null||typeof r!="object"||r===null)return!1;if(t instanceof Map&&r instanceof Map){if(t.size!==r.size)return!1;for(const[l,a]of t)if(!Object.is(a,r.get(l)))return!1;return!0}if(t instanceof Set&&r instanceof Set){if(t.size!==r.size)return!1;for(const l of t)if(!r.has(l))return!1;return!0}const i=Object.keys(t);if(i.length!==Object.keys(r).length)return!1;for(const l of i)if(!Object.prototype.hasOwnProperty.call(r,l)||!Object.is(t[l],r[l]))return!1;return!0}fp();const _l=O.createContext(null),Z1=_l.Provider,Sg=tn.error001("react");function Re(t,r){const i=O.useContext(_l);if(i===null)throw new Error(Sg);return wg(i,t,r)}function Oe(){const t=O.useContext(_l);if(t===null)throw new Error(Sg);return O.useMemo(()=>({getState:t.getState,setState:t.setState,subscribe:t.subscribe}),[t])}const bh={display:"none"},J1={position:"absolute",width:1,height:1,margin:-1,border:0,padding:0,overflow:"hidden",clip:"rect(0px, 0px, 0px, 0px)",clipPath:"inset(100%)"},_g="react-flow__node-desc",kg="react-flow__edge-desc",eS="react-flow__aria-live",tS=t=>t.ariaLiveMessage,nS=t=>t.ariaLabelConfig;function rS({rfId:t}){const r=Re(tS);return g.jsx("div",{id:`${eS}-${t}`,"aria-live":"assertive","aria-atomic":"true",style:J1,children:r})}function oS({rfId:t,disableKeyboardA11y:r}){const i=Re(nS);return g.jsxs(g.Fragment,{children:[g.jsx("div",{id:`${_g}-${t}`,style:bh,children:r?i["node.a11yDescription.default"]:i["node.a11yDescription.keyboardDisabled"]}),g.jsx("div",{id:`${kg}-${t}`,style:bh,children:i["edge.a11yDescription.default"]}),!r&&g.jsx(rS,{rfId:t})]})}const kl=O.forwardRef(({position:t="top-left",children:r,className:i,style:l,...a},u)=>{const d=`${t}`.split("-");return g.jsx("div",{className:Qe(["react-flow__panel",i,...d]),style:l,ref:u,...a,children:r})});kl.displayName="Panel";const zh="https://reactflow.dev?utm_source=attribution";function iS({proOptions:t,position:r="bottom-right"}){return t!=null&&t.hideAttribution?null:g.jsx(kl,{position:r,className:"react-flow__attribution","data-message":`Please only hide this attribution when you are subscribed to React Flow Pro: ${zh}`,children:g.jsx("a",{href:zh,target:"_blank",rel:"noopener noreferrer","aria-label":"React Flow attribution",children:"React Flow"})})}const sS=t=>{const r=[],i=[];for(const[,l]of t.nodeLookup)l.selected&&r.push(l.internals.userNode);for(const[,l]of t.edgeLookup)l.selected&&i.push(l);return{selectedNodes:r,selectedEdges:i}},Ks=t=>t.id;function lS(t,r){return Ue(t.selectedNodes.map(Ks),r.selectedNodes.map(Ks))&&Ue(t.selectedEdges.map(Ks),r.selectedEdges.map(Ks))}function aS({onSelectionChange:t}){const r=Oe(),{selectedNodes:i,selectedEdges:l}=Re(sS,lS);return O.useEffect(()=>{const a={nodes:i,edges:l};t==null||t(a),r.getState().onSelectionChangeHandlers.forEach(u=>u(a))},[i,l,t]),null}const uS=t=>!!t.onSelectionChangeHandlers;function cS({onSelectionChange:t}){const r=Re(uS);return t||r?g.jsx(aS,{onSelectionChange:t}):null}const Eg=[0,0],dS={x:0,y:0,zoom:1},fS=["nodes","edges","defaultNodes","defaultEdges","onConnect","onConnectStart","onConnectEnd","onClickConnectStart","onClickConnectEnd","nodesDraggable","autoPanOnNodeFocus","nodesConnectable","nodesFocusable","edgesFocusable","edgesReconnectable","elevateNodesOnSelect","elevateEdgesOnSelect","minZoom","maxZoom","nodeExtent","onNodesChange","onEdgesChange","elementsSelectable","connectionMode","snapGrid","snapToGrid","translateExtent","connectOnClick","defaultEdgeOptions","fitView","fitViewOptions","onNodesDelete","onEdgesDelete","onDelete","onNodeDrag","onNodeDragStart","onNodeDragStop","onSelectionDrag","onSelectionDragStart","onSelectionDragStop","onMoveStart","onMove","onMoveEnd","noPanClassName","nodeOrigin","autoPanOnConnect","autoPanOnNodeDrag","onError","connectionRadius","isValidConnection","selectNodesOnDrag","nodeDragThreshold","connectionDragThreshold","onBeforeDelete","debug","autoPanSpeed","ariaLabelConfig","zIndexMode"],Lh=[...fS,"rfId"],hS=t=>({setNodes:t.setNodes,setEdges:t.setEdges,setMinZoom:t.setMinZoom,setMaxZoom:t.setMaxZoom,setTranslateExtent:t.setTranslateExtent,setNodeExtent:t.setNodeExtent,reset:t.reset,setDefaultNodesAndEdges:t.setDefaultNodesAndEdges}),Ah={translateExtent:pi,nodeOrigin:Eg,minZoom:.5,maxZoom:2,elementsSelectable:!0,noPanClassName:"nopan",rfId:"1"};function pS(t){const{setNodes:r,setEdges:i,setMinZoom:l,setMaxZoom:a,setTranslateExtent:u,setNodeExtent:d,reset:f,setDefaultNodesAndEdges:p}=Re(hS,Ue),y=Oe();O.useEffect(()=>(p(t.defaultNodes,t.defaultEdges),()=>{m.current=Ah,f()}),[]);const m=O.useRef(Ah);return O.useEffect(()=>{for(const x of Lh){const v=t[x],S=m.current[x];v!==S&&(typeof t[x]>"u"||(x==="nodes"?r(v):x==="edges"?i(v):x==="minZoom"?l(v):x==="maxZoom"?a(v):x==="translateExtent"?u(v):x==="nodeExtent"?d(v):x==="ariaLabelConfig"?y.setState({ariaLabelConfig:Zw(v)}):x==="fitView"?y.setState({fitViewQueued:v}):x==="fitViewOptions"?y.setState({fitViewOptions:v}):y.setState({[x]:v})))}m.current=t},Lh.map(x=>t[x])),null}function Dh(){return typeof window>"u"||!window.matchMedia?null:window.matchMedia("(prefers-color-scheme: dark)")}function gS(t){var l;const[r,i]=O.useState(t==="system"?null:t);return O.useEffect(()=>{if(t!=="system"){i(t);return}const a=Dh(),u=()=>i(a!=null&&a.matches?"dark":"light");return u(),a==null||a.addEventListener("change",u),()=>{a==null||a.removeEventListener("change",u)}},[t]),r!==null?r:(l=Dh())!=null&&l.matches?"dark":"light"}const $h=typeof document<"u"?document:null;function xi(t=null,r={target:$h,actInsideInputWithModifier:!0}){const[i,l]=O.useState(!1),a=O.useRef(!1),u=O.useRef(new Set([])),[d,f]=O.useMemo(()=>{if(t!==null){const y=(Array.isArray(t)?t:[t]).filter(x=>typeof x=="string").map(x=>x.replace(/\+/g,` -`).replace(` - -`,` -+`).split(` -`)),m=y.reduce((x,v)=>x.concat(...v),[]);return[y,m]}return[[],[]]},[t]);return O.useEffect(()=>{const p=(r==null?void 0:r.target)??$h,y=(r==null?void 0:r.actInsideInputWithModifier)??!0;if(t!==null){const m=S=>{var E,N;if(a.current=S.ctrlKey||S.metaKey||S.shiftKey||S.altKey,(!a.current||a.current&&!y)&&rg(S))return!1;const C=Fh(S.code,f);if(u.current.add(S[C]),Oh(d,u.current,!1)){const R=((N=(E=S.composedPath)==null?void 0:E.call(S))==null?void 0:N[0])||S.target,k=(R==null?void 0:R.nodeName)==="BUTTON"||(R==null?void 0:R.nodeName)==="A";r.preventDefault!==!1&&(a.current||!k)&&S.preventDefault(),l(!0)}},x=S=>{const _=Fh(S.code,f);Oh(d,u.current,!0)?(l(!1),u.current.clear()):u.current.delete(S[_]),S.key==="Meta"&&u.current.clear(),a.current=!1},v=()=>{u.current.clear(),l(!1)};return p==null||p.addEventListener("keydown",m),p==null||p.addEventListener("keyup",x),window.addEventListener("blur",v),window.addEventListener("contextmenu",v),()=>{p==null||p.removeEventListener("keydown",m),p==null||p.removeEventListener("keyup",x),window.removeEventListener("blur",v),window.removeEventListener("contextmenu",v)}}},[t,l]),i}function Oh(t,r,i){return t.filter(l=>i||l.length===r.size).some(l=>l.every(a=>r.has(a)))}function Fh(t,r){return r.includes(t)?"code":"key"}const mS=()=>{const t=Oe();return O.useMemo(()=>({zoomIn:async r=>{const{panZoom:i}=t.getState();return i?i.scaleBy(1.2,r):!1},zoomOut:async r=>{const{panZoom:i}=t.getState();return i?i.scaleBy(1/1.2,r):!1},zoomTo:async(r,i)=>{const{panZoom:l}=t.getState();return l?l.scaleTo(r,i):!1},getZoom:()=>t.getState().transform[2],setViewport:async(r,i)=>{const{transform:[l,a,u],panZoom:d}=t.getState();return d?(await d.setViewport({x:r.x??l,y:r.y??a,zoom:r.zoom??u},i),!0):!1},getViewport:()=>{const[r,i,l]=t.getState().transform;return{x:r,y:i,zoom:l}},setCenter:async(r,i,l)=>t.getState().setCenter(r,i,l),fitBounds:async(r,i)=>{const{width:l,height:a,minZoom:u,maxZoom:d,panZoom:f}=t.getState(),p=sc(r,l,a,u,d,(i==null?void 0:i.padding)??.1);return f?(await f.setViewport(p,{duration:i==null?void 0:i.duration,ease:i==null?void 0:i.ease,interpolate:i==null?void 0:i.interpolate}),!0):!1},screenToFlowPosition:(r,i={})=>{const{transform:l,snapGrid:a,snapToGrid:u,domNode:d}=t.getState();if(!d)return r;const{x:f,y:p}=d.getBoundingClientRect(),y={x:r.x-f,y:r.y-p},m=i.snapGrid??a,x=i.snapToGrid??u;return Ci(y,l,x,m)},flowToScreenPosition:r=>{const{transform:i,domNode:l}=t.getState();if(!l)return r;const{x:a,y:u}=l.getBoundingClientRect(),d=mo(r,i);return{x:d.x+a,y:d.y+u}}}),[])};function Ng(t,r){const i=[],l=new Map,a=[];for(const u of t)if(u.type==="add"){a.push(u);continue}else if(u.type==="remove"||u.type==="replace")l.set(u.id,[u]);else{const d=l.get(u.id);d?d.push(u):l.set(u.id,[u])}for(const u of r){const d=l.get(u.id);if(!d){i.push(u);continue}if(d[0].type==="remove")continue;if(d[0].type==="replace"){i.push({...d[0].item});continue}const f={...u};for(const p of d)yS(p,f);i.push(f)}return a.length&&a.forEach(u=>{u.index!==void 0?i.splice(u.index,0,{...u.item}):i.push({...u.item})}),i}function yS(t,r){switch(t.type){case"select":{r.selected=t.selected;break}case"position":{typeof t.position<"u"&&(r.position=t.position),typeof t.dragging<"u"&&(r.dragging=t.dragging);break}case"dimensions":{typeof t.dimensions<"u"&&(r.measured={...t.dimensions},t.setAttributes&&((t.setAttributes===!0||t.setAttributes==="width")&&(r.width=t.dimensions.width),(t.setAttributes===!0||t.setAttributes==="height")&&(r.height=t.dimensions.height))),typeof t.resizing=="boolean"&&(r.resizing=t.resizing);break}}}function vS(t,r){return Ng(t,r)}function xS(t,r){return Ng(t,r)}function wr(t,r){return{id:t,type:"select",selected:r}}function ao(t,r=new Set,i=!1){const l=[];for(const[a,u]of t){const d=r.has(a);!(u.selected===void 0&&!d)&&u.selected!==d&&(i&&(u.selected=d),l.push(wr(u.id,d)))}return l}function Hh({items:t=[],lookup:r}){var a;const i=[],l=new Map(t.map(u=>[u.id,u]));for(const[u,d]of t.entries()){const f=r.get(d.id),p=((a=f==null?void 0:f.internals)==null?void 0:a.userNode)??f;p!==void 0&&p!==d&&i.push({id:d.id,item:d,type:"replace"}),p===void 0&&i.push({item:d,type:"add",index:u})}for(const[u]of r)l.get(u)===void 0&&i.push({id:u,type:"remove"});return i}function Bh(t){return{id:t.id,type:"remove"}}const wS=Jp();function SS(t,r,i={}){return o1(t,r,{...i,onError:i.onError??wS})}const Vh=t=>Vw(t),_S=t=>Gp(t);function Cg(t){return O.forwardRef(t)}const jg=typeof window<"u"?O.useLayoutEffect:O.useEffect;function Uh(t){const[r,i]=O.useState(BigInt(0)),[l]=O.useState(()=>kS(()=>i(a=>a+BigInt(1))));return jg(()=>{const a=l.get();a.length&&(t(a),l.reset())},[r]),l}function kS(t){let r=[];return{get:()=>r,reset:()=>{r=[]},push:i=>{r.push(i),t()}}}const Mg=O.createContext(null);function ES({children:t}){const r=Oe(),i=O.useCallback(f=>{const{nodes:p=[],setNodes:y,hasDefaultNodes:m,onNodesChange:x,nodeLookup:v,fitViewQueued:S,onNodesChangeMiddlewareMap:_}=r.getState();let C=p;for(const N of f)C=typeof N=="function"?N(C):N;let E=Hh({items:C,lookup:v});for(const N of _.values())E=N(E);m&&y(C),E.length>0?x==null||x(E):S&&window.requestAnimationFrame(()=>{const{fitViewQueued:N,nodes:R,setNodes:k}=r.getState();N&&k(R)})},[]),l=Uh(i),a=O.useCallback(f=>{const{edges:p=[],setEdges:y,hasDefaultEdges:m,onEdgesChange:x,edgeLookup:v}=r.getState();let S=p;for(const _ of f)S=typeof _=="function"?_(S):_;m?y(S):x&&x(Hh({items:S,lookup:v}))},[]),u=Uh(a),d=O.useMemo(()=>({nodeQueue:l,edgeQueue:u}),[]);return g.jsx(Mg.Provider,{value:d,children:t})}function NS(){const t=O.useContext(Mg);if(!t)throw new Error("useBatchContext must be used within a BatchProvider");return t}const CS=t=>!!t.panZoom;function hc(){const t=mS(),r=Oe(),i=NS(),l=Re(CS),a=O.useMemo(()=>{const u=x=>r.getState().nodeLookup.get(x),d=x=>{i.nodeQueue.push(x)},f=x=>{i.edgeQueue.push(x)},p=x=>{var N,R;const{nodeLookup:v,nodeOrigin:S}=r.getState(),_=Vh(x)?x:v.get(x.id),C=_.parentId?tg(_.position,_.measured,_.parentId,v,S):_.position,E={..._,position:C,width:((N=_.measured)==null?void 0:N.width)??_.width,height:((R=_.measured)==null?void 0:R.height)??_.height};return yi(E)},y=(x,v,S={replace:!1})=>{d(_=>_.map(C=>{if(C.id===x){const E=typeof v=="function"?v(C):v;return S.replace&&Vh(E)?E:{...C,...E}}return C}))},m=(x,v,S={replace:!1})=>{f(_=>_.map(C=>{if(C.id===x){const E=typeof v=="function"?v(C):v;return S.replace&&_S(E)?E:{...C,...E}}return C}))};return{getNodes:()=>r.getState().nodes.map(x=>({...x})),getNode:x=>{var v;return(v=u(x))==null?void 0:v.internals.userNode},getInternalNode:u,getEdges:()=>{const{edges:x=[]}=r.getState();return x.map(v=>({...v}))},getEdge:x=>r.getState().edgeLookup.get(x),setNodes:d,setEdges:f,addNodes:x=>{const v=Array.isArray(x)?x:[x];i.nodeQueue.push(S=>[...S,...v])},addEdges:x=>{const v=Array.isArray(x)?x:[x];i.edgeQueue.push(S=>[...S,...v])},toObject:()=>{const{nodes:x=[],edges:v=[],transform:S}=r.getState(),[_,C,E]=S;return{nodes:x.map(N=>({...N})),edges:v.map(N=>({...N})),viewport:{x:_,y:C,zoom:E}}},deleteElements:async({nodes:x=[],edges:v=[]})=>{const{nodes:S,edges:_,onNodesDelete:C,onEdgesDelete:E,triggerNodeChanges:N,triggerEdgeChanges:R,onDelete:k,onBeforeDelete:j}=r.getState(),{nodes:z,edges:D}=await Gw({nodesToRemove:x,edgesToRemove:v,nodes:S,edges:_,onBeforeDelete:j}),B=D.length>0,H=z.length>0;if(B){const X=D.map(Bh);E==null||E(D),R(X)}if(H){const X=z.map(Bh);C==null||C(z),N(X)}return(H||B)&&(k==null||k({nodes:z,edges:D})),{deletedNodes:z,deletedEdges:D}},getIntersectingNodes:(x,v=!0,S)=>{const _=ph(x),C=_?x:p(x),E=S!==void 0;return C?(S||r.getState().nodes).filter(N=>{const R=r.getState().nodeLookup.get(N.id);if(R&&!_&&(N.id===x.id||!R.internals.positionAbsolute))return!1;const k=yi(E?N:R),j=dl(k,C);return v&&j>0||j>=k.width*k.height||j>=C.width*C.height}):[]},isNodeIntersecting:(x,v,S=!0)=>{const C=ph(x)?x:p(x);if(!C)return!1;const E=dl(C,v);return S&&E>0||E>=v.width*v.height||E>=C.width*C.height},updateNode:y,updateNodeData:(x,v,S={replace:!1})=>{y(x,_=>{const C=typeof v=="function"?v(_):v;return S.replace?{..._,data:C}:{..._,data:{..._.data,...C}}},S)},updateEdge:m,updateEdgeData:(x,v,S={replace:!1})=>{m(x,_=>{const C=typeof v=="function"?v(_):v;return S.replace?{..._,data:C}:{..._,data:{..._.data,...C}}},S)},getNodesBounds:x=>{const{nodeLookup:v,nodeOrigin:S}=r.getState();return Uw(x,{nodeLookup:v,nodeOrigin:S})},getHandleConnections:({type:x,id:v,nodeId:S})=>{var _;return Array.from(((_=r.getState().connectionLookup.get(`${S}-${x}${v?`-${v}`:""}`))==null?void 0:_.values())??[])},getNodeConnections:({type:x,handleId:v,nodeId:S})=>{var _;return Array.from(((_=r.getState().connectionLookup.get(`${S}${x?v?`-${x}-${v}`:`-${x}`:""}`))==null?void 0:_.values())??[])},fitView:async x=>{const v=r.getState().fitViewResolver??qw();return r.setState({fitViewQueued:!0,fitViewOptions:x,fitViewResolver:v}),i.nodeQueue.push(S=>[...S]),v.promise}}},[]);return O.useMemo(()=>({...a,...t,viewportInitialized:l}),[l])}const Wh=t=>t.selected,jS=typeof window<"u"?window:void 0;function MS({deleteKeyCode:t,multiSelectionKeyCode:r}){const i=Oe(),{deleteElements:l}=hc(),a=xi(t,{actInsideInputWithModifier:!1}),u=xi(r,{target:jS});O.useEffect(()=>{if(a){const{edges:d,nodes:f}=i.getState();l({nodes:f.filter(Wh),edges:d.filter(Wh)}),i.setState({nodesSelectionActive:!1})}},[a]),O.useEffect(()=>{i.setState({multiSelectionActive:u})},[u])}function PS(t){const r=Oe();O.useEffect(()=>{const i=()=>{var a,u,d,f;if(!t.current||!(((u=(a=t.current).checkVisibility)==null?void 0:u.call(a))??!0))return!1;const l=lc(t.current);(l.height===0||l.width===0)&&((f=(d=r.getState()).onError)==null||f.call(d,"004",tn.error004())),r.setState({width:l.width||500,height:l.height||500})};if(t.current){i(),window.addEventListener("resize",i);const l=new ResizeObserver(()=>i());return l.observe(t.current),()=>{window.removeEventListener("resize",i),l&&t.current&&l.unobserve(t.current)}}},[])}const El={position:"absolute",width:"100%",height:"100%",top:0,left:0},IS=t=>({userSelectionActive:t.userSelectionActive,lib:t.lib,connectionInProgress:t.connection.inProgress});function RS({onPaneContextMenu:t,zoomOnScroll:r=!0,zoomOnPinch:i=!0,panOnScroll:l=!1,panActivationKeyPressed:a,panOnScrollSpeed:u=.5,panOnScrollMode:d=kr.Free,zoomOnDoubleClick:f=!0,panOnDrag:p=!0,defaultViewport:y,translateExtent:m,minZoom:x,maxZoom:v,zoomActivationKeyCode:S,preventScrolling:_=!0,children:C,noWheelClassName:E,noPanClassName:N,onViewportChange:R,isControlledViewport:k,paneClickDistance:j,selectionOnDrag:z}){const D=Oe(),B=O.useRef(null),{userSelectionActive:H,lib:X,connectionInProgress:ee}=Re(IS,Ue),Z=xi(S),te=O.useRef();PS(B);const J=O.useCallback(M=>{R==null||R({x:M[0],y:M[1],zoom:M[2]}),k||D.setState({transform:M})},[R,k]);return O.useEffect(()=>{if(B.current){te.current=z1({domNode:B.current,minZoom:x,maxZoom:v,translateExtent:m,viewport:y,onDraggingChange:U=>D.setState(A=>A.paneDragging===U?A:{paneDragging:U}),onPanZoomStart:(U,A)=>{const{onViewportChangeStart:L,onMoveStart:F}=D.getState();F==null||F(U,A),L==null||L(A)},onPanZoom:(U,A)=>{const{onViewportChange:L,onMove:F}=D.getState();F==null||F(U,A),L==null||L(A)},onPanZoomEnd:(U,A)=>{const{onViewportChangeEnd:L,onMoveEnd:F}=D.getState();F==null||F(U,A),L==null||L(A)}});const{x:M,y:W,zoom:V}=te.current.getViewport();return D.setState({panZoom:te.current,transform:[M,W,V],domNode:B.current.closest(".react-flow")}),()=>{var U;(U=te.current)==null||U.destroy()}}},[]),O.useEffect(()=>{var M;(M=te.current)==null||M.update({onPaneContextMenu:t,zoomOnScroll:r,zoomOnPinch:i,panOnScroll:l,panActivationKeyPressed:a,panOnScrollSpeed:u,panOnScrollMode:d,zoomOnDoubleClick:f,panOnDrag:p,zoomActivationKeyPressed:Z,preventScrolling:_,noPanClassName:N,userSelectionActive:H,noWheelClassName:E,lib:X,onTransformChange:J,connectionInProgress:ee,selectionOnDrag:z,paneClickDistance:j})},[t,r,i,l,a,u,d,f,p,Z,_,N,H,E,X,J,ee,z,j]),g.jsx("div",{className:"react-flow__renderer",ref:B,style:El,children:C})}const TS=t=>({userSelectionActive:t.userSelectionActive,userSelectionRect:t.userSelectionRect});function bS(){const{userSelectionActive:t,userSelectionRect:r}=Re(TS,Ue);return t&&r?g.jsx("div",{className:"react-flow__selection react-flow__container",style:{width:r.width,height:r.height,transform:`translate(${r.x}px, ${r.y}px)`}}):null}const Tu=(t,r)=>i=>{i.target===r.current&&(t==null||t(i))},zS=t=>({userSelectionActive:t.userSelectionActive,elementsSelectable:t.elementsSelectable,dragging:t.paneDragging,panBy:t.panBy,autoPanSpeed:t.autoPanSpeed});function LS({isSelecting:t,selectionKeyPressed:r,selectionMode:i=gi.Full,panOnDrag:l,autoPanOnSelection:a,paneClickDistance:u,selectionOnDrag:d,onSelectionStart:f,onSelectionEnd:p,onPaneClick:y,onPaneContextMenu:m,onPaneScroll:x,onPaneMouseEnter:v,onPaneMouseMove:S,onPaneMouseLeave:_,children:C}){const E=O.useRef(0),N=Oe(),{userSelectionActive:R,elementsSelectable:k,dragging:j,panBy:z,autoPanSpeed:D}=Re(zS,Ue),B=k&&(t||R),H=O.useRef(null),X=O.useRef(),ee=O.useRef(new Set),Z=O.useRef(new Set),te=O.useRef(!1),J=O.useRef(!1),M=O.useRef({x:0,y:0}),W=O.useRef(!1),V=Q=>{if(J.current||te.current||N.getState().connection.inProgress){J.current=!1,te.current=!1;return}y==null||y(Q),N.getState().resetSelectedElements(),N.setState({nodesSelectionActive:!1})},U=Q=>{if(Array.isArray(l)&&(l!=null&&l.includes(2))){Q.preventDefault();return}m==null||m(Q)},A=x?Q=>x(Q):void 0,L=Q=>{J.current&&(Q.stopPropagation(),J.current=!1)},F=Q=>{var be,Xe;if(Q.pointerType==="touch"&&l!==!1&&!r)return;const{domNode:se,transform:fe}=N.getState();if(X.current=se==null?void 0:se.getBoundingClientRect(),!X.current)return;const ge=Q.target===H.current;if(!ge&&!!Q.target.closest(".nokey")||!t||!(d&&ge||r)||Q.button!==0||!Q.isPrimary)return;(Xe=(be=Q.target)==null?void 0:be.setPointerCapture)==null||Xe.call(be,Q.pointerId),J.current=!1;const{x:Ce,y:je}=en(Q.nativeEvent,X.current),Me=Ci({x:Ce,y:je},fe);N.setState({userSelectionRect:{width:0,height:0,startX:Me.x,startY:Me.y,x:Ce,y:je}}),ge||(Q.stopPropagation(),Q.preventDefault())};function P(Q,se){const{userSelectionRect:fe}=N.getState();if(!fe)return;const{transform:ge,nodeLookup:xe,edgeLookup:pe,connectionLookup:Ce,triggerNodeChanges:je,triggerEdgeChanges:Me,defaultEdgeOptions:be}=N.getState(),Xe={x:fe.startX,y:fe.startY},{x:rt,y:Ze}=mo(Xe,ge),Je={startX:Xe.x,startY:Xe.y,x:Qlt.id)),Z.current=new Set;const At=(be==null?void 0:be.selectable)??!0;for(const lt of ee.current){const ht=Ce.get(lt);if(ht)for(const{edgeId:ot}of ht.values()){const pt=pe.get(ot);pt&&(pt.selectable??At)&&Z.current.add(ot)}}if(!gh(Vt,ee.current)){const lt=ao(xe,ee.current,!0);je(lt)}if(!gh(Lt,Z.current)){const lt=ao(pe,Z.current);Me(lt)}N.setState({userSelectionRect:Je,userSelectionActive:!0,nodesSelectionActive:!1})}function T(){if(!a||!X.current)return;const[Q,se]=ic(M.current,X.current,D);z({x:Q,y:se}).then(fe=>{if(!J.current||!fe){E.current=requestAnimationFrame(T);return}const{x:ge,y:xe}=M.current;P(ge,xe),E.current=requestAnimationFrame(T)})}const ne=()=>{cancelAnimationFrame(E.current),E.current=0,W.current=!1};O.useEffect(()=>()=>ne(),[]);const re=Q=>{const{userSelectionRect:se,transform:fe,resetSelectedElements:ge}=N.getState();if(!X.current||!se)return;const{x:xe,y:pe}=en(Q.nativeEvent,X.current);M.current={x:xe,y:pe};const Ce=mo({x:se.startX,y:se.startY},fe);if(!J.current){const je=r?0:u;if(Math.hypot(xe-Ce.x,pe-Ce.y)<=je)return;ge(),f==null||f(Q)}J.current=!0,W.current||(T(),W.current=!0),P(xe,pe)},ue=Q=>{var se,fe;if(!B){Q.target===H.current&&N.getState().connection.inProgress&&(te.current=!0);return}Q.button===0&&((fe=(se=Q.target)==null?void 0:se.releasePointerCapture)==null||fe.call(se,Q.pointerId),!R&&Q.target===H.current&&N.getState().userSelectionRect&&(V==null||V(Q)),N.setState({userSelectionActive:!1,userSelectionRect:null}),J.current&&(p==null||p(Q),N.setState({nodesSelectionActive:ee.current.size>0})),ne())},ce=Q=>{var se,fe;(fe=(se=Q.target)==null?void 0:se.releasePointerCapture)==null||fe.call(se,Q.pointerId),ne()},de=l===!0||Array.isArray(l)&&l.includes(0);return g.jsxs("div",{className:Qe(["react-flow__pane",{draggable:de,dragging:j,selection:t}]),onClick:B?void 0:Tu(V,H),onContextMenu:Tu(U,H),onWheel:Tu(A,H),onPointerEnter:B?void 0:v,onPointerMove:B?re:S,onPointerUp:ue,onPointerCancel:B?ce:void 0,onPointerDownCapture:B?F:void 0,onClickCapture:B?L:void 0,onPointerLeave:_,ref:H,style:El,children:[C,g.jsx(bS,{})]})}function Gu({id:t,store:r,unselect:i=!1,nodeRef:l}){const{addSelectedNodes:a,unselectNodesAndEdges:u,multiSelectionActive:d,nodeLookup:f,onError:p}=r.getState(),y=f.get(t);if(!y){p==null||p("012",tn.error012(t));return}r.setState({nodesSelectionActive:!1}),y.selected?(i||y.selected&&d)&&(u({nodes:[y],edges:[]}),requestAnimationFrame(()=>{var m;return(m=l==null?void 0:l.current)==null?void 0:m.blur()})):a([t])}function Pg({nodeRef:t,disabled:r=!1,noDragClassName:i,handleSelector:l,nodeId:a,isSelectable:u,nodeClickDistance:d}){const f=Oe(),[p,y]=O.useState(!1),m=O.useRef();return O.useEffect(()=>{if(!r)return m.current=w1({getStoreItems:()=>f.getState(),onNodeMouseDown:x=>{Gu({id:x,store:f,nodeRef:t})},onDragStart:()=>{y(!0)},onDragStop:()=>{y(!1)}}),()=>{var x;(x=m.current)==null||x.destroy(),m.current=void 0}},[r,f,t]),O.useEffect(()=>{r||!t.current||!m.current||m.current.update({noDragClassName:i,handleSelector:l,domNode:t.current,isSelectable:u,nodeId:a,nodeClickDistance:d})},[i,l,r,u,t,a,d]),p}const AS=t=>r=>r.selected&&(r.draggable||t&&typeof r.draggable>"u");function Ig(){const t=Oe();return O.useCallback(i=>{const{nodeExtent:l,snapToGrid:a,snapGrid:u,nodesDraggable:d,onError:f,updateNodePositions:p,nodeLookup:y,nodeOrigin:m}=t.getState(),x=new Map,v=AS(d),S=a?u[0]:5,_=a?u[1]:5,C=i.direction.x*S*i.factor,E=i.direction.y*_*i.factor;for(const[,N]of y){if(!v(N))continue;let R={x:N.internals.positionAbsolute.x+C,y:N.internals.positionAbsolute.y+E};a&&(R=Ni(R,u));const{position:k,positionAbsolute:j}=Qp({nodeId:N.id,nextPosition:R,nodeLookup:y,nodeExtent:l,nodeOrigin:m,onError:f});N.position=k,N.internals.positionAbsolute=j,x.set(N.id,N)}p(x)},[])}const pc=O.createContext(null),DS=pc.Provider;pc.Consumer;const Rg=()=>O.useContext(pc),$S=t=>({connectOnClick:t.connectOnClick,noPanClassName:t.noPanClassName,rfId:t.rfId}),Tg=O.createContext(null);function OS({children:t}){const r=Re($S,Ue);return g.jsx(Tg.Provider,{value:r,children:t})}function FS(){const t=O.useContext(Tg);if(!t)throw new Error("useHandleConfig must be used within a HandleConfigProvider");return t}const HS={connectingFrom:!1,connectingTo:!1,clickConnecting:!1,isPossibleEndHandle:!0,connectionInProcess:!1,clickConnectionInProcess:!1,valid:!1},BS=(t,r,i)=>l=>{const{connectionClickStartHandle:a,connectionMode:u,connection:d}=l,{fromHandle:f,toHandle:p,isValid:y}=d;if(!f&&!a)return HS;const m=(p==null?void 0:p.nodeId)===t&&(p==null?void 0:p.id)===r&&(p==null?void 0:p.type)===i;return{connectingFrom:(f==null?void 0:f.nodeId)===t&&(f==null?void 0:f.id)===r&&(f==null?void 0:f.type)===i,connectingTo:m,clickConnecting:(a==null?void 0:a.nodeId)===t&&(a==null?void 0:a.id)===r&&(a==null?void 0:a.type)===i,isPossibleEndHandle:u===po.Strict?(f==null?void 0:f.type)!==i:t!==(f==null?void 0:f.nodeId)||r!==(f==null?void 0:f.id),connectionInProcess:!!f,clickConnectionInProcess:!!a,valid:m&&y}};function VS({type:t="source",position:r=_e.Top,isValidConnection:i,isConnectable:l=!0,isConnectableStart:a=!0,isConnectableEnd:u=!0,id:d,onConnect:f,children:p,className:y,onMouseDown:m,onTouchStart:x,...v},S){var W,V;const _=d||null,C=t==="target",E=Oe(),N=Rg(),{connectOnClick:R,noPanClassName:k,rfId:j}=FS(),{connectingFrom:z,connectingTo:D,clickConnecting:B,isPossibleEndHandle:H,connectionInProcess:X,clickConnectionInProcess:ee,valid:Z}=Re(BS(N,_,t),Ue);N||(V=(W=E.getState()).onError)==null||V.call(W,"010",tn.error010());const te=U=>{const{defaultEdgeOptions:A,onConnect:L,hasDefaultEdges:F}=E.getState(),P={...A,...U};if(F){const{edges:T,setEdges:ne,onError:re}=E.getState();ne(SS(P,T,{onError:re}))}L==null||L(P),f==null||f(P)},J=U=>{if(!N)return;const A=og(U.nativeEvent);if(a&&(A&&U.button===0||!A)){const L=E.getState();Xu.onPointerDown(U.nativeEvent,{handleDomNode:U.currentTarget,autoPanOnConnect:L.autoPanOnConnect,connectionMode:L.connectionMode,connectionRadius:L.connectionRadius,domNode:L.domNode,nodeLookup:L.nodeLookup,lib:L.lib,isTarget:C,handleId:_,nodeId:N,flowId:L.rfId,panBy:L.panBy,cancelConnection:L.cancelConnection,onConnectStart:L.onConnectStart,onConnectEnd:(...F)=>{var P,T;return(T=(P=E.getState()).onConnectEnd)==null?void 0:T.call(P,...F)},updateConnection:L.updateConnection,onConnect:te,isValidConnection:i||((...F)=>{var P,T;return((T=(P=E.getState()).isValidConnection)==null?void 0:T.call(P,...F))??!0}),getTransform:()=>E.getState().transform,getFromHandle:()=>E.getState().connection.fromHandle,autoPanSpeed:L.autoPanSpeed,dragThreshold:L.connectionDragThreshold})}A?m==null||m(U):x==null||x(U)},M=U=>{const{onClickConnectStart:A,onClickConnectEnd:L,connectionClickStartHandle:F,connectionMode:P,isValidConnection:T,lib:ne,rfId:re,nodeLookup:ue,connection:ce}=E.getState();if(!N||!F&&!a)return;if(!F){A==null||A(U.nativeEvent,{nodeId:N,handleId:_,handleType:t}),E.setState({connectionClickStartHandle:{nodeId:N,type:t,id:_}});return}const de=ng(U.target),Q=i||T,{connection:se,isValid:fe}=Xu.isValid(U.nativeEvent,{handle:{nodeId:N,id:_,type:t},connectionMode:P,fromNodeId:F.nodeId,fromHandleId:F.id||null,fromType:F.type,isValidConnection:Q,flowId:re,doc:de,lib:ne,nodeLookup:ue});fe&&se&&te(se);const ge=structuredClone(ce);delete ge.inProgress,ge.toPosition=ge.toHandle?ge.toHandle.position:null,L==null||L(U,ge),E.setState({connectionClickStartHandle:null})};return g.jsx("div",{"data-handleid":_,"data-nodeid":N,"data-handlepos":r,"data-id":`${j}-${N}-${_}-${t}`,className:Qe(["react-flow__handle",`react-flow__handle-${r}`,"nodrag",k,y,{source:!C,target:C,connectable:l,connectablestart:a,connectableend:u,clickconnecting:B,connectingfrom:z,connectingto:D,valid:Z,connectionindicator:l&&(!X||H)&&(X||ee?u:a)}]),onMouseDown:J,onTouchStart:J,onClick:R?M:void 0,ref:S,...v,children:p})}const vo=O.memo(Cg(VS));function US({data:t,isConnectable:r,sourcePosition:i=_e.Bottom}){return g.jsxs(g.Fragment,{children:[t==null?void 0:t.label,g.jsx(vo,{type:"source",position:i,isConnectable:r})]})}function WS({data:t,isConnectable:r,targetPosition:i=_e.Top,sourcePosition:l=_e.Bottom}){return g.jsxs(g.Fragment,{children:[g.jsx(vo,{type:"target",position:i,isConnectable:r}),t==null?void 0:t.label,g.jsx(vo,{type:"source",position:l,isConnectable:r})]})}function YS(){return null}function XS({data:t,isConnectable:r,targetPosition:i=_e.Top}){return g.jsxs(g.Fragment,{children:[g.jsx(vo,{type:"target",position:i,isConnectable:r}),t==null?void 0:t.label]})}const fl={ArrowUp:{x:0,y:-1},ArrowDown:{x:0,y:1},ArrowLeft:{x:-1,y:0},ArrowRight:{x:1,y:0}},Yh={input:US,default:WS,output:XS,group:YS};function GS(t){var r,i,l,a;return t.internals.handleBounds===void 0?{width:t.width??t.initialWidth??((r=t.style)==null?void 0:r.width),height:t.height??t.initialHeight??((i=t.style)==null?void 0:i.height)}:{width:t.width??((l=t.style)==null?void 0:l.width),height:t.height??((a=t.style)==null?void 0:a.height)}}const QS=t=>{const{width:r,height:i,x:l,y:a}=Ei(t.nodeLookup,{filter:u=>!!u.selected});return{width:Jt(r)?r:null,height:Jt(i)?i:null,userSelectionActive:t.userSelectionActive,transformString:`translate(${t.transform[0]}px,${t.transform[1]}px) scale(${t.transform[2]}) translate(${l}px,${a}px)`}};function KS({onSelectionContextMenu:t,noPanClassName:r,disableKeyboardA11y:i}){const l=Oe(),{width:a,height:u,transformString:d,userSelectionActive:f}=Re(QS,Ue),p=Ig(),y=O.useRef(null);O.useEffect(()=>{var S;i||(S=y.current)==null||S.focus({preventScroll:!0})},[i]);const m=!f&&a!==null&&u!==null;if(Pg({nodeRef:y,disabled:!m}),!m)return null;const x=t?S=>{const _=l.getState().nodes.filter(C=>C.selected);t(S,_)}:void 0,v=S=>{Object.prototype.hasOwnProperty.call(fl,S.key)&&(S.preventDefault(),p({direction:fl[S.key],factor:S.shiftKey?4:1}))};return g.jsx("div",{className:Qe(["react-flow__nodesselection","react-flow__container",r]),style:{transform:d},children:g.jsx("div",{ref:y,className:"react-flow__nodesselection-rect",onContextMenu:x,tabIndex:i?void 0:-1,onKeyDown:i?void 0:v,style:{width:a,height:u}})})}const Xh=typeof window<"u"?window:void 0,qS=t=>({nodesSelectionActive:t.nodesSelectionActive,userSelectionActive:t.userSelectionActive});function bg({children:t,onPaneClick:r,onPaneMouseEnter:i,onPaneMouseMove:l,onPaneMouseLeave:a,onPaneContextMenu:u,onPaneScroll:d,paneClickDistance:f,deleteKeyCode:p,selectionKeyCode:y,selectionOnDrag:m,selectionMode:x,onSelectionStart:v,onSelectionEnd:S,multiSelectionKeyCode:_,panActivationKeyCode:C,zoomActivationKeyCode:E,elementsSelectable:N,zoomOnScroll:R,zoomOnPinch:k,panOnScroll:j,panOnScrollSpeed:z,panOnScrollMode:D,zoomOnDoubleClick:B,panOnDrag:H,autoPanOnSelection:X,defaultViewport:ee,translateExtent:Z,minZoom:te,maxZoom:J,preventScrolling:M,onSelectionContextMenu:W,noWheelClassName:V,noPanClassName:U,disableKeyboardA11y:A,onViewportChange:L,isControlledViewport:F}){const{nodesSelectionActive:P,userSelectionActive:T}=Re(qS,Ue),ne=xi(y,{target:Xh}),re=xi(C,{target:Xh}),ue=re||H,ce=re||j,de=m&&ue!==!0,Q=ne||T||de;return MS({deleteKeyCode:p,multiSelectionKeyCode:_}),g.jsx(RS,{onPaneContextMenu:u,elementsSelectable:N,zoomOnScroll:R,zoomOnPinch:k,panOnScroll:ce,panActivationKeyPressed:re,panOnScrollSpeed:z,panOnScrollMode:D,zoomOnDoubleClick:B,panOnDrag:!ne&&ue,defaultViewport:ee,translateExtent:Z,minZoom:te,maxZoom:J,zoomActivationKeyCode:E,preventScrolling:M,noWheelClassName:V,noPanClassName:U,onViewportChange:L,isControlledViewport:F,paneClickDistance:f,selectionOnDrag:de,children:g.jsxs(LS,{onSelectionStart:v,onSelectionEnd:S,onPaneClick:r,onPaneMouseEnter:i,onPaneMouseMove:l,onPaneMouseLeave:a,onPaneContextMenu:u,onPaneScroll:d,panOnDrag:ue,autoPanOnSelection:X,isSelecting:!!Q,selectionMode:x,selectionKeyPressed:ne,paneClickDistance:f,selectionOnDrag:de,children:[t,P&&g.jsx(KS,{onSelectionContextMenu:W,noPanClassName:U,disableKeyboardA11y:A})]})})}bg.displayName="FlowRenderer";const ZS=O.memo(bg),JS=t=>r=>t?oc(r.nodeLookup,{x:0,y:0,width:r.width,height:r.height},r.transform,!0).map(i=>i.id):Array.from(r.nodeLookup.keys());function e_(t){return Re(O.useCallback(JS(t),[t]),Ue)}const t_=t=>t.updateNodeInternals;function n_(){const t=Re(t_),[r]=O.useState(()=>typeof ResizeObserver>"u"?null:new ResizeObserver(i=>{const l=new Map;i.forEach(a=>{const u=a.target.getAttribute("data-id");l.set(u,{id:u,nodeElement:a.target,force:!0})}),t(l)}));return O.useEffect(()=>()=>{r==null||r.disconnect()},[r]),r}function r_({node:t,nodeType:r,hasDimensions:i,resizeObserver:l}){const a=Oe(),u=O.useRef(null),d=O.useRef(null),f=O.useRef(t.sourcePosition),p=O.useRef(t.targetPosition),y=O.useRef(r),m=i&&!!t.internals.handleBounds;return O.useEffect(()=>{u.current&&!t.hidden&&(!m||d.current!==u.current)&&(d.current&&(l==null||l.unobserve(d.current)),l==null||l.observe(u.current),d.current=u.current)},[m,t.hidden]),O.useEffect(()=>()=>{d.current&&(l==null||l.unobserve(d.current),d.current=null)},[]),O.useEffect(()=>{if(u.current){const x=y.current!==r,v=f.current!==t.sourcePosition,S=p.current!==t.targetPosition;(x||v||S)&&(y.current=r,f.current=t.sourcePosition,p.current=t.targetPosition,a.getState().updateNodeInternals(new Map([[t.id,{id:t.id,nodeElement:u.current,force:!0}]])))}},[t.id,r,t.sourcePosition,t.targetPosition]),u}function o_({id:t,onClick:r,onMouseEnter:i,onMouseMove:l,onMouseLeave:a,onContextMenu:u,onDoubleClick:d,nodesDraggable:f,elementsSelectable:p,nodesConnectable:y,nodesFocusable:m,resizeObserver:x,noDragClassName:v,noPanClassName:S,disableKeyboardA11y:_,rfId:C,nodeTypes:E,nodeClickDistance:N,onError:R}){const{node:k,internals:j,isParent:z}=Re(Q=>{const se=Q.nodeLookup.get(t),fe=Q.parentLookup.has(t);return{node:se,internals:se.internals,isParent:fe}},Ue);let D=k.type||"default",B=(E==null?void 0:E[D])||Yh[D];B===void 0&&(R==null||R("003",tn.error003(D)),D="default",B=(E==null?void 0:E.default)||Yh.default);const H=!!(k.draggable||f&&typeof k.draggable>"u"),X=!!(k.selectable||p&&typeof k.selectable>"u"),ee=!!(k.connectable||y&&typeof k.connectable>"u"),Z=!!(k.focusable||m&&typeof k.focusable>"u"),te=Oe(),J=eg(k),M=r_({node:k,nodeType:D,hasDimensions:J,resizeObserver:x}),W=Pg({nodeRef:M,disabled:k.hidden||!H,noDragClassName:v,handleSelector:k.dragHandle,nodeId:t,isSelectable:X,nodeClickDistance:N}),V=Ig();if(k.hidden)return null;const U=rn(k),A=GS(k),L=X||H||r||i||l||a,F=i?Q=>i(Q,{...j.userNode}):void 0,P=l?Q=>l(Q,{...j.userNode}):void 0,T=a?Q=>a(Q,{...j.userNode}):void 0,ne=u?Q=>u(Q,{...j.userNode}):void 0,re=d?Q=>d(Q,{...j.userNode}):void 0,ue=Q=>{const{selectNodesOnDrag:se,nodeDragThreshold:fe}=te.getState();X&&(!se||!H||fe>0)&&Gu({id:t,store:te,nodeRef:M}),r&&r(Q,{...j.userNode})},ce=Q=>{if(!(rg(Q.nativeEvent)||_)){if(Up.includes(Q.key)&&X){const se=Q.key==="Escape";Gu({id:t,store:te,unselect:se,nodeRef:M})}else if(H&&k.selected&&Object.prototype.hasOwnProperty.call(fl,Q.key)){Q.preventDefault();const{ariaLabelConfig:se}=te.getState();te.setState({ariaLiveMessage:se["node.a11yDescription.ariaLiveMessage"]({direction:Q.key.replace("Arrow","").toLowerCase(),x:~~j.positionAbsolute.x,y:~~j.positionAbsolute.y})}),V({direction:fl[Q.key],factor:Q.shiftKey?4:1})}}},de=()=>{var Ce;if(_||!((Ce=M.current)!=null&&Ce.matches(":focus-visible")))return;const{transform:Q,width:se,height:fe,autoPanOnNodeFocus:ge,setCenter:xe}=te.getState();if(!ge)return;oc(new Map([[t,k]]),{x:0,y:0,width:se,height:fe},Q,!0).length>0||xe(k.position.x+U.width/2,k.position.y+U.height/2,{zoom:Q[2]})};return g.jsx("div",{className:Qe(["react-flow__node",`react-flow__node-${D}`,{[S]:H},k.className,{selected:k.selected,selectable:X,parent:z,draggable:H,dragging:W}]),ref:M,style:{zIndex:j.z,transform:`translate(${j.positionAbsolute.x}px,${j.positionAbsolute.y}px)`,pointerEvents:L?"all":"none",visibility:J?"visible":"hidden",...k.style,...A},"data-id":t,"data-testid":`rf__node-${t}`,onMouseEnter:F,onMouseMove:P,onMouseLeave:T,onContextMenu:ne,onClick:ue,onDoubleClick:re,onKeyDown:Z?ce:void 0,tabIndex:Z?0:void 0,onFocus:Z?de:void 0,role:k.ariaRole??(Z?"group":void 0),"aria-roledescription":"node","aria-describedby":_?void 0:`${_g}-${C}`,"aria-label":k.ariaLabel,...k.domAttributes,children:g.jsx(DS,{value:t,children:g.jsx(B,{id:t,data:k.data,type:D,positionAbsoluteX:j.positionAbsolute.x,positionAbsoluteY:j.positionAbsolute.y,selected:k.selected??!1,selectable:X,draggable:H,deletable:k.deletable??!0,isConnectable:ee,sourcePosition:k.sourcePosition,targetPosition:k.targetPosition,dragging:W,dragHandle:k.dragHandle,zIndex:j.z,parentId:k.parentId,...U})})})}var i_=O.memo(o_);const s_=t=>({nodesConnectable:t.nodesConnectable,nodesFocusable:t.nodesFocusable,elementsSelectable:t.elementsSelectable,onError:t.onError});function zg(t){const{nodesConnectable:r,nodesFocusable:i,elementsSelectable:l,onError:a}=Re(s_,Ue),u=e_(t.onlyRenderVisibleElements),d=n_();return g.jsx("div",{className:"react-flow__nodes",style:El,children:u.map(f=>g.jsx(i_,{id:f,nodeTypes:t.nodeTypes,nodeExtent:t.nodeExtent,onClick:t.onNodeClick,onMouseEnter:t.onNodeMouseEnter,onMouseMove:t.onNodeMouseMove,onMouseLeave:t.onNodeMouseLeave,onContextMenu:t.onNodeContextMenu,onDoubleClick:t.onNodeDoubleClick,noDragClassName:t.noDragClassName,noPanClassName:t.noPanClassName,rfId:t.rfId,disableKeyboardA11y:t.disableKeyboardA11y,resizeObserver:d,nodesDraggable:t.nodesDraggable??!0,nodesConnectable:r,nodesFocusable:i,elementsSelectable:l,nodeClickDistance:t.nodeClickDistance,onError:a},f))})}zg.displayName="NodeRenderer";const l_=O.memo(zg);function a_(t){return Re(O.useCallback(i=>{if(!t)return i.edges.map(a=>a.id);const l=[];if(i.width&&i.height)for(const a of i.edges){const u=i.nodeLookup.get(a.source),d=i.nodeLookup.get(a.target);u&&d&&t1({sourceNode:u,targetNode:d,width:i.width,height:i.height,transform:i.transform})&&l.push(a.id)}return l},[t]),Ue)}const u_=({color:t="none",strokeWidth:r=1})=>{const i={strokeWidth:r,...t&&{stroke:t}};return g.jsx("polyline",{className:"arrow",style:i,strokeLinecap:"round",fill:"none",strokeLinejoin:"round",points:"-5,-4 0,0 -5,4"})},c_=({color:t="none",strokeWidth:r=1})=>{const i={strokeWidth:r,...t&&{stroke:t,fill:t}};return g.jsx("polyline",{className:"arrowclosed",style:i,strokeLinecap:"round",strokeLinejoin:"round",points:"-5,-4 0,0 -5,4 -5,-4"})},Gh={[mi.Arrow]:u_,[mi.ArrowClosed]:c_};function d_(t){const r=Oe();return O.useMemo(()=>{var a,u;return Object.prototype.hasOwnProperty.call(Gh,t)?Gh[t]:((u=(a=r.getState()).onError)==null||u.call(a,"009",tn.error009(t)),null)},[t])}const f_=({id:t,type:r,color:i,width:l=12.5,height:a=12.5,markerUnits:u="strokeWidth",strokeWidth:d,orient:f="auto-start-reverse"})=>{const p=d_(r);return p?g.jsx("marker",{className:"react-flow__arrowhead",id:t,markerWidth:`${l}`,markerHeight:`${a}`,viewBox:"-10 -10 20 20",markerUnits:u,orient:f,refX:"0",refY:"0",children:g.jsx(p,{color:i,strokeWidth:d})}):null},Lg=({defaultColor:t,rfId:r})=>{const i=Re(u=>u.edges),l=Re(u=>u.defaultEdgeOptions),a=O.useMemo(()=>u1(i,{id:r,defaultColor:t,defaultMarkerStart:l==null?void 0:l.markerStart,defaultMarkerEnd:l==null?void 0:l.markerEnd}),[i,l,r,t]);return a.length?g.jsx("svg",{className:"react-flow__marker","aria-hidden":"true",children:g.jsx("defs",{children:a.map(u=>g.jsx(f_,{id:u.id,type:u.type,color:u.color,width:u.width,height:u.height,markerUnits:u.markerUnits,strokeWidth:u.strokeWidth,orient:u.orient},u.id))})}):null};Lg.displayName="MarkerDefinitions";var h_=O.memo(Lg);function Ag({x:t,y:r,label:i,labelStyle:l,labelShowBg:a=!0,labelBgStyle:u,labelBgPadding:d=[2,4],labelBgBorderRadius:f=2,children:p,className:y,...m}){const[x,v]=O.useState({x:1,y:0,width:0,height:0}),S=Qe(["react-flow__edge-textwrapper",y]),_=O.useRef(null);return O.useEffect(()=>{if(_.current){const C=_.current.getBBox();v({x:C.x,y:C.y,width:C.width,height:C.height})}},[i]),i?g.jsxs("g",{transform:`translate(${t-x.width/2} ${r-x.height/2})`,className:S,visibility:x.width?"visible":"hidden",...m,children:[a&&g.jsx("rect",{width:x.width+2*d[0],x:-d[0],y:-d[1],height:x.height+2*d[1],className:"react-flow__edge-textbg",style:u,rx:f,ry:f}),g.jsx("text",{className:"react-flow__edge-text",y:x.height/2,dy:"0.3em",ref:_,style:l,children:i}),p]}):null}Ag.displayName="EdgeText";const p_=O.memo(Ag);function Nl({path:t,labelX:r,labelY:i,label:l,labelStyle:a,labelShowBg:u,labelBgStyle:d,labelBgPadding:f,labelBgBorderRadius:p,interactionWidth:y=20,...m}){return g.jsxs(g.Fragment,{children:[g.jsx("path",{...m,d:t,fill:"none",className:Qe(["react-flow__edge-path",m.className])}),y?g.jsx("path",{d:t,fill:"none",strokeOpacity:0,strokeWidth:y,className:"react-flow__edge-interaction"}):null,l&&Jt(r)&&Jt(i)?g.jsx(p_,{x:r,y:i,label:l,labelStyle:a,labelShowBg:u,labelBgStyle:d,labelBgPadding:f,labelBgBorderRadius:p}):null]})}function Qh({pos:t,x1:r,y1:i,x2:l,y2:a}){return t===_e.Left||t===_e.Right?[.5*(r+l),i]:[r,.5*(i+a)]}function Dg({sourceX:t,sourceY:r,sourcePosition:i=_e.Bottom,targetX:l,targetY:a,targetPosition:u=_e.Top}){const[d,f]=Qh({pos:i,x1:t,y1:r,x2:l,y2:a}),[p,y]=Qh({pos:u,x1:l,y1:a,x2:t,y2:r}),[m,x,v,S]=ig({sourceX:t,sourceY:r,targetX:l,targetY:a,sourceControlX:d,sourceControlY:f,targetControlX:p,targetControlY:y});return[`M${t},${r} C${d},${f} ${p},${y} ${l},${a}`,m,x,v,S]}function $g(t){return O.memo(({id:r,sourceX:i,sourceY:l,targetX:a,targetY:u,sourcePosition:d,targetPosition:f,label:p,labelStyle:y,labelShowBg:m,labelBgStyle:x,labelBgPadding:v,labelBgBorderRadius:S,style:_,markerEnd:C,markerStart:E,interactionWidth:N})=>{const[R,k,j]=Dg({sourceX:i,sourceY:l,sourcePosition:d,targetX:a,targetY:u,targetPosition:f}),z=t.isInternal?void 0:r;return g.jsx(Nl,{id:z,path:R,labelX:k,labelY:j,label:p,labelStyle:y,labelShowBg:m,labelBgStyle:x,labelBgPadding:v,labelBgBorderRadius:S,style:_,markerEnd:C,markerStart:E,interactionWidth:N})})}const g_=$g({isInternal:!1}),Og=$g({isInternal:!0});g_.displayName="SimpleBezierEdge";Og.displayName="SimpleBezierEdgeInternal";function Fg(t){return O.memo(({id:r,sourceX:i,sourceY:l,targetX:a,targetY:u,label:d,labelStyle:f,labelShowBg:p,labelBgStyle:y,labelBgPadding:m,labelBgBorderRadius:x,style:v,sourcePosition:S=_e.Bottom,targetPosition:_=_e.Top,markerEnd:C,markerStart:E,pathOptions:N,interactionWidth:R})=>{const[k,j,z]=Uu({sourceX:i,sourceY:l,sourcePosition:S,targetX:a,targetY:u,targetPosition:_,borderRadius:N==null?void 0:N.borderRadius,offset:N==null?void 0:N.offset,stepPosition:N==null?void 0:N.stepPosition}),D=t.isInternal?void 0:r;return g.jsx(Nl,{id:D,path:k,labelX:j,labelY:z,label:d,labelStyle:f,labelShowBg:p,labelBgStyle:y,labelBgPadding:m,labelBgBorderRadius:x,style:v,markerEnd:C,markerStart:E,interactionWidth:R})})}const Hg=Fg({isInternal:!1}),Bg=Fg({isInternal:!0});Hg.displayName="SmoothStepEdge";Bg.displayName="SmoothStepEdgeInternal";function Vg(t){return O.memo(({id:r,...i})=>{var a;const l=t.isInternal?void 0:r;return g.jsx(Hg,{...i,id:l,pathOptions:O.useMemo(()=>{var u;return{borderRadius:0,offset:(u=i.pathOptions)==null?void 0:u.offset}},[(a=i.pathOptions)==null?void 0:a.offset])})})}const m_=Vg({isInternal:!1}),Ug=Vg({isInternal:!0});m_.displayName="StepEdge";Ug.displayName="StepEdgeInternal";function Wg(t){return O.memo(({id:r,sourceX:i,sourceY:l,targetX:a,targetY:u,label:d,labelStyle:f,labelShowBg:p,labelBgStyle:y,labelBgPadding:m,labelBgBorderRadius:x,style:v,markerEnd:S,markerStart:_,interactionWidth:C})=>{const[E,N,R]=ag({sourceX:i,sourceY:l,targetX:a,targetY:u}),k=t.isInternal?void 0:r;return g.jsx(Nl,{id:k,path:E,labelX:N,labelY:R,label:d,labelStyle:f,labelShowBg:p,labelBgStyle:y,labelBgPadding:m,labelBgBorderRadius:x,style:v,markerEnd:S,markerStart:_,interactionWidth:C})})}const y_=Wg({isInternal:!1}),Yg=Wg({isInternal:!0});y_.displayName="StraightEdge";Yg.displayName="StraightEdgeInternal";function Xg(t){return O.memo(({id:r,sourceX:i,sourceY:l,targetX:a,targetY:u,sourcePosition:d=_e.Bottom,targetPosition:f=_e.Top,label:p,labelStyle:y,labelShowBg:m,labelBgStyle:x,labelBgPadding:v,labelBgBorderRadius:S,style:_,markerEnd:C,markerStart:E,pathOptions:N,interactionWidth:R})=>{const[k,j,z]=sg({sourceX:i,sourceY:l,sourcePosition:d,targetX:a,targetY:u,targetPosition:f,curvature:N==null?void 0:N.curvature}),D=t.isInternal?void 0:r;return g.jsx(Nl,{id:D,path:k,labelX:j,labelY:z,label:p,labelStyle:y,labelShowBg:m,labelBgStyle:x,labelBgPadding:v,labelBgBorderRadius:S,style:_,markerEnd:C,markerStart:E,interactionWidth:R})})}const v_=Xg({isInternal:!1}),Gg=Xg({isInternal:!0});v_.displayName="BezierEdge";Gg.displayName="BezierEdgeInternal";const Kh={default:Gg,straight:Yg,step:Ug,smoothstep:Bg,simplebezier:Og},qh={sourceX:null,sourceY:null,targetX:null,targetY:null,sourcePosition:null,targetPosition:null,zIndex:void 0},x_=(t,r,i)=>i===_e.Left?t-r:i===_e.Right?t+r:t,w_=(t,r,i)=>i===_e.Top?t-r:i===_e.Bottom?t+r:t,Zh="react-flow__edgeupdater";function Jh({position:t,centerX:r,centerY:i,radius:l=10,onMouseDown:a,onMouseEnter:u,onMouseOut:d,type:f}){return g.jsx("circle",{onMouseDown:a,onMouseEnter:u,onMouseOut:d,className:Qe([Zh,`${Zh}-${f}`]),cx:x_(r,l,t),cy:w_(i,l,t),r:l,stroke:"transparent",fill:"transparent"})}function S_({isReconnectable:t,reconnectRadius:r,edge:i,sourceX:l,sourceY:a,targetX:u,targetY:d,sourcePosition:f,targetPosition:p,onReconnect:y,onReconnectStart:m,onReconnectEnd:x,setReconnecting:v,setUpdateHover:S}){const _=Oe(),C=(j,z)=>{if(j.button!==0)return;const{autoPanOnConnect:D,domNode:B,connectionMode:H,connectionRadius:X,lib:ee,onConnectStart:Z,cancelConnection:te,nodeLookup:J,rfId:M,panBy:W,updateConnection:V}=_.getState(),U=z.type==="target",A=(P,T)=>{v(!1),x==null||x(P,i,z.type,T)},L=P=>y==null?void 0:y(i,P),F=(P,T)=>{v(!0),m==null||m(j,i,z.type),Z==null||Z(P,T)};Xu.onPointerDown(j.nativeEvent,{autoPanOnConnect:D,connectionMode:H,connectionRadius:X,domNode:B,handleId:z.id,nodeId:z.nodeId,nodeLookup:J,isTarget:U,edgeUpdaterType:z.type,lib:ee,flowId:M,cancelConnection:te,panBy:W,isValidConnection:(...P)=>{var T,ne;return((ne=(T=_.getState()).isValidConnection)==null?void 0:ne.call(T,...P))??!0},onConnect:L,onConnectStart:F,onConnectEnd:(...P)=>{var T,ne;return(ne=(T=_.getState()).onConnectEnd)==null?void 0:ne.call(T,...P)},onReconnectEnd:A,updateConnection:V,getTransform:()=>_.getState().transform,getFromHandle:()=>_.getState().connection.fromHandle,dragThreshold:_.getState().connectionDragThreshold,handleDomNode:j.currentTarget})},E=j=>C(j,{nodeId:i.target,id:i.targetHandle??null,type:"target"}),N=j=>C(j,{nodeId:i.source,id:i.sourceHandle??null,type:"source"}),R=()=>S(!0),k=()=>S(!1);return g.jsxs(g.Fragment,{children:[(t===!0||t==="source")&&g.jsx(Jh,{position:f,centerX:l,centerY:a,radius:r,onMouseDown:E,onMouseEnter:R,onMouseOut:k,type:"source"}),(t===!0||t==="target")&&g.jsx(Jh,{position:p,centerX:u,centerY:d,radius:r,onMouseDown:N,onMouseEnter:R,onMouseOut:k,type:"target"})]})}function __({id:t,edgesFocusable:r,edgesReconnectable:i,elementsSelectable:l,onClick:a,onDoubleClick:u,onContextMenu:d,onMouseEnter:f,onMouseMove:p,onMouseLeave:y,reconnectRadius:m,onReconnect:x,onReconnectStart:v,onReconnectEnd:S,rfId:_,edgeTypes:C,noPanClassName:E,onError:N,disableKeyboardA11y:R}){let k=Re(xe=>xe.edgeLookup.get(t));const j=Re(xe=>xe.defaultEdgeOptions);k=j?{...j,...k}:k;let z=k.type||"default",D=(C==null?void 0:C[z])||Kh[z];D===void 0&&(N==null||N("011",tn.error011(z)),z="default",D=(C==null?void 0:C.default)||Kh.default);const B=!!(k.focusable||r&&typeof k.focusable>"u"),H=typeof x<"u"&&(k.reconnectable||i&&typeof k.reconnectable>"u"),X=!!(k.selectable||l&&typeof k.selectable>"u"),ee=O.useRef(null),[Z,te]=O.useState(!1),[J,M]=O.useState(!1),W=Oe(),{zIndex:V=k.zIndex,sourceX:U,sourceY:A,targetX:L,targetY:F,sourcePosition:P,targetPosition:T}=Re(O.useCallback(xe=>{const pe=xe.nodeLookup.get(k.source),Ce=xe.nodeLookup.get(k.target);if(!pe||!Ce)return qh;const je=a1({id:t,sourceNode:pe,targetNode:Ce,sourceHandle:k.sourceHandle||null,targetHandle:k.targetHandle||null,connectionMode:xe.connectionMode,onError:N}),Me=e1({selected:k.selected,zIndex:k.zIndex,sourceNode:pe,targetNode:Ce,elevateOnSelect:xe.elevateEdgesOnSelect,zIndexMode:xe.zIndexMode});return{...je||qh,zIndex:Me}},[k.source,k.target,k.sourceHandle,k.targetHandle,k.selected,k.zIndex,N]),Ue),ne=O.useMemo(()=>k.markerStart?`url('#${Wu(k.markerStart,_)}')`:void 0,[k.markerStart,_]),re=O.useMemo(()=>k.markerEnd?`url('#${Wu(k.markerEnd,_)}')`:void 0,[k.markerEnd,_]);if(k.hidden||U===null||A===null||L===null||F===null)return null;const ue=xe=>{var Me;const{addSelectedEdges:pe,unselectNodesAndEdges:Ce,multiSelectionActive:je}=W.getState();X&&(W.setState({nodesSelectionActive:!1}),k.selected&&je?(Ce({nodes:[],edges:[k]}),(Me=ee.current)==null||Me.blur()):pe([t])),a&&a(xe,k)},ce=u?xe=>{u(xe,{...k})}:void 0,de=d?xe=>{d(xe,{...k})}:void 0,Q=f?xe=>{f(xe,{...k})}:void 0,se=p?xe=>{p(xe,{...k})}:void 0,fe=y?xe=>{y(xe,{...k})}:void 0,ge=xe=>{var pe;if(!R&&Up.includes(xe.key)&&X){const{unselectNodesAndEdges:Ce,addSelectedEdges:je}=W.getState();xe.key==="Escape"?((pe=ee.current)==null||pe.blur(),Ce({edges:[k]})):je([t])}};return g.jsx("svg",{style:{zIndex:V},children:g.jsxs("g",{className:Qe(["react-flow__edge",`react-flow__edge-${z}`,k.className,E,{selected:k.selected,animated:k.animated,inactive:!X&&!a,updating:Z,selectable:X}]),onClick:ue,onDoubleClick:ce,onContextMenu:de,onMouseEnter:Q,onMouseMove:se,onMouseLeave:fe,onKeyDown:B?ge:void 0,tabIndex:B?0:void 0,role:k.ariaRole??(B?"group":"img"),"aria-roledescription":"edge","data-id":t,"data-testid":`rf__edge-${t}`,"aria-label":k.ariaLabel===null?void 0:k.ariaLabel||`Edge from ${k.source} to ${k.target}`,"aria-describedby":B?`${kg}-${_}`:void 0,ref:ee,...k.domAttributes,children:[!J&&g.jsx(D,{id:t,source:k.source,target:k.target,type:k.type,selected:k.selected,animated:k.animated,selectable:X,deletable:k.deletable??!0,label:k.label,labelStyle:k.labelStyle,labelShowBg:k.labelShowBg,labelBgStyle:k.labelBgStyle,labelBgPadding:k.labelBgPadding,labelBgBorderRadius:k.labelBgBorderRadius,sourceX:U,sourceY:A,targetX:L,targetY:F,sourcePosition:P,targetPosition:T,data:k.data,style:k.style,sourceHandleId:k.sourceHandle,targetHandleId:k.targetHandle,markerStart:ne,markerEnd:re,pathOptions:"pathOptions"in k?k.pathOptions:void 0,interactionWidth:k.interactionWidth}),H&&g.jsx(S_,{edge:k,isReconnectable:H,reconnectRadius:m,onReconnect:x,onReconnectStart:v,onReconnectEnd:S,sourceX:U,sourceY:A,targetX:L,targetY:F,sourcePosition:P,targetPosition:T,setUpdateHover:te,setReconnecting:M})]})})}var k_=O.memo(__);const E_=t=>({edgesFocusable:t.edgesFocusable,edgesReconnectable:t.edgesReconnectable,elementsSelectable:t.elementsSelectable,connectionMode:t.connectionMode,onError:t.onError});function Qg({defaultMarkerColor:t,onlyRenderVisibleElements:r,rfId:i,edgeTypes:l,noPanClassName:a,onReconnect:u,onEdgeContextMenu:d,onEdgeMouseEnter:f,onEdgeMouseMove:p,onEdgeMouseLeave:y,onEdgeClick:m,reconnectRadius:x,onEdgeDoubleClick:v,onReconnectStart:S,onReconnectEnd:_,disableKeyboardA11y:C}){const{edgesFocusable:E,edgesReconnectable:N,elementsSelectable:R,onError:k}=Re(E_,Ue),j=a_(r);return g.jsxs("div",{className:"react-flow__edges",children:[g.jsx(h_,{defaultColor:t,rfId:i}),j.map(z=>g.jsx(k_,{id:z,edgesFocusable:E,edgesReconnectable:N,elementsSelectable:R,noPanClassName:a,onReconnect:u,onContextMenu:d,onMouseEnter:f,onMouseMove:p,onMouseLeave:y,onClick:m,reconnectRadius:x,onDoubleClick:v,onReconnectStart:S,onReconnectEnd:_,rfId:i,onError:k,edgeTypes:l,disableKeyboardA11y:C},z))]})}Qg.displayName="EdgeRenderer";const N_=O.memo(Qg),ep=t=>`translate(${t[0]}px,${t[1]}px) scale(${t[2]})`;function C_({children:t}){const r=Oe(),i=O.useRef(null),[l]=O.useState(()=>r.getState().transform);return jg(()=>{let a=null;const u=()=>{const d=r.getState().transform;a&&d[0]===a[0]&&d[1]===a[1]&&d[2]===a[2]||(a=d,i.current&&(i.current.style.transform=ep(d)))};return u(),r.subscribe(u)},[r]),g.jsx("div",{ref:i,className:"react-flow__viewport xyflow__viewport react-flow__container",style:{transform:ep(l)},children:t})}function j_(t){const r=hc(),i=O.useRef(!1);O.useEffect(()=>{!i.current&&r.viewportInitialized&&t&&(setTimeout(()=>t(r),1),i.current=!0)},[t,r.viewportInitialized])}const M_=t=>{var r;return(r=t.panZoom)==null?void 0:r.syncViewport};function P_(t){const r=Re(M_),i=Oe();return O.useEffect(()=>{t&&(r==null||r(t),i.setState({transform:[t.x,t.y,t.zoom]}))},[t,r]),null}function I_(t){return t.connection.inProgress?{...t.connection,to:Ci(t.connection.to,t.transform)}:{...t.connection}}function R_(t){return I_}function T_(t){const r=R_();return Re(r,Ue)}const b_=t=>({nodesConnectable:t.nodesConnectable,isValid:t.connection.isValid,inProgress:t.connection.inProgress,width:t.width,height:t.height});function z_({containerStyle:t,style:r,type:i,component:l}){const{nodesConnectable:a,width:u,height:d,isValid:f,inProgress:p}=Re(b_,Ue);return!(u&&a&&p)?null:g.jsx("svg",{style:t,width:u,height:d,className:"react-flow__connectionline react-flow__container",children:g.jsx("g",{className:Qe(["react-flow__connection",Xp(f)]),children:g.jsx(Kg,{style:r,type:i,CustomComponent:l,isValid:f})})})}const Kg=({style:t,type:r=Zn.Bezier,CustomComponent:i,isValid:l})=>{const{inProgress:a,from:u,fromNode:d,fromHandle:f,fromPosition:p,to:y,toNode:m,toHandle:x,toPosition:v,pointer:S}=T_();if(!a)return;if(i)return g.jsx(i,{connectionLineType:r,connectionLineStyle:t,fromNode:d,fromHandle:f,fromX:u.x,fromY:u.y,toX:y.x,toY:y.y,fromPosition:p,toPosition:v,connectionStatus:Xp(l),toNode:m,toHandle:x,pointer:S});let _="";const C={sourceX:u.x,sourceY:u.y,sourcePosition:p,targetX:y.x,targetY:y.y,targetPosition:v};switch(r){case Zn.Bezier:[_]=sg(C);break;case Zn.SimpleBezier:[_]=Dg(C);break;case Zn.Step:[_]=Uu({...C,borderRadius:0});break;case Zn.SmoothStep:[_]=Uu(C);break;default:[_]=ag(C)}return g.jsx("path",{d:_,fill:"none",className:"react-flow__connection-path",style:t})};Kg.displayName="ConnectionLine";const L_={};function tp(t=L_){O.useRef(t),Oe(),O.useEffect(()=>{},[t])}function A_(){Oe(),O.useRef(!1),O.useEffect(()=>{},[])}function qg({nodeTypes:t,edgeTypes:r,onInit:i,onNodeClick:l,onEdgeClick:a,onNodeDoubleClick:u,onEdgeDoubleClick:d,onNodeMouseEnter:f,onNodeMouseMove:p,onNodeMouseLeave:y,onNodeContextMenu:m,onSelectionContextMenu:x,onSelectionStart:v,onSelectionEnd:S,connectionLineType:_,connectionLineStyle:C,connectionLineComponent:E,connectionLineContainerStyle:N,selectionKeyCode:R,selectionOnDrag:k,selectionMode:j,multiSelectionKeyCode:z,panActivationKeyCode:D,zoomActivationKeyCode:B,deleteKeyCode:H,onlyRenderVisibleElements:X,elementsSelectable:ee,defaultViewport:Z,translateExtent:te,minZoom:J,maxZoom:M,preventScrolling:W,defaultMarkerColor:V,zoomOnScroll:U,zoomOnPinch:A,panOnScroll:L,panOnScrollSpeed:F,panOnScrollMode:P,zoomOnDoubleClick:T,panOnDrag:ne,autoPanOnSelection:re,onPaneClick:ue,onPaneMouseEnter:ce,onPaneMouseMove:de,onPaneMouseLeave:Q,onPaneScroll:se,onPaneContextMenu:fe,paneClickDistance:ge,nodeClickDistance:xe,onEdgeContextMenu:pe,onEdgeMouseEnter:Ce,onEdgeMouseMove:je,onEdgeMouseLeave:Me,reconnectRadius:be,onReconnect:Xe,onReconnectStart:rt,onReconnectEnd:Ze,noDragClassName:Je,noWheelClassName:Vt,noPanClassName:Lt,disableKeyboardA11y:At,nodeExtent:lt,rfId:ht,viewport:ot,onViewportChange:pt,nodesDraggable:Cn}){return tp(t),tp(r),A_(),j_(i),P_(ot),g.jsx(ZS,{onPaneClick:ue,onPaneMouseEnter:ce,onPaneMouseMove:de,onPaneMouseLeave:Q,onPaneContextMenu:fe,onPaneScroll:se,paneClickDistance:ge,deleteKeyCode:H,selectionKeyCode:R,selectionOnDrag:k,selectionMode:j,onSelectionStart:v,onSelectionEnd:S,multiSelectionKeyCode:z,panActivationKeyCode:D,zoomActivationKeyCode:B,elementsSelectable:ee,zoomOnScroll:U,zoomOnPinch:A,zoomOnDoubleClick:T,panOnScroll:L,panOnScrollSpeed:F,panOnScrollMode:P,panOnDrag:ne,autoPanOnSelection:re,defaultViewport:Z,translateExtent:te,minZoom:J,maxZoom:M,onSelectionContextMenu:x,preventScrolling:W,noDragClassName:Je,noWheelClassName:Vt,noPanClassName:Lt,disableKeyboardA11y:At,onViewportChange:pt,isControlledViewport:!!ot,children:g.jsxs(C_,{children:[g.jsx(N_,{edgeTypes:r,onEdgeClick:a,onEdgeDoubleClick:d,onReconnect:Xe,onReconnectStart:rt,onReconnectEnd:Ze,onlyRenderVisibleElements:X,onEdgeContextMenu:pe,onEdgeMouseEnter:Ce,onEdgeMouseMove:je,onEdgeMouseLeave:Me,reconnectRadius:be,defaultMarkerColor:V,noPanClassName:Lt,disableKeyboardA11y:At,rfId:ht}),g.jsx(z_,{style:C,type:_,component:E,containerStyle:N}),g.jsx("div",{className:"react-flow__edgelabel-renderer"}),g.jsx(l_,{nodeTypes:t,onNodeClick:l,onNodeDoubleClick:u,onNodeMouseEnter:f,onNodeMouseMove:p,onNodeMouseLeave:y,onNodeContextMenu:m,nodeClickDistance:xe,onlyRenderVisibleElements:X,noPanClassName:Lt,noDragClassName:Je,disableKeyboardA11y:At,nodeExtent:lt,rfId:ht,nodesDraggable:Cn}),g.jsx("div",{className:"react-flow__viewport-portal"})]})})}qg.displayName="GraphView";const D_=O.memo(qg),$_=Jp(),np=({nodes:t,edges:r,defaultNodes:i,defaultEdges:l,width:a,height:u,fitView:d,fitViewOptions:f,minZoom:p=.5,maxZoom:y=2,nodeOrigin:m,nodeExtent:x,zIndexMode:v="basic"}={})=>{const S=new Map,_=new Map,C=new Map,E=new Map,N=l??r??[],R=i??t??[],k=m??[0,0],j=x??pi;dg(C,E,N);const{nodesInitialized:z}=Yu(R,S,_,{nodeOrigin:k,nodeExtent:j,zIndexMode:v});let D=[0,0,1];if(d&&a&&u){const B=Ei(S,{filter:Z=>!!((Z.width||Z.initialWidth)&&(Z.height||Z.initialHeight))}),{x:H,y:X,zoom:ee}=sc(B,a,u,p,y,(f==null?void 0:f.padding)??.1);D=[H,X,ee]}return{rfId:"1",width:a??0,height:u??0,transform:D,nodes:R,nodesInitialized:z,nodeLookup:S,parentLookup:_,edges:N,edgeLookup:E,connectionLookup:C,onNodesChange:null,onEdgesChange:null,hasDefaultNodes:i!==void 0,hasDefaultEdges:l!==void 0,panZoom:null,minZoom:p,maxZoom:y,translateExtent:pi,nodeExtent:j,nodesSelectionActive:!1,userSelectionActive:!1,userSelectionRect:null,connectionMode:po.Strict,domNode:null,paneDragging:!1,noPanClassName:"nopan",nodeOrigin:k,nodeDragThreshold:1,connectionDragThreshold:1,snapGrid:[15,15],snapToGrid:!1,nodesDraggable:!0,nodesConnectable:!0,nodesFocusable:!0,edgesFocusable:!0,edgesReconnectable:!0,elementsSelectable:!0,elevateNodesOnSelect:!0,elevateEdgesOnSelect:!0,selectNodesOnDrag:!0,multiSelectionActive:!1,fitViewQueued:d??!1,fitViewOptions:f,fitViewResolver:null,connection:{...Yp},connectionClickStartHandle:null,connectOnClick:!0,ariaLiveMessage:"",autoPanOnConnect:!0,autoPanOnNodeDrag:!0,autoPanOnNodeFocus:!0,autoPanSpeed:15,connectionRadius:20,onError:$_,isValidConnection:void 0,onSelectionChangeHandlers:[],lib:"react",debug:!1,ariaLabelConfig:Wp,zIndexMode:v,onNodesChangeMiddlewareMap:new Map,onEdgesChangeMiddlewareMap:new Map}},O_=({nodes:t,edges:r,defaultNodes:i,defaultEdges:l,width:a,height:u,fitView:d,fitViewOptions:f,minZoom:p,maxZoom:y,nodeOrigin:m,nodeExtent:x,zIndexMode:v})=>q1((S,_)=>{async function C(){const{nodeLookup:E,panZoom:N,fitViewOptions:R,fitViewResolver:k,width:j,height:z,minZoom:D,maxZoom:B}=_();N&&(await Xw({nodes:E,width:j,height:z,panZoom:N,minZoom:D,maxZoom:B},R),k==null||k.resolve(!0),S({fitViewResolver:null}))}return{...np({nodes:t,edges:r,width:a,height:u,fitView:d,fitViewOptions:f,minZoom:p,maxZoom:y,nodeOrigin:m,nodeExtent:x,defaultNodes:i,defaultEdges:l,zIndexMode:v}),setNodes:E=>{const{nodeLookup:N,parentLookup:R,nodeOrigin:k,nodeExtent:j,elevateNodesOnSelect:z,fitViewQueued:D,zIndexMode:B,nodesSelectionActive:H}=_(),{nodesInitialized:X,hasSelectedNodes:ee}=Yu(E,N,R,{nodeOrigin:k,nodeExtent:j,elevateNodesOnSelect:z,checkEquality:!0,zIndexMode:B}),Z=H&ⅇD&&X?(C(),S({nodes:E,nodesInitialized:X,fitViewQueued:!1,fitViewOptions:void 0,nodesSelectionActive:Z})):S({nodes:E,nodesInitialized:X,nodesSelectionActive:Z})},setEdges:E=>{const{connectionLookup:N,edgeLookup:R}=_();dg(N,R,E),S({edges:E})},setDefaultNodesAndEdges:(E,N)=>{if(E){const{setNodes:R}=_();R(E),S({hasDefaultNodes:!0})}if(N){const{setEdges:R}=_();R(N),S({hasDefaultEdges:!0})}},updateNodeInternals:E=>{const{triggerNodeChanges:N,nodeLookup:R,parentLookup:k,domNode:j,nodeOrigin:z,nodeExtent:D,debug:B,fitViewQueued:H,zIndexMode:X}=_(),{changes:ee,updatedInternals:Z}=m1(E,R,k,j,z,D,X);Z&&(f1(R,k,{nodeOrigin:z,nodeExtent:D,zIndexMode:X}),H?(C(),S({fitViewQueued:!1,fitViewOptions:void 0})):S({}),(ee==null?void 0:ee.length)>0&&(B&&console.log("React Flow: trigger node changes",ee),N==null||N(ee)))},updateNodePositions:(E,N=!1)=>{const R=[];let k=[];const{nodeLookup:j,triggerNodeChanges:z,connection:D,updateConnection:B,onNodesChangeMiddlewareMap:H}=_();for(const[X,ee]of E){const Z=j.get(X),te=!!(Z!=null&&Z.expandParent&&(Z!=null&&Z.parentId)&&(ee!=null&&ee.position)),J={id:X,type:"position",position:te?{x:Math.max(0,ee.position.x),y:Math.max(0,ee.position.y)}:ee.position,dragging:N};if(Z&&D.inProgress&&D.fromNode.id===Z.id){const M=Mr(Z,D.fromHandle,_e.Left,!0);B({...D,from:M})}te&&Z.parentId&&R.push({id:X,parentId:Z.parentId,rect:{...ee.internals.positionAbsolute,width:ee.measured.width??0,height:ee.measured.height??0}}),k.push(J)}if(R.length>0){const{parentLookup:X,nodeOrigin:ee}=_(),Z=fc(R,j,X,ee);k.push(...Z)}for(const X of H.values())k=X(k);z(k)},triggerNodeChanges:E=>{const{onNodesChange:N,setNodes:R,nodes:k,hasDefaultNodes:j,debug:z}=_();if(E!=null&&E.length){if(j){const D=vS(E,k);R(D)}z&&console.log("React Flow: trigger node changes",E),N==null||N(E)}},triggerEdgeChanges:E=>{const{onEdgesChange:N,setEdges:R,edges:k,hasDefaultEdges:j,debug:z}=_();if(E!=null&&E.length){if(j){const D=xS(E,k);R(D)}z&&console.log("React Flow: trigger edge changes",E),N==null||N(E)}},addSelectedNodes:E=>{const{multiSelectionActive:N,edgeLookup:R,nodeLookup:k,triggerNodeChanges:j,triggerEdgeChanges:z}=_();if(N){const D=E.map(B=>wr(B,!0));j(D);return}j(ao(k,new Set([...E]),!0)),z(ao(R))},addSelectedEdges:E=>{const{multiSelectionActive:N,edgeLookup:R,nodeLookup:k,triggerNodeChanges:j,triggerEdgeChanges:z}=_();if(N){const D=E.map(B=>wr(B,!0));z(D);return}z(ao(R,new Set([...E]))),j(ao(k,new Set,!0))},unselectNodesAndEdges:({nodes:E,edges:N}={})=>{const{edges:R,nodes:k,nodeLookup:j,triggerNodeChanges:z,triggerEdgeChanges:D}=_(),B=E||k,H=N||R,X=[];for(const Z of B){if(!Z.selected)continue;const te=j.get(Z.id);te&&(te.selected=!1),X.push(wr(Z.id,!1))}const ee=[];for(const Z of H)Z.selected&&ee.push(wr(Z.id,!1));z(X),D(ee)},setMinZoom:E=>{const{panZoom:N,maxZoom:R}=_();N==null||N.setScaleExtent([E,R]),S({minZoom:E})},setMaxZoom:E=>{const{panZoom:N,minZoom:R}=_();N==null||N.setScaleExtent([R,E]),S({maxZoom:E})},setTranslateExtent:E=>{var N;(N=_().panZoom)==null||N.setTranslateExtent(E),S({translateExtent:E})},resetSelectedElements:()=>{const{edges:E,nodes:N,triggerNodeChanges:R,triggerEdgeChanges:k,elementsSelectable:j}=_();if(!j)return;const z=N.reduce((B,H)=>H.selected?[...B,wr(H.id,!1)]:B,[]),D=E.reduce((B,H)=>H.selected?[...B,wr(H.id,!1)]:B,[]);R(z),k(D)},setNodeExtent:E=>{const{nodes:N,nodeLookup:R,parentLookup:k,nodeOrigin:j,elevateNodesOnSelect:z,nodeExtent:D,zIndexMode:B}=_();E[0][0]===D[0][0]&&E[0][1]===D[0][1]&&E[1][0]===D[1][0]&&E[1][1]===D[1][1]||(Yu(N,R,k,{nodeOrigin:j,nodeExtent:E,elevateNodesOnSelect:z,checkEquality:!1,zIndexMode:B}),S({nodeExtent:E}))},panBy:E=>{const{transform:N,width:R,height:k,panZoom:j,translateExtent:z}=_();return y1({delta:E,panZoom:j,transform:N,translateExtent:z,width:R,height:k})},setCenter:async(E,N,R)=>{const{width:k,height:j,maxZoom:z,panZoom:D}=_();if(!D)return!1;const B=typeof(R==null?void 0:R.zoom)<"u"?R.zoom:z;return await D.setViewport({x:k/2-E*B,y:j/2-N*B,zoom:B},{duration:R==null?void 0:R.duration,ease:R==null?void 0:R.ease,interpolate:R==null?void 0:R.interpolate}),!0},cancelConnection:()=>{S({connection:{...Yp}})},updateConnection:E=>{S({connection:E})},reset:()=>S({...np()})}},Object.is);function Zg({initialNodes:t,initialEdges:r,defaultNodes:i,defaultEdges:l,initialWidth:a,initialHeight:u,initialMinZoom:d,initialMaxZoom:f,initialFitViewOptions:p,fitView:y,nodeOrigin:m,nodeExtent:x,zIndexMode:v,children:S}){const[_]=O.useState(()=>O_({nodes:t,edges:r,defaultNodes:i,defaultEdges:l,width:a,height:u,fitView:y,minZoom:d,maxZoom:f,fitViewOptions:p,nodeOrigin:m,nodeExtent:x,zIndexMode:v}));return g.jsx(Z1,{value:_,children:g.jsx(ES,{children:g.jsx(OS,{children:S})})})}function F_({children:t,nodes:r,edges:i,defaultNodes:l,defaultEdges:a,width:u,height:d,fitView:f,fitViewOptions:p,minZoom:y,maxZoom:m,nodeOrigin:x,nodeExtent:v,zIndexMode:S}){return O.useContext(_l)?g.jsx(g.Fragment,{children:t}):g.jsx(Zg,{initialNodes:r,initialEdges:i,defaultNodes:l,defaultEdges:a,initialWidth:u,initialHeight:d,fitView:f,initialFitViewOptions:p,initialMinZoom:y,initialMaxZoom:m,nodeOrigin:x,nodeExtent:v,zIndexMode:S,children:t})}const H_={width:"100%",height:"100%",overflow:"hidden",position:"relative",zIndex:0};function B_({nodes:t,edges:r,defaultNodes:i,defaultEdges:l,className:a,nodeTypes:u,edgeTypes:d,onNodeClick:f,onEdgeClick:p,onInit:y,onMove:m,onMoveStart:x,onMoveEnd:v,onConnect:S,onConnectStart:_,onConnectEnd:C,onClickConnectStart:E,onClickConnectEnd:N,onNodeMouseEnter:R,onNodeMouseMove:k,onNodeMouseLeave:j,onNodeContextMenu:z,onNodeDoubleClick:D,onNodeDragStart:B,onNodeDrag:H,onNodeDragStop:X,onNodesDelete:ee,onEdgesDelete:Z,onDelete:te,onSelectionChange:J,onSelectionDragStart:M,onSelectionDrag:W,onSelectionDragStop:V,onSelectionContextMenu:U,onSelectionStart:A,onSelectionEnd:L,onBeforeDelete:F,connectionMode:P,connectionLineType:T=Zn.Bezier,connectionLineStyle:ne,connectionLineComponent:re,connectionLineContainerStyle:ue,deleteKeyCode:ce="Backspace",selectionKeyCode:de="Shift",selectionOnDrag:Q=!1,selectionMode:se=gi.Full,panActivationKeyCode:fe="Space",multiSelectionKeyCode:ge=vi()?"Meta":"Control",zoomActivationKeyCode:xe=vi()?"Meta":"Control",snapToGrid:pe,snapGrid:Ce,onlyRenderVisibleElements:je=!1,selectNodesOnDrag:Me,nodesDraggable:be,autoPanOnNodeFocus:Xe,nodesConnectable:rt,nodesFocusable:Ze,nodeOrigin:Je=Eg,edgesFocusable:Vt,edgesReconnectable:Lt,elementsSelectable:At=!0,defaultViewport:lt=dS,minZoom:ht=.5,maxZoom:ot=2,translateExtent:pt=pi,preventScrolling:Cn=!0,nodeExtent:Ut,defaultMarkerColor:hn="#b1b1b7",zoomOnScroll:Ir=!0,zoomOnPinch:er=!0,panOnScroll:tr=!1,panOnScrollSpeed:Rr=.5,panOnScrollMode:jn=kr.Free,zoomOnDoubleClick:Mn=!0,panOnDrag:Pn=!0,onPaneClick:K,onPaneMouseEnter:ye,onPaneMouseMove:ze,onPaneMouseLeave:Nt,onPaneScroll:Ct,onPaneContextMenu:ji,paneClickDistance:Mi=1,nodeClickDistance:Pi=0,children:Ii,onReconnect:xo,onReconnectStart:Ri,onReconnectEnd:nr,onEdgeContextMenu:wo,onEdgeDoubleClick:rr,onEdgeMouseEnter:Cl,onEdgeMouseMove:or,onEdgeMouseLeave:Tr,reconnectRadius:br=10,onNodesChange:So,onEdgesChange:jl,noDragClassName:Ml="nodrag",noWheelClassName:Pl="nowheel",noPanClassName:on="nopan",fitView:_o,fitViewOptions:ko,connectOnClick:Il,attributionPosition:Ti,proOptions:bi,defaultEdgeOptions:zi,elevateNodesOnSelect:Li=!0,elevateEdgesOnSelect:Rl=!1,disableKeyboardA11y:Ai=!1,autoPanOnConnect:He,autoPanOnNodeDrag:Tl,autoPanOnSelection:Eo=!0,autoPanSpeed:Di,connectionRadius:zr,isValidConnection:bl,onError:$i,style:Lr,id:jt,nodeDragThreshold:zl,connectionDragThreshold:Mt,viewport:Ll,onViewportChange:Al,width:Dl,height:Ar,colorMode:Dr="light",debug:ir,onScroll:pn,ariaLabelConfig:$l,zIndexMode:Oi="basic",...No},Fi){const sr=jt||"1",lr=gS(Dr),Ol=O.useCallback($r=>{$r.currentTarget.scrollTo({top:0,left:0,behavior:"instant"}),pn==null||pn($r)},[pn]);return g.jsx("div",{"data-testid":"rf__wrapper",...No,onScroll:Ol,style:{...Lr,...H_},ref:Fi,className:Qe(["react-flow",a,lr]),id:jt,role:"application",children:g.jsxs(F_,{nodes:t,edges:r,width:Dl,height:Ar,fitView:_o,fitViewOptions:ko,minZoom:ht,maxZoom:ot,nodeOrigin:Je,nodeExtent:Ut,zIndexMode:Oi,children:[g.jsx(pS,{nodes:t,edges:r,defaultNodes:i,defaultEdges:l,onConnect:S,onConnectStart:_,onConnectEnd:C,onClickConnectStart:E,onClickConnectEnd:N,nodesDraggable:be,autoPanOnNodeFocus:Xe,nodesConnectable:rt,nodesFocusable:Ze,edgesFocusable:Vt,edgesReconnectable:Lt,elementsSelectable:At,elevateNodesOnSelect:Li,elevateEdgesOnSelect:Rl,minZoom:ht,maxZoom:ot,nodeExtent:Ut,onNodesChange:So,onEdgesChange:jl,snapToGrid:pe,snapGrid:Ce,connectionMode:P,translateExtent:pt,connectOnClick:Il,defaultEdgeOptions:zi,fitView:_o,fitViewOptions:ko,onNodesDelete:ee,onEdgesDelete:Z,onDelete:te,onNodeDragStart:B,onNodeDrag:H,onNodeDragStop:X,onSelectionDrag:W,onSelectionDragStart:M,onSelectionDragStop:V,onMove:m,onMoveStart:x,onMoveEnd:v,noPanClassName:on,nodeOrigin:Je,rfId:sr,autoPanOnConnect:He,autoPanOnNodeDrag:Tl,autoPanSpeed:Di,onError:$i,connectionRadius:zr,isValidConnection:bl,selectNodesOnDrag:Me,nodeDragThreshold:zl,connectionDragThreshold:Mt,onBeforeDelete:F,debug:ir,ariaLabelConfig:$l,zIndexMode:Oi}),g.jsx(D_,{onInit:y,onNodeClick:f,onEdgeClick:p,onNodeMouseEnter:R,onNodeMouseMove:k,onNodeMouseLeave:j,onNodeContextMenu:z,onNodeDoubleClick:D,nodeTypes:u,edgeTypes:d,connectionLineType:T,connectionLineStyle:ne,connectionLineComponent:re,connectionLineContainerStyle:ue,selectionKeyCode:de,selectionOnDrag:Q,selectionMode:se,deleteKeyCode:ce,multiSelectionKeyCode:ge,panActivationKeyCode:fe,zoomActivationKeyCode:xe,onlyRenderVisibleElements:je,defaultViewport:lt,translateExtent:pt,minZoom:ht,maxZoom:ot,preventScrolling:Cn,zoomOnScroll:Ir,zoomOnPinch:er,zoomOnDoubleClick:Mn,panOnScroll:tr,panOnScrollSpeed:Rr,panOnScrollMode:jn,panOnDrag:Pn,autoPanOnSelection:Eo,onPaneClick:K,onPaneMouseEnter:ye,onPaneMouseMove:ze,onPaneMouseLeave:Nt,onPaneScroll:Ct,onPaneContextMenu:ji,paneClickDistance:Mi,nodeClickDistance:Pi,onSelectionContextMenu:U,onSelectionStart:A,onSelectionEnd:L,onReconnect:xo,onReconnectStart:Ri,onReconnectEnd:nr,onEdgeContextMenu:wo,onEdgeDoubleClick:rr,onEdgeMouseEnter:Cl,onEdgeMouseMove:or,onEdgeMouseLeave:Tr,reconnectRadius:br,defaultMarkerColor:hn,noDragClassName:Ml,noWheelClassName:Pl,noPanClassName:on,rfId:sr,disableKeyboardA11y:Ai,nodeExtent:Ut,viewport:Ll,onViewportChange:Al,nodesDraggable:be}),g.jsx(cS,{onSelectionChange:J}),Ii,g.jsx(iS,{proOptions:bi,position:Ti}),g.jsx(oS,{rfId:sr,disableKeyboardA11y:Ai})]})})}var V_=Cg(B_);function U_({dimensions:t,lineWidth:r,variant:i,className:l}){return g.jsx("path",{strokeWidth:r,d:`M${t[0]/2} 0 V${t[1]} M0 ${t[1]/2} H${t[0]}`,className:Qe(["react-flow__background-pattern",i,l])})}function W_({radius:t,className:r}){return g.jsx("circle",{cx:t,cy:t,r:t,className:Qe(["react-flow__background-pattern","dots",r])})}var Jn;(function(t){t.Lines="lines",t.Dots="dots",t.Cross="cross"})(Jn||(Jn={}));const Y_={[Jn.Dots]:1,[Jn.Lines]:1,[Jn.Cross]:6},X_=t=>({transform:t.transform,patternId:`pattern-${t.rfId}`});function Jg({id:t,variant:r=Jn.Dots,gap:i=20,size:l,lineWidth:a=1,offset:u=0,color:d,bgColor:f,style:p,className:y,patternClassName:m}){const x=O.useRef(null),{transform:v,patternId:S}=Re(X_,Ue),_=l||Y_[r],C=r===Jn.Dots,E=r===Jn.Cross,N=Array.isArray(i)?i:[i,i],R=[N[0]*v[2]||1,N[1]*v[2]||1],k=_*v[2],j=Array.isArray(u)?u:[u,u],z=E?[k,k]:R,D=[j[0]*v[2]+z[0]/2,j[1]*v[2]+z[1]/2],B=`${S}${t||""}`;return g.jsxs("svg",{className:Qe(["react-flow__background",y]),style:{...p,...El,"--xy-background-color-props":f,"--xy-background-pattern-color-props":d},ref:x,"data-testid":"rf__background",children:[g.jsx("pattern",{id:B,x:v[0]%R[0],y:v[1]%R[1],width:R[0],height:R[1],patternUnits:"userSpaceOnUse",patternTransform:`translate(-${D[0]},-${D[1]})`,children:C?g.jsx(W_,{radius:k/2,className:m}):g.jsx(U_,{dimensions:z,lineWidth:a,variant:r,className:m})}),g.jsx("rect",{x:"0",y:"0",width:"100%",height:"100%",fill:`url(#${B})`})]})}Jg.displayName="Background";const G_=O.memo(Jg);function Q_(){return g.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",children:g.jsx("path",{d:"M32 18.133H18.133V32h-4.266V18.133H0v-4.266h13.867V0h4.266v13.867H32z"})})}function K_(){return g.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 5",children:g.jsx("path",{d:"M0 0h32v4.2H0z"})})}function q_(){return g.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 30",children:g.jsx("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"})})}function Z_(){return g.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 25 32",children:g.jsx("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"})})}function J_(){return g.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 25 32",children:g.jsx("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"})})}function qs({children:t,className:r,...i}){return g.jsx("button",{type:"button",className:Qe(["react-flow__controls-button",r]),...i,children:t})}const ek=t=>({isInteractive:t.nodesDraggable||t.nodesConnectable||t.elementsSelectable,minZoomReached:t.transform[2]<=t.minZoom,maxZoomReached:t.transform[2]>=t.maxZoom,ariaLabelConfig:t.ariaLabelConfig});function em({style:t,showZoom:r=!0,showFitView:i=!0,showInteractive:l=!0,fitViewOptions:a,onZoomIn:u,onZoomOut:d,onFitView:f,onInteractiveChange:p,className:y,children:m,position:x="bottom-left",orientation:v="vertical","aria-label":S}){const _=Oe(),{isInteractive:C,minZoomReached:E,maxZoomReached:N,ariaLabelConfig:R}=Re(ek,Ue),{zoomIn:k,zoomOut:j,fitView:z}=hc(),D=()=>{k(),u==null||u()},B=()=>{j(),d==null||d()},H=()=>{z(a),f==null||f()},X=()=>{_.setState({nodesDraggable:!C,nodesConnectable:!C,elementsSelectable:!C}),p==null||p(!C)},ee=v==="horizontal"?"horizontal":"vertical";return g.jsxs(kl,{className:Qe(["react-flow__controls",ee,y]),position:x,style:t,"data-testid":"rf__controls","aria-label":S??R["controls.ariaLabel"],children:[r&&g.jsxs(g.Fragment,{children:[g.jsx(qs,{onClick:D,className:"react-flow__controls-zoomin",title:R["controls.zoomIn.ariaLabel"],"aria-label":R["controls.zoomIn.ariaLabel"],disabled:N,children:g.jsx(Q_,{})}),g.jsx(qs,{onClick:B,className:"react-flow__controls-zoomout",title:R["controls.zoomOut.ariaLabel"],"aria-label":R["controls.zoomOut.ariaLabel"],disabled:E,children:g.jsx(K_,{})})]}),i&&g.jsx(qs,{className:"react-flow__controls-fitview",onClick:H,title:R["controls.fitView.ariaLabel"],"aria-label":R["controls.fitView.ariaLabel"],children:g.jsx(q_,{})}),l&&g.jsx(qs,{className:"react-flow__controls-interactive",onClick:X,title:R["controls.interactive.ariaLabel"],"aria-label":R["controls.interactive.ariaLabel"],children:C?g.jsx(J_,{}):g.jsx(Z_,{})}),m]})}em.displayName="Controls";const tk=O.memo(em);function nk({id:t,x:r,y:i,width:l,height:a,style:u,color:d,strokeColor:f,strokeWidth:p,className:y,borderRadius:m,shapeRendering:x,selected:v,onClick:S}){const{background:_,backgroundColor:C}=u||{},E=d||_||C;return g.jsx("rect",{className:Qe(["react-flow__minimap-node",{selected:v},y]),x:r,y:i,rx:m,ry:m,width:l,height:a,style:{fill:E,stroke:f,strokeWidth:p},shapeRendering:x,onClick:S?N=>S(N,t):void 0})}const rk=O.memo(nk),ok=t=>t.nodes.map(r=>r.id),bu=t=>t instanceof Function?t:()=>t;function ik({nodeStrokeColor:t,nodeColor:r,nodeClassName:i="",nodeBorderRadius:l=5,nodeStrokeWidth:a,nodeComponent:u=rk,onClick:d}){const f=Re(ok,Ue),p=bu(r),y=bu(t),m=bu(i),x=typeof window>"u"||window.chrome?"crispEdges":"geometricPrecision";return g.jsx(g.Fragment,{children:f.map(v=>g.jsx(lk,{id:v,nodeColorFunc:p,nodeStrokeColorFunc:y,nodeClassNameFunc:m,nodeBorderRadius:l,nodeStrokeWidth:a,NodeComponent:u,onClick:d,shapeRendering:x},v))})}function sk({id:t,nodeColorFunc:r,nodeStrokeColorFunc:i,nodeClassNameFunc:l,nodeBorderRadius:a,nodeStrokeWidth:u,shapeRendering:d,NodeComponent:f,onClick:p}){const{node:y,x:m,y:x,width:v,height:S}=Re(_=>{const C=_.nodeLookup.get(t);if(!C)return{node:void 0,x:0,y:0,width:0,height:0};const E=C.internals.userNode,{x:N,y:R}=C.internals.positionAbsolute,{width:k,height:j}=rn(E);return{node:E,x:N,y:R,width:k,height:j}},Ue);return!y||y.hidden||!eg(y)?null:g.jsx(f,{x:m,y:x,width:v,height:S,style:y.style,selected:!!y.selected,className:l(y),color:r(y),borderRadius:a,strokeColor:i(y),strokeWidth:u,shapeRendering:d,onClick:p,id:y.id})}const lk=O.memo(sk);var ak=O.memo(ik);const uk=200,ck=150,dk=t=>!t.hidden,fk=t=>{const r={x:-t.transform[0]/t.transform[2],y:-t.transform[1]/t.transform[2],width:t.width/t.transform[2],height:t.height/t.transform[2]};return{viewBB:r,boundingRect:t.nodeLookup.size>0?qp(Ei(t.nodeLookup,{filter:dk}),r):r,rfId:t.rfId,panZoom:t.panZoom,translateExtent:t.translateExtent,flowWidth:t.width,flowHeight:t.height,ariaLabelConfig:t.ariaLabelConfig}},rp=(t,r)=>t.x===r.x&&t.y===r.y&&t.width===r.width&&t.height===r.height,hk=(t,r)=>rp(t.viewBB,r.viewBB)&&rp(t.boundingRect,r.boundingRect)&&t.rfId===r.rfId&&t.panZoom===r.panZoom&&t.translateExtent===r.translateExtent&&t.flowWidth===r.flowWidth&&t.flowHeight===r.flowHeight&&t.ariaLabelConfig===r.ariaLabelConfig,pk="react-flow__minimap-desc";function tm({style:t,className:r,nodeStrokeColor:i,nodeColor:l,nodeClassName:a="",nodeBorderRadius:u=5,nodeStrokeWidth:d,nodeComponent:f,bgColor:p,maskColor:y,maskStrokeColor:m,maskStrokeWidth:x,position:v="bottom-right",onClick:S,onNodeClick:_,pannable:C=!1,zoomable:E=!1,ariaLabel:N,inversePan:R,zoomStep:k=1,offsetScale:j=5}){const z=Oe(),D=O.useRef(null),{boundingRect:B,viewBB:H,rfId:X,panZoom:ee,translateExtent:Z,flowWidth:te,flowHeight:J,ariaLabelConfig:M}=Re(fk,hk),W=(t==null?void 0:t.width)??uk,V=(t==null?void 0:t.height)??ck,U=B.width/W,A=B.height/V,L=Math.max(U,A),F=L*W,P=L*V,T=j*L,ne=B.x-(F-B.width)/2-T,re=B.y-(P-B.height)/2-T,ue=F+T*2,ce=P+T*2,de=`${pk}-${X}`,Q=O.useRef(0),se=O.useRef();Q.current=L,O.useEffect(()=>{if(D.current&&ee)return se.current=C1({domNode:D.current,panZoom:ee,getTransform:()=>z.getState().transform,getViewScale:()=>Q.current}),()=>{var pe;(pe=se.current)==null||pe.destroy()}},[ee]),O.useEffect(()=>{var pe;(pe=se.current)==null||pe.update({translateExtent:Z,width:te,height:J,inversePan:R,pannable:C,zoomStep:k,zoomable:E})},[C,E,R,k,Z,te,J]);const fe=S?pe=>{var Me;const[Ce,je]=((Me=se.current)==null?void 0:Me.pointer(pe))||[0,0];S(pe,{x:Ce,y:je})}:void 0,ge=_?O.useCallback((pe,Ce)=>{const je=z.getState().nodeLookup.get(Ce).internals.userNode;_(pe,je)},[]):void 0,xe=N??M["minimap.ariaLabel"];return g.jsx(kl,{position:v,style:{...t,"--xy-minimap-background-color-props":typeof p=="string"?p:void 0,"--xy-minimap-mask-background-color-props":typeof y=="string"?y:void 0,"--xy-minimap-mask-stroke-color-props":typeof m=="string"?m:void 0,"--xy-minimap-mask-stroke-width-props":typeof x=="number"?x*L:void 0,"--xy-minimap-node-background-color-props":typeof l=="string"?l:void 0,"--xy-minimap-node-stroke-color-props":typeof i=="string"?i:void 0,"--xy-minimap-node-stroke-width-props":typeof d=="number"?d:void 0},className:Qe(["react-flow__minimap",r]),"data-testid":"rf__minimap",children:g.jsxs("svg",{width:W,height:V,viewBox:`${ne} ${re} ${ue} ${ce}`,className:"react-flow__minimap-svg",role:"img","aria-labelledby":de,ref:D,onClick:fe,children:[xe&&g.jsx("title",{id:de,children:xe}),g.jsx(ak,{onClick:ge,nodeColor:l,nodeStrokeColor:i,nodeBorderRadius:u,nodeClassName:a,nodeStrokeWidth:d,nodeComponent:f}),g.jsx("path",{className:"react-flow__minimap-mask",d:`M${ne-T},${re-T}h${ue+T*2}v${ce+T*2}h${-ue-T*2}z - M${H.x},${H.y}h${H.width}v${H.height}h${-H.width}z`,fillRule:"evenodd",pointerEvents:"none"})]})})}tm.displayName="MiniMap";const gk=O.memo(tm),mk=t=>r=>t?`${Math.max(1/r.transform[2],1)}`:void 0,yk={[yo.Line]:"right",[yo.Handle]:"bottom-right"};function vk({nodeId:t,position:r,variant:i=yo.Handle,className:l,style:a=void 0,children:u,color:d,minWidth:f=10,minHeight:p=10,maxWidth:y=Number.MAX_VALUE,maxHeight:m=Number.MAX_VALUE,keepAspectRatio:x=!1,resizeDirection:v,autoScale:S=!0,shouldResize:_,onResizeStart:C,onResize:E,onResizeEnd:N}){const R=Rg(),k=typeof t=="string"?t:R,j=Oe(),z=O.useRef(null),D=i===yo.Handle,B=Re(O.useCallback(mk(D&&S),[D,S]),Ue),H=O.useRef(null),X=r??yk[i];O.useEffect(()=>{if(!(!z.current||!k))return H.current||(H.current=O1({domNode:z.current,nodeId:k,getStoreItems:()=>{const{nodeLookup:Z,transform:te,snapGrid:J,snapToGrid:M,nodeOrigin:W,domNode:V}=j.getState();return{nodeLookup:Z,transform:te,snapGrid:J,snapToGrid:M,nodeOrigin:W,paneDomNode:V}},onChange:(Z,te)=>{const{triggerNodeChanges:J,nodeLookup:M,parentLookup:W,nodeOrigin:V}=j.getState(),U=[],A={x:Z.x,y:Z.y},L=M.get(k);if(L&&L.expandParent&&L.parentId){const F=L.origin??V,P=Z.width??L.measured.width??0,T=Z.height??L.measured.height??0,ne={id:L.id,parentId:L.parentId,rect:{width:P,height:T,...tg({x:Z.x??L.position.x,y:Z.y??L.position.y},{width:P,height:T},L.parentId,M,F)}},re=fc([ne],M,W,V);U.push(...re),A.x=Z.x?Math.max(F[0]*P,Z.x):void 0,A.y=Z.y?Math.max(F[1]*T,Z.y):void 0}if(A.x!==void 0&&A.y!==void 0){const F={id:k,type:"position",position:{...A}};U.push(F)}if(Z.width!==void 0&&Z.height!==void 0){const P={id:k,type:"dimensions",resizing:!0,setAttributes:v?v==="horizontal"?"width":"height":!0,dimensions:{width:Z.width,height:Z.height}};U.push(P)}for(const F of te){const P={...F,type:"position"};U.push(P)}J(U)},onEnd:({width:Z,height:te})=>{const J={id:k,type:"dimensions",resizing:!1,dimensions:{width:Z,height:te}};j.getState().triggerNodeChanges([J])}})),H.current.update({controlPosition:X,boundaries:{minWidth:f,minHeight:p,maxWidth:y,maxHeight:m},keepAspectRatio:x,resizeDirection:v,onResizeStart:C,onResize:E,onResizeEnd:N,shouldResize:_}),()=>{var Z;(Z=H.current)==null||Z.destroy()}},[X,f,p,y,m,x,C,E,N,_]);const ee=X.split("-");return g.jsx("div",{className:Qe(["react-flow__resize-control","nodrag",...ee,i,l]),ref:z,style:{...a,scale:B,...d&&{[D?"backgroundColor":"borderColor"]:d}},children:u})}O.memo(vk);const xk={"arch.context":0,"django.app":0,"django.route":1,"django.url_name":1,"django.view":2,"django.viewset_action":2,"django.permission":2,"django.serializer":3,"django.form":3,"django.serializer_field":4,"django.service":4,"django.model":5,"django.field":6,"django.relation":6,"django.task":7,"django.receiver":7,"django.signal":7,"django.test":7,"django.migration_op":7,"django.admin":7,"openapi.path":8,"react.api_client":9,"react.query_key":10,"react.hook":10,"react.feature":10,"react.route":11,"react.page":11,"react.component":12,"react.form_schema":13,"react.test":13,"react.context":12};function gc(t){return xk[t]??8}function wk(t){const r=new Map;for(const l of t){const a=gc(l.type),u=r.get(a)??[];u.push(l),r.set(a,u)}const i=new Map;for(const[l,a]of r)a.sort((u,d)=>u.name.localeCompare(d.name)),a.forEach((u,d)=>{i.set(u.id,{x:l*260,y:d*108})});return i}const nm=90,Sk=new Set(["django.field","django.serializer_field","django.relation","django.test","react.test","django.url_name","django.throttle"]),op={"arch.context":"#edf2f4","django.app":"#8d99ae","django.route":"#4cc9f0","django.view":"#4895ef","django.viewset_action":"#4361ee","django.permission":"#7b8cde","django.serializer":"#f4a261","django.form":"#e9c46a","django.serializer_field":"#e9c46a","django.service":"#90be6d","django.model":"#2a9d8f","django.field":"#8ac926","django.task":"#e76f51","django.receiver":"#e85d04","django.signal":"#f4a261","django.test":"#6c757d","django.admin":"#adb5bd","django.migration_op":"#9d4edd","openapi.path":"#00bbf9","react.api_client":"#ff6b6b","react.query_key":"#adb5bd","react.hook":"#7b2cbf","react.feature":"#9d4edd","react.route":"#c77dff","react.page":"#c77dff","react.component":"#9d4edd","react.form_schema":"#ffd166","react.test":"#6c757d"},_k=Math.PI*(3-Math.sqrt(5)),rm=220,kk=26,Yk={0:"context",1:"routes",2:"views",3:"serializers",4:"services",5:"models",6:"fields",7:"jobs / signals",8:"openapi",9:"api client",10:"hooks",11:"pages",12:"components",13:"forms / tests"};function om(t){return t.startsWith("react.")?"react":t.startsWith("openapi.")?"stitch":t.startsWith("arch.")?"arch":"django"}function Xk(t){return op[t]?op[t]:t.startsWith("react.")?"#9d4edd":t.startsWith("openapi.")?"#00bbf9":"#4a5568"}function Ek(t){return t>=nm?"3d":"2d"}function Nk(t){return t>=nm?"overview":"full"}function Ck(t,r,i=1){const l=new Set([t]);let a=new Set([t]);for(let u=0;ui.families.has(om(f.type)));i.detail==="overview"&&(l=l.filter(f=>!Sk.has(f.type)));const a=new Set(l.map(f=>f.id)),u=r.filter(f=>a.has(f.src)&&a.has(f.dst)),d=i.focusId?Ck(i.focusId,u,1):new Set;if(i.neighborhoodOnly&&i.focusId&&d.size){l=l.filter(p=>d.has(p.id));const f=new Set(l.map(p=>p.id));return{nodes:l,edges:u.filter(p=>f.has(p.src)&&f.has(p.dst)),neighborIds:d}}return{nodes:l,edges:u,neighborIds:d}}function Gk(t){const r=new Map;for(const l of t){const a=gc(l.type),u=r.get(a)??[];u.push(l),r.set(a,u)}const i=new Map;for(const[l,a]of r){a.sort((d,f)=>d.name.localeCompare(f.name));const u=l*rm;a.forEach((d,f)=>{if(a.length===1){i.set(d.id,{x:u,y:0,z:0});return}const p=kk*Math.sqrt(f+1),y=f*_k;i.set(d.id,{x:u,y:p*Math.cos(y),z:p*Math.sin(y)})})}return i}function Qk(t){const r=new Map;for(const i of t){const l=gc(i.type);r.set(l,(r.get(l)||0)+1)}return[...r.entries()].sort((i,l)=>i[0]-l[0]).map(([i,l])=>({layer:i,x:i*rm,count:l}))}const Mk=O.lazy(()=>uy(()=>import("./LayeredGraph3D-CUJpCaK3.js"),[],import.meta.url).then(t=>({default:t.LayeredGraph3D}))),Pk={cheap:"var(--edge-cheap)",expensive:"var(--edge-expensive)",critical:"var(--edge-critical)"};function Ik({data:t,selected:r}){return g.jsxs("div",{className:r?"lp-node selected":"lp-node",children:[g.jsx(vo,{type:"target",position:_e.Left,isConnectable:!1}),g.jsx("div",{className:"t",children:Qu(t.type)}),g.jsx("div",{className:"n",title:t.name,children:t.name}),g.jsx(vo,{type:"source",position:_e.Right,isConnectable:!1})]})}const Rk={load:Ik},ip=180,sp=56,Tk=new Set(["django","react","stitch","arch"]);function bk(t,r,i=null){const l=new Map(t.map(f=>[f.id,f])),a=wk(t),u=t.map(f=>({id:f.id,type:"load",position:a.get(f.id)??{x:0,y:0},data:{name:f.name,type:f.type,file:f.file_path},selected:i===f.id,sourcePosition:_e.Right,targetPosition:_e.Left,width:ip,height:sp,style:{width:ip,height:sp}})),d=r.filter(f=>l.has(f.src)&&l.has(f.dst)).map(f=>{const p=Pk[f.weight]||"var(--edge-cheap)";return{id:f.id,source:f.src,target:f.dst,type:"smoothstep",animated:f.weight==="critical",style:{stroke:p,strokeWidth:f.weight==="critical"?2.4:1.2,strokeDasharray:f.confidence<.8?"6 4":void 0},markerEnd:{type:mi.ArrowClosed,width:14,height:14,color:p},label:f.type.replaceAll("_"," "),labelStyle:{fill:"var(--muted)",fontSize:10}}});return{rfNodes:u,rfEdges:d}}function lp({node:t}){return g.jsxs("aside",{className:"inspector","data-testid":"graph-inspector",children:[g.jsx("div",{className:"t",children:Qu(t.type)}),g.jsx("div",{className:"n",children:Bs(t.name)}),t.context?g.jsx("div",{className:"muted",children:Bs(t.context)}):null,t.file_path?g.jsx("div",{className:"file",children:Bs(`${t.file_path}${t.start_line?`:${t.start_line}`:""}`)}):null,g.jsx("div",{className:"muted",children:Bs(t.qualified_name)})]})}function zu({nodes:t,edges:r}){const[i,l]=O.useState(null),[a,u]=O.useState(null),[d,f]=O.useState(null),[p,y]=O.useState(new Set(Tk)),[m,x]=O.useState(!1),v=typeof window<"u"&&window.matchMedia("(prefers-reduced-motion: reduce)").matches,S=a??Ek(t.length),_=d??Nk(t.length),C=O.useMemo(()=>jk(t,r,{detail:_,families:p,focusId:i,neighborhoodOnly:m&&S==="3d"}),[t,r,_,p,i,m,S]),E=O.useMemo(()=>new Map(C.nodes.map(H=>[H.id,H])),[C.nodes]),N=i?E.get(i)??null:null,{rfNodes:R,rfEdges:k}=O.useMemo(()=>{const H=bk(C.nodes,C.edges,i);return v&&(H.rfEdges=H.rfEdges.map(X=>({...X,animated:!1}))),H},[C.nodes,C.edges,i,v]);O.useEffect(()=>{i&&!E.has(i)&&l(null)},[E,i]);const j=(H,X)=>{l(X.id)},z=H=>{y(X=>{const ee=new Set(X);if(ee.has(H)){if(ee.size===1)return X;ee.delete(H)}else ee.add(H);return ee})},D=O.useMemo(()=>{const H=new Set;for(const X of t)H.add(om(X.type));return H},[t]),B=t.length-C.nodes.length;return g.jsxs("div",{className:"impact-graph",style:{flex:1,minHeight:0,position:"relative",display:"flex",flexDirection:"column"},children:[g.jsxs("div",{className:"graph-toolbar","data-testid":"graph-toolbar",children:[g.jsxs("div",{className:"seg","aria-label":"Graph projection",children:[g.jsx("button",{type:"button","data-testid":"graph-view-2d",className:S==="2d"?"active":"","aria-pressed":S==="2d",onClick:()=>u("2d"),children:"2D map"}),g.jsx("button",{type:"button","data-testid":"graph-view-3d",className:S==="3d"?"active":"","aria-pressed":S==="3d",onClick:()=>u("3d"),children:"3D layers"})]}),g.jsxs("div",{className:"seg","aria-label":"Graph detail",children:[g.jsx("button",{type:"button","data-testid":"graph-detail-overview",className:_==="overview"?"active":"","aria-pressed":_==="overview",onClick:()=>f("overview"),children:"Overview"}),g.jsx("button",{type:"button","data-testid":"graph-detail-full",className:_==="full"?"active":"","aria-pressed":_==="full",onClick:()=>f("full"),children:"Full"})]}),g.jsx("div",{className:"seg","aria-label":"Graph families",children:["django","stitch","react"].filter(H=>D.has(H)).map(H=>g.jsx("button",{type:"button","data-testid":`graph-family-${H}`,className:p.has(H)?"active":"","aria-pressed":p.has(H),onClick:()=>z(H),children:H},H))}),S==="3d"?g.jsx("button",{type:"button",className:m?"chip-btn active":"chip-btn","data-testid":"graph-neighborhood",disabled:!i,onClick:()=>x(H=>!H),children:m?"Neighborhood":"Focus neighbors"}):null,g.jsxs("span",{className:"muted graph-count",children:[C.nodes.length," nodes · ",C.edges.length," edges",B?` · ${B} hidden`:""]})]}),g.jsx("div",{className:"graph-stage",children:S==="3d"?g.jsxs("div",{className:"graph-3d","data-testid":"graph-3d",children:[g.jsx("p",{className:"graph-3d-hint",children:"Architecture layers are stacked in depth (Django → stitch → React). Drag to orbit, scroll to zoom, click a node to inspect it."}),g.jsx(O.Suspense,{fallback:g.jsx("p",{className:"muted graph-3d-hint",children:"Loading 3D layers…"}),children:g.jsx(Mk,{nodes:C.nodes,edges:C.edges,selectedId:i,neighborIds:C.neighborIds,onSelect:H=>{l(H),H||x(!1)}})}),N?g.jsx(lp,{node:N}):null]}):g.jsxs(Zg,{children:[g.jsxs(V_,{nodes:R,edges:k,nodeTypes:Rk,fitView:!0,fitViewOptions:{padding:.2,maxZoom:1.15},minZoom:.25,nodesDraggable:!1,nodesConnectable:!1,elementsSelectable:!0,deleteKeyCode:null,onNodeClick:j,onPaneClick:()=>l(null),proOptions:{hideAttribution:!1},"data-testid":"impact-graph",children:[g.jsx(G_,{}),g.jsx(gk,{pannable:!0,zoomable:!0,ariaLabel:"Impact graph overview",nodeColor:"var(--muted)",nodeStrokeColor:"transparent",nodeStrokeWidth:0,maskColor:"rgba(0, 0, 0, 0.45)",maskStrokeColor:"var(--accent)",maskStrokeWidth:1.4,bgColor:"var(--graph-bg)",style:{width:184,height:128}}),g.jsx(tk,{})]}),N?g.jsx(lp,{node:N}):null]})})]})}const ap=[{value:"HEAD",label:"HEAD",group:"preset"},{value:"HEAD~1",label:"HEAD~1",group:"preset"}],zk=["preset","branch","tag","commit"];function Lk(t){var a;if(!(t!=null&&t.git))return[...ap];const r=((a=t.presets)!=null&&a.length?t.presets:ap.map(u=>u.value)).map(u=>({value:u,label:u,group:"preset"})),i=new Set(r.map(u=>u.value)),l=[...r];for(const u of t.branches||[])i.has(u.name)||(i.add(u.name),l.push({value:u.name,label:u.current?`${u.name} (current)`:u.name,detail:u.subject,group:"branch"}));for(const u of t.tags||[])i.has(u.name)||(i.add(u.name),l.push({value:u.name,label:u.name,detail:u.subject,group:"tag"}));for(const u of t.commits||[])i.has(u.sha)||(i.add(u.sha),l.push({value:u.sha,label:u.short,detail:u.subject,group:"commit"}));return l}function Ak(t,r){const i=r.trim().toLowerCase();return i?t.filter(l=>l.value.toLowerCase().includes(i)||l.label.toLowerCase().includes(i)||(l.detail||"").toLowerCase().includes(i)):t}function Dk(t){return zk.map(r=>({group:r,items:t.filter(i=>i.group===r)})).filter(r=>r.items.length>0)}function $k(t){return t==="preset"?"Common":t==="branch"?"Branches":t==="tag"?"Tags":"Recent commits"}function up({value:t,onChange:r,placeholder:i,testId:l,menuTestId:a,refs:u,onNeedRefs:d}){const f=O.useId(),p=O.useRef(null),[y,m]=O.useState(!1),[x,v]=O.useState(null),[S,_]=O.useState(0),C=O.useMemo(()=>{const j=Lk(u);return x===null?j:Ak(j,x)},[u,x]),E=O.useMemo(()=>Dk(C),[C]);O.useEffect(()=>{y&&d()},[y,d]),O.useEffect(()=>{_(0)},[x,y]);const N=()=>{m(!1),v(null)},R=j=>{r(j.value),N()},k=j=>{if(j.key==="ArrowDown"){if(j.preventDefault(),!y){m(!0);return}_(z=>Math.min(z+1,Math.max(C.length-1,0)))}else if(j.key==="ArrowUp"){if(j.preventDefault(),!y)return;_(z=>Math.max(z-1,0))}else if(j.key==="Enter"&&y){j.preventDefault();const z=C[S];z&&R(z)}else j.key==="Escape"&&y&&(j.preventDefault(),N())};return g.jsxs("div",{className:"combo",ref:p,onBlur:j=>{j.currentTarget.contains(j.relatedTarget)||N()},children:[g.jsxs("div",{className:"combo-row",children:[g.jsx("input",{"data-testid":l,value:t,placeholder:i,spellCheck:!1,role:"combobox","aria-expanded":y,"aria-controls":f,"aria-autocomplete":"list",onChange:j=>{r(j.target.value),y&&v(j.target.value)},onKeyDown:k}),g.jsx("button",{type:"button",className:"icon-btn combo-toggle","data-testid":`${l}-toggle`,"aria-label":"Show recent refs","aria-expanded":y,onMouseDown:j=>j.preventDefault(),onClick:()=>y?N():m(!0),children:g.jsx(sy,{})})]}),y?g.jsx("div",{className:"combo-menu",id:f,role:"listbox","data-testid":a,children:E.length===0?g.jsx("div",{className:"combo-empty muted",children:"No matching refs — the typed value is kept"}):E.map(j=>g.jsxs("div",{className:"combo-group",children:[g.jsx("div",{className:"combo-heading",children:$k(j.group)}),j.items.map(z=>{const D=C.indexOf(z);return g.jsxs("button",{type:"button",role:"option","aria-selected":D===S,className:D===S?"combo-option active":"combo-option","data-testid":`ref-option-${z.group}`,onMouseDown:B=>B.preventDefault(),onMouseEnter:()=>_(D),onClick:()=>R(z),children:[g.jsx("span",{className:"combo-label",children:z.label}),z.detail?g.jsx("span",{className:"combo-detail",children:z.detail}):null]},`${z.group}:${z.value}`)})]},j.group))}):null]})}function Ok({initialPath:t,onSelect:r,onClose:i}){const[l,a]=O.useState(null),[u,d]=O.useState(t),[f,p]=O.useState(null),[y,m]=O.useState(""),[x,v]=O.useState(!1),S=O.useRef(null),_=O.useRef(0),C=async k=>{const j=_.current+1;_.current=j,v(!0);try{const z=await ft.browse(k);if(_.current!==j)return;a(z),d(z.path),p(z.is_git?z.path:null),m("")}catch(z){if(_.current!==j)return;m(z instanceof Error?z.message:String(z))}finally{_.current===j&&v(!1)}};O.useEffect(()=>{var k,j;C(t),(k=S.current)==null||k.focus(),(j=S.current)==null||j.select()},[t]);const E=f||(l==null?void 0:l.path)||u,N=f&&f!==(l==null?void 0:l.path)?f.split(/[\\/]/).filter(Boolean).pop():l!=null&&l.is_git?"this repository":"this folder",R=k=>{k.key==="Escape"&&(k.preventDefault(),i())};return g.jsx("div",{className:"modal-backdrop","data-testid":"repo-explorer","data-overlay":"true",onClick:i,onKeyDown:R,children:g.jsxs("div",{className:"modal",role:"dialog","aria-modal":"true","aria-labelledby":"explorer-title",onClick:k=>k.stopPropagation(),children:[g.jsxs("div",{className:"modal-head",children:[g.jsxs("div",{children:[g.jsx("h2",{id:"explorer-title",children:"Select repository"}),g.jsx("p",{className:"muted",children:"Browse to a git root, or paste the full path."})]}),g.jsx("button",{type:"button",className:"btn ghost","data-testid":"explorer-cancel",onClick:i,children:"Cancel"})]}),g.jsxs("form",{className:"explorer-path",onSubmit:k=>{k.preventDefault(),C(u)},children:[g.jsx("input",{ref:S,"data-testid":"explorer-path",value:u,onChange:k=>d(k.target.value),spellCheck:!1,"aria-label":"Directory path"}),g.jsx("button",{type:"button",className:"btn",disabled:!(l!=null&&l.parent),onClick:()=>(l==null?void 0:l.parent)&&void C(l.parent),children:"Up"}),g.jsx("button",{type:"button",className:"btn",onClick:()=>l&&void C(l.home),children:"Home"}),g.jsx("button",{type:"submit",className:"btn",children:"Go"})]}),y?g.jsx("div",{className:"error",role:"alert",children:y}):null,g.jsx("div",{className:"explorer-list",role:"listbox","aria-label":"Folders","aria-busy":x,children:l!=null&&l.entries.length?l.entries.map(k=>{const j=f===k.path;return g.jsxs("button",{type:"button",role:"option","aria-selected":j,className:j?"explorer-row active":"explorer-row","data-testid":"explorer-entry","data-path":k.path,onClick:()=>p(k.path),onDoubleClick:()=>void C(k.path),children:[g.jsx(hp,{}),g.jsx("span",{className:"explorer-name",children:k.name}),k.is_git?g.jsx("span",{className:"chip git-badge",children:"git"}):null]},k.path)}):g.jsx("div",{className:"muted explorer-empty",children:x?"Loading…":"No folders here"})}),g.jsxs("div",{className:"modal-foot",children:[g.jsx("span",{className:"muted explorer-current",title:E,children:E}),g.jsxs("button",{type:"button",className:"btn primary","data-testid":"explorer-use",disabled:!E,onClick:()=>E&&r(E),children:["Use ",N]})]})]})})}const hl=[{id:"obsidian",label:"Obsidian",group:"dark"},{id:"nord",label:"Nord",group:"dark"},{id:"solarized-dark",label:"Solarized Dark",group:"dark"},{id:"forest",label:"Forest",group:"dark"},{id:"rose",label:"Rose Pine",group:"dark"},{id:"amber",label:"Midnight Amber",group:"dark"},{id:"volcano",label:"Volcano",group:"dark"},{id:"lavender",label:"Lavender",group:"dark"},{id:"neon-noir",label:"Neon Noir",group:"dark"},{id:"synthwave",label:"Synthwave",group:"dark"},{id:"phosphor",label:"Phosphor",group:"dark"},{id:"aurora",label:"Aurora",group:"dark"},{id:"biolume",label:"Biolume",group:"dark"},{id:"carbon",label:"Carbon",group:"dark"},{id:"paper",label:"Paper",group:"light"},{id:"solarized-light",label:"Solarized Light",group:"light"},{id:"seafoam",label:"Seafoam",group:"light"},{id:"high-contrast",label:"High Contrast",group:"light"},{id:"sakura",label:"Sakura",group:"light"},{id:"citrus",label:"Citrus",group:"light"},{id:"peach",label:"Peach Fuzz",group:"light"},{id:"candy",label:"Cotton Candy",group:"light"},{id:"sky",label:"Clear Sky",group:"light"},{id:"coral",label:"Coral Reef",group:"light"}],Fk="obsidian",im="loadpath.theme";function Hk(t){return hl.some(r=>r.id===t)}function sm(){try{const t=localStorage.getItem(im)||"";if(Hk(t))return t}catch{}return Fk}function Bk(t){var r;return((r=hl.find(i=>i.id===t))==null?void 0:r.group)==="light"?"light":"dark"}function lm(t){document.documentElement.dataset.theme=t,document.documentElement.style.colorScheme=Bk(t);try{localStorage.setItem(im,t)}catch{}}const cp=[{id:"review",label:"Review",testId:"tab-review",shortcut:"1",icon:ty},{id:"architecture",label:"Architecture",testId:"tab-architecture",shortcut:"2",icon:ny},{id:"graph",label:"Impact graph",testId:"tab-graph",shortcut:"3",icon:ry},{id:"prs",label:"Pull requests",testId:"tab-prs",shortcut:"4",icon:oy},{id:"settings",label:"Settings",testId:"tab-settings",shortcut:"5",icon:iy}];function Vk(){var Ir,er,tr,Rr,jn,Mn,Pn;const[t,r]=O.useState("review"),[i,l]=O.useState(localStorage.getItem("loadpath.repo")||""),[a,u]=O.useState(localStorage.getItem("loadpath.base")||"HEAD~1"),[d,f]=O.useState(localStorage.getItem("loadpath.head")||"HEAD"),[p,y]=O.useState(null),[m,x]=O.useState(null),[v,S]=O.useState([]),[_,C]=O.useState("review"),[E,N]=O.useState(""),[R,k]=O.useState(""),[j,z]=O.useState(""),[D,B]=O.useState({}),[H,X]=O.useState([]),[ee,Z]=O.useState(localStorage.getItem("loadpath.scmRepo")||""),[te,J]=O.useState(localStorage.getItem("loadpath.provider")||"github"),[M,W]=O.useState(localStorage.getItem("loadpath.prNumber")||""),[V,U]=O.useState(""),[A,L]=O.useState(sm),[F,P]=O.useState(!1),[T,ne]=O.useState(!1),[re,ue]=O.useState(null),ce=O.useRef(i);ce.current=i;const de=O.useRef(!1);de.current=T;const Q=O.useRef(""),se=K=>{L(K),lm(K)},fe=O.useRef(""),ge=K=>{fe.current=K,k(K)};O.useEffect(()=>{ft.settings().then(B).catch(()=>{}).finally(()=>P(!0)),ft.repos().then(K=>S(K.repos)).catch(()=>{})},[]);const xe=()=>i.trim()?!0:(N("Point at a local repository path first."),!1);O.useEffect(()=>{if(t!=="architecture"||!i.trim())return;const K=i;let ye=!1;return ft.architecture(K).then(ze=>{!ye&&ce.current===K&&x(ze)}).catch(()=>{}),()=>{ye=!0}},[t,i]);const pe=K=>{l(K),localStorage.setItem("loadpath.repo",K),K.trim()!==Q.current&&(Q.current="",ue(null))},Ce=O.useCallback(()=>{const K=ce.current.trim();!K||Q.current===K||(Q.current=K,ft.gitRefs(K).then(ye=>{ce.current.trim()===K&&ue(ye)}).catch(()=>{Q.current===K&&(Q.current="",ue(null))}))},[]),je=(K,ye)=>{u(K),f(ye),localStorage.setItem("loadpath.base",K),localStorage.setItem("loadpath.head",ye)},Me=(K,ye,ze)=>{J(K),Z(ye),localStorage.setItem("loadpath.provider",K),localStorage.setItem("loadpath.scmRepo",ye),ze!==void 0&&(W(ze),localStorage.setItem("loadpath.prNumber",ze))},be=async(K=i)=>{if(!K.trim())return null;const ye=await ft.architecture(K);return ce.current===K&&x(ye),ye},Xe=async()=>{if(!fe.current&&xe()){N(""),z(""),ge("Tracing load path…"),pe(i),je(a,d);try{const K=await ft.review(i,a,d,!0);y(K),C("review"),r("review"),await ft.repos().then(ye=>S(ye.repos)).catch(()=>{}),await be(i)}catch(K){N(K instanceof Error?K.message:String(K))}finally{ge("")}}},rt=async(K=!0)=>{if(!fe.current&&xe()){N(""),z(""),ge(K?"Indexing…":"Full reindex…"),pe(i);try{await ft.index(i,K);const ye=await be(i);await ft.repos().then(ze=>S(ze.repos)).catch(()=>{}),ye!=null&&ye.indexed&&(C("architecture"),r("architecture"))}catch(ye){N(ye instanceof Error?ye.message:String(ye))}finally{ge("")}}},Ze=async()=>{if(!fe.current&&xe()){N(""),z(""),ge("Detecting layout…"),pe(i);try{const K=await ft.init(i);z(K.message),await ft.repos().then(ye=>S(ye.repos)).catch(()=>{})}catch(K){N(K instanceof Error?K.message:String(K))}finally{ge("")}}},Je=async()=>{if(p!=null&&p.markdown)try{await navigator.clipboard.writeText(p.markdown),z("Copied markdown brief")}catch(K){N(K instanceof Error?K.message:String(K))}},Vt=async()=>{if(!fe.current){if(!(p!=null&&p.markdown)||!ee||!M){N("Pick a pull request first (Pull requests tab), then post the brief.");return}ge("Posting Loadpath brief…");try{const K=await ft.postComment(te,ee,Number(M),p.markdown);z(K.updated?"Updated the Loadpath PR comment":"Posted the Loadpath PR comment")}catch(K){N(K instanceof Error?K.message:String(K))}finally{ge("")}}},Lt=async()=>{if(!fe.current){N(""),ge("Fetching pull requests…");try{const K=await ft.prs(te,ee);X(K.pull_requests)}catch(K){N(K instanceof Error?K.message:String(K))}finally{ge("")}}},At=async K=>{K.preventDefault();const ye=new FormData(K.currentTarget),ze={github_token:String(ye.get("github_token")||""),bitbucket_token:String(ye.get("bitbucket_token")||""),bitbucket_username:String(ye.get("bitbucket_username")||""),ai_provider:String(ye.get("ai_provider")||"none"),ai_api_key:String(ye.get("ai_api_key")||""),ai_model:String(ye.get("ai_model")||""),ai_base_url:String(ye.get("ai_base_url")||"")},Nt=v.length?{...ze,workspaces:v.map(Ct=>({path:Ct.path,name:Ct.name}))}:ze;try{B(await ft.saveSettings(Nt)),z("Settings saved on this machine")}catch(Ct){N(Ct instanceof Error?Ct.message:String(Ct))}},lt=async()=>{if(!(!p||fe.current)){ge("Residual analysis…");try{const K=await ft.residual(p);U(K.note)}catch(K){N(K instanceof Error?K.message:String(K))}finally{ge("")}}},ht=O.useRef(Xe);ht.current=Xe;const ot=O.useRef(t);ot.current=t,O.useEffect(()=>{const K=ye=>{if(de.current){ye.key==="Escape"&&(ye.preventDefault(),ne(!1));return}const ze=ye.target;if(ze&&(ze.tagName==="INPUT"||ze.tagName==="TEXTAREA"||ze.tagName==="SELECT"||ze.isContentEditable)){ye.key==="Escape"&&ze.blur();return}if(ye.key==="Escape"){N(""),z("");return}const Nt=cp.find(Ct=>Ct.shortcut===ye.key);if(Nt&&!ye.metaKey&&!ye.ctrlKey&&!ye.altKey&&r(Nt.id),(ye.metaKey||ye.ctrlKey)&&ye.key==="Enter"){if(ot.current==="settings"||ot.current==="prs"||fe.current)return;ye.preventDefault(),ht.current()}};return window.addEventListener("keydown",K),()=>window.removeEventListener("keydown",K)},[]);const pt=O.useMemo(()=>_==="architecture"?(m==null?void 0:m.nodes)??[]:(p==null?void 0:p.nodes)??[],[_,m,p]),Cn=O.useMemo(()=>_==="architecture"?(m==null?void 0:m.edges)??[]:(p==null?void 0:p.edges)??[],[_,m,p]),Ut=p!=null&&p.index?`${p.index.counts.nodes} nodes · ${p.index.counts.edges} edges`:m!=null&&m.indexed?`${m.counts.nodes} nodes · ${m.counts.edges} edges`:"Not indexed",hn=((p==null?void 0:p.findings)||[]).filter(K=>!K.waived);return g.jsxs("div",{className:"app",children:[g.jsx("a",{className:"skip",href:"#main",children:"Skip to content"}),g.jsxs("nav",{className:"rail","data-testid":"rail","aria-label":"Primary",children:[g.jsxs("div",{className:"brand",children:[g.jsx("div",{className:"brand-mark",children:"Loadpath"}),g.jsx("div",{className:"brand-sub",children:"Load-path review"})]}),cp.map(K=>{const ye=K.icon,ze=t===K.id;return g.jsxs("button",{type:"button","data-testid":K.testId,className:ze?"nav-item active":"nav-item","aria-current":ze?"page":void 0,"aria-label":K.label,onClick:()=>r(K.id),children:[g.jsx(ye,{}),g.jsx("span",{children:K.label})]},K.id)}),g.jsxs("div",{className:"theme-pick",children:[g.jsx("label",{htmlFor:"theme-select",children:"Theme"}),g.jsx("select",{id:"theme-select","data-testid":"theme-select",value:A,onChange:K=>se(K.target.value),children:["dark","light"].map(K=>g.jsx("optgroup",{label:K==="dark"?"Dark":"Light",children:hl.filter(ye=>ye.group===K).map(ye=>g.jsx("option",{value:ye.id,children:ye.label},ye.id))},K))})]}),g.jsxs("div",{className:"rail-foot",children:[g.jsx("div",{className:"muted",role:"status",children:R||Ut}),g.jsxs("div",{className:"kbd-hint",children:[g.jsx("kbd",{children:"1"}),"–",g.jsx("kbd",{children:"5"})," tabs · ",g.jsx("kbd",{children:"Ctrl"}),"+",g.jsx("kbd",{children:"Enter"})," review"]})]})]}),g.jsxs("div",{className:"main",id:"main",children:[R?g.jsxs("div",{className:"progress",role:"status","aria-live":"polite","aria-busy":"true",children:[g.jsx("i",{}),g.jsx("span",{className:"sr-only",children:R})]}):null,g.jsxs("header",{className:"topbar","data-testid":"topbar",children:[v.length>0?g.jsxs("label",{className:"field workspace",children:[g.jsx("span",{children:"Workspace"}),g.jsxs("select",{"data-testid":"workspace-select",value:v.some(K=>K.path===i)?i:"",onChange:K=>{K.target.value&&pe(K.target.value)},children:[g.jsx("option",{value:"",children:"Indexed repos…"}),v.map(K=>g.jsxs("option",{value:K.path,children:[K.name,K.indexed?` (${K.counts.nodes})`:""]},K.path))]})]}):null,g.jsxs("label",{className:"field path",children:[g.jsx("span",{children:"Repository"}),g.jsxs("div",{className:"path-row",children:[g.jsx("input",{"data-testid":"repo-path",placeholder:"Local monorepo path",value:i,onChange:K=>{const ye=K.target.value;l(ye),ye.trim()!==Q.current&&(Q.current="",ue(null))},spellCheck:!1}),g.jsx("button",{type:"button",className:"icon-btn","data-testid":"btn-browse-repo","aria-label":"Browse for a local repository",onClick:()=>ne(!0),children:g.jsx(hp,{})})]})]}),g.jsxs("label",{className:"field ref",children:[g.jsx("span",{children:"Base"}),g.jsx(up,{testId:"base-ref",menuTestId:"base-ref-menu",value:a,onChange:K=>je(K,d),placeholder:"base",refs:re,onNeedRefs:Ce})]}),g.jsxs("label",{className:"field ref",children:[g.jsx("span",{children:"Head"}),g.jsx(up,{testId:"head-ref",menuTestId:"head-ref-menu",value:d,onChange:K=>je(a,K),placeholder:"head",refs:re,onNeedRefs:Ce})]}),g.jsxs("div",{className:"topbar-actions",children:[g.jsx("button",{type:"button","data-testid":"btn-init",disabled:!!R,onClick:Ze,children:"Draft config"}),g.jsx("button",{type:"button","data-testid":"btn-index",disabled:!!R,onClick:()=>rt(!0),children:"Index"}),g.jsx("button",{type:"button","data-testid":"btn-review",className:"btn primary",disabled:!!R,onClick:Xe,children:"Review"})]})]}),g.jsxs("div",{className:"alerts",children:[E?g.jsxs("div",{className:"error","data-testid":"error",role:"alert",children:[g.jsx("span",{children:E}),g.jsx("button",{type:"button",className:"dismiss",onClick:()=>N(""),"aria-label":"Dismiss error",children:"×"})]}):null,j?g.jsxs("div",{className:"banner","data-testid":"status-note",children:[g.jsx("span",{children:j}),g.jsx("button",{type:"button",className:"dismiss",onClick:()=>z(""),"aria-label":"Dismiss",children:"×"})]}):null,((Ir=p==null?void 0:p.index)!=null&&Ir.stale||m!=null&&m.stale)&&(t==="review"||t==="architecture")?g.jsx("div",{className:"banner stale","data-testid":"index-stale",children:"Index is stale — files changed since the last extract. Index again before trusting this walk."}):null,((er=p==null?void 0:p.index)==null?void 0:er.django_boot)==="failed"||(m==null?void 0:m.django_boot)==="failed"?g.jsx("div",{className:"banner warn","data-testid":"django-boot-failed",children:((tr=p==null?void 0:p.index)==null?void 0:tr.django_boot_detail)||(m==null?void 0:m.django_boot_detail)||"django.setup() failed"}):null,(Rr=p==null?void 0:p.workspace)!=null&&Rr.dirty_overlaps_review&&t==="review"?g.jsxs("div",{className:"banner warn","data-testid":"dirty-tree",children:["Uncommitted files overlap this review: ",(p.workspace.dirty_overlap||[]).slice(0,6).join(", ")]}):null]}),g.jsxs("div",{className:"stage",children:[t==="review"&&g.jsxs("div",{className:"content","data-testid":"review-layout",children:[g.jsx("aside",{className:"brief","data-testid":"brief",children:p?g.jsx(Uk,{review:p,findings:hn,aiNote:V,busy:!!R,onAskAi:lt,onCopy:Je,onPost:Vt}):g.jsxs("div",{className:"empty","data-testid":"review-empty",children:[g.jsx("h2",{children:"Trace the force of this diff"}),g.jsx("p",{children:"The graph is the architecture. The brief is where this change travels — not a hunk list."}),g.jsxs("ol",{children:[g.jsx("li",{children:"Point at a Django + React monorepo, or pick an indexed workspace."}),g.jsxs("li",{children:["Index it. Missing ",g.jsx("code",{children:"loadpath.yml"})," is drafted from ",g.jsx("code",{children:"manage.py"})," and"," ",g.jsx("code",{children:"src/features"}),"."]}),g.jsx("li",{children:"Review a git range, or open a pull request so base/head become a three-dot merge-base."})]})]})}),g.jsx("div",{className:"graph-wrap","data-testid":"review-graph",children:p?g.jsx(zu,{nodes:p.nodes,edges:p.edges}):null})]}),t==="architecture"&&g.jsxs("div",{className:"content","data-testid":"architecture-panel",children:[g.jsx("aside",{className:"brief","data-testid":"architecture-brief",children:m!=null&&m.indexed?g.jsx(Wk,{architecture:m,busy:!!R,onReindex:()=>rt(!1),onReview:Xe}):g.jsx("p",{className:"muted","data-testid":"architecture-empty",children:"Index this repo to build the architecture graph. Review then walks that same graph for a git range — it does not start from a hunk list."})}),g.jsx("div",{className:"graph-wrap","data-testid":"architecture-graph",children:m!=null&&m.indexed?g.jsx(zu,{nodes:m.nodes,edges:m.edges}):null})]}),t==="graph"&&g.jsxs("div",{className:"graph-wrap","data-testid":"graph-full",style:{height:"100%"},children:[g.jsxs("div",{className:"graph-modes",children:[g.jsxs("div",{className:"seg","aria-label":"Graph scope",children:[g.jsx("button",{type:"button","aria-pressed":_==="review","data-testid":"graph-mode-review",className:_==="review"?"active":"",onClick:()=>C("review"),children:"This review"}),g.jsx("button",{type:"button","aria-pressed":_==="architecture","data-testid":"graph-mode-architecture",className:_==="architecture"?"active":"",onClick:()=>C("architecture"),children:"Indexed architecture"})]}),g.jsxs("div",{className:"legend","aria-hidden":"true",children:[g.jsxs("span",{children:[g.jsx("i",{})," cheap"]}),g.jsxs("span",{children:[g.jsx("i",{className:"exp"})," expensive"]}),g.jsxs("span",{children:[g.jsx("i",{className:"crit"})," critical"]}),g.jsxs("span",{children:[g.jsx("i",{className:"dash"})," inferred"]})]})]}),pt.length?g.jsx(zu,{nodes:pt,edges:Cn}):g.jsx("p",{className:"empty","data-testid":"graph-empty",children:"Index the repo or run a review first. Click a node to inspect it."})]}),t==="prs"&&g.jsxs("div",{className:"pr-list","data-testid":"pr-list",children:[g.jsxs("div",{className:"pr-toolbar",children:[g.jsxs("label",{className:"field provider",children:[g.jsx("span",{children:"Provider"}),g.jsxs("select",{"data-testid":"pr-provider",value:te,onChange:K=>Me(K.target.value,ee,M),children:[g.jsx("option",{value:"github",children:"GitHub"}),g.jsx("option",{value:"bitbucket",children:"Bitbucket"})]})]}),g.jsxs("label",{className:"field",children:[g.jsx("span",{children:"Repository"}),g.jsx("input",{"data-testid":"pr-repo",placeholder:"owner/repo",value:ee,onChange:K=>Me(te,K.target.value,M),spellCheck:!1})]}),g.jsx("button",{type:"button","data-testid":"btn-list-prs",className:"btn",disabled:!!R,onClick:Lt,children:"List PRs"})]}),H.length===0?g.jsxs("div",{className:"empty","data-testid":"pr-empty",children:[g.jsx("h2",{children:"No pull requests loaded"}),g.jsx("p",{children:"Enter an owner/repo, then list open PRs. Reviewing a PR fills base and head from its SHAs."})]}):H.map(K=>g.jsxs("article",{className:"pr","data-testid":`pr-${K.number}`,children:[g.jsxs("h3",{children:["#",K.number," ",K.title]}),g.jsxs("div",{className:"pr-meta muted",children:[g.jsx("span",{className:`chip ${K.draft?"":"open"}`,children:K.draft?"draft":K.state}),g.jsx("span",{children:K.author}),g.jsxs("span",{children:[K.source_branch," → ",K.target_branch]})]}),g.jsxs("div",{className:"pr-actions",children:[g.jsxs("a",{href:K.url,target:"_blank",rel:"noreferrer",children:["Open on ",K.provider]}),g.jsx("button",{type:"button",className:"btn primary","data-testid":`pr-review-${K.number}`,onClick:()=>{je(K.base_sha||K.target_branch,K.head_sha||K.source_branch),Me(K.provider,K.repo,String(K.number)),r("review")},children:"Review this range"})]})]},`${K.provider}-${K.number}`))]}),t==="settings"&&F&&g.jsxs("form",{className:"settings","data-testid":"settings-form",onSubmit:At,children:[g.jsxs("div",{children:[g.jsx("h1",{children:"Settings"}),g.jsx("p",{className:"muted",children:"Tokens stay on this machine in ~/.loadpath/settings.json. AI runs only on residual uncertainty the graph could not close."})]}),g.jsxs("section",{className:"settings-card",children:[g.jsx("h2",{children:"Appearance"}),g.jsx("p",{className:"muted",children:"Local to this browser. High contrast is a first-class theme, not an afterthought."}),g.jsx("div",{className:"theme-grid","data-testid":"theme-grid",children:hl.map(K=>g.jsxs("button",{type:"button","data-theme":K.id,className:A===K.id?"theme-swatch active":"theme-swatch","data-testid":`theme-${K.id}`,onClick:()=>se(K.id),children:[g.jsx("div",{className:"swatch-bar","aria-hidden":"true"}),g.jsx("div",{className:"name",children:K.label}),g.jsx("div",{className:"group",children:K.group})]},K.id))})]}),g.jsxs("section",{className:"settings-card",children:[g.jsx("h2",{children:"Source control"}),g.jsx("label",{htmlFor:"github_token",children:"GitHub token"}),g.jsx("input",{id:"github_token",name:"github_token",type:"password",placeholder:"ghp_…",autoComplete:"off"}),g.jsx("label",{htmlFor:"bitbucket_token",children:"Bitbucket token"}),g.jsx("input",{id:"bitbucket_token",name:"bitbucket_token",type:"password",autoComplete:"off"}),g.jsx("label",{htmlFor:"bitbucket_username",children:"Bitbucket username (app passwords)"}),g.jsx("input",{id:"bitbucket_username",name:"bitbucket_username",defaultValue:String(D.bitbucket_username||"")})]}),g.jsxs("section",{className:"settings-card",children:[g.jsx("h2",{children:"Residual AI"}),g.jsx("label",{htmlFor:"ai_provider",children:"Provider"}),g.jsxs("select",{id:"ai_provider",name:"ai_provider",defaultValue:String(((jn=D.ai)==null?void 0:jn.provider)||"none"),children:[g.jsx("option",{value:"none",children:"none (graph only)"}),g.jsx("option",{value:"anthropic",children:"Anthropic"}),g.jsx("option",{value:"openai",children:"OpenAI"}),g.jsx("option",{value:"grok",children:"Grok / xAI"}),g.jsx("option",{value:"deepseek",children:"DeepSeek"}),g.jsx("option",{value:"cursor",children:"Cursor-compatible (OpenAI protocol)"}),g.jsx("option",{value:"ollama",children:"Ollama local"})]}),g.jsx("label",{htmlFor:"ai_api_key",children:"API key"}),g.jsx("input",{id:"ai_api_key",name:"ai_api_key",type:"password",autoComplete:"off"}),g.jsx("label",{htmlFor:"ai_model",children:"Model"}),g.jsx("input",{id:"ai_model",name:"ai_model","data-testid":"ai-model",placeholder:"optional override",defaultValue:String(((Mn=D.ai)==null?void 0:Mn.model)||"")}),g.jsx("label",{htmlFor:"ai_base_url",children:"Base URL"}),g.jsx("input",{id:"ai_base_url",name:"ai_base_url","data-testid":"ai-base-url",placeholder:"optional, OpenAI-compatible",defaultValue:String(((Pn=D.ai)==null?void 0:Pn.base_url)||"")}),g.jsx("button",{className:"btn primary",type:"submit","data-testid":"btn-save-settings",children:"Save"})]})]})]})]}),T?g.jsx(Ok,{initialPath:i,onClose:()=>ne(!1),onSelect:K=>{pe(K),ne(!1)}}):null]})}function Uk({review:t,findings:r,aiNote:i,busy:l,onAskAi:a,onCopy:u,onPost:d}){var p,y,m,x,v,S,_,C;const f=[...new Set(t.confidence.reasons||[])];return g.jsxs(g.Fragment,{children:[g.jsxs("div",{className:`merge-box ${t.confidence.level}`,children:[g.jsxs("div",{className:`level ${t.confidence.level}`,children:[t.confidence.level.toUpperCase()," — ",t.title]}),f.length?g.jsx("ul",{className:"reasons",children:f.map(E=>g.jsx("li",{children:E},E))}):null,t.low_risk?g.jsx("span",{className:"chip",children:"low-risk"}):null,t.change_kinds.map(E=>g.jsx("span",{className:"chip",children:Z0(E)},E))]}),g.jsxs("div",{className:"metrics",children:[g.jsxs("div",{className:"metric",children:[g.jsxs("div",{className:"n",children:[t.confidence.covered_sinks,"/",t.confidence.sinks]}),g.jsx("div",{className:"l",children:"Sinks tested"})]}),g.jsxs("div",{className:"metric",children:[g.jsx("div",{className:"n",children:r.length}),g.jsx("div",{className:"l",children:"Findings"})]}),g.jsxs("div",{className:"metric",children:[g.jsx("div",{className:"n",children:t.residuals.length}),g.jsx("div",{className:"l",children:"Residuals"})]})]}),g.jsx("pre",{className:"headline",children:t.headline}),t.index?g.jsxs("details",{className:"section",open:!0,children:[g.jsxs("summary",{children:["Index ",g.jsx("span",{className:"count",children:t.index.counts.nodes})]}),g.jsxs("div",{className:"muted",children:["Walked ",t.index.counts.nodes," nodes / ",t.index.counts.edges," edges",t.index.reindex_skipped?" from an unchanged index":t.index.reindexed?" after an incremental refresh":" from the existing index",t.index.django_boot&&t.index.django_boot!=="off"?` · Django boot ${t.index.django_boot}`:"",(p=t.workspace)!=null&&p.three_dot?" · three-dot range":""]})]}):null,g.jsxs("details",{className:"section",open:!0,children:[g.jsxs("summary",{children:["Read this ",g.jsx("span",{className:"count",children:t.read_order.length})]}),t.read_order.map((E,N)=>g.jsxs("div",{className:"read-item",children:[g.jsxs("span",{className:"file",children:[N+1,". ",E.path]}),g.jsx("div",{className:"why",children:E.why})]},E.path))]}),g.jsxs("details",{className:"section",children:[g.jsxs("summary",{children:["Clusters ",g.jsx("span",{className:"count",children:t.clusters.length})]}),t.clusters.map(E=>g.jsxs("div",{className:"muted",children:[g.jsx("strong",{children:E.title})," — ",E.files.join(", ")]},E.id))]}),g.jsxs("details",{className:"section",open:!0,children:[g.jsxs("summary",{children:["Architecture ",g.jsx("span",{className:"count",children:r.length})]}),r.length===0?g.jsx("div",{className:"muted",children:t.architecture_note}):r.map(E=>g.jsxs("div",{className:"finding",children:[g.jsx("span",{className:`chip ${E.severity}`,children:E.severity}),E.message]},E.rule+E.message))]}),g.jsx(am,{cards:t.deepening}),g.jsxs("details",{className:"section",open:!0,children:[g.jsxs("summary",{children:["Residual ",g.jsx("span",{className:"count",children:t.residuals.length})]}),g.jsx("p",{className:"muted",children:"AI is only used here, on what the graph could not close."}),t.residuals.map(E=>g.jsx("div",{className:"residual muted",children:E},E))]}),(m=(y=t.evolution)==null?void 0:y.notes)!=null&&m.length||(v=(x=t.evolution)==null?void 0:x.hotspots)!=null&&v.some(E=>E.commits)?g.jsxs("details",{className:"section",children:[g.jsx("summary",{children:"Churn & coupling"}),(((S=t.evolution)==null?void 0:S.notes)||[]).map(E=>g.jsx("div",{className:"muted",children:E},E)),(((_=t.evolution)==null?void 0:_.hotspots)||[]).filter(E=>E.commits).slice(0,6).map(E=>g.jsxs("div",{className:"muted",children:[g.jsx("span",{className:"file",children:E.path})," — ",E.commits," commits, bus factor ",E.bus_factor]},E.path))]}):null,g.jsxs("div",{className:"btn-row",children:[g.jsx("button",{type:"button",className:"btn",disabled:l,onClick:a,children:"Ask configured model"}),g.jsx("button",{type:"button",className:"btn","data-testid":"btn-copy-markdown",onClick:u,children:"Copy markdown"}),g.jsx("button",{type:"button",className:"btn","data-testid":"btn-post-comment",onClick:d,children:"Post to PR"})]}),i?g.jsx("pre",{className:"headline",children:i}):null,g.jsx("div",{className:"kicker",children:"Reviewers"}),g.jsx("div",{className:"muted",children:t.suggested_reviewers.join(", ")||"—"}),(C=t.knowledge_owners)!=null&&C.length?g.jsxs("div",{className:"muted",children:["Knowledge: ",t.knowledge_owners.join(", ")]}):null]})}function Wk({architecture:t,busy:r,onReindex:i,onReview:l}){const a=t.findings.filter(u=>!u.waived);return g.jsxs(g.Fragment,{children:[g.jsxs("div",{className:"merge-box high",children:[g.jsxs("div",{className:"level high",children:["INDEXED — ",t.counts.nodes," nodes"]}),g.jsxs("div",{className:"muted",style:{marginTop:8},children:[t.indexed_at?`Last index ${ey(t.indexed_at)}`:"Indexed",t.incremental?" · incremental":" · full",t.stale?" · stale":"",t.django_boot&&t.django_boot!=="off"?` · Django boot ${t.django_boot}`:""]}),g.jsxs("span",{className:"chip",children:[t.counts.edges," edges"]}),t.has_config?g.jsx("span",{className:"chip",children:"loadpath.yml"}):null]}),g.jsxs("details",{className:"section",open:!0,children:[g.jsx("summary",{children:"Bounded contexts"}),Object.values(t.contexts).map(u=>g.jsxs("div",{className:"muted",children:[g.jsx("strong",{children:u.name})," — ",(u.django_apps||[]).join(", ")||"no apps"," ·"," ",(u.owners||[]).join(", ")||"unowned"]},u.name))]}),g.jsxs("details",{className:"section",children:[g.jsxs("summary",{children:["Rules ",g.jsx("span",{className:"count",children:(t.rules||[]).length})]}),(t.rules||[]).map(u=>g.jsx("div",{className:"muted",children:u},u))]}),g.jsxs("details",{className:"section",open:!0,children:[g.jsxs("summary",{children:["Findings ",g.jsx("span",{className:"count",children:a.length})]}),a.length===0?g.jsx("div",{className:"muted",children:"No architecture rule hits on the full graph."}):a.map(u=>g.jsxs("div",{className:"finding",children:[g.jsx("span",{className:`chip ${u.severity}`,children:u.severity}),u.message]},u.rule+u.message))]}),g.jsx(am,{cards:t.deepening}),g.jsxs("details",{className:"section",open:!0,children:[g.jsx("summary",{children:"Types"}),g.jsx("table",{className:"type-table",children:g.jsx("tbody",{children:Object.entries(t.type_counts||{}).sort((u,d)=>d[1]-u[1]).slice(0,12).map(([u,d])=>g.jsxs("tr",{children:[g.jsx("td",{children:Qu(u)}),g.jsx("td",{children:d})]},u))})})]}),g.jsxs("div",{className:"btn-row",children:[g.jsx("button",{type:"button",className:"btn",disabled:r,onClick:i,"data-testid":"btn-full-reindex",children:"Full reindex"}),g.jsx("button",{type:"button",className:"btn primary",disabled:r,onClick:l,children:"Review against this index"})]})]})}function am({cards:t}){const r=t||[];return r.length?g.jsxs("details",{className:"section",open:!0,"data-testid":"deepening-list",children:[g.jsxs("summary",{children:["Depth ",g.jsx("span",{className:"count",children:r.length})]}),g.jsx("p",{className:"muted",children:"Deepening opportunities: more behaviour behind a smaller interface, at a real seam."}),r.map(i=>g.jsxs("div",{className:"finding","data-testid":"deepening-card",children:[g.jsx("span",{className:`chip ${i.strength}`,children:J0(i.strength)}),i.top?g.jsx("span",{className:"chip",children:"top"}):null,g.jsx("strong",{children:i.title}),g.jsx("div",{className:"why",children:i.message}),i.deletion_test?g.jsxs("div",{className:"muted",children:["Deletion test: ",i.deletion_test]}):null,i.before&&i.after?g.jsxs("div",{className:"muted",children:[i.before," → ",i.after]}):null]},i.rule+i.title))]}):null}lm(sm());Q0.createRoot(document.getElementById("root")).render(g.jsx(O.StrictMode,{children:g.jsx(Vk,{})}));export{Yk as L,Qk as a,Xk as c,g as j,Gk as l,O as r,Qu as t}; diff --git a/src/loadpath/static/index.html b/src/loadpath/static/index.html index 45e4763..ce8cceb 100644 --- a/src/loadpath/static/index.html +++ b/src/loadpath/static/index.html @@ -17,8 +17,8 @@ - - + +
From d7bb0fe9033bbb29966dde31ca81b7cc84edfa6c Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Sat, 15 Aug 2026 07:32:29 +0000 Subject: [PATCH 5/6] Pin the inspector close control at 24px and dismiss on Escape. Co-authored-by: zord.lack.net --- ui/src/ImpactGraph.tsx | 25 ++++++++++++++++--------- ui/src/styles.css | 8 ++++---- ui/src/styles.test.ts | 7 +++++++ 3 files changed, 27 insertions(+), 13 deletions(-) diff --git a/ui/src/ImpactGraph.tsx b/ui/src/ImpactGraph.tsx index cf0888c..e5f89b5 100644 --- a/ui/src/ImpactGraph.tsx +++ b/ui/src/ImpactGraph.tsx @@ -113,6 +113,13 @@ function GraphInspector({ onClose: () => void; }) { const info = inspectNode(node, nodes, edges); + useEffect(() => { + const onKey = (event: KeyboardEvent) => { + if (event.key === "Escape") onClose(); + }; + window.addEventListener("keydown", onKey); + return () => window.removeEventListener("keydown", onKey); + }, [onClose]); return (