diff --git a/docs/workflow-syntax.md b/docs/workflow-syntax.md index 7893740..ada8aec 100644 --- a/docs/workflow-syntax.md +++ b/docs/workflow-syntax.md @@ -196,6 +196,42 @@ prompt: | **Restrictions** — workflow steps cannot have `prompt`, `model`, `provider`, `tools`, `system_prompt`, `command`, or `options`. Workflow steps also cannot be used inside `parallel` groups or `for_each` groups. +### Dialog Mode + +Dialog mode allows agents to conditionally pause after execution and enter a free-form conversation with the user. An LLM evaluator examines the agent's output against user-defined criteria and decides whether to initiate a dialog. + +```yaml +agents: + - name: researcher + prompt: "Research the given topic thoroughly" + dialog: + trigger_prompt: | + Enter dialog if the agent expresses uncertainty about + the user's intent, encounters ambiguous requirements, + or needs clarification before proceeding. + routes: + - to: writer +``` + +When triggered, the user is presented with a choice: +1. **Discuss** — engage in a multi-turn conversation with the agent +2. **Do your best and continue** — skip the dialog and let the agent proceed + +After the conversation, the agent re-executes with the dialog transcript as additional context, producing a refined output. + +**Configuration:** + +| Field | Type | Required | Description | +|-------|------|----------|-------------| +| `dialog.trigger_prompt` | string | Yes | Criteria for the LLM evaluator to decide when dialog is needed | + +**Behavior notes:** +- Dialog is supported on regular `agent` type only (not `human_gate`, `script`, or `workflow`) +- In web dashboard mode, the dialog temporarily replaces the graph area with a chat interface +- When `--skip-gates` is set (e.g., CI/automation), dialogs are automatically skipped +- The evaluator prompt should describe *when* to trigger dialog, not *what* to ask — the evaluator generates the opening question from the agent's output context +- After dialog, the agent sees the full conversation transcript and produces updated output + ## Parallel Groups Parallel groups execute multiple agents concurrently for improved performance. diff --git a/examples/dialog-mode.yaml b/examples/dialog-mode.yaml new file mode 100644 index 0000000..6658820 --- /dev/null +++ b/examples/dialog-mode.yaml @@ -0,0 +1,77 @@ +# Dialog Mode Example +# +# This example demonstrates the dialog mode feature, where an agent +# can conditionally pause and have a conversation with the user. +# +# The researcher agent has a dialog trigger that fires when the agent +# encounters ambiguity or needs clarification. When triggered, the +# user can choose to discuss or let the agent proceed on its own. +# +# Usage: +# conductor run examples/dialog-mode.yaml --input topic="quantum computing" +# conductor run examples/dialog-mode.yaml --web --input topic="quantum computing" + +workflow: + name: dialog-mode + description: Research workflow with agent-initiated dialog + version: "1.0.0" + entry_point: researcher + + runtime: + provider: copilot + + input: + topic: + type: string + required: true + description: The topic to research + +agents: + - name: researcher + description: Researches the topic and may ask for user clarification + prompt: | + Research the following topic and provide a comprehensive summary: + + Topic: {{ workflow.input.topic }} + + If the topic is broad, pick a specific angle and explain your choice. + If anything is ambiguous, note what assumptions you're making. + output: + summary: + type: string + description: Research summary + key_findings: + type: string + description: Bullet-pointed key findings + assumptions: + type: string + description: Any assumptions made during research + dialog: + trigger_prompt: | + Trigger dialog if the agent: + - Expresses significant uncertainty about the scope or angle + - Makes assumptions that could lead the research in the wrong direction + - Encounters multiple valid interpretations of the topic + Do NOT trigger for minor uncertainties that the agent can resolve on its own. + routes: + - to: writer + + - name: writer + description: Writes a polished article from the research + prompt: | + Write a clear, engaging article based on this research: + + Summary: {{ researcher.output.summary }} + Key Findings: {{ researcher.output.key_findings }} + + Keep the tone informative but accessible. + output: + article: + type: string + description: The final article + routes: + - to: $end + +output: + article: "{{ writer.output.article }}" + research_assumptions: "{{ researcher.output.assumptions }}" diff --git a/examples/dialog-test.yaml b/examples/dialog-test.yaml new file mode 100644 index 0000000..e66d0bb --- /dev/null +++ b/examples/dialog-test.yaml @@ -0,0 +1,60 @@ +# Dialog Mode Test — guaranteed to trigger dialog +# +# This workflow asks an agent to analyze a codebase question, +# but the agent will express uncertainty about scope/approach, +# triggering a dialog with the user. +# +# Usage: +# conductor run examples/dialog-test.yaml --input question="How should I refactor the error handling?" + +workflow: + name: dialog-test + description: Quick test to exercise dialog mode + entry_point: analyst + + runtime: + provider: copilot + + input: + question: + type: string + required: true + description: A code analysis question — the agent will seek clarification + +agents: + - name: analyst + description: An agent that analyzes code but needs clarification on scope + model: claude-haiku-4.5 + prompt: | + The user asked: {{ workflow.input.question }} + + You MUST respond as though this question is too broad to answer well. + Identify at least 3 different ways you could approach or scope this + analysis, explain why each leads to very different recommendations, + and state clearly that you need the user to narrow the scope before + you can give a useful answer. Express strong uncertainty about which + approach the user wants. + output: + approaches: + type: string + description: The possible approaches or scopes you identified + chosen_approach: + type: string + description: Which approach you went with (after dialog) + analysis: + type: string + description: Your analysis based on the chosen approach + dialog: + trigger_prompt: | + ALWAYS trigger dialog. The agent's output will contain + uncertainty and multiple possible approaches — this is by design. + Trigger if the output mentions any ambiguity, multiple + approaches, uncertainty, or inability to proceed. + In practice: always return trigger=true for this agent. + routes: + - to: $end + +output: + approaches: "{{ analyst.output.approaches }}" + chosen: "{{ analyst.output.chosen_approach }}" + analysis: "{{ analyst.output.analysis }}" diff --git a/src/conductor/config/__init__.py b/src/conductor/config/__init__.py index 46bf1a1..78efbff 100644 --- a/src/conductor/config/__init__.py +++ b/src/conductor/config/__init__.py @@ -13,6 +13,7 @@ from conductor.config.schema import ( AgentDef, ContextConfig, + DialogConfig, GateOption, HooksConfig, InputDef, @@ -34,6 +35,7 @@ # Schema models "AgentDef", "ContextConfig", + "DialogConfig", "GateOption", "HooksConfig", "InputDef", diff --git a/src/conductor/config/schema.py b/src/conductor/config/schema.py index a0e8791..841481e 100644 --- a/src/conductor/config/schema.py +++ b/src/conductor/config/schema.py @@ -387,6 +387,33 @@ class RetryPolicy(BaseModel): """ +class DialogConfig(BaseModel): + """Configuration for agent dialog mode. + + When present on an agent, enables the agent to conditionally pause + after execution and enter a free-form conversation with the user. + + An evaluator LLM call examines the agent's output against the + user-defined trigger_prompt criteria and decides whether to pause + and start a conversation. + + Example YAML:: + + dialog: + trigger_prompt: | + Enter dialog if the agent expresses uncertainty about + the user's intent or needs clarification on requirements. + """ + + trigger_prompt: str + """User-defined criteria for when to enter dialog mode. + + This prompt is wrapped in a system message and evaluated against + the agent's output. The evaluator decides whether to pause and + start a conversation with the user. + """ + + class AgentDef(BaseModel): """Definition for a single agent in the workflow.""" @@ -543,6 +570,24 @@ class AgentDef(BaseModel): - timeout """ + dialog: DialogConfig | None = None + """Optional dialog mode configuration. + + When set, enables this agent to conditionally pause after execution + and enter a free-form conversation with the user. A lightweight + evaluator LLM call uses the trigger_prompt to decide whether dialog + should be triggered based on the agent's output. + + Only applies to provider-backed agents (type='agent' or None). + + Example YAML:: + + dialog: + trigger_prompt: | + Enter dialog if the agent is uncertain about the user's + intent or needs clarification on ambiguous requirements. + """ + @field_validator("timeout") @classmethod def validate_timeout(cls, v: int | None) -> int | None: @@ -561,6 +606,8 @@ def validate_agent_type(self) -> AgentDef: raise ValueError("human_gate agents require 'prompt'") if self.input_mapping is not None: raise ValueError("human_gate agents cannot have 'input_mapping'") + if self.dialog is not None: + raise ValueError("human_gate agents cannot have 'dialog'") if self.max_depth is not None: raise ValueError("human_gate agents cannot have 'max_depth'") elif self.type == "script": @@ -591,6 +638,8 @@ def validate_agent_type(self) -> AgentDef: raise ValueError("script agents cannot have 'retry'") if self.input_mapping is not None: raise ValueError("script agents cannot have 'input_mapping'") + if self.dialog is not None: + raise ValueError("script agents cannot have 'dialog'") if self.max_depth is not None: raise ValueError("script agents cannot have 'max_depth'") elif self.type == "workflow": @@ -616,6 +665,8 @@ def validate_agent_type(self) -> AgentDef: raise ValueError("workflow agents cannot have 'max_agent_iterations'") if self.retry is not None: raise ValueError("workflow agents cannot have 'retry'") + if self.dialog is not None: + raise ValueError("workflow agents cannot have 'dialog'") else: # Regular agent or human_gate — input_mapping is not valid if self.input_mapping is not None: diff --git a/src/conductor/engine/dialog_evaluator.py b/src/conductor/engine/dialog_evaluator.py new file mode 100644 index 0000000..c554416 --- /dev/null +++ b/src/conductor/engine/dialog_evaluator.py @@ -0,0 +1,188 @@ +"""Dialog evaluator for conditional agent-user dialog triggering. + +This module provides the DialogEvaluator class which uses an LLM call +to determine whether an agent should enter dialog mode based on +user-defined criteria in the trigger_prompt. +""" + +from __future__ import annotations + +import json +import logging +from dataclasses import dataclass +from typing import TYPE_CHECKING, Any + +if TYPE_CHECKING: + from conductor.config.schema import AgentDef + from conductor.providers.base import AgentProvider + +logger = logging.getLogger(__name__) + +EVALUATOR_SYSTEM_PROMPT = """\ +You are a dialog trigger evaluator. Your job is to examine an agent's output \ +and decide whether the agent should pause and start a conversation with the user. + +The workflow author has defined the following criteria for triggering dialog: + +--- CRITERIA --- +{trigger_prompt} +--- END CRITERIA --- + +Examine the agent's output below and decide: +1. Does the output meet the criteria for triggering a dialog with the user? +2. If yes, what question or topic should the agent open the dialog with? \ +Include full context — file paths, code snippets, data points, and reasoning — \ +so the user has everything they need to respond meaningfully. + +You MUST respond with ONLY a JSON object (no markdown, no extra text): +{{"trigger": true/false, "reason": "brief explanation", "question": "the opening \ +question to ask the user with full context (only if trigger is true)"}} +""" + +EVALUATOR_USER_PROMPT = """\ +Agent name: {agent_name} +Agent output: +{agent_output} +""" + +# Sentinel marker appended when the agent output is truncated to fit the +# evaluator prompt. Lets the evaluator LLM know it has partial data so it +# can either still trigger or ask for clarification rather than failing silently. +_TRUNCATION_MARKER = "\n…[truncated]" + + +def _truncate_for_evaluator(text: str, limit: int) -> str: + """Truncate ``text`` to ``limit`` chars, appending a marker if cut. + + The marker is part of the budget — we leave headroom so the evaluator + sees ``…[truncated]`` rather than a half-token at the boundary. + """ + if len(text) <= limit: + return text + headroom = len(_TRUNCATION_MARKER) + return text[: max(0, limit - headroom)] + _TRUNCATION_MARKER + + +@dataclass +class DialogEvaluation: + """Result of a dialog trigger evaluation. + + Attributes: + trigger: Whether dialog should be triggered. + reason: Explanation of why dialog was or was not triggered. + question: The opening question for the dialog (if triggered). + """ + + trigger: bool + reason: str + question: str = "" + + +class DialogEvaluator: + """Evaluates whether an agent should enter dialog mode. + + Uses a single LLM call to evaluate the agent's output against + user-defined trigger criteria. + """ + + async def evaluate( + self, + agent: AgentDef, + output: dict[str, Any], + provider: AgentProvider, + ) -> DialogEvaluation: + """Evaluate whether an agent's output should trigger dialog. + + Args: + agent: The agent definition with dialog config. + output: The agent's output content. + provider: The provider to use for the evaluation LLM call. + + Returns: + DialogEvaluation with trigger decision and opening question. + """ + if not agent.dialog: + return DialogEvaluation(trigger=False, reason="No dialog config") + + return await self._run_evaluator(agent, output, provider) + + async def _run_evaluator( + self, + agent: AgentDef, + output: dict[str, Any], + provider: AgentProvider, + ) -> DialogEvaluation: + """Run the LLM evaluator to decide whether dialog is needed. + + Args: + agent: The agent definition with dialog config. + output: The agent's output content. + provider: The provider for the LLM call. + + Returns: + DialogEvaluation with trigger decision and opening question. + """ + try: + output_str = json.dumps(output, indent=2, default=str) + except (TypeError, ValueError): + output_str = str(output) + + system_prompt = EVALUATOR_SYSTEM_PROMPT.format( + trigger_prompt=agent.dialog.trigger_prompt, + ) + user_prompt = EVALUATOR_USER_PROMPT.format( + agent_name=agent.name, + agent_output=_truncate_for_evaluator(output_str, limit=4000), + ) + + try: + result = await provider.execute_dialog_turn( + system_prompt=system_prompt, + user_message=user_prompt, + history=[], + model=agent.model, + ) + return self._parse_evaluation(result) + except Exception: + logger.warning( + "Dialog evaluation failed for agent '%s', skipping dialog", + agent.name, + exc_info=True, + ) + return DialogEvaluation( + trigger=False, + reason="Evaluation failed", + ) + + def _parse_evaluation(self, response: str) -> DialogEvaluation: + """Parse the evaluator LLM response into a DialogEvaluation. + + Args: + response: Raw LLM response text. + + Returns: + Parsed DialogEvaluation. + """ + try: + text = response.strip() + # Handle markdown code blocks. The LLM may omit the closing fence, + # in which case we must NOT swallow the last line of valid JSON. + if text.startswith("```"): + lines = text.splitlines() + if len(lines) > 1 and lines[-1].strip().startswith("```"): + text = "\n".join(lines[1:-1]) + elif len(lines) > 1: + text = "\n".join(lines[1:]) + + data = json.loads(text) + return DialogEvaluation( + trigger=bool(data.get("trigger", False)), + reason=str(data.get("reason", "")), + question=str(data.get("question", "")), + ) + except (json.JSONDecodeError, KeyError, TypeError): + logger.warning("Failed to parse dialog evaluation response: %s", response[:200]) + return DialogEvaluation( + trigger=False, + reason=f"Failed to parse evaluation: {response[:100]}", + ) diff --git a/src/conductor/engine/workflow.py b/src/conductor/engine/workflow.py index cc0c7fc..f751b0a 100644 --- a/src/conductor/engine/workflow.py +++ b/src/conductor/engine/workflow.py @@ -377,6 +377,17 @@ def __init__( # Web dashboard for bidirectional gate input self._web_dashboard = web_dashboard + # Dialog mode support + from conductor.engine.dialog_evaluator import DialogEvaluator + from conductor.gates.dialog import DialogHandler + + self._dialog_evaluator = DialogEvaluator() + self._dialog_handler = DialogHandler( + skip_dialogs=skip_gates, + emitter=event_emitter, + web_dashboard=web_dashboard, + ) + # Checkpoint tracking self._current_agent_name: str | None = None self._last_checkpoint_path: Path | None = None @@ -1388,6 +1399,95 @@ async def _handle_partial_output( new_guidance_section = self.context.get_guidance_prompt_section() return await executor.execute(agent, agent_context, guidance_section=new_guidance_section) + async def _handle_dialog( + self, + agent: AgentDef, + output: AgentOutput, + agent_context: dict[str, Any], + executor: AgentExecutor, + ) -> AgentOutput: + """Handle dialog mode evaluation and conversation for an agent. + + Runs the dialog evaluator against the agent's output. If dialog is + triggered, presents the user with a choice to engage or skip, then + manages the conversation. After dialog, re-executes the agent with + the dialog transcript as additional guidance so the agent can refine + its output. + + Args: + agent: The agent with dialog config. + output: The agent's current output. + agent_context: The context used for agent execution. + executor: The executor for the agent. + + Returns: + The original output if dialog was not triggered or declined, + or an updated output after re-execution with dialog context. + """ + provider = executor.provider + + # Suspend keyboard listener for interactive dialog + if self._keyboard_listener is not None: + await self._keyboard_listener.suspend() + + try: + evaluation = await self._dialog_evaluator.evaluate(agent, output.content, provider) + + if not evaluation.trigger: + logger.debug("Dialog not triggered for '%s': %s", agent.name, evaluation.reason) + return output + + logger.info("Dialog triggered for '%s': %s", agent.name, evaluation.reason) + + dialog_result = await self._dialog_handler.handle_dialog( + agent=agent, + agent_output=output.content, + opening_question=evaluation.question, + provider=provider, + base_dir=self.workflow_path.parent if self.workflow_path else None, + ) + + # If user declined or no meaningful dialog occurred, keep original output + if dialog_result.user_declined or not dialog_result.messages: + return output + + # Build dialog transcript for re-execution guidance + transcript_parts = [] + for msg in dialog_result.messages: + label = "User" if msg.role == "user" else "Agent" + transcript_parts.append(f"{label}: {msg.content}") + transcript = "\n".join(transcript_parts) + + dialog_guidance = ( + f"\n\n--- DIALOG WITH USER ---\n" + f"The following conversation occurred after your initial output. " + f"Use this context to refine your response:\n\n" + f"{transcript}\n" + f"--- END DIALOG ---\n\n" + f"Now produce your final output incorporating the dialog above." + ) + + # Re-execute with dialog context + guidance_section = self.context.get_guidance_prompt_section() or "" + guidance_section += dialog_guidance + + new_output = await executor.execute( + agent, agent_context, guidance_section=guidance_section + ) + return new_output + + except Exception: + logger.warning( + "Dialog handling failed for '%s', using original output", + agent.name, + exc_info=True, + ) + return output + finally: + # Resume keyboard listener + if self._keyboard_listener is not None: + await self._keyboard_listener.resume() + async def _execute_loop(self, current_agent_name: str) -> dict[str, Any]: """Core execution loop shared by :meth:`run` and :meth:`resume`. @@ -1979,6 +2079,16 @@ async def _execute_loop(self, current_agent_name: str) -> dict[str, Any]: ) _agent_elapsed = _time.time() - _agent_start + # Dialog mode: evaluate whether agent should enter dialog + if agent.dialog and not output.partial: + output = await self._handle_dialog( + agent, + output, + agent_context, + executor, + ) + _agent_elapsed = _time.time() - _agent_start + # Record usage and calculate cost usage = self.usage_tracker.record(agent.name, output, _agent_elapsed) diff --git a/src/conductor/executor/linkify.py b/src/conductor/executor/linkify.py new file mode 100644 index 0000000..163d80e --- /dev/null +++ b/src/conductor/executor/linkify.py @@ -0,0 +1,265 @@ +"""Auto-linkify bare file paths and URLs in rendered markdown text. + +This module provides post-processing for human-facing rendered text (gate +prompts, etc.) to automatically convert bare file paths and URLs into +markdown links. It is *not* used inside the generic ``TemplateRenderer`` — +only at call-sites that produce text destined for markdown rendering (web +dashboard, Rich terminal). + +The processing is markdown-aware: fenced code blocks, inline code spans, +and existing markdown links are left untouched. +""" + +from __future__ import annotations + +import re +from pathlib import Path + +# --------------------------------------------------------------------------- +# Shared extension allowlist — kept in sync with web/server.py +# --------------------------------------------------------------------------- +LINKABLE_EXTENSIONS = frozenset( + { + ".md", + ".txt", + ".yaml", + ".yml", + ".json", + ".log", + ".py", + ".ts", + ".js", + ".tsx", + ".jsx", + ".css", + ".html", + ".toml", + ".cfg", + ".ini", + ".csv", + ".xml", + ".sh", + ".bat", + ".ps1", + ".plan.md", + } +) + +# --------------------------------------------------------------------------- +# Regex patterns +# --------------------------------------------------------------------------- + +# Fenced code block (``` or ~~~, with optional language tag) +_FENCED_CODE_RE = re.compile(r"^(`{3,}|~{3,}).*?^\1", re.MULTILINE | re.DOTALL) + +# Inline code span (`...`) +_INLINE_CODE_RE = re.compile(r"`[^`\n]+`") + +# Existing markdown links: [text](url) or [text][ref] +_EXISTING_LINK_RE = re.compile(r"\[[^\]]*\]\([^)]*\)|\[[^\]]*\]\[[^\]]*\]") + +# Bare URL: http(s)://... terminated at whitespace or common punctuation +_URL_RE = re.compile( + r"(?\]\[\"'`]+" +) + +# Bare file path: contains at least one /, ends with a known extension. +# Must start at a word boundary or line start. Avoids matching inside +# URLs (already handled) by requiring no scheme prefix. +_FILE_PATH_RE = re.compile( + r"(? str: + """Post-process rendered text to add markdown links for paths and URLs. + + Processing steps: + 1. Normalize Jinja2 whitespace artifacts (3+ consecutive newlines → 2). + 2. Auto-linkify bare ``http(s)://`` URLs. + 3. Auto-linkify bare file paths (verified against *base_dir* when given). + + Fenced code blocks, inline code spans, and existing markdown links are + preserved unchanged. + + Args: + text: Rendered template text (may contain markdown). + base_dir: Optional directory for file existence checks. When + provided, only paths that resolve to an existing file within + *base_dir* are linkified. + + Returns: + Text with bare paths/URLs wrapped in markdown link syntax. + """ + # Step 1: normalize whitespace + text = _normalize_whitespace(text) + + # Step 2 & 3: linkify, skipping protected regions + text = _linkify_with_protection(text, base_dir) + + return text + + +# --------------------------------------------------------------------------- +# Internals +# --------------------------------------------------------------------------- + + +def _normalize_whitespace(text: str) -> str: + """Collapse 3+ consecutive newlines into exactly 2 (one blank line).""" + return re.sub(r"\n{3,}", "\n\n", text) + + +def _linkify_with_protection(text: str, base_dir: Path | None) -> str: + """Linkify URLs and file paths while protecting code/links. + + Strategy: identify protected spans (fenced code, inline code, existing + links), then process only the unprotected gaps. + """ + protected: list[tuple[int, int]] = [] + + for pattern in (_FENCED_CODE_RE, _INLINE_CODE_RE, _EXISTING_LINK_RE): + for m in pattern.finditer(text): + protected.append((m.start(), m.end())) + + # Sort and merge overlapping spans + protected.sort() + merged: list[tuple[int, int]] = [] + for start, end in protected: + if merged and start <= merged[-1][1]: + merged[-1] = (merged[-1][0], max(merged[-1][1], end)) + else: + merged.append((start, end)) + + # Build result by processing unprotected segments + result: list[str] = [] + prev_end = 0 + for pstart, pend in merged: + if prev_end < pstart: + # Unprotected gap — linkify it + result.append(_linkify_segment(text[prev_end:pstart], base_dir)) + # Protected span — copy verbatim + result.append(text[pstart:pend]) + prev_end = pend + # Final unprotected tail + if prev_end < len(text): + result.append(_linkify_segment(text[prev_end:], base_dir)) + + return "".join(result) + + +def _linkify_segment(segment: str, base_dir: Path | None) -> str: + """Linkify bare URLs and file paths in an unprotected text segment.""" + # First pass: linkify URLs + segment = _URL_RE.sub(_wrap_url, segment) + # Second pass: linkify file paths + segment = _linkify_file_paths(segment, base_dir) + return segment + + +def _wrap_url(m: re.Match[str]) -> str: + """Wrap a bare URL in markdown autolink syntax.""" + url = m.group(0) + # Strip trailing punctuation that's unlikely part of the URL + trailing = "" + while url and url[-1] in ".,;:!?)": + # Keep ) only if there's a matching ( in the URL (e.g. Wikipedia links) + if url[-1] == ")" and "(" in url: + break + trailing = url[-1] + trailing + url = url[:-1] + return f"[{url}]({url}){trailing}" + + +def _linkify_file_paths(segment: str, base_dir: Path | None) -> str: + """Find and linkify bare file paths in a text segment. + + A token is considered a file path if: + - It contains at least one ``/`` + - It ends with a known extension + - If *base_dir* is given, the file must exist + """ + # Split on whitespace boundaries to find path-like tokens + # We process word-by-word to avoid partial matches + tokens = re.split(r"(\s+)", segment) + result: list[str] = [] + + for token in tokens: + linked = _try_linkify_path(token, base_dir) + result.append(linked if linked else token) + + return "".join(result) + + +def _try_linkify_path(token: str, base_dir: Path | None) -> str | None: + """Try to linkify a single token as a file path. + + Returns the markdown link string, or None if the token is not a file path. + """ + # Strip leading/trailing punctuation that isn't part of the path + prefix = "" + suffix = "" + stripped = token + + # Strip common leading chars + while stripped and stripped[0] in "([\"'": + prefix += stripped[0] + stripped = stripped[1:] + + # Strip common trailing chars + while stripped and stripped[-1] in ")]\"'.,;:!?": + suffix = stripped[-1] + suffix + stripped = stripped[:-1] + + if not stripped: + return None + + # Must contain a path separator + if "/" not in stripped and "\\" not in stripped: + return None + + # Normalize to forward slashes for extension check + normalized = stripped.replace("\\", "/") + + # Must end with a known extension + if not _has_linkable_extension(normalized): + return None + + # Must not look like a URL (already handled) + if re.match(r"https?://", stripped): + return None + + # If base_dir is provided, verify file exists + if base_dir is not None: + try: + resolved_base = base_dir.resolve() + candidate = (base_dir / stripped).resolve() + # Security: must be within base_dir (path-aware containment, not + # string-prefix — `/foo/bar` must not match `/foo/barbaz/...`). + if not candidate.is_relative_to(resolved_base): + return None + if not candidate.is_file(): + return None + except (OSError, ValueError): + return None + + # Build markdown link with forward slashes (for dashboard API) + link_target = normalized + return f"{prefix}[{stripped}]({link_target}){suffix}" + + +def _has_linkable_extension(path: str) -> bool: + """Check if a path ends with a known linkable extension.""" + lower = path.lower() + return any(lower.endswith(ext) for ext in LINKABLE_EXTENSIONS) diff --git a/src/conductor/gates/dialog.py b/src/conductor/gates/dialog.py new file mode 100644 index 0000000..66f0d3a --- /dev/null +++ b/src/conductor/gates/dialog.py @@ -0,0 +1,734 @@ +"""Dialog handler for agent-initiated user conversations. + +This module implements the interactive dialog mode where an agent pauses +after execution and enters a free-form conversation with the user. +The dialog presents full context (output, file paths, reasoning) and +supports multi-turn exchanges until the user or agent concludes. +""" + +from __future__ import annotations + +import asyncio +import json +import logging +import uuid +from dataclasses import dataclass, field +from typing import TYPE_CHECKING, Any + +from rich.console import Console +from rich.markdown import Markdown as RichMarkdown +from rich.panel import Panel +from rich.prompt import Prompt +from rich.text import Text + +from conductor.executor.linkify import linkify_markdown + +if TYPE_CHECKING: + from pathlib import Path + + from conductor.config.schema import AgentDef + from conductor.events import WorkflowEventEmitter + from conductor.providers.base import AgentProvider + from conductor.web.server import WebDashboard + +logger = logging.getLogger(__name__) + +# System prompt for the agent during dialog mode. +# The agent should be conversational and propose completion when ready. +DIALOG_AGENT_SYSTEM_PROMPT = """\ +You are helping with a workflow dialog. A workflow agent named "{agent_name}" \ +has produced output and needs to discuss it with the user. + +YOUR TASK: Act as the agent "{agent_name}" and have a conversation with the \ +user about the output below. You must stay in character and discuss the output \ +topic naturally. This is NOT a coding task — the user wants to discuss the \ +content of the agent's output, whatever the topic may be. + +RULES: +- Discuss the output topic as written — do NOT refuse, redirect, or claim \ + the topic is "out of scope" +- Share full context including file paths, code snippets, and reasoning \ + when relevant +- When you believe you have enough information to proceed, include the \ + exact marker [READY_TO_CONTINUE] at the end of your message +- If the user says "done", "continue", or "go ahead", treat that as \ + permission to stop discussing + +--- AGENT OUTPUT TO DISCUSS --- +{agent_output} +--- END AGENT OUTPUT --- +""" + +# Dismiss keywords the user can type to exit dialog +DISMISS_KEYWORDS = frozenset( + { + "done", + "continue", + "go ahead", + "proceed", + "that's all", + "thats all", + "resume", + "exit", + "/done", + "/continue", + } +) + +# Marker the agent appends to signal it's ready to continue. Treated as a +# terminal control token (must be at the end of the response) to prevent +# false positives if the agent quotes the marker mid-response. +_READY_MARKER = "[READY_TO_CONTINUE]" + + +def _extract_ready_marker(response: str) -> tuple[bool, str]: + """Return ``(proposed, cleaned)`` for an agent response. + + ``proposed`` is True only when the marker appears at the very end of the + (right-stripped) response. ``cleaned`` is the response with the trailing + marker removed. This avoids both false positives from mid-response + mentions and the user-injection vector where a user pastes the marker. + """ + stripped = response.rstrip() + if stripped.endswith(_READY_MARKER): + cleaned = stripped[: -len(_READY_MARKER)].rstrip() + return True, cleaned + return False, response + + +@dataclass +class DialogMessage: + """A single message in a dialog conversation. + + Attributes: + role: Either 'user' or 'agent'. + content: The message content. + """ + + role: str + content: str + + +@dataclass +class DialogResult: + """Result of a dialog session. + + Attributes: + dialog_id: Unique identifier for this dialog session. + messages: Full transcript of the dialog conversation. + user_dismissed: Whether the user explicitly dismissed the dialog. + user_declined: Whether the user declined to engage at all. + agent_proposed_continue: Whether the agent proposed continuing. + """ + + dialog_id: str + messages: list[DialogMessage] = field(default_factory=list) + user_dismissed: bool = False + user_declined: bool = False + agent_proposed_continue: bool = False + + +class DialogHandler: + """Handles interactive dialog sessions between agents and users. + + Presents the agent's full context (output, file paths, reasoning) + and manages a multi-turn conversation until the user or agent + concludes the dialog. + + Example:: + + handler = DialogHandler() + result = await handler.handle_dialog( + agent=agent_def, + agent_output={"result": "analysis complete", "files": [...]}, + opening_question="I found some ambiguity in the requirements...", + provider=copilot_provider, + ) + """ + + def __init__( + self, + console: Console | None = None, + skip_dialogs: bool = False, + emitter: WorkflowEventEmitter | None = None, + web_dashboard: WebDashboard | None = None, + ) -> None: + """Initialize the DialogHandler. + + Args: + console: Rich console for output. Creates one if not provided. + skip_dialogs: If True, auto-skip all dialogs (for CI/automation). + emitter: Optional event emitter for dialog events. + web_dashboard: Optional web dashboard for web-based dialog input. + """ + self.console = console or Console() + self.skip_dialogs = skip_dialogs + self.emitter = emitter + self.web_dashboard = web_dashboard + + async def handle_dialog( + self, + agent: AgentDef, + agent_output: dict[str, Any], + opening_question: str, + provider: AgentProvider, + base_dir: Path | None = None, + ) -> DialogResult: + """Run an interactive dialog session with the user. + + Presents the agent's full output and opening question, then + manages a multi-turn conversation until conclusion. + + Args: + agent: The agent definition that triggered dialog. + agent_output: The agent's complete output (shown to user as context). + opening_question: The evaluator-extracted opening question. + provider: The provider for generating agent responses. + base_dir: Optional directory for resolving file paths in output. + + Returns: + DialogResult with the full conversation transcript. + """ + dialog_id = str(uuid.uuid4())[:8] + result = DialogResult(dialog_id=dialog_id) + + if self.skip_dialogs: + logger.info("Dialog skipped for agent '%s' (skip_dialogs=True)", agent.name) + result.user_declined = True + return result + + # Dispatch to web mode if dashboard is available + if self.web_dashboard is not None: + return await self._web_handle_dialog( + agent=agent, + agent_output=agent_output, + opening_question=opening_question, + provider=provider, + dialog_id=dialog_id, + result=result, + ) + + self._emit_event( + "dialog_started", + { + "dialog_id": dialog_id, + "agent_name": agent.name, + "opening_question": opening_question, + }, + ) + + # Build the system prompt with full agent output context + try: + output_str = json.dumps(agent_output, indent=2, default=str) + except (TypeError, ValueError): + output_str = str(agent_output) + + system_prompt = DIALOG_AGENT_SYSTEM_PROMPT.format( + agent_name=agent.name, agent_output=output_str + ) + + # Display full context and the opening question to the user + self._display_dialog_start(agent, agent_output, opening_question, base_dir) + + # Record the opening question as the first agent message + result.messages.append(DialogMessage(role="agent", content=opening_question)) + self._emit_event( + "dialog_message", + { + "dialog_id": dialog_id, + "agent_name": agent.name, + "role": "agent", + "content": opening_question, + }, + ) + + # Ask user if they want to engage or let the agent continue on its own + engagement = await self._ask_engagement() + if engagement == "decline": + result.user_declined = True + self._display_dialog_end(dismissed_by="declined") + self._emit_event( + "dialog_completed", + { + "dialog_id": dialog_id, + "agent_name": agent.name, + "turn_count": len(result.messages), + "user_declined": True, + }, + ) + return result + + # Track conversation history for the provider + history: list[dict[str, str]] = [] + + # Dialog loop + while True: + # Get user input + user_input = await self._get_user_input() + + if user_input is None: + # EOF or error + result.user_dismissed = True + break + + result.messages.append(DialogMessage(role="user", content=user_input)) + self._emit_event( + "dialog_message", + { + "dialog_id": dialog_id, + "agent_name": agent.name, + "role": "user", + "content": user_input, + }, + ) + + # Check if user is dismissing the dialog + if self._is_dismiss(user_input): + result.user_dismissed = True + self._display_dialog_end(dismissed_by="user") + break + + # Send to agent and get response + history.append({"role": "user", "content": user_input}) + try: + agent_response = await provider.execute_dialog_turn( + system_prompt=system_prompt, + user_message=user_input, + history=history[:-1], # History excludes current message + model=agent.model, + ) + except Exception: + # Roll back the user turn so the next attempt doesn't leave two + # consecutive user messages in the provider context. + history.pop() + logger.warning( + "Dialog turn failed for agent '%s'", + agent.name, + exc_info=True, + ) + self.console.print( + "[dim red] (Agent response failed — you can continue or type 'done')[/dim red]" + ) + continue + + history.append({"role": "assistant", "content": agent_response}) + ready_proposed, clean_response = _extract_ready_marker(agent_response) + stored_response = clean_response if ready_proposed else agent_response + result.messages.append(DialogMessage(role="agent", content=stored_response)) + self._emit_event( + "dialog_message", + { + "dialog_id": dialog_id, + "agent_name": agent.name, + "role": "agent", + "content": stored_response, + }, + ) + + # Check if agent proposed completion (terminal marker only) + if ready_proposed: + result.agent_proposed_continue = True + self._display_agent_message(clean_response) + self._display_continue_proposal() + + # Ask user if they approve + approval = await self._get_user_input( + prompt_text="[bold]Continue?[/bold] ([green]yes[/green]/no)" + ) + if approval is None or approval.lower() in ("yes", "y", ""): + self._display_dialog_end(dismissed_by="agent_approved") + break + # User wants to keep chatting + history.append({"role": "user", "content": approval}) + result.messages.append(DialogMessage(role="user", content=approval)) + continue + + self._display_agent_message(agent_response) + + self._emit_event( + "dialog_completed", + { + "dialog_id": dialog_id, + "agent_name": agent.name, + "turn_count": len(result.messages), + "user_dismissed": result.user_dismissed, + "agent_proposed_continue": result.agent_proposed_continue, + }, + ) + + return result + + async def _web_handle_dialog( + self, + agent: AgentDef, + agent_output: dict[str, Any], + opening_question: str, + provider: AgentProvider, + dialog_id: str, + result: DialogResult, + ) -> DialogResult: + """Run a dialog session with input from the web dashboard. + + Events are already emitted by the regular flow. This method replaces + CLI prompts with web dashboard WebSocket communication. + """ + assert self.web_dashboard is not None + + self._emit_event( + "dialog_started", + { + "dialog_id": dialog_id, + "agent_name": agent.name, + "opening_question": opening_question, + }, + ) + + # Build the system prompt with full agent output context + try: + output_str = json.dumps(agent_output, indent=2, default=str) + except (TypeError, ValueError): + output_str = str(agent_output) + + system_prompt = DIALOG_AGENT_SYSTEM_PROMPT.format( + agent_name=agent.name, agent_output=output_str + ) + + # Record the opening question as the first agent message + result.messages.append(DialogMessage(role="agent", content=opening_question)) + self._emit_event( + "dialog_message", + { + "dialog_id": dialog_id, + "agent_name": agent.name, + "role": "agent", + "content": opening_question, + }, + ) + + # Wait for engagement decision from web client + msg = await self.web_dashboard.wait_for_dialog_message(agent.name, dialog_id) + if msg.get("type") == "dialog_decline": + result.user_declined = True + self._emit_event( + "dialog_completed", + { + "dialog_id": dialog_id, + "agent_name": agent.name, + "turn_count": len(result.messages), + "user_declined": True, + }, + ) + return result + + # First message content from the user (engagement + first input) + user_input = msg.get("content", "") + history: list[dict[str, str]] = [] + + # Process first user message + result.messages.append(DialogMessage(role="user", content=user_input)) + self._emit_event( + "dialog_message", + { + "dialog_id": dialog_id, + "agent_name": agent.name, + "role": "user", + "content": user_input, + }, + ) + + if self._is_dismiss(user_input): + result.user_dismissed = True + self._emit_event( + "dialog_completed", + { + "dialog_id": dialog_id, + "agent_name": agent.name, + "turn_count": len(result.messages), + "user_dismissed": True, + }, + ) + return result + + # Dialog loop + while True: + # Send to agent and get response + history.append({"role": "user", "content": user_input}) + try: + agent_response = await provider.execute_dialog_turn( + system_prompt=system_prompt, + user_message=user_input, + history=history[:-1], + model=agent.model, + ) + except Exception: + # Roll back the user turn so the next attempt doesn't leave two + # consecutive user messages in the provider context. + history.pop() + logger.warning( + "Dialog turn failed for agent '%s'", + agent.name, + exc_info=True, + ) + # Emit a failure message so user knows + self._emit_event( + "dialog_message", + { + "dialog_id": dialog_id, + "agent_name": agent.name, + "role": "agent", + "content": "(Agent response failed — you can continue or type 'done')", + }, + ) + # Wait for next user message + msg = await self.web_dashboard.wait_for_dialog_message(agent.name, dialog_id) + if msg.get("type") == "dialog_decline": + result.user_dismissed = True + break + user_input = msg.get("content", "") + result.messages.append(DialogMessage(role="user", content=user_input)) + self._emit_event( + "dialog_message", + { + "dialog_id": dialog_id, + "agent_name": agent.name, + "role": "user", + "content": user_input, + }, + ) + if self._is_dismiss(user_input): + result.user_dismissed = True + break + continue + + history.append({"role": "assistant", "content": agent_response}) + ready_proposed, clean_response = _extract_ready_marker(agent_response) + stored_response = clean_response if ready_proposed else agent_response + result.messages.append(DialogMessage(role="agent", content=stored_response)) + + # Check if agent proposed completion (terminal marker only) + if ready_proposed: + result.agent_proposed_continue = True + self._emit_event( + "dialog_message", + { + "dialog_id": dialog_id, + "agent_name": agent.name, + "role": "agent", + "content": clean_response + + "\n\n*The agent believes it has enough information to continue.*", + }, + ) + # Wait for approval or continuation + msg = await self.web_dashboard.wait_for_dialog_message(agent.name, dialog_id) + if msg.get("type") == "dialog_decline": + break + approval = msg.get("content", "") + if approval.lower() in ("yes", "y", ""): + break + # User wants to keep chatting — treat approval as the next user + # turn. The loop top will append it to provider history exactly + # once; we only update the transcript / UI here. + user_input = approval + result.messages.append(DialogMessage(role="user", content=approval)) + self._emit_event( + "dialog_message", + { + "dialog_id": dialog_id, + "agent_name": agent.name, + "role": "user", + "content": approval, + }, + ) + continue + + self._emit_event( + "dialog_message", + { + "dialog_id": dialog_id, + "agent_name": agent.name, + "role": "agent", + "content": stored_response, + }, + ) + + # Wait for next user message + msg = await self.web_dashboard.wait_for_dialog_message(agent.name, dialog_id) + if msg.get("type") == "dialog_decline": + result.user_dismissed = True + break + user_input = msg.get("content", "") + result.messages.append(DialogMessage(role="user", content=user_input)) + self._emit_event( + "dialog_message", + { + "dialog_id": dialog_id, + "agent_name": agent.name, + "role": "user", + "content": user_input, + }, + ) + + if self._is_dismiss(user_input): + result.user_dismissed = True + break + + self._emit_event( + "dialog_completed", + { + "dialog_id": dialog_id, + "agent_name": agent.name, + "turn_count": len(result.messages), + "user_dismissed": result.user_dismissed, + "agent_proposed_continue": result.agent_proposed_continue, + }, + ) + + return result + + def _display_dialog_start( + self, + agent: AgentDef, + agent_output: dict[str, Any], + opening_question: str, + base_dir: Path | None = None, + ) -> None: + """Display the dialog opening with full agent context.""" + self.console.print() + self.console.print( + Panel( + Text.from_markup( + f"[bold]Agent '{agent.name}'[/bold] would like to discuss " + f"its output with you.\n" + f"[dim]Type your responses below. Say [bold]done[/bold] or " + f"[bold]/done[/bold] when finished.[/dim]" + ), + title="[bold magenta]Dialog Mode[/bold magenta]", + border_style="magenta", + ) + ) + + # Show agent output with full context + try: + output_str = json.dumps(agent_output, indent=2, default=str) + except (TypeError, ValueError): + output_str = str(agent_output) + + # Linkify file paths in the output for clickable links + output_display = linkify_markdown(output_str, base_dir=base_dir) + + self.console.print() + self.console.print( + Panel( + RichMarkdown(f"```json\n{output_display}\n```"), + title="[bold cyan]Agent Output (Full Context)[/bold cyan]", + border_style="cyan", + expand=True, + ) + ) + + # Show the opening question + self.console.print() + question_display = linkify_markdown(opening_question, base_dir=base_dir) + self.console.print( + Panel( + RichMarkdown(question_display), + title=f"[bold yellow]{agent.name}[/bold yellow]", + border_style="yellow", + ) + ) + + def _display_agent_message(self, message: str) -> None: + """Display an agent message in the dialog.""" + self.console.print() + self.console.print( + Panel( + RichMarkdown(message), + border_style="yellow", + ) + ) + + def _display_continue_proposal(self) -> None: + """Display the agent's proposal to continue.""" + self.console.print() + msg = ( + "[bold magenta] ↳ The agent believes it has enough " + "information to continue.[/bold magenta]" + ) + self.console.print(msg) + + def _display_dialog_end(self, dismissed_by: str) -> None: + """Display dialog conclusion message.""" + self.console.print() + if dismissed_by == "user": + self.console.print( + "[dim magenta] ✓ Dialog ended by user — agent resuming.[/dim magenta]" + ) + elif dismissed_by == "agent_approved": + self.console.print("[dim magenta] ✓ Agent continuing — dialog complete.[/dim magenta]") + elif dismissed_by == "declined": + self.console.print( + "[dim magenta] ✓ Dialog declined — agent will do" + " its best and continue.[/dim magenta]" + ) + self.console.print() + + async def _ask_engagement(self) -> str: + """Ask the user whether they want to engage in the dialog. + + Returns: + "engage" if the user wants to chat, "decline" to skip. + """ + self.console.print() + self.console.print("[bold]How would you like to proceed?[/bold]") + self.console.print(" [cyan][1][/cyan] Discuss this with the agent") + self.console.print(" [cyan][2][/cyan] Do your best and continue [dim](skip dialog)[/dim]") + + def _ask() -> str: + return Prompt.ask( + "\n[bold]Select[/bold]", + choices=["1", "2"], + default="1", + show_choices=True, + ) + + choice = await asyncio.to_thread(_ask) + return "engage" if choice == "1" else "decline" + + async def _get_user_input( + self, + prompt_text: str = "[bold magenta]You[/bold magenta]", + ) -> str | None: + """Get user input from the terminal. + + Runs in a thread to avoid blocking the event loop. + + Returns: + User input text, or None on EOF/error. + """ + try: + + def _ask() -> str: + return Prompt.ask(prompt_text) + + return await asyncio.to_thread(_ask) + except (EOFError, KeyboardInterrupt): + return None + + def _is_dismiss(self, text: str) -> bool: + """Check if user input is a dismiss signal.""" + return text.strip().lower() in DISMISS_KEYWORDS + + def _emit_event(self, event_type: str, data: dict[str, Any]) -> None: + """Emit a dialog event if emitter is available.""" + if self.emitter is not None: + import time + + from conductor.events import WorkflowEvent + + self.emitter.emit( + WorkflowEvent( + type=event_type, + timestamp=time.time(), + data=data, + ) + ) diff --git a/src/conductor/providers/base.py b/src/conductor/providers/base.py index 2b56c6b..adfba7f 100644 --- a/src/conductor/providers/base.py +++ b/src/conductor/providers/base.py @@ -165,6 +165,35 @@ async def execute( """ ... + async def execute_dialog_turn( + self, + system_prompt: str, + user_message: str, + history: list[dict[str, str]] | None = None, + model: str | None = None, + ) -> str: + """Execute a single dialog turn for agent-user conversation. + + Used by the dialog evaluator and dialog handler for lightweight + conversational exchanges. Creates a fresh, short-lived session + for each call — not tied to the agent's main execution session. + + Args: + system_prompt: System prompt providing dialog context. + user_message: The latest user message. + history: Optional prior conversation history as a list of + ``{"role": "user"|"assistant", "content": "..."}`` dicts. + model: Optional model override. If not provided, uses the + provider's default model. + + Returns: + The agent's response text. + + Raises: + ProviderError: If the dialog turn fails. + """ + raise NotImplementedError(f"{type(self).__name__} does not support dialog turns") + @abstractmethod async def validate_connection(self) -> bool: """Verify the provider can connect to its backend. diff --git a/src/conductor/providers/claude.py b/src/conductor/providers/claude.py index b3feec8..143d9b5 100644 --- a/src/conductor/providers/claude.py +++ b/src/conductor/providers/claude.py @@ -469,8 +469,71 @@ async def close(self) -> None: await client.close() logger.debug("Claude provider closed") - # Drop cached metadata so a re-initialized provider re-fetches. - self._max_input_cache = None + # Drop cached metadata so a re-initialized provider re-fetches. + self._max_input_cache = None + + async def execute_dialog_turn( + self, + system_prompt: str, + user_message: str, + history: list[dict[str, str]] | None = None, + model: str | None = None, + ) -> str: + """Execute a single dialog turn using the Claude messages API. + + Creates a lightweight message call with the conversation context + and returns the agent's response text. + + Args: + system_prompt: System prompt providing dialog context. + user_message: The latest user message. + history: Optional prior conversation history. + model: Optional model override. Falls back to provider default. + + Returns: + The agent's response text. + + Raises: + ProviderError: If the dialog turn fails. + """ + if self._client is None: + raise ProviderError( + "Claude client not initialized", + suggestion="Call validate_connection() first", + ) + + # Build messages list from history + current message + messages: list[dict[str, str]] = [] + for msg in history or []: + messages.append( + { + "role": msg["role"], + "content": msg["content"], + } + ) + messages.append({"role": "user", "content": user_message}) + + try: + response = await self._client.messages.create( + model=model or self._default_model, + max_tokens=4096, + system=system_prompt, + messages=messages, + ) + + # Extract text from response + text_parts = [] + for block in response.content: + if hasattr(block, "text"): + text_parts.append(block.text) + + return "\n".join(text_parts) if text_parts else "" + + except Exception as exc: + raise ProviderError( + f"Dialog turn failed: {exc}", + is_retryable=False, + ) from exc async def execute( self, diff --git a/src/conductor/providers/copilot.py b/src/conductor/providers/copilot.py index e9538bd..5becd26 100644 --- a/src/conductor/providers/copilot.py +++ b/src/conductor/providers/copilot.py @@ -1775,6 +1775,97 @@ async def validate_connection(self) -> bool: is_retryable=False, ) from e + async def execute_dialog_turn( + self, + system_prompt: str, + user_message: str, + history: list[dict[str, str]] | None = None, + model: str | None = None, + ) -> str: + """Execute a single dialog turn using a lightweight Copilot session. + + Creates a fresh session for the dialog, sends the conversation + context, and returns the agent's response. The session is destroyed + after the turn completes. + + Args: + system_prompt: System prompt providing dialog context. + user_message: The latest user message. + history: Optional prior conversation history. + model: Optional model override. Falls back to provider default. + + Returns: + The agent's response text. + + Raises: + ProviderError: If the dialog turn fails. + """ + await self._ensure_client_started() + + # Build the full prompt from history + current message + # System prompt is passed via create_session's system_message parameter + # to replace the SDK's default identity instructions. + parts = [] + for msg in history or []: + role_label = "User" if msg["role"] == "user" else "Assistant" + parts.append(f"{role_label}: {msg['content']}") + parts.append(f"User: {user_message}") + full_prompt = "\n\n".join(parts) + + session = None + try: + session = await self._client.create_session( + model=model or self._default_model, + on_permission_request=self._default_permission_handler, + system_message={"mode": "replace", "content": system_prompt}, + ) + + response_content = "" + done = asyncio.Event() + error_message: str | None = None + + def on_event(event: Any) -> None: + nonlocal response_content, error_message + event_type = event.type.value if hasattr(event.type, "value") else str(event.type) + if event_type == "assistant.message": + response_content = event.data.content + elif event_type == "session.idle": + done.set() + elif event_type in ("error", "session.error"): + error_message = getattr(event.data, "message", str(event.data)) + done.set() + + session.on(on_event) + await session.send(full_prompt) + + try: + await asyncio.wait_for(done.wait(), timeout=120.0) + except TimeoutError as exc: + raise ProviderError( + "Dialog turn timed out after 120s", + is_retryable=False, + ) from exc + + if error_message: + raise ProviderError( + f"Dialog turn error: {error_message}", + is_retryable=False, + ) + + return response_content + + except ProviderError: + raise + except Exception as exc: + raise ProviderError( + f"Dialog turn failed: {exc}", + is_retryable=False, + ) from exc + finally: + if session is not None: + with contextlib.suppress(Exception): + await session.destroy() + async def close(self) -> None: """Close Copilot SDK client. diff --git a/src/conductor/web/frontend/package-lock.json b/src/conductor/web/frontend/package-lock.json index aac1f7b..f2d2801 100644 --- a/src/conductor/web/frontend/package-lock.json +++ b/src/conductor/web/frontend/package-lock.json @@ -16,6 +16,7 @@ "react-dom": "^19.0.0", "react-markdown": "^10.1.0", "react-resizable-panels": "^2.1.7", + "remark-gfm": "^4.0.1", "tailwind-merge": "^2.6.0", "zustand": "^5.0.3" }, @@ -60,6 +61,7 @@ "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/generator": "^7.29.0", @@ -1661,6 +1663,7 @@ "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.14.tgz", "integrity": "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==", "license": "MIT", + "peer": true, "dependencies": { "csstype": "^3.2.2" } @@ -1811,6 +1814,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -1991,6 +1995,7 @@ "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", "license": "ISC", + "peer": true, "engines": { "node": ">=12" } @@ -2174,6 +2179,18 @@ "node": ">=6" } }, + "node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/estree-util-is-identifier-name": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz", @@ -2695,6 +2712,32 @@ "@jridgewell/sourcemap-codec": "^1.5.5" } }, + "node_modules/markdown-table": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz", + "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdast-util-find-and-replace": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz", + "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "escape-string-regexp": "^5.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/mdast-util-from-markdown": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.3.tgz", @@ -2719,6 +2762,107 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/mdast-util-gfm": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz", + "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==", + "license": "MIT", + "dependencies": { + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-gfm-autolink-literal": "^2.0.0", + "mdast-util-gfm-footnote": "^2.0.0", + "mdast-util-gfm-strikethrough": "^2.0.0", + "mdast-util-gfm-table": "^2.0.0", + "mdast-util-gfm-task-list-item": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-autolink-literal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz", + "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "ccount": "^2.0.0", + "devlop": "^1.0.0", + "mdast-util-find-and-replace": "^3.0.0", + "micromark-util-character": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-strikethrough": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", + "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", + "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "markdown-table": "^3.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-task-list-item": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", + "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/mdast-util-mdx-expression": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz", @@ -2917,6 +3061,127 @@ "micromark-util-types": "^2.0.0" } }, + "node_modules/micromark-extension-gfm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", + "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", + "license": "MIT", + "dependencies": { + "micromark-extension-gfm-autolink-literal": "^2.0.0", + "micromark-extension-gfm-footnote": "^2.0.0", + "micromark-extension-gfm-strikethrough": "^2.0.0", + "micromark-extension-gfm-table": "^2.0.0", + "micromark-extension-gfm-tagfilter": "^2.0.0", + "micromark-extension-gfm-task-list-item": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-autolink-literal": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", + "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-strikethrough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz", + "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-table": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz", + "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-tagfilter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", + "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-task-list-item": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz", + "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/micromark-factory-destination": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", @@ -3360,6 +3625,7 @@ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -3420,6 +3686,7 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.4.tgz", "integrity": "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==", "license": "MIT", + "peer": true, "dependencies": { "scheduler": "^0.27.0" }, @@ -3474,6 +3741,24 @@ "react-dom": "^16.14.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" } }, + "node_modules/remark-gfm": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz", + "integrity": "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-gfm": "^3.0.0", + "micromark-extension-gfm": "^3.0.0", + "remark-parse": "^11.0.0", + "remark-stringify": "^11.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/remark-parse": { "version": "11.0.0", "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", @@ -3507,6 +3792,21 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/remark-stringify": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", + "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-to-markdown": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/rollup": { "version": "4.59.0", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.59.0.tgz", @@ -3863,6 +4163,7 @@ "integrity": "sha512-2N/55r4JDJ4gdrCvGgINMy+HH3iRpNIz8K6SFwVsA+JbQScLiC+clmAxBgwiSPgcG9U15QmvqCGWzMbqda5zGQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.4.4", diff --git a/src/conductor/web/frontend/package.json b/src/conductor/web/frontend/package.json index c9ba64e..8c56cba 100644 --- a/src/conductor/web/frontend/package.json +++ b/src/conductor/web/frontend/package.json @@ -17,6 +17,7 @@ "react-dom": "^19.0.0", "react-markdown": "^10.1.0", "react-resizable-panels": "^2.1.7", + "remark-gfm": "^4.0.1", "tailwind-merge": "^2.6.0", "zustand": "^5.0.3" }, diff --git a/src/conductor/web/frontend/src/components/detail/DetailPanel.tsx b/src/conductor/web/frontend/src/components/detail/DetailPanel.tsx index 83b6b03..0e005f3 100644 --- a/src/conductor/web/frontend/src/components/detail/DetailPanel.tsx +++ b/src/conductor/web/frontend/src/components/detail/DetailPanel.tsx @@ -6,6 +6,8 @@ import { AgentDetail } from './AgentDetail'; import { ScriptDetail } from './ScriptDetail'; import { GateDetail } from './GateDetail'; import { GroupDetail } from './GroupDetail'; +import { DialogDetail } from './DialogDetail'; +import { DialogEngagementPrompt } from './DialogEngagementPrompt'; import { SubworkflowDetail } from './SubworkflowDetail'; import { cn } from '@/lib/utils'; @@ -13,6 +15,7 @@ export function DetailPanel() { const selectedNode = useWorkflowStore((s) => s.selectedNode); const viewedNodes = useViewedNodes(); const selectNode = useWorkflowStore((s) => s.selectNode); + const dialogEngaged = useWorkflowStore((s) => s.dialogEngaged); // Slide-in animation state const [mounted, setMounted] = useState(false); @@ -38,6 +41,10 @@ export function DetailPanel() { } const DetailComponent = (() => { + // Show engagement prompt when dialog is active but user hasn't engaged yet + if (node.dialog_active && !dialogEngaged) return DialogEngagementPrompt; + // When dialog is active and engaged, show normal agent detail + if (node.dialog_active && dialogEngaged) return AgentDetail; switch (node.type) { case 'script': return ScriptDetail; diff --git a/src/conductor/web/frontend/src/components/detail/DialogDetail.tsx b/src/conductor/web/frontend/src/components/detail/DialogDetail.tsx new file mode 100644 index 0000000..695a01a --- /dev/null +++ b/src/conductor/web/frontend/src/components/detail/DialogDetail.tsx @@ -0,0 +1,206 @@ +import { useState, useRef, useEffect } from 'react'; +import ReactMarkdown from 'react-markdown'; +import remarkGfm from 'remark-gfm'; +import { Send, MessageCircle } from 'lucide-react'; +import { useWorkflowStore } from '@/stores/workflow-store'; +import type { NodeData } from '@/stores/workflow-store'; + +interface DialogDetailProps { + node: NodeData; +} + +function DialogMarkdown({ text }: { text: string }) { + return ( +
+

{children}

, + h2: ({ children }) =>

{children}

, + h3: ({ children }) =>

{children}

, + p: ({ children }) =>

{children}

, + ul: ({ children }) => , + ol: ({ children }) =>
    {children}
, + li: ({ children }) =>
  • {children}
  • , + code: ({ children, className }) => { + const isBlock = className?.includes('language-'); + if (isBlock) { + return ( + + {children} + + ); + } + return ( + + {children} + + ); + }, + pre: ({ children }) => ( +
    +              {children}
    +            
    + ), + strong: ({ children }) => {children}, + em: ({ children }) => {children}, + a: ({ href, children }) => ( + + {children} + + ), + blockquote: ({ children }) => ( +
    + {children} +
    + ), + hr: () =>
    , + table: ({ children }) => ( +
    + {children}
    +
    + ), + th: ({ children }) => ( + {children} + ), + td: ({ children }) => ( + {children} + ), + }} + > + {text} +
    +
    + ); +} + +export function DialogDetail({ node }: DialogDetailProps) { + const sendDialogMessage = useWorkflowStore((s) => s.sendDialogMessage); + const wsStatus = useWorkflowStore((s) => s.wsStatus); + + const [inputValue, setInputValue] = useState(''); + const messagesEndRef = useRef(null); + + const isActive = node.dialog_active === true; + const dialogId = node.dialog_id || ''; + const messages = node.dialog_messages || []; + const canSend = isActive && wsStatus === 'connected'; + + // Auto-scroll to bottom on new messages + useEffect(() => { + messagesEndRef.current?.scrollIntoView({ behavior: 'smooth' }); + }, [messages.length, node.dialog_awaiting_response]); + + const handleSend = () => { + if (!inputValue.trim() || !canSend) return; + sendDialogMessage(node.name, dialogId, inputValue.trim()); + setInputValue(''); + }; + + const handleKeyDown = (e: React.KeyboardEvent) => { + if (e.key === 'Enter' && !e.shiftKey) { + e.preventDefault(); + handleSend(); + } + }; + + return ( +
    + {/* Header banner */} + {isActive ? ( +
    + + + + + + Dialog Mode + + + {messages.length} message{messages.length !== 1 ? 's' : ''} + +
    + ) : ( +
    + + + Dialog Completed + + + {messages.length} message{messages.length !== 1 ? 's' : ''} + +
    + )} + + {/* Messages area */} +
    + {messages.map((msg, idx) => ( +
    +
    +
    + {msg.role === 'agent' ? node.name : 'You'} +
    + +
    +
    + ))} + {node.dialog_awaiting_response && ( +
    +
    +
    {node.name}
    +
    + + + +
    +
    +
    + )} +
    +
    + + {/* Input area (shown when dialog is active) */} + {isActive && ( +
    +
    + setInputValue(e.target.value)} + onKeyDown={handleKeyDown} + placeholder="Type your message..." + className="flex-1 text-xs px-3 py-2 rounded-lg border border-[var(--border)] bg-[var(--bg)] text-[var(--text)] outline-none focus:border-fuchsia-400 transition-colors" + disabled={!canSend} + autoFocus + /> + +
    +

    + Press Enter to send · Type "done" to end dialog +

    +
    + )} +
    + ); +} diff --git a/src/conductor/web/frontend/src/components/detail/DialogEngagementPrompt.tsx b/src/conductor/web/frontend/src/components/detail/DialogEngagementPrompt.tsx new file mode 100644 index 0000000..239d227 --- /dev/null +++ b/src/conductor/web/frontend/src/components/detail/DialogEngagementPrompt.tsx @@ -0,0 +1,81 @@ +import { MessageCircle, X } from 'lucide-react'; +import ReactMarkdown from 'react-markdown'; +import remarkGfm from 'remark-gfm'; +import { useWorkflowStore } from '@/stores/workflow-store'; +import type { NodeData } from '@/stores/workflow-store'; + +interface DialogEngagementPromptProps { + node: NodeData; +} + +export function DialogEngagementPrompt({ node }: DialogEngagementPromptProps) { + const engageDialog = useWorkflowStore((s) => s.engageDialog); + const sendDialogDecline = useWorkflowStore((s) => s.sendDialogDecline); + const wsStatus = useWorkflowStore((s) => s.wsStatus); + + const dialogId = node.dialog_id || ''; + const messages = node.dialog_messages || []; + const canAct = wsStatus === 'connected'; + + // Show the first agent message (opening message) + const openingMessage = messages.find((m) => m.role === 'agent'); + + const handleDecline = () => { + if (!canAct) return; + sendDialogDecline(node.name, dialogId); + }; + + return ( +
    + {/* Active dialog banner */} +
    + + + + + + Dialog Requested + +
    + + {/* Opening agent message */} + {openingMessage && ( +
    +
    + {node.name} +
    +
    + + {openingMessage.content} + +
    +
    + )} + + {/* Engagement choice */} +
    +
    + How would you like to proceed? +
    +
    + + +
    +
    +
    + ); +} diff --git a/src/conductor/web/frontend/src/components/detail/DialogOverlay.tsx b/src/conductor/web/frontend/src/components/detail/DialogOverlay.tsx new file mode 100644 index 0000000..f94611a --- /dev/null +++ b/src/conductor/web/frontend/src/components/detail/DialogOverlay.tsx @@ -0,0 +1,30 @@ +import { useWorkflowStore } from '@/stores/workflow-store'; +import { DialogDetail } from './DialogDetail'; +import { MessageCircle } from 'lucide-react'; + +export function DialogOverlay() { + const activeDialog = useWorkflowStore((s) => s.activeDialog); + const nodes = useWorkflowStore((s) => s.nodes); + + if (!activeDialog) return null; + + const node = nodes[activeDialog.agentName]; + if (!node) return null; + + return ( +
    + {/* Header */} +
    + +

    + Dialog with {activeDialog.agentName} +

    +
    + + {/* Dialog content */} +
    + +
    +
    + ); +} diff --git a/src/conductor/web/frontend/src/components/layout/ResizableLayout.tsx b/src/conductor/web/frontend/src/components/layout/ResizableLayout.tsx index 8f44ff7..7a27ab3 100644 --- a/src/conductor/web/frontend/src/components/layout/ResizableLayout.tsx +++ b/src/conductor/web/frontend/src/components/layout/ResizableLayout.tsx @@ -3,9 +3,12 @@ import { WorkflowGraph } from '@/components/graph/WorkflowGraph'; import { DetailPanel } from '@/components/detail/DetailPanel'; import { OutputPane } from '@/components/layout/OutputPane'; import { useWorkflowStore } from '@/stores/workflow-store'; +import { DialogOverlay } from '@/components/detail/DialogOverlay'; export function ResizableLayout() { const selectedNode = useWorkflowStore((s) => s.selectedNode); + const activeDialog = useWorkflowStore((s) => s.activeDialog); + const dialogEngaged = useWorkflowStore((s) => s.dialogEngaged); return ( @@ -13,7 +16,7 @@ export function ResizableLayout() { - + {activeDialog && dialogEngaged ? : } {selectedNode && ( <> diff --git a/src/conductor/web/frontend/src/stores/workflow-store.ts b/src/conductor/web/frontend/src/stores/workflow-store.ts index acb862a..5c9785c 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, + DialogStartedData, + DialogMessageData, + DialogCompletedData, SubworkflowStartedData, SubworkflowCompletedData, SubworkflowFailedData, @@ -114,6 +117,11 @@ export interface NodeData { startedAt?: number; // Iteration history (snapshots of completed previous iterations) iterationHistory?: IterationSnapshot[]; + // Dialog-specific + dialog_id?: string; + dialog_messages?: Array<{ role: 'user' | 'agent'; content: string }>; + dialog_active?: boolean; + dialog_awaiting_response?: boolean; } export interface GroupProgress { @@ -319,6 +327,12 @@ interface WorkflowState { _wsSend: ((data: object) => void) | null; setWsSend: (fn: ((data: object) => void) | null) => void; sendGateResponse: (agentName: string, selectedValue: string, additionalInput?: Record) => void; + // Dialog state + activeDialog: { agentName: string; dialogId: string } | null; + dialogEngaged: boolean; + engageDialog: () => void; + sendDialogMessage: (agentName: string, dialogId: string, message: string) => void; + sendDialogDecline: (agentName: string, dialogId: string) => void; } function ensureNode(nodes: Record, name: string, type: NodeType = 'agent'): NodeData { @@ -507,6 +521,41 @@ export const useWorkflowStore = create((set, get) => ({ } }, + activeDialog: null, + dialogEngaged: false, + + engageDialog: () => { + set({ dialogEngaged: true }); + }, + + sendDialogMessage: (agentName, dialogId, message) => { + const send = useWorkflowStore.getState()._wsSend; + if (send) { + send({ + type: 'dialog_message', + agent_name: agentName, + dialog_id: dialogId, + content: message, + }); + // No optimistic update — the server echoes the user message back as a + // `dialog_message` event with role='user', and the handler below flips + // `dialog_awaiting_response` accordingly. Keeps state transitions in one + // place and avoids a race where the agent reply arrives before the + // optimistic set commits. + } + }, + + sendDialogDecline: (agentName, dialogId) => { + const send = useWorkflowStore.getState()._wsSend; + if (send) { + send({ + type: 'dialog_decline', + agent_name: agentName, + dialog_id: dialogId, + }); + } + }, + processEvent: (event: WorkflowEvent) => { const handler = eventHandlers[event.type]; set((state) => { @@ -540,6 +589,8 @@ export const useWorkflowStore = create((set, get) => ({ activityLog: [], workflowOutput: null, workflowFailedAgent: null, + activeDialog: null, + dialogEngaged: false, wfDepth: 0, subworkflowContexts: [], activeContextPath: [], @@ -587,6 +638,8 @@ export const useWorkflowStore = create((set, get) => ({ activityLog: [], workflowOutput: null, workflowFailedAgent: null, + activeDialog: null, + dialogEngaged: false, wfDepth: 0, subworkflowContexts: [], activeContextPath: [], @@ -632,6 +685,8 @@ export const useWorkflowStore = create((set, get) => ({ forEachGroups: [], isPaused: false, lastEventTime: null, + activeDialog: null, + dialogEngaged: false, wfDepth: 0, subworkflowContexts: [], activeContextPath: [], @@ -1530,6 +1585,44 @@ const eventHandlers: Record { + const data = _data as unknown as DialogStartedData; + const nd = ensureNode(state.nodes, data.agent_name); + nd.dialog_id = data.dialog_id; + nd.dialog_messages = []; + nd.dialog_active = true; + nd.dialog_awaiting_response = false; + state.activeDialog = { agentName: data.agent_name, dialogId: data.dialog_id }; + state.dialogEngaged = false; + replaceNode(state.nodes, data.agent_name); + }, + + dialog_message: (state, _data) => { + const data = _data as unknown as DialogMessageData; + const nd = ensureNode(state.nodes, data.agent_name); + if (!nd.dialog_messages) nd.dialog_messages = []; + nd.dialog_messages.push({ role: data.role, content: data.content }); + // A user message means we're now waiting on the agent; an agent message + // means we're not. Centralizing the flag here (instead of optimistically + // toggling it in `sendDialogMessage`) keeps the state machine single-sourced. + if (data.role === 'user') { + nd.dialog_awaiting_response = true; + } else if (data.role === 'agent') { + nd.dialog_awaiting_response = false; + } + replaceNode(state.nodes, data.agent_name); + }, + + dialog_completed: (state, _data) => { + const data = _data as unknown as DialogCompletedData; + const nd = ensureNode(state.nodes, data.agent_name); + nd.dialog_active = false; + nd.dialog_awaiting_response = false; + state.activeDialog = null; + state.dialogEngaged = false; + replaceNode(state.nodes, data.agent_name); + }, }; // --- Build log entries from events --- @@ -1609,6 +1702,12 @@ function buildLogEntry(event: WorkflowEvent): LogEntry | null { case 'agent_resumed': return { timestamp: ts, level: 'info', source: String(d.agent_name), message: 'Agent resumed — re-executing' }; + case 'dialog_started': + return { timestamp: ts, level: 'warning', source: String(d.agent_name), message: 'Dialog started — waiting for user…' }; + + case 'dialog_completed': + return { timestamp: ts, level: 'success', source: String(d.agent_name), message: `Dialog completed (${d.turn_count || 0} messages)` }; + // Skip high-frequency streaming events from the log default: return null; diff --git a/src/conductor/web/frontend/src/types/events.ts b/src/conductor/web/frontend/src/types/events.ts index e90544e..f95a9d7 100644 --- a/src/conductor/web/frontend/src/types/events.ts +++ b/src/conductor/web/frontend/src/types/events.ts @@ -39,7 +39,10 @@ export type EventType = | 'workflow_failed' | 'checkpoint_saved' | 'agent_paused' - | 'agent_resumed'; + | 'agent_resumed' + | 'dialog_started' + | 'dialog_message' + | 'dialog_completed'; // --- Workflow lifecycle --- @@ -264,6 +267,30 @@ export interface AgentResumedData { agent_name: string; } +// --- Dialog events --- + +export interface DialogStartedData { + dialog_id: string; + agent_name: string; + opening_question: string; +} + +export interface DialogMessageData { + dialog_id: string; + agent_name: string; + role: 'user' | 'agent'; + content: string; +} + +export interface DialogCompletedData { + dialog_id: string; + agent_name: string; + turn_count: number; + user_dismissed?: boolean; + user_declined?: boolean; + agent_proposed_continue?: boolean; +} + // --- Subworkflow lifecycle --- export interface SubworkflowStartedData { diff --git a/src/conductor/web/server.py b/src/conductor/web/server.py index 75f86f1..8a9e141 100644 --- a/src/conductor/web/server.py +++ b/src/conductor/web/server.py @@ -78,6 +78,9 @@ def __init__( # Gate response channel (web client → engine) self._gate_response_queue: asyncio.Queue[dict[str, Any]] = asyncio.Queue() + # Dialog response channel (web client → engine) + self._dialog_response_queue: asyncio.Queue[dict[str, Any]] = asyncio.Queue() + # Auto-shutdown support (--web-bg) self._bg_event = asyncio.Event() self._grace_task: asyncio.Task[None] | None = None @@ -235,6 +238,11 @@ async def websocket_endpoint(ws: WebSocket) -> None: msg = json.loads(raw) if isinstance(msg, dict) and msg.get("type") == "gate_response": self._gate_response_queue.put_nowait(msg) + elif isinstance(msg, dict) and msg.get("type") in ( + "dialog_message", + "dialog_decline", + ): + self._dialog_response_queue.put_nowait(msg) except (json.JSONDecodeError, TypeError): pass # Ignore non-JSON messages (keep-alive pings) except WebSocketDisconnect: @@ -336,6 +344,36 @@ async def wait_for_gate_response(self, agent_name: str) -> dict[str, Any]: agent_name, ) + async def wait_for_dialog_message(self, agent_name: str, dialog_id: str) -> dict[str, Any]: + """Wait for a dialog message or decline from the web client. + + Blocks until a ``dialog_message`` or ``dialog_decline`` message is + received via WebSocket that matches both the given agent name and + dialog id. Messages from a stale or different dialog are dropped so + a re-entered dialog can't be confused with the previous one. + + Args: + agent_name: The name of the agent in dialog mode. + dialog_id: The dialog session identifier. + + Returns: + The dialog response payload dict with keys ``type`` + (``dialog_message`` or ``dialog_decline``) and optionally + ``content``. + """ + while True: + msg = await self._dialog_response_queue.get() + if msg.get("agent_name") == agent_name and msg.get("dialog_id") == dialog_id: + return msg + logger.warning( + "Discarding stale dialog message for agent %r / dialog %r " + "while waiting on agent %r / dialog %r", + msg.get("agent_name"), + msg.get("dialog_id"), + agent_name, + dialog_id, + ) + # ------------------------------------------------------------------ # Auto-shutdown (--web-bg) # ------------------------------------------------------------------ diff --git a/src/conductor/web/static/assets/index-Bj4GrM3A.css b/src/conductor/web/static/assets/index-Bj4GrM3A.css new file mode 100644 index 0000000..2b9745e --- /dev/null +++ b/src/conductor/web/static/assets/index-Bj4GrM3A.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-fuchsia-300:oklch(83.3% .145 321.434);--color-fuchsia-400:oklch(74% .238 322.16);--color-fuchsia-500:oklch(66.7% .295 322.15);--color-fuchsia-600:oklch(59.1% .293 322.896);--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;--animate-bounce:bounce 1s 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)}.mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.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}.table{display:table}.\!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}.min-h-0{min-height:calc(var(--spacing) * 0)}.\!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-\[85\%\]{max-width:85%}.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}.border-collapse{border-collapse:collapse}.-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-bounce{animation:var(--animate-bounce)}.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}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.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-blue-500\/30{border-color:#3080ff4d}@supports (color:color-mix(in lab,red,red)){.border-blue-500\/30{border-color:color-mix(in oklab,var(--color-blue-500) 30%,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-fuchsia-500\/30{border-color:#e12afb4d}@supports (color:color-mix(in lab,red,red)){.border-fuchsia-500\/30{border-color:color-mix(in oklab,var(--color-fuchsia-500) 30%,transparent)}}.border-fuchsia-500\/40{border-color:#e12afb66}@supports (color:color-mix(in lab,red,red)){.border-fuchsia-500\/40{border-color:color-mix(in oklab,var(--color-fuchsia-500) 40%,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-400\/60{background-color:#fcbb0099}@supports (color:color-mix(in lab,red,red)){.bg-amber-400\/60{background-color:color-mix(in oklab,var(--color-amber-400) 60%,transparent)}}.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-blue-500\/10{background-color:#3080ff1a}@supports (color:color-mix(in lab,red,red)){.bg-blue-500\/10{background-color:color-mix(in oklab,var(--color-blue-500) 10%,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-fuchsia-400{background-color:var(--color-fuchsia-400)}.bg-fuchsia-500{background-color:var(--color-fuchsia-500)}.bg-fuchsia-500\/10{background-color:#e12afb1a}@supports (color:color-mix(in lab,red,red)){.bg-fuchsia-500\/10{background-color:color-mix(in oklab,var(--color-fuchsia-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)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-8{padding-inline:calc(var(--spacing) * 8)}.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-3{padding-top:calc(var(--spacing) * 3)}.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-fuchsia-300{color:var(--color-fuchsia-300)}.text-fuchsia-400{color:var(--color-fuchsia-400)}.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}.\[animation-delay\:0ms\]{animation-delay:0s}.\[animation-delay\:150ms\]{animation-delay:.15s}.\[animation-delay\:300ms\]{animation-delay:.3s}@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-fuchsia-500\/20:hover{background-color:#e12afb33}@supports (color:color-mix(in lab,red,red)){.hover\:bg-fuchsia-500\/20:hover{background-color:color-mix(in oklab,var(--color-fuchsia-500) 20%,transparent)}}.hover\:bg-fuchsia-600:hover{background-color:var(--color-fuchsia-600)}.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)}.focus\:border-fuchsia-400:focus{border-color:var(--color-fuchsia-400)}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-40:disabled{opacity:.4}.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}}@keyframes bounce{0%,to{animation-timing-function:cubic-bezier(.8,0,1,1);transform:translateY(-25%)}50%{animation-timing-function:cubic-bezier(0,0,.2,1);transform:none}}.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-DpoyItEc.js b/src/conductor/web/static/assets/index-DpoyItEc.js new file mode 100644 index 0000000..8b4a694 --- /dev/null +++ b/src/conductor/web/static/assets/index-DpoyItEc.js @@ -0,0 +1,341 @@ +var P2=Object.defineProperty;var V2=(e,n,r)=>n in e?P2(e,n,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[n]=r;var Ct=(e,n,r)=>V2(e,typeof n!="symbol"?n+"":n,r);function $2(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 o of a)if(o.type==="childList")for(const u of o.addedNodes)u.tagName==="LINK"&&u.rel==="modulepreload"&&l(u)}).observe(document,{childList:!0,subtree:!0});function r(a){const o={};return a.integrity&&(o.integrity=a.integrity),a.referrerPolicy&&(o.referrerPolicy=a.referrerPolicy),a.crossOrigin==="use-credentials"?o.credentials="include":a.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function l(a){if(a.ep)return;a.ep=!0;const o=r(a);fetch(a.href,o)}})();function Qo(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var nh={exports:{}},po={};/** + * @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 Uy;function G2(){if(Uy)return po;Uy=1;var e=Symbol.for("react.transitional.element"),n=Symbol.for("react.fragment");function r(l,a,o){var u=null;if(o!==void 0&&(u=""+o),a.key!==void 0&&(u=""+a.key),"key"in a){o={};for(var c in a)c!=="key"&&(o[c]=a[c])}else o=a;return a=o.ref,{$$typeof:e,type:l,key:u,ref:a!==void 0?a:null,props:o}}return po.Fragment=n,po.jsx=r,po.jsxs=r,po}var Py;function F2(){return Py||(Py=1,nh.exports=G2()),nh.exports}var b=F2(),rh={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 Vy;function Y2(){if(Vy)return Ae;Vy=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"),o=Symbol.for("react.consumer"),u=Symbol.for("react.context"),c=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"),x=Symbol.iterator;function v(I){return I===null||typeof I!="object"?null:(I=x&&I[x]||I["@@iterator"],typeof I=="function"?I:null)}var w={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},E=Object.assign,S={};function _(I,Y,N){this.props=I,this.context=Y,this.refs=S,this.updater=N||w}_.prototype.isReactComponent={},_.prototype.setState=function(I,Y){if(typeof I!="object"&&typeof I!="function"&&I!=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,I,Y,"setState")},_.prototype.forceUpdate=function(I){this.updater.enqueueForceUpdate(this,I,"forceUpdate")};function T(){}T.prototype=_.prototype;function k(I,Y,N){this.props=I,this.context=Y,this.refs=S,this.updater=N||w}var A=k.prototype=new T;A.constructor=k,E(A,_.prototype),A.isPureReactComponent=!0;var q=Array.isArray;function j(){}var L={H:null,A:null,T:null,S:null},O=Object.prototype.hasOwnProperty;function P(I,Y,N){var $=N.ref;return{$$typeof:e,type:I,key:Y,ref:$!==void 0?$:null,props:N}}function R(I,Y){return P(I.type,Y,I.props)}function H(I){return typeof I=="object"&&I!==null&&I.$$typeof===e}function U(I){var Y={"=":"=0",":":"=2"};return"$"+I.replace(/[=:]/g,function(N){return Y[N]})}var ee=/\/+/g;function B(I,Y){return typeof I=="object"&&I!==null&&I.key!=null?U(""+I.key):Y.toString(36)}function F(I){switch(I.status){case"fulfilled":return I.value;case"rejected":throw I.reason;default:switch(typeof I.status=="string"?I.then(j,j):(I.status="pending",I.then(function(Y){I.status==="pending"&&(I.status="fulfilled",I.value=Y)},function(Y){I.status==="pending"&&(I.status="rejected",I.reason=Y)})),I.status){case"fulfilled":return I.value;case"rejected":throw I.reason}}throw I}function z(I,Y,N,$,X){var J=typeof I;(J==="undefined"||J==="boolean")&&(I=null);var ne=!1;if(I===null)ne=!0;else switch(J){case"bigint":case"string":case"number":ne=!0;break;case"object":switch(I.$$typeof){case e:case n:ne=!0;break;case m:return ne=I._init,z(ne(I._payload),Y,N,$,X)}}if(ne)return X=X(I),ne=$===""?"."+B(I,0):$,q(X)?(N="",ne!=null&&(N=ne.replace(ee,"$&/")+"/"),z(X,Y,N,"",function(xe){return xe})):X!=null&&(H(X)&&(X=R(X,N+(X.key==null||I&&I.key===X.key?"":(""+X.key).replace(ee,"$&/")+"/")+ne)),Y.push(X)),1;ne=0;var re=$===""?".":$+":";if(q(I))for(var se=0;se>>1,M=z[K];if(0>>1;Ka(N,Q))$a(X,N)?(z[K]=X,z[$]=Q,K=$):(z[K]=N,z[Y]=Q,K=Y);else if($a(X,Q))z[K]=X,z[$]=Q,K=$;else break e}}return G}function a(z,G){var Q=z.sortIndex-G.sortIndex;return Q!==0?Q:z.id-G.id}if(e.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var o=performance;e.unstable_now=function(){return o.now()}}else{var u=Date,c=u.now();e.unstable_now=function(){return u.now()-c}}var d=[],h=[],m=1,p=null,x=3,v=!1,w=!1,E=!1,S=!1,_=typeof setTimeout=="function"?setTimeout:null,T=typeof clearTimeout=="function"?clearTimeout:null,k=typeof setImmediate<"u"?setImmediate:null;function A(z){for(var G=r(h);G!==null;){if(G.callback===null)l(h);else if(G.startTime<=z)l(h),G.sortIndex=G.expirationTime,n(d,G);else break;G=r(h)}}function q(z){if(E=!1,A(z),!w)if(r(d)!==null)w=!0,j||(j=!0,U());else{var G=r(h);G!==null&&F(q,G.startTime-z)}}var j=!1,L=-1,O=5,P=-1;function R(){return S?!0:!(e.unstable_now()-Pz&&R());){var K=p.callback;if(typeof K=="function"){p.callback=null,x=p.priorityLevel;var M=K(p.expirationTime<=z);if(z=e.unstable_now(),typeof M=="function"){p.callback=M,A(z),G=!0;break t}p===r(d)&&l(d),A(z)}else l(d);p=r(d)}if(p!==null)G=!0;else{var I=r(h);I!==null&&F(q,I.startTime-z),G=!1}}break e}finally{p=null,x=Q,v=!1}G=void 0}}finally{G?U():j=!1}}}var U;if(typeof k=="function")U=function(){k(H)};else if(typeof MessageChannel<"u"){var ee=new MessageChannel,B=ee.port2;ee.port1.onmessage=H,U=function(){B.postMessage(null)}}else U=function(){_(H,0)};function F(z,G){L=_(function(){z(e.unstable_now())},G)}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(z){z.callback=null},e.unstable_forceFrameRate=function(z){0>z||125K?(z.sortIndex=Q,n(h,z),r(d)===null&&z===r(h)&&(E?(T(L),L=-1):E=!0,F(q,Q-K))):(z.sortIndex=M,n(d,z),w||v||(w=!0,j||(j=!0,U()))),z},e.unstable_shouldYield=R,e.unstable_wrapCallback=function(z){var G=x;return function(){var Q=x;x=G;try{return z.apply(this,arguments)}finally{x=Q}}}})(ah)),ah}var Fy;function Z2(){return Fy||(Fy=1,lh.exports=Q2()),lh.exports}var oh={exports:{}},Ft={};/** + * @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 Yy;function K2(){if(Yy)return Ft;Yy=1;var e=Zo();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(),oh.exports=K2(),oh.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 Qy;function J2(){if(Qy)return mo;Qy=1;var e=Z2(),n=Zo(),r=cw();function l(t){var i="https://react.dev/errors/"+t;if(1M||(t.current=K[M],K[M]=null,M--)}function N(t,i){M++,K[M]=t.current,t.current=i}var $=I(null),X=I(null),J=I(null),ne=I(null);function re(t,i){switch(N(J,i),N(X,t),N($,null),i.nodeType){case 9:case 11:t=(t=i.documentElement)&&(t=t.namespaceURI)?cy(t):0;break;default:if(t=i.tagName,i=i.namespaceURI)i=cy(i),t=fy(i,t);else switch(t){case"svg":t=1;break;case"math":t=2;break;default:t=0}}Y($),N($,t)}function se(){Y($),Y(X),Y(J)}function xe(t){t.memoizedState!==null&&N(ne,t);var i=$.current,s=fy(i,t.type);i!==s&&(N(X,t),N($,s))}function be(t){X.current===t&&(Y($),Y(X)),ne.current===t&&(Y(ne),uo._currentValue=Q)}var ye,pe;function _e(t){if(ye===void 0)try{throw Error()}catch(s){var i=s.stack.trim().match(/\n( *(at )?)/);ye=i&&i[1]||"",pe=-1)":-1g||Z[f]!==le[g]){var ce=` +`+Z[f].replace(" at new "," at ");return t.displayName&&ce.includes("")&&(ce=ce.replace("",t.displayName)),ce}while(1<=f&&0<=g);break}}}finally{ze=!1,Error.prepareStackTrace=s}return(s=t?t.displayName||t.name:"")?_e(s):""}function ut(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 Te(t.type,!1);case 11:return Te(t.type.render,!1);case 1:return Te(t.type,!0);case 31:return _e("Activity");default:return""}}function nt(t){try{var i="",s=null;do i+=ut(t,s),s=t,t=t.return;while(t);return i}catch(f){return` +Error generating stack: `+f.message+` +`+f.stack}}var zt=Object.prototype.hasOwnProperty,Vt=e.unstable_scheduleCallback,Ht=e.unstable_cancelCallback,kn=e.unstable_shouldYield,Rn=e.unstable_requestPaint,Mt=e.unstable_now,Hr=e.unstable_getCurrentPriorityLevel,ue=e.unstable_ImmediatePriority,ge=e.unstable_UserBlockingPriority,Ne=e.unstable_NormalPriority,Oe=e.unstable_LowPriority,Xe=e.unstable_IdlePriority,Qt=e.log,On=e.unstable_setDisableYieldValue,Bt=null,vt=null;function $t(t){if(typeof Qt=="function"&&On(t),vt&&typeof vt.setStrictMode=="function")try{vt.setStrictMode(Bt,t)}catch{}}var We=Math.clz32?Math.clz32:Vc,Zn=Math.log,fn=Math.LN2;function Vc(t){return t>>>=0,t===0?32:31-(Zn(t)/fn|0)|0}var ul=256,cl=262144,fl=4194304;function sr(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 dl(t,i,s){var f=t.pendingLanes;if(f===0)return 0;var g=0,y=t.suspendedLanes,C=t.pingedLanes;t=t.warmLanes;var D=f&134217727;return D!==0?(f=D&~y,f!==0?g=sr(f):(C&=D,C!==0?g=sr(C):s||(s=D&~t,s!==0&&(g=sr(s))))):(D=f&~y,D!==0?g=sr(D):C!==0?g=sr(C):s||(s=f&~t,s!==0&&(g=sr(s)))),g===0?0:i!==0&&i!==g&&(i&y)===0&&(y=g&-g,s=i&-i,y>=s||y===32&&(s&4194048)!==0)?i:g}function bi(t,i){return(t.pendingLanes&~(t.suspendedLanes&~t.pingedLanes)&i)===0}function $c(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 ss(){var t=fl;return fl<<=1,(fl&62914560)===0&&(fl=4194304),t}function ba(t){for(var i=[],s=0;31>s;s++)i.push(t);return i}function wi(t,i){t.pendingLanes|=i,i!==268435456&&(t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0)}function Gc(t,i,s,f,g,y){var C=t.pendingLanes;t.pendingLanes=s,t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0,t.expiredLanes&=s,t.entangledLanes&=s,t.errorRecoveryDisabledLanes&=s,t.shellSuspendCounter=0;var D=t.entanglements,Z=t.expirationTimes,le=t.hiddenUpdates;for(s=C&~s;0"u")return null;try{return t.activeElement||t.body}catch{return t.body}}var Zc=/[\n"\\]/g;function en(t){return t.replace(Zc,function(i){return"\\"+i.charCodeAt(0).toString(16)+" "})}function ki(t,i,s,f,g,y,C,D){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=""+Wt(i)):t.value!==""+Wt(i)&&(t.value=""+Wt(i)):C!=="submit"&&C!=="reset"||t.removeAttribute("value"),i!=null?Ea(t,C,Wt(i)):s!=null?Ea(t,C,Wt(s)):f!=null&&t.removeAttribute("value"),g==null&&y!=null&&(t.defaultChecked=!!y),g!=null&&(t.checked=g&&typeof g!="function"&&typeof g!="symbol"),D!=null&&typeof D!="function"&&typeof D!="symbol"&&typeof D!="boolean"?t.name=""+Wt(D):t.removeAttribute("name")}function ws(t,i,s,f,g,y,C,D){if(y!=null&&typeof y!="function"&&typeof y!="symbol"&&typeof y!="boolean"&&(t.type=y),i!=null||s!=null){if(!(y!=="submit"&&y!=="reset"||i!=null)){Vr(t);return}s=s!=null?""+Wt(s):"",i=i!=null?""+Wt(i):s,D||i===t.value||(t.value=i),t.defaultValue=i}f=f??g,f=typeof f!="function"&&typeof f!="symbol"&&!!f,t.checked=D?t.checked:!!f,t.defaultChecked=!!f,C!=null&&typeof C!="function"&&typeof C!="symbol"&&typeof C!="boolean"&&(t.name=C),Vr(t)}function Ea(t,i,s){i==="number"&&_i(t.ownerDocument)===t||t.defaultValue===""+s||(t.defaultValue=""+s)}function fr(t,i,s,f){if(t=t.options,i){i={};for(var g=0;g"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),tf=!1;if(hr)try{var Ca={};Object.defineProperty(Ca,"passive",{get:function(){tf=!0}}),window.addEventListener("test",Ca,Ca),window.removeEventListener("test",Ca,Ca)}catch{tf=!1}var $r=null,nf=null,_s=null;function fg(){if(_s)return _s;var t,i=nf,s=i.length,f,g="value"in $r?$r.value:$r.textContent,y=g.length;for(t=0;t=ja),xg=" ",yg=!1;function vg(t,i){switch(t){case"keyup":return cE.indexOf(i.keyCode)!==-1;case"keydown":return i.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function bg(t){return t=t.detail,typeof t=="object"&&"data"in t?t.data:null}var vl=!1;function dE(t,i){switch(t){case"compositionend":return bg(i);case"keypress":return i.which!==32?null:(yg=!0,xg);case"textInput":return t=i.data,t===xg&&yg?null:t;default:return null}}function hE(t,i){if(vl)return t==="compositionend"||!sf&&vg(t,i)?(t=fg(),_s=nf=$r=null,vl=!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:s,offset:i-t};t=f}e:{for(;s;){if(s.nextSibling){s=s.nextSibling;break e}s=s.parentNode}s=void 0}s=Tg(s)}}function jg(t,i){return t&&i?t===i?!0:t&&t.nodeType===3?!1:i&&i.nodeType===3?jg(t,i.parentNode):"contains"in t?t.contains(i):t.compareDocumentPosition?!!(t.compareDocumentPosition(i)&16):!1:!1}function zg(t){t=t!=null&&t.ownerDocument!=null&&t.ownerDocument.defaultView!=null?t.ownerDocument.defaultView:window;for(var i=_i(t.document);i instanceof t.HTMLIFrameElement;){try{var s=typeof i.contentWindow.location.href=="string"}catch{s=!1}if(s)t=i.contentWindow;else break;i=_i(t.document)}return i}function ff(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 wE=hr&&"documentMode"in document&&11>=document.documentMode,bl=null,df=null,Ra=null,hf=!1;function Mg(t,i,s){var f=s.window===s?s.document:s.nodeType===9?s:s.ownerDocument;hf||bl==null||bl!==_i(f)||(f=bl,"selectionStart"in f&&ff(f)?f={start:f.selectionStart,end:f.selectionEnd}:(f=(f.ownerDocument&&f.ownerDocument.defaultView||window).getSelection(),f={anchorNode:f.anchorNode,anchorOffset:f.anchorOffset,focusNode:f.focusNode,focusOffset:f.focusOffset}),Ra&&Da(Ra,f)||(Ra=f,f=gu(df,"onSelect"),0>=C,g-=C,Jn=1<<32-We(i)+g|s<Me?(Pe=Se,Se=null):Pe=Se.sibling;var Ke=ae(te,Se,ie[Me],de);if(Ke===null){Se===null&&(Se=Pe);break}t&&Se&&Ke.alternate===null&&i(te,Se),W=y(Ke,W,Me),Ze===null?ke=Ke:Ze.sibling=Ke,Ze=Ke,Se=Pe}if(Me===ie.length)return s(te,Se),$e&&mr(te,Me),ke;if(Se===null){for(;MeMe?(Pe=Se,Se=null):Pe=Se.sibling;var di=ae(te,Se,Ke.value,de);if(di===null){Se===null&&(Se=Pe);break}t&&Se&&di.alternate===null&&i(te,Se),W=y(di,W,Me),Ze===null?ke=di:Ze.sibling=di,Ze=di,Se=Pe}if(Ke.done)return s(te,Se),$e&&mr(te,Me),ke;if(Se===null){for(;!Ke.done;Me++,Ke=ie.next())Ke=he(te,Ke.value,de),Ke!==null&&(W=y(Ke,W,Me),Ze===null?ke=Ke:Ze.sibling=Ke,Ze=Ke);return $e&&mr(te,Me),ke}for(Se=f(Se);!Ke.done;Me++,Ke=ie.next())Ke=oe(Se,te,Me,Ke.value,de),Ke!==null&&(t&&Ke.alternate!==null&&Se.delete(Ke.key===null?Me:Ke.key),W=y(Ke,W,Me),Ze===null?ke=Ke:Ze.sibling=Ke,Ze=Ke);return t&&Se.forEach(function(U2){return i(te,U2)}),$e&&mr(te,Me),ke}function lt(te,W,ie,de){if(typeof ie=="object"&&ie!==null&&ie.type===E&&ie.key===null&&(ie=ie.props.children),typeof ie=="object"&&ie!==null){switch(ie.$$typeof){case v:e:{for(var ke=ie.key;W!==null;){if(W.key===ke){if(ke=ie.type,ke===E){if(W.tag===7){s(te,W.sibling),de=g(W,ie.props.children),de.return=te,te=de;break e}}else if(W.elementType===ke||typeof ke=="object"&&ke!==null&&ke.$$typeof===O&&Ri(ke)===W.type){s(te,W.sibling),de=g(W,ie.props),qa(de,ie),de.return=te,te=de;break e}s(te,W);break}else i(te,W);W=W.sibling}ie.type===E?(de=Ai(ie.props.children,te.mode,de,ie.key),de.return=te,te=de):(de=Ds(ie.type,ie.key,ie.props,null,te.mode,de),qa(de,ie),de.return=te,te=de)}return C(te);case w:e:{for(ke=ie.key;W!==null;){if(W.key===ke)if(W.tag===4&&W.stateNode.containerInfo===ie.containerInfo&&W.stateNode.implementation===ie.implementation){s(te,W.sibling),de=g(W,ie.children||[]),de.return=te,te=de;break e}else{s(te,W);break}else i(te,W);W=W.sibling}de=bf(ie,te.mode,de),de.return=te,te=de}return C(te);case O:return ie=Ri(ie),lt(te,W,ie,de)}if(F(ie))return we(te,W,ie,de);if(U(ie)){if(ke=U(ie),typeof ke!="function")throw Error(l(150));return ie=ke.call(ie),Ce(te,W,ie,de)}if(typeof ie.then=="function")return lt(te,W,qs(ie),de);if(ie.$$typeof===k)return lt(te,W,Ls(te,ie),de);Us(te,ie)}return typeof ie=="string"&&ie!==""||typeof ie=="number"||typeof ie=="bigint"?(ie=""+ie,W!==null&&W.tag===6?(s(te,W.sibling),de=g(W,ie),de.return=te,te=de):(s(te,W),de=vf(ie,te.mode,de),de.return=te,te=de),C(te)):s(te,W)}return function(te,W,ie,de){try{Ia=0;var ke=lt(te,W,ie,de);return zl=null,ke}catch(Se){if(Se===jl||Se===Bs)throw Se;var Ze=hn(29,Se,null,te.mode);return Ze.lanes=de,Ze.return=te,Ze}finally{}}}var Li=t0(!0),n0=t0(!1),Qr=!1;function Mf(t){t.updateQueue={baseState:t.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function Df(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 Zr(t){return{lane:t,tag:0,payload:null,callback:null,next:null}}function Kr(t,i,s){var f=t.updateQueue;if(f===null)return null;if(f=f.shared,(Je&2)!==0){var g=f.pending;return g===null?i.next=i:(i.next=g.next,g.next=i),f.pending=i,i=Ms(t),Ig(t,null,s),i}return zs(t,f,i,s),Ms(t)}function Ua(t,i,s){if(i=i.updateQueue,i!==null&&(i=i.shared,(s&4194048)!==0)){var f=i.lanes;f&=t.pendingLanes,s|=f,i.lanes=s,cs(t,s)}}function Rf(t,i){var s=t.updateQueue,f=t.alternate;if(f!==null&&(f=f.updateQueue,s===f)){var g=null,y=null;if(s=s.firstBaseUpdate,s!==null){do{var C={lane:s.lane,tag:s.tag,payload:s.payload,callback:null,next:null};y===null?g=y=C:y=y.next=C,s=s.next}while(s!==null);y===null?g=y=i:y=y.next=i}else g=y=i;s={baseState:f.baseState,firstBaseUpdate:g,lastBaseUpdate:y,shared:f.shared,callbacks:f.callbacks},t.updateQueue=s;return}t=s.lastBaseUpdate,t===null?s.firstBaseUpdate=i:t.next=i,s.lastBaseUpdate=i}var Of=!1;function Pa(){if(Of){var t=Al;if(t!==null)throw t}}function Va(t,i,s,f){Of=!1;var g=t.updateQueue;Qr=!1;var y=g.firstBaseUpdate,C=g.lastBaseUpdate,D=g.shared.pending;if(D!==null){g.shared.pending=null;var Z=D,le=Z.next;Z.next=null,C===null?y=le:C.next=le,C=Z;var ce=t.alternate;ce!==null&&(ce=ce.updateQueue,D=ce.lastBaseUpdate,D!==C&&(D===null?ce.firstBaseUpdate=le:D.next=le,ce.lastBaseUpdate=Z))}if(y!==null){var he=g.baseState;C=0,ce=le=Z=null,D=y;do{var ae=D.lane&-536870913,oe=ae!==D.lane;if(oe?(Ue&ae)===ae:(f&ae)===ae){ae!==0&&ae===Tl&&(Of=!0),ce!==null&&(ce=ce.next={lane:0,tag:D.tag,payload:D.payload,callback:null,next:null});e:{var we=t,Ce=D;ae=i;var lt=s;switch(Ce.tag){case 1:if(we=Ce.payload,typeof we=="function"){he=we.call(lt,he,ae);break e}he=we;break e;case 3:we.flags=we.flags&-65537|128;case 0:if(we=Ce.payload,ae=typeof we=="function"?we.call(lt,he,ae):we,ae==null)break e;he=p({},he,ae);break e;case 2:Qr=!0}}ae=D.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:D.tag,payload:D.payload,callback:D.callback,next:null},ce===null?(le=ce=oe,Z=he):ce=ce.next=oe,C|=ae;if(D=D.next,D===null){if(D=g.shared.pending,D===null)break;oe=D,D=oe.next,oe.next=null,g.lastBaseUpdate=oe,g.shared.pending=null}}while(!0);ce===null&&(Z=he),g.baseState=Z,g.firstBaseUpdate=le,g.lastBaseUpdate=ce,y===null&&(g.shared.lanes=0),ni|=C,t.lanes=C,t.memoizedState=he}}function r0(t,i){if(typeof t!="function")throw Error(l(191,t));t.call(i)}function i0(t,i){var s=t.callbacks;if(s!==null)for(t.callbacks=null,t=0;ty?y:8;var C=z.T,D={};z.T=D,ed(t,!1,i,s);try{var Z=g(),le=z.S;if(le!==null&&le(D,Z),Z!==null&&typeof Z=="object"&&typeof Z.then=="function"){var ce=jE(Z,f);Fa(t,i,ce,yn(t))}else Fa(t,i,f,yn(t))}catch(he){Fa(t,i,{then:function(){},status:"rejected",reason:he},yn())}finally{G.p=y,C!==null&&D.types!==null&&(C.types=D.types),z.T=C}}function LE(){}function Jf(t,i,s,f){if(t.tag!==5)throw Error(l(476));var g=L0(t).queue;O0(t,g,i,Q,s===null?LE:function(){return H0(t),s(f)})}function L0(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:vr,lastRenderedState:Q},next:null};var s={};return i.next={memoizedState:s,baseState:s,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:vr,lastRenderedState:s},next:null},t.memoizedState=i,t=t.alternate,t!==null&&(t.memoizedState=i),i}function H0(t){var i=L0(t);i.next===null&&(i=t.alternate.memoizedState),Fa(t,i.next.queue,{},yn())}function Wf(){return qt(uo)}function B0(){return wt().memoizedState}function I0(){return wt().memoizedState}function HE(t){for(var i=t.return;i!==null;){switch(i.tag){case 24:case 3:var s=yn();t=Zr(s);var f=Kr(i,t,s);f!==null&&(on(f,i,s),Ua(f,i,s)),i={cache:Tf()},t.payload=i;return}i=i.return}}function BE(t,i,s){var f=yn();s={lane:f,revertLane:0,gesture:null,action:s,hasEagerState:!1,eagerState:null,next:null},Ks(t)?U0(i,s):(s=xf(t,i,s,f),s!==null&&(on(s,t,f),P0(s,i,f)))}function q0(t,i,s){var f=yn();Fa(t,i,s,f)}function Fa(t,i,s,f){var g={lane:f,revertLane:0,gesture:null,action:s,hasEagerState:!1,eagerState:null,next:null};if(Ks(t))U0(i,g);else{var y=t.alternate;if(t.lanes===0&&(y===null||y.lanes===0)&&(y=i.lastRenderedReducer,y!==null))try{var C=i.lastRenderedState,D=y(C,s);if(g.hasEagerState=!0,g.eagerState=D,dn(D,C))return zs(t,i,g,0),at===null&&js(),!1}catch{}finally{}if(s=xf(t,i,g,f),s!==null)return on(s,t,f),P0(s,i,f),!0}return!1}function ed(t,i,s,f){if(f={lane:2,revertLane:Md(),gesture:null,action:f,hasEagerState:!1,eagerState:null,next:null},Ks(t)){if(i)throw Error(l(479))}else i=xf(t,s,f,2),i!==null&&on(i,t,2)}function Ks(t){var i=t.alternate;return t===je||i!==null&&i===je}function U0(t,i){Dl=$s=!0;var s=t.pending;s===null?i.next=i:(i.next=s.next,s.next=i),t.pending=i}function P0(t,i,s){if((s&4194048)!==0){var f=i.lanes;f&=t.pendingLanes,s|=f,i.lanes=s,cs(t,s)}}var Ya={readContext:qt,use:Ys,useCallback:gt,useContext:gt,useEffect:gt,useImperativeHandle:gt,useLayoutEffect:gt,useInsertionEffect:gt,useMemo:gt,useReducer:gt,useRef:gt,useState:gt,useDebugValue:gt,useDeferredValue:gt,useTransition:gt,useSyncExternalStore:gt,useId:gt,useHostTransitionStatus:gt,useFormState:gt,useActionState:gt,useOptimistic:gt,useMemoCache:gt,useCacheRefresh:gt};Ya.useEffectEvent=gt;var V0={readContext:qt,use:Ys,useCallback:function(t,i){return Zt().memoizedState=[t,i===void 0?null:i],t},useContext:qt,useEffect:N0,useImperativeHandle:function(t,i,s){s=s!=null?s.concat([t]):null,Qs(4194308,4,j0.bind(null,i,t),s)},useLayoutEffect:function(t,i){return Qs(4194308,4,t,i)},useInsertionEffect:function(t,i){Qs(4,2,t,i)},useMemo:function(t,i){var s=Zt();i=i===void 0?null:i;var f=t();if(Hi){$t(!0);try{t()}finally{$t(!1)}}return s.memoizedState=[f,i],f},useReducer:function(t,i,s){var f=Zt();if(s!==void 0){var g=s(i);if(Hi){$t(!0);try{s(i)}finally{$t(!1)}}}else g=i;return f.memoizedState=f.baseState=g,t={pending:null,lanes:0,dispatch:null,lastRenderedReducer:t,lastRenderedState:g},f.queue=t,t=t.dispatch=BE.bind(null,je,t),[f.memoizedState,t]},useRef:function(t){var i=Zt();return t={current:t},i.memoizedState=t},useState:function(t){t=Yf(t);var i=t.queue,s=q0.bind(null,je,i);return i.dispatch=s,[t.memoizedState,s]},useDebugValue:Zf,useDeferredValue:function(t,i){var s=Zt();return Kf(s,t,i)},useTransition:function(){var t=Yf(!1);return t=O0.bind(null,je,t.queue,!0,!1),Zt().memoizedState=t,[!1,t]},useSyncExternalStore:function(t,i,s){var f=je,g=Zt();if($e){if(s===void 0)throw Error(l(407));s=s()}else{if(s=i(),at===null)throw Error(l(349));(Ue&127)!==0||c0(f,i,s)}g.memoizedState=s;var y={value:s,getSnapshot:i};return g.queue=y,N0(d0.bind(null,f,y,t),[t]),f.flags|=2048,Ol(9,{destroy:void 0},f0.bind(null,f,y,s,i),null),s},useId:function(){var t=Zt(),i=at.identifierPrefix;if($e){var s=Wn,f=Jn;s=(f&~(1<<32-We(f)-1)).toString(32)+s,i="_"+i+"R_"+s,s=Gs++,0<\/script>",y=y.removeChild(y.firstChild);break;case"select":y=typeof f.is=="string"?C.createElement("select",{is:f.is}):C.createElement("select"),f.multiple?y.multiple=!0:f.size&&(y.size=f.size);break;default:y=typeof f.is=="string"?C.createElement(g,{is:f.is}):C.createElement(g)}}y[Dt]=i,y[Gt]=f;e:for(C=i.child;C!==null;){if(C.tag===5||C.tag===6)y.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=y;e:switch(Pt(y,g,f),g){case"button":case"input":case"select":case"textarea":f=!!f.autoFocus;break e;case"img":f=!0;break e;default:f=!1}f&&wr(i)}}return ft(i),pd(i,i.type,t===null?null:t.memoizedProps,i.pendingProps,s),null;case 6:if(t&&i.stateNode!=null)t.memoizedProps!==f&&wr(i);else{if(typeof f!="string"&&i.stateNode===null)throw Error(l(166));if(t=J.current,Nl(i)){if(t=i.stateNode,s=i.memoizedProps,f=null,g=It,g!==null)switch(g.tag){case 27:case 5:f=g.memoizedProps}t[Dt]=i,t=!!(t.nodeValue===s||f!==null&&f.suppressHydrationWarning===!0||sy(t.nodeValue,s)),t||Yr(i,!0)}else t=xu(t).createTextNode(f),t[Dt]=i,i.stateNode=t}return ft(i),null;case 31:if(s=i.memoizedState,t===null||t.memoizedState!==null){if(f=Nl(i),s!==null){if(t===null){if(!f)throw Error(l(318));if(t=i.memoizedState,t=t!==null?t.dehydrated:null,!t)throw Error(l(557));t[Dt]=i}else ji(),(i.flags&128)===0&&(i.memoizedState=null),i.flags|=4;ft(i),t=!1}else s=kf(),t!==null&&t.memoizedState!==null&&(t.memoizedState.hydrationErrors=s),t=!0;if(!t)return i.flags&256?(mn(i),i):(mn(i),null);if((i.flags&128)!==0)throw Error(l(558))}return ft(i),null;case 13:if(f=i.memoizedState,t===null||t.memoizedState!==null&&t.memoizedState.dehydrated!==null){if(g=Nl(i),f!==null&&f.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[Dt]=i}else ji(),(i.flags&128)===0&&(i.memoizedState=null),i.flags|=4;ft(i),g=!1}else g=kf(),t!==null&&t.memoizedState!==null&&(t.memoizedState.hydrationErrors=g),g=!0;if(!g)return i.flags&256?(mn(i),i):(mn(i),null)}return mn(i),(i.flags&128)!==0?(i.lanes=s,i):(s=f!==null,t=t!==null&&t.memoizedState!==null,s&&(f=i.child,g=null,f.alternate!==null&&f.alternate.memoizedState!==null&&f.alternate.memoizedState.cachePool!==null&&(g=f.alternate.memoizedState.cachePool.pool),y=null,f.memoizedState!==null&&f.memoizedState.cachePool!==null&&(y=f.memoizedState.cachePool.pool),y!==g&&(f.flags|=2048)),s!==t&&s&&(i.child.flags|=8192),nu(i,i.updateQueue),ft(i),null);case 4:return se(),t===null&&Ld(i.stateNode.containerInfo),ft(i),null;case 10:return xr(i.type),ft(i),null;case 19:if(Y(bt),f=i.memoizedState,f===null)return ft(i),null;if(g=(i.flags&128)!==0,y=f.rendering,y===null)if(g)Qa(f,!1);else{if(xt!==0||t!==null&&(t.flags&128)!==0)for(t=i.child;t!==null;){if(y=Vs(t),y!==null){for(i.flags|=128,Qa(f,!1),t=y.updateQueue,i.updateQueue=t,nu(i,t),i.subtreeFlags=0,t=s,s=i.child;s!==null;)qg(s,t),s=s.sibling;return N(bt,bt.current&1|2),$e&&mr(i,f.treeForkCount),i.child}t=t.sibling}f.tail!==null&&Mt()>ou&&(i.flags|=128,g=!0,Qa(f,!1),i.lanes=4194304)}else{if(!g)if(t=Vs(y),t!==null){if(i.flags|=128,g=!0,t=t.updateQueue,i.updateQueue=t,nu(i,t),Qa(f,!0),f.tail===null&&f.tailMode==="hidden"&&!y.alternate&&!$e)return ft(i),null}else 2*Mt()-f.renderingStartTime>ou&&s!==536870912&&(i.flags|=128,g=!0,Qa(f,!1),i.lanes=4194304);f.isBackwards?(y.sibling=i.child,i.child=y):(t=f.last,t!==null?t.sibling=y:i.child=y,f.last=y)}return f.tail!==null?(t=f.tail,f.rendering=t,f.tail=t.sibling,f.renderingStartTime=Mt(),t.sibling=null,s=bt.current,N(bt,g?s&1|2:s&1),$e&&mr(i,f.treeForkCount),t):(ft(i),null);case 22:case 23:return mn(i),Hf(),f=i.memoizedState!==null,t!==null?t.memoizedState!==null!==f&&(i.flags|=8192):f&&(i.flags|=8192),f?(s&536870912)!==0&&(i.flags&128)===0&&(ft(i),i.subtreeFlags&6&&(i.flags|=8192)):ft(i),s=i.updateQueue,s!==null&&nu(i,s.retryQueue),s=null,t!==null&&t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(s=t.memoizedState.cachePool.pool),f=null,i.memoizedState!==null&&i.memoizedState.cachePool!==null&&(f=i.memoizedState.cachePool.pool),f!==s&&(i.flags|=2048),t!==null&&Y(Di),null;case 24:return s=null,t!==null&&(s=t.memoizedState.cache),i.memoizedState.cache!==s&&(i.flags|=2048),xr(_t),ft(i),null;case 25:return null;case 30:return null}throw Error(l(156,i.tag))}function VE(t,i){switch(Sf(i),i.tag){case 1:return t=i.flags,t&65536?(i.flags=t&-65537|128,i):null;case 3:return xr(_t),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(mn(i),i.alternate===null)throw Error(l(340));ji()}return t=i.flags,t&65536?(i.flags=t&-65537|128,i):null;case 13:if(mn(i),t=i.memoizedState,t!==null&&t.dehydrated!==null){if(i.alternate===null)throw Error(l(340));ji()}return t=i.flags,t&65536?(i.flags=t&-65537|128,i):null;case 19:return Y(bt),null;case 4:return se(),null;case 10:return xr(i.type),null;case 22:case 23:return mn(i),Hf(),t!==null&&Y(Di),t=i.flags,t&65536?(i.flags=t&-65537|128,i):null;case 24:return xr(_t),null;case 25:return null;default:return null}}function hx(t,i){switch(Sf(i),i.tag){case 3:xr(_t),se();break;case 26:case 27:case 5:be(i);break;case 4:se();break;case 31:i.memoizedState!==null&&mn(i);break;case 13:mn(i);break;case 19:Y(bt);break;case 10:xr(i.type);break;case 22:case 23:mn(i),Hf(),t!==null&&Y(Di);break;case 24:xr(_t)}}function Za(t,i){try{var s=i.updateQueue,f=s!==null?s.lastEffect:null;if(f!==null){var g=f.next;s=g;do{if((s.tag&t)===t){f=void 0;var y=s.create,C=s.inst;f=y(),C.destroy=f}s=s.next}while(s!==g)}}catch(D){tt(i,i.return,D)}}function ei(t,i,s){try{var f=i.updateQueue,g=f!==null?f.lastEffect:null;if(g!==null){var y=g.next;f=y;do{if((f.tag&t)===t){var C=f.inst,D=C.destroy;if(D!==void 0){C.destroy=void 0,g=i;var Z=s,le=D;try{le()}catch(ce){tt(g,Z,ce)}}}f=f.next}while(f!==y)}}catch(ce){tt(i,i.return,ce)}}function px(t){var i=t.updateQueue;if(i!==null){var s=t.stateNode;try{i0(i,s)}catch(f){tt(t,t.return,f)}}}function mx(t,i,s){s.props=Bi(t.type,t.memoizedProps),s.state=t.memoizedState;try{s.componentWillUnmount()}catch(f){tt(t,i,f)}}function Ka(t,i){try{var s=t.ref;if(s!==null){switch(t.tag){case 26:case 27:case 5:var f=t.stateNode;break;case 30:f=t.stateNode;break;default:f=t.stateNode}typeof s=="function"?t.refCleanup=s(f):s.current=f}}catch(g){tt(t,i,g)}}function er(t,i){var s=t.ref,f=t.refCleanup;if(s!==null)if(typeof f=="function")try{f()}catch(g){tt(t,i,g)}finally{t.refCleanup=null,t=t.alternate,t!=null&&(t.refCleanup=null)}else if(typeof s=="function")try{s(null)}catch(g){tt(t,i,g)}else s.current=null}function gx(t){var i=t.type,s=t.memoizedProps,f=t.stateNode;try{e:switch(i){case"button":case"input":case"select":case"textarea":s.autoFocus&&f.focus();break e;case"img":s.src?f.src=s.src:s.srcSet&&(f.srcset=s.srcSet)}}catch(g){tt(t,t.return,g)}}function md(t,i,s){try{var f=t.stateNode;f2(f,t.type,s,i),f[Gt]=i}catch(g){tt(t,t.return,g)}}function xx(t){return t.tag===5||t.tag===3||t.tag===26||t.tag===27&&oi(t.type)||t.tag===4}function gd(t){e:for(;;){for(;t.sibling===null;){if(t.return===null||xx(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&&oi(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 xd(t,i,s){var f=t.tag;if(f===5||f===6)t=t.stateNode,i?(s.nodeType===9?s.body:s.nodeName==="HTML"?s.ownerDocument.body:s).insertBefore(t,i):(i=s.nodeType===9?s.body:s.nodeName==="HTML"?s.ownerDocument.body:s,i.appendChild(t),s=s._reactRootContainer,s!=null||i.onclick!==null||(i.onclick=dr));else if(f!==4&&(f===27&&oi(t.type)&&(s=t.stateNode,i=null),t=t.child,t!==null))for(xd(t,i,s),t=t.sibling;t!==null;)xd(t,i,s),t=t.sibling}function ru(t,i,s){var f=t.tag;if(f===5||f===6)t=t.stateNode,i?s.insertBefore(t,i):s.appendChild(t);else if(f!==4&&(f===27&&oi(t.type)&&(s=t.stateNode),t=t.child,t!==null))for(ru(t,i,s),t=t.sibling;t!==null;)ru(t,i,s),t=t.sibling}function yx(t){var i=t.stateNode,s=t.memoizedProps;try{for(var f=t.type,g=i.attributes;g.length;)i.removeAttributeNode(g[0]);Pt(i,f,s),i[Dt]=t,i[Gt]=s}catch(y){tt(t,t.return,y)}}var Sr=!1,Nt=!1,yd=!1,vx=typeof WeakSet=="function"?WeakSet:Set,Ot=null;function $E(t,i){if(t=t.containerInfo,Id=ku,t=zg(t),ff(t)){if("selectionStart"in t)var s={start:t.selectionStart,end:t.selectionEnd};else e:{s=(s=t.ownerDocument)&&s.defaultView||window;var f=s.getSelection&&s.getSelection();if(f&&f.rangeCount!==0){s=f.anchorNode;var g=f.anchorOffset,y=f.focusNode;f=f.focusOffset;try{s.nodeType,y.nodeType}catch{s=null;break e}var C=0,D=-1,Z=-1,le=0,ce=0,he=t,ae=null;t:for(;;){for(var oe;he!==s||g!==0&&he.nodeType!==3||(D=C+g),he!==y||f!==0&&he.nodeType!==3||(Z=C+f),he.nodeType===3&&(C+=he.nodeValue.length),(oe=he.firstChild)!==null;)ae=he,he=oe;for(;;){if(he===t)break t;if(ae===s&&++le===g&&(D=C),ae===y&&++ce===f&&(Z=C),(oe=he.nextSibling)!==null)break;he=ae,ae=he.parentNode}he=oe}s=D===-1||Z===-1?null:{start:D,end:Z}}else s=null}s=s||{start:0,end:0}}else s=null;for(qd={focusedElem:t,selectionRange:s},ku=!1,Ot=i;Ot!==null;)if(i=Ot,t=i.child,(i.subtreeFlags&1028)!==0&&t!==null)t.return=i,Ot=t;else for(;Ot!==null;){switch(i=Ot,y=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(s=0;s title"))),Pt(y,f,s),y[Dt]=t,St(y),f=y;break e;case"link":var C=Ey("link","href",g).get(f+(s.href||""));if(C){for(var D=0;Dlt&&(C=lt,lt=Ce,Ce=C);var te=Ag(D,Ce),W=Ag(D,lt);if(te&&W&&(oe.rangeCount!==1||oe.anchorNode!==te.node||oe.anchorOffset!==te.offset||oe.focusNode!==W.node||oe.focusOffset!==W.offset)){var ie=he.createRange();ie.setStart(te.node,te.offset),oe.removeAllRanges(),Ce>lt?(oe.addRange(ie),oe.extend(W.node,W.offset)):(ie.setEnd(W.node,W.offset),oe.addRange(ie))}}}}for(he=[],oe=D;oe=oe.parentNode;)oe.nodeType===1&&he.push({element:oe,left:oe.scrollLeft,top:oe.scrollTop});for(typeof D.focus=="function"&&D.focus(),D=0;Ds?32:s,z.T=null,s=Ed,Ed=null;var y=ii,C=Cr;if(Rt=0,ql=ii=null,Cr=0,(Je&6)!==0)throw Error(l(331));var D=Je;if(Je|=4,jx(y.current),Cx(y,y.current,C,s),Je=D,ro(0,!1),vt&&typeof vt.onPostCommitFiberRoot=="function")try{vt.onPostCommitFiberRoot(Bt,y)}catch{}return!0}finally{G.p=g,z.T=f,Xx(t,i)}}function Zx(t,i,s){i=Nn(s,i),i=id(t.stateNode,i,2),t=Kr(t,i,2),t!==null&&(wi(t,2),tr(t))}function tt(t,i,s){if(t.tag===3)Zx(t,t,s);else for(;i!==null;){if(i.tag===3){Zx(i,t,s);break}else if(i.tag===1){var f=i.stateNode;if(typeof i.type.getDerivedStateFromError=="function"||typeof f.componentDidCatch=="function"&&(ri===null||!ri.has(f))){t=Nn(s,t),s=K0(2),f=Kr(i,s,2),f!==null&&(J0(s,f,i,t),wi(f,2),tr(f));break}}i=i.return}}function Ad(t,i,s){var f=t.pingCache;if(f===null){f=t.pingCache=new YE;var g=new Set;f.set(i,g)}else g=f.get(i),g===void 0&&(g=new Set,f.set(i,g));g.has(s)||(wd=!0,g.add(s),t=JE.bind(null,t,i,s),i.then(t,t))}function JE(t,i,s){var f=t.pingCache;f!==null&&f.delete(i),t.pingedLanes|=t.suspendedLanes&s,t.warmLanes&=~s,at===t&&(Ue&s)===s&&(xt===4||xt===3&&(Ue&62914560)===Ue&&300>Mt()-au?(Je&2)===0&&Ul(t,0):Sd|=s,Il===Ue&&(Il=0)),tr(t)}function Kx(t,i){i===0&&(i=ss()),t=Ti(t,i),t!==null&&(wi(t,i),tr(t))}function WE(t){var i=t.memoizedState,s=0;i!==null&&(s=i.retryLane),Kx(t,s)}function e2(t,i){var s=0;switch(t.tag){case 31:case 13:var f=t.stateNode,g=t.memoizedState;g!==null&&(s=g.retryLane);break;case 19:f=t.stateNode;break;case 22:f=t.stateNode._retryCache;break;default:throw Error(l(314))}f!==null&&f.delete(i),Kx(t,s)}function t2(t,i){return Vt(t,i)}var hu=null,Vl=null,jd=!1,pu=!1,zd=!1,ai=0;function tr(t){t!==Vl&&t.next===null&&(Vl===null?hu=Vl=t:Vl=Vl.next=t),pu=!0,jd||(jd=!0,r2())}function ro(t,i){if(!zd&&pu){zd=!0;do for(var s=!1,f=hu;f!==null;){if(t!==0){var g=f.pendingLanes;if(g===0)var y=0;else{var C=f.suspendedLanes,D=f.pingedLanes;y=(1<<31-We(42|t)+1)-1,y&=g&~(C&~D),y=y&201326741?y&201326741|1:y?y|2:0}y!==0&&(s=!0,ty(f,y))}else y=Ue,y=dl(f,f===at?y:0,f.cancelPendingCommit!==null||f.timeoutHandle!==-1),(y&3)===0||bi(f,y)||(s=!0,ty(f,y));f=f.next}while(s);zd=!1}}function n2(){Jx()}function Jx(){pu=jd=!1;var t=0;ai!==0&&h2()&&(t=ai);for(var i=Mt(),s=null,f=hu;f!==null;){var g=f.next,y=Wx(f,i);y===0?(f.next=null,s===null?hu=g:s.next=g,g===null&&(Vl=s)):(s=f,(t!==0||(y&3)!==0)&&(pu=!0)),f=g}Rt!==0&&Rt!==5||ro(t),ai!==0&&(ai=0)}function Wx(t,i){for(var s=t.suspendedLanes,f=t.pingedLanes,g=t.expirationTimes,y=t.pendingLanes&-62914561;0D)break;var ce=Z.transferSize,he=Z.initiatorType;ce&&uy(he)&&(Z=Z.responseEnd,C+=ce*(Z"u"?null:document;function wy(t,i,s){var f=$l;if(f&&typeof i=="string"&&i){var g=en(i);g='link[rel="'+t+'"][href="'+g+'"]',typeof s=="string"&&(g+='[crossorigin="'+s+'"]'),by.has(g)||(by.add(g),t={rel:t,crossOrigin:s,href:i},f.querySelector(g)===null&&(i=f.createElement("link"),Pt(i,"link",t),St(i),f.head.appendChild(i)))}}function S2(t){Tr.D(t),wy("dns-prefetch",t,null)}function _2(t,i){Tr.C(t,i),wy("preconnect",t,i)}function k2(t,i,s){Tr.L(t,i,s);var f=$l;if(f&&t&&i){var g='link[rel="preload"][as="'+en(i)+'"]';i==="image"&&s&&s.imageSrcSet?(g+='[imagesrcset="'+en(s.imageSrcSet)+'"]',typeof s.imageSizes=="string"&&(g+='[imagesizes="'+en(s.imageSizes)+'"]')):g+='[href="'+en(t)+'"]';var y=g;switch(i){case"style":y=Gl(t);break;case"script":y=Fl(t)}Mn.has(y)||(t=p({rel:"preload",href:i==="image"&&s&&s.imageSrcSet?void 0:t,as:i},s),Mn.set(y,t),f.querySelector(g)!==null||i==="style"&&f.querySelector(oo(y))||i==="script"&&f.querySelector(so(y))||(i=f.createElement("link"),Pt(i,"link",t),St(i),f.head.appendChild(i)))}}function E2(t,i){Tr.m(t,i);var s=$l;if(s&&t){var f=i&&typeof i.as=="string"?i.as:"script",g='link[rel="modulepreload"][as="'+en(f)+'"][href="'+en(t)+'"]',y=g;switch(f){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":y=Fl(t)}if(!Mn.has(y)&&(t=p({rel:"modulepreload",href:t},i),Mn.set(y,t),s.querySelector(g)===null)){switch(f){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(s.querySelector(so(y)))return}f=s.createElement("link"),Pt(f,"link",t),St(f),s.head.appendChild(f)}}}function N2(t,i,s){Tr.S(t,i,s);var f=$l;if(f&&t){var g=Ur(f).hoistableStyles,y=Gl(t);i=i||"default";var C=g.get(y);if(!C){var D={loading:0,preload:null};if(C=f.querySelector(oo(y)))D.loading=5;else{t=p({rel:"stylesheet",href:t,"data-precedence":i},s),(s=Mn.get(y))&&Yd(t,s);var Z=C=f.createElement("link");St(Z),Pt(Z,"link",t),Z._p=new Promise(function(le,ce){Z.onload=le,Z.onerror=ce}),Z.addEventListener("load",function(){D.loading|=1}),Z.addEventListener("error",function(){D.loading|=2}),D.loading|=4,vu(C,i,f)}C={type:"stylesheet",instance:C,count:1,state:D},g.set(y,C)}}}function C2(t,i){Tr.X(t,i);var s=$l;if(s&&t){var f=Ur(s).hoistableScripts,g=Fl(t),y=f.get(g);y||(y=s.querySelector(so(g)),y||(t=p({src:t,async:!0},i),(i=Mn.get(g))&&Xd(t,i),y=s.createElement("script"),St(y),Pt(y,"link",t),s.head.appendChild(y)),y={type:"script",instance:y,count:1,state:null},f.set(g,y))}}function T2(t,i){Tr.M(t,i);var s=$l;if(s&&t){var f=Ur(s).hoistableScripts,g=Fl(t),y=f.get(g);y||(y=s.querySelector(so(g)),y||(t=p({src:t,async:!0,type:"module"},i),(i=Mn.get(g))&&Xd(t,i),y=s.createElement("script"),St(y),Pt(y,"link",t),s.head.appendChild(y)),y={type:"script",instance:y,count:1,state:null},f.set(g,y))}}function Sy(t,i,s,f){var g=(g=J.current)?yu(g):null;if(!g)throw Error(l(446));switch(t){case"meta":case"title":return null;case"style":return typeof s.precedence=="string"&&typeof s.href=="string"?(i=Gl(s.href),s=Ur(g).hoistableStyles,f=s.get(i),f||(f={type:"style",instance:null,count:0,state:null},s.set(i,f)),f):{type:"void",instance:null,count:0,state:null};case"link":if(s.rel==="stylesheet"&&typeof s.href=="string"&&typeof s.precedence=="string"){t=Gl(s.href);var y=Ur(g).hoistableStyles,C=y.get(t);if(C||(g=g.ownerDocument||g,C={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},y.set(t,C),(y=g.querySelector(oo(t)))&&!y._p&&(C.instance=y,C.state.loading=5),Mn.has(t)||(s={rel:"preload",as:"style",href:s.href,crossOrigin:s.crossOrigin,integrity:s.integrity,media:s.media,hrefLang:s.hrefLang,referrerPolicy:s.referrerPolicy},Mn.set(t,s),y||A2(g,t,s,C.state))),i&&f===null)throw Error(l(528,""));return C}if(i&&f!==null)throw Error(l(529,""));return null;case"script":return i=s.async,s=s.src,typeof s=="string"&&i&&typeof i!="function"&&typeof i!="symbol"?(i=Fl(s),s=Ur(g).hoistableScripts,f=s.get(i),f||(f={type:"script",instance:null,count:0,state:null},s.set(i,f)),f):{type:"void",instance:null,count:0,state:null};default:throw Error(l(444,t))}}function Gl(t){return'href="'+en(t)+'"'}function oo(t){return'link[rel="stylesheet"]['+t+"]"}function _y(t){return p({},t,{"data-precedence":t.precedence,precedence:null})}function A2(t,i,s,f){t.querySelector('link[rel="preload"][as="style"]['+i+"]")?f.loading=1:(i=t.createElement("link"),f.preload=i,i.addEventListener("load",function(){return f.loading|=1}),i.addEventListener("error",function(){return f.loading|=2}),Pt(i,"link",s),St(i),t.head.appendChild(i))}function Fl(t){return'[src="'+en(t)+'"]'}function so(t){return"script[async]"+t}function ky(t,i,s){if(i.count++,i.instance===null)switch(i.type){case"style":var f=t.querySelector('style[data-href~="'+en(s.href)+'"]');if(f)return i.instance=f,St(f),f;var g=p({},s,{"data-href":s.href,"data-precedence":s.precedence,href:null,precedence:null});return f=(t.ownerDocument||t).createElement("style"),St(f),Pt(f,"style",g),vu(f,s.precedence,t),i.instance=f;case"stylesheet":g=Gl(s.href);var y=t.querySelector(oo(g));if(y)return i.state.loading|=4,i.instance=y,St(y),y;f=_y(s),(g=Mn.get(g))&&Yd(f,g),y=(t.ownerDocument||t).createElement("link"),St(y);var C=y;return C._p=new Promise(function(D,Z){C.onload=D,C.onerror=Z}),Pt(y,"link",f),i.state.loading|=4,vu(y,s.precedence,t),i.instance=y;case"script":return y=Fl(s.src),(g=t.querySelector(so(y)))?(i.instance=g,St(g),g):(f=s,(g=Mn.get(y))&&(f=p({},s),Xd(f,g)),t=t.ownerDocument||t,g=t.createElement("script"),St(g),Pt(g,"link",f),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&&(f=i.instance,i.state.loading|=4,vu(f,s.precedence,t));return i.instance}function vu(t,i,s){for(var f=s.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),g=f.length?f[f.length-1]:null,y=g,C=0;C title"):null)}function j2(t,i,s){if(s===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 Cy(t){return!(t.type==="stylesheet"&&(t.state.loading&3)===0)}function z2(t,i,s,f){if(s.type==="stylesheet"&&(typeof f.media!="string"||matchMedia(f.media).matches!==!1)&&(s.state.loading&4)===0){if(s.instance===null){var g=Gl(f.href),y=i.querySelector(oo(g));if(y){i=y._p,i!==null&&typeof i=="object"&&typeof i.then=="function"&&(t.count++,t=wu.bind(t),i.then(t,t)),s.state.loading|=4,s.instance=y,St(y);return}y=i.ownerDocument||i,f=_y(f),(g=Mn.get(g))&&Yd(f,g),y=y.createElement("link"),St(y);var C=y;C._p=new Promise(function(D,Z){C.onload=D,C.onerror=Z}),Pt(y,"link",f),s.instance=y}t.stylesheets===null&&(t.stylesheets=new Map),t.stylesheets.set(s,i),(i=s.state.preload)&&(s.state.loading&3)===0&&(t.count++,s=wu.bind(t),i.addEventListener("load",s),i.addEventListener("error",s))}}var Qd=0;function M2(t,i){return t.stylesheets&&t.count===0&&_u(t,t.stylesheets),0Qd?50:800)+i);return t.unsuspend=s,function(){t.unsuspend=null,clearTimeout(f),clearTimeout(g)}}:null}function wu(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)_u(this,this.stylesheets);else if(this.unsuspend){var t=this.unsuspend;this.unsuspend=null,t()}}}var Su=null;function _u(t,i){t.stylesheets=null,t.unsuspend!==null&&(t.count++,Su=new Map,i.forEach(D2,t),Su=null,wu.call(t))}function D2(t,i){if(!(i.state.loading&4)){var s=Su.get(t);if(s)var f=s.get(null);else{s=new Map,Su.set(t,s);for(var g=t.querySelectorAll("link[data-precedence],style[data-precedence]"),y=0;y"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(n){console.error(n)}}return e(),ih.exports=J2(),ih.exports}var eN=W2();/** + * @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=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),fw=(...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 nN={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 rN=V.forwardRef(({color:e="currentColor",size:n=24,strokeWidth:r=2,absoluteStrokeWidth:l,className:a="",children:o,iconNode:u,...c},d)=>V.createElement("svg",{ref:d,...nN,width:n,height:n,stroke:e,strokeWidth:l?Number(r)*24/Number(n):r,className:fw("lucide",a),...c},[...u.map(([h,m])=>V.createElement(h,m)),...Array.isArray(o)?o:[o]]));/** + * @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 Ve=(e,n)=>{const r=V.forwardRef(({className:l,...a},o)=>V.createElement(rN,{ref:o,iconNode:n,className:fw(`lucide-${tN(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 dw=Ve("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 iN=Ve("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 lN=Ve("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 aN=Ve("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 Yi=Ve("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 il=Ve("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 Rr=Ve("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 oN=Ve("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 sN=Ve("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 uN=Ve("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 hw=Ve("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 pw=Ve("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 cN=Ve("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 fN=Ve("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 dN=Ve("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 hN=Ve("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 pN=Ve("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 mw=Ve("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 hm=Ve("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 Oo=Ve("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 mN=Ve("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 pm=Ve("MessageCircle",[["path",{d:"M7.9 20A9 9 0 1 0 4 16.1L2 22Z",key:"vv11sd"}]]);/** + * @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=Ve("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 mm=Ve("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 xN=Ve("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=Ve("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 gw=Ve("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=Ve("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 Ky=Ve("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 xw=Ve("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=Ve("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=Ve("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=Ve("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=Ve("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 xa=Ve("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 kN=Ve("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"}]]),Jy=e=>{let n;const r=new Set,l=(h,m)=>{const p=typeof h=="function"?h(n):h;if(!Object.is(p,n)){const x=n;n=m??(typeof p!="object"||p===null)?p:Object.assign({},n,p),r.forEach(v=>v(n,x))}},a=()=>n,c={setState:l,getState:a,getInitialState:()=>d,subscribe:h=>(r.add(h),()=>r.delete(h))},d=n=e(l,a,c);return c},EN=(e=>e?Jy(e):Jy),NN=e=>e;function CN(e,n=NN){const r=ea.useSyncExternalStore(e.subscribe,ea.useCallback(()=>n(e.getState()),[e,n]),ea.useCallback(()=>n(e.getInitialState()),[e,n]));return ea.useDebugValue(r),r}const Wy=e=>{const n=EN(e),r=l=>CN(n,l);return Object.assign(r,n),r},TN=(e=>e?Wy(e):Wy);function Ge(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 zu(e,n,r){Ge(e,n).activity.push(r)}function Le(e,n){e[n]&&(e[n]={...e[n]})}function go(e,n,r,l){const a=e[n];if(!(a!=null&&a.for_each_items))return;const o=a.for_each_items.find(u=>u.key===r);o&&o.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 qn(e,n){if(n.length===0)return null;let r=e[n[0]];for(let l=1;l=0;c--)if(l[c].slotKey===o){u=c;break}if(u===-1)return null;r.push(u),a=l[u],l=a.children}return{indexPath:r,ctx:a}}function jN(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 fe=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 o=fe.getState()._wsSend;o&&o({type:"gate_response",agent_name:r,selected_value:l,additional_input:a||{}})},activeDialog:null,dialogEngaged:!1,engageDialog:()=>{e({dialogEngaged:!0})},sendDialogMessage:(r,l,a)=>{const o=fe.getState()._wsSend;o&&o({type:"dialog_message",agent_name:r,dialog_id:l,content:a})},sendDialogDecline:(r,l)=>{const a=fe.getState()._wsSend;a&&a({type:"dialog_decline",agent_name:r,dialog_id:l})},processEvent:r=>{const l=Mu[r.type];e(a=>{const o={...a,nodes:{...a.nodes},groupProgress:{...a.groupProgress},eventLog:[...a.eventLog],activityLog:[...a.activityLog],lastEventTime:r.timestamp};l&&l(o,r.data,r.timestamp);const u=Du(r);u&&o.eventLog.push(u);const c=Ru(r);return c&&o.activityLog.push(c),o})},replayState:r=>{e(l=>{const a={...l,agentsCompleted:0,totalCost:0,totalTokens:0,nodes:{},groupProgress:{},highlightedEdges:[],eventLog:[],activityLog:[],workflowOutput:null,workflowFailedAgent:null,activeDialog:null,dialogEngaged:!1,wfDepth:0,subworkflowContexts:[],activeContextPath:[]};for(const o of r){const u=Mu[o.type];u&&u(a,o.data,o.timestamp);const c=Du(o);c&&a.eventLog.push(c);const d=Ru(o);d&&a.activityLog.push(d),a.lastEventTime=o.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,activeDialog:null,dialogEngaged:!1,wfDepth:0,subworkflowContexts:[],activeContextPath:[],viewContextPath:[]};for(const o of r){const u=Mu[o.type];u&&u(a,o.data,o.timestamp);const c=Du(o);c&&a.eventLog.push(c);const d=Ru(o);d&&a.activityLog.push(d),a.lastEventTime=o.timestamp}return a})},setReplayPosition:r=>{e(l=>{const a=l.replayEvents.slice(0,r),o={...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,activeDialog:null,dialogEngaged:!1,wfDepth:0,subworkflowContexts:[],activeContextPath:[],viewContextPath:[]};for(const u of a){const c=Mu[u.type];c&&c(o,u.data,u.timestamp);const d=Du(u);d&&o.eventLog.push(d);const h=Ru(u);h&&o.activityLog.push(h),o.lastEventTime=u.timestamp}return o})},setReplayPlaying:r=>{e({replayPlaying:r})},setReplaySpeed:r=>{e({replaySpeed:r})},setWsStatus:r=>{e({wsStatus:r})},setEdgeHighlight:(r,l,a)=>{e(o=>({highlightedEdges:[...o.highlightedEdges.filter(u=>!(u.from===r&&u.to===l)),{from:r,to:l,state:a}]}))},clearEdgeHighlight:(r,l)=>{e(a=>({highlightedEdges:a.highlightedEdges.filter(o=>!(o.from===r&&o.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 o;if(a.length===0)o=l.subworkflowContexts;else{const c=qn(l.subworkflowContexts,a);if(!c)return;o=c.children}const u=jN(o,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=qn(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 o=0;o0?r=((a=Vi(e.subworkflowContexts,l))==null?void 0:a.ctx)??null:e.activeContextPath.length>0&&(r=qn(e.subworkflowContexts,e.activeContextPath)),r){const o=r;return{nodes:o.nodes,groupProgress:o.groupProgress,routes:o.routes,highlightedEdges:o.highlightedEdges,addCost:u=>{o.totalCost+=u,e.totalCost+=u},addTokens:u=>{o.totalTokens+=u,e.totalTokens+=u},incrCompleted:()=>{o.agentsCompleted++,e.agentsCompleted++}}}return{nodes:e.nodes,groupProgress:e.groupProgress,routes:e.routes,highlightedEdges:e.highlightedEdges,addCost:o=>{e.totalCost+=o},addTokens:o=>{e.totalTokens+=o},incrCompleted:()=>{e.agentsCompleted++}}}const Mu={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||[],Ge(e.nodes,"$start","start"),e.nodes.$start.status="running",Le(e.nodes,"$start");const o=new Set,u=new Set;for(const c of e.parallelGroups){for(const d of c.agents)o.add(d);u.add(c.name),Ge(e.nodes,c.name,"parallel_group"),e.groupProgress[c.name]={total:c.agents.length,completed:0,failed:0};for(const d of c.agents)Ge(e.nodes,d,"agent")}for(const c of e.forEachGroups)u.add(c.name),Ge(e.nodes,c.name,"for_each_group"),e.groupProgress[c.name]={total:0,completed:0,failed:0};for(const c of e.agents)if(!u.has(c.name)&&!o.has(c.name)){const d=c.type||"agent";Ge(e.nodes,c.name,d),c.model&&(e.nodes[c.name].model=c.model),u.add(c.name)}e.agentsTotal=u.size}else{const o=n.subworkflow_path,u=Array.isArray(o)&&o.length>0?((a=Vi(e.subworkflowContexts,o))==null?void 0:a.ctx)??null:qn(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||[],Ge(u.nodes,"$start","start"),u.nodes.$start.status="running";const c=new Set,d=new Set;for(const h of u.parallelGroups){for(const m of h.agents)c.add(m);d.add(h.name),Ge(u.nodes,h.name,"parallel_group"),u.groupProgress[h.name]={total:h.agents.length,completed:0,failed:0};for(const m of h.agents)Ge(u.nodes,m,"agent")}for(const h of u.forEachGroups)d.add(h.name),Ge(u.nodes,h.name,"for_each_group"),u.groupProgress[h.name]={total:0,completed:0,failed:0};for(const h of u.agents)if(!d.has(h.name)&&!c.has(h.name)){const m=h.type||"agent";Ge(u.nodes,h.name,m),h.model&&(u.nodes[h.name].model=h.model),d.add(h.name)}u.agentsTotal=d.size}}e.wfDepth++},agent_started:(e,n,r)=>{const l=n,a=ht(e,n),o=Ge(a.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=r??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,Le(a.nodes,l.agent_name)},agent_completed:(e,n)=>{const r=n,l=ht(e,n),a=Ge(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),Le(l.nodes,r.agent_name)},agent_failed:(e,n)=>{const r=n,l=ht(e,n),a=Ge(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 o of l.routes)o.to===r.agent_name&&l.highlightedEdges.push({from:o.from,to:o.to,state:"failed"});Le(l.nodes,r.agent_name)},agent_prompt_rendered:(e,n)=>{var u;const r=n,l=n.item_key,a=ht(e,n),o=Ge(a.nodes,r.agent_name);if(o.prompt=r.rendered_prompt,o.context_keys=r.context_keys,l){go(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 c=a.nodes[r.agent_name];if(c!=null&&c.for_each_items){const d=c.for_each_items.find(h=>h.key===l);d&&(d.prompt=r.rendered_prompt)}}Le(a.nodes,r.agent_name)},agent_reasoning:(e,n)=>{const r=n,l=n.item_key,a=ht(e,n),o={type:"reasoning",icon:"💭",label:"thinking",text:r.content};zu(a.nodes,r.agent_name,o),l&&go(a.nodes,r.agent_name,l,o),Le(a.nodes,r.agent_name)},agent_tool_start:(e,n)=>{const r=n,l=n.item_key,a=ht(e,n),o={type:"tool-start",icon:"🔧",label:"tool",text:r.tool_name,detail:r.arguments||null};zu(a.nodes,r.agent_name,o),l&&go(a.nodes,r.agent_name,l,o),Le(a.nodes,r.agent_name)},agent_tool_complete:(e,n)=>{const r=n,l=n.item_key,a=ht(e,n),o={type:"tool-complete",icon:"✓",label:"result",text:r.tool_name||"done",detail:r.result||null};zu(a.nodes,r.agent_name,o),l&&go(a.nodes,r.agent_name,l,o),Le(a.nodes,r.agent_name)},agent_turn_start:(e,n)=>{const r=n,l=n.item_key,a=ht(e,n),o={type:"turn",icon:"⏳",label:"turn",text:`Turn ${r.turn??"?"}`};zu(a.nodes,r.agent_name,o),l&&go(a.nodes,r.agent_name,l,o),Le(a.nodes,r.agent_name)},agent_message:(e,n)=>{const r=n,l=ht(e,n),a=Ge(l.nodes,r.agent_name);a.latest_message=r.content,Le(l.nodes,r.agent_name)},script_started:(e,n,r)=>{const l=n,a=ht(e,n),o=Ge(a.nodes,l.agent_name);o.status="running",o.startedAt=r??Date.now()/1e3,Le(a.nodes,l.agent_name)},script_completed:(e,n)=>{const r=n,l=ht(e,n),a=Ge(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,Le(l.nodes,r.agent_name)},script_failed:(e,n)=>{const r=n,l=ht(e,n),a=Ge(l.nodes,r.agent_name);a.status="failed",a.elapsed=r.elapsed,a.error_type=r.error_type,a.error_message=r.message,Le(l.nodes,r.agent_name)},gate_presented:(e,n)=>{const r=n,l=ht(e,n),a=Ge(l.nodes,r.agent_name);a.status="waiting",a.options=r.options,a.option_details=r.option_details,a.prompt=r.prompt,Le(l.nodes,r.agent_name)},gate_resolved:(e,n)=>{const r=n,l=ht(e,n),a=Ge(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,Le(l.nodes,r.agent_name)},route_taken:(e,n)=>{const r=n;ht(e,n).highlightedEdges.push({from:r.from_agent,to:r.to_agent,state:"taken"})},parallel_started:(e,n)=>{const r=n,l=ht(e,n),a=Ge(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),Le(l.nodes,r.group_name)},parallel_agent_completed:(e,n)=>{const r=n,l=ht(e,n);l.groupProgress[r.group_name]&&l.groupProgress[r.group_name].completed++;const a=Ge(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),Le(l.nodes,r.agent_name),Le(l.nodes,r.group_name)},parallel_agent_failed:(e,n)=>{const r=n,l=ht(e,n);l.groupProgress[r.group_name]&&l.groupProgress[r.group_name].failed++;const a=Ge(l.nodes,r.agent_name);a.status="failed",a.elapsed=r.elapsed,a.error_type=r.error_type,a.error_message=r.message,Le(l.nodes,r.agent_name),Le(l.nodes,r.group_name)},parallel_completed:(e,n)=>{const r=n,l=ht(e,n);l.incrCompleted();const a=Ge(l.nodes,r.group_name,"parallel_group");a.status=r.failure_count===0?"completed":"failed",Le(l.nodes,r.group_name)},for_each_started:(e,n)=>{const r=n,l=ht(e,n),a=Ge(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),Le(l.nodes,r.group_name)},for_each_item_started:(e,n)=>{const r=n,l=ht(e,n),a=Ge(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:[]}),Le(l.nodes,r.group_name)},for_each_item_completed:(e,n)=>{const r=n,l=ht(e,n);l.groupProgress[r.group_name]&&l.groupProgress[r.group_name].completed++;const a=Ge(l.nodes,r.group_name,"for_each_group");if(a.for_each_items){const o=r.item_key??String(r.index),u=a.for_each_items.find(c=>c.key===o);u&&(u.status="completed",u.elapsed=r.elapsed,u.tokens=r.tokens,u.cost_usd=r.cost_usd,u.output=r.output)}Le(l.nodes,r.group_name)},for_each_item_failed:(e,n)=>{const r=n,l=ht(e,n);l.groupProgress[r.group_name]&&l.groupProgress[r.group_name].failed++;const a=Ge(l.nodes,r.group_name,"for_each_group");if(a.for_each_items){const o=r.item_key??String(r.index),u=a.for_each_items.find(c=>c.key===o);u&&(u.status="failed",u.elapsed=r.elapsed,u.error_type=r.error_type,u.error_message=r.message)}Le(l.nodes,r.group_name)},for_each_completed:(e,n)=>{const r=n,l=ht(e,n);l.incrCompleted();const a=Ge(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,Le(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",Le(e.nodes,"$end")),e.nodes.$start&&(e.nodes.$start.status="completed",Le(e.nodes,"$start")),e.highlightedEdges=[]}else{const l=n,a=l.subworkflow_path?(r=Vi(e.subworkflowContexts,l.subworkflow_path))==null?void 0:r.ctx:qn(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",Le(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",Le(e.nodes,"$start"))}else{const a=r.subworkflow_path?(l=Vi(e.subworkflowContexts,r.subworkflow_path))==null?void 0:l.ctx:qn(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 o;if(r.parent_path!==void 0){const d=Vi(e.subworkflowContexts,r.parent_path);if(!d)return;o=d.indexPath}else o=e.activeContextPath;const u=e.viewContextPath.length===e.activeContextPath.length&&e.viewContextPath.every((d,h)=>d===e.activeContextPath[h]);let c;if(o.length===0)e.subworkflowContexts.push(a),c=[e.subworkflowContexts.length-1];else{const d=qn(e.subworkflowContexts,o);if(!d)return;d.children.push(a),c=[...o,d.children.length-1]}if(e.activeContextPath=c,u&&(e.viewContextPath=c),o.length===0){const d=e.nodes[r.agent_name];d&&(d.status="running",Le(e.nodes,r.agent_name))}else{const d=qn(e.subworkflowContexts,o);if(d){const h=d.nodes[r.agent_name];h&&(h.status="running",Le(d.nodes,r.agent_name))}}},subworkflow_completed:(e,n)=>{var o;const r=n;let l;if(r.parent_path!==void 0){const u=Vi(e.subworkflowContexts,r.parent_path);if(!u)return;l=u.indexPath}else l=e.activeContextPath;const a=l.length===0?e.nodes:(o=qn(e.subworkflowContexts,l))==null?void 0:o.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 c=qn(e.subworkflowContexts,l);c&&c.agentsCompleted++}Le(a,r.agent_name)}}e.activeContextPath=l},subworkflow_failed:(e,n)=>{var o;const r=n;let l;if(r.parent_path!==void 0){const u=Vi(e.subworkflowContexts,r.parent_path);if(!u)return;l=u.indexPath}else l=e.activeContextPath;const a=l.length===0?e.nodes:(o=qn(e.subworkflowContexts,l))==null?void 0:o.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,Le(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=Ge(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"}),Le(e.nodes,r.agent_name),e.isPaused=!0},agent_resumed:(e,n)=>{const r=n,l=Ge(e.nodes,r.agent_name);l.status="running",l.activity.push({type:"agent_resumed",icon:"▶",label:"Resumed",text:"Agent resumed — re-executing"}),Le(e.nodes,r.agent_name),e.isPaused=!1},dialog_started:(e,n)=>{const r=n,l=Ge(e.nodes,r.agent_name);l.dialog_id=r.dialog_id,l.dialog_messages=[],l.dialog_active=!0,l.dialog_awaiting_response=!1,e.activeDialog={agentName:r.agent_name,dialogId:r.dialog_id},e.dialogEngaged=!1,Le(e.nodes,r.agent_name)},dialog_message:(e,n)=>{const r=n,l=Ge(e.nodes,r.agent_name);l.dialog_messages||(l.dialog_messages=[]),l.dialog_messages.push({role:r.role,content:r.content}),r.role==="user"?l.dialog_awaiting_response=!0:r.role==="agent"&&(l.dialog_awaiting_response=!1),Le(e.nodes,r.agent_name)},dialog_completed:(e,n)=>{const r=n,l=Ge(e.nodes,r.agent_name);l.dialog_active=!1,l.dialog_awaiting_response=!1,e.activeDialog=null,e.dialogEngaged=!1,Le(e.nodes,r.agent_name)}};function Du(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 ${Qu(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 ${Qu(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 ${Qu(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"};case"dialog_started":return{timestamp:n,level:"warning",source:String(r.agent_name),message:"Dialog started — waiting for user…"};case"dialog_completed":return{timestamp:n,level:"success",source:String(r.agent_name),message:`Dialog completed (${r.turn_count||0} messages)`};default:return null}}function Qu(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 Ru(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:xo(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?xo(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?xo(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:xo(String(r.content||""),500)};case"agent_completed":return{timestamp:n,source:String(r.agent_name),type:"turn",message:`Completed${r.elapsed!=null?` in ${Qu(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?xo(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 xo(e,n){return e.length<=n?e:e.slice(0,n)+"…"}function ev(e){const n=e.match(/^(\s*)/);return n?n[1].length:0}function zN(e){const n=new Map;for(let r=0;ra)o=u;else break}o>r&&n.set(r,o)}return n}function MN(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,o,u,c]=n;return b.jsxs("span",{children:[l,a??"",b.jsx("span",{className:"text-sky-400",children:o}),b.jsx("span",{className:"text-[var(--text-muted)]",children:u}),tv(c)]})}const r=e.match(/^(\s*)(- )(.*)/);if(r){const[,l,a,o]=r;return b.jsxs("span",{children:[l,b.jsx("span",{className:"text-[var(--text-muted)]",children:a}),tv(o)]})}return b.jsx("span",{children:e})}function tv(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 DN({yaml:e,onClose:n}){const[r,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 a=V.useMemo(()=>e.split(` +`),[e]),o=V.useMemo(()=>zN(a),[a]),u=V.useCallback(d=>{l(h=>{const m=new Set(h);return m.has(d)?m.delete(d):m.add(d),m})},[]),c=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(Rr,{className:"w-3 h-3"}):b.jsx(il,{className:"w-3 h-3"})}):null}),b.jsxs("span",{className:"flex-1",children:[MN(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 RN(){const e=fe(_=>_.workflowName),n=fe(_=>_.workflowStatus),r=fe(_=>_.isPaused),l=fe(_=>_.workflowYaml),a=fe(_=>_.conductorVersion),[o,u]=V.useState(!1),[c,d]=V.useState(!1),[h,m]=V.useState(!1),[p,x]=V.useState(!1),v=n==="running"||n==="pending";V.useEffect(()=>{r||(u(!1),d(!1),m(!1))},[r]);const w=async()=>{u(!0);try{await fetch("/api/stop",{method:"POST"})}catch(_){console.error("Failed to stop agent:",_),u(!1)}},E=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(dw,{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:E,disabled:c,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(mm,{className:"w-3 h-3"}),c?"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\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(xa,{className:"w-3 h-3"}),h?"Killing...":"Kill"]})]}):v?b.jsxs("button",{onClick:w,disabled:o,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(xw,{className:"w-3 h-3"}),o?"Stopping...":"Stop"]}):null,l&&b.jsxs("button",{onClick:()=>x(!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(dN,{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(cN,{className:"w-3 h-3"}),"Logs"]}),b.jsxs("span",{className:"text-xs text-[var(--text-muted)]",children:["v",a??"—"]})]}),p&&l&&b.jsx(DN,{yaml:l,onClose:()=>x(!1)})]})}function ON(){const e=fe(o=>o.getBreadcrumbs),n=fe(o=>o.navigateToContext),r=fe(o=>o.viewContextPath);if(fe(o=>o.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(hm,{className:"w-3 h-3 text-[var(--text-muted)] mr-1"}),a.map((o,u)=>{const c=u===a.length-1,d=JSON.stringify(o.path)===JSON.stringify(r);return b.jsxs("span",{className:"flex items-center gap-1",children:[u>0&&b.jsx(Rr,{className:"w-3 h-3 text-[var(--text-muted)]"}),c?b.jsx("span",{className:"font-semibold text-[var(--text)]",children:o.label}):b.jsx("button",{onClick:()=>n(o.path),className:`hover:text-[var(--running)] transition-colors ${d?"text-[var(--text)] font-medium":"text-[var(--text-muted)]"}`,children:o.label})]},u)})]})}function He(...e){return e.filter(Boolean).join(" ")}function Jt(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 yi(e){return e==null?"":`$${e.toFixed(4)}`}function yw(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 vw(){const e=fe(c=>c.workflowStatus),n=fe(c=>c.workflowStartTime),r=fe(c=>c.replayMode),l=fe(c=>c.lastEventTime),[a,o]=V.useState("—"),u=V.useRef(null);return V.useEffect(()=>{if(n!=null){if(r){u.current&&(clearInterval(u.current),u.current=null),o(Jt((l??n)-n));return}if(e==="running"){const c=()=>{const d=Date.now()/1e3-n;o(Jt(d))};return c(),u.current=setInterval(c,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=fe(E=>E.workflowStatus),n=fe(E=>E.agentsCompleted),r=fe(E=>E.agentsTotal),l=fe(E=>E.totalCost),a=fe(E=>E.totalTokens),o=fe(E=>E.wsStatus),u=fe(E=>E.workflowFailure),c=fe(E=>E.lastEventTime),d=vw(),[h,m]=V.useState(null);V.useEffect(()=>{if(e!=="running"||c==null){m(null);return}const E=()=>{m(Math.floor(Date.now()/1e3-c))};E();const S=setInterval(E,1e3);return()=>clearInterval(S)},[e,c]);const p=e==="failed",x=(()=>{switch(e){case"pending":return"Waiting for workflow…";case"running":return"Running";case"completed":return"Completed";case"failed":{if(!u)return"Failed";const E=u.error_type||"";return E==="MaxIterationsError"?"Failed: exceeded maximum iterations":E==="TimeoutError"?"Failed: workflow timed out":u.message?`Failed: ${u.message.length>60?u.message.slice(0,57)+"...":u.message}`:`Failed: ${E}`}}})(),v={pending:"bg-[var(--pending)]",running:"bg-[var(--running)] animate-pulse",completed:"bg-[var(--completed)]",failed:"bg-[var(--failed)]"}[e],w=(()=>{switch(o){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(Oo,{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(Oo,{className:"w-3 h-3 animate-spin"}),b.jsx("span",{children:"Connecting\\u2026"})]})}})();return b.jsxs("footer",{className:He("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:He("w-2 h-2 rounded-full flex-shrink-0",v)}),b.jsx("span",{className:He(p?"text-red-300":"text-[var(--text)]"),children:x}),r>0&&b.jsxs("span",{className:He(p?"text-red-400/60":"text-[var(--text-muted)]"),children:[n,"/",r," agents"]}),e!=="pending"&&b.jsx("span",{className:He("font-mono",p?"text-red-400/60":"text-[var(--text-muted)]"),children:d}),a>0&&b.jsxs("span",{className:He("flex items-center gap-1",p?"text-red-400/60":"text-[var(--text-muted)]"),title:"Total tokens used",children:[b.jsx(mw,{className:"w-3 h-3"}),b.jsx("span",{className:"font-mono",children:a.toLocaleString()})]}),l>0&&b.jsxs("span",{className:He("flex items-center gap-1",p?"text-red-400/60":"text-[var(--text-muted)]"),title:"Total cost",children:[b.jsx(hw,{className:"w-3 h-3"}),b.jsxs("span",{className:"font-mono",children:["$",l.toFixed(4)]})]}),h!=null&&h>=5&&b.jsxs("span",{className:He("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(uN,{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 BN=[1,5,10,20,50];function IN(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 o=Math.floor(a/60),u=a%60;return`+${o}m${u.toFixed(0)}s`}function qN(){const e=fe(p=>p.replayPosition),n=fe(p=>p.replayTotalEvents),r=fe(p=>p.replayPlaying),l=fe(p=>p.replaySpeed),a=fe(p=>p.replayEvents),o=fe(p=>p.setReplayPosition),u=fe(p=>p.setReplayPlaying),c=fe(p=>p.setReplaySpeed),d=p=>{const x=parseInt(p.target.value,10);o(x),r&&u(!1)},h=()=>{!r&&e>=n&&o(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: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:r?"Pause":"Play",children:r?b.jsx(gN,{className:"w-3.5 h-3.5"}):b.jsx(mm,{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:IN(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:()=>c(p),className:He("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 Sc=V.createContext(null);Sc.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"},gm=10,Xi=V.useLayoutEffect,nv=X2.useId,UN=typeof nv=="function"?nv:()=>null;let PN=0;function xm(e=null){const n=UN(),r=V.useRef(e||n||null);return r.current===null&&(r.current=""+PN++),e??r.current}function bw({children:e,className:n="",collapsedSize:r,collapsible:l,defaultSize:a,forwardedRef:o,id:u,maxSize:c,minSize:d,onCollapse:h,onExpand:m,onResize:p,order:x,style:v,tagName:w="div",...E}){const S=V.useContext(Sc);if(S===null)throw Error("Panel components must be rendered within a PanelGroup container");const{collapsePanel:_,expandPanel:T,getPanelSize:k,getPanelStyle:A,groupId:q,isPanelCollapsed:j,reevaluatePanelConstraints:L,registerPanel:O,resizePanel:P,unregisterPanel:R}=S,H=xm(u),U=V.useRef({callbacks:{onCollapse:h,onExpand:m,onResize:p},constraints:{collapsedSize:r,collapsible:l,defaultSize:a,maxSize:c,minSize:d},id:H,idIsFromProps:u!==void 0,order:x});V.useRef({didLogMissingDefaultSizeWarning:!1}),Xi(()=>{const{callbacks:B,constraints:F}=U.current,z={...F};U.current.id=H,U.current.idIsFromProps=u!==void 0,U.current.order=x,B.onCollapse=h,B.onExpand=m,B.onResize=p,F.collapsedSize=r,F.collapsible=l,F.defaultSize=a,F.maxSize=c,F.minSize=d,(z.collapsedSize!==F.collapsedSize||z.collapsible!==F.collapsible||z.maxSize!==F.maxSize||z.minSize!==F.minSize)&&L(U.current,z)}),Xi(()=>{const B=U.current;return O(B),()=>{R(B)}},[x,H,O,R]),V.useImperativeHandle(o,()=>({collapse:()=>{_(U.current)},expand:B=>{T(U.current,B)},getId(){return H},getSize(){return k(U.current)},isCollapsed(){return j(U.current)},isExpanded(){return!j(U.current)},resize:B=>{P(U.current,B)}}),[_,T,k,j,H,P]);const ee=A(U.current,a);return V.createElement(w,{...E,children:e,className:n,id:H,style:{...ee,...v},[yt.groupId]:q,[yt.panel]:"",[yt.panelCollapsible]:l||void 0,[yt.panelId]:H,[yt.panelSize]:parseFloat(""+ee.flexGrow).toFixed(1)})}const ko=V.forwardRef((e,n)=>V.createElement(bw,{...e,forwardedRef:n}));bw.displayName="Panel";ko.displayName="forwardRef(Panel)";let Bp=null,Zu=-1,gi=null;function VN(e,n){if(n){const r=(n&Ew)!==0,l=(n&Nw)!==0,a=(n&Cw)!==0,o=(n&Tw)!==0;if(r)return a?"se-resize":o?"ne-resize":"e-resize";if(l)return a?"sw-resize":o?"nw-resize":"w-resize";if(a)return"s-resize";if(o)return"n-resize"}switch(e){case"horizontal":return"ew-resize";case"intersection":return"move";case"vertical":return"ns-resize"}}function $N(){gi!==null&&(document.head.removeChild(gi),Bp=null,gi=null,Zu=-1)}function sh(e,n){var r,l;const a=VN(e,n);if(Bp!==a){if(Bp=a,gi===null&&(gi=document.createElement("style"),document.head.appendChild(gi)),Zu>=0){var o;(o=gi.sheet)===null||o===void 0||o.removeRule(Zu)}Zu=(r=(l=gi.sheet)===null||l===void 0?void 0:l.insertRule(`*{cursor: ${a} !important;}`))!==null&&r!==void 0?r:-1}}function ww(e){return e.type==="keydown"}function Sw(e){return e.type.startsWith("pointer")}function _w(e){return e.type.startsWith("mouse")}function _c(e){if(Sw(e)){if(e.isPrimary)return{x:e.clientX,y:e.clientY}}else if(_w(e))return{x:e.clientX,y:e.clientY};return{x:1/0,y:1/0}}function GN(){if(typeof matchMedia=="function")return matchMedia("(pointer:coarse)").matches?"coarse":"fine"}function FN(e,n,r){return e.xn.x&&e.yn.y}function YN(e,n){if(e===n)throw new Error("Cannot compare node with itself");const r={a:lv(e),b:lv(n)};let l;for(;r.a.at(-1)===r.b.at(-1);)e=r.a.pop(),n=r.b.pop(),l=e;Re(l,"Stacking order can only be calculated for elements with a common ancestor");const a={a:iv(rv(r.a)),b:iv(rv(r.b))};if(a.a===a.b){const o=l.childNodes,u={a:r.a.at(-1),b:r.b.at(-1)};let c=o.length;for(;c--;){const d=o[c];if(d===u.a)return 1;if(d===u.b)return-1}}return Math.sign(a.a-a.b)}const XN=/\b(?:position|zIndex|opacity|transform|webkitTransform|mixBlendMode|filter|webkitFilter|isolation)\b/;function QN(e){var n;const r=getComputedStyle((n=kw(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"||XN.test(n.willChange)||n.webkitOverflowScrolling==="touch")}function rv(e){let n=e.length;for(;n--;){const r=e[n];if(Re(r,"Missing node"),ZN(r))return r}return null}function iv(e){return e&&Number(getComputedStyle(e).zIndex)||0}function lv(e){const n=[];for(;e;)n.push(e),e=kw(e);return n}function kw(e){const{parentNode:n}=e;return n&&n instanceof ShadowRoot?n.host:n}const Ew=1,Nw=2,Cw=4,Tw=8,KN=GN()==="coarse";let Fn=[],la=!1,Gi=new Map,kc=new Map;const Lo=new Set;function JN(e,n,r,l,a){var o;const{ownerDocument:u}=n,c={direction:r,element:n,hitAreaMargins:l,setResizeHandlerState:a},d=(o=Gi.get(u))!==null&&o!==void 0?o:0;return Gi.set(u,d+1),Lo.add(c),ic(),function(){var m;kc.delete(e),Lo.delete(c);const p=(m=Gi.get(u))!==null&&m!==void 0?m:1;if(Gi.set(u,p-1),ic(),p===1&&Gi.delete(u),Fn.includes(c)){const x=Fn.indexOf(c);x>=0&&Fn.splice(x,1),vm(),a("up",!0,null)}}}function WN(e){const{target:n}=e,{x:r,y:l}=_c(e);la=!0,ym({target:n,x:r,y:l}),ic(),Fn.length>0&&(lc("down",e),e.preventDefault(),Aw(n)||e.stopImmediatePropagation())}function uh(e){const{x:n,y:r}=_c(e);if(la&&e.buttons===0&&(la=!1,lc("up",e)),!la){const{target:l}=e;ym({target:l,x:n,y:r})}lc("move",e),vm(),Fn.length>0&&e.preventDefault()}function ch(e){const{target:n}=e,{x:r,y:l}=_c(e);kc.clear(),la=!1,Fn.length>0&&(e.preventDefault(),Aw(n)||e.stopImmediatePropagation()),lc("up",e),ym({target:n,x:r,y:l}),vm(),ic()}function Aw(e){let n=e;for(;n;){if(n.hasAttribute(yt.resizeHandle))return!0;n=n.parentElement}return!1}function ym({target:e,x:n,y:r}){Fn.splice(0);let l=null;(e instanceof HTMLElement||e instanceof SVGElement)&&(l=e),Lo.forEach(a=>{const{element:o,hitAreaMargins:u}=a,c=o.getBoundingClientRect(),{bottom:d,left:h,right:m,top:p}=c,x=KN?u.coarse:u.fine;if(n>=h-x&&n<=m+x&&r>=p-x&&r<=d+x){if(l!==null&&document.contains(l)&&o!==l&&!o.contains(l)&&!l.contains(o)&&YN(l,o)>0){let w=l,E=!1;for(;w&&!w.contains(o);){if(FN(w.getBoundingClientRect(),c)){E=!0;break}w=w.parentElement}if(E)return}Fn.push(a)}})}function fh(e,n){kc.set(e,n)}function vm(){let e=!1,n=!1;Fn.forEach(l=>{const{direction:a}=l;a==="horizontal"?e=!0:n=!0});let r=0;kc.forEach(l=>{r|=l}),e&&n?sh("intersection",r):e?sh("horizontal",r):n?sh("vertical",r):$N()}let dh=new AbortController;function ic(){dh.abort(),dh=new AbortController;const e={capture:!0,signal:dh.signal};Lo.size&&(la?(Fn.length>0&&Gi.forEach((n,r)=>{const{body:l}=r;n>0&&(l.addEventListener("contextmenu",ch,e),l.addEventListener("pointerleave",uh,e),l.addEventListener("pointermove",uh,e))}),window.addEventListener("pointerup",ch,e),window.addEventListener("pointercancel",ch,e)):Gi.forEach((n,r)=>{const{body:l}=r;n>0&&(l.addEventListener("pointerdown",WN,e),l.addEventListener("pointermove",uh,e))}))}function lc(e,n){Lo.forEach(r=>{const{setResizeHandlerState:l}=r,a=Fn.includes(r);l(e,a,n)})}function eC(){const[e,n]=V.useState(0);return V.useCallback(()=>n(r=>r+1),[])}function Re(e,n){if(!e)throw console.error(n),Error(n)}function Ki(e,n,r=gm){return e.toFixed(r)===n.toFixed(r)?0:e>n?1:-1}function jr(e,n,r=gm){return Ki(e,n,r)===0}function bn(e,n,r){return Ki(e,n,r)===0}function tC(e,n,r){if(e.length!==n.length)return!1;for(let l=0;l0&&(e=e<0?0-_:_)}}}{const p=e<0?c:d,x=r[p];Re(x,`No panel constraints found for index ${p}`);const{collapsedSize:v=0,collapsible:w,minSize:E=0}=x;if(w){const S=n[p];if(Re(S!=null,`Previous layout not found for panel index ${p}`),bn(S,E)){const _=S-v;Ki(_,Math.abs(e))>0&&(e=e<0?0-_:_)}}}}{const p=e<0?1:-1;let x=e<0?d:c,v=0;for(;;){const E=n[x];Re(E!=null,`Previous layout not found for panel index ${x}`);const _=ta({panelConstraints:r,panelIndex:x,size:100})-E;if(v+=_,x+=p,x<0||x>=r.length)break}const w=Math.min(Math.abs(e),Math.abs(v));e=e<0?0-w:w}{let x=e<0?c:d;for(;x>=0&&x=0))break;e<0?x--:x++}}if(tC(a,u))return a;{const p=e<0?d:c,x=n[p];Re(x!=null,`Previous layout not found for panel index ${p}`);const v=x+h,w=ta({panelConstraints:r,panelIndex:p,size:v});if(u[p]=w,!bn(w,v)){let E=v-w,_=e<0?d:c;for(;_>=0&&_0?_--:_++}}}const m=u.reduce((p,x)=>x+p,0);return bn(m,100)?u:a}function nC({layout:e,panelsArray:n,pivotIndices:r}){let l=0,a=100,o=0,u=0;const c=r[0];Re(c!=null,"No pivot index found"),n.forEach((p,x)=>{const{constraints:v}=p,{maxSize:w=100,minSize:E=0}=v;x===c?(l=E,a=w):(o+=E,u+=w)});const d=Math.min(a,100-o),h=Math.max(l,100-u),m=e[c];return{valueMax:d,valueMin:h,valueNow:m}}function Ho(e,n=document){return Array.from(n.querySelectorAll(`[${yt.resizeHandleId}][data-panel-group-id="${e}"]`))}function jw(e,n,r=document){const a=Ho(e,r).findIndex(o=>o.getAttribute(yt.resizeHandleId)===n);return a??null}function zw(e,n,r){const l=jw(e,n,r);return l!=null?[l,l+1]:[-1,-1]}function Mw(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 Ec(e,n=document){const r=n.querySelector(`[${yt.resizeHandleId}="${e}"]`);return r||null}function rC(e,n,r,l=document){var a,o,u,c;const d=Ec(n,l),h=Ho(e,l),m=d?h.indexOf(d):-1,p=(a=(o=r[m])===null||o===void 0?void 0:o.id)!==null&&a!==void 0?a:null,x=(u=(c=r[m+1])===null||c===void 0?void 0:c.id)!==null&&u!==void 0?u:null;return[p,x]}function iC({committedValuesRef:e,eagerValuesRef:n,groupId:r,layout:l,panelDataArray:a,panelGroupElement:o,setLayout:u}){V.useRef({didWarnAboutMissingResizeHandle:!1}),Xi(()=>{if(!o)return;const c=Ho(r,o);for(let d=0;d{c.forEach((d,h)=>{d.removeAttribute("aria-controls"),d.removeAttribute("aria-valuemax"),d.removeAttribute("aria-valuemin"),d.removeAttribute("aria-valuenow")})}},[r,l,a,o]),V.useEffect(()=>{if(!o)return;const c=n.current;Re(c,"Eager values not found");const{panelDataArray:d}=c,h=Mw(r,o);Re(h!=null,`No group found for id "${r}"`);const m=Ho(r,o);Re(m,`No resize handles found for group id "${r}"`);const p=m.map(x=>{const v=x.getAttribute(yt.resizeHandleId);Re(v,"Resize handle element has no handle id attribute");const[w,E]=rC(r,v,d,o);if(w==null||E==null)return()=>{};const S=_=>{if(!_.defaultPrevented)switch(_.key){case"Enter":{_.preventDefault();const T=d.findIndex(k=>k.id===w);if(T>=0){const k=d[T];Re(k,`No panel data found for index ${T}`);const A=l[T],{collapsedSize:q=0,collapsible:j,minSize:L=0}=k.constraints;if(A!=null&&j){const O=Eo({delta:bn(A,q)?L-q:q-A,initialLayout:l,panelConstraints:d.map(P=>P.constraints),pivotIndices:zw(r,v,o),prevLayout:l,trigger:"keyboard"});l!==O&&u(O)}}break}}};return x.addEventListener("keydown",S),()=>{x.removeEventListener("keydown",S)}});return()=>{p.forEach(x=>x())}},[o,e,n,r,l,a,u])}function av(e,n){if(e.length!==n.length)return!1;for(let r=0;ro.constraints);let l=0,a=100;for(let o=0;o{const o=e[a];Re(o,`Panel data not found for index ${a}`);const{callbacks:u,constraints:c,id:d}=o,{collapsedSize:h=0,collapsible:m}=c,p=r[d];if(p==null||l!==p){r[d]=l;const{onCollapse:x,onExpand:v,onResize:w}=u;w&&w(l,p),m&&(x||v)&&(v&&(p==null||jr(p,h))&&!jr(l,h)&&v(),x&&(p==null||!jr(p,h))&&jr(l,h)&&x())}})}function Ou(e,n){if(e.length!==n.length)return!1;for(let r=0;r{r!==null&&clearTimeout(r),r=setTimeout(()=>{e(...a)},n)}}function ov(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 Ow(e){return e.map(n=>{const{constraints:r,id:l,idIsFromProps:a,order:o}=n;return a?l:o?`${o}:${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 cC(e,n,r){var l,a;const o=(l=Lw(e,r))!==null&&l!==void 0?l:{},u=Ow(n);return(a=o[u])!==null&&a!==void 0?a:null}function fC(e,n,r,l,a){var o;const u=Rw(e),c=Ow(n),d=(o=Lw(e,a))!==null&&o!==void 0?o:{};d[c]={expandToSizes:Object.fromEntries(r.entries()),layout:l};try{a.setItem(u,JSON.stringify(d))}catch(h){console.error(h)}}function sv({layout:e,panelConstraints:n}){const r=[...e],l=r.reduce((o,u)=>o+u,0);if(r.length!==n.length)throw Error(`Invalid ${n.length} panel layout: ${r.map(o=>`${o}%`).join(", ")}`);if(!bn(l,100)&&r.length>0)for(let o=0;o(ov(No),No.getItem(e)),setItem:(e,n)=>{ov(No),No.setItem(e,n)}},uv={};function Hw({autoSaveId:e=null,children:n,className:r="",direction:l,forwardedRef:a,id:o=null,onLayout:u=null,keyboardResizeBy:c=null,storage:d=No,style:h,tagName:m="div",...p}){const x=xm(o),v=V.useRef(null),[w,E]=V.useState(null),[S,_]=V.useState([]),T=eC(),k=V.useRef({}),A=V.useRef(new Map),q=V.useRef(0),j=V.useRef({autoSaveId:e,direction:l,dragState:w,id:x,keyboardResizeBy:c,onLayout:u,storage:d}),L=V.useRef({layout:S,panelDataArray:[],panelDataArrayChanged:!1});V.useRef({didLogIdAndOrderWarning:!1,didLogPanelConstraintsWarning:!1,prevPanelIds:[]}),V.useImperativeHandle(a,()=>({getId:()=>j.current.id,getLayout:()=>{const{layout:N}=L.current;return N},setLayout:N=>{const{onLayout:$}=j.current,{layout:X,panelDataArray:J}=L.current,ne=sv({layout:N,panelConstraints:J.map(re=>re.constraints)});av(X,ne)||(_(ne),L.current.layout=ne,$&&$(ne),Xl(J,ne,k.current))}}),[]),Xi(()=>{j.current.autoSaveId=e,j.current.direction=l,j.current.dragState=w,j.current.id=x,j.current.onLayout=u,j.current.storage=d}),iC({committedValuesRef:j,eagerValuesRef:L,groupId:x,layout:S,panelDataArray:L.current.panelDataArray,setLayout:_,panelGroupElement:v.current}),V.useEffect(()=>{const{panelDataArray:N}=L.current;if(e){if(S.length===0||S.length!==N.length)return;let $=uv[e];$==null&&($=uC(fC,dC),uv[e]=$);const X=[...N],J=new Map(A.current);$(e,X,J,S,d)}},[e,S,d]),V.useEffect(()=>{});const O=V.useCallback(N=>{const{onLayout:$}=j.current,{layout:X,panelDataArray:J}=L.current;if(N.constraints.collapsible){const ne=J.map(be=>be.constraints),{collapsedSize:re=0,panelSize:se,pivotIndices:xe}=Ui(J,N,X);if(Re(se!=null,`Panel size not found for panel "${N.id}"`),!jr(se,re)){A.current.set(N.id,se);const ye=Jl(J,N)===J.length-1?se-re:re-se,pe=Eo({delta:ye,initialLayout:X,panelConstraints:ne,pivotIndices:xe,prevLayout:X,trigger:"imperative-api"});Ou(X,pe)||(_(pe),L.current.layout=pe,$&&$(pe),Xl(J,pe,k.current))}}},[]),P=V.useCallback((N,$)=>{const{onLayout:X}=j.current,{layout:J,panelDataArray:ne}=L.current;if(N.constraints.collapsible){const re=ne.map(_e=>_e.constraints),{collapsedSize:se=0,panelSize:xe=0,minSize:be=0,pivotIndices:ye}=Ui(ne,N,J),pe=$??be;if(jr(xe,se)){const _e=A.current.get(N.id),ze=_e!=null&&_e>=pe?_e:pe,ut=Jl(ne,N)===ne.length-1?xe-ze:ze-xe,nt=Eo({delta:ut,initialLayout:J,panelConstraints:re,pivotIndices:ye,prevLayout:J,trigger:"imperative-api"});Ou(J,nt)||(_(nt),L.current.layout=nt,X&&X(nt),Xl(ne,nt,k.current))}}},[]),R=V.useCallback(N=>{const{layout:$,panelDataArray:X}=L.current,{panelSize:J}=Ui(X,N,$);return Re(J!=null,`Panel size not found for panel "${N.id}"`),J},[]),H=V.useCallback((N,$)=>{const{panelDataArray:X}=L.current,J=Jl(X,N);return sC({defaultSize:$,dragState:w,layout:S,panelData:X,panelIndex:J})},[w,S]),U=V.useCallback(N=>{const{layout:$,panelDataArray:X}=L.current,{collapsedSize:J=0,collapsible:ne,panelSize:re}=Ui(X,N,$);return Re(re!=null,`Panel size not found for panel "${N.id}"`),ne===!0&&jr(re,J)},[]),ee=V.useCallback(N=>{const{layout:$,panelDataArray:X}=L.current,{collapsedSize:J=0,collapsible:ne,panelSize:re}=Ui(X,N,$);return Re(re!=null,`Panel size not found for panel "${N.id}"`),!ne||Ki(re,J)>0},[]),B=V.useCallback(N=>{const{panelDataArray:$}=L.current;$.push(N),$.sort((X,J)=>{const ne=X.order,re=J.order;return ne==null&&re==null?0:ne==null?-1:re==null?1:ne-re}),L.current.panelDataArrayChanged=!0,T()},[T]);Xi(()=>{if(L.current.panelDataArrayChanged){L.current.panelDataArrayChanged=!1;const{autoSaveId:N,onLayout:$,storage:X}=j.current,{layout:J,panelDataArray:ne}=L.current;let re=null;if(N){const xe=cC(N,ne,X);xe&&(A.current=new Map(Object.entries(xe.expandToSizes)),re=xe.layout)}re==null&&(re=oC({panelDataArray:ne}));const se=sv({layout:re,panelConstraints:ne.map(xe=>xe.constraints)});av(J,se)||(_(se),L.current.layout=se,$&&$(se),Xl(ne,se,k.current))}}),Xi(()=>{const N=L.current;return()=>{N.layout=[]}},[]);const F=V.useCallback(N=>{let $=!1;const X=v.current;return X&&window.getComputedStyle(X,null).getPropertyValue("direction")==="rtl"&&($=!0),function(ne){ne.preventDefault();const re=v.current;if(!re)return()=>null;const{direction:se,dragState:xe,id:be,keyboardResizeBy:ye,onLayout:pe}=j.current,{layout:_e,panelDataArray:ze}=L.current,{initialLayout:Te}=xe??{},ut=zw(be,N,re);let nt=aC(ne,N,se,xe,ye,re);const zt=se==="horizontal";zt&&$&&(nt=-nt);const Vt=ze.map(Rn=>Rn.constraints),Ht=Eo({delta:nt,initialLayout:Te??_e,panelConstraints:Vt,pivotIndices:ut,prevLayout:_e,trigger:ww(ne)?"keyboard":"mouse-or-touch"}),kn=!Ou(_e,Ht);(Sw(ne)||_w(ne))&&q.current!=nt&&(q.current=nt,!kn&&nt!==0?zt?fh(N,nt<0?Ew:Nw):fh(N,nt<0?Cw:Tw):fh(N,0)),kn&&(_(Ht),L.current.layout=Ht,pe&&pe(Ht),Xl(ze,Ht,k.current))}},[]),z=V.useCallback((N,$)=>{const{onLayout:X}=j.current,{layout:J,panelDataArray:ne}=L.current,re=ne.map(_e=>_e.constraints),{panelSize:se,pivotIndices:xe}=Ui(ne,N,J);Re(se!=null,`Panel size not found for panel "${N.id}"`);const ye=Jl(ne,N)===ne.length-1?se-$:$-se,pe=Eo({delta:ye,initialLayout:J,panelConstraints:re,pivotIndices:xe,prevLayout:J,trigger:"imperative-api"});Ou(J,pe)||(_(pe),L.current.layout=pe,X&&X(pe),Xl(ne,pe,k.current))},[]),G=V.useCallback((N,$)=>{const{layout:X,panelDataArray:J}=L.current,{collapsedSize:ne=0,collapsible:re}=$,{collapsedSize:se=0,collapsible:xe,maxSize:be=100,minSize:ye=0}=N.constraints,{panelSize:pe}=Ui(J,N,X);pe!=null&&(re&&xe&&jr(pe,ne)?jr(ne,se)||z(N,se):pebe&&z(N,be))},[z]),Q=V.useCallback((N,$)=>{const{direction:X}=j.current,{layout:J}=L.current;if(!v.current)return;const ne=Ec(N,v.current);Re(ne,`Drag handle element not found for id "${N}"`);const re=Dw(X,$);E({dragHandleId:N,dragHandleRect:ne.getBoundingClientRect(),initialCursorPosition:re,initialLayout:J})},[]),K=V.useCallback(()=>{E(null)},[]),M=V.useCallback(N=>{const{panelDataArray:$}=L.current,X=Jl($,N);X>=0&&($.splice(X,1),delete k.current[N.id],L.current.panelDataArrayChanged=!0,T())},[T]),I=V.useMemo(()=>({collapsePanel:O,direction:l,dragState:w,expandPanel:P,getPanelSize:R,getPanelStyle:H,groupId:x,isPanelCollapsed:U,isPanelExpanded:ee,reevaluatePanelConstraints:G,registerPanel:B,registerResizeHandle:F,resizePanel:z,startDragging:Q,stopDragging:K,unregisterPanel:M,panelGroupElement:v.current}),[O,w,l,P,R,H,x,U,ee,G,B,F,z,Q,K,M]),Y={display:"flex",flexDirection:l==="horizontal"?"row":"column",height:"100%",overflow:"hidden",width:"100%"};return V.createElement(Sc.Provider,{value:I},V.createElement(m,{...p,children:n,className:r,id:o,ref:v,style:{...Y,...h},[yt.group]:"",[yt.groupDirection]:l,[yt.groupId]:x}))}const Ip=V.forwardRef((e,n)=>V.createElement(Hw,{...e,forwardedRef:n}));Hw.displayName="PanelGroup";Ip.displayName="forwardRef(PanelGroup)";function Jl(e,n){return e.findIndex(r=>r===n||r.id===n.id)}function Ui(e,n,r){const l=Jl(e,n),o=l===e.length-1?[l-1,l]:[l,l+1],u=r[l];return{...n.constraints,panelSize:u,pivotIndices:o}}function hC({disabled:e,handleId:n,resizeHandler:r,panelGroupElement:l}){V.useEffect(()=>{if(e||r==null||l==null)return;const a=Ec(n,l);if(a==null)return;const o=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 c=a.getAttribute(yt.groupId);Re(c,`No group element found for id "${c}"`);const d=Ho(c,l),h=jw(c,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{a.removeEventListener("keydown",o)}},[l,e,n,r])}function qp({children:e=null,className:n="",disabled:r=!1,hitAreaMargins:l,id:a,onBlur:o,onClick:u,onDragging:c,onFocus:d,onPointerDown:h,onPointerUp:m,style:p={},tabIndex:x=0,tagName:v="div",...w}){var E,S;const _=V.useRef(null),T=V.useRef({onClick:u,onDragging:c,onPointerDown:h,onPointerUp:m});V.useEffect(()=>{T.current.onClick=u,T.current.onDragging=c,T.current.onPointerDown=h,T.current.onPointerUp=m});const k=V.useContext(Sc);if(k===null)throw Error("PanelResizeHandle components must be rendered within a PanelGroup container");const{direction:A,groupId:q,registerResizeHandle:j,startDragging:L,stopDragging:O,panelGroupElement:P}=k,R=xm(a),[H,U]=V.useState("inactive"),[ee,B]=V.useState(!1),[F,z]=V.useState(null),G=V.useRef({state:H});Xi(()=>{G.current.state=H}),V.useEffect(()=>{if(r)z(null);else{const I=j(R);z(()=>I)}},[r,R,j]);const Q=(E=l==null?void 0:l.coarse)!==null&&E!==void 0?E:15,K=(S=l==null?void 0:l.fine)!==null&&S!==void 0?S:5;V.useEffect(()=>{if(r||F==null)return;const I=_.current;Re(I,"Element ref not attached");let Y=!1;return JN(R,I,A,{coarse:Q,fine:K},($,X,J)=>{if(!X){U("inactive");return}switch($){case"down":{U("drag"),Y=!1,Re(J,'Expected event to be defined for "down" action'),L(R,J);const{onDragging:ne,onPointerDown:re}=T.current;ne==null||ne(!0),re==null||re();break}case"move":{const{state:ne}=G.current;Y=!0,ne!=="drag"&&U("hover"),Re(J,'Expected event to be defined for "move" action'),F(J);break}case"up":{U("hover"),O();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,j,R,F,L,O]),hC({disabled:r,handleId:R,resizeHandler:F,panelGroupElement:P});const M={touchAction:"none",userSelect:"none"};return V.createElement(v,{...w,children:e,className:n,id:a,onBlur:()=>{B(!1),o==null||o()},onFocus:()=>{B(!0),d==null||d()},ref:_,role:"separator",style:{...M,...p},tabIndex:x,[yt.groupDirection]:A,[yt.groupId]:q,[yt.resizeHandle]:"",[yt.resizeHandleActive]:H==="drag"?"pointer":ee?"keyboard":void 0,[yt.resizeHandleEnabled]:!r,[yt.resizeHandleId]:R,[yt.resizeHandleState]:H})}qp.displayName="PanelResizeHandle";function jt(e){if(typeof e=="string"||typeof e=="number")return""+e;let n="";if(Array.isArray(e))for(let r=0,l;r{}};function Nc(){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}})}Ku.prototype=Nc.prototype={constructor:Ku,on:function(e,n){var r=this._,l=mC(e+"",r),a,o=-1,u=l.length;if(arguments.length<2){for(;++o0)for(var r=new Array(a),l=0,a,o;l=0&&(n=e.slice(0,r))!=="xmlns"&&(e=e.slice(r+1)),fv.hasOwnProperty(n)?{space:fv[n],local:e}:e}function xC(e){return function(){var n=this.ownerDocument,r=this.namespaceURI;return r===Up&&n.documentElement.namespaceURI===Up?n.createElement(e):n.createElementNS(r,e)}}function yC(e){return function(){return this.ownerDocument.createElementNS(e.space,e.local)}}function Bw(e){var n=Cc(e);return(n.local?yC:xC)(n)}function vC(){}function bm(e){return e==null?vC:function(){return this.querySelector(e)}}function bC(e){typeof e!="function"&&(e=bm(e));for(var n=this._groups,r=n.length,l=new Array(r),a=0;a=k&&(k=T+1);!(q=S[k])&&++k=0;)(u=l[a])&&(o&&u.compareDocumentPosition(o)^4&&o.parentNode.insertBefore(u,o),o=u);return this}function GC(e){e||(e=FC);function n(p,x){return p&&x?e(p.__data__,x.__data__):!p-!x}for(var r=this._groups,l=r.length,a=new Array(l),o=0;on?1:e>=n?0:NaN}function YC(){var e=arguments[0];return arguments[0]=this,e.apply(null,arguments),this}function XC(){return Array.from(this)}function QC(){for(var e=this._groups,n=0,r=e.length;n1?this.each((n==null?a3:typeof n=="function"?s3:o3)(e,n,r??"")):ua(this.node(),e)}function ua(e,n){return e.style.getPropertyValue(n)||Vw(e).getComputedStyle(e,null).getPropertyValue(n)}function c3(e){return function(){delete this[e]}}function f3(e,n){return function(){this[e]=n}}function d3(e,n){return function(){var r=n.apply(this,arguments);r==null?delete this[e]:this[e]=r}}function h3(e,n){return arguments.length>1?this.each((n==null?c3:typeof n=="function"?d3:f3)(e,n)):this.node()[e]}function $w(e){return e.trim().split(/^|\s+/)}function wm(e){return e.classList||new Gw(e)}function Gw(e){this._node=e,this._names=$w(e.getAttribute("class")||"")}Gw.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 Fw(e,n){for(var r=wm(e),l=-1,a=n.length;++l=0&&(r=n.slice(l+1),n=n.slice(0,l)),{type:n,name:r}})}function U3(e){return function(){var n=this.__on;if(n){for(var r=0,l=-1,a=n.length,o;r()=>e;function Pp(e,{sourceEvent:n,subject:r,target:l,identifier:a,active:o,x:u,y:c,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:r,enumerable:!0,configurable:!0},target:{value:l,enumerable:!0,configurable:!0},identifier:{value:a,enumerable:!0,configurable:!0},active:{value:o,enumerable:!0,configurable:!0},x:{value:u,enumerable:!0,configurable:!0},y:{value:c,enumerable:!0,configurable:!0},dx:{value:d,enumerable:!0,configurable:!0},dy:{value:h,enumerable:!0,configurable:!0},_:{value:m}})}Pp.prototype.on=function(){var e=this._.on.apply(this._,arguments);return e===this._?this:e};function K3(e){return!e.ctrlKey&&!e.button}function J3(){return this.parentNode}function W3(e,n){return n??{x:e.x,y:e.y}}function eT(){return navigator.maxTouchPoints||"ontouchstart"in this}function Jw(){var e=K3,n=J3,r=W3,l=eT,a={},o=Nc("start","drag","end"),u=0,c,d,h,m,p=0;function x(A){A.on("mousedown.drag",v).filter(l).on("touchstart.drag",S).on("touchmove.drag",_,Z3).on("touchend.drag touchcancel.drag",T).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function v(A,q){if(!(m||!e.call(this,A,q))){var j=k(this,n.call(this,A,q),A,q,"mouse");j&&(wn(A.view).on("mousemove.drag",w,Bo).on("mouseup.drag",E,Bo),Zw(A.view),hh(A),h=!1,c=A.clientX,d=A.clientY,j("start",A))}}function w(A){if(aa(A),!h){var q=A.clientX-c,j=A.clientY-d;h=q*q+j*j>p}a.mouse("drag",A)}function E(A){wn(A.view).on("mousemove.drag mouseup.drag",null),Kw(A.view,h),aa(A),a.mouse("end",A)}function S(A,q){if(e.call(this,A,q)){var j=A.changedTouches,L=n.call(this,A,q),O=j.length,P,R;for(P=0;P>8&15|n>>4&240,n>>4&15|n&240,(n&15)<<4|n&15,1):r===8?Hu(n>>24&255,n>>16&255,n>>8&255,(n&255)/255):r===4?Hu(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=nT.exec(e))?new un(n[1],n[2],n[3],1):(n=rT.exec(e))?new un(n[1]*255/100,n[2]*255/100,n[3]*255/100,1):(n=iT.exec(e))?Hu(n[1],n[2],n[3],n[4]):(n=lT.exec(e))?Hu(n[1]*255/100,n[2]*255/100,n[3]*255/100,n[4]):(n=aT.exec(e))?yv(n[1],n[2]/100,n[3]/100,1):(n=oT.exec(e))?yv(n[1],n[2]/100,n[3]/100,n[4]):dv.hasOwnProperty(e)?mv(dv[e]):e==="transparent"?new un(NaN,NaN,NaN,0):null}function mv(e){return new un(e>>16&255,e>>8&255,e&255,1)}function Hu(e,n,r,l){return l<=0&&(e=n=r=NaN),new un(e,n,r,l)}function cT(e){return e instanceof Jo||(e=Ji(e)),e?(e=e.rgb(),new un(e.r,e.g,e.b,e.opacity)):new un}function Vp(e,n,r,l){return arguments.length===1?cT(e):new un(e,n,r,l??1)}function un(e,n,r,l){this.r=+e,this.g=+n,this.b=+r,this.opacity=+l}Sm(un,Vp,Ww(Jo,{brighter(e){return e=e==null?oc:Math.pow(oc,e),new un(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){return e=e==null?Io:Math.pow(Io,e),new un(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new un(Qi(this.r),Qi(this.g),Qi(this.b),sc(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:gv,formatHex:gv,formatHex8:fT,formatRgb:xv,toString:xv}));function gv(){return`#${Fi(this.r)}${Fi(this.g)}${Fi(this.b)}`}function fT(){return`#${Fi(this.r)}${Fi(this.g)}${Fi(this.b)}${Fi((isNaN(this.opacity)?1:this.opacity)*255)}`}function xv(){const e=sc(this.opacity);return`${e===1?"rgb(":"rgba("}${Qi(this.r)}, ${Qi(this.g)}, ${Qi(this.b)}${e===1?")":`, ${e})`}`}function sc(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function Qi(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function Fi(e){return e=Qi(e),(e<16?"0":"")+e.toString(16)}function yv(e,n,r,l){return l<=0?e=n=r=NaN:r<=0||r>=1?e=n=NaN:n<=0&&(e=NaN),new Pn(e,n,r,l)}function eS(e){if(e instanceof Pn)return new Pn(e.h,e.s,e.l,e.opacity);if(e instanceof Jo||(e=Ji(e)),!e)return new Pn;if(e instanceof Pn)return e;e=e.rgb();var n=e.r/255,r=e.g/255,l=e.b/255,a=Math.min(n,r,l),o=Math.max(n,r,l),u=NaN,c=o-a,d=(o+a)/2;return c?(n===o?u=(r-l)/c+(r0&&d<1?0:u,new Pn(u,c,d,e.opacity)}function dT(e,n,r,l){return arguments.length===1?eS(e):new Pn(e,n,r,l??1)}function Pn(e,n,r,l){this.h=+e,this.s=+n,this.l=+r,this.opacity=+l}Sm(Pn,dT,Ww(Jo,{brighter(e){return e=e==null?oc:Math.pow(oc,e),new Pn(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=e==null?Io:Math.pow(Io,e),new Pn(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 un(ph(e>=240?e-240:e+120,a,l),ph(e,a,l),ph(e<120?e+240:e-120,a,l),this.opacity)},clamp(){return new Pn(vv(this.h),Bu(this.s),Bu(this.l),sc(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=sc(this.opacity);return`${e===1?"hsl(":"hsla("}${vv(this.h)}, ${Bu(this.s)*100}%, ${Bu(this.l)*100}%${e===1?")":`, ${e})`}`}}));function vv(e){return e=(e||0)%360,e<0?e+360:e}function Bu(e){return Math.max(0,Math.min(1,e||0))}function ph(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 _m=e=>()=>e;function hT(e,n){return function(r){return e+r*n}}function pT(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 mT(e){return(e=+e)==1?tS:function(n,r){return r-n?pT(n,r,e):_m(isNaN(n)?r:n)}}function tS(e,n){var r=n-e;return r?hT(e,r):_m(isNaN(e)?n:e)}const uc=(function e(n){var r=mT(n);function l(a,o){var u=r((a=Vp(a)).r,(o=Vp(o)).r),c=r(a.g,o.g),d=r(a.b,o.b),h=tS(a.opacity,o.opacity);return function(m){return a.r=u(m),a.g=c(m),a.b=d(m),a.opacity=h(m),a+""}}return l.gamma=e,l})(1);function gT(e,n){n||(n=[]);var r=e?Math.min(n.length,e.length):0,l=n.slice(),a;return function(o){for(a=0;ar&&(o=n.slice(r,o),c[u]?c[u]+=o:c[++u]=o),(l=l[0])===(a=a[0])?c[u]?c[u]+=a:c[++u]=a:(c[++u]=null,d.push({i:u,x:rr(l,a)})),r=mh.lastIndex;return r180?m+=360:m-h>180&&(h+=360),x.push({i:p.push(a(p)+"rotate(",null,l)-2,x:rr(h,m)})):m&&p.push(a(p)+"rotate("+m+l)}function c(h,m,p,x){h!==m?x.push({i:p.push(a(p)+"skewX(",null,l)-2,x:rr(h,m)}):m&&p.push(a(p)+"skewX("+m+l)}function d(h,m,p,x,v,w){if(h!==p||m!==x){var E=v.push(a(v)+"scale(",null,",",null,")");w.push({i:E-4,x:rr(h,p)},{i:E-2,x:rr(m,x)})}else(p!==1||x!==1)&&v.push(a(v)+"scale("+p+","+x+")")}return function(h,m){var p=[],x=[];return h=e(h),m=e(m),o(h.translateX,h.translateY,m.translateX,m.translateY,p,x),u(h.rotate,m.rotate,p,x),c(h.skewX,m.skewX,p,x),d(h.scaleX,h.scaleY,m.scaleX,m.scaleY,p,x),h=m=null,function(v){for(var w=-1,E=x.length,S;++w=0&&e._call.call(void 0,n),e=e._next;--ca}function Sv(){Wi=(fc=Uo.now())+Tc,ca=Co=0;try{zT()}finally{ca=0,DT(),Wi=0}}function MT(){var e=Uo.now(),n=e-fc;n>lS&&(Tc-=n,fc=e)}function DT(){for(var e,n=cc,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:cc=r);To=e,Fp(l)}function Fp(e){if(!ca){Co&&(Co=clearTimeout(Co));var n=e-Wi;n>24?(e<1/0&&(Co=setTimeout(Sv,e-Uo.now()-Tc)),yo&&(yo=clearInterval(yo))):(yo||(fc=Uo.now(),yo=setInterval(MT,lS)),ca=1,aS(Sv))}}function _v(e,n,r){var l=new dc;return n=n==null?0:+n,l.restart(a=>{l.stop(),e(a+n)},n,r),l}var RT=Nc("start","end","cancel","interrupt"),OT=[],sS=0,kv=1,Yp=2,Wu=3,Ev=4,Xp=5,ec=6;function Ac(e,n,r,l,a,o){var u=e.__transition;if(!u)e.__transition={};else if(r in u)return;LT(e,r,{name:n,index:l,group:a,on:RT,tween:OT,time:o.time,delay:o.delay,duration:o.duration,ease:o.ease,timer:null,state:sS})}function Em(e,n){var r=Qn(e,n);if(r.state>sS)throw new Error("too late; already scheduled");return r}function ar(e,n){var r=Qn(e,n);if(r.state>Wu)throw new Error("too late; already running");return r}function Qn(e,n){var r=e.__transition;if(!r||!(r=r[n]))throw new Error("transition not found");return r}function LT(e,n,r){var l=e.__transition,a;l[n]=r,r.timer=oS(o,0,r.time);function o(h){r.state=kv,r.timer.restart(u,r.delay,r.time),r.delay<=h&&u(h-r.delay)}function u(h){var m,p,x,v;if(r.state!==kv)return d();for(m in l)if(v=l[m],v.name===r.name){if(v.state===Wu)return _v(u);v.state===Ev?(v.state=ec,v.timer.stop(),v.on.call("interrupt",e,e.__data__,v.index,v.group),delete l[m]):+mYp&&l.state=0&&(n=n.slice(0,r)),!n||n==="start"})}function dA(e,n,r){var l,a,o=fA(n)?Em:ar;return function(){var u=o(this,e),c=u.on;c!==l&&(a=(l=c).copy()).on(n,r),u.on=a}}function hA(e,n){var r=this._id;return arguments.length<2?Qn(this.node(),r).on.on(e):this.each(dA(r,e,n))}function pA(e){return function(){var n=this.parentNode;for(var r in this.__transition)if(+r!==e)return;n&&n.removeChild(this)}}function mA(){return this.on("end.remove",pA(this._id))}function gA(e){var n=this._name,r=this._id;typeof e!="function"&&(e=bm(e));for(var l=this._groups,a=l.length,o=new Array(a),u=0;u()=>e;function UA(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 zr(e,n,r){this.k=e,this.x=n,this.y=r}zr.prototype={constructor:zr,scale:function(e){return e===1?this:new zr(this.k*e,this.x,this.y)},translate:function(e,n){return e===0&n===0?this:new zr(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 jc=new zr(1,0,0);dS.prototype=zr.prototype;function dS(e){for(;!e.__zoom;)if(!(e=e.parentNode))return jc;return e.__zoom}function gh(e){e.stopImmediatePropagation()}function vo(e){e.preventDefault(),e.stopImmediatePropagation()}function PA(e){return(!e.ctrlKey||e.type==="wheel")&&!e.button}function VA(){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||jc}function $A(e){return-e.deltaY*(e.deltaMode===1?.05:e.deltaMode?1:.002)*(e.ctrlKey?10:1)}function GA(){return navigator.maxTouchPoints||"ontouchstart"in this}function FA(e,n,r){var l=e.invertX(n[0][0])-r[0][0],a=e.invertX(n[1][0])-r[1][0],o=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>o?(o+u)/2:Math.min(0,o)||Math.max(0,u))}function hS(){var e=PA,n=VA,r=FA,l=$A,a=GA,o=[0,1/0],u=[[-1/0,-1/0],[1/0,1/0]],c=250,d=Ju,h=Nc("start","zoom","end"),m,p,x,v=500,w=150,E=0,S=10;function _(B){B.property("__zoom",Nv).on("wheel.zoom",O,{passive:!1}).on("mousedown.zoom",P).on("dblclick.zoom",R).filter(a).on("touchstart.zoom",H).on("touchmove.zoom",U).on("touchend.zoom touchcancel.zoom",ee).style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}_.transform=function(B,F,z,G){var Q=B.selection?B.selection():B;Q.property("__zoom",Nv),B!==Q?q(B,F,z,G):Q.interrupt().each(function(){j(this,arguments).event(G).start().zoom(null,typeof F=="function"?F.apply(this,arguments):F).end()})},_.scaleBy=function(B,F,z,G){_.scaleTo(B,function(){var Q=this.__zoom.k,K=typeof F=="function"?F.apply(this,arguments):F;return Q*K},z,G)},_.scaleTo=function(B,F,z,G){_.transform(B,function(){var Q=n.apply(this,arguments),K=this.__zoom,M=z==null?A(Q):typeof z=="function"?z.apply(this,arguments):z,I=K.invert(M),Y=typeof F=="function"?F.apply(this,arguments):F;return r(k(T(K,Y),M,I),Q,u)},z,G)},_.translateBy=function(B,F,z,G){_.transform(B,function(){return r(this.__zoom.translate(typeof F=="function"?F.apply(this,arguments):F,typeof z=="function"?z.apply(this,arguments):z),n.apply(this,arguments),u)},null,G)},_.translateTo=function(B,F,z,G,Q){_.transform(B,function(){var K=n.apply(this,arguments),M=this.__zoom,I=G==null?A(K):typeof G=="function"?G.apply(this,arguments):G;return r(jc.translate(I[0],I[1]).scale(M.k).translate(typeof F=="function"?-F.apply(this,arguments):-F,typeof z=="function"?-z.apply(this,arguments):-z),K,u)},G,Q)};function T(B,F){return F=Math.max(o[0],Math.min(o[1],F)),F===B.k?B:new zr(F,B.x,B.y)}function k(B,F,z){var G=F[0]-z[0]*B.k,Q=F[1]-z[1]*B.k;return G===B.x&&Q===B.y?B:new zr(B.k,G,Q)}function A(B){return[(+B[0][0]+ +B[1][0])/2,(+B[0][1]+ +B[1][1])/2]}function q(B,F,z,G){B.on("start.zoom",function(){j(this,arguments).event(G).start()}).on("interrupt.zoom end.zoom",function(){j(this,arguments).event(G).end()}).tween("zoom",function(){var Q=this,K=arguments,M=j(Q,K).event(G),I=n.apply(Q,K),Y=z==null?A(I):typeof z=="function"?z.apply(Q,K):z,N=Math.max(I[1][0]-I[0][0],I[1][1]-I[0][1]),$=Q.__zoom,X=typeof F=="function"?F.apply(Q,K):F,J=d($.invert(Y).concat(N/$.k),X.invert(Y).concat(N/X.k));return function(ne){if(ne===1)ne=X;else{var re=J(ne),se=N/re[2];ne=new zr(se,Y[0]-re[0]*se,Y[1]-re[1]*se)}M.zoom(null,ne)}})}function j(B,F,z){return!z&&B.__zooming||new L(B,F)}function L(B,F){this.that=B,this.args=F,this.active=0,this.sourceEvent=null,this.extent=n.apply(B,F),this.taps=0}L.prototype={event:function(B){return B&&(this.sourceEvent=B),this},start:function(){return++this.active===1&&(this.that.__zooming=this,this.emit("start")),this},zoom:function(B,F){return this.mouse&&B!=="mouse"&&(this.mouse[1]=F.invert(this.mouse[0])),this.touch0&&B!=="touch"&&(this.touch0[1]=F.invert(this.touch0[0])),this.touch1&&B!=="touch"&&(this.touch1[1]=F.invert(this.touch1[0])),this.that.__zoom=F,this.emit("zoom"),this},end:function(){return--this.active===0&&(delete this.that.__zooming,this.emit("end")),this},emit:function(B){var F=wn(this.that).datum();h.call(B,this.that,new UA(B,{sourceEvent:this.sourceEvent,target:_,transform:this.that.__zoom,dispatch:h}),F)}};function O(B,...F){if(!e.apply(this,arguments))return;var z=j(this,F).event(B),G=this.__zoom,Q=Math.max(o[0],Math.min(o[1],G.k*Math.pow(2,l.apply(this,arguments)))),K=Un(B);if(z.wheel)(z.mouse[0][0]!==K[0]||z.mouse[0][1]!==K[1])&&(z.mouse[1]=G.invert(z.mouse[0]=K)),clearTimeout(z.wheel);else{if(G.k===Q)return;z.mouse=[K,G.invert(K)],tc(this),z.start()}vo(B),z.wheel=setTimeout(M,w),z.zoom("mouse",r(k(T(G,Q),z.mouse[0],z.mouse[1]),z.extent,u));function M(){z.wheel=null,z.end()}}function P(B,...F){if(x||!e.apply(this,arguments))return;var z=B.currentTarget,G=j(this,F,!0).event(B),Q=wn(B.view).on("mousemove.zoom",Y,!0).on("mouseup.zoom",N,!0),K=Un(B,z),M=B.clientX,I=B.clientY;Zw(B.view),gh(B),G.mouse=[K,this.__zoom.invert(K)],tc(this),G.start();function Y($){if(vo($),!G.moved){var X=$.clientX-M,J=$.clientY-I;G.moved=X*X+J*J>E}G.event($).zoom("mouse",r(k(G.that.__zoom,G.mouse[0]=Un($,z),G.mouse[1]),G.extent,u))}function N($){Q.on("mousemove.zoom mouseup.zoom",null),Kw($.view,G.moved),vo($),G.event($).end()}}function R(B,...F){if(e.apply(this,arguments)){var z=this.__zoom,G=Un(B.changedTouches?B.changedTouches[0]:B,this),Q=z.invert(G),K=z.k*(B.shiftKey?.5:2),M=r(k(T(z,K),G,Q),n.apply(this,F),u);vo(B),c>0?wn(this).transition().duration(c).call(q,M,G,B):wn(this).call(_.transform,M,G,B)}}function H(B,...F){if(e.apply(this,arguments)){var z=B.touches,G=z.length,Q=j(this,F,B.changedTouches.length===G).event(B),K,M,I,Y;for(gh(B),M=0;M"[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."},Po=[[Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY],[Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY]],pS=["Enter"," ","Escape"],mS={"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 fa;(function(e){e.Strict="strict",e.Loose="loose"})(fa||(fa={}));var Zi;(function(e){e.Free="free",e.Vertical="vertical",e.Horizontal="horizontal"})(Zi||(Zi={}));var Vo;(function(e){e.Partial="partial",e.Full="full"})(Vo||(Vo={}));const gS={inProgress:!1,isValid:null,from:null,fromHandle:null,fromPosition:null,fromNode:null,to:null,toHandle:null,toPosition:null,toNode:null,pointer:null};var xi;(function(e){e.Bezier="default",e.Straight="straight",e.Step="step",e.SmoothStep="smoothstep",e.SimpleBezier="simplebezier"})(xi||(xi={}));var hc;(function(e){e.Arrow="arrow",e.ArrowClosed="arrowclosed"})(hc||(hc={}));var ve;(function(e){e.Left="left",e.Top="top",e.Right="right",e.Bottom="bottom"})(ve||(ve={}));const Cv={[ve.Left]:ve.Right,[ve.Right]:ve.Left,[ve.Top]:ve.Bottom,[ve.Bottom]:ve.Top};function xS(e){return e===null?null:e?"valid":"invalid"}const yS=e=>"id"in e&&"source"in e&&"target"in e,YA=e=>"id"in e&&"position"in e&&!("source"in e)&&!("target"in e),Cm=e=>"id"in e&&"internals"in e&&!("source"in e)&&!("target"in e),Wo=(e,n=[0,0])=>{const{width:r,height:l}=Or(e),a=e.origin??n,o=r*a[0],u=l*a[1];return{x:e.position.x-o,y:e.position.y-u}},XA=(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 o=typeof a=="string";let u=!n.nodeLookup&&!o?a:void 0;n.nodeLookup&&(u=o?n.nodeLookup.get(a):Cm(a)?a:n.nodeLookup.get(a.id));const c=u?pc(u,n.nodeOrigin):{x:0,y:0,x2:0,y2:0};return zc(l,c)},{x:1/0,y:1/0,x2:-1/0,y2:-1/0});return Mc(r)},es=(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=zc(r,pc(a)),l=!0)}),l?Mc(r):{x:0,y:0,width:0,height:0}},Tm=(e,n,[r,l,a]=[0,0,1],o=!1,u=!1)=>{const c={...ns(n,[r,l,a]),width:n.width/a,height:n.height/a},d=[];for(const h of e.values()){const{measured:m,selectable:p=!0,hidden:x=!1}=h;if(u&&!p||x)continue;const v=m.width??h.width??h.initialWidth??null,w=m.height??h.height??h.initialHeight??null,E=$o(c,ha(h)),S=(v??0)*(w??0),_=o&&E>0;(!h.internals.handleBounds||_||E>=S||h.dragging)&&d.push(h)}return d},QA=(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 ZA(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 KA({nodes:e,width:n,height:r,panZoom:l,minZoom:a,maxZoom:o},u){if(e.size===0)return Promise.resolve(!0);const c=ZA(e,u),d=es(c),h=Am(d,n,r,(u==null?void 0:u.minZoom)??a,(u==null?void 0:u.maxZoom)??o,(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 vS({nodeId:e,nextPosition:n,nodeLookup:r,nodeOrigin:l=[0,0],nodeExtent:a,onError:o}){const u=r.get(e),c=u.parentId?r.get(u.parentId):void 0,{x:d,y:h}=c?c.internals.positionAbsolute:{x:0,y:0},m=u.origin??l;let p=u.extent||a;if(u.extent==="parent"&&!u.expandParent)if(!c)o==null||o("005",lr.error005());else{const v=c.measured.width,w=c.measured.height;v&&w&&(p=[[d,h],[d+v,h+w]])}else c&&pa(u.extent)&&(p=[[u.extent[0][0]+d,u.extent[0][1]+h],[u.extent[1][0]+d,u.extent[1][1]+h]]);const x=pa(p)?el(n,p,u.measured):n;return(u.measured.width===void 0||u.measured.height===void 0)&&(o==null||o("015",lr.error015())),{position:{x:x.x-d+(u.measured.width??0)*m[0],y:x.y-h+(u.measured.height??0)*m[1]},positionAbsolute:x}}async function JA({nodesToRemove:e=[],edgesToRemove:n=[],nodes:r,edges:l,onBeforeDelete:a}){const o=new Set(e.map(x=>x.id)),u=[];for(const x of r){if(x.deletable===!1)continue;const v=o.has(x.id),w=!v&&x.parentId&&u.find(E=>E.id===x.parentId);(v||w)&&u.push(x)}const c=new Set(n.map(x=>x.id)),d=l.filter(x=>x.deletable!==!1),m=QA(u,d);for(const x of d)c.has(x.id)&&!m.find(w=>w.id===x.id)&&m.push(x);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 da=(e,n=0,r=1)=>Math.min(Math.max(e,n),r),el=(e={x:0,y:0},n,r)=>({x:da(e.x,n[0][0],n[1][0]-((r==null?void 0:r.width)??0)),y:da(e.y,n[0][1],n[1][1]-((r==null?void 0:r.height)??0))});function bS(e,n,r){const{width:l,height:a}=Or(r),{x:o,y:u}=r.internals.positionAbsolute;return el(e,[[o,u],[o+l,u+a]],n)}const Tv=(e,n,r)=>er?-da(Math.abs(e-r),1,n)/n:0,wS=(e,n,r=15,l=40)=>{const a=Tv(e.x,l,n.width-l)*r,o=Tv(e.y,l,n.height-l)*r;return[a,o]},zc=(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)}),Qp=({x:e,y:n,width:r,height:l})=>({x:e,y:n,x2:e+r,y2:n+l}),Mc=({x:e,y:n,x2:r,y2:l})=>({x:e,y:n,width:r-e,height:l-n}),ha=(e,n=[0,0])=>{var a,o;const{x:r,y:l}=Cm(e)?e.internals.positionAbsolute:Wo(e,n);return{x:r,y:l,width:((a=e.measured)==null?void 0:a.width)??e.width??e.initialWidth??0,height:((o=e.measured)==null?void 0:o.height)??e.height??e.initialHeight??0}},pc=(e,n=[0,0])=>{var a,o;const{x:r,y:l}=Cm(e)?e.internals.positionAbsolute:Wo(e,n);return{x:r,y:l,x2:r+(((a=e.measured)==null?void 0:a.width)??e.width??e.initialWidth??0),y2:l+(((o=e.measured)==null?void 0:o.height)??e.height??e.initialHeight??0)}},SS=(e,n)=>Mc(zc(Qp(e),Qp(n))),$o=(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)},Av=e=>Vn(e.width)&&Vn(e.height)&&Vn(e.x)&&Vn(e.y),Vn=e=>!isNaN(e)&&isFinite(e),WA=(e,n)=>{},ts=(e,n=[1,1])=>({x:n[0]*Math.round(e.x/n[0]),y:n[1]*Math.round(e.y/n[1])}),ns=({x:e,y:n},[r,l,a],o=!1,u=[1,1])=>{const c={x:(e-r)/a,y:(n-l)/a};return o?ts(c,u):c},mc=({x:e,y:n},[r,l,a])=>({x:e*a+r,y:n*a+l});function Ql(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 ej(e,n,r){if(typeof e=="string"||typeof e=="number"){const l=Ql(e,r),a=Ql(e,n);return{top:l,right:a,bottom:l,left:a,x:a*2,y:l*2}}if(typeof e=="object"){const l=Ql(e.top??e.y??0,r),a=Ql(e.bottom??e.y??0,r),o=Ql(e.left??e.x??0,n),u=Ql(e.right??e.x??0,n);return{top:l,right:u,bottom:a,left:o,x:o+u,y:l+a}}return{top:0,right:0,bottom:0,left:0,x:0,y:0}}function tj(e,n,r,l,a,o){const{x:u,y:c}=mc(e,[n,r,l]),{x:d,y:h}=mc({x:e.x+e.width,y:e.y+e.height},[n,r,l]),m=a-d,p=o-h;return{left:Math.floor(u),top:Math.floor(c),right:Math.floor(m),bottom:Math.floor(p)}}const Am=(e,n,r,l,a,o)=>{const u=ej(o,n,r),c=(n-u.x)/e.width,d=(r-u.y)/e.height,h=Math.min(c,d),m=da(h,l,a),p=e.x+e.width/2,x=e.y+e.height/2,v=n/2-p*m,w=r/2-x*m,E=tj(e,v,w,m,n,r),S={left:Math.min(E.left-u.left,0),top:Math.min(E.top-u.top,0),right:Math.min(E.right-u.right,0),bottom:Math.min(E.bottom-u.bottom,0)};return{x:v-S.left+S.right,y:w-S.top+S.bottom,zoom:m}},Go=()=>{var e;return typeof navigator<"u"&&((e=navigator==null?void 0:navigator.userAgent)==null?void 0:e.indexOf("Mac"))>=0};function pa(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 _S(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 kS(e,n={width:0,height:0},r,l,a){const o={...e},u=l.get(r);if(u){const c=u.origin||a;o.x+=u.internals.positionAbsolute.x-(n.width??0)*c[0],o.y+=u.internals.positionAbsolute.y-(n.height??0)*c[1]}return o}function jv(e,n){if(e.size!==n.size)return!1;for(const r of e)if(!n.has(r))return!1;return!0}function nj(){let e,n;return{promise:new Promise((l,a)=>{e=l,n=a}),resolve:e,reject:n}}function rj(e){return{...mS,...e||{}}}function zo(e,{snapGrid:n=[0,0],snapToGrid:r=!1,transform:l,containerBounds:a}){const{x:o,y:u}=$n(e),c=ns({x:o-((a==null?void 0:a.left)??0),y:u-((a==null?void 0:a.top)??0)},l),{x:d,y:h}=r?ts(c,n):c;return{xSnapped:d,ySnapped:h,...c}}const jm=e=>({width:e.offsetWidth,height:e.offsetHeight}),ES=e=>{var n;return((n=e==null?void 0:e.getRootNode)==null?void 0:n.call(e))||(window==null?void 0:window.document)},ij=["INPUT","SELECT","TEXTAREA"];function NS(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:ij.includes(n.nodeName)||n.hasAttribute("contenteditable")||!!n.closest(".nokey")}const CS=e=>"clientX"in e,$n=(e,n)=>{var o,u;const r=CS(e),l=r?e.clientX:(o=e.touches)==null?void 0:o[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)}},zv=(e,n,r,l,a)=>{const o=n.querySelectorAll(`.${e}`);return!o||!o.length?null:Array.from(o).map(u=>{const c=u.getBoundingClientRect();return{id:u.getAttribute("data-handleid"),type:e,nodeId:a,position:u.getAttribute("data-handlepos"),x:(c.left-r.left)/l,y:(c.top-r.top)/l,...jm(u)}})};function TS({sourceX:e,sourceY:n,targetX:r,targetY:l,sourceControlX:a,sourceControlY:o,targetControlX:u,targetControlY:c}){const d=e*.125+a*.375+u*.375+r*.125,h=n*.125+o*.375+c*.375+l*.125,m=Math.abs(d-e),p=Math.abs(h-n);return[d,h,m,p]}function Uu(e,n){return e>=0?.5*e:n*25*Math.sqrt(-e)}function Mv({pos:e,x1:n,y1:r,x2:l,y2:a,c:o}){switch(e){case ve.Left:return[n-Uu(n-l,o),r];case ve.Right:return[n+Uu(l-n,o),r];case ve.Top:return[n,r-Uu(r-a,o)];case ve.Bottom:return[n,r+Uu(a-r,o)]}}function zm({sourceX:e,sourceY:n,sourcePosition:r=ve.Bottom,targetX:l,targetY:a,targetPosition:o=ve.Top,curvature:u=.25}){const[c,d]=Mv({pos:r,x1:e,y1:n,x2:l,y2:a,c:u}),[h,m]=Mv({pos:o,x1:l,y1:a,x2:e,y2:n,c:u}),[p,x,v,w]=TS({sourceX:e,sourceY:n,targetX:l,targetY:a,sourceControlX:c,sourceControlY:d,targetControlX:h,targetControlY:m});return[`M${e},${n} C${c},${d} ${h},${m} ${l},${a}`,p,x,v,w]}function AS({sourceX:e,sourceY:n,targetX:r,targetY:l}){const a=Math.abs(r-e)/2,o=r0}const oj=({source:e,sourceHandle:n,target:r,targetHandle:l})=>`xy-edge__${e}${n||""}-${r}${l||""}`,sj=(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)),uj=(e,n,r={})=>{if(!e.source||!e.target)return n;const l=r.getEdgeId||oj;let a;return yS(e)?a={...e}:a={...e,id:l(e)},sj(a,n)?n:(a.sourceHandle===null&&delete a.sourceHandle,a.targetHandle===null&&delete a.targetHandle,n.concat(a))};function jS({sourceX:e,sourceY:n,targetX:r,targetY:l}){const[a,o,u,c]=AS({sourceX:e,sourceY:n,targetX:r,targetY:l});return[`M ${e},${n}L ${r},${l}`,a,o,u,c]}const Dv={[ve.Left]:{x:-1,y:0},[ve.Right]:{x:1,y:0},[ve.Top]:{x:0,y:-1},[ve.Bottom]:{x:0,y:1}},cj=({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 fj({source:e,sourcePosition:n=ve.Bottom,target:r,targetPosition:l=ve.Top,center:a,offset:o,stepPosition:u}){const c=Dv[n],d=Dv[l],h={x:e.x+c.x*o,y:e.y+c.y*o},m={x:r.x+d.x*o,y:r.y+d.y*o},p=cj({source:h,sourcePosition:n,target:m}),x=p.x!==0?"x":"y",v=p[x];let w=[],E,S;const _={x:0,y:0},T={x:0,y:0},[,,k,A]=AS({sourceX:e.x,sourceY:e.y,targetX:r.x,targetY:r.y});if(c[x]*d[x]===-1){x==="x"?(E=a.x??h.x+(m.x-h.x)*u,S=a.y??(h.y+m.y)/2):(E=a.x??(h.x+m.x)/2,S=a.y??h.y+(m.y-h.y)*u);const j=[{x:E,y:h.y},{x:E,y:m.y}],L=[{x:h.x,y:S},{x:m.x,y:S}];c[x]===v?w=x==="x"?j:L:w=x==="x"?L:j}else{const j=[{x:h.x,y:m.y}],L=[{x:m.x,y:h.y}];if(x==="x"?w=c.x===v?L:j:w=c.y===v?j:L,n===l){const U=Math.abs(e[x]-r[x]);if(U<=o){const ee=Math.min(o-1,o-U);c[x]===v?_[x]=(h[x]>e[x]?-1:1)*ee:T[x]=(m[x]>r[x]?-1:1)*ee}}if(n!==l){const U=x==="x"?"y":"x",ee=c[x]===d[U],B=h[U]>m[U],F=h[U]=H?(E=(O.x+P.x)/2,S=w[0].y):(E=w[0].x,S=(O.y+P.y)/2)}return[[e,{x:h.x+_.x,y:h.y+_.y},...w,{x:m.x+T.x,y:m.y+T.y},r],E,S,k,A]}function dj(e,n,r,l){const a=Math.min(Rv(e,n)/2,Rv(n,r)/2,l),{x:o,y:u}=n;if(e.x===o&&o===r.x||e.y===u&&u===r.y)return`L${o} ${u}`;if(e.y===u){const h=e.x{let A="";return k>0&&kr.id===n):e[0])||null}function Kp(e,n){return e?typeof e=="string"?e:`${n?`${n}__`:""}${Object.keys(e).sort().map(l=>`${l}=${e[l]}`).join("&")}`:""}function pj(e,{id:n,defaultColor:r,defaultMarkerStart:l,defaultMarkerEnd:a}){const o=new Set;return e.reduce((u,c)=>([c.markerStart||l,c.markerEnd||a].forEach(d=>{if(d&&typeof d=="object"){const h=Kp(d,n);o.has(h)||(u.push({id:h,color:d.color||r,...d}),o.add(h))}}),u),[]).sort((u,c)=>u.id.localeCompare(c.id))}const zS=1e3,mj=10,Mm={nodeOrigin:[0,0],nodeExtent:Po,elevateNodesOnSelect:!0,zIndexMode:"basic",defaults:{}},gj={...Mm,checkEquality:!0};function Dm(e,n){const r={...e};for(const l in n)n[l]!==void 0&&(r[l]=n[l]);return r}function xj(e,n,r){const l=Dm(Mm,r);for(const a of e.values())if(a.parentId)Om(a,e,n,l);else{const o=Wo(a,l.nodeOrigin),u=pa(a.extent)?a.extent:l.nodeExtent,c=el(o,u,Or(a));a.internals.positionAbsolute=c}}function yj(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 o={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(o):a.type==="target"&&l.push(o)}return{source:r,target:l}}function Rm(e){return e==="manual"}function Jp(e,n,r,l={}){var h,m;const a=Dm(gj,l),o={i:0},u=new Map(n),c=a!=null&&a.elevateNodesOnSelect&&!Rm(a.zIndexMode)?zS:0;let d=e.length>0;n.clear(),r.clear();for(const p of e){let x=u.get(p.id);if(a.checkEquality&&p===(x==null?void 0:x.internals.userNode))n.set(p.id,x);else{const v=Wo(p,a.nodeOrigin),w=pa(p.extent)?p.extent:a.nodeExtent,E=el(v,w,Or(p));x={...a.defaults,...p,measured:{width:(h=p.measured)==null?void 0:h.width,height:(m=p.measured)==null?void 0:m.height},internals:{positionAbsolute:E,handleBounds:yj(p,x),z:MS(p,c,a.zIndexMode),userNode:p}},n.set(p.id,x)}(x.measured===void 0||x.measured.width===void 0||x.measured.height===void 0)&&!x.hidden&&(d=!1),p.parentId&&Om(x,n,r,l,o)}return d}function vj(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 Om(e,n,r,l,a){const{elevateNodesOnSelect:o,nodeOrigin:u,nodeExtent:c,zIndexMode:d}=Dm(Mm,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}vj(e,r),a&&!m.parentId&&m.internals.rootParentIndex===void 0&&d==="auto"&&(m.internals.rootParentIndex=++a.i,m.internals.z=m.internals.z+a.i*mj),a&&m.internals.rootParentIndex!==void 0&&(a.i=m.internals.rootParentIndex);const p=o&&!Rm(d)?zS:0,{x,y:v,z:w}=bj(e,m,u,c,p,d),{positionAbsolute:E}=e.internals,S=x!==E.x||v!==E.y;(S||w!==e.internals.z)&&n.set(e.id,{...e,internals:{...e.internals,positionAbsolute:S?{x,y:v}:E,z:w}})}function MS(e,n,r){const l=Vn(e.zIndex)?e.zIndex:0;return Rm(r)?l:l+(e.selected?n:0)}function bj(e,n,r,l,a,o){const{x:u,y:c}=n.internals.positionAbsolute,d=Or(e),h=Wo(e,r),m=pa(e.extent)?el(h,e.extent,d):h;let p=el({x:u+m.x,y:c+m.y},l,d);e.extent==="parent"&&(p=bS(p,d,n));const x=MS(e,a,o),v=n.internals.z??0;return{x:p.x,y:p.y,z:v>=x?v+1:x}}function Lm(e,n,r,l=[0,0]){var u;const a=[],o=new Map;for(const c of e){const d=n.get(c.parentId);if(!d)continue;const h=((u=o.get(c.parentId))==null?void 0:u.expandedRect)??ha(d),m=SS(h,c.rect);o.set(c.parentId,{expandedRect:m,parent:d})}return o.size>0&&o.forEach(({expandedRect:c,parent:d},h)=>{var k;const m=d.internals.positionAbsolute,p=Or(d),x=d.origin??l,v=c.x0||w>0||_||T)&&(a.push({id:h,type:"position",position:{x:d.position.x-v+_,y:d.position.y-w+T}}),(k=r.get(h))==null||k.forEach(A=>{e.some(q=>q.id===A.id)||a.push({id:A.id,type:"position",position:{x:A.position.x+v,y:A.position.y+w}})})),(p.width0){const v=Lm(x,n,r,a);h.push(...v)}return{changes:h,updatedInternals:d}}async function Sj({delta:e,panZoom:n,transform:r,translateExtent:l,width:a,height:o}){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,o]],l),c=!!u&&(u.x!==r[0]||u.y!==r[1]||u.k!==r[2]);return Promise.resolve(c)}function Bv(e,n,r,l,a,o){let u=a;const c=l.get(u)||new Map;l.set(u,c.set(r,n)),u=`${a}-${e}`;const d=l.get(u)||new Map;if(l.set(u,d.set(r,n)),o){u=`${a}-${e}-${o}`;const h=l.get(u)||new Map;l.set(u,h.set(r,n))}}function DS(e,n,r){e.clear(),n.clear();for(const l of r){const{source:a,target:o,sourceHandle:u=null,targetHandle:c=null}=l,d={edgeId:l.id,source:a,target:o,sourceHandle:u,targetHandle:c},h=`${a}-${u}--${o}-${c}`,m=`${o}-${c}--${a}-${u}`;Bv("source",d,m,e,a,u),Bv("target",d,h,e,o,c),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 Iv(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 _j(e,n,r,l){const a=new Map;for(const[o,u]of e)if((u.selected||u.id===l)&&(!u.parentId||!RS(u,e))&&(u.draggable||n&&typeof u.draggable>"u")){const c=e.get(o);c&&a.set(o,{id:o,position:c.position||{x:0,y:0},distance:{x:r.x-c.internals.positionAbsolute.x,y:r.y-c.internals.positionAbsolute.y},extent:c.extent,parentId:c.parentId,origin:c.origin,expandParent:c.expandParent,internals:{positionAbsolute:c.internals.positionAbsolute||{x:0,y:0}},measured:{width:c.measured.width??0,height:c.measured.height??0}})}return a}function xh({nodeId:e,dragItems:n,nodeLookup:r,dragging:l=!0}){var u,c,d;const a=[];for(const[h,m]of n){const p=(u=r.get(h))==null?void 0:u.internals.userNode;p&&a.push({...p,position:m.position,dragging:l})}if(!e)return[a[0],a];const o=(c=r.get(e))==null?void 0:c.internals.userNode;return[o?{...o,position:((d=n.get(e))==null?void 0:d.position)||o.position,dragging:l}:a[0],a]}function kj({dragItems:e,snapGrid:n,x:r,y:l}){const a=e.values().next().value;if(!a)return null;const o={x:r-a.distance.x,y:l-a.distance.y},u=ts(o,n);return{x:u.x-o.x,y:u.y-o.y}}function Ej({onNodeMouseDown:e,getStoreItems:n,onDragStart:r,onDrag:l,onDragStop:a}){let o={x:null,y:null},u=0,c=new Map,d=!1,h={x:0,y:0},m=null,p=!1,x=null,v=!1,w=!1,E=null;function S({noDragClassName:T,handleSelector:k,domNode:A,isSelectable:q,nodeId:j,nodeClickDistance:L=0}){x=wn(A);function O({x:U,y:ee}){const{nodeLookup:B,nodeExtent:F,snapGrid:z,snapToGrid:G,nodeOrigin:Q,onNodeDrag:K,onSelectionDrag:M,onError:I,updateNodePositions:Y}=n();o={x:U,y:ee};let N=!1;const $=c.size>1,X=$&&F?Qp(es(c)):null,J=$&&G?kj({dragItems:c,snapGrid:z,x:U,y:ee}):null;for(const[ne,re]of c){if(!B.has(ne))continue;let se={x:U-re.distance.x,y:ee-re.distance.y};G&&(se=J?{x:Math.round(se.x+J.x),y:Math.round(se.y+J.y)}:ts(se,z));let xe=null;if($&&F&&!re.extent&&X){const{positionAbsolute:pe}=re.internals,_e=pe.x-X.x+F[0][0],ze=pe.x+re.measured.width-X.x2+F[1][0],Te=pe.y-X.y+F[0][1],ut=pe.y+re.measured.height-X.y2+F[1][1];xe=[[_e,Te],[ze,ut]]}const{position:be,positionAbsolute:ye}=vS({nodeId:ne,nextPosition:se,nodeLookup:B,nodeExtent:xe||F,nodeOrigin:Q,onError:I});N=N||re.position.x!==be.x||re.position.y!==be.y,re.position=be,re.internals.positionAbsolute=ye}if(w=w||N,!!N&&(Y(c,!0),E&&(l||K||!j&&M))){const[ne,re]=xh({nodeId:j,dragItems:c,nodeLookup:B});l==null||l(E,c,ne,re),K==null||K(E,ne,re),j||M==null||M(E,re)}}async function P(){if(!m)return;const{transform:U,panBy:ee,autoPanSpeed:B,autoPanOnNodeDrag:F}=n();if(!F){d=!1,cancelAnimationFrame(u);return}const[z,G]=wS(h,m,B);(z!==0||G!==0)&&(o.x=(o.x??0)-z/U[2],o.y=(o.y??0)-G/U[2],await ee({x:z,y:G})&&O(o)),u=requestAnimationFrame(P)}function R(U){var $;const{nodeLookup:ee,multiSelectionActive:B,nodesDraggable:F,transform:z,snapGrid:G,snapToGrid:Q,selectNodesOnDrag:K,onNodeDragStart:M,onSelectionDragStart:I,unselectNodesAndEdges:Y}=n();p=!0,(!K||!q)&&!B&&j&&(($=ee.get(j))!=null&&$.selected||Y()),q&&K&&j&&(e==null||e(j));const N=zo(U.sourceEvent,{transform:z,snapGrid:G,snapToGrid:Q,containerBounds:m});if(o=N,c=_j(ee,F,N,j),c.size>0&&(r||M||!j&&I)){const[X,J]=xh({nodeId:j,dragItems:c,nodeLookup:ee});r==null||r(U.sourceEvent,c,X,J),M==null||M(U.sourceEvent,X,J),j||I==null||I(U.sourceEvent,J)}}const H=Jw().clickDistance(L).on("start",U=>{const{domNode:ee,nodeDragThreshold:B,transform:F,snapGrid:z,snapToGrid:G}=n();m=(ee==null?void 0:ee.getBoundingClientRect())||null,v=!1,w=!1,E=U.sourceEvent,B===0&&R(U),o=zo(U.sourceEvent,{transform:F,snapGrid:z,snapToGrid:G,containerBounds:m}),h=$n(U.sourceEvent,m)}).on("drag",U=>{const{autoPanOnNodeDrag:ee,transform:B,snapGrid:F,snapToGrid:z,nodeDragThreshold:G,nodeLookup:Q}=n(),K=zo(U.sourceEvent,{transform:B,snapGrid:F,snapToGrid:z,containerBounds:m});if(E=U.sourceEvent,(U.sourceEvent.type==="touchmove"&&U.sourceEvent.touches.length>1||j&&!Q.has(j))&&(v=!0),!v){if(!d&&ee&&p&&(d=!0,P()),!p){const M=$n(U.sourceEvent,m),I=M.x-h.x,Y=M.y-h.y;Math.sqrt(I*I+Y*Y)>G&&R(U)}(o.x!==K.xSnapped||o.y!==K.ySnapped)&&c&&p&&(h=$n(U.sourceEvent,m),O(K))}}).on("end",U=>{if(!(!p||v)&&(d=!1,p=!1,cancelAnimationFrame(u),c.size>0)){const{nodeLookup:ee,updateNodePositions:B,onNodeDragStop:F,onSelectionDragStop:z}=n();if(w&&(B(c,!1),w=!1),a||F||!j&&z){const[G,Q]=xh({nodeId:j,dragItems:c,nodeLookup:ee,dragging:!1});a==null||a(U.sourceEvent,c,G,Q),F==null||F(U.sourceEvent,G,Q),j||z==null||z(U.sourceEvent,Q)}}}).filter(U=>{const ee=U.target;return!U.button&&(!T||!Iv(ee,`.${T}`,A))&&(!k||Iv(ee,k,A))});x.call(H)}function _(){x==null||x.on(".drag",null)}return{update:S,destroy:_}}function Nj(e,n,r){const l=[],a={x:e.x-r,y:e.y-r,width:r*2,height:r*2};for(const o of n.values())$o(a,ha(o))>0&&l.push(o);return l}const Cj=250;function Tj(e,n,r,l){var c,d;let a=[],o=1/0;const u=Nj(e,r,n+Cj);for(const h of u){const m=[...((c=h.internals.handleBounds)==null?void 0:c.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:v}=tl(h,p,p.position,!0),w=Math.sqrt(Math.pow(x-e.x,2)+Math.pow(v-e.y,2));w>n||(w1){const h=l.type==="source"?"target":"source";return a.find(m=>m.type===h)??a[0]}return a[0]}function OS(e,n,r,l,a,o=!1){var h,m,p;const u=l.get(e);if(!u)return null;const c=a==="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=(r?c==null?void 0:c.find(x=>x.id===r):c==null?void 0:c[0])??null;return d&&o?{...d,...tl(u,d,d.position,!0)}:d}function LS(e,n){return e||(n!=null&&n.classList.contains("target")?"target":n!=null&&n.classList.contains("source")?"source":null)}function Aj(e,n){let r=null;return n?r=!0:e&&!n&&(r=!1),r}const HS=()=>!0;function jj(e,{connectionMode:n,connectionRadius:r,handleId:l,nodeId:a,edgeUpdaterType:o,isTarget:u,domNode:c,nodeLookup:d,lib:h,autoPanOnConnect:m,flowId:p,panBy:x,cancelConnection:v,onConnectStart:w,onConnect:E,onConnectEnd:S,isValidConnection:_=HS,onReconnectEnd:T,updateConnection:k,getTransform:A,getFromHandle:q,autoPanSpeed:j,dragThreshold:L=1,handleDomNode:O}){const P=ES(e.target);let R=0,H;const{x:U,y:ee}=$n(e),B=LS(o,O),F=c==null?void 0:c.getBoundingClientRect();let z=!1;if(!F||!B)return;const G=OS(a,B,l,d,n);if(!G)return;let Q=$n(e,F),K=!1,M=null,I=!1,Y=null;function N(){if(!m||!F)return;const[be,ye]=wS(Q,F,j);x({x:be,y:ye}),R=requestAnimationFrame(N)}const $={...G,nodeId:a,type:B,position:G.position},X=d.get(a);let ne={inProgress:!0,isValid:null,from:tl(X,$,ve.Left,!0),fromHandle:$,fromPosition:$.position,fromNode:X,to:Q,toHandle:null,toPosition:Cv[$.position],toNode:null,pointer:Q};function re(){z=!0,k(ne),w==null||w(e,{nodeId:a,handleId:l,handleType:B})}L===0&&re();function se(be){if(!z){const{x:ut,y:nt}=$n(be),zt=ut-U,Vt=nt-ee;if(!(zt*zt+Vt*Vt>L*L))return;re()}if(!q()||!$){xe(be);return}const ye=A();Q=$n(be,F),H=Tj(ns(Q,ye,!1,[1,1]),r,d,$),K||(N(),K=!0);const pe=BS(be,{handle:H,connectionMode:n,fromNodeId:a,fromHandleId:l,fromType:u?"target":"source",isValidConnection:_,doc:P,lib:h,flowId:p,nodeLookup:d});Y=pe.handleDomNode,M=pe.connection,I=Aj(!!H,pe.isValid);const _e=d.get(a),ze=_e?tl(_e,$,ve.Left,!0):ne.from,Te={...ne,from:ze,isValid:I,to:pe.toHandle&&I?mc({x:pe.toHandle.x,y:pe.toHandle.y},ye):Q,toHandle:pe.toHandle,toPosition:I&&pe.toHandle?pe.toHandle.position:Cv[$.position],toNode:pe.toHandle?d.get(pe.toHandle.nodeId):null,pointer:Q};k(Te),ne=Te}function xe(be){if(!("touches"in be&&be.touches.length>0)){if(z){(H||Y)&&M&&I&&(E==null||E(M));const{inProgress:ye,...pe}=ne,_e={...pe,toPosition:ne.toHandle?ne.toPosition:null};S==null||S(be,_e),o&&(T==null||T(be,_e))}v(),cancelAnimationFrame(R),K=!1,I=!1,M=null,Y=null,P.removeEventListener("mousemove",se),P.removeEventListener("mouseup",xe),P.removeEventListener("touchmove",se),P.removeEventListener("touchend",xe)}}P.addEventListener("mousemove",se),P.addEventListener("mouseup",xe),P.addEventListener("touchmove",se),P.addEventListener("touchend",xe)}function BS(e,{handle:n,connectionMode:r,fromNodeId:l,fromHandleId:a,fromType:o,doc:u,lib:c,flowId:d,isValidConnection:h=HS,nodeLookup:m}){const p=o==="target",x=n?u.querySelector(`.${c}-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}=$n(e),E=u.elementFromPoint(v,w),S=E!=null&&E.classList.contains(`${c}-flow__handle`)?E:x,_={handleDomNode:S,isValid:!1,connection:null,toHandle:null};if(S){const T=LS(void 0,S),k=S.getAttribute("data-nodeid"),A=S.getAttribute("data-handleid"),q=S.classList.contains("connectable"),j=S.classList.contains("connectableend");if(!k||!T)return _;const L={source:p?k:l,sourceHandle:p?A:a,target:p?l:k,targetHandle:p?a:A};_.connection=L;const P=q&&j&&(r===fa.Strict?p&&T==="source"||!p&&T==="target":k!==l||A!==a);_.isValid=P&&h(L),_.toHandle=OS(k,T,A,m,r,!0)}return _}const Wp={onPointerDown:jj,isValid:BS};function zj({domNode:e,panZoom:n,getTransform:r,getViewScale:l}){const a=wn(e);function o({translateExtent:c,width:d,height:h,zoomStep:m=1,pannable:p=!0,zoomable:x=!0,inversePan:v=!1}){const w=k=>{if(k.sourceEvent.type!=="wheel"||!n)return;const A=r(),q=k.sourceEvent.ctrlKey&&Go()?10:1,j=-k.sourceEvent.deltaY*(k.sourceEvent.deltaMode===1?.05:k.sourceEvent.deltaMode?1:.002)*m,L=A[2]*Math.pow(2,j*q);n.scaleTo(L)};let E=[0,0];const S=k=>{(k.sourceEvent.type==="mousedown"||k.sourceEvent.type==="touchstart")&&(E=[k.sourceEvent.clientX??k.sourceEvent.touches[0].clientX,k.sourceEvent.clientY??k.sourceEvent.touches[0].clientY])},_=k=>{const A=r();if(k.sourceEvent.type!=="mousemove"&&k.sourceEvent.type!=="touchmove"||!n)return;const q=[k.sourceEvent.clientX??k.sourceEvent.touches[0].clientX,k.sourceEvent.clientY??k.sourceEvent.touches[0].clientY],j=[q[0]-E[0],q[1]-E[1]];E=q;const L=l()*Math.max(A[2],Math.log(A[2]))*(v?-1:1),O={x:A[0]-j[0]*L,y:A[1]-j[1]*L},P=[[0,0],[d,h]];n.setViewportConstrained({x:O.x,y:O.y,zoom:A[2]},P,c)},T=hS().on("start",S).on("zoom",p?_:null).on("zoom.wheel",x?w:null);a.call(T,{})}function u(){a.on("zoom",null)}return{update:o,destroy:u,pointer:Un}}const Dc=e=>({x:e.x,y:e.y,zoom:e.k}),yh=({x:e,y:n,zoom:r})=>jc.translate(e,n).scale(r),na=(e,n)=>e.target.closest(`.${n}`),IS=(e,n)=>n===2&&Array.isArray(e)&&e.includes(2),Mj=e=>((e*=2)<=1?e*e*e:(e-=2)*e*e+2)/2,vh=(e,n=0,r=Mj,l=()=>{})=>{const a=typeof n=="number"&&n>0;return a||l(),a?e.transition().duration(n).ease(r).on("end",l):e},qS=e=>{const n=e.ctrlKey&&Go()?10:1;return-e.deltaY*(e.deltaMode===1?.05:e.deltaMode?1:.002)*n};function Dj({zoomPanValues:e,noWheelClassName:n,d3Selection:r,d3Zoom:l,panOnScrollMode:a,panOnScrollSpeed:o,zoomOnPinch:u,onPanZoomStart:c,onPanZoom:d,onPanZoomEnd:h}){return m=>{if(na(m,n))return m.ctrlKey&&m.preventDefault(),!1;m.preventDefault(),m.stopImmediatePropagation();const p=r.property("__zoom").k||1;if(m.ctrlKey&&u){const S=Un(m),_=qS(m),T=p*Math.pow(2,_);l.scaleTo(r,T,S,m);return}const x=m.deltaMode===1?20:1;let v=a===Zi.Vertical?0:m.deltaX*x,w=a===Zi.Horizontal?0:m.deltaY*x;!Go()&&m.shiftKey&&a!==Zi.Vertical&&(v=m.deltaY*x,w=0),l.translateBy(r,-(v/p)*o,-(w/p)*o,{internal:!0});const E=Dc(r.property("__zoom"));clearTimeout(e.panScrollTimeout),e.isPanScrolling?(d==null||d(m,E),e.panScrollTimeout=setTimeout(()=>{h==null||h(m,E),e.isPanScrolling=!1},150)):(e.isPanScrolling=!0,c==null||c(m,E))}}function Rj({noWheelClassName:e,preventScrolling:n,d3ZoomHandler:r}){return function(l,a){const o=l.type==="wheel",u=!n&&o&&!l.ctrlKey,c=na(l,e);if(l.ctrlKey&&o&&c&&l.preventDefault(),u||c)return null;l.preventDefault(),r.call(this,l,a)}}function Oj({zoomPanValues:e,onDraggingChange:n,onPanZoomStart:r}){return l=>{var o,u,c;if((o=l.sourceEvent)!=null&&o.internal)return;const a=Dc(l.transform);e.mouseButton=((u=l.sourceEvent)==null?void 0:u.button)||0,e.isZoomingOrPanning=!0,e.prevViewport=a,((c=l.sourceEvent)==null?void 0:c.type)==="mousedown"&&n(!0),r&&(r==null||r(l.sourceEvent,a))}}function Lj({zoomPanValues:e,panOnDrag:n,onPaneContextMenu:r,onTransformChange:l,onPanZoom:a}){return o=>{var u,c;e.usedRightMouseButton=!!(r&&IS(n,e.mouseButton??0)),(u=o.sourceEvent)!=null&&u.sync||l([o.transform.x,o.transform.y,o.transform.k]),a&&!((c=o.sourceEvent)!=null&&c.internal)&&(a==null||a(o.sourceEvent,Dc(o.transform)))}}function Hj({zoomPanValues:e,panOnDrag:n,panOnScroll:r,onDraggingChange:l,onPanZoomEnd:a,onPaneContextMenu:o}){return u=>{var c;if(!((c=u.sourceEvent)!=null&&c.internal)&&(e.isZoomingOrPanning=!1,o&&IS(n,e.mouseButton??0)&&!e.usedRightMouseButton&&u.sourceEvent&&o(u.sourceEvent),e.usedRightMouseButton=!1,l(!1),a)){const d=Dc(u.transform);e.prevViewport=d,clearTimeout(e.timerId),e.timerId=setTimeout(()=>{a==null||a(u.sourceEvent,d)},r?150:0)}}}function Bj({zoomActivationKeyPressed:e,zoomOnScroll:n,zoomOnPinch:r,panOnDrag:l,panOnScroll:a,zoomOnDoubleClick:o,userSelectionActive:u,noWheelClassName:c,noPanClassName:d,lib:h,connectionInProgress:m}){return p=>{var S;const x=e||n,v=r&&p.ctrlKey,w=p.type==="wheel";if(p.button===1&&p.type==="mousedown"&&(na(p,`${h}-flow__node`)||na(p,`${h}-flow__edge`)))return!0;if(!l&&!x&&!a&&!o&&!r||u||m&&!w||na(p,c)&&w||na(p,d)&&(!w||a&&w&&!e)||!r&&p.ctrlKey&&w)return!1;if(!r&&p.type==="touchstart"&&((S=p.touches)==null?void 0:S.length)>1)return p.preventDefault(),!1;if(!x&&!a&&!v&&w||!l&&(p.type==="mousedown"||p.type==="touchstart")||Array.isArray(l)&&!l.includes(p.button)&&p.type==="mousedown")return!1;const E=Array.isArray(l)&&l.includes(p.button)||!p.button||p.button<=1;return(!p.ctrlKey||w)&&E}}function Ij({domNode:e,minZoom:n,maxZoom:r,translateExtent:l,viewport:a,onPanZoom:o,onPanZoomStart:u,onPanZoomEnd:c,onDraggingChange:d}){const h={isZoomingOrPanning:!1,usedRightMouseButton:!1,prevViewport:{},mouseButton:0,timerId:void 0,panScrollTimeout:void 0,isPanScrolling:!1},m=e.getBoundingClientRect(),p=hS().scaleExtent([n,r]).translateExtent(l),x=wn(e).call(p);T({x:a.x,y:a.y,zoom:da(a.zoom,n,r)},[[0,0],[m.width,m.height]],l);const v=x.on("wheel.zoom"),w=x.on("dblclick.zoom");p.wheelDelta(qS);function E(H,U){return x?new Promise(ee=>{p==null||p.interpolate((U==null?void 0:U.interpolate)==="linear"?jo:Ju).transform(vh(x,U==null?void 0:U.duration,U==null?void 0:U.ease,()=>ee(!0)),H)}):Promise.resolve(!1)}function S({noWheelClassName:H,noPanClassName:U,onPaneContextMenu:ee,userSelectionActive:B,panOnScroll:F,panOnDrag:z,panOnScrollMode:G,panOnScrollSpeed:Q,preventScrolling:K,zoomOnPinch:M,zoomOnScroll:I,zoomOnDoubleClick:Y,zoomActivationKeyPressed:N,lib:$,onTransformChange:X,connectionInProgress:J,paneClickDistance:ne,selectionOnDrag:re}){B&&!h.isZoomingOrPanning&&_();const se=F&&!N&&!B;p.clickDistance(re?1/0:!Vn(ne)||ne<0?0:ne);const xe=se?Dj({zoomPanValues:h,noWheelClassName:H,d3Selection:x,d3Zoom:p,panOnScrollMode:G,panOnScrollSpeed:Q,zoomOnPinch:M,onPanZoomStart:u,onPanZoom:o,onPanZoomEnd:c}):Rj({noWheelClassName:H,preventScrolling:K,d3ZoomHandler:v});if(x.on("wheel.zoom",xe,{passive:!1}),!B){const ye=Oj({zoomPanValues:h,onDraggingChange:d,onPanZoomStart:u});p.on("start",ye);const pe=Lj({zoomPanValues:h,panOnDrag:z,onPaneContextMenu:!!ee,onPanZoom:o,onTransformChange:X});p.on("zoom",pe);const _e=Hj({zoomPanValues:h,panOnDrag:z,panOnScroll:F,onPaneContextMenu:ee,onPanZoomEnd:c,onDraggingChange:d});p.on("end",_e)}const be=Bj({zoomActivationKeyPressed:N,panOnDrag:z,zoomOnScroll:I,panOnScroll:F,zoomOnDoubleClick:Y,zoomOnPinch:M,userSelectionActive:B,noPanClassName:U,noWheelClassName:H,lib:$,connectionInProgress:J});p.filter(be),Y?x.on("dblclick.zoom",w):x.on("dblclick.zoom",null)}function _(){p.on("zoom",null)}async function T(H,U,ee){const B=yh(H),F=p==null?void 0:p.constrain()(B,U,ee);return F&&await E(F),new Promise(z=>z(F))}async function k(H,U){const ee=yh(H);return await E(ee,U),new Promise(B=>B(ee))}function A(H){if(x){const U=yh(H),ee=x.property("__zoom");(ee.k!==H.zoom||ee.x!==H.x||ee.y!==H.y)&&(p==null||p.transform(x,U,null,{sync:!0}))}}function q(){const H=x?dS(x.node()):{x:0,y:0,k:1};return{x:H.x,y:H.y,zoom:H.k}}function j(H,U){return x?new Promise(ee=>{p==null||p.interpolate((U==null?void 0:U.interpolate)==="linear"?jo:Ju).scaleTo(vh(x,U==null?void 0:U.duration,U==null?void 0:U.ease,()=>ee(!0)),H)}):Promise.resolve(!1)}function L(H,U){return x?new Promise(ee=>{p==null||p.interpolate((U==null?void 0:U.interpolate)==="linear"?jo:Ju).scaleBy(vh(x,U==null?void 0:U.duration,U==null?void 0:U.ease,()=>ee(!0)),H)}):Promise.resolve(!1)}function O(H){p==null||p.scaleExtent(H)}function P(H){p==null||p.translateExtent(H)}function R(H){const U=!Vn(H)||H<0?0:H;p==null||p.clickDistance(U)}return{update:S,destroy:_,setViewport:k,setViewportConstrained:T,getViewport:q,scaleTo:j,scaleBy:L,setScaleExtent:O,setTranslateExtent:P,syncViewport:A,setClickDistance:R}}var ma;(function(e){e.Line="line",e.Handle="handle"})(ma||(ma={}));function qj({width:e,prevWidth:n,height:r,prevHeight:l,affectsX:a,affectsY:o}){const u=e-n,c=r-l,d=[u>0?1:u<0?-1:0,c>0?1:c<0?-1:0];return u&&a&&(d[0]=d[0]*-1),c&&o&&(d[1]=d[1]*-1),d}function qv(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 hi(e,n){return Math.max(0,n-e)}function pi(e,n){return Math.max(0,e-n)}function Pu(e,n,r){return Math.max(0,n-e,e-r)}function Uv(e,n){return e?!n:n}function Uj(e,n,r,l,a,o,u,c){let{affectsX:d,affectsY:h}=n;const{isHorizontal:m,isVertical:p}=n,x=m&&p,{xSnapped:v,ySnapped:w}=r,{minWidth:E,maxWidth:S,minHeight:_,maxHeight:T}=l,{x:k,y:A,width:q,height:j,aspectRatio:L}=e;let O=Math.floor(m?v-e.pointerX:0),P=Math.floor(p?w-e.pointerY:0);const R=q+(d?-O:O),H=j+(h?-P:P),U=-o[0]*q,ee=-o[1]*j;let B=Pu(R,E,S),F=Pu(H,_,T);if(u){let Q=0,K=0;d&&O<0?Q=hi(k+O+U,u[0][0]):!d&&O>0&&(Q=pi(k+R+U,u[1][0])),h&&P<0?K=hi(A+P+ee,u[0][1]):!h&&P>0&&(K=pi(A+H+ee,u[1][1])),B=Math.max(B,Q),F=Math.max(F,K)}if(c){let Q=0,K=0;d&&O>0?Q=pi(k+O,c[0][0]):!d&&O<0&&(Q=hi(k+R,c[1][0])),h&&P>0?K=pi(A+P,c[0][1]):!h&&P<0&&(K=hi(A+H,c[1][1])),B=Math.max(B,Q),F=Math.max(F,K)}if(a){if(m){const Q=Pu(R/L,_,T)*L;if(B=Math.max(B,Q),u){let K=0;!d&&!h||d&&!h&&x?K=pi(A+ee+R/L,u[1][1])*L:K=hi(A+ee+(d?O:-O)/L,u[0][1])*L,B=Math.max(B,K)}if(c){let K=0;!d&&!h||d&&!h&&x?K=hi(A+R/L,c[1][1])*L:K=pi(A+(d?O:-O)/L,c[0][1])*L,B=Math.max(B,K)}}if(p){const Q=Pu(H*L,E,S)/L;if(F=Math.max(F,Q),u){let K=0;!d&&!h||h&&!d&&x?K=pi(k+H*L+U,u[1][0])/L:K=hi(k+(h?P:-P)*L+U,u[0][0])/L,F=Math.max(F,K)}if(c){let K=0;!d&&!h||h&&!d&&x?K=hi(k+H*L,c[1][0])/L:K=pi(k+(h?P:-P)*L,c[0][0])/L,F=Math.max(F,K)}}}P=P+(P<0?F:-F),O=O+(O<0?B:-B),a&&(x?R>H*L?P=(Uv(d,h)?-O:O)/L:O=(Uv(d,h)?-P:P)*L:m?(P=O/L,h=d):(O=P*L,d=h));const z=d?k+O:k,G=h?A+P:A;return{width:q+(d?-O:O),height:j+(h?-P:P),x:o[0]*O*(d?-1:1)+z,y:o[1]*P*(h?-1:1)+G}}const US={width:0,height:0,x:0,y:0},Pj={...US,pointerX:0,pointerY:0,aspectRatio:1};function Vj(e){return[[0,0],[e.measured.width,e.measured.height]]}function $j(e,n,r){const l=n.position.x+e.position.x,a=n.position.y+e.position.y,o=e.measured.width??0,u=e.measured.height??0,c=r[0]*o,d=r[1]*u;return[[l-c,a-d],[l+o-c,a+u-d]]}function Gj({domNode:e,nodeId:n,getStoreItems:r,onChange:l,onEnd:a}){const o=wn(e);let u={controlDirection:qv("bottom-right"),boundaries:{minWidth:0,minHeight:0,maxWidth:Number.MAX_VALUE,maxHeight:Number.MAX_VALUE},resizeDirection:void 0,keepAspectRatio:!1};function c({controlPosition:h,boundaries:m,keepAspectRatio:p,resizeDirection:x,onResizeStart:v,onResize:w,onResizeEnd:E,shouldResize:S}){let _={...US},T={...Pj};u={boundaries:m,resizeDirection:x,keepAspectRatio:p,controlDirection:qv(h)};let k,A=null,q=[],j,L,O,P=!1;const R=Jw().on("start",H=>{const{nodeLookup:U,transform:ee,snapGrid:B,snapToGrid:F,nodeOrigin:z,paneDomNode:G}=r();if(k=U.get(n),!k)return;A=(G==null?void 0:G.getBoundingClientRect())??null;const{xSnapped:Q,ySnapped:K}=zo(H.sourceEvent,{transform:ee,snapGrid:B,snapToGrid:F,containerBounds:A});_={width:k.measured.width??0,height:k.measured.height??0,x:k.position.x??0,y:k.position.y??0},T={..._,pointerX:Q,pointerY:K,aspectRatio:_.width/_.height},j=void 0,k.parentId&&(k.extent==="parent"||k.expandParent)&&(j=U.get(k.parentId),L=j&&k.extent==="parent"?Vj(j):void 0),q=[],O=void 0;for(const[M,I]of U)if(I.parentId===n&&(q.push({id:M,position:{...I.position},extent:I.extent}),I.extent==="parent"||I.expandParent)){const Y=$j(I,k,I.origin??z);O?O=[[Math.min(Y[0][0],O[0][0]),Math.min(Y[0][1],O[0][1])],[Math.max(Y[1][0],O[1][0]),Math.max(Y[1][1],O[1][1])]]:O=Y}v==null||v(H,{..._})}).on("drag",H=>{const{transform:U,snapGrid:ee,snapToGrid:B,nodeOrigin:F}=r(),z=zo(H.sourceEvent,{transform:U,snapGrid:ee,snapToGrid:B,containerBounds:A}),G=[];if(!k)return;const{x:Q,y:K,width:M,height:I}=_,Y={},N=k.origin??F,{width:$,height:X,x:J,y:ne}=Uj(T,u.controlDirection,z,u.boundaries,u.keepAspectRatio,N,L,O),re=$!==M,se=X!==I,xe=J!==Q&&re,be=ne!==K&&se;if(!xe&&!be&&!re&&!se)return;if((xe||be||N[0]===1||N[1]===1)&&(Y.x=xe?J:_.x,Y.y=be?ne:_.y,_.x=Y.x,_.y=Y.y,q.length>0)){const ze=J-Q,Te=ne-K;for(const ut of q)ut.position={x:ut.position.x-ze+N[0]*($-M),y:ut.position.y-Te+N[1]*(X-I)},G.push(ut)}if((re||se)&&(Y.width=re&&(!u.resizeDirection||u.resizeDirection==="horizontal")?$:_.width,Y.height=se&&(!u.resizeDirection||u.resizeDirection==="vertical")?X:_.height,_.width=Y.width,_.height=Y.height),j&&k.expandParent){const ze=N[0]*(Y.width??0);Y.x&&Y.x{P&&(E==null||E(H,{..._}),a==null||a({..._}),P=!1)});o.call(R)}function d(){o.on(".drag",null)}return{update:c,destroy:d}}var bh={exports:{}},wh={},Sh={exports:{}},_h={};/** + * @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 Pv;function Fj(){if(Pv)return _h;Pv=1;var e=Zo();function n(p,x){return p===x&&(p!==0||1/p===1/x)||p!==p&&x!==x}var r=typeof Object.is=="function"?Object.is:n,l=e.useState,a=e.useEffect,o=e.useLayoutEffect,u=e.useDebugValue;function c(p,x){var v=x(),w=l({inst:{value:v,getSnapshot:x}}),E=w[0].inst,S=w[1];return o(function(){E.value=v,E.getSnapshot=x,d(E)&&S({inst:E})},[p,v,x]),a(function(){return d(E)&&S({inst:E}),p(function(){d(E)&&S({inst:E})})},[p]),u(v),v}function d(p){var x=p.getSnapshot;p=p.value;try{var v=x();return!r(p,v)}catch{return!0}}function h(p,x){return x()}var m=typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?h:c;return _h.useSyncExternalStore=e.useSyncExternalStore!==void 0?e.useSyncExternalStore:m,_h}var Vv;function Yj(){return Vv||(Vv=1,Sh.exports=Fj()),Sh.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 $v;function Xj(){if($v)return wh;$v=1;var e=Zo(),n=Yj();function r(h,m){return h===m&&(h!==0||1/h===1/m)||h!==h&&m!==m}var l=typeof Object.is=="function"?Object.is:r,a=n.useSyncExternalStore,o=e.useRef,u=e.useEffect,c=e.useMemo,d=e.useDebugValue;return wh.useSyncExternalStoreWithSelector=function(h,m,p,x,v){var w=o(null);if(w.current===null){var E={hasValue:!1,value:null};w.current=E}else E=w.current;w=c(function(){function _(j){if(!T){if(T=!0,k=j,j=x(j),v!==void 0&&E.hasValue){var L=E.value;if(v(L,j))return A=L}return A=j}if(L=A,l(k,j))return L;var O=x(j);return v!==void 0&&v(L,O)?(k=j,L):(k=j,A=O)}var T=!1,k,A,q=p===void 0?null:p;return[function(){return _(m())},q===null?void 0:function(){return _(q())}]},[m,p,x,v]);var S=a(h,w[0],w[1]);return u(function(){E.hasValue=!0,E.value=S},[S]),d(S),S},wh}var Gv;function Qj(){return Gv||(Gv=1,bh.exports=Xj()),bh.exports}var Zj=Qj();const Kj=Qo(Zj),Jj={},Fv=e=>{let n;const r=new Set,l=(m,p)=>{const x=typeof m=="function"?m(n):m;if(!Object.is(x,n)){const v=n;n=p??(typeof x!="object"||x===null)?x:Object.assign({},n,x),r.forEach(w=>w(n,v))}},a=()=>n,d={setState:l,getState:a,getInitialState:()=>h,subscribe:m=>(r.add(m),()=>r.delete(m)),destroy:()=>{(Jj?"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()}},h=n=e(l,a,d);return d},Wj=e=>e?Fv(e):Fv,{useDebugValue:ez}=ea,{useSyncExternalStoreWithSelector:tz}=Kj,nz=e=>e;function PS(e,n=nz,r){const l=tz(e.subscribe,e.getState,e.getServerState||e.getInitialState,n,r);return ez(l),l}const Yv=(e,n)=>{const r=Wj(e),l=(a,o=n)=>PS(r,a,o);return Object.assign(l,r),l},rz=(e,n)=>e?Yv(e,n):Yv;function pt(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=cw();const Rc=V.createContext(null),lz=Rc.Provider,VS=lr.error001();function Ye(e,n){const r=V.useContext(Rc);if(r===null)throw new Error(VS);return PS(r,e,n)}function mt(){const e=V.useContext(Rc);if(e===null)throw new Error(VS);return V.useMemo(()=>({getState:e.getState,setState:e.setState,subscribe:e.subscribe}),[e])}const Xv={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%)"},$S="react-flow__node-desc",GS="react-flow__edge-desc",oz="react-flow__aria-live",sz=e=>e.ariaLiveMessage,uz=e=>e.ariaLabelConfig;function cz({rfId:e}){const n=Ye(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=Ye(uz);return b.jsxs(b.Fragment,{children:[b.jsx("div",{id:`${$S}-${e}`,style:Xv,children:n?r["node.a11yDescription.default"]:r["node.a11yDescription.keyboardDisabled"]}),b.jsx("div",{id:`${GS}-${e}`,style:Xv,children:r["edge.a11yDescription.default"]}),!n&&b.jsx(cz,{rfId:e})]})}const Oc=V.forwardRef(({position:e="top-left",children:n,className:r,style:l,...a},o)=>{const u=`${e}`.split("-");return b.jsx("div",{className:jt(["react-flow__panel",r,...u]),style:l,ref:o,...a,children:n})});Oc.displayName="Panel";function dz({proOptions:e,position:n="bottom-right"}){return e!=null&&e.hideAttribution?null:b.jsx(Oc,{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}},Vu=e=>e.id;function pz(e,n){return pt(e.selectedNodes.map(Vu),n.selectedNodes.map(Vu))&&pt(e.selectedEdges.map(Vu),n.selectedEdges.map(Vu))}function mz({onSelectionChange:e}){const n=mt(),{selectedNodes:r,selectedEdges:l}=Ye(hz,pz);return V.useEffect(()=>{const a={nodes:r,edges:l};e==null||e(a),n.getState().onSelectionChangeHandlers.forEach(o=>o(a))},[r,l,e]),null}const gz=e=>!!e.onSelectionChangeHandlers;function xz({onSelectionChange:e}){const n=Ye(gz);return e||n?b.jsx(mz,{onSelectionChange:e}):null}const FS=[0,0],yz={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"],Qv=[...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}),Zv={translateExtent:Po,nodeOrigin:FS,minZoom:.5,maxZoom:2,elementsSelectable:!0,noPanClassName:"nopan",rfId:"1"};function wz(e){const{setNodes:n,setEdges:r,setMinZoom:l,setMaxZoom:a,setTranslateExtent:o,setNodeExtent:u,reset:c,setDefaultNodesAndEdges:d}=Ye(bz,pt),h=mt();V.useEffect(()=>(d(e.defaultNodes,e.defaultEdges),()=>{m.current=Zv,c()}),[]);const m=V.useRef(Zv);return V.useEffect(()=>{for(const p of Qv){const x=e[p],v=m.current[p];x!==v&&(typeof e[p]>"u"||(p==="nodes"?n(x):p==="edges"?r(x):p==="minZoom"?l(x):p==="maxZoom"?a(x):p==="translateExtent"?o(x):p==="nodeExtent"?u(x):p==="ariaLabelConfig"?h.setState({ariaLabelConfig:rj(x)}):p==="fitView"?h.setState({fitViewQueued:x}):p==="fitViewOptions"?h.setState({fitViewOptions:x}):h.setState({[p]:x})))}m.current=e},Qv.map(p=>e[p])),null}function Kv(){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=Kv(),o=()=>r(a!=null&&a.matches?"dark":"light");return o(),a==null||a.addEventListener("change",o),()=>{a==null||a.removeEventListener("change",o)}},[e]),n!==null?n:(l=Kv())!=null&&l.matches?"dark":"light"}const Jv=typeof document<"u"?document:null;function Fo(e=null,n={target:Jv,actInsideInputWithModifier:!0}){const[r,l]=V.useState(!1),a=V.useRef(!1),o=V.useRef(new Set([])),[u,c]=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,x)=>p.concat(...x),[]);return[h,m]}return[[],[]]},[e]);return V.useEffect(()=>{const d=(n==null?void 0:n.target)??Jv,h=(n==null?void 0:n.actInsideInputWithModifier)??!0;if(e!==null){const m=v=>{var S,_;if(a.current=v.ctrlKey||v.metaKey||v.shiftKey||v.altKey,(!a.current||a.current&&!h)&&NS(v))return!1;const E=eb(v.code,c);if(o.current.add(v[E]),Wv(u,o.current,!1)){const T=((_=(S=v.composedPath)==null?void 0:S.call(v))==null?void 0:_[0])||v.target,k=(T==null?void 0:T.nodeName)==="BUTTON"||(T==null?void 0:T.nodeName)==="A";n.preventDefault!==!1&&(a.current||!k)&&v.preventDefault(),l(!0)}},p=v=>{const w=eb(v.code,c);Wv(u,o.current,!0)?(l(!1),o.current.clear()):o.current.delete(v[w]),v.key==="Meta"&&o.current.clear(),a.current=!1},x=()=>{o.current.clear(),l(!1)};return d==null||d.addEventListener("keydown",m),d==null||d.addEventListener("keyup",p),window.addEventListener("blur",x),window.addEventListener("contextmenu",x),()=>{d==null||d.removeEventListener("keydown",m),d==null||d.removeEventListener("keyup",p),window.removeEventListener("blur",x),window.removeEventListener("contextmenu",x)}}},[e,l]),r}function Wv(e,n,r){return e.filter(l=>r||l.length===n.size).some(l=>l.every(a=>n.has(a)))}function eb(e,n){return n.includes(e)?"code":"key"}const _z=()=>{const e=mt();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,o],panZoom:u}=e.getState();return u?(await u.setViewport({x:n.x??l,y:n.y??a,zoom:n.zoom??o},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:o,maxZoom:u,panZoom:c}=e.getState(),d=Am(n,l,a,o,u,(r==null?void 0:r.padding)??.1);return c?(await c.setViewport(d,{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:o,domNode:u}=e.getState();if(!u)return n;const{x:c,y:d}=u.getBoundingClientRect(),h={x:n.x-c,y:n.y-d},m=r.snapGrid??a,p=r.snapToGrid??o;return ns(h,l,p,m)},flowToScreenPosition:n=>{const{transform:r,domNode:l}=e.getState();if(!l)return n;const{x:a,y:o}=l.getBoundingClientRect(),u=mc(n,r);return{x:u.x+a,y:u.y+o}}}),[])};function YS(e,n){const r=[],l=new Map,a=[];for(const o of e)if(o.type==="add"){a.push(o);continue}else if(o.type==="remove"||o.type==="replace")l.set(o.id,[o]);else{const u=l.get(o.id);u?u.push(o):l.set(o.id,[o])}for(const o of n){const u=l.get(o.id);if(!u){r.push(o);continue}if(u[0].type==="remove")continue;if(u[0].type==="replace"){r.push({...u[0].item});continue}const c={...o};for(const d of u)kz(d,c);r.push(c)}return a.length&&a.forEach(o=>{o.index!==void 0?r.splice(o.index,0,{...o.item}):r.push({...o.item})}),r}function kz(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 XS(e,n){return YS(e,n)}function QS(e,n){return YS(e,n)}function $i(e,n){return{id:e,type:"select",selected:n}}function ra(e,n=new Set,r=!1){const l=[];for(const[a,o]of e){const u=n.has(a);!(o.selected===void 0&&!u)&&o.selected!==u&&(r&&(o.selected=u),l.push($i(o.id,u)))}return l}function tb({items:e=[],lookup:n}){var a;const r=[],l=new Map(e.map(o=>[o.id,o]));for(const[o,u]of e.entries()){const c=n.get(u.id),d=((a=c==null?void 0:c.internals)==null?void 0:a.userNode)??c;d!==void 0&&d!==u&&r.push({id:u.id,item:u,type:"replace"}),d===void 0&&r.push({item:u,type:"add",index:o})}for(const[o]of n)l.get(o)===void 0&&r.push({id:o,type:"remove"});return r}function nb(e){return{id:e.id,type:"remove"}}const rb=e=>YA(e),Ez=e=>yS(e);function ZS(e){return V.forwardRef(e)}const Nz=typeof window<"u"?V.useLayoutEffect:V.useEffect;function ib(e){const[n,r]=V.useState(BigInt(0)),[l]=V.useState(()=>Cz(()=>r(a=>a+BigInt(1))));return Nz(()=>{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 KS=V.createContext(null);function Tz({children:e}){const n=mt(),r=V.useCallback(c=>{const{nodes:d=[],setNodes:h,hasDefaultNodes:m,onNodesChange:p,nodeLookup:x,fitViewQueued:v,onNodesChangeMiddlewareMap:w}=n.getState();let E=d;for(const _ of c)E=typeof _=="function"?_(E):_;let S=tb({items:E,lookup:x});for(const _ of w.values())S=_(S);m&&h(E),S.length>0?p==null||p(S):v&&window.requestAnimationFrame(()=>{const{fitViewQueued:_,nodes:T,setNodes:k}=n.getState();_&&k(T)})},[]),l=ib(r),a=V.useCallback(c=>{const{edges:d=[],setEdges:h,hasDefaultEdges:m,onEdgesChange:p,edgeLookup:x}=n.getState();let v=d;for(const w of c)v=typeof w=="function"?w(v):w;m?h(v):p&&p(tb({items:v,lookup:x}))},[]),o=ib(a),u=V.useMemo(()=>({nodeQueue:l,edgeQueue:o}),[]);return b.jsx(KS.Provider,{value:u,children:e})}function Az(){const e=V.useContext(KS);if(!e)throw new Error("useBatchContext must be used within a BatchProvider");return e}const jz=e=>!!e.panZoom;function ll(){const e=_z(),n=mt(),r=Az(),l=Ye(jz),a=V.useMemo(()=>{const o=p=>n.getState().nodeLookup.get(p),u=p=>{r.nodeQueue.push(p)},c=p=>{r.edgeQueue.push(p)},d=p=>{var _,T;const{nodeLookup:x,nodeOrigin:v}=n.getState(),w=rb(p)?p:x.get(p.id),E=w.parentId?kS(w.position,w.measured,w.parentId,x,v):w.position,S={...w,position:E,width:((_=w.measured)==null?void 0:_.width)??w.width,height:((T=w.measured)==null?void 0:T.height)??w.height};return ha(S)},h=(p,x,v={replace:!1})=>{u(w=>w.map(E=>{if(E.id===p){const S=typeof x=="function"?x(E):x;return v.replace&&rb(S)?S:{...E,...S}}return E}))},m=(p,x,v={replace:!1})=>{c(w=>w.map(E=>{if(E.id===p){const S=typeof x=="function"?x(E):x;return v.replace&&Ez(S)?S:{...E,...S}}return E}))};return{getNodes:()=>n.getState().nodes.map(p=>({...p})),getNode:p=>{var x;return(x=o(p))==null?void 0:x.internals.userNode},getInternalNode:o,getEdges:()=>{const{edges:p=[]}=n.getState();return p.map(x=>({...x}))},getEdge:p=>n.getState().edgeLookup.get(p),setNodes:u,setEdges:c,addNodes:p=>{const x=Array.isArray(p)?p:[p];r.nodeQueue.push(v=>[...v,...x])},addEdges:p=>{const x=Array.isArray(p)?p:[p];r.edgeQueue.push(v=>[...v,...x])},toObject:()=>{const{nodes:p=[],edges:x=[],transform:v}=n.getState(),[w,E,S]=v;return{nodes:p.map(_=>({..._})),edges:x.map(_=>({..._})),viewport:{x:w,y:E,zoom:S}}},deleteElements:async({nodes:p=[],edges:x=[]})=>{const{nodes:v,edges:w,onNodesDelete:E,onEdgesDelete:S,triggerNodeChanges:_,triggerEdgeChanges:T,onDelete:k,onBeforeDelete:A}=n.getState(),{nodes:q,edges:j}=await JA({nodesToRemove:p,edgesToRemove:x,nodes:v,edges:w,onBeforeDelete:A}),L=j.length>0,O=q.length>0;if(L){const P=j.map(nb);S==null||S(j),T(P)}if(O){const P=q.map(nb);E==null||E(q),_(P)}return(O||L)&&(k==null||k({nodes:q,edges:j})),{deletedNodes:q,deletedEdges:j}},getIntersectingNodes:(p,x=!0,v)=>{const w=Av(p),E=w?p:d(p),S=v!==void 0;return E?(v||n.getState().nodes).filter(_=>{const T=n.getState().nodeLookup.get(_.id);if(T&&!w&&(_.id===p.id||!T.internals.positionAbsolute))return!1;const k=ha(S?_:T),A=$o(k,E);return x&&A>0||A>=k.width*k.height||A>=E.width*E.height}):[]},isNodeIntersecting:(p,x,v=!0)=>{const E=Av(p)?p:d(p);if(!E)return!1;const S=$o(E,x);return v&&S>0||S>=x.width*x.height||S>=E.width*E.height},updateNode:h,updateNodeData:(p,x,v={replace:!1})=>{h(p,w=>{const E=typeof x=="function"?x(w):x;return v.replace?{...w,data:E}:{...w,data:{...w.data,...E}}},v)},updateEdge:m,updateEdgeData:(p,x,v={replace:!1})=>{m(p,w=>{const E=typeof x=="function"?x(w):x;return v.replace?{...w,data:E}:{...w,data:{...w.data,...E}}},v)},getNodesBounds:p=>{const{nodeLookup:x,nodeOrigin:v}=n.getState();return XA(p,{nodeLookup:x,nodeOrigin:v})},getHandleConnections:({type:p,id:x,nodeId:v})=>{var w;return Array.from(((w=n.getState().connectionLookup.get(`${v}-${p}${x?`-${x}`:""}`))==null?void 0:w.values())??[])},getNodeConnections:({type:p,handleId:x,nodeId:v})=>{var w;return Array.from(((w=n.getState().connectionLookup.get(`${v}${p?x?`-${p}-${x}`:`-${p}`:""}`))==null?void 0:w.values())??[])},fitView:async p=>{const x=n.getState().fitViewResolver??nj();return n.setState({fitViewQueued:!0,fitViewOptions:p,fitViewResolver:x}),r.nodeQueue.push(v=>[...v]),x.promise}}},[]);return V.useMemo(()=>({...a,...e,viewportInitialized:l}),[l])}const lb=e=>e.selected,zz=typeof window<"u"?window:void 0;function Mz({deleteKeyCode:e,multiSelectionKeyCode:n}){const r=mt(),{deleteElements:l}=ll(),a=Fo(e,{actInsideInputWithModifier:!1}),o=Fo(n,{target:zz});V.useEffect(()=>{if(a){const{edges:u,nodes:c}=r.getState();l({nodes:c.filter(lb),edges:u.filter(lb)}),r.setState({nodesSelectionActive:!1})}},[a]),V.useEffect(()=>{r.setState({multiSelectionActive:o})},[o])}function Dz(e){const n=mt();V.useEffect(()=>{const r=()=>{var a,o,u,c;if(!e.current||!(((o=(a=e.current).checkVisibility)==null?void 0:o.call(a))??!0))return!1;const l=jm(e.current);(l.height===0||l.width===0)&&((c=(u=n.getState()).onError)==null||c.call(u,"004",lr.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 Lc={position:"absolute",width:"100%",height:"100%",top:0,left:0},Rz=e=>({userSelectionActive:e.userSelectionActive,lib:e.lib,connectionInProgress:e.connection.inProgress});function Oz({onPaneContextMenu:e,zoomOnScroll:n=!0,zoomOnPinch:r=!0,panOnScroll:l=!1,panOnScrollSpeed:a=.5,panOnScrollMode:o=Zi.Free,zoomOnDoubleClick:u=!0,panOnDrag:c=!0,defaultViewport:d,translateExtent:h,minZoom:m,maxZoom:p,zoomActivationKeyCode:x,preventScrolling:v=!0,children:w,noWheelClassName:E,noPanClassName:S,onViewportChange:_,isControlledViewport:T,paneClickDistance:k,selectionOnDrag:A}){const q=mt(),j=V.useRef(null),{userSelectionActive:L,lib:O,connectionInProgress:P}=Ye(Rz,pt),R=Fo(x),H=V.useRef();Dz(j);const U=V.useCallback(ee=>{_==null||_({x:ee[0],y:ee[1],zoom:ee[2]}),T||q.setState({transform:ee})},[_,T]);return V.useEffect(()=>{if(j.current){H.current=Ij({domNode:j.current,minZoom:m,maxZoom:p,translateExtent:h,viewport:d,onDraggingChange:z=>q.setState(G=>G.paneDragging===z?G:{paneDragging:z}),onPanZoomStart:(z,G)=>{const{onViewportChangeStart:Q,onMoveStart:K}=q.getState();K==null||K(z,G),Q==null||Q(G)},onPanZoom:(z,G)=>{const{onViewportChange:Q,onMove:K}=q.getState();K==null||K(z,G),Q==null||Q(G)},onPanZoomEnd:(z,G)=>{const{onViewportChangeEnd:Q,onMoveEnd:K}=q.getState();K==null||K(z,G),Q==null||Q(G)}});const{x:ee,y:B,zoom:F}=H.current.getViewport();return q.setState({panZoom:H.current,transform:[ee,B,F],domNode:j.current.closest(".react-flow")}),()=>{var z;(z=H.current)==null||z.destroy()}}},[]),V.useEffect(()=>{var ee;(ee=H.current)==null||ee.update({onPaneContextMenu:e,zoomOnScroll:n,zoomOnPinch:r,panOnScroll:l,panOnScrollSpeed:a,panOnScrollMode:o,zoomOnDoubleClick:u,panOnDrag:c,zoomActivationKeyPressed:R,preventScrolling:v,noPanClassName:S,userSelectionActive:L,noWheelClassName:E,lib:O,onTransformChange:U,connectionInProgress:P,selectionOnDrag:A,paneClickDistance:k})},[e,n,r,l,a,o,u,c,R,v,S,L,E,O,U,P,A,k]),b.jsx("div",{className:"react-flow__renderer",ref:j,style:Lc,children:w})}const Lz=e=>({userSelectionActive:e.userSelectionActive,userSelectionRect:e.userSelectionRect});function Hz(){const{userSelectionActive:e,userSelectionRect:n}=Ye(Lz,pt);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 kh=(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 Iz({isSelecting:e,selectionKeyPressed:n,selectionMode:r=Vo.Full,panOnDrag:l,paneClickDistance:a,selectionOnDrag:o,onSelectionStart:u,onSelectionEnd:c,onPaneClick:d,onPaneContextMenu:h,onPaneScroll:m,onPaneMouseEnter:p,onPaneMouseMove:x,onPaneMouseLeave:v,children:w}){const E=mt(),{userSelectionActive:S,elementsSelectable:_,dragging:T,connectionInProgress:k}=Ye(Bz,pt),A=_&&(e||S),q=V.useRef(null),j=V.useRef(),L=V.useRef(new Set),O=V.useRef(new Set),P=V.useRef(!1),R=Q=>{if(P.current||k){P.current=!1;return}d==null||d(Q),E.getState().resetSelectedElements(),E.setState({nodesSelectionActive:!1})},H=Q=>{if(Array.isArray(l)&&(l!=null&&l.includes(2))){Q.preventDefault();return}h==null||h(Q)},U=m?Q=>m(Q):void 0,ee=Q=>{P.current&&(Q.stopPropagation(),P.current=!1)},B=Q=>{var X,J;const{domNode:K}=E.getState();if(j.current=K==null?void 0:K.getBoundingClientRect(),!j.current)return;const M=Q.target===q.current;if(!M&&!!Q.target.closest(".nokey")||!e||!(o&&M||n)||Q.button!==0||!Q.isPrimary)return;(J=(X=Q.target)==null?void 0:X.setPointerCapture)==null||J.call(X,Q.pointerId),P.current=!1;const{x:N,y:$}=$n(Q.nativeEvent,j.current);E.setState({userSelectionRect:{width:0,height:0,startX:N,startY:$,x:N,y:$}}),M||(Q.stopPropagation(),Q.preventDefault())},F=Q=>{const{userSelectionRect:K,transform:M,nodeLookup:I,edgeLookup:Y,connectionLookup:N,triggerNodeChanges:$,triggerEdgeChanges:X,defaultEdgeOptions:J,resetSelectedElements:ne}=E.getState();if(!j.current||!K)return;const{x:re,y:se}=$n(Q.nativeEvent,j.current),{startX:xe,startY:be}=K;if(!P.current){const Te=n?0:a;if(Math.hypot(re-xe,se-be)<=Te)return;ne(),u==null||u(Q)}P.current=!0;const ye={startX:xe,startY:be,x:reTe.id)),O.current=new Set;const ze=(J==null?void 0:J.selectable)??!0;for(const Te of L.current){const ut=N.get(Te);if(ut)for(const{edgeId:nt}of ut.values()){const zt=Y.get(nt);zt&&(zt.selectable??ze)&&O.current.add(nt)}}if(!jv(pe,L.current)){const Te=ra(I,L.current,!0);$(Te)}if(!jv(_e,O.current)){const Te=ra(Y,O.current);X(Te)}E.setState({userSelectionRect:ye,userSelectionActive:!0,nodesSelectionActive:!1})},z=Q=>{var K,M;Q.button===0&&((M=(K=Q.target)==null?void 0:K.releasePointerCapture)==null||M.call(K,Q.pointerId),!S&&Q.target===q.current&&E.getState().userSelectionRect&&(R==null||R(Q)),E.setState({userSelectionActive:!1,userSelectionRect:null}),P.current&&(c==null||c(Q),E.setState({nodesSelectionActive:L.current.size>0})))},G=l===!0||Array.isArray(l)&&l.includes(0);return b.jsxs("div",{className:jt(["react-flow__pane",{draggable:G,dragging:T,selection:e}]),onClick:A?void 0:kh(R,q),onContextMenu:kh(H,q),onWheel:kh(U,q),onPointerEnter:A?void 0:p,onPointerMove:A?F:x,onPointerUp:A?z:void 0,onPointerDownCapture:A?B:void 0,onClickCapture:A?ee:void 0,onPointerLeave:v,ref:q,style:Lc,children:[w,b.jsx(Hz,{})]})}function em({id:e,store:n,unselect:r=!1,nodeRef:l}){const{addSelectedNodes:a,unselectNodesAndEdges:o,multiSelectionActive:u,nodeLookup:c,onError:d}=n.getState(),h=c.get(e);if(!h){d==null||d("012",lr.error012(e));return}n.setState({nodesSelectionActive:!1}),h.selected?(r||h.selected&&u)&&(o({nodes:[h],edges:[]}),requestAnimationFrame(()=>{var m;return(m=l==null?void 0:l.current)==null?void 0:m.blur()})):a([e])}function JS({nodeRef:e,disabled:n=!1,noDragClassName:r,handleSelector:l,nodeId:a,isSelectable:o,nodeClickDistance:u}){const c=mt(),[d,h]=V.useState(!1),m=V.useRef();return V.useEffect(()=>{m.current=Ej({getStoreItems:()=>c.getState(),onNodeMouseDown:p=>{em({id:p,store:c,nodeRef:e})},onDragStart:()=>{h(!0)},onDragStop:()=>{h(!1)}})},[]),V.useEffect(()=>{if(!(n||!e.current||!m.current))return m.current.update({noDragClassName:r,handleSelector:l,domNode:e.current,isSelectable:o,nodeId:a,nodeClickDistance:u}),()=>{var p;(p=m.current)==null||p.destroy()}},[r,l,n,o,e,a,u]),d}const qz=e=>n=>n.selected&&(n.draggable||e&&typeof n.draggable>"u");function WS(){const e=mt();return V.useCallback(r=>{const{nodeExtent:l,snapToGrid:a,snapGrid:o,nodesDraggable:u,onError:c,updateNodePositions:d,nodeLookup:h,nodeOrigin:m}=e.getState(),p=new Map,x=qz(u),v=a?o[0]:5,w=a?o[1]:5,E=r.direction.x*v*r.factor,S=r.direction.y*w*r.factor;for(const[,_]of h){if(!x(_))continue;let T={x:_.internals.positionAbsolute.x+E,y:_.internals.positionAbsolute.y+S};a&&(T=ts(T,o));const{position:k,positionAbsolute:A}=vS({nodeId:_.id,nextPosition:T,nodeLookup:h,nodeExtent:l,nodeOrigin:m,onError:c});_.position=k,_.internals.positionAbsolute=A,p.set(_.id,_)}d(p)},[])}const Hm=V.createContext(null),Uz=Hm.Provider;Hm.Consumer;const e_=()=>V.useContext(Hm),Pz=e=>({connectOnClick:e.connectOnClick,noPanClassName:e.noPanClassName,rfId:e.rfId}),Vz=(e,n,r)=>l=>{const{connectionClickStartHandle:a,connectionMode:o,connection:u}=l,{fromHandle:c,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)===r;return{connectingFrom:(c==null?void 0:c.nodeId)===e&&(c==null?void 0:c.id)===n&&(c==null?void 0:c.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:o===fa.Strict?(c==null?void 0:c.type)!==r:e!==(c==null?void 0:c.nodeId)||n!==(c==null?void 0:c.id),connectionInProcess:!!c,clickConnectionInProcess:!!a,valid:m&&h}};function $z({type:e="source",position:n=ve.Top,isValidConnection:r,isConnectable:l=!0,isConnectableStart:a=!0,isConnectableEnd:o=!0,id:u,onConnect:c,children:d,className:h,onMouseDown:m,onTouchStart:p,...x},v){var F,z;const w=u||null,E=e==="target",S=mt(),_=e_(),{connectOnClick:T,noPanClassName:k,rfId:A}=Ye(Pz,pt),{connectingFrom:q,connectingTo:j,clickConnecting:L,isPossibleEndHandle:O,connectionInProcess:P,clickConnectionInProcess:R,valid:H}=Ye(Vz(_,w,e),pt);_||(z=(F=S.getState()).onError)==null||z.call(F,"010",lr.error010());const U=G=>{const{defaultEdgeOptions:Q,onConnect:K,hasDefaultEdges:M}=S.getState(),I={...Q,...G};if(M){const{edges:Y,setEdges:N}=S.getState();N(uj(I,Y))}K==null||K(I),c==null||c(I)},ee=G=>{if(!_)return;const Q=CS(G.nativeEvent);if(a&&(Q&&G.button===0||!Q)){const K=S.getState();Wp.onPointerDown(G.nativeEvent,{handleDomNode:G.currentTarget,autoPanOnConnect:K.autoPanOnConnect,connectionMode:K.connectionMode,connectionRadius:K.connectionRadius,domNode:K.domNode,nodeLookup:K.nodeLookup,lib:K.lib,isTarget:E,handleId:w,nodeId:_,flowId:K.rfId,panBy:K.panBy,cancelConnection:K.cancelConnection,onConnectStart:K.onConnectStart,onConnectEnd:(...M)=>{var I,Y;return(Y=(I=S.getState()).onConnectEnd)==null?void 0:Y.call(I,...M)},updateConnection:K.updateConnection,onConnect:U,isValidConnection:r||((...M)=>{var I,Y;return((Y=(I=S.getState()).isValidConnection)==null?void 0:Y.call(I,...M))??!0}),getTransform:()=>S.getState().transform,getFromHandle:()=>S.getState().connection.fromHandle,autoPanSpeed:K.autoPanSpeed,dragThreshold:K.connectionDragThreshold})}Q?m==null||m(G):p==null||p(G)},B=G=>{const{onClickConnectStart:Q,onClickConnectEnd:K,connectionClickStartHandle:M,connectionMode:I,isValidConnection:Y,lib:N,rfId:$,nodeLookup:X,connection:J}=S.getState();if(!_||!M&&!a)return;if(!M){Q==null||Q(G.nativeEvent,{nodeId:_,handleId:w,handleType:e}),S.setState({connectionClickStartHandle:{nodeId:_,type:e,id:w}});return}const ne=ES(G.target),re=r||Y,{connection:se,isValid:xe}=Wp.isValid(G.nativeEvent,{handle:{nodeId:_,id:w,type:e},connectionMode:I,fromNodeId:M.nodeId,fromHandleId:M.id||null,fromType:M.type,isValidConnection:re,flowId:$,doc:ne,lib:N,nodeLookup:X});xe&&se&&U(se);const be=structuredClone(J);delete be.inProgress,be.toPosition=be.toHandle?be.toHandle.position:null,K==null||K(G,be),S.setState({connectionClickStartHandle:null})};return b.jsx("div",{"data-handleid":w,"data-nodeid":_,"data-handlepos":n,"data-id":`${A}-${_}-${w}-${e}`,className:jt(["react-flow__handle",`react-flow__handle-${n}`,"nodrag",k,h,{source:!E,target:E,connectable:l,connectablestart:a,connectableend:o,clickconnecting:L,connectingfrom:q,connectingto:j,valid:H,connectionindicator:l&&(!P||O)&&(P||R?o:a)}]),onMouseDown:ee,onTouchStart:ee,onClick:T?B:void 0,ref:v,...x,children:d})}const Lt=V.memo(ZS($z));function Gz({data:e,isConnectable:n,sourcePosition:r=ve.Bottom}){return b.jsxs(b.Fragment,{children:[e==null?void 0:e.label,b.jsx(Lt,{type:"source",position:r,isConnectable:n})]})}function Fz({data:e,isConnectable:n,targetPosition:r=ve.Top,sourcePosition:l=ve.Bottom}){return b.jsxs(b.Fragment,{children:[b.jsx(Lt,{type:"target",position:r,isConnectable:n}),e==null?void 0:e.label,b.jsx(Lt,{type:"source",position:l,isConnectable:n})]})}function Yz(){return null}function Xz({data:e,isConnectable:n,targetPosition:r=ve.Top}){return b.jsxs(b.Fragment,{children:[b.jsx(Lt,{type:"target",position:r,isConnectable:n}),e==null?void 0:e.label]})}const gc={ArrowUp:{x:0,y:-1},ArrowDown:{x:0,y:1},ArrowLeft:{x:-1,y:0},ArrowRight:{x:1,y:0}},ab={input:Gz,default:Fz,output:Xz,group:Yz};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}=es(e.nodeLookup,{filter:o=>!!o.selected});return{width:Vn(n)?n:null,height:Vn(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=mt(),{width:a,height:o,transformString:u,userSelectionActive:c}=Ye(Zz,pt),d=WS(),h=V.useRef(null);V.useEffect(()=>{var v;r||(v=h.current)==null||v.focus({preventScroll:!0})},[r]);const m=!c&&a!==null&&o!==null;if(JS({nodeRef:h,disabled:!m}),!m)return null;const p=e?v=>{const w=l.getState().nodes.filter(E=>E.selected);e(v,w)}:void 0,x=v=>{Object.prototype.hasOwnProperty.call(gc,v.key)&&(v.preventDefault(),d({direction:gc[v.key],factor:v.shiftKey?4:1}))};return b.jsx("div",{className:jt(["react-flow__nodesselection","react-flow__container",n]),style:{transform:u},children:b.jsx("div",{ref:h,className:"react-flow__nodesselection-rect",onContextMenu:p,tabIndex:r?void 0:-1,onKeyDown:r?void 0:x,style:{width:a,height:o}})})}const ob=typeof window<"u"?window:void 0,Jz=e=>({nodesSelectionActive:e.nodesSelectionActive,userSelectionActive:e.userSelectionActive});function t_({children:e,onPaneClick:n,onPaneMouseEnter:r,onPaneMouseMove:l,onPaneMouseLeave:a,onPaneContextMenu:o,onPaneScroll:u,paneClickDistance:c,deleteKeyCode:d,selectionKeyCode:h,selectionOnDrag:m,selectionMode:p,onSelectionStart:x,onSelectionEnd:v,multiSelectionKeyCode:w,panActivationKeyCode:E,zoomActivationKeyCode:S,elementsSelectable:_,zoomOnScroll:T,zoomOnPinch:k,panOnScroll:A,panOnScrollSpeed:q,panOnScrollMode:j,zoomOnDoubleClick:L,panOnDrag:O,defaultViewport:P,translateExtent:R,minZoom:H,maxZoom:U,preventScrolling:ee,onSelectionContextMenu:B,noWheelClassName:F,noPanClassName:z,disableKeyboardA11y:G,onViewportChange:Q,isControlledViewport:K}){const{nodesSelectionActive:M,userSelectionActive:I}=Ye(Jz,pt),Y=Fo(h,{target:ob}),N=Fo(E,{target:ob}),$=N||O,X=N||A,J=m&&$!==!0,ne=Y||I||J;return Mz({deleteKeyCode:d,multiSelectionKeyCode:w}),b.jsx(Oz,{onPaneContextMenu:o,elementsSelectable:_,zoomOnScroll:T,zoomOnPinch:k,panOnScroll:X,panOnScrollSpeed:q,panOnScrollMode:j,zoomOnDoubleClick:L,panOnDrag:!Y&&$,defaultViewport:P,translateExtent:R,minZoom:H,maxZoom:U,zoomActivationKeyCode:S,preventScrolling:ee,noWheelClassName:F,noPanClassName:z,onViewportChange:Q,isControlledViewport:K,paneClickDistance:c,selectionOnDrag:J,children:b.jsxs(Iz,{onSelectionStart:x,onSelectionEnd:v,onPaneClick:n,onPaneMouseEnter:r,onPaneMouseMove:l,onPaneMouseLeave:a,onPaneContextMenu:o,onPaneScroll:u,panOnDrag:$,isSelecting:!!ne,selectionMode:p,selectionKeyPressed:Y,paneClickDistance:c,selectionOnDrag:J,children:[e,M&&b.jsx(Kz,{onSelectionContextMenu:B,noPanClassName:z,disableKeyboardA11y:G})]})})}t_.displayName="FlowRenderer";const Wz=V.memo(t_),eM=e=>n=>e?Tm(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 Ye(V.useCallback(eM(e),[e]),pt)}const nM=e=>e.updateNodeInternals;function rM(){const e=Ye(nM),[n]=V.useState(()=>typeof ResizeObserver>"u"?null:new ResizeObserver(r=>{const l=new Map;r.forEach(a=>{const o=a.target.getAttribute("data-id");l.set(o,{id:o,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=mt(),o=V.useRef(null),u=V.useRef(null),c=V.useRef(e.sourcePosition),d=V.useRef(e.targetPosition),h=V.useRef(n),m=r&&!!e.internals.handleBounds;return V.useEffect(()=>{o.current&&!e.hidden&&(!m||u.current!==o.current)&&(u.current&&(l==null||l.unobserve(u.current)),l==null||l.observe(o.current),u.current=o.current)},[m,e.hidden]),V.useEffect(()=>()=>{u.current&&(l==null||l.unobserve(u.current),u.current=null)},[]),V.useEffect(()=>{if(o.current){const p=h.current!==n,x=c.current!==e.sourcePosition,v=d.current!==e.targetPosition;(p||x||v)&&(h.current=n,c.current=e.sourcePosition,d.current=e.targetPosition,a.getState().updateNodeInternals(new Map([[e.id,{id:e.id,nodeElement:o.current,force:!0}]])))}},[e.id,n,e.sourcePosition,e.targetPosition]),o}function lM({id:e,onClick:n,onMouseEnter:r,onMouseMove:l,onMouseLeave:a,onContextMenu:o,onDoubleClick:u,nodesDraggable:c,elementsSelectable:d,nodesConnectable:h,nodesFocusable:m,resizeObserver:p,noDragClassName:x,noPanClassName:v,disableKeyboardA11y:w,rfId:E,nodeTypes:S,nodeClickDistance:_,onError:T}){const{node:k,internals:A,isParent:q}=Ye(re=>{const se=re.nodeLookup.get(e),xe=re.parentLookup.has(e);return{node:se,internals:se.internals,isParent:xe}},pt);let j=k.type||"default",L=(S==null?void 0:S[j])||ab[j];L===void 0&&(T==null||T("003",lr.error003(j)),j="default",L=(S==null?void 0:S.default)||ab.default);const O=!!(k.draggable||c&&typeof k.draggable>"u"),P=!!(k.selectable||d&&typeof k.selectable>"u"),R=!!(k.connectable||h&&typeof k.connectable>"u"),H=!!(k.focusable||m&&typeof k.focusable>"u"),U=mt(),ee=_S(k),B=iM({node:k,nodeType:j,hasDimensions:ee,resizeObserver:p}),F=JS({nodeRef:B,disabled:k.hidden||!O,noDragClassName:x,handleSelector:k.dragHandle,nodeId:e,isSelectable:P,nodeClickDistance:_}),z=WS();if(k.hidden)return null;const G=Or(k),Q=Qz(k),K=P||O||n||r||l||a,M=r?re=>r(re,{...A.userNode}):void 0,I=l?re=>l(re,{...A.userNode}):void 0,Y=a?re=>a(re,{...A.userNode}):void 0,N=o?re=>o(re,{...A.userNode}):void 0,$=u?re=>u(re,{...A.userNode}):void 0,X=re=>{const{selectNodesOnDrag:se,nodeDragThreshold:xe}=U.getState();P&&(!se||!O||xe>0)&&em({id:e,store:U,nodeRef:B}),n&&n(re,{...A.userNode})},J=re=>{if(!(NS(re.nativeEvent)||w)){if(pS.includes(re.key)&&P){const se=re.key==="Escape";em({id:e,store:U,unselect:se,nodeRef:B})}else if(O&&k.selected&&Object.prototype.hasOwnProperty.call(gc,re.key)){re.preventDefault();const{ariaLabelConfig:se}=U.getState();U.setState({ariaLiveMessage:se["node.a11yDescription.ariaLiveMessage"]({direction:re.key.replace("Arrow","").toLowerCase(),x:~~A.positionAbsolute.x,y:~~A.positionAbsolute.y})}),z({direction:gc[re.key],factor:re.shiftKey?4:1})}}},ne=()=>{var _e;if(w||!((_e=B.current)!=null&&_e.matches(":focus-visible")))return;const{transform:re,width:se,height:xe,autoPanOnNodeFocus:be,setCenter:ye}=U.getState();if(!be)return;Tm(new Map([[e,k]]),{x:0,y:0,width:se,height:xe},re,!0).length>0||ye(k.position.x+G.width/2,k.position.y+G.height/2,{zoom:re[2]})};return b.jsx("div",{className:jt(["react-flow__node",`react-flow__node-${j}`,{[v]:O},k.className,{selected:k.selected,selectable:P,parent:q,draggable:O,dragging:F}]),ref:B,style:{zIndex:A.z,transform:`translate(${A.positionAbsolute.x}px,${A.positionAbsolute.y}px)`,pointerEvents:K?"all":"none",visibility:ee?"visible":"hidden",...k.style,...Q},"data-id":e,"data-testid":`rf__node-${e}`,onMouseEnter:M,onMouseMove:I,onMouseLeave:Y,onContextMenu:N,onClick:X,onDoubleClick:$,onKeyDown:H?J:void 0,tabIndex:H?0:void 0,onFocus:H?ne:void 0,role:k.ariaRole??(H?"group":void 0),"aria-roledescription":"node","aria-describedby":w?void 0:`${$S}-${E}`,"aria-label":k.ariaLabel,...k.domAttributes,children:b.jsx(Uz,{value:e,children:b.jsx(L,{id:e,data:k.data,type:j,positionAbsoluteX:A.positionAbsolute.x,positionAbsoluteY:A.positionAbsolute.y,selected:k.selected??!1,selectable:P,draggable:O,deletable:k.deletable??!0,isConnectable:R,sourcePosition:k.sourcePosition,targetPosition:k.targetPosition,dragging:F,dragHandle:k.dragHandle,zIndex:A.z,parentId:k.parentId,...G})})})}var aM=V.memo(lM);const oM=e=>({nodesDraggable:e.nodesDraggable,nodesConnectable:e.nodesConnectable,nodesFocusable:e.nodesFocusable,elementsSelectable:e.elementsSelectable,onError:e.onError});function n_(e){const{nodesDraggable:n,nodesConnectable:r,nodesFocusable:l,elementsSelectable:a,onError:o}=Ye(oM,pt),u=tM(e.onlyRenderVisibleElements),c=rM();return b.jsx("div",{className:"react-flow__nodes",style:Lc,children:u.map(d=>b.jsx(aM,{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:c,nodesDraggable:n,nodesConnectable:r,nodesFocusable:l,elementsSelectable:a,nodeClickDistance:e.nodeClickDistance,onError:o},d))})}n_.displayName="NodeRenderer";const sM=V.memo(n_);function uM(e){return Ye(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 o=r.nodeLookup.get(a.source),u=r.nodeLookup.get(a.target);o&&u&&aj({sourceNode:o,targetNode:u,width:r.width,height:r.height,transform:r.transform})&&l.push(a.id)}return l},[e]),pt)}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"})},sb={[hc.Arrow]:cM,[hc.ArrowClosed]:fM};function dM(e){const n=mt();return V.useMemo(()=>{var a,o;return Object.prototype.hasOwnProperty.call(sb,e)?sb[e]:((o=(a=n.getState()).onError)==null||o.call(a,"009",lr.error009(e)),null)},[e])}const hM=({id:e,type:n,color:r,width:l=12.5,height:a=12.5,markerUnits:o="strokeWidth",strokeWidth:u,orient:c="auto-start-reverse"})=>{const d=dM(n);return d?b.jsx("marker",{className:"react-flow__arrowhead",id:e,markerWidth:`${l}`,markerHeight:`${a}`,viewBox:"-10 -10 20 20",markerUnits:o,orient:c,refX:"0",refY:"0",children:b.jsx(d,{color:r,strokeWidth:u})}):null},r_=({defaultColor:e,rfId:n})=>{const r=Ye(o=>o.edges),l=Ye(o=>o.defaultEdgeOptions),a=V.useMemo(()=>pj(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(o=>b.jsx(hM,{id:o.id,type:o.type,color:o.color,width:o.width,height:o.height,markerUnits:o.markerUnits,strokeWidth:o.strokeWidth,orient:o.orient},o.id))})}):null};r_.displayName="MarkerDefinitions";var pM=V.memo(r_);function i_({x:e,y:n,label:r,labelStyle:l,labelShowBg:a=!0,labelBgStyle:o,labelBgPadding:u=[2,4],labelBgBorderRadius:c=2,children:d,className:h,...m}){const[p,x]=V.useState({x:1,y:0,width:0,height:0}),v=jt(["react-flow__edge-textwrapper",h]),w=V.useRef(null);return V.useEffect(()=>{if(w.current){const E=w.current.getBBox();x({x:E.x,y:E.y,width:E.width,height:E.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:o,rx:c,ry:c}),b.jsx("text",{className:"react-flow__edge-text",y:p.height/2,dy:"0.3em",ref:w,style:l,children:r}),d]}):null}i_.displayName="EdgeText";const mM=V.memo(i_);function rs({path:e,labelX:n,labelY:r,label:l,labelStyle:a,labelShowBg:o,labelBgStyle:u,labelBgPadding:c,labelBgBorderRadius:d,interactionWidth:h=20,...m}){return b.jsxs(b.Fragment,{children:[b.jsx("path",{...m,d:e,fill:"none",className:jt(["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&&Vn(n)&&Vn(r)?b.jsx(mM,{x:n,y:r,label:l,labelStyle:a,labelShowBg:o,labelBgStyle:u,labelBgPadding:c,labelBgBorderRadius:d}):null]})}function ub({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 l_({sourceX:e,sourceY:n,sourcePosition:r=ve.Bottom,targetX:l,targetY:a,targetPosition:o=ve.Top}){const[u,c]=ub({pos:r,x1:e,y1:n,x2:l,y2:a}),[d,h]=ub({pos:o,x1:l,y1:a,x2:e,y2:n}),[m,p,x,v]=TS({sourceX:e,sourceY:n,targetX:l,targetY:a,sourceControlX:u,sourceControlY:c,targetControlX:d,targetControlY:h});return[`M${e},${n} C${u},${c} ${d},${h} ${l},${a}`,m,p,x,v]}function a_(e){return V.memo(({id:n,sourceX:r,sourceY:l,targetX:a,targetY:o,sourcePosition:u,targetPosition:c,label:d,labelStyle:h,labelShowBg:m,labelBgStyle:p,labelBgPadding:x,labelBgBorderRadius:v,style:w,markerEnd:E,markerStart:S,interactionWidth:_})=>{const[T,k,A]=l_({sourceX:r,sourceY:l,sourcePosition:u,targetX:a,targetY:o,targetPosition:c}),q=e.isInternal?void 0:n;return b.jsx(rs,{id:q,path:T,labelX:k,labelY:A,label:d,labelStyle:h,labelShowBg:m,labelBgStyle:p,labelBgPadding:x,labelBgBorderRadius:v,style:w,markerEnd:E,markerStart:S,interactionWidth:_})})}const gM=a_({isInternal:!1}),o_=a_({isInternal:!0});gM.displayName="SimpleBezierEdge";o_.displayName="SimpleBezierEdgeInternal";function s_(e){return V.memo(({id:n,sourceX:r,sourceY:l,targetX:a,targetY:o,label:u,labelStyle:c,labelShowBg:d,labelBgStyle:h,labelBgPadding:m,labelBgBorderRadius:p,style:x,sourcePosition:v=ve.Bottom,targetPosition:w=ve.Top,markerEnd:E,markerStart:S,pathOptions:_,interactionWidth:T})=>{const[k,A,q]=Zp({sourceX:r,sourceY:l,sourcePosition:v,targetX:a,targetY:o,targetPosition:w,borderRadius:_==null?void 0:_.borderRadius,offset:_==null?void 0:_.offset,stepPosition:_==null?void 0:_.stepPosition}),j=e.isInternal?void 0:n;return b.jsx(rs,{id:j,path:k,labelX:A,labelY:q,label:u,labelStyle:c,labelShowBg:d,labelBgStyle:h,labelBgPadding:m,labelBgBorderRadius:p,style:x,markerEnd:E,markerStart:S,interactionWidth:T})})}const u_=s_({isInternal:!1}),c_=s_({isInternal:!0});u_.displayName="SmoothStepEdge";c_.displayName="SmoothStepEdgeInternal";function f_(e){return V.memo(({id:n,...r})=>{var a;const l=e.isInternal?void 0:n;return b.jsx(u_,{...r,id:l,pathOptions:V.useMemo(()=>{var o;return{borderRadius:0,offset:(o=r.pathOptions)==null?void 0:o.offset}},[(a=r.pathOptions)==null?void 0:a.offset])})})}const xM=f_({isInternal:!1}),d_=f_({isInternal:!0});xM.displayName="StepEdge";d_.displayName="StepEdgeInternal";function h_(e){return V.memo(({id:n,sourceX:r,sourceY:l,targetX:a,targetY:o,label:u,labelStyle:c,labelShowBg:d,labelBgStyle:h,labelBgPadding:m,labelBgBorderRadius:p,style:x,markerEnd:v,markerStart:w,interactionWidth:E})=>{const[S,_,T]=jS({sourceX:r,sourceY:l,targetX:a,targetY:o}),k=e.isInternal?void 0:n;return b.jsx(rs,{id:k,path:S,labelX:_,labelY:T,label:u,labelStyle:c,labelShowBg:d,labelBgStyle:h,labelBgPadding:m,labelBgBorderRadius:p,style:x,markerEnd:v,markerStart:w,interactionWidth:E})})}const yM=h_({isInternal:!1}),p_=h_({isInternal:!0});yM.displayName="StraightEdge";p_.displayName="StraightEdgeInternal";function m_(e){return V.memo(({id:n,sourceX:r,sourceY:l,targetX:a,targetY:o,sourcePosition:u=ve.Bottom,targetPosition:c=ve.Top,label:d,labelStyle:h,labelShowBg:m,labelBgStyle:p,labelBgPadding:x,labelBgBorderRadius:v,style:w,markerEnd:E,markerStart:S,pathOptions:_,interactionWidth:T})=>{const[k,A,q]=zm({sourceX:r,sourceY:l,sourcePosition:u,targetX:a,targetY:o,targetPosition:c,curvature:_==null?void 0:_.curvature}),j=e.isInternal?void 0:n;return b.jsx(rs,{id:j,path:k,labelX:A,labelY:q,label:d,labelStyle:h,labelShowBg:m,labelBgStyle:p,labelBgPadding:x,labelBgBorderRadius:v,style:w,markerEnd:E,markerStart:S,interactionWidth:T})})}const vM=m_({isInternal:!1}),g_=m_({isInternal:!0});vM.displayName="BezierEdge";g_.displayName="BezierEdgeInternal";const cb={default:g_,straight:p_,step:d_,smoothstep:c_,simplebezier:o_},fb={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,db="react-flow__edgeupdater";function hb({position:e,centerX:n,centerY:r,radius:l=10,onMouseDown:a,onMouseEnter:o,onMouseOut:u,type:c}){return b.jsx("circle",{onMouseDown:a,onMouseEnter:o,onMouseOut:u,className:jt([db,`${db}-${c}`]),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:o,targetY:u,sourcePosition:c,targetPosition:d,onReconnect:h,onReconnectStart:m,onReconnectEnd:p,setReconnecting:x,setUpdateHover:v}){const w=mt(),E=(A,q)=>{if(A.button!==0)return;const{autoPanOnConnect:j,domNode:L,connectionMode:O,connectionRadius:P,lib:R,onConnectStart:H,cancelConnection:U,nodeLookup:ee,rfId:B,panBy:F,updateConnection:z}=w.getState(),G=q.type==="target",Q=(I,Y)=>{x(!1),p==null||p(I,r,q.type,Y)},K=I=>h==null?void 0:h(r,I),M=(I,Y)=>{x(!0),m==null||m(A,r,q.type),H==null||H(I,Y)};Wp.onPointerDown(A.nativeEvent,{autoPanOnConnect:j,connectionMode:O,connectionRadius:P,domNode:L,handleId:q.id,nodeId:q.nodeId,nodeLookup:ee,isTarget:G,edgeUpdaterType:q.type,lib:R,flowId:B,cancelConnection:U,panBy:F,isValidConnection:(...I)=>{var Y,N;return((N=(Y=w.getState()).isValidConnection)==null?void 0:N.call(Y,...I))??!0},onConnect:K,onConnectStart:M,onConnectEnd:(...I)=>{var Y,N;return(N=(Y=w.getState()).onConnectEnd)==null?void 0:N.call(Y,...I)},onReconnectEnd:Q,updateConnection:z,getTransform:()=>w.getState().transform,getFromHandle:()=>w.getState().connection.fromHandle,dragThreshold:w.getState().connectionDragThreshold,handleDomNode:A.currentTarget})},S=A=>E(A,{nodeId:r.target,id:r.targetHandle??null,type:"target"}),_=A=>E(A,{nodeId:r.source,id:r.sourceHandle??null,type:"source"}),T=()=>v(!0),k=()=>v(!1);return b.jsxs(b.Fragment,{children:[(e===!0||e==="source")&&b.jsx(hb,{position:c,centerX:l,centerY:a,radius:n,onMouseDown:S,onMouseEnter:T,onMouseOut:k,type:"source"}),(e===!0||e==="target")&&b.jsx(hb,{position:d,centerX:o,centerY:u,radius:n,onMouseDown:_,onMouseEnter:T,onMouseOut:k,type:"target"})]})}function _M({id:e,edgesFocusable:n,edgesReconnectable:r,elementsSelectable:l,onClick:a,onDoubleClick:o,onContextMenu:u,onMouseEnter:c,onMouseMove:d,onMouseLeave:h,reconnectRadius:m,onReconnect:p,onReconnectStart:x,onReconnectEnd:v,rfId:w,edgeTypes:E,noPanClassName:S,onError:_,disableKeyboardA11y:T}){let k=Ye(ye=>ye.edgeLookup.get(e));const A=Ye(ye=>ye.defaultEdgeOptions);k=A?{...A,...k}:k;let q=k.type||"default",j=(E==null?void 0:E[q])||cb[q];j===void 0&&(_==null||_("011",lr.error011(q)),q="default",j=(E==null?void 0:E.default)||cb.default);const L=!!(k.focusable||n&&typeof k.focusable>"u"),O=typeof p<"u"&&(k.reconnectable||r&&typeof k.reconnectable>"u"),P=!!(k.selectable||l&&typeof k.selectable>"u"),R=V.useRef(null),[H,U]=V.useState(!1),[ee,B]=V.useState(!1),F=mt(),{zIndex:z,sourceX:G,sourceY:Q,targetX:K,targetY:M,sourcePosition:I,targetPosition:Y}=Ye(V.useCallback(ye=>{const pe=ye.nodeLookup.get(k.source),_e=ye.nodeLookup.get(k.target);if(!pe||!_e)return{zIndex:k.zIndex,...fb};const ze=hj({id:e,sourceNode:pe,targetNode:_e,sourceHandle:k.sourceHandle||null,targetHandle:k.targetHandle||null,connectionMode:ye.connectionMode,onError:_});return{zIndex:lj({selected:k.selected,zIndex:k.zIndex,sourceNode:pe,targetNode:_e,elevateOnSelect:ye.elevateEdgesOnSelect,zIndexMode:ye.zIndexMode}),...ze||fb}},[k.source,k.target,k.sourceHandle,k.targetHandle,k.selected,k.zIndex]),pt),N=V.useMemo(()=>k.markerStart?`url('#${Kp(k.markerStart,w)}')`:void 0,[k.markerStart,w]),$=V.useMemo(()=>k.markerEnd?`url('#${Kp(k.markerEnd,w)}')`:void 0,[k.markerEnd,w]);if(k.hidden||G===null||Q===null||K===null||M===null)return null;const X=ye=>{var Te;const{addSelectedEdges:pe,unselectNodesAndEdges:_e,multiSelectionActive:ze}=F.getState();P&&(F.setState({nodesSelectionActive:!1}),k.selected&&ze?(_e({nodes:[],edges:[k]}),(Te=R.current)==null||Te.blur()):pe([e])),a&&a(ye,k)},J=o?ye=>{o(ye,{...k})}:void 0,ne=u?ye=>{u(ye,{...k})}:void 0,re=c?ye=>{c(ye,{...k})}:void 0,se=d?ye=>{d(ye,{...k})}:void 0,xe=h?ye=>{h(ye,{...k})}:void 0,be=ye=>{var pe;if(!T&&pS.includes(ye.key)&&P){const{unselectNodesAndEdges:_e,addSelectedEdges:ze}=F.getState();ye.key==="Escape"?((pe=R.current)==null||pe.blur(),_e({edges:[k]})):ze([e])}};return b.jsx("svg",{style:{zIndex:z},children:b.jsxs("g",{className:jt(["react-flow__edge",`react-flow__edge-${q}`,k.className,S,{selected:k.selected,animated:k.animated,inactive:!P&&!a,updating:H,selectable:P}]),onClick:X,onDoubleClick:J,onContextMenu:ne,onMouseEnter:re,onMouseMove:se,onMouseLeave:xe,onKeyDown:L?be:void 0,tabIndex:L?0:void 0,role:k.ariaRole??(L?"group":"img"),"aria-roledescription":"edge","data-id":e,"data-testid":`rf__edge-${e}`,"aria-label":k.ariaLabel===null?void 0:k.ariaLabel||`Edge from ${k.source} to ${k.target}`,"aria-describedby":L?`${GS}-${w}`:void 0,ref:R,...k.domAttributes,children:[!ee&&b.jsx(j,{id:e,source:k.source,target:k.target,type:k.type,selected:k.selected,animated:k.animated,selectable:P,deletable:k.deletable??!0,label:k.label,labelStyle:k.labelStyle,labelShowBg:k.labelShowBg,labelBgStyle:k.labelBgStyle,labelBgPadding:k.labelBgPadding,labelBgBorderRadius:k.labelBgBorderRadius,sourceX:G,sourceY:Q,targetX:K,targetY:M,sourcePosition:I,targetPosition:Y,data:k.data,style:k.style,sourceHandleId:k.sourceHandle,targetHandleId:k.targetHandle,markerStart:N,markerEnd:$,pathOptions:"pathOptions"in k?k.pathOptions:void 0,interactionWidth:k.interactionWidth}),O&&b.jsx(SM,{edge:k,isReconnectable:O,reconnectRadius:m,onReconnect:p,onReconnectStart:x,onReconnectEnd:v,sourceX:G,sourceY:Q,targetX:K,targetY:M,sourcePosition:I,targetPosition:Y,setUpdateHover:U,setReconnecting:B})]})})}var kM=V.memo(_M);const EM=e=>({edgesFocusable:e.edgesFocusable,edgesReconnectable:e.edgesReconnectable,elementsSelectable:e.elementsSelectable,connectionMode:e.connectionMode,onError:e.onError});function x_({defaultMarkerColor:e,onlyRenderVisibleElements:n,rfId:r,edgeTypes:l,noPanClassName:a,onReconnect:o,onEdgeContextMenu:u,onEdgeMouseEnter:c,onEdgeMouseMove:d,onEdgeMouseLeave:h,onEdgeClick:m,reconnectRadius:p,onEdgeDoubleClick:x,onReconnectStart:v,onReconnectEnd:w,disableKeyboardA11y:E}){const{edgesFocusable:S,edgesReconnectable:_,elementsSelectable:T,onError:k}=Ye(EM,pt),A=uM(n);return b.jsxs("div",{className:"react-flow__edges",children:[b.jsx(pM,{defaultColor:e,rfId:r}),A.map(q=>b.jsx(kM,{id:q,edgesFocusable:S,edgesReconnectable:_,elementsSelectable:T,noPanClassName:a,onReconnect:o,onContextMenu:u,onMouseEnter:c,onMouseMove:d,onMouseLeave:h,onClick:m,reconnectRadius:p,onDoubleClick:x,onReconnectStart:v,onReconnectEnd:w,rfId:r,onError:k,edgeTypes:l,disableKeyboardA11y:E},q))]})}x_.displayName="EdgeRenderer";const NM=V.memo(x_),CM=e=>`translate(${e.transform[0]}px,${e.transform[1]}px) scale(${e.transform[2]})`;function TM({children:e}){const n=Ye(CM);return b.jsx("div",{className:"react-flow__viewport xyflow__viewport react-flow__container",style:{transform:n},children:e})}function AM(e){const n=ll(),r=V.useRef(!1);V.useEffect(()=>{!r.current&&n.viewportInitialized&&e&&(setTimeout(()=>e(n),1),r.current=!0)},[e,n.viewportInitialized])}const jM=e=>{var n;return(n=e.panZoom)==null?void 0:n.syncViewport};function zM(e){const n=Ye(jM),r=mt();return V.useEffect(()=>{e&&(n==null||n(e),r.setState({transform:[e.x,e.y,e.zoom]}))},[e,n]),null}function MM(e){return e.connection.inProgress?{...e.connection,to:ns(e.connection.to,e.transform)}:{...e.connection}}function DM(e){return MM}function RM(e){const n=DM();return Ye(n,pt)}const OM=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:o,height:u,isValid:c,inProgress:d}=Ye(OM,pt);return!(o&&a&&d)?null:b.jsx("svg",{style:e,width:o,height:u,className:"react-flow__connectionline react-flow__container",children:b.jsx("g",{className:jt(["react-flow__connection",xS(c)]),children:b.jsx(y_,{style:n,type:r,CustomComponent:l,isValid:c})})})}const y_=({style:e,type:n=xi.Bezier,CustomComponent:r,isValid:l})=>{const{inProgress:a,from:o,fromNode:u,fromHandle:c,fromPosition:d,to:h,toNode:m,toHandle:p,toPosition:x,pointer:v}=RM();if(!a)return;if(r)return b.jsx(r,{connectionLineType:n,connectionLineStyle:e,fromNode:u,fromHandle:c,fromX:o.x,fromY:o.y,toX:h.x,toY:h.y,fromPosition:d,toPosition:x,connectionStatus:xS(l),toNode:m,toHandle:p,pointer:v});let w="";const E={sourceX:o.x,sourceY:o.y,sourcePosition:d,targetX:h.x,targetY:h.y,targetPosition:x};switch(n){case xi.Bezier:[w]=zm(E);break;case xi.SimpleBezier:[w]=l_(E);break;case xi.Step:[w]=Zp({...E,borderRadius:0});break;case xi.SmoothStep:[w]=Zp(E);break;default:[w]=jS(E)}return b.jsx("path",{d:w,fill:"none",className:"react-flow__connection-path",style:e})};y_.displayName="ConnectionLine";const HM={};function pb(e=HM){V.useRef(e),mt(),V.useEffect(()=>{},[e])}function BM(){mt(),V.useRef(!1),V.useEffect(()=>{},[])}function v_({nodeTypes:e,edgeTypes:n,onInit:r,onNodeClick:l,onEdgeClick:a,onNodeDoubleClick:o,onEdgeDoubleClick:u,onNodeMouseEnter:c,onNodeMouseMove:d,onNodeMouseLeave:h,onNodeContextMenu:m,onSelectionContextMenu:p,onSelectionStart:x,onSelectionEnd:v,connectionLineType:w,connectionLineStyle:E,connectionLineComponent:S,connectionLineContainerStyle:_,selectionKeyCode:T,selectionOnDrag:k,selectionMode:A,multiSelectionKeyCode:q,panActivationKeyCode:j,zoomActivationKeyCode:L,deleteKeyCode:O,onlyRenderVisibleElements:P,elementsSelectable:R,defaultViewport:H,translateExtent:U,minZoom:ee,maxZoom:B,preventScrolling:F,defaultMarkerColor:z,zoomOnScroll:G,zoomOnPinch:Q,panOnScroll:K,panOnScrollSpeed:M,panOnScrollMode:I,zoomOnDoubleClick:Y,panOnDrag:N,onPaneClick:$,onPaneMouseEnter:X,onPaneMouseMove:J,onPaneMouseLeave:ne,onPaneScroll:re,onPaneContextMenu:se,paneClickDistance:xe,nodeClickDistance:be,onEdgeContextMenu:ye,onEdgeMouseEnter:pe,onEdgeMouseMove:_e,onEdgeMouseLeave:ze,reconnectRadius:Te,onReconnect:ut,onReconnectStart:nt,onReconnectEnd:zt,noDragClassName:Vt,noWheelClassName:Ht,noPanClassName:kn,disableKeyboardA11y:Rn,nodeExtent:Mt,rfId:Hr,viewport:ue,onViewportChange:ge}){return pb(e),pb(n),BM(),AM(r),zM(ue),b.jsx(Wz,{onPaneClick:$,onPaneMouseEnter:X,onPaneMouseMove:J,onPaneMouseLeave:ne,onPaneContextMenu:se,onPaneScroll:re,paneClickDistance:xe,deleteKeyCode:O,selectionKeyCode:T,selectionOnDrag:k,selectionMode:A,onSelectionStart:x,onSelectionEnd:v,multiSelectionKeyCode:q,panActivationKeyCode:j,zoomActivationKeyCode:L,elementsSelectable:R,zoomOnScroll:G,zoomOnPinch:Q,zoomOnDoubleClick:Y,panOnScroll:K,panOnScrollSpeed:M,panOnScrollMode:I,panOnDrag:N,defaultViewport:H,translateExtent:U,minZoom:ee,maxZoom:B,onSelectionContextMenu:p,preventScrolling:F,noDragClassName:Vt,noWheelClassName:Ht,noPanClassName:kn,disableKeyboardA11y:Rn,onViewportChange:ge,isControlledViewport:!!ue,children:b.jsxs(TM,{children:[b.jsx(NM,{edgeTypes:n,onEdgeClick:a,onEdgeDoubleClick:u,onReconnect:ut,onReconnectStart:nt,onReconnectEnd:zt,onlyRenderVisibleElements:P,onEdgeContextMenu:ye,onEdgeMouseEnter:pe,onEdgeMouseMove:_e,onEdgeMouseLeave:ze,reconnectRadius:Te,defaultMarkerColor:z,noPanClassName:kn,disableKeyboardA11y:Rn,rfId:Hr}),b.jsx(LM,{style:E,type:w,component:S,containerStyle:_}),b.jsx("div",{className:"react-flow__edgelabel-renderer"}),b.jsx(sM,{nodeTypes:e,onNodeClick:l,onNodeDoubleClick:o,onNodeMouseEnter:c,onNodeMouseMove:d,onNodeMouseLeave:h,onNodeContextMenu:m,nodeClickDistance:be,onlyRenderVisibleElements:P,noPanClassName:kn,noDragClassName:Vt,disableKeyboardA11y:Rn,nodeExtent:Mt,rfId:Hr}),b.jsx("div",{className:"react-flow__viewport-portal"})]})})}v_.displayName="GraphView";const IM=V.memo(v_),mb=({nodes:e,edges:n,defaultNodes:r,defaultEdges:l,width:a,height:o,fitView:u,fitViewOptions:c,minZoom:d=.5,maxZoom:h=2,nodeOrigin:m,nodeExtent:p,zIndexMode:x="basic"}={})=>{const v=new Map,w=new Map,E=new Map,S=new Map,_=l??n??[],T=r??e??[],k=m??[0,0],A=p??Po;DS(E,S,_);const q=Jp(T,v,w,{nodeOrigin:k,nodeExtent:A,zIndexMode:x});let j=[0,0,1];if(u&&a&&o){const L=es(v,{filter:H=>!!((H.width||H.initialWidth)&&(H.height||H.initialHeight))}),{x:O,y:P,zoom:R}=Am(L,a,o,d,h,(c==null?void 0:c.padding)??.1);j=[O,P,R]}return{rfId:"1",width:a??0,height:o??0,transform:j,nodes:T,nodesInitialized:q,nodeLookup:v,parentLookup:w,edges:_,edgeLookup:S,connectionLookup:E,onNodesChange:null,onEdgesChange:null,hasDefaultNodes:r!==void 0,hasDefaultEdges:l!==void 0,panZoom:null,minZoom:d,maxZoom:h,translateExtent:Po,nodeExtent:A,nodesSelectionActive:!1,userSelectionActive:!1,userSelectionRect:null,connectionMode:fa.Strict,domNode:null,paneDragging:!1,noPanClassName:"nopan",nodeOrigin:k,nodeDragThreshold:1,connectionDragThreshold:1,snapGrid:[15,15],snapToGrid:!1,nodesDraggable:!0,nodesConnectable:!0,nodesFocusable:!0,edgesFocusable:!0,edgesReconnectable:!0,elementsSelectable:!0,elevateNodesOnSelect:!0,elevateEdgesOnSelect:!0,selectNodesOnDrag:!0,multiSelectionActive:!1,fitViewQueued:u??!1,fitViewOptions:c,fitViewResolver:null,connection:{...gS},connectionClickStartHandle:null,connectOnClick:!0,ariaLiveMessage:"",autoPanOnConnect:!0,autoPanOnNodeDrag:!0,autoPanOnNodeFocus:!0,autoPanSpeed:15,connectionRadius:20,onError:WA,isValidConnection:void 0,onSelectionChangeHandlers:[],lib:"react",debug:!1,ariaLabelConfig:mS,zIndexMode:x,onNodesChangeMiddlewareMap:new Map,onEdgesChangeMiddlewareMap:new Map}},qM=({nodes:e,edges:n,defaultNodes:r,defaultEdges:l,width:a,height:o,fitView:u,fitViewOptions:c,minZoom:d,maxZoom:h,nodeOrigin:m,nodeExtent:p,zIndexMode:x})=>rz((v,w)=>{async function E(){const{nodeLookup:S,panZoom:_,fitViewOptions:T,fitViewResolver:k,width:A,height:q,minZoom:j,maxZoom:L}=w();_&&(await KA({nodes:S,width:A,height:q,panZoom:_,minZoom:j,maxZoom:L},T),k==null||k.resolve(!0),v({fitViewResolver:null}))}return{...mb({nodes:e,edges:n,width:a,height:o,fitView:u,fitViewOptions:c,minZoom:d,maxZoom:h,nodeOrigin:m,nodeExtent:p,defaultNodes:r,defaultEdges:l,zIndexMode:x}),setNodes:S=>{const{nodeLookup:_,parentLookup:T,nodeOrigin:k,elevateNodesOnSelect:A,fitViewQueued:q,zIndexMode:j}=w(),L=Jp(S,_,T,{nodeOrigin:k,nodeExtent:p,elevateNodesOnSelect:A,checkEquality:!0,zIndexMode:j});q&&L?(E(),v({nodes:S,nodesInitialized:L,fitViewQueued:!1,fitViewOptions:void 0})):v({nodes:S,nodesInitialized:L})},setEdges:S=>{const{connectionLookup:_,edgeLookup:T}=w();DS(_,T,S),v({edges:S})},setDefaultNodesAndEdges:(S,_)=>{if(S){const{setNodes:T}=w();T(S),v({hasDefaultNodes:!0})}if(_){const{setEdges:T}=w();T(_),v({hasDefaultEdges:!0})}},updateNodeInternals:S=>{const{triggerNodeChanges:_,nodeLookup:T,parentLookup:k,domNode:A,nodeOrigin:q,nodeExtent:j,debug:L,fitViewQueued:O,zIndexMode:P}=w(),{changes:R,updatedInternals:H}=wj(S,T,k,A,q,j,P);H&&(xj(T,k,{nodeOrigin:q,nodeExtent:j,zIndexMode:P}),O?(E(),v({fitViewQueued:!1,fitViewOptions:void 0})):v({}),(R==null?void 0:R.length)>0&&(L&&console.log("React Flow: trigger node changes",R),_==null||_(R)))},updateNodePositions:(S,_=!1)=>{const T=[];let k=[];const{nodeLookup:A,triggerNodeChanges:q,connection:j,updateConnection:L,onNodesChangeMiddlewareMap:O}=w();for(const[P,R]of S){const H=A.get(P),U=!!(H!=null&&H.expandParent&&(H!=null&&H.parentId)&&(R!=null&&R.position)),ee={id:P,type:"position",position:U?{x:Math.max(0,R.position.x),y:Math.max(0,R.position.y)}:R.position,dragging:_};if(H&&j.inProgress&&j.fromNode.id===H.id){const B=tl(H,j.fromHandle,ve.Left,!0);L({...j,from:B})}U&&H.parentId&&T.push({id:P,parentId:H.parentId,rect:{...R.internals.positionAbsolute,width:R.measured.width??0,height:R.measured.height??0}}),k.push(ee)}if(T.length>0){const{parentLookup:P,nodeOrigin:R}=w(),H=Lm(T,A,P,R);k.push(...H)}for(const P of O.values())k=P(k);q(k)},triggerNodeChanges:S=>{const{onNodesChange:_,setNodes:T,nodes:k,hasDefaultNodes:A,debug:q}=w();if(S!=null&&S.length){if(A){const j=XS(S,k);T(j)}q&&console.log("React Flow: trigger node changes",S),_==null||_(S)}},triggerEdgeChanges:S=>{const{onEdgesChange:_,setEdges:T,edges:k,hasDefaultEdges:A,debug:q}=w();if(S!=null&&S.length){if(A){const j=QS(S,k);T(j)}q&&console.log("React Flow: trigger edge changes",S),_==null||_(S)}},addSelectedNodes:S=>{const{multiSelectionActive:_,edgeLookup:T,nodeLookup:k,triggerNodeChanges:A,triggerEdgeChanges:q}=w();if(_){const j=S.map(L=>$i(L,!0));A(j);return}A(ra(k,new Set([...S]),!0)),q(ra(T))},addSelectedEdges:S=>{const{multiSelectionActive:_,edgeLookup:T,nodeLookup:k,triggerNodeChanges:A,triggerEdgeChanges:q}=w();if(_){const j=S.map(L=>$i(L,!0));q(j);return}q(ra(T,new Set([...S]))),A(ra(k,new Set,!0))},unselectNodesAndEdges:({nodes:S,edges:_}={})=>{const{edges:T,nodes:k,nodeLookup:A,triggerNodeChanges:q,triggerEdgeChanges:j}=w(),L=S||k,O=_||T,P=[];for(const H of L){if(!H.selected)continue;const U=A.get(H.id);U&&(U.selected=!1),P.push($i(H.id,!1))}const R=[];for(const H of O)H.selected&&R.push($i(H.id,!1));q(P),j(R)},setMinZoom:S=>{const{panZoom:_,maxZoom:T}=w();_==null||_.setScaleExtent([S,T]),v({minZoom:S})},setMaxZoom:S=>{const{panZoom:_,minZoom:T}=w();_==null||_.setScaleExtent([T,S]),v({maxZoom:S})},setTranslateExtent:S=>{var _;(_=w().panZoom)==null||_.setTranslateExtent(S),v({translateExtent:S})},resetSelectedElements:()=>{const{edges:S,nodes:_,triggerNodeChanges:T,triggerEdgeChanges:k,elementsSelectable:A}=w();if(!A)return;const q=_.reduce((L,O)=>O.selected?[...L,$i(O.id,!1)]:L,[]),j=S.reduce((L,O)=>O.selected?[...L,$i(O.id,!1)]:L,[]);T(q),k(j)},setNodeExtent:S=>{const{nodes:_,nodeLookup:T,parentLookup:k,nodeOrigin:A,elevateNodesOnSelect:q,nodeExtent:j,zIndexMode:L}=w();S[0][0]===j[0][0]&&S[0][1]===j[0][1]&&S[1][0]===j[1][0]&&S[1][1]===j[1][1]||(Jp(_,T,k,{nodeOrigin:A,nodeExtent:S,elevateNodesOnSelect:q,checkEquality:!1,zIndexMode:L}),v({nodeExtent:S}))},panBy:S=>{const{transform:_,width:T,height:k,panZoom:A,translateExtent:q}=w();return Sj({delta:S,panZoom:A,transform:_,translateExtent:q,width:T,height:k})},setCenter:async(S,_,T)=>{const{width:k,height:A,maxZoom:q,panZoom:j}=w();if(!j)return Promise.resolve(!1);const L=typeof(T==null?void 0:T.zoom)<"u"?T.zoom:q;return await j.setViewport({x:k/2-S*L,y:A/2-_*L,zoom:L},{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:{...gS}})},updateConnection:S=>{v({connection:S})},reset:()=>v({...mb()})}},Object.is);function UM({initialNodes:e,initialEdges:n,defaultNodes:r,defaultEdges:l,initialWidth:a,initialHeight:o,initialMinZoom:u,initialMaxZoom:c,initialFitViewOptions:d,fitView:h,nodeOrigin:m,nodeExtent:p,zIndexMode:x,children:v}){const[w]=V.useState(()=>qM({nodes:e,edges:n,defaultNodes:r,defaultEdges:l,width:a,height:o,fitView:h,minZoom:u,maxZoom:c,fitViewOptions:d,nodeOrigin:m,nodeExtent:p,zIndexMode:x}));return b.jsx(lz,{value:w,children:b.jsx(Tz,{children:v})})}function PM({children:e,nodes:n,edges:r,defaultNodes:l,defaultEdges:a,width:o,height:u,fitView:c,fitViewOptions:d,minZoom:h,maxZoom:m,nodeOrigin:p,nodeExtent:x,zIndexMode:v}){return V.useContext(Rc)?b.jsx(b.Fragment,{children:e}):b.jsx(UM,{initialNodes:n,initialEdges:r,defaultNodes:l,defaultEdges:a,initialWidth:o,initialHeight:u,fitView:c,initialFitViewOptions:d,initialMinZoom:h,initialMaxZoom:m,nodeOrigin:p,nodeExtent:x,zIndexMode:v,children:e})}const VM={width:"100%",height:"100%",overflow:"hidden",position:"relative",zIndex:0};function $M({nodes:e,edges:n,defaultNodes:r,defaultEdges:l,className:a,nodeTypes:o,edgeTypes:u,onNodeClick:c,onEdgeClick:d,onInit:h,onMove:m,onMoveStart:p,onMoveEnd:x,onConnect:v,onConnectStart:w,onConnectEnd:E,onClickConnectStart:S,onClickConnectEnd:_,onNodeMouseEnter:T,onNodeMouseMove:k,onNodeMouseLeave:A,onNodeContextMenu:q,onNodeDoubleClick:j,onNodeDragStart:L,onNodeDrag:O,onNodeDragStop:P,onNodesDelete:R,onEdgesDelete:H,onDelete:U,onSelectionChange:ee,onSelectionDragStart:B,onSelectionDrag:F,onSelectionDragStop:z,onSelectionContextMenu:G,onSelectionStart:Q,onSelectionEnd:K,onBeforeDelete:M,connectionMode:I,connectionLineType:Y=xi.Bezier,connectionLineStyle:N,connectionLineComponent:$,connectionLineContainerStyle:X,deleteKeyCode:J="Backspace",selectionKeyCode:ne="Shift",selectionOnDrag:re=!1,selectionMode:se=Vo.Full,panActivationKeyCode:xe="Space",multiSelectionKeyCode:be=Go()?"Meta":"Control",zoomActivationKeyCode:ye=Go()?"Meta":"Control",snapToGrid:pe,snapGrid:_e,onlyRenderVisibleElements:ze=!1,selectNodesOnDrag:Te,nodesDraggable:ut,autoPanOnNodeFocus:nt,nodesConnectable:zt,nodesFocusable:Vt,nodeOrigin:Ht=FS,edgesFocusable:kn,edgesReconnectable:Rn,elementsSelectable:Mt=!0,defaultViewport:Hr=yz,minZoom:ue=.5,maxZoom:ge=2,translateExtent:Ne=Po,preventScrolling:Oe=!0,nodeExtent:Xe,defaultMarkerColor:Qt="#b1b1b7",zoomOnScroll:On=!0,zoomOnPinch:Bt=!0,panOnScroll:vt=!1,panOnScrollSpeed:$t=.5,panOnScrollMode:We=Zi.Free,zoomOnDoubleClick:Zn=!0,panOnDrag:fn=!0,onPaneClick:Vc,onPaneMouseEnter:ul,onPaneMouseMove:cl,onPaneMouseLeave:fl,onPaneScroll:sr,onPaneContextMenu:dl,paneClickDistance:bi=1,nodeClickDistance:$c=0,children:ss,onReconnect:ba,onReconnectStart:wi,onReconnectEnd:Gc,onEdgeContextMenu:us,onEdgeDoubleClick:cs,onEdgeMouseEnter:fs,onEdgeMouseMove:wa,onEdgeMouseLeave:Sa,reconnectRadius:ds=10,onNodesChange:hs,onEdgesChange:Kn,noDragClassName:Dt="nodrag",noWheelClassName:Gt="nowheel",noPanClassName:ur="nopan",fitView:hl,fitViewOptions:ps,connectOnClick:Fc,attributionPosition:ms,proOptions:Si,defaultEdgeOptions:_a,elevateNodesOnSelect:Br=!0,elevateEdgesOnSelect:Ir=!1,disableKeyboardA11y:qr=!1,autoPanOnConnect:Ur,autoPanOnNodeDrag:St,autoPanSpeed:gs,connectionRadius:xs,isValidConnection:cr,onError:Pr,style:Yc,id:ka,nodeDragThreshold:ys,connectionDragThreshold:Xc,viewport:pl,onViewportChange:ml,width:Ln,height:Wt,colorMode:vs="light",debug:Qc,onScroll:Vr,ariaLabelConfig:bs,zIndexMode:_i="basic",...Zc},en){const ki=ka||"1",ws=Sz(vs),Ea=V.useCallback(fr=>{fr.currentTarget.scrollTo({top:0,left:0,behavior:"instant"}),Vr==null||Vr(fr)},[Vr]);return b.jsx("div",{"data-testid":"rf__wrapper",...Zc,onScroll:Ea,style:{...Yc,...VM},ref:en,className:jt(["react-flow",a,ws]),id:ka,role:"application",children:b.jsxs(PM,{nodes:e,edges:n,width:Ln,height:Wt,fitView:hl,fitViewOptions:ps,minZoom:ue,maxZoom:ge,nodeOrigin:Ht,nodeExtent:Xe,zIndexMode:_i,children:[b.jsx(IM,{onInit:h,onNodeClick:c,onEdgeClick:d,onNodeMouseEnter:T,onNodeMouseMove:k,onNodeMouseLeave:A,onNodeContextMenu:q,onNodeDoubleClick:j,nodeTypes:o,edgeTypes:u,connectionLineType:Y,connectionLineStyle:N,connectionLineComponent:$,connectionLineContainerStyle:X,selectionKeyCode:ne,selectionOnDrag:re,selectionMode:se,deleteKeyCode:J,multiSelectionKeyCode:be,panActivationKeyCode:xe,zoomActivationKeyCode:ye,onlyRenderVisibleElements:ze,defaultViewport:Hr,translateExtent:Ne,minZoom:ue,maxZoom:ge,preventScrolling:Oe,zoomOnScroll:On,zoomOnPinch:Bt,zoomOnDoubleClick:Zn,panOnScroll:vt,panOnScrollSpeed:$t,panOnScrollMode:We,panOnDrag:fn,onPaneClick:Vc,onPaneMouseEnter:ul,onPaneMouseMove:cl,onPaneMouseLeave:fl,onPaneScroll:sr,onPaneContextMenu:dl,paneClickDistance:bi,nodeClickDistance:$c,onSelectionContextMenu:G,onSelectionStart:Q,onSelectionEnd:K,onReconnect:ba,onReconnectStart:wi,onReconnectEnd:Gc,onEdgeContextMenu:us,onEdgeDoubleClick:cs,onEdgeMouseEnter:fs,onEdgeMouseMove:wa,onEdgeMouseLeave:Sa,reconnectRadius:ds,defaultMarkerColor:Qt,noDragClassName:Dt,noWheelClassName:Gt,noPanClassName:ur,rfId:ki,disableKeyboardA11y:qr,nodeExtent:Xe,viewport:pl,onViewportChange:ml}),b.jsx(wz,{nodes:e,edges:n,defaultNodes:r,defaultEdges:l,onConnect:v,onConnectStart:w,onConnectEnd:E,onClickConnectStart:S,onClickConnectEnd:_,nodesDraggable:ut,autoPanOnNodeFocus:nt,nodesConnectable:zt,nodesFocusable:Vt,edgesFocusable:kn,edgesReconnectable:Rn,elementsSelectable:Mt,elevateNodesOnSelect:Br,elevateEdgesOnSelect:Ir,minZoom:ue,maxZoom:ge,nodeExtent:Xe,onNodesChange:hs,onEdgesChange:Kn,snapToGrid:pe,snapGrid:_e,connectionMode:I,translateExtent:Ne,connectOnClick:Fc,defaultEdgeOptions:_a,fitView:hl,fitViewOptions:ps,onNodesDelete:R,onEdgesDelete:H,onDelete:U,onNodeDragStart:L,onNodeDrag:O,onNodeDragStop:P,onSelectionDrag:F,onSelectionDragStart:B,onSelectionDragStop:z,onMove:m,onMoveStart:p,onMoveEnd:x,noPanClassName:ur,nodeOrigin:Ht,rfId:ki,autoPanOnConnect:Ur,autoPanOnNodeDrag:St,autoPanSpeed:gs,onError:Pr,connectionRadius:xs,isValidConnection:cr,selectNodesOnDrag:Te,nodeDragThreshold:ys,connectionDragThreshold:Xc,onBeforeDelete:M,debug:Qc,ariaLabelConfig:bs,zIndexMode:_i}),b.jsx(xz,{onSelectionChange:ee}),ss,b.jsx(dz,{proOptions:Si,position:ms}),b.jsx(fz,{rfId:ki,disableKeyboardA11y:qr})]})})}var GM=ZS($M);const FM=e=>{var n;return(n=e.domNode)==null?void 0:n.querySelector(".react-flow__edgelabel-renderer")};function YM({children:e}){const n=Ye(FM);return n?iz.createPortal(e,n):null}function XM(e){const[n,r]=V.useState(e),l=V.useCallback(a=>r(o=>XS(a,o)),[]);return[n,r,l]}function QM(e){const[n,r]=V.useState(e),l=V.useCallback(a=>r(o=>QS(a,o)),[]);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:jt(["react-flow__background-pattern",r,l])})}function KM({radius:e,className:n}){return b.jsx("circle",{cx:e,cy:e,r:e,className:jt(["react-flow__background-pattern","dots",n])})}var Mr;(function(e){e.Lines="lines",e.Dots="dots",e.Cross="cross"})(Mr||(Mr={}));const JM={[Mr.Dots]:1,[Mr.Lines]:1,[Mr.Cross]:6},WM=e=>({transform:e.transform,patternId:`pattern-${e.rfId}`});function b_({id:e,variant:n=Mr.Dots,gap:r=20,size:l,lineWidth:a=1,offset:o=0,color:u,bgColor:c,style:d,className:h,patternClassName:m}){const p=V.useRef(null),{transform:x,patternId:v}=Ye(WM,pt),w=l||JM[n],E=n===Mr.Dots,S=n===Mr.Cross,_=Array.isArray(r)?r:[r,r],T=[_[0]*x[2]||1,_[1]*x[2]||1],k=w*x[2],A=Array.isArray(o)?o:[o,o],q=S?[k,k]:T,j=[A[0]*x[2]||1+q[0]/2,A[1]*x[2]||1+q[1]/2],L=`${v}${e||""}`;return b.jsxs("svg",{className:jt(["react-flow__background",h]),style:{...d,...Lc,"--xy-background-color-props":c,"--xy-background-pattern-color-props":u},ref:p,"data-testid":"rf__background",children:[b.jsx("pattern",{id:L,x:x[0]%T[0],y:x[1]%T[1],width:T[0],height:T[1],patternUnits:"userSpaceOnUse",patternTransform:`translate(-${j[0]},-${j[1]})`,children:E?b.jsx(KM,{radius:k/2,className:m}):b.jsx(ZM,{dimensions:q,lineWidth:a,variant:n,className:m})}),b.jsx("rect",{x:"0",y:"0",width:"100%",height:"100%",fill:`url(#${L})`})]})}b_.displayName="Background";const e5=V.memo(b_);function t5(){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 n5(){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 r5(){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 i5(){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 l5(){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 $u({children:e,className:n,...r}){return b.jsx("button",{type:"button",className:jt(["react-flow__controls-button",n]),...r,children:e})}const a5=e=>({isInteractive:e.nodesDraggable||e.nodesConnectable||e.elementsSelectable,minZoomReached:e.transform[2]<=e.minZoom,maxZoomReached:e.transform[2]>=e.maxZoom,ariaLabelConfig:e.ariaLabelConfig});function w_({style:e,showZoom:n=!0,showFitView:r=!0,showInteractive:l=!0,fitViewOptions:a,onZoomIn:o,onZoomOut:u,onFitView:c,onInteractiveChange:d,className:h,children:m,position:p="bottom-left",orientation:x="vertical","aria-label":v}){const w=mt(),{isInteractive:E,minZoomReached:S,maxZoomReached:_,ariaLabelConfig:T}=Ye(a5,pt),{zoomIn:k,zoomOut:A,fitView:q}=ll(),j=()=>{k(),o==null||o()},L=()=>{A(),u==null||u()},O=()=>{q(a),c==null||c()},P=()=>{w.setState({nodesDraggable:!E,nodesConnectable:!E,elementsSelectable:!E}),d==null||d(!E)},R=x==="horizontal"?"horizontal":"vertical";return b.jsxs(Oc,{className:jt(["react-flow__controls",R,h]),position:p,style:e,"data-testid":"rf__controls","aria-label":v??T["controls.ariaLabel"],children:[n&&b.jsxs(b.Fragment,{children:[b.jsx($u,{onClick:j,className:"react-flow__controls-zoomin",title:T["controls.zoomIn.ariaLabel"],"aria-label":T["controls.zoomIn.ariaLabel"],disabled:_,children:b.jsx(t5,{})}),b.jsx($u,{onClick:L,className:"react-flow__controls-zoomout",title:T["controls.zoomOut.ariaLabel"],"aria-label":T["controls.zoomOut.ariaLabel"],disabled:S,children:b.jsx(n5,{})})]}),r&&b.jsx($u,{className:"react-flow__controls-fitview",onClick:O,title:T["controls.fitView.ariaLabel"],"aria-label":T["controls.fitView.ariaLabel"],children:b.jsx(r5,{})}),l&&b.jsx($u,{className:"react-flow__controls-interactive",onClick:P,title:T["controls.interactive.ariaLabel"],"aria-label":T["controls.interactive.ariaLabel"],children:E?b.jsx(l5,{}):b.jsx(i5,{})}),m]})}w_.displayName="Controls";const o5=V.memo(w_);function s5({id:e,x:n,y:r,width:l,height:a,style:o,color:u,strokeColor:c,strokeWidth:d,className:h,borderRadius:m,shapeRendering:p,selected:x,onClick:v}){const{background:w,backgroundColor:E}=o||{},S=u||w||E;return b.jsx("rect",{className:jt(["react-flow__minimap-node",{selected:x},h]),x:n,y:r,rx:m,ry:m,width:l,height:a,style:{fill:S,stroke:c,strokeWidth:d},shapeRendering:p,onClick:v?_=>v(_,e):void 0})}const u5=V.memo(s5),c5=e=>e.nodes.map(n=>n.id),Eh=e=>e instanceof Function?e:()=>e;function f5({nodeStrokeColor:e,nodeColor:n,nodeClassName:r="",nodeBorderRadius:l=5,nodeStrokeWidth:a,nodeComponent:o=u5,onClick:u}){const c=Ye(c5,pt),d=Eh(n),h=Eh(e),m=Eh(r),p=typeof window>"u"||window.chrome?"crispEdges":"geometricPrecision";return b.jsx(b.Fragment,{children:c.map(x=>b.jsx(h5,{id:x,nodeColorFunc:d,nodeStrokeColorFunc:h,nodeClassNameFunc:m,nodeBorderRadius:l,nodeStrokeWidth:a,NodeComponent:o,onClick:u,shapeRendering:p},x))})}function d5({id:e,nodeColorFunc:n,nodeStrokeColorFunc:r,nodeClassNameFunc:l,nodeBorderRadius:a,nodeStrokeWidth:o,shapeRendering:u,NodeComponent:c,onClick:d}){const{node:h,x:m,y:p,width:x,height:v}=Ye(w=>{const E=w.nodeLookup.get(e);if(!E)return{node:void 0,x:0,y:0,width:0,height:0};const S=E.internals.userNode,{x:_,y:T}=E.internals.positionAbsolute,{width:k,height:A}=Or(S);return{node:S,x:_,y:T,width:k,height:A}},pt);return!h||h.hidden||!_S(h)?null:b.jsx(c,{x:m,y:p,width:x,height:v,style:h.style,selected:!!h.selected,className:l(h),color:n(h),borderRadius:a,strokeColor:r(h),strokeWidth:o,shapeRendering:u,onClick:d,id:h.id})}const h5=V.memo(d5);var p5=V.memo(f5);const m5=200,g5=150,x5=e=>!e.hidden,y5=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?SS(es(e.nodeLookup,{filter:x5}),n):n,rfId:e.rfId,panZoom:e.panZoom,translateExtent:e.translateExtent,flowWidth:e.width,flowHeight:e.height,ariaLabelConfig:e.ariaLabelConfig}},v5="react-flow__minimap-desc";function S_({style:e,className:n,nodeStrokeColor:r,nodeColor:l,nodeClassName:a="",nodeBorderRadius:o=5,nodeStrokeWidth:u,nodeComponent:c,bgColor:d,maskColor:h,maskStrokeColor:m,maskStrokeWidth:p,position:x="bottom-right",onClick:v,onNodeClick:w,pannable:E=!1,zoomable:S=!1,ariaLabel:_,inversePan:T,zoomStep:k=1,offsetScale:A=5}){const q=mt(),j=V.useRef(null),{boundingRect:L,viewBB:O,rfId:P,panZoom:R,translateExtent:H,flowWidth:U,flowHeight:ee,ariaLabelConfig:B}=Ye(y5,pt),F=(e==null?void 0:e.width)??m5,z=(e==null?void 0:e.height)??g5,G=L.width/F,Q=L.height/z,K=Math.max(G,Q),M=K*F,I=K*z,Y=A*K,N=L.x-(M-L.width)/2-Y,$=L.y-(I-L.height)/2-Y,X=M+Y*2,J=I+Y*2,ne=`${v5}-${P}`,re=V.useRef(0),se=V.useRef();re.current=K,V.useEffect(()=>{if(j.current&&R)return se.current=zj({domNode:j.current,panZoom:R,getTransform:()=>q.getState().transform,getViewScale:()=>re.current}),()=>{var pe;(pe=se.current)==null||pe.destroy()}},[R]),V.useEffect(()=>{var pe;(pe=se.current)==null||pe.update({translateExtent:H,width:U,height:ee,inversePan:T,pannable:E,zoomStep:k,zoomable:S})},[E,S,T,k,H,U,ee]);const xe=v?pe=>{var Te;const[_e,ze]=((Te=se.current)==null?void 0:Te.pointer(pe))||[0,0];v(pe,{x:_e,y:ze})}:void 0,be=w?V.useCallback((pe,_e)=>{const ze=q.getState().nodeLookup.get(_e).internals.userNode;w(pe,ze)},[]):void 0,ye=_??B["minimap.ariaLabel"];return b.jsx(Oc,{position:x,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*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:jt(["react-flow__minimap",n]),"data-testid":"rf__minimap",children:b.jsxs("svg",{width:F,height:z,viewBox:`${N} ${$} ${X} ${J}`,className:"react-flow__minimap-svg",role:"img","aria-labelledby":ne,ref:j,onClick:xe,children:[ye&&b.jsx("title",{id:ne,children:ye}),b.jsx(p5,{onClick:be,nodeColor:l,nodeStrokeColor:r,nodeBorderRadius:o,nodeClassName:a,nodeStrokeWidth:u,nodeComponent:c}),b.jsx("path",{className:"react-flow__minimap-mask",d:`M${N-Y},${$-Y}h${X+Y*2}v${J+Y*2}h${-X-Y*2}z + M${O.x},${O.y}h${O.width}v${O.height}h${-O.width}z`,fillRule:"evenodd",pointerEvents:"none"})]})})}S_.displayName="MiniMap";const b5=V.memo(S_),w5=e=>n=>e?`${Math.max(1/n.transform[2],1)}`:void 0,S5={[ma.Line]:"right",[ma.Handle]:"bottom-right"};function _5({nodeId:e,position:n,variant:r=ma.Handle,className:l,style:a=void 0,children:o,color:u,minWidth:c=10,minHeight:d=10,maxWidth:h=Number.MAX_VALUE,maxHeight:m=Number.MAX_VALUE,keepAspectRatio:p=!1,resizeDirection:x,autoScale:v=!0,shouldResize:w,onResizeStart:E,onResize:S,onResizeEnd:_}){const T=e_(),k=typeof e=="string"?e:T,A=mt(),q=V.useRef(null),j=r===ma.Handle,L=Ye(V.useCallback(w5(j&&v),[j,v]),pt),O=V.useRef(null),P=n??S5[r];V.useEffect(()=>{if(!(!q.current||!k))return O.current||(O.current=Gj({domNode:q.current,nodeId:k,getStoreItems:()=>{const{nodeLookup:H,transform:U,snapGrid:ee,snapToGrid:B,nodeOrigin:F,domNode:z}=A.getState();return{nodeLookup:H,transform:U,snapGrid:ee,snapToGrid:B,nodeOrigin:F,paneDomNode:z}},onChange:(H,U)=>{const{triggerNodeChanges:ee,nodeLookup:B,parentLookup:F,nodeOrigin:z}=A.getState(),G=[],Q={x:H.x,y:H.y},K=B.get(k);if(K&&K.expandParent&&K.parentId){const M=K.origin??z,I=H.width??K.measured.width??0,Y=H.height??K.measured.height??0,N={id:K.id,parentId:K.parentId,rect:{width:I,height:Y,...kS({x:H.x??K.position.x,y:H.y??K.position.y},{width:I,height:Y},K.parentId,B,M)}},$=Lm([N],B,F,z);G.push(...$),Q.x=H.x?Math.max(M[0]*I,H.x):void 0,Q.y=H.y?Math.max(M[1]*Y,H.y):void 0}if(Q.x!==void 0&&Q.y!==void 0){const M={id:k,type:"position",position:{...Q}};G.push(M)}if(H.width!==void 0&&H.height!==void 0){const I={id:k,type:"dimensions",resizing:!0,setAttributes:x?x==="horizontal"?"width":"height":!0,dimensions:{width:H.width,height:H.height}};G.push(I)}for(const M of U){const I={...M,type:"position"};G.push(I)}ee(G)},onEnd:({width:H,height:U})=>{const ee={id:k,type:"dimensions",resizing:!1,dimensions:{width:H,height:U}};A.getState().triggerNodeChanges([ee])}})),O.current.update({controlPosition:P,boundaries:{minWidth:c,minHeight:d,maxWidth:h,maxHeight:m},keepAspectRatio:p,resizeDirection:x,onResizeStart:E,onResize:S,onResizeEnd:_,shouldResize:w}),()=>{var H;(H=O.current)==null||H.destroy()}},[P,c,d,h,m,p,E,S,_,w]);const R=P.split("-");return b.jsx("div",{className:jt(["react-flow__resize-control","nodrag",...R,r,l]),ref:q,style:{...a,scale:L,...u&&{[j?"backgroundColor":"borderColor"]:u}},children:o})}V.memo(_5);function is(e,n){if(n.length===0)return null;let r=e[n[0]];for(let l=1;ll.viewContextPath),n=fe(l=>l.nodes),r=fe(l=>l.subworkflowContexts);return V.useMemo(()=>{var l;return e.length===0?n:((l=is(r,e))==null?void 0:l.nodes)??n},[e,n,r])}function k5(){const e=fe(l=>l.viewContextPath),n=fe(l=>l.groupProgress),r=fe(l=>l.subworkflowContexts);return V.useMemo(()=>{var l;return e.length===0?n:((l=is(r,e))==null?void 0:l.groupProgress)??n},[e,n,r])}function E5(){const e=fe(l=>l.viewContextPath),n=fe(l=>l.highlightedEdges),r=fe(l=>l.subworkflowContexts);return V.useMemo(()=>{var l;return e.length===0?n:((l=is(r,e))==null?void 0:l.highlightedEdges)??n},[e,n,r])}function __(){const e=fe(r=>r.viewContextPath),n=fe(r=>r.subworkflowContexts);return V.useMemo(()=>{var r;return e.length===0?n:((r=is(n,e))==null?void 0:r.children)??[]},[e,n])}function N5(){const e=fe(h=>h.viewContextPath),n=fe(h=>h.agents),r=fe(h=>h.routes),l=fe(h=>h.parallelGroups),a=fe(h=>h.forEachGroups),o=fe(h=>h.nodes),u=fe(h=>h.groupProgress),c=fe(h=>h.entryPoint),d=fe(h=>h.subworkflowContexts);return V.useMemo(()=>{if(e.length===0)return{agents:n,routes:r,parallelGroups:l,forEachGroups:a,nodes:o,groupProgress:u,entryPoint:c,subworkflowContexts:d,parentAgent:null};const h=is(d,e);return h?{agents:h.agents,routes:h.routes,parallelGroups:h.parallelGroups,forEachGroups:h.forEachGroups,nodes:h.nodes,groupProgress:h.groupProgress,entryPoint:h.entryPoint,subworkflowContexts:h.children,parentAgent:h.parentAgent}:{agents:n,routes:r,parallelGroups:l,forEachGroups:a,nodes:o,groupProgress:u,entryPoint:c,subworkflowContexts:d,parentAgent:null}},[e,n,r,l,a,o,u,c,d])}function C5(){const e=new URLSearchParams(window.location.search);return{subworkflowPath:e.get("subworkflow"),agent:e.get("agent")}}function gb(e,n){const r=[];let l=e;for(const a of n){let o=-1;for(let u=l.length-1;u>=0;u--)if(l[u].slotKey===a){o=u;break}if(o===-1){for(let u=l.length-1;u>=0;u--)if(l[u].parentAgent===a){o=u;break}}if(o===-1)return{path:r,failedSegment:a};r.push(o),l=l[o].children}return{path:r,failedSegment:null}}function tm(e,n,r=[]){const l=[];for(let a=0;ac.name===n)&&l.push({path:u,ctx:o}),o.children.length>0&&l.push(...tm(o.children,n,u))}return l}function T5(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 o=0;o{if(r.current||!u)return;let c=null,d=null,h=null;const m=()=>{if(r.current)return;r.current=!0,c&&clearTimeout(c),d&&clearTimeout(d),h&&h();const v=fe.getState();if(v.agents.length===0){n({message:"Workflow state did not load."});return}let w=[];if(a){const E=a.split("/").filter(Boolean),S=gb(v.subworkflowContexts,E);if(S.failedSegment){const _=E.slice(0,S.path.length).join("/");n({message:`Subworkflow "${S.failedSegment}" not found${_?` (resolved: ${_})`:""}. It may not have started yet.`});return}w=S.path}if(o){if((w.length===0?v.agents:(()=>{let S,_=v.subworkflowContexts;for(const T of w){if(S=_[T],!S)break;_=S.children}return(S==null?void 0:S.agents)??[]})()).some(S=>S.name===o))fe.setState({viewContextPath:w,selectedNode:o});else{const S=tm(v.subworkflowContexts,o);if(S.length===0){const T=a||"root workflow";fe.setState({viewContextPath:w,selectedNode:null}),n({message:`Agent "${o}" not found in ${T}.`});return}if(a){const T=S.slice(0,5).map(A=>A5(v.subworkflowContexts,A.path)).join(", "),k=S.length>5?`, and ${S.length-5} more`:"";fe.setState({viewContextPath:w,selectedNode:null}),n({message:`Agent "${o}" not found in ${a}. Found in: ${T}${k}`});return}const _=T5(S);fe.setState({viewContextPath:_.path,selectedNode:o})}setTimeout(()=>{l({nodes:[{id:o}],padding:.5,duration:400})},200)}else a&&fe.setState({viewContextPath:w,selectedNode:null})},p=()=>{const v=fe.getState();if(v.agents.length===0)return!1;if(v.workflowStatus!=="running"&&v.workflowStatus!=="pending")return!0;if(a){const w=a.split("/").filter(Boolean),{failedSegment:E}=gb(v.subworkflowContexts,w);if(E)return!1}return!(o&&!a&&!v.agents.some(E=>E.name===o)&&tm(v.subworkflowContexts,o).length===0)},x=()=>{c&&clearTimeout(c),c=setTimeout(()=>{r.current||p()&&m()},200)};return h=fe.subscribe(x),d=setTimeout(()=>{r.current||m()},5e3),x(),()=>{c&&clearTimeout(c),d&&clearTimeout(d),h&&h()}},[u,a,o,l]),e}var Nh,xb;function Bm(){if(xb)return Nh;xb=1;var e="\0",n="\0",r="";class l{constructor(m){Ct(this,"_isDirected",!0);Ct(this,"_isMultigraph",!1);Ct(this,"_isCompound",!1);Ct(this,"_label");Ct(this,"_defaultNodeLabelFn",()=>{});Ct(this,"_defaultEdgeLabelFn",()=>{});Ct(this,"_nodes",{});Ct(this,"_in",{});Ct(this,"_preds",{});Ct(this,"_out",{});Ct(this,"_sucs",{});Ct(this,"_edgeObjs",{});Ct(this,"_edgeLabels",{});Ct(this,"_nodeCount",0);Ct(this,"_edgeCount",0);Ct(this,"_parent");Ct(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 x=arguments,v=this;return m.forEach(function(w){x.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 x=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(x),delete this._in[m],delete this._preds[m],Object.keys(this._out[m]).forEach(x),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 x=p;x!==void 0;x=this.parent(x))if(x===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 x of this.successors(m))v.add(x);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 x=this;Object.entries(this._nodes).forEach(function([E,S]){m(E)&&p.setNode(E,S)}),Object.values(this._edgeObjs).forEach(function(E){p.hasNode(E.v)&&p.hasNode(E.w)&&p.setEdge(E,x.edge(E))});var v={};function w(E){var S=x.parent(E);return S===void 0||p.hasNode(S)?(v[E]=S,S):S in v?v[S]:w(S)}return this._isCompound&&p.nodes().forEach(E=>p.setParent(E,w(E))),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 x=this,v=arguments;return m.reduce(function(w,E){return v.length>1?x.setEdge(w,E,p):x.setEdge(w,E),E}),this}setEdge(){var m,p,x,v,w=!1,E=arguments[0];typeof E=="object"&&E!==null&&"v"in E?(m=E.v,p=E.w,x=E.name,arguments.length===2&&(v=arguments[1],w=!0)):(m=E,p=arguments[1],x=arguments[3],arguments.length>2&&(v=arguments[2],w=!0)),m=""+m,p=""+p,x!==void 0&&(x=""+x);var S=u(this._isDirected,m,p,x);if(Object.hasOwn(this._edgeLabels,S))return w&&(this._edgeLabels[S]=v),this;if(x!==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,x);var _=c(this._isDirected,m,p,x);return m=_.v,p=_.w,Object.freeze(_),this._edgeObjs[S]=_,a(this._preds[p],m),a(this._sucs[m],p),this._in[p][S]=_,this._out[m][S]=_,this._edgeCount++,this}edge(m,p,x){var v=arguments.length===1?d(this._isDirected,arguments[0]):u(this._isDirected,m,p,x);return this._edgeLabels[v]}edgeAsObj(){const m=this.edge(...arguments);return typeof m!="object"?{label:m}:m}hasEdge(m,p,x){var v=arguments.length===1?d(this._isDirected,arguments[0]):u(this._isDirected,m,p,x);return Object.hasOwn(this._edgeLabels,v)}removeEdge(m,p,x){var v=arguments.length===1?d(this._isDirected,arguments[0]):u(this._isDirected,m,p,x),w=this._edgeObjs[v];return w&&(m=w.v,p=w.w,delete this._edgeLabels[v],delete this._edgeObjs[v],o(this._preds[p],m),o(this._sucs[m],p),delete this._in[p][v],delete this._out[m][v],this._edgeCount--),this}inEdges(m,p){var x=this._in[m];if(x){var v=Object.values(x);return p?v.filter(w=>w.v===p):v}}outEdges(m,p){var x=this._out[m];if(x){var v=Object.values(x);return p?v.filter(w=>w.w===p):v}}nodeEdges(m,p){var x=this.inEdges(m,p);if(x)return x.concat(this.outEdges(m,p))}}function a(h,m){h[m]?h[m]++:h[m]=1}function o(h,m){--h[m]||delete h[m]}function u(h,m,p,x){var v=""+m,w=""+p;if(!h&&v>w){var E=v;v=w,w=E}return v+r+w+r+(x===void 0?e:x)}function c(h,m,p,x){var v=""+m,w=""+p;if(!h&&v>w){var E=v;v=w,w=E}var S={v,w};return x&&(S.name=x),S}function d(h,m){return u(h,m.v,m.w,m.name)}return Nh=l,Nh}var Ch,yb;function z5(){return yb||(yb=1,Ch="2.2.4"),Ch}var Th,vb;function M5(){return vb||(vb=1,Th={Graph:Bm(),version:z5()}),Th}var Ah,bb;function D5(){if(bb)return Ah;bb=1;var e=Bm();Ah={write:n,read:a};function n(o){var u={options:{directed:o.isDirected(),multigraph:o.isMultigraph(),compound:o.isCompound()},nodes:r(o),edges:l(o)};return o.graph()!==void 0&&(u.value=structuredClone(o.graph())),u}function r(o){return o.nodes().map(function(u){var c=o.node(u),d=o.parent(u),h={v:u};return c!==void 0&&(h.value=c),d!==void 0&&(h.parent=d),h})}function l(o){return o.edges().map(function(u){var c=o.edge(u),d={v:u.v,w:u.w};return u.name!==void 0&&(d.name=u.name),c!==void 0&&(d.value=c),d})}function a(o){var u=new e(o.options).setGraph(o.value);return o.nodes.forEach(function(c){u.setNode(c.v,c.value),c.parent&&u.setParent(c.v,c.parent)}),o.edges.forEach(function(c){u.setEdge({v:c.v,w:c.w,name:c.name},c.value)}),u}return Ah}var jh,wb;function R5(){if(wb)return jh;wb=1,jh=e;function e(n){var r={},l=[],a;function o(u){Object.hasOwn(r,u)||(r[u]=!0,a.push(u),n.successors(u).forEach(o),n.predecessors(u).forEach(o))}return n.nodes().forEach(function(u){a=[],o(u),a.length&&l.push(a)}),l}return jh}var zh,Sb;function k_(){if(Sb)return zh;Sb=1;class e{constructor(){Ct(this,"_arr",[]);Ct(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 o=this._arr,u=o.length;return a[r]=u,o.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,o=a+1,u=r;a>1,!(l[o].priority1;function r(a,o,u,c){return l(a,String(o),u||n,c||function(d){return a.outEdges(d)})}function l(a,o,u,c){var d={},h=new e,m,p,x=function(v){var w=v.v!==m?v.v:v.w,E=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);)c(m).forEach(x);return d}return Mh}var Dh,kb;function O5(){if(kb)return Dh;kb=1;var e=E_();Dh=n;function n(r,l,a){return r.nodes().reduce(function(o,u){return o[u]=e(r,u,l,a),o},{})}return Dh}var Rh,Eb;function N_(){if(Eb)return Rh;Eb=1,Rh=e;function e(n){var r=0,l=[],a={},o=[];function u(c){var d=a[c]={onStack:!0,lowlink:r,index:r++};if(l.push(c),n.successors(c).forEach(function(p){Object.hasOwn(a,p)?a[p].onStack&&(d.lowlink=Math.min(d.lowlink,a[p].index)):(u(p),d.lowlink=Math.min(d.lowlink,a[p].lowlink))}),d.lowlink===d.index){var h=[],m;do m=l.pop(),a[m].onStack=!1,h.push(m);while(c!==m);o.push(h)}}return n.nodes().forEach(function(c){Object.hasOwn(a,c)||u(c)}),o}return Rh}var Oh,Nb;function L5(){if(Nb)return Oh;Nb=1;var e=N_();Oh=n;function n(r){return e(r).filter(function(l){return l.length>1||l.length===1&&r.hasEdge(l[0],l[0])})}return Oh}var Lh,Cb;function H5(){if(Cb)return Lh;Cb=1,Lh=n;var e=()=>1;function n(l,a,o){return r(l,a||e,o||function(u){return l.outEdges(u)})}function r(l,a,o){var u={},c=l.nodes();return c.forEach(function(d){u[d]={},u[d][d]={distance:0},c.forEach(function(h){d!==h&&(u[d][h]={distance:Number.POSITIVE_INFINITY})}),o(d).forEach(function(h){var m=h.v===d?h.w:h.v,p=a(h);u[d][m]={distance:p,predecessor:d}})}),c.forEach(function(d){var h=u[d];c.forEach(function(m){var p=u[m];c.forEach(function(x){var v=p[d],w=h[x],E=p[x],S=v.distance+w.distance;Sa.successors(p):p=>a.neighbors(p),d=u==="post"?n:r,h=[],m={};return o.forEach(p=>{if(!a.hasNode(p))throw new Error("Graph does not have node: "+p);d(p,c,m,h)}),h}function n(a,o,u,c){for(var d=[[a,!1]];d.length>0;){var h=d.pop();h[1]?c.push(h[0]):Object.hasOwn(u,h[0])||(u[h[0]]=!0,d.push([h[0],!0]),l(o(h[0]),m=>d.push([m,!1])))}}function r(a,o,u,c){for(var d=[a];d.length>0;){var h=d.pop();Object.hasOwn(u,h)||(u[h]=!0,c.push(h),l(o(h),m=>d.push(m)))}}function l(a,o){for(var u=a.length;u--;)o(a[u],u,a);return a}return Ih}var qh,zb;function I5(){if(zb)return qh;zb=1;var e=T_();qh=n;function n(r,l){return e(r,l,"post")}return qh}var Uh,Mb;function q5(){if(Mb)return Uh;Mb=1;var e=T_();Uh=n;function n(r,l){return e(r,l,"pre")}return Uh}var Ph,Db;function U5(){if(Db)return Ph;Db=1;var e=Bm(),n=k_();Ph=r;function r(l,a){var o=new e,u={},c=new n,d;function h(p){var x=p.v===d?p.w:p.v,v=c.priority(x);if(v!==void 0){var w=a(p);w0;){if(d=c.removeMin(),Object.hasOwn(u,d))o.setEdge(d,u[d]);else{if(m)throw new Error("Input graph is not connected: "+l);m=!0}l.nodeEdges(d).forEach(h)}return o}return Ph}var Vh,Rb;function P5(){return Rb||(Rb=1,Vh={components:R5(),dijkstra:E_(),dijkstraAll:O5(),findCycles:L5(),floydWarshall:H5(),isAcyclic:B5(),postorder:I5(),preorder:q5(),prim:U5(),tarjan:N_(),topsort:C_()}),Vh}var $h,Ob;function Xn(){if(Ob)return $h;Ob=1;var e=M5();return $h={Graph:e.Graph,json:D5(),alg:P5(),version:e.version},$h}var Gh,Lb;function V5(){if(Lb)return Gh;Lb=1;class e{constructor(){let a={};a._next=a._prev=a,this._sentinel=a}dequeue(){let a=this._sentinel,o=a._prev;if(o!==a)return n(o),o}enqueue(a){let o=this._sentinel;a._prev&&a._next&&n(a),a._next=o._next,o._next._prev=a,o._next=a,a._prev=o}toString(){let a=[],o=this._sentinel,u=o._prev;for(;u!==o;)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 Gh=e,Gh}var Fh,Hb;function $5(){if(Hb)return Fh;Hb=1;let e=Xn().Graph,n=V5();Fh=l;let r=()=>1;function l(h,m){if(h.nodeCount()<=1)return[];let p=u(h,m||r);return a(p.graph,p.buckets,p.zeroIdx).flatMap(v=>h.outEdges(v.v,v.w))}function a(h,m,p){let x=[],v=m[m.length-1],w=m[0],E;for(;h.nodeCount();){for(;E=w.dequeue();)o(h,m,p,E);for(;E=v.dequeue();)o(h,m,p,E);if(h.nodeCount()){for(let S=m.length-2;S>0;--S)if(E=m[S].dequeue(),E){x=x.concat(o(h,m,p,E,!0));break}}}return x}function o(h,m,p,x,v){let w=v?[]:void 0;return h.inEdges(x.v).forEach(E=>{let S=h.edge(E),_=h.node(E.v);v&&w.push({v:E.v,w:E.w}),_.out-=S,c(m,p,_)}),h.outEdges(x.v).forEach(E=>{let S=h.edge(E),_=E.w,T=h.node(_);T.in-=S,c(m,p,T)}),h.removeNode(x.v),w}function u(h,m){let p=new e,x=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,T=m(S),k=_+T;p.setEdge(S.v,S.w,k),v=Math.max(v,p.node(S.v).out+=T),x=Math.max(x,p.node(S.w).in+=T)});let w=d(v+x+3).map(()=>new n),E=x+1;return p.nodes().forEach(S=>{c(w,E,p.node(S))}),{graph:p,buckets:w,zeroIdx:E}}function c(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;pP.setNode(R,O.node(R))),O.edges().forEach(R=>{let H=P.edge(R.v,R.w)||{weight:0,minlen:1},U=O.edge(R);P.setEdge(R.v,R.w,{weight:H.weight+U.weight,minlen:Math.max(H.minlen,U.minlen)})}),P}function l(O){let P=new e({multigraph:O.isMultigraph()}).setGraph(O.graph());return O.nodes().forEach(R=>{O.children(R).length||P.setNode(R,O.node(R))}),O.edges().forEach(R=>{P.setEdge(R,O.edge(R))}),P}function a(O){let P=O.nodes().map(R=>{let H={};return O.outEdges(R).forEach(U=>{H[U.w]=(H[U.w]||0)+O.edge(U).weight}),H});return L(O.nodes(),P)}function o(O){let P=O.nodes().map(R=>{let H={};return O.inEdges(R).forEach(U=>{H[U.v]=(H[U.v]||0)+O.edge(U).weight}),H});return L(O.nodes(),P)}function u(O,P){let R=O.x,H=O.y,U=P.x-R,ee=P.y-H,B=O.width/2,F=O.height/2;if(!U&&!ee)throw new Error("Not possible to find intersection inside of the rectangle");let z,G;return Math.abs(ee)*B>Math.abs(U)*F?(ee<0&&(F=-F),z=F*U/ee,G=F):(U<0&&(B=-B),z=B,G=B*ee/U),{x:R+z,y:H+G}}function c(O){let P=A(w(O)+1).map(()=>[]);return O.nodes().forEach(R=>{let H=O.node(R),U=H.rank;U!==void 0&&(P[U][H.order]=R)}),P}function d(O){let P=O.nodes().map(H=>{let U=O.node(H).rank;return U===void 0?Number.MAX_VALUE:U}),R=v(Math.min,P);O.nodes().forEach(H=>{let U=O.node(H);Object.hasOwn(U,"rank")&&(U.rank-=R)})}function h(O){let P=O.nodes().map(B=>O.node(B).rank),R=v(Math.min,P),H=[];O.nodes().forEach(B=>{let F=O.node(B).rank-R;H[F]||(H[F]=[]),H[F].push(B)});let U=0,ee=O.graph().nodeRankFactor;Array.from(H).forEach((B,F)=>{B===void 0&&F%ee!==0?--U:B!==void 0&&U&&B.forEach(z=>O.node(z).rank+=U)})}function m(O,P,R,H){let U={width:0,height:0};return arguments.length>=4&&(U.rank=R,U.order=H),n(O,"border",U,P)}function p(O,P=x){const R=[];for(let H=0;Hx){const R=p(P);return O.apply(null,R.map(H=>O.apply(null,H)))}else return O.apply(null,P)}function w(O){const R=O.nodes().map(H=>{let U=O.node(H).rank;return U===void 0?Number.MIN_VALUE:U});return v(Math.max,R)}function E(O,P){let R={lhs:[],rhs:[]};return O.forEach(H=>{P(H)?R.lhs.push(H):R.rhs.push(H)}),R}function S(O,P){let R=Date.now();try{return P()}finally{console.log(O+" time: "+(Date.now()-R)+"ms")}}function _(O,P){return P()}let T=0;function k(O){var P=++T;return O+(""+P)}function A(O,P,R=1){P==null&&(P=O,O=0);let H=ee=>eePH[P]),Object.entries(O).reduce((H,[U,ee])=>(H[U]=R(ee,U),H),{})}function L(O,P){return O.reduce((R,H,U)=>(R[H]=P[U],R),{})}return Yh}var Xh,Ib;function G5(){if(Ib)return Xh;Ib=1;let e=$5(),n=At().uniqueId;Xh={run:r,undo:a};function r(o){(o.graph().acyclicer==="greedy"?e(o,c(o)):l(o)).forEach(d=>{let h=o.edge(d);o.removeEdge(d),h.forwardName=d.name,h.reversed=!0,o.setEdge(d.w,d.v,h,n("rev"))});function c(d){return h=>d.edge(h).weight}}function l(o){let u=[],c={},d={};function h(m){Object.hasOwn(d,m)||(d[m]=!0,c[m]=!0,o.outEdges(m).forEach(p=>{Object.hasOwn(c,p.w)?u.push(p):h(p.w)}),delete c[m])}return o.nodes().forEach(h),u}function a(o){o.edges().forEach(u=>{let c=o.edge(u);if(c.reversed){o.removeEdge(u);let d=c.forwardName;delete c.reversed,delete c.forwardName,o.setEdge(u.w,u.v,c,d)}})}return Xh}var Qh,qb;function F5(){if(qb)return Qh;qb=1;let e=At();Qh={run:n,undo:l};function n(a){a.graph().dummyChains=[],a.edges().forEach(o=>r(a,o))}function r(a,o){let u=o.v,c=a.node(u).rank,d=o.w,h=a.node(d).rank,m=o.name,p=a.edge(o),x=p.labelRank;if(h===c+1)return;a.removeEdge(o);let v,w,E;for(E=0,++c;c{let u=a.node(o),c=u.edgeLabel,d;for(a.setEdge(u.edgeObj,c);u.dummy;)d=a.successors(o)[0],a.removeNode(o),c.points.push({x:u.x,y:u.y}),u.dummy==="edge-label"&&(c.x=u.x,c.y=u.y,c.width=u.width,c.height=u.height),o=d,u=a.node(o)})}return Qh}var Zh,Ub;function xc(){if(Ub)return Zh;Ub=1;const{applyWithChunking:e}=At();Zh={longestPath:n,slack:r};function n(l){var a={};function o(u){var c=l.node(u);if(Object.hasOwn(a,u))return c.rank;a[u]=!0;let d=l.outEdges(u).map(m=>m==null?Number.POSITIVE_INFINITY:o(m.w)-l.edge(m).minlen);var h=e(Math.min,d);return h===Number.POSITIVE_INFINITY&&(h=0),c.rank=h}l.sources().forEach(o)}function r(l,a){return l.node(a.w).rank-l.node(a.v).rank-l.edge(a).minlen}return Zh}var Kh,Pb;function A_(){if(Pb)return Kh;Pb=1;var e=Xn().Graph,n=xc().slack;Kh=r;function r(u){var c=new e({directed:!1}),d=u.nodes()[0],h=u.nodeCount();c.setNode(d,{});for(var m,p;l(c,u){var p=m.v,x=h===p?m.w:p;!u.hasNode(x)&&!n(c,m)&&(u.setNode(x,{}),u.setEdge(h,x,{}),d(x))})}return u.nodes().forEach(d),u.nodeCount()}function a(u,c){return c.edges().reduce((h,m)=>{let p=Number.POSITIVE_INFINITY;return u.hasNode(m.v)!==u.hasNode(m.w)&&(p=n(c,m)),pc.node(h).rank+=d)}return Kh}var Jh,Vb;function Y5(){if(Vb)return Jh;Vb=1;var e=A_(),n=xc().slack,r=xc().longestPath,l=Xn().alg.preorder,a=Xn().alg.postorder,o=At().simplify;Jh=u,u.initLowLimValues=m,u.initCutValues=c,u.calcCutValue=h,u.leaveEdge=x,u.enterEdge=v,u.exchangeEdges=w;function u(T){T=o(T),r(T);var k=e(T);m(k),c(k,T);for(var A,q;A=x(k);)q=v(k,T,A),w(k,T,A,q)}function c(T,k){var A=a(T,T.nodes());A=A.slice(0,A.length-1),A.forEach(q=>d(T,k,q))}function d(T,k,A){var q=T.node(A),j=q.parent;T.edge(A,j).cutvalue=h(T,k,A)}function h(T,k,A){var q=T.node(A),j=q.parent,L=!0,O=k.edge(A,j),P=0;return O||(L=!1,O=k.edge(j,A)),P=O.weight,k.nodeEdges(A).forEach(R=>{var H=R.v===A,U=H?R.w:R.v;if(U!==j){var ee=H===L,B=k.edge(R).weight;if(P+=ee?B:-B,S(T,A,U)){var F=T.edge(A,U).cutvalue;P+=ee?-F:F}}}),P}function m(T,k){arguments.length<2&&(k=T.nodes()[0]),p(T,{},1,k)}function p(T,k,A,q,j){var L=A,O=T.node(q);return k[q]=!0,T.neighbors(q).forEach(P=>{Object.hasOwn(k,P)||(A=p(T,k,A,P,q))}),O.low=L,O.lim=A++,j?O.parent=j:delete O.parent,A}function x(T){return T.edges().find(k=>T.edge(k).cutvalue<0)}function v(T,k,A){var q=A.v,j=A.w;k.hasEdge(q,j)||(q=A.w,j=A.v);var L=T.node(q),O=T.node(j),P=L,R=!1;L.lim>O.lim&&(P=O,R=!0);var H=k.edges().filter(U=>R===_(T,T.node(U.v),P)&&R!==_(T,T.node(U.w),P));return H.reduce((U,ee)=>n(k,ee)!k.node(j).parent),q=l(T,A);q=q.slice(1),q.forEach(j=>{var L=T.node(j).parent,O=k.edge(j,L),P=!1;O||(O=k.edge(L,j),P=!0),k.node(j).rank=k.node(L).rank+(P?O.minlen:-O.minlen)})}function S(T,k,A){return T.hasEdge(k,A)}function _(T,k,A){return A.low<=k.lim&&k.lim<=A.lim}return Jh}var Wh,$b;function X5(){if($b)return Wh;$b=1;var e=xc(),n=e.longestPath,r=A_(),l=Y5();Wh=a;function a(d){var h=d.graph().ranker;if(h instanceof Function)return h(d);switch(d.graph().ranker){case"network-simplex":c(d);break;case"tight-tree":u(d);break;case"longest-path":o(d);break;case"none":break;default:c(d)}}var o=n;function u(d){n(d),r(d)}function c(d){l(d)}return Wh}var ep,Gb;function Q5(){if(Gb)return ep;Gb=1,ep=e;function e(l){let a=r(l);l.graph().dummyChains.forEach(o=>{let u=l.node(o),c=u.edgeObj,d=n(l,a,c.v,c.w),h=d.path,m=d.lca,p=0,x=h[p],v=!0;for(;o!==c.w;){if(u=l.node(o),v){for(;(x=h[p])!==m&&l.node(x).maxRankh||m>a[p].lim));for(x=p,p=u;(p=l.parent(p))!==x;)d.push(p);return{path:c.concat(d.reverse()),lca:x}}function r(l){let a={},o=0;function u(c){let d=o;l.children(c).forEach(u),a[c]={low:d,lim:o++}}return l.children().forEach(u),a}return ep}var tp,Fb;function Z5(){if(Fb)return tp;Fb=1;let e=At();tp={run:n,cleanup:o};function n(u){let c=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=c,u.edges().forEach(v=>u.edge(v).minlen*=p);let x=a(u)+1;u.children().forEach(v=>r(u,c,p,x,m,d,v)),u.graph().nodeRankFactor=p}function r(u,c,d,h,m,p,x){let v=u.children(x);if(!v.length){x!==c&&u.setEdge(c,x,{weight:0,minlen:d});return}let w=e.addBorderNode(u,"_bt"),E=e.addBorderNode(u,"_bb"),S=u.node(x);u.setParent(w,x),S.borderTop=w,u.setParent(E,x),S.borderBottom=E,v.forEach(_=>{r(u,c,d,h,m,p,_);let T=u.node(_),k=T.borderTop?T.borderTop:_,A=T.borderBottom?T.borderBottom:_,q=T.borderTop?h:2*h,j=k!==A?1:m-p[x]+1;u.setEdge(w,k,{weight:q,minlen:j,nestingEdge:!0}),u.setEdge(A,E,{weight:q,minlen:j,nestingEdge:!0})}),u.parent(x)||u.setEdge(c,w,{weight:0,minlen:m+p[x]})}function l(u){var c={};function d(h,m){var p=u.children(h);p&&p.length&&p.forEach(x=>d(x,m+1)),c[h]=m}return u.children().forEach(h=>d(h,1)),c}function a(u){return u.edges().reduce((c,d)=>c+u.edge(d).weight,0)}function o(u){var c=u.graph();u.removeNode(c.nestingRoot),delete c.nestingRoot,u.edges().forEach(d=>{var h=u.edge(d);h.nestingEdge&&u.removeEdge(d)})}return tp}var np,Yb;function K5(){if(Yb)return np;Yb=1;let e=At();np=n;function n(l){function a(o){let u=l.children(o),c=l.node(o);if(u.length&&u.forEach(a),Object.hasOwn(c,"minRank")){c.borderLeft=[],c.borderRight=[];for(let d=c.minRank,h=c.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 a(d){d.nodes().forEach(h=>o(d.node(h))),d.edges().forEach(h=>{let m=d.edge(h);m.points.forEach(o),Object.hasOwn(m,"y")&&o(m)})}function o(d){d.y=-d.y}function u(d){d.nodes().forEach(h=>c(d.node(h))),d.edges().forEach(h=>{let m=d.edge(h);m.points.forEach(c),Object.hasOwn(m,"x")&&c(m)})}function c(d){let h=d.x;d.x=d.y,d.y=h}return rp}var ip,Qb;function W5(){if(Qb)return ip;Qb=1;let e=At();ip=n;function n(r){let l={},a=r.nodes().filter(m=>!r.children(m).length),o=a.map(m=>r.node(m).rank),u=e.applyWithChunking(Math.max,o),c=e.range(u+1).map(()=>[]);function d(m){if(l[m])return;l[m]=!0;let p=r.node(m);c[p.rank].push(m),r.successors(m).forEach(d)}return a.sort((m,p)=>r.node(m).rank-r.node(p).rank).forEach(d),c}return ip}var lp,Zb;function e4(){if(Zb)return lp;Zb=1;let e=At().zipObject;lp=n;function n(l,a){let o=0;for(let u=1;uv)),c=a.flatMap(x=>l.outEdges(x).map(v=>({pos:u[v.w],weight:l.edge(v).weight})).sort((v,w)=>v.pos-w.pos)),d=1;for(;d{let v=x.pos+d;m[v]+=x.weight;let w=0;for(;v>0;)v%2&&(w+=m[v+1]),v=v-1>>1,m[v]+=x.weight;p+=x.weight*w}),p}return lp}var ap,Kb;function t4(){if(Kb)return ap;Kb=1,ap=e;function e(n,r=[]){return r.map(l=>{let a=n.inEdges(l);if(a.length){let o=a.reduce((u,c)=>{let d=n.edge(c),h=n.node(c.v);return{sum:u.sum+d.weight*h.order,weight:u.weight+d.weight}},{sum:0,weight:0});return{v:l,barycenter:o.sum/o.weight,weight:o.weight}}else return{v:l}})}return ap}var op,Jb;function n4(){if(Jb)return op;Jb=1;let e=At();op=n;function n(a,o){let u={};a.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)}),o.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 c=Object.values(u).filter(d=>!d.indegree);return r(c)}function r(a){let o=[];function u(d){return h=>{h.merged||(h.barycenter===void 0||d.barycenter===void 0||h.barycenter>=d.barycenter)&&l(d,h)}}function c(d){return h=>{h.in.push(d),--h.indegree===0&&a.push(h)}}for(;a.length;){let d=a.pop();o.push(d),d.in.reverse().forEach(u(d)),d.out.forEach(c(d))}return o.filter(d=>!d.merged).map(d=>e.pick(d,["vs","i","barycenter","weight"]))}function l(a,o){let u=0,c=0;a.weight&&(u+=a.barycenter*a.weight,c+=a.weight),o.weight&&(u+=o.barycenter*o.weight,c+=o.weight),a.vs=o.vs.concat(a.vs),a.barycenter=u/c,a.weight=c,a.i=Math.min(o.i,a.i),o.merged=!0}return op}var sp,Wb;function r4(){if(Wb)return sp;Wb=1;let e=At();sp=n;function n(a,o){let u=e.partition(a,w=>Object.hasOwn(w,"barycenter")),c=u.lhs,d=u.rhs.sort((w,E)=>E.i-w.i),h=[],m=0,p=0,x=0;c.sort(l(!!o)),x=r(h,d,x),c.forEach(w=>{x+=w.vs.length,h.push(w.vs),m+=w.barycenter*w.weight,p+=w.weight,x=r(h,d,x)});let v={vs:h.flat(!0)};return p&&(v.barycenter=m/p,v.weight=p),v}function r(a,o,u){let c;for(;o.length&&(c=o[o.length-1]).i<=u;)o.pop(),a.push(c.vs),u++;return u}function l(a){return(o,u)=>o.barycenteru.barycenter?1:a?u.i-o.i:o.i-u.i}return sp}var up,e1;function i4(){if(e1)return up;e1=1;let e=t4(),n=n4(),r=r4();up=l;function l(u,c,d,h){let m=u.children(c),p=u.node(c),x=p?p.borderLeft:void 0,v=p?p.borderRight:void 0,w={};x&&(m=m.filter(T=>T!==x&&T!==v));let E=e(u,m);E.forEach(T=>{if(u.children(T.v).length){let k=l(u,T.v,d,h);w[T.v]=k,Object.hasOwn(k,"barycenter")&&o(T,k)}});let S=n(E,d);a(S,w);let _=r(S,h);if(x&&(_.vs=[x,_.vs,v].flat(!0),u.predecessors(x).length)){let T=u.node(u.predecessors(x)[0]),k=u.node(u.predecessors(v)[0]);Object.hasOwn(_,"barycenter")||(_.barycenter=0,_.weight=0),_.barycenter=(_.barycenter*_.weight+T.order+k.order)/(_.weight+2),_.weight+=2}return _}function a(u,c){u.forEach(d=>{d.vs=d.vs.flatMap(h=>c[h]?c[h].vs:h)})}function o(u,c){u.barycenter!==void 0?(u.barycenter=(u.barycenter*u.weight+c.barycenter*c.weight)/(u.weight+c.weight),u.weight+=c.weight):(u.barycenter=c.barycenter,u.weight=c.weight)}return up}var cp,t1;function l4(){if(t1)return cp;t1=1;let e=Xn().Graph,n=At();cp=r;function r(a,o,u,c){c||(c=a.nodes());let d=l(a),h=new e({compound:!0}).setGraph({root:d}).setDefaultNodeLabel(m=>a.node(m));return c.forEach(m=>{let p=a.node(m),x=a.parent(m);(p.rank===o||p.minRank<=o&&o<=p.maxRank)&&(h.setNode(m),h.setParent(m,x||d),a[u](m).forEach(v=>{let w=v.v===m?v.w:v.v,E=h.edge(w,m),S=E!==void 0?E.weight:0;h.setEdge(w,m,{weight:a.edge(v).weight+S})}),Object.hasOwn(p,"minRank")&&h.setNode(m,{borderLeft:p.borderLeft[o],borderRight:p.borderRight[o]}))}),h}function l(a){for(var o;a.hasNode(o=n.uniqueId("_root")););return o}return cp}var fp,n1;function a4(){if(n1)return fp;n1=1,fp=e;function e(n,r,l){let a={},o;l.forEach(u=>{let c=n.parent(u),d,h;for(;c;){if(d=n.parent(c),d?(h=a[d],a[d]=c):(h=o,o=c),h&&h!==c){r.setEdge(h,c);return}c=d}})}return fp}var dp,r1;function o4(){if(r1)return dp;r1=1;let e=W5(),n=e4(),r=i4(),l=l4(),a=a4(),o=Xn().Graph,u=At();dp=c;function c(p,x){if(x&&typeof x.customOrder=="function"){x.customOrder(p,c);return}let v=u.maxRank(p),w=d(p,u.range(1,v+1),"inEdges"),E=d(p,u.range(v-1,-1,-1),"outEdges"),S=e(p);if(m(p,S),x&&x.disableOptimalOrderHeuristic)return;let _=Number.POSITIVE_INFINITY,T;for(let k=0,A=0;A<4;++k,++A){h(k%2?w:E,k%4>=2),S=u.buildLayerMatrix(p);let q=n(p,S);q<_&&(A=0,T=Object.assign({},S),_=q)}m(p,T)}function d(p,x,v){const w=new Map,E=(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"&&E(_.rank,S),typeof _.minRank=="number"&&typeof _.maxRank=="number")for(let T=_.minRank;T<=_.maxRank;T++)T!==_.rank&&E(T,S)}return x.map(function(S){return l(p,S,v,w.get(S)||[])})}function h(p,x){let v=new o;p.forEach(function(w){let E=w.graph().root,S=r(w,E,v,x);S.vs.forEach((_,T)=>w.node(_).order=T),a(w,v,S.vs)})}function m(p,x){Object.values(x).forEach(v=>v.forEach((w,E)=>p.node(w).order=E))}return dp}var hp,i1;function s4(){if(i1)return hp;i1=1;let e=Xn().Graph,n=At();hp={positionX:v,findType1Conflicts:r,findType2Conflicts:l,addConflict:o,hasConflict:u,verticalAlignment:c,horizontalCompaction:d,alignCoordinates:p,findSmallestWidthAlignment:m,balance:x};function r(S,_){let T={};function k(A,q){let j=0,L=0,O=A.length,P=q[q.length-1];return q.forEach((R,H)=>{let U=a(S,R),ee=U?S.node(U).order:O;(U||R===P)&&(q.slice(L,H+1).forEach(B=>{S.predecessors(B).forEach(F=>{let z=S.node(F),G=z.order;(G{R=q[H],S.node(R).dummy&&S.predecessors(R).forEach(U=>{let ee=S.node(U);ee.dummy&&(ee.orderP)&&o(T,U,R)})})}function A(q,j){let L=-1,O,P=0;return j.forEach((R,H)=>{if(S.node(R).dummy==="border"){let U=S.predecessors(R);U.length&&(O=S.node(U[0]).order,k(j,P,H,L,O),P=H,L=O)}k(j,P,j.length,O,q.length)}),j}return _.length&&_.reduce(A),T}function a(S,_){if(S.node(_).dummy)return S.predecessors(_).find(T=>S.node(T).dummy)}function o(S,_,T){if(_>T){let A=_;_=T,T=A}let k=S[_];k||(S[_]=k={}),k[T]=!0}function u(S,_,T){if(_>T){let k=_;_=T,T=k}return!!S[_]&&Object.hasOwn(S[_],T)}function c(S,_,T,k){let A={},q={},j={};return _.forEach(L=>{L.forEach((O,P)=>{A[O]=O,q[O]=O,j[O]=P})}),_.forEach(L=>{let O=-1;L.forEach(P=>{let R=k(P);if(R.length){R=R.sort((U,ee)=>j[U]-j[ee]);let H=(R.length-1)/2;for(let U=Math.floor(H),ee=Math.ceil(H);U<=ee;++U){let B=R[U];q[P]===P&&OMath.max(U,q[ee.v]+j.edge(ee)),0)}function R(H){let U=j.outEdges(H).reduce((B,F)=>Math.min(B,q[F.w]-j.edge(F)),Number.POSITIVE_INFINITY),ee=S.node(H);U!==Number.POSITIVE_INFINITY&&ee.borderType!==L&&(q[H]=Math.max(q[H],U))}return O(P,j.predecessors.bind(j)),O(R,j.successors.bind(j)),Object.keys(k).forEach(H=>q[H]=q[T[H]]),q}function h(S,_,T,k){let A=new e,q=S.graph(),j=w(q.nodesep,q.edgesep,k);return _.forEach(L=>{let O;L.forEach(P=>{let R=T[P];if(A.setNode(R),O){var H=T[O],U=A.edge(H,R);A.setEdge(H,R,Math.max(j(S,P,O),U||0))}O=P})}),A}function m(S,_){return Object.values(_).reduce((T,k)=>{let A=Number.NEGATIVE_INFINITY,q=Number.POSITIVE_INFINITY;Object.entries(k).forEach(([L,O])=>{let P=E(S,L)/2;A=Math.max(O+P,A),q=Math.min(O-P,q)});const j=A-q;return j{["l","r"].forEach(j=>{let L=q+j,O=S[L];if(O===_)return;let P=Object.values(O),R=k-n.applyWithChunking(Math.min,P);j!=="l"&&(R=A-n.applyWithChunking(Math.max,P)),R&&(S[L]=n.mapValues(O,H=>H+R))})})}function x(S,_){return n.mapValues(S.ul,(T,k)=>{if(_)return S[_.toLowerCase()][k];{let A=Object.values(S).map(q=>q[k]).sort((q,j)=>q-j);return(A[1]+A[2])/2}})}function v(S){let _=n.buildLayerMatrix(S),T=Object.assign(r(S,_),l(S,_)),k={},A;["u","d"].forEach(j=>{A=j==="u"?_:Object.values(_).reverse(),["l","r"].forEach(L=>{L==="r"&&(A=A.map(H=>Object.values(H).reverse()));let O=(j==="u"?S.predecessors:S.successors).bind(S),P=c(S,A,T,O),R=d(S,A,P.root,P.align,L==="r");L==="r"&&(R=n.mapValues(R,H=>-H)),k[j+L]=R})});let q=m(S,k);return p(k,q),x(k,S.graph().align)}function w(S,_,T){return(k,A,q)=>{let j=k.node(A),L=k.node(q),O=0,P;if(O+=j.width/2,Object.hasOwn(j,"labelpos"))switch(j.labelpos.toLowerCase()){case"l":P=-j.width/2;break;case"r":P=j.width/2;break}if(P&&(O+=T?P:-P),P=0,O+=(j.dummy?_:S)/2,O+=(L.dummy?_:S)/2,O+=L.width/2,Object.hasOwn(L,"labelpos"))switch(L.labelpos.toLowerCase()){case"l":P=L.width/2;break;case"r":P=-L.width/2;break}return P&&(O+=T?P:-P),P=0,O}}function E(S,_){return S.node(_).width}return hp}var pp,l1;function u4(){if(l1)return pp;l1=1;let e=At(),n=s4().positionX;pp=r;function r(a){a=e.asNonCompoundGraph(a),l(a),Object.entries(n(a)).forEach(([o,u])=>a.node(o).x=u)}function l(a){let o=e.buildLayerMatrix(a),u=a.graph().ranksep,c=0;o.forEach(d=>{const h=d.reduce((m,p)=>{const x=a.node(p).height;return m>x?m:x},0);d.forEach(m=>a.node(m).y=c+h/2),c+=h+u})}return pp}var mp,a1;function c4(){if(a1)return mp;a1=1;let e=G5(),n=F5(),r=X5(),l=At().normalizeRanks,a=Q5(),o=At().removeEmptyRanks,u=Z5(),c=K5(),d=J5(),h=o4(),m=u4(),p=At(),x=Xn().Graph;mp=v;function v(N,$){let X=$&&$.debugTiming?p.time:p.notime;X("layout",()=>{let J=X(" buildLayoutGraph",()=>O(N));X(" runLayout",()=>w(J,X,$)),X(" updateInputGraph",()=>E(N,J))})}function w(N,$,X){$(" makeSpaceForEdgeLabels",()=>P(N)),$(" removeSelfEdges",()=>Q(N)),$(" acyclic",()=>e.run(N)),$(" nestingGraph.run",()=>u.run(N)),$(" rank",()=>r(p.asNonCompoundGraph(N))),$(" injectEdgeLabelProxies",()=>R(N)),$(" removeEmptyRanks",()=>o(N)),$(" nestingGraph.cleanup",()=>u.cleanup(N)),$(" normalizeRanks",()=>l(N)),$(" assignRankMinMax",()=>H(N)),$(" removeEdgeLabelProxies",()=>U(N)),$(" normalize.run",()=>n.run(N)),$(" parentDummyChains",()=>a(N)),$(" addBorderSegments",()=>c(N)),$(" order",()=>h(N,X)),$(" insertSelfEdges",()=>K(N)),$(" adjustCoordinateSystem",()=>d.adjust(N)),$(" position",()=>m(N)),$(" positionSelfEdges",()=>M(N)),$(" removeBorderNodes",()=>G(N)),$(" normalize.undo",()=>n.undo(N)),$(" fixupEdgeLabelCoords",()=>F(N)),$(" undoCoordinateSystem",()=>d.undo(N)),$(" translateGraph",()=>ee(N)),$(" assignNodeIntersects",()=>B(N)),$(" reversePoints",()=>z(N)),$(" acyclic.undo",()=>e.undo(N))}function E(N,$){N.nodes().forEach(X=>{let J=N.node(X),ne=$.node(X);J&&(J.x=ne.x,J.y=ne.y,J.rank=ne.rank,$.children(X).length&&(J.width=ne.width,J.height=ne.height))}),N.edges().forEach(X=>{let J=N.edge(X),ne=$.edge(X);J.points=ne.points,Object.hasOwn(ne,"x")&&(J.x=ne.x,J.y=ne.y)}),N.graph().width=$.graph().width,N.graph().height=$.graph().height}let S=["nodesep","edgesep","ranksep","marginx","marginy"],_={ranksep:50,edgesep:20,nodesep:50,rankdir:"tb"},T=["acyclicer","ranker","rankdir","align"],k=["width","height","rank"],A={width:0,height:0},q=["minlen","weight","width","height","labeloffset"],j={minlen:1,weight:1,width:0,height:0,labeloffset:10,labelpos:"r"},L=["labelpos"];function O(N){let $=new x({multigraph:!0,compound:!0}),X=Y(N.graph());return $.setGraph(Object.assign({},_,I(X,S),p.pick(X,T))),N.nodes().forEach(J=>{let ne=Y(N.node(J));const re=I(ne,k);Object.keys(A).forEach(se=>{re[se]===void 0&&(re[se]=A[se])}),$.setNode(J,re),$.setParent(J,N.parent(J))}),N.edges().forEach(J=>{let ne=Y(N.edge(J));$.setEdge(J,Object.assign({},j,I(ne,q),p.pick(ne,L)))}),$}function P(N){let $=N.graph();$.ranksep/=2,N.edges().forEach(X=>{let J=N.edge(X);J.minlen*=2,J.labelpos.toLowerCase()!=="c"&&($.rankdir==="TB"||$.rankdir==="BT"?J.width+=J.labeloffset:J.height+=J.labeloffset)})}function R(N){N.edges().forEach($=>{let X=N.edge($);if(X.width&&X.height){let J=N.node($.v),re={rank:(N.node($.w).rank-J.rank)/2+J.rank,e:$};p.addDummyNode(N,"edge-proxy",re,"_ep")}})}function H(N){let $=0;N.nodes().forEach(X=>{let J=N.node(X);J.borderTop&&(J.minRank=N.node(J.borderTop).rank,J.maxRank=N.node(J.borderBottom).rank,$=Math.max($,J.maxRank))}),N.graph().maxRank=$}function U(N){N.nodes().forEach($=>{let X=N.node($);X.dummy==="edge-proxy"&&(N.edge(X.e).labelRank=X.rank,N.removeNode($))})}function ee(N){let $=Number.POSITIVE_INFINITY,X=0,J=Number.POSITIVE_INFINITY,ne=0,re=N.graph(),se=re.marginx||0,xe=re.marginy||0;function be(ye){let pe=ye.x,_e=ye.y,ze=ye.width,Te=ye.height;$=Math.min($,pe-ze/2),X=Math.max(X,pe+ze/2),J=Math.min(J,_e-Te/2),ne=Math.max(ne,_e+Te/2)}N.nodes().forEach(ye=>be(N.node(ye))),N.edges().forEach(ye=>{let pe=N.edge(ye);Object.hasOwn(pe,"x")&&be(pe)}),$-=se,J-=xe,N.nodes().forEach(ye=>{let pe=N.node(ye);pe.x-=$,pe.y-=J}),N.edges().forEach(ye=>{let pe=N.edge(ye);pe.points.forEach(_e=>{_e.x-=$,_e.y-=J}),Object.hasOwn(pe,"x")&&(pe.x-=$),Object.hasOwn(pe,"y")&&(pe.y-=J)}),re.width=X-$+se,re.height=ne-J+xe}function B(N){N.edges().forEach($=>{let X=N.edge($),J=N.node($.v),ne=N.node($.w),re,se;X.points?(re=X.points[0],se=X.points[X.points.length-1]):(X.points=[],re=ne,se=J),X.points.unshift(p.intersectRect(J,re)),X.points.push(p.intersectRect(ne,se))})}function F(N){N.edges().forEach($=>{let X=N.edge($);if(Object.hasOwn(X,"x"))switch((X.labelpos==="l"||X.labelpos==="r")&&(X.width-=X.labeloffset),X.labelpos){case"l":X.x-=X.width/2+X.labeloffset;break;case"r":X.x+=X.width/2+X.labeloffset;break}})}function z(N){N.edges().forEach($=>{let X=N.edge($);X.reversed&&X.points.reverse()})}function G(N){N.nodes().forEach($=>{if(N.children($).length){let X=N.node($),J=N.node(X.borderTop),ne=N.node(X.borderBottom),re=N.node(X.borderLeft[X.borderLeft.length-1]),se=N.node(X.borderRight[X.borderRight.length-1]);X.width=Math.abs(se.x-re.x),X.height=Math.abs(ne.y-J.y),X.x=re.x+X.width/2,X.y=J.y+X.height/2}}),N.nodes().forEach($=>{N.node($).dummy==="border"&&N.removeNode($)})}function Q(N){N.edges().forEach($=>{if($.v===$.w){var X=N.node($.v);X.selfEdges||(X.selfEdges=[]),X.selfEdges.push({e:$,label:N.edge($)}),N.removeEdge($)}})}function K(N){var $=p.buildLayerMatrix(N);$.forEach(X=>{var J=0;X.forEach((ne,re)=>{var se=N.node(ne);se.order=re+J,(se.selfEdges||[]).forEach(xe=>{p.addDummyNode(N,"selfedge",{width:xe.label.width,height:xe.label.height,rank:se.rank,order:re+ ++J,e:xe.e,label:xe.label},"_se")}),delete se.selfEdges})})}function M(N){N.nodes().forEach($=>{var X=N.node($);if(X.dummy==="selfedge"){var J=N.node(X.e.v),ne=J.x+J.width/2,re=J.y,se=X.x-ne,xe=J.height/2;N.setEdge(X.e,X.label),N.removeNode($),X.label.points=[{x:ne+2*se/3,y:re-xe},{x:ne+5*se/6,y:re-xe},{x:ne+se,y:re},{x:ne+5*se/6,y:re+xe},{x:ne+2*se/3,y:re+xe}],X.label.x=X.x,X.label.y=X.y}})}function I(N,$){return p.mapValues(p.pick(N,$),Number)}function Y(N){var $={};return N&&Object.entries(N).forEach(([X,J])=>{typeof X=="string"&&(X=X.toLowerCase()),$[X]=J}),$}return mp}var gp,o1;function f4(){if(o1)return gp;o1=1;let e=At(),n=Xn().Graph;gp={debugOrdering:r};function r(l){let a=e.buildLayerMatrix(l),o=new n({compound:!0,multigraph:!0}).setGraph({});return l.nodes().forEach(u=>{o.setNode(u,{label:u}),o.setParent(u,"layer"+l.node(u).rank)}),l.edges().forEach(u=>o.setEdge(u.v,u.w,{},u.name)),a.forEach((u,c)=>{let d="layer"+c;o.setNode(d,{rank:"same"}),u.reduce((h,m)=>(o.setEdge(h,m,{style:"invis"}),m))}),o}return gp}var xp,s1;function d4(){return s1||(s1=1,xp="1.1.8"),xp}var yp,u1;function h4(){return u1||(u1=1,yp={graphlib:Xn(),layout:c4(),debug:f4(),util:{time:At().time,notime:At().notime},version:d4()}),yp}var p4=h4();const c1=Qo(p4),Ao=200,ia=56,f1=20,d1=40,m4=20,h1=12;function g4(e,n,r,l,a,o,u,c){const d=[],h=[],m=new Set,p=new Set,x=new Map;for(const S of r)for(const _ of S.agents)p.add(_),x.set(_,S.name);for(const S of r){const _=a[S.name],T=S.agents.length,k=Ao+f1*2,A=d1+T*ia+(T-1)*h1+m4;d.push({id:S.name,type:"groupNode",position:{x:0,y:0},data:{label:S.name,type:"parallel_group",status:(_==null?void 0:_.status)||"pending",groupName:S.name,progress:o[S.name]},style:{width:k,height:A}});for(let q=0;q$entryPoint",source:"$start",target:u,type:"animatedEdge",data:{},animated:!1})}const w=new Set(d.map(S=>S.id)),E=new Map;for(const S of d)S.parentId&&E.set(S.id,S.parentId);for(const S of n){const _=E.get(S.from)??S.from,T=E.get(S.to)??S.to;if(!w.has(_)||!w.has(T)||_===T)continue;const k=`${_}->${T}${S.when?`[${S.when}]`:""}`;h.push({id:k,source:_,target:T,type:"animatedEdge",data:{when:S.when},animated:!1})}return x4(d,h),{nodes:d,edges:h}}function x4(e,n){var l,a,o,u;const r=new c1.graphlib.Graph;r.setDefaultEdgeLabel(()=>({})),r.setGraph({rankdir:"TB",nodesep:50,ranksep:70,marginx:30,marginy:30});for(const c of e){if(c.parentId)continue;const d=c.type==="groupNode",h=d&&((l=c.style)==null?void 0:l.width)||Ao,m=d&&((a=c.style)==null?void 0:a.height)||ia;r.setNode(c.id,{width:h,height:m})}for(const c of n)r.hasNode(c.source)&&r.hasNode(c.target)&&r.setEdge(c.source,c.target);c1.layout(r);for(const c of e){if(c.parentId)continue;const d=r.node(c.id);if(!d)continue;const h=c.type==="groupNode",m=h&&((o=c.style)==null?void 0:o.width)||Ao,p=h&&((u=c.style)==null?void 0:u.height)||ia;c.position={x:d.x-m/2,y:d.y-p/2}}}const Fe={pending:"#6b7280",running:"#3b82f6",completed:"#22c55e",failed:"#ef4444",paused:"#f59e0b",idle:"#6b7280",waiting:"#a855f7"},y4=70,p1=90;function Hc({data:e,children:n}){const[r,l]=V.useState(!1),a=V.useRef(null),o=V.useCallback(()=>{a.current=setTimeout(()=>l(!0),200)},[]),u=V.useCallback(()=>{a.current&&clearTimeout(a.current),l(!1)},[]),c=Fe[e.status]||Fe.pending;return b.jsxs("div",{className:"relative",onMouseEnter:o,onMouseLeave:u,children:[n,r&&b.jsxs("div",{className:He("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:c}}),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:Jt(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:yi(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:He("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 v4=V.memo(function({data:n,id:r,selected:l}){var L;const a=n,o=al(),c=((L=o[r])==null?void 0:L.status)||a.status||"pending",d=Fe[c]||Fe.pending,h=o[r],m=h==null?void 0:h.elapsed,p=h==null?void 0:h.model,x=h==null?void 0:h.tokens,v=h==null?void 0:h.input_tokens,w=h==null?void 0:h.output_tokens,E=h==null?void 0:h.cost_usd,S=h==null?void 0:h.iteration,_=h==null?void 0:h.error_type,T=h==null?void 0:h.error_message,k=h==null?void 0:h.context_pct,A=b4(r,c),q=w4(c),j=(()=>{if(c==="failed"&&T)return{text:T.length>40?T.slice(0,37)+"...":T,className:"text-red-400"};if(c==="running")return{text:A,className:"text-[var(--text-muted)]"};if(c==="completed"){const O=[];return m!=null&&O.push(Jt(m)),x!=null&&O.push(`${Gn(x)} tok`),E!=null&&O.push(yi(E)),{text:O.join(" · ")||null,className:"text-[var(--text-muted)]"}}return{text:null,className:""}})();return b.jsxs(b.Fragment,{children:[b.jsx(Lt,{type:"target",position:ve.Top,className:"!bg-[var(--border)] !border-none !w-2 !h-2"}),b.jsx(Hc,{data:{status:c,elapsed:m,model:p,tokens:x,inputTokens:v,outputTokens:w,costUsd:E,iteration:S,errorType:_,errorMessage:T},children:b.jsxs("div",{className:He("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)]",c==="running"&&"shadow-[0_0_12px_var(--running-glow)]",q),style:{borderColor:d},children:[b.jsx("div",{className:He("flex items-center justify-center w-6 h-6 rounded-md flex-shrink-0",c==="running"&&"animate-pulse"),style:{backgroundColor:`${d}20`},children:b.jsx(aN,{className:"w-3.5 h-3.5",style:{color:d}})}),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}),S!=null&&S>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:`${d}25`,color:d},children:["x",S]})]}),j.text&&b.jsx("span",{className:He("text-[10px] truncate leading-tight",j.className),children:j.text})]}),k!=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:He("h-full transition-all duration-500",k>=p1?"animate-[context-pulse_2s_ease-in-out_infinite]":""),style:{width:`${Math.min(k,100)}%`,backgroundColor:k>=p1?"#ef4444":k>=y4?"#f59e0b":"#22c55e"}})})]})}),b.jsx(Lt,{type:"source",position:ve.Bottom,className:"!bg-[var(--border)] !border-none !w-2 !h-2"})]})});function b4(e,n){var d;const r=(d=al()[e])==null?void 0:d.startedAt,l=fe(h=>h.replayMode),a=fe(h=>h.lastEventTime),[o,u]=V.useState("0.0s"),c=V.useRef(null);return V.useEffect(()=>{if(n==="running"){if(l){c.current&&clearInterval(c.current);const p=r??a??0;u(Jt((a??p)-p));return}const h=r!=null?r*1e3:Date.now(),m=()=>{const p=(Date.now()-h)/1e3;u(Jt(p))};return m(),c.current=setInterval(m,1e3),()=>{c.current&&clearInterval(c.current)}}else c.current&&clearInterval(c.current)},[n,r,l,a]),o}function w4(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 o=setTimeout(()=>l(""),400);return()=>clearTimeout(o)},[e]),r}const S4=V.memo(function({data:n,id:r,selected:l}){var _;const a=n,o=al(),c=((_=o[r])==null?void 0:_.status)||a.status||"pending",d=Fe[c]||Fe.pending,h=o[r],m=h==null?void 0:h.elapsed,p=h==null?void 0:h.exit_code,x=h==null?void 0:h.error_type,v=h==null?void 0:h.error_message,w=_4(r,c),E=k4(c),S=(()=>{if(c==="failed"&&v)return{text:v.length>40?v.slice(0,37)+"...":v,className:"text-red-400"};if(c==="running")return{text:w,className:"text-[var(--text-muted)]"};if(c==="completed"){const T=[];return m!=null&&T.push(Jt(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(Lt,{type:"target",position:ve.Top,className:"!bg-[var(--border)] !border-none !w-2 !h-2"}),b.jsx(Hc,{data:{status:c,elapsed:m,exitCode:p,errorType:x,errorMessage:v},children:b.jsxs("div",{className:He("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)]",c==="running"&&"shadow-[0_0_12px_var(--running-glow)]",E),style:{borderColor:d},children:[b.jsx("div",{className:He("flex items-center justify-center w-6 h-6 rounded-md flex-shrink-0",c==="running"&&"animate-pulse"),style:{backgroundColor:`${d}20`},children:b.jsx(bN,{className:"w-3.5 h-3.5",style:{color:d}})}),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}),S.text&&b.jsx("span",{className:He("text-[10px] truncate leading-tight",S.className),children:S.text})]})]})}),b.jsx(Lt,{type:"source",position:ve.Bottom,className:"!bg-[var(--border)] !border-none !w-2 !h-2"})]})});function _4(e,n){var d;const r=(d=al()[e])==null?void 0:d.startedAt,l=fe(h=>h.replayMode),a=fe(h=>h.lastEventTime),[o,u]=V.useState("0.0s"),c=V.useRef(null);return V.useEffect(()=>{if(n==="running"){if(l){c.current&&clearInterval(c.current);const p=r??a??0;u(Jt((a??p)-p));return}const h=r!=null?r*1e3:Date.now(),m=()=>{const p=(Date.now()-h)/1e3;u(Jt(p))};return m(),c.current=setInterval(m,1e3),()=>{c.current&&clearInterval(c.current)}}else c.current&&clearInterval(c.current)},[n,r,l,a]),o}function k4(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 o=setTimeout(()=>l(""),400);return()=>clearTimeout(o)},[e]),r}const E4=V.memo(function({data:n,id:r,selected:l}){var p,x;const a=n,o=al(),c=((p=o[r])==null?void 0:p.status)||a.status||"pending",d=Fe[c]||Fe.pending,h=(x=o[r])==null?void 0:x.selected_option,m=N4(c);return b.jsxs(b.Fragment,{children:[b.jsx(Lt,{type:"target",position:ve.Top,className:"!bg-[var(--border)] !border-none !w-2 !h-2"}),b.jsx(Hc,{data:{status:c,selectedOption:h},children:b.jsxs("div",{className:He("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)]",c==="waiting"&&"shadow-[0_0_12px_var(--waiting-muted)]",c==="running"&&"shadow-[0_0_12px_var(--running-glow)]",m),style:{borderColor:d},children:[b.jsx("div",{className:He("flex items-center justify-center w-6 h-6 rounded-md flex-shrink-0",c==="waiting"&&"animate-pulse"),style:{backgroundColor:`${d}20`},children:b.jsx(vN,{className:"w-3.5 h-3.5",style:{color:d}})}),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}),c==="waiting"&&b.jsx("span",{className:"text-[10px] text-[var(--waiting)] truncate leading-tight",children:"Awaiting input..."}),c==="completed"&&h&&b.jsx("span",{className:"text-[10px] text-[var(--text-muted)] truncate leading-tight",children:h})]})]})}),b.jsx(Lt,{type:"source",position:ve.Bottom,className:"!bg-[var(--border)] !border-none !w-2 !h-2"})]})});function N4(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 o=setTimeout(()=>l(""),400);return()=>clearTimeout(o)},[e]),r}const C4=V.memo(function({data:n,id:r,selected:l}){var S;const a=n,u=a.type==="for_each_group"?xN:pN,c=a.progress,m=((S=al()[r])==null?void 0:S.status)||a.status||"pending",p=Fe[m]||Fe.pending,x=T4(m),v=c?`${c.completed+c.failed}/${c.total}${c.failed>0?` (${c.failed} failed)`:""}`:null,w=c&&c.total>0?(c.completed+c.failed)/c.total*100:0,E=c!=null&&c.failed>0;return b.jsxs(b.Fragment,{children:[b.jsx(Lt,{type:"target",position:ve.Top,className:"!bg-[var(--border)] !border-none !w-2 !h-2"}),b.jsxs("div",{className:He("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)]",x),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}),c&&c.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:`${w}%`,backgroundColor:E?"var(--failed)":"var(--completed)"}})})]}),b.jsx(Lt,{type:"source",position:ve.Bottom,className:"!bg-[var(--border)] !border-none !w-2 !h-2"})]})});function T4(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 o=setTimeout(()=>l(""),400);return()=>clearTimeout(o)},[e]),r}const A4=V.memo(function({data:n,id:r,selected:l}){const a=n,u=fe(S=>{var _;return(_=S.nodes[r])==null?void 0:_.status})||a.status||"pending",c=Fe[u]||Fe.pending,d=fe(S=>{var _;return(_=S.nodes[r])==null?void 0:_.elapsed}),h=fe(S=>{var _;return(_=S.nodes[r])==null?void 0:_.error_message}),m=fe(S=>S.navigateIntoSubworkflow),p=__(),x=p.some(S=>S.parentAgent===r),v=p.find(S=>S.parentAgent===r),w=v==null?void 0:v.workflowName,E=(()=>{if(u==="failed"&&h)return{text:h.length>35?h.slice(0,32)+"...":h,className:"text-red-400"};if(u==="running")return{text:w||"Running subworkflow…",className:"text-[var(--text-muted)]"};if(u==="completed"){const S=[];return w&&S.push(w),d!=null&&S.push(`${d.toFixed(1)}s`),{text:S.join(" · ")||"Done",className:"text-[var(--text-muted)]"}}return{text:w||null,className:"text-[var(--text-muted)]"}})();return b.jsxs(b.Fragment,{children:[b.jsx(Lt,{type:"target",position:ve.Top,className:"!bg-[var(--border)] !border-none !w-2 !h-2"}),b.jsx(Hc,{data:{status:u,elapsed:d,errorType:void 0,errorMessage:h,iteration:void 0},children:b.jsxs("div",{className:He("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:c,borderStyle:"dashed"},onDoubleClick:S=>{x&&(S.stopPropagation(),m(r))},children:[b.jsx("div",{className:He("flex items-center justify-center w-6 h-6 rounded-md flex-shrink-0",u==="running"&&"animate-pulse"),style:{backgroundColor:`${c}20`},children:b.jsx(hm,{className:"w-3.5 h-3.5",style:{color:c}})}),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})}),E.text&&b.jsx("span",{className:He("text-[10px] truncate leading-tight",E.className),children:E.text})]}),x&&b.jsx(Rr,{className:"w-3.5 h-3.5 flex-shrink-0 text-[var(--text-muted)]"})]})}),b.jsx(Lt,{type:"source",position:ve.Bottom,className:"!bg-[var(--border)] !border-none !w-2 !h-2"})]})}),j4=V.memo(function({data:n,selected:r}){const a=n.status||"pending",o=a==="completed",u=a==="failed",c=!o&&!u,d=o?Fe.completed:u?Fe.failed:Fe.pending;return b.jsxs(b.Fragment,{children:[b.jsx(Lt,{type:"target",position:ve.Top,className:"!bg-[var(--border)] !border-none !w-2 !h-2"}),b.jsx("div",{className:He("flex items-center justify-center w-11 h-11 rounded-full border-2 transition-all duration-300",o?"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:d},children:o?b.jsx(Yi,{className:"w-5 h-5 text-white",strokeWidth:3}):u?b.jsx(xw,{className:"w-3.5 h-3.5 text-white",fill:"white"}):b.jsx(Yi,{className:"w-5 h-5",strokeWidth:2.5,style:{color:c?Fe.pending:d}})})]})}),z4=V.memo(function({data:n,selected:r}){const a=n.status||"pending",o=Fe[a]||Fe.pending,u=a==="running"||a==="completed";return b.jsxs(b.Fragment,{children:[b.jsx("div",{className:He("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:o},children:b.jsx(mm,{className:"w-4 h-4 ml-0.5",style:{color:u?"white":o}})}),b.jsx(Lt,{type:"source",position:ve.Bottom,className:"!bg-[var(--border)] !border-none !w-2 !h-2"})]})}),m1="#a78bfa",M4=V.memo(function({data:n,selected:r}){const l=n,a=l.status||"pending",o=a==="running"||a==="completed",u=o?m1:Fe[a]||m1,c=l.parentAgent,d=fe(h=>h.navigateUp);return b.jsxs(b.Fragment,{children:[b.jsxs("div",{className:"flex flex-col items-center gap-1",children:[b.jsx("div",{className:He("flex items-center justify-center w-11 h-11 rounded-full border-2 border-dashed transition-all duration-300 cursor-pointer",o?"bg-[#a78bfa]":"bg-[var(--node-bg)]",r&&"ring-2 ring-[var(--accent)] ring-offset-1 ring-offset-[var(--bg)]",o&&"shadow-[0_0_12px_rgba(167,139,250,0.4)]"),style:{borderColor:u},onDoubleClick:h=>{h.stopPropagation(),d()},children:b.jsx(iN,{className:"w-4 h-4",style:{color:o?"white":u}})}),c&&b.jsxs("span",{className:"text-[10px] text-[var(--text-muted)] whitespace-nowrap",children:["from ",b.jsx("span",{className:"font-medium text-[var(--text)]",children:c})]})]}),b.jsx(Lt,{type:"source",position:ve.Bottom,className:"!bg-[var(--border)] !border-none !w-2 !h-2"})]})}),g1="#a78bfa",D4=V.memo(function({data:n,selected:r}){const l=n,a=l.status||"pending",o=a==="completed",u=a==="failed",c=o?g1:u?Fe.failed:g1,d=l.parentAgent,h=fe(m=>m.navigateUp);return b.jsxs(b.Fragment,{children:[b.jsx(Lt,{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:He("flex items-center justify-center w-11 h-11 rounded-full border-2 border-dashed transition-all duration-300 cursor-pointer",o?"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:c},onDoubleClick:m=>{m.stopPropagation(),h()},children:b.jsx(lN,{className:"w-4 h-4",style:{color:o||u?"white":c}})}),d&&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:d})]})]})]})}),R4=V.memo(function({id:n,sourceX:r,sourceY:l,targetX:a,targetY:o,sourcePosition:u,targetPosition:c,source:d,target:h,data:m}){const p=E5(),x=V.useMemo(()=>p.find(P=>P.from===d&&P.to===h),[p,d,h]),[v,w,E]=zm({sourceX:r,sourceY:l,targetX:a,targetY:o,sourcePosition:u,targetPosition:c}),S=m==null?void 0:m.when,_=!!S,T=(x==null?void 0:x.state)==="taken",k=(x==null?void 0:x.state)==="highlighted",A=(x==null?void 0:x.state)==="failed";let q="var(--edge-color)",j=2,L;A?(q="var(--failed)",j=3):T?(q="var(--edge-taken)",j=3):k&&(q="var(--edge-active)",j=3),_&&!T&&!k&&!A&&(L="6 3");const O=A?"failed":T?"taken":k?"active":"default";return b.jsxs(b.Fragment,{children:[b.jsx(rs,{id:n,path:v,style:{stroke:q,strokeWidth:j,strokeDasharray:L,transition:"stroke 0.3s ease, stroke-width 0.3s ease"},markerEnd:`url(#arrow-${O})`}),_&&b.jsx(YM,{children:b.jsx("div",{className:"nodrag nopan",style:{position:"absolute",transform:`translate(-50%, -50%) translate(${w}px,${E}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:S,children:S})})}),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 O4(){const e=fe(u=>u.workflowStatus),n=fe(u=>u.workflowFailure),r=fe(u=>u.workflowFailedAgent),l=fe(u=>u.selectNode);if(e!=="failed"||!n)return null;const a=n.message||n.error_type||"Unknown error",o=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:He("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}),o&&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(fN,{className:"w-3 h-3"}),"View"]})]})})}function L4(){const[e,n]=V.useState(!1),r=fe(d=>d.workflowStatus),l=fe(d=>d.totalCost),a=fe(d=>d.totalTokens),o=fe(d=>d.agentsCompleted),u=fe(d=>d.agentsTotal),c=vw();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:He("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(sN,{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:c}),u>0&&b.jsxs("span",{children:[o,"/",u," agents"]}),a>0&&b.jsxs("span",{children:[Gn(a)," tok"]}),l>0&&b.jsx("span",{children:yi(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(xa,{className:"w-3.5 h-3.5"})})]})})}const H4={agentNode:v4,scriptNode:S4,gateNode:E4,groupNode:C4,workflowNode:A4,endNode:j4,startNode:z4,ingressNode:M4,egressNode:D4},B4={animatedEdge:R4},I4={type:"animatedEdge"};function q4(){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 U4(){const e=N5(),n=fe(z=>z.viewContextPath),r=fe(z=>z.selectNode),l=fe(z=>z.selectedNode),a=fe(z=>z.workflowStatus),o=fe(z=>z.wsStatus),u=fe(z=>z.workflowFailedAgent),c=fe(z=>z.navigateIntoSubworkflow),{agents:d,routes:h,parallelGroups:m,forEachGroups:p,nodes:x,groupProgress:v,entryPoint:w,subworkflowContexts:E,parentAgent:S}=e,[_,T,k]=XM([]),[A,q,j]=QM([]),L=V.useRef(!1),O=V.useRef(""),P=JSON.stringify(n);V.useEffect(()=>{if(d.length===0){O.current!==P&&(L.current=!1,O.current=P,T([]),q([]));return}if(O.current!==P&&(L.current=!1,O.current=P),L.current)return;L.current=!0;const{nodes:z,edges:G}=g4(d,h,m,p,x,v,w,S);T(z),q(G)},[d,h,m,p,x,v,w,T,q,P,S]),V.useEffect(()=>{L.current&&T(z=>z.map(G=>{const Q=x[G.id];if(!Q)return G;const K=Q.status||"pending",M=G.data.status;if(K!==M){const I={...G.data,status:K};return G.data.groupName&&v[G.data.groupName]&&(I.progress=v[G.data.groupName]),{...G,data:I}}if(G.data.groupName&&v[G.data.groupName]){const I=G.data.progress,Y=v[G.data.groupName];if(Y&&(!I||I.completed!==Y.completed||I.failed!==Y.failed))return{...G,data:{...G.data,progress:Y}}}return G}))},[x,v,T]);const R=V.useCallback((z,G)=>{G.type==="groupNode"&&G.data.type!=="for_each_group"||r(G.id)},[r]),H=V.useCallback((z,G)=>{E.some(K=>K.parentAgent===G.id)&&c(G.id)},[E,c]),U=V.useCallback(()=>{r(null)},[r]),ee=V.useCallback(z=>{var Q;const G=((Q=z.data)==null?void 0:Q.status)||"pending";return Fe[G]||Fe.pending},[]);V.useEffect(()=>{T(z=>z.map(G=>({...G,selected:G.id===l})))},[l,T]),V.useEffect(()=>{a==="failed"&&u&&r(u)},[a,u,r]);const B=a==="pending"&&d.length===0,F=(()=>{switch(o){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(q4,{}),b.jsx(O4,{}),b.jsx(L4,{}),B&&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(kN,{className:"w-8 h-8 text-[var(--accent)] opacity-20"}),b.jsx(Oo,{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:F})]}),b.jsxs(GM,{nodes:_,edges:A,onNodesChange:k,onEdgesChange:j,onNodeClick:R,onNodeDoubleClick:H,onPaneClick:U,nodeTypes:H4,edgeTypes:B4,defaultEdgeOptions:I4,fitView:!0,fitViewOptions:{padding:.2},minZoom:.2,maxZoom:2,proOptions:{hideAttribution:!0},nodesDraggable:!0,nodesConnectable:!1,elementsSelectable:!0,children:[b.jsx(e5,{variant:Mr.Dots,gap:20,size:1,color:"var(--border-subtle)"}),b.jsx(b5,{nodeColor:ee,maskColor:"var(--minimap-mask)",style:{background:"var(--minimap-bg)"},pannable:!0,zoomable:!0}),b.jsx(o5,{showInteractive:!1,children:b.jsx(P4,{})}),b.jsx(V4,{}),b.jsx($4,{viewPathKey:P}),b.jsx(G4,{})]})]})}function P4(){const{fitView:e}=ll(),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(mN,{className:"w-3.5 h-3.5"})})}function V4(){const{fitView:e}=ll();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 $4({viewPathKey:e}){const{fitView:n}=ll(),r=V.useRef(e);return V.useEffect(()=>{r.current!==e&&(r.current=e,setTimeout(()=>n({padding:.2,duration:300}),50))},[e,n]),null}function G4(){const e=j5();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 ol({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 j_(e){const n=[];return e.elapsed!=null&&n.push({label:"Elapsed",value:Jt(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:yi(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 nl({output:e,title:n="Output",defaultExpanded:r=!0,maxHeight:l="300px"}){const[a,o]=V.useState(r),[u,c]=V.useState(!1),d=yw(e);if(!d)return null;const h=typeof e=="object"&&e!==null,m=async()=>{await navigator.clipboard.writeText(d),c(!0),setTimeout(()=>c(!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:()=>o(!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(il,{className:"w-3 h-3"}):b.jsx(Rr,{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(Yi,{className:"w-3 h-3 text-[var(--completed)]"}):b.jsx(pw,{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:h?b.jsx(F4,{text:d}):d})]})}function F4({text:e}){const n=e.split(/("(?:[^"\\]|\\.)*")/g);return b.jsx(b.Fragment,{children:n.map((r,l)=>{if(l%2===1){const o=n.slice(l+1).join(""),u=/^\s*:/.test(o);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,(o,u,c)=>u?`${o}`:c?`${o}`:o);return b.jsx("span",{dangerouslySetInnerHTML:{__html:a}},l)})})}function Im({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(il,{className:"w-3 h-3"}):b.jsx(Rr,{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((o,u)=>b.jsx(Y4,{entry:o},u))})]})}function Y4({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:He("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:He("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 x1({node:e}){const n=e.status,r=Fe[n]||Fe.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(y1,{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(ol,{items:j_(e)}),e.prompt&&b.jsx(nl,{output:e.prompt,title:"Input / Prompt",defaultExpanded:!0}),b.jsx(Im,{activity:e.activity,defaultExpanded:n!=="completed"}),e.output!=null&&b.jsx(nl,{output:e.output,title:"Output"})]}),l&&[...e.iterationHistory].reverse().map(a=>b.jsx(y1,{label:`Iteration ${a.iteration}`,defaultExpanded:!1,status:n,snapshot:a},a.iteration))]})}function y1({label:e,defaultExpanded:n,snapshot:r,status:l}){const[a,o]=V.useState(n);return b.jsxs("div",{className:"border border-[var(--border)] rounded-lg overflow-hidden",children:[b.jsxs("button",{onClick:()=>o(!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(il,{className:"w-3.5 h-3.5 text-[var(--text-muted)] flex-shrink-0"}):b.jsx(Rr,{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:X4(r.elapsed)})]}),a&&b.jsxs("div",{className:"px-3 py-3 space-y-3 border-t border-[var(--border)]",children:[b.jsx(ol,{items:j_(r)}),r.prompt&&b.jsx(nl,{output:r.prompt,title:"Input / Prompt",defaultExpanded:!1}),b.jsx(Im,{activity:r.activity,defaultExpanded:n&&l!=="completed"}),r.output!=null&&b.jsx(nl,{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 X4(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 Q4({node:e}){const n=e.status,r=Fe[n]||Fe.pending,l=[];e.elapsed!=null&&l.push({label:"Elapsed",value:Jt(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(ol,{items:l}),a&&b.jsx(nl,{output:a,title:"Output"})]})}function Z4(e,n){const r={};return(e[e.length-1]===""?[...e,""]:e).join((r.padRight?" ":"")+","+(r.padLeft===!1?"":" ")).trim()}const K4=/^[$_\p{ID_Start}][$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,J4=/^[$_\p{ID_Start}][-$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,W4={};function v1(e,n){return(W4.jsx?J4:K4).test(e)}const eD=/[ \t\n\f\r]/g;function tD(e){return typeof e=="object"?e.type==="text"?b1(e.value):!1:b1(e)}function b1(e){return e.replace(eD,"")===""}class ls{constructor(n,r,l){this.normal=r,this.property=n,l&&(this.space=l)}}ls.prototype.normal={};ls.prototype.property={};ls.prototype.space=void 0;function z_(e,n){const r={},l={};for(const a of e)Object.assign(r,a.property),Object.assign(l,a.normal);return new ls(r,l,n)}function nm(e){return e.toLowerCase()}class cn{constructor(n,r){this.attribute=r,this.property=n}}cn.prototype.attribute="";cn.prototype.booleanish=!1;cn.prototype.boolean=!1;cn.prototype.commaOrSpaceSeparated=!1;cn.prototype.commaSeparated=!1;cn.prototype.defined=!1;cn.prototype.mustUseProperty=!1;cn.prototype.number=!1;cn.prototype.overloadedBoolean=!1;cn.prototype.property="";cn.prototype.spaceSeparated=!1;cn.prototype.space=void 0;let nD=0;const De=sl(),Tt=sl(),rm=sl(),me=sl(),st=sl(),sa=sl(),vn=sl();function sl(){return 2**++nD}const im=Object.freeze(Object.defineProperty({__proto__:null,boolean:De,booleanish:Tt,commaOrSpaceSeparated:vn,commaSeparated:sa,number:me,overloadedBoolean:rm,spaceSeparated:st},Symbol.toStringTag,{value:"Module"})),vp=Object.keys(im);class qm extends cn{constructor(n,r,l,a){let o=-1;if(super(n,r),w1(this,"space",a),typeof l=="number")for(;++o4&&r.slice(0,4)==="data"&&oD.test(n)){if(n.charAt(4)==="-"){const o=n.slice(5).replace(S1,cD);l="data"+o.charAt(0).toUpperCase()+o.slice(1)}else{const o=n.slice(4);if(!S1.test(o)){let u=o.replace(aD,uD);u.charAt(0)!=="-"&&(u="-"+u),n="data"+u}}a=qm}return new a(l,n)}function uD(e){return"-"+e.toLowerCase()}function cD(e){return e.charAt(1).toUpperCase()}const fD=z_([M_,rD,O_,L_,H_],"html"),Um=z_([M_,iD,O_,L_,H_],"svg");function dD(e){return e.join(" ").trim()}var Zl={},bp,_1;function hD(){if(_1)return bp;_1=1;var e=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//g,n=/\n/g,r=/^\s*/,l=/^(\*?[-#/*\\\w]+(\[[0-9a-z_-]+\])?)\s*/,a=/^:\s*/,o=/^((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};])+)/,u=/^[;\s]*/,c=/^\s+|\s+$/g,d=` +`,h="/",m="*",p="",x="comment",v="declaration";function w(S,_){if(typeof S!="string")throw new TypeError("First argument must be a string");if(!S)return[];_=_||{};var T=1,k=1;function A(B){var F=B.match(n);F&&(T+=F.length);var z=B.lastIndexOf(d);k=~z?B.length-z:k+B.length}function q(){var B={line:T,column:k};return function(F){return F.position=new j(B),P(),F}}function j(B){this.start=B,this.end={line:T,column:k},this.source=_.source}j.prototype.content=S;function L(B){var F=new Error(_.source+":"+T+":"+k+": "+B);if(F.reason=B,F.filename=_.source,F.line=T,F.column=k,F.source=S,!_.silent)throw F}function O(B){var F=B.exec(S);if(F){var z=F[0];return A(z),S=S.slice(z.length),F}}function P(){O(r)}function R(B){var F;for(B=B||[];F=H();)F!==!1&&B.push(F);return B}function H(){var B=q();if(!(h!=S.charAt(0)||m!=S.charAt(1))){for(var F=2;p!=S.charAt(F)&&(m!=S.charAt(F)||h!=S.charAt(F+1));)++F;if(F+=2,p===S.charAt(F-1))return L("End of comment missing");var z=S.slice(2,F-2);return k+=2,A(z),S=S.slice(F),k+=2,B({type:x,comment:z})}}function U(){var B=q(),F=O(l);if(F){if(H(),!O(a))return L("property missing ':'");var z=O(o),G=B({type:v,property:E(F[0].replace(e,p)),value:z?E(z[0].replace(e,p)):p});return O(u),G}}function ee(){var B=[];R(B);for(var F;F=U();)F!==!1&&(B.push(F),R(B));return B}return P(),ee()}function E(S){return S?S.replace(c,p):p}return bp=w,bp}var k1;function pD(){if(k1)return Zl;k1=1;var e=Zl&&Zl.__importDefault||function(l){return l&&l.__esModule?l:{default:l}};Object.defineProperty(Zl,"__esModule",{value:!0}),Zl.default=r;const n=e(hD());function r(l,a){let o=null;if(!l||typeof l!="string")return o;const u=(0,n.default)(l),c=typeof a=="function";return u.forEach(d=>{if(d.type!=="declaration")return;const{property:h,value:m}=d;c?a(h,m,d):m&&(o=o||{},o[h]=m)}),o}return Zl}var bo={},E1;function mD(){if(E1)return bo;E1=1,Object.defineProperty(bo,"__esModule",{value:!0}),bo.camelCase=void 0;var e=/^--[a-zA-Z0-9_-]+$/,n=/-([a-z])/g,r=/^[^-]+$/,l=/^-(webkit|moz|ms|o|khtml)-/,a=/^-(ms)-/,o=function(h){return!h||r.test(h)||e.test(h)},u=function(h,m){return m.toUpperCase()},c=function(h,m){return"".concat(m,"-")},d=function(h,m){return m===void 0&&(m={}),o(h)?h:(h=h.toLowerCase(),m.reactCompat?h=h.replace(a,c):h=h.replace(l,c),h.replace(n,u))};return bo.camelCase=d,bo}var wo,N1;function gD(){if(N1)return wo;N1=1;var e=wo&&wo.__importDefault||function(a){return a&&a.__esModule?a:{default:a}},n=e(pD()),r=mD();function l(a,o){var u={};return!a||typeof a!="string"||(0,n.default)(a,function(c,d){c&&d&&(u[(0,r.camelCase)(c,o)]=d)}),u}return l.default=l,wo=l,wo}var xD=gD();const yD=Qo(xD),B_=I_("end"),Pm=I_("start");function I_(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 vD(e){const n=Pm(e),r=B_(e);if(n&&r)return{start:n,end:r}}function Mo(e){return!e||typeof e!="object"?"":"position"in e||"type"in e?C1(e.position):"start"in e||"end"in e?C1(e):"line"in e||"column"in e?lm(e):""}function lm(e){return T1(e&&e.line)+":"+T1(e&&e.column)}function C1(e){return lm(e&&e.start)+"-"+lm(e&&e.end)}function T1(e){return e&&typeof e=="number"?e:1}class Xt extends Error{constructor(n,r,l){super(),typeof r=="string"&&(l=r,r=void 0);let a="",o={},u=!1;if(r&&("line"in r&&"column"in r?o={place:r}:"start"in r&&"end"in r?o={place:r}:"type"in r?o={ancestors:[r],place:r.position}:o={...r}),typeof n=="string"?a=n:!o.cause&&n&&(u=!0,a=n.message,o.cause=n),!o.ruleId&&!o.source&&typeof l=="string"){const d=l.indexOf(":");d===-1?o.ruleId=l:(o.source=l.slice(0,d),o.ruleId=l.slice(d+1))}if(!o.place&&o.ancestors&&o.ancestors){const d=o.ancestors[o.ancestors.length-1];d&&(o.place=d.position)}const c=o.place&&"start"in o.place?o.place.start:o.place;this.ancestors=o.ancestors||void 0,this.cause=o.cause||void 0,this.column=c?c.column:void 0,this.fatal=void 0,this.file="",this.message=a,this.line=c?c.line:void 0,this.name=Mo(o.place)||"1:1",this.place=o.place||void 0,this.reason=this.message,this.ruleId=o.ruleId||void 0,this.source=o.source||void 0,this.stack=u&&o.cause&&typeof o.cause.stack=="string"?o.cause.stack:"",this.actual=void 0,this.expected=void 0,this.note=void 0,this.url=void 0}}Xt.prototype.file="";Xt.prototype.name="";Xt.prototype.reason="";Xt.prototype.message="";Xt.prototype.stack="";Xt.prototype.column=void 0;Xt.prototype.line=void 0;Xt.prototype.ancestors=void 0;Xt.prototype.cause=void 0;Xt.prototype.fatal=void 0;Xt.prototype.place=void 0;Xt.prototype.ruleId=void 0;Xt.prototype.source=void 0;const Vm={}.hasOwnProperty,bD=new Map,wD=/[A-Z]/g,SD=new Set(["table","tbody","thead","tfoot","tr"]),_D=new Set(["td","th"]),q_="https://github.com/syntax-tree/hast-util-to-jsx-runtime";function kD(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=MD(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=zD(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"?Um:fD,stylePropertyNameCase:n.stylePropertyNameCase||"dom",tableCellAlignToStyle:n.tableCellAlignToStyle!==!1},o=U_(a,e,void 0);return o&&typeof o!="string"?o:a.create(e,a.Fragment,{children:o||void 0},void 0)}function U_(e,n,r){if(n.type==="element")return ED(e,n,r);if(n.type==="mdxFlowExpression"||n.type==="mdxTextExpression")return ND(e,n);if(n.type==="mdxJsxFlowElement"||n.type==="mdxJsxTextElement")return TD(e,n,r);if(n.type==="mdxjsEsm")return CD(e,n);if(n.type==="root")return AD(e,n,r);if(n.type==="text")return jD(e,n)}function ED(e,n,r){const l=e.schema;let a=l;n.tagName.toLowerCase()==="svg"&&l.space==="html"&&(a=Um,e.schema=a),e.ancestors.push(n);const o=V_(e,n.tagName,!1),u=DD(e,n);let c=Gm(e,n);return SD.has(n.tagName)&&(c=c.filter(function(d){return typeof d=="string"?!tD(d):!0})),P_(e,u,o,n),$m(u,c),e.ancestors.pop(),e.schema=l,e.create(n,o,u,r)}function ND(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)}Yo(e,n.position)}function CD(e,n){if(n.data&&n.data.estree&&e.evaluater)return e.evaluater.evaluateProgram(n.data.estree);Yo(e,n.position)}function TD(e,n,r){const l=e.schema;let a=l;n.name==="svg"&&l.space==="html"&&(a=Um,e.schema=a),e.ancestors.push(n);const o=n.name===null?e.Fragment:V_(e,n.name,!0),u=RD(e,n),c=Gm(e,n);return P_(e,u,o,n),$m(u,c),e.ancestors.pop(),e.schema=l,e.create(n,o,u,r)}function AD(e,n,r){const l={};return $m(l,Gm(e,n)),e.create(n,e.Fragment,l,r)}function jD(e,n){return n.value}function P_(e,n,r,l){typeof r!="string"&&r!==e.Fragment&&e.passNode&&(n.node=l)}function $m(e,n){if(n.length>0){const r=n.length>1?n:n[0];r&&(e.children=r)}}function zD(e,n,r){return l;function l(a,o,u,c){const h=Array.isArray(u.children)?r:n;return c?h(o,u,c):h(o,u)}}function MD(e,n){return r;function r(l,a,o,u){const c=Array.isArray(o.children),d=Pm(l);return n(a,o,u,c,{columnNumber:d?d.column-1:void 0,fileName:e,lineNumber:d?d.line:void 0},void 0)}}function DD(e,n){const r={};let l,a;for(a in n.properties)if(a!=="children"&&Vm.call(n.properties,a)){const o=OD(e,a,n.properties[a]);if(o){const[u,c]=o;e.tableCellAlignToStyle&&u==="align"&&typeof c=="string"&&_D.has(n.tagName)?l=c:r[u]=c}}if(l){const o=r.style||(r.style={});o[e.stylePropertyNameCase==="css"?"text-align":"textAlign"]=l}return r}function RD(e,n){const r={};for(const l of n.attributes)if(l.type==="mdxJsxExpressionAttribute")if(l.data&&l.data.estree&&e.evaluater){const o=l.data.estree.body[0];o.type;const u=o.expression;u.type;const c=u.properties[0];c.type,Object.assign(r,e.evaluater.evaluateExpression(c.argument))}else Yo(e,n.position);else{const a=l.name;let o;if(l.value&&typeof l.value=="object")if(l.value.data&&l.value.data.estree&&e.evaluater){const c=l.value.data.estree.body[0];c.type,o=e.evaluater.evaluateExpression(c.expression)}else Yo(e,n.position);else o=l.value===null?!0:l.value;r[a]=o}return r}function Gm(e,n){const r=[];let l=-1;const a=e.passKeys?new Map:bD;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);o0?(Sn(e,e.length,0,n),e):n}const z1={}.hasOwnProperty;function G_(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 Yn(e){return e.replace(/[\t\n\r ]+/g," ").replace(/^ | $/g,"").toLowerCase().toUpperCase()}const Kt=vi(/[A-Za-z]/),Yt=vi(/[\dA-Za-z]/),$D=vi(/[#-'*+\--9=?A-Z^-~]/);function yc(e){return e!==null&&(e<32||e===127)}const am=vi(/\d/),GD=vi(/[\dA-Fa-f]/),FD=vi(/[!-/:-@[-`{-~]/);function Ee(e){return e!==null&&e<-2}function ot(e){return e!==null&&(e<0||e===32)}function qe(e){return e===-2||e===-1||e===32}const Bc=vi(new RegExp("\\p{P}|\\p{S}","u")),rl=vi(/\s/);function vi(e){return n;function n(r){return r!==null&&r>-1&&e.test(String.fromCharCode(r))}}function va(e){const n=[];let r=-1,l=0,a=0;for(;++r55295&&o<57344){const c=e.charCodeAt(r+1);o<56320&&c>56319&&c<57344?(u=String.fromCharCode(o,c),a=1):u="�"}else u=String.fromCharCode(o);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 Qe(e,n,r,l){const a=l?l-1:Number.POSITIVE_INFINITY;let o=0;return u;function u(d){return qe(d)?(e.enter(r),c(d)):n(d)}function c(d){return qe(d)&&o++u))return;const L=n.events.length;let O=L,P,R;for(;O--;)if(n.events[O][0]==="exit"&&n.events[O][1].type==="chunkFlow"){if(P){R=n.events[O][1].end;break}P=!0}for(_(l),j=L;jk;){const q=r[A];n.containerState=q[1],q[0].exit.call(n,e)}r.length=k}function T(){a.write([null]),o=void 0,a=void 0,n.containerState._closeFlow=void 0}}function KD(e,n,r){return Qe(e,e.attempt(this.parser.constructs.document,n,r),"linePrefix",this.parser.constructs.disable.null.includes("codeIndented")?void 0:4)}function ga(e){if(e===null||ot(e)||rl(e))return 1;if(Bc(e))return 2}function Ic(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},x={...e[r][1].start};D1(p,-d),D1(x,d),u={type:d>1?"strongSequence":"emphasisSequence",start:p,end:{...e[l][1].end}},c={type:d>1?"strongSequence":"emphasisSequence",start:{...e[r][1].start},end:x},o={type:d>1?"strongText":"emphasisText",start:{...e[l][1].end},end:{...e[r][1].start}},a={type:d>1?"strong":"emphasis",start:{...u.start},end:{...c.end}},e[l][1].end={...u.start},e[r][1].start={...c.end},h=[],e[l][1].end.offset-e[l][1].start.offset&&(h=Dn(h,[["enter",e[l][1],n],["exit",e[l][1],n]])),h=Dn(h,[["enter",a,n],["enter",u,n],["exit",u,n],["enter",o,n]]),h=Dn(h,Ic(n.parser.constructs.insideSpan.null,e.slice(l+1,r),n)),h=Dn(h,[["exit",o,n],["enter",c,n],["exit",c,n],["exit",a,n]]),e[r][1].end.offset-e[r][1].start.offset?(m=2,h=Dn(h,[["enter",e[r][1],n],["exit",e[r][1],n]])):m=0,Sn(e,l-1,r-l+3,h),r=l+h.length-m-2;break}}for(r=-1;++r0&&qe(j)?Qe(e,T,"linePrefix",o+1)(j):T(j)}function T(j){return j===null||Ee(j)?e.check(R1,E,A)(j):(e.enter("codeFlowValue"),k(j))}function k(j){return j===null||Ee(j)?(e.exit("codeFlowValue"),T(j)):(e.consume(j),k)}function A(j){return e.exit("codeFenced"),n(j)}function q(j,L,O){let P=0;return R;function R(F){return j.enter("lineEnding"),j.consume(F),j.exit("lineEnding"),H}function H(F){return j.enter("codeFencedFence"),qe(F)?Qe(j,U,"linePrefix",l.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(F):U(F)}function U(F){return F===c?(j.enter("codeFencedFenceSequence"),ee(F)):O(F)}function ee(F){return F===c?(P++,j.consume(F),ee):P>=u?(j.exit("codeFencedFenceSequence"),qe(F)?Qe(j,B,"whitespace")(F):B(F)):O(F)}function B(F){return F===null||Ee(F)?(j.exit("codeFencedFence"),L(F)):O(F)}}}function uR(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"),o)}function o(u){return l.parser.lazy[l.now().line]?r(u):n(u)}}const Sp={name:"codeIndented",tokenize:fR},cR={partial:!0,tokenize:dR};function fR(e,n,r){const l=this;return a;function a(h){return e.enter("codeIndented"),Qe(e,o,"linePrefix",5)(h)}function o(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):r(h)}function u(h){return h===null?d(h):Ee(h)?e.attempt(cR,u,d)(h):(e.enter("codeFlowValue"),c(h))}function c(h){return h===null||Ee(h)?(e.exit("codeFlowValue"),u(h)):(e.consume(h),c)}function d(h){return e.exit("codeIndented"),n(h)}}function dR(e,n,r){const l=this;return a;function a(u){return l.parser.lazy[l.now().line]?r(u):Ee(u)?(e.enter("lineEnding"),e.consume(u),e.exit("lineEnding"),a):Qe(e,o,"linePrefix",5)(u)}function o(u){const c=l.events[l.events.length-1];return c&&c[1].type==="linePrefix"&&c[2].sliceSerialize(c[1],!0).length>=4?n(u):Ee(u)?a(u):r(u)}}const hR={name:"codeText",previous:mR,resolve:pR,tokenize:gR};function pR(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 o=this.right.splice(this.right.length-a,Number.POSITIVE_INFINITY);return l&&So(this.left,l),o.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),So(this.left,n)}unshift(n){this.setCursor(0),this.right.push(n)}unshiftMany(n){this.setCursor(0),So(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 K_(e,n,r,l,a,o,u,c,d){const h=d||Number.POSITIVE_INFINITY;let m=0;return p;function p(_){return _===60?(e.enter(l),e.enter(a),e.enter(o),e.consume(_),e.exit(o),x):_===null||_===32||_===41||yc(_)?r(_):(e.enter(l),e.enter(u),e.enter(c),e.enter("chunkString",{contentType:"string"}),E(_))}function x(_){return _===62?(e.enter(o),e.consume(_),e.exit(o),e.exit(a),e.exit(l),n):(e.enter(c),e.enter("chunkString",{contentType:"string"}),v(_))}function v(_){return _===62?(e.exit("chunkString"),e.exit(c),x(_)):_===null||_===60||Ee(_)?r(_):(e.consume(_),_===92?w:v)}function w(_){return _===60||_===62||_===92?(e.consume(_),v):v(_)}function E(_){return!m&&(_===null||_===41||ot(_))?(e.exit("chunkString"),e.exit(c),e.exit(u),e.exit(l),n(_)):m999||v===null||v===91||v===93&&!d||v===94&&!c&&"_hiddenFootnoteSupport"in u.parser.constructs?r(v):v===93?(e.exit(o),e.enter(a),e.consume(v),e.exit(a),e.exit(l),n):Ee(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||Ee(v)||c++>999?(e.exit("chunkString"),m(v)):(e.consume(v),d||(d=!qe(v)),v===92?x:p)}function x(v){return v===91||v===92||v===93?(e.consume(v),c++,p):p(v)}}function W_(e,n,r,l,a,o){let u;return c;function c(x){return x===34||x===39||x===40?(e.enter(l),e.enter(a),e.consume(x),e.exit(a),u=x===40?41:x,d):r(x)}function d(x){return x===u?(e.enter(a),e.consume(x),e.exit(a),e.exit(l),n):(e.enter(o),h(x))}function h(x){return x===u?(e.exit(o),d(u)):x===null?r(x):Ee(x)?(e.enter("lineEnding"),e.consume(x),e.exit("lineEnding"),Qe(e,h,"linePrefix")):(e.enter("chunkString",{contentType:"string"}),m(x))}function m(x){return x===u||x===null||Ee(x)?(e.exit("chunkString"),h(x)):(e.consume(x),x===92?p:m)}function p(x){return x===u||x===92?(e.consume(x),m):m(x)}}function Do(e,n){let r;return l;function l(a){return Ee(a)?(e.enter("lineEnding"),e.consume(a),e.exit("lineEnding"),r=!0,l):qe(a)?Qe(e,l,r?"linePrefix":"lineSuffix")(a):n(a)}}const kR={name:"definition",tokenize:NR},ER={partial:!0,tokenize:CR};function NR(e,n,r){const l=this;let a;return o;function o(v){return e.enter("definition"),u(v)}function u(v){return J_.call(l,e,c,r,"definitionLabel","definitionLabelMarker","definitionLabelString")(v)}function c(v){return a=Yn(l.sliceSerialize(l.events[l.events.length-1][1]).slice(1,-1)),v===58?(e.enter("definitionMarker"),e.consume(v),e.exit("definitionMarker"),d):r(v)}function d(v){return ot(v)?Do(e,h)(v):h(v)}function h(v){return K_(e,m,r,"definitionDestination","definitionDestinationLiteral","definitionDestinationLiteralMarker","definitionDestinationRaw","definitionDestinationString")(v)}function m(v){return e.attempt(ER,p,p)(v)}function p(v){return qe(v)?Qe(e,x,"whitespace")(v):x(v)}function x(v){return v===null||Ee(v)?(e.exit("definition"),l.parser.defined.push(a),n(v)):r(v)}}function CR(e,n,r){return l;function l(c){return ot(c)?Do(e,a)(c):r(c)}function a(c){return W_(e,o,r,"definitionTitle","definitionTitleMarker","definitionTitleString")(c)}function o(c){return qe(c)?Qe(e,u,"whitespace")(c):u(c)}function u(c){return c===null||Ee(c)?n(c):r(c)}}const TR={name:"hardBreakEscape",tokenize:AR};function AR(e,n,r){return l;function l(o){return e.enter("hardBreakEscape"),e.consume(o),a}function a(o){return Ee(o)?(e.exit("hardBreakEscape"),n(o)):r(o)}}const jR={name:"headingAtx",resolve:zR,tokenize:MR};function zR(e,n){let r=e.length-2,l=3,a,o;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},o={type:"chunkText",start:e[l][1].start,end:e[r][1].end,contentType:"text"},Sn(e,l,r-l+1,[["enter",a,n],["enter",o,n],["exit",o,n],["exit",a,n]])),e}function MR(e,n,r){let l=0;return a;function a(m){return e.enter("atxHeading"),o(m)}function o(m){return e.enter("atxHeadingSequence"),u(m)}function u(m){return m===35&&l++<6?(e.consume(m),u):m===null||ot(m)?(e.exit("atxHeadingSequence"),c(m)):r(m)}function c(m){return m===35?(e.enter("atxHeadingSequence"),d(m)):m===null||Ee(m)?(e.exit("atxHeading"),n(m)):qe(m)?Qe(e,c,"whitespace")(m):(e.enter("atxHeadingText"),h(m))}function d(m){return m===35?(e.consume(m),d):(e.exit("atxHeadingSequence"),c(m))}function h(m){return m===null||m===35||ot(m)?(e.exit("atxHeadingText"),c(m)):(e.consume(m),h)}}const DR=["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"],L1=["pre","script","style","textarea"],RR={concrete:!0,name:"htmlFlow",resolveTo:HR,tokenize:BR},OR={partial:!0,tokenize:qR},LR={partial:!0,tokenize:IR};function HR(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 BR(e,n,r){const l=this;let a,o,u,c,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),x):N===47?(e.consume(N),o=!0,E):N===63?(e.consume(N),a=3,l.interrupt?n:M):Kt(N)?(e.consume(N),u=String.fromCharCode(N),S):r(N)}function x(N){return N===45?(e.consume(N),a=2,v):N===91?(e.consume(N),a=5,c=0,w):Kt(N)?(e.consume(N),a=4,l.interrupt?n:M):r(N)}function v(N){return N===45?(e.consume(N),l.interrupt?n:M):r(N)}function w(N){const $="CDATA[";return N===$.charCodeAt(c++)?(e.consume(N),c===$.length?l.interrupt?n:U:w):r(N)}function E(N){return Kt(N)?(e.consume(N),u=String.fromCharCode(N),S):r(N)}function S(N){if(N===null||N===47||N===62||ot(N)){const $=N===47,X=u.toLowerCase();return!$&&!o&&L1.includes(X)?(a=1,l.interrupt?n(N):U(N)):DR.includes(u.toLowerCase())?(a=6,$?(e.consume(N),_):l.interrupt?n(N):U(N)):(a=7,l.interrupt&&!l.parser.lazy[l.now().line]?r(N):o?T(N):k(N))}return N===45||Yt(N)?(e.consume(N),u+=String.fromCharCode(N),S):r(N)}function _(N){return N===62?(e.consume(N),l.interrupt?n:U):r(N)}function T(N){return qe(N)?(e.consume(N),T):R(N)}function k(N){return N===47?(e.consume(N),R):N===58||N===95||Kt(N)?(e.consume(N),A):qe(N)?(e.consume(N),k):R(N)}function A(N){return N===45||N===46||N===58||N===95||Yt(N)?(e.consume(N),A):q(N)}function q(N){return N===61?(e.consume(N),j):qe(N)?(e.consume(N),q):k(N)}function j(N){return N===null||N===60||N===61||N===62||N===96?r(N):N===34||N===39?(e.consume(N),d=N,L):qe(N)?(e.consume(N),j):O(N)}function L(N){return N===d?(e.consume(N),d=null,P):N===null||Ee(N)?r(N):(e.consume(N),L)}function O(N){return N===null||N===34||N===39||N===47||N===60||N===61||N===62||N===96||ot(N)?q(N):(e.consume(N),O)}function P(N){return N===47||N===62||qe(N)?k(N):r(N)}function R(N){return N===62?(e.consume(N),H):r(N)}function H(N){return N===null||Ee(N)?U(N):qe(N)?(e.consume(N),H):r(N)}function U(N){return N===45&&a===2?(e.consume(N),z):N===60&&a===1?(e.consume(N),G):N===62&&a===4?(e.consume(N),I):N===63&&a===3?(e.consume(N),M):N===93&&a===5?(e.consume(N),K):Ee(N)&&(a===6||a===7)?(e.exit("htmlFlowData"),e.check(OR,Y,ee)(N)):N===null||Ee(N)?(e.exit("htmlFlowData"),ee(N)):(e.consume(N),U)}function ee(N){return e.check(LR,B,Y)(N)}function B(N){return e.enter("lineEnding"),e.consume(N),e.exit("lineEnding"),F}function F(N){return N===null||Ee(N)?ee(N):(e.enter("htmlFlowData"),U(N))}function z(N){return N===45?(e.consume(N),M):U(N)}function G(N){return N===47?(e.consume(N),u="",Q):U(N)}function Q(N){if(N===62){const $=u.toLowerCase();return L1.includes($)?(e.consume(N),I):U(N)}return Kt(N)&&u.length<8?(e.consume(N),u+=String.fromCharCode(N),Q):U(N)}function K(N){return N===93?(e.consume(N),M):U(N)}function M(N){return N===62?(e.consume(N),I):N===45&&a===2?(e.consume(N),M):U(N)}function I(N){return N===null||Ee(N)?(e.exit("htmlFlowData"),Y(N)):(e.consume(N),I)}function Y(N){return e.exit("htmlFlow"),n(N)}}function IR(e,n,r){const l=this;return a;function a(u){return Ee(u)?(e.enter("lineEnding"),e.consume(u),e.exit("lineEnding"),o):r(u)}function o(u){return l.parser.lazy[l.now().line]?r(u):n(u)}}function qR(e,n,r){return l;function l(a){return e.enter("lineEnding"),e.consume(a),e.exit("lineEnding"),e.attempt(as,n,r)}}const UR={name:"htmlText",tokenize:PR};function PR(e,n,r){const l=this;let a,o,u;return c;function c(M){return e.enter("htmlText"),e.enter("htmlTextData"),e.consume(M),d}function d(M){return M===33?(e.consume(M),h):M===47?(e.consume(M),q):M===63?(e.consume(M),k):Kt(M)?(e.consume(M),O):r(M)}function h(M){return M===45?(e.consume(M),m):M===91?(e.consume(M),o=0,w):Kt(M)?(e.consume(M),T):r(M)}function m(M){return M===45?(e.consume(M),v):r(M)}function p(M){return M===null?r(M):M===45?(e.consume(M),x):Ee(M)?(u=p,G(M)):(e.consume(M),p)}function x(M){return M===45?(e.consume(M),v):p(M)}function v(M){return M===62?z(M):M===45?x(M):p(M)}function w(M){const I="CDATA[";return M===I.charCodeAt(o++)?(e.consume(M),o===I.length?E:w):r(M)}function E(M){return M===null?r(M):M===93?(e.consume(M),S):Ee(M)?(u=E,G(M)):(e.consume(M),E)}function S(M){return M===93?(e.consume(M),_):E(M)}function _(M){return M===62?z(M):M===93?(e.consume(M),_):E(M)}function T(M){return M===null||M===62?z(M):Ee(M)?(u=T,G(M)):(e.consume(M),T)}function k(M){return M===null?r(M):M===63?(e.consume(M),A):Ee(M)?(u=k,G(M)):(e.consume(M),k)}function A(M){return M===62?z(M):k(M)}function q(M){return Kt(M)?(e.consume(M),j):r(M)}function j(M){return M===45||Yt(M)?(e.consume(M),j):L(M)}function L(M){return Ee(M)?(u=L,G(M)):qe(M)?(e.consume(M),L):z(M)}function O(M){return M===45||Yt(M)?(e.consume(M),O):M===47||M===62||ot(M)?P(M):r(M)}function P(M){return M===47?(e.consume(M),z):M===58||M===95||Kt(M)?(e.consume(M),R):Ee(M)?(u=P,G(M)):qe(M)?(e.consume(M),P):z(M)}function R(M){return M===45||M===46||M===58||M===95||Yt(M)?(e.consume(M),R):H(M)}function H(M){return M===61?(e.consume(M),U):Ee(M)?(u=H,G(M)):qe(M)?(e.consume(M),H):P(M)}function U(M){return M===null||M===60||M===61||M===62||M===96?r(M):M===34||M===39?(e.consume(M),a=M,ee):Ee(M)?(u=U,G(M)):qe(M)?(e.consume(M),U):(e.consume(M),B)}function ee(M){return M===a?(e.consume(M),a=void 0,F):M===null?r(M):Ee(M)?(u=ee,G(M)):(e.consume(M),ee)}function B(M){return M===null||M===34||M===39||M===60||M===61||M===96?r(M):M===47||M===62||ot(M)?P(M):(e.consume(M),B)}function F(M){return M===47||M===62||ot(M)?P(M):r(M)}function z(M){return M===62?(e.consume(M),e.exit("htmlTextData"),e.exit("htmlText"),n):r(M)}function G(M){return e.exit("htmlTextData"),e.enter("lineEnding"),e.consume(M),e.exit("lineEnding"),Q}function Q(M){return qe(M)?Qe(e,K,"linePrefix",l.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(M):K(M)}function K(M){return e.enter("htmlTextData"),u(M)}}const Xm={name:"labelEnd",resolveAll:FR,resolveTo:YR,tokenize:XR},VR={tokenize:QR},$R={tokenize:ZR},GR={tokenize:KR};function FR(e){let n=-1;const r=[];for(;++n=3&&(h===null||Ee(h))?(e.exit("thematicBreak"),n(h)):r(h)}function d(h){return h===a?(e.consume(h),l++,d):(e.exit("thematicBreakSequence"),qe(h)?Qe(e,c,"whitespace")(h):c(h))}}const sn={continuation:{tokenize:oO},exit:uO,name:"list",tokenize:aO},iO={partial:!0,tokenize:cO},lO={partial:!0,tokenize:sO};function aO(e,n,r){const l=this,a=l.events[l.events.length-1];let o=a&&a[1].type==="linePrefix"?a[2].sliceSerialize(a[1],!0).length:0,u=0;return c;function c(v){const w=l.containerState.type||(v===42||v===43||v===45?"listUnordered":"listOrdered");if(w==="listUnordered"?!l.containerState.marker||v===l.containerState.marker:am(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(nc,r,h)(v):h(v);if(!l.interrupt||v===49)return e.enter("listItemPrefix"),e.enter("listItemValue"),d(v)}return r(v)}function d(v){return am(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)):r(v)}function h(v){return e.enter("listItemMarker"),e.consume(v),e.exit("listItemMarker"),l.containerState.marker=l.containerState.marker||v,e.check(as,l.interrupt?r:m,e.attempt(iO,x,p))}function m(v){return l.containerState.initialBlankLine=!0,o++,x(v)}function p(v){return qe(v)?(e.enter("listItemPrefixWhitespace"),e.consume(v),e.exit("listItemPrefixWhitespace"),x):r(v)}function x(v){return l.containerState.size=o+l.sliceSerialize(e.exit("listItemPrefix"),!0).length,n(v)}}function oO(e,n,r){const l=this;return l.containerState._closeFlow=void 0,e.check(as,a,o);function a(c){return l.containerState.furtherBlankLines=l.containerState.furtherBlankLines||l.containerState.initialBlankLine,Qe(e,n,"listItemIndent",l.containerState.size+1)(c)}function o(c){return l.containerState.furtherBlankLines||!qe(c)?(l.containerState.furtherBlankLines=void 0,l.containerState.initialBlankLine=void 0,u(c)):(l.containerState.furtherBlankLines=void 0,l.containerState.initialBlankLine=void 0,e.attempt(lO,n,u)(c))}function u(c){return l.containerState._closeFlow=!0,l.interrupt=void 0,Qe(e,e.attempt(sn,n,r),"linePrefix",l.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(c)}}function sO(e,n,r){const l=this;return Qe(e,a,"listItemIndent",l.containerState.size+1);function a(o){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(o):r(o)}}function uO(e){e.exit(this.containerState.type)}function cO(e,n,r){const l=this;return Qe(e,a,"listItemPrefixWhitespace",l.parser.constructs.disable.null.includes("codeIndented")?void 0:5);function a(o){const u=l.events[l.events.length-1];return!qe(o)&&u&&u[1].type==="listItemPrefixWhitespace"?n(o):r(o)}}const H1={name:"setextUnderline",resolveTo:fO,tokenize:dO};function fO(e,n){let r=e.length,l,a,o;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),!o&&e[r][1].type==="definition"&&(o=r);const u={type:"setextHeading",start:{...e[l][1].start},end:{...e[e.length-1][1].end}};return e[a][1].type="setextHeadingText",o?(e.splice(a,0,["enter",u,n]),e.splice(o+1,0,["exit",e[l][1],n]),e[l][1].end={...e[o][1].end}):e[l][1]=u,e.push(["exit",u,n]),e}function dO(e,n,r){const l=this;let a;return o;function o(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"),a=h,u(h)):r(h)}function u(h){return e.enter("setextHeadingLineSequence"),c(h)}function c(h){return h===a?(e.consume(h),c):(e.exit("setextHeadingLineSequence"),qe(h)?Qe(e,d,"lineSuffix")(h):d(h))}function d(h){return h===null||Ee(h)?(e.exit("setextHeadingLine"),n(h)):r(h)}}const hO={tokenize:pO};function pO(e){const n=this,r=e.attempt(as,l,e.attempt(this.parser.constructs.flowInitial,a,Qe(e,e.attempt(this.parser.constructs.flow,a,e.attempt(vR,a)),"linePrefix")));return r;function l(o){if(o===null){e.consume(o);return}return e.enter("lineEndingBlank"),e.consume(o),e.exit("lineEndingBlank"),n.currentConstruct=void 0,r}function a(o){if(o===null){e.consume(o);return}return e.enter("lineEnding"),e.consume(o),e.exit("lineEnding"),n.currentConstruct=void 0,r}}const mO={resolveAll:tk()},gO=ek("string"),xO=ek("text");function ek(e){return{resolveAll:tk(e==="text"?yO:void 0),tokenize:n};function n(r){const l=this,a=this.parser.constructs[e],o=r.attempt(a,u,c);return u;function u(m){return h(m)?o(m):c(m)}function c(m){if(m===null){r.consume(m);return}return r.enter("data"),r.consume(m),d}function d(m){return h(m)?(r.exit("data"),o(m)):(r.consume(m),d)}function h(m){if(m===null)return!0;const p=a[m];let x=-1;if(p)for(;++x-1){const c=u[0];typeof c=="string"?u[0]=c.slice(l):u.shift()}o>0&&u.push(e[a].slice(0,o))}return u}function zO(e,n){let r=-1;const l=[];let a;for(;++r0){const Qt=Ne.tokenStack[Ne.tokenStack.length-1];(Qt[1]||I1).call(Ne,void 0,Qt[0])}for(ge.position={start:mi(ue.length>0?ue[0][1].start:{line:1,column:1,offset:0}),end:mi(ue.length>0?ue[ue.length-2][1].end:{line:1,column:1,offset:0})},Xe=-1;++Xe0&&(l.className=["language-"+a[0]]);let o={type:"element",tagName:"code",properties:l,children:[{type:"text",value:r}]};return n.meta&&(o.data={meta:n.meta}),e.patch(n,o),o=e.applyData(n,o),o={type:"element",tagName:"pre",properties:{},children:[o]},e.patch(n,o),o}function GO(e,n){const r={type:"element",tagName:"del",properties:{},children:e.all(n)};return e.patch(n,r),e.applyData(n,r)}function FO(e,n){const r={type:"element",tagName:"em",properties:{},children:e.all(n)};return e.patch(n,r),e.applyData(n,r)}function YO(e,n){const r=typeof e.options.clobberPrefix=="string"?e.options.clobberPrefix:"user-content-",l=String(n.identifier).toUpperCase(),a=va(l.toLowerCase()),o=e.footnoteOrder.indexOf(l);let u,c=e.footnoteCounts.get(l);c===void 0?(c=0,e.footnoteOrder.push(l),u=e.footnoteOrder.length):u=o+1,c+=1,e.footnoteCounts.set(l,c);const d={type:"element",tagName:"a",properties:{href:"#"+r+"fn-"+a,id:r+"fnref-"+a+(c>1?"-"+c:""),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 XO(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 QO(e,n){if(e.options.allowDangerousHtml){const r={type:"raw",value:n.value};return e.patch(n,r),e.applyData(n,r)}}function ik(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),o=a[0];o&&o.type==="text"?o.value="["+o.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 ZO(e,n){const r=String(n.identifier).toUpperCase(),l=e.definitionById.get(r);if(!l)return ik(e,n);const a={src:va(l.url||""),alt:n.alt};l.title!==null&&l.title!==void 0&&(a.title=l.title);const o={type:"element",tagName:"img",properties:a,children:[]};return e.patch(n,o),e.applyData(n,o)}function KO(e,n){const r={src:va(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 JO(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 WO(e,n){const r=String(n.identifier).toUpperCase(),l=e.definitionById.get(r);if(!l)return ik(e,n);const a={href:va(l.url||"")};l.title!==null&&l.title!==void 0&&(a.title=l.title);const o={type:"element",tagName:"a",properties:a,children:e.all(n)};return e.patch(n,o),e.applyData(n,o)}function e6(e,n){const r={href:va(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 t6(e,n,r){const l=e.all(n),a=r?n6(r):lk(n),o={},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:[]}),o.className=["task-list-item"]}let c=-1;for(;++c1}function r6(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)},c=Pm(n.children[1]),d=B_(n.children[n.children.length-1]);c&&d&&(u.position={start:c,end:d}),a.push(u)}const o={type:"element",tagName:"table",properties:{},children:e.wrap(a,!0)};return e.patch(n,o),e.applyData(n,o)}function s6(e,n,r){const l=r?r.children:void 0,o=(l?l.indexOf(n):1)===0?"th":"td",u=r&&r.type==="table"?r.align:void 0,c=u?u.length:n.children.length;let d=-1;const h=[];for(;++d0,!0),l[0]),a=l.index+l[0].length,l=r.exec(n);return o.push(P1(n.slice(a),a>0,!1)),o.join("")}function P1(e,n,r){let l=0,a=e.length;if(n){let o=e.codePointAt(l);for(;o===q1||o===U1;)l++,o=e.codePointAt(l)}if(r){let o=e.codePointAt(a-1);for(;o===q1||o===U1;)a--,o=e.codePointAt(a-1)}return a>l?e.slice(l,a):""}function f6(e,n){const r={type:"text",value:c6(String(n.value))};return e.patch(n,r),e.applyData(n,r)}function d6(e,n){const r={type:"element",tagName:"hr",properties:{},children:[]};return e.patch(n,r),e.applyData(n,r)}const h6={blockquote:PO,break:VO,code:$O,delete:GO,emphasis:FO,footnoteReference:YO,heading:XO,html:QO,imageReference:ZO,image:KO,inlineCode:JO,linkReference:WO,link:e6,listItem:t6,list:r6,paragraph:i6,root:l6,strong:a6,table:o6,tableCell:u6,tableRow:s6,text:f6,thematicBreak:d6,toml:Gu,yaml:Gu,definition:Gu,footnoteDefinition:Gu};function Gu(){}const ak=-1,qc=0,Ro=1,vc=2,Qm=3,Zm=4,Km=5,Jm=6,ok=7,sk=8,V1=typeof self=="object"?self:globalThis,p6=(e,n)=>{const r=(a,o)=>(e.set(o,a),a),l=a=>{if(e.has(a))return e.get(a);const[o,u]=n[a];switch(o){case qc:case ak:return r(u,a);case Ro:{const c=r([],a);for(const d of u)c.push(l(d));return c}case vc:{const c=r({},a);for(const[d,h]of u)c[l(d)]=l(h);return c}case Qm:return r(new Date(u),a);case Zm:{const{source:c,flags:d}=u;return r(new RegExp(c,d),a)}case Km:{const c=r(new Map,a);for(const[d,h]of u)c.set(l(d),l(h));return c}case Jm:{const c=r(new Set,a);for(const d of u)c.add(l(d));return c}case ok:{const{name:c,message:d}=u;return r(new V1[c](d),a)}case sk: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:c}=new Uint8Array(u);return r(new DataView(c),u)}}return r(new V1[o](u),a)};return l},$1=e=>p6(new Map,e)(0),Kl="",{toString:m6}={},{keys:g6}=Object,_o=e=>{const n=typeof e;if(n!=="object"||!e)return[qc,n];const r=m6.call(e).slice(8,-1);switch(r){case"Array":return[Ro,Kl];case"Object":return[vc,Kl];case"Date":return[Qm,Kl];case"RegExp":return[Zm,Kl];case"Map":return[Km,Kl];case"Set":return[Jm,Kl];case"DataView":return[Ro,r]}return r.includes("Array")?[Ro,r]:r.includes("Error")?[ok,r]:[vc,r]},Fu=([e,n])=>e===qc&&(n==="function"||n==="symbol"),x6=(e,n,r,l)=>{const a=(u,c)=>{const d=l.push(u)-1;return r.set(c,d),d},o=u=>{if(r.has(u))return r.get(u);let[c,d]=_o(u);switch(c){case qc:{let m=u;switch(d){case"bigint":c=sk,m=u.toString();break;case"function":case"symbol":if(e)throw new TypeError("unable to serialize "+d);m=null;break;case"undefined":return a([ak],u)}return a([c,m],u)}case Ro:{if(d){let x=u;return d==="DataView"?x=new Uint8Array(u.buffer):d==="ArrayBuffer"&&(x=new Uint8Array(u)),a([d,[...x]],u)}const m=[],p=a([c,m],u);for(const x of u)m.push(o(x));return p}case vc:{if(d)switch(d){case"BigInt":return a([d,u.toString()],u);case"Boolean":case"Number":case"String":return a([d,u.valueOf()],u)}if(n&&"toJSON"in u)return o(u.toJSON());const m=[],p=a([c,m],u);for(const x of g6(u))(e||!Fu(_o(u[x])))&&m.push([o(x),o(u[x])]);return p}case Qm:return a([c,u.toISOString()],u);case Zm:{const{source:m,flags:p}=u;return a([c,{source:m,flags:p}],u)}case Km:{const m=[],p=a([c,m],u);for(const[x,v]of u)(e||!(Fu(_o(x))||Fu(_o(v))))&&m.push([o(x),o(v)]);return p}case Jm:{const m=[],p=a([c,m],u);for(const x of u)(e||!Fu(_o(x)))&&m.push(o(x));return p}}const{message:h}=u;return a([c,{name:d,message:h}],u)};return o},G1=(e,{json:n,lossy:r}={})=>{const l=[];return x6(!(n||r),!!n,new Map,l)(e),l},bc=typeof structuredClone=="function"?(e,n)=>n&&("json"in n||"lossy"in n)?$1(G1(e,n)):structuredClone(e):(e,n)=>$1(G1(e,n));function y6(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 v6(e,n){return"Back to reference "+(e+1)+(n>1?"-"+n:"")}function b6(e){const n=typeof e.options.clobberPrefix=="string"?e.options.clobberPrefix:"user-content-",r=e.options.footnoteBackContent||y6,l=e.options.footnoteBackLabel||v6,a=e.options.footnoteLabel||"Footnotes",o=e.options.footnoteLabelTagName||"h2",u=e.options.footnoteLabelProperties||{className:["sr-only"]},c=[];let d=-1;for(;++d0&&w.push({type:"text",value:" "});let T=typeof r=="string"?r:r(d,v);typeof T=="string"&&(T={type:"text",value:T}),w.push({type:"element",tagName:"a",properties:{href:"#"+n+"fnref-"+x+(v>1?"-"+v:""),dataFootnoteBackref:"",ariaLabel:typeof l=="string"?l:l(d,v),className:["data-footnote-backref"]},children:Array.isArray(T)?T:[T]})}const S=m[m.length-1];if(S&&S.type==="element"&&S.tagName==="p"){const T=S.children[S.children.length-1];T&&T.type==="text"?T.value+=" ":S.children.push({type:"text",value:" "}),S.children.push(...w)}else m.push(...w);const _={type:"element",tagName:"li",properties:{id:n+"fn-"+x},children:e.wrap(m,!0)};e.patch(h,_),c.push(_)}if(c.length!==0)return{type:"element",tagName:"section",properties:{dataFootnotes:!0,className:["footnotes"]},children:[{type:"element",tagName:o,properties:{...bc(u),id:"footnote-label"},children:[{type:"text",value:a}]},{type:"text",value:` +`},{type:"element",tagName:"ol",properties:{},children:e.wrap(c,!0)},{type:"text",value:` +`}]}}const Uc=(function(e){if(e==null)return k6;if(typeof e=="function")return Pc(e);if(typeof e=="object")return Array.isArray(e)?w6(e):S6(e);if(typeof e=="string")return _6(e);throw new Error("Expected function, string, or object as test")});function w6(e){const n=[];let r=-1;for(;++r":""))+")"})}return x;function x(){let v=uk,w,E,S;if((!n||o(d,h,m[m.length-1]||void 0))&&(v=T6(r(d,m)),v[0]===sm))return v;if("children"in d&&d.children){const _=d;if(_.children&&v[0]!==C6)for(E=(l?_.children.length:-1)+u,S=m.concat(_);E>-1&&E<_.children.length;){const T=_.children[E];if(w=c(T,E,S)(),w[0]===sm)return w;E=typeof w[1]=="number"?w[1]:E+u}}return v}}}function T6(e){return Array.isArray(e)?e:typeof e=="number"?[N6,e]:e==null?uk:[e]}function Wm(e,n,r,l){let a,o,u;typeof n=="function"&&typeof r!="function"?(o=void 0,u=n,a=r):(o=n,u=r,a=l),ck(e,o,c,a);function c(d,h){const m=h[h.length-1],p=m?m.children.indexOf(d):void 0;return u(d,p,m)}}const um={}.hasOwnProperty,A6={};function j6(e,n){const r=n||A6,l=new Map,a=new Map,o=new Map,u={...h6,...r.handlers},c={all:h,applyData:M6,definitionById:l,footnoteById:a,footnoteCounts:o,footnoteOrder:[],handlers:u,one:d,options:r,patch:z6,wrap:R6};return Wm(e,function(m){if(m.type==="definition"||m.type==="footnoteDefinition"){const p=m.type==="definition"?l:a,x=String(m.identifier).toUpperCase();p.has(x)||p.set(x,m)}}),c;function d(m,p){const x=m.type,v=c.handlers[x];if(um.call(c.handlers,x)&&v)return v(c,m,p);if(c.options.passThrough&&c.options.passThrough.includes(x)){if("children"in m){const{children:E,...S}=m,_=bc(S);return _.children=c.all(m),_}return bc(m)}return(c.options.unknownHandler||D6)(c,m,p)}function h(m){const p=[];if("children"in m){const x=m.children;let v=-1;for(;++v0&&r.push({type:"text",value:` +`}),r}function F1(e){let n=0,r=e.charCodeAt(n);for(;r===9||r===32;)n++,r=e.charCodeAt(n);return e.slice(n)}function Y1(e,n){const r=j6(e,n),l=r.one(e,void 0),a=b6(r),o=Array.isArray(l)?{type:"root",children:l}:l||{type:"root",children:[]};return a&&o.children.push({type:"text",value:` +`},a),o}function O6(e,n){return e&&"run"in e?async function(r,l){const a=Y1(r,{file:l,...n});await e.run(a,l)}:function(r,l){return Y1(r,{file:l,...e||n})}}function X1(e){if(e)throw e}var kp,Q1;function L6(){if(Q1)return kp;Q1=1;var e=Object.prototype.hasOwnProperty,n=Object.prototype.toString,r=Object.defineProperty,l=Object.getOwnPropertyDescriptor,a=function(h){return typeof Array.isArray=="function"?Array.isArray(h):n.call(h)==="[object Array]"},o=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 x;for(x in h);return typeof x>"u"||e.call(h,x)},u=function(h,m){r&&m.name==="__proto__"?r(h,m.name,{enumerable:!0,configurable:!0,value:m.newValue,writable:!0}):h[m.name]=m.newValue},c=function(h,m){if(m==="__proto__")if(e.call(h,m)){if(l)return l(h,m).value}else return;return h[m]};return kp=function d(){var h,m,p,x,v,w,E=arguments[0],S=1,_=arguments.length,T=!1;for(typeof E=="boolean"&&(T=E,E=arguments[1]||{},S=2),(E==null||typeof E!="object"&&typeof E!="function")&&(E={});S<_;++S)if(h=arguments[S],h!=null)for(m in h)p=c(E,m),x=c(h,m),E!==x&&(T&&x&&(o(x)||(v=a(x)))?(v?(v=!1,w=p&&a(p)?p:[]):w=p&&o(p)?p:{},u(E,{name:m,newValue:d(T,w,x)})):typeof x<"u"&&u(E,{name:m,newValue:x}));return E},kp}var H6=L6();const Ep=Qo(H6);function cm(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 B6(){const e=[],n={run:r,use:l};return n;function r(...a){let o=-1;const u=a.pop();if(typeof u!="function")throw new TypeError("Expected function as last argument, not "+u);c(null,...a);function c(d,...h){const m=e[++o];let p=-1;if(d){u(d);return}for(;++pu.length;let d;c&&u.push(a);try{d=e.apply(this,u)}catch(h){const m=h;if(c&&r)throw m;return a(m)}c||(d&&d.then&&typeof d.then=="function"?d.then(o,a):d instanceof Error?a(d):o(d))}function a(u,...c){r||(r=!0,n(u,...c))}function o(u){a(null,u)}}const nr={basename:q6,dirname:U6,extname:P6,join:V6,sep:"/"};function q6(e,n){if(n!==void 0&&typeof n!="string")throw new TypeError('"ext" argument must be a string');os(e);let r=0,l=-1,a=e.length,o;if(n===void 0||n.length===0||n.length>e.length){for(;a--;)if(e.codePointAt(a)===47){if(o){r=a+1;break}}else l<0&&(o=!0,l=a+1);return l<0?"":e.slice(r,l)}if(n===e)return"";let u=-1,c=n.length-1;for(;a--;)if(e.codePointAt(a)===47){if(o){r=a+1;break}}else u<0&&(o=!0,u=a+1),c>-1&&(e.codePointAt(a)===n.codePointAt(c--)?c<0&&(l=a):(c=-1,l=u));return r===l?l=u:l<0&&(l=e.length),e.slice(r,l)}function U6(e){if(os(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 P6(e){os(e);let n=e.length,r=-1,l=0,a=-1,o=0,u;for(;n--;){const c=e.codePointAt(n);if(c===47){if(u){l=n+1;break}continue}r<0&&(u=!0,r=n+1),c===46?a<0?a=n:o!==1&&(o=1):a>-1&&(o=-1)}return a<0||r<0||o===0||o===1&&a===r-1&&a===l+1?"":e.slice(a,r)}function V6(...e){let n=-1,r;for(;++n0&&e.codePointAt(e.length-1)===47&&(r+="/"),n?"/"+r:r}function G6(e,n){let r="",l=0,a=-1,o=0,u=-1,c,d;for(;++u<=e.length;){if(u2){if(d=r.lastIndexOf("/"),d!==r.length-1){d<0?(r="",l=0):(r=r.slice(0,d),l=r.length-1-r.lastIndexOf("/")),a=u,o=0;continue}}else if(r.length>0){r="",l=0,a=u,o=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,o=0}else c===46&&o>-1?o++:o=-1}return r}function os(e){if(typeof e!="string")throw new TypeError("Path must be a string. Received "+JSON.stringify(e))}const F6={cwd:Y6};function Y6(){return"/"}function fm(e){return!!(e!==null&&typeof e=="object"&&"href"in e&&e.href&&"protocol"in e&&e.protocol&&e.auth===void 0)}function X6(e){if(typeof e=="string")e=new URL(e);else if(!fm(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 Q6(e)}function Q6(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,...w]=m;const E=l[x][1];cm(E)&&cm(v)&&(v=Ep(!0,E,v)),l[x]=[h,v,...w]}}}}const W6=new eg().freeze();function Ap(e,n){if(typeof n!="function")throw new TypeError("Cannot `"+e+"` without `parser`")}function jp(e,n){if(typeof n!="function")throw new TypeError("Cannot `"+e+"` without `compiler`")}function zp(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 K1(e){if(!cm(e)||typeof e.type!="string")throw new TypeError("Expected node, got `"+e+"`")}function J1(e,n,r){if(!r)throw new Error("`"+e+"` finished async. Use `"+n+"` instead")}function Yu(e){return eL(e)?e:new fk(e)}function eL(e){return!!(e&&typeof e=="object"&&"message"in e&&"messages"in e)}function tL(e){return typeof e=="string"||nL(e)}function nL(e){return!!(e&&typeof e=="object"&&"byteLength"in e&&"byteOffset"in e)}const rL="https://github.com/remarkjs/react-markdown/blob/main/changelog.md",W1=[],ew={allowDangerousHtml:!0},iL=/^(https?|ircs?|mailto|xmpp)$/i,lL=[{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 tg(e){const n=aL(e),r=oL(e);return sL(n.runSync(n.parse(r),r),e)}function aL(e){const n=e.rehypePlugins||W1,r=e.remarkPlugins||W1,l=e.remarkRehypeOptions?{...e.remarkRehypeOptions,...ew}:ew;return W6().use(UO).use(r).use(O6,l).use(n)}function oL(e){const n=e.children||"",r=new fk;return typeof n=="string"&&(r.value=n),r}function sL(e,n){const r=n.allowedElements,l=n.allowElement,a=n.components,o=n.disallowedElements,u=n.skipHtml,c=n.unwrapDisallowed,d=n.urlTransform||uL;for(const m of lL)Object.hasOwn(n,m.from)&&(""+m.from+(m.to?"use `"+m.to+"` instead":"remove it")+rL+m.id,void 0);return Wm(e,h),kD(e,{Fragment:b.Fragment,components:a,ignoreInvalidStyle:!0,jsx:b.jsx,jsxs:b.jsxs,passKeys:!0,passNode:!0});function h(m,p,x){if(m.type==="raw"&&x&&typeof p=="number")return u?x.children.splice(p,1):x.children[p]={type:"text",value:m.value},p;if(m.type==="element"){let v;for(v in wp)if(Object.hasOwn(wp,v)&&Object.hasOwn(m.properties,v)){const w=m.properties[v],E=wp[v];(E===null||E.includes(m.tagName))&&(m.properties[v]=d(String(w||""),v,m))}}if(m.type==="element"){let v=r?!r.includes(m.tagName):o?o.includes(m.tagName):!1;if(!v&&l&&typeof p=="number"&&(v=!l(m,p,x)),v&&x&&typeof p=="number")return c&&m.children?x.children.splice(p,1,...m.children):x.children.splice(p,1),p}}}function uL(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||iL.test(e.slice(0,n))?e:""}function cL({node:e}){const n=fe(k=>k.sendGateResponse),r=fe(k=>k.wsStatus),[l,a]=V.useState(null),[o,u]=V.useState(""),[c,d]=V.useState(null),[h,m]=V.useState(!1),p=e.status==="waiting",x=e.status==="completed";V.useEffect(()=>{p&&(a(null),u(""),d(null),m(!1))},[p]);const v=p&&r==="connected"&&l===null,w=(k,A)=>{if(v){if(A){a(k),d(A);return}a(k),m(!0),n(e.name,k)}},E=()=>{if(l===null||c===null)return;const k={[c]:o};m(!0),n(e.name,l,k),d(null)},S=e.option_details,_=S==null?void 0:S.find(k=>k.value===e.selected_option),T=(_==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(Mp,{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(k=>{const A=l===k.value,q=l!==null&&!A;return b.jsx("button",{disabled:!v&&!A,onClick:()=>w(k.value,k.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":q?"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(Yi,{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 ${q?"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:k.label})}),k.route&&b.jsxs("span",{className:"text-[10px] text-[var(--text-muted)] flex-shrink-0",children:["→ ",k.route]})]})},k.value)})}),h&&!c&&b.jsxs("div",{className:"flex items-center gap-2 px-1",children:[b.jsx(Oo,{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(k=>b.jsx("span",{className:"text-[11px] px-2 py-0.5 rounded border border-[var(--border)] text-[var(--text-muted)]",children:k},k))})]}),c&&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:c})}),b.jsxs("div",{className:"p-3 space-y-2",children:[b.jsx("input",{type:"text",value:o,onChange:k=>u(k.target.value),onKeyDown:k=>k.key==="Enter"&&E(),placeholder:`Enter ${c}...`,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:E,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(gw,{className:"w-3 h-3"}),"Submit"]})]})]})]})]}),x&&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(Yi,{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(Mp,{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(Yi,{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]})]}),S&&S.length>1&&b.jsx("div",{className:"space-y-1",children:S.filter(k=>k.value!==e.selected_option).map(k=>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:k.label}),k.route&&b.jsxs("span",{className:"ml-auto text-[10px] text-[var(--text-muted)]",children:["→ ",k.route]})]},k.value))}),!S&&e.options&&e.options.length>0&&b.jsx("div",{className:"flex flex-wrap gap-1.5",children:e.options.map(k=>b.jsxs("span",{className:`text-[11px] px-2.5 py-1 rounded-lg border ${k===e.selected_option?"border-green-500/30 text-green-400 bg-green-500/5":"border-[var(--border)] text-[var(--text-muted)] opacity-40"}`,children:[k===e.selected_option&&"✓ ",k]},k))}),b.jsx(fL,{node:e})]}),!p&&!x&&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(Mp,{text:e.prompt,muted:!0})})]})]})}function Mp({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(tg,{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 fL({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(ol,{items:n})}function dL({node:e}){const n=e.status,r=Fe[n]||Fe.pending,a=k5()[e.name],o=e.type==="for_each_group",[u,c]=V.useState(!0),d=[];e.elapsed!=null&&d.push({label:"Elapsed",value:Jt(e.elapsed)}),a&&(d.push({label:"Total",value:a.total}),d.push({label:"Completed",value:a.completed}),a.failed>0&&d.push({label:"Failed",value:a.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:`${r}20`,color:r},children:n}),b.jsx("span",{className:"text-xs text-[var(--text-muted)]",children:o?"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(ol,{items:d}),o&&h&&h.length>0&&b.jsxs("div",{className:"space-y-2",children:[b.jsxs("button",{onClick:()=>c(!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(il,{className:"w-3 h-3"}):b.jsx(Rr,{className:"w-3 h-3"}),"Items (",h.length,")"]}),u&&b.jsx("div",{className:"space-y-1",children:h.map(m=>b.jsx(pL,{item:m},`${m.key}-${m.index}`))})]})]})}const hL={running:Fe.running,completed:Fe.completed,failed:Fe.failed};function pL({item:e}){const[n,r]=V.useState(e.status==="running"),l=hL[e.status],a=!!(e.prompt||e.output!=null||e.activity&&e.activity.length>0||e.error_type),o=[];return e.elapsed!=null&&o.push({label:"Elapsed",value:Jt(e.elapsed)}),e.tokens!=null&&o.push({label:"Tokens",value:Gn(e.tokens)}),e.cost_usd!=null&&o.push({label:"Cost",value:yi(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(il,{className:"w-3 h-3 text-[var(--text-muted)] flex-shrink-0"}):b.jsx(Rr,{className:"w-3 h-3 text-[var(--text-muted)] flex-shrink-0"}):e.status==="running"?b.jsx(Oo,{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:Jt(e.elapsed)}),e.tokens!=null&&b.jsx("span",{children:Gn(e.tokens)}),e.cost_usd!=null&&b.jsx("span",{children:yi(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:[o.length>0&&b.jsx(ol,{items:o}),e.prompt&&b.jsx(nl,{output:e.prompt,title:"Input / Prompt",defaultExpanded:!1}),e.activity&&e.activity.length>0&&b.jsx(Im,{activity:e.activity,defaultExpanded:e.status!=="completed"}),e.output!=null&&b.jsx(nl,{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 tw(e,n){const r=String(e);if(typeof n!="string")throw new TypeError("Expected character");let l=0,a=r.indexOf(n);for(;a!==-1;)l++,a=r.indexOf(n,a+n.length);return l}function mL(e){if(typeof e!="string")throw new TypeError("Expected a string");return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}function gL(e,n,r){const a=Uc((r||{}).ignore||[]),o=xL(n);let u=-1;for(;++u0?{type:"text",value:j}:void 0),j===!1?x.lastIndex=A+1:(w!==A&&T.push({type:"text",value:h.value.slice(w,A)}),Array.isArray(j)?T.push(...j):j&&T.push(j),w=A+k[0].length,_=!0),!x.global)break;k=x.exec(h.value)}return _?(w?\]}]+$/.exec(e);if(!n)return[e,void 0];e=e.slice(0,n.index);let r=n[0],l=r.indexOf(")");const a=tw(e,"(");let o=tw(e,")");for(;l!==-1&&a>o;)e+=r.slice(0,l+1),r=r.slice(l+1),l=r.indexOf(")"),o++;return[e,r]}function dk(e,n){const r=e.input.charCodeAt(e.index-1);return(e.index===0||rl(r)||Bc(r))&&(!n||r!==47)}hk.peek=qL;function ML(){this.buffer()}function DL(e){this.enter({type:"footnoteReference",identifier:"",label:""},e)}function RL(){this.buffer()}function OL(e){this.enter({type:"footnoteDefinition",identifier:"",label:"",children:[]},e)}function LL(e){const n=this.resume(),r=this.stack[this.stack.length-1];r.type,r.identifier=Yn(this.sliceSerialize(e)).toLowerCase(),r.label=n}function HL(e){this.exit(e)}function BL(e){const n=this.resume(),r=this.stack[this.stack.length-1];r.type,r.identifier=Yn(this.sliceSerialize(e)).toLowerCase(),r.label=n}function IL(e){this.exit(e)}function qL(){return"["}function hk(e,n,r,l){const a=r.createTracker(l);let o=a.move("[^");const u=r.enter("footnoteReference"),c=r.enter("reference");return o+=a.move(r.safe(r.associationId(e),{after:"]",before:o})),c(),u(),o+=a.move("]"),o}function UL(){return{enter:{gfmFootnoteCallString:ML,gfmFootnoteCall:DL,gfmFootnoteDefinitionLabelString:RL,gfmFootnoteDefinition:OL},exit:{gfmFootnoteCallString:LL,gfmFootnoteCall:HL,gfmFootnoteDefinitionLabelString:BL,gfmFootnoteDefinition:IL}}}function PL(e){let n=!1;return e&&e.firstLineBlank&&(n=!0),{handlers:{footnoteDefinition:r,footnoteReference:hk},unsafe:[{character:"[",inConstruct:["label","phrasing","reference"]}]};function r(l,a,o,u){const c=o.createTracker(u);let d=c.move("[^");const h=o.enter("footnoteDefinition"),m=o.enter("label");return d+=c.move(o.safe(o.associationId(l),{before:d,after:"]"})),m(),d+=c.move("]:"),l.children&&l.children.length>0&&(c.shift(4),d+=c.move((n?` +`:" ")+o.indentLines(o.containerFlow(l,c.current()),n?pk:VL))),h(),d}}function VL(e,n,r){return n===0?e:pk(e,n,r)}function pk(e,n,r){return(r?"":" ")+e}const $L=["autolink","destinationLiteral","destinationRaw","reference","titleQuote","titleApostrophe"];mk.peek=QL;function GL(){return{canContainEols:["delete"],enter:{strikethrough:YL},exit:{strikethrough:XL}}}function FL(){return{unsafe:[{character:"~",inConstruct:"phrasing",notInConstruct:$L}],handlers:{delete:mk}}}function YL(e){this.enter({type:"delete",children:[]},e)}function XL(e){this.exit(e)}function mk(e,n,r,l){const a=r.createTracker(l),o=r.enter("strikethrough");let u=a.move("~~");return u+=r.containerPhrasing(e,{...a.current(),before:u,after:"~"}),u+=a.move("~~"),o(),u}function QL(){return"~"}function ZL(e){return e.length}function KL(e,n){const r=n||{},l=(r.align||[]).concat(),a=r.stringLength||ZL,o=[],u=[],c=[],d=[];let h=0,m=-1;for(;++mh&&(h=e[m].length);++_d[_])&&(d[_]=k)}E.push(T)}u[m]=E,c[m]=S}let p=-1;if(typeof l=="object"&&"length"in l)for(;++pd[p]&&(d[p]=T),v[p]=T),x[p]=k}u.splice(1,0,x),c.splice(1,0,v),m=-1;const w=[];for(;++m "),o.shift(2);const u=r.indentLines(r.containerFlow(e,o.current()),e8);return a(),u}function e8(e,n,r){return">"+(r?"":" ")+e}function t8(e,n){return rw(e,n.inConstruct,!0)&&!rw(e,n.notInConstruct,!1)}function rw(e,n,r){if(typeof n=="string"&&(n=[n]),!n||n.length===0)return r;let l=-1;for(;++lu&&(u=o):o=1,a=l+n.length,l=r.indexOf(n,a);return u}function r8(e,n){return!!(n.options.fences===!1&&e.value&&!e.lang&&/[^ \r\n]/.test(e.value)&&!/^[\t ]*(?:[\r\n]|$)|(?:^|[\r\n])[\t ]*$/.test(e.value))}function i8(e){const n=e.options.fence||"`";if(n!=="`"&&n!=="~")throw new Error("Cannot serialize code with `"+n+"` for `options.fence`, expected `` ` `` or `~`");return n}function l8(e,n,r,l){const a=i8(r),o=e.value||"",u=a==="`"?"GraveAccent":"Tilde";if(r8(e,r)){const p=r.enter("codeIndented"),x=r.indentLines(o,a8);return p(),x}const c=r.createTracker(l),d=a.repeat(Math.max(n8(o,a)+1,3)),h=r.enter("codeFenced");let m=c.move(d);if(e.lang){const p=r.enter(`codeFencedLang${u}`);m+=c.move(r.safe(e.lang,{before:m,after:" ",encode:["`"],...c.current()})),p()}if(e.lang&&e.meta){const p=r.enter(`codeFencedMeta${u}`);m+=c.move(" "),m+=c.move(r.safe(e.meta,{before:m,after:` +`,encode:["`"],...c.current()})),p()}return m+=c.move(` +`),o&&(m+=c.move(o+` +`)),m+=c.move(d),h(),m}function a8(e,n,r){return(r?"":" ")+e}function ng(e){const n=e.options.quote||'"';if(n!=='"'&&n!=="'")throw new Error("Cannot serialize title with `"+n+"` for `options.quote`, expected `\"`, or `'`");return n}function o8(e,n,r,l){const a=ng(r),o=a==='"'?"Quote":"Apostrophe",u=r.enter("definition");let c=r.enter("label");const d=r.createTracker(l);let h=d.move("[");return h+=d.move(r.safe(r.associationId(e),{before:h,after:"]",...d.current()})),h+=d.move("]: "),c(),!e.url||/[\0- \u007F]/.test(e.url)?(c=r.enter("destinationLiteral"),h+=d.move("<"),h+=d.move(r.safe(e.url,{before:h,after:">",...d.current()})),h+=d.move(">")):(c=r.enter("destinationRaw"),h+=d.move(r.safe(e.url,{before:h,after:e.title?" ":` +`,...d.current()}))),c(),e.title&&(c=r.enter(`title${o}`),h+=d.move(" "+a),h+=d.move(r.safe(e.title,{before:h,after:a,...d.current()})),h+=d.move(a),c()),u(),h}function s8(e){const n=e.options.emphasis||"*";if(n!=="*"&&n!=="_")throw new Error("Cannot serialize emphasis with `"+n+"` for `options.emphasis`, expected `*`, or `_`");return n}function Xo(e){return"&#x"+e.toString(16).toUpperCase()+";"}function wc(e,n,r){const l=ga(e),a=ga(n);return l===void 0?a===void 0?r==="_"?{inside:!0,outside:!0}:{inside:!1,outside:!1}:a===1?{inside:!0,outside:!0}:{inside:!1,outside:!0}:l===1?a===void 0?{inside:!1,outside:!1}:a===1?{inside:!0,outside:!0}:{inside:!1,outside:!1}:a===void 0?{inside:!1,outside:!1}:a===1?{inside:!0,outside:!1}:{inside:!1,outside:!1}}gk.peek=u8;function gk(e,n,r,l){const a=s8(r),o=r.enter("emphasis"),u=r.createTracker(l),c=u.move(a);let d=u.move(r.containerPhrasing(e,{after:a,before:c,...u.current()}));const h=d.charCodeAt(0),m=wc(l.before.charCodeAt(l.before.length-1),h,a);m.inside&&(d=Xo(h)+d.slice(1));const p=d.charCodeAt(d.length-1),x=wc(l.after.charCodeAt(0),p,a);x.inside&&(d=d.slice(0,-1)+Xo(p));const v=u.move(a);return o(),r.attentionEncodeSurroundingInfo={after:x.outside,before:m.outside},c+d+v}function u8(e,n,r){return r.options.emphasis||"*"}function c8(e,n){let r=!1;return Wm(e,function(l){if("value"in l&&/\r?\n|\r/.test(l.value)||l.type==="break")return r=!0,sm}),!!((!e.depth||e.depth<3)&&Fm(e)&&(n.options.setext||r))}function f8(e,n,r,l){const a=Math.max(Math.min(6,e.depth||1),1),o=r.createTracker(l);if(c8(e,r)){const m=r.enter("headingSetext"),p=r.enter("phrasing"),x=r.containerPhrasing(e,{...o.current(),before:` +`,after:` +`});return p(),m(),x+` +`+(a===1?"=":"-").repeat(x.length-(Math.max(x.lastIndexOf("\r"),x.lastIndexOf(` +`))+1))}const u="#".repeat(a),c=r.enter("headingAtx"),d=r.enter("phrasing");o.move(u+" ");let h=r.containerPhrasing(e,{before:"# ",after:` +`,...o.current()});return/^[\t ]/.test(h)&&(h=Xo(h.charCodeAt(0))+h.slice(1)),h=h?u+" "+h:u,r.options.closeAtx&&(h+=" "+u),d(),c(),h}xk.peek=d8;function xk(e){return e.value||""}function d8(){return"<"}yk.peek=h8;function yk(e,n,r,l){const a=ng(r),o=a==='"'?"Quote":"Apostrophe",u=r.enter("image");let c=r.enter("label");const d=r.createTracker(l);let h=d.move("![");return h+=d.move(r.safe(e.alt,{before:h,after:"]",...d.current()})),h+=d.move("]("),c(),!e.url&&e.title||/[\0- \u007F]/.test(e.url)?(c=r.enter("destinationLiteral"),h+=d.move("<"),h+=d.move(r.safe(e.url,{before:h,after:">",...d.current()})),h+=d.move(">")):(c=r.enter("destinationRaw"),h+=d.move(r.safe(e.url,{before:h,after:e.title?" ":")",...d.current()}))),c(),e.title&&(c=r.enter(`title${o}`),h+=d.move(" "+a),h+=d.move(r.safe(e.title,{before:h,after:a,...d.current()})),h+=d.move(a),c()),h+=d.move(")"),u(),h}function h8(){return"!"}vk.peek=p8;function vk(e,n,r,l){const a=e.referenceType,o=r.enter("imageReference");let u=r.enter("label");const c=r.createTracker(l);let d=c.move("![");const h=r.safe(e.alt,{before:d,after:"]",...c.current()});d+=c.move(h+"]["),u();const m=r.stack;r.stack=[],u=r.enter("reference");const p=r.safe(r.associationId(e),{before:d,after:"]",...c.current()});return u(),r.stack=m,o(),a==="full"||!h||h!==p?d+=c.move(p+"]"):a==="shortcut"?d=d.slice(0,-1):d+=c.move("]"),d}function p8(){return"!"}bk.peek=m8;function bk(e,n,r){let l=e.value||"",a="`",o=-1;for(;new RegExp("(^|[^`])"+a+"([^`]|$)").test(l);)a+="`";for(/[^ \r\n]/.test(l)&&(/^[ \r\n]/.test(l)&&/[ \r\n]$/.test(l)||/^`|`$/.test(l))&&(l=" "+l+" ");++o\u007F]/.test(e.url))}Sk.peek=g8;function Sk(e,n,r,l){const a=ng(r),o=a==='"'?"Quote":"Apostrophe",u=r.createTracker(l);let c,d;if(wk(e,r)){const m=r.stack;r.stack=[],c=r.enter("autolink");let p=u.move("<");return p+=u.move(r.containerPhrasing(e,{before:p,after:">",...u.current()})),p+=u.move(">"),c(),r.stack=m,p}c=r.enter("link"),d=r.enter("label");let h=u.move("[");return h+=u.move(r.containerPhrasing(e,{before:h,after:"](",...u.current()})),h+=u.move("]("),d(),!e.url&&e.title||/[\0- \u007F]/.test(e.url)?(d=r.enter("destinationLiteral"),h+=u.move("<"),h+=u.move(r.safe(e.url,{before:h,after:">",...u.current()})),h+=u.move(">")):(d=r.enter("destinationRaw"),h+=u.move(r.safe(e.url,{before:h,after:e.title?" ":")",...u.current()}))),d(),e.title&&(d=r.enter(`title${o}`),h+=u.move(" "+a),h+=u.move(r.safe(e.title,{before:h,after:a,...u.current()})),h+=u.move(a),d()),h+=u.move(")"),c(),h}function g8(e,n,r){return wk(e,r)?"<":"["}_k.peek=x8;function _k(e,n,r,l){const a=e.referenceType,o=r.enter("linkReference");let u=r.enter("label");const c=r.createTracker(l);let d=c.move("[");const h=r.containerPhrasing(e,{before:d,after:"]",...c.current()});d+=c.move(h+"]["),u();const m=r.stack;r.stack=[],u=r.enter("reference");const p=r.safe(r.associationId(e),{before:d,after:"]",...c.current()});return u(),r.stack=m,o(),a==="full"||!h||h!==p?d+=c.move(p+"]"):a==="shortcut"?d=d.slice(0,-1):d+=c.move("]"),d}function x8(){return"["}function rg(e){const n=e.options.bullet||"*";if(n!=="*"&&n!=="+"&&n!=="-")throw new Error("Cannot serialize items with `"+n+"` for `options.bullet`, expected `*`, `+`, or `-`");return n}function y8(e){const n=rg(e),r=e.options.bulletOther;if(!r)return n==="*"?"-":"*";if(r!=="*"&&r!=="+"&&r!=="-")throw new Error("Cannot serialize items with `"+r+"` for `options.bulletOther`, expected `*`, `+`, or `-`");if(r===n)throw new Error("Expected `bullet` (`"+n+"`) and `bulletOther` (`"+r+"`) to be different");return r}function v8(e){const n=e.options.bulletOrdered||".";if(n!=="."&&n!==")")throw new Error("Cannot serialize items with `"+n+"` for `options.bulletOrdered`, expected `.` or `)`");return n}function kk(e){const n=e.options.rule||"*";if(n!=="*"&&n!=="-"&&n!=="_")throw new Error("Cannot serialize rules with `"+n+"` for `options.rule`, expected `*`, `-`, or `_`");return n}function b8(e,n,r,l){const a=r.enter("list"),o=r.bulletCurrent;let u=e.ordered?v8(r):rg(r);const c=e.ordered?u==="."?")":".":y8(r);let d=n&&r.bulletLastUsed?u===r.bulletLastUsed:!1;if(!e.ordered){const m=e.children?e.children[0]:void 0;if((u==="*"||u==="-")&&m&&(!m.children||!m.children[0])&&r.stack[r.stack.length-1]==="list"&&r.stack[r.stack.length-2]==="listItem"&&r.stack[r.stack.length-3]==="list"&&r.stack[r.stack.length-4]==="listItem"&&r.indexStack[r.indexStack.length-1]===0&&r.indexStack[r.indexStack.length-2]===0&&r.indexStack[r.indexStack.length-3]===0&&(d=!0),kk(r)===u&&m){let p=-1;for(;++p-1?n.start:1)+(r.options.incrementListMarker===!1?0:n.children.indexOf(e))+o);let u=o.length+1;(a==="tab"||a==="mixed"&&(n&&n.type==="list"&&n.spread||e.spread))&&(u=Math.ceil(u/4)*4);const c=r.createTracker(l);c.move(o+" ".repeat(u-o.length)),c.shift(u);const d=r.enter("listItem"),h=r.indentLines(r.containerFlow(e,c.current()),m);return d(),h;function m(p,x,v){return x?(v?"":" ".repeat(u))+p:(v?o:o+" ".repeat(u-o.length))+p}}function _8(e,n,r,l){const a=r.enter("paragraph"),o=r.enter("phrasing"),u=r.containerPhrasing(e,l);return o(),a(),u}const k8=Uc(["break","delete","emphasis","footnote","footnoteReference","image","imageReference","inlineCode","inlineMath","link","linkReference","mdxJsxTextElement","mdxTextExpression","strong","text","textDirective"]);function E8(e,n,r,l){return(e.children.some(function(u){return k8(u)})?r.containerPhrasing:r.containerFlow).call(r,e,l)}function N8(e){const n=e.options.strong||"*";if(n!=="*"&&n!=="_")throw new Error("Cannot serialize strong with `"+n+"` for `options.strong`, expected `*`, or `_`");return n}Ek.peek=C8;function Ek(e,n,r,l){const a=N8(r),o=r.enter("strong"),u=r.createTracker(l),c=u.move(a+a);let d=u.move(r.containerPhrasing(e,{after:a,before:c,...u.current()}));const h=d.charCodeAt(0),m=wc(l.before.charCodeAt(l.before.length-1),h,a);m.inside&&(d=Xo(h)+d.slice(1));const p=d.charCodeAt(d.length-1),x=wc(l.after.charCodeAt(0),p,a);x.inside&&(d=d.slice(0,-1)+Xo(p));const v=u.move(a+a);return o(),r.attentionEncodeSurroundingInfo={after:x.outside,before:m.outside},c+d+v}function C8(e,n,r){return r.options.strong||"*"}function T8(e,n,r,l){return r.safe(e.value,l)}function A8(e){const n=e.options.ruleRepetition||3;if(n<3)throw new Error("Cannot serialize rules with repetition `"+n+"` for `options.ruleRepetition`, expected `3` or more");return n}function j8(e,n,r){const l=(kk(r)+(r.options.ruleSpaces?" ":"")).repeat(A8(r));return r.options.ruleSpaces?l.slice(0,-1):l}const Nk={blockquote:WL,break:iw,code:l8,definition:o8,emphasis:gk,hardBreak:iw,heading:f8,html:xk,image:yk,imageReference:vk,inlineCode:bk,link:Sk,linkReference:_k,list:b8,listItem:S8,paragraph:_8,root:E8,strong:Ek,text:T8,thematicBreak:j8};function z8(){return{enter:{table:M8,tableData:lw,tableHeader:lw,tableRow:R8},exit:{codeText:O8,table:D8,tableData:Lp,tableHeader:Lp,tableRow:Lp}}}function M8(e){const n=e._align;this.enter({type:"table",align:n.map(function(r){return r==="none"?null:r}),children:[]},e),this.data.inTable=!0}function D8(e){this.exit(e),this.data.inTable=void 0}function R8(e){this.enter({type:"tableRow",children:[]},e)}function Lp(e){this.exit(e)}function lw(e){this.enter({type:"tableCell",children:[]},e)}function O8(e){let n=this.resume();this.data.inTable&&(n=n.replace(/\\([\\|])/g,L8));const r=this.stack[this.stack.length-1];r.type,r.value=n,this.exit(e)}function L8(e,n){return n==="|"?n:e}function H8(e){const n=e||{},r=n.tableCellPadding,l=n.tablePipeAlign,a=n.stringLength,o=r?" ":"|";return{unsafe:[{character:"\r",inConstruct:"tableCell"},{character:` +`,inConstruct:"tableCell"},{atBreak:!0,character:"|",after:"[ :-]"},{character:"|",inConstruct:"tableCell"},{atBreak:!0,character:":",after:"-"},{atBreak:!0,character:"-",after:"[:|-]"}],handlers:{inlineCode:x,table:u,tableCell:d,tableRow:c}};function u(v,w,E,S){return h(m(v,E,S),v.align)}function c(v,w,E,S){const _=p(v,E,S),T=h([_]);return T.slice(0,T.indexOf(` +`))}function d(v,w,E,S){const _=E.enter("tableCell"),T=E.enter("phrasing"),k=E.containerPhrasing(v,{...S,before:o,after:o});return T(),_(),k}function h(v,w){return KL(v,{align:w,alignDelimiters:l,padding:r,stringLength:a})}function m(v,w,E){const S=v.children;let _=-1;const T=[],k=w.enter("table");for(;++_0&&!r&&(e[e.length-1][1]._gfmAutolinkLiteralWalkedInto=!0),r}const t9={tokenize:u9,partial:!0};function n9(){return{document:{91:{name:"gfmFootnoteDefinition",tokenize:a9,continuation:{tokenize:o9},exit:s9}},text:{91:{name:"gfmFootnoteCall",tokenize:l9},93:{name:"gfmPotentialFootnoteCall",add:"after",tokenize:r9,resolveTo:i9}}}}function r9(e,n,r){const l=this;let a=l.events.length;const o=l.parser.gfmFootnotes||(l.parser.gfmFootnotes=[]);let u;for(;a--;){const d=l.events[a][1];if(d.type==="labelImage"){u=d;break}if(d.type==="gfmFootnoteCall"||d.type==="labelLink"||d.type==="label"||d.type==="image"||d.type==="link")break}return c;function c(d){if(!u||!u._balanced)return r(d);const h=Yn(l.sliceSerialize({start:u.end,end:l.now()}));return h.codePointAt(0)!==94||!o.includes(h.slice(1))?r(d):(e.enter("gfmFootnoteCallLabelMarker"),e.consume(d),e.exit("gfmFootnoteCallLabelMarker"),n(d))}}function i9(e,n){let r=e.length;for(;r--;)if(e[r][1].type==="labelImage"&&e[r][0]==="enter"){e[r][1];break}e[r+1][1].type="data",e[r+3][1].type="gfmFootnoteCallLabelMarker";const l={type:"gfmFootnoteCall",start:Object.assign({},e[r+3][1].start),end:Object.assign({},e[e.length-1][1].end)},a={type:"gfmFootnoteCallMarker",start:Object.assign({},e[r+3][1].end),end:Object.assign({},e[r+3][1].end)};a.end.column++,a.end.offset++,a.end._bufferIndex++;const o={type:"gfmFootnoteCallString",start:Object.assign({},a.end),end:Object.assign({},e[e.length-1][1].start)},u={type:"chunkString",contentType:"string",start:Object.assign({},o.start),end:Object.assign({},o.end)},c=[e[r+1],e[r+2],["enter",l,n],e[r+3],e[r+4],["enter",a,n],["exit",a,n],["enter",o,n],["enter",u,n],["exit",u,n],["exit",o,n],e[e.length-2],e[e.length-1],["exit",l,n]];return e.splice(r,e.length-r+1,...c),e}function l9(e,n,r){const l=this,a=l.parser.gfmFootnotes||(l.parser.gfmFootnotes=[]);let o=0,u;return c;function c(p){return e.enter("gfmFootnoteCall"),e.enter("gfmFootnoteCallLabelMarker"),e.consume(p),e.exit("gfmFootnoteCallLabelMarker"),d}function d(p){return p!==94?r(p):(e.enter("gfmFootnoteCallMarker"),e.consume(p),e.exit("gfmFootnoteCallMarker"),e.enter("gfmFootnoteCallString"),e.enter("chunkString").contentType="string",h)}function h(p){if(o>999||p===93&&!u||p===null||p===91||ot(p))return r(p);if(p===93){e.exit("chunkString");const x=e.exit("gfmFootnoteCallString");return a.includes(Yn(l.sliceSerialize(x)))?(e.enter("gfmFootnoteCallLabelMarker"),e.consume(p),e.exit("gfmFootnoteCallLabelMarker"),e.exit("gfmFootnoteCall"),n):r(p)}return ot(p)||(u=!0),o++,e.consume(p),p===92?m:h}function m(p){return p===91||p===92||p===93?(e.consume(p),o++,h):h(p)}}function a9(e,n,r){const l=this,a=l.parser.gfmFootnotes||(l.parser.gfmFootnotes=[]);let o,u=0,c;return d;function d(w){return e.enter("gfmFootnoteDefinition")._container=!0,e.enter("gfmFootnoteDefinitionLabel"),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(w),e.exit("gfmFootnoteDefinitionLabelMarker"),h}function h(w){return w===94?(e.enter("gfmFootnoteDefinitionMarker"),e.consume(w),e.exit("gfmFootnoteDefinitionMarker"),e.enter("gfmFootnoteDefinitionLabelString"),e.enter("chunkString").contentType="string",m):r(w)}function m(w){if(u>999||w===93&&!c||w===null||w===91||ot(w))return r(w);if(w===93){e.exit("chunkString");const E=e.exit("gfmFootnoteDefinitionLabelString");return o=Yn(l.sliceSerialize(E)),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(w),e.exit("gfmFootnoteDefinitionLabelMarker"),e.exit("gfmFootnoteDefinitionLabel"),x}return ot(w)||(c=!0),u++,e.consume(w),w===92?p:m}function p(w){return w===91||w===92||w===93?(e.consume(w),u++,m):m(w)}function x(w){return w===58?(e.enter("definitionMarker"),e.consume(w),e.exit("definitionMarker"),a.includes(o)||a.push(o),Qe(e,v,"gfmFootnoteDefinitionWhitespace")):r(w)}function v(w){return n(w)}}function o9(e,n,r){return e.check(as,n,e.attempt(t9,n,r))}function s9(e){e.exit("gfmFootnoteDefinition")}function u9(e,n,r){const l=this;return Qe(e,a,"gfmFootnoteDefinitionIndent",5);function a(o){const u=l.events[l.events.length-1];return u&&u[1].type==="gfmFootnoteDefinitionIndent"&&u[2].sliceSerialize(u[1],!0).length===4?n(o):r(o)}}function c9(e){let r=(e||{}).singleTilde;const l={name:"strikethrough",tokenize:o,resolveAll:a};return r==null&&(r=!0),{text:{126:l},insideSpan:{null:[l]},attentionMarkers:{null:[126]}};function a(u,c){let d=-1;for(;++d1?d(w):(u.consume(w),p++,v);if(p<2&&!r)return d(w);const S=u.exit("strikethroughSequenceTemporary"),_=ga(w);return S._open=!_||_===2&&!!E,S._close=!E||E===2&&!!_,c(w)}}}class f9{constructor(){this.map=[]}add(n,r,l){d9(this,n,r,l)}consume(n){if(this.map.sort(function(o,u){return o[0]-u[0]}),this.map.length===0)return;let r=this.map.length;const l=[];for(;r>0;)r-=1,l.push(n.slice(this.map[r][0]+this.map[r][1]),this.map[r][2]),n.length=this.map[r][0];l.push(n.slice()),n.length=0;let a=l.pop();for(;a;){for(const o of a)n.push(o);a=l.pop()}this.map.length=0}}function d9(e,n,r,l){let a=0;if(!(r===0&&l.length===0)){for(;a-1;){const B=l.events[H][1].type;if(B==="lineEnding"||B==="linePrefix")H--;else break}const U=H>-1?l.events[H][1].type:null,ee=U==="tableHead"||U==="tableRow"?j:d;return ee===j&&l.parser.lazy[l.now().line]?r(R):ee(R)}function d(R){return e.enter("tableHead"),e.enter("tableRow"),h(R)}function h(R){return R===124||(u=!0,o+=1),m(R)}function m(R){return R===null?r(R):Ee(R)?o>1?(o=0,l.interrupt=!0,e.exit("tableRow"),e.enter("lineEnding"),e.consume(R),e.exit("lineEnding"),v):r(R):qe(R)?Qe(e,m,"whitespace")(R):(o+=1,u&&(u=!1,a+=1),R===124?(e.enter("tableCellDivider"),e.consume(R),e.exit("tableCellDivider"),u=!0,m):(e.enter("data"),p(R)))}function p(R){return R===null||R===124||ot(R)?(e.exit("data"),m(R)):(e.consume(R),R===92?x:p)}function x(R){return R===92||R===124?(e.consume(R),p):p(R)}function v(R){return l.interrupt=!1,l.parser.lazy[l.now().line]?r(R):(e.enter("tableDelimiterRow"),u=!1,qe(R)?Qe(e,w,"linePrefix",l.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(R):w(R))}function w(R){return R===45||R===58?S(R):R===124?(u=!0,e.enter("tableCellDivider"),e.consume(R),e.exit("tableCellDivider"),E):q(R)}function E(R){return qe(R)?Qe(e,S,"whitespace")(R):S(R)}function S(R){return R===58?(o+=1,u=!0,e.enter("tableDelimiterMarker"),e.consume(R),e.exit("tableDelimiterMarker"),_):R===45?(o+=1,_(R)):R===null||Ee(R)?A(R):q(R)}function _(R){return R===45?(e.enter("tableDelimiterFiller"),T(R)):q(R)}function T(R){return R===45?(e.consume(R),T):R===58?(u=!0,e.exit("tableDelimiterFiller"),e.enter("tableDelimiterMarker"),e.consume(R),e.exit("tableDelimiterMarker"),k):(e.exit("tableDelimiterFiller"),k(R))}function k(R){return qe(R)?Qe(e,A,"whitespace")(R):A(R)}function A(R){return R===124?w(R):R===null||Ee(R)?!u||a!==o?q(R):(e.exit("tableDelimiterRow"),e.exit("tableHead"),n(R)):q(R)}function q(R){return r(R)}function j(R){return e.enter("tableRow"),L(R)}function L(R){return R===124?(e.enter("tableCellDivider"),e.consume(R),e.exit("tableCellDivider"),L):R===null||Ee(R)?(e.exit("tableRow"),n(R)):qe(R)?Qe(e,L,"whitespace")(R):(e.enter("data"),O(R))}function O(R){return R===null||R===124||ot(R)?(e.exit("data"),L(R)):(e.consume(R),R===92?P:O)}function P(R){return R===92||R===124?(e.consume(R),O):O(R)}}function g9(e,n){let r=-1,l=!0,a=0,o=[0,0,0,0],u=[0,0,0,0],c=!1,d=0,h,m,p;const x=new f9;for(;++rr[2]+1){const w=r[2]+1,E=r[3]-r[2]-1;e.add(w,E,[])}}e.add(r[3]+1,0,[["exit",p,n]])}return a!==void 0&&(o.end=Object.assign({},Wl(n.events,a)),e.add(a,0,[["exit",o,n]]),o=void 0),o}function ow(e,n,r,l,a){const o=[],u=Wl(n.events,r);a&&(a.end=Object.assign({},u),o.push(["exit",a,n])),l.end=Object.assign({},u),o.push(["exit",l,n]),e.add(r+1,0,o)}function Wl(e,n){const r=e[n],l=r[0]==="enter"?"start":"end";return r[1][l]}const x9={name:"tasklistCheck",tokenize:v9};function y9(){return{text:{91:x9}}}function v9(e,n,r){const l=this;return a;function a(d){return l.previous!==null||!l._gfmTasklistFirstContentOfListItem?r(d):(e.enter("taskListCheck"),e.enter("taskListCheckMarker"),e.consume(d),e.exit("taskListCheckMarker"),o)}function o(d){return ot(d)?(e.enter("taskListCheckValueUnchecked"),e.consume(d),e.exit("taskListCheckValueUnchecked"),u):d===88||d===120?(e.enter("taskListCheckValueChecked"),e.consume(d),e.exit("taskListCheckValueChecked"),u):r(d)}function u(d){return d===93?(e.enter("taskListCheckMarker"),e.consume(d),e.exit("taskListCheckMarker"),e.exit("taskListCheck"),c):r(d)}function c(d){return Ee(d)?n(d):qe(d)?e.check({tokenize:b9},n,r)(d):r(d)}}function b9(e,n,r){return Qe(e,l,"whitespace");function l(a){return a===null?r(a):n(a)}}function w9(e){return G_([F8(),n9(),c9(e),p9(),y9()])}const S9={};function Ok(e){const n=this,r=e||S9,l=n.data(),a=l.micromarkExtensions||(l.micromarkExtensions=[]),o=l.fromMarkdownExtensions||(l.fromMarkdownExtensions=[]),u=l.toMarkdownExtensions||(l.toMarkdownExtensions=[]);a.push(w9(r)),o.push(P8()),u.push(V8(r))}function _9({node:e}){const n=fe(h=>h.engageDialog),r=fe(h=>h.sendDialogDecline),l=fe(h=>h.wsStatus),a=e.dialog_id||"",o=e.dialog_messages||[],u=l==="connected",c=o.find(h=>h.role==="agent"),d=()=>{u&&r(e.name,a)};return b.jsxs("div",{className:"flex flex-col gap-4",children:[b.jsxs("div",{className:"flex items-center gap-2.5 px-3 py-2 rounded-lg bg-fuchsia-500/10 border border-fuchsia-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-fuchsia-400 opacity-75"}),b.jsx("span",{className:"relative inline-flex rounded-full h-2.5 w-2.5 bg-fuchsia-500"})]}),b.jsx("span",{className:"text-xs font-semibold text-fuchsia-400 tracking-wide",children:"Dialog Requested"})]}),c&&b.jsxs("div",{className:"rounded-lg px-3 py-2 bg-amber-500/10 border border-amber-500/30",children:[b.jsx("div",{className:"text-[10px] font-semibold mb-1 text-[var(--text-muted)]",children:e.name}),b.jsx("div",{className:"dialog-markdown text-xs leading-relaxed text-[var(--text)]",children:b.jsx(tg,{remarkPlugins:[Ok],children:c.content})})]}),b.jsxs("div",{className:"space-y-2",children:[b.jsx("div",{className:"text-[10px] uppercase tracking-wider text-[var(--text-muted)] font-semibold",children:"How would you like to proceed?"}),b.jsxs("div",{className:"flex gap-2",children:[b.jsxs("button",{onClick:n,disabled:!u,className:"flex-1 flex items-center justify-center gap-1.5 text-xs px-3 py-2 rounded-lg border border-fuchsia-500/40 bg-fuchsia-500/10 text-fuchsia-300 hover:bg-fuchsia-500/20 transition-colors font-medium disabled:opacity-40 disabled:cursor-not-allowed",children:[b.jsx(pm,{className:"w-3 h-3"}),"💬 Discuss"]}),b.jsxs("button",{onClick:d,disabled:!u,className:"flex-1 flex items-center justify-center gap-1.5 text-xs px-3 py-2 rounded-lg border border-[var(--border)] bg-[var(--surface)] text-[var(--text-muted)] hover:bg-[var(--surface-hover)] transition-colors font-medium disabled:opacity-40 disabled:cursor-not-allowed",children:[b.jsx(xa,{className:"w-3 h-3"}),"✕ Skip & continue"]})]})]})]})}function k9({node:e}){const n=e.status,r=Fe[n]||Fe.pending,l=fe(c=>c.navigateIntoSubworkflow),o=__().filter(c=>c.parentAgent===e.name),u=[];return e.elapsed!=null&&u.push({label:"Elapsed",value:Jt(e.elapsed)}),e.cost_usd!=null&&u.push({label:"Cost",value:yi(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(ol,{items:u}),o.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 (",o.length,")"]}),b.jsx("div",{className:"space-y-1",children:o.map((c,d)=>b.jsx(E9,{ctx:c,onClick:()=>l(c.slotKey)},`${c.slotKey}-${c.iteration}-${d}`))})]}),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]})]}),o.length===0&&n==="pending"&&b.jsx("div",{className:"text-xs text-[var(--text-muted)] italic",children:"Subworkflow has not started yet."})]})}function E9({ctx:e,onClick:n}){const r=Fe[e.status]||Fe.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(hm,{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(mw,{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(hw,{className:"w-2.5 h-2.5"}),yi(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(Rr,{className:"w-3.5 h-3.5 flex-shrink-0 text-[var(--text-muted)]"})]})}function N9(){const e=fe(d=>d.selectedNode),n=al(),r=fe(d=>d.selectNode),l=fe(d=>d.dialogEngaged),[a,o]=V.useState(!1);V.useEffect(()=>(requestAnimationFrame(()=>o(!0)),()=>o(!1)),[e]);const u=e?n[e]:null;if(!e||!u)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 c=(()=>{if(u.dialog_active&&!l)return _9;if(u.dialog_active&&l)return x1;switch(u.type){case"script":return Q4;case"human_gate":return cL;case"parallel_group":case"for_each_group":return dL;case"workflow":return k9;default:return x1}})();return b.jsxs("div",{className:He("h-full flex flex-col bg-[var(--surface)] transition-all duration-150 ease-out",a?"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(xa,{className:"w-4 h-4"})})]}),b.jsx("div",{className:"flex-1 overflow-y-auto px-4 py-3",children:b.jsx(c,{node:u})})]})}function rc(e){if(e==null)return"";if(typeof e=="string")return e;try{return JSON.stringify(e,null,2)}catch{return String(e)}}function C9(){const e=fe(S=>S.eventLog),n=fe(S=>S.activityLog),r=fe(S=>S.workflowOutput),l=fe(S=>S.workflowStatus),[a,o]=V.useState("log"),[u,c]=V.useState(!1),[d,h]=V.useState(0),[m,p]=V.useState(0),x=V.useCallback(S=>{o(S),S==="log"&&h(e.length),S==="activity"&&p(n.length)},[e.length,n.length]);V.useEffect(()=>{a==="log"&&h(e.length)},[a,e.length]),V.useEffect(()=>{a==="activity"&&p(n.length)},[a,n.length]),V.useEffect(()=>{l==="completed"&&r!=null&&o("output")},[l,r]);const v=r!=null,w=a!=="log"?Math.max(0,e.length-d):0,E=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:()=>c(!1),className:"flex items-center gap-1.5 text-xs text-[var(--text-muted)] hover:text-[var(--text)] transition-colors",children:[b.jsx(oN,{className:"w-3 h-3"}),b.jsx(Ky,{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(Hp,{active:a==="log",onClick:()=>x("log"),icon:b.jsx(Ky,{className:"w-3 h-3"}),label:"Log",count:e.length,unread:w}),b.jsx(Hp,{active:a==="activity",onClick:()=>x("activity"),icon:b.jsx(dw,{className:"w-3 h-3"}),label:"Activity",count:n.length,unread:E}),b.jsx(Hp,{active:a==="output",onClick:()=>x("output"),icon:b.jsx(hN,{className:"w-3 h-3"}),label:"Output",badge:v?l==="failed"?"error":"success":void 0})]}),b.jsx("button",{onClick:()=>c(!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(il,{className:"w-3.5 h-3.5"})})]}),b.jsx("div",{className:"flex-1 overflow-hidden",children:a==="activity"?b.jsx(T9,{entries:n}):a==="log"?b.jsx(A9,{entries:e}):b.jsx(j9,{output:r,status:l})})]})}function Hp({active:e,onClick:n,icon:r,label:l,count:a,badge:o,unread:u}){return b.jsxs("button",{onClick:n,className:He("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}),o&&b.jsx("span",{className:He("w-1.5 h-1.5 rounded-full",o==="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 sw={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 T9({entries:e}){const n=V.useRef(null),r=V.useRef(!0),l=fe(d=>d.selectNode),[a,o]=V.useState(""),u=V.useCallback(()=>{const d=n.current;if(!d)return;const h=d.scrollHeight-d.scrollTop-d.clientHeight<30;r.current=h},[]),c=V.useMemo(()=>{if(!a)return e;const d=a.toLowerCase();return e.filter(h=>h.source.toLowerCase().includes(d)||rc(h.message).toLowerCase().includes(d))},[e,a]);return V.useEffect(()=>{n.current&&r.current&&(n.current.scrollTop=n.current.scrollHeight)},[c.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:d=>o(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"}),a&&b.jsxs(b.Fragment,{children:[b.jsxs("span",{className:"text-[10px] text-[var(--text-muted)] tabular-nums flex-shrink-0",children:[c.length," of ",e.length]}),b.jsx("button",{onClick:()=>o(""),className:"text-[var(--text-muted)] hover:text-[var(--text)] transition-colors flex-shrink-0",title:"Clear filter",children:b.jsx(xa,{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:[c.map((d,h)=>{const m=sw[d.type]||sw.message,p=Lk(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:He("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:He("break-words min-w-0",m.color,d.type==="reasoning"&&"italic"),children:rc(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:rc(d.detail)})]},h)}),a&&c.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 uw={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 A9({entries:e}){const n=V.useRef(null),r=V.useRef(!0),l=fe(o=>o.selectNode),a=V.useCallback(()=>{const o=n.current;if(!o)return;const u=o.scrollHeight-o.scrollTop-o.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((o,u)=>{const c=uw[o.level]||uw.info,d=Lk(o.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:He("flex-shrink-0 w-3 text-center select-none",c.color),children:c.icon}),b.jsx("button",{onClick:()=>l(o.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 ${o.source}`,children:o.source}),b.jsx("span",{className:He("break-words",o.level==="error"?"text-red-400":o.level==="success"?"text-green-400":"text-[var(--text)]"),children:rc(o.message)})]},u)})})}function Lk(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 j9({output:e,status:n}){const[r,l]=V.useState(!1),a=yw(e),o=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:o,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(Yi,{className:"w-3 h-3 text-[var(--completed)]"}),b.jsx("span",{className:"text-[var(--completed)]",children:"Copied"})]}):b.jsxs(b.Fragment,{children:[b.jsx(pw,{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(z9,{text:a}):a})})]})}function z9({text:e}){const n=e.split(/("(?:[^"\\]|\\.)*")/g);return b.jsx(b.Fragment,{children:n.map((r,l)=>{if(l%2===1){const o=n.slice(l+1).join(""),u=/^\s*:/.test(o);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,(o,u,c)=>u?`${o}`:c?`${o}`:o);return b.jsx("span",{dangerouslySetInnerHTML:{__html:a}},l)})})}function M9({text:e}){return b.jsx("div",{className:"dialog-markdown text-xs leading-relaxed text-[var(--text)]",children:b.jsx(tg,{remarkPlugins:[Ok],components:{h1:({children:n})=>b.jsx("h1",{className:"text-sm font-bold mb-2 mt-1",children:n}),h2:({children:n})=>b.jsx("h2",{className:"text-xs font-bold mb-1.5 mt-1",children:n}),h3:({children:n})=>b.jsx("h3",{className:"text-xs font-semibold mb-1 mt-1",children:n}),p:({children:n})=>b.jsx("p",{className:"mb-1.5 last:mb-0",children:n}),ul:({children:n})=>b.jsx("ul",{className:"list-disc list-inside mb-1.5 space-y-0.5",children:n}),ol:({children:n})=>b.jsx("ol",{className:"list-decimal list-inside mb-1.5 space-y-0.5",children:n}),li:({children:n})=>b.jsx("li",{children:n}),code:({children:n,className:r})=>(r==null?void 0:r.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:n}):b.jsx("code",{className:"bg-[var(--bg)] border border-[var(--border)] rounded px-1 py-0.5 font-mono text-[11px]",children:n}),pre:({children:n})=>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:n}),strong:({children:n})=>b.jsx("strong",{className:"font-semibold",children:n}),em:({children:n})=>b.jsx("em",{className:"italic",children:n}),a:({href:n,children:r})=>b.jsx("a",{href:n,target:"_blank",rel:"noopener noreferrer",className:"text-blue-400 hover:text-blue-300 underline underline-offset-2",children:r}),blockquote:({children:n})=>b.jsx("blockquote",{className:"border-l-2 border-[var(--border)] pl-2.5 my-1.5 opacity-80",children:n}),hr:()=>b.jsx("hr",{className:"border-[var(--border)] my-2"}),table:({children:n})=>b.jsx("div",{className:"overflow-x-auto my-2",children:b.jsx("table",{className:"text-[11px] border-collapse w-full",children:n})}),th:({children:n})=>b.jsx("th",{className:"border border-[var(--border)] px-2 py-1 text-left bg-[var(--bg)] font-semibold",children:n}),td:({children:n})=>b.jsx("td",{className:"border border-[var(--border)] px-2 py-1",children:n})},children:e})})}function D9({node:e}){const n=fe(x=>x.sendDialogMessage),r=fe(x=>x.wsStatus),[l,a]=V.useState(""),o=V.useRef(null),u=e.dialog_active===!0,c=e.dialog_id||"",d=e.dialog_messages||[],h=u&&r==="connected";V.useEffect(()=>{var x;(x=o.current)==null||x.scrollIntoView({behavior:"smooth"})},[d.length,e.dialog_awaiting_response]);const m=()=>{!l.trim()||!h||(n(e.name,c,l.trim()),a(""))},p=x=>{x.key==="Enter"&&!x.shiftKey&&(x.preventDefault(),m())};return b.jsxs("div",{className:"flex flex-col h-full",children:[u?b.jsxs("div",{className:"flex items-center gap-2.5 px-3 py-2 rounded-lg bg-fuchsia-500/10 border border-fuchsia-500/30 mb-3 flex-shrink-0",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-fuchsia-400 opacity-75"}),b.jsx("span",{className:"relative inline-flex rounded-full h-2.5 w-2.5 bg-fuchsia-500"})]}),b.jsx("span",{className:"text-xs font-semibold text-fuchsia-400 tracking-wide",children:"Dialog Mode"}),b.jsxs("span",{className:"ml-auto text-[10px] text-[var(--text-muted)]",children:[d.length," message",d.length!==1?"s":""]})]}):b.jsxs("div",{className:"flex items-center gap-2.5 px-3 py-2 rounded-lg bg-[var(--surface)] border border-[var(--border)] mb-3 flex-shrink-0",children:[b.jsx(pm,{className:"w-3.5 h-3.5 text-[var(--text-muted)]"}),b.jsx("span",{className:"text-xs font-semibold text-[var(--text-muted)] tracking-wide",children:"Dialog Completed"}),b.jsxs("span",{className:"ml-auto text-[10px] text-[var(--text-muted)]",children:[d.length," message",d.length!==1?"s":""]})]}),b.jsxs("div",{className:"flex-1 overflow-y-auto space-y-3 min-h-0 mb-3",children:[d.map((x,v)=>b.jsx("div",{className:`flex ${x.role==="user"?"justify-end":"justify-start"}`,children:b.jsxs("div",{className:`max-w-[85%] rounded-lg px-3 py-2 ${x.role==="agent"?"bg-amber-500/10 border border-amber-500/30":"bg-blue-500/10 border border-blue-500/30"}`,children:[b.jsx("div",{className:"text-[10px] font-semibold mb-1 text-[var(--text-muted)]",children:x.role==="agent"?e.name:"You"}),b.jsx(M9,{text:x.content})]})},v)),e.dialog_awaiting_response&&b.jsx("div",{className:"flex justify-start",children:b.jsxs("div",{className:"max-w-[85%] rounded-lg px-3 py-2 bg-amber-500/10 border border-amber-500/30",children:[b.jsx("div",{className:"text-[10px] font-semibold mb-1 text-[var(--text-muted)]",children:e.name}),b.jsxs("div",{className:"flex gap-1 items-center h-4",children:[b.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-amber-400/60 animate-bounce [animation-delay:0ms]"}),b.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-amber-400/60 animate-bounce [animation-delay:150ms]"}),b.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-amber-400/60 animate-bounce [animation-delay:300ms]"})]})]})}),b.jsx("div",{ref:o})]}),u&&b.jsxs("div",{className:"flex-shrink-0 border-t border-[var(--border)] pt-3",children:[b.jsxs("div",{className:"flex gap-2",children:[b.jsx("input",{type:"text",value:l,onChange:x=>a(x.target.value),onKeyDown:p,placeholder:"Type your message...",className:"flex-1 text-xs px-3 py-2 rounded-lg border border-[var(--border)] bg-[var(--bg)] text-[var(--text)] outline-none focus:border-fuchsia-400 transition-colors",disabled:!h,autoFocus:!0}),b.jsxs("button",{onClick:m,disabled:!h||!l.trim(),className:"flex items-center justify-center gap-1.5 text-xs px-8 py-2 rounded-lg bg-fuchsia-500 text-white hover:bg-fuchsia-600 transition-colors font-medium disabled:opacity-40 disabled:cursor-not-allowed",children:[b.jsx(gw,{className:"w-3 h-3"}),"Send"]})]}),b.jsx("p",{className:"text-[10px] text-[var(--text-muted)] mt-1.5 px-1",children:'Press Enter to send · Type "done" to end dialog'})]})]})}function R9(){const e=fe(l=>l.activeDialog),n=fe(l=>l.nodes);if(!e)return null;const r=n[e.agentName];return r?b.jsxs("div",{className:"h-full flex flex-col bg-[var(--bg)] overflow-hidden",children:[b.jsxs("div",{className:"flex items-center gap-2.5 px-5 py-3 border-b border-[var(--border)] bg-[var(--surface)] flex-shrink-0",children:[b.jsx(pm,{className:"w-4 h-4 text-fuchsia-400"}),b.jsxs("h2",{className:"text-sm font-semibold text-[var(--text)]",children:["Dialog with ",e.agentName]})]}),b.jsx("div",{className:"flex-1 overflow-hidden px-5 py-4",children:b.jsx(D9,{node:r})})]}):null}function O9(){const e=fe(l=>l.selectedNode),n=fe(l=>l.activeDialog),r=fe(l=>l.dialogEngaged);return b.jsxs(Ip,{direction:"vertical",className:"flex-1 overflow-hidden",children:[b.jsx(ko,{defaultSize:70,minSize:30,children:b.jsxs(Ip,{direction:"horizontal",className:"h-full",children:[b.jsx(ko,{defaultSize:e?65:100,minSize:40,children:n&&r?b.jsx(R9,{}):b.jsx(U4,{})}),e&&b.jsxs(b.Fragment,{children:[b.jsx(qp,{className:"w-[3px] bg-[var(--border)] hover:bg-[var(--text-muted)] transition-colors cursor-col-resize"}),b.jsx(ko,{defaultSize:35,minSize:20,maxSize:60,children:b.jsx(N9,{})})]})]})}),b.jsx(qp,{className:"h-[3px] bg-[var(--border)] hover:bg-[var(--text-muted)] transition-colors cursor-row-resize"}),b.jsx(ko,{defaultSize:30,minSize:5,maxSize:70,collapsible:!0,children:b.jsx(C9,{})})]})}const L9=3e4;function H9(){const e=fe(p=>p.processEvent),n=fe(p=>p.replayState),r=fe(p=>p.setWsStatus),l=fe(p=>p.setWsSend),a=V.useRef(null),o=V.useRef(1e3),u=V.useRef(null),c=V.useRef(null),d=V.useRef(()=>{}),h=V.useCallback(()=>{r("reconnecting"),u.current=setTimeout(()=>{o.current=Math.min(o.current*2,L9),d.current()},o.current)},[r]),m=V.useCallback(()=>{r("connecting"),c.current&&c.current.abort();const p=new AbortController;c.current=p,fetch("/api/state",{signal:p.signal}).then(x=>x.json()).then(x=>{x&&x.length>0&&n(x);const w=`${window.location.protocol==="https:"?"wss:":"ws:"}//${window.location.host}/ws`;try{const E=new WebSocket(w);a.current=E,E.onopen=()=>{o.current=1e3,r("connected"),l(S=>{E.readyState===WebSocket.OPEN&&E.send(JSON.stringify(S))})},E.onmessage=S=>{try{const _=JSON.parse(S.data);e(_)}catch(_){console.error("Failed to parse WebSocket message:",_)}},E.onclose=()=>{r("disconnected"),l(null),a.current=null,h()},E.onerror=()=>{}}catch{h()}}).catch(x=>{p.signal.aborted||(console.error("Failed to fetch state:",x),h())})},[e,n,r,l,h]);d.current=m,V.useEffect(()=>(m(),()=>{c.current&&c.current.abort(),u.current&&clearTimeout(u.current),a.current&&a.current.close(),l(null)}),[m,l])}function B9(){const e=fe(h=>h.setReplayMode),n=fe(h=>h.setWsStatus),r=fe(h=>h.replayPlaying),l=fe(h=>h.replayPosition),a=fe(h=>h.replayTotalEvents),o=fe(h=>h.replaySpeed),u=fe(h=>h.replayEvents),c=fe(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(!r||l>=a){d.current&&clearTimeout(d.current),r&&l>=a&&fe.getState().setReplayPlaying(!1);return}const h=u[l-1],m=u[l];let p=100;if(h&&m){const x=(m.timestamp-h.timestamp)*1e3;p=Math.max(16,Math.min(x/o,2e3))}return d.current=setTimeout(()=>{c(l+1)},p),()=>{d.current&&clearTimeout(d.current)}},[r,l,a,o,u,c])}function I9(){return H9(),null}function q9(){return B9(),null}function U9(){const[e,n]=V.useState(null),r=fe(o=>o.replayMode),l=fe(o=>o.selectNode),a=fe(o=>o.workflowName);return V.useEffect(()=>{fetch("/api/replay/info").then(o=>{o.ok?n(!0):n(!1)}).catch(()=>n(!1))},[]),V.useEffect(()=>{document.title=a?`Conductor — ${a}`:"Conductor Dashboard"},[a]),V.useEffect(()=>{const o=u=>{u.key==="Escape"&&l(null)};return window.addEventListener("keydown",o),()=>window.removeEventListener("keydown",o)},[l]),e===null?null:b.jsxs("div",{className:"h-full flex flex-col bg-[var(--bg)]",children:[e?b.jsx(q9,{}):b.jsx(I9,{}),b.jsx(RN,{}),b.jsx(ON,{}),b.jsx(O9,{}),r?b.jsx(qN,{}):b.jsx(HN,{})]})}eN.createRoot(document.getElementById("root")).render(b.jsx(V.StrictMode,{children:b.jsx(U9,{})})); diff --git a/src/conductor/web/static/assets/index-DtQyLSS-.js b/src/conductor/web/static/assets/index-DtQyLSS-.js deleted file mode 100644 index fbce94a..0000000 --- a/src/conductor/web/static/assets/index-DtQyLSS-.js +++ /dev/null @@ -1,321 +0,0 @@ -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 deleted file mode 100644 index a70ca99..0000000 --- a/src/conductor/web/static/assets/index-oGqcFl1O.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-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 bd37a08..935b1dc 100644 --- a/src/conductor/web/static/index.html +++ b/src/conductor/web/static/index.html @@ -5,8 +5,8 @@ Conductor Dashboard - - + +
    diff --git a/tests/test_config/test_dialog_schema.py b/tests/test_config/test_dialog_schema.py new file mode 100644 index 0000000..a7f86d0 --- /dev/null +++ b/tests/test_config/test_dialog_schema.py @@ -0,0 +1,98 @@ +"""Tests for dialog mode schema validation.""" + +from __future__ import annotations + +import pytest +from pydantic import ValidationError + +from conductor.config.schema import ( + AgentDef, + DialogConfig, + GateOption, + RouteDef, +) + + +class TestDialogConfig: + """Tests for DialogConfig model.""" + + def test_valid_dialog_config(self) -> None: + """Test creating a valid dialog config.""" + config = DialogConfig(trigger_prompt="Enter dialog if uncertain") + assert config.trigger_prompt == "Enter dialog if uncertain" + + def test_dialog_config_requires_trigger_prompt(self) -> None: + """Test that trigger_prompt is required.""" + with pytest.raises(ValidationError, match="trigger_prompt"): + DialogConfig() # type: ignore[call-arg] + + def test_multiline_trigger_prompt(self) -> None: + """Test that multiline trigger prompts work.""" + config = DialogConfig(trigger_prompt="Enter dialog if:\n- uncertain\n- needs clarification") + assert "\n" in config.trigger_prompt + + +class TestAgentDefDialog: + """Tests for dialog field on AgentDef.""" + + def test_agent_with_dialog(self) -> None: + """Test creating a regular agent with dialog config.""" + agent = AgentDef( + name="researcher", + prompt="Research the topic", + dialog=DialogConfig( + trigger_prompt="Enter dialog if uncertain about scope", + ), + ) + assert agent.dialog is not None + assert agent.dialog.trigger_prompt == "Enter dialog if uncertain about scope" + + def test_agent_without_dialog(self) -> None: + """Test that dialog defaults to None.""" + agent = AgentDef(name="researcher", prompt="Research the topic") + assert agent.dialog is None + + def test_human_gate_cannot_have_dialog(self) -> None: + """Test that human_gate agents cannot have dialog config.""" + with pytest.raises(ValidationError, match="human_gate agents cannot have 'dialog'"): + AgentDef( + name="gate", + type="human_gate", + prompt="Choose an option", + options=[GateOption(label="Continue", value="continue", route="next")], + dialog=DialogConfig(trigger_prompt="test"), + ) + + def test_script_cannot_have_dialog(self) -> None: + """Test that script agents cannot have dialog config.""" + with pytest.raises(ValidationError, match="script agents cannot have 'dialog'"): + AgentDef( + name="runner", + type="script", + command="echo hello", + dialog=DialogConfig(trigger_prompt="test"), + ) + + def test_workflow_cannot_have_dialog(self) -> None: + """Test that workflow agents cannot have dialog config.""" + with pytest.raises(ValidationError, match="workflow agents cannot have 'dialog'"): + AgentDef( + name="sub", + type="workflow", + workflow="./sub.yaml", + dialog=DialogConfig(trigger_prompt="test"), + ) + + def test_agent_with_dialog_and_routes(self) -> None: + """Test that agents with dialog can also have routes.""" + agent = AgentDef( + name="researcher", + prompt="Research the topic", + dialog=DialogConfig(trigger_prompt="Enter dialog if uncertain"), + routes=[ + RouteDef(to="next_agent", when="{{ output.result == 'done' }}"), + RouteDef(to="$end"), + ], + ) + assert agent.dialog is not None + assert len(agent.routes) == 2 diff --git a/tests/test_engine/test_dialog_evaluator.py b/tests/test_engine/test_dialog_evaluator.py new file mode 100644 index 0000000..1cd86da --- /dev/null +++ b/tests/test_engine/test_dialog_evaluator.py @@ -0,0 +1,206 @@ +"""Tests for the dialog evaluator.""" + +from __future__ import annotations + +from unittest.mock import AsyncMock, MagicMock + +import pytest + +from conductor.config.schema import AgentDef, DialogConfig +from conductor.engine.dialog_evaluator import DialogEvaluator + + +class TestDialogEvaluatorParsing: + """Tests for the evaluator response parsing.""" + + def setup_method(self) -> None: + self.evaluator = DialogEvaluator() + + def test_parse_valid_trigger_response(self) -> None: + """Test parsing a valid trigger=true response.""" + response = ( + '{"trigger": true, "reason": "Agent is uncertain", "question": "What do you mean?"}' + ) + result = self.evaluator._parse_evaluation(response) + assert result.trigger is True + assert result.reason == "Agent is uncertain" + assert result.question == "What do you mean?" + + def test_parse_valid_no_trigger_response(self) -> None: + """Test parsing a valid trigger=false response.""" + response = '{"trigger": false, "reason": "Output is clear"}' + result = self.evaluator._parse_evaluation(response) + assert result.trigger is False + assert result.reason == "Output is clear" + + def test_parse_markdown_wrapped_json(self) -> None: + """Test parsing JSON wrapped in markdown code blocks.""" + response = '```json\n{"trigger": true, "reason": "test", "question": "What?"}\n```' + result = self.evaluator._parse_evaluation(response) + assert result.trigger is True + assert result.question == "What?" + + def test_parse_invalid_json_returns_no_trigger(self) -> None: + """Test that invalid JSON gracefully returns no trigger.""" + response = "This is not JSON at all" + result = self.evaluator._parse_evaluation(response) + assert result.trigger is False + assert "Failed to parse" in result.reason + + def test_parse_empty_response(self) -> None: + """Test that empty response returns no trigger.""" + result = self.evaluator._parse_evaluation("") + assert result.trigger is False + + def test_parse_missing_fields_defaults(self) -> None: + """Test that missing fields use defaults.""" + response = '{"trigger": true}' + result = self.evaluator._parse_evaluation(response) + assert result.trigger is True + assert result.reason == "" + assert result.question == "" + + def test_parse_unterminated_code_fence_keeps_last_line(self) -> None: + """Unterminated ```json fences must not slice off the last JSON line.""" + # No closing ``` — the previous parser dropped the last line and failed. + response = '```json\n{"trigger": true, "reason": "ok"}' + result = self.evaluator._parse_evaluation(response) + assert result.trigger is True + assert result.reason == "ok" + + def test_parse_terminated_code_fence_strips_both(self) -> None: + """Closing fence must still be stripped when present.""" + response = '```\n{"trigger": false, "reason": "clear"}\n```' + result = self.evaluator._parse_evaluation(response) + assert result.trigger is False + assert result.reason == "clear" + + +class TestEvaluatorTruncation: + """Tests for the agent-output truncation marker.""" + + def test_truncate_below_limit_unchanged(self) -> None: + from conductor.engine.dialog_evaluator import _truncate_for_evaluator + + text = "abc" + assert _truncate_for_evaluator(text, limit=10) == "abc" + + def test_truncate_above_limit_appends_marker(self) -> None: + from conductor.engine.dialog_evaluator import _truncate_for_evaluator + + text = "x" * 6000 + result = _truncate_for_evaluator(text, limit=4000) + assert result.endswith("…[truncated]") + assert len(result) <= 4000 + + @pytest.mark.asyncio + async def test_evaluate_truncates_large_output(self) -> None: + """Large agent outputs should reach the evaluator with a marker.""" + evaluator = DialogEvaluator() + agent = AgentDef( + name="test", + prompt="test", + dialog=DialogConfig(trigger_prompt="Enter dialog if uncertain"), + ) + provider = MagicMock() + provider.execute_dialog_turn = AsyncMock( + return_value='{"trigger": false, "reason": "clear"}' + ) + + # 5000+ char output to force truncation + big_output = {"text": "x" * 5500} + await evaluator.evaluate(agent, big_output, provider) + + call_args = provider.execute_dialog_turn.call_args + user_message = call_args.kwargs["user_message"] + assert "…[truncated]" in user_message + + +class TestDialogEvaluatorEvaluate: + """Tests for the full evaluate() method.""" + + def setup_method(self) -> None: + self.evaluator = DialogEvaluator() + + @pytest.mark.asyncio + async def test_no_dialog_config_returns_no_trigger(self) -> None: + """Test that agents without dialog config never trigger.""" + agent = AgentDef(name="test", prompt="test") + provider = MagicMock() + result = await self.evaluator.evaluate(agent, {"result": "test"}, provider) + assert result.trigger is False + assert result.reason == "No dialog config" + + @pytest.mark.asyncio + async def test_evaluator_calls_provider(self) -> None: + """Test that the evaluator makes an LLM call via the provider.""" + agent = AgentDef( + name="test", + prompt="test", + dialog=DialogConfig(trigger_prompt="Enter dialog if uncertain"), + ) + provider = MagicMock() + provider.execute_dialog_turn = AsyncMock( + return_value=( + '{"trigger": true, "reason": "Agent is uncertain", "question": "What do you need?"}' + ) + ) + + result = await self.evaluator.evaluate( + agent, {"result": "I am uncertain about this."}, provider + ) + assert result.trigger is True + assert result.question == "What do you need?" + provider.execute_dialog_turn.assert_called_once() + + @pytest.mark.asyncio + async def test_evaluator_no_trigger(self) -> None: + """Test evaluator correctly returns no trigger.""" + agent = AgentDef( + name="test", + prompt="test", + dialog=DialogConfig(trigger_prompt="Enter dialog if uncertain"), + ) + provider = MagicMock() + provider.execute_dialog_turn = AsyncMock( + return_value='{"trigger": false, "reason": "All clear"}' + ) + + result = await self.evaluator.evaluate(agent, {"result": "Clear output."}, provider) + assert result.trigger is False + provider.execute_dialog_turn.assert_called_once() + + @pytest.mark.asyncio + async def test_evaluator_failure_returns_no_trigger(self) -> None: + """Test that evaluator LLM failure gracefully returns no trigger.""" + agent = AgentDef( + name="test", + prompt="test", + dialog=DialogConfig(trigger_prompt="Enter dialog if uncertain"), + ) + provider = MagicMock() + provider.execute_dialog_turn = AsyncMock(side_effect=Exception("API error")) + + result = await self.evaluator.evaluate(agent, {"result": "test"}, provider) + assert result.trigger is False + assert result.reason == "Evaluation failed" + + @pytest.mark.asyncio + async def test_evaluator_prompt_includes_trigger_criteria(self) -> None: + """Test that the evaluator prompt includes the trigger_prompt criteria.""" + agent = AgentDef( + name="my_agent", + prompt="test", + dialog=DialogConfig(trigger_prompt="Trigger when confused"), + ) + provider = MagicMock() + provider.execute_dialog_turn = AsyncMock( + return_value='{"trigger": false, "reason": "nope"}' + ) + + await self.evaluator.evaluate(agent, {"result": "hello"}, provider) + + # Verify the system prompt contains the trigger criteria + call_args = provider.execute_dialog_turn.call_args + assert "Trigger when confused" in call_args.kwargs["system_prompt"] + assert "my_agent" in call_args.kwargs["user_message"] diff --git a/tests/test_engine/test_dialog_integration.py b/tests/test_engine/test_dialog_integration.py new file mode 100644 index 0000000..dfb8ee7 --- /dev/null +++ b/tests/test_engine/test_dialog_integration.py @@ -0,0 +1,116 @@ +"""End-to-end integration test for dialog mode. + +Exercises the real `WorkflowEngine` path: agent executes → evaluator triggers → +dialog handler runs the conversation → agent re-executes with the dialog +transcript injected into its guidance section. Pure-mock all I/O so there's no +SDK or network dependency. +""" + +from __future__ import annotations + +from typing import Any +from unittest.mock import AsyncMock, patch + +import pytest + +from conductor.config.schema import ( + AgentDef, + ContextConfig, + DialogConfig, + LimitsConfig, + OutputField, + RouteDef, + RuntimeConfig, + WorkflowConfig, + WorkflowDef, +) +from conductor.engine.workflow import WorkflowEngine +from conductor.providers.copilot import CopilotProvider + + +@pytest.mark.asyncio +async def test_dialog_triggers_then_re_executes_with_transcript() -> None: + """Full integration: dialog triggers → user converses → agent re-runs with transcript. + + Asserts that: + - the agent runs twice (initial output + post-dialog re-execution) + - the second run's rendered prompt contains the dialog transcript + """ + captured_prompts: list[str] = [] + handler_call_count = 0 + + def mock_handler(agent: AgentDef, prompt: str, context: dict[str, Any]) -> dict[str, Any]: + nonlocal handler_call_count + handler_call_count += 1 + captured_prompts.append(prompt) + if handler_call_count == 1: + return {"answer": "I'm uncertain about the constraints."} + return {"answer": "After our chat, the answer is X."} + + provider = CopilotProvider(mock_handler=mock_handler) + + # Mock the provider's dialog-turn API used by both the evaluator and + # the dialog handler. The order of calls is: + # 1. evaluator.evaluate() -> returns trigger=true JSON + # 2. dialog handler turn 1 -> returns agent reply with terminal READY marker + dialog_turn_responses = [ + '{"trigger": true, "reason": "uncertain", "question": "What did you mean by X?"}', + "Got it, ready to proceed. [READY_TO_CONTINUE]", + ] + provider.execute_dialog_turn = AsyncMock(side_effect=dialog_turn_responses) # type: ignore[method-assign] + + config = WorkflowConfig( + workflow=WorkflowDef( + name="dialog-integration", + entry_point="advisor", + runtime=RuntimeConfig(provider="copilot"), + context=ContextConfig(mode="accumulate"), + limits=LimitsConfig(max_iterations=5), + ), + agents=[ + AgentDef( + name="advisor", + model="gpt-4", + prompt="Advise on: {{ workflow.input.topic }}", + output={"answer": OutputField(type="string")}, + dialog=DialogConfig(trigger_prompt="Trigger if the agent is uncertain"), + routes=[RouteDef(to="$end")], + ), + ], + output={"answer": "{{ advisor.output.answer }}"}, + ) + + engine = WorkflowEngine(config, provider) + + # Engage in CLI mode: patch the dialog handler's interactive prompts. + with ( + patch.object( + engine._dialog_handler, + "_ask_engagement", + new_callable=AsyncMock, + return_value="engage", + ), + patch.object( + engine._dialog_handler, + "_get_user_input", + new_callable=AsyncMock, + # First: user's content message; second: 'yes' to approve agent's continue proposal. + side_effect=["please clarify the constraints", "yes"], + ), + ): + result = await engine.run({"topic": "production rollout"}) + + # The agent must have been called twice (initial + re-execute after dialog) + assert handler_call_count == 2, ( + f"Expected agent to run twice, got {handler_call_count}. " + "Dialog re-execution did not happen." + ) + + # Workflow output reflects the post-dialog answer + assert result["answer"] == "After our chat, the answer is X." + + # The re-execution prompt MUST contain the dialog transcript markers + re_execution_prompt = captured_prompts[1] + assert "--- DIALOG WITH USER ---" in re_execution_prompt + assert "--- END DIALOG ---" in re_execution_prompt + assert "please clarify the constraints" in re_execution_prompt diff --git a/tests/test_gates/test_dialog.py b/tests/test_gates/test_dialog.py new file mode 100644 index 0000000..b9bea73 --- /dev/null +++ b/tests/test_gates/test_dialog.py @@ -0,0 +1,628 @@ +"""Tests for the dialog handler.""" + +from __future__ import annotations + +from typing import Any +from unittest.mock import AsyncMock, MagicMock, patch + +import pytest + +from conductor.config.schema import AgentDef, DialogConfig +from conductor.gates.dialog import DialogHandler, DialogResult + + +class TestDialogHandlerSkip: + """Tests for dialog handler skip behavior.""" + + @pytest.mark.asyncio + async def test_skip_dialogs_returns_declined(self) -> None: + """Test that skip_dialogs=True auto-declines.""" + handler = DialogHandler(skip_dialogs=True) + agent = AgentDef( + name="test", + prompt="test", + dialog=DialogConfig(trigger_prompt="test"), + ) + provider = MagicMock() + + result = await handler.handle_dialog( + agent=agent, + agent_output={"result": "test"}, + opening_question="What do you think?", + provider=provider, + ) + + assert result.user_declined is True + assert result.messages == [] + + +class TestDialogHandlerDismiss: + """Tests for dismiss keyword detection.""" + + def test_dismiss_keywords(self) -> None: + """Test that standard dismiss keywords are detected.""" + handler = DialogHandler() + dismiss_words = [ + "done", + "continue", + "go ahead", + "proceed", + "resume", + "exit", + "/done", + "/continue", + ] + for keyword in dismiss_words: + assert handler._is_dismiss(keyword) is True + assert handler._is_dismiss(keyword.upper()) is True + assert handler._is_dismiss(f" {keyword} ") is True + + def test_non_dismiss_text(self) -> None: + """Test that normal text is not treated as dismiss.""" + handler = DialogHandler() + assert handler._is_dismiss("I have a question") is False + assert handler._is_dismiss("tell me more") is False + assert handler._is_dismiss("") is False + + +class TestDialogHandlerEngagement: + """Tests for the engagement choice flow.""" + + @pytest.mark.asyncio + async def test_user_declines_engagement(self) -> None: + """Test that declining engagement skips the dialog loop.""" + handler = DialogHandler(console=MagicMock()) + agent = AgentDef( + name="test", + prompt="test", + dialog=DialogConfig(trigger_prompt="test"), + ) + provider = MagicMock() + + with patch.object( + handler, + "_ask_engagement", + new_callable=AsyncMock, + return_value="decline", + ): + result = await handler.handle_dialog( + agent=agent, + agent_output={"result": "test"}, + opening_question="What do you think?", + provider=provider, + ) + + assert result.user_declined is True + assert len(result.messages) == 1 # Only the opening question + assert result.messages[0].role == "agent" + + @pytest.mark.asyncio + async def test_user_engages_then_dismisses(self) -> None: + """Test that user can engage and then dismiss.""" + handler = DialogHandler(console=MagicMock()) + agent = AgentDef( + name="test", + prompt="test", + dialog=DialogConfig(trigger_prompt="test"), + ) + provider = MagicMock() + provider.execute_dialog_turn = AsyncMock(return_value="Here's my answer.") + + with ( + patch.object(handler, "_ask_engagement", new_callable=AsyncMock, return_value="engage"), + patch.object( + handler, + "_get_user_input", + new_callable=AsyncMock, + side_effect=["tell me more", "done"], + ), + ): + result = await handler.handle_dialog( + agent=agent, + agent_output={"result": "test"}, + opening_question="What do you think?", + provider=provider, + ) + + assert result.user_dismissed is True + # Messages: opening agent, user "tell me more", agent response, user "done" + assert len(result.messages) == 4 + assert result.messages[0].role == "agent" + assert result.messages[1].role == "user" + assert result.messages[1].content == "tell me more" + assert result.messages[2].role == "agent" + assert result.messages[3].role == "user" + assert result.messages[3].content == "done" + + +class TestDialogHandlerAgentContinue: + """Tests for agent-proposed continuation.""" + + @pytest.mark.asyncio + async def test_agent_proposes_continue_user_approves(self) -> None: + """Test agent proposes [READY_TO_CONTINUE] and user approves.""" + handler = DialogHandler(console=MagicMock()) + agent = AgentDef( + name="test", + prompt="test", + dialog=DialogConfig(trigger_prompt="test"), + ) + provider = MagicMock() + provider.execute_dialog_turn = AsyncMock( + return_value="I think I have enough info. [READY_TO_CONTINUE]" + ) + + with ( + patch.object(handler, "_ask_engagement", new_callable=AsyncMock, return_value="engage"), + patch.object( + handler, + "_get_user_input", + new_callable=AsyncMock, + # First call: user message, second call: approve continuation + side_effect=["here's context", "yes"], + ), + ): + result = await handler.handle_dialog( + agent=agent, + agent_output={"result": "test"}, + opening_question="What do you think?", + provider=provider, + ) + + assert result.agent_proposed_continue is True + assert not result.user_dismissed + + @pytest.mark.asyncio + async def test_agent_proposes_continue_user_declines(self) -> None: + """Test agent proposes [READY_TO_CONTINUE] but user wants to keep chatting.""" + handler = DialogHandler(console=MagicMock()) + agent = AgentDef( + name="test", + prompt="test", + dialog=DialogConfig(trigger_prompt="test"), + ) + provider = MagicMock() + provider.execute_dialog_turn = AsyncMock( + side_effect=[ + "I think I have enough. [READY_TO_CONTINUE]", + "Okay, what else?", + ] + ) + + responses = { + 1: "here's more context", + 2: "no", # Decline the continue proposal + 3: "actually wait", + } + call_count = 0 + + async def mock_input( + prompt_text: str = "[bold magenta]You[/bold magenta]", + ) -> str: + nonlocal call_count + call_count += 1 + return responses.get(call_count, "done") + + with ( + patch.object(handler, "_ask_engagement", new_callable=AsyncMock, return_value="engage"), + patch.object(handler, "_get_user_input", side_effect=mock_input), + ): + result = await handler.handle_dialog( + agent=agent, + agent_output={"result": "test"}, + opening_question="What do you think?", + provider=provider, + ) + + assert result.agent_proposed_continue is True + assert result.user_dismissed is True + + +class TestDialogHandlerExceptionRecovery: + """Provider exceptions must not corrupt history with orphan user turns.""" + + @pytest.mark.asyncio + async def test_cli_exception_pops_user_history(self) -> None: + """If the provider raises, the next call must not see two user turns in a row.""" + handler = DialogHandler(console=MagicMock()) + agent = AgentDef( + name="test", + prompt="test", + dialog=DialogConfig(trigger_prompt="test"), + ) + provider = MagicMock() + # Sequence: first call succeeds, second raises, third must NOT see the + # orphaned "second try" user turn left over from the failed attempt. + captured_histories: list[list[dict[str, str]]] = [] + + async def execute( + *, + system_prompt: str, + user_message: str, + history: list[dict[str, str]], + model: str | None, + ) -> str: + captured_histories.append(list(history)) + if len(captured_histories) == 2: + raise RuntimeError("boom") + return f"agent-reply-{len(captured_histories)}" + + provider.execute_dialog_turn = AsyncMock(side_effect=execute) + + with ( + patch.object(handler, "_ask_engagement", new_callable=AsyncMock, return_value="engage"), + patch.object( + handler, + "_get_user_input", + new_callable=AsyncMock, + side_effect=["hello", "second try", "third try", "done"], + ), + ): + result = await handler.handle_dialog( + agent=agent, + agent_output={"result": "test"}, + opening_question="?", + provider=provider, + ) + + # Three provider calls: hello (ok), second try (fail), third try (ok). + assert len(captured_histories) == 3 + # Third call must see only the FIRST successful exchange — not "second try". + assert captured_histories[2] == [ + {"role": "user", "content": "hello"}, + {"role": "assistant", "content": "agent-reply-1"}, + ] + assert result.user_dismissed is True + + +class TestReadyMarkerTerminalOnly: + """The READY marker must only fire as a terminal token (anti-injection).""" + + @pytest.mark.asyncio + async def test_ready_marker_in_middle_of_response_does_not_fire(self) -> None: + """If the agent merely quotes the marker mid-response, dialog continues.""" + handler = DialogHandler(console=MagicMock()) + agent = AgentDef( + name="test", + prompt="test", + dialog=DialogConfig(trigger_prompt="test"), + ) + provider = MagicMock() + # Marker mid-response (e.g., quoting the user back) — must not end dialog. + provider.execute_dialog_turn = AsyncMock( + side_effect=[ + "You said [READY_TO_CONTINUE] but let's keep going.", + "Okay last word.", + ] + ) + + with ( + patch.object(handler, "_ask_engagement", new_callable=AsyncMock, return_value="engage"), + patch.object( + handler, + "_get_user_input", + new_callable=AsyncMock, + side_effect=["please discuss", "more please", "done"], + ), + ): + result = await handler.handle_dialog( + agent=agent, + agent_output={"result": "test"}, + opening_question="?", + provider=provider, + ) + + # The mid-marker response must NOT have been treated as a continue proposal. + assert result.agent_proposed_continue is False + # And the marker text must not appear in the stored agent message. + agent_msgs = [m.content for m in result.messages if m.role == "agent"] + # Opening question (first agent msg) doesn't contain marker; the actual + # response does (because it wasn't terminal, so we left the text intact). + assert any("[READY_TO_CONTINUE]" in c for c in agent_msgs), ( + "Mid-response marker should be preserved verbatim when not terminal" + ) + + @pytest.mark.asyncio + async def test_ready_marker_at_end_strips_from_stored_message(self) -> None: + """Terminal marker fires the proposal AND is stripped from the stored message.""" + handler = DialogHandler(console=MagicMock()) + agent = AgentDef( + name="test", + prompt="test", + dialog=DialogConfig(trigger_prompt="test"), + ) + provider = MagicMock() + provider.execute_dialog_turn = AsyncMock(return_value="All clear. [READY_TO_CONTINUE]") + + with ( + patch.object(handler, "_ask_engagement", new_callable=AsyncMock, return_value="engage"), + patch.object( + handler, + "_get_user_input", + new_callable=AsyncMock, + side_effect=["context", "yes"], + ), + ): + result = await handler.handle_dialog( + agent=agent, + agent_output={"result": "test"}, + opening_question="?", + provider=provider, + ) + + assert result.agent_proposed_continue is True + agent_msgs = [m.content for m in result.messages if m.role == "agent"] + assert all("[READY_TO_CONTINUE]" not in c for c in agent_msgs), ( + "Terminal marker should be stripped from stored agent messages" + ) + + +class TestDialogHandlerEvents: + """Tests for dialog event emission.""" + + @pytest.mark.asyncio + async def test_events_emitted_on_skip(self) -> None: + """Test that no events are emitted when dialog is skipped.""" + emitter = MagicMock() + handler = DialogHandler(skip_dialogs=True, emitter=emitter) + agent = AgentDef( + name="test", + prompt="test", + dialog=DialogConfig(trigger_prompt="test"), + ) + + await handler.handle_dialog( + agent=agent, + agent_output={"result": "test"}, + opening_question="What?", + provider=MagicMock(), + ) + + # No events should be emitted on skip + emitter.emit.assert_not_called() + + @pytest.mark.asyncio + async def test_events_emitted_on_decline(self) -> None: + """Test that dialog_started and dialog_completed are emitted on decline.""" + emitter = MagicMock() + handler = DialogHandler(console=MagicMock(), emitter=emitter) + agent = AgentDef( + name="test", + prompt="test", + dialog=DialogConfig(trigger_prompt="test"), + ) + + with patch.object( + handler, + "_ask_engagement", + new_callable=AsyncMock, + return_value="decline", + ): + await handler.handle_dialog( + agent=agent, + agent_output={"result": "test"}, + opening_question="What?", + provider=MagicMock(), + ) + + # Should have: dialog_started, dialog_message (opening), dialog_completed + event_types = [call.args[0].type for call in emitter.emit.call_args_list] + assert "dialog_started" in event_types + assert "dialog_message" in event_types + assert "dialog_completed" in event_types + + +class TestDialogResult: + """Tests for DialogResult dataclass.""" + + def test_default_values(self) -> None: + """Test DialogResult has sensible defaults.""" + result = DialogResult(dialog_id="test-123") + assert result.dialog_id == "test-123" + assert result.messages == [] + assert result.user_dismissed is False + assert result.user_declined is False + assert result.agent_proposed_continue is False + + +class TestWebDialogFlow: + """Tests for web-mode dialog driven by `WebDashboard.wait_for_dialog_message`. + + The web flow lives in `_web_handle_dialog` and was previously uncovered. + These tests mock the dashboard's queue read with scripted message payloads. + """ + + def _make_handler( + self, + scripted_messages: list[dict[str, Any]], + ) -> tuple[DialogHandler, MagicMock]: + """Build a handler whose dashboard returns the scripted messages in order.""" + dashboard = MagicMock() + dashboard.wait_for_dialog_message = AsyncMock(side_effect=scripted_messages) + handler = DialogHandler(console=MagicMock(), web_dashboard=dashboard) + return handler, dashboard + + @pytest.mark.asyncio + async def test_web_decline_at_engagement(self) -> None: + """If the first dashboard message is a decline, the dialog ends without provider calls.""" + handler, _ = self._make_handler([{"type": "dialog_decline", "agent_name": "test"}]) + agent = AgentDef( + name="test", + prompt="test", + dialog=DialogConfig(trigger_prompt="test"), + ) + provider = MagicMock() + provider.execute_dialog_turn = AsyncMock() + + result = await handler.handle_dialog( + agent=agent, + agent_output={"result": "test"}, + opening_question="?", + provider=provider, + ) + + assert result.user_declined is True + provider.execute_dialog_turn.assert_not_called() + + @pytest.mark.asyncio + async def test_web_happy_path_single_turn(self) -> None: + """Engage with a message, agent replies, user types 'done' to dismiss.""" + handler, _ = self._make_handler( + [ + {"type": "dialog_message", "agent_name": "test", "content": "tell me more"}, + {"type": "dialog_message", "agent_name": "test", "content": "done"}, + ] + ) + agent = AgentDef( + name="test", + prompt="test", + dialog=DialogConfig(trigger_prompt="test"), + ) + provider = MagicMock() + provider.execute_dialog_turn = AsyncMock(return_value="here is more info") + + result = await handler.handle_dialog( + agent=agent, + agent_output={"result": "test"}, + opening_question="?", + provider=provider, + ) + + assert result.user_dismissed is True + # Provider should have been called exactly once with the user's first message + provider.execute_dialog_turn.assert_called_once() + # Transcript: opening agent question, user "tell me more", agent reply, user "done" + roles = [m.role for m in result.messages] + assert roles == ["agent", "user", "agent", "user"] + + @pytest.mark.asyncio + async def test_web_exception_pops_user_history(self) -> None: + """Provider exception in web mode must not leave an orphan user turn.""" + handler, _ = self._make_handler( + [ + {"type": "dialog_message", "agent_name": "test", "content": "first try"}, + {"type": "dialog_message", "agent_name": "test", "content": "second try"}, + {"type": "dialog_message", "agent_name": "test", "content": "done"}, + ] + ) + agent = AgentDef( + name="test", + prompt="test", + dialog=DialogConfig(trigger_prompt="test"), + ) + + captured_histories: list[list[dict[str, str]]] = [] + + async def execute( + *, + system_prompt: str, + user_message: str, + history: list[dict[str, str]], + model: str | None, + ) -> str: + captured_histories.append(list(history)) + if len(captured_histories) == 1: + raise RuntimeError("boom") + return "recovered reply" + + provider = MagicMock() + provider.execute_dialog_turn = AsyncMock(side_effect=execute) + + result = await handler.handle_dialog( + agent=agent, + agent_output={"result": "test"}, + opening_question="?", + provider=provider, + ) + + # First call (failed): history was empty, message="first try" + # Second call (recovered): history must STILL be empty — no orphan "first try" + assert captured_histories == [[], []] + assert result.user_dismissed is True + + @pytest.mark.asyncio + async def test_web_ready_marker_decline_no_duplicate_history(self) -> None: + """Agent proposes continue, user declines with new content — provider must + see the approval as a single user turn, not duplicated.""" + handler, _ = self._make_handler( + [ + # engagement message + {"type": "dialog_message", "agent_name": "test", "content": "first message"}, + # user's "no, here's more thoughts" reply to the continue proposal + {"type": "dialog_message", "agent_name": "test", "content": "no, here's more"}, + # final dismiss + {"type": "dialog_message", "agent_name": "test", "content": "done"}, + ] + ) + agent = AgentDef( + name="test", + prompt="test", + dialog=DialogConfig(trigger_prompt="test"), + ) + + captured_histories: list[list[dict[str, str]]] = [] + + async def execute( + *, + system_prompt: str, + user_message: str, + history: list[dict[str, str]], + model: str | None, + ) -> str: + captured_histories.append(list(history)) + if len(captured_histories) == 1: + return "I think I have enough. [READY_TO_CONTINUE]" + return "Ok, anything else?" + + provider = MagicMock() + provider.execute_dialog_turn = AsyncMock(side_effect=execute) + + await handler.handle_dialog( + agent=agent, + agent_output={"result": "test"}, + opening_question="?", + provider=provider, + ) + + # Two provider calls expected. The second call's history must contain + # exactly user→agent→, NOT user→agent→user→user. + assert len(captured_histories) == 2 + second_call_history = captured_histories[1] + # Count consecutive user-role entries + for prev, curr in zip(second_call_history, second_call_history[1:], strict=False): + assert not (prev["role"] == "user" and curr["role"] == "user"), ( + f"Two consecutive user turns in history: {second_call_history}" + ) + # Specifically: history should be [user="first message", assistant=clean READY response] + assert second_call_history == [ + {"role": "user", "content": "first message"}, + {"role": "assistant", "content": "I think I have enough. [READY_TO_CONTINUE]"}, + ] + + @pytest.mark.asyncio + async def test_web_ready_marker_approval_yes(self) -> None: + """Agent proposes continue, user says 'yes' — dialog ends cleanly.""" + handler, _ = self._make_handler( + [ + {"type": "dialog_message", "agent_name": "test", "content": "context"}, + {"type": "dialog_message", "agent_name": "test", "content": "yes"}, + ] + ) + agent = AgentDef( + name="test", + prompt="test", + dialog=DialogConfig(trigger_prompt="test"), + ) + provider = MagicMock() + provider.execute_dialog_turn = AsyncMock(return_value="All set. [READY_TO_CONTINUE]") + + result = await handler.handle_dialog( + agent=agent, + agent_output={"result": "test"}, + opening_question="?", + provider=provider, + ) + + assert result.agent_proposed_continue is True + assert not result.user_dismissed + assert not result.user_declined diff --git a/tests/test_providers/test_claude.py b/tests/test_providers/test_claude.py index 8365ac3..a7465b6 100644 --- a/tests/test_providers/test_claude.py +++ b/tests/test_providers/test_claude.py @@ -2304,6 +2304,122 @@ def __init__(self) -> None: assert provider._retry_history[0]["delay"] == 5.0 +class TestClaudeExecuteDialogTurn: + """Tests for Claude provider dialog-turn API (provider parity with Copilot).""" + + @patch("conductor.providers.claude.ANTHROPIC_SDK_AVAILABLE", True) + @patch("conductor.providers.claude.AsyncAnthropic") + @patch("conductor.providers.claude.anthropic") + @pytest.mark.asyncio + async def test_dialog_turn_empty_history_sends_only_current_message( + self, mock_anthropic_module: Mock, mock_anthropic_class: Mock + ) -> None: + """Empty history -> messages list contains only the current user message.""" + mock_anthropic_module.__version__ = "0.77.0" + mock_client = Mock() + mock_client.models.list = AsyncMock(return_value=Mock(data=[])) + mock_text_block = Mock() + mock_text_block.text = "the reply" + mock_response = Mock() + mock_response.content = [mock_text_block] + mock_client.messages.create = AsyncMock(return_value=mock_response) + mock_anthropic_class.return_value = mock_client + + provider = ClaudeProvider() + result = await provider.execute_dialog_turn( + system_prompt="be a helpful assistant", + user_message="hello", + history=[], + ) + + assert result == "the reply" + kwargs = mock_client.messages.create.call_args.kwargs + assert kwargs["system"] == "be a helpful assistant" + assert kwargs["messages"] == [{"role": "user", "content": "hello"}] + + @patch("conductor.providers.claude.ANTHROPIC_SDK_AVAILABLE", True) + @patch("conductor.providers.claude.AsyncAnthropic") + @patch("conductor.providers.claude.anthropic") + @pytest.mark.asyncio + async def test_dialog_turn_multi_turn_history_preserved_in_order( + self, mock_anthropic_module: Mock, mock_anthropic_class: Mock + ) -> None: + """Multi-turn history is appended in order, with current message last.""" + mock_anthropic_module.__version__ = "0.77.0" + mock_client = Mock() + mock_client.models.list = AsyncMock(return_value=Mock(data=[])) + mock_response = Mock() + mock_response.content = [Mock(text="ack")] + mock_client.messages.create = AsyncMock(return_value=mock_response) + mock_anthropic_class.return_value = mock_client + + provider = ClaudeProvider() + await provider.execute_dialog_turn( + system_prompt="sys", + user_message="third user msg", + history=[ + {"role": "user", "content": "first"}, + {"role": "assistant", "content": "second"}, + ], + ) + + kwargs = mock_client.messages.create.call_args.kwargs + assert kwargs["messages"] == [ + {"role": "user", "content": "first"}, + {"role": "assistant", "content": "second"}, + {"role": "user", "content": "third user msg"}, + ] + + @patch("conductor.providers.claude.ANTHROPIC_SDK_AVAILABLE", True) + @patch("conductor.providers.claude.AsyncAnthropic") + @patch("conductor.providers.claude.anthropic") + @pytest.mark.asyncio + async def test_dialog_turn_model_override_used( + self, mock_anthropic_module: Mock, mock_anthropic_class: Mock + ) -> None: + """model arg overrides the provider default.""" + mock_anthropic_module.__version__ = "0.77.0" + mock_client = Mock() + mock_client.models.list = AsyncMock(return_value=Mock(data=[])) + mock_response = Mock() + mock_response.content = [Mock(text="x")] + mock_client.messages.create = AsyncMock(return_value=mock_response) + mock_anthropic_class.return_value = mock_client + + provider = ClaudeProvider() + await provider.execute_dialog_turn( + system_prompt="sys", + user_message="hi", + history=None, + model="claude-3-opus-20240229", + ) + + kwargs = mock_client.messages.create.call_args.kwargs + assert kwargs["model"] == "claude-3-opus-20240229" + + @patch("conductor.providers.claude.ANTHROPIC_SDK_AVAILABLE", True) + @patch("conductor.providers.claude.AsyncAnthropic") + @patch("conductor.providers.claude.anthropic") + @pytest.mark.asyncio + async def test_dialog_turn_error_wrapped_as_provider_error( + self, mock_anthropic_module: Mock, mock_anthropic_class: Mock + ) -> None: + """SDK errors propagate as ProviderError, not bare exceptions.""" + mock_anthropic_module.__version__ = "0.77.0" + mock_client = Mock() + mock_client.models.list = AsyncMock(return_value=Mock(data=[])) + mock_client.messages.create = AsyncMock(side_effect=RuntimeError("api down")) + mock_anthropic_class.return_value = mock_client + + provider = ClaudeProvider() + with pytest.raises(ProviderError, match="api down"): + await provider.execute_dialog_turn( + system_prompt="sys", + user_message="hi", + history=[], + ) + + @patch("conductor.providers.claude.ANTHROPIC_SDK_AVAILABLE", True) @patch("conductor.providers.claude.AsyncAnthropic") class TestClaudeGetMaxPromptTokens: diff --git a/tests/test_providers/test_copilot.py b/tests/test_providers/test_copilot.py index cc90515..10fb6ce 100644 --- a/tests/test_providers/test_copilot.py +++ b/tests/test_providers/test_copilot.py @@ -697,6 +697,156 @@ def test_runs_on_unix(self, monkeypatch: pytest.MonkeyPatch) -> None: provider._fix_pipe_blocking_mode() +class TestCopilotExecuteDialogTurn: + """Tests for Copilot provider dialog-turn API (provider parity with Claude). + + The Copilot SDK is session-based and event-driven, so we mock create_session + and synthesize the assistant.message + session.idle events that real sessions + emit. + """ + + @staticmethod + def _build_event(event_type: str, content: str = "", message: str = "") -> Any: + """Build a fake SDK event with .type.value, .data.content, .data.message.""" + from unittest.mock import Mock as _Mock + + ev = _Mock() + ev.type = _Mock() + ev.type.value = event_type + ev.data = _Mock() + ev.data.content = content + ev.data.message = message + return ev + + async def _make_provider_with_session( + self, + captured: dict[str, Any], + response_text: str = "an answer", + ) -> CopilotProvider: + """Build a provider whose create_session returns a session that, on send, + invokes its event handler with assistant.message + session.idle. + """ + from unittest.mock import AsyncMock as _AsyncMock + + provider = CopilotProvider(mock_handler=stub_handler) + # Force the started state without invoking the real SDK + provider._started = True + + session = _AsyncMock() + captured_callback: dict[str, Any] = {} + + def on_event(callback: Any) -> None: + captured_callback["cb"] = callback + + session.on = on_event + + async def send(prompt: str) -> None: + captured["sent_prompt"] = prompt + cb = captured_callback["cb"] + cb(self._build_event("assistant.message", response_text)) + cb(self._build_event("session.idle")) + + session.send = send + session.destroy = _AsyncMock() + + async def create_session(**kwargs: Any) -> Any: + captured["create_session_kwargs"] = kwargs + return session + + client = _AsyncMock() + client.create_session = create_session + provider._client = client + return provider + + @pytest.mark.asyncio + async def test_dialog_turn_empty_history_sends_only_current_message(self) -> None: + captured: dict[str, Any] = {} + provider = await self._make_provider_with_session(captured, response_text="reply") + + result = await provider.execute_dialog_turn( + system_prompt="be helpful", + user_message="hello", + history=[], + ) + + assert result == "reply" + # System prompt is sent via create_session, not embedded in the prompt body + assert captured["create_session_kwargs"]["system_message"] == { + "mode": "replace", + "content": "be helpful", + } + # With empty history, the prompt is just the current user message line. + assert captured["sent_prompt"] == "User: hello" + + @pytest.mark.asyncio + async def test_dialog_turn_multi_turn_history_serialized_in_order(self) -> None: + captured: dict[str, Any] = {} + provider = await self._make_provider_with_session(captured) + + await provider.execute_dialog_turn( + system_prompt="sys", + user_message="third", + history=[ + {"role": "user", "content": "first"}, + {"role": "assistant", "content": "second"}, + ], + ) + + # History serialized as User:/Assistant: blocks separated by blank lines, + # with the current message appended last as a User: block. + assert captured["sent_prompt"] == ("User: first\n\nAssistant: second\n\nUser: third") + + @pytest.mark.asyncio + async def test_dialog_turn_model_override_used(self) -> None: + captured: dict[str, Any] = {} + provider = await self._make_provider_with_session(captured) + + await provider.execute_dialog_turn( + system_prompt="sys", + user_message="hi", + history=None, + model="claude-sonnet-4.5", + ) + + assert captured["create_session_kwargs"]["model"] == "claude-sonnet-4.5" + + @pytest.mark.asyncio + async def test_dialog_turn_session_error_wrapped_as_provider_error(self) -> None: + from unittest.mock import AsyncMock as _AsyncMock + + provider = CopilotProvider(mock_handler=stub_handler) + provider._started = True + + session = _AsyncMock() + captured_callback: dict[str, Any] = {} + + def on_event(callback: Any) -> None: + captured_callback["cb"] = callback + + session.on = on_event + + async def send(prompt: str) -> None: + cb = captured_callback["cb"] + cb(self._build_event("session.error", message="internal failure")) + + session.send = send + session.destroy = _AsyncMock() + + async def create_session(**kwargs: Any) -> Any: + return session + + client = _AsyncMock() + client.create_session = create_session + provider._client = client + + with pytest.raises(ProviderError, match="Dialog turn error"): + await provider.execute_dialog_turn( + system_prompt="sys", + user_message="hi", + history=[], + ) + + class TestGetMaxPromptTokens: """Tests for CopilotProvider.get_max_prompt_tokens."""