From 46e4b161672ea584d6550f3a9c63af6e50f596de Mon Sep 17 00:00:00 2001 From: Jonathan Singer Date: Fri, 17 Jul 2026 14:57:56 -0400 Subject: [PATCH] Add a local web viewer for runs `strix view` opens a run in the browser, served locally from the run files (nothing is uploaded). There's also a quick link to it from the TUI and the end-of-run summary. --- .gitignore | 6 + CONTRIBUTING.md | 14 + Makefile | 9 +- pyproject.toml | 4 + strix.spec | 11 + strix/core/paths.py | 17 + strix/interface/assets/tui_styles.tcss | 10 + strix/interface/main.py | 15 + strix/interface/tui/app.py | 62 +- strix/interface/tui/history.py | 20 +- strix/telemetry/posthog.py | 21 + strix/viewer/__init__.py | 12 + strix/viewer/cli.py | 131 + strix/viewer/server.py | 206 + strix/viewer/transcript.py | 72 + .../viewer_dist/assets/index-C0ezPxZx.js | 397 ++ .../viewer_dist/assets/index-nWrlYz6N.css | 10 + strix/viewer/viewer_dist/index.html | 15 + strix/viewer/viewer_dist/logo.png | Bin 0 -> 3801 bytes strix/viewer_src/index.html | 14 + strix/viewer_src/package-lock.json | 4272 +++++++++++++++++ strix/viewer_src/package.json | 34 + strix/viewer_src/public/logo.png | Bin 0 -> 3801 bytes strix/viewer_src/src/App.tsx | 498 ++ .../src/components/AddRepositoryDialog.tsx | 20 + .../src/components/IssueSeveritySummary.tsx | 77 + .../src/components/live/AgentGraph.tsx | 254 + .../src/components/live/AgentNode.tsx | 48 + .../src/components/live/AgentTranscript.tsx | 253 + .../src/components/live/GraphSkeleton.tsx | 70 + .../tool-renderers/AgentCommsRenderer.tsx | 92 + .../tool-renderers/ApplyPatchRenderer.tsx | 124 + .../live/tool-renderers/BrowserRenderer.tsx | 110 + .../live/tool-renderers/ChatBubble.tsx | 25 + .../live/tool-renderers/FallbackRenderer.tsx | 36 + .../live/tool-renderers/FileEditRenderer.tsx | 65 + .../live/tool-renderers/FinishRenderer.tsx | 32 + .../live/tool-renderers/LoadSkillRenderer.tsx | 20 + .../live/tool-renderers/Markdown.tsx | 24 + .../live/tool-renderers/NotesRenderer.tsx | 87 + .../live/tool-renderers/ProxyRenderer.tsx | 250 + .../live/tool-renderers/PythonRenderer.tsx | 68 + .../live/tool-renderers/ScanInfoRenderer.tsx | 46 + .../live/tool-renderers/TerminalRenderer.tsx | 131 + .../live/tool-renderers/ThinkRenderer.tsx | 18 + .../live/tool-renderers/TodoRenderer.tsx | 120 + .../live/tool-renderers/ToolCard.tsx | 100 + .../live/tool-renderers/ViewImageRenderer.tsx | 30 + .../tool-renderers/VulnReportRenderer.tsx | 73 + .../live/tool-renderers/WebSearchRenderer.tsx | 24 + .../components/live/tool-renderers/index.ts | 173 + .../components/live/tool-renderers/utils.ts | 3 + .../vulnerability/CodeDiffBlock.tsx | 114 + .../vulnerability/ContentSection.tsx | 27 + .../components/vulnerability/IssueSidebar.tsx | 277 ++ .../components/vulnerability/MdCodeBlock.tsx | 141 + .../src/components/vulnerability/PocBlock.tsx | 77 + .../vulnerability/VulnerabilityDetail.tsx | 233 + strix/viewer_src/src/index.css | 173 + strix/viewer_src/src/main.tsx | 10 + strix/viewer_src/src/stores/auth.ts | 16 + strix/viewer_src/src/types/events.ts | 102 + strix/viewer_src/src/types/issues.ts | 197 + strix/viewer_src/tsconfig.json | 25 + strix/viewer_src/vite.config.ts | 21 + tests/test_viewer.py | 171 + 66 files changed, 9801 insertions(+), 6 deletions(-) create mode 100644 strix/viewer/__init__.py create mode 100644 strix/viewer/cli.py create mode 100644 strix/viewer/server.py create mode 100644 strix/viewer/transcript.py create mode 100644 strix/viewer/viewer_dist/assets/index-C0ezPxZx.js create mode 100644 strix/viewer/viewer_dist/assets/index-nWrlYz6N.css create mode 100644 strix/viewer/viewer_dist/index.html create mode 100644 strix/viewer/viewer_dist/logo.png create mode 100644 strix/viewer_src/index.html create mode 100644 strix/viewer_src/package-lock.json create mode 100644 strix/viewer_src/package.json create mode 100644 strix/viewer_src/public/logo.png create mode 100644 strix/viewer_src/src/App.tsx create mode 100644 strix/viewer_src/src/components/AddRepositoryDialog.tsx create mode 100644 strix/viewer_src/src/components/IssueSeveritySummary.tsx create mode 100644 strix/viewer_src/src/components/live/AgentGraph.tsx create mode 100644 strix/viewer_src/src/components/live/AgentNode.tsx create mode 100644 strix/viewer_src/src/components/live/AgentTranscript.tsx create mode 100644 strix/viewer_src/src/components/live/GraphSkeleton.tsx create mode 100644 strix/viewer_src/src/components/live/tool-renderers/AgentCommsRenderer.tsx create mode 100644 strix/viewer_src/src/components/live/tool-renderers/ApplyPatchRenderer.tsx create mode 100644 strix/viewer_src/src/components/live/tool-renderers/BrowserRenderer.tsx create mode 100644 strix/viewer_src/src/components/live/tool-renderers/ChatBubble.tsx create mode 100644 strix/viewer_src/src/components/live/tool-renderers/FallbackRenderer.tsx create mode 100644 strix/viewer_src/src/components/live/tool-renderers/FileEditRenderer.tsx create mode 100644 strix/viewer_src/src/components/live/tool-renderers/FinishRenderer.tsx create mode 100644 strix/viewer_src/src/components/live/tool-renderers/LoadSkillRenderer.tsx create mode 100644 strix/viewer_src/src/components/live/tool-renderers/Markdown.tsx create mode 100644 strix/viewer_src/src/components/live/tool-renderers/NotesRenderer.tsx create mode 100644 strix/viewer_src/src/components/live/tool-renderers/ProxyRenderer.tsx create mode 100644 strix/viewer_src/src/components/live/tool-renderers/PythonRenderer.tsx create mode 100644 strix/viewer_src/src/components/live/tool-renderers/ScanInfoRenderer.tsx create mode 100644 strix/viewer_src/src/components/live/tool-renderers/TerminalRenderer.tsx create mode 100644 strix/viewer_src/src/components/live/tool-renderers/ThinkRenderer.tsx create mode 100644 strix/viewer_src/src/components/live/tool-renderers/TodoRenderer.tsx create mode 100644 strix/viewer_src/src/components/live/tool-renderers/ToolCard.tsx create mode 100644 strix/viewer_src/src/components/live/tool-renderers/ViewImageRenderer.tsx create mode 100644 strix/viewer_src/src/components/live/tool-renderers/VulnReportRenderer.tsx create mode 100644 strix/viewer_src/src/components/live/tool-renderers/WebSearchRenderer.tsx create mode 100644 strix/viewer_src/src/components/live/tool-renderers/index.ts create mode 100644 strix/viewer_src/src/components/live/tool-renderers/utils.ts create mode 100644 strix/viewer_src/src/components/vulnerability/CodeDiffBlock.tsx create mode 100644 strix/viewer_src/src/components/vulnerability/ContentSection.tsx create mode 100644 strix/viewer_src/src/components/vulnerability/IssueSidebar.tsx create mode 100644 strix/viewer_src/src/components/vulnerability/MdCodeBlock.tsx create mode 100644 strix/viewer_src/src/components/vulnerability/PocBlock.tsx create mode 100644 strix/viewer_src/src/components/vulnerability/VulnerabilityDetail.tsx create mode 100644 strix/viewer_src/src/index.css create mode 100644 strix/viewer_src/src/main.tsx create mode 100644 strix/viewer_src/src/stores/auth.ts create mode 100644 strix/viewer_src/src/types/events.ts create mode 100644 strix/viewer_src/src/types/issues.ts create mode 100644 strix/viewer_src/tsconfig.json create mode 100644 strix/viewer_src/vite.config.ts create mode 100644 tests/test_viewer.py diff --git a/.gitignore b/.gitignore index 895fe898..0ee4176f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,9 @@ +# Node / local-viewer SPA source (the built bundle in +# strix/viewer/viewer_dist/ is committed and shipped; do not ignore it) +node_modules/ +strix/viewer_src/node_modules/ +strix/viewer_src/.vite/ + # Python __pycache__/ *.py[cod] diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index f14e5e36..8acd9167 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -99,6 +99,20 @@ We welcome feature ideas! Please: - Consider implementation approach - Be open to discussion +## ๐Ÿ–ฅ๏ธ Local viewer SPA + +`strix view` serves a prebuilt web UI whose source lives in `strix/viewer_src/` +(a Vite + React project) and whose built output is committed to +`strix/viewer/viewer_dist/` and shipped in the package. End users never run a +JS build. If you change anything under `strix/viewer_src/`, rebuild and commit +the output: + +```bash +make viewer # or: npm --prefix strix/viewer_src ci && npm --prefix strix/viewer_src run build +``` + +Commit both the source change and the regenerated `strix/viewer/viewer_dist/`. + ## ๐Ÿค Community - **Discord**: [Join our community](https://discord.gg/strix-ai) diff --git a/Makefile b/Makefile index faaade56..b9b77cb0 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -.PHONY: help install dev-install format lint type-check security check-all clean pre-commit setup-dev dev +.PHONY: help install dev-install format lint type-check security check-all clean pre-commit setup-dev dev viewer help: @echo "Available commands:" @@ -15,6 +15,7 @@ help: @echo "" @echo "Development:" @echo " pre-commit - Run pre-commit hooks on all files" + @echo " viewer - Rebuild the local-viewer SPA (commit the output)" @echo " clean - Clean up cache files and artifacts" install: @@ -66,5 +67,11 @@ clean: find . -name "*.pyc" -delete 2>/dev/null || true @echo "โœ… Cleanup complete!" +viewer: + @echo "๐Ÿ–ฅ๏ธ Building the local-viewer SPA..." + npm --prefix strix/viewer_src ci + npm --prefix strix/viewer_src run build + @echo "โœ… Viewer built to strix/viewer/viewer_dist/ (commit the changes)." + dev: format lint type-check @echo "โœ… Development cycle complete!" diff --git a/pyproject.toml b/pyproject.toml index 384773f4..a5ef64a4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -74,6 +74,10 @@ build-backend = "hatchling.build" [tool.hatch.build.targets.wheel] packages = ["strix"] +# The prebuilt viewer bundle under strix/viewer/viewer_dist/ ships automatically +# (hatchling includes non-.py files under the package). The Vite SOURCE lives +# under the package dir too but must never ship in the wheel. +exclude = ["strix/viewer_src", "strix/viewer_src/**"] # ============================================================================ # Type Checking Configuration diff --git a/strix.spec b/strix.spec index 78aa35d4..84509139 100644 --- a/strix.spec +++ b/strix.spec @@ -25,6 +25,13 @@ for tcss_file in strix_root.rglob('*.tcss'): rel_path = tcss_file.relative_to(project_root) datas.append((str(tcss_file), str(rel_path.parent))) +# Prebuilt local-viewer SPA (served by `strix view`). +viewer_dist = strix_root / 'viewer' / 'viewer_dist' +for asset in viewer_dist.rglob('*'): + if asset.is_file(): + rel_path = asset.relative_to(project_root) + datas.append((str(asset), str(rel_path.parent))) + datas += collect_data_files('textual') datas += collect_data_files('tiktoken') @@ -151,6 +158,10 @@ hiddenimports = [ 'strix.report.dedupe', 'strix.report.state', 'strix.report.writer', + 'strix.viewer', + 'strix.viewer.cli', + 'strix.viewer.server', + 'strix.viewer.transcript', 'strix.runtime', 'strix.runtime.backends', 'strix.runtime.caido_bootstrap', diff --git a/strix/core/paths.py b/strix/core/paths.py index c8e21b73..2cd7ba0b 100644 --- a/strix/core/paths.py +++ b/strix/core/paths.py @@ -21,3 +21,20 @@ def runtime_state_dir(run_dir: Path) -> Path: def run_record_path(run_dir: Path) -> Path: return run_dir / RUN_RECORD_FILENAME + + +def runs_base_dir(*, cwd: Path | None = None) -> Path: + base = cwd or Path.cwd() + return base / RUNS_DIR_NAME + + +def latest_run_dir(*, cwd: Path | None = None) -> Path | None: + base = runs_base_dir(cwd=cwd) + if not base.is_dir(): + return None + candidates = [child for child in base.iterdir() if run_record_path(child).is_file()] + if not candidates: + return None + # run.json is rewritten on status/end changes, so its mtime tracks activity + # more reliably than the directory mtime (a live run sorts to the top). + return max(candidates, key=lambda child: run_record_path(child).stat().st_mtime) diff --git a/strix/interface/assets/tui_styles.tcss b/strix/interface/assets/tui_styles.tcss index d2984c8b..7e964dfa 100644 --- a/strix/interface/assets/tui_styles.tcss +++ b/strix/interface/assets/tui_styles.tcss @@ -67,6 +67,16 @@ Toast.-information .toast--title { display: none; } +#viewer_cta { + height: auto; + background: transparent; + border: round #333333; + color: #60a5fa; + padding: 0 1; + margin-bottom: 1; + text-align: center; +} + #agents_tree { height: 1fr; background: transparent; diff --git a/strix/interface/main.py b/strix/interface/main.py index 2403200d..57ea9ebd 100644 --- a/strix/interface/main.py +++ b/strix/interface/main.py @@ -759,6 +759,13 @@ def display_completion_message(args: argparse.Namespace, results_path: Path) -> results_text.append(str(results_path), style="#60a5fa") panel_parts.extend(["\n", results_text]) + view_text = Text() + view_text.append("\n") + view_text.append("View", style="dim") + view_text.append(" ") + view_text.append(f"strix view {args.run_name}", style="#22c55e") + panel_parts.extend(["\n", view_text]) + if not scan_completed: resume_text = Text() resume_text.append("\n") @@ -846,6 +853,14 @@ def main() -> None: if sys.platform == "win32": asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy()) + # `strix view []` is a viewer-only subcommand, dispatched before the + # scan argument parser (which requires a target) and before any scan setup. + if len(sys.argv) > 1 and sys.argv[1] == "view": + from strix.viewer.cli import run_view + + run_view(sys.argv[2:]) + return + args = parse_arguments() if args.config: diff --git a/strix/interface/tui/app.py b/strix/interface/tui/app.py index 73a7ec0d..43543cfb 100644 --- a/strix/interface/tui/app.py +++ b/strix/interface/tui/app.py @@ -6,6 +6,7 @@ import logging import signal import sys import threading +import webbrowser from collections.abc import Callable from importlib.metadata import PackageNotFoundError from importlib.metadata import version as pkg_version @@ -768,6 +769,7 @@ class StrixTUIApp(App): # type: ignore[misc] Binding("ctrl+q", "request_quit", "Quit", priority=True), Binding("ctrl+c", "request_quit", "Quit", priority=True), Binding("escape", "stop_selected_agent", "Stop Agent", priority=True), + Binding("ctrl+o", "open_viewer", "Open Viewer", priority=True), ] def __init__(self, args: argparse.Namespace): @@ -794,6 +796,8 @@ class StrixTUIApp(App): # type: ignore[misc] self._displayed_events: list[str] = [] self._scan_thread: threading.Thread | None = None + self._viewer_httpd: Any = None + self._viewer_url: str | None = None self._scan_loop: asyncio.AbstractEventLoop | None = None self._scan_stop_event = threading.Event() self._scan_completed = threading.Event() @@ -903,7 +907,12 @@ class StrixTUIApp(App): # type: ignore[misc] vulnerabilities_panel = VulnerabilitiesPanel(id="vulnerabilities_panel") - sidebar = Vertical(agents_tree, vulnerabilities_panel, stats_scroll, id="sidebar") + viewer_cta = Static(self._viewer_cta_markup(), id="viewer_cta") + viewer_cta.ALLOW_SELECT = False + + sidebar = Vertical( + viewer_cta, agents_tree, vulnerabilities_panel, stats_scroll, id="sidebar" + ) content_container.mount(chat_area_container) content_container.mount(sidebar) @@ -1805,6 +1814,7 @@ class StrixTUIApp(App): # type: ignore[misc] async def action_custom_quit(self) -> None: self._fire_sandbox_cleanup() + self._shutdown_viewer() if self._scan_thread and self._scan_thread.is_alive(): self._scan_stop_event.set() @@ -1813,6 +1823,56 @@ class StrixTUIApp(App): # type: ignore[misc] self.exit() + def _viewer_cta_markup(self, url: str | None = None) -> str: + if url: + return f"[@click=app.open_viewer][#22c55e]โ— Viewer running[/][/]\n[dim]{url}[/]" + return "[@click=app.open_viewer]โ–ถ Watch live in browser[/]" + + def _set_viewer_cta(self, markup: str) -> None: + with contextlib.suppress(Exception): + self.query_one("#viewer_cta", Static).update(markup) + + def action_open_viewer(self) -> None: + if self._viewer_url: + with contextlib.suppress(Exception): + webbrowser.open(self._viewer_url) + return + try: + from strix.viewer.server import bundle_is_built, serve + + if not bundle_is_built(): + self._set_viewer_cta("[#eab308]Viewer UI not built[/]") + return + run_dir = self.report_state.get_run_dir() + httpd, url = serve(run_dir, open_browser=True) + except Exception: + logger.debug("failed to start local viewer", exc_info=True) + self._set_viewer_cta("[red]Viewer failed to start[/]") + return + self._viewer_httpd = httpd + self._viewer_url = url + self._set_viewer_cta(self._viewer_cta_markup(url)) + + with contextlib.suppress(Exception): + from strix.telemetry import posthog + + live = self.report_state.run_record.get("status") not in { + "completed", + "stopped", + "failed", + "interrupted", + } + posthog.viewer_opened(source="tui", live=live) + + def _shutdown_viewer(self) -> None: + httpd = self._viewer_httpd + if httpd is None: + return + self._viewer_httpd = None + with contextlib.suppress(Exception): + httpd.shutdown() + httpd.server_close() + def _fire_sandbox_cleanup(self) -> None: self.coordinator.mark_shutting_down() loop = self._scan_loop diff --git a/strix/interface/tui/history.py b/strix/interface/tui/history.py index 1598b1a3..999ca08c 100644 --- a/strix/interface/tui/history.py +++ b/strix/interface/tui/history.py @@ -24,14 +24,26 @@ def load_session_history(run_dir: Path, agent_ids: Any) -> list[tuple[str, dict[ if not agents_db.exists() or not session_ids: return [] session_id_set = set(session_ids) + # Open read-only: the scan process may be actively writing this WAL database + # from another process (the local viewer tails it live), and a reader must + # never lock or mutate it. mode=ro (not immutable=1) still reads the latest + # committed WAL state; WAL permits concurrent readers alongside the writer. + conn: sqlite3.Connection | None = None try: - with sqlite3.connect(agents_db) as conn: - rows = conn.execute( - "select id, session_id, message_data, created_at from agent_messages order by id" - ).fetchall() + conn = sqlite3.connect( + f"file:{agents_db}?mode=ro", + uri=True, + check_same_thread=False, + ) + rows = conn.execute( + "select id, session_id, message_data, created_at from agent_messages order by id" + ).fetchall() except sqlite3.Error: logger.exception("Failed to hydrate TUI history from %s", agents_db) return [] + finally: + if conn is not None: + conn.close() items: list[tuple[str, dict[str, Any], str]] = [] for row_id, agent_id, message_data, created_at in rows: diff --git a/strix/telemetry/posthog.py b/strix/telemetry/posthog.py index e2da6282..73efaf20 100644 --- a/strix/telemetry/posthog.py +++ b/strix/telemetry/posthog.py @@ -142,6 +142,27 @@ def end(report_state: "ReportState", exit_reason: str = "completed") -> None: ) +def viewer_opened(source: str, live: bool) -> None: + _send( + "viewer_opened", + { + **base_props(), + "source": source, + "live": live, + }, + ) + + +def viewer_cta_clicked(cta: str) -> None: + _send( + "viewer_cta_clicked", + { + **base_props(), + "cta": cta[:64], + }, + ) + + def error(error_type: str) -> None: props = {**base_props(), "error_type": error_type} _send("error", props) diff --git a/strix/viewer/__init__.py b/strix/viewer/__init__.py new file mode 100644 index 00000000..5a0842a7 --- /dev/null +++ b/strix/viewer/__init__.py @@ -0,0 +1,12 @@ +"""Local web viewer for Strix runs. + +Serves a prebuilt single-page app that renders a run (live or finished) read +directly from the run's on-disk files. No cloud dependency, no file picker. +""" + +from __future__ import annotations + +from strix.viewer.server import serve + + +__all__ = ["serve"] diff --git a/strix/viewer/cli.py b/strix/viewer/cli.py new file mode 100644 index 00000000..94eb07a4 --- /dev/null +++ b/strix/viewer/cli.py @@ -0,0 +1,131 @@ +"""`strix view []` command: serve a run's viewer UI locally.""" + +from __future__ import annotations + +import argparse +import logging +import time +from typing import TYPE_CHECKING + +from rich.console import Console + +from strix.core.paths import ( + RUNS_DIR_NAME, + latest_run_dir, + run_dir_for, + run_record_path, + runs_base_dir, +) +from strix.viewer.server import bundle_is_built, serve +from strix.viewer.transcript import read_run_summary + + +if TYPE_CHECKING: + from pathlib import Path + from typing import NoReturn + + +logger = logging.getLogger(__name__) + + +def run_view(argv: list[str]) -> None: + parser = argparse.ArgumentParser( + prog="strix view", + description="Open a local web view of a Strix run (live or finished).", + ) + parser.add_argument( + "run", + nargs="?", + default=None, + help=f"Run name under ./{RUNS_DIR_NAME} (defaults to the most recent run).", + ) + parser.add_argument( + "--port", + type=int, + default=0, + help="Port to serve on (default: an available ephemeral port).", + ) + parser.add_argument("--host", default="127.0.0.1", help=argparse.SUPPRESS) + parser.add_argument( + "--no-open", + action="store_true", + help="Do not open the browser automatically.", + ) + args = parser.parse_args(argv) + + console = Console() + + if not bundle_is_built(): + console.print( + "[bold red]Viewer UI is not built.[/]\n" + "Build it with: [cyan]npm --prefix strix/viewer_src ci && " + "npm --prefix strix/viewer_src run build[/]" + ) + raise SystemExit(1) + + run_dir = _resolve_run_dir(args.run, console) + + httpd, url = serve( + run_dir, + host=args.host, + port=args.port, + open_browser=not args.no_open, + ) + + run_name = run_dir.name + summary = read_run_summary(run_dir) + live = not summary.get("finished", False) + + from strix.telemetry import posthog # noqa: PLC0415 + + posthog.viewer_opened(source="cli", live=live) + + state_label = "[#eab308]live[/]" if live else "[#22c55e]finished[/]" + console.print() + console.print(f"Serving [bold white]{run_name}[/] ({state_label}) at [#60a5fa]{url}[/]") + console.print("[dim]Press Ctrl-C to stop the viewer.[/]") + console.print() + + try: + while True: + time.sleep(1.0) + except KeyboardInterrupt: + console.print("\n[dim]Viewer stopped.[/]") + finally: + httpd.shutdown() + httpd.server_close() + + +def _resolve_run_dir(run: str | None, console: Console) -> Path: + if run: + run_dir = run_dir_for(run) + if not run_record_path(run_dir).is_file(): + _fail_no_run(console, requested=run) + return run_dir + + latest = latest_run_dir() + if latest is None: + _fail_no_run(console, requested=None) + return latest + + +def _fail_no_run(console: Console, *, requested: str | None) -> NoReturn: + base = runs_base_dir() + available = sorted( + (child.name for child in base.iterdir() if run_record_path(child).is_file()), + reverse=True, + ) if base.is_dir() else [] + + if requested: + console.print(f"[bold red]No run named '{requested}' under ./{RUNS_DIR_NAME}.[/]") + else: + console.print(f"[bold red]No runs found under ./{RUNS_DIR_NAME}.[/]") + + if available: + console.print("Available runs:") + for name in available[:20]: + console.print(f" [cyan]{name}[/]") + raise SystemExit(1) + + +__all__ = ["run_view"] diff --git a/strix/viewer/server.py b/strix/viewer/server.py new file mode 100644 index 00000000..cd9e4972 --- /dev/null +++ b/strix/viewer/server.py @@ -0,0 +1,206 @@ +"""Local HTTP server that serves the viewer SPA and a run's data from disk. + +Design notes: +- Uses only the standard library (no new runtime dependency). The workload is + serving static files plus a handful of JSON reads off disk, so an async stack + buys nothing here. +- The browser polls the JSON endpoints (~1s) rather than using SSE: a finished + run stops polling, and short-lived polls survive sleep/network blips without + server-side connection state, which suits a stdlib ThreadingHTTPServer. +- All reads happen per-request straight from disk, so the same server serves a + live in-progress run and a finished one identically; the SPA distinguishes + them via the ``finished`` flag on /api/run. +""" + +from __future__ import annotations + +import json +import logging +import mimetypes +import threading +import webbrowser +from http import HTTPStatus +from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer +from pathlib import Path +from typing import Any +from urllib.parse import unquote, urlsplit + +from strix.viewer.transcript import ( + build_run_state, + read_report_markdown, + read_run_summary, + read_vulnerabilities, +) + + +logger = logging.getLogger(__name__) + + +def bundle_dir() -> Path: + """Directory holding the committed, prebuilt SPA (index.html + assets).""" + return Path(__file__).resolve().parent / "viewer_dist" + + +def bundle_is_built() -> bool: + return (bundle_dir() / "index.html").is_file() + + +class _ViewerState: + def __init__(self, run_dir: Path, assets_dir: Path) -> None: + self.run_dir = run_dir + self.assets_dir = assets_dir + + +def _make_handler(state: _ViewerState) -> type[BaseHTTPRequestHandler]: + class ViewerHandler(BaseHTTPRequestHandler): + server_version = "StrixViewer/1.0" + + def log_message(self, format: str, *args: Any) -> None: # noqa: A002 + logger.debug("viewer %s - %s", self.address_string(), format % args) + + def do_GET(self) -> None: + path = urlsplit(self.path).path + try: + if path.startswith("/api/"): + self._handle_api(path) + else: + self._handle_static(path) + except BrokenPipeError: + # The browser closed the connection mid-response (e.g. it + # navigated away between polls). Not an error. + logger.debug("viewer client disconnected during %s", path) + except Exception: + # A bad request must never kill the worker thread. + logger.exception("viewer request failed: %s", path) + self._send_json(HTTPStatus.INTERNAL_SERVER_ERROR, {"error": "internal error"}) + + def do_POST(self) -> None: + path = urlsplit(self.path).path + try: + if path == "/api/event": + self._handle_event() + else: + self._send_json(HTTPStatus.NOT_FOUND, {"error": "unknown endpoint"}) + except BrokenPipeError: + logger.debug("viewer client disconnected during POST %s", path) + except Exception: + # A bad request must never kill the worker thread. + logger.exception("viewer request failed: POST %s", path) + self._send_json(HTTPStatus.INTERNAL_SERVER_ERROR, {"error": "internal error"}) + + def _handle_event(self) -> None: + length = int(self.headers.get("Content-Length") or 0) + raw = self.rfile.read(length) if length else b"" + try: + body = json.loads(raw or b"{}") + except json.JSONDecodeError: + body = {} + # Only the viewer's own sign-up/upsell CTA click is forwarded, as an + # anonymous PostHog event that respects the global telemetry opt-out. + if isinstance(body, dict) and body.get("event") == "cta_clicked": + cta = str(body.get("cta") or "unknown") + from strix.telemetry import posthog # noqa: PLC0415 + + posthog.viewer_cta_clicked(cta) + self.send_response(HTTPStatus.NO_CONTENT) + self.end_headers() + + def _handle_api(self, path: str) -> None: + run_dir = state.run_dir + if path == "/api/run": + self._send_json(HTTPStatus.OK, read_run_summary(run_dir)) + elif path == "/api/vulnerabilities": + self._send_json(HTTPStatus.OK, read_vulnerabilities(run_dir)) + elif path == "/api/report": + self._send_json(HTTPStatus.OK, {"markdown": read_report_markdown(run_dir)}) + elif path == "/api/transcript": + self._send_json(HTTPStatus.OK, build_run_state(run_dir)) + else: + self._send_json(HTTPStatus.NOT_FOUND, {"error": "unknown endpoint"}) + + def _handle_static(self, path: str) -> None: + target = self._resolve_asset(path) + if target is None: + # SPA fallback: unknown non-asset routes render index.html so + # client-side deep links work. + target = state.assets_dir / "index.html" + if not target.is_file(): + self._send_json(HTTPStatus.NOT_FOUND, {"error": "not found"}) + return + content = target.read_bytes() + content_type, _ = mimetypes.guess_type(str(target)) + self.send_response(HTTPStatus.OK) + self.send_header("Content-Type", content_type or "application/octet-stream") + self.send_header("Content-Length", str(len(content))) + self.end_headers() + self.wfile.write(content) + + def _resolve_asset(self, path: str) -> Path | None: + rel = unquote(path).lstrip("/") + if not rel or rel.endswith("/"): + return None + root = state.assets_dir.resolve() + candidate = (root / rel).resolve() + # Path-traversal guard: never serve outside the bundle root. + if root != candidate and root not in candidate.parents: + logger.warning("viewer rejected traversal attempt: %s", path) + return None + return candidate if candidate.is_file() else None + + def _send_json(self, status: HTTPStatus, payload: Any) -> None: + body = json.dumps(payload).encode("utf-8") + self.send_response(status) + self.send_header("Content-Type", "application/json") + self.send_header("Content-Length", str(len(body))) + self.end_headers() + self.wfile.write(body) + + return ViewerHandler + + +def serve( + run_dir: Path, + *, + host: str = "127.0.0.1", + port: int = 0, + open_browser: bool = True, +) -> tuple[ThreadingHTTPServer, str]: + """Start the viewer server on a background thread and return (server, url). + + Binds an ephemeral port by default. If a fixed ``port`` is requested but in + use, falls back to an ephemeral port. Reused by both the ``strix view`` + command and the in-TUI launcher; callers own the server's lifetime. + """ + assets_dir = bundle_dir() + state = _ViewerState(run_dir=run_dir, assets_dir=assets_dir) + handler = _make_handler(state) + + try: + httpd = ThreadingHTTPServer((host, port), handler) + except OSError: + if port == 0: + raise + logger.info("viewer port %s unavailable, falling back to an ephemeral port", port) + httpd = ThreadingHTTPServer((host, 0), handler) + + httpd.daemon_threads = True + bound_port = int(httpd.server_address[1]) + url = f"http://{host}:{bound_port}" + + thread = threading.Thread(target=httpd.serve_forever, name="strix-viewer", daemon=True) + thread.start() + + if open_browser: + _open_browser(url) + + return httpd, url + + +def _open_browser(url: str) -> None: + try: + webbrowser.open(url) + except Exception: # noqa: BLE001 - launching the browser is best-effort + logger.debug("could not open browser for %s", url, exc_info=True) + + +__all__ = ["bundle_dir", "bundle_is_built", "serve"] diff --git a/strix/viewer/transcript.py b/strix/viewer/transcript.py new file mode 100644 index 00000000..781850ad --- /dev/null +++ b/strix/viewer/transcript.py @@ -0,0 +1,72 @@ +"""Build the JSON payloads the viewer SPA consumes from a run directory.""" + +from __future__ import annotations + +import json +import logging +from typing import TYPE_CHECKING, Any + +from strix.core.paths import run_record_path + + +if TYPE_CHECKING: + from pathlib import Path + + +logger = logging.getLogger(__name__) + +_TERMINAL_STATUSES = {"completed", "stopped", "failed", "interrupted"} + + +def build_run_state(run_dir: Path) -> dict[str, Any]: + """Agent graph + full per-agent event/message stream. + + Reuses the Textual-free ``TuiLiveView`` projection so the viewer and the TUI + share one parser for ``agents.json`` + ``agents.db`` and never drift. + """ + # Imported lazily so importing strix.viewer does not eagerly pull the TUI. + from strix.interface.tui.live_view import TuiLiveView # noqa: PLC0415 + + view = TuiLiveView() + view.hydrate_from_run_dir(run_dir) + return {"agents": list(view.agents.values()), "events": view.events} + + +def read_run_summary(run_dir: Path) -> dict[str, Any]: + """The ``run.json`` record plus a computed ``finished`` flag.""" + record = _load_json(run_record_path(run_dir), default={}) + if not isinstance(record, dict): + record = {} + status = record.get("status") + finished = status in _TERMINAL_STATUSES and bool(record.get("end_time")) + return {**record, "finished": finished} + + +def read_vulnerabilities(run_dir: Path) -> list[Any]: + """The ``vulnerabilities.json`` list (empty until a scan writes it).""" + data = _load_json(run_dir / "vulnerabilities.json", default=[]) + return data if isinstance(data, list) else [] + + +def read_report_markdown(run_dir: Path) -> str: + """The executive report markdown (empty until a scan writes it).""" + report_path = run_dir / "penetration_test_report.md" + try: + return report_path.read_text(encoding="utf-8") + except OSError: + return "" + + +def _load_json(path: Path, *, default: Any) -> Any: + try: + return json.loads(path.read_text(encoding="utf-8")) + except (OSError, json.JSONDecodeError): + return default + + +__all__ = [ + "build_run_state", + "read_report_markdown", + "read_run_summary", + "read_vulnerabilities", +] diff --git a/strix/viewer/viewer_dist/assets/index-C0ezPxZx.js b/strix/viewer/viewer_dist/assets/index-C0ezPxZx.js new file mode 100644 index 00000000..ff6d56bd --- /dev/null +++ b/strix/viewer/viewer_dist/assets/index-C0ezPxZx.js @@ -0,0 +1,397 @@ +(function(){const n=document.createElement("link").relList;if(n&&n.supports&&n.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))a(o);new MutationObserver(o=>{for(const s of o)if(s.type==="childList")for(const c of s.addedNodes)c.tagName==="LINK"&&c.rel==="modulepreload"&&a(c)}).observe(document,{childList:!0,subtree:!0});function i(o){const s={};return o.integrity&&(s.integrity=o.integrity),o.referrerPolicy&&(s.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?s.credentials="include":o.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function a(o){if(o.ep)return;o.ep=!0;const s=i(o);fetch(o.href,s)}})();function as(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var Bd={exports:{}},Oo={};/** + * @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 dy;function pk(){if(dy)return Oo;dy=1;var e=Symbol.for("react.transitional.element"),n=Symbol.for("react.fragment");function i(a,o,s){var c=null;if(s!==void 0&&(c=""+s),o.key!==void 0&&(c=""+o.key),"key"in o){s={};for(var f in o)f!=="key"&&(s[f]=o[f])}else s=o;return o=s.ref,{$$typeof:e,type:a,key:c,ref:o!==void 0?o:null,props:s}}return Oo.Fragment=n,Oo.jsx=i,Oo.jsxs=i,Oo}var hy;function mk(){return hy||(hy=1,Bd.exports=pk()),Bd.exports}var v=mk(),Ud={exports:{}},Ge={};/** + * @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 py;function gk(){if(py)return Ge;py=1;var e=Symbol.for("react.transitional.element"),n=Symbol.for("react.portal"),i=Symbol.for("react.fragment"),a=Symbol.for("react.strict_mode"),o=Symbol.for("react.profiler"),s=Symbol.for("react.consumer"),c=Symbol.for("react.context"),f=Symbol.for("react.forward_ref"),h=Symbol.for("react.suspense"),d=Symbol.for("react.memo"),p=Symbol.for("react.lazy"),m=Symbol.for("react.activity"),y=Symbol.iterator;function b(z){return z===null||typeof z!="object"?null:(z=y&&z[y]||z["@@iterator"],typeof z=="function"?z:null)}var _={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},S=Object.assign,N={};function E(z,G,D){this.props=z,this.context=G,this.refs=N,this.updater=D||_}E.prototype.isReactComponent={},E.prototype.setState=function(z,G){if(typeof z!="object"&&typeof z!="function"&&z!=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,z,G,"setState")},E.prototype.forceUpdate=function(z){this.updater.enqueueForceUpdate(this,z,"forceUpdate")};function k(){}k.prototype=E.prototype;function w(z,G,D){this.props=z,this.context=G,this.refs=N,this.updater=D||_}var O=w.prototype=new k;O.constructor=w,S(O,E.prototype),O.isPureReactComponent=!0;var B=Array.isArray;function R(){}var H={H:null,A:null,T:null,S:null},I=Object.prototype.hasOwnProperty;function K(z,G,D){var F=D.ref;return{$$typeof:e,type:z,key:G,ref:F!==void 0?F:null,props:D}}function L(z,G){return K(z.type,G,z.props)}function q(z){return typeof z=="object"&&z!==null&&z.$$typeof===e}function X(z){var G={"=":"=0",":":"=2"};return"$"+z.replace(/[=:]/g,function(D){return G[D]})}var Y=/\/+/g;function A(z,G){return typeof z=="object"&&z!==null&&z.key!=null?X(""+z.key):G.toString(36)}function $(z){switch(z.status){case"fulfilled":return z.value;case"rejected":throw z.reason;default:switch(typeof z.status=="string"?z.then(R,R):(z.status="pending",z.then(function(G){z.status==="pending"&&(z.status="fulfilled",z.value=G)},function(G){z.status==="pending"&&(z.status="rejected",z.reason=G)})),z.status){case"fulfilled":return z.value;case"rejected":throw z.reason}}throw z}function M(z,G,D,F,U){var Q=typeof z;(Q==="undefined"||Q==="boolean")&&(z=null);var J=!1;if(z===null)J=!0;else switch(Q){case"bigint":case"string":case"number":J=!0;break;case"object":switch(z.$$typeof){case e:case n:J=!0;break;case p:return J=z._init,M(J(z._payload),G,D,F,U)}}if(J)return U=U(z),J=F===""?"."+A(z,0):F,B(U)?(D="",J!=null&&(D=J.replace(Y,"$&/")+"/"),M(U,G,D,"",function(ce){return ce})):U!=null&&(q(U)&&(U=L(U,D+(U.key==null||z&&z.key===U.key?"":(""+U.key).replace(Y,"$&/")+"/")+J)),G.push(U)),1;J=0;var W=F===""?".":F+":";if(B(z))for(var ee=0;ee>>1,C=M[Z];if(0>>1;Zo(D,V))Fo(U,D)?(M[Z]=U,M[F]=V,Z=F):(M[Z]=D,M[G]=V,Z=G);else if(Fo(U,V))M[Z]=U,M[F]=V,Z=F;else break e}}return j}function o(M,j){var V=M.sortIndex-j.sortIndex;return V!==0?V:M.id-j.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 c=Date,f=c.now();e.unstable_now=function(){return c.now()-f}}var h=[],d=[],p=1,m=null,y=3,b=!1,_=!1,S=!1,N=!1,E=typeof setTimeout=="function"?setTimeout:null,k=typeof clearTimeout=="function"?clearTimeout:null,w=typeof setImmediate<"u"?setImmediate:null;function O(M){for(var j=i(d);j!==null;){if(j.callback===null)a(d);else if(j.startTime<=M)a(d),j.sortIndex=j.expirationTime,n(h,j);else break;j=i(d)}}function B(M){if(S=!1,O(M),!_)if(i(h)!==null)_=!0,R||(R=!0,X());else{var j=i(d);j!==null&&$(B,j.startTime-M)}}var R=!1,H=-1,I=5,K=-1;function L(){return N?!0:!(e.unstable_now()-KM&&L());){var Z=m.callback;if(typeof Z=="function"){m.callback=null,y=m.priorityLevel;var C=Z(m.expirationTime<=M);if(M=e.unstable_now(),typeof C=="function"){m.callback=C,O(M),j=!0;break t}m===i(h)&&a(h),O(M)}else a(h);m=i(h)}if(m!==null)j=!0;else{var z=i(d);z!==null&&$(B,z.startTime-M),j=!1}}break e}finally{m=null,y=V,b=!1}j=void 0}}finally{j?X():R=!1}}}var X;if(typeof w=="function")X=function(){w(q)};else if(typeof MessageChannel<"u"){var Y=new MessageChannel,A=Y.port2;Y.port1.onmessage=q,X=function(){A.postMessage(null)}}else X=function(){E(q,0)};function $(M,j){H=E(function(){M(e.unstable_now())},j)}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||125Z?(M.sortIndex=V,n(d,M),i(h)===null&&M===i(d)&&(S?(k(H),H=-1):S=!0,$(B,V-Z))):(M.sortIndex=C,n(h,M),_||b||(_=!0,R||(R=!0,X()))),M},e.unstable_shouldYield=L,e.unstable_wrapCallback=function(M){var j=y;return function(){var V=y;y=j;try{return M.apply(this,arguments)}finally{y=V}}}})(qd)),qd}var by;function xk(){return by||(by=1,$d.exports=yk()),$d.exports}var Pd={exports:{}},kn={};/** + * @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 vk(){if(yy)return kn;yy=1;var e=ls();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(),Pd.exports=vk(),Pd.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 vy;function _k(){if(vy)return Ro;vy=1;var e=xk(),n=ls(),i=I_();function a(t){var r="https://react.dev/errors/"+t;if(1C||(t.current=Z[C],Z[C]=null,C--)}function D(t,r){C++,Z[C]=t.current,t.current=r}var F=z(null),U=z(null),Q=z(null),J=z(null);function W(t,r){switch(D(Q,r),D(U,t),D(F,null),r.nodeType){case 9:case 11:t=(t=r.documentElement)&&(t=t.namespaceURI)?z0(t):0;break;default:if(t=r.tagName,r=r.namespaceURI)r=z0(r),t=I0(r,t);else switch(t){case"svg":t=1;break;case"math":t=2;break;default:t=0}}G(F),D(F,t)}function ee(){G(F),G(U),G(Q)}function ce(t){t.memoizedState!==null&&D(J,t);var r=F.current,l=I0(r,t.type);r!==l&&(D(U,t),D(F,l))}function de(t){U.current===t&&(G(F),G(U)),J.current===t&&(G(J),To._currentValue=V)}var be,Ee;function Se(t){if(be===void 0)try{throw Error()}catch(l){var r=l.stack.trim().match(/\n( *(at )?)/);be=r&&r[1]||"",Ee=-1)":-1g||te[u]!==oe[g]){var he=` +`+te[u].replace(" at new "," at ");return t.displayName&&he.includes("")&&(he=he.replace("",t.displayName)),he}while(1<=u&&0<=g);break}}}finally{De=!1,Error.prepareStackTrace=l}return(l=t?t.displayName||t.name:"")?Se(l):""}function lt(t,r){switch(t.tag){case 26:case 27:case 5:return Se(t.type);case 16:return Se("Lazy");case 13:return t.child!==r&&r!==null?Se("Suspense Fallback"):Se("Suspense");case 19:return Se("SuspenseList");case 0:case 15:return He(t.type,!1);case 11:return He(t.type.render,!1);case 1:return He(t.type,!0);case 31:return Se("Activity");default:return""}}function Rt(t){try{var r="",l=null;do r+=lt(t,l),l=t,t=t.return;while(t);return r}catch(u){return` +Error generating stack: `+u.message+` +`+u.stack}}var Yt=Object.prototype.hasOwnProperty,Pt=e.unstable_scheduleCallback,Xt=e.unstable_cancelCallback,Vn=e.unstable_shouldYield,En=e.unstable_requestPaint,ct=e.unstable_now,jt=e.unstable_getCurrentPriorityLevel,ue=e.unstable_ImmediatePriority,ye=e.unstable_UserBlockingPriority,Me=e.unstable_NormalPriority,Pe=e.unstable_LowPriority,Ze=e.unstable_IdlePriority,sn=e.log,wn=e.unstable_setDisableYieldValue,Kt=null,Ct=null;function Wt(t){if(typeof sn=="function"&&wn(t),Ct&&typeof Ct.setStrictMode=="function")try{Ct.setStrictMode(Kt,t)}catch{}}var ut=Math.clz32?Math.clz32:yr,zn=Math.log,cn=Math.LN2;function yr(t){return t>>>=0,t===0?32:31-(zn(t)/cn|0)|0}var nt=256,Yn=262144,Cn=4194304;function hn(t){var r=t&42;if(r!==0)return r;switch(t&-t){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return t&261888;case 262144:case 524288:case 1048576:case 2097152:return t&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return t&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return t}}function ne(t,r,l){var u=t.pendingLanes;if(u===0)return 0;var g=0,x=t.suspendedLanes,T=t.pingedLanes;t=t.warmLanes;var P=u&134217727;return P!==0?(u=P&~x,u!==0?g=hn(u):(T&=P,T!==0?g=hn(T):l||(l=P&~t,l!==0&&(g=hn(l))))):(P=u&~x,P!==0?g=hn(P):T!==0?g=hn(T):l||(l=u&~t,l!==0&&(g=hn(l)))),g===0?0:r!==0&&r!==g&&(r&x)===0&&(x=g&-g,l=r&-r,x>=l||x===32&&(l&4194048)!==0)?r:g}function pe(t,r){return(t.pendingLanes&~(t.suspendedLanes&~t.pingedLanes)&r)===0}function we(t,r){switch(t){case 1:case 2:case 4:case 8:case 64:return r+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return r+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function qe(){var t=Cn;return Cn<<=1,(Cn&62914560)===0&&(Cn=4194304),t}function Nt(t){for(var r=[],l=0;31>l;l++)r.push(t);return r}function gt(t,r){t.pendingLanes|=r,r!==268435456&&(t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0)}function Ce(t,r,l,u,g,x){var T=t.pendingLanes;t.pendingLanes=l,t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0,t.expiredLanes&=l,t.entangledLanes&=l,t.errorRecoveryDisabledLanes&=l,t.shellSuspendCounter=0;var P=t.entanglements,te=t.expirationTimes,oe=t.hiddenUpdates;for(l=T&~l;0"u")return null;try{return t.activeElement||t.body}catch{return t.body}}var Ga=/[\n"\\]/g;function Nn(t){return t.replace(Ga,function(r){return"\\"+r.charCodeAt(0).toString(16)+" "})}function sa(t,r,l,u,g,x,T,P){t.name="",T!=null&&typeof T!="function"&&typeof T!="symbol"&&typeof T!="boolean"?t.type=T:t.removeAttribute("type"),r!=null?T==="number"?(r===0&&t.value===""||t.value!=r)&&(t.value=""+_t(r)):t.value!==""+_t(r)&&(t.value=""+_t(r)):T!=="submit"&&T!=="reset"||t.removeAttribute("value"),r!=null?Nr(t,T,_t(r)):l!=null?Nr(t,T,_t(l)):u!=null&&t.removeAttribute("value"),g==null&&x!=null&&(t.defaultChecked=!!x),g!=null&&(t.checked=g&&typeof g!="function"&&typeof g!="symbol"),P!=null&&typeof P!="function"&&typeof P!="symbol"&&typeof P!="boolean"?t.name=""+_t(P):t.removeAttribute("name")}function _i(t,r,l,u,g,x,T,P){if(x!=null&&typeof x!="function"&&typeof x!="symbol"&&typeof x!="boolean"&&(t.type=x),r!=null||l!=null){if(!(x!=="submit"&&x!=="reset"||r!=null)){wr(t);return}l=l!=null?""+_t(l):"",r=r!=null?""+_t(r):l,P||r===t.value||(t.value=r),t.defaultValue=r}u=u??g,u=typeof u!="function"&&typeof u!="symbol"&&!!u,t.checked=P?t.checked:!!u,t.defaultChecked=!!u,T!=null&&typeof T!="function"&&typeof T!="symbol"&&typeof T!="boolean"&&(t.name=T),wr(t)}function Nr(t,r,l){r==="number"&&Sr(t.ownerDocument)===t||t.defaultValue===""+l||(t.defaultValue=""+l)}function un(t,r,l,u){if(t=t.options,r){r={};for(var g=0;g"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),ju=!1;if(Zi)try{var Fl={};Object.defineProperty(Fl,"passive",{get:function(){ju=!0}}),window.addEventListener("test",Fl,Fl),window.removeEventListener("test",Fl,Fl)}catch{ju=!1}var Ar=null,Bu=null,xs=null;function Im(){if(xs)return xs;var t,r=Bu,l=r.length,u,g="value"in Ar?Ar.value:Ar.textContent,x=g.length;for(t=0;t=Yl),qm=" ",Pm=!1;function Fm(t,r){switch(t){case"keyup":return IS.indexOf(r.keyCode)!==-1;case"keydown":return r.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Gm(t){return t=t.detail,typeof t=="object"&&"data"in t?t.data:null}var Ya=!1;function BS(t,r){switch(t){case"compositionend":return Gm(r);case"keypress":return r.which!==32?null:(Pm=!0,qm);case"textInput":return t=r.data,t===qm&&Pm?null:t;default:return null}}function US(t,r){if(Ya)return t==="compositionend"||!Pu&&Fm(t,r)?(t=Im(),xs=Bu=Ar=null,Ya=!1,t):null;switch(t){case"paste":return null;case"keypress":if(!(r.ctrlKey||r.altKey||r.metaKey)||r.ctrlKey&&r.altKey){if(r.char&&1=r)return{node:l,offset:r-t};t=u}e:{for(;l;){if(l.nextSibling){l=l.nextSibling;break e}l=l.parentNode}l=void 0}l=Jm(l)}}function tg(t,r){return t&&r?t===r?!0:t&&t.nodeType===3?!1:r&&r.nodeType===3?tg(t,r.parentNode):"contains"in t?t.contains(r):t.compareDocumentPosition?!!(t.compareDocumentPosition(r)&16):!1:!1}function ng(t){t=t!=null&&t.ownerDocument!=null&&t.ownerDocument.defaultView!=null?t.ownerDocument.defaultView:window;for(var r=Sr(t.document);r instanceof t.HTMLIFrameElement;){try{var l=typeof r.contentWindow.location.href=="string"}catch{l=!1}if(l)t=r.contentWindow;else break;r=Sr(t.document)}return r}function Vu(t){var r=t&&t.nodeName&&t.nodeName.toLowerCase();return r&&(r==="input"&&(t.type==="text"||t.type==="search"||t.type==="tel"||t.type==="url"||t.type==="password")||r==="textarea"||t.contentEditable==="true")}var YS=Zi&&"documentMode"in document&&11>=document.documentMode,Xa=null,Yu=null,Ql=null,Xu=!1;function ig(t,r,l){var u=l.window===l?l.document:l.nodeType===9?l:l.ownerDocument;Xu||Xa==null||Xa!==Sr(u)||(u=Xa,"selectionStart"in u&&Vu(u)?u={start:u.selectionStart,end:u.selectionEnd}:(u=(u.ownerDocument&&u.ownerDocument.defaultView||window).getSelection(),u={anchorNode:u.anchorNode,anchorOffset:u.anchorOffset,focusNode:u.focusNode,focusOffset:u.focusOffset}),Ql&&Zl(Ql,u)||(Ql=u,u=dc(Yu,"onSelect"),0>=T,g-=T,zi=1<<32-ut(r)+g|l<Ke?(at=Re,Re=null):at=Re.sibling;var pt=se(re,Re,le[Ke],me);if(pt===null){Re===null&&(Re=at);break}t&&Re&&pt.alternate===null&&r(re,Re),ie=x(pt,ie,Ke),ht===null?Ie=pt:ht.sibling=pt,ht=pt,Re=at}if(Ke===le.length)return l(re,Re),ot&&Wi(re,Ke),Ie;if(Re===null){for(;KeKe?(at=Re,Re=null):at=Re.sibling;var Zr=se(re,Re,pt.value,me);if(Zr===null){Re===null&&(Re=at);break}t&&Re&&Zr.alternate===null&&r(re,Re),ie=x(Zr,ie,Ke),ht===null?Ie=Zr:ht.sibling=Zr,ht=Zr,Re=at}if(pt.done)return l(re,Re),ot&&Wi(re,Ke),Ie;if(Re===null){for(;!pt.done;Ke++,pt=le.next())pt=ge(re,pt.value,me),pt!==null&&(ie=x(pt,ie,Ke),ht===null?Ie=pt:ht.sibling=pt,ht=pt);return ot&&Wi(re,Ke),Ie}for(Re=u(Re);!pt.done;Ke++,pt=le.next())pt=fe(Re,re,Ke,pt.value,me),pt!==null&&(t&&pt.alternate!==null&&Re.delete(pt.key===null?Ke:pt.key),ie=x(pt,ie,Ke),ht===null?Ie=pt:ht.sibling=pt,ht=pt);return t&&Re.forEach(function(hk){return r(re,hk)}),ot&&Wi(re,Ke),Ie}function St(re,ie,le,me){if(typeof le=="object"&&le!==null&&le.type===S&&le.key===null&&(le=le.props.children),typeof le=="object"&&le!==null){switch(le.$$typeof){case b:e:{for(var Ie=le.key;ie!==null;){if(ie.key===Ie){if(Ie=le.type,Ie===S){if(ie.tag===7){l(re,ie.sibling),me=g(ie,le.props.children),me.return=re,re=me;break e}}else if(ie.elementType===Ie||typeof Ie=="object"&&Ie!==null&&Ie.$$typeof===I&&xa(Ie)===ie.type){l(re,ie.sibling),me=g(ie,le.props),io(me,le),me.return=re,re=me;break e}l(re,ie);break}else r(re,ie);ie=ie.sibling}le.type===S?(me=pa(le.props.children,re.mode,me,le.key),me.return=re,re=me):(me=Cs(le.type,le.key,le.props,null,re.mode,me),io(me,le),me.return=re,re=me)}return T(re);case _:e:{for(Ie=le.key;ie!==null;){if(ie.key===Ie)if(ie.tag===4&&ie.stateNode.containerInfo===le.containerInfo&&ie.stateNode.implementation===le.implementation){l(re,ie.sibling),me=g(ie,le.children||[]),me.return=re,re=me;break e}else{l(re,ie);break}else r(re,ie);ie=ie.sibling}me=tf(le,re.mode,me),me.return=re,re=me}return T(re);case I:return le=xa(le),St(re,ie,le,me)}if($(le))return Ae(re,ie,le,me);if(X(le)){if(Ie=X(le),typeof Ie!="function")throw Error(a(150));return le=Ie.call(le),Ue(re,ie,le,me)}if(typeof le.then=="function")return St(re,ie,Is(le),me);if(le.$$typeof===w)return St(re,ie,Rs(re,le),me);js(re,le)}return typeof le=="string"&&le!==""||typeof le=="number"||typeof le=="bigint"?(le=""+le,ie!==null&&ie.tag===6?(l(re,ie.sibling),me=g(ie,le),me.return=re,re=me):(l(re,ie),me=ef(le,re.mode,me),me.return=re,re=me),T(re)):l(re,ie)}return function(re,ie,le,me){try{no=0;var Ie=St(re,ie,le,me);return al=null,Ie}catch(Re){if(Re===rl||Re===Ls)throw Re;var ht=Kn(29,Re,null,re.mode);return ht.lanes=me,ht.return=re,ht}finally{}}}var _a=kg(!0),Tg=kg(!1),Dr=!1;function pf(t){t.updateQueue={baseState:t.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function mf(t,r){t=t.updateQueue,r.updateQueue===t&&(r.updateQueue={baseState:t.baseState,firstBaseUpdate:t.firstBaseUpdate,lastBaseUpdate:t.lastBaseUpdate,shared:t.shared,callbacks:null})}function Lr(t){return{lane:t,tag:0,payload:null,callback:null,next:null}}function zr(t,r,l){var u=t.updateQueue;if(u===null)return null;if(u=u.shared,(mt&2)!==0){var g=u.pending;return g===null?r.next=r:(r.next=g.next,g.next=r),u.pending=r,r=As(t),ug(t,null,l),r}return Ts(t,u,r,l),As(t)}function ro(t,r,l){if(r=r.updateQueue,r!==null&&(r=r.shared,(l&4194048)!==0)){var u=r.lanes;u&=t.pendingLanes,l|=u,r.lanes=l,Be(t,l)}}function gf(t,r){var l=t.updateQueue,u=t.alternate;if(u!==null&&(u=u.updateQueue,l===u)){var g=null,x=null;if(l=l.firstBaseUpdate,l!==null){do{var T={lane:l.lane,tag:l.tag,payload:l.payload,callback:null,next:null};x===null?g=x=T:x=x.next=T,l=l.next}while(l!==null);x===null?g=x=r:x=x.next=r}else g=x=r;l={baseState:u.baseState,firstBaseUpdate:g,lastBaseUpdate:x,shared:u.shared,callbacks:u.callbacks},t.updateQueue=l;return}t=l.lastBaseUpdate,t===null?l.firstBaseUpdate=r:t.next=r,l.lastBaseUpdate=r}var bf=!1;function ao(){if(bf){var t=il;if(t!==null)throw t}}function lo(t,r,l,u){bf=!1;var g=t.updateQueue;Dr=!1;var x=g.firstBaseUpdate,T=g.lastBaseUpdate,P=g.shared.pending;if(P!==null){g.shared.pending=null;var te=P,oe=te.next;te.next=null,T===null?x=oe:T.next=oe,T=te;var he=t.alternate;he!==null&&(he=he.updateQueue,P=he.lastBaseUpdate,P!==T&&(P===null?he.firstBaseUpdate=oe:P.next=oe,he.lastBaseUpdate=te))}if(x!==null){var ge=g.baseState;T=0,he=oe=te=null,P=x;do{var se=P.lane&-536870913,fe=se!==P.lane;if(fe?(rt&se)===se:(u&se)===se){se!==0&&se===nl&&(bf=!0),he!==null&&(he=he.next={lane:0,tag:P.tag,payload:P.payload,callback:null,next:null});e:{var Ae=t,Ue=P;se=r;var St=l;switch(Ue.tag){case 1:if(Ae=Ue.payload,typeof Ae=="function"){ge=Ae.call(St,ge,se);break e}ge=Ae;break e;case 3:Ae.flags=Ae.flags&-65537|128;case 0:if(Ae=Ue.payload,se=typeof Ae=="function"?Ae.call(St,ge,se):Ae,se==null)break e;ge=m({},ge,se);break e;case 2:Dr=!0}}se=P.callback,se!==null&&(t.flags|=64,fe&&(t.flags|=8192),fe=g.callbacks,fe===null?g.callbacks=[se]:fe.push(se))}else fe={lane:se,tag:P.tag,payload:P.payload,callback:P.callback,next:null},he===null?(oe=he=fe,te=ge):he=he.next=fe,T|=se;if(P=P.next,P===null){if(P=g.shared.pending,P===null)break;fe=P,P=fe.next,fe.next=null,g.lastBaseUpdate=fe,g.shared.pending=null}}while(!0);he===null&&(te=ge),g.baseState=te,g.firstBaseUpdate=oe,g.lastBaseUpdate=he,x===null&&(g.shared.lanes=0),Hr|=T,t.lanes=T,t.memoizedState=ge}}function Ag(t,r){if(typeof t!="function")throw Error(a(191,t));t.call(r)}function Cg(t,r){var l=t.callbacks;if(l!==null)for(t.callbacks=null,t=0;tx?x:8;var T=M.T,P={};M.T=P,If(t,!1,r,l);try{var te=g(),oe=M.S;if(oe!==null&&oe(P,te),te!==null&&typeof te=="object"&&typeof te.then=="function"){var he=nN(te,u);co(t,r,he,ei(t))}else co(t,r,u,ei(t))}catch(ge){co(t,r,{then:function(){},status:"rejected",reason:ge},ei())}finally{j.p=x,T!==null&&P.types!==null&&(T.types=P.types),M.T=T}}function sN(){}function Lf(t,r,l,u){if(t.tag!==5)throw Error(a(476));var g=ob(t).queue;lb(t,g,r,V,l===null?sN:function(){return sb(t),l(u)})}function ob(t){var r=t.memoizedState;if(r!==null)return r;r={memoizedState:V,baseState:V,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:nr,lastRenderedState:V},next:null};var l={};return r.next={memoizedState:l,baseState:l,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:nr,lastRenderedState:l},next:null},t.memoizedState=r,t=t.alternate,t!==null&&(t.memoizedState=r),r}function sb(t){var r=ob(t);r.next===null&&(r=t.alternate.memoizedState),co(t,r.next.queue,{},ei())}function zf(){return xn(To)}function cb(){return Qt().memoizedState}function ub(){return Qt().memoizedState}function cN(t){for(var r=t.return;r!==null;){switch(r.tag){case 24:case 3:var l=ei();t=Lr(l);var u=zr(r,t,l);u!==null&&($n(u,r,l),ro(u,r,l)),r={cache:uf()},t.payload=r;return}r=r.return}}function uN(t,r,l){var u=ei();l={lane:u,revertLane:0,gesture:null,action:l,hasEagerState:!1,eagerState:null,next:null},Ys(t)?db(r,l):(l=Wu(t,r,l,u),l!==null&&($n(l,t,u),hb(l,r,u)))}function fb(t,r,l){var u=ei();co(t,r,l,u)}function co(t,r,l,u){var g={lane:u,revertLane:0,gesture:null,action:l,hasEagerState:!1,eagerState:null,next:null};if(Ys(t))db(r,g);else{var x=t.alternate;if(t.lanes===0&&(x===null||x.lanes===0)&&(x=r.lastRenderedReducer,x!==null))try{var T=r.lastRenderedState,P=x(T,l);if(g.hasEagerState=!0,g.eagerState=P,Xn(P,T))return Ts(t,r,g,0),kt===null&&ks(),!1}catch{}finally{}if(l=Wu(t,r,g,u),l!==null)return $n(l,t,u),hb(l,r,u),!0}return!1}function If(t,r,l,u){if(u={lane:2,revertLane:pd(),gesture:null,action:u,hasEagerState:!1,eagerState:null,next:null},Ys(t)){if(r)throw Error(a(479))}else r=Wu(t,l,u,2),r!==null&&$n(r,t,2)}function Ys(t){var r=t.alternate;return t===Xe||r!==null&&r===Xe}function db(t,r){ol=Hs=!0;var l=t.pending;l===null?r.next=r:(r.next=l.next,l.next=r),t.pending=r}function hb(t,r,l){if((l&4194048)!==0){var u=r.lanes;u&=t.pendingLanes,l|=u,r.lanes=l,Be(t,l)}}var uo={readContext:xn,use:Ps,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};uo.useEffectEvent=Gt;var pb={readContext:xn,use:Ps,useCallback:function(t,r){return Rn().memoizedState=[t,r===void 0?null:r],t},useContext:xn,useEffect:Qg,useImperativeHandle:function(t,r,l){l=l!=null?l.concat([t]):null,Gs(4194308,4,tb.bind(null,r,t),l)},useLayoutEffect:function(t,r){return Gs(4194308,4,t,r)},useInsertionEffect:function(t,r){Gs(4,2,t,r)},useMemo:function(t,r){var l=Rn();r=r===void 0?null:r;var u=t();if(Ea){Wt(!0);try{t()}finally{Wt(!1)}}return l.memoizedState=[u,r],u},useReducer:function(t,r,l){var u=Rn();if(l!==void 0){var g=l(r);if(Ea){Wt(!0);try{l(r)}finally{Wt(!1)}}}else g=r;return u.memoizedState=u.baseState=g,t={pending:null,lanes:0,dispatch:null,lastRenderedReducer:t,lastRenderedState:g},u.queue=t,t=t.dispatch=uN.bind(null,Xe,t),[u.memoizedState,t]},useRef:function(t){var r=Rn();return t={current:t},r.memoizedState=t},useState:function(t){t=Cf(t);var r=t.queue,l=fb.bind(null,Xe,r);return r.dispatch=l,[t.memoizedState,l]},useDebugValue:Rf,useDeferredValue:function(t,r){var l=Rn();return Df(l,t,r)},useTransition:function(){var t=Cf(!1);return t=lb.bind(null,Xe,t.queue,!0,!1),Rn().memoizedState=t,[!1,t]},useSyncExternalStore:function(t,r,l){var u=Xe,g=Rn();if(ot){if(l===void 0)throw Error(a(407));l=l()}else{if(l=r(),kt===null)throw Error(a(349));(rt&127)!==0||zg(u,r,l)}g.memoizedState=l;var x={value:l,getSnapshot:r};return g.queue=x,Qg(jg.bind(null,u,x,t),[t]),u.flags|=2048,cl(9,{destroy:void 0},Ig.bind(null,u,x,l,r),null),l},useId:function(){var t=Rn(),r=kt.identifierPrefix;if(ot){var l=Ii,u=zi;l=(u&~(1<<32-ut(u)-1)).toString(32)+l,r="_"+r+"R_"+l,l=$s++,0<\/script>",x=x.removeChild(x.firstChild);break;case"select":x=typeof u.is=="string"?T.createElement("select",{is:u.is}):T.createElement("select"),u.multiple?x.multiple=!0:u.size&&(x.size=u.size);break;default:x=typeof u.is=="string"?T.createElement(g,{is:u.is}):T.createElement(g)}}x[Ut]=r,x[pn]=u;e:for(T=r.child;T!==null;){if(T.tag===5||T.tag===6)x.appendChild(T.stateNode);else if(T.tag!==4&&T.tag!==27&&T.child!==null){T.child.return=T,T=T.child;continue}if(T===r)break e;for(;T.sibling===null;){if(T.return===null||T.return===r)break e;T=T.return}T.sibling.return=T.return,T=T.sibling}r.stateNode=x;e:switch(_n(x,g,u),g){case"button":case"input":case"select":case"textarea":u=!!u.autoFocus;break e;case"img":u=!0;break e;default:u=!1}u&&rr(r)}}return Lt(r),Zf(r,r.type,t===null?null:t.memoizedProps,r.pendingProps,l),null;case 6:if(t&&r.stateNode!=null)t.memoizedProps!==u&&rr(r);else{if(typeof u!="string"&&r.stateNode===null)throw Error(a(166));if(t=Q.current,el(r)){if(t=r.stateNode,l=r.memoizedProps,u=null,g=yn,g!==null)switch(g.tag){case 27:case 5:u=g.memoizedProps}t[Ut]=r,t=!!(t.nodeValue===l||u!==null&&u.suppressHydrationWarning===!0||D0(t.nodeValue,l)),t||Or(r,!0)}else t=hc(t).createTextNode(u),t[Ut]=r,r.stateNode=t}return Lt(r),null;case 31:if(l=r.memoizedState,t===null||t.memoizedState!==null){if(u=el(r),l!==null){if(t===null){if(!u)throw Error(a(318));if(t=r.memoizedState,t=t!==null?t.dehydrated:null,!t)throw Error(a(557));t[Ut]=r}else ma(),(r.flags&128)===0&&(r.memoizedState=null),r.flags|=4;Lt(r),t=!1}else l=lf(),t!==null&&t.memoizedState!==null&&(t.memoizedState.hydrationErrors=l),t=!0;if(!t)return r.flags&256?(Qn(r),r):(Qn(r),null);if((r.flags&128)!==0)throw Error(a(558))}return Lt(r),null;case 13:if(u=r.memoizedState,t===null||t.memoizedState!==null&&t.memoizedState.dehydrated!==null){if(g=el(r),u!==null&&u.dehydrated!==null){if(t===null){if(!g)throw Error(a(318));if(g=r.memoizedState,g=g!==null?g.dehydrated:null,!g)throw Error(a(317));g[Ut]=r}else ma(),(r.flags&128)===0&&(r.memoizedState=null),r.flags|=4;Lt(r),g=!1}else g=lf(),t!==null&&t.memoizedState!==null&&(t.memoizedState.hydrationErrors=g),g=!0;if(!g)return r.flags&256?(Qn(r),r):(Qn(r),null)}return Qn(r),(r.flags&128)!==0?(r.lanes=l,r):(l=u!==null,t=t!==null&&t.memoizedState!==null,l&&(u=r.child,g=null,u.alternate!==null&&u.alternate.memoizedState!==null&&u.alternate.memoizedState.cachePool!==null&&(g=u.alternate.memoizedState.cachePool.pool),x=null,u.memoizedState!==null&&u.memoizedState.cachePool!==null&&(x=u.memoizedState.cachePool.pool),x!==g&&(u.flags|=2048)),l!==t&&l&&(r.child.flags|=8192),Ws(r,r.updateQueue),Lt(r),null);case 4:return ee(),t===null&&yd(r.stateNode.containerInfo),Lt(r),null;case 10:return er(r.type),Lt(r),null;case 19:if(G(Zt),u=r.memoizedState,u===null)return Lt(r),null;if(g=(r.flags&128)!==0,x=u.rendering,x===null)if(g)ho(u,!1);else{if(Vt!==0||t!==null&&(t.flags&128)!==0)for(t=r.child;t!==null;){if(x=Us(t),x!==null){for(r.flags|=128,ho(u,!1),t=x.updateQueue,r.updateQueue=t,Ws(r,t),r.subtreeFlags=0,t=l,l=r.child;l!==null;)fg(l,t),l=l.sibling;return D(Zt,Zt.current&1|2),ot&&Wi(r,u.treeForkCount),r.child}t=t.sibling}u.tail!==null&&ct()>ic&&(r.flags|=128,g=!0,ho(u,!1),r.lanes=4194304)}else{if(!g)if(t=Us(x),t!==null){if(r.flags|=128,g=!0,t=t.updateQueue,r.updateQueue=t,Ws(r,t),ho(u,!0),u.tail===null&&u.tailMode==="hidden"&&!x.alternate&&!ot)return Lt(r),null}else 2*ct()-u.renderingStartTime>ic&&l!==536870912&&(r.flags|=128,g=!0,ho(u,!1),r.lanes=4194304);u.isBackwards?(x.sibling=r.child,r.child=x):(t=u.last,t!==null?t.sibling=x:r.child=x,u.last=x)}return u.tail!==null?(t=u.tail,u.rendering=t,u.tail=t.sibling,u.renderingStartTime=ct(),t.sibling=null,l=Zt.current,D(Zt,g?l&1|2:l&1),ot&&Wi(r,u.treeForkCount),t):(Lt(r),null);case 22:case 23:return Qn(r),xf(),u=r.memoizedState!==null,t!==null?t.memoizedState!==null!==u&&(r.flags|=8192):u&&(r.flags|=8192),u?(l&536870912)!==0&&(r.flags&128)===0&&(Lt(r),r.subtreeFlags&6&&(r.flags|=8192)):Lt(r),l=r.updateQueue,l!==null&&Ws(r,l.retryQueue),l=null,t!==null&&t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(l=t.memoizedState.cachePool.pool),u=null,r.memoizedState!==null&&r.memoizedState.cachePool!==null&&(u=r.memoizedState.cachePool.pool),u!==l&&(r.flags|=2048),t!==null&&G(ya),null;case 24:return l=null,t!==null&&(l=t.memoizedState.cache),r.memoizedState.cache!==l&&(r.flags|=2048),er(en),Lt(r),null;case 25:return null;case 30:return null}throw Error(a(156,r.tag))}function mN(t,r){switch(rf(r),r.tag){case 1:return t=r.flags,t&65536?(r.flags=t&-65537|128,r):null;case 3:return er(en),ee(),t=r.flags,(t&65536)!==0&&(t&128)===0?(r.flags=t&-65537|128,r):null;case 26:case 27:case 5:return de(r),null;case 31:if(r.memoizedState!==null){if(Qn(r),r.alternate===null)throw Error(a(340));ma()}return t=r.flags,t&65536?(r.flags=t&-65537|128,r):null;case 13:if(Qn(r),t=r.memoizedState,t!==null&&t.dehydrated!==null){if(r.alternate===null)throw Error(a(340));ma()}return t=r.flags,t&65536?(r.flags=t&-65537|128,r):null;case 19:return G(Zt),null;case 4:return ee(),null;case 10:return er(r.type),null;case 22:case 23:return Qn(r),xf(),t!==null&&G(ya),t=r.flags,t&65536?(r.flags=t&-65537|128,r):null;case 24:return er(en),null;case 25:return null;default:return null}}function Bb(t,r){switch(rf(r),r.tag){case 3:er(en),ee();break;case 26:case 27:case 5:de(r);break;case 4:ee();break;case 31:r.memoizedState!==null&&Qn(r);break;case 13:Qn(r);break;case 19:G(Zt);break;case 10:er(r.type);break;case 22:case 23:Qn(r),xf(),t!==null&&G(ya);break;case 24:er(en)}}function po(t,r){try{var l=r.updateQueue,u=l!==null?l.lastEffect:null;if(u!==null){var g=u.next;l=g;do{if((l.tag&t)===t){u=void 0;var x=l.create,T=l.inst;u=x(),T.destroy=u}l=l.next}while(l!==g)}}catch(P){xt(r,r.return,P)}}function Br(t,r,l){try{var u=r.updateQueue,g=u!==null?u.lastEffect:null;if(g!==null){var x=g.next;u=x;do{if((u.tag&t)===t){var T=u.inst,P=T.destroy;if(P!==void 0){T.destroy=void 0,g=r;var te=l,oe=P;try{oe()}catch(he){xt(g,te,he)}}}u=u.next}while(u!==x)}}catch(he){xt(r,r.return,he)}}function Ub(t){var r=t.updateQueue;if(r!==null){var l=t.stateNode;try{Cg(r,l)}catch(u){xt(t,t.return,u)}}}function Hb(t,r,l){l.props=wa(t.type,t.memoizedProps),l.state=t.memoizedState;try{l.componentWillUnmount()}catch(u){xt(t,r,u)}}function mo(t,r){try{var l=t.ref;if(l!==null){switch(t.tag){case 26:case 27:case 5:var u=t.stateNode;break;case 30:u=t.stateNode;break;default:u=t.stateNode}typeof l=="function"?t.refCleanup=l(u):l.current=u}}catch(g){xt(t,r,g)}}function ji(t,r){var l=t.ref,u=t.refCleanup;if(l!==null)if(typeof u=="function")try{u()}catch(g){xt(t,r,g)}finally{t.refCleanup=null,t=t.alternate,t!=null&&(t.refCleanup=null)}else if(typeof l=="function")try{l(null)}catch(g){xt(t,r,g)}else l.current=null}function $b(t){var r=t.type,l=t.memoizedProps,u=t.stateNode;try{e:switch(r){case"button":case"input":case"select":case"textarea":l.autoFocus&&u.focus();break e;case"img":l.src?u.src=l.src:l.srcSet&&(u.srcset=l.srcSet)}}catch(g){xt(t,t.return,g)}}function Qf(t,r,l){try{var u=t.stateNode;jN(u,t.type,l,r),u[pn]=r}catch(g){xt(t,t.return,g)}}function qb(t){return t.tag===5||t.tag===3||t.tag===26||t.tag===27&&Gr(t.type)||t.tag===4}function Wf(t){e:for(;;){for(;t.sibling===null;){if(t.return===null||qb(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&&Gr(t.type)||t.flags&2||t.child===null||t.tag===4)continue e;t.child.return=t,t=t.child}if(!(t.flags&2))return t.stateNode}}function Jf(t,r,l){var u=t.tag;if(u===5||u===6)t=t.stateNode,r?(l.nodeType===9?l.body:l.nodeName==="HTML"?l.ownerDocument.body:l).insertBefore(t,r):(r=l.nodeType===9?l.body:l.nodeName==="HTML"?l.ownerDocument.body:l,r.appendChild(t),l=l._reactRootContainer,l!=null||r.onclick!==null||(r.onclick=_e));else if(u!==4&&(u===27&&Gr(t.type)&&(l=t.stateNode,r=null),t=t.child,t!==null))for(Jf(t,r,l),t=t.sibling;t!==null;)Jf(t,r,l),t=t.sibling}function Js(t,r,l){var u=t.tag;if(u===5||u===6)t=t.stateNode,r?l.insertBefore(t,r):l.appendChild(t);else if(u!==4&&(u===27&&Gr(t.type)&&(l=t.stateNode),t=t.child,t!==null))for(Js(t,r,l),t=t.sibling;t!==null;)Js(t,r,l),t=t.sibling}function Pb(t){var r=t.stateNode,l=t.memoizedProps;try{for(var u=t.type,g=r.attributes;g.length;)r.removeAttributeNode(g[0]);_n(r,u,l),r[Ut]=t,r[pn]=l}catch(x){xt(t,t.return,x)}}var ar=!1,rn=!1,ed=!1,Fb=typeof WeakSet=="function"?WeakSet:Set,gn=null;function gN(t,r){if(t=t.containerInfo,_d=vc,t=ng(t),Vu(t)){if("selectionStart"in t)var l={start:t.selectionStart,end:t.selectionEnd};else e:{l=(l=t.ownerDocument)&&l.defaultView||window;var u=l.getSelection&&l.getSelection();if(u&&u.rangeCount!==0){l=u.anchorNode;var g=u.anchorOffset,x=u.focusNode;u=u.focusOffset;try{l.nodeType,x.nodeType}catch{l=null;break e}var T=0,P=-1,te=-1,oe=0,he=0,ge=t,se=null;t:for(;;){for(var fe;ge!==l||g!==0&&ge.nodeType!==3||(P=T+g),ge!==x||u!==0&&ge.nodeType!==3||(te=T+u),ge.nodeType===3&&(T+=ge.nodeValue.length),(fe=ge.firstChild)!==null;)se=ge,ge=fe;for(;;){if(ge===t)break t;if(se===l&&++oe===g&&(P=T),se===x&&++he===u&&(te=T),(fe=ge.nextSibling)!==null)break;ge=se,se=ge.parentNode}ge=fe}l=P===-1||te===-1?null:{start:P,end:te}}else l=null}l=l||{start:0,end:0}}else l=null;for(Ed={focusedElem:t,selectionRange:l},vc=!1,gn=r;gn!==null;)if(r=gn,t=r.child,(r.subtreeFlags&1028)!==0&&t!==null)t.return=r,gn=t;else for(;gn!==null;){switch(r=gn,x=r.alternate,t=r.flags,r.tag){case 0:if((t&4)!==0&&(t=r.updateQueue,t=t!==null?t.events:null,t!==null))for(l=0;l title"))),_n(x,u,l),x[Ut]=t,Ft(x),u=x;break e;case"link":var T=Z0("link","href",g).get(u+(l.href||""));if(T){for(var P=0;PSt&&(T=St,St=Ue,Ue=T);var re=eg(P,Ue),ie=eg(P,St);if(re&&ie&&(fe.rangeCount!==1||fe.anchorNode!==re.node||fe.anchorOffset!==re.offset||fe.focusNode!==ie.node||fe.focusOffset!==ie.offset)){var le=ge.createRange();le.setStart(re.node,re.offset),fe.removeAllRanges(),Ue>St?(fe.addRange(le),fe.extend(ie.node,ie.offset)):(le.setEnd(ie.node,ie.offset),fe.addRange(le))}}}}for(ge=[],fe=P;fe=fe.parentNode;)fe.nodeType===1&&ge.push({element:fe,left:fe.scrollLeft,top:fe.scrollTop});for(typeof P.focus=="function"&&P.focus(),P=0;Pl?32:l,M.T=null,l=od,od=null;var x=qr,T=ur;if(fn=0,pl=qr=null,ur=0,(mt&6)!==0)throw Error(a(331));var P=mt;if(mt|=4,t0(x.current),Wb(x,x.current,T,l),mt=P,_o(0,!1),Ct&&typeof Ct.onPostCommitFiberRoot=="function")try{Ct.onPostCommitFiberRoot(Kt,x)}catch{}return!0}finally{j.p=g,M.T=u,x0(t,r)}}function _0(t,r,l){r=si(l,r),r=Hf(t.stateNode,r,2),t=zr(t,r,2),t!==null&&(gt(t,2),Bi(t))}function xt(t,r,l){if(t.tag===3)_0(t,t,l);else for(;r!==null;){if(r.tag===3){_0(r,t,l);break}else if(r.tag===1){var u=r.stateNode;if(typeof r.type.getDerivedStateFromError=="function"||typeof u.componentDidCatch=="function"&&($r===null||!$r.has(u))){t=si(l,t),l=Eb(2),u=zr(r,l,2),u!==null&&(wb(l,u,r,t),gt(u,2),Bi(u));break}}r=r.return}}function fd(t,r,l){var u=t.pingCache;if(u===null){u=t.pingCache=new xN;var g=new Set;u.set(r,g)}else g=u.get(r),g===void 0&&(g=new Set,u.set(r,g));g.has(l)||(id=!0,g.add(l),t=SN.bind(null,t,r,l),r.then(t,t))}function SN(t,r,l){var u=t.pingCache;u!==null&&u.delete(r),t.pingedLanes|=t.suspendedLanes&l,t.warmLanes&=~l,kt===t&&(rt&l)===l&&(Vt===4||Vt===3&&(rt&62914560)===rt&&300>ct()-nc?(mt&2)===0&&ml(t,0):rd|=l,hl===rt&&(hl=0)),Bi(t)}function E0(t,r){r===0&&(r=qe()),t=ha(t,r),t!==null&&(gt(t,r),Bi(t))}function NN(t){var r=t.memoizedState,l=0;r!==null&&(l=r.retryLane),E0(t,l)}function kN(t,r){var l=0;switch(t.tag){case 31:case 13:var u=t.stateNode,g=t.memoizedState;g!==null&&(l=g.retryLane);break;case 19:u=t.stateNode;break;case 22:u=t.stateNode._retryCache;break;default:throw Error(a(314))}u!==null&&u.delete(r),E0(t,l)}function TN(t,r){return Pt(t,r)}var cc=null,bl=null,dd=!1,uc=!1,hd=!1,Fr=0;function Bi(t){t!==bl&&t.next===null&&(bl===null?cc=bl=t:bl=bl.next=t),uc=!0,dd||(dd=!0,CN())}function _o(t,r){if(!hd&&uc){hd=!0;do for(var l=!1,u=cc;u!==null;){if(t!==0){var g=u.pendingLanes;if(g===0)var x=0;else{var T=u.suspendedLanes,P=u.pingedLanes;x=(1<<31-ut(42|t)+1)-1,x&=g&~(T&~P),x=x&201326741?x&201326741|1:x?x|2:0}x!==0&&(l=!0,k0(u,x))}else x=rt,x=ne(u,u===kt?x:0,u.cancelPendingCommit!==null||u.timeoutHandle!==-1),(x&3)===0||pe(u,x)||(l=!0,k0(u,x));u=u.next}while(l);hd=!1}}function AN(){w0()}function w0(){uc=dd=!1;var t=0;Fr!==0&&UN()&&(t=Fr);for(var r=ct(),l=null,u=cc;u!==null;){var g=u.next,x=S0(u,r);x===0?(u.next=null,l===null?cc=g:l.next=g,g===null&&(bl=l)):(l=u,(t!==0||(x&3)!==0)&&(uc=!0)),u=g}fn!==0&&fn!==5||_o(t),Fr!==0&&(Fr=0)}function S0(t,r){for(var l=t.suspendedLanes,u=t.pingedLanes,g=t.expirationTimes,x=t.pendingLanes&-62914561;0P)break;var he=te.transferSize,ge=te.initiatorType;he&&L0(ge)&&(te=te.responseEnd,T+=he*(te"u"?null:document;function V0(t,r,l){var u=yl;if(u&&typeof r=="string"&&r){var g=Nn(r);g='link[rel="'+t+'"][href="'+g+'"]',typeof l=="string"&&(g+='[crossorigin="'+l+'"]'),G0.has(g)||(G0.add(g),t={rel:t,crossOrigin:l,href:r},u.querySelector(g)===null&&(r=u.createElement("link"),_n(r,"link",t),Ft(r),u.head.appendChild(r)))}}function XN(t){fr.D(t),V0("dns-prefetch",t,null)}function KN(t,r){fr.C(t,r),V0("preconnect",t,r)}function ZN(t,r,l){fr.L(t,r,l);var u=yl;if(u&&t&&r){var g='link[rel="preload"][as="'+Nn(r)+'"]';r==="image"&&l&&l.imageSrcSet?(g+='[imagesrcset="'+Nn(l.imageSrcSet)+'"]',typeof l.imageSizes=="string"&&(g+='[imagesizes="'+Nn(l.imageSizes)+'"]')):g+='[href="'+Nn(t)+'"]';var x=g;switch(r){case"style":x=xl(t);break;case"script":x=vl(t)}pi.has(x)||(t=m({rel:"preload",href:r==="image"&&l&&l.imageSrcSet?void 0:t,as:r},l),pi.set(x,t),u.querySelector(g)!==null||r==="style"&&u.querySelector(No(x))||r==="script"&&u.querySelector(ko(x))||(r=u.createElement("link"),_n(r,"link",t),Ft(r),u.head.appendChild(r)))}}function QN(t,r){fr.m(t,r);var l=yl;if(l&&t){var u=r&&typeof r.as=="string"?r.as:"script",g='link[rel="modulepreload"][as="'+Nn(u)+'"][href="'+Nn(t)+'"]',x=g;switch(u){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":x=vl(t)}if(!pi.has(x)&&(t=m({rel:"modulepreload",href:t},r),pi.set(x,t),l.querySelector(g)===null)){switch(u){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(l.querySelector(ko(x)))return}u=l.createElement("link"),_n(u,"link",t),Ft(u),l.head.appendChild(u)}}}function WN(t,r,l){fr.S(t,r,l);var u=yl;if(u&&t){var g=Di(u).hoistableStyles,x=xl(t);r=r||"default";var T=g.get(x);if(!T){var P={loading:0,preload:null};if(T=u.querySelector(No(x)))P.loading=5;else{t=m({rel:"stylesheet",href:t,"data-precedence":r},l),(l=pi.get(x))&&Cd(t,l);var te=T=u.createElement("link");Ft(te),_n(te,"link",t),te._p=new Promise(function(oe,he){te.onload=oe,te.onerror=he}),te.addEventListener("load",function(){P.loading|=1}),te.addEventListener("error",function(){P.loading|=2}),P.loading|=4,mc(T,r,u)}T={type:"stylesheet",instance:T,count:1,state:P},g.set(x,T)}}}function JN(t,r){fr.X(t,r);var l=yl;if(l&&t){var u=Di(l).hoistableScripts,g=vl(t),x=u.get(g);x||(x=l.querySelector(ko(g)),x||(t=m({src:t,async:!0},r),(r=pi.get(g))&&Md(t,r),x=l.createElement("script"),Ft(x),_n(x,"link",t),l.head.appendChild(x)),x={type:"script",instance:x,count:1,state:null},u.set(g,x))}}function ek(t,r){fr.M(t,r);var l=yl;if(l&&t){var u=Di(l).hoistableScripts,g=vl(t),x=u.get(g);x||(x=l.querySelector(ko(g)),x||(t=m({src:t,async:!0,type:"module"},r),(r=pi.get(g))&&Md(t,r),x=l.createElement("script"),Ft(x),_n(x,"link",t),l.head.appendChild(x)),x={type:"script",instance:x,count:1,state:null},u.set(g,x))}}function Y0(t,r,l,u){var g=(g=Q.current)?pc(g):null;if(!g)throw Error(a(446));switch(t){case"meta":case"title":return null;case"style":return typeof l.precedence=="string"&&typeof l.href=="string"?(r=xl(l.href),l=Di(g).hoistableStyles,u=l.get(r),u||(u={type:"style",instance:null,count:0,state:null},l.set(r,u)),u):{type:"void",instance:null,count:0,state:null};case"link":if(l.rel==="stylesheet"&&typeof l.href=="string"&&typeof l.precedence=="string"){t=xl(l.href);var x=Di(g).hoistableStyles,T=x.get(t);if(T||(g=g.ownerDocument||g,T={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},x.set(t,T),(x=g.querySelector(No(t)))&&!x._p&&(T.instance=x,T.state.loading=5),pi.has(t)||(l={rel:"preload",as:"style",href:l.href,crossOrigin:l.crossOrigin,integrity:l.integrity,media:l.media,hrefLang:l.hrefLang,referrerPolicy:l.referrerPolicy},pi.set(t,l),x||tk(g,t,l,T.state))),r&&u===null)throw Error(a(528,""));return T}if(r&&u!==null)throw Error(a(529,""));return null;case"script":return r=l.async,l=l.src,typeof l=="string"&&r&&typeof r!="function"&&typeof r!="symbol"?(r=vl(l),l=Di(g).hoistableScripts,u=l.get(r),u||(u={type:"script",instance:null,count:0,state:null},l.set(r,u)),u):{type:"void",instance:null,count:0,state:null};default:throw Error(a(444,t))}}function xl(t){return'href="'+Nn(t)+'"'}function No(t){return'link[rel="stylesheet"]['+t+"]"}function X0(t){return m({},t,{"data-precedence":t.precedence,precedence:null})}function tk(t,r,l,u){t.querySelector('link[rel="preload"][as="style"]['+r+"]")?u.loading=1:(r=t.createElement("link"),u.preload=r,r.addEventListener("load",function(){return u.loading|=1}),r.addEventListener("error",function(){return u.loading|=2}),_n(r,"link",l),Ft(r),t.head.appendChild(r))}function vl(t){return'[src="'+Nn(t)+'"]'}function ko(t){return"script[async]"+t}function K0(t,r,l){if(r.count++,r.instance===null)switch(r.type){case"style":var u=t.querySelector('style[data-href~="'+Nn(l.href)+'"]');if(u)return r.instance=u,Ft(u),u;var g=m({},l,{"data-href":l.href,"data-precedence":l.precedence,href:null,precedence:null});return u=(t.ownerDocument||t).createElement("style"),Ft(u),_n(u,"style",g),mc(u,l.precedence,t),r.instance=u;case"stylesheet":g=xl(l.href);var x=t.querySelector(No(g));if(x)return r.state.loading|=4,r.instance=x,Ft(x),x;u=X0(l),(g=pi.get(g))&&Cd(u,g),x=(t.ownerDocument||t).createElement("link"),Ft(x);var T=x;return T._p=new Promise(function(P,te){T.onload=P,T.onerror=te}),_n(x,"link",u),r.state.loading|=4,mc(x,l.precedence,t),r.instance=x;case"script":return x=vl(l.src),(g=t.querySelector(ko(x)))?(r.instance=g,Ft(g),g):(u=l,(g=pi.get(x))&&(u=m({},l),Md(u,g)),t=t.ownerDocument||t,g=t.createElement("script"),Ft(g),_n(g,"link",u),t.head.appendChild(g),r.instance=g);case"void":return null;default:throw Error(a(443,r.type))}else r.type==="stylesheet"&&(r.state.loading&4)===0&&(u=r.instance,r.state.loading|=4,mc(u,l.precedence,t));return r.instance}function mc(t,r,l){for(var u=l.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),g=u.length?u[u.length-1]:null,x=g,T=0;T title"):null)}function nk(t,r,l){if(l===1||r.itemProp!=null)return!1;switch(t){case"meta":case"title":return!0;case"style":if(typeof r.precedence!="string"||typeof r.href!="string"||r.href==="")break;return!0;case"link":if(typeof r.rel!="string"||typeof r.href!="string"||r.href===""||r.onLoad||r.onError)break;switch(r.rel){case"stylesheet":return t=r.disabled,typeof r.precedence=="string"&&t==null;default:return!0}case"script":if(r.async&&typeof r.async!="function"&&typeof r.async!="symbol"&&!r.onLoad&&!r.onError&&r.src&&typeof r.src=="string")return!0}return!1}function W0(t){return!(t.type==="stylesheet"&&(t.state.loading&3)===0)}function ik(t,r,l,u){if(l.type==="stylesheet"&&(typeof u.media!="string"||matchMedia(u.media).matches!==!1)&&(l.state.loading&4)===0){if(l.instance===null){var g=xl(u.href),x=r.querySelector(No(g));if(x){r=x._p,r!==null&&typeof r=="object"&&typeof r.then=="function"&&(t.count++,t=bc.bind(t),r.then(t,t)),l.state.loading|=4,l.instance=x,Ft(x);return}x=r.ownerDocument||r,u=X0(u),(g=pi.get(g))&&Cd(u,g),x=x.createElement("link"),Ft(x);var T=x;T._p=new Promise(function(P,te){T.onload=P,T.onerror=te}),_n(x,"link",u),l.instance=x}t.stylesheets===null&&(t.stylesheets=new Map),t.stylesheets.set(l,r),(r=l.state.preload)&&(l.state.loading&3)===0&&(t.count++,l=bc.bind(t),r.addEventListener("load",l),r.addEventListener("error",l))}}var Od=0;function rk(t,r){return t.stylesheets&&t.count===0&&xc(t,t.stylesheets),0Od?50:800)+r);return t.unsuspend=l,function(){t.unsuspend=null,clearTimeout(u),clearTimeout(g)}}:null}function bc(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)xc(this,this.stylesheets);else if(this.unsuspend){var t=this.unsuspend;this.unsuspend=null,t()}}}var yc=null;function xc(t,r){t.stylesheets=null,t.unsuspend!==null&&(t.count++,yc=new Map,r.forEach(ak,t),yc=null,bc.call(t))}function ak(t,r){if(!(r.state.loading&4)){var l=yc.get(t);if(l)var u=l.get(null);else{l=new Map,yc.set(t,l);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(),Hd.exports=_k(),Hd.exports}var wk=Ek();/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const j_=(...e)=>e.filter((n,i,a)=>!!n&&n.trim()!==""&&a.indexOf(n)===i).join(" ").trim();/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Sk=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase();/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Nk=e=>e.replace(/^([A-Z])|[\s-_]+(\w)/g,(n,i,a)=>a?a.toUpperCase():i.toLowerCase());/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ey=e=>{const n=Nk(e);return n.charAt(0).toUpperCase()+n.slice(1)};/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */var kk={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.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Tk=e=>{for(const n in e)if(n.startsWith("aria-")||n==="role"||n==="title")return!0;return!1};/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ak=ae.forwardRef(({color:e="currentColor",size:n=24,strokeWidth:i=2,absoluteStrokeWidth:a,className:o="",children:s,iconNode:c,...f},h)=>ae.createElement("svg",{ref:h,...kk,width:n,height:n,stroke:e,strokeWidth:a?Number(i)*24/Number(n):i,className:j_("lucide",o),...!s&&!Tk(f)&&{"aria-hidden":"true"},...f},[...c.map(([d,p])=>ae.createElement(d,p)),...Array.isArray(s)?s:[s]]));/** + * @license lucide-react v0.563.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 i=ae.forwardRef(({className:a,...o},s)=>ae.createElement(Ak,{ref:s,iconNode:n,className:j_(`lucide-${Sk(Ey(e))}`,`lucide-${e}`,a),...o}));return i.displayName=Ey(e),i};/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ck=[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]],Mk=Ve("arrow-left",Ck);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ok=[["path",{d:"M7 7h10v10",key:"1tivn9"}],["path",{d:"M7 17 17 7",key:"1vkiza"}]],Rk=Ve("arrow-up-right",Ok);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Dk=[["path",{d:"M4.929 4.929 19.07 19.071",key:"196cmz"}],["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]],B_=Ve("ban",Dk);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Lk=[["path",{d:"M10.268 21a2 2 0 0 0 3.464 0",key:"vwvbt9"}],["path",{d:"M17 17H4a1 1 0 0 1-.74-1.673C4.59 13.956 6 12.499 6 8a6 6 0 0 1 .258-1.742",key:"178tsu"}],["path",{d:"m2 2 20 20",key:"1ooewy"}],["path",{d:"M8.668 3.01A6 6 0 0 1 18 8c0 2.687.77 4.653 1.707 6.05",key:"1hqiys"}]],zk=Ve("bell-off",Lk);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ik=[["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"}]],qp=Ve("bot",Ik);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const jk=[["path",{d:"M12 18V5",key:"adv99a"}],["path",{d:"M15 13a4.17 4.17 0 0 1-3-4 4.17 4.17 0 0 1-3 4",key:"1e3is1"}],["path",{d:"M17.598 6.5A3 3 0 1 0 12 5a3 3 0 1 0-5.598 1.5",key:"1gqd8o"}],["path",{d:"M17.997 5.125a4 4 0 0 1 2.526 5.77",key:"iwvgf7"}],["path",{d:"M18 18a4 4 0 0 0 2-7.464",key:"efp6ie"}],["path",{d:"M19.967 17.483A4 4 0 1 1 12 18a4 4 0 1 1-7.967-.517",key:"1gq6am"}],["path",{d:"M6 18a4 4 0 0 1-2-7.464",key:"k1g0md"}],["path",{d:"M6.003 5.125a4 4 0 0 0-2.526 5.77",key:"q97ue3"}]],U_=Ve("brain",jk);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Bk=[["path",{d:"M16 14v2.2l1.6 1",key:"fo4ql5"}],["path",{d:"M16 2v4",key:"4m81vk"}],["path",{d:"M21 7.5V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h3.5",key:"1osxxc"}],["path",{d:"M3 10h5",key:"r794hk"}],["path",{d:"M8 2v4",key:"1cmpym"}],["circle",{cx:"16",cy:"16",r:"6",key:"qoo3c4"}]],Uk=Ve("calendar-clock",Bk);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Hk=[["path",{d:"M18 6 7 17l-5-5",key:"116fxf"}],["path",{d:"m22 10-7.5 7.5L13 16",key:"ke71qq"}]],$k=Ve("check-check",Hk);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const qk=[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]],Wc=Ve("check",qk);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Pk=[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]],Fk=Ve("chevron-down",Pk);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Gk=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]],Vk=Ve("circle-alert",Gk);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Yk=[["path",{d:"M21.801 10A10 10 0 1 1 17 3.335",key:"yps3ct"}],["path",{d:"m9 11 3 3L22 4",key:"1pflzl"}]],H_=Ve("circle-check-big",Yk);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Xk=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]],Kk=Ve("circle-check",Xk);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Zk=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["circle",{cx:"12",cy:"12",r:"1",key:"41hilf"}]],Qk=Ve("circle-dot",Zk);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Wk=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]],Jk=Ve("circle",Wk);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const e2=[["path",{d:"M12 6v6l4 2",key:"mmk7yg"}],["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]],$_=Ve("clock",e2);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const t2=[["path",{d:"m16 18 6-6-6-6",key:"eg8j8"}],["path",{d:"m8 6-6 6 6 6",key:"ppft3o"}]],n2=Ve("code",t2);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const i2=[["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"}]],Jc=Ve("copy",i2);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const r2=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"22",x2:"18",y1:"12",y2:"12",key:"l9bcsi"}],["line",{x1:"6",x2:"2",y1:"12",y2:"12",key:"13hhkx"}],["line",{x1:"12",x2:"12",y1:"6",y2:"2",key:"10w3f3"}],["line",{x1:"12",x2:"12",y1:"22",y2:"18",key:"15g9kq"}]],a2=Ve("crosshair",r2);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const l2=[["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"}]],o2=Ve("eye",l2);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const s2=[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M10 9H8",key:"b1mrlr"}],["path",{d:"M16 13H8",key:"t4e002"}],["path",{d:"M16 17H8",key:"z1uh3a"}]],c2=Ve("file-text",s2);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const u2=[["path",{d:"M4 22V4a1 1 0 0 1 .4-.8A6 6 0 0 1 8 2c3 0 5 2 7.333 2q2 0 3.067-.8A1 1 0 0 1 20 4v10a1 1 0 0 1-.4.8A6 6 0 0 1 16 16c-3 0-5-2-8-2a6 6 0 0 0-4 1.528",key:"1jaruq"}]],q_=Ve("flag",u2);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const f2=[["circle",{cx:"18",cy:"18",r:"3",key:"1xkwt0"}],["circle",{cx:"6",cy:"6",r:"3",key:"1lh9wr"}],["path",{d:"M13 6h3a2 2 0 0 1 2 2v7",key:"1yeb86"}],["line",{x1:"6",x2:"6",y1:"9",y2:"21",key:"rroup"}]],d2=Ve("git-pull-request",f2);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const h2=[["path",{d:"M15 22v-4a4.8 4.8 0 0 0-1-3.5c3 0 6-2 6-5.5.08-1.25-.27-2.48-1-3.5.28-1.15.28-2.35 0-3.5 0 0-1 0-3 1.5-2.64-.5-5.36-.5-8 0C6 2 5 2 5 2c-.3 1.15-.3 2.35 0 3.5A5.403 5.403 0 0 0 4 9c0 3.5 3 5.5 6 5.5-.39.49-.68 1.05-.85 1.65-.17.6-.22 1.23-.15 1.85v4",key:"tonef"}],["path",{d:"M9 18c-4.51 2-5-2-7-2",key:"9comsn"}]],p2=Ve("github",h2);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const m2=[["path",{d:"m22 13.29-3.33-10a.42.42 0 0 0-.14-.18.38.38 0 0 0-.22-.11.39.39 0 0 0-.23.07.42.42 0 0 0-.14.18l-2.26 6.67H8.32L6.1 3.26a.42.42 0 0 0-.1-.18.38.38 0 0 0-.26-.08.39.39 0 0 0-.23.07.42.42 0 0 0-.14.18L2 13.29a.74.74 0 0 0 .27.83L12 21l9.69-6.88a.71.71 0 0 0 .31-.83Z",key:"148pdi"}]],g2=Ve("gitlab",m2);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const b2=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20",key:"13o1zl"}],["path",{d:"M2 12h20",key:"9i4pu4"}]],P_=Ve("globe",b2);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const y2=[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}],["path",{d:"M12 7v5l4 2",key:"1fdv2h"}]],wy=Ve("history",y2);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const x2=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2",key:"1m3agn"}],["circle",{cx:"9",cy:"9",r:"2",key:"af1f0g"}],["path",{d:"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21",key:"1xmnt7"}]],v2=Ve("image",x2);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const _2=[["path",{d:"M13 5h8",key:"a7qcls"}],["path",{d:"M13 12h8",key:"h98zly"}],["path",{d:"M13 19h8",key:"c3s6r1"}],["path",{d:"m3 17 2 2 4-4",key:"1jhpwq"}],["rect",{x:"3",y:"4",width:"6",height:"6",rx:"1",key:"cif1o7"}]],E2=Ve("list-todo",_2);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const w2=[["rect",{width:"18",height:"11",x:"3",y:"11",rx:"2",ry:"2",key:"1w4ew1"}],["path",{d:"M7 11V7a5 5 0 0 1 10 0v4",key:"fwvmzm"}]],S2=Ve("lock",w2);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const N2=[["path",{d:"M2.992 16.342a2 2 0 0 1 .094 1.167l-1.065 3.29a1 1 0 0 0 1.236 1.168l3.413-.998a2 2 0 0 1 1.099.092 10 10 0 1 0-4.777-4.719",key:"1sd12s"}]],Sy=Ve("message-circle",N2);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const k2=[["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}],["path",{d:"m15 5 4 4",key:"1mk7zo"}]],T2=Ve("pencil",k2);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const A2=[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]],C2=Ve("plus",A2);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const M2=[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]],O2=Ve("refresh-cw",M2);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const R2=[["path",{d:"M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09z",key:"m3kijz"}],["path",{d:"m12 15-3-3a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.35 22.35 0 0 1-4 2z",key:"1fmvmk"}],["path",{d:"M9 12H4s.55-3.03 2-4c1.62-1.08 5 0 5 0",key:"1f8sc4"}],["path",{d:"M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5",key:"qeys4"}]],D2=Ve("rocket",R2);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const L2=[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}]],z2=Ve("rotate-ccw",L2);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const I2=[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]],j2=Ve("search",I2);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const B2=[["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:"M12 8v4",key:"1got3b"}],["path",{d:"M12 16h.01",key:"1drbdi"}]],U2=Ve("shield-alert",B2);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const H2=[["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"}]],$2=Ve("shield-check",H2);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const q2=[["path",{d:"M21 9a2.4 2.4 0 0 0-.706-1.706l-3.588-3.588A2.4 2.4 0 0 0 15 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2z",key:"1dfntj"}],["path",{d:"M15 3v5a1 1 0 0 0 1 1h5",key:"6s6qgf"}]],P2=Ve("sticky-note",q2);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const F2=[["path",{d:"M12 19h8",key:"baeox8"}],["path",{d:"m4 17 6-6-6-6",key:"1yngyt"}]],G2=Ve("terminal",F2);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const V2=[["path",{d:"M10 11v6",key:"nco0om"}],["path",{d:"M14 11v6",key:"outv1u"}],["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]],Y2=Ve("trash-2",V2);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const X2=[["path",{d:"m10.586 5.414-5.172 5.172",key:"4mc350"}],["path",{d:"m18.586 13.414-5.172 5.172",key:"8c96vv"}],["path",{d:"M6 12h12",key:"8npq4p"}],["circle",{cx:"12",cy:"20",r:"2",key:"144qzu"}],["circle",{cx:"12",cy:"4",r:"2",key:"muu5ef"}],["circle",{cx:"20",cy:"12",r:"2",key:"1xzzfp"}],["circle",{cx:"4",cy:"12",r:"2",key:"1hvhnz"}]],K2=Ve("waypoints",X2);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Z2=[["path",{d:"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z",key:"1ngwbx"}]],Ny=Ve("wrench",Z2),Q2={open:{label:"Open",color:"bg-red-500/10 text-red-400 border-red-500/20",dotColor:"bg-red-500",description:"Newly discovered, awaiting triage"},in_progress:{label:"In Progress",color:"bg-blue-500/10 text-blue-400 border-blue-500/20",dotColor:"bg-blue-500",description:"Someone is working on this"},snoozed:{label:"Snoozed",color:"bg-purple-500/10 text-purple-400 border-purple-500/20",dotColor:"bg-purple-500",description:"Temporarily hidden until a follow-up date"},fixed:{label:"Fixed",color:"bg-emerald-500/10 text-emerald-400 border-emerald-500/20",dotColor:"bg-emerald-500",description:"This vulnerability has been fixed"},ignored:{label:"Ignored",color:"bg-gray-500/10 text-gray-400 border-gray-500/20",dotColor:"bg-gray-500",description:"Acknowledged but accepted"}},W2={trivial:{label:"Trivial",color:"bg-emerald-500/10 text-emerald-400 border-emerald-500/20"},low:{label:"Low",color:"bg-blue-500/10 text-blue-400 border-blue-500/20"},medium:{label:"Medium",color:"bg-yellow-500/10 text-yellow-400 border-yellow-500/20"},high:{label:"High",color:"bg-orange-500/10 text-orange-400 border-orange-500/20"}},F_={critical:"bg-red-500/20 text-red-500 border-red-500/30",high:"bg-orange-500/20 text-orange-500 border-orange-500/30",medium:"bg-yellow-500/20 text-yellow-500 border-yellow-500/30",low:"bg-blue-500/20 text-blue-500 border-blue-500/30"};function Tc(e){return e.original_severity!=null&&e.original_severity!==e.severity}const J2={js:"javascript",ts:"typescript",tsx:"typescript",jsx:"javascript",py:"python",rb:"ruby",go:"go",rs:"rust",java:"java",php:"php",cs:"csharp",cpp:"cpp",c:"c",sh:"bash",bash:"bash",sql:"sql",html:"html",css:"css",json:"json",yaml:"yaml",yml:"yaml",xml:"xml"};function eT(e){var i;if(!e)return null;const n=(i=e.split(".").pop())==null?void 0:i.toLowerCase();return n&&J2[n]||null}function Pp(e){switch(e){case"critical":return"bg-red-500";case"high":return"bg-orange-500";case"medium":return"bg-yellow-500";default:return"bg-blue-500"}}async function Fp(e){try{await navigator.clipboard.writeText(e)}catch{const n=document.createElement("textarea");n.value=e,n.style.position="absolute",n.style.left="-9999px",document.body.appendChild(n),n.select(),document.execCommand("copy"),document.body.removeChild(n)}}function G_(e){var n,i,a="";if(typeof e=="string"||typeof e=="number")a+=e;else if(typeof e=="object")if(Array.isArray(e)){var o=e.length;for(n=0;n{const i=new Array(e.length+n.length);for(let a=0;a({classGroupId:e,validator:n}),V_=(e=new Map,n=null,i)=>({nextPart:e,validators:n,classGroupId:i}),eu="-",ky=[],rT="arbitrary..",aT=e=>{const n=oT(e),{conflictingClassGroups:i,conflictingClassGroupModifiers:a}=e;return{getClassGroupId:c=>{if(c.startsWith("[")&&c.endsWith("]"))return lT(c);const f=c.split(eu),h=f[0]===""&&f.length>1?1:0;return Y_(f,h,n)},getConflictingClassGroupIds:(c,f)=>{if(f){const h=a[c],d=i[c];return h?d?nT(d,h):h:d||ky}return i[c]||ky}}},Y_=(e,n,i)=>{if(e.length-n===0)return i.classGroupId;const o=e[n],s=i.nextPart.get(o);if(s){const d=Y_(e,n+1,s);if(d)return d}const c=i.validators;if(c===null)return;const f=n===0?e.join(eu):e.slice(n).join(eu),h=c.length;for(let d=0;de.slice(1,-1).indexOf(":")===-1?void 0:(()=>{const n=e.slice(1,-1),i=n.indexOf(":"),a=n.slice(0,i);return a?rT+a:void 0})(),oT=e=>{const{theme:n,classGroups:i}=e;return sT(i,n)},sT=(e,n)=>{const i=V_();for(const a in e){const o=e[a];Gp(o,i,a,n)}return i},Gp=(e,n,i,a)=>{const o=e.length;for(let s=0;s{if(typeof e=="string"){uT(e,n,i);return}if(typeof e=="function"){fT(e,n,i,a);return}dT(e,n,i,a)},uT=(e,n,i)=>{const a=e===""?n:X_(n,e);a.classGroupId=i},fT=(e,n,i,a)=>{if(hT(e)){Gp(e(a),n,i,a);return}n.validators===null&&(n.validators=[]),n.validators.push(iT(i,e))},dT=(e,n,i,a)=>{const o=Object.entries(e),s=o.length;for(let c=0;c{let i=e;const a=n.split(eu),o=a.length;for(let s=0;s"isThemeGetter"in e&&e.isThemeGetter===!0,pT=e=>{if(e<1)return{get:()=>{},set:()=>{}};let n=0,i=Object.create(null),a=Object.create(null);const o=(s,c)=>{i[s]=c,n++,n>e&&(n=0,a=i,i=Object.create(null))};return{get(s){let c=i[s];if(c!==void 0)return c;if((c=a[s])!==void 0)return o(s,c),c},set(s,c){s in i?i[s]=c:o(s,c)}}},fp="!",Ty=":",mT=[],Ay=(e,n,i,a,o)=>({modifiers:e,hasImportantModifier:n,baseClassName:i,maybePostfixModifierPosition:a,isExternal:o}),gT=e=>{const{prefix:n,experimentalParseClassName:i}=e;let a=o=>{const s=[];let c=0,f=0,h=0,d;const p=o.length;for(let S=0;Sh?d-h:void 0;return Ay(s,b,y,_)};if(n){const o=n+Ty,s=a;a=c=>c.startsWith(o)?s(c.slice(o.length)):Ay(mT,!1,c,void 0,!0)}if(i){const o=a;a=s=>i({className:s,parseClassName:o})}return a},bT=e=>{const n=new Map;return e.orderSensitiveModifiers.forEach((i,a)=>{n.set(i,1e6+a)}),i=>{const a=[];let o=[];for(let s=0;s0&&(o.sort(),a.push(...o),o=[]),a.push(c)):o.push(c)}return o.length>0&&(o.sort(),a.push(...o)),a}},yT=e=>({cache:pT(e.cacheSize),parseClassName:gT(e),sortModifiers:bT(e),postfixLookupClassGroupIds:xT(e),...aT(e)}),xT=e=>{const n=Object.create(null),i=e.postfixLookupClassGroups;if(i)for(let a=0;a{const{parseClassName:i,getClassGroupId:a,getConflictingClassGroupIds:o,sortModifiers:s,postfixLookupClassGroupIds:c}=n,f=[],h=e.trim().split(vT);let d="";for(let p=h.length-1;p>=0;p-=1){const m=h[p],{isExternal:y,modifiers:b,hasImportantModifier:_,baseClassName:S,maybePostfixModifierPosition:N}=i(m);if(y){d=m+(d.length>0?" "+d:d);continue}let E=!!N,k;if(E){const H=S.substring(0,N);k=a(H);const I=k&&c[k]?a(S):void 0;I&&I!==k&&(k=I,E=!1)}else k=a(S);if(!k){if(!E){d=m+(d.length>0?" "+d:d);continue}if(k=a(S),!k){d=m+(d.length>0?" "+d:d);continue}E=!1}const w=b.length===0?"":b.length===1?b[0]:s(b).join(":"),O=_?w+fp:w,B=O+k;if(f.indexOf(B)>-1)continue;f.push(B);const R=o(k,E);for(let H=0;H0?" "+d:d)}return d},ET=(...e)=>{let n=0,i,a,o="";for(;n{if(typeof e=="string")return e;let n,i="";for(let a=0;a{let i,a,o,s;const c=h=>{const d=n.reduce((p,m)=>m(p),e());return i=yT(d),a=i.cache.get,o=i.cache.set,s=f,f(h)},f=h=>{const d=a(h);if(d)return d;const p=_T(h,i);return o(h,p),p};return s=c,(...h)=>s(ET(...h))},ST=[],dn=e=>{const n=i=>i[e]||ST;return n.isThemeGetter=!0,n},Z_=/^\[(?:(\w[\w-]*):)?(.+)\]$/i,Q_=/^\((?:(\w[\w-]*):)?(.+)\)$/i,NT=/^\d+(?:\.\d+)?\/\d+(?:\.\d+)?$/,kT=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,TT=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,AT=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/,CT=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,MT=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,Qr=e=>NT.test(e),We=e=>!!e&&!Number.isNaN(Number(e)),Ui=e=>!!e&&Number.isInteger(Number(e)),Fd=e=>e.endsWith("%")&&We(e.slice(0,-1)),dr=e=>kT.test(e),W_=()=>!0,OT=e=>TT.test(e)&&!AT.test(e),Vp=()=>!1,RT=e=>CT.test(e),DT=e=>MT.test(e),LT=e=>!ke(e)&&!Te(e),zT=e=>e.startsWith("@container")&&(e[10]==="/"&&e[11]!==void 0||e[11]==="s"&&e[16]!==void 0&&e.startsWith("-size/",10)||e[11]==="n"&&e[18]!==void 0&&e.startsWith("-normal/",10)),IT=e=>ra(e,t1,Vp),ke=e=>Z_.test(e),ka=e=>ra(e,n1,OT),Cy=e=>ra(e,FT,We),jT=e=>ra(e,r1,W_),BT=e=>ra(e,i1,Vp),My=e=>ra(e,J_,Vp),UT=e=>ra(e,e1,DT),Ac=e=>ra(e,a1,RT),Te=e=>Q_.test(e),Do=e=>Ha(e,n1),HT=e=>Ha(e,i1),Oy=e=>Ha(e,J_),$T=e=>Ha(e,t1),qT=e=>Ha(e,e1),Cc=e=>Ha(e,a1,!0),PT=e=>Ha(e,r1,!0),ra=(e,n,i)=>{const a=Z_.exec(e);return a?a[1]?n(a[1]):i(a[2]):!1},Ha=(e,n,i=!1)=>{const a=Q_.exec(e);return a?a[1]?n(a[1]):i:!1},J_=e=>e==="position"||e==="percentage",e1=e=>e==="image"||e==="url",t1=e=>e==="length"||e==="size"||e==="bg-size",n1=e=>e==="length",FT=e=>e==="number",i1=e=>e==="family-name",r1=e=>e==="number"||e==="weight",a1=e=>e==="shadow",GT=()=>{const e=dn("color"),n=dn("font"),i=dn("text"),a=dn("font-weight"),o=dn("tracking"),s=dn("leading"),c=dn("breakpoint"),f=dn("container"),h=dn("spacing"),d=dn("radius"),p=dn("shadow"),m=dn("inset-shadow"),y=dn("text-shadow"),b=dn("drop-shadow"),_=dn("blur"),S=dn("perspective"),N=dn("aspect"),E=dn("ease"),k=dn("animate"),w=()=>["auto","avoid","all","avoid-page","page","left","right","column"],O=()=>["center","top","bottom","left","right","top-left","left-top","top-right","right-top","bottom-right","right-bottom","bottom-left","left-bottom"],B=()=>[...O(),Te,ke],R=()=>["auto","hidden","clip","visible","scroll"],H=()=>["auto","contain","none"],I=()=>[Te,ke,h],K=()=>[Qr,"full","auto",...I()],L=()=>[Ui,"none","subgrid",Te,ke],q=()=>["auto",{span:["full",Ui,Te,ke]},Ui,Te,ke],X=()=>[Ui,"auto",Te,ke],Y=()=>["auto","min","max","fr",Te,ke],A=()=>["start","end","center","between","around","evenly","stretch","baseline","center-safe","end-safe"],$=()=>["start","end","center","stretch","center-safe","end-safe"],M=()=>["auto",...I()],j=()=>[Qr,"auto","full","dvw","dvh","lvw","lvh","svw","svh","min","max","fit",...I()],V=()=>[Qr,"screen","full","dvw","lvw","svw","min","max","fit",...I()],Z=()=>[Qr,"screen","full","lh","dvh","lvh","svh","min","max","fit",...I()],C=()=>[e,Te,ke],z=()=>[...O(),Oy,My,{position:[Te,ke]}],G=()=>["no-repeat",{repeat:["","x","y","space","round"]}],D=()=>["auto","cover","contain",$T,IT,{size:[Te,ke]}],F=()=>[Fd,Do,ka],U=()=>["","none","full",d,Te,ke],Q=()=>["",We,Do,ka],J=()=>["solid","dashed","dotted","double"],W=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],ee=()=>[We,Fd,Oy,My],ce=()=>["","none",_,Te,ke],de=()=>["none",We,Te,ke],be=()=>["none",We,Te,ke],Ee=()=>[We,Te,ke],Se=()=>[Qr,"full",...I()];return{cacheSize:500,theme:{animate:["spin","ping","pulse","bounce"],aspect:["video"],blur:[dr],breakpoint:[dr],color:[W_],container:[dr],"drop-shadow":[dr],ease:["in","out","in-out"],font:[LT],"font-weight":["thin","extralight","light","normal","medium","semibold","bold","extrabold","black"],"inset-shadow":[dr],leading:["none","tight","snug","normal","relaxed","loose"],perspective:["dramatic","near","normal","midrange","distant","none"],radius:[dr],shadow:[dr],spacing:["px",We],text:[dr],"text-shadow":[dr],tracking:["tighter","tight","normal","wide","wider","widest"]},classGroups:{aspect:[{aspect:["auto","square",Qr,ke,Te,N]}],container:["container"],"container-type":[{"@container":["","normal","size",Te,ke]}],"container-named":[zT],columns:[{columns:[We,ke,Te,f]}],"break-after":[{"break-after":w()}],"break-before":[{"break-before":w()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],sr:["sr-only","not-sr-only"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:B()}],overflow:[{overflow:R()}],"overflow-x":[{"overflow-x":R()}],"overflow-y":[{"overflow-y":R()}],overscroll:[{overscroll:H()}],"overscroll-x":[{"overscroll-x":H()}],"overscroll-y":[{"overscroll-y":H()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:K()}],"inset-x":[{"inset-x":K()}],"inset-y":[{"inset-y":K()}],start:[{"inset-s":K(),start:K()}],end:[{"inset-e":K(),end:K()}],"inset-bs":[{"inset-bs":K()}],"inset-be":[{"inset-be":K()}],top:[{top:K()}],right:[{right:K()}],bottom:[{bottom:K()}],left:[{left:K()}],visibility:["visible","invisible","collapse"],z:[{z:[Ui,"auto",Te,ke]}],basis:[{basis:[Qr,"full","auto",f,...I()]}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["nowrap","wrap","wrap-reverse"]}],flex:[{flex:[We,Qr,"auto","initial","none",ke]}],grow:[{grow:["",We,Te,ke]}],shrink:[{shrink:["",We,Te,ke]}],order:[{order:[Ui,"first","last","none",Te,ke]}],"grid-cols":[{"grid-cols":L()}],"col-start-end":[{col:q()}],"col-start":[{"col-start":X()}],"col-end":[{"col-end":X()}],"grid-rows":[{"grid-rows":L()}],"row-start-end":[{row:q()}],"row-start":[{"row-start":X()}],"row-end":[{"row-end":X()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":Y()}],"auto-rows":[{"auto-rows":Y()}],gap:[{gap:I()}],"gap-x":[{"gap-x":I()}],"gap-y":[{"gap-y":I()}],"justify-content":[{justify:[...A(),"normal"]}],"justify-items":[{"justify-items":[...$(),"normal"]}],"justify-self":[{"justify-self":["auto",...$()]}],"align-content":[{content:["normal",...A()]}],"align-items":[{items:[...$(),{baseline:["","last"]}]}],"align-self":[{self:["auto",...$(),{baseline:["","last"]}]}],"place-content":[{"place-content":A()}],"place-items":[{"place-items":[...$(),"baseline"]}],"place-self":[{"place-self":["auto",...$()]}],p:[{p:I()}],px:[{px:I()}],py:[{py:I()}],ps:[{ps:I()}],pe:[{pe:I()}],pbs:[{pbs:I()}],pbe:[{pbe:I()}],pt:[{pt:I()}],pr:[{pr:I()}],pb:[{pb:I()}],pl:[{pl:I()}],m:[{m:M()}],mx:[{mx:M()}],my:[{my:M()}],ms:[{ms:M()}],me:[{me:M()}],mbs:[{mbs:M()}],mbe:[{mbe:M()}],mt:[{mt:M()}],mr:[{mr:M()}],mb:[{mb:M()}],ml:[{ml:M()}],"space-x":[{"space-x":I()}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":I()}],"space-y-reverse":["space-y-reverse"],size:[{size:j()}],"inline-size":[{inline:["auto",...V()]}],"min-inline-size":[{"min-inline":["auto",...V()]}],"max-inline-size":[{"max-inline":["none",...V()]}],"block-size":[{block:["auto",...Z()]}],"min-block-size":[{"min-block":["auto",...Z()]}],"max-block-size":[{"max-block":["none",...Z()]}],w:[{w:[f,"screen",...j()]}],"min-w":[{"min-w":[f,"screen","none",...j()]}],"max-w":[{"max-w":[f,"screen","none","prose",{screen:[c]},...j()]}],h:[{h:["screen","lh",...j()]}],"min-h":[{"min-h":["screen","lh","none",...j()]}],"max-h":[{"max-h":["screen","lh",...j()]}],"font-size":[{text:["base",i,Do,ka]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:[a,PT,jT]}],"font-stretch":[{"font-stretch":["ultra-condensed","extra-condensed","condensed","semi-condensed","normal","semi-expanded","expanded","extra-expanded","ultra-expanded",Fd,ke]}],"font-family":[{font:[HT,BT,n]}],"font-features":[{"font-features":[ke]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractions"],tracking:[{tracking:[o,Te,ke]}],"line-clamp":[{"line-clamp":[We,"none",Te,Cy]}],leading:[{leading:[s,...I()]}],"list-image":[{"list-image":["none",Te,ke]}],"list-style-position":[{list:["inside","outside"]}],"list-style-type":[{list:["disc","decimal","none",Te,ke]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"placeholder-color":[{placeholder:C()}],"text-color":[{text:C()}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...J(),"wavy"]}],"text-decoration-thickness":[{decoration:[We,"from-font","auto",Te,ka]}],"text-decoration-color":[{decoration:C()}],"underline-offset":[{"underline-offset":[We,"auto",Te,ke]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:I()}],"tab-size":[{tab:[Ui,Te,ke]}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",Te,ke]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],wrap:[{wrap:["break-word","anywhere","normal"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",Te,ke]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:z()}],"bg-repeat":[{bg:G()}],"bg-size":[{bg:D()}],"bg-image":[{bg:["none",{linear:[{to:["t","tr","r","br","b","bl","l","tl"]},Ui,Te,ke],radial:["",Te,ke],conic:[Ui,Te,ke]},qT,UT]}],"bg-color":[{bg:C()}],"gradient-from-pos":[{from:F()}],"gradient-via-pos":[{via:F()}],"gradient-to-pos":[{to:F()}],"gradient-from":[{from:C()}],"gradient-via":[{via:C()}],"gradient-to":[{to:C()}],rounded:[{rounded:U()}],"rounded-s":[{"rounded-s":U()}],"rounded-e":[{"rounded-e":U()}],"rounded-t":[{"rounded-t":U()}],"rounded-r":[{"rounded-r":U()}],"rounded-b":[{"rounded-b":U()}],"rounded-l":[{"rounded-l":U()}],"rounded-ss":[{"rounded-ss":U()}],"rounded-se":[{"rounded-se":U()}],"rounded-ee":[{"rounded-ee":U()}],"rounded-es":[{"rounded-es":U()}],"rounded-tl":[{"rounded-tl":U()}],"rounded-tr":[{"rounded-tr":U()}],"rounded-br":[{"rounded-br":U()}],"rounded-bl":[{"rounded-bl":U()}],"border-w":[{border:Q()}],"border-w-x":[{"border-x":Q()}],"border-w-y":[{"border-y":Q()}],"border-w-s":[{"border-s":Q()}],"border-w-e":[{"border-e":Q()}],"border-w-bs":[{"border-bs":Q()}],"border-w-be":[{"border-be":Q()}],"border-w-t":[{"border-t":Q()}],"border-w-r":[{"border-r":Q()}],"border-w-b":[{"border-b":Q()}],"border-w-l":[{"border-l":Q()}],"divide-x":[{"divide-x":Q()}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":Q()}],"divide-y-reverse":["divide-y-reverse"],"border-style":[{border:[...J(),"hidden","none"]}],"divide-style":[{divide:[...J(),"hidden","none"]}],"border-color":[{border:C()}],"border-color-x":[{"border-x":C()}],"border-color-y":[{"border-y":C()}],"border-color-s":[{"border-s":C()}],"border-color-e":[{"border-e":C()}],"border-color-bs":[{"border-bs":C()}],"border-color-be":[{"border-be":C()}],"border-color-t":[{"border-t":C()}],"border-color-r":[{"border-r":C()}],"border-color-b":[{"border-b":C()}],"border-color-l":[{"border-l":C()}],"divide-color":[{divide:C()}],"outline-style":[{outline:[...J(),"none","hidden"]}],"outline-offset":[{"outline-offset":[We,Te,ke]}],"outline-w":[{outline:["",We,Do,ka]}],"outline-color":[{outline:C()}],shadow:[{shadow:["","none",p,Cc,Ac]}],"shadow-color":[{shadow:C()}],"inset-shadow":[{"inset-shadow":["none",m,Cc,Ac]}],"inset-shadow-color":[{"inset-shadow":C()}],"ring-w":[{ring:Q()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:C()}],"ring-offset-w":[{"ring-offset":[We,ka]}],"ring-offset-color":[{"ring-offset":C()}],"inset-ring-w":[{"inset-ring":Q()}],"inset-ring-color":[{"inset-ring":C()}],"text-shadow":[{"text-shadow":["none",y,Cc,Ac]}],"text-shadow-color":[{"text-shadow":C()}],opacity:[{opacity:[We,Te,ke]}],"mix-blend":[{"mix-blend":[...W(),"plus-darker","plus-lighter"]}],"bg-blend":[{"bg-blend":W()}],"mask-clip":[{"mask-clip":["border","padding","content","fill","stroke","view"]},"mask-no-clip"],"mask-composite":[{mask:["add","subtract","intersect","exclude"]}],"mask-image-linear-pos":[{"mask-linear":[We]}],"mask-image-linear-from-pos":[{"mask-linear-from":ee()}],"mask-image-linear-to-pos":[{"mask-linear-to":ee()}],"mask-image-linear-from-color":[{"mask-linear-from":C()}],"mask-image-linear-to-color":[{"mask-linear-to":C()}],"mask-image-t-from-pos":[{"mask-t-from":ee()}],"mask-image-t-to-pos":[{"mask-t-to":ee()}],"mask-image-t-from-color":[{"mask-t-from":C()}],"mask-image-t-to-color":[{"mask-t-to":C()}],"mask-image-r-from-pos":[{"mask-r-from":ee()}],"mask-image-r-to-pos":[{"mask-r-to":ee()}],"mask-image-r-from-color":[{"mask-r-from":C()}],"mask-image-r-to-color":[{"mask-r-to":C()}],"mask-image-b-from-pos":[{"mask-b-from":ee()}],"mask-image-b-to-pos":[{"mask-b-to":ee()}],"mask-image-b-from-color":[{"mask-b-from":C()}],"mask-image-b-to-color":[{"mask-b-to":C()}],"mask-image-l-from-pos":[{"mask-l-from":ee()}],"mask-image-l-to-pos":[{"mask-l-to":ee()}],"mask-image-l-from-color":[{"mask-l-from":C()}],"mask-image-l-to-color":[{"mask-l-to":C()}],"mask-image-x-from-pos":[{"mask-x-from":ee()}],"mask-image-x-to-pos":[{"mask-x-to":ee()}],"mask-image-x-from-color":[{"mask-x-from":C()}],"mask-image-x-to-color":[{"mask-x-to":C()}],"mask-image-y-from-pos":[{"mask-y-from":ee()}],"mask-image-y-to-pos":[{"mask-y-to":ee()}],"mask-image-y-from-color":[{"mask-y-from":C()}],"mask-image-y-to-color":[{"mask-y-to":C()}],"mask-image-radial":[{"mask-radial":[Te,ke]}],"mask-image-radial-from-pos":[{"mask-radial-from":ee()}],"mask-image-radial-to-pos":[{"mask-radial-to":ee()}],"mask-image-radial-from-color":[{"mask-radial-from":C()}],"mask-image-radial-to-color":[{"mask-radial-to":C()}],"mask-image-radial-shape":[{"mask-radial":["circle","ellipse"]}],"mask-image-radial-size":[{"mask-radial":[{closest:["side","corner"],farthest:["side","corner"]}]}],"mask-image-radial-pos":[{"mask-radial-at":O()}],"mask-image-conic-pos":[{"mask-conic":[We]}],"mask-image-conic-from-pos":[{"mask-conic-from":ee()}],"mask-image-conic-to-pos":[{"mask-conic-to":ee()}],"mask-image-conic-from-color":[{"mask-conic-from":C()}],"mask-image-conic-to-color":[{"mask-conic-to":C()}],"mask-mode":[{mask:["alpha","luminance","match"]}],"mask-origin":[{"mask-origin":["border","padding","content","fill","stroke","view"]}],"mask-position":[{mask:z()}],"mask-repeat":[{mask:G()}],"mask-size":[{mask:D()}],"mask-type":[{"mask-type":["alpha","luminance"]}],"mask-image":[{mask:["none",Te,ke]}],filter:[{filter:["","none",Te,ke]}],blur:[{blur:ce()}],brightness:[{brightness:[We,Te,ke]}],contrast:[{contrast:[We,Te,ke]}],"drop-shadow":[{"drop-shadow":["","none",b,Cc,Ac]}],"drop-shadow-color":[{"drop-shadow":C()}],grayscale:[{grayscale:["",We,Te,ke]}],"hue-rotate":[{"hue-rotate":[We,Te,ke]}],invert:[{invert:["",We,Te,ke]}],saturate:[{saturate:[We,Te,ke]}],sepia:[{sepia:["",We,Te,ke]}],"backdrop-filter":[{"backdrop-filter":["","none",Te,ke]}],"backdrop-blur":[{"backdrop-blur":ce()}],"backdrop-brightness":[{"backdrop-brightness":[We,Te,ke]}],"backdrop-contrast":[{"backdrop-contrast":[We,Te,ke]}],"backdrop-grayscale":[{"backdrop-grayscale":["",We,Te,ke]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[We,Te,ke]}],"backdrop-invert":[{"backdrop-invert":["",We,Te,ke]}],"backdrop-opacity":[{"backdrop-opacity":[We,Te,ke]}],"backdrop-saturate":[{"backdrop-saturate":[We,Te,ke]}],"backdrop-sepia":[{"backdrop-sepia":["",We,Te,ke]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":I()}],"border-spacing-x":[{"border-spacing-x":I()}],"border-spacing-y":[{"border-spacing-y":I()}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["","all","colors","opacity","shadow","transform","none",Te,ke]}],"transition-behavior":[{transition:["normal","discrete"]}],duration:[{duration:[We,"initial",Te,ke]}],ease:[{ease:["linear","initial",E,Te,ke]}],delay:[{delay:[We,Te,ke]}],animate:[{animate:["none",k,Te,ke]}],backface:[{backface:["hidden","visible"]}],perspective:[{perspective:[S,Te,ke]}],"perspective-origin":[{"perspective-origin":B()}],rotate:[{rotate:de()}],"rotate-x":[{"rotate-x":de()}],"rotate-y":[{"rotate-y":de()}],"rotate-z":[{"rotate-z":de()}],scale:[{scale:be()}],"scale-x":[{"scale-x":be()}],"scale-y":[{"scale-y":be()}],"scale-z":[{"scale-z":be()}],"scale-3d":["scale-3d"],skew:[{skew:Ee()}],"skew-x":[{"skew-x":Ee()}],"skew-y":[{"skew-y":Ee()}],transform:[{transform:[Te,ke,"","none","gpu","cpu"]}],"transform-origin":[{origin:B()}],"transform-style":[{transform:["3d","flat"]}],translate:[{translate:Se()}],"translate-x":[{"translate-x":Se()}],"translate-y":[{"translate-y":Se()}],"translate-z":[{"translate-z":Se()}],"translate-none":["translate-none"],zoom:[{zoom:[Ui,Te,ke]}],accent:[{accent:C()}],appearance:[{appearance:["none","auto"]}],"caret-color":[{caret:C()}],"color-scheme":[{scheme:["normal","dark","light","light-dark","only-dark","only-light"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",Te,ke]}],"field-sizing":[{"field-sizing":["fixed","content"]}],"pointer-events":[{"pointer-events":["auto","none"]}],resize:[{resize:["none","","y","x"]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scrollbar-thumb-color":[{"scrollbar-thumb":C()}],"scrollbar-track-color":[{"scrollbar-track":C()}],"scrollbar-gutter":[{"scrollbar-gutter":["auto","stable","both"]}],"scrollbar-w":[{scrollbar:["auto","thin","none"]}],"scroll-m":[{"scroll-m":I()}],"scroll-mx":[{"scroll-mx":I()}],"scroll-my":[{"scroll-my":I()}],"scroll-ms":[{"scroll-ms":I()}],"scroll-me":[{"scroll-me":I()}],"scroll-mbs":[{"scroll-mbs":I()}],"scroll-mbe":[{"scroll-mbe":I()}],"scroll-mt":[{"scroll-mt":I()}],"scroll-mr":[{"scroll-mr":I()}],"scroll-mb":[{"scroll-mb":I()}],"scroll-ml":[{"scroll-ml":I()}],"scroll-p":[{"scroll-p":I()}],"scroll-px":[{"scroll-px":I()}],"scroll-py":[{"scroll-py":I()}],"scroll-ps":[{"scroll-ps":I()}],"scroll-pe":[{"scroll-pe":I()}],"scroll-pbs":[{"scroll-pbs":I()}],"scroll-pbe":[{"scroll-pbe":I()}],"scroll-pt":[{"scroll-pt":I()}],"scroll-pr":[{"scroll-pr":I()}],"scroll-pb":[{"scroll-pb":I()}],"scroll-pl":[{"scroll-pl":I()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",Te,ke]}],fill:[{fill:["none",...C()]}],"stroke-w":[{stroke:[We,Do,ka,Cy]}],stroke:[{stroke:["none",...C()]}],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{"container-named":["container-type"],overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","inset-bs","inset-be","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pbs","pbe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mbs","mbe","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-x","border-w-y","border-w-s","border-w-e","border-w-bs","border-w-be","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-x","border-color-y","border-color-s","border-color-e","border-color-bs","border-color-be","border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],translate:["translate-x","translate-y","translate-none"],"translate-none":["translate","translate-x","translate-y","translate-z"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mbs","scroll-mbe","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pbs","scroll-pbe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]},postfixLookupClassGroups:["container-type"],orderSensitiveModifiers:["*","**","after","backdrop","before","details-content","file","first-letter","first-line","marker","placeholder","selection"]}},VT=wT(GT);function Mc(...e){return VT(tT(e))}function YT(e){return new Date(e).toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric"})}function dp(e){const n=new Date(e),a=Math.floor((new Date().getTime()-n.getTime())/1e3);return a<60?"just now":a<3600?`${Math.floor(a/60)}m ago`:a<86400?`${Math.floor(a/3600)}h ago`:a<604800?`${Math.floor(a/86400)}d ago`:YT(e)}function XT(e){return`STRIX-${e}`}function KT(e,n){const i={};return(e[e.length-1]===""?[...e,""]:e).join((i.padRight?" ":"")+","+(i.padLeft===!1?"":" ")).trim()}const ZT=/^[$_\p{ID_Start}][$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,QT=/^[$_\p{ID_Start}][-$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,WT={};function Ry(e,n){return(WT.jsx?QT:ZT).test(e)}const JT=/[ \t\n\f\r]/g;function eA(e){return typeof e=="object"?e.type==="text"?Dy(e.value):!1:Dy(e)}function Dy(e){return e.replace(JT,"")===""}class os{constructor(n,i,a){this.normal=i,this.property=n,a&&(this.space=a)}}os.prototype.normal={};os.prototype.property={};os.prototype.space=void 0;function l1(e,n){const i={},a={};for(const o of e)Object.assign(i,o.property),Object.assign(a,o.normal);return new os(i,a,n)}function hp(e){return e.toLowerCase()}class Gn{constructor(n,i){this.attribute=i,this.property=n}}Gn.prototype.attribute="";Gn.prototype.booleanish=!1;Gn.prototype.boolean=!1;Gn.prototype.commaOrSpaceSeparated=!1;Gn.prototype.commaSeparated=!1;Gn.prototype.defined=!1;Gn.prototype.mustUseProperty=!1;Gn.prototype.number=!1;Gn.prototype.overloadedBoolean=!1;Gn.prototype.property="";Gn.prototype.spaceSeparated=!1;Gn.prototype.space=void 0;let tA=0;const Fe=$a(),an=$a(),pp=$a(),ve=$a(),Tt=$a(),Oa=$a(),ti=$a();function $a(){return 2**++tA}const mp=Object.freeze(Object.defineProperty({__proto__:null,boolean:Fe,booleanish:an,commaOrSpaceSeparated:ti,commaSeparated:Oa,number:ve,overloadedBoolean:pp,spaceSeparated:Tt},Symbol.toStringTag,{value:"Module"})),Gd=Object.keys(mp);class Yp extends Gn{constructor(n,i,a,o){let s=-1;if(super(n,i),Ly(this,"space",o),typeof a=="number")for(;++s4&&i.slice(0,4)==="data"&&lA.test(n)){if(n.charAt(4)==="-"){const s=n.slice(5).replace(zy,cA);a="data"+s.charAt(0).toUpperCase()+s.slice(1)}else{const s=n.slice(4);if(!zy.test(s)){let c=s.replace(aA,sA);c.charAt(0)!=="-"&&(c="-"+c),n="data"+c}}o=Yp}return new o(a,n)}function sA(e){return"-"+e.toLowerCase()}function cA(e){return e.charAt(1).toUpperCase()}const uA=l1([o1,nA,u1,f1,d1],"html"),Xp=l1([o1,iA,u1,f1,d1],"svg");function fA(e){return e.join(" ").trim()}var El={},Vd,Iy;function dA(){if(Iy)return Vd;Iy=1;var e=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//g,n=/\n/g,i=/^\s*/,a=/^(\*?[-#/*\\\w]+(\[[0-9a-z_-]+\])?)\s*/,o=/^:\s*/,s=/^((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};])+)/,c=/^[;\s]*/,f=/^\s+|\s+$/g,h=` +`,d="/",p="*",m="",y="comment",b="declaration";function _(N,E){if(typeof N!="string")throw new TypeError("First argument must be a string");if(!N)return[];E=E||{};var k=1,w=1;function O(A){var $=A.match(n);$&&(k+=$.length);var M=A.lastIndexOf(h);w=~M?A.length-M:w+A.length}function B(){var A={line:k,column:w};return function($){return $.position=new R(A),K(),$}}function R(A){this.start=A,this.end={line:k,column:w},this.source=E.source}R.prototype.content=N;function H(A){var $=new Error(E.source+":"+k+":"+w+": "+A);if($.reason=A,$.filename=E.source,$.line=k,$.column=w,$.source=N,!E.silent)throw $}function I(A){var $=A.exec(N);if($){var M=$[0];return O(M),N=N.slice(M.length),$}}function K(){I(i)}function L(A){var $;for(A=A||[];$=q();)$!==!1&&A.push($);return A}function q(){var A=B();if(!(d!=N.charAt(0)||p!=N.charAt(1))){for(var $=2;m!=N.charAt($)&&(p!=N.charAt($)||d!=N.charAt($+1));)++$;if($+=2,m===N.charAt($-1))return H("End of comment missing");var M=N.slice(2,$-2);return w+=2,O(M),N=N.slice($),w+=2,A({type:y,comment:M})}}function X(){var A=B(),$=I(a);if($){if(q(),!I(o))return H("property missing ':'");var M=I(s),j=A({type:b,property:S($[0].replace(e,m)),value:M?S(M[0].replace(e,m)):m});return I(c),j}}function Y(){var A=[];L(A);for(var $;$=X();)$!==!1&&(A.push($),L(A));return A}return K(),Y()}function S(N){return N?N.replace(f,m):m}return Vd=_,Vd}var jy;function hA(){if(jy)return El;jy=1;var e=El&&El.__importDefault||function(a){return a&&a.__esModule?a:{default:a}};Object.defineProperty(El,"__esModule",{value:!0}),El.default=i;const n=e(dA());function i(a,o){let s=null;if(!a||typeof a!="string")return s;const c=(0,n.default)(a),f=typeof o=="function";return c.forEach(h=>{if(h.type!=="declaration")return;const{property:d,value:p}=h;f?o(d,p,h):p&&(s=s||{},s[d]=p)}),s}return El}var Lo={},By;function pA(){if(By)return Lo;By=1,Object.defineProperty(Lo,"__esModule",{value:!0}),Lo.camelCase=void 0;var e=/^--[a-zA-Z0-9_-]+$/,n=/-([a-z])/g,i=/^[^-]+$/,a=/^-(webkit|moz|ms|o|khtml)-/,o=/^-(ms)-/,s=function(d){return!d||i.test(d)||e.test(d)},c=function(d,p){return p.toUpperCase()},f=function(d,p){return"".concat(p,"-")},h=function(d,p){return p===void 0&&(p={}),s(d)?d:(d=d.toLowerCase(),p.reactCompat?d=d.replace(o,f):d=d.replace(a,f),d.replace(n,c))};return Lo.camelCase=h,Lo}var zo,Uy;function mA(){if(Uy)return zo;Uy=1;var e=zo&&zo.__importDefault||function(o){return o&&o.__esModule?o:{default:o}},n=e(hA()),i=pA();function a(o,s){var c={};return!o||typeof o!="string"||(0,n.default)(o,function(f,h){f&&h&&(c[(0,i.camelCase)(f,s)]=h)}),c}return a.default=a,zo=a,zo}var gA=mA();const bA=as(gA),h1=p1("end"),Kp=p1("start");function p1(e){return n;function n(i){const a=i&&i.position&&i.position[e]||{};if(typeof a.line=="number"&&a.line>0&&typeof a.column=="number"&&a.column>0)return{line:a.line,column:a.column,offset:typeof a.offset=="number"&&a.offset>-1?a.offset:void 0}}}function yA(e){const n=Kp(e),i=h1(e);if(n&&i)return{start:n,end:i}}function Po(e){return!e||typeof e!="object"?"":"position"in e||"type"in e?Hy(e.position):"start"in e||"end"in e?Hy(e):"line"in e||"column"in e?gp(e):""}function gp(e){return $y(e&&e.line)+":"+$y(e&&e.column)}function Hy(e){return gp(e&&e.start)+"-"+gp(e&&e.end)}function $y(e){return e&&typeof e=="number"?e:1}class An extends Error{constructor(n,i,a){super(),typeof i=="string"&&(a=i,i=void 0);let o="",s={},c=!1;if(i&&("line"in i&&"column"in i?s={place:i}:"start"in i&&"end"in i?s={place:i}:"type"in i?s={ancestors:[i],place:i.position}:s={...i}),typeof n=="string"?o=n:!s.cause&&n&&(c=!0,o=n.message,s.cause=n),!s.ruleId&&!s.source&&typeof a=="string"){const h=a.indexOf(":");h===-1?s.ruleId=a:(s.source=a.slice(0,h),s.ruleId=a.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=o,this.line=f?f.line:void 0,this.name=Po(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=c&&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}}An.prototype.file="";An.prototype.name="";An.prototype.reason="";An.prototype.message="";An.prototype.stack="";An.prototype.column=void 0;An.prototype.line=void 0;An.prototype.ancestors=void 0;An.prototype.cause=void 0;An.prototype.fatal=void 0;An.prototype.place=void 0;An.prototype.ruleId=void 0;An.prototype.source=void 0;const Zp={}.hasOwnProperty,xA=new Map,vA=/[A-Z]/g,_A=new Set(["table","tbody","thead","tfoot","tr"]),EA=new Set(["td","th"]),m1="https://github.com/syntax-tree/hast-util-to-jsx-runtime";function wA(e,n){if(!n||n.Fragment===void 0)throw new TypeError("Expected `Fragment` in options");const i=n.filePath||void 0;let a;if(n.development){if(typeof n.jsxDEV!="function")throw new TypeError("Expected `jsxDEV` in options when `development: true`");a=OA(i,n.jsxDEV)}else{if(typeof n.jsx!="function")throw new TypeError("Expected `jsx` in production options");if(typeof n.jsxs!="function")throw new TypeError("Expected `jsxs` in production options");a=MA(i,n.jsx,n.jsxs)}const o={Fragment:n.Fragment,ancestors:[],components:n.components||{},create:a,elementAttributeNameCase:n.elementAttributeNameCase||"react",evaluater:n.createEvaluater?n.createEvaluater():void 0,filePath:i,ignoreInvalidStyle:n.ignoreInvalidStyle||!1,passKeys:n.passKeys!==!1,passNode:n.passNode||!1,schema:n.space==="svg"?Xp:uA,stylePropertyNameCase:n.stylePropertyNameCase||"dom",tableCellAlignToStyle:n.tableCellAlignToStyle!==!1},s=g1(o,e,void 0);return s&&typeof s!="string"?s:o.create(e,o.Fragment,{children:s||void 0},void 0)}function g1(e,n,i){if(n.type==="element")return SA(e,n,i);if(n.type==="mdxFlowExpression"||n.type==="mdxTextExpression")return NA(e,n);if(n.type==="mdxJsxFlowElement"||n.type==="mdxJsxTextElement")return TA(e,n,i);if(n.type==="mdxjsEsm")return kA(e,n);if(n.type==="root")return AA(e,n,i);if(n.type==="text")return CA(e,n)}function SA(e,n,i){const a=e.schema;let o=a;n.tagName.toLowerCase()==="svg"&&a.space==="html"&&(o=Xp,e.schema=o),e.ancestors.push(n);const s=y1(e,n.tagName,!1),c=RA(e,n);let f=Wp(e,n);return _A.has(n.tagName)&&(f=f.filter(function(h){return typeof h=="string"?!eA(h):!0})),b1(e,c,s,n),Qp(c,f),e.ancestors.pop(),e.schema=a,e.create(n,s,c,i)}function NA(e,n){if(n.data&&n.data.estree&&e.evaluater){const a=n.data.estree.body[0];return a.type,e.evaluater.evaluateExpression(a.expression)}Xo(e,n.position)}function kA(e,n){if(n.data&&n.data.estree&&e.evaluater)return e.evaluater.evaluateProgram(n.data.estree);Xo(e,n.position)}function TA(e,n,i){const a=e.schema;let o=a;n.name==="svg"&&a.space==="html"&&(o=Xp,e.schema=o),e.ancestors.push(n);const s=n.name===null?e.Fragment:y1(e,n.name,!0),c=DA(e,n),f=Wp(e,n);return b1(e,c,s,n),Qp(c,f),e.ancestors.pop(),e.schema=a,e.create(n,s,c,i)}function AA(e,n,i){const a={};return Qp(a,Wp(e,n)),e.create(n,e.Fragment,a,i)}function CA(e,n){return n.value}function b1(e,n,i,a){typeof i!="string"&&i!==e.Fragment&&e.passNode&&(n.node=a)}function Qp(e,n){if(n.length>0){const i=n.length>1?n:n[0];i&&(e.children=i)}}function MA(e,n,i){return a;function a(o,s,c,f){const d=Array.isArray(c.children)?i:n;return f?d(s,c,f):d(s,c)}}function OA(e,n){return i;function i(a,o,s,c){const f=Array.isArray(s.children),h=Kp(a);return n(o,s,c,f,{columnNumber:h?h.column-1:void 0,fileName:e,lineNumber:h?h.line:void 0},void 0)}}function RA(e,n){const i={};let a,o;for(o in n.properties)if(o!=="children"&&Zp.call(n.properties,o)){const s=LA(e,o,n.properties[o]);if(s){const[c,f]=s;e.tableCellAlignToStyle&&c==="align"&&typeof f=="string"&&EA.has(n.tagName)?a=f:i[c]=f}}if(a){const s=i.style||(i.style={});s[e.stylePropertyNameCase==="css"?"text-align":"textAlign"]=a}return i}function DA(e,n){const i={};for(const a of n.attributes)if(a.type==="mdxJsxExpressionAttribute")if(a.data&&a.data.estree&&e.evaluater){const s=a.data.estree.body[0];s.type;const c=s.expression;c.type;const f=c.properties[0];f.type,Object.assign(i,e.evaluater.evaluateExpression(f.argument))}else Xo(e,n.position);else{const o=a.name;let s;if(a.value&&typeof a.value=="object")if(a.value.data&&a.value.data.estree&&e.evaluater){const f=a.value.data.estree.body[0];f.type,s=e.evaluater.evaluateExpression(f.expression)}else Xo(e,n.position);else s=a.value===null?!0:a.value;i[o]=s}return i}function Wp(e,n){const i=[];let a=-1;const o=e.passKeys?new Map:xA;for(;++ao?0:o+n:n=n>o?o:n,i=i>0?i:0,a.length<1e4)c=Array.from(a),c.unshift(n,i),e.splice(...c);else for(i&&e.splice(n,i);s0?(ii(e,e.length,0,n),e):n}const Fy={}.hasOwnProperty;function v1(e){const n={};let i=-1;for(;++i13&&i<32||i>126&&i<160||i>55295&&i<57344||i>64975&&i<65008||(i&65535)===65535||(i&65535)===65534||i>1114111?"๏ฟฝ":String.fromCodePoint(i)}function Ci(e){return e.replace(/[\t\n\r ]+/g," ").replace(/^ | $/g,"").toLowerCase().toUpperCase()}const Dn=aa(/[A-Za-z]/),Tn=aa(/[\dA-Za-z]/),PA=aa(/[#-'*+\--9=?A-Z^-~]/);function tu(e){return e!==null&&(e<32||e===127)}const bp=aa(/\d/),FA=aa(/[\dA-Fa-f]/),GA=aa(/[!-/:-@[-`{-~]/);function je(e){return e!==null&&e<-2}function At(e){return e!==null&&(e<0||e===32)}function tt(e){return e===-2||e===-1||e===32}const yu=aa(new RegExp("\\p{P}|\\p{S}","u")),La=aa(/\s/);function aa(e){return n;function n(i){return i!==null&&i>-1&&e.test(String.fromCharCode(i))}}function Hl(e){const n=[];let i=-1,a=0,o=0;for(;++i55295&&s<57344){const f=e.charCodeAt(i+1);s<56320&&f>56319&&f<57344?(c=String.fromCharCode(s,f),o=1):c="๏ฟฝ"}else c=String.fromCharCode(s);c&&(n.push(e.slice(a,i),encodeURIComponent(c)),a=i+o+1,c=""),o&&(i+=o,o=0)}return n.join("")+e.slice(a)}function st(e,n,i,a){const o=a?a-1:Number.POSITIVE_INFINITY;let s=0;return c;function c(h){return tt(h)?(e.enter(i),f(h)):n(h)}function f(h){return tt(h)&&s++c))return;const H=n.events.length;let I=H,K,L;for(;I--;)if(n.events[I][0]==="exit"&&n.events[I][1].type==="chunkFlow"){if(K){L=n.events[I][1].end;break}K=!0}for(E(a),R=H;Rw;){const B=i[O];n.containerState=B[1],B[0].exit.call(n,e)}i.length=w}function k(){o.write([null]),s=void 0,o=void 0,n.containerState._closeFlow=void 0}}function ZA(e,n,i){return st(e,e.attempt(this.parser.constructs.document,n,i),"linePrefix",this.parser.constructs.disable.null.includes("codeIndented")?void 0:4)}function Ol(e){if(e===null||At(e)||La(e))return 1;if(yu(e))return 2}function xu(e,n,i){const a=[];let o=-1;for(;++o1&&e[i][1].end.offset-e[i][1].start.offset>1?2:1;const m={...e[a][1].end},y={...e[i][1].start};Vy(m,-h),Vy(y,h),c={type:h>1?"strongSequence":"emphasisSequence",start:m,end:{...e[a][1].end}},f={type:h>1?"strongSequence":"emphasisSequence",start:{...e[i][1].start},end:y},s={type:h>1?"strongText":"emphasisText",start:{...e[a][1].end},end:{...e[i][1].start}},o={type:h>1?"strong":"emphasis",start:{...c.start},end:{...f.end}},e[a][1].end={...c.start},e[i][1].start={...f.end},d=[],e[a][1].end.offset-e[a][1].start.offset&&(d=mi(d,[["enter",e[a][1],n],["exit",e[a][1],n]])),d=mi(d,[["enter",o,n],["enter",c,n],["exit",c,n],["enter",s,n]]),d=mi(d,xu(n.parser.constructs.insideSpan.null,e.slice(a+1,i),n)),d=mi(d,[["exit",s,n],["enter",f,n],["exit",f,n],["exit",o,n]]),e[i][1].end.offset-e[i][1].start.offset?(p=2,d=mi(d,[["enter",e[i][1],n],["exit",e[i][1],n]])):p=0,ii(e,a-1,i-a+3,d),i=a+d.length-p-2;break}}for(i=-1;++i0&&tt(R)?st(e,k,"linePrefix",s+1)(R):k(R)}function k(R){return R===null||je(R)?e.check(Yy,S,O)(R):(e.enter("codeFlowValue"),w(R))}function w(R){return R===null||je(R)?(e.exit("codeFlowValue"),k(R)):(e.consume(R),w)}function O(R){return e.exit("codeFenced"),n(R)}function B(R,H,I){let K=0;return L;function L($){return R.enter("lineEnding"),R.consume($),R.exit("lineEnding"),q}function q($){return R.enter("codeFencedFence"),tt($)?st(R,X,"linePrefix",a.parser.constructs.disable.null.includes("codeIndented")?void 0:4)($):X($)}function X($){return $===f?(R.enter("codeFencedFenceSequence"),Y($)):I($)}function Y($){return $===f?(K++,R.consume($),Y):K>=c?(R.exit("codeFencedFenceSequence"),tt($)?st(R,A,"whitespace")($):A($)):I($)}function A($){return $===null||je($)?(R.exit("codeFencedFence"),H($)):I($)}}}function sC(e,n,i){const a=this;return o;function o(c){return c===null?i(c):(e.enter("lineEnding"),e.consume(c),e.exit("lineEnding"),s)}function s(c){return a.parser.lazy[a.now().line]?i(c):n(c)}}const Xd={name:"codeIndented",tokenize:uC},cC={partial:!0,tokenize:fC};function uC(e,n,i){const a=this;return o;function o(d){return e.enter("codeIndented"),st(e,s,"linePrefix",5)(d)}function s(d){const p=a.events[a.events.length-1];return p&&p[1].type==="linePrefix"&&p[2].sliceSerialize(p[1],!0).length>=4?c(d):i(d)}function c(d){return d===null?h(d):je(d)?e.attempt(cC,c,h)(d):(e.enter("codeFlowValue"),f(d))}function f(d){return d===null||je(d)?(e.exit("codeFlowValue"),c(d)):(e.consume(d),f)}function h(d){return e.exit("codeIndented"),n(d)}}function fC(e,n,i){const a=this;return o;function o(c){return a.parser.lazy[a.now().line]?i(c):je(c)?(e.enter("lineEnding"),e.consume(c),e.exit("lineEnding"),o):st(e,s,"linePrefix",5)(c)}function s(c){const f=a.events[a.events.length-1];return f&&f[1].type==="linePrefix"&&f[2].sliceSerialize(f[1],!0).length>=4?n(c):je(c)?o(c):i(c)}}const dC={name:"codeText",previous:pC,resolve:hC,tokenize:mC};function hC(e){let n=e.length-4,i=3,a,o;if((e[i][1].type==="lineEnding"||e[i][1].type==="space")&&(e[n][1].type==="lineEnding"||e[n][1].type==="space")){for(a=i;++a=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-a+this.left.length,this.right.length-n+this.left.length).reverse():this.left.slice(n).concat(this.right.slice(this.right.length-a+this.left.length).reverse())}splice(n,i,a){const o=i||0;this.setCursor(Math.trunc(n));const s=this.right.splice(this.right.length-o,Number.POSITIVE_INFINITY);return a&&Io(this.left,a),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),Io(this.left,n)}unshift(n){this.setCursor(0),this.right.push(n)}unshiftMany(n){this.setCursor(0),Io(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(c):e.interrupt(a.parser.constructs.flow,i,n)(c)}}function k1(e,n,i,a,o,s,c,f,h){const d=h||Number.POSITIVE_INFINITY;let p=0;return m;function m(E){return E===60?(e.enter(a),e.enter(o),e.enter(s),e.consume(E),e.exit(s),y):E===null||E===32||E===41||tu(E)?i(E):(e.enter(a),e.enter(c),e.enter(f),e.enter("chunkString",{contentType:"string"}),S(E))}function y(E){return E===62?(e.enter(s),e.consume(E),e.exit(s),e.exit(o),e.exit(a),n):(e.enter(f),e.enter("chunkString",{contentType:"string"}),b(E))}function b(E){return E===62?(e.exit("chunkString"),e.exit(f),y(E)):E===null||E===60||je(E)?i(E):(e.consume(E),E===92?_:b)}function _(E){return E===60||E===62||E===92?(e.consume(E),b):b(E)}function S(E){return!p&&(E===null||E===41||At(E))?(e.exit("chunkString"),e.exit(f),e.exit(c),e.exit(a),n(E)):p999||b===null||b===91||b===93&&!h||b===94&&!f&&"_hiddenFootnoteSupport"in c.parser.constructs?i(b):b===93?(e.exit(s),e.enter(o),e.consume(b),e.exit(o),e.exit(a),n):je(b)?(e.enter("lineEnding"),e.consume(b),e.exit("lineEnding"),p):(e.enter("chunkString",{contentType:"string"}),m(b))}function m(b){return b===null||b===91||b===93||je(b)||f++>999?(e.exit("chunkString"),p(b)):(e.consume(b),h||(h=!tt(b)),b===92?y:m)}function y(b){return b===91||b===92||b===93?(e.consume(b),f++,m):m(b)}}function A1(e,n,i,a,o,s){let c;return f;function f(y){return y===34||y===39||y===40?(e.enter(a),e.enter(o),e.consume(y),e.exit(o),c=y===40?41:y,h):i(y)}function h(y){return y===c?(e.enter(o),e.consume(y),e.exit(o),e.exit(a),n):(e.enter(s),d(y))}function d(y){return y===c?(e.exit(s),h(c)):y===null?i(y):je(y)?(e.enter("lineEnding"),e.consume(y),e.exit("lineEnding"),st(e,d,"linePrefix")):(e.enter("chunkString",{contentType:"string"}),p(y))}function p(y){return y===c||y===null||je(y)?(e.exit("chunkString"),d(y)):(e.consume(y),y===92?m:p)}function m(y){return y===c||y===92?(e.consume(y),p):p(y)}}function Fo(e,n){let i;return a;function a(o){return je(o)?(e.enter("lineEnding"),e.consume(o),e.exit("lineEnding"),i=!0,a):tt(o)?st(e,a,i?"linePrefix":"lineSuffix")(o):n(o)}}const wC={name:"definition",tokenize:NC},SC={partial:!0,tokenize:kC};function NC(e,n,i){const a=this;let o;return s;function s(b){return e.enter("definition"),c(b)}function c(b){return T1.call(a,e,f,i,"definitionLabel","definitionLabelMarker","definitionLabelString")(b)}function f(b){return o=Ci(a.sliceSerialize(a.events[a.events.length-1][1]).slice(1,-1)),b===58?(e.enter("definitionMarker"),e.consume(b),e.exit("definitionMarker"),h):i(b)}function h(b){return At(b)?Fo(e,d)(b):d(b)}function d(b){return k1(e,p,i,"definitionDestination","definitionDestinationLiteral","definitionDestinationLiteralMarker","definitionDestinationRaw","definitionDestinationString")(b)}function p(b){return e.attempt(SC,m,m)(b)}function m(b){return tt(b)?st(e,y,"whitespace")(b):y(b)}function y(b){return b===null||je(b)?(e.exit("definition"),a.parser.defined.push(o),n(b)):i(b)}}function kC(e,n,i){return a;function a(f){return At(f)?Fo(e,o)(f):i(f)}function o(f){return A1(e,s,i,"definitionTitle","definitionTitleMarker","definitionTitleString")(f)}function s(f){return tt(f)?st(e,c,"whitespace")(f):c(f)}function c(f){return f===null||je(f)?n(f):i(f)}}const TC={name:"hardBreakEscape",tokenize:AC};function AC(e,n,i){return a;function a(s){return e.enter("hardBreakEscape"),e.consume(s),o}function o(s){return je(s)?(e.exit("hardBreakEscape"),n(s)):i(s)}}const CC={name:"headingAtx",resolve:MC,tokenize:OC};function MC(e,n){let i=e.length-2,a=3,o,s;return e[a][1].type==="whitespace"&&(a+=2),i-2>a&&e[i][1].type==="whitespace"&&(i-=2),e[i][1].type==="atxHeadingSequence"&&(a===i-1||i-4>a&&e[i-2][1].type==="whitespace")&&(i-=a+1===i?2:4),i>a&&(o={type:"atxHeadingText",start:e[a][1].start,end:e[i][1].end},s={type:"chunkText",start:e[a][1].start,end:e[i][1].end,contentType:"text"},ii(e,a,i-a+1,[["enter",o,n],["enter",s,n],["exit",s,n],["exit",o,n]])),e}function OC(e,n,i){let a=0;return o;function o(p){return e.enter("atxHeading"),s(p)}function s(p){return e.enter("atxHeadingSequence"),c(p)}function c(p){return p===35&&a++<6?(e.consume(p),c):p===null||At(p)?(e.exit("atxHeadingSequence"),f(p)):i(p)}function f(p){return p===35?(e.enter("atxHeadingSequence"),h(p)):p===null||je(p)?(e.exit("atxHeading"),n(p)):tt(p)?st(e,f,"whitespace")(p):(e.enter("atxHeadingText"),d(p))}function h(p){return p===35?(e.consume(p),h):(e.exit("atxHeadingSequence"),f(p))}function d(p){return p===null||p===35||At(p)?(e.exit("atxHeadingText"),f(p)):(e.consume(p),d)}}const RC=["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"],Ky=["pre","script","style","textarea"],DC={concrete:!0,name:"htmlFlow",resolveTo:IC,tokenize:jC},LC={partial:!0,tokenize:UC},zC={partial:!0,tokenize:BC};function IC(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 jC(e,n,i){const a=this;let o,s,c,f,h;return d;function d(D){return p(D)}function p(D){return e.enter("htmlFlow"),e.enter("htmlFlowData"),e.consume(D),m}function m(D){return D===33?(e.consume(D),y):D===47?(e.consume(D),s=!0,S):D===63?(e.consume(D),o=3,a.interrupt?n:C):Dn(D)?(e.consume(D),c=String.fromCharCode(D),N):i(D)}function y(D){return D===45?(e.consume(D),o=2,b):D===91?(e.consume(D),o=5,f=0,_):Dn(D)?(e.consume(D),o=4,a.interrupt?n:C):i(D)}function b(D){return D===45?(e.consume(D),a.interrupt?n:C):i(D)}function _(D){const F="CDATA[";return D===F.charCodeAt(f++)?(e.consume(D),f===F.length?a.interrupt?n:X:_):i(D)}function S(D){return Dn(D)?(e.consume(D),c=String.fromCharCode(D),N):i(D)}function N(D){if(D===null||D===47||D===62||At(D)){const F=D===47,U=c.toLowerCase();return!F&&!s&&Ky.includes(U)?(o=1,a.interrupt?n(D):X(D)):RC.includes(c.toLowerCase())?(o=6,F?(e.consume(D),E):a.interrupt?n(D):X(D)):(o=7,a.interrupt&&!a.parser.lazy[a.now().line]?i(D):s?k(D):w(D))}return D===45||Tn(D)?(e.consume(D),c+=String.fromCharCode(D),N):i(D)}function E(D){return D===62?(e.consume(D),a.interrupt?n:X):i(D)}function k(D){return tt(D)?(e.consume(D),k):L(D)}function w(D){return D===47?(e.consume(D),L):D===58||D===95||Dn(D)?(e.consume(D),O):tt(D)?(e.consume(D),w):L(D)}function O(D){return D===45||D===46||D===58||D===95||Tn(D)?(e.consume(D),O):B(D)}function B(D){return D===61?(e.consume(D),R):tt(D)?(e.consume(D),B):w(D)}function R(D){return D===null||D===60||D===61||D===62||D===96?i(D):D===34||D===39?(e.consume(D),h=D,H):tt(D)?(e.consume(D),R):I(D)}function H(D){return D===h?(e.consume(D),h=null,K):D===null||je(D)?i(D):(e.consume(D),H)}function I(D){return D===null||D===34||D===39||D===47||D===60||D===61||D===62||D===96||At(D)?B(D):(e.consume(D),I)}function K(D){return D===47||D===62||tt(D)?w(D):i(D)}function L(D){return D===62?(e.consume(D),q):i(D)}function q(D){return D===null||je(D)?X(D):tt(D)?(e.consume(D),q):i(D)}function X(D){return D===45&&o===2?(e.consume(D),M):D===60&&o===1?(e.consume(D),j):D===62&&o===4?(e.consume(D),z):D===63&&o===3?(e.consume(D),C):D===93&&o===5?(e.consume(D),Z):je(D)&&(o===6||o===7)?(e.exit("htmlFlowData"),e.check(LC,G,Y)(D)):D===null||je(D)?(e.exit("htmlFlowData"),Y(D)):(e.consume(D),X)}function Y(D){return e.check(zC,A,G)(D)}function A(D){return e.enter("lineEnding"),e.consume(D),e.exit("lineEnding"),$}function $(D){return D===null||je(D)?Y(D):(e.enter("htmlFlowData"),X(D))}function M(D){return D===45?(e.consume(D),C):X(D)}function j(D){return D===47?(e.consume(D),c="",V):X(D)}function V(D){if(D===62){const F=c.toLowerCase();return Ky.includes(F)?(e.consume(D),z):X(D)}return Dn(D)&&c.length<8?(e.consume(D),c+=String.fromCharCode(D),V):X(D)}function Z(D){return D===93?(e.consume(D),C):X(D)}function C(D){return D===62?(e.consume(D),z):D===45&&o===2?(e.consume(D),C):X(D)}function z(D){return D===null||je(D)?(e.exit("htmlFlowData"),G(D)):(e.consume(D),z)}function G(D){return e.exit("htmlFlow"),n(D)}}function BC(e,n,i){const a=this;return o;function o(c){return je(c)?(e.enter("lineEnding"),e.consume(c),e.exit("lineEnding"),s):i(c)}function s(c){return a.parser.lazy[a.now().line]?i(c):n(c)}}function UC(e,n,i){return a;function a(o){return e.enter("lineEnding"),e.consume(o),e.exit("lineEnding"),e.attempt(ss,n,i)}}const HC={name:"htmlText",tokenize:$C};function $C(e,n,i){const a=this;let o,s,c;return f;function f(C){return e.enter("htmlText"),e.enter("htmlTextData"),e.consume(C),h}function h(C){return C===33?(e.consume(C),d):C===47?(e.consume(C),B):C===63?(e.consume(C),w):Dn(C)?(e.consume(C),I):i(C)}function d(C){return C===45?(e.consume(C),p):C===91?(e.consume(C),s=0,_):Dn(C)?(e.consume(C),k):i(C)}function p(C){return C===45?(e.consume(C),b):i(C)}function m(C){return C===null?i(C):C===45?(e.consume(C),y):je(C)?(c=m,j(C)):(e.consume(C),m)}function y(C){return C===45?(e.consume(C),b):m(C)}function b(C){return C===62?M(C):C===45?y(C):m(C)}function _(C){const z="CDATA[";return C===z.charCodeAt(s++)?(e.consume(C),s===z.length?S:_):i(C)}function S(C){return C===null?i(C):C===93?(e.consume(C),N):je(C)?(c=S,j(C)):(e.consume(C),S)}function N(C){return C===93?(e.consume(C),E):S(C)}function E(C){return C===62?M(C):C===93?(e.consume(C),E):S(C)}function k(C){return C===null||C===62?M(C):je(C)?(c=k,j(C)):(e.consume(C),k)}function w(C){return C===null?i(C):C===63?(e.consume(C),O):je(C)?(c=w,j(C)):(e.consume(C),w)}function O(C){return C===62?M(C):w(C)}function B(C){return Dn(C)?(e.consume(C),R):i(C)}function R(C){return C===45||Tn(C)?(e.consume(C),R):H(C)}function H(C){return je(C)?(c=H,j(C)):tt(C)?(e.consume(C),H):M(C)}function I(C){return C===45||Tn(C)?(e.consume(C),I):C===47||C===62||At(C)?K(C):i(C)}function K(C){return C===47?(e.consume(C),M):C===58||C===95||Dn(C)?(e.consume(C),L):je(C)?(c=K,j(C)):tt(C)?(e.consume(C),K):M(C)}function L(C){return C===45||C===46||C===58||C===95||Tn(C)?(e.consume(C),L):q(C)}function q(C){return C===61?(e.consume(C),X):je(C)?(c=q,j(C)):tt(C)?(e.consume(C),q):K(C)}function X(C){return C===null||C===60||C===61||C===62||C===96?i(C):C===34||C===39?(e.consume(C),o=C,Y):je(C)?(c=X,j(C)):tt(C)?(e.consume(C),X):(e.consume(C),A)}function Y(C){return C===o?(e.consume(C),o=void 0,$):C===null?i(C):je(C)?(c=Y,j(C)):(e.consume(C),Y)}function A(C){return C===null||C===34||C===39||C===60||C===61||C===96?i(C):C===47||C===62||At(C)?K(C):(e.consume(C),A)}function $(C){return C===47||C===62||At(C)?K(C):i(C)}function M(C){return C===62?(e.consume(C),e.exit("htmlTextData"),e.exit("htmlText"),n):i(C)}function j(C){return e.exit("htmlTextData"),e.enter("lineEnding"),e.consume(C),e.exit("lineEnding"),V}function V(C){return tt(C)?st(e,Z,"linePrefix",a.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(C):Z(C)}function Z(C){return e.enter("htmlTextData"),c(C)}}const tm={name:"labelEnd",resolveAll:GC,resolveTo:VC,tokenize:YC},qC={tokenize:XC},PC={tokenize:KC},FC={tokenize:ZC};function GC(e){let n=-1;const i=[];for(;++n=3&&(d===null||je(d))?(e.exit("thematicBreak"),n(d)):i(d)}function h(d){return d===o?(e.consume(d),a++,h):(e.exit("thematicBreakSequence"),tt(d)?st(e,f,"whitespace")(d):f(d))}}const qn={continuation:{tokenize:lM},exit:sM,name:"list",tokenize:aM},iM={partial:!0,tokenize:cM},rM={partial:!0,tokenize:oM};function aM(e,n,i){const a=this,o=a.events[a.events.length-1];let s=o&&o[1].type==="linePrefix"?o[2].sliceSerialize(o[1],!0).length:0,c=0;return f;function f(b){const _=a.containerState.type||(b===42||b===43||b===45?"listUnordered":"listOrdered");if(_==="listUnordered"?!a.containerState.marker||b===a.containerState.marker:bp(b)){if(a.containerState.type||(a.containerState.type=_,e.enter(_,{_container:!0})),_==="listUnordered")return e.enter("listItemPrefix"),b===42||b===45?e.check(Vc,i,d)(b):d(b);if(!a.interrupt||b===49)return e.enter("listItemPrefix"),e.enter("listItemValue"),h(b)}return i(b)}function h(b){return bp(b)&&++c<10?(e.consume(b),h):(!a.interrupt||c<2)&&(a.containerState.marker?b===a.containerState.marker:b===41||b===46)?(e.exit("listItemValue"),d(b)):i(b)}function d(b){return e.enter("listItemMarker"),e.consume(b),e.exit("listItemMarker"),a.containerState.marker=a.containerState.marker||b,e.check(ss,a.interrupt?i:p,e.attempt(iM,y,m))}function p(b){return a.containerState.initialBlankLine=!0,s++,y(b)}function m(b){return tt(b)?(e.enter("listItemPrefixWhitespace"),e.consume(b),e.exit("listItemPrefixWhitespace"),y):i(b)}function y(b){return a.containerState.size=s+a.sliceSerialize(e.exit("listItemPrefix"),!0).length,n(b)}}function lM(e,n,i){const a=this;return a.containerState._closeFlow=void 0,e.check(ss,o,s);function o(f){return a.containerState.furtherBlankLines=a.containerState.furtherBlankLines||a.containerState.initialBlankLine,st(e,n,"listItemIndent",a.containerState.size+1)(f)}function s(f){return a.containerState.furtherBlankLines||!tt(f)?(a.containerState.furtherBlankLines=void 0,a.containerState.initialBlankLine=void 0,c(f)):(a.containerState.furtherBlankLines=void 0,a.containerState.initialBlankLine=void 0,e.attempt(rM,n,c)(f))}function c(f){return a.containerState._closeFlow=!0,a.interrupt=void 0,st(e,e.attempt(qn,n,i),"linePrefix",a.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(f)}}function oM(e,n,i){const a=this;return st(e,o,"listItemIndent",a.containerState.size+1);function o(s){const c=a.events[a.events.length-1];return c&&c[1].type==="listItemIndent"&&c[2].sliceSerialize(c[1],!0).length===a.containerState.size?n(s):i(s)}}function sM(e){e.exit(this.containerState.type)}function cM(e,n,i){const a=this;return st(e,o,"listItemPrefixWhitespace",a.parser.constructs.disable.null.includes("codeIndented")?void 0:5);function o(s){const c=a.events[a.events.length-1];return!tt(s)&&c&&c[1].type==="listItemPrefixWhitespace"?n(s):i(s)}}const Zy={name:"setextUnderline",resolveTo:uM,tokenize:fM};function uM(e,n){let i=e.length,a,o,s;for(;i--;)if(e[i][0]==="enter"){if(e[i][1].type==="content"){a=i;break}e[i][1].type==="paragraph"&&(o=i)}else e[i][1].type==="content"&&e.splice(i,1),!s&&e[i][1].type==="definition"&&(s=i);const c={type:"setextHeading",start:{...e[a][1].start},end:{...e[e.length-1][1].end}};return e[o][1].type="setextHeadingText",s?(e.splice(o,0,["enter",c,n]),e.splice(s+1,0,["exit",e[a][1],n]),e[a][1].end={...e[s][1].end}):e[a][1]=c,e.push(["exit",c,n]),e}function fM(e,n,i){const a=this;let o;return s;function s(d){let p=a.events.length,m;for(;p--;)if(a.events[p][1].type!=="lineEnding"&&a.events[p][1].type!=="linePrefix"&&a.events[p][1].type!=="content"){m=a.events[p][1].type==="paragraph";break}return!a.parser.lazy[a.now().line]&&(a.interrupt||m)?(e.enter("setextHeadingLine"),o=d,c(d)):i(d)}function c(d){return e.enter("setextHeadingLineSequence"),f(d)}function f(d){return d===o?(e.consume(d),f):(e.exit("setextHeadingLineSequence"),tt(d)?st(e,h,"lineSuffix")(d):h(d))}function h(d){return d===null||je(d)?(e.exit("setextHeadingLine"),n(d)):i(d)}}const dM={tokenize:hM};function hM(e){const n=this,i=e.attempt(ss,a,e.attempt(this.parser.constructs.flowInitial,o,st(e,e.attempt(this.parser.constructs.flow,o,e.attempt(yC,o)),"linePrefix")));return i;function a(s){if(s===null){e.consume(s);return}return e.enter("lineEndingBlank"),e.consume(s),e.exit("lineEndingBlank"),n.currentConstruct=void 0,i}function o(s){if(s===null){e.consume(s);return}return e.enter("lineEnding"),e.consume(s),e.exit("lineEnding"),n.currentConstruct=void 0,i}}const pM={resolveAll:M1()},mM=C1("string"),gM=C1("text");function C1(e){return{resolveAll:M1(e==="text"?bM:void 0),tokenize:n};function n(i){const a=this,o=this.parser.constructs[e],s=i.attempt(o,c,f);return c;function c(p){return d(p)?s(p):f(p)}function f(p){if(p===null){i.consume(p);return}return i.enter("data"),i.consume(p),h}function h(p){return d(p)?(i.exit("data"),s(p)):(i.consume(p),h)}function d(p){if(p===null)return!0;const m=o[p];let y=-1;if(m)for(;++y-1){const f=c[0];typeof f=="string"?c[0]=f.slice(a):c.shift()}s>0&&c.push(e[o].slice(0,s))}return c}function MM(e,n){let i=-1;const a=[];let o;for(;++i0){const sn=Me.tokenStack[Me.tokenStack.length-1];(sn[1]||Wy).call(Me,void 0,sn[0])}for(ye.position={start:Wr(ue.length>0?ue[0][1].start:{line:1,column:1,offset:0}),end:Wr(ue.length>0?ue[ue.length-2][1].end:{line:1,column:1,offset:0})},Ze=-1;++Ze0&&(a.className=["language-"+o[0]]);let s={type:"element",tagName:"code",properties:a,children:[{type:"text",value:i}]};return n.meta&&(s.data={meta:n.meta}),e.patch(n,s),s=e.applyData(n,s),s={type:"element",tagName:"pre",properties:{},children:[s]},e.patch(n,s),s}function FM(e,n){const i={type:"element",tagName:"del",properties:{},children:e.all(n)};return e.patch(n,i),e.applyData(n,i)}function GM(e,n){const i={type:"element",tagName:"em",properties:{},children:e.all(n)};return e.patch(n,i),e.applyData(n,i)}function VM(e,n){const i=typeof e.options.clobberPrefix=="string"?e.options.clobberPrefix:"user-content-",a=String(n.identifier).toUpperCase(),o=Hl(a.toLowerCase()),s=e.footnoteOrder.indexOf(a);let c,f=e.footnoteCounts.get(a);f===void 0?(f=0,e.footnoteOrder.push(a),c=e.footnoteOrder.length):c=s+1,f+=1,e.footnoteCounts.set(a,f);const h={type:"element",tagName:"a",properties:{href:"#"+i+"fn-"+o,id:i+"fnref-"+o+(f>1?"-"+f:""),dataFootnoteRef:!0,ariaDescribedBy:["footnote-label"]},children:[{type:"text",value:String(c)}]};e.patch(n,h);const d={type:"element",tagName:"sup",properties:{},children:[h]};return e.patch(n,d),e.applyData(n,d)}function YM(e,n){const i={type:"element",tagName:"h"+n.depth,properties:{},children:e.all(n)};return e.patch(n,i),e.applyData(n,i)}function XM(e,n){if(e.options.allowDangerousHtml){const i={type:"raw",value:n.value};return e.patch(n,i),e.applyData(n,i)}}function D1(e,n){const i=n.referenceType;let a="]";if(i==="collapsed"?a+="[]":i==="full"&&(a+="["+(n.label||n.identifier)+"]"),n.type==="imageReference")return[{type:"text",value:"!["+n.alt+a}];const o=e.all(n),s=o[0];s&&s.type==="text"?s.value="["+s.value:o.unshift({type:"text",value:"["});const c=o[o.length-1];return c&&c.type==="text"?c.value+=a:o.push({type:"text",value:a}),o}function KM(e,n){const i=String(n.identifier).toUpperCase(),a=e.definitionById.get(i);if(!a)return D1(e,n);const o={src:Hl(a.url||""),alt:n.alt};a.title!==null&&a.title!==void 0&&(o.title=a.title);const s={type:"element",tagName:"img",properties:o,children:[]};return e.patch(n,s),e.applyData(n,s)}function ZM(e,n){const i={src:Hl(n.url)};n.alt!==null&&n.alt!==void 0&&(i.alt=n.alt),n.title!==null&&n.title!==void 0&&(i.title=n.title);const a={type:"element",tagName:"img",properties:i,children:[]};return e.patch(n,a),e.applyData(n,a)}function QM(e,n){const i={type:"text",value:n.value.replace(/\r?\n|\r/g," ")};e.patch(n,i);const a={type:"element",tagName:"code",properties:{},children:[i]};return e.patch(n,a),e.applyData(n,a)}function WM(e,n){const i=String(n.identifier).toUpperCase(),a=e.definitionById.get(i);if(!a)return D1(e,n);const o={href:Hl(a.url||"")};a.title!==null&&a.title!==void 0&&(o.title=a.title);const s={type:"element",tagName:"a",properties:o,children:e.all(n)};return e.patch(n,s),e.applyData(n,s)}function JM(e,n){const i={href:Hl(n.url)};n.title!==null&&n.title!==void 0&&(i.title=n.title);const a={type:"element",tagName:"a",properties:i,children:e.all(n)};return e.patch(n,a),e.applyData(n,a)}function eO(e,n,i){const a=e.all(n),o=i?tO(i):L1(n),s={},c=[];if(typeof n.checked=="boolean"){const p=a[0];let m;p&&p.type==="element"&&p.tagName==="p"?m=p:(m={type:"element",tagName:"p",properties:{},children:[]},a.unshift(m)),m.children.length>0&&m.children.unshift({type:"text",value:" "}),m.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 nO(e,n){const i={},a=e.all(n);let o=-1;for(typeof n.start=="number"&&n.start!==1&&(i.start=n.start);++o0){const c={type:"element",tagName:"tbody",properties:{},children:e.wrap(i,!0)},f=Kp(n.children[1]),h=h1(n.children[n.children.length-1]);f&&h&&(c.position={start:f,end:h}),o.push(c)}const s={type:"element",tagName:"table",properties:{},children:e.wrap(o,!0)};return e.patch(n,s),e.applyData(n,s)}function oO(e,n,i){const a=i?i.children:void 0,s=(a?a.indexOf(n):1)===0?"th":"td",c=i&&i.type==="table"?i.align:void 0,f=c?c.length:n.children.length;let h=-1;const d=[];for(;++h0,!0),a[0]),o=a.index+a[0].length,a=i.exec(n);return s.push(tx(n.slice(o),o>0,!1)),s.join("")}function tx(e,n,i){let a=0,o=e.length;if(n){let s=e.codePointAt(a);for(;s===Jy||s===ex;)a++,s=e.codePointAt(a)}if(i){let s=e.codePointAt(o-1);for(;s===Jy||s===ex;)o--,s=e.codePointAt(o-1)}return o>a?e.slice(a,o):""}function uO(e,n){const i={type:"text",value:cO(String(n.value))};return e.patch(n,i),e.applyData(n,i)}function fO(e,n){const i={type:"element",tagName:"hr",properties:{},children:[]};return e.patch(n,i),e.applyData(n,i)}const dO={blockquote:$M,break:qM,code:PM,delete:FM,emphasis:GM,footnoteReference:VM,heading:YM,html:XM,imageReference:KM,image:ZM,inlineCode:QM,linkReference:WM,link:JM,listItem:eO,list:nO,paragraph:iO,root:rO,strong:aO,table:lO,tableCell:sO,tableRow:oO,text:uO,thematicBreak:fO,toml:Oc,yaml:Oc,definition:Oc,footnoteDefinition:Oc};function Oc(){}const z1=-1,vu=0,Go=1,nu=2,nm=3,im=4,rm=5,am=6,I1=7,j1=8,B1=typeof self=="object"?self:globalThis,nx=(e,n)=>{switch(e){case"Function":case"SharedWorker":case"Worker":case"eval":case"setInterval":case"setTimeout":throw new TypeError("unable to deserialize "+e)}return new B1[e](n)},hO=(e,n)=>{const i=(o,s)=>(e.set(s,o),o),a=o=>{if(e.has(o))return e.get(o);const[s,c]=n[o];switch(s){case vu:case z1:return i(c,o);case Go:{const f=i([],o);for(const h of c)f.push(a(h));return f}case nu:{const f=i({},o);for(const[h,d]of c)f[a(h)]=a(d);return f}case nm:return i(new Date(c),o);case im:{const{source:f,flags:h}=c;return i(new RegExp(f,h),o)}case rm:{const f=i(new Map,o);for(const[h,d]of c)f.set(a(h),a(d));return f}case am:{const f=i(new Set,o);for(const h of c)f.add(a(h));return f}case I1:{const{name:f,message:h}=c;return i(typeof B1[f]=="function"?nx(f,h):new Error(h),o)}case j1:return i(BigInt(c),o);case"BigInt":return i(Object(BigInt(c)),o);case"ArrayBuffer":return i(new Uint8Array(c).buffer,c);case"DataView":{const{buffer:f}=new Uint8Array(c);return i(new DataView(f),c)}}return i(nx(s,c),o)};return a},ix=e=>hO(new Map,e)(0),Aa="",{toString:pO}={},{keys:mO}=Object,jo=e=>{const n=typeof e;if(n!=="object"||!e)return[vu,n];const i=pO.call(e).slice(8,-1);switch(i){case"Array":return[Go,Aa];case"Object":return[nu,Aa];case"Date":return[nm,Aa];case"RegExp":return[im,Aa];case"Map":return[rm,Aa];case"Set":return[am,Aa];case"DataView":return[Go,i]}return i.includes("Array")?[Go,i]:e instanceof Error?[I1,e.name||"Error"]:[nu,i]},Rc=([e,n])=>e===vu&&(n==="function"||n==="symbol"),gO=(e,n,i,a)=>{const o=(c,f)=>{const h=a.push(c)-1;return i.set(f,h),h},s=c=>{if(i.has(c))return i.get(c);let[f,h]=jo(c);switch(f){case vu:{let p=c;switch(h){case"bigint":f=j1,p=c.toString();break;case"function":case"symbol":if(e)throw new TypeError("unable to serialize "+h);p=null;break;case"undefined":return o([z1],c)}return o([f,p],c)}case Go:{if(h){let y=c;return h==="DataView"?y=new Uint8Array(c.buffer):h==="ArrayBuffer"&&(y=new Uint8Array(c)),o([h,[...y]],c)}const p=[],m=o([f,p],c);for(const y of c)p.push(s(y));return m}case nu:{if(h)switch(h){case"BigInt":return o([h,c.toString()],c);case"Boolean":case"Number":case"String":return o([h,c.valueOf()],c)}if(n&&"toJSON"in c)return s(c.toJSON());const p=[],m=o([f,p],c);for(const y of mO(c))(e||!Rc(jo(c[y])))&&p.push([s(y),s(c[y])]);return m}case nm:return o([f,isNaN(c.getTime())?Aa:c.toISOString()],c);case im:{const{source:p,flags:m}=c;return o([f,{source:p,flags:m}],c)}case rm:{const p=[],m=o([f,p],c);for(const[y,b]of c)(e||!(Rc(jo(y))||Rc(jo(b))))&&p.push([s(y),s(b)]);return m}case am:{const p=[],m=o([f,p],c);for(const y of c)(e||!Rc(jo(y)))&&p.push(s(y));return m}}const{message:d}=c;return o([f,{name:h,message:d}],c)};return s},rx=(e,{json:n,lossy:i}={})=>{const a=[];return gO(!(n||i),!!n,new Map,a)(e),a},iu=typeof structuredClone=="function"?(e,n)=>n&&("json"in n||"lossy"in n)?ix(rx(e,n)):structuredClone(e):(e,n)=>ix(rx(e,n));function bO(e,n){const i=[{type:"text",value:"โ†ฉ"}];return n>1&&i.push({type:"element",tagName:"sup",properties:{},children:[{type:"text",value:String(n)}]}),i}function yO(e,n){return"Back to reference "+(e+1)+(n>1?"-"+n:"")}function xO(e){const n=typeof e.options.clobberPrefix=="string"?e.options.clobberPrefix:"user-content-",i=e.options.footnoteBackContent||bO,a=e.options.footnoteBackLabel||yO,o=e.options.footnoteLabel||"Footnotes",s=e.options.footnoteLabelTagName||"h2",c=e.options.footnoteLabelProperties||{className:["sr-only"]},f=[];let h=-1;for(;++h0&&_.push({type:"text",value:" "});let k=typeof i=="string"?i:i(h,b);typeof k=="string"&&(k={type:"text",value:k}),_.push({type:"element",tagName:"a",properties:{href:"#"+n+"fnref-"+y+(b>1?"-"+b:""),dataFootnoteBackref:"",ariaLabel:typeof a=="string"?a:a(h,b),className:["data-footnote-backref"]},children:Array.isArray(k)?k:[k]})}const N=p[p.length-1];if(N&&N.type==="element"&&N.tagName==="p"){const k=N.children[N.children.length-1];k&&k.type==="text"?k.value+=" ":N.children.push({type:"text",value:" "}),N.children.push(..._)}else p.push(..._);const E={type:"element",tagName:"li",properties:{id:n+"fn-"+y},children:e.wrap(p,!0)};e.patch(d,E),f.push(E)}if(f.length!==0)return{type:"element",tagName:"section",properties:{dataFootnotes:!0,className:["footnotes"]},children:[{type:"element",tagName:s,properties:{...iu(c),id:"footnote-label"},children:[{type:"text",value:o}]},{type:"text",value:` +`},{type:"element",tagName:"ol",properties:{},children:e.wrap(f,!0)},{type:"text",value:` +`}]}}const _u=(function(e){if(e==null)return wO;if(typeof e=="function")return Eu(e);if(typeof e=="object")return Array.isArray(e)?vO(e):_O(e);if(typeof e=="string")return EO(e);throw new Error("Expected function, string, or object as test")});function vO(e){const n=[];let i=-1;for(;++i":""))+")"})}return y;function y(){let b=U1,_,S,N;if((!n||s(h,d,p[p.length-1]||void 0))&&(b=TO(i(h,p)),b[0]===xp))return b;if("children"in h&&h.children){const E=h;if(E.children&&b[0]!==kO)for(S=(a?E.children.length:-1)+c,N=p.concat(E);S>-1&&S0&&i.push({type:"text",value:` +`}),i}function ax(e){let n=0,i=e.charCodeAt(n);for(;i===9||i===32;)n++,i=e.charCodeAt(n);return e.slice(n)}function lx(e,n){const i=CO(e,n),a=i.one(e,void 0),o=xO(i),s=Array.isArray(a)?{type:"root",children:a}:a||{type:"root",children:[]};return o&&s.children.push({type:"text",value:` +`},o),s}function LO(e,n){return e&&"run"in e?async function(i,a){const o=lx(i,{file:a,...n});await e.run(o,a)}:function(i,a){return lx(i,{file:a,...e||n})}}function ox(e){if(e)throw e}var Zd,sx;function zO(){if(sx)return Zd;sx=1;var e=Object.prototype.hasOwnProperty,n=Object.prototype.toString,i=Object.defineProperty,a=Object.getOwnPropertyDescriptor,o=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 p=e.call(d,"constructor"),m=d.constructor&&d.constructor.prototype&&e.call(d.constructor.prototype,"isPrototypeOf");if(d.constructor&&!p&&!m)return!1;var y;for(y in d);return typeof y>"u"||e.call(d,y)},c=function(d,p){i&&p.name==="__proto__"?i(d,p.name,{enumerable:!0,configurable:!0,value:p.newValue,writable:!0}):d[p.name]=p.newValue},f=function(d,p){if(p==="__proto__")if(e.call(d,p)){if(a)return a(d,p).value}else return;return d[p]};return Zd=function h(){var d,p,m,y,b,_,S=arguments[0],N=1,E=arguments.length,k=!1;for(typeof S=="boolean"&&(k=S,S=arguments[1]||{},N=2),(S==null||typeof S!="object"&&typeof S!="function")&&(S={});Nc.length;let h;f&&c.push(o);try{h=e.apply(this,c)}catch(d){const p=d;if(f&&i)throw p;return o(p)}f||(h&&h.then&&typeof h.then=="function"?h.then(s,o):h instanceof Error?o(h):s(h))}function o(c,...f){i||(i=!0,n(c,...f))}function s(c){o(null,c)}}const Hi={basename:UO,dirname:HO,extname:$O,join:qO,sep:"/"};function UO(e,n){if(n!==void 0&&typeof n!="string")throw new TypeError('"ext" argument must be a string');cs(e);let i=0,a=-1,o=e.length,s;if(n===void 0||n.length===0||n.length>e.length){for(;o--;)if(e.codePointAt(o)===47){if(s){i=o+1;break}}else a<0&&(s=!0,a=o+1);return a<0?"":e.slice(i,a)}if(n===e)return"";let c=-1,f=n.length-1;for(;o--;)if(e.codePointAt(o)===47){if(s){i=o+1;break}}else c<0&&(s=!0,c=o+1),f>-1&&(e.codePointAt(o)===n.codePointAt(f--)?f<0&&(a=o):(f=-1,a=c));return i===a?a=c:a<0&&(a=e.length),e.slice(i,a)}function HO(e){if(cs(e),e.length===0)return".";let n=-1,i=e.length,a;for(;--i;)if(e.codePointAt(i)===47){if(a){n=i;break}}else a||(a=!0);return n<0?e.codePointAt(0)===47?"/":".":n===1&&e.codePointAt(0)===47?"//":e.slice(0,n)}function $O(e){cs(e);let n=e.length,i=-1,a=0,o=-1,s=0,c;for(;n--;){const f=e.codePointAt(n);if(f===47){if(c){a=n+1;break}continue}i<0&&(c=!0,i=n+1),f===46?o<0?o=n:s!==1&&(s=1):o>-1&&(s=-1)}return o<0||i<0||s===0||s===1&&o===i-1&&o===a+1?"":e.slice(o,i)}function qO(...e){let n=-1,i;for(;++n0&&e.codePointAt(e.length-1)===47&&(i+="/"),n?"/"+i:i}function FO(e,n){let i="",a=0,o=-1,s=0,c=-1,f,h;for(;++c<=e.length;){if(c2){if(h=i.lastIndexOf("/"),h!==i.length-1){h<0?(i="",a=0):(i=i.slice(0,h),a=i.length-1-i.lastIndexOf("/")),o=c,s=0;continue}}else if(i.length>0){i="",a=0,o=c,s=0;continue}}n&&(i=i.length>0?i+"/..":"..",a=2)}else i.length>0?i+="/"+e.slice(o+1,c):i=e.slice(o+1,c),a=c-o-1;o=c,s=0}else f===46&&s>-1?s++:s=-1}return i}function cs(e){if(typeof e!="string")throw new TypeError("Path must be a string. Received "+JSON.stringify(e))}const GO={cwd:VO};function VO(){return"/"}function Ep(e){return!!(e!==null&&typeof e=="object"&&"href"in e&&e.href&&"protocol"in e&&e.protocol&&e.auth===void 0)}function YO(e){if(typeof e=="string")e=new URL(e);else if(!Ep(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 XO(e)}function XO(e){if(e.hostname!==""){const a=new TypeError('File URL host must be "localhost" or empty on darwin');throw a.code="ERR_INVALID_FILE_URL_HOST",a}const n=e.pathname;let i=-1;for(;++i0){let[b,..._]=p;const S=a[y][1];_p(S)&&_p(b)&&(b=Qd(!0,S,b)),a[y]=[d,b,..._]}}}}const WO=new om().freeze();function th(e,n){if(typeof n!="function")throw new TypeError("Cannot `"+e+"` without `parser`")}function nh(e,n){if(typeof n!="function")throw new TypeError("Cannot `"+e+"` without `compiler`")}function ih(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 ux(e){if(!_p(e)||typeof e.type!="string")throw new TypeError("Expected node, got `"+e+"`")}function fx(e,n,i){if(!i)throw new Error("`"+e+"` finished async. Use `"+n+"` instead")}function Dc(e){return JO(e)?e:new $1(e)}function JO(e){return!!(e&&typeof e=="object"&&"message"in e&&"messages"in e)}function eR(e){return typeof e=="string"||tR(e)}function tR(e){return!!(e&&typeof e=="object"&&"byteLength"in e&&"byteOffset"in e)}const nR="https://github.com/remarkjs/react-markdown/blob/main/changelog.md",dx=[],hx={allowDangerousHtml:!0},iR=/^(https?|ircs?|mailto|xmpp)$/i,rR=[{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 sm(e){const n=aR(e),i=lR(e);return oR(n.runSync(n.parse(i),i),e)}function aR(e){const n=e.rehypePlugins||dx,i=e.remarkPlugins||dx,a=e.remarkRehypeOptions?{...e.remarkRehypeOptions,...hx}:hx;return WO().use(HM).use(i).use(LO,a).use(n)}function lR(e){const n=e.children||"",i=new $1;return typeof n=="string"&&(i.value=n),i}function oR(e,n){const i=n.allowedElements,a=n.allowElement,o=n.components,s=n.disallowedElements,c=n.skipHtml,f=n.unwrapDisallowed,h=n.urlTransform||sR;for(const p of rR)Object.hasOwn(n,p.from)&&(""+p.from+(p.to?"use `"+p.to+"` instead":"remove it")+nR+p.id,void 0);return lm(e,d),wA(e,{Fragment:v.Fragment,components:o,ignoreInvalidStyle:!0,jsx:v.jsx,jsxs:v.jsxs,passKeys:!0,passNode:!0});function d(p,m,y){if(p.type==="raw"&&y&&typeof m=="number")return c?y.children.splice(m,1):y.children[m]={type:"text",value:p.value},m;if(p.type==="element"){let b;for(b in Yd)if(Object.hasOwn(Yd,b)&&Object.hasOwn(p.properties,b)){const _=p.properties[b],S=Yd[b];(S===null||S.includes(p.tagName))&&(p.properties[b]=h(String(_||""),b,p))}}if(p.type==="element"){let b=i?!i.includes(p.tagName):s?s.includes(p.tagName):!1;if(!b&&a&&typeof m=="number"&&(b=!a(p,m,y)),b&&y&&typeof m=="number")return f&&p.children?y.children.splice(m,1,...p.children):y.children.splice(m,1),m}}}function sR(e){const n=e.indexOf(":"),i=e.indexOf("?"),a=e.indexOf("#"),o=e.indexOf("/");return n===-1||o!==-1&&n>o||i!==-1&&n>i||a!==-1&&n>a||iR.test(e.slice(0,n))?e:""}function px(e,n){const i=String(e);if(typeof n!="string")throw new TypeError("Expected character");let a=0,o=i.indexOf(n);for(;o!==-1;)a++,o=i.indexOf(n,o+n.length);return a}function cR(e){if(typeof e!="string")throw new TypeError("Expected a string");return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}function uR(e,n,i){const o=_u((i||{}).ignore||[]),s=fR(n);let c=-1;for(;++c0?{type:"text",value:R}:void 0),R===!1?y.lastIndex=O+1:(_!==O&&k.push({type:"text",value:d.value.slice(_,O)}),Array.isArray(R)?k.push(...R):R&&k.push(R),_=O+w[0].length,E=!0),!y.global)break;w=y.exec(d.value)}return E?(_?\]}]+$/.exec(e);if(!n)return[e,void 0];e=e.slice(0,n.index);let i=n[0],a=i.indexOf(")");const o=px(e,"(");let s=px(e,")");for(;a!==-1&&o>s;)e+=i.slice(0,a+1),i=i.slice(a+1),a=i.indexOf(")"),s++;return[e,i]}function q1(e,n){const i=e.input.charCodeAt(e.index-1);return(e.index===0||La(i)||yu(i))&&(!n||i!==47)}P1.peek=LR;function kR(){this.buffer()}function TR(e){this.enter({type:"footnoteReference",identifier:"",label:""},e)}function AR(){this.buffer()}function CR(e){this.enter({type:"footnoteDefinition",identifier:"",label:"",children:[]},e)}function MR(e){const n=this.resume(),i=this.stack[this.stack.length-1];i.type,i.identifier=Ci(this.sliceSerialize(e)).toLowerCase(),i.label=n}function OR(e){this.exit(e)}function RR(e){const n=this.resume(),i=this.stack[this.stack.length-1];i.type,i.identifier=Ci(this.sliceSerialize(e)).toLowerCase(),i.label=n}function DR(e){this.exit(e)}function LR(){return"["}function P1(e,n,i,a){const o=i.createTracker(a);let s=o.move("[^");const c=i.enter("footnoteReference"),f=i.enter("reference");return s+=o.move(i.safe(i.associationId(e),{after:"]",before:s})),f(),c(),s+=o.move("]"),s}function zR(){return{enter:{gfmFootnoteCallString:kR,gfmFootnoteCall:TR,gfmFootnoteDefinitionLabelString:AR,gfmFootnoteDefinition:CR},exit:{gfmFootnoteCallString:MR,gfmFootnoteCall:OR,gfmFootnoteDefinitionLabelString:RR,gfmFootnoteDefinition:DR}}}function IR(e){let n=!1;return e&&e.firstLineBlank&&(n=!0),{handlers:{footnoteDefinition:i,footnoteReference:P1},unsafe:[{character:"[",inConstruct:["label","phrasing","reference"]}]};function i(a,o,s,c){const f=s.createTracker(c);let h=f.move("[^");const d=s.enter("footnoteDefinition"),p=s.enter("label");return h+=f.move(s.safe(s.associationId(a),{before:h,after:"]"})),p(),h+=f.move("]:"),a.children&&a.children.length>0&&(f.shift(4),h+=f.move((n?` +`:" ")+s.indentLines(s.containerFlow(a,f.current()),n?F1:jR))),d(),h}}function jR(e,n,i){return n===0?e:F1(e,n,i)}function F1(e,n,i){return(i?"":" ")+e}const BR=["autolink","destinationLiteral","destinationRaw","reference","titleQuote","titleApostrophe"];G1.peek=PR;function UR(){return{canContainEols:["delete"],enter:{strikethrough:$R},exit:{strikethrough:qR}}}function HR(){return{unsafe:[{character:"~",inConstruct:"phrasing",notInConstruct:BR}],handlers:{delete:G1}}}function $R(e){this.enter({type:"delete",children:[]},e)}function qR(e){this.exit(e)}function G1(e,n,i,a){const o=i.createTracker(a),s=i.enter("strikethrough");let c=o.move("~~");return c+=i.containerPhrasing(e,{...o.current(),before:c,after:"~"}),c+=o.move("~~"),s(),c}function PR(){return"~"}function FR(e){return e.length}function GR(e,n){const i=n||{},a=(i.align||[]).concat(),o=i.stringLength||FR,s=[],c=[],f=[],h=[];let d=0,p=-1;for(;++pd&&(d=e[p].length);++Eh[E])&&(h[E]=w)}S.push(k)}c[p]=S,f[p]=N}let m=-1;if(typeof a=="object"&&"length"in a)for(;++mh[m]&&(h[m]=k),b[m]=k),y[m]=w}c.splice(1,0,y),f.splice(1,0,b),p=-1;const _=[];for(;++p "),s.shift(2);const c=i.indentLines(i.containerFlow(e,s.current()),XR);return o(),c}function XR(e,n,i){return">"+(i?"":" ")+e}function KR(e,n){return gx(e,n.inConstruct,!0)&&!gx(e,n.notInConstruct,!1)}function gx(e,n,i){if(typeof n=="string"&&(n=[n]),!n||n.length===0)return i;let a=-1;for(;++ac&&(c=s):s=1,o=a+n.length,a=i.indexOf(n,o);return c}function QR(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 WR(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 JR(e,n,i,a){const o=WR(i),s=e.value||"",c=o==="`"?"GraveAccent":"Tilde";if(QR(e,i)){const m=i.enter("codeIndented"),y=i.indentLines(s,eD);return m(),y}const f=i.createTracker(a),h=o.repeat(Math.max(ZR(s,o)+1,3)),d=i.enter("codeFenced");let p=f.move(h);if(e.lang){const m=i.enter(`codeFencedLang${c}`);p+=f.move(i.safe(e.lang,{before:p,after:" ",encode:["`"],...f.current()})),m()}if(e.lang&&e.meta){const m=i.enter(`codeFencedMeta${c}`);p+=f.move(" "),p+=f.move(i.safe(e.meta,{before:p,after:` +`,encode:["`"],...f.current()})),m()}return p+=f.move(` +`),s&&(p+=f.move(s+` +`)),p+=f.move(h),d(),p}function eD(e,n,i){return(i?"":" ")+e}function cm(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 tD(e,n,i,a){const o=cm(i),s=o==='"'?"Quote":"Apostrophe",c=i.enter("definition");let f=i.enter("label");const h=i.createTracker(a);let d=h.move("[");return d+=h.move(i.safe(i.associationId(e),{before:d,after:"]",...h.current()})),d+=h.move("]: "),f(),!e.url||/[\0- \u007F]/.test(e.url)?(f=i.enter("destinationLiteral"),d+=h.move("<"),d+=h.move(i.safe(e.url,{before:d,after:">",...h.current()})),d+=h.move(">")):(f=i.enter("destinationRaw"),d+=h.move(i.safe(e.url,{before:d,after:e.title?" ":` +`,...h.current()}))),f(),e.title&&(f=i.enter(`title${s}`),d+=h.move(" "+o),d+=h.move(i.safe(e.title,{before:d,after:o,...h.current()})),d+=h.move(o),f()),c(),d}function nD(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 Ko(e){return"&#x"+e.toString(16).toUpperCase()+";"}function ru(e,n,i){const a=Ol(e),o=Ol(n);return a===void 0?o===void 0?i==="_"?{inside:!0,outside:!0}:{inside:!1,outside:!1}:o===1?{inside:!0,outside:!0}:{inside:!1,outside:!0}:a===1?o===void 0?{inside:!1,outside:!1}:o===1?{inside:!0,outside:!0}:{inside:!1,outside:!1}:o===void 0?{inside:!1,outside:!1}:o===1?{inside:!0,outside:!1}:{inside:!1,outside:!1}}V1.peek=iD;function V1(e,n,i,a){const o=nD(i),s=i.enter("emphasis"),c=i.createTracker(a),f=c.move(o);let h=c.move(i.containerPhrasing(e,{after:o,before:f,...c.current()}));const d=h.charCodeAt(0),p=ru(a.before.charCodeAt(a.before.length-1),d,o);p.inside&&(h=Ko(d)+h.slice(1));const m=h.charCodeAt(h.length-1),y=ru(a.after.charCodeAt(0),m,o);y.inside&&(h=h.slice(0,-1)+Ko(m));const b=c.move(o);return s(),i.attentionEncodeSurroundingInfo={after:y.outside,before:p.outside},f+h+b}function iD(e,n,i){return i.options.emphasis||"*"}function rD(e,n){let i=!1;return lm(e,function(a){if("value"in a&&/\r?\n|\r/.test(a.value)||a.type==="break")return i=!0,xp}),!!((!e.depth||e.depth<3)&&Jp(e)&&(n.options.setext||i))}function aD(e,n,i,a){const o=Math.max(Math.min(6,e.depth||1),1),s=i.createTracker(a);if(rD(e,i)){const p=i.enter("headingSetext"),m=i.enter("phrasing"),y=i.containerPhrasing(e,{...s.current(),before:` +`,after:` +`});return m(),p(),y+` +`+(o===1?"=":"-").repeat(y.length-(Math.max(y.lastIndexOf("\r"),y.lastIndexOf(` +`))+1))}const c="#".repeat(o),f=i.enter("headingAtx"),h=i.enter("phrasing");s.move(c+" ");let d=i.containerPhrasing(e,{before:"# ",after:` +`,...s.current()});return/^[\t ]/.test(d)&&(d=Ko(d.charCodeAt(0))+d.slice(1)),d=d?c+" "+d:c,i.options.closeAtx&&(d+=" "+c),h(),f(),d}Y1.peek=lD;function Y1(e){return e.value||""}function lD(){return"<"}X1.peek=oD;function X1(e,n,i,a){const o=cm(i),s=o==='"'?"Quote":"Apostrophe",c=i.enter("image");let f=i.enter("label");const h=i.createTracker(a);let d=h.move("![");return d+=h.move(i.safe(e.alt,{before:d,after:"]",...h.current()})),d+=h.move("]("),f(),!e.url&&e.title||/[\0- \u007F]/.test(e.url)?(f=i.enter("destinationLiteral"),d+=h.move("<"),d+=h.move(i.safe(e.url,{before:d,after:">",...h.current()})),d+=h.move(">")):(f=i.enter("destinationRaw"),d+=h.move(i.safe(e.url,{before:d,after:e.title?" ":")",...h.current()}))),f(),e.title&&(f=i.enter(`title${s}`),d+=h.move(" "+o),d+=h.move(i.safe(e.title,{before:d,after:o,...h.current()})),d+=h.move(o),f()),d+=h.move(")"),c(),d}function oD(){return"!"}K1.peek=sD;function K1(e,n,i,a){const o=e.referenceType,s=i.enter("imageReference");let c=i.enter("label");const f=i.createTracker(a);let h=f.move("![");const d=i.safe(e.alt,{before:h,after:"]",...f.current()});h+=f.move(d+"]["),c();const p=i.stack;i.stack=[],c=i.enter("reference");const m=i.safe(i.associationId(e),{before:h,after:"]",...f.current()});return c(),i.stack=p,s(),o==="full"||!d||d!==m?h+=f.move(m+"]"):o==="shortcut"?h=h.slice(0,-1):h+=f.move("]"),h}function sD(){return"!"}Z1.peek=cD;function Z1(e,n,i){let a=e.value||"",o="`",s=-1;for(;new RegExp("(^|[^`])"+o+"([^`]|$)").test(a);)o+="`";for(/[^ \r\n]/.test(a)&&(/^[ \r\n]/.test(a)&&/[ \r\n]$/.test(a)||/^`|`$/.test(a))&&(a=" "+a+" ");++s\u007F]/.test(e.url))}W1.peek=uD;function W1(e,n,i,a){const o=cm(i),s=o==='"'?"Quote":"Apostrophe",c=i.createTracker(a);let f,h;if(Q1(e,i)){const p=i.stack;i.stack=[],f=i.enter("autolink");let m=c.move("<");return m+=c.move(i.containerPhrasing(e,{before:m,after:">",...c.current()})),m+=c.move(">"),f(),i.stack=p,m}f=i.enter("link"),h=i.enter("label");let d=c.move("[");return d+=c.move(i.containerPhrasing(e,{before:d,after:"](",...c.current()})),d+=c.move("]("),h(),!e.url&&e.title||/[\0- \u007F]/.test(e.url)?(h=i.enter("destinationLiteral"),d+=c.move("<"),d+=c.move(i.safe(e.url,{before:d,after:">",...c.current()})),d+=c.move(">")):(h=i.enter("destinationRaw"),d+=c.move(i.safe(e.url,{before:d,after:e.title?" ":")",...c.current()}))),h(),e.title&&(h=i.enter(`title${s}`),d+=c.move(" "+o),d+=c.move(i.safe(e.title,{before:d,after:o,...c.current()})),d+=c.move(o),h()),d+=c.move(")"),f(),d}function uD(e,n,i){return Q1(e,i)?"<":"["}J1.peek=fD;function J1(e,n,i,a){const o=e.referenceType,s=i.enter("linkReference");let c=i.enter("label");const f=i.createTracker(a);let h=f.move("[");const d=i.containerPhrasing(e,{before:h,after:"]",...f.current()});h+=f.move(d+"]["),c();const p=i.stack;i.stack=[],c=i.enter("reference");const m=i.safe(i.associationId(e),{before:h,after:"]",...f.current()});return c(),i.stack=p,s(),o==="full"||!d||d!==m?h+=f.move(m+"]"):o==="shortcut"?h=h.slice(0,-1):h+=f.move("]"),h}function fD(){return"["}function um(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 dD(e){const n=um(e),i=e.options.bulletOther;if(!i)return n==="*"?"-":"*";if(i!=="*"&&i!=="+"&&i!=="-")throw new Error("Cannot serialize items with `"+i+"` for `options.bulletOther`, expected `*`, `+`, or `-`");if(i===n)throw new Error("Expected `bullet` (`"+n+"`) and `bulletOther` (`"+i+"`) to be different");return i}function hD(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 eE(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 pD(e,n,i,a){const o=i.enter("list"),s=i.bulletCurrent;let c=e.ordered?hD(i):um(i);const f=e.ordered?c==="."?")":".":dD(i);let h=n&&i.bulletLastUsed?c===i.bulletLastUsed:!1;if(!e.ordered){const p=e.children?e.children[0]:void 0;if((c==="*"||c==="-")&&p&&(!p.children||!p.children[0])&&i.stack[i.stack.length-1]==="list"&&i.stack[i.stack.length-2]==="listItem"&&i.stack[i.stack.length-3]==="list"&&i.stack[i.stack.length-4]==="listItem"&&i.indexStack[i.indexStack.length-1]===0&&i.indexStack[i.indexStack.length-2]===0&&i.indexStack[i.indexStack.length-3]===0&&(h=!0),eE(i)===c&&p){let m=-1;for(;++m-1?n.start:1)+(i.options.incrementListMarker===!1?0:n.children.indexOf(e))+s);let c=s.length+1;(o==="tab"||o==="mixed"&&(n&&n.type==="list"&&n.spread||e.spread))&&(c=Math.ceil(c/4)*4);const f=i.createTracker(a);f.move(s+" ".repeat(c-s.length)),f.shift(c);const h=i.enter("listItem"),d=i.indentLines(i.containerFlow(e,f.current()),p);return h(),d;function p(m,y,b){return y?(b?"":" ".repeat(c))+m:(b?s:s+" ".repeat(c-s.length))+m}}function bD(e,n,i,a){const o=i.enter("paragraph"),s=i.enter("phrasing"),c=i.containerPhrasing(e,a);return s(),o(),c}const yD=_u(["break","delete","emphasis","footnote","footnoteReference","image","imageReference","inlineCode","inlineMath","link","linkReference","mdxJsxTextElement","mdxTextExpression","strong","text","textDirective"]);function xD(e,n,i,a){return(e.children.some(function(c){return yD(c)})?i.containerPhrasing:i.containerFlow).call(i,e,a)}function vD(e){const n=e.options.strong||"*";if(n!=="*"&&n!=="_")throw new Error("Cannot serialize strong with `"+n+"` for `options.strong`, expected `*`, or `_`");return n}tE.peek=_D;function tE(e,n,i,a){const o=vD(i),s=i.enter("strong"),c=i.createTracker(a),f=c.move(o+o);let h=c.move(i.containerPhrasing(e,{after:o,before:f,...c.current()}));const d=h.charCodeAt(0),p=ru(a.before.charCodeAt(a.before.length-1),d,o);p.inside&&(h=Ko(d)+h.slice(1));const m=h.charCodeAt(h.length-1),y=ru(a.after.charCodeAt(0),m,o);y.inside&&(h=h.slice(0,-1)+Ko(m));const b=c.move(o+o);return s(),i.attentionEncodeSurroundingInfo={after:y.outside,before:p.outside},f+h+b}function _D(e,n,i){return i.options.strong||"*"}function ED(e,n,i,a){return i.safe(e.value,a)}function wD(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 SD(e,n,i){const a=(eE(i)+(i.options.ruleSpaces?" ":"")).repeat(wD(i));return i.options.ruleSpaces?a.slice(0,-1):a}const nE={blockquote:YR,break:bx,code:JR,definition:tD,emphasis:V1,hardBreak:bx,heading:aD,html:Y1,image:X1,imageReference:K1,inlineCode:Z1,link:W1,linkReference:J1,list:pD,listItem:gD,paragraph:bD,root:xD,strong:tE,text:ED,thematicBreak:SD};function ND(){return{enter:{table:kD,tableData:yx,tableHeader:yx,tableRow:AD},exit:{codeText:CD,table:TD,tableData:oh,tableHeader:oh,tableRow:oh}}}function kD(e){const n=e._align;this.enter({type:"table",align:n.map(function(i){return i==="none"?null:i}),children:[]},e),this.data.inTable=!0}function TD(e){this.exit(e),this.data.inTable=void 0}function AD(e){this.enter({type:"tableRow",children:[]},e)}function oh(e){this.exit(e)}function yx(e){this.enter({type:"tableCell",children:[]},e)}function CD(e){let n=this.resume();this.data.inTable&&(n=n.replace(/\\([\\|])/g,MD));const i=this.stack[this.stack.length-1];i.type,i.value=n,this.exit(e)}function MD(e,n){return n==="|"?n:e}function OD(e){const n=e||{},i=n.tableCellPadding,a=n.tablePipeAlign,o=n.stringLength,s=i?" ":"|";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:y,table:c,tableCell:h,tableRow:f}};function c(b,_,S,N){return d(p(b,S,N),b.align)}function f(b,_,S,N){const E=m(b,S,N),k=d([E]);return k.slice(0,k.indexOf(` +`))}function h(b,_,S,N){const E=S.enter("tableCell"),k=S.enter("phrasing"),w=S.containerPhrasing(b,{...N,before:s,after:s});return k(),E(),w}function d(b,_){return GR(b,{align:_,alignDelimiters:a,padding:i,stringLength:o})}function p(b,_,S){const N=b.children;let E=-1;const k=[],w=_.enter("table");for(;++E0&&!i&&(e[e.length-1][1]._gfmAutolinkLiteralWalkedInto=!0),i}const KD={tokenize:i5,partial:!0};function ZD(){return{document:{91:{name:"gfmFootnoteDefinition",tokenize:e5,continuation:{tokenize:t5},exit:n5}},text:{91:{name:"gfmFootnoteCall",tokenize:JD},93:{name:"gfmPotentialFootnoteCall",add:"after",tokenize:QD,resolveTo:WD}}}}function QD(e,n,i){const a=this;let o=a.events.length;const s=a.parser.gfmFootnotes||(a.parser.gfmFootnotes=[]);let c;for(;o--;){const h=a.events[o][1];if(h.type==="labelImage"){c=h;break}if(h.type==="gfmFootnoteCall"||h.type==="labelLink"||h.type==="label"||h.type==="image"||h.type==="link")break}return f;function f(h){if(!c||!c._balanced)return i(h);const d=Ci(a.sliceSerialize({start:c.end,end:a.now()}));return d.codePointAt(0)!==94||!s.includes(d.slice(1))?i(h):(e.enter("gfmFootnoteCallLabelMarker"),e.consume(h),e.exit("gfmFootnoteCallLabelMarker"),n(h))}}function WD(e,n){let i=e.length;for(;i--;)if(e[i][1].type==="labelImage"&&e[i][0]==="enter"){e[i][1];break}e[i+1][1].type="data",e[i+3][1].type="gfmFootnoteCallLabelMarker";const a={type:"gfmFootnoteCall",start:Object.assign({},e[i+3][1].start),end:Object.assign({},e[e.length-1][1].end)},o={type:"gfmFootnoteCallMarker",start:Object.assign({},e[i+3][1].end),end:Object.assign({},e[i+3][1].end)};o.end.column++,o.end.offset++,o.end._bufferIndex++;const s={type:"gfmFootnoteCallString",start:Object.assign({},o.end),end:Object.assign({},e[e.length-1][1].start)},c={type:"chunkString",contentType:"string",start:Object.assign({},s.start),end:Object.assign({},s.end)},f=[e[i+1],e[i+2],["enter",a,n],e[i+3],e[i+4],["enter",o,n],["exit",o,n],["enter",s,n],["enter",c,n],["exit",c,n],["exit",s,n],e[e.length-2],e[e.length-1],["exit",a,n]];return e.splice(i,e.length-i+1,...f),e}function JD(e,n,i){const a=this,o=a.parser.gfmFootnotes||(a.parser.gfmFootnotes=[]);let s=0,c;return f;function f(m){return e.enter("gfmFootnoteCall"),e.enter("gfmFootnoteCallLabelMarker"),e.consume(m),e.exit("gfmFootnoteCallLabelMarker"),h}function h(m){return m!==94?i(m):(e.enter("gfmFootnoteCallMarker"),e.consume(m),e.exit("gfmFootnoteCallMarker"),e.enter("gfmFootnoteCallString"),e.enter("chunkString").contentType="string",d)}function d(m){if(s>999||m===93&&!c||m===null||m===91||At(m))return i(m);if(m===93){e.exit("chunkString");const y=e.exit("gfmFootnoteCallString");return o.includes(Ci(a.sliceSerialize(y)))?(e.enter("gfmFootnoteCallLabelMarker"),e.consume(m),e.exit("gfmFootnoteCallLabelMarker"),e.exit("gfmFootnoteCall"),n):i(m)}return At(m)||(c=!0),s++,e.consume(m),m===92?p:d}function p(m){return m===91||m===92||m===93?(e.consume(m),s++,d):d(m)}}function e5(e,n,i){const a=this,o=a.parser.gfmFootnotes||(a.parser.gfmFootnotes=[]);let s,c=0,f;return h;function h(_){return e.enter("gfmFootnoteDefinition")._container=!0,e.enter("gfmFootnoteDefinitionLabel"),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(_),e.exit("gfmFootnoteDefinitionLabelMarker"),d}function d(_){return _===94?(e.enter("gfmFootnoteDefinitionMarker"),e.consume(_),e.exit("gfmFootnoteDefinitionMarker"),e.enter("gfmFootnoteDefinitionLabelString"),e.enter("chunkString").contentType="string",p):i(_)}function p(_){if(c>999||_===93&&!f||_===null||_===91||At(_))return i(_);if(_===93){e.exit("chunkString");const S=e.exit("gfmFootnoteDefinitionLabelString");return s=Ci(a.sliceSerialize(S)),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(_),e.exit("gfmFootnoteDefinitionLabelMarker"),e.exit("gfmFootnoteDefinitionLabel"),y}return At(_)||(f=!0),c++,e.consume(_),_===92?m:p}function m(_){return _===91||_===92||_===93?(e.consume(_),c++,p):p(_)}function y(_){return _===58?(e.enter("definitionMarker"),e.consume(_),e.exit("definitionMarker"),o.includes(s)||o.push(s),st(e,b,"gfmFootnoteDefinitionWhitespace")):i(_)}function b(_){return n(_)}}function t5(e,n,i){return e.check(ss,n,e.attempt(KD,n,i))}function n5(e){e.exit("gfmFootnoteDefinition")}function i5(e,n,i){const a=this;return st(e,o,"gfmFootnoteDefinitionIndent",5);function o(s){const c=a.events[a.events.length-1];return c&&c[1].type==="gfmFootnoteDefinitionIndent"&&c[2].sliceSerialize(c[1],!0).length===4?n(s):i(s)}}function r5(e){let i=(e||{}).singleTilde;const a={name:"strikethrough",tokenize:s,resolveAll:o};return i==null&&(i=!0),{text:{126:a},insideSpan:{null:[a]},attentionMarkers:{null:[126]}};function o(c,f){let h=-1;for(;++h1?h(_):(c.consume(_),m++,b);if(m<2&&!i)return h(_);const N=c.exit("strikethroughSequenceTemporary"),E=Ol(_);return N._open=!E||E===2&&!!S,N._close=!S||S===2&&!!E,f(_)}}}class a5{constructor(){this.map=[]}add(n,i,a){l5(this,n,i,a)}consume(n){if(this.map.sort(function(s,c){return s[0]-c[0]}),this.map.length===0)return;let i=this.map.length;const a=[];for(;i>0;)i-=1,a.push(n.slice(this.map[i][0]+this.map[i][1]),this.map[i][2]),n.length=this.map[i][0];a.push(n.slice()),n.length=0;let o=a.pop();for(;o;){for(const s of o)n.push(s);o=a.pop()}this.map.length=0}}function l5(e,n,i,a){let o=0;if(!(i===0&&a.length===0)){for(;o-1;){const A=a.events[q][1].type;if(A==="lineEnding"||A==="linePrefix")q--;else break}const X=q>-1?a.events[q][1].type:null,Y=X==="tableHead"||X==="tableRow"?R:h;return Y===R&&a.parser.lazy[a.now().line]?i(L):Y(L)}function h(L){return e.enter("tableHead"),e.enter("tableRow"),d(L)}function d(L){return L===124||(c=!0,s+=1),p(L)}function p(L){return L===null?i(L):je(L)?s>1?(s=0,a.interrupt=!0,e.exit("tableRow"),e.enter("lineEnding"),e.consume(L),e.exit("lineEnding"),b):i(L):tt(L)?st(e,p,"whitespace")(L):(s+=1,c&&(c=!1,o+=1),L===124?(e.enter("tableCellDivider"),e.consume(L),e.exit("tableCellDivider"),c=!0,p):(e.enter("data"),m(L)))}function m(L){return L===null||L===124||At(L)?(e.exit("data"),p(L)):(e.consume(L),L===92?y:m)}function y(L){return L===92||L===124?(e.consume(L),m):m(L)}function b(L){return a.interrupt=!1,a.parser.lazy[a.now().line]?i(L):(e.enter("tableDelimiterRow"),c=!1,tt(L)?st(e,_,"linePrefix",a.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(L):_(L))}function _(L){return L===45||L===58?N(L):L===124?(c=!0,e.enter("tableCellDivider"),e.consume(L),e.exit("tableCellDivider"),S):B(L)}function S(L){return tt(L)?st(e,N,"whitespace")(L):N(L)}function N(L){return L===58?(s+=1,c=!0,e.enter("tableDelimiterMarker"),e.consume(L),e.exit("tableDelimiterMarker"),E):L===45?(s+=1,E(L)):L===null||je(L)?O(L):B(L)}function E(L){return L===45?(e.enter("tableDelimiterFiller"),k(L)):B(L)}function k(L){return L===45?(e.consume(L),k):L===58?(c=!0,e.exit("tableDelimiterFiller"),e.enter("tableDelimiterMarker"),e.consume(L),e.exit("tableDelimiterMarker"),w):(e.exit("tableDelimiterFiller"),w(L))}function w(L){return tt(L)?st(e,O,"whitespace")(L):O(L)}function O(L){return L===124?_(L):L===null||je(L)?!c||o!==s?B(L):(e.exit("tableDelimiterRow"),e.exit("tableHead"),n(L)):B(L)}function B(L){return i(L)}function R(L){return e.enter("tableRow"),H(L)}function H(L){return L===124?(e.enter("tableCellDivider"),e.consume(L),e.exit("tableCellDivider"),H):L===null||je(L)?(e.exit("tableRow"),n(L)):tt(L)?st(e,H,"whitespace")(L):(e.enter("data"),I(L))}function I(L){return L===null||L===124||At(L)?(e.exit("data"),H(L)):(e.consume(L),L===92?K:I)}function K(L){return L===92||L===124?(e.consume(L),I):I(L)}}function u5(e,n){let i=-1,a=!0,o=0,s=[0,0,0,0],c=[0,0,0,0],f=!1,h=0,d,p,m;const y=new a5;for(;++ii[2]+1){const _=i[2]+1,S=i[3]-i[2]-1;e.add(_,S,[])}}e.add(i[3]+1,0,[["exit",m,n]])}return o!==void 0&&(s.end=Object.assign({},Nl(n.events,o)),e.add(o,0,[["exit",s,n]]),s=void 0),s}function vx(e,n,i,a,o){const s=[],c=Nl(n.events,i);o&&(o.end=Object.assign({},c),s.push(["exit",o,n])),a.end=Object.assign({},c),s.push(["exit",a,n]),e.add(i+1,0,s)}function Nl(e,n){const i=e[n],a=i[0]==="enter"?"start":"end";return i[1][a]}const f5={name:"tasklistCheck",tokenize:h5};function d5(){return{text:{91:f5}}}function h5(e,n,i){const a=this;return o;function o(h){return a.previous!==null||!a._gfmTasklistFirstContentOfListItem?i(h):(e.enter("taskListCheck"),e.enter("taskListCheckMarker"),e.consume(h),e.exit("taskListCheckMarker"),s)}function s(h){return At(h)?(e.enter("taskListCheckValueUnchecked"),e.consume(h),e.exit("taskListCheckValueUnchecked"),c):h===88||h===120?(e.enter("taskListCheckValueChecked"),e.consume(h),e.exit("taskListCheckValueChecked"),c):i(h)}function c(h){return h===93?(e.enter("taskListCheckMarker"),e.consume(h),e.exit("taskListCheckMarker"),e.exit("taskListCheck"),f):i(h)}function f(h){return je(h)?n(h):tt(h)?e.check({tokenize:p5},n,i)(h):i(h)}}function p5(e,n,i){return st(e,a,"whitespace");function a(o){return o===null?i(o):n(o)}}function m5(e){return v1([HD(),ZD(),r5(e),s5(),d5()])}const g5={};function dm(e){const n=this,i=e||g5,a=n.data(),o=a.micromarkExtensions||(a.micromarkExtensions=[]),s=a.fromMarkdownExtensions||(a.fromMarkdownExtensions=[]),c=a.toMarkdownExtensions||(a.toMarkdownExtensions=[]);o.push(m5(i)),s.push(ID()),c.push(jD(i))}var sh,_x;function b5(){if(_x)return sh;_x=1;function e(ne){return ne instanceof Map?ne.clear=ne.delete=ne.set=function(){throw new Error("map is read-only")}:ne instanceof Set&&(ne.add=ne.clear=ne.delete=function(){throw new Error("set is read-only")}),Object.freeze(ne),Object.getOwnPropertyNames(ne).forEach(pe=>{const we=ne[pe],qe=typeof we;(qe==="object"||qe==="function")&&!Object.isFrozen(we)&&e(we)}),ne}class n{constructor(pe){pe.data===void 0&&(pe.data={}),this.data=pe.data,this.isMatchIgnored=!1}ignoreMatch(){this.isMatchIgnored=!0}}function i(ne){return ne.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function a(ne,...pe){const we=Object.create(null);for(const qe in ne)we[qe]=ne[qe];return pe.forEach(function(qe){for(const Nt in qe)we[Nt]=qe[Nt]}),we}const o="",s=ne=>!!ne.scope,c=(ne,{prefix:pe})=>{if(ne.startsWith("language:"))return ne.replace("language:","language-");if(ne.includes(".")){const we=ne.split(".");return[`${pe}${we.shift()}`,...we.map((qe,Nt)=>`${qe}${"_".repeat(Nt+1)}`)].join(" ")}return`${pe}${ne}`};class f{constructor(pe,we){this.buffer="",this.classPrefix=we.classPrefix,pe.walk(this)}addText(pe){this.buffer+=i(pe)}openNode(pe){if(!s(pe))return;const we=c(pe.scope,{prefix:this.classPrefix});this.span(we)}closeNode(pe){s(pe)&&(this.buffer+=o)}value(){return this.buffer}span(pe){this.buffer+=``}}const h=(ne={})=>{const pe={children:[]};return Object.assign(pe,ne),pe};class d{constructor(){this.rootNode=h(),this.stack=[this.rootNode]}get top(){return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(pe){this.top.children.push(pe)}openNode(pe){const we=h({scope:pe});this.add(we),this.stack.push(we)}closeNode(){if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}walk(pe){return this.constructor._walk(pe,this.rootNode)}static _walk(pe,we){return typeof we=="string"?pe.addText(we):we.children&&(pe.openNode(we),we.children.forEach(qe=>this._walk(pe,qe)),pe.closeNode(we)),pe}static _collapse(pe){typeof pe!="string"&&pe.children&&(pe.children.every(we=>typeof we=="string")?pe.children=[pe.children.join("")]:pe.children.forEach(we=>{d._collapse(we)}))}}class p extends d{constructor(pe){super(),this.options=pe}addText(pe){pe!==""&&this.add(pe)}startScope(pe){this.openNode(pe)}endScope(){this.closeNode()}__addSublanguage(pe,we){const qe=pe.root;we&&(qe.scope=`language:${we}`),this.add(qe)}toHTML(){return new f(this,this.options).value()}finalize(){return this.closeAllNodes(),!0}}function m(ne){return ne?typeof ne=="string"?ne:ne.source:null}function y(ne){return S("(?=",ne,")")}function b(ne){return S("(?:",ne,")*")}function _(ne){return S("(?:",ne,")?")}function S(...ne){return ne.map(we=>m(we)).join("")}function N(ne){const pe=ne[ne.length-1];return typeof pe=="object"&&pe.constructor===Object?(ne.splice(ne.length-1,1),pe):{}}function E(...ne){return"("+(N(ne).capture?"":"?:")+ne.map(qe=>m(qe)).join("|")+")"}function k(ne){return new RegExp(ne.toString()+"|").exec("").length-1}function w(ne,pe){const we=ne&&ne.exec(pe);return we&&we.index===0}const O=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./;function B(ne,{joinWith:pe}){let we=0;return ne.map(qe=>{we+=1;const Nt=we;let gt=m(qe),Ce="";for(;gt.length>0;){const Ne=O.exec(gt);if(!Ne){Ce+=gt;break}Ce+=gt.substring(0,Ne.index),gt=gt.substring(Ne.index+Ne[0].length),Ne[0][0]==="\\"&&Ne[1]?Ce+="\\"+String(Number(Ne[1])+Nt):(Ce+=Ne[0],Ne[0]==="("&&we++)}return Ce}).map(qe=>`(${qe})`).join(pe)}const R=/\b\B/,H="[a-zA-Z]\\w*",I="[a-zA-Z_]\\w*",K="\\b\\d+(\\.\\d+)?",L="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",q="\\b(0b[01]+)",X="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",Y=(ne={})=>{const pe=/^#![ ]*\//;return ne.binary&&(ne.begin=S(pe,/.*\b/,ne.binary,/\b.*/)),a({scope:"meta",begin:pe,end:/$/,relevance:0,"on:begin":(we,qe)=>{we.index!==0&&qe.ignoreMatch()}},ne)},A={begin:"\\\\[\\s\\S]",relevance:0},$={scope:"string",begin:"'",end:"'",illegal:"\\n",contains:[A]},M={scope:"string",begin:'"',end:'"',illegal:"\\n",contains:[A]},j={begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},V=function(ne,pe,we={}){const qe=a({scope:"comment",begin:ne,end:pe,contains:[]},we);qe.contains.push({scope:"doctag",begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)",end:/(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,excludeBegin:!0,relevance:0});const Nt=E("I","a","is","so","us","to","at","if","in","it","on",/[A-Za-z]+['](d|ve|re|ll|t|s|n)/,/[A-Za-z]+[-][a-z]+/,/[A-Za-z][a-z]{2,}/);return qe.contains.push({begin:S(/[ ]+/,"(",Nt,/[.]?[:]?([.][ ]|[ ])/,"){3}")}),qe},Z=V("//","$"),C=V("/\\*","\\*/"),z=V("#","$"),G={scope:"number",begin:K,relevance:0},D={scope:"number",begin:L,relevance:0},F={scope:"number",begin:q,relevance:0},U={scope:"regexp",begin:/\/(?=[^/\n]*\/)/,end:/\/[gimuy]*/,contains:[A,{begin:/\[/,end:/\]/,relevance:0,contains:[A]}]},Q={scope:"title",begin:H,relevance:0},J={scope:"title",begin:I,relevance:0},W={begin:"\\.\\s*"+I,relevance:0};var ce=Object.freeze({__proto__:null,APOS_STRING_MODE:$,BACKSLASH_ESCAPE:A,BINARY_NUMBER_MODE:F,BINARY_NUMBER_RE:q,COMMENT:V,C_BLOCK_COMMENT_MODE:C,C_LINE_COMMENT_MODE:Z,C_NUMBER_MODE:D,C_NUMBER_RE:L,END_SAME_AS_BEGIN:function(ne){return Object.assign(ne,{"on:begin":(pe,we)=>{we.data._beginMatch=pe[1]},"on:end":(pe,we)=>{we.data._beginMatch!==pe[1]&&we.ignoreMatch()}})},HASH_COMMENT_MODE:z,IDENT_RE:H,MATCH_NOTHING_RE:R,METHOD_GUARD:W,NUMBER_MODE:G,NUMBER_RE:K,PHRASAL_WORDS_MODE:j,QUOTE_STRING_MODE:M,REGEXP_MODE:U,RE_STARTERS_RE:X,SHEBANG:Y,TITLE_MODE:Q,UNDERSCORE_IDENT_RE:I,UNDERSCORE_TITLE_MODE:J});function de(ne,pe){ne.input[ne.index-1]==="."&&pe.ignoreMatch()}function be(ne,pe){ne.className!==void 0&&(ne.scope=ne.className,delete ne.className)}function Ee(ne,pe){pe&&ne.beginKeywords&&(ne.begin="\\b("+ne.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)",ne.__beforeBegin=de,ne.keywords=ne.keywords||ne.beginKeywords,delete ne.beginKeywords,ne.relevance===void 0&&(ne.relevance=0))}function Se(ne,pe){Array.isArray(ne.illegal)&&(ne.illegal=E(...ne.illegal))}function De(ne,pe){if(ne.match){if(ne.begin||ne.end)throw new Error("begin & end are not supported with match");ne.begin=ne.match,delete ne.match}}function He(ne,pe){ne.relevance===void 0&&(ne.relevance=1)}const lt=(ne,pe)=>{if(!ne.beforeMatch)return;if(ne.starts)throw new Error("beforeMatch cannot be used with starts");const we=Object.assign({},ne);Object.keys(ne).forEach(qe=>{delete ne[qe]}),ne.keywords=we.keywords,ne.begin=S(we.beforeMatch,y(we.begin)),ne.starts={relevance:0,contains:[Object.assign(we,{endsParent:!0})]},ne.relevance=0,delete we.beforeMatch},Rt=["of","and","for","in","not","or","if","then","parent","list","value"],Yt="keyword";function Pt(ne,pe,we=Yt){const qe=Object.create(null);return typeof ne=="string"?Nt(we,ne.split(" ")):Array.isArray(ne)?Nt(we,ne):Object.keys(ne).forEach(function(gt){Object.assign(qe,Pt(ne[gt],pe,gt))}),qe;function Nt(gt,Ce){pe&&(Ce=Ce.map(Ne=>Ne.toLowerCase())),Ce.forEach(function(Ne){const Be=Ne.split("|");qe[Be[0]]=[gt,Xt(Be[0],Be[1])]})}}function Xt(ne,pe){return pe?Number(pe):Vn(ne)?0:1}function Vn(ne){return Rt.includes(ne.toLowerCase())}const En={},ct=ne=>{console.error(ne)},jt=(ne,...pe)=>{console.log(`WARN: ${ne}`,...pe)},ue=(ne,pe)=>{En[`${ne}/${pe}`]||(console.log(`Deprecated as of ${ne}. ${pe}`),En[`${ne}/${pe}`]=!0)},ye=new Error;function Me(ne,pe,{key:we}){let qe=0;const Nt=ne[we],gt={},Ce={};for(let Ne=1;Ne<=pe.length;Ne++)Ce[Ne+qe]=Nt[Ne],gt[Ne+qe]=!0,qe+=k(pe[Ne-1]);ne[we]=Ce,ne[we]._emit=gt,ne[we]._multi=!0}function Pe(ne){if(Array.isArray(ne.begin)){if(ne.skip||ne.excludeBegin||ne.returnBegin)throw ct("skip, excludeBegin, returnBegin not compatible with beginScope: {}"),ye;if(typeof ne.beginScope!="object"||ne.beginScope===null)throw ct("beginScope must be object"),ye;Me(ne,ne.begin,{key:"beginScope"}),ne.begin=B(ne.begin,{joinWith:""})}}function Ze(ne){if(Array.isArray(ne.end)){if(ne.skip||ne.excludeEnd||ne.returnEnd)throw ct("skip, excludeEnd, returnEnd not compatible with endScope: {}"),ye;if(typeof ne.endScope!="object"||ne.endScope===null)throw ct("endScope must be object"),ye;Me(ne,ne.end,{key:"endScope"}),ne.end=B(ne.end,{joinWith:""})}}function sn(ne){ne.scope&&typeof ne.scope=="object"&&ne.scope!==null&&(ne.beginScope=ne.scope,delete ne.scope)}function wn(ne){sn(ne),typeof ne.beginScope=="string"&&(ne.beginScope={_wrap:ne.beginScope}),typeof ne.endScope=="string"&&(ne.endScope={_wrap:ne.endScope}),Pe(ne),Ze(ne)}function Kt(ne){function pe(Ce,Ne){return new RegExp(m(Ce),"m"+(ne.case_insensitive?"i":"")+(ne.unicodeRegex?"u":"")+(Ne?"g":""))}class we{constructor(){this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}addRule(Ne,Be){Be.position=this.position++,this.matchIndexes[this.matchAt]=Be,this.regexes.push([Be,Ne]),this.matchAt+=k(Ne)+1}compile(){this.regexes.length===0&&(this.exec=()=>null);const Ne=this.regexes.map(Be=>Be[1]);this.matcherRe=pe(B(Ne,{joinWith:"|"}),!0),this.lastIndex=0}exec(Ne){this.matcherRe.lastIndex=this.lastIndex;const Be=this.matcherRe.exec(Ne);if(!Be)return null;const Bt=Be.findIndex((gi,xr)=>xr>0&&gi!==void 0),Mt=this.matchIndexes[Bt];return Be.splice(0,Bt),Object.assign(Be,Mt)}}class qe{constructor(){this.rules=[],this.multiRegexes=[],this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(Ne){if(this.multiRegexes[Ne])return this.multiRegexes[Ne];const Be=new we;return this.rules.slice(Ne).forEach(([Bt,Mt])=>Be.addRule(Bt,Mt)),Be.compile(),this.multiRegexes[Ne]=Be,Be}resumingScanAtSamePosition(){return this.regexIndex!==0}considerAll(){this.regexIndex=0}addRule(Ne,Be){this.rules.push([Ne,Be]),Be.type==="begin"&&this.count++}exec(Ne){const Be=this.getMatcher(this.regexIndex);Be.lastIndex=this.lastIndex;let Bt=Be.exec(Ne);if(this.resumingScanAtSamePosition()&&!(Bt&&Bt.index===this.lastIndex)){const Mt=this.getMatcher(0);Mt.lastIndex=this.lastIndex+1,Bt=Mt.exec(Ne)}return Bt&&(this.regexIndex+=Bt.position+1,this.regexIndex===this.count&&this.considerAll()),Bt}}function Nt(Ce){const Ne=new qe;return Ce.contains.forEach(Be=>Ne.addRule(Be.begin,{rule:Be,type:"begin"})),Ce.terminatorEnd&&Ne.addRule(Ce.terminatorEnd,{type:"end"}),Ce.illegal&&Ne.addRule(Ce.illegal,{type:"illegal"}),Ne}function gt(Ce,Ne){const Be=Ce;if(Ce.isCompiled)return Be;[be,De,wn,lt].forEach(Mt=>Mt(Ce,Ne)),ne.compilerExtensions.forEach(Mt=>Mt(Ce,Ne)),Ce.__beforeBegin=null,[Ee,Se,He].forEach(Mt=>Mt(Ce,Ne)),Ce.isCompiled=!0;let Bt=null;return typeof Ce.keywords=="object"&&Ce.keywords.$pattern&&(Ce.keywords=Object.assign({},Ce.keywords),Bt=Ce.keywords.$pattern,delete Ce.keywords.$pattern),Bt=Bt||/\w+/,Ce.keywords&&(Ce.keywords=Pt(Ce.keywords,ne.case_insensitive)),Be.keywordPatternRe=pe(Bt,!0),Ne&&(Ce.begin||(Ce.begin=/\B|\b/),Be.beginRe=pe(Be.begin),!Ce.end&&!Ce.endsWithParent&&(Ce.end=/\B|\b/),Ce.end&&(Be.endRe=pe(Be.end)),Be.terminatorEnd=m(Be.end)||"",Ce.endsWithParent&&Ne.terminatorEnd&&(Be.terminatorEnd+=(Ce.end?"|":"")+Ne.terminatorEnd)),Ce.illegal&&(Be.illegalRe=pe(Ce.illegal)),Ce.contains||(Ce.contains=[]),Ce.contains=[].concat(...Ce.contains.map(function(Mt){return Wt(Mt==="self"?Ce:Mt)})),Ce.contains.forEach(function(Mt){gt(Mt,Be)}),Ce.starts&>(Ce.starts,Ne),Be.matcher=Nt(Be),Be}if(ne.compilerExtensions||(ne.compilerExtensions=[]),ne.contains&&ne.contains.includes("self"))throw new Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.");return ne.classNameAliases=a(ne.classNameAliases||{}),gt(ne)}function Ct(ne){return ne?ne.endsWithParent||Ct(ne.starts):!1}function Wt(ne){return ne.variants&&!ne.cachedVariants&&(ne.cachedVariants=ne.variants.map(function(pe){return a(ne,{variants:null},pe)})),ne.cachedVariants?ne.cachedVariants:Ct(ne)?a(ne,{starts:ne.starts?a(ne.starts):null}):Object.isFrozen(ne)?a(ne):ne}var ut="11.11.1";class zn extends Error{constructor(pe,we){super(pe),this.name="HTMLInjectionError",this.html=we}}const cn=i,yr=a,nt=Symbol("nomatch"),Yn=7,Cn=function(ne){const pe=Object.create(null),we=Object.create(null),qe=[];let Nt=!0;const gt="Could not find the language '{}', did you forget to load/include a language module?",Ce={disableAutodetect:!0,name:"Plain text",contains:[]};let Ne={ignoreUnescapedHTML:!1,throwUnescapedHTML:!1,noHighlightRe:/^(no-?highlight)$/i,languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",cssSelector:"pre code",languages:null,__emitter:p};function Be(xe){return Ne.noHighlightRe.test(xe)}function Bt(xe){let Le=xe.className+" ";Le+=xe.parentNode?xe.parentNode.className:"";const Qe=Ne.languageDetectRe.exec(Le);if(Qe){const dt=bn(Qe[1]);return dt||(jt(gt.replace("{}",Qe[1])),jt("Falling back to no-highlight mode for this block.",xe)),dt?Qe[1]:"no-highlight"}return Le.split(/\s+/).find(dt=>Be(dt)||bn(dt))}function Mt(xe,Le,Qe){let dt="",Ht="";typeof Le=="object"?(dt=xe,Qe=Le.ignoreIllegals,Ht=Le.language):(ue("10.7.0","highlight(lang, code, ...args) has been deprecated."),ue("10.7.0",`Please use highlight(code, options) instead. +https://github.com/highlightjs/highlight.js/issues/2277`),Ht=xe,dt=Le),Qe===void 0&&(Qe=!0);const mn={code:dt,language:Ht};Xi("before:highlight",mn);const Mn=mn.result?mn.result:gi(mn.language,mn.code,Qe);return Mn.code=mn.code,Xi("after:highlight",Mn),Mn}function gi(xe,Le,Qe,dt){const Ht=Object.create(null);function mn(_e,Oe){return _e.keywords[Oe]}function Mn(){if(!$e.keywords){Jt.addText(bt);return}let _e=0;$e.keywordPatternRe.lastIndex=0;let Oe=$e.keywordPatternRe.exec(bt),Ye="";for(;Oe;){Ye+=bt.substring(_e,Oe.index);const it=un.case_insensitive?Oe[0].toLowerCase():Oe[0],$t=mn($e,it);if($t){const[li,ql]=$t;if(Jt.addText(Ye),Ye="",Ht[it]=(Ht[it]||0)+1,Ht[it]<=Yn&&(kr+=ql),li.startsWith("_"))Ye+=Oe[0];else{const ys=un.classNameAliases[li]||li;On(Oe[0],ys)}}else Ye+=Oe[0];_e=$e.keywordPatternRe.lastIndex,Oe=$e.keywordPatternRe.exec(bt)}Ye+=bt.substring(_e),Jt.addText(Ye)}function Sn(){if(bt==="")return;let _e=null;if(typeof $e.subLanguage=="string"){if(!pe[$e.subLanguage]){Jt.addText(bt);return}_e=gi($e.subLanguage,bt,!0,bs[$e.subLanguage]),bs[$e.subLanguage]=_e._top}else _e=vr(bt,$e.subLanguage.length?$e.subLanguage:null);$e.relevance>0&&(kr+=_e.relevance),Jt.__addSublanguage(_e._emitter,_e.language)}function _t(){$e.subLanguage!=null?Sn():Mn(),bt=""}function On(_e,Oe){_e!==""&&(Jt.startScope(Oe),Jt.addText(_e),Jt.endScope())}function Fa(_e,Oe){let Ye=1;const it=Oe.length-1;for(;Ye<=it;){if(!_e._emit[Ye]){Ye++;continue}const $t=un.classNameAliases[_e[Ye]]||_e[Ye],li=Oe[Ye];$t?On(li,$t):(bt=li,Mn(),bt=""),Ye++}}function wr(_e,Oe){return _e.scope&&typeof _e.scope=="string"&&Jt.openNode(un.classNameAliases[_e.scope]||_e.scope),_e.beginScope&&(_e.beginScope._wrap?(On(bt,un.classNameAliases[_e.beginScope._wrap]||_e.beginScope._wrap),bt=""):_e.beginScope._multi&&(Fa(_e.beginScope,Oe),bt="")),$e=Object.create(_e,{parent:{value:$e}}),$e}function Li(_e,Oe,Ye){let it=w(_e.endRe,Ye);if(it){if(_e["on:end"]){const $t=new n(_e);_e["on:end"](Oe,$t),$t.isMatchIgnored&&(it=!1)}if(it){for(;_e.endsParent&&_e.parent;)_e=_e.parent;return _e}}if(_e.endsWithParent)return Li(_e.parent,Oe,Ye)}function Sr(_e){return $e.matcher.regexIndex===0?(bt+=_e[0],1):(Tr=!0,0)}function Ga(_e){const Oe=_e[0],Ye=_e.rule,it=new n(Ye),$t=[Ye.__beforeBegin,Ye["on:begin"]];for(const li of $t)if(li&&(li(_e,it),it.isMatchIgnored))return Sr(Oe);return Ye.skip?bt+=Oe:(Ye.excludeBegin&&(bt+=Oe),_t(),!Ye.returnBegin&&!Ye.excludeBegin&&(bt=Oe)),wr(Ye,_e),Ye.returnBegin?0:Oe.length}function Nn(_e){const Oe=_e[0],Ye=Le.substring(_e.index),it=Li($e,_e,Ye);if(!it)return nt;const $t=$e;$e.endScope&&$e.endScope._wrap?(_t(),On(Oe,$e.endScope._wrap)):$e.endScope&&$e.endScope._multi?(_t(),Fa($e.endScope,_e)):$t.skip?bt+=Oe:($t.returnEnd||$t.excludeEnd||(bt+=Oe),_t(),$t.excludeEnd&&(bt=Oe));do $e.scope&&Jt.closeNode(),!$e.skip&&!$e.subLanguage&&(kr+=$e.relevance),$e=$e.parent;while($e!==it.parent);return it.starts&&wr(it.starts,_e),$t.returnEnd?0:Oe.length}function sa(){const _e=[];for(let Oe=$e;Oe!==un;Oe=Oe.parent)Oe.scope&&_e.unshift(Oe.scope);_e.forEach(Oe=>Jt.openNode(Oe))}let _i={};function Nr(_e,Oe){const Ye=Oe&&Oe[0];if(bt+=_e,Ye==null)return _t(),0;if(_i.type==="begin"&&Oe.type==="end"&&_i.index===Oe.index&&Ye===""){if(bt+=Le.slice(Oe.index,Oe.index+1),!Nt){const it=new Error(`0 width match regex (${xe})`);throw it.languageName=xe,it.badRule=_i.rule,it}return 1}if(_i=Oe,Oe.type==="begin")return Ga(Oe);if(Oe.type==="illegal"&&!Qe){const it=new Error('Illegal lexeme "'+Ye+'" for mode "'+($e.scope||"")+'"');throw it.mode=$e,it}else if(Oe.type==="end"){const it=Nn(Oe);if(it!==nt)return it}if(Oe.type==="illegal"&&Ye==="")return bt+=` +`,1;if($l>1e5&&$l>Oe.index*3)throw new Error("potential infinite loop, way more iterations than matches");return bt+=Ye,Ye.length}const un=bn(xe);if(!un)throw ct(gt.replace("{}",xe)),new Error('Unknown language: "'+xe+'"');const ca=Kt(un);let Va="",$e=dt||ca;const bs={},Jt=new Ne.__emitter(Ne);sa();let bt="",kr=0,Ki=0,$l=0,Tr=!1;try{if(un.__emitTokens)un.__emitTokens(Le,Jt);else{for($e.matcher.considerAll();;){$l++,Tr?Tr=!1:$e.matcher.considerAll(),$e.matcher.lastIndex=Ki;const _e=$e.matcher.exec(Le);if(!_e)break;const Oe=Le.substring(Ki,_e.index),Ye=Nr(Oe,_e);Ki=_e.index+Ye}Nr(Le.substring(Ki))}return Jt.finalize(),Va=Jt.toHTML(),{language:xe,value:Va,relevance:kr,illegal:!1,_emitter:Jt,_top:$e}}catch(_e){if(_e.message&&_e.message.includes("Illegal"))return{language:xe,value:cn(Le),illegal:!0,relevance:0,_illegalBy:{message:_e.message,index:Ki,context:Le.slice(Ki-100,Ki+100),mode:_e.mode,resultSoFar:Va},_emitter:Jt};if(Nt)return{language:xe,value:cn(Le),illegal:!1,relevance:0,errorRaised:_e,_emitter:Jt,_top:$e};throw _e}}function xr(xe){const Le={value:cn(xe),illegal:!1,relevance:0,_top:Ce,_emitter:new Ne.__emitter(Ne)};return Le._emitter.addText(xe),Le}function vr(xe,Le){Le=Le||Ne.languages||Object.keys(pe);const Qe=xr(xe),dt=Le.filter(bn).filter(xi).map(_t=>gi(_t,xe,!1));dt.unshift(Qe);const Ht=dt.sort((_t,On)=>{if(_t.relevance!==On.relevance)return On.relevance-_t.relevance;if(_t.language&&On.language){if(bn(_t.language).supersetOf===On.language)return 1;if(bn(On.language).supersetOf===_t.language)return-1}return 0}),[mn,Mn]=Ht,Sn=mn;return Sn.secondBest=Mn,Sn}function ai(xe,Le,Qe){const dt=Le&&we[Le]||Qe;xe.classList.add("hljs"),xe.classList.add(`language-${dt}`)}function Ut(xe){let Le=null;const Qe=Bt(xe);if(Be(Qe))return;if(Xi("before:highlightElement",{el:xe,language:Qe}),xe.dataset.highlighted){console.log("Element previously highlighted. To highlight again, first unset `dataset.highlighted`.",xe);return}if(xe.children.length>0&&(Ne.ignoreUnescapedHTML||(console.warn("One of your code blocks includes unescaped HTML. This is a potentially serious security risk."),console.warn("https://github.com/highlightjs/highlight.js/wiki/security"),console.warn("The element with unescaped HTML:"),console.warn(xe)),Ne.throwUnescapedHTML))throw new zn("One of your code blocks includes unescaped HTML.",xe.innerHTML);Le=xe;const dt=Le.textContent,Ht=Qe?Mt(dt,{language:Qe,ignoreIllegals:!0}):vr(dt);xe.innerHTML=Ht.value,xe.dataset.highlighted="yes",ai(xe,Qe,Ht.language),xe.result={language:Ht.language,re:Ht.relevance,relevance:Ht.relevance},Ht.secondBest&&(xe.secondBest={language:Ht.secondBest.language,relevance:Ht.secondBest.relevance}),Xi("after:highlightElement",{el:xe,result:Ht,text:dt})}function pn(xe){Ne=yr(Ne,xe)}const bi=()=>{Er(),ue("10.6.0","initHighlighting() deprecated. Use highlightAll() now.")};function _r(){Er(),ue("10.6.0","initHighlightingOnLoad() deprecated. Use highlightAll() now.")}let la=!1;function Er(){function xe(){Er()}if(document.readyState==="loading"){la||window.addEventListener("DOMContentLoaded",xe,!1),la=!0;return}document.querySelectorAll(Ne.cssSelector).forEach(Ut)}function qa(xe,Le){let Qe=null;try{Qe=Le(ne)}catch(dt){if(ct("Language definition for '{}' could not be registered.".replace("{}",xe)),Nt)ct(dt);else throw dt;Qe=Ce}Qe.name||(Qe.name=xe),pe[xe]=Qe,Qe.rawDefinition=Le.bind(null,ne),Qe.aliases&&yi(Qe.aliases,{languageName:xe})}function Yi(xe){delete pe[xe];for(const Le of Object.keys(we))we[Le]===xe&&delete we[Le]}function oa(){return Object.keys(pe)}function bn(xe){return xe=(xe||"").toLowerCase(),pe[xe]||pe[we[xe]]}function yi(xe,{languageName:Le}){typeof xe=="string"&&(xe=[xe]),xe.forEach(Qe=>{we[Qe.toLowerCase()]=Le})}function xi(xe){const Le=bn(xe);return Le&&!Le.disableAutodetect}function Di(xe){xe["before:highlightBlock"]&&!xe["before:highlightElement"]&&(xe["before:highlightElement"]=Le=>{xe["before:highlightBlock"](Object.assign({block:Le.el},Le))}),xe["after:highlightBlock"]&&!xe["after:highlightElement"]&&(xe["after:highlightElement"]=Le=>{xe["after:highlightBlock"](Object.assign({block:Le.el},Le))})}function Ft(xe){Di(xe),qe.push(xe)}function Pa(xe){const Le=qe.indexOf(xe);Le!==-1&&qe.splice(Le,1)}function Xi(xe,Le){const Qe=xe;qe.forEach(function(dt){dt[Qe]&&dt[Qe](Le)})}function vi(xe){return ue("10.7.0","highlightBlock will be removed entirely in v12.0"),ue("10.7.0","Please use highlightElement now."),Ut(xe)}Object.assign(ne,{highlight:Mt,highlightAuto:vr,highlightAll:Er,highlightElement:Ut,highlightBlock:vi,configure:pn,initHighlighting:bi,initHighlightingOnLoad:_r,registerLanguage:qa,unregisterLanguage:Yi,listLanguages:oa,getLanguage:bn,registerAliases:yi,autoDetection:xi,inherit:yr,addPlugin:Ft,removePlugin:Pa}),ne.debugMode=function(){Nt=!1},ne.safeMode=function(){Nt=!0},ne.versionString=ut,ne.regex={concat:S,lookahead:y,either:E,optional:_,anyNumberOfTimes:b};for(const xe in ce)typeof ce[xe]=="object"&&e(ce[xe]);return Object.assign(ne,ce),ne},hn=Cn({});return hn.newInstance=()=>Cn({}),sh=hn,hn.HighlightJS=hn,hn.default=hn,sh}var ch,Ex;function y5(){if(Ex)return ch;Ex=1;function e(n){const i=n.regex,a=i.concat(/[\p{L}_]/u,i.optional(/[\p{L}0-9_.-]*:/u),/[\p{L}0-9_.-]*/u),o=/[\p{L}0-9._:-]+/u,s={className:"symbol",begin:/&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/},c={begin:/\s/,contains:[{className:"keyword",begin:/#?[a-z_][a-z1-9_-]+/,illegal:/\n/}]},f=n.inherit(c,{begin:/\(/,end:/\)/}),h=n.inherit(n.APOS_STRING_MODE,{className:"string"}),d=n.inherit(n.QUOTE_STRING_MODE,{className:"string"}),p={endsWithParent:!0,illegal:/`]+/}]}]}]};return{name:"HTML, XML",aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"],case_insensitive:!0,unicodeRegex:!0,contains:[{className:"meta",begin://,relevance:10,contains:[c,d,h,f,{begin:/\[/,end:/\]/,contains:[{className:"meta",begin://,contains:[c,f,d,h]}]}]},n.COMMENT(//,{relevance:10}),{begin://,relevance:10},s,{className:"meta",end:/\?>/,variants:[{begin:/<\?xml/,relevance:10,contains:[d]},{begin:/<\?[a-z][a-z0-9]+/}]},{className:"tag",begin:/)/,end:/>/,keywords:{name:"style"},contains:[p],starts:{end:/<\/style>/,returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag",begin:/)/,end:/>/,keywords:{name:"script"},contains:[p],starts:{end:/<\/script>/,returnEnd:!0,subLanguage:["javascript","handlebars","xml"]}},{className:"tag",begin:/<>|<\/>/},{className:"tag",begin:i.concat(//,/>/,/\s/)))),end:/\/?>/,contains:[{className:"name",begin:a,relevance:0,starts:p}]},{className:"tag",begin:i.concat(/<\//,i.lookahead(i.concat(a,/>/))),contains:[{className:"name",begin:a,relevance:0},{begin:/>/,relevance:0,endsParent:!0}]}]}}return ch=e,ch}var uh,wx;function x5(){if(wx)return uh;wx=1;function e(n){const i=n.regex,a={},o={begin:/\$\{/,end:/\}/,contains:["self",{begin:/:-/,contains:[a]}]};Object.assign(a,{className:"variable",variants:[{begin:i.concat(/\$[\w\d#@][\w\d_]*/,"(?![\\w\\d])(?![$])")},o]});const s={className:"subst",begin:/\$\(/,end:/\)/,contains:[n.BACKSLASH_ESCAPE]},c=n.inherit(n.COMMENT(),{match:[/(^|\s)/,/#.*$/],scope:{2:"comment"}}),f={begin:/<<-?\s*(?=\w+)/,starts:{contains:[n.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/,className:"string"})]}},h={className:"string",begin:/"/,end:/"/,contains:[n.BACKSLASH_ESCAPE,a,s]};s.contains.push(h);const d={match:/\\"/},p={className:"string",begin:/'/,end:/'/},m={match:/\\'/},y={begin:/\$?\(\(/,end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},n.NUMBER_MODE,a]},b=["fish","bash","zsh","sh","csh","ksh","tcsh","dash","scsh"],_=n.SHEBANG({binary:`(${b.join("|")})`,relevance:10}),S={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,contains:[n.inherit(n.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0},N=["if","then","else","elif","fi","time","for","while","until","in","do","done","case","esac","coproc","function","select"],E=["true","false"],k={match:/(\/[a-z._-]+)+/},w=["break","cd","continue","eval","exec","exit","export","getopts","hash","pwd","readonly","return","shift","test","times","trap","umask","unset"],O=["alias","bind","builtin","caller","command","declare","echo","enable","help","let","local","logout","mapfile","printf","read","readarray","source","sudo","type","typeset","ulimit","unalias"],B=["autoload","bg","bindkey","bye","cap","chdir","clone","comparguments","compcall","compctl","compdescribe","compfiles","compgroups","compquote","comptags","comptry","compvalues","dirs","disable","disown","echotc","echoti","emulate","fc","fg","float","functions","getcap","getln","history","integer","jobs","kill","limit","log","noglob","popd","print","pushd","pushln","rehash","sched","setcap","setopt","stat","suspend","ttyctl","unfunction","unhash","unlimit","unsetopt","vared","wait","whence","where","which","zcompile","zformat","zftp","zle","zmodload","zparseopts","zprof","zpty","zregexparse","zsocket","zstyle","ztcp"],R=["chcon","chgrp","chown","chmod","cp","dd","df","dir","dircolors","ln","ls","mkdir","mkfifo","mknod","mktemp","mv","realpath","rm","rmdir","shred","sync","touch","truncate","vdir","b2sum","base32","base64","cat","cksum","comm","csplit","cut","expand","fmt","fold","head","join","md5sum","nl","numfmt","od","paste","ptx","pr","sha1sum","sha224sum","sha256sum","sha384sum","sha512sum","shuf","sort","split","sum","tac","tail","tr","tsort","unexpand","uniq","wc","arch","basename","chroot","date","dirname","du","echo","env","expr","factor","groups","hostid","id","link","logname","nice","nohup","nproc","pathchk","pinky","printenv","printf","pwd","readlink","runcon","seq","sleep","stat","stdbuf","stty","tee","test","timeout","tty","uname","unlink","uptime","users","who","whoami","yes"];return{name:"Bash",aliases:["sh","zsh"],keywords:{$pattern:/\b[a-z][a-z0-9._-]+\b/,keyword:N,literal:E,built_in:[...w,...O,"set","shopt",...B,...R]},contains:[_,n.SHEBANG(),S,y,c,f,k,h,d,p,m,a]}}return uh=e,uh}var fh,Sx;function v5(){if(Sx)return fh;Sx=1;function e(n){const i=n.regex,a=n.COMMENT("//","$",{contains:[{begin:/\\\n/}]}),o="decltype\\(auto\\)",s="[a-zA-Z_]\\w*::",f="("+o+"|"+i.optional(s)+"[a-zA-Z_]\\w*"+i.optional("<[^<>]+>")+")",h={className:"type",variants:[{begin:"\\b[a-z\\d_]*_t\\b"},{match:/\batomic_[a-z]{3,6}\b/}]},p={className:"string",variants:[{begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[n.BACKSLASH_ESCAPE]},{begin:"(u8?|U|L)?'("+"\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)"+"|.)",end:"'",illegal:"."},n.END_SAME_AS_BEGIN({begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},m={className:"number",variants:[{match:/\b(0b[01']+)/},{match:/(-?)\b([\d']+(\.[\d']*)?|\.[\d']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)/},{match:/(-?)\b(0[xX][a-fA-F0-9]+(?:'[a-fA-F0-9]+)*(?:\.[a-fA-F0-9]*(?:'[a-fA-F0-9]*)*)?(?:[pP][-+]?[0-9]+)?(l|L)?(u|U)?)/},{match:/(-?)\b\d+(?:'\d+)*(?:\.\d*(?:'\d*)*)?(?:[eE][-+]?\d+)?/}],relevance:0},y={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{keyword:"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef elifdef elifndef include"},contains:[{begin:/\\\n/,relevance:0},n.inherit(p,{className:"string"}),{className:"string",begin:/<.*?>/},a,n.C_BLOCK_COMMENT_MODE]},b={className:"title",begin:i.optional(s)+n.IDENT_RE,relevance:0},_=i.optional(s)+n.IDENT_RE+"\\s*\\(",E={keyword:["asm","auto","break","case","continue","default","do","else","enum","extern","for","fortran","goto","if","inline","register","restrict","return","sizeof","typeof","typeof_unqual","struct","switch","typedef","union","volatile","while","_Alignas","_Alignof","_Atomic","_Generic","_Noreturn","_Static_assert","_Thread_local","alignas","alignof","noreturn","static_assert","thread_local","_Pragma"],type:["float","double","signed","unsigned","int","short","long","char","void","_Bool","_BitInt","_Complex","_Imaginary","_Decimal32","_Decimal64","_Decimal96","_Decimal128","_Decimal64x","_Decimal128x","_Float16","_Float32","_Float64","_Float128","_Float32x","_Float64x","_Float128x","const","static","constexpr","complex","bool","imaginary"],literal:"true false NULL",built_in:"std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set pair bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap priority_queue make_pair array shared_ptr abort terminate abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr"},k=[y,h,a,n.C_BLOCK_COMMENT_MODE,m,p],w={variants:[{begin:/=/,end:/;/},{begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],keywords:E,contains:k.concat([{begin:/\(/,end:/\)/,keywords:E,contains:k.concat(["self"]),relevance:0}]),relevance:0},O={begin:"("+f+"[\\*&\\s]+)+"+_,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:E,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:o,keywords:E,relevance:0},{begin:_,returnBegin:!0,contains:[n.inherit(b,{className:"title.function"})],relevance:0},{relevance:0,match:/,/},{className:"params",begin:/\(/,end:/\)/,keywords:E,relevance:0,contains:[a,n.C_BLOCK_COMMENT_MODE,p,m,h,{begin:/\(/,end:/\)/,keywords:E,relevance:0,contains:["self",a,n.C_BLOCK_COMMENT_MODE,p,m,h]}]},h,a,n.C_BLOCK_COMMENT_MODE,y]};return{name:"C",aliases:["h"],keywords:E,disableAutodetect:!0,illegal:"=]/,contains:[{beginKeywords:"final class struct"},n.TITLE_MODE]}]),exports:{preprocessor:y,strings:p,keywords:E}}}return fh=e,fh}var dh,Nx;function _5(){if(Nx)return dh;Nx=1;function e(n){const i=n.regex,a=n.COMMENT("//","$",{contains:[{begin:/\\\n/}]}),o="decltype\\(auto\\)",s="[a-zA-Z_]\\w*::",f="(?!struct)("+o+"|"+i.optional(s)+"[a-zA-Z_]\\w*"+i.optional("<[^<>]+>")+")",h={className:"type",begin:"\\b[a-z\\d_]*_t\\b"},p={className:"string",variants:[{begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[n.BACKSLASH_ESCAPE]},{begin:"(u8?|U|L)?'("+"\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)"+"|.)",end:"'",illegal:"."},n.END_SAME_AS_BEGIN({begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},m={className:"number",variants:[{begin:"[+-]?(?:(?:[0-9](?:'?[0-9])*\\.(?:[0-9](?:'?[0-9])*)?|\\.[0-9](?:'?[0-9])*)(?:[Ee][+-]?[0-9](?:'?[0-9])*)?|[0-9](?:'?[0-9])*[Ee][+-]?[0-9](?:'?[0-9])*|0[Xx](?:[0-9A-Fa-f](?:'?[0-9A-Fa-f])*(?:\\.(?:[0-9A-Fa-f](?:'?[0-9A-Fa-f])*)?)?|\\.[0-9A-Fa-f](?:'?[0-9A-Fa-f])*)[Pp][+-]?[0-9](?:'?[0-9])*)(?:[Ff](?:16|32|64|128)?|(BF|bf)16|[Ll]|)"},{begin:"[+-]?\\b(?:0[Bb][01](?:'?[01])*|0[Xx][0-9A-Fa-f](?:'?[0-9A-Fa-f])*|0(?:'?[0-7])*|[1-9](?:'?[0-9])*)(?:[Uu](?:LL?|ll?)|[Uu][Zz]?|(?:LL?|ll?)[Uu]?|[Zz][Uu]|)"}],relevance:0},y={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{keyword:"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include"},contains:[{begin:/\\\n/,relevance:0},n.inherit(p,{className:"string"}),{className:"string",begin:/<.*?>/},a,n.C_BLOCK_COMMENT_MODE]},b={className:"title",begin:i.optional(s)+n.IDENT_RE,relevance:0},_=i.optional(s)+n.IDENT_RE+"\\s*\\(",S=["alignas","alignof","and","and_eq","asm","atomic_cancel","atomic_commit","atomic_noexcept","auto","bitand","bitor","break","case","catch","class","co_await","co_return","co_yield","compl","concept","const_cast|10","consteval","constexpr","constinit","continue","decltype","default","delete","do","dynamic_cast|10","else","enum","explicit","export","extern","false","final","for","friend","goto","if","import","inline","module","mutable","namespace","new","noexcept","not","not_eq","nullptr","operator","or","or_eq","override","private","protected","public","reflexpr","register","reinterpret_cast|10","requires","return","sizeof","static_assert","static_cast|10","struct","switch","synchronized","template","this","thread_local","throw","transaction_safe","transaction_safe_dynamic","true","try","typedef","typeid","typename","union","using","virtual","volatile","while","xor","xor_eq"],N=["bool","char","char16_t","char32_t","char8_t","double","float","int","long","short","void","wchar_t","unsigned","signed","const","static"],E=["any","auto_ptr","barrier","binary_semaphore","bitset","complex","condition_variable","condition_variable_any","counting_semaphore","deque","false_type","flat_map","flat_set","future","imaginary","initializer_list","istringstream","jthread","latch","lock_guard","multimap","multiset","mutex","optional","ostringstream","packaged_task","pair","promise","priority_queue","queue","recursive_mutex","recursive_timed_mutex","scoped_lock","set","shared_future","shared_lock","shared_mutex","shared_timed_mutex","shared_ptr","stack","string_view","stringstream","timed_mutex","thread","true_type","tuple","unique_lock","unique_ptr","unordered_map","unordered_multimap","unordered_multiset","unordered_set","variant","vector","weak_ptr","wstring","wstring_view"],k=["abort","abs","acos","apply","as_const","asin","atan","atan2","calloc","ceil","cerr","cin","clog","cos","cosh","cout","declval","endl","exchange","exit","exp","fabs","floor","fmod","forward","fprintf","fputs","free","frexp","fscanf","future","invoke","isalnum","isalpha","iscntrl","isdigit","isgraph","islower","isprint","ispunct","isspace","isupper","isxdigit","labs","launder","ldexp","log","log10","make_pair","make_shared","make_shared_for_overwrite","make_tuple","make_unique","malloc","memchr","memcmp","memcpy","memset","modf","move","pow","printf","putchar","puts","realloc","scanf","sin","sinh","snprintf","sprintf","sqrt","sscanf","std","stderr","stdin","stdout","strcat","strchr","strcmp","strcpy","strcspn","strlen","strncat","strncmp","strncpy","strpbrk","strrchr","strspn","strstr","swap","tan","tanh","terminate","to_underlying","tolower","toupper","vfprintf","visit","vprintf","vsprintf"],B={type:N,keyword:S,literal:["NULL","false","nullopt","nullptr","true"],built_in:["_Pragma"],_type_hints:E},R={className:"function.dispatch",relevance:0,keywords:{_hint:k},begin:i.concat(/\b/,/(?!decltype)/,/(?!if)/,/(?!for)/,/(?!switch)/,/(?!while)/,n.IDENT_RE,i.lookahead(/(<[^<>]+>|)\s*\(/))},H=[R,y,h,a,n.C_BLOCK_COMMENT_MODE,m,p],I={variants:[{begin:/=/,end:/;/},{begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],keywords:B,contains:H.concat([{begin:/\(/,end:/\)/,keywords:B,contains:H.concat(["self"]),relevance:0}]),relevance:0},K={className:"function",begin:"("+f+"[\\*&\\s]+)+"+_,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:B,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:o,keywords:B,relevance:0},{begin:_,returnBegin:!0,contains:[b],relevance:0},{begin:/::/,relevance:0},{begin:/:/,endsWithParent:!0,contains:[p,m]},{relevance:0,match:/,/},{className:"params",begin:/\(/,end:/\)/,keywords:B,relevance:0,contains:[a,n.C_BLOCK_COMMENT_MODE,p,m,h,{begin:/\(/,end:/\)/,keywords:B,relevance:0,contains:["self",a,n.C_BLOCK_COMMENT_MODE,p,m,h]}]},h,a,n.C_BLOCK_COMMENT_MODE,y]};return{name:"C++",aliases:["cc","c++","h++","hpp","hh","hxx","cxx"],keywords:B,illegal:"",keywords:B,contains:["self",h]},{begin:n.IDENT_RE+"::",keywords:B},{match:[/\b(?:enum(?:\s+(?:class|struct))?|class|struct|union)/,/\s+/,/\w+/],className:{1:"keyword",3:"title.class"}}])}}return dh=e,dh}var hh,kx;function E5(){if(kx)return hh;kx=1;function e(n){const i=["bool","byte","char","decimal","delegate","double","dynamic","enum","float","int","long","nint","nuint","object","sbyte","short","string","ulong","uint","ushort"],a=["public","private","protected","static","internal","protected","abstract","async","extern","override","unsafe","virtual","new","sealed","partial"],o=["default","false","null","true"],s=["abstract","as","base","break","case","catch","class","const","continue","do","else","event","explicit","extern","finally","fixed","for","foreach","goto","if","implicit","in","interface","internal","is","lock","namespace","new","operator","out","override","params","private","protected","public","readonly","record","ref","return","scoped","sealed","sizeof","stackalloc","static","struct","switch","this","throw","try","typeof","unchecked","unsafe","using","virtual","void","volatile","while"],c=["add","alias","and","ascending","args","async","await","by","descending","dynamic","equals","file","from","get","global","group","init","into","join","let","nameof","not","notnull","on","or","orderby","partial","record","remove","required","scoped","select","set","unmanaged","value|0","var","when","where","with","yield"],f={keyword:s.concat(c),built_in:i,literal:o},h=n.inherit(n.TITLE_MODE,{begin:"[a-zA-Z](\\.?\\w)*"}),d={className:"number",variants:[{begin:"\\b(0b[01']+)"},{begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},p={className:"string",begin:/"""("*)(?!")(.|\n)*?"""\1/,relevance:1},m={className:"string",begin:'@"',end:'"',contains:[{begin:'""'}]},y=n.inherit(m,{illegal:/\n/}),b={className:"subst",begin:/\{/,end:/\}/,keywords:f},_=n.inherit(b,{illegal:/\n/}),S={className:"string",begin:/\$"/,end:'"',illegal:/\n/,contains:[{begin:/\{\{/},{begin:/\}\}/},n.BACKSLASH_ESCAPE,_]},N={className:"string",begin:/\$@"/,end:'"',contains:[{begin:/\{\{/},{begin:/\}\}/},{begin:'""'},b]},E=n.inherit(N,{illegal:/\n/,contains:[{begin:/\{\{/},{begin:/\}\}/},{begin:'""'},_]});b.contains=[N,S,m,n.APOS_STRING_MODE,n.QUOTE_STRING_MODE,d,n.C_BLOCK_COMMENT_MODE],_.contains=[E,S,y,n.APOS_STRING_MODE,n.QUOTE_STRING_MODE,d,n.inherit(n.C_BLOCK_COMMENT_MODE,{illegal:/\n/})];const k={variants:[p,N,S,m,n.APOS_STRING_MODE,n.QUOTE_STRING_MODE]},w={begin:"<",end:">",contains:[{beginKeywords:"in out"},h]},O=n.IDENT_RE+"(<"+n.IDENT_RE+"(\\s*,\\s*"+n.IDENT_RE+")*>)?(\\[\\])?",B={begin:"@"+n.IDENT_RE,relevance:0};return{name:"C#",aliases:["cs","c#"],keywords:f,illegal:/::/,contains:[n.COMMENT("///","$",{returnBegin:!0,contains:[{className:"doctag",variants:[{begin:"///",relevance:0},{begin:""},{begin:""}]}]}),n.C_LINE_COMMENT_MODE,n.C_BLOCK_COMMENT_MODE,{className:"meta",begin:"#",end:"$",keywords:{keyword:"if else elif endif define undef warning error line region endregion pragma checksum"}},k,d,{beginKeywords:"class interface",relevance:0,end:/[{;=]/,illegal:/[^\s:,]/,contains:[{beginKeywords:"where class"},h,w,n.C_LINE_COMMENT_MODE,n.C_BLOCK_COMMENT_MODE]},{beginKeywords:"namespace",relevance:0,end:/[{;=]/,illegal:/[^\s:]/,contains:[h,n.C_LINE_COMMENT_MODE,n.C_BLOCK_COMMENT_MODE]},{beginKeywords:"record",relevance:0,end:/[{;=]/,illegal:/[^\s:]/,contains:[h,w,n.C_LINE_COMMENT_MODE,n.C_BLOCK_COMMENT_MODE]},{className:"meta",begin:"^\\s*\\[(?=[\\w])",excludeBegin:!0,end:"\\]",excludeEnd:!0,contains:[{className:"string",begin:/"/,end:/"/}]},{beginKeywords:"new return throw await else",relevance:0},{className:"function",begin:"("+O+"\\s+)+"+n.IDENT_RE+"\\s*(<[^=]+>\\s*)?\\(",returnBegin:!0,end:/\s*[{;=]/,excludeEnd:!0,keywords:f,contains:[{beginKeywords:a.join(" "),relevance:0},{begin:n.IDENT_RE+"\\s*(<[^=]+>\\s*)?\\(",returnBegin:!0,contains:[n.TITLE_MODE,w],relevance:0},{match:/\(\)/},{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:f,relevance:0,contains:[k,d,n.C_BLOCK_COMMENT_MODE]},n.C_LINE_COMMENT_MODE,n.C_BLOCK_COMMENT_MODE]},B]}}return hh=e,hh}var ph,Tx;function w5(){if(Tx)return ph;Tx=1;const e=d=>({IMPORTANT:{scope:"meta",begin:"!important"},BLOCK_COMMENT:d.C_BLOCK_COMMENT_MODE,HEXCOLOR:{scope:"number",begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/},FUNCTION_DISPATCH:{className:"built_in",begin:/[\w-]+(?=\()/},ATTRIBUTE_SELECTOR_MODE:{scope:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",contains:[d.APOS_STRING_MODE,d.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{scope:"number",begin:d.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},CSS_VARIABLE:{className:"attr",begin:/--[A-Za-z_][A-Za-z0-9_-]*/}}),n=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","optgroup","option","p","picture","q","quote","samp","section","select","source","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"],i=["defs","g","marker","mask","pattern","svg","switch","symbol","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feFlood","feGaussianBlur","feImage","feMerge","feMorphology","feOffset","feSpecularLighting","feTile","feTurbulence","linearGradient","radialGradient","stop","circle","ellipse","image","line","path","polygon","polyline","rect","text","use","textPath","tspan","foreignObject","clipPath"],a=[...n,...i],o=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"].sort().reverse(),s=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"].sort().reverse(),c=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"].sort().reverse(),f=["accent-color","align-content","align-items","align-self","alignment-baseline","all","anchor-name","animation","animation-composition","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-range","animation-range-end","animation-range-start","animation-timeline","animation-timing-function","appearance","aspect-ratio","backdrop-filter","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-position-x","background-position-y","background-repeat","background-size","baseline-shift","block-size","border","border-block","border-block-color","border-block-end","border-block-end-color","border-block-end-style","border-block-end-width","border-block-start","border-block-start-color","border-block-start-style","border-block-start-width","border-block-style","border-block-width","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-end-end-radius","border-end-start-radius","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-inline","border-inline-color","border-inline-end","border-inline-end-color","border-inline-end-style","border-inline-end-width","border-inline-start","border-inline-start-color","border-inline-start-style","border-inline-start-width","border-inline-style","border-inline-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-start-end-radius","border-start-start-radius","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-align","box-decoration-break","box-direction","box-flex","box-flex-group","box-lines","box-ordinal-group","box-orient","box-pack","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","color-scheme","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","contain-intrinsic-block-size","contain-intrinsic-height","contain-intrinsic-inline-size","contain-intrinsic-size","contain-intrinsic-width","container","container-name","container-type","content","content-visibility","counter-increment","counter-reset","counter-set","cue","cue-after","cue-before","cursor","cx","cy","direction","display","dominant-baseline","empty-cells","enable-background","field-sizing","fill","fill-opacity","fill-rule","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","flood-color","flood-opacity","flow","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-optical-sizing","font-palette","font-size","font-size-adjust","font-smooth","font-smoothing","font-stretch","font-style","font-synthesis","font-synthesis-position","font-synthesis-small-caps","font-synthesis-style","font-synthesis-weight","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian","font-variant-emoji","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","forced-color-adjust","gap","glyph-orientation-horizontal","glyph-orientation-vertical","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphenate-character","hyphenate-limit-chars","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","initial-letter","initial-letter-align","inline-size","inset","inset-area","inset-block","inset-block-end","inset-block-start","inset-inline","inset-inline-end","inset-inline-start","isolation","justify-content","justify-items","justify-self","kerning","left","letter-spacing","lighting-color","line-break","line-height","line-height-step","list-style","list-style-image","list-style-position","list-style-type","margin","margin-block","margin-block-end","margin-block-start","margin-bottom","margin-inline","margin-inline-end","margin-inline-start","margin-left","margin-right","margin-top","margin-trim","marker","marker-end","marker-mid","marker-start","marks","mask","mask-border","mask-border-mode","mask-border-outset","mask-border-repeat","mask-border-slice","mask-border-source","mask-border-width","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","masonry-auto-flow","math-depth","math-shift","math-style","max-block-size","max-height","max-inline-size","max-width","min-block-size","min-height","min-inline-size","min-width","mix-blend-mode","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","offset","offset-anchor","offset-distance","offset-path","offset-position","offset-rotate","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-anchor","overflow-block","overflow-clip-margin","overflow-inline","overflow-wrap","overflow-x","overflow-y","overlay","overscroll-behavior","overscroll-behavior-block","overscroll-behavior-inline","overscroll-behavior-x","overscroll-behavior-y","padding","padding-block","padding-block-end","padding-block-start","padding-bottom","padding-inline","padding-inline-end","padding-inline-start","padding-left","padding-right","padding-top","page","page-break-after","page-break-before","page-break-inside","paint-order","pause","pause-after","pause-before","perspective","perspective-origin","place-content","place-items","place-self","pointer-events","position","position-anchor","position-visibility","print-color-adjust","quotes","r","resize","rest","rest-after","rest-before","right","rotate","row-gap","ruby-align","ruby-position","scale","scroll-behavior","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-stop","scroll-snap-type","scroll-timeline","scroll-timeline-axis","scroll-timeline-name","scrollbar-color","scrollbar-gutter","scrollbar-width","shape-image-threshold","shape-margin","shape-outside","shape-rendering","speak","speak-as","src","stop-color","stop-opacity","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","tab-size","table-layout","text-align","text-align-all","text-align-last","text-anchor","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip","text-decoration-skip-ink","text-decoration-style","text-decoration-thickness","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-indent","text-justify","text-orientation","text-overflow","text-rendering","text-shadow","text-size-adjust","text-transform","text-underline-offset","text-underline-position","text-wrap","text-wrap-mode","text-wrap-style","timeline-scope","top","touch-action","transform","transform-box","transform-origin","transform-style","transition","transition-behavior","transition-delay","transition-duration","transition-property","transition-timing-function","translate","unicode-bidi","user-modify","user-select","vector-effect","vertical-align","view-timeline","view-timeline-axis","view-timeline-inset","view-timeline-name","view-transition-name","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","white-space","white-space-collapse","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","x","y","z-index","zoom"].sort().reverse();function h(d){const p=d.regex,m=e(d),y={begin:/-(webkit|moz|ms|o)-(?=[a-z])/},b="and or not only",_=/@-?\w[\w]*(-\w+)*/,S="[a-zA-Z-][a-zA-Z0-9_-]*",N=[d.APOS_STRING_MODE,d.QUOTE_STRING_MODE];return{name:"CSS",case_insensitive:!0,illegal:/[=|'\$]/,keywords:{keyframePosition:"from to"},classNameAliases:{keyframePosition:"selector-tag"},contains:[m.BLOCK_COMMENT,y,m.CSS_NUMBER_MODE,{className:"selector-id",begin:/#[A-Za-z0-9_-]+/,relevance:0},{className:"selector-class",begin:"\\."+S,relevance:0},m.ATTRIBUTE_SELECTOR_MODE,{className:"selector-pseudo",variants:[{begin:":("+s.join("|")+")"},{begin:":(:)?("+c.join("|")+")"}]},m.CSS_VARIABLE,{className:"attribute",begin:"\\b("+f.join("|")+")\\b"},{begin:/:/,end:/[;}{]/,contains:[m.BLOCK_COMMENT,m.HEXCOLOR,m.IMPORTANT,m.CSS_NUMBER_MODE,...N,{begin:/(url|data-uri)\(/,end:/\)/,relevance:0,keywords:{built_in:"url data-uri"},contains:[...N,{className:"string",begin:/[^)]/,endsWithParent:!0,excludeEnd:!0}]},m.FUNCTION_DISPATCH]},{begin:p.lookahead(/@/),end:"[{;]",relevance:0,illegal:/:/,contains:[{className:"keyword",begin:_},{begin:/\s/,endsWithParent:!0,excludeEnd:!0,relevance:0,keywords:{$pattern:/[a-z-]+/,keyword:b,attribute:o.join(" ")},contains:[{begin:/[a-z-]+(?=:)/,className:"attribute"},...N,m.CSS_NUMBER_MODE]}]},{className:"selector-tag",begin:"\\b("+a.join("|")+")\\b"}]}}return ph=h,ph}var mh,Ax;function S5(){if(Ax)return mh;Ax=1;function e(n){const i=n.regex,a={begin:/<\/?[A-Za-z_]/,end:">",subLanguage:"xml",relevance:0},o={begin:"^[-\\*]{3,}",end:"$"},s={className:"code",variants:[{begin:"(`{3,})[^`](.|\\n)*?\\1`*[ ]*"},{begin:"(~{3,})[^~](.|\\n)*?\\1~*[ ]*"},{begin:"```",end:"```+[ ]*$"},{begin:"~~~",end:"~~~+[ ]*$"},{begin:"`.+?`"},{begin:"(?=^( {4}|\\t))",contains:[{begin:"^( {4}|\\t)",end:"(\\n)$"}],relevance:0}]},c={className:"bullet",begin:"^[ ]*([*+-]|(\\d+\\.))(?=\\s+)",end:"\\s+",excludeEnd:!0},f={begin:/^\[[^\n]+\]:/,returnBegin:!0,contains:[{className:"symbol",begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0},{className:"link",begin:/:\s*/,end:/$/,excludeBegin:!0}]},h=/[A-Za-z][A-Za-z0-9+.-]*/,d={variants:[{begin:/\[.+?\]\[.*?\]/,relevance:0},{begin:/\[.+?\]\(((data|javascript|mailto):|(?:http|ftp)s?:\/\/).*?\)/,relevance:2},{begin:i.concat(/\[.+?\]\(/,h,/:\/\/.*?\)/),relevance:2},{begin:/\[.+?\]\([./?&#].*?\)/,relevance:1},{begin:/\[.*?\]\(.*?\)/,relevance:0}],returnBegin:!0,contains:[{match:/\[(?=\])/},{className:"string",relevance:0,begin:"\\[",end:"\\]",excludeBegin:!0,returnEnd:!0},{className:"link",relevance:0,begin:"\\]\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0},{className:"symbol",relevance:0,begin:"\\]\\[",end:"\\]",excludeBegin:!0,excludeEnd:!0}]},p={className:"strong",contains:[],variants:[{begin:/_{2}(?!\s)/,end:/_{2}/},{begin:/\*{2}(?!\s)/,end:/\*{2}/}]},m={className:"emphasis",contains:[],variants:[{begin:/\*(?![*\s])/,end:/\*/},{begin:/_(?![_\s])/,end:/_/,relevance:0}]},y=n.inherit(p,{contains:[]}),b=n.inherit(m,{contains:[]});p.contains.push(b),m.contains.push(y);let _=[a,d];return[p,m,y,b].forEach(k=>{k.contains=k.contains.concat(_)}),_=_.concat(p,m),{name:"Markdown",aliases:["md","mkdown","mkd"],contains:[{className:"section",variants:[{begin:"^#{1,6}",end:"$",contains:_},{begin:"(?=^.+?\\n[=-]{2,}$)",contains:[{begin:"^[=-]*$"},{begin:"^",end:"\\n",contains:_}]}]},a,c,p,m,{className:"quote",begin:"^>\\s+",contains:_,end:"$"},s,o,d,f,{scope:"literal",match:/&([a-zA-Z0-9]+|#[0-9]{1,7}|#[Xx][0-9a-fA-F]{1,6});/}]}}return mh=e,mh}var gh,Cx;function N5(){if(Cx)return gh;Cx=1;function e(n){const i=n.regex;return{name:"Diff",aliases:["patch"],contains:[{className:"meta",relevance:10,match:i.either(/^@@ +-\d+,\d+ +\+\d+,\d+ +@@/,/^\*\*\* +\d+,\d+ +\*\*\*\*$/,/^--- +\d+,\d+ +----$/)},{className:"comment",variants:[{begin:i.either(/Index: /,/^index/,/={3,}/,/^-{3}/,/^\*{3} /,/^\+{3}/,/^diff --git/),end:/$/},{match:/^\*{15}$/}]},{className:"addition",begin:/^\+/,end:/$/},{className:"deletion",begin:/^-/,end:/$/},{className:"addition",begin:/^!/,end:/$/}]}}return gh=e,gh}var bh,Mx;function k5(){if(Mx)return bh;Mx=1;function e(n){const i=n.regex,a="([a-zA-Z_]\\w*[!?=]?|[-+~]@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?)",o=i.either(/\b([A-Z]+[a-z0-9]+)+/,/\b([A-Z]+[a-z0-9]+)+[A-Z]+/),s=i.concat(o,/(::\w+)*/),f={"variable.constant":["__FILE__","__LINE__","__ENCODING__"],"variable.language":["self","super"],keyword:["alias","and","begin","BEGIN","break","case","class","defined","do","else","elsif","end","END","ensure","for","if","in","module","next","not","or","redo","require","rescue","retry","return","then","undef","unless","until","when","while","yield",...["include","extend","prepend","public","private","protected","raise","throw"]],built_in:["proc","lambda","attr_accessor","attr_reader","attr_writer","define_method","private_constant","module_function"],literal:["true","false","nil"]},h={className:"doctag",begin:"@[A-Za-z]+"},d={begin:"#<",end:">"},p=[n.COMMENT("#","$",{contains:[h]}),n.COMMENT("^=begin","^=end",{contains:[h],relevance:10}),n.COMMENT("^__END__",n.MATCH_NOTHING_RE)],m={className:"subst",begin:/#\{/,end:/\}/,keywords:f},y={className:"string",contains:[n.BACKSLASH_ESCAPE,m],variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/`/,end:/`/},{begin:/%[qQwWx]?\(/,end:/\)/},{begin:/%[qQwWx]?\[/,end:/\]/},{begin:/%[qQwWx]?\{/,end:/\}/},{begin:/%[qQwWx]?/},{begin:/%[qQwWx]?\//,end:/\//},{begin:/%[qQwWx]?%/,end:/%/},{begin:/%[qQwWx]?-/,end:/-/},{begin:/%[qQwWx]?\|/,end:/\|/},{begin:/\B\?(\\\d{1,3})/},{begin:/\B\?(\\x[A-Fa-f0-9]{1,2})/},{begin:/\B\?(\\u\{?[A-Fa-f0-9]{1,6}\}?)/},{begin:/\B\?(\\M-\\C-|\\M-\\c|\\c\\M-|\\M-|\\C-\\M-)[\x20-\x7e]/},{begin:/\B\?\\(c|C-)[\x20-\x7e]/},{begin:/\B\?\\?\S/},{begin:i.concat(/<<[-~]?'?/,i.lookahead(/(\w+)(?=\W)[^\n]*\n(?:[^\n]*\n)*?\s*\1\b/)),contains:[n.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/,contains:[n.BACKSLASH_ESCAPE,m]})]}]},b="[1-9](_?[0-9])*|0",_="[0-9](_?[0-9])*",S={className:"number",relevance:0,variants:[{begin:`\\b(${b})(\\.(${_}))?([eE][+-]?(${_})|r)?i?\\b`},{begin:"\\b0[dD][0-9](_?[0-9])*r?i?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*r?i?\\b"},{begin:"\\b0[oO][0-7](_?[0-7])*r?i?\\b"},{begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*r?i?\\b"},{begin:"\\b0(_?[0-7])+r?i?\\b"}]},N={variants:[{match:/\(\)/},{className:"params",begin:/\(/,end:/(?=\))/,excludeBegin:!0,endsParent:!0,keywords:f}]},H=[y,{variants:[{match:[/class\s+/,s,/\s+<\s+/,s]},{match:[/\b(class|module)\s+/,s]}],scope:{2:"title.class",4:"title.class.inherited"},keywords:f},{match:[/(include|extend)\s+/,s],scope:{2:"title.class"},keywords:f},{relevance:0,match:[s,/\.new[. (]/],scope:{1:"title.class"}},{relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:"variable.constant"},{relevance:0,match:o,scope:"title.class"},{match:[/def/,/\s+/,a],scope:{1:"keyword",3:"title.function"},contains:[N]},{begin:n.IDENT_RE+"::"},{className:"symbol",begin:n.UNDERSCORE_IDENT_RE+"(!|\\?)?:",relevance:0},{className:"symbol",begin:":(?!\\s)",contains:[y,{begin:a}],relevance:0},S,{className:"variable",begin:"(\\$\\W)|((\\$|@@?)(\\w+))(?=[^@$?])(?![A-Za-z])(?![@$?'])"},{className:"params",begin:/\|(?!=)/,end:/\|/,excludeBegin:!0,excludeEnd:!0,relevance:0,keywords:f},{begin:"("+n.RE_STARTERS_RE+"|unless)\\s*",keywords:"unless",contains:[{className:"regexp",contains:[n.BACKSLASH_ESCAPE,m],illegal:/\n/,variants:[{begin:"/",end:"/[a-z]*"},{begin:/%r\{/,end:/\}[a-z]*/},{begin:"%r\\(",end:"\\)[a-z]*"},{begin:"%r!",end:"![a-z]*"},{begin:"%r\\[",end:"\\][a-z]*"}]}].concat(d,p),relevance:0}].concat(d,p);m.contains=H,N.contains=H;const q=[{begin:/^\s*=>/,starts:{end:"$",contains:H}},{className:"meta.prompt",begin:"^("+"[>?]>"+"|"+"[\\w#]+\\(\\w+\\):\\d+:\\d+[>*]"+"|"+"(\\w+-)?\\d+\\.\\d+\\.\\d+(p\\d+)?[^\\d][^>]+>"+")(?=[ ])",starts:{end:"$",keywords:f,contains:H}}];return p.unshift(d),{name:"Ruby",aliases:["rb","gemspec","podspec","thor","irb"],keywords:f,illegal:/\/\*/,contains:[n.SHEBANG({binary:"ruby"})].concat(q).concat(p).concat(H)}}return bh=e,bh}var yh,Ox;function T5(){if(Ox)return yh;Ox=1;function e(n){const c={keyword:["break","case","chan","const","continue","default","defer","else","fallthrough","for","func","go","goto","if","import","interface","map","package","range","return","select","struct","switch","type","var"],type:["bool","byte","complex64","complex128","error","float32","float64","int8","int16","int32","int64","string","uint8","uint16","uint32","uint64","int","uint","uintptr","rune"],literal:["true","false","iota","nil"],built_in:["append","cap","close","complex","copy","imag","len","make","new","panic","print","println","real","recover","delete"]};return{name:"Go",aliases:["golang"],keywords:c,illegal:"o(c,f,h-1))}function s(c){const f=c.regex,h="[ร€-สธa-zA-Z_$][ร€-สธa-zA-Z_$0-9]*",d=h+o("(?:<"+h+"~~~(?:\\s*,\\s*"+h+"~~~)*>)?",/~~~/g,2),_={keyword:["synchronized","abstract","private","var","static","if","const ","for","while","strictfp","finally","protected","import","native","final","void","enum","else","break","transient","catch","instanceof","volatile","case","assert","package","default","public","try","switch","continue","throws","protected","public","private","module","requires","exports","do","sealed","yield","permits","goto","when"],literal:["false","true","null"],type:["char","boolean","long","float","int","byte","short","double"],built_in:["super","this"]},S={className:"meta",begin:"@"+h,contains:[{begin:/\(/,end:/\)/,contains:["self"]}]},N={className:"params",begin:/\(/,end:/\)/,keywords:_,relevance:0,contains:[c.C_BLOCK_COMMENT_MODE],endsParent:!0};return{name:"Java",aliases:["jsp"],keywords:_,illegal:/<\/|#/,contains:[c.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{begin:/\w+@/,relevance:0},{className:"doctag",begin:"@[A-Za-z]+"}]}),{begin:/import java\.[a-z]+\./,keywords:"import",relevance:2},c.C_LINE_COMMENT_MODE,c.C_BLOCK_COMMENT_MODE,{begin:/"""/,end:/"""/,className:"string",contains:[c.BACKSLASH_ESCAPE]},c.APOS_STRING_MODE,c.QUOTE_STRING_MODE,{match:[/\b(?:class|interface|enum|extends|implements|new)/,/\s+/,h],className:{1:"keyword",3:"title.class"}},{match:/non-sealed/,scope:"keyword"},{begin:[f.concat(/(?!else)/,h),/\s+/,h,/\s+/,/=(?!=)/],className:{1:"type",3:"variable",5:"operator"}},{begin:[/record/,/\s+/,h],className:{1:"keyword",3:"title.class"},contains:[N,c.C_LINE_COMMENT_MODE,c.C_BLOCK_COMMENT_MODE]},{beginKeywords:"new throw return else",relevance:0},{begin:["(?:"+d+"\\s+)",c.UNDERSCORE_IDENT_RE,/\s*(?=\()/],className:{2:"title.function"},keywords:_,contains:[{className:"params",begin:/\(/,end:/\)/,keywords:_,relevance:0,contains:[S,c.APOS_STRING_MODE,c.QUOTE_STRING_MODE,a,c.C_BLOCK_COMMENT_MODE]},c.C_LINE_COMMENT_MODE,c.C_BLOCK_COMMENT_MODE]},a,S]}}return _h=s,_h}var Eh,zx;function O5(){if(zx)return Eh;zx=1;const e="[A-Za-z$_][0-9A-Za-z$_]*",n=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends","using"],i=["true","false","null","undefined","NaN","Infinity"],a=["Object","Function","Boolean","Symbol","Math","Date","Number","BigInt","String","RegExp","Array","Float32Array","Float64Array","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Int32Array","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array","Set","Map","WeakSet","WeakMap","ArrayBuffer","SharedArrayBuffer","Atomics","DataView","JSON","Promise","Generator","GeneratorFunction","AsyncFunction","Reflect","Proxy","Intl","WebAssembly"],o=["Error","EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],s=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],c=["arguments","this","super","console","window","document","localStorage","sessionStorage","module","global"],f=[].concat(s,a,o);function h(d){const p=d.regex,m=(J,{after:W})=>{const ee="",end:""},_=/<[A-Za-z0-9\\._:-]+\s*\/>/,S={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(J,W)=>{const ee=J[0].length+J.index,ce=J.input[ee];if(ce==="<"||ce===","){W.ignoreMatch();return}ce===">"&&(m(J,{after:ee})||W.ignoreMatch());let de;const be=J.input.substring(ee);if(de=be.match(/^\s*=/)){W.ignoreMatch();return}if((de=be.match(/^\s+extends\s+/))&&de.index===0){W.ignoreMatch();return}}},N={$pattern:e,keyword:n,literal:i,built_in:f,"variable.language":c},E="[0-9](_?[0-9])*",k=`\\.(${E})`,w="0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*",O={className:"number",variants:[{begin:`(\\b(${w})((${k})|\\.)?|(${k}))[eE][+-]?(${E})\\b`},{begin:`\\b(${w})\\b((${k})\\b|\\.)?|(${k})\\b`},{begin:"\\b(0|[1-9](_?[0-9])*)n\\b"},{begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*n?\\b"},{begin:"\\b0[oO][0-7](_?[0-7])*n?\\b"},{begin:"\\b0[0-7]+n?\\b"}],relevance:0},B={className:"subst",begin:"\\$\\{",end:"\\}",keywords:N,contains:[]},R={begin:".?html`",end:"",starts:{end:"`",returnEnd:!1,contains:[d.BACKSLASH_ESCAPE,B],subLanguage:"xml"}},H={begin:".?css`",end:"",starts:{end:"`",returnEnd:!1,contains:[d.BACKSLASH_ESCAPE,B],subLanguage:"css"}},I={begin:".?gql`",end:"",starts:{end:"`",returnEnd:!1,contains:[d.BACKSLASH_ESCAPE,B],subLanguage:"graphql"}},K={className:"string",begin:"`",end:"`",contains:[d.BACKSLASH_ESCAPE,B]},q={className:"comment",variants:[d.COMMENT(/\/\*\*(?!\/)/,"\\*/",{relevance:0,contains:[{begin:"(?=@[A-Za-z]+)",relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"},{className:"type",begin:"\\{",end:"\\}",excludeEnd:!0,excludeBegin:!0,relevance:0},{className:"variable",begin:y+"(?=\\s*(-)|$)",endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]}),d.C_BLOCK_COMMENT_MODE,d.C_LINE_COMMENT_MODE]},X=[d.APOS_STRING_MODE,d.QUOTE_STRING_MODE,R,H,I,K,{match:/\$\d+/},O];B.contains=X.concat({begin:/\{/,end:/\}/,keywords:N,contains:["self"].concat(X)});const Y=[].concat(q,B.contains),A=Y.concat([{begin:/(\s*)\(/,end:/\)/,keywords:N,contains:["self"].concat(Y)}]),$={className:"params",begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:N,contains:A},M={variants:[{match:[/class/,/\s+/,y,/\s+/,/extends/,/\s+/,p.concat(y,"(",p.concat(/\./,y),")*")],scope:{1:"keyword",3:"title.class",5:"keyword",7:"title.class.inherited"}},{match:[/class/,/\s+/,y],scope:{1:"keyword",3:"title.class"}}]},j={relevance:0,match:p.either(/\bJSON/,/\b[A-Z][a-z]+([A-Z][a-z]*|\d)*/,/\b[A-Z]{2,}([A-Z][a-z]+|\d)+([A-Z][a-z]*)*/,/\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\d)*([A-Z][a-z]*)*/),className:"title.class",keywords:{_:[...a,...o]}},V={label:"use_strict",className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},Z={variants:[{match:[/function/,/\s+/,y,/(?=\s*\()/]},{match:[/function/,/\s*(?=\()/]}],className:{1:"keyword",3:"title.function"},label:"func.def",contains:[$],illegal:/%/},C={relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:"variable.constant"};function z(J){return p.concat("(?!",J.join("|"),")")}const G={match:p.concat(/\b/,z([...s,"super","import"].map(J=>`${J}\\s*\\(`)),y,p.lookahead(/\s*\(/)),className:"title.function",relevance:0},D={begin:p.concat(/\./,p.lookahead(p.concat(y,/(?![0-9A-Za-z$_(])/))),end:y,excludeBegin:!0,keywords:"prototype",className:"property",relevance:0},F={match:[/get|set/,/\s+/,y,/(?=\()/],className:{1:"keyword",3:"title.function"},contains:[{begin:/\(\)/},$]},U="(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|"+d.UNDERSCORE_IDENT_RE+")\\s*=>",Q={match:[/const|var|let/,/\s+/,y,/\s*/,/=\s*/,/(async\s*)?/,p.lookahead(U)],keywords:"async",className:{1:"keyword",3:"title.function"},contains:[$]};return{name:"JavaScript",aliases:["js","jsx","mjs","cjs"],keywords:N,exports:{PARAMS_CONTAINS:A,CLASS_REFERENCE:j},illegal:/#(?![$_A-z])/,contains:[d.SHEBANG({label:"shebang",binary:"node",relevance:5}),V,d.APOS_STRING_MODE,d.QUOTE_STRING_MODE,R,H,I,K,q,{match:/\$\d+/},O,j,{scope:"attr",match:y+p.lookahead(":"),relevance:0},Q,{begin:"("+d.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",relevance:0,contains:[q,d.REGEXP_MODE,{className:"function",begin:U,returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:d.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:N,contains:A}]}]},{begin:/,/,relevance:0},{match:/\s+/,relevance:0},{variants:[{begin:b.begin,end:b.end},{match:_},{begin:S.begin,"on:begin":S.isTrulyOpeningTag,end:S.end}],subLanguage:"xml",contains:[{begin:S.begin,end:S.end,skip:!0,contains:["self"]}]}]},Z,{beginKeywords:"while if switch catch for"},{begin:"\\b(?!function)"+d.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",returnBegin:!0,label:"func.def",contains:[$,d.inherit(d.TITLE_MODE,{begin:y,className:"title.function"})]},{match:/\.\.\./,relevance:0},D,{match:"\\$"+y,relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"},contains:[$]},G,C,M,F,{match:/\$[(.]/}]}}return Eh=h,Eh}var wh,Ix;function R5(){if(Ix)return wh;Ix=1;function e(n){const i={className:"attr",begin:/"(\\.|[^\\"\r\n])*"(?=\s*:)/,relevance:1.01},a={match:/[{}[\],:]/,className:"punctuation",relevance:0},o=["true","false","null"],s={scope:"literal",beginKeywords:o.join(" ")};return{name:"JSON",aliases:["jsonc"],keywords:{literal:o},contains:[i,a,n.QUOTE_STRING_MODE,s,n.C_NUMBER_MODE,n.C_LINE_COMMENT_MODE,n.C_BLOCK_COMMENT_MODE],illegal:"\\S"}}return wh=e,wh}var Sh,jx;function D5(){if(jx)return Sh;jx=1;var e="[0-9](_*[0-9])*",n=`\\.(${e})`,i="[0-9a-fA-F](_*[0-9a-fA-F])*",a={className:"number",variants:[{begin:`(\\b(${e})((${n})|\\.)?|(${n}))[eE][+-]?(${e})[fFdD]?\\b`},{begin:`\\b(${e})((${n})[fFdD]?\\b|\\.([fFdD]\\b)?)`},{begin:`(${n})[fFdD]?\\b`},{begin:`\\b(${e})[fFdD]\\b`},{begin:`\\b0[xX]((${i})\\.?|(${i})?\\.(${i}))[pP][+-]?(${e})[fFdD]?\\b`},{begin:"\\b(0|[1-9](_*[0-9])*)[lL]?\\b"},{begin:`\\b0[xX](${i})[lL]?\\b`},{begin:"\\b0(_*[0-7])*[lL]?\\b"},{begin:"\\b0[bB][01](_*[01])*[lL]?\\b"}],relevance:0};function o(s){const c={keyword:"abstract as val var vararg get set class object open private protected public noinline crossinline dynamic final enum if else do while for when throw try catch finally import package is in fun override companion reified inline lateinit init interface annotation data sealed internal infix operator out by constructor super tailrec where const inner suspend typealias external expect actual",built_in:"Byte Short Char Int Long Boolean Float Double Void Unit Nothing",literal:"true false null"},f={className:"keyword",begin:/\b(break|continue|return|this)\b/,starts:{contains:[{className:"symbol",begin:/@\w+/}]}},h={className:"symbol",begin:s.UNDERSCORE_IDENT_RE+"@"},d={className:"subst",begin:/\$\{/,end:/\}/,contains:[s.C_NUMBER_MODE]},p={className:"variable",begin:"\\$"+s.UNDERSCORE_IDENT_RE},m={className:"string",variants:[{begin:'"""',end:'"""(?=[^"])',contains:[p,d]},{begin:"'",end:"'",illegal:/\n/,contains:[s.BACKSLASH_ESCAPE]},{begin:'"',end:'"',illegal:/\n/,contains:[s.BACKSLASH_ESCAPE,p,d]}]};d.contains.push(m);const y={className:"meta",begin:"@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\s*:(?:\\s*"+s.UNDERSCORE_IDENT_RE+")?"},b={className:"meta",begin:"@"+s.UNDERSCORE_IDENT_RE,contains:[{begin:/\(/,end:/\)/,contains:[s.inherit(m,{className:"string"}),"self"]}]},_=a,S=s.COMMENT("/\\*","\\*/",{contains:[s.C_BLOCK_COMMENT_MODE]}),N={variants:[{className:"type",begin:s.UNDERSCORE_IDENT_RE},{begin:/\(/,end:/\)/,contains:[]}]},E=N;return E.variants[1].contains=[N],N.variants[1].contains=[E],{name:"Kotlin",aliases:["kt","kts"],keywords:c,contains:[s.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"}]}),s.C_LINE_COMMENT_MODE,S,f,h,y,b,{className:"function",beginKeywords:"fun",end:"[(]|$",returnBegin:!0,excludeEnd:!0,keywords:c,relevance:5,contains:[{begin:s.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0,contains:[s.UNDERSCORE_TITLE_MODE]},{className:"type",begin://,keywords:"reified",relevance:0},{className:"params",begin:/\(/,end:/\)/,endsParent:!0,keywords:c,relevance:0,contains:[{begin:/:/,end:/[=,\/]/,endsWithParent:!0,contains:[N,s.C_LINE_COMMENT_MODE,S],relevance:0},s.C_LINE_COMMENT_MODE,S,y,b,m,s.C_NUMBER_MODE]},S]},{begin:[/class|interface|trait/,/\s+/,s.UNDERSCORE_IDENT_RE],beginScope:{3:"title.class"},keywords:"class interface trait",end:/[:\{(]|$/,excludeEnd:!0,illegal:"extends implements",contains:[{beginKeywords:"public protected internal private constructor"},s.UNDERSCORE_TITLE_MODE,{className:"type",begin://,excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:/[,:]\s*/,end:/[<\(,){\s]|$/,excludeBegin:!0,returnEnd:!0},y,b]},m,{className:"meta",begin:"^#!/usr/bin/env",end:"$",illegal:` +`},_]}}return Sh=o,Sh}var Nh,Bx;function L5(){if(Bx)return Nh;Bx=1;const e=p=>({IMPORTANT:{scope:"meta",begin:"!important"},BLOCK_COMMENT:p.C_BLOCK_COMMENT_MODE,HEXCOLOR:{scope:"number",begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/},FUNCTION_DISPATCH:{className:"built_in",begin:/[\w-]+(?=\()/},ATTRIBUTE_SELECTOR_MODE:{scope:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",contains:[p.APOS_STRING_MODE,p.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{scope:"number",begin:p.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},CSS_VARIABLE:{className:"attr",begin:/--[A-Za-z_][A-Za-z0-9_-]*/}}),n=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","optgroup","option","p","picture","q","quote","samp","section","select","source","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"],i=["defs","g","marker","mask","pattern","svg","switch","symbol","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feFlood","feGaussianBlur","feImage","feMerge","feMorphology","feOffset","feSpecularLighting","feTile","feTurbulence","linearGradient","radialGradient","stop","circle","ellipse","image","line","path","polygon","polyline","rect","text","use","textPath","tspan","foreignObject","clipPath"],a=[...n,...i],o=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"].sort().reverse(),s=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"].sort().reverse(),c=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"].sort().reverse(),f=["accent-color","align-content","align-items","align-self","alignment-baseline","all","anchor-name","animation","animation-composition","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-range","animation-range-end","animation-range-start","animation-timeline","animation-timing-function","appearance","aspect-ratio","backdrop-filter","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-position-x","background-position-y","background-repeat","background-size","baseline-shift","block-size","border","border-block","border-block-color","border-block-end","border-block-end-color","border-block-end-style","border-block-end-width","border-block-start","border-block-start-color","border-block-start-style","border-block-start-width","border-block-style","border-block-width","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-end-end-radius","border-end-start-radius","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-inline","border-inline-color","border-inline-end","border-inline-end-color","border-inline-end-style","border-inline-end-width","border-inline-start","border-inline-start-color","border-inline-start-style","border-inline-start-width","border-inline-style","border-inline-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-start-end-radius","border-start-start-radius","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-align","box-decoration-break","box-direction","box-flex","box-flex-group","box-lines","box-ordinal-group","box-orient","box-pack","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","color-scheme","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","contain-intrinsic-block-size","contain-intrinsic-height","contain-intrinsic-inline-size","contain-intrinsic-size","contain-intrinsic-width","container","container-name","container-type","content","content-visibility","counter-increment","counter-reset","counter-set","cue","cue-after","cue-before","cursor","cx","cy","direction","display","dominant-baseline","empty-cells","enable-background","field-sizing","fill","fill-opacity","fill-rule","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","flood-color","flood-opacity","flow","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-optical-sizing","font-palette","font-size","font-size-adjust","font-smooth","font-smoothing","font-stretch","font-style","font-synthesis","font-synthesis-position","font-synthesis-small-caps","font-synthesis-style","font-synthesis-weight","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian","font-variant-emoji","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","forced-color-adjust","gap","glyph-orientation-horizontal","glyph-orientation-vertical","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphenate-character","hyphenate-limit-chars","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","initial-letter","initial-letter-align","inline-size","inset","inset-area","inset-block","inset-block-end","inset-block-start","inset-inline","inset-inline-end","inset-inline-start","isolation","justify-content","justify-items","justify-self","kerning","left","letter-spacing","lighting-color","line-break","line-height","line-height-step","list-style","list-style-image","list-style-position","list-style-type","margin","margin-block","margin-block-end","margin-block-start","margin-bottom","margin-inline","margin-inline-end","margin-inline-start","margin-left","margin-right","margin-top","margin-trim","marker","marker-end","marker-mid","marker-start","marks","mask","mask-border","mask-border-mode","mask-border-outset","mask-border-repeat","mask-border-slice","mask-border-source","mask-border-width","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","masonry-auto-flow","math-depth","math-shift","math-style","max-block-size","max-height","max-inline-size","max-width","min-block-size","min-height","min-inline-size","min-width","mix-blend-mode","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","offset","offset-anchor","offset-distance","offset-path","offset-position","offset-rotate","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-anchor","overflow-block","overflow-clip-margin","overflow-inline","overflow-wrap","overflow-x","overflow-y","overlay","overscroll-behavior","overscroll-behavior-block","overscroll-behavior-inline","overscroll-behavior-x","overscroll-behavior-y","padding","padding-block","padding-block-end","padding-block-start","padding-bottom","padding-inline","padding-inline-end","padding-inline-start","padding-left","padding-right","padding-top","page","page-break-after","page-break-before","page-break-inside","paint-order","pause","pause-after","pause-before","perspective","perspective-origin","place-content","place-items","place-self","pointer-events","position","position-anchor","position-visibility","print-color-adjust","quotes","r","resize","rest","rest-after","rest-before","right","rotate","row-gap","ruby-align","ruby-position","scale","scroll-behavior","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-stop","scroll-snap-type","scroll-timeline","scroll-timeline-axis","scroll-timeline-name","scrollbar-color","scrollbar-gutter","scrollbar-width","shape-image-threshold","shape-margin","shape-outside","shape-rendering","speak","speak-as","src","stop-color","stop-opacity","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","tab-size","table-layout","text-align","text-align-all","text-align-last","text-anchor","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip","text-decoration-skip-ink","text-decoration-style","text-decoration-thickness","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-indent","text-justify","text-orientation","text-overflow","text-rendering","text-shadow","text-size-adjust","text-transform","text-underline-offset","text-underline-position","text-wrap","text-wrap-mode","text-wrap-style","timeline-scope","top","touch-action","transform","transform-box","transform-origin","transform-style","transition","transition-behavior","transition-delay","transition-duration","transition-property","transition-timing-function","translate","unicode-bidi","user-modify","user-select","vector-effect","vertical-align","view-timeline","view-timeline-axis","view-timeline-inset","view-timeline-name","view-transition-name","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","white-space","white-space-collapse","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","x","y","z-index","zoom"].sort().reverse(),h=s.concat(c).sort().reverse();function d(p){const m=e(p),y=h,b="and or not only",_="[\\w-]+",S="("+_+"|@\\{"+_+"\\})",N=[],E=[],k=function(Y){return{className:"string",begin:"~?"+Y+".*?"+Y}},w=function(Y,A,$){return{className:Y,begin:A,relevance:$}},O={$pattern:/[a-z-]+/,keyword:b,attribute:o.join(" ")},B={begin:"\\(",end:"\\)",contains:E,keywords:O,relevance:0};E.push(p.C_LINE_COMMENT_MODE,p.C_BLOCK_COMMENT_MODE,k("'"),k('"'),m.CSS_NUMBER_MODE,{begin:"(url|data-uri)\\(",starts:{className:"string",end:"[\\)\\n]",excludeEnd:!0}},m.HEXCOLOR,B,w("variable","@@?"+_,10),w("variable","@\\{"+_+"\\}"),w("built_in","~?`[^`]*?`"),{className:"attribute",begin:_+"\\s*:",end:":",returnBegin:!0,excludeEnd:!0},m.IMPORTANT,{beginKeywords:"and not"},m.FUNCTION_DISPATCH);const R=E.concat({begin:/\{/,end:/\}/,contains:N}),H={beginKeywords:"when",endsWithParent:!0,contains:[{beginKeywords:"and not"}].concat(E)},I={begin:S+"\\s*:",returnBegin:!0,end:/[;}]/,relevance:0,contains:[{begin:/-(webkit|moz|ms|o)-/},m.CSS_VARIABLE,{className:"attribute",begin:"\\b("+f.join("|")+")\\b",end:/(?=:)/,starts:{endsWithParent:!0,illegal:"[<=$]",relevance:0,contains:E}}]},K={className:"keyword",begin:"@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\b",starts:{end:"[;{}]",keywords:O,returnEnd:!0,contains:E,relevance:0}},L={className:"variable",variants:[{begin:"@"+_+"\\s*:",relevance:15},{begin:"@"+_}],starts:{end:"[;}]",returnEnd:!0,contains:R}},q={variants:[{begin:"[\\.#:&\\[>]",end:"[;{}]"},{begin:S,end:/\{/}],returnBegin:!0,returnEnd:!0,illegal:`[<='$"]`,relevance:0,contains:[p.C_LINE_COMMENT_MODE,p.C_BLOCK_COMMENT_MODE,H,w("keyword","all\\b"),w("variable","@\\{"+_+"\\}"),{begin:"\\b("+a.join("|")+")\\b",className:"selector-tag"},m.CSS_NUMBER_MODE,w("selector-tag",S,0),w("selector-id","#"+S),w("selector-class","\\."+S,0),w("selector-tag","&",0),m.ATTRIBUTE_SELECTOR_MODE,{className:"selector-pseudo",begin:":("+s.join("|")+")"},{className:"selector-pseudo",begin:":(:)?("+c.join("|")+")"},{begin:/\(/,end:/\)/,relevance:0,contains:R},{begin:"!important"},m.FUNCTION_DISPATCH]},X={begin:_+`:(:)?(${y.join("|")})`,returnBegin:!0,contains:[q]};return N.push(p.C_LINE_COMMENT_MODE,p.C_BLOCK_COMMENT_MODE,K,L,X,I,q,H,m.FUNCTION_DISPATCH),{name:"Less",case_insensitive:!0,illegal:`[=>'/<($"]`,contains:N}}return Nh=d,Nh}var kh,Ux;function z5(){if(Ux)return kh;Ux=1;function e(n){const i="\\[=*\\[",a="\\]=*\\]",o={begin:i,end:a,contains:["self"]},s=[n.COMMENT("--(?!"+i+")","$"),n.COMMENT("--"+i,a,{contains:[o],relevance:10})];return{name:"Lua",aliases:["pluto"],keywords:{$pattern:n.UNDERSCORE_IDENT_RE,literal:"true false nil",keyword:"and break do else elseif end for goto if in local not or repeat return then until while",built_in:"_G _ENV _VERSION __index __newindex __mode __call __metatable __tostring __len __gc __add __sub __mul __div __mod __pow __concat __unm __eq __lt __le assert collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstring module next pairs pcall print rawequal rawget rawset require select setfenv setmetatable tonumber tostring type unpack xpcall arg self coroutine resume yield status wrap create running debug getupvalue debug sethook getmetatable gethook setmetatable setlocal traceback setfenv getinfo setupvalue getlocal getregistry getfenv io lines write close flush open output type read stderr stdin input stdout popen tmpfile math log max acos huge ldexp pi cos tanh pow deg tan cosh sinh random randomseed frexp ceil floor rad abs sqrt modf asin min mod fmod log10 atan2 exp sin atan os exit setlocale date getenv difftime remove time clock tmpname rename execute package preload loadlib loaded loaders cpath config path seeall string sub upper len gfind rep find match char dump gmatch reverse byte format gsub lower table setn insert getn foreachi maxn foreach concat sort remove"},contains:s.concat([{className:"function",beginKeywords:"function",end:"\\)",contains:[n.inherit(n.TITLE_MODE,{begin:"([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*"}),{className:"params",begin:"\\(",endsWithParent:!0,contains:s}].concat(s)},n.C_NUMBER_MODE,n.APOS_STRING_MODE,n.QUOTE_STRING_MODE,{className:"string",begin:i,end:a,contains:[o],relevance:5}])}}return kh=e,kh}var Th,Hx;function I5(){if(Hx)return Th;Hx=1;function e(n){const i={className:"variable",variants:[{begin:"\\$\\("+n.UNDERSCORE_IDENT_RE+"\\)",contains:[n.BACKSLASH_ESCAPE]},{begin:/\$[@%\{/,end:/\}/},h={scope:"attr",match:/\s+:\s*\w+(\s*\(.*?\))?/},d={scope:"variable",variants:[{begin:/\$\d/},{begin:i.concat(/[$%@](?!")(\^\w\b|#\w+(::\w+)*|\{\w+\}|\w+(::\w*)*)/,"(?![A-Za-z])(?![@$%])")},{begin:/[$%@](?!")[^\s\w{=]|\$=/,relevance:0}],contains:[h]},p={className:"number",variants:[{match:/0?\.[0-9][0-9_]+\b/},{match:/\bv?(0|[1-9][0-9_]*(\.[0-9_]+)?|[1-9][0-9_]*)\b/},{match:/\b0[0-7][0-7_]*\b/},{match:/\b0x[0-9a-fA-F][0-9a-fA-F_]*\b/},{match:/\b0b[0-1][0-1_]*\b/}],relevance:0},m=[n.BACKSLASH_ESCAPE,c,d],y=[/!/,/\//,/\|/,/\?/,/'/,/"/,/#/],b=(N,E,k="\\1")=>{const w=k==="\\1"?k:i.concat(k,E);return i.concat(i.concat("(?:",N,")"),E,/(?:\\.|[^\\\/])*?/,w,/(?:\\.|[^\\\/])*?/,k,o)},_=(N,E,k)=>i.concat(i.concat("(?:",N,")"),E,/(?:\\.|[^\\\/])*?/,k,o),S=[d,n.HASH_COMMENT_MODE,n.COMMENT(/^=\w/,/=cut/,{endsWithParent:!0}),f,{className:"string",contains:m,variants:[{begin:"q[qwxr]?\\s*\\(",end:"\\)",relevance:5},{begin:"q[qwxr]?\\s*\\[",end:"\\]",relevance:5},{begin:"q[qwxr]?\\s*\\{",end:"\\}",relevance:5},{begin:"q[qwxr]?\\s*\\|",end:"\\|",relevance:5},{begin:"q[qwxr]?\\s*<",end:">",relevance:5},{begin:"qw\\s+q",end:"q",relevance:5},{begin:"'",end:"'",contains:[n.BACKSLASH_ESCAPE]},{begin:'"',end:'"'},{begin:"`",end:"`",contains:[n.BACKSLASH_ESCAPE]},{begin:/\{\w+\}/,relevance:0},{begin:"-?\\w+\\s*=>",relevance:0}]},p,{begin:"(\\/\\/|"+n.RE_STARTERS_RE+"|\\b(split|return|print|reverse|grep)\\b)\\s*",keywords:"split return print reverse grep",relevance:0,contains:[n.HASH_COMMENT_MODE,{className:"regexp",variants:[{begin:b("s|tr|y",i.either(...y,{capture:!0}))},{begin:b("s|tr|y","\\(","\\)")},{begin:b("s|tr|y","\\[","\\]")},{begin:b("s|tr|y","\\{","\\}")}],relevance:2},{className:"regexp",variants:[{begin:/(m|qr)\/\//,relevance:0},{begin:_("(?:m|qr)?",/\//,/\//)},{begin:_("m|qr",i.either(...y,{capture:!0}),/\1/)},{begin:_("m|qr",/\(/,/\)/)},{begin:_("m|qr",/\[/,/\]/)},{begin:_("m|qr",/\{/,/\}/)}]}]},{className:"function",beginKeywords:"sub method",end:"(\\s*\\(.*?\\))?[;{]",excludeEnd:!0,relevance:5,contains:[n.TITLE_MODE,h]},{className:"class",beginKeywords:"class",end:"[;{]",excludeEnd:!0,relevance:5,contains:[n.TITLE_MODE,h,p]},{begin:"-\\w\\b",relevance:0},{begin:"^__DATA__$",end:"^__END__$",subLanguage:"mojolicious",contains:[{begin:"^@@.*",end:"$",className:"comment"}]}];return c.contains=S,f.contains=S,{name:"Perl",aliases:["pl","pm"],keywords:s,contains:S}}return Ah=e,Ah}var Ch,qx;function B5(){if(qx)return Ch;qx=1;function e(n){const i={className:"built_in",begin:"\\b(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)\\w+"},a=/[a-zA-Z@][a-zA-Z0-9_]*/,h={"variable.language":["this","super"],$pattern:a,keyword:["while","export","sizeof","typedef","const","struct","for","union","volatile","static","mutable","if","do","return","goto","enum","else","break","extern","asm","case","default","register","explicit","typename","switch","continue","inline","readonly","assign","readwrite","self","@synchronized","id","typeof","nonatomic","IBOutlet","IBAction","strong","weak","copy","in","out","inout","bycopy","byref","oneway","__strong","__weak","__block","__autoreleasing","@private","@protected","@public","@try","@property","@end","@throw","@catch","@finally","@autoreleasepool","@synthesize","@dynamic","@selector","@optional","@required","@encode","@package","@import","@defs","@compatibility_alias","__bridge","__bridge_transfer","__bridge_retained","__bridge_retain","__covariant","__contravariant","__kindof","_Nonnull","_Nullable","_Null_unspecified","__FUNCTION__","__PRETTY_FUNCTION__","__attribute__","getter","setter","retain","unsafe_unretained","nonnull","nullable","null_unspecified","null_resettable","class","instancetype","NS_DESIGNATED_INITIALIZER","NS_UNAVAILABLE","NS_REQUIRES_SUPER","NS_RETURNS_INNER_POINTER","NS_INLINE","NS_AVAILABLE","NS_DEPRECATED","NS_ENUM","NS_OPTIONS","NS_SWIFT_UNAVAILABLE","NS_ASSUME_NONNULL_BEGIN","NS_ASSUME_NONNULL_END","NS_REFINED_FOR_SWIFT","NS_SWIFT_NAME","NS_SWIFT_NOTHROW","NS_DURING","NS_HANDLER","NS_ENDHANDLER","NS_VALUERETURN","NS_VOIDRETURN"],literal:["false","true","FALSE","TRUE","nil","YES","NO","NULL"],built_in:["dispatch_once_t","dispatch_queue_t","dispatch_sync","dispatch_async","dispatch_once"],type:["int","float","char","unsigned","signed","short","long","double","wchar_t","unichar","void","bool","BOOL","id|0","_Bool"]},d={$pattern:a,keyword:["@interface","@class","@protocol","@implementation"]};return{name:"Objective-C",aliases:["mm","objc","obj-c","obj-c++","objective-c++"],keywords:h,illegal:"/,end:/$/,illegal:"\\n"},n.C_LINE_COMMENT_MODE,n.C_BLOCK_COMMENT_MODE]},{className:"class",begin:"("+d.keyword.join("|")+")\\b",end:/(\{|$)/,excludeEnd:!0,keywords:d,contains:[n.UNDERSCORE_TITLE_MODE]},{begin:"\\."+n.UNDERSCORE_IDENT_RE,relevance:0}]}}return Ch=e,Ch}var Mh,Px;function U5(){if(Px)return Mh;Px=1;function e(n){const i=n.regex,a=/(?![A-Za-z0-9])(?![$])/,o=i.concat(/[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/,a),s=i.concat(/(\\?[A-Z][a-z0-9_\x7f-\xff]+|\\?[A-Z]+(?=[A-Z][a-z0-9_\x7f-\xff])){1,}/,a),c=i.concat(/[A-Z]+/,a),f={scope:"variable",match:"\\$+"+o},h={scope:"meta",variants:[{begin:/<\?php/,relevance:10},{begin:/<\?=/},{begin:/<\?/,relevance:.1},{begin:/\?>/}]},d={scope:"subst",variants:[{begin:/\$\w+/},{begin:/\{\$/,end:/\}/}]},p=n.inherit(n.APOS_STRING_MODE,{illegal:null}),m=n.inherit(n.QUOTE_STRING_MODE,{illegal:null,contains:n.QUOTE_STRING_MODE.contains.concat(d)}),y={begin:/<<<[ \t]*(?:(\w+)|"(\w+)")\n/,end:/[ \t]*(\w+)\b/,contains:n.QUOTE_STRING_MODE.contains.concat(d),"on:begin":($,M)=>{M.data._beginMatch=$[1]||$[2]},"on:end":($,M)=>{M.data._beginMatch!==$[1]&&M.ignoreMatch()}},b=n.END_SAME_AS_BEGIN({begin:/<<<[ \t]*'(\w+)'\n/,end:/[ \t]*(\w+)\b/}),_=`[ +]`,S={scope:"string",variants:[m,p,y,b]},N={scope:"number",variants:[{begin:"\\b0[bB][01]+(?:_[01]+)*\\b"},{begin:"\\b0[oO][0-7]+(?:_[0-7]+)*\\b"},{begin:"\\b0[xX][\\da-fA-F]+(?:_[\\da-fA-F]+)*\\b"},{begin:"(?:\\b\\d+(?:_\\d+)*(\\.(?:\\d+(?:_\\d+)*))?|\\B\\.\\d+)(?:[eE][+-]?\\d+)?"}],relevance:0},E=["false","null","true"],k=["__CLASS__","__DIR__","__FILE__","__FUNCTION__","__COMPILER_HALT_OFFSET__","__LINE__","__METHOD__","__NAMESPACE__","__TRAIT__","die","echo","exit","include","include_once","print","require","require_once","array","abstract","and","as","binary","bool","boolean","break","callable","case","catch","class","clone","const","continue","declare","default","do","double","else","elseif","empty","enddeclare","endfor","endforeach","endif","endswitch","endwhile","enum","eval","extends","final","finally","float","for","foreach","from","global","goto","if","implements","instanceof","insteadof","int","integer","interface","isset","iterable","list","match|0","mixed","new","never","object","or","private","protected","public","readonly","real","return","string","switch","throw","trait","try","unset","use","var","void","while","xor","yield"],w=["Error|0","AppendIterator","ArgumentCountError","ArithmeticError","ArrayIterator","ArrayObject","AssertionError","BadFunctionCallException","BadMethodCallException","CachingIterator","CallbackFilterIterator","CompileError","Countable","DirectoryIterator","DivisionByZeroError","DomainException","EmptyIterator","ErrorException","Exception","FilesystemIterator","FilterIterator","GlobIterator","InfiniteIterator","InvalidArgumentException","IteratorIterator","LengthException","LimitIterator","LogicException","MultipleIterator","NoRewindIterator","OutOfBoundsException","OutOfRangeException","OuterIterator","OverflowException","ParentIterator","ParseError","RangeException","RecursiveArrayIterator","RecursiveCachingIterator","RecursiveCallbackFilterIterator","RecursiveDirectoryIterator","RecursiveFilterIterator","RecursiveIterator","RecursiveIteratorIterator","RecursiveRegexIterator","RecursiveTreeIterator","RegexIterator","RuntimeException","SeekableIterator","SplDoublyLinkedList","SplFileInfo","SplFileObject","SplFixedArray","SplHeap","SplMaxHeap","SplMinHeap","SplObjectStorage","SplObserver","SplPriorityQueue","SplQueue","SplStack","SplSubject","SplTempFileObject","TypeError","UnderflowException","UnexpectedValueException","UnhandledMatchError","ArrayAccess","BackedEnum","Closure","Fiber","Generator","Iterator","IteratorAggregate","Serializable","Stringable","Throwable","Traversable","UnitEnum","WeakReference","WeakMap","Directory","__PHP_Incomplete_Class","parent","php_user_filter","self","static","stdClass"],B={keyword:k,literal:($=>{const M=[];return $.forEach(j=>{M.push(j),j.toLowerCase()===j?M.push(j.toUpperCase()):M.push(j.toLowerCase())}),M})(E),built_in:w},R=$=>$.map(M=>M.replace(/\|\d+$/,"")),H={variants:[{match:[/new/,i.concat(_,"+"),i.concat("(?!",R(w).join("\\b|"),"\\b)"),s],scope:{1:"keyword",4:"title.class"}}]},I=i.concat(o,"\\b(?!\\()"),K={variants:[{match:[i.concat(/::/,i.lookahead(/(?!class\b)/)),I],scope:{2:"variable.constant"}},{match:[/::/,/class/],scope:{2:"variable.language"}},{match:[s,i.concat(/::/,i.lookahead(/(?!class\b)/)),I],scope:{1:"title.class",3:"variable.constant"}},{match:[s,i.concat("::",i.lookahead(/(?!class\b)/))],scope:{1:"title.class"}},{match:[s,/::/,/class/],scope:{1:"title.class",3:"variable.language"}}]},L={scope:"attr",match:i.concat(o,i.lookahead(":"),i.lookahead(/(?!::)/))},q={relevance:0,begin:/\(/,end:/\)/,keywords:B,contains:[L,f,K,n.C_BLOCK_COMMENT_MODE,S,N,H]},X={relevance:0,match:[/\b/,i.concat("(?!fn\\b|function\\b|",R(k).join("\\b|"),"|",R(w).join("\\b|"),"\\b)"),o,i.concat(_,"*"),i.lookahead(/(?=\()/)],scope:{3:"title.function.invoke"},contains:[q]};q.contains.push(X);const Y=[L,K,n.C_BLOCK_COMMENT_MODE,S,N,H],A={begin:i.concat(/#\[\s*\\?/,i.either(s,c)),beginScope:"meta",end:/]/,endScope:"meta",keywords:{literal:E,keyword:["new","array"]},contains:[{begin:/\[/,end:/]/,keywords:{literal:E,keyword:["new","array"]},contains:["self",...Y]},...Y,{scope:"meta",variants:[{match:s},{match:c}]}]};return{case_insensitive:!1,keywords:B,contains:[A,n.HASH_COMMENT_MODE,n.COMMENT("//","$"),n.COMMENT("/\\*","\\*/",{contains:[{scope:"doctag",match:"@[A-Za-z]+"}]}),{match:/__halt_compiler\(\);/,keywords:"__halt_compiler",starts:{scope:"comment",end:n.MATCH_NOTHING_RE,contains:[{match:/\?>/,scope:"meta",endsParent:!0}]}},h,{scope:"variable.language",match:/\$this\b/},f,X,K,{match:[/const/,/\s/,o],scope:{1:"keyword",3:"variable.constant"}},H,{scope:"function",relevance:0,beginKeywords:"fn function",end:/[;{]/,excludeEnd:!0,illegal:"[$%\\[]",contains:[{beginKeywords:"use"},n.UNDERSCORE_TITLE_MODE,{begin:"=>",endsParent:!0},{scope:"params",begin:"\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0,keywords:B,contains:["self",A,f,K,n.C_BLOCK_COMMENT_MODE,S,N]}]},{scope:"class",variants:[{beginKeywords:"enum",illegal:/[($"]/},{beginKeywords:"class interface trait",illegal:/[:($"]/}],relevance:0,end:/\{/,excludeEnd:!0,contains:[{beginKeywords:"extends implements"},n.UNDERSCORE_TITLE_MODE]},{beginKeywords:"namespace",relevance:0,end:";",illegal:/[.']/,contains:[n.inherit(n.UNDERSCORE_TITLE_MODE,{scope:"title.class"})]},{beginKeywords:"use",relevance:0,end:";",contains:[{match:/\b(as|const|function)\b/,scope:"keyword"},n.UNDERSCORE_TITLE_MODE]},S,N]}}return Mh=e,Mh}var Oh,Fx;function H5(){if(Fx)return Oh;Fx=1;function e(n){return{name:"PHP template",subLanguage:"xml",contains:[{begin:/<\?(php|=)?/,end:/\?>/,subLanguage:"php",contains:[{begin:"/\\*",end:"\\*/",skip:!0},{begin:'b"',end:'"',skip:!0},{begin:"b'",end:"'",skip:!0},n.inherit(n.APOS_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0}),n.inherit(n.QUOTE_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0})]}]}}return Oh=e,Oh}var Rh,Gx;function $5(){if(Gx)return Rh;Gx=1;function e(n){return{name:"Plain text",aliases:["text","txt"],disableAutodetect:!0}}return Rh=e,Rh}var Dh,Vx;function q5(){if(Vx)return Dh;Vx=1;function e(n){const i=n.regex,a=new RegExp("[\\p{XID_Start}_]\\p{XID_Continue}*","u"),o=["and","as","assert","async","await","break","case","class","continue","def","del","elif","else","except","finally","for","from","global","if","import","in","is","lambda","match","nonlocal|10","not","or","pass","raise","return","try","while","with","yield"],h={$pattern:/[A-Za-z]\w+|__\w+__/,keyword:o,built_in:["__import__","abs","all","any","ascii","bin","bool","breakpoint","bytearray","bytes","callable","chr","classmethod","compile","complex","delattr","dict","dir","divmod","enumerate","eval","exec","filter","float","format","frozenset","getattr","globals","hasattr","hash","help","hex","id","input","int","isinstance","issubclass","iter","len","list","locals","map","max","memoryview","min","next","object","oct","open","ord","pow","print","property","range","repr","reversed","round","set","setattr","slice","sorted","staticmethod","str","sum","super","tuple","type","vars","zip"],literal:["__debug__","Ellipsis","False","None","NotImplemented","True"],type:["Any","Callable","Coroutine","Dict","List","Literal","Generic","Optional","Sequence","Set","Tuple","Type","Union"]},d={className:"meta",begin:/^(>>>|\.\.\.) /},p={className:"subst",begin:/\{/,end:/\}/,keywords:h,illegal:/#/},m={begin:/\{\{/,relevance:0},y={className:"string",contains:[n.BACKSLASH_ESCAPE],variants:[{begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?'''/,end:/'''/,contains:[n.BACKSLASH_ESCAPE,d],relevance:10},{begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?"""/,end:/"""/,contains:[n.BACKSLASH_ESCAPE,d],relevance:10},{begin:/([fF][rR]|[rR][fF]|[fF])'''/,end:/'''/,contains:[n.BACKSLASH_ESCAPE,d,m,p]},{begin:/([fF][rR]|[rR][fF]|[fF])"""/,end:/"""/,contains:[n.BACKSLASH_ESCAPE,d,m,p]},{begin:/([uU]|[rR])'/,end:/'/,relevance:10},{begin:/([uU]|[rR])"/,end:/"/,relevance:10},{begin:/([bB]|[bB][rR]|[rR][bB])'/,end:/'/},{begin:/([bB]|[bB][rR]|[rR][bB])"/,end:/"/},{begin:/([fF][rR]|[rR][fF]|[fF])'/,end:/'/,contains:[n.BACKSLASH_ESCAPE,m,p]},{begin:/([fF][rR]|[rR][fF]|[fF])"/,end:/"/,contains:[n.BACKSLASH_ESCAPE,m,p]},n.APOS_STRING_MODE,n.QUOTE_STRING_MODE]},b="[0-9](_?[0-9])*",_=`(\\b(${b}))?\\.(${b})|\\b(${b})\\.`,S=`\\b|${o.join("|")}`,N={className:"number",relevance:0,variants:[{begin:`(\\b(${b})|(${_}))[eE][+-]?(${b})[jJ]?(?=${S})`},{begin:`(${_})[jJ]?`},{begin:`\\b([1-9](_?[0-9])*|0+(_?0)*)[lLjJ]?(?=${S})`},{begin:`\\b0[bB](_?[01])+[lL]?(?=${S})`},{begin:`\\b0[oO](_?[0-7])+[lL]?(?=${S})`},{begin:`\\b0[xX](_?[0-9a-fA-F])+[lL]?(?=${S})`},{begin:`\\b(${b})[jJ](?=${S})`}]},E={className:"comment",begin:i.lookahead(/# type:/),end:/$/,keywords:h,contains:[{begin:/# type:/},{begin:/#/,end:/\b\B/,endsWithParent:!0}]},k={className:"params",variants:[{className:"",begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:h,contains:["self",d,N,y,n.HASH_COMMENT_MODE]}]};return p.contains=[y,N,d],{name:"Python",aliases:["py","gyp","ipython"],unicodeRegex:!0,keywords:h,illegal:/(<\/|\?)|=>/,contains:[d,N,{scope:"variable.language",match:/\bself\b/},{beginKeywords:"if",relevance:0},{match:/\bor\b/,scope:"keyword"},y,E,n.HASH_COMMENT_MODE,{match:[/\bdef/,/\s+/,a],scope:{1:"keyword",3:"title.function"},contains:[k]},{variants:[{match:[/\bclass/,/\s+/,a,/\s*/,/\(\s*/,a,/\s*\)/]},{match:[/\bclass/,/\s+/,a]}],scope:{1:"keyword",3:"title.class",6:"title.class.inherited"}},{className:"meta",begin:/^[\t ]*@/,end:/(?=#)|$/,contains:[N,k,y]}]}}return Dh=e,Dh}var Lh,Yx;function P5(){if(Yx)return Lh;Yx=1;function e(n){return{aliases:["pycon"],contains:[{className:"meta.prompt",starts:{end:/ |$/,starts:{end:"$",subLanguage:"python"}},variants:[{begin:/^>>>(?=[ ]|$)/},{begin:/^\.\.\.(?=[ ]|$)/}]}]}}return Lh=e,Lh}var zh,Xx;function F5(){if(Xx)return zh;Xx=1;function e(n){const i=n.regex,a=/(?:(?:[a-zA-Z]|\.[._a-zA-Z])[._a-zA-Z0-9]*)|\.(?!\d)/,o=i.either(/0[xX][0-9a-fA-F]+\.[0-9a-fA-F]*[pP][+-]?\d+i?/,/0[xX][0-9a-fA-F]+(?:[pP][+-]?\d+)?[Li]?/,/(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?[Li]?/),s=/[=!<>:]=|\|\||&&|:::?|<-|<<-|->>|->|\|>|[-+*\/?!$&|:<=>@^~]|\*\*/,c=i.either(/[()]/,/[{}]/,/\[\[/,/[[\]]/,/\\/,/,/);return{name:"R",keywords:{$pattern:a,keyword:"function if in break next repeat else for while",literal:"NULL NA TRUE FALSE Inf NaN NA_integer_|10 NA_real_|10 NA_character_|10 NA_complex_|10",built_in:"LETTERS letters month.abb month.name pi T F abs acos acosh all any anyNA Arg as.call as.character as.complex as.double as.environment as.integer as.logical as.null.default as.numeric as.raw asin asinh atan atanh attr attributes baseenv browser c call ceiling class Conj cos cosh cospi cummax cummin cumprod cumsum digamma dim dimnames emptyenv exp expression floor forceAndCall gamma gc.time globalenv Im interactive invisible is.array is.atomic is.call is.character is.complex is.double is.environment is.expression is.finite is.function is.infinite is.integer is.language is.list is.logical is.matrix is.na is.name is.nan is.null is.numeric is.object is.pairlist is.raw is.recursive is.single is.symbol lazyLoadDBfetch length lgamma list log max min missing Mod names nargs nzchar oldClass on.exit pos.to.env proc.time prod quote range Re rep retracemem return round seq_along seq_len seq.int sign signif sin sinh sinpi sqrt standardGeneric substitute sum switch tan tanh tanpi tracemem trigamma trunc unclass untracemem UseMethod xtfrm"},contains:[n.COMMENT(/#'/,/$/,{contains:[{scope:"doctag",match:/@examples/,starts:{end:i.lookahead(i.either(/\n^#'\s*(?=@[a-zA-Z]+)/,/\n^(?!#')/)),endsParent:!0}},{scope:"doctag",begin:"@param",end:/$/,contains:[{scope:"variable",variants:[{match:a},{match:/`(?:\\.|[^`\\])+`/}],endsParent:!0}]},{scope:"doctag",match:/@[a-zA-Z]+/},{scope:"keyword",match:/\\[a-zA-Z]+/}]}),n.HASH_COMMENT_MODE,{scope:"string",contains:[n.BACKSLASH_ESCAPE],variants:[n.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\(/,end:/\)(-*)"/}),n.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\{/,end:/\}(-*)"/}),n.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\[/,end:/\](-*)"/}),n.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\(/,end:/\)(-*)'/}),n.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\{/,end:/\}(-*)'/}),n.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\[/,end:/\](-*)'/}),{begin:'"',end:'"',relevance:0},{begin:"'",end:"'",relevance:0}]},{relevance:0,variants:[{scope:{1:"operator",2:"number"},match:[s,o]},{scope:{1:"operator",2:"number"},match:[/%[^%]*%/,o]},{scope:{1:"punctuation",2:"number"},match:[c,o]},{scope:{2:"number"},match:[/[^a-zA-Z0-9._]|^/,o]}]},{scope:{3:"operator"},match:[a,/\s+/,/<-/,/\s+/]},{scope:"operator",relevance:0,variants:[{match:s},{match:/%[^%]*%/}]},{scope:"punctuation",relevance:0,match:c},{begin:"`",end:"`",contains:[{begin:/\\./}]}]}}return zh=e,zh}var Ih,Kx;function G5(){if(Kx)return Ih;Kx=1;function e(n){const i=n.regex,a=/(r#)?/,o=i.concat(a,n.UNDERSCORE_IDENT_RE),s=i.concat(a,n.IDENT_RE),c={className:"title.function.invoke",relevance:0,begin:i.concat(/\b/,/(?!let|for|while|if|else|match\b)/,s,i.lookahead(/\s*\(/))},f="([ui](8|16|32|64|128|size)|f(32|64))?",h=["abstract","as","async","await","become","box","break","const","continue","crate","do","dyn","else","enum","extern","false","final","fn","for","if","impl","in","let","loop","macro","match","mod","move","mut","override","priv","pub","ref","return","self","Self","static","struct","super","trait","true","try","type","typeof","union","unsafe","unsized","use","virtual","where","while","yield"],d=["true","false","Some","None","Ok","Err"],p=["drop ","Copy","Send","Sized","Sync","Drop","Fn","FnMut","FnOnce","ToOwned","Clone","Debug","PartialEq","PartialOrd","Eq","Ord","AsRef","AsMut","Into","From","Default","Iterator","Extend","IntoIterator","DoubleEndedIterator","ExactSizeIterator","SliceConcatExt","ToString","assert!","assert_eq!","bitflags!","bytes!","cfg!","col!","concat!","concat_idents!","debug_assert!","debug_assert_eq!","env!","eprintln!","panic!","file!","format!","format_args!","include_bytes!","include_str!","line!","local_data_key!","module_path!","option_env!","print!","println!","select!","stringify!","try!","unimplemented!","unreachable!","vec!","write!","writeln!","macro_rules!","assert_ne!","debug_assert_ne!"],m=["i8","i16","i32","i64","i128","isize","u8","u16","u32","u64","u128","usize","f32","f64","str","char","bool","Box","Option","Result","String","Vec"];return{name:"Rust",aliases:["rs"],keywords:{$pattern:n.IDENT_RE+"!?",type:m,keyword:h,literal:d,built_in:p},illegal:""},c]}}return Ih=e,Ih}var jh,Zx;function V5(){if(Zx)return jh;Zx=1;const e=d=>({IMPORTANT:{scope:"meta",begin:"!important"},BLOCK_COMMENT:d.C_BLOCK_COMMENT_MODE,HEXCOLOR:{scope:"number",begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/},FUNCTION_DISPATCH:{className:"built_in",begin:/[\w-]+(?=\()/},ATTRIBUTE_SELECTOR_MODE:{scope:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",contains:[d.APOS_STRING_MODE,d.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{scope:"number",begin:d.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},CSS_VARIABLE:{className:"attr",begin:/--[A-Za-z_][A-Za-z0-9_-]*/}}),n=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","optgroup","option","p","picture","q","quote","samp","section","select","source","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"],i=["defs","g","marker","mask","pattern","svg","switch","symbol","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feFlood","feGaussianBlur","feImage","feMerge","feMorphology","feOffset","feSpecularLighting","feTile","feTurbulence","linearGradient","radialGradient","stop","circle","ellipse","image","line","path","polygon","polyline","rect","text","use","textPath","tspan","foreignObject","clipPath"],a=[...n,...i],o=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"].sort().reverse(),s=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"].sort().reverse(),c=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"].sort().reverse(),f=["accent-color","align-content","align-items","align-self","alignment-baseline","all","anchor-name","animation","animation-composition","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-range","animation-range-end","animation-range-start","animation-timeline","animation-timing-function","appearance","aspect-ratio","backdrop-filter","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-position-x","background-position-y","background-repeat","background-size","baseline-shift","block-size","border","border-block","border-block-color","border-block-end","border-block-end-color","border-block-end-style","border-block-end-width","border-block-start","border-block-start-color","border-block-start-style","border-block-start-width","border-block-style","border-block-width","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-end-end-radius","border-end-start-radius","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-inline","border-inline-color","border-inline-end","border-inline-end-color","border-inline-end-style","border-inline-end-width","border-inline-start","border-inline-start-color","border-inline-start-style","border-inline-start-width","border-inline-style","border-inline-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-start-end-radius","border-start-start-radius","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-align","box-decoration-break","box-direction","box-flex","box-flex-group","box-lines","box-ordinal-group","box-orient","box-pack","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","color-scheme","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","contain-intrinsic-block-size","contain-intrinsic-height","contain-intrinsic-inline-size","contain-intrinsic-size","contain-intrinsic-width","container","container-name","container-type","content","content-visibility","counter-increment","counter-reset","counter-set","cue","cue-after","cue-before","cursor","cx","cy","direction","display","dominant-baseline","empty-cells","enable-background","field-sizing","fill","fill-opacity","fill-rule","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","flood-color","flood-opacity","flow","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-optical-sizing","font-palette","font-size","font-size-adjust","font-smooth","font-smoothing","font-stretch","font-style","font-synthesis","font-synthesis-position","font-synthesis-small-caps","font-synthesis-style","font-synthesis-weight","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian","font-variant-emoji","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","forced-color-adjust","gap","glyph-orientation-horizontal","glyph-orientation-vertical","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphenate-character","hyphenate-limit-chars","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","initial-letter","initial-letter-align","inline-size","inset","inset-area","inset-block","inset-block-end","inset-block-start","inset-inline","inset-inline-end","inset-inline-start","isolation","justify-content","justify-items","justify-self","kerning","left","letter-spacing","lighting-color","line-break","line-height","line-height-step","list-style","list-style-image","list-style-position","list-style-type","margin","margin-block","margin-block-end","margin-block-start","margin-bottom","margin-inline","margin-inline-end","margin-inline-start","margin-left","margin-right","margin-top","margin-trim","marker","marker-end","marker-mid","marker-start","marks","mask","mask-border","mask-border-mode","mask-border-outset","mask-border-repeat","mask-border-slice","mask-border-source","mask-border-width","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","masonry-auto-flow","math-depth","math-shift","math-style","max-block-size","max-height","max-inline-size","max-width","min-block-size","min-height","min-inline-size","min-width","mix-blend-mode","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","offset","offset-anchor","offset-distance","offset-path","offset-position","offset-rotate","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-anchor","overflow-block","overflow-clip-margin","overflow-inline","overflow-wrap","overflow-x","overflow-y","overlay","overscroll-behavior","overscroll-behavior-block","overscroll-behavior-inline","overscroll-behavior-x","overscroll-behavior-y","padding","padding-block","padding-block-end","padding-block-start","padding-bottom","padding-inline","padding-inline-end","padding-inline-start","padding-left","padding-right","padding-top","page","page-break-after","page-break-before","page-break-inside","paint-order","pause","pause-after","pause-before","perspective","perspective-origin","place-content","place-items","place-self","pointer-events","position","position-anchor","position-visibility","print-color-adjust","quotes","r","resize","rest","rest-after","rest-before","right","rotate","row-gap","ruby-align","ruby-position","scale","scroll-behavior","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-stop","scroll-snap-type","scroll-timeline","scroll-timeline-axis","scroll-timeline-name","scrollbar-color","scrollbar-gutter","scrollbar-width","shape-image-threshold","shape-margin","shape-outside","shape-rendering","speak","speak-as","src","stop-color","stop-opacity","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","tab-size","table-layout","text-align","text-align-all","text-align-last","text-anchor","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip","text-decoration-skip-ink","text-decoration-style","text-decoration-thickness","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-indent","text-justify","text-orientation","text-overflow","text-rendering","text-shadow","text-size-adjust","text-transform","text-underline-offset","text-underline-position","text-wrap","text-wrap-mode","text-wrap-style","timeline-scope","top","touch-action","transform","transform-box","transform-origin","transform-style","transition","transition-behavior","transition-delay","transition-duration","transition-property","transition-timing-function","translate","unicode-bidi","user-modify","user-select","vector-effect","vertical-align","view-timeline","view-timeline-axis","view-timeline-inset","view-timeline-name","view-transition-name","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","white-space","white-space-collapse","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","x","y","z-index","zoom"].sort().reverse();function h(d){const p=e(d),m=c,y=s,b="@[a-z-]+",_="and or not only",N={className:"variable",begin:"(\\$"+"[a-zA-Z-][a-zA-Z0-9_-]*"+")\\b",relevance:0};return{name:"SCSS",case_insensitive:!0,illegal:"[=/|']",contains:[d.C_LINE_COMMENT_MODE,d.C_BLOCK_COMMENT_MODE,p.CSS_NUMBER_MODE,{className:"selector-id",begin:"#[A-Za-z0-9_-]+",relevance:0},{className:"selector-class",begin:"\\.[A-Za-z0-9_-]+",relevance:0},p.ATTRIBUTE_SELECTOR_MODE,{className:"selector-tag",begin:"\\b("+a.join("|")+")\\b",relevance:0},{className:"selector-pseudo",begin:":("+y.join("|")+")"},{className:"selector-pseudo",begin:":(:)?("+m.join("|")+")"},N,{begin:/\(/,end:/\)/,contains:[p.CSS_NUMBER_MODE]},p.CSS_VARIABLE,{className:"attribute",begin:"\\b("+f.join("|")+")\\b"},{begin:"\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\b"},{begin:/:/,end:/[;}{]/,relevance:0,contains:[p.BLOCK_COMMENT,N,p.HEXCOLOR,p.CSS_NUMBER_MODE,d.QUOTE_STRING_MODE,d.APOS_STRING_MODE,p.IMPORTANT,p.FUNCTION_DISPATCH]},{begin:"@(page|font-face)",keywords:{$pattern:b,keyword:"@page @font-face"}},{begin:"@",end:"[{;]",returnBegin:!0,keywords:{$pattern:/[a-z-]+/,keyword:_,attribute:o.join(" ")},contains:[{begin:b,className:"keyword"},{begin:/[a-z-]+(?=:)/,className:"attribute"},N,d.QUOTE_STRING_MODE,d.APOS_STRING_MODE,p.HEXCOLOR,p.CSS_NUMBER_MODE]},p.FUNCTION_DISPATCH]}}return jh=h,jh}var Bh,Qx;function Y5(){if(Qx)return Bh;Qx=1;function e(n){return{name:"Shell Session",aliases:["console","shellsession"],contains:[{className:"meta.prompt",begin:/^\s{0,3}[/~\w\d[\]()@-]*[>%$#][ ]?/,starts:{end:/[^\\](?=\s*$)/,subLanguage:"bash"}}]}}return Bh=e,Bh}var Uh,Wx;function X5(){if(Wx)return Uh;Wx=1;function e(n){const i=n.regex,a=n.COMMENT("--","$"),o={scope:"string",variants:[{begin:/'/,end:/'/,contains:[{match:/''/}]}]},s={begin:/"/,end:/"/,contains:[{match:/""/}]},c=["true","false","unknown"],f=["double precision","large object","with timezone","without timezone"],h=["bigint","binary","blob","boolean","char","character","clob","date","dec","decfloat","decimal","float","int","integer","interval","nchar","nclob","national","numeric","real","row","smallint","time","timestamp","varchar","varying","varbinary"],d=["add","asc","collation","desc","final","first","last","view"],p=["abs","acos","all","allocate","alter","and","any","are","array","array_agg","array_max_cardinality","as","asensitive","asin","asymmetric","at","atan","atomic","authorization","avg","begin","begin_frame","begin_partition","between","bigint","binary","blob","boolean","both","by","call","called","cardinality","cascaded","case","cast","ceil","ceiling","char","char_length","character","character_length","check","classifier","clob","close","coalesce","collate","collect","column","commit","condition","connect","constraint","contains","convert","copy","corr","corresponding","cos","cosh","count","covar_pop","covar_samp","create","cross","cube","cume_dist","current","current_catalog","current_date","current_default_transform_group","current_path","current_role","current_row","current_schema","current_time","current_timestamp","current_path","current_role","current_transform_group_for_type","current_user","cursor","cycle","date","day","deallocate","dec","decimal","decfloat","declare","default","define","delete","dense_rank","deref","describe","deterministic","disconnect","distinct","double","drop","dynamic","each","element","else","empty","end","end_frame","end_partition","end-exec","equals","escape","every","except","exec","execute","exists","exp","external","extract","false","fetch","filter","first_value","float","floor","for","foreign","frame_row","free","from","full","function","fusion","get","global","grant","group","grouping","groups","having","hold","hour","identity","in","indicator","initial","inner","inout","insensitive","insert","int","integer","intersect","intersection","interval","into","is","join","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","language","large","last_value","lateral","lead","leading","left","like","like_regex","listagg","ln","local","localtime","localtimestamp","log","log10","lower","match","match_number","match_recognize","matches","max","member","merge","method","min","minute","mod","modifies","module","month","multiset","national","natural","nchar","nclob","new","no","none","normalize","not","nth_value","ntile","null","nullif","numeric","octet_length","occurrences_regex","of","offset","old","omit","on","one","only","open","or","order","out","outer","over","overlaps","overlay","parameter","partition","pattern","per","percent","percent_rank","percentile_cont","percentile_disc","period","portion","position","position_regex","power","precedes","precision","prepare","primary","procedure","ptf","range","rank","reads","real","recursive","ref","references","referencing","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","release","result","return","returns","revoke","right","rollback","rollup","row","row_number","rows","running","savepoint","scope","scroll","search","second","seek","select","sensitive","session_user","set","show","similar","sin","sinh","skip","smallint","some","specific","specifictype","sql","sqlexception","sqlstate","sqlwarning","sqrt","start","static","stddev_pop","stddev_samp","submultiset","subset","substring","substring_regex","succeeds","sum","symmetric","system","system_time","system_user","table","tablesample","tan","tanh","then","time","timestamp","timezone_hour","timezone_minute","to","trailing","translate","translate_regex","translation","treat","trigger","trim","trim_array","true","truncate","uescape","union","unique","unknown","unnest","update","upper","user","using","value","values","value_of","var_pop","var_samp","varbinary","varchar","varying","versioning","when","whenever","where","width_bucket","window","with","within","without","year"],m=["abs","acos","array_agg","asin","atan","avg","cast","ceil","ceiling","coalesce","corr","cos","cosh","count","covar_pop","covar_samp","cume_dist","dense_rank","deref","element","exp","extract","first_value","floor","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","last_value","lead","listagg","ln","log","log10","lower","max","min","mod","nth_value","ntile","nullif","percent_rank","percentile_cont","percentile_disc","position","position_regex","power","rank","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","row_number","sin","sinh","sqrt","stddev_pop","stddev_samp","substring","substring_regex","sum","tan","tanh","translate","translate_regex","treat","trim","trim_array","unnest","upper","value_of","var_pop","var_samp","width_bucket"],y=["current_catalog","current_date","current_default_transform_group","current_path","current_role","current_schema","current_transform_group_for_type","current_user","session_user","system_time","system_user","current_time","localtime","current_timestamp","localtimestamp"],b=["create table","insert into","primary key","foreign key","not null","alter table","add constraint","grouping sets","on overflow","character set","respect nulls","ignore nulls","nulls first","nulls last","depth first","breadth first"],_=m,S=[...p,...d].filter(R=>!m.includes(R)),N={scope:"variable",match:/@[a-z0-9][a-z0-9_]*/},E={scope:"operator",match:/[-+*/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?/,relevance:0},k={match:i.concat(/\b/,i.either(..._),/\s*\(/),relevance:0,keywords:{built_in:_}};function w(R){return i.concat(/\b/,i.either(...R.map(H=>H.replace(/\s+/,"\\s+"))),/\b/)}const O={scope:"keyword",match:w(b),relevance:0};function B(R,{exceptions:H,when:I}={}){const K=I;return H=H||[],R.map(L=>L.match(/\|\d+$/)||H.includes(L)?L:K(L)?`${L}|0`:L)}return{name:"SQL",case_insensitive:!0,illegal:/[{}]|<\//,keywords:{$pattern:/\b[\w\.]+/,keyword:B(S,{when:R=>R.length<3}),literal:c,type:h,built_in:y},contains:[{scope:"type",match:w(f)},O,k,N,o,s,n.C_NUMBER_MODE,n.C_BLOCK_COMMENT_MODE,a,E]}}return Uh=e,Uh}var Hh,Jx;function K5(){if(Jx)return Hh;Jx=1;function e(I){return I?typeof I=="string"?I:I.source:null}function n(I){return i("(?=",I,")")}function i(...I){return I.map(L=>e(L)).join("")}function a(I){const K=I[I.length-1];return typeof K=="object"&&K.constructor===Object?(I.splice(I.length-1,1),K):{}}function o(...I){return"("+(a(I).capture?"":"?:")+I.map(q=>e(q)).join("|")+")"}const s=I=>i(/\b/,I,/\w$/.test(I)?/\b/:/\B/),c=["Protocol","Type"].map(s),f=["init","self"].map(s),h=["Any","Self"],d=["actor","any","associatedtype","async","await",/as\?/,/as!/,"as","borrowing","break","case","catch","class","consume","consuming","continue","convenience","copy","default","defer","deinit","didSet","distributed","do","dynamic","each","else","enum","extension","fallthrough",/fileprivate\(set\)/,"fileprivate","final","for","func","get","guard","if","import","indirect","infix",/init\?/,/init!/,"inout",/internal\(set\)/,"internal","in","is","isolated","nonisolated","lazy","let","macro","mutating","nonmutating",/open\(set\)/,"open","operator","optional","override","package","postfix","precedencegroup","prefix",/private\(set\)/,"private","protocol",/public\(set\)/,"public","repeat","required","rethrows","return","set","some","static","struct","subscript","super","switch","throws","throw",/try\?/,/try!/,"try","typealias",/unowned\(safe\)/,/unowned\(unsafe\)/,"unowned","var","weak","where","while","willSet"],p=["false","nil","true"],m=["assignment","associativity","higherThan","left","lowerThan","none","right"],y=["#colorLiteral","#column","#dsohandle","#else","#elseif","#endif","#error","#file","#fileID","#fileLiteral","#filePath","#function","#if","#imageLiteral","#keyPath","#line","#selector","#sourceLocation","#warning"],b=["abs","all","any","assert","assertionFailure","debugPrint","dump","fatalError","getVaList","isKnownUniquelyReferenced","max","min","numericCast","pointwiseMax","pointwiseMin","precondition","preconditionFailure","print","readLine","repeatElement","sequence","stride","swap","swift_unboxFromSwiftValueWithType","transcode","type","unsafeBitCast","unsafeDowncast","withExtendedLifetime","withUnsafeMutablePointer","withUnsafePointer","withVaList","withoutActuallyEscaping","zip"],_=o(/[/=\-+!*%<>&|^~?]/,/[\u00A1-\u00A7]/,/[\u00A9\u00AB]/,/[\u00AC\u00AE]/,/[\u00B0\u00B1]/,/[\u00B6\u00BB\u00BF\u00D7\u00F7]/,/[\u2016-\u2017]/,/[\u2020-\u2027]/,/[\u2030-\u203E]/,/[\u2041-\u2053]/,/[\u2055-\u205E]/,/[\u2190-\u23FF]/,/[\u2500-\u2775]/,/[\u2794-\u2BFF]/,/[\u2E00-\u2E7F]/,/[\u3001-\u3003]/,/[\u3008-\u3020]/,/[\u3030]/),S=o(_,/[\u0300-\u036F]/,/[\u1DC0-\u1DFF]/,/[\u20D0-\u20FF]/,/[\uFE00-\uFE0F]/,/[\uFE20-\uFE2F]/),N=i(_,S,"*"),E=o(/[a-zA-Z_]/,/[\u00A8\u00AA\u00AD\u00AF\u00B2-\u00B5\u00B7-\u00BA]/,/[\u00BC-\u00BE\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF]/,/[\u0100-\u02FF\u0370-\u167F\u1681-\u180D\u180F-\u1DBF]/,/[\u1E00-\u1FFF]/,/[\u200B-\u200D\u202A-\u202E\u203F-\u2040\u2054\u2060-\u206F]/,/[\u2070-\u20CF\u2100-\u218F\u2460-\u24FF\u2776-\u2793]/,/[\u2C00-\u2DFF\u2E80-\u2FFF]/,/[\u3004-\u3007\u3021-\u302F\u3031-\u303F\u3040-\uD7FF]/,/[\uF900-\uFD3D\uFD40-\uFDCF\uFDF0-\uFE1F\uFE30-\uFE44]/,/[\uFE47-\uFEFE\uFF00-\uFFFD]/),k=o(E,/\d/,/[\u0300-\u036F\u1DC0-\u1DFF\u20D0-\u20FF\uFE20-\uFE2F]/),w=i(E,k,"*"),O=i(/[A-Z]/,k,"*"),B=["attached","autoclosure",i(/convention\(/,o("swift","block","c"),/\)/),"discardableResult","dynamicCallable","dynamicMemberLookup","escaping","freestanding","frozen","GKInspectable","IBAction","IBDesignable","IBInspectable","IBOutlet","IBSegueAction","inlinable","main","nonobjc","NSApplicationMain","NSCopying","NSManaged",i(/objc\(/,w,/\)/),"objc","objcMembers","propertyWrapper","requires_stored_property_inits","resultBuilder","Sendable","testable","UIApplicationMain","unchecked","unknown","usableFromInline","warn_unqualified_access"],R=["iOS","iOSApplicationExtension","macOS","macOSApplicationExtension","macCatalyst","macCatalystApplicationExtension","watchOS","watchOSApplicationExtension","tvOS","tvOSApplicationExtension","swift"];function H(I){const K={match:/\s+/,relevance:0},L=I.COMMENT("/\\*","\\*/",{contains:["self"]}),q=[I.C_LINE_COMMENT_MODE,L],X={match:[/\./,o(...c,...f)],className:{2:"keyword"}},Y={match:i(/\./,o(...d)),relevance:0},A=d.filter(nt=>typeof nt=="string").concat(["_|0"]),$=d.filter(nt=>typeof nt!="string").concat(h).map(s),M={variants:[{className:"keyword",match:o(...$,...f)}]},j={$pattern:o(/\b\w+/,/#\w+/),keyword:A.concat(y),literal:p},V=[X,Y,M],Z={match:i(/\./,o(...b)),relevance:0},C={className:"built_in",match:i(/\b/,o(...b),/(?=\()/)},z=[Z,C],G={match:/->/,relevance:0},D={className:"operator",relevance:0,variants:[{match:N},{match:`\\.(\\.|${S})+`}]},F=[G,D],U="([0-9]_*)+",Q="([0-9a-fA-F]_*)+",J={className:"number",relevance:0,variants:[{match:`\\b(${U})(\\.(${U}))?([eE][+-]?(${U}))?\\b`},{match:`\\b0x(${Q})(\\.(${Q}))?([pP][+-]?(${U}))?\\b`},{match:/\b0o([0-7]_*)+\b/},{match:/\b0b([01]_*)+\b/}]},W=(nt="")=>({className:"subst",variants:[{match:i(/\\/,nt,/[0\\tnr"']/)},{match:i(/\\/,nt,/u\{[0-9a-fA-F]{1,8}\}/)}]}),ee=(nt="")=>({className:"subst",match:i(/\\/,nt,/[\t ]*(?:[\r\n]|\r\n)/)}),ce=(nt="")=>({className:"subst",label:"interpol",begin:i(/\\/,nt,/\(/),end:/\)/}),de=(nt="")=>({begin:i(nt,/"""/),end:i(/"""/,nt),contains:[W(nt),ee(nt),ce(nt)]}),be=(nt="")=>({begin:i(nt,/"/),end:i(/"/,nt),contains:[W(nt),ce(nt)]}),Ee={className:"string",variants:[de(),de("#"),de("##"),de("###"),be(),be("#"),be("##"),be("###")]},Se=[I.BACKSLASH_ESCAPE,{begin:/\[/,end:/\]/,relevance:0,contains:[I.BACKSLASH_ESCAPE]}],De={begin:/\/[^\s](?=[^/\n]*\/)/,end:/\//,contains:Se},He=nt=>{const Yn=i(nt,/\//),Cn=i(/\//,nt);return{begin:Yn,end:Cn,contains:[...Se,{scope:"comment",begin:`#(?!.*${Cn})`,end:/$/}]}},lt={scope:"regexp",variants:[He("###"),He("##"),He("#"),De]},Rt={match:i(/`/,w,/`/)},Yt={className:"variable",match:/\$\d+/},Pt={className:"variable",match:`\\$${k}+`},Xt=[Rt,Yt,Pt],Vn={match:/(@|#(un)?)available/,scope:"keyword",starts:{contains:[{begin:/\(/,end:/\)/,keywords:R,contains:[...F,J,Ee]}]}},En={scope:"keyword",match:i(/@/,o(...B),n(o(/\(/,/\s+/)))},ct={scope:"meta",match:i(/@/,w)},jt=[Vn,En,ct],ue={match:n(/\b[A-Z]/),relevance:0,contains:[{className:"type",match:i(/(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)/,k,"+")},{className:"type",match:O,relevance:0},{match:/[?!]+/,relevance:0},{match:/\.\.\./,relevance:0},{match:i(/\s+&\s+/,n(O)),relevance:0}]},ye={begin://,keywords:j,contains:[...q,...V,...jt,G,ue]};ue.contains.push(ye);const Me={match:i(w,/\s*:/),keywords:"_|0",relevance:0},Pe={begin:/\(/,end:/\)/,relevance:0,keywords:j,contains:["self",Me,...q,lt,...V,...z,...F,J,Ee,...Xt,...jt,ue]},Ze={begin://,keywords:"repeat each",contains:[...q,ue]},sn={begin:o(n(i(w,/\s*:/)),n(i(w,/\s+/,w,/\s*:/))),end:/:/,relevance:0,contains:[{className:"keyword",match:/\b_\b/},{className:"params",match:w}]},wn={begin:/\(/,end:/\)/,keywords:j,contains:[sn,...q,...V,...F,J,Ee,...jt,ue,Pe],endsParent:!0,illegal:/["']/},Kt={match:[/(func|macro)/,/\s+/,o(Rt.match,w,N)],className:{1:"keyword",3:"title.function"},contains:[Ze,wn,K],illegal:[/\[/,/%/]},Ct={match:[/\b(?:subscript|init[?!]?)/,/\s*(?=[<(])/],className:{1:"keyword"},contains:[Ze,wn,K],illegal:/\[|%/},Wt={match:[/operator/,/\s+/,N],className:{1:"keyword",3:"title"}},ut={begin:[/precedencegroup/,/\s+/,O],className:{1:"keyword",3:"title"},contains:[ue],keywords:[...m,...p],end:/}/},zn={match:[/class\b/,/\s+/,/func\b/,/\s+/,/\b[A-Za-z_][A-Za-z0-9_]*\b/],scope:{1:"keyword",3:"keyword",5:"title.function"}},cn={match:[/class\b/,/\s+/,/var\b/],scope:{1:"keyword",3:"keyword"}},yr={begin:[/(struct|protocol|class|extension|enum|actor)/,/\s+/,w,/\s*/],beginScope:{1:"keyword",3:"title.class"},keywords:j,contains:[Ze,...V,{begin:/:/,end:/\{/,keywords:j,contains:[{scope:"title.class.inherited",match:O},...V],relevance:0}]};for(const nt of Ee.variants){const Yn=nt.contains.find(hn=>hn.label==="interpol");Yn.keywords=j;const Cn=[...V,...z,...F,J,Ee,...Xt];Yn.contains=[...Cn,{begin:/\(/,end:/\)/,contains:["self",...Cn]}]}return{name:"Swift",keywords:j,contains:[...q,Kt,Ct,zn,cn,yr,Wt,ut,{beginKeywords:"import",end:/$/,contains:[...q],relevance:0},lt,...V,...z,...F,J,Ee,...Xt,...jt,ue,Pe]}}return Hh=H,Hh}var $h,ev;function Z5(){if(ev)return $h;ev=1;function e(n){const i="true false yes no null",a="[\\w#;/?:@&=+$,.~*'()[\\]]+",o={className:"attr",variants:[{begin:/[\w*@][\w*@ :()\./-]*:(?=[ \t]|$)/},{begin:/"[\w*@][\w*@ :()\./-]*":(?=[ \t]|$)/},{begin:/'[\w*@][\w*@ :()\./-]*':(?=[ \t]|$)/}]},s={className:"template-variable",variants:[{begin:/\{\{/,end:/\}\}/},{begin:/%\{/,end:/\}/}]},c={className:"string",relevance:0,begin:/'/,end:/'/,contains:[{match:/''/,scope:"char.escape",relevance:0}]},f={className:"string",relevance:0,variants:[{begin:/"/,end:/"/},{begin:/\S+/}],contains:[n.BACKSLASH_ESCAPE,s]},h=n.inherit(f,{variants:[{begin:/'/,end:/'/,contains:[{begin:/''/,relevance:0}]},{begin:/"/,end:/"/},{begin:/[^\s,{}[\]]+/}]}),b={className:"number",begin:"\\b"+"[0-9]{4}(-[0-9][0-9]){0,2}"+"([Tt \\t][0-9][0-9]?(:[0-9][0-9]){2})?"+"(\\.[0-9]*)?"+"([ \\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?"+"\\b"},_={end:",",endsWithParent:!0,excludeEnd:!0,keywords:i,relevance:0},S={begin:/\{/,end:/\}/,contains:[_],illegal:"\\n",relevance:0},N={begin:"\\[",end:"\\]",contains:[_],illegal:"\\n",relevance:0},E=[o,{className:"meta",begin:"^---\\s*$",relevance:10},{className:"string",begin:"[\\|>]([1-9]?[+-])?[ ]*\\n( +)[^ ][^\\n]*\\n(\\2[^\\n]+\\n?)*"},{begin:"<%[%=-]?",end:"[%-]?%>",subLanguage:"ruby",excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:"!\\w+!"+a},{className:"type",begin:"!<"+a+">"},{className:"type",begin:"!"+a},{className:"type",begin:"!!"+a},{className:"meta",begin:"&"+n.UNDERSCORE_IDENT_RE+"$"},{className:"meta",begin:"\\*"+n.UNDERSCORE_IDENT_RE+"$"},{className:"bullet",begin:"-(?=[ ]|$)",relevance:0},n.HASH_COMMENT_MODE,{beginKeywords:i,keywords:{literal:i}},b,{className:"number",begin:n.C_NUMBER_RE+"\\b",relevance:0},S,N,c,f],k=[...E];return k.pop(),k.push(h),_.contains=k,{name:"YAML",case_insensitive:!0,aliases:["yml"],contains:E}}return $h=e,$h}var qh,tv;function Q5(){if(tv)return qh;tv=1;const e="[A-Za-z$_][0-9A-Za-z$_]*",n=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends","using"],i=["true","false","null","undefined","NaN","Infinity"],a=["Object","Function","Boolean","Symbol","Math","Date","Number","BigInt","String","RegExp","Array","Float32Array","Float64Array","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Int32Array","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array","Set","Map","WeakSet","WeakMap","ArrayBuffer","SharedArrayBuffer","Atomics","DataView","JSON","Promise","Generator","GeneratorFunction","AsyncFunction","Reflect","Proxy","Intl","WebAssembly"],o=["Error","EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],s=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],c=["arguments","this","super","console","window","document","localStorage","sessionStorage","module","global"],f=[].concat(s,a,o);function h(p){const m=p.regex,y=(W,{after:ee})=>{const ce="",end:""},S=/<[A-Za-z0-9\\._:-]+\s*\/>/,N={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(W,ee)=>{const ce=W[0].length+W.index,de=W.input[ce];if(de==="<"||de===","){ee.ignoreMatch();return}de===">"&&(y(W,{after:ce})||ee.ignoreMatch());let be;const Ee=W.input.substring(ce);if(be=Ee.match(/^\s*=/)){ee.ignoreMatch();return}if((be=Ee.match(/^\s+extends\s+/))&&be.index===0){ee.ignoreMatch();return}}},E={$pattern:e,keyword:n,literal:i,built_in:f,"variable.language":c},k="[0-9](_?[0-9])*",w=`\\.(${k})`,O="0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*",B={className:"number",variants:[{begin:`(\\b(${O})((${w})|\\.)?|(${w}))[eE][+-]?(${k})\\b`},{begin:`\\b(${O})\\b((${w})\\b|\\.)?|(${w})\\b`},{begin:"\\b(0|[1-9](_?[0-9])*)n\\b"},{begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*n?\\b"},{begin:"\\b0[oO][0-7](_?[0-7])*n?\\b"},{begin:"\\b0[0-7]+n?\\b"}],relevance:0},R={className:"subst",begin:"\\$\\{",end:"\\}",keywords:E,contains:[]},H={begin:".?html`",end:"",starts:{end:"`",returnEnd:!1,contains:[p.BACKSLASH_ESCAPE,R],subLanguage:"xml"}},I={begin:".?css`",end:"",starts:{end:"`",returnEnd:!1,contains:[p.BACKSLASH_ESCAPE,R],subLanguage:"css"}},K={begin:".?gql`",end:"",starts:{end:"`",returnEnd:!1,contains:[p.BACKSLASH_ESCAPE,R],subLanguage:"graphql"}},L={className:"string",begin:"`",end:"`",contains:[p.BACKSLASH_ESCAPE,R]},X={className:"comment",variants:[p.COMMENT(/\/\*\*(?!\/)/,"\\*/",{relevance:0,contains:[{begin:"(?=@[A-Za-z]+)",relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"},{className:"type",begin:"\\{",end:"\\}",excludeEnd:!0,excludeBegin:!0,relevance:0},{className:"variable",begin:b+"(?=\\s*(-)|$)",endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]}),p.C_BLOCK_COMMENT_MODE,p.C_LINE_COMMENT_MODE]},Y=[p.APOS_STRING_MODE,p.QUOTE_STRING_MODE,H,I,K,L,{match:/\$\d+/},B];R.contains=Y.concat({begin:/\{/,end:/\}/,keywords:E,contains:["self"].concat(Y)});const A=[].concat(X,R.contains),$=A.concat([{begin:/(\s*)\(/,end:/\)/,keywords:E,contains:["self"].concat(A)}]),M={className:"params",begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:E,contains:$},j={variants:[{match:[/class/,/\s+/,b,/\s+/,/extends/,/\s+/,m.concat(b,"(",m.concat(/\./,b),")*")],scope:{1:"keyword",3:"title.class",5:"keyword",7:"title.class.inherited"}},{match:[/class/,/\s+/,b],scope:{1:"keyword",3:"title.class"}}]},V={relevance:0,match:m.either(/\bJSON/,/\b[A-Z][a-z]+([A-Z][a-z]*|\d)*/,/\b[A-Z]{2,}([A-Z][a-z]+|\d)+([A-Z][a-z]*)*/,/\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\d)*([A-Z][a-z]*)*/),className:"title.class",keywords:{_:[...a,...o]}},Z={label:"use_strict",className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},C={variants:[{match:[/function/,/\s+/,b,/(?=\s*\()/]},{match:[/function/,/\s*(?=\()/]}],className:{1:"keyword",3:"title.function"},label:"func.def",contains:[M],illegal:/%/},z={relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:"variable.constant"};function G(W){return m.concat("(?!",W.join("|"),")")}const D={match:m.concat(/\b/,G([...s,"super","import"].map(W=>`${W}\\s*\\(`)),b,m.lookahead(/\s*\(/)),className:"title.function",relevance:0},F={begin:m.concat(/\./,m.lookahead(m.concat(b,/(?![0-9A-Za-z$_(])/))),end:b,excludeBegin:!0,keywords:"prototype",className:"property",relevance:0},U={match:[/get|set/,/\s+/,b,/(?=\()/],className:{1:"keyword",3:"title.function"},contains:[{begin:/\(\)/},M]},Q="(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|"+p.UNDERSCORE_IDENT_RE+")\\s*=>",J={match:[/const|var|let/,/\s+/,b,/\s*/,/=\s*/,/(async\s*)?/,m.lookahead(Q)],keywords:"async",className:{1:"keyword",3:"title.function"},contains:[M]};return{name:"JavaScript",aliases:["js","jsx","mjs","cjs"],keywords:E,exports:{PARAMS_CONTAINS:$,CLASS_REFERENCE:V},illegal:/#(?![$_A-z])/,contains:[p.SHEBANG({label:"shebang",binary:"node",relevance:5}),Z,p.APOS_STRING_MODE,p.QUOTE_STRING_MODE,H,I,K,L,X,{match:/\$\d+/},B,V,{scope:"attr",match:b+m.lookahead(":"),relevance:0},J,{begin:"("+p.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",relevance:0,contains:[X,p.REGEXP_MODE,{className:"function",begin:Q,returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:p.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:E,contains:$}]}]},{begin:/,/,relevance:0},{match:/\s+/,relevance:0},{variants:[{begin:_.begin,end:_.end},{match:S},{begin:N.begin,"on:begin":N.isTrulyOpeningTag,end:N.end}],subLanguage:"xml",contains:[{begin:N.begin,end:N.end,skip:!0,contains:["self"]}]}]},C,{beginKeywords:"while if switch catch for"},{begin:"\\b(?!function)"+p.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",returnBegin:!0,label:"func.def",contains:[M,p.inherit(p.TITLE_MODE,{begin:b,className:"title.function"})]},{match:/\.\.\./,relevance:0},F,{match:"\\$"+b,relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"},contains:[M]},D,z,j,U,{match:/\$[(.]/}]}}function d(p){const m=p.regex,y=h(p),b=e,_=["any","void","number","boolean","string","object","never","symbol","bigint","unknown"],S={begin:[/namespace/,/\s+/,p.IDENT_RE],beginScope:{1:"keyword",3:"title.class"}},N={beginKeywords:"interface",end:/\{/,excludeEnd:!0,keywords:{keyword:"interface extends",built_in:_},contains:[y.exports.CLASS_REFERENCE]},E={className:"meta",relevance:10,begin:/^\s*['"]use strict['"]/},k=["type","interface","public","private","protected","implements","declare","abstract","readonly","enum","override","satisfies"],w={$pattern:e,keyword:n.concat(k),literal:i,built_in:f.concat(_),"variable.language":c},O={className:"meta",begin:"@"+b},B=(K,L,q)=>{const X=K.contains.findIndex(Y=>Y.label===L);if(X===-1)throw new Error("can not find mode to replace");K.contains.splice(X,1,q)};Object.assign(y.keywords,w),y.exports.PARAMS_CONTAINS.push(O);const R=y.contains.find(K=>K.scope==="attr"),H=Object.assign({},R,{match:m.concat(b,m.lookahead(/\s*\?:/))});y.exports.PARAMS_CONTAINS.push([y.exports.CLASS_REFERENCE,R,H]),y.contains=y.contains.concat([O,S,N,H]),B(y,"shebang",p.SHEBANG()),B(y,"use_strict",E);const I=y.contains.find(K=>K.label==="func.def");return I.relevance=0,Object.assign(y,{name:"TypeScript",aliases:["ts","tsx","mts","cts"]}),y}return qh=d,qh}var Ph,nv;function W5(){if(nv)return Ph;nv=1;function e(n){const i=n.regex,a={className:"string",begin:/"(""|[^/n])"C\b/},o={className:"string",begin:/"/,end:/"/,illegal:/\n/,contains:[{begin:/""/}]},s=/\d{1,2}\/\d{1,2}\/\d{4}/,c=/\d{4}-\d{1,2}-\d{1,2}/,f=/(\d|1[012])(:\d+){0,2} *(AM|PM)/,h=/\d{1,2}(:\d{1,2}){1,2}/,d={className:"literal",variants:[{begin:i.concat(/# */,i.either(c,s),/ *#/)},{begin:i.concat(/# */,h,/ *#/)},{begin:i.concat(/# */,f,/ *#/)},{begin:i.concat(/# */,i.either(c,s),/ +/,i.either(f,h),/ *#/)}]},p={className:"number",relevance:0,variants:[{begin:/\b\d[\d_]*((\.[\d_]+(E[+-]?[\d_]+)?)|(E[+-]?[\d_]+))[RFD@!#]?/},{begin:/\b\d[\d_]*((U?[SIL])|[%&])?/},{begin:/&H[\dA-F_]+((U?[SIL])|[%&])?/},{begin:/&O[0-7_]+((U?[SIL])|[%&])?/},{begin:/&B[01_]+((U?[SIL])|[%&])?/}]},m={className:"label",begin:/^\w+:/},y=n.COMMENT(/'''/,/$/,{contains:[{className:"doctag",begin:/<\/?/,end:/>/}]}),b=n.COMMENT(null,/$/,{variants:[{begin:/'/},{begin:/([\t ]|^)REM(?=\s)/}]});return{name:"Visual Basic .NET",aliases:["vb"],case_insensitive:!0,classNameAliases:{label:"symbol"},keywords:{keyword:"addhandler alias aggregate ansi as async assembly auto binary by byref byval call case catch class compare const continue custom declare default delegate dim distinct do each equals else elseif end enum erase error event exit explicit finally for friend from function get global goto group handles if implements imports in inherits interface into iterator join key let lib loop me mid module mustinherit mustoverride mybase myclass namespace narrowing new next notinheritable notoverridable of off on operator option optional order overloads overridable overrides paramarray partial preserve private property protected public raiseevent readonly redim removehandler resume return select set shadows shared skip static step stop structure strict sub synclock take text then throw to try unicode until using when where while widening with withevents writeonly yield",built_in:"addressof and andalso await directcast gettype getxmlnamespace is isfalse isnot istrue like mod nameof new not or orelse trycast typeof xor cbool cbyte cchar cdate cdbl cdec cint clng cobj csbyte cshort csng cstr cuint culng cushort",type:"boolean byte char date decimal double integer long object sbyte short single string uinteger ulong ushort",literal:"true false nothing"},illegal:"//|\\{|\\}|endif|gosub|variant|wend|^\\$ ",contains:[a,o,d,p,m,y,b,{className:"meta",begin:/[\t ]*#(const|disable|else|elseif|enable|end|externalsource|if|region)\b/,end:/$/,keywords:{keyword:"const disable else elseif enable end externalsource if region then"},contains:[b]}]}}return Ph=e,Ph}var Fh,iv;function J5(){if(iv)return Fh;iv=1;function e(n){n.regex;const i=n.COMMENT(/\(;/,/;\)/);i.contains.push("self");const a=n.COMMENT(/;;/,/$/),o=["anyfunc","block","br","br_if","br_table","call","call_indirect","data","drop","elem","else","end","export","func","global.get","global.set","local.get","local.set","local.tee","get_global","get_local","global","if","import","local","loop","memory","memory.grow","memory.size","module","mut","nop","offset","param","result","return","select","set_global","set_local","start","table","tee_local","then","type","unreachable"],s={begin:[/(?:func|call|call_indirect)/,/\s+/,/\$[^\s)]+/],className:{1:"keyword",3:"title.function"}},c={className:"variable",begin:/\$[\w_]+/},f={match:/(\((?!;)|\))+/,className:"punctuation",relevance:0},h={className:"number",relevance:0,match:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/},d={match:/(i32|i64|f32|f64)(?!\.)/,className:"type"},p={className:"keyword",match:/\b(f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|nearest|neg?|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|store(?:8|16|32)?|sqrt|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))\b/};return{name:"WebAssembly",keywords:{$pattern:/[\w.]+/,keyword:o},contains:[a,i,{match:[/(?:offset|align)/,/\s*/,/=/],className:{1:"keyword",3:"operator"}},c,f,s,n.QUOTE_STRING_MODE,d,p,h]}}return Fh=e,Fh}var Gh,rv;function eL(){if(rv)return Gh;rv=1;var e=b5();return e.registerLanguage("xml",y5()),e.registerLanguage("bash",x5()),e.registerLanguage("c",v5()),e.registerLanguage("cpp",_5()),e.registerLanguage("csharp",E5()),e.registerLanguage("css",w5()),e.registerLanguage("markdown",S5()),e.registerLanguage("diff",N5()),e.registerLanguage("ruby",k5()),e.registerLanguage("go",T5()),e.registerLanguage("graphql",A5()),e.registerLanguage("ini",C5()),e.registerLanguage("java",M5()),e.registerLanguage("javascript",O5()),e.registerLanguage("json",R5()),e.registerLanguage("kotlin",D5()),e.registerLanguage("less",L5()),e.registerLanguage("lua",z5()),e.registerLanguage("makefile",I5()),e.registerLanguage("perl",j5()),e.registerLanguage("objectivec",B5()),e.registerLanguage("php",U5()),e.registerLanguage("php-template",H5()),e.registerLanguage("plaintext",$5()),e.registerLanguage("python",q5()),e.registerLanguage("python-repl",P5()),e.registerLanguage("r",F5()),e.registerLanguage("rust",G5()),e.registerLanguage("scss",V5()),e.registerLanguage("shell",Y5()),e.registerLanguage("sql",X5()),e.registerLanguage("swift",K5()),e.registerLanguage("yaml",Z5()),e.registerLanguage("typescript",Q5()),e.registerLanguage("vbnet",W5()),e.registerLanguage("wasm",J5()),e.HighlightJS=e,e.default=e,Gh=e,Gh}var tL=eL();const Fn=as(tL);function nL(e){const n=e.regex,i="HTTP/([32]|1\\.[01])",a=/[A-Za-z][A-Za-z0-9-]*/,o={className:"attribute",begin:n.concat("^",a,"(?=\\:\\s)"),starts:{contains:[{className:"punctuation",begin:/: /,relevance:0,starts:{end:"$",relevance:0}}]}},s=[o,{begin:"\\n\\n",starts:{subLanguage:[],endsWithParent:!0}}];return{name:"HTTP",aliases:["https"],illegal:/\S/,contains:[{begin:"^(?="+i+" \\d{3})",end:/$/,contains:[{className:"meta",begin:i},{className:"number",begin:"\\b\\d{3}\\b"}],starts:{end:/\b\B/,illegal:/\S/,contains:s}},{begin:"(?=^[A-Z]+ (.*?) "+i+"$)",end:/$/,contains:[{className:"string",begin:" ",end:" ",excludeBegin:!0,excludeEnd:!0},{className:"meta",begin:i},{className:"keyword",begin:"[A-Z]+"}],starts:{end:/\b\B/,illegal:/\S/,contains:s}},e.inherit(o,{relevance:0})]}}function iL(e){const n=e.regex,i={className:"variable",variants:[{begin:/\$\d+/},{begin:/\$\{\w+\}/},{begin:n.concat(/[$@]/,e.UNDERSCORE_IDENT_RE)}]},o={endsWithParent:!0,keywords:{$pattern:/[a-z_]{2,}|\/dev\/poll/,literal:["on","off","yes","no","true","false","none","blocked","debug","info","notice","warn","error","crit","select","break","last","permanent","redirect","kqueue","rtsig","epoll","poll","/dev/poll"]},relevance:0,illegal:"=>",contains:[e.HASH_COMMENT_MODE,{className:"string",contains:[e.BACKSLASH_ESCAPE,i],variants:[{begin:/"/,end:/"/},{begin:/'/,end:/'/}]},{begin:"([a-z]+):/",end:"\\s",endsWithParent:!0,excludeEnd:!0,contains:[i]},{className:"regexp",contains:[e.BACKSLASH_ESCAPE,i],variants:[{begin:"\\s\\^",end:"\\s|\\{|;",returnEnd:!0},{begin:"~\\*?\\s+",end:"\\s|\\{|;",returnEnd:!0},{begin:"\\*(\\.[a-z\\-]+)+"},{begin:"([a-z\\-]+\\.)+\\*"}]},{className:"number",begin:"\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b"},{className:"number",begin:"\\b\\d+[kKmMgGdshdwy]?\\b",relevance:0},i]};return{name:"Nginx config",aliases:["nginxconf"],contains:[e.HASH_COMMENT_MODE,{beginKeywords:"upstream location",end:/;|\{/,contains:o.contains,keywords:{section:"upstream location"}},{className:"section",begin:n.concat(e.UNDERSCORE_IDENT_RE+n.lookahead(/\s+\{/)),relevance:0},{begin:n.lookahead(e.UNDERSCORE_IDENT_RE+"\\s"),end:";|\\{",contains:[{className:"attribute",begin:e.UNDERSCORE_IDENT_RE,starts:o}],relevance:0}],illegal:"[^\\s\\}\\{]"}}function rL(e){const n={className:"number",begin:/[$%]\d+/},i={className:"number",begin:/\b\d+/},a={className:"number",begin:/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(:\d{1,5})?/},o={className:"number",begin:/:\d{1,5}/};return{name:"Apache config",aliases:["apacheconf"],case_insensitive:!0,contains:[e.HASH_COMMENT_MODE,{className:"section",begin:/<\/?/,end:/>/,contains:[a,o,e.inherit(e.QUOTE_STRING_MODE,{relevance:0})]},{className:"attribute",begin:/\w+/,relevance:0,keywords:{_:["order","deny","allow","setenv","rewriterule","rewriteengine","rewritecond","documentroot","sethandler","errordocument","loadmodule","options","header","listen","serverroot","servername"]},starts:{end:/$/,relevance:0,keywords:{literal:"on off all deny allow"},contains:[{scope:"punctuation",match:/\\\n/},{className:"meta",begin:/\s\[/,end:/\]$/},{className:"variable",begin:/[\$%]\{/,end:/\}/,contains:["self",n]},a,i,e.QUOTE_STRING_MODE]}}],illegal:/\S/}}function aL(e){return{name:"Dockerfile",aliases:["docker"],case_insensitive:!0,keywords:["from","maintainer","expose","env","arg","user","onbuild","stopsignal"],contains:[e.HASH_COMMENT_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.NUMBER_MODE,{beginKeywords:"run cmd entrypoint volume add copy workdir label healthcheck shell",starts:{end:/[^\\]$/,subLanguage:"bash"}}],illegal:"{Fp(s),o(!0),setTimeout(()=>o(!1),2e3)};return v.jsxs("div",{className:"group/code relative rounded-md border border-[#2a2a2a] my-4 text-[#ddd] overflow-hidden",children:[b?v.jsxs("div",{className:"flex items-stretch",children:[v.jsxs("span",{className:"relative flex items-center text-[13px] text-[#999] font-mono px-4 py-2 border-r border-[#2a2a2a]",children:[b,v.jsx("span",{className:"absolute top-0 inset-x-0 h-0.5 bg-white/60 rounded-full"})]}),v.jsx("div",{className:"flex-1 border-b border-[#2a2a2a]"}),v.jsx("button",{onClick:N,className:"px-3 py-2 text-[#555] hover:text-white transition-colors border-b border-[#2a2a2a]","aria-label":"Copy code",children:a?v.jsx(Wc,{className:"w-3.5 h-3.5 text-emerald-400"}):v.jsx(Jc,{className:"w-3.5 h-3.5"})})]}):v.jsx("button",{onClick:N,className:"absolute top-2 right-2 z-10 p-1 rounded text-[#444] hover:text-white opacity-0 group-hover/code:opacity-100 transition-opacity","aria-label":"Copy code",children:a?v.jsx(Wc,{className:"w-3.5 h-3.5 text-emerald-400"}):v.jsx(Jc,{className:"w-3.5 h-3.5"})}),v.jsx("div",{className:"overflow-auto max-h-[400px]",children:v.jsx("table",{className:"w-full border-collapse font-mono text-[12px] leading-[22px] [font-variant-ligatures:none]",children:v.jsx("tbody",{children:S.map((w,O)=>v.jsxs("tr",{children:[v.jsx("td",{className:"select-none w-[1px] whitespace-nowrap px-4 text-right text-[#555] align-top text-[12px] leading-[22px] border-r border-[#2a2a2a]",children:y+O}),v.jsx("td",{className:"pl-4 pr-4 whitespace-pre",dangerouslySetInnerHTML:{__html:w||` +`}})]},O))})})})]})}function hm(){return e=>{const n=i=>{var a;if(i.type==="element"&&i.tagName==="pre"&&i.children){const o=i.children.find(s=>s.type==="element"&&s.tagName==="code");(a=o==null?void 0:o.data)!=null&&a.meta&&(o.properties=o.properties||{},o.properties.metastring=o.data.meta)}i.children&&i.children.forEach(o=>n(o))};n(e)}}const pm={code:fE,pre:({children:e})=>v.jsx(v.Fragment,{children:e})};function ta({title:e,content:n,action:i}){return v.jsxs("section",{children:[(e||i)&&v.jsxs("div",{className:"flex items-center justify-between gap-3 mb-3",children:[e?v.jsx("h2",{className:"text-xl font-semibold text-white",children:e}):v.jsx("span",{}),i]}),v.jsx("div",{className:"prose-markdown",children:v.jsx(sm,{remarkPlugins:[dm],rehypePlugins:[hm],components:pm,children:n})})]})}class oL{diff(n,i,a={}){let o;typeof a=="function"?(o=a,a={}):"callback"in a&&(o=a.callback);const s=this.castInput(n,a),c=this.castInput(i,a),f=this.removeEmpty(this.tokenize(s,a)),h=this.removeEmpty(this.tokenize(c,a));return this.diffWithOptionsObj(f,h,a,o)}diffWithOptionsObj(n,i,a,o){var s;const c=k=>{if(k=this.postProcess(k,a),o){setTimeout(function(){o(k)},0);return}else return k},f=i.length,h=n.length;let d=1,p=f+h;a.maxEditLength!=null&&(p=Math.min(p,a.maxEditLength));const m=(s=a.timeout)!==null&&s!==void 0?s:1/0,y=Date.now()+m,b=[{oldPos:-1,lastComponent:void 0}];let _=this.extractCommon(b[0],i,n,0,a);if(b[0].oldPos+1>=h&&_+1>=f)return c(this.buildValues(b[0].lastComponent,i,n));let S=-1/0,N=1/0;const E=()=>{for(let k=Math.max(S,-d);k<=Math.min(N,d);k+=2){let w;const O=b[k-1],B=b[k+1];O&&(b[k-1]=void 0);let R=!1;if(B){const I=B.oldPos-k;R=B&&0<=I&&I=h&&_+1>=f)return c(this.buildValues(w.lastComponent,i,n))||!0;b[k]=w,w.oldPos+1>=h&&(N=Math.min(N,k-1)),_+1>=f&&(S=Math.max(S,k+1))}d++};if(o)(function k(){setTimeout(function(){if(d>p||Date.now()>y)return o(void 0);E()||k()},0)})();else for(;d<=p&&Date.now()<=y;){const k=E();if(k)return k}}addToPath(n,i,a,o,s){const c=n.lastComponent;return c&&!s.oneChangePerToken&&c.added===i&&c.removed===a?{oldPos:n.oldPos+o,lastComponent:{count:c.count+1,added:i,removed:a,previousComponent:c.previousComponent}}:{oldPos:n.oldPos+o,lastComponent:{count:1,added:i,removed:a,previousComponent:c}}}extractCommon(n,i,a,o,s){const c=i.length,f=a.length;let h=n.oldPos,d=h-o,p=0;for(;d+1y.length?_:y}),p.value=this.join(m)}else p.value=this.join(i.slice(h,h+p.count));h+=p.count,p.added||(d+=p.count)}}return o}}class sL extends oL{constructor(){super(...arguments),this.tokenize=fL}equals(n,i,a){return a.ignoreWhitespace?((!a.newlineIsToken||!n.includes(` +`))&&(n=n.trim()),(!a.newlineIsToken||!i.includes(` +`))&&(i=i.trim())):a.ignoreNewlineAtEof&&!a.newlineIsToken&&(n.endsWith(` +`)&&(n=n.slice(0,-1)),i.endsWith(` +`)&&(i=i.slice(0,-1))),super.equals(n,i,a)}}const cL=new sL;function uL(e,n,i){return cL.diff(e,n,i)}function fL(e,n){n.stripTrailingCr&&(e=e.replace(/\r\n/g,` +`));const i=[],a=e.split(/(\n|\r\n)/);a[a.length-1]||a.pop();for(let o=0;oS.value.replace(/\n$/,"").split(` +`).map(N=>{const E=N===""?` +`:d!=="text"?dL(N,d):N.replace(/&/g,"&").replace(//g,">");let k="",w="";return S.removed?k=String(m++):(S.added||(k=String(m++)),w=String(y++)),{highlighted:E,added:!!S.added,removed:!!S.removed,leftNo:k,rightNo:w}})),_=()=>{Fp(o),f(!0),setTimeout(()=>f(!1),2e3),s==null||s()};return v.jsxs("div",{className:"rounded-md border border-[#2a2a2a] overflow-hidden",children:[v.jsxs("div",{className:"flex items-stretch",children:[v.jsxs("span",{className:"relative flex items-center text-[13px] text-[#999] font-mono px-4 py-2 border-r border-[#2a2a2a] break-all",children:[e,":",h,v.jsx("span",{className:"absolute top-0 inset-x-0 h-0.5 bg-white/60 rounded-full"})]}),v.jsx("div",{className:"flex-1 border-b border-[#2a2a2a]"}),v.jsx("button",{onClick:_,className:"px-3 py-2 text-[#555] hover:text-white transition-colors flex-shrink-0 border-b border-[#2a2a2a]","aria-label":"Copy fixed code",children:c?v.jsx(Wc,{className:"w-3.5 h-3.5 text-emerald-400"}):v.jsx(Jc,{className:"w-3.5 h-3.5"})})]}),v.jsx("div",{className:"overflow-auto max-h-[400px]",children:v.jsx("table",{className:"w-full border-collapse font-mono text-[12px] leading-[22px] [font-variant-ligatures:none]",children:v.jsx("tbody",{children:b.map((S,N)=>v.jsxs("tr",{className:S.added?"bg-blue-500/[0.12]":S.removed?"bg-red-500/[0.12]":"",children:[v.jsx("td",{className:"select-none w-[1px] whitespace-nowrap pl-4 pr-1.5 text-right text-[#555] align-top text-[12px] leading-[22px]",children:S.leftNo}),v.jsx("td",{className:"select-none w-[1px] whitespace-nowrap pl-1.5 pr-4 text-right text-[#555] align-top text-[12px] leading-[22px] border-r border-[#2a2a2a]",children:S.rightNo}),v.jsx("td",{className:"pl-4 pr-4 whitespace-pre",dangerouslySetInnerHTML:{__html:S.highlighted}})]},N))})})})]})}function pL({description:e,scriptCode:n,onCopy:i}){const[a,o]=ae.useState(!1);if(!e&&!n)return null;const s=()=>{n&&(Fp(n),o(!0),setTimeout(()=>o(!1),2e3),i==null||i())};return v.jsxs("section",{children:[v.jsx("h2",{className:"text-xl font-semibold text-white mb-3",children:"Proof of Concept"}),v.jsxs("div",{className:"space-y-4",children:[e&&v.jsx("div",{className:"prose-markdown",children:v.jsx(sm,{remarkPlugins:[dm],rehypePlugins:[hm],components:pm,children:e})}),n&&v.jsxs("div",{className:"group/poc relative rounded-md border border-[#2a2a2a] overflow-hidden",children:[v.jsxs("div",{className:"flex items-stretch",children:[v.jsxs("span",{className:"relative flex items-center text-[13px] text-[#999] font-mono px-4 py-2 border-r border-[#2a2a2a]",children:["PoC Script",v.jsx("span",{className:"absolute top-0 inset-x-0 h-0.5 bg-white/60 rounded-full"})]}),v.jsx("div",{className:"flex-1 border-b border-[#2a2a2a]"}),v.jsx("button",{onClick:s,className:"px-3 py-2 text-[#555] hover:text-white transition-colors flex-shrink-0 border-b border-[#2a2a2a]","aria-label":"Copy PoC code",children:a?v.jsx(Wc,{className:"w-3.5 h-3.5 text-emerald-400"}):v.jsx(Jc,{className:"w-3.5 h-3.5"})})]}),v.jsx("div",{className:"overflow-auto max-h-[400px] px-4 py-3",children:v.jsx("pre",{className:"font-mono text-[12px] leading-[22px] whitespace-pre [font-variant-ligatures:none]",children:v.jsx("code",{dangerouslySetInnerHTML:{__html:Fn.highlight(n,{language:"python"}).value}})})})]})]})]})}function mL(e){const n=e.match(/(?:https?:\/\/)?(?:www\.)?github\.com\/([^\s/]+\/[^\s/]+)/);if(n){const o=n[1].replace(/\.git$/,"");return{display:o,href:`https://github.com/${o}`,provider:"github"}}const i=e.match(/(?:https?:\/\/)?(?:www\.)?gitlab\.com\/([^\s/]+\/[^\s/]+)/);if(i){const o=i[1].replace(/\.git$/,"");return{display:o,href:`https://gitlab.com/${o}`,provider:"gitlab"}}const a=e.match(/(?:https?:\/\/)?(?:www\.)?bitbucket\.org\/([^\s/]+\/[^\s/]+)/);if(a){const o=a[1].replace(/\.git$/,"");return{display:o,href:`https://bitbucket.org/${o}`,provider:"bitbucket"}}return/^https?:\/\//i.test(e)?{display:e.replace(/^https?:\/\/(www\.)?/,""),href:e,provider:null}:/^[a-zA-Z0-9][\w.-]*\.[a-zA-Z]{2,}/.test(e)?{display:e,href:`https://${e}`,provider:null}:{display:e,href:null,provider:null}}function gL({className:e}){return v.jsx("svg",{viewBox:"0 0 24 24",fill:"currentColor",className:e,"aria-hidden":"true",children:v.jsx("path",{d:"M2.65 3a.72.72 0 0 0-.72.83l2.86 17.39a.98.98 0 0 0 .96.82h13.72a.72.72 0 0 0 .72-.6l2.86-17.4A.72.72 0 0 0 22.3 3H2.65Zm12.1 12.53H9.3L8.06 8.9h7.8l-1.11 6.63Z"})})}function bL({provider:e,className:n}){const i=n??"w-4 h-4";return e==="gitlab"?v.jsx(g2,{className:`${i} text-orange-400`}):e==="bitbucket"?v.jsx(gL,{className:`${i} text-blue-400`}):v.jsx(p2,{className:`${i} text-white`})}const yL={attack_vector:{N:"Remotely exploitable",A:"Adjacent network",L:"Local access required",P:"Physical access required"},attack_complexity:{L:"Easy to exploit",H:"Requires specific conditions"},privileges_required:{N:"No authentication needed",L:"Low privileges needed",H:"High privileges needed"},user_interaction:{N:"No user action required",R:"Requires user action",P:"Passive user role",A:"Active user role"},scope:{U:"Impact stays contained",C:"Can spread to other systems"},confidentiality:{N:"No data exposure",L:"Partial data exposure",H:"Full data exposure"},integrity:{N:"No data modification",L:"Limited modification",H:"Full data modification"},availability:{N:"No service disruption",L:"Limited disruption",H:"Full service disruption"}},xL={attack_vector:{N:"high",A:"medium",L:"low",P:"low"},attack_complexity:{L:"high",H:"low"},privileges_required:{N:"high",L:"medium",H:"low"},user_interaction:{N:"high",R:"low",P:"medium",A:"low"},scope:{C:"high",U:"low"},confidentiality:{H:"high",L:"medium",N:"low"},integrity:{H:"high",L:"medium",N:"low"},availability:{H:"high",L:"medium",N:"low"}},vL={high:"bg-red-500/15 text-red-400 border-red-500/25",medium:"bg-yellow-500/15 text-yellow-400 border-yellow-500/25",low:"bg-[#222] text-[#666] border-[#333]"},_L=[{label:"Exploitability",keys:["attack_vector","attack_complexity","privileges_required","user_interaction"]},{label:"Impact",keys:["scope","confidentiality","integrity","availability"]}];function EL(e,n,i,a,o){const s=e.replace(/\.git$/,"").replace(/\/+$/,""),c=a.split("/").map(encodeURIComponent).join("/"),f=i.split("/").map(encodeURIComponent).join("/");return n==="github"?`${s}/blob/${f}/${c}#L${o}`:n==="gitlab"?`${s}/-/blob/${f}/${c}#L${o}`:null}function wL({vulnerability:e,statusSlot:n,slackThreadUrl:i}){var R;const{severity:a,cvss:o,cve:s,cwe:c,fix_effort:f,created_at:h,target:d,endpoint:p,method:m,code_locations:y,cvss_breakdown:b,location_meta:_}=e,[S,N]=ae.useState(!0),E=y==null?void 0:y.filter(H=>H.fix_before&&H.fix_after),k=E&&E.length>0,w=d?mL(d):null,O=!!(d||p||m||k),B=b&&Object.values(b).some(H=>H!=null);return v.jsxs("aside",{className:"lg:sticky lg:top-6 lg:max-h-[calc(100vh-3rem)] lg:overflow-y-auto",children:[v.jsx("div",{className:"pb-4",children:v.jsxs("div",{className:"space-y-3",children:[v.jsxs("div",{className:"flex items-center justify-between",children:[v.jsx("span",{className:"text-xs text-[#aaa]",children:"Severity"}),v.jsxs("div",{className:"flex items-center gap-1.5",children:[v.jsx("div",{className:`w-2 h-2 rounded-full ${Pp(a)}`,"aria-hidden":"true"}),v.jsx("span",{className:"text-sm font-medium capitalize text-white",children:a})]})]}),v.jsxs("div",{className:"flex items-center justify-between",children:[v.jsx("span",{className:"text-xs text-[#aaa]",children:"CVSS Score"}),v.jsx("span",{className:"text-sm font-semibold tabular-nums text-white",children:o!==null?o:"N/A"})]}),s&&v.jsxs("div",{className:"flex items-center justify-between",children:[v.jsx("span",{className:"text-xs text-[#aaa]",children:"CVE"}),v.jsx("span",{className:"text-sm text-white font-mono",children:s})]}),c&&c.length>0&&v.jsxs("div",{className:"flex items-center justify-between",children:[v.jsx("span",{className:"text-xs text-[#aaa]",children:"CWE"}),v.jsx("span",{className:"text-xs text-white font-mono truncate max-w-[80%] text-right",title:c.join(" ยท "),children:c.join(" ยท ")})]}),f&&v.jsxs("div",{className:"flex items-center justify-between",children:[v.jsx("span",{className:"text-xs text-[#aaa]",children:"Fix Effort"}),v.jsx("span",{className:`inline-flex items-center px-2 py-0.5 text-[11px] font-medium rounded-full border ${((R=W2[f])==null?void 0:R.color)??"text-[#666]"}`,children:f.charAt(0).toUpperCase()+f.slice(1)})]}),v.jsxs("div",{className:"flex items-center justify-between",children:[v.jsx("span",{className:"text-xs text-[#aaa]",children:"Discovered"}),v.jsxs("div",{className:"flex items-center gap-1.5",children:[v.jsx($_,{className:"w-3 h-3 text-[#444]","aria-hidden":"true"}),v.jsx("span",{className:"text-sm text-white",children:dp(h)})]})]}),v.jsxs("div",{className:"flex items-center justify-between",children:[v.jsx("span",{className:"text-xs text-[#aaa]",children:"Status"}),n]})]})}),O&&v.jsxs("div",{className:"border-t border-[#191919] pt-4 pb-4",children:[v.jsx("p",{className:"text-xs font-medium text-[#aaa] mb-2.5",children:"Asset"}),v.jsxs("div",{className:"space-y-2.5",children:[d&&w&&v.jsxs("div",{className:"flex items-center gap-1.5",children:[w.provider?v.jsx("span",{className:"flex-shrink-0 [&_svg]:w-3.5 [&_svg]:h-3.5","aria-hidden":"true",children:v.jsx(bL,{provider:w.provider})}):v.jsx(P_,{className:"w-3.5 h-3.5 text-[#555] flex-shrink-0","aria-hidden":"true"}),w.href?v.jsx("a",{href:w.href,target:"_blank",rel:"noopener noreferrer",className:"text-sm text-white hover:text-[#ccc] break-words min-w-0 transition-colors",children:w.display}):v.jsx("span",{className:"text-sm text-white break-words min-w-0",children:w.display})]}),p&&v.jsxs("div",{className:"flex items-center justify-between",children:[v.jsx("span",{className:"text-xs text-[#aaa]",children:"Endpoint"}),v.jsx("span",{className:"text-xs text-white font-mono truncate max-w-[75%] text-right",children:p})]}),m&&v.jsxs("div",{className:"flex items-center justify-between",children:[v.jsx("span",{className:"text-xs text-[#aaa]",children:"Method"}),v.jsx("span",{className:"text-xs text-white font-mono",children:m})]}),k&&v.jsxs("div",{children:[v.jsx("span",{className:"text-xs text-[#aaa] mb-1.5 block",children:"Locations"}),v.jsx("div",{className:"space-y-0.5",children:E.map((H,I)=>{const K=`${H.file}:${H.start_line}`,L=_?EL(_.repo_url,_.provider,_.branch,H.file,H.start_line):null;return L?v.jsx("a",{href:L,target:"_blank",rel:"noopener noreferrer",className:"text-[13px] text-[#888] hover:text-white font-mono break-all transition-colors block",children:K},`loc-${I}`):v.jsx("span",{className:"text-[13px] text-[#888] font-mono break-all block",children:K},`loc-${I}`)})})]})]})]}),B&&v.jsxs("div",{className:"border-t border-[#191919] pt-4",children:[v.jsxs("button",{onClick:()=>N(!S),className:"flex items-center justify-between w-full mb-2.5 group","aria-expanded":S,children:[v.jsx("span",{className:"text-xs font-medium text-[#aaa]",children:"Risk Assessment"}),v.jsx(Fk,{className:`w-3.5 h-3.5 text-[#555] group-hover:text-white transition-transform ${S?"":"-rotate-90"}`,"aria-hidden":"true"})]}),v.jsx("div",{className:`space-y-3 ${S?"":"hidden"}`,children:_L.map(H=>{const I=H.keys.filter(K=>b[K]!=null);return I.length===0?null:v.jsxs("div",{children:[v.jsxs("div",{className:"flex items-center justify-between mb-1.5",children:[v.jsx("p",{className:"text-[10px] uppercase tracking-wider text-[#444] font-medium",children:H.label}),v.jsx("p",{className:"text-[10px] uppercase tracking-wider text-[#444] font-medium mr-2",children:"Risk"})]}),v.jsx("div",{className:"space-y-1",children:I.map(K=>{var Y,A;const L=b[K],q=L?((Y=xL[K])==null?void 0:Y[L])??"low":"low",X=L?((A=yL[K])==null?void 0:A[L])??L:"N/A";return v.jsxs("div",{className:"flex items-center justify-between py-0.5",children:[v.jsx("span",{className:"text-[12px] text-[#aaa]",children:X}),v.jsx("span",{className:`text-[10px] font-medium px-1.5 py-0.5 rounded border ${vL[q]}`,children:q})]},K)})})]},H.label)})})]})]})}function av(e){return e?Math.floor((Date.now()-new Date(e).getTime())/1e3)<604800?` ${dp(e)}`:` on ${dp(e)}`:""}const SL={open:null,in_progress:{icon:$_,label:"Marked as In Progress",iconColor:"text-blue-400"},snoozed:{icon:zk,label:"Snoozed",iconColor:"text-purple-400"},fixed:{icon:Kk,label:"Marked as Fixed",iconColor:"text-emerald-400"},ignored:{icon:B_,label:"Marked as Ignored",iconColor:"text-[#888]"}};function NL({vulnerability:e}){const n=Q2[e.status],i=e.code_locations&&e.code_locations.length>0,a=i||e.remediation_steps,o=!!(e.evidence||e.assumptions||e.poc_description||e.poc_script_code),[s,c]=ae.useState("fix"),h=[{id:"fix",label:"Fix",show:!!a},{id:"reproduction",label:"Reproduction",show:o}].filter(d=>d.show);return v.jsxs("div",{className:"space-y-6",children:[v.jsxs("div",{children:[v.jsxs("div",{className:"mb-2",children:[e.display_number&&v.jsx("span",{className:"text-xs font-mono text-[#555] block mb-1",children:XT(e.display_number)}),v.jsx("h1",{className:"text-2xl font-semibold text-white",children:e.title})]}),v.jsxs("div",{className:"flex flex-wrap items-center gap-3",children:[v.jsx("span",{className:`inline-flex items-center gap-1.5 px-3 py-1 text-sm font-medium rounded-full border ${n.color}`,children:n.label}),v.jsxs("div",{className:`inline-flex items-center gap-1.5 px-3 py-1 text-sm font-semibold rounded-full border ${F_[e.severity]}`,title:Tc(e)?`Adjusted from ${e.original_severity}`:void 0,children:[v.jsx("div",{className:`w-2 h-2 rounded-full ${Pp(e.severity)}`}),v.jsxs("span",{className:"capitalize",children:[e.severity,!Tc(e)&&e.cvss?` ${e.cvss}`:""]}),Tc(e)&&v.jsx(wy,{className:"w-3 h-3 opacity-70","aria-hidden":"true"})]}),e.cve&&v.jsxs(v.Fragment,{children:[v.jsx("span",{className:"text-[#333]",children:"ยท"}),v.jsx("span",{className:"text-sm text-[#666] font-mono",children:e.cve})]})]})]}),e.status!=="open"&&(()=>{const d=SL[e.status];if(!d)return null;const p=d.icon;return v.jsxs("div",{className:"rounded-lg px-4 py-3.5 flex gap-3",style:{border:"1px solid rgba(255,255,255,0.08)"},children:[v.jsx(p,{className:`w-5 h-5 flex-shrink-0 mt-0.5 ${d.iconColor}`,"aria-hidden":"true"}),v.jsxs("div",{className:"min-w-0",children:[v.jsxs("p",{className:"text-sm font-semibold text-white",children:[d.label,av(e.status_changed_at)]}),e.status_note&&v.jsxs("p",{className:"text-sm text-[#666] italic mt-1",children:["โ€œ",e.status_note,"โ€"]})]})]})})(),Tc(e)&&v.jsxs("div",{className:"rounded-lg px-4 py-3.5 flex gap-3",style:{border:"1px solid rgba(255,255,255,0.08)"},children:[v.jsx(wy,{className:"w-5 h-5 flex-shrink-0 mt-0.5 text-orange-400","aria-hidden":"true"}),v.jsxs("div",{className:"min-w-0",children:[v.jsxs("p",{className:"text-sm font-semibold text-white",children:["Severity changed manually from"," ",v.jsx("span",{className:"capitalize",children:e.original_severity}),e.cvss!=null?` (${e.cvss})`:""," to"," ",v.jsx("span",{className:"capitalize",children:e.severity}),av(e.severity_changed_at)]}),e.severity_override_reason&&v.jsxs("p",{className:"text-sm text-[#666] italic mt-1",children:["โ€œ",e.severity_override_reason,"โ€"]})]})]}),v.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-[1fr_340px] gap-8",children:[v.jsxs("div",{className:"min-w-0",children:[v.jsxs("div",{className:"space-y-8",children:[v.jsx(ta,{title:"TL;DR",content:e.description}),e.impact&&v.jsx(ta,{title:"Impact",content:e.impact}),e.technical_analysis&&v.jsx(ta,{title:"Technical Details",content:e.technical_analysis})]}),h.length>0&&v.jsxs("div",{className:"mt-10",children:[v.jsx("div",{className:"border-b border-[#2a2a2a]",children:v.jsx("nav",{className:"flex gap-6","aria-label":"Tabs",children:h.map(d=>v.jsxs("button",{onClick:()=>c(d.id),className:`relative min-w-[80px] text-center pb-3 text-[16px] font-semibold transition-colors ${s===d.id?"text-white":"text-[#666] hover:text-white"}`,"aria-current":s===d.id?"page":void 0,children:[d.label,s===d.id&&v.jsx("span",{className:"absolute bottom-0 inset-x-0 h-0.5 bg-white rounded-full"})]},d.id))})}),a&&v.jsxs("div",{className:`pt-6 space-y-6 ${s==="fix"?"animate-tab-in":"hidden"}`,children:[e.remediation_steps&&v.jsx(ta,{title:"How do I fix it?",content:e.remediation_steps}),i&&e.code_locations.filter(d=>d.fix_before&&d.fix_after).map((d,p)=>v.jsx(hL,{file:d.file,startLine:d.start_line,endLine:d.end_line,before:d.fix_before,after:d.fix_after},`fix-${p}`))]}),o&&v.jsxs("div",{className:`pt-6 space-y-8 ${s==="reproduction"?"animate-tab-in":"hidden"}`,children:[e.assumptions&&v.jsx(ta,{title:"Assumptions",content:e.assumptions}),e.evidence&&v.jsx(ta,{title:"Evidence",content:e.evidence}),v.jsx(pL,{description:e.poc_description,scriptCode:e.poc_script_code})]})]})]}),v.jsx("div",{className:"lg:border-l lg:border-[#2a2a2a] lg:pl-6",children:v.jsx(wL,{vulnerability:e,statusSlot:v.jsxs("span",{className:`inline-flex items-center gap-1.5 px-2.5 py-1 text-xs font-medium rounded-full border ${n.color}`,children:[v.jsx("div",{className:`w-1.5 h-1.5 rounded-full ${n.dotColor}`}),n.label]})})})]})]})}const lv=[{key:"critical",label:"critical",dotClass:"bg-red-500",textClass:"text-red-500"},{key:"high",label:"high",dotClass:"bg-orange-500",textClass:"text-orange-500"},{key:"medium",label:"medium",dotClass:"bg-yellow-500",textClass:"text-yellow-500"},{key:"low",label:"low",dotClass:"bg-blue-500",textClass:"text-blue-500"}];function kL({findings:e,className:n,unit:i="issues",trailing:a}){return e.total<=0?null:v.jsxs("div",{className:Mc("space-y-3",n),children:[v.jsxs("div",{className:"flex flex-wrap items-center gap-x-8 gap-y-3",children:[v.jsxs("div",{className:"flex items-center gap-2",children:[v.jsx("span",{className:"text-2xl font-semibold text-white tabular-nums",children:e.total}),v.jsx("span",{className:"text-sm text-[#666]",children:i})]}),v.jsx("div",{className:"flex flex-wrap items-center gap-x-6 gap-y-2",children:lv.map(({key:o,label:s,dotClass:c,textClass:f})=>{const h=e[o];return h<=0?null:v.jsxs("div",{className:"flex items-center gap-1.5",children:[v.jsx("div",{className:Mc("w-2 h-2 rounded-full",c),"aria-hidden":"true"}),v.jsx("span",{className:Mc("text-sm tabular-nums",f),children:h}),v.jsx("span",{className:"text-xs text-[#555]",children:s})]},o)})}),a?v.jsx("div",{className:"flex items-center gap-2",children:a}):null]}),v.jsx("div",{className:"h-1.5 rounded-full bg-[#222] overflow-hidden flex",children:lv.map(({key:o,dotClass:s})=>{const c=e[o];return c<=0?null:v.jsx("div",{className:Mc("h-full",s),style:{width:`${c/e.total*100}%`}},o)})})]})}function on(e){if(typeof e=="string"||typeof e=="number")return""+e;let n="";if(Array.isArray(e))for(let i=0,a;i{}};function wu(){for(var e=0,n=arguments.length,i={},a;e=0&&(a=i.slice(o+1),i=i.slice(0,o)),i&&!n.hasOwnProperty(i))throw new Error("unknown type: "+i);return{type:i,name:a}})}Yc.prototype=wu.prototype={constructor:Yc,on:function(e,n){var i=this._,a=AL(e+"",i),o,s=-1,c=a.length;if(arguments.length<2){for(;++s0)for(var i=new Array(o),a=0,o,s;a=0&&(n=e.slice(0,i))!=="xmlns"&&(e=e.slice(i+1)),sv.hasOwnProperty(n)?{space:sv[n],local:e}:e}function ML(e){return function(){var n=this.ownerDocument,i=this.namespaceURI;return i===Sp&&n.documentElement.namespaceURI===Sp?n.createElement(e):n.createElementNS(i,e)}}function OL(e){return function(){return this.ownerDocument.createElementNS(e.space,e.local)}}function dE(e){var n=Su(e);return(n.local?OL:ML)(n)}function RL(){}function mm(e){return e==null?RL:function(){return this.querySelector(e)}}function DL(e){typeof e!="function"&&(e=mm(e));for(var n=this._groups,i=n.length,a=new Array(i),o=0;o=w&&(w=k+1);!(B=N[w])&&++w<_;);O._next=B||null}}return c=new ri(c,a),c._enter=f,c._exit=h,c}function JL(e){return typeof e=="object"&&"length"in e?e:Array.from(e)}function e3(){return new ri(this._exit||this._groups.map(gE),this._parents)}function t3(e,n,i){var a=this.enter(),o=this,s=this.exit();return typeof e=="function"?(a=e(a),a&&(a=a.selection())):a=a.append(e+""),n!=null&&(o=n(o),o&&(o=o.selection())),i==null?s.remove():i(s),a&&o?a.merge(o).order():o}function n3(e){for(var n=e.selection?e.selection():e,i=this._groups,a=n._groups,o=i.length,s=a.length,c=Math.min(o,s),f=new Array(o),h=0;h=0;)(c=a[o])&&(s&&c.compareDocumentPosition(s)^4&&s.parentNode.insertBefore(c,s),s=c);return this}function r3(e){e||(e=a3);function n(m,y){return m&&y?e(m.__data__,y.__data__):!m-!y}for(var i=this._groups,a=i.length,o=new Array(a),s=0;sn?1:e>=n?0:NaN}function l3(){var e=arguments[0];return arguments[0]=this,e.apply(null,arguments),this}function o3(){return Array.from(this)}function s3(){for(var e=this._groups,n=0,i=e.length;n1?this.each((n==null?x3:typeof n=="function"?_3:v3)(e,n,i??"")):Rl(this.node(),e)}function Rl(e,n){return e.style.getPropertyValue(n)||bE(e).getComputedStyle(e,null).getPropertyValue(n)}function w3(e){return function(){delete this[e]}}function S3(e,n){return function(){this[e]=n}}function N3(e,n){return function(){var i=n.apply(this,arguments);i==null?delete this[e]:this[e]=i}}function k3(e,n){return arguments.length>1?this.each((n==null?w3:typeof n=="function"?N3:S3)(e,n)):this.node()[e]}function yE(e){return e.trim().split(/^|\s+/)}function gm(e){return e.classList||new xE(e)}function xE(e){this._node=e,this._names=yE(e.getAttribute("class")||"")}xE.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 vE(e,n){for(var i=gm(e),a=-1,o=n.length;++a=0&&(i=n.slice(a+1),n=n.slice(0,a)),{type:n,name:i}})}function ez(e){return function(){var n=this.__on;if(n){for(var i=0,a=-1,o=n.length,s;i()=>e;function Np(e,{sourceEvent:n,subject:i,target:a,identifier:o,active:s,x:c,y:f,dx:h,dy:d,dispatch:p}){Object.defineProperties(this,{type:{value:e,enumerable:!0,configurable:!0},sourceEvent:{value:n,enumerable:!0,configurable:!0},subject:{value:i,enumerable:!0,configurable:!0},target:{value:a,enumerable:!0,configurable:!0},identifier:{value:o,enumerable:!0,configurable:!0},active:{value:s,enumerable:!0,configurable:!0},x:{value:c,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:p}})}Np.prototype.on=function(){var e=this._.on.apply(this._,arguments);return e===this._?this:e};function uz(e){return!e.ctrlKey&&!e.button}function fz(){return this.parentNode}function dz(e,n){return n??{x:e.x,y:e.y}}function hz(){return navigator.maxTouchPoints||"ontouchstart"in this}function kE(){var e=uz,n=fz,i=dz,a=hz,o={},s=wu("start","drag","end"),c=0,f,h,d,p,m=0;function y(O){O.on("mousedown.drag",b).filter(a).on("touchstart.drag",N).on("touchmove.drag",E,cz).on("touchend.drag touchcancel.drag",k).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function b(O,B){if(!(p||!e.call(this,O,B))){var R=w(this,n.call(this,O,B),O,B,"mouse");R&&(ni(O.view).on("mousemove.drag",_,Zo).on("mouseup.drag",S,Zo),SE(O.view),Vh(O),d=!1,f=O.clientX,h=O.clientY,R("start",O))}}function _(O){if(Cl(O),!d){var B=O.clientX-f,R=O.clientY-h;d=B*B+R*R>m}o.mouse("drag",O)}function S(O){ni(O.view).on("mousemove.drag mouseup.drag",null),NE(O.view,d),Cl(O),o.mouse("end",O)}function N(O,B){if(e.call(this,O,B)){var R=O.changedTouches,H=n.call(this,O,B),I=R.length,K,L;for(K=0;K>8&15|n>>4&240,n>>4&15|n&240,(n&15)<<4|n&15,1):i===8?Ic(n>>24&255,n>>16&255,n>>8&255,(n&255)/255):i===4?Ic(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=mz.exec(e))?new Pn(n[1],n[2],n[3],1):(n=gz.exec(e))?new Pn(n[1]*255/100,n[2]*255/100,n[3]*255/100,1):(n=bz.exec(e))?Ic(n[1],n[2],n[3],n[4]):(n=yz.exec(e))?Ic(n[1]*255/100,n[2]*255/100,n[3]*255/100,n[4]):(n=xz.exec(e))?mv(n[1],n[2]/100,n[3]/100,1):(n=vz.exec(e))?mv(n[1],n[2]/100,n[3]/100,n[4]):cv.hasOwnProperty(e)?dv(cv[e]):e==="transparent"?new Pn(NaN,NaN,NaN,0):null}function dv(e){return new Pn(e>>16&255,e>>8&255,e&255,1)}function Ic(e,n,i,a){return a<=0&&(e=n=i=NaN),new Pn(e,n,i,a)}function wz(e){return e instanceof fs||(e=za(e)),e?(e=e.rgb(),new Pn(e.r,e.g,e.b,e.opacity)):new Pn}function kp(e,n,i,a){return arguments.length===1?wz(e):new Pn(e,n,i,a??1)}function Pn(e,n,i,a){this.r=+e,this.g=+n,this.b=+i,this.opacity=+a}bm(Pn,kp,TE(fs,{brighter(e){return e=e==null?lu:Math.pow(lu,e),new Pn(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){return e=e==null?Qo:Math.pow(Qo,e),new Pn(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new Pn(Ra(this.r),Ra(this.g),Ra(this.b),ou(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:hv,formatHex:hv,formatHex8:Sz,formatRgb:pv,toString:pv}));function hv(){return`#${Ma(this.r)}${Ma(this.g)}${Ma(this.b)}`}function Sz(){return`#${Ma(this.r)}${Ma(this.g)}${Ma(this.b)}${Ma((isNaN(this.opacity)?1:this.opacity)*255)}`}function pv(){const e=ou(this.opacity);return`${e===1?"rgb(":"rgba("}${Ra(this.r)}, ${Ra(this.g)}, ${Ra(this.b)}${e===1?")":`, ${e})`}`}function ou(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function Ra(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function Ma(e){return e=Ra(e),(e<16?"0":"")+e.toString(16)}function mv(e,n,i,a){return a<=0?e=n=i=NaN:i<=0||i>=1?e=n=NaN:n<=0&&(e=NaN),new ki(e,n,i,a)}function AE(e){if(e instanceof ki)return new ki(e.h,e.s,e.l,e.opacity);if(e instanceof fs||(e=za(e)),!e)return new ki;if(e instanceof ki)return e;e=e.rgb();var n=e.r/255,i=e.g/255,a=e.b/255,o=Math.min(n,i,a),s=Math.max(n,i,a),c=NaN,f=s-o,h=(s+o)/2;return f?(n===s?c=(i-a)/f+(i0&&h<1?0:c,new ki(c,f,h,e.opacity)}function Nz(e,n,i,a){return arguments.length===1?AE(e):new ki(e,n,i,a??1)}function ki(e,n,i,a){this.h=+e,this.s=+n,this.l=+i,this.opacity=+a}bm(ki,Nz,TE(fs,{brighter(e){return e=e==null?lu:Math.pow(lu,e),new ki(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=e==null?Qo:Math.pow(Qo,e),new ki(this.h,this.s,this.l*e,this.opacity)},rgb(){var e=this.h%360+(this.h<0)*360,n=isNaN(e)||isNaN(this.s)?0:this.s,i=this.l,a=i+(i<.5?i:1-i)*n,o=2*i-a;return new Pn(Yh(e>=240?e-240:e+120,o,a),Yh(e,o,a),Yh(e<120?e+240:e-120,o,a),this.opacity)},clamp(){return new ki(gv(this.h),jc(this.s),jc(this.l),ou(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=ou(this.opacity);return`${e===1?"hsl(":"hsla("}${gv(this.h)}, ${jc(this.s)*100}%, ${jc(this.l)*100}%${e===1?")":`, ${e})`}`}}));function gv(e){return e=(e||0)%360,e<0?e+360:e}function jc(e){return Math.max(0,Math.min(1,e||0))}function Yh(e,n,i){return(e<60?n+(i-n)*e/60:e<180?i:e<240?n+(i-n)*(240-e)/60:n)*255}const ym=e=>()=>e;function kz(e,n){return function(i){return e+i*n}}function Tz(e,n,i){return e=Math.pow(e,i),n=Math.pow(n,i)-e,i=1/i,function(a){return Math.pow(e+a*n,i)}}function Az(e){return(e=+e)==1?CE:function(n,i){return i-n?Tz(n,i,e):ym(isNaN(n)?i:n)}}function CE(e,n){var i=n-e;return i?kz(e,i):ym(isNaN(e)?n:e)}const su=(function e(n){var i=Az(n);function a(o,s){var c=i((o=kp(o)).r,(s=kp(s)).r),f=i(o.g,s.g),h=i(o.b,s.b),d=CE(o.opacity,s.opacity);return function(p){return o.r=c(p),o.g=f(p),o.b=h(p),o.opacity=d(p),o+""}}return a.gamma=e,a})(1);function Cz(e,n){n||(n=[]);var i=e?Math.min(n.length,e.length):0,a=n.slice(),o;return function(s){for(o=0;oi&&(s=n.slice(i,s),f[c]?f[c]+=s:f[++c]=s),(a=a[0])===(o=o[0])?f[c]?f[c]+=o:f[++c]=o:(f[++c]=null,h.push({i:c,x:$i(a,o)})),i=Xh.lastIndex;return i180?p+=360:p-d>180&&(d+=360),y.push({i:m.push(o(m)+"rotate(",null,a)-2,x:$i(d,p)})):p&&m.push(o(m)+"rotate("+p+a)}function f(d,p,m,y){d!==p?y.push({i:m.push(o(m)+"skewX(",null,a)-2,x:$i(d,p)}):p&&m.push(o(m)+"skewX("+p+a)}function h(d,p,m,y,b,_){if(d!==m||p!==y){var S=b.push(o(b)+"scale(",null,",",null,")");_.push({i:S-4,x:$i(d,m)},{i:S-2,x:$i(p,y)})}else(m!==1||y!==1)&&b.push(o(b)+"scale("+m+","+y+")")}return function(d,p){var m=[],y=[];return d=e(d),p=e(p),s(d.translateX,d.translateY,p.translateX,p.translateY,m,y),c(d.rotate,p.rotate,m,y),f(d.skewX,p.skewX,m,y),h(d.scaleX,d.scaleY,p.scaleX,p.scaleY,m,y),d=p=null,function(b){for(var _=-1,S=y.length,N;++_=0&&e._call.call(void 0,n),e=e._next;--Dl}function xv(){Ia=(uu=Jo.now())+Nu,Dl=$o=0;try{Fz()}finally{Dl=0,Vz(),Ia=0}}function Gz(){var e=Jo.now(),n=e-uu;n>DE&&(Nu-=n,uu=e)}function Vz(){for(var e,n=cu,i,a=1/0;n;)n._call?(a>n._time&&(a=n._time),e=n,n=n._next):(i=n._next,n._next=null,n=e?e._next=i:cu=i);qo=e,Cp(a)}function Cp(e){if(!Dl){$o&&($o=clearTimeout($o));var n=e-Ia;n>24?(e<1/0&&($o=setTimeout(xv,e-Jo.now()-Nu)),Bo&&(Bo=clearInterval(Bo))):(Bo||(uu=Jo.now(),Bo=setInterval(Gz,DE)),Dl=1,LE(xv))}}function vv(e,n,i){var a=new fu;return n=n==null?0:+n,a.restart(o=>{a.stop(),e(o+n)},n,i),a}var Yz=wu("start","end","cancel","interrupt"),Xz=[],IE=0,_v=1,Mp=2,Kc=3,Ev=4,Op=5,Zc=6;function ku(e,n,i,a,o,s){var c=e.__transition;if(!c)e.__transition={};else if(i in c)return;Kz(e,i,{name:n,index:a,group:o,on:Yz,tween:Xz,time:s.time,delay:s.delay,duration:s.duration,ease:s.ease,timer:null,state:IE})}function vm(e,n){var i=Ri(e,n);if(i.state>IE)throw new Error("too late; already scheduled");return i}function Gi(e,n){var i=Ri(e,n);if(i.state>Kc)throw new Error("too late; already running");return i}function Ri(e,n){var i=e.__transition;if(!i||!(i=i[n]))throw new Error("transition not found");return i}function Kz(e,n,i){var a=e.__transition,o;a[n]=i,i.timer=zE(s,0,i.time);function s(d){i.state=_v,i.timer.restart(c,i.delay,i.time),i.delay<=d&&c(d-i.delay)}function c(d){var p,m,y,b;if(i.state!==_v)return h();for(p in a)if(b=a[p],b.name===i.name){if(b.state===Kc)return vv(c);b.state===Ev?(b.state=Zc,b.timer.stop(),b.on.call("interrupt",e,e.__data__,b.index,b.group),delete a[p]):+pMp&&a.state=0&&(n=n.slice(0,i)),!n||n==="start"})}function N4(e,n,i){var a,o,s=S4(n)?vm:Gi;return function(){var c=s(this,e),f=c.on;f!==a&&(o=(a=f).copy()).on(n,i),c.on=o}}function k4(e,n){var i=this._id;return arguments.length<2?Ri(this.node(),i).on.on(e):this.each(N4(i,e,n))}function T4(e){return function(){var n=this.parentNode;for(var i in this.__transition)if(+i!==e)return;n&&n.removeChild(this)}}function A4(){return this.on("end.remove",T4(this._id))}function C4(e){var n=this._name,i=this._id;typeof e!="function"&&(e=mm(e));for(var a=this._groups,o=a.length,s=new Array(o),c=0;c()=>e;function eI(e,{sourceEvent:n,target:i,transform:a,dispatch:o}){Object.defineProperties(this,{type:{value:e,enumerable:!0,configurable:!0},sourceEvent:{value:n,enumerable:!0,configurable:!0},target:{value:i,enumerable:!0,configurable:!0},transform:{value:a,enumerable:!0,configurable:!0},_:{value:o}})}function pr(e,n,i){this.k=e,this.x=n,this.y=i}pr.prototype={constructor:pr,scale:function(e){return e===1?this:new pr(this.k*e,this.x,this.y)},translate:function(e,n){return e===0&n===0?this:new pr(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 Tu=new pr(1,0,0);HE.prototype=pr.prototype;function HE(e){for(;!e.__zoom;)if(!(e=e.parentNode))return Tu;return e.__zoom}function Kh(e){e.stopImmediatePropagation()}function Uo(e){e.preventDefault(),e.stopImmediatePropagation()}function tI(e){return(!e.ctrlKey||e.type==="wheel")&&!e.button}function nI(){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 wv(){return this.__zoom||Tu}function iI(e){return-e.deltaY*(e.deltaMode===1?.05:e.deltaMode?1:.002)*(e.ctrlKey?10:1)}function rI(){return navigator.maxTouchPoints||"ontouchstart"in this}function aI(e,n,i){var a=e.invertX(n[0][0])-i[0][0],o=e.invertX(n[1][0])-i[1][0],s=e.invertY(n[0][1])-i[0][1],c=e.invertY(n[1][1])-i[1][1];return e.translate(o>a?(a+o)/2:Math.min(0,a)||Math.max(0,o),c>s?(s+c)/2:Math.min(0,s)||Math.max(0,c))}function $E(){var e=tI,n=nI,i=aI,a=iI,o=rI,s=[0,1/0],c=[[-1/0,-1/0],[1/0,1/0]],f=250,h=Xc,d=wu("start","zoom","end"),p,m,y,b=500,_=150,S=0,N=10;function E(A){A.property("__zoom",wv).on("wheel.zoom",I,{passive:!1}).on("mousedown.zoom",K).on("dblclick.zoom",L).filter(o).on("touchstart.zoom",q).on("touchmove.zoom",X).on("touchend.zoom touchcancel.zoom",Y).style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}E.transform=function(A,$,M,j){var V=A.selection?A.selection():A;V.property("__zoom",wv),A!==V?B(A,$,M,j):V.interrupt().each(function(){R(this,arguments).event(j).start().zoom(null,typeof $=="function"?$.apply(this,arguments):$).end()})},E.scaleBy=function(A,$,M,j){E.scaleTo(A,function(){var V=this.__zoom.k,Z=typeof $=="function"?$.apply(this,arguments):$;return V*Z},M,j)},E.scaleTo=function(A,$,M,j){E.transform(A,function(){var V=n.apply(this,arguments),Z=this.__zoom,C=M==null?O(V):typeof M=="function"?M.apply(this,arguments):M,z=Z.invert(C),G=typeof $=="function"?$.apply(this,arguments):$;return i(w(k(Z,G),C,z),V,c)},M,j)},E.translateBy=function(A,$,M,j){E.transform(A,function(){return i(this.__zoom.translate(typeof $=="function"?$.apply(this,arguments):$,typeof M=="function"?M.apply(this,arguments):M),n.apply(this,arguments),c)},null,j)},E.translateTo=function(A,$,M,j,V){E.transform(A,function(){var Z=n.apply(this,arguments),C=this.__zoom,z=j==null?O(Z):typeof j=="function"?j.apply(this,arguments):j;return i(Tu.translate(z[0],z[1]).scale(C.k).translate(typeof $=="function"?-$.apply(this,arguments):-$,typeof M=="function"?-M.apply(this,arguments):-M),Z,c)},j,V)};function k(A,$){return $=Math.max(s[0],Math.min(s[1],$)),$===A.k?A:new pr($,A.x,A.y)}function w(A,$,M){var j=$[0]-M[0]*A.k,V=$[1]-M[1]*A.k;return j===A.x&&V===A.y?A:new pr(A.k,j,V)}function O(A){return[(+A[0][0]+ +A[1][0])/2,(+A[0][1]+ +A[1][1])/2]}function B(A,$,M,j){A.on("start.zoom",function(){R(this,arguments).event(j).start()}).on("interrupt.zoom end.zoom",function(){R(this,arguments).event(j).end()}).tween("zoom",function(){var V=this,Z=arguments,C=R(V,Z).event(j),z=n.apply(V,Z),G=M==null?O(z):typeof M=="function"?M.apply(V,Z):M,D=Math.max(z[1][0]-z[0][0],z[1][1]-z[0][1]),F=V.__zoom,U=typeof $=="function"?$.apply(V,Z):$,Q=h(F.invert(G).concat(D/F.k),U.invert(G).concat(D/U.k));return function(J){if(J===1)J=U;else{var W=Q(J),ee=D/W[2];J=new pr(ee,G[0]-W[0]*ee,G[1]-W[1]*ee)}C.zoom(null,J)}})}function R(A,$,M){return!M&&A.__zooming||new H(A,$)}function H(A,$){this.that=A,this.args=$,this.active=0,this.sourceEvent=null,this.extent=n.apply(A,$),this.taps=0}H.prototype={event:function(A){return A&&(this.sourceEvent=A),this},start:function(){return++this.active===1&&(this.that.__zooming=this,this.emit("start")),this},zoom:function(A,$){return this.mouse&&A!=="mouse"&&(this.mouse[1]=$.invert(this.mouse[0])),this.touch0&&A!=="touch"&&(this.touch0[1]=$.invert(this.touch0[0])),this.touch1&&A!=="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(A){var $=ni(this.that).datum();d.call(A,this.that,new eI(A,{sourceEvent:this.sourceEvent,target:E,transform:this.that.__zoom,dispatch:d}),$)}};function I(A,...$){if(!e.apply(this,arguments))return;var M=R(this,$).event(A),j=this.__zoom,V=Math.max(s[0],Math.min(s[1],j.k*Math.pow(2,a.apply(this,arguments)))),Z=Ni(A);if(M.wheel)(M.mouse[0][0]!==Z[0]||M.mouse[0][1]!==Z[1])&&(M.mouse[1]=j.invert(M.mouse[0]=Z)),clearTimeout(M.wheel);else{if(j.k===V)return;M.mouse=[Z,j.invert(Z)],Qc(this),M.start()}Uo(A),M.wheel=setTimeout(C,_),M.zoom("mouse",i(w(k(j,V),M.mouse[0],M.mouse[1]),M.extent,c));function C(){M.wheel=null,M.end()}}function K(A,...$){if(y||!e.apply(this,arguments))return;var M=A.currentTarget,j=R(this,$,!0).event(A),V=ni(A.view).on("mousemove.zoom",G,!0).on("mouseup.zoom",D,!0),Z=Ni(A,M),C=A.clientX,z=A.clientY;SE(A.view),Kh(A),j.mouse=[Z,this.__zoom.invert(Z)],Qc(this),j.start();function G(F){if(Uo(F),!j.moved){var U=F.clientX-C,Q=F.clientY-z;j.moved=U*U+Q*Q>S}j.event(F).zoom("mouse",i(w(j.that.__zoom,j.mouse[0]=Ni(F,M),j.mouse[1]),j.extent,c))}function D(F){V.on("mousemove.zoom mouseup.zoom",null),NE(F.view,j.moved),Uo(F),j.event(F).end()}}function L(A,...$){if(e.apply(this,arguments)){var M=this.__zoom,j=Ni(A.changedTouches?A.changedTouches[0]:A,this),V=M.invert(j),Z=M.k*(A.shiftKey?.5:2),C=i(w(k(M,Z),j,V),n.apply(this,$),c);Uo(A),f>0?ni(this).transition().duration(f).call(B,C,j,A):ni(this).call(E.transform,C,j,A)}}function q(A,...$){if(e.apply(this,arguments)){var M=A.touches,j=M.length,V=R(this,$,A.changedTouches.length===j).event(A),Z,C,z,G;for(Kh(A),C=0;C`Seems like you have not used ${e==="svelte"?"SvelteFlowProvider":"ReactFlowProvider"} as an ancestor. Help: https://${e}flow.dev/error#001`,error002:()=>"It looks like you've created a new nodeTypes or edgeTypes object. If this wasn't on purpose please define the nodeTypes/edgeTypes outside of the component or memoize them.",error003:e=>`Node type "${e}" not found. Using fallback type "default".`,error004:()=>"The parent container needs a width and a height to render the graph.",error005:()=>"Only child nodes can use a parent extent.",error006:()=>"Can't create edge. An edge needs a source and a target.",error007:e=>`The old edge with id=${e} does not exist.`,error009:e=>`Marker type "${e}" doesn't exist.`,error008:(e,{id:n,sourceHandle:i,targetHandle:a})=>`Couldn't create edge for ${e} handle id: "${e==="source"?i:a}", 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.",error016:e=>`Edge with id "${e}" does not exist, it may have been removed. This can happen when an edge is deleted before the "onEdgeClick" handler is called.`},es=[[Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY],[Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY]],qE=["Enter"," ","Escape"],PE={"node.a11yDescription.default":"Press enter or space to select a node. Press delete to remove it and escape to cancel.","node.a11yDescription.keyboardDisabled":"Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.","node.a11yDescription.ariaLiveMessage":({direction:e,x:n,y:i})=>`Moved selected node ${e}. New position, x: ${n}, y: ${i}`,"edge.a11yDescription.default":"Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.","controls.ariaLabel":"Control Panel","controls.zoomIn.ariaLabel":"Zoom In","controls.zoomOut.ariaLabel":"Zoom Out","controls.fitView.ariaLabel":"Fit View","controls.interactive.ariaLabel":"Toggle Interactivity","minimap.ariaLabel":"Mini Map","handle.ariaLabel":"Handle"};var Ll;(function(e){e.Strict="strict",e.Loose="loose"})(Ll||(Ll={}));var Da;(function(e){e.Free="free",e.Vertical="vertical",e.Horizontal="horizontal"})(Da||(Da={}));var ts;(function(e){e.Partial="partial",e.Full="full"})(ts||(ts={}));const FE={inProgress:!1,isValid:null,from:null,fromHandle:null,fromPosition:null,fromNode:null,to:null,toHandle:null,toPosition:null,toNode:null,pointer:null};var na;(function(e){e.Bezier="default",e.Straight="straight",e.Step="step",e.SmoothStep="smoothstep",e.SimpleBezier="simplebezier"})(na||(na={}));var du;(function(e){e.Arrow="arrow",e.ArrowClosed="arrowclosed"})(du||(du={}));var ze;(function(e){e.Left="left",e.Top="top",e.Right="right",e.Bottom="bottom"})(ze||(ze={}));const Sv={[ze.Left]:ze.Right,[ze.Right]:ze.Left,[ze.Top]:ze.Bottom,[ze.Bottom]:ze.Top};function GE(e){return e===null?null:e?"valid":"invalid"}const VE=e=>!!e&&typeof e=="object"&&"id"in e&&"source"in e&&"target"in e,lI=e=>!!e&&typeof e=="object"&&"id"in e&&"position"in e&&!("source"in e)&&!("target"in e),Em=e=>!!e&&typeof e=="object"&&"id"in e&&"internals"in e&&!("source"in e)&&!("target"in e),ds=(e,n=[0,0])=>{const{width:i,height:a}=Vi(e),o=e.origin??n,s=i*o[0],c=a*o[1];return{x:e.position.x-s,y:e.position.y-c}},oI=(e,n={nodeOrigin:[0,0]})=>{if(e.length===0)return{x:0,y:0,width:0,height:0};const i=e.reduce((a,o)=>{const s=typeof o=="string";let c=!n.nodeLookup&&!s?o:void 0;n.nodeLookup&&(c=s?n.nodeLookup.get(o):Em(o)?o:n.nodeLookup.get(o.id));const f=c?hu(c,n.nodeOrigin):{x:0,y:0,x2:0,y2:0};return Au(a,f)},{x:1/0,y:1/0,x2:-1/0,y2:-1/0});return Cu(i)},hs=(e,n={})=>{let i={x:1/0,y:1/0,x2:-1/0,y2:-1/0},a=!1;return e.forEach(o=>{(n.filter===void 0||n.filter(o))&&(i=Au(i,hu(o)),a=!0)}),a?Cu(i):{x:0,y:0,width:0,height:0}},wm=(e,n,[i,a,o]=[0,0,1],s=!1,c=!1)=>{const f=(n.x-i)/o,h=(n.y-a)/o,d=n.width/o,p=n.height/o,m=[];for(const y of e.values()){const{measured:b,selectable:_=!0,hidden:S=!1}=y;if(c&&!_||S)continue;const N=b.width??y.width??y.initialWidth??0,E=b.height??y.height??y.initialHeight??0,{x:k,y:w}=y.internals.positionAbsolute,O=ZE(f,h,d,p,k,w,N,E),B=N*E,R=s&&O>0;(!y.internals.handleBounds||R||O>=B||y.dragging)&&m.push(y)}return m},sI=(e,n)=>{const i=new Set;return e.forEach(a=>{i.add(a.id)}),n.filter(a=>i.has(a.source)||i.has(a.target))};function cI(e,n){const i=new Map,a=n!=null&&n.nodes?new Set(n.nodes.map(o=>o.id)):null;return e.forEach(o=>{let s;if(n!=null&&n.includeHiddenNodes){const{width:c,height:f}=Vi(o);s=c>0&&f>0}else s=!!(o.measured.width&&o.measured.height&&!o.hidden);s&&(!a||a.has(o.id))&&i.set(o.id,o)}),i}async function uI({nodes:e,width:n,height:i,panZoom:a,minZoom:o,maxZoom:s},c){if(e.size===0)return!0;const f=cI(e,c),h=hs(f),d=Nm(h,n,i,(c==null?void 0:c.minZoom)??o,(c==null?void 0:c.maxZoom)??s,(c==null?void 0:c.padding)??.1);return await a.setViewport(d,{duration:c==null?void 0:c.duration,ease:c==null?void 0:c.ease,interpolate:c==null?void 0:c.interpolate}),!0}function YE({nodeId:e,nextPosition:n,nodeLookup:i,nodeOrigin:a=[0,0],nodeExtent:o,onError:s}){const c=i.get(e),f=c.parentId?i.get(c.parentId):void 0,{x:h,y:d}=f?f.internals.positionAbsolute:{x:0,y:0},p=c.origin??a;let m=c.extent||o;if(c.extent==="parent"&&!c.expandParent)if(!f)s==null||s("005",Mi.error005());else{const b=f.measured.width,_=f.measured.height;b&&_&&(m=[[h,d],[h+b,d+_]])}else f&&Ba(c.extent)&&(m=[[c.extent[0][0]+h,c.extent[0][1]+d],[c.extent[1][0]+h,c.extent[1][1]+d]]);const y=Ba(m)?ja(n,m,c.measured):n;return(c.measured.width===void 0||c.measured.height===void 0)&&(s==null||s("015",Mi.error015())),{position:{x:y.x-h+(c.measured.width??0)*p[0],y:y.y-d+(c.measured.height??0)*p[1]},positionAbsolute:y}}async function fI({nodesToRemove:e=[],edgesToRemove:n=[],nodes:i,edges:a,onBeforeDelete:o}){const s=new Set(e.map(y=>y.id)),c=[];for(const y of i){if(y.deletable===!1)continue;const b=s.has(y.id),_=!b&&y.parentId&&c.find(S=>S.id===y.parentId);(b||_)&&c.push(y)}const f=new Set(n.map(y=>y.id)),h=a.filter(y=>y.deletable!==!1),p=sI(c,h);for(const y of h)f.has(y.id)&&!p.find(_=>_.id===y.id)&&p.push(y);if(!o)return{edges:p,nodes:c};const m=await o({nodes:c,edges:p});return typeof m=="boolean"?m?{edges:p,nodes:c}:{edges:[],nodes:[]}:m}const zl=(e,n=0,i=1)=>Math.min(Math.max(e,n),i),ja=(e={x:0,y:0},n,i)=>({x:zl(e.x,n[0][0],n[1][0]-((i==null?void 0:i.width)??0)),y:zl(e.y,n[0][1],n[1][1]-((i==null?void 0:i.height)??0))});function XE(e,n,i){const{width:a,height:o}=Vi(i),{x:s,y:c}=i.internals.positionAbsolute;return ja(e,[[s,c],[s+a,c+o]],n)}const Nv=(e,n,i)=>ei?-zl(Math.abs(e-i),1,n)/n:0,Sm=(e,n,i=15,a=40)=>{const o=Nv(e.x,a,n.width-a)*i,s=Nv(e.y,a,n.height-a)*i;return[o,s]},Au=(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)}),Rp=({x:e,y:n,width:i,height:a})=>({x:e,y:n,x2:e+i,y2:n+a}),Cu=({x:e,y:n,x2:i,y2:a})=>({x:e,y:n,width:i-e,height:a-n}),ns=(e,n=[0,0])=>{var o,s;const{x:i,y:a}=Em(e)?e.internals.positionAbsolute:ds(e,n);return{x:i,y:a,width:((o=e.measured)==null?void 0:o.width)??e.width??e.initialWidth??0,height:((s=e.measured)==null?void 0:s.height)??e.height??e.initialHeight??0}},hu=(e,n=[0,0])=>{var o,s;const{x:i,y:a}=Em(e)?e.internals.positionAbsolute:ds(e,n);return{x:i,y:a,x2:i+(((o=e.measured)==null?void 0:o.width)??e.width??e.initialWidth??0),y2:a+(((s=e.measured)==null?void 0:s.height)??e.height??e.initialHeight??0)}},KE=(e,n)=>Cu(Au(Rp(e),Rp(n))),ZE=(e,n,i,a,o,s,c,f)=>{const h=Math.max(0,Math.min(e+i,o+c)-Math.max(e,o)),d=Math.max(0,Math.min(n+a,s+f)-Math.max(n,s));return Math.ceil(h*d)},pu=(e,n)=>ZE(e.x,e.y,e.width,e.height,n.x,n.y,n.width,n.height),kv=e=>Ti(e.width)&&Ti(e.height)&&Ti(e.x)&&Ti(e.y),Ti=e=>!isNaN(e)&&isFinite(e),QE=(e,n)=>(i,a)=>{},ps=(e,n=[1,1])=>({x:n[0]*Math.round(e.x/n[0]),y:n[1]*Math.round(e.y/n[1])}),ms=({x:e,y:n},[i,a,o],s=!1,c=[1,1])=>{const f={x:(e-i)/o,y:(n-a)/o};return s?ps(f,c):f},Il=({x:e,y:n},[i,a,o])=>({x:e*o+i,y:n*o+a});function wl(e,n){if(typeof e=="number")return Math.floor((n-n/(1+e))*.5);if(typeof e=="string"&&e.endsWith("px")){const i=parseFloat(e);if(!Number.isNaN(i))return Math.floor(i)}if(typeof e=="string"&&e.endsWith("%")){const i=parseFloat(e);if(!Number.isNaN(i))return Math.floor(n*i*.01)}return console.error(`The padding value "${e}" is invalid. Please provide a number or a string with a valid unit (px or %).`),0}function dI(e,n,i){if(typeof e=="string"||typeof e=="number"){const a=wl(e,i),o=wl(e,n);return{top:a,right:o,bottom:a,left:o,x:o*2,y:a*2}}if(typeof e=="object"){const a=wl(e.top??e.y??0,i),o=wl(e.bottom??e.y??0,i),s=wl(e.left??e.x??0,n),c=wl(e.right??e.x??0,n);return{top:a,right:c,bottom:o,left:s,x:s+c,y:a+o}}return{top:0,right:0,bottom:0,left:0,x:0,y:0}}function hI(e,n,i,a,o,s){const{x:c,y:f}=Il(e,[n,i,a]),{x:h,y:d}=Il({x:e.x+e.width,y:e.y+e.height},[n,i,a]),p=o-h,m=s-d;return{left:Math.floor(c),top:Math.floor(f),right:Math.floor(p),bottom:Math.floor(m)}}const Nm=(e,n,i,a,o,s)=>{const c=dI(s,n,i),f=(n-c.x)/e.width,h=(i-c.y)/e.height,d=Math.min(f,h),p=zl(d,a,o),m=e.x+e.width/2,y=e.y+e.height/2,b=n/2-m*p,_=i/2-y*p,S=hI(e,b,_,p,n,i),N={left:Math.min(S.left-c.left,0),top:Math.min(S.top-c.top,0),right:Math.min(S.right-c.right,0),bottom:Math.min(S.bottom-c.bottom,0)};return{x:b-N.left+N.right,y:_-N.top+N.bottom,zoom:p}},is=()=>{var e;return typeof navigator<"u"&&((e=navigator==null?void 0:navigator.userAgent)==null?void 0:e.indexOf("Mac"))>=0};function Ba(e){return e!=null&&e!=="parent"}function Vi(e){var n,i;return{width:((n=e.measured)==null?void 0:n.width)??e.width??e.initialWidth??0,height:((i=e.measured)==null?void 0:i.height)??e.height??e.initialHeight??0}}function WE(e){var n,i;return(((n=e.measured)==null?void 0:n.width)??e.width??e.initialWidth)!==void 0&&(((i=e.measured)==null?void 0:i.height)??e.height??e.initialHeight)!==void 0}function JE(e,n={width:0,height:0},i,a,o){const s={...e},c=a.get(i);if(c){const f=c.origin||o;s.x+=c.internals.positionAbsolute.x-(n.width??0)*f[0],s.y+=c.internals.positionAbsolute.y-(n.height??0)*f[1]}return s}function Tv(e,n){if(e.size!==n.size)return!1;for(const i of e)if(!n.has(i))return!1;return!0}function pI(){let e,n;return{promise:new Promise((a,o)=>{e=a,n=o}),resolve:e,reject:n}}function mI(e){return{...PE,...e||{}}}function Yo(e,{snapGrid:n=[0,0],snapToGrid:i=!1,transform:a,containerBounds:o}){const{x:s,y:c}=Ai(e),f=ms({x:s-((o==null?void 0:o.left)??0),y:c-((o==null?void 0:o.top)??0)},a),{x:h,y:d}=i?ps(f,n):f;return{xSnapped:h,ySnapped:d,...f}}const km=e=>({width:e.offsetWidth,height:e.offsetHeight}),ew=e=>{var n;return((n=e==null?void 0:e.getRootNode)==null?void 0:n.call(e))||(window==null?void 0:window.document)},gI=["INPUT","SELECT","TEXTAREA"];function tw(e){var a,o;const n=((o=(a=e.composedPath)==null?void 0:a.call(e))==null?void 0:o[0])||e.target;return(n==null?void 0:n.nodeType)!==1?!1:gI.includes(n.nodeName)||n.hasAttribute("contenteditable")||!!n.closest(".nokey")}const nw=e=>"clientX"in e,Ai=(e,n)=>{var s,c;const i=nw(e),a=i?e.clientX:(s=e.touches)==null?void 0:s[0].clientX,o=i?e.clientY:(c=e.touches)==null?void 0:c[0].clientY;return{x:a-((n==null?void 0:n.left)??0),y:o-((n==null?void 0:n.top)??0)}},Av=(e,n,i,a,o)=>{const s=n.querySelectorAll(`.${e}`);return!s||!s.length?null:Array.from(s).map(c=>{const f=c.getBoundingClientRect();return{id:c.getAttribute("data-handleid"),type:e,nodeId:o,position:c.getAttribute("data-handlepos"),x:(f.left-i.left)/a,y:(f.top-i.top)/a,...km(c)}})};function iw({sourceX:e,sourceY:n,targetX:i,targetY:a,sourceControlX:o,sourceControlY:s,targetControlX:c,targetControlY:f}){const h=e*.125+o*.375+c*.375+i*.125,d=n*.125+s*.375+f*.375+a*.125,p=Math.abs(h-e),m=Math.abs(d-n);return[h,d,p,m]}function Hc(e,n){return e>=0?.5*e:n*25*Math.sqrt(-e)}function Cv({pos:e,x1:n,y1:i,x2:a,y2:o,c:s}){switch(e){case ze.Left:return[n-Hc(n-a,s),i];case ze.Right:return[n+Hc(a-n,s),i];case ze.Top:return[n,i-Hc(i-o,s)];case ze.Bottom:return[n,i+Hc(o-i,s)]}}function rw({sourceX:e,sourceY:n,sourcePosition:i=ze.Bottom,targetX:a,targetY:o,targetPosition:s=ze.Top,curvature:c=.25}){const[f,h]=Cv({pos:i,x1:e,y1:n,x2:a,y2:o,c}),[d,p]=Cv({pos:s,x1:a,y1:o,x2:e,y2:n,c}),[m,y,b,_]=iw({sourceX:e,sourceY:n,targetX:a,targetY:o,sourceControlX:f,sourceControlY:h,targetControlX:d,targetControlY:p});return[`M${e},${n} C${f},${h} ${d},${p} ${a},${o}`,m,y,b,_]}function aw({sourceX:e,sourceY:n,targetX:i,targetY:a}){const o=Math.abs(i-e)/2,s=i0}const xI=({source:e,sourceHandle:n,target:i,targetHandle:a})=>`xy-edge__${e}${n||""}-${i}${a||""}`,vI=(e,n)=>n.some(i=>i.source===e.source&&i.target===e.target&&(i.sourceHandle===e.sourceHandle||!i.sourceHandle&&!e.sourceHandle)&&(i.targetHandle===e.targetHandle||!i.targetHandle&&!e.targetHandle)),_I=(e,n,i={})=>{var s;if(!e.source||!e.target)return(s=i.onError)==null||s.call(i,"006",Mi.error006()),n;const a=i.getEdgeId||xI;let o;return VE(e)?o={...e}:o={...e,id:a(e)},vI(o,n)?n:(o.sourceHandle===null&&delete o.sourceHandle,o.targetHandle===null&&delete o.targetHandle,n.concat(o))};function lw({sourceX:e,sourceY:n,targetX:i,targetY:a}){const[o,s,c,f]=aw({sourceX:e,sourceY:n,targetX:i,targetY:a});return[`M ${e},${n}L ${i},${a}`,o,s,c,f]}const Mv={[ze.Left]:{x:-1,y:0},[ze.Right]:{x:1,y:0},[ze.Top]:{x:0,y:-1},[ze.Bottom]:{x:0,y:1}},EI=({source:e,sourcePosition:n=ze.Bottom,target:i})=>n===ze.Left||n===ze.Right?e.xMath.sqrt(Math.pow(n.x-e.x,2)+Math.pow(n.y-e.y,2));function wI({source:e,sourcePosition:n=ze.Bottom,target:i,targetPosition:a=ze.Top,center:o,offset:s,stepPosition:c}){const f=Mv[n],h=Mv[a],d={x:e.x+f.x*s,y:e.y+f.y*s},p={x:i.x+h.x*s,y:i.y+h.y*s},m=EI({source:d,sourcePosition:n,target:p}),y=m.x!==0?"x":"y",b=m[y];let _=[],S,N;const E={x:0,y:0},k={x:0,y:0},[,,w,O]=aw({sourceX:e.x,sourceY:e.y,targetX:i.x,targetY:i.y});if(f[y]*h[y]===-1){y==="x"?(S=o.x??d.x+(p.x-d.x)*c,N=o.y??(d.y+p.y)/2):(S=o.x??(d.x+p.x)/2,N=o.y??d.y+(p.y-d.y)*c);const I=[{x:S,y:d.y},{x:S,y:p.y}],K=[{x:d.x,y:N},{x:p.x,y:N}];f[y]===b?_=y==="x"?I:K:_=y==="x"?K:I}else{const I=[{x:d.x,y:p.y}],K=[{x:p.x,y:d.y}];if(y==="x"?_=f.x===b?K:I:_=f.y===b?I:K,n===a){const A=Math.abs(e[y]-i[y]);if(A<=s){const $=Math.min(s-1,s-A);f[y]===b?E[y]=(d[y]>e[y]?-1:1)*$:k[y]=(p[y]>i[y]?-1:1)*$}}if(n!==a){const A=y==="x"?"y":"x",$=f[y]===h[A],M=d[A]>p[A],j=d[A]=Y?(S=(L.x+q.x)/2,N=_[0].y):(S=_[0].x,N=(L.y+q.y)/2)}const B={x:d.x+E.x,y:d.y+E.y},R={x:p.x+k.x,y:p.y+k.y};return[[e,...B.x!==_[0].x||B.y!==_[0].y?[B]:[],..._,...R.x!==_[_.length-1].x||R.y!==_[_.length-1].y?[R]:[],i],S,N,w,O]}function SI(e,n,i,a){const o=Math.min(Ov(e,n)/2,Ov(n,i)/2,a),{x:s,y:c}=n;if(e.x===s&&s===i.x||e.y===c&&c===i.y)return`L${s} ${c}`;if(e.y===c){const d=e.xi.id===n):e[0])||null}function Lp(e,n){return e?typeof e=="string"?e:`${n?`${n}__`:""}${Object.keys(e).sort().map(a=>`${a}=${e[a]}`).join("&")}`:""}function kI(e,{id:n,defaultColor:i,defaultMarkerStart:a,defaultMarkerEnd:o}){const s=new Set;return e.reduce((c,f)=>([f.markerStart||a,f.markerEnd||o].forEach(h=>{if(h&&typeof h=="object"){const d=Lp(h,n);s.has(d)||(c.push({id:d,color:h.color||i,...h}),s.add(d))}}),c),[]).sort((c,f)=>c.id.localeCompare(f.id))}const ow=1e3,TI=10,Tm={nodeOrigin:[0,0],nodeExtent:es,elevateNodesOnSelect:!0,zIndexMode:"basic",defaults:{}},AI={...Tm,checkEquality:!0};function Am(e,n){const i={...e};for(const a in n)n[a]!==void 0&&(i[a]=n[a]);return i}function CI(e,n,i){const a=Am(Tm,i);for(const o of e.values())if(o.parentId)Mm(o,e,n,a);else{const s=ds(o,a.nodeOrigin),c=Ba(o.extent)?o.extent:a.nodeExtent,f=ja(s,c,Vi(o));o.internals.positionAbsolute=f}}function MI(e,n){if(!e.handles)return e.measured?n==null?void 0:n.internals.handleBounds:void 0;const i=[],a=[];for(const o of e.handles){const s={id:o.id,width:o.width??1,height:o.height??1,nodeId:e.id,x:o.x,y:o.y,position:o.position,type:o.type};o.type==="source"?i.push(s):o.type==="target"&&a.push(s)}return{source:i,target:a}}function Cm(e){return e==="manual"}function zp(e,n,i,a={}){var p,m;const o=Am(AI,a),s={i:0},c=new Map(n),f=o!=null&&o.elevateNodesOnSelect&&!Cm(o.zIndexMode)?ow:0;let h=e.length>0,d=!1;n.clear(),i.clear();for(const y of e){let b=c.get(y.id);if(o.checkEquality&&y===(b==null?void 0:b.internals.userNode))n.set(y.id,b);else{const _=ds(y,o.nodeOrigin),S=Ba(y.extent)?y.extent:o.nodeExtent,N=ja(_,S,Vi(y));b={...o.defaults,...y,measured:{width:(p=y.measured)==null?void 0:p.width,height:(m=y.measured)==null?void 0:m.height},internals:{positionAbsolute:N,handleBounds:MI(y,b),z:sw(y,f,o.zIndexMode),userNode:y}},n.set(y.id,b)}(b.measured===void 0||b.measured.width===void 0||b.measured.height===void 0)&&!b.hidden&&(h=!1),y.parentId&&Mm(b,n,i,a,s),d||(d=y.selected??!1)}return{nodesInitialized:h,hasSelectedNodes:d}}function OI(e,n){if(!e.parentId)return;const i=n.get(e.parentId);i?i.set(e.id,e):n.set(e.parentId,new Map([[e.id,e]]))}function Mm(e,n,i,a,o){const{elevateNodesOnSelect:s,nodeOrigin:c,nodeExtent:f,zIndexMode:h}=Am(Tm,a),d=e.parentId,p=n.get(d);if(!p){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}OI(e,i),o&&!p.parentId&&p.internals.rootParentIndex===void 0&&h==="auto"&&(p.internals.rootParentIndex=++o.i,p.internals.z=p.internals.z+o.i*TI),o&&p.internals.rootParentIndex!==void 0&&(o.i=p.internals.rootParentIndex);const m=s&&!Cm(h)?ow:0,{x:y,y:b,z:_}=RI(e,p,c,f,m,h),{positionAbsolute:S}=e.internals,N=y!==S.x||b!==S.y;(N||_!==e.internals.z)&&n.set(e.id,{...e,internals:{...e.internals,positionAbsolute:N?{x:y,y:b}:S,z:_}})}function sw(e,n,i){const a=Ti(e.zIndex)?e.zIndex:0;return Cm(i)?a:a+(e.selected?n:0)}function RI(e,n,i,a,o,s){const{x:c,y:f}=n.internals.positionAbsolute,h=Vi(e),d=ds(e,i),p=Ba(e.extent)?ja(d,e.extent,h):d;let m=ja({x:c+p.x,y:f+p.y},a,h);e.extent==="parent"&&(m=XE(m,h,n));const y=sw(e,o,s),b=n.internals.z??0;return{x:m.x,y:m.y,z:b>=y?b+1:y}}function Om(e,n,i,a=[0,0]){var c;const o=[],s=new Map;for(const f of e){const h=n.get(f.parentId);if(!h)continue;const d=((c=s.get(f.parentId))==null?void 0:c.expandedRect)??ns(h),p=KE(d,f.rect);s.set(f.parentId,{expandedRect:p,parent:h})}return s.size>0&&s.forEach(({expandedRect:f,parent:h},d)=>{var w;const p=h.internals.positionAbsolute,m=Vi(h),y=h.origin??a,b=f.x0||_>0||E||k)&&(o.push({id:d,type:"position",position:{x:h.position.x-b+E,y:h.position.y-_+k}}),(w=i.get(d))==null||w.forEach(O=>{e.some(B=>B.id===O.id)||o.push({id:O.id,type:"position",position:{x:O.position.x+b,y:O.position.y+_}})})),(m.width0){const b=Om(y,n,i,o);d.push(...b)}return{changes:d,updatedInternals:h}}async function LI({delta:e,panZoom:n,transform:i,translateExtent:a,width:o,height:s}){if(!n||!e.x&&!e.y)return!1;const c=await n.setViewportConstrained({x:i[0]+e.x,y:i[1]+e.y,zoom:i[2]},[[0,0],[o,s]],a);return!!c&&(c.x!==i[0]||c.y!==i[1]||c.k!==i[2])}function zv(e,n,i,a,o,s){let c=o;const f=a.get(c)||new Map;a.set(c,f.set(i,n)),c=`${o}-${e}`;const h=a.get(c)||new Map;if(a.set(c,h.set(i,n)),s){c=`${o}-${e}-${s}`;const d=a.get(c)||new Map;a.set(c,d.set(i,n))}}function cw(e,n,i){e.clear(),n.clear();for(const a of i){const{source:o,target:s,sourceHandle:c=null,targetHandle:f=null}=a,h={edgeId:a.id,source:o,target:s,sourceHandle:c,targetHandle:f},d=`${o}-${c}--${s}-${f}`,p=`${s}-${f}--${o}-${c}`;zv("source",h,p,e,o,c),zv("target",h,d,e,s,f),n.set(a.id,a)}}function uw(e,n){if(!e.parentId)return!1;const i=n.get(e.parentId);return i?i.selected?!0:uw(i,n):!1}function Iv(e,n,i){var o;let a=e;do{if((o=a==null?void 0:a.matches)!=null&&o.call(a,n))return!0;if(a===i)return!1;a=a==null?void 0:a.parentElement}while(a);return!1}function zI(e,n,i,a){const o=new Map;for(const[s,c]of e)if((c.selected||c.id===a)&&(!c.parentId||!uw(c,e))&&(c.draggable||n&&typeof c.draggable>"u")){const f=e.get(s);f&&o.set(s,{id:s,position:f.position||{x:0,y:0},distance:{x:i.x-f.internals.positionAbsolute.x,y:i.y-f.internals.positionAbsolute.y},extent:f.extent,parentId:f.parentId,origin:f.origin,expandParent:f.expandParent,internals:{positionAbsolute:f.internals.positionAbsolute||{x:0,y:0}},measured:{width:f.measured.width??0,height:f.measured.height??0}})}return o}function Zh({nodeId:e,dragItems:n,nodeLookup:i,dragging:a=!0}){var c,f,h;const o=[];for(const[d,p]of n){const m=(c=i.get(d))==null?void 0:c.internals.userNode;m&&o.push({...m,position:p.position,dragging:a})}if(!e)return[o[0],o];const s=(f=i.get(e))==null?void 0:f.internals.userNode;return[s?{...s,position:((h=n.get(e))==null?void 0:h.position)||s.position,dragging:a}:o[0],o]}function II({dragItems:e,snapGrid:n,x:i,y:a}){const o=e.values().next().value;if(!o)return null;const s={x:i-o.distance.x,y:a-o.distance.y},c=ps(s,n);return{x:c.x-s.x,y:c.y-s.y}}function jI({onNodeMouseDown:e,getStoreItems:n,onDragStart:i,onDrag:a,onDragStop:o}){let s={x:null,y:null},c=0,f=new Map,h=!1,d={x:0,y:0},p=null,m=!1,y=null,b=!1,_=!1,S=null;function N({noDragClassName:k,handleSelector:w,domNode:O,isSelectable:B,nodeId:R,nodeClickDistance:H=0}){y=ni(O);function I({x:X,y:Y}){const{nodeLookup:A,nodeExtent:$,snapGrid:M,snapToGrid:j,nodeOrigin:V,onNodeDrag:Z,onSelectionDrag:C,onError:z,updateNodePositions:G}=n();s={x:X,y:Y};let D=!1;const F=f.size>1,U=F&&$?Rp(hs(f)):null,Q=F&&j?II({dragItems:f,snapGrid:M,x:X,y:Y}):null;for(const[J,W]of f){if(!A.has(J))continue;let ee={x:X-W.distance.x,y:Y-W.distance.y};j&&(ee=Q?{x:Math.round(ee.x+Q.x),y:Math.round(ee.y+Q.y)}:ps(ee,M));let ce=null;if(F&&$&&!W.extent&&U){const{positionAbsolute:Ee}=W.internals,Se=Ee.x-U.x+$[0][0],De=Ee.x+W.measured.width-U.x2+$[1][0],He=Ee.y-U.y+$[0][1],lt=Ee.y+W.measured.height-U.y2+$[1][1];ce=[[Se,He],[De,lt]]}const{position:de,positionAbsolute:be}=YE({nodeId:J,nextPosition:ee,nodeLookup:A,nodeExtent:ce||$,nodeOrigin:V,onError:z});D=D||W.position.x!==de.x||W.position.y!==de.y,W.position=de,W.internals.positionAbsolute=be}if(_=_||D,!!D&&(G(f,!0),S&&(a||Z||!R&&C))){const[J,W]=Zh({nodeId:R,dragItems:f,nodeLookup:A});a==null||a(S,f,J,W),Z==null||Z(S,J,W),R||C==null||C(S,W)}}async function K(){if(!p)return;const{transform:X,panBy:Y,autoPanSpeed:A,autoPanOnNodeDrag:$}=n();if(!$){h=!1,cancelAnimationFrame(c);return}const[M,j]=Sm(d,p,A);(M!==0||j!==0)&&(s.x=(s.x??0)-M/X[2],s.y=(s.y??0)-j/X[2],await Y({x:M,y:j})&&I(s)),c=requestAnimationFrame(K)}function L(X){var F;const{nodeLookup:Y,multiSelectionActive:A,nodesDraggable:$,transform:M,snapGrid:j,snapToGrid:V,selectNodesOnDrag:Z,onNodeDragStart:C,onSelectionDragStart:z,unselectNodesAndEdges:G}=n();m=!0,(!Z||!B)&&!A&&R&&((F=Y.get(R))!=null&&F.selected||G()),B&&Z&&R&&(e==null||e(R));const D=Yo(X.sourceEvent,{transform:M,snapGrid:j,snapToGrid:V,containerBounds:p});if(s=D,f=zI(Y,$,D,R),f.size>0&&(i||C||!R&&z)){const[U,Q]=Zh({nodeId:R,dragItems:f,nodeLookup:Y});i==null||i(X.sourceEvent,f,U,Q),C==null||C(X.sourceEvent,U,Q),R||z==null||z(X.sourceEvent,Q)}}const q=kE().clickDistance(H).on("start",X=>{const{domNode:Y,nodeDragThreshold:A,transform:$,snapGrid:M,snapToGrid:j}=n();p=(Y==null?void 0:Y.getBoundingClientRect())||null,b=!1,_=!1,S=X.sourceEvent,A===0&&L(X),s=Yo(X.sourceEvent,{transform:$,snapGrid:M,snapToGrid:j,containerBounds:p}),d=Ai(X.sourceEvent,p)}).on("drag",X=>{const{autoPanOnNodeDrag:Y,transform:A,snapGrid:$,snapToGrid:M,nodeDragThreshold:j,nodeLookup:V}=n(),Z=Yo(X.sourceEvent,{transform:A,snapGrid:$,snapToGrid:M,containerBounds:p});if(S=X.sourceEvent,(X.sourceEvent.type==="touchmove"&&X.sourceEvent.touches.length>1||R&&!V.has(R))&&(b=!0),!b){if(!h&&Y&&m&&(h=!0,K()),!m){const C=Ai(X.sourceEvent,p),z=C.x-d.x,G=C.y-d.y;Math.sqrt(z*z+G*G)>j&&L(X)}(s.x!==Z.xSnapped||s.y!==Z.ySnapped)&&f&&m&&(d=Ai(X.sourceEvent,p),I(Z))}}).on("end",X=>{if(!m||b){b&&f.size>0&&n().updateNodePositions(f,!1);return}if(h=!1,m=!1,cancelAnimationFrame(c),f.size>0){const{nodeLookup:Y,updateNodePositions:A,onNodeDragStop:$,onSelectionDragStop:M}=n();if(_&&(A(f,!1),_=!1),o||$||!R&&M){const[j,V]=Zh({nodeId:R,dragItems:f,nodeLookup:Y,dragging:!1});o==null||o(X.sourceEvent,f,j,V),$==null||$(X.sourceEvent,j,V),R||M==null||M(X.sourceEvent,V)}}}).filter(X=>{const Y=X.target;return!X.button&&(!k||!Iv(Y,`.${k}`,O))&&(!w||Iv(Y,w,O))});y.call(q)}function E(){y==null||y.on(".drag",null)}return{update:N,destroy:E}}function BI(e,n,i){const a=[],o={x:e.x-i,y:e.y-i,width:i*2,height:i*2};for(const s of n.values())pu(o,ns(s))>0&&a.push(s);return a}const UI=250;function HI(e,n,i,a){var f,h;let o=[],s=1/0;const c=BI(e,i,n+UI);for(const d of c){const p=[...((f=d.internals.handleBounds)==null?void 0:f.source)??[],...((h=d.internals.handleBounds)==null?void 0:h.target)??[]];for(const m of p){if(a.nodeId===m.nodeId&&a.type===m.type&&a.id===m.id)continue;const{x:y,y:b}=Ua(d,m,m.position,!0),_=Math.sqrt(Math.pow(y-e.x,2)+Math.pow(b-e.y,2));_>n||(_1){const d=a.type==="source"?"target":"source";return o.find(p=>p.type===d)??o[0]}return o[0]}function fw(e,n,i,a,o,s=!1){var d,p,m;const c=a.get(e);if(!c)return null;const f=o==="strict"?(d=c.internals.handleBounds)==null?void 0:d[n]:[...((p=c.internals.handleBounds)==null?void 0:p.source)??[],...((m=c.internals.handleBounds)==null?void 0:m.target)??[]],h=(i?f==null?void 0:f.find(y=>y.id===i):f==null?void 0:f[0])??null;return h&&s?{...h,...Ua(c,h,h.position,!0)}:h}function dw(e,n){return e||(n!=null&&n.classList.contains("target")?"target":n!=null&&n.classList.contains("source")?"source":null)}function $I(e,n){let i=null;return n?i=!0:e&&!n&&(i=!1),i}const hw=()=>!0;function qI(e,{connectionMode:n,connectionRadius:i,handleId:a,nodeId:o,edgeUpdaterType:s,isTarget:c,domNode:f,nodeLookup:h,lib:d,autoPanOnConnect:p,flowId:m,panBy:y,cancelConnection:b,onConnectStart:_,onConnect:S,onConnectEnd:N,isValidConnection:E=hw,onReconnectEnd:k,updateConnection:w,getTransform:O,getFromHandle:B,autoPanSpeed:R,dragThreshold:H=1,handleDomNode:I}){const K=ew(e.target);let L=0,q;const{x:X,y:Y}=Ai(e),A=dw(s,I),$=f==null?void 0:f.getBoundingClientRect();let M=!1;if(!$||!A)return;const j=fw(o,A,a,h,n);if(!j)return;let V=Ai(e,$),Z=!1,C=null,z=!1,G=null;function D(){if(!p||!$)return;const[de,be]=Sm(V,$,R);y({x:de,y:be}),L=requestAnimationFrame(D)}const F={...j,nodeId:o,type:A,position:j.position},U=h.get(o);let J={inProgress:!0,isValid:null,from:Ua(U,F,ze.Left,!0),fromHandle:F,fromPosition:F.position,fromNode:U,to:V,toHandle:null,toPosition:Sv[F.position],toNode:null,pointer:V};function W(){M=!0,w(J),_==null||_(e,{nodeId:o,handleId:a,handleType:A})}H===0&&W();function ee(de){if(!M){const{x:lt,y:Rt}=Ai(de),Yt=lt-X,Pt=Rt-Y;if(!(Yt*Yt+Pt*Pt>H*H))return;W()}if(!B()||!F){ce(de);return}const be=O();V=Ai(de,$),q=HI(ms(V,be,!1,[1,1]),i,h,F),Z||(D(),Z=!0);const Ee=pw(de,{handle:q,connectionMode:n,fromNodeId:o,fromHandleId:a,fromType:c?"target":"source",isValidConnection:E,doc:K,lib:d,flowId:m,nodeLookup:h});G=Ee.handleDomNode,C=Ee.connection,z=$I(!!q,Ee.isValid);const Se=h.get(o),De=Se?Ua(Se,F,ze.Left,!0):J.from,He={...J,from:De,isValid:z,to:Ee.toHandle&&z?Il({x:Ee.toHandle.x,y:Ee.toHandle.y},be):V,toHandle:Ee.toHandle,toPosition:z&&Ee.toHandle?Ee.toHandle.position:Sv[F.position],toNode:Ee.toHandle?h.get(Ee.toHandle.nodeId):null,pointer:V};w(He),J=He}function ce(de){if(!("touches"in de&&de.touches.length>0)){if(M){(q||G)&&C&&z&&(S==null||S(C));const{inProgress:be,...Ee}=J,Se={...Ee,toPosition:J.toHandle?J.toPosition:null};N==null||N(de,Se),s&&(k==null||k(de,Se))}b(),cancelAnimationFrame(L),Z=!1,z=!1,C=null,G=null,K.removeEventListener("mousemove",ee),K.removeEventListener("mouseup",ce),K.removeEventListener("touchmove",ee),K.removeEventListener("touchend",ce)}}K.addEventListener("mousemove",ee),K.addEventListener("mouseup",ce),K.addEventListener("touchmove",ee),K.addEventListener("touchend",ce)}function pw(e,{handle:n,connectionMode:i,fromNodeId:a,fromHandleId:o,fromType:s,doc:c,lib:f,flowId:h,isValidConnection:d=hw,nodeLookup:p}){const m=s==="target",y=n?c.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:b,y:_}=Ai(e),S=c.elementFromPoint(b,_),N=S!=null&&S.classList.contains(`${f}-flow__handle`)?S:y,E={handleDomNode:N,isValid:!1,connection:null,toHandle:null};if(N){const k=dw(void 0,N),w=N.getAttribute("data-nodeid"),O=N.getAttribute("data-handleid"),B=N.classList.contains("connectable"),R=N.classList.contains("connectableend");if(!w||!k)return E;const H={source:m?w:a,sourceHandle:m?O:o,target:m?a:w,targetHandle:m?o:O};E.connection=H;const K=B&&R&&(i===Ll.Strict?m&&k==="source"||!m&&k==="target":w!==a||O!==o);E.isValid=K&&d(H),E.toHandle=fw(w,k,O,p,i,!0)}return E}const Ip={onPointerDown:qI,isValid:pw};function PI({domNode:e,panZoom:n,getTransform:i,getViewScale:a}){const o=ni(e);function s({translateExtent:f,width:h,height:d,zoomStep:p=1,pannable:m=!0,zoomable:y=!0,inversePan:b=!1}){const _=w=>{if(w.sourceEvent.type!=="wheel"||!n)return;const O=i(),B=w.sourceEvent.ctrlKey&&is()?10:1,R=-w.sourceEvent.deltaY*(w.sourceEvent.deltaMode===1?.05:w.sourceEvent.deltaMode?1:.002)*p,H=O[2]*Math.pow(2,R*B);n.scaleTo(H)};let S=[0,0];const N=w=>{(w.sourceEvent.type==="mousedown"||w.sourceEvent.type==="touchstart")&&(S=[w.sourceEvent.clientX??w.sourceEvent.touches[0].clientX,w.sourceEvent.clientY??w.sourceEvent.touches[0].clientY])},E=w=>{const O=i();if(w.sourceEvent.type!=="mousemove"&&w.sourceEvent.type!=="touchmove"||!n)return;const B=[w.sourceEvent.clientX??w.sourceEvent.touches[0].clientX,w.sourceEvent.clientY??w.sourceEvent.touches[0].clientY],R=[B[0]-S[0],B[1]-S[1]];S=B;const H=a()*Math.max(O[2],Math.log(O[2]))*(b?-1:1),I={x:O[0]-R[0]*H,y:O[1]-R[1]*H},K=[[0,0],[h,d]];n.setViewportConstrained({x:I.x,y:I.y,zoom:O[2]},K,f)},k=$E().on("start",N).on("zoom",m?E:null).on("zoom.wheel",y?_:null);o.call(k,{})}function c(){o.on("zoom",null)}return{update:s,destroy:c,pointer:Ni}}const Mu=e=>({x:e.x,y:e.y,zoom:e.k}),Qh=({x:e,y:n,zoom:i})=>Tu.translate(e,n).scale(i),kl=(e,n)=>e.target.closest(`.${n}`),mw=(e,n)=>n===2&&Array.isArray(e)&&e.includes(2),FI=e=>((e*=2)<=1?e*e*e:(e-=2)*e*e+2)/2,Wh=(e,n=0,i=FI,a=()=>{})=>{const o=typeof n=="number"&&n>0;return o||a(),o?e.transition().duration(n).ease(i).on("end",a):e},gw=e=>{const n=e.ctrlKey&&is()?10:1;return-e.deltaY*(e.deltaMode===1?.05:e.deltaMode?1:.002)*n};function GI({zoomPanValues:e,noWheelClassName:n,d3Selection:i,d3Zoom:a,panOnScrollMode:o,panOnScrollSpeed:s,zoomOnPinch:c,onPanZoomStart:f,onPanZoom:h,onPanZoomEnd:d}){return p=>{if(kl(p,n))return p.ctrlKey&&p.preventDefault(),!1;p.preventDefault(),p.stopImmediatePropagation();const m=i.property("__zoom").k||1;if(p.ctrlKey&&c){const N=Ni(p),E=gw(p),k=m*Math.pow(2,E);a.scaleTo(i,k,N,p);return}const y=p.deltaMode===1?20:1;let b=o===Da.Vertical?0:p.deltaX*y,_=o===Da.Horizontal?0:p.deltaY*y;!is()&&p.shiftKey&&o!==Da.Vertical&&(b=p.deltaY*y,_=0),a.translateBy(i,-(b/m)*s,-(_/m)*s,{internal:!0});const S=Mu(i.property("__zoom"));clearTimeout(e.panScrollTimeout),e.isPanScrolling?h==null||h(p,S):(e.isPanScrolling=!0,f==null||f(p,S)),e.panScrollTimeout=setTimeout(()=>{d==null||d(p,S),e.isPanScrolling=!1},150)}}function VI({noWheelClassName:e,preventScrolling:n,d3ZoomHandler:i}){return function(a,o){const s=a.type==="wheel",c=!n&&s&&!a.ctrlKey,f=kl(a,e);if(a.ctrlKey&&s&&f&&a.preventDefault(),c||f)return null;a.preventDefault(),i.call(this,a,o)}}function YI({zoomPanValues:e,onDraggingChange:n,onPanZoomStart:i}){return a=>{var s,c,f;if((s=a.sourceEvent)!=null&&s.internal)return;const o=Mu(a.transform);e.mouseButton=((c=a.sourceEvent)==null?void 0:c.button)||0,e.isZoomingOrPanning=!0,e.prevViewport=o,((f=a.sourceEvent)==null?void 0:f.type)==="mousedown"&&n(!0),i&&(i==null||i(a.sourceEvent,o))}}function XI({zoomPanValues:e,panOnDrag:n,onPaneContextMenu:i,onTransformChange:a,onPanZoom:o}){return s=>{var c,f;e.usedRightMouseButton=!!(i&&mw(n,e.mouseButton??0)),(c=s.sourceEvent)!=null&&c.sync||a([s.transform.x,s.transform.y,s.transform.k]),o&&!((f=s.sourceEvent)!=null&&f.internal)&&(o==null||o(s.sourceEvent,Mu(s.transform)))}}function KI({zoomPanValues:e,panOnDrag:n,panOnScroll:i,onDraggingChange:a,onPanZoomEnd:o,onPaneContextMenu:s}){return c=>{var f;if(!((f=c.sourceEvent)!=null&&f.internal)&&(e.isZoomingOrPanning=!1,s&&mw(n,e.mouseButton??0)&&!e.usedRightMouseButton&&c.sourceEvent&&s(c.sourceEvent),e.usedRightMouseButton=!1,a(!1),o)){const h=Mu(c.transform);e.prevViewport=h,clearTimeout(e.timerId),e.timerId=setTimeout(()=>{o==null||o(c.sourceEvent,h)},i?150:0)}}}function ZI({zoomActivationKeyPressed:e,zoomOnScroll:n,zoomOnPinch:i,panOnDrag:a,panOnScroll:o,zoomOnDoubleClick:s,userSelectionActive:c,noWheelClassName:f,noPanClassName:h,lib:d,connectionInProgress:p}){return m=>{var N;const y=e||n,b=i&&m.ctrlKey,_=m.type==="wheel";if(m.button===1&&m.type==="mousedown"&&(kl(m,`${d}-flow__node`)||kl(m,`${d}-flow__edge`)))return!0;if(!a&&!y&&!o&&!s&&!i||c||p&&!_||kl(m,f)&&_||kl(m,h)&&(!_||o&&_&&!e)||!i&&m.ctrlKey&&_)return!1;if(!i&&m.type==="touchstart"&&((N=m.touches)==null?void 0:N.length)>1)return m.preventDefault(),!1;if(!y&&!o&&!b&&_||!a&&(m.type==="mousedown"||m.type==="touchstart")||Array.isArray(a)&&!a.includes(m.button)&&m.type==="mousedown")return!1;const S=Array.isArray(a)&&a.includes(m.button)||!m.button||m.button<=1;return(!m.ctrlKey||_)&&S}}function QI({domNode:e,minZoom:n,maxZoom:i,translateExtent:a,viewport:o,onPanZoom:s,onPanZoomStart:c,onPanZoomEnd:f,onDraggingChange:h}){const d={isZoomingOrPanning:!1,usedRightMouseButton:!1,prevViewport:{},mouseButton:0,timerId:void 0,panScrollTimeout:void 0,isPanScrolling:!1},p=e.getBoundingClientRect();let m=[[0,0],[p.width,p.height]];const y=typeof ResizeObserver<"u"?new ResizeObserver(Y=>{const A=Y[0];A&&(m=[[0,0],[A.contentRect.width,A.contentRect.height]])}):null;y==null||y.observe(e);const b=$E().extent(()=>m).scaleExtent([n,i]).translateExtent(a),_=ni(e).call(b);O({x:o.x,y:o.y,zoom:zl(o.zoom,n,i)},[[0,0],[p.width,p.height]],a);const S=_.on("wheel.zoom"),N=_.on("dblclick.zoom");b.wheelDelta(gw);async function E(Y,A){return _?new Promise($=>{b==null||b.interpolate((A==null?void 0:A.interpolate)==="linear"?Vo:Xc).transform(Wh(_,A==null?void 0:A.duration,A==null?void 0:A.ease,()=>$(!0)),Y)}):!1}function k({noWheelClassName:Y,noPanClassName:A,onPaneContextMenu:$,userSelectionActive:M,panOnScroll:j,panOnDrag:V,panOnScrollMode:Z,panOnScrollSpeed:C,preventScrolling:z,zoomOnPinch:G,zoomOnScroll:D,zoomOnDoubleClick:F,zoomActivationKeyPressed:U,lib:Q,onTransformChange:J,connectionInProgress:W,paneClickDistance:ee,selectionOnDrag:ce}){M&&!d.isZoomingOrPanning&&w();const de=j&&!U&&!M;b.clickDistance(ce?1/0:!Ti(ee)||ee<0?0:ee);const be=de?GI({zoomPanValues:d,noWheelClassName:Y,d3Selection:_,d3Zoom:b,panOnScrollMode:Z,panOnScrollSpeed:C,zoomOnPinch:G,onPanZoomStart:c,onPanZoom:s,onPanZoomEnd:f}):VI({noWheelClassName:Y,preventScrolling:z,d3ZoomHandler:S});_.on("wheel.zoom",be,{passive:!1});const Ee=YI({zoomPanValues:d,onDraggingChange:h,onPanZoomStart:c});b.on("start",Ee);const Se=XI({zoomPanValues:d,panOnDrag:V,onPaneContextMenu:!!$,onPanZoom:s,onTransformChange:J});b.on("zoom",Se);const De=KI({zoomPanValues:d,panOnDrag:V,panOnScroll:j,onPaneContextMenu:$,onPanZoomEnd:f,onDraggingChange:h});b.on("end",De);const He=ZI({zoomActivationKeyPressed:U,panOnDrag:V,zoomOnScroll:D,panOnScroll:j,zoomOnDoubleClick:F,zoomOnPinch:G,userSelectionActive:M,noPanClassName:A,noWheelClassName:Y,lib:Q,connectionInProgress:W});b.filter(He),F?_.on("dblclick.zoom",N):_.on("dblclick.zoom",null)}function w(){b.on("zoom",null)}async function O(Y,A,$){const M=Qh(Y),j=b==null?void 0:b.constrain()(M,A,$);return j&&await E(j),j}async function B(Y,A){const $=Qh(Y);return await E($,A),$}function R(Y){if(_){const A=Qh(Y),$=_.property("__zoom");($.k!==Y.zoom||$.x!==Y.x||$.y!==Y.y)&&(b==null||b.transform(_,A,null,{sync:!0}))}}function H(){const Y=_?HE(_.node()):{x:0,y:0,k:1};return{x:Y.x,y:Y.y,zoom:Y.k}}async function I(Y,A){return _?new Promise($=>{b==null||b.interpolate((A==null?void 0:A.interpolate)==="linear"?Vo:Xc).scaleTo(Wh(_,A==null?void 0:A.duration,A==null?void 0:A.ease,()=>$(!0)),Y)}):!1}async function K(Y,A){return _?new Promise($=>{b==null||b.interpolate((A==null?void 0:A.interpolate)==="linear"?Vo:Xc).scaleBy(Wh(_,A==null?void 0:A.duration,A==null?void 0:A.ease,()=>$(!0)),Y)}):!1}function L(Y){b==null||b.scaleExtent(Y)}function q(Y){b==null||b.translateExtent(Y)}function X(Y){const A=!Ti(Y)||Y<0?0:Y;b==null||b.clickDistance(A)}return{update:k,destroy:w,setViewport:B,setViewportConstrained:O,getViewport:H,scaleTo:I,scaleBy:K,setScaleExtent:L,setTranslateExtent:q,syncViewport:R,setClickDistance:X}}var jl;(function(e){e.Line="line",e.Handle="handle"})(jl||(jl={}));function WI({width:e,prevWidth:n,height:i,prevHeight:a,affectsX:o,affectsY:s}){const c=e-n,f=i-a,h=[c>0?1:c<0?-1:0,f>0?1:f<0?-1:0];return c&&o&&(h[0]=h[0]*-1),f&&s&&(h[1]=h[1]*-1),h}function jv(e){const n=e.includes("right")||e.includes("left"),i=e.includes("bottom")||e.includes("top"),a=e.includes("left"),o=e.includes("top");return{isHorizontal:n,isVertical:i,affectsX:a,affectsY:o}}function Jr(e,n){return Math.max(0,n-e)}function ea(e,n){return Math.max(0,e-n)}function $c(e,n,i){return Math.max(0,n-e,e-i)}function Bv(e,n){return e?!n:n}function JI(e,n,i,a,o,s,c,f){let{affectsX:h,affectsY:d}=n;const{isHorizontal:p,isVertical:m}=n,y=p&&m,{xSnapped:b,ySnapped:_}=i,{minWidth:S,maxWidth:N,minHeight:E,maxHeight:k}=a,{x:w,y:O,width:B,height:R,aspectRatio:H}=e;let I=Math.floor(p?b-e.pointerX:0),K=Math.floor(m?_-e.pointerY:0);const L=B+(h?-I:I),q=R+(d?-K:K),X=-s[0]*B,Y=-s[1]*R;let A=$c(L,S,N),$=$c(q,E,k);if(c){let V=0,Z=0;h&&I<0?V=Jr(w+I+X,c[0][0]):!h&&I>0&&(V=ea(w+L+X,c[1][0])),d&&K<0?Z=Jr(O+K+Y,c[0][1]):!d&&K>0&&(Z=ea(O+q+Y,c[1][1])),A=Math.max(A,V),$=Math.max($,Z)}if(f){let V=0,Z=0;h&&I>0?V=ea(w+I,f[0][0]):!h&&I<0&&(V=Jr(w+L,f[1][0])),d&&K>0?Z=ea(O+K,f[0][1]):!d&&K<0&&(Z=Jr(O+q,f[1][1])),A=Math.max(A,V),$=Math.max($,Z)}if(o){if(p){const V=$c(L/H,E,k)*H;if(A=Math.max(A,V),c){let Z=0;!h&&!d||h&&!d&&y?Z=ea(O+Y+L/H,c[1][1])*H:Z=Jr(O+Y+(h?I:-I)/H,c[0][1])*H,A=Math.max(A,Z)}if(f){let Z=0;!h&&!d||h&&!d&&y?Z=Jr(O+L/H,f[1][1])*H:Z=ea(O+(h?I:-I)/H,f[0][1])*H,A=Math.max(A,Z)}}if(m){const V=$c(q*H,S,N)/H;if($=Math.max($,V),c){let Z=0;!h&&!d||d&&!h&&y?Z=ea(w+q*H+X,c[1][0])/H:Z=Jr(w+(d?K:-K)*H+X,c[0][0])/H,$=Math.max($,Z)}if(f){let Z=0;!h&&!d||d&&!h&&y?Z=Jr(w+q*H,f[1][0])/H:Z=ea(w+(d?K:-K)*H,f[0][0])/H,$=Math.max($,Z)}}}K=K+(K<0?$:-$),I=I+(I<0?A:-A),o&&(y?L>q*H?K=(Bv(h,d)?-I:I)/H:I=(Bv(h,d)?-K:K)*H:p?(K=I/H,d=h):(I=K*H,h=d));const M=h?w+I:w,j=d?O+K:O;return{width:B+(h?-I:I),height:R+(d?-K:K),x:s[0]*I*(h?-1:1)+M,y:s[1]*K*(d?-1:1)+j}}const bw={width:0,height:0,x:0,y:0},ej={...bw,pointerX:0,pointerY:0,aspectRatio:1};function tj(e,n,i){const a=n.position.x+e.position.x,o=n.position.y+e.position.y,s=e.measured.width??0,c=e.measured.height??0,f=i[0]*s,h=i[1]*c;return[[a-f,o-h],[a+s-f,o+c-h]]}function nj({domNode:e,nodeId:n,getStoreItems:i,onChange:a,onEnd:o}){const s=ni(e);let c={controlDirection:jv("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:p,keepAspectRatio:m,resizeDirection:y,onResizeStart:b,onResize:_,onResizeEnd:S,shouldResize:N}){let E={...bw},k={...ej};c={boundaries:p,resizeDirection:y,keepAspectRatio:m,controlDirection:jv(d)};let w,O=null,B=[],R,H,I,K=!1;const L=kE().on("start",q=>{const{nodeLookup:X,transform:Y,snapGrid:A,snapToGrid:$,nodeOrigin:M,paneDomNode:j}=i();if(w=X.get(n),!w)return;O=(j==null?void 0:j.getBoundingClientRect())??null;const{xSnapped:V,ySnapped:Z}=Yo(q.sourceEvent,{transform:Y,snapGrid:A,snapToGrid:$,containerBounds:O});E={width:w.measured.width??0,height:w.measured.height??0,x:w.position.x??0,y:w.position.y??0},k={...E,pointerX:V,pointerY:Z,aspectRatio:E.width/E.height},R=void 0,H=Ba(w.extent)?w.extent:void 0,w.parentId&&(w.extent==="parent"||w.expandParent)&&(R=X.get(w.parentId)),R&&w.extent==="parent"&&(H=[[0,0],[R.measured.width,R.measured.height]]),B=[],I=void 0;for(const[C,z]of X)if(z.parentId===n&&(B.push({id:C,position:{...z.position},extent:z.extent}),z.extent==="parent"||z.expandParent)){const G=tj(z,w,z.origin??M);I?I=[[Math.min(G[0][0],I[0][0]),Math.min(G[0][1],I[0][1])],[Math.max(G[1][0],I[1][0]),Math.max(G[1][1],I[1][1])]]:I=G}b==null||b(q,{...E})}).on("drag",q=>{const{transform:X,snapGrid:Y,snapToGrid:A,nodeOrigin:$}=i(),M=Yo(q.sourceEvent,{transform:X,snapGrid:Y,snapToGrid:A,containerBounds:O}),j=[];if(!w)return;const{x:V,y:Z,width:C,height:z}=E,G={},D=w.origin??$,{width:F,height:U,x:Q,y:J}=JI(k,c.controlDirection,M,c.boundaries,c.keepAspectRatio,D,H,I),W=F!==C,ee=U!==z,ce=Q!==V&&W,de=J!==Z&ⅇif(!ce&&!de&&!W&&!ee)return;if((ce||de||D[0]===1||D[1]===1)&&(G.x=ce?Q:E.x,G.y=de?J:E.y,E.x=G.x,E.y=G.y,B.length>0)){const De=Q-V,He=J-Z;for(const lt of B)lt.position={x:lt.position.x-De+D[0]*(F-C),y:lt.position.y-He+D[1]*(U-z)},j.push(lt)}if((W||ee)&&(G.width=W&&(!c.resizeDirection||c.resizeDirection==="horizontal")?F:E.width,G.height=ee&&(!c.resizeDirection||c.resizeDirection==="vertical")?U:E.height,E.width=G.width,E.height=G.height),R&&w.expandParent){const De=D[0]*(G.width??0);G.x&&G.x{K&&(S==null||S(q,{...E}),o==null||o({...E}),K=!1)});s.call(L)}function h(){s.on(".drag",null)}return{update:f,destroy:h}}var Jh={exports:{}},ep={},tp={exports:{}},np={};/** + * @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 Uv;function ij(){if(Uv)return np;Uv=1;var e=ls();function n(m,y){return m===y&&(m!==0||1/m===1/y)||m!==m&&y!==y}var i=typeof Object.is=="function"?Object.is:n,a=e.useState,o=e.useEffect,s=e.useLayoutEffect,c=e.useDebugValue;function f(m,y){var b=y(),_=a({inst:{value:b,getSnapshot:y}}),S=_[0].inst,N=_[1];return s(function(){S.value=b,S.getSnapshot=y,h(S)&&N({inst:S})},[m,b,y]),o(function(){return h(S)&&N({inst:S}),m(function(){h(S)&&N({inst:S})})},[m]),c(b),b}function h(m){var y=m.getSnapshot;m=m.value;try{var b=y();return!i(m,b)}catch{return!0}}function d(m,y){return y()}var p=typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?d:f;return np.useSyncExternalStore=e.useSyncExternalStore!==void 0?e.useSyncExternalStore:p,np}var Hv;function rj(){return Hv||(Hv=1,tp.exports=ij()),tp.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 aj(){if($v)return ep;$v=1;var e=ls(),n=rj();function i(d,p){return d===p&&(d!==0||1/d===1/p)||d!==d&&p!==p}var a=typeof Object.is=="function"?Object.is:i,o=n.useSyncExternalStore,s=e.useRef,c=e.useEffect,f=e.useMemo,h=e.useDebugValue;return ep.useSyncExternalStoreWithSelector=function(d,p,m,y,b){var _=s(null);if(_.current===null){var S={hasValue:!1,value:null};_.current=S}else S=_.current;_=f(function(){function E(R){if(!k){if(k=!0,w=R,R=y(R),b!==void 0&&S.hasValue){var H=S.value;if(b(H,R))return O=H}return O=R}if(H=O,a(w,R))return H;var I=y(R);return b!==void 0&&b(H,I)?(w=R,H):(w=R,O=I)}var k=!1,w,O,B=m===void 0?null:m;return[function(){return E(p())},B===null?void 0:function(){return E(B())}]},[p,m,y,b]);var N=o(d,_[0],_[1]);return c(function(){S.hasValue=!0,S.value=N},[N]),h(N),N},ep}var qv;function lj(){return qv||(qv=1,Jh.exports=aj()),Jh.exports}var oj=lj();const sj=as(oj),cj={},Pv=e=>{let n;const i=new Set,a=(p,m)=>{const y=typeof p=="function"?p(n):p;if(!Object.is(y,n)){const b=n;n=m??(typeof y!="object"||y===null)?y:Object.assign({},n,y),i.forEach(_=>_(n,b))}},o=()=>n,h={setState:a,getState:o,getInitialState:()=>d,subscribe:p=>(i.add(p),()=>i.delete(p)),destroy:()=>{(cj?"production":void 0)!=="production"&&console.warn("[DEPRECATED] The `destroy` method will be unsupported in a future version. Instead use unsubscribe function returned by subscribe. Everything will be garbage-collected if store is garbage-collected."),i.clear()}},d=n=e(a,o,h);return h},uj=e=>e?Pv(e):Pv,{useDebugValue:fj}=bk,{useSyncExternalStoreWithSelector:dj}=sj,hj=e=>e;function yw(e,n=hj,i){const a=dj(e.subscribe,e.getState,e.getServerState||e.getInitialState,n,i);return fj(a),a}const Fv=(e,n)=>{const i=uj(e),a=(o,s=n)=>yw(i,o,s);return Object.assign(a,i),a},pj=(e,n)=>e?Fv(e,n):Fv;function qt(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[a,o]of e)if(!Object.is(o,n.get(a)))return!1;return!0}if(e instanceof Set&&n instanceof Set){if(e.size!==n.size)return!1;for(const a of e)if(!n.has(a))return!1;return!0}const i=Object.keys(e);if(i.length!==Object.keys(n).length)return!1;for(const a of i)if(!Object.prototype.hasOwnProperty.call(n,a)||!Object.is(e[a],n[a]))return!1;return!0}I_();const Ou=ae.createContext(null),mj=Ou.Provider,xw=Mi.error001("react");function ft(e,n){const i=ae.useContext(Ou);if(i===null)throw new Error(xw);return yw(i,e,n)}function zt(){const e=ae.useContext(Ou);if(e===null)throw new Error(xw);return ae.useMemo(()=>({getState:e.getState,setState:e.setState,subscribe:e.subscribe}),[e])}const Gv={display:"none"},gj={position:"absolute",width:1,height:1,margin:-1,border:0,padding:0,overflow:"hidden",clip:"rect(0px, 0px, 0px, 0px)",clipPath:"inset(100%)"},vw="react-flow__node-desc",_w="react-flow__edge-desc",bj="react-flow__aria-live",yj=e=>e.ariaLiveMessage,xj=e=>e.ariaLabelConfig;function vj({rfId:e}){const n=ft(yj);return v.jsx("div",{id:`${bj}-${e}`,"aria-live":"assertive","aria-atomic":"true",style:gj,children:n})}function _j({rfId:e,disableKeyboardA11y:n}){const i=ft(xj);return v.jsxs(v.Fragment,{children:[v.jsx("div",{id:`${vw}-${e}`,style:Gv,children:n?i["node.a11yDescription.default"]:i["node.a11yDescription.keyboardDisabled"]}),v.jsx("div",{id:`${_w}-${e}`,style:Gv,children:i["edge.a11yDescription.default"]}),!n&&v.jsx(vj,{rfId:e})]})}const Ru=ae.forwardRef(({position:e="top-left",children:n,className:i,style:a,...o},s)=>{const c=`${e}`.split("-");return v.jsx("div",{className:on(["react-flow__panel",i,...c]),style:a,ref:s,...o,children:n})});Ru.displayName="Panel";const Vv="https://reactflow.dev?utm_source=attribution";function Ej({proOptions:e,position:n="bottom-right"}){return e!=null&&e.hideAttribution?null:v.jsx(Ru,{position:n,className:"react-flow__attribution","data-message":`Please only hide this attribution when you are subscribed to React Flow Pro: ${Vv}`,children:v.jsx("a",{href:Vv,target:"_blank",rel:"noopener noreferrer","aria-label":"React Flow attribution",children:"React Flow"})})}const wj=e=>{const n=[],i=[];for(const[,a]of e.nodeLookup)a.selected&&n.push(a.internals.userNode);for(const[,a]of e.edgeLookup)a.selected&&i.push(a);return{selectedNodes:n,selectedEdges:i}},qc=e=>e.id;function Sj(e,n){return qt(e.selectedNodes.map(qc),n.selectedNodes.map(qc))&&qt(e.selectedEdges.map(qc),n.selectedEdges.map(qc))}function Nj({onSelectionChange:e}){const n=zt(),{selectedNodes:i,selectedEdges:a}=ft(wj,Sj);return ae.useEffect(()=>{const o={nodes:i,edges:a};e==null||e(o),n.getState().onSelectionChangeHandlers.forEach(s=>s(o))},[i,a,e]),null}const kj=e=>!!e.onSelectionChangeHandlers;function Tj({onSelectionChange:e}){const n=ft(kj);return e||n?v.jsx(Nj,{onSelectionChange:e}):null}const Ew=[0,0],Aj={x:0,y:0,zoom:1},Cj=["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"],Yv=[...Cj,"rfId"],Mj=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}),Xv={translateExtent:es,nodeOrigin:Ew,minZoom:.5,maxZoom:2,elementsSelectable:!0,noPanClassName:"nopan",rfId:"1"};function Oj(e){const{setNodes:n,setEdges:i,setMinZoom:a,setMaxZoom:o,setTranslateExtent:s,setNodeExtent:c,reset:f,setDefaultNodesAndEdges:h}=ft(Mj,qt),d=zt();ae.useEffect(()=>(h(e.defaultNodes,e.defaultEdges),()=>{p.current=Xv,f()}),[]);const p=ae.useRef(Xv);return ae.useEffect(()=>{for(const m of Yv){const y=e[m],b=p.current[m];y!==b&&(typeof e[m]>"u"||(m==="nodes"?n(y):m==="edges"?i(y):m==="minZoom"?a(y):m==="maxZoom"?o(y):m==="translateExtent"?s(y):m==="nodeExtent"?c(y):m==="ariaLabelConfig"?d.setState({ariaLabelConfig:mI(y)}):m==="fitView"?d.setState({fitViewQueued:y}):m==="fitViewOptions"?d.setState({fitViewOptions:y}):d.setState({[m]:y})))}p.current=e},Yv.map(m=>e[m])),null}function Kv(){return typeof window>"u"||!window.matchMedia?null:window.matchMedia("(prefers-color-scheme: dark)")}function Rj(e){var a;const[n,i]=ae.useState(e==="system"?null:e);return ae.useEffect(()=>{if(e!=="system"){i(e);return}const o=Kv(),s=()=>i(o!=null&&o.matches?"dark":"light");return s(),o==null||o.addEventListener("change",s),()=>{o==null||o.removeEventListener("change",s)}},[e]),n!==null?n:(a=Kv())!=null&&a.matches?"dark":"light"}const Zv=typeof document<"u"?document:null;function rs(e=null,n={target:Zv,actInsideInputWithModifier:!0}){const[i,a]=ae.useState(!1),o=ae.useRef(!1),s=ae.useRef(new Set([])),[c,f]=ae.useMemo(()=>{if(e!==null){const d=(Array.isArray(e)?e:[e]).filter(m=>typeof m=="string").map(m=>m.replace("+",` +`).replace(` + +`,` ++`).split(` +`)),p=d.reduce((m,y)=>m.concat(...y),[]);return[d,p]}return[[],[]]},[e]);return ae.useEffect(()=>{const h=(n==null?void 0:n.target)??Zv,d=(n==null?void 0:n.actInsideInputWithModifier)??!0;if(e!==null){const p=b=>{var N,E;if(o.current=b.ctrlKey||b.metaKey||b.shiftKey||b.altKey,(!o.current||o.current&&!d)&&tw(b))return!1;const S=Wv(b.code,f);if(s.current.add(b[S]),Qv(c,s.current,!1)){const k=((E=(N=b.composedPath)==null?void 0:N.call(b))==null?void 0:E[0])||b.target,w=(k==null?void 0:k.nodeName)==="BUTTON"||(k==null?void 0:k.nodeName)==="A";n.preventDefault!==!1&&(o.current||!w)&&b.preventDefault(),a(!0)}},m=b=>{const _=Wv(b.code,f);Qv(c,s.current,!0)?(a(!1),s.current.clear()):s.current.delete(b[_]),b.key==="Meta"&&s.current.clear(),o.current=!1},y=()=>{s.current.clear(),a(!1)};return h==null||h.addEventListener("keydown",p),h==null||h.addEventListener("keyup",m),window.addEventListener("blur",y),window.addEventListener("contextmenu",y),()=>{h==null||h.removeEventListener("keydown",p),h==null||h.removeEventListener("keyup",m),window.removeEventListener("blur",y),window.removeEventListener("contextmenu",y)}}},[e,a]),i}function Qv(e,n,i){return e.filter(a=>i||a.length===n.size).some(a=>a.every(o=>n.has(o)))}function Wv(e,n){return n.includes(e)?"code":"key"}const Dj=()=>{const e=zt();return ae.useMemo(()=>({zoomIn:async n=>{const{panZoom:i}=e.getState();return i?i.scaleBy(1.2,n):!1},zoomOut:async n=>{const{panZoom:i}=e.getState();return i?i.scaleBy(1/1.2,n):!1},zoomTo:async(n,i)=>{const{panZoom:a}=e.getState();return a?a.scaleTo(n,i):!1},getZoom:()=>e.getState().transform[2],setViewport:async(n,i)=>{const{transform:[a,o,s],panZoom:c}=e.getState();return c?(await c.setViewport({x:n.x??a,y:n.y??o,zoom:n.zoom??s},i),!0):!1},getViewport:()=>{const[n,i,a]=e.getState().transform;return{x:n,y:i,zoom:a}},setCenter:async(n,i,a)=>e.getState().setCenter(n,i,a),fitBounds:async(n,i)=>{const{width:a,height:o,minZoom:s,maxZoom:c,panZoom:f}=e.getState(),h=Nm(n,a,o,s,c,(i==null?void 0:i.padding)??.1);return f?(await f.setViewport(h,{duration:i==null?void 0:i.duration,ease:i==null?void 0:i.ease,interpolate:i==null?void 0:i.interpolate}),!0):!1},screenToFlowPosition:(n,i={})=>{const{transform:a,snapGrid:o,snapToGrid:s,domNode:c}=e.getState();if(!c)return n;const{x:f,y:h}=c.getBoundingClientRect(),d={x:n.x-f,y:n.y-h},p=i.snapGrid??o,m=i.snapToGrid??s;return ms(d,a,m,p)},flowToScreenPosition:n=>{const{transform:i,domNode:a}=e.getState();if(!a)return n;const{x:o,y:s}=a.getBoundingClientRect(),c=Il(n,i);return{x:c.x+o,y:c.y+s}}}),[])};function ww(e,n){const i=[],a=new Map,o=[];for(const s of e)if(s.type==="add"){o.push(s);continue}else if(s.type==="remove"||s.type==="replace")a.set(s.id,[s]);else{const c=a.get(s.id);c?c.push(s):a.set(s.id,[s])}for(const s of n){const c=a.get(s.id);if(!c){i.push(s);continue}if(c[0].type==="remove")continue;if(c[0].type==="replace"){i.push({...c[0].item});continue}const f={...s};for(const h of c)Lj(h,f);i.push(f)}return o.length&&o.forEach(s=>{s.index!==void 0?i.splice(s.index,0,{...s.item}):i.push({...s.item})}),i}function Lj(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 Sw(e,n){return ww(e,n)}function Nw(e,n){return ww(e,n)}function Ca(e,n){return{id:e,type:"select",selected:n}}function Tl(e,n=new Set,i=!1){const a=[];for(const[o,s]of e){const c=n.has(o);!(s.selected===void 0&&!c)&&s.selected!==c&&(i&&(s.selected=c),a.push(Ca(s.id,c)))}return a}function Jv({items:e=[],lookup:n}){var o;const i=[],a=new Map(e.map(s=>[s.id,s]));for(const[s,c]of e.entries()){const f=n.get(c.id),h=((o=f==null?void 0:f.internals)==null?void 0:o.userNode)??f;h!==void 0&&h!==c&&i.push({id:c.id,item:c,type:"replace"}),h===void 0&&i.push({item:c,type:"add",index:s})}for(const[s]of n)a.get(s)===void 0&&i.push({id:s,type:"remove"});return i}function e_(e){return{id:e.id,type:"remove"}}const zj=QE();function Ij(e,n,i={}){return _I(e,n,{...i,onError:i.onError??zj})}const t_=e=>lI(e),jj=e=>VE(e);function kw(e){return ae.forwardRef(e)}const Tw=typeof window<"u"?ae.useLayoutEffect:ae.useEffect;function n_(e){const[n,i]=ae.useState(BigInt(0)),[a]=ae.useState(()=>Bj(()=>i(o=>o+BigInt(1))));return Tw(()=>{const o=a.get();o.length&&(e(o),a.reset())},[n]),a}function Bj(e){let n=[];return{get:()=>n,reset:()=>{n=[]},push:i=>{n.push(i),e()}}}const Aw=ae.createContext(null);function Uj({children:e}){const n=zt(),i=ae.useCallback(f=>{const{nodes:h=[],setNodes:d,hasDefaultNodes:p,onNodesChange:m,nodeLookup:y,fitViewQueued:b,onNodesChangeMiddlewareMap:_}=n.getState();let S=h;for(const E of f)S=typeof E=="function"?E(S):E;let N=Jv({items:S,lookup:y});for(const E of _.values())N=E(N);p&&d(S),N.length>0?m==null||m(N):b&&window.requestAnimationFrame(()=>{const{fitViewQueued:E,nodes:k,setNodes:w}=n.getState();E&&w(k)})},[]),a=n_(i),o=ae.useCallback(f=>{const{edges:h=[],setEdges:d,hasDefaultEdges:p,onEdgesChange:m,edgeLookup:y}=n.getState();let b=h;for(const _ of f)b=typeof _=="function"?_(b):_;p?d(b):m&&m(Jv({items:b,lookup:y}))},[]),s=n_(o),c=ae.useMemo(()=>({nodeQueue:a,edgeQueue:s}),[]);return v.jsx(Aw.Provider,{value:c,children:e})}function Hj(){const e=ae.useContext(Aw);if(!e)throw new Error("useBatchContext must be used within a BatchProvider");return e}const $j=e=>!!e.panZoom;function gs(){const e=Dj(),n=zt(),i=Hj(),a=ft($j),o=ae.useMemo(()=>{const s=m=>n.getState().nodeLookup.get(m),c=m=>{i.nodeQueue.push(m)},f=m=>{i.edgeQueue.push(m)},h=m=>{var E,k;const{nodeLookup:y,nodeOrigin:b}=n.getState(),_=t_(m)?m:y.get(m.id),S=_.parentId?JE(_.position,_.measured,_.parentId,y,b):_.position,N={..._,position:S,width:((E=_.measured)==null?void 0:E.width)??_.width,height:((k=_.measured)==null?void 0:k.height)??_.height};return ns(N)},d=(m,y,b={replace:!1})=>{c(_=>_.map(S=>{if(S.id===m){const N=typeof y=="function"?y(S):y;return b.replace&&t_(N)?N:{...S,...N}}return S}))},p=(m,y,b={replace:!1})=>{f(_=>_.map(S=>{if(S.id===m){const N=typeof y=="function"?y(S):y;return b.replace&&jj(N)?N:{...S,...N}}return S}))};return{getNodes:()=>n.getState().nodes.map(m=>({...m})),getNode:m=>{var y;return(y=s(m))==null?void 0:y.internals.userNode},getInternalNode:s,getEdges:()=>{const{edges:m=[]}=n.getState();return m.map(y=>({...y}))},getEdge:m=>n.getState().edgeLookup.get(m),setNodes:c,setEdges:f,addNodes:m=>{const y=Array.isArray(m)?m:[m];i.nodeQueue.push(b=>[...b,...y])},addEdges:m=>{const y=Array.isArray(m)?m:[m];i.edgeQueue.push(b=>[...b,...y])},toObject:()=>{const{nodes:m=[],edges:y=[],transform:b}=n.getState(),[_,S,N]=b;return{nodes:m.map(E=>({...E})),edges:y.map(E=>({...E})),viewport:{x:_,y:S,zoom:N}}},deleteElements:async({nodes:m=[],edges:y=[]})=>{const{nodes:b,edges:_,onNodesDelete:S,onEdgesDelete:N,triggerNodeChanges:E,triggerEdgeChanges:k,onDelete:w,onBeforeDelete:O}=n.getState(),{nodes:B,edges:R}=await fI({nodesToRemove:m,edgesToRemove:y,nodes:b,edges:_,onBeforeDelete:O}),H=R.length>0,I=B.length>0;if(H){const K=R.map(e_);N==null||N(R),k(K)}if(I){const K=B.map(e_);S==null||S(B),E(K)}return(I||H)&&(w==null||w({nodes:B,edges:R})),{deletedNodes:B,deletedEdges:R}},getIntersectingNodes:(m,y=!0,b)=>{const _=kv(m),S=_?m:h(m),N=b!==void 0;return S?(b||n.getState().nodes).filter(E=>{const k=n.getState().nodeLookup.get(E.id);if(k&&!_&&(E.id===m.id||!k.internals.positionAbsolute))return!1;const w=ns(N?E:k),O=pu(w,S);return y&&O>0||O>=w.width*w.height||O>=S.width*S.height}):[]},isNodeIntersecting:(m,y,b=!0)=>{const S=kv(m)?m:h(m);if(!S)return!1;const N=pu(S,y);return b&&N>0||N>=y.width*y.height||N>=S.width*S.height},updateNode:d,updateNodeData:(m,y,b={replace:!1})=>{d(m,_=>{const S=typeof y=="function"?y(_):y;return b.replace?{..._,data:S}:{..._,data:{..._.data,...S}}},b)},updateEdge:p,updateEdgeData:(m,y,b={replace:!1})=>{p(m,_=>{const S=typeof y=="function"?y(_):y;return b.replace?{..._,data:S}:{..._,data:{..._.data,...S}}},b)},getNodesBounds:m=>{const{nodeLookup:y,nodeOrigin:b}=n.getState();return oI(m,{nodeLookup:y,nodeOrigin:b})},getHandleConnections:({type:m,id:y,nodeId:b})=>{var _;return Array.from(((_=n.getState().connectionLookup.get(`${b}-${m}${y?`-${y}`:""}`))==null?void 0:_.values())??[])},getNodeConnections:({type:m,handleId:y,nodeId:b})=>{var _;return Array.from(((_=n.getState().connectionLookup.get(`${b}${m?y?`-${m}-${y}`:`-${m}`:""}`))==null?void 0:_.values())??[])},fitView:async m=>{const y=n.getState().fitViewResolver??pI();return n.setState({fitViewQueued:!0,fitViewOptions:m,fitViewResolver:y}),i.nodeQueue.push(b=>[...b]),y.promise}}},[]);return ae.useMemo(()=>({...o,...e,viewportInitialized:a}),[a])}const i_=e=>e.selected,qj=typeof window<"u"?window:void 0;function Pj({deleteKeyCode:e,multiSelectionKeyCode:n}){const i=zt(),{deleteElements:a}=gs(),o=rs(e,{actInsideInputWithModifier:!1}),s=rs(n,{target:qj});ae.useEffect(()=>{if(o){const{edges:c,nodes:f}=i.getState();a({nodes:f.filter(i_),edges:c.filter(i_)}),i.setState({nodesSelectionActive:!1})}},[o]),ae.useEffect(()=>{i.setState({multiSelectionActive:s})},[s])}function Fj(e){const n=zt();ae.useEffect(()=>{const i=()=>{var o,s,c,f;if(!e.current||!(((s=(o=e.current).checkVisibility)==null?void 0:s.call(o))??!0))return!1;const a=km(e.current);(a.height===0||a.width===0)&&((f=(c=n.getState()).onError)==null||f.call(c,"004",Mi.error004())),n.setState({width:a.width||500,height:a.height||500})};if(e.current){i(),window.addEventListener("resize",i);const a=new ResizeObserver(()=>i());return a.observe(e.current),()=>{window.removeEventListener("resize",i),a&&e.current&&a.unobserve(e.current)}}},[])}const Du={position:"absolute",width:"100%",height:"100%",top:0,left:0},Gj=e=>({userSelectionActive:e.userSelectionActive,lib:e.lib,connectionInProgress:e.connection.inProgress});function Vj({onPaneContextMenu:e,zoomOnScroll:n=!0,zoomOnPinch:i=!0,panOnScroll:a=!1,panOnScrollSpeed:o=.5,panOnScrollMode:s=Da.Free,zoomOnDoubleClick:c=!0,panOnDrag:f=!0,defaultViewport:h,translateExtent:d,minZoom:p,maxZoom:m,zoomActivationKeyCode:y,preventScrolling:b=!0,children:_,noWheelClassName:S,noPanClassName:N,onViewportChange:E,isControlledViewport:k,paneClickDistance:w,selectionOnDrag:O}){const B=zt(),R=ae.useRef(null),{userSelectionActive:H,lib:I,connectionInProgress:K}=ft(Gj,qt),L=rs(y),q=ae.useRef();Fj(R);const X=ae.useCallback(Y=>{E==null||E({x:Y[0],y:Y[1],zoom:Y[2]}),k||B.setState({transform:Y})},[E,k]);return ae.useEffect(()=>{if(R.current){q.current=QI({domNode:R.current,minZoom:p,maxZoom:m,translateExtent:d,viewport:h,onDraggingChange:M=>B.setState(j=>j.paneDragging===M?j:{paneDragging:M}),onPanZoomStart:(M,j)=>{const{onViewportChangeStart:V,onMoveStart:Z}=B.getState();Z==null||Z(M,j),V==null||V(j)},onPanZoom:(M,j)=>{const{onViewportChange:V,onMove:Z}=B.getState();Z==null||Z(M,j),V==null||V(j)},onPanZoomEnd:(M,j)=>{const{onViewportChangeEnd:V,onMoveEnd:Z}=B.getState();Z==null||Z(M,j),V==null||V(j)}});const{x:Y,y:A,zoom:$}=q.current.getViewport();return B.setState({panZoom:q.current,transform:[Y,A,$],domNode:R.current.closest(".react-flow")}),()=>{var M;(M=q.current)==null||M.destroy()}}},[]),ae.useEffect(()=>{var Y;(Y=q.current)==null||Y.update({onPaneContextMenu:e,zoomOnScroll:n,zoomOnPinch:i,panOnScroll:a,panOnScrollSpeed:o,panOnScrollMode:s,zoomOnDoubleClick:c,panOnDrag:f,zoomActivationKeyPressed:L,preventScrolling:b,noPanClassName:N,userSelectionActive:H,noWheelClassName:S,lib:I,onTransformChange:X,connectionInProgress:K,selectionOnDrag:O,paneClickDistance:w})},[e,n,i,a,o,s,c,f,L,b,N,H,S,I,X,K,O,w]),v.jsx("div",{className:"react-flow__renderer",ref:R,style:Du,children:_})}const Yj=e=>({userSelectionActive:e.userSelectionActive,userSelectionRect:e.userSelectionRect});function Xj(){const{userSelectionActive:e,userSelectionRect:n}=ft(Yj,qt);return e&&n?v.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 ip=(e,n)=>i=>{i.target===n.current&&(e==null||e(i))},Kj=e=>({userSelectionActive:e.userSelectionActive,elementsSelectable:e.elementsSelectable,dragging:e.paneDragging,panBy:e.panBy,autoPanSpeed:e.autoPanSpeed});function Zj({isSelecting:e,selectionKeyPressed:n,selectionMode:i=ts.Full,panOnDrag:a,autoPanOnSelection:o,paneClickDistance:s,selectionOnDrag:c,onSelectionStart:f,onSelectionEnd:h,onPaneClick:d,onPaneContextMenu:p,onPaneScroll:m,onPaneMouseEnter:y,onPaneMouseMove:b,onPaneMouseLeave:_,children:S}){const N=ae.useRef(0),E=zt(),{userSelectionActive:k,elementsSelectable:w,dragging:O,panBy:B,autoPanSpeed:R}=ft(Kj,qt),H=w&&(e||k),I=ae.useRef(null),K=ae.useRef(),L=ae.useRef(new Set),q=ae.useRef(new Set),X=ae.useRef(!1),Y=ae.useRef(!1),A=ae.useRef({x:0,y:0}),$=ae.useRef(!1),M=W=>{if(Y.current||X.current||E.getState().connection.inProgress){Y.current=!1,X.current=!1;return}d==null||d(W),E.getState().resetSelectedElements(),E.setState({nodesSelectionActive:!1})},j=W=>{if(Array.isArray(a)&&(a!=null&&a.includes(2))){W.preventDefault();return}p==null||p(W)},V=m?W=>m(W):void 0,Z=W=>{Y.current&&(W.stopPropagation(),Y.current=!1)},C=W=>{var lt,Rt;const{domNode:ee,transform:ce}=E.getState();if(K.current=ee==null?void 0:ee.getBoundingClientRect(),!K.current)return;const de=W.target===I.current;if(!de&&!!W.target.closest(".nokey")||!e||!(c&&de||n)||W.button!==0||!W.isPrimary)return;(Rt=(lt=W.target)==null?void 0:lt.setPointerCapture)==null||Rt.call(lt,W.pointerId),Y.current=!1;const{x:Se,y:De}=Ai(W.nativeEvent,K.current),He=ms({x:Se,y:De},ce);E.setState({userSelectionRect:{width:0,height:0,startX:He.x,startY:He.y,x:Se,y:De}}),de||(W.stopPropagation(),W.preventDefault())};function z(W,ee){const{userSelectionRect:ce}=E.getState();if(!ce)return;const{transform:de,nodeLookup:be,edgeLookup:Ee,connectionLookup:Se,triggerNodeChanges:De,triggerEdgeChanges:He,defaultEdgeOptions:lt}=E.getState(),Rt={x:ce.startX,y:ce.startY},{x:Yt,y:Pt}=Il(Rt,de),Xt={startX:Rt.x,startY:Rt.y,x:Wjt.id)),q.current=new Set;const ct=(lt==null?void 0:lt.selectable)??!0;for(const jt of L.current){const ue=Se.get(jt);if(ue)for(const{edgeId:ye}of ue.values()){const Me=Ee.get(ye);Me&&(Me.selectable??ct)&&q.current.add(ye)}}if(!Tv(Vn,L.current)){const jt=Tl(be,L.current,!0);De(jt)}if(!Tv(En,q.current)){const jt=Tl(Ee,q.current);He(jt)}E.setState({userSelectionRect:Xt,userSelectionActive:!0,nodesSelectionActive:!1})}function G(){if(!o||!K.current)return;const[W,ee]=Sm(A.current,K.current,R);B({x:W,y:ee}).then(ce=>{if(!Y.current||!ce){N.current=requestAnimationFrame(G);return}const{x:de,y:be}=A.current;z(de,be),N.current=requestAnimationFrame(G)})}const D=()=>{cancelAnimationFrame(N.current),N.current=0,$.current=!1};ae.useEffect(()=>()=>D(),[]);const F=W=>{const{userSelectionRect:ee,transform:ce,resetSelectedElements:de}=E.getState();if(!K.current||!ee)return;const{x:be,y:Ee}=Ai(W.nativeEvent,K.current);A.current={x:be,y:Ee};const Se=Il({x:ee.startX,y:ee.startY},ce);if(!Y.current){const De=n?0:s;if(Math.hypot(be-Se.x,Ee-Se.y)<=De)return;de(),f==null||f(W)}Y.current=!0,$.current||(G(),$.current=!0),z(be,Ee)},U=W=>{var ee,ce;if(!H){W.target===I.current&&E.getState().connection.inProgress&&(X.current=!0);return}W.button===0&&((ce=(ee=W.target)==null?void 0:ee.releasePointerCapture)==null||ce.call(ee,W.pointerId),!k&&W.target===I.current&&E.getState().userSelectionRect&&(M==null||M(W)),E.setState({userSelectionActive:!1,userSelectionRect:null}),Y.current&&(h==null||h(W),E.setState({nodesSelectionActive:L.current.size>0})),D())},Q=W=>{var ee,ce;(ce=(ee=W.target)==null?void 0:ee.releasePointerCapture)==null||ce.call(ee,W.pointerId),D()},J=a===!0||Array.isArray(a)&&a.includes(0);return v.jsxs("div",{className:on(["react-flow__pane",{draggable:J,dragging:O,selection:e}]),onClick:H?void 0:ip(M,I),onContextMenu:ip(j,I),onWheel:ip(V,I),onPointerEnter:H?void 0:y,onPointerMove:H?F:b,onPointerUp:U,onPointerCancel:H?Q:void 0,onPointerDownCapture:H?C:void 0,onClickCapture:H?Z:void 0,onPointerLeave:_,ref:I,style:Du,children:[S,v.jsx(Xj,{})]})}function jp({id:e,store:n,unselect:i=!1,nodeRef:a}){const{addSelectedNodes:o,unselectNodesAndEdges:s,multiSelectionActive:c,nodeLookup:f,onError:h}=n.getState(),d=f.get(e);if(!d){h==null||h("012",Mi.error012(e));return}n.setState({nodesSelectionActive:!1}),d.selected?(i||d.selected&&c)&&(s({nodes:[d],edges:[]}),requestAnimationFrame(()=>{var p;return(p=a==null?void 0:a.current)==null?void 0:p.blur()})):o([e])}function Cw({nodeRef:e,disabled:n=!1,noDragClassName:i,handleSelector:a,nodeId:o,isSelectable:s,nodeClickDistance:c}){const f=zt(),[h,d]=ae.useState(!1),p=ae.useRef();return ae.useEffect(()=>{if(!n)return p.current=jI({getStoreItems:()=>f.getState(),onNodeMouseDown:m=>{jp({id:m,store:f,nodeRef:e})},onDragStart:()=>{d(!0)},onDragStop:()=>{d(!1)}}),()=>{var m;(m=p.current)==null||m.destroy(),p.current=void 0}},[n,f,e]),ae.useEffect(()=>{n||!e.current||!p.current||p.current.update({noDragClassName:i,handleSelector:a,domNode:e.current,isSelectable:s,nodeId:o,nodeClickDistance:c})},[i,a,n,s,e,o,c]),h}const Qj=e=>n=>n.selected&&(n.draggable||e&&typeof n.draggable>"u");function Mw(){const e=zt();return ae.useCallback(i=>{const{nodeExtent:a,snapToGrid:o,snapGrid:s,nodesDraggable:c,onError:f,updateNodePositions:h,nodeLookup:d,nodeOrigin:p}=e.getState(),m=new Map,y=Qj(c),b=o?s[0]:5,_=o?s[1]:5,S=i.direction.x*b*i.factor,N=i.direction.y*_*i.factor;for(const[,E]of d){if(!y(E))continue;let k={x:E.internals.positionAbsolute.x+S,y:E.internals.positionAbsolute.y+N};o&&(k=ps(k,s));const{position:w,positionAbsolute:O}=YE({nodeId:E.id,nextPosition:k,nodeLookup:d,nodeExtent:a,nodeOrigin:p,onError:f});E.position=w,E.internals.positionAbsolute=O,m.set(E.id,E)}h(m)},[])}const Rm=ae.createContext(null),Wj=Rm.Provider;Rm.Consumer;const Ow=()=>ae.useContext(Rm),Jj=e=>({connectOnClick:e.connectOnClick,noPanClassName:e.noPanClassName,rfId:e.rfId}),Rw=ae.createContext(null);function e6({children:e}){const n=ft(Jj,qt);return v.jsx(Rw.Provider,{value:n,children:e})}function t6(){const e=ae.useContext(Rw);if(!e)throw new Error("useHandleConfig must be used within a HandleConfigProvider");return e}const n6={connectingFrom:!1,connectingTo:!1,clickConnecting:!1,isPossibleEndHandle:!0,connectionInProcess:!1,clickConnectionInProcess:!1,valid:!1},i6=(e,n,i)=>a=>{const{connectionClickStartHandle:o,connectionMode:s,connection:c}=a,{fromHandle:f,toHandle:h,isValid:d}=c;if(!f&&!o)return n6;const p=(h==null?void 0:h.nodeId)===e&&(h==null?void 0:h.id)===n&&(h==null?void 0:h.type)===i;return{connectingFrom:(f==null?void 0:f.nodeId)===e&&(f==null?void 0:f.id)===n&&(f==null?void 0:f.type)===i,connectingTo:p,clickConnecting:(o==null?void 0:o.nodeId)===e&&(o==null?void 0:o.id)===n&&(o==null?void 0:o.type)===i,isPossibleEndHandle:s===Ll.Strict?(f==null?void 0:f.type)!==i:e!==(f==null?void 0:f.nodeId)||n!==(f==null?void 0:f.id),connectionInProcess:!!f,clickConnectionInProcess:!!o,valid:p&&d}};function r6({type:e="source",position:n=ze.Top,isValidConnection:i,isConnectable:a=!0,isConnectableStart:o=!0,isConnectableEnd:s=!0,id:c,onConnect:f,children:h,className:d,onMouseDown:p,onTouchStart:m,...y},b){var $,M;const _=c||null,S=e==="target",N=zt(),E=Ow(),{connectOnClick:k,noPanClassName:w,rfId:O}=t6(),{connectingFrom:B,connectingTo:R,clickConnecting:H,isPossibleEndHandle:I,connectionInProcess:K,clickConnectionInProcess:L,valid:q}=ft(i6(E,_,e),qt);E||(M=($=N.getState()).onError)==null||M.call($,"010",Mi.error010());const X=j=>{const{defaultEdgeOptions:V,onConnect:Z,hasDefaultEdges:C}=N.getState(),z={...V,...j};if(C){const{edges:G,setEdges:D,onError:F}=N.getState();D(Ij(z,G,{onError:F}))}Z==null||Z(z),f==null||f(z)},Y=j=>{if(!E)return;const V=nw(j.nativeEvent);if(o&&(V&&j.button===0||!V)){const Z=N.getState();Ip.onPointerDown(j.nativeEvent,{handleDomNode:j.currentTarget,autoPanOnConnect:Z.autoPanOnConnect,connectionMode:Z.connectionMode,connectionRadius:Z.connectionRadius,domNode:Z.domNode,nodeLookup:Z.nodeLookup,lib:Z.lib,isTarget:S,handleId:_,nodeId:E,flowId:Z.rfId,panBy:Z.panBy,cancelConnection:Z.cancelConnection,onConnectStart:Z.onConnectStart,onConnectEnd:(...C)=>{var z,G;return(G=(z=N.getState()).onConnectEnd)==null?void 0:G.call(z,...C)},updateConnection:Z.updateConnection,onConnect:X,isValidConnection:i||((...C)=>{var z,G;return((G=(z=N.getState()).isValidConnection)==null?void 0:G.call(z,...C))??!0}),getTransform:()=>N.getState().transform,getFromHandle:()=>N.getState().connection.fromHandle,autoPanSpeed:Z.autoPanSpeed,dragThreshold:Z.connectionDragThreshold})}V?p==null||p(j):m==null||m(j)},A=j=>{const{onClickConnectStart:V,onClickConnectEnd:Z,connectionClickStartHandle:C,connectionMode:z,isValidConnection:G,lib:D,rfId:F,nodeLookup:U,connection:Q}=N.getState();if(!E||!C&&!o)return;if(!C){V==null||V(j.nativeEvent,{nodeId:E,handleId:_,handleType:e}),N.setState({connectionClickStartHandle:{nodeId:E,type:e,id:_}});return}const J=ew(j.target),W=i||G,{connection:ee,isValid:ce}=Ip.isValid(j.nativeEvent,{handle:{nodeId:E,id:_,type:e},connectionMode:z,fromNodeId:C.nodeId,fromHandleId:C.id||null,fromType:C.type,isValidConnection:W,flowId:F,doc:J,lib:D,nodeLookup:U});ce&&ee&&X(ee);const de=structuredClone(Q);delete de.inProgress,de.toPosition=de.toHandle?de.toHandle.position:null,Z==null||Z(j,de),N.setState({connectionClickStartHandle:null})};return v.jsx("div",{"data-handleid":_,"data-nodeid":E,"data-handlepos":n,"data-id":`${O}-${E}-${_}-${e}`,className:on(["react-flow__handle",`react-flow__handle-${n}`,"nodrag",w,d,{source:!S,target:S,connectable:a,connectablestart:o,connectableend:s,clickconnecting:H,connectingfrom:B,connectingto:R,valid:q,connectionindicator:a&&(!K||I)&&(K||L?s:o)}]),onMouseDown:Y,onTouchStart:Y,onClick:k?A:void 0,ref:b,...y,children:h})}const Bl=ae.memo(kw(r6));function a6({data:e,isConnectable:n,sourcePosition:i=ze.Bottom}){return v.jsxs(v.Fragment,{children:[e==null?void 0:e.label,v.jsx(Bl,{type:"source",position:i,isConnectable:n})]})}function l6({data:e,isConnectable:n,targetPosition:i=ze.Top,sourcePosition:a=ze.Bottom}){return v.jsxs(v.Fragment,{children:[v.jsx(Bl,{type:"target",position:i,isConnectable:n}),e==null?void 0:e.label,v.jsx(Bl,{type:"source",position:a,isConnectable:n})]})}function o6(){return null}function s6({data:e,isConnectable:n,targetPosition:i=ze.Top}){return v.jsxs(v.Fragment,{children:[v.jsx(Bl,{type:"target",position:i,isConnectable:n}),e==null?void 0:e.label]})}const mu={ArrowUp:{x:0,y:-1},ArrowDown:{x:0,y:1},ArrowLeft:{x:-1,y:0},ArrowRight:{x:1,y:0}},r_={input:a6,default:l6,output:s6,group:o6};function c6(e){var n,i,a,o;return e.internals.handleBounds===void 0?{width:e.width??e.initialWidth??((n=e.style)==null?void 0:n.width),height:e.height??e.initialHeight??((i=e.style)==null?void 0:i.height)}:{width:e.width??((a=e.style)==null?void 0:a.width),height:e.height??((o=e.style)==null?void 0:o.height)}}const u6=e=>{const{width:n,height:i,x:a,y:o}=hs(e.nodeLookup,{filter:s=>!!s.selected});return{width:Ti(n)?n:null,height:Ti(i)?i:null,userSelectionActive:e.userSelectionActive,transformString:`translate(${e.transform[0]}px,${e.transform[1]}px) scale(${e.transform[2]}) translate(${a}px,${o}px)`}};function f6({onSelectionContextMenu:e,noPanClassName:n,disableKeyboardA11y:i}){const a=zt(),{width:o,height:s,transformString:c,userSelectionActive:f}=ft(u6,qt),h=Mw(),d=ae.useRef(null);ae.useEffect(()=>{var b;i||(b=d.current)==null||b.focus({preventScroll:!0})},[i]);const p=!f&&o!==null&&s!==null;if(Cw({nodeRef:d,disabled:!p}),!p)return null;const m=e?b=>{const _=a.getState().nodes.filter(S=>S.selected);e(b,_)}:void 0,y=b=>{Object.prototype.hasOwnProperty.call(mu,b.key)&&(b.preventDefault(),h({direction:mu[b.key],factor:b.shiftKey?4:1}))};return v.jsx("div",{className:on(["react-flow__nodesselection","react-flow__container",n]),style:{transform:c},children:v.jsx("div",{ref:d,className:"react-flow__nodesselection-rect",onContextMenu:m,tabIndex:i?void 0:-1,onKeyDown:i?void 0:y,style:{width:o,height:s}})})}const a_=typeof window<"u"?window:void 0,d6=e=>({nodesSelectionActive:e.nodesSelectionActive,userSelectionActive:e.userSelectionActive});function Dw({children:e,onPaneClick:n,onPaneMouseEnter:i,onPaneMouseMove:a,onPaneMouseLeave:o,onPaneContextMenu:s,onPaneScroll:c,paneClickDistance:f,deleteKeyCode:h,selectionKeyCode:d,selectionOnDrag:p,selectionMode:m,onSelectionStart:y,onSelectionEnd:b,multiSelectionKeyCode:_,panActivationKeyCode:S,zoomActivationKeyCode:N,elementsSelectable:E,zoomOnScroll:k,zoomOnPinch:w,panOnScroll:O,panOnScrollSpeed:B,panOnScrollMode:R,zoomOnDoubleClick:H,panOnDrag:I,autoPanOnSelection:K,defaultViewport:L,translateExtent:q,minZoom:X,maxZoom:Y,preventScrolling:A,onSelectionContextMenu:$,noWheelClassName:M,noPanClassName:j,disableKeyboardA11y:V,onViewportChange:Z,isControlledViewport:C}){const{nodesSelectionActive:z,userSelectionActive:G}=ft(d6,qt),D=rs(d,{target:a_}),F=rs(S,{target:a_}),U=F||I,Q=F||O,J=p&&U!==!0,W=D||G||J;return Pj({deleteKeyCode:h,multiSelectionKeyCode:_}),v.jsx(Vj,{onPaneContextMenu:s,elementsSelectable:E,zoomOnScroll:k,zoomOnPinch:w,panOnScroll:Q,panOnScrollSpeed:B,panOnScrollMode:R,zoomOnDoubleClick:H,panOnDrag:!D&&U,defaultViewport:L,translateExtent:q,minZoom:X,maxZoom:Y,zoomActivationKeyCode:N,preventScrolling:A,noWheelClassName:M,noPanClassName:j,onViewportChange:Z,isControlledViewport:C,paneClickDistance:f,selectionOnDrag:J,children:v.jsxs(Zj,{onSelectionStart:y,onSelectionEnd:b,onPaneClick:n,onPaneMouseEnter:i,onPaneMouseMove:a,onPaneMouseLeave:o,onPaneContextMenu:s,onPaneScroll:c,panOnDrag:U,autoPanOnSelection:K,isSelecting:!!W,selectionMode:m,selectionKeyPressed:D,paneClickDistance:f,selectionOnDrag:J,children:[e,z&&v.jsx(f6,{onSelectionContextMenu:$,noPanClassName:j,disableKeyboardA11y:V})]})})}Dw.displayName="FlowRenderer";const h6=ae.memo(Dw),p6=e=>n=>e?wm(n.nodeLookup,{x:0,y:0,width:n.width,height:n.height},n.transform,!0).map(i=>i.id):Array.from(n.nodeLookup.keys());function m6(e){return ft(ae.useCallback(p6(e),[e]),qt)}const g6=e=>e.updateNodeInternals;function b6(){const e=ft(g6),[n]=ae.useState(()=>typeof ResizeObserver>"u"?null:new ResizeObserver(i=>{const a=new Map;i.forEach(o=>{const s=o.target.getAttribute("data-id");a.set(s,{id:s,nodeElement:o.target,force:!0})}),e(a)}));return ae.useEffect(()=>()=>{n==null||n.disconnect()},[n]),n}function y6({node:e,nodeType:n,hasDimensions:i,resizeObserver:a}){const o=zt(),s=ae.useRef(null),c=ae.useRef(null),f=ae.useRef(e.sourcePosition),h=ae.useRef(e.targetPosition),d=ae.useRef(n),p=i&&!!e.internals.handleBounds;return ae.useEffect(()=>{s.current&&!e.hidden&&(!p||c.current!==s.current)&&(c.current&&(a==null||a.unobserve(c.current)),a==null||a.observe(s.current),c.current=s.current)},[p,e.hidden]),ae.useEffect(()=>()=>{c.current&&(a==null||a.unobserve(c.current),c.current=null)},[]),ae.useEffect(()=>{if(s.current){const m=d.current!==n,y=f.current!==e.sourcePosition,b=h.current!==e.targetPosition;(m||y||b)&&(d.current=n,f.current=e.sourcePosition,h.current=e.targetPosition,o.getState().updateNodeInternals(new Map([[e.id,{id:e.id,nodeElement:s.current,force:!0}]])))}},[e.id,n,e.sourcePosition,e.targetPosition]),s}function x6({id:e,onClick:n,onMouseEnter:i,onMouseMove:a,onMouseLeave:o,onContextMenu:s,onDoubleClick:c,nodesDraggable:f,elementsSelectable:h,nodesConnectable:d,nodesFocusable:p,resizeObserver:m,noDragClassName:y,noPanClassName:b,disableKeyboardA11y:_,rfId:S,nodeTypes:N,nodeClickDistance:E,onError:k}){const{node:w,internals:O,isParent:B}=ft(W=>{const ee=W.nodeLookup.get(e),ce=W.parentLookup.has(e);return{node:ee,internals:ee.internals,isParent:ce}},qt);let R=w.type||"default",H=(N==null?void 0:N[R])||r_[R];H===void 0&&(k==null||k("003",Mi.error003(R)),R="default",H=(N==null?void 0:N.default)||r_.default);const I=!!(w.draggable||f&&typeof w.draggable>"u"),K=!!(w.selectable||h&&typeof w.selectable>"u"),L=!!(w.connectable||d&&typeof w.connectable>"u"),q=!!(w.focusable||p&&typeof w.focusable>"u"),X=zt(),Y=WE(w),A=y6({node:w,nodeType:R,hasDimensions:Y,resizeObserver:m}),$=Cw({nodeRef:A,disabled:w.hidden||!I,noDragClassName:y,handleSelector:w.dragHandle,nodeId:e,isSelectable:K,nodeClickDistance:E}),M=Mw();if(w.hidden)return null;const j=Vi(w),V=c6(w),Z=K||I||n||i||a||o,C=i?W=>i(W,{...O.userNode}):void 0,z=a?W=>a(W,{...O.userNode}):void 0,G=o?W=>o(W,{...O.userNode}):void 0,D=s?W=>s(W,{...O.userNode}):void 0,F=c?W=>c(W,{...O.userNode}):void 0,U=W=>{const{selectNodesOnDrag:ee,nodeDragThreshold:ce}=X.getState();K&&(!ee||!I||ce>0)&&jp({id:e,store:X,nodeRef:A}),n&&n(W,{...O.userNode})},Q=W=>{if(!(tw(W.nativeEvent)||_)){if(qE.includes(W.key)&&K){const ee=W.key==="Escape";jp({id:e,store:X,unselect:ee,nodeRef:A})}else if(I&&w.selected&&Object.prototype.hasOwnProperty.call(mu,W.key)){W.preventDefault();const{ariaLabelConfig:ee}=X.getState();X.setState({ariaLiveMessage:ee["node.a11yDescription.ariaLiveMessage"]({direction:W.key.replace("Arrow","").toLowerCase(),x:~~O.positionAbsolute.x,y:~~O.positionAbsolute.y})}),M({direction:mu[W.key],factor:W.shiftKey?4:1})}}},J=()=>{var Se;if(_||!((Se=A.current)!=null&&Se.matches(":focus-visible")))return;const{transform:W,width:ee,height:ce,autoPanOnNodeFocus:de,setCenter:be}=X.getState();if(!de)return;wm(new Map([[e,w]]),{x:0,y:0,width:ee,height:ce},W,!0).length>0||be(w.position.x+j.width/2,w.position.y+j.height/2,{zoom:W[2]})};return v.jsx("div",{className:on(["react-flow__node",`react-flow__node-${R}`,{[b]:I},w.className,{selected:w.selected,selectable:K,parent:B,draggable:I,dragging:$}]),ref:A,style:{zIndex:O.z,transform:`translate(${O.positionAbsolute.x}px,${O.positionAbsolute.y}px)`,pointerEvents:Z?"all":"none",visibility:Y?"visible":"hidden",...w.style,...V},"data-id":e,"data-testid":`rf__node-${e}`,onMouseEnter:C,onMouseMove:z,onMouseLeave:G,onContextMenu:D,onClick:U,onDoubleClick:F,onKeyDown:q?Q:void 0,tabIndex:q?0:void 0,onFocus:q?J:void 0,role:w.ariaRole??(q?"group":void 0),"aria-roledescription":"node","aria-describedby":_?void 0:`${vw}-${S}`,"aria-label":w.ariaLabel,...w.domAttributes,children:v.jsx(Wj,{value:e,children:v.jsx(H,{id:e,data:w.data,type:R,positionAbsoluteX:O.positionAbsolute.x,positionAbsoluteY:O.positionAbsolute.y,selected:w.selected??!1,selectable:K,draggable:I,deletable:w.deletable??!0,isConnectable:L,sourcePosition:w.sourcePosition,targetPosition:w.targetPosition,dragging:$,dragHandle:w.dragHandle,zIndex:O.z,parentId:w.parentId,...j})})})}var v6=ae.memo(x6);const _6=e=>({nodesConnectable:e.nodesConnectable,nodesFocusable:e.nodesFocusable,elementsSelectable:e.elementsSelectable,onError:e.onError});function Lw(e){const{nodesConnectable:n,nodesFocusable:i,elementsSelectable:a,onError:o}=ft(_6,qt),s=m6(e.onlyRenderVisibleElements),c=b6();return v.jsx("div",{className:"react-flow__nodes",style:Du,children:s.map(f=>v.jsx(v6,{id:f,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:e.nodesDraggable??!0,nodesConnectable:n,nodesFocusable:i,elementsSelectable:a,nodeClickDistance:e.nodeClickDistance,onError:o},f))})}Lw.displayName="NodeRenderer";const E6=ae.memo(Lw);function w6(e){return ft(ae.useCallback(i=>{if(!e)return i.edges.map(o=>o.id);const a=[];if(i.width&&i.height)for(const o of i.edges){const s=i.nodeLookup.get(o.source),c=i.nodeLookup.get(o.target);s&&c&&yI({sourceNode:s,targetNode:c,width:i.width,height:i.height,transform:i.transform})&&a.push(o.id)}return a},[e]),qt)}const S6=({color:e="none",strokeWidth:n=1})=>{const i={strokeWidth:n,...e&&{stroke:e}};return v.jsx("polyline",{className:"arrow",style:i,strokeLinecap:"round",fill:"none",strokeLinejoin:"round",points:"-5,-4 0,0 -5,4"})},N6=({color:e="none",strokeWidth:n=1})=>{const i={strokeWidth:n,...e&&{stroke:e,fill:e}};return v.jsx("polyline",{className:"arrowclosed",style:i,strokeLinecap:"round",strokeLinejoin:"round",points:"-5,-4 0,0 -5,4 -5,-4"})},l_={[du.Arrow]:S6,[du.ArrowClosed]:N6};function k6(e){const n=zt();return ae.useMemo(()=>{var o,s;return Object.prototype.hasOwnProperty.call(l_,e)?l_[e]:((s=(o=n.getState()).onError)==null||s.call(o,"009",Mi.error009(e)),null)},[e])}const T6=({id:e,type:n,color:i,width:a=12.5,height:o=12.5,markerUnits:s="strokeWidth",strokeWidth:c,orient:f="auto-start-reverse"})=>{const h=k6(n);return h?v.jsx("marker",{className:"react-flow__arrowhead",id:e,markerWidth:`${a}`,markerHeight:`${o}`,viewBox:"-10 -10 20 20",markerUnits:s,orient:f,refX:"0",refY:"0",children:v.jsx(h,{color:i,strokeWidth:c})}):null},zw=({defaultColor:e,rfId:n})=>{const i=ft(s=>s.edges),a=ft(s=>s.defaultEdgeOptions),o=ae.useMemo(()=>kI(i,{id:n,defaultColor:e,defaultMarkerStart:a==null?void 0:a.markerStart,defaultMarkerEnd:a==null?void 0:a.markerEnd}),[i,a,n,e]);return o.length?v.jsx("svg",{className:"react-flow__marker","aria-hidden":"true",children:v.jsx("defs",{children:o.map(s=>v.jsx(T6,{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};zw.displayName="MarkerDefinitions";var A6=ae.memo(zw);function Iw({x:e,y:n,label:i,labelStyle:a,labelShowBg:o=!0,labelBgStyle:s,labelBgPadding:c=[2,4],labelBgBorderRadius:f=2,children:h,className:d,...p}){const[m,y]=ae.useState({x:1,y:0,width:0,height:0}),b=on(["react-flow__edge-textwrapper",d]),_=ae.useRef(null);return ae.useEffect(()=>{if(_.current){const S=_.current.getBBox();y({x:S.x,y:S.y,width:S.width,height:S.height})}},[i]),i?v.jsxs("g",{transform:`translate(${e-m.width/2} ${n-m.height/2})`,className:b,visibility:m.width?"visible":"hidden",...p,children:[o&&v.jsx("rect",{width:m.width+2*c[0],x:-c[0],y:-c[1],height:m.height+2*c[1],className:"react-flow__edge-textbg",style:s,rx:f,ry:f}),v.jsx("text",{className:"react-flow__edge-text",y:m.height/2,dy:"0.3em",ref:_,style:a,children:i}),h]}):null}Iw.displayName="EdgeText";const C6=ae.memo(Iw);function Lu({path:e,labelX:n,labelY:i,label:a,labelStyle:o,labelShowBg:s,labelBgStyle:c,labelBgPadding:f,labelBgBorderRadius:h,interactionWidth:d=20,...p}){return v.jsxs(v.Fragment,{children:[v.jsx("path",{...p,d:e,fill:"none",className:on(["react-flow__edge-path",p.className])}),d?v.jsx("path",{d:e,fill:"none",strokeOpacity:0,strokeWidth:d,className:"react-flow__edge-interaction"}):null,a&&Ti(n)&&Ti(i)?v.jsx(C6,{x:n,y:i,label:a,labelStyle:o,labelShowBg:s,labelBgStyle:c,labelBgPadding:f,labelBgBorderRadius:h}):null]})}function o_({pos:e,x1:n,y1:i,x2:a,y2:o}){return e===ze.Left||e===ze.Right?[.5*(n+a),i]:[n,.5*(i+o)]}function jw({sourceX:e,sourceY:n,sourcePosition:i=ze.Bottom,targetX:a,targetY:o,targetPosition:s=ze.Top}){const[c,f]=o_({pos:i,x1:e,y1:n,x2:a,y2:o}),[h,d]=o_({pos:s,x1:a,y1:o,x2:e,y2:n}),[p,m,y,b]=iw({sourceX:e,sourceY:n,targetX:a,targetY:o,sourceControlX:c,sourceControlY:f,targetControlX:h,targetControlY:d});return[`M${e},${n} C${c},${f} ${h},${d} ${a},${o}`,p,m,y,b]}function Bw(e){return ae.memo(({id:n,sourceX:i,sourceY:a,targetX:o,targetY:s,sourcePosition:c,targetPosition:f,label:h,labelStyle:d,labelShowBg:p,labelBgStyle:m,labelBgPadding:y,labelBgBorderRadius:b,style:_,markerEnd:S,markerStart:N,interactionWidth:E})=>{const[k,w,O]=jw({sourceX:i,sourceY:a,sourcePosition:c,targetX:o,targetY:s,targetPosition:f}),B=e.isInternal?void 0:n;return v.jsx(Lu,{id:B,path:k,labelX:w,labelY:O,label:h,labelStyle:d,labelShowBg:p,labelBgStyle:m,labelBgPadding:y,labelBgBorderRadius:b,style:_,markerEnd:S,markerStart:N,interactionWidth:E})})}const M6=Bw({isInternal:!1}),Uw=Bw({isInternal:!0});M6.displayName="SimpleBezierEdge";Uw.displayName="SimpleBezierEdgeInternal";function Hw(e){return ae.memo(({id:n,sourceX:i,sourceY:a,targetX:o,targetY:s,label:c,labelStyle:f,labelShowBg:h,labelBgStyle:d,labelBgPadding:p,labelBgBorderRadius:m,style:y,sourcePosition:b=ze.Bottom,targetPosition:_=ze.Top,markerEnd:S,markerStart:N,pathOptions:E,interactionWidth:k})=>{const[w,O,B]=Dp({sourceX:i,sourceY:a,sourcePosition:b,targetX:o,targetY:s,targetPosition:_,borderRadius:E==null?void 0:E.borderRadius,offset:E==null?void 0:E.offset,stepPosition:E==null?void 0:E.stepPosition}),R=e.isInternal?void 0:n;return v.jsx(Lu,{id:R,path:w,labelX:O,labelY:B,label:c,labelStyle:f,labelShowBg:h,labelBgStyle:d,labelBgPadding:p,labelBgBorderRadius:m,style:y,markerEnd:S,markerStart:N,interactionWidth:k})})}const $w=Hw({isInternal:!1}),qw=Hw({isInternal:!0});$w.displayName="SmoothStepEdge";qw.displayName="SmoothStepEdgeInternal";function Pw(e){return ae.memo(({id:n,...i})=>{var o;const a=e.isInternal?void 0:n;return v.jsx($w,{...i,id:a,pathOptions:ae.useMemo(()=>{var s;return{borderRadius:0,offset:(s=i.pathOptions)==null?void 0:s.offset}},[(o=i.pathOptions)==null?void 0:o.offset])})})}const O6=Pw({isInternal:!1}),Fw=Pw({isInternal:!0});O6.displayName="StepEdge";Fw.displayName="StepEdgeInternal";function Gw(e){return ae.memo(({id:n,sourceX:i,sourceY:a,targetX:o,targetY:s,label:c,labelStyle:f,labelShowBg:h,labelBgStyle:d,labelBgPadding:p,labelBgBorderRadius:m,style:y,markerEnd:b,markerStart:_,interactionWidth:S})=>{const[N,E,k]=lw({sourceX:i,sourceY:a,targetX:o,targetY:s}),w=e.isInternal?void 0:n;return v.jsx(Lu,{id:w,path:N,labelX:E,labelY:k,label:c,labelStyle:f,labelShowBg:h,labelBgStyle:d,labelBgPadding:p,labelBgBorderRadius:m,style:y,markerEnd:b,markerStart:_,interactionWidth:S})})}const R6=Gw({isInternal:!1}),Vw=Gw({isInternal:!0});R6.displayName="StraightEdge";Vw.displayName="StraightEdgeInternal";function Yw(e){return ae.memo(({id:n,sourceX:i,sourceY:a,targetX:o,targetY:s,sourcePosition:c=ze.Bottom,targetPosition:f=ze.Top,label:h,labelStyle:d,labelShowBg:p,labelBgStyle:m,labelBgPadding:y,labelBgBorderRadius:b,style:_,markerEnd:S,markerStart:N,pathOptions:E,interactionWidth:k})=>{const[w,O,B]=rw({sourceX:i,sourceY:a,sourcePosition:c,targetX:o,targetY:s,targetPosition:f,curvature:E==null?void 0:E.curvature}),R=e.isInternal?void 0:n;return v.jsx(Lu,{id:R,path:w,labelX:O,labelY:B,label:h,labelStyle:d,labelShowBg:p,labelBgStyle:m,labelBgPadding:y,labelBgBorderRadius:b,style:_,markerEnd:S,markerStart:N,interactionWidth:k})})}const D6=Yw({isInternal:!1}),Xw=Yw({isInternal:!0});D6.displayName="BezierEdge";Xw.displayName="BezierEdgeInternal";const s_={default:Xw,straight:Vw,step:Fw,smoothstep:qw,simplebezier:Uw},c_={sourceX:null,sourceY:null,targetX:null,targetY:null,sourcePosition:null,targetPosition:null,zIndex:void 0},L6=(e,n,i)=>i===ze.Left?e-n:i===ze.Right?e+n:e,z6=(e,n,i)=>i===ze.Top?e-n:i===ze.Bottom?e+n:e,u_="react-flow__edgeupdater";function f_({position:e,centerX:n,centerY:i,radius:a=10,onMouseDown:o,onMouseEnter:s,onMouseOut:c,type:f}){return v.jsx("circle",{onMouseDown:o,onMouseEnter:s,onMouseOut:c,className:on([u_,`${u_}-${f}`]),cx:L6(n,a,e),cy:z6(i,a,e),r:a,stroke:"transparent",fill:"transparent"})}function I6({isReconnectable:e,reconnectRadius:n,edge:i,sourceX:a,sourceY:o,targetX:s,targetY:c,sourcePosition:f,targetPosition:h,onReconnect:d,onReconnectStart:p,onReconnectEnd:m,setReconnecting:y,setUpdateHover:b}){const _=zt(),S=(O,B)=>{if(O.button!==0)return;const{autoPanOnConnect:R,domNode:H,connectionMode:I,connectionRadius:K,lib:L,onConnectStart:q,cancelConnection:X,nodeLookup:Y,rfId:A,panBy:$,updateConnection:M}=_.getState(),j=B.type==="target",V=(z,G)=>{y(!1),m==null||m(z,i,B.type,G)},Z=z=>d==null?void 0:d(i,z),C=(z,G)=>{y(!0),p==null||p(O,i,B.type),q==null||q(z,G)};Ip.onPointerDown(O.nativeEvent,{autoPanOnConnect:R,connectionMode:I,connectionRadius:K,domNode:H,handleId:B.id,nodeId:B.nodeId,nodeLookup:Y,isTarget:j,edgeUpdaterType:B.type,lib:L,flowId:A,cancelConnection:X,panBy:$,isValidConnection:(...z)=>{var G,D;return((D=(G=_.getState()).isValidConnection)==null?void 0:D.call(G,...z))??!0},onConnect:Z,onConnectStart:C,onConnectEnd:(...z)=>{var G,D;return(D=(G=_.getState()).onConnectEnd)==null?void 0:D.call(G,...z)},onReconnectEnd:V,updateConnection:M,getTransform:()=>_.getState().transform,getFromHandle:()=>_.getState().connection.fromHandle,dragThreshold:_.getState().connectionDragThreshold,handleDomNode:O.currentTarget})},N=O=>S(O,{nodeId:i.target,id:i.targetHandle??null,type:"target"}),E=O=>S(O,{nodeId:i.source,id:i.sourceHandle??null,type:"source"}),k=()=>b(!0),w=()=>b(!1);return v.jsxs(v.Fragment,{children:[(e===!0||e==="source")&&v.jsx(f_,{position:f,centerX:a,centerY:o,radius:n,onMouseDown:N,onMouseEnter:k,onMouseOut:w,type:"source"}),(e===!0||e==="target")&&v.jsx(f_,{position:h,centerX:s,centerY:c,radius:n,onMouseDown:E,onMouseEnter:k,onMouseOut:w,type:"target"})]})}function j6({id:e,edgesFocusable:n,edgesReconnectable:i,elementsSelectable:a,onClick:o,onDoubleClick:s,onContextMenu:c,onMouseEnter:f,onMouseMove:h,onMouseLeave:d,reconnectRadius:p,onReconnect:m,onReconnectStart:y,onReconnectEnd:b,rfId:_,edgeTypes:S,noPanClassName:N,onError:E,disableKeyboardA11y:k}){let w=ft(be=>be.edgeLookup.get(e));const O=ft(be=>be.defaultEdgeOptions);w=O?{...O,...w}:w;let B=w.type||"default",R=(S==null?void 0:S[B])||s_[B];R===void 0&&(E==null||E("011",Mi.error011(B)),B="default",R=(S==null?void 0:S.default)||s_.default);const H=!!(w.focusable||n&&typeof w.focusable>"u"),I=typeof m<"u"&&(w.reconnectable||i&&typeof w.reconnectable>"u"),K=!!(w.selectable||a&&typeof w.selectable>"u"),L=ae.useRef(null),[q,X]=ae.useState(!1),[Y,A]=ae.useState(!1),$=zt(),{zIndex:M=w.zIndex,sourceX:j,sourceY:V,targetX:Z,targetY:C,sourcePosition:z,targetPosition:G}=ft(ae.useCallback(be=>{const Ee=be.nodeLookup.get(w.source),Se=be.nodeLookup.get(w.target);if(!Ee||!Se)return c_;const De=NI({id:e,sourceNode:Ee,targetNode:Se,sourceHandle:w.sourceHandle||null,targetHandle:w.targetHandle||null,connectionMode:be.connectionMode,onError:E}),He=bI({selected:w.selected,zIndex:w.zIndex,sourceNode:Ee,targetNode:Se,elevateOnSelect:be.elevateEdgesOnSelect,zIndexMode:be.zIndexMode});return{...De||c_,zIndex:He}},[w.source,w.target,w.sourceHandle,w.targetHandle,w.selected,w.zIndex]),qt),D=ae.useMemo(()=>w.markerStart?`url('#${Lp(w.markerStart,_)}')`:void 0,[w.markerStart,_]),F=ae.useMemo(()=>w.markerEnd?`url('#${Lp(w.markerEnd,_)}')`:void 0,[w.markerEnd,_]);if(w.hidden||j===null||V===null||Z===null||C===null)return null;const U=be=>{var He;const{addSelectedEdges:Ee,unselectNodesAndEdges:Se,multiSelectionActive:De}=$.getState();K&&($.setState({nodesSelectionActive:!1}),w.selected&&De?(Se({nodes:[],edges:[w]}),(He=L.current)==null||He.blur()):Ee([e])),o&&o(be,w)},Q=s?be=>{s(be,{...w})}:void 0,J=c?be=>{c(be,{...w})}:void 0,W=f?be=>{f(be,{...w})}:void 0,ee=h?be=>{h(be,{...w})}:void 0,ce=d?be=>{d(be,{...w})}:void 0,de=be=>{var Ee;if(!k&&qE.includes(be.key)&&K){const{unselectNodesAndEdges:Se,addSelectedEdges:De}=$.getState();be.key==="Escape"?((Ee=L.current)==null||Ee.blur(),Se({edges:[w]})):De([e])}};return v.jsx("svg",{style:{zIndex:M},children:v.jsxs("g",{className:on(["react-flow__edge",`react-flow__edge-${B}`,w.className,N,{selected:w.selected,animated:w.animated,inactive:!K&&!o,updating:q,selectable:K}]),onClick:U,onDoubleClick:Q,onContextMenu:J,onMouseEnter:W,onMouseMove:ee,onMouseLeave:ce,onKeyDown:H?de:void 0,tabIndex:H?0:void 0,role:w.ariaRole??(H?"group":"img"),"aria-roledescription":"edge","data-id":e,"data-testid":`rf__edge-${e}`,"aria-label":w.ariaLabel===null?void 0:w.ariaLabel||`Edge from ${w.source} to ${w.target}`,"aria-describedby":H?`${_w}-${_}`:void 0,ref:L,...w.domAttributes,children:[!Y&&v.jsx(R,{id:e,source:w.source,target:w.target,type:w.type,selected:w.selected,animated:w.animated,selectable:K,deletable:w.deletable??!0,label:w.label,labelStyle:w.labelStyle,labelShowBg:w.labelShowBg,labelBgStyle:w.labelBgStyle,labelBgPadding:w.labelBgPadding,labelBgBorderRadius:w.labelBgBorderRadius,sourceX:j,sourceY:V,targetX:Z,targetY:C,sourcePosition:z,targetPosition:G,data:w.data,style:w.style,sourceHandleId:w.sourceHandle,targetHandleId:w.targetHandle,markerStart:D,markerEnd:F,pathOptions:"pathOptions"in w?w.pathOptions:void 0,interactionWidth:w.interactionWidth}),I&&v.jsx(I6,{edge:w,isReconnectable:I,reconnectRadius:p,onReconnect:m,onReconnectStart:y,onReconnectEnd:b,sourceX:j,sourceY:V,targetX:Z,targetY:C,sourcePosition:z,targetPosition:G,setUpdateHover:X,setReconnecting:A})]})})}var B6=ae.memo(j6);const U6=e=>({edgesFocusable:e.edgesFocusable,edgesReconnectable:e.edgesReconnectable,elementsSelectable:e.elementsSelectable,connectionMode:e.connectionMode,onError:e.onError});function Kw({defaultMarkerColor:e,onlyRenderVisibleElements:n,rfId:i,edgeTypes:a,noPanClassName:o,onReconnect:s,onEdgeContextMenu:c,onEdgeMouseEnter:f,onEdgeMouseMove:h,onEdgeMouseLeave:d,onEdgeClick:p,reconnectRadius:m,onEdgeDoubleClick:y,onReconnectStart:b,onReconnectEnd:_,disableKeyboardA11y:S}){const{edgesFocusable:N,edgesReconnectable:E,elementsSelectable:k,onError:w}=ft(U6,qt),O=w6(n);return v.jsxs("div",{className:"react-flow__edges",children:[v.jsx(A6,{defaultColor:e,rfId:i}),O.map(B=>v.jsx(B6,{id:B,edgesFocusable:N,edgesReconnectable:E,elementsSelectable:k,noPanClassName:o,onReconnect:s,onContextMenu:c,onMouseEnter:f,onMouseMove:h,onMouseLeave:d,onClick:p,reconnectRadius:m,onDoubleClick:y,onReconnectStart:b,onReconnectEnd:_,rfId:i,onError:w,edgeTypes:a,disableKeyboardA11y:S},B))]})}Kw.displayName="EdgeRenderer";const H6=ae.memo(Kw),d_=e=>`translate(${e[0]}px,${e[1]}px) scale(${e[2]})`;function $6({children:e}){const n=zt(),i=ae.useRef(null),[a]=ae.useState(()=>n.getState().transform);return Tw(()=>{let o=null;const s=()=>{const c=n.getState().transform;o&&c[0]===o[0]&&c[1]===o[1]&&c[2]===o[2]||(o=c,i.current&&(i.current.style.transform=d_(c)))};return s(),n.subscribe(s)},[n]),v.jsx("div",{ref:i,className:"react-flow__viewport xyflow__viewport react-flow__container",style:{transform:d_(a)},children:e})}function q6(e){const n=gs(),i=ae.useRef(!1);ae.useEffect(()=>{!i.current&&n.viewportInitialized&&e&&(setTimeout(()=>e(n),1),i.current=!0)},[e,n.viewportInitialized])}const P6=e=>{var n;return(n=e.panZoom)==null?void 0:n.syncViewport};function F6(e){const n=ft(P6),i=zt();return ae.useEffect(()=>{e&&(n==null||n(e),i.setState({transform:[e.x,e.y,e.zoom]}))},[e,n]),null}function G6(e){return e.connection.inProgress?{...e.connection,to:ms(e.connection.to,e.transform)}:{...e.connection}}function V6(e){return G6}function Y6(e){const n=V6();return ft(n,qt)}const X6=e=>({nodesConnectable:e.nodesConnectable,isValid:e.connection.isValid,inProgress:e.connection.inProgress,width:e.width,height:e.height});function K6({containerStyle:e,style:n,type:i,component:a}){const{nodesConnectable:o,width:s,height:c,isValid:f,inProgress:h}=ft(X6,qt);return!(s&&o&&h)?null:v.jsx("svg",{style:e,width:s,height:c,className:"react-flow__connectionline react-flow__container",children:v.jsx("g",{className:on(["react-flow__connection",GE(f)]),children:v.jsx(Zw,{style:n,type:i,CustomComponent:a,isValid:f})})})}const Zw=({style:e,type:n=na.Bezier,CustomComponent:i,isValid:a})=>{const{inProgress:o,from:s,fromNode:c,fromHandle:f,fromPosition:h,to:d,toNode:p,toHandle:m,toPosition:y,pointer:b}=Y6();if(!o)return;if(i)return v.jsx(i,{connectionLineType:n,connectionLineStyle:e,fromNode:c,fromHandle:f,fromX:s.x,fromY:s.y,toX:d.x,toY:d.y,fromPosition:h,toPosition:y,connectionStatus:GE(a),toNode:p,toHandle:m,pointer:b});let _="";const S={sourceX:s.x,sourceY:s.y,sourcePosition:h,targetX:d.x,targetY:d.y,targetPosition:y};switch(n){case na.Bezier:[_]=rw(S);break;case na.SimpleBezier:[_]=jw(S);break;case na.Step:[_]=Dp({...S,borderRadius:0});break;case na.SmoothStep:[_]=Dp(S);break;default:[_]=lw(S)}return v.jsx("path",{d:_,fill:"none",className:"react-flow__connection-path",style:e})};Zw.displayName="ConnectionLine";const Z6={};function h_(e=Z6){ae.useRef(e),zt(),ae.useEffect(()=>{},[e])}function Q6(){zt(),ae.useRef(!1),ae.useEffect(()=>{},[])}function Qw({nodeTypes:e,edgeTypes:n,onInit:i,onNodeClick:a,onEdgeClick:o,onNodeDoubleClick:s,onEdgeDoubleClick:c,onNodeMouseEnter:f,onNodeMouseMove:h,onNodeMouseLeave:d,onNodeContextMenu:p,onSelectionContextMenu:m,onSelectionStart:y,onSelectionEnd:b,connectionLineType:_,connectionLineStyle:S,connectionLineComponent:N,connectionLineContainerStyle:E,selectionKeyCode:k,selectionOnDrag:w,selectionMode:O,multiSelectionKeyCode:B,panActivationKeyCode:R,zoomActivationKeyCode:H,deleteKeyCode:I,onlyRenderVisibleElements:K,elementsSelectable:L,defaultViewport:q,translateExtent:X,minZoom:Y,maxZoom:A,preventScrolling:$,defaultMarkerColor:M,zoomOnScroll:j,zoomOnPinch:V,panOnScroll:Z,panOnScrollSpeed:C,panOnScrollMode:z,zoomOnDoubleClick:G,panOnDrag:D,autoPanOnSelection:F,onPaneClick:U,onPaneMouseEnter:Q,onPaneMouseMove:J,onPaneMouseLeave:W,onPaneScroll:ee,onPaneContextMenu:ce,paneClickDistance:de,nodeClickDistance:be,onEdgeContextMenu:Ee,onEdgeMouseEnter:Se,onEdgeMouseMove:De,onEdgeMouseLeave:He,reconnectRadius:lt,onReconnect:Rt,onReconnectStart:Yt,onReconnectEnd:Pt,noDragClassName:Xt,noWheelClassName:Vn,noPanClassName:En,disableKeyboardA11y:ct,nodeExtent:jt,rfId:ue,viewport:ye,onViewportChange:Me,nodesDraggable:Pe}){return h_(e),h_(n),Q6(),q6(i),F6(ye),v.jsx(h6,{onPaneClick:U,onPaneMouseEnter:Q,onPaneMouseMove:J,onPaneMouseLeave:W,onPaneContextMenu:ce,onPaneScroll:ee,paneClickDistance:de,deleteKeyCode:I,selectionKeyCode:k,selectionOnDrag:w,selectionMode:O,onSelectionStart:y,onSelectionEnd:b,multiSelectionKeyCode:B,panActivationKeyCode:R,zoomActivationKeyCode:H,elementsSelectable:L,zoomOnScroll:j,zoomOnPinch:V,zoomOnDoubleClick:G,panOnScroll:Z,panOnScrollSpeed:C,panOnScrollMode:z,panOnDrag:D,autoPanOnSelection:F,defaultViewport:q,translateExtent:X,minZoom:Y,maxZoom:A,onSelectionContextMenu:m,preventScrolling:$,noDragClassName:Xt,noWheelClassName:Vn,noPanClassName:En,disableKeyboardA11y:ct,onViewportChange:Me,isControlledViewport:!!ye,children:v.jsxs($6,{children:[v.jsx(H6,{edgeTypes:n,onEdgeClick:o,onEdgeDoubleClick:c,onReconnect:Rt,onReconnectStart:Yt,onReconnectEnd:Pt,onlyRenderVisibleElements:K,onEdgeContextMenu:Ee,onEdgeMouseEnter:Se,onEdgeMouseMove:De,onEdgeMouseLeave:He,reconnectRadius:lt,defaultMarkerColor:M,noPanClassName:En,disableKeyboardA11y:ct,rfId:ue}),v.jsx(K6,{style:S,type:_,component:N,containerStyle:E}),v.jsx("div",{className:"react-flow__edgelabel-renderer"}),v.jsx(E6,{nodeTypes:e,onNodeClick:a,onNodeDoubleClick:s,onNodeMouseEnter:f,onNodeMouseMove:h,onNodeMouseLeave:d,onNodeContextMenu:p,nodeClickDistance:be,onlyRenderVisibleElements:K,noPanClassName:En,noDragClassName:Xt,disableKeyboardA11y:ct,nodeExtent:jt,rfId:ue,nodesDraggable:Pe}),v.jsx("div",{className:"react-flow__viewport-portal"})]})})}Qw.displayName="GraphView";const W6=ae.memo(Qw),J6=QE(),p_=({nodes:e,edges:n,defaultNodes:i,defaultEdges:a,width:o,height:s,fitView:c,fitViewOptions:f,minZoom:h=.5,maxZoom:d=2,nodeOrigin:p,nodeExtent:m,zIndexMode:y="basic"}={})=>{const b=new Map,_=new Map,S=new Map,N=new Map,E=a??n??[],k=i??e??[],w=p??[0,0],O=m??es;cw(S,N,E);const{nodesInitialized:B}=zp(k,b,_,{nodeOrigin:w,nodeExtent:O,zIndexMode:y});let R=[0,0,1];if(c&&o&&s){const H=hs(b,{filter:q=>!!((q.width||q.initialWidth)&&(q.height||q.initialHeight))}),{x:I,y:K,zoom:L}=Nm(H,o,s,h,d,(f==null?void 0:f.padding)??.1);R=[I,K,L]}return{rfId:"1",width:o??0,height:s??0,transform:R,nodes:k,nodesInitialized:B,nodeLookup:b,parentLookup:_,edges:E,edgeLookup:N,connectionLookup:S,onNodesChange:null,onEdgesChange:null,hasDefaultNodes:i!==void 0,hasDefaultEdges:a!==void 0,panZoom:null,minZoom:h,maxZoom:d,translateExtent:es,nodeExtent:O,nodesSelectionActive:!1,userSelectionActive:!1,userSelectionRect:null,connectionMode:Ll.Strict,domNode:null,paneDragging:!1,noPanClassName:"nopan",nodeOrigin:w,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:c??!1,fitViewOptions:f,fitViewResolver:null,connection:{...FE},connectionClickStartHandle:null,connectOnClick:!0,ariaLiveMessage:"",autoPanOnConnect:!0,autoPanOnNodeDrag:!0,autoPanOnNodeFocus:!0,autoPanSpeed:15,connectionRadius:20,onError:J6,isValidConnection:void 0,onSelectionChangeHandlers:[],lib:"react",debug:!1,ariaLabelConfig:PE,zIndexMode:y,onNodesChangeMiddlewareMap:new Map,onEdgesChangeMiddlewareMap:new Map}},eB=({nodes:e,edges:n,defaultNodes:i,defaultEdges:a,width:o,height:s,fitView:c,fitViewOptions:f,minZoom:h,maxZoom:d,nodeOrigin:p,nodeExtent:m,zIndexMode:y})=>pj((b,_)=>{async function S(){const{nodeLookup:N,panZoom:E,fitViewOptions:k,fitViewResolver:w,width:O,height:B,minZoom:R,maxZoom:H}=_();E&&(await uI({nodes:N,width:O,height:B,panZoom:E,minZoom:R,maxZoom:H},k),w==null||w.resolve(!0),b({fitViewResolver:null}))}return{...p_({nodes:e,edges:n,width:o,height:s,fitView:c,fitViewOptions:f,minZoom:h,maxZoom:d,nodeOrigin:p,nodeExtent:m,defaultNodes:i,defaultEdges:a,zIndexMode:y}),setNodes:N=>{const{nodeLookup:E,parentLookup:k,nodeOrigin:w,elevateNodesOnSelect:O,fitViewQueued:B,zIndexMode:R,nodesSelectionActive:H}=_(),{nodesInitialized:I,hasSelectedNodes:K}=zp(N,E,k,{nodeOrigin:w,nodeExtent:m,elevateNodesOnSelect:O,checkEquality:!0,zIndexMode:R}),L=H&&K;B&&I?(S(),b({nodes:N,nodesInitialized:I,fitViewQueued:!1,fitViewOptions:void 0,nodesSelectionActive:L})):b({nodes:N,nodesInitialized:I,nodesSelectionActive:L})},setEdges:N=>{const{connectionLookup:E,edgeLookup:k}=_();cw(E,k,N),b({edges:N})},setDefaultNodesAndEdges:(N,E)=>{if(N){const{setNodes:k}=_();k(N),b({hasDefaultNodes:!0})}if(E){const{setEdges:k}=_();k(E),b({hasDefaultEdges:!0})}},updateNodeInternals:N=>{const{triggerNodeChanges:E,nodeLookup:k,parentLookup:w,domNode:O,nodeOrigin:B,nodeExtent:R,debug:H,fitViewQueued:I,zIndexMode:K}=_(),{changes:L,updatedInternals:q}=DI(N,k,w,O,B,R,K);q&&(CI(k,w,{nodeOrigin:B,nodeExtent:R,zIndexMode:K}),I?(S(),b({fitViewQueued:!1,fitViewOptions:void 0})):b({}),(L==null?void 0:L.length)>0&&(H&&console.log("React Flow: trigger node changes",L),E==null||E(L)))},updateNodePositions:(N,E=!1)=>{const k=[];let w=[];const{nodeLookup:O,triggerNodeChanges:B,connection:R,updateConnection:H,onNodesChangeMiddlewareMap:I}=_();for(const[K,L]of N){const q=O.get(K),X=!!(q!=null&&q.expandParent&&(q!=null&&q.parentId)&&(L!=null&&L.position)),Y={id:K,type:"position",position:X?{x:Math.max(0,L.position.x),y:Math.max(0,L.position.y)}:L.position,dragging:E};if(q&&R.inProgress&&R.fromNode.id===q.id){const A=Ua(q,R.fromHandle,ze.Left,!0);H({...R,from:A})}X&&q.parentId&&k.push({id:K,parentId:q.parentId,rect:{...L.internals.positionAbsolute,width:L.measured.width??0,height:L.measured.height??0}}),w.push(Y)}if(k.length>0){const{parentLookup:K,nodeOrigin:L}=_(),q=Om(k,O,K,L);w.push(...q)}for(const K of I.values())w=K(w);B(w)},triggerNodeChanges:N=>{const{onNodesChange:E,setNodes:k,nodes:w,hasDefaultNodes:O,debug:B}=_();if(N!=null&&N.length){if(O){const R=Sw(N,w);k(R)}B&&console.log("React Flow: trigger node changes",N),E==null||E(N)}},triggerEdgeChanges:N=>{const{onEdgesChange:E,setEdges:k,edges:w,hasDefaultEdges:O,debug:B}=_();if(N!=null&&N.length){if(O){const R=Nw(N,w);k(R)}B&&console.log("React Flow: trigger edge changes",N),E==null||E(N)}},addSelectedNodes:N=>{const{multiSelectionActive:E,edgeLookup:k,nodeLookup:w,triggerNodeChanges:O,triggerEdgeChanges:B}=_();if(E){const R=N.map(H=>Ca(H,!0));O(R);return}O(Tl(w,new Set([...N]),!0)),B(Tl(k))},addSelectedEdges:N=>{const{multiSelectionActive:E,edgeLookup:k,nodeLookup:w,triggerNodeChanges:O,triggerEdgeChanges:B}=_();if(E){const R=N.map(H=>Ca(H,!0));B(R);return}B(Tl(k,new Set([...N]))),O(Tl(w,new Set,!0))},unselectNodesAndEdges:({nodes:N,edges:E}={})=>{const{edges:k,nodes:w,nodeLookup:O,triggerNodeChanges:B,triggerEdgeChanges:R}=_(),H=N||w,I=E||k,K=[];for(const q of H){if(!q.selected)continue;const X=O.get(q.id);X&&(X.selected=!1),K.push(Ca(q.id,!1))}const L=[];for(const q of I)q.selected&&L.push(Ca(q.id,!1));B(K),R(L)},setMinZoom:N=>{const{panZoom:E,maxZoom:k}=_();E==null||E.setScaleExtent([N,k]),b({minZoom:N})},setMaxZoom:N=>{const{panZoom:E,minZoom:k}=_();E==null||E.setScaleExtent([k,N]),b({maxZoom:N})},setTranslateExtent:N=>{var E;(E=_().panZoom)==null||E.setTranslateExtent(N),b({translateExtent:N})},resetSelectedElements:()=>{const{edges:N,nodes:E,triggerNodeChanges:k,triggerEdgeChanges:w,elementsSelectable:O}=_();if(!O)return;const B=E.reduce((H,I)=>I.selected?[...H,Ca(I.id,!1)]:H,[]),R=N.reduce((H,I)=>I.selected?[...H,Ca(I.id,!1)]:H,[]);k(B),w(R)},setNodeExtent:N=>{const{nodes:E,nodeLookup:k,parentLookup:w,nodeOrigin:O,elevateNodesOnSelect:B,nodeExtent:R,zIndexMode:H}=_();N[0][0]===R[0][0]&&N[0][1]===R[0][1]&&N[1][0]===R[1][0]&&N[1][1]===R[1][1]||(zp(E,k,w,{nodeOrigin:O,nodeExtent:N,elevateNodesOnSelect:B,checkEquality:!1,zIndexMode:H}),b({nodeExtent:N}))},panBy:N=>{const{transform:E,width:k,height:w,panZoom:O,translateExtent:B}=_();return LI({delta:N,panZoom:O,transform:E,translateExtent:B,width:k,height:w})},setCenter:async(N,E,k)=>{const{width:w,height:O,maxZoom:B,panZoom:R}=_();if(!R)return!1;const H=typeof(k==null?void 0:k.zoom)<"u"?k.zoom:B;return await R.setViewport({x:w/2-N*H,y:O/2-E*H,zoom:H},{duration:k==null?void 0:k.duration,ease:k==null?void 0:k.ease,interpolate:k==null?void 0:k.interpolate}),!0},cancelConnection:()=>{b({connection:{...FE}})},updateConnection:N=>{b({connection:N})},reset:()=>b({...p_()})}},Object.is);function tB({initialNodes:e,initialEdges:n,defaultNodes:i,defaultEdges:a,initialWidth:o,initialHeight:s,initialMinZoom:c,initialMaxZoom:f,initialFitViewOptions:h,fitView:d,nodeOrigin:p,nodeExtent:m,zIndexMode:y,children:b}){const[_]=ae.useState(()=>eB({nodes:e,edges:n,defaultNodes:i,defaultEdges:a,width:o,height:s,fitView:d,minZoom:c,maxZoom:f,fitViewOptions:h,nodeOrigin:p,nodeExtent:m,zIndexMode:y}));return v.jsx(mj,{value:_,children:v.jsx(Uj,{children:v.jsx(e6,{children:b})})})}function nB({children:e,nodes:n,edges:i,defaultNodes:a,defaultEdges:o,width:s,height:c,fitView:f,fitViewOptions:h,minZoom:d,maxZoom:p,nodeOrigin:m,nodeExtent:y,zIndexMode:b}){return ae.useContext(Ou)?v.jsx(v.Fragment,{children:e}):v.jsx(tB,{initialNodes:n,initialEdges:i,defaultNodes:a,defaultEdges:o,initialWidth:s,initialHeight:c,fitView:f,initialFitViewOptions:h,initialMinZoom:d,initialMaxZoom:p,nodeOrigin:m,nodeExtent:y,zIndexMode:b,children:e})}const iB={width:"100%",height:"100%",overflow:"hidden",position:"relative",zIndex:0};function rB({nodes:e,edges:n,defaultNodes:i,defaultEdges:a,className:o,nodeTypes:s,edgeTypes:c,onNodeClick:f,onEdgeClick:h,onInit:d,onMove:p,onMoveStart:m,onMoveEnd:y,onConnect:b,onConnectStart:_,onConnectEnd:S,onClickConnectStart:N,onClickConnectEnd:E,onNodeMouseEnter:k,onNodeMouseMove:w,onNodeMouseLeave:O,onNodeContextMenu:B,onNodeDoubleClick:R,onNodeDragStart:H,onNodeDrag:I,onNodeDragStop:K,onNodesDelete:L,onEdgesDelete:q,onDelete:X,onSelectionChange:Y,onSelectionDragStart:A,onSelectionDrag:$,onSelectionDragStop:M,onSelectionContextMenu:j,onSelectionStart:V,onSelectionEnd:Z,onBeforeDelete:C,connectionMode:z,connectionLineType:G=na.Bezier,connectionLineStyle:D,connectionLineComponent:F,connectionLineContainerStyle:U,deleteKeyCode:Q="Backspace",selectionKeyCode:J="Shift",selectionOnDrag:W=!1,selectionMode:ee=ts.Full,panActivationKeyCode:ce="Space",multiSelectionKeyCode:de=is()?"Meta":"Control",zoomActivationKeyCode:be=is()?"Meta":"Control",snapToGrid:Ee,snapGrid:Se,onlyRenderVisibleElements:De=!1,selectNodesOnDrag:He,nodesDraggable:lt,autoPanOnNodeFocus:Rt,nodesConnectable:Yt,nodesFocusable:Pt,nodeOrigin:Xt=Ew,edgesFocusable:Vn,edgesReconnectable:En,elementsSelectable:ct=!0,defaultViewport:jt=Aj,minZoom:ue=.5,maxZoom:ye=2,translateExtent:Me=es,preventScrolling:Pe=!0,nodeExtent:Ze,defaultMarkerColor:sn="#b1b1b7",zoomOnScroll:wn=!0,zoomOnPinch:Kt=!0,panOnScroll:Ct=!1,panOnScrollSpeed:Wt=.5,panOnScrollMode:ut=Da.Free,zoomOnDoubleClick:zn=!0,panOnDrag:cn=!0,onPaneClick:yr,onPaneMouseEnter:nt,onPaneMouseMove:Yn,onPaneMouseLeave:Cn,onPaneScroll:hn,onPaneContextMenu:ne,paneClickDistance:pe=1,nodeClickDistance:we=0,children:qe,onReconnect:Nt,onReconnectStart:gt,onReconnectEnd:Ce,onEdgeContextMenu:Ne,onEdgeDoubleClick:Be,onEdgeMouseEnter:Bt,onEdgeMouseMove:Mt,onEdgeMouseLeave:gi,reconnectRadius:xr=10,onNodesChange:vr,onEdgesChange:ai,noDragClassName:Ut="nodrag",noWheelClassName:pn="nowheel",noPanClassName:bi="nopan",fitView:_r,fitViewOptions:la,connectOnClick:Er,attributionPosition:qa,proOptions:Yi,defaultEdgeOptions:oa,elevateNodesOnSelect:bn=!0,elevateEdgesOnSelect:yi=!1,disableKeyboardA11y:xi=!1,autoPanOnConnect:Di,autoPanOnNodeDrag:Ft,autoPanOnSelection:Pa=!0,autoPanSpeed:Xi,connectionRadius:vi,isValidConnection:xe,onError:Le,style:Qe,id:dt,nodeDragThreshold:Ht,connectionDragThreshold:mn,viewport:Mn,onViewportChange:Sn,width:_t,height:On,colorMode:Fa="light",debug:wr,onScroll:Li,ariaLabelConfig:Sr,zIndexMode:Ga="basic",...Nn},sa){const _i=dt||"1",Nr=Rj(Fa),un=ae.useCallback(ca=>{ca.currentTarget.scrollTo({top:0,left:0,behavior:"instant"}),Li==null||Li(ca)},[Li]);return v.jsx("div",{"data-testid":"rf__wrapper",...Nn,onScroll:un,style:{...Qe,...iB},ref:sa,className:on(["react-flow",o,Nr]),id:dt,role:"application",children:v.jsxs(nB,{nodes:e,edges:n,width:_t,height:On,fitView:_r,fitViewOptions:la,minZoom:ue,maxZoom:ye,nodeOrigin:Xt,nodeExtent:Ze,zIndexMode:Ga,children:[v.jsx(Oj,{nodes:e,edges:n,defaultNodes:i,defaultEdges:a,onConnect:b,onConnectStart:_,onConnectEnd:S,onClickConnectStart:N,onClickConnectEnd:E,nodesDraggable:lt,autoPanOnNodeFocus:Rt,nodesConnectable:Yt,nodesFocusable:Pt,edgesFocusable:Vn,edgesReconnectable:En,elementsSelectable:ct,elevateNodesOnSelect:bn,elevateEdgesOnSelect:yi,minZoom:ue,maxZoom:ye,nodeExtent:Ze,onNodesChange:vr,onEdgesChange:ai,snapToGrid:Ee,snapGrid:Se,connectionMode:z,translateExtent:Me,connectOnClick:Er,defaultEdgeOptions:oa,fitView:_r,fitViewOptions:la,onNodesDelete:L,onEdgesDelete:q,onDelete:X,onNodeDragStart:H,onNodeDrag:I,onNodeDragStop:K,onSelectionDrag:$,onSelectionDragStart:A,onSelectionDragStop:M,onMove:p,onMoveStart:m,onMoveEnd:y,noPanClassName:bi,nodeOrigin:Xt,rfId:_i,autoPanOnConnect:Di,autoPanOnNodeDrag:Ft,autoPanSpeed:Xi,onError:Le,connectionRadius:vi,isValidConnection:xe,selectNodesOnDrag:He,nodeDragThreshold:Ht,connectionDragThreshold:mn,onBeforeDelete:C,debug:wr,ariaLabelConfig:Sr,zIndexMode:Ga}),v.jsx(W6,{onInit:d,onNodeClick:f,onEdgeClick:h,onNodeMouseEnter:k,onNodeMouseMove:w,onNodeMouseLeave:O,onNodeContextMenu:B,onNodeDoubleClick:R,nodeTypes:s,edgeTypes:c,connectionLineType:G,connectionLineStyle:D,connectionLineComponent:F,connectionLineContainerStyle:U,selectionKeyCode:J,selectionOnDrag:W,selectionMode:ee,deleteKeyCode:Q,multiSelectionKeyCode:de,panActivationKeyCode:ce,zoomActivationKeyCode:be,onlyRenderVisibleElements:De,defaultViewport:jt,translateExtent:Me,minZoom:ue,maxZoom:ye,preventScrolling:Pe,zoomOnScroll:wn,zoomOnPinch:Kt,zoomOnDoubleClick:zn,panOnScroll:Ct,panOnScrollSpeed:Wt,panOnScrollMode:ut,panOnDrag:cn,autoPanOnSelection:Pa,onPaneClick:yr,onPaneMouseEnter:nt,onPaneMouseMove:Yn,onPaneMouseLeave:Cn,onPaneScroll:hn,onPaneContextMenu:ne,paneClickDistance:pe,nodeClickDistance:we,onSelectionContextMenu:j,onSelectionStart:V,onSelectionEnd:Z,onReconnect:Nt,onReconnectStart:gt,onReconnectEnd:Ce,onEdgeContextMenu:Ne,onEdgeDoubleClick:Be,onEdgeMouseEnter:Bt,onEdgeMouseMove:Mt,onEdgeMouseLeave:gi,reconnectRadius:xr,defaultMarkerColor:sn,noDragClassName:Ut,noWheelClassName:pn,noPanClassName:bi,rfId:_i,disableKeyboardA11y:xi,nodeExtent:Ze,viewport:Mn,onViewportChange:Sn,nodesDraggable:lt}),v.jsx(Tj,{onSelectionChange:Y}),qe,v.jsx(Ej,{proOptions:Yi,position:qa}),v.jsx(_j,{rfId:_i,disableKeyboardA11y:xi})]})})}var aB=kw(rB);function lB(e){const[n,i]=ae.useState(e),a=ae.useCallback(o=>i(s=>Sw(o,s)),[]);return[n,i,a]}function oB(e){const[n,i]=ae.useState(e),a=ae.useCallback(o=>i(s=>Nw(o,s)),[]);return[n,i,a]}function sB({dimensions:e,lineWidth:n,variant:i,className:a}){return v.jsx("path",{strokeWidth:n,d:`M${e[0]/2} 0 V${e[1]} M0 ${e[1]/2} H${e[0]}`,className:on(["react-flow__background-pattern",i,a])})}function cB({radius:e,className:n}){return v.jsx("circle",{cx:e,cy:e,r:e,className:on(["react-flow__background-pattern","dots",n])})}var ia;(function(e){e.Lines="lines",e.Dots="dots",e.Cross="cross"})(ia||(ia={}));const uB={[ia.Dots]:1,[ia.Lines]:1,[ia.Cross]:6},fB=e=>({transform:e.transform,patternId:`pattern-${e.rfId}`});function Ww({id:e,variant:n=ia.Dots,gap:i=20,size:a,lineWidth:o=1,offset:s=0,color:c,bgColor:f,style:h,className:d,patternClassName:p}){const m=ae.useRef(null),{transform:y,patternId:b}=ft(fB,qt),_=a||uB[n],S=n===ia.Dots,N=n===ia.Cross,E=Array.isArray(i)?i:[i,i],k=[E[0]*y[2]||1,E[1]*y[2]||1],w=_*y[2],O=Array.isArray(s)?s:[s,s],B=N?[w,w]:k,R=[O[0]*y[2]||1+B[0]/2,O[1]*y[2]||1+B[1]/2],H=`${b}${e||""}`;return v.jsxs("svg",{className:on(["react-flow__background",d]),style:{...h,...Du,"--xy-background-color-props":f,"--xy-background-pattern-color-props":c},ref:m,"data-testid":"rf__background",children:[v.jsx("pattern",{id:H,x:y[0]%k[0],y:y[1]%k[1],width:k[0],height:k[1],patternUnits:"userSpaceOnUse",patternTransform:`translate(-${R[0]},-${R[1]})`,children:S?v.jsx(cB,{radius:w/2,className:p}):v.jsx(sB,{dimensions:B,lineWidth:o,variant:n,className:p})}),v.jsx("rect",{x:"0",y:"0",width:"100%",height:"100%",fill:`url(#${H})`})]})}Ww.displayName="Background";const dB=ae.memo(Ww);function hB(){return v.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",children:v.jsx("path",{d:"M32 18.133H18.133V32h-4.266V18.133H0v-4.266h13.867V0h4.266v13.867H32z"})})}function pB(){return v.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 5",children:v.jsx("path",{d:"M0 0h32v4.2H0z"})})}function mB(){return v.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 30",children:v.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 gB(){return v.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 25 32",children:v.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 bB(){return v.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 25 32",children:v.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 Pc({children:e,className:n,...i}){return v.jsx("button",{type:"button",className:on(["react-flow__controls-button",n]),...i,children:e})}const yB=e=>({isInteractive:e.nodesDraggable||e.nodesConnectable||e.elementsSelectable,minZoomReached:e.transform[2]<=e.minZoom,maxZoomReached:e.transform[2]>=e.maxZoom,ariaLabelConfig:e.ariaLabelConfig});function Jw({style:e,showZoom:n=!0,showFitView:i=!0,showInteractive:a=!0,fitViewOptions:o,onZoomIn:s,onZoomOut:c,onFitView:f,onInteractiveChange:h,className:d,children:p,position:m="bottom-left",orientation:y="vertical","aria-label":b}){const _=zt(),{isInteractive:S,minZoomReached:N,maxZoomReached:E,ariaLabelConfig:k}=ft(yB,qt),{zoomIn:w,zoomOut:O,fitView:B}=gs(),R=()=>{w(),s==null||s()},H=()=>{O(),c==null||c()},I=()=>{B(o),f==null||f()},K=()=>{_.setState({nodesDraggable:!S,nodesConnectable:!S,elementsSelectable:!S}),h==null||h(!S)},L=y==="horizontal"?"horizontal":"vertical";return v.jsxs(Ru,{className:on(["react-flow__controls",L,d]),position:m,style:e,"data-testid":"rf__controls","aria-label":b??k["controls.ariaLabel"],children:[n&&v.jsxs(v.Fragment,{children:[v.jsx(Pc,{onClick:R,className:"react-flow__controls-zoomin",title:k["controls.zoomIn.ariaLabel"],"aria-label":k["controls.zoomIn.ariaLabel"],disabled:E,children:v.jsx(hB,{})}),v.jsx(Pc,{onClick:H,className:"react-flow__controls-zoomout",title:k["controls.zoomOut.ariaLabel"],"aria-label":k["controls.zoomOut.ariaLabel"],disabled:N,children:v.jsx(pB,{})})]}),i&&v.jsx(Pc,{className:"react-flow__controls-fitview",onClick:I,title:k["controls.fitView.ariaLabel"],"aria-label":k["controls.fitView.ariaLabel"],children:v.jsx(mB,{})}),a&&v.jsx(Pc,{className:"react-flow__controls-interactive",onClick:K,title:k["controls.interactive.ariaLabel"],"aria-label":k["controls.interactive.ariaLabel"],children:S?v.jsx(bB,{}):v.jsx(gB,{})}),p]})}Jw.displayName="Controls";const xB=ae.memo(Jw);function vB({id:e,x:n,y:i,width:a,height:o,style:s,color:c,strokeColor:f,strokeWidth:h,className:d,borderRadius:p,shapeRendering:m,selected:y,onClick:b}){const{background:_,backgroundColor:S}=s||{},N=c||_||S;return v.jsx("rect",{className:on(["react-flow__minimap-node",{selected:y},d]),x:n,y:i,rx:p,ry:p,width:a,height:o,style:{fill:N,stroke:f,strokeWidth:h},shapeRendering:m,onClick:b?E=>b(E,e):void 0})}const _B=ae.memo(vB),EB=e=>e.nodes.map(n=>n.id),rp=e=>e instanceof Function?e:()=>e;function wB({nodeStrokeColor:e,nodeColor:n,nodeClassName:i="",nodeBorderRadius:a=5,nodeStrokeWidth:o,nodeComponent:s=_B,onClick:c}){const f=ft(EB,qt),h=rp(n),d=rp(e),p=rp(i),m=typeof window>"u"||window.chrome?"crispEdges":"geometricPrecision";return v.jsx(v.Fragment,{children:f.map(y=>v.jsx(NB,{id:y,nodeColorFunc:h,nodeStrokeColorFunc:d,nodeClassNameFunc:p,nodeBorderRadius:a,nodeStrokeWidth:o,NodeComponent:s,onClick:c,shapeRendering:m},y))})}function SB({id:e,nodeColorFunc:n,nodeStrokeColorFunc:i,nodeClassNameFunc:a,nodeBorderRadius:o,nodeStrokeWidth:s,shapeRendering:c,NodeComponent:f,onClick:h}){const{node:d,x:p,y:m,width:y,height:b}=ft(_=>{const S=_.nodeLookup.get(e);if(!S)return{node:void 0,x:0,y:0,width:0,height:0};const N=S.internals.userNode,{x:E,y:k}=S.internals.positionAbsolute,{width:w,height:O}=Vi(N);return{node:N,x:E,y:k,width:w,height:O}},qt);return!d||d.hidden||!WE(d)?null:v.jsx(f,{x:p,y:m,width:y,height:b,style:d.style,selected:!!d.selected,className:a(d),color:n(d),borderRadius:o,strokeColor:i(d),strokeWidth:s,shapeRendering:c,onClick:h,id:d.id})}const NB=ae.memo(SB);var kB=ae.memo(wB);const TB=200,AB=150,CB=e=>!e.hidden,MB=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?KE(hs(e.nodeLookup,{filter:CB}),n):n,rfId:e.rfId,panZoom:e.panZoom,translateExtent:e.translateExtent,flowWidth:e.width,flowHeight:e.height,ariaLabelConfig:e.ariaLabelConfig}},m_=(e,n)=>e.x===n.x&&e.y===n.y&&e.width===n.width&&e.height===n.height,OB=(e,n)=>m_(e.viewBB,n.viewBB)&&m_(e.boundingRect,n.boundingRect)&&e.rfId===n.rfId&&e.panZoom===n.panZoom&&e.translateExtent===n.translateExtent&&e.flowWidth===n.flowWidth&&e.flowHeight===n.flowHeight&&e.ariaLabelConfig===n.ariaLabelConfig,RB="react-flow__minimap-desc";function eS({style:e,className:n,nodeStrokeColor:i,nodeColor:a,nodeClassName:o="",nodeBorderRadius:s=5,nodeStrokeWidth:c,nodeComponent:f,bgColor:h,maskColor:d,maskStrokeColor:p,maskStrokeWidth:m,position:y="bottom-right",onClick:b,onNodeClick:_,pannable:S=!1,zoomable:N=!1,ariaLabel:E,inversePan:k,zoomStep:w=1,offsetScale:O=5}){const B=zt(),R=ae.useRef(null),{boundingRect:H,viewBB:I,rfId:K,panZoom:L,translateExtent:q,flowWidth:X,flowHeight:Y,ariaLabelConfig:A}=ft(MB,OB),$=(e==null?void 0:e.width)??TB,M=(e==null?void 0:e.height)??AB,j=H.width/$,V=H.height/M,Z=Math.max(j,V),C=Z*$,z=Z*M,G=O*Z,D=H.x-(C-H.width)/2-G,F=H.y-(z-H.height)/2-G,U=C+G*2,Q=z+G*2,J=`${RB}-${K}`,W=ae.useRef(0),ee=ae.useRef();W.current=Z,ae.useEffect(()=>{if(R.current&&L)return ee.current=PI({domNode:R.current,panZoom:L,getTransform:()=>B.getState().transform,getViewScale:()=>W.current}),()=>{var Ee;(Ee=ee.current)==null||Ee.destroy()}},[L]),ae.useEffect(()=>{var Ee;(Ee=ee.current)==null||Ee.update({translateExtent:q,width:X,height:Y,inversePan:k,pannable:S,zoomStep:w,zoomable:N})},[S,N,k,w,q,X,Y]);const ce=b?Ee=>{var He;const[Se,De]=((He=ee.current)==null?void 0:He.pointer(Ee))||[0,0];b(Ee,{x:Se,y:De})}:void 0,de=_?ae.useCallback((Ee,Se)=>{const De=B.getState().nodeLookup.get(Se).internals.userNode;_(Ee,De)},[]):void 0,be=E??A["minimap.ariaLabel"];return v.jsx(Ru,{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 p=="string"?p:void 0,"--xy-minimap-mask-stroke-width-props":typeof m=="number"?m*Z:void 0,"--xy-minimap-node-background-color-props":typeof a=="string"?a:void 0,"--xy-minimap-node-stroke-color-props":typeof i=="string"?i:void 0,"--xy-minimap-node-stroke-width-props":typeof c=="number"?c:void 0},className:on(["react-flow__minimap",n]),"data-testid":"rf__minimap",children:v.jsxs("svg",{width:$,height:M,viewBox:`${D} ${F} ${U} ${Q}`,className:"react-flow__minimap-svg",role:"img","aria-labelledby":J,ref:R,onClick:ce,children:[be&&v.jsx("title",{id:J,children:be}),v.jsx(kB,{onClick:de,nodeColor:a,nodeStrokeColor:i,nodeBorderRadius:s,nodeClassName:o,nodeStrokeWidth:c,nodeComponent:f}),v.jsx("path",{className:"react-flow__minimap-mask",d:`M${D-G},${F-G}h${U+G*2}v${Q+G*2}h${-U-G*2}z + M${I.x},${I.y}h${I.width}v${I.height}h${-I.width}z`,fillRule:"evenodd",pointerEvents:"none"})]})})}eS.displayName="MiniMap";const DB=ae.memo(eS),LB=e=>n=>e?`${Math.max(1/n.transform[2],1)}`:void 0,zB={[jl.Line]:"right",[jl.Handle]:"bottom-right"};function IB({nodeId:e,position:n,variant:i=jl.Handle,className:a,style:o=void 0,children:s,color:c,minWidth:f=10,minHeight:h=10,maxWidth:d=Number.MAX_VALUE,maxHeight:p=Number.MAX_VALUE,keepAspectRatio:m=!1,resizeDirection:y,autoScale:b=!0,shouldResize:_,onResizeStart:S,onResize:N,onResizeEnd:E}){const k=Ow(),w=typeof e=="string"?e:k,O=zt(),B=ae.useRef(null),R=i===jl.Handle,H=ft(ae.useCallback(LB(R&&b),[R,b]),qt),I=ae.useRef(null),K=n??zB[i];ae.useEffect(()=>{if(!(!B.current||!w))return I.current||(I.current=nj({domNode:B.current,nodeId:w,getStoreItems:()=>{const{nodeLookup:q,transform:X,snapGrid:Y,snapToGrid:A,nodeOrigin:$,domNode:M}=O.getState();return{nodeLookup:q,transform:X,snapGrid:Y,snapToGrid:A,nodeOrigin:$,paneDomNode:M}},onChange:(q,X)=>{const{triggerNodeChanges:Y,nodeLookup:A,parentLookup:$,nodeOrigin:M}=O.getState(),j=[],V={x:q.x,y:q.y},Z=A.get(w);if(Z&&Z.expandParent&&Z.parentId){const C=Z.origin??M,z=q.width??Z.measured.width??0,G=q.height??Z.measured.height??0,D={id:Z.id,parentId:Z.parentId,rect:{width:z,height:G,...JE({x:q.x??Z.position.x,y:q.y??Z.position.y},{width:z,height:G},Z.parentId,A,C)}},F=Om([D],A,$,M);j.push(...F),V.x=q.x?Math.max(C[0]*z,q.x):void 0,V.y=q.y?Math.max(C[1]*G,q.y):void 0}if(V.x!==void 0&&V.y!==void 0){const C={id:w,type:"position",position:{...V}};j.push(C)}if(q.width!==void 0&&q.height!==void 0){const z={id:w,type:"dimensions",resizing:!0,setAttributes:y?y==="horizontal"?"width":"height":!0,dimensions:{width:q.width,height:q.height}};j.push(z)}for(const C of X){const z={...C,type:"position"};j.push(z)}Y(j)},onEnd:({width:q,height:X})=>{const Y={id:w,type:"dimensions",resizing:!1,dimensions:{width:q,height:X}};O.getState().triggerNodeChanges([Y])}})),I.current.update({controlPosition:K,boundaries:{minWidth:f,minHeight:h,maxWidth:d,maxHeight:p},keepAspectRatio:m,resizeDirection:y,onResizeStart:S,onResize:N,onResizeEnd:E,shouldResize:_}),()=>{var q;(q=I.current)==null||q.destroy()}},[K,f,h,d,p,m,S,N,E,_]);const L=K.split("-");return v.jsx("div",{className:on(["react-flow__resize-control","nodrag",...L,i,a]),ref:B,style:{...o,scale:H,...c&&{[R?"backgroundColor":"borderColor"]:c}},children:s})}ae.memo(IB);var vt=(e,n)=>()=>(n||e((n={exports:{}}).exports,n),n.exports),Oi=vt((e,n)=>{var i=Object.defineProperty,a=(Y,A,$)=>A in Y?i(Y,A,{enumerable:!0,configurable:!0,writable:!0,value:$}):Y[A]=$,o=(Y,A)=>()=>(A||Y((A={exports:{}}).exports,A),A.exports),s=(Y,A,$)=>a(Y,typeof A!="symbol"?A+"":A,$),c=o((Y,A)=>{var $="\0",M="\0",j="",V=class{constructor(F){s(this,"_isDirected",!0),s(this,"_isMultigraph",!1),s(this,"_isCompound",!1),s(this,"_label"),s(this,"_defaultNodeLabelFn",()=>{}),s(this,"_defaultEdgeLabelFn",()=>{}),s(this,"_nodes",{}),s(this,"_in",{}),s(this,"_preds",{}),s(this,"_out",{}),s(this,"_sucs",{}),s(this,"_edgeObjs",{}),s(this,"_edgeLabels",{}),s(this,"_nodeCount",0),s(this,"_edgeCount",0),s(this,"_parent"),s(this,"_children"),F&&(this._isDirected=Object.hasOwn(F,"directed")?F.directed:!0,this._isMultigraph=Object.hasOwn(F,"multigraph")?F.multigraph:!1,this._isCompound=Object.hasOwn(F,"compound")?F.compound:!1),this._isCompound&&(this._parent={},this._children={},this._children[M]={})}isDirected(){return this._isDirected}isMultigraph(){return this._isMultigraph}isCompound(){return this._isCompound}setGraph(F){return this._label=F,this}graph(){return this._label}setDefaultNodeLabel(F){return this._defaultNodeLabelFn=F,typeof F!="function"&&(this._defaultNodeLabelFn=()=>F),this}nodeCount(){return this._nodeCount}nodes(){return Object.keys(this._nodes)}sources(){var F=this;return this.nodes().filter(U=>Object.keys(F._in[U]).length===0)}sinks(){var F=this;return this.nodes().filter(U=>Object.keys(F._out[U]).length===0)}setNodes(F,U){var Q=arguments,J=this;return F.forEach(function(W){Q.length>1?J.setNode(W,U):J.setNode(W)}),this}setNode(F,U){return Object.hasOwn(this._nodes,F)?(arguments.length>1&&(this._nodes[F]=U),this):(this._nodes[F]=arguments.length>1?U:this._defaultNodeLabelFn(F),this._isCompound&&(this._parent[F]=M,this._children[F]={},this._children[M][F]=!0),this._in[F]={},this._preds[F]={},this._out[F]={},this._sucs[F]={},++this._nodeCount,this)}node(F){return this._nodes[F]}hasNode(F){return Object.hasOwn(this._nodes,F)}removeNode(F){var U=this;if(Object.hasOwn(this._nodes,F)){var Q=J=>U.removeEdge(U._edgeObjs[J]);delete this._nodes[F],this._isCompound&&(this._removeFromParentsChildList(F),delete this._parent[F],this.children(F).forEach(function(J){U.setParent(J)}),delete this._children[F]),Object.keys(this._in[F]).forEach(Q),delete this._in[F],delete this._preds[F],Object.keys(this._out[F]).forEach(Q),delete this._out[F],delete this._sucs[F],--this._nodeCount}return this}setParent(F,U){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(U===void 0)U=M;else{U+="";for(var Q=U;Q!==void 0;Q=this.parent(Q))if(Q===F)throw new Error("Setting "+U+" as parent of "+F+" would create a cycle");this.setNode(U)}return this.setNode(F),this._removeFromParentsChildList(F),this._parent[F]=U,this._children[U][F]=!0,this}_removeFromParentsChildList(F){delete this._children[this._parent[F]][F]}parent(F){if(this._isCompound){var U=this._parent[F];if(U!==M)return U}}children(F=M){if(this._isCompound){var U=this._children[F];if(U)return Object.keys(U)}else{if(F===M)return this.nodes();if(this.hasNode(F))return[]}}predecessors(F){var U=this._preds[F];if(U)return Object.keys(U)}successors(F){var U=this._sucs[F];if(U)return Object.keys(U)}neighbors(F){var U=this.predecessors(F);if(U){let J=new Set(U);for(var Q of this.successors(F))J.add(Q);return Array.from(J.values())}}isLeaf(F){var U;return this.isDirected()?U=this.successors(F):U=this.neighbors(F),U.length===0}filterNodes(F){var U=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});U.setGraph(this.graph());var Q=this;Object.entries(this._nodes).forEach(function([ee,ce]){F(ee)&&U.setNode(ee,ce)}),Object.values(this._edgeObjs).forEach(function(ee){U.hasNode(ee.v)&&U.hasNode(ee.w)&&U.setEdge(ee,Q.edge(ee))});var J={};function W(ee){var ce=Q.parent(ee);return ce===void 0||U.hasNode(ce)?(J[ee]=ce,ce):ce in J?J[ce]:W(ce)}return this._isCompound&&U.nodes().forEach(ee=>U.setParent(ee,W(ee))),U}setDefaultEdgeLabel(F){return this._defaultEdgeLabelFn=F,typeof F!="function"&&(this._defaultEdgeLabelFn=()=>F),this}edgeCount(){return this._edgeCount}edges(){return Object.values(this._edgeObjs)}setPath(F,U){var Q=this,J=arguments;return F.reduce(function(W,ee){return J.length>1?Q.setEdge(W,ee,U):Q.setEdge(W,ee),ee}),this}setEdge(){var F,U,Q,J,W=!1,ee=arguments[0];typeof ee=="object"&&ee!==null&&"v"in ee?(F=ee.v,U=ee.w,Q=ee.name,arguments.length===2&&(J=arguments[1],W=!0)):(F=ee,U=arguments[1],Q=arguments[3],arguments.length>2&&(J=arguments[2],W=!0)),F=""+F,U=""+U,Q!==void 0&&(Q=""+Q);var ce=z(this._isDirected,F,U,Q);if(Object.hasOwn(this._edgeLabels,ce))return W&&(this._edgeLabels[ce]=J),this;if(Q!==void 0&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(F),this.setNode(U),this._edgeLabels[ce]=W?J:this._defaultEdgeLabelFn(F,U,Q);var de=G(this._isDirected,F,U,Q);return F=de.v,U=de.w,Object.freeze(de),this._edgeObjs[ce]=de,Z(this._preds[U],F),Z(this._sucs[F],U),this._in[U][ce]=de,this._out[F][ce]=de,this._edgeCount++,this}edge(F,U,Q){var J=arguments.length===1?D(this._isDirected,arguments[0]):z(this._isDirected,F,U,Q);return this._edgeLabels[J]}edgeAsObj(){let F=this.edge(...arguments);return typeof F!="object"?{label:F}:F}hasEdge(F,U,Q){var J=arguments.length===1?D(this._isDirected,arguments[0]):z(this._isDirected,F,U,Q);return Object.hasOwn(this._edgeLabels,J)}removeEdge(F,U,Q){var J=arguments.length===1?D(this._isDirected,arguments[0]):z(this._isDirected,F,U,Q),W=this._edgeObjs[J];return W&&(F=W.v,U=W.w,delete this._edgeLabels[J],delete this._edgeObjs[J],C(this._preds[U],F),C(this._sucs[F],U),delete this._in[U][J],delete this._out[F][J],this._edgeCount--),this}inEdges(F,U){return this.isDirected()?this.filterEdges(this._in[F],F,U):this.nodeEdges(F,U)}outEdges(F,U){return this.isDirected()?this.filterEdges(this._out[F],F,U):this.nodeEdges(F,U)}nodeEdges(F,U){if(F in this._nodes)return this.filterEdges({...this._in[F],...this._out[F]},F,U)}filterEdges(F,U,Q){if(F){var J=Object.values(F);return Q?J.filter(function(W){return W.v===U&&W.w===Q||W.v===Q&&W.w===U}):J}}};function Z(F,U){F[U]?F[U]++:F[U]=1}function C(F,U){--F[U]||delete F[U]}function z(F,U,Q,J){var W=""+U,ee=""+Q;if(!F&&W>ee){var ce=W;W=ee,ee=ce}return W+j+ee+j+(J===void 0?$:J)}function G(F,U,Q,J){var W=""+U,ee=""+Q;if(!F&&W>ee){var ce=W;W=ee,ee=ce}var de={v:W,w:ee};return J&&(de.name=J),de}function D(F,U){return z(F,U.v,U.w,U.name)}A.exports=V}),f=o((Y,A)=>{A.exports="3.0.2"}),h=o((Y,A)=>{A.exports={Graph:c(),version:f()}}),d=o((Y,A)=>{var $=c();A.exports={write:M,read:Z};function M(C){var z={options:{directed:C.isDirected(),multigraph:C.isMultigraph(),compound:C.isCompound()},nodes:j(C),edges:V(C)};return C.graph()!==void 0&&(z.value=structuredClone(C.graph())),z}function j(C){return C.nodes().map(function(z){var G=C.node(z),D=C.parent(z),F={v:z};return G!==void 0&&(F.value=G),D!==void 0&&(F.parent=D),F})}function V(C){return C.edges().map(function(z){var G=C.edge(z),D={v:z.v,w:z.w};return z.name!==void 0&&(D.name=z.name),G!==void 0&&(D.value=G),D})}function Z(C){var z=new $(C.options).setGraph(C.value);return C.nodes.forEach(function(G){z.setNode(G.v,G.value),G.parent&&z.setParent(G.v,G.parent)}),C.edges.forEach(function(G){z.setEdge({v:G.v,w:G.w,name:G.name},G.value)}),z}}),p=o((Y,A)=>{A.exports=M;var $=()=>1;function M(V,Z,C,z){return j(V,String(Z),C||$,z||function(G){return V.outEdges(G)})}function j(V,Z,C,z){var G={},D=!0,F=0,U=V.nodes(),Q=function(ce){var de=C(ce);G[ce.v].distance+de{A.exports=$;function $(M){var j={},V=[],Z;function C(z){Object.hasOwn(j,z)||(j[z]=!0,Z.push(z),M.successors(z).forEach(C),M.predecessors(z).forEach(C))}return M.nodes().forEach(function(z){Z=[],C(z),Z.length&&V.push(Z)}),V}}),y=o((Y,A)=>{var $=class{constructor(){s(this,"_arr",[]),s(this,"_keyIndices",{})}size(){return this._arr.length}keys(){return this._arr.map(function(M){return M.key})}has(M){return Object.hasOwn(this._keyIndices,M)}priority(M){var j=this._keyIndices[M];if(j!==void 0)return this._arr[j].priority}min(){if(this.size()===0)throw new Error("Queue underflow");return this._arr[0].key}add(M,j){var V=this._keyIndices;if(M=String(M),!Object.hasOwn(V,M)){var Z=this._arr,C=Z.length;return V[M]=C,Z.push({key:M,priority:j}),this._decrease(C),!0}return!1}removeMin(){this._swap(0,this._arr.length-1);var M=this._arr.pop();return delete this._keyIndices[M.key],this._heapify(0),M.key}decrease(M,j){var V=this._keyIndices[M];if(j>this._arr[V].priority)throw new Error("New priority is greater than current priority. Key: "+M+" Old: "+this._arr[V].priority+" New: "+j);this._arr[V].priority=j,this._decrease(V)}_heapify(M){var j=this._arr,V=2*M,Z=V+1,C=M;V>1,!(j[Z].priority{var $=y();A.exports=j;var M=()=>1;function j(Z,C,z,G){var D=function(F){return Z.outEdges(F)};return V(Z,String(C),z||M,G||D)}function V(Z,C,z,G){var D={},F=new $,U,Q,J=function(W){var ee=W.v!==U?W.v:W.w,ce=D[ee],de=z(W),be=Q.distance+de;if(de<0)throw new Error("dijkstra does not allow negative edge weights. Bad edge: "+W+" Weight: "+de);be0&&(U=F.removeMin(),Q=D[U],Q.distance!==Number.POSITIVE_INFINITY);)G(U).forEach(J);return D}}),_=o((Y,A)=>{var $=b();A.exports=M;function M(j,V,Z){return j.nodes().reduce(function(C,z){return C[z]=$(j,z,V,Z),C},{})}}),S=o((Y,A)=>{A.exports=$;function $(j,V,Z){if(j[V].predecessor!==void 0)throw new Error("Invalid source vertex");if(j[Z].predecessor===void 0&&Z!==V)throw new Error("Invalid destination vertex");return{weight:j[Z].distance,path:M(j,V,Z)}}function M(j,V,Z){for(var C=[],z=Z;z!==V;)C.push(z),z=j[z].predecessor;return C.push(V),C.reverse()}}),N=o((Y,A)=>{A.exports=$;function $(M){var j=0,V=[],Z={},C=[];function z(G){var D=Z[G]={onStack:!0,lowlink:j,index:j++};if(V.push(G),M.successors(G).forEach(function(Q){Object.hasOwn(Z,Q)?Z[Q].onStack&&(D.lowlink=Math.min(D.lowlink,Z[Q].index)):(z(Q),D.lowlink=Math.min(D.lowlink,Z[Q].lowlink))}),D.lowlink===D.index){var F=[],U;do U=V.pop(),Z[U].onStack=!1,F.push(U);while(G!==U);C.push(F)}}return M.nodes().forEach(function(G){Object.hasOwn(Z,G)||z(G)}),C}}),E=o((Y,A)=>{var $=N();A.exports=M;function M(j){return $(j).filter(function(V){return V.length>1||V.length===1&&j.hasEdge(V[0],V[0])})}}),k=o((Y,A)=>{A.exports=M;var $=()=>1;function M(V,Z,C){return j(V,Z||$,C||function(z){return V.outEdges(z)})}function j(V,Z,C){var z={},G=V.nodes();return G.forEach(function(D){z[D]={},z[D][D]={distance:0},G.forEach(function(F){D!==F&&(z[D][F]={distance:Number.POSITIVE_INFINITY})}),C(D).forEach(function(F){var U=F.v===D?F.w:F.v,Q=Z(F);z[D][U]={distance:Q,predecessor:D}})}),G.forEach(function(D){var F=z[D];G.forEach(function(U){var Q=z[U];G.forEach(function(J){var W=Q[D],ee=F[J],ce=Q[J],de=W.distance+ee.distance;de{function $(j){var V={},Z={},C=[];function z(G){if(Object.hasOwn(Z,G))throw new M;Object.hasOwn(V,G)||(Z[G]=!0,V[G]=!0,j.predecessors(G).forEach(z),delete Z[G],C.push(G))}if(j.sinks().forEach(z),Object.keys(V).length!==j.nodeCount())throw new M;return C}var M=class extends Error{constructor(){super(...arguments)}};A.exports=$,$.CycleException=M}),O=o((Y,A)=>{var $=w();A.exports=M;function M(j){try{$(j)}catch(V){if(V instanceof $.CycleException)return!1;throw V}return!0}}),B=o((Y,A)=>{A.exports=$;function $(j,V,Z,C,z){Array.isArray(V)||(V=[V]);var G=(j.isDirected()?j.successors:j.neighbors).bind(j),D={};return V.forEach(function(F){if(!j.hasNode(F))throw new Error("Graph does not have node: "+F);z=M(j,F,Z==="post",D,G,C,z)}),z}function M(j,V,Z,C,z,G,D){return Object.hasOwn(C,V)||(C[V]=!0,Z||(D=G(D,V)),z(V).forEach(function(F){D=M(j,F,Z,C,z,G,D)}),Z&&(D=G(D,V))),D}}),R=o((Y,A)=>{var $=B();A.exports=M;function M(j,V,Z){return $(j,V,Z,function(C,z){return C.push(z),C},[])}}),H=o((Y,A)=>{var $=R();A.exports=M;function M(j,V){return $(j,V,"post")}}),I=o((Y,A)=>{var $=R();A.exports=M;function M(j,V){return $(j,V,"pre")}}),K=o((Y,A)=>{var $=c(),M=y();A.exports=j;function j(V,Z){var C=new $,z={},G=new M,D;function F(Q){var J=Q.v===D?Q.w:Q.v,W=G.priority(J);if(W!==void 0){var ee=Z(Q);ee0;){if(D=G.removeMin(),Object.hasOwn(z,D))C.setEdge(D,z[D]);else{if(U)throw new Error("Input graph is not connected: "+V);U=!0}V.nodeEdges(D).forEach(F)}return C}}),L=o((Y,A)=>{var $=b(),M=p();A.exports=j;function j(Z,C,z,G){return V(Z,C,z,G||function(D){return Z.outEdges(D)})}function V(Z,C,z,G){if(z===void 0)return $(Z,C,z,G);for(var D=!1,F=Z.nodes(),U=0;U{A.exports={bellmanFord:p(),components:m(),dijkstra:b(),dijkstraAll:_(),extractPath:S(),findCycles:E(),floydWarshall:k(),isAcyclic:O(),postorder:H(),preorder:I(),prim:K(),shortestPaths:L(),reduce:B(),tarjan:N(),topsort:w()}}),X=h();n.exports={Graph:X.Graph,json:d(),alg:q(),version:X.version}}),jB=vt((e,n)=>{var i=class{constructor(){let s={};s._next=s._prev=s,this._sentinel=s}dequeue(){let s=this._sentinel,c=s._prev;if(c!==s)return a(c),c}enqueue(s){let c=this._sentinel;s._prev&&s._next&&a(s),s._next=c._next,c._next._prev=s,c._next=s,s._prev=c}toString(){let s=[],c=this._sentinel,f=c._prev;for(;f!==c;)s.push(JSON.stringify(f,o)),f=f._prev;return"["+s.join(", ")+"]"}};function a(s){s._prev._next=s._next,s._next._prev=s._prev,delete s._next,delete s._prev}function o(s,c){if(s!=="_next"&&s!=="_prev")return c}n.exports=i}),BB=vt((e,n)=>{var i=Oi().Graph,a=jB();n.exports=s;var o=()=>1;function s(m,y){if(m.nodeCount()<=1)return[];let b=h(m,y||o);return c(b.graph,b.buckets,b.zeroIdx).flatMap(_=>m.outEdges(_.v,_.w))}function c(m,y,b){let _=[],S=y[y.length-1],N=y[0],E;for(;m.nodeCount();){for(;E=N.dequeue();)f(m,y,b,E);for(;E=S.dequeue();)f(m,y,b,E);if(m.nodeCount()){for(let k=y.length-2;k>0;--k)if(E=y[k].dequeue(),E){_=_.concat(f(m,y,b,E,!0));break}}}return _}function f(m,y,b,_,S){let N=S?[]:void 0;return m.inEdges(_.v).forEach(E=>{let k=m.edge(E),w=m.node(E.v);S&&N.push({v:E.v,w:E.w}),w.out-=k,d(y,b,w)}),m.outEdges(_.v).forEach(E=>{let k=m.edge(E),w=E.w,O=m.node(w);O.in-=k,d(y,b,O)}),m.removeNode(_.v),N}function h(m,y){let b=new i,_=0,S=0;m.nodes().forEach(k=>{b.setNode(k,{v:k,in:0,out:0})}),m.edges().forEach(k=>{let w=b.edge(k.v,k.w)||0,O=y(k),B=w+O;b.setEdge(k.v,k.w,B),S=Math.max(S,b.node(k.v).out+=O),_=Math.max(_,b.node(k.w).in+=O)});let N=p(S+_+3).map(()=>new a),E=_+1;return b.nodes().forEach(k=>{d(N,E,b.node(k))}),{graph:b,buckets:N,zeroIdx:E}}function d(m,y,b){b.out?b.in?m[b.out-b.in+y].enqueue(b):m[m.length-1].enqueue(b):m[0].enqueue(b)}function p(m){let y=[];for(let b=0;b{var i=Oi().Graph;n.exports={addBorderNode:y,addDummyNode:a,applyWithChunking:S,asNonCompoundGraph:s,buildLayerMatrix:d,intersectRect:h,mapValues:I,maxRank:N,normalizeRanks:p,notime:w,partition:E,pick:H,predecessorWeights:f,range:R,removeEmptyRanks:m,simplify:o,successorWeights:c,time:k,uniqueId:B,zipObject:K};function a(L,q,X,Y){for(var A=Y;L.hasNode(A);)A=B(Y);return X.dummy=q,L.setNode(A,X),A}function o(L){let q=new i().setGraph(L.graph());return L.nodes().forEach(X=>q.setNode(X,L.node(X))),L.edges().forEach(X=>{let Y=q.edge(X.v,X.w)||{weight:0,minlen:1},A=L.edge(X);q.setEdge(X.v,X.w,{weight:Y.weight+A.weight,minlen:Math.max(Y.minlen,A.minlen)})}),q}function s(L){let q=new i({multigraph:L.isMultigraph()}).setGraph(L.graph());return L.nodes().forEach(X=>{L.children(X).length||q.setNode(X,L.node(X))}),L.edges().forEach(X=>{q.setEdge(X,L.edge(X))}),q}function c(L){let q=L.nodes().map(X=>{let Y={};return L.outEdges(X).forEach(A=>{Y[A.w]=(Y[A.w]||0)+L.edge(A).weight}),Y});return K(L.nodes(),q)}function f(L){let q=L.nodes().map(X=>{let Y={};return L.inEdges(X).forEach(A=>{Y[A.v]=(Y[A.v]||0)+L.edge(A).weight}),Y});return K(L.nodes(),q)}function h(L,q){let X=L.x,Y=L.y,A=q.x-X,$=q.y-Y,M=L.width/2,j=L.height/2;if(!A&&!$)throw new Error("Not possible to find intersection inside of the rectangle");let V,Z;return Math.abs($)*M>Math.abs(A)*j?($<0&&(j=-j),V=j*A/$,Z=j):(A<0&&(M=-M),V=M,Z=M*$/A),{x:X+V,y:Y+Z}}function d(L){let q=R(N(L)+1).map(()=>[]);return L.nodes().forEach(X=>{let Y=L.node(X),A=Y.rank;A!==void 0&&(q[A][Y.order]=X)}),q}function p(L){let q=L.nodes().map(Y=>{let A=L.node(Y).rank;return A===void 0?Number.MAX_VALUE:A}),X=S(Math.min,q);L.nodes().forEach(Y=>{let A=L.node(Y);Object.hasOwn(A,"rank")&&(A.rank-=X)})}function m(L){let q=L.nodes().map(M=>L.node(M).rank).filter(M=>M!==void 0),X=S(Math.min,q),Y=[];L.nodes().forEach(M=>{let j=L.node(M).rank-X;Y[j]||(Y[j]=[]),Y[j].push(M)});let A=0,$=L.graph().nodeRankFactor;Array.from(Y).forEach((M,j)=>{M===void 0&&j%$!==0?--A:M!==void 0&&A&&M.forEach(V=>L.node(V).rank+=A)})}function y(L,q,X,Y){let A={width:0,height:0};return arguments.length>=4&&(A.rank=X,A.order=Y),a(L,"border",A,q)}function b(L,q=_){let X=[];for(let Y=0;Y_){let X=b(q);return L.apply(null,X.map(Y=>L.apply(null,Y)))}else return L.apply(null,q)}function N(L){let q=L.nodes().map(X=>{let Y=L.node(X).rank;return Y===void 0?Number.MIN_VALUE:Y});return S(Math.max,q)}function E(L,q){let X={lhs:[],rhs:[]};return L.forEach(Y=>{q(Y)?X.lhs.push(Y):X.rhs.push(Y)}),X}function k(L,q){let X=Date.now();try{return q()}finally{console.log(L+" time: "+(Date.now()-X)+"ms")}}function w(L,q){return q()}var O=0;function B(L){var q=++O;return L+(""+q)}function R(L,q,X=1){q==null&&(q=L,L=0);let Y=$=>$q<$);let A=[];for(let $=L;Y($);$+=X)A.push($);return A}function H(L,q){let X={};for(let Y of q)L[Y]!==void 0&&(X[Y]=L[Y]);return X}function I(L,q){let X=q;return typeof q=="string"&&(X=Y=>Y[q]),Object.entries(L).reduce((Y,[A,$])=>(Y[A]=X($,A),Y),{})}function K(L,q){return L.reduce((X,Y,A)=>(X[Y]=q[A],X),{})}}),UB=vt((e,n)=>{var i=BB(),a=ln().uniqueId;n.exports={run:o,undo:c};function o(f){(f.graph().acyclicer==="greedy"?i(f,h(f)):s(f)).forEach(d=>{let p=f.edge(d);f.removeEdge(d),p.forwardName=d.name,p.reversed=!0,f.setEdge(d.w,d.v,p,a("rev"))});function h(d){return p=>d.edge(p).weight}}function s(f){let h=[],d={},p={};function m(y){Object.hasOwn(p,y)||(p[y]=!0,d[y]=!0,f.outEdges(y).forEach(b=>{Object.hasOwn(d,b.w)?h.push(b):m(b.w)}),delete d[y])}return f.nodes().forEach(m),h}function c(f){f.edges().forEach(h=>{let d=f.edge(h);if(d.reversed){f.removeEdge(h);let p=d.forwardName;delete d.reversed,delete d.forwardName,f.setEdge(h.w,h.v,d,p)}})}}),HB=vt((e,n)=>{var i=ln();n.exports={run:a,undo:s};function a(c){c.graph().dummyChains=[],c.edges().forEach(f=>o(c,f))}function o(c,f){let h=f.v,d=c.node(h).rank,p=f.w,m=c.node(p).rank,y=f.name,b=c.edge(f),_=b.labelRank;if(m===d+1)return;c.removeEdge(f);let S,N,E;for(E=0,++d;d{let h=c.node(f),d=h.edgeLabel,p;for(c.setEdge(h.edgeObj,d);h.dummy;)p=c.successors(f)[0],c.removeNode(f),d.points.push({x:h.x,y:h.y}),h.dummy==="edge-label"&&(d.x=h.x,d.y=h.y,d.width=h.width,d.height=h.height),f=p,h=c.node(f)})}}),gu=vt((e,n)=>{var{applyWithChunking:i}=ln();n.exports={longestPath:a,slack:o};function a(s){var c={};function f(h){var d=s.node(h);if(Object.hasOwn(c,h))return d.rank;c[h]=!0;let p=s.outEdges(h).map(y=>y==null?Number.POSITIVE_INFINITY:f(y.w)-s.edge(y).minlen);var m=i(Math.min,p);return m===Number.POSITIVE_INFINITY&&(m=0),d.rank=m}s.sources().forEach(f)}function o(s,c){return s.node(c.w).rank-s.node(c.v).rank-s.edge(c).minlen}}),tS=vt((e,n)=>{var i=Oi().Graph,a=gu().slack;n.exports=o;function o(h){var d=new i({directed:!1}),p=h.nodes()[0],m=h.nodeCount();d.setNode(p,{});for(var y,b;s(d,h){var b=y.v,_=m===b?y.w:b;!h.hasNode(_)&&!a(d,y)&&(h.setNode(_,{}),h.setEdge(m,_,{}),p(_))})}return h.nodes().forEach(p),h.nodeCount()}function c(h,d){return d.edges().reduce((p,m)=>{let y=Number.POSITIVE_INFINITY;return h.hasNode(m.v)!==h.hasNode(m.w)&&(y=a(d,m)),yd.node(m).rank+=p)}}),$B=vt((e,n)=>{var i=tS(),a=gu().slack,o=gu().longestPath,s=Oi().alg.preorder,c=Oi().alg.postorder,f=ln().simplify;n.exports=h,h.initLowLimValues=y,h.initCutValues=d,h.calcCutValue=m,h.leaveEdge=_,h.enterEdge=S,h.exchangeEdges=N;function h(O){O=f(O),o(O);var B=i(O);y(B),d(B,O);for(var R,H;R=_(B);)H=S(B,O,R),N(B,O,R,H)}function d(O,B){var R=c(O,O.nodes());R=R.slice(0,R.length-1),R.forEach(H=>p(O,B,H))}function p(O,B,R){var H=O.node(R),I=H.parent;O.edge(R,I).cutvalue=m(O,B,R)}function m(O,B,R){var H=O.node(R),I=H.parent,K=!0,L=B.edge(R,I),q=0;return L||(K=!1,L=B.edge(I,R)),q=L.weight,B.nodeEdges(R).forEach(X=>{var Y=X.v===R,A=Y?X.w:X.v;if(A!==I){var $=Y===K,M=B.edge(X).weight;if(q+=$?M:-M,k(O,R,A)){var j=O.edge(R,A).cutvalue;q+=$?-j:j}}}),q}function y(O,B){arguments.length<2&&(B=O.nodes()[0]),b(O,{},1,B)}function b(O,B,R,H,I){var K=R,L=O.node(H);return B[H]=!0,O.neighbors(H).forEach(q=>{Object.hasOwn(B,q)||(R=b(O,B,R,q,H))}),L.low=K,L.lim=R++,I?L.parent=I:delete L.parent,R}function _(O){return O.edges().find(B=>O.edge(B).cutvalue<0)}function S(O,B,R){var H=R.v,I=R.w;B.hasEdge(H,I)||(H=R.w,I=R.v);var K=O.node(H),L=O.node(I),q=K,X=!1;K.lim>L.lim&&(q=L,X=!0);var Y=B.edges().filter(A=>X===w(O,O.node(A.v),q)&&X!==w(O,O.node(A.w),q));return Y.reduce((A,$)=>a(B,$)!B.node(I).parent),H=s(O,R);H=H.slice(1),H.forEach(I=>{var K=O.node(I).parent,L=B.edge(I,K),q=!1;L||(L=B.edge(K,I),q=!0),B.node(I).rank=B.node(K).rank+(q?L.minlen:-L.minlen)})}function k(O,B,R){return O.hasEdge(B,R)}function w(O,B,R){return R.low<=B.lim&&B.lim<=R.lim}}),qB=vt((e,n)=>{var i=gu(),a=i.longestPath,o=tS(),s=$B();n.exports=c;function c(p){var m=p.graph().ranker;if(m instanceof Function)return m(p);switch(p.graph().ranker){case"network-simplex":d(p);break;case"tight-tree":h(p);break;case"longest-path":f(p);break;case"none":break;default:d(p)}}var f=a;function h(p){a(p),o(p)}function d(p){s(p)}}),PB=vt((e,n)=>{n.exports=i;function i(s){let c=o(s);s.graph().dummyChains.forEach(f=>{let h=s.node(f),d=h.edgeObj,p=a(s,c,d.v,d.w),m=p.path,y=p.lca,b=0,_=m[b],S=!0;for(;f!==d.w;){if(h=s.node(f),S){for(;(_=m[b])!==y&&s.node(_).maxRankm||y>c[b].lim));for(_=b,b=h;(b=s.parent(b))!==_;)p.push(b);return{path:d.concat(p.reverse()),lca:_}}function o(s){let c={},f=0;function h(d){let p=f;s.children(d).forEach(h),c[d]={low:p,lim:f++}}return s.children().forEach(h),c}}),FB=vt((e,n)=>{var i=ln();n.exports={run:a,cleanup:f};function a(h){let d=i.addDummyNode(h,"root",{},"_root"),p=s(h),m=Object.values(p),y=i.applyWithChunking(Math.max,m)-1,b=2*y+1;h.graph().nestingRoot=d,h.edges().forEach(S=>h.edge(S).minlen*=b);let _=c(h)+1;h.children().forEach(S=>o(h,d,b,_,y,p,S)),h.graph().nodeRankFactor=b}function o(h,d,p,m,y,b,_){let S=h.children(_);if(!S.length){_!==d&&h.setEdge(d,_,{weight:0,minlen:p});return}let N=i.addBorderNode(h,"_bt"),E=i.addBorderNode(h,"_bb"),k=h.node(_);h.setParent(N,_),k.borderTop=N,h.setParent(E,_),k.borderBottom=E,S.forEach(w=>{o(h,d,p,m,y,b,w);let O=h.node(w),B=O.borderTop?O.borderTop:w,R=O.borderBottom?O.borderBottom:w,H=O.borderTop?m:2*m,I=B!==R?1:y-b[_]+1;h.setEdge(N,B,{weight:H,minlen:I,nestingEdge:!0}),h.setEdge(R,E,{weight:H,minlen:I,nestingEdge:!0})}),h.parent(_)||h.setEdge(d,N,{weight:0,minlen:y+b[_]})}function s(h){var d={};function p(m,y){var b=h.children(m);b&&b.length&&b.forEach(_=>p(_,y+1)),d[m]=y}return h.children().forEach(m=>p(m,1)),d}function c(h){return h.edges().reduce((d,p)=>d+h.edge(p).weight,0)}function f(h){var d=h.graph();h.removeNode(d.nestingRoot),delete d.nestingRoot,h.edges().forEach(p=>{var m=h.edge(p);m.nestingEdge&&h.removeEdge(p)})}}),GB=vt((e,n)=>{var i=ln();n.exports=a;function a(s){function c(f){let h=s.children(f),d=s.node(f);if(h.length&&h.forEach(c),Object.hasOwn(d,"minRank")){d.borderLeft=[],d.borderRight=[];for(let p=d.minRank,m=d.maxRank+1;p{n.exports={adjust:i,undo:a};function i(p){let m=p.graph().rankdir.toLowerCase();(m==="lr"||m==="rl")&&o(p)}function a(p){let m=p.graph().rankdir.toLowerCase();(m==="bt"||m==="rl")&&c(p),(m==="lr"||m==="rl")&&(h(p),o(p))}function o(p){p.nodes().forEach(m=>s(p.node(m))),p.edges().forEach(m=>s(p.edge(m)))}function s(p){let m=p.width;p.width=p.height,p.height=m}function c(p){p.nodes().forEach(m=>f(p.node(m))),p.edges().forEach(m=>{let y=p.edge(m);y.points.forEach(f),Object.hasOwn(y,"y")&&f(y)})}function f(p){p.y=-p.y}function h(p){p.nodes().forEach(m=>d(p.node(m))),p.edges().forEach(m=>{let y=p.edge(m);y.points.forEach(d),Object.hasOwn(y,"x")&&d(y)})}function d(p){let m=p.x;p.x=p.y,p.y=m}}),YB=vt((e,n)=>{var i=ln();n.exports=a;function a(o){let s={},c=o.nodes().filter(m=>!o.children(m).length),f=c.map(m=>o.node(m).rank),h=i.applyWithChunking(Math.max,f),d=i.range(h+1).map(()=>[]);function p(m){if(s[m])return;s[m]=!0;let y=o.node(m);d[y.rank].push(m),o.successors(m).forEach(p)}return c.sort((m,y)=>o.node(m).rank-o.node(y).rank).forEach(p),d}}),XB=vt((e,n)=>{var i=ln().zipObject;n.exports=a;function a(s,c){let f=0;for(let h=1;hS)),d=c.flatMap(_=>s.outEdges(_).map(S=>({pos:h[S.w],weight:s.edge(S).weight})).sort((S,N)=>S.pos-N.pos)),p=1;for(;p{let S=_.pos+p;y[S]+=_.weight;let N=0;for(;S>0;)S%2&&(N+=y[S+1]),S=S-1>>1,y[S]+=_.weight;b+=_.weight*N}),b}}),KB=vt((e,n)=>{n.exports=i;function i(a,o=[]){return o.map(s=>{let c=a.inEdges(s);if(c.length){let f=c.reduce((h,d)=>{let p=a.edge(d),m=a.node(d.v);return{sum:h.sum+p.weight*m.order,weight:h.weight+p.weight}},{sum:0,weight:0});return{v:s,barycenter:f.sum/f.weight,weight:f.weight}}else return{v:s}})}}),ZB=vt((e,n)=>{var i=ln();n.exports=a;function a(c,f){let h={};c.forEach((p,m)=>{let y=h[p.v]={indegree:0,in:[],out:[],vs:[p.v],i:m};p.barycenter!==void 0&&(y.barycenter=p.barycenter,y.weight=p.weight)}),f.edges().forEach(p=>{let m=h[p.v],y=h[p.w];m!==void 0&&y!==void 0&&(y.indegree++,m.out.push(h[p.w]))});let d=Object.values(h).filter(p=>!p.indegree);return o(d)}function o(c){let f=[];function h(p){return m=>{m.merged||(m.barycenter===void 0||p.barycenter===void 0||m.barycenter>=p.barycenter)&&s(p,m)}}function d(p){return m=>{m.in.push(p),--m.indegree===0&&c.push(m)}}for(;c.length;){let p=c.pop();f.push(p),p.in.reverse().forEach(h(p)),p.out.forEach(d(p))}return f.filter(p=>!p.merged).map(p=>i.pick(p,["vs","i","barycenter","weight"]))}function s(c,f){let h=0,d=0;c.weight&&(h+=c.barycenter*c.weight,d+=c.weight),f.weight&&(h+=f.barycenter*f.weight,d+=f.weight),c.vs=f.vs.concat(c.vs),c.barycenter=h/d,c.weight=d,c.i=Math.min(f.i,c.i),f.merged=!0}}),QB=vt((e,n)=>{var i=ln();n.exports=a;function a(c,f){let h=i.partition(c,N=>Object.hasOwn(N,"barycenter")),d=h.lhs,p=h.rhs.sort((N,E)=>E.i-N.i),m=[],y=0,b=0,_=0;d.sort(s(!!f)),_=o(m,p,_),d.forEach(N=>{_+=N.vs.length,m.push(N.vs),y+=N.barycenter*N.weight,b+=N.weight,_=o(m,p,_)});let S={vs:m.flat(!0)};return b&&(S.barycenter=y/b,S.weight=b),S}function o(c,f,h){let d;for(;f.length&&(d=f[f.length-1]).i<=h;)f.pop(),c.push(d.vs),h++;return h}function s(c){return(f,h)=>f.barycenterh.barycenter?1:c?h.i-f.i:f.i-h.i}}),WB=vt((e,n)=>{var i=KB(),a=ZB(),o=QB();n.exports=s;function s(h,d,p,m){let y=h.children(d),b=h.node(d),_=b?b.borderLeft:void 0,S=b?b.borderRight:void 0,N={};_&&(y=y.filter(O=>O!==_&&O!==S));let E=i(h,y);E.forEach(O=>{if(h.children(O.v).length){let B=s(h,O.v,p,m);N[O.v]=B,Object.hasOwn(B,"barycenter")&&f(O,B)}});let k=a(E,p);c(k,N);let w=o(k,m);if(_&&(w.vs=[_,w.vs,S].flat(!0),h.predecessors(_).length)){let O=h.node(h.predecessors(_)[0]),B=h.node(h.predecessors(S)[0]);Object.hasOwn(w,"barycenter")||(w.barycenter=0,w.weight=0),w.barycenter=(w.barycenter*w.weight+O.order+B.order)/(w.weight+2),w.weight+=2}return w}function c(h,d){h.forEach(p=>{p.vs=p.vs.flatMap(m=>d[m]?d[m].vs:m)})}function f(h,d){h.barycenter!==void 0?(h.barycenter=(h.barycenter*h.weight+d.barycenter*d.weight)/(h.weight+d.weight),h.weight+=d.weight):(h.barycenter=d.barycenter,h.weight=d.weight)}}),JB=vt((e,n)=>{var i=Oi().Graph,a=ln();n.exports=o;function o(c,f,h,d){d||(d=c.nodes());let p=s(c),m=new i({compound:!0}).setGraph({root:p}).setDefaultNodeLabel(y=>c.node(y));return d.forEach(y=>{let b=c.node(y),_=c.parent(y);(b.rank===f||b.minRank<=f&&f<=b.maxRank)&&(m.setNode(y),m.setParent(y,_||p),c[h](y).forEach(S=>{let N=S.v===y?S.w:S.v,E=m.edge(N,y),k=E!==void 0?E.weight:0;m.setEdge(N,y,{weight:c.edge(S).weight+k})}),Object.hasOwn(b,"minRank")&&m.setNode(y,{borderLeft:b.borderLeft[f],borderRight:b.borderRight[f]}))}),m}function s(c){for(var f;c.hasNode(f=a.uniqueId("_root")););return f}}),e8=vt((e,n)=>{n.exports=i;function i(a,o,s){let c={},f;s.forEach(h=>{let d=a.parent(h),p,m;for(;d;){if(p=a.parent(d),p?(m=c[p],c[p]=d):(m=f,f=d),m&&m!==d){o.setEdge(m,d);return}d=p}})}}),t8=vt((e,n)=>{var i=YB(),a=XB(),o=WB(),s=JB(),c=e8(),f=Oi().Graph,h=ln();n.exports=d;function d(b,_={}){if(typeof _.customOrder=="function"){_.customOrder(b,d);return}let S=h.maxRank(b),N=p(b,h.range(1,S+1),"inEdges"),E=p(b,h.range(S-1,-1,-1),"outEdges"),k=i(b);if(y(b,k),_.disableOptimalOrderHeuristic)return;let w=Number.POSITIVE_INFINITY,O,B=_.constraints||[];for(let R=0,H=0;H<4;++R,++H){m(R%2?N:E,R%4>=2,B),k=h.buildLayerMatrix(b);let I=a(b,k);I{N.has(k)||N.set(k,[]),N.get(k).push(w)};for(let k of b.nodes()){let w=b.node(k);if(typeof w.rank=="number"&&E(w.rank,k),typeof w.minRank=="number"&&typeof w.maxRank=="number")for(let O=w.minRank;O<=w.maxRank;O++)O!==w.rank&&E(O,k)}return _.map(function(k){return s(b,k,S,N.get(k)||[])})}function m(b,_,S){let N=new f;b.forEach(function(E){S.forEach(O=>N.setEdge(O.left,O.right));let k=E.graph().root,w=o(E,k,N,_);w.vs.forEach((O,B)=>E.node(O).order=B),c(E,N,w.vs)})}function y(b,_){Object.values(_).forEach(S=>S.forEach((N,E)=>b.node(N).order=E))}}),n8=vt((e,n)=>{var i=Oi().Graph,a=ln();n.exports={positionX:S,findType1Conflicts:o,findType2Conflicts:s,addConflict:f,hasConflict:h,verticalAlignment:d,horizontalCompaction:p,alignCoordinates:b,findSmallestWidthAlignment:y,balance:_};function o(k,w){let O={};function B(R,H){let I=0,K=0,L=R.length,q=H[H.length-1];return H.forEach((X,Y)=>{let A=c(k,X),$=A?k.node(A).order:L;(A||X===q)&&(H.slice(K,Y+1).forEach(M=>{k.predecessors(M).forEach(j=>{let V=k.node(j),Z=V.order;(Z{X=H[Y],k.node(X).dummy&&k.predecessors(X).forEach(A=>{let $=k.node(A);$.dummy&&($.orderq)&&f(O,A,X)})})}function R(H,I){let K=-1,L,q=0;return I.forEach((X,Y)=>{if(k.node(X).dummy==="border"){let A=k.predecessors(X);A.length&&(L=k.node(A[0]).order,B(I,q,Y,K,L),q=Y,K=L)}B(I,q,I.length,L,H.length)}),I}return w.length&&w.reduce(R),O}function c(k,w){if(k.node(w).dummy)return k.predecessors(w).find(O=>k.node(O).dummy)}function f(k,w,O){if(w>O){let R=w;w=O,O=R}let B=k[w];B||(k[w]=B={}),B[O]=!0}function h(k,w,O){if(w>O){let B=w;w=O,O=B}return!!k[w]&&Object.hasOwn(k[w],O)}function d(k,w,O,B){let R={},H={},I={};return w.forEach(K=>{K.forEach((L,q)=>{R[L]=L,H[L]=L,I[L]=q})}),w.forEach(K=>{let L=-1;K.forEach(q=>{let X=B(q);if(X.length){X=X.sort((A,$)=>I[A]-I[$]);let Y=(X.length-1)/2;for(let A=Math.floor(Y),$=Math.ceil(Y);A<=$;++A){let M=X[A];H[q]===q&&LMath.max(A,H[$.v]+I.edge($)),0)}function X(Y){let A=I.outEdges(Y).reduce((M,j)=>Math.min(M,H[j.w]-I.edge(j)),Number.POSITIVE_INFINITY),$=k.node(Y);A!==Number.POSITIVE_INFINITY&&$.borderType!==K&&(H[Y]=Math.max(H[Y],A))}return L(q,I.predecessors.bind(I)),L(X,I.successors.bind(I)),Object.keys(B).forEach(Y=>H[Y]=H[O[Y]]),H}function m(k,w,O,B){let R=new i,H=k.graph(),I=N(H.nodesep,H.edgesep,B);return w.forEach(K=>{let L;K.forEach(q=>{let X=O[q];if(R.setNode(X),L){var Y=O[L],A=R.edge(Y,X);R.setEdge(Y,X,Math.max(I(k,q,L),A||0))}L=q})}),R}function y(k,w){return Object.values(w).reduce((O,B)=>{let R=Number.NEGATIVE_INFINITY,H=Number.POSITIVE_INFINITY;Object.entries(B).forEach(([K,L])=>{let q=E(k,K)/2;R=Math.max(L+q,R),H=Math.min(L-q,H)});let I=R-H;return I{["l","r"].forEach(I=>{let K=H+I,L=k[K];if(L===w)return;let q=Object.values(L),X=B-a.applyWithChunking(Math.min,q);I!=="l"&&(X=R-a.applyWithChunking(Math.max,q)),X&&(k[K]=a.mapValues(L,Y=>Y+X))})})}function _(k,w){return a.mapValues(k.ul,(O,B)=>{if(w)return k[w.toLowerCase()][B];{let R=Object.values(k).map(H=>H[B]).sort((H,I)=>H-I);return(R[1]+R[2])/2}})}function S(k){let w=a.buildLayerMatrix(k),O=Object.assign(o(k,w),s(k,w)),B={},R;["u","d"].forEach(I=>{R=I==="u"?w:Object.values(w).reverse(),["l","r"].forEach(K=>{K==="r"&&(R=R.map(Y=>Object.values(Y).reverse()));let L=(I==="u"?k.predecessors:k.successors).bind(k),q=d(k,R,O,L),X=p(k,R,q.root,q.align,K==="r");K==="r"&&(X=a.mapValues(X,Y=>-Y)),B[I+K]=X})});let H=y(k,B);return b(B,H),_(B,k.graph().align)}function N(k,w,O){return(B,R,H)=>{let I=B.node(R),K=B.node(H),L=0,q;if(L+=I.width/2,Object.hasOwn(I,"labelpos"))switch(I.labelpos.toLowerCase()){case"l":q=-I.width/2;break;case"r":q=I.width/2;break}if(q&&(L+=O?q:-q),q=0,L+=(I.dummy?w:k)/2,L+=(K.dummy?w:k)/2,L+=K.width/2,Object.hasOwn(K,"labelpos"))switch(K.labelpos.toLowerCase()){case"l":q=K.width/2;break;case"r":q=-K.width/2;break}return q&&(L+=O?q:-q),q=0,L}}function E(k,w){return k.node(w).width}}),i8=vt((e,n)=>{var i=ln(),a=n8().positionX;n.exports=o;function o(c){c=i.asNonCompoundGraph(c),s(c),Object.entries(a(c)).forEach(([f,h])=>c.node(f).x=h)}function s(c){let f=i.buildLayerMatrix(c),h=c.graph().ranksep,d=c.graph().rankalign,p=0;f.forEach(m=>{let y=m.reduce((b,_)=>{let S=c.node(_).height;return b>S?b:S},0);m.forEach(b=>{let _=c.node(b);d==="top"?_.y=p+_.height/2:d==="bottom"?_.y=p+y-_.height/2:_.y=p+y/2}),p+=y+h})}}),r8=vt((e,n)=>{var i=UB(),a=HB(),o=qB(),s=ln().normalizeRanks,c=PB(),f=ln().removeEmptyRanks,h=FB(),d=GB(),p=VB(),m=t8(),y=i8(),b=ln(),_=Oi().Graph;n.exports=S;function S(U,Q={}){let J=Q.debugTiming?b.time:b.notime;return J("layout",()=>{let W=J(" buildLayoutGraph",()=>L(U));return J(" runLayout",()=>N(W,J,Q)),J(" updateInputGraph",()=>E(U,W)),W})}function N(U,Q,J){Q(" makeSpaceForEdgeLabels",()=>q(U)),Q(" removeSelfEdges",()=>C(U)),Q(" acyclic",()=>i.run(U)),Q(" nestingGraph.run",()=>h.run(U)),Q(" rank",()=>o(b.asNonCompoundGraph(U))),Q(" injectEdgeLabelProxies",()=>X(U)),Q(" removeEmptyRanks",()=>f(U)),Q(" nestingGraph.cleanup",()=>h.cleanup(U)),Q(" normalizeRanks",()=>s(U)),Q(" assignRankMinMax",()=>Y(U)),Q(" removeEdgeLabelProxies",()=>A(U)),Q(" normalize.run",()=>a.run(U)),Q(" parentDummyChains",()=>c(U)),Q(" addBorderSegments",()=>d(U)),Q(" order",()=>m(U,J)),Q(" insertSelfEdges",()=>z(U)),Q(" adjustCoordinateSystem",()=>p.adjust(U)),Q(" position",()=>y(U)),Q(" positionSelfEdges",()=>G(U)),Q(" removeBorderNodes",()=>Z(U)),Q(" normalize.undo",()=>a.undo(U)),Q(" fixupEdgeLabelCoords",()=>j(U)),Q(" undoCoordinateSystem",()=>p.undo(U)),Q(" translateGraph",()=>$(U)),Q(" assignNodeIntersects",()=>M(U)),Q(" reversePoints",()=>V(U)),Q(" acyclic.undo",()=>i.undo(U))}function E(U,Q){U.nodes().forEach(J=>{let W=U.node(J),ee=Q.node(J);W&&(W.x=ee.x,W.y=ee.y,W.order=ee.order,W.rank=ee.rank,Q.children(J).length&&(W.width=ee.width,W.height=ee.height))}),U.edges().forEach(J=>{let W=U.edge(J),ee=Q.edge(J);W.points=ee.points,Object.hasOwn(ee,"x")&&(W.x=ee.x,W.y=ee.y)}),U.graph().width=Q.graph().width,U.graph().height=Q.graph().height}var k=["nodesep","edgesep","ranksep","marginx","marginy"],w={ranksep:50,edgesep:20,nodesep:50,rankdir:"tb",rankalign:"center"},O=["acyclicer","ranker","rankdir","align","rankalign"],B=["width","height","rank"],R={width:0,height:0},H=["minlen","weight","width","height","labeloffset"],I={minlen:1,weight:1,width:0,height:0,labeloffset:10,labelpos:"r"},K=["labelpos"];function L(U){let Q=new _({multigraph:!0,compound:!0}),J=F(U.graph());return Q.setGraph(Object.assign({},w,D(J,k),b.pick(J,O))),U.nodes().forEach(W=>{let ee=F(U.node(W)),ce=D(ee,B);Object.keys(R).forEach(de=>{ce[de]===void 0&&(ce[de]=R[de])}),Q.setNode(W,ce),Q.setParent(W,U.parent(W))}),U.edges().forEach(W=>{let ee=F(U.edge(W));Q.setEdge(W,Object.assign({},I,D(ee,H),b.pick(ee,K)))}),Q}function q(U){let Q=U.graph();Q.ranksep/=2,U.edges().forEach(J=>{let W=U.edge(J);W.minlen*=2,W.labelpos.toLowerCase()!=="c"&&(Q.rankdir==="TB"||Q.rankdir==="BT"?W.width+=W.labeloffset:W.height+=W.labeloffset)})}function X(U){U.edges().forEach(Q=>{let J=U.edge(Q);if(J.width&&J.height){let W=U.node(Q.v),ee={rank:(U.node(Q.w).rank-W.rank)/2+W.rank,e:Q};b.addDummyNode(U,"edge-proxy",ee,"_ep")}})}function Y(U){let Q=0;U.nodes().forEach(J=>{let W=U.node(J);W.borderTop&&(W.minRank=U.node(W.borderTop).rank,W.maxRank=U.node(W.borderBottom).rank,Q=Math.max(Q,W.maxRank))}),U.graph().maxRank=Q}function A(U){U.nodes().forEach(Q=>{let J=U.node(Q);J.dummy==="edge-proxy"&&(U.edge(J.e).labelRank=J.rank,U.removeNode(Q))})}function $(U){let Q=Number.POSITIVE_INFINITY,J=0,W=Number.POSITIVE_INFINITY,ee=0,ce=U.graph(),de=ce.marginx||0,be=ce.marginy||0;function Ee(Se){let De=Se.x,He=Se.y,lt=Se.width,Rt=Se.height;Q=Math.min(Q,De-lt/2),J=Math.max(J,De+lt/2),W=Math.min(W,He-Rt/2),ee=Math.max(ee,He+Rt/2)}U.nodes().forEach(Se=>Ee(U.node(Se))),U.edges().forEach(Se=>{let De=U.edge(Se);Object.hasOwn(De,"x")&&Ee(De)}),Q-=de,W-=be,U.nodes().forEach(Se=>{let De=U.node(Se);De.x-=Q,De.y-=W}),U.edges().forEach(Se=>{let De=U.edge(Se);De.points.forEach(He=>{He.x-=Q,He.y-=W}),Object.hasOwn(De,"x")&&(De.x-=Q),Object.hasOwn(De,"y")&&(De.y-=W)}),ce.width=J-Q+de,ce.height=ee-W+be}function M(U){U.edges().forEach(Q=>{let J=U.edge(Q),W=U.node(Q.v),ee=U.node(Q.w),ce,de;J.points?(ce=J.points[0],de=J.points[J.points.length-1]):(J.points=[],ce=ee,de=W),J.points.unshift(b.intersectRect(W,ce)),J.points.push(b.intersectRect(ee,de))})}function j(U){U.edges().forEach(Q=>{let J=U.edge(Q);if(Object.hasOwn(J,"x"))switch((J.labelpos==="l"||J.labelpos==="r")&&(J.width-=J.labeloffset),J.labelpos){case"l":J.x-=J.width/2+J.labeloffset;break;case"r":J.x+=J.width/2+J.labeloffset;break}})}function V(U){U.edges().forEach(Q=>{let J=U.edge(Q);J.reversed&&J.points.reverse()})}function Z(U){U.nodes().forEach(Q=>{if(U.children(Q).length){let J=U.node(Q),W=U.node(J.borderTop),ee=U.node(J.borderBottom),ce=U.node(J.borderLeft[J.borderLeft.length-1]),de=U.node(J.borderRight[J.borderRight.length-1]);J.width=Math.abs(de.x-ce.x),J.height=Math.abs(ee.y-W.y),J.x=ce.x+J.width/2,J.y=W.y+J.height/2}}),U.nodes().forEach(Q=>{U.node(Q).dummy==="border"&&U.removeNode(Q)})}function C(U){U.edges().forEach(Q=>{if(Q.v===Q.w){var J=U.node(Q.v);J.selfEdges||(J.selfEdges=[]),J.selfEdges.push({e:Q,label:U.edge(Q)}),U.removeEdge(Q)}})}function z(U){var Q=b.buildLayerMatrix(U);Q.forEach(J=>{var W=0;J.forEach((ee,ce)=>{var de=U.node(ee);de.order=ce+W,(de.selfEdges||[]).forEach(be=>{b.addDummyNode(U,"selfedge",{width:be.label.width,height:be.label.height,rank:de.rank,order:ce+ ++W,e:be.e,label:be.label},"_se")}),delete de.selfEdges})})}function G(U){U.nodes().forEach(Q=>{var J=U.node(Q);if(J.dummy==="selfedge"){var W=U.node(J.e.v),ee=W.x+W.width/2,ce=W.y,de=J.x-ee,be=W.height/2;U.setEdge(J.e,J.label),U.removeNode(Q),J.label.points=[{x:ee+2*de/3,y:ce-be},{x:ee+5*de/6,y:ce-be},{x:ee+de,y:ce},{x:ee+5*de/6,y:ce+be},{x:ee+2*de/3,y:ce+be}],J.label.x=J.x,J.label.y=J.y}})}function D(U,Q){return b.mapValues(b.pick(U,Q),Number)}function F(U){var Q={};return U&&Object.entries(U).forEach(([J,W])=>{typeof J=="string"&&(J=J.toLowerCase()),Q[J]=W}),Q}}),a8=vt((e,n)=>{var i=ln(),a=Oi().Graph;n.exports={debugOrdering:o};function o(s){let c=i.buildLayerMatrix(s),f=new a({compound:!0,multigraph:!0}).setGraph({});return s.nodes().forEach(h=>{f.setNode(h,{label:h}),f.setParent(h,"layer"+s.node(h).rank)}),s.edges().forEach(h=>f.setEdge(h.v,h.w,{},h.name)),c.forEach((h,d)=>{let p="layer"+d;f.setNode(p,{rank:"same"}),h.reduce((m,y)=>(f.setEdge(m,y,{style:"invis"}),y))}),f}}),l8=vt((e,n)=>{n.exports="2.0.4"}),o8=vt((e,n)=>{n.exports={graphlib:Oi(),layout:r8(),debug:a8(),util:{time:ln().time,notime:ln().notime},version:l8()}});const g_=o8();/*! For license information please see dagre.esm.js.LEGAL.txt */const b_={running:"bg-blue-500",completed:"bg-emerald-500",failed:"bg-red-500",error:"bg-red-500"};function s8({data:e,selected:n}){const i=e;return v.jsxs("div",{className:`w-[260px] rounded-lg border px-4 py-3 transition-colors ${i.isSelected||n?"border-white/30 bg-[#0a0a0a]":"border-[#222] bg-black hover:border-[#333]"}`,children:[v.jsx(Bl,{type:"target",position:ze.Top,isConnectable:!1,className:`!w-1.5 !h-1.5 !border-0 ${i.parentId?"!bg-[#444]":"!bg-transparent"}`}),v.jsxs("div",{className:"flex items-center gap-2",children:[v.jsxs("span",{className:"relative flex h-2 w-2 shrink-0",children:[v.jsx("span",{className:`absolute inline-flex h-full w-full rounded-full opacity-75 ${b_[i.status]??"bg-gray-500"} ${i.status==="running"?"animate-ping":""}`}),v.jsx("span",{className:`relative inline-flex h-2 w-2 rounded-full ${b_[i.status]??"bg-gray-500"}`})]}),v.jsx("span",{className:"text-sm font-semibold text-white leading-snug line-clamp-3",children:i.name})]}),v.jsx(Bl,{type:"source",position:ze.Bottom,isConnectable:!1,className:`!w-1.5 !h-1.5 !border-0 ${i.children&&i.children.length>0?"!bg-[#444]":"!bg-transparent"}`})]})}const c8=ae.memo(s8);function Ho({w:e=24}){return v.jsxs("div",{className:"w-[180px] h-[72px] rounded-lg border border-[#222] bg-[#0a0a0a] px-3 py-2 shrink-0",children:[v.jsxs("div",{className:"flex items-center gap-2 mb-1.5",children:[v.jsx("div",{className:"w-2 h-2 rounded-full bg-[#2a2a2a]"}),v.jsx("div",{className:"h-3 rounded bg-[#252525]",style:{width:`${e*4}px`}})]}),v.jsx("div",{className:"h-2 w-28 rounded bg-[#1e1e1e] mb-1.5"}),v.jsxs("div",{className:"flex gap-3",children:[v.jsx("div",{className:"h-2 w-8 rounded bg-[#1e1e1e]"}),v.jsx("div",{className:"h-2 w-8 rounded bg-[#1e1e1e]"})]})]})}function Sl(){return v.jsx("div",{className:"w-px h-6 bg-[#2a2a2a]"})}function y_({count:e}){return v.jsx("div",{className:"relative flex justify-center",children:v.jsx("div",{className:"absolute top-0 h-px bg-[#2a2a2a]",style:{width:`${(e-1)*220}px`}})})}function u8(){return v.jsx("div",{className:"h-full bg-black overflow-hidden",children:v.jsxs("div",{className:"flex flex-col items-center pt-10 animate-pulse",children:[v.jsx(Ho,{w:20}),v.jsx(Sl,{}),v.jsx(y_,{count:3}),v.jsx("div",{className:"flex gap-10",children:[18,22,16].map((e,n)=>v.jsxs("div",{className:"flex flex-col items-center",children:[v.jsx(Sl,{}),v.jsx(Ho,{w:e})]},n))}),v.jsxs("div",{className:"flex gap-10 w-full justify-center",children:[v.jsxs("div",{className:"flex flex-col items-center",children:[v.jsx(Sl,{}),v.jsx(y_,{count:2}),v.jsx("div",{className:"flex gap-10",children:[14,20].map((e,n)=>v.jsxs("div",{className:"flex flex-col items-center",children:[v.jsx(Sl,{}),v.jsx(Ho,{w:e})]},n))})]}),v.jsxs("div",{className:"flex flex-col items-center",children:[v.jsx(Sl,{}),v.jsx(Ho,{w:18}),v.jsx(Sl,{}),v.jsx(Ho,{w:12})]}),v.jsx("div",{className:"w-[180px]"})]})]})})}const Bp=260,Up=80,f8={agentNode:c8};function d8(e,n){const i=new g_.graphlib.Graph;i.setDefaultEdgeLabel(()=>({})),i.setGraph({rankdir:"TB",nodesep:60,ranksep:80});const a=[],o=[];for(const[s,c]of e)if(i.setNode(s,{width:Bp,height:Up}),a.push({id:s,type:"agentNode",position:{x:0,y:0},data:{...c,isSelected:s===n}}),c.parentId&&e.has(c.parentId)){const f=`${c.parentId}->${s}`;i.setEdge(c.parentId,s),o.push({id:f,source:c.parentId,target:s,style:{stroke:"#2a2a2a",strokeWidth:1.5}})}g_.layout(i);for(const s of a){const c=i.node(s.id);c&&(s.position={x:c.x-Bp/2,y:c.y-Up/2})}return{nodes:a,edges:o}}const ap=300;function h8({nodes:e}){const{setCenter:n}=gs(),i=ae.useRef(!1);return ae.useEffect(()=>{if(e.length>0&&!i.current){const o=e.find(f=>!f.data.parentId)??e[0];i.current=!0;const s=o.position.x+Bp/2,c=o.position.y+Up/2;setTimeout(()=>n(s,c,{zoom:.85,duration:400}),60)}},[e,n]),null}function p8(){const{zoomIn:e,zoomOut:n,fitView:i}=gs();return v.jsx(xB,{position:"bottom-right",showZoom:!1,showFitView:!1,showInteractive:!1,className:"!bg-transparent !border-none !shadow-none",children:v.jsxs("div",{className:"flex flex-col overflow-hidden rounded-lg border border-[#222]",children:[v.jsx("button",{onClick:()=>e({duration:ap}),className:"flex items-center justify-center w-7 h-7 bg-[#111] text-white hover:bg-[#2a2a2a] transition-colors",title:"Zoom in",children:v.jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,className:"w-3.5 h-3.5",children:v.jsx("path",{d:"M12 5v14M5 12h14"})})}),v.jsx("button",{onClick:()=>n({duration:ap}),className:"flex items-center justify-center w-7 h-7 bg-[#111] text-white hover:bg-[#2a2a2a] border-y border-[#222] transition-colors",title:"Zoom out",children:v.jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,className:"w-3.5 h-3.5",children:v.jsx("path",{d:"M5 12h14"})})}),v.jsx("button",{onClick:()=>i({padding:.3,duration:ap}),className:"flex items-center justify-center w-7 h-7 bg-[#111] text-white hover:bg-[#2a2a2a] transition-colors",title:"Fit view",children:v.jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,className:"w-3.5 h-3.5",children:v.jsx("path",{d:"M15 3h6v6M9 21H3v-6M21 3l-7 7M3 21l7-7"})})})]})})}function m8({agents:e,selectedAgentId:n,onSelectAgent:i,eventsLoaded:a,eventsEmpty:o,scanCompleted:s}){const[c,f,h]=lB([]),[d,p,m]=oB([]);ae.useEffect(()=>{if(e.size===0)return;const{nodes:N,edges:E}=d8(e,n);f(N),p(E)},[e.size,f,p]),ae.useEffect(()=>{e.size!==0&&f(N=>N.map(E=>{const k=e.get(E.id);return k?{...E,data:{...k,isSelected:E.id===n}}:E}))},[e,n,f]);const y=ae.useRef(!1),b=ae.useCallback((N,E)=>{y.current=!0,i(E.id)},[i]),_=ae.useCallback(()=>{if(y.current){y.current=!1;return}i(null)},[i]);if(e.size===0&&a&&o)return v.jsxs("div",{className:"flex flex-col items-center justify-center h-full text-center px-4",children:[v.jsx("div",{className:"w-10 h-10 mb-3 rounded-full bg-[#111] flex items-center justify-center",children:s?v.jsx("svg",{className:"w-5 h-5 text-[#444]",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:1.5,children:v.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M3.75 6A2.25 2.25 0 0 1 6 3.75h2.25A2.25 2.25 0 0 1 10.5 6v2.25a2.25 2.25 0 0 1-2.25 2.25H6a2.25 2.25 0 0 1-2.25-2.25V6ZM3.75 15.75A2.25 2.25 0 0 1 6 13.5h2.25a2.25 2.25 0 0 1 2.25 2.25V18a2.25 2.25 0 0 1-2.25 2.25H6A2.25 2.25 0 0 1 3.75 18v-2.25ZM13.5 6a2.25 2.25 0 0 1 2.25-2.25H18A2.25 2.25 0 0 1 20.25 6v2.25A2.25 2.25 0 0 1 18 10.5h-2.25a2.25 2.25 0 0 1-2.25-2.25V6ZM13.5 15.75a2.25 2.25 0 0 1 2.25-2.25H18a2.25 2.25 0 0 1 2.25 2.25V18A2.25 2.25 0 0 1 18 20.25h-2.25a2.25 2.25 0 0 1-2.25-2.25v-2.25Z"})}):v.jsx("div",{className:"w-2 h-2 rounded-full bg-blue-500 animate-pulse"})}),v.jsx("p",{className:"text-sm text-[#555]",children:s?"Agent trace data is not available for this pentest":"Waiting for agent dataโ€ฆ"})]});const S=e.size>0;return v.jsxs("div",{className:"relative h-full",children:[v.jsx("div",{className:`absolute inset-0 z-10 transition-opacity duration-500 ${S?"opacity-0 pointer-events-none":"opacity-100"}`,children:v.jsx(u8,{})}),v.jsx("div",{className:`h-full transition-opacity duration-500 ${S?"opacity-100":"opacity-0"}`,children:v.jsxs(aB,{nodes:c,edges:d,onNodesChange:h,onEdgesChange:m,onNodeClick:b,onPaneClick:_,nodeTypes:f8,nodesConnectable:!1,edgesFocusable:!1,edgesReconnectable:!1,minZoom:.15,maxZoom:1.5,proOptions:{hideAttribution:!0},className:"bg-black",children:[v.jsx(dB,{color:"#111",gap:20}),v.jsx(h8,{nodes:c}),v.jsx(p8,{}),v.jsx(DB,{position:"bottom-left",nodeColor:N=>{var k;const E=(k=N.data)==null?void 0:k.status;return E==="running"?"#3b82f6":E==="completed"?"#10b981":E==="failed"||E==="error"?"#ef4444":"#555"},maskColor:"rgba(0,0,0,0.8)",style:{width:80,height:50},className:"!bg-[#0a0a0a] !border-[#222]"})]})})]})}function Al({text:e,className:n=""}){return v.jsx("div",{className:`prose-markdown ${n}`,children:v.jsx(sm,{remarkPlugins:[dm],rehypePlugins:[hm],components:pm,children:e})})}const x_=6,v_=20;function Ln({text:e,maxLines:n=20}){const[i,a]=ae.useState(!1),s=e.trimEnd().split(` +`).length>n;return v.jsxs("div",{children:[v.jsx("div",{className:i&&s?"max-h-[1200px] overflow-auto":"",style:!i&&s?{display:"-webkit-box",WebkitLineClamp:n,WebkitBoxOrient:"vertical",overflow:"hidden"}:void 0,children:v.jsx(Al,{text:e})}),s&&v.jsx("button",{onClick:()=>a(!i),className:"text-xs text-[#555] hover:text-[#888] mt-1",children:i?"Show less":"Show more"})]})}function gr({children:e,className:n=""}){const[i,a]=ae.useState(!1),s=typeof e=="string"?e.trimEnd().split(` +`):null,c=s!==null&&s.length>x_,f=c&&!i?s.slice(0,x_).join(` +`):e;return v.jsxs("div",{children:[v.jsx("pre",{className:`font-mono text-[13px] leading-relaxed whitespace-pre-wrap break-words mt-1 ${i?"overflow-auto max-h-[1200px]":"overflow-hidden"} ${n}`,children:f}),c&&v.jsx("button",{onClick:()=>a(!i),className:"text-xs text-[#555] hover:text-[#888] mt-0.5",children:i?"Show less":"Show more"})]})}function Dm({code:e,language:n,className:i="",collapsible:a=!1}){const[o,s]=ae.useState(!1),c=e.trimEnd().split(` +`),f=a&&c.length>v_,h=f&&!o?c.slice(0,v_).join(` +`):e;let d;try{d=n?Fn.highlight(h,{language:n,ignoreIllegals:!0}).value:Fn.highlightAuto(h).value}catch{d=Fn.highlightAuto(h).value}return v.jsxs("div",{children:[v.jsx("pre",{className:`font-mono text-[12px] leading-relaxed px-0 py-1 mt-1 whitespace-pre-wrap break-all ${a?o?"overflow-auto max-h-[1200px]":"overflow-hidden":"overflow-auto max-h-[400px]"} ${i}`,children:v.jsx("code",{dangerouslySetInnerHTML:{__html:d}})}),f&&v.jsx("button",{onClick:()=>s(!o),className:"text-xs text-[#555] hover:text-[#888] mt-0.5",children:o?"Show less":"Show more"})]})}const g8=50,__=200,E_=25,w_=24,b8=[/\n?\[Command still running after [\d.]+s - showing output so far\.?\s*(?:Use C-c to interrupt if needed\.)?\]/g,/^\[Below is the output of the previous command\.\]\n?/gm,/^No command is currently running\. Cannot send input\.$/gm,/^A command is already running\. Use is_input=true to send input to it, or interrupt it first \(e\.g\., with C-c\)\.$/gm],y8=/^Chunk ID: [0-9a-f]+\s*$/,x8=[/^Wall time: [\d.]+ seconds\s*$/,/^Process exited with code -?\d+\s*$/,/^Process running with session ID \d+\s*$/,/^Original token count: \d+\s*$/];function v8(e){const n=[];for(let i=0;io.test(e[a]));)a++;a__?e.slice(0,__-3)+"...":e}function E8(e,n=""){let i=e.replace(/\x1b(?:[@-Z\\-_]|\[[0-?]*[ -/]*[@-~]|\][^\x07]*\x07)/g,"").replace(/\r/g,"");for(const a of b8)i=i.replace(a,"");if(i.trim()){const a=v8(i.split(` +`)),o=[];for(const s of a)o.length===0&&!s.trim()||/^\[STRIX_\d+\]\$\s*/.test(s)||n&&s.trim()===n.trim()||n&&new RegExp(`^[\\$#>]\\s*${_8(n.trim())}\\s*$`).test(s)||o.push(s);for(;o.length>0&&/^\[STRIX_\d+\]\$\s*/.test(o[o.length-1]);)o.pop();i=o.join(` +`)}return i.trim()}function w8(e){const n=e.split(` +`);if(n.length<=g8)return n.map(lp).join(` +`);const i=n.length-E_-w_;return[...n.slice(0,E_).map(lp),`... ${i} lines truncated ...`,...n.slice(-w_).map(lp)].join(` +`)}function S8({toolName:e,args:n,result:i}){const a=e==="write_stdin",o=a?n.chars??n.input??"":n.command??n.cmd??"",s=i;let c=null,f=null,h=null;if(s&&typeof s=="object"){c=typeof s.content=="string"?s.content:null,f=typeof s.error=="string"?s.error:null,h=typeof s.exit_code=="number"?s.exit_code:null;const p=typeof s.status=="string"?s.status:"";(p==="running"||p==="command still running")&&(c=null)}else typeof s=="string"&&(c=s);const d=c?w8(E8(c,o)):null;return v.jsxs("div",{children:[v.jsx("span",{className:"text-emerald-400/80 font-semibold text-sm",children:a?"Terminal input":"Terminal"}),o&&v.jsx(Dm,{code:o,language:"bash",collapsible:!0}),f&&v.jsx(gr,{className:"text-red-400/70",children:f}),d&&v.jsx(gr,{className:"text-[#666]",children:d}),h!=null&&h!==0&&v.jsxs("div",{className:"font-mono text-[13px] text-red-400/70 mt-0.5",children:["exit code ",h]})]})}const S_={back:"going back in browser history",forward:"going forward in browser history",scroll_down:"scrolling down",scroll_up:"scrolling up",refresh:"refreshing",close_tab:"closing tab",switch_tab:"switching tab",list_tabs:"listing tabs",view_source:"viewing page source",get_console_logs:"getting console logs",screenshot:"taking screenshot",wait:"waiting...",close:"closing"},N_={click:"clicking",double_click:"double clicking",hover:"hovering"};function op({prefix:e,url:n,suffix:i}){return v.jsxs("span",{className:"text-[#888] text-[13px]",children:[e,n&&v.jsx("a",{href:n,target:"_blank",rel:"noopener noreferrer",className:"text-cyan-400/80 hover:underline",children:n}),i]})}function N8(e){const n=e.action??"",i=e.url??void 0;if(n in S_)return S_[n];if(n==="launch")return i?v.jsx(op,{prefix:"launching ",url:i}):"launching";if(n==="goto"||n==="navigate")return v.jsx(op,{prefix:"navigating to ",url:i});if(n==="new_tab")return v.jsx(op,{prefix:"opening tab ",url:i});if(n in N_)return N_[n];if(n==="type")return`typing "${(e.text??"").slice(0,40)}"`;if(n==="press_key"||n==="key_press")return`pressing key ${e.key??""}`;if(n==="save_pdf"||n==="save_as_pdf"){const a=e.file_path??"";return`saving PDF${a?` to ${a}`:""}`}return n==="execute_js"?"executing javascript":n||"browser action"}function k8({args:e}){const i=(e.action??"")==="execute_js"?e.js_code??e.code??"":"",a=N8(e);return v.jsxs("div",{children:[v.jsxs("div",{className:"flex items-center gap-2 min-w-0",children:[v.jsx("span",{className:"text-blue-400/80 font-semibold text-sm shrink-0",children:"Browser"}),v.jsx("span",{className:"min-w-0 truncate text-[#888] text-[13px]",children:a})]}),i&&v.jsx(Dm,{code:i,language:"javascript",collapsible:!0})]})}function Lm(e){return e.length>60?"..."+e.slice(-57):e}const Fc=30;function T8({toolName:e,args:n}){const i=n.path??n.file_path??"",a=n.command??"",o=n.old_str??"",s=n.new_str??"",c=n.regex??"";let f;e==="list_files"?f="list":e==="search_files"?f="search":a==="view"?f="view":a==="create"?f="create":a==="str_replace"?f="edit":a==="undo_edit"?f="undo":a==="insert"?f="insert":f="file";const h=i?Lm(i):"",d=c?` /${c}/`:"",p=o?o.split(` +`):[],m=s?s.split(` +`):[],y=p.length+m.length,b=y>Fc,_=b?Math.round(Fc*(p.length/y)):p.length,S=b?Fc-_:m.length;return v.jsxs("div",{children:[v.jsxs("div",{className:"flex items-baseline gap-2",children:[v.jsx("span",{className:"text-sky-400/80 font-semibold text-sm shrink-0",children:f}),h&&v.jsx("span",{className:"text-[#888] font-mono text-[13px] break-all",children:h})]}),d&&v.jsx("div",{className:"text-purple-400/60 font-mono text-[13px] break-all mt-0.5",children:d}),(o||s)&&v.jsxs("div",{className:"font-mono text-[13px] leading-relaxed mt-1.5",children:[p.slice(0,_).map((N,E)=>v.jsxs("div",{className:"text-red-400/60",children:[v.jsx("span",{className:"select-none text-red-400/30 mr-1",children:"-"}),N]},`o${E}`)),m.slice(0,S).map((N,E)=>v.jsxs("div",{className:"text-emerald-400/60",children:[v.jsx("span",{className:"select-none text-emerald-400/30 mr-1",children:"+"}),N]},`n${E}`)),b&&v.jsxs("div",{className:"text-[#444] mt-0.5",children:["... ",y-Fc," more lines"]})]})]})}const Gc=30,A8="*** Begin Patch",C8="*** End Patch",k_="*** Add File: ",T_="*** Update File: ",A_="*** Delete File: ",M8={add:"create",update:"edit",delete:"delete"};function O8(e){const n=e.patch;return typeof n=="string"?n:n&&typeof n=="object"&&typeof n.patch=="string"?n.patch:typeof e.input=="string"?e.input:""}function R8(e){const n=[];let i=null;const a=()=>{i&&n.push(i),i=null};for(const o of e.split(` +`))if(!(o===A8||o===C8))if(o.startsWith(k_))a(),i={kind:"add",path:o.slice(k_.length).trim(),oldLines:[],newLines:[]};else if(o.startsWith(T_))a(),i={kind:"update",path:o.slice(T_.length).trim(),oldLines:[],newLines:[]};else if(o.startsWith(A_))a(),i={kind:"delete",path:o.slice(A_.length).trim(),oldLines:[],newLines:[]};else if((i==null?void 0:i.kind)==="update"){if(o.startsWith("@@"))continue;o.startsWith("-")&&!o.startsWith("---")?i.oldLines.push(o.slice(1)):o.startsWith("+")&&!o.startsWith("+++")&&i.newLines.push(o.slice(1))}else(i==null?void 0:i.kind)==="add"&&(o.startsWith("+")?i.newLines.push(o.slice(1)):o.trim()&&i.newLines.push(o));return a(),n}function D8({op:e}){const n=M8[e.kind]??"file",i=e.oldLines.length+e.newLines.length,a=i>Gc,o=a&&i>0?Math.round(Gc*(e.oldLines.length/i)):e.oldLines.length,s=a?Gc-o:e.newLines.length;return v.jsxs("div",{children:[v.jsxs("div",{className:"flex items-baseline gap-2",children:[v.jsx("span",{className:"text-sky-400/80 font-semibold text-sm shrink-0",children:n}),e.path&&v.jsx("span",{className:"text-[#888] font-mono text-[13px] break-all",children:Lm(e.path)})]}),(e.oldLines.length>0||e.newLines.length>0)&&v.jsxs("div",{className:"font-mono text-[13px] leading-relaxed mt-1.5",children:[e.oldLines.slice(0,o).map((c,f)=>v.jsxs("div",{className:"text-red-400/60",children:[v.jsx("span",{className:"select-none text-red-400/30 mr-1",children:"-"}),c]},`o${f}`)),e.newLines.slice(0,s).map((c,f)=>v.jsxs("div",{className:"text-emerald-400/60",children:[v.jsx("span",{className:"select-none text-emerald-400/30 mr-1",children:"+"}),c]},`n${f}`)),a&&v.jsxs("div",{className:"text-[#444] mt-0.5",children:["... ",i-Gc," more lines"]})]})]})}function L8({args:e,result:n,status:i}){const a=R8(O8(e));return a.length===0?v.jsxs("div",{children:[v.jsx("span",{className:"text-sky-400/80 font-semibold text-sm",children:"patch"}),i==="failed"&&typeof n=="string"&&n.trim()&&v.jsx("div",{className:"text-red-400/70 text-[13px] mt-1",children:n.trim()})]}):v.jsxs("div",{className:"space-y-2",children:[a.map((o,s)=>v.jsx(D8,{op:o},s)),i==="failed"&&typeof n=="string"&&n.trim()&&v.jsx("div",{className:"text-red-400/70 text-[13px]",children:n.trim()})]})}function z8({args:e,result:n}){const i=(e.path??"").trim(),a=n;let o=null;if(typeof a=="string"){const s=a.trim();s&&!s.toLowerCase().startsWith("data:image/")&&!s.startsWith("{")&&(o=s)}return v.jsxs("div",{children:[v.jsxs("div",{className:"flex items-baseline gap-2",children:[v.jsx("span",{className:"text-sky-400/80 font-semibold text-sm shrink-0",children:"view image"}),i&&v.jsx("span",{className:"text-[#888] font-mono text-[13px] break-all",children:Lm(i)})]}),o&&v.jsx("div",{className:"text-red-400/70 text-[13px] mt-1",children:o})]})}const I8={critical:"text-red-400",high:"text-orange-400",medium:"text-yellow-400",low:"text-blue-400",info:"text-cyan-400"};function j8({args:e,result:n}){const i=e.title??"",a=e.description??"",o=e.impact??"",s=e.target??"",c=e.endpoint??"",f=e.method??"",h=e.technical_analysis??"",d=e.poc_description??"",p=e.poc_script_code??"",m=e.remediation_steps??"",y=e.cve??"",b=e.cwe??"",_=n,S=(_&&typeof _=="object"?_.severity:null)??e.severity??"medium",N=String(S).toLowerCase(),E=(_&&typeof _=="object"?_.cvss_score:null)??e.cvss??null,k=I8[N]??"text-yellow-400";return v.jsxs("div",{className:"space-y-3",children:[v.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[v.jsx("span",{className:`font-semibold text-sm ${k}`,children:N.toUpperCase()}),E!=null&&v.jsxs("span",{className:"text-[#888] text-[13px]",children:["CVSS ",E]}),y&&v.jsx("span",{className:"text-[#888] font-mono text-[13px]",children:y}),b&&v.jsx("span",{className:"text-[#888] font-mono text-[13px]",children:b})]}),i&&v.jsx("div",{className:"text-[15px] text-white/80 font-semibold",children:i}),(s||c)&&v.jsxs("div",{className:"text-[13px] text-[#888] font-mono",children:[s,c?` ${f} ${c}`:""]}),a&&v.jsx(Ln,{text:a,maxLines:20}),o&&v.jsxs("div",{children:[v.jsx("span",{className:"text-emerald-400/60 text-sm font-semibold",children:"Impact"}),v.jsx("div",{className:"mt-1",children:v.jsx(Ln,{text:o,maxLines:15})})]}),h&&v.jsxs("div",{children:[v.jsx("span",{className:"text-emerald-400/60 text-sm font-semibold",children:"Technical Analysis"}),v.jsx("div",{className:"mt-1",children:v.jsx(Ln,{text:h,maxLines:20})})]}),(d||p)&&v.jsxs("div",{children:[v.jsx("span",{className:"text-emerald-400/60 text-sm font-semibold",children:"Proof of Concept"}),d&&v.jsx("div",{className:"mt-1",children:v.jsx(Al,{text:d})}),p&&v.jsx(fE,{children:p})]}),m&&v.jsxs("div",{children:[v.jsx("span",{className:"text-emerald-400/60 text-sm font-semibold",children:"Remediation"}),v.jsx("div",{className:"mt-1",children:v.jsx(Ln,{text:m,maxLines:15})})]})]})}const nS=200,iS={GET:"text-emerald-400/80",POST:"text-blue-400/80",PUT:"text-yellow-400/80",PATCH:"text-orange-400/80",DELETE:"text-red-400/80"};function zm(e){return e<300?"text-emerald-400/80":e<400?"text-yellow-400/80":e<500?"text-orange-400/80":"text-red-400/80"}function Pi(e,n=80){return e.length>n?e.slice(0,n-3)+"...":e}function Hp(e,n=150){return Pi(e.replace(/\n/g," ").replace(/\r/g,"").replace(/\t/g," "),n)}function $p(e,n){const i=e.split(` +`),a=i.slice(0,n).map(o=>Pi(o,nS-5)).join(` +`);return i.length>n?a+` +...`:a}function B8({args:e,result:n}){const i=e.httpql_filter??"",a=n,o=a?a.requests:null,s=Array.isArray(o)?o:[];return v.jsxs("div",{children:[v.jsxs("div",{className:"flex items-center gap-2",children:[v.jsx("span",{className:"text-purple-400/80 font-semibold text-sm",children:"listing requests"}),i&&v.jsx("span",{className:"text-[#888] text-[13px]",children:Pi(i,150)})]}),s.length>0&&v.jsxs("div",{className:"mt-1.5 font-mono text-[13px] space-y-0.5",children:[s.slice(0,20).map((c,f)=>{const h=(c.method??"GET").toUpperCase(),d=c.host??"",p=c.path??"",m=c.response,y=(m==null?void 0:m.statusCode)??null;return v.jsxs("div",{className:"flex gap-2",children:[v.jsx("span",{className:`w-10 shrink-0 font-bold ${iS[h]??"text-[#888]"}`,children:h}),v.jsx("span",{className:"text-[#777] truncate",children:Pi(d+p,180)}),y!=null&&v.jsx("span",{className:`ml-auto shrink-0 ${zm(y)}`,children:y})]},f)}),s.length>20&&v.jsxs("div",{className:"text-[#555]",children:["... +",s.length-20," more"]})]})]})}function U8({args:e,result:n}){const i=e.request_id,a=e.part??"request",o=e.search_pattern??"",s=n,c=s?s.matches:null,f=Array.isArray(c)?c:[],h=s?s.content??null:null,d=s?!!s.has_more:!1;return v.jsxs("div",{children:[v.jsxs("div",{className:"flex items-center gap-2",children:[v.jsxs("span",{className:"text-purple-400/80 font-semibold text-sm",children:[o?"searching":"viewing"," ",a]}),i!=null&&v.jsxs("span",{className:"text-[#888] text-[13px]",children:["#",i]}),o&&v.jsxs("span",{className:"text-[#666] font-mono text-[13px]",children:["/",Pi(o,100),"/"]})]}),f.length>0&&v.jsxs("div",{className:"mt-1.5 font-mono text-[13px] space-y-1",children:[f.slice(0,5).map((p,m)=>{const y=(p.before??"").replace(/\n/g," ").replace(/\r/g,"").slice(-100),b=(p.after??"").replace(/\n/g," ").replace(/\r/g,"").slice(0,100);return v.jsxs("div",{children:[y&&v.jsxs("span",{className:"text-[#555]",children:["...",y]}),v.jsx("span",{className:"text-amber-400/80 font-bold",children:p.match}),b&&v.jsxs("span",{className:"text-[#555]",children:[b,"..."]})]},m)}),f.length>5&&v.jsxs("div",{className:"text-[#555]",children:["... +",f.length-5," more matches"]})]}),h&&!f.length&&(()=>{const p=h.split(` +`),m=p.slice(0,15).map(b=>Pi(b,nS)).join(` +`),y=d||p.length>15;return v.jsx(gr,{className:"text-[#666]",children:m+(y?` +... more content available`:"")})})()]})}function H8({args:e,result:n}){const i=(e.method??"GET").toUpperCase(),a=e.url??"",o=e.headers,s=e.body,c=typeof s=="string"?s:"",f=n,h=f?f.error??null:null,d=f?f.status_code??null:null,p=f?f.response_time_ms??null:null,m=f?f.body:null,y=typeof m=="string"?m:null;return v.jsxs("div",{children:[v.jsx("span",{className:"text-purple-400/80 font-semibold text-sm",children:"request"}),v.jsxs("div",{className:"mt-1.5 font-mono text-[13px] space-y-0.5",children:[v.jsxs("div",{children:[v.jsx("span",{className:"text-[#555] select-none mr-1",children:">>"}),v.jsx("span",{className:`font-bold ${iS[i]??"text-[#888]"}`,children:i}),v.jsx("span",{className:"text-[#888] ml-1 break-all",children:Pi(a,180)})]}),o&&typeof o=="object"&&Object.entries(o).slice(0,5).map(([b,_])=>v.jsxs("div",{className:"text-[#555] pl-5",children:[b,": ",Hp(String(_),150)]},b))]}),c&&v.jsx(gr,{className:"text-[#888]",children:$p(c,4)}),h&&v.jsx("div",{className:"text-red-400/70 text-[13px] mt-1.5",children:Hp(h,150)}),d!=null&&v.jsxs("div",{className:"font-mono text-[13px] mt-1.5",children:[v.jsx("span",{className:"text-[#555] select-none mr-1",children:"<<"}),v.jsx("span",{className:`font-bold ${zm(d)}`,children:d}),p!=null&&v.jsxs("span",{className:"text-[#555] ml-2",children:[p,"ms"]})]}),y&&v.jsx(gr,{className:"text-[#666]",children:$p(y,6)})]})}function $8({args:e,result:n}){const i=e.request_id,a=e.modifications,o=n,s=o?o.status_code??null:null,c=o?o.response_time_ms??null:null,f=o?o.body:null,h=typeof f=="string"?f:null;return v.jsxs("div",{children:[v.jsxs("div",{className:"flex items-center gap-2",children:[v.jsx("span",{className:"text-purple-400/80 font-semibold text-sm",children:"repeating request"}),i!=null&&v.jsxs("span",{className:"text-[#888] text-[13px]",children:["#",i]})]}),a&&typeof a=="object"&&Object.keys(a).length>0&&v.jsx("div",{className:"mt-1.5 font-mono text-[13px] space-y-0.5",children:Object.entries(a).slice(0,5).map(([d,p])=>v.jsxs("div",{children:[v.jsxs("span",{className:"text-orange-400/60",children:[d,":"]})," ",v.jsx("span",{className:"text-[#777]",children:Hp(typeof p=="string"?p:JSON.stringify(p),150)})]},d))}),s!=null&&v.jsxs("div",{className:"font-mono text-[13px] mt-1.5",children:[v.jsx("span",{className:"text-[#555] select-none mr-1",children:"<<"}),v.jsx("span",{className:`font-bold ${zm(s)}`,children:s}),c!=null&&v.jsxs("span",{className:"text-[#555] ml-2",children:[c,"ms"]})]}),h&&v.jsx(gr,{className:"text-[#666]",children:$p(h,5)})]})}const q8={get:"getting",list:"listing",create:"creating",update:"updating",delete:"deleting"};function P8({args:e}){const n=e.action??"",i=e.scope_name??"",a=q8[n]??(n||"managing");return v.jsxs("div",{className:"flex items-center gap-2",children:[v.jsxs("span",{className:"text-purple-400/80 font-semibold text-sm",children:[a," proxy scope"]}),i&&v.jsx("span",{className:"text-[#888] text-[13px]",children:Pi(i,50)})]})}function F8({args:e}){const n=e.parent_id;return v.jsxs("div",{className:"flex items-center gap-2",children:[v.jsx("span",{className:"text-purple-400/80 font-semibold text-sm",children:"listing sitemap"}),n&&v.jsxs("span",{className:"text-[#888] text-[13px]",children:["under #",Pi(String(n),20)]})]})}function G8({args:e}){const n=e.entry_id;return v.jsxs("div",{className:"flex items-center gap-2",children:[v.jsx("span",{className:"text-purple-400/80 font-semibold text-sm",children:"viewing sitemap entry"}),n&&v.jsxs("span",{className:"text-[#888] text-[13px]",children:["#",Pi(String(n),20)]})]})}function V8(e){switch(e.toolName){case"list_requests":return v.jsx(B8,{...e});case"view_request":return v.jsx(U8,{...e});case"send_request":return v.jsx(H8,{...e});case"repeat_request":return v.jsx($8,{...e});case"scope_rules":return v.jsx(P8,{...e});case"list_sitemap":return v.jsx(F8,{...e});case"view_sitemap_entry":return v.jsx(G8,{...e});default:return v.jsx("span",{className:"text-purple-400/80 font-semibold text-sm",children:e.toolName.replace(/_/g," ")})}}function Y8({args:e}){const n=e.thought??e.content??"";return n?v.jsxs("div",{children:[v.jsx("span",{className:"text-purple-400/80 font-semibold text-sm",children:"Agent is thinking"}),v.jsx("div",{className:"mt-1.5 italic text-[#888]",children:v.jsx(Ln,{text:n,maxLines:20})})]}):null}function X8({toolName:e,args:n}){if(e==="create_agent"){const i=n.name??n.agent_name??"",a=n.task??"";return v.jsxs("div",{children:[v.jsxs("div",{className:"flex items-center gap-2",children:[v.jsx("span",{className:"text-cyan-400/80 font-semibold text-sm",children:"spawning"}),i&&v.jsx("span",{className:"text-cyan-400 font-semibold text-sm",children:i})]}),a&&v.jsx("div",{className:"mt-1.5",children:v.jsx(Ln,{text:a,maxLines:15})})]})}if(e==="agent_finish"){const i=n.result_summary??"",a=n.success,o=n.findings,s=Array.isArray(o)?o:void 0;return v.jsxs("div",{children:[v.jsx("span",{className:`font-semibold text-sm ${a===!1?"text-red-400/80":"text-emerald-400/80"}`,children:a===!1?"Agent failed":"Agent completed"}),i&&v.jsx("div",{className:"mt-1.5",children:v.jsx(Ln,{text:i,maxLines:20})}),s&&s.length>0&&v.jsx("div",{className:"mt-1.5 space-y-0.5",children:s.map((c,f)=>v.jsxs("div",{className:"text-[13px] text-[#888]",children:[v.jsx("span",{className:"text-red-400/50 mr-1",children:"โ€ข"}),typeof c=="string"?c:JSON.stringify(c)]},f))})]})}if(e==="send_message_to_agent"){const i=n.message??"",a=n.target_agent_id??n.agent_id??"";return v.jsxs("div",{children:[v.jsxs("div",{className:"flex items-center gap-2",children:[v.jsx("span",{className:"text-cyan-400/80 font-semibold text-sm",children:"message"}),a&&v.jsxs("span",{className:"text-[#888] text-[13px]",children:["to ",a.slice(0,16)]})]}),i&&v.jsx("div",{className:"mt-1.5",children:v.jsx(Ln,{text:i,maxLines:20})})]})}if(e==="wait_for_message"){const i=n.reason??"";return v.jsxs("div",{className:"flex items-center gap-2",children:[v.jsx("span",{className:"text-cyan-400/80 font-semibold text-sm",children:"waiting"}),i&&v.jsx("span",{className:"text-[#888] text-[13px] truncate",children:i})]})}if(e==="stop_agent"){const i=n.target_agent_id??"",a=n.cascade!==!1,o=n.reason??"";return v.jsxs("div",{children:[v.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[v.jsx("span",{className:"text-red-400/80 font-semibold text-sm",children:"stopping"}),i&&v.jsx("span",{className:"text-[#888] text-[13px]",children:i.slice(0,16)}),a&&v.jsx("span",{className:"text-[#555] text-[13px] italic",children:"+ descendants"})]}),o&&v.jsx("div",{className:"mt-1.5 text-[#888] text-[13px]",children:o})]})}return e==="view_agent_graph"?v.jsx("span",{className:"text-cyan-400/80 font-semibold text-sm",children:"viewing agents graph"}):v.jsx("span",{className:"text-cyan-400/80 font-semibold text-sm",children:e.replace(/_/g," ")})}function K8({args:e,result:n}){const i=e.query??e.search_query??"",a=n,o=a?a.content??null:null,s=a&&!a.success?a.message??null:null;return v.jsxs("div",{children:[v.jsx("span",{className:"text-amber-400/80 font-semibold text-sm",children:"Searching the web"}),i&&v.jsx("div",{className:"text-[#888] text-[13px] mt-0.5",children:i}),s&&v.jsx("div",{className:"text-red-400/70 text-[13px] mt-1.5",children:s}),o&&v.jsx("div",{className:"mt-2",children:v.jsx(Ln,{text:o,maxLines:15})})]})}const Z8=50,C_=200,M_=25,O_=24,Q8=/\x1b(?:[@-Z\\-_]|\[[0-?]*[ -/]*[@-~]|\][^\x07]*\x07)/g,W8=/\.\.\. \[(stdout|stderr|result|output|error) truncated at \d+k? chars\]/g;function J8(e){return e.replace(Q8,"")}function sp(e){const n=J8(e);return n.length>C_?n.slice(0,C_-3)+"...":n}function e9(e){return e.replace(W8,"").trim()}function t9(e){const n=e.split(` +`);if(n.length<=Z8)return n.map(sp).join(` +`);const i=n.length-M_-O_;return[...n.slice(0,M_).map(sp),`... ${i} lines truncated ...`,...n.slice(-O_).map(sp)].join(` +`)}function n9({args:e,result:n}){const i=e.action??"",a=e.code??e.script??"",o=n;let s=null;o&&typeof o=="object"?s=typeof o.stdout=="string"?o.stdout:null:typeof o=="string"&&(s=o);const c=i==="new_session"?"new session":i==="close"?"close session":i==="list_sessions"?"list sessions":null,f=s?t9(e9(s)):null;return v.jsxs("div",{children:[v.jsxs("div",{className:"flex items-center gap-2",children:[v.jsx("span",{className:"text-yellow-400/80 font-semibold text-sm",children:"Python"}),c&&v.jsx("span",{className:"text-[#888] text-[13px]",children:c})]}),a&&v.jsx(Dm,{code:a,language:"python",collapsible:!0}),f&&v.jsx(gr,{className:"text-[#666]",children:f})]})}function i9({args:e}){const n=e.targets,a=(Array.isArray(n)?n:[]).map(o=>typeof o=="object"&&o?o.original??null:null).filter(Boolean);return v.jsxs("div",{children:[v.jsxs("div",{className:"flex items-center gap-2",children:[v.jsx("span",{className:"text-emerald-400/80 font-semibold text-sm",children:"Starting penetration test"}),a.length===1&&v.jsxs("span",{className:"text-[#888] text-[13px]",children:["on ",a[0]]})]}),a.length>1&&v.jsx("div",{className:"mt-1.5 space-y-0.5",children:a.map((o,s)=>v.jsxs("div",{className:"text-[13px] text-[#888]",children:[v.jsx("span",{className:"text-[#555] mr-1",children:"โ€ข"}),o]},s))})]})}function r9({args:e}){const n=e.name??"Unknown Agent",i=e.task??"";return v.jsxs("div",{children:[v.jsxs("div",{className:"flex items-center gap-2",children:[v.jsx("span",{className:"text-[#888] text-[13px]",children:"subagent"}),v.jsx("span",{className:"text-purple-400 font-semibold text-sm",children:n})]}),i&&v.jsx("div",{className:"mt-1.5",children:v.jsx(Ln,{text:i,maxLines:15})})]})}function a9(e){return e.toolName==="subagent_start_info"?v.jsx(r9,{...e}):v.jsx(i9,{...e})}function l9({args:e}){const n=e.executive_summary??"",i=e.methodology??"",a=e.technical_analysis??"",o=e.recommendations??"";return v.jsxs("div",{className:"space-y-3",children:[v.jsx("span",{className:"text-emerald-400/80 font-semibold text-sm",children:"Penetration test completed"}),n&&v.jsxs("div",{children:[v.jsx("span",{className:"text-emerald-400/60 text-sm font-semibold",children:"Executive Summary"}),v.jsx("div",{className:"mt-1",children:v.jsx(Ln,{text:n,maxLines:25})})]}),i&&v.jsxs("div",{children:[v.jsx("span",{className:"text-emerald-400/60 text-sm font-semibold",children:"Methodology"}),v.jsx("div",{className:"mt-1",children:v.jsx(Ln,{text:i,maxLines:25})})]}),a&&v.jsxs("div",{children:[v.jsx("span",{className:"text-emerald-400/60 text-sm font-semibold",children:"Technical Analysis"}),v.jsx("div",{className:"mt-1",children:v.jsx(Ln,{text:a,maxLines:25})})]}),o&&v.jsxs("div",{children:[v.jsx("span",{className:"text-emerald-400/60 text-sm font-semibold",children:"Recommendations"}),v.jsx("div",{className:"mt-1",children:v.jsx(Ln,{text:o,maxLines:25})})]}),!n&&!i&&!a&&!o&&v.jsx("div",{className:"text-[#555] text-xs",children:"Generating final report..."})]})}function o9({toolName:e,args:n,result:i}){if(e==="create_note"){const a=n.title??"",o=n.content??"",s=n.category??"general";return v.jsxs("div",{children:[v.jsxs("div",{className:"flex items-center gap-2",children:[v.jsx("span",{className:"text-amber-400/80 font-semibold text-sm",children:"note"}),v.jsxs("span",{className:"text-[#555] text-[13px]",children:["(",s,")"]})]}),a&&v.jsx("div",{className:"mt-1.5 text-[#999] text-[13px]",children:a}),o&&v.jsx("div",{className:"mt-1",children:v.jsx(Al,{text:o})})]})}if(e==="delete_note")return v.jsx("span",{className:"text-amber-400/80 font-semibold text-sm",children:"note removed"});if(e==="update_note"){const a=n.title??"",o=n.content??"";return v.jsxs("div",{children:[v.jsx("span",{className:"text-amber-400/80 font-semibold text-sm",children:"note updated"}),a&&v.jsx("div",{className:"mt-1.5 text-[#999] text-[13px]",children:a}),o&&v.jsx("div",{className:"mt-1",children:v.jsx(Al,{text:o})})]})}if(e==="get_note"){const a=i,o=a&&typeof a=="object"&&a.success?a.note:void 0;return v.jsxs("div",{children:[v.jsx("span",{className:"text-amber-400/80 font-semibold text-sm",children:"note read"}),o&&v.jsxs(v.Fragment,{children:[v.jsxs("div",{className:"mt-1.5 text-[#999] text-[13px]",children:[o.title??"(untitled)",v.jsxs("span",{className:"text-[#555] ml-1",children:["(",o.category??"general",")"]})]}),o.content&&v.jsx("div",{className:"mt-1",children:v.jsx(Al,{text:o.content})})]})]})}if(e==="list_notes"){const a=i;let o=[];if(a&&typeof a=="object"&&a.success){const s=a.notes;o=Array.isArray(s)?s:[]}return v.jsxs("div",{children:[v.jsx("span",{className:"text-amber-400/80 font-semibold text-sm",children:"notes"}),o.length>0?v.jsx("div",{className:"mt-1.5 space-y-0.5",children:o.map((s,c)=>v.jsxs("div",{className:"text-[13px]",children:[v.jsx("span",{className:"text-[#555] mr-1",children:"-"}),v.jsx("span",{className:"text-[#999]",children:s.title??"(untitled)"}),v.jsxs("span",{className:"text-[#555] ml-1",children:["(",s.category??"general",")"]}),s.content&&v.jsx("div",{className:"ml-3",children:v.jsx(Al,{text:s.content})})]},c))}):v.jsx("div",{className:"mt-1 text-[#555] text-xs",children:"No notes"})]})}return v.jsx("span",{className:"text-amber-400/80 font-semibold text-sm",children:"note"})}const s9={create_todo:{label:"Task added",Icon:C2},list_todos:{label:"Plan",Icon:$k},update_todo:{label:"Task updated",Icon:T2},mark_todo_done:{label:"Task completed",Icon:H_},mark_todo_pending:{label:"Task reopened",Icon:z2},delete_todo:{label:"Task removed",Icon:Y2}};function c9({status:e}){return e==="done"?v.jsx(H_,{className:"w-3.5 h-3.5 text-emerald-400/70 shrink-0"}):e==="in_progress"?v.jsx(Qk,{className:"w-3.5 h-3.5 text-purple-400/70 shrink-0 animate-pulse"}):v.jsx(Jk,{className:"w-3.5 h-3.5 text-[#444] shrink-0"})}function u9({todos:e,highlightId:n}){return v.jsx("div",{className:"space-y-0",children:e.map((i,a)=>{const o=i.status??"pending",s=n&&i.id===n;return v.jsxs("div",{className:`flex items-start gap-2.5 py-1.5 px-2 -mx-2 rounded-md transition-colors ${s?"bg-purple-500/[0.08]":""}`,children:[v.jsx("div",{className:"mt-[1px]",children:v.jsx(c9,{status:o})}),v.jsx("span",{className:`text-[13px] leading-snug ${o==="done"?"text-[#555] line-through":o==="in_progress"?"text-[#bbb]":"text-[#999]"}`,children:i.title??"(untitled)"})]},i.id??a)})})}function f9({toolName:e,args:n,result:i}){const a=s9[e]??{label:"Plan",Icon:O2},o=a.Icon,s=i;if(typeof s=="string"&&s.trim())return v.jsxs("div",{children:[v.jsxs("div",{className:"flex items-center gap-2",children:[v.jsx(o,{className:"w-3.5 h-3.5 text-purple-400/60"}),v.jsx("span",{className:"text-purple-400/80 font-semibold text-sm",children:a.label})]}),v.jsx("div",{className:"mt-1.5 text-[#888] text-[13px]",children:s.trim()})]});let c=[],f=null,h;if(s&&typeof s=="object"){if(f=s.error??null,s.success){const p=s.todos;c=Array.isArray(p)?p:[]}h=s.id??n.todo_id??void 0}const d=e!=="list_todos"?h:void 0;return c.length===0&&!f?v.jsxs("div",{className:"flex items-center gap-2",children:[v.jsx(o,{className:"w-3.5 h-3.5 text-purple-400/60"}),v.jsx("span",{className:"text-purple-400/80 font-semibold text-sm",children:a.label})]}):v.jsxs("div",{children:[v.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[v.jsx(o,{className:"w-3.5 h-3.5 text-purple-400/60"}),v.jsx("span",{className:"text-purple-400/80 font-semibold text-sm",children:a.label})]}),f&&v.jsx("div",{className:"text-red-400/70 text-[13px] mb-2",children:f}),c.length>0&&v.jsx("div",{className:"rounded-lg border border-white/[0.06] bg-white/[0.015] px-3 py-2",children:v.jsx(u9,{todos:c,highlightId:d})})]})}function R_(e){if(e==null)return null;if(typeof e=="string")return e.trim()?e:null;if(typeof e=="object"){const n=e;if(typeof n.__raw=="string")return n.__raw;if(Object.keys(n).length===0)return null;try{return JSON.stringify(e,null,2)}catch{return String(e)}}return String(e)}function rS({toolName:e,args:n,result:i}){const a=R_(n),o=R_(i);return v.jsxs("div",{children:[v.jsx("span",{className:"text-[#888] font-semibold text-sm",children:e.replace(/_/g," ")}),a&&v.jsx(gr,{className:"text-[#777]",children:a}),o&&v.jsx(gr,{className:"text-[#666]",children:o})]})}function d9({args:e}){const i=(e.skills??"").split(",").map(a=>a.trim()).filter(Boolean);return v.jsxs("div",{className:"flex items-center gap-2",children:[v.jsx("span",{className:"text-emerald-400/80 font-semibold text-sm",children:"Loading skill"}),i.length>0&&v.jsx("span",{className:"text-[#888] text-[13px]",children:i.join(", ")})]})}const zu={terminal:{renderer:S8,icon:G2,color:"text-emerald-400"},python:{renderer:n9,icon:n2,color:"text-yellow-400"},browser:{renderer:k8,icon:P_,color:"text-blue-400"},filesystem:{renderer:T8,icon:c2,color:"text-sky-400"},proxy:{renderer:V8,icon:Rk,color:"text-purple-400",match:/request|sitemap|scope/},reporting:{renderer:j8,icon:U2,color:"text-red-400"},thinking:{renderer:Y8,icon:U_,color:"text-purple-400"},agents:{renderer:X8,icon:qp,color:"text-cyan-400",match:/agent/},search:{renderer:K8,icon:j2,color:"text-amber-400"},lifecycle:{renderer:a9,icon:q_,color:"text-emerald-400"},notes:{renderer:o9,icon:P2,color:"text-amber-400",match:/note/},skills:{renderer:d9,icon:Ny,color:"text-emerald-400"},todos:{renderer:f9,icon:E2,color:"text-purple-400",match:/todo/},telemetry:{renderer:rS,icon:Ny,color:"text-[#555]"}},h9={terminal:["exec_command","write_stdin","terminal_execute"],python:["python_action"],browser:["browser_action"],filesystem:["apply_patch","view_image","str_replace_editor","list_files","search_files"],proxy:["list_requests","view_request","repeat_request","list_sitemap","view_sitemap_entry","scope_rules","send_request"],reporting:["create_vulnerability_report"],thinking:["think"],agents:["create_agent","agent_finish","send_message_to_agent","wait_for_message","view_agent_graph","stop_agent"],search:["web_search"],lifecycle:["scan_start_info","subagent_start_info","finish_scan"],notes:["create_note","delete_note","update_note","list_notes","get_note"],skills:["load_skill"],todos:["create_todo","list_todos","update_todo","mark_todo_done","mark_todo_pending","delete_todo"],telemetry:["sandbox_error_details","llm_error_details"]},p9=Object.fromEntries(Object.entries(h9).flatMap(([e,n])=>n.map(i=>[i,e]))),m9={finish_scan:l9,apply_patch:L8,view_image:z8},g9={agent_finish:{icon:q_,color:"text-cyan-400"},send_message_to_agent:{icon:Sy,color:"text-cyan-400"},wait_for_message:{icon:Sy,color:"text-cyan-400"},view_agent_graph:{icon:o2,color:"text-cyan-400"},stop_agent:{icon:B_,color:"text-red-400"},scan_start_info:{icon:a2,color:"text-emerald-400"},subagent_start_info:{icon:qp,color:"text-purple-400"},view_image:{icon:v2,color:"text-sky-400"}},b9=zu.telemetry;function aS(e){var i;const n=p9[e];if(n)return n;for(const[a,o]of Object.entries(zu))if((i=o.match)!=null&&i.test(e))return a;return null}function y9(e){const n=m9[e];if(n)return n;const i=aS(e);return i?zu[i].renderer:rS}function x9(e){const n=g9[e];if(n)return n;const i=aS(e),a=i?zu[i]:b9;return{icon:a.icon,color:a.color}}const v9=30;function _9({role:e,content:n}){const i=e==="user"||e==="human";return v.jsxs("div",{children:[v.jsx("span",{className:`font-semibold text-sm ${i?"text-blue-400/80":"text-purple-400/80"}`,children:i?"User":"Thinking"}),v.jsx("div",{className:"mt-1.5 italic text-[#888]",children:v.jsx(Ln,{text:n,maxLines:v9})})]})}class E9 extends ae.Component{constructor(n){super(n),this.state={hasError:!1}}static getDerivedStateFromError(){return{hasError:!0}}render(){return this.state.hasError?v.jsx("span",{className:"text-[#555] font-semibold text-sm",children:this.props.toolName.replace(/_/g," ")}):this.props.children}}function w9(e){const n=y9(e.toolName);return v.jsx(E9,{toolName:e.toolName,children:v.jsx(n,{...e})})}function lS(e){if(e==null||typeof e!="string")return e;const n=e.trim();if(!n)return e;try{return JSON.parse(n)}catch{}try{const i=n.replace(/\bNone\b/g,"null").replace(/\bTrue\b/g,"true").replace(/\bFalse\b/g,"false").replace(/'/g,'"');return JSON.parse(i)}catch{return{__raw:e}}}function oS(e){const n=lS(e);return n&&typeof n=="object"&&!Array.isArray(n)?n:n==null?{}:{__raw:typeof n=="string"?n:JSON.stringify(n)}}function D_(e){const n=/(\d+)$/.exec(e);return n?parseInt(n[1],10):0}const S9={completed:"text-emerald-400 border-emerald-500/30 bg-emerald-500/10",running:"text-blue-400 border-blue-500/30 bg-blue-500/10",waiting:"text-yellow-400 border-yellow-500/30 bg-yellow-500/10",stopped:"text-[#aaa] border-[#333] bg-[#1a1a1a]",crashed:"text-red-400 border-red-500/30 bg-red-500/10",failed:"text-red-400 border-red-500/30 bg-red-500/10"};function N9(e){return e==="completed"?"completed":e==="running"?"running":e==="failed"||e==="crashed"?"failed":e}function k9(e,n){var f;const i=new Map;for(const h of e)if(h.parent_id){const d=i.get(h.parent_id)??[];d.push(h.id),i.set(h.parent_id,d)}const a=new Map,o=new Map,s=new Map;for(const h of n)if(h.type==="tool"){if(a.set(h.agent_id,(a.get(h.agent_id)??0)+1),((f=h.data)==null?void 0:f.tool_name)==="create_agent"){const d=oS(h.data.args),p=d.name??d.agent_name??"",m=d.task??"";p&&m&&s.set(p,m)}}else o.set(h.agent_id,(o.get(h.agent_id)??0)+1);const c=new Map;for(const h of e)c.set(h.id,{id:h.id,name:h.name,task:s.get(h.name)??"",status:N9(h.status),parentId:h.parent_id,children:i.get(h.id)??[],createdAt:h.created_at,toolCount:a.get(h.id)??0,messageCount:o.get(h.id)??0});return c}function T9({agent:e,events:n}){const i=ae.useMemo(()=>n.filter(s=>s.agent_id===e.id).sort((s,c)=>D_(s.id)-D_(c.id)),[n,e.id]),a=i.filter(s=>s.type==="tool").length,o=i.length-a;return v.jsxs("div",{children:[v.jsxs("div",{className:"flex items-center gap-2 flex-wrap mb-1",children:[v.jsx("span",{className:"text-base font-semibold text-white truncate",children:e.name}),v.jsx("span",{className:`flex-shrink-0 text-xs font-medium capitalize px-2 py-0.5 rounded-full border ${S9[e.status]??"text-[#aaa] border-[#333] bg-[#1a1a1a]"}`,children:e.status}),v.jsx("span",{className:"font-mono text-xs text-[#555]",children:e.id})]}),v.jsxs("p",{className:"text-xs text-[#666] mb-4",children:[o," message",o===1?"":"s"," ยท ",a," tool call",a===1?"":"s"]}),i.length===0?v.jsx("p",{className:"text-sm text-[#666]",children:"No recorded activity for this agent."}):v.jsx("div",{className:"py-1",children:i.map((s,c)=>{var _,S,N,E,k,w;const f=c===i.length-1,h=s.type==="tool",d=h?String(((_=s.data)==null?void 0:_.tool_name)??"tool"):"",p=h?"":String(((S=s.data)==null?void 0:S.role)??"assistant");let m,y;if(h){const O=x9(d);m=O.icon,y=O.color}else{const O=p==="user"||p==="human";m=O?qp:U_,y=O?"text-blue-400":"text-purple-400"}const b=h?String(((N=s.data)==null?void 0:N.status)??"completed"):"completed";return v.jsxs("div",{className:"flex gap-3",children:[v.jsxs("div",{className:"flex flex-col items-center shrink-0",children:[v.jsx("div",{className:`w-[30px] h-[30px] rounded-full bg-black border flex items-center justify-center shrink-0 ${h&&b==="running"?"border-blue-500/40 animate-pulse":h&&b==="failed"?"border-red-500/30":"border-[#222]"}`,children:v.jsx(m,{className:`w-3.5 h-3.5 ${y}`})}),!f&&v.jsx("div",{className:"w-px flex-1 bg-[#1a1a1a] mt-1"})]}),v.jsx("div",{className:"flex-1 min-w-0 pt-[5px] pb-6",children:h?v.jsx(w9,{toolName:d,args:oS((E=s.data)==null?void 0:E.args),result:lS((k=s.data)==null?void 0:k.result)??null,status:b}):v.jsx(_9,{role:p,content:String(((w=s.data)==null?void 0:w.content)??"")})})]},s.id)})})]})}class bu extends Error{constructor(n){super(n),this.name="RunParseError"}}const A9=["critical","high","medium","low"];function C9(e){const n=String(e??"").toLowerCase().trim();return A9.includes(n)?n:"low"}function M9(e){if(typeof e=="string"&&e.trim()){const n=e.trim().replace(" UTC","Z").replace(" ","T"),i=new Date(n);if(!Number.isNaN(i.getTime()))return i.toISOString();const a=new Date(e);if(!Number.isNaN(a.getTime()))return a.toISOString()}return new Date().toISOString()}function Ot(e){return typeof e=="string"&&e.length>0?e:null}function O9(e){return typeof e=="number"&&Number.isFinite(e)?e:null}function sS(e,n){try{return JSON.parse(e)}catch{throw new bu(`${n} isn't valid JSON. Make sure you selected a Strix run directory.`)}}function R9(e){const n=sS(e,"run.json");if(!n||typeof n!="object"||Array.isArray(n))throw new bu("run.json is not an object.");const i=n,a=[],o=i.targets_info;if(Array.isArray(o)){for(const b of o)if(b&&typeof b=="object"){const _=b.original;typeof _=="string"&&_&&a.push(_)}}const s=Ot(i.start_time),c=Ot(i.end_time);let f=null;if(s&&c){const b=new Date(s).getTime(),_=new Date(c).getTime();!Number.isNaN(b)&&!Number.isNaN(_)&&_>=b&&(f=Math.round((_-b)/1e3))}let h=null,d=null,p=null,m=null;const y=i.scan_results;if(y&&typeof y=="object"){const b=y;h=Ot(b.executive_summary),d=Ot(b.technical_analysis),p=Ot(b.methodology),m=Ot(b.recommendations)}return{runId:Ot(i.run_id),runName:Ot(i.run_name),targets:a,scanMode:Ot(i.scan_mode),status:Ot(i.status),startTime:s,endTime:c,durationSeconds:f,executiveSummary:h,technicalAnalysis:d,methodology:p,recommendations:m}}function D9(){return{pr_review_id:null,cve:null,cvss:null,potential_risk_saving:null,risk_saving_description:null,impact:null,endpoint:null,method:null,target:null,technical_analysis:null,poc_description:null,poc_script_code:null,code_diff:null,code_file:null,code_before:null,code_after:null,cwe:null,code_locations:null,remediation_steps:null,fix_pr_body:null,evidence:null,assumptions:null,fix_effort:null,cvss_breakdown:null,status_changed_at:null,status_changed_by:null,status_note:null,snoozed_until:null,reopened_at:null,reopened_by:null,original_severity:null,severity_changed_at:null,severity_changed_by:null,severity_override_reason:null,retest_of_vulnerability_id:null}}function L9(e,n,i){const a=e.cwe,o=typeof a=="string"&&a.trim()?[a.trim()]:Array.isArray(a)?a.filter(c=>typeof c=="string"&&c):null;return{...D9(),id:Ot(e.id)??`vuln-${n+1}`,scan_id:i,title:Ot(e.title)??"Untitled finding",description:Ot(e.description)??"",severity:C9(e.severity),status:"open",created_at:M9(e.timestamp),cve:Ot(e.cve),cvss:O9(e.cvss),impact:Ot(e.impact),endpoint:Ot(e.endpoint),method:Ot(e.method),target:Ot(e.target),technical_analysis:Ot(e.technical_analysis),poc_description:Ot(e.poc_description),poc_script_code:Ot(e.poc_script_code),cwe:o,code_locations:Array.isArray(e.code_locations)?e.code_locations:null,remediation_steps:Ot(e.remediation_steps),fix_pr_body:Ot(e.fix_pr_body),evidence:Ot(e.evidence),assumptions:Ot(e.assumptions),fix_effort:Ot(e.fix_effort)??null,cvss_breakdown:e.cvss_breakdown??null}}function z9(e,n=null){const i=sS(e,"vulnerabilities.json");if(!Array.isArray(i))throw new bu("vulnerabilities.json is not a JSON array.");return i.map((a,o)=>{if(!a||typeof a!="object")throw new bu(`vulnerabilities.json entry #${o+1} is not an object.`);return L9(a,o,n)})}function I9(e){const n={critical:0,high:0,medium:0,low:0};for(const i of e)n[i.severity]+=1;return n}async function Iu(e){const n=await fetch(e,{cache:"no-store"});if(!n.ok)throw new Error(`${e} responded ${n.status}`);return n.json()}async function cS(){const e=await Iu("/api/run"),n=R9(JSON.stringify(e)),i=e.finished===!0;return{summary:n,raw:e,finished:i}}async function uS(e){const n=await Iu("/api/vulnerabilities");return z9(JSON.stringify(n),e)}async function j9(){const e=await Iu("/api/report");return(e==null?void 0:e.markdown)??null}async function fS(){const e=await Iu("/api/transcript");return{agents:Array.isArray(e==null?void 0:e.agents)?e.agents:[],events:Array.isArray(e==null?void 0:e.events)?e.events:[]}}async function L_(){const{summary:e,raw:n,finished:i}=await cS(),[a,o,s]=await Promise.all([uS(e.runId).catch(()=>[]),j9().catch(()=>null),fS().catch(()=>({agents:[],events:[]}))]);return{summary:e,raw:n,finished:i,vulnerabilities:a,reportMarkdown:o,transcript:s}}const B9="https://app.strix.ai/api/auth/signup";function U9(e){try{const n=JSON.stringify({event:"cta_clicked",cta:e});typeof navigator<"u"&&navigator.sendBeacon?navigator.sendBeacon("/api/event",n):fetch("/api/event",{method:"POST",body:n,keepalive:!0})}catch{}}const H9="Your findings stay on your machine. They're rendered here locally in your browser and never uploaded or stored by Strix.",z_=["critical","high","medium","low"],$9=1e3;function q9(){const[e,n]=ae.useState(null),[i,a]=ae.useState(null),[o,s]=ae.useState(null),[c,f]=ae.useState("overview"),h=ae.useRef(!1);ae.useEffect(()=>{let y=!1,b;const _=()=>{b=setTimeout(S,$9)},S=async()=>{if(!y)try{const{summary:N,raw:E,finished:k}=await cS();if(y)return;if(k&&!h.current){h.current=!0;const B=await L_();y||n(B);return}const[w,O]=await Promise.all([fS().catch(()=>({agents:[],events:[]})),uS(N.runId).catch(()=>[])]);if(y)return;n(B=>({summary:N,raw:E,finished:k,transcript:w,vulnerabilities:O,reportMarkdown:(B==null?void 0:B.reportMarkdown)??null})),_()}catch(N){if(y)return;a(N instanceof Error?N.message:"Could not load run data."),_()}};return(async()=>{try{const N=await L_();if(y)return;n(N),N.finished?h.current=!0:_()}catch(N){if(y)return;a(N instanceof Error?N.message:"Could not load run data."),_()}})(),()=>{y=!0,b&&clearTimeout(b)}},[]);const d=ae.useMemo(()=>e?I9(e.vulnerabilities):null,[e]),p=(e==null?void 0:e.vulnerabilities.find(y=>y.id===o))??null,m=(e==null?void 0:e.transcript.agents.length)??0;return v.jsxs("div",{className:"min-h-screen bg-black text-white",children:[v.jsx("div",{className:"border-b border-[#222]",children:v.jsxs("div",{className:"max-w-[88rem] mx-auto px-6 py-4 flex items-center gap-1.5",children:[v.jsx("img",{src:"./logo.png",alt:"Strix Logo",className:"w-10 h-8 object-cover opacity-90"}),v.jsx("div",{className:"text-base text-white font-medium tracking-tight",children:"Strix"}),v.jsx("span",{className:"ml-3 text-xs text-[#666]",children:"Local results"}),e&&v.jsx(P9,{finished:e.finished})]})}),v.jsxs("div",{className:"max-w-[88rem] mx-auto px-6 py-8 space-y-6",children:[v.jsxs("div",{className:"rounded-lg px-4 py-3 flex gap-3 items-start",style:{border:"1px solid rgba(255,255,255,0.08)"},children:[v.jsx($2,{className:"w-5 h-5 flex-shrink-0 mt-0.5 text-emerald-400","aria-hidden":"true"}),v.jsx("p",{className:"text-sm text-[#aaa] leading-relaxed",children:H9})]}),i&&!e&&v.jsxs("div",{className:"rounded-lg px-4 py-3 flex gap-3 items-start border border-red-500/30 bg-red-500/5",children:[v.jsx(Vk,{className:"w-5 h-5 flex-shrink-0 mt-0.5 text-red-400","aria-hidden":"true"}),v.jsx("p",{className:"text-sm text-red-300",children:i})]}),!e&&!i&&v.jsxs("div",{className:"rounded-xl border border-[#222] bg-[rgba(255,255,255,0.02)] p-10 text-center",children:[v.jsx("div",{className:"w-6 h-6 mx-auto mb-3 rounded-full border-2 border-[#333] border-t-white animate-spin"}),v.jsx("p",{className:"text-sm text-[#888]",children:"Loading run dataโ€ฆ"})]}),e&&d&&v.jsxs(v.Fragment,{children:[v.jsx(G9,{summary:e.summary}),v.jsx(Q9,{}),v.jsxs("div",{className:"flex gap-5 border-b border-[#2a2a2a]",children:[v.jsx(up,{active:c==="overview",onClick:()=>f("overview"),children:"Overview"}),v.jsxs(up,{active:c==="issues",onClick:()=>f("issues"),children:["Issues",e.vulnerabilities.length>0?` (${e.vulnerabilities.length})`:""]}),m>0&&v.jsxs(up,{active:c==="agents",onClick:()=>f("agents"),children:["Agents (",m,")"]})]}),c==="overview"?v.jsx(K9,{summary:e.summary,counts:d,total:e.vulnerabilities.length,reportMarkdown:e.reportMarkdown}):c==="agents"&&m>0?v.jsx(W9,{run:e}):p?v.jsxs("div",{className:"space-y-4",children:[v.jsxs("button",{onClick:()=>s(null),className:"cursor-pointer inline-flex items-center gap-1.5 text-sm text-[#888] hover:text-white transition-colors",children:[v.jsx(Mk,{className:"w-4 h-4"})," Back to all findings"]}),v.jsx(NL,{vulnerability:p})]}):v.jsx(V9,{vulnerabilities:e.vulnerabilities,finished:e.finished,onSelect:y=>s(y)})]})]})]})}function P9({finished:e}){return e?v.jsxs("span",{className:"ml-auto inline-flex items-center gap-1.5 text-xs text-[#888]",children:[v.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-[#555]"}),"Complete"]}):v.jsxs("span",{className:"ml-auto inline-flex items-center gap-1.5 text-xs text-emerald-400",children:[v.jsxs("span",{className:"relative flex h-1.5 w-1.5",children:[v.jsx("span",{className:"absolute inline-flex h-full w-full rounded-full bg-emerald-400 opacity-75 animate-ping"}),v.jsx("span",{className:"relative inline-flex h-1.5 w-1.5 rounded-full bg-emerald-400"})]}),"Live"]})}function F9(e){if(e==null)return null;if(e<60)return`${e}s`;const n=Math.floor(e/60);return n<60?`${n}m`:`${Math.floor(n/60)}h ${n%60}m`}function G9({summary:e}){const n=F9(e.durationSeconds);return v.jsxs("div",{children:[v.jsx("h1",{className:"text-2xl font-semibold text-white",children:e.runName??e.runId??"Scan results"}),v.jsxs("div",{className:"mt-1 flex flex-wrap items-center gap-x-3 gap-y-1 text-sm text-[#888]",children:[e.targets.length>0&&v.jsx("span",{className:"font-mono text-[#aaa]",children:e.targets.join(", ")}),e.scanMode&&v.jsx(cp,{label:e.scanMode}),n&&v.jsx(cp,{label:n}),e.status&&v.jsx(cp,{label:e.status})]})]})}function cp({label:e}){return v.jsxs(v.Fragment,{children:[v.jsx("span",{className:"text-[#333]",children:"ยท"}),v.jsx("span",{className:"capitalize",children:e})]})}function V9({vulnerabilities:e,finished:n,onSelect:i}){const a=[...e].sort((o,s)=>z_.indexOf(o.severity)-z_.indexOf(s.severity));return a.length===0?v.jsx("div",{className:"rounded-xl border border-[#222] bg-[rgba(255,255,255,0.02)] p-8 text-center text-sm text-[#888]",children:n?"No findings in this run.":"No findings yet. The scan is still runningโ€ฆ"}):v.jsx("div",{className:"space-y-2",children:a.map(o=>v.jsxs("button",{onClick:()=>i(o.id),className:"cursor-pointer w-full text-left rounded-lg border border-[#222] hover:border-[#444] bg-[rgba(255,255,255,0.02)] px-4 py-3 transition-colors flex items-center gap-3",children:[v.jsx("span",{className:`w-2.5 h-2.5 rounded-full flex-shrink-0 ${Pp(o.severity)}`,"aria-hidden":"true"}),v.jsxs("span",{className:"flex-1 min-w-0",children:[v.jsx("span",{className:"block text-sm font-medium text-white truncate",children:o.title}),o.target&&v.jsx("span",{className:"block text-xs text-[#666] font-mono truncate",children:o.target})]}),v.jsx("span",{className:`text-xs font-semibold px-2 py-0.5 rounded-full border capitalize ${F_[o.severity]}`,children:o.severity})]},o.id))})}function Y9(e){return e.replace(/^\s*#{1,6}[ \t]+.*(?:\r?\n)+/,"").trimStart()}function X9(e){const n=[];let i=null;for(const a of e.split(` +`)){const o=a.match(/^#{1,6}\s+(.*)$/);if(o){const s=o[1].trim().toLowerCase();if(s===i)continue;i=s}else a.trim()!==""&&(i=null);n.push(a)}return n.join(` +`)}function K9({summary:e,counts:n,total:i,reportMarkdown:a}){const o=[["Executive Summary",e.executiveSummary],["Technical Analysis",e.technicalAnalysis],["Methodology",e.methodology],["Recommendations",e.recommendations]].filter(([,s])=>!!s).map(([s,c])=>({title:s,content:Y9(c)}));return v.jsxs("div",{className:"space-y-6",children:[i>0&&v.jsx("div",{className:"rounded-xl border border-[#222] bg-[rgba(255,255,255,0.02)] p-5",children:v.jsx(kL,{findings:{total:i,...n}})}),o.length>0?v.jsx("div",{className:"rounded-xl border border-[#222] bg-[rgba(255,255,255,0.02)] p-5 space-y-8",children:o.map(s=>v.jsx(ta,{title:s.title,content:s.content},s.title))}):a?v.jsx("div",{className:"rounded-xl border border-[#222] bg-[rgba(255,255,255,0.02)] p-5",children:v.jsx(ta,{content:X9(a)})}):i===0&&v.jsx("p",{className:"text-sm text-[#888]",children:"No summary available for this run yet."})]})}function up({active:e,onClick:n,children:i}){return v.jsxs("button",{onClick:n,className:`cursor-pointer relative pb-2.5 text-sm font-semibold transition-colors ${e?"text-white":"text-[#666] hover:text-white"}`,children:[i,e&&v.jsx("span",{className:"absolute bottom-0 inset-x-0 h-0.5 bg-white rounded-full"})]})}const Z9=[{feature:"cloud pentests",title:"Re-run in Strix Cloud",desc:"Run this scan on managed infra with more depth.",icon:D2},{feature:"scheduled scans",title:"Schedule recurring scans",desc:"Continuously retest on a cadence you choose.",icon:Uk},{feature:"PR reviews",title:"PR security reviews",desc:"Catch vulnerabilities in every pull request.",icon:d2}];function Q9(){return v.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-3 gap-3",children:Z9.map(e=>{const n=e.icon;return v.jsxs("a",{href:B9,target:"_blank",rel:"noopener noreferrer",onClick:()=>U9(e.feature),className:"cursor-pointer text-left rounded-xl border border-[#222] hover:border-[#444] bg-[rgba(255,255,255,0.02)] p-4 transition-colors group block",children:[v.jsxs("div",{className:"flex items-center justify-between mb-2",children:[v.jsx(n,{className:"w-4 h-4 text-[#888] group-hover:text-white transition-colors"}),v.jsx(S2,{className:"w-3.5 h-3.5 text-[#555]","aria-hidden":"true"})]}),v.jsx("p",{className:"text-sm font-medium text-white",children:e.title}),v.jsx("p",{className:"text-xs text-[#666] mt-0.5",children:e.desc})]},e.title)})})}function W9({run:e}){const{agents:n,events:i}=e.transcript,a=ae.useMemo(()=>k9(n,i),[n,i]),o=ae.useMemo(()=>{var d,p;return((d=n.find(m=>!m.parent_id))==null?void 0:d.id)??((p=n[0])==null?void 0:p.id)??null},[n]),[s,c]=ae.useState(null),f=s??o,h=n.find(d=>d.id===f)??null;return v.jsxs("div",{className:"space-y-5",children:[v.jsxs("div",{className:"rounded-xl border border-[#222] bg-[rgba(255,255,255,0.02)] p-5",children:[v.jsxs("div",{className:"flex items-center gap-2",children:[v.jsx(K2,{className:"w-4 h-4 text-[#888]","aria-hidden":"true"}),v.jsx("h2",{className:"text-sm font-semibold text-white",children:"Agent graph"}),v.jsxs("span",{className:"text-xs text-[#666]",children:[n.length," agent",n.length===1?"":"s"]})]}),v.jsx("p",{className:"mt-1 mb-4 text-xs text-[#666]",children:"Select an agent to view its full transcript below."}),v.jsx("div",{className:"h-[480px] rounded-lg border border-[#1a1a1a] overflow-hidden",children:v.jsx(m8,{agents:a,selectedAgentId:f,onSelectAgent:d=>c(d),eventsLoaded:!0,eventsEmpty:a.size===0,scanCompleted:e.finished})})]}),h&&v.jsx("div",{className:"rounded-xl border border-[#222] bg-[rgba(255,255,255,0.02)] p-5",children:v.jsx(T9,{agent:h,events:i})})]})}wk.createRoot(document.getElementById("root")).render(v.jsx(ae.StrictMode,{children:v.jsx(q9,{})})); diff --git a/strix/viewer/viewer_dist/assets/index-nWrlYz6N.css b/strix/viewer/viewer_dist/assets/index-nWrlYz6N.css new file mode 100644 index 00000000..8e276f21 --- /dev/null +++ b/strix/viewer/viewer_dist/assets/index-nWrlYz6N.css @@ -0,0 +1,10 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}/*! + Theme: GitHub Dark + Description: Dark theme as seen on github.com + Author: github.com + Maintainer: @Hirse + Updated: 2021-05-15 + + Outdated base version: https://github.com/primer/github-syntax-dark + Current colors taken from GitHub's CSS +*/.hljs{color:#c9d1d9;background:#0d1117}.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:#ff7b72}.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#d2a8ff}.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-variable,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id{color:#79c0ff}.hljs-regexp,.hljs-string,.hljs-meta .hljs-string{color:#a5d6ff}.hljs-built_in,.hljs-symbol{color:#ffa657}.hljs-comment,.hljs-code,.hljs-formula{color:#8b949e}.hljs-name,.hljs-quote,.hljs-selector-tag,.hljs-selector-pseudo{color:#7ee787}.hljs-subst{color:#c9d1d9}.hljs-section{color:#1f6feb;font-weight:700}.hljs-bullet{color:#f2cc60}.hljs-emphasis{color:#c9d1d9;font-style:italic}.hljs-strong{color:#c9d1d9;font-weight:700}.hljs-addition{color:#aff5b4;background-color:#033a16}.hljs-deletion{color:#ffdcd7;background-color:#67060c}.react-flow{direction:ltr;--xy-edge-stroke-default: #b1b1b7;--xy-edge-stroke-width-default: 1;--xy-edge-stroke-selected-default: #555;--xy-connectionline-stroke-default: #b1b1b7;--xy-connectionline-stroke-width-default: 1;--xy-attribution-background-color-default: rgba(255, 255, 255, .5);--xy-minimap-background-color-default: #fff;--xy-minimap-mask-background-color-default: rgba(240, 240, 240, .6);--xy-minimap-mask-stroke-color-default: transparent;--xy-minimap-mask-stroke-width-default: 1;--xy-minimap-node-background-color-default: #e2e2e2;--xy-minimap-node-stroke-color-default: transparent;--xy-minimap-node-stroke-width-default: 2;--xy-background-color-default: transparent;--xy-background-pattern-dots-color-default: #91919a;--xy-background-pattern-lines-color-default: #eee;--xy-background-pattern-cross-color-default: #e2e2e2;background-color:var(--xy-background-color, var(--xy-background-color-default));--xy-node-color-default: inherit;--xy-node-border-default: 1px solid #1a192b;--xy-node-background-color-default: #fff;--xy-node-group-background-color-default: rgba(240, 240, 240, .25);--xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(0, 0, 0, .08);--xy-node-boxshadow-selected-default: 0 0 0 .5px #1a192b;--xy-node-border-radius-default: 3px;--xy-handle-background-color-default: #1a192b;--xy-handle-border-color-default: #fff;--xy-selection-background-color-default: rgba(0, 89, 220, .08);--xy-selection-border-default: 1px dotted rgba(0, 89, 220, .8);--xy-controls-button-background-color-default: #fefefe;--xy-controls-button-background-color-hover-default: #f4f4f4;--xy-controls-button-color-default: inherit;--xy-controls-button-color-hover-default: inherit;--xy-controls-button-border-color-default: #eee;--xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, .08);--xy-edge-label-background-color-default: #ffffff;--xy-edge-label-color-default: inherit;--xy-resize-background-color-default: #3367d9}.react-flow.dark{--xy-edge-stroke-default: #3e3e3e;--xy-edge-stroke-width-default: 1;--xy-edge-stroke-selected-default: #727272;--xy-connectionline-stroke-default: #b1b1b7;--xy-connectionline-stroke-width-default: 1;--xy-attribution-background-color-default: rgba(150, 150, 150, .25);--xy-minimap-background-color-default: #141414;--xy-minimap-mask-background-color-default: rgba(60, 60, 60, .6);--xy-minimap-mask-stroke-color-default: transparent;--xy-minimap-mask-stroke-width-default: 1;--xy-minimap-node-background-color-default: #2b2b2b;--xy-minimap-node-stroke-color-default: transparent;--xy-minimap-node-stroke-width-default: 2;--xy-background-color-default: #141414;--xy-background-pattern-dots-color-default: #555;--xy-background-pattern-lines-color-default: #333;--xy-background-pattern-cross-color-default: #333;--xy-node-color-default: #f8f8f8;--xy-node-border-default: 1px solid #3c3c3c;--xy-node-background-color-default: #1e1e1e;--xy-node-group-background-color-default: rgba(240, 240, 240, .25);--xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(255, 255, 255, .08);--xy-node-boxshadow-selected-default: 0 0 0 .5px #999;--xy-handle-background-color-default: #bebebe;--xy-handle-border-color-default: #1e1e1e;--xy-selection-background-color-default: rgba(200, 200, 220, .08);--xy-selection-border-default: 1px dotted rgba(200, 200, 220, .8);--xy-controls-button-background-color-default: #2b2b2b;--xy-controls-button-background-color-hover-default: #3e3e3e;--xy-controls-button-color-default: #f8f8f8;--xy-controls-button-color-hover-default: #fff;--xy-controls-button-border-color-default: #5b5b5b;--xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, .08);--xy-edge-label-background-color-default: #141414;--xy-edge-label-color-default: #f8f8f8}.react-flow__background{background-color:var(--xy-background-color-props, var(--xy-background-color, var(--xy-background-color-default)));pointer-events:none;z-index:-1}.react-flow__container{position:absolute;width:100%;height:100%;top:0;left:0}.react-flow__pane{z-index:1;touch-action:none}.react-flow__pane.draggable{cursor:grab}.react-flow__pane.dragging{cursor:grabbing}.react-flow__pane.selection{cursor:pointer}.react-flow__viewport{transform-origin:0 0;z-index:2;pointer-events:none}.react-flow__renderer{z-index:4}.react-flow__selection{z-index:6}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible{outline:none}.react-flow__edge-path{stroke:var(--xy-edge-stroke, var(--xy-edge-stroke-default));stroke-width:var(--xy-edge-stroke-width, var(--xy-edge-stroke-width-default));fill:none}.react-flow__connection-path{stroke:var(--xy-connectionline-stroke, var(--xy-connectionline-stroke-default));stroke-width:var(--xy-connectionline-stroke-width, var(--xy-connectionline-stroke-width-default));fill:none}.react-flow .react-flow__edges{position:absolute}.react-flow .react-flow__edges svg{overflow:visible;position:absolute;pointer-events:none}.react-flow__edge{pointer-events:visibleStroke}.react-flow__edge.selectable{cursor:pointer}.react-flow__edge.animated path{stroke-dasharray:5;animation:dashdraw .5s linear infinite}.react-flow__edge.animated path.react-flow__edge-interaction{stroke-dasharray:none;animation:none}.react-flow__edge.inactive{pointer-events:none}.react-flow__edge.selected,.react-flow__edge:focus,.react-flow__edge:focus-visible{outline:none}.react-flow__edge.selected .react-flow__edge-path,.react-flow__edge.selectable:focus .react-flow__edge-path,.react-flow__edge.selectable:focus-visible .react-flow__edge-path{stroke:var(--xy-edge-stroke-selected, var(--xy-edge-stroke-selected-default))}.react-flow__edge-textwrapper{pointer-events:all}.react-flow__edge .react-flow__edge-text{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__arrowhead polyline{stroke:var(--xy-edge-stroke, var(--xy-edge-stroke-default))}.react-flow__arrowhead polyline.arrowclosed{fill:var(--xy-edge-stroke, var(--xy-edge-stroke-default))}.react-flow__connection{pointer-events:none}.react-flow__connection .animated{stroke-dasharray:5;animation:dashdraw .5s linear infinite}svg.react-flow__connectionline{z-index:1001;overflow:visible;position:absolute}.react-flow__nodes{pointer-events:none;transform-origin:0 0}.react-flow__node{position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none;pointer-events:all;transform-origin:0 0;box-sizing:border-box;cursor:default}.react-flow__node.selectable{cursor:pointer}.react-flow__node.draggable{cursor:grab;pointer-events:all}.react-flow__node.draggable.dragging{cursor:grabbing}.react-flow__nodesselection{z-index:3;transform-origin:left top;pointer-events:none}.react-flow__nodesselection-rect{position:absolute;pointer-events:all;cursor:grab}.react-flow__handle{position:absolute;pointer-events:none;min-width:5px;min-height:5px;width:6px;height:6px;background-color:var(--xy-handle-background-color, var(--xy-handle-background-color-default));border:1px solid var(--xy-handle-border-color, var(--xy-handle-border-color-default));border-radius:100%}.react-flow__handle.connectingfrom{pointer-events:all}.react-flow__handle.connectionindicator{pointer-events:all;cursor:crosshair}.react-flow__handle-bottom{top:auto;left:50%;bottom:0;transform:translate(-50%,50%)}.react-flow__handle-top{top:0;left:50%;transform:translate(-50%,-50%)}.react-flow__handle-left{top:50%;left:0;transform:translate(-50%,-50%)}.react-flow__handle-right{top:50%;right:0;transform:translate(50%,-50%)}.react-flow__edgeupdater{cursor:move;pointer-events:all}.react-flow__pane.selection .react-flow__panel{pointer-events:none}.react-flow__panel{position:absolute;z-index:5;margin:15px}.react-flow__panel.top{top:0}.react-flow__panel.bottom{bottom:0}.react-flow__panel.top.center,.react-flow__panel.bottom.center{left:50%;transform:translate(-15px) translate(-50%)}.react-flow__panel.left{left:0}.react-flow__panel.right{right:0}.react-flow__panel.left.center,.react-flow__panel.right.center{top:50%;transform:translateY(-15px) translateY(-50%)}.react-flow__attribution{font-size:10px;background:var(--xy-attribution-background-color, var(--xy-attribution-background-color-default));padding:2px 3px;margin:0}.react-flow__attribution a{text-decoration:none;color:#999}@keyframes dashdraw{0%{stroke-dashoffset:10}}.react-flow__edgelabel-renderer{position:absolute;width:100%;height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;left:0;top:0}.react-flow__viewport-portal{position:absolute;width:100%;height:100%;left:0;top:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__minimap{background:var( --xy-minimap-background-color-props, var(--xy-minimap-background-color, var(--xy-minimap-background-color-default)) )}.react-flow__minimap-svg{display:block}.react-flow__minimap-mask{fill:var( --xy-minimap-mask-background-color-props, var(--xy-minimap-mask-background-color, var(--xy-minimap-mask-background-color-default)) );stroke:var( --xy-minimap-mask-stroke-color-props, var(--xy-minimap-mask-stroke-color, var(--xy-minimap-mask-stroke-color-default)) );stroke-width:var( --xy-minimap-mask-stroke-width-props, var(--xy-minimap-mask-stroke-width, var(--xy-minimap-mask-stroke-width-default)) )}.react-flow__minimap-node{fill:var( --xy-minimap-node-background-color-props, var(--xy-minimap-node-background-color, var(--xy-minimap-node-background-color-default)) );stroke:var( --xy-minimap-node-stroke-color-props, var(--xy-minimap-node-stroke-color, var(--xy-minimap-node-stroke-color-default)) );stroke-width:var( --xy-minimap-node-stroke-width-props, var(--xy-minimap-node-stroke-width, var(--xy-minimap-node-stroke-width-default)) )}.react-flow__background-pattern.dots{fill:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-dots-color-default)) )}.react-flow__background-pattern.lines{stroke:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-lines-color-default)) )}.react-flow__background-pattern.cross{stroke:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-cross-color-default)) )}.react-flow__controls{display:flex;flex-direction:column;box-shadow:var(--xy-controls-box-shadow, var(--xy-controls-box-shadow-default))}.react-flow__controls.horizontal{flex-direction:row}.react-flow__controls-button{display:flex;justify-content:center;align-items:center;height:26px;width:26px;padding:4px;border:none;background:var(--xy-controls-button-background-color, var(--xy-controls-button-background-color-default));border-bottom:1px solid var( --xy-controls-button-border-color-props, var(--xy-controls-button-border-color, var(--xy-controls-button-border-color-default)) );color:var( --xy-controls-button-color-props, var(--xy-controls-button-color, var(--xy-controls-button-color-default)) );cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__controls-button svg{width:100%;max-width:12px;max-height:12px;fill:currentColor}.react-flow__edge.updating .react-flow__edge-path{stroke:#777}.react-flow__edge-text{font-size:10px}.react-flow__node.selectable:focus,.react-flow__node.selectable:focus-visible{outline:none}.react-flow__node-input,.react-flow__node-default,.react-flow__node-output,.react-flow__node-group{padding:10px;border-radius:var(--xy-node-border-radius, var(--xy-node-border-radius-default));width:150px;font-size:12px;color:var(--xy-node-color, var(--xy-node-color-default));text-align:center;border:var(--xy-node-border, var(--xy-node-border-default));background-color:var(--xy-node-background-color, var(--xy-node-background-color-default))}.react-flow__node-input.selectable:hover,.react-flow__node-default.selectable:hover,.react-flow__node-output.selectable:hover,.react-flow__node-group.selectable:hover{box-shadow:var(--xy-node-boxshadow-hover, var(--xy-node-boxshadow-hover-default))}.react-flow__node-input.selectable.selected,.react-flow__node-input.selectable:focus,.react-flow__node-input.selectable:focus-visible,.react-flow__node-default.selectable.selected,.react-flow__node-default.selectable:focus,.react-flow__node-default.selectable:focus-visible,.react-flow__node-output.selectable.selected,.react-flow__node-output.selectable:focus,.react-flow__node-output.selectable:focus-visible,.react-flow__node-group.selectable.selected,.react-flow__node-group.selectable:focus,.react-flow__node-group.selectable:focus-visible{box-shadow:var(--xy-node-boxshadow-selected, var(--xy-node-boxshadow-selected-default))}.react-flow__node-group{background-color:var(--xy-node-group-background-color, var(--xy-node-group-background-color-default))}.react-flow__nodesselection-rect,.react-flow__selection{background:var(--xy-selection-background-color, var(--xy-selection-background-color-default));border:var(--xy-selection-border, var(--xy-selection-border-default))}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible,.react-flow__selection:focus,.react-flow__selection:focus-visible{outline:none}.react-flow__controls-button:hover{background:var( --xy-controls-button-background-color-hover-props, var(--xy-controls-button-background-color-hover, var(--xy-controls-button-background-color-hover-default)) );color:var( --xy-controls-button-color-hover-props, var(--xy-controls-button-color-hover, var(--xy-controls-button-color-hover-default)) )}.react-flow__controls-button:disabled{pointer-events:none}.react-flow__controls-button:disabled svg{fill-opacity:.4}.react-flow__controls-button:last-child{border-bottom:none}.react-flow__controls.horizontal .react-flow__controls-button{border-bottom:none;border-right:1px solid var( --xy-controls-button-border-color-props, var(--xy-controls-button-border-color, var(--xy-controls-button-border-color-default)) )}.react-flow__controls.horizontal .react-flow__controls-button:last-child{border-right:none}.react-flow__resize-control{position:absolute}.react-flow__resize-control.left,.react-flow__resize-control.right{cursor:ew-resize}.react-flow__resize-control.top,.react-flow__resize-control.bottom{cursor:ns-resize}.react-flow__resize-control.top.left,.react-flow__resize-control.bottom.right{cursor:nwse-resize}.react-flow__resize-control.bottom.left,.react-flow__resize-control.top.right{cursor:nesw-resize}.react-flow__resize-control.handle{width:5px;height:5px;border:1px solid #fff;border-radius:1px;background-color:var(--xy-resize-background-color, var(--xy-resize-background-color-default));translate:-50% -50%}.react-flow__resize-control.handle.left{left:0;top:50%}.react-flow__resize-control.handle.right{left:100%;top:50%}.react-flow__resize-control.handle.top{left:50%;top:0}.react-flow__resize-control.handle.bottom{left:50%;top:100%}.react-flow__resize-control.handle.top.left,.react-flow__resize-control.handle.bottom.left{left:0}.react-flow__resize-control.handle.top.right,.react-flow__resize-control.handle.bottom.right{left:100%}.react-flow__resize-control.line{border-color:var(--xy-resize-background-color, var(--xy-resize-background-color-default));border-width:0;border-style:solid}.react-flow__resize-control.line.left,.react-flow__resize-control.line.right{width:1px;transform:translate(-50%);top:0;height:100%}.react-flow__resize-control.line.left{left:0;border-left-width:1px}.react-flow__resize-control.line.right{left:100%;border-right-width:1px}.react-flow__resize-control.line.top,.react-flow__resize-control.line.bottom{height:1px;transform:translateY(-50%);left:0;width:100%}.react-flow__resize-control.line.top{top:0;border-top-width:1px}.react-flow__resize-control.line.bottom{border-bottom-width:1px;top:100%}.react-flow__edge-textbg{fill:var(--xy-edge-label-background-color, var(--xy-edge-label-background-color-default))}.react-flow__edge-text{fill:var(--xy-edge-label-color, var(--xy-edge-label-color-default))}/*! tailwindcss v4.3.3 | 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-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-duration:initial}}}@layer theme{:root,:host{--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-orange-400:oklch(75% .183 55.934);--color-orange-500:oklch(70.5% .213 47.604);--color-amber-400:oklch(82.8% .189 84.429);--color-yellow-400:oklch(85.2% .199 91.936);--color-yellow-500:oklch(79.5% .184 86.047);--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-sky-400:oklch(74.6% .16 232.661);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-purple-400:oklch(71.4% .203 305.504);--color-purple-500:oklch(62.7% .265 303.9);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--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);--text-base:1rem;--text-base--line-height: 1.5 ;--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wider:.05em;--leading-snug:1.375;--leading-relaxed:1.625;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--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;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-geist-sans);--default-mono-font-family:var(--font-geist-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,-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, 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:where(:not(iframe)){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}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-0{top:0;right:0;bottom:0;left:0}.inset-x-0{inset-inline:0}.top-0{top:0}.top-2{top:calc(var(--spacing) * 2)}.right-2{right:calc(var(--spacing) * 2)}.bottom-0{bottom:0}.z-10{z-index:10}.-mx-2{margin-inline:calc(var(--spacing) * -2)}.mx-auto{margin-inline:auto}.my-4{margin-block:calc(var(--spacing) * 4)}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-10{margin-top:calc(var(--spacing) * 10)}.mt-\[1px\]{margin-top:1px}.mr-1{margin-right:var(--spacing)}.mr-2{margin-right:calc(var(--spacing) * 2)}.mb-1{margin-bottom:var(--spacing)}.mb-1\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-2\.5{margin-bottom:calc(var(--spacing) * 2.5)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.ml-1{margin-left:var(--spacing)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-3{margin-left:calc(var(--spacing) * 3)}.ml-auto{margin-left:auto}.line-clamp-3{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline-flex{display:inline-flex}.\!h-1\.5{height:calc(var(--spacing) * 1.5)!important}.h-0\.5{height:calc(var(--spacing) * .5)}.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-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-10{height:calc(var(--spacing) * 10)}.h-\[30px\]{height:30px}.h-\[72px\]{height:72px}.h-\[480px\]{height:480px}.h-full{height:100%}.h-px{height:1px}.max-h-\[400px\]{max-height:400px}.max-h-\[1200px\]{max-height:1200px}.min-h-screen{min-height:100vh}.\!w-1\.5{width:calc(var(--spacing) * 1.5)!important}.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-7{width:calc(var(--spacing) * 7)}.w-8{width:calc(var(--spacing) * 8)}.w-10{width:calc(var(--spacing) * 10)}.w-28{width:calc(var(--spacing) * 28)}.w-\[1px\]{width:1px}.w-\[30px\]{width:30px}.w-\[180px\]{width:180px}.w-\[260px\]{width:260px}.w-full{width:100%}.w-px{width:1px}.max-w-\[75\%\]{max-width:75%}.max-w-\[80\%\]{max-width:80%}.max-w-\[88rem\]{max-width:88rem}.min-w-0{min-width:0}.min-w-\[80px\]{min-width:80px}.flex-1{flex:1}.flex-shrink-0,.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.-rotate-90{rotate:-90deg}.animate-ping{animation:var(--animate-ping)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-pointer{cursor:pointer}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.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-5{gap:calc(var(--spacing) * 5)}.gap-6{gap:calc(var(--spacing) * 6)}.gap-8{gap:calc(var(--spacing) * 8)}.gap-10{gap:calc(var(--spacing) * 10)}:where(.space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block:0}: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(var(--spacing) * var(--tw-space-y-reverse));margin-block-end:calc(var(--spacing) * 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-2\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2.5) * 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)))}:where(.space-y-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-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-8>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 8) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 8) * calc(1 - var(--tw-space-y-reverse)))}.gap-x-3{column-gap:calc(var(--spacing) * 3)}.gap-x-6{column-gap:calc(var(--spacing) * 6)}.gap-x-8{column-gap:calc(var(--spacing) * 8)}.gap-y-1{row-gap:var(--spacing)}.gap-y-2{row-gap:calc(var(--spacing) * 2)}.gap-y-3{row-gap:calc(var(--spacing) * 3)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.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)}.\!border-0{border-style:var(--tw-border-style)!important;border-width:0!important}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.\!border-none{--tw-border-style:none!important;border-style:none!important}.\!border-\[\#222\]{border-color:#222!important}.border-\[\#1a1a1a\]{border-color:#1a1a1a}.border-\[\#2a2a2a\]{border-color:#2a2a2a}.border-\[\#222\]{border-color:#222}.border-\[\#333\]{border-color:#333}.border-\[\#191919\]{border-color:#191919}.border-blue-500\/20{border-color:#3080ff33}@supports (color:color-mix(in lab,red,red)){.border-blue-500\/20{border-color:color-mix(in oklab,var(--color-blue-500) 20%,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-blue-500\/40{border-color:#3080ff66}@supports (color:color-mix(in lab,red,red)){.border-blue-500\/40{border-color:color-mix(in oklab,var(--color-blue-500) 40%,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-emerald-500\/30{border-color:#00bb7f4d}@supports (color:color-mix(in lab,red,red)){.border-emerald-500\/30{border-color:color-mix(in oklab,var(--color-emerald-500) 30%,transparent)}}.border-gray-500\/20{border-color:#6a728233}@supports (color:color-mix(in lab,red,red)){.border-gray-500\/20{border-color:color-mix(in oklab,var(--color-gray-500) 20%,transparent)}}.border-orange-500\/20{border-color:#fe6e0033}@supports (color:color-mix(in lab,red,red)){.border-orange-500\/20{border-color:color-mix(in oklab,var(--color-orange-500) 20%,transparent)}}.border-orange-500\/30{border-color:#fe6e004d}@supports (color:color-mix(in lab,red,red)){.border-orange-500\/30{border-color:color-mix(in oklab,var(--color-orange-500) 30%,transparent)}}.border-purple-500\/20{border-color:#ac4bff33}@supports (color:color-mix(in lab,red,red)){.border-purple-500\/20{border-color:color-mix(in oklab,var(--color-purple-500) 20%,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\/25{border-color:#fb2c3640}@supports (color:color-mix(in lab,red,red)){.border-red-500\/25{border-color:color-mix(in oklab,var(--color-red-500) 25%,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-white\/30{border-color:#ffffff4d}@supports (color:color-mix(in lab,red,red)){.border-white\/30{border-color:color-mix(in oklab,var(--color-white) 30%,transparent)}}.border-white\/\[0\.06\]{border-color:#ffffff0f}@supports (color:color-mix(in lab,red,red)){.border-white\/\[0\.06\]{border-color:color-mix(in oklab,var(--color-white) 6%,transparent)}}.border-yellow-500\/20{border-color:#edb20033}@supports (color:color-mix(in lab,red,red)){.border-yellow-500\/20{border-color:color-mix(in oklab,var(--color-yellow-500) 20%,transparent)}}.border-yellow-500\/25{border-color:#edb20040}@supports (color:color-mix(in lab,red,red)){.border-yellow-500\/25{border-color:color-mix(in oklab,var(--color-yellow-500) 25%,transparent)}}.border-yellow-500\/30{border-color:#edb2004d}@supports (color:color-mix(in lab,red,red)){.border-yellow-500\/30{border-color:color-mix(in oklab,var(--color-yellow-500) 30%,transparent)}}.border-t-white{border-top-color:var(--color-white)}.\!bg-\[\#0a0a0a\]{background-color:#0a0a0a!important}.\!bg-\[\#444\]{background-color:#444!important}.\!bg-transparent{background-color:#0000!important}.bg-\[\#0a0a0a\]{background-color:#0a0a0a}.bg-\[\#1a1a1a\]{background-color:#1a1a1a}.bg-\[\#1e1e1e\]{background-color:#1e1e1e}.bg-\[\#2a2a2a\]{background-color:#2a2a2a}.bg-\[\#111\]{background-color:#111}.bg-\[\#222\]{background-color:#222}.bg-\[\#555\]{background-color:#555}.bg-\[\#252525\]{background-color:#252525}.bg-\[rgba\(255\,255\,255\,0\.02\)\]{background-color:#ffffff05}.bg-black{background-color:var(--color-black)}.bg-blue-500{background-color:var(--color-blue-500)}.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-blue-500\/20{background-color:#3080ff33}@supports (color:color-mix(in lab,red,red)){.bg-blue-500\/20{background-color:color-mix(in oklab,var(--color-blue-500) 20%,transparent)}}.bg-blue-500\/\[0\.12\]{background-color:#3080ff1f}@supports (color:color-mix(in lab,red,red)){.bg-blue-500\/\[0\.12\]{background-color:color-mix(in oklab,var(--color-blue-500) 12%,transparent)}}.bg-emerald-400{background-color:var(--color-emerald-400)}.bg-emerald-500{background-color:var(--color-emerald-500)}.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-gray-500{background-color:var(--color-gray-500)}.bg-gray-500\/10{background-color:#6a72821a}@supports (color:color-mix(in lab,red,red)){.bg-gray-500\/10{background-color:color-mix(in oklab,var(--color-gray-500) 10%,transparent)}}.bg-orange-500{background-color:var(--color-orange-500)}.bg-orange-500\/10{background-color:#fe6e001a}@supports (color:color-mix(in lab,red,red)){.bg-orange-500\/10{background-color:color-mix(in oklab,var(--color-orange-500) 10%,transparent)}}.bg-orange-500\/20{background-color:#fe6e0033}@supports (color:color-mix(in lab,red,red)){.bg-orange-500\/20{background-color:color-mix(in oklab,var(--color-orange-500) 20%,transparent)}}.bg-purple-500{background-color:var(--color-purple-500)}.bg-purple-500\/10{background-color:#ac4bff1a}@supports (color:color-mix(in lab,red,red)){.bg-purple-500\/10{background-color:color-mix(in oklab,var(--color-purple-500) 10%,transparent)}}.bg-purple-500\/\[0\.08\]{background-color:#ac4bff14}@supports (color:color-mix(in lab,red,red)){.bg-purple-500\/\[0\.08\]{background-color:color-mix(in oklab,var(--color-purple-500) 8%,transparent)}}.bg-red-500{background-color:var(--color-red-500)}.bg-red-500\/5{background-color:#fb2c360d}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/5{background-color:color-mix(in oklab,var(--color-red-500) 5%,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\/15{background-color:#fb2c3626}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/15{background-color:color-mix(in oklab,var(--color-red-500) 15%,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-500\/\[0\.12\]{background-color:#fb2c361f}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/\[0\.12\]{background-color:color-mix(in oklab,var(--color-red-500) 12%,transparent)}}.bg-white{background-color:var(--color-white)}.bg-white\/8{background-color:#ffffff14}@supports (color:color-mix(in lab,red,red)){.bg-white\/8{background-color:color-mix(in oklab,var(--color-white) 8%,transparent)}}.bg-white\/60{background-color:#fff9}@supports (color:color-mix(in lab,red,red)){.bg-white\/60{background-color:color-mix(in oklab,var(--color-white) 60%,transparent)}}.bg-white\/\[0\.015\]{background-color:#ffffff04}@supports (color:color-mix(in lab,red,red)){.bg-white\/\[0\.015\]{background-color:color-mix(in oklab,var(--color-white) 1.5%,transparent)}}.bg-yellow-500{background-color:var(--color-yellow-500)}.bg-yellow-500\/10{background-color:#edb2001a}@supports (color:color-mix(in lab,red,red)){.bg-yellow-500\/10{background-color:color-mix(in oklab,var(--color-yellow-500) 10%,transparent)}}.bg-yellow-500\/15{background-color:#edb20026}@supports (color:color-mix(in lab,red,red)){.bg-yellow-500\/15{background-color:color-mix(in oklab,var(--color-yellow-500) 15%,transparent)}}.bg-yellow-500\/20{background-color:#edb20033}@supports (color:color-mix(in lab,red,red)){.bg-yellow-500\/20{background-color:color-mix(in oklab,var(--color-yellow-500) 20%,transparent)}}.object-cover{object-fit:cover}.p-1{padding:var(--spacing)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-8{padding:calc(var(--spacing) * 8)}.p-10{padding:calc(var(--spacing) * 10)}.px-0{padding-inline:0}.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-6{padding-inline:calc(var(--spacing) * 6)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-3\.5{padding-block:calc(var(--spacing) * 3.5)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-8{padding-block:calc(var(--spacing) * 8)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pt-6{padding-top:calc(var(--spacing) * 6)}.pt-10{padding-top:calc(var(--spacing) * 10)}.pt-\[5px\]{padding-top:5px}.pr-1\.5{padding-right:calc(var(--spacing) * 1.5)}.pr-4{padding-right:calc(var(--spacing) * 4)}.pb-2\.5{padding-bottom:calc(var(--spacing) * 2.5)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pb-6{padding-bottom:calc(var(--spacing) * 6)}.pl-1\.5{padding-left:calc(var(--spacing) * 1.5)}.pl-4{padding-left:calc(var(--spacing) * 4)}.pl-5{padding-left:calc(var(--spacing) * 5)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.align-top{vertical-align:top}.font-mono{font-family:var(--font-geist-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[12px\]{font-size:12px}.text-\[13px\]{font-size:13px}.text-\[15px\]{font-size:15px}.text-\[16px\]{font-size:16px}.leading-\[22px\]{--tw-leading:22px;line-height:22px}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.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-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[\#333\]{color:#333}.text-\[\#444\]{color:#444}.text-\[\#555\]{color:#555}.text-\[\#666\]{color:#666}.text-\[\#777\]{color:#777}.text-\[\#888\]{color:#888}.text-\[\#999\]{color:#999}.text-\[\#aaa\]{color:#aaa}.text-\[\#bbb\]{color:#bbb}.text-\[\#ddd\]{color:#ddd}.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-blue-400{color:var(--color-blue-400)}.text-blue-400\/80{color:#54a2ffcc}@supports (color:color-mix(in lab,red,red)){.text-blue-400\/80{color:color-mix(in oklab,var(--color-blue-400) 80%,transparent)}}.text-blue-500{color:var(--color-blue-500)}.text-cyan-400{color:var(--color-cyan-400)}.text-cyan-400\/80{color:#00d2efcc}@supports (color:color-mix(in lab,red,red)){.text-cyan-400\/80{color:color-mix(in oklab,var(--color-cyan-400) 80%,transparent)}}.text-emerald-400{color:var(--color-emerald-400)}.text-emerald-400\/30{color:#00d2944d}@supports (color:color-mix(in lab,red,red)){.text-emerald-400\/30{color:color-mix(in oklab,var(--color-emerald-400) 30%,transparent)}}.text-emerald-400\/60{color:#00d29499}@supports (color:color-mix(in lab,red,red)){.text-emerald-400\/60{color:color-mix(in oklab,var(--color-emerald-400) 60%,transparent)}}.text-emerald-400\/70{color:#00d294b3}@supports (color:color-mix(in lab,red,red)){.text-emerald-400\/70{color:color-mix(in oklab,var(--color-emerald-400) 70%,transparent)}}.text-emerald-400\/80{color:#00d294cc}@supports (color:color-mix(in lab,red,red)){.text-emerald-400\/80{color:color-mix(in oklab,var(--color-emerald-400) 80%,transparent)}}.text-gray-400{color:var(--color-gray-400)}.text-orange-400{color:var(--color-orange-400)}.text-orange-400\/60{color:#ff8b1a99}@supports (color:color-mix(in lab,red,red)){.text-orange-400\/60{color:color-mix(in oklab,var(--color-orange-400) 60%,transparent)}}.text-orange-400\/80{color:#ff8b1acc}@supports (color:color-mix(in lab,red,red)){.text-orange-400\/80{color:color-mix(in oklab,var(--color-orange-400) 80%,transparent)}}.text-orange-500{color:var(--color-orange-500)}.text-purple-400{color:var(--color-purple-400)}.text-purple-400\/60{color:#c07eff99}@supports (color:color-mix(in lab,red,red)){.text-purple-400\/60{color:color-mix(in oklab,var(--color-purple-400) 60%,transparent)}}.text-purple-400\/70{color:#c07effb3}@supports (color:color-mix(in lab,red,red)){.text-purple-400\/70{color:color-mix(in oklab,var(--color-purple-400) 70%,transparent)}}.text-purple-400\/80{color:#c07effcc}@supports (color:color-mix(in lab,red,red)){.text-purple-400\/80{color:color-mix(in oklab,var(--color-purple-400) 80%,transparent)}}.text-red-300{color:var(--color-red-300)}.text-red-400{color:var(--color-red-400)}.text-red-400\/30{color:#ff65684d}@supports (color:color-mix(in lab,red,red)){.text-red-400\/30{color:color-mix(in oklab,var(--color-red-400) 30%,transparent)}}.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\/70{color:#ff6568b3}@supports (color:color-mix(in lab,red,red)){.text-red-400\/70{color:color-mix(in oklab,var(--color-red-400) 70%,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-red-500{color:var(--color-red-500)}.text-sky-400{color:var(--color-sky-400)}.text-sky-400\/80{color:#00bcfecc}@supports (color:color-mix(in lab,red,red)){.text-sky-400\/80{color:color-mix(in oklab,var(--color-sky-400) 80%,transparent)}}.text-white{color:var(--color-white)}.text-white\/80{color:#fffc}@supports (color:color-mix(in lab,red,red)){.text-white\/80{color:color-mix(in oklab,var(--color-white) 80%,transparent)}}.text-yellow-400{color:var(--color-yellow-400)}.text-yellow-400\/80{color:#fac800cc}@supports (color:color-mix(in lab,red,red)){.text-yellow-400\/80{color:color-mix(in oklab,var(--color-yellow-400) 80%,transparent)}}.text-yellow-500{color:var(--color-yellow-500)}.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,)}.line-through{text-decoration-line:line-through}.opacity-0{opacity:0}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.opacity-90{opacity:.9}.opacity-100{opacity:1}.\!shadow-none{--tw-shadow:0 0 #0000!important;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)!important}.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,)}.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))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-500{--tw-duration:.5s;transition-duration:.5s}.select-none{-webkit-user-select:none;user-select:none}.\[font-variant-ligatures\:none\]{font-variant-ligatures:none}@media(hover:hover){.group-hover\:text-white:is(:where(.group):hover *){color:var(--color-white)}.group-hover\/code\:opacity-100:is(:where(.group\/code):hover *){opacity:1}.hover\:border-\[\#333\]:hover{border-color:#333}.hover\:border-\[\#444\]:hover{border-color:#444}.hover\:bg-\[\#2a2a2a\]:hover{background-color:#2a2a2a}.hover\:text-\[\#888\]:hover{color:#888}.hover\:text-\[\#ccc\]:hover{color:#ccc}.hover\:text-white:hover{color:var(--color-white)}.hover\:underline:hover{text-decoration-line:underline}}@media(min-width:40rem){.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media(min-width:64rem){.lg\:sticky{position:sticky}.lg\:top-6{top:calc(var(--spacing) * 6)}.lg\:max-h-\[calc\(100vh-3rem\)\]{max-height:calc(100vh - 3rem)}.lg\:grid-cols-\[1fr_340px\]{grid-template-columns:1fr 340px}.lg\:overflow-y-auto{overflow-y:auto}.lg\:border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.lg\:border-\[\#2a2a2a\]{border-color:#2a2a2a}.lg\:pl-6{padding-left:calc(var(--spacing) * 6)}}.\[\&_svg\]\:h-3\.5 svg{height:calc(var(--spacing) * 3.5)}.\[\&_svg\]\:w-3\.5 svg{width:calc(var(--spacing) * 3.5)}}:root{--font-geist-sans:ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;--font-geist-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace}html,body{color:#fff;font-family:var(--font-geist-sans);background:#000}@keyframes tab-in{0%{opacity:0;filter:blur(4px);transform:translateY(6px)}to{opacity:1;filter:blur();transform:translateY(0)}}.animate-tab-in{animation:.2s ease-out tab-in}.prose-markdown{color:#999;word-wrap:break-word;overflow-wrap:break-word;font-size:14px;line-height:1.7}.prose-markdown p{margin-bottom:.75em}.prose-markdown p:last-child{margin-bottom:0}.prose-markdown strong{color:#ccc;font-weight:600}.prose-markdown em{font-style:italic}.prose-markdown code{color:#ccc;font-variant-ligatures:none;background:#0a0a0a;border:1px solid #111;border-radius:4px;padding:.15em .4em;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:.9em}.prose-markdown pre{font-variant-ligatures:none;background:0 0;border:none;border-radius:0;margin:0;padding:0}.prose-markdown pre code{color:inherit;background:0 0;border:none;padding:0;font-size:13px}.prose-markdown ul,.prose-markdown ol{margin-bottom:.75em;padding-left:1.5em}.prose-markdown ul{list-style-type:disc}.prose-markdown ol{list-style-type:decimal}.prose-markdown li{margin-bottom:.25em}.prose-markdown li>ul,.prose-markdown li>ol{margin-top:.25em;margin-bottom:.25em;padding-left:1.5em}.prose-markdown ol+ul{margin-top:-.5em;padding-left:3em}.prose-markdown h1,.prose-markdown h2,.prose-markdown h3,.prose-markdown h4,.prose-markdown h5,.prose-markdown h6{color:#ddd;margin-top:1em;margin-bottom:.5em;font-weight:600}.prose-markdown a{color:inherit;pointer-events:none;text-decoration:none}.prose-markdown blockquote{color:#777;border-left:3px solid #333;margin:.75em 0;padding-left:1em}.prose-markdown hr{border:none;border-top:1px solid #222;margin:1em 0}.prose-markdown>table{border-collapse:collapse;width:100%;margin:.75em 0}.prose-markdown>table th,.prose-markdown>table td{text-align:left;border:1px solid #333;padding:.4em .75em;font-size:13px}.prose-markdown>table th{color:#ccc;background:#1a1a1a;font-weight:600}@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-duration{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}@keyframes pulse{50%{opacity:.5}} diff --git a/strix/viewer/viewer_dist/index.html b/strix/viewer/viewer_dist/index.html new file mode 100644 index 00000000..f9bfec3c --- /dev/null +++ b/strix/viewer/viewer_dist/index.html @@ -0,0 +1,15 @@ + + + + + + + + Strix Results + + + + +
+ + diff --git a/strix/viewer/viewer_dist/logo.png b/strix/viewer/viewer_dist/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..699eb83737137673585c5d23f4b1d5865a7344aa GIT binary patch literal 3801 zcmeH}c~nzp8pdw|gDFxFQHW>(ixr|)6SOcaA!-RofQU%2B4HIqs41EdmOxn4LRo}q zi33OgmjX7_L`2YpEeHgy0*z<`28c=_L6)!t0)}O7VCK~6GIQpf_P>7T+;hL&^X1## z-}^jox+mV{U2S7+007=~J>=vC0MHBIlK_K)Ut}9BPJ^#^&Kx>U0RY_=^#i%IQ+G4i z$#iu(;2p~x>qAG2eTj0T)T7AVFz!g2aJZb!*RIf2a=|lCbtFsHEY1d{%n8r4e*xdP~_OHKfS7+N!FmU1=hL$`lSDJfKIMgh6yA#0^G2ENT9q0 zuI2eE{+93sK3GS?o3Igmf37ZR*^#DcSp;tes(N7-qJpePG zIW{$AMOz05wo4PDqYdfa^HKXeaw*yV1j`O}i1XWeE|oJ_tjp>+WA0;=y}JxEySlmt z$(ztH#=)#jX*_mLcJ_A(hr+6Q{QUgB6^*oq8KB+rnG^!S6qC3`5k9cZ(X1VawSmZX8)k^68PO-`>E7#NVXALaF&Hmt{qhf#bsxg)fAtZwqbXa^pT zzb1;vWREa8THUS>17bptHC$(S6_nh#T$bK%4Yax;s6?asw*HQwNwZLYhXyVeF;SCH zymwE=6{k?g`-;~2`8WkEF?gYS@3< z{YXpx`i=3QB%C?p8Rm-%Tj5TP(!`efxasXQ%{g3Fic~f+fn4eSDs^uIk|I4-)#H={ z1gt^`7wB)i74s9I>Y*=eSD|cJ4|ZRxKrp~H-k#V!o!lWb2OLcP6YjT{Q4eoMB1&cY z$>q*jL2#7TEIteIrOj)gQ+-r*5TWr^{+#PB-N9g}R`&CO?=C~3d2fVOfm06BDlacj zXny)EmAVlP-9LG`jEnfnoORU;M-*W>V##CawCpAnsbwpDGW%kAX1J?d*1p%O#F3ui ze}}_kPx~U1iS1!kvc=h(WnJNlp-lzqaAH+@M#eyDf%|rl2YLNndpo;~eg|`d{(%}& z1uLUp2QX(){C62v+E0q_knD@_=(xICCgnjNKoo(PoIqsEyiWtVT|2le7LTn5HeFpW zoT{&KN%{V(#l$Hxx2~>klsEq74K3&B#v5{#xELD15!pMM6;s$FJQizDMcf2Nyu4Xb z^?iVIJ&)(h5lN*|6aO{v5+2(q6I*HV@X^zK7b}K=(c>NSKmNFlch;N|9X%8s3e0|c z!-C>`m2?8F71*hWwFFa2?a&#o=xlxhF6Cz zO?ySM9u3}>t7Hi0FzZ5)q|*3JXdvtHh=?=7%PtOfXR+Rl-IXjYOn1r-T=5ImX$D2a zG-*Lt`h8zLZRYi}iert-OYsUbz+tPcls)npJlL+tnX?%swGfl+6!&K+wQb7rV^!04x8PpxkeJJj|OxmPU$@yU4k9$;Ic<@Kz-t7FuiE0 zdAVuqM`W%82GhvnJ(t6m8zbnFwHSV)H-SnfPd&&BFDyG-K#3s`KxE6pO(++mg*9Ud zjxibz{KZm6;^K^`o5(c~o(GL==$T?ZVSK~|&~iiE^r?{1=h`pY=cL-(+NS&8`S5wo zvykKXBv2C-hcYzIM-VYmISDg+jP)hV_UK$x0fqD5-Hx6emVBF}gsEU5| z@uhjKQ<2BZ_657AXY?I0F)?ul6Sy@I;#0ZY7F)b(eLq)+-vO4NyX$W);hz4cA;$#r zV)6^r2Rp0b>eM2LMknPQ2VCE3Mxvuq?}RX$fJolm~(^VxVSiO z&*||+g9fSGa7u5*xRC|!xLP_5+*;nFfBEX#UR+jCCJSt!>yAHrUfUq=?CjjLXOAf_ zn=Vm>=_Qw6>CR=FgJ^n<#*iVNY{rwGp5sxi&R{~R-7p`>I$mk><;BknJ0Wxa>YTZj zY3%OX#}XwcpfMUFLZ7xSG)OB8qr%cK{Tsk&zM5RV)r= zrL6hUC!+iF->#UD{Fg6-6fnNQHUV-!4nfm=@y_~{vg`jUrBWe|NlRPM&b74@ zpaF^s2#%mR@YdSZgFK4>jVp_ + + + + + + + Strix Results + + +
+ + + diff --git a/strix/viewer_src/package-lock.json b/strix/viewer_src/package-lock.json new file mode 100644 index 00000000..1c74cd0c --- /dev/null +++ b/strix/viewer_src/package-lock.json @@ -0,0 +1,4272 @@ +{ + "name": "strix-viewer", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "strix-viewer", + "version": "0.0.0", + "dependencies": { + "@dagrejs/dagre": "^2.0.4", + "@xyflow/react": "^12.10.1", + "clsx": "^2.1.1", + "diff": "^8.0.3", + "highlight.js": "^11.11.1", + "lucide-react": "^0.563.0", + "react": "^19.2.0", + "react-dom": "^19.2.0", + "react-markdown": "^10.1.0", + "remark-gfm": "^4.0.1", + "tailwind-merge": "^3.4.0" + }, + "devDependencies": { + "@tailwindcss/vite": "^4.1.0", + "@types/diff": "^7.0.2", + "@types/react": "^19.2.0", + "@types/react-dom": "^19.2.0", + "@vitejs/plugin-react": "^5.0.0", + "tailwindcss": "^4.1.0", + "typescript": "^5.6.0", + "vite": "^6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", + "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.29.7", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz", + "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz", + "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helpers": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.7.tgz", + "integrity": "sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz", + "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.29.7", + "@babel/helper-validator-option": "^7.29.7", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz", + "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz", + "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz", + "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.29.7.tgz", + "integrity": "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz", + "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz", + "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.7.tgz", + "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.7" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.29.7.tgz", + "integrity": "sha512-TL0hMc9xzy86VD31nUiwzd5otRAcyEPcsegCxolO0PvcXuH1v0kECe/UIznYFihpkvU5wg/jk4v0TTEFfm53fw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.29.7.tgz", + "integrity": "sha512-06IyK09H3wi4cGbhDBwp5gUGo0IKtnYa8tyTiephirPCK6fbobVGiXMMI5zLQ4aKEYP3wZ3ArU44o+8KMrSG/Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz", + "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.7.tgz", + "integrity": "sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-globals": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.7.tgz", + "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@dagrejs/dagre": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@dagrejs/dagre/-/dagre-2.0.4.tgz", + "integrity": "sha512-J6vCWTNpicHF4zFlZG1cS5DkGzMr9941gddYkakjrg3ZNev4bbqEgLHFTWiFrcJm7UCRu7olO3K6IRDd9gSGhA==", + "license": "MIT", + "dependencies": { + "@dagrejs/graphlib": "3.0.4" + } + }, + "node_modules/@dagrejs/graphlib": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@dagrejs/graphlib/-/graphlib-3.0.4.tgz", + "integrity": "sha512-HxZ7fCvAwTLCWCO0WjDkzAFQze8LdC6iOpKbetDKHIuDfIgMlIzYzqZ4nxwLlclQX+3ZVeZ1K2OuaOE2WWcyOg==", + "license": "MIT" + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", + "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", + "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", + "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", + "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", + "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", + "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", + "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", + "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", + "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", + "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", + "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", + "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", + "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", + "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", + "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", + "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", + "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", + "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", + "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", + "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", + "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", + "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", + "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", + "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", + "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", + "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-rc.3", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.3.tgz", + "integrity": "sha512-eybk3TjzzzV97Dlj5c+XrBFW57eTNhzod66y9HrBlzJ6NsCrWCp/2kaPS3K9wJmurBC0Tdw4yPjXKZqlznim3Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.62.2.tgz", + "integrity": "sha512-6o7ZLZK+BeenkZCFNDXqpbjw9bD6nuWonvS/lwQJp7NoVVxm6p3qE7qQ5jGuBjiFsgvqjD8mZAU5oWxTmbOeOg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.62.2.tgz", + "integrity": "sha512-BaH7BllCACHoH1LguOU56UItGfUWjujlO65kS9LAodViaN4bwIKd7oeW/ZHJ/4ljr/7MIiENnNy3HJ0zXv8Zkw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.62.2.tgz", + "integrity": "sha512-v39RCCvj4He82I9sFmk+M1VZ0PLM9sfsLVikjfx2hYBNALhrrOR2D3JjQA6AhlaSOgcR+RzrKY7e1+bT6SUO/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.62.2.tgz", + "integrity": "sha512-yl0y2vq3S3lHeuXhEdss6TWfKW8vkujImO12tn4ZkG/4oghr09LvdYm2RElVjokTQiUvDUGXLGsYeLqUMCKpGA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.62.2.tgz", + "integrity": "sha512-tT4pvt4qXD+vEoezupCWi+a1F0vvDiksiHc+PxRlYTOH1I6/X4id9jPxTP+Fg+545euaFT1jJVs4CEdHZAU1vw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.62.2.tgz", + "integrity": "sha512-6nU5F2wCW+qvCBhTn1pdIU3bzsIoF7EUwsCDRxilWGprQR6yd508YnH9+OKFCwpfS8pjZqDUmnCAr7exax0XCg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.62.2.tgz", + "integrity": "sha512-n1GJHPOvpIfhi3TmrCeh6S6URt9BFCt0KQE3qvexyGCTAKpR4Lg+eWvNZEqu7epxwus/8ElT3hacYEucm49SZg==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.62.2.tgz", + "integrity": "sha512-JqgflS8wEB+UXV/vS1RpRbifGBeN4D5lz8D8oOFbFZw4vedvdOgCFAjfBmIMdW3yL10XpQQ0Ambepw6MXrhOnA==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.62.2.tgz", + "integrity": "sha512-wnFJkogWvN4jm/hQRF2UBaeUmk20j5+DmHvoyWii2b8HJDyvz1MF2OU/6ynXt2KR63rbZLWkFpoytpdc/yBuSA==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.62.2.tgz", + "integrity": "sha512-HVu2bp0zhvJ8xHEV9+UUs7S90VadmBSY3LcIMvozbPo4AuMGDWlz3ymHLHZPX4hR67TKTt8Qp5PJ5RBg/i+RMQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.62.2.tgz", + "integrity": "sha512-mQqqAV8QaoSgr9I2fKDLY2BAVvmKjWoGiu/cSYQonsLvtqwEn1E4QYfnCOcp5zoEqNhsDYin1s6jx/VJmrxlZg==", + "cpu": [ + "loong64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.62.2.tgz", + "integrity": "sha512-IxKLoxCQ2IWi6bT2akyDUBGsOImDKB+sPp4EsTmwFQ/fMwpCKm8uLSSgP/Kx/QYUgKis6SEZ5/Nlhup0DIA0PQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.62.2.tgz", + "integrity": "sha512-Mk5ha2RQSgyFfmYYLkBpPnUk8D8FriBxesO1u9O75X0mHgXL1UQcH5Itl2lurWL2tj0RxV9b9tJgipac0hRY9A==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.62.2.tgz", + "integrity": "sha512-CjvEnqJL/0/TQ3TXX3OPIJ/kmBellrWd4heXUmHeJlTnmwjKpSJzoehLaL6Xk0ZnMHBu9dZuFADNOrtjF4v+2w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.62.2.tgz", + "integrity": "sha512-1SiZbzwdkaDURsew/tSOrooKiYy7EQGT6m8ufavAi9NEyQb/6VuIxFXAL1fqa4iZe3g4NbNk4P7J32z2tw5Mgg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.62.2.tgz", + "integrity": "sha512-nQts12zJ3NQRoE6uYljOH89v7szzLDvG2JD/vsX+vGXU8w/At1GowTZ5/7qeFQ8m7L55rpR8Okugnuo5bgjy2Q==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.62.2.tgz", + "integrity": "sha512-E9/ll019jhPIJgpzfZoIkBGhcz+kKNgVWYRY0zr9srBdPPFVpvOKW8VaJKUbeK+eZXyQF9ltME+Kk6affeaPgg==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.62.2.tgz", + "integrity": "sha512-5BqxR/pshjey51iliyzTD5Xi3EN0aLmQ2lZ3lvefVV9c82BvrLo2/6OT55iifpWBufs6kdwWbuOKS841DrmK9A==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.62.2.tgz", + "integrity": "sha512-uNN83XxQrRAh/w0/pmAfibcwyb6YWt4gP+dpnQKPVJshAloQ785ii8CT8ZCIxkGg9opVsvAlGhFitSm6D1Jjpg==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.62.2.tgz", + "integrity": "sha512-srjEIxSH3LRnJN6THczDHWQplqEMFiAJrTab0msUryh9kwNpkICf3Ea6q6MN/2cZwRFUNx5w+h6Hpi4QuHS6Zg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.62.2.tgz", + "integrity": "sha512-8hOJnxgbyObnCm5AlRA3A931xX19xq80RjVTKgJOvEKWqJruP/Uf12IbAOaDjjEXYRewwHLfmF0YRIdK3OwKWA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.62.2.tgz", + "integrity": "sha512-mmF4AY1i0hG/bLWUctUq59gtmgaSIRa3cu/A3JFRp/sCNEme2bgDEiDS22P9FbnJB8NJNF4jPJiSP5RHQpUTDg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.62.2.tgz", + "integrity": "sha512-DZgkknc6jhHrk46V25vbAM0zZkyP0nSDkJB8/dRkLTxv470dOmWDqGoEJl/9A0dFfS7yE3REOwNDxpHwSLSt0Q==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.62.2.tgz", + "integrity": "sha512-T6xr6ucWSFto+VGajA8YH26LdpHRuP4YLHEKAtCWvJDOlnmWcDZVCI2Jmjr+IFHDlt2zRaTAKE4tfjTaWLgJBg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.62.2.tgz", + "integrity": "sha512-BfzEnDJOt9T8M989/lA37EcJgat01wLRnoi5dQf3QzOH7jzpqTAzdDbVfRljVr5r+jzKqpbHeyOfAaXxAd0PAA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@tailwindcss/node": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.3.3.tgz", + "integrity": "sha512-/T8IKEsf9VTU6tLjgC7+sv2mOPtQxzE2jMw7u4Tt40Tx+QSZxpzh95/H6cMKoja9XuW7iMdLJYBB0o9G1CaAgg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.5", + "enhanced-resolve": "^5.24.1", + "jiti": "^2.7.0", + "lightningcss": "1.32.0", + "magic-string": "^0.30.21", + "source-map-js": "^1.2.1", + "tailwindcss": "4.3.3" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.3.3.tgz", + "integrity": "sha512-krXjAikiaFSPaK/FkAQT5UTx3VormQaiZ5hBFlJZ9UFQGB/rwg1MZIhHAG9smMQRTdyJxP6Qt5MwMtdyU5FWrA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.3.3", + "@tailwindcss/oxide-darwin-arm64": "4.3.3", + "@tailwindcss/oxide-darwin-x64": "4.3.3", + "@tailwindcss/oxide-freebsd-x64": "4.3.3", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.3.3", + "@tailwindcss/oxide-linux-arm64-gnu": "4.3.3", + "@tailwindcss/oxide-linux-arm64-musl": "4.3.3", + "@tailwindcss/oxide-linux-x64-gnu": "4.3.3", + "@tailwindcss/oxide-linux-x64-musl": "4.3.3", + "@tailwindcss/oxide-wasm32-wasi": "4.3.3", + "@tailwindcss/oxide-win32-arm64-msvc": "4.3.3", + "@tailwindcss/oxide-win32-x64-msvc": "4.3.3" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.3.3.tgz", + "integrity": "sha512-Y85A2gmPSkl5Ve5qR86GL4HT509cFqQh1aes9p3sSkyTPwt0Pppf3GkwGe4JPACcRYjgJIEhQgM6dBClnr0NYw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.3.3.tgz", + "integrity": "sha512-BiaWatpBcERQFDlOjRDpIVXuFK5PJez5SA4JMg6VYZdBYU+qKfV/vqjcIs+IYmtitf1xYQZTwXvU/8y4lfZUGw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.3.3.tgz", + "integrity": "sha512-fAeUqfV5ndhxRwai8cXGzdLvul9utWOmeTkv69unv4ZXixjn61Z+p9lCWdwOwA3TYboG3BwdVuN/RDjhBRl0mw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.3.3.tgz", + "integrity": "sha512-iyf5bV6+wnAlflVeEy7R25dupxTNECZN5QMI0qNT6eT+EgaGdZcKhGkr5SdoaWiLJ3spLqIY9VCeSGrwmtg4kw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.3.3.tgz", + "integrity": "sha512-aAYUprJAJQWWbRrPvtjdroZ56Md+JM8pMiopS6xGEwDfLhqj+2ver2p4nU4Mb3CRqcMmNBjo8KkUgcxhkzVQGQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.3.3.tgz", + "integrity": "sha512-nDxldcEENOxZRzC2uu9jrutZdAAQtb+8WWDCSnWL1zvBk1+FN+x6MtDViPB5AJMfttVCUhehGWus3XBPgatM/w==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.3.3.tgz", + "integrity": "sha512-Md44bD6veX/PC5iyF8cDVnw4HBIANZepRZZ7a8DQOvkfo5WUBwcp6iAuCUz23u+4SUkhJlD3eL7hNdW8ezd/kA==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.3.3.tgz", + "integrity": "sha512-tx7us1muwOKAKWao2v/GaafFeQboE6aj88vC6ziN2NCGcRm8gWUhwjzg+YdVB1e4boAtdtma4L43onunI6NS4w==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.3.3.tgz", + "integrity": "sha512-SJxX60smvHgasZoBy11dX6YRjXJFovwWBoedhbQPOBzgFWBHGB+TVPWB9BxzR7TTxU8FQZAI2AyiNCMzFm8Img==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.3.3.tgz", + "integrity": "sha512-jx1+rPhY/5Ympkktd656HBWEBLxP7dH06losBLjjf5vgCODXvi9KhtftWcMIwTFIDqBr7cRnQkdLnAG+IOlGvQ==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.11.1", + "@emnapi/runtime": "^1.11.1", + "@emnapi/wasi-threads": "^1.2.2", + "@napi-rs/wasm-runtime": "^1.1.4", + "@tybys/wasm-util": "^0.10.2", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.3.3.tgz", + "integrity": "sha512-3rc292Ca2ceK6Ulcc/bAVnTs/3nDtoPhyEKlgPv+yQJQi/JS/AMJlqzxvlDacL1nekbrcf6bTqp/jV4qgnPxNQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.3.3.tgz", + "integrity": "sha512-yJ0pwIVc/nYeGoV02WtsN8KYyLQv7kyI2wDnkezyJlGGjkd4QLwDGAwl47YpPJeuI0M0ObaXGSPjvWDPeTPggw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/vite": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.3.3.tgz", + "integrity": "sha512-yYU8cogLeSh/ms2jh8Fj7jaba/EWa7Ja6GoUqYZaraEuCI5YS6ms6ObZgjjedm+jm6XZjdNRWBpPP6Z86oOxcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tailwindcss/node": "4.3.3", + "@tailwindcss/oxide": "4.3.3", + "tailwindcss": "4.3.3" + }, + "peerDependencies": { + "vite": "^5.2.0 || ^6 || ^7 || ^8" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.2" + } + }, + "node_modules/@types/d3-color": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz", + "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==", + "license": "MIT" + }, + "node_modules/@types/d3-drag": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-drag/-/d3-drag-3.0.7.tgz", + "integrity": "sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==", + "license": "MIT", + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-interpolate": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz", + "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==", + "license": "MIT", + "dependencies": { + "@types/d3-color": "*" + } + }, + "node_modules/@types/d3-selection": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-3.0.11.tgz", + "integrity": "sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==", + "license": "MIT" + }, + "node_modules/@types/d3-transition": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-transition/-/d3-transition-3.0.9.tgz", + "integrity": "sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==", + "license": "MIT", + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-zoom": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@types/d3-zoom/-/d3-zoom-3.0.8.tgz", + "integrity": "sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==", + "license": "MIT", + "dependencies": { + "@types/d3-interpolate": "*", + "@types/d3-selection": "*" + } + }, + "node_modules/@types/debug": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.13.tgz", + "integrity": "sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==", + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/diff": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@types/diff/-/diff-7.0.2.tgz", + "integrity": "sha512-JSWRMozjFKsGlEjiiKajUjIJVKuKdE3oVy2DNtK+fUo8q82nhFZ2CPQwicAIkXrofahDXrWJ7mjelvZphMS98Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "license": "MIT" + }, + "node_modules/@types/estree-jsx": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz", + "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==", + "license": "MIT", + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/@types/hast": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.5.tgz", + "integrity": "sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "19.2.17", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.17.tgz", + "integrity": "sha512-MXfmqaVPEVgkBT/aY0aGCkRWWtByiYQXo3xdQ8r5RzuFrPiRn8Gar2tQdXSUQ2GKV3bkXckek89V8wQBY2Q/Aw==", + "license": "MIT", + "dependencies": { + "csstype": "^3.2.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz", + "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", + "devOptional": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.2.0" + } + }, + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "license": "MIT" + }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.3.tgz", + "integrity": "sha512-60YRaenCQcVjYEKOcG824+DRGGIQ3VKErcBoAEDJZz5bKIs2ZG+X/H9Nk+Q6EVkwJk5QNApxbrc5QtBSwtrXAg==", + "license": "ISC" + }, + "node_modules/@vitejs/plugin-react": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-5.2.0.tgz", + "integrity": "sha512-YmKkfhOAi3wsB1PhJq5Scj3GXMn3WvtQ/JC0xoopuHoXSdmtdStOpFrYaT1kie2YgFBcIe64ROzMYRjCrYOdYw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.29.0", + "@babel/plugin-transform-react-jsx-self": "^7.27.1", + "@babel/plugin-transform-react-jsx-source": "^7.27.1", + "@rolldown/pluginutils": "1.0.0-rc.3", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.18.0" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@xyflow/react": { + "version": "12.11.2", + "resolved": "https://registry.npmjs.org/@xyflow/react/-/react-12.11.2.tgz", + "integrity": "sha512-eLAlDWJfWnQEhJwGMjlWdAXO9eYllKpliUmPQlAmOLxz6mExXuzMVDUKLMquixgkrtmMFFtug3jGKmYYld12cA==", + "license": "MIT", + "dependencies": { + "@xyflow/system": "0.0.79", + "classcat": "^5.0.3", + "zustand": "^4.4.0" + }, + "peerDependencies": { + "@types/react": ">=17", + "@types/react-dom": ">=17", + "react": ">=17", + "react-dom": ">=17" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@xyflow/system": { + "version": "0.0.79", + "resolved": "https://registry.npmjs.org/@xyflow/system/-/system-0.0.79.tgz", + "integrity": "sha512-czLyOh91NF0hIzbNzwi8I6GlqG23BHh2435OddfI6uiaLH3xdrdygO93gqgH1Bv9mhy8XPFQJOBn1FTq4LvEWA==", + "license": "MIT", + "dependencies": { + "@types/d3-drag": "^3.0.7", + "@types/d3-interpolate": "^3.0.4", + "@types/d3-selection": "^3.0.10", + "@types/d3-transition": "^3.0.8", + "@types/d3-zoom": "^3.0.8", + "d3-drag": "^3.0.0", + "d3-interpolate": "^3.0.1", + "d3-selection": "^3.0.0", + "d3-zoom": "^3.0.0" + } + }, + "node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/baseline-browser-mapping": { + "version": "2.10.43", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.43.tgz", + "integrity": "sha512-AjYpR78kDWAY3Efj+cDTFH9t9SCoL7OoTp1BOb0mQV7S+6CiLwnWM3FyxhJtdPufDFKzmCSFoUncKjWgJEZTCQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/browserslist": { + "version": "4.28.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.6.tgz", + "integrity": "sha512-FQBYNK15VMslhLHpA7+n+n1GOlF1kId2xcCg7/j95f24AOF6VDYMNH4mFxF7KuaTdv627faazpOAjFzMrfJOUw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.10.42", + "caniuse-lite": "^1.0.30001803", + "electron-to-chromium": "^1.5.389", + "node-releases": "^2.0.51", + "update-browserslist-db": "^1.2.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001806", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001806.tgz", + "integrity": "sha512-72Cuvd95zbSYPKq6Fhg8eDJRlzgWDf7/mtoZv6Qe/DYNCEBdNxoA3+rZAU2ZhGCpZlns3EssFavaZomckT5Uuw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-reference-invalid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", + "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/classcat": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/classcat/-/classcat-5.0.5.tgz", + "integrity": "sha512-JhZUT7JFcQy/EzW605k/ktHtncoo9vnyW/2GspNYwFlN1C/WmjuV/xtS04e9SOkL2sTdw0VAZ2UGCcQ9lR6p6w==", + "license": "MIT" + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "license": "MIT" + }, + "node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dispatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", + "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-drag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", + "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", + "license": "ISC", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-selection": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-selection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", + "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-transition": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", + "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3", + "d3-dispatch": "1 - 3", + "d3-ease": "1 - 3", + "d3-interpolate": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "d3-selection": "2 - 3" + } + }, + "node_modules/d3-zoom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", + "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", + "license": "ISC", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "2 - 3", + "d3-transition": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decode-named-character-reference": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.3.0.tgz", + "integrity": "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==", + "license": "MIT", + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "license": "MIT", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/diff": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/diff/-/diff-8.0.4.tgz", + "integrity": "sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.393", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.393.tgz", + "integrity": "sha512-kiDJdIUawuEIcp9XoICKp1iTYDEbgguIPq526N1Q7jIQDeQ3CqoMx71025PI/7E48Ddtw2HuWsVjY7afEgNxmg==", + "dev": true, + "license": "ISC" + }, + "node_modules/enhanced-resolve": { + "version": "5.24.2", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.24.2.tgz", + "integrity": "sha512-rpsZEGT1jFuve6QlpyRp9ckQ+kN61hvF9BzCPyMdaKTm8UJce96KBn3sorXOFXlzjPrs3Vc4T1NsSroZ3PxlFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.3.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/esbuild": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", + "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.12", + "@esbuild/android-arm": "0.25.12", + "@esbuild/android-arm64": "0.25.12", + "@esbuild/android-x64": "0.25.12", + "@esbuild/darwin-arm64": "0.25.12", + "@esbuild/darwin-x64": "0.25.12", + "@esbuild/freebsd-arm64": "0.25.12", + "@esbuild/freebsd-x64": "0.25.12", + "@esbuild/linux-arm": "0.25.12", + "@esbuild/linux-arm64": "0.25.12", + "@esbuild/linux-ia32": "0.25.12", + "@esbuild/linux-loong64": "0.25.12", + "@esbuild/linux-mips64el": "0.25.12", + "@esbuild/linux-ppc64": "0.25.12", + "@esbuild/linux-riscv64": "0.25.12", + "@esbuild/linux-s390x": "0.25.12", + "@esbuild/linux-x64": "0.25.12", + "@esbuild/netbsd-arm64": "0.25.12", + "@esbuild/netbsd-x64": "0.25.12", + "@esbuild/openbsd-arm64": "0.25.12", + "@esbuild/openbsd-x64": "0.25.12", + "@esbuild/openharmony-arm64": "0.25.12", + "@esbuild/sunos-x64": "0.25.12", + "@esbuild/win32-arm64": "0.25.12", + "@esbuild/win32-ia32": "0.25.12", + "@esbuild/win32-x64": "0.25.12" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "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", + "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT" + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/hast-util-to-jsx-runtime": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz", + "integrity": "sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-js": "^1.0.0", + "unist-util-position": "^5.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/highlight.js": { + "version": "11.11.1", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.11.1.tgz", + "integrity": "sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/html-url-attributes": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/html-url-attributes/-/html-url-attributes-3.0.1.tgz", + "integrity": "sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/inline-style-parser": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.7.tgz", + "integrity": "sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==", + "license": "MIT" + }, + "node_modules/is-alphabetical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", + "license": "MIT", + "dependencies": { + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-decimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-hexadecimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jiti": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.7.0.tgz", + "integrity": "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/lightningcss": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", + "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.32.0", + "lightningcss-darwin-arm64": "1.32.0", + "lightningcss-darwin-x64": "1.32.0", + "lightningcss-freebsd-x64": "1.32.0", + "lightningcss-linux-arm-gnueabihf": "1.32.0", + "lightningcss-linux-arm64-gnu": "1.32.0", + "lightningcss-linux-arm64-musl": "1.32.0", + "lightningcss-linux-x64-gnu": "1.32.0", + "lightningcss-linux-x64-musl": "1.32.0", + "lightningcss-win32-arm64-msvc": "1.32.0", + "lightningcss-win32-x64-msvc": "1.32.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", + "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", + "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", + "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", + "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", + "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", + "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", + "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", + "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", + "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", + "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", + "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/longest-streak": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/lucide-react": { + "version": "0.563.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.563.0.tgz", + "integrity": "sha512-8dXPB2GI4dI8jV4MgUDGBeLdGk8ekfqVZ0BdLcrRzocGgG75ltNEmWS+gE7uokKF/0oSUuczNDT+g9hFJ23FkA==", + "license": "ISC", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@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", + "integrity": "sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "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", + "integrity": "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@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-jsx": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.2.0.tgz", + "integrity": "sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdxjs-esm": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz", + "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@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-phrasing": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", + "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz", + "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", + "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", + "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", + "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "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", + "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-label": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", + "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", + "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-whitespace": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", + "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-chunked": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", + "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-classify-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", + "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-combine-extensions": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", + "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", + "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-string": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", + "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-html-tag-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", + "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", + "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-resolve-all": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", + "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-subtokenize": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", + "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.16", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.16.tgz", + "integrity": "sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-releases": { + "version": "2.0.51", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.51.tgz", + "integrity": "sha512-wRNIrw4DmVLKQlbgOMdkMx27Wrpzes2hh5Jtbi2bjPd+4wJstWIqP5A+lscnqbm0xxmT5Bpg8Lec5ItEBwx6BQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/parse-entities": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz", + "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "character-entities-legacy": "^3.0.0", + "character-reference-invalid": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse-entities/node_modules/@types/unist": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", + "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.19", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.19.tgz", + "integrity": "sha512-Mz8SaolMd8nB+G13WkORcxQKHZ/NE4xXevtkJHVuG+guo9/wYKlIMTKAqGdEmYOXR2ijPjTYNHssizdaVSUNdQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.12", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/property-information": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.2.0.tgz", + "integrity": "sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/react": { + "version": "19.2.7", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.7.tgz", + "integrity": "sha512-HNe9WslTbXmFK8o8cmwgAeJFSBvt1bPdHCVKtaaV+WlAN36mpT4hcRpwbf3fY56ar2oIXzsBpOAiIRHAdY0OlQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.2.7", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.7.tgz", + "integrity": "sha512-t0BRVXvbiE/o20Hfw669rLbMCDWtYZLvmJigy2f0MxsXF+71pxhR3xOkspmsO8h3ZlNzyibAmtCa3l4lYKk6gQ==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.27.0" + }, + "peerDependencies": { + "react": "^19.2.7" + } + }, + "node_modules/react-markdown": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-10.1.0.tgz", + "integrity": "sha512-qKxVopLT/TyA6BX3Ue5NwabOsAzm0Q7kAPwq6L+wWDwisYs7R8vZ0nRXqq6rkueboxpkjvLGU9fWifiX/ZZFxQ==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "hast-util-to-jsx-runtime": "^2.0.0", + "html-url-attributes": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.0.0", + "unified": "^11.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "@types/react": ">=18", + "react": ">=18" + } + }, + "node_modules/react-refresh": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.18.0.tgz", + "integrity": "sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "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", + "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-rehype": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.2.tgz", + "integrity": "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "mdast-util-to-hast": "^13.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "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.62.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.62.2.tgz", + "integrity": "sha512-RFnrW4lhXA3s3eqHDZvN654g8OTjzRfqpIRJYczCGB6HzphckVAi/Qh4tbPUbRuDi7s1Llv8g/NspLkttY3gTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.9" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.62.2", + "@rollup/rollup-android-arm64": "4.62.2", + "@rollup/rollup-darwin-arm64": "4.62.2", + "@rollup/rollup-darwin-x64": "4.62.2", + "@rollup/rollup-freebsd-arm64": "4.62.2", + "@rollup/rollup-freebsd-x64": "4.62.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.62.2", + "@rollup/rollup-linux-arm-musleabihf": "4.62.2", + "@rollup/rollup-linux-arm64-gnu": "4.62.2", + "@rollup/rollup-linux-arm64-musl": "4.62.2", + "@rollup/rollup-linux-loong64-gnu": "4.62.2", + "@rollup/rollup-linux-loong64-musl": "4.62.2", + "@rollup/rollup-linux-ppc64-gnu": "4.62.2", + "@rollup/rollup-linux-ppc64-musl": "4.62.2", + "@rollup/rollup-linux-riscv64-gnu": "4.62.2", + "@rollup/rollup-linux-riscv64-musl": "4.62.2", + "@rollup/rollup-linux-s390x-gnu": "4.62.2", + "@rollup/rollup-linux-x64-gnu": "4.62.2", + "@rollup/rollup-linux-x64-musl": "4.62.2", + "@rollup/rollup-openbsd-x64": "4.62.2", + "@rollup/rollup-openharmony-arm64": "4.62.2", + "@rollup/rollup-win32-arm64-msvc": "4.62.2", + "@rollup/rollup-win32-ia32-msvc": "4.62.2", + "@rollup/rollup-win32-x64-gnu": "4.62.2", + "@rollup/rollup-win32-x64-msvc": "4.62.2", + "fsevents": "~2.3.2" + } + }, + "node_modules/scheduler": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/stringify-entities": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", + "license": "MIT", + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/style-to-js": { + "version": "1.1.21", + "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.21.tgz", + "integrity": "sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==", + "license": "MIT", + "dependencies": { + "style-to-object": "1.0.14" + } + }, + "node_modules/style-to-object": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.14.tgz", + "integrity": "sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==", + "license": "MIT", + "dependencies": { + "inline-style-parser": "0.2.7" + } + }, + "node_modules/tailwind-merge": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.6.0.tgz", + "integrity": "sha512-uxL7qAVQriqRQPAyK3pj66VqskWqoZ37PW94jwOTwNfq/z9oyu1V+eqrZqtR2+fCiXdYOZe/Modt8GtvqNzu+w==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/dcastil" + } + }, + "node_modules/tailwindcss": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.3.3.tgz", + "integrity": "sha512-gOhV3P7ufE62QDGg1zVaTgCR+EtPv92k2nIhVcVKcLmxT1sUBsQGhnZj175j+MqRt4zLF7ic+sCYjfhxMxj7YQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/tapable": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.3.tgz", + "integrity": "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/trough": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", + "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/unified": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", + "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-is": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz", + "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.1.0.tgz", + "integrity": "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.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/unist-util-visit-parents": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz", + "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/use-sync-external-store": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz", + "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vite": { + "version": "6.4.3", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.4.3.tgz", + "integrity": "sha512-NTKlcQjlAK7MlQoyb6LgaqHc8sso/pVyUJYWMws3jg21uTJw/LddqIFPcPqP6PzpgbIcZyKI85sFE4HBrQDA8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.4.4", + "picomatch": "^4.0.2", + "postcss": "^8.5.3", + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/zustand": { + "version": "4.5.7", + "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.5.7.tgz", + "integrity": "sha512-CHOUy7mu3lbD6o6LJLfllpjkzhHXSBlX8B9+qPddUsIfeF5S/UZ5q0kmCsnRqT1UHFQZchNFDDzMbQsuesHWlw==", + "license": "MIT", + "dependencies": { + "use-sync-external-store": "^1.2.2" + }, + "engines": { + "node": ">=12.7.0" + }, + "peerDependencies": { + "@types/react": ">=16.8", + "immer": ">=9.0.6", + "react": ">=16.8" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "immer": { + "optional": true + }, + "react": { + "optional": true + } + } + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + } + } +} diff --git a/strix/viewer_src/package.json b/strix/viewer_src/package.json new file mode 100644 index 00000000..37eaff55 --- /dev/null +++ b/strix/viewer_src/package.json @@ -0,0 +1,34 @@ +{ + "name": "strix-viewer", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview" + }, + "dependencies": { + "@dagrejs/dagre": "^2.0.4", + "@xyflow/react": "^12.10.1", + "clsx": "^2.1.1", + "diff": "^8.0.3", + "highlight.js": "^11.11.1", + "lucide-react": "^0.563.0", + "react": "^19.2.0", + "react-dom": "^19.2.0", + "react-markdown": "^10.1.0", + "remark-gfm": "^4.0.1", + "tailwind-merge": "^3.4.0" + }, + "devDependencies": { + "@tailwindcss/vite": "^4.1.0", + "@types/diff": "^7.0.2", + "@types/react": "^19.2.0", + "@types/react-dom": "^19.2.0", + "@vitejs/plugin-react": "^5.0.0", + "tailwindcss": "^4.1.0", + "typescript": "^5.6.0", + "vite": "^6.0.0" + } +} diff --git a/strix/viewer_src/public/logo.png b/strix/viewer_src/public/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..699eb83737137673585c5d23f4b1d5865a7344aa GIT binary patch literal 3801 zcmeH}c~nzp8pdw|gDFxFQHW>(ixr|)6SOcaA!-RofQU%2B4HIqs41EdmOxn4LRo}q zi33OgmjX7_L`2YpEeHgy0*z<`28c=_L6)!t0)}O7VCK~6GIQpf_P>7T+;hL&^X1## z-}^jox+mV{U2S7+007=~J>=vC0MHBIlK_K)Ut}9BPJ^#^&Kx>U0RY_=^#i%IQ+G4i z$#iu(;2p~x>qAG2eTj0T)T7AVFz!g2aJZb!*RIf2a=|lCbtFsHEY1d{%n8r4e*xdP~_OHKfS7+N!FmU1=hL$`lSDJfKIMgh6yA#0^G2ENT9q0 zuI2eE{+93sK3GS?o3Igmf37ZR*^#DcSp;tes(N7-qJpePG zIW{$AMOz05wo4PDqYdfa^HKXeaw*yV1j`O}i1XWeE|oJ_tjp>+WA0;=y}JxEySlmt z$(ztH#=)#jX*_mLcJ_A(hr+6Q{QUgB6^*oq8KB+rnG^!S6qC3`5k9cZ(X1VawSmZX8)k^68PO-`>E7#NVXALaF&Hmt{qhf#bsxg)fAtZwqbXa^pT zzb1;vWREa8THUS>17bptHC$(S6_nh#T$bK%4Yax;s6?asw*HQwNwZLYhXyVeF;SCH zymwE=6{k?g`-;~2`8WkEF?gYS@3< z{YXpx`i=3QB%C?p8Rm-%Tj5TP(!`efxasXQ%{g3Fic~f+fn4eSDs^uIk|I4-)#H={ z1gt^`7wB)i74s9I>Y*=eSD|cJ4|ZRxKrp~H-k#V!o!lWb2OLcP6YjT{Q4eoMB1&cY z$>q*jL2#7TEIteIrOj)gQ+-r*5TWr^{+#PB-N9g}R`&CO?=C~3d2fVOfm06BDlacj zXny)EmAVlP-9LG`jEnfnoORU;M-*W>V##CawCpAnsbwpDGW%kAX1J?d*1p%O#F3ui ze}}_kPx~U1iS1!kvc=h(WnJNlp-lzqaAH+@M#eyDf%|rl2YLNndpo;~eg|`d{(%}& z1uLUp2QX(){C62v+E0q_knD@_=(xICCgnjNKoo(PoIqsEyiWtVT|2le7LTn5HeFpW zoT{&KN%{V(#l$Hxx2~>klsEq74K3&B#v5{#xELD15!pMM6;s$FJQizDMcf2Nyu4Xb z^?iVIJ&)(h5lN*|6aO{v5+2(q6I*HV@X^zK7b}K=(c>NSKmNFlch;N|9X%8s3e0|c z!-C>`m2?8F71*hWwFFa2?a&#o=xlxhF6Cz zO?ySM9u3}>t7Hi0FzZ5)q|*3JXdvtHh=?=7%PtOfXR+Rl-IXjYOn1r-T=5ImX$D2a zG-*Lt`h8zLZRYi}iert-OYsUbz+tPcls)npJlL+tnX?%swGfl+6!&K+wQb7rV^!04x8PpxkeJJj|OxmPU$@yU4k9$;Ic<@Kz-t7FuiE0 zdAVuqM`W%82GhvnJ(t6m8zbnFwHSV)H-SnfPd&&BFDyG-K#3s`KxE6pO(++mg*9Ud zjxibz{KZm6;^K^`o5(c~o(GL==$T?ZVSK~|&~iiE^r?{1=h`pY=cL-(+NS&8`S5wo zvykKXBv2C-hcYzIM-VYmISDg+jP)hV_UK$x0fqD5-Hx6emVBF}gsEU5| z@uhjKQ<2BZ_657AXY?I0F)?ul6Sy@I;#0ZY7F)b(eLq)+-vO4NyX$W);hz4cA;$#r zV)6^r2Rp0b>eM2LMknPQ2VCE3Mxvuq?}RX$fJolm~(^VxVSiO z&*||+g9fSGa7u5*xRC|!xLP_5+*;nFfBEX#UR+jCCJSt!>yAHrUfUq=?CjjLXOAf_ zn=Vm>=_Qw6>CR=FgJ^n<#*iVNY{rwGp5sxi&R{~R-7p`>I$mk><;BknJ0Wxa>YTZj zY3%OX#}XwcpfMUFLZ7xSG)OB8qr%cK{Tsk&zM5RV)r= zrL6hUC!+iF->#UD{Fg6-6fnNQHUV-!4nfm=@y_~{vg`jUrBWe|NlRPM&b74@ zpaF^s2#%mR@YdSZgFK4>jVp_(null); + const [error, setError] = useState(null); + const [selectedId, setSelectedId] = useState(null); + const [view, setView] = useState<"overview" | "issues" | "agents">("overview"); + + // Live polling. On mount fetch everything; while the run is unfinished, poll + // /api/run each second and refresh transcript + vulnerabilities; once + // finished, do one final full fetch and stop. + const finishedRef = useRef(false); + useEffect(() => { + let cancelled = false; + let timer: ReturnType | undefined; + + const schedule = () => { + timer = setTimeout(tick, POLL_MS); + }; + + const tick = async () => { + if (cancelled) return; + try { + const { summary, raw, finished } = await fetchRunSummary(); + if (cancelled) return; + if (finished && !finishedRef.current) { + finishedRef.current = true; + const full = await fetchAll(); + if (!cancelled) setRun(full); + return; // stop polling + } + const [transcript, vulnerabilities] = await Promise.all([ + fetchTranscript().catch(() => ({ agents: [], events: [] })), + fetchVulnerabilities(summary.runId).catch(() => [] as Vulnerability[]), + ]); + if (cancelled) return; + setRun((prev) => ({ + summary, + raw, + finished, + transcript, + vulnerabilities, + reportMarkdown: prev?.reportMarkdown ?? null, + })); + schedule(); + } catch (e) { + if (cancelled) return; + setError(e instanceof Error ? e.message : "Could not load run data."); + schedule(); + } + }; + + (async () => { + try { + const full = await fetchAll(); + if (cancelled) return; + setRun(full); + if (full.finished) { + finishedRef.current = true; + } else { + schedule(); + } + } catch (e) { + if (cancelled) return; + setError(e instanceof Error ? e.message : "Could not load run data."); + schedule(); + } + })(); + + return () => { + cancelled = true; + if (timer) clearTimeout(timer); + }; + }, []); + + const counts = useMemo( + () => (run ? severityCounts(run.vulnerabilities) : null), + [run] + ); + const selected = run?.vulnerabilities.find((v) => v.id === selectedId) ?? null; + const agentCount = run?.transcript.agents.length ?? 0; + + return ( +
+ {/* Top bar */} +
+
+ Strix Logo +
Strix
+ Local results + {run && } +
+
+ +
+ {/* Trust banner */} +
+
+ + {error && !run && ( +
+
+ )} + + {!run && !error && ( +
+
+

Loading run dataโ€ฆ

+
+ )} + + {run && counts && ( + <> + + + + +
+ setView("overview")}> + Overview + + setView("issues")}> + Issues{run.vulnerabilities.length > 0 ? ` (${run.vulnerabilities.length})` : ""} + + {agentCount > 0 && ( + setView("agents")}> + Agents ({agentCount}) + + )} +
+ + {view === "overview" ? ( + + ) : view === "agents" && agentCount > 0 ? ( + + ) : selected ? ( +
+ + +
+ ) : ( + setSelectedId(id)} + /> + )} + + )} +
+
+ ); +} + +function LiveIndicator({ finished }: { finished: boolean }) { + if (finished) { + return ( + + + Complete + + ); + } + return ( + + + + + + Live + + ); +} + +function formatDuration(seconds: number | null): string | null { + if (seconds == null) return null; + if (seconds < 60) return `${seconds}s`; + const m = Math.floor(seconds / 60); + if (m < 60) return `${m}m`; + const h = Math.floor(m / 60); + return `${h}h ${m % 60}m`; +} + +function SummaryHeader({ summary }: { summary: ParsedRunSummary }) { + const duration = formatDuration(summary.durationSeconds); + return ( +
+

+ {summary.runName ?? summary.runId ?? "Scan results"} +

+
+ {summary.targets.length > 0 && ( + {summary.targets.join(", ")} + )} + {summary.scanMode && } + {duration && } + {summary.status && } +
+
+ ); +} + +function Meta({ label }: { label: string }) { + return ( + <> + ยท + {label} + + ); +} + +function FindingsList({ + vulnerabilities, + finished, + onSelect, +}: { + vulnerabilities: Vulnerability[]; + finished: boolean; + onSelect: (id: string) => void; +}) { + const sorted = [...vulnerabilities].sort( + (a, b) => SEVERITY_ORDER.indexOf(a.severity) - SEVERITY_ORDER.indexOf(b.severity) + ); + if (sorted.length === 0) { + return ( +
+ {finished ? "No findings in this run." : "No findings yet. The scan is still runningโ€ฆ"} +
+ ); + } + return ( +
+ {sorted.map((v) => ( + + ))} +
+ ); +} + +/** Strip a single leading markdown heading (report sections embed their own). */ +function stripLeadingHeading(md: string): string { + return md.replace(/^\s*#{1,6}[ \t]+.*(?:\r?\n)+/, "").trimStart(); +} + +function dedupeHeadings(md: string): string { + const out: string[] = []; + let lastHeading: string | null = null; + for (const line of md.split("\n")) { + const m = line.match(/^#{1,6}\s+(.*)$/); + if (m) { + const norm = m[1].trim().toLowerCase(); + if (norm === lastHeading) continue; + lastHeading = norm; + } else if (line.trim() !== "") { + lastHeading = null; + } + out.push(line); + } + return out.join("\n"); +} + +function OverviewTab({ + summary, + counts, + total, + reportMarkdown, +}: { + summary: ParsedRunSummary; + counts: Record; + total: number; + reportMarkdown: string | null; +}) { + const sections = ( + [ + ["Executive Summary", summary.executiveSummary], + ["Technical Analysis", summary.technicalAnalysis], + ["Methodology", summary.methodology], + ["Recommendations", summary.recommendations], + ] as const + ) + .filter(([, content]) => !!content) + .map(([title, content]) => ({ title, content: stripLeadingHeading(content as string) })); + + return ( +
+ {total > 0 && ( +
+ +
+ )} + {sections.length > 0 ? ( +
+ {sections.map((s) => ( + + ))} +
+ ) : reportMarkdown ? ( +
+ +
+ ) : ( + total === 0 && ( +

No summary available for this run yet.

+ ) + )} +
+ ); +} + +function TabButton({ + active, + onClick, + children, +}: { + active: boolean; + onClick: () => void; + children: React.ReactNode; +}) { + return ( + + ); +} + +const UPSELLS: { feature: string; title: string; desc: string; icon: React.ElementType }[] = [ + { + feature: "cloud pentests", + title: "Re-run in Strix Cloud", + desc: "Run this scan on managed infra with more depth.", + icon: Rocket, + }, + { + feature: "scheduled scans", + title: "Schedule recurring scans", + desc: "Continuously retest on a cadence you choose.", + icon: CalendarClock, + }, + { + feature: "PR reviews", + title: "PR security reviews", + desc: "Catch vulnerabilities in every pull request.", + icon: GitPullRequest, + }, +]; + +function UpsellRow() { + return ( + + ); +} + +function AgentsTab({ run }: { run: LoadedRun }) { + const { agents, events } = run.transcript; + const graphAgents = useMemo(() => buildGraphAgents(agents, events), [agents, events]); + // Default the transcript to the root agent (no parent) so something is always + // shown; the graph selection then drives which agent's transcript renders. + const rootId = useMemo(() => agents.find((a) => !a.parent_id)?.id ?? agents[0]?.id ?? null, [agents]); + const [selectedId, setSelectedId] = useState(null); + const activeId = selectedId ?? rootId; + const activeAgent = agents.find((a) => a.id === activeId) ?? null; + + return ( +
+
+
+
+

+ Select an agent to view its full transcript below. +

+
+ setSelectedId(id)} + eventsLoaded + eventsEmpty={graphAgents.size === 0} + scanCompleted={run.finished} + /> +
+
+ + {activeAgent && ( +
+ +
+ )} +
+ ); +} diff --git a/strix/viewer_src/src/components/AddRepositoryDialog.tsx b/strix/viewer_src/src/components/AddRepositoryDialog.tsx new file mode 100644 index 00000000..ee7a2853 --- /dev/null +++ b/strix/viewer_src/src/components/AddRepositoryDialog.tsx @@ -0,0 +1,20 @@ +// Extracted ProviderIcon from strix-app's AddRepositoryDialog. The dialog itself +// (and its next/link dependency) is dropped; the IssueSidebar only needs this SVG +// switch to badge a finding's source-control provider. Web-app targets resolve to +// provider === null and never reach here (they render a globe icon instead). +import { Github, Gitlab } from "lucide-react"; + +function BitbucketIcon({ className }: { className?: string }) { + return ( + + ); +} + +export function ProviderIcon({ provider, className }: { provider: string; className?: string }) { + const cls = className ?? "w-4 h-4"; + if (provider === "gitlab") return ; + if (provider === "bitbucket") return ; + return ; +} diff --git a/strix/viewer_src/src/components/IssueSeveritySummary.tsx b/strix/viewer_src/src/components/IssueSeveritySummary.tsx new file mode 100644 index 00000000..1be2d7e5 --- /dev/null +++ b/strix/viewer_src/src/components/IssueSeveritySummary.tsx @@ -0,0 +1,77 @@ +import React from "react"; + +import { cn } from "@/lib/utils"; + +export interface IssueSeveritySummaryFindings { + total: number; + critical: number; + high: number; + medium: number; + low: number; +} + +interface IssueSeveritySummaryProps { + findings: IssueSeveritySummaryFindings; + className?: string; + /** Noun for the total count (e.g. "issues", "CVEs"). Defaults to "issues". */ + unit?: string; + /** Optional content rendered at the end of the count row (e.g. a KEV badge). */ + trailing?: React.ReactNode; +} + +const SEVERITIES = [ + { key: "critical", label: "critical", dotClass: "bg-red-500", textClass: "text-red-500" }, + { key: "high", label: "high", dotClass: "bg-orange-500", textClass: "text-orange-500" }, + { key: "medium", label: "medium", dotClass: "bg-yellow-500", textClass: "text-yellow-500" }, + { key: "low", label: "low", dotClass: "bg-blue-500", textClass: "text-blue-500" }, +] as const; + +export function IssueSeveritySummary({ + findings, + className, + unit = "issues", + trailing, +}: IssueSeveritySummaryProps) { + if (findings.total <= 0) return null; + + return ( +
+
+
+ {findings.total} + {unit} +
+
+ {SEVERITIES.map(({ key, label, dotClass, textClass }) => { + const count = findings[key]; + if (count <= 0) return null; + + return ( +
+ + ); + })} +
+ {trailing ?
{trailing}
: null} +
+ +
+ {SEVERITIES.map(({ key, dotClass }) => { + const count = findings[key]; + if (count <= 0) return null; + + return ( +
+ ); + })} +
+
+ ); +} diff --git a/strix/viewer_src/src/components/live/AgentGraph.tsx b/strix/viewer_src/src/components/live/AgentGraph.tsx new file mode 100644 index 00000000..38502843 --- /dev/null +++ b/strix/viewer_src/src/components/live/AgentGraph.tsx @@ -0,0 +1,254 @@ +"use client"; + +import { useCallback, useEffect, useRef, useState } from "react"; +import { + ReactFlow, + Background, + Controls, + MiniMap, + useNodesState, + useEdgesState, + useReactFlow, + type Node, + type Edge, +} from "@xyflow/react"; +import dagre from "@dagrejs/dagre"; +import AgentNodeComponent from "./AgentNode"; +import GraphSkeleton from "./GraphSkeleton"; +import type { AgentNode } from "@/types/events"; + +import "@xyflow/react/dist/style.css"; + +const NODE_WIDTH = 260; +const NODE_HEIGHT = 80; + +const nodeTypes = { agentNode: AgentNodeComponent }; + +function getLayoutedElements( + agents: Map, + selectedAgentId: string | null +) { + const g = new dagre.graphlib.Graph(); + g.setDefaultEdgeLabel(() => ({})); + g.setGraph({ rankdir: "TB", nodesep: 60, ranksep: 80 }); + + const nodes: Node[] = []; + const edges: Edge[] = []; + + for (const [id, agent] of agents) { + g.setNode(id, { width: NODE_WIDTH, height: NODE_HEIGHT }); + nodes.push({ + id, + type: "agentNode", + position: { x: 0, y: 0 }, + data: { ...agent, isSelected: id === selectedAgentId }, + }); + + if (agent.parentId && agents.has(agent.parentId)) { + const edgeId = `${agent.parentId}->${id}`; + g.setEdge(agent.parentId, id); + edges.push({ + id: edgeId, + source: agent.parentId, + target: id, + style: { stroke: "#2a2a2a", strokeWidth: 1.5 }, + }); + } + } + + dagre.layout(g); + + for (const node of nodes) { + const pos = g.node(node.id); + if (pos) { + node.position = { + x: pos.x - NODE_WIDTH / 2, + y: pos.y - NODE_HEIGHT / 2, + }; + } + } + + return { nodes, edges }; +} + +const ZOOM_DURATION = 300; + + +/** Centers viewport on the root node (no parentId) at a fixed zoom โ€” only once on first load */ +function CenterOnRoot({ nodes }: { nodes: Node[] }) { + const { setCenter } = useReactFlow(); + const hasCentered = useRef(false); + useEffect(() => { + if (nodes.length > 0 && !hasCentered.current) { + const root = nodes.find((n) => !(n.data as Record).parentId); + const target = root ?? nodes[0]; + hasCentered.current = true; + const cx = target.position.x + NODE_WIDTH / 2; + const cy = target.position.y + NODE_HEIGHT / 2; + setTimeout(() => setCenter(cx, cy, { zoom: 0.85, duration: 400 }), 60); + } + }, [nodes, setCenter]); + return null; +} + +function SmoothControls() { + const { zoomIn, zoomOut, fitView } = useReactFlow(); + return ( + +
+ + + +
+
+ ); +} + +interface AgentGraphProps { + agents: Map; + selectedAgentId: string | null; + onSelectAgent: (id: string | null) => void; + eventsLoaded?: boolean; + eventsEmpty?: boolean; + scanCompleted?: boolean; +} + +export default function AgentGraph({ + agents, + selectedAgentId, + onSelectAgent, + eventsLoaded, + eventsEmpty, + scanCompleted, +}: AgentGraphProps) { + const [nodes, setNodes, onNodesChange] = useNodesState([]); + const [edges, setEdges, onEdgesChange] = useEdgesState([]); + + useEffect(() => { + if (agents.size === 0) return; + const { nodes: ln, edges: le } = getLayoutedElements(agents, selectedAgentId); + setNodes(ln); + setEdges(le); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [agents.size, setNodes, setEdges]); + + // Sync agent data (status, name, etc.) into existing nodes without re-layout + useEffect(() => { + if (agents.size === 0) return; + setNodes((nds) => + nds.map((n) => { + const agent = agents.get(n.id); + if (!agent) return n; + return { ...n, data: { ...agent, isSelected: n.id === selectedAgentId } }; + }) + ); + }, [agents, selectedAgentId, setNodes]); + + const nodeClickedRef = useRef(false); + + const onNodeClick = useCallback( + (_: React.MouseEvent, node: Node) => { + nodeClickedRef.current = true; + onSelectAgent(node.id); + }, + [onSelectAgent] + ); + + const onPaneClick = useCallback(() => { + if (nodeClickedRef.current) { + nodeClickedRef.current = false; + return; + } + onSelectAgent(null); + }, [onSelectAgent]); + + // Convex responded, zero events โ€” show empty state (not skeleton) + if (agents.size === 0 && eventsLoaded && eventsEmpty) { + return ( +
+
+ {scanCompleted ? ( + + + + ) : ( +
+ )} +
+

+ {scanCompleted + ? "Agent trace data is not available for this pentest" + : "Waiting for agent data\u2026"} +

+
+ ); + } + + const showGraph = agents.size > 0; + + return ( +
+ {/* Skeleton overlay โ€” fades out when graph is ready */} +
+ +
+ + {/* Graph โ€” fades in */} +
+ + + + + { + const status = (n.data as Record)?.status as string; + if (status === "running") return "#3b82f6"; + if (status === "completed") return "#10b981"; + if (status === "failed" || status === "error") return "#ef4444"; + return "#555"; + }} + maskColor="rgba(0,0,0,0.8)" + style={{ width: 80, height: 50 }} + className="!bg-[#0a0a0a] !border-[#222]" + /> + +
+
+ ); +} diff --git a/strix/viewer_src/src/components/live/AgentNode.tsx b/strix/viewer_src/src/components/live/AgentNode.tsx new file mode 100644 index 00000000..c7bc3ae1 --- /dev/null +++ b/strix/viewer_src/src/components/live/AgentNode.tsx @@ -0,0 +1,48 @@ +"use client"; + +import { memo } from "react"; +import { Handle, Position, type NodeProps } from "@xyflow/react"; +import type { AgentNode as AgentNodeData } from "@/types/events"; + +const STATUS_STYLES: Record = { + running: "bg-blue-500", + completed: "bg-emerald-500", + failed: "bg-red-500", + error: "bg-red-500", +}; + +function AgentNodeComponent({ data, selected }: NodeProps) { + const agent = data as unknown as AgentNodeData & { isSelected: boolean }; + + return ( +
+ + +
+ + + + + + {agent.name} + +
+ + 0 ? "!bg-[#444]" : "!bg-transparent"}`} /> +
+ ); +} + +export default memo(AgentNodeComponent); diff --git a/strix/viewer_src/src/components/live/AgentTranscript.tsx b/strix/viewer_src/src/components/live/AgentTranscript.tsx new file mode 100644 index 00000000..a715f8cd --- /dev/null +++ b/strix/viewer_src/src/components/live/AgentTranscript.tsx @@ -0,0 +1,253 @@ +import { Component, useMemo, type ReactNode } from "react"; +import { Brain, Bot } from "lucide-react"; +import { getToolRenderer, getToolIcon } from "./tool-renderers"; +import ChatBubble from "./tool-renderers/ChatBubble"; +import type { ToolRendererProps, AgentNode as GraphAgentNode } from "@/types/events"; +import type { TranscriptAgent, TranscriptEvent } from "@/data/serverSource"; + +/* ---------- Error boundary so one bad event never blanks the transcript ---------- */ +class RendererErrorBoundary extends Component< + { toolName: string; children: ReactNode }, + { hasError: boolean } +> { + constructor(props: { toolName: string; children: ReactNode }) { + super(props); + this.state = { hasError: false }; + } + static getDerivedStateFromError() { + return { hasError: true }; + } + render() { + if (this.state.hasError) { + return ( + + {this.props.toolName.replace(/_/g, " ")} + + ); + } + return this.props.children; + } +} + +function SafeToolRenderer(props: ToolRendererProps) { + const Renderer = getToolRenderer(props.toolName); + return ( + + + + ); +} + +/* ---------- Value coercion ---------- + * args/result arrive as either a JSON object or a Python-repr string + * ("{'thought': '...'}"). Try JSON, then a naive python->json pass, then wrap + * the raw string so the fallback renderer can display it. Never throws. */ +function coerce(value: unknown): unknown { + if (value == null || typeof value !== "string") return value; + const t = value.trim(); + if (!t) return value; + try { + return JSON.parse(t); + } catch { + /* not JSON */ + } + try { + const jsonish = t + .replace(/\bNone\b/g, "null") + .replace(/\bTrue\b/g, "true") + .replace(/\bFalse\b/g, "false") + .replace(/'/g, '"'); + return JSON.parse(jsonish); + } catch { + return { __raw: value }; + } +} + +function asRecord(value: unknown): Record { + const c = coerce(value); + if (c && typeof c === "object" && !Array.isArray(c)) return c as Record; + if (c == null) return {}; + return { __raw: typeof c === "string" ? c : JSON.stringify(c) }; +} + +/** Numeric suffix of an event id ("tool_37" -> 37) for stable ordering. */ +function eventSeq(id: string): number { + const m = /(\d+)$/.exec(id); + return m ? parseInt(m[1], 10) : 0; +} + +const STATUS_STYLE: Record = { + completed: "text-emerald-400 border-emerald-500/30 bg-emerald-500/10", + running: "text-blue-400 border-blue-500/30 bg-blue-500/10", + waiting: "text-yellow-400 border-yellow-500/30 bg-yellow-500/10", + stopped: "text-[#aaa] border-[#333] bg-[#1a1a1a]", + crashed: "text-red-400 border-red-500/30 bg-red-500/10", + failed: "text-red-400 border-red-500/30 bg-red-500/10", +}; + +/** Map our engine agent statuses onto the graph node's status union. */ +function graphStatus(status: string): GraphAgentNode["status"] { + if (status === "completed") return "completed"; + if (status === "running") return "running"; + if (status === "failed" || status === "crashed") return "failed"; + // waiting / stopped / unknown โ†’ keep the raw string; AgentNode/MiniMap fall + // back to a neutral gray for anything they don't explicitly style. + return status as GraphAgentNode["status"]; +} + +/** + * Adapt transcript agents + events into the Map that the live + * AgentGraph renders: children from parent_id, tool/message counts by scanning + * events, and a task pulled from the spawning create_agent call where present. + */ +export function buildGraphAgents( + agents: TranscriptAgent[], + events: TranscriptEvent[] +): Map { + const childrenOf = new Map(); + for (const a of agents) { + if (a.parent_id) { + const arr = childrenOf.get(a.parent_id) ?? []; + arr.push(a.id); + childrenOf.set(a.parent_id, arr); + } + } + + const toolCount = new Map(); + const messageCount = new Map(); + // A create_agent call names the child but not its id, so map spawned tasks by + // agent NAME (best-effort โ€” used only for the graph node subtitle). + const taskByName = new Map(); + for (const e of events) { + if (e.type === "tool") { + toolCount.set(e.agent_id, (toolCount.get(e.agent_id) ?? 0) + 1); + if (e.data?.tool_name === "create_agent") { + const args = asRecord(e.data.args); + const name = (args.name as string) ?? (args.agent_name as string) ?? ""; + const task = (args.task as string) ?? ""; + if (name && task) taskByName.set(name, task); + } + } else { + messageCount.set(e.agent_id, (messageCount.get(e.agent_id) ?? 0) + 1); + } + } + + const map = new Map(); + for (const a of agents) { + map.set(a.id, { + id: a.id, + name: a.name, + task: taskByName.get(a.name) ?? "", + status: graphStatus(a.status), + parentId: a.parent_id, + children: childrenOf.get(a.id) ?? [], + createdAt: a.created_at, + toolCount: toolCount.get(a.id) ?? 0, + messageCount: messageCount.get(a.id) ?? 0, + }); + } + return map; +} + +/* ---------- Per-agent transcript ---------- */ +export function AgentTranscript({ + agent, + events, +}: { + agent: TranscriptAgent; + events: TranscriptEvent[]; +}) { + const mine = useMemo( + () => + events + .filter((e) => e.agent_id === agent.id) + .sort((a, b) => eventSeq(a.id) - eventSeq(b.id)), + [events, agent.id] + ); + + const toolCount = mine.filter((e) => e.type === "tool").length; + const msgCount = mine.length - toolCount; + + return ( +
+
+ {agent.name} + + {agent.status} + + {agent.id} +
+

+ {msgCount} message{msgCount === 1 ? "" : "s"} ยท {toolCount} tool call + {toolCount === 1 ? "" : "s"} +

+ + {mine.length === 0 ? ( +

No recorded activity for this agent.

+ ) : ( +
+ {mine.map((event, i) => { + const isLast = i === mine.length - 1; + const isTool = event.type === "tool"; + const toolName = isTool ? String(event.data?.tool_name ?? "tool") : ""; + const role = !isTool ? String(event.data?.role ?? "assistant") : ""; + + let Icon; + let iconColor: string; + if (isTool) { + const meta = getToolIcon(toolName); + Icon = meta.icon; + iconColor = meta.color; + } else { + const isUser = role === "user" || role === "human"; + Icon = isUser ? Bot : Brain; + iconColor = isUser ? "text-blue-400" : "text-purple-400"; + } + + const status = isTool ? String(event.data?.status ?? "completed") : "completed"; + + return ( +
+
+
+ +
+ {!isLast &&
} +
+
+ {isTool ? ( + + ) : ( + + )} +
+
+ ); + })} +
+ )} +
+ ); +} diff --git a/strix/viewer_src/src/components/live/GraphSkeleton.tsx b/strix/viewer_src/src/components/live/GraphSkeleton.tsx new file mode 100644 index 00000000..853b1af5 --- /dev/null +++ b/strix/viewer_src/src/components/live/GraphSkeleton.tsx @@ -0,0 +1,70 @@ +"use client"; + +function SkeletonNode({ w = 24 }: { w?: number }) { + return ( +
+
+
+
+
+
+
+
+
+
+
+ ); +} + +function VLine() { + return
; +} + +function HBranch({ count }: { count: number }) { + return ( +
+
+
+ ); +} + +export default function GraphSkeleton() { + return ( +
+
+ + + +
+ {[18, 22, 16].map((w, i) => ( +
+ + +
+ ))} +
+
+
+ + +
+ {[14, 20].map((w, i) => ( +
+ + +
+ ))} +
+
+
+ + + + +
+
+
+
+
+ ); +} diff --git a/strix/viewer_src/src/components/live/tool-renderers/AgentCommsRenderer.tsx b/strix/viewer_src/src/components/live/tool-renderers/AgentCommsRenderer.tsx new file mode 100644 index 00000000..49d8bfcc --- /dev/null +++ b/strix/viewer_src/src/components/live/tool-renderers/AgentCommsRenderer.tsx @@ -0,0 +1,92 @@ +"use client"; + +import type { ToolRendererProps } from "@/types/events"; +import { TruncatedText } from "./ToolCard"; + +export default function AgentCommsRenderer({ toolName, args }: ToolRendererProps) { + if (toolName === "create_agent") { + const name = (args.name as string) ?? (args.agent_name as string) ?? ""; + const task = (args.task as string) ?? ""; + return ( +
+
+ spawning + {name && {name}} +
+ {task &&
} +
+ ); + } + + if (toolName === "agent_finish") { + const summary = (args.result_summary as string) ?? ""; + const success = args.success as boolean | undefined; + const rawFindings = args.findings; + const findings = Array.isArray(rawFindings) ? rawFindings as string[] : undefined; + return ( +
+ + {success === false ? "Agent failed" : "Agent completed"} + + {summary &&
} + {findings && findings.length > 0 && ( +
+ {findings.map((f, i) => ( +
โ€ข{typeof f === "string" ? f : JSON.stringify(f)}
+ ))} +
+ )} +
+ ); + } + + if (toolName === "send_message_to_agent") { + const message = (args.message as string) ?? ""; + const agentId = (args.target_agent_id as string) ?? (args.agent_id as string) ?? ""; + return ( +
+
+ message + {agentId && to {agentId.slice(0, 16)}} +
+ {message &&
} +
+ ); + } + + if (toolName === "wait_for_message") { + const reason = (args.reason as string) ?? ""; + return ( +
+ waiting + {reason && {reason}} +
+ ); + } + + if (toolName === "stop_agent") { + const targetAgentId = (args.target_agent_id as string) ?? ""; + const cascade = args.cascade !== false; + const reason = (args.reason as string) ?? ""; + return ( +
+
+ stopping + {targetAgentId && {targetAgentId.slice(0, 16)}} + {cascade && + descendants} +
+ {reason &&
{reason}
} +
+ ); + } + + if (toolName === "view_agent_graph") { + return ( + viewing agents graph + ); + } + + return ( + {toolName.replace(/_/g, " ")} + ); +} diff --git a/strix/viewer_src/src/components/live/tool-renderers/ApplyPatchRenderer.tsx b/strix/viewer_src/src/components/live/tool-renderers/ApplyPatchRenderer.tsx new file mode 100644 index 00000000..2cf4482d --- /dev/null +++ b/strix/viewer_src/src/components/live/tool-renderers/ApplyPatchRenderer.tsx @@ -0,0 +1,124 @@ +"use client"; + +import type { ToolRendererProps } from "@/types/events"; +import { shortPath } from "./utils"; + +const DIFF_PREVIEW_LINES = 30; + +const BEGIN_PATCH = "*** Begin Patch"; +const END_PATCH = "*** End Patch"; +const ADD_FILE = "*** Add File: "; +const UPDATE_FILE = "*** Update File: "; +const DELETE_FILE = "*** Delete File: "; + +const OP_LABEL: Record = { add: "create", update: "edit", delete: "delete" }; + +interface PatchOp { + kind: "add" | "update" | "delete"; + path: string; + oldLines: string[]; + newLines: string[]; +} + +/** apply_patch args arrive as {patch: text} (chat-completions FunctionTool) or + * {input: text} (CustomTool). Mirrors the OSS `_extract_patch_text`. */ +function extractPatchText(args: Record): string { + const raw = args.patch; + if (typeof raw === "string") return raw; + if (raw && typeof raw === "object" && typeof (raw as Record).patch === "string") { + return (raw as Record).patch; + } + return typeof args.input === "string" ? args.input : ""; +} + +/** Parse V4A patch text into per-file operations (mirrors `_parse_patch_operations`). */ +function parsePatchOperations(patchText: string): PatchOp[] { + const ops: PatchOp[] = []; + let current: PatchOp | null = null; + + const flush = () => { + if (current) ops.push(current); + current = null; + }; + + for (const line of patchText.split("\n")) { + if (line === BEGIN_PATCH || line === END_PATCH) continue; + if (line.startsWith(ADD_FILE)) { + flush(); + current = { kind: "add", path: line.slice(ADD_FILE.length).trim(), oldLines: [], newLines: [] }; + } else if (line.startsWith(UPDATE_FILE)) { + flush(); + current = { kind: "update", path: line.slice(UPDATE_FILE.length).trim(), oldLines: [], newLines: [] }; + } else if (line.startsWith(DELETE_FILE)) { + flush(); + current = { kind: "delete", path: line.slice(DELETE_FILE.length).trim(), oldLines: [], newLines: [] }; + } else if (current?.kind === "update") { + if (line.startsWith("@@")) continue; + if (line.startsWith("-") && !line.startsWith("---")) current.oldLines.push(line.slice(1)); + else if (line.startsWith("+") && !line.startsWith("+++")) current.newLines.push(line.slice(1)); + } else if (current?.kind === "add") { + if (line.startsWith("+")) current.newLines.push(line.slice(1)); + else if (line.trim()) current.newLines.push(line); + } + } + flush(); + return ops; +} + +function Operation({ op }: { op: PatchOp }) { + const label = OP_LABEL[op.kind] ?? "file"; + const total = op.oldLines.length + op.newLines.length; + const truncated = total > DIFF_PREVIEW_LINES; + const oldBudget = truncated && total > 0 ? Math.round(DIFF_PREVIEW_LINES * (op.oldLines.length / total)) : op.oldLines.length; + const newBudget = truncated ? DIFF_PREVIEW_LINES - oldBudget : op.newLines.length; + + return ( +
+
+ {label} + {op.path && {shortPath(op.path)}} +
+ {(op.oldLines.length > 0 || op.newLines.length > 0) && ( +
+ {op.oldLines.slice(0, oldBudget).map((line, i) => ( +
+ -{line} +
+ ))} + {op.newLines.slice(0, newBudget).map((line, i) => ( +
+ +{line} +
+ ))} + {truncated &&
... {total - DIFF_PREVIEW_LINES} more lines
} +
+ )} +
+ ); +} + +export default function ApplyPatchRenderer({ args, result, status }: ToolRendererProps) { + const ops = parsePatchOperations(extractPatchText(args)); + + if (ops.length === 0) { + return ( +
+ patch + {status === "failed" && typeof result === "string" && result.trim() && ( +
{result.trim()}
+ )} +
+ ); + } + + return ( +
+ {ops.map((op, i) => ( + + ))} + {status === "failed" && typeof result === "string" && result.trim() && ( +
{result.trim()}
+ )} +
+ ); +} diff --git a/strix/viewer_src/src/components/live/tool-renderers/BrowserRenderer.tsx b/strix/viewer_src/src/components/live/tool-renderers/BrowserRenderer.tsx new file mode 100644 index 00000000..605c5b14 --- /dev/null +++ b/strix/viewer_src/src/components/live/tool-renderers/BrowserRenderer.tsx @@ -0,0 +1,110 @@ +"use client"; + +import type { ToolRendererProps } from "@/types/events"; +import { SyntaxBlock } from "./ToolCard"; + +const SIMPLE_ACTIONS: Record = { + back: "going back in browser history", + forward: "going forward in browser history", + scroll_down: "scrolling down", + scroll_up: "scrolling up", + refresh: "refreshing", + close_tab: "closing tab", + switch_tab: "switching tab", + list_tabs: "listing tabs", + view_source: "viewing page source", + get_console_logs: "getting console logs", + screenshot: "taking screenshot", + wait: "waiting...", + close: "closing", +}; + +const CLICK_ACTIONS: Record = { + click: "clicking", + double_click: "double clicking", + hover: "hovering", +}; + +function UrlLabel({ prefix, url, suffix }: { prefix: string; url?: string; suffix?: string }) { + return ( + + {prefix} + {url && ( + + {url} + + )} + {suffix} + + ); +} + +function describeAction(args: Record): React.ReactNode { + const action = (args.action as string) ?? ""; + const url = (args.url as string) ?? undefined; + + // Simple actions (no extra args) + if (action in SIMPLE_ACTIONS) return SIMPLE_ACTIONS[action]; + + // URL actions: launch, goto, new_tab + if (action === "launch") { + if (!url) return "launching"; + return ; + } + if (action === "goto" || action === "navigate") { + return ; + } + if (action === "new_tab") { + return ; + } + + // Click actions + if (action in CLICK_ACTIONS) return CLICK_ACTIONS[action]; + + // Type + if (action === "type") { + const text = ((args.text as string) ?? "").slice(0, 40); + return `typing "${text}"`; + } + + // Key press + if (action === "press_key" || action === "key_press") { + return `pressing key ${(args.key as string) ?? ""}`; + } + + // Save PDF + if (action === "save_pdf" || action === "save_as_pdf") { + const path = (args.file_path as string) ?? ""; + return `saving PDF${path ? ` to ${path}` : ""}`; + } + + // Execute JS โ€” description only, code shown separately + if (action === "execute_js") return "executing javascript"; + + return action || "browser action"; +} + +export default function BrowserRenderer({ args }: ToolRendererProps) { + const action = (args.action as string) ?? ""; + const jsCode = action === "execute_js" + ? ((args.js_code as string) ?? (args.code as string) ?? "") + : ""; + const description = describeAction(args); + + return ( +
+
+ Browser + + {typeof description === "string" ? description : description} + +
+ {jsCode && } +
+ ); +} diff --git a/strix/viewer_src/src/components/live/tool-renderers/ChatBubble.tsx b/strix/viewer_src/src/components/live/tool-renderers/ChatBubble.tsx new file mode 100644 index 00000000..bf98fb60 --- /dev/null +++ b/strix/viewer_src/src/components/live/tool-renderers/ChatBubble.tsx @@ -0,0 +1,25 @@ +"use client"; + +import { TruncatedText } from "./ToolCard"; + +interface ChatBubbleProps { + role: string; + content: string; +} + +const MAX_LINES = 30; + +export default function ChatBubble({ role, content }: ChatBubbleProps) { + const isUser = role === "user" || role === "human"; + + return ( +
+ + {isUser ? "User" : "Thinking"} + +
+ +
+
+ ); +} diff --git a/strix/viewer_src/src/components/live/tool-renderers/FallbackRenderer.tsx b/strix/viewer_src/src/components/live/tool-renderers/FallbackRenderer.tsx new file mode 100644 index 00000000..26940325 --- /dev/null +++ b/strix/viewer_src/src/components/live/tool-renderers/FallbackRenderer.tsx @@ -0,0 +1,36 @@ +import type { ToolRendererProps } from "@/types/events"; +import { CodeBlock } from "./ToolCard"; + +/** + * Generic renderer for tool names without a dedicated family renderer. Shows the + * humanized tool name plus a pretty-printed dump of args/result. Tolerates the + * server sending args/result as either a parsed object or an unparseable + * Python-repr string (which arrives here wrapped as { __raw }); never crashes. + */ +function pretty(value: unknown): string | null { + if (value == null) return null; + if (typeof value === "string") return value.trim() ? value : null; + if (typeof value === "object") { + const rec = value as Record; + if (typeof rec.__raw === "string") return rec.__raw; + if (Object.keys(rec).length === 0) return null; + try { + return JSON.stringify(value, null, 2); + } catch { + return String(value); + } + } + return String(value); +} + +export default function FallbackRenderer({ toolName, args, result }: ToolRendererProps) { + const argsText = pretty(args); + const resultText = pretty(result); + return ( +
+ {toolName.replace(/_/g, " ")} + {argsText && {argsText}} + {resultText && {resultText}} +
+ ); +} diff --git a/strix/viewer_src/src/components/live/tool-renderers/FileEditRenderer.tsx b/strix/viewer_src/src/components/live/tool-renderers/FileEditRenderer.tsx new file mode 100644 index 00000000..697e16df --- /dev/null +++ b/strix/viewer_src/src/components/live/tool-renderers/FileEditRenderer.tsx @@ -0,0 +1,65 @@ +"use client"; + +import type { ToolRendererProps } from "@/types/events"; +import { shortPath } from "./utils"; + +const DIFF_PREVIEW_LINES = 30; + +export default function FileEditRenderer({ toolName, args }: ToolRendererProps) { + const filePath = (args.path as string) ?? (args.file_path as string) ?? ""; + const command = (args.command as string) ?? ""; + const oldStr = (args.old_str as string) ?? ""; + const newStr = (args.new_str as string) ?? ""; + const regex = (args.regex as string) ?? ""; + + let label: string; + if (toolName === "list_files") label = "list"; + else if (toolName === "search_files") label = "search"; + else if (command === "view") label = "view"; + else if (command === "create") label = "create"; + else if (command === "str_replace") label = "edit"; + else if (command === "undo_edit") label = "undo"; + else if (command === "insert") label = "insert"; + else label = "file"; + + const pathDisplay = filePath ? shortPath(filePath) : ""; + const regexDisplay = regex ? ` /${regex}/` : ""; + + const oldLines = oldStr ? oldStr.split("\n") : []; + const newLines = newStr ? newStr.split("\n") : []; + const totalLines = oldLines.length + newLines.length; + const truncated = totalLines > DIFF_PREVIEW_LINES; + + // If truncated, split the budget proportionally + const oldBudget = truncated ? Math.round(DIFF_PREVIEW_LINES * (oldLines.length / totalLines)) : oldLines.length; + const newBudget = truncated ? DIFF_PREVIEW_LINES - oldBudget : newLines.length; + + return ( +
+
+ {label} + {pathDisplay && {pathDisplay}} +
+ {regexDisplay && ( +
{regexDisplay}
+ )} + {(oldStr || newStr) && ( +
+ {oldLines.slice(0, oldBudget).map((line, i) => ( +
+ -{line} +
+ ))} + {newLines.slice(0, newBudget).map((line, i) => ( +
+ +{line} +
+ ))} + {truncated && ( +
... {totalLines - DIFF_PREVIEW_LINES} more lines
+ )} +
+ )} +
+ ); +} diff --git a/strix/viewer_src/src/components/live/tool-renderers/FinishRenderer.tsx b/strix/viewer_src/src/components/live/tool-renderers/FinishRenderer.tsx new file mode 100644 index 00000000..ab2acbc1 --- /dev/null +++ b/strix/viewer_src/src/components/live/tool-renderers/FinishRenderer.tsx @@ -0,0 +1,32 @@ +"use client"; + +import type { ToolRendererProps } from "@/types/events"; +import { TruncatedText } from "./ToolCard"; + +export default function FinishRenderer({ args }: ToolRendererProps) { + const executiveSummary = (args.executive_summary as string) ?? ""; + const methodology = (args.methodology as string) ?? ""; + const technicalAnalysis = (args.technical_analysis as string) ?? ""; + const recommendations = (args.recommendations as string) ?? ""; + + return ( +
+ Penetration test completed + {executiveSummary && ( +
Executive Summary
+ )} + {methodology && ( +
Methodology
+ )} + {technicalAnalysis && ( +
Technical Analysis
+ )} + {recommendations && ( +
Recommendations
+ )} + {!executiveSummary && !methodology && !technicalAnalysis && !recommendations && ( +
Generating final report...
+ )} +
+ ); +} diff --git a/strix/viewer_src/src/components/live/tool-renderers/LoadSkillRenderer.tsx b/strix/viewer_src/src/components/live/tool-renderers/LoadSkillRenderer.tsx new file mode 100644 index 00000000..ef99d710 --- /dev/null +++ b/strix/viewer_src/src/components/live/tool-renderers/LoadSkillRenderer.tsx @@ -0,0 +1,20 @@ +"use client"; + +import type { ToolRendererProps } from "@/types/events"; + +export default function LoadSkillRenderer({ args }: ToolRendererProps) { + const requestedRaw = (args.skills as string) ?? ""; + const requestedSkills = requestedRaw + .split(",") + .map((skill) => skill.trim()) + .filter(Boolean); + + return ( +
+ Loading skill + {requestedSkills.length > 0 && ( + {requestedSkills.join(", ")} + )} +
+ ); +} diff --git a/strix/viewer_src/src/components/live/tool-renderers/Markdown.tsx b/strix/viewer_src/src/components/live/tool-renderers/Markdown.tsx new file mode 100644 index 00000000..d4d7c07d --- /dev/null +++ b/strix/viewer_src/src/components/live/tool-renderers/Markdown.tsx @@ -0,0 +1,24 @@ +"use client"; + +import ReactMarkdown from "react-markdown"; +import remarkGfm from "remark-gfm"; +import { rehypeCodeMeta, mdComponents } from "@/components/vulnerability/MdCodeBlock"; + +interface MarkdownProps { + text: string; + className?: string; +} + +export default function Markdown({ text, className = "" }: MarkdownProps) { + return ( +
+ + {text} + +
+ ); +} diff --git a/strix/viewer_src/src/components/live/tool-renderers/NotesRenderer.tsx b/strix/viewer_src/src/components/live/tool-renderers/NotesRenderer.tsx new file mode 100644 index 00000000..4273444f --- /dev/null +++ b/strix/viewer_src/src/components/live/tool-renderers/NotesRenderer.tsx @@ -0,0 +1,87 @@ +"use client"; + +import type { ToolRendererProps } from "@/types/events"; +import Markdown from "./Markdown"; + +export default function NotesRenderer({ toolName, args, result }: ToolRendererProps) { + if (toolName === "create_note") { + const title = (args.title as string) ?? ""; + const content = (args.content as string) ?? ""; + const category = (args.category as string) ?? "general"; + return ( +
+
+ note + ({category}) +
+ {title &&
{title}
} + {content &&
} +
+ ); + } + + if (toolName === "delete_note") { + return note removed; + } + + if (toolName === "update_note") { + const title = (args.title as string) ?? ""; + const content = (args.content as string) ?? ""; + return ( +
+ note updated + {title &&
{title}
} + {content &&
} +
+ ); + } + + if (toolName === "get_note") { + const res = result as Record | null; + const note = res && typeof res === "object" && res.success + ? (res.note as Record | undefined) + : undefined; + return ( +
+ note read + {note && ( + <> +
+ {note.title ?? "(untitled)"} + ({note.category ?? "general"}) +
+ {note.content &&
} + + )} +
+ ); + } + + if (toolName === "list_notes") { + const res = result as Record | null; + let notes: Array> = []; + if (res && typeof res === "object" && res.success) { + const rawNotes = res.notes; + notes = Array.isArray(rawNotes) ? rawNotes as Array> : []; + } + return ( +
+ notes + {notes.length > 0 ? ( +
+ {notes.map((n, i) => ( +
+ - + {n.title ?? "(untitled)"} + ({n.category ?? "general"}) + {n.content &&
} +
+ ))} +
+ ) :
No notes
} +
+ ); + } + + return note; +} diff --git a/strix/viewer_src/src/components/live/tool-renderers/ProxyRenderer.tsx b/strix/viewer_src/src/components/live/tool-renderers/ProxyRenderer.tsx new file mode 100644 index 00000000..e35e5a7e --- /dev/null +++ b/strix/viewer_src/src/components/live/tool-renderers/ProxyRenderer.tsx @@ -0,0 +1,250 @@ +"use client"; + +import type { ToolRendererProps } from "@/types/events"; +import { CodeBlock } from "./ToolCard"; + +const MAX_LINE_LENGTH = 200; + +const METHOD_COLORS: Record = { + GET: "text-emerald-400/80", POST: "text-blue-400/80", PUT: "text-yellow-400/80", + PATCH: "text-orange-400/80", DELETE: "text-red-400/80", +}; + +function statusColor(code: number): string { + if (code < 300) return "text-emerald-400/80"; + if (code < 400) return "text-yellow-400/80"; + if (code < 500) return "text-orange-400/80"; + return "text-red-400/80"; +} + +/** Hard truncate with trailing "..." */ +function trunc(text: string, maxLen = 80): string { + return text.length > maxLen ? text.slice(0, maxLen - 3) + "..." : text; +} + +/** Replace newlines/tabs, then truncate */ +function sanitize(text: string, maxLen = 150): string { + return trunc(text.replace(/\n/g, " ").replace(/\r/g, "").replace(/\t/g, " "), maxLen); +} + +/** Limit body to maxLines, each truncated to MAX_LINE_LENGTH-5; returns display string */ +function limitBody(body: string, maxLines: number): string { + const lines = body.split("\n"); + const display = lines.slice(0, maxLines).map(l => trunc(l, MAX_LINE_LENGTH - 5)).join("\n"); + return lines.length > maxLines ? display + "\n..." : display; +} + +function ListRequests({ args, result }: ToolRendererProps) { + const filter = (args.httpql_filter as string) ?? ""; + const res = result as Record | null; + const rawReqs = res ? res.requests : null; + const requests = Array.isArray(rawReqs) ? rawReqs as Array> : []; + + return ( +
+
+ listing requests + {filter && {trunc(filter, 150)}} +
+ {requests.length > 0 && ( +
+ {requests.slice(0, 20).map((r, i) => { + const m = ((r.method as string) ?? "GET").toUpperCase(); + const host = (r.host as string) ?? ""; + const path = (r.path as string) ?? ""; + const resp = r.response as Record | undefined; + const sc = (resp?.statusCode as number) ?? null; + return ( +
+ {m} + {trunc(host + path, 180)} + {sc != null && {sc}} +
+ ); + })} + {requests.length > 20 &&
... +{requests.length - 20} more
} +
+ )} +
+ ); +} + +function ViewRequest({ args, result }: ToolRendererProps) { + const requestId = args.request_id as number | undefined; + const part = (args.part as string) ?? "request"; + const searchPattern = (args.search_pattern as string) ?? ""; + const res = result as Record | null; + const rawMatches = res ? res.matches : null; + const matches = Array.isArray(rawMatches) ? rawMatches as Array> : []; + const content = res ? (res.content as string) ?? null : null; + const hasMore = res ? !!(res.has_more) : false; + + return ( +
+
+ {searchPattern ? "searching" : "viewing"} {part} + {requestId != null && #{requestId}} + {searchPattern && /{trunc(searchPattern, 100)}/} +
+ {matches.length > 0 && ( +
+ {matches.slice(0, 5).map((m, i) => { + // Sanitize context: replace newlines with space, trim to 100 chars + const before = ((m.before ?? "").replace(/\n/g, " ").replace(/\r/g, "")).slice(-100); + const after = ((m.after ?? "").replace(/\n/g, " ").replace(/\r/g, "")).slice(0, 100); + return ( +
+ {before && ...{before}} + {m.match} + {after && {after}...} +
+ ); + })} + {matches.length > 5 &&
... +{matches.length - 5} more matches
} +
+ )} + {content && !matches.length && (() => { + const lines = content.split("\n"); + const display = lines.slice(0, 15).map(l => trunc(l, MAX_LINE_LENGTH)).join("\n"); + const showMore = hasMore || lines.length > 15; + return ( + + {display + (showMore ? "\n... more content available" : "")} + + ); + })()} +
+ ); +} + +function SendRequest({ args, result }: ToolRendererProps) { + const method = ((args.method as string) ?? "GET").toUpperCase(); + const url = (args.url as string) ?? ""; + const headers = args.headers as Record | undefined; + const rawBody = args.body; + const reqBody = typeof rawBody === "string" ? rawBody : ""; + const res = result as Record | null; + const error = res ? (res.error as string) ?? null : null; + const statusCode = res ? (res.status_code as number) ?? null : null; + const responseTime = res ? (res.response_time_ms as number) ?? null : null; + const rawResBody = res ? res.body : null; + const resBody = typeof rawResBody === "string" ? rawResBody : null; + + return ( +
+ request +
+
+ >> + {method} + {trunc(url, 180)} +
+ {headers && typeof headers === "object" && Object.entries(headers).slice(0, 5).map(([k, v]) => ( +
{k}: {sanitize(String(v), 150)}
+ ))} +
+ {reqBody && ( + {limitBody(reqBody, 4)} + )} + {error &&
{sanitize(error, 150)}
} + {statusCode != null && ( +
+ << + {statusCode} + {responseTime != null && {responseTime}ms} +
+ )} + {resBody && ( + {limitBody(resBody, 6)} + )} +
+ ); +} + +function RepeatRequest({ args, result }: ToolRendererProps) { + const requestId = args.request_id as number | undefined; + const modifications = args.modifications as Record | undefined; + const res = result as Record | null; + const statusCode = res ? (res.status_code as number) ?? null : null; + const responseTime = res ? (res.response_time_ms as number) ?? null : null; + const rawRepBody = res ? res.body : null; + const resBody = typeof rawRepBody === "string" ? rawRepBody : null; + + return ( +
+
+ repeating request + {requestId != null && #{requestId}} +
+ {modifications && typeof modifications === "object" && Object.keys(modifications).length > 0 && ( +
+ {Object.entries(modifications).slice(0, 5).map(([k, v]) => ( +
{k}: {sanitize(typeof v === "string" ? v : JSON.stringify(v), 150)}
+ ))} +
+ )} + {statusCode != null && ( +
+ << + {statusCode} + {responseTime != null && {responseTime}ms} +
+ )} + {resBody && ( + {limitBody(resBody, 5)} + )} +
+ ); +} + +const SCOPE_ACTION: Record = { + get: "getting", list: "listing", create: "creating", update: "updating", delete: "deleting", +}; + +function ScopeRules({ args }: ToolRendererProps) { + const action = (args.action as string) ?? ""; + const scopeName = (args.scope_name as string) ?? ""; + const label = SCOPE_ACTION[action] ?? (action ? action : "managing"); + return ( +
+ {label} proxy scope + {scopeName && {trunc(scopeName, 50)}} +
+ ); +} + +function ListSitemap({ args }: ToolRendererProps) { + const parentId = args.parent_id as string | undefined; + return ( +
+ listing sitemap + {parentId && under #{trunc(String(parentId), 20)}} +
+ ); +} + +function ViewSitemapEntry({ args }: ToolRendererProps) { + const entryId = args.entry_id as string | undefined; + return ( +
+ viewing sitemap entry + {entryId && #{trunc(String(entryId), 20)}} +
+ ); +} + +export default function ProxyRenderer(props: ToolRendererProps) { + switch (props.toolName) { + case "list_requests": return ; + case "view_request": return ; + case "send_request": return ; + case "repeat_request": return ; + case "scope_rules": return ; + case "list_sitemap": return ; + case "view_sitemap_entry": return ; + default: + return ( + {props.toolName.replace(/_/g, " ")} + ); + } +} diff --git a/strix/viewer_src/src/components/live/tool-renderers/PythonRenderer.tsx b/strix/viewer_src/src/components/live/tool-renderers/PythonRenderer.tsx new file mode 100644 index 00000000..62c4dac8 --- /dev/null +++ b/strix/viewer_src/src/components/live/tool-renderers/PythonRenderer.tsx @@ -0,0 +1,68 @@ +"use client"; + +import type { ToolRendererProps } from "@/types/events"; +import { CodeBlock, SyntaxBlock } from "./ToolCard"; + +const MAX_OUTPUT_LINES = 50; +const MAX_LINE_LENGTH = 200; +const HEAD = 25; +const TAIL = 24; + +// Full ANSI escape sequence pattern (matches Python's ANSI_PATTERN) +const ANSI_PATTERN = /\x1b(?:[@-Z\\-_]|\[[0-?]*[ -/]*[@-~]|\][^\x07]*\x07)/g; + +// Strips truncation notices added by Python executor +const STRIP_PATTERN = /\.\.\. \[(stdout|stderr|result|output|error) truncated at \d+k? chars\]/g; + +function stripAnsi(text: string): string { + return text.replace(ANSI_PATTERN, ""); +} + +function truncateLine(line: string): string { + const clean = stripAnsi(line); + if (clean.length > MAX_LINE_LENGTH) return clean.slice(0, MAX_LINE_LENGTH - 3) + "..."; + return clean; +} + +function cleanOutput(output: string): string { + return output.replace(STRIP_PATTERN, "").trim(); +} + +function formatOutput(output: string): string { + const lines = output.split("\n"); + if (lines.length <= MAX_OUTPUT_LINES) return lines.map(truncateLine).join("\n"); + const hiddenCount = lines.length - HEAD - TAIL; + return [ + ...lines.slice(0, HEAD).map(truncateLine), + `... ${hiddenCount} lines truncated ...`, + ...lines.slice(-TAIL).map(truncateLine), + ].join("\n"); +} + +export default function PythonRenderer({ args, result }: ToolRendererProps) { + const action = (args.action as string) ?? ""; + const code = (args.code as string) ?? (args.script as string) ?? ""; + + const res = result as Record | string | null; + let stdout: string | null = null; + if (res && typeof res === "object") stdout = typeof res.stdout === "string" ? res.stdout : null; + else if (typeof res === "string") stdout = res; + + const subtitle = + action === "new_session" ? "new session" : + action === "close" ? "close session" : + action === "list_sessions" ? "list sessions" : null; + + const output = stdout ? formatOutput(cleanOutput(stdout)) : null; + + return ( +
+
+ Python + {subtitle && {subtitle}} +
+ {code && } + {output && {output}} +
+ ); +} diff --git a/strix/viewer_src/src/components/live/tool-renderers/ScanInfoRenderer.tsx b/strix/viewer_src/src/components/live/tool-renderers/ScanInfoRenderer.tsx new file mode 100644 index 00000000..491ec983 --- /dev/null +++ b/strix/viewer_src/src/components/live/tool-renderers/ScanInfoRenderer.tsx @@ -0,0 +1,46 @@ +"use client"; + +import type { ToolRendererProps } from "@/types/events"; +import { TruncatedText } from "./ToolCard"; + +function ScanStartInfo({ args }: ToolRendererProps) { + const rawTargets = args.targets; + const targets = Array.isArray(rawTargets) ? rawTargets : []; + const targetNames = targets.map((t) => (typeof t === "object" && t ? (t.original as string) ?? null : null)).filter(Boolean) as string[]; + + return ( +
+
+ Starting penetration test + {targetNames.length === 1 && on {targetNames[0]}} +
+ {targetNames.length > 1 && ( +
+ {targetNames.map((t, i) => ( +
โ€ข{t}
+ ))} +
+ )} +
+ ); +} + +function SubagentStartInfo({ args }: ToolRendererProps) { + const name = (args.name as string) ?? "Unknown Agent"; + const task = (args.task as string) ?? ""; + + return ( +
+
+ subagent + {name} +
+ {task &&
} +
+ ); +} + +export default function ScanInfoRenderer(props: ToolRendererProps) { + if (props.toolName === "subagent_start_info") return ; + return ; +} diff --git a/strix/viewer_src/src/components/live/tool-renderers/TerminalRenderer.tsx b/strix/viewer_src/src/components/live/tool-renderers/TerminalRenderer.tsx new file mode 100644 index 00000000..74ad4235 --- /dev/null +++ b/strix/viewer_src/src/components/live/tool-renderers/TerminalRenderer.tsx @@ -0,0 +1,131 @@ +"use client"; + +import type { ToolRendererProps } from "@/types/events"; +import { CodeBlock, SyntaxBlock } from "./ToolCard"; + +const MAX_OUTPUT_LINES = 50; +const MAX_LINE_LENGTH = 200; +const HEAD = 25; +const TAIL = 24; + +const STRIP_PATTERNS: RegExp[] = [ + /\n?\[Command still running after [\d.]+s - showing output so far\.?\s*(?:Use C-c to interrupt if needed\.)?\]/g, + /^\[Below is the output of the previous command\.\]\n?/gm, + /^No command is currently running\. Cannot send input\.$/gm, + /^A command is already running\. Use is_input=true to send input to it, or interrupt it first \(e\.g\., with C-c\)\.$/gm, +]; + +// Terminal-tool chunk metadata (the OSS engine's shell tool prepends these; the +// TUI strips them in strix/interface/tui/renderers/shell_renderer.py). Only a +// contiguous block anchored on a "Chunk ID:" line is stripped, so identical +// text inside real command output is left untouched. +const CHUNK_PREAMBLE_START = /^Chunk ID: [0-9a-f]+\s*$/; +const CHUNK_PREAMBLE_METADATA: RegExp[] = [ + /^Wall time: [\d.]+ seconds\s*$/, + /^Process exited with code -?\d+\s*$/, + /^Process running with session ID \d+\s*$/, + /^Original token count: \d+\s*$/, +]; + +function stripChunkPreambles(lines: string[]): string[] { + const out: string[] = []; + for (let i = 0; i < lines.length; i++) { + if (CHUNK_PREAMBLE_START.test(lines[i])) { + let j = i + 1; + while (j < lines.length && CHUNK_PREAMBLE_METADATA.some((p) => p.test(lines[j]))) j++; + if (j < lines.length && lines[j].trim() === "Output:") j++; + i = j - 1; + continue; + } + out.push(lines[i]); + } + return out; +} + +function escapeRegex(s: string): string { + return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); +} + +function truncateLine(line: string): string { + if (line.length > MAX_LINE_LENGTH) return line.slice(0, MAX_LINE_LENGTH - 3) + "..."; + return line; +} + +function cleanOutput(raw: string, command: string = ""): string { + // Strip ANSI escape sequences and carriage returns + let cleaned = raw.replace(/\x1b(?:[@-Z\\-_]|\[[0-?]*[ -/]*[@-~]|\][^\x07]*\x07)/g, "").replace(/\r/g, ""); + + for (const pattern of STRIP_PATTERNS) { + cleaned = cleaned.replace(pattern, ""); + } + + if (cleaned.trim()) { + const lines = stripChunkPreambles(cleaned.split("\n")); + const filtered: string[] = []; + for (const line of lines) { + // Skip leading blank lines + if (filtered.length === 0 && !line.trim()) continue; + // Skip [STRIX_N]$ prompt lines + if (/^\[STRIX_\d+\]\$\s*/.test(line)) continue; + // Skip echoed command (plain) + if (command && line.trim() === command.trim()) continue; + // Skip echoed command with $/#/> prefix + if (command && new RegExp(`^[\\$#>]\\s*${escapeRegex(command.trim())}\\s*$`).test(line)) continue; + filtered.push(line); + } + // Strip trailing [STRIX_N]$ lines + while (filtered.length > 0 && /^\[STRIX_\d+\]\$\s*/.test(filtered[filtered.length - 1])) { + filtered.pop(); + } + cleaned = filtered.join("\n"); + } + + return cleaned.trim(); +} + +function formatOutput(output: string): string { + const lines = output.split("\n"); + if (lines.length <= MAX_OUTPUT_LINES) return lines.map(truncateLine).join("\n"); + const hiddenCount = lines.length - HEAD - TAIL; + return [ + ...lines.slice(0, HEAD).map(truncateLine), + `... ${hiddenCount} lines truncated ...`, + ...lines.slice(-TAIL).map(truncateLine), + ].join("\n"); +} + +export default function TerminalRenderer({ toolName, args, result }: ToolRendererProps) { + const isStdin = toolName === "write_stdin"; + const command = isStdin + ? ((args.chars as string) ?? (args.input as string) ?? "") + : ((args.command as string) ?? (args.cmd as string) ?? ""); + + const res = result as Record | string | null; + let content: string | null = null; + let error: string | null = null; + let exitCode: number | null = null; + + if (res && typeof res === "object") { + content = typeof res.content === "string" ? res.content : null; + error = typeof res.error === "string" ? res.error : null; + exitCode = typeof res.exit_code === "number" ? res.exit_code : null; + const s = typeof res.status === "string" ? res.status : ""; + if (s === "running" || s === "command still running") content = null; + } else if (typeof res === "string") { + content = res; + } + + const output = content ? formatOutput(cleanOutput(content, command)) : null; + + return ( +
+ {isStdin ? "Terminal input" : "Terminal"} + {command && } + {error && {error}} + {output && {output}} + {exitCode != null && exitCode !== 0 && ( +
exit code {exitCode}
+ )} +
+ ); +} diff --git a/strix/viewer_src/src/components/live/tool-renderers/ThinkRenderer.tsx b/strix/viewer_src/src/components/live/tool-renderers/ThinkRenderer.tsx new file mode 100644 index 00000000..ee0b6392 --- /dev/null +++ b/strix/viewer_src/src/components/live/tool-renderers/ThinkRenderer.tsx @@ -0,0 +1,18 @@ +"use client"; + +import type { ToolRendererProps } from "@/types/events"; +import { TruncatedText } from "./ToolCard"; + +export default function ThinkRenderer({ args }: ToolRendererProps) { + const thought = (args.thought as string) ?? (args.content as string) ?? ""; + if (!thought) return null; + + return ( +
+ Agent is thinking +
+ +
+
+ ); +} diff --git a/strix/viewer_src/src/components/live/tool-renderers/TodoRenderer.tsx b/strix/viewer_src/src/components/live/tool-renderers/TodoRenderer.tsx new file mode 100644 index 00000000..edfeacd3 --- /dev/null +++ b/strix/viewer_src/src/components/live/tool-renderers/TodoRenderer.tsx @@ -0,0 +1,120 @@ +"use client"; + +import type { ToolRendererProps } from "@/types/events"; +import { Circle, CircleDot, CircleCheckBig, Trash2, Plus, RefreshCw, CheckCheck, RotateCcw, Pencil } from "lucide-react"; + +interface TodoItem { + id?: string; + title?: string; + status?: string; +} + +const ACTION_LABELS: Record = { + create_todo: { label: "Task added", Icon: Plus }, + list_todos: { label: "Plan", Icon: CheckCheck }, + update_todo: { label: "Task updated", Icon: Pencil }, + mark_todo_done: { label: "Task completed", Icon: CircleCheckBig }, + mark_todo_pending: { label: "Task reopened", Icon: RotateCcw }, + delete_todo: { label: "Task removed", Icon: Trash2 }, +}; + +function StatusIcon({ status }: { status: string }) { + if (status === "done") return ; + if (status === "in_progress") return ; + return ; +} + +function TodoList({ todos, highlightId }: { todos: TodoItem[]; highlightId?: string }) { + return ( +
+ {todos.map((todo, i) => { + const s = todo.status ?? "pending"; + const isHighlighted = highlightId && todo.id === highlightId; + return ( +
+
+ +
+ + {todo.title ?? "(untitled)"} + +
+ ); + })} +
+ ); +} + +export default function TodoRenderer({ toolName, args, result }: ToolRendererProps) { + const action = ACTION_LABELS[toolName] ?? { label: "Plan", Icon: RefreshCw }; + const ActionIcon = action.Icon; + const res = result as Record | string | null; + + // Simple string result + if (typeof res === "string" && res.trim()) { + return ( +
+
+ + {action.label} +
+
{res.trim()}
+
+ ); + } + + // Parse structured result + let todos: TodoItem[] = []; + let error: string | null = null; + let todoId: string | undefined; + + if (res && typeof res === "object") { + error = (res.error as string) ?? null; + if (res.success) { + const rawTodos = res.todos; + todos = Array.isArray(rawTodos) ? (rawTodos as TodoItem[]) : []; + } + todoId = (res.id as string) ?? (args.todo_id as string) ?? undefined; + } + + // For mutations, highlight the affected item + const highlightId = toolName !== "list_todos" ? todoId : undefined; + + // No todos and no error โ€” brief label only + if (todos.length === 0 && !error) { + return ( +
+ + {action.label} +
+ ); + } + + return ( +
+
+ + {action.label} +
+ {error &&
{error}
} + {todos.length > 0 && ( +
+ +
+ )} +
+ ); +} diff --git a/strix/viewer_src/src/components/live/tool-renderers/ToolCard.tsx b/strix/viewer_src/src/components/live/tool-renderers/ToolCard.tsx new file mode 100644 index 00000000..bbd2333c --- /dev/null +++ b/strix/viewer_src/src/components/live/tool-renderers/ToolCard.tsx @@ -0,0 +1,100 @@ +"use client"; + +import { useState } from "react"; +import Markdown from "./Markdown"; +import hljs from "@/lib/hljs"; +import "highlight.js/styles/github-dark.css"; + +const OUTPUT_PREVIEW_LINES = 6; +const CODE_PREVIEW_LINES = 20; + +/** Truncatable markdown text with "Show more" */ +export function TruncatedText({ text, maxLines = 20 }: { text: string; maxLines?: number }) { + const [expanded, setExpanded] = useState(false); + const lines = text.trimEnd().split("\n"); + const needsTruncation = lines.length > maxLines; + + return ( +
+
+ +
+ {needsTruncation && ( + + )} +
+ ); +} + +/** Code/output block โ€” truncates to 12 lines with "Show more", expanded view scrolls */ +export function CodeBlock({ children, className = "" }: { children: React.ReactNode; className?: string }) { + const [expanded, setExpanded] = useState(false); + + const isString = typeof children === "string"; + const lines = isString ? (children as string).trimEnd().split("\n") : null; + const needsTruncation = lines !== null && lines.length > OUTPUT_PREVIEW_LINES; + const displayContent = needsTruncation && !expanded + ? lines!.slice(0, OUTPUT_PREVIEW_LINES).join("\n") + : children; + + return ( +
+
+        {displayContent}
+      
+ {needsTruncation && ( + + )} +
+ ); +} + +/** Syntax-highlighted code block โ€” no border, no line numbers, just highlighting. + * Pass `collapsible` to get a "Show more" toggle instead of a scroll cap. */ +export function SyntaxBlock({ code, language, className = "", collapsible = false }: { code: string; language?: string; className?: string; collapsible?: boolean }) { + const [expanded, setExpanded] = useState(false); + + const lines = code.trimEnd().split("\n"); + const needsTruncation = collapsible && lines.length > CODE_PREVIEW_LINES; + const displayCode = needsTruncation && !expanded + ? lines.slice(0, CODE_PREVIEW_LINES).join("\n") + : code; + + let highlighted: string; + try { + highlighted = language + ? hljs.highlight(displayCode, { language, ignoreIllegals: true }).value + : hljs.highlightAuto(displayCode).value; + } catch { + highlighted = hljs.highlightAuto(displayCode).value; + } + + return ( +
+
+        
+      
+ {needsTruncation && ( + + )} +
+ ); +} diff --git a/strix/viewer_src/src/components/live/tool-renderers/ViewImageRenderer.tsx b/strix/viewer_src/src/components/live/tool-renderers/ViewImageRenderer.tsx new file mode 100644 index 00000000..b94282aa --- /dev/null +++ b/strix/viewer_src/src/components/live/tool-renderers/ViewImageRenderer.tsx @@ -0,0 +1,30 @@ +"use client"; + +import type { ToolRendererProps } from "@/types/events"; +import { shortPath } from "./utils"; + +/** Mirrors the OSS TUI `ViewImageRenderer`: surfaces load errors, otherwise a + * compact "view image " line. */ +export default function ViewImageRenderer({ args, result }: ToolRendererProps) { + const path = ((args.path as string) ?? "").trim(); + + const res = result as Record | string | null; + let error: string | null = null; + if (typeof res === "string") { + const trimmed = res.trim(); + // A string result that isn't an image payload or structured data is an error message + if (trimmed && !trimmed.toLowerCase().startsWith("data:image/") && !trimmed.startsWith("{")) { + error = trimmed; + } + } + + return ( +
+
+ view image + {path && {shortPath(path)}} +
+ {error &&
{error}
} +
+ ); +} diff --git a/strix/viewer_src/src/components/live/tool-renderers/VulnReportRenderer.tsx b/strix/viewer_src/src/components/live/tool-renderers/VulnReportRenderer.tsx new file mode 100644 index 00000000..8c1fec09 --- /dev/null +++ b/strix/viewer_src/src/components/live/tool-renderers/VulnReportRenderer.tsx @@ -0,0 +1,73 @@ +"use client"; + +import type { ToolRendererProps } from "@/types/events"; +import { TruncatedText } from "./ToolCard"; +import { MdCodeBlock } from "@/components/vulnerability/MdCodeBlock"; +import Markdown from "./Markdown"; + +const SEVERITY_COLORS: Record = { + critical: "text-red-400", high: "text-orange-400", medium: "text-yellow-400", + low: "text-blue-400", info: "text-cyan-400", +}; + +export default function VulnReportRenderer({ args, result }: ToolRendererProps) { + const title = (args.title as string) ?? ""; + const description = (args.description as string) ?? ""; + const impact = (args.impact as string) ?? ""; + const target = (args.target as string) ?? ""; + const endpoint = (args.endpoint as string) ?? ""; + const method = (args.method as string) ?? ""; + const technicalAnalysis = (args.technical_analysis as string) ?? ""; + const pocDescription = (args.poc_description as string) ?? ""; + const pocCode = (args.poc_script_code as string) ?? ""; + const remediation = (args.remediation_steps as string) ?? ""; + const cve = (args.cve as string) ?? ""; + const cwe = (args.cwe as string) ?? ""; + + const res = result as Record | null; + const rawSev = (res && typeof res === "object" ? res.severity : null) ?? args.severity ?? "medium"; + const severity = String(rawSev).toLowerCase(); + const cvss = (res && typeof res === "object" ? (res.cvss_score as number) : null) ?? (args.cvss as number) ?? null; + const sevColor = SEVERITY_COLORS[severity] ?? "text-yellow-400"; + + return ( +
+
+ {severity.toUpperCase()} + {cvss != null && CVSS {cvss}} + {cve && {cve}} + {cwe && {cwe}} +
+ {title &&
{title}
} + {(target || endpoint) && ( +
{target}{endpoint ? ` ${method} ${endpoint}` : ""}
+ )} + {description && } + {impact && ( +
+ Impact +
+
+ )} + {technicalAnalysis && ( +
+ Technical Analysis +
+
+ )} + {(pocDescription || pocCode) && ( +
+ Proof of Concept + {pocDescription &&
} + {pocCode && {pocCode}} +
+ )} + {remediation && ( +
+ Remediation +
+
+ )} +
+ ); +} diff --git a/strix/viewer_src/src/components/live/tool-renderers/WebSearchRenderer.tsx b/strix/viewer_src/src/components/live/tool-renderers/WebSearchRenderer.tsx new file mode 100644 index 00000000..0305de6e --- /dev/null +++ b/strix/viewer_src/src/components/live/tool-renderers/WebSearchRenderer.tsx @@ -0,0 +1,24 @@ +"use client"; + +import type { ToolRendererProps } from "@/types/events"; +import { TruncatedText } from "./ToolCard"; + +export default function WebSearchRenderer({ args, result }: ToolRendererProps) { + const query = (args.query as string) ?? (args.search_query as string) ?? ""; + const res = result as Record | null; + const content = res ? (res.content as string) ?? null : null; + const error = res && !res.success ? (res.message as string) ?? null : null; + + return ( +
+ Searching the web + {query &&
{query}
} + {error &&
{error}
} + {content && ( +
+ +
+ )} +
+ ); +} diff --git a/strix/viewer_src/src/components/live/tool-renderers/index.ts b/strix/viewer_src/src/components/live/tool-renderers/index.ts new file mode 100644 index 00000000..53427992 --- /dev/null +++ b/strix/viewer_src/src/components/live/tool-renderers/index.ts @@ -0,0 +1,173 @@ +import type { ComponentType } from "react"; +import type { ToolRendererProps } from "@/types/events"; +import { + Terminal, Globe, FileText, ShieldAlert, ArrowUpRight, Brain, + Bot, MessageCircle, Flag, Eye, Search, Code, StickyNote, + ListTodo, Crosshair, Wrench, Ban, Image, +} from "lucide-react"; + +import TerminalRenderer from "./TerminalRenderer"; +import BrowserRenderer from "./BrowserRenderer"; +import FileEditRenderer from "./FileEditRenderer"; +import ApplyPatchRenderer from "./ApplyPatchRenderer"; +import ViewImageRenderer from "./ViewImageRenderer"; +import VulnReportRenderer from "./VulnReportRenderer"; +import ProxyRenderer from "./ProxyRenderer"; +import ThinkRenderer from "./ThinkRenderer"; +import AgentCommsRenderer from "./AgentCommsRenderer"; +import WebSearchRenderer from "./WebSearchRenderer"; +import PythonRenderer from "./PythonRenderer"; +import ScanInfoRenderer from "./ScanInfoRenderer"; +import FinishRenderer from "./FinishRenderer"; +import NotesRenderer from "./NotesRenderer"; +import TodoRenderer from "./TodoRenderer"; +import FallbackRenderer from "./FallbackRenderer"; +import LoadSkillRenderer from "./LoadSkillRenderer"; + +/** + * Tool-renderer mapping โ€” data-driven, keyed by the engine's tool *family*. + * + * The OSS strix engine (usestrix/strix) is the source of truth for tool names: + * see `strix/tools/**` for definitions and `strix/interface/tui/renderers/` for + * the TUI equivalents of these components. Tools come in families that share a + * React renderer + icon (terminal, proxy, notes, todos, โ€ฆ), so we describe each + * family ONCE instead of repeating a row per tool name. A new tool that joins an + * existing family (e.g. another `*_request` proxy tool) is picked up by the + * family prefix matcher with no code change; only genuinely-new families need an + * entry here. + */ + +export type ToolCategory = + | "terminal" + | "python" + | "browser" + | "filesystem" + | "proxy" + | "reporting" + | "thinking" + | "agents" + | "search" + | "lifecycle" + | "notes" + | "skills" + | "todos" + | "telemetry"; + +export interface ToolIconMeta { + icon: ComponentType<{ className?: string }>; + color: string; +} + +interface CategoryMeta { + renderer: ComponentType; + icon: ComponentType<{ className?: string }>; + color: string; + /** Family matcher for graceful fallback of unknown tools in this family. */ + match?: RegExp; +} + +/** Per-family defaults: renderer + base icon/color + a family-name matcher. */ +const CATEGORY_META: Record = { + terminal: { renderer: TerminalRenderer, icon: Terminal, color: "text-emerald-400" }, + python: { renderer: PythonRenderer, icon: Code, color: "text-yellow-400" }, + browser: { renderer: BrowserRenderer, icon: Globe, color: "text-blue-400" }, + filesystem: { renderer: FileEditRenderer, icon: FileText, color: "text-sky-400" }, + proxy: { renderer: ProxyRenderer, icon: ArrowUpRight, color: "text-purple-400", match: /request|sitemap|scope/ }, + reporting: { renderer: VulnReportRenderer, icon: ShieldAlert, color: "text-red-400" }, + thinking: { renderer: ThinkRenderer, icon: Brain, color: "text-purple-400" }, + agents: { renderer: AgentCommsRenderer, icon: Bot, color: "text-cyan-400", match: /agent/ }, + search: { renderer: WebSearchRenderer, icon: Search, color: "text-amber-400" }, + lifecycle: { renderer: ScanInfoRenderer, icon: Flag, color: "text-emerald-400" }, + notes: { renderer: NotesRenderer, icon: StickyNote, color: "text-amber-400", match: /note/ }, + skills: { renderer: LoadSkillRenderer, icon: Wrench, color: "text-emerald-400" }, + todos: { renderer: TodoRenderer, icon: ListTodo, color: "text-purple-400", match: /todo/ }, + telemetry: { renderer: FallbackRenderer, icon: Wrench, color: "text-[#555]" }, +}; + +/** + * Tool name โ†’ family. Grouped by family; legacy names the engine used before the + * OSS SDK migration (terminal_execute, python_action, browser_action, + * str_replace_editor, send_request, โ€ฆ) are kept as aliases so historical scan + * data keeps rendering. + */ +const CATEGORY_TOOLS: Record = { + // Shell โ€” SDK `exec_command` / `write_stdin` (legacy: terminal_execute) + terminal: ["exec_command", "write_stdin", "terminal_execute"], + // Legacy Python session tool (now runs through the shell) + python: ["python_action"], + // Legacy browser tool (now driven via agent-browser CLI over the shell) + browser: ["browser_action"], + // SDK filesystem โ€” `apply_patch` / `view_image` (legacy: str_replace_editor, list/search) + filesystem: ["apply_patch", "view_image", "str_replace_editor", "list_files", "search_files"], + // Caido proxy tools (legacy: send_request) + proxy: ["list_requests", "view_request", "repeat_request", "list_sitemap", "view_sitemap_entry", "scope_rules", "send_request"], + reporting: ["create_vulnerability_report"], + thinking: ["think"], + agents: ["create_agent", "agent_finish", "send_message_to_agent", "wait_for_message", "view_agent_graph", "stop_agent"], + search: ["web_search"], + // scan_start_info / subagent_start_info are strix-app synthetic events; finish_scan is the engine's + lifecycle: ["scan_start_info", "subagent_start_info", "finish_scan"], + notes: ["create_note", "delete_note", "update_note", "list_notes", "get_note"], + skills: ["load_skill"], + todos: ["create_todo", "list_todos", "update_todo", "mark_todo_done", "mark_todo_pending", "delete_todo"], + telemetry: ["sandbox_error_details", "llm_error_details"], +}; + +/** Reverse index (tool name โ†’ family), built once from CATEGORY_TOOLS. */ +const TOOL_CATEGORY: Record = Object.fromEntries( + (Object.entries(CATEGORY_TOOLS) as [ToolCategory, readonly string[]][]).flatMap( + ([category, names]) => names.map((name) => [name, category] as const), + ), +); + +/** + * Per-tool renderer overrides โ€” for the rare tool whose renderer differs from its + * family default (finish_scan renders the final report, not the scan-start card). + */ +const RENDERER_OVERRIDES: Partial>> = { + finish_scan: FinishRenderer, + apply_patch: ApplyPatchRenderer, + view_image: ViewImageRenderer, +}; + +/** + * Per-tool icon overrides โ€” for tools whose icon/color differs from their family + * default (the agents family and lifecycle family each vary per tool). + */ +const ICON_OVERRIDES: Partial> = { + agent_finish: { icon: Flag, color: "text-cyan-400" }, + send_message_to_agent: { icon: MessageCircle, color: "text-cyan-400" }, + wait_for_message: { icon: MessageCircle, color: "text-cyan-400" }, + view_agent_graph: { icon: Eye, color: "text-cyan-400" }, + stop_agent: { icon: Ban, color: "text-red-400" }, + scan_start_info: { icon: Crosshair, color: "text-emerald-400" }, + subagent_start_info: { icon: Bot, color: "text-purple-400" }, + view_image: { icon: Image, color: "text-sky-400" }, +}; + +const FALLBACK_META: CategoryMeta = CATEGORY_META.telemetry; + +/** Resolve a tool name to its family, falling back to family-name matchers. */ +function resolveCategory(toolName: string): ToolCategory | null { + const direct = TOOL_CATEGORY[toolName]; + if (direct) return direct; + for (const [category, meta] of Object.entries(CATEGORY_META) as [ToolCategory, CategoryMeta][]) { + if (meta.match?.test(toolName)) return category; + } + return null; +} + +export function getToolRenderer(toolName: string): ComponentType { + const override = RENDERER_OVERRIDES[toolName]; + if (override) return override; + const category = resolveCategory(toolName); + return category ? CATEGORY_META[category].renderer : FallbackRenderer; +} + +export function getToolIcon(toolName: string): ToolIconMeta { + const override = ICON_OVERRIDES[toolName]; + if (override) return override; + const category = resolveCategory(toolName); + const meta = category ? CATEGORY_META[category] : FALLBACK_META; + return { icon: meta.icon, color: meta.color }; +} diff --git a/strix/viewer_src/src/components/live/tool-renderers/utils.ts b/strix/viewer_src/src/components/live/tool-renderers/utils.ts new file mode 100644 index 00000000..9eb9bca7 --- /dev/null +++ b/strix/viewer_src/src/components/live/tool-renderers/utils.ts @@ -0,0 +1,3 @@ +export function shortPath(p: string): string { + return p.length > 60 ? "..." + p.slice(-57) : p; +} diff --git a/strix/viewer_src/src/components/vulnerability/CodeDiffBlock.tsx b/strix/viewer_src/src/components/vulnerability/CodeDiffBlock.tsx new file mode 100644 index 00000000..c88ed49b --- /dev/null +++ b/strix/viewer_src/src/components/vulnerability/CodeDiffBlock.tsx @@ -0,0 +1,114 @@ +"use client"; + +import { useState } from "react"; +import hljs from "@/lib/hljs"; +import "highlight.js/styles/github-dark.css"; +import { diffLines } from "diff"; +import { Copy, Check } from "lucide-react"; +import { getLanguageFromFile, copyToClipboard } from "@/lib/vulnerability-utils"; + +function safeHighlight(code: string, lang: string): string { + try { + return hljs.highlight(code, { language: lang, ignoreIllegals: true }).value; + } catch { + return hljs.highlightAuto(code).value; + } +} + +interface CodeDiffBlockProps { + file: string; + startLine: number; + endLine?: number; + before: string; + after: string; + onCopy?: () => void; +} + +export function CodeDiffBlock({ file, startLine, endLine, before, after, onCopy }: CodeDiffBlockProps) { + const [copied, setCopied] = useState(false); + + const lineRef = + endLine && endLine !== startLine ? `${startLine}-${endLine}` : `${startLine}`; + const lang = getLanguageFromFile(file) || "text"; + const changes = diffLines(before, after); + + let oldLineNo = startLine; + let newLineNo = startLine; + const rows = changes.flatMap((change) => + change.value + .replace(/\n$/, "") + .split("\n") + .map((line) => { + const highlighted = + line === "" + ? "\n" + : lang !== "text" + ? safeHighlight(line, lang) + : line.replace(/&/g, "&").replace(//g, ">"); + let leftNo = ""; + let rightNo = ""; + if (change.removed) { + leftNo = String(oldLineNo++); + } else if (change.added) { + rightNo = String(newLineNo++); + } else { + leftNo = String(oldLineNo++); + rightNo = String(newLineNo++); + } + return { highlighted, added: !!change.added, removed: !!change.removed, leftNo, rightNo }; + }) + ); + + const copy = () => { + copyToClipboard(after); + setCopied(true); + setTimeout(() => setCopied(false), 2000); + onCopy?.(); + }; + + return ( +
+
+ + {file}:{lineRef} + + +
+ +
+
+ + + {rows.map((row, i) => ( + + + + + ))} + +
+ {row.leftNo} + + {row.rightNo} + +
+
+
+ ); +} diff --git a/strix/viewer_src/src/components/vulnerability/ContentSection.tsx b/strix/viewer_src/src/components/vulnerability/ContentSection.tsx new file mode 100644 index 00000000..84b6dcdf --- /dev/null +++ b/strix/viewer_src/src/components/vulnerability/ContentSection.tsx @@ -0,0 +1,27 @@ +"use client"; + +import ReactMarkdown from "react-markdown"; +import remarkGfm from "remark-gfm"; +import { rehypeCodeMeta, mdComponents } from "./MdCodeBlock"; + +export function ContentSection({ title, content, action }: { title?: string; content: string; action?: React.ReactNode }) { + return ( +
+ {(title || action) && ( +
+ {title ?

{title}

: } + {action} +
+ )} +
+ + {content} + +
+
+ ); +} diff --git a/strix/viewer_src/src/components/vulnerability/IssueSidebar.tsx b/strix/viewer_src/src/components/vulnerability/IssueSidebar.tsx new file mode 100644 index 00000000..f11495f0 --- /dev/null +++ b/strix/viewer_src/src/components/vulnerability/IssueSidebar.tsx @@ -0,0 +1,277 @@ +"use client"; + +import { useState } from "react"; +import { Clock, Globe, ChevronDown } from "lucide-react"; +import { parseTarget } from "@/lib/target-utils"; +import { ProviderIcon } from "@/components/AddRepositoryDialog"; +import { getSeverityDot } from "@/lib/vulnerability-utils"; +import { formatTimeAgo } from "@/lib/utils"; +import { FIX_EFFORT_META, type FixEffort, type Vulnerability } from "@/types/issues"; + +/* โ”€โ”€โ”€ Human-friendly CVSS labels โ”€โ”€โ”€ */ + +const HUMAN_LABELS: Record> = { + attack_vector: { N: "Remotely exploitable", A: "Adjacent network", L: "Local access required", P: "Physical access required" }, + attack_complexity: { L: "Easy to exploit", H: "Requires specific conditions" }, + privileges_required: { N: "No authentication needed", L: "Low privileges needed", H: "High privileges needed" }, + user_interaction: { N: "No user action required", R: "Requires user action", P: "Passive user role", A: "Active user role" }, + scope: { U: "Impact stays contained", C: "Can spread to other systems" }, + confidentiality: { N: "No data exposure", L: "Partial data exposure", H: "Full data exposure" }, + integrity: { N: "No data modification", L: "Limited modification", H: "Full data modification" }, + availability: { N: "No service disruption", L: "Limited disruption", H: "Full service disruption" }, +}; + +const RISK_LEVEL: Record> = { + attack_vector: { N: "high", A: "medium", L: "low", P: "low" }, + attack_complexity: { L: "high", H: "low" }, + privileges_required: { N: "high", L: "medium", H: "low" }, + user_interaction: { N: "high", R: "low", P: "medium", A: "low" }, + scope: { C: "high", U: "low" }, + confidentiality: { H: "high", L: "medium", N: "low" }, + integrity: { H: "high", L: "medium", N: "low" }, + availability: { H: "high", L: "medium", N: "low" }, +}; + +const RISK_BADGE: Record = { + high: "bg-red-500/15 text-red-400 border-red-500/25", + medium: "bg-yellow-500/15 text-yellow-400 border-yellow-500/25", + low: "bg-[#222] text-[#666] border-[#333]", +}; + +const FACTOR_GROUPS: { label: string; keys: string[] }[] = [ + { label: "Exploitability", keys: ["attack_vector", "attack_complexity", "privileges_required", "user_interaction"] }, + { label: "Impact", keys: ["scope", "confidentiality", "integrity", "availability"] }, +]; + +/* โ”€โ”€โ”€ Location link builder โ”€โ”€โ”€ */ + +export function buildLocationHref( + repoUrl: string, + provider: string, + branch: string, + file: string, + startLine: number, +): string | null { + const base = repoUrl.replace(/\.git$/, "").replace(/\/+$/, ""); + const encodedFile = file.split("/").map(encodeURIComponent).join("/"); + const encodedBranch = branch.split("/").map(encodeURIComponent).join("/"); + + if (provider === "github") { + return `${base}/blob/${encodedBranch}/${encodedFile}#L${startLine}`; + } + if (provider === "gitlab") { + return `${base}/-/blob/${encodedBranch}/${encodedFile}#L${startLine}`; + } + return null; +} + +/* โ”€โ”€โ”€ Props โ”€โ”€โ”€ */ + +interface IssueSidebarProps { + vulnerability: Vulnerability; + statusSlot: React.ReactNode; + slackThreadUrl?: string | null; +} + +/* โ”€โ”€โ”€ Component โ”€โ”€โ”€ */ + +export function IssueSidebar({ vulnerability, statusSlot, slackThreadUrl }: IssueSidebarProps) { + const { severity, cvss, cve, cwe, fix_effort, created_at, target, endpoint, method, code_locations, cvss_breakdown, location_meta } = vulnerability; + + const [riskOpen, setRiskOpen] = useState(true); + + const fixLocations = code_locations?.filter((loc) => loc.fix_before && loc.fix_after); + const hasLocations = fixLocations && fixLocations.length > 0; + const parsed = target ? parseTarget(target) : null; + const hasAsset = !!(target || endpoint || method || hasLocations); + + const hasBreakdown = cvss_breakdown && Object.values(cvss_breakdown).some((v) => v != null); + + return ( + + ); +} diff --git a/strix/viewer_src/src/components/vulnerability/MdCodeBlock.tsx b/strix/viewer_src/src/components/vulnerability/MdCodeBlock.tsx new file mode 100644 index 00000000..0f37c4f3 --- /dev/null +++ b/strix/viewer_src/src/components/vulnerability/MdCodeBlock.tsx @@ -0,0 +1,141 @@ +"use client"; + +import { useState } from "react"; +import hljs from "@/lib/hljs"; +import "highlight.js/styles/github-dark.css"; +import { Copy, Check } from "lucide-react"; +import { copyToClipboard } from "@/lib/vulnerability-utils"; + +export function MdCodeBlock({ + className, + children, + node, +}: { + className?: string; + children?: React.ReactNode; + node?: { data?: { meta?: string }; properties?: { metastring?: string } }; +}) { + const [copied, setCopied] = useState(false); + const raw = String(children).replace(/\n$/, ""); + const match = /language-(\w+)/.exec(className || ""); + const isBlock = raw.includes("\n") || match; + + if (!isBlock) { + return {children}; + } + + const meta = node?.data?.meta || node?.properties?.metastring || ""; + const titleMatch = /title=["']?([^"'\s}]+)["']?/.exec(meta); + const startMatch = /startLineNumber=(\d+)/.exec(meta); + const fileName = titleMatch?.[1] || null; + const startLine = startMatch ? parseInt(startMatch[1], 10) : 1; + const headerLabel = fileName + ? startMatch + ? `${fileName}:${startLine}` + : fileName + : null; + + let highlighted: string; + if (match) { + try { + highlighted = hljs.highlight(raw, { language: match[1], ignoreIllegals: true }).value; + } catch { + highlighted = hljs.highlightAuto(raw).value; + } + } else { + highlighted = hljs.highlightAuto(raw).value; + } + + const lines = highlighted.split("\n"); + + const copy = () => { + copyToClipboard(raw); + setCopied(true); + setTimeout(() => setCopied(false), 2000); + }; + + return ( +
+ {headerLabel ? ( +
+ {headerLabel} +
+ +
+ ) : ( + + )} +
+ + + {lines.map((line, i) => ( + + + + ))} + +
+ {startLine + i} + +
+
+
+ ); +} + +// rehype plugin: pass code fence meta string through to code element properties +type HastNode = { + type: string; + tagName?: string; + children?: HastNode[]; + properties?: Record; + data?: { meta?: string }; +}; + +export function rehypeCodeMeta() { + return (tree: HastNode) => { + const visit = (node: HastNode) => { + if (node.type === "element" && node.tagName === "pre" && node.children) { + const codeEl = node.children.find( + (c) => c.type === "element" && c.tagName === "code" + ); + if (codeEl?.data?.meta) { + codeEl.properties = codeEl.properties || {}; + codeEl.properties.metastring = codeEl.data.meta; + } + } + if (node.children) { + node.children.forEach((child) => visit(child)); + } + }; + visit(tree); + }; +} + +export const mdComponents = { + code: MdCodeBlock as React.ComponentType>, + pre: ({ children }: { children?: React.ReactNode }) => <>{children}, +}; diff --git a/strix/viewer_src/src/components/vulnerability/PocBlock.tsx b/strix/viewer_src/src/components/vulnerability/PocBlock.tsx new file mode 100644 index 00000000..fa2184b9 --- /dev/null +++ b/strix/viewer_src/src/components/vulnerability/PocBlock.tsx @@ -0,0 +1,77 @@ +"use client"; + +import { useState } from "react"; +import hljs from "@/lib/hljs"; +import "highlight.js/styles/github-dark.css"; +import ReactMarkdown from "react-markdown"; +import remarkGfm from "remark-gfm"; +import { Copy, Check } from "lucide-react"; +import { copyToClipboard } from "@/lib/vulnerability-utils"; +import { rehypeCodeMeta, mdComponents } from "./MdCodeBlock"; + +interface PocBlockProps { + description?: string | null; + scriptCode?: string | null; + onCopy?: () => void; +} + +export function PocBlock({ description, scriptCode, onCopy }: PocBlockProps) { + const [copied, setCopied] = useState(false); + + if (!description && !scriptCode) return null; + + const copy = () => { + if (!scriptCode) return; + copyToClipboard(scriptCode); + setCopied(true); + setTimeout(() => setCopied(false), 2000); + onCopy?.(); + }; + + return ( +
+

Proof of Concept

+
+ {description && ( +
+ + {description} + +
+ )} + {scriptCode && ( +
+
+ PoC Script +
+ +
+
+
+                
+              
+
+
+ )} +
+
+ ); +} diff --git a/strix/viewer_src/src/components/vulnerability/VulnerabilityDetail.tsx b/strix/viewer_src/src/components/vulnerability/VulnerabilityDetail.tsx new file mode 100644 index 00000000..a3312023 --- /dev/null +++ b/strix/viewer_src/src/components/vulnerability/VulnerabilityDetail.tsx @@ -0,0 +1,233 @@ +"use client"; + +import React, { useState } from "react"; +import { Clock, CheckCircle2, Ban, History, BellOff } from "lucide-react"; +import { Vulnerability, VulnerabilityStatus, SEVERITY_COLORS, STATUS_META, isSeverityOverridden } from "@/types/issues"; +import { formatTimeAgo } from "@/lib/utils"; +import { getSeverityDot } from "@/lib/vulnerability-utils"; +import { formatStrixId } from "@/lib/display-number"; +import { ContentSection } from "@/components/vulnerability/ContentSection"; +import { CodeDiffBlock } from "@/components/vulnerability/CodeDiffBlock"; +import { PocBlock } from "@/components/vulnerability/PocBlock"; +import { IssueSidebar } from "@/components/vulnerability/IssueSidebar"; + +function bannerTime(dateString: string | null): string { + if (!dateString) return ""; + const diffInSeconds = Math.floor((Date.now() - new Date(dateString).getTime()) / 1000); + if (diffInSeconds < 604800) return ` ${formatTimeAgo(dateString)}`; + return ` on ${formatTimeAgo(dateString)}`; +} + +const STATUS_BANNER: Record = { + open: null, + in_progress: { icon: Clock, label: "Marked as In Progress", iconColor: "text-blue-400" }, + snoozed: { icon: BellOff, label: "Snoozed", iconColor: "text-purple-400" }, + fixed: { icon: CheckCircle2, label: "Marked as Fixed", iconColor: "text-emerald-400" }, + ignored: { icon: Ban, label: "Marked as Ignored", iconColor: "text-[#888]" }, +}; + +type BottomTab = "fix" | "reproduction"; + +interface VulnerabilityDetailProps { + vulnerability: Vulnerability; +} + +/** + * Self-contained finding detail (header + status banners + content grid), + * without page chrome. Shared by the public /share/issues page and the local + * /results view so both render findings identically. + */ +export default function VulnerabilityDetail({ vulnerability }: VulnerabilityDetailProps) { + const currentMeta = STATUS_META[vulnerability.status]; + const hasCodeLocations = vulnerability.code_locations && vulnerability.code_locations.length > 0; + const hasFix = hasCodeLocations || vulnerability.remediation_steps; + const hasReproduction = !!(vulnerability.evidence || vulnerability.assumptions || vulnerability.poc_description || vulnerability.poc_script_code); + + const [activeTab, setActiveTab] = useState("fix"); + + const bottomTabs: { id: BottomTab; label: string; show: boolean }[] = [ + { id: "fix", label: "Fix", show: !!hasFix }, + { id: "reproduction", label: "Reproduction", show: hasReproduction }, + ]; + const visibleTabs = bottomTabs.filter((t) => t.show); + + return ( +
+ {/* Header */} +
+
+ {vulnerability.display_number && ( + + {formatStrixId(vulnerability.display_number)} + + )} +

{vulnerability.title}

+
+
+ + {currentMeta.label} + +
+
+ + {vulnerability.severity} + {!isSeverityOverridden(vulnerability) && vulnerability.cvss ? ` ${vulnerability.cvss}` : ""} + + {isSeverityOverridden(vulnerability) && ( +
+ {vulnerability.cve && ( + <> + · + {vulnerability.cve} + + )} +
+
+ + {/* Status banner */} + {vulnerability.status !== "open" && (() => { + const banner = STATUS_BANNER[vulnerability.status]; + if (!banner) return null; + const BannerIcon = banner.icon; + return ( +
+
+ ); + })()} + + {/* Severity override banner */} + {isSeverityOverridden(vulnerability) && ( +
+
+ )} + + {/* Content grid */} +
+ {/* Main content */} +
+
+ + + {vulnerability.impact && } + + {vulnerability.technical_analysis && ( + + )} +
+ + {/* Bottom tabs */} + {visibleTabs.length > 0 && ( +
+
+ +
+ + {/* Fix tab */} + {hasFix && ( +
+ {vulnerability.remediation_steps && ( + + )} + + {hasCodeLocations && + vulnerability.code_locations! + .filter((loc) => loc.fix_before && loc.fix_after) + .map((loc, i) => ( + + ))} +
+ )} + + {/* Reproduction tab */} + {hasReproduction && ( +
+ {vulnerability.assumptions && ( + + )} + + {vulnerability.evidence && ( + + )} + + +
+ )} +
+ )} +
+ + {/* Sidebar */} +
+ +
+ {currentMeta.label} + + } + /> +
+
+
+ ); +} diff --git a/strix/viewer_src/src/index.css b/strix/viewer_src/src/index.css new file mode 100644 index 00000000..5825be03 --- /dev/null +++ b/strix/viewer_src/src/index.css @@ -0,0 +1,173 @@ +@import "tailwindcss"; + +:root { + --font-geist-sans: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, + Helvetica, Arial, sans-serif; + --font-geist-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, + "Liberation Mono", "Courier New", monospace; +} + +@theme inline { + --font-sans: var(--font-geist-sans); + --font-mono: var(--font-geist-mono); +} + +html, +body { + background: #000000; + color: #ffffff; + font-family: var(--font-geist-sans); +} + +/* Tab content transition (lifted from strix-app globals.css) */ +@keyframes tab-in { + from { + opacity: 0; + filter: blur(4px); + transform: translateY(6px); + } + to { + opacity: 1; + filter: blur(0px); + transform: translateY(0px); + } +} + +.animate-tab-in { + animation: tab-in 200ms ease-out; +} + +/* Markdown prose styling (lifted from strix-app globals.css) */ +.prose-markdown { + font-size: 14px; + line-height: 1.7; + color: #999; + word-wrap: break-word; + overflow-wrap: break-word; +} + +.prose-markdown p { + margin-bottom: 0.75em; +} + +.prose-markdown p:last-child { + margin-bottom: 0; +} + +.prose-markdown strong { + color: #ccc; + font-weight: 600; +} + +.prose-markdown em { + font-style: italic; +} + +.prose-markdown code { + background: #0a0a0a; + border: 1px solid #111; + border-radius: 4px; + padding: 0.15em 0.4em; + font-size: 0.9em; + font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace; + color: #ccc; + font-variant-ligatures: none; +} + +.prose-markdown pre { + background: transparent; + border: none; + border-radius: 0; + padding: 0; + margin: 0; + font-variant-ligatures: none; +} + +.prose-markdown pre code { + background: none; + border: none; + padding: 0; + font-size: 13px; + color: inherit; +} + +.prose-markdown ul, +.prose-markdown ol { + padding-left: 1.5em; + margin-bottom: 0.75em; +} + +.prose-markdown ul { + list-style-type: disc; +} + +.prose-markdown ol { + list-style-type: decimal; +} + +.prose-markdown li { + margin-bottom: 0.25em; +} + +.prose-markdown li > ul, +.prose-markdown li > ol { + padding-left: 1.5em; + margin-top: 0.25em; + margin-bottom: 0.25em; +} + +.prose-markdown ol + ul { + padding-left: 3em; + margin-top: -0.5em; +} + +.prose-markdown h1, +.prose-markdown h2, +.prose-markdown h3, +.prose-markdown h4, +.prose-markdown h5, +.prose-markdown h6 { + color: #ddd; + font-weight: 600; + margin-top: 1em; + margin-bottom: 0.5em; +} + +.prose-markdown a { + color: inherit; + text-decoration: none; + pointer-events: none; +} + +.prose-markdown blockquote { + border-left: 3px solid #333; + padding-left: 1em; + color: #777; + margin: 0.75em 0; +} + +.prose-markdown hr { + border: none; + border-top: 1px solid #222; + margin: 1em 0; +} + +.prose-markdown > table { + width: 100%; + border-collapse: collapse; + margin: 0.75em 0; +} + +.prose-markdown > table th, +.prose-markdown > table td { + border: 1px solid #333; + padding: 0.4em 0.75em; + text-align: left; + font-size: 13px; +} + +.prose-markdown > table th { + background: #1a1a1a; + color: #ccc; + font-weight: 600; +} diff --git a/strix/viewer_src/src/main.tsx b/strix/viewer_src/src/main.tsx new file mode 100644 index 00000000..65dc4ec6 --- /dev/null +++ b/strix/viewer_src/src/main.tsx @@ -0,0 +1,10 @@ +import { StrictMode } from "react"; +import { createRoot } from "react-dom/client"; +import App from "./App"; +import "./index.css"; + +createRoot(document.getElementById("root")!).render( + + + +); diff --git a/strix/viewer_src/src/stores/auth.ts b/strix/viewer_src/src/stores/auth.ts new file mode 100644 index 00000000..74c9a833 --- /dev/null +++ b/strix/viewer_src/src/stores/auth.ts @@ -0,0 +1,16 @@ +// Local stub of the strix-app auth store. The local viewer has no accounts: +// there is never a signed-in user and no feature is entitled, so every upsell +// CTA routes to the external cloud sign-up link. +interface AuthState { + user: null; + hasFeature: (feature: string) => boolean; +} + +const STATE: AuthState = { + user: null, + hasFeature: () => false, +}; + +export function useAuthStore(selector: (s: AuthState) => T): T { + return selector(STATE); +} diff --git a/strix/viewer_src/src/types/events.ts b/strix/viewer_src/src/types/events.ts new file mode 100644 index 00000000..188df74e --- /dev/null +++ b/strix/viewer_src/src/types/events.ts @@ -0,0 +1,102 @@ +// Types matching the Python tracer's event shapes stored in Convex + +export type EventType = + | "run.started" + | "run.configured" + | "run.completed" + | "agent.created" + | "agent.status.updated" + | "tool.execution.started" + | "tool.execution.updated" + | "chat.message" + | "finding.created" + | "finding.reviewed" + | "traffic.batch"; + +export interface EventActor { + agent_id?: string; + agent_name?: string; + tool_name?: string; + execution_id?: number; + role?: string; +} + +export interface ConvexEvent { + _id: string; + _creationTime: number; + timestamp: string; + event_type: EventType; + run_id: string; + trace_id?: string | null; + span_id?: string | null; + parent_span_id?: string | null; + actor: EventActor | null; + payload: Record | null; + status: string | null; + error: unknown | null; + source?: string; + run_metadata?: RunMetadata; +} + +export interface RunMetadata { + run_id: string; + run_name: string | null; + start_time: string; + end_time: string | null; + targets: string[]; + status: string; + user_instructions?: string; + max_iterations?: number; +} + +export interface AgentNode { + id: string; + name: string; + task: string; + status: "running" | "completed" | "failed" | "error"; + parentId: string | null; + children: string[]; + createdAt: string; + toolCount: number; + messageCount: number; +} + +export interface ToolExecution { + executionId: number; + agentId: string; + toolName: string; + args: Record; + result: unknown; + status: "running" | "completed" | "failed" | "error"; + startedAt: string; + completedAt: string | null; +} + +export interface ChatMessage { + messageId: number; + agentId: string | null; + role: string; + content: string; + timestamp: string; + metadata: Record; +} + +export interface Finding { + id: string; + title: string; + severity: "critical" | "high" | "medium" | "low"; + description?: string; + target?: string; + endpoint?: string; + method?: string; + cvss?: number; + cve?: string; + timestamp: string; +} + +export interface ToolRendererProps { + toolName: string; + args: Record; + result: unknown; + status: "running" | "completed" | "failed" | "error"; +} diff --git a/strix/viewer_src/src/types/issues.ts b/strix/viewer_src/src/types/issues.ts new file mode 100644 index 00000000..3e71620a --- /dev/null +++ b/strix/viewer_src/src/types/issues.ts @@ -0,0 +1,197 @@ +export type VulnerabilitySeverity = "critical" | "high" | "medium" | "low"; +export type VulnerabilityStatus = "open" | "in_progress" | "snoozed" | "fixed" | "ignored"; +export type FixEffort = "trivial" | "low" | "medium" | "high"; + +export const ACTIVE_STATUSES: VulnerabilityStatus[] = ["open", "in_progress", "snoozed"]; +export const RESOLVED_STATUSES: VulnerabilityStatus[] = ["fixed", "ignored"]; + +// Statuses worth retesting in a "retest all" โ€” everything except ignored +// (fixed issues are still re-verified; ignored issues are intentionally skipped). +export const RETESTABLE_STATUSES: VulnerabilityStatus[] = ["open", "in_progress", "snoozed", "fixed"]; + +export const ALL_STATUSES: VulnerabilityStatus[] = ["open", "in_progress", "snoozed", "fixed", "ignored"]; + +export interface StatusCounts { + all: number; + open: number; + in_progress: number; + snoozed: number; + fixed: number; + ignored: number; +} + +export interface StatusMeta { + label: string; + color: string; + dotColor: string; + description: string; +} + +export const STATUS_META: Record = { + open: { + label: "Open", + color: "bg-red-500/10 text-red-400 border-red-500/20", + dotColor: "bg-red-500", + description: "Newly discovered, awaiting triage", + }, + in_progress: { + label: "In Progress", + color: "bg-blue-500/10 text-blue-400 border-blue-500/20", + dotColor: "bg-blue-500", + description: "Someone is working on this", + }, + snoozed: { + label: "Snoozed", + color: "bg-purple-500/10 text-purple-400 border-purple-500/20", + dotColor: "bg-purple-500", + description: "Temporarily hidden until a follow-up date", + }, + fixed: { + label: "Fixed", + color: "bg-emerald-500/10 text-emerald-400 border-emerald-500/20", + dotColor: "bg-emerald-500", + description: "This vulnerability has been fixed", + }, + ignored: { + label: "Ignored", + color: "bg-gray-500/10 text-gray-400 border-gray-500/20", + dotColor: "bg-gray-500", + description: "Acknowledged but accepted", + }, +}; + +export const FIX_EFFORT_META: Record = { + trivial: { label: "Trivial", color: "bg-emerald-500/10 text-emerald-400 border-emerald-500/20" }, + low: { label: "Low", color: "bg-blue-500/10 text-blue-400 border-blue-500/20" }, + medium: { label: "Medium", color: "bg-yellow-500/10 text-yellow-400 border-yellow-500/20" }, + high: { label: "High", color: "bg-orange-500/10 text-orange-400 border-orange-500/20" }, +}; + +export interface CodeLocation { + file: string; + start_line: number; + end_line?: number; + snippet?: string; + label?: string; + fix_before?: string; + fix_after?: string; +} + +export interface CVSSBreakdown { + attack_vector: string | null; + attack_complexity: string | null; + privileges_required: string | null; + user_interaction: string | null; + scope: string | null; + confidentiality: string | null; + integrity: string | null; + availability: string | null; +} + +export interface Vulnerability { + id: string; + scan_id: string | null; + pr_review_id: string | null; + title: string; + description: string; + cve: string | null; + cvss: number | null; + created_at: string; + potential_risk_saving: number | null; + risk_saving_description: string | null; + status: VulnerabilityStatus; + severity: VulnerabilitySeverity; + impact: string | null; + endpoint: string | null; + method: string | null; + target: string | null; + technical_analysis: string | null; + poc_description: string | null; + poc_script_code: string | null; + code_diff: string | null; + code_file: string | null; + code_before: string | null; + code_after: string | null; + cwe: string[] | null; + code_locations: CodeLocation[] | null; + remediation_steps: string | null; + fix_pr_body: string | null; + evidence: string | null; + assumptions: string | null; + fix_effort: FixEffort | null; + cvss_breakdown: CVSSBreakdown | null; + status_changed_at: string | null; + status_changed_by: string | null; + status_note: string | null; + snoozed_until: string | null; + reopened_at: string | null; + reopened_by: string | null; + original_severity: VulnerabilitySeverity | null; + severity_changed_at: string | null; + severity_changed_by: string | null; + severity_override_reason: string | null; + retest_of_vulnerability_id: string | null; + slack_thread_url?: string; + display_number?: number | null; + location_meta?: { + branch: string; + provider: string; + repo_url: string; + } | null; + fix_pr_eligible?: boolean; + fix_pr_reason?: string | null; + fix_pr_url?: string | null; +} + +export interface VulnerabilityFilters { + scan_id?: string; + severity?: VulnerabilitySeverity; + status?: VulnerabilityStatus; + search?: string; + sortBy?: "cvss" | "created_at"; + sortOrder?: "asc" | "desc"; + domain_id?: string; + repository_id?: string; +} + +export interface VulnerabilityAction { + type: "status_change" | "generate_report" | "create_ticket"; + notes?: string; + verification?: string; + reason?: string; + explanation?: string; + report_type?: string; + system?: string; + priority?: string; + assignee?: string; + timestamp: string; +} + +export const SEVERITY_COLORS: Record = { + critical: "bg-red-500/20 text-red-500 border-red-500/30", + high: "bg-orange-500/20 text-orange-500 border-orange-500/30", + medium: "bg-yellow-500/20 text-yellow-500 border-yellow-500/30", + low: "bg-blue-500/20 text-blue-500 border-blue-500/30", +}; + +export const STATUS_COLORS: Record = { + open: STATUS_META.open.color, + in_progress: STATUS_META.in_progress.color, + snoozed: STATUS_META.snoozed.color, + fixed: STATUS_META.fixed.color, + ignored: STATUS_META.ignored.color, +}; + +export function isSeverityOverridden( + v: Pick +): boolean { + return v.original_severity != null && v.original_severity !== v.severity; +} + +export function formatCvssLabel(cvss: number | null): string { + if (cvss === null) return "N/A"; + if (cvss >= 9.0) return "Critical"; + if (cvss >= 7.0) return "High"; + if (cvss >= 4.0) return "Medium"; + return "Low"; +} diff --git a/strix/viewer_src/tsconfig.json b/strix/viewer_src/tsconfig.json new file mode 100644 index 00000000..fcc6274f --- /dev/null +++ b/strix/viewer_src/tsconfig.json @@ -0,0 +1,25 @@ +{ + "compilerOptions": { + "target": "ES2022", + "useDefineForClassFields": true, + "lib": ["ES2022", "DOM", "DOM.Iterable"], + "module": "ESNext", + "skipLibCheck": true, + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "resolveJsonModule": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + "jsx": "react-jsx", + "strict": true, + "noUnusedLocals": false, + "noUnusedParameters": false, + "noFallthroughCasesInSwitch": true, + "baseUrl": ".", + "paths": { + "@/*": ["./src/*"] + } + }, + "include": ["src"] +} diff --git a/strix/viewer_src/vite.config.ts b/strix/viewer_src/vite.config.ts new file mode 100644 index 00000000..02260488 --- /dev/null +++ b/strix/viewer_src/vite.config.ts @@ -0,0 +1,21 @@ +import { defineConfig } from "vite"; +import react from "@vitejs/plugin-react"; +import tailwindcss from "@tailwindcss/vite"; +import { fileURLToPath, URL } from "node:url"; + +// The viewer is served as static files by a stdlib Python server on an +// arbitrary ephemeral port, so all asset URLs must be relative (base: "./"). +// The build output is committed at strix/viewer/viewer_dist and shipped. +export default defineConfig({ + base: "./", + plugins: [react(), tailwindcss()], + resolve: { + alias: { + "@": fileURLToPath(new URL("./src", import.meta.url)), + }, + }, + build: { + outDir: "../viewer/viewer_dist", + emptyOutDir: true, + }, +}); diff --git a/tests/test_viewer.py b/tests/test_viewer.py new file mode 100644 index 00000000..02cacd74 --- /dev/null +++ b/tests/test_viewer.py @@ -0,0 +1,171 @@ +"""Tests for the local run viewer (strix.viewer) and its path helpers.""" + +from __future__ import annotations + +import json +import os +import urllib.request +from typing import TYPE_CHECKING + +from strix.core.paths import latest_run_dir, runs_base_dir +from strix.viewer.server import serve +from strix.viewer.transcript import ( + build_run_state, + read_report_markdown, + read_run_summary, + read_vulnerabilities, +) + + +if TYPE_CHECKING: + from pathlib import Path + + import pytest + + +def _make_run(base: Path, name: str, *, status: str, end_time: str | None) -> Path: + run_dir = base / "strix_runs" / name + state_dir = run_dir / ".state" + state_dir.mkdir(parents=True) + record = {"run_name": name, "status": status, "end_time": end_time} + (run_dir / "run.json").write_text(json.dumps(record), encoding="utf-8") + agents = { + "statuses": {"root": "completed", "child": "running"}, + "names": {"root": "strix", "child": "recon"}, + "parent_of": {"root": None, "child": "root"}, + } + (state_dir / "agents.json").write_text(json.dumps(agents), encoding="utf-8") + return run_dir + + +def test_latest_run_dir_none_when_no_runs(tmp_path: Path, monkeypatch: pytest.MonkeyPatch) -> None: + monkeypatch.chdir(tmp_path) + assert latest_run_dir() is None + assert runs_base_dir() == tmp_path / "strix_runs" + + +def test_latest_run_dir_picks_newest_by_record_mtime( + tmp_path: Path, monkeypatch: pytest.MonkeyPatch +) -> None: + monkeypatch.chdir(tmp_path) + older = _make_run(tmp_path, "old", status="completed", end_time="2026-01-01T00:00:00Z") + newer = _make_run(tmp_path, "new", status="running", end_time=None) + # Force a newer mtime on the second run's record. + os.utime(newer / "run.json", (2_000_000_000, 2_000_000_000)) + os.utime(older / "run.json", (1_000_000_000, 1_000_000_000)) + assert latest_run_dir() == newer + + +def test_read_run_summary_finished_flag(tmp_path: Path) -> None: + finished = _make_run(tmp_path, "done", status="completed", end_time="2026-01-01T00:00:00Z") + live = _make_run(tmp_path, "live", status="running", end_time=None) + assert read_run_summary(finished)["finished"] is True + assert read_run_summary(live)["finished"] is False + # A terminal status without an end_time is not "finished". + partial = _make_run(tmp_path, "partial", status="failed", end_time=None) + assert read_run_summary(partial)["finished"] is False + + +def test_read_missing_artifacts_return_defaults(tmp_path: Path) -> None: + run_dir = _make_run(tmp_path, "empty", status="running", end_time=None) + assert read_vulnerabilities(run_dir) == [] + assert read_report_markdown(run_dir) == "" + + +def test_build_run_state_from_agents_json(tmp_path: Path) -> None: + run_dir = _make_run(tmp_path, "graph", status="running", end_time=None) + state = build_run_state(run_dir) + ids = {a["id"] for a in state["agents"]} + assert ids == {"root", "child"} + child = next(a for a in state["agents"] if a["id"] == "child") + assert child["parent_id"] == "root" + assert child["name"] == "recon" + # No agents.db, so no message/tool events. + assert state["events"] == [] + + +def _get(url: str) -> tuple[int, str, bytes]: + with urllib.request.urlopen(url) as resp: # noqa: S310 - localhost test server + return resp.status, resp.headers.get("Content-Type", ""), resp.read() + + +def test_server_serves_api_and_static( + tmp_path: Path, monkeypatch: pytest.MonkeyPatch +) -> None: + run_dir = _make_run(tmp_path, "served", status="completed", end_time="2026-01-01T00:00:00Z") + + assets = tmp_path / "bundle" + (assets / "assets").mkdir(parents=True) + (assets / "index.html").write_text("
", encoding="utf-8") + (assets / "assets" / "app.js").write_text("console.log(1)", encoding="utf-8") + monkeypatch.setattr("strix.viewer.server.bundle_dir", lambda: assets) + + httpd, url = serve(run_dir, open_browser=False) + try: + status, ctype, body = _get(f"{url}/api/run") + assert status == 200 + assert "application/json" in ctype + assert json.loads(body)["finished"] is True + + status, _, body = _get(f"{url}/api/transcript") + assert {a["id"] for a in json.loads(body)["agents"]} == {"root", "child"} + + # Real asset is served. + status, ctype, _ = _get(f"{url}/assets/app.js") + assert status == 200 + + # Unknown non-API route falls back to index.html (SPA routing). + status, ctype, body = _get(f"{url}/agents/root") + assert status == 200 + assert b"
" in body + finally: + httpd.shutdown() + httpd.server_close() + + +def test_server_event_endpoint_forwards_cta( + tmp_path: Path, monkeypatch: pytest.MonkeyPatch +) -> None: + run_dir = _make_run(tmp_path, "evt", status="running", end_time=None) + assets = tmp_path / "bundle" + assets.mkdir() + (assets / "index.html").write_text("x", encoding="utf-8") + monkeypatch.setattr("strix.viewer.server.bundle_dir", lambda: assets) + + seen: list[str] = [] + monkeypatch.setattr("strix.telemetry.posthog.viewer_cta_clicked", seen.append) + + httpd, url = serve(run_dir, open_browser=False) + try: + body = json.dumps({"event": "cta_clicked", "cta": "PR reviews"}).encode() + req = urllib.request.Request( # noqa: S310 - localhost test server + f"{url}/api/event", data=body, headers={"Content-Type": "application/json"} + ) + with urllib.request.urlopen(req) as resp: # noqa: S310 + assert resp.status == 204 + assert seen == ["PR reviews"] + finally: + httpd.shutdown() + httpd.server_close() + + +def test_server_rejects_path_traversal( + tmp_path: Path, monkeypatch: pytest.MonkeyPatch +) -> None: + run_dir = _make_run(tmp_path, "guard", status="completed", end_time="2026-01-01T00:00:00Z") + secret = tmp_path / "secret.txt" + secret.write_text("top secret", encoding="utf-8") + + assets = tmp_path / "bundle" + assets.mkdir() + (assets / "index.html").write_text("index", encoding="utf-8") + monkeypatch.setattr("strix.viewer.server.bundle_dir", lambda: assets) + + httpd, url = serve(run_dir, open_browser=False) + try: + # A traversal target must never leak the file; it falls back to index.html. + _, _, body = _get(f"{url}/..%2f..%2fsecret.txt") + assert b"top secret" not in body + finally: + httpd.shutdown() + httpd.server_close()