diff --git a/docs/dashboard-deep-links.md b/docs/dashboard-deep-links.md new file mode 100644 index 0000000..493f88f --- /dev/null +++ b/docs/dashboard-deep-links.md @@ -0,0 +1,174 @@ +# Conductor Dashboard Deep-Link Specification + +## Overview + +The conductor web dashboard (`conductor run --web`) accepts URL query parameters +that deep-link into specific nodes of the workflow graph. This enables external +tools (e.g., the conductor-dashboard meta-dashboard) to generate clickable links +that open the UI focused on a particular agent or subworkflow. + +## Query Parameters + +| Parameter | Format | Description | +|----------------|---------------------------------|------------------------------------------------| +| `subworkflow` | slash-separated agent path | Navigate into a subworkflow context | +| `agent` | agent name | Select and center an agent node in the graph | + +Both parameters are optional. When both are present, subworkflow navigation +happens first, then the agent is selected within that subworkflow's graph. + +## URL Format + +``` +http://localhost:{port}[?subworkflow={path}][&agent={name}] +``` + +## Subworkflow Path + +The `subworkflow` parameter is a `/`-separated path of segments, starting from +the root workflow. Each segment is matched against sibling subworkflow contexts +in priority order: + +### 1. Exact slot key + +Matches the engine-emitted `slot_key` verbatim. For sequential subworkflows the +slot key equals the agent name. For `for_each` iterations the slot key includes +the item key in brackets, e.g. `plan_child[item-0]`. + +``` +?subworkflow=plan_child[item-0]/design +``` + +### 2. Positional index (`agent#N`, 0-based) + +Matches the Nth iteration among siblings sharing that `parentAgent`. Useful when +the caller doesn't know the exact `item_key` values emitted by the engine. + +``` +# First for_each iteration of plan_child +?subworkflow=plan_child%230 + +# Third iteration, then into its "design" child +?subworkflow=plan_child%232/design +``` + +> **Note:** `#` must be percent-encoded as `%23` in URLs. + +### 3. Bare agent name + +Matches if **exactly one** sibling has that `parentAgent`. Works for sequential +(non-`for_each`) subworkflows and single-iteration `for_each` groups. Returns an +**ambiguous** error when multiple iterations exist — the error message lists the +valid exact slot keys and positional alternatives. + +``` +# Works when there is only one "planning" subworkflow +?subworkflow=planning +``` + +Given this workflow nesting: + +``` +root +├── intake (agent) +├── planning (workflow agent → planning.yaml) +│ ├── architect (agent) +│ └── design (workflow agent → design.yaml) +│ ├── reviewer (agent) +│ └── writer (agent) +├── plan_child (for_each workflow agent → child.yaml) +│ ├── plan_child[item-0] (iteration 0) +│ └── plan_child[item-1] (iteration 1) +└── close_out (agent) +``` + +| URL | Result | +|--------------------------------------------------------|-------------------------------------------| +| `?subworkflow=planning` | View planning.yaml's graph | +| `?subworkflow=planning/design` | View design.yaml's graph | +| `?subworkflow=planning/design&agent=reviewer` | View design.yaml, select reviewer node | +| `?subworkflow=plan_child[item-0]` | View child.yaml iteration 0 | +| `?subworkflow=plan_child%230` | Same — positional (0-based) | +| `?subworkflow=plan_child%231` | View child.yaml iteration 1 | + +Each path segment is matched using the priority rules above (exact slot key → +positional → bare name). + +## Agent Selection + +The `agent` parameter selects and centers a node in the **currently viewed** +workflow graph: + +- **Root agent** (no subworkflow context): `?agent=intake` +- **Agent inside a subworkflow**: `?subworkflow=planning&agent=architect` + +**Important:** An agent that lives inside a subworkflow will NOT be found +by `?agent=reviewer` alone — you must also provide the `subworkflow` path +to navigate to the correct context first: + +``` +# ✗ WRONG — reviewer doesn't exist in the root workflow +?agent=reviewer + +# ✓ CORRECT — navigate into planning/design, then select reviewer +?subworkflow=planning/design&agent=reviewer +``` + +## Behavior + +1. **Parse** — On initial page load, read `subworkflow` and `agent` from + `window.location.search`. + +2. **Wait** — Do nothing until the workflow graph has been populated + (agents arrive via WebSocket late-joiner replay). + +3. **Navigate** — If `subworkflow` is present, split on `/` and call + `navigateIntoSubworkflow()` for each segment sequentially. + Each call is synchronous (zustand `set`/`get`), so the viewed context + updates between calls. + +4. **Select** — If `agent` is present, call `selectNode(agent)` then + `fitView({ nodes: [{ id: agent }] })` to center the graph on the node + with a smooth animation. + +5. **Once** — Deep-link application fires exactly once per page load. + Subsequent WebSocket events do not re-trigger navigation. + +## Edge Cases + +| Scenario | Behavior | +|---------------------------------------|--------------------------------------------------| +| Unknown subworkflow path segment | Error banner with "not found" + notation hint | +| Ambiguous bare name (multiple for_each iterations) | Error banner listing valid alternatives | +| Unknown agent name | No node selected, error banner displayed | +| Subworkflow hasn't started yet | Navigation fails with "not found" error | +| Page refresh | Deep-link re-applied from URL (full state replay) | +| Combined with breadcrumb navigation | User can freely navigate after deep-link applies | + +## Example URLs + +``` +# Root workflow — default view +http://localhost:49123 + +# Select an agent in the root workflow +http://localhost:49123?agent=intake + +# Drill into a subworkflow +http://localhost:49123?subworkflow=planning + +# Drill two levels deep +http://localhost:49123?subworkflow=planning/design + +# Drill into subworkflow and select an agent within it +http://localhost:49123?subworkflow=planning/design&agent=reviewer + +# for_each iteration by exact slot key +http://localhost:49123?subworkflow=plan_child[item-0] + +# for_each iteration by positional index (# → %23 in URL) +http://localhost:49123?subworkflow=plan_child%230 + +# Nested: for_each iteration, then into a child subworkflow +http://localhost:49123?subworkflow=plan_child%230/design&agent=writer +``` diff --git a/src/conductor/engine/workflow.py b/src/conductor/engine/workflow.py index 9664aec..cc0c7fc 100644 --- a/src/conductor/engine/workflow.py +++ b/src/conductor/engine/workflow.py @@ -285,6 +285,7 @@ def __init__( web_dashboard: WebDashboard | None = None, _subworkflow_depth: int = 0, run_context: RunContext | None = None, + _dashboard_context_path: list[str] | None = None, ) -> None: """Initialize the WorkflowEngine. @@ -314,6 +315,13 @@ def __init__( _subworkflow_depth: Current nesting depth for sub-workflow composition. Used internally to enforce MAX_SUBWORKFLOW_DEPTH. Callers should not set this directly. + _dashboard_context_path: Slot-key path identifying this engine's + position in the recursive sub-workflow tree. Root engine = ``[]``. + Sub-workflow engines spawned via ``_execute_subworkflow`` get + ``[*parent_path, slot_key]``. Used by ``_emit`` to auto-stamp + ``subworkflow_path`` on outgoing events so the dashboard can + route per-context state under concurrency. Callers should not + set this directly. Note: If both provider and registry are provided, registry takes precedence. @@ -381,6 +389,13 @@ def __init__( self._bg_mode = self._run_context.bg_mode self._system_metadata: dict[str, Any] = {} + # Recursive sub-workflow context path for dashboard routing. + # Root engine = []. Child engines spawned via _execute_subworkflow get + # [*parent_path, slot_key]. _emit auto-stamps non-empty paths onto + # outgoing events so the frontend can resolve the owning context + # without inferring parentage from activeContextPath. + self._dashboard_context_path: list[str] = list(_dashboard_context_path or []) + def _build_pricing_overrides(self) -> dict[str, ModelPricing] | None: """Build pricing overrides from workflow cost configuration. @@ -416,6 +431,11 @@ def _emit(self, event_type: str, data: dict[str, Any]) -> None: """ if self._event_emitter is None: return + # Auto-stamp subworkflow_path on every event from sub-engines so the + # dashboard can route per-context state under concurrency. Root engine + # has an empty path and emits no stamp (preserving legacy event shape). + if self._dashboard_context_path and "subworkflow_path" not in data: + data = {**data, "subworkflow_path": list(self._dashboard_context_path)} event = WorkflowEvent(type=event_type, timestamp=_time.time(), data=data) self._event_emitter.emit(event) @@ -598,6 +618,7 @@ async def _execute_subworkflow( self, agent: AgentDef, context: dict[str, Any], + slot_key: str | None = None, ) -> dict[str, Any]: """Execute a sub-workflow as a black-box step. @@ -608,6 +629,11 @@ async def _execute_subworkflow( Args: agent: Workflow agent definition with ``workflow`` path. context: Workflow context for template rendering (used as sub-workflow input). + slot_key: Identity of this sub-workflow run within the parent's + slot-key path. Defaults to ``agent.name`` for the sequential + path; for_each/parallel paths supply per-iteration keys + (e.g. ``"[]"``) so concurrent runs get distinct + identities. Returns: The sub-workflow's final output dict. @@ -673,6 +699,10 @@ async def _execute_subworkflow( keyboard_listener=self._keyboard_listener, web_dashboard=self._web_dashboard, _subworkflow_depth=self._subworkflow_depth + 1, + _dashboard_context_path=[ + *self._dashboard_context_path, + slot_key or agent.name, + ], ) return await child_engine.run(sub_inputs) @@ -1115,10 +1145,11 @@ async def _check_interrupt(self, current_agent_name: str) -> InterruptResult | N # In web mode, the interrupt was already handled at the provider level # (partial output → _handle_web_pause). Consume the stale flag silently. - # We check for dashboard presence only (not has_connections) because in - # --web/--web-bg mode the CLI interactive handler is never appropriate, - # even if clients are transiently disconnected. + # EXCEPTION: in subworkflows (depth > 0), propagate the interrupt so it + # unwinds the child engine back to the parent, stopping the workflow. if self._web_dashboard is not None: + if self._subworkflow_depth > 0: + raise InterruptError(agent_name=current_agent_name) return None # Build output preview from last stored output @@ -1222,6 +1253,32 @@ async def _handle_web_pause(self, agent_name: str, partial_output: AgentOutput) disconnect_task = asyncio.create_task(disconnect_event.wait()) tasks = {resume_task, kill_task, disconnect_task} + # In subworkflows, also watch the interrupt_event so that a second + # Stop click while paused will stop the workflow without requiring + # the user to first Resume then wait for the next between-agent check. + # + # INTENTIONAL ROOT-vs-SUBWORKFLOW ASYMMETRY: + # At root depth, we deliberately do NOT subscribe to interrupt_event + # here — pause is exited only by Resume or Kill. Inside a sub-workflow + # we DO subscribe so a single Stop click cleanly unwinds the child + # engine back to the parent (Stop-during-pause is otherwise a no-op + # because the partial-output handler owns the only between-agent + # interrupt check, and the sub-engine is currently sitting in this + # pause loop instead of stepping through its main loop). + # + # Pre-clearing interrupt_event below means a Stop click that lands + # *between* clear() and the asyncio.create_task() below is silently + # discarded — but a Stop click that lands during the wait is honored. + # That window is tiny (microseconds), and the alternative (not + # clearing) would carry a stale Stop signal from a prior pause cycle + # into this one. We accept the narrow race in favor of correctness + # across cycles. See PR #113 review thread for the discussion. + stop_task = None + if self._subworkflow_depth > 0 and self._interrupt_event is not None: + self._interrupt_event.clear() + stop_task = asyncio.create_task(self._interrupt_event.wait()) + tasks.add(stop_task) + # If any event was set between clear() and task creation, the task # will already be done — no need to wait, but we still fall through # to the normal done/pending handling below. @@ -1245,6 +1302,12 @@ async def _handle_web_pause(self, agent_name: str, partial_output: AgentOutput) if kill_task in done: raise InterruptError(agent_name=agent_name) + # Stop-while-paused in a subworkflow: treat as interrupt + if stop_task is not None and stop_task in done: + if self._interrupt_event is not None: + self._interrupt_event.clear() + raise InterruptError(agent_name=agent_name) + if disconnect_task in done: logger.info( "All dashboard clients disconnected while '%s' was paused — auto-resuming", @@ -1793,6 +1856,8 @@ async def _execute_loop(self, current_agent_name: str) -> dict[str, Any]: "agent_name": agent.name, "iteration": sub_execution_count, "workflow": agent.workflow, + "parent_path": list(self._dashboard_context_path), + "slot_key": agent.name, }, ) @@ -1807,6 +1872,8 @@ async def _execute_loop(self, current_agent_name: str) -> dict[str, Any]: "elapsed": _sub_elapsed, "error_type": type(exc).__name__, "message": str(exc), + "parent_path": list(self._dashboard_context_path), + "slot_key": agent.name, }, ) raise @@ -1818,6 +1885,8 @@ async def _execute_loop(self, current_agent_name: str) -> dict[str, Any]: "agent_name": agent.name, "elapsed": _sub_elapsed, "output": sub_output, + "parent_path": list(self._dashboard_context_path), + "slot_key": agent.name, }, ) diff --git a/src/conductor/web/frontend/src/App.tsx b/src/conductor/web/frontend/src/App.tsx index 111e823..9cde4f9 100644 --- a/src/conductor/web/frontend/src/App.tsx +++ b/src/conductor/web/frontend/src/App.tsx @@ -1,5 +1,6 @@ import { useState, useEffect } from 'react'; import { Header } from '@/components/layout/Header'; +import { BreadcrumbBar } from '@/components/layout/BreadcrumbBar'; import { StatusBar } from '@/components/layout/StatusBar'; import { ReplayBar } from '@/components/layout/ReplayBar'; import { ResizableLayout } from '@/components/layout/ResizableLayout'; @@ -55,6 +56,7 @@ export default function App() {
{isReplayMode ? : }
+ {replayMode ? : }
diff --git a/src/conductor/web/frontend/src/components/detail/DetailPanel.tsx b/src/conductor/web/frontend/src/components/detail/DetailPanel.tsx index 161b193..83b6b03 100644 --- a/src/conductor/web/frontend/src/components/detail/DetailPanel.tsx +++ b/src/conductor/web/frontend/src/components/detail/DetailPanel.tsx @@ -1,15 +1,17 @@ import { useEffect, useState } from 'react'; import { X } from 'lucide-react'; import { useWorkflowStore } from '@/stores/workflow-store'; +import { useViewedNodes } from '@/hooks/use-viewed-context'; import { AgentDetail } from './AgentDetail'; import { ScriptDetail } from './ScriptDetail'; import { GateDetail } from './GateDetail'; import { GroupDetail } from './GroupDetail'; +import { SubworkflowDetail } from './SubworkflowDetail'; import { cn } from '@/lib/utils'; export function DetailPanel() { const selectedNode = useWorkflowStore((s) => s.selectedNode); - const nodes = useWorkflowStore((s) => s.nodes); + const viewedNodes = useViewedNodes(); const selectNode = useWorkflowStore((s) => s.selectNode); // Slide-in animation state @@ -20,7 +22,7 @@ export function DetailPanel() { return () => setMounted(false); }, [selectedNode]); - const node = selectedNode ? nodes[selectedNode] : null; + const node = selectedNode ? viewedNodes[selectedNode] : null; if (!selectedNode || !node) { return ( @@ -44,6 +46,8 @@ export function DetailPanel() { case 'parallel_group': case 'for_each_group': return GroupDetail; + case 'workflow': + return SubworkflowDetail; default: return AgentDetail; } diff --git a/src/conductor/web/frontend/src/components/detail/GroupDetail.tsx b/src/conductor/web/frontend/src/components/detail/GroupDetail.tsx index 241543e..90acb57 100644 --- a/src/conductor/web/frontend/src/components/detail/GroupDetail.tsx +++ b/src/conductor/web/frontend/src/components/detail/GroupDetail.tsx @@ -6,7 +6,7 @@ import { ActivityStream } from './ActivityStream'; import type { NodeData, ForEachItemData } from '@/stores/workflow-store'; import { NODE_STATUS_HEX } from '@/lib/constants'; import { formatElapsed, formatCost, formatTokens } from '@/lib/utils'; -import { useWorkflowStore } from '@/stores/workflow-store'; +import { useViewedGroupProgress } from '@/hooks/use-viewed-context'; import type { NodeStatus } from '@/lib/constants'; interface GroupDetailProps { @@ -16,8 +16,8 @@ interface GroupDetailProps { export function GroupDetail({ node }: GroupDetailProps) { const status = node.status as NodeStatus; const statusColor = NODE_STATUS_HEX[status] || NODE_STATUS_HEX.pending; - const groupProgress = useWorkflowStore((s) => s.groupProgress); - const progress = groupProgress[node.name]; + const viewedProgress = useViewedGroupProgress(); + const progress = viewedProgress[node.name]; const isForEach = node.type === 'for_each_group'; const [showItems, setShowItems] = useState(true); diff --git a/src/conductor/web/frontend/src/components/detail/SubworkflowDetail.tsx b/src/conductor/web/frontend/src/components/detail/SubworkflowDetail.tsx new file mode 100644 index 0000000..6492a9a --- /dev/null +++ b/src/conductor/web/frontend/src/components/detail/SubworkflowDetail.tsx @@ -0,0 +1,113 @@ +import { Layers, ChevronRight, Coins, Hash } from 'lucide-react'; +import { MetadataGrid } from './MetadataGrid'; +import { useWorkflowStore } from '@/stores/workflow-store'; +import { useViewedSubworkflowContexts } from '@/hooks/use-viewed-context'; +import type { NodeData, SubworkflowContext } from '@/stores/workflow-store'; +import { NODE_STATUS_HEX } from '@/lib/constants'; +import { formatElapsed, formatCost, formatTokens } from '@/lib/utils'; +import type { NodeStatus } from '@/lib/constants'; + +interface SubworkflowDetailProps { + node: NodeData; +} + +export function SubworkflowDetail({ node }: SubworkflowDetailProps) { + const status = node.status as NodeStatus; + const statusColor = NODE_STATUS_HEX[status] || NODE_STATUS_HEX.pending; + const navigateIntoSubworkflow = useWorkflowStore((s) => s.navigateIntoSubworkflow); + const allSubContexts = useViewedSubworkflowContexts(); + const subContexts = allSubContexts.filter((c) => c.parentAgent === node.name); + + const items: Array<{ label: string; value: string | number | null | undefined }> = []; + if (node.elapsed != null) items.push({ label: 'Elapsed', value: formatElapsed(node.elapsed) }); + if (node.cost_usd != null) items.push({ label: 'Cost', value: formatCost(node.cost_usd) }); + if (node.tokens != null) items.push({ label: 'Tokens', value: formatTokens(node.tokens) }); + if (node.iteration != null && node.iteration > 1) items.push({ label: 'Iteration', value: node.iteration }); + + return ( +
+
+ + {status} + + Subworkflow Agent +
+ + + + {/* List subworkflow runs */} + {subContexts.length > 0 && ( +
+
+ Subworkflow Runs ({subContexts.length}) +
+
+ {subContexts.map((ctx, idx) => ( + navigateIntoSubworkflow(ctx.slotKey)} + /> + ))} +
+
+ )} + + {/* Error info */} + {status === 'failed' && (node.error_type || node.error_message) && ( +
+ {node.error_type && {node.error_type}} + {node.error_message && — {node.error_message}} +
+ )} + + {subContexts.length === 0 && status === 'pending' && ( +
+ Subworkflow has not started yet. +
+ )} +
+ ); +} + +function SubworkflowRunRow({ ctx, onClick }: { ctx: SubworkflowContext; onClick: () => void }) { + const statusColor = NODE_STATUS_HEX[ctx.status] || NODE_STATUS_HEX.pending; + + return ( + + ); +} diff --git a/src/conductor/web/frontend/src/components/graph/AgentNode.tsx b/src/conductor/web/frontend/src/components/graph/AgentNode.tsx index c356259..1a4cd7f 100644 --- a/src/conductor/web/frontend/src/components/graph/AgentNode.tsx +++ b/src/conductor/web/frontend/src/components/graph/AgentNode.tsx @@ -4,26 +4,29 @@ import { Bot } from 'lucide-react'; import { cn, formatElapsed, formatTokens, formatCost } from '@/lib/utils'; import { NODE_STATUS_HEX, CONTEXT_WARN_PCT, CONTEXT_DANGER_PCT } from '@/lib/constants'; import { useWorkflowStore } from '@/stores/workflow-store'; +import { useViewedNodes } from '@/hooks/use-viewed-context'; import { NodeTooltip } from './NodeTooltip'; import type { GraphNodeData } from './graph-layout'; import type { NodeStatus } from '@/lib/constants'; export const AgentNode = memo(function AgentNode({ data, id, selected }: NodeProps) { const nodeData = data as unknown as GraphNodeData; - const storeStatus = useWorkflowStore((s) => s.nodes[id]?.status); + const viewedNodes = useViewedNodes(); + const storeStatus = viewedNodes[id]?.status; const status = (storeStatus || nodeData.status || 'pending') as NodeStatus; const borderColor = NODE_STATUS_HEX[status] || NODE_STATUS_HEX.pending; - const elapsed = useWorkflowStore((s) => s.nodes[id]?.elapsed); - const model = useWorkflowStore((s) => s.nodes[id]?.model); - const tokens = useWorkflowStore((s) => s.nodes[id]?.tokens); - const inputTokens = useWorkflowStore((s) => s.nodes[id]?.input_tokens); - const outputTokens = useWorkflowStore((s) => s.nodes[id]?.output_tokens); - const costUsd = useWorkflowStore((s) => s.nodes[id]?.cost_usd); - const iteration = useWorkflowStore((s) => s.nodes[id]?.iteration); - const errorType = useWorkflowStore((s) => s.nodes[id]?.error_type); - const errorMessage = useWorkflowStore((s) => s.nodes[id]?.error_message); - const contextPct = useWorkflowStore((s) => s.nodes[id]?.context_pct); + const nd = viewedNodes[id]; + const elapsed = nd?.elapsed; + const model = nd?.model; + const tokens = nd?.tokens; + const inputTokens = nd?.input_tokens; + const outputTokens = nd?.output_tokens; + const costUsd = nd?.cost_usd; + const iteration = nd?.iteration; + const errorType = nd?.error_type; + const errorMessage = nd?.error_message; + const contextPct = nd?.context_pct; // Live elapsed timer for running nodes const liveElapsed = useLiveElapsed(id, status); @@ -132,7 +135,7 @@ export const AgentNode = memo(function AgentNode({ data, id, selected }: NodePro /** Hook that returns a live-ticking elapsed string while status is 'running'. */ function useLiveElapsed(id: string, status: NodeStatus): string { - const startedAt = useWorkflowStore((s) => s.nodes[id]?.startedAt); + const startedAt = useViewedNodes()[id]?.startedAt; const replayMode = useWorkflowStore((s) => s.replayMode); const lastEventTime = useWorkflowStore((s) => s.lastEventTime); const [display, setDisplay] = useState('0.0s'); diff --git a/src/conductor/web/frontend/src/components/graph/AnimatedEdge.tsx b/src/conductor/web/frontend/src/components/graph/AnimatedEdge.tsx index 2374434..62cd0dd 100644 --- a/src/conductor/web/frontend/src/components/graph/AnimatedEdge.tsx +++ b/src/conductor/web/frontend/src/components/graph/AnimatedEdge.tsx @@ -5,7 +5,7 @@ import { getBezierPath, type EdgeProps, } from '@xyflow/react'; -import { useWorkflowStore } from '@/stores/workflow-store'; +import { useViewedHighlightedEdges } from '@/hooks/use-viewed-context'; export const AnimatedEdge = memo(function AnimatedEdge({ id, @@ -19,7 +19,7 @@ export const AnimatedEdge = memo(function AnimatedEdge({ target, data, }: EdgeProps) { - const highlightedEdges = useWorkflowStore((s) => s.highlightedEdges); + const highlightedEdges = useViewedHighlightedEdges(); const edgeHighlight = useMemo(() => { return highlightedEdges.find((e) => e.from === source && e.to === target); diff --git a/src/conductor/web/frontend/src/components/graph/EgressNode.tsx b/src/conductor/web/frontend/src/components/graph/EgressNode.tsx new file mode 100644 index 0000000..bf0e762 --- /dev/null +++ b/src/conductor/web/frontend/src/components/graph/EgressNode.tsx @@ -0,0 +1,61 @@ +import { memo } from 'react'; +import { Handle, Position, type NodeProps } from '@xyflow/react'; +import { ArrowUpFromLine } from 'lucide-react'; +import { cn } from '@/lib/utils'; +import { NODE_STATUS_HEX } from '@/lib/constants'; +import { useWorkflowStore } from '@/stores/workflow-store'; +import type { GraphNodeData } from './graph-layout'; +import type { NodeStatus } from '@/lib/constants'; + +const EGRESS_COLOR = '#a78bfa'; // violet-400 + +/** + * Egress node shown at the bottom of a sub-workflow graph. + * Circular like start/end but with a violet tint and parent label below. + * Double-click navigates back to the parent workflow. + */ +export const EgressNode = memo(function EgressNode({ data, selected }: NodeProps) { + const nodeData = data as unknown as GraphNodeData; + const status = (nodeData.status || 'pending') as NodeStatus; + const isCompleted = status === 'completed'; + const isFailed = status === 'failed'; + const borderColor = isCompleted + ? EGRESS_COLOR + : isFailed + ? NODE_STATUS_HEX.failed + : EGRESS_COLOR; + const parentLabel = nodeData.parentAgent; + + const navigateUp = useWorkflowStore((s) => s.navigateUp); + + return ( + <> + +
+
{ + e.stopPropagation(); + navigateUp(); + }} + > + +
+ {parentLabel && ( + + return to {parentLabel} + + )} +
+ + ); +}); diff --git a/src/conductor/web/frontend/src/components/graph/GateNode.tsx b/src/conductor/web/frontend/src/components/graph/GateNode.tsx index e6468b3..2eca4ab 100644 --- a/src/conductor/web/frontend/src/components/graph/GateNode.tsx +++ b/src/conductor/web/frontend/src/components/graph/GateNode.tsx @@ -4,17 +4,19 @@ import { ShieldCheck } from 'lucide-react'; import { cn } from '@/lib/utils'; import { NODE_STATUS_HEX } from '@/lib/constants'; import { useWorkflowStore } from '@/stores/workflow-store'; +import { useViewedNodes } from '@/hooks/use-viewed-context'; import { NodeTooltip } from './NodeTooltip'; import type { GraphNodeData } from './graph-layout'; import type { NodeStatus } from '@/lib/constants'; export const GateNode = memo(function GateNode({ data, id, selected }: NodeProps) { const nodeData = data as unknown as GraphNodeData; - const storeStatus = useWorkflowStore((s) => s.nodes[id]?.status); + const viewedNodes = useViewedNodes(); + const storeStatus = viewedNodes[id]?.status; const status = (storeStatus || nodeData.status || 'pending') as NodeStatus; const borderColor = NODE_STATUS_HEX[status] || NODE_STATUS_HEX.pending; - const selectedOption = useWorkflowStore((s) => s.nodes[id]?.selected_option); + const selectedOption = viewedNodes[id]?.selected_option; // Status transition animation const transitionClass = useStatusTransition(status); diff --git a/src/conductor/web/frontend/src/components/graph/GroupNode.tsx b/src/conductor/web/frontend/src/components/graph/GroupNode.tsx index cf5e234..89ecc95 100644 --- a/src/conductor/web/frontend/src/components/graph/GroupNode.tsx +++ b/src/conductor/web/frontend/src/components/graph/GroupNode.tsx @@ -3,7 +3,7 @@ import { Handle, Position, type NodeProps } from '@xyflow/react'; import { GitBranch, Repeat } from 'lucide-react'; import { cn } from '@/lib/utils'; import { NODE_STATUS_HEX } from '@/lib/constants'; -import { useWorkflowStore } from '@/stores/workflow-store'; +import { useViewedNodes } from '@/hooks/use-viewed-context'; import type { GraphNodeData } from './graph-layout'; import type { NodeStatus } from '@/lib/constants'; @@ -13,7 +13,8 @@ export const GroupNode = memo(function GroupNode({ data, id, selected }: NodePro const Icon = isForEach ? Repeat : GitBranch; const progress = nodeData.progress; - const storeStatus = useWorkflowStore((s) => s.nodes[id]?.status); + const viewedNodes = useViewedNodes(); + const storeStatus = viewedNodes[id]?.status; const status = (storeStatus || nodeData.status || 'pending') as NodeStatus; const borderColor = NODE_STATUS_HEX[status] || NODE_STATUS_HEX.pending; diff --git a/src/conductor/web/frontend/src/components/graph/IngressNode.tsx b/src/conductor/web/frontend/src/components/graph/IngressNode.tsx new file mode 100644 index 0000000..857cc39 --- /dev/null +++ b/src/conductor/web/frontend/src/components/graph/IngressNode.tsx @@ -0,0 +1,53 @@ +import { memo } from 'react'; +import { Handle, Position, type NodeProps } from '@xyflow/react'; +import { ArrowDownToLine } from 'lucide-react'; +import { cn } from '@/lib/utils'; +import { NODE_STATUS_HEX } from '@/lib/constants'; +import { useWorkflowStore } from '@/stores/workflow-store'; +import type { GraphNodeData } from './graph-layout'; +import type { NodeStatus } from '@/lib/constants'; + +const INGRESS_COLOR = '#a78bfa'; // violet-400 + +/** + * Ingress node shown at the top of a sub-workflow graph. + * Circular like start/end but with a violet tint and parent label below. + * Double-click navigates back to the parent workflow. + */ +export const IngressNode = memo(function IngressNode({ data, selected }: NodeProps) { + const nodeData = data as unknown as GraphNodeData; + const status = (nodeData.status || 'pending') as NodeStatus; + const isActive = status === 'running' || status === 'completed'; + const borderColor = isActive ? INGRESS_COLOR : NODE_STATUS_HEX[status] || INGRESS_COLOR; + const parentLabel = nodeData.parentAgent; + + const navigateUp = useWorkflowStore((s) => s.navigateUp); + + return ( + <> +
+
{ + e.stopPropagation(); + navigateUp(); + }} + > + +
+ {parentLabel && ( + + from {parentLabel} + + )} +
+ + + ); +}); diff --git a/src/conductor/web/frontend/src/components/graph/ScriptNode.tsx b/src/conductor/web/frontend/src/components/graph/ScriptNode.tsx index 1fbc3af..a8db46d 100644 --- a/src/conductor/web/frontend/src/components/graph/ScriptNode.tsx +++ b/src/conductor/web/frontend/src/components/graph/ScriptNode.tsx @@ -4,20 +4,23 @@ import { Terminal } from 'lucide-react'; import { cn, formatElapsed } from '@/lib/utils'; import { NODE_STATUS_HEX } from '@/lib/constants'; import { useWorkflowStore } from '@/stores/workflow-store'; +import { useViewedNodes } from '@/hooks/use-viewed-context'; import { NodeTooltip } from './NodeTooltip'; import type { GraphNodeData } from './graph-layout'; import type { NodeStatus } from '@/lib/constants'; export const ScriptNode = memo(function ScriptNode({ data, id, selected }: NodeProps) { const nodeData = data as unknown as GraphNodeData; - const storeStatus = useWorkflowStore((s) => s.nodes[id]?.status); + const viewedNodes = useViewedNodes(); + const storeStatus = viewedNodes[id]?.status; const status = (storeStatus || nodeData.status || 'pending') as NodeStatus; const borderColor = NODE_STATUS_HEX[status] || NODE_STATUS_HEX.pending; - const elapsed = useWorkflowStore((s) => s.nodes[id]?.elapsed); - const exitCode = useWorkflowStore((s) => s.nodes[id]?.exit_code); - const errorType = useWorkflowStore((s) => s.nodes[id]?.error_type); - const errorMessage = useWorkflowStore((s) => s.nodes[id]?.error_message); + const nd = viewedNodes[id]; + const elapsed = nd?.elapsed; + const exitCode = nd?.exit_code; + const errorType = nd?.error_type; + const errorMessage = nd?.error_message; // Live elapsed timer const liveElapsed = useLiveElapsed(id, status); @@ -89,7 +92,7 @@ export const ScriptNode = memo(function ScriptNode({ data, id, selected }: NodeP }); function useLiveElapsed(id: string, status: NodeStatus): string { - const startedAt = useWorkflowStore((s) => s.nodes[id]?.startedAt); + const startedAt = useViewedNodes()[id]?.startedAt; const replayMode = useWorkflowStore((s) => s.replayMode); const lastEventTime = useWorkflowStore((s) => s.lastEventTime); const [display, setDisplay] = useState('0.0s'); diff --git a/src/conductor/web/frontend/src/components/graph/WorkflowGraph.tsx b/src/conductor/web/frontend/src/components/graph/WorkflowGraph.tsx index 3db847d..543f8a3 100644 --- a/src/conductor/web/frontend/src/components/graph/WorkflowGraph.tsx +++ b/src/conductor/web/frontend/src/components/graph/WorkflowGraph.tsx @@ -16,13 +16,18 @@ import { import '@xyflow/react/dist/style.css'; import { useWorkflowStore } from '@/stores/workflow-store'; +import { useViewedGraphData } from '@/hooks/use-viewed-context'; +import { useDeepLink } from '@/hooks/use-deep-link'; import { buildGraphElements, type GraphNodeData } from './graph-layout'; import { AgentNode } from './AgentNode'; import { ScriptNode } from './ScriptNode'; import { GateNode } from './GateNode'; import { GroupNode } from './GroupNode'; +import { WorkflowNode } from './WorkflowNode'; import { EndNode } from './EndNode'; import { StartNode } from './StartNode'; +import { IngressNode } from './IngressNode'; +import { EgressNode } from './EgressNode'; import { AnimatedEdge } from './AnimatedEdge'; import { WorkflowErrorBanner, WorkflowSuccessBanner } from '@/components/layout/ErrorBanner'; import { NODE_STATUS_HEX } from '@/lib/constants'; @@ -34,8 +39,11 @@ const nodeTypes: NodeTypes = { scriptNode: ScriptNode, gateNode: GateNode, groupNode: GroupNode, + workflowNode: WorkflowNode, endNode: EndNode, startNode: StartNode, + ingressNode: IngressNode, + egressNode: EgressNode, }; const edgeTypes: EdgeTypes = { @@ -69,36 +77,53 @@ function EdgeMarkers() { } export function WorkflowGraph() { - const agents = useWorkflowStore((s) => s.agents); - const routes = useWorkflowStore((s) => s.routes); - const parallelGroups = useWorkflowStore((s) => s.parallelGroups); - const forEachGroups = useWorkflowStore((s) => s.forEachGroups); - const storeNodes = useWorkflowStore((s) => s.nodes); - const groupProgress = useWorkflowStore((s) => s.groupProgress); + const viewCtx = useViewedGraphData(); + const viewContextPath = useWorkflowStore((s) => s.viewContextPath); const selectNode = useWorkflowStore((s) => s.selectNode); const selectedNode = useWorkflowStore((s) => s.selectedNode); const workflowStatus = useWorkflowStore((s) => s.workflowStatus); - const entryPoint = useWorkflowStore((s) => s.entryPoint); const wsStatus = useWorkflowStore((s) => s.wsStatus); const workflowFailedAgent = useWorkflowStore((s) => s.workflowFailedAgent); + const navigateIntoSubworkflow = useWorkflowStore((s) => s.navigateIntoSubworkflow); + + // Get the data for the currently viewed context + const { agents, routes, parallelGroups, forEachGroups, nodes: storeNodes, groupProgress, entryPoint, subworkflowContexts, parentAgent } = viewCtx; const [flowNodes, setFlowNodes, onNodesChange] = useNodesState>([]); const [flowEdges, setFlowEdges, onEdgesChange] = useEdgesState([]); const graphBuilt = useRef(false); + const prevViewPath = useRef(''); - // Build graph when agents first appear + // Rebuild graph when context changes (breadcrumb navigation) or when agents first appear + const viewPathKey = JSON.stringify(viewContextPath); useEffect(() => { - if (agents.length === 0) return; + if (agents.length === 0) { + // Clear stale graph elements when navigated to an empty context + if (prevViewPath.current !== viewPathKey) { + graphBuilt.current = false; + prevViewPath.current = viewPathKey; + setFlowNodes([]); + setFlowEdges([]); + } + return; + } + + // Force rebuild on context switch + if (prevViewPath.current !== viewPathKey) { + graphBuilt.current = false; + prevViewPath.current = viewPathKey; + } + if (graphBuilt.current) return; graphBuilt.current = true; const { nodes, edges } = buildGraphElements( - agents, routes, parallelGroups, forEachGroups, storeNodes, groupProgress, entryPoint + agents, routes, parallelGroups, forEachGroups, storeNodes, groupProgress, entryPoint, parentAgent ); setFlowNodes(nodes); setFlowEdges(edges); - }, [agents, routes, parallelGroups, forEachGroups, storeNodes, groupProgress, entryPoint, setFlowNodes, setFlowEdges]); + }, [agents, routes, parallelGroups, forEachGroups, storeNodes, groupProgress, entryPoint, setFlowNodes, setFlowEdges, viewPathKey, parentAgent]); // Update node data when store nodes change (status, progress, etc.) useEffect(() => { @@ -154,6 +179,18 @@ export function WorkflowGraph() { [selectNode], ); + // Double-click on workflow agent nodes to navigate into subworkflow + const onNodeDoubleClick = useCallback( + (_: React.MouseEvent, node: Node) => { + // Check if this node has a subworkflow context + const hasSubworkflow = subworkflowContexts.some((c) => c.parentAgent === node.id); + if (hasSubworkflow) { + navigateIntoSubworkflow(node.id); + } + }, + [subworkflowContexts, navigateIntoSubworkflow], + ); + const onPaneClick = useCallback(() => { selectNode(null); }, [selectNode]); @@ -220,6 +257,7 @@ export function WorkflowGraph() { onNodesChange={onNodesChange} onEdgesChange={onEdgesChange} onNodeClick={onNodeClick} + onNodeDoubleClick={onNodeDoubleClick} onPaneClick={onPaneClick} nodeTypes={nodeTypes} edgeTypes={edgeTypes} @@ -245,6 +283,8 @@ export function WorkflowGraph() { + + ); @@ -287,3 +327,40 @@ function FitViewKeyboardShortcut() { return null; } + +/** Auto-fit viewport when navigating between workflow contexts */ +function FitViewOnContextSwitch({ viewPathKey }: { viewPathKey: string }) { + const { fitView } = useReactFlow(); + const prevKey = useRef(viewPathKey); + + useEffect(() => { + if (prevKey.current !== viewPathKey) { + prevKey.current = viewPathKey; + setTimeout(() => fitView({ padding: 0.2, duration: 300 }), 50); + } + }, [viewPathKey, fitView]); + + return null; +} + +/** Applies URL query param deep-links (?agent=X, ?subworkflow=Y) on initial load */ +function DeepLinkHandler() { + const error = useDeepLink(); + + if (!error) return null; + + return ( +
+
+ + {error.message} + + Root + +
+
+ ); +} \ No newline at end of file diff --git a/src/conductor/web/frontend/src/components/graph/WorkflowNode.tsx b/src/conductor/web/frontend/src/components/graph/WorkflowNode.tsx new file mode 100644 index 0000000..b719140 --- /dev/null +++ b/src/conductor/web/frontend/src/components/graph/WorkflowNode.tsx @@ -0,0 +1,105 @@ +import { memo } from 'react'; +import { Handle, Position, type NodeProps } from '@xyflow/react'; +import { Layers, ChevronRight } from 'lucide-react'; +import { cn } from '@/lib/utils'; +import { NODE_STATUS_HEX } from '@/lib/constants'; +import { useWorkflowStore } from '@/stores/workflow-store'; +import { useViewedNodes, useViewedSubworkflowContexts } from '@/hooks/use-viewed-context'; +import { NodeTooltip } from './NodeTooltip'; +import type { GraphNodeData } from './graph-layout'; +import type { NodeStatus } from '@/lib/constants'; + +/** + * Graph node for workflow-type agents (subworkflows). + * Shows a stacked-cards icon and a "Dive In" affordance when a + * SubworkflowContext exists for this agent. + */ +export const WorkflowNode = memo(function WorkflowNode({ data, id, selected }: NodeProps) { + const nodeData = data as unknown as GraphNodeData; + const storeStatus = useWorkflowStore((s) => s.nodes[id]?.status); + const status = (storeStatus || nodeData.status || 'pending') as NodeStatus; + const borderColor = NODE_STATUS_HEX[status] || NODE_STATUS_HEX.pending; + + const elapsed = useWorkflowStore((s) => s.nodes[id]?.elapsed); + const errorMessage = useWorkflowStore((s) => s.nodes[id]?.error_message); + const navigateIntoSubworkflow = useWorkflowStore((s) => s.navigateIntoSubworkflow); + const subworkflowContexts = useViewedSubworkflowContexts(); + + const hasContext = subworkflowContexts.some((c) => c.parentAgent === id); + const ctx = subworkflowContexts.find((c) => c.parentAgent === id); + const childName = ctx?.workflowName; + + const statsText = (() => { + if (status === 'failed' && errorMessage) { + const msg = errorMessage.length > 35 ? errorMessage.slice(0, 32) + '...' : errorMessage; + return { text: msg, className: 'text-red-400' }; + } + if (status === 'running') { + return { text: childName || 'Running subworkflow…', className: 'text-[var(--text-muted)]' }; + } + if (status === 'completed') { + const parts: string[] = []; + if (childName) parts.push(childName); + if (elapsed != null) parts.push(`${elapsed.toFixed(1)}s`); + return { text: parts.join(' · ') || 'Done', className: 'text-[var(--text-muted)]' }; + } + return { text: childName || null, className: 'text-[var(--text-muted)]' }; + })(); + + return ( + <> + + +
{ + if (hasContext) { + e.stopPropagation(); + navigateIntoSubworkflow(id); + } + }} + > + {/* Stacked layers icon */} +
+ +
+ +
+
+ {nodeData.label} +
+ {statsText.text && ( + + {statsText.text} + + )} +
+ + {/* "Dive in" indicator */} + {hasContext && ( + + )} +
+
+ + + ); +}); diff --git a/src/conductor/web/frontend/src/components/graph/graph-layout.ts b/src/conductor/web/frontend/src/components/graph/graph-layout.ts index 3f2b606..7a932ee 100644 --- a/src/conductor/web/frontend/src/components/graph/graph-layout.ts +++ b/src/conductor/web/frontend/src/components/graph/graph-layout.ts @@ -9,6 +9,7 @@ export interface GraphNodeData { status: string; groupName?: string; progress?: GroupProgress; + parentAgent?: string; [key: string]: unknown; } @@ -27,6 +28,7 @@ export function buildGraphElements( nodes: Record, groupProgress: Record, entryPoint: string | null, + parentAgent?: string | null, ): { nodes: Node[]; edges: Edge[] } { const flowNodes: Node[] = []; const flowEdges: Edge[] = []; @@ -116,6 +118,7 @@ export function buildGraphElements( let flowNodeType = 'agentNode'; if (nodeType === 'script') flowNodeType = 'scriptNode'; else if (nodeType === 'human_gate') flowNodeType = 'gateNode'; + else if (nodeType === 'workflow') flowNodeType = 'workflowNode'; flowNodes.push({ id: a.name, @@ -139,14 +142,16 @@ export function buildGraphElements( if (hasEnd) { const nd = nodes['$end']; + const isSubworkflow = !!parentAgent; flowNodes.push({ id: '$end', - type: 'endNode', + type: isSubworkflow ? 'egressNode' : 'endNode', position: { x: 0, y: 0 }, data: { label: '$end', - type: 'end', + type: isSubworkflow ? 'egress' : 'end', status: nd?.status || 'pending', + ...(isSubworkflow ? { parentAgent } : {}), }, }); } @@ -154,14 +159,16 @@ export function buildGraphElements( // Always add $start node if we have an entry point if (entryPoint) { const nd = nodes['$start']; + const isSubworkflow = !!parentAgent; flowNodes.push({ id: '$start', - type: 'startNode', + type: isSubworkflow ? 'ingressNode' : 'startNode', position: { x: 0, y: 0 }, data: { label: '$start', - type: 'start', + type: isSubworkflow ? 'ingress' : 'start', status: nd?.status || 'pending', + ...(isSubworkflow ? { parentAgent } : {}), }, }); @@ -176,12 +183,26 @@ export function buildGraphElements( }); } - // Create edges + // Create edges — only include edges whose source and target exist as nodes. + // Remap child nodes inside groups to the parent group node so edges + // connect at the group boundary (children use relative positioning). + const nodeIds = new Set(flowNodes.map((n) => n.id)); + const childToParent = new Map(); + for (const node of flowNodes) { + if (node.parentId) childToParent.set(node.id, node.parentId); + } + for (const r of routes) { + const from = childToParent.get(r.from) ?? r.from; + const to = childToParent.get(r.to) ?? r.to; + if (!nodeIds.has(from) || !nodeIds.has(to)) continue; + // Skip self-loops created by remapping (e.g. group member → group member) + if (from === to) continue; + const edgeId = `${from}->${to}${r.when ? `[${r.when}]` : ''}`; flowEdges.push({ - id: `${r.from}->${r.to}`, - source: r.from, - target: r.to, + id: edgeId, + source: from, + target: to, type: 'animatedEdge', data: { when: r.when }, animated: false, diff --git a/src/conductor/web/frontend/src/components/layout/BreadcrumbBar.tsx b/src/conductor/web/frontend/src/components/layout/BreadcrumbBar.tsx new file mode 100644 index 0000000..f85d24f --- /dev/null +++ b/src/conductor/web/frontend/src/components/layout/BreadcrumbBar.tsx @@ -0,0 +1,44 @@ +import { ChevronRight, Layers } from 'lucide-react'; +import { useWorkflowStore } from '@/stores/workflow-store'; +import type { BreadcrumbEntry } from '@/stores/workflow-store'; + +export function BreadcrumbBar() { + const getBreadcrumbs = useWorkflowStore((s) => s.getBreadcrumbs); + const navigateToContext = useWorkflowStore((s) => s.navigateToContext); + const viewContextPath = useWorkflowStore((s) => s.viewContextPath); + const subworkflowContexts = useWorkflowStore((s) => s.subworkflowContexts); + + // Only show if there are subworkflows + if (subworkflowContexts.length === 0 && viewContextPath.length === 0) return null; + + const crumbs: BreadcrumbEntry[] = getBreadcrumbs(); + + return ( +
+ + {crumbs.map((crumb, idx) => { + const isLast = idx === crumbs.length - 1; + const isActive = JSON.stringify(crumb.path) === JSON.stringify(viewContextPath); + return ( + + {idx > 0 && } + {isLast ? ( + + {crumb.label} + + ) : ( + + )} + + ); + })} +
+ ); +} diff --git a/src/conductor/web/frontend/src/hooks/use-deep-link.ts b/src/conductor/web/frontend/src/hooks/use-deep-link.ts new file mode 100644 index 0000000..f3fd031 --- /dev/null +++ b/src/conductor/web/frontend/src/hooks/use-deep-link.ts @@ -0,0 +1,350 @@ +import { useEffect, useRef, useState } from 'react'; +import { useReactFlow } from '@xyflow/react'; +import { useWorkflowStore } from '@/stores/workflow-store'; +import type { SubworkflowContext } from '@/stores/workflow-store'; + +/** Parse deep-link params from the current URL. */ +function getDeepLinkParams(): { subworkflowPath: string | null; agent: string | null } { + const params = new URLSearchParams(window.location.search); + return { + subworkflowPath: params.get('subworkflow'), + agent: params.get('agent'), + }; +} + +/** + * Walk the subworkflow context tree to find a path of indices for the given + * URL segments. + * + * Each segment is matched against `slotKey` first, then `parentAgent` as a + * fallback. This lets new URLs encode for_each iteration slot keys + * (e.g. `plan_children_group[item-7]`) and round-trip into the right + * concurrent iteration, while old URLs keyed by agent name (and old + * conductor builds where `slotKey` defaults to `parentAgent`) keep working. + * + * For ambiguous parentAgent matches (e.g. multiple iterations of the same + * group), the newest matching context wins — same precedence the engine + * uses when resolving live events. + */ +function resolveSubworkflowPath( + contexts: SubworkflowContext[], + segments: string[], +): { path: number[]; failedSegment: string | null } { + const path: number[] = []; + let current = contexts; + + for (const segment of segments) { + let idx = -1; + // Pass 1: exact slotKey match (newest-first for re-runs / iteration loops) + for (let i = current.length - 1; i >= 0; i--) { + if (current[i]!.slotKey === segment) { + idx = i; + break; + } + } + // Pass 2: legacy parentAgent fallback (newest-first) + if (idx === -1) { + for (let i = current.length - 1; i >= 0; i--) { + if (current[i]!.parentAgent === segment) { + idx = i; + break; + } + } + } + if (idx === -1) { + return { path, failedSegment: segment }; + } + path.push(idx); + current = current[idx]!.children; + } + + return { path, failedSegment: null }; +} + +interface AgentMatch { + path: number[]; + ctx: SubworkflowContext; +} + +/** + * Walk the entire subworkflow tree and collect every context whose `agents[]` + * contains an entry matching `agentName`. + * + * Used for agent-only deep-links (?agent=foo, no ?subworkflow=) so that an + * agent which lives inside a sub-workflow / for_each iteration is reachable + * without the caller needing to construct the full slot path. External + * notification feeds typically only know the agent name reliably. + */ +function findAgentMatches( + contexts: SubworkflowContext[], + agentName: string, + basePath: number[] = [], +): AgentMatch[] { + const matches: AgentMatch[] = []; + for (let i = 0; i < contexts.length; i++) { + const ctx = contexts[i]!; + const path = [...basePath, i]; + if (ctx.agents.some((a) => a.name === agentName)) { + matches.push({ path, ctx }); + } + if (ctx.children.length > 0) { + matches.push(...findAgentMatches(ctx.children, agentName, path)); + } + } + return matches; +} + +/** + * Pick the most relevant match among many candidates: running contexts beat + * non-running, then deeper paths beat shallower (more specific iteration + * wins over a parent that contains it), then newest-by-creation-order wins. + * Mirrors the engine's "live edge" preference for live event routing. + */ +function pickBestAgentMatch(matches: AgentMatch[]): AgentMatch | null { + if (matches.length === 0) return null; + return [...matches].sort((a, b) => { + const aRunning = a.ctx.status === 'running' ? 1 : 0; + const bRunning = b.ctx.status === 'running' ? 1 : 0; + if (aRunning !== bRunning) return bRunning - aRunning; + if (a.path.length !== b.path.length) return b.path.length - a.path.length; + // Same depth, same status: lexicographically-larger path = newer + for (let i = 0; i < a.path.length; i++) { + const ai = a.path[i]!; + const bi = b.path[i]!; + if (ai !== bi) return bi - ai; + } + return 0; + })[0]!; +} + +/** Render a slot-key path for human-readable error messages. */ +function describeLocation(contexts: SubworkflowContext[], path: number[]): string { + const segments: string[] = []; + let current = contexts; + for (const idx of path) { + const ctx = current[idx]; + if (!ctx) break; + segments.push(ctx.slotKey || ctx.parentAgent || `[${idx}]`); + current = ctx.children; + } + return segments.join('/'); +} + +export interface DeepLinkError { + message: string; +} + +/** + * Reads `?agent=` and `?subworkflow=` query params on initial load + * and auto-selects / navigates to the matching node once the workflow + * state has been replayed. + * + * Subworkflow paths support slash-separated nesting. Each segment matches + * the child context's `slotKey` first, then falls back to `parentAgent`: + * ?subworkflow=planning/design → root→planning→design + * ?subworkflow=plan_children_group[item-7]/build → into a specific + * for_each iteration + * + * Agent-only links (?agent=foo, no ?subworkflow=) search transitively: + * root agents first, then every sub-workflow context. If the agent is + * found in exactly one place, we navigate there. If it's found in many + * places (e.g. the same agent ran in every for_each iteration), the + * running > deepest > newest match wins. + * + * Returns an error object if the deep-link target cannot be resolved. + * Must be rendered inside a provider so useReactFlow() works. + */ +export function useDeepLink(): DeepLinkError | null { + const [error, setError] = useState(null); + const applied = useRef(false); + const { fitView } = useReactFlow(); + + const { subworkflowPath, agent } = getDeepLinkParams(); + const hasParams = !!(subworkflowPath || agent); + + useEffect(() => { + if (applied.current || !hasParams) return; + + let debounceTimer: ReturnType | null = null; + let hardTimeout: ReturnType | null = null; + let unsubscribe: (() => void) | null = null; + + const apply = () => { + if (applied.current) return; + applied.current = true; + if (debounceTimer) clearTimeout(debounceTimer); + if (hardTimeout) clearTimeout(hardTimeout); + if (unsubscribe) unsubscribe(); + + const state = useWorkflowStore.getState(); + if (state.agents.length === 0) { + setError({ message: 'Workflow state did not load.' }); + return; + } + + // Resolve subworkflow path (if provided) + let resolvedPath: number[] = []; + if (subworkflowPath) { + const segments = subworkflowPath.split('/').filter(Boolean); + const result = resolveSubworkflowPath(state.subworkflowContexts, segments); + if (result.failedSegment) { + const resolved = segments.slice(0, result.path.length).join('/'); + setError({ + message: `Subworkflow "${result.failedSegment}" not found${resolved ? ` (resolved: ${resolved})` : ''}. It may not have started yet.`, + }); + return; + } + resolvedPath = result.path; + } + + // Resolve agent (if provided) + if (agent) { + const agentsAtTarget = + resolvedPath.length === 0 + ? state.agents + : (() => { + let ctx: SubworkflowContext | undefined; + let contexts = state.subworkflowContexts; + for (const idx of resolvedPath) { + ctx = contexts[idx]; + if (!ctx) break; + contexts = ctx.children; + } + return ctx?.agents ?? []; + })(); + + if (agentsAtTarget.some((a) => a.name === agent)) { + // Agent is at the requested (or root) location + useWorkflowStore.setState({ + viewContextPath: resolvedPath, + selectedNode: agent, + }); + } else { + // Not at the requested location. Search transitively. + const matches = findAgentMatches(state.subworkflowContexts, agent); + + if (matches.length === 0) { + const where = subworkflowPath || 'root workflow'; + // Even on failure, honour any explicit subworkflow nav, otherwise + // pin to root so sticky-follow doesn't strand the user inside a + // stale for_each iteration during replay. + useWorkflowStore.setState({ + viewContextPath: resolvedPath, + selectedNode: null, + }); + setError({ + message: `Agent "${agent}" not found in ${where}.`, + }); + return; + } + + if (subworkflowPath) { + // User asked for a specific path, agent isn't there but is + // elsewhere — surface the discovered locations so the next + // click is obvious. + const locations = matches + .slice(0, 5) + .map((m) => describeLocation(state.subworkflowContexts, m.path)) + .join(', '); + const more = matches.length > 5 ? `, and ${matches.length - 5} more` : ''; + useWorkflowStore.setState({ + viewContextPath: resolvedPath, + selectedNode: null, + }); + setError({ + message: `Agent "${agent}" not found in ${subworkflowPath}. Found in: ${locations}${more}`, + }); + return; + } + + // Agent-only link: pick the best transitive match and navigate there. + const best = pickBestAgentMatch(matches)!; + useWorkflowStore.setState({ + viewContextPath: best.path, + selectedNode: agent, + }); + } + + // Center the view on the node after React Flow rebuilds the graph + setTimeout(() => { + fitView({ nodes: [{ id: agent }], padding: 0.5, duration: 400 }); + }, 200); + } else if (subworkflowPath) { + // Subworkflow nav only, no agent + useWorkflowStore.setState({ + viewContextPath: resolvedPath, + selectedNode: null, + }); + } + }; + + /** + * Decide whether the current state is "ready enough" to apply the deep + * link, or if we should keep waiting for more replayed events. Returns + * true when the resolution is unambiguous (agent at requested location, + * or workflow has finished so no more contexts are coming). + */ + const isResolved = (): boolean => { + const state = useWorkflowStore.getState(); + if (state.agents.length === 0) return false; + + // If the workflow has ended, we have all the state we'll ever get. + if (state.workflowStatus !== 'running' && state.workflowStatus !== 'pending') { + return true; + } + + // For explicit subworkflow paths, wait until the path resolves. + if (subworkflowPath) { + const segments = subworkflowPath.split('/').filter(Boolean); + const { failedSegment } = resolveSubworkflowPath( + state.subworkflowContexts, + segments, + ); + if (failedSegment) return false; + } + + // For agent-only links, wait until the agent appears somewhere. + if (agent && !subworkflowPath) { + const rootHas = state.agents.some((a) => a.name === agent); + if (!rootHas && findAgentMatches(state.subworkflowContexts, agent).length === 0) { + return false; + } + } + + return true; + }; + + // Each time the store changes, debounce 200ms then check if we can apply. + // The debounce gives the WS replay burst a chance to finish dispatching. + const scheduleCheck = () => { + if (debounceTimer) clearTimeout(debounceTimer); + debounceTimer = setTimeout(() => { + if (applied.current) return; + if (isResolved()) apply(); + }, 200); + }; + + unsubscribe = useWorkflowStore.subscribe(scheduleCheck); + + // Hard cap: if 5 seconds pass and we still haven't applied (e.g. live + // workflow that never reaches a terminal state and the agent never + // appeared), fall through with whatever state we have so the user gets + // a deterministic error instead of a hung UI. + hardTimeout = setTimeout(() => { + if (applied.current) return; + apply(); + }, 5000); + + // Kick off an initial check in case state was already loaded before + // this effect attached. + scheduleCheck(); + + return () => { + if (debounceTimer) clearTimeout(debounceTimer); + if (hardTimeout) clearTimeout(hardTimeout); + if (unsubscribe) unsubscribe(); + }; + }, [hasParams, subworkflowPath, agent, fitView]); + + return error; +} diff --git a/src/conductor/web/frontend/src/hooks/use-viewed-context.ts b/src/conductor/web/frontend/src/hooks/use-viewed-context.ts new file mode 100644 index 0000000..79eba94 --- /dev/null +++ b/src/conductor/web/frontend/src/hooks/use-viewed-context.ts @@ -0,0 +1,117 @@ +/** + * Hooks for accessing the currently viewed workflow context. + * + * These replace direct `getViewedContext()` calls in Zustand selectors, + * which create new objects on every call and cause infinite re-render loops. + * Instead, we select raw state and resolve the viewed context with useMemo. + */ +import { useMemo } from 'react'; +import { useWorkflowStore } from '@/stores/workflow-store'; +import type { NodeData, GroupProgress, HighlightedEdge, SubworkflowContext, WorkflowAgent, RouteEdge, ParallelGroup, ForEachGroup } from '@/stores/workflow-store'; + +/** Resolve a SubworkflowContext from a path of indices. */ +function resolveCtx(contexts: SubworkflowContext[], path: number[]): SubworkflowContext | null { + if (path.length === 0) return null; + let ctx: SubworkflowContext | undefined = contexts[path[0]!]; + for (let i = 1; i < path.length && ctx; i++) { + ctx = ctx.children[path[i]!]; + } + return ctx ?? null; +} + +/** Get the nodes map for the currently viewed context. */ +export function useViewedNodes(): Record { + const viewPath = useWorkflowStore((s) => s.viewContextPath); + const rootNodes = useWorkflowStore((s) => s.nodes); + const subContexts = useWorkflowStore((s) => s.subworkflowContexts); + return useMemo(() => { + if (viewPath.length === 0) return rootNodes; + return resolveCtx(subContexts, viewPath)?.nodes ?? rootNodes; + }, [viewPath, rootNodes, subContexts]); +} + +/** Get the groupProgress map for the currently viewed context. */ +export function useViewedGroupProgress(): Record { + const viewPath = useWorkflowStore((s) => s.viewContextPath); + const rootProgress = useWorkflowStore((s) => s.groupProgress); + const subContexts = useWorkflowStore((s) => s.subworkflowContexts); + return useMemo(() => { + if (viewPath.length === 0) return rootProgress; + return resolveCtx(subContexts, viewPath)?.groupProgress ?? rootProgress; + }, [viewPath, rootProgress, subContexts]); +} + +/** Get the highlightedEdges for the currently viewed context. */ +export function useViewedHighlightedEdges(): HighlightedEdge[] { + const viewPath = useWorkflowStore((s) => s.viewContextPath); + const rootEdges = useWorkflowStore((s) => s.highlightedEdges); + const subContexts = useWorkflowStore((s) => s.subworkflowContexts); + return useMemo(() => { + if (viewPath.length === 0) return rootEdges; + return resolveCtx(subContexts, viewPath)?.highlightedEdges ?? rootEdges; + }, [viewPath, rootEdges, subContexts]); +} + +/** Get the subworkflow contexts for the currently viewed level. */ +export function useViewedSubworkflowContexts(): SubworkflowContext[] { + const viewPath = useWorkflowStore((s) => s.viewContextPath); + const rootContexts = useWorkflowStore((s) => s.subworkflowContexts); + return useMemo(() => { + if (viewPath.length === 0) return rootContexts; + return resolveCtx(rootContexts, viewPath)?.children ?? []; + }, [viewPath, rootContexts]); +} + +/** Get the full viewed context for graph building (agents, routes, etc). */ +export function useViewedGraphData() { + const viewPath = useWorkflowStore((s) => s.viewContextPath); + const rootAgents = useWorkflowStore((s) => s.agents); + const rootRoutes = useWorkflowStore((s) => s.routes); + const rootParallel = useWorkflowStore((s) => s.parallelGroups); + const rootForEach = useWorkflowStore((s) => s.forEachGroups); + const rootNodes = useWorkflowStore((s) => s.nodes); + const rootProgress = useWorkflowStore((s) => s.groupProgress); + const rootEntry = useWorkflowStore((s) => s.entryPoint); + const subContexts = useWorkflowStore((s) => s.subworkflowContexts); + + return useMemo(() => { + if (viewPath.length === 0) { + return { + agents: rootAgents, + routes: rootRoutes, + parallelGroups: rootParallel, + forEachGroups: rootForEach, + nodes: rootNodes, + groupProgress: rootProgress, + entryPoint: rootEntry, + subworkflowContexts: subContexts, + parentAgent: null as string | null, + }; + } + const ctx = resolveCtx(subContexts, viewPath); + if (!ctx) { + return { + agents: rootAgents, + routes: rootRoutes, + parallelGroups: rootParallel, + forEachGroups: rootForEach, + nodes: rootNodes, + groupProgress: rootProgress, + entryPoint: rootEntry, + subworkflowContexts: subContexts, + parentAgent: null as string | null, + }; + } + return { + agents: ctx.agents, + routes: ctx.routes, + parallelGroups: ctx.parallelGroups, + forEachGroups: ctx.forEachGroups, + nodes: ctx.nodes, + groupProgress: ctx.groupProgress, + entryPoint: ctx.entryPoint, + subworkflowContexts: ctx.children, + parentAgent: ctx.parentAgent, + }; + }, [viewPath, rootAgents, rootRoutes, rootParallel, rootForEach, rootNodes, rootProgress, rootEntry, subContexts]); +} diff --git a/src/conductor/web/frontend/src/lib/constants.ts b/src/conductor/web/frontend/src/lib/constants.ts index 37ed592..0fd1db5 100644 --- a/src/conductor/web/frontend/src/lib/constants.ts +++ b/src/conductor/web/frontend/src/lib/constants.ts @@ -1,5 +1,5 @@ export type NodeStatus = 'pending' | 'running' | 'completed' | 'failed' | 'paused' | 'idle' | 'waiting'; -export type NodeType = 'agent' | 'script' | 'human_gate' | 'parallel_group' | 'for_each_group' | 'start' | 'end'; +export type NodeType = 'agent' | 'script' | 'human_gate' | 'parallel_group' | 'for_each_group' | 'workflow' | 'start' | 'end' | 'ingress' | 'egress'; export const NODE_STATUS_HEX: Record = { pending: '#6b7280', diff --git a/src/conductor/web/frontend/src/stores/workflow-store.ts b/src/conductor/web/frontend/src/stores/workflow-store.ts index efa4d3e..acb862a 100644 --- a/src/conductor/web/frontend/src/stores/workflow-store.ts +++ b/src/conductor/web/frontend/src/stores/workflow-store.ts @@ -29,6 +29,9 @@ import type { ForEachCompletedData, AgentPausedData, AgentResumedData, + SubworkflowStartedData, + SubworkflowCompletedData, + SubworkflowFailedData, } from '@/types/events'; export interface ActivityEntry { @@ -143,6 +146,54 @@ export interface ForEachGroup { export type WorkflowStatus = 'pending' | 'running' | 'completed' | 'failed'; export type WsStatus = 'connecting' | 'connected' | 'disconnected' | 'reconnecting'; +/** A single subworkflow execution context — isolated state for one invocation. */ +export interface SubworkflowContext { + /** Agent in the parent that triggered this subworkflow */ + parentAgent: string; + /** Iteration number (for repeated subworkflow calls) */ + iteration: number; + /** + * Stable slot identifier for this context within its parent's children. + * For sequential sub-workflow agents this is the agent name. + * For for_each iterations it is `f"{group.name}[{key}]"`. + * Used to disambiguate concurrent for_each iterations of the same group. + */ + slotKey: string; + /** The .yaml file reference */ + workflowFile: string; + /** Resolved workflow name (from inner workflow_started) */ + workflowName: string; + status: WorkflowStatus; + /** Graph structure — isolated from parent */ + agents: WorkflowAgent[]; + routes: RouteEdge[]; + parallelGroups: ParallelGroup[]; + forEachGroups: ForEachGroup[]; + nodes: Record; + groupProgress: Record; + highlightedEdges: HighlightedEdge[]; + entryPoint: string | null; + /** Nested child contexts (subworkflows within this subworkflow) */ + children: SubworkflowContext[]; + /** Counters */ + agentsCompleted: number; + agentsTotal: number; + totalCost: number; + totalTokens: number; + /** Event/activity log scoped to this context */ + eventLog: LogEntry[]; + activityLog: ActivityLogEntry[]; + workflowOutput: unknown | null; + workflowFailure: { error_type?: string; message?: string } | null; +} + +/** Breadcrumb entry for navigation */ +export interface BreadcrumbEntry { + label: string; + /** Index path to reach this context: [] = root, [0] = first child, [0, 2] = grandchild */ + path: number[]; +} + export interface HighlightedEdge { from: string; to: string; @@ -210,6 +261,18 @@ interface WorkflowState { lastEventTime: number | null; isPaused: boolean; + // --- Subworkflow depth tracking --- + /** Current nesting depth: 0 = root workflow events are active */ + wfDepth: number; + /** Subworkflow contexts — each child workflow gets isolated state */ + subworkflowContexts: SubworkflowContext[]; + /** The context currently being populated by child events (stack of indices into children arrays) */ + activeContextPath: number[]; + + // --- Breadcrumb navigation --- + /** Path to the currently *viewed* context ([] = root) */ + viewContextPath: number[]; + // Replay mode state replayMode: boolean; replayEvents: WorkflowEvent[]; @@ -226,6 +289,26 @@ interface WorkflowState { setEdgeHighlight: (from: string, to: string, state: 'highlighted' | 'taken' | 'failed') => void; clearEdgeHighlight: (from: string, to: string) => void; + // Breadcrumb navigation actions + navigateToContext: (path: number[]) => void; + navigateUp: () => void; + navigateIntoSubworkflow: (slotKey: string) => void; + + // Computed: get the currently viewed context's data + getViewedContext: () => { + workflowName: string; + agents: WorkflowAgent[]; + routes: RouteEdge[]; + parallelGroups: ParallelGroup[]; + forEachGroups: ForEachGroup[]; + nodes: Record; + groupProgress: Record; + highlightedEdges: HighlightedEdge[]; + entryPoint: string | null; + subworkflowContexts: SubworkflowContext[]; + }; + getBreadcrumbs: () => BreadcrumbEntry[]; + // Replay actions setReplayMode: (events: WorkflowEvent[]) => void; setReplayPosition: (position: number) => void; @@ -270,7 +353,106 @@ function addForEachItemActivity(nodes: Record, groupName: stri } } -export const useWorkflowStore = create((set) => ({ +// --------------------------------------------------------------------------- +// Subworkflow context helpers +// --------------------------------------------------------------------------- + +function createSubworkflowContext(parentAgent: string, iteration: number, workflowFile: string, slotKey?: string): SubworkflowContext { + return { + parentAgent, + iteration, + slotKey: slotKey ?? parentAgent, + workflowFile, + workflowName: '', + status: 'pending', + agents: [], + routes: [], + parallelGroups: [], + forEachGroups: [], + nodes: {}, + groupProgress: {}, + highlightedEdges: [], + entryPoint: null, + children: [], + agentsCompleted: 0, + agentsTotal: 0, + totalCost: 0, + totalTokens: 0, + eventLog: [], + activityLog: [], + workflowOutput: null, + workflowFailure: null, + }; +} + +/** Resolve a SubworkflowContext from a path of indices (e.g. [0, 2] = first child's third child). */ +function resolveContext(contexts: SubworkflowContext[], path: number[]): SubworkflowContext | null { + if (path.length === 0) return null; + let ctx: SubworkflowContext | undefined = contexts[path[0]!]; + for (let i = 1; i < path.length && ctx; i++) { + ctx = ctx.children[path[i]!]; + } + return ctx ?? null; +} + +/** + * Walk the subworkflow context tree by slot keys, returning the index path + * (numeric, for use with resolveContext) and the resolved context. + * + * Returns null if any segment cannot be matched. + */ +function resolveSlotPath( + contexts: SubworkflowContext[], + slotPath: string[], +): { indexPath: number[]; ctx: SubworkflowContext | null } | null { + if (slotPath.length === 0) { + return { indexPath: [], ctx: null }; + } + const indexPath: number[] = []; + let current = contexts; + let ctx: SubworkflowContext | null = null; + for (const slot of slotPath) { + // Match newest matching slot (handles re-runs / iteration loops). + let foundIdx = -1; + for (let i = current.length - 1; i >= 0; i--) { + if (current[i]!.slotKey === slot) { + foundIdx = i; + break; + } + } + if (foundIdx === -1) return null; + indexPath.push(foundIdx); + ctx = current[foundIdx]!; + current = ctx.children; + } + return { indexPath, ctx }; +} + +/** Find a child context by slot key within a context's children. */ +function findChildContext( + contexts: SubworkflowContext[], + slotKey: string, +): { ctx: SubworkflowContext; index: number } | null { + // Iterate newest-first so that re-runs of the same slot pick the latest. + for (let i = contexts.length - 1; i >= 0; i--) { + const c = contexts[i]!; + if (c.slotKey === slotKey) { + return { ctx: c, index: i }; + } + } + return null; +} + +/** Get the nodes/routes/etc. for the currently active child context (where events should be routed). */ +function _getActiveChildState(state: WorkflowState): { nodes: Record; groupProgress: Record; eventLog: LogEntry[]; activityLog: ActivityLogEntry[] } | null { + if (state.activeContextPath.length === 0) return null; + const ctx = resolveContext(state.subworkflowContexts, state.activeContextPath); + if (!ctx) return null; + return { nodes: ctx.nodes, groupProgress: ctx.groupProgress, eventLog: ctx.eventLog, activityLog: ctx.activityLog }; +} +void _getActiveChildState; // suppress unused warning + +export const useWorkflowStore = create((set, get) => ({ workflowName: '', workflowStatus: 'pending', workflowStartTime: null, @@ -297,6 +479,10 @@ export const useWorkflowStore = create((set) => ({ workflowOutput: null, lastEventTime: null, isPaused: false, + wfDepth: 0, + subworkflowContexts: [], + activeContextPath: [], + viewContextPath: [], replayMode: false, replayEvents: [], replayPosition: 0, @@ -354,6 +540,9 @@ export const useWorkflowStore = create((set) => ({ activityLog: [], workflowOutput: null, workflowFailedAgent: null, + wfDepth: 0, + subworkflowContexts: [], + activeContextPath: [], }; for (const event of events) { const handler = eventHandlers[event.type]; @@ -368,7 +557,6 @@ export const useWorkflowStore = create((set) => ({ if (activityEntry) { newState.activityLog.push(activityEntry); } - // Track timestamp of the last replayed event newState.lastEventTime = event.timestamp; } return newState; @@ -399,6 +587,10 @@ export const useWorkflowStore = create((set) => ({ activityLog: [], workflowOutput: null, workflowFailedAgent: null, + wfDepth: 0, + subworkflowContexts: [], + activeContextPath: [], + viewContextPath: [], }; for (const event of events) { const handler = eventHandlers[event.type]; @@ -440,6 +632,10 @@ export const useWorkflowStore = create((set) => ({ forEachGroups: [], isPaused: false, lastEventTime: null, + wfDepth: 0, + subworkflowContexts: [], + activeContextPath: [], + viewContextPath: [], }; for (const event of events) { const handler = eventHandlers[event.type]; @@ -480,70 +676,258 @@ export const useWorkflowStore = create((set) => ({ highlightedEdges: prev.highlightedEdges.filter((e) => !(e.from === from && e.to === to)), })); }, + + // --- Breadcrumb navigation --- + + navigateToContext: (path: number[]) => { + set({ viewContextPath: path, selectedNode: null }); + }, + + navigateUp: () => { + set((prev) => ({ + viewContextPath: prev.viewContextPath.slice(0, -1), + selectedNode: null, + })); + }, + + navigateIntoSubworkflow: (slotKey: string) => { + const state = get(); + // Determine which context list to search in + const viewPath = state.viewContextPath; + let contexts: SubworkflowContext[]; + if (viewPath.length === 0) { + contexts = state.subworkflowContexts; + } else { + const parent = resolveContext(state.subworkflowContexts, viewPath); + if (!parent) return; + contexts = parent.children; + } + const found = findChildContext(contexts, slotKey); + if (found) { + set({ viewContextPath: [...viewPath, found.index], selectedNode: null }); + } + }, + + getViewedContext: () => { + const state = get(); + if (state.viewContextPath.length === 0) { + return { + workflowName: state.workflowName, + agents: state.agents, + routes: state.routes, + parallelGroups: state.parallelGroups, + forEachGroups: state.forEachGroups, + nodes: state.nodes, + groupProgress: state.groupProgress, + highlightedEdges: state.highlightedEdges, + entryPoint: state.entryPoint, + subworkflowContexts: state.subworkflowContexts, + }; + } + const ctx = resolveContext(state.subworkflowContexts, state.viewContextPath); + if (!ctx) { + // Stale path — reset to root + return { + workflowName: state.workflowName, + agents: state.agents, + routes: state.routes, + parallelGroups: state.parallelGroups, + forEachGroups: state.forEachGroups, + nodes: state.nodes, + groupProgress: state.groupProgress, + highlightedEdges: state.highlightedEdges, + entryPoint: state.entryPoint, + subworkflowContexts: state.subworkflowContexts, + }; + } + return { + workflowName: ctx.workflowName, + agents: ctx.agents, + routes: ctx.routes, + parallelGroups: ctx.parallelGroups, + forEachGroups: ctx.forEachGroups, + nodes: ctx.nodes, + groupProgress: ctx.groupProgress, + highlightedEdges: ctx.highlightedEdges, + entryPoint: ctx.entryPoint, + subworkflowContexts: ctx.children, + }; + }, + + getBreadcrumbs: () => { + const state = get(); + const crumbs: BreadcrumbEntry[] = [{ label: state.workflowName || 'Root', path: [] }]; + let contexts = state.subworkflowContexts; + for (let i = 0; i < state.viewContextPath.length; i++) { + const idx = state.viewContextPath[i]!; + const ctx = contexts[idx]; + if (!ctx) break; + // Prefer the slot key (e.g. "plan_children_group[2]") so concurrent + // for_each iterations are distinguishable; fall back to workflow name. + const label = ctx.slotKey || ctx.workflowName || ctx.workflowFile || ctx.parentAgent; + crumbs.push({ label, path: state.viewContextPath.slice(0, i + 1) }); + contexts = ctx.children; + } + return crumbs; + }, })); // --- Event handlers (mutate the passed state directly) --- type MutableState = WorkflowState; +/** Get the nodes/groupProgress/routes/highlightedEdges for the context that should receive the event. + * + * When the event payload carries an explicit `subworkflow_path` (auto-stamped + * by sub-workflow engines), that path is used to resolve the owning context — + * essential for routing per-iteration agent events under concurrent + * for-each-of-workflow execution, where a single shared `activeContextPath` + * cannot represent the multiple in-flight sibling contexts. Falls back to + * `activeContextPath` for legacy events and root-engine events. + */ +function activeTarget( + state: MutableState, + data?: Record, +): { + nodes: Record; + groupProgress: Record; + routes: RouteEdge[]; + highlightedEdges: HighlightedEdge[]; + addCost: (cost: number) => void; + addTokens: (tokens: number) => void; + incrCompleted: () => void; +} { + let ctx: SubworkflowContext | null = null; + const subPath = data?.subworkflow_path; + if (Array.isArray(subPath) && subPath.length > 0) { + ctx = resolveSlotPath(state.subworkflowContexts, subPath as string[])?.ctx ?? null; + } else if (state.activeContextPath.length > 0) { + ctx = resolveContext(state.subworkflowContexts, state.activeContextPath); + } + if (ctx) { + const ctxRef = ctx; + return { + nodes: ctxRef.nodes, + groupProgress: ctxRef.groupProgress, + routes: ctxRef.routes, + highlightedEdges: ctxRef.highlightedEdges, + addCost: (cost: number) => { ctxRef.totalCost += cost; state.totalCost += cost; }, + addTokens: (tokens: number) => { ctxRef.totalTokens += tokens; state.totalTokens += tokens; }, + incrCompleted: () => { ctxRef.agentsCompleted++; state.agentsCompleted++; }, + }; + } + return { + nodes: state.nodes, + groupProgress: state.groupProgress, + routes: state.routes, + highlightedEdges: state.highlightedEdges, + addCost: (cost: number) => { state.totalCost += cost; }, + addTokens: (tokens: number) => { state.totalTokens += tokens; }, + incrCompleted: () => { state.agentsCompleted++; }, + }; +} + const eventHandlers: Record, timestamp?: number) => void> = { workflow_started: (state, _data, timestamp) => { const data = _data as unknown as WorkflowStartedData; - state.workflowStatus = 'running'; - state.workflowStartTime = timestamp ?? Date.now() / 1000; - state.workflowName = data.name || ''; - state.workflowYaml = (data as Record).yaml_source as string ?? null; - state.conductorVersion = (data as Record).version as string ?? null; - state.entryPoint = data.entry_point || null; - state.agents = data.agents || []; - state.routes = data.routes || []; - state.parallelGroups = data.parallel_groups || []; - state.forEachGroups = data.for_each_groups || []; - - // Set $start node to running - ensureNode(state.nodes, '$start', 'start'); - state.nodes['$start']!.status = 'running'; - replaceNode(state.nodes, '$start'); - - const groupAgents = new Set(); - const agentNames = new Set(); - - // Register parallel group agents - for (const pg of state.parallelGroups) { - for (const a of pg.agents) { - groupAgents.add(a); - } - agentNames.add(pg.name); - ensureNode(state.nodes, pg.name, 'parallel_group'); - state.groupProgress[pg.name] = { total: pg.agents.length, completed: 0, failed: 0 }; - for (const agentName of pg.agents) { - ensureNode(state.nodes, agentName, 'agent'); - } - } - // Register for-each groups - for (const fg of state.forEachGroups) { - agentNames.add(fg.name); - ensureNode(state.nodes, fg.name, 'for_each_group'); - state.groupProgress[fg.name] = { total: 0, completed: 0, failed: 0 }; - } + if (state.wfDepth === 0) { + // Root workflow — initialize as before + state.workflowStatus = 'running'; + state.workflowStartTime = timestamp ?? Date.now() / 1000; + state.workflowName = data.name || ''; + state.workflowYaml = (_data as Record).yaml_source as string ?? null; + state.conductorVersion = (_data as Record).version as string ?? null; + state.entryPoint = data.entry_point || null; + state.agents = data.agents || []; + state.routes = data.routes || []; + state.parallelGroups = data.parallel_groups || []; + state.forEachGroups = data.for_each_groups || []; + + ensureNode(state.nodes, '$start', 'start'); + state.nodes['$start']!.status = 'running'; + replaceNode(state.nodes, '$start'); - // Register standalone agents - for (const a of state.agents) { - if (!agentNames.has(a.name) && !groupAgents.has(a.name)) { - const nodeType = (a.type || 'agent') as NodeType; - ensureNode(state.nodes, a.name, nodeType); - if (a.model) state.nodes[a.name]!.model = a.model; - agentNames.add(a.name); + const groupAgents = new Set(); + const agentNames = new Set(); + + for (const pg of state.parallelGroups) { + for (const a of pg.agents) groupAgents.add(a); + agentNames.add(pg.name); + ensureNode(state.nodes, pg.name, 'parallel_group'); + state.groupProgress[pg.name] = { total: pg.agents.length, completed: 0, failed: 0 }; + for (const agentName of pg.agents) ensureNode(state.nodes, agentName, 'agent'); + } + for (const fg of state.forEachGroups) { + agentNames.add(fg.name); + ensureNode(state.nodes, fg.name, 'for_each_group'); + state.groupProgress[fg.name] = { total: 0, completed: 0, failed: 0 }; + } + for (const a of state.agents) { + if (!agentNames.has(a.name) && !groupAgents.has(a.name)) { + const nodeType = (a.type || 'agent') as NodeType; + ensureNode(state.nodes, a.name, nodeType); + if (a.model) state.nodes[a.name]!.model = a.model; + agentNames.add(a.name); + } + } + state.agentsTotal = agentNames.size; + } else { + // Child workflow — populate the owning child context. Locate it via + // the engine-supplied subworkflow_path (slot-key path) when present, + // because under concurrent for_each iterations the global + // activeContextPath may have been advanced past us by a sibling + // start, which would otherwise scramble whose routes/agents land + // in which ctx. + const subPath = (_data as Record).subworkflow_path; + const ctx = Array.isArray(subPath) && subPath.length > 0 + ? resolveSlotPath(state.subworkflowContexts, subPath as string[])?.ctx ?? null + : resolveContext(state.subworkflowContexts, state.activeContextPath); + if (ctx) { + ctx.workflowName = data.name || ''; + ctx.status = 'running'; + ctx.entryPoint = data.entry_point || null; + ctx.agents = data.agents || []; + ctx.routes = data.routes || []; + ctx.parallelGroups = data.parallel_groups || []; + ctx.forEachGroups = data.for_each_groups || []; + + ensureNode(ctx.nodes, '$start', 'start'); + ctx.nodes['$start']!.status = 'running'; + + const groupAgents = new Set(); + const agentNames = new Set(); + + for (const pg of ctx.parallelGroups) { + for (const a of pg.agents) groupAgents.add(a); + agentNames.add(pg.name); + ensureNode(ctx.nodes, pg.name, 'parallel_group'); + ctx.groupProgress[pg.name] = { total: pg.agents.length, completed: 0, failed: 0 }; + for (const agentName of pg.agents) ensureNode(ctx.nodes, agentName, 'agent'); + } + for (const fg of ctx.forEachGroups) { + agentNames.add(fg.name); + ensureNode(ctx.nodes, fg.name, 'for_each_group'); + ctx.groupProgress[fg.name] = { total: 0, completed: 0, failed: 0 }; + } + for (const a of ctx.agents) { + if (!agentNames.has(a.name) && !groupAgents.has(a.name)) { + const nodeType = (a.type || 'agent') as NodeType; + ensureNode(ctx.nodes, a.name, nodeType); + if (a.model) ctx.nodes[a.name]!.model = a.model; + agentNames.add(a.name); + } + } + ctx.agentsTotal = agentNames.size; } } - - state.agentsTotal = agentNames.size; + state.wfDepth++; }, agent_started: (state, _data, timestamp) => { const data = _data as unknown as AgentStartedData; - const nd = ensureNode(state.nodes, data.agent_name); + const t = activeTarget(state, _data); + const nd = ensureNode(t.nodes, data.agent_name); // Snapshot previous iteration before clearing if (nd.iteration != null && (nd.output != null || nd.error_type != null)) { @@ -568,23 +952,22 @@ const eventHandlers: Record { const data = _data as unknown as AgentCompletedData; - const nd = ensureNode(state.nodes, data.agent_name); + const t = activeTarget(state, _data); + const nd = ensureNode(t.nodes, data.agent_name); nd.status = 'completed'; - state.agentsCompleted++; + t.incrCompleted(); nd.elapsed = data.elapsed; nd.model = data.model; nd.tokens = data.tokens; @@ -593,270 +976,241 @@ const eventHandlers: Record 0) { nd.context_pct = Math.round((data.context_window_used / data.context_window_max) * 100); } - if (data.cost_usd) state.totalCost += data.cost_usd; - if (data.tokens) state.totalTokens += data.tokens; - replaceNode(state.nodes, data.agent_name); + if (data.cost_usd) t.addCost(data.cost_usd); + if (data.tokens) t.addTokens(data.tokens); + replaceNode(t.nodes, data.agent_name); }, agent_failed: (state, _data) => { const data = _data as unknown as AgentFailedData; - const nd = ensureNode(state.nodes, data.agent_name); + const t = activeTarget(state, _data); + const nd = ensureNode(t.nodes, data.agent_name); nd.status = 'failed'; nd.elapsed = data.elapsed; nd.error_type = data.error_type; nd.error_message = data.message; - // Highlight edges leading to the failed agent in red - for (const route of state.routes) { + for (const route of t.routes) { if (route.to === data.agent_name) { - state.highlightedEdges = [ - ...state.highlightedEdges.filter( - (e) => !(e.from === route.from && e.to === route.to) - ), - { from: route.from, to: route.to, state: 'failed' }, - ]; + t.highlightedEdges.push({ from: route.from, to: route.to, state: 'failed' }); } } - replaceNode(state.nodes, data.agent_name); + replaceNode(t.nodes, data.agent_name); }, agent_prompt_rendered: (state, _data) => { const data = _data as unknown as AgentPromptRenderedData; const itemKey = (_data as Record).item_key as string | undefined; - const nd = ensureNode(state.nodes, data.agent_name); + const t = activeTarget(state, _data); + const nd = ensureNode(t.nodes, data.agent_name); nd.prompt = data.rendered_prompt; nd.context_keys = data.context_keys; - // Route to per-item data when item_key is present (for-each) if (itemKey) { - addForEachItemActivity(state.nodes, data.agent_name, itemKey, { - type: 'prompt', - icon: '📝', - label: 'prompt', - text: 'Prompt rendered', + addForEachItemActivity(t.nodes, data.agent_name, itemKey, { + type: 'prompt', icon: '📝', label: 'prompt', text: 'Prompt rendered', detail: data.rendered_prompt?.slice(0, 500) || null, }); - const itemNd = state.nodes[data.agent_name]; + const itemNd = t.nodes[data.agent_name]; if (itemNd?.for_each_items) { const item = itemNd.for_each_items.find((i) => i.key === itemKey); if (item) item.prompt = data.rendered_prompt; } } - replaceNode(state.nodes, data.agent_name); + replaceNode(t.nodes, data.agent_name); }, agent_reasoning: (state, _data) => { const data = _data as unknown as AgentReasoningData; const itemKey = (_data as Record).item_key as string | undefined; - const entry: ActivityEntry = { - type: 'reasoning', - icon: '💭', - label: 'thinking', - text: data.content, - }; - addActivity(state.nodes, data.agent_name, entry); - if (itemKey) { - addForEachItemActivity(state.nodes, data.agent_name, itemKey, entry); - } - replaceNode(state.nodes, data.agent_name); + const t = activeTarget(state, _data); + const entry: ActivityEntry = { type: 'reasoning', icon: '💭', label: 'thinking', text: data.content }; + addActivity(t.nodes, data.agent_name, entry); + if (itemKey) addForEachItemActivity(t.nodes, data.agent_name, itemKey, entry); + replaceNode(t.nodes, data.agent_name); }, agent_tool_start: (state, _data) => { const data = _data as unknown as AgentToolStartData; const itemKey = (_data as Record).item_key as string | undefined; - const entry: ActivityEntry = { - type: 'tool-start', - icon: '🔧', - label: 'tool', - text: data.tool_name, - detail: data.arguments || null, - }; - addActivity(state.nodes, data.agent_name, entry); - if (itemKey) { - addForEachItemActivity(state.nodes, data.agent_name, itemKey, entry); - } - replaceNode(state.nodes, data.agent_name); + const t = activeTarget(state, _data); + const entry: ActivityEntry = { type: 'tool-start', icon: '🔧', label: 'tool', text: data.tool_name, detail: data.arguments || null }; + addActivity(t.nodes, data.agent_name, entry); + if (itemKey) addForEachItemActivity(t.nodes, data.agent_name, itemKey, entry); + replaceNode(t.nodes, data.agent_name); }, agent_tool_complete: (state, _data) => { const data = _data as unknown as AgentToolCompleteData; const itemKey = (_data as Record).item_key as string | undefined; - const entry: ActivityEntry = { - type: 'tool-complete', - icon: '✓', - label: 'result', - text: data.tool_name || 'done', - detail: data.result || null, - }; - addActivity(state.nodes, data.agent_name, entry); - if (itemKey) { - addForEachItemActivity(state.nodes, data.agent_name, itemKey, entry); - } - replaceNode(state.nodes, data.agent_name); + const t = activeTarget(state, _data); + const entry: ActivityEntry = { type: 'tool-complete', icon: '✓', label: 'result', text: data.tool_name || 'done', detail: data.result || null }; + addActivity(t.nodes, data.agent_name, entry); + if (itemKey) addForEachItemActivity(t.nodes, data.agent_name, itemKey, entry); + replaceNode(t.nodes, data.agent_name); }, agent_turn_start: (state, _data) => { const data = _data as unknown as AgentTurnStartData; const itemKey = (_data as Record).item_key as string | undefined; - const entry: ActivityEntry = { - type: 'turn', - icon: '⏳', - label: 'turn', - text: `Turn ${data.turn ?? '?'}`, - }; - addActivity(state.nodes, data.agent_name, entry); - if (itemKey) { - addForEachItemActivity(state.nodes, data.agent_name, itemKey, entry); - } - replaceNode(state.nodes, data.agent_name); + const t = activeTarget(state, _data); + const entry: ActivityEntry = { type: 'turn', icon: '⏳', label: 'turn', text: `Turn ${data.turn ?? '?'}` }; + addActivity(t.nodes, data.agent_name, entry); + if (itemKey) addForEachItemActivity(t.nodes, data.agent_name, itemKey, entry); + replaceNode(t.nodes, data.agent_name); }, agent_message: (state, _data) => { const data = _data as unknown as AgentMessageData; - const nd = ensureNode(state.nodes, data.agent_name); + const t = activeTarget(state, _data); + const nd = ensureNode(t.nodes, data.agent_name); nd.latest_message = data.content; - replaceNode(state.nodes, data.agent_name); + replaceNode(t.nodes, data.agent_name); }, script_started: (state, _data, timestamp) => { const data = _data as { agent_name: string }; - const nd = ensureNode(state.nodes, data.agent_name); + const t = activeTarget(state, _data); + const nd = ensureNode(t.nodes, data.agent_name); nd.status = 'running'; nd.startedAt = timestamp ?? Date.now() / 1000; - replaceNode(state.nodes, data.agent_name); + replaceNode(t.nodes, data.agent_name); }, script_completed: (state, _data) => { const data = _data as unknown as ScriptCompletedData; - const nd = ensureNode(state.nodes, data.agent_name); + const t = activeTarget(state, _data); + const nd = ensureNode(t.nodes, data.agent_name); nd.status = 'completed'; - state.agentsCompleted++; + t.incrCompleted(); nd.elapsed = data.elapsed; nd.stdout = data.stdout; nd.stderr = data.stderr; nd.exit_code = data.exit_code; - replaceNode(state.nodes, data.agent_name); + replaceNode(t.nodes, data.agent_name); }, script_failed: (state, _data) => { const data = _data as unknown as ScriptFailedData; - const nd = ensureNode(state.nodes, data.agent_name); + const t = activeTarget(state, _data); + const nd = ensureNode(t.nodes, data.agent_name); nd.status = 'failed'; nd.elapsed = data.elapsed; nd.error_type = data.error_type; nd.error_message = data.message; - replaceNode(state.nodes, data.agent_name); + replaceNode(t.nodes, data.agent_name); }, gate_presented: (state, _data) => { const data = _data as unknown as GatePresentedData; - const nd = ensureNode(state.nodes, data.agent_name); + const t = activeTarget(state, _data); + const nd = ensureNode(t.nodes, data.agent_name); nd.status = 'waiting'; nd.options = data.options; nd.option_details = data.option_details; nd.prompt = data.prompt; - replaceNode(state.nodes, data.agent_name); + replaceNode(t.nodes, data.agent_name); }, gate_resolved: (state, _data) => { const data = _data as unknown as GateResolvedData; - const nd = ensureNode(state.nodes, data.agent_name); + const t = activeTarget(state, _data); + const nd = ensureNode(t.nodes, data.agent_name); nd.status = 'completed'; - state.agentsCompleted++; + t.incrCompleted(); nd.selected_option = data.selected_option; nd.route = data.route; nd.additional_input = data.additional_input; - replaceNode(state.nodes, data.agent_name); + replaceNode(t.nodes, data.agent_name); }, route_taken: (state, _data) => { const data = _data as unknown as RouteTakenData; - // Set edge highlight — the component will handle animation timing - state.highlightedEdges = [ - ...state.highlightedEdges.filter( - (e) => !(e.from === data.from_agent && e.to === data.to_agent) - ), - { from: data.from_agent, to: data.to_agent, state: 'taken' }, - ]; + const t = activeTarget(state, _data); + t.highlightedEdges.push({ from: data.from_agent, to: data.to_agent, state: 'taken' }); }, parallel_started: (state, _data) => { const data = _data as unknown as ParallelStartedData; - const nd = ensureNode(state.nodes, data.group_name, 'parallel_group'); + const t = activeTarget(state, _data); + const nd = ensureNode(t.nodes, data.group_name, 'parallel_group'); nd.status = 'running'; - if (state.groupProgress[data.group_name]) { - state.groupProgress[data.group_name]!.total = data.agents.length; - state.groupProgress[data.group_name]!.completed = 0; - state.groupProgress[data.group_name]!.failed = 0; + if (t.groupProgress[data.group_name]) { + t.groupProgress[data.group_name]!.total = data.agents.length; + t.groupProgress[data.group_name]!.completed = 0; + t.groupProgress[data.group_name]!.failed = 0; } - replaceNode(state.nodes, data.group_name); + replaceNode(t.nodes, data.group_name); }, parallel_agent_completed: (state, _data) => { const data = _data as unknown as ParallelAgentCompletedData; - if (state.groupProgress[data.group_name]) { - state.groupProgress[data.group_name]!.completed++; + const t = activeTarget(state, _data); + if (t.groupProgress[data.group_name]) { + t.groupProgress[data.group_name]!.completed++; } - const nd = ensureNode(state.nodes, data.agent_name); + const nd = ensureNode(t.nodes, data.agent_name); nd.status = 'completed'; nd.elapsed = data.elapsed; nd.model = data.model; nd.tokens = data.tokens; nd.cost_usd = data.cost_usd; - // Context window tracking nd.context_window_used = data.context_window_used; nd.context_window_max = data.context_window_max; if (data.context_window_used != null && data.context_window_max != null && data.context_window_max > 0) { nd.context_pct = Math.round((data.context_window_used / data.context_window_max) * 100); } - if (data.cost_usd) state.totalCost += data.cost_usd; - if (data.tokens) state.totalTokens += data.tokens; - replaceNode(state.nodes, data.agent_name); - replaceNode(state.nodes, data.group_name); + if (data.cost_usd) t.addCost(data.cost_usd); + if (data.tokens) t.addTokens(data.tokens); + replaceNode(t.nodes, data.agent_name); + replaceNode(t.nodes, data.group_name); }, parallel_agent_failed: (state, _data) => { const data = _data as unknown as ParallelAgentFailedData; - if (state.groupProgress[data.group_name]) { - state.groupProgress[data.group_name]!.failed++; + const t = activeTarget(state, _data); + if (t.groupProgress[data.group_name]) { + t.groupProgress[data.group_name]!.failed++; } - const nd = ensureNode(state.nodes, data.agent_name); + const nd = ensureNode(t.nodes, data.agent_name); nd.status = 'failed'; nd.elapsed = data.elapsed; nd.error_type = data.error_type; nd.error_message = data.message; - replaceNode(state.nodes, data.agent_name); - replaceNode(state.nodes, data.group_name); + replaceNode(t.nodes, data.agent_name); + replaceNode(t.nodes, data.group_name); }, parallel_completed: (state, _data) => { const data = _data as unknown as ParallelCompletedData; - state.agentsCompleted++; - const nd = ensureNode(state.nodes, data.group_name, 'parallel_group'); + const t = activeTarget(state, _data); + t.incrCompleted(); + const nd = ensureNode(t.nodes, data.group_name, 'parallel_group'); nd.status = data.failure_count === 0 ? 'completed' : 'failed'; - replaceNode(state.nodes, data.group_name); + replaceNode(t.nodes, data.group_name); }, for_each_started: (state, _data) => { const data = _data as unknown as ForEachStartedData; - const nd = ensureNode(state.nodes, data.group_name, 'for_each_group'); + const t = activeTarget(state, _data); + const nd = ensureNode(t.nodes, data.group_name, 'for_each_group'); nd.status = 'running'; nd.for_each_items = []; - if (state.groupProgress[data.group_name]) { - state.groupProgress[data.group_name]!.total = data.item_count; - state.groupProgress[data.group_name]!.completed = 0; - state.groupProgress[data.group_name]!.failed = 0; + if (t.groupProgress[data.group_name]) { + t.groupProgress[data.group_name]!.total = data.item_count; + t.groupProgress[data.group_name]!.completed = 0; + t.groupProgress[data.group_name]!.failed = 0; } - replaceNode(state.nodes, data.group_name); + replaceNode(t.nodes, data.group_name); }, for_each_item_started: (state, _data) => { const data = _data as unknown as ForEachItemStartedData; - const nd = ensureNode(state.nodes, data.group_name, 'for_each_group'); + const t = activeTarget(state, _data); + const nd = ensureNode(t.nodes, data.group_name, 'for_each_group'); if (!nd.for_each_items) nd.for_each_items = []; nd.for_each_items.push({ key: data.item_key ?? String(data.index), @@ -864,15 +1218,16 @@ const eventHandlers: Record { const data = _data as unknown as ForEachItemCompletedData; - if (state.groupProgress[data.group_name]) { - state.groupProgress[data.group_name]!.completed++; + const t = activeTarget(state, _data); + if (t.groupProgress[data.group_name]) { + t.groupProgress[data.group_name]!.completed++; } - const nd = ensureNode(state.nodes, data.group_name, 'for_each_group'); + const nd = ensureNode(t.nodes, data.group_name, 'for_each_group'); if (nd.for_each_items) { const itemKey = data.item_key ?? String(data.index); const item = nd.for_each_items.find((i) => i.key === itemKey); @@ -884,15 +1239,16 @@ const eventHandlers: Record { const data = _data as unknown as ForEachItemFailedData; - if (state.groupProgress[data.group_name]) { - state.groupProgress[data.group_name]!.failed++; + const t = activeTarget(state, _data); + if (t.groupProgress[data.group_name]) { + t.groupProgress[data.group_name]!.failed++; } - const nd = ensureNode(state.nodes, data.group_name, 'for_each_group'); + const nd = ensureNode(t.nodes, data.group_name, 'for_each_group'); if (nd.for_each_items) { const itemKey = data.item_key ?? String(data.index); const item = nd.for_each_items.find((i) => i.key === itemKey); @@ -903,62 +1259,241 @@ const eventHandlers: Record { const data = _data as unknown as ForEachCompletedData; - state.agentsCompleted++; - const nd = ensureNode(state.nodes, data.group_name, 'for_each_group'); + const t = activeTarget(state, _data); + t.incrCompleted(); + const nd = ensureNode(t.nodes, data.group_name, 'for_each_group'); nd.status = (data.failure_count ?? 0) === 0 ? 'completed' : 'failed'; nd.elapsed = data.elapsed; nd.success_count = data.success_count; nd.failure_count = data.failure_count; - replaceNode(state.nodes, data.group_name); + replaceNode(t.nodes, data.group_name); }, workflow_completed: (state, _data) => { - const data = _data as { output?: unknown }; - state.workflowStatus = 'completed'; - state.isPaused = false; - state.workflowOutput = data.output ?? null; - if (state.nodes['$end']) { - state.nodes['$end']!.status = 'completed'; - replaceNode(state.nodes, '$end'); - } - if (state.nodes['$start']) { - state.nodes['$start']!.status = 'completed'; - replaceNode(state.nodes, '$start'); + state.wfDepth = Math.max(0, state.wfDepth - 1); + if (state.wfDepth === 0) { + // Root workflow completed + const data = _data as { output?: unknown }; + state.workflowStatus = 'completed'; + state.isPaused = false; + state.workflowOutput = data.output ?? null; + if (state.nodes['$end']) { + state.nodes['$end']!.status = 'completed'; + replaceNode(state.nodes, '$end'); + } + if (state.nodes['$start']) { + state.nodes['$start']!.status = 'completed'; + replaceNode(state.nodes, '$start'); + } + state.highlightedEdges = []; + } else { + // Child workflow completed — locate via subworkflow_path (engine-supplied + // when running concurrently) so we don't depend on activeContextPath, + // which under concurrency may have been advanced past us by another + // sibling start. + const data = _data as { output?: unknown; subworkflow_path?: string[] }; + const ctx = data.subworkflow_path + ? resolveSlotPath(state.subworkflowContexts, data.subworkflow_path)?.ctx + : resolveContext(state.subworkflowContexts, state.activeContextPath); + if (ctx) { + ctx.status = 'completed'; + ctx.workflowOutput = data.output ?? null; + if (ctx.nodes['$end']) ctx.nodes['$end']!.status = 'completed'; + if (ctx.nodes['$start']) ctx.nodes['$start']!.status = 'completed'; + ctx.highlightedEdges = []; + } + // activeContextPath restoration is handled by the subsequent + // subworkflow_completed event (which carries parent_path). } - // Clear flowing-dot edge animations now that workflow is done - state.highlightedEdges = []; }, workflow_failed: (state, _data) => { - const data = _data as { agent_name?: string; error_type?: string; message?: string; elapsed_seconds?: number; timeout_seconds?: number; current_agent?: string }; - state.workflowStatus = 'failed'; - state.isPaused = false; - state.workflowFailedAgent = data.agent_name || null; - if (data.agent_name && state.nodes[data.agent_name]) { - state.nodes[data.agent_name]!.status = 'failed'; - replaceNode(state.nodes, data.agent_name); - // Highlight edges leading to the failed agent in red - for (const route of state.routes) { - if (route.to === data.agent_name) { - state.highlightedEdges = [ - ...state.highlightedEdges.filter( - (e) => !(e.from === route.from && e.to === route.to) - ), - { from: route.from, to: route.to, state: 'failed' }, - ]; + state.wfDepth = Math.max(0, state.wfDepth - 1); + const data = _data as { agent_name?: string; error_type?: string; message?: string; elapsed_seconds?: number; timeout_seconds?: number; current_agent?: string; subworkflow_path?: string[] }; + if (state.wfDepth === 0) { + // Root workflow failed + state.workflowStatus = 'failed'; + state.isPaused = false; + state.workflowFailedAgent = data.agent_name || null; + if (data.agent_name && state.nodes[data.agent_name]) { + state.nodes[data.agent_name]!.status = 'failed'; + replaceNode(state.nodes, data.agent_name); + for (const route of state.routes) { + if (route.to === data.agent_name) { + state.highlightedEdges.push({ from: route.from, to: route.to, state: 'failed' }); + } } } + state.workflowFailure = { error_type: data.error_type, message: data.message, elapsed_seconds: data.elapsed_seconds, timeout_seconds: data.timeout_seconds, current_agent: data.current_agent }; + if (state.nodes['$start']) { + state.nodes['$start']!.status = 'completed'; + replaceNode(state.nodes, '$start'); + } + } else { + const ctx = data.subworkflow_path + ? resolveSlotPath(state.subworkflowContexts, data.subworkflow_path)?.ctx + : resolveContext(state.subworkflowContexts, state.activeContextPath); + if (ctx) { + ctx.status = 'failed'; + ctx.workflowFailure = { error_type: data.error_type, message: data.message }; + } + // activeContextPath restoration is handled by subworkflow_failed. } - state.workflowFailure = { error_type: data.error_type, message: data.message, elapsed_seconds: data.elapsed_seconds, timeout_seconds: data.timeout_seconds, current_agent: data.current_agent }; - if (state.nodes['$start']) { - state.nodes['$start']!.status = 'completed'; - replaceNode(state.nodes, '$start'); + }, + + // --- Subworkflow lifecycle --- + + subworkflow_started: (state, _data) => { + const data = _data as unknown as SubworkflowStartedData; + // Slot key disambiguates concurrent for_each iterations of the same + // group. Engines emit it explicitly; older engines fall back to + // composing it here from agent_name + item_key. + const slotKey = + data.slot_key ?? + (data.item_key != null ? `${data.agent_name}[${data.item_key}]` : data.agent_name); + + const ctx = createSubworkflowContext( + data.agent_name, + data.iteration ?? 1, + data.workflow, + slotKey, + ); + + // Resolve parent strictly from engine-supplied parent_path when present, + // else fall back to the legacy "current activeContextPath is parent" + // heuristic (correct only for serial sub-workflows). + let parentIndexPath: number[]; + if (data.parent_path !== undefined) { + const resolved = resolveSlotPath(state.subworkflowContexts, data.parent_path); + if (!resolved) return; // out-of-order arrival; tolerate + parentIndexPath = resolved.indexPath; + } else { + parentIndexPath = state.activeContextPath; + } + + // Capture sticky-follow intent BEFORE mutating activeContextPath. + const wasAtLiveEdge = + state.viewContextPath.length === state.activeContextPath.length && + state.viewContextPath.every((v, i) => v === state.activeContextPath[i]); + + let newActivePath: number[]; + if (parentIndexPath.length === 0) { + state.subworkflowContexts.push(ctx); + newActivePath = [state.subworkflowContexts.length - 1]; + } else { + const parent = resolveContext(state.subworkflowContexts, parentIndexPath); + if (!parent) return; + parent.children.push(ctx); + newActivePath = [...parentIndexPath, parent.children.length - 1]; + } + state.activeContextPath = newActivePath; + if (wasAtLiveEdge) { + // Advance the user's view along with the engine — they were following + // the live edge, so a new gate inside this child should be reachable. + state.viewContextPath = newActivePath; + } + + // Mark the parent-side agent node as running so the graph reflects that + // a sub-workflow is in flight. + if (parentIndexPath.length === 0) { + const nd = state.nodes[data.agent_name]; + if (nd) { + nd.status = 'running'; + replaceNode(state.nodes, data.agent_name); + } + } else { + const parentCtx = resolveContext(state.subworkflowContexts, parentIndexPath); + if (parentCtx) { + const nd = parentCtx.nodes[data.agent_name]; + if (nd) { + nd.status = 'running'; + replaceNode(parentCtx.nodes, data.agent_name); + } + } + } + }, + + subworkflow_completed: (state, _data) => { + const data = _data as unknown as SubworkflowCompletedData; + // Resolve the parent context (the one that owns the agent node) by + // engine-supplied parent_path so concurrent completions land correctly. + let parentIndexPath: number[]; + if (data.parent_path !== undefined) { + const resolved = resolveSlotPath(state.subworkflowContexts, data.parent_path); + // Mirror subworkflow_started: bail on resolution miss instead of + // silently falling back to root. A null result here means the event + // arrived before its sibling subworkflow_started or the path is + // inconsistent. Falling back to [] would stamp 'completed' on a + // same-named root agent and corrupt activeContextPath below. + if (!resolved) return; + parentIndexPath = resolved.indexPath; + } else { + parentIndexPath = state.activeContextPath; + } + + const targetNodes = + parentIndexPath.length === 0 + ? state.nodes + : resolveContext(state.subworkflowContexts, parentIndexPath)?.nodes; + if (targetNodes) { + const nd = targetNodes[data.agent_name]; + if (nd) { + // for_each-of-workflow emits one subworkflow_completed per iteration + // but the parent agent node is the group, completed by for_each_completed. + // Avoid double-incrementing or overwriting the group's status here. + if (data.item_key == null) { + nd.status = 'completed'; + nd.elapsed = data.elapsed; + if (parentIndexPath.length === 0) { + state.agentsCompleted++; + } else { + const parentCtx = resolveContext(state.subworkflowContexts, parentIndexPath); + if (parentCtx) parentCtx.agentsCompleted++; + } + } + replaceNode(targetNodes, data.agent_name); + } + } + + // Restore activeContextPath to the parent so the next root-level events + // route correctly. + state.activeContextPath = parentIndexPath; + }, + + subworkflow_failed: (state, _data) => { + const data = _data as unknown as SubworkflowFailedData; + let parentIndexPath: number[]; + if (data.parent_path !== undefined) { + const resolved = resolveSlotPath(state.subworkflowContexts, data.parent_path); + // See subworkflow_completed: bail on resolution miss to avoid + // stamping 'failed' on an unrelated root node and clobbering + // activeContextPath. + if (!resolved) return; + parentIndexPath = resolved.indexPath; + } else { + parentIndexPath = state.activeContextPath; + } + + const targetNodes = + parentIndexPath.length === 0 + ? state.nodes + : resolveContext(state.subworkflowContexts, parentIndexPath)?.nodes; + if (targetNodes) { + const nd = targetNodes[data.agent_name]; + if (nd && data.item_key == null) { + nd.status = 'failed'; + nd.elapsed = data.elapsed; + nd.error_type = data.error_type; + nd.error_message = data.message; + replaceNode(targetNodes, data.agent_name); + } } + state.activeContextPath = parentIndexPath; }, checkpoint_saved: (state, _data) => { diff --git a/src/conductor/web/frontend/src/types/events.ts b/src/conductor/web/frontend/src/types/events.ts index 85da622..e90544e 100644 --- a/src/conductor/web/frontend/src/types/events.ts +++ b/src/conductor/web/frontend/src/types/events.ts @@ -32,6 +32,9 @@ export type EventType = | 'for_each_item_completed' | 'for_each_item_failed' | 'for_each_completed' + | 'subworkflow_started' + | 'subworkflow_completed' + | 'subworkflow_failed' | 'workflow_completed' | 'workflow_failed' | 'checkpoint_saved' @@ -52,12 +55,16 @@ export interface WorkflowStartedData { export interface WorkflowCompletedData { elapsed?: number; output?: unknown; + /** Slot-key path of the completing engine (present only at depth > 0). */ + subworkflow_path?: string[]; } export interface WorkflowFailedData { agent_name?: string; error_type?: string; message?: string; + /** Slot-key path of the failing engine (present only at depth > 0). */ + subworkflow_path?: string[]; } // --- Agent lifecycle --- @@ -256,3 +263,36 @@ export interface AgentPausedData { export interface AgentResumedData { agent_name: string; } + +// --- Subworkflow lifecycle --- + +export interface SubworkflowStartedData { + agent_name: string; + iteration?: number; + workflow: string; + /** Slot-key path of the parent context in the recursive sub-workflow tree. */ + parent_path?: string[]; + /** Slot identifier for this child context (e.g. "agent_name" or "group[2]"). */ + slot_key?: string; + /** for_each item key (when this start was emitted by a for_each iteration). */ + item_key?: string; +} + +export interface SubworkflowCompletedData { + agent_name: string; + elapsed?: number; + output?: unknown; + parent_path?: string[]; + slot_key?: string; + item_key?: string; +} + +export interface SubworkflowFailedData { + agent_name: string; + elapsed?: number; + error_type?: string; + message?: string; + parent_path?: string[]; + slot_key?: string; + item_key?: string; +} diff --git a/src/conductor/web/frontend/tsconfig.tsbuildinfo b/src/conductor/web/frontend/tsconfig.tsbuildinfo index 3efb84c..98b5bc3 100644 --- a/src/conductor/web/frontend/tsconfig.tsbuildinfo +++ b/src/conductor/web/frontend/tsconfig.tsbuildinfo @@ -1 +1 @@ -{"root":["./src/app.tsx","./src/main.tsx","./src/components/detail/activitystream.tsx","./src/components/detail/agentdetail.tsx","./src/components/detail/detailpanel.tsx","./src/components/detail/gatedetail.tsx","./src/components/detail/groupdetail.tsx","./src/components/detail/metadatagrid.tsx","./src/components/detail/outputviewer.tsx","./src/components/detail/scriptdetail.tsx","./src/components/graph/agentnode.tsx","./src/components/graph/animatededge.tsx","./src/components/graph/endnode.tsx","./src/components/graph/gatenode.tsx","./src/components/graph/groupnode.tsx","./src/components/graph/nodetooltip.tsx","./src/components/graph/scriptnode.tsx","./src/components/graph/startnode.tsx","./src/components/graph/workflowgraph.tsx","./src/components/graph/graph-layout.ts","./src/components/layout/errorbanner.tsx","./src/components/layout/header.tsx","./src/components/layout/outputpane.tsx","./src/components/layout/resizablelayout.tsx","./src/components/layout/statusbar.tsx","./src/hooks/use-elapsed-timer.ts","./src/hooks/use-websocket.ts","./src/lib/constants.ts","./src/lib/utils.ts","./src/stores/workflow-store.ts","./src/types/events.ts"],"version":"5.9.3"} \ No newline at end of file +{"root":["./src/app.tsx","./src/main.tsx","./src/components/detail/activitystream.tsx","./src/components/detail/agentdetail.tsx","./src/components/detail/detailpanel.tsx","./src/components/detail/gatedetail.tsx","./src/components/detail/groupdetail.tsx","./src/components/detail/metadatagrid.tsx","./src/components/detail/outputviewer.tsx","./src/components/detail/scriptdetail.tsx","./src/components/detail/subworkflowdetail.tsx","./src/components/graph/agentnode.tsx","./src/components/graph/animatededge.tsx","./src/components/graph/egressnode.tsx","./src/components/graph/endnode.tsx","./src/components/graph/gatenode.tsx","./src/components/graph/groupnode.tsx","./src/components/graph/ingressnode.tsx","./src/components/graph/nodetooltip.tsx","./src/components/graph/scriptnode.tsx","./src/components/graph/startnode.tsx","./src/components/graph/workflowgraph.tsx","./src/components/graph/workflownode.tsx","./src/components/graph/graph-layout.ts","./src/components/layout/breadcrumbbar.tsx","./src/components/layout/errorbanner.tsx","./src/components/layout/header.tsx","./src/components/layout/outputpane.tsx","./src/components/layout/replaybar.tsx","./src/components/layout/resizablelayout.tsx","./src/components/layout/statusbar.tsx","./src/components/layout/yamlviewer.tsx","./src/hooks/use-deep-link.ts","./src/hooks/use-elapsed-timer.ts","./src/hooks/use-replay.ts","./src/hooks/use-viewed-context.ts","./src/hooks/use-websocket.ts","./src/lib/constants.ts","./src/lib/utils.ts","./src/stores/workflow-store.ts","./src/types/events.ts"],"errors":true,"version":"5.9.3"} \ No newline at end of file diff --git a/src/conductor/web/server.py b/src/conductor/web/server.py index 1531d1f..75f86f1 100644 --- a/src/conductor/web/server.py +++ b/src/conductor/web/server.py @@ -106,6 +106,7 @@ def __init__( self._serve_task: asyncio.Task[None] | None = None self._broadcast_task: asyncio.Task[None] | None = None self._actual_port: int | None = None + self._original_exception_handler: Any = None # Build FastAPI app self._app = self._create_app() @@ -392,12 +393,82 @@ async def wait_for_stop(self) -> None: # Server lifecycle # ------------------------------------------------------------------ + def _is_proactor_shutdown_race(self, context: dict[str, Any]) -> bool: + """Check if an exception context matches the proactor accept-loop race. + + On Windows with Python 3.14+, the proactor event loop's accept + callback can fire after ``Server.close()`` sets ``_sockets = None``, + causing ``AssertionError`` in ``base_events.py:_attach``. This is + benign during shutdown — the server is already closing and does not + need new connections. + + Returns True only when all of: + - The exception is ``AssertionError`` + - The uvicorn server is in shutdown state (``should_exit`` is set) + - The traceback (if available) originates from asyncio internals + """ + exc = context.get("exception") + if not isinstance(exc, AssertionError): + return False + if self._server is None or not getattr(self._server, "should_exit", False): + return False + # Extra safety: check traceback originates from asyncio, not user code + import traceback as tb_mod + + tb = exc.__traceback__ + if tb is not None: + frames = tb_mod.extract_tb(tb) + if frames and "asyncio" in frames[-1].filename: + return True + # If no traceback but server is shutting down, still suppress — + # the only known source of AssertionError during shutdown is this race. + return True + + def _loop_exception_handler( + self, loop: asyncio.AbstractEventLoop, context: dict[str, Any] + ) -> None: + """Custom event-loop exception handler that suppresses the proactor race.""" + if self._is_proactor_shutdown_race(context): + logger.debug( + "Suppressed proactor accept-loop race during server shutdown: %s", + context.get("message", ""), + ) + return + # Delegate to the original handler (or the default) + if self._original_exception_handler is not None: + self._original_exception_handler(loop, context) + else: + loop.default_exception_handler(context) + + async def _guarded_serve(self) -> None: + """Run ``uvicorn.Server.serve()`` with a guard for the proactor race. + + If ``serve()`` itself raises ``AssertionError`` during shutdown + (rather than the exception surfacing through a callback), this + wrapper suppresses it. + """ + try: + await self._server.serve() + except AssertionError: + if self._server is not None and getattr(self._server, "should_exit", False): + logger.debug( + "Suppressed proactor accept-loop AssertionError during server shutdown" + ) + else: + raise + async def start(self) -> None: """Start the uvicorn server as an asyncio task. The broadcaster is started automatically via the FastAPI lifespan. Waits until the server socket is bound and the actual port is known before returning. + + On Windows with Python 3.14+, installs a custom event-loop + exception handler to suppress the proactor accept-loop race + (``AssertionError: self._sockets is not None``) that can fire + when a new connection is accepted after ``Server.close()`` sets + ``_sockets = None`` during shutdown. """ import uvicorn @@ -409,8 +480,15 @@ async def start(self) -> None: ) self._server = uvicorn.Server(config) + # Install a guarded exception handler to suppress the proactor + # accept-race AssertionError that occurs on Windows (Python 3.14+) + # when the server is shutting down. + loop = asyncio.get_running_loop() + self._original_exception_handler = loop.get_exception_handler() + loop.set_exception_handler(self._loop_exception_handler) + # Launch server (broadcaster starts via app lifespan) - self._serve_task = asyncio.create_task(self._server.serve()) + self._serve_task = asyncio.create_task(self._guarded_serve()) # Wait for server to bind — poll until .started is set while not self._server.started: @@ -453,6 +531,13 @@ async def stop(self) -> None: await self._serve_task self._serve_task = None + # Restore the original event-loop exception handler + try: + loop = asyncio.get_running_loop() + loop.set_exception_handler(self._original_exception_handler) + except RuntimeError: + pass # No running loop (e.g. during interpreter shutdown) + # Close remaining WebSocket connections for ws in list(self._connections): with contextlib.suppress(Exception): diff --git a/src/conductor/web/static/assets/index-Cq5A-RoD.js b/src/conductor/web/static/assets/index-Cq5A-RoD.js deleted file mode 100644 index e332955..0000000 --- a/src/conductor/web/static/assets/index-Cq5A-RoD.js +++ /dev/null @@ -1,306 +0,0 @@ -var T2=Object.defineProperty;var z2=(e,n,i)=>n in e?T2(e,n,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[n]=i;var Nt=(e,n,i)=>z2(e,typeof n!="symbol"?n+"":n,i);function A2(e,n){for(var i=0;il[o]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}(function(){const n=document.createElement("link").relList;if(n&&n.supports&&n.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))l(o);new MutationObserver(o=>{for(const s of o)if(s.type==="childList")for(const u of s.addedNodes)u.tagName==="LINK"&&u.rel==="modulepreload"&&l(u)}).observe(document,{childList:!0,subtree:!0});function i(o){const s={};return o.integrity&&(s.integrity=o.integrity),o.referrerPolicy&&(s.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?s.credentials="include":o.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function l(o){if(o.ep)return;o.ep=!0;const s=i(o);fetch(o.href,s)}})();function Lo(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var Hd={exports:{}},to={};/** - * @license React - * react-jsx-runtime.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 cx;function M2(){if(cx)return to;cx=1;var e=Symbol.for("react.transitional.element"),n=Symbol.for("react.fragment");function i(l,o,s){var u=null;if(s!==void 0&&(u=""+s),o.key!==void 0&&(u=""+o.key),"key"in o){s={};for(var f in o)f!=="key"&&(s[f]=o[f])}else s=o;return o=s.ref,{$$typeof:e,type:l,key:u,ref:o!==void 0?o:null,props:s}}return to.Fragment=n,to.jsx=i,to.jsxs=i,to}var fx;function j2(){return fx||(fx=1,Hd.exports=M2()),Hd.exports}var b=j2(),Bd={exports:{}},ze={};/** - * @license React - * react.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 dx;function O2(){if(dx)return ze;dx=1;var e=Symbol.for("react.transitional.element"),n=Symbol.for("react.portal"),i=Symbol.for("react.fragment"),l=Symbol.for("react.strict_mode"),o=Symbol.for("react.profiler"),s=Symbol.for("react.consumer"),u=Symbol.for("react.context"),f=Symbol.for("react.forward_ref"),d=Symbol.for("react.suspense"),h=Symbol.for("react.memo"),m=Symbol.for("react.lazy"),p=Symbol.for("react.activity"),y=Symbol.iterator;function v(U){return U===null||typeof U!="object"?null:(U=y&&U[y]||U["@@iterator"],typeof U=="function"?U:null)}var w={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},k=Object.assign,S={};function _(U,P,N){this.props=U,this.context=P,this.refs=S,this.updater=N||w}_.prototype.isReactComponent={},_.prototype.setState=function(U,P){if(typeof U!="object"&&typeof U!="function"&&U!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,U,P,"setState")},_.prototype.forceUpdate=function(U){this.updater.enqueueForceUpdate(this,U,"forceUpdate")};function z(){}z.prototype=_.prototype;function E(U,P,N){this.props=U,this.context=P,this.refs=S,this.updater=N||w}var A=E.prototype=new z;A.constructor=E,k(A,_.prototype),A.isPureReactComponent=!0;var B=Array.isArray;function T(){}var q={H:null,A:null,T:null,S:null},M=Object.prototype.hasOwnProperty;function D(U,P,N){var Y=N.ref;return{$$typeof:e,type:U,key:P,ref:Y!==void 0?Y:null,props:N}}function X(U,P){return D(U.type,P,U.props)}function H(U){return typeof U=="object"&&U!==null&&U.$$typeof===e}function I(U){var P={"=":"=0",":":"=2"};return"$"+U.replace(/[=:]/g,function(N){return P[N]})}var ee=/\/+/g;function L(U,P){return typeof U=="object"&&U!==null&&U.key!=null?I(""+U.key):P.toString(36)}function G(U){switch(U.status){case"fulfilled":return U.value;case"rejected":throw U.reason;default:switch(typeof U.status=="string"?U.then(T,T):(U.status="pending",U.then(function(P){U.status==="pending"&&(U.status="fulfilled",U.value=P)},function(P){U.status==="pending"&&(U.status="rejected",U.reason=P)})),U.status){case"fulfilled":return U.value;case"rejected":throw U.reason}}throw U}function R(U,P,N,Y,F){var K=typeof U;(K==="undefined"||K==="boolean")&&(U=null);var ne=!1;if(U===null)ne=!0;else switch(K){case"bigint":case"string":case"number":ne=!0;break;case"object":switch(U.$$typeof){case e:case n:ne=!0;break;case m:return ne=U._init,R(ne(U._payload),P,N,Y,F)}}if(ne)return F=F(U),ne=Y===""?"."+L(U,0):Y,B(F)?(N="",ne!=null&&(N=ne.replace(ee,"$&/")+"/"),R(F,P,N,"",function(ye){return ye})):F!=null&&(H(F)&&(F=X(F,N+(F.key==null||U&&U.key===F.key?"":(""+F.key).replace(ee,"$&/")+"/")+ne)),P.push(F)),1;ne=0;var re=Y===""?".":Y+":";if(B(U))for(var se=0;se>>1,j=R[J];if(0>>1;Jo(N,Z))Yo(F,N)?(R[J]=F,R[Y]=Z,J=Y):(R[J]=N,R[P]=Z,J=P);else if(Yo(F,Z))R[J]=F,R[Y]=Z,J=Y;else break e}}return $}function o(R,$){var Z=R.sortIndex-$.sortIndex;return Z!==0?Z:R.id-$.id}if(e.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var s=performance;e.unstable_now=function(){return s.now()}}else{var u=Date,f=u.now();e.unstable_now=function(){return u.now()-f}}var d=[],h=[],m=1,p=null,y=3,v=!1,w=!1,k=!1,S=!1,_=typeof setTimeout=="function"?setTimeout:null,z=typeof clearTimeout=="function"?clearTimeout:null,E=typeof setImmediate<"u"?setImmediate:null;function A(R){for(var $=i(h);$!==null;){if($.callback===null)l(h);else if($.startTime<=R)l(h),$.sortIndex=$.expirationTime,n(d,$);else break;$=i(h)}}function B(R){if(k=!1,A(R),!w)if(i(d)!==null)w=!0,T||(T=!0,I());else{var $=i(h);$!==null&&G(B,$.startTime-R)}}var T=!1,q=-1,M=5,D=-1;function X(){return S?!0:!(e.unstable_now()-DR&&X());){var J=p.callback;if(typeof J=="function"){p.callback=null,y=p.priorityLevel;var j=J(p.expirationTime<=R);if(R=e.unstable_now(),typeof j=="function"){p.callback=j,A(R),$=!0;break t}p===i(d)&&l(d),A(R)}else l(d);p=i(d)}if(p!==null)$=!0;else{var U=i(h);U!==null&&G(B,U.startTime-R),$=!1}}break e}finally{p=null,y=Z,v=!1}$=void 0}}finally{$?I():T=!1}}}var I;if(typeof E=="function")I=function(){E(H)};else if(typeof MessageChannel<"u"){var ee=new MessageChannel,L=ee.port2;ee.port1.onmessage=H,I=function(){L.postMessage(null)}}else I=function(){_(H,0)};function G(R,$){q=_(function(){R(e.unstable_now())},$)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(R){R.callback=null},e.unstable_forceFrameRate=function(R){0>R||125J?(R.sortIndex=Z,n(h,R),i(d)===null&&R===i(h)&&(k?(z(q),q=-1):k=!0,G(B,Z-J))):(R.sortIndex=j,n(d,R),w||v||(w=!0,T||(T=!0,I()))),R},e.unstable_shouldYield=X,e.unstable_wrapCallback=function(R){var $=y;return function(){var Z=y;y=$;try{return R.apply(this,arguments)}finally{y=Z}}}})(Id)),Id}var mx;function L2(){return mx||(mx=1,Ud.exports=D2()),Ud.exports}var Vd={exports:{}},Yt={};/** - * @license React - * react-dom.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 gx;function H2(){if(gx)return Yt;gx=1;var e=Ho();function n(d){var h="https://react.dev/errors/"+d;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(n){console.error(n)}}return e(),Vd.exports=H2(),Vd.exports}/** - * @license React - * react-dom-client.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 xx;function B2(){if(xx)return no;xx=1;var e=L2(),n=Ho(),i=Eb();function l(t){var r="https://react.dev/errors/"+t;if(1j||(t.current=J[j],J[j]=null,j--)}function N(t,r){j++,J[j]=t.current,t.current=r}var Y=U(null),F=U(null),K=U(null),ne=U(null);function re(t,r){switch(N(K,r),N(F,t),N(Y,null),r.nodeType){case 9:case 11:t=(t=r.documentElement)&&(t=t.namespaceURI)?Oy(t):0;break;default:if(t=r.tagName,r=r.namespaceURI)r=Oy(r),t=Ry(r,t);else switch(t){case"svg":t=1;break;case"math":t=2;break;default:t=0}}P(Y),N(Y,t)}function se(){P(Y),P(F),P(K)}function ye(t){t.memoizedState!==null&&N(ne,t);var r=Y.current,a=Ry(r,t.type);r!==a&&(N(F,t),N(Y,a))}function ve(t){F.current===t&&(P(Y),P(F)),ne.current===t&&(P(ne),Ka._currentValue=Z)}var xe,pe;function _e(t){if(xe===void 0)try{throw Error()}catch(a){var r=a.stack.trim().match(/\n( *(at )?)/);xe=r&&r[1]||"",pe=-1)":-1g||Q[c]!==le[g]){var ce=` -`+Q[c].replace(" at new "," at ");return t.displayName&&ce.includes("")&&(ce=ce.replace("",t.displayName)),ce}while(1<=c&&0<=g);break}}}finally{Me=!1,Error.prepareStackTrace=a}return(a=t?t.displayName||t.name:"")?_e(a):""}function st(t,r){switch(t.tag){case 26:case 27:case 5:return _e(t.type);case 16:return _e("Lazy");case 13:return t.child!==r&&r!==null?_e("Suspense Fallback"):_e("Suspense");case 19:return _e("SuspenseList");case 0:case 15:return Ce(t.type,!1);case 11:return Ce(t.type.render,!1);case 1:return Ce(t.type,!0);case 31:return _e("Activity");default:return""}}function We(t){try{var r="",a=null;do r+=st(t,a),a=t,t=t.return;while(t);return r}catch(c){return` -Error generating stack: `+c.message+` -`+c.stack}}var zt=Object.prototype.hasOwnProperty,Ut=e.unstable_scheduleCallback,Rt=e.unstable_cancelCallback,wn=e.unstable_shouldYield,Mn=e.unstable_requestPaint,At=e.unstable_now,Mr=e.unstable_getCurrentPriorityLevel,ue=e.unstable_ImmediatePriority,ge=e.unstable_UserBlockingPriority,Ne=e.unstable_NormalPriority,De=e.unstable_LowPriority,Ve=e.unstable_IdlePriority,$t=e.log,jn=e.unstable_setDisableYieldValue,Dt=null,yt=null;function It(t){if(typeof $t=="function"&&jn(t),yt&&typeof yt.setStrictMode=="function")try{yt.setStrictMode(Dt,t)}catch{}}var Ze=Math.clz32?Math.clz32:Ec,Gn=Math.log,sn=Math.LN2;function Ec(t){return t>>>=0,t===0?32:31-(Gn(t)/sn|0)|0}var Zi=256,Ki=262144,Ji=4194304;function ir(t){var r=t&42;if(r!==0)return r;switch(t&-t){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:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return t&261888;case 262144:case 524288:case 1048576:case 2097152:return t&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return t&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return t}}function Wi(t,r,a){var c=t.pendingLanes;if(c===0)return 0;var g=0,x=t.suspendedLanes,C=t.pingedLanes;t=t.warmLanes;var O=c&134217727;return O!==0?(c=O&~x,c!==0?g=ir(c):(C&=O,C!==0?g=ir(C):a||(a=O&~t,a!==0&&(g=ir(a))))):(O=c&~x,O!==0?g=ir(O):C!==0?g=ir(C):a||(a=c&~t,a!==0&&(g=ir(a)))),g===0?0:r!==0&&r!==g&&(r&x)===0&&(x=g&-g,a=r&-r,x>=a||x===32&&(a&4194048)!==0)?r:g}function hi(t,r){return(t.pendingLanes&~(t.suspendedLanes&~t.pingedLanes)&r)===0}function Nc(t,r){switch(t){case 1:case 2:case 4:case 8:case 64:return r+250;case 16:case 32: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 r+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function Qo(){var t=Ji;return Ji<<=1,(Ji&62914560)===0&&(Ji=4194304),t}function sa(t){for(var r=[],a=0;31>a;a++)r.push(t);return r}function pi(t,r){t.pendingLanes|=r,r!==268435456&&(t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0)}function kc(t,r,a,c,g,x){var C=t.pendingLanes;t.pendingLanes=a,t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0,t.expiredLanes&=a,t.entangledLanes&=a,t.errorRecoveryDisabledLanes&=a,t.shellSuspendCounter=0;var O=t.entanglements,Q=t.expirationTimes,le=t.hiddenUpdates;for(a=C&~a;0"u")return null;try{return t.activeElement||t.body}catch{return t.body}}var Mc=/[\n"\\]/g;function Ft(t){return t.replace(Mc,function(r){return"\\"+r.charCodeAt(0).toString(16)+" "})}function yi(t,r,a,c,g,x,C,O){t.name="",C!=null&&typeof C!="function"&&typeof C!="symbol"&&typeof C!="boolean"?t.type=C:t.removeAttribute("type"),r!=null?C==="number"?(r===0&&t.value===""||t.value!=r)&&(t.value=""+Pt(r)):t.value!==""+Pt(r)&&(t.value=""+Pt(r)):C!=="submit"&&C!=="reset"||t.removeAttribute("value"),r!=null?ha(t,C,Pt(r)):a!=null?ha(t,C,Pt(a)):c!=null&&t.removeAttribute("value"),g==null&&x!=null&&(t.defaultChecked=!!x),g!=null&&(t.checked=g&&typeof g!="function"&&typeof g!="symbol"),O!=null&&typeof O!="function"&&typeof O!="symbol"&&typeof O!="boolean"?t.name=""+Pt(O):t.removeAttribute("name")}function ss(t,r,a,c,g,x,C,O){if(x!=null&&typeof x!="function"&&typeof x!="symbol"&&typeof x!="boolean"&&(t.type=x),r!=null||a!=null){if(!(x!=="submit"&&x!=="reset"||r!=null)){Hr(t);return}a=a!=null?""+Pt(a):"",r=r!=null?""+Pt(r):a,O||r===t.value||(t.value=r),t.defaultValue=r}c=c??g,c=typeof c!="function"&&typeof c!="symbol"&&!!c,t.checked=O?t.checked:!!c,t.defaultChecked=!!c,C!=null&&typeof C!="function"&&typeof C!="symbol"&&typeof C!="boolean"&&(t.name=C),Hr(t)}function ha(t,r,a){r==="number"&&gi(t.ownerDocument)===t||t.defaultValue===""+a||(t.defaultValue=""+a)}function or(t,r,a,c){if(t=t.options,r){r={};for(var g=0;g"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Lc=!1;if(ur)try{var ma={};Object.defineProperty(ma,"passive",{get:function(){Lc=!0}}),window.addEventListener("test",ma,ma),window.removeEventListener("test",ma,ma)}catch{Lc=!1}var Br=null,Hc=null,cs=null;function Rm(){if(cs)return cs;var t,r=Hc,a=r.length,c,g="value"in Br?Br.value:Br.textContent,x=g.length;for(t=0;t=xa),Um=" ",Im=!1;function Vm(t,r){switch(t){case"keyup":return Z_.indexOf(r.keyCode)!==-1;case"keydown":return r.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Ym(t){return t=t.detail,typeof t=="object"&&"data"in t?t.data:null}var al=!1;function J_(t,r){switch(t){case"compositionend":return Ym(r);case"keypress":return r.which!==32?null:(Im=!0,Um);case"textInput":return t=r.data,t===Um&&Im?null:t;default:return null}}function W_(t,r){if(al)return t==="compositionend"||!Vc&&Vm(t,r)?(t=Rm(),cs=Hc=Br=null,al=!1,t):null;switch(t){case"paste":return null;case"keypress":if(!(r.ctrlKey||r.altKey||r.metaKey)||r.ctrlKey&&r.altKey){if(r.char&&1=r)return{node:a,offset:r-t};t=c}e:{for(;a;){if(a.nextSibling){a=a.nextSibling;break e}a=a.parentNode}a=void 0}a=Km(a)}}function Wm(t,r){return t&&r?t===r?!0:t&&t.nodeType===3?!1:r&&r.nodeType===3?Wm(t,r.parentNode):"contains"in t?t.contains(r):t.compareDocumentPosition?!!(t.compareDocumentPosition(r)&16):!1:!1}function eg(t){t=t!=null&&t.ownerDocument!=null&&t.ownerDocument.defaultView!=null?t.ownerDocument.defaultView:window;for(var r=gi(t.document);r instanceof t.HTMLIFrameElement;){try{var a=typeof r.contentWindow.location.href=="string"}catch{a=!1}if(a)t=r.contentWindow;else break;r=gi(t.document)}return r}function $c(t){var r=t&&t.nodeName&&t.nodeName.toLowerCase();return r&&(r==="input"&&(t.type==="text"||t.type==="search"||t.type==="tel"||t.type==="url"||t.type==="password")||r==="textarea"||t.contentEditable==="true")}var oE=ur&&"documentMode"in document&&11>=document.documentMode,ol=null,Xc=null,Sa=null,Pc=!1;function tg(t,r,a){var c=a.window===a?a.document:a.nodeType===9?a:a.ownerDocument;Pc||ol==null||ol!==gi(c)||(c=ol,"selectionStart"in c&&$c(c)?c={start:c.selectionStart,end:c.selectionEnd}:(c=(c.ownerDocument&&c.ownerDocument.defaultView||window).getSelection(),c={anchorNode:c.anchorNode,anchorOffset:c.anchorOffset,focusNode:c.focusNode,focusOffset:c.focusOffset}),Sa&&wa(Sa,c)||(Sa=c,c=ru(Xc,"onSelect"),0>=C,g-=C,Xn=1<<32-Ze(r)+g|a<je?(qe=Se,Se=null):qe=Se.sibling;var $e=ae(te,Se,ie[je],fe);if($e===null){Se===null&&(Se=qe);break}t&&Se&&$e.alternate===null&&r(te,Se),W=x($e,W,je),Ge===null?Ee=$e:Ge.sibling=$e,Ge=$e,Se=qe}if(je===ie.length)return a(te,Se),Ue&&fr(te,je),Ee;if(Se===null){for(;jeje?(qe=Se,Se=null):qe=Se.sibling;var ai=ae(te,Se,$e.value,fe);if(ai===null){Se===null&&(Se=qe);break}t&&Se&&ai.alternate===null&&r(te,Se),W=x(ai,W,je),Ge===null?Ee=ai:Ge.sibling=ai,Ge=ai,Se=qe}if($e.done)return a(te,Se),Ue&&fr(te,je),Ee;if(Se===null){for(;!$e.done;je++,$e=ie.next())$e=de(te,$e.value,fe),$e!==null&&(W=x($e,W,je),Ge===null?Ee=$e:Ge.sibling=$e,Ge=$e);return Ue&&fr(te,je),Ee}for(Se=c(Se);!$e.done;je++,$e=ie.next())$e=oe(Se,te,je,$e.value,fe),$e!==null&&(t&&$e.alternate!==null&&Se.delete($e.key===null?je:$e.key),W=x($e,W,je),Ge===null?Ee=$e:Ge.sibling=$e,Ge=$e);return t&&Se.forEach(function(C2){return r(te,C2)}),Ue&&fr(te,je),Ee}function nt(te,W,ie,fe){if(typeof ie=="object"&&ie!==null&&ie.type===k&&ie.key===null&&(ie=ie.props.children),typeof ie=="object"&&ie!==null){switch(ie.$$typeof){case v:e:{for(var Ee=ie.key;W!==null;){if(W.key===Ee){if(Ee=ie.type,Ee===k){if(W.tag===7){a(te,W.sibling),fe=g(W,ie.props.children),fe.return=te,te=fe;break e}}else if(W.elementType===Ee||typeof Ee=="object"&&Ee!==null&&Ee.$$typeof===M&&Ci(Ee)===W.type){a(te,W.sibling),fe=g(W,ie.props),Ta(fe,ie),fe.return=te,te=fe;break e}a(te,W);break}else r(te,W);W=W.sibling}ie.type===k?(fe=Si(ie.props.children,te.mode,fe,ie.key),fe.return=te,te=fe):(fe=bs(ie.type,ie.key,ie.props,null,te.mode,fe),Ta(fe,ie),fe.return=te,te=fe)}return C(te);case w:e:{for(Ee=ie.key;W!==null;){if(W.key===Ee)if(W.tag===4&&W.stateNode.containerInfo===ie.containerInfo&&W.stateNode.implementation===ie.implementation){a(te,W.sibling),fe=g(W,ie.children||[]),fe.return=te,te=fe;break e}else{a(te,W);break}else r(te,W);W=W.sibling}fe=ef(ie,te.mode,fe),fe.return=te,te=fe}return C(te);case M:return ie=Ci(ie),nt(te,W,ie,fe)}if(G(ie))return be(te,W,ie,fe);if(I(ie)){if(Ee=I(ie),typeof Ee!="function")throw Error(l(150));return ie=Ee.call(ie),ke(te,W,ie,fe)}if(typeof ie.then=="function")return nt(te,W,Cs(ie),fe);if(ie.$$typeof===E)return nt(te,W,_s(te,ie),fe);Ts(te,ie)}return typeof ie=="string"&&ie!==""||typeof ie=="number"||typeof ie=="bigint"?(ie=""+ie,W!==null&&W.tag===6?(a(te,W.sibling),fe=g(W,ie),fe.return=te,te=fe):(a(te,W),fe=Wc(ie,te.mode,fe),fe.return=te,te=fe),C(te)):a(te,W)}return function(te,W,ie,fe){try{Ca=0;var Ee=nt(te,W,ie,fe);return xl=null,Ee}catch(Se){if(Se===yl||Se===Ns)throw Se;var Ge=cn(29,Se,null,te.mode);return Ge.lanes=fe,Ge.return=te,Ge}finally{}}}var zi=Eg(!0),Ng=Eg(!1),Yr=!1;function hf(t){t.updateQueue={baseState:t.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function pf(t,r){t=t.updateQueue,r.updateQueue===t&&(r.updateQueue={baseState:t.baseState,firstBaseUpdate:t.firstBaseUpdate,lastBaseUpdate:t.lastBaseUpdate,shared:t.shared,callbacks:null})}function Gr(t){return{lane:t,tag:0,payload:null,callback:null,next:null}}function $r(t,r,a){var c=t.updateQueue;if(c===null)return null;if(c=c.shared,(Fe&2)!==0){var g=c.pending;return g===null?r.next=r:(r.next=g.next,g.next=r),c.pending=r,r=vs(t),sg(t,null,a),r}return xs(t,c,r,a),vs(t)}function za(t,r,a){if(r=r.updateQueue,r!==null&&(r=r.shared,(a&4194048)!==0)){var c=r.lanes;c&=t.pendingLanes,a|=c,r.lanes=a,Ko(t,a)}}function mf(t,r){var a=t.updateQueue,c=t.alternate;if(c!==null&&(c=c.updateQueue,a===c)){var g=null,x=null;if(a=a.firstBaseUpdate,a!==null){do{var C={lane:a.lane,tag:a.tag,payload:a.payload,callback:null,next:null};x===null?g=x=C:x=x.next=C,a=a.next}while(a!==null);x===null?g=x=r:x=x.next=r}else g=x=r;a={baseState:c.baseState,firstBaseUpdate:g,lastBaseUpdate:x,shared:c.shared,callbacks:c.callbacks},t.updateQueue=a;return}t=a.lastBaseUpdate,t===null?a.firstBaseUpdate=r:t.next=r,a.lastBaseUpdate=r}var gf=!1;function Aa(){if(gf){var t=gl;if(t!==null)throw t}}function Ma(t,r,a,c){gf=!1;var g=t.updateQueue;Yr=!1;var x=g.firstBaseUpdate,C=g.lastBaseUpdate,O=g.shared.pending;if(O!==null){g.shared.pending=null;var Q=O,le=Q.next;Q.next=null,C===null?x=le:C.next=le,C=Q;var ce=t.alternate;ce!==null&&(ce=ce.updateQueue,O=ce.lastBaseUpdate,O!==C&&(O===null?ce.firstBaseUpdate=le:O.next=le,ce.lastBaseUpdate=Q))}if(x!==null){var de=g.baseState;C=0,ce=le=Q=null,O=x;do{var ae=O.lane&-536870913,oe=ae!==O.lane;if(oe?(Be&ae)===ae:(c&ae)===ae){ae!==0&&ae===ml&&(gf=!0),ce!==null&&(ce=ce.next={lane:0,tag:O.tag,payload:O.payload,callback:null,next:null});e:{var be=t,ke=O;ae=r;var nt=a;switch(ke.tag){case 1:if(be=ke.payload,typeof be=="function"){de=be.call(nt,de,ae);break e}de=be;break e;case 3:be.flags=be.flags&-65537|128;case 0:if(be=ke.payload,ae=typeof be=="function"?be.call(nt,de,ae):be,ae==null)break e;de=p({},de,ae);break e;case 2:Yr=!0}}ae=O.callback,ae!==null&&(t.flags|=64,oe&&(t.flags|=8192),oe=g.callbacks,oe===null?g.callbacks=[ae]:oe.push(ae))}else oe={lane:ae,tag:O.tag,payload:O.payload,callback:O.callback,next:null},ce===null?(le=ce=oe,Q=de):ce=ce.next=oe,C|=ae;if(O=O.next,O===null){if(O=g.shared.pending,O===null)break;oe=O,O=oe.next,oe.next=null,g.lastBaseUpdate=oe,g.shared.pending=null}}while(!0);ce===null&&(Q=de),g.baseState=Q,g.firstBaseUpdate=le,g.lastBaseUpdate=ce,x===null&&(g.shared.lanes=0),Zr|=C,t.lanes=C,t.memoizedState=de}}function kg(t,r){if(typeof t!="function")throw Error(l(191,t));t.call(r)}function Cg(t,r){var a=t.callbacks;if(a!==null)for(t.callbacks=null,t=0;tx?x:8;var C=R.T,O={};R.T=O,Df(t,!1,r,a);try{var Q=g(),le=R.S;if(le!==null&&le(O,Q),Q!==null&&typeof Q=="object"&&typeof Q.then=="function"){var ce=gE(Q,c);Ra(t,r,ce,mn(t))}else Ra(t,r,c,mn(t))}catch(de){Ra(t,r,{then:function(){},status:"rejected",reason:de},mn())}finally{$.p=x,C!==null&&O.types!==null&&(C.types=O.types),R.T=C}}function SE(){}function Of(t,r,a,c){if(t.tag!==5)throw Error(l(476));var g=l0(t).queue;i0(t,g,r,Z,a===null?SE:function(){return a0(t),a(c)})}function l0(t){var r=t.memoizedState;if(r!==null)return r;r={memoizedState:Z,baseState:Z,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:mr,lastRenderedState:Z},next:null};var a={};return r.next={memoizedState:a,baseState:a,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:mr,lastRenderedState:a},next:null},t.memoizedState=r,t=t.alternate,t!==null&&(t.memoizedState=r),r}function a0(t){var r=l0(t);r.next===null&&(r=t.alternate.memoizedState),Ra(t,r.next.queue,{},mn())}function Rf(){return Ht(Ka)}function o0(){return vt().memoizedState}function s0(){return vt().memoizedState}function _E(t){for(var r=t.return;r!==null;){switch(r.tag){case 24:case 3:var a=mn();t=Gr(a);var c=$r(r,t,a);c!==null&&(en(c,r,a),za(c,r,a)),r={cache:uf()},t.payload=r;return}r=r.return}}function EE(t,r,a){var c=mn();a={lane:c,revertLane:0,gesture:null,action:a,hasEagerState:!1,eagerState:null,next:null},Bs(t)?c0(r,a):(a=Kc(t,r,a,c),a!==null&&(en(a,t,c),f0(a,r,c)))}function u0(t,r,a){var c=mn();Ra(t,r,a,c)}function Ra(t,r,a,c){var g={lane:c,revertLane:0,gesture:null,action:a,hasEagerState:!1,eagerState:null,next:null};if(Bs(t))c0(r,g);else{var x=t.alternate;if(t.lanes===0&&(x===null||x.lanes===0)&&(x=r.lastRenderedReducer,x!==null))try{var C=r.lastRenderedState,O=x(C,a);if(g.hasEagerState=!0,g.eagerState=O,un(O,C))return xs(t,r,g,0),rt===null&&ys(),!1}catch{}finally{}if(a=Kc(t,r,g,c),a!==null)return en(a,t,c),f0(a,r,c),!0}return!1}function Df(t,r,a,c){if(c={lane:2,revertLane:hd(),gesture:null,action:c,hasEagerState:!1,eagerState:null,next:null},Bs(t)){if(r)throw Error(l(479))}else r=Kc(t,a,c,2),r!==null&&en(r,t,2)}function Bs(t){var r=t.alternate;return t===Ae||r!==null&&r===Ae}function c0(t,r){bl=Ms=!0;var a=t.pending;a===null?r.next=r:(r.next=a.next,a.next=r),t.pending=r}function f0(t,r,a){if((a&4194048)!==0){var c=r.lanes;c&=t.pendingLanes,a|=c,r.lanes=a,Ko(t,a)}}var Da={readContext:Ht,use:Rs,useCallback:pt,useContext:pt,useEffect:pt,useImperativeHandle:pt,useLayoutEffect:pt,useInsertionEffect:pt,useMemo:pt,useReducer:pt,useRef:pt,useState:pt,useDebugValue:pt,useDeferredValue:pt,useTransition:pt,useSyncExternalStore:pt,useId:pt,useHostTransitionStatus:pt,useFormState:pt,useActionState:pt,useOptimistic:pt,useMemoCache:pt,useCacheRefresh:pt};Da.useEffectEvent=pt;var d0={readContext:Ht,use:Rs,useCallback:function(t,r){return Xt().memoizedState=[t,r===void 0?null:r],t},useContext:Ht,useEffect:Qg,useImperativeHandle:function(t,r,a){a=a!=null?a.concat([t]):null,Ls(4194308,4,Wg.bind(null,r,t),a)},useLayoutEffect:function(t,r){return Ls(4194308,4,t,r)},useInsertionEffect:function(t,r){Ls(4,2,t,r)},useMemo:function(t,r){var a=Xt();r=r===void 0?null:r;var c=t();if(Ai){It(!0);try{t()}finally{It(!1)}}return a.memoizedState=[c,r],c},useReducer:function(t,r,a){var c=Xt();if(a!==void 0){var g=a(r);if(Ai){It(!0);try{a(r)}finally{It(!1)}}}else g=r;return c.memoizedState=c.baseState=g,t={pending:null,lanes:0,dispatch:null,lastRenderedReducer:t,lastRenderedState:g},c.queue=t,t=t.dispatch=EE.bind(null,Ae,t),[c.memoizedState,t]},useRef:function(t){var r=Xt();return t={current:t},r.memoizedState=t},useState:function(t){t=Tf(t);var r=t.queue,a=u0.bind(null,Ae,r);return r.dispatch=a,[t.memoizedState,a]},useDebugValue:Mf,useDeferredValue:function(t,r){var a=Xt();return jf(a,t,r)},useTransition:function(){var t=Tf(!1);return t=i0.bind(null,Ae,t.queue,!0,!1),Xt().memoizedState=t,[!1,t]},useSyncExternalStore:function(t,r,a){var c=Ae,g=Xt();if(Ue){if(a===void 0)throw Error(l(407));a=a()}else{if(a=r(),rt===null)throw Error(l(349));(Be&127)!==0||Og(c,r,a)}g.memoizedState=a;var x={value:a,getSnapshot:r};return g.queue=x,Qg(Dg.bind(null,c,x,t),[t]),c.flags|=2048,Sl(9,{destroy:void 0},Rg.bind(null,c,x,a,r),null),a},useId:function(){var t=Xt(),r=rt.identifierPrefix;if(Ue){var a=Pn,c=Xn;a=(c&~(1<<32-Ze(c)-1)).toString(32)+a,r="_"+r+"R_"+a,a=js++,0<\/script>",x=x.removeChild(x.firstChild);break;case"select":x=typeof c.is=="string"?C.createElement("select",{is:c.is}):C.createElement("select"),c.multiple?x.multiple=!0:c.size&&(x.size=c.size);break;default:x=typeof c.is=="string"?C.createElement(g,{is:c.is}):C.createElement(g)}}x[Mt]=r,x[Vt]=c;e:for(C=r.child;C!==null;){if(C.tag===5||C.tag===6)x.appendChild(C.stateNode);else if(C.tag!==4&&C.tag!==27&&C.child!==null){C.child.return=C,C=C.child;continue}if(C===r)break e;for(;C.sibling===null;){if(C.return===null||C.return===r)break e;C=C.return}C.sibling.return=C.return,C=C.sibling}r.stateNode=x;e:switch(qt(x,g,c),g){case"button":case"input":case"select":case"textarea":c=!!c.autoFocus;break e;case"img":c=!0;break e;default:c=!1}c&&yr(r)}}return ct(r),Qf(r,r.type,t===null?null:t.memoizedProps,r.pendingProps,a),null;case 6:if(t&&r.stateNode!=null)t.memoizedProps!==c&&yr(r);else{if(typeof c!="string"&&r.stateNode===null)throw Error(l(166));if(t=K.current,hl(r)){if(t=r.stateNode,a=r.memoizedProps,c=null,g=Lt,g!==null)switch(g.tag){case 27:case 5:c=g.memoizedProps}t[Mt]=r,t=!!(t.nodeValue===a||c!==null&&c.suppressHydrationWarning===!0||My(t.nodeValue,a)),t||Ir(r,!0)}else t=iu(t).createTextNode(c),t[Mt]=r,r.stateNode=t}return ct(r),null;case 31:if(a=r.memoizedState,t===null||t.memoizedState!==null){if(c=hl(r),a!==null){if(t===null){if(!c)throw Error(l(318));if(t=r.memoizedState,t=t!==null?t.dehydrated:null,!t)throw Error(l(557));t[Mt]=r}else _i(),(r.flags&128)===0&&(r.memoizedState=null),r.flags|=4;ct(r),t=!1}else a=lf(),t!==null&&t.memoizedState!==null&&(t.memoizedState.hydrationErrors=a),t=!0;if(!t)return r.flags&256?(dn(r),r):(dn(r),null);if((r.flags&128)!==0)throw Error(l(558))}return ct(r),null;case 13:if(c=r.memoizedState,t===null||t.memoizedState!==null&&t.memoizedState.dehydrated!==null){if(g=hl(r),c!==null&&c.dehydrated!==null){if(t===null){if(!g)throw Error(l(318));if(g=r.memoizedState,g=g!==null?g.dehydrated:null,!g)throw Error(l(317));g[Mt]=r}else _i(),(r.flags&128)===0&&(r.memoizedState=null),r.flags|=4;ct(r),g=!1}else g=lf(),t!==null&&t.memoizedState!==null&&(t.memoizedState.hydrationErrors=g),g=!0;if(!g)return r.flags&256?(dn(r),r):(dn(r),null)}return dn(r),(r.flags&128)!==0?(r.lanes=a,r):(a=c!==null,t=t!==null&&t.memoizedState!==null,a&&(c=r.child,g=null,c.alternate!==null&&c.alternate.memoizedState!==null&&c.alternate.memoizedState.cachePool!==null&&(g=c.alternate.memoizedState.cachePool.pool),x=null,c.memoizedState!==null&&c.memoizedState.cachePool!==null&&(x=c.memoizedState.cachePool.pool),x!==g&&(c.flags|=2048)),a!==t&&a&&(r.child.flags|=8192),Ys(r,r.updateQueue),ct(r),null);case 4:return se(),t===null&&yd(r.stateNode.containerInfo),ct(r),null;case 10:return hr(r.type),ct(r),null;case 19:if(P(xt),c=r.memoizedState,c===null)return ct(r),null;if(g=(r.flags&128)!==0,x=c.rendering,x===null)if(g)Ha(c,!1);else{if(mt!==0||t!==null&&(t.flags&128)!==0)for(t=r.child;t!==null;){if(x=As(t),x!==null){for(r.flags|=128,Ha(c,!1),t=x.updateQueue,r.updateQueue=t,Ys(r,t),r.subtreeFlags=0,t=a,a=r.child;a!==null;)ug(a,t),a=a.sibling;return N(xt,xt.current&1|2),Ue&&fr(r,c.treeForkCount),r.child}t=t.sibling}c.tail!==null&&At()>Fs&&(r.flags|=128,g=!0,Ha(c,!1),r.lanes=4194304)}else{if(!g)if(t=As(x),t!==null){if(r.flags|=128,g=!0,t=t.updateQueue,r.updateQueue=t,Ys(r,t),Ha(c,!0),c.tail===null&&c.tailMode==="hidden"&&!x.alternate&&!Ue)return ct(r),null}else 2*At()-c.renderingStartTime>Fs&&a!==536870912&&(r.flags|=128,g=!0,Ha(c,!1),r.lanes=4194304);c.isBackwards?(x.sibling=r.child,r.child=x):(t=c.last,t!==null?t.sibling=x:r.child=x,c.last=x)}return c.tail!==null?(t=c.tail,c.rendering=t,c.tail=t.sibling,c.renderingStartTime=At(),t.sibling=null,a=xt.current,N(xt,g?a&1|2:a&1),Ue&&fr(r,c.treeForkCount),t):(ct(r),null);case 22:case 23:return dn(r),xf(),c=r.memoizedState!==null,t!==null?t.memoizedState!==null!==c&&(r.flags|=8192):c&&(r.flags|=8192),c?(a&536870912)!==0&&(r.flags&128)===0&&(ct(r),r.subtreeFlags&6&&(r.flags|=8192)):ct(r),a=r.updateQueue,a!==null&&Ys(r,a.retryQueue),a=null,t!==null&&t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(a=t.memoizedState.cachePool.pool),c=null,r.memoizedState!==null&&r.memoizedState.cachePool!==null&&(c=r.memoizedState.cachePool.pool),c!==a&&(r.flags|=2048),t!==null&&P(ki),null;case 24:return a=null,t!==null&&(a=t.memoizedState.cache),r.memoizedState.cache!==a&&(r.flags|=2048),hr(wt),ct(r),null;case 25:return null;case 30:return null}throw Error(l(156,r.tag))}function zE(t,r){switch(nf(r),r.tag){case 1:return t=r.flags,t&65536?(r.flags=t&-65537|128,r):null;case 3:return hr(wt),se(),t=r.flags,(t&65536)!==0&&(t&128)===0?(r.flags=t&-65537|128,r):null;case 26:case 27:case 5:return ve(r),null;case 31:if(r.memoizedState!==null){if(dn(r),r.alternate===null)throw Error(l(340));_i()}return t=r.flags,t&65536?(r.flags=t&-65537|128,r):null;case 13:if(dn(r),t=r.memoizedState,t!==null&&t.dehydrated!==null){if(r.alternate===null)throw Error(l(340));_i()}return t=r.flags,t&65536?(r.flags=t&-65537|128,r):null;case 19:return P(xt),null;case 4:return se(),null;case 10:return hr(r.type),null;case 22:case 23:return dn(r),xf(),t!==null&&P(ki),t=r.flags,t&65536?(r.flags=t&-65537|128,r):null;case 24:return hr(wt),null;case 25:return null;default:return null}}function L0(t,r){switch(nf(r),r.tag){case 3:hr(wt),se();break;case 26:case 27:case 5:ve(r);break;case 4:se();break;case 31:r.memoizedState!==null&&dn(r);break;case 13:dn(r);break;case 19:P(xt);break;case 10:hr(r.type);break;case 22:case 23:dn(r),xf(),t!==null&&P(ki);break;case 24:hr(wt)}}function Ba(t,r){try{var a=r.updateQueue,c=a!==null?a.lastEffect:null;if(c!==null){var g=c.next;a=g;do{if((a.tag&t)===t){c=void 0;var x=a.create,C=a.inst;c=x(),C.destroy=c}a=a.next}while(a!==g)}}catch(O){Je(r,r.return,O)}}function Fr(t,r,a){try{var c=r.updateQueue,g=c!==null?c.lastEffect:null;if(g!==null){var x=g.next;c=x;do{if((c.tag&t)===t){var C=c.inst,O=C.destroy;if(O!==void 0){C.destroy=void 0,g=r;var Q=a,le=O;try{le()}catch(ce){Je(g,Q,ce)}}}c=c.next}while(c!==x)}}catch(ce){Je(r,r.return,ce)}}function H0(t){var r=t.updateQueue;if(r!==null){var a=t.stateNode;try{Cg(r,a)}catch(c){Je(t,t.return,c)}}}function B0(t,r,a){a.props=Mi(t.type,t.memoizedProps),a.state=t.memoizedState;try{a.componentWillUnmount()}catch(c){Je(t,r,c)}}function qa(t,r){try{var a=t.ref;if(a!==null){switch(t.tag){case 26:case 27:case 5:var c=t.stateNode;break;case 30:c=t.stateNode;break;default:c=t.stateNode}typeof a=="function"?t.refCleanup=a(c):a.current=c}}catch(g){Je(t,r,g)}}function Fn(t,r){var a=t.ref,c=t.refCleanup;if(a!==null)if(typeof c=="function")try{c()}catch(g){Je(t,r,g)}finally{t.refCleanup=null,t=t.alternate,t!=null&&(t.refCleanup=null)}else if(typeof a=="function")try{a(null)}catch(g){Je(t,r,g)}else a.current=null}function q0(t){var r=t.type,a=t.memoizedProps,c=t.stateNode;try{e:switch(r){case"button":case"input":case"select":case"textarea":a.autoFocus&&c.focus();break e;case"img":a.src?c.src=a.src:a.srcSet&&(c.srcset=a.srcSet)}}catch(g){Je(t,t.return,g)}}function Zf(t,r,a){try{var c=t.stateNode;KE(c,t.type,a,r),c[Vt]=r}catch(g){Je(t,t.return,g)}}function U0(t){return t.tag===5||t.tag===3||t.tag===26||t.tag===27&&ti(t.type)||t.tag===4}function Kf(t){e:for(;;){for(;t.sibling===null;){if(t.return===null||U0(t.return))return null;t=t.return}for(t.sibling.return=t.return,t=t.sibling;t.tag!==5&&t.tag!==6&&t.tag!==18;){if(t.tag===27&&ti(t.type)||t.flags&2||t.child===null||t.tag===4)continue e;t.child.return=t,t=t.child}if(!(t.flags&2))return t.stateNode}}function Jf(t,r,a){var c=t.tag;if(c===5||c===6)t=t.stateNode,r?(a.nodeType===9?a.body:a.nodeName==="HTML"?a.ownerDocument.body:a).insertBefore(t,r):(r=a.nodeType===9?a.body:a.nodeName==="HTML"?a.ownerDocument.body:a,r.appendChild(t),a=a._reactRootContainer,a!=null||r.onclick!==null||(r.onclick=sr));else if(c!==4&&(c===27&&ti(t.type)&&(a=t.stateNode,r=null),t=t.child,t!==null))for(Jf(t,r,a),t=t.sibling;t!==null;)Jf(t,r,a),t=t.sibling}function Gs(t,r,a){var c=t.tag;if(c===5||c===6)t=t.stateNode,r?a.insertBefore(t,r):a.appendChild(t);else if(c!==4&&(c===27&&ti(t.type)&&(a=t.stateNode),t=t.child,t!==null))for(Gs(t,r,a),t=t.sibling;t!==null;)Gs(t,r,a),t=t.sibling}function I0(t){var r=t.stateNode,a=t.memoizedProps;try{for(var c=t.type,g=r.attributes;g.length;)r.removeAttributeNode(g[0]);qt(r,c,a),r[Mt]=t,r[Vt]=a}catch(x){Je(t,t.return,x)}}var xr=!1,Et=!1,Wf=!1,V0=typeof WeakSet=="function"?WeakSet:Set,Ot=null;function AE(t,r){if(t=t.containerInfo,bd=fu,t=eg(t),$c(t)){if("selectionStart"in t)var a={start:t.selectionStart,end:t.selectionEnd};else e:{a=(a=t.ownerDocument)&&a.defaultView||window;var c=a.getSelection&&a.getSelection();if(c&&c.rangeCount!==0){a=c.anchorNode;var g=c.anchorOffset,x=c.focusNode;c=c.focusOffset;try{a.nodeType,x.nodeType}catch{a=null;break e}var C=0,O=-1,Q=-1,le=0,ce=0,de=t,ae=null;t:for(;;){for(var oe;de!==a||g!==0&&de.nodeType!==3||(O=C+g),de!==x||c!==0&&de.nodeType!==3||(Q=C+c),de.nodeType===3&&(C+=de.nodeValue.length),(oe=de.firstChild)!==null;)ae=de,de=oe;for(;;){if(de===t)break t;if(ae===a&&++le===g&&(O=C),ae===x&&++ce===c&&(Q=C),(oe=de.nextSibling)!==null)break;de=ae,ae=de.parentNode}de=oe}a=O===-1||Q===-1?null:{start:O,end:Q}}else a=null}a=a||{start:0,end:0}}else a=null;for(wd={focusedElem:t,selectionRange:a},fu=!1,Ot=r;Ot!==null;)if(r=Ot,t=r.child,(r.subtreeFlags&1028)!==0&&t!==null)t.return=r,Ot=t;else for(;Ot!==null;){switch(r=Ot,x=r.alternate,t=r.flags,r.tag){case 0:if((t&4)!==0&&(t=r.updateQueue,t=t!==null?t.events:null,t!==null))for(a=0;a title"))),qt(x,c,a),x[Mt]=t,bt(x),c=x;break e;case"link":var C=Fy("link","href",g).get(c+(a.href||""));if(C){for(var O=0;Ont&&(C=nt,nt=ke,ke=C);var te=Jm(O,ke),W=Jm(O,nt);if(te&&W&&(oe.rangeCount!==1||oe.anchorNode!==te.node||oe.anchorOffset!==te.offset||oe.focusNode!==W.node||oe.focusOffset!==W.offset)){var ie=de.createRange();ie.setStart(te.node,te.offset),oe.removeAllRanges(),ke>nt?(oe.addRange(ie),oe.extend(W.node,W.offset)):(ie.setEnd(W.node,W.offset),oe.addRange(ie))}}}}for(de=[],oe=O;oe=oe.parentNode;)oe.nodeType===1&&de.push({element:oe,left:oe.scrollLeft,top:oe.scrollTop});for(typeof O.focus=="function"&&O.focus(),O=0;Oa?32:a,R.T=null,a=ad,ad=null;var x=Jr,C=_r;if(jt=0,Cl=Jr=null,_r=0,(Fe&6)!==0)throw Error(l(331));var O=Fe;if(Fe|=4,W0(x.current),Z0(x,x.current,C,a),Fe=O,$a(0,!1),yt&&typeof yt.onPostCommitFiberRoot=="function")try{yt.onPostCommitFiberRoot(Dt,x)}catch{}return!0}finally{$.p=g,R.T=c,yy(t,r)}}function vy(t,r,a){r=_n(a,r),r=qf(t.stateNode,r,2),t=$r(t,r,2),t!==null&&(pi(t,2),Qn(t))}function Je(t,r,a){if(t.tag===3)vy(t,t,a);else for(;r!==null;){if(r.tag===3){vy(r,t,a);break}else if(r.tag===1){var c=r.stateNode;if(typeof r.type.getDerivedStateFromError=="function"||typeof c.componentDidCatch=="function"&&(Kr===null||!Kr.has(c))){t=_n(a,t),a=b0(2),c=$r(r,a,2),c!==null&&(w0(a,c,r,t),pi(c,2),Qn(c));break}}r=r.return}}function cd(t,r,a){var c=t.pingCache;if(c===null){c=t.pingCache=new OE;var g=new Set;c.set(r,g)}else g=c.get(r),g===void 0&&(g=new Set,c.set(r,g));g.has(a)||(nd=!0,g.add(a),t=BE.bind(null,t,r,a),r.then(t,t))}function BE(t,r,a){var c=t.pingCache;c!==null&&c.delete(r),t.pingedLanes|=t.suspendedLanes&a,t.warmLanes&=~a,rt===t&&(Be&a)===a&&(mt===4||mt===3&&(Be&62914560)===Be&&300>At()-Ps?(Fe&2)===0&&Tl(t,0):rd|=a,kl===Be&&(kl=0)),Qn(t)}function by(t,r){r===0&&(r=Qo()),t=wi(t,r),t!==null&&(pi(t,r),Qn(t))}function qE(t){var r=t.memoizedState,a=0;r!==null&&(a=r.retryLane),by(t,a)}function UE(t,r){var a=0;switch(t.tag){case 31:case 13:var c=t.stateNode,g=t.memoizedState;g!==null&&(a=g.retryLane);break;case 19:c=t.stateNode;break;case 22:c=t.stateNode._retryCache;break;default:throw Error(l(314))}c!==null&&c.delete(r),by(t,a)}function IE(t,r){return Ut(t,r)}var eu=null,Al=null,fd=!1,tu=!1,dd=!1,ei=0;function Qn(t){t!==Al&&t.next===null&&(Al===null?eu=Al=t:Al=Al.next=t),tu=!0,fd||(fd=!0,YE())}function $a(t,r){if(!dd&&tu){dd=!0;do for(var a=!1,c=eu;c!==null;){if(t!==0){var g=c.pendingLanes;if(g===0)var x=0;else{var C=c.suspendedLanes,O=c.pingedLanes;x=(1<<31-Ze(42|t)+1)-1,x&=g&~(C&~O),x=x&201326741?x&201326741|1:x?x|2:0}x!==0&&(a=!0,Ey(c,x))}else x=Be,x=Wi(c,c===rt?x:0,c.cancelPendingCommit!==null||c.timeoutHandle!==-1),(x&3)===0||hi(c,x)||(a=!0,Ey(c,x));c=c.next}while(a);dd=!1}}function VE(){wy()}function wy(){tu=fd=!1;var t=0;ei!==0&&WE()&&(t=ei);for(var r=At(),a=null,c=eu;c!==null;){var g=c.next,x=Sy(c,r);x===0?(c.next=null,a===null?eu=g:a.next=g,g===null&&(Al=a)):(a=c,(t!==0||(x&3)!==0)&&(tu=!0)),c=g}jt!==0&&jt!==5||$a(t),ei!==0&&(ei=0)}function Sy(t,r){for(var a=t.suspendedLanes,c=t.pingedLanes,g=t.expirationTimes,x=t.pendingLanes&-62914561;0O)break;var ce=Q.transferSize,de=Q.initiatorType;ce&&jy(de)&&(Q=Q.responseEnd,C+=ce*(Q"u"?null:document;function Gy(t,r,a){var c=Ml;if(c&&typeof r=="string"&&r){var g=Ft(r);g='link[rel="'+t+'"][href="'+g+'"]',typeof a=="string"&&(g+='[crossorigin="'+a+'"]'),Yy.has(g)||(Yy.add(g),t={rel:t,crossOrigin:a,href:r},c.querySelector(g)===null&&(r=c.createElement("link"),qt(r,"link",t),bt(r),c.head.appendChild(r)))}}function s2(t){Er.D(t),Gy("dns-prefetch",t,null)}function u2(t,r){Er.C(t,r),Gy("preconnect",t,r)}function c2(t,r,a){Er.L(t,r,a);var c=Ml;if(c&&t&&r){var g='link[rel="preload"][as="'+Ft(r)+'"]';r==="image"&&a&&a.imageSrcSet?(g+='[imagesrcset="'+Ft(a.imageSrcSet)+'"]',typeof a.imageSizes=="string"&&(g+='[imagesizes="'+Ft(a.imageSizes)+'"]')):g+='[href="'+Ft(t)+'"]';var x=g;switch(r){case"style":x=jl(t);break;case"script":x=Ol(t)}zn.has(x)||(t=p({rel:"preload",href:r==="image"&&a&&a.imageSrcSet?void 0:t,as:r},a),zn.set(x,t),c.querySelector(g)!==null||r==="style"&&c.querySelector(Qa(x))||r==="script"&&c.querySelector(Za(x))||(r=c.createElement("link"),qt(r,"link",t),bt(r),c.head.appendChild(r)))}}function f2(t,r){Er.m(t,r);var a=Ml;if(a&&t){var c=r&&typeof r.as=="string"?r.as:"script",g='link[rel="modulepreload"][as="'+Ft(c)+'"][href="'+Ft(t)+'"]',x=g;switch(c){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":x=Ol(t)}if(!zn.has(x)&&(t=p({rel:"modulepreload",href:t},r),zn.set(x,t),a.querySelector(g)===null)){switch(c){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(a.querySelector(Za(x)))return}c=a.createElement("link"),qt(c,"link",t),bt(c),a.head.appendChild(c)}}}function d2(t,r,a){Er.S(t,r,a);var c=Ml;if(c&&t){var g=Dr(c).hoistableStyles,x=jl(t);r=r||"default";var C=g.get(x);if(!C){var O={loading:0,preload:null};if(C=c.querySelector(Qa(x)))O.loading=5;else{t=p({rel:"stylesheet",href:t,"data-precedence":r},a),(a=zn.get(x))&&Td(t,a);var Q=C=c.createElement("link");bt(Q),qt(Q,"link",t),Q._p=new Promise(function(le,ce){Q.onload=le,Q.onerror=ce}),Q.addEventListener("load",function(){O.loading|=1}),Q.addEventListener("error",function(){O.loading|=2}),O.loading|=4,au(C,r,c)}C={type:"stylesheet",instance:C,count:1,state:O},g.set(x,C)}}}function h2(t,r){Er.X(t,r);var a=Ml;if(a&&t){var c=Dr(a).hoistableScripts,g=Ol(t),x=c.get(g);x||(x=a.querySelector(Za(g)),x||(t=p({src:t,async:!0},r),(r=zn.get(g))&&zd(t,r),x=a.createElement("script"),bt(x),qt(x,"link",t),a.head.appendChild(x)),x={type:"script",instance:x,count:1,state:null},c.set(g,x))}}function p2(t,r){Er.M(t,r);var a=Ml;if(a&&t){var c=Dr(a).hoistableScripts,g=Ol(t),x=c.get(g);x||(x=a.querySelector(Za(g)),x||(t=p({src:t,async:!0,type:"module"},r),(r=zn.get(g))&&zd(t,r),x=a.createElement("script"),bt(x),qt(x,"link",t),a.head.appendChild(x)),x={type:"script",instance:x,count:1,state:null},c.set(g,x))}}function $y(t,r,a,c){var g=(g=K.current)?lu(g):null;if(!g)throw Error(l(446));switch(t){case"meta":case"title":return null;case"style":return typeof a.precedence=="string"&&typeof a.href=="string"?(r=jl(a.href),a=Dr(g).hoistableStyles,c=a.get(r),c||(c={type:"style",instance:null,count:0,state:null},a.set(r,c)),c):{type:"void",instance:null,count:0,state:null};case"link":if(a.rel==="stylesheet"&&typeof a.href=="string"&&typeof a.precedence=="string"){t=jl(a.href);var x=Dr(g).hoistableStyles,C=x.get(t);if(C||(g=g.ownerDocument||g,C={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},x.set(t,C),(x=g.querySelector(Qa(t)))&&!x._p&&(C.instance=x,C.state.loading=5),zn.has(t)||(a={rel:"preload",as:"style",href:a.href,crossOrigin:a.crossOrigin,integrity:a.integrity,media:a.media,hrefLang:a.hrefLang,referrerPolicy:a.referrerPolicy},zn.set(t,a),x||m2(g,t,a,C.state))),r&&c===null)throw Error(l(528,""));return C}if(r&&c!==null)throw Error(l(529,""));return null;case"script":return r=a.async,a=a.src,typeof a=="string"&&r&&typeof r!="function"&&typeof r!="symbol"?(r=Ol(a),a=Dr(g).hoistableScripts,c=a.get(r),c||(c={type:"script",instance:null,count:0,state:null},a.set(r,c)),c):{type:"void",instance:null,count:0,state:null};default:throw Error(l(444,t))}}function jl(t){return'href="'+Ft(t)+'"'}function Qa(t){return'link[rel="stylesheet"]['+t+"]"}function Xy(t){return p({},t,{"data-precedence":t.precedence,precedence:null})}function m2(t,r,a,c){t.querySelector('link[rel="preload"][as="style"]['+r+"]")?c.loading=1:(r=t.createElement("link"),c.preload=r,r.addEventListener("load",function(){return c.loading|=1}),r.addEventListener("error",function(){return c.loading|=2}),qt(r,"link",a),bt(r),t.head.appendChild(r))}function Ol(t){return'[src="'+Ft(t)+'"]'}function Za(t){return"script[async]"+t}function Py(t,r,a){if(r.count++,r.instance===null)switch(r.type){case"style":var c=t.querySelector('style[data-href~="'+Ft(a.href)+'"]');if(c)return r.instance=c,bt(c),c;var g=p({},a,{"data-href":a.href,"data-precedence":a.precedence,href:null,precedence:null});return c=(t.ownerDocument||t).createElement("style"),bt(c),qt(c,"style",g),au(c,a.precedence,t),r.instance=c;case"stylesheet":g=jl(a.href);var x=t.querySelector(Qa(g));if(x)return r.state.loading|=4,r.instance=x,bt(x),x;c=Xy(a),(g=zn.get(g))&&Td(c,g),x=(t.ownerDocument||t).createElement("link"),bt(x);var C=x;return C._p=new Promise(function(O,Q){C.onload=O,C.onerror=Q}),qt(x,"link",c),r.state.loading|=4,au(x,a.precedence,t),r.instance=x;case"script":return x=Ol(a.src),(g=t.querySelector(Za(x)))?(r.instance=g,bt(g),g):(c=a,(g=zn.get(x))&&(c=p({},a),zd(c,g)),t=t.ownerDocument||t,g=t.createElement("script"),bt(g),qt(g,"link",c),t.head.appendChild(g),r.instance=g);case"void":return null;default:throw Error(l(443,r.type))}else r.type==="stylesheet"&&(r.state.loading&4)===0&&(c=r.instance,r.state.loading|=4,au(c,a.precedence,t));return r.instance}function au(t,r,a){for(var c=a.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),g=c.length?c[c.length-1]:null,x=g,C=0;C title"):null)}function g2(t,r,a){if(a===1||r.itemProp!=null)return!1;switch(t){case"meta":case"title":return!0;case"style":if(typeof r.precedence!="string"||typeof r.href!="string"||r.href==="")break;return!0;case"link":if(typeof r.rel!="string"||typeof r.href!="string"||r.href===""||r.onLoad||r.onError)break;switch(r.rel){case"stylesheet":return t=r.disabled,typeof r.precedence=="string"&&t==null;default:return!0}case"script":if(r.async&&typeof r.async!="function"&&typeof r.async!="symbol"&&!r.onLoad&&!r.onError&&r.src&&typeof r.src=="string")return!0}return!1}function Zy(t){return!(t.type==="stylesheet"&&(t.state.loading&3)===0)}function y2(t,r,a,c){if(a.type==="stylesheet"&&(typeof c.media!="string"||matchMedia(c.media).matches!==!1)&&(a.state.loading&4)===0){if(a.instance===null){var g=jl(c.href),x=r.querySelector(Qa(g));if(x){r=x._p,r!==null&&typeof r=="object"&&typeof r.then=="function"&&(t.count++,t=su.bind(t),r.then(t,t)),a.state.loading|=4,a.instance=x,bt(x);return}x=r.ownerDocument||r,c=Xy(c),(g=zn.get(g))&&Td(c,g),x=x.createElement("link"),bt(x);var C=x;C._p=new Promise(function(O,Q){C.onload=O,C.onerror=Q}),qt(x,"link",c),a.instance=x}t.stylesheets===null&&(t.stylesheets=new Map),t.stylesheets.set(a,r),(r=a.state.preload)&&(a.state.loading&3)===0&&(t.count++,a=su.bind(t),r.addEventListener("load",a),r.addEventListener("error",a))}}var Ad=0;function x2(t,r){return t.stylesheets&&t.count===0&&cu(t,t.stylesheets),0Ad?50:800)+r);return t.unsuspend=a,function(){t.unsuspend=null,clearTimeout(c),clearTimeout(g)}}:null}function su(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)cu(this,this.stylesheets);else if(this.unsuspend){var t=this.unsuspend;this.unsuspend=null,t()}}}var uu=null;function cu(t,r){t.stylesheets=null,t.unsuspend!==null&&(t.count++,uu=new Map,r.forEach(v2,t),uu=null,su.call(t))}function v2(t,r){if(!(r.state.loading&4)){var a=uu.get(t);if(a)var c=a.get(null);else{a=new Map,uu.set(t,a);for(var g=t.querySelectorAll("link[data-precedence],style[data-precedence]"),x=0;x"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(n){console.error(n)}}return e(),qd.exports=B2(),qd.exports}var U2=q2();/** - * @license lucide-react v0.469.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const I2=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),Nb=(...e)=>e.filter((n,i,l)=>!!n&&n.trim()!==""&&l.indexOf(n)===i).join(" ").trim();/** - * @license lucide-react v0.469.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */var V2={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};/** - * @license lucide-react v0.469.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Y2=V.forwardRef(({color:e="currentColor",size:n=24,strokeWidth:i=2,absoluteStrokeWidth:l,className:o="",children:s,iconNode:u,...f},d)=>V.createElement("svg",{ref:d,...V2,width:n,height:n,stroke:e,strokeWidth:l?Number(i)*24/Number(n):i,className:Nb("lucide",o),...f},[...u.map(([h,m])=>V.createElement(h,m)),...Array.isArray(s)?s:[s]]));/** - * @license lucide-react v0.469.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Pe=(e,n)=>{const i=V.forwardRef(({className:l,...o},s)=>V.createElement(Y2,{ref:s,iconNode:n,className:Nb(`lucide-${I2(e)}`,l),...o}));return i.displayName=`${e}`,i};/** - * @license lucide-react v0.469.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const kb=Pe("Activity",[["path",{d:"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2",key:"169zse"}]]);/** - * @license lucide-react v0.469.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const G2=Pe("Bot",[["path",{d:"M12 8V4H8",key:"hb8ula"}],["rect",{width:"16",height:"12",x:"4",y:"8",rx:"2",key:"enze0r"}],["path",{d:"M2 14h2",key:"vft8re"}],["path",{d:"M20 14h2",key:"4cs60a"}],["path",{d:"M15 13v2",key:"1xurst"}],["path",{d:"M9 13v2",key:"rq6x2g"}]]);/** - * @license lucide-react v0.469.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Bi=Pe("Check",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]);/** - * @license lucide-react v0.469.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Fi=Pe("ChevronDown",[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]]);/** - * @license lucide-react v0.469.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const ia=Pe("ChevronRight",[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]]);/** - * @license lucide-react v0.469.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const $2=Pe("ChevronUp",[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]]);/** - * @license lucide-react v0.469.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const X2=Pe("CircleCheck",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);/** - * @license lucide-react v0.469.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const P2=Pe("Clock",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["polyline",{points:"12 6 12 12 16 14",key:"68esgv"}]]);/** - * @license lucide-react v0.469.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const F2=Pe("Coins",[["circle",{cx:"8",cy:"8",r:"6",key:"3yglwk"}],["path",{d:"M18.09 10.37A6 6 0 1 1 10.34 18",key:"t5s6rm"}],["path",{d:"M7 6h1v4",key:"1obek4"}],["path",{d:"m16.71 13.88.7.71-2.82 2.82",key:"1rbuyh"}]]);/** - * @license lucide-react v0.469.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Cb=Pe("Copy",[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]]);/** - * @license lucide-react v0.469.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Q2=Pe("Download",[["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["polyline",{points:"7 10 12 15 17 10",key:"2ggqvy"}],["line",{x1:"12",x2:"12",y1:"15",y2:"3",key:"1vk2je"}]]);/** - * @license lucide-react v0.469.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Z2=Pe("Eye",[["path",{d:"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0",key:"1nclc0"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);/** - * @license lucide-react v0.469.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const K2=Pe("FileCode",[["path",{d:"M10 12.5 8 15l2 2.5",key:"1tg20x"}],["path",{d:"m14 12.5 2 2.5-2 2.5",key:"yinavb"}],["path",{d:"M14 2v4a2 2 0 0 0 2 2h4",key:"tnqrlb"}],["path",{d:"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7z",key:"1mlx9k"}]]);/** - * @license lucide-react v0.469.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const J2=Pe("FileOutput",[["path",{d:"M14 2v4a2 2 0 0 0 2 2h4",key:"tnqrlb"}],["path",{d:"M4 7V4a2 2 0 0 1 2-2 2 2 0 0 0-2 2",key:"1vk7w2"}],["path",{d:"M4.063 20.999a2 2 0 0 0 2 1L18 22a2 2 0 0 0 2-2V7l-5-5H6",key:"1jink5"}],["path",{d:"m5 11-3 3",key:"1dgrs4"}],["path",{d:"m5 17-3-3h10",key:"1mvvaf"}]]);/** - * @license lucide-react v0.469.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const W2=Pe("GitBranch",[["line",{x1:"6",x2:"6",y1:"3",y2:"15",key:"17qcm7"}],["circle",{cx:"18",cy:"6",r:"3",key:"1h7g24"}],["circle",{cx:"6",cy:"18",r:"3",key:"fqmcym"}],["path",{d:"M18 9a9 9 0 0 1-9 9",key:"n2h4wq"}]]);/** - * @license lucide-react v0.469.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const eN=Pe("Hash",[["line",{x1:"4",x2:"20",y1:"9",y2:"9",key:"4lhtct"}],["line",{x1:"4",x2:"20",y1:"15",y2:"15",key:"vyu0kd"}],["line",{x1:"10",x2:"8",y1:"3",y2:"21",key:"1ggp8o"}],["line",{x1:"16",x2:"14",y1:"3",y2:"21",key:"weycgp"}]]);/** - * @license lucide-react v0.469.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const _o=Pe("LoaderCircle",[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]]);/** - * @license lucide-react v0.469.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const tN=Pe("Maximize",[["path",{d:"M8 3H5a2 2 0 0 0-2 2v3",key:"1dcmit"}],["path",{d:"M21 8V5a2 2 0 0 0-2-2h-3",key:"1e4gt3"}],["path",{d:"M3 16v3a2 2 0 0 0 2 2h3",key:"wsl5sc"}],["path",{d:"M16 21h3a2 2 0 0 0 2-2v-3",key:"18trek"}]]);/** - * @license lucide-react v0.469.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const nN=Pe("Pause",[["rect",{x:"14",y:"4",width:"4",height:"16",rx:"1",key:"zuxfzm"}],["rect",{x:"6",y:"4",width:"4",height:"16",rx:"1",key:"1okwgv"}]]);/** - * @license lucide-react v0.469.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Vp=Pe("Play",[["polygon",{points:"6 3 20 12 6 21 6 3",key:"1oa8hb"}]]);/** - * @license lucide-react v0.469.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const rN=Pe("Repeat",[["path",{d:"m17 2 4 4-4 4",key:"nntrym"}],["path",{d:"M3 11v-1a4 4 0 0 1 4-4h14",key:"84bu3i"}],["path",{d:"m7 22-4-4 4-4",key:"1wqhfi"}],["path",{d:"M21 13v1a4 4 0 0 1-4 4H3",key:"1rx37r"}]]);/** - * @license lucide-react v0.469.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const iN=Pe("Search",[["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["path",{d:"m21 21-4.3-4.3",key:"1qie3q"}]]);/** - * @license lucide-react v0.469.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const lN=Pe("Send",[["path",{d:"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z",key:"1ffxy3"}],["path",{d:"m21.854 2.147-10.94 10.939",key:"12cjpa"}]]);/** - * @license lucide-react v0.469.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const aN=Pe("ShieldCheck",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);/** - * @license lucide-react v0.469.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const bx=Pe("SquareTerminal",[["path",{d:"m7 11 2-2-2-2",key:"1lz0vl"}],["path",{d:"M11 13h4",key:"1p7l4v"}],["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2",key:"1m3agn"}]]);/** - * @license lucide-react v0.469.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Tb=Pe("Square",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}]]);/** - * @license lucide-react v0.469.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const oN=Pe("Terminal",[["polyline",{points:"4 17 10 11 4 5",key:"akl6gq"}],["line",{x1:"12",x2:"20",y1:"19",y2:"19",key:"q2wloq"}]]);/** - * @license lucide-react v0.469.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const sN=Pe("TriangleAlert",[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]]);/** - * @license lucide-react v0.469.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const uN=Pe("WifiOff",[["path",{d:"M12 20h.01",key:"zekei9"}],["path",{d:"M8.5 16.429a5 5 0 0 1 7 0",key:"1bycff"}],["path",{d:"M5 12.859a10 10 0 0 1 5.17-2.69",key:"1dl1wf"}],["path",{d:"M19 12.859a10 10 0 0 0-2.007-1.523",key:"4k23kn"}],["path",{d:"M2 8.82a15 15 0 0 1 4.177-2.643",key:"1grhjp"}],["path",{d:"M22 8.82a15 15 0 0 0-11.288-3.764",key:"z3jwby"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]]);/** - * @license lucide-react v0.469.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const cN=Pe("Wifi",[["path",{d:"M12 20h.01",key:"zekei9"}],["path",{d:"M2 8.82a15 15 0 0 1 20 0",key:"dnpr2z"}],["path",{d:"M5 12.859a10 10 0 0 1 14 0",key:"1x1e6c"}],["path",{d:"M8.5 16.429a5 5 0 0 1 7 0",key:"1bycff"}]]);/** - * @license lucide-react v0.469.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Bo=Pe("X",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]]);/** - * @license lucide-react v0.469.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const fN=Pe("Zap",[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",key:"1xq2db"}]]),wx=e=>{let n;const i=new Set,l=(h,m)=>{const p=typeof h=="function"?h(n):h;if(!Object.is(p,n)){const y=n;n=m??(typeof p!="object"||p===null)?p:Object.assign({},n,p),i.forEach(v=>v(n,y))}},o=()=>n,f={setState:l,getState:o,getInitialState:()=>d,subscribe:h=>(i.add(h),()=>i.delete(h))},d=n=e(l,o,f);return f},dN=(e=>e?wx(e):wx),hN=e=>e;function pN(e,n=hN){const i=Ul.useSyncExternalStore(e.subscribe,Ul.useCallback(()=>n(e.getState()),[e,n]),Ul.useCallback(()=>n(e.getInitialState()),[e,n]));return Ul.useDebugValue(i),i}const Sx=e=>{const n=dN(e),i=l=>pN(n,l);return Object.assign(i,n),i},mN=(e=>e?Sx(e):Sx);function it(e,n,i="agent"){return e[n]||(e[n]={name:n,status:"pending",type:i,activity:[]}),e[n].activity||(e[n].activity=[]),e[n]}function xu(e,n,i){it(e,n).activity.push(i)}function Xe(e,n){e[n]&&(e[n]={...e[n]})}function ro(e,n,i,l){const o=e[n];if(!(o!=null&&o.for_each_items))return;const s=o.for_each_items.find(u=>u.key===i);s&&s.activity.push(l)}const he=mN(e=>({workflowName:"",workflowStatus:"pending",workflowStartTime:null,workflowFailure:null,workflowFailedAgent:null,workflowYaml:null,conductorVersion:null,entryPoint:null,agents:[],routes:[],parallelGroups:[],forEachGroups:[],nodes:{},groupProgress:{},highlightedEdges:[],agentsCompleted:0,agentsTotal:0,totalCost:0,totalTokens:0,selectedNode:null,wsStatus:"connecting",eventLog:[],activityLog:[],workflowOutput:null,lastEventTime:null,isPaused:!1,replayMode:!1,replayEvents:[],replayPosition:0,replayTotalEvents:0,replayPlaying:!1,replaySpeed:1,_wsSend:null,setWsSend:n=>{e({_wsSend:n})},sendGateResponse:(n,i,l)=>{const o=he.getState()._wsSend;o&&o({type:"gate_response",agent_name:n,selected_value:i,additional_input:l||{}})},processEvent:n=>{const i=vu[n.type];e(l=>{const o={...l,nodes:{...l.nodes},groupProgress:{...l.groupProgress},eventLog:[...l.eventLog],activityLog:[...l.activityLog],lastEventTime:n.timestamp};i&&i(o,n.data,n.timestamp);const s=bu(n);s&&o.eventLog.push(s);const u=wu(n);return u&&o.activityLog.push(u),o})},replayState:n=>{e(i=>{const l={...i,agentsCompleted:0,totalCost:0,totalTokens:0,nodes:{},groupProgress:{},highlightedEdges:[],eventLog:[],activityLog:[],workflowOutput:null,workflowFailedAgent:null};for(const o of n){const s=vu[o.type];s&&s(l,o.data,o.timestamp);const u=bu(o);u&&l.eventLog.push(u);const f=wu(o);f&&l.activityLog.push(f),l.lastEventTime=o.timestamp}return l})},selectNode:n=>{e({selectedNode:n})},setReplayMode:n=>{e(i=>{const l={...i,replayMode:!0,replayEvents:n,replayTotalEvents:n.length,replayPosition:n.length,replayPlaying:!1,replaySpeed:1,agentsCompleted:0,totalCost:0,totalTokens:0,nodes:{},groupProgress:{},highlightedEdges:[],eventLog:[],activityLog:[],workflowOutput:null,workflowFailedAgent:null};for(const o of n){const s=vu[o.type];s&&s(l,o.data,o.timestamp);const u=bu(o);u&&l.eventLog.push(u);const f=wu(o);f&&l.activityLog.push(f),l.lastEventTime=o.timestamp}return l})},setReplayPosition:n=>{e(i=>{const l=i.replayEvents.slice(0,n),o={...i,replayPosition:n,agentsCompleted:0,totalCost:0,totalTokens:0,nodes:{},groupProgress:{},highlightedEdges:[],eventLog:[],activityLog:[],workflowOutput:null,workflowFailedAgent:null,workflowStatus:"pending",workflowStartTime:null,workflowName:"",workflowFailure:null,entryPoint:null,agents:[],routes:[],parallelGroups:[],forEachGroups:[],isPaused:!1,lastEventTime:null};for(const s of l){const u=vu[s.type];u&&u(o,s.data,s.timestamp);const f=bu(s);f&&o.eventLog.push(f);const d=wu(s);d&&o.activityLog.push(d),o.lastEventTime=s.timestamp}return o})},setReplayPlaying:n=>{e({replayPlaying:n})},setReplaySpeed:n=>{e({replaySpeed:n})},setWsStatus:n=>{e({wsStatus:n})},setEdgeHighlight:(n,i,l)=>{e(o=>({highlightedEdges:[...o.highlightedEdges.filter(s=>!(s.from===n&&s.to===i)),{from:n,to:i,state:l}]}))},clearEdgeHighlight:(n,i)=>{e(l=>({highlightedEdges:l.highlightedEdges.filter(o=>!(o.from===n&&o.to===i))}))}})),vu={workflow_started:(e,n,i)=>{const l=n;e.workflowStatus="running",e.workflowStartTime=i??Date.now()/1e3,e.workflowName=l.name||"",e.workflowYaml=l.yaml_source??null,e.conductorVersion=l.version??null,e.entryPoint=l.entry_point||null,e.agents=l.agents||[],e.routes=l.routes||[],e.parallelGroups=l.parallel_groups||[],e.forEachGroups=l.for_each_groups||[],it(e.nodes,"$start","start"),e.nodes.$start.status="running",Xe(e.nodes,"$start");const o=new Set,s=new Set;for(const u of e.parallelGroups){for(const f of u.agents)o.add(f);s.add(u.name),it(e.nodes,u.name,"parallel_group"),e.groupProgress[u.name]={total:u.agents.length,completed:0,failed:0};for(const f of u.agents)it(e.nodes,f,"agent")}for(const u of e.forEachGroups)s.add(u.name),it(e.nodes,u.name,"for_each_group"),e.groupProgress[u.name]={total:0,completed:0,failed:0};for(const u of e.agents)if(!s.has(u.name)&&!o.has(u.name)){const f=u.type||"agent";it(e.nodes,u.name,f),u.model&&(e.nodes[u.name].model=u.model),s.add(u.name)}e.agentsTotal=s.size},agent_started:(e,n,i)=>{const l=n,o=it(e.nodes,l.agent_name);o.iteration!=null&&(o.output!=null||o.error_type!=null)&&(o.iterationHistory||(o.iterationHistory=[]),o.iterationHistory.push({iteration:o.iteration,prompt:o.prompt,output:o.output,elapsed:o.elapsed,model:o.model,tokens:o.tokens,input_tokens:o.input_tokens,output_tokens:o.output_tokens,cost_usd:o.cost_usd,activity:o.activity,error_type:o.error_type,error_message:o.error_message})),o.status="running",o.iteration=l.iteration,o.startedAt=i??Date.now()/1e3,o.activity=[],l.context_window_max!=null&&(o.context_window_max=l.context_window_max),o.prompt=void 0,o.output=void 0,o.error_type=void 0,o.error_message=void 0,Xe(e.nodes,l.agent_name)},agent_completed:(e,n)=>{const i=n,l=it(e.nodes,i.agent_name);l.status="completed",e.agentsCompleted++,l.elapsed=i.elapsed,l.model=i.model,l.tokens=i.tokens,l.input_tokens=i.input_tokens,l.output_tokens=i.output_tokens,l.cost_usd=i.cost_usd,l.output=i.output,l.output_keys=i.output_keys,l.context_window_used=i.context_window_used,l.context_window_max=i.context_window_max,i.context_window_used!=null&&i.context_window_max!=null&&i.context_window_max>0&&(l.context_pct=Math.round(i.context_window_used/i.context_window_max*100)),i.cost_usd&&(e.totalCost+=i.cost_usd),i.tokens&&(e.totalTokens+=i.tokens),Xe(e.nodes,i.agent_name)},agent_failed:(e,n)=>{const i=n,l=it(e.nodes,i.agent_name);l.status="failed",l.elapsed=i.elapsed,l.error_type=i.error_type,l.error_message=i.message;for(const o of e.routes)o.to===i.agent_name&&(e.highlightedEdges=[...e.highlightedEdges.filter(s=>!(s.from===o.from&&s.to===o.to)),{from:o.from,to:o.to,state:"failed"}]);Xe(e.nodes,i.agent_name)},agent_prompt_rendered:(e,n)=>{var s;const i=n,l=n.item_key,o=it(e.nodes,i.agent_name);if(o.prompt=i.rendered_prompt,o.context_keys=i.context_keys,l){ro(e.nodes,i.agent_name,l,{type:"prompt",icon:"📝",label:"prompt",text:"Prompt rendered",detail:((s=i.rendered_prompt)==null?void 0:s.slice(0,500))||null});const u=e.nodes[i.agent_name];if(u!=null&&u.for_each_items){const f=u.for_each_items.find(d=>d.key===l);f&&(f.prompt=i.rendered_prompt)}}Xe(e.nodes,i.agent_name)},agent_reasoning:(e,n)=>{const i=n,l=n.item_key,o={type:"reasoning",icon:"💭",label:"thinking",text:i.content};xu(e.nodes,i.agent_name,o),l&&ro(e.nodes,i.agent_name,l,o),Xe(e.nodes,i.agent_name)},agent_tool_start:(e,n)=>{const i=n,l=n.item_key,o={type:"tool-start",icon:"🔧",label:"tool",text:i.tool_name,detail:i.arguments||null};xu(e.nodes,i.agent_name,o),l&&ro(e.nodes,i.agent_name,l,o),Xe(e.nodes,i.agent_name)},agent_tool_complete:(e,n)=>{const i=n,l=n.item_key,o={type:"tool-complete",icon:"✓",label:"result",text:i.tool_name||"done",detail:i.result||null};xu(e.nodes,i.agent_name,o),l&&ro(e.nodes,i.agent_name,l,o),Xe(e.nodes,i.agent_name)},agent_turn_start:(e,n)=>{const i=n,l=n.item_key,o={type:"turn",icon:"⏳",label:"turn",text:`Turn ${i.turn??"?"}`};xu(e.nodes,i.agent_name,o),l&&ro(e.nodes,i.agent_name,l,o),Xe(e.nodes,i.agent_name)},agent_message:(e,n)=>{const i=n,l=it(e.nodes,i.agent_name);l.latest_message=i.content,Xe(e.nodes,i.agent_name)},script_started:(e,n,i)=>{const l=n,o=it(e.nodes,l.agent_name);o.status="running",o.startedAt=i??Date.now()/1e3,Xe(e.nodes,l.agent_name)},script_completed:(e,n)=>{const i=n,l=it(e.nodes,i.agent_name);l.status="completed",e.agentsCompleted++,l.elapsed=i.elapsed,l.stdout=i.stdout,l.stderr=i.stderr,l.exit_code=i.exit_code,Xe(e.nodes,i.agent_name)},script_failed:(e,n)=>{const i=n,l=it(e.nodes,i.agent_name);l.status="failed",l.elapsed=i.elapsed,l.error_type=i.error_type,l.error_message=i.message,Xe(e.nodes,i.agent_name)},gate_presented:(e,n)=>{const i=n,l=it(e.nodes,i.agent_name);l.status="waiting",l.options=i.options,l.option_details=i.option_details,l.prompt=i.prompt,Xe(e.nodes,i.agent_name)},gate_resolved:(e,n)=>{const i=n,l=it(e.nodes,i.agent_name);l.status="completed",e.agentsCompleted++,l.selected_option=i.selected_option,l.route=i.route,l.additional_input=i.additional_input,Xe(e.nodes,i.agent_name)},route_taken:(e,n)=>{const i=n;e.highlightedEdges=[...e.highlightedEdges.filter(l=>!(l.from===i.from_agent&&l.to===i.to_agent)),{from:i.from_agent,to:i.to_agent,state:"taken"}]},parallel_started:(e,n)=>{const i=n,l=it(e.nodes,i.group_name,"parallel_group");l.status="running",e.groupProgress[i.group_name]&&(e.groupProgress[i.group_name].total=i.agents.length,e.groupProgress[i.group_name].completed=0,e.groupProgress[i.group_name].failed=0),Xe(e.nodes,i.group_name)},parallel_agent_completed:(e,n)=>{const i=n;e.groupProgress[i.group_name]&&e.groupProgress[i.group_name].completed++;const l=it(e.nodes,i.agent_name);l.status="completed",l.elapsed=i.elapsed,l.model=i.model,l.tokens=i.tokens,l.cost_usd=i.cost_usd,l.context_window_used=i.context_window_used,l.context_window_max=i.context_window_max,i.context_window_used!=null&&i.context_window_max!=null&&i.context_window_max>0&&(l.context_pct=Math.round(i.context_window_used/i.context_window_max*100)),i.cost_usd&&(e.totalCost+=i.cost_usd),i.tokens&&(e.totalTokens+=i.tokens),Xe(e.nodes,i.agent_name),Xe(e.nodes,i.group_name)},parallel_agent_failed:(e,n)=>{const i=n;e.groupProgress[i.group_name]&&e.groupProgress[i.group_name].failed++;const l=it(e.nodes,i.agent_name);l.status="failed",l.elapsed=i.elapsed,l.error_type=i.error_type,l.error_message=i.message,Xe(e.nodes,i.agent_name),Xe(e.nodes,i.group_name)},parallel_completed:(e,n)=>{const i=n;e.agentsCompleted++;const l=it(e.nodes,i.group_name,"parallel_group");l.status=i.failure_count===0?"completed":"failed",Xe(e.nodes,i.group_name)},for_each_started:(e,n)=>{const i=n,l=it(e.nodes,i.group_name,"for_each_group");l.status="running",l.for_each_items=[],e.groupProgress[i.group_name]&&(e.groupProgress[i.group_name].total=i.item_count,e.groupProgress[i.group_name].completed=0,e.groupProgress[i.group_name].failed=0),Xe(e.nodes,i.group_name)},for_each_item_started:(e,n)=>{const i=n,l=it(e.nodes,i.group_name,"for_each_group");l.for_each_items||(l.for_each_items=[]),l.for_each_items.push({key:i.item_key??String(i.index),index:i.index,status:"running",activity:[]}),Xe(e.nodes,i.group_name)},for_each_item_completed:(e,n)=>{const i=n;e.groupProgress[i.group_name]&&e.groupProgress[i.group_name].completed++;const l=it(e.nodes,i.group_name,"for_each_group");if(l.for_each_items){const o=i.item_key??String(i.index),s=l.for_each_items.find(u=>u.key===o);s&&(s.status="completed",s.elapsed=i.elapsed,s.tokens=i.tokens,s.cost_usd=i.cost_usd,s.output=i.output)}Xe(e.nodes,i.group_name)},for_each_item_failed:(e,n)=>{const i=n;e.groupProgress[i.group_name]&&e.groupProgress[i.group_name].failed++;const l=it(e.nodes,i.group_name,"for_each_group");if(l.for_each_items){const o=i.item_key??String(i.index),s=l.for_each_items.find(u=>u.key===o);s&&(s.status="failed",s.elapsed=i.elapsed,s.error_type=i.error_type,s.error_message=i.message)}Xe(e.nodes,i.group_name)},for_each_completed:(e,n)=>{const i=n;e.agentsCompleted++;const l=it(e.nodes,i.group_name,"for_each_group");l.status=(i.failure_count??0)===0?"completed":"failed",l.elapsed=i.elapsed,l.success_count=i.success_count,l.failure_count=i.failure_count,Xe(e.nodes,i.group_name)},workflow_completed:(e,n)=>{const i=n;e.workflowStatus="completed",e.isPaused=!1,e.workflowOutput=i.output??null,e.nodes.$end&&(e.nodes.$end.status="completed",Xe(e.nodes,"$end")),e.nodes.$start&&(e.nodes.$start.status="completed",Xe(e.nodes,"$start")),e.highlightedEdges=[]},workflow_failed:(e,n)=>{const i=n;if(e.workflowStatus="failed",e.isPaused=!1,e.workflowFailedAgent=i.agent_name||null,i.agent_name&&e.nodes[i.agent_name]){e.nodes[i.agent_name].status="failed",Xe(e.nodes,i.agent_name);for(const l of e.routes)l.to===i.agent_name&&(e.highlightedEdges=[...e.highlightedEdges.filter(o=>!(o.from===l.from&&o.to===l.to)),{from:l.from,to:l.to,state:"failed"}])}e.workflowFailure={error_type:i.error_type,message:i.message,elapsed_seconds:i.elapsed_seconds,timeout_seconds:i.timeout_seconds,current_agent:i.current_agent},e.nodes.$start&&(e.nodes.$start.status="completed",Xe(e.nodes,"$start"))},checkpoint_saved:(e,n)=>{const i=n;i.path&&e.workflowFailure&&(e.workflowFailure={...e.workflowFailure,checkpoint_path:i.path})},agent_paused:(e,n)=>{const i=n,l=it(e.nodes,i.agent_name);l.status="waiting",l.activity.push({type:"agent_paused",icon:"⏸",label:"Paused",text:"Agent paused — click Resume to re-execute"}),Xe(e.nodes,i.agent_name),e.isPaused=!0},agent_resumed:(e,n)=>{const i=n,l=it(e.nodes,i.agent_name);l.status="running",l.activity.push({type:"agent_resumed",icon:"▶",label:"Resumed",text:"Agent resumed — re-executing"}),Xe(e.nodes,i.agent_name),e.isPaused=!1}};function bu(e){var l,o;const n=e.timestamp,i=e.data;switch(e.type){case"workflow_started":return{timestamp:n,level:"info",source:"workflow",message:`Workflow "${i.name||""}" started`};case"agent_started":return{timestamp:n,level:"info",source:String(i.agent_name),message:`Agent started${i.iteration!=null?` (iteration ${i.iteration})`:""}`};case"agent_completed":return{timestamp:n,level:"success",source:String(i.agent_name),message:`Agent completed${i.elapsed!=null?` in ${Du(i.elapsed)}`:""}${i.tokens!=null?` · ${i.tokens.toLocaleString()} tokens`:""}${i.cost_usd!=null?` · $${i.cost_usd.toFixed(4)}`:""}`};case"agent_failed":return{timestamp:n,level:"error",source:String(i.agent_name),message:`Agent failed: ${i.message||i.error_type||"unknown error"}`};case"script_started":return{timestamp:n,level:"info",source:String(i.agent_name),message:"Script started"};case"script_completed":return{timestamp:n,level:"success",source:String(i.agent_name),message:`Script completed (exit ${i.exit_code??"?"})${i.elapsed!=null?` in ${Du(i.elapsed)}`:""}`};case"script_failed":return{timestamp:n,level:"error",source:String(i.agent_name),message:`Script failed: ${i.message||i.error_type||"unknown error"}`};case"gate_presented":return{timestamp:n,level:"warning",source:String(i.agent_name),message:"Waiting for human input…"};case"gate_resolved":return{timestamp:n,level:"success",source:String(i.agent_name),message:`Gate resolved → ${i.selected_option||"continue"}`};case"route_taken":return{timestamp:n,level:"debug",source:"router",message:`${i.from_agent} → ${i.to_agent}`};case"parallel_started":return{timestamp:n,level:"info",source:String(i.group_name),message:`Parallel group started (${((l=i.agents)==null?void 0:l.length)||"?"} agents)`};case"parallel_completed":return{timestamp:n,level:i.failure_count===0?"success":"error",source:String(i.group_name),message:`Parallel group completed${i.failure_count>0?` with ${i.failure_count} failure(s)`:""}`};case"for_each_started":return{timestamp:n,level:"info",source:String(i.group_name),message:`For-each started (${i.item_count} items)`};case"for_each_completed":return{timestamp:n,level:(i.failure_count??0)===0?"success":"error",source:String(i.group_name),message:`For-each completed · ${i.success_count} succeeded${i.failure_count>0?` · ${i.failure_count} failed`:""}`};case"workflow_completed":return{timestamp:n,level:"success",source:"workflow",message:`Workflow completed${i.elapsed!=null?` in ${Du(i.elapsed)}`:""}`};case"workflow_failed":return{timestamp:n,level:"error",source:"workflow",message:`Workflow failed: ${i.message||i.error_type||"unknown error"}`};case"checkpoint_saved":return{timestamp:n,level:"info",source:"workflow",message:`Checkpoint saved: ${((o=i.path)==null?void 0:o.split("/").pop())||"unknown"}`};case"agent_paused":return{timestamp:n,level:"warning",source:String(i.agent_name),message:"Agent paused — waiting for resume"};case"agent_resumed":return{timestamp:n,level:"info",source:String(i.agent_name),message:"Agent resumed — re-executing"};default:return null}}function Du(e){if(e<1)return`${(e*1e3).toFixed(0)}ms`;if(e<60)return`${e.toFixed(1)}s`;const n=Math.floor(e/60),i=(e%60).toFixed(0);return`${n}m ${i}s`}function wu(e){const n=e.timestamp,i=e.data;switch(e.type){case"agent_started":return{timestamp:n,source:String(i.agent_name),type:"turn",message:`Agent started${i.iteration!=null?` (iteration ${i.iteration})`:""}`};case"agent_prompt_rendered":return{timestamp:n,source:String(i.agent_name),type:"prompt",message:"Prompt rendered",detail:io(String(i.rendered_prompt||""),500)};case"agent_reasoning":return{timestamp:n,source:String(i.agent_name),type:"reasoning",message:String(i.content||"")};case"agent_tool_start":return{timestamp:n,source:String(i.agent_name),type:"tool-start",message:`→ ${i.tool_name}`,detail:i.arguments?io(String(i.arguments),300):null};case"agent_tool_complete":return{timestamp:n,source:String(i.agent_name),type:"tool-complete",message:`← ${i.tool_name||"done"}`,detail:i.result?io(String(i.result),300):null};case"agent_turn_start":return{timestamp:n,source:String(i.agent_name),type:"turn",message:`Turn ${i.turn??"?"}`};case"agent_message":return{timestamp:n,source:String(i.agent_name),type:"message",message:io(String(i.content||""),500)};case"agent_completed":return{timestamp:n,source:String(i.agent_name),type:"turn",message:`Completed${i.elapsed!=null?` in ${Du(i.elapsed)}`:""}${i.tokens!=null?` · ${i.tokens.toLocaleString()} tokens`:""}`};case"agent_failed":return{timestamp:n,source:String(i.agent_name),type:"turn",message:`Failed: ${i.message||i.error_type||"unknown"}`};case"script_started":return{timestamp:n,source:String(i.agent_name),type:"turn",message:"Script started"};case"script_completed":return{timestamp:n,source:String(i.agent_name),type:"tool-complete",message:`Script completed (exit ${i.exit_code??"?"})`,detail:i.stdout?io(String(i.stdout),300):null};case"script_failed":return{timestamp:n,source:String(i.agent_name),type:"turn",message:`Script failed: ${i.message||i.error_type||"unknown"}`};default:return null}}function io(e,n){return e.length<=n?e:e.slice(0,n)+"…"}function _x(e){const n=e.match(/^(\s*)/);return n?n[1].length:0}function gN(e){const n=new Map;for(let i=0;io)s=u;else break}s>i&&n.set(i,s)}return n}function yN(e){if(/^\s*#/.test(e))return b.jsx("span",{className:"text-emerald-500/70",children:e});const n=e.match(/^(\s*)(- )?([a-zA-Z_][\w.-]*)(:\s*)(.*)/);if(n){const[,l,o,s,u,f]=n;return b.jsxs("span",{children:[l,o??"",b.jsx("span",{className:"text-sky-400",children:s}),b.jsx("span",{className:"text-[var(--text-muted)]",children:u}),Ex(f)]})}const i=e.match(/^(\s*)(- )(.*)/);if(i){const[,l,o,s]=i;return b.jsxs("span",{children:[l,b.jsx("span",{className:"text-[var(--text-muted)]",children:o}),Ex(s)]})}return b.jsx("span",{children:e})}function Ex(e){if(!e)return"";const n=e.indexOf(" #"),i=n>=0?e.slice(0,n):e,l=n>=0?e.slice(n):"";let o=i;return/^(true|false|null|yes|no)$/i.test(i.trim())?o=b.jsx("span",{className:"text-amber-400",children:i}):/^\d+(\.\d+)?$/.test(i.trim())?o=b.jsx("span",{className:"text-amber-400",children:i}):/^["'].*["']$/.test(i.trim())?o=b.jsx("span",{className:"text-green-400",children:i}):(i.includes("|")||i.includes(">"))&&(o=b.jsx("span",{className:"text-[var(--text-secondary)]",children:i})),b.jsxs(b.Fragment,{children:[o,l&&b.jsx("span",{className:"text-emerald-500/70",children:l})]})}function xN({yaml:e,onClose:n}){const[i,l]=V.useState(new Set);V.useEffect(()=>{const d=h=>{h.key==="Escape"&&n()};return window.addEventListener("keydown",d),()=>window.removeEventListener("keydown",d)},[n]);const o=V.useMemo(()=>e.split(` -`),[e]),s=V.useMemo(()=>gN(o),[o]),u=V.useCallback(d=>{l(h=>{const m=new Set(h);return m.has(d)?m.delete(d):m.add(d),m})},[]),f=V.useMemo(()=>{const d=[];let h=-1;for(let m=0;mb.jsxs("div",{className:"flex",children:[b.jsx("span",{className:"inline-flex items-center justify-center flex-shrink-0",style:{width:"1.25rem"},children:m?b.jsx("button",{onClick:()=>u(d),className:"text-[var(--text-muted)] hover:text-[var(--text)] p-0 leading-none",style:{background:"none",border:"none",cursor:"pointer"},children:p?b.jsx(ia,{className:"w-3 h-3"}):b.jsx(Fi,{className:"w-3 h-3"})}):null}),b.jsxs("span",{className:"flex-1",children:[yN(h),p&&b.jsx("span",{className:"text-[var(--text-muted)] text-[11px] ml-2 px-1.5 py-0.5 rounded bg-[var(--surface-hover)] cursor-pointer",onClick:()=>u(d),children:"···"})]})]},d))})})]})]})}function vN(){const e=he(_=>_.workflowName),n=he(_=>_.workflowStatus),i=he(_=>_.isPaused),l=he(_=>_.workflowYaml),o=he(_=>_.conductorVersion),[s,u]=V.useState(!1),[f,d]=V.useState(!1),[h,m]=V.useState(!1),[p,y]=V.useState(!1),v=n==="running"||n==="pending";V.useEffect(()=>{i||(u(!1),d(!1),m(!1))},[i]);const w=async()=>{u(!0);try{await fetch("/api/stop",{method:"POST"})}catch(_){console.error("Failed to stop agent:",_),u(!1)}},k=async()=>{d(!0);try{await fetch("/api/resume",{method:"POST"})}catch(_){console.error("Failed to resume agent:",_),d(!1)}},S=async()=>{m(!0);try{await fetch("/api/kill",{method:"POST"})}catch(_){console.error("Failed to kill workflow:",_),m(!1)}};return b.jsxs("header",{className:"flex items-center justify-between px-4 py-2 bg-[var(--surface)] border-b border-[var(--border)] flex-shrink-0",children:[b.jsxs("div",{className:"flex items-center gap-2",children:[b.jsx(kb,{className:"w-4 h-4 text-[var(--running)]"}),b.jsx("h1",{className:"text-sm font-semibold text-[var(--text)]",children:"Conductor"}),e&&b.jsxs("span",{className:"text-sm text-[var(--text-muted)] font-normal",children:["— ",e]})]}),b.jsxs("div",{className:"flex items-center gap-3",children:[i?b.jsxs(b.Fragment,{children:[b.jsxs("button",{onClick:k,disabled:f,className:`flex items-center gap-1.5 px-2.5 py-1 text-xs font-medium rounded - bg-emerald-500/10 text-emerald-400 border border-emerald-500/20 - hover:bg-emerald-500/20 hover:border-emerald-500/30 - disabled:opacity-50 disabled:cursor-not-allowed - transition-colors`,title:"Re-execute the paused agent",children:[b.jsx(Vp,{className:"w-3 h-3"}),f?"Resuming...":"Resume"]}),b.jsxs("button",{onClick:S,disabled:h,className:`flex items-center gap-1.5 px-2.5 py-1 text-xs font-medium rounded - bg-red-500/10 text-red-400 border border-red-500/20 - hover:bg-red-500/20 hover:border-red-500/30 - disabled:opacity-50 disabled:cursor-not-allowed - transition-colors`,title:"Stop workflow entirely (checkpoint saved for CLI resume)",children:[b.jsx(Bo,{className:"w-3 h-3"}),h?"Killing...":"Kill"]})]}):v?b.jsxs("button",{onClick:w,disabled:s,className:`flex items-center gap-1.5 px-2.5 py-1 text-xs font-medium rounded - bg-red-500/10 text-red-400 border border-red-500/20 - hover:bg-red-500/20 hover:border-red-500/30 - disabled:opacity-50 disabled:cursor-not-allowed - transition-colors`,children:[b.jsx(Tb,{className:"w-3 h-3"}),s?"Stopping...":"Stop"]}):null,l&&b.jsxs("button",{onClick:()=>y(!0),className:`flex items-center gap-1.5 px-2.5 py-1 text-xs font-medium rounded - bg-[var(--surface-hover)] text-[var(--text-secondary)] border border-[var(--border)] - hover:text-[var(--text)] hover:bg-[var(--surface)] - transition-colors`,title:"View workflow YAML configuration",children:[b.jsx(K2,{className:"w-3 h-3"}),"YAML"]}),b.jsxs("a",{href:"/api/logs",download:"conductor-logs.json",className:`flex items-center gap-1.5 px-2.5 py-1 text-xs font-medium rounded - bg-[var(--surface-hover)] text-[var(--text-secondary)] border border-[var(--border)] - hover:text-[var(--text)] hover:bg-[var(--surface)] - transition-colors`,title:"Download full event log as JSON",children:[b.jsx(Q2,{className:"w-3 h-3"}),"Logs"]}),b.jsxs("span",{className:"text-xs text-[var(--text-muted)]",children:["v",o??"—"]})]}),p&&l&&b.jsx(xN,{yaml:l,onClose:()=>y(!1)})]})}function Ye(...e){return e.filter(Boolean).join(" ")}function ln(e){if(e==null)return"";if(e<60)return`${e.toFixed(1)}s`;const n=Math.floor(e/60),i=(e%60).toFixed(0);return`${n}m ${i}s`}function Wn(e){return e==null?"":e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}K`:`${e}`}function Zl(e){return e==null?"":`$${e.toFixed(4)}`}function zb(e){return e==null?"":typeof e=="string"?e:JSON.stringify(e,null,2)}function bN(e,n){if(n<=0)return`${e.toLocaleString()} tokens (limit unknown)`;const i=o=>o.toLocaleString(),l=(e/n*100).toFixed(1);return`${i(e)} / ${i(n)} (${l}%)`}function Ab(){const e=he(f=>f.workflowStatus),n=he(f=>f.workflowStartTime),i=he(f=>f.replayMode),l=he(f=>f.lastEventTime),[o,s]=V.useState("—"),u=V.useRef(null);return V.useEffect(()=>{if(n!=null){if(i){u.current&&(clearInterval(u.current),u.current=null),s(ln((l??n)-n));return}if(e==="running"){const f=()=>{const d=Date.now()/1e3-n;s(ln(d))};return f(),u.current=setInterval(f,500),()=>{u.current&&clearInterval(u.current)}}else(e==="completed"||e==="failed")&&u.current&&(clearInterval(u.current),u.current=null)}},[e,n,i,l]),o}function wN(){const e=he(k=>k.workflowStatus),n=he(k=>k.agentsCompleted),i=he(k=>k.agentsTotal),l=he(k=>k.totalCost),o=he(k=>k.totalTokens),s=he(k=>k.wsStatus),u=he(k=>k.workflowFailure),f=he(k=>k.lastEventTime),d=Ab(),[h,m]=V.useState(null);V.useEffect(()=>{if(e!=="running"||f==null){m(null);return}const k=()=>{m(Math.floor(Date.now()/1e3-f))};k();const S=setInterval(k,1e3);return()=>clearInterval(S)},[e,f]);const p=e==="failed",y=(()=>{switch(e){case"pending":return"Waiting for workflow…";case"running":return"Running";case"completed":return"Completed";case"failed":{if(!u)return"Failed";const k=u.error_type||"";return k==="MaxIterationsError"?"Failed: exceeded maximum iterations":k==="TimeoutError"?"Failed: workflow timed out":u.message?`Failed: ${u.message.length>60?u.message.slice(0,57)+"...":u.message}`:`Failed: ${k}`}}})(),v={pending:"bg-[var(--pending)]",running:"bg-[var(--running)] animate-pulse",completed:"bg-[var(--completed)]",failed:"bg-[var(--failed)]"}[e],w=(()=>{switch(s){case"connected":return b.jsxs("span",{className:"flex items-center gap-1 text-[var(--completed)]",children:[b.jsx(cN,{className:"w-3 h-3"}),b.jsx("span",{children:"Connected"})]});case"disconnected":return b.jsxs("span",{className:"flex items-center gap-1 text-[var(--failed)]",children:[b.jsx(uN,{className:"w-3 h-3"}),b.jsx("span",{children:"Disconnected"})]});case"reconnecting":return b.jsxs("span",{className:"flex items-center gap-1 text-[var(--waiting)]",children:[b.jsx(_o,{className:"w-3 h-3 animate-spin"}),b.jsx("span",{children:"Reconnecting\\u2026"})]});case"connecting":return b.jsxs("span",{className:"flex items-center gap-1 text-[var(--text-muted)]",children:[b.jsx(_o,{className:"w-3 h-3 animate-spin"}),b.jsx("span",{children:"Connecting\\u2026"})]})}})();return b.jsxs("footer",{className:Ye("flex items-center gap-4 px-4 py-1.5 border-t text-xs flex-shrink-0 transition-colors duration-300",p?"bg-red-950/50 border-red-500/30":"bg-[var(--surface)] border-[var(--border)]"),children:[b.jsx("span",{className:Ye("w-2 h-2 rounded-full flex-shrink-0",v)}),b.jsx("span",{className:Ye(p?"text-red-300":"text-[var(--text)]"),children:y}),i>0&&b.jsxs("span",{className:Ye(p?"text-red-400/60":"text-[var(--text-muted)]"),children:[n,"/",i," agents"]}),e!=="pending"&&b.jsx("span",{className:Ye("font-mono",p?"text-red-400/60":"text-[var(--text-muted)]"),children:d}),o>0&&b.jsxs("span",{className:Ye("flex items-center gap-1",p?"text-red-400/60":"text-[var(--text-muted)]"),title:"Total tokens used",children:[b.jsx(eN,{className:"w-3 h-3"}),b.jsx("span",{className:"font-mono",children:o.toLocaleString()})]}),l>0&&b.jsxs("span",{className:Ye("flex items-center gap-1",p?"text-red-400/60":"text-[var(--text-muted)]"),title:"Total cost",children:[b.jsx(F2,{className:"w-3 h-3"}),b.jsxs("span",{className:"font-mono",children:["$",l.toFixed(4)]})]}),h!=null&&h>=5&&b.jsxs("span",{className:Ye("flex items-center gap-1 font-mono",h>=60?"text-amber-400":"text-[var(--text-muted)]"),title:"Time since last event from the provider",children:[b.jsx(P2,{className:"w-3 h-3"}),b.jsx("span",{children:h>=60?`${Math.floor(h/60)}m ${h%60}s idle`:`${h}s idle`})]}),b.jsx("span",{className:"flex-1"}),w]})}const SN=[1,5,10,20,50];function _N(e,n){if(n===0||e.length===0)return"+0.0s";const i=e[0].timestamp,o=e[Math.min(n,e.length)-1].timestamp-i;if(o<60)return`+${o.toFixed(1)}s`;const s=Math.floor(o/60),u=o%60;return`+${s}m${u.toFixed(0)}s`}function EN(){const e=he(p=>p.replayPosition),n=he(p=>p.replayTotalEvents),i=he(p=>p.replayPlaying),l=he(p=>p.replaySpeed),o=he(p=>p.replayEvents),s=he(p=>p.setReplayPosition),u=he(p=>p.setReplayPlaying),f=he(p=>p.setReplaySpeed),d=p=>{const y=parseInt(p.target.value,10);s(y),i&&u(!1)},h=()=>{!i&&e>=n&&s(0),u(!i)},m=n>0?e/n*100:0;return b.jsxs("footer",{className:"flex items-center gap-3 px-4 py-1.5 border-t bg-[var(--surface)] border-[var(--border)] text-xs flex-shrink-0",children:[b.jsx("button",{onClick:h,className:"flex items-center justify-center w-6 h-6 rounded hover:bg-[var(--surface-hover)] text-[var(--text-secondary)] hover:text-[var(--text)] transition-colors",title:i?"Pause":"Play",children:i?b.jsx(nN,{className:"w-3.5 h-3.5"}):b.jsx(Vp,{className:"w-3.5 h-3.5"})}),b.jsxs("div",{className:"flex-1 relative flex items-center",children:[b.jsx("input",{type:"range",min:0,max:n,value:e,onChange:d,className:"w-full h-1 appearance-none rounded-full cursor-pointer",style:{background:`linear-gradient(to right, var(--accent) 0%, var(--accent) ${m}%, var(--border) ${m}%, var(--border) 100%)`,WebkitAppearance:"none"}}),b.jsx("style",{children:` - footer input[type="range"]::-webkit-slider-thumb { - -webkit-appearance: none; - width: 12px; - height: 12px; - border-radius: 50%; - background: var(--accent); - border: 2px solid var(--surface); - cursor: pointer; - box-shadow: 0 0 4px rgba(99, 102, 241, 0.4); - } - footer input[type="range"]::-moz-range-thumb { - width: 12px; - height: 12px; - border-radius: 50%; - background: var(--accent); - border: 2px solid var(--surface); - cursor: pointer; - box-shadow: 0 0 4px rgba(99, 102, 241, 0.4); - } - `})]}),b.jsx("span",{className:"text-[var(--text-muted)] font-mono whitespace-nowrap",children:_N(o,e)}),b.jsxs("span",{className:"text-[var(--text-muted)] font-mono whitespace-nowrap",children:["Event ",e,"/",n]}),b.jsx("div",{className:"flex items-center gap-0.5",children:SN.map(p=>b.jsxs("button",{onClick:()=>f(p),className:Ye("px-1.5 py-0.5 rounded text-xs font-mono transition-colors",l===p?"bg-[var(--accent)] text-white":"text-[var(--text-muted)] hover:text-[var(--text-secondary)] hover:bg-[var(--surface-hover)]"),children:[p,"×"]},p))})]})}const ac=V.createContext(null);ac.displayName="PanelGroupContext";const gt={group:"data-panel-group",groupDirection:"data-panel-group-direction",groupId:"data-panel-group-id",panel:"data-panel",panelCollapsible:"data-panel-collapsible",panelId:"data-panel-id",panelSize:"data-panel-size",resizeHandle:"data-resize-handle",resizeHandleActive:"data-resize-handle-active",resizeHandleEnabled:"data-panel-resize-handle-enabled",resizeHandleId:"data-panel-resize-handle-id",resizeHandleState:"data-resize-handle-state"},Yp=10,qi=V.useLayoutEffect,Nx=R2.useId,NN=typeof Nx=="function"?Nx:()=>null;let kN=0;function Gp(e=null){const n=NN(),i=V.useRef(e||n||null);return i.current===null&&(i.current=""+kN++),e??i.current}function Mb({children:e,className:n="",collapsedSize:i,collapsible:l,defaultSize:o,forwardedRef:s,id:u,maxSize:f,minSize:d,onCollapse:h,onExpand:m,onResize:p,order:y,style:v,tagName:w="div",...k}){const S=V.useContext(ac);if(S===null)throw Error("Panel components must be rendered within a PanelGroup container");const{collapsePanel:_,expandPanel:z,getPanelSize:E,getPanelStyle:A,groupId:B,isPanelCollapsed:T,reevaluatePanelConstraints:q,registerPanel:M,resizePanel:D,unregisterPanel:X}=S,H=Gp(u),I=V.useRef({callbacks:{onCollapse:h,onExpand:m,onResize:p},constraints:{collapsedSize:i,collapsible:l,defaultSize:o,maxSize:f,minSize:d},id:H,idIsFromProps:u!==void 0,order:y});V.useRef({didLogMissingDefaultSizeWarning:!1}),qi(()=>{const{callbacks:L,constraints:G}=I.current,R={...G};I.current.id=H,I.current.idIsFromProps=u!==void 0,I.current.order=y,L.onCollapse=h,L.onExpand=m,L.onResize=p,G.collapsedSize=i,G.collapsible=l,G.defaultSize=o,G.maxSize=f,G.minSize=d,(R.collapsedSize!==G.collapsedSize||R.collapsible!==G.collapsible||R.maxSize!==G.maxSize||R.minSize!==G.minSize)&&q(I.current,R)}),qi(()=>{const L=I.current;return M(L),()=>{X(L)}},[y,H,M,X]),V.useImperativeHandle(s,()=>({collapse:()=>{_(I.current)},expand:L=>{z(I.current,L)},getId(){return H},getSize(){return E(I.current)},isCollapsed(){return T(I.current)},isExpanded(){return!T(I.current)},resize:L=>{D(I.current,L)}}),[_,z,E,T,H,D]);const ee=A(I.current,o);return V.createElement(w,{...k,children:e,className:n,id:H,style:{...ee,...v},[gt.groupId]:B,[gt.panel]:"",[gt.panelCollapsible]:l||void 0,[gt.panelId]:H,[gt.panelSize]:parseFloat(""+ee.flexGrow).toFixed(1)})}const fo=V.forwardRef((e,n)=>V.createElement(Mb,{...e,forwardedRef:n}));Mb.displayName="Panel";fo.displayName="forwardRef(Panel)";let mp=null,Lu=-1,ci=null;function CN(e,n){if(n){const i=(n&Lb)!==0,l=(n&Hb)!==0,o=(n&Bb)!==0,s=(n&qb)!==0;if(i)return o?"se-resize":s?"ne-resize":"e-resize";if(l)return o?"sw-resize":s?"nw-resize":"w-resize";if(o)return"s-resize";if(s)return"n-resize"}switch(e){case"horizontal":return"ew-resize";case"intersection":return"move";case"vertical":return"ns-resize"}}function TN(){ci!==null&&(document.head.removeChild(ci),mp=null,ci=null,Lu=-1)}function Yd(e,n){var i,l;const o=CN(e,n);if(mp!==o){if(mp=o,ci===null&&(ci=document.createElement("style"),document.head.appendChild(ci)),Lu>=0){var s;(s=ci.sheet)===null||s===void 0||s.removeRule(Lu)}Lu=(i=(l=ci.sheet)===null||l===void 0?void 0:l.insertRule(`*{cursor: ${o} !important;}`))!==null&&i!==void 0?i:-1}}function jb(e){return e.type==="keydown"}function Ob(e){return e.type.startsWith("pointer")}function Rb(e){return e.type.startsWith("mouse")}function oc(e){if(Ob(e)){if(e.isPrimary)return{x:e.clientX,y:e.clientY}}else if(Rb(e))return{x:e.clientX,y:e.clientY};return{x:1/0,y:1/0}}function zN(){if(typeof matchMedia=="function")return matchMedia("(pointer:coarse)").matches?"coarse":"fine"}function AN(e,n,i){return e.xn.x&&e.yn.y}function MN(e,n){if(e===n)throw new Error("Cannot compare node with itself");const i={a:Tx(e),b:Tx(n)};let l;for(;i.a.at(-1)===i.b.at(-1);)e=i.a.pop(),n=i.b.pop(),l=e;Re(l,"Stacking order can only be calculated for elements with a common ancestor");const o={a:Cx(kx(i.a)),b:Cx(kx(i.b))};if(o.a===o.b){const s=l.childNodes,u={a:i.a.at(-1),b:i.b.at(-1)};let f=s.length;for(;f--;){const d=s[f];if(d===u.a)return 1;if(d===u.b)return-1}}return Math.sign(o.a-o.b)}const jN=/\b(?:position|zIndex|opacity|transform|webkitTransform|mixBlendMode|filter|webkitFilter|isolation)\b/;function ON(e){var n;const i=getComputedStyle((n=Db(e))!==null&&n!==void 0?n:e).display;return i==="flex"||i==="inline-flex"}function RN(e){const n=getComputedStyle(e);return!!(n.position==="fixed"||n.zIndex!=="auto"&&(n.position!=="static"||ON(e))||+n.opacity<1||"transform"in n&&n.transform!=="none"||"webkitTransform"in n&&n.webkitTransform!=="none"||"mixBlendMode"in n&&n.mixBlendMode!=="normal"||"filter"in n&&n.filter!=="none"||"webkitFilter"in n&&n.webkitFilter!=="none"||"isolation"in n&&n.isolation==="isolate"||jN.test(n.willChange)||n.webkitOverflowScrolling==="touch")}function kx(e){let n=e.length;for(;n--;){const i=e[n];if(Re(i,"Missing node"),RN(i))return i}return null}function Cx(e){return e&&Number(getComputedStyle(e).zIndex)||0}function Tx(e){const n=[];for(;e;)n.push(e),e=Db(e);return n}function Db(e){const{parentNode:n}=e;return n&&n instanceof ShadowRoot?n.host:n}const Lb=1,Hb=2,Bb=4,qb=8,DN=zN()==="coarse";let In=[],$l=!1,Li=new Map,sc=new Map;const Eo=new Set;function LN(e,n,i,l,o){var s;const{ownerDocument:u}=n,f={direction:i,element:n,hitAreaMargins:l,setResizeHandlerState:o},d=(s=Li.get(u))!==null&&s!==void 0?s:0;return Li.set(u,d+1),Eo.add(f),Gu(),function(){var m;sc.delete(e),Eo.delete(f);const p=(m=Li.get(u))!==null&&m!==void 0?m:1;if(Li.set(u,p-1),Gu(),p===1&&Li.delete(u),In.includes(f)){const y=In.indexOf(f);y>=0&&In.splice(y,1),Xp(),o("up",!0,null)}}}function HN(e){const{target:n}=e,{x:i,y:l}=oc(e);$l=!0,$p({target:n,x:i,y:l}),Gu(),In.length>0&&($u("down",e),e.preventDefault(),Ub(n)||e.stopImmediatePropagation())}function Gd(e){const{x:n,y:i}=oc(e);if($l&&e.buttons===0&&($l=!1,$u("up",e)),!$l){const{target:l}=e;$p({target:l,x:n,y:i})}$u("move",e),Xp(),In.length>0&&e.preventDefault()}function $d(e){const{target:n}=e,{x:i,y:l}=oc(e);sc.clear(),$l=!1,In.length>0&&(e.preventDefault(),Ub(n)||e.stopImmediatePropagation()),$u("up",e),$p({target:n,x:i,y:l}),Xp(),Gu()}function Ub(e){let n=e;for(;n;){if(n.hasAttribute(gt.resizeHandle))return!0;n=n.parentElement}return!1}function $p({target:e,x:n,y:i}){In.splice(0);let l=null;(e instanceof HTMLElement||e instanceof SVGElement)&&(l=e),Eo.forEach(o=>{const{element:s,hitAreaMargins:u}=o,f=s.getBoundingClientRect(),{bottom:d,left:h,right:m,top:p}=f,y=DN?u.coarse:u.fine;if(n>=h-y&&n<=m+y&&i>=p-y&&i<=d+y){if(l!==null&&document.contains(l)&&s!==l&&!s.contains(l)&&!l.contains(s)&&MN(l,s)>0){let w=l,k=!1;for(;w&&!w.contains(s);){if(AN(w.getBoundingClientRect(),f)){k=!0;break}w=w.parentElement}if(k)return}In.push(o)}})}function Xd(e,n){sc.set(e,n)}function Xp(){let e=!1,n=!1;In.forEach(l=>{const{direction:o}=l;o==="horizontal"?e=!0:n=!0});let i=0;sc.forEach(l=>{i|=l}),e&&n?Yd("intersection",i):e?Yd("horizontal",i):n?Yd("vertical",i):TN()}let Pd=new AbortController;function Gu(){Pd.abort(),Pd=new AbortController;const e={capture:!0,signal:Pd.signal};Eo.size&&($l?(In.length>0&&Li.forEach((n,i)=>{const{body:l}=i;n>0&&(l.addEventListener("contextmenu",$d,e),l.addEventListener("pointerleave",Gd,e),l.addEventListener("pointermove",Gd,e))}),window.addEventListener("pointerup",$d,e),window.addEventListener("pointercancel",$d,e)):Li.forEach((n,i)=>{const{body:l}=i;n>0&&(l.addEventListener("pointerdown",HN,e),l.addEventListener("pointermove",Gd,e))}))}function $u(e,n){Eo.forEach(i=>{const{setResizeHandlerState:l}=i,o=In.includes(i);l(e,o,n)})}function BN(){const[e,n]=V.useState(0);return V.useCallback(()=>n(i=>i+1),[])}function Re(e,n){if(!e)throw console.error(n),Error(n)}function Vi(e,n,i=Yp){return e.toFixed(i)===n.toFixed(i)?0:e>n?1:-1}function kr(e,n,i=Yp){return Vi(e,n,i)===0}function yn(e,n,i){return Vi(e,n,i)===0}function qN(e,n,i){if(e.length!==n.length)return!1;for(let l=0;l0&&(e=e<0?0-_:_)}}}{const p=e<0?f:d,y=i[p];Re(y,`No panel constraints found for index ${p}`);const{collapsedSize:v=0,collapsible:w,minSize:k=0}=y;if(w){const S=n[p];if(Re(S!=null,`Previous layout not found for panel index ${p}`),yn(S,k)){const _=S-v;Vi(_,Math.abs(e))>0&&(e=e<0?0-_:_)}}}}{const p=e<0?1:-1;let y=e<0?d:f,v=0;for(;;){const k=n[y];Re(k!=null,`Previous layout not found for panel index ${y}`);const _=Il({panelConstraints:i,panelIndex:y,size:100})-k;if(v+=_,y+=p,y<0||y>=i.length)break}const w=Math.min(Math.abs(e),Math.abs(v));e=e<0?0-w:w}{let y=e<0?f:d;for(;y>=0&&y=0))break;e<0?y--:y++}}if(qN(o,u))return o;{const p=e<0?d:f,y=n[p];Re(y!=null,`Previous layout not found for panel index ${p}`);const v=y+h,w=Il({panelConstraints:i,panelIndex:p,size:v});if(u[p]=w,!yn(w,v)){let k=v-w,_=e<0?d:f;for(;_>=0&&_0?_--:_++}}}const m=u.reduce((p,y)=>y+p,0);return yn(m,100)?u:o}function UN({layout:e,panelsArray:n,pivotIndices:i}){let l=0,o=100,s=0,u=0;const f=i[0];Re(f!=null,"No pivot index found"),n.forEach((p,y)=>{const{constraints:v}=p,{maxSize:w=100,minSize:k=0}=v;y===f?(l=k,o=w):(s+=k,u+=w)});const d=Math.min(o,100-s),h=Math.max(l,100-u),m=e[f];return{valueMax:d,valueMin:h,valueNow:m}}function No(e,n=document){return Array.from(n.querySelectorAll(`[${gt.resizeHandleId}][data-panel-group-id="${e}"]`))}function Ib(e,n,i=document){const o=No(e,i).findIndex(s=>s.getAttribute(gt.resizeHandleId)===n);return o??null}function Vb(e,n,i){const l=Ib(e,n,i);return l!=null?[l,l+1]:[-1,-1]}function Yb(e,n=document){var i;if(n instanceof HTMLElement&&(n==null||(i=n.dataset)===null||i===void 0?void 0:i.panelGroupId)==e)return n;const l=n.querySelector(`[data-panel-group][data-panel-group-id="${e}"]`);return l||null}function uc(e,n=document){const i=n.querySelector(`[${gt.resizeHandleId}="${e}"]`);return i||null}function IN(e,n,i,l=document){var o,s,u,f;const d=uc(n,l),h=No(e,l),m=d?h.indexOf(d):-1,p=(o=(s=i[m])===null||s===void 0?void 0:s.id)!==null&&o!==void 0?o:null,y=(u=(f=i[m+1])===null||f===void 0?void 0:f.id)!==null&&u!==void 0?u:null;return[p,y]}function VN({committedValuesRef:e,eagerValuesRef:n,groupId:i,layout:l,panelDataArray:o,panelGroupElement:s,setLayout:u}){V.useRef({didWarnAboutMissingResizeHandle:!1}),qi(()=>{if(!s)return;const f=No(i,s);for(let d=0;d{f.forEach((d,h)=>{d.removeAttribute("aria-controls"),d.removeAttribute("aria-valuemax"),d.removeAttribute("aria-valuemin"),d.removeAttribute("aria-valuenow")})}},[i,l,o,s]),V.useEffect(()=>{if(!s)return;const f=n.current;Re(f,"Eager values not found");const{panelDataArray:d}=f,h=Yb(i,s);Re(h!=null,`No group found for id "${i}"`);const m=No(i,s);Re(m,`No resize handles found for group id "${i}"`);const p=m.map(y=>{const v=y.getAttribute(gt.resizeHandleId);Re(v,"Resize handle element has no handle id attribute");const[w,k]=IN(i,v,d,s);if(w==null||k==null)return()=>{};const S=_=>{if(!_.defaultPrevented)switch(_.key){case"Enter":{_.preventDefault();const z=d.findIndex(E=>E.id===w);if(z>=0){const E=d[z];Re(E,`No panel data found for index ${z}`);const A=l[z],{collapsedSize:B=0,collapsible:T,minSize:q=0}=E.constraints;if(A!=null&&T){const M=ho({delta:yn(A,B)?q-B:B-A,initialLayout:l,panelConstraints:d.map(D=>D.constraints),pivotIndices:Vb(i,v,s),prevLayout:l,trigger:"keyboard"});l!==M&&u(M)}}break}}};return y.addEventListener("keydown",S),()=>{y.removeEventListener("keydown",S)}});return()=>{p.forEach(y=>y())}},[s,e,n,i,l,o,u])}function zx(e,n){if(e.length!==n.length)return!1;for(let i=0;is.constraints);let l=0,o=100;for(let s=0;s{const s=e[o];Re(s,`Panel data not found for index ${o}`);const{callbacks:u,constraints:f,id:d}=s,{collapsedSize:h=0,collapsible:m}=f,p=i[d];if(p==null||l!==p){i[d]=l;const{onCollapse:y,onExpand:v,onResize:w}=u;w&&w(l,p),m&&(y||v)&&(v&&(p==null||kr(p,h))&&!kr(l,h)&&v(),y&&(p==null||!kr(p,h))&&kr(l,h)&&y())}})}function Su(e,n){if(e.length!==n.length)return!1;for(let i=0;i{i!==null&&clearTimeout(i),i=setTimeout(()=>{e(...o)},n)}}function Ax(e){try{if(typeof localStorage<"u")e.getItem=n=>localStorage.getItem(n),e.setItem=(n,i)=>{localStorage.setItem(n,i)};else throw new Error("localStorage not supported in this environment")}catch(n){console.error(n),e.getItem=()=>null,e.setItem=()=>{}}}function $b(e){return`react-resizable-panels:${e}`}function Xb(e){return e.map(n=>{const{constraints:i,id:l,idIsFromProps:o,order:s}=n;return o?l:s?`${s}:${JSON.stringify(i)}`:JSON.stringify(i)}).sort((n,i)=>n.localeCompare(i)).join(",")}function Pb(e,n){try{const i=$b(e),l=n.getItem(i);if(l){const o=JSON.parse(l);if(typeof o=="object"&&o!=null)return o}}catch{}return null}function FN(e,n,i){var l,o;const s=(l=Pb(e,i))!==null&&l!==void 0?l:{},u=Xb(n);return(o=s[u])!==null&&o!==void 0?o:null}function QN(e,n,i,l,o){var s;const u=$b(e),f=Xb(n),d=(s=Pb(e,o))!==null&&s!==void 0?s:{};d[f]={expandToSizes:Object.fromEntries(i.entries()),layout:l};try{o.setItem(u,JSON.stringify(d))}catch(h){console.error(h)}}function Mx({layout:e,panelConstraints:n}){const i=[...e],l=i.reduce((s,u)=>s+u,0);if(i.length!==n.length)throw Error(`Invalid ${n.length} panel layout: ${i.map(s=>`${s}%`).join(", ")}`);if(!yn(l,100)&&i.length>0)for(let s=0;s(Ax(po),po.getItem(e)),setItem:(e,n)=>{Ax(po),po.setItem(e,n)}},jx={};function Fb({autoSaveId:e=null,children:n,className:i="",direction:l,forwardedRef:o,id:s=null,onLayout:u=null,keyboardResizeBy:f=null,storage:d=po,style:h,tagName:m="div",...p}){const y=Gp(s),v=V.useRef(null),[w,k]=V.useState(null),[S,_]=V.useState([]),z=BN(),E=V.useRef({}),A=V.useRef(new Map),B=V.useRef(0),T=V.useRef({autoSaveId:e,direction:l,dragState:w,id:y,keyboardResizeBy:f,onLayout:u,storage:d}),q=V.useRef({layout:S,panelDataArray:[],panelDataArrayChanged:!1});V.useRef({didLogIdAndOrderWarning:!1,didLogPanelConstraintsWarning:!1,prevPanelIds:[]}),V.useImperativeHandle(o,()=>({getId:()=>T.current.id,getLayout:()=>{const{layout:N}=q.current;return N},setLayout:N=>{const{onLayout:Y}=T.current,{layout:F,panelDataArray:K}=q.current,ne=Mx({layout:N,panelConstraints:K.map(re=>re.constraints)});zx(F,ne)||(_(ne),q.current.layout=ne,Y&&Y(ne),Dl(K,ne,E.current))}}),[]),qi(()=>{T.current.autoSaveId=e,T.current.direction=l,T.current.dragState=w,T.current.id=y,T.current.onLayout=u,T.current.storage=d}),VN({committedValuesRef:T,eagerValuesRef:q,groupId:y,layout:S,panelDataArray:q.current.panelDataArray,setLayout:_,panelGroupElement:v.current}),V.useEffect(()=>{const{panelDataArray:N}=q.current;if(e){if(S.length===0||S.length!==N.length)return;let Y=jx[e];Y==null&&(Y=PN(QN,ZN),jx[e]=Y);const F=[...N],K=new Map(A.current);Y(e,F,K,S,d)}},[e,S,d]),V.useEffect(()=>{});const M=V.useCallback(N=>{const{onLayout:Y}=T.current,{layout:F,panelDataArray:K}=q.current;if(N.constraints.collapsible){const ne=K.map(ve=>ve.constraints),{collapsedSize:re=0,panelSize:se,pivotIndices:ye}=Ri(K,N,F);if(Re(se!=null,`Panel size not found for panel "${N.id}"`),!kr(se,re)){A.current.set(N.id,se);const xe=ql(K,N)===K.length-1?se-re:re-se,pe=ho({delta:xe,initialLayout:F,panelConstraints:ne,pivotIndices:ye,prevLayout:F,trigger:"imperative-api"});Su(F,pe)||(_(pe),q.current.layout=pe,Y&&Y(pe),Dl(K,pe,E.current))}}},[]),D=V.useCallback((N,Y)=>{const{onLayout:F}=T.current,{layout:K,panelDataArray:ne}=q.current;if(N.constraints.collapsible){const re=ne.map(_e=>_e.constraints),{collapsedSize:se=0,panelSize:ye=0,minSize:ve=0,pivotIndices:xe}=Ri(ne,N,K),pe=Y??ve;if(kr(ye,se)){const _e=A.current.get(N.id),Me=_e!=null&&_e>=pe?_e:pe,st=ql(ne,N)===ne.length-1?ye-Me:Me-ye,We=ho({delta:st,initialLayout:K,panelConstraints:re,pivotIndices:xe,prevLayout:K,trigger:"imperative-api"});Su(K,We)||(_(We),q.current.layout=We,F&&F(We),Dl(ne,We,E.current))}}},[]),X=V.useCallback(N=>{const{layout:Y,panelDataArray:F}=q.current,{panelSize:K}=Ri(F,N,Y);return Re(K!=null,`Panel size not found for panel "${N.id}"`),K},[]),H=V.useCallback((N,Y)=>{const{panelDataArray:F}=q.current,K=ql(F,N);return XN({defaultSize:Y,dragState:w,layout:S,panelData:F,panelIndex:K})},[w,S]),I=V.useCallback(N=>{const{layout:Y,panelDataArray:F}=q.current,{collapsedSize:K=0,collapsible:ne,panelSize:re}=Ri(F,N,Y);return Re(re!=null,`Panel size not found for panel "${N.id}"`),ne===!0&&kr(re,K)},[]),ee=V.useCallback(N=>{const{layout:Y,panelDataArray:F}=q.current,{collapsedSize:K=0,collapsible:ne,panelSize:re}=Ri(F,N,Y);return Re(re!=null,`Panel size not found for panel "${N.id}"`),!ne||Vi(re,K)>0},[]),L=V.useCallback(N=>{const{panelDataArray:Y}=q.current;Y.push(N),Y.sort((F,K)=>{const ne=F.order,re=K.order;return ne==null&&re==null?0:ne==null?-1:re==null?1:ne-re}),q.current.panelDataArrayChanged=!0,z()},[z]);qi(()=>{if(q.current.panelDataArrayChanged){q.current.panelDataArrayChanged=!1;const{autoSaveId:N,onLayout:Y,storage:F}=T.current,{layout:K,panelDataArray:ne}=q.current;let re=null;if(N){const ye=FN(N,ne,F);ye&&(A.current=new Map(Object.entries(ye.expandToSizes)),re=ye.layout)}re==null&&(re=$N({panelDataArray:ne}));const se=Mx({layout:re,panelConstraints:ne.map(ye=>ye.constraints)});zx(K,se)||(_(se),q.current.layout=se,Y&&Y(se),Dl(ne,se,E.current))}}),qi(()=>{const N=q.current;return()=>{N.layout=[]}},[]);const G=V.useCallback(N=>{let Y=!1;const F=v.current;return F&&window.getComputedStyle(F,null).getPropertyValue("direction")==="rtl"&&(Y=!0),function(ne){ne.preventDefault();const re=v.current;if(!re)return()=>null;const{direction:se,dragState:ye,id:ve,keyboardResizeBy:xe,onLayout:pe}=T.current,{layout:_e,panelDataArray:Me}=q.current,{initialLayout:Ce}=ye??{},st=Vb(ve,N,re);let We=GN(ne,N,se,ye,xe,re);const zt=se==="horizontal";zt&&Y&&(We=-We);const Ut=Me.map(Mn=>Mn.constraints),Rt=ho({delta:We,initialLayout:Ce??_e,panelConstraints:Ut,pivotIndices:st,prevLayout:_e,trigger:jb(ne)?"keyboard":"mouse-or-touch"}),wn=!Su(_e,Rt);(Ob(ne)||Rb(ne))&&B.current!=We&&(B.current=We,!wn&&We!==0?zt?Xd(N,We<0?Lb:Hb):Xd(N,We<0?Bb:qb):Xd(N,0)),wn&&(_(Rt),q.current.layout=Rt,pe&&pe(Rt),Dl(Me,Rt,E.current))}},[]),R=V.useCallback((N,Y)=>{const{onLayout:F}=T.current,{layout:K,panelDataArray:ne}=q.current,re=ne.map(_e=>_e.constraints),{panelSize:se,pivotIndices:ye}=Ri(ne,N,K);Re(se!=null,`Panel size not found for panel "${N.id}"`);const xe=ql(ne,N)===ne.length-1?se-Y:Y-se,pe=ho({delta:xe,initialLayout:K,panelConstraints:re,pivotIndices:ye,prevLayout:K,trigger:"imperative-api"});Su(K,pe)||(_(pe),q.current.layout=pe,F&&F(pe),Dl(ne,pe,E.current))},[]),$=V.useCallback((N,Y)=>{const{layout:F,panelDataArray:K}=q.current,{collapsedSize:ne=0,collapsible:re}=Y,{collapsedSize:se=0,collapsible:ye,maxSize:ve=100,minSize:xe=0}=N.constraints,{panelSize:pe}=Ri(K,N,F);pe!=null&&(re&&ye&&kr(pe,ne)?kr(ne,se)||R(N,se):peve&&R(N,ve))},[R]),Z=V.useCallback((N,Y)=>{const{direction:F}=T.current,{layout:K}=q.current;if(!v.current)return;const ne=uc(N,v.current);Re(ne,`Drag handle element not found for id "${N}"`);const re=Gb(F,Y);k({dragHandleId:N,dragHandleRect:ne.getBoundingClientRect(),initialCursorPosition:re,initialLayout:K})},[]),J=V.useCallback(()=>{k(null)},[]),j=V.useCallback(N=>{const{panelDataArray:Y}=q.current,F=ql(Y,N);F>=0&&(Y.splice(F,1),delete E.current[N.id],q.current.panelDataArrayChanged=!0,z())},[z]),U=V.useMemo(()=>({collapsePanel:M,direction:l,dragState:w,expandPanel:D,getPanelSize:X,getPanelStyle:H,groupId:y,isPanelCollapsed:I,isPanelExpanded:ee,reevaluatePanelConstraints:$,registerPanel:L,registerResizeHandle:G,resizePanel:R,startDragging:Z,stopDragging:J,unregisterPanel:j,panelGroupElement:v.current}),[M,w,l,D,X,H,y,I,ee,$,L,G,R,Z,J,j]),P={display:"flex",flexDirection:l==="horizontal"?"row":"column",height:"100%",overflow:"hidden",width:"100%"};return V.createElement(ac.Provider,{value:U},V.createElement(m,{...p,children:n,className:i,id:s,ref:v,style:{...P,...h},[gt.group]:"",[gt.groupDirection]:l,[gt.groupId]:y}))}const gp=V.forwardRef((e,n)=>V.createElement(Fb,{...e,forwardedRef:n}));Fb.displayName="PanelGroup";gp.displayName="forwardRef(PanelGroup)";function ql(e,n){return e.findIndex(i=>i===n||i.id===n.id)}function Ri(e,n,i){const l=ql(e,n),s=l===e.length-1?[l-1,l]:[l,l+1],u=i[l];return{...n.constraints,panelSize:u,pivotIndices:s}}function KN({disabled:e,handleId:n,resizeHandler:i,panelGroupElement:l}){V.useEffect(()=>{if(e||i==null||l==null)return;const o=uc(n,l);if(o==null)return;const s=u=>{if(!u.defaultPrevented)switch(u.key){case"ArrowDown":case"ArrowLeft":case"ArrowRight":case"ArrowUp":case"End":case"Home":{u.preventDefault(),i(u);break}case"F6":{u.preventDefault();const f=o.getAttribute(gt.groupId);Re(f,`No group element found for id "${f}"`);const d=No(f,l),h=Ib(f,n,l);Re(h!==null,`No resize element found for id "${n}"`);const m=u.shiftKey?h>0?h-1:d.length-1:h+1{o.removeEventListener("keydown",s)}},[l,e,n,i])}function yp({children:e=null,className:n="",disabled:i=!1,hitAreaMargins:l,id:o,onBlur:s,onClick:u,onDragging:f,onFocus:d,onPointerDown:h,onPointerUp:m,style:p={},tabIndex:y=0,tagName:v="div",...w}){var k,S;const _=V.useRef(null),z=V.useRef({onClick:u,onDragging:f,onPointerDown:h,onPointerUp:m});V.useEffect(()=>{z.current.onClick=u,z.current.onDragging=f,z.current.onPointerDown=h,z.current.onPointerUp=m});const E=V.useContext(ac);if(E===null)throw Error("PanelResizeHandle components must be rendered within a PanelGroup container");const{direction:A,groupId:B,registerResizeHandle:T,startDragging:q,stopDragging:M,panelGroupElement:D}=E,X=Gp(o),[H,I]=V.useState("inactive"),[ee,L]=V.useState(!1),[G,R]=V.useState(null),$=V.useRef({state:H});qi(()=>{$.current.state=H}),V.useEffect(()=>{if(i)R(null);else{const U=T(X);R(()=>U)}},[i,X,T]);const Z=(k=l==null?void 0:l.coarse)!==null&&k!==void 0?k:15,J=(S=l==null?void 0:l.fine)!==null&&S!==void 0?S:5;V.useEffect(()=>{if(i||G==null)return;const U=_.current;Re(U,"Element ref not attached");let P=!1;return LN(X,U,A,{coarse:Z,fine:J},(Y,F,K)=>{if(!F){I("inactive");return}switch(Y){case"down":{I("drag"),P=!1,Re(K,'Expected event to be defined for "down" action'),q(X,K);const{onDragging:ne,onPointerDown:re}=z.current;ne==null||ne(!0),re==null||re();break}case"move":{const{state:ne}=$.current;P=!0,ne!=="drag"&&I("hover"),Re(K,'Expected event to be defined for "move" action'),G(K);break}case"up":{I("hover"),M();const{onClick:ne,onDragging:re,onPointerUp:se}=z.current;re==null||re(!1),se==null||se(),P||ne==null||ne();break}}})},[Z,A,i,J,T,X,G,q,M]),KN({disabled:i,handleId:X,resizeHandler:G,panelGroupElement:D});const j={touchAction:"none",userSelect:"none"};return V.createElement(v,{...w,children:e,className:n,id:o,onBlur:()=>{L(!1),s==null||s()},onFocus:()=>{L(!0),d==null||d()},ref:_,role:"separator",style:{...j,...p},tabIndex:y,[gt.groupDirection]:A,[gt.groupId]:B,[gt.resizeHandle]:"",[gt.resizeHandleActive]:H==="drag"?"pointer":ee?"keyboard":void 0,[gt.resizeHandleEnabled]:!i,[gt.resizeHandleId]:X,[gt.resizeHandleState]:H})}yp.displayName="PanelResizeHandle";function Tt(e){if(typeof e=="string"||typeof e=="number")return""+e;let n="";if(Array.isArray(e))for(let i=0,l;i{}};function cc(){for(var e=0,n=arguments.length,i={},l;e=0&&(l=i.slice(o+1),i=i.slice(0,o)),i&&!n.hasOwnProperty(i))throw new Error("unknown type: "+i);return{type:i,name:l}})}Hu.prototype=cc.prototype={constructor:Hu,on:function(e,n){var i=this._,l=WN(e+"",i),o,s=-1,u=l.length;if(arguments.length<2){for(;++s0)for(var i=new Array(o),l=0,o,s;l=0&&(n=e.slice(0,i))!=="xmlns"&&(e=e.slice(i+1)),Rx.hasOwnProperty(n)?{space:Rx[n],local:e}:e}function tk(e){return function(){var n=this.ownerDocument,i=this.namespaceURI;return i===xp&&n.documentElement.namespaceURI===xp?n.createElement(e):n.createElementNS(i,e)}}function nk(e){return function(){return this.ownerDocument.createElementNS(e.space,e.local)}}function Qb(e){var n=fc(e);return(n.local?nk:tk)(n)}function rk(){}function Pp(e){return e==null?rk:function(){return this.querySelector(e)}}function ik(e){typeof e!="function"&&(e=Pp(e));for(var n=this._groups,i=n.length,l=new Array(i),o=0;o=E&&(E=z+1);!(B=S[E])&&++E=0;)(u=l[o])&&(s&&u.compareDocumentPosition(s)^4&&s.parentNode.insertBefore(u,s),s=u);return this}function zk(e){e||(e=Ak);function n(p,y){return p&&y?e(p.__data__,y.__data__):!p-!y}for(var i=this._groups,l=i.length,o=new Array(l),s=0;sn?1:e>=n?0:NaN}function Mk(){var e=arguments[0];return arguments[0]=this,e.apply(null,arguments),this}function jk(){return Array.from(this)}function Ok(){for(var e=this._groups,n=0,i=e.length;n1?this.each((n==null?Gk:typeof n=="function"?Xk:$k)(e,n,i??"")):Kl(this.node(),e)}function Kl(e,n){return e.style.getPropertyValue(n)||ew(e).getComputedStyle(e,null).getPropertyValue(n)}function Fk(e){return function(){delete this[e]}}function Qk(e,n){return function(){this[e]=n}}function Zk(e,n){return function(){var i=n.apply(this,arguments);i==null?delete this[e]:this[e]=i}}function Kk(e,n){return arguments.length>1?this.each((n==null?Fk:typeof n=="function"?Zk:Qk)(e,n)):this.node()[e]}function tw(e){return e.trim().split(/^|\s+/)}function Fp(e){return e.classList||new nw(e)}function nw(e){this._node=e,this._names=tw(e.getAttribute("class")||"")}nw.prototype={add:function(e){var n=this._names.indexOf(e);n<0&&(this._names.push(e),this._node.setAttribute("class",this._names.join(" ")))},remove:function(e){var n=this._names.indexOf(e);n>=0&&(this._names.splice(n,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(e){return this._names.indexOf(e)>=0}};function rw(e,n){for(var i=Fp(e),l=-1,o=n.length;++l=0&&(i=n.slice(l+1),n=n.slice(0,l)),{type:n,name:i}})}function NC(e){return function(){var n=this.__on;if(n){for(var i=0,l=-1,o=n.length,s;i()=>e;function vp(e,{sourceEvent:n,subject:i,target:l,identifier:o,active:s,x:u,y:f,dx:d,dy:h,dispatch:m}){Object.defineProperties(this,{type:{value:e,enumerable:!0,configurable:!0},sourceEvent:{value:n,enumerable:!0,configurable:!0},subject:{value:i,enumerable:!0,configurable:!0},target:{value:l,enumerable:!0,configurable:!0},identifier:{value:o,enumerable:!0,configurable:!0},active:{value:s,enumerable:!0,configurable:!0},x:{value:u,enumerable:!0,configurable:!0},y:{value:f,enumerable:!0,configurable:!0},dx:{value:d,enumerable:!0,configurable:!0},dy:{value:h,enumerable:!0,configurable:!0},_:{value:m}})}vp.prototype.on=function(){var e=this._.on.apply(this._,arguments);return e===this._?this:e};function DC(e){return!e.ctrlKey&&!e.button}function LC(){return this.parentNode}function HC(e,n){return n??{x:e.x,y:e.y}}function BC(){return navigator.maxTouchPoints||"ontouchstart"in this}function uw(){var e=DC,n=LC,i=HC,l=BC,o={},s=cc("start","drag","end"),u=0,f,d,h,m,p=0;function y(A){A.on("mousedown.drag",v).filter(l).on("touchstart.drag",S).on("touchmove.drag",_,RC).on("touchend.drag touchcancel.drag",z).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function v(A,B){if(!(m||!e.call(this,A,B))){var T=E(this,n.call(this,A,B),A,B,"mouse");T&&(xn(A.view).on("mousemove.drag",w,ko).on("mouseup.drag",k,ko),ow(A.view),Fd(A),h=!1,f=A.clientX,d=A.clientY,T("start",A))}}function w(A){if(Xl(A),!h){var B=A.clientX-f,T=A.clientY-d;h=B*B+T*T>p}o.mouse("drag",A)}function k(A){xn(A.view).on("mousemove.drag mouseup.drag",null),sw(A.view,h),Xl(A),o.mouse("end",A)}function S(A,B){if(e.call(this,A,B)){var T=A.changedTouches,q=n.call(this,A,B),M=T.length,D,X;for(D=0;D>8&15|n>>4&240,n>>4&15|n&240,(n&15)<<4|n&15,1):i===8?Eu(n>>24&255,n>>16&255,n>>8&255,(n&255)/255):i===4?Eu(n>>12&15|n>>8&240,n>>8&15|n>>4&240,n>>4&15|n&240,((n&15)<<4|n&15)/255):null):(n=UC.exec(e))?new nn(n[1],n[2],n[3],1):(n=IC.exec(e))?new nn(n[1]*255/100,n[2]*255/100,n[3]*255/100,1):(n=VC.exec(e))?Eu(n[1],n[2],n[3],n[4]):(n=YC.exec(e))?Eu(n[1]*255/100,n[2]*255/100,n[3]*255/100,n[4]):(n=GC.exec(e))?Ix(n[1],n[2]/100,n[3]/100,1):(n=$C.exec(e))?Ix(n[1],n[2]/100,n[3]/100,n[4]):Dx.hasOwnProperty(e)?Bx(Dx[e]):e==="transparent"?new nn(NaN,NaN,NaN,0):null}function Bx(e){return new nn(e>>16&255,e>>8&255,e&255,1)}function Eu(e,n,i,l){return l<=0&&(e=n=i=NaN),new nn(e,n,i,l)}function FC(e){return e instanceof Uo||(e=Yi(e)),e?(e=e.rgb(),new nn(e.r,e.g,e.b,e.opacity)):new nn}function bp(e,n,i,l){return arguments.length===1?FC(e):new nn(e,n,i,l??1)}function nn(e,n,i,l){this.r=+e,this.g=+n,this.b=+i,this.opacity=+l}Qp(nn,bp,cw(Uo,{brighter(e){return e=e==null?Pu:Math.pow(Pu,e),new nn(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){return e=e==null?Co:Math.pow(Co,e),new nn(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new nn(Ui(this.r),Ui(this.g),Ui(this.b),Fu(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:qx,formatHex:qx,formatHex8:QC,formatRgb:Ux,toString:Ux}));function qx(){return`#${Hi(this.r)}${Hi(this.g)}${Hi(this.b)}`}function QC(){return`#${Hi(this.r)}${Hi(this.g)}${Hi(this.b)}${Hi((isNaN(this.opacity)?1:this.opacity)*255)}`}function Ux(){const e=Fu(this.opacity);return`${e===1?"rgb(":"rgba("}${Ui(this.r)}, ${Ui(this.g)}, ${Ui(this.b)}${e===1?")":`, ${e})`}`}function Fu(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function Ui(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function Hi(e){return e=Ui(e),(e<16?"0":"")+e.toString(16)}function Ix(e,n,i,l){return l<=0?e=n=i=NaN:i<=0||i>=1?e=n=NaN:n<=0&&(e=NaN),new Bn(e,n,i,l)}function fw(e){if(e instanceof Bn)return new Bn(e.h,e.s,e.l,e.opacity);if(e instanceof Uo||(e=Yi(e)),!e)return new Bn;if(e instanceof Bn)return e;e=e.rgb();var n=e.r/255,i=e.g/255,l=e.b/255,o=Math.min(n,i,l),s=Math.max(n,i,l),u=NaN,f=s-o,d=(s+o)/2;return f?(n===s?u=(i-l)/f+(i0&&d<1?0:u,new Bn(u,f,d,e.opacity)}function ZC(e,n,i,l){return arguments.length===1?fw(e):new Bn(e,n,i,l??1)}function Bn(e,n,i,l){this.h=+e,this.s=+n,this.l=+i,this.opacity=+l}Qp(Bn,ZC,cw(Uo,{brighter(e){return e=e==null?Pu:Math.pow(Pu,e),new Bn(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=e==null?Co:Math.pow(Co,e),new Bn(this.h,this.s,this.l*e,this.opacity)},rgb(){var e=this.h%360+(this.h<0)*360,n=isNaN(e)||isNaN(this.s)?0:this.s,i=this.l,l=i+(i<.5?i:1-i)*n,o=2*i-l;return new nn(Qd(e>=240?e-240:e+120,o,l),Qd(e,o,l),Qd(e<120?e+240:e-120,o,l),this.opacity)},clamp(){return new Bn(Vx(this.h),Nu(this.s),Nu(this.l),Fu(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 e=Fu(this.opacity);return`${e===1?"hsl(":"hsla("}${Vx(this.h)}, ${Nu(this.s)*100}%, ${Nu(this.l)*100}%${e===1?")":`, ${e})`}`}}));function Vx(e){return e=(e||0)%360,e<0?e+360:e}function Nu(e){return Math.max(0,Math.min(1,e||0))}function Qd(e,n,i){return(e<60?n+(i-n)*e/60:e<180?i:e<240?n+(i-n)*(240-e)/60:n)*255}const Zp=e=>()=>e;function KC(e,n){return function(i){return e+i*n}}function JC(e,n,i){return e=Math.pow(e,i),n=Math.pow(n,i)-e,i=1/i,function(l){return Math.pow(e+l*n,i)}}function WC(e){return(e=+e)==1?dw:function(n,i){return i-n?JC(n,i,e):Zp(isNaN(n)?i:n)}}function dw(e,n){var i=n-e;return i?KC(e,i):Zp(isNaN(e)?n:e)}const Qu=(function e(n){var i=WC(n);function l(o,s){var u=i((o=bp(o)).r,(s=bp(s)).r),f=i(o.g,s.g),d=i(o.b,s.b),h=dw(o.opacity,s.opacity);return function(m){return o.r=u(m),o.g=f(m),o.b=d(m),o.opacity=h(m),o+""}}return l.gamma=e,l})(1);function e3(e,n){n||(n=[]);var i=e?Math.min(n.length,e.length):0,l=n.slice(),o;return function(s){for(o=0;oi&&(s=n.slice(i,s),f[u]?f[u]+=s:f[++u]=s),(l=l[0])===(o=o[0])?f[u]?f[u]+=o:f[++u]=o:(f[++u]=null,d.push({i:u,x:Kn(l,o)})),i=Zd.lastIndex;return i180?m+=360:m-h>180&&(h+=360),y.push({i:p.push(o(p)+"rotate(",null,l)-2,x:Kn(h,m)})):m&&p.push(o(p)+"rotate("+m+l)}function f(h,m,p,y){h!==m?y.push({i:p.push(o(p)+"skewX(",null,l)-2,x:Kn(h,m)}):m&&p.push(o(p)+"skewX("+m+l)}function d(h,m,p,y,v,w){if(h!==p||m!==y){var k=v.push(o(v)+"scale(",null,",",null,")");w.push({i:k-4,x:Kn(h,p)},{i:k-2,x:Kn(m,y)})}else(p!==1||y!==1)&&v.push(o(v)+"scale("+p+","+y+")")}return function(h,m){var p=[],y=[];return h=e(h),m=e(m),s(h.translateX,h.translateY,m.translateX,m.translateY,p,y),u(h.rotate,m.rotate,p,y),f(h.skewX,m.skewX,p,y),d(h.scaleX,h.scaleY,m.scaleX,m.scaleY,p,y),h=m=null,function(v){for(var w=-1,k=y.length,S;++w=0&&e._call.call(void 0,n),e=e._next;--Jl}function $x(){Gi=(Ku=zo.now())+dc,Jl=mo=0;try{m3()}finally{Jl=0,y3(),Gi=0}}function g3(){var e=zo.now(),n=e-Ku;n>gw&&(dc-=n,Ku=e)}function y3(){for(var e,n=Zu,i,l=1/0;n;)n._call?(l>n._time&&(l=n._time),e=n,n=n._next):(i=n._next,n._next=null,n=e?e._next=i:Zu=i);go=e,_p(l)}function _p(e){if(!Jl){mo&&(mo=clearTimeout(mo));var n=e-Gi;n>24?(e<1/0&&(mo=setTimeout($x,e-zo.now()-dc)),lo&&(lo=clearInterval(lo))):(lo||(Ku=zo.now(),lo=setInterval(g3,gw)),Jl=1,yw($x))}}function Xx(e,n,i){var l=new Ju;return n=n==null?0:+n,l.restart(o=>{l.stop(),e(o+n)},n,i),l}var x3=cc("start","end","cancel","interrupt"),v3=[],vw=0,Px=1,Ep=2,qu=3,Fx=4,Np=5,Uu=6;function hc(e,n,i,l,o,s){var u=e.__transition;if(!u)e.__transition={};else if(i in u)return;b3(e,i,{name:n,index:l,group:o,on:x3,tween:v3,time:s.time,delay:s.delay,duration:s.duration,ease:s.ease,timer:null,state:vw})}function Jp(e,n){var i=Yn(e,n);if(i.state>vw)throw new Error("too late; already scheduled");return i}function rr(e,n){var i=Yn(e,n);if(i.state>qu)throw new Error("too late; already running");return i}function Yn(e,n){var i=e.__transition;if(!i||!(i=i[n]))throw new Error("transition not found");return i}function b3(e,n,i){var l=e.__transition,o;l[n]=i,i.timer=xw(s,0,i.time);function s(h){i.state=Px,i.timer.restart(u,i.delay,i.time),i.delay<=h&&u(h-i.delay)}function u(h){var m,p,y,v;if(i.state!==Px)return d();for(m in l)if(v=l[m],v.name===i.name){if(v.state===qu)return Xx(u);v.state===Fx?(v.state=Uu,v.timer.stop(),v.on.call("interrupt",e,e.__data__,v.index,v.group),delete l[m]):+mEp&&l.state=0&&(n=n.slice(0,i)),!n||n==="start"})}function Z3(e,n,i){var l,o,s=Q3(n)?Jp:rr;return function(){var u=s(this,e),f=u.on;f!==l&&(o=(l=f).copy()).on(n,i),u.on=o}}function K3(e,n){var i=this._id;return arguments.length<2?Yn(this.node(),i).on.on(e):this.each(Z3(i,e,n))}function J3(e){return function(){var n=this.parentNode;for(var i in this.__transition)if(+i!==e)return;n&&n.removeChild(this)}}function W3(){return this.on("end.remove",J3(this._id))}function eT(e){var n=this._name,i=this._id;typeof e!="function"&&(e=Pp(e));for(var l=this._groups,o=l.length,s=new Array(o),u=0;u()=>e;function NT(e,{sourceEvent:n,target:i,transform:l,dispatch:o}){Object.defineProperties(this,{type:{value:e,enumerable:!0,configurable:!0},sourceEvent:{value:n,enumerable:!0,configurable:!0},target:{value:i,enumerable:!0,configurable:!0},transform:{value:l,enumerable:!0,configurable:!0},_:{value:o}})}function Cr(e,n,i){this.k=e,this.x=n,this.y=i}Cr.prototype={constructor:Cr,scale:function(e){return e===1?this:new Cr(this.k*e,this.x,this.y)},translate:function(e,n){return e===0&n===0?this:new Cr(this.k,this.x+this.k*e,this.y+this.k*n)},apply:function(e){return[e[0]*this.k+this.x,e[1]*this.k+this.y]},applyX:function(e){return e*this.k+this.x},applyY:function(e){return e*this.k+this.y},invert:function(e){return[(e[0]-this.x)/this.k,(e[1]-this.y)/this.k]},invertX:function(e){return(e-this.x)/this.k},invertY:function(e){return(e-this.y)/this.k},rescaleX:function(e){return e.copy().domain(e.range().map(this.invertX,this).map(e.invert,e))},rescaleY:function(e){return e.copy().domain(e.range().map(this.invertY,this).map(e.invert,e))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}};var pc=new Cr(1,0,0);_w.prototype=Cr.prototype;function _w(e){for(;!e.__zoom;)if(!(e=e.parentNode))return pc;return e.__zoom}function Kd(e){e.stopImmediatePropagation()}function ao(e){e.preventDefault(),e.stopImmediatePropagation()}function kT(e){return(!e.ctrlKey||e.type==="wheel")&&!e.button}function CT(){var e=this;return e instanceof SVGElement?(e=e.ownerSVGElement||e,e.hasAttribute("viewBox")?(e=e.viewBox.baseVal,[[e.x,e.y],[e.x+e.width,e.y+e.height]]):[[0,0],[e.width.baseVal.value,e.height.baseVal.value]]):[[0,0],[e.clientWidth,e.clientHeight]]}function Qx(){return this.__zoom||pc}function TT(e){return-e.deltaY*(e.deltaMode===1?.05:e.deltaMode?1:.002)*(e.ctrlKey?10:1)}function zT(){return navigator.maxTouchPoints||"ontouchstart"in this}function AT(e,n,i){var l=e.invertX(n[0][0])-i[0][0],o=e.invertX(n[1][0])-i[1][0],s=e.invertY(n[0][1])-i[0][1],u=e.invertY(n[1][1])-i[1][1];return e.translate(o>l?(l+o)/2:Math.min(0,l)||Math.max(0,o),u>s?(s+u)/2:Math.min(0,s)||Math.max(0,u))}function Ew(){var e=kT,n=CT,i=AT,l=TT,o=zT,s=[0,1/0],u=[[-1/0,-1/0],[1/0,1/0]],f=250,d=Bu,h=cc("start","zoom","end"),m,p,y,v=500,w=150,k=0,S=10;function _(L){L.property("__zoom",Qx).on("wheel.zoom",M,{passive:!1}).on("mousedown.zoom",D).on("dblclick.zoom",X).filter(o).on("touchstart.zoom",H).on("touchmove.zoom",I).on("touchend.zoom touchcancel.zoom",ee).style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}_.transform=function(L,G,R,$){var Z=L.selection?L.selection():L;Z.property("__zoom",Qx),L!==Z?B(L,G,R,$):Z.interrupt().each(function(){T(this,arguments).event($).start().zoom(null,typeof G=="function"?G.apply(this,arguments):G).end()})},_.scaleBy=function(L,G,R,$){_.scaleTo(L,function(){var Z=this.__zoom.k,J=typeof G=="function"?G.apply(this,arguments):G;return Z*J},R,$)},_.scaleTo=function(L,G,R,$){_.transform(L,function(){var Z=n.apply(this,arguments),J=this.__zoom,j=R==null?A(Z):typeof R=="function"?R.apply(this,arguments):R,U=J.invert(j),P=typeof G=="function"?G.apply(this,arguments):G;return i(E(z(J,P),j,U),Z,u)},R,$)},_.translateBy=function(L,G,R,$){_.transform(L,function(){return i(this.__zoom.translate(typeof G=="function"?G.apply(this,arguments):G,typeof R=="function"?R.apply(this,arguments):R),n.apply(this,arguments),u)},null,$)},_.translateTo=function(L,G,R,$,Z){_.transform(L,function(){var J=n.apply(this,arguments),j=this.__zoom,U=$==null?A(J):typeof $=="function"?$.apply(this,arguments):$;return i(pc.translate(U[0],U[1]).scale(j.k).translate(typeof G=="function"?-G.apply(this,arguments):-G,typeof R=="function"?-R.apply(this,arguments):-R),J,u)},$,Z)};function z(L,G){return G=Math.max(s[0],Math.min(s[1],G)),G===L.k?L:new Cr(G,L.x,L.y)}function E(L,G,R){var $=G[0]-R[0]*L.k,Z=G[1]-R[1]*L.k;return $===L.x&&Z===L.y?L:new Cr(L.k,$,Z)}function A(L){return[(+L[0][0]+ +L[1][0])/2,(+L[0][1]+ +L[1][1])/2]}function B(L,G,R,$){L.on("start.zoom",function(){T(this,arguments).event($).start()}).on("interrupt.zoom end.zoom",function(){T(this,arguments).event($).end()}).tween("zoom",function(){var Z=this,J=arguments,j=T(Z,J).event($),U=n.apply(Z,J),P=R==null?A(U):typeof R=="function"?R.apply(Z,J):R,N=Math.max(U[1][0]-U[0][0],U[1][1]-U[0][1]),Y=Z.__zoom,F=typeof G=="function"?G.apply(Z,J):G,K=d(Y.invert(P).concat(N/Y.k),F.invert(P).concat(N/F.k));return function(ne){if(ne===1)ne=F;else{var re=K(ne),se=N/re[2];ne=new Cr(se,P[0]-re[0]*se,P[1]-re[1]*se)}j.zoom(null,ne)}})}function T(L,G,R){return!R&&L.__zooming||new q(L,G)}function q(L,G){this.that=L,this.args=G,this.active=0,this.sourceEvent=null,this.extent=n.apply(L,G),this.taps=0}q.prototype={event:function(L){return L&&(this.sourceEvent=L),this},start:function(){return++this.active===1&&(this.that.__zooming=this,this.emit("start")),this},zoom:function(L,G){return this.mouse&&L!=="mouse"&&(this.mouse[1]=G.invert(this.mouse[0])),this.touch0&&L!=="touch"&&(this.touch0[1]=G.invert(this.touch0[0])),this.touch1&&L!=="touch"&&(this.touch1[1]=G.invert(this.touch1[0])),this.that.__zoom=G,this.emit("zoom"),this},end:function(){return--this.active===0&&(delete this.that.__zooming,this.emit("end")),this},emit:function(L){var G=xn(this.that).datum();h.call(L,this.that,new NT(L,{sourceEvent:this.sourceEvent,target:_,transform:this.that.__zoom,dispatch:h}),G)}};function M(L,...G){if(!e.apply(this,arguments))return;var R=T(this,G).event(L),$=this.__zoom,Z=Math.max(s[0],Math.min(s[1],$.k*Math.pow(2,l.apply(this,arguments)))),J=Hn(L);if(R.wheel)(R.mouse[0][0]!==J[0]||R.mouse[0][1]!==J[1])&&(R.mouse[1]=$.invert(R.mouse[0]=J)),clearTimeout(R.wheel);else{if($.k===Z)return;R.mouse=[J,$.invert(J)],Iu(this),R.start()}ao(L),R.wheel=setTimeout(j,w),R.zoom("mouse",i(E(z($,Z),R.mouse[0],R.mouse[1]),R.extent,u));function j(){R.wheel=null,R.end()}}function D(L,...G){if(y||!e.apply(this,arguments))return;var R=L.currentTarget,$=T(this,G,!0).event(L),Z=xn(L.view).on("mousemove.zoom",P,!0).on("mouseup.zoom",N,!0),J=Hn(L,R),j=L.clientX,U=L.clientY;ow(L.view),Kd(L),$.mouse=[J,this.__zoom.invert(J)],Iu(this),$.start();function P(Y){if(ao(Y),!$.moved){var F=Y.clientX-j,K=Y.clientY-U;$.moved=F*F+K*K>k}$.event(Y).zoom("mouse",i(E($.that.__zoom,$.mouse[0]=Hn(Y,R),$.mouse[1]),$.extent,u))}function N(Y){Z.on("mousemove.zoom mouseup.zoom",null),sw(Y.view,$.moved),ao(Y),$.event(Y).end()}}function X(L,...G){if(e.apply(this,arguments)){var R=this.__zoom,$=Hn(L.changedTouches?L.changedTouches[0]:L,this),Z=R.invert($),J=R.k*(L.shiftKey?.5:2),j=i(E(z(R,J),$,Z),n.apply(this,G),u);ao(L),f>0?xn(this).transition().duration(f).call(B,j,$,L):xn(this).call(_.transform,j,$,L)}}function H(L,...G){if(e.apply(this,arguments)){var R=L.touches,$=R.length,Z=T(this,G,L.changedTouches.length===$).event(L),J,j,U,P;for(Kd(L),j=0;j<$;++j)U=R[j],P=Hn(U,this),P=[P,this.__zoom.invert(P),U.identifier],Z.touch0?!Z.touch1&&Z.touch0[2]!==P[2]&&(Z.touch1=P,Z.taps=0):(Z.touch0=P,J=!0,Z.taps=1+!!m);m&&(m=clearTimeout(m)),J&&(Z.taps<2&&(p=P[0],m=setTimeout(function(){m=null},v)),Iu(this),Z.start())}}function I(L,...G){if(this.__zooming){var R=T(this,G).event(L),$=L.changedTouches,Z=$.length,J,j,U,P;for(ao(L),J=0;J"[React Flow]: Seems like you have not used zustand provider as an ancestor. Help: https://reactflow.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:e=>`Node type "${e}" not found. Using fallback type "default".`,error004:()=>"The React Flow 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:e=>`The old edge with id=${e} does not exist.`,error009:e=>`Marker type "${e}" doesn't exist.`,error008:(e,{id:n,sourceHandle:i,targetHandle:l})=>`Couldn't create edge for ${e} handle id: "${e==="source"?i:l}", edge id: ${n}.`,error010:()=>"Handle: No node id found. Make sure to only use a Handle inside a custom Node.",error011:e=>`Edge type "${e}" not found. Using fallback type "default".`,error012:e=>`Node with id "${e}" does not exist, it may have been removed. This can happen when a node is deleted before the "onNodeClick" handler is called.`,error013:(e="react")=>`It seems that you haven't loaded the styles. Please import '@xyflow/${e}/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."},Ao=[[Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY],[Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY]],Nw=["Enter"," ","Escape"],kw={"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:e,x:n,y:i})=>`Moved selected node ${e}. New position, x: ${n}, 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 Wl;(function(e){e.Strict="strict",e.Loose="loose"})(Wl||(Wl={}));var Ii;(function(e){e.Free="free",e.Vertical="vertical",e.Horizontal="horizontal"})(Ii||(Ii={}));var Mo;(function(e){e.Partial="partial",e.Full="full"})(Mo||(Mo={}));const Cw={inProgress:!1,isValid:null,from:null,fromHandle:null,fromPosition:null,fromNode:null,to:null,toHandle:null,toPosition:null,toNode:null,pointer:null};var fi;(function(e){e.Bezier="default",e.Straight="straight",e.Step="step",e.SmoothStep="smoothstep",e.SimpleBezier="simplebezier"})(fi||(fi={}));var Wu;(function(e){e.Arrow="arrow",e.ArrowClosed="arrowclosed"})(Wu||(Wu={}));var we;(function(e){e.Left="left",e.Top="top",e.Right="right",e.Bottom="bottom"})(we||(we={}));const Zx={[we.Left]:we.Right,[we.Right]:we.Left,[we.Top]:we.Bottom,[we.Bottom]:we.Top};function Tw(e){return e===null?null:e?"valid":"invalid"}const zw=e=>"id"in e&&"source"in e&&"target"in e,MT=e=>"id"in e&&"position"in e&&!("source"in e)&&!("target"in e),em=e=>"id"in e&&"internals"in e&&!("source"in e)&&!("target"in e),Io=(e,n=[0,0])=>{const{width:i,height:l}=Ar(e),o=e.origin??n,s=i*o[0],u=l*o[1];return{x:e.position.x-s,y:e.position.y-u}},jT=(e,n={nodeOrigin:[0,0]})=>{if(e.length===0)return{x:0,y:0,width:0,height:0};const i=e.reduce((l,o)=>{const s=typeof o=="string";let u=!n.nodeLookup&&!s?o:void 0;n.nodeLookup&&(u=s?n.nodeLookup.get(o):em(o)?o:n.nodeLookup.get(o.id));const f=u?ec(u,n.nodeOrigin):{x:0,y:0,x2:0,y2:0};return mc(l,f)},{x:1/0,y:1/0,x2:-1/0,y2:-1/0});return gc(i)},Vo=(e,n={})=>{let i={x:1/0,y:1/0,x2:-1/0,y2:-1/0},l=!1;return e.forEach(o=>{(n.filter===void 0||n.filter(o))&&(i=mc(i,ec(o)),l=!0)}),l?gc(i):{x:0,y:0,width:0,height:0}},tm=(e,n,[i,l,o]=[0,0,1],s=!1,u=!1)=>{const f={...Go(n,[i,l,o]),width:n.width/o,height:n.height/o},d=[];for(const h of e.values()){const{measured:m,selectable:p=!0,hidden:y=!1}=h;if(u&&!p||y)continue;const v=m.width??h.width??h.initialWidth??null,w=m.height??h.height??h.initialHeight??null,k=jo(f,ta(h)),S=(v??0)*(w??0),_=s&&k>0;(!h.internals.handleBounds||_||k>=S||h.dragging)&&d.push(h)}return d},OT=(e,n)=>{const i=new Set;return e.forEach(l=>{i.add(l.id)}),n.filter(l=>i.has(l.source)||i.has(l.target))};function RT(e,n){const i=new Map,l=n!=null&&n.nodes?new Set(n.nodes.map(o=>o.id)):null;return e.forEach(o=>{o.measured.width&&o.measured.height&&((n==null?void 0:n.includeHiddenNodes)||!o.hidden)&&(!l||l.has(o.id))&&i.set(o.id,o)}),i}async function DT({nodes:e,width:n,height:i,panZoom:l,minZoom:o,maxZoom:s},u){if(e.size===0)return Promise.resolve(!0);const f=RT(e,u),d=Vo(f),h=nm(d,n,i,(u==null?void 0:u.minZoom)??o,(u==null?void 0:u.maxZoom)??s,(u==null?void 0:u.padding)??.1);return await l.setViewport(h,{duration:u==null?void 0:u.duration,ease:u==null?void 0:u.ease,interpolate:u==null?void 0:u.interpolate}),Promise.resolve(!0)}function Aw({nodeId:e,nextPosition:n,nodeLookup:i,nodeOrigin:l=[0,0],nodeExtent:o,onError:s}){const u=i.get(e),f=u.parentId?i.get(u.parentId):void 0,{x:d,y:h}=f?f.internals.positionAbsolute:{x:0,y:0},m=u.origin??l;let p=u.extent||o;if(u.extent==="parent"&&!u.expandParent)if(!f)s==null||s("005",tr.error005());else{const v=f.measured.width,w=f.measured.height;v&&w&&(p=[[d,h],[d+v,h+w]])}else f&&na(u.extent)&&(p=[[u.extent[0][0]+d,u.extent[0][1]+h],[u.extent[1][0]+d,u.extent[1][1]+h]]);const y=na(p)?$i(n,p,u.measured):n;return(u.measured.width===void 0||u.measured.height===void 0)&&(s==null||s("015",tr.error015())),{position:{x:y.x-d+(u.measured.width??0)*m[0],y:y.y-h+(u.measured.height??0)*m[1]},positionAbsolute:y}}async function LT({nodesToRemove:e=[],edgesToRemove:n=[],nodes:i,edges:l,onBeforeDelete:o}){const s=new Set(e.map(y=>y.id)),u=[];for(const y of i){if(y.deletable===!1)continue;const v=s.has(y.id),w=!v&&y.parentId&&u.find(k=>k.id===y.parentId);(v||w)&&u.push(y)}const f=new Set(n.map(y=>y.id)),d=l.filter(y=>y.deletable!==!1),m=OT(u,d);for(const y of d)f.has(y.id)&&!m.find(w=>w.id===y.id)&&m.push(y);if(!o)return{edges:m,nodes:u};const p=await o({nodes:u,edges:m});return typeof p=="boolean"?p?{edges:m,nodes:u}:{edges:[],nodes:[]}:p}const ea=(e,n=0,i=1)=>Math.min(Math.max(e,n),i),$i=(e={x:0,y:0},n,i)=>({x:ea(e.x,n[0][0],n[1][0]-((i==null?void 0:i.width)??0)),y:ea(e.y,n[0][1],n[1][1]-((i==null?void 0:i.height)??0))});function Mw(e,n,i){const{width:l,height:o}=Ar(i),{x:s,y:u}=i.internals.positionAbsolute;return $i(e,[[s,u],[s+l,u+o]],n)}const Kx=(e,n,i)=>ei?-ea(Math.abs(e-i),1,n)/n:0,jw=(e,n,i=15,l=40)=>{const o=Kx(e.x,l,n.width-l)*i,s=Kx(e.y,l,n.height-l)*i;return[o,s]},mc=(e,n)=>({x:Math.min(e.x,n.x),y:Math.min(e.y,n.y),x2:Math.max(e.x2,n.x2),y2:Math.max(e.y2,n.y2)}),kp=({x:e,y:n,width:i,height:l})=>({x:e,y:n,x2:e+i,y2:n+l}),gc=({x:e,y:n,x2:i,y2:l})=>({x:e,y:n,width:i-e,height:l-n}),ta=(e,n=[0,0])=>{var o,s;const{x:i,y:l}=em(e)?e.internals.positionAbsolute:Io(e,n);return{x:i,y:l,width:((o=e.measured)==null?void 0:o.width)??e.width??e.initialWidth??0,height:((s=e.measured)==null?void 0:s.height)??e.height??e.initialHeight??0}},ec=(e,n=[0,0])=>{var o,s;const{x:i,y:l}=em(e)?e.internals.positionAbsolute:Io(e,n);return{x:i,y:l,x2:i+(((o=e.measured)==null?void 0:o.width)??e.width??e.initialWidth??0),y2:l+(((s=e.measured)==null?void 0:s.height)??e.height??e.initialHeight??0)}},Ow=(e,n)=>gc(mc(kp(e),kp(n))),jo=(e,n)=>{const i=Math.max(0,Math.min(e.x+e.width,n.x+n.width)-Math.max(e.x,n.x)),l=Math.max(0,Math.min(e.y+e.height,n.y+n.height)-Math.max(e.y,n.y));return Math.ceil(i*l)},Jx=e=>qn(e.width)&&qn(e.height)&&qn(e.x)&&qn(e.y),qn=e=>!isNaN(e)&&isFinite(e),HT=(e,n)=>{},Yo=(e,n=[1,1])=>({x:n[0]*Math.round(e.x/n[0]),y:n[1]*Math.round(e.y/n[1])}),Go=({x:e,y:n},[i,l,o],s=!1,u=[1,1])=>{const f={x:(e-i)/o,y:(n-l)/o};return s?Yo(f,u):f},tc=({x:e,y:n},[i,l,o])=>({x:e*o+i,y:n*o+l});function Ll(e,n){if(typeof e=="number")return Math.floor((n-n/(1+e))*.5);if(typeof e=="string"&&e.endsWith("px")){const i=parseFloat(e);if(!Number.isNaN(i))return Math.floor(i)}if(typeof e=="string"&&e.endsWith("%")){const i=parseFloat(e);if(!Number.isNaN(i))return Math.floor(n*i*.01)}return console.error(`[React Flow] The padding value "${e}" is invalid. Please provide a number or a string with a valid unit (px or %).`),0}function BT(e,n,i){if(typeof e=="string"||typeof e=="number"){const l=Ll(e,i),o=Ll(e,n);return{top:l,right:o,bottom:l,left:o,x:o*2,y:l*2}}if(typeof e=="object"){const l=Ll(e.top??e.y??0,i),o=Ll(e.bottom??e.y??0,i),s=Ll(e.left??e.x??0,n),u=Ll(e.right??e.x??0,n);return{top:l,right:u,bottom:o,left:s,x:s+u,y:l+o}}return{top:0,right:0,bottom:0,left:0,x:0,y:0}}function qT(e,n,i,l,o,s){const{x:u,y:f}=tc(e,[n,i,l]),{x:d,y:h}=tc({x:e.x+e.width,y:e.y+e.height},[n,i,l]),m=o-d,p=s-h;return{left:Math.floor(u),top:Math.floor(f),right:Math.floor(m),bottom:Math.floor(p)}}const nm=(e,n,i,l,o,s)=>{const u=BT(s,n,i),f=(n-u.x)/e.width,d=(i-u.y)/e.height,h=Math.min(f,d),m=ea(h,l,o),p=e.x+e.width/2,y=e.y+e.height/2,v=n/2-p*m,w=i/2-y*m,k=qT(e,v,w,m,n,i),S={left:Math.min(k.left-u.left,0),top:Math.min(k.top-u.top,0),right:Math.min(k.right-u.right,0),bottom:Math.min(k.bottom-u.bottom,0)};return{x:v-S.left+S.right,y:w-S.top+S.bottom,zoom:m}},Oo=()=>{var e;return typeof navigator<"u"&&((e=navigator==null?void 0:navigator.userAgent)==null?void 0:e.indexOf("Mac"))>=0};function na(e){return e!=null&&e!=="parent"}function Ar(e){var n,i;return{width:((n=e.measured)==null?void 0:n.width)??e.width??e.initialWidth??0,height:((i=e.measured)==null?void 0:i.height)??e.height??e.initialHeight??0}}function Rw(e){var n,i;return(((n=e.measured)==null?void 0:n.width)??e.width??e.initialWidth)!==void 0&&(((i=e.measured)==null?void 0:i.height)??e.height??e.initialHeight)!==void 0}function Dw(e,n={width:0,height:0},i,l,o){const s={...e},u=l.get(i);if(u){const f=u.origin||o;s.x+=u.internals.positionAbsolute.x-(n.width??0)*f[0],s.y+=u.internals.positionAbsolute.y-(n.height??0)*f[1]}return s}function Wx(e,n){if(e.size!==n.size)return!1;for(const i of e)if(!n.has(i))return!1;return!0}function UT(){let e,n;return{promise:new Promise((l,o)=>{e=l,n=o}),resolve:e,reject:n}}function IT(e){return{...kw,...e||{}}}function vo(e,{snapGrid:n=[0,0],snapToGrid:i=!1,transform:l,containerBounds:o}){const{x:s,y:u}=Un(e),f=Go({x:s-((o==null?void 0:o.left)??0),y:u-((o==null?void 0:o.top)??0)},l),{x:d,y:h}=i?Yo(f,n):f;return{xSnapped:d,ySnapped:h,...f}}const rm=e=>({width:e.offsetWidth,height:e.offsetHeight}),Lw=e=>{var n;return((n=e==null?void 0:e.getRootNode)==null?void 0:n.call(e))||(window==null?void 0:window.document)},VT=["INPUT","SELECT","TEXTAREA"];function Hw(e){var l,o;const n=((o=(l=e.composedPath)==null?void 0:l.call(e))==null?void 0:o[0])||e.target;return(n==null?void 0:n.nodeType)!==1?!1:VT.includes(n.nodeName)||n.hasAttribute("contenteditable")||!!n.closest(".nokey")}const Bw=e=>"clientX"in e,Un=(e,n)=>{var s,u;const i=Bw(e),l=i?e.clientX:(s=e.touches)==null?void 0:s[0].clientX,o=i?e.clientY:(u=e.touches)==null?void 0:u[0].clientY;return{x:l-((n==null?void 0:n.left)??0),y:o-((n==null?void 0:n.top)??0)}},ev=(e,n,i,l,o)=>{const s=n.querySelectorAll(`.${e}`);return!s||!s.length?null:Array.from(s).map(u=>{const f=u.getBoundingClientRect();return{id:u.getAttribute("data-handleid"),type:e,nodeId:o,position:u.getAttribute("data-handlepos"),x:(f.left-i.left)/l,y:(f.top-i.top)/l,...rm(u)}})};function qw({sourceX:e,sourceY:n,targetX:i,targetY:l,sourceControlX:o,sourceControlY:s,targetControlX:u,targetControlY:f}){const d=e*.125+o*.375+u*.375+i*.125,h=n*.125+s*.375+f*.375+l*.125,m=Math.abs(d-e),p=Math.abs(h-n);return[d,h,m,p]}function Tu(e,n){return e>=0?.5*e:n*25*Math.sqrt(-e)}function tv({pos:e,x1:n,y1:i,x2:l,y2:o,c:s}){switch(e){case we.Left:return[n-Tu(n-l,s),i];case we.Right:return[n+Tu(l-n,s),i];case we.Top:return[n,i-Tu(i-o,s)];case we.Bottom:return[n,i+Tu(o-i,s)]}}function im({sourceX:e,sourceY:n,sourcePosition:i=we.Bottom,targetX:l,targetY:o,targetPosition:s=we.Top,curvature:u=.25}){const[f,d]=tv({pos:i,x1:e,y1:n,x2:l,y2:o,c:u}),[h,m]=tv({pos:s,x1:l,y1:o,x2:e,y2:n,c:u}),[p,y,v,w]=qw({sourceX:e,sourceY:n,targetX:l,targetY:o,sourceControlX:f,sourceControlY:d,targetControlX:h,targetControlY:m});return[`M${e},${n} C${f},${d} ${h},${m} ${l},${o}`,p,y,v,w]}function Uw({sourceX:e,sourceY:n,targetX:i,targetY:l}){const o=Math.abs(i-e)/2,s=i0}const $T=({source:e,sourceHandle:n,target:i,targetHandle:l})=>`xy-edge__${e}${n||""}-${i}${l||""}`,XT=(e,n)=>n.some(i=>i.source===e.source&&i.target===e.target&&(i.sourceHandle===e.sourceHandle||!i.sourceHandle&&!e.sourceHandle)&&(i.targetHandle===e.targetHandle||!i.targetHandle&&!e.targetHandle)),PT=(e,n,i={})=>{if(!e.source||!e.target)return n;const l=i.getEdgeId||$T;let o;return zw(e)?o={...e}:o={...e,id:l(e)},XT(o,n)?n:(o.sourceHandle===null&&delete o.sourceHandle,o.targetHandle===null&&delete o.targetHandle,n.concat(o))};function Iw({sourceX:e,sourceY:n,targetX:i,targetY:l}){const[o,s,u,f]=Uw({sourceX:e,sourceY:n,targetX:i,targetY:l});return[`M ${e},${n}L ${i},${l}`,o,s,u,f]}const nv={[we.Left]:{x:-1,y:0},[we.Right]:{x:1,y:0},[we.Top]:{x:0,y:-1},[we.Bottom]:{x:0,y:1}},FT=({source:e,sourcePosition:n=we.Bottom,target:i})=>n===we.Left||n===we.Right?e.xMath.sqrt(Math.pow(n.x-e.x,2)+Math.pow(n.y-e.y,2));function QT({source:e,sourcePosition:n=we.Bottom,target:i,targetPosition:l=we.Top,center:o,offset:s,stepPosition:u}){const f=nv[n],d=nv[l],h={x:e.x+f.x*s,y:e.y+f.y*s},m={x:i.x+d.x*s,y:i.y+d.y*s},p=FT({source:h,sourcePosition:n,target:m}),y=p.x!==0?"x":"y",v=p[y];let w=[],k,S;const _={x:0,y:0},z={x:0,y:0},[,,E,A]=Uw({sourceX:e.x,sourceY:e.y,targetX:i.x,targetY:i.y});if(f[y]*d[y]===-1){y==="x"?(k=o.x??h.x+(m.x-h.x)*u,S=o.y??(h.y+m.y)/2):(k=o.x??(h.x+m.x)/2,S=o.y??h.y+(m.y-h.y)*u);const T=[{x:k,y:h.y},{x:k,y:m.y}],q=[{x:h.x,y:S},{x:m.x,y:S}];f[y]===v?w=y==="x"?T:q:w=y==="x"?q:T}else{const T=[{x:h.x,y:m.y}],q=[{x:m.x,y:h.y}];if(y==="x"?w=f.x===v?q:T:w=f.y===v?T:q,n===l){const I=Math.abs(e[y]-i[y]);if(I<=s){const ee=Math.min(s-1,s-I);f[y]===v?_[y]=(h[y]>e[y]?-1:1)*ee:z[y]=(m[y]>i[y]?-1:1)*ee}}if(n!==l){const I=y==="x"?"y":"x",ee=f[y]===d[I],L=h[I]>m[I],G=h[I]=H?(k=(M.x+D.x)/2,S=w[0].y):(k=w[0].x,S=(M.y+D.y)/2)}return[[e,{x:h.x+_.x,y:h.y+_.y},...w,{x:m.x+z.x,y:m.y+z.y},i],k,S,E,A]}function ZT(e,n,i,l){const o=Math.min(rv(e,n)/2,rv(n,i)/2,l),{x:s,y:u}=n;if(e.x===s&&s===i.x||e.y===u&&u===i.y)return`L${s} ${u}`;if(e.y===u){const h=e.x{let A="";return E>0&&Ei.id===n):e[0])||null}function Tp(e,n){return e?typeof e=="string"?e:`${n?`${n}__`:""}${Object.keys(e).sort().map(l=>`${l}=${e[l]}`).join("&")}`:""}function JT(e,{id:n,defaultColor:i,defaultMarkerStart:l,defaultMarkerEnd:o}){const s=new Set;return e.reduce((u,f)=>([f.markerStart||l,f.markerEnd||o].forEach(d=>{if(d&&typeof d=="object"){const h=Tp(d,n);s.has(h)||(u.push({id:h,color:d.color||i,...d}),s.add(h))}}),u),[]).sort((u,f)=>u.id.localeCompare(f.id))}const Vw=1e3,WT=10,lm={nodeOrigin:[0,0],nodeExtent:Ao,elevateNodesOnSelect:!0,zIndexMode:"basic",defaults:{}},ez={...lm,checkEquality:!0};function am(e,n){const i={...e};for(const l in n)n[l]!==void 0&&(i[l]=n[l]);return i}function tz(e,n,i){const l=am(lm,i);for(const o of e.values())if(o.parentId)sm(o,e,n,l);else{const s=Io(o,l.nodeOrigin),u=na(o.extent)?o.extent:l.nodeExtent,f=$i(s,u,Ar(o));o.internals.positionAbsolute=f}}function nz(e,n){if(!e.handles)return e.measured?n==null?void 0:n.internals.handleBounds:void 0;const i=[],l=[];for(const o of e.handles){const s={id:o.id,width:o.width??1,height:o.height??1,nodeId:e.id,x:o.x,y:o.y,position:o.position,type:o.type};o.type==="source"?i.push(s):o.type==="target"&&l.push(s)}return{source:i,target:l}}function om(e){return e==="manual"}function zp(e,n,i,l={}){var h,m;const o=am(ez,l),s={i:0},u=new Map(n),f=o!=null&&o.elevateNodesOnSelect&&!om(o.zIndexMode)?Vw:0;let d=e.length>0;n.clear(),i.clear();for(const p of e){let y=u.get(p.id);if(o.checkEquality&&p===(y==null?void 0:y.internals.userNode))n.set(p.id,y);else{const v=Io(p,o.nodeOrigin),w=na(p.extent)?p.extent:o.nodeExtent,k=$i(v,w,Ar(p));y={...o.defaults,...p,measured:{width:(h=p.measured)==null?void 0:h.width,height:(m=p.measured)==null?void 0:m.height},internals:{positionAbsolute:k,handleBounds:nz(p,y),z:Yw(p,f,o.zIndexMode),userNode:p}},n.set(p.id,y)}(y.measured===void 0||y.measured.width===void 0||y.measured.height===void 0)&&!y.hidden&&(d=!1),p.parentId&&sm(y,n,i,l,s)}return d}function rz(e,n){if(!e.parentId)return;const i=n.get(e.parentId);i?i.set(e.id,e):n.set(e.parentId,new Map([[e.id,e]]))}function sm(e,n,i,l,o){const{elevateNodesOnSelect:s,nodeOrigin:u,nodeExtent:f,zIndexMode:d}=am(lm,l),h=e.parentId,m=n.get(h);if(!m){console.warn(`Parent node ${h} not found. Please make sure that parent nodes are in front of their child nodes in the nodes array.`);return}rz(e,i),o&&!m.parentId&&m.internals.rootParentIndex===void 0&&d==="auto"&&(m.internals.rootParentIndex=++o.i,m.internals.z=m.internals.z+o.i*WT),o&&m.internals.rootParentIndex!==void 0&&(o.i=m.internals.rootParentIndex);const p=s&&!om(d)?Vw:0,{x:y,y:v,z:w}=iz(e,m,u,f,p,d),{positionAbsolute:k}=e.internals,S=y!==k.x||v!==k.y;(S||w!==e.internals.z)&&n.set(e.id,{...e,internals:{...e.internals,positionAbsolute:S?{x:y,y:v}:k,z:w}})}function Yw(e,n,i){const l=qn(e.zIndex)?e.zIndex:0;return om(i)?l:l+(e.selected?n:0)}function iz(e,n,i,l,o,s){const{x:u,y:f}=n.internals.positionAbsolute,d=Ar(e),h=Io(e,i),m=na(e.extent)?$i(h,e.extent,d):h;let p=$i({x:u+m.x,y:f+m.y},l,d);e.extent==="parent"&&(p=Mw(p,d,n));const y=Yw(e,o,s),v=n.internals.z??0;return{x:p.x,y:p.y,z:v>=y?v+1:y}}function um(e,n,i,l=[0,0]){var u;const o=[],s=new Map;for(const f of e){const d=n.get(f.parentId);if(!d)continue;const h=((u=s.get(f.parentId))==null?void 0:u.expandedRect)??ta(d),m=Ow(h,f.rect);s.set(f.parentId,{expandedRect:m,parent:d})}return s.size>0&&s.forEach(({expandedRect:f,parent:d},h)=>{var E;const m=d.internals.positionAbsolute,p=Ar(d),y=d.origin??l,v=f.x0||w>0||_||z)&&(o.push({id:h,type:"position",position:{x:d.position.x-v+_,y:d.position.y-w+z}}),(E=i.get(h))==null||E.forEach(A=>{e.some(B=>B.id===A.id)||o.push({id:A.id,type:"position",position:{x:A.position.x+v,y:A.position.y+w}})})),(p.width0){const v=um(y,n,i,o);h.push(...v)}return{changes:h,updatedInternals:d}}async function az({delta:e,panZoom:n,transform:i,translateExtent:l,width:o,height:s}){if(!n||!e.x&&!e.y)return Promise.resolve(!1);const u=await n.setViewportConstrained({x:i[0]+e.x,y:i[1]+e.y,zoom:i[2]},[[0,0],[o,s]],l),f=!!u&&(u.x!==i[0]||u.y!==i[1]||u.k!==i[2]);return Promise.resolve(f)}function ov(e,n,i,l,o,s){let u=o;const f=l.get(u)||new Map;l.set(u,f.set(i,n)),u=`${o}-${e}`;const d=l.get(u)||new Map;if(l.set(u,d.set(i,n)),s){u=`${o}-${e}-${s}`;const h=l.get(u)||new Map;l.set(u,h.set(i,n))}}function Gw(e,n,i){e.clear(),n.clear();for(const l of i){const{source:o,target:s,sourceHandle:u=null,targetHandle:f=null}=l,d={edgeId:l.id,source:o,target:s,sourceHandle:u,targetHandle:f},h=`${o}-${u}--${s}-${f}`,m=`${s}-${f}--${o}-${u}`;ov("source",d,m,e,o,u),ov("target",d,h,e,s,f),n.set(l.id,l)}}function $w(e,n){if(!e.parentId)return!1;const i=n.get(e.parentId);return i?i.selected?!0:$w(i,n):!1}function sv(e,n,i){var o;let l=e;do{if((o=l==null?void 0:l.matches)!=null&&o.call(l,n))return!0;if(l===i)return!1;l=l==null?void 0:l.parentElement}while(l);return!1}function oz(e,n,i,l){const o=new Map;for(const[s,u]of e)if((u.selected||u.id===l)&&(!u.parentId||!$w(u,e))&&(u.draggable||n&&typeof u.draggable>"u")){const f=e.get(s);f&&o.set(s,{id:s,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 o}function Jd({nodeId:e,dragItems:n,nodeLookup:i,dragging:l=!0}){var u,f,d;const o=[];for(const[h,m]of n){const p=(u=i.get(h))==null?void 0:u.internals.userNode;p&&o.push({...p,position:m.position,dragging:l})}if(!e)return[o[0],o];const s=(f=i.get(e))==null?void 0:f.internals.userNode;return[s?{...s,position:((d=n.get(e))==null?void 0:d.position)||s.position,dragging:l}:o[0],o]}function sz({dragItems:e,snapGrid:n,x:i,y:l}){const o=e.values().next().value;if(!o)return null;const s={x:i-o.distance.x,y:l-o.distance.y},u=Yo(s,n);return{x:u.x-s.x,y:u.y-s.y}}function uz({onNodeMouseDown:e,getStoreItems:n,onDragStart:i,onDrag:l,onDragStop:o}){let s={x:null,y:null},u=0,f=new Map,d=!1,h={x:0,y:0},m=null,p=!1,y=null,v=!1,w=!1,k=null;function S({noDragClassName:z,handleSelector:E,domNode:A,isSelectable:B,nodeId:T,nodeClickDistance:q=0}){y=xn(A);function M({x:I,y:ee}){const{nodeLookup:L,nodeExtent:G,snapGrid:R,snapToGrid:$,nodeOrigin:Z,onNodeDrag:J,onSelectionDrag:j,onError:U,updateNodePositions:P}=n();s={x:I,y:ee};let N=!1;const Y=f.size>1,F=Y&&G?kp(Vo(f)):null,K=Y&&$?sz({dragItems:f,snapGrid:R,x:I,y:ee}):null;for(const[ne,re]of f){if(!L.has(ne))continue;let se={x:I-re.distance.x,y:ee-re.distance.y};$&&(se=K?{x:Math.round(se.x+K.x),y:Math.round(se.y+K.y)}:Yo(se,R));let ye=null;if(Y&&G&&!re.extent&&F){const{positionAbsolute:pe}=re.internals,_e=pe.x-F.x+G[0][0],Me=pe.x+re.measured.width-F.x2+G[1][0],Ce=pe.y-F.y+G[0][1],st=pe.y+re.measured.height-F.y2+G[1][1];ye=[[_e,Ce],[Me,st]]}const{position:ve,positionAbsolute:xe}=Aw({nodeId:ne,nextPosition:se,nodeLookup:L,nodeExtent:ye||G,nodeOrigin:Z,onError:U});N=N||re.position.x!==ve.x||re.position.y!==ve.y,re.position=ve,re.internals.positionAbsolute=xe}if(w=w||N,!!N&&(P(f,!0),k&&(l||J||!T&&j))){const[ne,re]=Jd({nodeId:T,dragItems:f,nodeLookup:L});l==null||l(k,f,ne,re),J==null||J(k,ne,re),T||j==null||j(k,re)}}async function D(){if(!m)return;const{transform:I,panBy:ee,autoPanSpeed:L,autoPanOnNodeDrag:G}=n();if(!G){d=!1,cancelAnimationFrame(u);return}const[R,$]=jw(h,m,L);(R!==0||$!==0)&&(s.x=(s.x??0)-R/I[2],s.y=(s.y??0)-$/I[2],await ee({x:R,y:$})&&M(s)),u=requestAnimationFrame(D)}function X(I){var Y;const{nodeLookup:ee,multiSelectionActive:L,nodesDraggable:G,transform:R,snapGrid:$,snapToGrid:Z,selectNodesOnDrag:J,onNodeDragStart:j,onSelectionDragStart:U,unselectNodesAndEdges:P}=n();p=!0,(!J||!B)&&!L&&T&&((Y=ee.get(T))!=null&&Y.selected||P()),B&&J&&T&&(e==null||e(T));const N=vo(I.sourceEvent,{transform:R,snapGrid:$,snapToGrid:Z,containerBounds:m});if(s=N,f=oz(ee,G,N,T),f.size>0&&(i||j||!T&&U)){const[F,K]=Jd({nodeId:T,dragItems:f,nodeLookup:ee});i==null||i(I.sourceEvent,f,F,K),j==null||j(I.sourceEvent,F,K),T||U==null||U(I.sourceEvent,K)}}const H=uw().clickDistance(q).on("start",I=>{const{domNode:ee,nodeDragThreshold:L,transform:G,snapGrid:R,snapToGrid:$}=n();m=(ee==null?void 0:ee.getBoundingClientRect())||null,v=!1,w=!1,k=I.sourceEvent,L===0&&X(I),s=vo(I.sourceEvent,{transform:G,snapGrid:R,snapToGrid:$,containerBounds:m}),h=Un(I.sourceEvent,m)}).on("drag",I=>{const{autoPanOnNodeDrag:ee,transform:L,snapGrid:G,snapToGrid:R,nodeDragThreshold:$,nodeLookup:Z}=n(),J=vo(I.sourceEvent,{transform:L,snapGrid:G,snapToGrid:R,containerBounds:m});if(k=I.sourceEvent,(I.sourceEvent.type==="touchmove"&&I.sourceEvent.touches.length>1||T&&!Z.has(T))&&(v=!0),!v){if(!d&&ee&&p&&(d=!0,D()),!p){const j=Un(I.sourceEvent,m),U=j.x-h.x,P=j.y-h.y;Math.sqrt(U*U+P*P)>$&&X(I)}(s.x!==J.xSnapped||s.y!==J.ySnapped)&&f&&p&&(h=Un(I.sourceEvent,m),M(J))}}).on("end",I=>{if(!(!p||v)&&(d=!1,p=!1,cancelAnimationFrame(u),f.size>0)){const{nodeLookup:ee,updateNodePositions:L,onNodeDragStop:G,onSelectionDragStop:R}=n();if(w&&(L(f,!1),w=!1),o||G||!T&&R){const[$,Z]=Jd({nodeId:T,dragItems:f,nodeLookup:ee,dragging:!1});o==null||o(I.sourceEvent,f,$,Z),G==null||G(I.sourceEvent,$,Z),T||R==null||R(I.sourceEvent,Z)}}}).filter(I=>{const ee=I.target;return!I.button&&(!z||!sv(ee,`.${z}`,A))&&(!E||sv(ee,E,A))});y.call(H)}function _(){y==null||y.on(".drag",null)}return{update:S,destroy:_}}function cz(e,n,i){const l=[],o={x:e.x-i,y:e.y-i,width:i*2,height:i*2};for(const s of n.values())jo(o,ta(s))>0&&l.push(s);return l}const fz=250;function dz(e,n,i,l){var f,d;let o=[],s=1/0;const u=cz(e,i,n+fz);for(const h of u){const m=[...((f=h.internals.handleBounds)==null?void 0:f.source)??[],...((d=h.internals.handleBounds)==null?void 0:d.target)??[]];for(const p of m){if(l.nodeId===p.nodeId&&l.type===p.type&&l.id===p.id)continue;const{x:y,y:v}=Xi(h,p,p.position,!0),w=Math.sqrt(Math.pow(y-e.x,2)+Math.pow(v-e.y,2));w>n||(w1){const h=l.type==="source"?"target":"source";return o.find(m=>m.type===h)??o[0]}return o[0]}function Xw(e,n,i,l,o,s=!1){var h,m,p;const u=l.get(e);if(!u)return null;const f=o==="strict"?(h=u.internals.handleBounds)==null?void 0:h[n]:[...((m=u.internals.handleBounds)==null?void 0:m.source)??[],...((p=u.internals.handleBounds)==null?void 0:p.target)??[]],d=(i?f==null?void 0:f.find(y=>y.id===i):f==null?void 0:f[0])??null;return d&&s?{...d,...Xi(u,d,d.position,!0)}:d}function Pw(e,n){return e||(n!=null&&n.classList.contains("target")?"target":n!=null&&n.classList.contains("source")?"source":null)}function hz(e,n){let i=null;return n?i=!0:e&&!n&&(i=!1),i}const Fw=()=>!0;function pz(e,{connectionMode:n,connectionRadius:i,handleId:l,nodeId:o,edgeUpdaterType:s,isTarget:u,domNode:f,nodeLookup:d,lib:h,autoPanOnConnect:m,flowId:p,panBy:y,cancelConnection:v,onConnectStart:w,onConnect:k,onConnectEnd:S,isValidConnection:_=Fw,onReconnectEnd:z,updateConnection:E,getTransform:A,getFromHandle:B,autoPanSpeed:T,dragThreshold:q=1,handleDomNode:M}){const D=Lw(e.target);let X=0,H;const{x:I,y:ee}=Un(e),L=Pw(s,M),G=f==null?void 0:f.getBoundingClientRect();let R=!1;if(!G||!L)return;const $=Xw(o,L,l,d,n);if(!$)return;let Z=Un(e,G),J=!1,j=null,U=!1,P=null;function N(){if(!m||!G)return;const[ve,xe]=jw(Z,G,T);y({x:ve,y:xe}),X=requestAnimationFrame(N)}const Y={...$,nodeId:o,type:L,position:$.position},F=d.get(o);let ne={inProgress:!0,isValid:null,from:Xi(F,Y,we.Left,!0),fromHandle:Y,fromPosition:Y.position,fromNode:F,to:Z,toHandle:null,toPosition:Zx[Y.position],toNode:null,pointer:Z};function re(){R=!0,E(ne),w==null||w(e,{nodeId:o,handleId:l,handleType:L})}q===0&&re();function se(ve){if(!R){const{x:st,y:We}=Un(ve),zt=st-I,Ut=We-ee;if(!(zt*zt+Ut*Ut>q*q))return;re()}if(!B()||!Y){ye(ve);return}const xe=A();Z=Un(ve,G),H=dz(Go(Z,xe,!1,[1,1]),i,d,Y),J||(N(),J=!0);const pe=Qw(ve,{handle:H,connectionMode:n,fromNodeId:o,fromHandleId:l,fromType:u?"target":"source",isValidConnection:_,doc:D,lib:h,flowId:p,nodeLookup:d});P=pe.handleDomNode,j=pe.connection,U=hz(!!H,pe.isValid);const _e=d.get(o),Me=_e?Xi(_e,Y,we.Left,!0):ne.from,Ce={...ne,from:Me,isValid:U,to:pe.toHandle&&U?tc({x:pe.toHandle.x,y:pe.toHandle.y},xe):Z,toHandle:pe.toHandle,toPosition:U&&pe.toHandle?pe.toHandle.position:Zx[Y.position],toNode:pe.toHandle?d.get(pe.toHandle.nodeId):null,pointer:Z};E(Ce),ne=Ce}function ye(ve){if(!("touches"in ve&&ve.touches.length>0)){if(R){(H||P)&&j&&U&&(k==null||k(j));const{inProgress:xe,...pe}=ne,_e={...pe,toPosition:ne.toHandle?ne.toPosition:null};S==null||S(ve,_e),s&&(z==null||z(ve,_e))}v(),cancelAnimationFrame(X),J=!1,U=!1,j=null,P=null,D.removeEventListener("mousemove",se),D.removeEventListener("mouseup",ye),D.removeEventListener("touchmove",se),D.removeEventListener("touchend",ye)}}D.addEventListener("mousemove",se),D.addEventListener("mouseup",ye),D.addEventListener("touchmove",se),D.addEventListener("touchend",ye)}function Qw(e,{handle:n,connectionMode:i,fromNodeId:l,fromHandleId:o,fromType:s,doc:u,lib:f,flowId:d,isValidConnection:h=Fw,nodeLookup:m}){const p=s==="target",y=n?u.querySelector(`.${f}-flow__handle[data-id="${d}-${n==null?void 0:n.nodeId}-${n==null?void 0:n.id}-${n==null?void 0:n.type}"]`):null,{x:v,y:w}=Un(e),k=u.elementFromPoint(v,w),S=k!=null&&k.classList.contains(`${f}-flow__handle`)?k:y,_={handleDomNode:S,isValid:!1,connection:null,toHandle:null};if(S){const z=Pw(void 0,S),E=S.getAttribute("data-nodeid"),A=S.getAttribute("data-handleid"),B=S.classList.contains("connectable"),T=S.classList.contains("connectableend");if(!E||!z)return _;const q={source:p?E:l,sourceHandle:p?A:o,target:p?l:E,targetHandle:p?o:A};_.connection=q;const D=B&&T&&(i===Wl.Strict?p&&z==="source"||!p&&z==="target":E!==l||A!==o);_.isValid=D&&h(q),_.toHandle=Xw(E,z,A,m,i,!0)}return _}const Ap={onPointerDown:pz,isValid:Qw};function mz({domNode:e,panZoom:n,getTransform:i,getViewScale:l}){const o=xn(e);function s({translateExtent:f,width:d,height:h,zoomStep:m=1,pannable:p=!0,zoomable:y=!0,inversePan:v=!1}){const w=E=>{if(E.sourceEvent.type!=="wheel"||!n)return;const A=i(),B=E.sourceEvent.ctrlKey&&Oo()?10:1,T=-E.sourceEvent.deltaY*(E.sourceEvent.deltaMode===1?.05:E.sourceEvent.deltaMode?1:.002)*m,q=A[2]*Math.pow(2,T*B);n.scaleTo(q)};let k=[0,0];const S=E=>{(E.sourceEvent.type==="mousedown"||E.sourceEvent.type==="touchstart")&&(k=[E.sourceEvent.clientX??E.sourceEvent.touches[0].clientX,E.sourceEvent.clientY??E.sourceEvent.touches[0].clientY])},_=E=>{const A=i();if(E.sourceEvent.type!=="mousemove"&&E.sourceEvent.type!=="touchmove"||!n)return;const B=[E.sourceEvent.clientX??E.sourceEvent.touches[0].clientX,E.sourceEvent.clientY??E.sourceEvent.touches[0].clientY],T=[B[0]-k[0],B[1]-k[1]];k=B;const q=l()*Math.max(A[2],Math.log(A[2]))*(v?-1:1),M={x:A[0]-T[0]*q,y:A[1]-T[1]*q},D=[[0,0],[d,h]];n.setViewportConstrained({x:M.x,y:M.y,zoom:A[2]},D,f)},z=Ew().on("start",S).on("zoom",p?_:null).on("zoom.wheel",y?w:null);o.call(z,{})}function u(){o.on("zoom",null)}return{update:s,destroy:u,pointer:Hn}}const yc=e=>({x:e.x,y:e.y,zoom:e.k}),Wd=({x:e,y:n,zoom:i})=>pc.translate(e,n).scale(i),Vl=(e,n)=>e.target.closest(`.${n}`),Zw=(e,n)=>n===2&&Array.isArray(e)&&e.includes(2),gz=e=>((e*=2)<=1?e*e*e:(e-=2)*e*e+2)/2,eh=(e,n=0,i=gz,l=()=>{})=>{const o=typeof n=="number"&&n>0;return o||l(),o?e.transition().duration(n).ease(i).on("end",l):e},Kw=e=>{const n=e.ctrlKey&&Oo()?10:1;return-e.deltaY*(e.deltaMode===1?.05:e.deltaMode?1:.002)*n};function yz({zoomPanValues:e,noWheelClassName:n,d3Selection:i,d3Zoom:l,panOnScrollMode:o,panOnScrollSpeed:s,zoomOnPinch:u,onPanZoomStart:f,onPanZoom:d,onPanZoomEnd:h}){return m=>{if(Vl(m,n))return m.ctrlKey&&m.preventDefault(),!1;m.preventDefault(),m.stopImmediatePropagation();const p=i.property("__zoom").k||1;if(m.ctrlKey&&u){const S=Hn(m),_=Kw(m),z=p*Math.pow(2,_);l.scaleTo(i,z,S,m);return}const y=m.deltaMode===1?20:1;let v=o===Ii.Vertical?0:m.deltaX*y,w=o===Ii.Horizontal?0:m.deltaY*y;!Oo()&&m.shiftKey&&o!==Ii.Vertical&&(v=m.deltaY*y,w=0),l.translateBy(i,-(v/p)*s,-(w/p)*s,{internal:!0});const k=yc(i.property("__zoom"));clearTimeout(e.panScrollTimeout),e.isPanScrolling?(d==null||d(m,k),e.panScrollTimeout=setTimeout(()=>{h==null||h(m,k),e.isPanScrolling=!1},150)):(e.isPanScrolling=!0,f==null||f(m,k))}}function xz({noWheelClassName:e,preventScrolling:n,d3ZoomHandler:i}){return function(l,o){const s=l.type==="wheel",u=!n&&s&&!l.ctrlKey,f=Vl(l,e);if(l.ctrlKey&&s&&f&&l.preventDefault(),u||f)return null;l.preventDefault(),i.call(this,l,o)}}function vz({zoomPanValues:e,onDraggingChange:n,onPanZoomStart:i}){return l=>{var s,u,f;if((s=l.sourceEvent)!=null&&s.internal)return;const o=yc(l.transform);e.mouseButton=((u=l.sourceEvent)==null?void 0:u.button)||0,e.isZoomingOrPanning=!0,e.prevViewport=o,((f=l.sourceEvent)==null?void 0:f.type)==="mousedown"&&n(!0),i&&(i==null||i(l.sourceEvent,o))}}function bz({zoomPanValues:e,panOnDrag:n,onPaneContextMenu:i,onTransformChange:l,onPanZoom:o}){return s=>{var u,f;e.usedRightMouseButton=!!(i&&Zw(n,e.mouseButton??0)),(u=s.sourceEvent)!=null&&u.sync||l([s.transform.x,s.transform.y,s.transform.k]),o&&!((f=s.sourceEvent)!=null&&f.internal)&&(o==null||o(s.sourceEvent,yc(s.transform)))}}function wz({zoomPanValues:e,panOnDrag:n,panOnScroll:i,onDraggingChange:l,onPanZoomEnd:o,onPaneContextMenu:s}){return u=>{var f;if(!((f=u.sourceEvent)!=null&&f.internal)&&(e.isZoomingOrPanning=!1,s&&Zw(n,e.mouseButton??0)&&!e.usedRightMouseButton&&u.sourceEvent&&s(u.sourceEvent),e.usedRightMouseButton=!1,l(!1),o)){const d=yc(u.transform);e.prevViewport=d,clearTimeout(e.timerId),e.timerId=setTimeout(()=>{o==null||o(u.sourceEvent,d)},i?150:0)}}}function Sz({zoomActivationKeyPressed:e,zoomOnScroll:n,zoomOnPinch:i,panOnDrag:l,panOnScroll:o,zoomOnDoubleClick:s,userSelectionActive:u,noWheelClassName:f,noPanClassName:d,lib:h,connectionInProgress:m}){return p=>{var S;const y=e||n,v=i&&p.ctrlKey,w=p.type==="wheel";if(p.button===1&&p.type==="mousedown"&&(Vl(p,`${h}-flow__node`)||Vl(p,`${h}-flow__edge`)))return!0;if(!l&&!y&&!o&&!s&&!i||u||m&&!w||Vl(p,f)&&w||Vl(p,d)&&(!w||o&&w&&!e)||!i&&p.ctrlKey&&w)return!1;if(!i&&p.type==="touchstart"&&((S=p.touches)==null?void 0:S.length)>1)return p.preventDefault(),!1;if(!y&&!o&&!v&&w||!l&&(p.type==="mousedown"||p.type==="touchstart")||Array.isArray(l)&&!l.includes(p.button)&&p.type==="mousedown")return!1;const k=Array.isArray(l)&&l.includes(p.button)||!p.button||p.button<=1;return(!p.ctrlKey||w)&&k}}function _z({domNode:e,minZoom:n,maxZoom:i,translateExtent:l,viewport:o,onPanZoom:s,onPanZoomStart:u,onPanZoomEnd:f,onDraggingChange:d}){const h={isZoomingOrPanning:!1,usedRightMouseButton:!1,prevViewport:{},mouseButton:0,timerId:void 0,panScrollTimeout:void 0,isPanScrolling:!1},m=e.getBoundingClientRect(),p=Ew().scaleExtent([n,i]).translateExtent(l),y=xn(e).call(p);z({x:o.x,y:o.y,zoom:ea(o.zoom,n,i)},[[0,0],[m.width,m.height]],l);const v=y.on("wheel.zoom"),w=y.on("dblclick.zoom");p.wheelDelta(Kw);function k(H,I){return y?new Promise(ee=>{p==null||p.interpolate((I==null?void 0:I.interpolate)==="linear"?xo:Bu).transform(eh(y,I==null?void 0:I.duration,I==null?void 0:I.ease,()=>ee(!0)),H)}):Promise.resolve(!1)}function S({noWheelClassName:H,noPanClassName:I,onPaneContextMenu:ee,userSelectionActive:L,panOnScroll:G,panOnDrag:R,panOnScrollMode:$,panOnScrollSpeed:Z,preventScrolling:J,zoomOnPinch:j,zoomOnScroll:U,zoomOnDoubleClick:P,zoomActivationKeyPressed:N,lib:Y,onTransformChange:F,connectionInProgress:K,paneClickDistance:ne,selectionOnDrag:re}){L&&!h.isZoomingOrPanning&&_();const se=G&&!N&&!L;p.clickDistance(re?1/0:!qn(ne)||ne<0?0:ne);const ye=se?yz({zoomPanValues:h,noWheelClassName:H,d3Selection:y,d3Zoom:p,panOnScrollMode:$,panOnScrollSpeed:Z,zoomOnPinch:j,onPanZoomStart:u,onPanZoom:s,onPanZoomEnd:f}):xz({noWheelClassName:H,preventScrolling:J,d3ZoomHandler:v});if(y.on("wheel.zoom",ye,{passive:!1}),!L){const xe=vz({zoomPanValues:h,onDraggingChange:d,onPanZoomStart:u});p.on("start",xe);const pe=bz({zoomPanValues:h,panOnDrag:R,onPaneContextMenu:!!ee,onPanZoom:s,onTransformChange:F});p.on("zoom",pe);const _e=wz({zoomPanValues:h,panOnDrag:R,panOnScroll:G,onPaneContextMenu:ee,onPanZoomEnd:f,onDraggingChange:d});p.on("end",_e)}const ve=Sz({zoomActivationKeyPressed:N,panOnDrag:R,zoomOnScroll:U,panOnScroll:G,zoomOnDoubleClick:P,zoomOnPinch:j,userSelectionActive:L,noPanClassName:I,noWheelClassName:H,lib:Y,connectionInProgress:K});p.filter(ve),P?y.on("dblclick.zoom",w):y.on("dblclick.zoom",null)}function _(){p.on("zoom",null)}async function z(H,I,ee){const L=Wd(H),G=p==null?void 0:p.constrain()(L,I,ee);return G&&await k(G),new Promise(R=>R(G))}async function E(H,I){const ee=Wd(H);return await k(ee,I),new Promise(L=>L(ee))}function A(H){if(y){const I=Wd(H),ee=y.property("__zoom");(ee.k!==H.zoom||ee.x!==H.x||ee.y!==H.y)&&(p==null||p.transform(y,I,null,{sync:!0}))}}function B(){const H=y?_w(y.node()):{x:0,y:0,k:1};return{x:H.x,y:H.y,zoom:H.k}}function T(H,I){return y?new Promise(ee=>{p==null||p.interpolate((I==null?void 0:I.interpolate)==="linear"?xo:Bu).scaleTo(eh(y,I==null?void 0:I.duration,I==null?void 0:I.ease,()=>ee(!0)),H)}):Promise.resolve(!1)}function q(H,I){return y?new Promise(ee=>{p==null||p.interpolate((I==null?void 0:I.interpolate)==="linear"?xo:Bu).scaleBy(eh(y,I==null?void 0:I.duration,I==null?void 0:I.ease,()=>ee(!0)),H)}):Promise.resolve(!1)}function M(H){p==null||p.scaleExtent(H)}function D(H){p==null||p.translateExtent(H)}function X(H){const I=!qn(H)||H<0?0:H;p==null||p.clickDistance(I)}return{update:S,destroy:_,setViewport:E,setViewportConstrained:z,getViewport:B,scaleTo:T,scaleBy:q,setScaleExtent:M,setTranslateExtent:D,syncViewport:A,setClickDistance:X}}var ra;(function(e){e.Line="line",e.Handle="handle"})(ra||(ra={}));function Ez({width:e,prevWidth:n,height:i,prevHeight:l,affectsX:o,affectsY:s}){const u=e-n,f=i-l,d=[u>0?1:u<0?-1:0,f>0?1:f<0?-1:0];return u&&o&&(d[0]=d[0]*-1),f&&s&&(d[1]=d[1]*-1),d}function uv(e){const n=e.includes("right")||e.includes("left"),i=e.includes("bottom")||e.includes("top"),l=e.includes("left"),o=e.includes("top");return{isHorizontal:n,isVertical:i,affectsX:l,affectsY:o}}function oi(e,n){return Math.max(0,n-e)}function si(e,n){return Math.max(0,e-n)}function zu(e,n,i){return Math.max(0,n-e,e-i)}function cv(e,n){return e?!n:n}function Nz(e,n,i,l,o,s,u,f){let{affectsX:d,affectsY:h}=n;const{isHorizontal:m,isVertical:p}=n,y=m&&p,{xSnapped:v,ySnapped:w}=i,{minWidth:k,maxWidth:S,minHeight:_,maxHeight:z}=l,{x:E,y:A,width:B,height:T,aspectRatio:q}=e;let M=Math.floor(m?v-e.pointerX:0),D=Math.floor(p?w-e.pointerY:0);const X=B+(d?-M:M),H=T+(h?-D:D),I=-s[0]*B,ee=-s[1]*T;let L=zu(X,k,S),G=zu(H,_,z);if(u){let Z=0,J=0;d&&M<0?Z=oi(E+M+I,u[0][0]):!d&&M>0&&(Z=si(E+X+I,u[1][0])),h&&D<0?J=oi(A+D+ee,u[0][1]):!h&&D>0&&(J=si(A+H+ee,u[1][1])),L=Math.max(L,Z),G=Math.max(G,J)}if(f){let Z=0,J=0;d&&M>0?Z=si(E+M,f[0][0]):!d&&M<0&&(Z=oi(E+X,f[1][0])),h&&D>0?J=si(A+D,f[0][1]):!h&&D<0&&(J=oi(A+H,f[1][1])),L=Math.max(L,Z),G=Math.max(G,J)}if(o){if(m){const Z=zu(X/q,_,z)*q;if(L=Math.max(L,Z),u){let J=0;!d&&!h||d&&!h&&y?J=si(A+ee+X/q,u[1][1])*q:J=oi(A+ee+(d?M:-M)/q,u[0][1])*q,L=Math.max(L,J)}if(f){let J=0;!d&&!h||d&&!h&&y?J=oi(A+X/q,f[1][1])*q:J=si(A+(d?M:-M)/q,f[0][1])*q,L=Math.max(L,J)}}if(p){const Z=zu(H*q,k,S)/q;if(G=Math.max(G,Z),u){let J=0;!d&&!h||h&&!d&&y?J=si(E+H*q+I,u[1][0])/q:J=oi(E+(h?D:-D)*q+I,u[0][0])/q,G=Math.max(G,J)}if(f){let J=0;!d&&!h||h&&!d&&y?J=oi(E+H*q,f[1][0])/q:J=si(E+(h?D:-D)*q,f[0][0])/q,G=Math.max(G,J)}}}D=D+(D<0?G:-G),M=M+(M<0?L:-L),o&&(y?X>H*q?D=(cv(d,h)?-M:M)/q:M=(cv(d,h)?-D:D)*q:m?(D=M/q,h=d):(M=D*q,d=h));const R=d?E+M:E,$=h?A+D:A;return{width:B+(d?-M:M),height:T+(h?-D:D),x:s[0]*M*(d?-1:1)+R,y:s[1]*D*(h?-1:1)+$}}const Jw={width:0,height:0,x:0,y:0},kz={...Jw,pointerX:0,pointerY:0,aspectRatio:1};function Cz(e){return[[0,0],[e.measured.width,e.measured.height]]}function Tz(e,n,i){const l=n.position.x+e.position.x,o=n.position.y+e.position.y,s=e.measured.width??0,u=e.measured.height??0,f=i[0]*s,d=i[1]*u;return[[l-f,o-d],[l+s-f,o+u-d]]}function zz({domNode:e,nodeId:n,getStoreItems:i,onChange:l,onEnd:o}){const s=xn(e);let u={controlDirection:uv("bottom-right"),boundaries:{minWidth:0,minHeight:0,maxWidth:Number.MAX_VALUE,maxHeight:Number.MAX_VALUE},resizeDirection:void 0,keepAspectRatio:!1};function f({controlPosition:h,boundaries:m,keepAspectRatio:p,resizeDirection:y,onResizeStart:v,onResize:w,onResizeEnd:k,shouldResize:S}){let _={...Jw},z={...kz};u={boundaries:m,resizeDirection:y,keepAspectRatio:p,controlDirection:uv(h)};let E,A=null,B=[],T,q,M,D=!1;const X=uw().on("start",H=>{const{nodeLookup:I,transform:ee,snapGrid:L,snapToGrid:G,nodeOrigin:R,paneDomNode:$}=i();if(E=I.get(n),!E)return;A=($==null?void 0:$.getBoundingClientRect())??null;const{xSnapped:Z,ySnapped:J}=vo(H.sourceEvent,{transform:ee,snapGrid:L,snapToGrid:G,containerBounds:A});_={width:E.measured.width??0,height:E.measured.height??0,x:E.position.x??0,y:E.position.y??0},z={..._,pointerX:Z,pointerY:J,aspectRatio:_.width/_.height},T=void 0,E.parentId&&(E.extent==="parent"||E.expandParent)&&(T=I.get(E.parentId),q=T&&E.extent==="parent"?Cz(T):void 0),B=[],M=void 0;for(const[j,U]of I)if(U.parentId===n&&(B.push({id:j,position:{...U.position},extent:U.extent}),U.extent==="parent"||U.expandParent)){const P=Tz(U,E,U.origin??R);M?M=[[Math.min(P[0][0],M[0][0]),Math.min(P[0][1],M[0][1])],[Math.max(P[1][0],M[1][0]),Math.max(P[1][1],M[1][1])]]:M=P}v==null||v(H,{..._})}).on("drag",H=>{const{transform:I,snapGrid:ee,snapToGrid:L,nodeOrigin:G}=i(),R=vo(H.sourceEvent,{transform:I,snapGrid:ee,snapToGrid:L,containerBounds:A}),$=[];if(!E)return;const{x:Z,y:J,width:j,height:U}=_,P={},N=E.origin??G,{width:Y,height:F,x:K,y:ne}=Nz(z,u.controlDirection,R,u.boundaries,u.keepAspectRatio,N,q,M),re=Y!==j,se=F!==U,ye=K!==Z&&re,ve=ne!==J&&se;if(!ye&&!ve&&!re&&!se)return;if((ye||ve||N[0]===1||N[1]===1)&&(P.x=ye?K:_.x,P.y=ve?ne:_.y,_.x=P.x,_.y=P.y,B.length>0)){const Me=K-Z,Ce=ne-J;for(const st of B)st.position={x:st.position.x-Me+N[0]*(Y-j),y:st.position.y-Ce+N[1]*(F-U)},$.push(st)}if((re||se)&&(P.width=re&&(!u.resizeDirection||u.resizeDirection==="horizontal")?Y:_.width,P.height=se&&(!u.resizeDirection||u.resizeDirection==="vertical")?F:_.height,_.width=P.width,_.height=P.height),T&&E.expandParent){const Me=N[0]*(P.width??0);P.x&&P.x{D&&(k==null||k(H,{..._}),o==null||o({..._}),D=!1)});s.call(X)}function d(){s.on(".drag",null)}return{update:f,destroy:d}}var th={exports:{}},nh={},rh={exports:{}},ih={};/** - * @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 fv;function Az(){if(fv)return ih;fv=1;var e=Ho();function n(p,y){return p===y&&(p!==0||1/p===1/y)||p!==p&&y!==y}var i=typeof Object.is=="function"?Object.is:n,l=e.useState,o=e.useEffect,s=e.useLayoutEffect,u=e.useDebugValue;function f(p,y){var v=y(),w=l({inst:{value:v,getSnapshot:y}}),k=w[0].inst,S=w[1];return s(function(){k.value=v,k.getSnapshot=y,d(k)&&S({inst:k})},[p,v,y]),o(function(){return d(k)&&S({inst:k}),p(function(){d(k)&&S({inst:k})})},[p]),u(v),v}function d(p){var y=p.getSnapshot;p=p.value;try{var v=y();return!i(p,v)}catch{return!0}}function h(p,y){return y()}var m=typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?h:f;return ih.useSyncExternalStore=e.useSyncExternalStore!==void 0?e.useSyncExternalStore:m,ih}var dv;function Mz(){return dv||(dv=1,rh.exports=Az()),rh.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 hv;function jz(){if(hv)return nh;hv=1;var e=Ho(),n=Mz();function i(h,m){return h===m&&(h!==0||1/h===1/m)||h!==h&&m!==m}var l=typeof Object.is=="function"?Object.is:i,o=n.useSyncExternalStore,s=e.useRef,u=e.useEffect,f=e.useMemo,d=e.useDebugValue;return nh.useSyncExternalStoreWithSelector=function(h,m,p,y,v){var w=s(null);if(w.current===null){var k={hasValue:!1,value:null};w.current=k}else k=w.current;w=f(function(){function _(T){if(!z){if(z=!0,E=T,T=y(T),v!==void 0&&k.hasValue){var q=k.value;if(v(q,T))return A=q}return A=T}if(q=A,l(E,T))return q;var M=y(T);return v!==void 0&&v(q,M)?(E=T,q):(E=T,A=M)}var z=!1,E,A,B=p===void 0?null:p;return[function(){return _(m())},B===null?void 0:function(){return _(B())}]},[m,p,y,v]);var S=o(h,w[0],w[1]);return u(function(){k.hasValue=!0,k.value=S},[S]),d(S),S},nh}var pv;function Oz(){return pv||(pv=1,th.exports=jz()),th.exports}var Rz=Oz();const Dz=Lo(Rz),Lz={},mv=e=>{let n;const i=new Set,l=(m,p)=>{const y=typeof m=="function"?m(n):m;if(!Object.is(y,n)){const v=n;n=p??(typeof y!="object"||y===null)?y:Object.assign({},n,y),i.forEach(w=>w(n,v))}},o=()=>n,d={setState:l,getState:o,getInitialState:()=>h,subscribe:m=>(i.add(m),()=>i.delete(m)),destroy:()=>{(Lz?"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()}},h=n=e(l,o,d);return d},Hz=e=>e?mv(e):mv,{useDebugValue:Bz}=Ul,{useSyncExternalStoreWithSelector:qz}=Dz,Uz=e=>e;function Ww(e,n=Uz,i){const l=qz(e.subscribe,e.getState,e.getServerState||e.getInitialState,n,i);return Bz(l),l}const gv=(e,n)=>{const i=Hz(e),l=(o,s=n)=>Ww(i,o,s);return Object.assign(l,i),l},Iz=(e,n)=>e?gv(e,n):gv;function dt(e,n){if(Object.is(e,n))return!0;if(typeof e!="object"||e===null||typeof n!="object"||n===null)return!1;if(e instanceof Map&&n instanceof Map){if(e.size!==n.size)return!1;for(const[l,o]of e)if(!Object.is(o,n.get(l)))return!1;return!0}if(e instanceof Set&&n instanceof Set){if(e.size!==n.size)return!1;for(const l of e)if(!n.has(l))return!1;return!0}const i=Object.keys(e);if(i.length!==Object.keys(n).length)return!1;for(const l of i)if(!Object.prototype.hasOwnProperty.call(n,l)||!Object.is(e[l],n[l]))return!1;return!0}var Vz=Eb();const xc=V.createContext(null),Yz=xc.Provider,eS=tr.error001();function Ie(e,n){const i=V.useContext(xc);if(i===null)throw new Error(eS);return Ww(i,e,n)}function ht(){const e=V.useContext(xc);if(e===null)throw new Error(eS);return V.useMemo(()=>({getState:e.getState,setState:e.setState,subscribe:e.subscribe}),[e])}const yv={display:"none"},Gz={position:"absolute",width:1,height:1,margin:-1,border:0,padding:0,overflow:"hidden",clip:"rect(0px, 0px, 0px, 0px)",clipPath:"inset(100%)"},tS="react-flow__node-desc",nS="react-flow__edge-desc",$z="react-flow__aria-live",Xz=e=>e.ariaLiveMessage,Pz=e=>e.ariaLabelConfig;function Fz({rfId:e}){const n=Ie(Xz);return b.jsx("div",{id:`${$z}-${e}`,"aria-live":"assertive","aria-atomic":"true",style:Gz,children:n})}function Qz({rfId:e,disableKeyboardA11y:n}){const i=Ie(Pz);return b.jsxs(b.Fragment,{children:[b.jsx("div",{id:`${tS}-${e}`,style:yv,children:n?i["node.a11yDescription.default"]:i["node.a11yDescription.keyboardDisabled"]}),b.jsx("div",{id:`${nS}-${e}`,style:yv,children:i["edge.a11yDescription.default"]}),!n&&b.jsx(Fz,{rfId:e})]})}const vc=V.forwardRef(({position:e="top-left",children:n,className:i,style:l,...o},s)=>{const u=`${e}`.split("-");return b.jsx("div",{className:Tt(["react-flow__panel",i,...u]),style:l,ref:s,...o,children:n})});vc.displayName="Panel";function Zz({proOptions:e,position:n="bottom-right"}){return e!=null&&e.hideAttribution?null:b.jsx(vc,{position:n,className:"react-flow__attribution","data-message":"Please only hide this attribution when you are subscribed to React Flow Pro: https://pro.reactflow.dev",children:b.jsx("a",{href:"https://reactflow.dev",target:"_blank",rel:"noopener noreferrer","aria-label":"React Flow attribution",children:"React Flow"})})}const Kz=e=>{const n=[],i=[];for(const[,l]of e.nodeLookup)l.selected&&n.push(l.internals.userNode);for(const[,l]of e.edgeLookup)l.selected&&i.push(l);return{selectedNodes:n,selectedEdges:i}},Au=e=>e.id;function Jz(e,n){return dt(e.selectedNodes.map(Au),n.selectedNodes.map(Au))&&dt(e.selectedEdges.map(Au),n.selectedEdges.map(Au))}function Wz({onSelectionChange:e}){const n=ht(),{selectedNodes:i,selectedEdges:l}=Ie(Kz,Jz);return V.useEffect(()=>{const o={nodes:i,edges:l};e==null||e(o),n.getState().onSelectionChangeHandlers.forEach(s=>s(o))},[i,l,e]),null}const eA=e=>!!e.onSelectionChangeHandlers;function tA({onSelectionChange:e}){const n=Ie(eA);return e||n?b.jsx(Wz,{onSelectionChange:e}):null}const rS=[0,0],nA={x:0,y:0,zoom:1},rA=["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"],xv=[...rA,"rfId"],iA=e=>({setNodes:e.setNodes,setEdges:e.setEdges,setMinZoom:e.setMinZoom,setMaxZoom:e.setMaxZoom,setTranslateExtent:e.setTranslateExtent,setNodeExtent:e.setNodeExtent,reset:e.reset,setDefaultNodesAndEdges:e.setDefaultNodesAndEdges}),vv={translateExtent:Ao,nodeOrigin:rS,minZoom:.5,maxZoom:2,elementsSelectable:!0,noPanClassName:"nopan",rfId:"1"};function lA(e){const{setNodes:n,setEdges:i,setMinZoom:l,setMaxZoom:o,setTranslateExtent:s,setNodeExtent:u,reset:f,setDefaultNodesAndEdges:d}=Ie(iA,dt),h=ht();V.useEffect(()=>(d(e.defaultNodes,e.defaultEdges),()=>{m.current=vv,f()}),[]);const m=V.useRef(vv);return V.useEffect(()=>{for(const p of xv){const y=e[p],v=m.current[p];y!==v&&(typeof e[p]>"u"||(p==="nodes"?n(y):p==="edges"?i(y):p==="minZoom"?l(y):p==="maxZoom"?o(y):p==="translateExtent"?s(y):p==="nodeExtent"?u(y):p==="ariaLabelConfig"?h.setState({ariaLabelConfig:IT(y)}):p==="fitView"?h.setState({fitViewQueued:y}):p==="fitViewOptions"?h.setState({fitViewOptions:y}):h.setState({[p]:y})))}m.current=e},xv.map(p=>e[p])),null}function bv(){return typeof window>"u"||!window.matchMedia?null:window.matchMedia("(prefers-color-scheme: dark)")}function aA(e){var l;const[n,i]=V.useState(e==="system"?null:e);return V.useEffect(()=>{if(e!=="system"){i(e);return}const o=bv(),s=()=>i(o!=null&&o.matches?"dark":"light");return s(),o==null||o.addEventListener("change",s),()=>{o==null||o.removeEventListener("change",s)}},[e]),n!==null?n:(l=bv())!=null&&l.matches?"dark":"light"}const wv=typeof document<"u"?document:null;function Ro(e=null,n={target:wv,actInsideInputWithModifier:!0}){const[i,l]=V.useState(!1),o=V.useRef(!1),s=V.useRef(new Set([])),[u,f]=V.useMemo(()=>{if(e!==null){const h=(Array.isArray(e)?e:[e]).filter(p=>typeof p=="string").map(p=>p.replace("+",` -`).replace(` - -`,` -+`).split(` -`)),m=h.reduce((p,y)=>p.concat(...y),[]);return[h,m]}return[[],[]]},[e]);return V.useEffect(()=>{const d=(n==null?void 0:n.target)??wv,h=(n==null?void 0:n.actInsideInputWithModifier)??!0;if(e!==null){const m=v=>{var S,_;if(o.current=v.ctrlKey||v.metaKey||v.shiftKey||v.altKey,(!o.current||o.current&&!h)&&Hw(v))return!1;const k=_v(v.code,f);if(s.current.add(v[k]),Sv(u,s.current,!1)){const z=((_=(S=v.composedPath)==null?void 0:S.call(v))==null?void 0:_[0])||v.target,E=(z==null?void 0:z.nodeName)==="BUTTON"||(z==null?void 0:z.nodeName)==="A";n.preventDefault!==!1&&(o.current||!E)&&v.preventDefault(),l(!0)}},p=v=>{const w=_v(v.code,f);Sv(u,s.current,!0)?(l(!1),s.current.clear()):s.current.delete(v[w]),v.key==="Meta"&&s.current.clear(),o.current=!1},y=()=>{s.current.clear(),l(!1)};return d==null||d.addEventListener("keydown",m),d==null||d.addEventListener("keyup",p),window.addEventListener("blur",y),window.addEventListener("contextmenu",y),()=>{d==null||d.removeEventListener("keydown",m),d==null||d.removeEventListener("keyup",p),window.removeEventListener("blur",y),window.removeEventListener("contextmenu",y)}}},[e,l]),i}function Sv(e,n,i){return e.filter(l=>i||l.length===n.size).some(l=>l.every(o=>n.has(o)))}function _v(e,n){return n.includes(e)?"code":"key"}const oA=()=>{const e=ht();return V.useMemo(()=>({zoomIn:n=>{const{panZoom:i}=e.getState();return i?i.scaleBy(1.2,{duration:n==null?void 0:n.duration}):Promise.resolve(!1)},zoomOut:n=>{const{panZoom:i}=e.getState();return i?i.scaleBy(1/1.2,{duration:n==null?void 0:n.duration}):Promise.resolve(!1)},zoomTo:(n,i)=>{const{panZoom:l}=e.getState();return l?l.scaleTo(n,{duration:i==null?void 0:i.duration}):Promise.resolve(!1)},getZoom:()=>e.getState().transform[2],setViewport:async(n,i)=>{const{transform:[l,o,s],panZoom:u}=e.getState();return u?(await u.setViewport({x:n.x??l,y:n.y??o,zoom:n.zoom??s},i),Promise.resolve(!0)):Promise.resolve(!1)},getViewport:()=>{const[n,i,l]=e.getState().transform;return{x:n,y:i,zoom:l}},setCenter:async(n,i,l)=>e.getState().setCenter(n,i,l),fitBounds:async(n,i)=>{const{width:l,height:o,minZoom:s,maxZoom:u,panZoom:f}=e.getState(),d=nm(n,l,o,s,u,(i==null?void 0:i.padding)??.1);return f?(await f.setViewport(d,{duration:i==null?void 0:i.duration,ease:i==null?void 0:i.ease,interpolate:i==null?void 0:i.interpolate}),Promise.resolve(!0)):Promise.resolve(!1)},screenToFlowPosition:(n,i={})=>{const{transform:l,snapGrid:o,snapToGrid:s,domNode:u}=e.getState();if(!u)return n;const{x:f,y:d}=u.getBoundingClientRect(),h={x:n.x-f,y:n.y-d},m=i.snapGrid??o,p=i.snapToGrid??s;return Go(h,l,p,m)},flowToScreenPosition:n=>{const{transform:i,domNode:l}=e.getState();if(!l)return n;const{x:o,y:s}=l.getBoundingClientRect(),u=tc(n,i);return{x:u.x+o,y:u.y+s}}}),[])};function iS(e,n){const i=[],l=new Map,o=[];for(const s of e)if(s.type==="add"){o.push(s);continue}else if(s.type==="remove"||s.type==="replace")l.set(s.id,[s]);else{const u=l.get(s.id);u?u.push(s):l.set(s.id,[s])}for(const s of n){const u=l.get(s.id);if(!u){i.push(s);continue}if(u[0].type==="remove")continue;if(u[0].type==="replace"){i.push({...u[0].item});continue}const f={...s};for(const d of u)sA(d,f);i.push(f)}return o.length&&o.forEach(s=>{s.index!==void 0?i.splice(s.index,0,{...s.item}):i.push({...s.item})}),i}function sA(e,n){switch(e.type){case"select":{n.selected=e.selected;break}case"position":{typeof e.position<"u"&&(n.position=e.position),typeof e.dragging<"u"&&(n.dragging=e.dragging);break}case"dimensions":{typeof e.dimensions<"u"&&(n.measured={...e.dimensions},e.setAttributes&&((e.setAttributes===!0||e.setAttributes==="width")&&(n.width=e.dimensions.width),(e.setAttributes===!0||e.setAttributes==="height")&&(n.height=e.dimensions.height))),typeof e.resizing=="boolean"&&(n.resizing=e.resizing);break}}}function lS(e,n){return iS(e,n)}function aS(e,n){return iS(e,n)}function Di(e,n){return{id:e,type:"select",selected:n}}function Yl(e,n=new Set,i=!1){const l=[];for(const[o,s]of e){const u=n.has(o);!(s.selected===void 0&&!u)&&s.selected!==u&&(i&&(s.selected=u),l.push(Di(s.id,u)))}return l}function Ev({items:e=[],lookup:n}){var o;const i=[],l=new Map(e.map(s=>[s.id,s]));for(const[s,u]of e.entries()){const f=n.get(u.id),d=((o=f==null?void 0:f.internals)==null?void 0:o.userNode)??f;d!==void 0&&d!==u&&i.push({id:u.id,item:u,type:"replace"}),d===void 0&&i.push({item:u,type:"add",index:s})}for(const[s]of n)l.get(s)===void 0&&i.push({id:s,type:"remove"});return i}function Nv(e){return{id:e.id,type:"remove"}}const kv=e=>MT(e),uA=e=>zw(e);function oS(e){return V.forwardRef(e)}const cA=typeof window<"u"?V.useLayoutEffect:V.useEffect;function Cv(e){const[n,i]=V.useState(BigInt(0)),[l]=V.useState(()=>fA(()=>i(o=>o+BigInt(1))));return cA(()=>{const o=l.get();o.length&&(e(o),l.reset())},[n]),l}function fA(e){let n=[];return{get:()=>n,reset:()=>{n=[]},push:i=>{n.push(i),e()}}}const sS=V.createContext(null);function dA({children:e}){const n=ht(),i=V.useCallback(f=>{const{nodes:d=[],setNodes:h,hasDefaultNodes:m,onNodesChange:p,nodeLookup:y,fitViewQueued:v,onNodesChangeMiddlewareMap:w}=n.getState();let k=d;for(const _ of f)k=typeof _=="function"?_(k):_;let S=Ev({items:k,lookup:y});for(const _ of w.values())S=_(S);m&&h(k),S.length>0?p==null||p(S):v&&window.requestAnimationFrame(()=>{const{fitViewQueued:_,nodes:z,setNodes:E}=n.getState();_&&E(z)})},[]),l=Cv(i),o=V.useCallback(f=>{const{edges:d=[],setEdges:h,hasDefaultEdges:m,onEdgesChange:p,edgeLookup:y}=n.getState();let v=d;for(const w of f)v=typeof w=="function"?w(v):w;m?h(v):p&&p(Ev({items:v,lookup:y}))},[]),s=Cv(o),u=V.useMemo(()=>({nodeQueue:l,edgeQueue:s}),[]);return b.jsx(sS.Provider,{value:u,children:e})}function hA(){const e=V.useContext(sS);if(!e)throw new Error("useBatchContext must be used within a BatchProvider");return e}const pA=e=>!!e.panZoom;function $o(){const e=oA(),n=ht(),i=hA(),l=Ie(pA),o=V.useMemo(()=>{const s=p=>n.getState().nodeLookup.get(p),u=p=>{i.nodeQueue.push(p)},f=p=>{i.edgeQueue.push(p)},d=p=>{var _,z;const{nodeLookup:y,nodeOrigin:v}=n.getState(),w=kv(p)?p:y.get(p.id),k=w.parentId?Dw(w.position,w.measured,w.parentId,y,v):w.position,S={...w,position:k,width:((_=w.measured)==null?void 0:_.width)??w.width,height:((z=w.measured)==null?void 0:z.height)??w.height};return ta(S)},h=(p,y,v={replace:!1})=>{u(w=>w.map(k=>{if(k.id===p){const S=typeof y=="function"?y(k):y;return v.replace&&kv(S)?S:{...k,...S}}return k}))},m=(p,y,v={replace:!1})=>{f(w=>w.map(k=>{if(k.id===p){const S=typeof y=="function"?y(k):y;return v.replace&&uA(S)?S:{...k,...S}}return k}))};return{getNodes:()=>n.getState().nodes.map(p=>({...p})),getNode:p=>{var y;return(y=s(p))==null?void 0:y.internals.userNode},getInternalNode:s,getEdges:()=>{const{edges:p=[]}=n.getState();return p.map(y=>({...y}))},getEdge:p=>n.getState().edgeLookup.get(p),setNodes:u,setEdges:f,addNodes:p=>{const y=Array.isArray(p)?p:[p];i.nodeQueue.push(v=>[...v,...y])},addEdges:p=>{const y=Array.isArray(p)?p:[p];i.edgeQueue.push(v=>[...v,...y])},toObject:()=>{const{nodes:p=[],edges:y=[],transform:v}=n.getState(),[w,k,S]=v;return{nodes:p.map(_=>({..._})),edges:y.map(_=>({..._})),viewport:{x:w,y:k,zoom:S}}},deleteElements:async({nodes:p=[],edges:y=[]})=>{const{nodes:v,edges:w,onNodesDelete:k,onEdgesDelete:S,triggerNodeChanges:_,triggerEdgeChanges:z,onDelete:E,onBeforeDelete:A}=n.getState(),{nodes:B,edges:T}=await LT({nodesToRemove:p,edgesToRemove:y,nodes:v,edges:w,onBeforeDelete:A}),q=T.length>0,M=B.length>0;if(q){const D=T.map(Nv);S==null||S(T),z(D)}if(M){const D=B.map(Nv);k==null||k(B),_(D)}return(M||q)&&(E==null||E({nodes:B,edges:T})),{deletedNodes:B,deletedEdges:T}},getIntersectingNodes:(p,y=!0,v)=>{const w=Jx(p),k=w?p:d(p),S=v!==void 0;return k?(v||n.getState().nodes).filter(_=>{const z=n.getState().nodeLookup.get(_.id);if(z&&!w&&(_.id===p.id||!z.internals.positionAbsolute))return!1;const E=ta(S?_:z),A=jo(E,k);return y&&A>0||A>=E.width*E.height||A>=k.width*k.height}):[]},isNodeIntersecting:(p,y,v=!0)=>{const k=Jx(p)?p:d(p);if(!k)return!1;const S=jo(k,y);return v&&S>0||S>=y.width*y.height||S>=k.width*k.height},updateNode:h,updateNodeData:(p,y,v={replace:!1})=>{h(p,w=>{const k=typeof y=="function"?y(w):y;return v.replace?{...w,data:k}:{...w,data:{...w.data,...k}}},v)},updateEdge:m,updateEdgeData:(p,y,v={replace:!1})=>{m(p,w=>{const k=typeof y=="function"?y(w):y;return v.replace?{...w,data:k}:{...w,data:{...w.data,...k}}},v)},getNodesBounds:p=>{const{nodeLookup:y,nodeOrigin:v}=n.getState();return jT(p,{nodeLookup:y,nodeOrigin:v})},getHandleConnections:({type:p,id:y,nodeId:v})=>{var w;return Array.from(((w=n.getState().connectionLookup.get(`${v}-${p}${y?`-${y}`:""}`))==null?void 0:w.values())??[])},getNodeConnections:({type:p,handleId:y,nodeId:v})=>{var w;return Array.from(((w=n.getState().connectionLookup.get(`${v}${p?y?`-${p}-${y}`:`-${p}`:""}`))==null?void 0:w.values())??[])},fitView:async p=>{const y=n.getState().fitViewResolver??UT();return n.setState({fitViewQueued:!0,fitViewOptions:p,fitViewResolver:y}),i.nodeQueue.push(v=>[...v]),y.promise}}},[]);return V.useMemo(()=>({...o,...e,viewportInitialized:l}),[l])}const Tv=e=>e.selected,mA=typeof window<"u"?window:void 0;function gA({deleteKeyCode:e,multiSelectionKeyCode:n}){const i=ht(),{deleteElements:l}=$o(),o=Ro(e,{actInsideInputWithModifier:!1}),s=Ro(n,{target:mA});V.useEffect(()=>{if(o){const{edges:u,nodes:f}=i.getState();l({nodes:f.filter(Tv),edges:u.filter(Tv)}),i.setState({nodesSelectionActive:!1})}},[o]),V.useEffect(()=>{i.setState({multiSelectionActive:s})},[s])}function yA(e){const n=ht();V.useEffect(()=>{const i=()=>{var o,s,u,f;if(!e.current||!(((s=(o=e.current).checkVisibility)==null?void 0:s.call(o))??!0))return!1;const l=rm(e.current);(l.height===0||l.width===0)&&((f=(u=n.getState()).onError)==null||f.call(u,"004",tr.error004())),n.setState({width:l.width||500,height:l.height||500})};if(e.current){i(),window.addEventListener("resize",i);const l=new ResizeObserver(()=>i());return l.observe(e.current),()=>{window.removeEventListener("resize",i),l&&e.current&&l.unobserve(e.current)}}},[])}const bc={position:"absolute",width:"100%",height:"100%",top:0,left:0},xA=e=>({userSelectionActive:e.userSelectionActive,lib:e.lib,connectionInProgress:e.connection.inProgress});function vA({onPaneContextMenu:e,zoomOnScroll:n=!0,zoomOnPinch:i=!0,panOnScroll:l=!1,panOnScrollSpeed:o=.5,panOnScrollMode:s=Ii.Free,zoomOnDoubleClick:u=!0,panOnDrag:f=!0,defaultViewport:d,translateExtent:h,minZoom:m,maxZoom:p,zoomActivationKeyCode:y,preventScrolling:v=!0,children:w,noWheelClassName:k,noPanClassName:S,onViewportChange:_,isControlledViewport:z,paneClickDistance:E,selectionOnDrag:A}){const B=ht(),T=V.useRef(null),{userSelectionActive:q,lib:M,connectionInProgress:D}=Ie(xA,dt),X=Ro(y),H=V.useRef();yA(T);const I=V.useCallback(ee=>{_==null||_({x:ee[0],y:ee[1],zoom:ee[2]}),z||B.setState({transform:ee})},[_,z]);return V.useEffect(()=>{if(T.current){H.current=_z({domNode:T.current,minZoom:m,maxZoom:p,translateExtent:h,viewport:d,onDraggingChange:R=>B.setState($=>$.paneDragging===R?$:{paneDragging:R}),onPanZoomStart:(R,$)=>{const{onViewportChangeStart:Z,onMoveStart:J}=B.getState();J==null||J(R,$),Z==null||Z($)},onPanZoom:(R,$)=>{const{onViewportChange:Z,onMove:J}=B.getState();J==null||J(R,$),Z==null||Z($)},onPanZoomEnd:(R,$)=>{const{onViewportChangeEnd:Z,onMoveEnd:J}=B.getState();J==null||J(R,$),Z==null||Z($)}});const{x:ee,y:L,zoom:G}=H.current.getViewport();return B.setState({panZoom:H.current,transform:[ee,L,G],domNode:T.current.closest(".react-flow")}),()=>{var R;(R=H.current)==null||R.destroy()}}},[]),V.useEffect(()=>{var ee;(ee=H.current)==null||ee.update({onPaneContextMenu:e,zoomOnScroll:n,zoomOnPinch:i,panOnScroll:l,panOnScrollSpeed:o,panOnScrollMode:s,zoomOnDoubleClick:u,panOnDrag:f,zoomActivationKeyPressed:X,preventScrolling:v,noPanClassName:S,userSelectionActive:q,noWheelClassName:k,lib:M,onTransformChange:I,connectionInProgress:D,selectionOnDrag:A,paneClickDistance:E})},[e,n,i,l,o,s,u,f,X,v,S,q,k,M,I,D,A,E]),b.jsx("div",{className:"react-flow__renderer",ref:T,style:bc,children:w})}const bA=e=>({userSelectionActive:e.userSelectionActive,userSelectionRect:e.userSelectionRect});function wA(){const{userSelectionActive:e,userSelectionRect:n}=Ie(bA,dt);return e&&n?b.jsx("div",{className:"react-flow__selection react-flow__container",style:{width:n.width,height:n.height,transform:`translate(${n.x}px, ${n.y}px)`}}):null}const lh=(e,n)=>i=>{i.target===n.current&&(e==null||e(i))},SA=e=>({userSelectionActive:e.userSelectionActive,elementsSelectable:e.elementsSelectable,connectionInProgress:e.connection.inProgress,dragging:e.paneDragging});function _A({isSelecting:e,selectionKeyPressed:n,selectionMode:i=Mo.Full,panOnDrag:l,paneClickDistance:o,selectionOnDrag:s,onSelectionStart:u,onSelectionEnd:f,onPaneClick:d,onPaneContextMenu:h,onPaneScroll:m,onPaneMouseEnter:p,onPaneMouseMove:y,onPaneMouseLeave:v,children:w}){const k=ht(),{userSelectionActive:S,elementsSelectable:_,dragging:z,connectionInProgress:E}=Ie(SA,dt),A=_&&(e||S),B=V.useRef(null),T=V.useRef(),q=V.useRef(new Set),M=V.useRef(new Set),D=V.useRef(!1),X=Z=>{if(D.current||E){D.current=!1;return}d==null||d(Z),k.getState().resetSelectedElements(),k.setState({nodesSelectionActive:!1})},H=Z=>{if(Array.isArray(l)&&(l!=null&&l.includes(2))){Z.preventDefault();return}h==null||h(Z)},I=m?Z=>m(Z):void 0,ee=Z=>{D.current&&(Z.stopPropagation(),D.current=!1)},L=Z=>{var F,K;const{domNode:J}=k.getState();if(T.current=J==null?void 0:J.getBoundingClientRect(),!T.current)return;const j=Z.target===B.current;if(!j&&!!Z.target.closest(".nokey")||!e||!(s&&j||n)||Z.button!==0||!Z.isPrimary)return;(K=(F=Z.target)==null?void 0:F.setPointerCapture)==null||K.call(F,Z.pointerId),D.current=!1;const{x:N,y:Y}=Un(Z.nativeEvent,T.current);k.setState({userSelectionRect:{width:0,height:0,startX:N,startY:Y,x:N,y:Y}}),j||(Z.stopPropagation(),Z.preventDefault())},G=Z=>{const{userSelectionRect:J,transform:j,nodeLookup:U,edgeLookup:P,connectionLookup:N,triggerNodeChanges:Y,triggerEdgeChanges:F,defaultEdgeOptions:K,resetSelectedElements:ne}=k.getState();if(!T.current||!J)return;const{x:re,y:se}=Un(Z.nativeEvent,T.current),{startX:ye,startY:ve}=J;if(!D.current){const Ce=n?0:o;if(Math.hypot(re-ye,se-ve)<=Ce)return;ne(),u==null||u(Z)}D.current=!0;const xe={startX:ye,startY:ve,x:reCe.id)),M.current=new Set;const Me=(K==null?void 0:K.selectable)??!0;for(const Ce of q.current){const st=N.get(Ce);if(st)for(const{edgeId:We}of st.values()){const zt=P.get(We);zt&&(zt.selectable??Me)&&M.current.add(We)}}if(!Wx(pe,q.current)){const Ce=Yl(U,q.current,!0);Y(Ce)}if(!Wx(_e,M.current)){const Ce=Yl(P,M.current);F(Ce)}k.setState({userSelectionRect:xe,userSelectionActive:!0,nodesSelectionActive:!1})},R=Z=>{var J,j;Z.button===0&&((j=(J=Z.target)==null?void 0:J.releasePointerCapture)==null||j.call(J,Z.pointerId),!S&&Z.target===B.current&&k.getState().userSelectionRect&&(X==null||X(Z)),k.setState({userSelectionActive:!1,userSelectionRect:null}),D.current&&(f==null||f(Z),k.setState({nodesSelectionActive:q.current.size>0})))},$=l===!0||Array.isArray(l)&&l.includes(0);return b.jsxs("div",{className:Tt(["react-flow__pane",{draggable:$,dragging:z,selection:e}]),onClick:A?void 0:lh(X,B),onContextMenu:lh(H,B),onWheel:lh(I,B),onPointerEnter:A?void 0:p,onPointerMove:A?G:y,onPointerUp:A?R:void 0,onPointerDownCapture:A?L:void 0,onClickCapture:A?ee:void 0,onPointerLeave:v,ref:B,style:bc,children:[w,b.jsx(wA,{})]})}function Mp({id:e,store:n,unselect:i=!1,nodeRef:l}){const{addSelectedNodes:o,unselectNodesAndEdges:s,multiSelectionActive:u,nodeLookup:f,onError:d}=n.getState(),h=f.get(e);if(!h){d==null||d("012",tr.error012(e));return}n.setState({nodesSelectionActive:!1}),h.selected?(i||h.selected&&u)&&(s({nodes:[h],edges:[]}),requestAnimationFrame(()=>{var m;return(m=l==null?void 0:l.current)==null?void 0:m.blur()})):o([e])}function uS({nodeRef:e,disabled:n=!1,noDragClassName:i,handleSelector:l,nodeId:o,isSelectable:s,nodeClickDistance:u}){const f=ht(),[d,h]=V.useState(!1),m=V.useRef();return V.useEffect(()=>{m.current=uz({getStoreItems:()=>f.getState(),onNodeMouseDown:p=>{Mp({id:p,store:f,nodeRef:e})},onDragStart:()=>{h(!0)},onDragStop:()=>{h(!1)}})},[]),V.useEffect(()=>{if(!(n||!e.current||!m.current))return m.current.update({noDragClassName:i,handleSelector:l,domNode:e.current,isSelectable:s,nodeId:o,nodeClickDistance:u}),()=>{var p;(p=m.current)==null||p.destroy()}},[i,l,n,s,e,o,u]),d}const EA=e=>n=>n.selected&&(n.draggable||e&&typeof n.draggable>"u");function cS(){const e=ht();return V.useCallback(i=>{const{nodeExtent:l,snapToGrid:o,snapGrid:s,nodesDraggable:u,onError:f,updateNodePositions:d,nodeLookup:h,nodeOrigin:m}=e.getState(),p=new Map,y=EA(u),v=o?s[0]:5,w=o?s[1]:5,k=i.direction.x*v*i.factor,S=i.direction.y*w*i.factor;for(const[,_]of h){if(!y(_))continue;let z={x:_.internals.positionAbsolute.x+k,y:_.internals.positionAbsolute.y+S};o&&(z=Yo(z,s));const{position:E,positionAbsolute:A}=Aw({nodeId:_.id,nextPosition:z,nodeLookup:h,nodeExtent:l,nodeOrigin:m,onError:f});_.position=E,_.internals.positionAbsolute=A,p.set(_.id,_)}d(p)},[])}const cm=V.createContext(null),NA=cm.Provider;cm.Consumer;const fS=()=>V.useContext(cm),kA=e=>({connectOnClick:e.connectOnClick,noPanClassName:e.noPanClassName,rfId:e.rfId}),CA=(e,n,i)=>l=>{const{connectionClickStartHandle:o,connectionMode:s,connection:u}=l,{fromHandle:f,toHandle:d,isValid:h}=u,m=(d==null?void 0:d.nodeId)===e&&(d==null?void 0:d.id)===n&&(d==null?void 0:d.type)===i;return{connectingFrom:(f==null?void 0:f.nodeId)===e&&(f==null?void 0:f.id)===n&&(f==null?void 0:f.type)===i,connectingTo:m,clickConnecting:(o==null?void 0:o.nodeId)===e&&(o==null?void 0:o.id)===n&&(o==null?void 0:o.type)===i,isPossibleEndHandle:s===Wl.Strict?(f==null?void 0:f.type)!==i:e!==(f==null?void 0:f.nodeId)||n!==(f==null?void 0:f.id),connectionInProcess:!!f,clickConnectionInProcess:!!o,valid:m&&h}};function TA({type:e="source",position:n=we.Top,isValidConnection:i,isConnectable:l=!0,isConnectableStart:o=!0,isConnectableEnd:s=!0,id:u,onConnect:f,children:d,className:h,onMouseDown:m,onTouchStart:p,...y},v){var G,R;const w=u||null,k=e==="target",S=ht(),_=fS(),{connectOnClick:z,noPanClassName:E,rfId:A}=Ie(kA,dt),{connectingFrom:B,connectingTo:T,clickConnecting:q,isPossibleEndHandle:M,connectionInProcess:D,clickConnectionInProcess:X,valid:H}=Ie(CA(_,w,e),dt);_||(R=(G=S.getState()).onError)==null||R.call(G,"010",tr.error010());const I=$=>{const{defaultEdgeOptions:Z,onConnect:J,hasDefaultEdges:j}=S.getState(),U={...Z,...$};if(j){const{edges:P,setEdges:N}=S.getState();N(PT(U,P))}J==null||J(U),f==null||f(U)},ee=$=>{if(!_)return;const Z=Bw($.nativeEvent);if(o&&(Z&&$.button===0||!Z)){const J=S.getState();Ap.onPointerDown($.nativeEvent,{handleDomNode:$.currentTarget,autoPanOnConnect:J.autoPanOnConnect,connectionMode:J.connectionMode,connectionRadius:J.connectionRadius,domNode:J.domNode,nodeLookup:J.nodeLookup,lib:J.lib,isTarget:k,handleId:w,nodeId:_,flowId:J.rfId,panBy:J.panBy,cancelConnection:J.cancelConnection,onConnectStart:J.onConnectStart,onConnectEnd:(...j)=>{var U,P;return(P=(U=S.getState()).onConnectEnd)==null?void 0:P.call(U,...j)},updateConnection:J.updateConnection,onConnect:I,isValidConnection:i||((...j)=>{var U,P;return((P=(U=S.getState()).isValidConnection)==null?void 0:P.call(U,...j))??!0}),getTransform:()=>S.getState().transform,getFromHandle:()=>S.getState().connection.fromHandle,autoPanSpeed:J.autoPanSpeed,dragThreshold:J.connectionDragThreshold})}Z?m==null||m($):p==null||p($)},L=$=>{const{onClickConnectStart:Z,onClickConnectEnd:J,connectionClickStartHandle:j,connectionMode:U,isValidConnection:P,lib:N,rfId:Y,nodeLookup:F,connection:K}=S.getState();if(!_||!j&&!o)return;if(!j){Z==null||Z($.nativeEvent,{nodeId:_,handleId:w,handleType:e}),S.setState({connectionClickStartHandle:{nodeId:_,type:e,id:w}});return}const ne=Lw($.target),re=i||P,{connection:se,isValid:ye}=Ap.isValid($.nativeEvent,{handle:{nodeId:_,id:w,type:e},connectionMode:U,fromNodeId:j.nodeId,fromHandleId:j.id||null,fromType:j.type,isValidConnection:re,flowId:Y,doc:ne,lib:N,nodeLookup:F});ye&&se&&I(se);const ve=structuredClone(K);delete ve.inProgress,ve.toPosition=ve.toHandle?ve.toHandle.position:null,J==null||J($,ve),S.setState({connectionClickStartHandle:null})};return b.jsx("div",{"data-handleid":w,"data-nodeid":_,"data-handlepos":n,"data-id":`${A}-${_}-${w}-${e}`,className:Tt(["react-flow__handle",`react-flow__handle-${n}`,"nodrag",E,h,{source:!k,target:k,connectable:l,connectablestart:o,connectableend:s,clickconnecting:q,connectingfrom:B,connectingto:T,valid:H,connectionindicator:l&&(!D||M)&&(D||X?s:o)}]),onMouseDown:ee,onTouchStart:ee,onClick:z?L:void 0,ref:v,...y,children:d})}const an=V.memo(oS(TA));function zA({data:e,isConnectable:n,sourcePosition:i=we.Bottom}){return b.jsxs(b.Fragment,{children:[e==null?void 0:e.label,b.jsx(an,{type:"source",position:i,isConnectable:n})]})}function AA({data:e,isConnectable:n,targetPosition:i=we.Top,sourcePosition:l=we.Bottom}){return b.jsxs(b.Fragment,{children:[b.jsx(an,{type:"target",position:i,isConnectable:n}),e==null?void 0:e.label,b.jsx(an,{type:"source",position:l,isConnectable:n})]})}function MA(){return null}function jA({data:e,isConnectable:n,targetPosition:i=we.Top}){return b.jsxs(b.Fragment,{children:[b.jsx(an,{type:"target",position:i,isConnectable:n}),e==null?void 0:e.label]})}const nc={ArrowUp:{x:0,y:-1},ArrowDown:{x:0,y:1},ArrowLeft:{x:-1,y:0},ArrowRight:{x:1,y:0}},zv={input:zA,default:AA,output:jA,group:MA};function OA(e){var n,i,l,o;return e.internals.handleBounds===void 0?{width:e.width??e.initialWidth??((n=e.style)==null?void 0:n.width),height:e.height??e.initialHeight??((i=e.style)==null?void 0:i.height)}:{width:e.width??((l=e.style)==null?void 0:l.width),height:e.height??((o=e.style)==null?void 0:o.height)}}const RA=e=>{const{width:n,height:i,x:l,y:o}=Vo(e.nodeLookup,{filter:s=>!!s.selected});return{width:qn(n)?n:null,height:qn(i)?i:null,userSelectionActive:e.userSelectionActive,transformString:`translate(${e.transform[0]}px,${e.transform[1]}px) scale(${e.transform[2]}) translate(${l}px,${o}px)`}};function DA({onSelectionContextMenu:e,noPanClassName:n,disableKeyboardA11y:i}){const l=ht(),{width:o,height:s,transformString:u,userSelectionActive:f}=Ie(RA,dt),d=cS(),h=V.useRef(null);V.useEffect(()=>{var v;i||(v=h.current)==null||v.focus({preventScroll:!0})},[i]);const m=!f&&o!==null&&s!==null;if(uS({nodeRef:h,disabled:!m}),!m)return null;const p=e?v=>{const w=l.getState().nodes.filter(k=>k.selected);e(v,w)}:void 0,y=v=>{Object.prototype.hasOwnProperty.call(nc,v.key)&&(v.preventDefault(),d({direction:nc[v.key],factor:v.shiftKey?4:1}))};return b.jsx("div",{className:Tt(["react-flow__nodesselection","react-flow__container",n]),style:{transform:u},children:b.jsx("div",{ref:h,className:"react-flow__nodesselection-rect",onContextMenu:p,tabIndex:i?void 0:-1,onKeyDown:i?void 0:y,style:{width:o,height:s}})})}const Av=typeof window<"u"?window:void 0,LA=e=>({nodesSelectionActive:e.nodesSelectionActive,userSelectionActive:e.userSelectionActive});function dS({children:e,onPaneClick:n,onPaneMouseEnter:i,onPaneMouseMove:l,onPaneMouseLeave:o,onPaneContextMenu:s,onPaneScroll:u,paneClickDistance:f,deleteKeyCode:d,selectionKeyCode:h,selectionOnDrag:m,selectionMode:p,onSelectionStart:y,onSelectionEnd:v,multiSelectionKeyCode:w,panActivationKeyCode:k,zoomActivationKeyCode:S,elementsSelectable:_,zoomOnScroll:z,zoomOnPinch:E,panOnScroll:A,panOnScrollSpeed:B,panOnScrollMode:T,zoomOnDoubleClick:q,panOnDrag:M,defaultViewport:D,translateExtent:X,minZoom:H,maxZoom:I,preventScrolling:ee,onSelectionContextMenu:L,noWheelClassName:G,noPanClassName:R,disableKeyboardA11y:$,onViewportChange:Z,isControlledViewport:J}){const{nodesSelectionActive:j,userSelectionActive:U}=Ie(LA,dt),P=Ro(h,{target:Av}),N=Ro(k,{target:Av}),Y=N||M,F=N||A,K=m&&Y!==!0,ne=P||U||K;return gA({deleteKeyCode:d,multiSelectionKeyCode:w}),b.jsx(vA,{onPaneContextMenu:s,elementsSelectable:_,zoomOnScroll:z,zoomOnPinch:E,panOnScroll:F,panOnScrollSpeed:B,panOnScrollMode:T,zoomOnDoubleClick:q,panOnDrag:!P&&Y,defaultViewport:D,translateExtent:X,minZoom:H,maxZoom:I,zoomActivationKeyCode:S,preventScrolling:ee,noWheelClassName:G,noPanClassName:R,onViewportChange:Z,isControlledViewport:J,paneClickDistance:f,selectionOnDrag:K,children:b.jsxs(_A,{onSelectionStart:y,onSelectionEnd:v,onPaneClick:n,onPaneMouseEnter:i,onPaneMouseMove:l,onPaneMouseLeave:o,onPaneContextMenu:s,onPaneScroll:u,panOnDrag:Y,isSelecting:!!ne,selectionMode:p,selectionKeyPressed:P,paneClickDistance:f,selectionOnDrag:K,children:[e,j&&b.jsx(DA,{onSelectionContextMenu:L,noPanClassName:R,disableKeyboardA11y:$})]})})}dS.displayName="FlowRenderer";const HA=V.memo(dS),BA=e=>n=>e?tm(n.nodeLookup,{x:0,y:0,width:n.width,height:n.height},n.transform,!0).map(i=>i.id):Array.from(n.nodeLookup.keys());function qA(e){return Ie(V.useCallback(BA(e),[e]),dt)}const UA=e=>e.updateNodeInternals;function IA(){const e=Ie(UA),[n]=V.useState(()=>typeof ResizeObserver>"u"?null:new ResizeObserver(i=>{const l=new Map;i.forEach(o=>{const s=o.target.getAttribute("data-id");l.set(s,{id:s,nodeElement:o.target,force:!0})}),e(l)}));return V.useEffect(()=>()=>{n==null||n.disconnect()},[n]),n}function VA({node:e,nodeType:n,hasDimensions:i,resizeObserver:l}){const o=ht(),s=V.useRef(null),u=V.useRef(null),f=V.useRef(e.sourcePosition),d=V.useRef(e.targetPosition),h=V.useRef(n),m=i&&!!e.internals.handleBounds;return V.useEffect(()=>{s.current&&!e.hidden&&(!m||u.current!==s.current)&&(u.current&&(l==null||l.unobserve(u.current)),l==null||l.observe(s.current),u.current=s.current)},[m,e.hidden]),V.useEffect(()=>()=>{u.current&&(l==null||l.unobserve(u.current),u.current=null)},[]),V.useEffect(()=>{if(s.current){const p=h.current!==n,y=f.current!==e.sourcePosition,v=d.current!==e.targetPosition;(p||y||v)&&(h.current=n,f.current=e.sourcePosition,d.current=e.targetPosition,o.getState().updateNodeInternals(new Map([[e.id,{id:e.id,nodeElement:s.current,force:!0}]])))}},[e.id,n,e.sourcePosition,e.targetPosition]),s}function YA({id:e,onClick:n,onMouseEnter:i,onMouseMove:l,onMouseLeave:o,onContextMenu:s,onDoubleClick:u,nodesDraggable:f,elementsSelectable:d,nodesConnectable:h,nodesFocusable:m,resizeObserver:p,noDragClassName:y,noPanClassName:v,disableKeyboardA11y:w,rfId:k,nodeTypes:S,nodeClickDistance:_,onError:z}){const{node:E,internals:A,isParent:B}=Ie(re=>{const se=re.nodeLookup.get(e),ye=re.parentLookup.has(e);return{node:se,internals:se.internals,isParent:ye}},dt);let T=E.type||"default",q=(S==null?void 0:S[T])||zv[T];q===void 0&&(z==null||z("003",tr.error003(T)),T="default",q=(S==null?void 0:S.default)||zv.default);const M=!!(E.draggable||f&&typeof E.draggable>"u"),D=!!(E.selectable||d&&typeof E.selectable>"u"),X=!!(E.connectable||h&&typeof E.connectable>"u"),H=!!(E.focusable||m&&typeof E.focusable>"u"),I=ht(),ee=Rw(E),L=VA({node:E,nodeType:T,hasDimensions:ee,resizeObserver:p}),G=uS({nodeRef:L,disabled:E.hidden||!M,noDragClassName:y,handleSelector:E.dragHandle,nodeId:e,isSelectable:D,nodeClickDistance:_}),R=cS();if(E.hidden)return null;const $=Ar(E),Z=OA(E),J=D||M||n||i||l||o,j=i?re=>i(re,{...A.userNode}):void 0,U=l?re=>l(re,{...A.userNode}):void 0,P=o?re=>o(re,{...A.userNode}):void 0,N=s?re=>s(re,{...A.userNode}):void 0,Y=u?re=>u(re,{...A.userNode}):void 0,F=re=>{const{selectNodesOnDrag:se,nodeDragThreshold:ye}=I.getState();D&&(!se||!M||ye>0)&&Mp({id:e,store:I,nodeRef:L}),n&&n(re,{...A.userNode})},K=re=>{if(!(Hw(re.nativeEvent)||w)){if(Nw.includes(re.key)&&D){const se=re.key==="Escape";Mp({id:e,store:I,unselect:se,nodeRef:L})}else if(M&&E.selected&&Object.prototype.hasOwnProperty.call(nc,re.key)){re.preventDefault();const{ariaLabelConfig:se}=I.getState();I.setState({ariaLiveMessage:se["node.a11yDescription.ariaLiveMessage"]({direction:re.key.replace("Arrow","").toLowerCase(),x:~~A.positionAbsolute.x,y:~~A.positionAbsolute.y})}),R({direction:nc[re.key],factor:re.shiftKey?4:1})}}},ne=()=>{var _e;if(w||!((_e=L.current)!=null&&_e.matches(":focus-visible")))return;const{transform:re,width:se,height:ye,autoPanOnNodeFocus:ve,setCenter:xe}=I.getState();if(!ve)return;tm(new Map([[e,E]]),{x:0,y:0,width:se,height:ye},re,!0).length>0||xe(E.position.x+$.width/2,E.position.y+$.height/2,{zoom:re[2]})};return b.jsx("div",{className:Tt(["react-flow__node",`react-flow__node-${T}`,{[v]:M},E.className,{selected:E.selected,selectable:D,parent:B,draggable:M,dragging:G}]),ref:L,style:{zIndex:A.z,transform:`translate(${A.positionAbsolute.x}px,${A.positionAbsolute.y}px)`,pointerEvents:J?"all":"none",visibility:ee?"visible":"hidden",...E.style,...Z},"data-id":e,"data-testid":`rf__node-${e}`,onMouseEnter:j,onMouseMove:U,onMouseLeave:P,onContextMenu:N,onClick:F,onDoubleClick:Y,onKeyDown:H?K:void 0,tabIndex:H?0:void 0,onFocus:H?ne:void 0,role:E.ariaRole??(H?"group":void 0),"aria-roledescription":"node","aria-describedby":w?void 0:`${tS}-${k}`,"aria-label":E.ariaLabel,...E.domAttributes,children:b.jsx(NA,{value:e,children:b.jsx(q,{id:e,data:E.data,type:T,positionAbsoluteX:A.positionAbsolute.x,positionAbsoluteY:A.positionAbsolute.y,selected:E.selected??!1,selectable:D,draggable:M,deletable:E.deletable??!0,isConnectable:X,sourcePosition:E.sourcePosition,targetPosition:E.targetPosition,dragging:G,dragHandle:E.dragHandle,zIndex:A.z,parentId:E.parentId,...$})})})}var GA=V.memo(YA);const $A=e=>({nodesDraggable:e.nodesDraggable,nodesConnectable:e.nodesConnectable,nodesFocusable:e.nodesFocusable,elementsSelectable:e.elementsSelectable,onError:e.onError});function hS(e){const{nodesDraggable:n,nodesConnectable:i,nodesFocusable:l,elementsSelectable:o,onError:s}=Ie($A,dt),u=qA(e.onlyRenderVisibleElements),f=IA();return b.jsx("div",{className:"react-flow__nodes",style:bc,children:u.map(d=>b.jsx(GA,{id:d,nodeTypes:e.nodeTypes,nodeExtent:e.nodeExtent,onClick:e.onNodeClick,onMouseEnter:e.onNodeMouseEnter,onMouseMove:e.onNodeMouseMove,onMouseLeave:e.onNodeMouseLeave,onContextMenu:e.onNodeContextMenu,onDoubleClick:e.onNodeDoubleClick,noDragClassName:e.noDragClassName,noPanClassName:e.noPanClassName,rfId:e.rfId,disableKeyboardA11y:e.disableKeyboardA11y,resizeObserver:f,nodesDraggable:n,nodesConnectable:i,nodesFocusable:l,elementsSelectable:o,nodeClickDistance:e.nodeClickDistance,onError:s},d))})}hS.displayName="NodeRenderer";const XA=V.memo(hS);function PA(e){return Ie(V.useCallback(i=>{if(!e)return i.edges.map(o=>o.id);const l=[];if(i.width&&i.height)for(const o of i.edges){const s=i.nodeLookup.get(o.source),u=i.nodeLookup.get(o.target);s&&u&>({sourceNode:s,targetNode:u,width:i.width,height:i.height,transform:i.transform})&&l.push(o.id)}return l},[e]),dt)}const FA=({color:e="none",strokeWidth:n=1})=>{const i={strokeWidth:n,...e&&{stroke:e}};return b.jsx("polyline",{className:"arrow",style:i,strokeLinecap:"round",fill:"none",strokeLinejoin:"round",points:"-5,-4 0,0 -5,4"})},QA=({color:e="none",strokeWidth:n=1})=>{const i={strokeWidth:n,...e&&{stroke:e,fill:e}};return b.jsx("polyline",{className:"arrowclosed",style:i,strokeLinecap:"round",strokeLinejoin:"round",points:"-5,-4 0,0 -5,4 -5,-4"})},Mv={[Wu.Arrow]:FA,[Wu.ArrowClosed]:QA};function ZA(e){const n=ht();return V.useMemo(()=>{var o,s;return Object.prototype.hasOwnProperty.call(Mv,e)?Mv[e]:((s=(o=n.getState()).onError)==null||s.call(o,"009",tr.error009(e)),null)},[e])}const KA=({id:e,type:n,color:i,width:l=12.5,height:o=12.5,markerUnits:s="strokeWidth",strokeWidth:u,orient:f="auto-start-reverse"})=>{const d=ZA(n);return d?b.jsx("marker",{className:"react-flow__arrowhead",id:e,markerWidth:`${l}`,markerHeight:`${o}`,viewBox:"-10 -10 20 20",markerUnits:s,orient:f,refX:"0",refY:"0",children:b.jsx(d,{color:i,strokeWidth:u})}):null},pS=({defaultColor:e,rfId:n})=>{const i=Ie(s=>s.edges),l=Ie(s=>s.defaultEdgeOptions),o=V.useMemo(()=>JT(i,{id:n,defaultColor:e,defaultMarkerStart:l==null?void 0:l.markerStart,defaultMarkerEnd:l==null?void 0:l.markerEnd}),[i,l,n,e]);return o.length?b.jsx("svg",{className:"react-flow__marker","aria-hidden":"true",children:b.jsx("defs",{children:o.map(s=>b.jsx(KA,{id:s.id,type:s.type,color:s.color,width:s.width,height:s.height,markerUnits:s.markerUnits,strokeWidth:s.strokeWidth,orient:s.orient},s.id))})}):null};pS.displayName="MarkerDefinitions";var JA=V.memo(pS);function mS({x:e,y:n,label:i,labelStyle:l,labelShowBg:o=!0,labelBgStyle:s,labelBgPadding:u=[2,4],labelBgBorderRadius:f=2,children:d,className:h,...m}){const[p,y]=V.useState({x:1,y:0,width:0,height:0}),v=Tt(["react-flow__edge-textwrapper",h]),w=V.useRef(null);return V.useEffect(()=>{if(w.current){const k=w.current.getBBox();y({x:k.x,y:k.y,width:k.width,height:k.height})}},[i]),i?b.jsxs("g",{transform:`translate(${e-p.width/2} ${n-p.height/2})`,className:v,visibility:p.width?"visible":"hidden",...m,children:[o&&b.jsx("rect",{width:p.width+2*u[0],x:-u[0],y:-u[1],height:p.height+2*u[1],className:"react-flow__edge-textbg",style:s,rx:f,ry:f}),b.jsx("text",{className:"react-flow__edge-text",y:p.height/2,dy:"0.3em",ref:w,style:l,children:i}),d]}):null}mS.displayName="EdgeText";const WA=V.memo(mS);function Xo({path:e,labelX:n,labelY:i,label:l,labelStyle:o,labelShowBg:s,labelBgStyle:u,labelBgPadding:f,labelBgBorderRadius:d,interactionWidth:h=20,...m}){return b.jsxs(b.Fragment,{children:[b.jsx("path",{...m,d:e,fill:"none",className:Tt(["react-flow__edge-path",m.className])}),h?b.jsx("path",{d:e,fill:"none",strokeOpacity:0,strokeWidth:h,className:"react-flow__edge-interaction"}):null,l&&qn(n)&&qn(i)?b.jsx(WA,{x:n,y:i,label:l,labelStyle:o,labelShowBg:s,labelBgStyle:u,labelBgPadding:f,labelBgBorderRadius:d}):null]})}function jv({pos:e,x1:n,y1:i,x2:l,y2:o}){return e===we.Left||e===we.Right?[.5*(n+l),i]:[n,.5*(i+o)]}function gS({sourceX:e,sourceY:n,sourcePosition:i=we.Bottom,targetX:l,targetY:o,targetPosition:s=we.Top}){const[u,f]=jv({pos:i,x1:e,y1:n,x2:l,y2:o}),[d,h]=jv({pos:s,x1:l,y1:o,x2:e,y2:n}),[m,p,y,v]=qw({sourceX:e,sourceY:n,targetX:l,targetY:o,sourceControlX:u,sourceControlY:f,targetControlX:d,targetControlY:h});return[`M${e},${n} C${u},${f} ${d},${h} ${l},${o}`,m,p,y,v]}function yS(e){return V.memo(({id:n,sourceX:i,sourceY:l,targetX:o,targetY:s,sourcePosition:u,targetPosition:f,label:d,labelStyle:h,labelShowBg:m,labelBgStyle:p,labelBgPadding:y,labelBgBorderRadius:v,style:w,markerEnd:k,markerStart:S,interactionWidth:_})=>{const[z,E,A]=gS({sourceX:i,sourceY:l,sourcePosition:u,targetX:o,targetY:s,targetPosition:f}),B=e.isInternal?void 0:n;return b.jsx(Xo,{id:B,path:z,labelX:E,labelY:A,label:d,labelStyle:h,labelShowBg:m,labelBgStyle:p,labelBgPadding:y,labelBgBorderRadius:v,style:w,markerEnd:k,markerStart:S,interactionWidth:_})})}const eM=yS({isInternal:!1}),xS=yS({isInternal:!0});eM.displayName="SimpleBezierEdge";xS.displayName="SimpleBezierEdgeInternal";function vS(e){return V.memo(({id:n,sourceX:i,sourceY:l,targetX:o,targetY:s,label:u,labelStyle:f,labelShowBg:d,labelBgStyle:h,labelBgPadding:m,labelBgBorderRadius:p,style:y,sourcePosition:v=we.Bottom,targetPosition:w=we.Top,markerEnd:k,markerStart:S,pathOptions:_,interactionWidth:z})=>{const[E,A,B]=Cp({sourceX:i,sourceY:l,sourcePosition:v,targetX:o,targetY:s,targetPosition:w,borderRadius:_==null?void 0:_.borderRadius,offset:_==null?void 0:_.offset,stepPosition:_==null?void 0:_.stepPosition}),T=e.isInternal?void 0:n;return b.jsx(Xo,{id:T,path:E,labelX:A,labelY:B,label:u,labelStyle:f,labelShowBg:d,labelBgStyle:h,labelBgPadding:m,labelBgBorderRadius:p,style:y,markerEnd:k,markerStart:S,interactionWidth:z})})}const bS=vS({isInternal:!1}),wS=vS({isInternal:!0});bS.displayName="SmoothStepEdge";wS.displayName="SmoothStepEdgeInternal";function SS(e){return V.memo(({id:n,...i})=>{var o;const l=e.isInternal?void 0:n;return b.jsx(bS,{...i,id:l,pathOptions:V.useMemo(()=>{var s;return{borderRadius:0,offset:(s=i.pathOptions)==null?void 0:s.offset}},[(o=i.pathOptions)==null?void 0:o.offset])})})}const tM=SS({isInternal:!1}),_S=SS({isInternal:!0});tM.displayName="StepEdge";_S.displayName="StepEdgeInternal";function ES(e){return V.memo(({id:n,sourceX:i,sourceY:l,targetX:o,targetY:s,label:u,labelStyle:f,labelShowBg:d,labelBgStyle:h,labelBgPadding:m,labelBgBorderRadius:p,style:y,markerEnd:v,markerStart:w,interactionWidth:k})=>{const[S,_,z]=Iw({sourceX:i,sourceY:l,targetX:o,targetY:s}),E=e.isInternal?void 0:n;return b.jsx(Xo,{id:E,path:S,labelX:_,labelY:z,label:u,labelStyle:f,labelShowBg:d,labelBgStyle:h,labelBgPadding:m,labelBgBorderRadius:p,style:y,markerEnd:v,markerStart:w,interactionWidth:k})})}const nM=ES({isInternal:!1}),NS=ES({isInternal:!0});nM.displayName="StraightEdge";NS.displayName="StraightEdgeInternal";function kS(e){return V.memo(({id:n,sourceX:i,sourceY:l,targetX:o,targetY:s,sourcePosition:u=we.Bottom,targetPosition:f=we.Top,label:d,labelStyle:h,labelShowBg:m,labelBgStyle:p,labelBgPadding:y,labelBgBorderRadius:v,style:w,markerEnd:k,markerStart:S,pathOptions:_,interactionWidth:z})=>{const[E,A,B]=im({sourceX:i,sourceY:l,sourcePosition:u,targetX:o,targetY:s,targetPosition:f,curvature:_==null?void 0:_.curvature}),T=e.isInternal?void 0:n;return b.jsx(Xo,{id:T,path:E,labelX:A,labelY:B,label:d,labelStyle:h,labelShowBg:m,labelBgStyle:p,labelBgPadding:y,labelBgBorderRadius:v,style:w,markerEnd:k,markerStart:S,interactionWidth:z})})}const rM=kS({isInternal:!1}),CS=kS({isInternal:!0});rM.displayName="BezierEdge";CS.displayName="BezierEdgeInternal";const Ov={default:CS,straight:NS,step:_S,smoothstep:wS,simplebezier:xS},Rv={sourceX:null,sourceY:null,targetX:null,targetY:null,sourcePosition:null,targetPosition:null},iM=(e,n,i)=>i===we.Left?e-n:i===we.Right?e+n:e,lM=(e,n,i)=>i===we.Top?e-n:i===we.Bottom?e+n:e,Dv="react-flow__edgeupdater";function Lv({position:e,centerX:n,centerY:i,radius:l=10,onMouseDown:o,onMouseEnter:s,onMouseOut:u,type:f}){return b.jsx("circle",{onMouseDown:o,onMouseEnter:s,onMouseOut:u,className:Tt([Dv,`${Dv}-${f}`]),cx:iM(n,l,e),cy:lM(i,l,e),r:l,stroke:"transparent",fill:"transparent"})}function aM({isReconnectable:e,reconnectRadius:n,edge:i,sourceX:l,sourceY:o,targetX:s,targetY:u,sourcePosition:f,targetPosition:d,onReconnect:h,onReconnectStart:m,onReconnectEnd:p,setReconnecting:y,setUpdateHover:v}){const w=ht(),k=(A,B)=>{if(A.button!==0)return;const{autoPanOnConnect:T,domNode:q,connectionMode:M,connectionRadius:D,lib:X,onConnectStart:H,cancelConnection:I,nodeLookup:ee,rfId:L,panBy:G,updateConnection:R}=w.getState(),$=B.type==="target",Z=(U,P)=>{y(!1),p==null||p(U,i,B.type,P)},J=U=>h==null?void 0:h(i,U),j=(U,P)=>{y(!0),m==null||m(A,i,B.type),H==null||H(U,P)};Ap.onPointerDown(A.nativeEvent,{autoPanOnConnect:T,connectionMode:M,connectionRadius:D,domNode:q,handleId:B.id,nodeId:B.nodeId,nodeLookup:ee,isTarget:$,edgeUpdaterType:B.type,lib:X,flowId:L,cancelConnection:I,panBy:G,isValidConnection:(...U)=>{var P,N;return((N=(P=w.getState()).isValidConnection)==null?void 0:N.call(P,...U))??!0},onConnect:J,onConnectStart:j,onConnectEnd:(...U)=>{var P,N;return(N=(P=w.getState()).onConnectEnd)==null?void 0:N.call(P,...U)},onReconnectEnd:Z,updateConnection:R,getTransform:()=>w.getState().transform,getFromHandle:()=>w.getState().connection.fromHandle,dragThreshold:w.getState().connectionDragThreshold,handleDomNode:A.currentTarget})},S=A=>k(A,{nodeId:i.target,id:i.targetHandle??null,type:"target"}),_=A=>k(A,{nodeId:i.source,id:i.sourceHandle??null,type:"source"}),z=()=>v(!0),E=()=>v(!1);return b.jsxs(b.Fragment,{children:[(e===!0||e==="source")&&b.jsx(Lv,{position:f,centerX:l,centerY:o,radius:n,onMouseDown:S,onMouseEnter:z,onMouseOut:E,type:"source"}),(e===!0||e==="target")&&b.jsx(Lv,{position:d,centerX:s,centerY:u,radius:n,onMouseDown:_,onMouseEnter:z,onMouseOut:E,type:"target"})]})}function oM({id:e,edgesFocusable:n,edgesReconnectable:i,elementsSelectable:l,onClick:o,onDoubleClick:s,onContextMenu:u,onMouseEnter:f,onMouseMove:d,onMouseLeave:h,reconnectRadius:m,onReconnect:p,onReconnectStart:y,onReconnectEnd:v,rfId:w,edgeTypes:k,noPanClassName:S,onError:_,disableKeyboardA11y:z}){let E=Ie(xe=>xe.edgeLookup.get(e));const A=Ie(xe=>xe.defaultEdgeOptions);E=A?{...A,...E}:E;let B=E.type||"default",T=(k==null?void 0:k[B])||Ov[B];T===void 0&&(_==null||_("011",tr.error011(B)),B="default",T=(k==null?void 0:k.default)||Ov.default);const q=!!(E.focusable||n&&typeof E.focusable>"u"),M=typeof p<"u"&&(E.reconnectable||i&&typeof E.reconnectable>"u"),D=!!(E.selectable||l&&typeof E.selectable>"u"),X=V.useRef(null),[H,I]=V.useState(!1),[ee,L]=V.useState(!1),G=ht(),{zIndex:R,sourceX:$,sourceY:Z,targetX:J,targetY:j,sourcePosition:U,targetPosition:P}=Ie(V.useCallback(xe=>{const pe=xe.nodeLookup.get(E.source),_e=xe.nodeLookup.get(E.target);if(!pe||!_e)return{zIndex:E.zIndex,...Rv};const Me=KT({id:e,sourceNode:pe,targetNode:_e,sourceHandle:E.sourceHandle||null,targetHandle:E.targetHandle||null,connectionMode:xe.connectionMode,onError:_});return{zIndex:YT({selected:E.selected,zIndex:E.zIndex,sourceNode:pe,targetNode:_e,elevateOnSelect:xe.elevateEdgesOnSelect,zIndexMode:xe.zIndexMode}),...Me||Rv}},[E.source,E.target,E.sourceHandle,E.targetHandle,E.selected,E.zIndex]),dt),N=V.useMemo(()=>E.markerStart?`url('#${Tp(E.markerStart,w)}')`:void 0,[E.markerStart,w]),Y=V.useMemo(()=>E.markerEnd?`url('#${Tp(E.markerEnd,w)}')`:void 0,[E.markerEnd,w]);if(E.hidden||$===null||Z===null||J===null||j===null)return null;const F=xe=>{var Ce;const{addSelectedEdges:pe,unselectNodesAndEdges:_e,multiSelectionActive:Me}=G.getState();D&&(G.setState({nodesSelectionActive:!1}),E.selected&&Me?(_e({nodes:[],edges:[E]}),(Ce=X.current)==null||Ce.blur()):pe([e])),o&&o(xe,E)},K=s?xe=>{s(xe,{...E})}:void 0,ne=u?xe=>{u(xe,{...E})}:void 0,re=f?xe=>{f(xe,{...E})}:void 0,se=d?xe=>{d(xe,{...E})}:void 0,ye=h?xe=>{h(xe,{...E})}:void 0,ve=xe=>{var pe;if(!z&&Nw.includes(xe.key)&&D){const{unselectNodesAndEdges:_e,addSelectedEdges:Me}=G.getState();xe.key==="Escape"?((pe=X.current)==null||pe.blur(),_e({edges:[E]})):Me([e])}};return b.jsx("svg",{style:{zIndex:R},children:b.jsxs("g",{className:Tt(["react-flow__edge",`react-flow__edge-${B}`,E.className,S,{selected:E.selected,animated:E.animated,inactive:!D&&!o,updating:H,selectable:D}]),onClick:F,onDoubleClick:K,onContextMenu:ne,onMouseEnter:re,onMouseMove:se,onMouseLeave:ye,onKeyDown:q?ve:void 0,tabIndex:q?0:void 0,role:E.ariaRole??(q?"group":"img"),"aria-roledescription":"edge","data-id":e,"data-testid":`rf__edge-${e}`,"aria-label":E.ariaLabel===null?void 0:E.ariaLabel||`Edge from ${E.source} to ${E.target}`,"aria-describedby":q?`${nS}-${w}`:void 0,ref:X,...E.domAttributes,children:[!ee&&b.jsx(T,{id:e,source:E.source,target:E.target,type:E.type,selected:E.selected,animated:E.animated,selectable:D,deletable:E.deletable??!0,label:E.label,labelStyle:E.labelStyle,labelShowBg:E.labelShowBg,labelBgStyle:E.labelBgStyle,labelBgPadding:E.labelBgPadding,labelBgBorderRadius:E.labelBgBorderRadius,sourceX:$,sourceY:Z,targetX:J,targetY:j,sourcePosition:U,targetPosition:P,data:E.data,style:E.style,sourceHandleId:E.sourceHandle,targetHandleId:E.targetHandle,markerStart:N,markerEnd:Y,pathOptions:"pathOptions"in E?E.pathOptions:void 0,interactionWidth:E.interactionWidth}),M&&b.jsx(aM,{edge:E,isReconnectable:M,reconnectRadius:m,onReconnect:p,onReconnectStart:y,onReconnectEnd:v,sourceX:$,sourceY:Z,targetX:J,targetY:j,sourcePosition:U,targetPosition:P,setUpdateHover:I,setReconnecting:L})]})})}var sM=V.memo(oM);const uM=e=>({edgesFocusable:e.edgesFocusable,edgesReconnectable:e.edgesReconnectable,elementsSelectable:e.elementsSelectable,connectionMode:e.connectionMode,onError:e.onError});function TS({defaultMarkerColor:e,onlyRenderVisibleElements:n,rfId:i,edgeTypes:l,noPanClassName:o,onReconnect:s,onEdgeContextMenu:u,onEdgeMouseEnter:f,onEdgeMouseMove:d,onEdgeMouseLeave:h,onEdgeClick:m,reconnectRadius:p,onEdgeDoubleClick:y,onReconnectStart:v,onReconnectEnd:w,disableKeyboardA11y:k}){const{edgesFocusable:S,edgesReconnectable:_,elementsSelectable:z,onError:E}=Ie(uM,dt),A=PA(n);return b.jsxs("div",{className:"react-flow__edges",children:[b.jsx(JA,{defaultColor:e,rfId:i}),A.map(B=>b.jsx(sM,{id:B,edgesFocusable:S,edgesReconnectable:_,elementsSelectable:z,noPanClassName:o,onReconnect:s,onContextMenu:u,onMouseEnter:f,onMouseMove:d,onMouseLeave:h,onClick:m,reconnectRadius:p,onDoubleClick:y,onReconnectStart:v,onReconnectEnd:w,rfId:i,onError:E,edgeTypes:l,disableKeyboardA11y:k},B))]})}TS.displayName="EdgeRenderer";const cM=V.memo(TS),fM=e=>`translate(${e.transform[0]}px,${e.transform[1]}px) scale(${e.transform[2]})`;function dM({children:e}){const n=Ie(fM);return b.jsx("div",{className:"react-flow__viewport xyflow__viewport react-flow__container",style:{transform:n},children:e})}function hM(e){const n=$o(),i=V.useRef(!1);V.useEffect(()=>{!i.current&&n.viewportInitialized&&e&&(setTimeout(()=>e(n),1),i.current=!0)},[e,n.viewportInitialized])}const pM=e=>{var n;return(n=e.panZoom)==null?void 0:n.syncViewport};function mM(e){const n=Ie(pM),i=ht();return V.useEffect(()=>{e&&(n==null||n(e),i.setState({transform:[e.x,e.y,e.zoom]}))},[e,n]),null}function gM(e){return e.connection.inProgress?{...e.connection,to:Go(e.connection.to,e.transform)}:{...e.connection}}function yM(e){return gM}function xM(e){const n=yM();return Ie(n,dt)}const vM=e=>({nodesConnectable:e.nodesConnectable,isValid:e.connection.isValid,inProgress:e.connection.inProgress,width:e.width,height:e.height});function bM({containerStyle:e,style:n,type:i,component:l}){const{nodesConnectable:o,width:s,height:u,isValid:f,inProgress:d}=Ie(vM,dt);return!(s&&o&&d)?null:b.jsx("svg",{style:e,width:s,height:u,className:"react-flow__connectionline react-flow__container",children:b.jsx("g",{className:Tt(["react-flow__connection",Tw(f)]),children:b.jsx(zS,{style:n,type:i,CustomComponent:l,isValid:f})})})}const zS=({style:e,type:n=fi.Bezier,CustomComponent:i,isValid:l})=>{const{inProgress:o,from:s,fromNode:u,fromHandle:f,fromPosition:d,to:h,toNode:m,toHandle:p,toPosition:y,pointer:v}=xM();if(!o)return;if(i)return b.jsx(i,{connectionLineType:n,connectionLineStyle:e,fromNode:u,fromHandle:f,fromX:s.x,fromY:s.y,toX:h.x,toY:h.y,fromPosition:d,toPosition:y,connectionStatus:Tw(l),toNode:m,toHandle:p,pointer:v});let w="";const k={sourceX:s.x,sourceY:s.y,sourcePosition:d,targetX:h.x,targetY:h.y,targetPosition:y};switch(n){case fi.Bezier:[w]=im(k);break;case fi.SimpleBezier:[w]=gS(k);break;case fi.Step:[w]=Cp({...k,borderRadius:0});break;case fi.SmoothStep:[w]=Cp(k);break;default:[w]=Iw(k)}return b.jsx("path",{d:w,fill:"none",className:"react-flow__connection-path",style:e})};zS.displayName="ConnectionLine";const wM={};function Hv(e=wM){V.useRef(e),ht(),V.useEffect(()=>{},[e])}function SM(){ht(),V.useRef(!1),V.useEffect(()=>{},[])}function AS({nodeTypes:e,edgeTypes:n,onInit:i,onNodeClick:l,onEdgeClick:o,onNodeDoubleClick:s,onEdgeDoubleClick:u,onNodeMouseEnter:f,onNodeMouseMove:d,onNodeMouseLeave:h,onNodeContextMenu:m,onSelectionContextMenu:p,onSelectionStart:y,onSelectionEnd:v,connectionLineType:w,connectionLineStyle:k,connectionLineComponent:S,connectionLineContainerStyle:_,selectionKeyCode:z,selectionOnDrag:E,selectionMode:A,multiSelectionKeyCode:B,panActivationKeyCode:T,zoomActivationKeyCode:q,deleteKeyCode:M,onlyRenderVisibleElements:D,elementsSelectable:X,defaultViewport:H,translateExtent:I,minZoom:ee,maxZoom:L,preventScrolling:G,defaultMarkerColor:R,zoomOnScroll:$,zoomOnPinch:Z,panOnScroll:J,panOnScrollSpeed:j,panOnScrollMode:U,zoomOnDoubleClick:P,panOnDrag:N,onPaneClick:Y,onPaneMouseEnter:F,onPaneMouseMove:K,onPaneMouseLeave:ne,onPaneScroll:re,onPaneContextMenu:se,paneClickDistance:ye,nodeClickDistance:ve,onEdgeContextMenu:xe,onEdgeMouseEnter:pe,onEdgeMouseMove:_e,onEdgeMouseLeave:Me,reconnectRadius:Ce,onReconnect:st,onReconnectStart:We,onReconnectEnd:zt,noDragClassName:Ut,noWheelClassName:Rt,noPanClassName:wn,disableKeyboardA11y:Mn,nodeExtent:At,rfId:Mr,viewport:ue,onViewportChange:ge}){return Hv(e),Hv(n),SM(),hM(i),mM(ue),b.jsx(HA,{onPaneClick:Y,onPaneMouseEnter:F,onPaneMouseMove:K,onPaneMouseLeave:ne,onPaneContextMenu:se,onPaneScroll:re,paneClickDistance:ye,deleteKeyCode:M,selectionKeyCode:z,selectionOnDrag:E,selectionMode:A,onSelectionStart:y,onSelectionEnd:v,multiSelectionKeyCode:B,panActivationKeyCode:T,zoomActivationKeyCode:q,elementsSelectable:X,zoomOnScroll:$,zoomOnPinch:Z,zoomOnDoubleClick:P,panOnScroll:J,panOnScrollSpeed:j,panOnScrollMode:U,panOnDrag:N,defaultViewport:H,translateExtent:I,minZoom:ee,maxZoom:L,onSelectionContextMenu:p,preventScrolling:G,noDragClassName:Ut,noWheelClassName:Rt,noPanClassName:wn,disableKeyboardA11y:Mn,onViewportChange:ge,isControlledViewport:!!ue,children:b.jsxs(dM,{children:[b.jsx(cM,{edgeTypes:n,onEdgeClick:o,onEdgeDoubleClick:u,onReconnect:st,onReconnectStart:We,onReconnectEnd:zt,onlyRenderVisibleElements:D,onEdgeContextMenu:xe,onEdgeMouseEnter:pe,onEdgeMouseMove:_e,onEdgeMouseLeave:Me,reconnectRadius:Ce,defaultMarkerColor:R,noPanClassName:wn,disableKeyboardA11y:Mn,rfId:Mr}),b.jsx(bM,{style:k,type:w,component:S,containerStyle:_}),b.jsx("div",{className:"react-flow__edgelabel-renderer"}),b.jsx(XA,{nodeTypes:e,onNodeClick:l,onNodeDoubleClick:s,onNodeMouseEnter:f,onNodeMouseMove:d,onNodeMouseLeave:h,onNodeContextMenu:m,nodeClickDistance:ve,onlyRenderVisibleElements:D,noPanClassName:wn,noDragClassName:Ut,disableKeyboardA11y:Mn,nodeExtent:At,rfId:Mr}),b.jsx("div",{className:"react-flow__viewport-portal"})]})})}AS.displayName="GraphView";const _M=V.memo(AS),Bv=({nodes:e,edges:n,defaultNodes:i,defaultEdges:l,width:o,height:s,fitView:u,fitViewOptions:f,minZoom:d=.5,maxZoom:h=2,nodeOrigin:m,nodeExtent:p,zIndexMode:y="basic"}={})=>{const v=new Map,w=new Map,k=new Map,S=new Map,_=l??n??[],z=i??e??[],E=m??[0,0],A=p??Ao;Gw(k,S,_);const B=zp(z,v,w,{nodeOrigin:E,nodeExtent:A,zIndexMode:y});let T=[0,0,1];if(u&&o&&s){const q=Vo(v,{filter:H=>!!((H.width||H.initialWidth)&&(H.height||H.initialHeight))}),{x:M,y:D,zoom:X}=nm(q,o,s,d,h,(f==null?void 0:f.padding)??.1);T=[M,D,X]}return{rfId:"1",width:o??0,height:s??0,transform:T,nodes:z,nodesInitialized:B,nodeLookup:v,parentLookup:w,edges:_,edgeLookup:S,connectionLookup:k,onNodesChange:null,onEdgesChange:null,hasDefaultNodes:i!==void 0,hasDefaultEdges:l!==void 0,panZoom:null,minZoom:d,maxZoom:h,translateExtent:Ao,nodeExtent:A,nodesSelectionActive:!1,userSelectionActive:!1,userSelectionRect:null,connectionMode:Wl.Strict,domNode:null,paneDragging:!1,noPanClassName:"nopan",nodeOrigin:E,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:u??!1,fitViewOptions:f,fitViewResolver:null,connection:{...Cw},connectionClickStartHandle:null,connectOnClick:!0,ariaLiveMessage:"",autoPanOnConnect:!0,autoPanOnNodeDrag:!0,autoPanOnNodeFocus:!0,autoPanSpeed:15,connectionRadius:20,onError:HT,isValidConnection:void 0,onSelectionChangeHandlers:[],lib:"react",debug:!1,ariaLabelConfig:kw,zIndexMode:y,onNodesChangeMiddlewareMap:new Map,onEdgesChangeMiddlewareMap:new Map}},EM=({nodes:e,edges:n,defaultNodes:i,defaultEdges:l,width:o,height:s,fitView:u,fitViewOptions:f,minZoom:d,maxZoom:h,nodeOrigin:m,nodeExtent:p,zIndexMode:y})=>Iz((v,w)=>{async function k(){const{nodeLookup:S,panZoom:_,fitViewOptions:z,fitViewResolver:E,width:A,height:B,minZoom:T,maxZoom:q}=w();_&&(await DT({nodes:S,width:A,height:B,panZoom:_,minZoom:T,maxZoom:q},z),E==null||E.resolve(!0),v({fitViewResolver:null}))}return{...Bv({nodes:e,edges:n,width:o,height:s,fitView:u,fitViewOptions:f,minZoom:d,maxZoom:h,nodeOrigin:m,nodeExtent:p,defaultNodes:i,defaultEdges:l,zIndexMode:y}),setNodes:S=>{const{nodeLookup:_,parentLookup:z,nodeOrigin:E,elevateNodesOnSelect:A,fitViewQueued:B,zIndexMode:T}=w(),q=zp(S,_,z,{nodeOrigin:E,nodeExtent:p,elevateNodesOnSelect:A,checkEquality:!0,zIndexMode:T});B&&q?(k(),v({nodes:S,nodesInitialized:q,fitViewQueued:!1,fitViewOptions:void 0})):v({nodes:S,nodesInitialized:q})},setEdges:S=>{const{connectionLookup:_,edgeLookup:z}=w();Gw(_,z,S),v({edges:S})},setDefaultNodesAndEdges:(S,_)=>{if(S){const{setNodes:z}=w();z(S),v({hasDefaultNodes:!0})}if(_){const{setEdges:z}=w();z(_),v({hasDefaultEdges:!0})}},updateNodeInternals:S=>{const{triggerNodeChanges:_,nodeLookup:z,parentLookup:E,domNode:A,nodeOrigin:B,nodeExtent:T,debug:q,fitViewQueued:M,zIndexMode:D}=w(),{changes:X,updatedInternals:H}=lz(S,z,E,A,B,T,D);H&&(tz(z,E,{nodeOrigin:B,nodeExtent:T,zIndexMode:D}),M?(k(),v({fitViewQueued:!1,fitViewOptions:void 0})):v({}),(X==null?void 0:X.length)>0&&(q&&console.log("React Flow: trigger node changes",X),_==null||_(X)))},updateNodePositions:(S,_=!1)=>{const z=[];let E=[];const{nodeLookup:A,triggerNodeChanges:B,connection:T,updateConnection:q,onNodesChangeMiddlewareMap:M}=w();for(const[D,X]of S){const H=A.get(D),I=!!(H!=null&&H.expandParent&&(H!=null&&H.parentId)&&(X!=null&&X.position)),ee={id:D,type:"position",position:I?{x:Math.max(0,X.position.x),y:Math.max(0,X.position.y)}:X.position,dragging:_};if(H&&T.inProgress&&T.fromNode.id===H.id){const L=Xi(H,T.fromHandle,we.Left,!0);q({...T,from:L})}I&&H.parentId&&z.push({id:D,parentId:H.parentId,rect:{...X.internals.positionAbsolute,width:X.measured.width??0,height:X.measured.height??0}}),E.push(ee)}if(z.length>0){const{parentLookup:D,nodeOrigin:X}=w(),H=um(z,A,D,X);E.push(...H)}for(const D of M.values())E=D(E);B(E)},triggerNodeChanges:S=>{const{onNodesChange:_,setNodes:z,nodes:E,hasDefaultNodes:A,debug:B}=w();if(S!=null&&S.length){if(A){const T=lS(S,E);z(T)}B&&console.log("React Flow: trigger node changes",S),_==null||_(S)}},triggerEdgeChanges:S=>{const{onEdgesChange:_,setEdges:z,edges:E,hasDefaultEdges:A,debug:B}=w();if(S!=null&&S.length){if(A){const T=aS(S,E);z(T)}B&&console.log("React Flow: trigger edge changes",S),_==null||_(S)}},addSelectedNodes:S=>{const{multiSelectionActive:_,edgeLookup:z,nodeLookup:E,triggerNodeChanges:A,triggerEdgeChanges:B}=w();if(_){const T=S.map(q=>Di(q,!0));A(T);return}A(Yl(E,new Set([...S]),!0)),B(Yl(z))},addSelectedEdges:S=>{const{multiSelectionActive:_,edgeLookup:z,nodeLookup:E,triggerNodeChanges:A,triggerEdgeChanges:B}=w();if(_){const T=S.map(q=>Di(q,!0));B(T);return}B(Yl(z,new Set([...S]))),A(Yl(E,new Set,!0))},unselectNodesAndEdges:({nodes:S,edges:_}={})=>{const{edges:z,nodes:E,nodeLookup:A,triggerNodeChanges:B,triggerEdgeChanges:T}=w(),q=S||E,M=_||z,D=[];for(const H of q){if(!H.selected)continue;const I=A.get(H.id);I&&(I.selected=!1),D.push(Di(H.id,!1))}const X=[];for(const H of M)H.selected&&X.push(Di(H.id,!1));B(D),T(X)},setMinZoom:S=>{const{panZoom:_,maxZoom:z}=w();_==null||_.setScaleExtent([S,z]),v({minZoom:S})},setMaxZoom:S=>{const{panZoom:_,minZoom:z}=w();_==null||_.setScaleExtent([z,S]),v({maxZoom:S})},setTranslateExtent:S=>{var _;(_=w().panZoom)==null||_.setTranslateExtent(S),v({translateExtent:S})},resetSelectedElements:()=>{const{edges:S,nodes:_,triggerNodeChanges:z,triggerEdgeChanges:E,elementsSelectable:A}=w();if(!A)return;const B=_.reduce((q,M)=>M.selected?[...q,Di(M.id,!1)]:q,[]),T=S.reduce((q,M)=>M.selected?[...q,Di(M.id,!1)]:q,[]);z(B),E(T)},setNodeExtent:S=>{const{nodes:_,nodeLookup:z,parentLookup:E,nodeOrigin:A,elevateNodesOnSelect:B,nodeExtent:T,zIndexMode:q}=w();S[0][0]===T[0][0]&&S[0][1]===T[0][1]&&S[1][0]===T[1][0]&&S[1][1]===T[1][1]||(zp(_,z,E,{nodeOrigin:A,nodeExtent:S,elevateNodesOnSelect:B,checkEquality:!1,zIndexMode:q}),v({nodeExtent:S}))},panBy:S=>{const{transform:_,width:z,height:E,panZoom:A,translateExtent:B}=w();return az({delta:S,panZoom:A,transform:_,translateExtent:B,width:z,height:E})},setCenter:async(S,_,z)=>{const{width:E,height:A,maxZoom:B,panZoom:T}=w();if(!T)return Promise.resolve(!1);const q=typeof(z==null?void 0:z.zoom)<"u"?z.zoom:B;return await T.setViewport({x:E/2-S*q,y:A/2-_*q,zoom:q},{duration:z==null?void 0:z.duration,ease:z==null?void 0:z.ease,interpolate:z==null?void 0:z.interpolate}),Promise.resolve(!0)},cancelConnection:()=>{v({connection:{...Cw}})},updateConnection:S=>{v({connection:S})},reset:()=>v({...Bv()})}},Object.is);function NM({initialNodes:e,initialEdges:n,defaultNodes:i,defaultEdges:l,initialWidth:o,initialHeight:s,initialMinZoom:u,initialMaxZoom:f,initialFitViewOptions:d,fitView:h,nodeOrigin:m,nodeExtent:p,zIndexMode:y,children:v}){const[w]=V.useState(()=>EM({nodes:e,edges:n,defaultNodes:i,defaultEdges:l,width:o,height:s,fitView:h,minZoom:u,maxZoom:f,fitViewOptions:d,nodeOrigin:m,nodeExtent:p,zIndexMode:y}));return b.jsx(Yz,{value:w,children:b.jsx(dA,{children:v})})}function kM({children:e,nodes:n,edges:i,defaultNodes:l,defaultEdges:o,width:s,height:u,fitView:f,fitViewOptions:d,minZoom:h,maxZoom:m,nodeOrigin:p,nodeExtent:y,zIndexMode:v}){return V.useContext(xc)?b.jsx(b.Fragment,{children:e}):b.jsx(NM,{initialNodes:n,initialEdges:i,defaultNodes:l,defaultEdges:o,initialWidth:s,initialHeight:u,fitView:f,initialFitViewOptions:d,initialMinZoom:h,initialMaxZoom:m,nodeOrigin:p,nodeExtent:y,zIndexMode:v,children:e})}const CM={width:"100%",height:"100%",overflow:"hidden",position:"relative",zIndex:0};function TM({nodes:e,edges:n,defaultNodes:i,defaultEdges:l,className:o,nodeTypes:s,edgeTypes:u,onNodeClick:f,onEdgeClick:d,onInit:h,onMove:m,onMoveStart:p,onMoveEnd:y,onConnect:v,onConnectStart:w,onConnectEnd:k,onClickConnectStart:S,onClickConnectEnd:_,onNodeMouseEnter:z,onNodeMouseMove:E,onNodeMouseLeave:A,onNodeContextMenu:B,onNodeDoubleClick:T,onNodeDragStart:q,onNodeDrag:M,onNodeDragStop:D,onNodesDelete:X,onEdgesDelete:H,onDelete:I,onSelectionChange:ee,onSelectionDragStart:L,onSelectionDrag:G,onSelectionDragStop:R,onSelectionContextMenu:$,onSelectionStart:Z,onSelectionEnd:J,onBeforeDelete:j,connectionMode:U,connectionLineType:P=fi.Bezier,connectionLineStyle:N,connectionLineComponent:Y,connectionLineContainerStyle:F,deleteKeyCode:K="Backspace",selectionKeyCode:ne="Shift",selectionOnDrag:re=!1,selectionMode:se=Mo.Full,panActivationKeyCode:ye="Space",multiSelectionKeyCode:ve=Oo()?"Meta":"Control",zoomActivationKeyCode:xe=Oo()?"Meta":"Control",snapToGrid:pe,snapGrid:_e,onlyRenderVisibleElements:Me=!1,selectNodesOnDrag:Ce,nodesDraggable:st,autoPanOnNodeFocus:We,nodesConnectable:zt,nodesFocusable:Ut,nodeOrigin:Rt=rS,edgesFocusable:wn,edgesReconnectable:Mn,elementsSelectable:At=!0,defaultViewport:Mr=nA,minZoom:ue=.5,maxZoom:ge=2,translateExtent:Ne=Ao,preventScrolling:De=!0,nodeExtent:Ve,defaultMarkerColor:$t="#b1b1b7",zoomOnScroll:jn=!0,zoomOnPinch:Dt=!0,panOnScroll:yt=!1,panOnScrollSpeed:It=.5,panOnScrollMode:Ze=Ii.Free,zoomOnDoubleClick:Gn=!0,panOnDrag:sn=!0,onPaneClick:Ec,onPaneMouseEnter:Zi,onPaneMouseMove:Ki,onPaneMouseLeave:Ji,onPaneScroll:ir,onPaneContextMenu:Wi,paneClickDistance:hi=1,nodeClickDistance:Nc=0,children:Qo,onReconnect:sa,onReconnectStart:pi,onReconnectEnd:kc,onEdgeContextMenu:Zo,onEdgeDoubleClick:Ko,onEdgeMouseEnter:Jo,onEdgeMouseMove:ua,onEdgeMouseLeave:ca,reconnectRadius:Wo=10,onNodesChange:es,onEdgesChange:$n,noDragClassName:Mt="nodrag",noWheelClassName:Vt="nowheel",noPanClassName:lr="nopan",fitView:el,fitViewOptions:ts,connectOnClick:Cc,attributionPosition:ns,proOptions:mi,defaultEdgeOptions:fa,elevateNodesOnSelect:jr=!0,elevateEdgesOnSelect:Or=!1,disableKeyboardA11y:Rr=!1,autoPanOnConnect:Dr,autoPanOnNodeDrag:bt,autoPanSpeed:rs,connectionRadius:is,isValidConnection:ar,onError:Lr,style:Tc,id:da,nodeDragThreshold:ls,connectionDragThreshold:zc,viewport:tl,onViewportChange:nl,width:On,height:Pt,colorMode:as="light",debug:Ac,onScroll:Hr,ariaLabelConfig:os,zIndexMode:gi="basic",...Mc},Ft){const yi=da||"1",ss=aA(as),ha=V.useCallback(or=>{or.currentTarget.scrollTo({top:0,left:0,behavior:"instant"}),Hr==null||Hr(or)},[Hr]);return b.jsx("div",{"data-testid":"rf__wrapper",...Mc,onScroll:ha,style:{...Tc,...CM},ref:Ft,className:Tt(["react-flow",o,ss]),id:da,role:"application",children:b.jsxs(kM,{nodes:e,edges:n,width:On,height:Pt,fitView:el,fitViewOptions:ts,minZoom:ue,maxZoom:ge,nodeOrigin:Rt,nodeExtent:Ve,zIndexMode:gi,children:[b.jsx(_M,{onInit:h,onNodeClick:f,onEdgeClick:d,onNodeMouseEnter:z,onNodeMouseMove:E,onNodeMouseLeave:A,onNodeContextMenu:B,onNodeDoubleClick:T,nodeTypes:s,edgeTypes:u,connectionLineType:P,connectionLineStyle:N,connectionLineComponent:Y,connectionLineContainerStyle:F,selectionKeyCode:ne,selectionOnDrag:re,selectionMode:se,deleteKeyCode:K,multiSelectionKeyCode:ve,panActivationKeyCode:ye,zoomActivationKeyCode:xe,onlyRenderVisibleElements:Me,defaultViewport:Mr,translateExtent:Ne,minZoom:ue,maxZoom:ge,preventScrolling:De,zoomOnScroll:jn,zoomOnPinch:Dt,zoomOnDoubleClick:Gn,panOnScroll:yt,panOnScrollSpeed:It,panOnScrollMode:Ze,panOnDrag:sn,onPaneClick:Ec,onPaneMouseEnter:Zi,onPaneMouseMove:Ki,onPaneMouseLeave:Ji,onPaneScroll:ir,onPaneContextMenu:Wi,paneClickDistance:hi,nodeClickDistance:Nc,onSelectionContextMenu:$,onSelectionStart:Z,onSelectionEnd:J,onReconnect:sa,onReconnectStart:pi,onReconnectEnd:kc,onEdgeContextMenu:Zo,onEdgeDoubleClick:Ko,onEdgeMouseEnter:Jo,onEdgeMouseMove:ua,onEdgeMouseLeave:ca,reconnectRadius:Wo,defaultMarkerColor:$t,noDragClassName:Mt,noWheelClassName:Vt,noPanClassName:lr,rfId:yi,disableKeyboardA11y:Rr,nodeExtent:Ve,viewport:tl,onViewportChange:nl}),b.jsx(lA,{nodes:e,edges:n,defaultNodes:i,defaultEdges:l,onConnect:v,onConnectStart:w,onConnectEnd:k,onClickConnectStart:S,onClickConnectEnd:_,nodesDraggable:st,autoPanOnNodeFocus:We,nodesConnectable:zt,nodesFocusable:Ut,edgesFocusable:wn,edgesReconnectable:Mn,elementsSelectable:At,elevateNodesOnSelect:jr,elevateEdgesOnSelect:Or,minZoom:ue,maxZoom:ge,nodeExtent:Ve,onNodesChange:es,onEdgesChange:$n,snapToGrid:pe,snapGrid:_e,connectionMode:U,translateExtent:Ne,connectOnClick:Cc,defaultEdgeOptions:fa,fitView:el,fitViewOptions:ts,onNodesDelete:X,onEdgesDelete:H,onDelete:I,onNodeDragStart:q,onNodeDrag:M,onNodeDragStop:D,onSelectionDrag:G,onSelectionDragStart:L,onSelectionDragStop:R,onMove:m,onMoveStart:p,onMoveEnd:y,noPanClassName:lr,nodeOrigin:Rt,rfId:yi,autoPanOnConnect:Dr,autoPanOnNodeDrag:bt,autoPanSpeed:rs,onError:Lr,connectionRadius:is,isValidConnection:ar,selectNodesOnDrag:Ce,nodeDragThreshold:ls,connectionDragThreshold:zc,onBeforeDelete:j,debug:Ac,ariaLabelConfig:os,zIndexMode:gi}),b.jsx(tA,{onSelectionChange:ee}),Qo,b.jsx(Zz,{proOptions:mi,position:ns}),b.jsx(Qz,{rfId:yi,disableKeyboardA11y:Rr})]})})}var zM=oS(TM);const AM=e=>{var n;return(n=e.domNode)==null?void 0:n.querySelector(".react-flow__edgelabel-renderer")};function MM({children:e}){const n=Ie(AM);return n?Vz.createPortal(e,n):null}function jM(e){const[n,i]=V.useState(e),l=V.useCallback(o=>i(s=>lS(o,s)),[]);return[n,i,l]}function OM(e){const[n,i]=V.useState(e),l=V.useCallback(o=>i(s=>aS(o,s)),[]);return[n,i,l]}function RM({dimensions:e,lineWidth:n,variant:i,className:l}){return b.jsx("path",{strokeWidth:n,d:`M${e[0]/2} 0 V${e[1]} M0 ${e[1]/2} H${e[0]}`,className:Tt(["react-flow__background-pattern",i,l])})}function DM({radius:e,className:n}){return b.jsx("circle",{cx:e,cy:e,r:e,className:Tt(["react-flow__background-pattern","dots",n])})}var Tr;(function(e){e.Lines="lines",e.Dots="dots",e.Cross="cross"})(Tr||(Tr={}));const LM={[Tr.Dots]:1,[Tr.Lines]:1,[Tr.Cross]:6},HM=e=>({transform:e.transform,patternId:`pattern-${e.rfId}`});function MS({id:e,variant:n=Tr.Dots,gap:i=20,size:l,lineWidth:o=1,offset:s=0,color:u,bgColor:f,style:d,className:h,patternClassName:m}){const p=V.useRef(null),{transform:y,patternId:v}=Ie(HM,dt),w=l||LM[n],k=n===Tr.Dots,S=n===Tr.Cross,_=Array.isArray(i)?i:[i,i],z=[_[0]*y[2]||1,_[1]*y[2]||1],E=w*y[2],A=Array.isArray(s)?s:[s,s],B=S?[E,E]:z,T=[A[0]*y[2]||1+B[0]/2,A[1]*y[2]||1+B[1]/2],q=`${v}${e||""}`;return b.jsxs("svg",{className:Tt(["react-flow__background",h]),style:{...d,...bc,"--xy-background-color-props":f,"--xy-background-pattern-color-props":u},ref:p,"data-testid":"rf__background",children:[b.jsx("pattern",{id:q,x:y[0]%z[0],y:y[1]%z[1],width:z[0],height:z[1],patternUnits:"userSpaceOnUse",patternTransform:`translate(-${T[0]},-${T[1]})`,children:k?b.jsx(DM,{radius:E/2,className:m}):b.jsx(RM,{dimensions:B,lineWidth:o,variant:n,className:m})}),b.jsx("rect",{x:"0",y:"0",width:"100%",height:"100%",fill:`url(#${q})`})]})}MS.displayName="Background";const BM=V.memo(MS);function qM(){return b.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",children:b.jsx("path",{d:"M32 18.133H18.133V32h-4.266V18.133H0v-4.266h13.867V0h4.266v13.867H32z"})})}function UM(){return b.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 5",children:b.jsx("path",{d:"M0 0h32v4.2H0z"})})}function IM(){return b.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 30",children:b.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 VM(){return b.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 25 32",children:b.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 YM(){return b.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 25 32",children:b.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 Mu({children:e,className:n,...i}){return b.jsx("button",{type:"button",className:Tt(["react-flow__controls-button",n]),...i,children:e})}const GM=e=>({isInteractive:e.nodesDraggable||e.nodesConnectable||e.elementsSelectable,minZoomReached:e.transform[2]<=e.minZoom,maxZoomReached:e.transform[2]>=e.maxZoom,ariaLabelConfig:e.ariaLabelConfig});function jS({style:e,showZoom:n=!0,showFitView:i=!0,showInteractive:l=!0,fitViewOptions:o,onZoomIn:s,onZoomOut:u,onFitView:f,onInteractiveChange:d,className:h,children:m,position:p="bottom-left",orientation:y="vertical","aria-label":v}){const w=ht(),{isInteractive:k,minZoomReached:S,maxZoomReached:_,ariaLabelConfig:z}=Ie(GM,dt),{zoomIn:E,zoomOut:A,fitView:B}=$o(),T=()=>{E(),s==null||s()},q=()=>{A(),u==null||u()},M=()=>{B(o),f==null||f()},D=()=>{w.setState({nodesDraggable:!k,nodesConnectable:!k,elementsSelectable:!k}),d==null||d(!k)},X=y==="horizontal"?"horizontal":"vertical";return b.jsxs(vc,{className:Tt(["react-flow__controls",X,h]),position:p,style:e,"data-testid":"rf__controls","aria-label":v??z["controls.ariaLabel"],children:[n&&b.jsxs(b.Fragment,{children:[b.jsx(Mu,{onClick:T,className:"react-flow__controls-zoomin",title:z["controls.zoomIn.ariaLabel"],"aria-label":z["controls.zoomIn.ariaLabel"],disabled:_,children:b.jsx(qM,{})}),b.jsx(Mu,{onClick:q,className:"react-flow__controls-zoomout",title:z["controls.zoomOut.ariaLabel"],"aria-label":z["controls.zoomOut.ariaLabel"],disabled:S,children:b.jsx(UM,{})})]}),i&&b.jsx(Mu,{className:"react-flow__controls-fitview",onClick:M,title:z["controls.fitView.ariaLabel"],"aria-label":z["controls.fitView.ariaLabel"],children:b.jsx(IM,{})}),l&&b.jsx(Mu,{className:"react-flow__controls-interactive",onClick:D,title:z["controls.interactive.ariaLabel"],"aria-label":z["controls.interactive.ariaLabel"],children:k?b.jsx(YM,{}):b.jsx(VM,{})}),m]})}jS.displayName="Controls";const $M=V.memo(jS);function XM({id:e,x:n,y:i,width:l,height:o,style:s,color:u,strokeColor:f,strokeWidth:d,className:h,borderRadius:m,shapeRendering:p,selected:y,onClick:v}){const{background:w,backgroundColor:k}=s||{},S=u||w||k;return b.jsx("rect",{className:Tt(["react-flow__minimap-node",{selected:y},h]),x:n,y:i,rx:m,ry:m,width:l,height:o,style:{fill:S,stroke:f,strokeWidth:d},shapeRendering:p,onClick:v?_=>v(_,e):void 0})}const PM=V.memo(XM),FM=e=>e.nodes.map(n=>n.id),ah=e=>e instanceof Function?e:()=>e;function QM({nodeStrokeColor:e,nodeColor:n,nodeClassName:i="",nodeBorderRadius:l=5,nodeStrokeWidth:o,nodeComponent:s=PM,onClick:u}){const f=Ie(FM,dt),d=ah(n),h=ah(e),m=ah(i),p=typeof window>"u"||window.chrome?"crispEdges":"geometricPrecision";return b.jsx(b.Fragment,{children:f.map(y=>b.jsx(KM,{id:y,nodeColorFunc:d,nodeStrokeColorFunc:h,nodeClassNameFunc:m,nodeBorderRadius:l,nodeStrokeWidth:o,NodeComponent:s,onClick:u,shapeRendering:p},y))})}function ZM({id:e,nodeColorFunc:n,nodeStrokeColorFunc:i,nodeClassNameFunc:l,nodeBorderRadius:o,nodeStrokeWidth:s,shapeRendering:u,NodeComponent:f,onClick:d}){const{node:h,x:m,y:p,width:y,height:v}=Ie(w=>{const k=w.nodeLookup.get(e);if(!k)return{node:void 0,x:0,y:0,width:0,height:0};const S=k.internals.userNode,{x:_,y:z}=k.internals.positionAbsolute,{width:E,height:A}=Ar(S);return{node:S,x:_,y:z,width:E,height:A}},dt);return!h||h.hidden||!Rw(h)?null:b.jsx(f,{x:m,y:p,width:y,height:v,style:h.style,selected:!!h.selected,className:l(h),color:n(h),borderRadius:o,strokeColor:i(h),strokeWidth:s,shapeRendering:u,onClick:d,id:h.id})}const KM=V.memo(ZM);var JM=V.memo(QM);const WM=200,ej=150,tj=e=>!e.hidden,nj=e=>{const n={x:-e.transform[0]/e.transform[2],y:-e.transform[1]/e.transform[2],width:e.width/e.transform[2],height:e.height/e.transform[2]};return{viewBB:n,boundingRect:e.nodeLookup.size>0?Ow(Vo(e.nodeLookup,{filter:tj}),n):n,rfId:e.rfId,panZoom:e.panZoom,translateExtent:e.translateExtent,flowWidth:e.width,flowHeight:e.height,ariaLabelConfig:e.ariaLabelConfig}},rj="react-flow__minimap-desc";function OS({style:e,className:n,nodeStrokeColor:i,nodeColor:l,nodeClassName:o="",nodeBorderRadius:s=5,nodeStrokeWidth:u,nodeComponent:f,bgColor:d,maskColor:h,maskStrokeColor:m,maskStrokeWidth:p,position:y="bottom-right",onClick:v,onNodeClick:w,pannable:k=!1,zoomable:S=!1,ariaLabel:_,inversePan:z,zoomStep:E=1,offsetScale:A=5}){const B=ht(),T=V.useRef(null),{boundingRect:q,viewBB:M,rfId:D,panZoom:X,translateExtent:H,flowWidth:I,flowHeight:ee,ariaLabelConfig:L}=Ie(nj,dt),G=(e==null?void 0:e.width)??WM,R=(e==null?void 0:e.height)??ej,$=q.width/G,Z=q.height/R,J=Math.max($,Z),j=J*G,U=J*R,P=A*J,N=q.x-(j-q.width)/2-P,Y=q.y-(U-q.height)/2-P,F=j+P*2,K=U+P*2,ne=`${rj}-${D}`,re=V.useRef(0),se=V.useRef();re.current=J,V.useEffect(()=>{if(T.current&&X)return se.current=mz({domNode:T.current,panZoom:X,getTransform:()=>B.getState().transform,getViewScale:()=>re.current}),()=>{var pe;(pe=se.current)==null||pe.destroy()}},[X]),V.useEffect(()=>{var pe;(pe=se.current)==null||pe.update({translateExtent:H,width:I,height:ee,inversePan:z,pannable:k,zoomStep:E,zoomable:S})},[k,S,z,E,H,I,ee]);const ye=v?pe=>{var Ce;const[_e,Me]=((Ce=se.current)==null?void 0:Ce.pointer(pe))||[0,0];v(pe,{x:_e,y:Me})}:void 0,ve=w?V.useCallback((pe,_e)=>{const Me=B.getState().nodeLookup.get(_e).internals.userNode;w(pe,Me)},[]):void 0,xe=_??L["minimap.ariaLabel"];return b.jsx(vc,{position:y,style:{...e,"--xy-minimap-background-color-props":typeof d=="string"?d:void 0,"--xy-minimap-mask-background-color-props":typeof h=="string"?h:void 0,"--xy-minimap-mask-stroke-color-props":typeof m=="string"?m:void 0,"--xy-minimap-mask-stroke-width-props":typeof p=="number"?p*J: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 u=="number"?u:void 0},className:Tt(["react-flow__minimap",n]),"data-testid":"rf__minimap",children:b.jsxs("svg",{width:G,height:R,viewBox:`${N} ${Y} ${F} ${K}`,className:"react-flow__minimap-svg",role:"img","aria-labelledby":ne,ref:T,onClick:ye,children:[xe&&b.jsx("title",{id:ne,children:xe}),b.jsx(JM,{onClick:ve,nodeColor:l,nodeStrokeColor:i,nodeBorderRadius:s,nodeClassName:o,nodeStrokeWidth:u,nodeComponent:f}),b.jsx("path",{className:"react-flow__minimap-mask",d:`M${N-P},${Y-P}h${F+P*2}v${K+P*2}h${-F-P*2}z - M${M.x},${M.y}h${M.width}v${M.height}h${-M.width}z`,fillRule:"evenodd",pointerEvents:"none"})]})})}OS.displayName="MiniMap";const ij=V.memo(OS),lj=e=>n=>e?`${Math.max(1/n.transform[2],1)}`:void 0,aj={[ra.Line]:"right",[ra.Handle]:"bottom-right"};function oj({nodeId:e,position:n,variant:i=ra.Handle,className:l,style:o=void 0,children:s,color:u,minWidth:f=10,minHeight:d=10,maxWidth:h=Number.MAX_VALUE,maxHeight:m=Number.MAX_VALUE,keepAspectRatio:p=!1,resizeDirection:y,autoScale:v=!0,shouldResize:w,onResizeStart:k,onResize:S,onResizeEnd:_}){const z=fS(),E=typeof e=="string"?e:z,A=ht(),B=V.useRef(null),T=i===ra.Handle,q=Ie(V.useCallback(lj(T&&v),[T,v]),dt),M=V.useRef(null),D=n??aj[i];V.useEffect(()=>{if(!(!B.current||!E))return M.current||(M.current=zz({domNode:B.current,nodeId:E,getStoreItems:()=>{const{nodeLookup:H,transform:I,snapGrid:ee,snapToGrid:L,nodeOrigin:G,domNode:R}=A.getState();return{nodeLookup:H,transform:I,snapGrid:ee,snapToGrid:L,nodeOrigin:G,paneDomNode:R}},onChange:(H,I)=>{const{triggerNodeChanges:ee,nodeLookup:L,parentLookup:G,nodeOrigin:R}=A.getState(),$=[],Z={x:H.x,y:H.y},J=L.get(E);if(J&&J.expandParent&&J.parentId){const j=J.origin??R,U=H.width??J.measured.width??0,P=H.height??J.measured.height??0,N={id:J.id,parentId:J.parentId,rect:{width:U,height:P,...Dw({x:H.x??J.position.x,y:H.y??J.position.y},{width:U,height:P},J.parentId,L,j)}},Y=um([N],L,G,R);$.push(...Y),Z.x=H.x?Math.max(j[0]*U,H.x):void 0,Z.y=H.y?Math.max(j[1]*P,H.y):void 0}if(Z.x!==void 0&&Z.y!==void 0){const j={id:E,type:"position",position:{...Z}};$.push(j)}if(H.width!==void 0&&H.height!==void 0){const U={id:E,type:"dimensions",resizing:!0,setAttributes:y?y==="horizontal"?"width":"height":!0,dimensions:{width:H.width,height:H.height}};$.push(U)}for(const j of I){const U={...j,type:"position"};$.push(U)}ee($)},onEnd:({width:H,height:I})=>{const ee={id:E,type:"dimensions",resizing:!1,dimensions:{width:H,height:I}};A.getState().triggerNodeChanges([ee])}})),M.current.update({controlPosition:D,boundaries:{minWidth:f,minHeight:d,maxWidth:h,maxHeight:m},keepAspectRatio:p,resizeDirection:y,onResizeStart:k,onResize:S,onResizeEnd:_,shouldResize:w}),()=>{var H;(H=M.current)==null||H.destroy()}},[D,f,d,h,m,p,k,S,_,w]);const X=D.split("-");return b.jsx("div",{className:Tt(["react-flow__resize-control","nodrag",...X,i,l]),ref:B,style:{...o,scale:q,...u&&{[T?"backgroundColor":"borderColor"]:u}},children:s})}V.memo(oj);var oh,qv;function fm(){if(qv)return oh;qv=1;var e="\0",n="\0",i="";class l{constructor(m){Nt(this,"_isDirected",!0);Nt(this,"_isMultigraph",!1);Nt(this,"_isCompound",!1);Nt(this,"_label");Nt(this,"_defaultNodeLabelFn",()=>{});Nt(this,"_defaultEdgeLabelFn",()=>{});Nt(this,"_nodes",{});Nt(this,"_in",{});Nt(this,"_preds",{});Nt(this,"_out",{});Nt(this,"_sucs",{});Nt(this,"_edgeObjs",{});Nt(this,"_edgeLabels",{});Nt(this,"_nodeCount",0);Nt(this,"_edgeCount",0);Nt(this,"_parent");Nt(this,"_children");m&&(this._isDirected=Object.hasOwn(m,"directed")?m.directed:!0,this._isMultigraph=Object.hasOwn(m,"multigraph")?m.multigraph:!1,this._isCompound=Object.hasOwn(m,"compound")?m.compound:!1),this._isCompound&&(this._parent={},this._children={},this._children[n]={})}isDirected(){return this._isDirected}isMultigraph(){return this._isMultigraph}isCompound(){return this._isCompound}setGraph(m){return this._label=m,this}graph(){return this._label}setDefaultNodeLabel(m){return this._defaultNodeLabelFn=m,typeof m!="function"&&(this._defaultNodeLabelFn=()=>m),this}nodeCount(){return this._nodeCount}nodes(){return Object.keys(this._nodes)}sources(){var m=this;return this.nodes().filter(p=>Object.keys(m._in[p]).length===0)}sinks(){var m=this;return this.nodes().filter(p=>Object.keys(m._out[p]).length===0)}setNodes(m,p){var y=arguments,v=this;return m.forEach(function(w){y.length>1?v.setNode(w,p):v.setNode(w)}),this}setNode(m,p){return Object.hasOwn(this._nodes,m)?(arguments.length>1&&(this._nodes[m]=p),this):(this._nodes[m]=arguments.length>1?p:this._defaultNodeLabelFn(m),this._isCompound&&(this._parent[m]=n,this._children[m]={},this._children[n][m]=!0),this._in[m]={},this._preds[m]={},this._out[m]={},this._sucs[m]={},++this._nodeCount,this)}node(m){return this._nodes[m]}hasNode(m){return Object.hasOwn(this._nodes,m)}removeNode(m){var p=this;if(Object.hasOwn(this._nodes,m)){var y=v=>p.removeEdge(p._edgeObjs[v]);delete this._nodes[m],this._isCompound&&(this._removeFromParentsChildList(m),delete this._parent[m],this.children(m).forEach(function(v){p.setParent(v)}),delete this._children[m]),Object.keys(this._in[m]).forEach(y),delete this._in[m],delete this._preds[m],Object.keys(this._out[m]).forEach(y),delete this._out[m],delete this._sucs[m],--this._nodeCount}return this}setParent(m,p){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(p===void 0)p=n;else{p+="";for(var y=p;y!==void 0;y=this.parent(y))if(y===m)throw new Error("Setting "+p+" as parent of "+m+" would create a cycle");this.setNode(p)}return this.setNode(m),this._removeFromParentsChildList(m),this._parent[m]=p,this._children[p][m]=!0,this}_removeFromParentsChildList(m){delete this._children[this._parent[m]][m]}parent(m){if(this._isCompound){var p=this._parent[m];if(p!==n)return p}}children(m=n){if(this._isCompound){var p=this._children[m];if(p)return Object.keys(p)}else{if(m===n)return this.nodes();if(this.hasNode(m))return[]}}predecessors(m){var p=this._preds[m];if(p)return Object.keys(p)}successors(m){var p=this._sucs[m];if(p)return Object.keys(p)}neighbors(m){var p=this.predecessors(m);if(p){const v=new Set(p);for(var y of this.successors(m))v.add(y);return Array.from(v.values())}}isLeaf(m){var p;return this.isDirected()?p=this.successors(m):p=this.neighbors(m),p.length===0}filterNodes(m){var p=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});p.setGraph(this.graph());var y=this;Object.entries(this._nodes).forEach(function([k,S]){m(k)&&p.setNode(k,S)}),Object.values(this._edgeObjs).forEach(function(k){p.hasNode(k.v)&&p.hasNode(k.w)&&p.setEdge(k,y.edge(k))});var v={};function w(k){var S=y.parent(k);return S===void 0||p.hasNode(S)?(v[k]=S,S):S in v?v[S]:w(S)}return this._isCompound&&p.nodes().forEach(k=>p.setParent(k,w(k))),p}setDefaultEdgeLabel(m){return this._defaultEdgeLabelFn=m,typeof m!="function"&&(this._defaultEdgeLabelFn=()=>m),this}edgeCount(){return this._edgeCount}edges(){return Object.values(this._edgeObjs)}setPath(m,p){var y=this,v=arguments;return m.reduce(function(w,k){return v.length>1?y.setEdge(w,k,p):y.setEdge(w,k),k}),this}setEdge(){var m,p,y,v,w=!1,k=arguments[0];typeof k=="object"&&k!==null&&"v"in k?(m=k.v,p=k.w,y=k.name,arguments.length===2&&(v=arguments[1],w=!0)):(m=k,p=arguments[1],y=arguments[3],arguments.length>2&&(v=arguments[2],w=!0)),m=""+m,p=""+p,y!==void 0&&(y=""+y);var S=u(this._isDirected,m,p,y);if(Object.hasOwn(this._edgeLabels,S))return w&&(this._edgeLabels[S]=v),this;if(y!==void 0&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(m),this.setNode(p),this._edgeLabels[S]=w?v:this._defaultEdgeLabelFn(m,p,y);var _=f(this._isDirected,m,p,y);return m=_.v,p=_.w,Object.freeze(_),this._edgeObjs[S]=_,o(this._preds[p],m),o(this._sucs[m],p),this._in[p][S]=_,this._out[m][S]=_,this._edgeCount++,this}edge(m,p,y){var v=arguments.length===1?d(this._isDirected,arguments[0]):u(this._isDirected,m,p,y);return this._edgeLabels[v]}edgeAsObj(){const m=this.edge(...arguments);return typeof m!="object"?{label:m}:m}hasEdge(m,p,y){var v=arguments.length===1?d(this._isDirected,arguments[0]):u(this._isDirected,m,p,y);return Object.hasOwn(this._edgeLabels,v)}removeEdge(m,p,y){var v=arguments.length===1?d(this._isDirected,arguments[0]):u(this._isDirected,m,p,y),w=this._edgeObjs[v];return w&&(m=w.v,p=w.w,delete this._edgeLabels[v],delete this._edgeObjs[v],s(this._preds[p],m),s(this._sucs[m],p),delete this._in[p][v],delete this._out[m][v],this._edgeCount--),this}inEdges(m,p){var y=this._in[m];if(y){var v=Object.values(y);return p?v.filter(w=>w.v===p):v}}outEdges(m,p){var y=this._out[m];if(y){var v=Object.values(y);return p?v.filter(w=>w.w===p):v}}nodeEdges(m,p){var y=this.inEdges(m,p);if(y)return y.concat(this.outEdges(m,p))}}function o(h,m){h[m]?h[m]++:h[m]=1}function s(h,m){--h[m]||delete h[m]}function u(h,m,p,y){var v=""+m,w=""+p;if(!h&&v>w){var k=v;v=w,w=k}return v+i+w+i+(y===void 0?e:y)}function f(h,m,p,y){var v=""+m,w=""+p;if(!h&&v>w){var k=v;v=w,w=k}var S={v,w};return y&&(S.name=y),S}function d(h,m){return u(h,m.v,m.w,m.name)}return oh=l,oh}var sh,Uv;function sj(){return Uv||(Uv=1,sh="2.2.4"),sh}var uh,Iv;function uj(){return Iv||(Iv=1,uh={Graph:fm(),version:sj()}),uh}var ch,Vv;function cj(){if(Vv)return ch;Vv=1;var e=fm();ch={write:n,read:o};function n(s){var u={options:{directed:s.isDirected(),multigraph:s.isMultigraph(),compound:s.isCompound()},nodes:i(s),edges:l(s)};return s.graph()!==void 0&&(u.value=structuredClone(s.graph())),u}function i(s){return s.nodes().map(function(u){var f=s.node(u),d=s.parent(u),h={v:u};return f!==void 0&&(h.value=f),d!==void 0&&(h.parent=d),h})}function l(s){return s.edges().map(function(u){var f=s.edge(u),d={v:u.v,w:u.w};return u.name!==void 0&&(d.name=u.name),f!==void 0&&(d.value=f),d})}function o(s){var u=new e(s.options).setGraph(s.value);return s.nodes.forEach(function(f){u.setNode(f.v,f.value),f.parent&&u.setParent(f.v,f.parent)}),s.edges.forEach(function(f){u.setEdge({v:f.v,w:f.w,name:f.name},f.value)}),u}return ch}var fh,Yv;function fj(){if(Yv)return fh;Yv=1,fh=e;function e(n){var i={},l=[],o;function s(u){Object.hasOwn(i,u)||(i[u]=!0,o.push(u),n.successors(u).forEach(s),n.predecessors(u).forEach(s))}return n.nodes().forEach(function(u){o=[],s(u),o.length&&l.push(o)}),l}return fh}var dh,Gv;function RS(){if(Gv)return dh;Gv=1;class e{constructor(){Nt(this,"_arr",[]);Nt(this,"_keyIndices",{})}size(){return this._arr.length}keys(){return this._arr.map(function(i){return i.key})}has(i){return Object.hasOwn(this._keyIndices,i)}priority(i){var l=this._keyIndices[i];if(l!==void 0)return this._arr[l].priority}min(){if(this.size()===0)throw new Error("Queue underflow");return this._arr[0].key}add(i,l){var o=this._keyIndices;if(i=String(i),!Object.hasOwn(o,i)){var s=this._arr,u=s.length;return o[i]=u,s.push({key:i,priority:l}),this._decrease(u),!0}return!1}removeMin(){this._swap(0,this._arr.length-1);var i=this._arr.pop();return delete this._keyIndices[i.key],this._heapify(0),i.key}decrease(i,l){var o=this._keyIndices[i];if(l>this._arr[o].priority)throw new Error("New priority is greater than current priority. Key: "+i+" Old: "+this._arr[o].priority+" New: "+l);this._arr[o].priority=l,this._decrease(o)}_heapify(i){var l=this._arr,o=2*i,s=o+1,u=i;o>1,!(l[s].priority1;function i(o,s,u,f){return l(o,String(s),u||n,f||function(d){return o.outEdges(d)})}function l(o,s,u,f){var d={},h=new e,m,p,y=function(v){var w=v.v!==m?v.v:v.w,k=d[w],S=u(v),_=p.distance+S;if(S<0)throw new Error("dijkstra does not allow negative edge weights. Bad edge: "+v+" Weight: "+S);_0&&(m=h.removeMin(),p=d[m],p.distance!==Number.POSITIVE_INFINITY);)f(m).forEach(y);return d}return hh}var ph,Xv;function dj(){if(Xv)return ph;Xv=1;var e=DS();ph=n;function n(i,l,o){return i.nodes().reduce(function(s,u){return s[u]=e(i,u,l,o),s},{})}return ph}var mh,Pv;function LS(){if(Pv)return mh;Pv=1,mh=e;function e(n){var i=0,l=[],o={},s=[];function u(f){var d=o[f]={onStack:!0,lowlink:i,index:i++};if(l.push(f),n.successors(f).forEach(function(p){Object.hasOwn(o,p)?o[p].onStack&&(d.lowlink=Math.min(d.lowlink,o[p].index)):(u(p),d.lowlink=Math.min(d.lowlink,o[p].lowlink))}),d.lowlink===d.index){var h=[],m;do m=l.pop(),o[m].onStack=!1,h.push(m);while(f!==m);s.push(h)}}return n.nodes().forEach(function(f){Object.hasOwn(o,f)||u(f)}),s}return mh}var gh,Fv;function hj(){if(Fv)return gh;Fv=1;var e=LS();gh=n;function n(i){return e(i).filter(function(l){return l.length>1||l.length===1&&i.hasEdge(l[0],l[0])})}return gh}var yh,Qv;function pj(){if(Qv)return yh;Qv=1,yh=n;var e=()=>1;function n(l,o,s){return i(l,o||e,s||function(u){return l.outEdges(u)})}function i(l,o,s){var u={},f=l.nodes();return f.forEach(function(d){u[d]={},u[d][d]={distance:0},f.forEach(function(h){d!==h&&(u[d][h]={distance:Number.POSITIVE_INFINITY})}),s(d).forEach(function(h){var m=h.v===d?h.w:h.v,p=o(h);u[d][m]={distance:p,predecessor:d}})}),f.forEach(function(d){var h=u[d];f.forEach(function(m){var p=u[m];f.forEach(function(y){var v=p[d],w=h[y],k=p[y],S=v.distance+w.distance;So.successors(p):p=>o.neighbors(p),d=u==="post"?n:i,h=[],m={};return s.forEach(p=>{if(!o.hasNode(p))throw new Error("Graph does not have node: "+p);d(p,f,m,h)}),h}function n(o,s,u,f){for(var d=[[o,!1]];d.length>0;){var h=d.pop();h[1]?f.push(h[0]):Object.hasOwn(u,h[0])||(u[h[0]]=!0,d.push([h[0],!0]),l(s(h[0]),m=>d.push([m,!1])))}}function i(o,s,u,f){for(var d=[o];d.length>0;){var h=d.pop();Object.hasOwn(u,h)||(u[h]=!0,f.push(h),l(s(h),m=>d.push(m)))}}function l(o,s){for(var u=o.length;u--;)s(o[u],u,o);return o}return bh}var wh,Wv;function gj(){if(Wv)return wh;Wv=1;var e=BS();wh=n;function n(i,l){return e(i,l,"post")}return wh}var Sh,e1;function yj(){if(e1)return Sh;e1=1;var e=BS();Sh=n;function n(i,l){return e(i,l,"pre")}return Sh}var _h,t1;function xj(){if(t1)return _h;t1=1;var e=fm(),n=RS();_h=i;function i(l,o){var s=new e,u={},f=new n,d;function h(p){var y=p.v===d?p.w:p.v,v=f.priority(y);if(v!==void 0){var w=o(p);w0;){if(d=f.removeMin(),Object.hasOwn(u,d))s.setEdge(d,u[d]);else{if(m)throw new Error("Input graph is not connected: "+l);m=!0}l.nodeEdges(d).forEach(h)}return s}return _h}var Eh,n1;function vj(){return n1||(n1=1,Eh={components:fj(),dijkstra:DS(),dijkstraAll:dj(),findCycles:hj(),floydWarshall:pj(),isAcyclic:mj(),postorder:gj(),preorder:yj(),prim:xj(),tarjan:LS(),topsort:HS()}),Eh}var Nh,r1;function Vn(){if(r1)return Nh;r1=1;var e=uj();return Nh={Graph:e.Graph,json:cj(),alg:vj(),version:e.version},Nh}var kh,i1;function bj(){if(i1)return kh;i1=1;class e{constructor(){let o={};o._next=o._prev=o,this._sentinel=o}dequeue(){let o=this._sentinel,s=o._prev;if(s!==o)return n(s),s}enqueue(o){let s=this._sentinel;o._prev&&o._next&&n(o),o._next=s._next,s._next._prev=o,s._next=o,o._prev=s}toString(){let o=[],s=this._sentinel,u=s._prev;for(;u!==s;)o.push(JSON.stringify(u,i)),u=u._prev;return"["+o.join(", ")+"]"}}function n(l){l._prev._next=l._next,l._next._prev=l._prev,delete l._next,delete l._prev}function i(l,o){if(l!=="_next"&&l!=="_prev")return o}return kh=e,kh}var Ch,l1;function wj(){if(l1)return Ch;l1=1;let e=Vn().Graph,n=bj();Ch=l;let i=()=>1;function l(h,m){if(h.nodeCount()<=1)return[];let p=u(h,m||i);return o(p.graph,p.buckets,p.zeroIdx).flatMap(v=>h.outEdges(v.v,v.w))}function o(h,m,p){let y=[],v=m[m.length-1],w=m[0],k;for(;h.nodeCount();){for(;k=w.dequeue();)s(h,m,p,k);for(;k=v.dequeue();)s(h,m,p,k);if(h.nodeCount()){for(let S=m.length-2;S>0;--S)if(k=m[S].dequeue(),k){y=y.concat(s(h,m,p,k,!0));break}}}return y}function s(h,m,p,y,v){let w=v?[]:void 0;return h.inEdges(y.v).forEach(k=>{let S=h.edge(k),_=h.node(k.v);v&&w.push({v:k.v,w:k.w}),_.out-=S,f(m,p,_)}),h.outEdges(y.v).forEach(k=>{let S=h.edge(k),_=k.w,z=h.node(_);z.in-=S,f(m,p,z)}),h.removeNode(y.v),w}function u(h,m){let p=new e,y=0,v=0;h.nodes().forEach(S=>{p.setNode(S,{v:S,in:0,out:0})}),h.edges().forEach(S=>{let _=p.edge(S.v,S.w)||0,z=m(S),E=_+z;p.setEdge(S.v,S.w,E),v=Math.max(v,p.node(S.v).out+=z),y=Math.max(y,p.node(S.w).in+=z)});let w=d(v+y+3).map(()=>new n),k=y+1;return p.nodes().forEach(S=>{f(w,k,p.node(S))}),{graph:p,buckets:w,zeroIdx:k}}function f(h,m,p){p.out?p.in?h[p.out-p.in+m].enqueue(p):h[h.length-1].enqueue(p):h[0].enqueue(p)}function d(h){const m=[];for(let p=0;pD.setNode(X,M.node(X))),M.edges().forEach(X=>{let H=D.edge(X.v,X.w)||{weight:0,minlen:1},I=M.edge(X);D.setEdge(X.v,X.w,{weight:H.weight+I.weight,minlen:Math.max(H.minlen,I.minlen)})}),D}function l(M){let D=new e({multigraph:M.isMultigraph()}).setGraph(M.graph());return M.nodes().forEach(X=>{M.children(X).length||D.setNode(X,M.node(X))}),M.edges().forEach(X=>{D.setEdge(X,M.edge(X))}),D}function o(M){let D=M.nodes().map(X=>{let H={};return M.outEdges(X).forEach(I=>{H[I.w]=(H[I.w]||0)+M.edge(I).weight}),H});return q(M.nodes(),D)}function s(M){let D=M.nodes().map(X=>{let H={};return M.inEdges(X).forEach(I=>{H[I.v]=(H[I.v]||0)+M.edge(I).weight}),H});return q(M.nodes(),D)}function u(M,D){let X=M.x,H=M.y,I=D.x-X,ee=D.y-H,L=M.width/2,G=M.height/2;if(!I&&!ee)throw new Error("Not possible to find intersection inside of the rectangle");let R,$;return Math.abs(ee)*L>Math.abs(I)*G?(ee<0&&(G=-G),R=G*I/ee,$=G):(I<0&&(L=-L),R=L,$=L*ee/I),{x:X+R,y:H+$}}function f(M){let D=A(w(M)+1).map(()=>[]);return M.nodes().forEach(X=>{let H=M.node(X),I=H.rank;I!==void 0&&(D[I][H.order]=X)}),D}function d(M){let D=M.nodes().map(H=>{let I=M.node(H).rank;return I===void 0?Number.MAX_VALUE:I}),X=v(Math.min,D);M.nodes().forEach(H=>{let I=M.node(H);Object.hasOwn(I,"rank")&&(I.rank-=X)})}function h(M){let D=M.nodes().map(L=>M.node(L).rank),X=v(Math.min,D),H=[];M.nodes().forEach(L=>{let G=M.node(L).rank-X;H[G]||(H[G]=[]),H[G].push(L)});let I=0,ee=M.graph().nodeRankFactor;Array.from(H).forEach((L,G)=>{L===void 0&&G%ee!==0?--I:L!==void 0&&I&&L.forEach(R=>M.node(R).rank+=I)})}function m(M,D,X,H){let I={width:0,height:0};return arguments.length>=4&&(I.rank=X,I.order=H),n(M,"border",I,D)}function p(M,D=y){const X=[];for(let H=0;Hy){const X=p(D);return M.apply(null,X.map(H=>M.apply(null,H)))}else return M.apply(null,D)}function w(M){const X=M.nodes().map(H=>{let I=M.node(H).rank;return I===void 0?Number.MIN_VALUE:I});return v(Math.max,X)}function k(M,D){let X={lhs:[],rhs:[]};return M.forEach(H=>{D(H)?X.lhs.push(H):X.rhs.push(H)}),X}function S(M,D){let X=Date.now();try{return D()}finally{console.log(M+" time: "+(Date.now()-X)+"ms")}}function _(M,D){return D()}let z=0;function E(M){var D=++z;return M+(""+D)}function A(M,D,X=1){D==null&&(D=M,M=0);let H=ee=>eeDH[D]),Object.entries(M).reduce((H,[I,ee])=>(H[I]=X(ee,I),H),{})}function q(M,D){return M.reduce((X,H,I)=>(X[H]=D[I],X),{})}return Th}var zh,o1;function Sj(){if(o1)return zh;o1=1;let e=wj(),n=Ct().uniqueId;zh={run:i,undo:o};function i(s){(s.graph().acyclicer==="greedy"?e(s,f(s)):l(s)).forEach(d=>{let h=s.edge(d);s.removeEdge(d),h.forwardName=d.name,h.reversed=!0,s.setEdge(d.w,d.v,h,n("rev"))});function f(d){return h=>d.edge(h).weight}}function l(s){let u=[],f={},d={};function h(m){Object.hasOwn(d,m)||(d[m]=!0,f[m]=!0,s.outEdges(m).forEach(p=>{Object.hasOwn(f,p.w)?u.push(p):h(p.w)}),delete f[m])}return s.nodes().forEach(h),u}function o(s){s.edges().forEach(u=>{let f=s.edge(u);if(f.reversed){s.removeEdge(u);let d=f.forwardName;delete f.reversed,delete f.forwardName,s.setEdge(u.w,u.v,f,d)}})}return zh}var Ah,s1;function _j(){if(s1)return Ah;s1=1;let e=Ct();Ah={run:n,undo:l};function n(o){o.graph().dummyChains=[],o.edges().forEach(s=>i(o,s))}function i(o,s){let u=s.v,f=o.node(u).rank,d=s.w,h=o.node(d).rank,m=s.name,p=o.edge(s),y=p.labelRank;if(h===f+1)return;o.removeEdge(s);let v,w,k;for(k=0,++f;f{let u=o.node(s),f=u.edgeLabel,d;for(o.setEdge(u.edgeObj,f);u.dummy;)d=o.successors(s)[0],o.removeNode(s),f.points.push({x:u.x,y:u.y}),u.dummy==="edge-label"&&(f.x=u.x,f.y=u.y,f.width=u.width,f.height=u.height),s=d,u=o.node(s)})}return Ah}var Mh,u1;function rc(){if(u1)return Mh;u1=1;const{applyWithChunking:e}=Ct();Mh={longestPath:n,slack:i};function n(l){var o={};function s(u){var f=l.node(u);if(Object.hasOwn(o,u))return f.rank;o[u]=!0;let d=l.outEdges(u).map(m=>m==null?Number.POSITIVE_INFINITY:s(m.w)-l.edge(m).minlen);var h=e(Math.min,d);return h===Number.POSITIVE_INFINITY&&(h=0),f.rank=h}l.sources().forEach(s)}function i(l,o){return l.node(o.w).rank-l.node(o.v).rank-l.edge(o).minlen}return Mh}var jh,c1;function qS(){if(c1)return jh;c1=1;var e=Vn().Graph,n=rc().slack;jh=i;function i(u){var f=new e({directed:!1}),d=u.nodes()[0],h=u.nodeCount();f.setNode(d,{});for(var m,p;l(f,u){var p=m.v,y=h===p?m.w:p;!u.hasNode(y)&&!n(f,m)&&(u.setNode(y,{}),u.setEdge(h,y,{}),d(y))})}return u.nodes().forEach(d),u.nodeCount()}function o(u,f){return f.edges().reduce((h,m)=>{let p=Number.POSITIVE_INFINITY;return u.hasNode(m.v)!==u.hasNode(m.w)&&(p=n(f,m)),pf.node(h).rank+=d)}return jh}var Oh,f1;function Ej(){if(f1)return Oh;f1=1;var e=qS(),n=rc().slack,i=rc().longestPath,l=Vn().alg.preorder,o=Vn().alg.postorder,s=Ct().simplify;Oh=u,u.initLowLimValues=m,u.initCutValues=f,u.calcCutValue=h,u.leaveEdge=y,u.enterEdge=v,u.exchangeEdges=w;function u(z){z=s(z),i(z);var E=e(z);m(E),f(E,z);for(var A,B;A=y(E);)B=v(E,z,A),w(E,z,A,B)}function f(z,E){var A=o(z,z.nodes());A=A.slice(0,A.length-1),A.forEach(B=>d(z,E,B))}function d(z,E,A){var B=z.node(A),T=B.parent;z.edge(A,T).cutvalue=h(z,E,A)}function h(z,E,A){var B=z.node(A),T=B.parent,q=!0,M=E.edge(A,T),D=0;return M||(q=!1,M=E.edge(T,A)),D=M.weight,E.nodeEdges(A).forEach(X=>{var H=X.v===A,I=H?X.w:X.v;if(I!==T){var ee=H===q,L=E.edge(X).weight;if(D+=ee?L:-L,S(z,A,I)){var G=z.edge(A,I).cutvalue;D+=ee?-G:G}}}),D}function m(z,E){arguments.length<2&&(E=z.nodes()[0]),p(z,{},1,E)}function p(z,E,A,B,T){var q=A,M=z.node(B);return E[B]=!0,z.neighbors(B).forEach(D=>{Object.hasOwn(E,D)||(A=p(z,E,A,D,B))}),M.low=q,M.lim=A++,T?M.parent=T:delete M.parent,A}function y(z){return z.edges().find(E=>z.edge(E).cutvalue<0)}function v(z,E,A){var B=A.v,T=A.w;E.hasEdge(B,T)||(B=A.w,T=A.v);var q=z.node(B),M=z.node(T),D=q,X=!1;q.lim>M.lim&&(D=M,X=!0);var H=E.edges().filter(I=>X===_(z,z.node(I.v),D)&&X!==_(z,z.node(I.w),D));return H.reduce((I,ee)=>n(E,ee)!E.node(T).parent),B=l(z,A);B=B.slice(1),B.forEach(T=>{var q=z.node(T).parent,M=E.edge(T,q),D=!1;M||(M=E.edge(q,T),D=!0),E.node(T).rank=E.node(q).rank+(D?M.minlen:-M.minlen)})}function S(z,E,A){return z.hasEdge(E,A)}function _(z,E,A){return A.low<=E.lim&&E.lim<=A.lim}return Oh}var Rh,d1;function Nj(){if(d1)return Rh;d1=1;var e=rc(),n=e.longestPath,i=qS(),l=Ej();Rh=o;function o(d){var h=d.graph().ranker;if(h instanceof Function)return h(d);switch(d.graph().ranker){case"network-simplex":f(d);break;case"tight-tree":u(d);break;case"longest-path":s(d);break;case"none":break;default:f(d)}}var s=n;function u(d){n(d),i(d)}function f(d){l(d)}return Rh}var Dh,h1;function kj(){if(h1)return Dh;h1=1,Dh=e;function e(l){let o=i(l);l.graph().dummyChains.forEach(s=>{let u=l.node(s),f=u.edgeObj,d=n(l,o,f.v,f.w),h=d.path,m=d.lca,p=0,y=h[p],v=!0;for(;s!==f.w;){if(u=l.node(s),v){for(;(y=h[p])!==m&&l.node(y).maxRankh||m>o[p].lim));for(y=p,p=u;(p=l.parent(p))!==y;)d.push(p);return{path:f.concat(d.reverse()),lca:y}}function i(l){let o={},s=0;function u(f){let d=s;l.children(f).forEach(u),o[f]={low:d,lim:s++}}return l.children().forEach(u),o}return Dh}var Lh,p1;function Cj(){if(p1)return Lh;p1=1;let e=Ct();Lh={run:n,cleanup:s};function n(u){let f=e.addDummyNode(u,"root",{},"_root"),d=l(u),h=Object.values(d),m=e.applyWithChunking(Math.max,h)-1,p=2*m+1;u.graph().nestingRoot=f,u.edges().forEach(v=>u.edge(v).minlen*=p);let y=o(u)+1;u.children().forEach(v=>i(u,f,p,y,m,d,v)),u.graph().nodeRankFactor=p}function i(u,f,d,h,m,p,y){let v=u.children(y);if(!v.length){y!==f&&u.setEdge(f,y,{weight:0,minlen:d});return}let w=e.addBorderNode(u,"_bt"),k=e.addBorderNode(u,"_bb"),S=u.node(y);u.setParent(w,y),S.borderTop=w,u.setParent(k,y),S.borderBottom=k,v.forEach(_=>{i(u,f,d,h,m,p,_);let z=u.node(_),E=z.borderTop?z.borderTop:_,A=z.borderBottom?z.borderBottom:_,B=z.borderTop?h:2*h,T=E!==A?1:m-p[y]+1;u.setEdge(w,E,{weight:B,minlen:T,nestingEdge:!0}),u.setEdge(A,k,{weight:B,minlen:T,nestingEdge:!0})}),u.parent(y)||u.setEdge(f,w,{weight:0,minlen:m+p[y]})}function l(u){var f={};function d(h,m){var p=u.children(h);p&&p.length&&p.forEach(y=>d(y,m+1)),f[h]=m}return u.children().forEach(h=>d(h,1)),f}function o(u){return u.edges().reduce((f,d)=>f+u.edge(d).weight,0)}function s(u){var f=u.graph();u.removeNode(f.nestingRoot),delete f.nestingRoot,u.edges().forEach(d=>{var h=u.edge(d);h.nestingEdge&&u.removeEdge(d)})}return Lh}var Hh,m1;function Tj(){if(m1)return Hh;m1=1;let e=Ct();Hh=n;function n(l){function o(s){let u=l.children(s),f=l.node(s);if(u.length&&u.forEach(o),Object.hasOwn(f,"minRank")){f.borderLeft=[],f.borderRight=[];for(let d=f.minRank,h=f.maxRank+1;dl(d.node(h))),d.edges().forEach(h=>l(d.edge(h)))}function l(d){let h=d.width;d.width=d.height,d.height=h}function o(d){d.nodes().forEach(h=>s(d.node(h))),d.edges().forEach(h=>{let m=d.edge(h);m.points.forEach(s),Object.hasOwn(m,"y")&&s(m)})}function s(d){d.y=-d.y}function u(d){d.nodes().forEach(h=>f(d.node(h))),d.edges().forEach(h=>{let m=d.edge(h);m.points.forEach(f),Object.hasOwn(m,"x")&&f(m)})}function f(d){let h=d.x;d.x=d.y,d.y=h}return Bh}var qh,y1;function Aj(){if(y1)return qh;y1=1;let e=Ct();qh=n;function n(i){let l={},o=i.nodes().filter(m=>!i.children(m).length),s=o.map(m=>i.node(m).rank),u=e.applyWithChunking(Math.max,s),f=e.range(u+1).map(()=>[]);function d(m){if(l[m])return;l[m]=!0;let p=i.node(m);f[p.rank].push(m),i.successors(m).forEach(d)}return o.sort((m,p)=>i.node(m).rank-i.node(p).rank).forEach(d),f}return qh}var Uh,x1;function Mj(){if(x1)return Uh;x1=1;let e=Ct().zipObject;Uh=n;function n(l,o){let s=0;for(let u=1;uv)),f=o.flatMap(y=>l.outEdges(y).map(v=>({pos:u[v.w],weight:l.edge(v).weight})).sort((v,w)=>v.pos-w.pos)),d=1;for(;d{let v=y.pos+d;m[v]+=y.weight;let w=0;for(;v>0;)v%2&&(w+=m[v+1]),v=v-1>>1,m[v]+=y.weight;p+=y.weight*w}),p}return Uh}var Ih,v1;function jj(){if(v1)return Ih;v1=1,Ih=e;function e(n,i=[]){return i.map(l=>{let o=n.inEdges(l);if(o.length){let s=o.reduce((u,f)=>{let d=n.edge(f),h=n.node(f.v);return{sum:u.sum+d.weight*h.order,weight:u.weight+d.weight}},{sum:0,weight:0});return{v:l,barycenter:s.sum/s.weight,weight:s.weight}}else return{v:l}})}return Ih}var Vh,b1;function Oj(){if(b1)return Vh;b1=1;let e=Ct();Vh=n;function n(o,s){let u={};o.forEach((d,h)=>{let m=u[d.v]={indegree:0,in:[],out:[],vs:[d.v],i:h};d.barycenter!==void 0&&(m.barycenter=d.barycenter,m.weight=d.weight)}),s.edges().forEach(d=>{let h=u[d.v],m=u[d.w];h!==void 0&&m!==void 0&&(m.indegree++,h.out.push(u[d.w]))});let f=Object.values(u).filter(d=>!d.indegree);return i(f)}function i(o){let s=[];function u(d){return h=>{h.merged||(h.barycenter===void 0||d.barycenter===void 0||h.barycenter>=d.barycenter)&&l(d,h)}}function f(d){return h=>{h.in.push(d),--h.indegree===0&&o.push(h)}}for(;o.length;){let d=o.pop();s.push(d),d.in.reverse().forEach(u(d)),d.out.forEach(f(d))}return s.filter(d=>!d.merged).map(d=>e.pick(d,["vs","i","barycenter","weight"]))}function l(o,s){let u=0,f=0;o.weight&&(u+=o.barycenter*o.weight,f+=o.weight),s.weight&&(u+=s.barycenter*s.weight,f+=s.weight),o.vs=s.vs.concat(o.vs),o.barycenter=u/f,o.weight=f,o.i=Math.min(s.i,o.i),s.merged=!0}return Vh}var Yh,w1;function Rj(){if(w1)return Yh;w1=1;let e=Ct();Yh=n;function n(o,s){let u=e.partition(o,w=>Object.hasOwn(w,"barycenter")),f=u.lhs,d=u.rhs.sort((w,k)=>k.i-w.i),h=[],m=0,p=0,y=0;f.sort(l(!!s)),y=i(h,d,y),f.forEach(w=>{y+=w.vs.length,h.push(w.vs),m+=w.barycenter*w.weight,p+=w.weight,y=i(h,d,y)});let v={vs:h.flat(!0)};return p&&(v.barycenter=m/p,v.weight=p),v}function i(o,s,u){let f;for(;s.length&&(f=s[s.length-1]).i<=u;)s.pop(),o.push(f.vs),u++;return u}function l(o){return(s,u)=>s.barycenteru.barycenter?1:o?u.i-s.i:s.i-u.i}return Yh}var Gh,S1;function Dj(){if(S1)return Gh;S1=1;let e=jj(),n=Oj(),i=Rj();Gh=l;function l(u,f,d,h){let m=u.children(f),p=u.node(f),y=p?p.borderLeft:void 0,v=p?p.borderRight:void 0,w={};y&&(m=m.filter(z=>z!==y&&z!==v));let k=e(u,m);k.forEach(z=>{if(u.children(z.v).length){let E=l(u,z.v,d,h);w[z.v]=E,Object.hasOwn(E,"barycenter")&&s(z,E)}});let S=n(k,d);o(S,w);let _=i(S,h);if(y&&(_.vs=[y,_.vs,v].flat(!0),u.predecessors(y).length)){let z=u.node(u.predecessors(y)[0]),E=u.node(u.predecessors(v)[0]);Object.hasOwn(_,"barycenter")||(_.barycenter=0,_.weight=0),_.barycenter=(_.barycenter*_.weight+z.order+E.order)/(_.weight+2),_.weight+=2}return _}function o(u,f){u.forEach(d=>{d.vs=d.vs.flatMap(h=>f[h]?f[h].vs:h)})}function s(u,f){u.barycenter!==void 0?(u.barycenter=(u.barycenter*u.weight+f.barycenter*f.weight)/(u.weight+f.weight),u.weight+=f.weight):(u.barycenter=f.barycenter,u.weight=f.weight)}return Gh}var $h,_1;function Lj(){if(_1)return $h;_1=1;let e=Vn().Graph,n=Ct();$h=i;function i(o,s,u,f){f||(f=o.nodes());let d=l(o),h=new e({compound:!0}).setGraph({root:d}).setDefaultNodeLabel(m=>o.node(m));return f.forEach(m=>{let p=o.node(m),y=o.parent(m);(p.rank===s||p.minRank<=s&&s<=p.maxRank)&&(h.setNode(m),h.setParent(m,y||d),o[u](m).forEach(v=>{let w=v.v===m?v.w:v.v,k=h.edge(w,m),S=k!==void 0?k.weight:0;h.setEdge(w,m,{weight:o.edge(v).weight+S})}),Object.hasOwn(p,"minRank")&&h.setNode(m,{borderLeft:p.borderLeft[s],borderRight:p.borderRight[s]}))}),h}function l(o){for(var s;o.hasNode(s=n.uniqueId("_root")););return s}return $h}var Xh,E1;function Hj(){if(E1)return Xh;E1=1,Xh=e;function e(n,i,l){let o={},s;l.forEach(u=>{let f=n.parent(u),d,h;for(;f;){if(d=n.parent(f),d?(h=o[d],o[d]=f):(h=s,s=f),h&&h!==f){i.setEdge(h,f);return}f=d}})}return Xh}var Ph,N1;function Bj(){if(N1)return Ph;N1=1;let e=Aj(),n=Mj(),i=Dj(),l=Lj(),o=Hj(),s=Vn().Graph,u=Ct();Ph=f;function f(p,y){if(y&&typeof y.customOrder=="function"){y.customOrder(p,f);return}let v=u.maxRank(p),w=d(p,u.range(1,v+1),"inEdges"),k=d(p,u.range(v-1,-1,-1),"outEdges"),S=e(p);if(m(p,S),y&&y.disableOptimalOrderHeuristic)return;let _=Number.POSITIVE_INFINITY,z;for(let E=0,A=0;A<4;++E,++A){h(E%2?w:k,E%4>=2),S=u.buildLayerMatrix(p);let B=n(p,S);B<_&&(A=0,z=Object.assign({},S),_=B)}m(p,z)}function d(p,y,v){const w=new Map,k=(S,_)=>{w.has(S)||w.set(S,[]),w.get(S).push(_)};for(const S of p.nodes()){const _=p.node(S);if(typeof _.rank=="number"&&k(_.rank,S),typeof _.minRank=="number"&&typeof _.maxRank=="number")for(let z=_.minRank;z<=_.maxRank;z++)z!==_.rank&&k(z,S)}return y.map(function(S){return l(p,S,v,w.get(S)||[])})}function h(p,y){let v=new s;p.forEach(function(w){let k=w.graph().root,S=i(w,k,v,y);S.vs.forEach((_,z)=>w.node(_).order=z),o(w,v,S.vs)})}function m(p,y){Object.values(y).forEach(v=>v.forEach((w,k)=>p.node(w).order=k))}return Ph}var Fh,k1;function qj(){if(k1)return Fh;k1=1;let e=Vn().Graph,n=Ct();Fh={positionX:v,findType1Conflicts:i,findType2Conflicts:l,addConflict:s,hasConflict:u,verticalAlignment:f,horizontalCompaction:d,alignCoordinates:p,findSmallestWidthAlignment:m,balance:y};function i(S,_){let z={};function E(A,B){let T=0,q=0,M=A.length,D=B[B.length-1];return B.forEach((X,H)=>{let I=o(S,X),ee=I?S.node(I).order:M;(I||X===D)&&(B.slice(q,H+1).forEach(L=>{S.predecessors(L).forEach(G=>{let R=S.node(G),$=R.order;(${X=B[H],S.node(X).dummy&&S.predecessors(X).forEach(I=>{let ee=S.node(I);ee.dummy&&(ee.orderD)&&s(z,I,X)})})}function A(B,T){let q=-1,M,D=0;return T.forEach((X,H)=>{if(S.node(X).dummy==="border"){let I=S.predecessors(X);I.length&&(M=S.node(I[0]).order,E(T,D,H,q,M),D=H,q=M)}E(T,D,T.length,M,B.length)}),T}return _.length&&_.reduce(A),z}function o(S,_){if(S.node(_).dummy)return S.predecessors(_).find(z=>S.node(z).dummy)}function s(S,_,z){if(_>z){let A=_;_=z,z=A}let E=S[_];E||(S[_]=E={}),E[z]=!0}function u(S,_,z){if(_>z){let E=_;_=z,z=E}return!!S[_]&&Object.hasOwn(S[_],z)}function f(S,_,z,E){let A={},B={},T={};return _.forEach(q=>{q.forEach((M,D)=>{A[M]=M,B[M]=M,T[M]=D})}),_.forEach(q=>{let M=-1;q.forEach(D=>{let X=E(D);if(X.length){X=X.sort((I,ee)=>T[I]-T[ee]);let H=(X.length-1)/2;for(let I=Math.floor(H),ee=Math.ceil(H);I<=ee;++I){let L=X[I];B[D]===D&&MMath.max(I,B[ee.v]+T.edge(ee)),0)}function X(H){let I=T.outEdges(H).reduce((L,G)=>Math.min(L,B[G.w]-T.edge(G)),Number.POSITIVE_INFINITY),ee=S.node(H);I!==Number.POSITIVE_INFINITY&&ee.borderType!==q&&(B[H]=Math.max(B[H],I))}return M(D,T.predecessors.bind(T)),M(X,T.successors.bind(T)),Object.keys(E).forEach(H=>B[H]=B[z[H]]),B}function h(S,_,z,E){let A=new e,B=S.graph(),T=w(B.nodesep,B.edgesep,E);return _.forEach(q=>{let M;q.forEach(D=>{let X=z[D];if(A.setNode(X),M){var H=z[M],I=A.edge(H,X);A.setEdge(H,X,Math.max(T(S,D,M),I||0))}M=D})}),A}function m(S,_){return Object.values(_).reduce((z,E)=>{let A=Number.NEGATIVE_INFINITY,B=Number.POSITIVE_INFINITY;Object.entries(E).forEach(([q,M])=>{let D=k(S,q)/2;A=Math.max(M+D,A),B=Math.min(M-D,B)});const T=A-B;return T{["l","r"].forEach(T=>{let q=B+T,M=S[q];if(M===_)return;let D=Object.values(M),X=E-n.applyWithChunking(Math.min,D);T!=="l"&&(X=A-n.applyWithChunking(Math.max,D)),X&&(S[q]=n.mapValues(M,H=>H+X))})})}function y(S,_){return n.mapValues(S.ul,(z,E)=>{if(_)return S[_.toLowerCase()][E];{let A=Object.values(S).map(B=>B[E]).sort((B,T)=>B-T);return(A[1]+A[2])/2}})}function v(S){let _=n.buildLayerMatrix(S),z=Object.assign(i(S,_),l(S,_)),E={},A;["u","d"].forEach(T=>{A=T==="u"?_:Object.values(_).reverse(),["l","r"].forEach(q=>{q==="r"&&(A=A.map(H=>Object.values(H).reverse()));let M=(T==="u"?S.predecessors:S.successors).bind(S),D=f(S,A,z,M),X=d(S,A,D.root,D.align,q==="r");q==="r"&&(X=n.mapValues(X,H=>-H)),E[T+q]=X})});let B=m(S,E);return p(E,B),y(E,S.graph().align)}function w(S,_,z){return(E,A,B)=>{let T=E.node(A),q=E.node(B),M=0,D;if(M+=T.width/2,Object.hasOwn(T,"labelpos"))switch(T.labelpos.toLowerCase()){case"l":D=-T.width/2;break;case"r":D=T.width/2;break}if(D&&(M+=z?D:-D),D=0,M+=(T.dummy?_:S)/2,M+=(q.dummy?_:S)/2,M+=q.width/2,Object.hasOwn(q,"labelpos"))switch(q.labelpos.toLowerCase()){case"l":D=q.width/2;break;case"r":D=-q.width/2;break}return D&&(M+=z?D:-D),D=0,M}}function k(S,_){return S.node(_).width}return Fh}var Qh,C1;function Uj(){if(C1)return Qh;C1=1;let e=Ct(),n=qj().positionX;Qh=i;function i(o){o=e.asNonCompoundGraph(o),l(o),Object.entries(n(o)).forEach(([s,u])=>o.node(s).x=u)}function l(o){let s=e.buildLayerMatrix(o),u=o.graph().ranksep,f=0;s.forEach(d=>{const h=d.reduce((m,p)=>{const y=o.node(p).height;return m>y?m:y},0);d.forEach(m=>o.node(m).y=f+h/2),f+=h+u})}return Qh}var Zh,T1;function Ij(){if(T1)return Zh;T1=1;let e=Sj(),n=_j(),i=Nj(),l=Ct().normalizeRanks,o=kj(),s=Ct().removeEmptyRanks,u=Cj(),f=Tj(),d=zj(),h=Bj(),m=Uj(),p=Ct(),y=Vn().Graph;Zh=v;function v(N,Y){let F=Y&&Y.debugTiming?p.time:p.notime;F("layout",()=>{let K=F(" buildLayoutGraph",()=>M(N));F(" runLayout",()=>w(K,F,Y)),F(" updateInputGraph",()=>k(N,K))})}function w(N,Y,F){Y(" makeSpaceForEdgeLabels",()=>D(N)),Y(" removeSelfEdges",()=>Z(N)),Y(" acyclic",()=>e.run(N)),Y(" nestingGraph.run",()=>u.run(N)),Y(" rank",()=>i(p.asNonCompoundGraph(N))),Y(" injectEdgeLabelProxies",()=>X(N)),Y(" removeEmptyRanks",()=>s(N)),Y(" nestingGraph.cleanup",()=>u.cleanup(N)),Y(" normalizeRanks",()=>l(N)),Y(" assignRankMinMax",()=>H(N)),Y(" removeEdgeLabelProxies",()=>I(N)),Y(" normalize.run",()=>n.run(N)),Y(" parentDummyChains",()=>o(N)),Y(" addBorderSegments",()=>f(N)),Y(" order",()=>h(N,F)),Y(" insertSelfEdges",()=>J(N)),Y(" adjustCoordinateSystem",()=>d.adjust(N)),Y(" position",()=>m(N)),Y(" positionSelfEdges",()=>j(N)),Y(" removeBorderNodes",()=>$(N)),Y(" normalize.undo",()=>n.undo(N)),Y(" fixupEdgeLabelCoords",()=>G(N)),Y(" undoCoordinateSystem",()=>d.undo(N)),Y(" translateGraph",()=>ee(N)),Y(" assignNodeIntersects",()=>L(N)),Y(" reversePoints",()=>R(N)),Y(" acyclic.undo",()=>e.undo(N))}function k(N,Y){N.nodes().forEach(F=>{let K=N.node(F),ne=Y.node(F);K&&(K.x=ne.x,K.y=ne.y,K.rank=ne.rank,Y.children(F).length&&(K.width=ne.width,K.height=ne.height))}),N.edges().forEach(F=>{let K=N.edge(F),ne=Y.edge(F);K.points=ne.points,Object.hasOwn(ne,"x")&&(K.x=ne.x,K.y=ne.y)}),N.graph().width=Y.graph().width,N.graph().height=Y.graph().height}let S=["nodesep","edgesep","ranksep","marginx","marginy"],_={ranksep:50,edgesep:20,nodesep:50,rankdir:"tb"},z=["acyclicer","ranker","rankdir","align"],E=["width","height","rank"],A={width:0,height:0},B=["minlen","weight","width","height","labeloffset"],T={minlen:1,weight:1,width:0,height:0,labeloffset:10,labelpos:"r"},q=["labelpos"];function M(N){let Y=new y({multigraph:!0,compound:!0}),F=P(N.graph());return Y.setGraph(Object.assign({},_,U(F,S),p.pick(F,z))),N.nodes().forEach(K=>{let ne=P(N.node(K));const re=U(ne,E);Object.keys(A).forEach(se=>{re[se]===void 0&&(re[se]=A[se])}),Y.setNode(K,re),Y.setParent(K,N.parent(K))}),N.edges().forEach(K=>{let ne=P(N.edge(K));Y.setEdge(K,Object.assign({},T,U(ne,B),p.pick(ne,q)))}),Y}function D(N){let Y=N.graph();Y.ranksep/=2,N.edges().forEach(F=>{let K=N.edge(F);K.minlen*=2,K.labelpos.toLowerCase()!=="c"&&(Y.rankdir==="TB"||Y.rankdir==="BT"?K.width+=K.labeloffset:K.height+=K.labeloffset)})}function X(N){N.edges().forEach(Y=>{let F=N.edge(Y);if(F.width&&F.height){let K=N.node(Y.v),re={rank:(N.node(Y.w).rank-K.rank)/2+K.rank,e:Y};p.addDummyNode(N,"edge-proxy",re,"_ep")}})}function H(N){let Y=0;N.nodes().forEach(F=>{let K=N.node(F);K.borderTop&&(K.minRank=N.node(K.borderTop).rank,K.maxRank=N.node(K.borderBottom).rank,Y=Math.max(Y,K.maxRank))}),N.graph().maxRank=Y}function I(N){N.nodes().forEach(Y=>{let F=N.node(Y);F.dummy==="edge-proxy"&&(N.edge(F.e).labelRank=F.rank,N.removeNode(Y))})}function ee(N){let Y=Number.POSITIVE_INFINITY,F=0,K=Number.POSITIVE_INFINITY,ne=0,re=N.graph(),se=re.marginx||0,ye=re.marginy||0;function ve(xe){let pe=xe.x,_e=xe.y,Me=xe.width,Ce=xe.height;Y=Math.min(Y,pe-Me/2),F=Math.max(F,pe+Me/2),K=Math.min(K,_e-Ce/2),ne=Math.max(ne,_e+Ce/2)}N.nodes().forEach(xe=>ve(N.node(xe))),N.edges().forEach(xe=>{let pe=N.edge(xe);Object.hasOwn(pe,"x")&&ve(pe)}),Y-=se,K-=ye,N.nodes().forEach(xe=>{let pe=N.node(xe);pe.x-=Y,pe.y-=K}),N.edges().forEach(xe=>{let pe=N.edge(xe);pe.points.forEach(_e=>{_e.x-=Y,_e.y-=K}),Object.hasOwn(pe,"x")&&(pe.x-=Y),Object.hasOwn(pe,"y")&&(pe.y-=K)}),re.width=F-Y+se,re.height=ne-K+ye}function L(N){N.edges().forEach(Y=>{let F=N.edge(Y),K=N.node(Y.v),ne=N.node(Y.w),re,se;F.points?(re=F.points[0],se=F.points[F.points.length-1]):(F.points=[],re=ne,se=K),F.points.unshift(p.intersectRect(K,re)),F.points.push(p.intersectRect(ne,se))})}function G(N){N.edges().forEach(Y=>{let F=N.edge(Y);if(Object.hasOwn(F,"x"))switch((F.labelpos==="l"||F.labelpos==="r")&&(F.width-=F.labeloffset),F.labelpos){case"l":F.x-=F.width/2+F.labeloffset;break;case"r":F.x+=F.width/2+F.labeloffset;break}})}function R(N){N.edges().forEach(Y=>{let F=N.edge(Y);F.reversed&&F.points.reverse()})}function $(N){N.nodes().forEach(Y=>{if(N.children(Y).length){let F=N.node(Y),K=N.node(F.borderTop),ne=N.node(F.borderBottom),re=N.node(F.borderLeft[F.borderLeft.length-1]),se=N.node(F.borderRight[F.borderRight.length-1]);F.width=Math.abs(se.x-re.x),F.height=Math.abs(ne.y-K.y),F.x=re.x+F.width/2,F.y=K.y+F.height/2}}),N.nodes().forEach(Y=>{N.node(Y).dummy==="border"&&N.removeNode(Y)})}function Z(N){N.edges().forEach(Y=>{if(Y.v===Y.w){var F=N.node(Y.v);F.selfEdges||(F.selfEdges=[]),F.selfEdges.push({e:Y,label:N.edge(Y)}),N.removeEdge(Y)}})}function J(N){var Y=p.buildLayerMatrix(N);Y.forEach(F=>{var K=0;F.forEach((ne,re)=>{var se=N.node(ne);se.order=re+K,(se.selfEdges||[]).forEach(ye=>{p.addDummyNode(N,"selfedge",{width:ye.label.width,height:ye.label.height,rank:se.rank,order:re+ ++K,e:ye.e,label:ye.label},"_se")}),delete se.selfEdges})})}function j(N){N.nodes().forEach(Y=>{var F=N.node(Y);if(F.dummy==="selfedge"){var K=N.node(F.e.v),ne=K.x+K.width/2,re=K.y,se=F.x-ne,ye=K.height/2;N.setEdge(F.e,F.label),N.removeNode(Y),F.label.points=[{x:ne+2*se/3,y:re-ye},{x:ne+5*se/6,y:re-ye},{x:ne+se,y:re},{x:ne+5*se/6,y:re+ye},{x:ne+2*se/3,y:re+ye}],F.label.x=F.x,F.label.y=F.y}})}function U(N,Y){return p.mapValues(p.pick(N,Y),Number)}function P(N){var Y={};return N&&Object.entries(N).forEach(([F,K])=>{typeof F=="string"&&(F=F.toLowerCase()),Y[F]=K}),Y}return Zh}var Kh,z1;function Vj(){if(z1)return Kh;z1=1;let e=Ct(),n=Vn().Graph;Kh={debugOrdering:i};function i(l){let o=e.buildLayerMatrix(l),s=new n({compound:!0,multigraph:!0}).setGraph({});return l.nodes().forEach(u=>{s.setNode(u,{label:u}),s.setParent(u,"layer"+l.node(u).rank)}),l.edges().forEach(u=>s.setEdge(u.v,u.w,{},u.name)),o.forEach((u,f)=>{let d="layer"+f;s.setNode(d,{rank:"same"}),u.reduce((h,m)=>(s.setEdge(h,m,{style:"invis"}),m))}),s}return Kh}var Jh,A1;function Yj(){return A1||(A1=1,Jh="1.1.8"),Jh}var Wh,M1;function Gj(){return M1||(M1=1,Wh={graphlib:Vn(),layout:Ij(),debug:Vj(),util:{time:Ct().time,notime:Ct().notime},version:Yj()}),Wh}var $j=Gj();const j1=Lo($j),yo=200,Gl=56,O1=20,R1=40,Xj=20,D1=12;function Pj(e,n,i,l,o,s,u){const f=[],d=[],h=new Set,m=new Set,p=new Map;for(const v of i)for(const w of v.agents)m.add(w),p.set(w,v.name);for(const v of i){const w=o[v.name],k=v.agents.length,S=yo+O1*2,_=R1+k*Gl+(k-1)*D1+Xj;f.push({id:v.name,type:"groupNode",position:{x:0,y:0},data:{label:v.name,type:"parallel_group",status:(w==null?void 0:w.status)||"pending",groupName:v.name,progress:s[v.name]},style:{width:S,height:_}});for(let z=0;z$entryPoint",source:"$start",target:u,type:"animatedEdge",data:{},animated:!1})}for(const v of n)d.push({id:`${v.from}->${v.to}`,source:v.from,target:v.to,type:"animatedEdge",data:{when:v.when},animated:!1});return Fj(f,d),{nodes:f,edges:d}}function Fj(e,n){var l,o,s,u;const i=new j1.graphlib.Graph;i.setDefaultEdgeLabel(()=>({})),i.setGraph({rankdir:"TB",nodesep:50,ranksep:70,marginx:30,marginy:30});for(const f of e){if(f.parentId)continue;const d=f.type==="groupNode",h=d&&((l=f.style)==null?void 0:l.width)||yo,m=d&&((o=f.style)==null?void 0:o.height)||Gl;i.setNode(f.id,{width:h,height:m})}for(const f of n)i.hasNode(f.source)&&i.hasNode(f.target)&&i.setEdge(f.source,f.target);j1.layout(i);for(const f of e){if(f.parentId)continue;const d=i.node(f.id);if(!d)continue;const h=f.type==="groupNode",m=h&&((s=f.style)==null?void 0:s.width)||yo,p=h&&((u=f.style)==null?void 0:u.height)||Gl;f.position={x:d.x-m/2,y:d.y-p/2}}}const lt={pending:"#6b7280",running:"#3b82f6",completed:"#22c55e",failed:"#ef4444",paused:"#f59e0b",idle:"#6b7280",waiting:"#a855f7"},Qj=70,L1=90;function dm({data:e,children:n}){const[i,l]=V.useState(!1),o=V.useRef(null),s=V.useCallback(()=>{o.current=setTimeout(()=>l(!0),200)},[]),u=V.useCallback(()=>{o.current&&clearTimeout(o.current),l(!1)},[]),f=lt[e.status]||lt.pending;return b.jsxs("div",{className:"relative",onMouseEnter:s,onMouseLeave:u,children:[n,i&&b.jsxs("div",{className:Ye("absolute z-50 bottom-full left-1/2 -translate-x-1/2 mb-2","bg-[var(--surface-raised)] border border-[var(--border)] shadow-lg","rounded-lg px-3 py-2 max-w-[260px] pointer-events-none","animate-[tooltip-in_150ms_ease-out]"),children:[b.jsx("div",{className:"absolute top-full left-1/2 -translate-x-1/2 w-0 h-0 border-x-[6px] border-x-transparent border-t-[6px] border-t-[var(--border)]"}),b.jsxs("div",{className:"flex flex-col gap-1.5 text-[11px]",children:[b.jsxs("div",{className:"flex items-center gap-1.5",children:[b.jsx("span",{className:"w-2 h-2 rounded-full flex-shrink-0",style:{backgroundColor:f}}),b.jsx("span",{className:"font-medium text-[var(--text)] capitalize",children:e.status}),e.iteration!=null&&e.iteration>1&&b.jsxs("span",{className:"text-[var(--text-muted)] ml-auto",children:["iter ",e.iteration]})]}),b.jsx("div",{className:"h-px bg-[var(--border)]"}),b.jsxs("div",{className:"grid grid-cols-[auto_1fr] gap-x-3 gap-y-0.5",children:[e.elapsed!=null&&b.jsxs(b.Fragment,{children:[b.jsx("span",{className:"text-[var(--text-muted)]",children:"Elapsed"}),b.jsx("span",{className:"text-[var(--text)] font-mono",children:ln(e.elapsed)})]}),e.model&&b.jsxs(b.Fragment,{children:[b.jsx("span",{className:"text-[var(--text-muted)]",children:"Model"}),b.jsx("span",{className:"text-[var(--text)] truncate",children:e.model})]}),e.tokens!=null&&b.jsxs(b.Fragment,{children:[b.jsx("span",{className:"text-[var(--text-muted)]",children:"Tokens"}),b.jsxs("span",{className:"text-[var(--text)] font-mono",children:[Wn(e.tokens),e.inputTokens!=null&&e.outputTokens!=null&&b.jsxs("span",{className:"text-[var(--text-muted)]",children:[" ","(",Wn(e.inputTokens),"↑ ",Wn(e.outputTokens),"↓)"]})]})]}),e.costUsd!=null&&b.jsxs(b.Fragment,{children:[b.jsx("span",{className:"text-[var(--text-muted)]",children:"Cost"}),b.jsx("span",{className:"text-[var(--text)] font-mono",children:Zl(e.costUsd)})]}),e.exitCode!=null&&b.jsxs(b.Fragment,{children:[b.jsx("span",{className:"text-[var(--text-muted)]",children:"Exit code"}),b.jsx("span",{className:Ye("font-mono",e.exitCode===0?"text-[var(--completed)]":"text-[var(--failed)]"),children:e.exitCode})]}),e.selectedOption&&b.jsxs(b.Fragment,{children:[b.jsx("span",{className:"text-[var(--text-muted)]",children:"Selected"}),b.jsx("span",{className:"text-[var(--text)] truncate",children:e.selectedOption})]})]}),e.errorMessage&&b.jsxs(b.Fragment,{children:[b.jsx("div",{className:"h-px bg-[var(--border)]"}),b.jsxs("div",{className:"text-red-400 leading-tight",children:[e.errorType&&b.jsxs("span",{className:"font-medium",children:[e.errorType,": "]}),b.jsxs("span",{className:"break-words",children:[e.errorMessage.slice(0,120),e.errorMessage.length>120?"...":""]})]})]})]})]})]})}const Zj=V.memo(function({data:n,id:i,selected:l}){const o=n,u=he(B=>{var T;return(T=B.nodes[i])==null?void 0:T.status})||o.status||"pending",f=lt[u]||lt.pending,d=he(B=>{var T;return(T=B.nodes[i])==null?void 0:T.elapsed}),h=he(B=>{var T;return(T=B.nodes[i])==null?void 0:T.model}),m=he(B=>{var T;return(T=B.nodes[i])==null?void 0:T.tokens}),p=he(B=>{var T;return(T=B.nodes[i])==null?void 0:T.input_tokens}),y=he(B=>{var T;return(T=B.nodes[i])==null?void 0:T.output_tokens}),v=he(B=>{var T;return(T=B.nodes[i])==null?void 0:T.cost_usd}),w=he(B=>{var T;return(T=B.nodes[i])==null?void 0:T.iteration}),k=he(B=>{var T;return(T=B.nodes[i])==null?void 0:T.error_type}),S=he(B=>{var T;return(T=B.nodes[i])==null?void 0:T.error_message}),_=he(B=>{var T;return(T=B.nodes[i])==null?void 0:T.context_pct}),z=Kj(i,u),E=Jj(u),A=(()=>{if(u==="failed"&&S)return{text:S.length>40?S.slice(0,37)+"...":S,className:"text-red-400"};if(u==="running")return{text:z,className:"text-[var(--text-muted)]"};if(u==="completed"){const B=[];return d!=null&&B.push(ln(d)),m!=null&&B.push(`${Wn(m)} tok`),v!=null&&B.push(Zl(v)),{text:B.join(" · ")||null,className:"text-[var(--text-muted)]"}}return{text:null,className:""}})();return b.jsxs(b.Fragment,{children:[b.jsx(an,{type:"target",position:we.Top,className:"!bg-[var(--border)] !border-none !w-2 !h-2"}),b.jsx(dm,{data:{status:u,elapsed:d,model:h,tokens:m,inputTokens:p,outputTokens:y,costUsd:v,iteration:w,errorType:k,errorMessage:S},children:b.jsxs("div",{className:Ye("flex items-center gap-2 px-3 py-1.5 rounded-lg border-2 bg-[var(--node-bg)] min-w-[140px] max-w-[220px] transition-all duration-300",l&&"ring-2 ring-[var(--accent)] ring-offset-1 ring-offset-[var(--bg)]",u==="running"&&"shadow-[0_0_12px_var(--running-glow)]",E),style:{borderColor:f},children:[b.jsx("div",{className:Ye("flex items-center justify-center w-6 h-6 rounded-md flex-shrink-0",u==="running"&&"animate-pulse"),style:{backgroundColor:`${f}20`},children:b.jsx(G2,{className:"w-3.5 h-3.5",style:{color:f}})}),b.jsxs("div",{className:"flex flex-col min-w-0 flex-1",children:[b.jsxs("div",{className:"flex items-center gap-1",children:[b.jsx("span",{className:"text-xs font-medium text-[var(--text)] truncate",children:o.label}),w!=null&&w>1&&b.jsxs("span",{className:"flex-shrink-0 inline-flex items-center justify-center px-1.5 py-0.5 rounded-full text-[9px] font-bold leading-none",style:{backgroundColor:`${f}25`,color:f},children:["x",w]})]}),A.text&&b.jsx("span",{className:Ye("text-[10px] truncate leading-tight",A.className),children:A.text})]}),_!=null&&b.jsx("div",{className:"absolute bottom-0 left-0 right-0 h-[2px] rounded-b-lg overflow-hidden",style:{backgroundColor:"rgba(255,255,255,0.06)"},children:b.jsx("div",{className:Ye("h-full transition-all duration-500",_>=L1?"animate-[context-pulse_2s_ease-in-out_infinite]":""),style:{width:`${Math.min(_,100)}%`,backgroundColor:_>=L1?"#ef4444":_>=Qj?"#f59e0b":"#22c55e"}})})]})}),b.jsx(an,{type:"source",position:we.Bottom,className:"!bg-[var(--border)] !border-none !w-2 !h-2"})]})});function Kj(e,n){const i=he(d=>{var h;return(h=d.nodes[e])==null?void 0:h.startedAt}),l=he(d=>d.replayMode),o=he(d=>d.lastEventTime),[s,u]=V.useState("0.0s"),f=V.useRef(null);return V.useEffect(()=>{if(n==="running"){if(l){f.current&&clearInterval(f.current);const m=i??o??0;u(ln((o??m)-m));return}const d=i!=null?i*1e3:Date.now(),h=()=>{const m=(Date.now()-d)/1e3;u(ln(m))};return h(),f.current=setInterval(h,1e3),()=>{f.current&&clearInterval(f.current)}}else f.current&&clearInterval(f.current)},[n,i,l,o]),s}function Jj(e){const n=V.useRef(e),[i,l]=V.useState("");return V.useEffect(()=>{const o=n.current;if(n.current=e,o===e)return;e==="running"?l("node-activate"):o==="running"&&(e==="completed"||e==="failed")&&l(e==="completed"?"node-complete":"node-fail");const s=setTimeout(()=>l(""),400);return()=>clearTimeout(s)},[e]),i}const Wj=V.memo(function({data:n,id:i,selected:l}){const o=n,u=he(k=>{var S;return(S=k.nodes[i])==null?void 0:S.status})||o.status||"pending",f=lt[u]||lt.pending,d=he(k=>{var S;return(S=k.nodes[i])==null?void 0:S.elapsed}),h=he(k=>{var S;return(S=k.nodes[i])==null?void 0:S.exit_code}),m=he(k=>{var S;return(S=k.nodes[i])==null?void 0:S.error_type}),p=he(k=>{var S;return(S=k.nodes[i])==null?void 0:S.error_message}),y=e4(i,u),v=t4(u),w=(()=>{if(u==="failed"&&p)return{text:p.length>40?p.slice(0,37)+"...":p,className:"text-red-400"};if(u==="running")return{text:y,className:"text-[var(--text-muted)]"};if(u==="completed"){const k=[];return d!=null&&k.push(ln(d)),h!=null&&k.push(`exit ${h}`),{text:k.join(" · ")||null,className:"text-[var(--text-muted)]"}}return{text:null,className:""}})();return b.jsxs(b.Fragment,{children:[b.jsx(an,{type:"target",position:we.Top,className:"!bg-[var(--border)] !border-none !w-2 !h-2"}),b.jsx(dm,{data:{status:u,elapsed:d,exitCode:h,errorType:m,errorMessage:p},children:b.jsxs("div",{className:Ye("flex items-center gap-2 px-3 py-1.5 rounded-lg border-2 bg-[var(--node-bg)] min-w-[140px] max-w-[220px] transition-all duration-300",l&&"ring-2 ring-[var(--accent)] ring-offset-1 ring-offset-[var(--bg)]",u==="running"&&"shadow-[0_0_12px_var(--running-glow)]",v),style:{borderColor:f},children:[b.jsx("div",{className:Ye("flex items-center justify-center w-6 h-6 rounded-md flex-shrink-0",u==="running"&&"animate-pulse"),style:{backgroundColor:`${f}20`},children:b.jsx(oN,{className:"w-3.5 h-3.5",style:{color:f}})}),b.jsxs("div",{className:"flex flex-col min-w-0 flex-1",children:[b.jsx("span",{className:"text-xs font-medium text-[var(--text)] truncate",children:o.label}),w.text&&b.jsx("span",{className:Ye("text-[10px] truncate leading-tight",w.className),children:w.text})]})]})}),b.jsx(an,{type:"source",position:we.Bottom,className:"!bg-[var(--border)] !border-none !w-2 !h-2"})]})});function e4(e,n){const i=he(d=>{var h;return(h=d.nodes[e])==null?void 0:h.startedAt}),l=he(d=>d.replayMode),o=he(d=>d.lastEventTime),[s,u]=V.useState("0.0s"),f=V.useRef(null);return V.useEffect(()=>{if(n==="running"){if(l){f.current&&clearInterval(f.current);const m=i??o??0;u(ln((o??m)-m));return}const d=i!=null?i*1e3:Date.now(),h=()=>{const m=(Date.now()-d)/1e3;u(ln(m))};return h(),f.current=setInterval(h,1e3),()=>{f.current&&clearInterval(f.current)}}else f.current&&clearInterval(f.current)},[n,i,l,o]),s}function t4(e){const n=V.useRef(e),[i,l]=V.useState("");return V.useEffect(()=>{const o=n.current;if(n.current=e,o===e)return;e==="running"?l("node-activate"):o==="running"&&(e==="completed"||e==="failed")&&l(e==="completed"?"node-complete":"node-fail");const s=setTimeout(()=>l(""),400);return()=>clearTimeout(s)},[e]),i}const n4=V.memo(function({data:n,id:i,selected:l}){const o=n,u=he(m=>{var p;return(p=m.nodes[i])==null?void 0:p.status})||o.status||"pending",f=lt[u]||lt.pending,d=he(m=>{var p;return(p=m.nodes[i])==null?void 0:p.selected_option}),h=r4(u);return b.jsxs(b.Fragment,{children:[b.jsx(an,{type:"target",position:we.Top,className:"!bg-[var(--border)] !border-none !w-2 !h-2"}),b.jsx(dm,{data:{status:u,selectedOption:d},children:b.jsxs("div",{className:Ye("flex items-center gap-2 px-3 py-1.5 rounded-lg border-2 border-dashed bg-[var(--node-bg)] min-w-[140px] max-w-[220px] transition-all duration-300",l&&"ring-2 ring-[var(--accent)] ring-offset-1 ring-offset-[var(--bg)]",u==="waiting"&&"shadow-[0_0_12px_var(--waiting-muted)]",u==="running"&&"shadow-[0_0_12px_var(--running-glow)]",h),style:{borderColor:f},children:[b.jsx("div",{className:Ye("flex items-center justify-center w-6 h-6 rounded-md flex-shrink-0",u==="waiting"&&"animate-pulse"),style:{backgroundColor:`${f}20`},children:b.jsx(aN,{className:"w-3.5 h-3.5",style:{color:f}})}),b.jsxs("div",{className:"flex flex-col min-w-0 flex-1",children:[b.jsx("span",{className:"text-xs font-medium text-[var(--text)] truncate",children:o.label}),u==="waiting"&&b.jsx("span",{className:"text-[10px] text-[var(--waiting)] truncate leading-tight",children:"Awaiting input..."}),u==="completed"&&d&&b.jsx("span",{className:"text-[10px] text-[var(--text-muted)] truncate leading-tight",children:d})]})]})}),b.jsx(an,{type:"source",position:we.Bottom,className:"!bg-[var(--border)] !border-none !w-2 !h-2"})]})});function r4(e){const n=V.useRef(e),[i,l]=V.useState("");return V.useEffect(()=>{const o=n.current;if(n.current=e,o===e)return;e==="running"||e==="waiting"?l("node-activate"):(o==="running"||o==="waiting")&&e==="completed"&&l("node-complete");const s=setTimeout(()=>l(""),400);return()=>clearTimeout(s)},[e]),i}const i4=V.memo(function({data:n,id:i,selected:l}){const o=n,u=o.type==="for_each_group"?rN:W2,f=o.progress,h=he(k=>{var S;return(S=k.nodes[i])==null?void 0:S.status})||o.status||"pending",m=lt[h]||lt.pending,p=l4(h),y=f?`${f.completed+f.failed}/${f.total}${f.failed>0?` (${f.failed} failed)`:""}`:null,v=f&&f.total>0?(f.completed+f.failed)/f.total*100:0,w=f!=null&&f.failed>0;return b.jsxs(b.Fragment,{children:[b.jsx(an,{type:"target",position:we.Top,className:"!bg-[var(--border)] !border-none !w-2 !h-2"}),b.jsxs("div",{className:Ye("flex flex-col gap-1 px-4 py-3 rounded-xl border-2 border-dashed bg-[var(--surface)]/80 min-w-[180px] transition-all duration-300",l&&"ring-2 ring-[var(--accent)] ring-offset-1 ring-offset-[var(--bg)]",h==="running"&&"shadow-[0_0_16px_var(--running-glow)]",p),style:{borderColor:m,minHeight:"100%"},children:[b.jsxs("div",{className:"flex items-center gap-2",children:[b.jsx(u,{className:"w-3.5 h-3.5",style:{color:m}}),b.jsx("span",{className:"text-xs font-medium text-[var(--text-secondary)]",children:o.label})]}),y&&b.jsx("span",{className:"text-[10px] text-[var(--text-muted)] font-mono",children:y}),f&&f.total>0&&h==="running"&&b.jsx("div",{className:"w-full h-1 rounded-full bg-[var(--border)] overflow-hidden mt-0.5",children:b.jsx("div",{className:"h-full rounded-full transition-all duration-500 ease-out",style:{width:`${v}%`,backgroundColor:w?"var(--failed)":"var(--completed)"}})})]}),b.jsx(an,{type:"source",position:we.Bottom,className:"!bg-[var(--border)] !border-none !w-2 !h-2"})]})});function l4(e){const n=V.useRef(e),[i,l]=V.useState("");return V.useEffect(()=>{const o=n.current;if(n.current=e,o===e)return;e==="running"?l("node-activate"):o==="running"&&(e==="completed"||e==="failed")&&l(e==="completed"?"node-complete":"node-fail");const s=setTimeout(()=>l(""),400);return()=>clearTimeout(s)},[e]),i}const a4=V.memo(function({data:n,selected:i}){const o=n.status||"pending",s=o==="completed",u=o==="failed",f=!s&&!u,d=s?lt.completed:u?lt.failed:lt.pending;return b.jsxs(b.Fragment,{children:[b.jsx(an,{type:"target",position:we.Top,className:"!bg-[var(--border)] !border-none !w-2 !h-2"}),b.jsx("div",{className:Ye("flex items-center justify-center w-11 h-11 rounded-full border-2 transition-all duration-300",s?"bg-[var(--completed)] shadow-[0_0_16px_var(--completed-muted)]":u?"bg-[var(--failed)] shadow-[0_0_16px_var(--failed-muted)]":"bg-[var(--node-bg)]",i&&"ring-2 ring-[var(--accent)] ring-offset-1 ring-offset-[var(--bg)]"),style:{borderColor:d},children:s?b.jsx(Bi,{className:"w-5 h-5 text-white",strokeWidth:3}):u?b.jsx(Tb,{className:"w-3.5 h-3.5 text-white",fill:"white"}):b.jsx(Bi,{className:"w-5 h-5",strokeWidth:2.5,style:{color:f?lt.pending:d}})})]})}),o4=V.memo(function({data:n,selected:i}){const o=n.status||"pending",s=lt[o]||lt.pending,u=o==="running"||o==="completed";return b.jsxs(b.Fragment,{children:[b.jsx("div",{className:Ye("flex items-center justify-center w-11 h-11 rounded-full border-2 transition-all duration-300",u?"bg-[var(--completed)]":"bg-[var(--node-bg)]",i&&"ring-2 ring-[var(--accent)] ring-offset-1 ring-offset-[var(--bg)]",u&&"shadow-[0_0_12px_var(--completed-muted)]"),style:{borderColor:s},children:b.jsx(Vp,{className:"w-4 h-4 ml-0.5",style:{color:u?"white":s}})}),b.jsx(an,{type:"source",position:we.Bottom,className:"!bg-[var(--border)] !border-none !w-2 !h-2"})]})}),s4=V.memo(function({id:n,sourceX:i,sourceY:l,targetX:o,targetY:s,sourcePosition:u,targetPosition:f,source:d,target:h,data:m}){const p=he(D=>D.highlightedEdges),y=V.useMemo(()=>p.find(D=>D.from===d&&D.to===h),[p,d,h]),[v,w,k]=im({sourceX:i,sourceY:l,targetX:o,targetY:s,sourcePosition:u,targetPosition:f}),S=m==null?void 0:m.when,_=!!S,z=(y==null?void 0:y.state)==="taken",E=(y==null?void 0:y.state)==="highlighted",A=(y==null?void 0:y.state)==="failed";let B="var(--edge-color)",T=2,q;A?(B="var(--failed)",T=3):z?(B="var(--edge-taken)",T=3):E&&(B="var(--edge-active)",T=3),_&&!z&&!E&&!A&&(q="6 3");const M=A?"failed":z?"taken":E?"active":"default";return b.jsxs(b.Fragment,{children:[b.jsx(Xo,{id:n,path:v,style:{stroke:B,strokeWidth:T,strokeDasharray:q,transition:"stroke 0.3s ease, stroke-width 0.3s ease"},markerEnd:`url(#arrow-${M})`}),_&&b.jsx(MM,{children:b.jsx("div",{className:"nodrag nopan",style:{position:"absolute",transform:`translate(-50%, -50%) translate(${w}px,${k}px)`,pointerEvents:"all"},children:b.jsx("span",{className:"inline-block px-1.5 py-0.5 rounded-full text-[9px] font-mono leading-tight max-w-[140px] truncate",style:{backgroundColor:A?"var(--failed)":z?"var(--edge-taken)":"var(--surface)",color:A||z?"var(--bg)":"var(--text-muted)",border:`1px solid ${A?"var(--failed)":z?"var(--edge-taken)":"var(--border)"}`},title:S,children:S})})}),z&&b.jsx("circle",{r:"3",fill:"var(--edge-taken)",children:b.jsx("animateMotion",{dur:"1s",repeatCount:"indefinite",path:v})}),A&&b.jsx("circle",{r:"3",fill:"var(--failed)",opacity:"0.8",children:b.jsx("animateMotion",{dur:"1.5s",repeatCount:"indefinite",path:v})})]})});function u4(){const e=he(u=>u.workflowStatus),n=he(u=>u.workflowFailure),i=he(u=>u.workflowFailedAgent),l=he(u=>u.selectNode);if(e!=="failed"||!n)return null;const o=n.message||n.error_type||"Unknown error",s=n.error_type==="TimeoutError";return b.jsx("div",{className:"absolute top-3 left-1/2 -translate-x-1/2 z-20 animate-[banner-in_200ms_ease-out]",children:b.jsxs("div",{className:Ye("flex items-center gap-2 px-4 py-2 rounded-lg","bg-red-950/90 border border-red-500/40 shadow-lg shadow-red-500/10","backdrop-blur-sm max-w-[560px]"),children:[b.jsx(sN,{className:"w-4 h-4 text-red-400 flex-shrink-0"}),b.jsxs("div",{className:"flex flex-col min-w-0",children:[b.jsx("span",{className:"text-xs font-medium text-red-300",children:"Workflow Failed"}),b.jsx("span",{className:"text-[11px] text-red-400/80 truncate",children:o}),s&&n.current_agent&&b.jsxs("span",{className:"text-[10px] text-red-400/60 truncate",children:["Timed out on agent: ",n.current_agent]}),n.checkpoint_path&&b.jsxs("span",{className:"text-[10px] text-red-400/50 truncate",title:n.checkpoint_path,children:["Checkpoint: ",n.checkpoint_path.split("/").pop()]})]}),i&&b.jsxs("button",{onClick:()=>l(i),className:"flex items-center gap-1 px-2 py-1 rounded text-[10px] font-medium text-red-300 bg-red-500/20 hover:bg-red-500/30 transition-colors flex-shrink-0 ml-1",children:[b.jsx(Z2,{className:"w-3 h-3"}),"View"]})]})})}function c4(){const[e,n]=V.useState(!1),i=he(d=>d.workflowStatus),l=he(d=>d.totalCost),o=he(d=>d.totalTokens),s=he(d=>d.agentsCompleted),u=he(d=>d.agentsTotal),f=Ab();return i!=="completed"||e?null:b.jsx("div",{className:"absolute top-3 left-1/2 -translate-x-1/2 z-20 animate-[banner-in_200ms_ease-out]",children:b.jsxs("div",{className:Ye("flex items-center gap-3 px-4 py-2 rounded-lg","bg-green-950/90 border border-green-500/40 shadow-lg shadow-green-500/10","backdrop-blur-sm"),children:[b.jsx(X2,{className:"w-4 h-4 text-green-400 flex-shrink-0"}),b.jsx("span",{className:"text-xs font-medium text-green-300",children:"Completed"}),b.jsxs("div",{className:"flex items-center gap-3 text-[11px] text-green-400/80 font-mono",children:[b.jsx("span",{children:f}),u>0&&b.jsxs("span",{children:[s,"/",u," agents"]}),o>0&&b.jsxs("span",{children:[Wn(o)," tok"]}),l>0&&b.jsx("span",{children:Zl(l)})]}),b.jsx("button",{onClick:()=>n(!0),className:"p-0.5 rounded text-green-500/60 hover:text-green-300 transition-colors flex-shrink-0 ml-1",children:b.jsx(Bo,{className:"w-3.5 h-3.5"})})]})})}const f4={agentNode:Zj,scriptNode:Wj,gateNode:n4,groupNode:i4,endNode:a4,startNode:o4},d4={animatedEdge:s4},h4={type:"animatedEdge"};function p4(){return b.jsx("svg",{style:{position:"absolute",width:0,height:0},children:b.jsxs("defs",{children:[b.jsx("marker",{id:"arrow-default",viewBox:"0 0 10 10",refX:"8",refY:"5",markerWidth:"8",markerHeight:"8",orient:"auto-start-reverse",children:b.jsx("path",{d:"M 0 0 L 10 5 L 0 10 z",fill:"var(--edge-color)"})}),b.jsx("marker",{id:"arrow-active",viewBox:"0 0 10 10",refX:"8",refY:"5",markerWidth:"8",markerHeight:"8",orient:"auto-start-reverse",children:b.jsx("path",{d:"M 0 0 L 10 5 L 0 10 z",fill:"var(--edge-active)"})}),b.jsx("marker",{id:"arrow-taken",viewBox:"0 0 10 10",refX:"8",refY:"5",markerWidth:"8",markerHeight:"8",orient:"auto-start-reverse",children:b.jsx("path",{d:"M 0 0 L 10 5 L 0 10 z",fill:"var(--edge-taken)"})}),b.jsx("marker",{id:"arrow-failed",viewBox:"0 0 10 10",refX:"8",refY:"5",markerWidth:"8",markerHeight:"8",orient:"auto-start-reverse",children:b.jsx("path",{d:"M 0 0 L 10 5 L 0 10 z",fill:"var(--failed)"})})]})})}function m4(){const e=he(M=>M.agents),n=he(M=>M.routes),i=he(M=>M.parallelGroups),l=he(M=>M.forEachGroups),o=he(M=>M.nodes),s=he(M=>M.groupProgress),u=he(M=>M.selectNode),f=he(M=>M.selectedNode),d=he(M=>M.workflowStatus),h=he(M=>M.entryPoint),m=he(M=>M.wsStatus),p=he(M=>M.workflowFailedAgent),[y,v,w]=jM([]),[k,S,_]=OM([]),z=V.useRef(!1);V.useEffect(()=>{if(e.length===0||z.current)return;z.current=!0;const{nodes:M,edges:D}=Pj(e,n,i,l,o,s,h);v(M),S(D)},[e,n,i,l,o,s,h,v,S]),V.useEffect(()=>{z.current&&v(M=>M.map(D=>{const X=o[D.id];if(!X)return D;const H=X.status||"pending",I=D.data.status;if(H!==I){const ee={...D.data,status:H};return D.data.groupName&&s[D.data.groupName]&&(ee.progress=s[D.data.groupName]),{...D,data:ee}}if(D.data.groupName&&s[D.data.groupName]){const ee=D.data.progress,L=s[D.data.groupName];if(L&&(!ee||ee.completed!==L.completed||ee.failed!==L.failed))return{...D,data:{...D.data,progress:L}}}return D}))},[o,s,v]);const E=V.useCallback((M,D)=>{D.type==="groupNode"&&D.data.type!=="for_each_group"||u(D.id)},[u]),A=V.useCallback(()=>{u(null)},[u]),B=V.useCallback(M=>{var X;const D=((X=M.data)==null?void 0:X.status)||"pending";return lt[D]||lt.pending},[]);V.useEffect(()=>{v(M=>M.map(D=>({...D,selected:D.id===f})))},[f,v]),V.useEffect(()=>{d==="failed"&&p&&u(p)},[d,p,u]);const T=d==="pending"&&e.length===0,q=(()=>{switch(m){case"connecting":return"Connecting to workflow…";case"reconnecting":return"Reconnecting…";case"disconnected":return"Connection lost. Retrying…";default:return"Waiting for workflow…"}})();return b.jsxs("div",{className:"w-full h-full relative",children:[b.jsx(p4,{}),b.jsx(u4,{}),b.jsx(c4,{}),T&&b.jsxs("div",{className:"absolute inset-0 z-10 flex flex-col items-center justify-center pointer-events-none",children:[b.jsxs("div",{className:"relative mb-3",children:[b.jsx(fN,{className:"w-8 h-8 text-[var(--accent)] opacity-20"}),b.jsx(_o,{className:"w-8 h-8 text-[var(--text-muted)] animate-spin absolute inset-0 opacity-40"})]}),b.jsx("p",{className:"text-sm text-[var(--text-muted)] animate-pulse",children:q})]}),b.jsxs(zM,{nodes:y,edges:k,onNodesChange:w,onEdgesChange:_,onNodeClick:E,onPaneClick:A,nodeTypes:f4,edgeTypes:d4,defaultEdgeOptions:h4,fitView:!0,fitViewOptions:{padding:.2},minZoom:.2,maxZoom:2,proOptions:{hideAttribution:!0},nodesDraggable:!0,nodesConnectable:!1,elementsSelectable:!0,children:[b.jsx(BM,{variant:Tr.Dots,gap:20,size:1,color:"var(--border-subtle)"}),b.jsx(ij,{nodeColor:B,maskColor:"var(--minimap-mask)",style:{background:"var(--minimap-bg)"},pannable:!0,zoomable:!0}),b.jsx($M,{showInteractive:!1,children:b.jsx(g4,{})}),b.jsx(y4,{})]})]})}function g4(){const{fitView:e}=$o(),n=V.useCallback(()=>{e({padding:.2,duration:300})},[e]);return b.jsx("button",{onClick:n,className:"react-flow__controls-button",title:"Fit view (F)",style:{display:"flex",alignItems:"center",justifyContent:"center"},children:b.jsx(tN,{className:"w-3.5 h-3.5"})})}function y4(){const{fitView:e}=$o();return V.useEffect(()=>{const n=i=>{var o;const l=(o=i.target)==null?void 0:o.tagName;l==="INPUT"||l==="TEXTAREA"||l==="SELECT"||i.key==="f"&&!i.ctrlKey&&!i.metaKey&&!i.altKey&&e({padding:.2,duration:300})};return window.addEventListener("keydown",n),()=>window.removeEventListener("keydown",n)},[e]),null}function la({items:e}){const n=e.filter(i=>i.value!=null&&i.value!=="");return n.length===0?null:b.jsx("dl",{className:"grid grid-cols-[auto_1fr] gap-x-3 gap-y-1.5 text-xs",children:n.map(({label:i,value:l})=>b.jsxs("div",{className:"contents",children:[b.jsx("dt",{className:"text-[var(--text-muted)] whitespace-nowrap",children:i}),b.jsx("dd",{className:"text-[var(--text)] break-words",children:typeof l=="object"?JSON.stringify(l):String(l)})]},i))})}function US(e){const n=[];return e.elapsed!=null&&n.push({label:"Elapsed",value:ln(e.elapsed)}),e.model&&n.push({label:"Model",value:e.model}),e.tokens!=null&&n.push({label:"Tokens",value:Wn(e.tokens)}),e.input_tokens!=null&&e.output_tokens!=null&&n.push({label:"In / Out",value:`${Wn(e.input_tokens)} / ${Wn(e.output_tokens)}`}),e.cost_usd!=null&&n.push({label:"Cost",value:Zl(e.cost_usd)}),e.context_window_used!=null&&e.context_window_max!=null&&n.push({label:"Context",value:bN(e.context_window_used,e.context_window_max)}),e.iteration!=null&&n.push({label:"Iteration",value:e.iteration}),e.error_type&&n.push({label:"Error",value:e.error_type}),e.error_message&&n.push({label:"Message",value:e.error_message}),n}function Pi({output:e,title:n="Output",defaultExpanded:i=!0,maxHeight:l="300px"}){const[o,s]=V.useState(i),[u,f]=V.useState(!1),d=zb(e);if(!d)return null;const h=typeof e=="object"&&e!==null,m=async()=>{await navigator.clipboard.writeText(d),f(!0),setTimeout(()=>f(!1),2e3)};return b.jsxs("div",{className:"space-y-1.5",children:[b.jsxs("div",{className:"flex items-center justify-between",children:[b.jsxs("button",{onClick:()=>s(!o),className:"flex items-center gap-1 text-[10px] uppercase tracking-wider text-[var(--text-muted)] hover:text-[var(--text)] transition-colors font-semibold",children:[o?b.jsx(Fi,{className:"w-3 h-3"}):b.jsx(ia,{className:"w-3 h-3"}),n]}),o&&b.jsx("button",{onClick:m,className:"flex items-center gap-1 text-[10px] text-[var(--text-muted)] hover:text-[var(--text)] transition-colors",title:"Copy to clipboard",children:u?b.jsx(Bi,{className:"w-3 h-3 text-[var(--completed)]"}):b.jsx(Cb,{className:"w-3 h-3"})})]}),o&&b.jsx("pre",{className:"bg-[var(--bg)] border border-[var(--border)] rounded-md p-3 font-mono text-[11px] leading-relaxed text-[var(--text)] overflow-auto whitespace-pre-wrap break-words",style:{maxHeight:l},children:h?b.jsx(x4,{text:d}):d})]})}function x4({text:e}){const n=e.split(/("(?:[^"\\]|\\.)*")/g);return b.jsx(b.Fragment,{children:n.map((i,l)=>{if(l%2===1){const s=n.slice(l+1).join(""),u=/^\s*:/.test(s);return b.jsx("span",{className:u?"text-blue-400":"text-green-400",children:i},l)}const o=i.replace(/\b(true|false|null)\b|(-?\d+\.?\d*(?:e[+-]?\d+)?)/gi,(s,u,f)=>u?`${s}`:f?`${s}`:s);return b.jsx("span",{dangerouslySetInnerHTML:{__html:o}},l)})})}function hm({activity:e,defaultExpanded:n=!0}){const[i,l]=V.useState(n),o=V.useRef(null);return V.useEffect(()=>{o.current&&i&&(o.current.scrollTop=o.current.scrollHeight)},[e.length,i]),e.length===0?null:b.jsxs("div",{className:"space-y-1.5",children:[b.jsxs("button",{onClick:()=>l(!i),className:"flex items-center gap-1 text-[10px] uppercase tracking-wider text-[var(--text-muted)] hover:text-[var(--text)] transition-colors font-semibold",children:[i?b.jsx(Fi,{className:"w-3 h-3"}):b.jsx(ia,{className:"w-3 h-3"}),"Activity (",e.length,")"]}),i&&b.jsx("div",{ref:o,className:"max-h-[400px] overflow-y-auto space-y-0.5",children:e.map((s,u)=>b.jsx(v4,{entry:s},u))})]})}function v4({entry:e}){const n={reasoning:"text-indigo-400/70","tool-start":"text-blue-400","tool-complete":"text-green-400",turn:"text-amber-400",message:"text-[var(--text)]"};return b.jsxs("div",{className:Ye("py-1.5 px-2 rounded text-[11px] leading-relaxed border-b border-[var(--border-subtle)] last:border-b-0"),children:[b.jsxs("div",{className:"flex items-start gap-1.5",children:[b.jsx("span",{className:"w-4 text-center flex-shrink-0",children:e.icon}),b.jsx("span",{className:"text-[var(--text-muted)] uppercase text-[9px] font-semibold tracking-wider w-12 flex-shrink-0 pt-px",children:e.label}),b.jsx("span",{className:Ye("break-words",n[e.type]||"text-[var(--text)]"),children:typeof e.text=="object"?JSON.stringify(e.text):e.text})]}),e.detail&&b.jsx("div",{className:"mt-1 ml-[4.25rem] px-2 py-1 bg-[var(--bg)] rounded text-[10px] font-mono text-[var(--text-muted)] whitespace-pre-wrap break-words max-h-24 overflow-y-auto",children:typeof e.detail=="object"?JSON.stringify(e.detail,null,2):e.detail})]})}function b4({node:e}){const n=e.status,i=lt[n]||lt.pending,l=e.iterationHistory&&e.iterationHistory.length>0;return b.jsxs("div",{className:"space-y-4",children:[b.jsxs("div",{className:"flex items-center gap-2",children:[b.jsx("span",{className:"inline-flex items-center px-2 py-0.5 rounded text-[10px] font-bold uppercase tracking-wider",style:{backgroundColor:`${i}20`,color:i},children:n}),b.jsx("span",{className:"text-xs text-[var(--text-muted)]",children:"Agent"})]}),l?b.jsx(H1,{label:`Iteration ${e.iteration??"?"} (current)`,defaultExpanded:!0,status:n,snapshot:{iteration:e.iteration??0,prompt:e.prompt,output:e.output,elapsed:e.elapsed,model:e.model,tokens:e.tokens,input_tokens:e.input_tokens,output_tokens:e.output_tokens,cost_usd:e.cost_usd,activity:e.activity,error_type:e.error_type,error_message:e.error_message}}):b.jsxs(b.Fragment,{children:[b.jsx(la,{items:US(e)}),e.prompt&&b.jsx(Pi,{output:e.prompt,title:"Input / Prompt",defaultExpanded:!0}),b.jsx(hm,{activity:e.activity,defaultExpanded:n!=="completed"}),e.output!=null&&b.jsx(Pi,{output:e.output,title:"Output"})]}),l&&[...e.iterationHistory].reverse().map(o=>b.jsx(H1,{label:`Iteration ${o.iteration}`,defaultExpanded:!1,status:n,snapshot:o},o.iteration))]})}function H1({label:e,defaultExpanded:n,snapshot:i,status:l}){const[o,s]=V.useState(n);return b.jsxs("div",{className:"border border-[var(--border)] rounded-lg overflow-hidden",children:[b.jsxs("button",{onClick:()=>s(!o),className:"flex items-center gap-2 w-full px-3 py-2 bg-[var(--bg)] hover:bg-[var(--node-bg)] transition-colors text-left",children:[o?b.jsx(Fi,{className:"w-3.5 h-3.5 text-[var(--text-muted)] flex-shrink-0"}):b.jsx(ia,{className:"w-3.5 h-3.5 text-[var(--text-muted)] flex-shrink-0"}),b.jsx("span",{className:"text-xs font-semibold text-[var(--text)]",children:e}),i.elapsed!=null&&b.jsx("span",{className:"text-[10px] text-[var(--text-muted)] ml-auto",children:w4(i.elapsed)})]}),o&&b.jsxs("div",{className:"px-3 py-3 space-y-3 border-t border-[var(--border)]",children:[b.jsx(la,{items:US(i)}),i.prompt&&b.jsx(Pi,{output:i.prompt,title:"Input / Prompt",defaultExpanded:!1}),b.jsx(hm,{activity:i.activity,defaultExpanded:n&&l!=="completed"}),i.output!=null&&b.jsx(Pi,{output:i.output,title:"Output",defaultExpanded:!0}),i.error_type&&b.jsxs("div",{className:"text-xs text-red-400",children:[b.jsx("span",{className:"font-semibold",children:i.error_type}),i.error_message&&b.jsxs("span",{className:"ml-1",children:["— ",i.error_message]})]})]})]})}function w4(e){if(e<1)return`${(e*1e3).toFixed(0)}ms`;if(e<60)return`${e.toFixed(1)}s`;const n=Math.floor(e/60),i=(e%60).toFixed(0);return`${n}m ${i}s`}function S4({node:e}){const n=e.status,i=lt[n]||lt.pending,l=[];e.elapsed!=null&&l.push({label:"Elapsed",value:ln(e.elapsed)}),e.exit_code!=null&&l.push({label:"Exit Code",value:e.exit_code}),e.error_type&&l.push({label:"Error",value:e.error_type}),e.error_message&&l.push({label:"Message",value:e.error_message});let o="";return e.stdout&&(o+=e.stdout),e.stderr&&(o+=(o?` - ---- stderr --- -`:"")+e.stderr),b.jsxs("div",{className:"space-y-4",children:[b.jsxs("div",{className:"flex items-center gap-2",children:[b.jsx("span",{className:"inline-flex items-center px-2 py-0.5 rounded text-[10px] font-bold uppercase tracking-wider",style:{backgroundColor:`${i}20`,color:i},children:n}),b.jsx("span",{className:"text-xs text-[var(--text-muted)]",children:"Script"})]}),b.jsx(la,{items:l}),o&&b.jsx(Pi,{output:o,title:"Output"})]})}function _4(e,n){const i={};return(e[e.length-1]===""?[...e,""]:e).join((i.padRight?" ":"")+","+(i.padLeft===!1?"":" ")).trim()}const E4=/^[$_\p{ID_Start}][$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,N4=/^[$_\p{ID_Start}][-$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,k4={};function B1(e,n){return(k4.jsx?N4:E4).test(e)}const C4=/[ \t\n\f\r]/g;function T4(e){return typeof e=="object"?e.type==="text"?q1(e.value):!1:q1(e)}function q1(e){return e.replace(C4,"")===""}class Po{constructor(n,i,l){this.normal=i,this.property=n,l&&(this.space=l)}}Po.prototype.normal={};Po.prototype.property={};Po.prototype.space=void 0;function IS(e,n){const i={},l={};for(const o of e)Object.assign(i,o.property),Object.assign(l,o.normal);return new Po(i,l,n)}function jp(e){return e.toLowerCase()}class on{constructor(n,i){this.attribute=i,this.property=n}}on.prototype.attribute="";on.prototype.booleanish=!1;on.prototype.boolean=!1;on.prototype.commaOrSpaceSeparated=!1;on.prototype.commaSeparated=!1;on.prototype.defined=!1;on.prototype.mustUseProperty=!1;on.prototype.number=!1;on.prototype.overloadedBoolean=!1;on.prototype.property="";on.prototype.spaceSeparated=!1;on.prototype.space=void 0;let z4=0;const Oe=Qi(),kt=Qi(),Op=Qi(),me=Qi(),at=Qi(),Fl=Qi(),gn=Qi();function Qi(){return 2**++z4}const Rp=Object.freeze(Object.defineProperty({__proto__:null,boolean:Oe,booleanish:kt,commaOrSpaceSeparated:gn,commaSeparated:Fl,number:me,overloadedBoolean:Op,spaceSeparated:at},Symbol.toStringTag,{value:"Module"})),ep=Object.keys(Rp);class pm extends on{constructor(n,i,l,o){let s=-1;if(super(n,i),U1(this,"space",o),typeof l=="number")for(;++s4&&i.slice(0,4)==="data"&&R4.test(n)){if(n.charAt(4)==="-"){const s=n.slice(5).replace(I1,H4);l="data"+s.charAt(0).toUpperCase()+s.slice(1)}else{const s=n.slice(4);if(!I1.test(s)){let u=s.replace(O4,L4);u.charAt(0)!=="-"&&(u="-"+u),n="data"+u}}o=pm}return new o(l,n)}function L4(e){return"-"+e.toLowerCase()}function H4(e){return e.charAt(1).toUpperCase()}const B4=IS([VS,A4,$S,XS,PS],"html"),mm=IS([VS,M4,$S,XS,PS],"svg");function q4(e){return e.join(" ").trim()}var Hl={},tp,V1;function U4(){if(V1)return tp;V1=1;var e=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//g,n=/\n/g,i=/^\s*/,l=/^(\*?[-#/*\\\w]+(\[[0-9a-z_-]+\])?)\s*/,o=/^:\s*/,s=/^((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};])+)/,u=/^[;\s]*/,f=/^\s+|\s+$/g,d=` -`,h="/",m="*",p="",y="comment",v="declaration";function w(S,_){if(typeof S!="string")throw new TypeError("First argument must be a string");if(!S)return[];_=_||{};var z=1,E=1;function A(L){var G=L.match(n);G&&(z+=G.length);var R=L.lastIndexOf(d);E=~R?L.length-R:E+L.length}function B(){var L={line:z,column:E};return function(G){return G.position=new T(L),D(),G}}function T(L){this.start=L,this.end={line:z,column:E},this.source=_.source}T.prototype.content=S;function q(L){var G=new Error(_.source+":"+z+":"+E+": "+L);if(G.reason=L,G.filename=_.source,G.line=z,G.column=E,G.source=S,!_.silent)throw G}function M(L){var G=L.exec(S);if(G){var R=G[0];return A(R),S=S.slice(R.length),G}}function D(){M(i)}function X(L){var G;for(L=L||[];G=H();)G!==!1&&L.push(G);return L}function H(){var L=B();if(!(h!=S.charAt(0)||m!=S.charAt(1))){for(var G=2;p!=S.charAt(G)&&(m!=S.charAt(G)||h!=S.charAt(G+1));)++G;if(G+=2,p===S.charAt(G-1))return q("End of comment missing");var R=S.slice(2,G-2);return E+=2,A(R),S=S.slice(G),E+=2,L({type:y,comment:R})}}function I(){var L=B(),G=M(l);if(G){if(H(),!M(o))return q("property missing ':'");var R=M(s),$=L({type:v,property:k(G[0].replace(e,p)),value:R?k(R[0].replace(e,p)):p});return M(u),$}}function ee(){var L=[];X(L);for(var G;G=I();)G!==!1&&(L.push(G),X(L));return L}return D(),ee()}function k(S){return S?S.replace(f,p):p}return tp=w,tp}var Y1;function I4(){if(Y1)return Hl;Y1=1;var e=Hl&&Hl.__importDefault||function(l){return l&&l.__esModule?l:{default:l}};Object.defineProperty(Hl,"__esModule",{value:!0}),Hl.default=i;const n=e(U4());function i(l,o){let s=null;if(!l||typeof l!="string")return s;const u=(0,n.default)(l),f=typeof o=="function";return u.forEach(d=>{if(d.type!=="declaration")return;const{property:h,value:m}=d;f?o(h,m,d):m&&(s=s||{},s[h]=m)}),s}return Hl}var oo={},G1;function V4(){if(G1)return oo;G1=1,Object.defineProperty(oo,"__esModule",{value:!0}),oo.camelCase=void 0;var e=/^--[a-zA-Z0-9_-]+$/,n=/-([a-z])/g,i=/^[^-]+$/,l=/^-(webkit|moz|ms|o|khtml)-/,o=/^-(ms)-/,s=function(h){return!h||i.test(h)||e.test(h)},u=function(h,m){return m.toUpperCase()},f=function(h,m){return"".concat(m,"-")},d=function(h,m){return m===void 0&&(m={}),s(h)?h:(h=h.toLowerCase(),m.reactCompat?h=h.replace(o,f):h=h.replace(l,f),h.replace(n,u))};return oo.camelCase=d,oo}var so,$1;function Y4(){if($1)return so;$1=1;var e=so&&so.__importDefault||function(o){return o&&o.__esModule?o:{default:o}},n=e(I4()),i=V4();function l(o,s){var u={};return!o||typeof o!="string"||(0,n.default)(o,function(f,d){f&&d&&(u[(0,i.camelCase)(f,s)]=d)}),u}return l.default=l,so=l,so}var G4=Y4();const $4=Lo(G4),FS=QS("end"),gm=QS("start");function QS(e){return n;function n(i){const l=i&&i.position&&i.position[e]||{};if(typeof l.line=="number"&&l.line>0&&typeof l.column=="number"&&l.column>0)return{line:l.line,column:l.column,offset:typeof l.offset=="number"&&l.offset>-1?l.offset:void 0}}}function X4(e){const n=gm(e),i=FS(e);if(n&&i)return{start:n,end:i}}function bo(e){return!e||typeof e!="object"?"":"position"in e||"type"in e?X1(e.position):"start"in e||"end"in e?X1(e):"line"in e||"column"in e?Dp(e):""}function Dp(e){return P1(e&&e.line)+":"+P1(e&&e.column)}function X1(e){return Dp(e&&e.start)+"-"+Dp(e&&e.end)}function P1(e){return e&&typeof e=="number"?e:1}class Gt extends Error{constructor(n,i,l){super(),typeof i=="string"&&(l=i,i=void 0);let o="",s={},u=!1;if(i&&("line"in i&&"column"in i?s={place:i}:"start"in i&&"end"in i?s={place:i}:"type"in i?s={ancestors:[i],place:i.position}:s={...i}),typeof n=="string"?o=n:!s.cause&&n&&(u=!0,o=n.message,s.cause=n),!s.ruleId&&!s.source&&typeof l=="string"){const d=l.indexOf(":");d===-1?s.ruleId=l:(s.source=l.slice(0,d),s.ruleId=l.slice(d+1))}if(!s.place&&s.ancestors&&s.ancestors){const d=s.ancestors[s.ancestors.length-1];d&&(s.place=d.position)}const f=s.place&&"start"in s.place?s.place.start:s.place;this.ancestors=s.ancestors||void 0,this.cause=s.cause||void 0,this.column=f?f.column:void 0,this.fatal=void 0,this.file="",this.message=o,this.line=f?f.line:void 0,this.name=bo(s.place)||"1:1",this.place=s.place||void 0,this.reason=this.message,this.ruleId=s.ruleId||void 0,this.source=s.source||void 0,this.stack=u&&s.cause&&typeof s.cause.stack=="string"?s.cause.stack:"",this.actual=void 0,this.expected=void 0,this.note=void 0,this.url=void 0}}Gt.prototype.file="";Gt.prototype.name="";Gt.prototype.reason="";Gt.prototype.message="";Gt.prototype.stack="";Gt.prototype.column=void 0;Gt.prototype.line=void 0;Gt.prototype.ancestors=void 0;Gt.prototype.cause=void 0;Gt.prototype.fatal=void 0;Gt.prototype.place=void 0;Gt.prototype.ruleId=void 0;Gt.prototype.source=void 0;const ym={}.hasOwnProperty,P4=new Map,F4=/[A-Z]/g,Q4=new Set(["table","tbody","thead","tfoot","tr"]),Z4=new Set(["td","th"]),ZS="https://github.com/syntax-tree/hast-util-to-jsx-runtime";function K4(e,n){if(!n||n.Fragment===void 0)throw new TypeError("Expected `Fragment` in options");const i=n.filePath||void 0;let l;if(n.development){if(typeof n.jsxDEV!="function")throw new TypeError("Expected `jsxDEV` in options when `development: true`");l=l5(i,n.jsxDEV)}else{if(typeof n.jsx!="function")throw new TypeError("Expected `jsx` in production options");if(typeof n.jsxs!="function")throw new TypeError("Expected `jsxs` in production options");l=i5(i,n.jsx,n.jsxs)}const o={Fragment:n.Fragment,ancestors:[],components:n.components||{},create:l,elementAttributeNameCase:n.elementAttributeNameCase||"react",evaluater:n.createEvaluater?n.createEvaluater():void 0,filePath:i,ignoreInvalidStyle:n.ignoreInvalidStyle||!1,passKeys:n.passKeys!==!1,passNode:n.passNode||!1,schema:n.space==="svg"?mm:B4,stylePropertyNameCase:n.stylePropertyNameCase||"dom",tableCellAlignToStyle:n.tableCellAlignToStyle!==!1},s=KS(o,e,void 0);return s&&typeof s!="string"?s:o.create(e,o.Fragment,{children:s||void 0},void 0)}function KS(e,n,i){if(n.type==="element")return J4(e,n,i);if(n.type==="mdxFlowExpression"||n.type==="mdxTextExpression")return W4(e,n);if(n.type==="mdxJsxFlowElement"||n.type==="mdxJsxTextElement")return t5(e,n,i);if(n.type==="mdxjsEsm")return e5(e,n);if(n.type==="root")return n5(e,n,i);if(n.type==="text")return r5(e,n)}function J4(e,n,i){const l=e.schema;let o=l;n.tagName.toLowerCase()==="svg"&&l.space==="html"&&(o=mm,e.schema=o),e.ancestors.push(n);const s=WS(e,n.tagName,!1),u=a5(e,n);let f=vm(e,n);return Q4.has(n.tagName)&&(f=f.filter(function(d){return typeof d=="string"?!T4(d):!0})),JS(e,u,s,n),xm(u,f),e.ancestors.pop(),e.schema=l,e.create(n,s,u,i)}function W4(e,n){if(n.data&&n.data.estree&&e.evaluater){const l=n.data.estree.body[0];return l.type,e.evaluater.evaluateExpression(l.expression)}Do(e,n.position)}function e5(e,n){if(n.data&&n.data.estree&&e.evaluater)return e.evaluater.evaluateProgram(n.data.estree);Do(e,n.position)}function t5(e,n,i){const l=e.schema;let o=l;n.name==="svg"&&l.space==="html"&&(o=mm,e.schema=o),e.ancestors.push(n);const s=n.name===null?e.Fragment:WS(e,n.name,!0),u=o5(e,n),f=vm(e,n);return JS(e,u,s,n),xm(u,f),e.ancestors.pop(),e.schema=l,e.create(n,s,u,i)}function n5(e,n,i){const l={};return xm(l,vm(e,n)),e.create(n,e.Fragment,l,i)}function r5(e,n){return n.value}function JS(e,n,i,l){typeof i!="string"&&i!==e.Fragment&&e.passNode&&(n.node=l)}function xm(e,n){if(n.length>0){const i=n.length>1?n:n[0];i&&(e.children=i)}}function i5(e,n,i){return l;function l(o,s,u,f){const h=Array.isArray(u.children)?i:n;return f?h(s,u,f):h(s,u)}}function l5(e,n){return i;function i(l,o,s,u){const f=Array.isArray(s.children),d=gm(l);return n(o,s,u,f,{columnNumber:d?d.column-1:void 0,fileName:e,lineNumber:d?d.line:void 0},void 0)}}function a5(e,n){const i={};let l,o;for(o in n.properties)if(o!=="children"&&ym.call(n.properties,o)){const s=s5(e,o,n.properties[o]);if(s){const[u,f]=s;e.tableCellAlignToStyle&&u==="align"&&typeof f=="string"&&Z4.has(n.tagName)?l=f:i[u]=f}}if(l){const s=i.style||(i.style={});s[e.stylePropertyNameCase==="css"?"text-align":"textAlign"]=l}return i}function o5(e,n){const i={};for(const l of n.attributes)if(l.type==="mdxJsxExpressionAttribute")if(l.data&&l.data.estree&&e.evaluater){const s=l.data.estree.body[0];s.type;const u=s.expression;u.type;const f=u.properties[0];f.type,Object.assign(i,e.evaluater.evaluateExpression(f.argument))}else Do(e,n.position);else{const o=l.name;let s;if(l.value&&typeof l.value=="object")if(l.value.data&&l.value.data.estree&&e.evaluater){const f=l.value.data.estree.body[0];f.type,s=e.evaluater.evaluateExpression(f.expression)}else Do(e,n.position);else s=l.value===null?!0:l.value;i[o]=s}return i}function vm(e,n){const i=[];let l=-1;const o=e.passKeys?new Map:P4;for(;++lo?0:o+n:n=n>o?o:n,i=i>0?i:0,l.length<1e4)u=Array.from(l),u.unshift(n,i),e.splice(...u);else for(i&&e.splice(n,i);s0?(nr(e,e.length,0,n),e):n}const Z1={}.hasOwnProperty;function g5(e){const n={};let i=-1;for(;++i13&&i<32||i>126&&i<160||i>55295&&i<57344||i>64975&&i<65008||(i&65535)===65535||(i&65535)===65534||i>1114111?"�":String.fromCodePoint(i)}function Ql(e){return e.replace(/[\t\n\r ]+/g," ").replace(/^ | $/g,"").toLowerCase().toUpperCase()}const Jn=di(/[A-Za-z]/),vn=di(/[\dA-Za-z]/),v5=di(/[#-'*+\--9=?A-Z^-~]/);function Lp(e){return e!==null&&(e<32||e===127)}const Hp=di(/\d/),b5=di(/[\dA-Fa-f]/),w5=di(/[!-/:-@[-`{-~]/);function Te(e){return e!==null&&e<-2}function rn(e){return e!==null&&(e<0||e===32)}function Qe(e){return e===-2||e===-1||e===32}const S5=di(new RegExp("\\p{P}|\\p{S}","u")),_5=di(/\s/);function di(e){return n;function n(i){return i!==null&&i>-1&&e.test(String.fromCharCode(i))}}function oa(e){const n=[];let i=-1,l=0,o=0;for(;++i55295&&s<57344){const f=e.charCodeAt(i+1);s<56320&&f>56319&&f<57344?(u=String.fromCharCode(s,f),o=1):u="�"}else u=String.fromCharCode(s);u&&(n.push(e.slice(l,i),encodeURIComponent(u)),l=i+o+1,u=""),o&&(i+=o,o=0)}return n.join("")+e.slice(l)}function ot(e,n,i,l){const o=l?l-1:Number.POSITIVE_INFINITY;let s=0;return u;function u(d){return Qe(d)?(e.enter(i),f(d)):n(d)}function f(d){return Qe(d)&&s++u))return;const q=n.events.length;let M=q,D,X;for(;M--;)if(n.events[M][0]==="exit"&&n.events[M][1].type==="chunkFlow"){if(D){X=n.events[M][1].end;break}D=!0}for(_(l),T=q;TE;){const B=i[A];n.containerState=B[1],B[0].exit.call(n,e)}i.length=E}function z(){o.write([null]),s=void 0,o=void 0,n.containerState._closeFlow=void 0}}function T5(e,n,i){return ot(e,e.attempt(this.parser.constructs.document,n,i),"linePrefix",this.parser.constructs.disable.null.includes("codeIndented")?void 0:4)}function J1(e){if(e===null||rn(e)||_5(e))return 1;if(S5(e))return 2}function wm(e,n,i){const l=[];let o=-1;for(;++o1&&e[i][1].end.offset-e[i][1].start.offset>1?2:1;const p={...e[l][1].end},y={...e[i][1].start};W1(p,-d),W1(y,d),u={type:d>1?"strongSequence":"emphasisSequence",start:p,end:{...e[l][1].end}},f={type:d>1?"strongSequence":"emphasisSequence",start:{...e[i][1].start},end:y},s={type:d>1?"strongText":"emphasisText",start:{...e[l][1].end},end:{...e[i][1].start}},o={type:d>1?"strong":"emphasis",start:{...u.start},end:{...f.end}},e[l][1].end={...u.start},e[i][1].start={...f.end},h=[],e[l][1].end.offset-e[l][1].start.offset&&(h=An(h,[["enter",e[l][1],n],["exit",e[l][1],n]])),h=An(h,[["enter",o,n],["enter",u,n],["exit",u,n],["enter",s,n]]),h=An(h,wm(n.parser.constructs.insideSpan.null,e.slice(l+1,i),n)),h=An(h,[["exit",s,n],["enter",f,n],["exit",f,n],["exit",o,n]]),e[i][1].end.offset-e[i][1].start.offset?(m=2,h=An(h,[["enter",e[i][1],n],["exit",e[i][1],n]])):m=0,nr(e,l-1,i-l+3,h),i=l+h.length-m-2;break}}for(i=-1;++i0&&Qe(T)?ot(e,z,"linePrefix",s+1)(T):z(T)}function z(T){return T===null||Te(T)?e.check(eb,k,A)(T):(e.enter("codeFlowValue"),E(T))}function E(T){return T===null||Te(T)?(e.exit("codeFlowValue"),z(T)):(e.consume(T),E)}function A(T){return e.exit("codeFenced"),n(T)}function B(T,q,M){let D=0;return X;function X(G){return T.enter("lineEnding"),T.consume(G),T.exit("lineEnding"),H}function H(G){return T.enter("codeFencedFence"),Qe(G)?ot(T,I,"linePrefix",l.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(G):I(G)}function I(G){return G===f?(T.enter("codeFencedFenceSequence"),ee(G)):M(G)}function ee(G){return G===f?(D++,T.consume(G),ee):D>=u?(T.exit("codeFencedFenceSequence"),Qe(G)?ot(T,L,"whitespace")(G):L(G)):M(G)}function L(G){return G===null||Te(G)?(T.exit("codeFencedFence"),q(G)):M(G)}}}function U5(e,n,i){const l=this;return o;function o(u){return u===null?i(u):(e.enter("lineEnding"),e.consume(u),e.exit("lineEnding"),s)}function s(u){return l.parser.lazy[l.now().line]?i(u):n(u)}}const rp={name:"codeIndented",tokenize:V5},I5={partial:!0,tokenize:Y5};function V5(e,n,i){const l=this;return o;function o(h){return e.enter("codeIndented"),ot(e,s,"linePrefix",5)(h)}function s(h){const m=l.events[l.events.length-1];return m&&m[1].type==="linePrefix"&&m[2].sliceSerialize(m[1],!0).length>=4?u(h):i(h)}function u(h){return h===null?d(h):Te(h)?e.attempt(I5,u,d)(h):(e.enter("codeFlowValue"),f(h))}function f(h){return h===null||Te(h)?(e.exit("codeFlowValue"),u(h)):(e.consume(h),f)}function d(h){return e.exit("codeIndented"),n(h)}}function Y5(e,n,i){const l=this;return o;function o(u){return l.parser.lazy[l.now().line]?i(u):Te(u)?(e.enter("lineEnding"),e.consume(u),e.exit("lineEnding"),o):ot(e,s,"linePrefix",5)(u)}function s(u){const f=l.events[l.events.length-1];return f&&f[1].type==="linePrefix"&&f[2].sliceSerialize(f[1],!0).length>=4?n(u):Te(u)?o(u):i(u)}}const G5={name:"codeText",previous:X5,resolve:$5,tokenize:P5};function $5(e){let n=e.length-4,i=3,l,o;if((e[i][1].type==="lineEnding"||e[i][1].type==="space")&&(e[n][1].type==="lineEnding"||e[n][1].type==="space")){for(l=i;++l=this.left.length+this.right.length)throw new RangeError("Cannot access index `"+n+"` in a splice buffer of size `"+(this.left.length+this.right.length)+"`");return nthis.left.length?this.right.slice(this.right.length-l+this.left.length,this.right.length-n+this.left.length).reverse():this.left.slice(n).concat(this.right.slice(this.right.length-l+this.left.length).reverse())}splice(n,i,l){const o=i||0;this.setCursor(Math.trunc(n));const s=this.right.splice(this.right.length-o,Number.POSITIVE_INFINITY);return l&&uo(this.left,l),s.reverse()}pop(){return this.setCursor(Number.POSITIVE_INFINITY),this.left.pop()}push(n){this.setCursor(Number.POSITIVE_INFINITY),this.left.push(n)}pushMany(n){this.setCursor(Number.POSITIVE_INFINITY),uo(this.left,n)}unshift(n){this.setCursor(0),this.right.push(n)}unshiftMany(n){this.setCursor(0),uo(this.right,n.reverse())}setCursor(n){if(!(n===this.left.length||n>this.left.length&&this.right.length===0||n<0&&this.left.length===0))if(n=4?n(u):e.interrupt(l.parser.constructs.flow,i,n)(u)}}function a_(e,n,i,l,o,s,u,f,d){const h=d||Number.POSITIVE_INFINITY;let m=0;return p;function p(_){return _===60?(e.enter(l),e.enter(o),e.enter(s),e.consume(_),e.exit(s),y):_===null||_===32||_===41||Lp(_)?i(_):(e.enter(l),e.enter(u),e.enter(f),e.enter("chunkString",{contentType:"string"}),k(_))}function y(_){return _===62?(e.enter(s),e.consume(_),e.exit(s),e.exit(o),e.exit(l),n):(e.enter(f),e.enter("chunkString",{contentType:"string"}),v(_))}function v(_){return _===62?(e.exit("chunkString"),e.exit(f),y(_)):_===null||_===60||Te(_)?i(_):(e.consume(_),_===92?w:v)}function w(_){return _===60||_===62||_===92?(e.consume(_),v):v(_)}function k(_){return!m&&(_===null||_===41||rn(_))?(e.exit("chunkString"),e.exit(f),e.exit(u),e.exit(l),n(_)):m999||v===null||v===91||v===93&&!d||v===94&&!f&&"_hiddenFootnoteSupport"in u.parser.constructs?i(v):v===93?(e.exit(s),e.enter(o),e.consume(v),e.exit(o),e.exit(l),n):Te(v)?(e.enter("lineEnding"),e.consume(v),e.exit("lineEnding"),m):(e.enter("chunkString",{contentType:"string"}),p(v))}function p(v){return v===null||v===91||v===93||Te(v)||f++>999?(e.exit("chunkString"),m(v)):(e.consume(v),d||(d=!Qe(v)),v===92?y:p)}function y(v){return v===91||v===92||v===93?(e.consume(v),f++,p):p(v)}}function s_(e,n,i,l,o,s){let u;return f;function f(y){return y===34||y===39||y===40?(e.enter(l),e.enter(o),e.consume(y),e.exit(o),u=y===40?41:y,d):i(y)}function d(y){return y===u?(e.enter(o),e.consume(y),e.exit(o),e.exit(l),n):(e.enter(s),h(y))}function h(y){return y===u?(e.exit(s),d(u)):y===null?i(y):Te(y)?(e.enter("lineEnding"),e.consume(y),e.exit("lineEnding"),ot(e,h,"linePrefix")):(e.enter("chunkString",{contentType:"string"}),m(y))}function m(y){return y===u||y===null||Te(y)?(e.exit("chunkString"),h(y)):(e.consume(y),y===92?p:m)}function p(y){return y===u||y===92?(e.consume(y),m):m(y)}}function wo(e,n){let i;return l;function l(o){return Te(o)?(e.enter("lineEnding"),e.consume(o),e.exit("lineEnding"),i=!0,l):Qe(o)?ot(e,l,i?"linePrefix":"lineSuffix")(o):n(o)}}const tO={name:"definition",tokenize:rO},nO={partial:!0,tokenize:iO};function rO(e,n,i){const l=this;let o;return s;function s(v){return e.enter("definition"),u(v)}function u(v){return o_.call(l,e,f,i,"definitionLabel","definitionLabelMarker","definitionLabelString")(v)}function f(v){return o=Ql(l.sliceSerialize(l.events[l.events.length-1][1]).slice(1,-1)),v===58?(e.enter("definitionMarker"),e.consume(v),e.exit("definitionMarker"),d):i(v)}function d(v){return rn(v)?wo(e,h)(v):h(v)}function h(v){return a_(e,m,i,"definitionDestination","definitionDestinationLiteral","definitionDestinationLiteralMarker","definitionDestinationRaw","definitionDestinationString")(v)}function m(v){return e.attempt(nO,p,p)(v)}function p(v){return Qe(v)?ot(e,y,"whitespace")(v):y(v)}function y(v){return v===null||Te(v)?(e.exit("definition"),l.parser.defined.push(o),n(v)):i(v)}}function iO(e,n,i){return l;function l(f){return rn(f)?wo(e,o)(f):i(f)}function o(f){return s_(e,s,i,"definitionTitle","definitionTitleMarker","definitionTitleString")(f)}function s(f){return Qe(f)?ot(e,u,"whitespace")(f):u(f)}function u(f){return f===null||Te(f)?n(f):i(f)}}const lO={name:"hardBreakEscape",tokenize:aO};function aO(e,n,i){return l;function l(s){return e.enter("hardBreakEscape"),e.consume(s),o}function o(s){return Te(s)?(e.exit("hardBreakEscape"),n(s)):i(s)}}const oO={name:"headingAtx",resolve:sO,tokenize:uO};function sO(e,n){let i=e.length-2,l=3,o,s;return e[l][1].type==="whitespace"&&(l+=2),i-2>l&&e[i][1].type==="whitespace"&&(i-=2),e[i][1].type==="atxHeadingSequence"&&(l===i-1||i-4>l&&e[i-2][1].type==="whitespace")&&(i-=l+1===i?2:4),i>l&&(o={type:"atxHeadingText",start:e[l][1].start,end:e[i][1].end},s={type:"chunkText",start:e[l][1].start,end:e[i][1].end,contentType:"text"},nr(e,l,i-l+1,[["enter",o,n],["enter",s,n],["exit",s,n],["exit",o,n]])),e}function uO(e,n,i){let l=0;return o;function o(m){return e.enter("atxHeading"),s(m)}function s(m){return e.enter("atxHeadingSequence"),u(m)}function u(m){return m===35&&l++<6?(e.consume(m),u):m===null||rn(m)?(e.exit("atxHeadingSequence"),f(m)):i(m)}function f(m){return m===35?(e.enter("atxHeadingSequence"),d(m)):m===null||Te(m)?(e.exit("atxHeading"),n(m)):Qe(m)?ot(e,f,"whitespace")(m):(e.enter("atxHeadingText"),h(m))}function d(m){return m===35?(e.consume(m),d):(e.exit("atxHeadingSequence"),f(m))}function h(m){return m===null||m===35||rn(m)?(e.exit("atxHeadingText"),f(m)):(e.consume(m),h)}}const cO=["address","article","aside","base","basefont","blockquote","body","caption","center","col","colgroup","dd","details","dialog","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","nav","noframes","ol","optgroup","option","p","param","search","section","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"],nb=["pre","script","style","textarea"],fO={concrete:!0,name:"htmlFlow",resolveTo:pO,tokenize:mO},dO={partial:!0,tokenize:yO},hO={partial:!0,tokenize:gO};function pO(e){let n=e.length;for(;n--&&!(e[n][0]==="enter"&&e[n][1].type==="htmlFlow"););return n>1&&e[n-2][1].type==="linePrefix"&&(e[n][1].start=e[n-2][1].start,e[n+1][1].start=e[n-2][1].start,e.splice(n-2,2)),e}function mO(e,n,i){const l=this;let o,s,u,f,d;return h;function h(N){return m(N)}function m(N){return e.enter("htmlFlow"),e.enter("htmlFlowData"),e.consume(N),p}function p(N){return N===33?(e.consume(N),y):N===47?(e.consume(N),s=!0,k):N===63?(e.consume(N),o=3,l.interrupt?n:j):Jn(N)?(e.consume(N),u=String.fromCharCode(N),S):i(N)}function y(N){return N===45?(e.consume(N),o=2,v):N===91?(e.consume(N),o=5,f=0,w):Jn(N)?(e.consume(N),o=4,l.interrupt?n:j):i(N)}function v(N){return N===45?(e.consume(N),l.interrupt?n:j):i(N)}function w(N){const Y="CDATA[";return N===Y.charCodeAt(f++)?(e.consume(N),f===Y.length?l.interrupt?n:I:w):i(N)}function k(N){return Jn(N)?(e.consume(N),u=String.fromCharCode(N),S):i(N)}function S(N){if(N===null||N===47||N===62||rn(N)){const Y=N===47,F=u.toLowerCase();return!Y&&!s&&nb.includes(F)?(o=1,l.interrupt?n(N):I(N)):cO.includes(u.toLowerCase())?(o=6,Y?(e.consume(N),_):l.interrupt?n(N):I(N)):(o=7,l.interrupt&&!l.parser.lazy[l.now().line]?i(N):s?z(N):E(N))}return N===45||vn(N)?(e.consume(N),u+=String.fromCharCode(N),S):i(N)}function _(N){return N===62?(e.consume(N),l.interrupt?n:I):i(N)}function z(N){return Qe(N)?(e.consume(N),z):X(N)}function E(N){return N===47?(e.consume(N),X):N===58||N===95||Jn(N)?(e.consume(N),A):Qe(N)?(e.consume(N),E):X(N)}function A(N){return N===45||N===46||N===58||N===95||vn(N)?(e.consume(N),A):B(N)}function B(N){return N===61?(e.consume(N),T):Qe(N)?(e.consume(N),B):E(N)}function T(N){return N===null||N===60||N===61||N===62||N===96?i(N):N===34||N===39?(e.consume(N),d=N,q):Qe(N)?(e.consume(N),T):M(N)}function q(N){return N===d?(e.consume(N),d=null,D):N===null||Te(N)?i(N):(e.consume(N),q)}function M(N){return N===null||N===34||N===39||N===47||N===60||N===61||N===62||N===96||rn(N)?B(N):(e.consume(N),M)}function D(N){return N===47||N===62||Qe(N)?E(N):i(N)}function X(N){return N===62?(e.consume(N),H):i(N)}function H(N){return N===null||Te(N)?I(N):Qe(N)?(e.consume(N),H):i(N)}function I(N){return N===45&&o===2?(e.consume(N),R):N===60&&o===1?(e.consume(N),$):N===62&&o===4?(e.consume(N),U):N===63&&o===3?(e.consume(N),j):N===93&&o===5?(e.consume(N),J):Te(N)&&(o===6||o===7)?(e.exit("htmlFlowData"),e.check(dO,P,ee)(N)):N===null||Te(N)?(e.exit("htmlFlowData"),ee(N)):(e.consume(N),I)}function ee(N){return e.check(hO,L,P)(N)}function L(N){return e.enter("lineEnding"),e.consume(N),e.exit("lineEnding"),G}function G(N){return N===null||Te(N)?ee(N):(e.enter("htmlFlowData"),I(N))}function R(N){return N===45?(e.consume(N),j):I(N)}function $(N){return N===47?(e.consume(N),u="",Z):I(N)}function Z(N){if(N===62){const Y=u.toLowerCase();return nb.includes(Y)?(e.consume(N),U):I(N)}return Jn(N)&&u.length<8?(e.consume(N),u+=String.fromCharCode(N),Z):I(N)}function J(N){return N===93?(e.consume(N),j):I(N)}function j(N){return N===62?(e.consume(N),U):N===45&&o===2?(e.consume(N),j):I(N)}function U(N){return N===null||Te(N)?(e.exit("htmlFlowData"),P(N)):(e.consume(N),U)}function P(N){return e.exit("htmlFlow"),n(N)}}function gO(e,n,i){const l=this;return o;function o(u){return Te(u)?(e.enter("lineEnding"),e.consume(u),e.exit("lineEnding"),s):i(u)}function s(u){return l.parser.lazy[l.now().line]?i(u):n(u)}}function yO(e,n,i){return l;function l(o){return e.enter("lineEnding"),e.consume(o),e.exit("lineEnding"),e.attempt(wc,n,i)}}const xO={name:"htmlText",tokenize:vO};function vO(e,n,i){const l=this;let o,s,u;return f;function f(j){return e.enter("htmlText"),e.enter("htmlTextData"),e.consume(j),d}function d(j){return j===33?(e.consume(j),h):j===47?(e.consume(j),B):j===63?(e.consume(j),E):Jn(j)?(e.consume(j),M):i(j)}function h(j){return j===45?(e.consume(j),m):j===91?(e.consume(j),s=0,w):Jn(j)?(e.consume(j),z):i(j)}function m(j){return j===45?(e.consume(j),v):i(j)}function p(j){return j===null?i(j):j===45?(e.consume(j),y):Te(j)?(u=p,$(j)):(e.consume(j),p)}function y(j){return j===45?(e.consume(j),v):p(j)}function v(j){return j===62?R(j):j===45?y(j):p(j)}function w(j){const U="CDATA[";return j===U.charCodeAt(s++)?(e.consume(j),s===U.length?k:w):i(j)}function k(j){return j===null?i(j):j===93?(e.consume(j),S):Te(j)?(u=k,$(j)):(e.consume(j),k)}function S(j){return j===93?(e.consume(j),_):k(j)}function _(j){return j===62?R(j):j===93?(e.consume(j),_):k(j)}function z(j){return j===null||j===62?R(j):Te(j)?(u=z,$(j)):(e.consume(j),z)}function E(j){return j===null?i(j):j===63?(e.consume(j),A):Te(j)?(u=E,$(j)):(e.consume(j),E)}function A(j){return j===62?R(j):E(j)}function B(j){return Jn(j)?(e.consume(j),T):i(j)}function T(j){return j===45||vn(j)?(e.consume(j),T):q(j)}function q(j){return Te(j)?(u=q,$(j)):Qe(j)?(e.consume(j),q):R(j)}function M(j){return j===45||vn(j)?(e.consume(j),M):j===47||j===62||rn(j)?D(j):i(j)}function D(j){return j===47?(e.consume(j),R):j===58||j===95||Jn(j)?(e.consume(j),X):Te(j)?(u=D,$(j)):Qe(j)?(e.consume(j),D):R(j)}function X(j){return j===45||j===46||j===58||j===95||vn(j)?(e.consume(j),X):H(j)}function H(j){return j===61?(e.consume(j),I):Te(j)?(u=H,$(j)):Qe(j)?(e.consume(j),H):D(j)}function I(j){return j===null||j===60||j===61||j===62||j===96?i(j):j===34||j===39?(e.consume(j),o=j,ee):Te(j)?(u=I,$(j)):Qe(j)?(e.consume(j),I):(e.consume(j),L)}function ee(j){return j===o?(e.consume(j),o=void 0,G):j===null?i(j):Te(j)?(u=ee,$(j)):(e.consume(j),ee)}function L(j){return j===null||j===34||j===39||j===60||j===61||j===96?i(j):j===47||j===62||rn(j)?D(j):(e.consume(j),L)}function G(j){return j===47||j===62||rn(j)?D(j):i(j)}function R(j){return j===62?(e.consume(j),e.exit("htmlTextData"),e.exit("htmlText"),n):i(j)}function $(j){return e.exit("htmlTextData"),e.enter("lineEnding"),e.consume(j),e.exit("lineEnding"),Z}function Z(j){return Qe(j)?ot(e,J,"linePrefix",l.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(j):J(j)}function J(j){return e.enter("htmlTextData"),u(j)}}const Sm={name:"labelEnd",resolveAll:_O,resolveTo:EO,tokenize:NO},bO={tokenize:kO},wO={tokenize:CO},SO={tokenize:TO};function _O(e){let n=-1;const i=[];for(;++n=3&&(h===null||Te(h))?(e.exit("thematicBreak"),n(h)):i(h)}function d(h){return h===o?(e.consume(h),l++,d):(e.exit("thematicBreakSequence"),Qe(h)?ot(e,f,"whitespace")(h):f(h))}}const tn={continuation:{tokenize:BO},exit:UO,name:"list",tokenize:HO},DO={partial:!0,tokenize:IO},LO={partial:!0,tokenize:qO};function HO(e,n,i){const l=this,o=l.events[l.events.length-1];let s=o&&o[1].type==="linePrefix"?o[2].sliceSerialize(o[1],!0).length:0,u=0;return f;function f(v){const w=l.containerState.type||(v===42||v===43||v===45?"listUnordered":"listOrdered");if(w==="listUnordered"?!l.containerState.marker||v===l.containerState.marker:Hp(v)){if(l.containerState.type||(l.containerState.type=w,e.enter(w,{_container:!0})),w==="listUnordered")return e.enter("listItemPrefix"),v===42||v===45?e.check(Vu,i,h)(v):h(v);if(!l.interrupt||v===49)return e.enter("listItemPrefix"),e.enter("listItemValue"),d(v)}return i(v)}function d(v){return Hp(v)&&++u<10?(e.consume(v),d):(!l.interrupt||u<2)&&(l.containerState.marker?v===l.containerState.marker:v===41||v===46)?(e.exit("listItemValue"),h(v)):i(v)}function h(v){return e.enter("listItemMarker"),e.consume(v),e.exit("listItemMarker"),l.containerState.marker=l.containerState.marker||v,e.check(wc,l.interrupt?i:m,e.attempt(DO,y,p))}function m(v){return l.containerState.initialBlankLine=!0,s++,y(v)}function p(v){return Qe(v)?(e.enter("listItemPrefixWhitespace"),e.consume(v),e.exit("listItemPrefixWhitespace"),y):i(v)}function y(v){return l.containerState.size=s+l.sliceSerialize(e.exit("listItemPrefix"),!0).length,n(v)}}function BO(e,n,i){const l=this;return l.containerState._closeFlow=void 0,e.check(wc,o,s);function o(f){return l.containerState.furtherBlankLines=l.containerState.furtherBlankLines||l.containerState.initialBlankLine,ot(e,n,"listItemIndent",l.containerState.size+1)(f)}function s(f){return l.containerState.furtherBlankLines||!Qe(f)?(l.containerState.furtherBlankLines=void 0,l.containerState.initialBlankLine=void 0,u(f)):(l.containerState.furtherBlankLines=void 0,l.containerState.initialBlankLine=void 0,e.attempt(LO,n,u)(f))}function u(f){return l.containerState._closeFlow=!0,l.interrupt=void 0,ot(e,e.attempt(tn,n,i),"linePrefix",l.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(f)}}function qO(e,n,i){const l=this;return ot(e,o,"listItemIndent",l.containerState.size+1);function o(s){const u=l.events[l.events.length-1];return u&&u[1].type==="listItemIndent"&&u[2].sliceSerialize(u[1],!0).length===l.containerState.size?n(s):i(s)}}function UO(e){e.exit(this.containerState.type)}function IO(e,n,i){const l=this;return ot(e,o,"listItemPrefixWhitespace",l.parser.constructs.disable.null.includes("codeIndented")?void 0:5);function o(s){const u=l.events[l.events.length-1];return!Qe(s)&&u&&u[1].type==="listItemPrefixWhitespace"?n(s):i(s)}}const rb={name:"setextUnderline",resolveTo:VO,tokenize:YO};function VO(e,n){let i=e.length,l,o,s;for(;i--;)if(e[i][0]==="enter"){if(e[i][1].type==="content"){l=i;break}e[i][1].type==="paragraph"&&(o=i)}else e[i][1].type==="content"&&e.splice(i,1),!s&&e[i][1].type==="definition"&&(s=i);const u={type:"setextHeading",start:{...e[l][1].start},end:{...e[e.length-1][1].end}};return e[o][1].type="setextHeadingText",s?(e.splice(o,0,["enter",u,n]),e.splice(s+1,0,["exit",e[l][1],n]),e[l][1].end={...e[s][1].end}):e[l][1]=u,e.push(["exit",u,n]),e}function YO(e,n,i){const l=this;let o;return s;function s(h){let m=l.events.length,p;for(;m--;)if(l.events[m][1].type!=="lineEnding"&&l.events[m][1].type!=="linePrefix"&&l.events[m][1].type!=="content"){p=l.events[m][1].type==="paragraph";break}return!l.parser.lazy[l.now().line]&&(l.interrupt||p)?(e.enter("setextHeadingLine"),o=h,u(h)):i(h)}function u(h){return e.enter("setextHeadingLineSequence"),f(h)}function f(h){return h===o?(e.consume(h),f):(e.exit("setextHeadingLineSequence"),Qe(h)?ot(e,d,"lineSuffix")(h):d(h))}function d(h){return h===null||Te(h)?(e.exit("setextHeadingLine"),n(h)):i(h)}}const GO={tokenize:$O};function $O(e){const n=this,i=e.attempt(wc,l,e.attempt(this.parser.constructs.flowInitial,o,ot(e,e.attempt(this.parser.constructs.flow,o,e.attempt(Z5,o)),"linePrefix")));return i;function l(s){if(s===null){e.consume(s);return}return e.enter("lineEndingBlank"),e.consume(s),e.exit("lineEndingBlank"),n.currentConstruct=void 0,i}function o(s){if(s===null){e.consume(s);return}return e.enter("lineEnding"),e.consume(s),e.exit("lineEnding"),n.currentConstruct=void 0,i}}const XO={resolveAll:c_()},PO=u_("string"),FO=u_("text");function u_(e){return{resolveAll:c_(e==="text"?QO:void 0),tokenize:n};function n(i){const l=this,o=this.parser.constructs[e],s=i.attempt(o,u,f);return u;function u(m){return h(m)?s(m):f(m)}function f(m){if(m===null){i.consume(m);return}return i.enter("data"),i.consume(m),d}function d(m){return h(m)?(i.exit("data"),s(m)):(i.consume(m),d)}function h(m){if(m===null)return!0;const p=o[m];let y=-1;if(p)for(;++y-1){const f=u[0];typeof f=="string"?u[0]=f.slice(l):u.shift()}s>0&&u.push(e[o].slice(0,s))}return u}function sR(e,n){let i=-1;const l=[];let o;for(;++i0){const $t=Ne.tokenStack[Ne.tokenStack.length-1];($t[1]||lb).call(Ne,void 0,$t[0])}for(ge.position={start:ui(ue.length>0?ue[0][1].start:{line:1,column:1,offset:0}),end:ui(ue.length>0?ue[ue.length-2][1].end:{line:1,column:1,offset:0})},Ve=-1;++Ve0&&(l.className=["language-"+o[0]]);let s={type:"element",tagName:"code",properties:l,children:[{type:"text",value:i}]};return n.meta&&(s.data={meta:n.meta}),e.patch(n,s),s=e.applyData(n,s),s={type:"element",tagName:"pre",properties:{},children:[s]},e.patch(n,s),s}function SR(e,n){const i={type:"element",tagName:"del",properties:{},children:e.all(n)};return e.patch(n,i),e.applyData(n,i)}function _R(e,n){const i={type:"element",tagName:"em",properties:{},children:e.all(n)};return e.patch(n,i),e.applyData(n,i)}function ER(e,n){const i=typeof e.options.clobberPrefix=="string"?e.options.clobberPrefix:"user-content-",l=String(n.identifier).toUpperCase(),o=oa(l.toLowerCase()),s=e.footnoteOrder.indexOf(l);let u,f=e.footnoteCounts.get(l);f===void 0?(f=0,e.footnoteOrder.push(l),u=e.footnoteOrder.length):u=s+1,f+=1,e.footnoteCounts.set(l,f);const d={type:"element",tagName:"a",properties:{href:"#"+i+"fn-"+o,id:i+"fnref-"+o+(f>1?"-"+f:""),dataFootnoteRef:!0,ariaDescribedBy:["footnote-label"]},children:[{type:"text",value:String(u)}]};e.patch(n,d);const h={type:"element",tagName:"sup",properties:{},children:[d]};return e.patch(n,h),e.applyData(n,h)}function NR(e,n){const i={type:"element",tagName:"h"+n.depth,properties:{},children:e.all(n)};return e.patch(n,i),e.applyData(n,i)}function kR(e,n){if(e.options.allowDangerousHtml){const i={type:"raw",value:n.value};return e.patch(n,i),e.applyData(n,i)}}function h_(e,n){const i=n.referenceType;let l="]";if(i==="collapsed"?l+="[]":i==="full"&&(l+="["+(n.label||n.identifier)+"]"),n.type==="imageReference")return[{type:"text",value:"!["+n.alt+l}];const o=e.all(n),s=o[0];s&&s.type==="text"?s.value="["+s.value:o.unshift({type:"text",value:"["});const u=o[o.length-1];return u&&u.type==="text"?u.value+=l:o.push({type:"text",value:l}),o}function CR(e,n){const i=String(n.identifier).toUpperCase(),l=e.definitionById.get(i);if(!l)return h_(e,n);const o={src:oa(l.url||""),alt:n.alt};l.title!==null&&l.title!==void 0&&(o.title=l.title);const s={type:"element",tagName:"img",properties:o,children:[]};return e.patch(n,s),e.applyData(n,s)}function TR(e,n){const i={src:oa(n.url)};n.alt!==null&&n.alt!==void 0&&(i.alt=n.alt),n.title!==null&&n.title!==void 0&&(i.title=n.title);const l={type:"element",tagName:"img",properties:i,children:[]};return e.patch(n,l),e.applyData(n,l)}function zR(e,n){const i={type:"text",value:n.value.replace(/\r?\n|\r/g," ")};e.patch(n,i);const l={type:"element",tagName:"code",properties:{},children:[i]};return e.patch(n,l),e.applyData(n,l)}function AR(e,n){const i=String(n.identifier).toUpperCase(),l=e.definitionById.get(i);if(!l)return h_(e,n);const o={href:oa(l.url||"")};l.title!==null&&l.title!==void 0&&(o.title=l.title);const s={type:"element",tagName:"a",properties:o,children:e.all(n)};return e.patch(n,s),e.applyData(n,s)}function MR(e,n){const i={href:oa(n.url)};n.title!==null&&n.title!==void 0&&(i.title=n.title);const l={type:"element",tagName:"a",properties:i,children:e.all(n)};return e.patch(n,l),e.applyData(n,l)}function jR(e,n,i){const l=e.all(n),o=i?OR(i):p_(n),s={},u=[];if(typeof n.checked=="boolean"){const m=l[0];let p;m&&m.type==="element"&&m.tagName==="p"?p=m:(p={type:"element",tagName:"p",properties:{},children:[]},l.unshift(p)),p.children.length>0&&p.children.unshift({type:"text",value:" "}),p.children.unshift({type:"element",tagName:"input",properties:{type:"checkbox",checked:n.checked,disabled:!0},children:[]}),s.className=["task-list-item"]}let f=-1;for(;++f1}function RR(e,n){const i={},l=e.all(n);let o=-1;for(typeof n.start=="number"&&n.start!==1&&(i.start=n.start);++o0){const u={type:"element",tagName:"tbody",properties:{},children:e.wrap(i,!0)},f=gm(n.children[1]),d=FS(n.children[n.children.length-1]);f&&d&&(u.position={start:f,end:d}),o.push(u)}const s={type:"element",tagName:"table",properties:{},children:e.wrap(o,!0)};return e.patch(n,s),e.applyData(n,s)}function qR(e,n,i){const l=i?i.children:void 0,s=(l?l.indexOf(n):1)===0?"th":"td",u=i&&i.type==="table"?i.align:void 0,f=u?u.length:n.children.length;let d=-1;const h=[];for(;++d0,!0),l[0]),o=l.index+l[0].length,l=i.exec(n);return s.push(sb(n.slice(o),o>0,!1)),s.join("")}function sb(e,n,i){let l=0,o=e.length;if(n){let s=e.codePointAt(l);for(;s===ab||s===ob;)l++,s=e.codePointAt(l)}if(i){let s=e.codePointAt(o-1);for(;s===ab||s===ob;)o--,s=e.codePointAt(o-1)}return o>l?e.slice(l,o):""}function VR(e,n){const i={type:"text",value:IR(String(n.value))};return e.patch(n,i),e.applyData(n,i)}function YR(e,n){const i={type:"element",tagName:"hr",properties:{},children:[]};return e.patch(n,i),e.applyData(n,i)}const GR={blockquote:vR,break:bR,code:wR,delete:SR,emphasis:_R,footnoteReference:ER,heading:NR,html:kR,imageReference:CR,image:TR,inlineCode:zR,linkReference:AR,link:MR,listItem:jR,list:RR,paragraph:DR,root:LR,strong:HR,table:BR,tableCell:UR,tableRow:qR,text:VR,thematicBreak:YR,toml:ju,yaml:ju,definition:ju,footnoteDefinition:ju};function ju(){}const m_=-1,Sc=0,So=1,ic=2,_m=3,Em=4,Nm=5,km=6,g_=7,y_=8,ub=typeof self=="object"?self:globalThis,$R=(e,n)=>{const i=(o,s)=>(e.set(s,o),o),l=o=>{if(e.has(o))return e.get(o);const[s,u]=n[o];switch(s){case Sc:case m_:return i(u,o);case So:{const f=i([],o);for(const d of u)f.push(l(d));return f}case ic:{const f=i({},o);for(const[d,h]of u)f[l(d)]=l(h);return f}case _m:return i(new Date(u),o);case Em:{const{source:f,flags:d}=u;return i(new RegExp(f,d),o)}case Nm:{const f=i(new Map,o);for(const[d,h]of u)f.set(l(d),l(h));return f}case km:{const f=i(new Set,o);for(const d of u)f.add(l(d));return f}case g_:{const{name:f,message:d}=u;return i(new ub[f](d),o)}case y_:return i(BigInt(u),o);case"BigInt":return i(Object(BigInt(u)),o);case"ArrayBuffer":return i(new Uint8Array(u).buffer,u);case"DataView":{const{buffer:f}=new Uint8Array(u);return i(new DataView(f),u)}}return i(new ub[s](u),o)};return l},cb=e=>$R(new Map,e)(0),Bl="",{toString:XR}={},{keys:PR}=Object,co=e=>{const n=typeof e;if(n!=="object"||!e)return[Sc,n];const i=XR.call(e).slice(8,-1);switch(i){case"Array":return[So,Bl];case"Object":return[ic,Bl];case"Date":return[_m,Bl];case"RegExp":return[Em,Bl];case"Map":return[Nm,Bl];case"Set":return[km,Bl];case"DataView":return[So,i]}return i.includes("Array")?[So,i]:i.includes("Error")?[g_,i]:[ic,i]},Ou=([e,n])=>e===Sc&&(n==="function"||n==="symbol"),FR=(e,n,i,l)=>{const o=(u,f)=>{const d=l.push(u)-1;return i.set(f,d),d},s=u=>{if(i.has(u))return i.get(u);let[f,d]=co(u);switch(f){case Sc:{let m=u;switch(d){case"bigint":f=y_,m=u.toString();break;case"function":case"symbol":if(e)throw new TypeError("unable to serialize "+d);m=null;break;case"undefined":return o([m_],u)}return o([f,m],u)}case So:{if(d){let y=u;return d==="DataView"?y=new Uint8Array(u.buffer):d==="ArrayBuffer"&&(y=new Uint8Array(u)),o([d,[...y]],u)}const m=[],p=o([f,m],u);for(const y of u)m.push(s(y));return p}case ic:{if(d)switch(d){case"BigInt":return o([d,u.toString()],u);case"Boolean":case"Number":case"String":return o([d,u.valueOf()],u)}if(n&&"toJSON"in u)return s(u.toJSON());const m=[],p=o([f,m],u);for(const y of PR(u))(e||!Ou(co(u[y])))&&m.push([s(y),s(u[y])]);return p}case _m:return o([f,u.toISOString()],u);case Em:{const{source:m,flags:p}=u;return o([f,{source:m,flags:p}],u)}case Nm:{const m=[],p=o([f,m],u);for(const[y,v]of u)(e||!(Ou(co(y))||Ou(co(v))))&&m.push([s(y),s(v)]);return p}case km:{const m=[],p=o([f,m],u);for(const y of u)(e||!Ou(co(y)))&&m.push(s(y));return p}}const{message:h}=u;return o([f,{name:d,message:h}],u)};return s},fb=(e,{json:n,lossy:i}={})=>{const l=[];return FR(!(n||i),!!n,new Map,l)(e),l},lc=typeof structuredClone=="function"?(e,n)=>n&&("json"in n||"lossy"in n)?cb(fb(e,n)):structuredClone(e):(e,n)=>cb(fb(e,n));function QR(e,n){const i=[{type:"text",value:"↩"}];return n>1&&i.push({type:"element",tagName:"sup",properties:{},children:[{type:"text",value:String(n)}]}),i}function ZR(e,n){return"Back to reference "+(e+1)+(n>1?"-"+n:"")}function KR(e){const n=typeof e.options.clobberPrefix=="string"?e.options.clobberPrefix:"user-content-",i=e.options.footnoteBackContent||QR,l=e.options.footnoteBackLabel||ZR,o=e.options.footnoteLabel||"Footnotes",s=e.options.footnoteLabelTagName||"h2",u=e.options.footnoteLabelProperties||{className:["sr-only"]},f=[];let d=-1;for(;++d0&&w.push({type:"text",value:" "});let z=typeof i=="string"?i:i(d,v);typeof z=="string"&&(z={type:"text",value:z}),w.push({type:"element",tagName:"a",properties:{href:"#"+n+"fnref-"+y+(v>1?"-"+v:""),dataFootnoteBackref:"",ariaLabel:typeof l=="string"?l:l(d,v),className:["data-footnote-backref"]},children:Array.isArray(z)?z:[z]})}const S=m[m.length-1];if(S&&S.type==="element"&&S.tagName==="p"){const z=S.children[S.children.length-1];z&&z.type==="text"?z.value+=" ":S.children.push({type:"text",value:" "}),S.children.push(...w)}else m.push(...w);const _={type:"element",tagName:"li",properties:{id:n+"fn-"+y},children:e.wrap(m,!0)};e.patch(h,_),f.push(_)}if(f.length!==0)return{type:"element",tagName:"section",properties:{dataFootnotes:!0,className:["footnotes"]},children:[{type:"element",tagName:s,properties:{...lc(u),id:"footnote-label"},children:[{type:"text",value:o}]},{type:"text",value:` -`},{type:"element",tagName:"ol",properties:{},children:e.wrap(f,!0)},{type:"text",value:` -`}]}}const x_=(function(e){if(e==null)return tD;if(typeof e=="function")return _c(e);if(typeof e=="object")return Array.isArray(e)?JR(e):WR(e);if(typeof e=="string")return eD(e);throw new Error("Expected function, string, or object as test")});function JR(e){const n=[];let i=-1;for(;++i":""))+")"})}return y;function y(){let v=v_,w,k,S;if((!n||s(d,h,m[m.length-1]||void 0))&&(v=aD(i(d,m)),v[0]===db))return v;if("children"in d&&d.children){const _=d;if(_.children&&v[0]!==iD)for(k=(l?_.children.length:-1)+u,S=m.concat(_);k>-1&&k<_.children.length;){const z=_.children[k];if(w=f(z,k,S)(),w[0]===db)return w;k=typeof w[1]=="number"?w[1]:k+u}}return v}}}function aD(e){return Array.isArray(e)?e:typeof e=="number"?[rD,e]:e==null?v_:[e]}function b_(e,n,i,l){let o,s,u;typeof n=="function"&&typeof i!="function"?(s=void 0,u=n,o=i):(s=n,u=i,o=l),lD(e,s,f,o);function f(d,h){const m=h[h.length-1],p=m?m.children.indexOf(d):void 0;return u(d,p,m)}}const qp={}.hasOwnProperty,oD={};function sD(e,n){const i=n||oD,l=new Map,o=new Map,s=new Map,u={...GR,...i.handlers},f={all:h,applyData:cD,definitionById:l,footnoteById:o,footnoteCounts:s,footnoteOrder:[],handlers:u,one:d,options:i,patch:uD,wrap:dD};return b_(e,function(m){if(m.type==="definition"||m.type==="footnoteDefinition"){const p=m.type==="definition"?l:o,y=String(m.identifier).toUpperCase();p.has(y)||p.set(y,m)}}),f;function d(m,p){const y=m.type,v=f.handlers[y];if(qp.call(f.handlers,y)&&v)return v(f,m,p);if(f.options.passThrough&&f.options.passThrough.includes(y)){if("children"in m){const{children:k,...S}=m,_=lc(S);return _.children=f.all(m),_}return lc(m)}return(f.options.unknownHandler||fD)(f,m,p)}function h(m){const p=[];if("children"in m){const y=m.children;let v=-1;for(;++v0&&i.push({type:"text",value:` -`}),i}function hb(e){let n=0,i=e.charCodeAt(n);for(;i===9||i===32;)n++,i=e.charCodeAt(n);return e.slice(n)}function pb(e,n){const i=sD(e,n),l=i.one(e,void 0),o=KR(i),s=Array.isArray(l)?{type:"root",children:l}:l||{type:"root",children:[]};return o&&s.children.push({type:"text",value:` -`},o),s}function hD(e,n){return e&&"run"in e?async function(i,l){const o=pb(i,{file:l,...n});await e.run(o,l)}:function(i,l){return pb(i,{file:l,...e||n})}}function mb(e){if(e)throw e}var lp,gb;function pD(){if(gb)return lp;gb=1;var e=Object.prototype.hasOwnProperty,n=Object.prototype.toString,i=Object.defineProperty,l=Object.getOwnPropertyDescriptor,o=function(h){return typeof Array.isArray=="function"?Array.isArray(h):n.call(h)==="[object Array]"},s=function(h){if(!h||n.call(h)!=="[object Object]")return!1;var m=e.call(h,"constructor"),p=h.constructor&&h.constructor.prototype&&e.call(h.constructor.prototype,"isPrototypeOf");if(h.constructor&&!m&&!p)return!1;var y;for(y in h);return typeof y>"u"||e.call(h,y)},u=function(h,m){i&&m.name==="__proto__"?i(h,m.name,{enumerable:!0,configurable:!0,value:m.newValue,writable:!0}):h[m.name]=m.newValue},f=function(h,m){if(m==="__proto__")if(e.call(h,m)){if(l)return l(h,m).value}else return;return h[m]};return lp=function d(){var h,m,p,y,v,w,k=arguments[0],S=1,_=arguments.length,z=!1;for(typeof k=="boolean"&&(z=k,k=arguments[1]||{},S=2),(k==null||typeof k!="object"&&typeof k!="function")&&(k={});S<_;++S)if(h=arguments[S],h!=null)for(m in h)p=f(k,m),y=f(h,m),k!==y&&(z&&y&&(s(y)||(v=o(y)))?(v?(v=!1,w=p&&o(p)?p:[]):w=p&&s(p)?p:{},u(k,{name:m,newValue:d(z,w,y)})):typeof y<"u"&&u(k,{name:m,newValue:y}));return k},lp}var mD=pD();const ap=Lo(mD);function Up(e){if(typeof e!="object"||e===null)return!1;const n=Object.getPrototypeOf(e);return(n===null||n===Object.prototype||Object.getPrototypeOf(n)===null)&&!(Symbol.toStringTag in e)&&!(Symbol.iterator in e)}function gD(){const e=[],n={run:i,use:l};return n;function i(...o){let s=-1;const u=o.pop();if(typeof u!="function")throw new TypeError("Expected function as last argument, not "+u);f(null,...o);function f(d,...h){const m=e[++s];let p=-1;if(d){u(d);return}for(;++pu.length;let d;f&&u.push(o);try{d=e.apply(this,u)}catch(h){const m=h;if(f&&i)throw m;return o(m)}f||(d&&d.then&&typeof d.then=="function"?d.then(s,o):d instanceof Error?o(d):s(d))}function o(u,...f){i||(i=!0,n(u,...f))}function s(u){o(null,u)}}const Zn={basename:xD,dirname:vD,extname:bD,join:wD,sep:"/"};function xD(e,n){if(n!==void 0&&typeof n!="string")throw new TypeError('"ext" argument must be a string');Fo(e);let i=0,l=-1,o=e.length,s;if(n===void 0||n.length===0||n.length>e.length){for(;o--;)if(e.codePointAt(o)===47){if(s){i=o+1;break}}else l<0&&(s=!0,l=o+1);return l<0?"":e.slice(i,l)}if(n===e)return"";let u=-1,f=n.length-1;for(;o--;)if(e.codePointAt(o)===47){if(s){i=o+1;break}}else u<0&&(s=!0,u=o+1),f>-1&&(e.codePointAt(o)===n.codePointAt(f--)?f<0&&(l=o):(f=-1,l=u));return i===l?l=u:l<0&&(l=e.length),e.slice(i,l)}function vD(e){if(Fo(e),e.length===0)return".";let n=-1,i=e.length,l;for(;--i;)if(e.codePointAt(i)===47){if(l){n=i;break}}else l||(l=!0);return n<0?e.codePointAt(0)===47?"/":".":n===1&&e.codePointAt(0)===47?"//":e.slice(0,n)}function bD(e){Fo(e);let n=e.length,i=-1,l=0,o=-1,s=0,u;for(;n--;){const f=e.codePointAt(n);if(f===47){if(u){l=n+1;break}continue}i<0&&(u=!0,i=n+1),f===46?o<0?o=n:s!==1&&(s=1):o>-1&&(s=-1)}return o<0||i<0||s===0||s===1&&o===i-1&&o===l+1?"":e.slice(o,i)}function wD(...e){let n=-1,i;for(;++n0&&e.codePointAt(e.length-1)===47&&(i+="/"),n?"/"+i:i}function _D(e,n){let i="",l=0,o=-1,s=0,u=-1,f,d;for(;++u<=e.length;){if(u2){if(d=i.lastIndexOf("/"),d!==i.length-1){d<0?(i="",l=0):(i=i.slice(0,d),l=i.length-1-i.lastIndexOf("/")),o=u,s=0;continue}}else if(i.length>0){i="",l=0,o=u,s=0;continue}}n&&(i=i.length>0?i+"/..":"..",l=2)}else i.length>0?i+="/"+e.slice(o+1,u):i=e.slice(o+1,u),l=u-o-1;o=u,s=0}else f===46&&s>-1?s++:s=-1}return i}function Fo(e){if(typeof e!="string")throw new TypeError("Path must be a string. Received "+JSON.stringify(e))}const ED={cwd:ND};function ND(){return"/"}function Ip(e){return!!(e!==null&&typeof e=="object"&&"href"in e&&e.href&&"protocol"in e&&e.protocol&&e.auth===void 0)}function kD(e){if(typeof e=="string")e=new URL(e);else if(!Ip(e)){const n=new TypeError('The "path" argument must be of type string or an instance of URL. Received `'+e+"`");throw n.code="ERR_INVALID_ARG_TYPE",n}if(e.protocol!=="file:"){const n=new TypeError("The URL must be of scheme file");throw n.code="ERR_INVALID_URL_SCHEME",n}return CD(e)}function CD(e){if(e.hostname!==""){const l=new TypeError('File URL host must be "localhost" or empty on darwin');throw l.code="ERR_INVALID_FILE_URL_HOST",l}const n=e.pathname;let i=-1;for(;++i0){let[v,...w]=m;const k=l[y][1];Up(k)&&Up(v)&&(v=ap(!0,k,v)),l[y]=[h,v,...w]}}}}const MD=new Cm().freeze();function cp(e,n){if(typeof n!="function")throw new TypeError("Cannot `"+e+"` without `parser`")}function fp(e,n){if(typeof n!="function")throw new TypeError("Cannot `"+e+"` without `compiler`")}function dp(e,n){if(n)throw new Error("Cannot call `"+e+"` on a frozen processor.\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.")}function xb(e){if(!Up(e)||typeof e.type!="string")throw new TypeError("Expected node, got `"+e+"`")}function vb(e,n,i){if(!i)throw new Error("`"+e+"` finished async. Use `"+n+"` instead")}function Ru(e){return jD(e)?e:new w_(e)}function jD(e){return!!(e&&typeof e=="object"&&"message"in e&&"messages"in e)}function OD(e){return typeof e=="string"||RD(e)}function RD(e){return!!(e&&typeof e=="object"&&"byteLength"in e&&"byteOffset"in e)}const DD="https://github.com/remarkjs/react-markdown/blob/main/changelog.md",bb=[],wb={allowDangerousHtml:!0},LD=/^(https?|ircs?|mailto|xmpp)$/i,HD=[{from:"astPlugins",id:"remove-buggy-html-in-markdown-parser"},{from:"allowDangerousHtml",id:"remove-buggy-html-in-markdown-parser"},{from:"allowNode",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"allowElement"},{from:"allowedTypes",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"allowedElements"},{from:"className",id:"remove-classname"},{from:"disallowedTypes",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"disallowedElements"},{from:"escapeHtml",id:"remove-buggy-html-in-markdown-parser"},{from:"includeElementIndex",id:"#remove-includeelementindex"},{from:"includeNodeIndex",id:"change-includenodeindex-to-includeelementindex"},{from:"linkTarget",id:"remove-linktarget"},{from:"plugins",id:"change-plugins-to-remarkplugins",to:"remarkPlugins"},{from:"rawSourcePos",id:"#remove-rawsourcepos"},{from:"renderers",id:"change-renderers-to-components",to:"components"},{from:"source",id:"change-source-to-children",to:"children"},{from:"sourcePos",id:"#remove-sourcepos"},{from:"transformImageUri",id:"#add-urltransform",to:"urlTransform"},{from:"transformLinkUri",id:"#add-urltransform",to:"urlTransform"}];function BD(e){const n=qD(e),i=UD(e);return ID(n.runSync(n.parse(i),i),e)}function qD(e){const n=e.rehypePlugins||bb,i=e.remarkPlugins||bb,l=e.remarkRehypeOptions?{...e.remarkRehypeOptions,...wb}:wb;return MD().use(xR).use(i).use(hD,l).use(n)}function UD(e){const n=e.children||"",i=new w_;return typeof n=="string"&&(i.value=n),i}function ID(e,n){const i=n.allowedElements,l=n.allowElement,o=n.components,s=n.disallowedElements,u=n.skipHtml,f=n.unwrapDisallowed,d=n.urlTransform||VD;for(const m of HD)Object.hasOwn(n,m.from)&&(""+m.from+(m.to?"use `"+m.to+"` instead":"remove it")+DD+m.id,void 0);return b_(e,h),K4(e,{Fragment:b.Fragment,components:o,ignoreInvalidStyle:!0,jsx:b.jsx,jsxs:b.jsxs,passKeys:!0,passNode:!0});function h(m,p,y){if(m.type==="raw"&&y&&typeof p=="number")return u?y.children.splice(p,1):y.children[p]={type:"text",value:m.value},p;if(m.type==="element"){let v;for(v in np)if(Object.hasOwn(np,v)&&Object.hasOwn(m.properties,v)){const w=m.properties[v],k=np[v];(k===null||k.includes(m.tagName))&&(m.properties[v]=d(String(w||""),v,m))}}if(m.type==="element"){let v=i?!i.includes(m.tagName):s?s.includes(m.tagName):!1;if(!v&&l&&typeof p=="number"&&(v=!l(m,p,y)),v&&y&&typeof p=="number")return f&&m.children?y.children.splice(p,1,...m.children):y.children.splice(p,1),p}}}function VD(e){const n=e.indexOf(":"),i=e.indexOf("?"),l=e.indexOf("#"),o=e.indexOf("/");return n===-1||o!==-1&&n>o||i!==-1&&n>i||l!==-1&&n>l||LD.test(e.slice(0,n))?e:""}function YD({node:e}){const n=he(E=>E.sendGateResponse),i=he(E=>E.wsStatus),[l,o]=V.useState(null),[s,u]=V.useState(""),[f,d]=V.useState(null),[h,m]=V.useState(!1),p=e.status==="waiting",y=e.status==="completed";V.useEffect(()=>{p&&(o(null),u(""),d(null),m(!1))},[p]);const v=p&&i==="connected"&&l===null,w=(E,A)=>{if(v){if(A){o(E),d(A);return}o(E),m(!0),n(e.name,E)}},k=()=>{if(l===null||f===null)return;const E={[f]:s};m(!0),n(e.name,l,E),d(null)},S=e.option_details,_=S==null?void 0:S.find(E=>E.value===e.selected_option),z=(_==null?void 0:_.label)||e.selected_option;return b.jsxs("div",{className:"space-y-3",children:[p&&b.jsxs(b.Fragment,{children:[b.jsxs("div",{className:"flex items-center gap-2.5 px-3 py-2 rounded-lg bg-amber-500/10 border border-amber-500/30",children:[b.jsxs("span",{className:"relative flex h-2.5 w-2.5 flex-shrink-0",children:[b.jsx("span",{className:"animate-ping absolute inline-flex h-full w-full rounded-full bg-amber-400 opacity-75"}),b.jsx("span",{className:"relative inline-flex rounded-full h-2.5 w-2.5 bg-amber-500"})]}),b.jsx("span",{className:"text-xs font-semibold text-amber-400 tracking-wide",children:"Decision Required"})]}),e.prompt&&b.jsx("div",{className:"border-l-2 border-amber-500/50 pl-3 py-0.5",children:b.jsx(hp,{text:e.prompt,muted:!1})}),S&&S.length>0&&b.jsxs("div",{className:"space-y-2",children:[b.jsx("div",{className:"flex flex-col gap-1.5",children:S.map(E=>{const A=l===E.value,B=l!==null&&!A;return b.jsx("button",{disabled:!v&&!A,onClick:()=>w(E.value,E.prompt_for),className:`w-full text-left px-3 py-2.5 rounded-lg border transition-all duration-150 ${A?"border-green-500/60 bg-green-500/10":B?"border-[var(--border)] opacity-40 cursor-default":"border-[var(--border)] bg-[var(--surface)] hover:border-amber-400/60 hover:bg-amber-500/5 cursor-pointer group"}`,children:b.jsxs("div",{className:"flex items-center gap-2.5",children:[b.jsx("div",{className:"flex-shrink-0",children:A?b.jsx("div",{className:"w-4 h-4 rounded-full bg-green-500 flex items-center justify-center",children:b.jsx(Bi,{className:"w-2.5 h-2.5 text-white",strokeWidth:3})}):b.jsx("div",{className:`w-4 h-4 rounded-full border-2 transition-colors ${B?"border-[var(--border)]":"border-[var(--border)] group-hover:border-amber-400"}`})}),b.jsx("div",{className:"flex-1 min-w-0",children:b.jsx("span",{className:`text-xs font-medium ${A?"text-green-400":"text-[var(--text)]"}`,children:E.label})}),E.route&&b.jsxs("span",{className:"text-[10px] text-[var(--text-muted)] flex-shrink-0",children:["→ ",E.route]})]})},E.value)})}),h&&!f&&b.jsxs("div",{className:"flex items-center gap-2 px-1",children:[b.jsx(_o,{className:"w-3 h-3 text-green-400 animate-spin"}),b.jsx("span",{className:"text-[10px] text-green-400",children:"Sending..."})]}),v&&b.jsx("p",{className:"text-[10px] text-[var(--text-muted)] px-1",children:"Select an option to continue the workflow"})]}),!S&&e.options&&e.options.length>0&&b.jsxs("div",{className:"space-y-1.5",children:[b.jsx("h4",{className:"text-[10px] uppercase tracking-wider text-[var(--text-muted)] font-semibold",children:"Options"}),b.jsx("div",{className:"flex flex-wrap gap-1.5",children:e.options.map(E=>b.jsx("span",{className:"text-[11px] px-2 py-0.5 rounded border border-[var(--border)] text-[var(--text-muted)]",children:E},E))})]}),f&&b.jsxs("div",{className:"rounded-lg border border-[var(--border)] bg-[var(--bg)] overflow-hidden",children:[b.jsx("div",{className:"px-3 py-2 border-b border-[var(--border)] bg-[var(--surface)]",children:b.jsx("h4",{className:"text-[10px] uppercase tracking-wider text-[var(--text-muted)] font-semibold",children:f})}),b.jsxs("div",{className:"p-3 space-y-2",children:[b.jsx("input",{type:"text",value:s,onChange:E=>u(E.target.value),onKeyDown:E=>E.key==="Enter"&&k(),placeholder:`Enter ${f}...`,className:"w-full text-xs px-3 py-2 rounded-lg border border-[var(--border)] bg-[var(--bg)] text-[var(--text)] outline-none focus:border-amber-400 transition-colors",autoFocus:!0}),b.jsxs("div",{className:"flex items-center justify-between",children:[b.jsx("span",{className:"text-[10px] text-[var(--text-muted)]",children:"Press Enter or click Submit"}),b.jsxs("button",{onClick:k,className:"flex items-center gap-1.5 text-xs px-3 py-1.5 rounded-lg bg-amber-500 text-white hover:bg-amber-600 transition-colors font-medium",children:[b.jsx(lN,{className:"w-3 h-3"}),"Submit"]})]})]})]})]}),y&&b.jsxs(b.Fragment,{children:[b.jsxs("div",{className:"flex items-center gap-2.5 px-3 py-2 rounded-lg bg-green-500/10 border border-green-500/30",children:[b.jsx(Bi,{className:"w-3.5 h-3.5 text-green-400 flex-shrink-0"}),b.jsx("span",{className:"text-xs font-semibold text-green-400 tracking-wide",children:"Decision Completed"})]}),e.prompt&&b.jsx("div",{className:"border-l-2 border-[var(--border)] pl-3 py-0.5",children:b.jsx(hp,{text:e.prompt,muted:!0})}),z&&b.jsxs("div",{className:"flex items-center gap-2.5 px-3 py-2.5 rounded-lg border border-green-500/30 bg-green-500/5",children:[b.jsx("div",{className:"w-4 h-4 rounded-full bg-green-500 flex items-center justify-center flex-shrink-0",children:b.jsx(Bi,{className:"w-2.5 h-2.5 text-white",strokeWidth:3})}),b.jsx("span",{className:"text-xs font-medium text-[var(--text)]",children:z}),e.route&&b.jsxs("span",{className:"ml-auto text-[10px] text-[var(--text-muted)]",children:["→ ",e.route]})]}),S&&S.length>1&&b.jsx("div",{className:"space-y-1",children:S.filter(E=>E.value!==e.selected_option).map(E=>b.jsxs("div",{className:"flex items-center gap-2.5 px-3 py-2 rounded-lg opacity-35",children:[b.jsx("div",{className:"w-4 h-4 rounded-full border-2 border-[var(--border)] flex-shrink-0"}),b.jsx("span",{className:"text-xs text-[var(--text-muted)]",children:E.label}),E.route&&b.jsxs("span",{className:"ml-auto text-[10px] text-[var(--text-muted)]",children:["→ ",E.route]})]},E.value))}),!S&&e.options&&e.options.length>0&&b.jsx("div",{className:"flex flex-wrap gap-1.5",children:e.options.map(E=>b.jsxs("span",{className:`text-[11px] px-2.5 py-1 rounded-lg border ${E===e.selected_option?"border-green-500/30 text-green-400 bg-green-500/5":"border-[var(--border)] text-[var(--text-muted)] opacity-40"}`,children:[E===e.selected_option&&"✓ ",E]},E))}),b.jsx(GD,{node:e})]}),!p&&!y&&b.jsxs(b.Fragment,{children:[b.jsxs("div",{className:"flex items-center gap-2",children:[b.jsx("span",{className:"text-xs text-[var(--text-muted)]",children:"Human Gate"}),b.jsxs("span",{className:"text-[10px] text-[var(--text-muted)] capitalize",children:["(",e.status,")"]})]}),e.prompt&&b.jsx("div",{className:"border-l-2 border-[var(--border)] pl-3 py-0.5",children:b.jsx(hp,{text:e.prompt,muted:!0})})]})]})}function hp({text:e,muted:n}){const i=n?"text-[var(--text-muted)]":"text-[var(--text)]";return b.jsx("div",{className:`gate-markdown text-xs leading-relaxed ${i}`,children:b.jsx(BD,{components:{h1:({children:l})=>b.jsx("h1",{className:"text-sm font-bold mb-2 mt-1",children:l}),h2:({children:l})=>b.jsx("h2",{className:"text-xs font-bold mb-1.5 mt-1",children:l}),h3:({children:l})=>b.jsx("h3",{className:"text-xs font-semibold mb-1 mt-1",children:l}),p:({children:l})=>b.jsx("p",{className:"mb-1.5 last:mb-0",children:l}),ul:({children:l})=>b.jsx("ul",{className:"list-disc list-inside mb-1.5 space-y-0.5",children:l}),ol:({children:l})=>b.jsx("ol",{className:"list-decimal list-inside mb-1.5 space-y-0.5",children:l}),li:({children:l})=>b.jsx("li",{children:l}),code:({children:l,className:o})=>(o==null?void 0:o.includes("language-"))?b.jsx("code",{className:"block bg-[var(--bg)] border border-[var(--border)] rounded px-2 py-1.5 font-mono text-[11px] my-1 overflow-x-auto whitespace-pre",children:l}):b.jsx("code",{className:"bg-[var(--bg)] border border-[var(--border)] rounded px-1 py-0.5 font-mono text-[11px]",children:l}),pre:({children:l})=>b.jsx("pre",{className:"bg-[var(--bg)] border border-[var(--border)] rounded-md px-2.5 py-2 font-mono text-[11px] my-1.5 overflow-x-auto",children:l}),strong:({children:l})=>b.jsx("strong",{className:"font-semibold",children:l}),em:({children:l})=>b.jsx("em",{className:"italic",children:l}),a:({href:l,children:o})=>b.jsx("a",{href:l,target:"_blank",rel:"noopener noreferrer",className:"text-blue-400 hover:text-blue-300 underline underline-offset-2",children:o}),blockquote:({children:l})=>b.jsx("blockquote",{className:"border-l-2 border-[var(--border)] pl-2.5 my-1.5 opacity-80",children:l}),hr:()=>b.jsx("hr",{className:"border-[var(--border)] my-2"})},children:e})})}function GD({node:e}){const n=[];if(e.route&&n.push({label:"Route",value:`→ ${e.route}`}),e.additional_input){const i=typeof e.additional_input=="object"?JSON.stringify(e.additional_input):e.additional_input;n.push({label:"Additional Input",value:i})}return n.length===0?null:b.jsx(la,{items:n})}function $D({node:e}){const n=e.status,i=lt[n]||lt.pending,o=he(m=>m.groupProgress)[e.name],s=e.type==="for_each_group",[u,f]=V.useState(!0),d=[];e.elapsed!=null&&d.push({label:"Elapsed",value:ln(e.elapsed)}),o&&(d.push({label:"Total",value:o.total}),d.push({label:"Completed",value:o.completed}),o.failed>0&&d.push({label:"Failed",value:o.failed})),e.success_count!=null&&d.push({label:"Success",value:e.success_count}),e.failure_count!=null&&d.push({label:"Failures",value:e.failure_count});const h=e.for_each_items;return b.jsxs("div",{className:"space-y-4",children:[b.jsxs("div",{className:"flex items-center gap-2",children:[b.jsx("span",{className:"inline-flex items-center px-2 py-0.5 rounded text-[10px] font-bold uppercase tracking-wider",style:{backgroundColor:`${i}20`,color:i},children:n}),b.jsx("span",{className:"text-xs text-[var(--text-muted)]",children:s?"For-Each Group":"Parallel Group"})]}),o&&o.total>0&&b.jsxs("div",{className:"space-y-1",children:[b.jsxs("div",{className:"flex justify-between text-[10px] text-[var(--text-muted)]",children:[b.jsx("span",{children:"Progress"}),b.jsxs("span",{children:[o.completed+o.failed,"/",o.total]})]}),b.jsx("div",{className:"h-1.5 bg-[var(--bg)] rounded-full overflow-hidden",children:b.jsx("div",{className:"h-full rounded-full transition-all duration-500",style:{width:`${(o.completed+o.failed)/o.total*100}%`,background:o.failed>0?`linear-gradient(90deg, var(--completed) ${o.completed/(o.completed+o.failed)*100}%, var(--failed) 0%)`:"var(--completed)"}})})]}),b.jsx(la,{items:d}),s&&h&&h.length>0&&b.jsxs("div",{className:"space-y-2",children:[b.jsxs("button",{onClick:()=>f(!u),className:"flex items-center gap-1.5 text-[10px] uppercase tracking-wider text-[var(--text-muted)] font-semibold hover:text-[var(--text)] transition-colors",children:[u?b.jsx(Fi,{className:"w-3 h-3"}):b.jsx(ia,{className:"w-3 h-3"}),"Items (",h.length,")"]}),u&&b.jsx("div",{className:"space-y-1",children:h.map(m=>b.jsx(PD,{item:m},`${m.key}-${m.index}`))})]})]})}const XD={running:lt.running,completed:lt.completed,failed:lt.failed};function PD({item:e}){const[n,i]=V.useState(e.status==="running"),l=XD[e.status],o=!!(e.prompt||e.output!=null||e.activity&&e.activity.length>0||e.error_type),s=[];return e.elapsed!=null&&s.push({label:"Elapsed",value:ln(e.elapsed)}),e.tokens!=null&&s.push({label:"Tokens",value:Wn(e.tokens)}),e.cost_usd!=null&&s.push({label:"Cost",value:Zl(e.cost_usd)}),b.jsxs("div",{className:"rounded-lg border border-[var(--border)] bg-[var(--surface)] overflow-hidden",children:[b.jsxs("button",{onClick:()=>o&&i(!n),className:"flex items-center gap-2 w-full px-3 py-2 text-left hover:bg-[var(--node-bg)] transition-colors",disabled:!o,children:[o?n?b.jsx(Fi,{className:"w-3 h-3 text-[var(--text-muted)] flex-shrink-0"}):b.jsx(ia,{className:"w-3 h-3 text-[var(--text-muted)] flex-shrink-0"}):e.status==="running"?b.jsx(_o,{className:"w-3 h-3 animate-spin flex-shrink-0",style:{color:l}}):b.jsx("span",{className:"w-2 h-2 rounded-full flex-shrink-0 ml-0.5 mr-0.5",style:{backgroundColor:l}}),b.jsx("span",{className:"text-xs font-medium text-[var(--text)] truncate flex-1 min-w-0",children:e.key}),!n&&(e.elapsed!=null||e.tokens!=null||e.cost_usd!=null)&&b.jsxs("span",{className:"flex items-center gap-2 text-[10px] text-[var(--text-muted)] flex-shrink-0",children:[e.elapsed!=null&&b.jsx("span",{children:ln(e.elapsed)}),e.tokens!=null&&b.jsx("span",{children:Wn(e.tokens)}),e.cost_usd!=null&&b.jsx("span",{children:Zl(e.cost_usd)})]}),b.jsx("span",{className:"text-[10px] font-bold uppercase tracking-wider flex-shrink-0 px-1.5 py-0.5 rounded",style:{backgroundColor:`${l}20`,color:l},children:e.status})]}),n&&o&&b.jsxs("div",{className:"px-3 py-3 space-y-3 border-t border-[var(--border)]",children:[s.length>0&&b.jsx(la,{items:s}),e.prompt&&b.jsx(Pi,{output:e.prompt,title:"Input / Prompt",defaultExpanded:!1}),e.activity&&e.activity.length>0&&b.jsx(hm,{activity:e.activity,defaultExpanded:e.status!=="completed"}),e.output!=null&&b.jsx(Pi,{output:e.output,title:"Output",defaultExpanded:!0}),e.status==="failed"&&(e.error_type||e.error_message)&&b.jsxs("div",{className:"text-xs text-red-400",children:[e.error_type&&b.jsx("span",{className:"font-semibold",children:e.error_type}),e.error_message&&b.jsxs("span",{className:"ml-1",children:["— ",e.error_message]})]})]})]})}function FD(){const e=he(f=>f.selectedNode),n=he(f=>f.nodes),i=he(f=>f.selectNode),[l,o]=V.useState(!1);V.useEffect(()=>(requestAnimationFrame(()=>o(!0)),()=>o(!1)),[e]);const s=e?n[e]:null;if(!e||!s)return b.jsxs("div",{className:"h-full flex flex-col bg-[var(--surface)]",children:[b.jsx("div",{className:"flex items-center justify-between px-4 py-3 border-b border-[var(--border)]",children:b.jsx("h2",{className:"text-sm font-semibold text-[var(--text)]",children:"Detail"})}),b.jsx("div",{className:"flex-1 flex items-center justify-center",children:b.jsx("p",{className:"text-xs text-[var(--text-muted)]",children:"Click a node to view details"})})]});const u=(()=>{switch(s.type){case"script":return S4;case"human_gate":return YD;case"parallel_group":case"for_each_group":return $D;default:return b4}})();return b.jsxs("div",{className:Ye("h-full flex flex-col bg-[var(--surface)] transition-all duration-150 ease-out",l?"translate-x-0 opacity-100":"translate-x-4 opacity-0"),children:[b.jsxs("div",{className:"flex items-center justify-between px-4 py-3 border-b border-[var(--border)] flex-shrink-0",children:[b.jsx("h2",{className:"text-sm font-semibold text-[var(--text)] truncate",children:e}),b.jsx("button",{onClick:()=>i(null),className:"p-1 rounded hover:bg-[var(--surface-hover)] text-[var(--text-muted)] hover:text-[var(--text)] transition-colors",title:"Close panel",children:b.jsx(Bo,{className:"w-4 h-4"})})]}),b.jsx("div",{className:"flex-1 overflow-y-auto px-4 py-3",children:b.jsx(u,{node:s})})]})}function Yu(e){if(e==null)return"";if(typeof e=="string")return e;try{return JSON.stringify(e,null,2)}catch{return String(e)}}function QD(){const e=he(S=>S.eventLog),n=he(S=>S.activityLog),i=he(S=>S.workflowOutput),l=he(S=>S.workflowStatus),[o,s]=V.useState("log"),[u,f]=V.useState(!1),[d,h]=V.useState(0),[m,p]=V.useState(0),y=V.useCallback(S=>{s(S),S==="log"&&h(e.length),S==="activity"&&p(n.length)},[e.length,n.length]);V.useEffect(()=>{o==="log"&&h(e.length)},[o,e.length]),V.useEffect(()=>{o==="activity"&&p(n.length)},[o,n.length]),V.useEffect(()=>{l==="completed"&&i!=null&&s("output")},[l,i]);const v=i!=null,w=o!=="log"?Math.max(0,e.length-d):0,k=o!=="activity"?Math.max(0,n.length-m):0;return u?b.jsx("div",{className:"flex items-center bg-[var(--surface)] border-t border-[var(--border)] px-3 py-1",children:b.jsxs("button",{onClick:()=>f(!1),className:"flex items-center gap-1.5 text-xs text-[var(--text-muted)] hover:text-[var(--text)] transition-colors",children:[b.jsx($2,{className:"w-3 h-3"}),b.jsx(bx,{className:"w-3 h-3"}),b.jsx("span",{children:"Output"}),n.length>0&&b.jsxs("span",{className:"text-[10px] text-[var(--text-muted)]",children:["(",n.length,")"]})]})}):b.jsxs("div",{className:"flex flex-col h-full bg-[var(--surface)] border-t border-[var(--border)]",children:[b.jsxs("div",{className:"flex items-center justify-between px-2 flex-shrink-0 border-b border-[var(--border)]",children:[b.jsxs("div",{className:"flex items-center gap-0.5",children:[b.jsx(pp,{active:o==="log",onClick:()=>y("log"),icon:b.jsx(bx,{className:"w-3 h-3"}),label:"Log",count:e.length,unread:w}),b.jsx(pp,{active:o==="activity",onClick:()=>y("activity"),icon:b.jsx(kb,{className:"w-3 h-3"}),label:"Activity",count:n.length,unread:k}),b.jsx(pp,{active:o==="output",onClick:()=>y("output"),icon:b.jsx(J2,{className:"w-3 h-3"}),label:"Output",badge:v?l==="failed"?"error":"success":void 0})]}),b.jsx("button",{onClick:()=>f(!0),className:"p-1 rounded text-[var(--text-muted)] hover:text-[var(--text)] hover:bg-[var(--surface-hover)] transition-colors",title:"Collapse panel",children:b.jsx(Fi,{className:"w-3.5 h-3.5"})})]}),b.jsx("div",{className:"flex-1 overflow-hidden",children:o==="activity"?b.jsx(ZD,{entries:n}):o==="log"?b.jsx(KD,{entries:e}):b.jsx(JD,{output:i,status:l})})]})}function pp({active:e,onClick:n,icon:i,label:l,count:o,badge:s,unread:u}){return b.jsxs("button",{onClick:n,className:Ye("relative flex items-center gap-1.5 px-3 py-1.5 text-xs transition-colors border-b-2 -mb-px",e?"text-[var(--text)] border-[var(--accent)]":"text-[var(--text-muted)] border-transparent hover:text-[var(--text-secondary)]"),children:[i,b.jsx("span",{children:l}),o!=null&&o>0&&b.jsx("span",{className:"text-[10px] text-[var(--text-muted)] tabular-nums",children:o}),s&&b.jsx("span",{className:Ye("w-1.5 h-1.5 rounded-full",s==="success"?"bg-[var(--completed)]":"bg-[var(--failed)]")}),!e&&u!=null&&u>0&&b.jsx("span",{className:"absolute -top-0.5 -right-0.5 flex h-3.5 min-w-[14px] items-center justify-center rounded-full bg-[var(--accent)] px-1",children:b.jsx("span",{className:"text-[8px] font-bold text-white leading-none tabular-nums",children:u>99?"99+":u})})]})}const Sb={reasoning:{color:"text-indigo-400/70",label:"THINK",labelColor:"text-indigo-500"},"tool-start":{color:"text-blue-400",label:"TOOL →",labelColor:"text-blue-500"},"tool-complete":{color:"text-green-400",label:"TOOL ←",labelColor:"text-green-600"},turn:{color:"text-amber-400",label:"STEP",labelColor:"text-amber-500"},message:{color:"text-[var(--text)]",label:"MSG",labelColor:"text-[var(--text-muted)]"},prompt:{color:"text-cyan-400/70",label:"PROMPT",labelColor:"text-cyan-600"}};function ZD({entries:e}){const n=V.useRef(null),i=V.useRef(!0),l=he(d=>d.selectNode),[o,s]=V.useState(""),u=V.useCallback(()=>{const d=n.current;if(!d)return;const h=d.scrollHeight-d.scrollTop-d.clientHeight<30;i.current=h},[]),f=V.useMemo(()=>{if(!o)return e;const d=o.toLowerCase();return e.filter(h=>h.source.toLowerCase().includes(d)||Yu(h.message).toLowerCase().includes(d))},[e,o]);return V.useEffect(()=>{n.current&&i.current&&(n.current.scrollTop=n.current.scrollHeight)},[f.length]),e.length===0?b.jsx("div",{className:"h-full flex items-center justify-center",children:b.jsx("p",{className:"text-xs text-[var(--text-muted)]",children:"Waiting for agent activity…"})}):b.jsxs("div",{className:"h-full flex flex-col",children:[b.jsxs("div",{className:"flex items-center gap-2 px-3 py-1.5 border-b border-[var(--border-subtle)] flex-shrink-0",children:[b.jsx(iN,{className:"w-3 h-3 text-[var(--text-muted)] flex-shrink-0"}),b.jsx("input",{type:"text",value:o,onChange:d=>s(d.target.value),placeholder:"Filter by agent or message…",className:"flex-1 bg-transparent text-[11px] text-[var(--text)] placeholder:text-[var(--text-muted)] outline-none min-w-0"}),o&&b.jsxs(b.Fragment,{children:[b.jsxs("span",{className:"text-[10px] text-[var(--text-muted)] tabular-nums flex-shrink-0",children:[f.length," of ",e.length]}),b.jsx("button",{onClick:()=>s(""),className:"text-[var(--text-muted)] hover:text-[var(--text)] transition-colors flex-shrink-0",title:"Clear filter",children:b.jsx(Bo,{className:"w-3 h-3"})})]})]}),b.jsxs("div",{ref:n,onScroll:u,className:"flex-1 overflow-y-auto font-mono text-[11px] leading-[1.6] px-3 py-2",children:[f.map((d,h)=>{const m=Sb[d.type]||Sb.message,p=S_(d.timestamp);return b.jsxs("div",{className:"group",children:[b.jsxs("div",{className:"flex gap-1.5 hover:bg-[var(--surface-hover)] rounded px-1 -mx-1",children:[b.jsx("span",{className:"text-[var(--text-muted)] flex-shrink-0 select-none tabular-nums",children:p}),b.jsx("span",{className:Ye("flex-shrink-0 w-[5ch] text-[10px] font-semibold tabular-nums select-none",m.labelColor),children:m.label}),b.jsx("button",{onClick:()=>l(d.source),className:"text-[var(--text-secondary)] flex-shrink-0 min-w-[8ch] max-w-[16ch] truncate hover:text-[var(--accent)] hover:underline transition-colors text-left",title:`Select ${d.source}`,children:d.source}),b.jsx("span",{className:Ye("break-words min-w-0",m.color,d.type==="reasoning"&&"italic"),children:Yu(d.message)})]}),d.detail&&b.jsx("div",{className:"ml-[calc(7ch+5ch+8ch+1rem)] px-2 py-1 my-0.5 bg-[var(--bg)] rounded text-[10px] text-[var(--text-muted)] whitespace-pre-wrap break-words max-h-24 overflow-y-auto border-l-2 border-[var(--border)]",children:Yu(d.detail)})]},h)}),o&&f.length===0&&b.jsx("div",{className:"flex items-center justify-center py-4",children:b.jsxs("p",{className:"text-xs text-[var(--text-muted)]",children:['No matches for "',o,'"']})})]})]})}const _b={info:{color:"text-blue-400",icon:"›"},success:{color:"text-green-400",icon:"✓"},error:{color:"text-red-400",icon:"✗"},warning:{color:"text-amber-400",icon:"⚠"},debug:{color:"text-[var(--text-muted)]",icon:"·"}};function KD({entries:e}){const n=V.useRef(null),i=V.useRef(!0),l=he(s=>s.selectNode),o=V.useCallback(()=>{const s=n.current;if(!s)return;const u=s.scrollHeight-s.scrollTop-s.clientHeight<30;i.current=u},[]);return V.useEffect(()=>{n.current&&i.current&&(n.current.scrollTop=n.current.scrollHeight)},[e.length]),e.length===0?b.jsx("div",{className:"h-full flex items-center justify-center",children:b.jsx("p",{className:"text-xs text-[var(--text-muted)]",children:"Waiting for events…"})}):b.jsx("div",{ref:n,onScroll:o,className:"h-full overflow-y-auto font-mono text-[11px] leading-[1.6] px-3 py-2",children:e.map((s,u)=>{const f=_b[s.level]||_b.info,d=S_(s.timestamp);return b.jsxs("div",{className:"flex gap-2 hover:bg-[var(--surface-hover)] rounded px-1 -mx-1",children:[b.jsx("span",{className:"text-[var(--text-muted)] flex-shrink-0 select-none tabular-nums",children:d}),b.jsx("span",{className:Ye("flex-shrink-0 w-3 text-center select-none",f.color),children:f.icon}),b.jsx("button",{onClick:()=>l(s.source),className:"text-[var(--text-secondary)] flex-shrink-0 min-w-[8ch] max-w-[16ch] truncate hover:text-[var(--accent)] hover:underline transition-colors text-left",title:`Select ${s.source}`,children:s.source}),b.jsx("span",{className:Ye("break-words",s.level==="error"?"text-red-400":s.level==="success"?"text-green-400":"text-[var(--text)]"),children:Yu(s.message)})]},u)})})}function S_(e){const n=new Date(e*1e3),i=n.getHours().toString().padStart(2,"0"),l=n.getMinutes().toString().padStart(2,"0"),o=n.getSeconds().toString().padStart(2,"0");return`${i}:${l}:${o}`}function JD({output:e,status:n}){const[i,l]=V.useState(!1),o=zb(e),s=async()=>{o&&(await navigator.clipboard.writeText(o),l(!0),setTimeout(()=>l(!1),2e3))};return e==null?b.jsx("div",{className:"h-full flex items-center justify-center",children:b.jsx("p",{className:"text-xs text-[var(--text-muted)]",children:n==="running"?"Workflow running — output will appear when complete…":n==="failed"?"Workflow failed — no output produced":"No output yet"})}):b.jsxs("div",{className:"h-full flex flex-col",children:[b.jsxs("div",{className:"flex items-center justify-between px-3 py-1 border-b border-[var(--border-subtle)] flex-shrink-0",children:[b.jsx("span",{className:"text-[10px] text-[var(--text-muted)] uppercase tracking-wider font-semibold",children:"Workflow Result"}),b.jsx("button",{onClick:s,className:"flex items-center gap-1 text-[10px] text-[var(--text-muted)] hover:text-[var(--text)] transition-colors px-1.5 py-0.5 rounded hover:bg-[var(--surface-hover)]",title:"Copy to clipboard",children:i?b.jsxs(b.Fragment,{children:[b.jsx(Bi,{className:"w-3 h-3 text-[var(--completed)]"}),b.jsx("span",{className:"text-[var(--completed)]",children:"Copied"})]}):b.jsxs(b.Fragment,{children:[b.jsx(Cb,{className:"w-3 h-3"}),b.jsx("span",{children:"Copy"})]})})]}),b.jsx("div",{className:"flex-1 overflow-auto px-3 py-2",children:b.jsx("pre",{className:"font-mono text-[11px] leading-relaxed text-[var(--text)] whitespace-pre-wrap break-words",children:typeof e=="object"?b.jsx(WD,{text:o}):o})})]})}function WD({text:e}){const n=e.split(/("(?:[^"\\]|\\.)*")/g);return b.jsx(b.Fragment,{children:n.map((i,l)=>{if(l%2===1){const s=n.slice(l+1).join(""),u=/^\s*:/.test(s);return b.jsx("span",{className:u?"text-blue-400":"text-green-400",children:i},l)}const o=i.replace(/\b(true|false|null)\b|(-?\d+\.?\d*(?:e[+-]?\d+)?)/gi,(s,u,f)=>u?`${s}`:f?`${s}`:s);return b.jsx("span",{dangerouslySetInnerHTML:{__html:o}},l)})})}function e6(){const e=he(n=>n.selectedNode);return b.jsxs(gp,{direction:"vertical",className:"flex-1 overflow-hidden",children:[b.jsx(fo,{defaultSize:70,minSize:30,children:b.jsxs(gp,{direction:"horizontal",className:"h-full",children:[b.jsx(fo,{defaultSize:e?65:100,minSize:40,children:b.jsx(m4,{})}),e&&b.jsxs(b.Fragment,{children:[b.jsx(yp,{className:"w-[3px] bg-[var(--border)] hover:bg-[var(--text-muted)] transition-colors cursor-col-resize"}),b.jsx(fo,{defaultSize:35,minSize:20,maxSize:60,children:b.jsx(FD,{})})]})]})}),b.jsx(yp,{className:"h-[3px] bg-[var(--border)] hover:bg-[var(--text-muted)] transition-colors cursor-row-resize"}),b.jsx(fo,{defaultSize:30,minSize:5,maxSize:70,collapsible:!0,children:b.jsx(QD,{})})]})}const t6=3e4;function n6(){const e=he(p=>p.processEvent),n=he(p=>p.replayState),i=he(p=>p.setWsStatus),l=he(p=>p.setWsSend),o=V.useRef(null),s=V.useRef(1e3),u=V.useRef(null),f=V.useRef(null),d=V.useRef(()=>{}),h=V.useCallback(()=>{i("reconnecting"),u.current=setTimeout(()=>{s.current=Math.min(s.current*2,t6),d.current()},s.current)},[i]),m=V.useCallback(()=>{i("connecting"),f.current&&f.current.abort();const p=new AbortController;f.current=p,fetch("/api/state",{signal:p.signal}).then(y=>y.json()).then(y=>{y&&y.length>0&&n(y);const w=`${window.location.protocol==="https:"?"wss:":"ws:"}//${window.location.host}/ws`;try{const k=new WebSocket(w);o.current=k,k.onopen=()=>{s.current=1e3,i("connected"),l(S=>{k.readyState===WebSocket.OPEN&&k.send(JSON.stringify(S))})},k.onmessage=S=>{try{const _=JSON.parse(S.data);e(_)}catch(_){console.error("Failed to parse WebSocket message:",_)}},k.onclose=()=>{i("disconnected"),l(null),o.current=null,h()},k.onerror=()=>{}}catch{h()}}).catch(y=>{p.signal.aborted||(console.error("Failed to fetch state:",y),h())})},[e,n,i,l,h]);d.current=m,V.useEffect(()=>(m(),()=>{f.current&&f.current.abort(),u.current&&clearTimeout(u.current),o.current&&o.current.close(),l(null)}),[m,l])}function r6(){const e=he(h=>h.setReplayMode),n=he(h=>h.setWsStatus),i=he(h=>h.replayPlaying),l=he(h=>h.replayPosition),o=he(h=>h.replayTotalEvents),s=he(h=>h.replaySpeed),u=he(h=>h.replayEvents),f=he(h=>h.setReplayPosition);V.useEffect(()=>{n("connecting"),fetch("/api/state").then(h=>h.json()).then(h=>{e(h),n("connected")}).catch(h=>{console.error("Failed to load replay events:",h),n("disconnected")})},[e,n]);const d=V.useRef(null);V.useEffect(()=>{if(!i||l>=o){d.current&&clearTimeout(d.current),i&&l>=o&&he.getState().setReplayPlaying(!1);return}const h=u[l-1],m=u[l];let p=100;if(h&&m){const y=(m.timestamp-h.timestamp)*1e3;p=Math.max(16,Math.min(y/s,2e3))}return d.current=setTimeout(()=>{f(l+1)},p),()=>{d.current&&clearTimeout(d.current)}},[i,l,o,s,u,f])}function i6(){return n6(),null}function l6(){return r6(),null}function a6(){const[e,n]=V.useState(null),i=he(s=>s.replayMode),l=he(s=>s.selectNode),o=he(s=>s.workflowName);return V.useEffect(()=>{fetch("/api/replay/info").then(s=>{s.ok?n(!0):n(!1)}).catch(()=>n(!1))},[]),V.useEffect(()=>{document.title=o?`Conductor — ${o}`:"Conductor Dashboard"},[o]),V.useEffect(()=>{const s=u=>{u.key==="Escape"&&l(null)};return window.addEventListener("keydown",s),()=>window.removeEventListener("keydown",s)},[l]),e===null?null:b.jsxs("div",{className:"h-full flex flex-col bg-[var(--bg)]",children:[e?b.jsx(l6,{}):b.jsx(i6,{}),b.jsx(vN,{}),b.jsx(e6,{}),i?b.jsx(EN,{}):b.jsx(wN,{})]})}U2.createRoot(document.getElementById("root")).render(b.jsx(V.StrictMode,{children:b.jsx(a6,{})})); diff --git a/src/conductor/web/static/assets/index-DHEpYuxn.css b/src/conductor/web/static/assets/index-DHEpYuxn.css deleted file mode 100644 index 9961ba5..0000000 --- a/src/conductor/web/static/assets/index-DHEpYuxn.css +++ /dev/null @@ -1 +0,0 @@ -/*! tailwindcss v4.2.1 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-950:oklch(25.8% .092 26.042);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-500:oklch(76.9% .188 70.08);--color-amber-600:oklch(66.6% .179 58.318);--color-green-300:oklch(87.1% .15 154.449);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--color-green-950:oklch(26.6% .065 152.934);--color-emerald-400:oklch(76.5% .177 163.223);--color-emerald-500:oklch(69.6% .17 162.48);--color-cyan-400:oklch(78.9% .154 211.53);--color-cyan-600:oklch(60.9% .126 221.723);--color-sky-400:oklch(74.6% .16 232.661);--color-blue-300:oklch(80.9% .105 251.813);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-indigo-400:oklch(67.3% .182 276.935);--color-indigo-500:oklch(58.5% .233 277.117);--color-purple-400:oklch(71.4% .203 305.504);--color-black:#000;--color-white:#fff;--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-wide:.025em;--tracking-wider:.05em;--leading-tight:1.25;--leading-relaxed:1.625;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--ease-out:cubic-bezier(0, 0, .2, 1);--animate-spin:spin 1s linear infinite;--animate-ping:ping 1s cubic-bezier(0, 0, .2, 1) infinite;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--blur-sm:8px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.inset-0{inset:calc(var(--spacing) * 0)}.start{inset-inline-start:var(--spacing)}.end{inset-inline-end:var(--spacing)}.-top-0\.5{top:calc(var(--spacing) * -.5)}.top-3{top:calc(var(--spacing) * 3)}.top-full{top:100%}.-right-0\.5{right:calc(var(--spacing) * -.5)}.right-0{right:calc(var(--spacing) * 0)}.bottom-0{bottom:calc(var(--spacing) * 0)}.bottom-full{bottom:100%}.left-0{left:calc(var(--spacing) * 0)}.left-1\/2{left:50%}.z-10{z-index:10}.z-20{z-index:20}.z-50{z-index:50}.-mx-1{margin-inline:calc(var(--spacing) * -1)}.my-0\.5{margin-block:calc(var(--spacing) * .5)}.my-1{margin-block:calc(var(--spacing) * 1)}.my-1\.5{margin-block:calc(var(--spacing) * 1.5)}.my-2{margin-block:calc(var(--spacing) * 2)}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:calc(var(--spacing) * 1)}.mr-0\.5{margin-right:calc(var(--spacing) * .5)}.-mb-px{margin-bottom:-1px}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-1\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.ml-0\.5{margin-left:calc(var(--spacing) * .5)}.ml-1{margin-left:calc(var(--spacing) * 1)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-\[4\.25rem\]{margin-left:4.25rem}.ml-\[calc\(7ch\+5ch\+8ch\+1rem\)\]{margin-left:calc(20ch + 1rem)}.ml-auto{margin-left:auto}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.\!h-2{height:calc(var(--spacing) * 2)!important}.h-0{height:calc(var(--spacing) * 0)}.h-1{height:calc(var(--spacing) * 1)}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-2{height:calc(var(--spacing) * 2)}.h-2\.5{height:calc(var(--spacing) * 2.5)}.h-3{height:calc(var(--spacing) * 3)}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-8{height:calc(var(--spacing) * 8)}.h-11{height:calc(var(--spacing) * 11)}.h-\[2px\]{height:2px}.h-\[3px\]{height:3px}.h-\[90\%\]{height:90%}.h-full{height:100%}.h-px{height:1px}.max-h-24{max-height:calc(var(--spacing) * 24)}.max-h-\[400px\]{max-height:400px}.\!w-2{width:calc(var(--spacing) * 2)!important}.w-0{width:calc(var(--spacing) * 0)}.w-1\.5{width:calc(var(--spacing) * 1.5)}.w-2{width:calc(var(--spacing) * 2)}.w-2\.5{width:calc(var(--spacing) * 2.5)}.w-3{width:calc(var(--spacing) * 3)}.w-3\.5{width:calc(var(--spacing) * 3.5)}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-6{width:calc(var(--spacing) * 6)}.w-8{width:calc(var(--spacing) * 8)}.w-11{width:calc(var(--spacing) * 11)}.w-12{width:calc(var(--spacing) * 12)}.w-\[3px\]{width:3px}.w-\[5ch\]{width:5ch}.w-\[80\%\]{width:80%}.w-full{width:100%}.max-w-\[16ch\]{max-width:16ch}.max-w-\[140px\]{max-width:140px}.max-w-\[220px\]{max-width:220px}.max-w-\[260px\]{max-width:260px}.max-w-\[560px\]{max-width:560px}.min-w-0{min-width:calc(var(--spacing) * 0)}.min-w-\[8ch\]{min-width:8ch}.min-w-\[14px\]{min-width:14px}.min-w-\[140px\]{min-width:140px}.min-w-\[180px\]{min-width:180px}.flex-1{flex:1}.flex-shrink-0{flex-shrink:0}.-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-0{--tw-translate-x:calc(var(--spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-4{--tw-translate-x:calc(var(--spacing) * 4);translate:var(--tw-translate-x) var(--tw-translate-y)}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-\[banner-in_200ms_ease-out\]{animation:.2s ease-out banner-in}.animate-\[context-pulse_2s_ease-in-out_infinite\]{animation:2s ease-in-out infinite context-pulse}.animate-\[tooltip-in_150ms_ease-out\]{animation:.15s ease-out tooltip-in}.animate-ping{animation:var(--animate-ping)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-col-resize{cursor:col-resize}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.cursor-row-resize{cursor:row-resize}.list-inside{list-style-position:inside}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-\[auto_1fr\]{grid-template-columns:auto 1fr}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:calc(var(--spacing) * 1)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * .5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * .5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}.gap-x-3{column-gap:calc(var(--spacing) * 3)}.gap-y-0\.5{row-gap:calc(var(--spacing) * .5)}.gap-y-1\.5{row-gap:calc(var(--spacing) * 1.5)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t-lg{border-top-left-radius:var(--radius-lg);border-top-right-radius:var(--radius-lg)}.rounded-b-lg{border-bottom-right-radius:var(--radius-lg);border-bottom-left-radius:var(--radius-lg)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-x-\[6px\]{border-inline-style:var(--tw-border-style);border-inline-width:6px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-t-\[6px\]{border-top-style:var(--tw-border-style);border-top-width:6px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.\!border-none{--tw-border-style:none!important;border-style:none!important}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-\[var\(--accent\)\]{border-color:var(--accent)}.border-\[var\(--border\)\]{border-color:var(--border)}.border-\[var\(--border-subtle\)\]{border-color:var(--border-subtle)}.border-amber-500\/30{border-color:#f99c004d}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/30{border-color:color-mix(in oklab,var(--color-amber-500) 30%,transparent)}}.border-amber-500\/50{border-color:#f99c0080}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/50{border-color:color-mix(in oklab,var(--color-amber-500) 50%,transparent)}}.border-emerald-500\/20{border-color:#00bb7f33}@supports (color:color-mix(in lab,red,red)){.border-emerald-500\/20{border-color:color-mix(in oklab,var(--color-emerald-500) 20%,transparent)}}.border-green-500\/30{border-color:#00c7584d}@supports (color:color-mix(in lab,red,red)){.border-green-500\/30{border-color:color-mix(in oklab,var(--color-green-500) 30%,transparent)}}.border-green-500\/40{border-color:#00c75866}@supports (color:color-mix(in lab,red,red)){.border-green-500\/40{border-color:color-mix(in oklab,var(--color-green-500) 40%,transparent)}}.border-green-500\/60{border-color:#00c75899}@supports (color:color-mix(in lab,red,red)){.border-green-500\/60{border-color:color-mix(in oklab,var(--color-green-500) 60%,transparent)}}.border-red-500\/20{border-color:#fb2c3633}@supports (color:color-mix(in lab,red,red)){.border-red-500\/20{border-color:color-mix(in oklab,var(--color-red-500) 20%,transparent)}}.border-red-500\/30{border-color:#fb2c364d}@supports (color:color-mix(in lab,red,red)){.border-red-500\/30{border-color:color-mix(in oklab,var(--color-red-500) 30%,transparent)}}.border-red-500\/40{border-color:#fb2c3666}@supports (color:color-mix(in lab,red,red)){.border-red-500\/40{border-color:color-mix(in oklab,var(--color-red-500) 40%,transparent)}}.border-transparent{border-color:#0000}.border-x-transparent{border-inline-color:#0000}.border-t-\[var\(--border\)\]{border-top-color:var(--border)}.\!bg-\[var\(--border\)\]{background-color:var(--border)!important}.bg-\[var\(--accent\)\]{background-color:var(--accent)}.bg-\[var\(--bg\)\]{background-color:var(--bg)}.bg-\[var\(--border\)\]{background-color:var(--border)}.bg-\[var\(--completed\)\]{background-color:var(--completed)}.bg-\[var\(--failed\)\]{background-color:var(--failed)}.bg-\[var\(--node-bg\)\]{background-color:var(--node-bg)}.bg-\[var\(--pending\)\]{background-color:var(--pending)}.bg-\[var\(--running\)\]{background-color:var(--running)}.bg-\[var\(--surface\)\],.bg-\[var\(--surface\)\]\/80{background-color:var(--surface)}@supports (color:color-mix(in lab,red,red)){.bg-\[var\(--surface\)\]\/80{background-color:color-mix(in oklab,var(--surface) 80%,transparent)}}.bg-\[var\(--surface-hover\)\]{background-color:var(--surface-hover)}.bg-\[var\(--surface-raised\)\]{background-color:var(--surface-raised)}.bg-amber-400{background-color:var(--color-amber-400)}.bg-amber-500{background-color:var(--color-amber-500)}.bg-amber-500\/10{background-color:#f99c001a}@supports (color:color-mix(in lab,red,red)){.bg-amber-500\/10{background-color:color-mix(in oklab,var(--color-amber-500) 10%,transparent)}}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab,red,red)){.bg-black\/50{background-color:color-mix(in oklab,var(--color-black) 50%,transparent)}}.bg-emerald-500\/10{background-color:#00bb7f1a}@supports (color:color-mix(in lab,red,red)){.bg-emerald-500\/10{background-color:color-mix(in oklab,var(--color-emerald-500) 10%,transparent)}}.bg-green-500{background-color:var(--color-green-500)}.bg-green-500\/5{background-color:#00c7580d}@supports (color:color-mix(in lab,red,red)){.bg-green-500\/5{background-color:color-mix(in oklab,var(--color-green-500) 5%,transparent)}}.bg-green-500\/10{background-color:#00c7581a}@supports (color:color-mix(in lab,red,red)){.bg-green-500\/10{background-color:color-mix(in oklab,var(--color-green-500) 10%,transparent)}}.bg-green-950\/90{background-color:#032e15e6}@supports (color:color-mix(in lab,red,red)){.bg-green-950\/90{background-color:color-mix(in oklab,var(--color-green-950) 90%,transparent)}}.bg-red-500\/10{background-color:#fb2c361a}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/10{background-color:color-mix(in oklab,var(--color-red-500) 10%,transparent)}}.bg-red-500\/20{background-color:#fb2c3633}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/20{background-color:color-mix(in oklab,var(--color-red-500) 20%,transparent)}}.bg-red-950\/50{background-color:#46080980}@supports (color:color-mix(in lab,red,red)){.bg-red-950\/50{background-color:color-mix(in oklab,var(--color-red-950) 50%,transparent)}}.bg-red-950\/90{background-color:#460809e6}@supports (color:color-mix(in lab,red,red)){.bg-red-950\/90{background-color:color-mix(in oklab,var(--color-red-950) 90%,transparent)}}.bg-transparent{background-color:#0000}.p-0{padding:calc(var(--spacing) * 0)}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:calc(var(--spacing) * 1)}.p-3{padding:calc(var(--spacing) * 3)}.px-1{padding-inline:calc(var(--spacing) * 1)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.pt-px{padding-top:1px}.pl-2\.5{padding-left:calc(var(--spacing) * 2.5)}.pl-3{padding-left:calc(var(--spacing) * 3)}.text-center{text-align:center}.text-left{text-align:left}.font-mono{font-family:var(--font-mono)}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[8px\]{font-size:8px}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[13px\]{font-size:13px}.leading-6{--tw-leading:calc(var(--spacing) * 6);line-height:calc(var(--spacing) * 6)}.leading-\[1\.6\]{--tw-leading:1.6;line-height:1.6}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.break-words{overflow-wrap:break-word}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[var\(--accent\)\]{color:var(--accent)}.text-\[var\(--completed\)\]{color:var(--completed)}.text-\[var\(--failed\)\]{color:var(--failed)}.text-\[var\(--running\)\]{color:var(--running)}.text-\[var\(--text\)\]{color:var(--text)}.text-\[var\(--text-muted\)\]{color:var(--text-muted)}.text-\[var\(--text-secondary\)\]{color:var(--text-secondary)}.text-\[var\(--waiting\)\]{color:var(--waiting)}.text-amber-400{color:var(--color-amber-400)}.text-amber-500{color:var(--color-amber-500)}.text-blue-400{color:var(--color-blue-400)}.text-blue-500{color:var(--color-blue-500)}.text-cyan-400\/70{color:#00d2efb3}@supports (color:color-mix(in lab,red,red)){.text-cyan-400\/70{color:color-mix(in oklab,var(--color-cyan-400) 70%,transparent)}}.text-cyan-600{color:var(--color-cyan-600)}.text-emerald-400{color:var(--color-emerald-400)}.text-emerald-500\/70{color:#00bb7fb3}@supports (color:color-mix(in lab,red,red)){.text-emerald-500\/70{color:color-mix(in oklab,var(--color-emerald-500) 70%,transparent)}}.text-green-300{color:var(--color-green-300)}.text-green-400{color:var(--color-green-400)}.text-green-400\/80{color:#05df72cc}@supports (color:color-mix(in lab,red,red)){.text-green-400\/80{color:color-mix(in oklab,var(--color-green-400) 80%,transparent)}}.text-green-500\/60{color:#00c75899}@supports (color:color-mix(in lab,red,red)){.text-green-500\/60{color:color-mix(in oklab,var(--color-green-500) 60%,transparent)}}.text-green-600{color:var(--color-green-600)}.text-indigo-400\/70{color:#7d87ffb3}@supports (color:color-mix(in lab,red,red)){.text-indigo-400\/70{color:color-mix(in oklab,var(--color-indigo-400) 70%,transparent)}}.text-indigo-500{color:var(--color-indigo-500)}.text-purple-400{color:var(--color-purple-400)}.text-red-300{color:var(--color-red-300)}.text-red-400{color:var(--color-red-400)}.text-red-400\/50{color:#ff656880}@supports (color:color-mix(in lab,red,red)){.text-red-400\/50{color:color-mix(in oklab,var(--color-red-400) 50%,transparent)}}.text-red-400\/60{color:#ff656899}@supports (color:color-mix(in lab,red,red)){.text-red-400\/60{color:color-mix(in oklab,var(--color-red-400) 60%,transparent)}}.text-red-400\/80{color:#ff6568cc}@supports (color:color-mix(in lab,red,red)){.text-red-400\/80{color:color-mix(in oklab,var(--color-red-400) 80%,transparent)}}.text-sky-400{color:var(--color-sky-400)}.text-white{color:var(--color-white)}.capitalize{text-transform:capitalize}.uppercase{text-transform:uppercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.underline{text-decoration-line:underline}.underline-offset-2{text-underline-offset:2px}.opacity-0{opacity:0}.opacity-20{opacity:.2}.opacity-35{opacity:.35}.opacity-40{opacity:.4}.opacity-75{opacity:.75}.opacity-80{opacity:.8}.opacity-100{opacity:1}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_12px_var\(--completed-muted\)\]{--tw-shadow:0 0 12px var(--tw-shadow-color,var(--completed-muted));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_12px_var\(--running-glow\)\]{--tw-shadow:0 0 12px var(--tw-shadow-color,var(--running-glow));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_12px_var\(--waiting-muted\)\]{--tw-shadow:0 0 12px var(--tw-shadow-color,var(--waiting-muted));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_16px_var\(--completed-muted\)\]{--tw-shadow:0 0 16px var(--tw-shadow-color,var(--completed-muted));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_16px_var\(--failed-muted\)\]{--tw-shadow:0 0 16px var(--tw-shadow-color,var(--failed-muted));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_16px_var\(--running-glow\)\]{--tw-shadow:0 0 16px var(--tw-shadow-color,var(--running-glow));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-green-500\/10{--tw-shadow-color:#00c7581a}@supports (color:color-mix(in lab,red,red)){.shadow-green-500\/10{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-green-500) 10%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-red-500\/10{--tw-shadow-color:#fb2c361a}@supports (color:color-mix(in lab,red,red)){.shadow-red-500\/10{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-red-500) 10%, transparent) var(--tw-shadow-alpha), transparent)}}.ring-\[var\(--accent\)\]{--tw-ring-color:var(--accent)}.ring-offset-1{--tw-ring-offset-width:1px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.ring-offset-\[var\(--bg\)\]{--tw-ring-offset-color:var(--bg)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-500{--tw-duration:.5s;transition-duration:.5s}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}@media(hover:hover){.group-hover\:border-amber-400:is(:where(.group):hover *){border-color:var(--color-amber-400)}}.placeholder\:text-\[var\(--text-muted\)\]::placeholder{color:var(--text-muted)}.last\:mb-0:last-child{margin-bottom:calc(var(--spacing) * 0)}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}@media(hover:hover){.hover\:border-amber-400\/60:hover{border-color:#fcbb0099}@supports (color:color-mix(in lab,red,red)){.hover\:border-amber-400\/60:hover{border-color:color-mix(in oklab,var(--color-amber-400) 60%,transparent)}}.hover\:border-emerald-500\/30:hover{border-color:#00bb7f4d}@supports (color:color-mix(in lab,red,red)){.hover\:border-emerald-500\/30:hover{border-color:color-mix(in oklab,var(--color-emerald-500) 30%,transparent)}}.hover\:border-red-500\/30:hover{border-color:#fb2c364d}@supports (color:color-mix(in lab,red,red)){.hover\:border-red-500\/30:hover{border-color:color-mix(in oklab,var(--color-red-500) 30%,transparent)}}.hover\:bg-\[var\(--node-bg\)\]:hover{background-color:var(--node-bg)}.hover\:bg-\[var\(--surface\)\]:hover{background-color:var(--surface)}.hover\:bg-\[var\(--surface-hover\)\]:hover{background-color:var(--surface-hover)}.hover\:bg-\[var\(--text-muted\)\]:hover{background-color:var(--text-muted)}.hover\:bg-amber-500\/5:hover{background-color:#f99c000d}@supports (color:color-mix(in lab,red,red)){.hover\:bg-amber-500\/5:hover{background-color:color-mix(in oklab,var(--color-amber-500) 5%,transparent)}}.hover\:bg-amber-600:hover{background-color:var(--color-amber-600)}.hover\:bg-emerald-500\/20:hover{background-color:#00bb7f33}@supports (color:color-mix(in lab,red,red)){.hover\:bg-emerald-500\/20:hover{background-color:color-mix(in oklab,var(--color-emerald-500) 20%,transparent)}}.hover\:bg-red-500\/20:hover{background-color:#fb2c3633}@supports (color:color-mix(in lab,red,red)){.hover\:bg-red-500\/20:hover{background-color:color-mix(in oklab,var(--color-red-500) 20%,transparent)}}.hover\:bg-red-500\/30:hover{background-color:#fb2c364d}@supports (color:color-mix(in lab,red,red)){.hover\:bg-red-500\/30:hover{background-color:color-mix(in oklab,var(--color-red-500) 30%,transparent)}}.hover\:text-\[var\(--accent\)\]:hover{color:var(--accent)}.hover\:text-\[var\(--text\)\]:hover{color:var(--text)}.hover\:text-\[var\(--text-secondary\)\]:hover{color:var(--text-secondary)}.hover\:text-blue-300:hover{color:var(--color-blue-300)}.hover\:text-green-300:hover{color:var(--color-green-300)}.hover\:underline:hover{text-decoration-line:underline}}.focus\:border-amber-400:focus{border-color:var(--color-amber-400)}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}}:root{--bg:#0a0a0f;--bg-subtle:#111118;--surface:#16161e;--surface-hover:#1c1c26;--surface-raised:#1e1e28;--border:#2a2a3a;--border-subtle:#223;--text:#e4e4ef;--text-secondary:#a0a0b8;--text-muted:#6b6b80;--pending:#52525b;--running:#3b82f6;--running-glow:#3b82f680;--completed:#22c55e;--completed-muted:#22c55e40;--failed:#ef4444;--failed-muted:#ef444440;--waiting:#f59e0b;--waiting-muted:#f59e0b40;--skipped:#6b7280;--accent:#6366f1;--accent-muted:#6366f140;--node-bg:#1e1e2a;--node-border:#2e2e42;--edge-color:#2e2e42;--edge-active:#3b82f6;--edge-taken:#22c55e;--minimap-bg:#0d0d14;--minimap-mask:#ffffff10;--minimap-node:#3b82f680;--font-sans:ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--font-mono:ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace}*{box-sizing:border-box;margin:0;padding:0}html,body,#root{width:100%;height:100%;overflow:hidden}body{font-family:var(--font-sans);background:var(--bg);color:var(--text);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.react-flow__background{background:var(--bg)!important}.react-flow__minimap{background:var(--minimap-bg)!important;border:1px solid var(--border)!important;border-radius:8px!important}.react-flow__controls{overflow:hidden;border:1px solid var(--border)!important;border-radius:8px!important;box-shadow:0 4px 12px #0006!important}.react-flow__controls-button{background:var(--surface)!important;border:none!important;border-bottom:1px solid var(--border)!important;color:var(--text-secondary)!important;fill:var(--text-secondary)!important;width:32px!important;height:32px!important}.react-flow__controls-button:hover{background:var(--surface-hover)!important;color:var(--text)!important;fill:var(--text)!important}.react-flow__controls-button:last-child{border-bottom:none!important}@keyframes pulse-ring{0%{box-shadow:0 0 0 0 var(--running-glow)}70%{box-shadow:0 0 0 6px #0000}to{box-shadow:0 0 #0000}}@keyframes subtle-pulse{0%,to{opacity:1}50%{opacity:.7}}@keyframes context-pulse{0%,to{opacity:1}50%{opacity:.4}}@keyframes dash-flow{to{stroke-dashoffset:-20px}}@keyframes node-activate{0%{transform:scale(1)}50%{transform:scale(1.03)}to{transform:scale(1)}}@keyframes node-complete-glow{0%{box-shadow:0 0 0 0 var(--completed-muted)}50%{box-shadow:0 0 16px 4px var(--completed-muted)}to{box-shadow:0 0 #0000}}@keyframes node-fail-glow{0%{box-shadow:0 0 0 0 var(--failed-muted)}50%{box-shadow:0 0 16px 4px var(--failed-muted)}to{box-shadow:0 0 #0000}}.node-activate{animation:.3s ease-out node-activate}.node-complete{animation:.4s ease-out node-complete-glow}.node-fail{animation:.4s ease-out node-fail-glow}@keyframes tooltip-in{0%{opacity:0;transform:translate(-50%,4px)}to{opacity:1;transform:translate(-50%)}}@keyframes banner-in{0%{opacity:0;transform:translate(-50%,-8px)}to{opacity:1;transform:translate(-50%)}}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:var(--text-muted)}[data-panel-group-direction=horizontal]>[data-resize-handle-active],[data-panel-group-direction=vertical]>[data-resize-handle-active]{background-color:var(--accent)!important}[data-resize-handle]{transition:background-color .15s;background-color:var(--border)!important}[data-resize-handle]:hover{background-color:var(--text-muted)!important}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}@keyframes pulse{50%{opacity:.5}}.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: #777;--xy-background-pattern-lines-color-default: #777;--xy-background-pattern-cross-color-default: #777;--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}.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))} diff --git a/src/conductor/web/static/assets/index-DtQyLSS-.js b/src/conductor/web/static/assets/index-DtQyLSS-.js new file mode 100644 index 0000000..fbce94a --- /dev/null +++ b/src/conductor/web/static/assets/index-DtQyLSS-.js @@ -0,0 +1,321 @@ +var I2=Object.defineProperty;var V2=(e,n,r)=>n in e?I2(e,n,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[n]=r;var kt=(e,n,r)=>V2(e,typeof n!="symbol"?n+"":n,r);function G2(e,n){for(var r=0;rl[a]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}(function(){const n=document.createElement("link").relList;if(n&&n.supports&&n.supports("modulepreload"))return;for(const a of document.querySelectorAll('link[rel="modulepreload"]'))l(a);new MutationObserver(a=>{for(const s of a)if(s.type==="childList")for(const u of s.addedNodes)u.tagName==="LINK"&&u.rel==="modulepreload"&&l(u)}).observe(document,{childList:!0,subtree:!0});function r(a){const s={};return a.integrity&&(s.integrity=a.integrity),a.referrerPolicy&&(s.referrerPolicy=a.referrerPolicy),a.crossOrigin==="use-credentials"?s.credentials="include":a.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function l(a){if(a.ep)return;a.ep=!0;const s=r(a);fetch(a.href,s)}})();function Io(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var Gd={exports:{}},ao={};/** + * @license React + * react-jsx-runtime.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 yx;function P2(){if(yx)return ao;yx=1;var e=Symbol.for("react.transitional.element"),n=Symbol.for("react.fragment");function r(l,a,s){var u=null;if(s!==void 0&&(u=""+s),a.key!==void 0&&(u=""+a.key),"key"in a){s={};for(var f in a)f!=="key"&&(s[f]=a[f])}else s=a;return a=s.ref,{$$typeof:e,type:l,key:u,ref:a!==void 0?a:null,props:s}}return ao.Fragment=n,ao.jsx=r,ao.jsxs=r,ao}var xx;function $2(){return xx||(xx=1,Gd.exports=P2()),Gd.exports}var b=$2(),Pd={exports:{}},Ae={};/** + * @license React + * react.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 vx;function Y2(){if(vx)return Ae;vx=1;var e=Symbol.for("react.transitional.element"),n=Symbol.for("react.portal"),r=Symbol.for("react.fragment"),l=Symbol.for("react.strict_mode"),a=Symbol.for("react.profiler"),s=Symbol.for("react.consumer"),u=Symbol.for("react.context"),f=Symbol.for("react.forward_ref"),h=Symbol.for("react.suspense"),d=Symbol.for("react.memo"),m=Symbol.for("react.lazy"),p=Symbol.for("react.activity"),y=Symbol.iterator;function v(H){return H===null||typeof H!="object"?null:(H=y&&H[y]||H["@@iterator"],typeof H=="function"?H:null)}var _={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},k=Object.assign,w={};function S(H,Y,N){this.props=H,this.context=Y,this.refs=w,this.updater=N||_}S.prototype.isReactComponent={},S.prototype.setState=function(H,Y){if(typeof H!="object"&&typeof H!="function"&&H!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,H,Y,"setState")},S.prototype.forceUpdate=function(H){this.updater.enqueueForceUpdate(this,H,"forceUpdate")};function T(){}T.prototype=S.prototype;function E(H,Y,N){this.props=H,this.context=Y,this.refs=w,this.updater=N||_}var A=E.prototype=new T;A.constructor=E,k(A,S.prototype),A.isPureReactComponent=!0;var I=Array.isArray;function z(){}var R={H:null,A:null,T:null,S:null},D=Object.prototype.hasOwnProperty;function U(H,Y,N){var G=N.ref;return{$$typeof:e,type:H,key:Y,ref:G!==void 0?G:null,props:N}}function X(H,Y){return U(H.type,Y,H.props)}function B(H){return typeof H=="object"&&H!==null&&H.$$typeof===e}function q(H){var Y={"=":"=0",":":"=2"};return"$"+H.replace(/[=:]/g,function(N){return Y[N]})}var ee=/\/+/g;function L(H,Y){return typeof H=="object"&&H!==null&&H.key!=null?q(""+H.key):Y.toString(36)}function $(H){switch(H.status){case"fulfilled":return H.value;case"rejected":throw H.reason;default:switch(typeof H.status=="string"?H.then(z,z):(H.status="pending",H.then(function(Y){H.status==="pending"&&(H.status="fulfilled",H.value=Y)},function(Y){H.status==="pending"&&(H.status="rejected",H.reason=Y)})),H.status){case"fulfilled":return H.value;case"rejected":throw H.reason}}throw H}function M(H,Y,N,G,F){var J=typeof H;(J==="undefined"||J==="boolean")&&(H=null);var ne=!1;if(H===null)ne=!0;else switch(J){case"bigint":case"string":case"number":ne=!0;break;case"object":switch(H.$$typeof){case e:case n:ne=!0;break;case m:return ne=H._init,M(ne(H._payload),Y,N,G,F)}}if(ne)return F=F(H),ne=G===""?"."+L(H,0):G,I(F)?(N="",ne!=null&&(N=ne.replace(ee,"$&/")+"/"),M(F,Y,N,"",function(ye){return ye})):F!=null&&(B(F)&&(F=X(F,N+(F.key==null||H&&H.key===F.key?"":(""+F.key).replace(ee,"$&/")+"/")+ne)),Y.push(F)),1;ne=0;var re=G===""?".":G+":";if(I(H))for(var se=0;se>>1,j=M[K];if(0>>1;Ka(N,Q))Ga(F,N)?(M[K]=F,M[G]=Q,K=G):(M[K]=N,M[Y]=Q,K=Y);else if(Ga(F,Q))M[K]=F,M[G]=Q,K=G;else break e}}return P}function a(M,P){var Q=M.sortIndex-P.sortIndex;return Q!==0?Q:M.id-P.id}if(e.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var s=performance;e.unstable_now=function(){return s.now()}}else{var u=Date,f=u.now();e.unstable_now=function(){return u.now()-f}}var h=[],d=[],m=1,p=null,y=3,v=!1,_=!1,k=!1,w=!1,S=typeof setTimeout=="function"?setTimeout:null,T=typeof clearTimeout=="function"?clearTimeout:null,E=typeof setImmediate<"u"?setImmediate:null;function A(M){for(var P=r(d);P!==null;){if(P.callback===null)l(d);else if(P.startTime<=M)l(d),P.sortIndex=P.expirationTime,n(h,P);else break;P=r(d)}}function I(M){if(k=!1,A(M),!_)if(r(h)!==null)_=!0,z||(z=!0,q());else{var P=r(d);P!==null&&$(I,P.startTime-M)}}var z=!1,R=-1,D=5,U=-1;function X(){return w?!0:!(e.unstable_now()-UM&&X());){var K=p.callback;if(typeof K=="function"){p.callback=null,y=p.priorityLevel;var j=K(p.expirationTime<=M);if(M=e.unstable_now(),typeof j=="function"){p.callback=j,A(M),P=!0;break t}p===r(h)&&l(h),A(M)}else l(h);p=r(h)}if(p!==null)P=!0;else{var H=r(d);H!==null&&$(I,H.startTime-M),P=!1}}break e}finally{p=null,y=Q,v=!1}P=void 0}}finally{P?q():z=!1}}}var q;if(typeof E=="function")q=function(){E(B)};else if(typeof MessageChannel<"u"){var ee=new MessageChannel,L=ee.port2;ee.port1.onmessage=B,q=function(){L.postMessage(null)}}else q=function(){S(B,0)};function $(M,P){R=S(function(){M(e.unstable_now())},P)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(M){M.callback=null},e.unstable_forceFrameRate=function(M){0>M||125K?(M.sortIndex=Q,n(d,M),r(h)===null&&M===r(d)&&(k?(T(R),R=-1):k=!0,$(I,Q-K))):(M.sortIndex=j,n(h,M),_||v||(_=!0,z||(z=!0,q()))),M},e.unstable_shouldYield=X,e.unstable_wrapCallback=function(M){var P=y;return function(){var Q=y;y=P;try{return M.apply(this,arguments)}finally{y=Q}}}})(Xd)),Xd}var Sx;function Q2(){return Sx||(Sx=1,Yd.exports=F2()),Yd.exports}var Fd={exports:{}},$t={};/** + * @license React + * react-dom.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 _x;function Z2(){if(_x)return $t;_x=1;var e=Vo();function n(h){var d="https://react.dev/errors/"+h;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(n){console.error(n)}}return e(),Fd.exports=Z2(),Fd.exports}/** + * @license React + * react-dom-client.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 Nx;function K2(){if(Nx)return oo;Nx=1;var e=Q2(),n=Vo(),r=Db();function l(t){var i="https://react.dev/errors/"+t;if(1j||(t.current=K[j],K[j]=null,j--)}function N(t,i){j++,K[j]=t.current,t.current=i}var G=H(null),F=H(null),J=H(null),ne=H(null);function re(t,i){switch(N(J,i),N(F,t),N(G,null),i.nodeType){case 9:case 11:t=(t=i.documentElement)&&(t=t.namespaceURI)?Uy(t):0;break;default:if(t=i.tagName,i=i.namespaceURI)i=Uy(i),t=Iy(i,t);else switch(t){case"svg":t=1;break;case"math":t=2;break;default:t=0}}Y(G),N(G,t)}function se(){Y(G),Y(F),Y(J)}function ye(t){t.memoizedState!==null&&N(ne,t);var i=G.current,o=Iy(i,t.type);i!==o&&(N(F,t),N(G,o))}function be(t){F.current===t&&(Y(G),Y(F)),ne.current===t&&(Y(ne),no._currentValue=Q)}var xe,pe;function _e(t){if(xe===void 0)try{throw Error()}catch(o){var i=o.stack.trim().match(/\n( *(at )?)/);xe=i&&i[1]||"",pe=-1)":-1g||Z[c]!==le[g]){var ce=` +`+Z[c].replace(" at new "," at ");return t.displayName&&ce.includes("")&&(ce=ce.replace("",t.displayName)),ce}while(1<=c&&0<=g);break}}}finally{Me=!1,Error.prepareStackTrace=o}return(o=t?t.displayName||t.name:"")?_e(o):""}function st(t,i){switch(t.tag){case 26:case 27:case 5:return _e(t.type);case 16:return _e("Lazy");case 13:return t.child!==i&&i!==null?_e("Suspense Fallback"):_e("Suspense");case 19:return _e("SuspenseList");case 0:case 15:return Ce(t.type,!1);case 11:return Ce(t.type.render,!1);case 1:return Ce(t.type,!0);case 31:return _e("Activity");default:return""}}function tt(t){try{var i="",o=null;do i+=st(t,o),o=t,t=t.return;while(t);return i}catch(c){return` +Error generating stack: `+c.message+` +`+c.stack}}var zt=Object.prototype.hasOwnProperty,Vt=e.unstable_scheduleCallback,Lt=e.unstable_cancelCallback,Sn=e.unstable_shouldYield,jn=e.unstable_requestPaint,Mt=e.unstable_now,Dr=e.unstable_getCurrentPriorityLevel,ue=e.unstable_ImmediatePriority,ge=e.unstable_UserBlockingPriority,Ne=e.unstable_NormalPriority,Re=e.unstable_LowPriority,Ye=e.unstable_IdlePriority,Xt=e.log,On=e.unstable_setDisableYieldValue,Ht=null,xt=null;function Gt(t){if(typeof Xt=="function"&&On(t),xt&&typeof xt.setStrictMode=="function")try{xt.setStrictMode(Ht,t)}catch{}}var Je=Math.clz32?Math.clz32:zc,Xn=Math.log,un=Math.LN2;function zc(t){return t>>>=0,t===0?32:31-(Xn(t)/un|0)|0}var il=256,ll=262144,al=4194304;function ar(t){var i=t&42;if(i!==0)return i;switch(t&-t){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:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return t&261888;case 262144:case 524288:case 1048576:case 2097152:return t&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return t&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return t}}function ol(t,i,o){var c=t.pendingLanes;if(c===0)return 0;var g=0,x=t.suspendedLanes,C=t.pingedLanes;t=t.warmLanes;var O=c&134217727;return O!==0?(c=O&~x,c!==0?g=ar(c):(C&=O,C!==0?g=ar(C):o||(o=O&~t,o!==0&&(g=ar(o))))):(O=c&~x,O!==0?g=ar(O):C!==0?g=ar(C):o||(o=c&~t,o!==0&&(g=ar(o)))),g===0?0:i!==0&&i!==g&&(i&x)===0&&(x=g&-g,o=i&-i,x>=o||x===32&&(o&4194048)!==0)?i:g}function yi(t,i){return(t.pendingLanes&~(t.suspendedLanes&~t.pingedLanes)&i)===0}function Mc(t,i){switch(t){case 1:case 2:case 4:case 8:case 64:return i+250;case 16:case 32: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 i+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function es(){var t=al;return al<<=1,(al&62914560)===0&&(al=4194304),t}function ha(t){for(var i=[],o=0;31>o;o++)i.push(t);return i}function xi(t,i){t.pendingLanes|=i,i!==268435456&&(t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0)}function jc(t,i,o,c,g,x){var C=t.pendingLanes;t.pendingLanes=o,t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0,t.expiredLanes&=o,t.entangledLanes&=o,t.errorRecoveryDisabledLanes&=o,t.shellSuspendCounter=0;var O=t.entanglements,Z=t.expirationTimes,le=t.hiddenUpdates;for(o=C&~o;0"u")return null;try{return t.activeElement||t.body}catch{return t.body}}var Hc=/[\n"\\]/g;function Kt(t){return t.replace(Hc,function(i){return"\\"+i.charCodeAt(0).toString(16)+" "})}function wi(t,i,o,c,g,x,C,O){t.name="",C!=null&&typeof C!="function"&&typeof C!="symbol"&&typeof C!="boolean"?t.type=C:t.removeAttribute("type"),i!=null?C==="number"?(i===0&&t.value===""||t.value!=i)&&(t.value=""+Zt(i)):t.value!==""+Zt(i)&&(t.value=""+Zt(i)):C!=="submit"&&C!=="reset"||t.removeAttribute("value"),i!=null?xa(t,C,Zt(i)):o!=null?xa(t,C,Zt(o)):c!=null&&t.removeAttribute("value"),g==null&&x!=null&&(t.defaultChecked=!!x),g!=null&&(t.checked=g&&typeof g!="function"&&typeof g!="symbol"),O!=null&&typeof O!="function"&&typeof O!="symbol"&&typeof O!="boolean"?t.name=""+Zt(O):t.removeAttribute("name")}function hs(t,i,o,c,g,x,C,O){if(x!=null&&typeof x!="function"&&typeof x!="symbol"&&typeof x!="boolean"&&(t.type=x),i!=null||o!=null){if(!(x!=="submit"&&x!=="reset"||i!=null)){Ur(t);return}o=o!=null?""+Zt(o):"",i=i!=null?""+Zt(i):o,O||i===t.value||(t.value=i),t.defaultValue=i}c=c??g,c=typeof c!="function"&&typeof c!="symbol"&&!!c,t.checked=O?t.checked:!!c,t.defaultChecked=!!c,C!=null&&typeof C!="function"&&typeof C!="symbol"&&typeof C!="boolean"&&(t.name=C),Ur(t)}function xa(t,i,o){i==="number"&&bi(t.ownerDocument)===t||t.defaultValue===""+o||(t.defaultValue=""+o)}function ur(t,i,o,c){if(t=t.options,i){i={};for(var g=0;g"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Vc=!1;if(fr)try{var ba={};Object.defineProperty(ba,"passive",{get:function(){Vc=!0}}),window.addEventListener("test",ba,ba),window.removeEventListener("test",ba,ba)}catch{Vc=!1}var Ir=null,Gc=null,ms=null;function Im(){if(ms)return ms;var t,i=Gc,o=i.length,c,g="value"in Ir?Ir.value:Ir.textContent,x=g.length;for(t=0;t=_a),Xm=" ",Fm=!1;function Qm(t,i){switch(t){case"keyup":return uE.indexOf(i.keyCode)!==-1;case"keydown":return i.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Zm(t){return t=t.detail,typeof t=="object"&&"data"in t?t.data:null}var pl=!1;function fE(t,i){switch(t){case"compositionend":return Zm(i);case"keypress":return i.which!==32?null:(Fm=!0,Xm);case"textInput":return t=i.data,t===Xm&&Fm?null:t;default:return null}}function dE(t,i){if(pl)return t==="compositionend"||!Fc&&Qm(t,i)?(t=Im(),ms=Gc=Ir=null,pl=!1,t):null;switch(t){case"paste":return null;case"keypress":if(!(i.ctrlKey||i.altKey||i.metaKey)||i.ctrlKey&&i.altKey){if(i.char&&1=i)return{node:o,offset:i-t};t=c}e:{for(;o;){if(o.nextSibling){o=o.nextSibling;break e}o=o.parentNode}o=void 0}o=ig(o)}}function ag(t,i){return t&&i?t===i?!0:t&&t.nodeType===3?!1:i&&i.nodeType===3?ag(t,i.parentNode):"contains"in t?t.contains(i):t.compareDocumentPosition?!!(t.compareDocumentPosition(i)&16):!1:!1}function og(t){t=t!=null&&t.ownerDocument!=null&&t.ownerDocument.defaultView!=null?t.ownerDocument.defaultView:window;for(var i=bi(t.document);i instanceof t.HTMLIFrameElement;){try{var o=typeof i.contentWindow.location.href=="string"}catch{o=!1}if(o)t=i.contentWindow;else break;i=bi(t.document)}return i}function Kc(t){var i=t&&t.nodeName&&t.nodeName.toLowerCase();return i&&(i==="input"&&(t.type==="text"||t.type==="search"||t.type==="tel"||t.type==="url"||t.type==="password")||i==="textarea"||t.contentEditable==="true")}var bE=fr&&"documentMode"in document&&11>=document.documentMode,ml=null,Jc=null,Ca=null,Wc=!1;function sg(t,i,o){var c=o.window===o?o.document:o.nodeType===9?o:o.ownerDocument;Wc||ml==null||ml!==bi(c)||(c=ml,"selectionStart"in c&&Kc(c)?c={start:c.selectionStart,end:c.selectionEnd}:(c=(c.ownerDocument&&c.ownerDocument.defaultView||window).getSelection(),c={anchorNode:c.anchorNode,anchorOffset:c.anchorOffset,focusNode:c.focusNode,focusOffset:c.focusOffset}),Ca&&ka(Ca,c)||(Ca=c,c=su(Jc,"onSelect"),0>=C,g-=C,Qn=1<<32-Je(i)+g|o<je?(Ue=Se,Se=null):Ue=Se.sibling;var Fe=ae(te,Se,ie[je],fe);if(Fe===null){Se===null&&(Se=Ue);break}t&&Se&&Fe.alternate===null&&i(te,Se),W=x(Fe,W,je),Xe===null?Ee=Fe:Xe.sibling=Fe,Xe=Fe,Se=Ue}if(je===ie.length)return o(te,Se),Ve&&hr(te,je),Ee;if(Se===null){for(;jeje?(Ue=Se,Se=null):Ue=Se.sibling;var ui=ae(te,Se,Fe.value,fe);if(ui===null){Se===null&&(Se=Ue);break}t&&Se&&ui.alternate===null&&i(te,Se),W=x(ui,W,je),Xe===null?Ee=ui:Xe.sibling=ui,Xe=ui,Se=Ue}if(Fe.done)return o(te,Se),Ve&&hr(te,je),Ee;if(Se===null){for(;!Fe.done;je++,Fe=ie.next())Fe=de(te,Fe.value,fe),Fe!==null&&(W=x(Fe,W,je),Xe===null?Ee=Fe:Xe.sibling=Fe,Xe=Fe);return Ve&&hr(te,je),Ee}for(Se=c(Se);!Fe.done;je++,Fe=ie.next())Fe=oe(Se,te,je,Fe.value,fe),Fe!==null&&(t&&Fe.alternate!==null&&Se.delete(Fe.key===null?je:Fe.key),W=x(Fe,W,je),Xe===null?Ee=Fe:Xe.sibling=Fe,Xe=Fe);return t&&Se.forEach(function(U2){return i(te,U2)}),Ve&&hr(te,je),Ee}function it(te,W,ie,fe){if(typeof ie=="object"&&ie!==null&&ie.type===k&&ie.key===null&&(ie=ie.props.children),typeof ie=="object"&&ie!==null){switch(ie.$$typeof){case v:e:{for(var Ee=ie.key;W!==null;){if(W.key===Ee){if(Ee=ie.type,Ee===k){if(W.tag===7){o(te,W.sibling),fe=g(W,ie.props.children),fe.return=te,te=fe;break e}}else if(W.elementType===Ee||typeof Ee=="object"&&Ee!==null&&Ee.$$typeof===D&&Mi(Ee)===W.type){o(te,W.sibling),fe=g(W,ie.props),Oa(fe,ie),fe.return=te,te=fe;break e}o(te,W);break}else i(te,W);W=W.sibling}ie.type===k?(fe=ki(ie.props.children,te.mode,fe,ie.key),fe.return=te,te=fe):(fe=Ns(ie.type,ie.key,ie.props,null,te.mode,fe),Oa(fe,ie),fe.return=te,te=fe)}return C(te);case _:e:{for(Ee=ie.key;W!==null;){if(W.key===Ee)if(W.tag===4&&W.stateNode.containerInfo===ie.containerInfo&&W.stateNode.implementation===ie.implementation){o(te,W.sibling),fe=g(W,ie.children||[]),fe.return=te,te=fe;break e}else{o(te,W);break}else i(te,W);W=W.sibling}fe=of(ie,te.mode,fe),fe.return=te,te=fe}return C(te);case D:return ie=Mi(ie),it(te,W,ie,fe)}if($(ie))return we(te,W,ie,fe);if(q(ie)){if(Ee=q(ie),typeof Ee!="function")throw Error(l(150));return ie=Ee.call(ie),ke(te,W,ie,fe)}if(typeof ie.then=="function")return it(te,W,js(ie),fe);if(ie.$$typeof===E)return it(te,W,Ts(te,ie),fe);Os(te,ie)}return typeof ie=="string"&&ie!==""||typeof ie=="number"||typeof ie=="bigint"?(ie=""+ie,W!==null&&W.tag===6?(o(te,W.sibling),fe=g(W,ie),fe.return=te,te=fe):(o(te,W),fe=af(ie,te.mode,fe),fe.return=te,te=fe),C(te)):o(te,W)}return function(te,W,ie,fe){try{ja=0;var Ee=it(te,W,ie,fe);return kl=null,Ee}catch(Se){if(Se===Nl||Se===zs)throw Se;var Xe=fn(29,Se,null,te.mode);return Xe.lanes=fe,Xe.return=te,Xe}finally{}}}var Oi=Mg(!0),jg=Mg(!1),Yr=!1;function vf(t){t.updateQueue={baseState:t.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function bf(t,i){t=t.updateQueue,i.updateQueue===t&&(i.updateQueue={baseState:t.baseState,firstBaseUpdate:t.firstBaseUpdate,lastBaseUpdate:t.lastBaseUpdate,shared:t.shared,callbacks:null})}function Xr(t){return{lane:t,tag:0,payload:null,callback:null,next:null}}function Fr(t,i,o){var c=t.updateQueue;if(c===null)return null;if(c=c.shared,(Ze&2)!==0){var g=c.pending;return g===null?i.next=i:(i.next=g.next,g.next=i),c.pending=i,i=Es(t),mg(t,null,o),i}return _s(t,c,i,o),Es(t)}function Da(t,i,o){if(i=i.updateQueue,i!==null&&(i=i.shared,(o&4194048)!==0)){var c=i.lanes;c&=t.pendingLanes,o|=c,i.lanes=o,ns(t,o)}}function wf(t,i){var o=t.updateQueue,c=t.alternate;if(c!==null&&(c=c.updateQueue,o===c)){var g=null,x=null;if(o=o.firstBaseUpdate,o!==null){do{var C={lane:o.lane,tag:o.tag,payload:o.payload,callback:null,next:null};x===null?g=x=C:x=x.next=C,o=o.next}while(o!==null);x===null?g=x=i:x=x.next=i}else g=x=i;o={baseState:c.baseState,firstBaseUpdate:g,lastBaseUpdate:x,shared:c.shared,callbacks:c.callbacks},t.updateQueue=o;return}t=o.lastBaseUpdate,t===null?o.firstBaseUpdate=i:t.next=i,o.lastBaseUpdate=i}var Sf=!1;function Ra(){if(Sf){var t=El;if(t!==null)throw t}}function La(t,i,o,c){Sf=!1;var g=t.updateQueue;Yr=!1;var x=g.firstBaseUpdate,C=g.lastBaseUpdate,O=g.shared.pending;if(O!==null){g.shared.pending=null;var Z=O,le=Z.next;Z.next=null,C===null?x=le:C.next=le,C=Z;var ce=t.alternate;ce!==null&&(ce=ce.updateQueue,O=ce.lastBaseUpdate,O!==C&&(O===null?ce.firstBaseUpdate=le:O.next=le,ce.lastBaseUpdate=Z))}if(x!==null){var de=g.baseState;C=0,ce=le=Z=null,O=x;do{var ae=O.lane&-536870913,oe=ae!==O.lane;if(oe?(qe&ae)===ae:(c&ae)===ae){ae!==0&&ae===_l&&(Sf=!0),ce!==null&&(ce=ce.next={lane:0,tag:O.tag,payload:O.payload,callback:null,next:null});e:{var we=t,ke=O;ae=i;var it=o;switch(ke.tag){case 1:if(we=ke.payload,typeof we=="function"){de=we.call(it,de,ae);break e}de=we;break e;case 3:we.flags=we.flags&-65537|128;case 0:if(we=ke.payload,ae=typeof we=="function"?we.call(it,de,ae):we,ae==null)break e;de=p({},de,ae);break e;case 2:Yr=!0}}ae=O.callback,ae!==null&&(t.flags|=64,oe&&(t.flags|=8192),oe=g.callbacks,oe===null?g.callbacks=[ae]:oe.push(ae))}else oe={lane:ae,tag:O.tag,payload:O.payload,callback:O.callback,next:null},ce===null?(le=ce=oe,Z=de):ce=ce.next=oe,C|=ae;if(O=O.next,O===null){if(O=g.shared.pending,O===null)break;oe=O,O=oe.next,oe.next=null,g.lastBaseUpdate=oe,g.shared.pending=null}}while(!0);ce===null&&(Z=de),g.baseState=Z,g.firstBaseUpdate=le,g.lastBaseUpdate=ce,x===null&&(g.shared.lanes=0),Wr|=C,t.lanes=C,t.memoizedState=de}}function Og(t,i){if(typeof t!="function")throw Error(l(191,t));t.call(i)}function Dg(t,i){var o=t.callbacks;if(o!==null)for(t.callbacks=null,t=0;tx?x:8;var C=M.T,O={};M.T=O,If(t,!1,i,o);try{var Z=g(),le=M.S;if(le!==null&&le(O,Z),Z!==null&&typeof Z=="object"&&typeof Z.then=="function"){var ce=AE(Z,c);qa(t,i,ce,gn(t))}else qa(t,i,c,gn(t))}catch(de){qa(t,i,{then:function(){},status:"rejected",reason:de},gn())}finally{P.p=x,C!==null&&O.types!==null&&(C.types=O.types),M.T=C}}function RE(){}function qf(t,i,o,c){if(t.tag!==5)throw Error(l(476));var g=d0(t).queue;f0(t,g,i,Q,o===null?RE:function(){return h0(t),o(c)})}function d0(t){var i=t.memoizedState;if(i!==null)return i;i={memoizedState:Q,baseState:Q,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:yr,lastRenderedState:Q},next:null};var o={};return i.next={memoizedState:o,baseState:o,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:yr,lastRenderedState:o},next:null},t.memoizedState=i,t=t.alternate,t!==null&&(t.memoizedState=i),i}function h0(t){var i=d0(t);i.next===null&&(i=t.alternate.memoizedState),qa(t,i.next.queue,{},gn())}function Uf(){return qt(no)}function p0(){return bt().memoizedState}function m0(){return bt().memoizedState}function LE(t){for(var i=t.return;i!==null;){switch(i.tag){case 24:case 3:var o=gn();t=Xr(o);var c=Fr(i,t,o);c!==null&&(rn(c,i,o),Da(c,i,o)),i={cache:mf()},t.payload=i;return}i=i.return}}function HE(t,i,o){var c=gn();o={lane:c,revertLane:0,gesture:null,action:o,hasEagerState:!1,eagerState:null,next:null},Gs(t)?y0(i,o):(o=rf(t,i,o,c),o!==null&&(rn(o,t,c),x0(o,i,c)))}function g0(t,i,o){var c=gn();qa(t,i,o,c)}function qa(t,i,o,c){var g={lane:c,revertLane:0,gesture:null,action:o,hasEagerState:!1,eagerState:null,next:null};if(Gs(t))y0(i,g);else{var x=t.alternate;if(t.lanes===0&&(x===null||x.lanes===0)&&(x=i.lastRenderedReducer,x!==null))try{var C=i.lastRenderedState,O=x(C,o);if(g.hasEagerState=!0,g.eagerState=O,cn(O,C))return _s(t,i,g,0),lt===null&&Ss(),!1}catch{}finally{}if(o=rf(t,i,g,c),o!==null)return rn(o,t,c),x0(o,i,c),!0}return!1}function If(t,i,o,c){if(c={lane:2,revertLane:vd(),gesture:null,action:c,hasEagerState:!1,eagerState:null,next:null},Gs(t)){if(i)throw Error(l(479))}else i=rf(t,o,c,2),i!==null&&rn(i,t,2)}function Gs(t){var i=t.alternate;return t===ze||i!==null&&i===ze}function y0(t,i){Tl=Ls=!0;var o=t.pending;o===null?i.next=i:(i.next=o.next,o.next=i),t.pending=i}function x0(t,i,o){if((o&4194048)!==0){var c=i.lanes;c&=t.pendingLanes,o|=c,i.lanes=o,ns(t,o)}}var Ua={readContext:qt,use:qs,useCallback:mt,useContext:mt,useEffect:mt,useImperativeHandle:mt,useLayoutEffect:mt,useInsertionEffect:mt,useMemo:mt,useReducer:mt,useRef:mt,useState:mt,useDebugValue:mt,useDeferredValue:mt,useTransition:mt,useSyncExternalStore:mt,useId:mt,useHostTransitionStatus:mt,useFormState:mt,useActionState:mt,useOptimistic:mt,useMemoCache:mt,useCacheRefresh:mt};Ua.useEffectEvent=mt;var v0={readContext:qt,use:qs,useCallback:function(t,i){return Ft().memoizedState=[t,i===void 0?null:i],t},useContext:qt,useEffect:n0,useImperativeHandle:function(t,i,o){o=o!=null?o.concat([t]):null,Is(4194308,4,a0.bind(null,i,t),o)},useLayoutEffect:function(t,i){return Is(4194308,4,t,i)},useInsertionEffect:function(t,i){Is(4,2,t,i)},useMemo:function(t,i){var o=Ft();i=i===void 0?null:i;var c=t();if(Di){Gt(!0);try{t()}finally{Gt(!1)}}return o.memoizedState=[c,i],c},useReducer:function(t,i,o){var c=Ft();if(o!==void 0){var g=o(i);if(Di){Gt(!0);try{o(i)}finally{Gt(!1)}}}else g=i;return c.memoizedState=c.baseState=g,t={pending:null,lanes:0,dispatch:null,lastRenderedReducer:t,lastRenderedState:g},c.queue=t,t=t.dispatch=HE.bind(null,ze,t),[c.memoizedState,t]},useRef:function(t){var i=Ft();return t={current:t},i.memoizedState=t},useState:function(t){t=Df(t);var i=t.queue,o=g0.bind(null,ze,i);return i.dispatch=o,[t.memoizedState,o]},useDebugValue:Hf,useDeferredValue:function(t,i){var o=Ft();return Bf(o,t,i)},useTransition:function(){var t=Df(!1);return t=f0.bind(null,ze,t.queue,!0,!1),Ft().memoizedState=t,[!1,t]},useSyncExternalStore:function(t,i,o){var c=ze,g=Ft();if(Ve){if(o===void 0)throw Error(l(407));o=o()}else{if(o=i(),lt===null)throw Error(l(349));(qe&127)!==0||Ug(c,i,o)}g.memoizedState=o;var x={value:o,getSnapshot:i};return g.queue=x,n0(Vg.bind(null,c,x,t),[t]),c.flags|=2048,zl(9,{destroy:void 0},Ig.bind(null,c,x,o,i),null),o},useId:function(){var t=Ft(),i=lt.identifierPrefix;if(Ve){var o=Zn,c=Qn;o=(c&~(1<<32-Je(c)-1)).toString(32)+o,i="_"+i+"R_"+o,o=Hs++,0<\/script>",x=x.removeChild(x.firstChild);break;case"select":x=typeof c.is=="string"?C.createElement("select",{is:c.is}):C.createElement("select"),c.multiple?x.multiple=!0:c.size&&(x.size=c.size);break;default:x=typeof c.is=="string"?C.createElement(g,{is:c.is}):C.createElement(g)}}x[jt]=i,x[Pt]=c;e:for(C=i.child;C!==null;){if(C.tag===5||C.tag===6)x.appendChild(C.stateNode);else if(C.tag!==4&&C.tag!==27&&C.child!==null){C.child.return=C,C=C.child;continue}if(C===i)break e;for(;C.sibling===null;){if(C.return===null||C.return===i)break e;C=C.return}C.sibling.return=C.return,C=C.sibling}i.stateNode=x;e:switch(It(x,g,c),g){case"button":case"input":case"select":case"textarea":c=!!c.autoFocus;break e;case"img":c=!0;break e;default:c=!1}c&&vr(i)}}return ct(i),td(i,i.type,t===null?null:t.memoizedProps,i.pendingProps,o),null;case 6:if(t&&i.stateNode!=null)t.memoizedProps!==c&&vr(i);else{if(typeof c!="string"&&i.stateNode===null)throw Error(l(166));if(t=J.current,wl(i)){if(t=i.stateNode,o=i.memoizedProps,c=null,g=Bt,g!==null)switch(g.tag){case 27:case 5:c=g.memoizedProps}t[jt]=i,t=!!(t.nodeValue===o||c!==null&&c.suppressHydrationWarning===!0||By(t.nodeValue,o)),t||Pr(i,!0)}else t=uu(t).createTextNode(c),t[jt]=i,i.stateNode=t}return ct(i),null;case 31:if(o=i.memoizedState,t===null||t.memoizedState!==null){if(c=wl(i),o!==null){if(t===null){if(!c)throw Error(l(318));if(t=i.memoizedState,t=t!==null?t.dehydrated:null,!t)throw Error(l(557));t[jt]=i}else Ci(),(i.flags&128)===0&&(i.memoizedState=null),i.flags|=4;ct(i),t=!1}else o=ff(),t!==null&&t.memoizedState!==null&&(t.memoizedState.hydrationErrors=o),t=!0;if(!t)return i.flags&256?(hn(i),i):(hn(i),null);if((i.flags&128)!==0)throw Error(l(558))}return ct(i),null;case 13:if(c=i.memoizedState,t===null||t.memoizedState!==null&&t.memoizedState.dehydrated!==null){if(g=wl(i),c!==null&&c.dehydrated!==null){if(t===null){if(!g)throw Error(l(318));if(g=i.memoizedState,g=g!==null?g.dehydrated:null,!g)throw Error(l(317));g[jt]=i}else Ci(),(i.flags&128)===0&&(i.memoizedState=null),i.flags|=4;ct(i),g=!1}else g=ff(),t!==null&&t.memoizedState!==null&&(t.memoizedState.hydrationErrors=g),g=!0;if(!g)return i.flags&256?(hn(i),i):(hn(i),null)}return hn(i),(i.flags&128)!==0?(i.lanes=o,i):(o=c!==null,t=t!==null&&t.memoizedState!==null,o&&(c=i.child,g=null,c.alternate!==null&&c.alternate.memoizedState!==null&&c.alternate.memoizedState.cachePool!==null&&(g=c.alternate.memoizedState.cachePool.pool),x=null,c.memoizedState!==null&&c.memoizedState.cachePool!==null&&(x=c.memoizedState.cachePool.pool),x!==g&&(c.flags|=2048)),o!==t&&o&&(i.child.flags|=8192),Fs(i,i.updateQueue),ct(i),null);case 4:return se(),t===null&&_d(i.stateNode.containerInfo),ct(i),null;case 10:return mr(i.type),ct(i),null;case 19:if(Y(vt),c=i.memoizedState,c===null)return ct(i),null;if(g=(i.flags&128)!==0,x=c.rendering,x===null)if(g)Va(c,!1);else{if(gt!==0||t!==null&&(t.flags&128)!==0)for(t=i.child;t!==null;){if(x=Rs(t),x!==null){for(i.flags|=128,Va(c,!1),t=x.updateQueue,i.updateQueue=t,Fs(i,t),i.subtreeFlags=0,t=o,o=i.child;o!==null;)gg(o,t),o=o.sibling;return N(vt,vt.current&1|2),Ve&&hr(i,c.treeForkCount),i.child}t=t.sibling}c.tail!==null&&Mt()>Ws&&(i.flags|=128,g=!0,Va(c,!1),i.lanes=4194304)}else{if(!g)if(t=Rs(x),t!==null){if(i.flags|=128,g=!0,t=t.updateQueue,i.updateQueue=t,Fs(i,t),Va(c,!0),c.tail===null&&c.tailMode==="hidden"&&!x.alternate&&!Ve)return ct(i),null}else 2*Mt()-c.renderingStartTime>Ws&&o!==536870912&&(i.flags|=128,g=!0,Va(c,!1),i.lanes=4194304);c.isBackwards?(x.sibling=i.child,i.child=x):(t=c.last,t!==null?t.sibling=x:i.child=x,c.last=x)}return c.tail!==null?(t=c.tail,c.rendering=t,c.tail=t.sibling,c.renderingStartTime=Mt(),t.sibling=null,o=vt.current,N(vt,g?o&1|2:o&1),Ve&&hr(i,c.treeForkCount),t):(ct(i),null);case 22:case 23:return hn(i),Ef(),c=i.memoizedState!==null,t!==null?t.memoizedState!==null!==c&&(i.flags|=8192):c&&(i.flags|=8192),c?(o&536870912)!==0&&(i.flags&128)===0&&(ct(i),i.subtreeFlags&6&&(i.flags|=8192)):ct(i),o=i.updateQueue,o!==null&&Fs(i,o.retryQueue),o=null,t!==null&&t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(o=t.memoizedState.cachePool.pool),c=null,i.memoizedState!==null&&i.memoizedState.cachePool!==null&&(c=i.memoizedState.cachePool.pool),c!==o&&(i.flags|=2048),t!==null&&Y(zi),null;case 24:return o=null,t!==null&&(o=t.memoizedState.cache),i.memoizedState.cache!==o&&(i.flags|=2048),mr(St),ct(i),null;case 25:return null;case 30:return null}throw Error(l(156,i.tag))}function VE(t,i){switch(uf(i),i.tag){case 1:return t=i.flags,t&65536?(i.flags=t&-65537|128,i):null;case 3:return mr(St),se(),t=i.flags,(t&65536)!==0&&(t&128)===0?(i.flags=t&-65537|128,i):null;case 26:case 27:case 5:return be(i),null;case 31:if(i.memoizedState!==null){if(hn(i),i.alternate===null)throw Error(l(340));Ci()}return t=i.flags,t&65536?(i.flags=t&-65537|128,i):null;case 13:if(hn(i),t=i.memoizedState,t!==null&&t.dehydrated!==null){if(i.alternate===null)throw Error(l(340));Ci()}return t=i.flags,t&65536?(i.flags=t&-65537|128,i):null;case 19:return Y(vt),null;case 4:return se(),null;case 10:return mr(i.type),null;case 22:case 23:return hn(i),Ef(),t!==null&&Y(zi),t=i.flags,t&65536?(i.flags=t&-65537|128,i):null;case 24:return mr(St),null;case 25:return null;default:return null}}function G0(t,i){switch(uf(i),i.tag){case 3:mr(St),se();break;case 26:case 27:case 5:be(i);break;case 4:se();break;case 31:i.memoizedState!==null&&hn(i);break;case 13:hn(i);break;case 19:Y(vt);break;case 10:mr(i.type);break;case 22:case 23:hn(i),Ef(),t!==null&&Y(zi);break;case 24:mr(St)}}function Ga(t,i){try{var o=i.updateQueue,c=o!==null?o.lastEffect:null;if(c!==null){var g=c.next;o=g;do{if((o.tag&t)===t){c=void 0;var x=o.create,C=o.inst;c=x(),C.destroy=c}o=o.next}while(o!==g)}}catch(O){et(i,i.return,O)}}function Kr(t,i,o){try{var c=i.updateQueue,g=c!==null?c.lastEffect:null;if(g!==null){var x=g.next;c=x;do{if((c.tag&t)===t){var C=c.inst,O=C.destroy;if(O!==void 0){C.destroy=void 0,g=i;var Z=o,le=O;try{le()}catch(ce){et(g,Z,ce)}}}c=c.next}while(c!==x)}}catch(ce){et(i,i.return,ce)}}function P0(t){var i=t.updateQueue;if(i!==null){var o=t.stateNode;try{Dg(i,o)}catch(c){et(t,t.return,c)}}}function $0(t,i,o){o.props=Ri(t.type,t.memoizedProps),o.state=t.memoizedState;try{o.componentWillUnmount()}catch(c){et(t,i,c)}}function Pa(t,i){try{var o=t.ref;if(o!==null){switch(t.tag){case 26:case 27:case 5:var c=t.stateNode;break;case 30:c=t.stateNode;break;default:c=t.stateNode}typeof o=="function"?t.refCleanup=o(c):o.current=c}}catch(g){et(t,i,g)}}function Kn(t,i){var o=t.ref,c=t.refCleanup;if(o!==null)if(typeof c=="function")try{c()}catch(g){et(t,i,g)}finally{t.refCleanup=null,t=t.alternate,t!=null&&(t.refCleanup=null)}else if(typeof o=="function")try{o(null)}catch(g){et(t,i,g)}else o.current=null}function Y0(t){var i=t.type,o=t.memoizedProps,c=t.stateNode;try{e:switch(i){case"button":case"input":case"select":case"textarea":o.autoFocus&&c.focus();break e;case"img":o.src?c.src=o.src:o.srcSet&&(c.srcset=o.srcSet)}}catch(g){et(t,t.return,g)}}function nd(t,i,o){try{var c=t.stateNode;c2(c,t.type,o,i),c[Pt]=i}catch(g){et(t,t.return,g)}}function X0(t){return t.tag===5||t.tag===3||t.tag===26||t.tag===27&&ii(t.type)||t.tag===4}function rd(t){e:for(;;){for(;t.sibling===null;){if(t.return===null||X0(t.return))return null;t=t.return}for(t.sibling.return=t.return,t=t.sibling;t.tag!==5&&t.tag!==6&&t.tag!==18;){if(t.tag===27&&ii(t.type)||t.flags&2||t.child===null||t.tag===4)continue e;t.child.return=t,t=t.child}if(!(t.flags&2))return t.stateNode}}function id(t,i,o){var c=t.tag;if(c===5||c===6)t=t.stateNode,i?(o.nodeType===9?o.body:o.nodeName==="HTML"?o.ownerDocument.body:o).insertBefore(t,i):(i=o.nodeType===9?o.body:o.nodeName==="HTML"?o.ownerDocument.body:o,i.appendChild(t),o=o._reactRootContainer,o!=null||i.onclick!==null||(i.onclick=cr));else if(c!==4&&(c===27&&ii(t.type)&&(o=t.stateNode,i=null),t=t.child,t!==null))for(id(t,i,o),t=t.sibling;t!==null;)id(t,i,o),t=t.sibling}function Qs(t,i,o){var c=t.tag;if(c===5||c===6)t=t.stateNode,i?o.insertBefore(t,i):o.appendChild(t);else if(c!==4&&(c===27&&ii(t.type)&&(o=t.stateNode),t=t.child,t!==null))for(Qs(t,i,o),t=t.sibling;t!==null;)Qs(t,i,o),t=t.sibling}function F0(t){var i=t.stateNode,o=t.memoizedProps;try{for(var c=t.type,g=i.attributes;g.length;)i.removeAttributeNode(g[0]);It(i,c,o),i[jt]=t,i[Pt]=o}catch(x){et(t,t.return,x)}}var br=!1,Nt=!1,ld=!1,Q0=typeof WeakSet=="function"?WeakSet:Set,Dt=null;function GE(t,i){if(t=t.containerInfo,kd=gu,t=og(t),Kc(t)){if("selectionStart"in t)var o={start:t.selectionStart,end:t.selectionEnd};else e:{o=(o=t.ownerDocument)&&o.defaultView||window;var c=o.getSelection&&o.getSelection();if(c&&c.rangeCount!==0){o=c.anchorNode;var g=c.anchorOffset,x=c.focusNode;c=c.focusOffset;try{o.nodeType,x.nodeType}catch{o=null;break e}var C=0,O=-1,Z=-1,le=0,ce=0,de=t,ae=null;t:for(;;){for(var oe;de!==o||g!==0&&de.nodeType!==3||(O=C+g),de!==x||c!==0&&de.nodeType!==3||(Z=C+c),de.nodeType===3&&(C+=de.nodeValue.length),(oe=de.firstChild)!==null;)ae=de,de=oe;for(;;){if(de===t)break t;if(ae===o&&++le===g&&(O=C),ae===x&&++ce===c&&(Z=C),(oe=de.nextSibling)!==null)break;de=ae,ae=de.parentNode}de=oe}o=O===-1||Z===-1?null:{start:O,end:Z}}else o=null}o=o||{start:0,end:0}}else o=null;for(Cd={focusedElem:t,selectionRange:o},gu=!1,Dt=i;Dt!==null;)if(i=Dt,t=i.child,(i.subtreeFlags&1028)!==0&&t!==null)t.return=i,Dt=t;else for(;Dt!==null;){switch(i=Dt,x=i.alternate,t=i.flags,i.tag){case 0:if((t&4)!==0&&(t=i.updateQueue,t=t!==null?t.events:null,t!==null))for(o=0;o title"))),It(x,c,o),x[jt]=t,wt(x),c=x;break e;case"link":var C=tx("link","href",g).get(c+(o.href||""));if(C){for(var O=0;Oit&&(C=it,it=ke,ke=C);var te=lg(O,ke),W=lg(O,it);if(te&&W&&(oe.rangeCount!==1||oe.anchorNode!==te.node||oe.anchorOffset!==te.offset||oe.focusNode!==W.node||oe.focusOffset!==W.offset)){var ie=de.createRange();ie.setStart(te.node,te.offset),oe.removeAllRanges(),ke>it?(oe.addRange(ie),oe.extend(W.node,W.offset)):(ie.setEnd(W.node,W.offset),oe.addRange(ie))}}}}for(de=[],oe=O;oe=oe.parentNode;)oe.nodeType===1&&de.push({element:oe,left:oe.scrollLeft,top:oe.scrollTop});for(typeof O.focus=="function"&&O.focus(),O=0;Oo?32:o,M.T=null,o=dd,dd=null;var x=ti,C=Nr;if(Ot=0,Rl=ti=null,Nr=0,(Ze&6)!==0)throw Error(l(331));var O=Ze;if(Ze|=4,ay(x.current),ry(x,x.current,C,o),Ze=O,Za(0,!1),xt&&typeof xt.onPostCommitFiberRoot=="function")try{xt.onPostCommitFiberRoot(Ht,x)}catch{}return!0}finally{P.p=g,M.T=c,Ey(t,i)}}function ky(t,i,o){i=En(o,i),i=$f(t.stateNode,i,2),t=Fr(t,i,2),t!==null&&(xi(t,2),Jn(t))}function et(t,i,o){if(t.tag===3)ky(t,t,o);else for(;i!==null;){if(i.tag===3){ky(i,t,o);break}else if(i.tag===1){var c=i.stateNode;if(typeof i.type.getDerivedStateFromError=="function"||typeof c.componentDidCatch=="function"&&(ei===null||!ei.has(c))){t=En(o,t),o=C0(2),c=Fr(i,o,2),c!==null&&(T0(o,c,i,t),xi(c,2),Jn(c));break}}i=i.return}}function gd(t,i,o){var c=t.pingCache;if(c===null){c=t.pingCache=new YE;var g=new Set;c.set(i,g)}else g=c.get(i),g===void 0&&(g=new Set,c.set(i,g));g.has(o)||(sd=!0,g.add(o),t=KE.bind(null,t,i,o),i.then(t,t))}function KE(t,i,o){var c=t.pingCache;c!==null&&c.delete(i),t.pingedLanes|=t.suspendedLanes&o,t.warmLanes&=~o,lt===t&&(qe&o)===o&&(gt===4||gt===3&&(qe&62914560)===qe&&300>Mt()-Js?(Ze&2)===0&&Ll(t,0):ud|=o,Dl===qe&&(Dl=0)),Jn(t)}function Cy(t,i){i===0&&(i=es()),t=Ni(t,i),t!==null&&(xi(t,i),Jn(t))}function JE(t){var i=t.memoizedState,o=0;i!==null&&(o=i.retryLane),Cy(t,o)}function WE(t,i){var o=0;switch(t.tag){case 31:case 13:var c=t.stateNode,g=t.memoizedState;g!==null&&(o=g.retryLane);break;case 19:c=t.stateNode;break;case 22:c=t.stateNode._retryCache;break;default:throw Error(l(314))}c!==null&&c.delete(i),Cy(t,o)}function e2(t,i){return Vt(t,i)}var lu=null,Bl=null,yd=!1,au=!1,xd=!1,ri=0;function Jn(t){t!==Bl&&t.next===null&&(Bl===null?lu=Bl=t:Bl=Bl.next=t),au=!0,yd||(yd=!0,n2())}function Za(t,i){if(!xd&&au){xd=!0;do for(var o=!1,c=lu;c!==null;){if(t!==0){var g=c.pendingLanes;if(g===0)var x=0;else{var C=c.suspendedLanes,O=c.pingedLanes;x=(1<<31-Je(42|t)+1)-1,x&=g&~(C&~O),x=x&201326741?x&201326741|1:x?x|2:0}x!==0&&(o=!0,My(c,x))}else x=qe,x=ol(c,c===lt?x:0,c.cancelPendingCommit!==null||c.timeoutHandle!==-1),(x&3)===0||yi(c,x)||(o=!0,My(c,x));c=c.next}while(o);xd=!1}}function t2(){Ty()}function Ty(){au=yd=!1;var t=0;ri!==0&&d2()&&(t=ri);for(var i=Mt(),o=null,c=lu;c!==null;){var g=c.next,x=Ay(c,i);x===0?(c.next=null,o===null?lu=g:o.next=g,g===null&&(Bl=o)):(o=c,(t!==0||(x&3)!==0)&&(au=!0)),c=g}Ot!==0&&Ot!==5||Za(t),ri!==0&&(ri=0)}function Ay(t,i){for(var o=t.suspendedLanes,c=t.pingedLanes,g=t.expirationTimes,x=t.pendingLanes&-62914561;0O)break;var ce=Z.transferSize,de=Z.initiatorType;ce&&qy(de)&&(Z=Z.responseEnd,C+=ce*(Z"u"?null:document;function Ky(t,i,o){var c=ql;if(c&&typeof i=="string"&&i){var g=Kt(i);g='link[rel="'+t+'"][href="'+g+'"]',typeof o=="string"&&(g+='[crossorigin="'+o+'"]'),Zy.has(g)||(Zy.add(g),t={rel:t,crossOrigin:o,href:i},c.querySelector(g)===null&&(i=c.createElement("link"),It(i,"link",t),wt(i),c.head.appendChild(i)))}}function w2(t){kr.D(t),Ky("dns-prefetch",t,null)}function S2(t,i){kr.C(t,i),Ky("preconnect",t,i)}function _2(t,i,o){kr.L(t,i,o);var c=ql;if(c&&t&&i){var g='link[rel="preload"][as="'+Kt(i)+'"]';i==="image"&&o&&o.imageSrcSet?(g+='[imagesrcset="'+Kt(o.imageSrcSet)+'"]',typeof o.imageSizes=="string"&&(g+='[imagesizes="'+Kt(o.imageSizes)+'"]')):g+='[href="'+Kt(t)+'"]';var x=g;switch(i){case"style":x=Ul(t);break;case"script":x=Il(t)}zn.has(x)||(t=p({rel:"preload",href:i==="image"&&o&&o.imageSrcSet?void 0:t,as:i},o),zn.set(x,t),c.querySelector(g)!==null||i==="style"&&c.querySelector(eo(x))||i==="script"&&c.querySelector(to(x))||(i=c.createElement("link"),It(i,"link",t),wt(i),c.head.appendChild(i)))}}function E2(t,i){kr.m(t,i);var o=ql;if(o&&t){var c=i&&typeof i.as=="string"?i.as:"script",g='link[rel="modulepreload"][as="'+Kt(c)+'"][href="'+Kt(t)+'"]',x=g;switch(c){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":x=Il(t)}if(!zn.has(x)&&(t=p({rel:"modulepreload",href:t},i),zn.set(x,t),o.querySelector(g)===null)){switch(c){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(o.querySelector(to(x)))return}c=o.createElement("link"),It(c,"link",t),wt(c),o.head.appendChild(c)}}}function N2(t,i,o){kr.S(t,i,o);var c=ql;if(c&&t){var g=Br(c).hoistableStyles,x=Ul(t);i=i||"default";var C=g.get(x);if(!C){var O={loading:0,preload:null};if(C=c.querySelector(eo(x)))O.loading=5;else{t=p({rel:"stylesheet",href:t,"data-precedence":i},o),(o=zn.get(x))&&Dd(t,o);var Z=C=c.createElement("link");wt(Z),It(Z,"link",t),Z._p=new Promise(function(le,ce){Z.onload=le,Z.onerror=ce}),Z.addEventListener("load",function(){O.loading|=1}),Z.addEventListener("error",function(){O.loading|=2}),O.loading|=4,fu(C,i,c)}C={type:"stylesheet",instance:C,count:1,state:O},g.set(x,C)}}}function k2(t,i){kr.X(t,i);var o=ql;if(o&&t){var c=Br(o).hoistableScripts,g=Il(t),x=c.get(g);x||(x=o.querySelector(to(g)),x||(t=p({src:t,async:!0},i),(i=zn.get(g))&&Rd(t,i),x=o.createElement("script"),wt(x),It(x,"link",t),o.head.appendChild(x)),x={type:"script",instance:x,count:1,state:null},c.set(g,x))}}function C2(t,i){kr.M(t,i);var o=ql;if(o&&t){var c=Br(o).hoistableScripts,g=Il(t),x=c.get(g);x||(x=o.querySelector(to(g)),x||(t=p({src:t,async:!0,type:"module"},i),(i=zn.get(g))&&Rd(t,i),x=o.createElement("script"),wt(x),It(x,"link",t),o.head.appendChild(x)),x={type:"script",instance:x,count:1,state:null},c.set(g,x))}}function Jy(t,i,o,c){var g=(g=J.current)?cu(g):null;if(!g)throw Error(l(446));switch(t){case"meta":case"title":return null;case"style":return typeof o.precedence=="string"&&typeof o.href=="string"?(i=Ul(o.href),o=Br(g).hoistableStyles,c=o.get(i),c||(c={type:"style",instance:null,count:0,state:null},o.set(i,c)),c):{type:"void",instance:null,count:0,state:null};case"link":if(o.rel==="stylesheet"&&typeof o.href=="string"&&typeof o.precedence=="string"){t=Ul(o.href);var x=Br(g).hoistableStyles,C=x.get(t);if(C||(g=g.ownerDocument||g,C={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},x.set(t,C),(x=g.querySelector(eo(t)))&&!x._p&&(C.instance=x,C.state.loading=5),zn.has(t)||(o={rel:"preload",as:"style",href:o.href,crossOrigin:o.crossOrigin,integrity:o.integrity,media:o.media,hrefLang:o.hrefLang,referrerPolicy:o.referrerPolicy},zn.set(t,o),x||T2(g,t,o,C.state))),i&&c===null)throw Error(l(528,""));return C}if(i&&c!==null)throw Error(l(529,""));return null;case"script":return i=o.async,o=o.src,typeof o=="string"&&i&&typeof i!="function"&&typeof i!="symbol"?(i=Il(o),o=Br(g).hoistableScripts,c=o.get(i),c||(c={type:"script",instance:null,count:0,state:null},o.set(i,c)),c):{type:"void",instance:null,count:0,state:null};default:throw Error(l(444,t))}}function Ul(t){return'href="'+Kt(t)+'"'}function eo(t){return'link[rel="stylesheet"]['+t+"]"}function Wy(t){return p({},t,{"data-precedence":t.precedence,precedence:null})}function T2(t,i,o,c){t.querySelector('link[rel="preload"][as="style"]['+i+"]")?c.loading=1:(i=t.createElement("link"),c.preload=i,i.addEventListener("load",function(){return c.loading|=1}),i.addEventListener("error",function(){return c.loading|=2}),It(i,"link",o),wt(i),t.head.appendChild(i))}function Il(t){return'[src="'+Kt(t)+'"]'}function to(t){return"script[async]"+t}function ex(t,i,o){if(i.count++,i.instance===null)switch(i.type){case"style":var c=t.querySelector('style[data-href~="'+Kt(o.href)+'"]');if(c)return i.instance=c,wt(c),c;var g=p({},o,{"data-href":o.href,"data-precedence":o.precedence,href:null,precedence:null});return c=(t.ownerDocument||t).createElement("style"),wt(c),It(c,"style",g),fu(c,o.precedence,t),i.instance=c;case"stylesheet":g=Ul(o.href);var x=t.querySelector(eo(g));if(x)return i.state.loading|=4,i.instance=x,wt(x),x;c=Wy(o),(g=zn.get(g))&&Dd(c,g),x=(t.ownerDocument||t).createElement("link"),wt(x);var C=x;return C._p=new Promise(function(O,Z){C.onload=O,C.onerror=Z}),It(x,"link",c),i.state.loading|=4,fu(x,o.precedence,t),i.instance=x;case"script":return x=Il(o.src),(g=t.querySelector(to(x)))?(i.instance=g,wt(g),g):(c=o,(g=zn.get(x))&&(c=p({},o),Rd(c,g)),t=t.ownerDocument||t,g=t.createElement("script"),wt(g),It(g,"link",c),t.head.appendChild(g),i.instance=g);case"void":return null;default:throw Error(l(443,i.type))}else i.type==="stylesheet"&&(i.state.loading&4)===0&&(c=i.instance,i.state.loading|=4,fu(c,o.precedence,t));return i.instance}function fu(t,i,o){for(var c=o.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),g=c.length?c[c.length-1]:null,x=g,C=0;C title"):null)}function A2(t,i,o){if(o===1||i.itemProp!=null)return!1;switch(t){case"meta":case"title":return!0;case"style":if(typeof i.precedence!="string"||typeof i.href!="string"||i.href==="")break;return!0;case"link":if(typeof i.rel!="string"||typeof i.href!="string"||i.href===""||i.onLoad||i.onError)break;switch(i.rel){case"stylesheet":return t=i.disabled,typeof i.precedence=="string"&&t==null;default:return!0}case"script":if(i.async&&typeof i.async!="function"&&typeof i.async!="symbol"&&!i.onLoad&&!i.onError&&i.src&&typeof i.src=="string")return!0}return!1}function rx(t){return!(t.type==="stylesheet"&&(t.state.loading&3)===0)}function z2(t,i,o,c){if(o.type==="stylesheet"&&(typeof c.media!="string"||matchMedia(c.media).matches!==!1)&&(o.state.loading&4)===0){if(o.instance===null){var g=Ul(c.href),x=i.querySelector(eo(g));if(x){i=x._p,i!==null&&typeof i=="object"&&typeof i.then=="function"&&(t.count++,t=hu.bind(t),i.then(t,t)),o.state.loading|=4,o.instance=x,wt(x);return}x=i.ownerDocument||i,c=Wy(c),(g=zn.get(g))&&Dd(c,g),x=x.createElement("link"),wt(x);var C=x;C._p=new Promise(function(O,Z){C.onload=O,C.onerror=Z}),It(x,"link",c),o.instance=x}t.stylesheets===null&&(t.stylesheets=new Map),t.stylesheets.set(o,i),(i=o.state.preload)&&(o.state.loading&3)===0&&(t.count++,o=hu.bind(t),i.addEventListener("load",o),i.addEventListener("error",o))}}var Ld=0;function M2(t,i){return t.stylesheets&&t.count===0&&mu(t,t.stylesheets),0Ld?50:800)+i);return t.unsuspend=o,function(){t.unsuspend=null,clearTimeout(c),clearTimeout(g)}}:null}function hu(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)mu(this,this.stylesheets);else if(this.unsuspend){var t=this.unsuspend;this.unsuspend=null,t()}}}var pu=null;function mu(t,i){t.stylesheets=null,t.unsuspend!==null&&(t.count++,pu=new Map,i.forEach(j2,t),pu=null,hu.call(t))}function j2(t,i){if(!(i.state.loading&4)){var o=pu.get(t);if(o)var c=o.get(null);else{o=new Map,pu.set(t,o);for(var g=t.querySelectorAll("link[data-precedence],style[data-precedence]"),x=0;x"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(n){console.error(n)}}return e(),$d.exports=K2(),$d.exports}var W2=J2();/** + * @license lucide-react v0.469.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const eN=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),Rb=(...e)=>e.filter((n,r,l)=>!!n&&n.trim()!==""&&l.indexOf(n)===r).join(" ").trim();/** + * @license lucide-react v0.469.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */var tN={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};/** + * @license lucide-react v0.469.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const nN=V.forwardRef(({color:e="currentColor",size:n=24,strokeWidth:r=2,absoluteStrokeWidth:l,className:a="",children:s,iconNode:u,...f},h)=>V.createElement("svg",{ref:h,...tN,width:n,height:n,stroke:e,strokeWidth:l?Number(r)*24/Number(n):r,className:Rb("lucide",a),...f},[...u.map(([d,m])=>V.createElement(d,m)),...Array.isArray(s)?s:[s]]));/** + * @license lucide-react v0.469.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const $e=(e,n)=>{const r=V.forwardRef(({className:l,...a},s)=>V.createElement(nN,{ref:s,iconNode:n,className:Rb(`lucide-${eN(e)}`,l),...a}));return r.displayName=`${e}`,r};/** + * @license lucide-react v0.469.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Lb=$e("Activity",[["path",{d:"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2",key:"169zse"}]]);/** + * @license lucide-react v0.469.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const rN=$e("ArrowDownToLine",[["path",{d:"M12 17V3",key:"1cwfxf"}],["path",{d:"m6 11 6 6 6-6",key:"12ii2o"}],["path",{d:"M19 21H5",key:"150jfl"}]]);/** + * @license lucide-react v0.469.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const iN=$e("ArrowUpFromLine",[["path",{d:"m18 9-6-6-6 6",key:"kcunyi"}],["path",{d:"M12 3v14",key:"7cf3v8"}],["path",{d:"M5 21h14",key:"11awu3"}]]);/** + * @license lucide-react v0.469.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const lN=$e("Bot",[["path",{d:"M12 8V4H8",key:"hb8ula"}],["rect",{width:"16",height:"12",x:"4",y:"8",rx:"2",key:"enze0r"}],["path",{d:"M2 14h2",key:"vft8re"}],["path",{d:"M20 14h2",key:"4cs60a"}],["path",{d:"M15 13v2",key:"1xurst"}],["path",{d:"M9 13v2",key:"rq6x2g"}]]);/** + * @license lucide-react v0.469.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Gi=$e("Check",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]);/** + * @license lucide-react v0.469.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Wi=$e("ChevronDown",[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]]);/** + * @license lucide-react v0.469.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const jr=$e("ChevronRight",[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]]);/** + * @license lucide-react v0.469.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const aN=$e("ChevronUp",[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]]);/** + * @license lucide-react v0.469.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const oN=$e("CircleCheck",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);/** + * @license lucide-react v0.469.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const sN=$e("Clock",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["polyline",{points:"12 6 12 12 16 14",key:"68esgv"}]]);/** + * @license lucide-react v0.469.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Hb=$e("Coins",[["circle",{cx:"8",cy:"8",r:"6",key:"3yglwk"}],["path",{d:"M18.09 10.37A6 6 0 1 1 10.34 18",key:"t5s6rm"}],["path",{d:"M7 6h1v4",key:"1obek4"}],["path",{d:"m16.71 13.88.7.71-2.82 2.82",key:"1rbuyh"}]]);/** + * @license lucide-react v0.469.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Bb=$e("Copy",[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]]);/** + * @license lucide-react v0.469.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const uN=$e("Download",[["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["polyline",{points:"7 10 12 15 17 10",key:"2ggqvy"}],["line",{x1:"12",x2:"12",y1:"15",y2:"3",key:"1vk2je"}]]);/** + * @license lucide-react v0.469.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const cN=$e("Eye",[["path",{d:"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0",key:"1nclc0"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);/** + * @license lucide-react v0.469.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const fN=$e("FileCode",[["path",{d:"M10 12.5 8 15l2 2.5",key:"1tg20x"}],["path",{d:"m14 12.5 2 2.5-2 2.5",key:"yinavb"}],["path",{d:"M14 2v4a2 2 0 0 0 2 2h4",key:"tnqrlb"}],["path",{d:"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7z",key:"1mlx9k"}]]);/** + * @license lucide-react v0.469.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const dN=$e("FileOutput",[["path",{d:"M14 2v4a2 2 0 0 0 2 2h4",key:"tnqrlb"}],["path",{d:"M4 7V4a2 2 0 0 1 2-2 2 2 0 0 0-2 2",key:"1vk7w2"}],["path",{d:"M4.063 20.999a2 2 0 0 0 2 1L18 22a2 2 0 0 0 2-2V7l-5-5H6",key:"1jink5"}],["path",{d:"m5 11-3 3",key:"1dgrs4"}],["path",{d:"m5 17-3-3h10",key:"1mvvaf"}]]);/** + * @license lucide-react v0.469.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const hN=$e("GitBranch",[["line",{x1:"6",x2:"6",y1:"3",y2:"15",key:"17qcm7"}],["circle",{cx:"18",cy:"6",r:"3",key:"1h7g24"}],["circle",{cx:"6",cy:"18",r:"3",key:"fqmcym"}],["path",{d:"M18 9a9 9 0 0 1-9 9",key:"n2h4wq"}]]);/** + * @license lucide-react v0.469.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const qb=$e("Hash",[["line",{x1:"4",x2:"20",y1:"9",y2:"9",key:"4lhtct"}],["line",{x1:"4",x2:"20",y1:"15",y2:"15",key:"vyu0kd"}],["line",{x1:"10",x2:"8",y1:"3",y2:"21",key:"1ggp8o"}],["line",{x1:"16",x2:"14",y1:"3",y2:"21",key:"weycgp"}]]);/** + * @license lucide-react v0.469.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Qp=$e("Layers",[["path",{d:"M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z",key:"zw3jo"}],["path",{d:"M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12",key:"1wduqc"}],["path",{d:"M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17",key:"kqbvx6"}]]);/** + * @license lucide-react v0.469.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const To=$e("LoaderCircle",[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]]);/** + * @license lucide-react v0.469.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const pN=$e("Maximize",[["path",{d:"M8 3H5a2 2 0 0 0-2 2v3",key:"1dcmit"}],["path",{d:"M21 8V5a2 2 0 0 0-2-2h-3",key:"1e4gt3"}],["path",{d:"M3 16v3a2 2 0 0 0 2 2h3",key:"wsl5sc"}],["path",{d:"M16 21h3a2 2 0 0 0 2-2v-3",key:"18trek"}]]);/** + * @license lucide-react v0.469.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const mN=$e("Pause",[["rect",{x:"14",y:"4",width:"4",height:"16",rx:"1",key:"zuxfzm"}],["rect",{x:"6",y:"4",width:"4",height:"16",rx:"1",key:"1okwgv"}]]);/** + * @license lucide-react v0.469.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Zp=$e("Play",[["polygon",{points:"6 3 20 12 6 21 6 3",key:"1oa8hb"}]]);/** + * @license lucide-react v0.469.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const gN=$e("Repeat",[["path",{d:"m17 2 4 4-4 4",key:"nntrym"}],["path",{d:"M3 11v-1a4 4 0 0 1 4-4h14",key:"84bu3i"}],["path",{d:"m7 22-4-4 4-4",key:"1wqhfi"}],["path",{d:"M21 13v1a4 4 0 0 1-4 4H3",key:"1rx37r"}]]);/** + * @license lucide-react v0.469.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const yN=$e("Search",[["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["path",{d:"m21 21-4.3-4.3",key:"1qie3q"}]]);/** + * @license lucide-react v0.469.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const xN=$e("Send",[["path",{d:"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z",key:"1ffxy3"}],["path",{d:"m21.854 2.147-10.94 10.939",key:"12cjpa"}]]);/** + * @license lucide-react v0.469.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const vN=$e("ShieldCheck",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);/** + * @license lucide-react v0.469.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Cx=$e("SquareTerminal",[["path",{d:"m7 11 2-2-2-2",key:"1lz0vl"}],["path",{d:"M11 13h4",key:"1p7l4v"}],["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2",key:"1m3agn"}]]);/** + * @license lucide-react v0.469.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ub=$e("Square",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}]]);/** + * @license lucide-react v0.469.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const bN=$e("Terminal",[["polyline",{points:"4 17 10 11 4 5",key:"akl6gq"}],["line",{x1:"12",x2:"20",y1:"19",y2:"19",key:"q2wloq"}]]);/** + * @license lucide-react v0.469.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const wN=$e("TriangleAlert",[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]]);/** + * @license lucide-react v0.469.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const SN=$e("WifiOff",[["path",{d:"M12 20h.01",key:"zekei9"}],["path",{d:"M8.5 16.429a5 5 0 0 1 7 0",key:"1bycff"}],["path",{d:"M5 12.859a10 10 0 0 1 5.17-2.69",key:"1dl1wf"}],["path",{d:"M19 12.859a10 10 0 0 0-2.007-1.523",key:"4k23kn"}],["path",{d:"M2 8.82a15 15 0 0 1 4.177-2.643",key:"1grhjp"}],["path",{d:"M22 8.82a15 15 0 0 0-11.288-3.764",key:"z3jwby"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]]);/** + * @license lucide-react v0.469.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const _N=$e("Wifi",[["path",{d:"M12 20h.01",key:"zekei9"}],["path",{d:"M2 8.82a15 15 0 0 1 20 0",key:"dnpr2z"}],["path",{d:"M5 12.859a10 10 0 0 1 14 0",key:"1x1e6c"}],["path",{d:"M8.5 16.429a5 5 0 0 1 7 0",key:"1bycff"}]]);/** + * @license lucide-react v0.469.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Go=$e("X",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]]);/** + * @license lucide-react v0.469.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const EN=$e("Zap",[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",key:"1xq2db"}]]),Tx=e=>{let n;const r=new Set,l=(d,m)=>{const p=typeof d=="function"?d(n):d;if(!Object.is(p,n)){const y=n;n=m??(typeof p!="object"||p===null)?p:Object.assign({},n,p),r.forEach(v=>v(n,y))}},a=()=>n,f={setState:l,getState:a,getInitialState:()=>h,subscribe:d=>(r.add(d),()=>r.delete(d))},h=n=e(l,a,f);return f},NN=(e=>e?Tx(e):Tx),kN=e=>e;function CN(e,n=kN){const r=Fl.useSyncExternalStore(e.subscribe,Fl.useCallback(()=>n(e.getState()),[e,n]),Fl.useCallback(()=>n(e.getInitialState()),[e,n]));return Fl.useDebugValue(r),r}const Ax=e=>{const n=NN(e),r=l=>CN(n,l);return Object.assign(r,n),r},TN=(e=>e?Ax(e):Ax);function Qe(e,n,r="agent"){return e[n]||(e[n]={name:n,status:"pending",type:r,activity:[]}),e[n].activity||(e[n].activity=[]),e[n]}function _u(e,n,r){Qe(e,n).activity.push(r)}function Ie(e,n){e[n]&&(e[n]={...e[n]})}function so(e,n,r,l){const a=e[n];if(!(a!=null&&a.for_each_items))return;const s=a.for_each_items.find(u=>u.key===r);s&&s.activity.push(l)}function AN(e,n,r,l){return{parentAgent:e,iteration:n,slotKey:l??e,workflowFile:r,workflowName:"",status:"pending",agents:[],routes:[],parallelGroups:[],forEachGroups:[],nodes:{},groupProgress:{},highlightedEdges:[],entryPoint:null,children:[],agentsCompleted:0,agentsTotal:0,totalCost:0,totalTokens:0,eventLog:[],activityLog:[],workflowOutput:null,workflowFailure:null}}function Bn(e,n){if(n.length===0)return null;let r=e[n[0]];for(let l=1;l=0;f--)if(l[f].slotKey===s){u=f;break}if(u===-1)return null;r.push(u),a=l[u],l=a.children}return{indexPath:r,ctx:a}}function zN(e,n){for(let r=e.length-1;r>=0;r--){const l=e[r];if(l.slotKey===n)return{ctx:l,index:r}}return null}const he=TN((e,n)=>({workflowName:"",workflowStatus:"pending",workflowStartTime:null,workflowFailure:null,workflowFailedAgent:null,workflowYaml:null,conductorVersion:null,entryPoint:null,agents:[],routes:[],parallelGroups:[],forEachGroups:[],nodes:{},groupProgress:{},highlightedEdges:[],agentsCompleted:0,agentsTotal:0,totalCost:0,totalTokens:0,selectedNode:null,wsStatus:"connecting",eventLog:[],activityLog:[],workflowOutput:null,lastEventTime:null,isPaused:!1,wfDepth:0,subworkflowContexts:[],activeContextPath:[],viewContextPath:[],replayMode:!1,replayEvents:[],replayPosition:0,replayTotalEvents:0,replayPlaying:!1,replaySpeed:1,_wsSend:null,setWsSend:r=>{e({_wsSend:r})},sendGateResponse:(r,l,a)=>{const s=he.getState()._wsSend;s&&s({type:"gate_response",agent_name:r,selected_value:l,additional_input:a||{}})},processEvent:r=>{const l=Eu[r.type];e(a=>{const s={...a,nodes:{...a.nodes},groupProgress:{...a.groupProgress},eventLog:[...a.eventLog],activityLog:[...a.activityLog],lastEventTime:r.timestamp};l&&l(s,r.data,r.timestamp);const u=Nu(r);u&&s.eventLog.push(u);const f=ku(r);return f&&s.activityLog.push(f),s})},replayState:r=>{e(l=>{const a={...l,agentsCompleted:0,totalCost:0,totalTokens:0,nodes:{},groupProgress:{},highlightedEdges:[],eventLog:[],activityLog:[],workflowOutput:null,workflowFailedAgent:null,wfDepth:0,subworkflowContexts:[],activeContextPath:[]};for(const s of r){const u=Eu[s.type];u&&u(a,s.data,s.timestamp);const f=Nu(s);f&&a.eventLog.push(f);const h=ku(s);h&&a.activityLog.push(h),a.lastEventTime=s.timestamp}return a})},selectNode:r=>{e({selectedNode:r})},setReplayMode:r=>{e(l=>{const a={...l,replayMode:!0,replayEvents:r,replayTotalEvents:r.length,replayPosition:r.length,replayPlaying:!1,replaySpeed:1,agentsCompleted:0,totalCost:0,totalTokens:0,nodes:{},groupProgress:{},highlightedEdges:[],eventLog:[],activityLog:[],workflowOutput:null,workflowFailedAgent:null,wfDepth:0,subworkflowContexts:[],activeContextPath:[],viewContextPath:[]};for(const s of r){const u=Eu[s.type];u&&u(a,s.data,s.timestamp);const f=Nu(s);f&&a.eventLog.push(f);const h=ku(s);h&&a.activityLog.push(h),a.lastEventTime=s.timestamp}return a})},setReplayPosition:r=>{e(l=>{const a=l.replayEvents.slice(0,r),s={...l,replayPosition:r,agentsCompleted:0,totalCost:0,totalTokens:0,nodes:{},groupProgress:{},highlightedEdges:[],eventLog:[],activityLog:[],workflowOutput:null,workflowFailedAgent:null,workflowStatus:"pending",workflowStartTime:null,workflowName:"",workflowFailure:null,entryPoint:null,agents:[],routes:[],parallelGroups:[],forEachGroups:[],isPaused:!1,lastEventTime:null,wfDepth:0,subworkflowContexts:[],activeContextPath:[],viewContextPath:[]};for(const u of a){const f=Eu[u.type];f&&f(s,u.data,u.timestamp);const h=Nu(u);h&&s.eventLog.push(h);const d=ku(u);d&&s.activityLog.push(d),s.lastEventTime=u.timestamp}return s})},setReplayPlaying:r=>{e({replayPlaying:r})},setReplaySpeed:r=>{e({replaySpeed:r})},setWsStatus:r=>{e({wsStatus:r})},setEdgeHighlight:(r,l,a)=>{e(s=>({highlightedEdges:[...s.highlightedEdges.filter(u=>!(u.from===r&&u.to===l)),{from:r,to:l,state:a}]}))},clearEdgeHighlight:(r,l)=>{e(a=>({highlightedEdges:a.highlightedEdges.filter(s=>!(s.from===r&&s.to===l))}))},navigateToContext:r=>{e({viewContextPath:r,selectedNode:null})},navigateUp:()=>{e(r=>({viewContextPath:r.viewContextPath.slice(0,-1),selectedNode:null}))},navigateIntoSubworkflow:r=>{const l=n(),a=l.viewContextPath;let s;if(a.length===0)s=l.subworkflowContexts;else{const f=Bn(l.subworkflowContexts,a);if(!f)return;s=f.children}const u=zN(s,r);u&&e({viewContextPath:[...a,u.index],selectedNode:null})},getViewedContext:()=>{const r=n();if(r.viewContextPath.length===0)return{workflowName:r.workflowName,agents:r.agents,routes:r.routes,parallelGroups:r.parallelGroups,forEachGroups:r.forEachGroups,nodes:r.nodes,groupProgress:r.groupProgress,highlightedEdges:r.highlightedEdges,entryPoint:r.entryPoint,subworkflowContexts:r.subworkflowContexts};const l=Bn(r.subworkflowContexts,r.viewContextPath);return l?{workflowName:l.workflowName,agents:l.agents,routes:l.routes,parallelGroups:l.parallelGroups,forEachGroups:l.forEachGroups,nodes:l.nodes,groupProgress:l.groupProgress,highlightedEdges:l.highlightedEdges,entryPoint:l.entryPoint,subworkflowContexts:l.children}:{workflowName:r.workflowName,agents:r.agents,routes:r.routes,parallelGroups:r.parallelGroups,forEachGroups:r.forEachGroups,nodes:r.nodes,groupProgress:r.groupProgress,highlightedEdges:r.highlightedEdges,entryPoint:r.entryPoint,subworkflowContexts:r.subworkflowContexts}},getBreadcrumbs:()=>{const r=n(),l=[{label:r.workflowName||"Root",path:[]}];let a=r.subworkflowContexts;for(let s=0;s0?r=((a=qi(e.subworkflowContexts,l))==null?void 0:a.ctx)??null:e.activeContextPath.length>0&&(r=Bn(e.subworkflowContexts,e.activeContextPath)),r){const s=r;return{nodes:s.nodes,groupProgress:s.groupProgress,routes:s.routes,highlightedEdges:s.highlightedEdges,addCost:u=>{s.totalCost+=u,e.totalCost+=u},addTokens:u=>{s.totalTokens+=u,e.totalTokens+=u},incrCompleted:()=>{s.agentsCompleted++,e.agentsCompleted++}}}return{nodes:e.nodes,groupProgress:e.groupProgress,routes:e.routes,highlightedEdges:e.highlightedEdges,addCost:s=>{e.totalCost+=s},addTokens:s=>{e.totalTokens+=s},incrCompleted:()=>{e.agentsCompleted++}}}const Eu={workflow_started:(e,n,r)=>{var a;const l=n;if(e.wfDepth===0){e.workflowStatus="running",e.workflowStartTime=r??Date.now()/1e3,e.workflowName=l.name||"",e.workflowYaml=n.yaml_source??null,e.conductorVersion=n.version??null,e.entryPoint=l.entry_point||null,e.agents=l.agents||[],e.routes=l.routes||[],e.parallelGroups=l.parallel_groups||[],e.forEachGroups=l.for_each_groups||[],Qe(e.nodes,"$start","start"),e.nodes.$start.status="running",Ie(e.nodes,"$start");const s=new Set,u=new Set;for(const f of e.parallelGroups){for(const h of f.agents)s.add(h);u.add(f.name),Qe(e.nodes,f.name,"parallel_group"),e.groupProgress[f.name]={total:f.agents.length,completed:0,failed:0};for(const h of f.agents)Qe(e.nodes,h,"agent")}for(const f of e.forEachGroups)u.add(f.name),Qe(e.nodes,f.name,"for_each_group"),e.groupProgress[f.name]={total:0,completed:0,failed:0};for(const f of e.agents)if(!u.has(f.name)&&!s.has(f.name)){const h=f.type||"agent";Qe(e.nodes,f.name,h),f.model&&(e.nodes[f.name].model=f.model),u.add(f.name)}e.agentsTotal=u.size}else{const s=n.subworkflow_path,u=Array.isArray(s)&&s.length>0?((a=qi(e.subworkflowContexts,s))==null?void 0:a.ctx)??null:Bn(e.subworkflowContexts,e.activeContextPath);if(u){u.workflowName=l.name||"",u.status="running",u.entryPoint=l.entry_point||null,u.agents=l.agents||[],u.routes=l.routes||[],u.parallelGroups=l.parallel_groups||[],u.forEachGroups=l.for_each_groups||[],Qe(u.nodes,"$start","start"),u.nodes.$start.status="running";const f=new Set,h=new Set;for(const d of u.parallelGroups){for(const m of d.agents)f.add(m);h.add(d.name),Qe(u.nodes,d.name,"parallel_group"),u.groupProgress[d.name]={total:d.agents.length,completed:0,failed:0};for(const m of d.agents)Qe(u.nodes,m,"agent")}for(const d of u.forEachGroups)h.add(d.name),Qe(u.nodes,d.name,"for_each_group"),u.groupProgress[d.name]={total:0,completed:0,failed:0};for(const d of u.agents)if(!h.has(d.name)&&!f.has(d.name)){const m=d.type||"agent";Qe(u.nodes,d.name,m),d.model&&(u.nodes[d.name].model=d.model),h.add(d.name)}u.agentsTotal=h.size}}e.wfDepth++},agent_started:(e,n,r)=>{const l=n,a=dt(e,n),s=Qe(a.nodes,l.agent_name);s.iteration!=null&&(s.output!=null||s.error_type!=null)&&(s.iterationHistory||(s.iterationHistory=[]),s.iterationHistory.push({iteration:s.iteration,prompt:s.prompt,output:s.output,elapsed:s.elapsed,model:s.model,tokens:s.tokens,input_tokens:s.input_tokens,output_tokens:s.output_tokens,cost_usd:s.cost_usd,activity:s.activity,error_type:s.error_type,error_message:s.error_message})),s.status="running",s.iteration=l.iteration,s.startedAt=r??Date.now()/1e3,s.activity=[],l.context_window_max!=null&&(s.context_window_max=l.context_window_max),s.prompt=void 0,s.output=void 0,s.error_type=void 0,s.error_message=void 0,Ie(a.nodes,l.agent_name)},agent_completed:(e,n)=>{const r=n,l=dt(e,n),a=Qe(l.nodes,r.agent_name);a.status="completed",l.incrCompleted(),a.elapsed=r.elapsed,a.model=r.model,a.tokens=r.tokens,a.input_tokens=r.input_tokens,a.output_tokens=r.output_tokens,a.cost_usd=r.cost_usd,a.output=r.output,a.output_keys=r.output_keys,a.context_window_used=r.context_window_used,a.context_window_max=r.context_window_max,r.context_window_used!=null&&r.context_window_max!=null&&r.context_window_max>0&&(a.context_pct=Math.round(r.context_window_used/r.context_window_max*100)),r.cost_usd&&l.addCost(r.cost_usd),r.tokens&&l.addTokens(r.tokens),Ie(l.nodes,r.agent_name)},agent_failed:(e,n)=>{const r=n,l=dt(e,n),a=Qe(l.nodes,r.agent_name);a.status="failed",a.elapsed=r.elapsed,a.error_type=r.error_type,a.error_message=r.message;for(const s of l.routes)s.to===r.agent_name&&l.highlightedEdges.push({from:s.from,to:s.to,state:"failed"});Ie(l.nodes,r.agent_name)},agent_prompt_rendered:(e,n)=>{var u;const r=n,l=n.item_key,a=dt(e,n),s=Qe(a.nodes,r.agent_name);if(s.prompt=r.rendered_prompt,s.context_keys=r.context_keys,l){so(a.nodes,r.agent_name,l,{type:"prompt",icon:"📝",label:"prompt",text:"Prompt rendered",detail:((u=r.rendered_prompt)==null?void 0:u.slice(0,500))||null});const f=a.nodes[r.agent_name];if(f!=null&&f.for_each_items){const h=f.for_each_items.find(d=>d.key===l);h&&(h.prompt=r.rendered_prompt)}}Ie(a.nodes,r.agent_name)},agent_reasoning:(e,n)=>{const r=n,l=n.item_key,a=dt(e,n),s={type:"reasoning",icon:"💭",label:"thinking",text:r.content};_u(a.nodes,r.agent_name,s),l&&so(a.nodes,r.agent_name,l,s),Ie(a.nodes,r.agent_name)},agent_tool_start:(e,n)=>{const r=n,l=n.item_key,a=dt(e,n),s={type:"tool-start",icon:"🔧",label:"tool",text:r.tool_name,detail:r.arguments||null};_u(a.nodes,r.agent_name,s),l&&so(a.nodes,r.agent_name,l,s),Ie(a.nodes,r.agent_name)},agent_tool_complete:(e,n)=>{const r=n,l=n.item_key,a=dt(e,n),s={type:"tool-complete",icon:"✓",label:"result",text:r.tool_name||"done",detail:r.result||null};_u(a.nodes,r.agent_name,s),l&&so(a.nodes,r.agent_name,l,s),Ie(a.nodes,r.agent_name)},agent_turn_start:(e,n)=>{const r=n,l=n.item_key,a=dt(e,n),s={type:"turn",icon:"⏳",label:"turn",text:`Turn ${r.turn??"?"}`};_u(a.nodes,r.agent_name,s),l&&so(a.nodes,r.agent_name,l,s),Ie(a.nodes,r.agent_name)},agent_message:(e,n)=>{const r=n,l=dt(e,n),a=Qe(l.nodes,r.agent_name);a.latest_message=r.content,Ie(l.nodes,r.agent_name)},script_started:(e,n,r)=>{const l=n,a=dt(e,n),s=Qe(a.nodes,l.agent_name);s.status="running",s.startedAt=r??Date.now()/1e3,Ie(a.nodes,l.agent_name)},script_completed:(e,n)=>{const r=n,l=dt(e,n),a=Qe(l.nodes,r.agent_name);a.status="completed",l.incrCompleted(),a.elapsed=r.elapsed,a.stdout=r.stdout,a.stderr=r.stderr,a.exit_code=r.exit_code,Ie(l.nodes,r.agent_name)},script_failed:(e,n)=>{const r=n,l=dt(e,n),a=Qe(l.nodes,r.agent_name);a.status="failed",a.elapsed=r.elapsed,a.error_type=r.error_type,a.error_message=r.message,Ie(l.nodes,r.agent_name)},gate_presented:(e,n)=>{const r=n,l=dt(e,n),a=Qe(l.nodes,r.agent_name);a.status="waiting",a.options=r.options,a.option_details=r.option_details,a.prompt=r.prompt,Ie(l.nodes,r.agent_name)},gate_resolved:(e,n)=>{const r=n,l=dt(e,n),a=Qe(l.nodes,r.agent_name);a.status="completed",l.incrCompleted(),a.selected_option=r.selected_option,a.route=r.route,a.additional_input=r.additional_input,Ie(l.nodes,r.agent_name)},route_taken:(e,n)=>{const r=n;dt(e,n).highlightedEdges.push({from:r.from_agent,to:r.to_agent,state:"taken"})},parallel_started:(e,n)=>{const r=n,l=dt(e,n),a=Qe(l.nodes,r.group_name,"parallel_group");a.status="running",l.groupProgress[r.group_name]&&(l.groupProgress[r.group_name].total=r.agents.length,l.groupProgress[r.group_name].completed=0,l.groupProgress[r.group_name].failed=0),Ie(l.nodes,r.group_name)},parallel_agent_completed:(e,n)=>{const r=n,l=dt(e,n);l.groupProgress[r.group_name]&&l.groupProgress[r.group_name].completed++;const a=Qe(l.nodes,r.agent_name);a.status="completed",a.elapsed=r.elapsed,a.model=r.model,a.tokens=r.tokens,a.cost_usd=r.cost_usd,a.context_window_used=r.context_window_used,a.context_window_max=r.context_window_max,r.context_window_used!=null&&r.context_window_max!=null&&r.context_window_max>0&&(a.context_pct=Math.round(r.context_window_used/r.context_window_max*100)),r.cost_usd&&l.addCost(r.cost_usd),r.tokens&&l.addTokens(r.tokens),Ie(l.nodes,r.agent_name),Ie(l.nodes,r.group_name)},parallel_agent_failed:(e,n)=>{const r=n,l=dt(e,n);l.groupProgress[r.group_name]&&l.groupProgress[r.group_name].failed++;const a=Qe(l.nodes,r.agent_name);a.status="failed",a.elapsed=r.elapsed,a.error_type=r.error_type,a.error_message=r.message,Ie(l.nodes,r.agent_name),Ie(l.nodes,r.group_name)},parallel_completed:(e,n)=>{const r=n,l=dt(e,n);l.incrCompleted();const a=Qe(l.nodes,r.group_name,"parallel_group");a.status=r.failure_count===0?"completed":"failed",Ie(l.nodes,r.group_name)},for_each_started:(e,n)=>{const r=n,l=dt(e,n),a=Qe(l.nodes,r.group_name,"for_each_group");a.status="running",a.for_each_items=[],l.groupProgress[r.group_name]&&(l.groupProgress[r.group_name].total=r.item_count,l.groupProgress[r.group_name].completed=0,l.groupProgress[r.group_name].failed=0),Ie(l.nodes,r.group_name)},for_each_item_started:(e,n)=>{const r=n,l=dt(e,n),a=Qe(l.nodes,r.group_name,"for_each_group");a.for_each_items||(a.for_each_items=[]),a.for_each_items.push({key:r.item_key??String(r.index),index:r.index,status:"running",activity:[]}),Ie(l.nodes,r.group_name)},for_each_item_completed:(e,n)=>{const r=n,l=dt(e,n);l.groupProgress[r.group_name]&&l.groupProgress[r.group_name].completed++;const a=Qe(l.nodes,r.group_name,"for_each_group");if(a.for_each_items){const s=r.item_key??String(r.index),u=a.for_each_items.find(f=>f.key===s);u&&(u.status="completed",u.elapsed=r.elapsed,u.tokens=r.tokens,u.cost_usd=r.cost_usd,u.output=r.output)}Ie(l.nodes,r.group_name)},for_each_item_failed:(e,n)=>{const r=n,l=dt(e,n);l.groupProgress[r.group_name]&&l.groupProgress[r.group_name].failed++;const a=Qe(l.nodes,r.group_name,"for_each_group");if(a.for_each_items){const s=r.item_key??String(r.index),u=a.for_each_items.find(f=>f.key===s);u&&(u.status="failed",u.elapsed=r.elapsed,u.error_type=r.error_type,u.error_message=r.message)}Ie(l.nodes,r.group_name)},for_each_completed:(e,n)=>{const r=n,l=dt(e,n);l.incrCompleted();const a=Qe(l.nodes,r.group_name,"for_each_group");a.status=(r.failure_count??0)===0?"completed":"failed",a.elapsed=r.elapsed,a.success_count=r.success_count,a.failure_count=r.failure_count,Ie(l.nodes,r.group_name)},workflow_completed:(e,n)=>{var r;if(e.wfDepth=Math.max(0,e.wfDepth-1),e.wfDepth===0){const l=n;e.workflowStatus="completed",e.isPaused=!1,e.workflowOutput=l.output??null,e.nodes.$end&&(e.nodes.$end.status="completed",Ie(e.nodes,"$end")),e.nodes.$start&&(e.nodes.$start.status="completed",Ie(e.nodes,"$start")),e.highlightedEdges=[]}else{const l=n,a=l.subworkflow_path?(r=qi(e.subworkflowContexts,l.subworkflow_path))==null?void 0:r.ctx:Bn(e.subworkflowContexts,e.activeContextPath);a&&(a.status="completed",a.workflowOutput=l.output??null,a.nodes.$end&&(a.nodes.$end.status="completed"),a.nodes.$start&&(a.nodes.$start.status="completed"),a.highlightedEdges=[])}},workflow_failed:(e,n)=>{var l;e.wfDepth=Math.max(0,e.wfDepth-1);const r=n;if(e.wfDepth===0){if(e.workflowStatus="failed",e.isPaused=!1,e.workflowFailedAgent=r.agent_name||null,r.agent_name&&e.nodes[r.agent_name]){e.nodes[r.agent_name].status="failed",Ie(e.nodes,r.agent_name);for(const a of e.routes)a.to===r.agent_name&&e.highlightedEdges.push({from:a.from,to:a.to,state:"failed"})}e.workflowFailure={error_type:r.error_type,message:r.message,elapsed_seconds:r.elapsed_seconds,timeout_seconds:r.timeout_seconds,current_agent:r.current_agent},e.nodes.$start&&(e.nodes.$start.status="completed",Ie(e.nodes,"$start"))}else{const a=r.subworkflow_path?(l=qi(e.subworkflowContexts,r.subworkflow_path))==null?void 0:l.ctx:Bn(e.subworkflowContexts,e.activeContextPath);a&&(a.status="failed",a.workflowFailure={error_type:r.error_type,message:r.message})}},subworkflow_started:(e,n)=>{const r=n,l=r.slot_key??(r.item_key!=null?`${r.agent_name}[${r.item_key}]`:r.agent_name),a=AN(r.agent_name,r.iteration??1,r.workflow,l);let s;if(r.parent_path!==void 0){const h=qi(e.subworkflowContexts,r.parent_path);if(!h)return;s=h.indexPath}else s=e.activeContextPath;const u=e.viewContextPath.length===e.activeContextPath.length&&e.viewContextPath.every((h,d)=>h===e.activeContextPath[d]);let f;if(s.length===0)e.subworkflowContexts.push(a),f=[e.subworkflowContexts.length-1];else{const h=Bn(e.subworkflowContexts,s);if(!h)return;h.children.push(a),f=[...s,h.children.length-1]}if(e.activeContextPath=f,u&&(e.viewContextPath=f),s.length===0){const h=e.nodes[r.agent_name];h&&(h.status="running",Ie(e.nodes,r.agent_name))}else{const h=Bn(e.subworkflowContexts,s);if(h){const d=h.nodes[r.agent_name];d&&(d.status="running",Ie(h.nodes,r.agent_name))}}},subworkflow_completed:(e,n)=>{var s;const r=n;let l;if(r.parent_path!==void 0){const u=qi(e.subworkflowContexts,r.parent_path);if(!u)return;l=u.indexPath}else l=e.activeContextPath;const a=l.length===0?e.nodes:(s=Bn(e.subworkflowContexts,l))==null?void 0:s.nodes;if(a){const u=a[r.agent_name];if(u){if(r.item_key==null)if(u.status="completed",u.elapsed=r.elapsed,l.length===0)e.agentsCompleted++;else{const f=Bn(e.subworkflowContexts,l);f&&f.agentsCompleted++}Ie(a,r.agent_name)}}e.activeContextPath=l},subworkflow_failed:(e,n)=>{var s;const r=n;let l;if(r.parent_path!==void 0){const u=qi(e.subworkflowContexts,r.parent_path);if(!u)return;l=u.indexPath}else l=e.activeContextPath;const a=l.length===0?e.nodes:(s=Bn(e.subworkflowContexts,l))==null?void 0:s.nodes;if(a){const u=a[r.agent_name];u&&r.item_key==null&&(u.status="failed",u.elapsed=r.elapsed,u.error_type=r.error_type,u.error_message=r.message,Ie(a,r.agent_name))}e.activeContextPath=l},checkpoint_saved:(e,n)=>{const r=n;r.path&&e.workflowFailure&&(e.workflowFailure={...e.workflowFailure,checkpoint_path:r.path})},agent_paused:(e,n)=>{const r=n,l=Qe(e.nodes,r.agent_name);l.status="waiting",l.activity.push({type:"agent_paused",icon:"⏸",label:"Paused",text:"Agent paused — click Resume to re-execute"}),Ie(e.nodes,r.agent_name),e.isPaused=!0},agent_resumed:(e,n)=>{const r=n,l=Qe(e.nodes,r.agent_name);l.status="running",l.activity.push({type:"agent_resumed",icon:"▶",label:"Resumed",text:"Agent resumed — re-executing"}),Ie(e.nodes,r.agent_name),e.isPaused=!1}};function Nu(e){var l,a;const n=e.timestamp,r=e.data;switch(e.type){case"workflow_started":return{timestamp:n,level:"info",source:"workflow",message:`Workflow "${r.name||""}" started`};case"agent_started":return{timestamp:n,level:"info",source:String(r.agent_name),message:`Agent started${r.iteration!=null?` (iteration ${r.iteration})`:""}`};case"agent_completed":return{timestamp:n,level:"success",source:String(r.agent_name),message:`Agent completed${r.elapsed!=null?` in ${Uu(r.elapsed)}`:""}${r.tokens!=null?` · ${r.tokens.toLocaleString()} tokens`:""}${r.cost_usd!=null?` · $${r.cost_usd.toFixed(4)}`:""}`};case"agent_failed":return{timestamp:n,level:"error",source:String(r.agent_name),message:`Agent failed: ${r.message||r.error_type||"unknown error"}`};case"script_started":return{timestamp:n,level:"info",source:String(r.agent_name),message:"Script started"};case"script_completed":return{timestamp:n,level:"success",source:String(r.agent_name),message:`Script completed (exit ${r.exit_code??"?"})${r.elapsed!=null?` in ${Uu(r.elapsed)}`:""}`};case"script_failed":return{timestamp:n,level:"error",source:String(r.agent_name),message:`Script failed: ${r.message||r.error_type||"unknown error"}`};case"gate_presented":return{timestamp:n,level:"warning",source:String(r.agent_name),message:"Waiting for human input…"};case"gate_resolved":return{timestamp:n,level:"success",source:String(r.agent_name),message:`Gate resolved → ${r.selected_option||"continue"}`};case"route_taken":return{timestamp:n,level:"debug",source:"router",message:`${r.from_agent} → ${r.to_agent}`};case"parallel_started":return{timestamp:n,level:"info",source:String(r.group_name),message:`Parallel group started (${((l=r.agents)==null?void 0:l.length)||"?"} agents)`};case"parallel_completed":return{timestamp:n,level:r.failure_count===0?"success":"error",source:String(r.group_name),message:`Parallel group completed${r.failure_count>0?` with ${r.failure_count} failure(s)`:""}`};case"for_each_started":return{timestamp:n,level:"info",source:String(r.group_name),message:`For-each started (${r.item_count} items)`};case"for_each_completed":return{timestamp:n,level:(r.failure_count??0)===0?"success":"error",source:String(r.group_name),message:`For-each completed · ${r.success_count} succeeded${r.failure_count>0?` · ${r.failure_count} failed`:""}`};case"workflow_completed":return{timestamp:n,level:"success",source:"workflow",message:`Workflow completed${r.elapsed!=null?` in ${Uu(r.elapsed)}`:""}`};case"workflow_failed":return{timestamp:n,level:"error",source:"workflow",message:`Workflow failed: ${r.message||r.error_type||"unknown error"}`};case"checkpoint_saved":return{timestamp:n,level:"info",source:"workflow",message:`Checkpoint saved: ${((a=r.path)==null?void 0:a.split("/").pop())||"unknown"}`};case"agent_paused":return{timestamp:n,level:"warning",source:String(r.agent_name),message:"Agent paused — waiting for resume"};case"agent_resumed":return{timestamp:n,level:"info",source:String(r.agent_name),message:"Agent resumed — re-executing"};default:return null}}function Uu(e){if(e<1)return`${(e*1e3).toFixed(0)}ms`;if(e<60)return`${e.toFixed(1)}s`;const n=Math.floor(e/60),r=(e%60).toFixed(0);return`${n}m ${r}s`}function ku(e){const n=e.timestamp,r=e.data;switch(e.type){case"agent_started":return{timestamp:n,source:String(r.agent_name),type:"turn",message:`Agent started${r.iteration!=null?` (iteration ${r.iteration})`:""}`};case"agent_prompt_rendered":return{timestamp:n,source:String(r.agent_name),type:"prompt",message:"Prompt rendered",detail:uo(String(r.rendered_prompt||""),500)};case"agent_reasoning":return{timestamp:n,source:String(r.agent_name),type:"reasoning",message:String(r.content||"")};case"agent_tool_start":return{timestamp:n,source:String(r.agent_name),type:"tool-start",message:`→ ${r.tool_name}`,detail:r.arguments?uo(String(r.arguments),300):null};case"agent_tool_complete":return{timestamp:n,source:String(r.agent_name),type:"tool-complete",message:`← ${r.tool_name||"done"}`,detail:r.result?uo(String(r.result),300):null};case"agent_turn_start":return{timestamp:n,source:String(r.agent_name),type:"turn",message:`Turn ${r.turn??"?"}`};case"agent_message":return{timestamp:n,source:String(r.agent_name),type:"message",message:uo(String(r.content||""),500)};case"agent_completed":return{timestamp:n,source:String(r.agent_name),type:"turn",message:`Completed${r.elapsed!=null?` in ${Uu(r.elapsed)}`:""}${r.tokens!=null?` · ${r.tokens.toLocaleString()} tokens`:""}`};case"agent_failed":return{timestamp:n,source:String(r.agent_name),type:"turn",message:`Failed: ${r.message||r.error_type||"unknown"}`};case"script_started":return{timestamp:n,source:String(r.agent_name),type:"turn",message:"Script started"};case"script_completed":return{timestamp:n,source:String(r.agent_name),type:"tool-complete",message:`Script completed (exit ${r.exit_code??"?"})`,detail:r.stdout?uo(String(r.stdout),300):null};case"script_failed":return{timestamp:n,source:String(r.agent_name),type:"turn",message:`Script failed: ${r.message||r.error_type||"unknown"}`};default:return null}}function uo(e,n){return e.length<=n?e:e.slice(0,n)+"…"}function zx(e){const n=e.match(/^(\s*)/);return n?n[1].length:0}function MN(e){const n=new Map;for(let r=0;ra)s=u;else break}s>r&&n.set(r,s)}return n}function jN(e){if(/^\s*#/.test(e))return b.jsx("span",{className:"text-emerald-500/70",children:e});const n=e.match(/^(\s*)(- )?([a-zA-Z_][\w.-]*)(:\s*)(.*)/);if(n){const[,l,a,s,u,f]=n;return b.jsxs("span",{children:[l,a??"",b.jsx("span",{className:"text-sky-400",children:s}),b.jsx("span",{className:"text-[var(--text-muted)]",children:u}),Mx(f)]})}const r=e.match(/^(\s*)(- )(.*)/);if(r){const[,l,a,s]=r;return b.jsxs("span",{children:[l,b.jsx("span",{className:"text-[var(--text-muted)]",children:a}),Mx(s)]})}return b.jsx("span",{children:e})}function Mx(e){if(!e)return"";const n=e.indexOf(" #"),r=n>=0?e.slice(0,n):e,l=n>=0?e.slice(n):"";let a=r;return/^(true|false|null|yes|no)$/i.test(r.trim())?a=b.jsx("span",{className:"text-amber-400",children:r}):/^\d+(\.\d+)?$/.test(r.trim())?a=b.jsx("span",{className:"text-amber-400",children:r}):/^["'].*["']$/.test(r.trim())?a=b.jsx("span",{className:"text-green-400",children:r}):(r.includes("|")||r.includes(">"))&&(a=b.jsx("span",{className:"text-[var(--text-secondary)]",children:r})),b.jsxs(b.Fragment,{children:[a,l&&b.jsx("span",{className:"text-emerald-500/70",children:l})]})}function ON({yaml:e,onClose:n}){const[r,l]=V.useState(new Set);V.useEffect(()=>{const h=d=>{d.key==="Escape"&&n()};return window.addEventListener("keydown",h),()=>window.removeEventListener("keydown",h)},[n]);const a=V.useMemo(()=>e.split(` +`),[e]),s=V.useMemo(()=>MN(a),[a]),u=V.useCallback(h=>{l(d=>{const m=new Set(d);return m.has(h)?m.delete(h):m.add(h),m})},[]),f=V.useMemo(()=>{const h=[];let d=-1;for(let m=0;mb.jsxs("div",{className:"flex",children:[b.jsx("span",{className:"inline-flex items-center justify-center flex-shrink-0",style:{width:"1.25rem"},children:m?b.jsx("button",{onClick:()=>u(h),className:"text-[var(--text-muted)] hover:text-[var(--text)] p-0 leading-none",style:{background:"none",border:"none",cursor:"pointer"},children:p?b.jsx(jr,{className:"w-3 h-3"}):b.jsx(Wi,{className:"w-3 h-3"})}):null}),b.jsxs("span",{className:"flex-1",children:[jN(d),p&&b.jsx("span",{className:"text-[var(--text-muted)] text-[11px] ml-2 px-1.5 py-0.5 rounded bg-[var(--surface-hover)] cursor-pointer",onClick:()=>u(h),children:"···"})]})]},h))})})]})]})}function DN(){const e=he(S=>S.workflowName),n=he(S=>S.workflowStatus),r=he(S=>S.isPaused),l=he(S=>S.workflowYaml),a=he(S=>S.conductorVersion),[s,u]=V.useState(!1),[f,h]=V.useState(!1),[d,m]=V.useState(!1),[p,y]=V.useState(!1),v=n==="running"||n==="pending";V.useEffect(()=>{r||(u(!1),h(!1),m(!1))},[r]);const _=async()=>{u(!0);try{await fetch("/api/stop",{method:"POST"})}catch(S){console.error("Failed to stop agent:",S),u(!1)}},k=async()=>{h(!0);try{await fetch("/api/resume",{method:"POST"})}catch(S){console.error("Failed to resume agent:",S),h(!1)}},w=async()=>{m(!0);try{await fetch("/api/kill",{method:"POST"})}catch(S){console.error("Failed to kill workflow:",S),m(!1)}};return b.jsxs("header",{className:"flex items-center justify-between px-4 py-2 bg-[var(--surface)] border-b border-[var(--border)] flex-shrink-0",children:[b.jsxs("div",{className:"flex items-center gap-2",children:[b.jsx(Lb,{className:"w-4 h-4 text-[var(--running)]"}),b.jsx("h1",{className:"text-sm font-semibold text-[var(--text)]",children:"Conductor"}),e&&b.jsxs("span",{className:"text-sm text-[var(--text-muted)] font-normal",children:["— ",e]})]}),b.jsxs("div",{className:"flex items-center gap-3",children:[r?b.jsxs(b.Fragment,{children:[b.jsxs("button",{onClick:k,disabled:f,className:`flex items-center gap-1.5 px-2.5 py-1 text-xs font-medium rounded\r + bg-emerald-500/10 text-emerald-400 border border-emerald-500/20\r + hover:bg-emerald-500/20 hover:border-emerald-500/30\r + disabled:opacity-50 disabled:cursor-not-allowed\r + transition-colors`,title:"Re-execute the paused agent",children:[b.jsx(Zp,{className:"w-3 h-3"}),f?"Resuming...":"Resume"]}),b.jsxs("button",{onClick:w,disabled:d,className:`flex items-center gap-1.5 px-2.5 py-1 text-xs font-medium rounded\r + bg-red-500/10 text-red-400 border border-red-500/20\r + hover:bg-red-500/20 hover:border-red-500/30\r + disabled:opacity-50 disabled:cursor-not-allowed\r + transition-colors`,title:"Stop workflow entirely (checkpoint saved for CLI resume)",children:[b.jsx(Go,{className:"w-3 h-3"}),d?"Killing...":"Kill"]})]}):v?b.jsxs("button",{onClick:_,disabled:s,className:`flex items-center gap-1.5 px-2.5 py-1 text-xs font-medium rounded\r + bg-red-500/10 text-red-400 border border-red-500/20\r + hover:bg-red-500/20 hover:border-red-500/30\r + disabled:opacity-50 disabled:cursor-not-allowed\r + transition-colors`,children:[b.jsx(Ub,{className:"w-3 h-3"}),s?"Stopping...":"Stop"]}):null,l&&b.jsxs("button",{onClick:()=>y(!0),className:`flex items-center gap-1.5 px-2.5 py-1 text-xs font-medium rounded\r + bg-[var(--surface-hover)] text-[var(--text-secondary)] border border-[var(--border)]\r + hover:text-[var(--text)] hover:bg-[var(--surface)]\r + transition-colors`,title:"View workflow YAML configuration",children:[b.jsx(fN,{className:"w-3 h-3"}),"YAML"]}),b.jsxs("a",{href:"/api/logs",download:"conductor-logs.json",className:`flex items-center gap-1.5 px-2.5 py-1 text-xs font-medium rounded\r + bg-[var(--surface-hover)] text-[var(--text-secondary)] border border-[var(--border)]\r + hover:text-[var(--text)] hover:bg-[var(--surface)]\r + transition-colors`,title:"Download full event log as JSON",children:[b.jsx(uN,{className:"w-3 h-3"}),"Logs"]}),b.jsxs("span",{className:"text-xs text-[var(--text-muted)]",children:["v",a??"—"]})]}),p&&l&&b.jsx(ON,{yaml:l,onClose:()=>y(!1)})]})}function RN(){const e=he(s=>s.getBreadcrumbs),n=he(s=>s.navigateToContext),r=he(s=>s.viewContextPath);if(he(s=>s.subworkflowContexts).length===0&&r.length===0)return null;const a=e();return b.jsxs("div",{className:"flex items-center gap-1 px-4 py-1.5 bg-[var(--surface)] border-b border-[var(--border)] text-xs flex-shrink-0",children:[b.jsx(Qp,{className:"w-3 h-3 text-[var(--text-muted)] mr-1"}),a.map((s,u)=>{const f=u===a.length-1,h=JSON.stringify(s.path)===JSON.stringify(r);return b.jsxs("span",{className:"flex items-center gap-1",children:[u>0&&b.jsx(jr,{className:"w-3 h-3 text-[var(--text-muted)]"}),f?b.jsx("span",{className:"font-semibold text-[var(--text)]",children:s.label}):b.jsx("button",{onClick:()=>n(s.path),className:`hover:text-[var(--running)] transition-colors ${h?"text-[var(--text)] font-medium":"text-[var(--text-muted)]"}`,children:s.label})]},u)})]})}function Le(...e){return e.filter(Boolean).join(" ")}function Qt(e){if(e==null)return"";if(e<60)return`${e.toFixed(1)}s`;const n=Math.floor(e/60),r=(e%60).toFixed(0);return`${n}m ${r}s`}function Gn(e){return e==null?"":e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}K`:`${e}`}function mi(e){return e==null?"":`$${e.toFixed(4)}`}function Ib(e){return e==null?"":typeof e=="string"?e:JSON.stringify(e,null,2)}function LN(e,n){if(n<=0)return`${e.toLocaleString()} tokens (limit unknown)`;const r=a=>a.toLocaleString(),l=(e/n*100).toFixed(1);return`${r(e)} / ${r(n)} (${l}%)`}function Vb(){const e=he(f=>f.workflowStatus),n=he(f=>f.workflowStartTime),r=he(f=>f.replayMode),l=he(f=>f.lastEventTime),[a,s]=V.useState("—"),u=V.useRef(null);return V.useEffect(()=>{if(n!=null){if(r){u.current&&(clearInterval(u.current),u.current=null),s(Qt((l??n)-n));return}if(e==="running"){const f=()=>{const h=Date.now()/1e3-n;s(Qt(h))};return f(),u.current=setInterval(f,500),()=>{u.current&&clearInterval(u.current)}}else(e==="completed"||e==="failed")&&u.current&&(clearInterval(u.current),u.current=null)}},[e,n,r,l]),a}function HN(){const e=he(k=>k.workflowStatus),n=he(k=>k.agentsCompleted),r=he(k=>k.agentsTotal),l=he(k=>k.totalCost),a=he(k=>k.totalTokens),s=he(k=>k.wsStatus),u=he(k=>k.workflowFailure),f=he(k=>k.lastEventTime),h=Vb(),[d,m]=V.useState(null);V.useEffect(()=>{if(e!=="running"||f==null){m(null);return}const k=()=>{m(Math.floor(Date.now()/1e3-f))};k();const w=setInterval(k,1e3);return()=>clearInterval(w)},[e,f]);const p=e==="failed",y=(()=>{switch(e){case"pending":return"Waiting for workflow…";case"running":return"Running";case"completed":return"Completed";case"failed":{if(!u)return"Failed";const k=u.error_type||"";return k==="MaxIterationsError"?"Failed: exceeded maximum iterations":k==="TimeoutError"?"Failed: workflow timed out":u.message?`Failed: ${u.message.length>60?u.message.slice(0,57)+"...":u.message}`:`Failed: ${k}`}}})(),v={pending:"bg-[var(--pending)]",running:"bg-[var(--running)] animate-pulse",completed:"bg-[var(--completed)]",failed:"bg-[var(--failed)]"}[e],_=(()=>{switch(s){case"connected":return b.jsxs("span",{className:"flex items-center gap-1 text-[var(--completed)]",children:[b.jsx(_N,{className:"w-3 h-3"}),b.jsx("span",{children:"Connected"})]});case"disconnected":return b.jsxs("span",{className:"flex items-center gap-1 text-[var(--failed)]",children:[b.jsx(SN,{className:"w-3 h-3"}),b.jsx("span",{children:"Disconnected"})]});case"reconnecting":return b.jsxs("span",{className:"flex items-center gap-1 text-[var(--waiting)]",children:[b.jsx(To,{className:"w-3 h-3 animate-spin"}),b.jsx("span",{children:"Reconnecting\\u2026"})]});case"connecting":return b.jsxs("span",{className:"flex items-center gap-1 text-[var(--text-muted)]",children:[b.jsx(To,{className:"w-3 h-3 animate-spin"}),b.jsx("span",{children:"Connecting\\u2026"})]})}})();return b.jsxs("footer",{className:Le("flex items-center gap-4 px-4 py-1.5 border-t text-xs flex-shrink-0 transition-colors duration-300",p?"bg-red-950/50 border-red-500/30":"bg-[var(--surface)] border-[var(--border)]"),children:[b.jsx("span",{className:Le("w-2 h-2 rounded-full flex-shrink-0",v)}),b.jsx("span",{className:Le(p?"text-red-300":"text-[var(--text)]"),children:y}),r>0&&b.jsxs("span",{className:Le(p?"text-red-400/60":"text-[var(--text-muted)]"),children:[n,"/",r," agents"]}),e!=="pending"&&b.jsx("span",{className:Le("font-mono",p?"text-red-400/60":"text-[var(--text-muted)]"),children:h}),a>0&&b.jsxs("span",{className:Le("flex items-center gap-1",p?"text-red-400/60":"text-[var(--text-muted)]"),title:"Total tokens used",children:[b.jsx(qb,{className:"w-3 h-3"}),b.jsx("span",{className:"font-mono",children:a.toLocaleString()})]}),l>0&&b.jsxs("span",{className:Le("flex items-center gap-1",p?"text-red-400/60":"text-[var(--text-muted)]"),title:"Total cost",children:[b.jsx(Hb,{className:"w-3 h-3"}),b.jsxs("span",{className:"font-mono",children:["$",l.toFixed(4)]})]}),d!=null&&d>=5&&b.jsxs("span",{className:Le("flex items-center gap-1 font-mono",d>=60?"text-amber-400":"text-[var(--text-muted)]"),title:"Time since last event from the provider",children:[b.jsx(sN,{className:"w-3 h-3"}),b.jsx("span",{children:d>=60?`${Math.floor(d/60)}m ${d%60}s idle`:`${d}s idle`})]}),b.jsx("span",{className:"flex-1"}),_]})}const BN=[1,5,10,20,50];function qN(e,n){if(n===0||e.length===0)return"+0.0s";const r=e[0].timestamp,a=e[Math.min(n,e.length)-1].timestamp-r;if(a<60)return`+${a.toFixed(1)}s`;const s=Math.floor(a/60),u=a%60;return`+${s}m${u.toFixed(0)}s`}function UN(){const e=he(p=>p.replayPosition),n=he(p=>p.replayTotalEvents),r=he(p=>p.replayPlaying),l=he(p=>p.replaySpeed),a=he(p=>p.replayEvents),s=he(p=>p.setReplayPosition),u=he(p=>p.setReplayPlaying),f=he(p=>p.setReplaySpeed),h=p=>{const y=parseInt(p.target.value,10);s(y),r&&u(!1)},d=()=>{!r&&e>=n&&s(0),u(!r)},m=n>0?e/n*100:0;return b.jsxs("footer",{className:"flex items-center gap-3 px-4 py-1.5 border-t bg-[var(--surface)] border-[var(--border)] text-xs flex-shrink-0",children:[b.jsx("button",{onClick:d,className:"flex items-center justify-center w-6 h-6 rounded hover:bg-[var(--surface-hover)] text-[var(--text-secondary)] hover:text-[var(--text)] transition-colors",title:r?"Pause":"Play",children:r?b.jsx(mN,{className:"w-3.5 h-3.5"}):b.jsx(Zp,{className:"w-3.5 h-3.5"})}),b.jsxs("div",{className:"flex-1 relative flex items-center",children:[b.jsx("input",{type:"range",min:0,max:n,value:e,onChange:h,className:"w-full h-1 appearance-none rounded-full cursor-pointer",style:{background:`linear-gradient(to right, var(--accent) 0%, var(--accent) ${m}%, var(--border) ${m}%, var(--border) 100%)`,WebkitAppearance:"none"}}),b.jsx("style",{children:` + footer input[type="range"]::-webkit-slider-thumb { + -webkit-appearance: none; + width: 12px; + height: 12px; + border-radius: 50%; + background: var(--accent); + border: 2px solid var(--surface); + cursor: pointer; + box-shadow: 0 0 4px rgba(99, 102, 241, 0.4); + } + footer input[type="range"]::-moz-range-thumb { + width: 12px; + height: 12px; + border-radius: 50%; + background: var(--accent); + border: 2px solid var(--surface); + cursor: pointer; + box-shadow: 0 0 4px rgba(99, 102, 241, 0.4); + } + `})]}),b.jsx("span",{className:"text-[var(--text-muted)] font-mono whitespace-nowrap",children:qN(a,e)}),b.jsxs("span",{className:"text-[var(--text-muted)] font-mono whitespace-nowrap",children:["Event ",e,"/",n]}),b.jsx("div",{className:"flex items-center gap-0.5",children:BN.map(p=>b.jsxs("button",{onClick:()=>f(p),className:Le("px-1.5 py-0.5 rounded text-xs font-mono transition-colors",l===p?"bg-[var(--accent)] text-white":"text-[var(--text-muted)] hover:text-[var(--text-secondary)] hover:bg-[var(--surface-hover)]"),children:[p,"×"]},p))})]})}const fc=V.createContext(null);fc.displayName="PanelGroupContext";const yt={group:"data-panel-group",groupDirection:"data-panel-group-direction",groupId:"data-panel-group-id",panel:"data-panel",panelCollapsible:"data-panel-collapsible",panelId:"data-panel-id",panelSize:"data-panel-size",resizeHandle:"data-resize-handle",resizeHandleActive:"data-resize-handle-active",resizeHandleEnabled:"data-panel-resize-handle-enabled",resizeHandleId:"data-panel-resize-handle-id",resizeHandleState:"data-resize-handle-state"},Kp=10,Pi=V.useLayoutEffect,jx=X2.useId,IN=typeof jx=="function"?jx:()=>null;let VN=0;function Jp(e=null){const n=IN(),r=V.useRef(e||n||null);return r.current===null&&(r.current=""+VN++),e??r.current}function Gb({children:e,className:n="",collapsedSize:r,collapsible:l,defaultSize:a,forwardedRef:s,id:u,maxSize:f,minSize:h,onCollapse:d,onExpand:m,onResize:p,order:y,style:v,tagName:_="div",...k}){const w=V.useContext(fc);if(w===null)throw Error("Panel components must be rendered within a PanelGroup container");const{collapsePanel:S,expandPanel:T,getPanelSize:E,getPanelStyle:A,groupId:I,isPanelCollapsed:z,reevaluatePanelConstraints:R,registerPanel:D,resizePanel:U,unregisterPanel:X}=w,B=Jp(u),q=V.useRef({callbacks:{onCollapse:d,onExpand:m,onResize:p},constraints:{collapsedSize:r,collapsible:l,defaultSize:a,maxSize:f,minSize:h},id:B,idIsFromProps:u!==void 0,order:y});V.useRef({didLogMissingDefaultSizeWarning:!1}),Pi(()=>{const{callbacks:L,constraints:$}=q.current,M={...$};q.current.id=B,q.current.idIsFromProps=u!==void 0,q.current.order=y,L.onCollapse=d,L.onExpand=m,L.onResize=p,$.collapsedSize=r,$.collapsible=l,$.defaultSize=a,$.maxSize=f,$.minSize=h,(M.collapsedSize!==$.collapsedSize||M.collapsible!==$.collapsible||M.maxSize!==$.maxSize||M.minSize!==$.minSize)&&R(q.current,M)}),Pi(()=>{const L=q.current;return D(L),()=>{X(L)}},[y,B,D,X]),V.useImperativeHandle(s,()=>({collapse:()=>{S(q.current)},expand:L=>{T(q.current,L)},getId(){return B},getSize(){return E(q.current)},isCollapsed(){return z(q.current)},isExpanded(){return!z(q.current)},resize:L=>{U(q.current,L)}}),[S,T,E,z,B,U]);const ee=A(q.current,a);return V.createElement(_,{...k,children:e,className:n,id:B,style:{...ee,...v},[yt.groupId]:I,[yt.panel]:"",[yt.panelCollapsible]:l||void 0,[yt.panelId]:B,[yt.panelSize]:parseFloat(""+ee.flexGrow).toFixed(1)})}const yo=V.forwardRef((e,n)=>V.createElement(Gb,{...e,forwardedRef:n}));Gb.displayName="Panel";yo.displayName="forwardRef(Panel)";let wp=null,Iu=-1,hi=null;function GN(e,n){if(n){const r=(n&Fb)!==0,l=(n&Qb)!==0,a=(n&Zb)!==0,s=(n&Kb)!==0;if(r)return a?"se-resize":s?"ne-resize":"e-resize";if(l)return a?"sw-resize":s?"nw-resize":"w-resize";if(a)return"s-resize";if(s)return"n-resize"}switch(e){case"horizontal":return"ew-resize";case"intersection":return"move";case"vertical":return"ns-resize"}}function PN(){hi!==null&&(document.head.removeChild(hi),wp=null,hi=null,Iu=-1)}function Qd(e,n){var r,l;const a=GN(e,n);if(wp!==a){if(wp=a,hi===null&&(hi=document.createElement("style"),document.head.appendChild(hi)),Iu>=0){var s;(s=hi.sheet)===null||s===void 0||s.removeRule(Iu)}Iu=(r=(l=hi.sheet)===null||l===void 0?void 0:l.insertRule(`*{cursor: ${a} !important;}`))!==null&&r!==void 0?r:-1}}function Pb(e){return e.type==="keydown"}function $b(e){return e.type.startsWith("pointer")}function Yb(e){return e.type.startsWith("mouse")}function dc(e){if($b(e)){if(e.isPrimary)return{x:e.clientX,y:e.clientY}}else if(Yb(e))return{x:e.clientX,y:e.clientY};return{x:1/0,y:1/0}}function $N(){if(typeof matchMedia=="function")return matchMedia("(pointer:coarse)").matches?"coarse":"fine"}function YN(e,n,r){return e.xn.x&&e.yn.y}function XN(e,n){if(e===n)throw new Error("Cannot compare node with itself");const r={a:Rx(e),b:Rx(n)};let l;for(;r.a.at(-1)===r.b.at(-1);)e=r.a.pop(),n=r.b.pop(),l=e;De(l,"Stacking order can only be calculated for elements with a common ancestor");const a={a:Dx(Ox(r.a)),b:Dx(Ox(r.b))};if(a.a===a.b){const s=l.childNodes,u={a:r.a.at(-1),b:r.b.at(-1)};let f=s.length;for(;f--;){const h=s[f];if(h===u.a)return 1;if(h===u.b)return-1}}return Math.sign(a.a-a.b)}const FN=/\b(?:position|zIndex|opacity|transform|webkitTransform|mixBlendMode|filter|webkitFilter|isolation)\b/;function QN(e){var n;const r=getComputedStyle((n=Xb(e))!==null&&n!==void 0?n:e).display;return r==="flex"||r==="inline-flex"}function ZN(e){const n=getComputedStyle(e);return!!(n.position==="fixed"||n.zIndex!=="auto"&&(n.position!=="static"||QN(e))||+n.opacity<1||"transform"in n&&n.transform!=="none"||"webkitTransform"in n&&n.webkitTransform!=="none"||"mixBlendMode"in n&&n.mixBlendMode!=="normal"||"filter"in n&&n.filter!=="none"||"webkitFilter"in n&&n.webkitFilter!=="none"||"isolation"in n&&n.isolation==="isolate"||FN.test(n.willChange)||n.webkitOverflowScrolling==="touch")}function Ox(e){let n=e.length;for(;n--;){const r=e[n];if(De(r,"Missing node"),ZN(r))return r}return null}function Dx(e){return e&&Number(getComputedStyle(e).zIndex)||0}function Rx(e){const n=[];for(;e;)n.push(e),e=Xb(e);return n}function Xb(e){const{parentNode:n}=e;return n&&n instanceof ShadowRoot?n.host:n}const Fb=1,Qb=2,Zb=4,Kb=8,KN=$N()==="coarse";let Pn=[],Wl=!1,Ii=new Map,hc=new Map;const Ao=new Set;function JN(e,n,r,l,a){var s;const{ownerDocument:u}=n,f={direction:r,element:n,hitAreaMargins:l,setResizeHandlerState:a},h=(s=Ii.get(u))!==null&&s!==void 0?s:0;return Ii.set(u,h+1),Ao.add(f),Qu(),function(){var m;hc.delete(e),Ao.delete(f);const p=(m=Ii.get(u))!==null&&m!==void 0?m:1;if(Ii.set(u,p-1),Qu(),p===1&&Ii.delete(u),Pn.includes(f)){const y=Pn.indexOf(f);y>=0&&Pn.splice(y,1),em(),a("up",!0,null)}}}function WN(e){const{target:n}=e,{x:r,y:l}=dc(e);Wl=!0,Wp({target:n,x:r,y:l}),Qu(),Pn.length>0&&(Zu("down",e),e.preventDefault(),Jb(n)||e.stopImmediatePropagation())}function Zd(e){const{x:n,y:r}=dc(e);if(Wl&&e.buttons===0&&(Wl=!1,Zu("up",e)),!Wl){const{target:l}=e;Wp({target:l,x:n,y:r})}Zu("move",e),em(),Pn.length>0&&e.preventDefault()}function Kd(e){const{target:n}=e,{x:r,y:l}=dc(e);hc.clear(),Wl=!1,Pn.length>0&&(e.preventDefault(),Jb(n)||e.stopImmediatePropagation()),Zu("up",e),Wp({target:n,x:r,y:l}),em(),Qu()}function Jb(e){let n=e;for(;n;){if(n.hasAttribute(yt.resizeHandle))return!0;n=n.parentElement}return!1}function Wp({target:e,x:n,y:r}){Pn.splice(0);let l=null;(e instanceof HTMLElement||e instanceof SVGElement)&&(l=e),Ao.forEach(a=>{const{element:s,hitAreaMargins:u}=a,f=s.getBoundingClientRect(),{bottom:h,left:d,right:m,top:p}=f,y=KN?u.coarse:u.fine;if(n>=d-y&&n<=m+y&&r>=p-y&&r<=h+y){if(l!==null&&document.contains(l)&&s!==l&&!s.contains(l)&&!l.contains(s)&&XN(l,s)>0){let _=l,k=!1;for(;_&&!_.contains(s);){if(YN(_.getBoundingClientRect(),f)){k=!0;break}_=_.parentElement}if(k)return}Pn.push(a)}})}function Jd(e,n){hc.set(e,n)}function em(){let e=!1,n=!1;Pn.forEach(l=>{const{direction:a}=l;a==="horizontal"?e=!0:n=!0});let r=0;hc.forEach(l=>{r|=l}),e&&n?Qd("intersection",r):e?Qd("horizontal",r):n?Qd("vertical",r):PN()}let Wd=new AbortController;function Qu(){Wd.abort(),Wd=new AbortController;const e={capture:!0,signal:Wd.signal};Ao.size&&(Wl?(Pn.length>0&&Ii.forEach((n,r)=>{const{body:l}=r;n>0&&(l.addEventListener("contextmenu",Kd,e),l.addEventListener("pointerleave",Zd,e),l.addEventListener("pointermove",Zd,e))}),window.addEventListener("pointerup",Kd,e),window.addEventListener("pointercancel",Kd,e)):Ii.forEach((n,r)=>{const{body:l}=r;n>0&&(l.addEventListener("pointerdown",WN,e),l.addEventListener("pointermove",Zd,e))}))}function Zu(e,n){Ao.forEach(r=>{const{setResizeHandlerState:l}=r,a=Pn.includes(r);l(e,a,n)})}function ek(){const[e,n]=V.useState(0);return V.useCallback(()=>n(r=>r+1),[])}function De(e,n){if(!e)throw console.error(n),Error(n)}function Xi(e,n,r=Kp){return e.toFixed(r)===n.toFixed(r)?0:e>n?1:-1}function Tr(e,n,r=Kp){return Xi(e,n,r)===0}function xn(e,n,r){return Xi(e,n,r)===0}function tk(e,n,r){if(e.length!==n.length)return!1;for(let l=0;l0&&(e=e<0?0-S:S)}}}{const p=e<0?f:h,y=r[p];De(y,`No panel constraints found for index ${p}`);const{collapsedSize:v=0,collapsible:_,minSize:k=0}=y;if(_){const w=n[p];if(De(w!=null,`Previous layout not found for panel index ${p}`),xn(w,k)){const S=w-v;Xi(S,Math.abs(e))>0&&(e=e<0?0-S:S)}}}}{const p=e<0?1:-1;let y=e<0?h:f,v=0;for(;;){const k=n[y];De(k!=null,`Previous layout not found for panel index ${y}`);const S=Ql({panelConstraints:r,panelIndex:y,size:100})-k;if(v+=S,y+=p,y<0||y>=r.length)break}const _=Math.min(Math.abs(e),Math.abs(v));e=e<0?0-_:_}{let y=e<0?f:h;for(;y>=0&&y=0))break;e<0?y--:y++}}if(tk(a,u))return a;{const p=e<0?h:f,y=n[p];De(y!=null,`Previous layout not found for panel index ${p}`);const v=y+d,_=Ql({panelConstraints:r,panelIndex:p,size:v});if(u[p]=_,!xn(_,v)){let k=v-_,S=e<0?h:f;for(;S>=0&&S0?S--:S++}}}const m=u.reduce((p,y)=>y+p,0);return xn(m,100)?u:a}function nk({layout:e,panelsArray:n,pivotIndices:r}){let l=0,a=100,s=0,u=0;const f=r[0];De(f!=null,"No pivot index found"),n.forEach((p,y)=>{const{constraints:v}=p,{maxSize:_=100,minSize:k=0}=v;y===f?(l=k,a=_):(s+=k,u+=_)});const h=Math.min(a,100-s),d=Math.max(l,100-u),m=e[f];return{valueMax:h,valueMin:d,valueNow:m}}function zo(e,n=document){return Array.from(n.querySelectorAll(`[${yt.resizeHandleId}][data-panel-group-id="${e}"]`))}function Wb(e,n,r=document){const a=zo(e,r).findIndex(s=>s.getAttribute(yt.resizeHandleId)===n);return a??null}function ew(e,n,r){const l=Wb(e,n,r);return l!=null?[l,l+1]:[-1,-1]}function tw(e,n=document){var r;if(n instanceof HTMLElement&&(n==null||(r=n.dataset)===null||r===void 0?void 0:r.panelGroupId)==e)return n;const l=n.querySelector(`[data-panel-group][data-panel-group-id="${e}"]`);return l||null}function pc(e,n=document){const r=n.querySelector(`[${yt.resizeHandleId}="${e}"]`);return r||null}function rk(e,n,r,l=document){var a,s,u,f;const h=pc(n,l),d=zo(e,l),m=h?d.indexOf(h):-1,p=(a=(s=r[m])===null||s===void 0?void 0:s.id)!==null&&a!==void 0?a:null,y=(u=(f=r[m+1])===null||f===void 0?void 0:f.id)!==null&&u!==void 0?u:null;return[p,y]}function ik({committedValuesRef:e,eagerValuesRef:n,groupId:r,layout:l,panelDataArray:a,panelGroupElement:s,setLayout:u}){V.useRef({didWarnAboutMissingResizeHandle:!1}),Pi(()=>{if(!s)return;const f=zo(r,s);for(let h=0;h{f.forEach((h,d)=>{h.removeAttribute("aria-controls"),h.removeAttribute("aria-valuemax"),h.removeAttribute("aria-valuemin"),h.removeAttribute("aria-valuenow")})}},[r,l,a,s]),V.useEffect(()=>{if(!s)return;const f=n.current;De(f,"Eager values not found");const{panelDataArray:h}=f,d=tw(r,s);De(d!=null,`No group found for id "${r}"`);const m=zo(r,s);De(m,`No resize handles found for group id "${r}"`);const p=m.map(y=>{const v=y.getAttribute(yt.resizeHandleId);De(v,"Resize handle element has no handle id attribute");const[_,k]=rk(r,v,h,s);if(_==null||k==null)return()=>{};const w=S=>{if(!S.defaultPrevented)switch(S.key){case"Enter":{S.preventDefault();const T=h.findIndex(E=>E.id===_);if(T>=0){const E=h[T];De(E,`No panel data found for index ${T}`);const A=l[T],{collapsedSize:I=0,collapsible:z,minSize:R=0}=E.constraints;if(A!=null&&z){const D=xo({delta:xn(A,I)?R-I:I-A,initialLayout:l,panelConstraints:h.map(U=>U.constraints),pivotIndices:ew(r,v,s),prevLayout:l,trigger:"keyboard"});l!==D&&u(D)}}break}}};return y.addEventListener("keydown",w),()=>{y.removeEventListener("keydown",w)}});return()=>{p.forEach(y=>y())}},[s,e,n,r,l,a,u])}function Lx(e,n){if(e.length!==n.length)return!1;for(let r=0;rs.constraints);let l=0,a=100;for(let s=0;s{const s=e[a];De(s,`Panel data not found for index ${a}`);const{callbacks:u,constraints:f,id:h}=s,{collapsedSize:d=0,collapsible:m}=f,p=r[h];if(p==null||l!==p){r[h]=l;const{onCollapse:y,onExpand:v,onResize:_}=u;_&&_(l,p),m&&(y||v)&&(v&&(p==null||Tr(p,d))&&!Tr(l,d)&&v(),y&&(p==null||!Tr(p,d))&&Tr(l,d)&&y())}})}function Cu(e,n){if(e.length!==n.length)return!1;for(let r=0;r{r!==null&&clearTimeout(r),r=setTimeout(()=>{e(...a)},n)}}function Hx(e){try{if(typeof localStorage<"u")e.getItem=n=>localStorage.getItem(n),e.setItem=(n,r)=>{localStorage.setItem(n,r)};else throw new Error("localStorage not supported in this environment")}catch(n){console.error(n),e.getItem=()=>null,e.setItem=()=>{}}}function rw(e){return`react-resizable-panels:${e}`}function iw(e){return e.map(n=>{const{constraints:r,id:l,idIsFromProps:a,order:s}=n;return a?l:s?`${s}:${JSON.stringify(r)}`:JSON.stringify(r)}).sort((n,r)=>n.localeCompare(r)).join(",")}function lw(e,n){try{const r=rw(e),l=n.getItem(r);if(l){const a=JSON.parse(l);if(typeof a=="object"&&a!=null)return a}}catch{}return null}function ck(e,n,r){var l,a;const s=(l=lw(e,r))!==null&&l!==void 0?l:{},u=iw(n);return(a=s[u])!==null&&a!==void 0?a:null}function fk(e,n,r,l,a){var s;const u=rw(e),f=iw(n),h=(s=lw(e,a))!==null&&s!==void 0?s:{};h[f]={expandToSizes:Object.fromEntries(r.entries()),layout:l};try{a.setItem(u,JSON.stringify(h))}catch(d){console.error(d)}}function Bx({layout:e,panelConstraints:n}){const r=[...e],l=r.reduce((s,u)=>s+u,0);if(r.length!==n.length)throw Error(`Invalid ${n.length} panel layout: ${r.map(s=>`${s}%`).join(", ")}`);if(!xn(l,100)&&r.length>0)for(let s=0;s(Hx(vo),vo.getItem(e)),setItem:(e,n)=>{Hx(vo),vo.setItem(e,n)}},qx={};function aw({autoSaveId:e=null,children:n,className:r="",direction:l,forwardedRef:a,id:s=null,onLayout:u=null,keyboardResizeBy:f=null,storage:h=vo,style:d,tagName:m="div",...p}){const y=Jp(s),v=V.useRef(null),[_,k]=V.useState(null),[w,S]=V.useState([]),T=ek(),E=V.useRef({}),A=V.useRef(new Map),I=V.useRef(0),z=V.useRef({autoSaveId:e,direction:l,dragState:_,id:y,keyboardResizeBy:f,onLayout:u,storage:h}),R=V.useRef({layout:w,panelDataArray:[],panelDataArrayChanged:!1});V.useRef({didLogIdAndOrderWarning:!1,didLogPanelConstraintsWarning:!1,prevPanelIds:[]}),V.useImperativeHandle(a,()=>({getId:()=>z.current.id,getLayout:()=>{const{layout:N}=R.current;return N},setLayout:N=>{const{onLayout:G}=z.current,{layout:F,panelDataArray:J}=R.current,ne=Bx({layout:N,panelConstraints:J.map(re=>re.constraints)});Lx(F,ne)||(S(ne),R.current.layout=ne,G&&G(ne),Gl(J,ne,E.current))}}),[]),Pi(()=>{z.current.autoSaveId=e,z.current.direction=l,z.current.dragState=_,z.current.id=y,z.current.onLayout=u,z.current.storage=h}),ik({committedValuesRef:z,eagerValuesRef:R,groupId:y,layout:w,panelDataArray:R.current.panelDataArray,setLayout:S,panelGroupElement:v.current}),V.useEffect(()=>{const{panelDataArray:N}=R.current;if(e){if(w.length===0||w.length!==N.length)return;let G=qx[e];G==null&&(G=uk(fk,dk),qx[e]=G);const F=[...N],J=new Map(A.current);G(e,F,J,w,h)}},[e,w,h]),V.useEffect(()=>{});const D=V.useCallback(N=>{const{onLayout:G}=z.current,{layout:F,panelDataArray:J}=R.current;if(N.constraints.collapsible){const ne=J.map(be=>be.constraints),{collapsedSize:re=0,panelSize:se,pivotIndices:ye}=Bi(J,N,F);if(De(se!=null,`Panel size not found for panel "${N.id}"`),!Tr(se,re)){A.current.set(N.id,se);const xe=Xl(J,N)===J.length-1?se-re:re-se,pe=xo({delta:xe,initialLayout:F,panelConstraints:ne,pivotIndices:ye,prevLayout:F,trigger:"imperative-api"});Cu(F,pe)||(S(pe),R.current.layout=pe,G&&G(pe),Gl(J,pe,E.current))}}},[]),U=V.useCallback((N,G)=>{const{onLayout:F}=z.current,{layout:J,panelDataArray:ne}=R.current;if(N.constraints.collapsible){const re=ne.map(_e=>_e.constraints),{collapsedSize:se=0,panelSize:ye=0,minSize:be=0,pivotIndices:xe}=Bi(ne,N,J),pe=G??be;if(Tr(ye,se)){const _e=A.current.get(N.id),Me=_e!=null&&_e>=pe?_e:pe,st=Xl(ne,N)===ne.length-1?ye-Me:Me-ye,tt=xo({delta:st,initialLayout:J,panelConstraints:re,pivotIndices:xe,prevLayout:J,trigger:"imperative-api"});Cu(J,tt)||(S(tt),R.current.layout=tt,F&&F(tt),Gl(ne,tt,E.current))}}},[]),X=V.useCallback(N=>{const{layout:G,panelDataArray:F}=R.current,{panelSize:J}=Bi(F,N,G);return De(J!=null,`Panel size not found for panel "${N.id}"`),J},[]),B=V.useCallback((N,G)=>{const{panelDataArray:F}=R.current,J=Xl(F,N);return sk({defaultSize:G,dragState:_,layout:w,panelData:F,panelIndex:J})},[_,w]),q=V.useCallback(N=>{const{layout:G,panelDataArray:F}=R.current,{collapsedSize:J=0,collapsible:ne,panelSize:re}=Bi(F,N,G);return De(re!=null,`Panel size not found for panel "${N.id}"`),ne===!0&&Tr(re,J)},[]),ee=V.useCallback(N=>{const{layout:G,panelDataArray:F}=R.current,{collapsedSize:J=0,collapsible:ne,panelSize:re}=Bi(F,N,G);return De(re!=null,`Panel size not found for panel "${N.id}"`),!ne||Xi(re,J)>0},[]),L=V.useCallback(N=>{const{panelDataArray:G}=R.current;G.push(N),G.sort((F,J)=>{const ne=F.order,re=J.order;return ne==null&&re==null?0:ne==null?-1:re==null?1:ne-re}),R.current.panelDataArrayChanged=!0,T()},[T]);Pi(()=>{if(R.current.panelDataArrayChanged){R.current.panelDataArrayChanged=!1;const{autoSaveId:N,onLayout:G,storage:F}=z.current,{layout:J,panelDataArray:ne}=R.current;let re=null;if(N){const ye=ck(N,ne,F);ye&&(A.current=new Map(Object.entries(ye.expandToSizes)),re=ye.layout)}re==null&&(re=ok({panelDataArray:ne}));const se=Bx({layout:re,panelConstraints:ne.map(ye=>ye.constraints)});Lx(J,se)||(S(se),R.current.layout=se,G&&G(se),Gl(ne,se,E.current))}}),Pi(()=>{const N=R.current;return()=>{N.layout=[]}},[]);const $=V.useCallback(N=>{let G=!1;const F=v.current;return F&&window.getComputedStyle(F,null).getPropertyValue("direction")==="rtl"&&(G=!0),function(ne){ne.preventDefault();const re=v.current;if(!re)return()=>null;const{direction:se,dragState:ye,id:be,keyboardResizeBy:xe,onLayout:pe}=z.current,{layout:_e,panelDataArray:Me}=R.current,{initialLayout:Ce}=ye??{},st=ew(be,N,re);let tt=ak(ne,N,se,ye,xe,re);const zt=se==="horizontal";zt&&G&&(tt=-tt);const Vt=Me.map(jn=>jn.constraints),Lt=xo({delta:tt,initialLayout:Ce??_e,panelConstraints:Vt,pivotIndices:st,prevLayout:_e,trigger:Pb(ne)?"keyboard":"mouse-or-touch"}),Sn=!Cu(_e,Lt);($b(ne)||Yb(ne))&&I.current!=tt&&(I.current=tt,!Sn&&tt!==0?zt?Jd(N,tt<0?Fb:Qb):Jd(N,tt<0?Zb:Kb):Jd(N,0)),Sn&&(S(Lt),R.current.layout=Lt,pe&&pe(Lt),Gl(Me,Lt,E.current))}},[]),M=V.useCallback((N,G)=>{const{onLayout:F}=z.current,{layout:J,panelDataArray:ne}=R.current,re=ne.map(_e=>_e.constraints),{panelSize:se,pivotIndices:ye}=Bi(ne,N,J);De(se!=null,`Panel size not found for panel "${N.id}"`);const xe=Xl(ne,N)===ne.length-1?se-G:G-se,pe=xo({delta:xe,initialLayout:J,panelConstraints:re,pivotIndices:ye,prevLayout:J,trigger:"imperative-api"});Cu(J,pe)||(S(pe),R.current.layout=pe,F&&F(pe),Gl(ne,pe,E.current))},[]),P=V.useCallback((N,G)=>{const{layout:F,panelDataArray:J}=R.current,{collapsedSize:ne=0,collapsible:re}=G,{collapsedSize:se=0,collapsible:ye,maxSize:be=100,minSize:xe=0}=N.constraints,{panelSize:pe}=Bi(J,N,F);pe!=null&&(re&&ye&&Tr(pe,ne)?Tr(ne,se)||M(N,se):pebe&&M(N,be))},[M]),Q=V.useCallback((N,G)=>{const{direction:F}=z.current,{layout:J}=R.current;if(!v.current)return;const ne=pc(N,v.current);De(ne,`Drag handle element not found for id "${N}"`);const re=nw(F,G);k({dragHandleId:N,dragHandleRect:ne.getBoundingClientRect(),initialCursorPosition:re,initialLayout:J})},[]),K=V.useCallback(()=>{k(null)},[]),j=V.useCallback(N=>{const{panelDataArray:G}=R.current,F=Xl(G,N);F>=0&&(G.splice(F,1),delete E.current[N.id],R.current.panelDataArrayChanged=!0,T())},[T]),H=V.useMemo(()=>({collapsePanel:D,direction:l,dragState:_,expandPanel:U,getPanelSize:X,getPanelStyle:B,groupId:y,isPanelCollapsed:q,isPanelExpanded:ee,reevaluatePanelConstraints:P,registerPanel:L,registerResizeHandle:$,resizePanel:M,startDragging:Q,stopDragging:K,unregisterPanel:j,panelGroupElement:v.current}),[D,_,l,U,X,B,y,q,ee,P,L,$,M,Q,K,j]),Y={display:"flex",flexDirection:l==="horizontal"?"row":"column",height:"100%",overflow:"hidden",width:"100%"};return V.createElement(fc.Provider,{value:H},V.createElement(m,{...p,children:n,className:r,id:s,ref:v,style:{...Y,...d},[yt.group]:"",[yt.groupDirection]:l,[yt.groupId]:y}))}const Sp=V.forwardRef((e,n)=>V.createElement(aw,{...e,forwardedRef:n}));aw.displayName="PanelGroup";Sp.displayName="forwardRef(PanelGroup)";function Xl(e,n){return e.findIndex(r=>r===n||r.id===n.id)}function Bi(e,n,r){const l=Xl(e,n),s=l===e.length-1?[l-1,l]:[l,l+1],u=r[l];return{...n.constraints,panelSize:u,pivotIndices:s}}function hk({disabled:e,handleId:n,resizeHandler:r,panelGroupElement:l}){V.useEffect(()=>{if(e||r==null||l==null)return;const a=pc(n,l);if(a==null)return;const s=u=>{if(!u.defaultPrevented)switch(u.key){case"ArrowDown":case"ArrowLeft":case"ArrowRight":case"ArrowUp":case"End":case"Home":{u.preventDefault(),r(u);break}case"F6":{u.preventDefault();const f=a.getAttribute(yt.groupId);De(f,`No group element found for id "${f}"`);const h=zo(f,l),d=Wb(f,n,l);De(d!==null,`No resize element found for id "${n}"`);const m=u.shiftKey?d>0?d-1:h.length-1:d+1{a.removeEventListener("keydown",s)}},[l,e,n,r])}function _p({children:e=null,className:n="",disabled:r=!1,hitAreaMargins:l,id:a,onBlur:s,onClick:u,onDragging:f,onFocus:h,onPointerDown:d,onPointerUp:m,style:p={},tabIndex:y=0,tagName:v="div",..._}){var k,w;const S=V.useRef(null),T=V.useRef({onClick:u,onDragging:f,onPointerDown:d,onPointerUp:m});V.useEffect(()=>{T.current.onClick=u,T.current.onDragging=f,T.current.onPointerDown=d,T.current.onPointerUp=m});const E=V.useContext(fc);if(E===null)throw Error("PanelResizeHandle components must be rendered within a PanelGroup container");const{direction:A,groupId:I,registerResizeHandle:z,startDragging:R,stopDragging:D,panelGroupElement:U}=E,X=Jp(a),[B,q]=V.useState("inactive"),[ee,L]=V.useState(!1),[$,M]=V.useState(null),P=V.useRef({state:B});Pi(()=>{P.current.state=B}),V.useEffect(()=>{if(r)M(null);else{const H=z(X);M(()=>H)}},[r,X,z]);const Q=(k=l==null?void 0:l.coarse)!==null&&k!==void 0?k:15,K=(w=l==null?void 0:l.fine)!==null&&w!==void 0?w:5;V.useEffect(()=>{if(r||$==null)return;const H=S.current;De(H,"Element ref not attached");let Y=!1;return JN(X,H,A,{coarse:Q,fine:K},(G,F,J)=>{if(!F){q("inactive");return}switch(G){case"down":{q("drag"),Y=!1,De(J,'Expected event to be defined for "down" action'),R(X,J);const{onDragging:ne,onPointerDown:re}=T.current;ne==null||ne(!0),re==null||re();break}case"move":{const{state:ne}=P.current;Y=!0,ne!=="drag"&&q("hover"),De(J,'Expected event to be defined for "move" action'),$(J);break}case"up":{q("hover"),D();const{onClick:ne,onDragging:re,onPointerUp:se}=T.current;re==null||re(!1),se==null||se(),Y||ne==null||ne();break}}})},[Q,A,r,K,z,X,$,R,D]),hk({disabled:r,handleId:X,resizeHandler:$,panelGroupElement:U});const j={touchAction:"none",userSelect:"none"};return V.createElement(v,{..._,children:e,className:n,id:a,onBlur:()=>{L(!1),s==null||s()},onFocus:()=>{L(!0),h==null||h()},ref:S,role:"separator",style:{...j,...p},tabIndex:y,[yt.groupDirection]:A,[yt.groupId]:I,[yt.resizeHandle]:"",[yt.resizeHandleActive]:B==="drag"?"pointer":ee?"keyboard":void 0,[yt.resizeHandleEnabled]:!r,[yt.resizeHandleId]:X,[yt.resizeHandleState]:B})}_p.displayName="PanelResizeHandle";function At(e){if(typeof e=="string"||typeof e=="number")return""+e;let n="";if(Array.isArray(e))for(let r=0,l;r{}};function mc(){for(var e=0,n=arguments.length,r={},l;e=0&&(l=r.slice(a+1),r=r.slice(0,a)),r&&!n.hasOwnProperty(r))throw new Error("unknown type: "+r);return{type:r,name:l}})}Vu.prototype=mc.prototype={constructor:Vu,on:function(e,n){var r=this._,l=mk(e+"",r),a,s=-1,u=l.length;if(arguments.length<2){for(;++s0)for(var r=new Array(a),l=0,a,s;l=0&&(n=e.slice(0,r))!=="xmlns"&&(e=e.slice(r+1)),Ix.hasOwnProperty(n)?{space:Ix[n],local:e}:e}function yk(e){return function(){var n=this.ownerDocument,r=this.namespaceURI;return r===Ep&&n.documentElement.namespaceURI===Ep?n.createElement(e):n.createElementNS(r,e)}}function xk(e){return function(){return this.ownerDocument.createElementNS(e.space,e.local)}}function ow(e){var n=gc(e);return(n.local?xk:yk)(n)}function vk(){}function tm(e){return e==null?vk:function(){return this.querySelector(e)}}function bk(e){typeof e!="function"&&(e=tm(e));for(var n=this._groups,r=n.length,l=new Array(r),a=0;a=E&&(E=T+1);!(I=w[E])&&++E<_;);A._next=I||null}}return u=new wn(u,l),u._enter=f,u._exit=h,u}function Uk(e){return typeof e=="object"&&"length"in e?e:Array.from(e)}function Ik(){return new wn(this._exit||this._groups.map(fw),this._parents)}function Vk(e,n,r){var l=this.enter(),a=this,s=this.exit();return typeof e=="function"?(l=e(l),l&&(l=l.selection())):l=l.append(e+""),n!=null&&(a=n(a),a&&(a=a.selection())),r==null?s.remove():r(s),l&&a?l.merge(a).order():a}function Gk(e){for(var n=e.selection?e.selection():e,r=this._groups,l=n._groups,a=r.length,s=l.length,u=Math.min(a,s),f=new Array(a),h=0;h=0;)(u=l[a])&&(s&&u.compareDocumentPosition(s)^4&&s.parentNode.insertBefore(u,s),s=u);return this}function $k(e){e||(e=Yk);function n(p,y){return p&&y?e(p.__data__,y.__data__):!p-!y}for(var r=this._groups,l=r.length,a=new Array(l),s=0;sn?1:e>=n?0:NaN}function Xk(){var e=arguments[0];return arguments[0]=this,e.apply(null,arguments),this}function Fk(){return Array.from(this)}function Qk(){for(var e=this._groups,n=0,r=e.length;n1?this.each((n==null?aC:typeof n=="function"?sC:oC)(e,n,r??"")):ia(this.node(),e)}function ia(e,n){return e.style.getPropertyValue(n)||dw(e).getComputedStyle(e,null).getPropertyValue(n)}function cC(e){return function(){delete this[e]}}function fC(e,n){return function(){this[e]=n}}function dC(e,n){return function(){var r=n.apply(this,arguments);r==null?delete this[e]:this[e]=r}}function hC(e,n){return arguments.length>1?this.each((n==null?cC:typeof n=="function"?dC:fC)(e,n)):this.node()[e]}function hw(e){return e.trim().split(/^|\s+/)}function nm(e){return e.classList||new pw(e)}function pw(e){this._node=e,this._names=hw(e.getAttribute("class")||"")}pw.prototype={add:function(e){var n=this._names.indexOf(e);n<0&&(this._names.push(e),this._node.setAttribute("class",this._names.join(" ")))},remove:function(e){var n=this._names.indexOf(e);n>=0&&(this._names.splice(n,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(e){return this._names.indexOf(e)>=0}};function mw(e,n){for(var r=nm(e),l=-1,a=n.length;++l=0&&(r=n.slice(l+1),n=n.slice(0,l)),{type:n,name:r}})}function IC(e){return function(){var n=this.__on;if(n){for(var r=0,l=-1,a=n.length,s;r()=>e;function Np(e,{sourceEvent:n,subject:r,target:l,identifier:a,active:s,x:u,y:f,dx:h,dy:d,dispatch:m}){Object.defineProperties(this,{type:{value:e,enumerable:!0,configurable:!0},sourceEvent:{value:n,enumerable:!0,configurable:!0},subject:{value:r,enumerable:!0,configurable:!0},target:{value:l,enumerable:!0,configurable:!0},identifier:{value:a,enumerable:!0,configurable:!0},active:{value:s,enumerable:!0,configurable:!0},x:{value:u,enumerable:!0,configurable:!0},y:{value:f,enumerable:!0,configurable:!0},dx:{value:h,enumerable:!0,configurable:!0},dy:{value:d,enumerable:!0,configurable:!0},_:{value:m}})}Np.prototype.on=function(){var e=this._.on.apply(this._,arguments);return e===this._?this:e};function KC(e){return!e.ctrlKey&&!e.button}function JC(){return this.parentNode}function WC(e,n){return n??{x:e.x,y:e.y}}function e3(){return navigator.maxTouchPoints||"ontouchstart"in this}function ww(){var e=KC,n=JC,r=WC,l=e3,a={},s=mc("start","drag","end"),u=0,f,h,d,m,p=0;function y(A){A.on("mousedown.drag",v).filter(l).on("touchstart.drag",w).on("touchmove.drag",S,ZC).on("touchend.drag touchcancel.drag",T).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function v(A,I){if(!(m||!e.call(this,A,I))){var z=E(this,n.call(this,A,I),A,I,"mouse");z&&(vn(A.view).on("mousemove.drag",_,Mo).on("mouseup.drag",k,Mo),vw(A.view),eh(A),d=!1,f=A.clientX,h=A.clientY,z("start",A))}}function _(A){if(ea(A),!d){var I=A.clientX-f,z=A.clientY-h;d=I*I+z*z>p}a.mouse("drag",A)}function k(A){vn(A.view).on("mousemove.drag mouseup.drag",null),bw(A.view,d),ea(A),a.mouse("end",A)}function w(A,I){if(e.call(this,A,I)){var z=A.changedTouches,R=n.call(this,A,I),D=z.length,U,X;for(U=0;U>8&15|n>>4&240,n>>4&15|n&240,(n&15)<<4|n&15,1):r===8?Au(n>>24&255,n>>16&255,n>>8&255,(n&255)/255):r===4?Au(n>>12&15|n>>8&240,n>>8&15|n>>4&240,n>>4&15|n&240,((n&15)<<4|n&15)/255):null):(n=n3.exec(e))?new an(n[1],n[2],n[3],1):(n=r3.exec(e))?new an(n[1]*255/100,n[2]*255/100,n[3]*255/100,1):(n=i3.exec(e))?Au(n[1],n[2],n[3],n[4]):(n=l3.exec(e))?Au(n[1]*255/100,n[2]*255/100,n[3]*255/100,n[4]):(n=a3.exec(e))?Fx(n[1],n[2]/100,n[3]/100,1):(n=o3.exec(e))?Fx(n[1],n[2]/100,n[3]/100,n[4]):Vx.hasOwnProperty(e)?$x(Vx[e]):e==="transparent"?new an(NaN,NaN,NaN,0):null}function $x(e){return new an(e>>16&255,e>>8&255,e&255,1)}function Au(e,n,r,l){return l<=0&&(e=n=r=NaN),new an(e,n,r,l)}function c3(e){return e instanceof $o||(e=Fi(e)),e?(e=e.rgb(),new an(e.r,e.g,e.b,e.opacity)):new an}function kp(e,n,r,l){return arguments.length===1?c3(e):new an(e,n,r,l??1)}function an(e,n,r,l){this.r=+e,this.g=+n,this.b=+r,this.opacity=+l}rm(an,kp,Sw($o,{brighter(e){return e=e==null?Ju:Math.pow(Ju,e),new an(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){return e=e==null?jo:Math.pow(jo,e),new an(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new an($i(this.r),$i(this.g),$i(this.b),Wu(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:Yx,formatHex:Yx,formatHex8:f3,formatRgb:Xx,toString:Xx}));function Yx(){return`#${Vi(this.r)}${Vi(this.g)}${Vi(this.b)}`}function f3(){return`#${Vi(this.r)}${Vi(this.g)}${Vi(this.b)}${Vi((isNaN(this.opacity)?1:this.opacity)*255)}`}function Xx(){const e=Wu(this.opacity);return`${e===1?"rgb(":"rgba("}${$i(this.r)}, ${$i(this.g)}, ${$i(this.b)}${e===1?")":`, ${e})`}`}function Wu(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function $i(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function Vi(e){return e=$i(e),(e<16?"0":"")+e.toString(16)}function Fx(e,n,r,l){return l<=0?e=n=r=NaN:r<=0||r>=1?e=n=NaN:n<=0&&(e=NaN),new Un(e,n,r,l)}function _w(e){if(e instanceof Un)return new Un(e.h,e.s,e.l,e.opacity);if(e instanceof $o||(e=Fi(e)),!e)return new Un;if(e instanceof Un)return e;e=e.rgb();var n=e.r/255,r=e.g/255,l=e.b/255,a=Math.min(n,r,l),s=Math.max(n,r,l),u=NaN,f=s-a,h=(s+a)/2;return f?(n===s?u=(r-l)/f+(r0&&h<1?0:u,new Un(u,f,h,e.opacity)}function d3(e,n,r,l){return arguments.length===1?_w(e):new Un(e,n,r,l??1)}function Un(e,n,r,l){this.h=+e,this.s=+n,this.l=+r,this.opacity=+l}rm(Un,d3,Sw($o,{brighter(e){return e=e==null?Ju:Math.pow(Ju,e),new Un(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=e==null?jo:Math.pow(jo,e),new Un(this.h,this.s,this.l*e,this.opacity)},rgb(){var e=this.h%360+(this.h<0)*360,n=isNaN(e)||isNaN(this.s)?0:this.s,r=this.l,l=r+(r<.5?r:1-r)*n,a=2*r-l;return new an(th(e>=240?e-240:e+120,a,l),th(e,a,l),th(e<120?e+240:e-120,a,l),this.opacity)},clamp(){return new Un(Qx(this.h),zu(this.s),zu(this.l),Wu(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 e=Wu(this.opacity);return`${e===1?"hsl(":"hsla("}${Qx(this.h)}, ${zu(this.s)*100}%, ${zu(this.l)*100}%${e===1?")":`, ${e})`}`}}));function Qx(e){return e=(e||0)%360,e<0?e+360:e}function zu(e){return Math.max(0,Math.min(1,e||0))}function th(e,n,r){return(e<60?n+(r-n)*e/60:e<180?r:e<240?n+(r-n)*(240-e)/60:n)*255}const im=e=>()=>e;function h3(e,n){return function(r){return e+r*n}}function p3(e,n,r){return e=Math.pow(e,r),n=Math.pow(n,r)-e,r=1/r,function(l){return Math.pow(e+l*n,r)}}function m3(e){return(e=+e)==1?Ew:function(n,r){return r-n?p3(n,r,e):im(isNaN(n)?r:n)}}function Ew(e,n){var r=n-e;return r?h3(e,r):im(isNaN(e)?n:e)}const ec=(function e(n){var r=m3(n);function l(a,s){var u=r((a=kp(a)).r,(s=kp(s)).r),f=r(a.g,s.g),h=r(a.b,s.b),d=Ew(a.opacity,s.opacity);return function(m){return a.r=u(m),a.g=f(m),a.b=h(m),a.opacity=d(m),a+""}}return l.gamma=e,l})(1);function g3(e,n){n||(n=[]);var r=e?Math.min(n.length,e.length):0,l=n.slice(),a;return function(s){for(a=0;ar&&(s=n.slice(r,s),f[u]?f[u]+=s:f[++u]=s),(l=l[0])===(a=a[0])?f[u]?f[u]+=a:f[++u]=a:(f[++u]=null,h.push({i:u,x:er(l,a)})),r=nh.lastIndex;return r180?m+=360:m-d>180&&(d+=360),y.push({i:p.push(a(p)+"rotate(",null,l)-2,x:er(d,m)})):m&&p.push(a(p)+"rotate("+m+l)}function f(d,m,p,y){d!==m?y.push({i:p.push(a(p)+"skewX(",null,l)-2,x:er(d,m)}):m&&p.push(a(p)+"skewX("+m+l)}function h(d,m,p,y,v,_){if(d!==p||m!==y){var k=v.push(a(v)+"scale(",null,",",null,")");_.push({i:k-4,x:er(d,p)},{i:k-2,x:er(m,y)})}else(p!==1||y!==1)&&v.push(a(v)+"scale("+p+","+y+")")}return function(d,m){var p=[],y=[];return d=e(d),m=e(m),s(d.translateX,d.translateY,m.translateX,m.translateY,p,y),u(d.rotate,m.rotate,p,y),f(d.skewX,m.skewX,p,y),h(d.scaleX,d.scaleY,m.scaleX,m.scaleY,p,y),d=m=null,function(v){for(var _=-1,k=y.length,w;++_=0&&e._call.call(void 0,n),e=e._next;--la}function Jx(){Qi=(nc=Do.now())+yc,la=bo=0;try{M3()}finally{la=0,O3(),Qi=0}}function j3(){var e=Do.now(),n=e-nc;n>Tw&&(yc-=n,nc=e)}function O3(){for(var e,n=tc,r,l=1/0;n;)n._call?(l>n._time&&(l=n._time),e=n,n=n._next):(r=n._next,n._next=null,n=e?e._next=r:tc=r);wo=e,Ap(l)}function Ap(e){if(!la){bo&&(bo=clearTimeout(bo));var n=e-Qi;n>24?(e<1/0&&(bo=setTimeout(Jx,e-Do.now()-yc)),co&&(co=clearInterval(co))):(co||(nc=Do.now(),co=setInterval(j3,Tw)),la=1,Aw(Jx))}}function Wx(e,n,r){var l=new rc;return n=n==null?0:+n,l.restart(a=>{l.stop(),e(a+n)},n,r),l}var D3=mc("start","end","cancel","interrupt"),R3=[],Mw=0,ev=1,zp=2,Pu=3,tv=4,Mp=5,$u=6;function xc(e,n,r,l,a,s){var u=e.__transition;if(!u)e.__transition={};else if(r in u)return;L3(e,r,{name:n,index:l,group:a,on:D3,tween:R3,time:s.time,delay:s.delay,duration:s.duration,ease:s.ease,timer:null,state:Mw})}function am(e,n){var r=Yn(e,n);if(r.state>Mw)throw new Error("too late; already scheduled");return r}function lr(e,n){var r=Yn(e,n);if(r.state>Pu)throw new Error("too late; already running");return r}function Yn(e,n){var r=e.__transition;if(!r||!(r=r[n]))throw new Error("transition not found");return r}function L3(e,n,r){var l=e.__transition,a;l[n]=r,r.timer=zw(s,0,r.time);function s(d){r.state=ev,r.timer.restart(u,r.delay,r.time),r.delay<=d&&u(d-r.delay)}function u(d){var m,p,y,v;if(r.state!==ev)return h();for(m in l)if(v=l[m],v.name===r.name){if(v.state===Pu)return Wx(u);v.state===tv?(v.state=$u,v.timer.stop(),v.on.call("interrupt",e,e.__data__,v.index,v.group),delete l[m]):+mzp&&l.state=0&&(n=n.slice(0,r)),!n||n==="start"})}function dT(e,n,r){var l,a,s=fT(n)?am:lr;return function(){var u=s(this,e),f=u.on;f!==l&&(a=(l=f).copy()).on(n,r),u.on=a}}function hT(e,n){var r=this._id;return arguments.length<2?Yn(this.node(),r).on.on(e):this.each(dT(r,e,n))}function pT(e){return function(){var n=this.parentNode;for(var r in this.__transition)if(+r!==e)return;n&&n.removeChild(this)}}function mT(){return this.on("end.remove",pT(this._id))}function gT(e){var n=this._name,r=this._id;typeof e!="function"&&(e=tm(e));for(var l=this._groups,a=l.length,s=new Array(a),u=0;u()=>e;function IT(e,{sourceEvent:n,target:r,transform:l,dispatch:a}){Object.defineProperties(this,{type:{value:e,enumerable:!0,configurable:!0},sourceEvent:{value:n,enumerable:!0,configurable:!0},target:{value:r,enumerable:!0,configurable:!0},transform:{value:l,enumerable:!0,configurable:!0},_:{value:a}})}function Ar(e,n,r){this.k=e,this.x=n,this.y=r}Ar.prototype={constructor:Ar,scale:function(e){return e===1?this:new Ar(this.k*e,this.x,this.y)},translate:function(e,n){return e===0&n===0?this:new Ar(this.k,this.x+this.k*e,this.y+this.k*n)},apply:function(e){return[e[0]*this.k+this.x,e[1]*this.k+this.y]},applyX:function(e){return e*this.k+this.x},applyY:function(e){return e*this.k+this.y},invert:function(e){return[(e[0]-this.x)/this.k,(e[1]-this.y)/this.k]},invertX:function(e){return(e-this.x)/this.k},invertY:function(e){return(e-this.y)/this.k},rescaleX:function(e){return e.copy().domain(e.range().map(this.invertX,this).map(e.invert,e))},rescaleY:function(e){return e.copy().domain(e.range().map(this.invertY,this).map(e.invert,e))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}};var vc=new Ar(1,0,0);Rw.prototype=Ar.prototype;function Rw(e){for(;!e.__zoom;)if(!(e=e.parentNode))return vc;return e.__zoom}function rh(e){e.stopImmediatePropagation()}function fo(e){e.preventDefault(),e.stopImmediatePropagation()}function VT(e){return(!e.ctrlKey||e.type==="wheel")&&!e.button}function GT(){var e=this;return e instanceof SVGElement?(e=e.ownerSVGElement||e,e.hasAttribute("viewBox")?(e=e.viewBox.baseVal,[[e.x,e.y],[e.x+e.width,e.y+e.height]]):[[0,0],[e.width.baseVal.value,e.height.baseVal.value]]):[[0,0],[e.clientWidth,e.clientHeight]]}function nv(){return this.__zoom||vc}function PT(e){return-e.deltaY*(e.deltaMode===1?.05:e.deltaMode?1:.002)*(e.ctrlKey?10:1)}function $T(){return navigator.maxTouchPoints||"ontouchstart"in this}function YT(e,n,r){var l=e.invertX(n[0][0])-r[0][0],a=e.invertX(n[1][0])-r[1][0],s=e.invertY(n[0][1])-r[0][1],u=e.invertY(n[1][1])-r[1][1];return e.translate(a>l?(l+a)/2:Math.min(0,l)||Math.max(0,a),u>s?(s+u)/2:Math.min(0,s)||Math.max(0,u))}function Lw(){var e=VT,n=GT,r=YT,l=PT,a=$T,s=[0,1/0],u=[[-1/0,-1/0],[1/0,1/0]],f=250,h=Gu,d=mc("start","zoom","end"),m,p,y,v=500,_=150,k=0,w=10;function S(L){L.property("__zoom",nv).on("wheel.zoom",D,{passive:!1}).on("mousedown.zoom",U).on("dblclick.zoom",X).filter(a).on("touchstart.zoom",B).on("touchmove.zoom",q).on("touchend.zoom touchcancel.zoom",ee).style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}S.transform=function(L,$,M,P){var Q=L.selection?L.selection():L;Q.property("__zoom",nv),L!==Q?I(L,$,M,P):Q.interrupt().each(function(){z(this,arguments).event(P).start().zoom(null,typeof $=="function"?$.apply(this,arguments):$).end()})},S.scaleBy=function(L,$,M,P){S.scaleTo(L,function(){var Q=this.__zoom.k,K=typeof $=="function"?$.apply(this,arguments):$;return Q*K},M,P)},S.scaleTo=function(L,$,M,P){S.transform(L,function(){var Q=n.apply(this,arguments),K=this.__zoom,j=M==null?A(Q):typeof M=="function"?M.apply(this,arguments):M,H=K.invert(j),Y=typeof $=="function"?$.apply(this,arguments):$;return r(E(T(K,Y),j,H),Q,u)},M,P)},S.translateBy=function(L,$,M,P){S.transform(L,function(){return r(this.__zoom.translate(typeof $=="function"?$.apply(this,arguments):$,typeof M=="function"?M.apply(this,arguments):M),n.apply(this,arguments),u)},null,P)},S.translateTo=function(L,$,M,P,Q){S.transform(L,function(){var K=n.apply(this,arguments),j=this.__zoom,H=P==null?A(K):typeof P=="function"?P.apply(this,arguments):P;return r(vc.translate(H[0],H[1]).scale(j.k).translate(typeof $=="function"?-$.apply(this,arguments):-$,typeof M=="function"?-M.apply(this,arguments):-M),K,u)},P,Q)};function T(L,$){return $=Math.max(s[0],Math.min(s[1],$)),$===L.k?L:new Ar($,L.x,L.y)}function E(L,$,M){var P=$[0]-M[0]*L.k,Q=$[1]-M[1]*L.k;return P===L.x&&Q===L.y?L:new Ar(L.k,P,Q)}function A(L){return[(+L[0][0]+ +L[1][0])/2,(+L[0][1]+ +L[1][1])/2]}function I(L,$,M,P){L.on("start.zoom",function(){z(this,arguments).event(P).start()}).on("interrupt.zoom end.zoom",function(){z(this,arguments).event(P).end()}).tween("zoom",function(){var Q=this,K=arguments,j=z(Q,K).event(P),H=n.apply(Q,K),Y=M==null?A(H):typeof M=="function"?M.apply(Q,K):M,N=Math.max(H[1][0]-H[0][0],H[1][1]-H[0][1]),G=Q.__zoom,F=typeof $=="function"?$.apply(Q,K):$,J=h(G.invert(Y).concat(N/G.k),F.invert(Y).concat(N/F.k));return function(ne){if(ne===1)ne=F;else{var re=J(ne),se=N/re[2];ne=new Ar(se,Y[0]-re[0]*se,Y[1]-re[1]*se)}j.zoom(null,ne)}})}function z(L,$,M){return!M&&L.__zooming||new R(L,$)}function R(L,$){this.that=L,this.args=$,this.active=0,this.sourceEvent=null,this.extent=n.apply(L,$),this.taps=0}R.prototype={event:function(L){return L&&(this.sourceEvent=L),this},start:function(){return++this.active===1&&(this.that.__zooming=this,this.emit("start")),this},zoom:function(L,$){return this.mouse&&L!=="mouse"&&(this.mouse[1]=$.invert(this.mouse[0])),this.touch0&&L!=="touch"&&(this.touch0[1]=$.invert(this.touch0[0])),this.touch1&&L!=="touch"&&(this.touch1[1]=$.invert(this.touch1[0])),this.that.__zoom=$,this.emit("zoom"),this},end:function(){return--this.active===0&&(delete this.that.__zooming,this.emit("end")),this},emit:function(L){var $=vn(this.that).datum();d.call(L,this.that,new IT(L,{sourceEvent:this.sourceEvent,target:S,transform:this.that.__zoom,dispatch:d}),$)}};function D(L,...$){if(!e.apply(this,arguments))return;var M=z(this,$).event(L),P=this.__zoom,Q=Math.max(s[0],Math.min(s[1],P.k*Math.pow(2,l.apply(this,arguments)))),K=qn(L);if(M.wheel)(M.mouse[0][0]!==K[0]||M.mouse[0][1]!==K[1])&&(M.mouse[1]=P.invert(M.mouse[0]=K)),clearTimeout(M.wheel);else{if(P.k===Q)return;M.mouse=[K,P.invert(K)],Yu(this),M.start()}fo(L),M.wheel=setTimeout(j,_),M.zoom("mouse",r(E(T(P,Q),M.mouse[0],M.mouse[1]),M.extent,u));function j(){M.wheel=null,M.end()}}function U(L,...$){if(y||!e.apply(this,arguments))return;var M=L.currentTarget,P=z(this,$,!0).event(L),Q=vn(L.view).on("mousemove.zoom",Y,!0).on("mouseup.zoom",N,!0),K=qn(L,M),j=L.clientX,H=L.clientY;vw(L.view),rh(L),P.mouse=[K,this.__zoom.invert(K)],Yu(this),P.start();function Y(G){if(fo(G),!P.moved){var F=G.clientX-j,J=G.clientY-H;P.moved=F*F+J*J>k}P.event(G).zoom("mouse",r(E(P.that.__zoom,P.mouse[0]=qn(G,M),P.mouse[1]),P.extent,u))}function N(G){Q.on("mousemove.zoom mouseup.zoom",null),bw(G.view,P.moved),fo(G),P.event(G).end()}}function X(L,...$){if(e.apply(this,arguments)){var M=this.__zoom,P=qn(L.changedTouches?L.changedTouches[0]:L,this),Q=M.invert(P),K=M.k*(L.shiftKey?.5:2),j=r(E(T(M,K),P,Q),n.apply(this,$),u);fo(L),f>0?vn(this).transition().duration(f).call(I,j,P,L):vn(this).call(S.transform,j,P,L)}}function B(L,...$){if(e.apply(this,arguments)){var M=L.touches,P=M.length,Q=z(this,$,L.changedTouches.length===P).event(L),K,j,H,Y;for(rh(L),j=0;j"[React Flow]: Seems like you have not used zustand provider as an ancestor. Help: https://reactflow.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:e=>`Node type "${e}" not found. Using fallback type "default".`,error004:()=>"The React Flow 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:e=>`The old edge with id=${e} does not exist.`,error009:e=>`Marker type "${e}" doesn't exist.`,error008:(e,{id:n,sourceHandle:r,targetHandle:l})=>`Couldn't create edge for ${e} handle id: "${e==="source"?r:l}", edge id: ${n}.`,error010:()=>"Handle: No node id found. Make sure to only use a Handle inside a custom Node.",error011:e=>`Edge type "${e}" not found. Using fallback type "default".`,error012:e=>`Node with id "${e}" does not exist, it may have been removed. This can happen when a node is deleted before the "onNodeClick" handler is called.`,error013:(e="react")=>`It seems that you haven't loaded the styles. Please import '@xyflow/${e}/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."},Ro=[[Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY],[Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY]],Hw=["Enter"," ","Escape"],Bw={"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:e,x:n,y:r})=>`Moved selected node ${e}. New position, x: ${n}, y: ${r}`,"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 aa;(function(e){e.Strict="strict",e.Loose="loose"})(aa||(aa={}));var Yi;(function(e){e.Free="free",e.Vertical="vertical",e.Horizontal="horizontal"})(Yi||(Yi={}));var Lo;(function(e){e.Partial="partial",e.Full="full"})(Lo||(Lo={}));const qw={inProgress:!1,isValid:null,from:null,fromHandle:null,fromPosition:null,fromNode:null,to:null,toHandle:null,toPosition:null,toNode:null,pointer:null};var pi;(function(e){e.Bezier="default",e.Straight="straight",e.Step="step",e.SmoothStep="smoothstep",e.SimpleBezier="simplebezier"})(pi||(pi={}));var ic;(function(e){e.Arrow="arrow",e.ArrowClosed="arrowclosed"})(ic||(ic={}));var ve;(function(e){e.Left="left",e.Top="top",e.Right="right",e.Bottom="bottom"})(ve||(ve={}));const rv={[ve.Left]:ve.Right,[ve.Right]:ve.Left,[ve.Top]:ve.Bottom,[ve.Bottom]:ve.Top};function Uw(e){return e===null?null:e?"valid":"invalid"}const Iw=e=>"id"in e&&"source"in e&&"target"in e,XT=e=>"id"in e&&"position"in e&&!("source"in e)&&!("target"in e),sm=e=>"id"in e&&"internals"in e&&!("source"in e)&&!("target"in e),Yo=(e,n=[0,0])=>{const{width:r,height:l}=Or(e),a=e.origin??n,s=r*a[0],u=l*a[1];return{x:e.position.x-s,y:e.position.y-u}},FT=(e,n={nodeOrigin:[0,0]})=>{if(e.length===0)return{x:0,y:0,width:0,height:0};const r=e.reduce((l,a)=>{const s=typeof a=="string";let u=!n.nodeLookup&&!s?a:void 0;n.nodeLookup&&(u=s?n.nodeLookup.get(a):sm(a)?a:n.nodeLookup.get(a.id));const f=u?lc(u,n.nodeOrigin):{x:0,y:0,x2:0,y2:0};return bc(l,f)},{x:1/0,y:1/0,x2:-1/0,y2:-1/0});return wc(r)},Xo=(e,n={})=>{let r={x:1/0,y:1/0,x2:-1/0,y2:-1/0},l=!1;return e.forEach(a=>{(n.filter===void 0||n.filter(a))&&(r=bc(r,lc(a)),l=!0)}),l?wc(r):{x:0,y:0,width:0,height:0}},um=(e,n,[r,l,a]=[0,0,1],s=!1,u=!1)=>{const f={...Qo(n,[r,l,a]),width:n.width/a,height:n.height/a},h=[];for(const d of e.values()){const{measured:m,selectable:p=!0,hidden:y=!1}=d;if(u&&!p||y)continue;const v=m.width??d.width??d.initialWidth??null,_=m.height??d.height??d.initialHeight??null,k=Ho(f,sa(d)),w=(v??0)*(_??0),S=s&&k>0;(!d.internals.handleBounds||S||k>=w||d.dragging)&&h.push(d)}return h},QT=(e,n)=>{const r=new Set;return e.forEach(l=>{r.add(l.id)}),n.filter(l=>r.has(l.source)||r.has(l.target))};function ZT(e,n){const r=new Map,l=n!=null&&n.nodes?new Set(n.nodes.map(a=>a.id)):null;return e.forEach(a=>{a.measured.width&&a.measured.height&&((n==null?void 0:n.includeHiddenNodes)||!a.hidden)&&(!l||l.has(a.id))&&r.set(a.id,a)}),r}async function KT({nodes:e,width:n,height:r,panZoom:l,minZoom:a,maxZoom:s},u){if(e.size===0)return Promise.resolve(!0);const f=ZT(e,u),h=Xo(f),d=cm(h,n,r,(u==null?void 0:u.minZoom)??a,(u==null?void 0:u.maxZoom)??s,(u==null?void 0:u.padding)??.1);return await l.setViewport(d,{duration:u==null?void 0:u.duration,ease:u==null?void 0:u.ease,interpolate:u==null?void 0:u.interpolate}),Promise.resolve(!0)}function Vw({nodeId:e,nextPosition:n,nodeLookup:r,nodeOrigin:l=[0,0],nodeExtent:a,onError:s}){const u=r.get(e),f=u.parentId?r.get(u.parentId):void 0,{x:h,y:d}=f?f.internals.positionAbsolute:{x:0,y:0},m=u.origin??l;let p=u.extent||a;if(u.extent==="parent"&&!u.expandParent)if(!f)s==null||s("005",rr.error005());else{const v=f.measured.width,_=f.measured.height;v&&_&&(p=[[h,d],[h+v,d+_]])}else f&&ua(u.extent)&&(p=[[u.extent[0][0]+h,u.extent[0][1]+d],[u.extent[1][0]+h,u.extent[1][1]+d]]);const y=ua(p)?Zi(n,p,u.measured):n;return(u.measured.width===void 0||u.measured.height===void 0)&&(s==null||s("015",rr.error015())),{position:{x:y.x-h+(u.measured.width??0)*m[0],y:y.y-d+(u.measured.height??0)*m[1]},positionAbsolute:y}}async function JT({nodesToRemove:e=[],edgesToRemove:n=[],nodes:r,edges:l,onBeforeDelete:a}){const s=new Set(e.map(y=>y.id)),u=[];for(const y of r){if(y.deletable===!1)continue;const v=s.has(y.id),_=!v&&y.parentId&&u.find(k=>k.id===y.parentId);(v||_)&&u.push(y)}const f=new Set(n.map(y=>y.id)),h=l.filter(y=>y.deletable!==!1),m=QT(u,h);for(const y of h)f.has(y.id)&&!m.find(_=>_.id===y.id)&&m.push(y);if(!a)return{edges:m,nodes:u};const p=await a({nodes:u,edges:m});return typeof p=="boolean"?p?{edges:m,nodes:u}:{edges:[],nodes:[]}:p}const oa=(e,n=0,r=1)=>Math.min(Math.max(e,n),r),Zi=(e={x:0,y:0},n,r)=>({x:oa(e.x,n[0][0],n[1][0]-((r==null?void 0:r.width)??0)),y:oa(e.y,n[0][1],n[1][1]-((r==null?void 0:r.height)??0))});function Gw(e,n,r){const{width:l,height:a}=Or(r),{x:s,y:u}=r.internals.positionAbsolute;return Zi(e,[[s,u],[s+l,u+a]],n)}const iv=(e,n,r)=>er?-oa(Math.abs(e-r),1,n)/n:0,Pw=(e,n,r=15,l=40)=>{const a=iv(e.x,l,n.width-l)*r,s=iv(e.y,l,n.height-l)*r;return[a,s]},bc=(e,n)=>({x:Math.min(e.x,n.x),y:Math.min(e.y,n.y),x2:Math.max(e.x2,n.x2),y2:Math.max(e.y2,n.y2)}),jp=({x:e,y:n,width:r,height:l})=>({x:e,y:n,x2:e+r,y2:n+l}),wc=({x:e,y:n,x2:r,y2:l})=>({x:e,y:n,width:r-e,height:l-n}),sa=(e,n=[0,0])=>{var a,s;const{x:r,y:l}=sm(e)?e.internals.positionAbsolute:Yo(e,n);return{x:r,y:l,width:((a=e.measured)==null?void 0:a.width)??e.width??e.initialWidth??0,height:((s=e.measured)==null?void 0:s.height)??e.height??e.initialHeight??0}},lc=(e,n=[0,0])=>{var a,s;const{x:r,y:l}=sm(e)?e.internals.positionAbsolute:Yo(e,n);return{x:r,y:l,x2:r+(((a=e.measured)==null?void 0:a.width)??e.width??e.initialWidth??0),y2:l+(((s=e.measured)==null?void 0:s.height)??e.height??e.initialHeight??0)}},$w=(e,n)=>wc(bc(jp(e),jp(n))),Ho=(e,n)=>{const r=Math.max(0,Math.min(e.x+e.width,n.x+n.width)-Math.max(e.x,n.x)),l=Math.max(0,Math.min(e.y+e.height,n.y+n.height)-Math.max(e.y,n.y));return Math.ceil(r*l)},lv=e=>In(e.width)&&In(e.height)&&In(e.x)&&In(e.y),In=e=>!isNaN(e)&&isFinite(e),WT=(e,n)=>{},Fo=(e,n=[1,1])=>({x:n[0]*Math.round(e.x/n[0]),y:n[1]*Math.round(e.y/n[1])}),Qo=({x:e,y:n},[r,l,a],s=!1,u=[1,1])=>{const f={x:(e-r)/a,y:(n-l)/a};return s?Fo(f,u):f},ac=({x:e,y:n},[r,l,a])=>({x:e*a+r,y:n*a+l});function Pl(e,n){if(typeof e=="number")return Math.floor((n-n/(1+e))*.5);if(typeof e=="string"&&e.endsWith("px")){const r=parseFloat(e);if(!Number.isNaN(r))return Math.floor(r)}if(typeof e=="string"&&e.endsWith("%")){const r=parseFloat(e);if(!Number.isNaN(r))return Math.floor(n*r*.01)}return console.error(`[React Flow] The padding value "${e}" is invalid. Please provide a number or a string with a valid unit (px or %).`),0}function eA(e,n,r){if(typeof e=="string"||typeof e=="number"){const l=Pl(e,r),a=Pl(e,n);return{top:l,right:a,bottom:l,left:a,x:a*2,y:l*2}}if(typeof e=="object"){const l=Pl(e.top??e.y??0,r),a=Pl(e.bottom??e.y??0,r),s=Pl(e.left??e.x??0,n),u=Pl(e.right??e.x??0,n);return{top:l,right:u,bottom:a,left:s,x:s+u,y:l+a}}return{top:0,right:0,bottom:0,left:0,x:0,y:0}}function tA(e,n,r,l,a,s){const{x:u,y:f}=ac(e,[n,r,l]),{x:h,y:d}=ac({x:e.x+e.width,y:e.y+e.height},[n,r,l]),m=a-h,p=s-d;return{left:Math.floor(u),top:Math.floor(f),right:Math.floor(m),bottom:Math.floor(p)}}const cm=(e,n,r,l,a,s)=>{const u=eA(s,n,r),f=(n-u.x)/e.width,h=(r-u.y)/e.height,d=Math.min(f,h),m=oa(d,l,a),p=e.x+e.width/2,y=e.y+e.height/2,v=n/2-p*m,_=r/2-y*m,k=tA(e,v,_,m,n,r),w={left:Math.min(k.left-u.left,0),top:Math.min(k.top-u.top,0),right:Math.min(k.right-u.right,0),bottom:Math.min(k.bottom-u.bottom,0)};return{x:v-w.left+w.right,y:_-w.top+w.bottom,zoom:m}},Bo=()=>{var e;return typeof navigator<"u"&&((e=navigator==null?void 0:navigator.userAgent)==null?void 0:e.indexOf("Mac"))>=0};function ua(e){return e!=null&&e!=="parent"}function Or(e){var n,r;return{width:((n=e.measured)==null?void 0:n.width)??e.width??e.initialWidth??0,height:((r=e.measured)==null?void 0:r.height)??e.height??e.initialHeight??0}}function Yw(e){var n,r;return(((n=e.measured)==null?void 0:n.width)??e.width??e.initialWidth)!==void 0&&(((r=e.measured)==null?void 0:r.height)??e.height??e.initialHeight)!==void 0}function Xw(e,n={width:0,height:0},r,l,a){const s={...e},u=l.get(r);if(u){const f=u.origin||a;s.x+=u.internals.positionAbsolute.x-(n.width??0)*f[0],s.y+=u.internals.positionAbsolute.y-(n.height??0)*f[1]}return s}function av(e,n){if(e.size!==n.size)return!1;for(const r of e)if(!n.has(r))return!1;return!0}function nA(){let e,n;return{promise:new Promise((l,a)=>{e=l,n=a}),resolve:e,reject:n}}function rA(e){return{...Bw,...e||{}}}function Eo(e,{snapGrid:n=[0,0],snapToGrid:r=!1,transform:l,containerBounds:a}){const{x:s,y:u}=Vn(e),f=Qo({x:s-((a==null?void 0:a.left)??0),y:u-((a==null?void 0:a.top)??0)},l),{x:h,y:d}=r?Fo(f,n):f;return{xSnapped:h,ySnapped:d,...f}}const fm=e=>({width:e.offsetWidth,height:e.offsetHeight}),Fw=e=>{var n;return((n=e==null?void 0:e.getRootNode)==null?void 0:n.call(e))||(window==null?void 0:window.document)},iA=["INPUT","SELECT","TEXTAREA"];function Qw(e){var l,a;const n=((a=(l=e.composedPath)==null?void 0:l.call(e))==null?void 0:a[0])||e.target;return(n==null?void 0:n.nodeType)!==1?!1:iA.includes(n.nodeName)||n.hasAttribute("contenteditable")||!!n.closest(".nokey")}const Zw=e=>"clientX"in e,Vn=(e,n)=>{var s,u;const r=Zw(e),l=r?e.clientX:(s=e.touches)==null?void 0:s[0].clientX,a=r?e.clientY:(u=e.touches)==null?void 0:u[0].clientY;return{x:l-((n==null?void 0:n.left)??0),y:a-((n==null?void 0:n.top)??0)}},ov=(e,n,r,l,a)=>{const s=n.querySelectorAll(`.${e}`);return!s||!s.length?null:Array.from(s).map(u=>{const f=u.getBoundingClientRect();return{id:u.getAttribute("data-handleid"),type:e,nodeId:a,position:u.getAttribute("data-handlepos"),x:(f.left-r.left)/l,y:(f.top-r.top)/l,...fm(u)}})};function Kw({sourceX:e,sourceY:n,targetX:r,targetY:l,sourceControlX:a,sourceControlY:s,targetControlX:u,targetControlY:f}){const h=e*.125+a*.375+u*.375+r*.125,d=n*.125+s*.375+f*.375+l*.125,m=Math.abs(h-e),p=Math.abs(d-n);return[h,d,m,p]}function Ou(e,n){return e>=0?.5*e:n*25*Math.sqrt(-e)}function sv({pos:e,x1:n,y1:r,x2:l,y2:a,c:s}){switch(e){case ve.Left:return[n-Ou(n-l,s),r];case ve.Right:return[n+Ou(l-n,s),r];case ve.Top:return[n,r-Ou(r-a,s)];case ve.Bottom:return[n,r+Ou(a-r,s)]}}function dm({sourceX:e,sourceY:n,sourcePosition:r=ve.Bottom,targetX:l,targetY:a,targetPosition:s=ve.Top,curvature:u=.25}){const[f,h]=sv({pos:r,x1:e,y1:n,x2:l,y2:a,c:u}),[d,m]=sv({pos:s,x1:l,y1:a,x2:e,y2:n,c:u}),[p,y,v,_]=Kw({sourceX:e,sourceY:n,targetX:l,targetY:a,sourceControlX:f,sourceControlY:h,targetControlX:d,targetControlY:m});return[`M${e},${n} C${f},${h} ${d},${m} ${l},${a}`,p,y,v,_]}function Jw({sourceX:e,sourceY:n,targetX:r,targetY:l}){const a=Math.abs(r-e)/2,s=r0}const oA=({source:e,sourceHandle:n,target:r,targetHandle:l})=>`xy-edge__${e}${n||""}-${r}${l||""}`,sA=(e,n)=>n.some(r=>r.source===e.source&&r.target===e.target&&(r.sourceHandle===e.sourceHandle||!r.sourceHandle&&!e.sourceHandle)&&(r.targetHandle===e.targetHandle||!r.targetHandle&&!e.targetHandle)),uA=(e,n,r={})=>{if(!e.source||!e.target)return n;const l=r.getEdgeId||oA;let a;return Iw(e)?a={...e}:a={...e,id:l(e)},sA(a,n)?n:(a.sourceHandle===null&&delete a.sourceHandle,a.targetHandle===null&&delete a.targetHandle,n.concat(a))};function Ww({sourceX:e,sourceY:n,targetX:r,targetY:l}){const[a,s,u,f]=Jw({sourceX:e,sourceY:n,targetX:r,targetY:l});return[`M ${e},${n}L ${r},${l}`,a,s,u,f]}const uv={[ve.Left]:{x:-1,y:0},[ve.Right]:{x:1,y:0},[ve.Top]:{x:0,y:-1},[ve.Bottom]:{x:0,y:1}},cA=({source:e,sourcePosition:n=ve.Bottom,target:r})=>n===ve.Left||n===ve.Right?e.xMath.sqrt(Math.pow(n.x-e.x,2)+Math.pow(n.y-e.y,2));function fA({source:e,sourcePosition:n=ve.Bottom,target:r,targetPosition:l=ve.Top,center:a,offset:s,stepPosition:u}){const f=uv[n],h=uv[l],d={x:e.x+f.x*s,y:e.y+f.y*s},m={x:r.x+h.x*s,y:r.y+h.y*s},p=cA({source:d,sourcePosition:n,target:m}),y=p.x!==0?"x":"y",v=p[y];let _=[],k,w;const S={x:0,y:0},T={x:0,y:0},[,,E,A]=Jw({sourceX:e.x,sourceY:e.y,targetX:r.x,targetY:r.y});if(f[y]*h[y]===-1){y==="x"?(k=a.x??d.x+(m.x-d.x)*u,w=a.y??(d.y+m.y)/2):(k=a.x??(d.x+m.x)/2,w=a.y??d.y+(m.y-d.y)*u);const z=[{x:k,y:d.y},{x:k,y:m.y}],R=[{x:d.x,y:w},{x:m.x,y:w}];f[y]===v?_=y==="x"?z:R:_=y==="x"?R:z}else{const z=[{x:d.x,y:m.y}],R=[{x:m.x,y:d.y}];if(y==="x"?_=f.x===v?R:z:_=f.y===v?z:R,n===l){const q=Math.abs(e[y]-r[y]);if(q<=s){const ee=Math.min(s-1,s-q);f[y]===v?S[y]=(d[y]>e[y]?-1:1)*ee:T[y]=(m[y]>r[y]?-1:1)*ee}}if(n!==l){const q=y==="x"?"y":"x",ee=f[y]===h[q],L=d[q]>m[q],$=d[q]=B?(k=(D.x+U.x)/2,w=_[0].y):(k=_[0].x,w=(D.y+U.y)/2)}return[[e,{x:d.x+S.x,y:d.y+S.y},..._,{x:m.x+T.x,y:m.y+T.y},r],k,w,E,A]}function dA(e,n,r,l){const a=Math.min(cv(e,n)/2,cv(n,r)/2,l),{x:s,y:u}=n;if(e.x===s&&s===r.x||e.y===u&&u===r.y)return`L${s} ${u}`;if(e.y===u){const d=e.x{let A="";return E>0&&Er.id===n):e[0])||null}function Dp(e,n){return e?typeof e=="string"?e:`${n?`${n}__`:""}${Object.keys(e).sort().map(l=>`${l}=${e[l]}`).join("&")}`:""}function pA(e,{id:n,defaultColor:r,defaultMarkerStart:l,defaultMarkerEnd:a}){const s=new Set;return e.reduce((u,f)=>([f.markerStart||l,f.markerEnd||a].forEach(h=>{if(h&&typeof h=="object"){const d=Dp(h,n);s.has(d)||(u.push({id:d,color:h.color||r,...h}),s.add(d))}}),u),[]).sort((u,f)=>u.id.localeCompare(f.id))}const eS=1e3,mA=10,hm={nodeOrigin:[0,0],nodeExtent:Ro,elevateNodesOnSelect:!0,zIndexMode:"basic",defaults:{}},gA={...hm,checkEquality:!0};function pm(e,n){const r={...e};for(const l in n)n[l]!==void 0&&(r[l]=n[l]);return r}function yA(e,n,r){const l=pm(hm,r);for(const a of e.values())if(a.parentId)gm(a,e,n,l);else{const s=Yo(a,l.nodeOrigin),u=ua(a.extent)?a.extent:l.nodeExtent,f=Zi(s,u,Or(a));a.internals.positionAbsolute=f}}function xA(e,n){if(!e.handles)return e.measured?n==null?void 0:n.internals.handleBounds:void 0;const r=[],l=[];for(const a of e.handles){const s={id:a.id,width:a.width??1,height:a.height??1,nodeId:e.id,x:a.x,y:a.y,position:a.position,type:a.type};a.type==="source"?r.push(s):a.type==="target"&&l.push(s)}return{source:r,target:l}}function mm(e){return e==="manual"}function Rp(e,n,r,l={}){var d,m;const a=pm(gA,l),s={i:0},u=new Map(n),f=a!=null&&a.elevateNodesOnSelect&&!mm(a.zIndexMode)?eS:0;let h=e.length>0;n.clear(),r.clear();for(const p of e){let y=u.get(p.id);if(a.checkEquality&&p===(y==null?void 0:y.internals.userNode))n.set(p.id,y);else{const v=Yo(p,a.nodeOrigin),_=ua(p.extent)?p.extent:a.nodeExtent,k=Zi(v,_,Or(p));y={...a.defaults,...p,measured:{width:(d=p.measured)==null?void 0:d.width,height:(m=p.measured)==null?void 0:m.height},internals:{positionAbsolute:k,handleBounds:xA(p,y),z:tS(p,f,a.zIndexMode),userNode:p}},n.set(p.id,y)}(y.measured===void 0||y.measured.width===void 0||y.measured.height===void 0)&&!y.hidden&&(h=!1),p.parentId&&gm(y,n,r,l,s)}return h}function vA(e,n){if(!e.parentId)return;const r=n.get(e.parentId);r?r.set(e.id,e):n.set(e.parentId,new Map([[e.id,e]]))}function gm(e,n,r,l,a){const{elevateNodesOnSelect:s,nodeOrigin:u,nodeExtent:f,zIndexMode:h}=pm(hm,l),d=e.parentId,m=n.get(d);if(!m){console.warn(`Parent node ${d} not found. Please make sure that parent nodes are in front of their child nodes in the nodes array.`);return}vA(e,r),a&&!m.parentId&&m.internals.rootParentIndex===void 0&&h==="auto"&&(m.internals.rootParentIndex=++a.i,m.internals.z=m.internals.z+a.i*mA),a&&m.internals.rootParentIndex!==void 0&&(a.i=m.internals.rootParentIndex);const p=s&&!mm(h)?eS:0,{x:y,y:v,z:_}=bA(e,m,u,f,p,h),{positionAbsolute:k}=e.internals,w=y!==k.x||v!==k.y;(w||_!==e.internals.z)&&n.set(e.id,{...e,internals:{...e.internals,positionAbsolute:w?{x:y,y:v}:k,z:_}})}function tS(e,n,r){const l=In(e.zIndex)?e.zIndex:0;return mm(r)?l:l+(e.selected?n:0)}function bA(e,n,r,l,a,s){const{x:u,y:f}=n.internals.positionAbsolute,h=Or(e),d=Yo(e,r),m=ua(e.extent)?Zi(d,e.extent,h):d;let p=Zi({x:u+m.x,y:f+m.y},l,h);e.extent==="parent"&&(p=Gw(p,h,n));const y=tS(e,a,s),v=n.internals.z??0;return{x:p.x,y:p.y,z:v>=y?v+1:y}}function ym(e,n,r,l=[0,0]){var u;const a=[],s=new Map;for(const f of e){const h=n.get(f.parentId);if(!h)continue;const d=((u=s.get(f.parentId))==null?void 0:u.expandedRect)??sa(h),m=$w(d,f.rect);s.set(f.parentId,{expandedRect:m,parent:h})}return s.size>0&&s.forEach(({expandedRect:f,parent:h},d)=>{var E;const m=h.internals.positionAbsolute,p=Or(h),y=h.origin??l,v=f.x0||_>0||S||T)&&(a.push({id:d,type:"position",position:{x:h.position.x-v+S,y:h.position.y-_+T}}),(E=r.get(d))==null||E.forEach(A=>{e.some(I=>I.id===A.id)||a.push({id:A.id,type:"position",position:{x:A.position.x+v,y:A.position.y+_}})})),(p.width0){const v=ym(y,n,r,a);d.push(...v)}return{changes:d,updatedInternals:h}}async function SA({delta:e,panZoom:n,transform:r,translateExtent:l,width:a,height:s}){if(!n||!e.x&&!e.y)return Promise.resolve(!1);const u=await n.setViewportConstrained({x:r[0]+e.x,y:r[1]+e.y,zoom:r[2]},[[0,0],[a,s]],l),f=!!u&&(u.x!==r[0]||u.y!==r[1]||u.k!==r[2]);return Promise.resolve(f)}function pv(e,n,r,l,a,s){let u=a;const f=l.get(u)||new Map;l.set(u,f.set(r,n)),u=`${a}-${e}`;const h=l.get(u)||new Map;if(l.set(u,h.set(r,n)),s){u=`${a}-${e}-${s}`;const d=l.get(u)||new Map;l.set(u,d.set(r,n))}}function nS(e,n,r){e.clear(),n.clear();for(const l of r){const{source:a,target:s,sourceHandle:u=null,targetHandle:f=null}=l,h={edgeId:l.id,source:a,target:s,sourceHandle:u,targetHandle:f},d=`${a}-${u}--${s}-${f}`,m=`${s}-${f}--${a}-${u}`;pv("source",h,m,e,a,u),pv("target",h,d,e,s,f),n.set(l.id,l)}}function rS(e,n){if(!e.parentId)return!1;const r=n.get(e.parentId);return r?r.selected?!0:rS(r,n):!1}function mv(e,n,r){var a;let l=e;do{if((a=l==null?void 0:l.matches)!=null&&a.call(l,n))return!0;if(l===r)return!1;l=l==null?void 0:l.parentElement}while(l);return!1}function _A(e,n,r,l){const a=new Map;for(const[s,u]of e)if((u.selected||u.id===l)&&(!u.parentId||!rS(u,e))&&(u.draggable||n&&typeof u.draggable>"u")){const f=e.get(s);f&&a.set(s,{id:s,position:f.position||{x:0,y:0},distance:{x:r.x-f.internals.positionAbsolute.x,y:r.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 ih({nodeId:e,dragItems:n,nodeLookup:r,dragging:l=!0}){var u,f,h;const a=[];for(const[d,m]of n){const p=(u=r.get(d))==null?void 0:u.internals.userNode;p&&a.push({...p,position:m.position,dragging:l})}if(!e)return[a[0],a];const s=(f=r.get(e))==null?void 0:f.internals.userNode;return[s?{...s,position:((h=n.get(e))==null?void 0:h.position)||s.position,dragging:l}:a[0],a]}function EA({dragItems:e,snapGrid:n,x:r,y:l}){const a=e.values().next().value;if(!a)return null;const s={x:r-a.distance.x,y:l-a.distance.y},u=Fo(s,n);return{x:u.x-s.x,y:u.y-s.y}}function NA({onNodeMouseDown:e,getStoreItems:n,onDragStart:r,onDrag:l,onDragStop:a}){let s={x:null,y:null},u=0,f=new Map,h=!1,d={x:0,y:0},m=null,p=!1,y=null,v=!1,_=!1,k=null;function w({noDragClassName:T,handleSelector:E,domNode:A,isSelectable:I,nodeId:z,nodeClickDistance:R=0}){y=vn(A);function D({x:q,y:ee}){const{nodeLookup:L,nodeExtent:$,snapGrid:M,snapToGrid:P,nodeOrigin:Q,onNodeDrag:K,onSelectionDrag:j,onError:H,updateNodePositions:Y}=n();s={x:q,y:ee};let N=!1;const G=f.size>1,F=G&&$?jp(Xo(f)):null,J=G&&P?EA({dragItems:f,snapGrid:M,x:q,y:ee}):null;for(const[ne,re]of f){if(!L.has(ne))continue;let se={x:q-re.distance.x,y:ee-re.distance.y};P&&(se=J?{x:Math.round(se.x+J.x),y:Math.round(se.y+J.y)}:Fo(se,M));let ye=null;if(G&&$&&!re.extent&&F){const{positionAbsolute:pe}=re.internals,_e=pe.x-F.x+$[0][0],Me=pe.x+re.measured.width-F.x2+$[1][0],Ce=pe.y-F.y+$[0][1],st=pe.y+re.measured.height-F.y2+$[1][1];ye=[[_e,Ce],[Me,st]]}const{position:be,positionAbsolute:xe}=Vw({nodeId:ne,nextPosition:se,nodeLookup:L,nodeExtent:ye||$,nodeOrigin:Q,onError:H});N=N||re.position.x!==be.x||re.position.y!==be.y,re.position=be,re.internals.positionAbsolute=xe}if(_=_||N,!!N&&(Y(f,!0),k&&(l||K||!z&&j))){const[ne,re]=ih({nodeId:z,dragItems:f,nodeLookup:L});l==null||l(k,f,ne,re),K==null||K(k,ne,re),z||j==null||j(k,re)}}async function U(){if(!m)return;const{transform:q,panBy:ee,autoPanSpeed:L,autoPanOnNodeDrag:$}=n();if(!$){h=!1,cancelAnimationFrame(u);return}const[M,P]=Pw(d,m,L);(M!==0||P!==0)&&(s.x=(s.x??0)-M/q[2],s.y=(s.y??0)-P/q[2],await ee({x:M,y:P})&&D(s)),u=requestAnimationFrame(U)}function X(q){var G;const{nodeLookup:ee,multiSelectionActive:L,nodesDraggable:$,transform:M,snapGrid:P,snapToGrid:Q,selectNodesOnDrag:K,onNodeDragStart:j,onSelectionDragStart:H,unselectNodesAndEdges:Y}=n();p=!0,(!K||!I)&&!L&&z&&((G=ee.get(z))!=null&&G.selected||Y()),I&&K&&z&&(e==null||e(z));const N=Eo(q.sourceEvent,{transform:M,snapGrid:P,snapToGrid:Q,containerBounds:m});if(s=N,f=_A(ee,$,N,z),f.size>0&&(r||j||!z&&H)){const[F,J]=ih({nodeId:z,dragItems:f,nodeLookup:ee});r==null||r(q.sourceEvent,f,F,J),j==null||j(q.sourceEvent,F,J),z||H==null||H(q.sourceEvent,J)}}const B=ww().clickDistance(R).on("start",q=>{const{domNode:ee,nodeDragThreshold:L,transform:$,snapGrid:M,snapToGrid:P}=n();m=(ee==null?void 0:ee.getBoundingClientRect())||null,v=!1,_=!1,k=q.sourceEvent,L===0&&X(q),s=Eo(q.sourceEvent,{transform:$,snapGrid:M,snapToGrid:P,containerBounds:m}),d=Vn(q.sourceEvent,m)}).on("drag",q=>{const{autoPanOnNodeDrag:ee,transform:L,snapGrid:$,snapToGrid:M,nodeDragThreshold:P,nodeLookup:Q}=n(),K=Eo(q.sourceEvent,{transform:L,snapGrid:$,snapToGrid:M,containerBounds:m});if(k=q.sourceEvent,(q.sourceEvent.type==="touchmove"&&q.sourceEvent.touches.length>1||z&&!Q.has(z))&&(v=!0),!v){if(!h&&ee&&p&&(h=!0,U()),!p){const j=Vn(q.sourceEvent,m),H=j.x-d.x,Y=j.y-d.y;Math.sqrt(H*H+Y*Y)>P&&X(q)}(s.x!==K.xSnapped||s.y!==K.ySnapped)&&f&&p&&(d=Vn(q.sourceEvent,m),D(K))}}).on("end",q=>{if(!(!p||v)&&(h=!1,p=!1,cancelAnimationFrame(u),f.size>0)){const{nodeLookup:ee,updateNodePositions:L,onNodeDragStop:$,onSelectionDragStop:M}=n();if(_&&(L(f,!1),_=!1),a||$||!z&&M){const[P,Q]=ih({nodeId:z,dragItems:f,nodeLookup:ee,dragging:!1});a==null||a(q.sourceEvent,f,P,Q),$==null||$(q.sourceEvent,P,Q),z||M==null||M(q.sourceEvent,Q)}}}).filter(q=>{const ee=q.target;return!q.button&&(!T||!mv(ee,`.${T}`,A))&&(!E||mv(ee,E,A))});y.call(B)}function S(){y==null||y.on(".drag",null)}return{update:w,destroy:S}}function kA(e,n,r){const l=[],a={x:e.x-r,y:e.y-r,width:r*2,height:r*2};for(const s of n.values())Ho(a,sa(s))>0&&l.push(s);return l}const CA=250;function TA(e,n,r,l){var f,h;let a=[],s=1/0;const u=kA(e,r,n+CA);for(const d of u){const m=[...((f=d.internals.handleBounds)==null?void 0:f.source)??[],...((h=d.internals.handleBounds)==null?void 0:h.target)??[]];for(const p of m){if(l.nodeId===p.nodeId&&l.type===p.type&&l.id===p.id)continue;const{x:y,y:v}=Ki(d,p,p.position,!0),_=Math.sqrt(Math.pow(y-e.x,2)+Math.pow(v-e.y,2));_>n||(_1){const d=l.type==="source"?"target":"source";return a.find(m=>m.type===d)??a[0]}return a[0]}function iS(e,n,r,l,a,s=!1){var d,m,p;const u=l.get(e);if(!u)return null;const f=a==="strict"?(d=u.internals.handleBounds)==null?void 0:d[n]:[...((m=u.internals.handleBounds)==null?void 0:m.source)??[],...((p=u.internals.handleBounds)==null?void 0:p.target)??[]],h=(r?f==null?void 0:f.find(y=>y.id===r):f==null?void 0:f[0])??null;return h&&s?{...h,...Ki(u,h,h.position,!0)}:h}function lS(e,n){return e||(n!=null&&n.classList.contains("target")?"target":n!=null&&n.classList.contains("source")?"source":null)}function AA(e,n){let r=null;return n?r=!0:e&&!n&&(r=!1),r}const aS=()=>!0;function zA(e,{connectionMode:n,connectionRadius:r,handleId:l,nodeId:a,edgeUpdaterType:s,isTarget:u,domNode:f,nodeLookup:h,lib:d,autoPanOnConnect:m,flowId:p,panBy:y,cancelConnection:v,onConnectStart:_,onConnect:k,onConnectEnd:w,isValidConnection:S=aS,onReconnectEnd:T,updateConnection:E,getTransform:A,getFromHandle:I,autoPanSpeed:z,dragThreshold:R=1,handleDomNode:D}){const U=Fw(e.target);let X=0,B;const{x:q,y:ee}=Vn(e),L=lS(s,D),$=f==null?void 0:f.getBoundingClientRect();let M=!1;if(!$||!L)return;const P=iS(a,L,l,h,n);if(!P)return;let Q=Vn(e,$),K=!1,j=null,H=!1,Y=null;function N(){if(!m||!$)return;const[be,xe]=Pw(Q,$,z);y({x:be,y:xe}),X=requestAnimationFrame(N)}const G={...P,nodeId:a,type:L,position:P.position},F=h.get(a);let ne={inProgress:!0,isValid:null,from:Ki(F,G,ve.Left,!0),fromHandle:G,fromPosition:G.position,fromNode:F,to:Q,toHandle:null,toPosition:rv[G.position],toNode:null,pointer:Q};function re(){M=!0,E(ne),_==null||_(e,{nodeId:a,handleId:l,handleType:L})}R===0&&re();function se(be){if(!M){const{x:st,y:tt}=Vn(be),zt=st-q,Vt=tt-ee;if(!(zt*zt+Vt*Vt>R*R))return;re()}if(!I()||!G){ye(be);return}const xe=A();Q=Vn(be,$),B=TA(Qo(Q,xe,!1,[1,1]),r,h,G),K||(N(),K=!0);const pe=oS(be,{handle:B,connectionMode:n,fromNodeId:a,fromHandleId:l,fromType:u?"target":"source",isValidConnection:S,doc:U,lib:d,flowId:p,nodeLookup:h});Y=pe.handleDomNode,j=pe.connection,H=AA(!!B,pe.isValid);const _e=h.get(a),Me=_e?Ki(_e,G,ve.Left,!0):ne.from,Ce={...ne,from:Me,isValid:H,to:pe.toHandle&&H?ac({x:pe.toHandle.x,y:pe.toHandle.y},xe):Q,toHandle:pe.toHandle,toPosition:H&&pe.toHandle?pe.toHandle.position:rv[G.position],toNode:pe.toHandle?h.get(pe.toHandle.nodeId):null,pointer:Q};E(Ce),ne=Ce}function ye(be){if(!("touches"in be&&be.touches.length>0)){if(M){(B||Y)&&j&&H&&(k==null||k(j));const{inProgress:xe,...pe}=ne,_e={...pe,toPosition:ne.toHandle?ne.toPosition:null};w==null||w(be,_e),s&&(T==null||T(be,_e))}v(),cancelAnimationFrame(X),K=!1,H=!1,j=null,Y=null,U.removeEventListener("mousemove",se),U.removeEventListener("mouseup",ye),U.removeEventListener("touchmove",se),U.removeEventListener("touchend",ye)}}U.addEventListener("mousemove",se),U.addEventListener("mouseup",ye),U.addEventListener("touchmove",se),U.addEventListener("touchend",ye)}function oS(e,{handle:n,connectionMode:r,fromNodeId:l,fromHandleId:a,fromType:s,doc:u,lib:f,flowId:h,isValidConnection:d=aS,nodeLookup:m}){const p=s==="target",y=n?u.querySelector(`.${f}-flow__handle[data-id="${h}-${n==null?void 0:n.nodeId}-${n==null?void 0:n.id}-${n==null?void 0:n.type}"]`):null,{x:v,y:_}=Vn(e),k=u.elementFromPoint(v,_),w=k!=null&&k.classList.contains(`${f}-flow__handle`)?k:y,S={handleDomNode:w,isValid:!1,connection:null,toHandle:null};if(w){const T=lS(void 0,w),E=w.getAttribute("data-nodeid"),A=w.getAttribute("data-handleid"),I=w.classList.contains("connectable"),z=w.classList.contains("connectableend");if(!E||!T)return S;const R={source:p?E:l,sourceHandle:p?A:a,target:p?l:E,targetHandle:p?a:A};S.connection=R;const U=I&&z&&(r===aa.Strict?p&&T==="source"||!p&&T==="target":E!==l||A!==a);S.isValid=U&&d(R),S.toHandle=iS(E,T,A,m,r,!0)}return S}const Lp={onPointerDown:zA,isValid:oS};function MA({domNode:e,panZoom:n,getTransform:r,getViewScale:l}){const a=vn(e);function s({translateExtent:f,width:h,height:d,zoomStep:m=1,pannable:p=!0,zoomable:y=!0,inversePan:v=!1}){const _=E=>{if(E.sourceEvent.type!=="wheel"||!n)return;const A=r(),I=E.sourceEvent.ctrlKey&&Bo()?10:1,z=-E.sourceEvent.deltaY*(E.sourceEvent.deltaMode===1?.05:E.sourceEvent.deltaMode?1:.002)*m,R=A[2]*Math.pow(2,z*I);n.scaleTo(R)};let k=[0,0];const w=E=>{(E.sourceEvent.type==="mousedown"||E.sourceEvent.type==="touchstart")&&(k=[E.sourceEvent.clientX??E.sourceEvent.touches[0].clientX,E.sourceEvent.clientY??E.sourceEvent.touches[0].clientY])},S=E=>{const A=r();if(E.sourceEvent.type!=="mousemove"&&E.sourceEvent.type!=="touchmove"||!n)return;const I=[E.sourceEvent.clientX??E.sourceEvent.touches[0].clientX,E.sourceEvent.clientY??E.sourceEvent.touches[0].clientY],z=[I[0]-k[0],I[1]-k[1]];k=I;const R=l()*Math.max(A[2],Math.log(A[2]))*(v?-1:1),D={x:A[0]-z[0]*R,y:A[1]-z[1]*R},U=[[0,0],[h,d]];n.setViewportConstrained({x:D.x,y:D.y,zoom:A[2]},U,f)},T=Lw().on("start",w).on("zoom",p?S:null).on("zoom.wheel",y?_:null);a.call(T,{})}function u(){a.on("zoom",null)}return{update:s,destroy:u,pointer:qn}}const Sc=e=>({x:e.x,y:e.y,zoom:e.k}),lh=({x:e,y:n,zoom:r})=>vc.translate(e,n).scale(r),Zl=(e,n)=>e.target.closest(`.${n}`),sS=(e,n)=>n===2&&Array.isArray(e)&&e.includes(2),jA=e=>((e*=2)<=1?e*e*e:(e-=2)*e*e+2)/2,ah=(e,n=0,r=jA,l=()=>{})=>{const a=typeof n=="number"&&n>0;return a||l(),a?e.transition().duration(n).ease(r).on("end",l):e},uS=e=>{const n=e.ctrlKey&&Bo()?10:1;return-e.deltaY*(e.deltaMode===1?.05:e.deltaMode?1:.002)*n};function OA({zoomPanValues:e,noWheelClassName:n,d3Selection:r,d3Zoom:l,panOnScrollMode:a,panOnScrollSpeed:s,zoomOnPinch:u,onPanZoomStart:f,onPanZoom:h,onPanZoomEnd:d}){return m=>{if(Zl(m,n))return m.ctrlKey&&m.preventDefault(),!1;m.preventDefault(),m.stopImmediatePropagation();const p=r.property("__zoom").k||1;if(m.ctrlKey&&u){const w=qn(m),S=uS(m),T=p*Math.pow(2,S);l.scaleTo(r,T,w,m);return}const y=m.deltaMode===1?20:1;let v=a===Yi.Vertical?0:m.deltaX*y,_=a===Yi.Horizontal?0:m.deltaY*y;!Bo()&&m.shiftKey&&a!==Yi.Vertical&&(v=m.deltaY*y,_=0),l.translateBy(r,-(v/p)*s,-(_/p)*s,{internal:!0});const k=Sc(r.property("__zoom"));clearTimeout(e.panScrollTimeout),e.isPanScrolling?(h==null||h(m,k),e.panScrollTimeout=setTimeout(()=>{d==null||d(m,k),e.isPanScrolling=!1},150)):(e.isPanScrolling=!0,f==null||f(m,k))}}function DA({noWheelClassName:e,preventScrolling:n,d3ZoomHandler:r}){return function(l,a){const s=l.type==="wheel",u=!n&&s&&!l.ctrlKey,f=Zl(l,e);if(l.ctrlKey&&s&&f&&l.preventDefault(),u||f)return null;l.preventDefault(),r.call(this,l,a)}}function RA({zoomPanValues:e,onDraggingChange:n,onPanZoomStart:r}){return l=>{var s,u,f;if((s=l.sourceEvent)!=null&&s.internal)return;const a=Sc(l.transform);e.mouseButton=((u=l.sourceEvent)==null?void 0:u.button)||0,e.isZoomingOrPanning=!0,e.prevViewport=a,((f=l.sourceEvent)==null?void 0:f.type)==="mousedown"&&n(!0),r&&(r==null||r(l.sourceEvent,a))}}function LA({zoomPanValues:e,panOnDrag:n,onPaneContextMenu:r,onTransformChange:l,onPanZoom:a}){return s=>{var u,f;e.usedRightMouseButton=!!(r&&sS(n,e.mouseButton??0)),(u=s.sourceEvent)!=null&&u.sync||l([s.transform.x,s.transform.y,s.transform.k]),a&&!((f=s.sourceEvent)!=null&&f.internal)&&(a==null||a(s.sourceEvent,Sc(s.transform)))}}function HA({zoomPanValues:e,panOnDrag:n,panOnScroll:r,onDraggingChange:l,onPanZoomEnd:a,onPaneContextMenu:s}){return u=>{var f;if(!((f=u.sourceEvent)!=null&&f.internal)&&(e.isZoomingOrPanning=!1,s&&sS(n,e.mouseButton??0)&&!e.usedRightMouseButton&&u.sourceEvent&&s(u.sourceEvent),e.usedRightMouseButton=!1,l(!1),a)){const h=Sc(u.transform);e.prevViewport=h,clearTimeout(e.timerId),e.timerId=setTimeout(()=>{a==null||a(u.sourceEvent,h)},r?150:0)}}}function BA({zoomActivationKeyPressed:e,zoomOnScroll:n,zoomOnPinch:r,panOnDrag:l,panOnScroll:a,zoomOnDoubleClick:s,userSelectionActive:u,noWheelClassName:f,noPanClassName:h,lib:d,connectionInProgress:m}){return p=>{var w;const y=e||n,v=r&&p.ctrlKey,_=p.type==="wheel";if(p.button===1&&p.type==="mousedown"&&(Zl(p,`${d}-flow__node`)||Zl(p,`${d}-flow__edge`)))return!0;if(!l&&!y&&!a&&!s&&!r||u||m&&!_||Zl(p,f)&&_||Zl(p,h)&&(!_||a&&_&&!e)||!r&&p.ctrlKey&&_)return!1;if(!r&&p.type==="touchstart"&&((w=p.touches)==null?void 0:w.length)>1)return p.preventDefault(),!1;if(!y&&!a&&!v&&_||!l&&(p.type==="mousedown"||p.type==="touchstart")||Array.isArray(l)&&!l.includes(p.button)&&p.type==="mousedown")return!1;const k=Array.isArray(l)&&l.includes(p.button)||!p.button||p.button<=1;return(!p.ctrlKey||_)&&k}}function qA({domNode:e,minZoom:n,maxZoom:r,translateExtent:l,viewport:a,onPanZoom:s,onPanZoomStart:u,onPanZoomEnd:f,onDraggingChange:h}){const d={isZoomingOrPanning:!1,usedRightMouseButton:!1,prevViewport:{},mouseButton:0,timerId:void 0,panScrollTimeout:void 0,isPanScrolling:!1},m=e.getBoundingClientRect(),p=Lw().scaleExtent([n,r]).translateExtent(l),y=vn(e).call(p);T({x:a.x,y:a.y,zoom:oa(a.zoom,n,r)},[[0,0],[m.width,m.height]],l);const v=y.on("wheel.zoom"),_=y.on("dblclick.zoom");p.wheelDelta(uS);function k(B,q){return y?new Promise(ee=>{p==null||p.interpolate((q==null?void 0:q.interpolate)==="linear"?_o:Gu).transform(ah(y,q==null?void 0:q.duration,q==null?void 0:q.ease,()=>ee(!0)),B)}):Promise.resolve(!1)}function w({noWheelClassName:B,noPanClassName:q,onPaneContextMenu:ee,userSelectionActive:L,panOnScroll:$,panOnDrag:M,panOnScrollMode:P,panOnScrollSpeed:Q,preventScrolling:K,zoomOnPinch:j,zoomOnScroll:H,zoomOnDoubleClick:Y,zoomActivationKeyPressed:N,lib:G,onTransformChange:F,connectionInProgress:J,paneClickDistance:ne,selectionOnDrag:re}){L&&!d.isZoomingOrPanning&&S();const se=$&&!N&&!L;p.clickDistance(re?1/0:!In(ne)||ne<0?0:ne);const ye=se?OA({zoomPanValues:d,noWheelClassName:B,d3Selection:y,d3Zoom:p,panOnScrollMode:P,panOnScrollSpeed:Q,zoomOnPinch:j,onPanZoomStart:u,onPanZoom:s,onPanZoomEnd:f}):DA({noWheelClassName:B,preventScrolling:K,d3ZoomHandler:v});if(y.on("wheel.zoom",ye,{passive:!1}),!L){const xe=RA({zoomPanValues:d,onDraggingChange:h,onPanZoomStart:u});p.on("start",xe);const pe=LA({zoomPanValues:d,panOnDrag:M,onPaneContextMenu:!!ee,onPanZoom:s,onTransformChange:F});p.on("zoom",pe);const _e=HA({zoomPanValues:d,panOnDrag:M,panOnScroll:$,onPaneContextMenu:ee,onPanZoomEnd:f,onDraggingChange:h});p.on("end",_e)}const be=BA({zoomActivationKeyPressed:N,panOnDrag:M,zoomOnScroll:H,panOnScroll:$,zoomOnDoubleClick:Y,zoomOnPinch:j,userSelectionActive:L,noPanClassName:q,noWheelClassName:B,lib:G,connectionInProgress:J});p.filter(be),Y?y.on("dblclick.zoom",_):y.on("dblclick.zoom",null)}function S(){p.on("zoom",null)}async function T(B,q,ee){const L=lh(B),$=p==null?void 0:p.constrain()(L,q,ee);return $&&await k($),new Promise(M=>M($))}async function E(B,q){const ee=lh(B);return await k(ee,q),new Promise(L=>L(ee))}function A(B){if(y){const q=lh(B),ee=y.property("__zoom");(ee.k!==B.zoom||ee.x!==B.x||ee.y!==B.y)&&(p==null||p.transform(y,q,null,{sync:!0}))}}function I(){const B=y?Rw(y.node()):{x:0,y:0,k:1};return{x:B.x,y:B.y,zoom:B.k}}function z(B,q){return y?new Promise(ee=>{p==null||p.interpolate((q==null?void 0:q.interpolate)==="linear"?_o:Gu).scaleTo(ah(y,q==null?void 0:q.duration,q==null?void 0:q.ease,()=>ee(!0)),B)}):Promise.resolve(!1)}function R(B,q){return y?new Promise(ee=>{p==null||p.interpolate((q==null?void 0:q.interpolate)==="linear"?_o:Gu).scaleBy(ah(y,q==null?void 0:q.duration,q==null?void 0:q.ease,()=>ee(!0)),B)}):Promise.resolve(!1)}function D(B){p==null||p.scaleExtent(B)}function U(B){p==null||p.translateExtent(B)}function X(B){const q=!In(B)||B<0?0:B;p==null||p.clickDistance(q)}return{update:w,destroy:S,setViewport:E,setViewportConstrained:T,getViewport:I,scaleTo:z,scaleBy:R,setScaleExtent:D,setTranslateExtent:U,syncViewport:A,setClickDistance:X}}var ca;(function(e){e.Line="line",e.Handle="handle"})(ca||(ca={}));function UA({width:e,prevWidth:n,height:r,prevHeight:l,affectsX:a,affectsY:s}){const u=e-n,f=r-l,h=[u>0?1:u<0?-1:0,f>0?1:f<0?-1:0];return u&&a&&(h[0]=h[0]*-1),f&&s&&(h[1]=h[1]*-1),h}function gv(e){const n=e.includes("right")||e.includes("left"),r=e.includes("bottom")||e.includes("top"),l=e.includes("left"),a=e.includes("top");return{isHorizontal:n,isVertical:r,affectsX:l,affectsY:a}}function ci(e,n){return Math.max(0,n-e)}function fi(e,n){return Math.max(0,e-n)}function Du(e,n,r){return Math.max(0,n-e,e-r)}function yv(e,n){return e?!n:n}function IA(e,n,r,l,a,s,u,f){let{affectsX:h,affectsY:d}=n;const{isHorizontal:m,isVertical:p}=n,y=m&&p,{xSnapped:v,ySnapped:_}=r,{minWidth:k,maxWidth:w,minHeight:S,maxHeight:T}=l,{x:E,y:A,width:I,height:z,aspectRatio:R}=e;let D=Math.floor(m?v-e.pointerX:0),U=Math.floor(p?_-e.pointerY:0);const X=I+(h?-D:D),B=z+(d?-U:U),q=-s[0]*I,ee=-s[1]*z;let L=Du(X,k,w),$=Du(B,S,T);if(u){let Q=0,K=0;h&&D<0?Q=ci(E+D+q,u[0][0]):!h&&D>0&&(Q=fi(E+X+q,u[1][0])),d&&U<0?K=ci(A+U+ee,u[0][1]):!d&&U>0&&(K=fi(A+B+ee,u[1][1])),L=Math.max(L,Q),$=Math.max($,K)}if(f){let Q=0,K=0;h&&D>0?Q=fi(E+D,f[0][0]):!h&&D<0&&(Q=ci(E+X,f[1][0])),d&&U>0?K=fi(A+U,f[0][1]):!d&&U<0&&(K=ci(A+B,f[1][1])),L=Math.max(L,Q),$=Math.max($,K)}if(a){if(m){const Q=Du(X/R,S,T)*R;if(L=Math.max(L,Q),u){let K=0;!h&&!d||h&&!d&&y?K=fi(A+ee+X/R,u[1][1])*R:K=ci(A+ee+(h?D:-D)/R,u[0][1])*R,L=Math.max(L,K)}if(f){let K=0;!h&&!d||h&&!d&&y?K=ci(A+X/R,f[1][1])*R:K=fi(A+(h?D:-D)/R,f[0][1])*R,L=Math.max(L,K)}}if(p){const Q=Du(B*R,k,w)/R;if($=Math.max($,Q),u){let K=0;!h&&!d||d&&!h&&y?K=fi(E+B*R+q,u[1][0])/R:K=ci(E+(d?U:-U)*R+q,u[0][0])/R,$=Math.max($,K)}if(f){let K=0;!h&&!d||d&&!h&&y?K=ci(E+B*R,f[1][0])/R:K=fi(E+(d?U:-U)*R,f[0][0])/R,$=Math.max($,K)}}}U=U+(U<0?$:-$),D=D+(D<0?L:-L),a&&(y?X>B*R?U=(yv(h,d)?-D:D)/R:D=(yv(h,d)?-U:U)*R:m?(U=D/R,d=h):(D=U*R,h=d));const M=h?E+D:E,P=d?A+U:A;return{width:I+(h?-D:D),height:z+(d?-U:U),x:s[0]*D*(h?-1:1)+M,y:s[1]*U*(d?-1:1)+P}}const cS={width:0,height:0,x:0,y:0},VA={...cS,pointerX:0,pointerY:0,aspectRatio:1};function GA(e){return[[0,0],[e.measured.width,e.measured.height]]}function PA(e,n,r){const l=n.position.x+e.position.x,a=n.position.y+e.position.y,s=e.measured.width??0,u=e.measured.height??0,f=r[0]*s,h=r[1]*u;return[[l-f,a-h],[l+s-f,a+u-h]]}function $A({domNode:e,nodeId:n,getStoreItems:r,onChange:l,onEnd:a}){const s=vn(e);let u={controlDirection:gv("bottom-right"),boundaries:{minWidth:0,minHeight:0,maxWidth:Number.MAX_VALUE,maxHeight:Number.MAX_VALUE},resizeDirection:void 0,keepAspectRatio:!1};function f({controlPosition:d,boundaries:m,keepAspectRatio:p,resizeDirection:y,onResizeStart:v,onResize:_,onResizeEnd:k,shouldResize:w}){let S={...cS},T={...VA};u={boundaries:m,resizeDirection:y,keepAspectRatio:p,controlDirection:gv(d)};let E,A=null,I=[],z,R,D,U=!1;const X=ww().on("start",B=>{const{nodeLookup:q,transform:ee,snapGrid:L,snapToGrid:$,nodeOrigin:M,paneDomNode:P}=r();if(E=q.get(n),!E)return;A=(P==null?void 0:P.getBoundingClientRect())??null;const{xSnapped:Q,ySnapped:K}=Eo(B.sourceEvent,{transform:ee,snapGrid:L,snapToGrid:$,containerBounds:A});S={width:E.measured.width??0,height:E.measured.height??0,x:E.position.x??0,y:E.position.y??0},T={...S,pointerX:Q,pointerY:K,aspectRatio:S.width/S.height},z=void 0,E.parentId&&(E.extent==="parent"||E.expandParent)&&(z=q.get(E.parentId),R=z&&E.extent==="parent"?GA(z):void 0),I=[],D=void 0;for(const[j,H]of q)if(H.parentId===n&&(I.push({id:j,position:{...H.position},extent:H.extent}),H.extent==="parent"||H.expandParent)){const Y=PA(H,E,H.origin??M);D?D=[[Math.min(Y[0][0],D[0][0]),Math.min(Y[0][1],D[0][1])],[Math.max(Y[1][0],D[1][0]),Math.max(Y[1][1],D[1][1])]]:D=Y}v==null||v(B,{...S})}).on("drag",B=>{const{transform:q,snapGrid:ee,snapToGrid:L,nodeOrigin:$}=r(),M=Eo(B.sourceEvent,{transform:q,snapGrid:ee,snapToGrid:L,containerBounds:A}),P=[];if(!E)return;const{x:Q,y:K,width:j,height:H}=S,Y={},N=E.origin??$,{width:G,height:F,x:J,y:ne}=IA(T,u.controlDirection,M,u.boundaries,u.keepAspectRatio,N,R,D),re=G!==j,se=F!==H,ye=J!==Q&&re,be=ne!==K&&se;if(!ye&&!be&&!re&&!se)return;if((ye||be||N[0]===1||N[1]===1)&&(Y.x=ye?J:S.x,Y.y=be?ne:S.y,S.x=Y.x,S.y=Y.y,I.length>0)){const Me=J-Q,Ce=ne-K;for(const st of I)st.position={x:st.position.x-Me+N[0]*(G-j),y:st.position.y-Ce+N[1]*(F-H)},P.push(st)}if((re||se)&&(Y.width=re&&(!u.resizeDirection||u.resizeDirection==="horizontal")?G:S.width,Y.height=se&&(!u.resizeDirection||u.resizeDirection==="vertical")?F:S.height,S.width=Y.width,S.height=Y.height),z&&E.expandParent){const Me=N[0]*(Y.width??0);Y.x&&Y.x{U&&(k==null||k(B,{...S}),a==null||a({...S}),U=!1)});s.call(X)}function h(){s.on(".drag",null)}return{update:f,destroy:h}}var oh={exports:{}},sh={},uh={exports:{}},ch={};/** + * @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 xv;function YA(){if(xv)return ch;xv=1;var e=Vo();function n(p,y){return p===y&&(p!==0||1/p===1/y)||p!==p&&y!==y}var r=typeof Object.is=="function"?Object.is:n,l=e.useState,a=e.useEffect,s=e.useLayoutEffect,u=e.useDebugValue;function f(p,y){var v=y(),_=l({inst:{value:v,getSnapshot:y}}),k=_[0].inst,w=_[1];return s(function(){k.value=v,k.getSnapshot=y,h(k)&&w({inst:k})},[p,v,y]),a(function(){return h(k)&&w({inst:k}),p(function(){h(k)&&w({inst:k})})},[p]),u(v),v}function h(p){var y=p.getSnapshot;p=p.value;try{var v=y();return!r(p,v)}catch{return!0}}function d(p,y){return y()}var m=typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?d:f;return ch.useSyncExternalStore=e.useSyncExternalStore!==void 0?e.useSyncExternalStore:m,ch}var vv;function XA(){return vv||(vv=1,uh.exports=YA()),uh.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 bv;function FA(){if(bv)return sh;bv=1;var e=Vo(),n=XA();function r(d,m){return d===m&&(d!==0||1/d===1/m)||d!==d&&m!==m}var l=typeof Object.is=="function"?Object.is:r,a=n.useSyncExternalStore,s=e.useRef,u=e.useEffect,f=e.useMemo,h=e.useDebugValue;return sh.useSyncExternalStoreWithSelector=function(d,m,p,y,v){var _=s(null);if(_.current===null){var k={hasValue:!1,value:null};_.current=k}else k=_.current;_=f(function(){function S(z){if(!T){if(T=!0,E=z,z=y(z),v!==void 0&&k.hasValue){var R=k.value;if(v(R,z))return A=R}return A=z}if(R=A,l(E,z))return R;var D=y(z);return v!==void 0&&v(R,D)?(E=z,R):(E=z,A=D)}var T=!1,E,A,I=p===void 0?null:p;return[function(){return S(m())},I===null?void 0:function(){return S(I())}]},[m,p,y,v]);var w=a(d,_[0],_[1]);return u(function(){k.hasValue=!0,k.value=w},[w]),h(w),w},sh}var wv;function QA(){return wv||(wv=1,oh.exports=FA()),oh.exports}var ZA=QA();const KA=Io(ZA),JA={},Sv=e=>{let n;const r=new Set,l=(m,p)=>{const y=typeof m=="function"?m(n):m;if(!Object.is(y,n)){const v=n;n=p??(typeof y!="object"||y===null)?y:Object.assign({},n,y),r.forEach(_=>_(n,v))}},a=()=>n,h={setState:l,getState:a,getInitialState:()=>d,subscribe:m=>(r.add(m),()=>r.delete(m)),destroy:()=>{(JA?"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."),r.clear()}},d=n=e(l,a,h);return h},WA=e=>e?Sv(e):Sv,{useDebugValue:ez}=Fl,{useSyncExternalStoreWithSelector:tz}=KA,nz=e=>e;function fS(e,n=nz,r){const l=tz(e.subscribe,e.getState,e.getServerState||e.getInitialState,n,r);return ez(l),l}const _v=(e,n)=>{const r=WA(e),l=(a,s=n)=>fS(r,a,s);return Object.assign(l,r),l},rz=(e,n)=>e?_v(e,n):_v;function ht(e,n){if(Object.is(e,n))return!0;if(typeof e!="object"||e===null||typeof n!="object"||n===null)return!1;if(e instanceof Map&&n instanceof Map){if(e.size!==n.size)return!1;for(const[l,a]of e)if(!Object.is(a,n.get(l)))return!1;return!0}if(e instanceof Set&&n instanceof Set){if(e.size!==n.size)return!1;for(const l of e)if(!n.has(l))return!1;return!0}const r=Object.keys(e);if(r.length!==Object.keys(n).length)return!1;for(const l of r)if(!Object.prototype.hasOwnProperty.call(n,l)||!Object.is(e[l],n[l]))return!1;return!0}var iz=Db();const _c=V.createContext(null),lz=_c.Provider,dS=rr.error001();function Pe(e,n){const r=V.useContext(_c);if(r===null)throw new Error(dS);return fS(r,e,n)}function pt(){const e=V.useContext(_c);if(e===null)throw new Error(dS);return V.useMemo(()=>({getState:e.getState,setState:e.setState,subscribe:e.subscribe}),[e])}const Ev={display:"none"},az={position:"absolute",width:1,height:1,margin:-1,border:0,padding:0,overflow:"hidden",clip:"rect(0px, 0px, 0px, 0px)",clipPath:"inset(100%)"},hS="react-flow__node-desc",pS="react-flow__edge-desc",oz="react-flow__aria-live",sz=e=>e.ariaLiveMessage,uz=e=>e.ariaLabelConfig;function cz({rfId:e}){const n=Pe(sz);return b.jsx("div",{id:`${oz}-${e}`,"aria-live":"assertive","aria-atomic":"true",style:az,children:n})}function fz({rfId:e,disableKeyboardA11y:n}){const r=Pe(uz);return b.jsxs(b.Fragment,{children:[b.jsx("div",{id:`${hS}-${e}`,style:Ev,children:n?r["node.a11yDescription.default"]:r["node.a11yDescription.keyboardDisabled"]}),b.jsx("div",{id:`${pS}-${e}`,style:Ev,children:r["edge.a11yDescription.default"]}),!n&&b.jsx(cz,{rfId:e})]})}const Ec=V.forwardRef(({position:e="top-left",children:n,className:r,style:l,...a},s)=>{const u=`${e}`.split("-");return b.jsx("div",{className:At(["react-flow__panel",r,...u]),style:l,ref:s,...a,children:n})});Ec.displayName="Panel";function dz({proOptions:e,position:n="bottom-right"}){return e!=null&&e.hideAttribution?null:b.jsx(Ec,{position:n,className:"react-flow__attribution","data-message":"Please only hide this attribution when you are subscribed to React Flow Pro: https://pro.reactflow.dev",children:b.jsx("a",{href:"https://reactflow.dev",target:"_blank",rel:"noopener noreferrer","aria-label":"React Flow attribution",children:"React Flow"})})}const hz=e=>{const n=[],r=[];for(const[,l]of e.nodeLookup)l.selected&&n.push(l.internals.userNode);for(const[,l]of e.edgeLookup)l.selected&&r.push(l);return{selectedNodes:n,selectedEdges:r}},Ru=e=>e.id;function pz(e,n){return ht(e.selectedNodes.map(Ru),n.selectedNodes.map(Ru))&&ht(e.selectedEdges.map(Ru),n.selectedEdges.map(Ru))}function mz({onSelectionChange:e}){const n=pt(),{selectedNodes:r,selectedEdges:l}=Pe(hz,pz);return V.useEffect(()=>{const a={nodes:r,edges:l};e==null||e(a),n.getState().onSelectionChangeHandlers.forEach(s=>s(a))},[r,l,e]),null}const gz=e=>!!e.onSelectionChangeHandlers;function yz({onSelectionChange:e}){const n=Pe(gz);return e||n?b.jsx(mz,{onSelectionChange:e}):null}const mS=[0,0],xz={x:0,y:0,zoom:1},vz=["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"],Nv=[...vz,"rfId"],bz=e=>({setNodes:e.setNodes,setEdges:e.setEdges,setMinZoom:e.setMinZoom,setMaxZoom:e.setMaxZoom,setTranslateExtent:e.setTranslateExtent,setNodeExtent:e.setNodeExtent,reset:e.reset,setDefaultNodesAndEdges:e.setDefaultNodesAndEdges}),kv={translateExtent:Ro,nodeOrigin:mS,minZoom:.5,maxZoom:2,elementsSelectable:!0,noPanClassName:"nopan",rfId:"1"};function wz(e){const{setNodes:n,setEdges:r,setMinZoom:l,setMaxZoom:a,setTranslateExtent:s,setNodeExtent:u,reset:f,setDefaultNodesAndEdges:h}=Pe(bz,ht),d=pt();V.useEffect(()=>(h(e.defaultNodes,e.defaultEdges),()=>{m.current=kv,f()}),[]);const m=V.useRef(kv);return V.useEffect(()=>{for(const p of Nv){const y=e[p],v=m.current[p];y!==v&&(typeof e[p]>"u"||(p==="nodes"?n(y):p==="edges"?r(y):p==="minZoom"?l(y):p==="maxZoom"?a(y):p==="translateExtent"?s(y):p==="nodeExtent"?u(y):p==="ariaLabelConfig"?d.setState({ariaLabelConfig:rA(y)}):p==="fitView"?d.setState({fitViewQueued:y}):p==="fitViewOptions"?d.setState({fitViewOptions:y}):d.setState({[p]:y})))}m.current=e},Nv.map(p=>e[p])),null}function Cv(){return typeof window>"u"||!window.matchMedia?null:window.matchMedia("(prefers-color-scheme: dark)")}function Sz(e){var l;const[n,r]=V.useState(e==="system"?null:e);return V.useEffect(()=>{if(e!=="system"){r(e);return}const a=Cv(),s=()=>r(a!=null&&a.matches?"dark":"light");return s(),a==null||a.addEventListener("change",s),()=>{a==null||a.removeEventListener("change",s)}},[e]),n!==null?n:(l=Cv())!=null&&l.matches?"dark":"light"}const Tv=typeof document<"u"?document:null;function qo(e=null,n={target:Tv,actInsideInputWithModifier:!0}){const[r,l]=V.useState(!1),a=V.useRef(!1),s=V.useRef(new Set([])),[u,f]=V.useMemo(()=>{if(e!==null){const d=(Array.isArray(e)?e:[e]).filter(p=>typeof p=="string").map(p=>p.replace("+",` +`).replace(` + +`,` ++`).split(` +`)),m=d.reduce((p,y)=>p.concat(...y),[]);return[d,m]}return[[],[]]},[e]);return V.useEffect(()=>{const h=(n==null?void 0:n.target)??Tv,d=(n==null?void 0:n.actInsideInputWithModifier)??!0;if(e!==null){const m=v=>{var w,S;if(a.current=v.ctrlKey||v.metaKey||v.shiftKey||v.altKey,(!a.current||a.current&&!d)&&Qw(v))return!1;const k=zv(v.code,f);if(s.current.add(v[k]),Av(u,s.current,!1)){const T=((S=(w=v.composedPath)==null?void 0:w.call(v))==null?void 0:S[0])||v.target,E=(T==null?void 0:T.nodeName)==="BUTTON"||(T==null?void 0:T.nodeName)==="A";n.preventDefault!==!1&&(a.current||!E)&&v.preventDefault(),l(!0)}},p=v=>{const _=zv(v.code,f);Av(u,s.current,!0)?(l(!1),s.current.clear()):s.current.delete(v[_]),v.key==="Meta"&&s.current.clear(),a.current=!1},y=()=>{s.current.clear(),l(!1)};return h==null||h.addEventListener("keydown",m),h==null||h.addEventListener("keyup",p),window.addEventListener("blur",y),window.addEventListener("contextmenu",y),()=>{h==null||h.removeEventListener("keydown",m),h==null||h.removeEventListener("keyup",p),window.removeEventListener("blur",y),window.removeEventListener("contextmenu",y)}}},[e,l]),r}function Av(e,n,r){return e.filter(l=>r||l.length===n.size).some(l=>l.every(a=>n.has(a)))}function zv(e,n){return n.includes(e)?"code":"key"}const _z=()=>{const e=pt();return V.useMemo(()=>({zoomIn:n=>{const{panZoom:r}=e.getState();return r?r.scaleBy(1.2,{duration:n==null?void 0:n.duration}):Promise.resolve(!1)},zoomOut:n=>{const{panZoom:r}=e.getState();return r?r.scaleBy(1/1.2,{duration:n==null?void 0:n.duration}):Promise.resolve(!1)},zoomTo:(n,r)=>{const{panZoom:l}=e.getState();return l?l.scaleTo(n,{duration:r==null?void 0:r.duration}):Promise.resolve(!1)},getZoom:()=>e.getState().transform[2],setViewport:async(n,r)=>{const{transform:[l,a,s],panZoom:u}=e.getState();return u?(await u.setViewport({x:n.x??l,y:n.y??a,zoom:n.zoom??s},r),Promise.resolve(!0)):Promise.resolve(!1)},getViewport:()=>{const[n,r,l]=e.getState().transform;return{x:n,y:r,zoom:l}},setCenter:async(n,r,l)=>e.getState().setCenter(n,r,l),fitBounds:async(n,r)=>{const{width:l,height:a,minZoom:s,maxZoom:u,panZoom:f}=e.getState(),h=cm(n,l,a,s,u,(r==null?void 0:r.padding)??.1);return f?(await f.setViewport(h,{duration:r==null?void 0:r.duration,ease:r==null?void 0:r.ease,interpolate:r==null?void 0:r.interpolate}),Promise.resolve(!0)):Promise.resolve(!1)},screenToFlowPosition:(n,r={})=>{const{transform:l,snapGrid:a,snapToGrid:s,domNode:u}=e.getState();if(!u)return n;const{x:f,y:h}=u.getBoundingClientRect(),d={x:n.x-f,y:n.y-h},m=r.snapGrid??a,p=r.snapToGrid??s;return Qo(d,l,p,m)},flowToScreenPosition:n=>{const{transform:r,domNode:l}=e.getState();if(!l)return n;const{x:a,y:s}=l.getBoundingClientRect(),u=ac(n,r);return{x:u.x+a,y:u.y+s}}}),[])};function gS(e,n){const r=[],l=new Map,a=[];for(const s of e)if(s.type==="add"){a.push(s);continue}else if(s.type==="remove"||s.type==="replace")l.set(s.id,[s]);else{const u=l.get(s.id);u?u.push(s):l.set(s.id,[s])}for(const s of n){const u=l.get(s.id);if(!u){r.push(s);continue}if(u[0].type==="remove")continue;if(u[0].type==="replace"){r.push({...u[0].item});continue}const f={...s};for(const h of u)Ez(h,f);r.push(f)}return a.length&&a.forEach(s=>{s.index!==void 0?r.splice(s.index,0,{...s.item}):r.push({...s.item})}),r}function Ez(e,n){switch(e.type){case"select":{n.selected=e.selected;break}case"position":{typeof e.position<"u"&&(n.position=e.position),typeof e.dragging<"u"&&(n.dragging=e.dragging);break}case"dimensions":{typeof e.dimensions<"u"&&(n.measured={...e.dimensions},e.setAttributes&&((e.setAttributes===!0||e.setAttributes==="width")&&(n.width=e.dimensions.width),(e.setAttributes===!0||e.setAttributes==="height")&&(n.height=e.dimensions.height))),typeof e.resizing=="boolean"&&(n.resizing=e.resizing);break}}}function yS(e,n){return gS(e,n)}function xS(e,n){return gS(e,n)}function Ui(e,n){return{id:e,type:"select",selected:n}}function Kl(e,n=new Set,r=!1){const l=[];for(const[a,s]of e){const u=n.has(a);!(s.selected===void 0&&!u)&&s.selected!==u&&(r&&(s.selected=u),l.push(Ui(s.id,u)))}return l}function Mv({items:e=[],lookup:n}){var a;const r=[],l=new Map(e.map(s=>[s.id,s]));for(const[s,u]of e.entries()){const f=n.get(u.id),h=((a=f==null?void 0:f.internals)==null?void 0:a.userNode)??f;h!==void 0&&h!==u&&r.push({id:u.id,item:u,type:"replace"}),h===void 0&&r.push({item:u,type:"add",index:s})}for(const[s]of n)l.get(s)===void 0&&r.push({id:s,type:"remove"});return r}function jv(e){return{id:e.id,type:"remove"}}const Ov=e=>XT(e),Nz=e=>Iw(e);function vS(e){return V.forwardRef(e)}const kz=typeof window<"u"?V.useLayoutEffect:V.useEffect;function Dv(e){const[n,r]=V.useState(BigInt(0)),[l]=V.useState(()=>Cz(()=>r(a=>a+BigInt(1))));return kz(()=>{const a=l.get();a.length&&(e(a),l.reset())},[n]),l}function Cz(e){let n=[];return{get:()=>n,reset:()=>{n=[]},push:r=>{n.push(r),e()}}}const bS=V.createContext(null);function Tz({children:e}){const n=pt(),r=V.useCallback(f=>{const{nodes:h=[],setNodes:d,hasDefaultNodes:m,onNodesChange:p,nodeLookup:y,fitViewQueued:v,onNodesChangeMiddlewareMap:_}=n.getState();let k=h;for(const S of f)k=typeof S=="function"?S(k):S;let w=Mv({items:k,lookup:y});for(const S of _.values())w=S(w);m&&d(k),w.length>0?p==null||p(w):v&&window.requestAnimationFrame(()=>{const{fitViewQueued:S,nodes:T,setNodes:E}=n.getState();S&&E(T)})},[]),l=Dv(r),a=V.useCallback(f=>{const{edges:h=[],setEdges:d,hasDefaultEdges:m,onEdgesChange:p,edgeLookup:y}=n.getState();let v=h;for(const _ of f)v=typeof _=="function"?_(v):_;m?d(v):p&&p(Mv({items:v,lookup:y}))},[]),s=Dv(a),u=V.useMemo(()=>({nodeQueue:l,edgeQueue:s}),[]);return b.jsx(bS.Provider,{value:u,children:e})}function Az(){const e=V.useContext(bS);if(!e)throw new Error("useBatchContext must be used within a BatchProvider");return e}const zz=e=>!!e.panZoom;function el(){const e=_z(),n=pt(),r=Az(),l=Pe(zz),a=V.useMemo(()=>{const s=p=>n.getState().nodeLookup.get(p),u=p=>{r.nodeQueue.push(p)},f=p=>{r.edgeQueue.push(p)},h=p=>{var S,T;const{nodeLookup:y,nodeOrigin:v}=n.getState(),_=Ov(p)?p:y.get(p.id),k=_.parentId?Xw(_.position,_.measured,_.parentId,y,v):_.position,w={..._,position:k,width:((S=_.measured)==null?void 0:S.width)??_.width,height:((T=_.measured)==null?void 0:T.height)??_.height};return sa(w)},d=(p,y,v={replace:!1})=>{u(_=>_.map(k=>{if(k.id===p){const w=typeof y=="function"?y(k):y;return v.replace&&Ov(w)?w:{...k,...w}}return k}))},m=(p,y,v={replace:!1})=>{f(_=>_.map(k=>{if(k.id===p){const w=typeof y=="function"?y(k):y;return v.replace&&Nz(w)?w:{...k,...w}}return k}))};return{getNodes:()=>n.getState().nodes.map(p=>({...p})),getNode:p=>{var y;return(y=s(p))==null?void 0:y.internals.userNode},getInternalNode:s,getEdges:()=>{const{edges:p=[]}=n.getState();return p.map(y=>({...y}))},getEdge:p=>n.getState().edgeLookup.get(p),setNodes:u,setEdges:f,addNodes:p=>{const y=Array.isArray(p)?p:[p];r.nodeQueue.push(v=>[...v,...y])},addEdges:p=>{const y=Array.isArray(p)?p:[p];r.edgeQueue.push(v=>[...v,...y])},toObject:()=>{const{nodes:p=[],edges:y=[],transform:v}=n.getState(),[_,k,w]=v;return{nodes:p.map(S=>({...S})),edges:y.map(S=>({...S})),viewport:{x:_,y:k,zoom:w}}},deleteElements:async({nodes:p=[],edges:y=[]})=>{const{nodes:v,edges:_,onNodesDelete:k,onEdgesDelete:w,triggerNodeChanges:S,triggerEdgeChanges:T,onDelete:E,onBeforeDelete:A}=n.getState(),{nodes:I,edges:z}=await JT({nodesToRemove:p,edgesToRemove:y,nodes:v,edges:_,onBeforeDelete:A}),R=z.length>0,D=I.length>0;if(R){const U=z.map(jv);w==null||w(z),T(U)}if(D){const U=I.map(jv);k==null||k(I),S(U)}return(D||R)&&(E==null||E({nodes:I,edges:z})),{deletedNodes:I,deletedEdges:z}},getIntersectingNodes:(p,y=!0,v)=>{const _=lv(p),k=_?p:h(p),w=v!==void 0;return k?(v||n.getState().nodes).filter(S=>{const T=n.getState().nodeLookup.get(S.id);if(T&&!_&&(S.id===p.id||!T.internals.positionAbsolute))return!1;const E=sa(w?S:T),A=Ho(E,k);return y&&A>0||A>=E.width*E.height||A>=k.width*k.height}):[]},isNodeIntersecting:(p,y,v=!0)=>{const k=lv(p)?p:h(p);if(!k)return!1;const w=Ho(k,y);return v&&w>0||w>=y.width*y.height||w>=k.width*k.height},updateNode:d,updateNodeData:(p,y,v={replace:!1})=>{d(p,_=>{const k=typeof y=="function"?y(_):y;return v.replace?{..._,data:k}:{..._,data:{..._.data,...k}}},v)},updateEdge:m,updateEdgeData:(p,y,v={replace:!1})=>{m(p,_=>{const k=typeof y=="function"?y(_):y;return v.replace?{..._,data:k}:{..._,data:{..._.data,...k}}},v)},getNodesBounds:p=>{const{nodeLookup:y,nodeOrigin:v}=n.getState();return FT(p,{nodeLookup:y,nodeOrigin:v})},getHandleConnections:({type:p,id:y,nodeId:v})=>{var _;return Array.from(((_=n.getState().connectionLookup.get(`${v}-${p}${y?`-${y}`:""}`))==null?void 0:_.values())??[])},getNodeConnections:({type:p,handleId:y,nodeId:v})=>{var _;return Array.from(((_=n.getState().connectionLookup.get(`${v}${p?y?`-${p}-${y}`:`-${p}`:""}`))==null?void 0:_.values())??[])},fitView:async p=>{const y=n.getState().fitViewResolver??nA();return n.setState({fitViewQueued:!0,fitViewOptions:p,fitViewResolver:y}),r.nodeQueue.push(v=>[...v]),y.promise}}},[]);return V.useMemo(()=>({...a,...e,viewportInitialized:l}),[l])}const Rv=e=>e.selected,Mz=typeof window<"u"?window:void 0;function jz({deleteKeyCode:e,multiSelectionKeyCode:n}){const r=pt(),{deleteElements:l}=el(),a=qo(e,{actInsideInputWithModifier:!1}),s=qo(n,{target:Mz});V.useEffect(()=>{if(a){const{edges:u,nodes:f}=r.getState();l({nodes:f.filter(Rv),edges:u.filter(Rv)}),r.setState({nodesSelectionActive:!1})}},[a]),V.useEffect(()=>{r.setState({multiSelectionActive:s})},[s])}function Oz(e){const n=pt();V.useEffect(()=>{const r=()=>{var a,s,u,f;if(!e.current||!(((s=(a=e.current).checkVisibility)==null?void 0:s.call(a))??!0))return!1;const l=fm(e.current);(l.height===0||l.width===0)&&((f=(u=n.getState()).onError)==null||f.call(u,"004",rr.error004())),n.setState({width:l.width||500,height:l.height||500})};if(e.current){r(),window.addEventListener("resize",r);const l=new ResizeObserver(()=>r());return l.observe(e.current),()=>{window.removeEventListener("resize",r),l&&e.current&&l.unobserve(e.current)}}},[])}const Nc={position:"absolute",width:"100%",height:"100%",top:0,left:0},Dz=e=>({userSelectionActive:e.userSelectionActive,lib:e.lib,connectionInProgress:e.connection.inProgress});function Rz({onPaneContextMenu:e,zoomOnScroll:n=!0,zoomOnPinch:r=!0,panOnScroll:l=!1,panOnScrollSpeed:a=.5,panOnScrollMode:s=Yi.Free,zoomOnDoubleClick:u=!0,panOnDrag:f=!0,defaultViewport:h,translateExtent:d,minZoom:m,maxZoom:p,zoomActivationKeyCode:y,preventScrolling:v=!0,children:_,noWheelClassName:k,noPanClassName:w,onViewportChange:S,isControlledViewport:T,paneClickDistance:E,selectionOnDrag:A}){const I=pt(),z=V.useRef(null),{userSelectionActive:R,lib:D,connectionInProgress:U}=Pe(Dz,ht),X=qo(y),B=V.useRef();Oz(z);const q=V.useCallback(ee=>{S==null||S({x:ee[0],y:ee[1],zoom:ee[2]}),T||I.setState({transform:ee})},[S,T]);return V.useEffect(()=>{if(z.current){B.current=qA({domNode:z.current,minZoom:m,maxZoom:p,translateExtent:d,viewport:h,onDraggingChange:M=>I.setState(P=>P.paneDragging===M?P:{paneDragging:M}),onPanZoomStart:(M,P)=>{const{onViewportChangeStart:Q,onMoveStart:K}=I.getState();K==null||K(M,P),Q==null||Q(P)},onPanZoom:(M,P)=>{const{onViewportChange:Q,onMove:K}=I.getState();K==null||K(M,P),Q==null||Q(P)},onPanZoomEnd:(M,P)=>{const{onViewportChangeEnd:Q,onMoveEnd:K}=I.getState();K==null||K(M,P),Q==null||Q(P)}});const{x:ee,y:L,zoom:$}=B.current.getViewport();return I.setState({panZoom:B.current,transform:[ee,L,$],domNode:z.current.closest(".react-flow")}),()=>{var M;(M=B.current)==null||M.destroy()}}},[]),V.useEffect(()=>{var ee;(ee=B.current)==null||ee.update({onPaneContextMenu:e,zoomOnScroll:n,zoomOnPinch:r,panOnScroll:l,panOnScrollSpeed:a,panOnScrollMode:s,zoomOnDoubleClick:u,panOnDrag:f,zoomActivationKeyPressed:X,preventScrolling:v,noPanClassName:w,userSelectionActive:R,noWheelClassName:k,lib:D,onTransformChange:q,connectionInProgress:U,selectionOnDrag:A,paneClickDistance:E})},[e,n,r,l,a,s,u,f,X,v,w,R,k,D,q,U,A,E]),b.jsx("div",{className:"react-flow__renderer",ref:z,style:Nc,children:_})}const Lz=e=>({userSelectionActive:e.userSelectionActive,userSelectionRect:e.userSelectionRect});function Hz(){const{userSelectionActive:e,userSelectionRect:n}=Pe(Lz,ht);return e&&n?b.jsx("div",{className:"react-flow__selection react-flow__container",style:{width:n.width,height:n.height,transform:`translate(${n.x}px, ${n.y}px)`}}):null}const fh=(e,n)=>r=>{r.target===n.current&&(e==null||e(r))},Bz=e=>({userSelectionActive:e.userSelectionActive,elementsSelectable:e.elementsSelectable,connectionInProgress:e.connection.inProgress,dragging:e.paneDragging});function qz({isSelecting:e,selectionKeyPressed:n,selectionMode:r=Lo.Full,panOnDrag:l,paneClickDistance:a,selectionOnDrag:s,onSelectionStart:u,onSelectionEnd:f,onPaneClick:h,onPaneContextMenu:d,onPaneScroll:m,onPaneMouseEnter:p,onPaneMouseMove:y,onPaneMouseLeave:v,children:_}){const k=pt(),{userSelectionActive:w,elementsSelectable:S,dragging:T,connectionInProgress:E}=Pe(Bz,ht),A=S&&(e||w),I=V.useRef(null),z=V.useRef(),R=V.useRef(new Set),D=V.useRef(new Set),U=V.useRef(!1),X=Q=>{if(U.current||E){U.current=!1;return}h==null||h(Q),k.getState().resetSelectedElements(),k.setState({nodesSelectionActive:!1})},B=Q=>{if(Array.isArray(l)&&(l!=null&&l.includes(2))){Q.preventDefault();return}d==null||d(Q)},q=m?Q=>m(Q):void 0,ee=Q=>{U.current&&(Q.stopPropagation(),U.current=!1)},L=Q=>{var F,J;const{domNode:K}=k.getState();if(z.current=K==null?void 0:K.getBoundingClientRect(),!z.current)return;const j=Q.target===I.current;if(!j&&!!Q.target.closest(".nokey")||!e||!(s&&j||n)||Q.button!==0||!Q.isPrimary)return;(J=(F=Q.target)==null?void 0:F.setPointerCapture)==null||J.call(F,Q.pointerId),U.current=!1;const{x:N,y:G}=Vn(Q.nativeEvent,z.current);k.setState({userSelectionRect:{width:0,height:0,startX:N,startY:G,x:N,y:G}}),j||(Q.stopPropagation(),Q.preventDefault())},$=Q=>{const{userSelectionRect:K,transform:j,nodeLookup:H,edgeLookup:Y,connectionLookup:N,triggerNodeChanges:G,triggerEdgeChanges:F,defaultEdgeOptions:J,resetSelectedElements:ne}=k.getState();if(!z.current||!K)return;const{x:re,y:se}=Vn(Q.nativeEvent,z.current),{startX:ye,startY:be}=K;if(!U.current){const Ce=n?0:a;if(Math.hypot(re-ye,se-be)<=Ce)return;ne(),u==null||u(Q)}U.current=!0;const xe={startX:ye,startY:be,x:reCe.id)),D.current=new Set;const Me=(J==null?void 0:J.selectable)??!0;for(const Ce of R.current){const st=N.get(Ce);if(st)for(const{edgeId:tt}of st.values()){const zt=Y.get(tt);zt&&(zt.selectable??Me)&&D.current.add(tt)}}if(!av(pe,R.current)){const Ce=Kl(H,R.current,!0);G(Ce)}if(!av(_e,D.current)){const Ce=Kl(Y,D.current);F(Ce)}k.setState({userSelectionRect:xe,userSelectionActive:!0,nodesSelectionActive:!1})},M=Q=>{var K,j;Q.button===0&&((j=(K=Q.target)==null?void 0:K.releasePointerCapture)==null||j.call(K,Q.pointerId),!w&&Q.target===I.current&&k.getState().userSelectionRect&&(X==null||X(Q)),k.setState({userSelectionActive:!1,userSelectionRect:null}),U.current&&(f==null||f(Q),k.setState({nodesSelectionActive:R.current.size>0})))},P=l===!0||Array.isArray(l)&&l.includes(0);return b.jsxs("div",{className:At(["react-flow__pane",{draggable:P,dragging:T,selection:e}]),onClick:A?void 0:fh(X,I),onContextMenu:fh(B,I),onWheel:fh(q,I),onPointerEnter:A?void 0:p,onPointerMove:A?$:y,onPointerUp:A?M:void 0,onPointerDownCapture:A?L:void 0,onClickCapture:A?ee:void 0,onPointerLeave:v,ref:I,style:Nc,children:[_,b.jsx(Hz,{})]})}function Hp({id:e,store:n,unselect:r=!1,nodeRef:l}){const{addSelectedNodes:a,unselectNodesAndEdges:s,multiSelectionActive:u,nodeLookup:f,onError:h}=n.getState(),d=f.get(e);if(!d){h==null||h("012",rr.error012(e));return}n.setState({nodesSelectionActive:!1}),d.selected?(r||d.selected&&u)&&(s({nodes:[d],edges:[]}),requestAnimationFrame(()=>{var m;return(m=l==null?void 0:l.current)==null?void 0:m.blur()})):a([e])}function wS({nodeRef:e,disabled:n=!1,noDragClassName:r,handleSelector:l,nodeId:a,isSelectable:s,nodeClickDistance:u}){const f=pt(),[h,d]=V.useState(!1),m=V.useRef();return V.useEffect(()=>{m.current=NA({getStoreItems:()=>f.getState(),onNodeMouseDown:p=>{Hp({id:p,store:f,nodeRef:e})},onDragStart:()=>{d(!0)},onDragStop:()=>{d(!1)}})},[]),V.useEffect(()=>{if(!(n||!e.current||!m.current))return m.current.update({noDragClassName:r,handleSelector:l,domNode:e.current,isSelectable:s,nodeId:a,nodeClickDistance:u}),()=>{var p;(p=m.current)==null||p.destroy()}},[r,l,n,s,e,a,u]),h}const Uz=e=>n=>n.selected&&(n.draggable||e&&typeof n.draggable>"u");function SS(){const e=pt();return V.useCallback(r=>{const{nodeExtent:l,snapToGrid:a,snapGrid:s,nodesDraggable:u,onError:f,updateNodePositions:h,nodeLookup:d,nodeOrigin:m}=e.getState(),p=new Map,y=Uz(u),v=a?s[0]:5,_=a?s[1]:5,k=r.direction.x*v*r.factor,w=r.direction.y*_*r.factor;for(const[,S]of d){if(!y(S))continue;let T={x:S.internals.positionAbsolute.x+k,y:S.internals.positionAbsolute.y+w};a&&(T=Fo(T,s));const{position:E,positionAbsolute:A}=Vw({nodeId:S.id,nextPosition:T,nodeLookup:d,nodeExtent:l,nodeOrigin:m,onError:f});S.position=E,S.internals.positionAbsolute=A,p.set(S.id,S)}h(p)},[])}const xm=V.createContext(null),Iz=xm.Provider;xm.Consumer;const _S=()=>V.useContext(xm),Vz=e=>({connectOnClick:e.connectOnClick,noPanClassName:e.noPanClassName,rfId:e.rfId}),Gz=(e,n,r)=>l=>{const{connectionClickStartHandle:a,connectionMode:s,connection:u}=l,{fromHandle:f,toHandle:h,isValid:d}=u,m=(h==null?void 0:h.nodeId)===e&&(h==null?void 0:h.id)===n&&(h==null?void 0:h.type)===r;return{connectingFrom:(f==null?void 0:f.nodeId)===e&&(f==null?void 0:f.id)===n&&(f==null?void 0:f.type)===r,connectingTo:m,clickConnecting:(a==null?void 0:a.nodeId)===e&&(a==null?void 0:a.id)===n&&(a==null?void 0:a.type)===r,isPossibleEndHandle:s===aa.Strict?(f==null?void 0:f.type)!==r:e!==(f==null?void 0:f.nodeId)||n!==(f==null?void 0:f.id),connectionInProcess:!!f,clickConnectionInProcess:!!a,valid:m&&d}};function Pz({type:e="source",position:n=ve.Top,isValidConnection:r,isConnectable:l=!0,isConnectableStart:a=!0,isConnectableEnd:s=!0,id:u,onConnect:f,children:h,className:d,onMouseDown:m,onTouchStart:p,...y},v){var $,M;const _=u||null,k=e==="target",w=pt(),S=_S(),{connectOnClick:T,noPanClassName:E,rfId:A}=Pe(Vz,ht),{connectingFrom:I,connectingTo:z,clickConnecting:R,isPossibleEndHandle:D,connectionInProcess:U,clickConnectionInProcess:X,valid:B}=Pe(Gz(S,_,e),ht);S||(M=($=w.getState()).onError)==null||M.call($,"010",rr.error010());const q=P=>{const{defaultEdgeOptions:Q,onConnect:K,hasDefaultEdges:j}=w.getState(),H={...Q,...P};if(j){const{edges:Y,setEdges:N}=w.getState();N(uA(H,Y))}K==null||K(H),f==null||f(H)},ee=P=>{if(!S)return;const Q=Zw(P.nativeEvent);if(a&&(Q&&P.button===0||!Q)){const K=w.getState();Lp.onPointerDown(P.nativeEvent,{handleDomNode:P.currentTarget,autoPanOnConnect:K.autoPanOnConnect,connectionMode:K.connectionMode,connectionRadius:K.connectionRadius,domNode:K.domNode,nodeLookup:K.nodeLookup,lib:K.lib,isTarget:k,handleId:_,nodeId:S,flowId:K.rfId,panBy:K.panBy,cancelConnection:K.cancelConnection,onConnectStart:K.onConnectStart,onConnectEnd:(...j)=>{var H,Y;return(Y=(H=w.getState()).onConnectEnd)==null?void 0:Y.call(H,...j)},updateConnection:K.updateConnection,onConnect:q,isValidConnection:r||((...j)=>{var H,Y;return((Y=(H=w.getState()).isValidConnection)==null?void 0:Y.call(H,...j))??!0}),getTransform:()=>w.getState().transform,getFromHandle:()=>w.getState().connection.fromHandle,autoPanSpeed:K.autoPanSpeed,dragThreshold:K.connectionDragThreshold})}Q?m==null||m(P):p==null||p(P)},L=P=>{const{onClickConnectStart:Q,onClickConnectEnd:K,connectionClickStartHandle:j,connectionMode:H,isValidConnection:Y,lib:N,rfId:G,nodeLookup:F,connection:J}=w.getState();if(!S||!j&&!a)return;if(!j){Q==null||Q(P.nativeEvent,{nodeId:S,handleId:_,handleType:e}),w.setState({connectionClickStartHandle:{nodeId:S,type:e,id:_}});return}const ne=Fw(P.target),re=r||Y,{connection:se,isValid:ye}=Lp.isValid(P.nativeEvent,{handle:{nodeId:S,id:_,type:e},connectionMode:H,fromNodeId:j.nodeId,fromHandleId:j.id||null,fromType:j.type,isValidConnection:re,flowId:G,doc:ne,lib:N,nodeLookup:F});ye&&se&&q(se);const be=structuredClone(J);delete be.inProgress,be.toPosition=be.toHandle?be.toHandle.position:null,K==null||K(P,be),w.setState({connectionClickStartHandle:null})};return b.jsx("div",{"data-handleid":_,"data-nodeid":S,"data-handlepos":n,"data-id":`${A}-${S}-${_}-${e}`,className:At(["react-flow__handle",`react-flow__handle-${n}`,"nodrag",E,d,{source:!k,target:k,connectable:l,connectablestart:a,connectableend:s,clickconnecting:R,connectingfrom:I,connectingto:z,valid:B,connectionindicator:l&&(!U||D)&&(U||X?s:a)}]),onMouseDown:ee,onTouchStart:ee,onClick:T?L:void 0,ref:v,...y,children:h})}const Rt=V.memo(vS(Pz));function $z({data:e,isConnectable:n,sourcePosition:r=ve.Bottom}){return b.jsxs(b.Fragment,{children:[e==null?void 0:e.label,b.jsx(Rt,{type:"source",position:r,isConnectable:n})]})}function Yz({data:e,isConnectable:n,targetPosition:r=ve.Top,sourcePosition:l=ve.Bottom}){return b.jsxs(b.Fragment,{children:[b.jsx(Rt,{type:"target",position:r,isConnectable:n}),e==null?void 0:e.label,b.jsx(Rt,{type:"source",position:l,isConnectable:n})]})}function Xz(){return null}function Fz({data:e,isConnectable:n,targetPosition:r=ve.Top}){return b.jsxs(b.Fragment,{children:[b.jsx(Rt,{type:"target",position:r,isConnectable:n}),e==null?void 0:e.label]})}const oc={ArrowUp:{x:0,y:-1},ArrowDown:{x:0,y:1},ArrowLeft:{x:-1,y:0},ArrowRight:{x:1,y:0}},Lv={input:$z,default:Yz,output:Fz,group:Xz};function Qz(e){var n,r,l,a;return e.internals.handleBounds===void 0?{width:e.width??e.initialWidth??((n=e.style)==null?void 0:n.width),height:e.height??e.initialHeight??((r=e.style)==null?void 0:r.height)}:{width:e.width??((l=e.style)==null?void 0:l.width),height:e.height??((a=e.style)==null?void 0:a.height)}}const Zz=e=>{const{width:n,height:r,x:l,y:a}=Xo(e.nodeLookup,{filter:s=>!!s.selected});return{width:In(n)?n:null,height:In(r)?r:null,userSelectionActive:e.userSelectionActive,transformString:`translate(${e.transform[0]}px,${e.transform[1]}px) scale(${e.transform[2]}) translate(${l}px,${a}px)`}};function Kz({onSelectionContextMenu:e,noPanClassName:n,disableKeyboardA11y:r}){const l=pt(),{width:a,height:s,transformString:u,userSelectionActive:f}=Pe(Zz,ht),h=SS(),d=V.useRef(null);V.useEffect(()=>{var v;r||(v=d.current)==null||v.focus({preventScroll:!0})},[r]);const m=!f&&a!==null&&s!==null;if(wS({nodeRef:d,disabled:!m}),!m)return null;const p=e?v=>{const _=l.getState().nodes.filter(k=>k.selected);e(v,_)}:void 0,y=v=>{Object.prototype.hasOwnProperty.call(oc,v.key)&&(v.preventDefault(),h({direction:oc[v.key],factor:v.shiftKey?4:1}))};return b.jsx("div",{className:At(["react-flow__nodesselection","react-flow__container",n]),style:{transform:u},children:b.jsx("div",{ref:d,className:"react-flow__nodesselection-rect",onContextMenu:p,tabIndex:r?void 0:-1,onKeyDown:r?void 0:y,style:{width:a,height:s}})})}const Hv=typeof window<"u"?window:void 0,Jz=e=>({nodesSelectionActive:e.nodesSelectionActive,userSelectionActive:e.userSelectionActive});function ES({children:e,onPaneClick:n,onPaneMouseEnter:r,onPaneMouseMove:l,onPaneMouseLeave:a,onPaneContextMenu:s,onPaneScroll:u,paneClickDistance:f,deleteKeyCode:h,selectionKeyCode:d,selectionOnDrag:m,selectionMode:p,onSelectionStart:y,onSelectionEnd:v,multiSelectionKeyCode:_,panActivationKeyCode:k,zoomActivationKeyCode:w,elementsSelectable:S,zoomOnScroll:T,zoomOnPinch:E,panOnScroll:A,panOnScrollSpeed:I,panOnScrollMode:z,zoomOnDoubleClick:R,panOnDrag:D,defaultViewport:U,translateExtent:X,minZoom:B,maxZoom:q,preventScrolling:ee,onSelectionContextMenu:L,noWheelClassName:$,noPanClassName:M,disableKeyboardA11y:P,onViewportChange:Q,isControlledViewport:K}){const{nodesSelectionActive:j,userSelectionActive:H}=Pe(Jz,ht),Y=qo(d,{target:Hv}),N=qo(k,{target:Hv}),G=N||D,F=N||A,J=m&&G!==!0,ne=Y||H||J;return jz({deleteKeyCode:h,multiSelectionKeyCode:_}),b.jsx(Rz,{onPaneContextMenu:s,elementsSelectable:S,zoomOnScroll:T,zoomOnPinch:E,panOnScroll:F,panOnScrollSpeed:I,panOnScrollMode:z,zoomOnDoubleClick:R,panOnDrag:!Y&&G,defaultViewport:U,translateExtent:X,minZoom:B,maxZoom:q,zoomActivationKeyCode:w,preventScrolling:ee,noWheelClassName:$,noPanClassName:M,onViewportChange:Q,isControlledViewport:K,paneClickDistance:f,selectionOnDrag:J,children:b.jsxs(qz,{onSelectionStart:y,onSelectionEnd:v,onPaneClick:n,onPaneMouseEnter:r,onPaneMouseMove:l,onPaneMouseLeave:a,onPaneContextMenu:s,onPaneScroll:u,panOnDrag:G,isSelecting:!!ne,selectionMode:p,selectionKeyPressed:Y,paneClickDistance:f,selectionOnDrag:J,children:[e,j&&b.jsx(Kz,{onSelectionContextMenu:L,noPanClassName:M,disableKeyboardA11y:P})]})})}ES.displayName="FlowRenderer";const Wz=V.memo(ES),eM=e=>n=>e?um(n.nodeLookup,{x:0,y:0,width:n.width,height:n.height},n.transform,!0).map(r=>r.id):Array.from(n.nodeLookup.keys());function tM(e){return Pe(V.useCallback(eM(e),[e]),ht)}const nM=e=>e.updateNodeInternals;function rM(){const e=Pe(nM),[n]=V.useState(()=>typeof ResizeObserver>"u"?null:new ResizeObserver(r=>{const l=new Map;r.forEach(a=>{const s=a.target.getAttribute("data-id");l.set(s,{id:s,nodeElement:a.target,force:!0})}),e(l)}));return V.useEffect(()=>()=>{n==null||n.disconnect()},[n]),n}function iM({node:e,nodeType:n,hasDimensions:r,resizeObserver:l}){const a=pt(),s=V.useRef(null),u=V.useRef(null),f=V.useRef(e.sourcePosition),h=V.useRef(e.targetPosition),d=V.useRef(n),m=r&&!!e.internals.handleBounds;return V.useEffect(()=>{s.current&&!e.hidden&&(!m||u.current!==s.current)&&(u.current&&(l==null||l.unobserve(u.current)),l==null||l.observe(s.current),u.current=s.current)},[m,e.hidden]),V.useEffect(()=>()=>{u.current&&(l==null||l.unobserve(u.current),u.current=null)},[]),V.useEffect(()=>{if(s.current){const p=d.current!==n,y=f.current!==e.sourcePosition,v=h.current!==e.targetPosition;(p||y||v)&&(d.current=n,f.current=e.sourcePosition,h.current=e.targetPosition,a.getState().updateNodeInternals(new Map([[e.id,{id:e.id,nodeElement:s.current,force:!0}]])))}},[e.id,n,e.sourcePosition,e.targetPosition]),s}function lM({id:e,onClick:n,onMouseEnter:r,onMouseMove:l,onMouseLeave:a,onContextMenu:s,onDoubleClick:u,nodesDraggable:f,elementsSelectable:h,nodesConnectable:d,nodesFocusable:m,resizeObserver:p,noDragClassName:y,noPanClassName:v,disableKeyboardA11y:_,rfId:k,nodeTypes:w,nodeClickDistance:S,onError:T}){const{node:E,internals:A,isParent:I}=Pe(re=>{const se=re.nodeLookup.get(e),ye=re.parentLookup.has(e);return{node:se,internals:se.internals,isParent:ye}},ht);let z=E.type||"default",R=(w==null?void 0:w[z])||Lv[z];R===void 0&&(T==null||T("003",rr.error003(z)),z="default",R=(w==null?void 0:w.default)||Lv.default);const D=!!(E.draggable||f&&typeof E.draggable>"u"),U=!!(E.selectable||h&&typeof E.selectable>"u"),X=!!(E.connectable||d&&typeof E.connectable>"u"),B=!!(E.focusable||m&&typeof E.focusable>"u"),q=pt(),ee=Yw(E),L=iM({node:E,nodeType:z,hasDimensions:ee,resizeObserver:p}),$=wS({nodeRef:L,disabled:E.hidden||!D,noDragClassName:y,handleSelector:E.dragHandle,nodeId:e,isSelectable:U,nodeClickDistance:S}),M=SS();if(E.hidden)return null;const P=Or(E),Q=Qz(E),K=U||D||n||r||l||a,j=r?re=>r(re,{...A.userNode}):void 0,H=l?re=>l(re,{...A.userNode}):void 0,Y=a?re=>a(re,{...A.userNode}):void 0,N=s?re=>s(re,{...A.userNode}):void 0,G=u?re=>u(re,{...A.userNode}):void 0,F=re=>{const{selectNodesOnDrag:se,nodeDragThreshold:ye}=q.getState();U&&(!se||!D||ye>0)&&Hp({id:e,store:q,nodeRef:L}),n&&n(re,{...A.userNode})},J=re=>{if(!(Qw(re.nativeEvent)||_)){if(Hw.includes(re.key)&&U){const se=re.key==="Escape";Hp({id:e,store:q,unselect:se,nodeRef:L})}else if(D&&E.selected&&Object.prototype.hasOwnProperty.call(oc,re.key)){re.preventDefault();const{ariaLabelConfig:se}=q.getState();q.setState({ariaLiveMessage:se["node.a11yDescription.ariaLiveMessage"]({direction:re.key.replace("Arrow","").toLowerCase(),x:~~A.positionAbsolute.x,y:~~A.positionAbsolute.y})}),M({direction:oc[re.key],factor:re.shiftKey?4:1})}}},ne=()=>{var _e;if(_||!((_e=L.current)!=null&&_e.matches(":focus-visible")))return;const{transform:re,width:se,height:ye,autoPanOnNodeFocus:be,setCenter:xe}=q.getState();if(!be)return;um(new Map([[e,E]]),{x:0,y:0,width:se,height:ye},re,!0).length>0||xe(E.position.x+P.width/2,E.position.y+P.height/2,{zoom:re[2]})};return b.jsx("div",{className:At(["react-flow__node",`react-flow__node-${z}`,{[v]:D},E.className,{selected:E.selected,selectable:U,parent:I,draggable:D,dragging:$}]),ref:L,style:{zIndex:A.z,transform:`translate(${A.positionAbsolute.x}px,${A.positionAbsolute.y}px)`,pointerEvents:K?"all":"none",visibility:ee?"visible":"hidden",...E.style,...Q},"data-id":e,"data-testid":`rf__node-${e}`,onMouseEnter:j,onMouseMove:H,onMouseLeave:Y,onContextMenu:N,onClick:F,onDoubleClick:G,onKeyDown:B?J:void 0,tabIndex:B?0:void 0,onFocus:B?ne:void 0,role:E.ariaRole??(B?"group":void 0),"aria-roledescription":"node","aria-describedby":_?void 0:`${hS}-${k}`,"aria-label":E.ariaLabel,...E.domAttributes,children:b.jsx(Iz,{value:e,children:b.jsx(R,{id:e,data:E.data,type:z,positionAbsoluteX:A.positionAbsolute.x,positionAbsoluteY:A.positionAbsolute.y,selected:E.selected??!1,selectable:U,draggable:D,deletable:E.deletable??!0,isConnectable:X,sourcePosition:E.sourcePosition,targetPosition:E.targetPosition,dragging:$,dragHandle:E.dragHandle,zIndex:A.z,parentId:E.parentId,...P})})})}var aM=V.memo(lM);const oM=e=>({nodesDraggable:e.nodesDraggable,nodesConnectable:e.nodesConnectable,nodesFocusable:e.nodesFocusable,elementsSelectable:e.elementsSelectable,onError:e.onError});function NS(e){const{nodesDraggable:n,nodesConnectable:r,nodesFocusable:l,elementsSelectable:a,onError:s}=Pe(oM,ht),u=tM(e.onlyRenderVisibleElements),f=rM();return b.jsx("div",{className:"react-flow__nodes",style:Nc,children:u.map(h=>b.jsx(aM,{id:h,nodeTypes:e.nodeTypes,nodeExtent:e.nodeExtent,onClick:e.onNodeClick,onMouseEnter:e.onNodeMouseEnter,onMouseMove:e.onNodeMouseMove,onMouseLeave:e.onNodeMouseLeave,onContextMenu:e.onNodeContextMenu,onDoubleClick:e.onNodeDoubleClick,noDragClassName:e.noDragClassName,noPanClassName:e.noPanClassName,rfId:e.rfId,disableKeyboardA11y:e.disableKeyboardA11y,resizeObserver:f,nodesDraggable:n,nodesConnectable:r,nodesFocusable:l,elementsSelectable:a,nodeClickDistance:e.nodeClickDistance,onError:s},h))})}NS.displayName="NodeRenderer";const sM=V.memo(NS);function uM(e){return Pe(V.useCallback(r=>{if(!e)return r.edges.map(a=>a.id);const l=[];if(r.width&&r.height)for(const a of r.edges){const s=r.nodeLookup.get(a.source),u=r.nodeLookup.get(a.target);s&&u&&aA({sourceNode:s,targetNode:u,width:r.width,height:r.height,transform:r.transform})&&l.push(a.id)}return l},[e]),ht)}const cM=({color:e="none",strokeWidth:n=1})=>{const r={strokeWidth:n,...e&&{stroke:e}};return b.jsx("polyline",{className:"arrow",style:r,strokeLinecap:"round",fill:"none",strokeLinejoin:"round",points:"-5,-4 0,0 -5,4"})},fM=({color:e="none",strokeWidth:n=1})=>{const r={strokeWidth:n,...e&&{stroke:e,fill:e}};return b.jsx("polyline",{className:"arrowclosed",style:r,strokeLinecap:"round",strokeLinejoin:"round",points:"-5,-4 0,0 -5,4 -5,-4"})},Bv={[ic.Arrow]:cM,[ic.ArrowClosed]:fM};function dM(e){const n=pt();return V.useMemo(()=>{var a,s;return Object.prototype.hasOwnProperty.call(Bv,e)?Bv[e]:((s=(a=n.getState()).onError)==null||s.call(a,"009",rr.error009(e)),null)},[e])}const hM=({id:e,type:n,color:r,width:l=12.5,height:a=12.5,markerUnits:s="strokeWidth",strokeWidth:u,orient:f="auto-start-reverse"})=>{const h=dM(n);return h?b.jsx("marker",{className:"react-flow__arrowhead",id:e,markerWidth:`${l}`,markerHeight:`${a}`,viewBox:"-10 -10 20 20",markerUnits:s,orient:f,refX:"0",refY:"0",children:b.jsx(h,{color:r,strokeWidth:u})}):null},kS=({defaultColor:e,rfId:n})=>{const r=Pe(s=>s.edges),l=Pe(s=>s.defaultEdgeOptions),a=V.useMemo(()=>pA(r,{id:n,defaultColor:e,defaultMarkerStart:l==null?void 0:l.markerStart,defaultMarkerEnd:l==null?void 0:l.markerEnd}),[r,l,n,e]);return a.length?b.jsx("svg",{className:"react-flow__marker","aria-hidden":"true",children:b.jsx("defs",{children:a.map(s=>b.jsx(hM,{id:s.id,type:s.type,color:s.color,width:s.width,height:s.height,markerUnits:s.markerUnits,strokeWidth:s.strokeWidth,orient:s.orient},s.id))})}):null};kS.displayName="MarkerDefinitions";var pM=V.memo(kS);function CS({x:e,y:n,label:r,labelStyle:l,labelShowBg:a=!0,labelBgStyle:s,labelBgPadding:u=[2,4],labelBgBorderRadius:f=2,children:h,className:d,...m}){const[p,y]=V.useState({x:1,y:0,width:0,height:0}),v=At(["react-flow__edge-textwrapper",d]),_=V.useRef(null);return V.useEffect(()=>{if(_.current){const k=_.current.getBBox();y({x:k.x,y:k.y,width:k.width,height:k.height})}},[r]),r?b.jsxs("g",{transform:`translate(${e-p.width/2} ${n-p.height/2})`,className:v,visibility:p.width?"visible":"hidden",...m,children:[a&&b.jsx("rect",{width:p.width+2*u[0],x:-u[0],y:-u[1],height:p.height+2*u[1],className:"react-flow__edge-textbg",style:s,rx:f,ry:f}),b.jsx("text",{className:"react-flow__edge-text",y:p.height/2,dy:"0.3em",ref:_,style:l,children:r}),h]}):null}CS.displayName="EdgeText";const mM=V.memo(CS);function Zo({path:e,labelX:n,labelY:r,label:l,labelStyle:a,labelShowBg:s,labelBgStyle:u,labelBgPadding:f,labelBgBorderRadius:h,interactionWidth:d=20,...m}){return b.jsxs(b.Fragment,{children:[b.jsx("path",{...m,d:e,fill:"none",className:At(["react-flow__edge-path",m.className])}),d?b.jsx("path",{d:e,fill:"none",strokeOpacity:0,strokeWidth:d,className:"react-flow__edge-interaction"}):null,l&&In(n)&&In(r)?b.jsx(mM,{x:n,y:r,label:l,labelStyle:a,labelShowBg:s,labelBgStyle:u,labelBgPadding:f,labelBgBorderRadius:h}):null]})}function qv({pos:e,x1:n,y1:r,x2:l,y2:a}){return e===ve.Left||e===ve.Right?[.5*(n+l),r]:[n,.5*(r+a)]}function TS({sourceX:e,sourceY:n,sourcePosition:r=ve.Bottom,targetX:l,targetY:a,targetPosition:s=ve.Top}){const[u,f]=qv({pos:r,x1:e,y1:n,x2:l,y2:a}),[h,d]=qv({pos:s,x1:l,y1:a,x2:e,y2:n}),[m,p,y,v]=Kw({sourceX:e,sourceY:n,targetX:l,targetY:a,sourceControlX:u,sourceControlY:f,targetControlX:h,targetControlY:d});return[`M${e},${n} C${u},${f} ${h},${d} ${l},${a}`,m,p,y,v]}function AS(e){return V.memo(({id:n,sourceX:r,sourceY:l,targetX:a,targetY:s,sourcePosition:u,targetPosition:f,label:h,labelStyle:d,labelShowBg:m,labelBgStyle:p,labelBgPadding:y,labelBgBorderRadius:v,style:_,markerEnd:k,markerStart:w,interactionWidth:S})=>{const[T,E,A]=TS({sourceX:r,sourceY:l,sourcePosition:u,targetX:a,targetY:s,targetPosition:f}),I=e.isInternal?void 0:n;return b.jsx(Zo,{id:I,path:T,labelX:E,labelY:A,label:h,labelStyle:d,labelShowBg:m,labelBgStyle:p,labelBgPadding:y,labelBgBorderRadius:v,style:_,markerEnd:k,markerStart:w,interactionWidth:S})})}const gM=AS({isInternal:!1}),zS=AS({isInternal:!0});gM.displayName="SimpleBezierEdge";zS.displayName="SimpleBezierEdgeInternal";function MS(e){return V.memo(({id:n,sourceX:r,sourceY:l,targetX:a,targetY:s,label:u,labelStyle:f,labelShowBg:h,labelBgStyle:d,labelBgPadding:m,labelBgBorderRadius:p,style:y,sourcePosition:v=ve.Bottom,targetPosition:_=ve.Top,markerEnd:k,markerStart:w,pathOptions:S,interactionWidth:T})=>{const[E,A,I]=Op({sourceX:r,sourceY:l,sourcePosition:v,targetX:a,targetY:s,targetPosition:_,borderRadius:S==null?void 0:S.borderRadius,offset:S==null?void 0:S.offset,stepPosition:S==null?void 0:S.stepPosition}),z=e.isInternal?void 0:n;return b.jsx(Zo,{id:z,path:E,labelX:A,labelY:I,label:u,labelStyle:f,labelShowBg:h,labelBgStyle:d,labelBgPadding:m,labelBgBorderRadius:p,style:y,markerEnd:k,markerStart:w,interactionWidth:T})})}const jS=MS({isInternal:!1}),OS=MS({isInternal:!0});jS.displayName="SmoothStepEdge";OS.displayName="SmoothStepEdgeInternal";function DS(e){return V.memo(({id:n,...r})=>{var a;const l=e.isInternal?void 0:n;return b.jsx(jS,{...r,id:l,pathOptions:V.useMemo(()=>{var s;return{borderRadius:0,offset:(s=r.pathOptions)==null?void 0:s.offset}},[(a=r.pathOptions)==null?void 0:a.offset])})})}const yM=DS({isInternal:!1}),RS=DS({isInternal:!0});yM.displayName="StepEdge";RS.displayName="StepEdgeInternal";function LS(e){return V.memo(({id:n,sourceX:r,sourceY:l,targetX:a,targetY:s,label:u,labelStyle:f,labelShowBg:h,labelBgStyle:d,labelBgPadding:m,labelBgBorderRadius:p,style:y,markerEnd:v,markerStart:_,interactionWidth:k})=>{const[w,S,T]=Ww({sourceX:r,sourceY:l,targetX:a,targetY:s}),E=e.isInternal?void 0:n;return b.jsx(Zo,{id:E,path:w,labelX:S,labelY:T,label:u,labelStyle:f,labelShowBg:h,labelBgStyle:d,labelBgPadding:m,labelBgBorderRadius:p,style:y,markerEnd:v,markerStart:_,interactionWidth:k})})}const xM=LS({isInternal:!1}),HS=LS({isInternal:!0});xM.displayName="StraightEdge";HS.displayName="StraightEdgeInternal";function BS(e){return V.memo(({id:n,sourceX:r,sourceY:l,targetX:a,targetY:s,sourcePosition:u=ve.Bottom,targetPosition:f=ve.Top,label:h,labelStyle:d,labelShowBg:m,labelBgStyle:p,labelBgPadding:y,labelBgBorderRadius:v,style:_,markerEnd:k,markerStart:w,pathOptions:S,interactionWidth:T})=>{const[E,A,I]=dm({sourceX:r,sourceY:l,sourcePosition:u,targetX:a,targetY:s,targetPosition:f,curvature:S==null?void 0:S.curvature}),z=e.isInternal?void 0:n;return b.jsx(Zo,{id:z,path:E,labelX:A,labelY:I,label:h,labelStyle:d,labelShowBg:m,labelBgStyle:p,labelBgPadding:y,labelBgBorderRadius:v,style:_,markerEnd:k,markerStart:w,interactionWidth:T})})}const vM=BS({isInternal:!1}),qS=BS({isInternal:!0});vM.displayName="BezierEdge";qS.displayName="BezierEdgeInternal";const Uv={default:qS,straight:HS,step:RS,smoothstep:OS,simplebezier:zS},Iv={sourceX:null,sourceY:null,targetX:null,targetY:null,sourcePosition:null,targetPosition:null},bM=(e,n,r)=>r===ve.Left?e-n:r===ve.Right?e+n:e,wM=(e,n,r)=>r===ve.Top?e-n:r===ve.Bottom?e+n:e,Vv="react-flow__edgeupdater";function Gv({position:e,centerX:n,centerY:r,radius:l=10,onMouseDown:a,onMouseEnter:s,onMouseOut:u,type:f}){return b.jsx("circle",{onMouseDown:a,onMouseEnter:s,onMouseOut:u,className:At([Vv,`${Vv}-${f}`]),cx:bM(n,l,e),cy:wM(r,l,e),r:l,stroke:"transparent",fill:"transparent"})}function SM({isReconnectable:e,reconnectRadius:n,edge:r,sourceX:l,sourceY:a,targetX:s,targetY:u,sourcePosition:f,targetPosition:h,onReconnect:d,onReconnectStart:m,onReconnectEnd:p,setReconnecting:y,setUpdateHover:v}){const _=pt(),k=(A,I)=>{if(A.button!==0)return;const{autoPanOnConnect:z,domNode:R,connectionMode:D,connectionRadius:U,lib:X,onConnectStart:B,cancelConnection:q,nodeLookup:ee,rfId:L,panBy:$,updateConnection:M}=_.getState(),P=I.type==="target",Q=(H,Y)=>{y(!1),p==null||p(H,r,I.type,Y)},K=H=>d==null?void 0:d(r,H),j=(H,Y)=>{y(!0),m==null||m(A,r,I.type),B==null||B(H,Y)};Lp.onPointerDown(A.nativeEvent,{autoPanOnConnect:z,connectionMode:D,connectionRadius:U,domNode:R,handleId:I.id,nodeId:I.nodeId,nodeLookup:ee,isTarget:P,edgeUpdaterType:I.type,lib:X,flowId:L,cancelConnection:q,panBy:$,isValidConnection:(...H)=>{var Y,N;return((N=(Y=_.getState()).isValidConnection)==null?void 0:N.call(Y,...H))??!0},onConnect:K,onConnectStart:j,onConnectEnd:(...H)=>{var Y,N;return(N=(Y=_.getState()).onConnectEnd)==null?void 0:N.call(Y,...H)},onReconnectEnd:Q,updateConnection:M,getTransform:()=>_.getState().transform,getFromHandle:()=>_.getState().connection.fromHandle,dragThreshold:_.getState().connectionDragThreshold,handleDomNode:A.currentTarget})},w=A=>k(A,{nodeId:r.target,id:r.targetHandle??null,type:"target"}),S=A=>k(A,{nodeId:r.source,id:r.sourceHandle??null,type:"source"}),T=()=>v(!0),E=()=>v(!1);return b.jsxs(b.Fragment,{children:[(e===!0||e==="source")&&b.jsx(Gv,{position:f,centerX:l,centerY:a,radius:n,onMouseDown:w,onMouseEnter:T,onMouseOut:E,type:"source"}),(e===!0||e==="target")&&b.jsx(Gv,{position:h,centerX:s,centerY:u,radius:n,onMouseDown:S,onMouseEnter:T,onMouseOut:E,type:"target"})]})}function _M({id:e,edgesFocusable:n,edgesReconnectable:r,elementsSelectable:l,onClick:a,onDoubleClick:s,onContextMenu:u,onMouseEnter:f,onMouseMove:h,onMouseLeave:d,reconnectRadius:m,onReconnect:p,onReconnectStart:y,onReconnectEnd:v,rfId:_,edgeTypes:k,noPanClassName:w,onError:S,disableKeyboardA11y:T}){let E=Pe(xe=>xe.edgeLookup.get(e));const A=Pe(xe=>xe.defaultEdgeOptions);E=A?{...A,...E}:E;let I=E.type||"default",z=(k==null?void 0:k[I])||Uv[I];z===void 0&&(S==null||S("011",rr.error011(I)),I="default",z=(k==null?void 0:k.default)||Uv.default);const R=!!(E.focusable||n&&typeof E.focusable>"u"),D=typeof p<"u"&&(E.reconnectable||r&&typeof E.reconnectable>"u"),U=!!(E.selectable||l&&typeof E.selectable>"u"),X=V.useRef(null),[B,q]=V.useState(!1),[ee,L]=V.useState(!1),$=pt(),{zIndex:M,sourceX:P,sourceY:Q,targetX:K,targetY:j,sourcePosition:H,targetPosition:Y}=Pe(V.useCallback(xe=>{const pe=xe.nodeLookup.get(E.source),_e=xe.nodeLookup.get(E.target);if(!pe||!_e)return{zIndex:E.zIndex,...Iv};const Me=hA({id:e,sourceNode:pe,targetNode:_e,sourceHandle:E.sourceHandle||null,targetHandle:E.targetHandle||null,connectionMode:xe.connectionMode,onError:S});return{zIndex:lA({selected:E.selected,zIndex:E.zIndex,sourceNode:pe,targetNode:_e,elevateOnSelect:xe.elevateEdgesOnSelect,zIndexMode:xe.zIndexMode}),...Me||Iv}},[E.source,E.target,E.sourceHandle,E.targetHandle,E.selected,E.zIndex]),ht),N=V.useMemo(()=>E.markerStart?`url('#${Dp(E.markerStart,_)}')`:void 0,[E.markerStart,_]),G=V.useMemo(()=>E.markerEnd?`url('#${Dp(E.markerEnd,_)}')`:void 0,[E.markerEnd,_]);if(E.hidden||P===null||Q===null||K===null||j===null)return null;const F=xe=>{var Ce;const{addSelectedEdges:pe,unselectNodesAndEdges:_e,multiSelectionActive:Me}=$.getState();U&&($.setState({nodesSelectionActive:!1}),E.selected&&Me?(_e({nodes:[],edges:[E]}),(Ce=X.current)==null||Ce.blur()):pe([e])),a&&a(xe,E)},J=s?xe=>{s(xe,{...E})}:void 0,ne=u?xe=>{u(xe,{...E})}:void 0,re=f?xe=>{f(xe,{...E})}:void 0,se=h?xe=>{h(xe,{...E})}:void 0,ye=d?xe=>{d(xe,{...E})}:void 0,be=xe=>{var pe;if(!T&&Hw.includes(xe.key)&&U){const{unselectNodesAndEdges:_e,addSelectedEdges:Me}=$.getState();xe.key==="Escape"?((pe=X.current)==null||pe.blur(),_e({edges:[E]})):Me([e])}};return b.jsx("svg",{style:{zIndex:M},children:b.jsxs("g",{className:At(["react-flow__edge",`react-flow__edge-${I}`,E.className,w,{selected:E.selected,animated:E.animated,inactive:!U&&!a,updating:B,selectable:U}]),onClick:F,onDoubleClick:J,onContextMenu:ne,onMouseEnter:re,onMouseMove:se,onMouseLeave:ye,onKeyDown:R?be:void 0,tabIndex:R?0:void 0,role:E.ariaRole??(R?"group":"img"),"aria-roledescription":"edge","data-id":e,"data-testid":`rf__edge-${e}`,"aria-label":E.ariaLabel===null?void 0:E.ariaLabel||`Edge from ${E.source} to ${E.target}`,"aria-describedby":R?`${pS}-${_}`:void 0,ref:X,...E.domAttributes,children:[!ee&&b.jsx(z,{id:e,source:E.source,target:E.target,type:E.type,selected:E.selected,animated:E.animated,selectable:U,deletable:E.deletable??!0,label:E.label,labelStyle:E.labelStyle,labelShowBg:E.labelShowBg,labelBgStyle:E.labelBgStyle,labelBgPadding:E.labelBgPadding,labelBgBorderRadius:E.labelBgBorderRadius,sourceX:P,sourceY:Q,targetX:K,targetY:j,sourcePosition:H,targetPosition:Y,data:E.data,style:E.style,sourceHandleId:E.sourceHandle,targetHandleId:E.targetHandle,markerStart:N,markerEnd:G,pathOptions:"pathOptions"in E?E.pathOptions:void 0,interactionWidth:E.interactionWidth}),D&&b.jsx(SM,{edge:E,isReconnectable:D,reconnectRadius:m,onReconnect:p,onReconnectStart:y,onReconnectEnd:v,sourceX:P,sourceY:Q,targetX:K,targetY:j,sourcePosition:H,targetPosition:Y,setUpdateHover:q,setReconnecting:L})]})})}var EM=V.memo(_M);const NM=e=>({edgesFocusable:e.edgesFocusable,edgesReconnectable:e.edgesReconnectable,elementsSelectable:e.elementsSelectable,connectionMode:e.connectionMode,onError:e.onError});function US({defaultMarkerColor:e,onlyRenderVisibleElements:n,rfId:r,edgeTypes:l,noPanClassName:a,onReconnect:s,onEdgeContextMenu:u,onEdgeMouseEnter:f,onEdgeMouseMove:h,onEdgeMouseLeave:d,onEdgeClick:m,reconnectRadius:p,onEdgeDoubleClick:y,onReconnectStart:v,onReconnectEnd:_,disableKeyboardA11y:k}){const{edgesFocusable:w,edgesReconnectable:S,elementsSelectable:T,onError:E}=Pe(NM,ht),A=uM(n);return b.jsxs("div",{className:"react-flow__edges",children:[b.jsx(pM,{defaultColor:e,rfId:r}),A.map(I=>b.jsx(EM,{id:I,edgesFocusable:w,edgesReconnectable:S,elementsSelectable:T,noPanClassName:a,onReconnect:s,onContextMenu:u,onMouseEnter:f,onMouseMove:h,onMouseLeave:d,onClick:m,reconnectRadius:p,onDoubleClick:y,onReconnectStart:v,onReconnectEnd:_,rfId:r,onError:E,edgeTypes:l,disableKeyboardA11y:k},I))]})}US.displayName="EdgeRenderer";const kM=V.memo(US),CM=e=>`translate(${e.transform[0]}px,${e.transform[1]}px) scale(${e.transform[2]})`;function TM({children:e}){const n=Pe(CM);return b.jsx("div",{className:"react-flow__viewport xyflow__viewport react-flow__container",style:{transform:n},children:e})}function AM(e){const n=el(),r=V.useRef(!1);V.useEffect(()=>{!r.current&&n.viewportInitialized&&e&&(setTimeout(()=>e(n),1),r.current=!0)},[e,n.viewportInitialized])}const zM=e=>{var n;return(n=e.panZoom)==null?void 0:n.syncViewport};function MM(e){const n=Pe(zM),r=pt();return V.useEffect(()=>{e&&(n==null||n(e),r.setState({transform:[e.x,e.y,e.zoom]}))},[e,n]),null}function jM(e){return e.connection.inProgress?{...e.connection,to:Qo(e.connection.to,e.transform)}:{...e.connection}}function OM(e){return jM}function DM(e){const n=OM();return Pe(n,ht)}const RM=e=>({nodesConnectable:e.nodesConnectable,isValid:e.connection.isValid,inProgress:e.connection.inProgress,width:e.width,height:e.height});function LM({containerStyle:e,style:n,type:r,component:l}){const{nodesConnectable:a,width:s,height:u,isValid:f,inProgress:h}=Pe(RM,ht);return!(s&&a&&h)?null:b.jsx("svg",{style:e,width:s,height:u,className:"react-flow__connectionline react-flow__container",children:b.jsx("g",{className:At(["react-flow__connection",Uw(f)]),children:b.jsx(IS,{style:n,type:r,CustomComponent:l,isValid:f})})})}const IS=({style:e,type:n=pi.Bezier,CustomComponent:r,isValid:l})=>{const{inProgress:a,from:s,fromNode:u,fromHandle:f,fromPosition:h,to:d,toNode:m,toHandle:p,toPosition:y,pointer:v}=DM();if(!a)return;if(r)return b.jsx(r,{connectionLineType:n,connectionLineStyle:e,fromNode:u,fromHandle:f,fromX:s.x,fromY:s.y,toX:d.x,toY:d.y,fromPosition:h,toPosition:y,connectionStatus:Uw(l),toNode:m,toHandle:p,pointer:v});let _="";const k={sourceX:s.x,sourceY:s.y,sourcePosition:h,targetX:d.x,targetY:d.y,targetPosition:y};switch(n){case pi.Bezier:[_]=dm(k);break;case pi.SimpleBezier:[_]=TS(k);break;case pi.Step:[_]=Op({...k,borderRadius:0});break;case pi.SmoothStep:[_]=Op(k);break;default:[_]=Ww(k)}return b.jsx("path",{d:_,fill:"none",className:"react-flow__connection-path",style:e})};IS.displayName="ConnectionLine";const HM={};function Pv(e=HM){V.useRef(e),pt(),V.useEffect(()=>{},[e])}function BM(){pt(),V.useRef(!1),V.useEffect(()=>{},[])}function VS({nodeTypes:e,edgeTypes:n,onInit:r,onNodeClick:l,onEdgeClick:a,onNodeDoubleClick:s,onEdgeDoubleClick:u,onNodeMouseEnter:f,onNodeMouseMove:h,onNodeMouseLeave:d,onNodeContextMenu:m,onSelectionContextMenu:p,onSelectionStart:y,onSelectionEnd:v,connectionLineType:_,connectionLineStyle:k,connectionLineComponent:w,connectionLineContainerStyle:S,selectionKeyCode:T,selectionOnDrag:E,selectionMode:A,multiSelectionKeyCode:I,panActivationKeyCode:z,zoomActivationKeyCode:R,deleteKeyCode:D,onlyRenderVisibleElements:U,elementsSelectable:X,defaultViewport:B,translateExtent:q,minZoom:ee,maxZoom:L,preventScrolling:$,defaultMarkerColor:M,zoomOnScroll:P,zoomOnPinch:Q,panOnScroll:K,panOnScrollSpeed:j,panOnScrollMode:H,zoomOnDoubleClick:Y,panOnDrag:N,onPaneClick:G,onPaneMouseEnter:F,onPaneMouseMove:J,onPaneMouseLeave:ne,onPaneScroll:re,onPaneContextMenu:se,paneClickDistance:ye,nodeClickDistance:be,onEdgeContextMenu:xe,onEdgeMouseEnter:pe,onEdgeMouseMove:_e,onEdgeMouseLeave:Me,reconnectRadius:Ce,onReconnect:st,onReconnectStart:tt,onReconnectEnd:zt,noDragClassName:Vt,noWheelClassName:Lt,noPanClassName:Sn,disableKeyboardA11y:jn,nodeExtent:Mt,rfId:Dr,viewport:ue,onViewportChange:ge}){return Pv(e),Pv(n),BM(),AM(r),MM(ue),b.jsx(Wz,{onPaneClick:G,onPaneMouseEnter:F,onPaneMouseMove:J,onPaneMouseLeave:ne,onPaneContextMenu:se,onPaneScroll:re,paneClickDistance:ye,deleteKeyCode:D,selectionKeyCode:T,selectionOnDrag:E,selectionMode:A,onSelectionStart:y,onSelectionEnd:v,multiSelectionKeyCode:I,panActivationKeyCode:z,zoomActivationKeyCode:R,elementsSelectable:X,zoomOnScroll:P,zoomOnPinch:Q,zoomOnDoubleClick:Y,panOnScroll:K,panOnScrollSpeed:j,panOnScrollMode:H,panOnDrag:N,defaultViewport:B,translateExtent:q,minZoom:ee,maxZoom:L,onSelectionContextMenu:p,preventScrolling:$,noDragClassName:Vt,noWheelClassName:Lt,noPanClassName:Sn,disableKeyboardA11y:jn,onViewportChange:ge,isControlledViewport:!!ue,children:b.jsxs(TM,{children:[b.jsx(kM,{edgeTypes:n,onEdgeClick:a,onEdgeDoubleClick:u,onReconnect:st,onReconnectStart:tt,onReconnectEnd:zt,onlyRenderVisibleElements:U,onEdgeContextMenu:xe,onEdgeMouseEnter:pe,onEdgeMouseMove:_e,onEdgeMouseLeave:Me,reconnectRadius:Ce,defaultMarkerColor:M,noPanClassName:Sn,disableKeyboardA11y:jn,rfId:Dr}),b.jsx(LM,{style:k,type:_,component:w,containerStyle:S}),b.jsx("div",{className:"react-flow__edgelabel-renderer"}),b.jsx(sM,{nodeTypes:e,onNodeClick:l,onNodeDoubleClick:s,onNodeMouseEnter:f,onNodeMouseMove:h,onNodeMouseLeave:d,onNodeContextMenu:m,nodeClickDistance:be,onlyRenderVisibleElements:U,noPanClassName:Sn,noDragClassName:Vt,disableKeyboardA11y:jn,nodeExtent:Mt,rfId:Dr}),b.jsx("div",{className:"react-flow__viewport-portal"})]})})}VS.displayName="GraphView";const qM=V.memo(VS),$v=({nodes:e,edges:n,defaultNodes:r,defaultEdges:l,width:a,height:s,fitView:u,fitViewOptions:f,minZoom:h=.5,maxZoom:d=2,nodeOrigin:m,nodeExtent:p,zIndexMode:y="basic"}={})=>{const v=new Map,_=new Map,k=new Map,w=new Map,S=l??n??[],T=r??e??[],E=m??[0,0],A=p??Ro;nS(k,w,S);const I=Rp(T,v,_,{nodeOrigin:E,nodeExtent:A,zIndexMode:y});let z=[0,0,1];if(u&&a&&s){const R=Xo(v,{filter:B=>!!((B.width||B.initialWidth)&&(B.height||B.initialHeight))}),{x:D,y:U,zoom:X}=cm(R,a,s,h,d,(f==null?void 0:f.padding)??.1);z=[D,U,X]}return{rfId:"1",width:a??0,height:s??0,transform:z,nodes:T,nodesInitialized:I,nodeLookup:v,parentLookup:_,edges:S,edgeLookup:w,connectionLookup:k,onNodesChange:null,onEdgesChange:null,hasDefaultNodes:r!==void 0,hasDefaultEdges:l!==void 0,panZoom:null,minZoom:h,maxZoom:d,translateExtent:Ro,nodeExtent:A,nodesSelectionActive:!1,userSelectionActive:!1,userSelectionRect:null,connectionMode:aa.Strict,domNode:null,paneDragging:!1,noPanClassName:"nopan",nodeOrigin:E,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:u??!1,fitViewOptions:f,fitViewResolver:null,connection:{...qw},connectionClickStartHandle:null,connectOnClick:!0,ariaLiveMessage:"",autoPanOnConnect:!0,autoPanOnNodeDrag:!0,autoPanOnNodeFocus:!0,autoPanSpeed:15,connectionRadius:20,onError:WT,isValidConnection:void 0,onSelectionChangeHandlers:[],lib:"react",debug:!1,ariaLabelConfig:Bw,zIndexMode:y,onNodesChangeMiddlewareMap:new Map,onEdgesChangeMiddlewareMap:new Map}},UM=({nodes:e,edges:n,defaultNodes:r,defaultEdges:l,width:a,height:s,fitView:u,fitViewOptions:f,minZoom:h,maxZoom:d,nodeOrigin:m,nodeExtent:p,zIndexMode:y})=>rz((v,_)=>{async function k(){const{nodeLookup:w,panZoom:S,fitViewOptions:T,fitViewResolver:E,width:A,height:I,minZoom:z,maxZoom:R}=_();S&&(await KT({nodes:w,width:A,height:I,panZoom:S,minZoom:z,maxZoom:R},T),E==null||E.resolve(!0),v({fitViewResolver:null}))}return{...$v({nodes:e,edges:n,width:a,height:s,fitView:u,fitViewOptions:f,minZoom:h,maxZoom:d,nodeOrigin:m,nodeExtent:p,defaultNodes:r,defaultEdges:l,zIndexMode:y}),setNodes:w=>{const{nodeLookup:S,parentLookup:T,nodeOrigin:E,elevateNodesOnSelect:A,fitViewQueued:I,zIndexMode:z}=_(),R=Rp(w,S,T,{nodeOrigin:E,nodeExtent:p,elevateNodesOnSelect:A,checkEquality:!0,zIndexMode:z});I&&R?(k(),v({nodes:w,nodesInitialized:R,fitViewQueued:!1,fitViewOptions:void 0})):v({nodes:w,nodesInitialized:R})},setEdges:w=>{const{connectionLookup:S,edgeLookup:T}=_();nS(S,T,w),v({edges:w})},setDefaultNodesAndEdges:(w,S)=>{if(w){const{setNodes:T}=_();T(w),v({hasDefaultNodes:!0})}if(S){const{setEdges:T}=_();T(S),v({hasDefaultEdges:!0})}},updateNodeInternals:w=>{const{triggerNodeChanges:S,nodeLookup:T,parentLookup:E,domNode:A,nodeOrigin:I,nodeExtent:z,debug:R,fitViewQueued:D,zIndexMode:U}=_(),{changes:X,updatedInternals:B}=wA(w,T,E,A,I,z,U);B&&(yA(T,E,{nodeOrigin:I,nodeExtent:z,zIndexMode:U}),D?(k(),v({fitViewQueued:!1,fitViewOptions:void 0})):v({}),(X==null?void 0:X.length)>0&&(R&&console.log("React Flow: trigger node changes",X),S==null||S(X)))},updateNodePositions:(w,S=!1)=>{const T=[];let E=[];const{nodeLookup:A,triggerNodeChanges:I,connection:z,updateConnection:R,onNodesChangeMiddlewareMap:D}=_();for(const[U,X]of w){const B=A.get(U),q=!!(B!=null&&B.expandParent&&(B!=null&&B.parentId)&&(X!=null&&X.position)),ee={id:U,type:"position",position:q?{x:Math.max(0,X.position.x),y:Math.max(0,X.position.y)}:X.position,dragging:S};if(B&&z.inProgress&&z.fromNode.id===B.id){const L=Ki(B,z.fromHandle,ve.Left,!0);R({...z,from:L})}q&&B.parentId&&T.push({id:U,parentId:B.parentId,rect:{...X.internals.positionAbsolute,width:X.measured.width??0,height:X.measured.height??0}}),E.push(ee)}if(T.length>0){const{parentLookup:U,nodeOrigin:X}=_(),B=ym(T,A,U,X);E.push(...B)}for(const U of D.values())E=U(E);I(E)},triggerNodeChanges:w=>{const{onNodesChange:S,setNodes:T,nodes:E,hasDefaultNodes:A,debug:I}=_();if(w!=null&&w.length){if(A){const z=yS(w,E);T(z)}I&&console.log("React Flow: trigger node changes",w),S==null||S(w)}},triggerEdgeChanges:w=>{const{onEdgesChange:S,setEdges:T,edges:E,hasDefaultEdges:A,debug:I}=_();if(w!=null&&w.length){if(A){const z=xS(w,E);T(z)}I&&console.log("React Flow: trigger edge changes",w),S==null||S(w)}},addSelectedNodes:w=>{const{multiSelectionActive:S,edgeLookup:T,nodeLookup:E,triggerNodeChanges:A,triggerEdgeChanges:I}=_();if(S){const z=w.map(R=>Ui(R,!0));A(z);return}A(Kl(E,new Set([...w]),!0)),I(Kl(T))},addSelectedEdges:w=>{const{multiSelectionActive:S,edgeLookup:T,nodeLookup:E,triggerNodeChanges:A,triggerEdgeChanges:I}=_();if(S){const z=w.map(R=>Ui(R,!0));I(z);return}I(Kl(T,new Set([...w]))),A(Kl(E,new Set,!0))},unselectNodesAndEdges:({nodes:w,edges:S}={})=>{const{edges:T,nodes:E,nodeLookup:A,triggerNodeChanges:I,triggerEdgeChanges:z}=_(),R=w||E,D=S||T,U=[];for(const B of R){if(!B.selected)continue;const q=A.get(B.id);q&&(q.selected=!1),U.push(Ui(B.id,!1))}const X=[];for(const B of D)B.selected&&X.push(Ui(B.id,!1));I(U),z(X)},setMinZoom:w=>{const{panZoom:S,maxZoom:T}=_();S==null||S.setScaleExtent([w,T]),v({minZoom:w})},setMaxZoom:w=>{const{panZoom:S,minZoom:T}=_();S==null||S.setScaleExtent([T,w]),v({maxZoom:w})},setTranslateExtent:w=>{var S;(S=_().panZoom)==null||S.setTranslateExtent(w),v({translateExtent:w})},resetSelectedElements:()=>{const{edges:w,nodes:S,triggerNodeChanges:T,triggerEdgeChanges:E,elementsSelectable:A}=_();if(!A)return;const I=S.reduce((R,D)=>D.selected?[...R,Ui(D.id,!1)]:R,[]),z=w.reduce((R,D)=>D.selected?[...R,Ui(D.id,!1)]:R,[]);T(I),E(z)},setNodeExtent:w=>{const{nodes:S,nodeLookup:T,parentLookup:E,nodeOrigin:A,elevateNodesOnSelect:I,nodeExtent:z,zIndexMode:R}=_();w[0][0]===z[0][0]&&w[0][1]===z[0][1]&&w[1][0]===z[1][0]&&w[1][1]===z[1][1]||(Rp(S,T,E,{nodeOrigin:A,nodeExtent:w,elevateNodesOnSelect:I,checkEquality:!1,zIndexMode:R}),v({nodeExtent:w}))},panBy:w=>{const{transform:S,width:T,height:E,panZoom:A,translateExtent:I}=_();return SA({delta:w,panZoom:A,transform:S,translateExtent:I,width:T,height:E})},setCenter:async(w,S,T)=>{const{width:E,height:A,maxZoom:I,panZoom:z}=_();if(!z)return Promise.resolve(!1);const R=typeof(T==null?void 0:T.zoom)<"u"?T.zoom:I;return await z.setViewport({x:E/2-w*R,y:A/2-S*R,zoom:R},{duration:T==null?void 0:T.duration,ease:T==null?void 0:T.ease,interpolate:T==null?void 0:T.interpolate}),Promise.resolve(!0)},cancelConnection:()=>{v({connection:{...qw}})},updateConnection:w=>{v({connection:w})},reset:()=>v({...$v()})}},Object.is);function IM({initialNodes:e,initialEdges:n,defaultNodes:r,defaultEdges:l,initialWidth:a,initialHeight:s,initialMinZoom:u,initialMaxZoom:f,initialFitViewOptions:h,fitView:d,nodeOrigin:m,nodeExtent:p,zIndexMode:y,children:v}){const[_]=V.useState(()=>UM({nodes:e,edges:n,defaultNodes:r,defaultEdges:l,width:a,height:s,fitView:d,minZoom:u,maxZoom:f,fitViewOptions:h,nodeOrigin:m,nodeExtent:p,zIndexMode:y}));return b.jsx(lz,{value:_,children:b.jsx(Tz,{children:v})})}function VM({children:e,nodes:n,edges:r,defaultNodes:l,defaultEdges:a,width:s,height:u,fitView:f,fitViewOptions:h,minZoom:d,maxZoom:m,nodeOrigin:p,nodeExtent:y,zIndexMode:v}){return V.useContext(_c)?b.jsx(b.Fragment,{children:e}):b.jsx(IM,{initialNodes:n,initialEdges:r,defaultNodes:l,defaultEdges:a,initialWidth:s,initialHeight:u,fitView:f,initialFitViewOptions:h,initialMinZoom:d,initialMaxZoom:m,nodeOrigin:p,nodeExtent:y,zIndexMode:v,children:e})}const GM={width:"100%",height:"100%",overflow:"hidden",position:"relative",zIndex:0};function PM({nodes:e,edges:n,defaultNodes:r,defaultEdges:l,className:a,nodeTypes:s,edgeTypes:u,onNodeClick:f,onEdgeClick:h,onInit:d,onMove:m,onMoveStart:p,onMoveEnd:y,onConnect:v,onConnectStart:_,onConnectEnd:k,onClickConnectStart:w,onClickConnectEnd:S,onNodeMouseEnter:T,onNodeMouseMove:E,onNodeMouseLeave:A,onNodeContextMenu:I,onNodeDoubleClick:z,onNodeDragStart:R,onNodeDrag:D,onNodeDragStop:U,onNodesDelete:X,onEdgesDelete:B,onDelete:q,onSelectionChange:ee,onSelectionDragStart:L,onSelectionDrag:$,onSelectionDragStop:M,onSelectionContextMenu:P,onSelectionStart:Q,onSelectionEnd:K,onBeforeDelete:j,connectionMode:H,connectionLineType:Y=pi.Bezier,connectionLineStyle:N,connectionLineComponent:G,connectionLineContainerStyle:F,deleteKeyCode:J="Backspace",selectionKeyCode:ne="Shift",selectionOnDrag:re=!1,selectionMode:se=Lo.Full,panActivationKeyCode:ye="Space",multiSelectionKeyCode:be=Bo()?"Meta":"Control",zoomActivationKeyCode:xe=Bo()?"Meta":"Control",snapToGrid:pe,snapGrid:_e,onlyRenderVisibleElements:Me=!1,selectNodesOnDrag:Ce,nodesDraggable:st,autoPanOnNodeFocus:tt,nodesConnectable:zt,nodesFocusable:Vt,nodeOrigin:Lt=mS,edgesFocusable:Sn,edgesReconnectable:jn,elementsSelectable:Mt=!0,defaultViewport:Dr=xz,minZoom:ue=.5,maxZoom:ge=2,translateExtent:Ne=Ro,preventScrolling:Re=!0,nodeExtent:Ye,defaultMarkerColor:Xt="#b1b1b7",zoomOnScroll:On=!0,zoomOnPinch:Ht=!0,panOnScroll:xt=!1,panOnScrollSpeed:Gt=.5,panOnScrollMode:Je=Yi.Free,zoomOnDoubleClick:Xn=!0,panOnDrag:un=!0,onPaneClick:zc,onPaneMouseEnter:il,onPaneMouseMove:ll,onPaneMouseLeave:al,onPaneScroll:ar,onPaneContextMenu:ol,paneClickDistance:yi=1,nodeClickDistance:Mc=0,children:es,onReconnect:ha,onReconnectStart:xi,onReconnectEnd:jc,onEdgeContextMenu:ts,onEdgeDoubleClick:ns,onEdgeMouseEnter:rs,onEdgeMouseMove:pa,onEdgeMouseLeave:ma,reconnectRadius:is=10,onNodesChange:ls,onEdgesChange:Fn,noDragClassName:jt="nodrag",noWheelClassName:Pt="nowheel",noPanClassName:or="nopan",fitView:sl,fitViewOptions:as,connectOnClick:Oc,attributionPosition:os,proOptions:vi,defaultEdgeOptions:ga,elevateNodesOnSelect:Rr=!0,elevateEdgesOnSelect:Lr=!1,disableKeyboardA11y:Hr=!1,autoPanOnConnect:Br,autoPanOnNodeDrag:wt,autoPanSpeed:ss,connectionRadius:us,isValidConnection:sr,onError:qr,style:Dc,id:ya,nodeDragThreshold:cs,connectionDragThreshold:Rc,viewport:ul,onViewportChange:cl,width:Dn,height:Zt,colorMode:fs="light",debug:Lc,onScroll:Ur,ariaLabelConfig:ds,zIndexMode:bi="basic",...Hc},Kt){const wi=ya||"1",hs=Sz(fs),xa=V.useCallback(ur=>{ur.currentTarget.scrollTo({top:0,left:0,behavior:"instant"}),Ur==null||Ur(ur)},[Ur]);return b.jsx("div",{"data-testid":"rf__wrapper",...Hc,onScroll:xa,style:{...Dc,...GM},ref:Kt,className:At(["react-flow",a,hs]),id:ya,role:"application",children:b.jsxs(VM,{nodes:e,edges:n,width:Dn,height:Zt,fitView:sl,fitViewOptions:as,minZoom:ue,maxZoom:ge,nodeOrigin:Lt,nodeExtent:Ye,zIndexMode:bi,children:[b.jsx(qM,{onInit:d,onNodeClick:f,onEdgeClick:h,onNodeMouseEnter:T,onNodeMouseMove:E,onNodeMouseLeave:A,onNodeContextMenu:I,onNodeDoubleClick:z,nodeTypes:s,edgeTypes:u,connectionLineType:Y,connectionLineStyle:N,connectionLineComponent:G,connectionLineContainerStyle:F,selectionKeyCode:ne,selectionOnDrag:re,selectionMode:se,deleteKeyCode:J,multiSelectionKeyCode:be,panActivationKeyCode:ye,zoomActivationKeyCode:xe,onlyRenderVisibleElements:Me,defaultViewport:Dr,translateExtent:Ne,minZoom:ue,maxZoom:ge,preventScrolling:Re,zoomOnScroll:On,zoomOnPinch:Ht,zoomOnDoubleClick:Xn,panOnScroll:xt,panOnScrollSpeed:Gt,panOnScrollMode:Je,panOnDrag:un,onPaneClick:zc,onPaneMouseEnter:il,onPaneMouseMove:ll,onPaneMouseLeave:al,onPaneScroll:ar,onPaneContextMenu:ol,paneClickDistance:yi,nodeClickDistance:Mc,onSelectionContextMenu:P,onSelectionStart:Q,onSelectionEnd:K,onReconnect:ha,onReconnectStart:xi,onReconnectEnd:jc,onEdgeContextMenu:ts,onEdgeDoubleClick:ns,onEdgeMouseEnter:rs,onEdgeMouseMove:pa,onEdgeMouseLeave:ma,reconnectRadius:is,defaultMarkerColor:Xt,noDragClassName:jt,noWheelClassName:Pt,noPanClassName:or,rfId:wi,disableKeyboardA11y:Hr,nodeExtent:Ye,viewport:ul,onViewportChange:cl}),b.jsx(wz,{nodes:e,edges:n,defaultNodes:r,defaultEdges:l,onConnect:v,onConnectStart:_,onConnectEnd:k,onClickConnectStart:w,onClickConnectEnd:S,nodesDraggable:st,autoPanOnNodeFocus:tt,nodesConnectable:zt,nodesFocusable:Vt,edgesFocusable:Sn,edgesReconnectable:jn,elementsSelectable:Mt,elevateNodesOnSelect:Rr,elevateEdgesOnSelect:Lr,minZoom:ue,maxZoom:ge,nodeExtent:Ye,onNodesChange:ls,onEdgesChange:Fn,snapToGrid:pe,snapGrid:_e,connectionMode:H,translateExtent:Ne,connectOnClick:Oc,defaultEdgeOptions:ga,fitView:sl,fitViewOptions:as,onNodesDelete:X,onEdgesDelete:B,onDelete:q,onNodeDragStart:R,onNodeDrag:D,onNodeDragStop:U,onSelectionDrag:$,onSelectionDragStart:L,onSelectionDragStop:M,onMove:m,onMoveStart:p,onMoveEnd:y,noPanClassName:or,nodeOrigin:Lt,rfId:wi,autoPanOnConnect:Br,autoPanOnNodeDrag:wt,autoPanSpeed:ss,onError:qr,connectionRadius:us,isValidConnection:sr,selectNodesOnDrag:Ce,nodeDragThreshold:cs,connectionDragThreshold:Rc,onBeforeDelete:j,debug:Lc,ariaLabelConfig:ds,zIndexMode:bi}),b.jsx(yz,{onSelectionChange:ee}),es,b.jsx(dz,{proOptions:vi,position:os}),b.jsx(fz,{rfId:wi,disableKeyboardA11y:Hr})]})})}var $M=vS(PM);const YM=e=>{var n;return(n=e.domNode)==null?void 0:n.querySelector(".react-flow__edgelabel-renderer")};function XM({children:e}){const n=Pe(YM);return n?iz.createPortal(e,n):null}function FM(e){const[n,r]=V.useState(e),l=V.useCallback(a=>r(s=>yS(a,s)),[]);return[n,r,l]}function QM(e){const[n,r]=V.useState(e),l=V.useCallback(a=>r(s=>xS(a,s)),[]);return[n,r,l]}function ZM({dimensions:e,lineWidth:n,variant:r,className:l}){return b.jsx("path",{strokeWidth:n,d:`M${e[0]/2} 0 V${e[1]} M0 ${e[1]/2} H${e[0]}`,className:At(["react-flow__background-pattern",r,l])})}function KM({radius:e,className:n}){return b.jsx("circle",{cx:e,cy:e,r:e,className:At(["react-flow__background-pattern","dots",n])})}var zr;(function(e){e.Lines="lines",e.Dots="dots",e.Cross="cross"})(zr||(zr={}));const JM={[zr.Dots]:1,[zr.Lines]:1,[zr.Cross]:6},WM=e=>({transform:e.transform,patternId:`pattern-${e.rfId}`});function GS({id:e,variant:n=zr.Dots,gap:r=20,size:l,lineWidth:a=1,offset:s=0,color:u,bgColor:f,style:h,className:d,patternClassName:m}){const p=V.useRef(null),{transform:y,patternId:v}=Pe(WM,ht),_=l||JM[n],k=n===zr.Dots,w=n===zr.Cross,S=Array.isArray(r)?r:[r,r],T=[S[0]*y[2]||1,S[1]*y[2]||1],E=_*y[2],A=Array.isArray(s)?s:[s,s],I=w?[E,E]:T,z=[A[0]*y[2]||1+I[0]/2,A[1]*y[2]||1+I[1]/2],R=`${v}${e||""}`;return b.jsxs("svg",{className:At(["react-flow__background",d]),style:{...h,...Nc,"--xy-background-color-props":f,"--xy-background-pattern-color-props":u},ref:p,"data-testid":"rf__background",children:[b.jsx("pattern",{id:R,x:y[0]%T[0],y:y[1]%T[1],width:T[0],height:T[1],patternUnits:"userSpaceOnUse",patternTransform:`translate(-${z[0]},-${z[1]})`,children:k?b.jsx(KM,{radius:E/2,className:m}):b.jsx(ZM,{dimensions:I,lineWidth:a,variant:n,className:m})}),b.jsx("rect",{x:"0",y:"0",width:"100%",height:"100%",fill:`url(#${R})`})]})}GS.displayName="Background";const ej=V.memo(GS);function tj(){return b.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",children:b.jsx("path",{d:"M32 18.133H18.133V32h-4.266V18.133H0v-4.266h13.867V0h4.266v13.867H32z"})})}function nj(){return b.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 5",children:b.jsx("path",{d:"M0 0h32v4.2H0z"})})}function rj(){return b.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 30",children:b.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 ij(){return b.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 25 32",children:b.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 lj(){return b.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 25 32",children:b.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 Lu({children:e,className:n,...r}){return b.jsx("button",{type:"button",className:At(["react-flow__controls-button",n]),...r,children:e})}const aj=e=>({isInteractive:e.nodesDraggable||e.nodesConnectable||e.elementsSelectable,minZoomReached:e.transform[2]<=e.minZoom,maxZoomReached:e.transform[2]>=e.maxZoom,ariaLabelConfig:e.ariaLabelConfig});function PS({style:e,showZoom:n=!0,showFitView:r=!0,showInteractive:l=!0,fitViewOptions:a,onZoomIn:s,onZoomOut:u,onFitView:f,onInteractiveChange:h,className:d,children:m,position:p="bottom-left",orientation:y="vertical","aria-label":v}){const _=pt(),{isInteractive:k,minZoomReached:w,maxZoomReached:S,ariaLabelConfig:T}=Pe(aj,ht),{zoomIn:E,zoomOut:A,fitView:I}=el(),z=()=>{E(),s==null||s()},R=()=>{A(),u==null||u()},D=()=>{I(a),f==null||f()},U=()=>{_.setState({nodesDraggable:!k,nodesConnectable:!k,elementsSelectable:!k}),h==null||h(!k)},X=y==="horizontal"?"horizontal":"vertical";return b.jsxs(Ec,{className:At(["react-flow__controls",X,d]),position:p,style:e,"data-testid":"rf__controls","aria-label":v??T["controls.ariaLabel"],children:[n&&b.jsxs(b.Fragment,{children:[b.jsx(Lu,{onClick:z,className:"react-flow__controls-zoomin",title:T["controls.zoomIn.ariaLabel"],"aria-label":T["controls.zoomIn.ariaLabel"],disabled:S,children:b.jsx(tj,{})}),b.jsx(Lu,{onClick:R,className:"react-flow__controls-zoomout",title:T["controls.zoomOut.ariaLabel"],"aria-label":T["controls.zoomOut.ariaLabel"],disabled:w,children:b.jsx(nj,{})})]}),r&&b.jsx(Lu,{className:"react-flow__controls-fitview",onClick:D,title:T["controls.fitView.ariaLabel"],"aria-label":T["controls.fitView.ariaLabel"],children:b.jsx(rj,{})}),l&&b.jsx(Lu,{className:"react-flow__controls-interactive",onClick:U,title:T["controls.interactive.ariaLabel"],"aria-label":T["controls.interactive.ariaLabel"],children:k?b.jsx(lj,{}):b.jsx(ij,{})}),m]})}PS.displayName="Controls";const oj=V.memo(PS);function sj({id:e,x:n,y:r,width:l,height:a,style:s,color:u,strokeColor:f,strokeWidth:h,className:d,borderRadius:m,shapeRendering:p,selected:y,onClick:v}){const{background:_,backgroundColor:k}=s||{},w=u||_||k;return b.jsx("rect",{className:At(["react-flow__minimap-node",{selected:y},d]),x:n,y:r,rx:m,ry:m,width:l,height:a,style:{fill:w,stroke:f,strokeWidth:h},shapeRendering:p,onClick:v?S=>v(S,e):void 0})}const uj=V.memo(sj),cj=e=>e.nodes.map(n=>n.id),dh=e=>e instanceof Function?e:()=>e;function fj({nodeStrokeColor:e,nodeColor:n,nodeClassName:r="",nodeBorderRadius:l=5,nodeStrokeWidth:a,nodeComponent:s=uj,onClick:u}){const f=Pe(cj,ht),h=dh(n),d=dh(e),m=dh(r),p=typeof window>"u"||window.chrome?"crispEdges":"geometricPrecision";return b.jsx(b.Fragment,{children:f.map(y=>b.jsx(hj,{id:y,nodeColorFunc:h,nodeStrokeColorFunc:d,nodeClassNameFunc:m,nodeBorderRadius:l,nodeStrokeWidth:a,NodeComponent:s,onClick:u,shapeRendering:p},y))})}function dj({id:e,nodeColorFunc:n,nodeStrokeColorFunc:r,nodeClassNameFunc:l,nodeBorderRadius:a,nodeStrokeWidth:s,shapeRendering:u,NodeComponent:f,onClick:h}){const{node:d,x:m,y:p,width:y,height:v}=Pe(_=>{const k=_.nodeLookup.get(e);if(!k)return{node:void 0,x:0,y:0,width:0,height:0};const w=k.internals.userNode,{x:S,y:T}=k.internals.positionAbsolute,{width:E,height:A}=Or(w);return{node:w,x:S,y:T,width:E,height:A}},ht);return!d||d.hidden||!Yw(d)?null:b.jsx(f,{x:m,y:p,width:y,height:v,style:d.style,selected:!!d.selected,className:l(d),color:n(d),borderRadius:a,strokeColor:r(d),strokeWidth:s,shapeRendering:u,onClick:h,id:d.id})}const hj=V.memo(dj);var pj=V.memo(fj);const mj=200,gj=150,yj=e=>!e.hidden,xj=e=>{const n={x:-e.transform[0]/e.transform[2],y:-e.transform[1]/e.transform[2],width:e.width/e.transform[2],height:e.height/e.transform[2]};return{viewBB:n,boundingRect:e.nodeLookup.size>0?$w(Xo(e.nodeLookup,{filter:yj}),n):n,rfId:e.rfId,panZoom:e.panZoom,translateExtent:e.translateExtent,flowWidth:e.width,flowHeight:e.height,ariaLabelConfig:e.ariaLabelConfig}},vj="react-flow__minimap-desc";function $S({style:e,className:n,nodeStrokeColor:r,nodeColor:l,nodeClassName:a="",nodeBorderRadius:s=5,nodeStrokeWidth:u,nodeComponent:f,bgColor:h,maskColor:d,maskStrokeColor:m,maskStrokeWidth:p,position:y="bottom-right",onClick:v,onNodeClick:_,pannable:k=!1,zoomable:w=!1,ariaLabel:S,inversePan:T,zoomStep:E=1,offsetScale:A=5}){const I=pt(),z=V.useRef(null),{boundingRect:R,viewBB:D,rfId:U,panZoom:X,translateExtent:B,flowWidth:q,flowHeight:ee,ariaLabelConfig:L}=Pe(xj,ht),$=(e==null?void 0:e.width)??mj,M=(e==null?void 0:e.height)??gj,P=R.width/$,Q=R.height/M,K=Math.max(P,Q),j=K*$,H=K*M,Y=A*K,N=R.x-(j-R.width)/2-Y,G=R.y-(H-R.height)/2-Y,F=j+Y*2,J=H+Y*2,ne=`${vj}-${U}`,re=V.useRef(0),se=V.useRef();re.current=K,V.useEffect(()=>{if(z.current&&X)return se.current=MA({domNode:z.current,panZoom:X,getTransform:()=>I.getState().transform,getViewScale:()=>re.current}),()=>{var pe;(pe=se.current)==null||pe.destroy()}},[X]),V.useEffect(()=>{var pe;(pe=se.current)==null||pe.update({translateExtent:B,width:q,height:ee,inversePan:T,pannable:k,zoomStep:E,zoomable:w})},[k,w,T,E,B,q,ee]);const ye=v?pe=>{var Ce;const[_e,Me]=((Ce=se.current)==null?void 0:Ce.pointer(pe))||[0,0];v(pe,{x:_e,y:Me})}:void 0,be=_?V.useCallback((pe,_e)=>{const Me=I.getState().nodeLookup.get(_e).internals.userNode;_(pe,Me)},[]):void 0,xe=S??L["minimap.ariaLabel"];return b.jsx(Ec,{position:y,style:{...e,"--xy-minimap-background-color-props":typeof h=="string"?h:void 0,"--xy-minimap-mask-background-color-props":typeof d=="string"?d:void 0,"--xy-minimap-mask-stroke-color-props":typeof m=="string"?m:void 0,"--xy-minimap-mask-stroke-width-props":typeof p=="number"?p*K:void 0,"--xy-minimap-node-background-color-props":typeof l=="string"?l:void 0,"--xy-minimap-node-stroke-color-props":typeof r=="string"?r:void 0,"--xy-minimap-node-stroke-width-props":typeof u=="number"?u:void 0},className:At(["react-flow__minimap",n]),"data-testid":"rf__minimap",children:b.jsxs("svg",{width:$,height:M,viewBox:`${N} ${G} ${F} ${J}`,className:"react-flow__minimap-svg",role:"img","aria-labelledby":ne,ref:z,onClick:ye,children:[xe&&b.jsx("title",{id:ne,children:xe}),b.jsx(pj,{onClick:be,nodeColor:l,nodeStrokeColor:r,nodeBorderRadius:s,nodeClassName:a,nodeStrokeWidth:u,nodeComponent:f}),b.jsx("path",{className:"react-flow__minimap-mask",d:`M${N-Y},${G-Y}h${F+Y*2}v${J+Y*2}h${-F-Y*2}z + M${D.x},${D.y}h${D.width}v${D.height}h${-D.width}z`,fillRule:"evenodd",pointerEvents:"none"})]})})}$S.displayName="MiniMap";const bj=V.memo($S),wj=e=>n=>e?`${Math.max(1/n.transform[2],1)}`:void 0,Sj={[ca.Line]:"right",[ca.Handle]:"bottom-right"};function _j({nodeId:e,position:n,variant:r=ca.Handle,className:l,style:a=void 0,children:s,color:u,minWidth:f=10,minHeight:h=10,maxWidth:d=Number.MAX_VALUE,maxHeight:m=Number.MAX_VALUE,keepAspectRatio:p=!1,resizeDirection:y,autoScale:v=!0,shouldResize:_,onResizeStart:k,onResize:w,onResizeEnd:S}){const T=_S(),E=typeof e=="string"?e:T,A=pt(),I=V.useRef(null),z=r===ca.Handle,R=Pe(V.useCallback(wj(z&&v),[z,v]),ht),D=V.useRef(null),U=n??Sj[r];V.useEffect(()=>{if(!(!I.current||!E))return D.current||(D.current=$A({domNode:I.current,nodeId:E,getStoreItems:()=>{const{nodeLookup:B,transform:q,snapGrid:ee,snapToGrid:L,nodeOrigin:$,domNode:M}=A.getState();return{nodeLookup:B,transform:q,snapGrid:ee,snapToGrid:L,nodeOrigin:$,paneDomNode:M}},onChange:(B,q)=>{const{triggerNodeChanges:ee,nodeLookup:L,parentLookup:$,nodeOrigin:M}=A.getState(),P=[],Q={x:B.x,y:B.y},K=L.get(E);if(K&&K.expandParent&&K.parentId){const j=K.origin??M,H=B.width??K.measured.width??0,Y=B.height??K.measured.height??0,N={id:K.id,parentId:K.parentId,rect:{width:H,height:Y,...Xw({x:B.x??K.position.x,y:B.y??K.position.y},{width:H,height:Y},K.parentId,L,j)}},G=ym([N],L,$,M);P.push(...G),Q.x=B.x?Math.max(j[0]*H,B.x):void 0,Q.y=B.y?Math.max(j[1]*Y,B.y):void 0}if(Q.x!==void 0&&Q.y!==void 0){const j={id:E,type:"position",position:{...Q}};P.push(j)}if(B.width!==void 0&&B.height!==void 0){const H={id:E,type:"dimensions",resizing:!0,setAttributes:y?y==="horizontal"?"width":"height":!0,dimensions:{width:B.width,height:B.height}};P.push(H)}for(const j of q){const H={...j,type:"position"};P.push(H)}ee(P)},onEnd:({width:B,height:q})=>{const ee={id:E,type:"dimensions",resizing:!1,dimensions:{width:B,height:q}};A.getState().triggerNodeChanges([ee])}})),D.current.update({controlPosition:U,boundaries:{minWidth:f,minHeight:h,maxWidth:d,maxHeight:m},keepAspectRatio:p,resizeDirection:y,onResizeStart:k,onResize:w,onResizeEnd:S,shouldResize:_}),()=>{var B;(B=D.current)==null||B.destroy()}},[U,f,h,d,m,p,k,w,S,_]);const X=U.split("-");return b.jsx("div",{className:At(["react-flow__resize-control","nodrag",...X,r,l]),ref:I,style:{...a,scale:R,...u&&{[z?"backgroundColor":"borderColor"]:u}},children:s})}V.memo(_j);function Ko(e,n){if(n.length===0)return null;let r=e[n[0]];for(let l=1;ll.viewContextPath),n=he(l=>l.nodes),r=he(l=>l.subworkflowContexts);return V.useMemo(()=>{var l;return e.length===0?n:((l=Ko(r,e))==null?void 0:l.nodes)??n},[e,n,r])}function Ej(){const e=he(l=>l.viewContextPath),n=he(l=>l.groupProgress),r=he(l=>l.subworkflowContexts);return V.useMemo(()=>{var l;return e.length===0?n:((l=Ko(r,e))==null?void 0:l.groupProgress)??n},[e,n,r])}function Nj(){const e=he(l=>l.viewContextPath),n=he(l=>l.highlightedEdges),r=he(l=>l.subworkflowContexts);return V.useMemo(()=>{var l;return e.length===0?n:((l=Ko(r,e))==null?void 0:l.highlightedEdges)??n},[e,n,r])}function YS(){const e=he(r=>r.viewContextPath),n=he(r=>r.subworkflowContexts);return V.useMemo(()=>{var r;return e.length===0?n:((r=Ko(n,e))==null?void 0:r.children)??[]},[e,n])}function kj(){const e=he(d=>d.viewContextPath),n=he(d=>d.agents),r=he(d=>d.routes),l=he(d=>d.parallelGroups),a=he(d=>d.forEachGroups),s=he(d=>d.nodes),u=he(d=>d.groupProgress),f=he(d=>d.entryPoint),h=he(d=>d.subworkflowContexts);return V.useMemo(()=>{if(e.length===0)return{agents:n,routes:r,parallelGroups:l,forEachGroups:a,nodes:s,groupProgress:u,entryPoint:f,subworkflowContexts:h,parentAgent:null};const d=Ko(h,e);return d?{agents:d.agents,routes:d.routes,parallelGroups:d.parallelGroups,forEachGroups:d.forEachGroups,nodes:d.nodes,groupProgress:d.groupProgress,entryPoint:d.entryPoint,subworkflowContexts:d.children,parentAgent:d.parentAgent}:{agents:n,routes:r,parallelGroups:l,forEachGroups:a,nodes:s,groupProgress:u,entryPoint:f,subworkflowContexts:h,parentAgent:null}},[e,n,r,l,a,s,u,f,h])}function Cj(){const e=new URLSearchParams(window.location.search);return{subworkflowPath:e.get("subworkflow"),agent:e.get("agent")}}function Yv(e,n){const r=[];let l=e;for(const a of n){let s=-1;for(let u=l.length-1;u>=0;u--)if(l[u].slotKey===a){s=u;break}if(s===-1){for(let u=l.length-1;u>=0;u--)if(l[u].parentAgent===a){s=u;break}}if(s===-1)return{path:r,failedSegment:a};r.push(s),l=l[s].children}return{path:r,failedSegment:null}}function Bp(e,n,r=[]){const l=[];for(let a=0;af.name===n)&&l.push({path:u,ctx:s}),s.children.length>0&&l.push(...Bp(s.children,n,u))}return l}function Tj(e){return e.length===0?null:[...e].sort((n,r)=>{const l=n.ctx.status==="running"?1:0,a=r.ctx.status==="running"?1:0;if(l!==a)return a-l;if(n.path.length!==r.path.length)return r.path.length-n.path.length;for(let s=0;s{if(r.current||!u)return;let f=null,h=null,d=null;const m=()=>{if(r.current)return;r.current=!0,f&&clearTimeout(f),h&&clearTimeout(h),d&&d();const v=he.getState();if(v.agents.length===0){n({message:"Workflow state did not load."});return}let _=[];if(a){const k=a.split("/").filter(Boolean),w=Yv(v.subworkflowContexts,k);if(w.failedSegment){const S=k.slice(0,w.path.length).join("/");n({message:`Subworkflow "${w.failedSegment}" not found${S?` (resolved: ${S})`:""}. It may not have started yet.`});return}_=w.path}if(s){if((_.length===0?v.agents:(()=>{let w,S=v.subworkflowContexts;for(const T of _){if(w=S[T],!w)break;S=w.children}return(w==null?void 0:w.agents)??[]})()).some(w=>w.name===s))he.setState({viewContextPath:_,selectedNode:s});else{const w=Bp(v.subworkflowContexts,s);if(w.length===0){const T=a||"root workflow";he.setState({viewContextPath:_,selectedNode:null}),n({message:`Agent "${s}" not found in ${T}.`});return}if(a){const T=w.slice(0,5).map(A=>Aj(v.subworkflowContexts,A.path)).join(", "),E=w.length>5?`, and ${w.length-5} more`:"";he.setState({viewContextPath:_,selectedNode:null}),n({message:`Agent "${s}" not found in ${a}. Found in: ${T}${E}`});return}const S=Tj(w);he.setState({viewContextPath:S.path,selectedNode:s})}setTimeout(()=>{l({nodes:[{id:s}],padding:.5,duration:400})},200)}else a&&he.setState({viewContextPath:_,selectedNode:null})},p=()=>{const v=he.getState();if(v.agents.length===0)return!1;if(v.workflowStatus!=="running"&&v.workflowStatus!=="pending")return!0;if(a){const _=a.split("/").filter(Boolean),{failedSegment:k}=Yv(v.subworkflowContexts,_);if(k)return!1}return!(s&&!a&&!v.agents.some(k=>k.name===s)&&Bp(v.subworkflowContexts,s).length===0)},y=()=>{f&&clearTimeout(f),f=setTimeout(()=>{r.current||p()&&m()},200)};return d=he.subscribe(y),h=setTimeout(()=>{r.current||m()},5e3),y(),()=>{f&&clearTimeout(f),h&&clearTimeout(h),d&&d()}},[u,a,s,l]),e}var hh,Xv;function vm(){if(Xv)return hh;Xv=1;var e="\0",n="\0",r="";class l{constructor(m){kt(this,"_isDirected",!0);kt(this,"_isMultigraph",!1);kt(this,"_isCompound",!1);kt(this,"_label");kt(this,"_defaultNodeLabelFn",()=>{});kt(this,"_defaultEdgeLabelFn",()=>{});kt(this,"_nodes",{});kt(this,"_in",{});kt(this,"_preds",{});kt(this,"_out",{});kt(this,"_sucs",{});kt(this,"_edgeObjs",{});kt(this,"_edgeLabels",{});kt(this,"_nodeCount",0);kt(this,"_edgeCount",0);kt(this,"_parent");kt(this,"_children");m&&(this._isDirected=Object.hasOwn(m,"directed")?m.directed:!0,this._isMultigraph=Object.hasOwn(m,"multigraph")?m.multigraph:!1,this._isCompound=Object.hasOwn(m,"compound")?m.compound:!1),this._isCompound&&(this._parent={},this._children={},this._children[n]={})}isDirected(){return this._isDirected}isMultigraph(){return this._isMultigraph}isCompound(){return this._isCompound}setGraph(m){return this._label=m,this}graph(){return this._label}setDefaultNodeLabel(m){return this._defaultNodeLabelFn=m,typeof m!="function"&&(this._defaultNodeLabelFn=()=>m),this}nodeCount(){return this._nodeCount}nodes(){return Object.keys(this._nodes)}sources(){var m=this;return this.nodes().filter(p=>Object.keys(m._in[p]).length===0)}sinks(){var m=this;return this.nodes().filter(p=>Object.keys(m._out[p]).length===0)}setNodes(m,p){var y=arguments,v=this;return m.forEach(function(_){y.length>1?v.setNode(_,p):v.setNode(_)}),this}setNode(m,p){return Object.hasOwn(this._nodes,m)?(arguments.length>1&&(this._nodes[m]=p),this):(this._nodes[m]=arguments.length>1?p:this._defaultNodeLabelFn(m),this._isCompound&&(this._parent[m]=n,this._children[m]={},this._children[n][m]=!0),this._in[m]={},this._preds[m]={},this._out[m]={},this._sucs[m]={},++this._nodeCount,this)}node(m){return this._nodes[m]}hasNode(m){return Object.hasOwn(this._nodes,m)}removeNode(m){var p=this;if(Object.hasOwn(this._nodes,m)){var y=v=>p.removeEdge(p._edgeObjs[v]);delete this._nodes[m],this._isCompound&&(this._removeFromParentsChildList(m),delete this._parent[m],this.children(m).forEach(function(v){p.setParent(v)}),delete this._children[m]),Object.keys(this._in[m]).forEach(y),delete this._in[m],delete this._preds[m],Object.keys(this._out[m]).forEach(y),delete this._out[m],delete this._sucs[m],--this._nodeCount}return this}setParent(m,p){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(p===void 0)p=n;else{p+="";for(var y=p;y!==void 0;y=this.parent(y))if(y===m)throw new Error("Setting "+p+" as parent of "+m+" would create a cycle");this.setNode(p)}return this.setNode(m),this._removeFromParentsChildList(m),this._parent[m]=p,this._children[p][m]=!0,this}_removeFromParentsChildList(m){delete this._children[this._parent[m]][m]}parent(m){if(this._isCompound){var p=this._parent[m];if(p!==n)return p}}children(m=n){if(this._isCompound){var p=this._children[m];if(p)return Object.keys(p)}else{if(m===n)return this.nodes();if(this.hasNode(m))return[]}}predecessors(m){var p=this._preds[m];if(p)return Object.keys(p)}successors(m){var p=this._sucs[m];if(p)return Object.keys(p)}neighbors(m){var p=this.predecessors(m);if(p){const v=new Set(p);for(var y of this.successors(m))v.add(y);return Array.from(v.values())}}isLeaf(m){var p;return this.isDirected()?p=this.successors(m):p=this.neighbors(m),p.length===0}filterNodes(m){var p=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});p.setGraph(this.graph());var y=this;Object.entries(this._nodes).forEach(function([k,w]){m(k)&&p.setNode(k,w)}),Object.values(this._edgeObjs).forEach(function(k){p.hasNode(k.v)&&p.hasNode(k.w)&&p.setEdge(k,y.edge(k))});var v={};function _(k){var w=y.parent(k);return w===void 0||p.hasNode(w)?(v[k]=w,w):w in v?v[w]:_(w)}return this._isCompound&&p.nodes().forEach(k=>p.setParent(k,_(k))),p}setDefaultEdgeLabel(m){return this._defaultEdgeLabelFn=m,typeof m!="function"&&(this._defaultEdgeLabelFn=()=>m),this}edgeCount(){return this._edgeCount}edges(){return Object.values(this._edgeObjs)}setPath(m,p){var y=this,v=arguments;return m.reduce(function(_,k){return v.length>1?y.setEdge(_,k,p):y.setEdge(_,k),k}),this}setEdge(){var m,p,y,v,_=!1,k=arguments[0];typeof k=="object"&&k!==null&&"v"in k?(m=k.v,p=k.w,y=k.name,arguments.length===2&&(v=arguments[1],_=!0)):(m=k,p=arguments[1],y=arguments[3],arguments.length>2&&(v=arguments[2],_=!0)),m=""+m,p=""+p,y!==void 0&&(y=""+y);var w=u(this._isDirected,m,p,y);if(Object.hasOwn(this._edgeLabels,w))return _&&(this._edgeLabels[w]=v),this;if(y!==void 0&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(m),this.setNode(p),this._edgeLabels[w]=_?v:this._defaultEdgeLabelFn(m,p,y);var S=f(this._isDirected,m,p,y);return m=S.v,p=S.w,Object.freeze(S),this._edgeObjs[w]=S,a(this._preds[p],m),a(this._sucs[m],p),this._in[p][w]=S,this._out[m][w]=S,this._edgeCount++,this}edge(m,p,y){var v=arguments.length===1?h(this._isDirected,arguments[0]):u(this._isDirected,m,p,y);return this._edgeLabels[v]}edgeAsObj(){const m=this.edge(...arguments);return typeof m!="object"?{label:m}:m}hasEdge(m,p,y){var v=arguments.length===1?h(this._isDirected,arguments[0]):u(this._isDirected,m,p,y);return Object.hasOwn(this._edgeLabels,v)}removeEdge(m,p,y){var v=arguments.length===1?h(this._isDirected,arguments[0]):u(this._isDirected,m,p,y),_=this._edgeObjs[v];return _&&(m=_.v,p=_.w,delete this._edgeLabels[v],delete this._edgeObjs[v],s(this._preds[p],m),s(this._sucs[m],p),delete this._in[p][v],delete this._out[m][v],this._edgeCount--),this}inEdges(m,p){var y=this._in[m];if(y){var v=Object.values(y);return p?v.filter(_=>_.v===p):v}}outEdges(m,p){var y=this._out[m];if(y){var v=Object.values(y);return p?v.filter(_=>_.w===p):v}}nodeEdges(m,p){var y=this.inEdges(m,p);if(y)return y.concat(this.outEdges(m,p))}}function a(d,m){d[m]?d[m]++:d[m]=1}function s(d,m){--d[m]||delete d[m]}function u(d,m,p,y){var v=""+m,_=""+p;if(!d&&v>_){var k=v;v=_,_=k}return v+r+_+r+(y===void 0?e:y)}function f(d,m,p,y){var v=""+m,_=""+p;if(!d&&v>_){var k=v;v=_,_=k}var w={v,w:_};return y&&(w.name=y),w}function h(d,m){return u(d,m.v,m.w,m.name)}return hh=l,hh}var ph,Fv;function Mj(){return Fv||(Fv=1,ph="2.2.4"),ph}var mh,Qv;function jj(){return Qv||(Qv=1,mh={Graph:vm(),version:Mj()}),mh}var gh,Zv;function Oj(){if(Zv)return gh;Zv=1;var e=vm();gh={write:n,read:a};function n(s){var u={options:{directed:s.isDirected(),multigraph:s.isMultigraph(),compound:s.isCompound()},nodes:r(s),edges:l(s)};return s.graph()!==void 0&&(u.value=structuredClone(s.graph())),u}function r(s){return s.nodes().map(function(u){var f=s.node(u),h=s.parent(u),d={v:u};return f!==void 0&&(d.value=f),h!==void 0&&(d.parent=h),d})}function l(s){return s.edges().map(function(u){var f=s.edge(u),h={v:u.v,w:u.w};return u.name!==void 0&&(h.name=u.name),f!==void 0&&(h.value=f),h})}function a(s){var u=new e(s.options).setGraph(s.value);return s.nodes.forEach(function(f){u.setNode(f.v,f.value),f.parent&&u.setParent(f.v,f.parent)}),s.edges.forEach(function(f){u.setEdge({v:f.v,w:f.w,name:f.name},f.value)}),u}return gh}var yh,Kv;function Dj(){if(Kv)return yh;Kv=1,yh=e;function e(n){var r={},l=[],a;function s(u){Object.hasOwn(r,u)||(r[u]=!0,a.push(u),n.successors(u).forEach(s),n.predecessors(u).forEach(s))}return n.nodes().forEach(function(u){a=[],s(u),a.length&&l.push(a)}),l}return yh}var xh,Jv;function XS(){if(Jv)return xh;Jv=1;class e{constructor(){kt(this,"_arr",[]);kt(this,"_keyIndices",{})}size(){return this._arr.length}keys(){return this._arr.map(function(r){return r.key})}has(r){return Object.hasOwn(this._keyIndices,r)}priority(r){var l=this._keyIndices[r];if(l!==void 0)return this._arr[l].priority}min(){if(this.size()===0)throw new Error("Queue underflow");return this._arr[0].key}add(r,l){var a=this._keyIndices;if(r=String(r),!Object.hasOwn(a,r)){var s=this._arr,u=s.length;return a[r]=u,s.push({key:r,priority:l}),this._decrease(u),!0}return!1}removeMin(){this._swap(0,this._arr.length-1);var r=this._arr.pop();return delete this._keyIndices[r.key],this._heapify(0),r.key}decrease(r,l){var a=this._keyIndices[r];if(l>this._arr[a].priority)throw new Error("New priority is greater than current priority. Key: "+r+" Old: "+this._arr[a].priority+" New: "+l);this._arr[a].priority=l,this._decrease(a)}_heapify(r){var l=this._arr,a=2*r,s=a+1,u=r;a>1,!(l[s].priority1;function r(a,s,u,f){return l(a,String(s),u||n,f||function(h){return a.outEdges(h)})}function l(a,s,u,f){var h={},d=new e,m,p,y=function(v){var _=v.v!==m?v.v:v.w,k=h[_],w=u(v),S=p.distance+w;if(w<0)throw new Error("dijkstra does not allow negative edge weights. Bad edge: "+v+" Weight: "+w);S0&&(m=d.removeMin(),p=h[m],p.distance!==Number.POSITIVE_INFINITY);)f(m).forEach(y);return h}return vh}var bh,e1;function Rj(){if(e1)return bh;e1=1;var e=FS();bh=n;function n(r,l,a){return r.nodes().reduce(function(s,u){return s[u]=e(r,u,l,a),s},{})}return bh}var wh,t1;function QS(){if(t1)return wh;t1=1,wh=e;function e(n){var r=0,l=[],a={},s=[];function u(f){var h=a[f]={onStack:!0,lowlink:r,index:r++};if(l.push(f),n.successors(f).forEach(function(p){Object.hasOwn(a,p)?a[p].onStack&&(h.lowlink=Math.min(h.lowlink,a[p].index)):(u(p),h.lowlink=Math.min(h.lowlink,a[p].lowlink))}),h.lowlink===h.index){var d=[],m;do m=l.pop(),a[m].onStack=!1,d.push(m);while(f!==m);s.push(d)}}return n.nodes().forEach(function(f){Object.hasOwn(a,f)||u(f)}),s}return wh}var Sh,n1;function Lj(){if(n1)return Sh;n1=1;var e=QS();Sh=n;function n(r){return e(r).filter(function(l){return l.length>1||l.length===1&&r.hasEdge(l[0],l[0])})}return Sh}var _h,r1;function Hj(){if(r1)return _h;r1=1,_h=n;var e=()=>1;function n(l,a,s){return r(l,a||e,s||function(u){return l.outEdges(u)})}function r(l,a,s){var u={},f=l.nodes();return f.forEach(function(h){u[h]={},u[h][h]={distance:0},f.forEach(function(d){h!==d&&(u[h][d]={distance:Number.POSITIVE_INFINITY})}),s(h).forEach(function(d){var m=d.v===h?d.w:d.v,p=a(d);u[h][m]={distance:p,predecessor:h}})}),f.forEach(function(h){var d=u[h];f.forEach(function(m){var p=u[m];f.forEach(function(y){var v=p[h],_=d[y],k=p[y],w=v.distance+_.distance;wa.successors(p):p=>a.neighbors(p),h=u==="post"?n:r,d=[],m={};return s.forEach(p=>{if(!a.hasNode(p))throw new Error("Graph does not have node: "+p);h(p,f,m,d)}),d}function n(a,s,u,f){for(var h=[[a,!1]];h.length>0;){var d=h.pop();d[1]?f.push(d[0]):Object.hasOwn(u,d[0])||(u[d[0]]=!0,h.push([d[0],!0]),l(s(d[0]),m=>h.push([m,!1])))}}function r(a,s,u,f){for(var h=[a];h.length>0;){var d=h.pop();Object.hasOwn(u,d)||(u[d]=!0,f.push(d),l(s(d),m=>h.push(m)))}}function l(a,s){for(var u=a.length;u--;)s(a[u],u,a);return a}return kh}var Ch,o1;function qj(){if(o1)return Ch;o1=1;var e=KS();Ch=n;function n(r,l){return e(r,l,"post")}return Ch}var Th,s1;function Uj(){if(s1)return Th;s1=1;var e=KS();Th=n;function n(r,l){return e(r,l,"pre")}return Th}var Ah,u1;function Ij(){if(u1)return Ah;u1=1;var e=vm(),n=XS();Ah=r;function r(l,a){var s=new e,u={},f=new n,h;function d(p){var y=p.v===h?p.w:p.v,v=f.priority(y);if(v!==void 0){var _=a(p);_0;){if(h=f.removeMin(),Object.hasOwn(u,h))s.setEdge(h,u[h]);else{if(m)throw new Error("Input graph is not connected: "+l);m=!0}l.nodeEdges(h).forEach(d)}return s}return Ah}var zh,c1;function Vj(){return c1||(c1=1,zh={components:Dj(),dijkstra:FS(),dijkstraAll:Rj(),findCycles:Lj(),floydWarshall:Hj(),isAcyclic:Bj(),postorder:qj(),preorder:Uj(),prim:Ij(),tarjan:QS(),topsort:ZS()}),zh}var Mh,f1;function $n(){if(f1)return Mh;f1=1;var e=jj();return Mh={Graph:e.Graph,json:Oj(),alg:Vj(),version:e.version},Mh}var jh,d1;function Gj(){if(d1)return jh;d1=1;class e{constructor(){let a={};a._next=a._prev=a,this._sentinel=a}dequeue(){let a=this._sentinel,s=a._prev;if(s!==a)return n(s),s}enqueue(a){let s=this._sentinel;a._prev&&a._next&&n(a),a._next=s._next,s._next._prev=a,s._next=a,a._prev=s}toString(){let a=[],s=this._sentinel,u=s._prev;for(;u!==s;)a.push(JSON.stringify(u,r)),u=u._prev;return"["+a.join(", ")+"]"}}function n(l){l._prev._next=l._next,l._next._prev=l._prev,delete l._next,delete l._prev}function r(l,a){if(l!=="_next"&&l!=="_prev")return a}return jh=e,jh}var Oh,h1;function Pj(){if(h1)return Oh;h1=1;let e=$n().Graph,n=Gj();Oh=l;let r=()=>1;function l(d,m){if(d.nodeCount()<=1)return[];let p=u(d,m||r);return a(p.graph,p.buckets,p.zeroIdx).flatMap(v=>d.outEdges(v.v,v.w))}function a(d,m,p){let y=[],v=m[m.length-1],_=m[0],k;for(;d.nodeCount();){for(;k=_.dequeue();)s(d,m,p,k);for(;k=v.dequeue();)s(d,m,p,k);if(d.nodeCount()){for(let w=m.length-2;w>0;--w)if(k=m[w].dequeue(),k){y=y.concat(s(d,m,p,k,!0));break}}}return y}function s(d,m,p,y,v){let _=v?[]:void 0;return d.inEdges(y.v).forEach(k=>{let w=d.edge(k),S=d.node(k.v);v&&_.push({v:k.v,w:k.w}),S.out-=w,f(m,p,S)}),d.outEdges(y.v).forEach(k=>{let w=d.edge(k),S=k.w,T=d.node(S);T.in-=w,f(m,p,T)}),d.removeNode(y.v),_}function u(d,m){let p=new e,y=0,v=0;d.nodes().forEach(w=>{p.setNode(w,{v:w,in:0,out:0})}),d.edges().forEach(w=>{let S=p.edge(w.v,w.w)||0,T=m(w),E=S+T;p.setEdge(w.v,w.w,E),v=Math.max(v,p.node(w.v).out+=T),y=Math.max(y,p.node(w.w).in+=T)});let _=h(v+y+3).map(()=>new n),k=y+1;return p.nodes().forEach(w=>{f(_,k,p.node(w))}),{graph:p,buckets:_,zeroIdx:k}}function f(d,m,p){p.out?p.in?d[p.out-p.in+m].enqueue(p):d[d.length-1].enqueue(p):d[0].enqueue(p)}function h(d){const m=[];for(let p=0;pU.setNode(X,D.node(X))),D.edges().forEach(X=>{let B=U.edge(X.v,X.w)||{weight:0,minlen:1},q=D.edge(X);U.setEdge(X.v,X.w,{weight:B.weight+q.weight,minlen:Math.max(B.minlen,q.minlen)})}),U}function l(D){let U=new e({multigraph:D.isMultigraph()}).setGraph(D.graph());return D.nodes().forEach(X=>{D.children(X).length||U.setNode(X,D.node(X))}),D.edges().forEach(X=>{U.setEdge(X,D.edge(X))}),U}function a(D){let U=D.nodes().map(X=>{let B={};return D.outEdges(X).forEach(q=>{B[q.w]=(B[q.w]||0)+D.edge(q).weight}),B});return R(D.nodes(),U)}function s(D){let U=D.nodes().map(X=>{let B={};return D.inEdges(X).forEach(q=>{B[q.v]=(B[q.v]||0)+D.edge(q).weight}),B});return R(D.nodes(),U)}function u(D,U){let X=D.x,B=D.y,q=U.x-X,ee=U.y-B,L=D.width/2,$=D.height/2;if(!q&&!ee)throw new Error("Not possible to find intersection inside of the rectangle");let M,P;return Math.abs(ee)*L>Math.abs(q)*$?(ee<0&&($=-$),M=$*q/ee,P=$):(q<0&&(L=-L),M=L,P=L*ee/q),{x:X+M,y:B+P}}function f(D){let U=A(_(D)+1).map(()=>[]);return D.nodes().forEach(X=>{let B=D.node(X),q=B.rank;q!==void 0&&(U[q][B.order]=X)}),U}function h(D){let U=D.nodes().map(B=>{let q=D.node(B).rank;return q===void 0?Number.MAX_VALUE:q}),X=v(Math.min,U);D.nodes().forEach(B=>{let q=D.node(B);Object.hasOwn(q,"rank")&&(q.rank-=X)})}function d(D){let U=D.nodes().map(L=>D.node(L).rank),X=v(Math.min,U),B=[];D.nodes().forEach(L=>{let $=D.node(L).rank-X;B[$]||(B[$]=[]),B[$].push(L)});let q=0,ee=D.graph().nodeRankFactor;Array.from(B).forEach((L,$)=>{L===void 0&&$%ee!==0?--q:L!==void 0&&q&&L.forEach(M=>D.node(M).rank+=q)})}function m(D,U,X,B){let q={width:0,height:0};return arguments.length>=4&&(q.rank=X,q.order=B),n(D,"border",q,U)}function p(D,U=y){const X=[];for(let B=0;By){const X=p(U);return D.apply(null,X.map(B=>D.apply(null,B)))}else return D.apply(null,U)}function _(D){const X=D.nodes().map(B=>{let q=D.node(B).rank;return q===void 0?Number.MIN_VALUE:q});return v(Math.max,X)}function k(D,U){let X={lhs:[],rhs:[]};return D.forEach(B=>{U(B)?X.lhs.push(B):X.rhs.push(B)}),X}function w(D,U){let X=Date.now();try{return U()}finally{console.log(D+" time: "+(Date.now()-X)+"ms")}}function S(D,U){return U()}let T=0;function E(D){var U=++T;return D+(""+U)}function A(D,U,X=1){U==null&&(U=D,D=0);let B=ee=>eeUB[U]),Object.entries(D).reduce((B,[q,ee])=>(B[q]=X(ee,q),B),{})}function R(D,U){return D.reduce((X,B,q)=>(X[B]=U[q],X),{})}return Dh}var Rh,m1;function $j(){if(m1)return Rh;m1=1;let e=Pj(),n=Tt().uniqueId;Rh={run:r,undo:a};function r(s){(s.graph().acyclicer==="greedy"?e(s,f(s)):l(s)).forEach(h=>{let d=s.edge(h);s.removeEdge(h),d.forwardName=h.name,d.reversed=!0,s.setEdge(h.w,h.v,d,n("rev"))});function f(h){return d=>h.edge(d).weight}}function l(s){let u=[],f={},h={};function d(m){Object.hasOwn(h,m)||(h[m]=!0,f[m]=!0,s.outEdges(m).forEach(p=>{Object.hasOwn(f,p.w)?u.push(p):d(p.w)}),delete f[m])}return s.nodes().forEach(d),u}function a(s){s.edges().forEach(u=>{let f=s.edge(u);if(f.reversed){s.removeEdge(u);let h=f.forwardName;delete f.reversed,delete f.forwardName,s.setEdge(u.w,u.v,f,h)}})}return Rh}var Lh,g1;function Yj(){if(g1)return Lh;g1=1;let e=Tt();Lh={run:n,undo:l};function n(a){a.graph().dummyChains=[],a.edges().forEach(s=>r(a,s))}function r(a,s){let u=s.v,f=a.node(u).rank,h=s.w,d=a.node(h).rank,m=s.name,p=a.edge(s),y=p.labelRank;if(d===f+1)return;a.removeEdge(s);let v,_,k;for(k=0,++f;f{let u=a.node(s),f=u.edgeLabel,h;for(a.setEdge(u.edgeObj,f);u.dummy;)h=a.successors(s)[0],a.removeNode(s),f.points.push({x:u.x,y:u.y}),u.dummy==="edge-label"&&(f.x=u.x,f.y=u.y,f.width=u.width,f.height=u.height),s=h,u=a.node(s)})}return Lh}var Hh,y1;function sc(){if(y1)return Hh;y1=1;const{applyWithChunking:e}=Tt();Hh={longestPath:n,slack:r};function n(l){var a={};function s(u){var f=l.node(u);if(Object.hasOwn(a,u))return f.rank;a[u]=!0;let h=l.outEdges(u).map(m=>m==null?Number.POSITIVE_INFINITY:s(m.w)-l.edge(m).minlen);var d=e(Math.min,h);return d===Number.POSITIVE_INFINITY&&(d=0),f.rank=d}l.sources().forEach(s)}function r(l,a){return l.node(a.w).rank-l.node(a.v).rank-l.edge(a).minlen}return Hh}var Bh,x1;function JS(){if(x1)return Bh;x1=1;var e=$n().Graph,n=sc().slack;Bh=r;function r(u){var f=new e({directed:!1}),h=u.nodes()[0],d=u.nodeCount();f.setNode(h,{});for(var m,p;l(f,u){var p=m.v,y=d===p?m.w:p;!u.hasNode(y)&&!n(f,m)&&(u.setNode(y,{}),u.setEdge(d,y,{}),h(y))})}return u.nodes().forEach(h),u.nodeCount()}function a(u,f){return f.edges().reduce((d,m)=>{let p=Number.POSITIVE_INFINITY;return u.hasNode(m.v)!==u.hasNode(m.w)&&(p=n(f,m)),pf.node(d).rank+=h)}return Bh}var qh,v1;function Xj(){if(v1)return qh;v1=1;var e=JS(),n=sc().slack,r=sc().longestPath,l=$n().alg.preorder,a=$n().alg.postorder,s=Tt().simplify;qh=u,u.initLowLimValues=m,u.initCutValues=f,u.calcCutValue=d,u.leaveEdge=y,u.enterEdge=v,u.exchangeEdges=_;function u(T){T=s(T),r(T);var E=e(T);m(E),f(E,T);for(var A,I;A=y(E);)I=v(E,T,A),_(E,T,A,I)}function f(T,E){var A=a(T,T.nodes());A=A.slice(0,A.length-1),A.forEach(I=>h(T,E,I))}function h(T,E,A){var I=T.node(A),z=I.parent;T.edge(A,z).cutvalue=d(T,E,A)}function d(T,E,A){var I=T.node(A),z=I.parent,R=!0,D=E.edge(A,z),U=0;return D||(R=!1,D=E.edge(z,A)),U=D.weight,E.nodeEdges(A).forEach(X=>{var B=X.v===A,q=B?X.w:X.v;if(q!==z){var ee=B===R,L=E.edge(X).weight;if(U+=ee?L:-L,w(T,A,q)){var $=T.edge(A,q).cutvalue;U+=ee?-$:$}}}),U}function m(T,E){arguments.length<2&&(E=T.nodes()[0]),p(T,{},1,E)}function p(T,E,A,I,z){var R=A,D=T.node(I);return E[I]=!0,T.neighbors(I).forEach(U=>{Object.hasOwn(E,U)||(A=p(T,E,A,U,I))}),D.low=R,D.lim=A++,z?D.parent=z:delete D.parent,A}function y(T){return T.edges().find(E=>T.edge(E).cutvalue<0)}function v(T,E,A){var I=A.v,z=A.w;E.hasEdge(I,z)||(I=A.w,z=A.v);var R=T.node(I),D=T.node(z),U=R,X=!1;R.lim>D.lim&&(U=D,X=!0);var B=E.edges().filter(q=>X===S(T,T.node(q.v),U)&&X!==S(T,T.node(q.w),U));return B.reduce((q,ee)=>n(E,ee)!E.node(z).parent),I=l(T,A);I=I.slice(1),I.forEach(z=>{var R=T.node(z).parent,D=E.edge(z,R),U=!1;D||(D=E.edge(R,z),U=!0),E.node(z).rank=E.node(R).rank+(U?D.minlen:-D.minlen)})}function w(T,E,A){return T.hasEdge(E,A)}function S(T,E,A){return A.low<=E.lim&&E.lim<=A.lim}return qh}var Uh,b1;function Fj(){if(b1)return Uh;b1=1;var e=sc(),n=e.longestPath,r=JS(),l=Xj();Uh=a;function a(h){var d=h.graph().ranker;if(d instanceof Function)return d(h);switch(h.graph().ranker){case"network-simplex":f(h);break;case"tight-tree":u(h);break;case"longest-path":s(h);break;case"none":break;default:f(h)}}var s=n;function u(h){n(h),r(h)}function f(h){l(h)}return Uh}var Ih,w1;function Qj(){if(w1)return Ih;w1=1,Ih=e;function e(l){let a=r(l);l.graph().dummyChains.forEach(s=>{let u=l.node(s),f=u.edgeObj,h=n(l,a,f.v,f.w),d=h.path,m=h.lca,p=0,y=d[p],v=!0;for(;s!==f.w;){if(u=l.node(s),v){for(;(y=d[p])!==m&&l.node(y).maxRankd||m>a[p].lim));for(y=p,p=u;(p=l.parent(p))!==y;)h.push(p);return{path:f.concat(h.reverse()),lca:y}}function r(l){let a={},s=0;function u(f){let h=s;l.children(f).forEach(u),a[f]={low:h,lim:s++}}return l.children().forEach(u),a}return Ih}var Vh,S1;function Zj(){if(S1)return Vh;S1=1;let e=Tt();Vh={run:n,cleanup:s};function n(u){let f=e.addDummyNode(u,"root",{},"_root"),h=l(u),d=Object.values(h),m=e.applyWithChunking(Math.max,d)-1,p=2*m+1;u.graph().nestingRoot=f,u.edges().forEach(v=>u.edge(v).minlen*=p);let y=a(u)+1;u.children().forEach(v=>r(u,f,p,y,m,h,v)),u.graph().nodeRankFactor=p}function r(u,f,h,d,m,p,y){let v=u.children(y);if(!v.length){y!==f&&u.setEdge(f,y,{weight:0,minlen:h});return}let _=e.addBorderNode(u,"_bt"),k=e.addBorderNode(u,"_bb"),w=u.node(y);u.setParent(_,y),w.borderTop=_,u.setParent(k,y),w.borderBottom=k,v.forEach(S=>{r(u,f,h,d,m,p,S);let T=u.node(S),E=T.borderTop?T.borderTop:S,A=T.borderBottom?T.borderBottom:S,I=T.borderTop?d:2*d,z=E!==A?1:m-p[y]+1;u.setEdge(_,E,{weight:I,minlen:z,nestingEdge:!0}),u.setEdge(A,k,{weight:I,minlen:z,nestingEdge:!0})}),u.parent(y)||u.setEdge(f,_,{weight:0,minlen:m+p[y]})}function l(u){var f={};function h(d,m){var p=u.children(d);p&&p.length&&p.forEach(y=>h(y,m+1)),f[d]=m}return u.children().forEach(d=>h(d,1)),f}function a(u){return u.edges().reduce((f,h)=>f+u.edge(h).weight,0)}function s(u){var f=u.graph();u.removeNode(f.nestingRoot),delete f.nestingRoot,u.edges().forEach(h=>{var d=u.edge(h);d.nestingEdge&&u.removeEdge(h)})}return Vh}var Gh,_1;function Kj(){if(_1)return Gh;_1=1;let e=Tt();Gh=n;function n(l){function a(s){let u=l.children(s),f=l.node(s);if(u.length&&u.forEach(a),Object.hasOwn(f,"minRank")){f.borderLeft=[],f.borderRight=[];for(let h=f.minRank,d=f.maxRank+1;hl(h.node(d))),h.edges().forEach(d=>l(h.edge(d)))}function l(h){let d=h.width;h.width=h.height,h.height=d}function a(h){h.nodes().forEach(d=>s(h.node(d))),h.edges().forEach(d=>{let m=h.edge(d);m.points.forEach(s),Object.hasOwn(m,"y")&&s(m)})}function s(h){h.y=-h.y}function u(h){h.nodes().forEach(d=>f(h.node(d))),h.edges().forEach(d=>{let m=h.edge(d);m.points.forEach(f),Object.hasOwn(m,"x")&&f(m)})}function f(h){let d=h.x;h.x=h.y,h.y=d}return Ph}var $h,N1;function Wj(){if(N1)return $h;N1=1;let e=Tt();$h=n;function n(r){let l={},a=r.nodes().filter(m=>!r.children(m).length),s=a.map(m=>r.node(m).rank),u=e.applyWithChunking(Math.max,s),f=e.range(u+1).map(()=>[]);function h(m){if(l[m])return;l[m]=!0;let p=r.node(m);f[p.rank].push(m),r.successors(m).forEach(h)}return a.sort((m,p)=>r.node(m).rank-r.node(p).rank).forEach(h),f}return $h}var Yh,k1;function e5(){if(k1)return Yh;k1=1;let e=Tt().zipObject;Yh=n;function n(l,a){let s=0;for(let u=1;uv)),f=a.flatMap(y=>l.outEdges(y).map(v=>({pos:u[v.w],weight:l.edge(v).weight})).sort((v,_)=>v.pos-_.pos)),h=1;for(;h{let v=y.pos+h;m[v]+=y.weight;let _=0;for(;v>0;)v%2&&(_+=m[v+1]),v=v-1>>1,m[v]+=y.weight;p+=y.weight*_}),p}return Yh}var Xh,C1;function t5(){if(C1)return Xh;C1=1,Xh=e;function e(n,r=[]){return r.map(l=>{let a=n.inEdges(l);if(a.length){let s=a.reduce((u,f)=>{let h=n.edge(f),d=n.node(f.v);return{sum:u.sum+h.weight*d.order,weight:u.weight+h.weight}},{sum:0,weight:0});return{v:l,barycenter:s.sum/s.weight,weight:s.weight}}else return{v:l}})}return Xh}var Fh,T1;function n5(){if(T1)return Fh;T1=1;let e=Tt();Fh=n;function n(a,s){let u={};a.forEach((h,d)=>{let m=u[h.v]={indegree:0,in:[],out:[],vs:[h.v],i:d};h.barycenter!==void 0&&(m.barycenter=h.barycenter,m.weight=h.weight)}),s.edges().forEach(h=>{let d=u[h.v],m=u[h.w];d!==void 0&&m!==void 0&&(m.indegree++,d.out.push(u[h.w]))});let f=Object.values(u).filter(h=>!h.indegree);return r(f)}function r(a){let s=[];function u(h){return d=>{d.merged||(d.barycenter===void 0||h.barycenter===void 0||d.barycenter>=h.barycenter)&&l(h,d)}}function f(h){return d=>{d.in.push(h),--d.indegree===0&&a.push(d)}}for(;a.length;){let h=a.pop();s.push(h),h.in.reverse().forEach(u(h)),h.out.forEach(f(h))}return s.filter(h=>!h.merged).map(h=>e.pick(h,["vs","i","barycenter","weight"]))}function l(a,s){let u=0,f=0;a.weight&&(u+=a.barycenter*a.weight,f+=a.weight),s.weight&&(u+=s.barycenter*s.weight,f+=s.weight),a.vs=s.vs.concat(a.vs),a.barycenter=u/f,a.weight=f,a.i=Math.min(s.i,a.i),s.merged=!0}return Fh}var Qh,A1;function r5(){if(A1)return Qh;A1=1;let e=Tt();Qh=n;function n(a,s){let u=e.partition(a,_=>Object.hasOwn(_,"barycenter")),f=u.lhs,h=u.rhs.sort((_,k)=>k.i-_.i),d=[],m=0,p=0,y=0;f.sort(l(!!s)),y=r(d,h,y),f.forEach(_=>{y+=_.vs.length,d.push(_.vs),m+=_.barycenter*_.weight,p+=_.weight,y=r(d,h,y)});let v={vs:d.flat(!0)};return p&&(v.barycenter=m/p,v.weight=p),v}function r(a,s,u){let f;for(;s.length&&(f=s[s.length-1]).i<=u;)s.pop(),a.push(f.vs),u++;return u}function l(a){return(s,u)=>s.barycenteru.barycenter?1:a?u.i-s.i:s.i-u.i}return Qh}var Zh,z1;function i5(){if(z1)return Zh;z1=1;let e=t5(),n=n5(),r=r5();Zh=l;function l(u,f,h,d){let m=u.children(f),p=u.node(f),y=p?p.borderLeft:void 0,v=p?p.borderRight:void 0,_={};y&&(m=m.filter(T=>T!==y&&T!==v));let k=e(u,m);k.forEach(T=>{if(u.children(T.v).length){let E=l(u,T.v,h,d);_[T.v]=E,Object.hasOwn(E,"barycenter")&&s(T,E)}});let w=n(k,h);a(w,_);let S=r(w,d);if(y&&(S.vs=[y,S.vs,v].flat(!0),u.predecessors(y).length)){let T=u.node(u.predecessors(y)[0]),E=u.node(u.predecessors(v)[0]);Object.hasOwn(S,"barycenter")||(S.barycenter=0,S.weight=0),S.barycenter=(S.barycenter*S.weight+T.order+E.order)/(S.weight+2),S.weight+=2}return S}function a(u,f){u.forEach(h=>{h.vs=h.vs.flatMap(d=>f[d]?f[d].vs:d)})}function s(u,f){u.barycenter!==void 0?(u.barycenter=(u.barycenter*u.weight+f.barycenter*f.weight)/(u.weight+f.weight),u.weight+=f.weight):(u.barycenter=f.barycenter,u.weight=f.weight)}return Zh}var Kh,M1;function l5(){if(M1)return Kh;M1=1;let e=$n().Graph,n=Tt();Kh=r;function r(a,s,u,f){f||(f=a.nodes());let h=l(a),d=new e({compound:!0}).setGraph({root:h}).setDefaultNodeLabel(m=>a.node(m));return f.forEach(m=>{let p=a.node(m),y=a.parent(m);(p.rank===s||p.minRank<=s&&s<=p.maxRank)&&(d.setNode(m),d.setParent(m,y||h),a[u](m).forEach(v=>{let _=v.v===m?v.w:v.v,k=d.edge(_,m),w=k!==void 0?k.weight:0;d.setEdge(_,m,{weight:a.edge(v).weight+w})}),Object.hasOwn(p,"minRank")&&d.setNode(m,{borderLeft:p.borderLeft[s],borderRight:p.borderRight[s]}))}),d}function l(a){for(var s;a.hasNode(s=n.uniqueId("_root")););return s}return Kh}var Jh,j1;function a5(){if(j1)return Jh;j1=1,Jh=e;function e(n,r,l){let a={},s;l.forEach(u=>{let f=n.parent(u),h,d;for(;f;){if(h=n.parent(f),h?(d=a[h],a[h]=f):(d=s,s=f),d&&d!==f){r.setEdge(d,f);return}f=h}})}return Jh}var Wh,O1;function o5(){if(O1)return Wh;O1=1;let e=Wj(),n=e5(),r=i5(),l=l5(),a=a5(),s=$n().Graph,u=Tt();Wh=f;function f(p,y){if(y&&typeof y.customOrder=="function"){y.customOrder(p,f);return}let v=u.maxRank(p),_=h(p,u.range(1,v+1),"inEdges"),k=h(p,u.range(v-1,-1,-1),"outEdges"),w=e(p);if(m(p,w),y&&y.disableOptimalOrderHeuristic)return;let S=Number.POSITIVE_INFINITY,T;for(let E=0,A=0;A<4;++E,++A){d(E%2?_:k,E%4>=2),w=u.buildLayerMatrix(p);let I=n(p,w);I{_.has(w)||_.set(w,[]),_.get(w).push(S)};for(const w of p.nodes()){const S=p.node(w);if(typeof S.rank=="number"&&k(S.rank,w),typeof S.minRank=="number"&&typeof S.maxRank=="number")for(let T=S.minRank;T<=S.maxRank;T++)T!==S.rank&&k(T,w)}return y.map(function(w){return l(p,w,v,_.get(w)||[])})}function d(p,y){let v=new s;p.forEach(function(_){let k=_.graph().root,w=r(_,k,v,y);w.vs.forEach((S,T)=>_.node(S).order=T),a(_,v,w.vs)})}function m(p,y){Object.values(y).forEach(v=>v.forEach((_,k)=>p.node(_).order=k))}return Wh}var ep,D1;function s5(){if(D1)return ep;D1=1;let e=$n().Graph,n=Tt();ep={positionX:v,findType1Conflicts:r,findType2Conflicts:l,addConflict:s,hasConflict:u,verticalAlignment:f,horizontalCompaction:h,alignCoordinates:p,findSmallestWidthAlignment:m,balance:y};function r(w,S){let T={};function E(A,I){let z=0,R=0,D=A.length,U=I[I.length-1];return I.forEach((X,B)=>{let q=a(w,X),ee=q?w.node(q).order:D;(q||X===U)&&(I.slice(R,B+1).forEach(L=>{w.predecessors(L).forEach($=>{let M=w.node($),P=M.order;(P{X=I[B],w.node(X).dummy&&w.predecessors(X).forEach(q=>{let ee=w.node(q);ee.dummy&&(ee.orderU)&&s(T,q,X)})})}function A(I,z){let R=-1,D,U=0;return z.forEach((X,B)=>{if(w.node(X).dummy==="border"){let q=w.predecessors(X);q.length&&(D=w.node(q[0]).order,E(z,U,B,R,D),U=B,R=D)}E(z,U,z.length,D,I.length)}),z}return S.length&&S.reduce(A),T}function a(w,S){if(w.node(S).dummy)return w.predecessors(S).find(T=>w.node(T).dummy)}function s(w,S,T){if(S>T){let A=S;S=T,T=A}let E=w[S];E||(w[S]=E={}),E[T]=!0}function u(w,S,T){if(S>T){let E=S;S=T,T=E}return!!w[S]&&Object.hasOwn(w[S],T)}function f(w,S,T,E){let A={},I={},z={};return S.forEach(R=>{R.forEach((D,U)=>{A[D]=D,I[D]=D,z[D]=U})}),S.forEach(R=>{let D=-1;R.forEach(U=>{let X=E(U);if(X.length){X=X.sort((q,ee)=>z[q]-z[ee]);let B=(X.length-1)/2;for(let q=Math.floor(B),ee=Math.ceil(B);q<=ee;++q){let L=X[q];I[U]===U&&DMath.max(q,I[ee.v]+z.edge(ee)),0)}function X(B){let q=z.outEdges(B).reduce((L,$)=>Math.min(L,I[$.w]-z.edge($)),Number.POSITIVE_INFINITY),ee=w.node(B);q!==Number.POSITIVE_INFINITY&&ee.borderType!==R&&(I[B]=Math.max(I[B],q))}return D(U,z.predecessors.bind(z)),D(X,z.successors.bind(z)),Object.keys(E).forEach(B=>I[B]=I[T[B]]),I}function d(w,S,T,E){let A=new e,I=w.graph(),z=_(I.nodesep,I.edgesep,E);return S.forEach(R=>{let D;R.forEach(U=>{let X=T[U];if(A.setNode(X),D){var B=T[D],q=A.edge(B,X);A.setEdge(B,X,Math.max(z(w,U,D),q||0))}D=U})}),A}function m(w,S){return Object.values(S).reduce((T,E)=>{let A=Number.NEGATIVE_INFINITY,I=Number.POSITIVE_INFINITY;Object.entries(E).forEach(([R,D])=>{let U=k(w,R)/2;A=Math.max(D+U,A),I=Math.min(D-U,I)});const z=A-I;return z{["l","r"].forEach(z=>{let R=I+z,D=w[R];if(D===S)return;let U=Object.values(D),X=E-n.applyWithChunking(Math.min,U);z!=="l"&&(X=A-n.applyWithChunking(Math.max,U)),X&&(w[R]=n.mapValues(D,B=>B+X))})})}function y(w,S){return n.mapValues(w.ul,(T,E)=>{if(S)return w[S.toLowerCase()][E];{let A=Object.values(w).map(I=>I[E]).sort((I,z)=>I-z);return(A[1]+A[2])/2}})}function v(w){let S=n.buildLayerMatrix(w),T=Object.assign(r(w,S),l(w,S)),E={},A;["u","d"].forEach(z=>{A=z==="u"?S:Object.values(S).reverse(),["l","r"].forEach(R=>{R==="r"&&(A=A.map(B=>Object.values(B).reverse()));let D=(z==="u"?w.predecessors:w.successors).bind(w),U=f(w,A,T,D),X=h(w,A,U.root,U.align,R==="r");R==="r"&&(X=n.mapValues(X,B=>-B)),E[z+R]=X})});let I=m(w,E);return p(E,I),y(E,w.graph().align)}function _(w,S,T){return(E,A,I)=>{let z=E.node(A),R=E.node(I),D=0,U;if(D+=z.width/2,Object.hasOwn(z,"labelpos"))switch(z.labelpos.toLowerCase()){case"l":U=-z.width/2;break;case"r":U=z.width/2;break}if(U&&(D+=T?U:-U),U=0,D+=(z.dummy?S:w)/2,D+=(R.dummy?S:w)/2,D+=R.width/2,Object.hasOwn(R,"labelpos"))switch(R.labelpos.toLowerCase()){case"l":U=R.width/2;break;case"r":U=-R.width/2;break}return U&&(D+=T?U:-U),U=0,D}}function k(w,S){return w.node(S).width}return ep}var tp,R1;function u5(){if(R1)return tp;R1=1;let e=Tt(),n=s5().positionX;tp=r;function r(a){a=e.asNonCompoundGraph(a),l(a),Object.entries(n(a)).forEach(([s,u])=>a.node(s).x=u)}function l(a){let s=e.buildLayerMatrix(a),u=a.graph().ranksep,f=0;s.forEach(h=>{const d=h.reduce((m,p)=>{const y=a.node(p).height;return m>y?m:y},0);h.forEach(m=>a.node(m).y=f+d/2),f+=d+u})}return tp}var np,L1;function c5(){if(L1)return np;L1=1;let e=$j(),n=Yj(),r=Fj(),l=Tt().normalizeRanks,a=Qj(),s=Tt().removeEmptyRanks,u=Zj(),f=Kj(),h=Jj(),d=o5(),m=u5(),p=Tt(),y=$n().Graph;np=v;function v(N,G){let F=G&&G.debugTiming?p.time:p.notime;F("layout",()=>{let J=F(" buildLayoutGraph",()=>D(N));F(" runLayout",()=>_(J,F,G)),F(" updateInputGraph",()=>k(N,J))})}function _(N,G,F){G(" makeSpaceForEdgeLabels",()=>U(N)),G(" removeSelfEdges",()=>Q(N)),G(" acyclic",()=>e.run(N)),G(" nestingGraph.run",()=>u.run(N)),G(" rank",()=>r(p.asNonCompoundGraph(N))),G(" injectEdgeLabelProxies",()=>X(N)),G(" removeEmptyRanks",()=>s(N)),G(" nestingGraph.cleanup",()=>u.cleanup(N)),G(" normalizeRanks",()=>l(N)),G(" assignRankMinMax",()=>B(N)),G(" removeEdgeLabelProxies",()=>q(N)),G(" normalize.run",()=>n.run(N)),G(" parentDummyChains",()=>a(N)),G(" addBorderSegments",()=>f(N)),G(" order",()=>d(N,F)),G(" insertSelfEdges",()=>K(N)),G(" adjustCoordinateSystem",()=>h.adjust(N)),G(" position",()=>m(N)),G(" positionSelfEdges",()=>j(N)),G(" removeBorderNodes",()=>P(N)),G(" normalize.undo",()=>n.undo(N)),G(" fixupEdgeLabelCoords",()=>$(N)),G(" undoCoordinateSystem",()=>h.undo(N)),G(" translateGraph",()=>ee(N)),G(" assignNodeIntersects",()=>L(N)),G(" reversePoints",()=>M(N)),G(" acyclic.undo",()=>e.undo(N))}function k(N,G){N.nodes().forEach(F=>{let J=N.node(F),ne=G.node(F);J&&(J.x=ne.x,J.y=ne.y,J.rank=ne.rank,G.children(F).length&&(J.width=ne.width,J.height=ne.height))}),N.edges().forEach(F=>{let J=N.edge(F),ne=G.edge(F);J.points=ne.points,Object.hasOwn(ne,"x")&&(J.x=ne.x,J.y=ne.y)}),N.graph().width=G.graph().width,N.graph().height=G.graph().height}let w=["nodesep","edgesep","ranksep","marginx","marginy"],S={ranksep:50,edgesep:20,nodesep:50,rankdir:"tb"},T=["acyclicer","ranker","rankdir","align"],E=["width","height","rank"],A={width:0,height:0},I=["minlen","weight","width","height","labeloffset"],z={minlen:1,weight:1,width:0,height:0,labeloffset:10,labelpos:"r"},R=["labelpos"];function D(N){let G=new y({multigraph:!0,compound:!0}),F=Y(N.graph());return G.setGraph(Object.assign({},S,H(F,w),p.pick(F,T))),N.nodes().forEach(J=>{let ne=Y(N.node(J));const re=H(ne,E);Object.keys(A).forEach(se=>{re[se]===void 0&&(re[se]=A[se])}),G.setNode(J,re),G.setParent(J,N.parent(J))}),N.edges().forEach(J=>{let ne=Y(N.edge(J));G.setEdge(J,Object.assign({},z,H(ne,I),p.pick(ne,R)))}),G}function U(N){let G=N.graph();G.ranksep/=2,N.edges().forEach(F=>{let J=N.edge(F);J.minlen*=2,J.labelpos.toLowerCase()!=="c"&&(G.rankdir==="TB"||G.rankdir==="BT"?J.width+=J.labeloffset:J.height+=J.labeloffset)})}function X(N){N.edges().forEach(G=>{let F=N.edge(G);if(F.width&&F.height){let J=N.node(G.v),re={rank:(N.node(G.w).rank-J.rank)/2+J.rank,e:G};p.addDummyNode(N,"edge-proxy",re,"_ep")}})}function B(N){let G=0;N.nodes().forEach(F=>{let J=N.node(F);J.borderTop&&(J.minRank=N.node(J.borderTop).rank,J.maxRank=N.node(J.borderBottom).rank,G=Math.max(G,J.maxRank))}),N.graph().maxRank=G}function q(N){N.nodes().forEach(G=>{let F=N.node(G);F.dummy==="edge-proxy"&&(N.edge(F.e).labelRank=F.rank,N.removeNode(G))})}function ee(N){let G=Number.POSITIVE_INFINITY,F=0,J=Number.POSITIVE_INFINITY,ne=0,re=N.graph(),se=re.marginx||0,ye=re.marginy||0;function be(xe){let pe=xe.x,_e=xe.y,Me=xe.width,Ce=xe.height;G=Math.min(G,pe-Me/2),F=Math.max(F,pe+Me/2),J=Math.min(J,_e-Ce/2),ne=Math.max(ne,_e+Ce/2)}N.nodes().forEach(xe=>be(N.node(xe))),N.edges().forEach(xe=>{let pe=N.edge(xe);Object.hasOwn(pe,"x")&&be(pe)}),G-=se,J-=ye,N.nodes().forEach(xe=>{let pe=N.node(xe);pe.x-=G,pe.y-=J}),N.edges().forEach(xe=>{let pe=N.edge(xe);pe.points.forEach(_e=>{_e.x-=G,_e.y-=J}),Object.hasOwn(pe,"x")&&(pe.x-=G),Object.hasOwn(pe,"y")&&(pe.y-=J)}),re.width=F-G+se,re.height=ne-J+ye}function L(N){N.edges().forEach(G=>{let F=N.edge(G),J=N.node(G.v),ne=N.node(G.w),re,se;F.points?(re=F.points[0],se=F.points[F.points.length-1]):(F.points=[],re=ne,se=J),F.points.unshift(p.intersectRect(J,re)),F.points.push(p.intersectRect(ne,se))})}function $(N){N.edges().forEach(G=>{let F=N.edge(G);if(Object.hasOwn(F,"x"))switch((F.labelpos==="l"||F.labelpos==="r")&&(F.width-=F.labeloffset),F.labelpos){case"l":F.x-=F.width/2+F.labeloffset;break;case"r":F.x+=F.width/2+F.labeloffset;break}})}function M(N){N.edges().forEach(G=>{let F=N.edge(G);F.reversed&&F.points.reverse()})}function P(N){N.nodes().forEach(G=>{if(N.children(G).length){let F=N.node(G),J=N.node(F.borderTop),ne=N.node(F.borderBottom),re=N.node(F.borderLeft[F.borderLeft.length-1]),se=N.node(F.borderRight[F.borderRight.length-1]);F.width=Math.abs(se.x-re.x),F.height=Math.abs(ne.y-J.y),F.x=re.x+F.width/2,F.y=J.y+F.height/2}}),N.nodes().forEach(G=>{N.node(G).dummy==="border"&&N.removeNode(G)})}function Q(N){N.edges().forEach(G=>{if(G.v===G.w){var F=N.node(G.v);F.selfEdges||(F.selfEdges=[]),F.selfEdges.push({e:G,label:N.edge(G)}),N.removeEdge(G)}})}function K(N){var G=p.buildLayerMatrix(N);G.forEach(F=>{var J=0;F.forEach((ne,re)=>{var se=N.node(ne);se.order=re+J,(se.selfEdges||[]).forEach(ye=>{p.addDummyNode(N,"selfedge",{width:ye.label.width,height:ye.label.height,rank:se.rank,order:re+ ++J,e:ye.e,label:ye.label},"_se")}),delete se.selfEdges})})}function j(N){N.nodes().forEach(G=>{var F=N.node(G);if(F.dummy==="selfedge"){var J=N.node(F.e.v),ne=J.x+J.width/2,re=J.y,se=F.x-ne,ye=J.height/2;N.setEdge(F.e,F.label),N.removeNode(G),F.label.points=[{x:ne+2*se/3,y:re-ye},{x:ne+5*se/6,y:re-ye},{x:ne+se,y:re},{x:ne+5*se/6,y:re+ye},{x:ne+2*se/3,y:re+ye}],F.label.x=F.x,F.label.y=F.y}})}function H(N,G){return p.mapValues(p.pick(N,G),Number)}function Y(N){var G={};return N&&Object.entries(N).forEach(([F,J])=>{typeof F=="string"&&(F=F.toLowerCase()),G[F]=J}),G}return np}var rp,H1;function f5(){if(H1)return rp;H1=1;let e=Tt(),n=$n().Graph;rp={debugOrdering:r};function r(l){let a=e.buildLayerMatrix(l),s=new n({compound:!0,multigraph:!0}).setGraph({});return l.nodes().forEach(u=>{s.setNode(u,{label:u}),s.setParent(u,"layer"+l.node(u).rank)}),l.edges().forEach(u=>s.setEdge(u.v,u.w,{},u.name)),a.forEach((u,f)=>{let h="layer"+f;s.setNode(h,{rank:"same"}),u.reduce((d,m)=>(s.setEdge(d,m,{style:"invis"}),m))}),s}return rp}var ip,B1;function d5(){return B1||(B1=1,ip="1.1.8"),ip}var lp,q1;function h5(){return q1||(q1=1,lp={graphlib:$n(),layout:c5(),debug:f5(),util:{time:Tt().time,notime:Tt().notime},version:d5()}),lp}var p5=h5();const U1=Io(p5),So=200,Jl=56,I1=20,V1=40,m5=20,G1=12;function g5(e,n,r,l,a,s,u,f){const h=[],d=[],m=new Set,p=new Set,y=new Map;for(const w of r)for(const S of w.agents)p.add(S),y.set(S,w.name);for(const w of r){const S=a[w.name],T=w.agents.length,E=So+I1*2,A=V1+T*Jl+(T-1)*G1+m5;h.push({id:w.name,type:"groupNode",position:{x:0,y:0},data:{label:w.name,type:"parallel_group",status:(S==null?void 0:S.status)||"pending",groupName:w.name,progress:s[w.name]},style:{width:E,height:A}});for(let I=0;I$entryPoint",source:"$start",target:u,type:"animatedEdge",data:{},animated:!1})}const _=new Set(h.map(w=>w.id)),k=new Map;for(const w of h)w.parentId&&k.set(w.id,w.parentId);for(const w of n){const S=k.get(w.from)??w.from,T=k.get(w.to)??w.to;if(!_.has(S)||!_.has(T)||S===T)continue;const E=`${S}->${T}${w.when?`[${w.when}]`:""}`;d.push({id:E,source:S,target:T,type:"animatedEdge",data:{when:w.when},animated:!1})}return y5(h,d),{nodes:h,edges:d}}function y5(e,n){var l,a,s,u;const r=new U1.graphlib.Graph;r.setDefaultEdgeLabel(()=>({})),r.setGraph({rankdir:"TB",nodesep:50,ranksep:70,marginx:30,marginy:30});for(const f of e){if(f.parentId)continue;const h=f.type==="groupNode",d=h&&((l=f.style)==null?void 0:l.width)||So,m=h&&((a=f.style)==null?void 0:a.height)||Jl;r.setNode(f.id,{width:d,height:m})}for(const f of n)r.hasNode(f.source)&&r.hasNode(f.target)&&r.setEdge(f.source,f.target);U1.layout(r);for(const f of e){if(f.parentId)continue;const h=r.node(f.id);if(!h)continue;const d=f.type==="groupNode",m=d&&((s=f.style)==null?void 0:s.width)||So,p=d&&((u=f.style)==null?void 0:u.height)||Jl;f.position={x:h.x-m/2,y:h.y-p/2}}}const Ge={pending:"#6b7280",running:"#3b82f6",completed:"#22c55e",failed:"#ef4444",paused:"#f59e0b",idle:"#6b7280",waiting:"#a855f7"},x5=70,P1=90;function kc({data:e,children:n}){const[r,l]=V.useState(!1),a=V.useRef(null),s=V.useCallback(()=>{a.current=setTimeout(()=>l(!0),200)},[]),u=V.useCallback(()=>{a.current&&clearTimeout(a.current),l(!1)},[]),f=Ge[e.status]||Ge.pending;return b.jsxs("div",{className:"relative",onMouseEnter:s,onMouseLeave:u,children:[n,r&&b.jsxs("div",{className:Le("absolute z-50 bottom-full left-1/2 -translate-x-1/2 mb-2","bg-[var(--surface-raised)] border border-[var(--border)] shadow-lg","rounded-lg px-3 py-2 max-w-[260px] pointer-events-none","animate-[tooltip-in_150ms_ease-out]"),children:[b.jsx("div",{className:"absolute top-full left-1/2 -translate-x-1/2 w-0 h-0 border-x-[6px] border-x-transparent border-t-[6px] border-t-[var(--border)]"}),b.jsxs("div",{className:"flex flex-col gap-1.5 text-[11px]",children:[b.jsxs("div",{className:"flex items-center gap-1.5",children:[b.jsx("span",{className:"w-2 h-2 rounded-full flex-shrink-0",style:{backgroundColor:f}}),b.jsx("span",{className:"font-medium text-[var(--text)] capitalize",children:e.status}),e.iteration!=null&&e.iteration>1&&b.jsxs("span",{className:"text-[var(--text-muted)] ml-auto",children:["iter ",e.iteration]})]}),b.jsx("div",{className:"h-px bg-[var(--border)]"}),b.jsxs("div",{className:"grid grid-cols-[auto_1fr] gap-x-3 gap-y-0.5",children:[e.elapsed!=null&&b.jsxs(b.Fragment,{children:[b.jsx("span",{className:"text-[var(--text-muted)]",children:"Elapsed"}),b.jsx("span",{className:"text-[var(--text)] font-mono",children:Qt(e.elapsed)})]}),e.model&&b.jsxs(b.Fragment,{children:[b.jsx("span",{className:"text-[var(--text-muted)]",children:"Model"}),b.jsx("span",{className:"text-[var(--text)] truncate",children:e.model})]}),e.tokens!=null&&b.jsxs(b.Fragment,{children:[b.jsx("span",{className:"text-[var(--text-muted)]",children:"Tokens"}),b.jsxs("span",{className:"text-[var(--text)] font-mono",children:[Gn(e.tokens),e.inputTokens!=null&&e.outputTokens!=null&&b.jsxs("span",{className:"text-[var(--text-muted)]",children:[" ","(",Gn(e.inputTokens),"↑ ",Gn(e.outputTokens),"↓)"]})]})]}),e.costUsd!=null&&b.jsxs(b.Fragment,{children:[b.jsx("span",{className:"text-[var(--text-muted)]",children:"Cost"}),b.jsx("span",{className:"text-[var(--text)] font-mono",children:mi(e.costUsd)})]}),e.exitCode!=null&&b.jsxs(b.Fragment,{children:[b.jsx("span",{className:"text-[var(--text-muted)]",children:"Exit code"}),b.jsx("span",{className:Le("font-mono",e.exitCode===0?"text-[var(--completed)]":"text-[var(--failed)]"),children:e.exitCode})]}),e.selectedOption&&b.jsxs(b.Fragment,{children:[b.jsx("span",{className:"text-[var(--text-muted)]",children:"Selected"}),b.jsx("span",{className:"text-[var(--text)] truncate",children:e.selectedOption})]})]}),e.errorMessage&&b.jsxs(b.Fragment,{children:[b.jsx("div",{className:"h-px bg-[var(--border)]"}),b.jsxs("div",{className:"text-red-400 leading-tight",children:[e.errorType&&b.jsxs("span",{className:"font-medium",children:[e.errorType,": "]}),b.jsxs("span",{className:"break-words",children:[e.errorMessage.slice(0,120),e.errorMessage.length>120?"...":""]})]})]})]})]})]})}const v5=V.memo(function({data:n,id:r,selected:l}){var R;const a=n,s=tl(),f=((R=s[r])==null?void 0:R.status)||a.status||"pending",h=Ge[f]||Ge.pending,d=s[r],m=d==null?void 0:d.elapsed,p=d==null?void 0:d.model,y=d==null?void 0:d.tokens,v=d==null?void 0:d.input_tokens,_=d==null?void 0:d.output_tokens,k=d==null?void 0:d.cost_usd,w=d==null?void 0:d.iteration,S=d==null?void 0:d.error_type,T=d==null?void 0:d.error_message,E=d==null?void 0:d.context_pct,A=b5(r,f),I=w5(f),z=(()=>{if(f==="failed"&&T)return{text:T.length>40?T.slice(0,37)+"...":T,className:"text-red-400"};if(f==="running")return{text:A,className:"text-[var(--text-muted)]"};if(f==="completed"){const D=[];return m!=null&&D.push(Qt(m)),y!=null&&D.push(`${Gn(y)} tok`),k!=null&&D.push(mi(k)),{text:D.join(" · ")||null,className:"text-[var(--text-muted)]"}}return{text:null,className:""}})();return b.jsxs(b.Fragment,{children:[b.jsx(Rt,{type:"target",position:ve.Top,className:"!bg-[var(--border)] !border-none !w-2 !h-2"}),b.jsx(kc,{data:{status:f,elapsed:m,model:p,tokens:y,inputTokens:v,outputTokens:_,costUsd:k,iteration:w,errorType:S,errorMessage:T},children:b.jsxs("div",{className:Le("flex items-center gap-2 px-3 py-1.5 rounded-lg border-2 bg-[var(--node-bg)] min-w-[140px] max-w-[220px] transition-all duration-300",l&&"ring-2 ring-[var(--accent)] ring-offset-1 ring-offset-[var(--bg)]",f==="running"&&"shadow-[0_0_12px_var(--running-glow)]",I),style:{borderColor:h},children:[b.jsx("div",{className:Le("flex items-center justify-center w-6 h-6 rounded-md flex-shrink-0",f==="running"&&"animate-pulse"),style:{backgroundColor:`${h}20`},children:b.jsx(lN,{className:"w-3.5 h-3.5",style:{color:h}})}),b.jsxs("div",{className:"flex flex-col min-w-0 flex-1",children:[b.jsxs("div",{className:"flex items-center gap-1",children:[b.jsx("span",{className:"text-xs font-medium text-[var(--text)] truncate",children:a.label}),w!=null&&w>1&&b.jsxs("span",{className:"flex-shrink-0 inline-flex items-center justify-center px-1.5 py-0.5 rounded-full text-[9px] font-bold leading-none",style:{backgroundColor:`${h}25`,color:h},children:["x",w]})]}),z.text&&b.jsx("span",{className:Le("text-[10px] truncate leading-tight",z.className),children:z.text})]}),E!=null&&b.jsx("div",{className:"absolute bottom-0 left-0 right-0 h-[2px] rounded-b-lg overflow-hidden",style:{backgroundColor:"rgba(255,255,255,0.06)"},children:b.jsx("div",{className:Le("h-full transition-all duration-500",E>=P1?"animate-[context-pulse_2s_ease-in-out_infinite]":""),style:{width:`${Math.min(E,100)}%`,backgroundColor:E>=P1?"#ef4444":E>=x5?"#f59e0b":"#22c55e"}})})]})}),b.jsx(Rt,{type:"source",position:ve.Bottom,className:"!bg-[var(--border)] !border-none !w-2 !h-2"})]})});function b5(e,n){var h;const r=(h=tl()[e])==null?void 0:h.startedAt,l=he(d=>d.replayMode),a=he(d=>d.lastEventTime),[s,u]=V.useState("0.0s"),f=V.useRef(null);return V.useEffect(()=>{if(n==="running"){if(l){f.current&&clearInterval(f.current);const p=r??a??0;u(Qt((a??p)-p));return}const d=r!=null?r*1e3:Date.now(),m=()=>{const p=(Date.now()-d)/1e3;u(Qt(p))};return m(),f.current=setInterval(m,1e3),()=>{f.current&&clearInterval(f.current)}}else f.current&&clearInterval(f.current)},[n,r,l,a]),s}function w5(e){const n=V.useRef(e),[r,l]=V.useState("");return V.useEffect(()=>{const a=n.current;if(n.current=e,a===e)return;e==="running"?l("node-activate"):a==="running"&&(e==="completed"||e==="failed")&&l(e==="completed"?"node-complete":"node-fail");const s=setTimeout(()=>l(""),400);return()=>clearTimeout(s)},[e]),r}const S5=V.memo(function({data:n,id:r,selected:l}){var S;const a=n,s=tl(),f=((S=s[r])==null?void 0:S.status)||a.status||"pending",h=Ge[f]||Ge.pending,d=s[r],m=d==null?void 0:d.elapsed,p=d==null?void 0:d.exit_code,y=d==null?void 0:d.error_type,v=d==null?void 0:d.error_message,_=_5(r,f),k=E5(f),w=(()=>{if(f==="failed"&&v)return{text:v.length>40?v.slice(0,37)+"...":v,className:"text-red-400"};if(f==="running")return{text:_,className:"text-[var(--text-muted)]"};if(f==="completed"){const T=[];return m!=null&&T.push(Qt(m)),p!=null&&T.push(`exit ${p}`),{text:T.join(" · ")||null,className:"text-[var(--text-muted)]"}}return{text:null,className:""}})();return b.jsxs(b.Fragment,{children:[b.jsx(Rt,{type:"target",position:ve.Top,className:"!bg-[var(--border)] !border-none !w-2 !h-2"}),b.jsx(kc,{data:{status:f,elapsed:m,exitCode:p,errorType:y,errorMessage:v},children:b.jsxs("div",{className:Le("flex items-center gap-2 px-3 py-1.5 rounded-lg border-2 bg-[var(--node-bg)] min-w-[140px] max-w-[220px] transition-all duration-300",l&&"ring-2 ring-[var(--accent)] ring-offset-1 ring-offset-[var(--bg)]",f==="running"&&"shadow-[0_0_12px_var(--running-glow)]",k),style:{borderColor:h},children:[b.jsx("div",{className:Le("flex items-center justify-center w-6 h-6 rounded-md flex-shrink-0",f==="running"&&"animate-pulse"),style:{backgroundColor:`${h}20`},children:b.jsx(bN,{className:"w-3.5 h-3.5",style:{color:h}})}),b.jsxs("div",{className:"flex flex-col min-w-0 flex-1",children:[b.jsx("span",{className:"text-xs font-medium text-[var(--text)] truncate",children:a.label}),w.text&&b.jsx("span",{className:Le("text-[10px] truncate leading-tight",w.className),children:w.text})]})]})}),b.jsx(Rt,{type:"source",position:ve.Bottom,className:"!bg-[var(--border)] !border-none !w-2 !h-2"})]})});function _5(e,n){var h;const r=(h=tl()[e])==null?void 0:h.startedAt,l=he(d=>d.replayMode),a=he(d=>d.lastEventTime),[s,u]=V.useState("0.0s"),f=V.useRef(null);return V.useEffect(()=>{if(n==="running"){if(l){f.current&&clearInterval(f.current);const p=r??a??0;u(Qt((a??p)-p));return}const d=r!=null?r*1e3:Date.now(),m=()=>{const p=(Date.now()-d)/1e3;u(Qt(p))};return m(),f.current=setInterval(m,1e3),()=>{f.current&&clearInterval(f.current)}}else f.current&&clearInterval(f.current)},[n,r,l,a]),s}function E5(e){const n=V.useRef(e),[r,l]=V.useState("");return V.useEffect(()=>{const a=n.current;if(n.current=e,a===e)return;e==="running"?l("node-activate"):a==="running"&&(e==="completed"||e==="failed")&&l(e==="completed"?"node-complete":"node-fail");const s=setTimeout(()=>l(""),400);return()=>clearTimeout(s)},[e]),r}const N5=V.memo(function({data:n,id:r,selected:l}){var p,y;const a=n,s=tl(),f=((p=s[r])==null?void 0:p.status)||a.status||"pending",h=Ge[f]||Ge.pending,d=(y=s[r])==null?void 0:y.selected_option,m=k5(f);return b.jsxs(b.Fragment,{children:[b.jsx(Rt,{type:"target",position:ve.Top,className:"!bg-[var(--border)] !border-none !w-2 !h-2"}),b.jsx(kc,{data:{status:f,selectedOption:d},children:b.jsxs("div",{className:Le("flex items-center gap-2 px-3 py-1.5 rounded-lg border-2 border-dashed bg-[var(--node-bg)] min-w-[140px] max-w-[220px] transition-all duration-300",l&&"ring-2 ring-[var(--accent)] ring-offset-1 ring-offset-[var(--bg)]",f==="waiting"&&"shadow-[0_0_12px_var(--waiting-muted)]",f==="running"&&"shadow-[0_0_12px_var(--running-glow)]",m),style:{borderColor:h},children:[b.jsx("div",{className:Le("flex items-center justify-center w-6 h-6 rounded-md flex-shrink-0",f==="waiting"&&"animate-pulse"),style:{backgroundColor:`${h}20`},children:b.jsx(vN,{className:"w-3.5 h-3.5",style:{color:h}})}),b.jsxs("div",{className:"flex flex-col min-w-0 flex-1",children:[b.jsx("span",{className:"text-xs font-medium text-[var(--text)] truncate",children:a.label}),f==="waiting"&&b.jsx("span",{className:"text-[10px] text-[var(--waiting)] truncate leading-tight",children:"Awaiting input..."}),f==="completed"&&d&&b.jsx("span",{className:"text-[10px] text-[var(--text-muted)] truncate leading-tight",children:d})]})]})}),b.jsx(Rt,{type:"source",position:ve.Bottom,className:"!bg-[var(--border)] !border-none !w-2 !h-2"})]})});function k5(e){const n=V.useRef(e),[r,l]=V.useState("");return V.useEffect(()=>{const a=n.current;if(n.current=e,a===e)return;e==="running"||e==="waiting"?l("node-activate"):(a==="running"||a==="waiting")&&e==="completed"&&l("node-complete");const s=setTimeout(()=>l(""),400);return()=>clearTimeout(s)},[e]),r}const C5=V.memo(function({data:n,id:r,selected:l}){var w;const a=n,u=a.type==="for_each_group"?gN:hN,f=a.progress,m=((w=tl()[r])==null?void 0:w.status)||a.status||"pending",p=Ge[m]||Ge.pending,y=T5(m),v=f?`${f.completed+f.failed}/${f.total}${f.failed>0?` (${f.failed} failed)`:""}`:null,_=f&&f.total>0?(f.completed+f.failed)/f.total*100:0,k=f!=null&&f.failed>0;return b.jsxs(b.Fragment,{children:[b.jsx(Rt,{type:"target",position:ve.Top,className:"!bg-[var(--border)] !border-none !w-2 !h-2"}),b.jsxs("div",{className:Le("flex flex-col gap-1 px-4 py-3 rounded-xl border-2 border-dashed bg-[var(--surface)]/80 min-w-[180px] transition-all duration-300",l&&"ring-2 ring-[var(--accent)] ring-offset-1 ring-offset-[var(--bg)]",m==="running"&&"shadow-[0_0_16px_var(--running-glow)]",y),style:{borderColor:p,minHeight:"100%"},children:[b.jsxs("div",{className:"flex items-center gap-2",children:[b.jsx(u,{className:"w-3.5 h-3.5",style:{color:p}}),b.jsx("span",{className:"text-xs font-medium text-[var(--text-secondary)]",children:a.label})]}),v&&b.jsx("span",{className:"text-[10px] text-[var(--text-muted)] font-mono",children:v}),f&&f.total>0&&m==="running"&&b.jsx("div",{className:"w-full h-1 rounded-full bg-[var(--border)] overflow-hidden mt-0.5",children:b.jsx("div",{className:"h-full rounded-full transition-all duration-500 ease-out",style:{width:`${_}%`,backgroundColor:k?"var(--failed)":"var(--completed)"}})})]}),b.jsx(Rt,{type:"source",position:ve.Bottom,className:"!bg-[var(--border)] !border-none !w-2 !h-2"})]})});function T5(e){const n=V.useRef(e),[r,l]=V.useState("");return V.useEffect(()=>{const a=n.current;if(n.current=e,a===e)return;e==="running"?l("node-activate"):a==="running"&&(e==="completed"||e==="failed")&&l(e==="completed"?"node-complete":"node-fail");const s=setTimeout(()=>l(""),400);return()=>clearTimeout(s)},[e]),r}const A5=V.memo(function({data:n,id:r,selected:l}){const a=n,u=he(w=>{var S;return(S=w.nodes[r])==null?void 0:S.status})||a.status||"pending",f=Ge[u]||Ge.pending,h=he(w=>{var S;return(S=w.nodes[r])==null?void 0:S.elapsed}),d=he(w=>{var S;return(S=w.nodes[r])==null?void 0:S.error_message}),m=he(w=>w.navigateIntoSubworkflow),p=YS(),y=p.some(w=>w.parentAgent===r),v=p.find(w=>w.parentAgent===r),_=v==null?void 0:v.workflowName,k=(()=>{if(u==="failed"&&d)return{text:d.length>35?d.slice(0,32)+"...":d,className:"text-red-400"};if(u==="running")return{text:_||"Running subworkflow…",className:"text-[var(--text-muted)]"};if(u==="completed"){const w=[];return _&&w.push(_),h!=null&&w.push(`${h.toFixed(1)}s`),{text:w.join(" · ")||"Done",className:"text-[var(--text-muted)]"}}return{text:_||null,className:"text-[var(--text-muted)]"}})();return b.jsxs(b.Fragment,{children:[b.jsx(Rt,{type:"target",position:ve.Top,className:"!bg-[var(--border)] !border-none !w-2 !h-2"}),b.jsx(kc,{data:{status:u,elapsed:h,errorType:void 0,errorMessage:d,iteration:void 0},children:b.jsxs("div",{className:Le("flex items-center gap-2 px-3 py-1.5 rounded-lg border-2 bg-[var(--node-bg)] min-w-[140px] max-w-[240px] transition-all duration-300 cursor-pointer",l&&"ring-2 ring-[var(--accent)] ring-offset-1 ring-offset-[var(--bg)]",u==="running"&&"shadow-[0_0_12px_var(--running-glow)]"),style:{borderColor:f,borderStyle:"dashed"},onDoubleClick:w=>{y&&(w.stopPropagation(),m(r))},children:[b.jsx("div",{className:Le("flex items-center justify-center w-6 h-6 rounded-md flex-shrink-0",u==="running"&&"animate-pulse"),style:{backgroundColor:`${f}20`},children:b.jsx(Qp,{className:"w-3.5 h-3.5",style:{color:f}})}),b.jsxs("div",{className:"flex flex-col min-w-0 flex-1",children:[b.jsx("div",{className:"flex items-center gap-1",children:b.jsx("span",{className:"text-xs font-medium text-[var(--text)] truncate",children:a.label})}),k.text&&b.jsx("span",{className:Le("text-[10px] truncate leading-tight",k.className),children:k.text})]}),y&&b.jsx(jr,{className:"w-3.5 h-3.5 flex-shrink-0 text-[var(--text-muted)]"})]})}),b.jsx(Rt,{type:"source",position:ve.Bottom,className:"!bg-[var(--border)] !border-none !w-2 !h-2"})]})}),z5=V.memo(function({data:n,selected:r}){const a=n.status||"pending",s=a==="completed",u=a==="failed",f=!s&&!u,h=s?Ge.completed:u?Ge.failed:Ge.pending;return b.jsxs(b.Fragment,{children:[b.jsx(Rt,{type:"target",position:ve.Top,className:"!bg-[var(--border)] !border-none !w-2 !h-2"}),b.jsx("div",{className:Le("flex items-center justify-center w-11 h-11 rounded-full border-2 transition-all duration-300",s?"bg-[var(--completed)] shadow-[0_0_16px_var(--completed-muted)]":u?"bg-[var(--failed)] shadow-[0_0_16px_var(--failed-muted)]":"bg-[var(--node-bg)]",r&&"ring-2 ring-[var(--accent)] ring-offset-1 ring-offset-[var(--bg)]"),style:{borderColor:h},children:s?b.jsx(Gi,{className:"w-5 h-5 text-white",strokeWidth:3}):u?b.jsx(Ub,{className:"w-3.5 h-3.5 text-white",fill:"white"}):b.jsx(Gi,{className:"w-5 h-5",strokeWidth:2.5,style:{color:f?Ge.pending:h}})})]})}),M5=V.memo(function({data:n,selected:r}){const a=n.status||"pending",s=Ge[a]||Ge.pending,u=a==="running"||a==="completed";return b.jsxs(b.Fragment,{children:[b.jsx("div",{className:Le("flex items-center justify-center w-11 h-11 rounded-full border-2 transition-all duration-300",u?"bg-[var(--completed)]":"bg-[var(--node-bg)]",r&&"ring-2 ring-[var(--accent)] ring-offset-1 ring-offset-[var(--bg)]",u&&"shadow-[0_0_12px_var(--completed-muted)]"),style:{borderColor:s},children:b.jsx(Zp,{className:"w-4 h-4 ml-0.5",style:{color:u?"white":s}})}),b.jsx(Rt,{type:"source",position:ve.Bottom,className:"!bg-[var(--border)] !border-none !w-2 !h-2"})]})}),$1="#a78bfa",j5=V.memo(function({data:n,selected:r}){const l=n,a=l.status||"pending",s=a==="running"||a==="completed",u=s?$1:Ge[a]||$1,f=l.parentAgent,h=he(d=>d.navigateUp);return b.jsxs(b.Fragment,{children:[b.jsxs("div",{className:"flex flex-col items-center gap-1",children:[b.jsx("div",{className:Le("flex items-center justify-center w-11 h-11 rounded-full border-2 border-dashed transition-all duration-300 cursor-pointer",s?"bg-[#a78bfa]":"bg-[var(--node-bg)]",r&&"ring-2 ring-[var(--accent)] ring-offset-1 ring-offset-[var(--bg)]",s&&"shadow-[0_0_12px_rgba(167,139,250,0.4)]"),style:{borderColor:u},onDoubleClick:d=>{d.stopPropagation(),h()},children:b.jsx(rN,{className:"w-4 h-4",style:{color:s?"white":u}})}),f&&b.jsxs("span",{className:"text-[10px] text-[var(--text-muted)] whitespace-nowrap",children:["from ",b.jsx("span",{className:"font-medium text-[var(--text)]",children:f})]})]}),b.jsx(Rt,{type:"source",position:ve.Bottom,className:"!bg-[var(--border)] !border-none !w-2 !h-2"})]})}),Y1="#a78bfa",O5=V.memo(function({data:n,selected:r}){const l=n,a=l.status||"pending",s=a==="completed",u=a==="failed",f=s?Y1:u?Ge.failed:Y1,h=l.parentAgent,d=he(m=>m.navigateUp);return b.jsxs(b.Fragment,{children:[b.jsx(Rt,{type:"target",position:ve.Top,className:"!bg-[var(--border)] !border-none !w-2 !h-2"}),b.jsxs("div",{className:"flex flex-col items-center gap-1",children:[b.jsx("div",{className:Le("flex items-center justify-center w-11 h-11 rounded-full border-2 border-dashed transition-all duration-300 cursor-pointer",s?"bg-[#a78bfa] shadow-[0_0_12px_rgba(167,139,250,0.4)]":u?"bg-[var(--failed)] shadow-[0_0_16px_var(--failed-muted)]":"bg-[var(--node-bg)]",r&&"ring-2 ring-[var(--accent)] ring-offset-1 ring-offset-[var(--bg)]"),style:{borderColor:f},onDoubleClick:m=>{m.stopPropagation(),d()},children:b.jsx(iN,{className:"w-4 h-4",style:{color:s||u?"white":f}})}),h&&b.jsxs("span",{className:"text-[10px] text-[var(--text-muted)] whitespace-nowrap",children:["return to ",b.jsx("span",{className:"font-medium text-[var(--text)]",children:h})]})]})]})}),D5=V.memo(function({id:n,sourceX:r,sourceY:l,targetX:a,targetY:s,sourcePosition:u,targetPosition:f,source:h,target:d,data:m}){const p=Nj(),y=V.useMemo(()=>p.find(U=>U.from===h&&U.to===d),[p,h,d]),[v,_,k]=dm({sourceX:r,sourceY:l,targetX:a,targetY:s,sourcePosition:u,targetPosition:f}),w=m==null?void 0:m.when,S=!!w,T=(y==null?void 0:y.state)==="taken",E=(y==null?void 0:y.state)==="highlighted",A=(y==null?void 0:y.state)==="failed";let I="var(--edge-color)",z=2,R;A?(I="var(--failed)",z=3):T?(I="var(--edge-taken)",z=3):E&&(I="var(--edge-active)",z=3),S&&!T&&!E&&!A&&(R="6 3");const D=A?"failed":T?"taken":E?"active":"default";return b.jsxs(b.Fragment,{children:[b.jsx(Zo,{id:n,path:v,style:{stroke:I,strokeWidth:z,strokeDasharray:R,transition:"stroke 0.3s ease, stroke-width 0.3s ease"},markerEnd:`url(#arrow-${D})`}),S&&b.jsx(XM,{children:b.jsx("div",{className:"nodrag nopan",style:{position:"absolute",transform:`translate(-50%, -50%) translate(${_}px,${k}px)`,pointerEvents:"all"},children:b.jsx("span",{className:"inline-block px-1.5 py-0.5 rounded-full text-[9px] font-mono leading-tight max-w-[140px] truncate",style:{backgroundColor:A?"var(--failed)":T?"var(--edge-taken)":"var(--surface)",color:A||T?"var(--bg)":"var(--text-muted)",border:`1px solid ${A?"var(--failed)":T?"var(--edge-taken)":"var(--border)"}`},title:w,children:w})})}),T&&b.jsx("circle",{r:"3",fill:"var(--edge-taken)",children:b.jsx("animateMotion",{dur:"1s",repeatCount:"indefinite",path:v})}),A&&b.jsx("circle",{r:"3",fill:"var(--failed)",opacity:"0.8",children:b.jsx("animateMotion",{dur:"1.5s",repeatCount:"indefinite",path:v})})]})});function R5(){const e=he(u=>u.workflowStatus),n=he(u=>u.workflowFailure),r=he(u=>u.workflowFailedAgent),l=he(u=>u.selectNode);if(e!=="failed"||!n)return null;const a=n.message||n.error_type||"Unknown error",s=n.error_type==="TimeoutError";return b.jsx("div",{className:"absolute top-3 left-1/2 -translate-x-1/2 z-20 animate-[banner-in_200ms_ease-out]",children:b.jsxs("div",{className:Le("flex items-center gap-2 px-4 py-2 rounded-lg","bg-red-950/90 border border-red-500/40 shadow-lg shadow-red-500/10","backdrop-blur-sm max-w-[560px]"),children:[b.jsx(wN,{className:"w-4 h-4 text-red-400 flex-shrink-0"}),b.jsxs("div",{className:"flex flex-col min-w-0",children:[b.jsx("span",{className:"text-xs font-medium text-red-300",children:"Workflow Failed"}),b.jsx("span",{className:"text-[11px] text-red-400/80 truncate",children:a}),s&&n.current_agent&&b.jsxs("span",{className:"text-[10px] text-red-400/60 truncate",children:["Timed out on agent: ",n.current_agent]}),n.checkpoint_path&&b.jsxs("span",{className:"text-[10px] text-red-400/50 truncate",title:n.checkpoint_path,children:["Checkpoint: ",n.checkpoint_path.split("/").pop()]})]}),r&&b.jsxs("button",{onClick:()=>l(r),className:"flex items-center gap-1 px-2 py-1 rounded text-[10px] font-medium text-red-300 bg-red-500/20 hover:bg-red-500/30 transition-colors flex-shrink-0 ml-1",children:[b.jsx(cN,{className:"w-3 h-3"}),"View"]})]})})}function L5(){const[e,n]=V.useState(!1),r=he(h=>h.workflowStatus),l=he(h=>h.totalCost),a=he(h=>h.totalTokens),s=he(h=>h.agentsCompleted),u=he(h=>h.agentsTotal),f=Vb();return r!=="completed"||e?null:b.jsx("div",{className:"absolute top-3 left-1/2 -translate-x-1/2 z-20 animate-[banner-in_200ms_ease-out]",children:b.jsxs("div",{className:Le("flex items-center gap-3 px-4 py-2 rounded-lg","bg-green-950/90 border border-green-500/40 shadow-lg shadow-green-500/10","backdrop-blur-sm"),children:[b.jsx(oN,{className:"w-4 h-4 text-green-400 flex-shrink-0"}),b.jsx("span",{className:"text-xs font-medium text-green-300",children:"Completed"}),b.jsxs("div",{className:"flex items-center gap-3 text-[11px] text-green-400/80 font-mono",children:[b.jsx("span",{children:f}),u>0&&b.jsxs("span",{children:[s,"/",u," agents"]}),a>0&&b.jsxs("span",{children:[Gn(a)," tok"]}),l>0&&b.jsx("span",{children:mi(l)})]}),b.jsx("button",{onClick:()=>n(!0),className:"p-0.5 rounded text-green-500/60 hover:text-green-300 transition-colors flex-shrink-0 ml-1",children:b.jsx(Go,{className:"w-3.5 h-3.5"})})]})})}const H5={agentNode:v5,scriptNode:S5,gateNode:N5,groupNode:C5,workflowNode:A5,endNode:z5,startNode:M5,ingressNode:j5,egressNode:O5},B5={animatedEdge:D5},q5={type:"animatedEdge"};function U5(){return b.jsx("svg",{style:{position:"absolute",width:0,height:0},children:b.jsxs("defs",{children:[b.jsx("marker",{id:"arrow-default",viewBox:"0 0 10 10",refX:"8",refY:"5",markerWidth:"8",markerHeight:"8",orient:"auto-start-reverse",children:b.jsx("path",{d:"M 0 0 L 10 5 L 0 10 z",fill:"var(--edge-color)"})}),b.jsx("marker",{id:"arrow-active",viewBox:"0 0 10 10",refX:"8",refY:"5",markerWidth:"8",markerHeight:"8",orient:"auto-start-reverse",children:b.jsx("path",{d:"M 0 0 L 10 5 L 0 10 z",fill:"var(--edge-active)"})}),b.jsx("marker",{id:"arrow-taken",viewBox:"0 0 10 10",refX:"8",refY:"5",markerWidth:"8",markerHeight:"8",orient:"auto-start-reverse",children:b.jsx("path",{d:"M 0 0 L 10 5 L 0 10 z",fill:"var(--edge-taken)"})}),b.jsx("marker",{id:"arrow-failed",viewBox:"0 0 10 10",refX:"8",refY:"5",markerWidth:"8",markerHeight:"8",orient:"auto-start-reverse",children:b.jsx("path",{d:"M 0 0 L 10 5 L 0 10 z",fill:"var(--failed)"})})]})})}function I5(){const e=kj(),n=he(M=>M.viewContextPath),r=he(M=>M.selectNode),l=he(M=>M.selectedNode),a=he(M=>M.workflowStatus),s=he(M=>M.wsStatus),u=he(M=>M.workflowFailedAgent),f=he(M=>M.navigateIntoSubworkflow),{agents:h,routes:d,parallelGroups:m,forEachGroups:p,nodes:y,groupProgress:v,entryPoint:_,subworkflowContexts:k,parentAgent:w}=e,[S,T,E]=FM([]),[A,I,z]=QM([]),R=V.useRef(!1),D=V.useRef(""),U=JSON.stringify(n);V.useEffect(()=>{if(h.length===0){D.current!==U&&(R.current=!1,D.current=U,T([]),I([]));return}if(D.current!==U&&(R.current=!1,D.current=U),R.current)return;R.current=!0;const{nodes:M,edges:P}=g5(h,d,m,p,y,v,_,w);T(M),I(P)},[h,d,m,p,y,v,_,T,I,U,w]),V.useEffect(()=>{R.current&&T(M=>M.map(P=>{const Q=y[P.id];if(!Q)return P;const K=Q.status||"pending",j=P.data.status;if(K!==j){const H={...P.data,status:K};return P.data.groupName&&v[P.data.groupName]&&(H.progress=v[P.data.groupName]),{...P,data:H}}if(P.data.groupName&&v[P.data.groupName]){const H=P.data.progress,Y=v[P.data.groupName];if(Y&&(!H||H.completed!==Y.completed||H.failed!==Y.failed))return{...P,data:{...P.data,progress:Y}}}return P}))},[y,v,T]);const X=V.useCallback((M,P)=>{P.type==="groupNode"&&P.data.type!=="for_each_group"||r(P.id)},[r]),B=V.useCallback((M,P)=>{k.some(K=>K.parentAgent===P.id)&&f(P.id)},[k,f]),q=V.useCallback(()=>{r(null)},[r]),ee=V.useCallback(M=>{var Q;const P=((Q=M.data)==null?void 0:Q.status)||"pending";return Ge[P]||Ge.pending},[]);V.useEffect(()=>{T(M=>M.map(P=>({...P,selected:P.id===l})))},[l,T]),V.useEffect(()=>{a==="failed"&&u&&r(u)},[a,u,r]);const L=a==="pending"&&h.length===0,$=(()=>{switch(s){case"connecting":return"Connecting to workflow…";case"reconnecting":return"Reconnecting…";case"disconnected":return"Connection lost. Retrying…";default:return"Waiting for workflow…"}})();return b.jsxs("div",{className:"w-full h-full relative",children:[b.jsx(U5,{}),b.jsx(R5,{}),b.jsx(L5,{}),L&&b.jsxs("div",{className:"absolute inset-0 z-10 flex flex-col items-center justify-center pointer-events-none",children:[b.jsxs("div",{className:"relative mb-3",children:[b.jsx(EN,{className:"w-8 h-8 text-[var(--accent)] opacity-20"}),b.jsx(To,{className:"w-8 h-8 text-[var(--text-muted)] animate-spin absolute inset-0 opacity-40"})]}),b.jsx("p",{className:"text-sm text-[var(--text-muted)] animate-pulse",children:$})]}),b.jsxs($M,{nodes:S,edges:A,onNodesChange:E,onEdgesChange:z,onNodeClick:X,onNodeDoubleClick:B,onPaneClick:q,nodeTypes:H5,edgeTypes:B5,defaultEdgeOptions:q5,fitView:!0,fitViewOptions:{padding:.2},minZoom:.2,maxZoom:2,proOptions:{hideAttribution:!0},nodesDraggable:!0,nodesConnectable:!1,elementsSelectable:!0,children:[b.jsx(ej,{variant:zr.Dots,gap:20,size:1,color:"var(--border-subtle)"}),b.jsx(bj,{nodeColor:ee,maskColor:"var(--minimap-mask)",style:{background:"var(--minimap-bg)"},pannable:!0,zoomable:!0}),b.jsx(oj,{showInteractive:!1,children:b.jsx(V5,{})}),b.jsx(G5,{}),b.jsx(P5,{viewPathKey:U}),b.jsx($5,{})]})]})}function V5(){const{fitView:e}=el(),n=V.useCallback(()=>{e({padding:.2,duration:300})},[e]);return b.jsx("button",{onClick:n,className:"react-flow__controls-button",title:"Fit view (F)",style:{display:"flex",alignItems:"center",justifyContent:"center"},children:b.jsx(pN,{className:"w-3.5 h-3.5"})})}function G5(){const{fitView:e}=el();return V.useEffect(()=>{const n=r=>{var a;const l=(a=r.target)==null?void 0:a.tagName;l==="INPUT"||l==="TEXTAREA"||l==="SELECT"||r.key==="f"&&!r.ctrlKey&&!r.metaKey&&!r.altKey&&e({padding:.2,duration:300})};return window.addEventListener("keydown",n),()=>window.removeEventListener("keydown",n)},[e]),null}function P5({viewPathKey:e}){const{fitView:n}=el(),r=V.useRef(e);return V.useEffect(()=>{r.current!==e&&(r.current=e,setTimeout(()=>n({padding:.2,duration:300}),50))},[e,n]),null}function $5(){const e=zj();return e?b.jsx("div",{className:"absolute top-3 left-1/2 -translate-x-1/2 z-20 animate-[banner-in_200ms_ease-out]",children:b.jsxs("div",{className:"flex items-center gap-2 px-4 py-2 rounded-lg bg-amber-950/90 border border-amber-500/40 shadow-lg shadow-amber-500/10 backdrop-blur-sm max-w-[560px]",children:[b.jsx("span",{className:"text-xs text-amber-300",children:"⚠"}),b.jsx("span",{className:"text-[11px] text-amber-400/80",children:e.message}),b.jsx("a",{href:window.location.pathname,className:"px-2 py-0.5 rounded text-[10px] font-medium text-amber-300 bg-amber-500/20 hover:bg-amber-500/30 transition-colors flex-shrink-0 ml-1",children:"Root"})]})}):null}function nl({items:e}){const n=e.filter(r=>r.value!=null&&r.value!=="");return n.length===0?null:b.jsx("dl",{className:"grid grid-cols-[auto_1fr] gap-x-3 gap-y-1.5 text-xs",children:n.map(({label:r,value:l})=>b.jsxs("div",{className:"contents",children:[b.jsx("dt",{className:"text-[var(--text-muted)] whitespace-nowrap",children:r}),b.jsx("dd",{className:"text-[var(--text)] break-words",children:typeof l=="object"?JSON.stringify(l):String(l)})]},r))})}function WS(e){const n=[];return e.elapsed!=null&&n.push({label:"Elapsed",value:Qt(e.elapsed)}),e.model&&n.push({label:"Model",value:e.model}),e.tokens!=null&&n.push({label:"Tokens",value:Gn(e.tokens)}),e.input_tokens!=null&&e.output_tokens!=null&&n.push({label:"In / Out",value:`${Gn(e.input_tokens)} / ${Gn(e.output_tokens)}`}),e.cost_usd!=null&&n.push({label:"Cost",value:mi(e.cost_usd)}),e.context_window_used!=null&&e.context_window_max!=null&&n.push({label:"Context",value:LN(e.context_window_used,e.context_window_max)}),e.iteration!=null&&n.push({label:"Iteration",value:e.iteration}),e.error_type&&n.push({label:"Error",value:e.error_type}),e.error_message&&n.push({label:"Message",value:e.error_message}),n}function Ji({output:e,title:n="Output",defaultExpanded:r=!0,maxHeight:l="300px"}){const[a,s]=V.useState(r),[u,f]=V.useState(!1),h=Ib(e);if(!h)return null;const d=typeof e=="object"&&e!==null,m=async()=>{await navigator.clipboard.writeText(h),f(!0),setTimeout(()=>f(!1),2e3)};return b.jsxs("div",{className:"space-y-1.5",children:[b.jsxs("div",{className:"flex items-center justify-between",children:[b.jsxs("button",{onClick:()=>s(!a),className:"flex items-center gap-1 text-[10px] uppercase tracking-wider text-[var(--text-muted)] hover:text-[var(--text)] transition-colors font-semibold",children:[a?b.jsx(Wi,{className:"w-3 h-3"}):b.jsx(jr,{className:"w-3 h-3"}),n]}),a&&b.jsx("button",{onClick:m,className:"flex items-center gap-1 text-[10px] text-[var(--text-muted)] hover:text-[var(--text)] transition-colors",title:"Copy to clipboard",children:u?b.jsx(Gi,{className:"w-3 h-3 text-[var(--completed)]"}):b.jsx(Bb,{className:"w-3 h-3"})})]}),a&&b.jsx("pre",{className:"bg-[var(--bg)] border border-[var(--border)] rounded-md p-3 font-mono text-[11px] leading-relaxed text-[var(--text)] overflow-auto whitespace-pre-wrap break-words",style:{maxHeight:l},children:d?b.jsx(Y5,{text:h}):h})]})}function Y5({text:e}){const n=e.split(/("(?:[^"\\]|\\.)*")/g);return b.jsx(b.Fragment,{children:n.map((r,l)=>{if(l%2===1){const s=n.slice(l+1).join(""),u=/^\s*:/.test(s);return b.jsx("span",{className:u?"text-blue-400":"text-green-400",children:r},l)}const a=r.replace(/\b(true|false|null)\b|(-?\d+\.?\d*(?:e[+-]?\d+)?)/gi,(s,u,f)=>u?`${s}`:f?`${s}`:s);return b.jsx("span",{dangerouslySetInnerHTML:{__html:a}},l)})})}function bm({activity:e,defaultExpanded:n=!0}){const[r,l]=V.useState(n),a=V.useRef(null);return V.useEffect(()=>{a.current&&r&&(a.current.scrollTop=a.current.scrollHeight)},[e.length,r]),e.length===0?null:b.jsxs("div",{className:"space-y-1.5",children:[b.jsxs("button",{onClick:()=>l(!r),className:"flex items-center gap-1 text-[10px] uppercase tracking-wider text-[var(--text-muted)] hover:text-[var(--text)] transition-colors font-semibold",children:[r?b.jsx(Wi,{className:"w-3 h-3"}):b.jsx(jr,{className:"w-3 h-3"}),"Activity (",e.length,")"]}),r&&b.jsx("div",{ref:a,className:"max-h-[400px] overflow-y-auto space-y-0.5",children:e.map((s,u)=>b.jsx(X5,{entry:s},u))})]})}function X5({entry:e}){const n={reasoning:"text-indigo-400/70","tool-start":"text-blue-400","tool-complete":"text-green-400",turn:"text-amber-400",message:"text-[var(--text)]"};return b.jsxs("div",{className:Le("py-1.5 px-2 rounded text-[11px] leading-relaxed border-b border-[var(--border-subtle)] last:border-b-0"),children:[b.jsxs("div",{className:"flex items-start gap-1.5",children:[b.jsx("span",{className:"w-4 text-center flex-shrink-0",children:e.icon}),b.jsx("span",{className:"text-[var(--text-muted)] uppercase text-[9px] font-semibold tracking-wider w-12 flex-shrink-0 pt-px",children:e.label}),b.jsx("span",{className:Le("break-words",n[e.type]||"text-[var(--text)]"),children:typeof e.text=="object"?JSON.stringify(e.text):e.text})]}),e.detail&&b.jsx("div",{className:"mt-1 ml-[4.25rem] px-2 py-1 bg-[var(--bg)] rounded text-[10px] font-mono text-[var(--text-muted)] whitespace-pre-wrap break-words max-h-24 overflow-y-auto",children:typeof e.detail=="object"?JSON.stringify(e.detail,null,2):e.detail})]})}function F5({node:e}){const n=e.status,r=Ge[n]||Ge.pending,l=e.iterationHistory&&e.iterationHistory.length>0;return b.jsxs("div",{className:"space-y-4",children:[b.jsxs("div",{className:"flex items-center gap-2",children:[b.jsx("span",{className:"inline-flex items-center px-2 py-0.5 rounded text-[10px] font-bold uppercase tracking-wider",style:{backgroundColor:`${r}20`,color:r},children:n}),b.jsx("span",{className:"text-xs text-[var(--text-muted)]",children:"Agent"})]}),l?b.jsx(X1,{label:`Iteration ${e.iteration??"?"} (current)`,defaultExpanded:!0,status:n,snapshot:{iteration:e.iteration??0,prompt:e.prompt,output:e.output,elapsed:e.elapsed,model:e.model,tokens:e.tokens,input_tokens:e.input_tokens,output_tokens:e.output_tokens,cost_usd:e.cost_usd,activity:e.activity,error_type:e.error_type,error_message:e.error_message}}):b.jsxs(b.Fragment,{children:[b.jsx(nl,{items:WS(e)}),e.prompt&&b.jsx(Ji,{output:e.prompt,title:"Input / Prompt",defaultExpanded:!0}),b.jsx(bm,{activity:e.activity,defaultExpanded:n!=="completed"}),e.output!=null&&b.jsx(Ji,{output:e.output,title:"Output"})]}),l&&[...e.iterationHistory].reverse().map(a=>b.jsx(X1,{label:`Iteration ${a.iteration}`,defaultExpanded:!1,status:n,snapshot:a},a.iteration))]})}function X1({label:e,defaultExpanded:n,snapshot:r,status:l}){const[a,s]=V.useState(n);return b.jsxs("div",{className:"border border-[var(--border)] rounded-lg overflow-hidden",children:[b.jsxs("button",{onClick:()=>s(!a),className:"flex items-center gap-2 w-full px-3 py-2 bg-[var(--bg)] hover:bg-[var(--node-bg)] transition-colors text-left",children:[a?b.jsx(Wi,{className:"w-3.5 h-3.5 text-[var(--text-muted)] flex-shrink-0"}):b.jsx(jr,{className:"w-3.5 h-3.5 text-[var(--text-muted)] flex-shrink-0"}),b.jsx("span",{className:"text-xs font-semibold text-[var(--text)]",children:e}),r.elapsed!=null&&b.jsx("span",{className:"text-[10px] text-[var(--text-muted)] ml-auto",children:Q5(r.elapsed)})]}),a&&b.jsxs("div",{className:"px-3 py-3 space-y-3 border-t border-[var(--border)]",children:[b.jsx(nl,{items:WS(r)}),r.prompt&&b.jsx(Ji,{output:r.prompt,title:"Input / Prompt",defaultExpanded:!1}),b.jsx(bm,{activity:r.activity,defaultExpanded:n&&l!=="completed"}),r.output!=null&&b.jsx(Ji,{output:r.output,title:"Output",defaultExpanded:!0}),r.error_type&&b.jsxs("div",{className:"text-xs text-red-400",children:[b.jsx("span",{className:"font-semibold",children:r.error_type}),r.error_message&&b.jsxs("span",{className:"ml-1",children:["— ",r.error_message]})]})]})]})}function Q5(e){if(e<1)return`${(e*1e3).toFixed(0)}ms`;if(e<60)return`${e.toFixed(1)}s`;const n=Math.floor(e/60),r=(e%60).toFixed(0);return`${n}m ${r}s`}function Z5({node:e}){const n=e.status,r=Ge[n]||Ge.pending,l=[];e.elapsed!=null&&l.push({label:"Elapsed",value:Qt(e.elapsed)}),e.exit_code!=null&&l.push({label:"Exit Code",value:e.exit_code}),e.error_type&&l.push({label:"Error",value:e.error_type}),e.error_message&&l.push({label:"Message",value:e.error_message});let a="";return e.stdout&&(a+=e.stdout),e.stderr&&(a+=(a?` + +--- stderr --- +`:"")+e.stderr),b.jsxs("div",{className:"space-y-4",children:[b.jsxs("div",{className:"flex items-center gap-2",children:[b.jsx("span",{className:"inline-flex items-center px-2 py-0.5 rounded text-[10px] font-bold uppercase tracking-wider",style:{backgroundColor:`${r}20`,color:r},children:n}),b.jsx("span",{className:"text-xs text-[var(--text-muted)]",children:"Script"})]}),b.jsx(nl,{items:l}),a&&b.jsx(Ji,{output:a,title:"Output"})]})}function K5(e,n){const r={};return(e[e.length-1]===""?[...e,""]:e).join((r.padRight?" ":"")+","+(r.padLeft===!1?"":" ")).trim()}const J5=/^[$_\p{ID_Start}][$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,W5=/^[$_\p{ID_Start}][-$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,e4={};function F1(e,n){return(e4.jsx?W5:J5).test(e)}const t4=/[ \t\n\f\r]/g;function n4(e){return typeof e=="object"?e.type==="text"?Q1(e.value):!1:Q1(e)}function Q1(e){return e.replace(t4,"")===""}class Jo{constructor(n,r,l){this.normal=r,this.property=n,l&&(this.space=l)}}Jo.prototype.normal={};Jo.prototype.property={};Jo.prototype.space=void 0;function e_(e,n){const r={},l={};for(const a of e)Object.assign(r,a.property),Object.assign(l,a.normal);return new Jo(r,l,n)}function qp(e){return e.toLowerCase()}class sn{constructor(n,r){this.attribute=r,this.property=n}}sn.prototype.attribute="";sn.prototype.booleanish=!1;sn.prototype.boolean=!1;sn.prototype.commaOrSpaceSeparated=!1;sn.prototype.commaSeparated=!1;sn.prototype.defined=!1;sn.prototype.mustUseProperty=!1;sn.prototype.number=!1;sn.prototype.overloadedBoolean=!1;sn.prototype.property="";sn.prototype.spaceSeparated=!1;sn.prototype.space=void 0;let r4=0;const Oe=rl(),Ct=rl(),Up=rl(),me=rl(),at=rl(),na=rl(),yn=rl();function rl(){return 2**++r4}const Ip=Object.freeze(Object.defineProperty({__proto__:null,boolean:Oe,booleanish:Ct,commaOrSpaceSeparated:yn,commaSeparated:na,number:me,overloadedBoolean:Up,spaceSeparated:at},Symbol.toStringTag,{value:"Module"})),ap=Object.keys(Ip);class wm extends sn{constructor(n,r,l,a){let s=-1;if(super(n,r),Z1(this,"space",a),typeof l=="number")for(;++s4&&r.slice(0,4)==="data"&&s4.test(n)){if(n.charAt(4)==="-"){const s=n.slice(5).replace(K1,f4);l="data"+s.charAt(0).toUpperCase()+s.slice(1)}else{const s=n.slice(4);if(!K1.test(s)){let u=s.replace(o4,c4);u.charAt(0)!=="-"&&(u="-"+u),n="data"+u}}a=wm}return new a(l,n)}function c4(e){return"-"+e.toLowerCase()}function f4(e){return e.charAt(1).toUpperCase()}const d4=e_([t_,i4,i_,l_,a_],"html"),Sm=e_([t_,l4,i_,l_,a_],"svg");function h4(e){return e.join(" ").trim()}var $l={},op,J1;function p4(){if(J1)return op;J1=1;var e=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//g,n=/\n/g,r=/^\s*/,l=/^(\*?[-#/*\\\w]+(\[[0-9a-z_-]+\])?)\s*/,a=/^:\s*/,s=/^((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};])+)/,u=/^[;\s]*/,f=/^\s+|\s+$/g,h=` +`,d="/",m="*",p="",y="comment",v="declaration";function _(w,S){if(typeof w!="string")throw new TypeError("First argument must be a string");if(!w)return[];S=S||{};var T=1,E=1;function A(L){var $=L.match(n);$&&(T+=$.length);var M=L.lastIndexOf(h);E=~M?L.length-M:E+L.length}function I(){var L={line:T,column:E};return function($){return $.position=new z(L),U(),$}}function z(L){this.start=L,this.end={line:T,column:E},this.source=S.source}z.prototype.content=w;function R(L){var $=new Error(S.source+":"+T+":"+E+": "+L);if($.reason=L,$.filename=S.source,$.line=T,$.column=E,$.source=w,!S.silent)throw $}function D(L){var $=L.exec(w);if($){var M=$[0];return A(M),w=w.slice(M.length),$}}function U(){D(r)}function X(L){var $;for(L=L||[];$=B();)$!==!1&&L.push($);return L}function B(){var L=I();if(!(d!=w.charAt(0)||m!=w.charAt(1))){for(var $=2;p!=w.charAt($)&&(m!=w.charAt($)||d!=w.charAt($+1));)++$;if($+=2,p===w.charAt($-1))return R("End of comment missing");var M=w.slice(2,$-2);return E+=2,A(M),w=w.slice($),E+=2,L({type:y,comment:M})}}function q(){var L=I(),$=D(l);if($){if(B(),!D(a))return R("property missing ':'");var M=D(s),P=L({type:v,property:k($[0].replace(e,p)),value:M?k(M[0].replace(e,p)):p});return D(u),P}}function ee(){var L=[];X(L);for(var $;$=q();)$!==!1&&(L.push($),X(L));return L}return U(),ee()}function k(w){return w?w.replace(f,p):p}return op=_,op}var W1;function m4(){if(W1)return $l;W1=1;var e=$l&&$l.__importDefault||function(l){return l&&l.__esModule?l:{default:l}};Object.defineProperty($l,"__esModule",{value:!0}),$l.default=r;const n=e(p4());function r(l,a){let s=null;if(!l||typeof l!="string")return s;const u=(0,n.default)(l),f=typeof a=="function";return u.forEach(h=>{if(h.type!=="declaration")return;const{property:d,value:m}=h;f?a(d,m,h):m&&(s=s||{},s[d]=m)}),s}return $l}var ho={},eb;function g4(){if(eb)return ho;eb=1,Object.defineProperty(ho,"__esModule",{value:!0}),ho.camelCase=void 0;var e=/^--[a-zA-Z0-9_-]+$/,n=/-([a-z])/g,r=/^[^-]+$/,l=/^-(webkit|moz|ms|o|khtml)-/,a=/^-(ms)-/,s=function(d){return!d||r.test(d)||e.test(d)},u=function(d,m){return m.toUpperCase()},f=function(d,m){return"".concat(m,"-")},h=function(d,m){return m===void 0&&(m={}),s(d)?d:(d=d.toLowerCase(),m.reactCompat?d=d.replace(a,f):d=d.replace(l,f),d.replace(n,u))};return ho.camelCase=h,ho}var po,tb;function y4(){if(tb)return po;tb=1;var e=po&&po.__importDefault||function(a){return a&&a.__esModule?a:{default:a}},n=e(m4()),r=g4();function l(a,s){var u={};return!a||typeof a!="string"||(0,n.default)(a,function(f,h){f&&h&&(u[(0,r.camelCase)(f,s)]=h)}),u}return l.default=l,po=l,po}var x4=y4();const v4=Io(x4),o_=s_("end"),_m=s_("start");function s_(e){return n;function n(r){const l=r&&r.position&&r.position[e]||{};if(typeof l.line=="number"&&l.line>0&&typeof l.column=="number"&&l.column>0)return{line:l.line,column:l.column,offset:typeof l.offset=="number"&&l.offset>-1?l.offset:void 0}}}function b4(e){const n=_m(e),r=o_(e);if(n&&r)return{start:n,end:r}}function No(e){return!e||typeof e!="object"?"":"position"in e||"type"in e?nb(e.position):"start"in e||"end"in e?nb(e):"line"in e||"column"in e?Vp(e):""}function Vp(e){return rb(e&&e.line)+":"+rb(e&&e.column)}function nb(e){return Vp(e&&e.start)+"-"+Vp(e&&e.end)}function rb(e){return e&&typeof e=="number"?e:1}class Yt extends Error{constructor(n,r,l){super(),typeof r=="string"&&(l=r,r=void 0);let a="",s={},u=!1;if(r&&("line"in r&&"column"in r?s={place:r}:"start"in r&&"end"in r?s={place:r}:"type"in r?s={ancestors:[r],place:r.position}:s={...r}),typeof n=="string"?a=n:!s.cause&&n&&(u=!0,a=n.message,s.cause=n),!s.ruleId&&!s.source&&typeof l=="string"){const h=l.indexOf(":");h===-1?s.ruleId=l:(s.source=l.slice(0,h),s.ruleId=l.slice(h+1))}if(!s.place&&s.ancestors&&s.ancestors){const h=s.ancestors[s.ancestors.length-1];h&&(s.place=h.position)}const f=s.place&&"start"in s.place?s.place.start:s.place;this.ancestors=s.ancestors||void 0,this.cause=s.cause||void 0,this.column=f?f.column:void 0,this.fatal=void 0,this.file="",this.message=a,this.line=f?f.line:void 0,this.name=No(s.place)||"1:1",this.place=s.place||void 0,this.reason=this.message,this.ruleId=s.ruleId||void 0,this.source=s.source||void 0,this.stack=u&&s.cause&&typeof s.cause.stack=="string"?s.cause.stack:"",this.actual=void 0,this.expected=void 0,this.note=void 0,this.url=void 0}}Yt.prototype.file="";Yt.prototype.name="";Yt.prototype.reason="";Yt.prototype.message="";Yt.prototype.stack="";Yt.prototype.column=void 0;Yt.prototype.line=void 0;Yt.prototype.ancestors=void 0;Yt.prototype.cause=void 0;Yt.prototype.fatal=void 0;Yt.prototype.place=void 0;Yt.prototype.ruleId=void 0;Yt.prototype.source=void 0;const Em={}.hasOwnProperty,w4=new Map,S4=/[A-Z]/g,_4=new Set(["table","tbody","thead","tfoot","tr"]),E4=new Set(["td","th"]),u_="https://github.com/syntax-tree/hast-util-to-jsx-runtime";function N4(e,n){if(!n||n.Fragment===void 0)throw new TypeError("Expected `Fragment` in options");const r=n.filePath||void 0;let l;if(n.development){if(typeof n.jsxDEV!="function")throw new TypeError("Expected `jsxDEV` in options when `development: true`");l=O4(r,n.jsxDEV)}else{if(typeof n.jsx!="function")throw new TypeError("Expected `jsx` in production options");if(typeof n.jsxs!="function")throw new TypeError("Expected `jsxs` in production options");l=j4(r,n.jsx,n.jsxs)}const a={Fragment:n.Fragment,ancestors:[],components:n.components||{},create:l,elementAttributeNameCase:n.elementAttributeNameCase||"react",evaluater:n.createEvaluater?n.createEvaluater():void 0,filePath:r,ignoreInvalidStyle:n.ignoreInvalidStyle||!1,passKeys:n.passKeys!==!1,passNode:n.passNode||!1,schema:n.space==="svg"?Sm:d4,stylePropertyNameCase:n.stylePropertyNameCase||"dom",tableCellAlignToStyle:n.tableCellAlignToStyle!==!1},s=c_(a,e,void 0);return s&&typeof s!="string"?s:a.create(e,a.Fragment,{children:s||void 0},void 0)}function c_(e,n,r){if(n.type==="element")return k4(e,n,r);if(n.type==="mdxFlowExpression"||n.type==="mdxTextExpression")return C4(e,n);if(n.type==="mdxJsxFlowElement"||n.type==="mdxJsxTextElement")return A4(e,n,r);if(n.type==="mdxjsEsm")return T4(e,n);if(n.type==="root")return z4(e,n,r);if(n.type==="text")return M4(e,n)}function k4(e,n,r){const l=e.schema;let a=l;n.tagName.toLowerCase()==="svg"&&l.space==="html"&&(a=Sm,e.schema=a),e.ancestors.push(n);const s=d_(e,n.tagName,!1),u=D4(e,n);let f=km(e,n);return _4.has(n.tagName)&&(f=f.filter(function(h){return typeof h=="string"?!n4(h):!0})),f_(e,u,s,n),Nm(u,f),e.ancestors.pop(),e.schema=l,e.create(n,s,u,r)}function C4(e,n){if(n.data&&n.data.estree&&e.evaluater){const l=n.data.estree.body[0];return l.type,e.evaluater.evaluateExpression(l.expression)}Uo(e,n.position)}function T4(e,n){if(n.data&&n.data.estree&&e.evaluater)return e.evaluater.evaluateProgram(n.data.estree);Uo(e,n.position)}function A4(e,n,r){const l=e.schema;let a=l;n.name==="svg"&&l.space==="html"&&(a=Sm,e.schema=a),e.ancestors.push(n);const s=n.name===null?e.Fragment:d_(e,n.name,!0),u=R4(e,n),f=km(e,n);return f_(e,u,s,n),Nm(u,f),e.ancestors.pop(),e.schema=l,e.create(n,s,u,r)}function z4(e,n,r){const l={};return Nm(l,km(e,n)),e.create(n,e.Fragment,l,r)}function M4(e,n){return n.value}function f_(e,n,r,l){typeof r!="string"&&r!==e.Fragment&&e.passNode&&(n.node=l)}function Nm(e,n){if(n.length>0){const r=n.length>1?n:n[0];r&&(e.children=r)}}function j4(e,n,r){return l;function l(a,s,u,f){const d=Array.isArray(u.children)?r:n;return f?d(s,u,f):d(s,u)}}function O4(e,n){return r;function r(l,a,s,u){const f=Array.isArray(s.children),h=_m(l);return n(a,s,u,f,{columnNumber:h?h.column-1:void 0,fileName:e,lineNumber:h?h.line:void 0},void 0)}}function D4(e,n){const r={};let l,a;for(a in n.properties)if(a!=="children"&&Em.call(n.properties,a)){const s=L4(e,a,n.properties[a]);if(s){const[u,f]=s;e.tableCellAlignToStyle&&u==="align"&&typeof f=="string"&&E4.has(n.tagName)?l=f:r[u]=f}}if(l){const s=r.style||(r.style={});s[e.stylePropertyNameCase==="css"?"text-align":"textAlign"]=l}return r}function R4(e,n){const r={};for(const l of n.attributes)if(l.type==="mdxJsxExpressionAttribute")if(l.data&&l.data.estree&&e.evaluater){const s=l.data.estree.body[0];s.type;const u=s.expression;u.type;const f=u.properties[0];f.type,Object.assign(r,e.evaluater.evaluateExpression(f.argument))}else Uo(e,n.position);else{const a=l.name;let s;if(l.value&&typeof l.value=="object")if(l.value.data&&l.value.data.estree&&e.evaluater){const f=l.value.data.estree.body[0];f.type,s=e.evaluater.evaluateExpression(f.expression)}else Uo(e,n.position);else s=l.value===null?!0:l.value;r[a]=s}return r}function km(e,n){const r=[];let l=-1;const a=e.passKeys?new Map:w4;for(;++la?0:a+n:n=n>a?a:n,r=r>0?r:0,l.length<1e4)u=Array.from(l),u.unshift(n,r),e.splice(...u);else for(r&&e.splice(n,r);s0?(ir(e,e.length,0,n),e):n}const ab={}.hasOwnProperty;function P4(e){const n={};let r=-1;for(;++r13&&r<32||r>126&&r<160||r>55295&&r<57344||r>64975&&r<65008||(r&65535)===65535||(r&65535)===65534||r>1114111?"�":String.fromCodePoint(r)}function ra(e){return e.replace(/[\t\n\r ]+/g," ").replace(/^ | $/g,"").toLowerCase().toUpperCase()}const tr=gi(/[A-Za-z]/),bn=gi(/[\dA-Za-z]/),X4=gi(/[#-'*+\--9=?A-Z^-~]/);function Gp(e){return e!==null&&(e<32||e===127)}const Pp=gi(/\d/),F4=gi(/[\dA-Fa-f]/),Q4=gi(/[!-/:-@[-`{-~]/);function Te(e){return e!==null&&e<-2}function on(e){return e!==null&&(e<0||e===32)}function Ke(e){return e===-2||e===-1||e===32}const Z4=gi(new RegExp("\\p{P}|\\p{S}","u")),K4=gi(/\s/);function gi(e){return n;function n(r){return r!==null&&r>-1&&e.test(String.fromCharCode(r))}}function da(e){const n=[];let r=-1,l=0,a=0;for(;++r55295&&s<57344){const f=e.charCodeAt(r+1);s<56320&&f>56319&&f<57344?(u=String.fromCharCode(s,f),a=1):u="�"}else u=String.fromCharCode(s);u&&(n.push(e.slice(l,r),encodeURIComponent(u)),l=r+a+1,u=""),a&&(r+=a,a=0)}return n.join("")+e.slice(l)}function ot(e,n,r,l){const a=l?l-1:Number.POSITIVE_INFINITY;let s=0;return u;function u(h){return Ke(h)?(e.enter(r),f(h)):n(h)}function f(h){return Ke(h)&&s++u))return;const R=n.events.length;let D=R,U,X;for(;D--;)if(n.events[D][0]==="exit"&&n.events[D][1].type==="chunkFlow"){if(U){X=n.events[D][1].end;break}U=!0}for(S(l),z=R;zE;){const I=r[A];n.containerState=I[1],I[0].exit.call(n,e)}r.length=E}function T(){a.write([null]),s=void 0,a=void 0,n.containerState._closeFlow=void 0}}function nO(e,n,r){return ot(e,e.attempt(this.parser.constructs.document,n,r),"linePrefix",this.parser.constructs.disable.null.includes("codeIndented")?void 0:4)}function sb(e){if(e===null||on(e)||K4(e))return 1;if(Z4(e))return 2}function Tm(e,n,r){const l=[];let a=-1;for(;++a1&&e[r][1].end.offset-e[r][1].start.offset>1?2:1;const p={...e[l][1].end},y={...e[r][1].start};ub(p,-h),ub(y,h),u={type:h>1?"strongSequence":"emphasisSequence",start:p,end:{...e[l][1].end}},f={type:h>1?"strongSequence":"emphasisSequence",start:{...e[r][1].start},end:y},s={type:h>1?"strongText":"emphasisText",start:{...e[l][1].end},end:{...e[r][1].start}},a={type:h>1?"strong":"emphasis",start:{...u.start},end:{...f.end}},e[l][1].end={...u.start},e[r][1].start={...f.end},d=[],e[l][1].end.offset-e[l][1].start.offset&&(d=Mn(d,[["enter",e[l][1],n],["exit",e[l][1],n]])),d=Mn(d,[["enter",a,n],["enter",u,n],["exit",u,n],["enter",s,n]]),d=Mn(d,Tm(n.parser.constructs.insideSpan.null,e.slice(l+1,r),n)),d=Mn(d,[["exit",s,n],["enter",f,n],["exit",f,n],["exit",a,n]]),e[r][1].end.offset-e[r][1].start.offset?(m=2,d=Mn(d,[["enter",e[r][1],n],["exit",e[r][1],n]])):m=0,ir(e,l-1,r-l+3,d),r=l+d.length-m-2;break}}for(r=-1;++r0&&Ke(z)?ot(e,T,"linePrefix",s+1)(z):T(z)}function T(z){return z===null||Te(z)?e.check(cb,k,A)(z):(e.enter("codeFlowValue"),E(z))}function E(z){return z===null||Te(z)?(e.exit("codeFlowValue"),T(z)):(e.consume(z),E)}function A(z){return e.exit("codeFenced"),n(z)}function I(z,R,D){let U=0;return X;function X($){return z.enter("lineEnding"),z.consume($),z.exit("lineEnding"),B}function B($){return z.enter("codeFencedFence"),Ke($)?ot(z,q,"linePrefix",l.parser.constructs.disable.null.includes("codeIndented")?void 0:4)($):q($)}function q($){return $===f?(z.enter("codeFencedFenceSequence"),ee($)):D($)}function ee($){return $===f?(U++,z.consume($),ee):U>=u?(z.exit("codeFencedFenceSequence"),Ke($)?ot(z,L,"whitespace")($):L($)):D($)}function L($){return $===null||Te($)?(z.exit("codeFencedFence"),R($)):D($)}}}function pO(e,n,r){const l=this;return a;function a(u){return u===null?r(u):(e.enter("lineEnding"),e.consume(u),e.exit("lineEnding"),s)}function s(u){return l.parser.lazy[l.now().line]?r(u):n(u)}}const up={name:"codeIndented",tokenize:gO},mO={partial:!0,tokenize:yO};function gO(e,n,r){const l=this;return a;function a(d){return e.enter("codeIndented"),ot(e,s,"linePrefix",5)(d)}function s(d){const m=l.events[l.events.length-1];return m&&m[1].type==="linePrefix"&&m[2].sliceSerialize(m[1],!0).length>=4?u(d):r(d)}function u(d){return d===null?h(d):Te(d)?e.attempt(mO,u,h)(d):(e.enter("codeFlowValue"),f(d))}function f(d){return d===null||Te(d)?(e.exit("codeFlowValue"),u(d)):(e.consume(d),f)}function h(d){return e.exit("codeIndented"),n(d)}}function yO(e,n,r){const l=this;return a;function a(u){return l.parser.lazy[l.now().line]?r(u):Te(u)?(e.enter("lineEnding"),e.consume(u),e.exit("lineEnding"),a):ot(e,s,"linePrefix",5)(u)}function s(u){const f=l.events[l.events.length-1];return f&&f[1].type==="linePrefix"&&f[2].sliceSerialize(f[1],!0).length>=4?n(u):Te(u)?a(u):r(u)}}const xO={name:"codeText",previous:bO,resolve:vO,tokenize:wO};function vO(e){let n=e.length-4,r=3,l,a;if((e[r][1].type==="lineEnding"||e[r][1].type==="space")&&(e[n][1].type==="lineEnding"||e[n][1].type==="space")){for(l=r;++l=this.left.length+this.right.length)throw new RangeError("Cannot access index `"+n+"` in a splice buffer of size `"+(this.left.length+this.right.length)+"`");return nthis.left.length?this.right.slice(this.right.length-l+this.left.length,this.right.length-n+this.left.length).reverse():this.left.slice(n).concat(this.right.slice(this.right.length-l+this.left.length).reverse())}splice(n,r,l){const a=r||0;this.setCursor(Math.trunc(n));const s=this.right.splice(this.right.length-a,Number.POSITIVE_INFINITY);return l&&mo(this.left,l),s.reverse()}pop(){return this.setCursor(Number.POSITIVE_INFINITY),this.left.pop()}push(n){this.setCursor(Number.POSITIVE_INFINITY),this.left.push(n)}pushMany(n){this.setCursor(Number.POSITIVE_INFINITY),mo(this.left,n)}unshift(n){this.setCursor(0),this.right.push(n)}unshiftMany(n){this.setCursor(0),mo(this.right,n.reverse())}setCursor(n){if(!(n===this.left.length||n>this.left.length&&this.right.length===0||n<0&&this.left.length===0))if(n=4?n(u):e.interrupt(l.parser.constructs.flow,r,n)(u)}}function v_(e,n,r,l,a,s,u,f,h){const d=h||Number.POSITIVE_INFINITY;let m=0;return p;function p(S){return S===60?(e.enter(l),e.enter(a),e.enter(s),e.consume(S),e.exit(s),y):S===null||S===32||S===41||Gp(S)?r(S):(e.enter(l),e.enter(u),e.enter(f),e.enter("chunkString",{contentType:"string"}),k(S))}function y(S){return S===62?(e.enter(s),e.consume(S),e.exit(s),e.exit(a),e.exit(l),n):(e.enter(f),e.enter("chunkString",{contentType:"string"}),v(S))}function v(S){return S===62?(e.exit("chunkString"),e.exit(f),y(S)):S===null||S===60||Te(S)?r(S):(e.consume(S),S===92?_:v)}function _(S){return S===60||S===62||S===92?(e.consume(S),v):v(S)}function k(S){return!m&&(S===null||S===41||on(S))?(e.exit("chunkString"),e.exit(f),e.exit(u),e.exit(l),n(S)):m999||v===null||v===91||v===93&&!h||v===94&&!f&&"_hiddenFootnoteSupport"in u.parser.constructs?r(v):v===93?(e.exit(s),e.enter(a),e.consume(v),e.exit(a),e.exit(l),n):Te(v)?(e.enter("lineEnding"),e.consume(v),e.exit("lineEnding"),m):(e.enter("chunkString",{contentType:"string"}),p(v))}function p(v){return v===null||v===91||v===93||Te(v)||f++>999?(e.exit("chunkString"),m(v)):(e.consume(v),h||(h=!Ke(v)),v===92?y:p)}function y(v){return v===91||v===92||v===93?(e.consume(v),f++,p):p(v)}}function w_(e,n,r,l,a,s){let u;return f;function f(y){return y===34||y===39||y===40?(e.enter(l),e.enter(a),e.consume(y),e.exit(a),u=y===40?41:y,h):r(y)}function h(y){return y===u?(e.enter(a),e.consume(y),e.exit(a),e.exit(l),n):(e.enter(s),d(y))}function d(y){return y===u?(e.exit(s),h(u)):y===null?r(y):Te(y)?(e.enter("lineEnding"),e.consume(y),e.exit("lineEnding"),ot(e,d,"linePrefix")):(e.enter("chunkString",{contentType:"string"}),m(y))}function m(y){return y===u||y===null||Te(y)?(e.exit("chunkString"),d(y)):(e.consume(y),y===92?p:m)}function p(y){return y===u||y===92?(e.consume(y),m):m(y)}}function ko(e,n){let r;return l;function l(a){return Te(a)?(e.enter("lineEnding"),e.consume(a),e.exit("lineEnding"),r=!0,l):Ke(a)?ot(e,l,r?"linePrefix":"lineSuffix")(a):n(a)}}const AO={name:"definition",tokenize:MO},zO={partial:!0,tokenize:jO};function MO(e,n,r){const l=this;let a;return s;function s(v){return e.enter("definition"),u(v)}function u(v){return b_.call(l,e,f,r,"definitionLabel","definitionLabelMarker","definitionLabelString")(v)}function f(v){return a=ra(l.sliceSerialize(l.events[l.events.length-1][1]).slice(1,-1)),v===58?(e.enter("definitionMarker"),e.consume(v),e.exit("definitionMarker"),h):r(v)}function h(v){return on(v)?ko(e,d)(v):d(v)}function d(v){return v_(e,m,r,"definitionDestination","definitionDestinationLiteral","definitionDestinationLiteralMarker","definitionDestinationRaw","definitionDestinationString")(v)}function m(v){return e.attempt(zO,p,p)(v)}function p(v){return Ke(v)?ot(e,y,"whitespace")(v):y(v)}function y(v){return v===null||Te(v)?(e.exit("definition"),l.parser.defined.push(a),n(v)):r(v)}}function jO(e,n,r){return l;function l(f){return on(f)?ko(e,a)(f):r(f)}function a(f){return w_(e,s,r,"definitionTitle","definitionTitleMarker","definitionTitleString")(f)}function s(f){return Ke(f)?ot(e,u,"whitespace")(f):u(f)}function u(f){return f===null||Te(f)?n(f):r(f)}}const OO={name:"hardBreakEscape",tokenize:DO};function DO(e,n,r){return l;function l(s){return e.enter("hardBreakEscape"),e.consume(s),a}function a(s){return Te(s)?(e.exit("hardBreakEscape"),n(s)):r(s)}}const RO={name:"headingAtx",resolve:LO,tokenize:HO};function LO(e,n){let r=e.length-2,l=3,a,s;return e[l][1].type==="whitespace"&&(l+=2),r-2>l&&e[r][1].type==="whitespace"&&(r-=2),e[r][1].type==="atxHeadingSequence"&&(l===r-1||r-4>l&&e[r-2][1].type==="whitespace")&&(r-=l+1===r?2:4),r>l&&(a={type:"atxHeadingText",start:e[l][1].start,end:e[r][1].end},s={type:"chunkText",start:e[l][1].start,end:e[r][1].end,contentType:"text"},ir(e,l,r-l+1,[["enter",a,n],["enter",s,n],["exit",s,n],["exit",a,n]])),e}function HO(e,n,r){let l=0;return a;function a(m){return e.enter("atxHeading"),s(m)}function s(m){return e.enter("atxHeadingSequence"),u(m)}function u(m){return m===35&&l++<6?(e.consume(m),u):m===null||on(m)?(e.exit("atxHeadingSequence"),f(m)):r(m)}function f(m){return m===35?(e.enter("atxHeadingSequence"),h(m)):m===null||Te(m)?(e.exit("atxHeading"),n(m)):Ke(m)?ot(e,f,"whitespace")(m):(e.enter("atxHeadingText"),d(m))}function h(m){return m===35?(e.consume(m),h):(e.exit("atxHeadingSequence"),f(m))}function d(m){return m===null||m===35||on(m)?(e.exit("atxHeadingText"),f(m)):(e.consume(m),d)}}const BO=["address","article","aside","base","basefont","blockquote","body","caption","center","col","colgroup","dd","details","dialog","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","nav","noframes","ol","optgroup","option","p","param","search","section","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"],db=["pre","script","style","textarea"],qO={concrete:!0,name:"htmlFlow",resolveTo:VO,tokenize:GO},UO={partial:!0,tokenize:$O},IO={partial:!0,tokenize:PO};function VO(e){let n=e.length;for(;n--&&!(e[n][0]==="enter"&&e[n][1].type==="htmlFlow"););return n>1&&e[n-2][1].type==="linePrefix"&&(e[n][1].start=e[n-2][1].start,e[n+1][1].start=e[n-2][1].start,e.splice(n-2,2)),e}function GO(e,n,r){const l=this;let a,s,u,f,h;return d;function d(N){return m(N)}function m(N){return e.enter("htmlFlow"),e.enter("htmlFlowData"),e.consume(N),p}function p(N){return N===33?(e.consume(N),y):N===47?(e.consume(N),s=!0,k):N===63?(e.consume(N),a=3,l.interrupt?n:j):tr(N)?(e.consume(N),u=String.fromCharCode(N),w):r(N)}function y(N){return N===45?(e.consume(N),a=2,v):N===91?(e.consume(N),a=5,f=0,_):tr(N)?(e.consume(N),a=4,l.interrupt?n:j):r(N)}function v(N){return N===45?(e.consume(N),l.interrupt?n:j):r(N)}function _(N){const G="CDATA[";return N===G.charCodeAt(f++)?(e.consume(N),f===G.length?l.interrupt?n:q:_):r(N)}function k(N){return tr(N)?(e.consume(N),u=String.fromCharCode(N),w):r(N)}function w(N){if(N===null||N===47||N===62||on(N)){const G=N===47,F=u.toLowerCase();return!G&&!s&&db.includes(F)?(a=1,l.interrupt?n(N):q(N)):BO.includes(u.toLowerCase())?(a=6,G?(e.consume(N),S):l.interrupt?n(N):q(N)):(a=7,l.interrupt&&!l.parser.lazy[l.now().line]?r(N):s?T(N):E(N))}return N===45||bn(N)?(e.consume(N),u+=String.fromCharCode(N),w):r(N)}function S(N){return N===62?(e.consume(N),l.interrupt?n:q):r(N)}function T(N){return Ke(N)?(e.consume(N),T):X(N)}function E(N){return N===47?(e.consume(N),X):N===58||N===95||tr(N)?(e.consume(N),A):Ke(N)?(e.consume(N),E):X(N)}function A(N){return N===45||N===46||N===58||N===95||bn(N)?(e.consume(N),A):I(N)}function I(N){return N===61?(e.consume(N),z):Ke(N)?(e.consume(N),I):E(N)}function z(N){return N===null||N===60||N===61||N===62||N===96?r(N):N===34||N===39?(e.consume(N),h=N,R):Ke(N)?(e.consume(N),z):D(N)}function R(N){return N===h?(e.consume(N),h=null,U):N===null||Te(N)?r(N):(e.consume(N),R)}function D(N){return N===null||N===34||N===39||N===47||N===60||N===61||N===62||N===96||on(N)?I(N):(e.consume(N),D)}function U(N){return N===47||N===62||Ke(N)?E(N):r(N)}function X(N){return N===62?(e.consume(N),B):r(N)}function B(N){return N===null||Te(N)?q(N):Ke(N)?(e.consume(N),B):r(N)}function q(N){return N===45&&a===2?(e.consume(N),M):N===60&&a===1?(e.consume(N),P):N===62&&a===4?(e.consume(N),H):N===63&&a===3?(e.consume(N),j):N===93&&a===5?(e.consume(N),K):Te(N)&&(a===6||a===7)?(e.exit("htmlFlowData"),e.check(UO,Y,ee)(N)):N===null||Te(N)?(e.exit("htmlFlowData"),ee(N)):(e.consume(N),q)}function ee(N){return e.check(IO,L,Y)(N)}function L(N){return e.enter("lineEnding"),e.consume(N),e.exit("lineEnding"),$}function $(N){return N===null||Te(N)?ee(N):(e.enter("htmlFlowData"),q(N))}function M(N){return N===45?(e.consume(N),j):q(N)}function P(N){return N===47?(e.consume(N),u="",Q):q(N)}function Q(N){if(N===62){const G=u.toLowerCase();return db.includes(G)?(e.consume(N),H):q(N)}return tr(N)&&u.length<8?(e.consume(N),u+=String.fromCharCode(N),Q):q(N)}function K(N){return N===93?(e.consume(N),j):q(N)}function j(N){return N===62?(e.consume(N),H):N===45&&a===2?(e.consume(N),j):q(N)}function H(N){return N===null||Te(N)?(e.exit("htmlFlowData"),Y(N)):(e.consume(N),H)}function Y(N){return e.exit("htmlFlow"),n(N)}}function PO(e,n,r){const l=this;return a;function a(u){return Te(u)?(e.enter("lineEnding"),e.consume(u),e.exit("lineEnding"),s):r(u)}function s(u){return l.parser.lazy[l.now().line]?r(u):n(u)}}function $O(e,n,r){return l;function l(a){return e.enter("lineEnding"),e.consume(a),e.exit("lineEnding"),e.attempt(Cc,n,r)}}const YO={name:"htmlText",tokenize:XO};function XO(e,n,r){const l=this;let a,s,u;return f;function f(j){return e.enter("htmlText"),e.enter("htmlTextData"),e.consume(j),h}function h(j){return j===33?(e.consume(j),d):j===47?(e.consume(j),I):j===63?(e.consume(j),E):tr(j)?(e.consume(j),D):r(j)}function d(j){return j===45?(e.consume(j),m):j===91?(e.consume(j),s=0,_):tr(j)?(e.consume(j),T):r(j)}function m(j){return j===45?(e.consume(j),v):r(j)}function p(j){return j===null?r(j):j===45?(e.consume(j),y):Te(j)?(u=p,P(j)):(e.consume(j),p)}function y(j){return j===45?(e.consume(j),v):p(j)}function v(j){return j===62?M(j):j===45?y(j):p(j)}function _(j){const H="CDATA[";return j===H.charCodeAt(s++)?(e.consume(j),s===H.length?k:_):r(j)}function k(j){return j===null?r(j):j===93?(e.consume(j),w):Te(j)?(u=k,P(j)):(e.consume(j),k)}function w(j){return j===93?(e.consume(j),S):k(j)}function S(j){return j===62?M(j):j===93?(e.consume(j),S):k(j)}function T(j){return j===null||j===62?M(j):Te(j)?(u=T,P(j)):(e.consume(j),T)}function E(j){return j===null?r(j):j===63?(e.consume(j),A):Te(j)?(u=E,P(j)):(e.consume(j),E)}function A(j){return j===62?M(j):E(j)}function I(j){return tr(j)?(e.consume(j),z):r(j)}function z(j){return j===45||bn(j)?(e.consume(j),z):R(j)}function R(j){return Te(j)?(u=R,P(j)):Ke(j)?(e.consume(j),R):M(j)}function D(j){return j===45||bn(j)?(e.consume(j),D):j===47||j===62||on(j)?U(j):r(j)}function U(j){return j===47?(e.consume(j),M):j===58||j===95||tr(j)?(e.consume(j),X):Te(j)?(u=U,P(j)):Ke(j)?(e.consume(j),U):M(j)}function X(j){return j===45||j===46||j===58||j===95||bn(j)?(e.consume(j),X):B(j)}function B(j){return j===61?(e.consume(j),q):Te(j)?(u=B,P(j)):Ke(j)?(e.consume(j),B):U(j)}function q(j){return j===null||j===60||j===61||j===62||j===96?r(j):j===34||j===39?(e.consume(j),a=j,ee):Te(j)?(u=q,P(j)):Ke(j)?(e.consume(j),q):(e.consume(j),L)}function ee(j){return j===a?(e.consume(j),a=void 0,$):j===null?r(j):Te(j)?(u=ee,P(j)):(e.consume(j),ee)}function L(j){return j===null||j===34||j===39||j===60||j===61||j===96?r(j):j===47||j===62||on(j)?U(j):(e.consume(j),L)}function $(j){return j===47||j===62||on(j)?U(j):r(j)}function M(j){return j===62?(e.consume(j),e.exit("htmlTextData"),e.exit("htmlText"),n):r(j)}function P(j){return e.exit("htmlTextData"),e.enter("lineEnding"),e.consume(j),e.exit("lineEnding"),Q}function Q(j){return Ke(j)?ot(e,K,"linePrefix",l.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(j):K(j)}function K(j){return e.enter("htmlTextData"),u(j)}}const Am={name:"labelEnd",resolveAll:KO,resolveTo:JO,tokenize:WO},FO={tokenize:eD},QO={tokenize:tD},ZO={tokenize:nD};function KO(e){let n=-1;const r=[];for(;++n=3&&(d===null||Te(d))?(e.exit("thematicBreak"),n(d)):r(d)}function h(d){return d===a?(e.consume(d),l++,h):(e.exit("thematicBreakSequence"),Ke(d)?ot(e,f,"whitespace")(d):f(d))}}const ln={continuation:{tokenize:dD},exit:pD,name:"list",tokenize:fD},uD={partial:!0,tokenize:mD},cD={partial:!0,tokenize:hD};function fD(e,n,r){const l=this,a=l.events[l.events.length-1];let s=a&&a[1].type==="linePrefix"?a[2].sliceSerialize(a[1],!0).length:0,u=0;return f;function f(v){const _=l.containerState.type||(v===42||v===43||v===45?"listUnordered":"listOrdered");if(_==="listUnordered"?!l.containerState.marker||v===l.containerState.marker:Pp(v)){if(l.containerState.type||(l.containerState.type=_,e.enter(_,{_container:!0})),_==="listUnordered")return e.enter("listItemPrefix"),v===42||v===45?e.check(Xu,r,d)(v):d(v);if(!l.interrupt||v===49)return e.enter("listItemPrefix"),e.enter("listItemValue"),h(v)}return r(v)}function h(v){return Pp(v)&&++u<10?(e.consume(v),h):(!l.interrupt||u<2)&&(l.containerState.marker?v===l.containerState.marker:v===41||v===46)?(e.exit("listItemValue"),d(v)):r(v)}function d(v){return e.enter("listItemMarker"),e.consume(v),e.exit("listItemMarker"),l.containerState.marker=l.containerState.marker||v,e.check(Cc,l.interrupt?r:m,e.attempt(uD,y,p))}function m(v){return l.containerState.initialBlankLine=!0,s++,y(v)}function p(v){return Ke(v)?(e.enter("listItemPrefixWhitespace"),e.consume(v),e.exit("listItemPrefixWhitespace"),y):r(v)}function y(v){return l.containerState.size=s+l.sliceSerialize(e.exit("listItemPrefix"),!0).length,n(v)}}function dD(e,n,r){const l=this;return l.containerState._closeFlow=void 0,e.check(Cc,a,s);function a(f){return l.containerState.furtherBlankLines=l.containerState.furtherBlankLines||l.containerState.initialBlankLine,ot(e,n,"listItemIndent",l.containerState.size+1)(f)}function s(f){return l.containerState.furtherBlankLines||!Ke(f)?(l.containerState.furtherBlankLines=void 0,l.containerState.initialBlankLine=void 0,u(f)):(l.containerState.furtherBlankLines=void 0,l.containerState.initialBlankLine=void 0,e.attempt(cD,n,u)(f))}function u(f){return l.containerState._closeFlow=!0,l.interrupt=void 0,ot(e,e.attempt(ln,n,r),"linePrefix",l.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(f)}}function hD(e,n,r){const l=this;return ot(e,a,"listItemIndent",l.containerState.size+1);function a(s){const u=l.events[l.events.length-1];return u&&u[1].type==="listItemIndent"&&u[2].sliceSerialize(u[1],!0).length===l.containerState.size?n(s):r(s)}}function pD(e){e.exit(this.containerState.type)}function mD(e,n,r){const l=this;return ot(e,a,"listItemPrefixWhitespace",l.parser.constructs.disable.null.includes("codeIndented")?void 0:5);function a(s){const u=l.events[l.events.length-1];return!Ke(s)&&u&&u[1].type==="listItemPrefixWhitespace"?n(s):r(s)}}const hb={name:"setextUnderline",resolveTo:gD,tokenize:yD};function gD(e,n){let r=e.length,l,a,s;for(;r--;)if(e[r][0]==="enter"){if(e[r][1].type==="content"){l=r;break}e[r][1].type==="paragraph"&&(a=r)}else e[r][1].type==="content"&&e.splice(r,1),!s&&e[r][1].type==="definition"&&(s=r);const u={type:"setextHeading",start:{...e[l][1].start},end:{...e[e.length-1][1].end}};return e[a][1].type="setextHeadingText",s?(e.splice(a,0,["enter",u,n]),e.splice(s+1,0,["exit",e[l][1],n]),e[l][1].end={...e[s][1].end}):e[l][1]=u,e.push(["exit",u,n]),e}function yD(e,n,r){const l=this;let a;return s;function s(d){let m=l.events.length,p;for(;m--;)if(l.events[m][1].type!=="lineEnding"&&l.events[m][1].type!=="linePrefix"&&l.events[m][1].type!=="content"){p=l.events[m][1].type==="paragraph";break}return!l.parser.lazy[l.now().line]&&(l.interrupt||p)?(e.enter("setextHeadingLine"),a=d,u(d)):r(d)}function u(d){return e.enter("setextHeadingLineSequence"),f(d)}function f(d){return d===a?(e.consume(d),f):(e.exit("setextHeadingLineSequence"),Ke(d)?ot(e,h,"lineSuffix")(d):h(d))}function h(d){return d===null||Te(d)?(e.exit("setextHeadingLine"),n(d)):r(d)}}const xD={tokenize:vD};function vD(e){const n=this,r=e.attempt(Cc,l,e.attempt(this.parser.constructs.flowInitial,a,ot(e,e.attempt(this.parser.constructs.flow,a,e.attempt(EO,a)),"linePrefix")));return r;function l(s){if(s===null){e.consume(s);return}return e.enter("lineEndingBlank"),e.consume(s),e.exit("lineEndingBlank"),n.currentConstruct=void 0,r}function a(s){if(s===null){e.consume(s);return}return e.enter("lineEnding"),e.consume(s),e.exit("lineEnding"),n.currentConstruct=void 0,r}}const bD={resolveAll:__()},wD=S_("string"),SD=S_("text");function S_(e){return{resolveAll:__(e==="text"?_D:void 0),tokenize:n};function n(r){const l=this,a=this.parser.constructs[e],s=r.attempt(a,u,f);return u;function u(m){return d(m)?s(m):f(m)}function f(m){if(m===null){r.consume(m);return}return r.enter("data"),r.consume(m),h}function h(m){return d(m)?(r.exit("data"),s(m)):(r.consume(m),h)}function d(m){if(m===null)return!0;const p=a[m];let y=-1;if(p)for(;++y-1){const f=u[0];typeof f=="string"?u[0]=f.slice(l):u.shift()}s>0&&u.push(e[a].slice(0,s))}return u}function LD(e,n){let r=-1;const l=[];let a;for(;++r0){const Xt=Ne.tokenStack[Ne.tokenStack.length-1];(Xt[1]||mb).call(Ne,void 0,Xt[0])}for(ge.position={start:di(ue.length>0?ue[0][1].start:{line:1,column:1,offset:0}),end:di(ue.length>0?ue[ue.length-2][1].end:{line:1,column:1,offset:0})},Ye=-1;++Ye0&&(l.className=["language-"+a[0]]);let s={type:"element",tagName:"code",properties:l,children:[{type:"text",value:r}]};return n.meta&&(s.data={meta:n.meta}),e.patch(n,s),s=e.applyData(n,s),s={type:"element",tagName:"pre",properties:{},children:[s]},e.patch(n,s),s}function ZD(e,n){const r={type:"element",tagName:"del",properties:{},children:e.all(n)};return e.patch(n,r),e.applyData(n,r)}function KD(e,n){const r={type:"element",tagName:"em",properties:{},children:e.all(n)};return e.patch(n,r),e.applyData(n,r)}function JD(e,n){const r=typeof e.options.clobberPrefix=="string"?e.options.clobberPrefix:"user-content-",l=String(n.identifier).toUpperCase(),a=da(l.toLowerCase()),s=e.footnoteOrder.indexOf(l);let u,f=e.footnoteCounts.get(l);f===void 0?(f=0,e.footnoteOrder.push(l),u=e.footnoteOrder.length):u=s+1,f+=1,e.footnoteCounts.set(l,f);const h={type:"element",tagName:"a",properties:{href:"#"+r+"fn-"+a,id:r+"fnref-"+a+(f>1?"-"+f:""),dataFootnoteRef:!0,ariaDescribedBy:["footnote-label"]},children:[{type:"text",value:String(u)}]};e.patch(n,h);const d={type:"element",tagName:"sup",properties:{},children:[h]};return e.patch(n,d),e.applyData(n,d)}function WD(e,n){const r={type:"element",tagName:"h"+n.depth,properties:{},children:e.all(n)};return e.patch(n,r),e.applyData(n,r)}function eR(e,n){if(e.options.allowDangerousHtml){const r={type:"raw",value:n.value};return e.patch(n,r),e.applyData(n,r)}}function k_(e,n){const r=n.referenceType;let l="]";if(r==="collapsed"?l+="[]":r==="full"&&(l+="["+(n.label||n.identifier)+"]"),n.type==="imageReference")return[{type:"text",value:"!["+n.alt+l}];const a=e.all(n),s=a[0];s&&s.type==="text"?s.value="["+s.value:a.unshift({type:"text",value:"["});const u=a[a.length-1];return u&&u.type==="text"?u.value+=l:a.push({type:"text",value:l}),a}function tR(e,n){const r=String(n.identifier).toUpperCase(),l=e.definitionById.get(r);if(!l)return k_(e,n);const a={src:da(l.url||""),alt:n.alt};l.title!==null&&l.title!==void 0&&(a.title=l.title);const s={type:"element",tagName:"img",properties:a,children:[]};return e.patch(n,s),e.applyData(n,s)}function nR(e,n){const r={src:da(n.url)};n.alt!==null&&n.alt!==void 0&&(r.alt=n.alt),n.title!==null&&n.title!==void 0&&(r.title=n.title);const l={type:"element",tagName:"img",properties:r,children:[]};return e.patch(n,l),e.applyData(n,l)}function rR(e,n){const r={type:"text",value:n.value.replace(/\r?\n|\r/g," ")};e.patch(n,r);const l={type:"element",tagName:"code",properties:{},children:[r]};return e.patch(n,l),e.applyData(n,l)}function iR(e,n){const r=String(n.identifier).toUpperCase(),l=e.definitionById.get(r);if(!l)return k_(e,n);const a={href:da(l.url||"")};l.title!==null&&l.title!==void 0&&(a.title=l.title);const s={type:"element",tagName:"a",properties:a,children:e.all(n)};return e.patch(n,s),e.applyData(n,s)}function lR(e,n){const r={href:da(n.url)};n.title!==null&&n.title!==void 0&&(r.title=n.title);const l={type:"element",tagName:"a",properties:r,children:e.all(n)};return e.patch(n,l),e.applyData(n,l)}function aR(e,n,r){const l=e.all(n),a=r?oR(r):C_(n),s={},u=[];if(typeof n.checked=="boolean"){const m=l[0];let p;m&&m.type==="element"&&m.tagName==="p"?p=m:(p={type:"element",tagName:"p",properties:{},children:[]},l.unshift(p)),p.children.length>0&&p.children.unshift({type:"text",value:" "}),p.children.unshift({type:"element",tagName:"input",properties:{type:"checkbox",checked:n.checked,disabled:!0},children:[]}),s.className=["task-list-item"]}let f=-1;for(;++f1}function sR(e,n){const r={},l=e.all(n);let a=-1;for(typeof n.start=="number"&&n.start!==1&&(r.start=n.start);++a0){const u={type:"element",tagName:"tbody",properties:{},children:e.wrap(r,!0)},f=_m(n.children[1]),h=o_(n.children[n.children.length-1]);f&&h&&(u.position={start:f,end:h}),a.push(u)}const s={type:"element",tagName:"table",properties:{},children:e.wrap(a,!0)};return e.patch(n,s),e.applyData(n,s)}function hR(e,n,r){const l=r?r.children:void 0,s=(l?l.indexOf(n):1)===0?"th":"td",u=r&&r.type==="table"?r.align:void 0,f=u?u.length:n.children.length;let h=-1;const d=[];for(;++h0,!0),l[0]),a=l.index+l[0].length,l=r.exec(n);return s.push(xb(n.slice(a),a>0,!1)),s.join("")}function xb(e,n,r){let l=0,a=e.length;if(n){let s=e.codePointAt(l);for(;s===gb||s===yb;)l++,s=e.codePointAt(l)}if(r){let s=e.codePointAt(a-1);for(;s===gb||s===yb;)a--,s=e.codePointAt(a-1)}return a>l?e.slice(l,a):""}function gR(e,n){const r={type:"text",value:mR(String(n.value))};return e.patch(n,r),e.applyData(n,r)}function yR(e,n){const r={type:"element",tagName:"hr",properties:{},children:[]};return e.patch(n,r),e.applyData(n,r)}const xR={blockquote:XD,break:FD,code:QD,delete:ZD,emphasis:KD,footnoteReference:JD,heading:WD,html:eR,imageReference:tR,image:nR,inlineCode:rR,linkReference:iR,link:lR,listItem:aR,list:sR,paragraph:uR,root:cR,strong:fR,table:dR,tableCell:pR,tableRow:hR,text:gR,thematicBreak:yR,toml:Hu,yaml:Hu,definition:Hu,footnoteDefinition:Hu};function Hu(){}const T_=-1,Tc=0,Co=1,uc=2,zm=3,Mm=4,jm=5,Om=6,A_=7,z_=8,vb=typeof self=="object"?self:globalThis,vR=(e,n)=>{const r=(a,s)=>(e.set(s,a),a),l=a=>{if(e.has(a))return e.get(a);const[s,u]=n[a];switch(s){case Tc:case T_:return r(u,a);case Co:{const f=r([],a);for(const h of u)f.push(l(h));return f}case uc:{const f=r({},a);for(const[h,d]of u)f[l(h)]=l(d);return f}case zm:return r(new Date(u),a);case Mm:{const{source:f,flags:h}=u;return r(new RegExp(f,h),a)}case jm:{const f=r(new Map,a);for(const[h,d]of u)f.set(l(h),l(d));return f}case Om:{const f=r(new Set,a);for(const h of u)f.add(l(h));return f}case A_:{const{name:f,message:h}=u;return r(new vb[f](h),a)}case z_:return r(BigInt(u),a);case"BigInt":return r(Object(BigInt(u)),a);case"ArrayBuffer":return r(new Uint8Array(u).buffer,u);case"DataView":{const{buffer:f}=new Uint8Array(u);return r(new DataView(f),u)}}return r(new vb[s](u),a)};return l},bb=e=>vR(new Map,e)(0),Yl="",{toString:bR}={},{keys:wR}=Object,go=e=>{const n=typeof e;if(n!=="object"||!e)return[Tc,n];const r=bR.call(e).slice(8,-1);switch(r){case"Array":return[Co,Yl];case"Object":return[uc,Yl];case"Date":return[zm,Yl];case"RegExp":return[Mm,Yl];case"Map":return[jm,Yl];case"Set":return[Om,Yl];case"DataView":return[Co,r]}return r.includes("Array")?[Co,r]:r.includes("Error")?[A_,r]:[uc,r]},Bu=([e,n])=>e===Tc&&(n==="function"||n==="symbol"),SR=(e,n,r,l)=>{const a=(u,f)=>{const h=l.push(u)-1;return r.set(f,h),h},s=u=>{if(r.has(u))return r.get(u);let[f,h]=go(u);switch(f){case Tc:{let m=u;switch(h){case"bigint":f=z_,m=u.toString();break;case"function":case"symbol":if(e)throw new TypeError("unable to serialize "+h);m=null;break;case"undefined":return a([T_],u)}return a([f,m],u)}case Co:{if(h){let y=u;return h==="DataView"?y=new Uint8Array(u.buffer):h==="ArrayBuffer"&&(y=new Uint8Array(u)),a([h,[...y]],u)}const m=[],p=a([f,m],u);for(const y of u)m.push(s(y));return p}case uc:{if(h)switch(h){case"BigInt":return a([h,u.toString()],u);case"Boolean":case"Number":case"String":return a([h,u.valueOf()],u)}if(n&&"toJSON"in u)return s(u.toJSON());const m=[],p=a([f,m],u);for(const y of wR(u))(e||!Bu(go(u[y])))&&m.push([s(y),s(u[y])]);return p}case zm:return a([f,u.toISOString()],u);case Mm:{const{source:m,flags:p}=u;return a([f,{source:m,flags:p}],u)}case jm:{const m=[],p=a([f,m],u);for(const[y,v]of u)(e||!(Bu(go(y))||Bu(go(v))))&&m.push([s(y),s(v)]);return p}case Om:{const m=[],p=a([f,m],u);for(const y of u)(e||!Bu(go(y)))&&m.push(s(y));return p}}const{message:d}=u;return a([f,{name:h,message:d}],u)};return s},wb=(e,{json:n,lossy:r}={})=>{const l=[];return SR(!(n||r),!!n,new Map,l)(e),l},cc=typeof structuredClone=="function"?(e,n)=>n&&("json"in n||"lossy"in n)?bb(wb(e,n)):structuredClone(e):(e,n)=>bb(wb(e,n));function _R(e,n){const r=[{type:"text",value:"↩"}];return n>1&&r.push({type:"element",tagName:"sup",properties:{},children:[{type:"text",value:String(n)}]}),r}function ER(e,n){return"Back to reference "+(e+1)+(n>1?"-"+n:"")}function NR(e){const n=typeof e.options.clobberPrefix=="string"?e.options.clobberPrefix:"user-content-",r=e.options.footnoteBackContent||_R,l=e.options.footnoteBackLabel||ER,a=e.options.footnoteLabel||"Footnotes",s=e.options.footnoteLabelTagName||"h2",u=e.options.footnoteLabelProperties||{className:["sr-only"]},f=[];let h=-1;for(;++h0&&_.push({type:"text",value:" "});let T=typeof r=="string"?r:r(h,v);typeof T=="string"&&(T={type:"text",value:T}),_.push({type:"element",tagName:"a",properties:{href:"#"+n+"fnref-"+y+(v>1?"-"+v:""),dataFootnoteBackref:"",ariaLabel:typeof l=="string"?l:l(h,v),className:["data-footnote-backref"]},children:Array.isArray(T)?T:[T]})}const w=m[m.length-1];if(w&&w.type==="element"&&w.tagName==="p"){const T=w.children[w.children.length-1];T&&T.type==="text"?T.value+=" ":w.children.push({type:"text",value:" "}),w.children.push(..._)}else m.push(..._);const S={type:"element",tagName:"li",properties:{id:n+"fn-"+y},children:e.wrap(m,!0)};e.patch(d,S),f.push(S)}if(f.length!==0)return{type:"element",tagName:"section",properties:{dataFootnotes:!0,className:["footnotes"]},children:[{type:"element",tagName:s,properties:{...cc(u),id:"footnote-label"},children:[{type:"text",value:a}]},{type:"text",value:` +`},{type:"element",tagName:"ol",properties:{},children:e.wrap(f,!0)},{type:"text",value:` +`}]}}const M_=(function(e){if(e==null)return AR;if(typeof e=="function")return Ac(e);if(typeof e=="object")return Array.isArray(e)?kR(e):CR(e);if(typeof e=="string")return TR(e);throw new Error("Expected function, string, or object as test")});function kR(e){const n=[];let r=-1;for(;++r":""))+")"})}return y;function y(){let v=j_,_,k,w;if((!n||s(h,d,m[m.length-1]||void 0))&&(v=DR(r(h,m)),v[0]===Sb))return v;if("children"in h&&h.children){const S=h;if(S.children&&v[0]!==jR)for(k=(l?S.children.length:-1)+u,w=m.concat(S);k>-1&&k0&&r.push({type:"text",value:` +`}),r}function _b(e){let n=0,r=e.charCodeAt(n);for(;r===9||r===32;)n++,r=e.charCodeAt(n);return e.slice(n)}function Eb(e,n){const r=LR(e,n),l=r.one(e,void 0),a=NR(r),s=Array.isArray(l)?{type:"root",children:l}:l||{type:"root",children:[]};return a&&s.children.push({type:"text",value:` +`},a),s}function IR(e,n){return e&&"run"in e?async function(r,l){const a=Eb(r,{file:l,...n});await e.run(a,l)}:function(r,l){return Eb(r,{file:l,...e||n})}}function Nb(e){if(e)throw e}var fp,kb;function VR(){if(kb)return fp;kb=1;var e=Object.prototype.hasOwnProperty,n=Object.prototype.toString,r=Object.defineProperty,l=Object.getOwnPropertyDescriptor,a=function(d){return typeof Array.isArray=="function"?Array.isArray(d):n.call(d)==="[object Array]"},s=function(d){if(!d||n.call(d)!=="[object Object]")return!1;var m=e.call(d,"constructor"),p=d.constructor&&d.constructor.prototype&&e.call(d.constructor.prototype,"isPrototypeOf");if(d.constructor&&!m&&!p)return!1;var y;for(y in d);return typeof y>"u"||e.call(d,y)},u=function(d,m){r&&m.name==="__proto__"?r(d,m.name,{enumerable:!0,configurable:!0,value:m.newValue,writable:!0}):d[m.name]=m.newValue},f=function(d,m){if(m==="__proto__")if(e.call(d,m)){if(l)return l(d,m).value}else return;return d[m]};return fp=function h(){var d,m,p,y,v,_,k=arguments[0],w=1,S=arguments.length,T=!1;for(typeof k=="boolean"&&(T=k,k=arguments[1]||{},w=2),(k==null||typeof k!="object"&&typeof k!="function")&&(k={});wu.length;let h;f&&u.push(a);try{h=e.apply(this,u)}catch(d){const m=d;if(f&&r)throw m;return a(m)}f||(h&&h.then&&typeof h.then=="function"?h.then(s,a):h instanceof Error?a(h):s(h))}function a(u,...f){r||(r=!0,n(u,...f))}function s(u){a(null,u)}}const Wn={basename:YR,dirname:XR,extname:FR,join:QR,sep:"/"};function YR(e,n){if(n!==void 0&&typeof n!="string")throw new TypeError('"ext" argument must be a string');Wo(e);let r=0,l=-1,a=e.length,s;if(n===void 0||n.length===0||n.length>e.length){for(;a--;)if(e.codePointAt(a)===47){if(s){r=a+1;break}}else l<0&&(s=!0,l=a+1);return l<0?"":e.slice(r,l)}if(n===e)return"";let u=-1,f=n.length-1;for(;a--;)if(e.codePointAt(a)===47){if(s){r=a+1;break}}else u<0&&(s=!0,u=a+1),f>-1&&(e.codePointAt(a)===n.codePointAt(f--)?f<0&&(l=a):(f=-1,l=u));return r===l?l=u:l<0&&(l=e.length),e.slice(r,l)}function XR(e){if(Wo(e),e.length===0)return".";let n=-1,r=e.length,l;for(;--r;)if(e.codePointAt(r)===47){if(l){n=r;break}}else l||(l=!0);return n<0?e.codePointAt(0)===47?"/":".":n===1&&e.codePointAt(0)===47?"//":e.slice(0,n)}function FR(e){Wo(e);let n=e.length,r=-1,l=0,a=-1,s=0,u;for(;n--;){const f=e.codePointAt(n);if(f===47){if(u){l=n+1;break}continue}r<0&&(u=!0,r=n+1),f===46?a<0?a=n:s!==1&&(s=1):a>-1&&(s=-1)}return a<0||r<0||s===0||s===1&&a===r-1&&a===l+1?"":e.slice(a,r)}function QR(...e){let n=-1,r;for(;++n0&&e.codePointAt(e.length-1)===47&&(r+="/"),n?"/"+r:r}function KR(e,n){let r="",l=0,a=-1,s=0,u=-1,f,h;for(;++u<=e.length;){if(u2){if(h=r.lastIndexOf("/"),h!==r.length-1){h<0?(r="",l=0):(r=r.slice(0,h),l=r.length-1-r.lastIndexOf("/")),a=u,s=0;continue}}else if(r.length>0){r="",l=0,a=u,s=0;continue}}n&&(r=r.length>0?r+"/..":"..",l=2)}else r.length>0?r+="/"+e.slice(a+1,u):r=e.slice(a+1,u),l=u-a-1;a=u,s=0}else f===46&&s>-1?s++:s=-1}return r}function Wo(e){if(typeof e!="string")throw new TypeError("Path must be a string. Received "+JSON.stringify(e))}const JR={cwd:WR};function WR(){return"/"}function Fp(e){return!!(e!==null&&typeof e=="object"&&"href"in e&&e.href&&"protocol"in e&&e.protocol&&e.auth===void 0)}function e6(e){if(typeof e=="string")e=new URL(e);else if(!Fp(e)){const n=new TypeError('The "path" argument must be of type string or an instance of URL. Received `'+e+"`");throw n.code="ERR_INVALID_ARG_TYPE",n}if(e.protocol!=="file:"){const n=new TypeError("The URL must be of scheme file");throw n.code="ERR_INVALID_URL_SCHEME",n}return t6(e)}function t6(e){if(e.hostname!==""){const l=new TypeError('File URL host must be "localhost" or empty on darwin');throw l.code="ERR_INVALID_FILE_URL_HOST",l}const n=e.pathname;let r=-1;for(;++r0){let[v,..._]=m;const k=l[y][1];Xp(k)&&Xp(v)&&(v=dp(!0,k,v)),l[y]=[d,v,..._]}}}}const l6=new Dm().freeze();function gp(e,n){if(typeof n!="function")throw new TypeError("Cannot `"+e+"` without `parser`")}function yp(e,n){if(typeof n!="function")throw new TypeError("Cannot `"+e+"` without `compiler`")}function xp(e,n){if(n)throw new Error("Cannot call `"+e+"` on a frozen processor.\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.")}function Tb(e){if(!Xp(e)||typeof e.type!="string")throw new TypeError("Expected node, got `"+e+"`")}function Ab(e,n,r){if(!r)throw new Error("`"+e+"` finished async. Use `"+n+"` instead")}function qu(e){return a6(e)?e:new D_(e)}function a6(e){return!!(e&&typeof e=="object"&&"message"in e&&"messages"in e)}function o6(e){return typeof e=="string"||s6(e)}function s6(e){return!!(e&&typeof e=="object"&&"byteLength"in e&&"byteOffset"in e)}const u6="https://github.com/remarkjs/react-markdown/blob/main/changelog.md",zb=[],Mb={allowDangerousHtml:!0},c6=/^(https?|ircs?|mailto|xmpp)$/i,f6=[{from:"astPlugins",id:"remove-buggy-html-in-markdown-parser"},{from:"allowDangerousHtml",id:"remove-buggy-html-in-markdown-parser"},{from:"allowNode",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"allowElement"},{from:"allowedTypes",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"allowedElements"},{from:"className",id:"remove-classname"},{from:"disallowedTypes",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"disallowedElements"},{from:"escapeHtml",id:"remove-buggy-html-in-markdown-parser"},{from:"includeElementIndex",id:"#remove-includeelementindex"},{from:"includeNodeIndex",id:"change-includenodeindex-to-includeelementindex"},{from:"linkTarget",id:"remove-linktarget"},{from:"plugins",id:"change-plugins-to-remarkplugins",to:"remarkPlugins"},{from:"rawSourcePos",id:"#remove-rawsourcepos"},{from:"renderers",id:"change-renderers-to-components",to:"components"},{from:"source",id:"change-source-to-children",to:"children"},{from:"sourcePos",id:"#remove-sourcepos"},{from:"transformImageUri",id:"#add-urltransform",to:"urlTransform"},{from:"transformLinkUri",id:"#add-urltransform",to:"urlTransform"}];function d6(e){const n=h6(e),r=p6(e);return m6(n.runSync(n.parse(r),r),e)}function h6(e){const n=e.rehypePlugins||zb,r=e.remarkPlugins||zb,l=e.remarkRehypeOptions?{...e.remarkRehypeOptions,...Mb}:Mb;return l6().use(YD).use(r).use(IR,l).use(n)}function p6(e){const n=e.children||"",r=new D_;return typeof n=="string"&&(r.value=n),r}function m6(e,n){const r=n.allowedElements,l=n.allowElement,a=n.components,s=n.disallowedElements,u=n.skipHtml,f=n.unwrapDisallowed,h=n.urlTransform||g6;for(const m of f6)Object.hasOwn(n,m.from)&&(""+m.from+(m.to?"use `"+m.to+"` instead":"remove it")+u6+m.id,void 0);return O_(e,d),N4(e,{Fragment:b.Fragment,components:a,ignoreInvalidStyle:!0,jsx:b.jsx,jsxs:b.jsxs,passKeys:!0,passNode:!0});function d(m,p,y){if(m.type==="raw"&&y&&typeof p=="number")return u?y.children.splice(p,1):y.children[p]={type:"text",value:m.value},p;if(m.type==="element"){let v;for(v in sp)if(Object.hasOwn(sp,v)&&Object.hasOwn(m.properties,v)){const _=m.properties[v],k=sp[v];(k===null||k.includes(m.tagName))&&(m.properties[v]=h(String(_||""),v,m))}}if(m.type==="element"){let v=r?!r.includes(m.tagName):s?s.includes(m.tagName):!1;if(!v&&l&&typeof p=="number"&&(v=!l(m,p,y)),v&&y&&typeof p=="number")return f&&m.children?y.children.splice(p,1,...m.children):y.children.splice(p,1),p}}}function g6(e){const n=e.indexOf(":"),r=e.indexOf("?"),l=e.indexOf("#"),a=e.indexOf("/");return n===-1||a!==-1&&n>a||r!==-1&&n>r||l!==-1&&n>l||c6.test(e.slice(0,n))?e:""}function y6({node:e}){const n=he(E=>E.sendGateResponse),r=he(E=>E.wsStatus),[l,a]=V.useState(null),[s,u]=V.useState(""),[f,h]=V.useState(null),[d,m]=V.useState(!1),p=e.status==="waiting",y=e.status==="completed";V.useEffect(()=>{p&&(a(null),u(""),h(null),m(!1))},[p]);const v=p&&r==="connected"&&l===null,_=(E,A)=>{if(v){if(A){a(E),h(A);return}a(E),m(!0),n(e.name,E)}},k=()=>{if(l===null||f===null)return;const E={[f]:s};m(!0),n(e.name,l,E),h(null)},w=e.option_details,S=w==null?void 0:w.find(E=>E.value===e.selected_option),T=(S==null?void 0:S.label)||e.selected_option;return b.jsxs("div",{className:"space-y-3",children:[p&&b.jsxs(b.Fragment,{children:[b.jsxs("div",{className:"flex items-center gap-2.5 px-3 py-2 rounded-lg bg-amber-500/10 border border-amber-500/30",children:[b.jsxs("span",{className:"relative flex h-2.5 w-2.5 flex-shrink-0",children:[b.jsx("span",{className:"animate-ping absolute inline-flex h-full w-full rounded-full bg-amber-400 opacity-75"}),b.jsx("span",{className:"relative inline-flex rounded-full h-2.5 w-2.5 bg-amber-500"})]}),b.jsx("span",{className:"text-xs font-semibold text-amber-400 tracking-wide",children:"Decision Required"})]}),e.prompt&&b.jsx("div",{className:"border-l-2 border-amber-500/50 pl-3 py-0.5",children:b.jsx(vp,{text:e.prompt,muted:!1})}),w&&w.length>0&&b.jsxs("div",{className:"space-y-2",children:[b.jsx("div",{className:"flex flex-col gap-1.5",children:w.map(E=>{const A=l===E.value,I=l!==null&&!A;return b.jsx("button",{disabled:!v&&!A,onClick:()=>_(E.value,E.prompt_for),className:`w-full text-left px-3 py-2.5 rounded-lg border transition-all duration-150 ${A?"border-green-500/60 bg-green-500/10":I?"border-[var(--border)] opacity-40 cursor-default":"border-[var(--border)] bg-[var(--surface)] hover:border-amber-400/60 hover:bg-amber-500/5 cursor-pointer group"}`,children:b.jsxs("div",{className:"flex items-center gap-2.5",children:[b.jsx("div",{className:"flex-shrink-0",children:A?b.jsx("div",{className:"w-4 h-4 rounded-full bg-green-500 flex items-center justify-center",children:b.jsx(Gi,{className:"w-2.5 h-2.5 text-white",strokeWidth:3})}):b.jsx("div",{className:`w-4 h-4 rounded-full border-2 transition-colors ${I?"border-[var(--border)]":"border-[var(--border)] group-hover:border-amber-400"}`})}),b.jsx("div",{className:"flex-1 min-w-0",children:b.jsx("span",{className:`text-xs font-medium ${A?"text-green-400":"text-[var(--text)]"}`,children:E.label})}),E.route&&b.jsxs("span",{className:"text-[10px] text-[var(--text-muted)] flex-shrink-0",children:["→ ",E.route]})]})},E.value)})}),d&&!f&&b.jsxs("div",{className:"flex items-center gap-2 px-1",children:[b.jsx(To,{className:"w-3 h-3 text-green-400 animate-spin"}),b.jsx("span",{className:"text-[10px] text-green-400",children:"Sending..."})]}),v&&b.jsx("p",{className:"text-[10px] text-[var(--text-muted)] px-1",children:"Select an option to continue the workflow"})]}),!w&&e.options&&e.options.length>0&&b.jsxs("div",{className:"space-y-1.5",children:[b.jsx("h4",{className:"text-[10px] uppercase tracking-wider text-[var(--text-muted)] font-semibold",children:"Options"}),b.jsx("div",{className:"flex flex-wrap gap-1.5",children:e.options.map(E=>b.jsx("span",{className:"text-[11px] px-2 py-0.5 rounded border border-[var(--border)] text-[var(--text-muted)]",children:E},E))})]}),f&&b.jsxs("div",{className:"rounded-lg border border-[var(--border)] bg-[var(--bg)] overflow-hidden",children:[b.jsx("div",{className:"px-3 py-2 border-b border-[var(--border)] bg-[var(--surface)]",children:b.jsx("h4",{className:"text-[10px] uppercase tracking-wider text-[var(--text-muted)] font-semibold",children:f})}),b.jsxs("div",{className:"p-3 space-y-2",children:[b.jsx("input",{type:"text",value:s,onChange:E=>u(E.target.value),onKeyDown:E=>E.key==="Enter"&&k(),placeholder:`Enter ${f}...`,className:"w-full text-xs px-3 py-2 rounded-lg border border-[var(--border)] bg-[var(--bg)] text-[var(--text)] outline-none focus:border-amber-400 transition-colors",autoFocus:!0}),b.jsxs("div",{className:"flex items-center justify-between",children:[b.jsx("span",{className:"text-[10px] text-[var(--text-muted)]",children:"Press Enter or click Submit"}),b.jsxs("button",{onClick:k,className:"flex items-center gap-1.5 text-xs px-3 py-1.5 rounded-lg bg-amber-500 text-white hover:bg-amber-600 transition-colors font-medium",children:[b.jsx(xN,{className:"w-3 h-3"}),"Submit"]})]})]})]})]}),y&&b.jsxs(b.Fragment,{children:[b.jsxs("div",{className:"flex items-center gap-2.5 px-3 py-2 rounded-lg bg-green-500/10 border border-green-500/30",children:[b.jsx(Gi,{className:"w-3.5 h-3.5 text-green-400 flex-shrink-0"}),b.jsx("span",{className:"text-xs font-semibold text-green-400 tracking-wide",children:"Decision Completed"})]}),e.prompt&&b.jsx("div",{className:"border-l-2 border-[var(--border)] pl-3 py-0.5",children:b.jsx(vp,{text:e.prompt,muted:!0})}),T&&b.jsxs("div",{className:"flex items-center gap-2.5 px-3 py-2.5 rounded-lg border border-green-500/30 bg-green-500/5",children:[b.jsx("div",{className:"w-4 h-4 rounded-full bg-green-500 flex items-center justify-center flex-shrink-0",children:b.jsx(Gi,{className:"w-2.5 h-2.5 text-white",strokeWidth:3})}),b.jsx("span",{className:"text-xs font-medium text-[var(--text)]",children:T}),e.route&&b.jsxs("span",{className:"ml-auto text-[10px] text-[var(--text-muted)]",children:["→ ",e.route]})]}),w&&w.length>1&&b.jsx("div",{className:"space-y-1",children:w.filter(E=>E.value!==e.selected_option).map(E=>b.jsxs("div",{className:"flex items-center gap-2.5 px-3 py-2 rounded-lg opacity-35",children:[b.jsx("div",{className:"w-4 h-4 rounded-full border-2 border-[var(--border)] flex-shrink-0"}),b.jsx("span",{className:"text-xs text-[var(--text-muted)]",children:E.label}),E.route&&b.jsxs("span",{className:"ml-auto text-[10px] text-[var(--text-muted)]",children:["→ ",E.route]})]},E.value))}),!w&&e.options&&e.options.length>0&&b.jsx("div",{className:"flex flex-wrap gap-1.5",children:e.options.map(E=>b.jsxs("span",{className:`text-[11px] px-2.5 py-1 rounded-lg border ${E===e.selected_option?"border-green-500/30 text-green-400 bg-green-500/5":"border-[var(--border)] text-[var(--text-muted)] opacity-40"}`,children:[E===e.selected_option&&"✓ ",E]},E))}),b.jsx(x6,{node:e})]}),!p&&!y&&b.jsxs(b.Fragment,{children:[b.jsxs("div",{className:"flex items-center gap-2",children:[b.jsx("span",{className:"text-xs text-[var(--text-muted)]",children:"Human Gate"}),b.jsxs("span",{className:"text-[10px] text-[var(--text-muted)] capitalize",children:["(",e.status,")"]})]}),e.prompt&&b.jsx("div",{className:"border-l-2 border-[var(--border)] pl-3 py-0.5",children:b.jsx(vp,{text:e.prompt,muted:!0})})]})]})}function vp({text:e,muted:n}){const r=n?"text-[var(--text-muted)]":"text-[var(--text)]";return b.jsx("div",{className:`gate-markdown text-xs leading-relaxed ${r}`,children:b.jsx(d6,{components:{h1:({children:l})=>b.jsx("h1",{className:"text-sm font-bold mb-2 mt-1",children:l}),h2:({children:l})=>b.jsx("h2",{className:"text-xs font-bold mb-1.5 mt-1",children:l}),h3:({children:l})=>b.jsx("h3",{className:"text-xs font-semibold mb-1 mt-1",children:l}),p:({children:l})=>b.jsx("p",{className:"mb-1.5 last:mb-0",children:l}),ul:({children:l})=>b.jsx("ul",{className:"list-disc list-inside mb-1.5 space-y-0.5",children:l}),ol:({children:l})=>b.jsx("ol",{className:"list-decimal list-inside mb-1.5 space-y-0.5",children:l}),li:({children:l})=>b.jsx("li",{children:l}),code:({children:l,className:a})=>(a==null?void 0:a.includes("language-"))?b.jsx("code",{className:"block bg-[var(--bg)] border border-[var(--border)] rounded px-2 py-1.5 font-mono text-[11px] my-1 overflow-x-auto whitespace-pre",children:l}):b.jsx("code",{className:"bg-[var(--bg)] border border-[var(--border)] rounded px-1 py-0.5 font-mono text-[11px]",children:l}),pre:({children:l})=>b.jsx("pre",{className:"bg-[var(--bg)] border border-[var(--border)] rounded-md px-2.5 py-2 font-mono text-[11px] my-1.5 overflow-x-auto",children:l}),strong:({children:l})=>b.jsx("strong",{className:"font-semibold",children:l}),em:({children:l})=>b.jsx("em",{className:"italic",children:l}),a:({href:l,children:a})=>b.jsx("a",{href:l,target:"_blank",rel:"noopener noreferrer",className:"text-blue-400 hover:text-blue-300 underline underline-offset-2",children:a}),blockquote:({children:l})=>b.jsx("blockquote",{className:"border-l-2 border-[var(--border)] pl-2.5 my-1.5 opacity-80",children:l}),hr:()=>b.jsx("hr",{className:"border-[var(--border)] my-2"})},children:e})})}function x6({node:e}){const n=[];if(e.route&&n.push({label:"Route",value:`→ ${e.route}`}),e.additional_input){const r=typeof e.additional_input=="object"?JSON.stringify(e.additional_input):e.additional_input;n.push({label:"Additional Input",value:r})}return n.length===0?null:b.jsx(nl,{items:n})}function v6({node:e}){const n=e.status,r=Ge[n]||Ge.pending,a=Ej()[e.name],s=e.type==="for_each_group",[u,f]=V.useState(!0),h=[];e.elapsed!=null&&h.push({label:"Elapsed",value:Qt(e.elapsed)}),a&&(h.push({label:"Total",value:a.total}),h.push({label:"Completed",value:a.completed}),a.failed>0&&h.push({label:"Failed",value:a.failed})),e.success_count!=null&&h.push({label:"Success",value:e.success_count}),e.failure_count!=null&&h.push({label:"Failures",value:e.failure_count});const d=e.for_each_items;return b.jsxs("div",{className:"space-y-4",children:[b.jsxs("div",{className:"flex items-center gap-2",children:[b.jsx("span",{className:"inline-flex items-center px-2 py-0.5 rounded text-[10px] font-bold uppercase tracking-wider",style:{backgroundColor:`${r}20`,color:r},children:n}),b.jsx("span",{className:"text-xs text-[var(--text-muted)]",children:s?"For-Each Group":"Parallel Group"})]}),a&&a.total>0&&b.jsxs("div",{className:"space-y-1",children:[b.jsxs("div",{className:"flex justify-between text-[10px] text-[var(--text-muted)]",children:[b.jsx("span",{children:"Progress"}),b.jsxs("span",{children:[a.completed+a.failed,"/",a.total]})]}),b.jsx("div",{className:"h-1.5 bg-[var(--bg)] rounded-full overflow-hidden",children:b.jsx("div",{className:"h-full rounded-full transition-all duration-500",style:{width:`${(a.completed+a.failed)/a.total*100}%`,background:a.failed>0?`linear-gradient(90deg, var(--completed) ${a.completed/(a.completed+a.failed)*100}%, var(--failed) 0%)`:"var(--completed)"}})})]}),b.jsx(nl,{items:h}),s&&d&&d.length>0&&b.jsxs("div",{className:"space-y-2",children:[b.jsxs("button",{onClick:()=>f(!u),className:"flex items-center gap-1.5 text-[10px] uppercase tracking-wider text-[var(--text-muted)] font-semibold hover:text-[var(--text)] transition-colors",children:[u?b.jsx(Wi,{className:"w-3 h-3"}):b.jsx(jr,{className:"w-3 h-3"}),"Items (",d.length,")"]}),u&&b.jsx("div",{className:"space-y-1",children:d.map(m=>b.jsx(w6,{item:m},`${m.key}-${m.index}`))})]})]})}const b6={running:Ge.running,completed:Ge.completed,failed:Ge.failed};function w6({item:e}){const[n,r]=V.useState(e.status==="running"),l=b6[e.status],a=!!(e.prompt||e.output!=null||e.activity&&e.activity.length>0||e.error_type),s=[];return e.elapsed!=null&&s.push({label:"Elapsed",value:Qt(e.elapsed)}),e.tokens!=null&&s.push({label:"Tokens",value:Gn(e.tokens)}),e.cost_usd!=null&&s.push({label:"Cost",value:mi(e.cost_usd)}),b.jsxs("div",{className:"rounded-lg border border-[var(--border)] bg-[var(--surface)] overflow-hidden",children:[b.jsxs("button",{onClick:()=>a&&r(!n),className:"flex items-center gap-2 w-full px-3 py-2 text-left hover:bg-[var(--node-bg)] transition-colors",disabled:!a,children:[a?n?b.jsx(Wi,{className:"w-3 h-3 text-[var(--text-muted)] flex-shrink-0"}):b.jsx(jr,{className:"w-3 h-3 text-[var(--text-muted)] flex-shrink-0"}):e.status==="running"?b.jsx(To,{className:"w-3 h-3 animate-spin flex-shrink-0",style:{color:l}}):b.jsx("span",{className:"w-2 h-2 rounded-full flex-shrink-0 ml-0.5 mr-0.5",style:{backgroundColor:l}}),b.jsx("span",{className:"text-xs font-medium text-[var(--text)] truncate flex-1 min-w-0",children:e.key}),!n&&(e.elapsed!=null||e.tokens!=null||e.cost_usd!=null)&&b.jsxs("span",{className:"flex items-center gap-2 text-[10px] text-[var(--text-muted)] flex-shrink-0",children:[e.elapsed!=null&&b.jsx("span",{children:Qt(e.elapsed)}),e.tokens!=null&&b.jsx("span",{children:Gn(e.tokens)}),e.cost_usd!=null&&b.jsx("span",{children:mi(e.cost_usd)})]}),b.jsx("span",{className:"text-[10px] font-bold uppercase tracking-wider flex-shrink-0 px-1.5 py-0.5 rounded",style:{backgroundColor:`${l}20`,color:l},children:e.status})]}),n&&a&&b.jsxs("div",{className:"px-3 py-3 space-y-3 border-t border-[var(--border)]",children:[s.length>0&&b.jsx(nl,{items:s}),e.prompt&&b.jsx(Ji,{output:e.prompt,title:"Input / Prompt",defaultExpanded:!1}),e.activity&&e.activity.length>0&&b.jsx(bm,{activity:e.activity,defaultExpanded:e.status!=="completed"}),e.output!=null&&b.jsx(Ji,{output:e.output,title:"Output",defaultExpanded:!0}),e.status==="failed"&&(e.error_type||e.error_message)&&b.jsxs("div",{className:"text-xs text-red-400",children:[e.error_type&&b.jsx("span",{className:"font-semibold",children:e.error_type}),e.error_message&&b.jsxs("span",{className:"ml-1",children:["— ",e.error_message]})]})]})]})}function S6({node:e}){const n=e.status,r=Ge[n]||Ge.pending,l=he(f=>f.navigateIntoSubworkflow),s=YS().filter(f=>f.parentAgent===e.name),u=[];return e.elapsed!=null&&u.push({label:"Elapsed",value:Qt(e.elapsed)}),e.cost_usd!=null&&u.push({label:"Cost",value:mi(e.cost_usd)}),e.tokens!=null&&u.push({label:"Tokens",value:Gn(e.tokens)}),e.iteration!=null&&e.iteration>1&&u.push({label:"Iteration",value:e.iteration}),b.jsxs("div",{className:"space-y-4",children:[b.jsxs("div",{className:"flex items-center gap-2",children:[b.jsx("span",{className:"inline-flex items-center px-2 py-0.5 rounded text-[10px] font-bold uppercase tracking-wider",style:{backgroundColor:`${r}20`,color:r},children:n}),b.jsx("span",{className:"text-xs text-[var(--text-muted)]",children:"Subworkflow Agent"})]}),b.jsx(nl,{items:u}),s.length>0&&b.jsxs("div",{className:"space-y-2",children:[b.jsxs("div",{className:"text-[10px] uppercase tracking-wider text-[var(--text-muted)] font-semibold",children:["Subworkflow Runs (",s.length,")"]}),b.jsx("div",{className:"space-y-1",children:s.map((f,h)=>b.jsx(_6,{ctx:f,onClick:()=>l(f.slotKey)},`${f.slotKey}-${f.iteration}-${h}`))})]}),n==="failed"&&(e.error_type||e.error_message)&&b.jsxs("div",{className:"text-xs text-red-400",children:[e.error_type&&b.jsx("span",{className:"font-semibold",children:e.error_type}),e.error_message&&b.jsxs("span",{className:"ml-1",children:["— ",e.error_message]})]}),s.length===0&&n==="pending"&&b.jsx("div",{className:"text-xs text-[var(--text-muted)] italic",children:"Subworkflow has not started yet."})]})}function _6({ctx:e,onClick:n}){const r=Ge[e.status]||Ge.pending;return b.jsxs("button",{onClick:n,className:"flex items-center gap-2 w-full px-3 py-2 rounded-lg border border-[var(--border)] bg-[var(--surface)] hover:bg-[var(--node-bg)] transition-colors text-left",children:[b.jsx(Qp,{className:"w-3.5 h-3.5 flex-shrink-0",style:{color:r}}),b.jsxs("div",{className:"flex flex-col min-w-0 flex-1",children:[b.jsx("span",{className:"text-xs font-medium text-[var(--text)] truncate",children:e.workflowName||e.workflowFile||"Subworkflow"}),b.jsxs("div",{className:"flex items-center gap-2 text-[10px] text-[var(--text-muted)]",children:[e.agentsTotal>0&&b.jsxs("span",{className:"flex items-center gap-0.5",children:[b.jsx(qb,{className:"w-2.5 h-2.5"}),e.agentsCompleted,"/",e.agentsTotal," agents"]}),e.totalCost>0&&b.jsxs("span",{className:"flex items-center gap-0.5",children:[b.jsx(Hb,{className:"w-2.5 h-2.5"}),mi(e.totalCost)]})]})]}),b.jsx("span",{className:"text-[10px] font-bold uppercase tracking-wider flex-shrink-0 px-1.5 py-0.5 rounded",style:{backgroundColor:`${r}20`,color:r},children:e.status}),b.jsx(jr,{className:"w-3.5 h-3.5 flex-shrink-0 text-[var(--text-muted)]"})]})}function E6(){const e=he(f=>f.selectedNode),n=tl(),r=he(f=>f.selectNode),[l,a]=V.useState(!1);V.useEffect(()=>(requestAnimationFrame(()=>a(!0)),()=>a(!1)),[e]);const s=e?n[e]:null;if(!e||!s)return b.jsxs("div",{className:"h-full flex flex-col bg-[var(--surface)]",children:[b.jsx("div",{className:"flex items-center justify-between px-4 py-3 border-b border-[var(--border)]",children:b.jsx("h2",{className:"text-sm font-semibold text-[var(--text)]",children:"Detail"})}),b.jsx("div",{className:"flex-1 flex items-center justify-center",children:b.jsx("p",{className:"text-xs text-[var(--text-muted)]",children:"Click a node to view details"})})]});const u=(()=>{switch(s.type){case"script":return Z5;case"human_gate":return y6;case"parallel_group":case"for_each_group":return v6;case"workflow":return S6;default:return F5}})();return b.jsxs("div",{className:Le("h-full flex flex-col bg-[var(--surface)] transition-all duration-150 ease-out",l?"translate-x-0 opacity-100":"translate-x-4 opacity-0"),children:[b.jsxs("div",{className:"flex items-center justify-between px-4 py-3 border-b border-[var(--border)] flex-shrink-0",children:[b.jsx("h2",{className:"text-sm font-semibold text-[var(--text)] truncate",children:e}),b.jsx("button",{onClick:()=>r(null),className:"p-1 rounded hover:bg-[var(--surface-hover)] text-[var(--text-muted)] hover:text-[var(--text)] transition-colors",title:"Close panel",children:b.jsx(Go,{className:"w-4 h-4"})})]}),b.jsx("div",{className:"flex-1 overflow-y-auto px-4 py-3",children:b.jsx(u,{node:s})})]})}function Fu(e){if(e==null)return"";if(typeof e=="string")return e;try{return JSON.stringify(e,null,2)}catch{return String(e)}}function N6(){const e=he(w=>w.eventLog),n=he(w=>w.activityLog),r=he(w=>w.workflowOutput),l=he(w=>w.workflowStatus),[a,s]=V.useState("log"),[u,f]=V.useState(!1),[h,d]=V.useState(0),[m,p]=V.useState(0),y=V.useCallback(w=>{s(w),w==="log"&&d(e.length),w==="activity"&&p(n.length)},[e.length,n.length]);V.useEffect(()=>{a==="log"&&d(e.length)},[a,e.length]),V.useEffect(()=>{a==="activity"&&p(n.length)},[a,n.length]),V.useEffect(()=>{l==="completed"&&r!=null&&s("output")},[l,r]);const v=r!=null,_=a!=="log"?Math.max(0,e.length-h):0,k=a!=="activity"?Math.max(0,n.length-m):0;return u?b.jsx("div",{className:"flex items-center bg-[var(--surface)] border-t border-[var(--border)] px-3 py-1",children:b.jsxs("button",{onClick:()=>f(!1),className:"flex items-center gap-1.5 text-xs text-[var(--text-muted)] hover:text-[var(--text)] transition-colors",children:[b.jsx(aN,{className:"w-3 h-3"}),b.jsx(Cx,{className:"w-3 h-3"}),b.jsx("span",{children:"Output"}),n.length>0&&b.jsxs("span",{className:"text-[10px] text-[var(--text-muted)]",children:["(",n.length,")"]})]})}):b.jsxs("div",{className:"flex flex-col h-full bg-[var(--surface)] border-t border-[var(--border)]",children:[b.jsxs("div",{className:"flex items-center justify-between px-2 flex-shrink-0 border-b border-[var(--border)]",children:[b.jsxs("div",{className:"flex items-center gap-0.5",children:[b.jsx(bp,{active:a==="log",onClick:()=>y("log"),icon:b.jsx(Cx,{className:"w-3 h-3"}),label:"Log",count:e.length,unread:_}),b.jsx(bp,{active:a==="activity",onClick:()=>y("activity"),icon:b.jsx(Lb,{className:"w-3 h-3"}),label:"Activity",count:n.length,unread:k}),b.jsx(bp,{active:a==="output",onClick:()=>y("output"),icon:b.jsx(dN,{className:"w-3 h-3"}),label:"Output",badge:v?l==="failed"?"error":"success":void 0})]}),b.jsx("button",{onClick:()=>f(!0),className:"p-1 rounded text-[var(--text-muted)] hover:text-[var(--text)] hover:bg-[var(--surface-hover)] transition-colors",title:"Collapse panel",children:b.jsx(Wi,{className:"w-3.5 h-3.5"})})]}),b.jsx("div",{className:"flex-1 overflow-hidden",children:a==="activity"?b.jsx(k6,{entries:n}):a==="log"?b.jsx(C6,{entries:e}):b.jsx(T6,{output:r,status:l})})]})}function bp({active:e,onClick:n,icon:r,label:l,count:a,badge:s,unread:u}){return b.jsxs("button",{onClick:n,className:Le("relative flex items-center gap-1.5 px-3 py-1.5 text-xs transition-colors border-b-2 -mb-px",e?"text-[var(--text)] border-[var(--accent)]":"text-[var(--text-muted)] border-transparent hover:text-[var(--text-secondary)]"),children:[r,b.jsx("span",{children:l}),a!=null&&a>0&&b.jsx("span",{className:"text-[10px] text-[var(--text-muted)] tabular-nums",children:a}),s&&b.jsx("span",{className:Le("w-1.5 h-1.5 rounded-full",s==="success"?"bg-[var(--completed)]":"bg-[var(--failed)]")}),!e&&u!=null&&u>0&&b.jsx("span",{className:"absolute -top-0.5 -right-0.5 flex h-3.5 min-w-[14px] items-center justify-center rounded-full bg-[var(--accent)] px-1",children:b.jsx("span",{className:"text-[8px] font-bold text-white leading-none tabular-nums",children:u>99?"99+":u})})]})}const jb={reasoning:{color:"text-indigo-400/70",label:"THINK",labelColor:"text-indigo-500"},"tool-start":{color:"text-blue-400",label:"TOOL →",labelColor:"text-blue-500"},"tool-complete":{color:"text-green-400",label:"TOOL ←",labelColor:"text-green-600"},turn:{color:"text-amber-400",label:"STEP",labelColor:"text-amber-500"},message:{color:"text-[var(--text)]",label:"MSG",labelColor:"text-[var(--text-muted)]"},prompt:{color:"text-cyan-400/70",label:"PROMPT",labelColor:"text-cyan-600"}};function k6({entries:e}){const n=V.useRef(null),r=V.useRef(!0),l=he(h=>h.selectNode),[a,s]=V.useState(""),u=V.useCallback(()=>{const h=n.current;if(!h)return;const d=h.scrollHeight-h.scrollTop-h.clientHeight<30;r.current=d},[]),f=V.useMemo(()=>{if(!a)return e;const h=a.toLowerCase();return e.filter(d=>d.source.toLowerCase().includes(h)||Fu(d.message).toLowerCase().includes(h))},[e,a]);return V.useEffect(()=>{n.current&&r.current&&(n.current.scrollTop=n.current.scrollHeight)},[f.length]),e.length===0?b.jsx("div",{className:"h-full flex items-center justify-center",children:b.jsx("p",{className:"text-xs text-[var(--text-muted)]",children:"Waiting for agent activity…"})}):b.jsxs("div",{className:"h-full flex flex-col",children:[b.jsxs("div",{className:"flex items-center gap-2 px-3 py-1.5 border-b border-[var(--border-subtle)] flex-shrink-0",children:[b.jsx(yN,{className:"w-3 h-3 text-[var(--text-muted)] flex-shrink-0"}),b.jsx("input",{type:"text",value:a,onChange:h=>s(h.target.value),placeholder:"Filter by agent or message…",className:"flex-1 bg-transparent text-[11px] text-[var(--text)] placeholder:text-[var(--text-muted)] outline-none min-w-0"}),a&&b.jsxs(b.Fragment,{children:[b.jsxs("span",{className:"text-[10px] text-[var(--text-muted)] tabular-nums flex-shrink-0",children:[f.length," of ",e.length]}),b.jsx("button",{onClick:()=>s(""),className:"text-[var(--text-muted)] hover:text-[var(--text)] transition-colors flex-shrink-0",title:"Clear filter",children:b.jsx(Go,{className:"w-3 h-3"})})]})]}),b.jsxs("div",{ref:n,onScroll:u,className:"flex-1 overflow-y-auto font-mono text-[11px] leading-[1.6] px-3 py-2",children:[f.map((h,d)=>{const m=jb[h.type]||jb.message,p=R_(h.timestamp);return b.jsxs("div",{className:"group",children:[b.jsxs("div",{className:"flex gap-1.5 hover:bg-[var(--surface-hover)] rounded px-1 -mx-1",children:[b.jsx("span",{className:"text-[var(--text-muted)] flex-shrink-0 select-none tabular-nums",children:p}),b.jsx("span",{className:Le("flex-shrink-0 w-[5ch] text-[10px] font-semibold tabular-nums select-none",m.labelColor),children:m.label}),b.jsx("button",{onClick:()=>l(h.source),className:"text-[var(--text-secondary)] flex-shrink-0 min-w-[8ch] max-w-[16ch] truncate hover:text-[var(--accent)] hover:underline transition-colors text-left",title:`Select ${h.source}`,children:h.source}),b.jsx("span",{className:Le("break-words min-w-0",m.color,h.type==="reasoning"&&"italic"),children:Fu(h.message)})]}),h.detail&&b.jsx("div",{className:"ml-[calc(7ch+5ch+8ch+1rem)] px-2 py-1 my-0.5 bg-[var(--bg)] rounded text-[10px] text-[var(--text-muted)] whitespace-pre-wrap break-words max-h-24 overflow-y-auto border-l-2 border-[var(--border)]",children:Fu(h.detail)})]},d)}),a&&f.length===0&&b.jsx("div",{className:"flex items-center justify-center py-4",children:b.jsxs("p",{className:"text-xs text-[var(--text-muted)]",children:['No matches for "',a,'"']})})]})]})}const Ob={info:{color:"text-blue-400",icon:"›"},success:{color:"text-green-400",icon:"✓"},error:{color:"text-red-400",icon:"✗"},warning:{color:"text-amber-400",icon:"⚠"},debug:{color:"text-[var(--text-muted)]",icon:"·"}};function C6({entries:e}){const n=V.useRef(null),r=V.useRef(!0),l=he(s=>s.selectNode),a=V.useCallback(()=>{const s=n.current;if(!s)return;const u=s.scrollHeight-s.scrollTop-s.clientHeight<30;r.current=u},[]);return V.useEffect(()=>{n.current&&r.current&&(n.current.scrollTop=n.current.scrollHeight)},[e.length]),e.length===0?b.jsx("div",{className:"h-full flex items-center justify-center",children:b.jsx("p",{className:"text-xs text-[var(--text-muted)]",children:"Waiting for events…"})}):b.jsx("div",{ref:n,onScroll:a,className:"h-full overflow-y-auto font-mono text-[11px] leading-[1.6] px-3 py-2",children:e.map((s,u)=>{const f=Ob[s.level]||Ob.info,h=R_(s.timestamp);return b.jsxs("div",{className:"flex gap-2 hover:bg-[var(--surface-hover)] rounded px-1 -mx-1",children:[b.jsx("span",{className:"text-[var(--text-muted)] flex-shrink-0 select-none tabular-nums",children:h}),b.jsx("span",{className:Le("flex-shrink-0 w-3 text-center select-none",f.color),children:f.icon}),b.jsx("button",{onClick:()=>l(s.source),className:"text-[var(--text-secondary)] flex-shrink-0 min-w-[8ch] max-w-[16ch] truncate hover:text-[var(--accent)] hover:underline transition-colors text-left",title:`Select ${s.source}`,children:s.source}),b.jsx("span",{className:Le("break-words",s.level==="error"?"text-red-400":s.level==="success"?"text-green-400":"text-[var(--text)]"),children:Fu(s.message)})]},u)})})}function R_(e){const n=new Date(e*1e3),r=n.getHours().toString().padStart(2,"0"),l=n.getMinutes().toString().padStart(2,"0"),a=n.getSeconds().toString().padStart(2,"0");return`${r}:${l}:${a}`}function T6({output:e,status:n}){const[r,l]=V.useState(!1),a=Ib(e),s=async()=>{a&&(await navigator.clipboard.writeText(a),l(!0),setTimeout(()=>l(!1),2e3))};return e==null?b.jsx("div",{className:"h-full flex items-center justify-center",children:b.jsx("p",{className:"text-xs text-[var(--text-muted)]",children:n==="running"?"Workflow running — output will appear when complete…":n==="failed"?"Workflow failed — no output produced":"No output yet"})}):b.jsxs("div",{className:"h-full flex flex-col",children:[b.jsxs("div",{className:"flex items-center justify-between px-3 py-1 border-b border-[var(--border-subtle)] flex-shrink-0",children:[b.jsx("span",{className:"text-[10px] text-[var(--text-muted)] uppercase tracking-wider font-semibold",children:"Workflow Result"}),b.jsx("button",{onClick:s,className:"flex items-center gap-1 text-[10px] text-[var(--text-muted)] hover:text-[var(--text)] transition-colors px-1.5 py-0.5 rounded hover:bg-[var(--surface-hover)]",title:"Copy to clipboard",children:r?b.jsxs(b.Fragment,{children:[b.jsx(Gi,{className:"w-3 h-3 text-[var(--completed)]"}),b.jsx("span",{className:"text-[var(--completed)]",children:"Copied"})]}):b.jsxs(b.Fragment,{children:[b.jsx(Bb,{className:"w-3 h-3"}),b.jsx("span",{children:"Copy"})]})})]}),b.jsx("div",{className:"flex-1 overflow-auto px-3 py-2",children:b.jsx("pre",{className:"font-mono text-[11px] leading-relaxed text-[var(--text)] whitespace-pre-wrap break-words",children:typeof e=="object"?b.jsx(A6,{text:a}):a})})]})}function A6({text:e}){const n=e.split(/("(?:[^"\\]|\\.)*")/g);return b.jsx(b.Fragment,{children:n.map((r,l)=>{if(l%2===1){const s=n.slice(l+1).join(""),u=/^\s*:/.test(s);return b.jsx("span",{className:u?"text-blue-400":"text-green-400",children:r},l)}const a=r.replace(/\b(true|false|null)\b|(-?\d+\.?\d*(?:e[+-]?\d+)?)/gi,(s,u,f)=>u?`${s}`:f?`${s}`:s);return b.jsx("span",{dangerouslySetInnerHTML:{__html:a}},l)})})}function z6(){const e=he(n=>n.selectedNode);return b.jsxs(Sp,{direction:"vertical",className:"flex-1 overflow-hidden",children:[b.jsx(yo,{defaultSize:70,minSize:30,children:b.jsxs(Sp,{direction:"horizontal",className:"h-full",children:[b.jsx(yo,{defaultSize:e?65:100,minSize:40,children:b.jsx(I5,{})}),e&&b.jsxs(b.Fragment,{children:[b.jsx(_p,{className:"w-[3px] bg-[var(--border)] hover:bg-[var(--text-muted)] transition-colors cursor-col-resize"}),b.jsx(yo,{defaultSize:35,minSize:20,maxSize:60,children:b.jsx(E6,{})})]})]})}),b.jsx(_p,{className:"h-[3px] bg-[var(--border)] hover:bg-[var(--text-muted)] transition-colors cursor-row-resize"}),b.jsx(yo,{defaultSize:30,minSize:5,maxSize:70,collapsible:!0,children:b.jsx(N6,{})})]})}const M6=3e4;function j6(){const e=he(p=>p.processEvent),n=he(p=>p.replayState),r=he(p=>p.setWsStatus),l=he(p=>p.setWsSend),a=V.useRef(null),s=V.useRef(1e3),u=V.useRef(null),f=V.useRef(null),h=V.useRef(()=>{}),d=V.useCallback(()=>{r("reconnecting"),u.current=setTimeout(()=>{s.current=Math.min(s.current*2,M6),h.current()},s.current)},[r]),m=V.useCallback(()=>{r("connecting"),f.current&&f.current.abort();const p=new AbortController;f.current=p,fetch("/api/state",{signal:p.signal}).then(y=>y.json()).then(y=>{y&&y.length>0&&n(y);const _=`${window.location.protocol==="https:"?"wss:":"ws:"}//${window.location.host}/ws`;try{const k=new WebSocket(_);a.current=k,k.onopen=()=>{s.current=1e3,r("connected"),l(w=>{k.readyState===WebSocket.OPEN&&k.send(JSON.stringify(w))})},k.onmessage=w=>{try{const S=JSON.parse(w.data);e(S)}catch(S){console.error("Failed to parse WebSocket message:",S)}},k.onclose=()=>{r("disconnected"),l(null),a.current=null,d()},k.onerror=()=>{}}catch{d()}}).catch(y=>{p.signal.aborted||(console.error("Failed to fetch state:",y),d())})},[e,n,r,l,d]);h.current=m,V.useEffect(()=>(m(),()=>{f.current&&f.current.abort(),u.current&&clearTimeout(u.current),a.current&&a.current.close(),l(null)}),[m,l])}function O6(){const e=he(d=>d.setReplayMode),n=he(d=>d.setWsStatus),r=he(d=>d.replayPlaying),l=he(d=>d.replayPosition),a=he(d=>d.replayTotalEvents),s=he(d=>d.replaySpeed),u=he(d=>d.replayEvents),f=he(d=>d.setReplayPosition);V.useEffect(()=>{n("connecting"),fetch("/api/state").then(d=>d.json()).then(d=>{e(d),n("connected")}).catch(d=>{console.error("Failed to load replay events:",d),n("disconnected")})},[e,n]);const h=V.useRef(null);V.useEffect(()=>{if(!r||l>=a){h.current&&clearTimeout(h.current),r&&l>=a&&he.getState().setReplayPlaying(!1);return}const d=u[l-1],m=u[l];let p=100;if(d&&m){const y=(m.timestamp-d.timestamp)*1e3;p=Math.max(16,Math.min(y/s,2e3))}return h.current=setTimeout(()=>{f(l+1)},p),()=>{h.current&&clearTimeout(h.current)}},[r,l,a,s,u,f])}function D6(){return j6(),null}function R6(){return O6(),null}function L6(){const[e,n]=V.useState(null),r=he(s=>s.replayMode),l=he(s=>s.selectNode),a=he(s=>s.workflowName);return V.useEffect(()=>{fetch("/api/replay/info").then(s=>{s.ok?n(!0):n(!1)}).catch(()=>n(!1))},[]),V.useEffect(()=>{document.title=a?`Conductor — ${a}`:"Conductor Dashboard"},[a]),V.useEffect(()=>{const s=u=>{u.key==="Escape"&&l(null)};return window.addEventListener("keydown",s),()=>window.removeEventListener("keydown",s)},[l]),e===null?null:b.jsxs("div",{className:"h-full flex flex-col bg-[var(--bg)]",children:[e?b.jsx(R6,{}):b.jsx(D6,{}),b.jsx(DN,{}),b.jsx(RN,{}),b.jsx(z6,{}),r?b.jsx(UN,{}):b.jsx(HN,{})]})}W2.createRoot(document.getElementById("root")).render(b.jsx(V.StrictMode,{children:b.jsx(L6,{})})); diff --git a/src/conductor/web/static/assets/index-oGqcFl1O.css b/src/conductor/web/static/assets/index-oGqcFl1O.css new file mode 100644 index 0000000..a70ca99 --- /dev/null +++ b/src/conductor/web/static/assets/index-oGqcFl1O.css @@ -0,0 +1 @@ +/*! tailwindcss v4.2.1 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-950:oklch(25.8% .092 26.042);--color-amber-300:oklch(87.9% .169 91.605);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-500:oklch(76.9% .188 70.08);--color-amber-600:oklch(66.6% .179 58.318);--color-amber-950:oklch(27.9% .077 45.635);--color-green-300:oklch(87.1% .15 154.449);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--color-green-950:oklch(26.6% .065 152.934);--color-emerald-400:oklch(76.5% .177 163.223);--color-emerald-500:oklch(69.6% .17 162.48);--color-cyan-400:oklch(78.9% .154 211.53);--color-cyan-600:oklch(60.9% .126 221.723);--color-sky-400:oklch(74.6% .16 232.661);--color-blue-300:oklch(80.9% .105 251.813);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-indigo-400:oklch(67.3% .182 276.935);--color-indigo-500:oklch(58.5% .233 277.117);--color-purple-400:oklch(71.4% .203 305.504);--color-black:#000;--color-white:#fff;--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-wide:.025em;--tracking-wider:.05em;--leading-tight:1.25;--leading-relaxed:1.625;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--ease-out:cubic-bezier(0, 0, .2, 1);--animate-spin:spin 1s linear infinite;--animate-ping:ping 1s cubic-bezier(0, 0, .2, 1) infinite;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--blur-sm:8px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.inset-0{inset:calc(var(--spacing) * 0)}.start{inset-inline-start:var(--spacing)}.end{inset-inline-end:var(--spacing)}.-top-0\.5{top:calc(var(--spacing) * -.5)}.top-3{top:calc(var(--spacing) * 3)}.top-full{top:100%}.-right-0\.5{right:calc(var(--spacing) * -.5)}.right-0{right:calc(var(--spacing) * 0)}.bottom-0{bottom:calc(var(--spacing) * 0)}.bottom-full{bottom:100%}.left-0{left:calc(var(--spacing) * 0)}.left-1\/2{left:50%}.z-10{z-index:10}.z-20{z-index:20}.z-50{z-index:50}.-mx-1{margin-inline:calc(var(--spacing) * -1)}.my-0\.5{margin-block:calc(var(--spacing) * .5)}.my-1{margin-block:calc(var(--spacing) * 1)}.my-1\.5{margin-block:calc(var(--spacing) * 1.5)}.my-2{margin-block:calc(var(--spacing) * 2)}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:calc(var(--spacing) * 1)}.mr-0\.5{margin-right:calc(var(--spacing) * .5)}.mr-1{margin-right:calc(var(--spacing) * 1)}.-mb-px{margin-bottom:-1px}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-1\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.ml-0\.5{margin-left:calc(var(--spacing) * .5)}.ml-1{margin-left:calc(var(--spacing) * 1)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-\[4\.25rem\]{margin-left:4.25rem}.ml-\[calc\(7ch\+5ch\+8ch\+1rem\)\]{margin-left:calc(20ch + 1rem)}.ml-auto{margin-left:auto}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.\!h-2{height:calc(var(--spacing) * 2)!important}.h-0{height:calc(var(--spacing) * 0)}.h-1{height:calc(var(--spacing) * 1)}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-2{height:calc(var(--spacing) * 2)}.h-2\.5{height:calc(var(--spacing) * 2.5)}.h-3{height:calc(var(--spacing) * 3)}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-8{height:calc(var(--spacing) * 8)}.h-11{height:calc(var(--spacing) * 11)}.h-\[2px\]{height:2px}.h-\[3px\]{height:3px}.h-\[90\%\]{height:90%}.h-full{height:100%}.h-px{height:1px}.max-h-24{max-height:calc(var(--spacing) * 24)}.max-h-\[400px\]{max-height:400px}.\!w-2{width:calc(var(--spacing) * 2)!important}.w-0{width:calc(var(--spacing) * 0)}.w-1\.5{width:calc(var(--spacing) * 1.5)}.w-2{width:calc(var(--spacing) * 2)}.w-2\.5{width:calc(var(--spacing) * 2.5)}.w-3{width:calc(var(--spacing) * 3)}.w-3\.5{width:calc(var(--spacing) * 3.5)}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-6{width:calc(var(--spacing) * 6)}.w-8{width:calc(var(--spacing) * 8)}.w-11{width:calc(var(--spacing) * 11)}.w-12{width:calc(var(--spacing) * 12)}.w-\[3px\]{width:3px}.w-\[5ch\]{width:5ch}.w-\[80\%\]{width:80%}.w-full{width:100%}.max-w-\[16ch\]{max-width:16ch}.max-w-\[140px\]{max-width:140px}.max-w-\[220px\]{max-width:220px}.max-w-\[240px\]{max-width:240px}.max-w-\[260px\]{max-width:260px}.max-w-\[560px\]{max-width:560px}.min-w-0{min-width:calc(var(--spacing) * 0)}.min-w-\[8ch\]{min-width:8ch}.min-w-\[14px\]{min-width:14px}.min-w-\[140px\]{min-width:140px}.min-w-\[180px\]{min-width:180px}.flex-1{flex:1}.flex-shrink-0{flex-shrink:0}.-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-0{--tw-translate-x:calc(var(--spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-4{--tw-translate-x:calc(var(--spacing) * 4);translate:var(--tw-translate-x) var(--tw-translate-y)}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-\[banner-in_200ms_ease-out\]{animation:.2s ease-out banner-in}.animate-\[context-pulse_2s_ease-in-out_infinite\]{animation:2s ease-in-out infinite context-pulse}.animate-\[tooltip-in_150ms_ease-out\]{animation:.15s ease-out tooltip-in}.animate-ping{animation:var(--animate-ping)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-col-resize{cursor:col-resize}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.cursor-row-resize{cursor:row-resize}.list-inside{list-style-position:inside}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-\[auto_1fr\]{grid-template-columns:auto 1fr}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:calc(var(--spacing) * 1)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * .5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * .5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}.gap-x-3{column-gap:calc(var(--spacing) * 3)}.gap-y-0\.5{row-gap:calc(var(--spacing) * .5)}.gap-y-1\.5{row-gap:calc(var(--spacing) * 1.5)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t-lg{border-top-left-radius:var(--radius-lg);border-top-right-radius:var(--radius-lg)}.rounded-b-lg{border-bottom-right-radius:var(--radius-lg);border-bottom-left-radius:var(--radius-lg)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-x-\[6px\]{border-inline-style:var(--tw-border-style);border-inline-width:6px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-t-\[6px\]{border-top-style:var(--tw-border-style);border-top-width:6px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.\!border-none{--tw-border-style:none!important;border-style:none!important}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-\[var\(--accent\)\]{border-color:var(--accent)}.border-\[var\(--border\)\]{border-color:var(--border)}.border-\[var\(--border-subtle\)\]{border-color:var(--border-subtle)}.border-amber-500\/30{border-color:#f99c004d}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/30{border-color:color-mix(in oklab,var(--color-amber-500) 30%,transparent)}}.border-amber-500\/40{border-color:#f99c0066}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/40{border-color:color-mix(in oklab,var(--color-amber-500) 40%,transparent)}}.border-amber-500\/50{border-color:#f99c0080}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/50{border-color:color-mix(in oklab,var(--color-amber-500) 50%,transparent)}}.border-emerald-500\/20{border-color:#00bb7f33}@supports (color:color-mix(in lab,red,red)){.border-emerald-500\/20{border-color:color-mix(in oklab,var(--color-emerald-500) 20%,transparent)}}.border-green-500\/30{border-color:#00c7584d}@supports (color:color-mix(in lab,red,red)){.border-green-500\/30{border-color:color-mix(in oklab,var(--color-green-500) 30%,transparent)}}.border-green-500\/40{border-color:#00c75866}@supports (color:color-mix(in lab,red,red)){.border-green-500\/40{border-color:color-mix(in oklab,var(--color-green-500) 40%,transparent)}}.border-green-500\/60{border-color:#00c75899}@supports (color:color-mix(in lab,red,red)){.border-green-500\/60{border-color:color-mix(in oklab,var(--color-green-500) 60%,transparent)}}.border-red-500\/20{border-color:#fb2c3633}@supports (color:color-mix(in lab,red,red)){.border-red-500\/20{border-color:color-mix(in oklab,var(--color-red-500) 20%,transparent)}}.border-red-500\/30{border-color:#fb2c364d}@supports (color:color-mix(in lab,red,red)){.border-red-500\/30{border-color:color-mix(in oklab,var(--color-red-500) 30%,transparent)}}.border-red-500\/40{border-color:#fb2c3666}@supports (color:color-mix(in lab,red,red)){.border-red-500\/40{border-color:color-mix(in oklab,var(--color-red-500) 40%,transparent)}}.border-transparent{border-color:#0000}.border-x-transparent{border-inline-color:#0000}.border-t-\[var\(--border\)\]{border-top-color:var(--border)}.\!bg-\[var\(--border\)\]{background-color:var(--border)!important}.bg-\[\#a78bfa\]{background-color:#a78bfa}.bg-\[var\(--accent\)\]{background-color:var(--accent)}.bg-\[var\(--bg\)\]{background-color:var(--bg)}.bg-\[var\(--border\)\]{background-color:var(--border)}.bg-\[var\(--completed\)\]{background-color:var(--completed)}.bg-\[var\(--failed\)\]{background-color:var(--failed)}.bg-\[var\(--node-bg\)\]{background-color:var(--node-bg)}.bg-\[var\(--pending\)\]{background-color:var(--pending)}.bg-\[var\(--running\)\]{background-color:var(--running)}.bg-\[var\(--surface\)\],.bg-\[var\(--surface\)\]\/80{background-color:var(--surface)}@supports (color:color-mix(in lab,red,red)){.bg-\[var\(--surface\)\]\/80{background-color:color-mix(in oklab,var(--surface) 80%,transparent)}}.bg-\[var\(--surface-hover\)\]{background-color:var(--surface-hover)}.bg-\[var\(--surface-raised\)\]{background-color:var(--surface-raised)}.bg-amber-400{background-color:var(--color-amber-400)}.bg-amber-500{background-color:var(--color-amber-500)}.bg-amber-500\/10{background-color:#f99c001a}@supports (color:color-mix(in lab,red,red)){.bg-amber-500\/10{background-color:color-mix(in oklab,var(--color-amber-500) 10%,transparent)}}.bg-amber-500\/20{background-color:#f99c0033}@supports (color:color-mix(in lab,red,red)){.bg-amber-500\/20{background-color:color-mix(in oklab,var(--color-amber-500) 20%,transparent)}}.bg-amber-950\/90{background-color:#461901e6}@supports (color:color-mix(in lab,red,red)){.bg-amber-950\/90{background-color:color-mix(in oklab,var(--color-amber-950) 90%,transparent)}}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab,red,red)){.bg-black\/50{background-color:color-mix(in oklab,var(--color-black) 50%,transparent)}}.bg-emerald-500\/10{background-color:#00bb7f1a}@supports (color:color-mix(in lab,red,red)){.bg-emerald-500\/10{background-color:color-mix(in oklab,var(--color-emerald-500) 10%,transparent)}}.bg-green-500{background-color:var(--color-green-500)}.bg-green-500\/5{background-color:#00c7580d}@supports (color:color-mix(in lab,red,red)){.bg-green-500\/5{background-color:color-mix(in oklab,var(--color-green-500) 5%,transparent)}}.bg-green-500\/10{background-color:#00c7581a}@supports (color:color-mix(in lab,red,red)){.bg-green-500\/10{background-color:color-mix(in oklab,var(--color-green-500) 10%,transparent)}}.bg-green-950\/90{background-color:#032e15e6}@supports (color:color-mix(in lab,red,red)){.bg-green-950\/90{background-color:color-mix(in oklab,var(--color-green-950) 90%,transparent)}}.bg-red-500\/10{background-color:#fb2c361a}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/10{background-color:color-mix(in oklab,var(--color-red-500) 10%,transparent)}}.bg-red-500\/20{background-color:#fb2c3633}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/20{background-color:color-mix(in oklab,var(--color-red-500) 20%,transparent)}}.bg-red-950\/50{background-color:#46080980}@supports (color:color-mix(in lab,red,red)){.bg-red-950\/50{background-color:color-mix(in oklab,var(--color-red-950) 50%,transparent)}}.bg-red-950\/90{background-color:#460809e6}@supports (color:color-mix(in lab,red,red)){.bg-red-950\/90{background-color:color-mix(in oklab,var(--color-red-950) 90%,transparent)}}.bg-transparent{background-color:#0000}.p-0{padding:calc(var(--spacing) * 0)}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:calc(var(--spacing) * 1)}.p-3{padding:calc(var(--spacing) * 3)}.px-1{padding-inline:calc(var(--spacing) * 1)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.pt-px{padding-top:1px}.pl-2\.5{padding-left:calc(var(--spacing) * 2.5)}.pl-3{padding-left:calc(var(--spacing) * 3)}.text-center{text-align:center}.text-left{text-align:left}.font-mono{font-family:var(--font-mono)}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[8px\]{font-size:8px}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[13px\]{font-size:13px}.leading-6{--tw-leading:calc(var(--spacing) * 6);line-height:calc(var(--spacing) * 6)}.leading-\[1\.6\]{--tw-leading:1.6;line-height:1.6}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.break-words{overflow-wrap:break-word}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[var\(--accent\)\]{color:var(--accent)}.text-\[var\(--completed\)\]{color:var(--completed)}.text-\[var\(--failed\)\]{color:var(--failed)}.text-\[var\(--running\)\]{color:var(--running)}.text-\[var\(--text\)\]{color:var(--text)}.text-\[var\(--text-muted\)\]{color:var(--text-muted)}.text-\[var\(--text-secondary\)\]{color:var(--text-secondary)}.text-\[var\(--waiting\)\]{color:var(--waiting)}.text-amber-300{color:var(--color-amber-300)}.text-amber-400{color:var(--color-amber-400)}.text-amber-400\/80{color:#fcbb00cc}@supports (color:color-mix(in lab,red,red)){.text-amber-400\/80{color:color-mix(in oklab,var(--color-amber-400) 80%,transparent)}}.text-amber-500{color:var(--color-amber-500)}.text-blue-400{color:var(--color-blue-400)}.text-blue-500{color:var(--color-blue-500)}.text-cyan-400\/70{color:#00d2efb3}@supports (color:color-mix(in lab,red,red)){.text-cyan-400\/70{color:color-mix(in oklab,var(--color-cyan-400) 70%,transparent)}}.text-cyan-600{color:var(--color-cyan-600)}.text-emerald-400{color:var(--color-emerald-400)}.text-emerald-500\/70{color:#00bb7fb3}@supports (color:color-mix(in lab,red,red)){.text-emerald-500\/70{color:color-mix(in oklab,var(--color-emerald-500) 70%,transparent)}}.text-green-300{color:var(--color-green-300)}.text-green-400{color:var(--color-green-400)}.text-green-400\/80{color:#05df72cc}@supports (color:color-mix(in lab,red,red)){.text-green-400\/80{color:color-mix(in oklab,var(--color-green-400) 80%,transparent)}}.text-green-500\/60{color:#00c75899}@supports (color:color-mix(in lab,red,red)){.text-green-500\/60{color:color-mix(in oklab,var(--color-green-500) 60%,transparent)}}.text-green-600{color:var(--color-green-600)}.text-indigo-400\/70{color:#7d87ffb3}@supports (color:color-mix(in lab,red,red)){.text-indigo-400\/70{color:color-mix(in oklab,var(--color-indigo-400) 70%,transparent)}}.text-indigo-500{color:var(--color-indigo-500)}.text-purple-400{color:var(--color-purple-400)}.text-red-300{color:var(--color-red-300)}.text-red-400{color:var(--color-red-400)}.text-red-400\/50{color:#ff656880}@supports (color:color-mix(in lab,red,red)){.text-red-400\/50{color:color-mix(in oklab,var(--color-red-400) 50%,transparent)}}.text-red-400\/60{color:#ff656899}@supports (color:color-mix(in lab,red,red)){.text-red-400\/60{color:color-mix(in oklab,var(--color-red-400) 60%,transparent)}}.text-red-400\/80{color:#ff6568cc}@supports (color:color-mix(in lab,red,red)){.text-red-400\/80{color:color-mix(in oklab,var(--color-red-400) 80%,transparent)}}.text-sky-400{color:var(--color-sky-400)}.text-white{color:var(--color-white)}.capitalize{text-transform:capitalize}.uppercase{text-transform:uppercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.underline{text-decoration-line:underline}.underline-offset-2{text-underline-offset:2px}.opacity-0{opacity:0}.opacity-20{opacity:.2}.opacity-35{opacity:.35}.opacity-40{opacity:.4}.opacity-75{opacity:.75}.opacity-80{opacity:.8}.opacity-100{opacity:1}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_12px_rgba\(167\,139\,250\,0\.4\)\]{--tw-shadow:0 0 12px var(--tw-shadow-color,#a78bfa66);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_12px_var\(--completed-muted\)\]{--tw-shadow:0 0 12px var(--tw-shadow-color,var(--completed-muted));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_12px_var\(--running-glow\)\]{--tw-shadow:0 0 12px var(--tw-shadow-color,var(--running-glow));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_12px_var\(--waiting-muted\)\]{--tw-shadow:0 0 12px var(--tw-shadow-color,var(--waiting-muted));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_16px_var\(--completed-muted\)\]{--tw-shadow:0 0 16px var(--tw-shadow-color,var(--completed-muted));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_16px_var\(--failed-muted\)\]{--tw-shadow:0 0 16px var(--tw-shadow-color,var(--failed-muted));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_16px_var\(--running-glow\)\]{--tw-shadow:0 0 16px var(--tw-shadow-color,var(--running-glow));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-amber-500\/10{--tw-shadow-color:#f99c001a}@supports (color:color-mix(in lab,red,red)){.shadow-amber-500\/10{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-amber-500) 10%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-green-500\/10{--tw-shadow-color:#00c7581a}@supports (color:color-mix(in lab,red,red)){.shadow-green-500\/10{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-green-500) 10%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-red-500\/10{--tw-shadow-color:#fb2c361a}@supports (color:color-mix(in lab,red,red)){.shadow-red-500\/10{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-red-500) 10%, transparent) var(--tw-shadow-alpha), transparent)}}.ring-\[var\(--accent\)\]{--tw-ring-color:var(--accent)}.ring-offset-1{--tw-ring-offset-width:1px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.ring-offset-\[var\(--bg\)\]{--tw-ring-offset-color:var(--bg)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-500{--tw-duration:.5s;transition-duration:.5s}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}@media(hover:hover){.group-hover\:border-amber-400:is(:where(.group):hover *){border-color:var(--color-amber-400)}}.placeholder\:text-\[var\(--text-muted\)\]::placeholder{color:var(--text-muted)}.last\:mb-0:last-child{margin-bottom:calc(var(--spacing) * 0)}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}@media(hover:hover){.hover\:border-amber-400\/60:hover{border-color:#fcbb0099}@supports (color:color-mix(in lab,red,red)){.hover\:border-amber-400\/60:hover{border-color:color-mix(in oklab,var(--color-amber-400) 60%,transparent)}}.hover\:border-emerald-500\/30:hover{border-color:#00bb7f4d}@supports (color:color-mix(in lab,red,red)){.hover\:border-emerald-500\/30:hover{border-color:color-mix(in oklab,var(--color-emerald-500) 30%,transparent)}}.hover\:border-red-500\/30:hover{border-color:#fb2c364d}@supports (color:color-mix(in lab,red,red)){.hover\:border-red-500\/30:hover{border-color:color-mix(in oklab,var(--color-red-500) 30%,transparent)}}.hover\:bg-\[var\(--node-bg\)\]:hover{background-color:var(--node-bg)}.hover\:bg-\[var\(--surface\)\]:hover{background-color:var(--surface)}.hover\:bg-\[var\(--surface-hover\)\]:hover{background-color:var(--surface-hover)}.hover\:bg-\[var\(--text-muted\)\]:hover{background-color:var(--text-muted)}.hover\:bg-amber-500\/5:hover{background-color:#f99c000d}@supports (color:color-mix(in lab,red,red)){.hover\:bg-amber-500\/5:hover{background-color:color-mix(in oklab,var(--color-amber-500) 5%,transparent)}}.hover\:bg-amber-500\/30:hover{background-color:#f99c004d}@supports (color:color-mix(in lab,red,red)){.hover\:bg-amber-500\/30:hover{background-color:color-mix(in oklab,var(--color-amber-500) 30%,transparent)}}.hover\:bg-amber-600:hover{background-color:var(--color-amber-600)}.hover\:bg-emerald-500\/20:hover{background-color:#00bb7f33}@supports (color:color-mix(in lab,red,red)){.hover\:bg-emerald-500\/20:hover{background-color:color-mix(in oklab,var(--color-emerald-500) 20%,transparent)}}.hover\:bg-red-500\/20:hover{background-color:#fb2c3633}@supports (color:color-mix(in lab,red,red)){.hover\:bg-red-500\/20:hover{background-color:color-mix(in oklab,var(--color-red-500) 20%,transparent)}}.hover\:bg-red-500\/30:hover{background-color:#fb2c364d}@supports (color:color-mix(in lab,red,red)){.hover\:bg-red-500\/30:hover{background-color:color-mix(in oklab,var(--color-red-500) 30%,transparent)}}.hover\:text-\[var\(--accent\)\]:hover{color:var(--accent)}.hover\:text-\[var\(--running\)\]:hover{color:var(--running)}.hover\:text-\[var\(--text\)\]:hover{color:var(--text)}.hover\:text-\[var\(--text-secondary\)\]:hover{color:var(--text-secondary)}.hover\:text-blue-300:hover{color:var(--color-blue-300)}.hover\:text-green-300:hover{color:var(--color-green-300)}.hover\:underline:hover{text-decoration-line:underline}}.focus\:border-amber-400:focus{border-color:var(--color-amber-400)}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}}:root{--bg:#0a0a0f;--bg-subtle:#111118;--surface:#16161e;--surface-hover:#1c1c26;--surface-raised:#1e1e28;--border:#2a2a3a;--border-subtle:#223;--text:#e4e4ef;--text-secondary:#a0a0b8;--text-muted:#6b6b80;--pending:#52525b;--running:#3b82f6;--running-glow:#3b82f680;--completed:#22c55e;--completed-muted:#22c55e40;--failed:#ef4444;--failed-muted:#ef444440;--waiting:#f59e0b;--waiting-muted:#f59e0b40;--skipped:#6b7280;--accent:#6366f1;--accent-muted:#6366f140;--node-bg:#1e1e2a;--node-border:#2e2e42;--edge-color:#2e2e42;--edge-active:#3b82f6;--edge-taken:#22c55e;--minimap-bg:#0d0d14;--minimap-mask:#ffffff10;--minimap-node:#3b82f680;--font-sans:ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--font-mono:ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace}*{box-sizing:border-box;margin:0;padding:0}html,body,#root{width:100%;height:100%;overflow:hidden}body{font-family:var(--font-sans);background:var(--bg);color:var(--text);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.react-flow__background{background:var(--bg)!important}.react-flow__minimap{background:var(--minimap-bg)!important;border:1px solid var(--border)!important;border-radius:8px!important}.react-flow__controls{overflow:hidden;border:1px solid var(--border)!important;border-radius:8px!important;box-shadow:0 4px 12px #0006!important}.react-flow__controls-button{background:var(--surface)!important;border:none!important;border-bottom:1px solid var(--border)!important;color:var(--text-secondary)!important;fill:var(--text-secondary)!important;width:32px!important;height:32px!important}.react-flow__controls-button:hover{background:var(--surface-hover)!important;color:var(--text)!important;fill:var(--text)!important}.react-flow__controls-button:last-child{border-bottom:none!important}@keyframes pulse-ring{0%{box-shadow:0 0 0 0 var(--running-glow)}70%{box-shadow:0 0 0 6px #0000}to{box-shadow:0 0 #0000}}@keyframes subtle-pulse{0%,to{opacity:1}50%{opacity:.7}}@keyframes context-pulse{0%,to{opacity:1}50%{opacity:.4}}@keyframes dash-flow{to{stroke-dashoffset:-20px}}@keyframes node-activate{0%{transform:scale(1)}50%{transform:scale(1.03)}to{transform:scale(1)}}@keyframes node-complete-glow{0%{box-shadow:0 0 0 0 var(--completed-muted)}50%{box-shadow:0 0 16px 4px var(--completed-muted)}to{box-shadow:0 0 #0000}}@keyframes node-fail-glow{0%{box-shadow:0 0 0 0 var(--failed-muted)}50%{box-shadow:0 0 16px 4px var(--failed-muted)}to{box-shadow:0 0 #0000}}.node-activate{animation:.3s ease-out node-activate}.node-complete{animation:.4s ease-out node-complete-glow}.node-fail{animation:.4s ease-out node-fail-glow}@keyframes tooltip-in{0%{opacity:0;transform:translate(-50%,4px)}to{opacity:1;transform:translate(-50%)}}@keyframes banner-in{0%{opacity:0;transform:translate(-50%,-8px)}to{opacity:1;transform:translate(-50%)}}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:var(--text-muted)}[data-panel-group-direction=horizontal]>[data-resize-handle-active],[data-panel-group-direction=vertical]>[data-resize-handle-active]{background-color:var(--accent)!important}[data-resize-handle]{transition:background-color .15s;background-color:var(--border)!important}[data-resize-handle]:hover{background-color:var(--text-muted)!important}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}@keyframes pulse{50%{opacity:.5}}.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: #777;--xy-background-pattern-lines-color-default: #777;--xy-background-pattern-cross-color-default: #777;--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}.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))} diff --git a/src/conductor/web/static/index.html b/src/conductor/web/static/index.html index e2d4383..bd37a08 100644 --- a/src/conductor/web/static/index.html +++ b/src/conductor/web/static/index.html @@ -1,14 +1,14 @@ - - - - - - - Conductor Dashboard - - - - -
- - + + + + + + + Conductor Dashboard + + + + +
+ + diff --git a/tests/test_engine/test_subworkflow.py b/tests/test_engine/test_subworkflow.py index 2834a10..aca54e4 100644 --- a/tests/test_engine/test_subworkflow.py +++ b/tests/test_engine/test_subworkflow.py @@ -1014,7 +1014,7 @@ def mock_handler(agent, prompt, context): class TestSubWorkflowDashboardPath: - """Tests for engine-driven parent_path / slot_key on for_each-of-workflow events. + """Tests for engine-driven parent_path / slot_key on dashboard events. These keep concurrent for_each-of-workflow iterations addressable in the web dashboard without depending on a single shared activeContextPath. @@ -1111,3 +1111,360 @@ def _handler(agent, prompt, context): assert len(completed) == 3 completed_slots = sorted(d["slot_key"] for d in completed) assert completed_slots == ["batch[0]", "batch[1]", "batch[2]"] + + @pytest.mark.asyncio + async def test_sequential_subworkflow_emits_parent_path_and_slot_key( + self, tmp_workflow_dir: Path + ) -> None: + """Sequential sub-workflow emits parent_path=[] and slot_key=agent.name.""" + _write_yaml( + tmp_workflow_dir / "sub.yaml", + """\ + workflow: + name: sub + entry_point: inner + runtime: + provider: copilot + limits: + max_iterations: 5 + agents: + - name: inner + prompt: "inner" + routes: + - to: "$end" + output: + result: "done" + """, + ) + + parent_path = tmp_workflow_dir / "parent.yaml" + parent_path.write_text("dummy", encoding="utf-8") + + config = WorkflowConfig( + workflow=WorkflowDef( + name="parent", + entry_point="research", + runtime=RuntimeConfig(provider="copilot"), + limits=LimitsConfig(max_iterations=10), + ), + agents=[ + AgentDef( + name="research", + type="workflow", + workflow="sub.yaml", + routes=[RouteDef(to="$end")], + ), + ], + output={"result": "{{ research.output.result }}"}, + ) + + events: list[tuple[str, dict]] = [] + emitter = MagicMock() + emitter.emit.side_effect = lambda ev: events.append((ev.type, dict(ev.data))) + + provider = CopilotProvider(mock_handler=lambda agent, prompt, context: {"result": "ok"}) + engine = WorkflowEngine(config, provider, workflow_path=parent_path, event_emitter=emitter) + await engine.run({}) + + started = [d for t, d in events if t == "subworkflow_started"] + completed = [d for t, d in events if t == "subworkflow_completed"] + assert len(started) == 1, f"expected 1 subworkflow_started, got {len(started)}" + assert started[0]["agent_name"] == "research" + assert started[0]["parent_path"] == [] + assert started[0]["slot_key"] == "research" + assert len(completed) == 1 + assert completed[0]["parent_path"] == [] + assert completed[0]["slot_key"] == "research" + + # The child engine auto-stamps subworkflow_path on every event it emits + # so the dashboard can route per-context state correctly. + child_workflow_completed = [ + d + for t, d in events + if t == "workflow_completed" and d.get("subworkflow_path") == ["research"] + ] + assert len(child_workflow_completed) == 1 + + @pytest.mark.asyncio + async def test_subworkflow_failed_event_carries_parent_path_and_slot_key( + self, tmp_workflow_dir: Path + ) -> None: + """When a sub-workflow raises, subworkflow_failed carries dashboard fields. + + The success path is asserted in + ``test_sequential_subworkflow_emits_parent_path_and_slot_key`` — + this complements it by exercising the exception branch in + ``WorkflowEngine`` (which emits subworkflow_failed before re-raising). + """ + _write_yaml( + tmp_workflow_dir / "sub.yaml", + """\ + workflow: + name: sub-broken + entry_point: inner + runtime: + provider: copilot + limits: + max_iterations: 5 + agents: + - name: inner + prompt: "inner" + routes: + - to: nonexistent_target + output: + result: "{{ inner.output.result }}" + """, + ) + + parent_path = tmp_workflow_dir / "parent.yaml" + parent_path.write_text("dummy", encoding="utf-8") + + config = WorkflowConfig( + workflow=WorkflowDef( + name="parent", + entry_point="research", + runtime=RuntimeConfig(provider="copilot"), + limits=LimitsConfig(max_iterations=10), + ), + agents=[ + AgentDef( + name="research", + type="workflow", + workflow="sub.yaml", + routes=[RouteDef(to="$end")], + ), + ], + output={"result": "{{ research.output.result }}"}, + ) + + events: list[tuple[str, dict]] = [] + emitter = MagicMock() + emitter.emit.side_effect = lambda ev: events.append((ev.type, dict(ev.data))) + + provider = CopilotProvider(mock_handler=lambda agent, prompt, context: {"result": "ok"}) + engine = WorkflowEngine(config, provider, workflow_path=parent_path, event_emitter=emitter) + + with pytest.raises(ExecutionError): + await engine.run({}) + + failed = [d for t, d in events if t == "subworkflow_failed"] + assert len(failed) == 1, f"expected 1 subworkflow_failed event, got {len(failed)}" + assert failed[0]["agent_name"] == "research" + assert failed[0]["parent_path"] == [] + assert failed[0]["slot_key"] == "research" + assert "error_type" in failed[0] + assert "message" in failed[0] + + @pytest.mark.asyncio + async def test_nested_subworkflow_path_accumulates(self, tmp_workflow_dir: Path) -> None: + """At depth >= 2, subworkflow_path on auto-stamped events chains correctly. + + Parent -> mid (workflow) -> leaf (workflow). Events emitted by the + leaf engine must carry subworkflow_path = ["mid", "leaf"], proving + ``_dashboard_context_path`` accumulates across nesting levels. + """ + _write_yaml( + tmp_workflow_dir / "leaf.yaml", + """\ + workflow: + name: leaf + entry_point: leaf_inner + runtime: + provider: copilot + limits: + max_iterations: 5 + agents: + - name: leaf_inner + prompt: "leaf" + routes: + - to: "$end" + output: + result: "leaf_done" + """, + ) + _write_yaml( + tmp_workflow_dir / "mid.yaml", + """\ + workflow: + name: mid + entry_point: leaf + runtime: + provider: copilot + limits: + max_iterations: 5 + agents: + - name: leaf + type: workflow + workflow: leaf.yaml + routes: + - to: "$end" + output: + result: "{{ leaf.output.result }}" + """, + ) + + parent_path = tmp_workflow_dir / "parent.yaml" + parent_path.write_text("dummy", encoding="utf-8") + + config = WorkflowConfig( + workflow=WorkflowDef( + name="parent", + entry_point="mid", + runtime=RuntimeConfig(provider="copilot"), + limits=LimitsConfig(max_iterations=10), + ), + agents=[ + AgentDef( + name="mid", + type="workflow", + workflow="mid.yaml", + routes=[RouteDef(to="$end")], + ), + ], + output={"result": "{{ mid.output.result }}"}, + ) + + events: list[tuple[str, dict]] = [] + emitter = MagicMock() + emitter.emit.side_effect = lambda ev: events.append((ev.type, dict(ev.data))) + + provider = CopilotProvider(mock_handler=lambda a, p, c: {"result": "ok"}) + engine = WorkflowEngine(config, provider, workflow_path=parent_path, event_emitter=emitter) + await engine.run({}) + + # Events from the leaf engine must carry the full slot-key chain. + leaf_workflow_completed = [ + d + for t, d in events + if t == "workflow_completed" and d.get("subworkflow_path") == ["mid", "leaf"] + ] + assert len(leaf_workflow_completed) == 1, ( + "expected workflow_completed from depth-2 engine carrying " + "subworkflow_path=['mid', 'leaf']" + ) + + # Mid engine emits its own workflow_completed at depth 1. + mid_workflow_completed = [ + d + for t, d in events + if t == "workflow_completed" and d.get("subworkflow_path") == ["mid"] + ] + assert len(mid_workflow_completed) == 1 + + # Root engine's workflow_completed has no subworkflow_path stamp. + root_workflow_completed = [ + d for t, d in events if t == "workflow_completed" and "subworkflow_path" not in d + ] + assert len(root_workflow_completed) == 1 + + # Nested subworkflow_started carries parent_path = ["mid"]. + nested_started = [ + d for t, d in events if t == "subworkflow_started" and d.get("parent_path") == ["mid"] + ] + assert len(nested_started) == 1 + assert nested_started[0]["agent_name"] == "leaf" + assert nested_started[0]["slot_key"] == "leaf" + + @pytest.mark.asyncio + async def test_concurrent_for_each_subworkflow_emits_distinct_slot_keys( + self, tmp_workflow_dir: Path + ) -> None: + """For-each iterations get distinct slot_keys even with max_concurrent > 1. + + The existing ``test_for_each_subworkflow_emits_distinct_slot_keys`` + runs with max_concurrent=1 (sequential). This variant uses + max_concurrent=3 so iterations actually overlap, proving that + slot_key uniqueness is not an artifact of serial execution. + """ + _write_yaml( + tmp_workflow_dir / "sub.yaml", + """\ + workflow: + name: sub-workflow + entry_point: inner + runtime: + provider: copilot + limits: + max_iterations: 5 + agents: + - name: inner + prompt: "inner {{ workflow.input.item }}" + routes: + - to: "$end" + output: + result: "{{ workflow.input.item }}" + """, + ) + + parent_path = tmp_workflow_dir / "parent.yaml" + parent_path.write_text("dummy", encoding="utf-8") + + from conductor.config.schema import ForEachDef, OutputField + + config = WorkflowConfig( + workflow=WorkflowDef( + name="parent", + entry_point="finder", + runtime=RuntimeConfig(provider="copilot"), + limits=LimitsConfig(max_iterations=20), + ), + agents=[ + AgentDef( + name="finder", + prompt="find", + output={"items": OutputField(type="array")}, + routes=[RouteDef(to="batch")], + ), + ], + for_each=[ + ForEachDef( + name="batch", + type="for_each", + source="finder.output.items", + **{"as": "item"}, + max_concurrent=3, + agent=AgentDef( + name="runner", + type="workflow", + workflow="sub.yaml", + input_mapping={"item": "{{ item }}"}, + ), + routes=[RouteDef(to="$end")], + ), + ], + output={"done": "1"}, + ) + + events: list[tuple[str, dict]] = [] + emitter = MagicMock() + emitter.emit.side_effect = lambda ev: events.append((ev.type, dict(ev.data))) + + def _handler(agent, prompt, context): + if agent.name == "finder": + return {"items": ["x", "y", "z"]} + return {"result": "ok"} + + provider = CopilotProvider(mock_handler=_handler) + engine = WorkflowEngine(config, provider, workflow_path=parent_path, event_emitter=emitter) + await engine.run({}) + + started = [d for t, d in events if t == "subworkflow_started"] + assert len(started) == 3 + slot_keys = {d["slot_key"] for d in started} + assert slot_keys == {"batch[0]", "batch[1]", "batch[2]"}, ( + "concurrent iterations must each get a distinct slot_key" + ) + + # Each iteration's child engine must auto-stamp its own slot key + # on outgoing events (this is what keeps concurrent dashboard + # contexts isolated under for_each-of-workflow). + child_completed_paths = { + tuple(d["subworkflow_path"]) + for t, d in events + if t == "workflow_completed" and "subworkflow_path" in d + } + assert child_completed_paths == { + ("batch[0]",), + ("batch[1]",), + ("batch[2]",), + } diff --git a/tests/test_engine/test_workflow_interrupt.py b/tests/test_engine/test_workflow_interrupt.py index 0b6accb..9d28a27 100644 --- a/tests/test_engine/test_workflow_interrupt.py +++ b/tests/test_engine/test_workflow_interrupt.py @@ -938,3 +938,166 @@ async def close(self) -> None: event = asyncio.Event() result2 = await provider.execute(agent, {}, "prompt", interrupt_signal=event) assert result2.content == {"result": "mock"} + + +class TestCheckInterruptSubworkflow: + """Tests for _check_interrupt behavior at subworkflow depth > 0. + + At root depth, a between-agent interrupt in web mode is silently + consumed (the partial-output handler does the real pausing). In + subworkflows the interrupt MUST propagate so the child engine + unwinds back to the parent — otherwise Stop is a no-op while a + sub-workflow runs. + """ + + @pytest.mark.asyncio + async def test_check_interrupt_raises_in_subworkflow( + self, two_agent_config: WorkflowConfig + ) -> None: + """Sub-engine raises InterruptError when interrupt is set in web mode.""" + from types import SimpleNamespace + + event = asyncio.Event() + event.set() + + # Truthy stand-in: _check_interrupt only checks ``is not None``. + web_dashboard = SimpleNamespace() + + provider = CopilotProvider(mock_handler=lambda a, p, c: {}) + engine = WorkflowEngine( + two_agent_config, + provider, + interrupt_event=event, + web_dashboard=web_dashboard, # type: ignore[arg-type] + _subworkflow_depth=1, + ) + + with pytest.raises(InterruptError) as exc_info: + await engine._check_interrupt("inner_agent") + + assert exc_info.value.agent_name == "inner_agent" + # Event should have been cleared even though we raised. + assert not event.is_set() + + @pytest.mark.asyncio + async def test_check_interrupt_consumed_silently_at_root( + self, two_agent_config: WorkflowConfig + ) -> None: + """Root-depth web mode consumes the flag silently (regression guard).""" + from types import SimpleNamespace + + event = asyncio.Event() + event.set() + web_dashboard = SimpleNamespace() + + provider = CopilotProvider(mock_handler=lambda a, p, c: {}) + engine = WorkflowEngine( + two_agent_config, + provider, + interrupt_event=event, + web_dashboard=web_dashboard, # type: ignore[arg-type] + _subworkflow_depth=0, + ) + + # Returns None (no interrupt result) and clears the flag without raising. + result = await engine._check_interrupt("planner") + assert result is None + assert not event.is_set() + + +class TestHandleWebPauseSubworkflow: + """Tests for _handle_web_pause behavior at subworkflow depth > 0. + + A second Stop click while a sub-workflow agent is paused must be + able to abort the workflow without requiring the user to first + Resume and wait for the next between-agent check. + """ + + def _make_dashboard(self) -> object: + """Build a minimal stand-in for WebDashboard's pause-time surface.""" + from types import SimpleNamespace + + return SimpleNamespace( + has_connections=lambda: True, + resume_event=asyncio.Event(), + kill_event=asyncio.Event(), + disconnect_event=asyncio.Event(), + ) + + @pytest.mark.asyncio + async def test_handle_web_pause_stop_event_in_subworkflow( + self, two_agent_config: WorkflowConfig + ) -> None: + """Sub-engine pause unblocks on interrupt_event with InterruptError.""" + from conductor.providers.base import AgentOutput + + interrupt_event = asyncio.Event() + web_dashboard = self._make_dashboard() + + provider = CopilotProvider(mock_handler=lambda a, p, c: {}) + engine = WorkflowEngine( + two_agent_config, + provider, + interrupt_event=interrupt_event, + web_dashboard=web_dashboard, # type: ignore[arg-type] + _subworkflow_depth=1, + ) + + partial = AgentOutput(content={"plan": "partial"}, raw_response="x", partial=True) + + async def trigger_stop() -> None: + # Give _handle_web_pause a moment to set up its wait tasks + # before we set the interrupt event. + await asyncio.sleep(0.05) + interrupt_event.set() + + with pytest.raises(InterruptError) as exc_info: + await asyncio.gather( + engine._handle_web_pause("planner", partial), + trigger_stop(), + ) + assert exc_info.value.agent_name == "planner" + # interrupt_event should be cleared after consumption so subsequent + # checks don't trip on a stale flag. + assert not interrupt_event.is_set() + + @pytest.mark.asyncio + async def test_handle_web_pause_root_ignores_interrupt_event( + self, two_agent_config: WorkflowConfig + ) -> None: + """Root-depth pause does NOT subscribe to interrupt_event. + + At root, Stop-while-paused is intentionally not honored — only + Kill works. This documents the asymmetry with subworkflow + behavior; see workflow.py:_handle_web_pause. + """ + from conductor.providers.base import AgentOutput + + interrupt_event = asyncio.Event() + web_dashboard = self._make_dashboard() + + provider = CopilotProvider(mock_handler=lambda a, p, c: {}) + engine = WorkflowEngine( + two_agent_config, + provider, + interrupt_event=interrupt_event, + web_dashboard=web_dashboard, # type: ignore[arg-type] + _subworkflow_depth=0, + ) + + partial = AgentOutput(content={"plan": "partial"}, raw_response="x", partial=True) + + async def signal_then_resume() -> None: + await asyncio.sleep(0.05) + # Setting the interrupt event should NOT unpause the root engine. + interrupt_event.set() + await asyncio.sleep(0.05) + # Resume is the only way out at root depth. + web_dashboard.resume_event.set() + + result, _ = await asyncio.gather( + engine._handle_web_pause("planner", partial), + signal_then_resume(), + ) + # Resume returned True; no InterruptError raised. + assert result is True diff --git a/tests/test_web/test_server.py b/tests/test_web/test_server.py index 31db239..5c9a3b8 100644 --- a/tests/test_web/test_server.py +++ b/tests/test_web/test_server.py @@ -499,6 +499,132 @@ async def _cancel_serve(self: object) -> None: await dashboard.start() +class TestProactorShutdownRace: + """Tests for the proactor accept-loop race guard (Python 3.14+ Windows). + + The proactor event loop can raise AssertionError when a new connection + is accepted after Server.close() sets _sockets = None during shutdown. + The dashboard guards against this with both a custom exception handler + and a guarded serve wrapper. + """ + + def test_is_proactor_shutdown_race_true_during_shutdown(self) -> None: + """_is_proactor_shutdown_race returns True when server is shutting down.""" + _, dashboard = _make_dashboard() + dashboard._server = MagicMock() + dashboard._server.should_exit = True + + context = {"exception": AssertionError()} + assert dashboard._is_proactor_shutdown_race(context) is True + + def test_is_proactor_shutdown_race_false_when_not_shutting_down(self) -> None: + """_is_proactor_shutdown_race returns False when server is running.""" + _, dashboard = _make_dashboard() + dashboard._server = MagicMock() + dashboard._server.should_exit = False + + context = {"exception": AssertionError()} + assert dashboard._is_proactor_shutdown_race(context) is False + + def test_is_proactor_shutdown_race_false_for_non_assertion(self) -> None: + """_is_proactor_shutdown_race returns False for non-AssertionError.""" + _, dashboard = _make_dashboard() + dashboard._server = MagicMock() + dashboard._server.should_exit = True + + context = {"exception": RuntimeError("something else")} + assert dashboard._is_proactor_shutdown_race(context) is False + + def test_is_proactor_shutdown_race_false_without_server(self) -> None: + """_is_proactor_shutdown_race returns False when no server exists.""" + _, dashboard = _make_dashboard() + dashboard._server = None + + context = {"exception": AssertionError()} + assert dashboard._is_proactor_shutdown_race(context) is False + + def test_loop_exception_handler_suppresses_race(self) -> None: + """Custom exception handler suppresses the proactor race silently.""" + _, dashboard = _make_dashboard() + dashboard._server = MagicMock() + dashboard._server.should_exit = True + + loop = MagicMock() + context = {"exception": AssertionError(), "message": "test"} + + # Should not raise or call default handler + dashboard._loop_exception_handler(loop, context) + loop.default_exception_handler.assert_not_called() + + def test_loop_exception_handler_delegates_other_errors(self) -> None: + """Custom exception handler delegates non-race errors to the default.""" + _, dashboard = _make_dashboard() + dashboard._server = MagicMock() + dashboard._server.should_exit = False + dashboard._original_exception_handler = None + + loop = MagicMock() + context = {"exception": RuntimeError("real error"), "message": "boom"} + + dashboard._loop_exception_handler(loop, context) + loop.default_exception_handler.assert_called_once_with(context) + + def test_loop_exception_handler_delegates_to_original(self) -> None: + """Custom exception handler delegates to original handler if set.""" + _, dashboard = _make_dashboard() + dashboard._server = MagicMock() + dashboard._server.should_exit = False + original = MagicMock() + dashboard._original_exception_handler = original + + loop = MagicMock() + context = {"exception": ValueError("other"), "message": "test"} + + dashboard._loop_exception_handler(loop, context) + original.assert_called_once_with(loop, context) + loop.default_exception_handler.assert_not_called() + + @pytest.mark.asyncio + async def test_guarded_serve_suppresses_assertion_during_shutdown(self) -> None: + """_guarded_serve swallows AssertionError when server is shutting down.""" + from unittest.mock import patch + + _, dashboard = _make_dashboard() + + async def _assert_serve(self: object) -> None: + raise AssertionError("self._sockets is not None") + + import uvicorn + + with patch.object(uvicorn.Server, "serve", _assert_serve): + dashboard._server = uvicorn.Server( + uvicorn.Config(app=dashboard._app, host="127.0.0.1", port=0) + ) + dashboard._server.should_exit = True + # Should not raise + await dashboard._guarded_serve() + + @pytest.mark.asyncio + async def test_guarded_serve_reraises_assertion_when_running(self) -> None: + """_guarded_serve re-raises AssertionError when server is NOT shutting down.""" + from unittest.mock import patch + + _, dashboard = _make_dashboard() + + async def _assert_serve(self: object) -> None: + raise AssertionError("unexpected assertion") + + import uvicorn + + with patch.object(uvicorn.Server, "serve", _assert_serve): + dashboard._server = uvicorn.Server( + uvicorn.Config(app=dashboard._app, host="127.0.0.1", port=0) + ) + dashboard._server.should_exit = False + with pytest.raises(AssertionError, match="unexpected assertion"): + await dashboard._guarded_serve() + + class TestWaitForGateResponse: """Tests for WebDashboard.wait_for_gate_response stale-message handling."""