diff --git a/AGENTS.md b/AGENTS.md index de2eac86..b347278b 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -15,6 +15,14 @@ npx skills add usestrix/strix - `fix-security-vulnerabilities-with-strix` — remediate findings and re-run Strix to verify - `ci-security-scanning-with-strix` — add PR scanning to CI/CD (self-hosted CLI or managed app) +Target-specific workflows built on the same engine: + +- `application-security-testing` — whole-product AppSec review: pick the right test per asset, then rank the results +- `web-app-penetration-testing` — black-box pentest of a live web app or staging site +- `api-security-testing` — REST/GraphQL APIs and the OWASP API Security Top 10 (BOLA/IDOR, authz) +- `owasp-top-10-testing` — systematic OWASP Top 10 assessment with honest per-category coverage +- `find-security-vulnerabilities-in-code` — white-box review of a repo or working tree + **Two ways to run, same engine — pick per situation:** - **Open-source CLI (self-hosted):** free, fully local, BYO LLM key, needs Docker. Best for local dev loops, air-gapped/offline, and full control. diff --git a/README.md b/README.md index 230fce35..99c235af 100644 --- a/README.md +++ b/README.md @@ -116,7 +116,7 @@ Strix is agent-ready. Give Claude Code, Cursor, Codex, or any [SKILL.md-compatib npx skills add usestrix/strix ``` -This installs four skills: **penetration-testing-with-strix** (run headless scans and read results), **managed-pentesting-with-strix** (drive the managed [app.strix.ai](https://app.strix.ai) platform via REST — no local Docker or LLM key), **fix-security-vulnerabilities-with-strix** (remediate + re-scan to verify), and **ci-security-scanning-with-strix** (PR scanning in CI). Agents can run Strix two ways with the same engine — the open-source CLI locally, or the managed cloud when there's no local infra — and read [`AGENTS.md`](AGENTS.md) for a quick reference, [docs.strix.ai/llms.txt](https://docs.strix.ai/llms.txt) for the CLI docs, and [docs.app.strix.ai](https://docs.app.strix.ai) for the API. +This installs nine skills: **penetration-testing-with-strix** (run headless scans and read results), **managed-pentesting-with-strix** (drive the managed [app.strix.ai](https://app.strix.ai) platform via REST — no local Docker or LLM key), **fix-security-vulnerabilities-with-strix** (remediate + re-scan to verify), **ci-security-scanning-with-strix** (PR scanning in CI), plus target-specific workflows: **application-security-testing**, **web-app-penetration-testing**, **api-security-testing**, **owasp-top-10-testing**, and **find-security-vulnerabilities-in-code**. Agents can run Strix two ways with the same engine — the open-source CLI locally, or the managed cloud when there's no local infra — and read [`AGENTS.md`](AGENTS.md) for a quick reference, [docs.strix.ai/llms.txt](https://docs.strix.ai/llms.txt) for the CLI docs, and [docs.app.strix.ai](https://docs.app.strix.ai) for the API. --- diff --git a/docs/integrations/coding-agents.mdx b/docs/integrations/coding-agents.mdx index fa2cea63..59e598f1 100644 --- a/docs/integrations/coding-agents.mdx +++ b/docs/integrations/coding-agents.mdx @@ -19,6 +19,11 @@ npx skills add usestrix/strix | `managed-pentesting-with-strix` | Drive the managed [app.strix.ai](https://app.strix.ai) platform over REST — no local Docker or LLM key needed | | `fix-security-vulnerabilities-with-strix` | Triage findings, fix root causes, and re-run Strix to verify each fix | | `ci-security-scanning-with-strix` | Add PR security scanning to GitHub Actions or any CI (self-hosted CLI or managed app) | +| `application-security-testing` | Assess a whole product: choose the right test for each asset, then rank the findings into one remediation plan | +| `web-app-penetration-testing` | Black-box pentest of a live web app or staging site — scope, credentials, and multi-account access-control testing | +| `api-security-testing` | Test a REST/GraphQL API against the OWASP API Security Top 10 — schema-driven enumeration, BOLA/IDOR, authz | +| `owasp-top-10-testing` | Systematic OWASP Top 10 assessment with honest per-category coverage | +| `find-security-vulnerabilities-in-code` | White-box security review of a repo or working tree, with exploits to confirm findings | Install a single skill with `npx skills add usestrix/strix --skill penetration-testing-with-strix`, or use one without installing: diff --git a/pyproject.toml b/pyproject.toml index 16168344..72041a3b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -272,6 +272,10 @@ ignore = [ "strix/tools/thinking/tool.py" = ["TC002"] "strix/tools/web_search/tool.py" = ["TC002"] "strix/tools/proxy/tools.py" = ["TC002", "PLR0911"] +# The generated Caido GraphQL schema is slow to import, so the SDK is imported +# on first proxy call instead of at module scope (keeps it off the launch path). +"strix/tools/proxy/caido_api.py" = ["PLC0415"] +"strix/runtime/caido_bootstrap.py" = ["PLC0415"] "strix/tools/agents_graph/tools.py" = ["TC002"] "strix/agents/factory.py" = ["TC002"] # Entry point: ``Path`` is used at runtime by the typing of the @@ -282,6 +286,13 @@ ignore = [ # a runtime ``Callable`` annotation on ``vulnerability_found_callback``. "strix/report/state.py" = ["TC003", "PLR0912", "PLR0915", "E501", "PERF401", "PLC0415"] "strix/report/usage.py" = ["PLC0415"] +# LiteLLM and the Docker SDK are imported on first use, not at module scope: +# both cost seconds to import and neither is needed until a model call is made +# (or, for Docker, unless the Docker runtime backend is in use). +"strix/core/execution.py" = ["PLC0415"] +"strix/report/pricing.py" = ["PLC0415"] +"strix/llm/compaction.py" = ["PLC0415"] +"strix/llm/context_budget.py" = ["PLC0415"] # Lazy import of strix.config.models avoids a circular dependency between the # report pipeline and the config layer. "strix/report/dedupe.py" = ["PLC0415"] diff --git a/skills/api-security-testing/SKILL.md b/skills/api-security-testing/SKILL.md new file mode 100644 index 00000000..e47d427d --- /dev/null +++ b/skills/api-security-testing/SKILL.md @@ -0,0 +1,61 @@ +--- +name: api-security-testing +description: Security-test a REST, GraphQL, or gRPC API with Strix — autonomous agents that enumerate endpoints from an OpenAPI/GraphQL schema (or by crawling), then actually exploit the API-specific vulnerability classes in the OWASP API Security Top 10 (2023) — broken object-level authorization (BOLA/IDOR), broken object property level authorization (excessive data exposure and mass assignment), broken function-level authorization, unrestricted resource consumption, SSRF, injection, and auth/token flaws. Every finding comes with a working proof-of-concept request. Use when the user asks to pentest, security-test, audit, or find vulnerabilities in an API, endpoint, or backend service. +license: Apache-2.0 +metadata: + author: usestrix + homepage: https://docs.strix.ai +--- + +# Security-test an API + +APIs fail differently from web UIs: there is no rendered surface to crawl, the interesting bugs are authorization-shaped rather than injection-shaped, and the same endpoint behaves differently per token. This workflow targets those specifics with Strix's autonomous agents, using the current [OWASP API Security Top 10 (2023)](https://owasp.org/API-Security/editions/2023/en/0x11-t10/) as the coverage checklist. For the web-app equivalent, the current edition is the OWASP Top 10:2025 — see **owasp-top-10-testing**. + +Install, LLM setup, full CLI flags, and the managed-cloud path are in the **penetration-testing-with-strix** skill. Read it if `strix --version` fails or the target is not an API. + +## 1. Gather what the agents need + +APIs are near-impossible to test blind, so collect first: + +| Input | Why it matters | +|---|---| +| **Schema** — OpenAPI/Swagger file, Postman collection, GraphQL endpoint (introspection), or a gRPC `.proto` | Turns guesswork into full endpoint enumeration. Biggest single win in coverage. An OpenAPI/Swagger or Postman spec (`.json`/`.yaml`/`.yml`) is a target Strix takes directly; a `.proto` is not, so pass it with `--workspace-file`. | +| **Two sets of credentials/tokens**, ideally in different tenants | BOLA/IDOR — API1:2023, still the #1 API risk — can only be *proven* by accessing tenant A's objects with tenant B's token. | +| **A low-privilege and a high-privilege token** | Required to prove broken function-level authorization (API5:2023 — a `user` calling admin-only routes). | +| **Example object IDs** | Lets agents test ID tampering immediately instead of hunting for valid identifiers. | +| **Out-of-scope routes** | Payments, mass notification, destructive admin endpoints. | +| **Rate limits / WAF** in front of the API | Avoids agents burning budget on throttled requests; mention them so testing adapts. | + +Ask the user for anything missing — do not fabricate tokens or scan an API they do not own. + +## 2. Run the scan + +Pass the spec as a **target**, not as prose in the instruction — Strix parses OpenAPI/Swagger (`.json`/`.yaml`) and Postman collection exports directly, so the agents start from the real endpoint list: + +```bash +strix -n -t ./openapi.yaml -t https://api.staging.example.com --max-budget 20 \ + --instruction "Tenant A token: (org 1111, user id 11, order id 501). +Tenant B token: (org 2222, user id 22). +Admin token: . +Focus: BOLA across orgs (API1), function-level authz on /admin/* (API5), object property level authz on PATCH /users/{id} — both mass assignment and over-exposed fields in list responses (API3), unrestricted resource consumption (API4). +Out of scope: POST /billing/*, POST /notifications/broadcast." +``` + +- **Postman instead of OpenAPI:** a collection export works as a target (`-t ./collection.postman_collection.json`), or pull one live with `-t postman://` (optionally `"postman://?env="`), which needs `POSTMAN_API_KEY` in the environment. +- **Many services at once:** put one target per line in a file and pass `--target-list ./targets.txt`, repeatable and combinable with `-t`. +- **Add the backend source for depth:** `-t ./services/api -t https://api.staging.example.com`. With code access the agents can reason about authorization checks and object ownership rather than inferring them from responses. +- **gRPC:** target the endpoint and pass the definition as a workspace file, `-t https://grpc.staging.example.com --workspace-file ./service.proto`. Only `.json`, `.yaml`, and `.yml` specs are recognized as targets, so `-t ./service.proto` fails with "Path exists but is not a directory". +- **GraphQL:** point at the GraphQL endpoint and say whether introspection is enabled; call out that you want batching/aliasing abuse, depth/complexity limits, and per-field authorization tested. +- **Internal/private APIs** unreachable from your machine: use the managed platform's network connector — see **managed-pentesting-with-strix**. +- Use `--instruction-file` when the credential/context block gets long, and keep tokens out of shell history and out of committed files. +- **Supporting files** the agents should read but not test, such as an endpoint wordlist or handwritten notes about the tenancy model: pass `--workspace-file ./notes.md`. The file lands read-only in `/workspace`. Add `:DEST` to choose the path, for example `--workspace-file ./wordlist.txt:lists/wordlist.txt`. + +## 3. Verify findings + +`strix_runs//penetration_test_report.md` first, then `vulnerabilities/*.md` — each contains the exact request that proved the issue. Replay it (for example, with `curl`) before reporting; for authorization findings, confirm the response really contains the other tenant's data rather than an empty 200. + +`findings.sarif` uploads to GitHub code scanning; `vulnerabilities.json` is the structured index for ticketing. + +## 4. Fix, re-test, and keep it tested + +Remediate with **fix-security-vulnerabilities-with-strix** (fix the authorization check, not the single endpoint), then re-run against the same target to prove the exploit is dead. Wire it into pull-request CI with **ci-security-scanning-with-strix** so new endpoints get tested as they ship. diff --git a/skills/application-security-testing/SKILL.md b/skills/application-security-testing/SKILL.md new file mode 100644 index 00000000..78a2f49f --- /dev/null +++ b/skills/application-security-testing/SKILL.md @@ -0,0 +1,66 @@ +--- +name: application-security-testing +description: Application security testing (AppSec) across a whole product with Strix — decide which asset needs which test (source code, running web app, API, CI pipeline), run it, and turn the results into a ranked remediation plan. Autonomous agents exploit and prove each issue instead of emitting static-analysis alerts, so the plan is ordered by what is actually reachable. Use when the user asks for an application security review or audit, an appsec assessment, vulnerability scanning across their stack, a security review before a launch or a customer security questionnaire, or does not yet know which kind of security test they need. +license: Apache-2.0 +metadata: + author: usestrix + homepage: https://docs.strix.ai +--- + +# Application security testing + +Entry point for "make my application secure" requests, where the target is not yet a single URL or repo. The job here is to pick the right test per asset, run it, and produce one ranked plan — not to run everything at maximum depth. + +Install, LLM setup, all CLI flags, and the managed-cloud path live in the **penetration-testing-with-strix** skill. Read it first if `strix --version` fails. + +Only test assets the user owns or is authorized to test. Confirm authorization before the first run, and prefer staging over production, because the agents send real exploit payloads and can change data. + +## 1. Map the assets + +Ask (or read from the repo) and write the answers down before scanning: + +- **Source** — one repo, a monorepo, several services? Which languages/frameworks? +- **Running environments** — is there a staging deployment? A public production site? A local dev server only? +- **APIs** — REST, GraphQL, gRPC? Is there an OpenAPI/GraphQL schema? +- **Authentication** — can you get two test accounts in different tenants? Most high-impact bugs need them. +- **Constraints** — out-of-scope paths, whether production may be touched, budget and wall-clock limits. + +If there is no staging environment and production is off limits, say so early. A code-only review is still valuable, but it cannot prove exploitability against a live app. + +## 2. Pick the right test per asset + +| Asset | Skill to use | +| --- | --- | +| Repository or working tree | **find-security-vulnerabilities-in-code** | +| Live web app or staging site | **web-app-penetration-testing** | +| REST/GraphQL/gRPC API | **api-security-testing** | +| Assessment mapped to OWASP categories | **owasp-top-10-testing** | +| Every pull request, continuously | **ci-security-scanning-with-strix** | +| No Docker, no LLM key, or a report an auditor will accept | **managed-pentesting-with-strix** | + +Those skills carry the flags, credential handling, and result-reading details. Do not duplicate their instructions here. + +Sequence for a first assessment: + +1. Review the code. It is the cheapest run and it maps the authorization model. +2. Pentest staging with credentials, and pass the repo as a second target so the agents keep source context. +3. Add CI scanning, so later regressions are caught without another manual pass. + +Run one asset at a time and read each report before starting the next. Findings from the code review make the live run sharper. + +## 3. Consolidate into one plan + +Findings arrive per run in `strix_runs//`. Merge them into a single list and rank by **proven impact**, not by scanner severity: + +1. Validated exploits reachable without authentication. +2. Validated cross-tenant or privilege-escalation issues. +3. Validated issues needing an authenticated account. +4. Unproven observations (configuration, dependency, and hardening notes) — flag as such, and never present them as confirmed vulnerabilities. + +Deduplicate: the same root cause often surfaces in both the code review and the live pentest. + +## 4. Be honest about coverage + +State plainly what was *not* tested — assets with no staging environment, categories a black-box run cannot reach (logging and alerting, supply-chain integrity, insecure design), and any run that hit its budget or turn cap before finishing. Check `run.json` status and cost against `--max-budget` for each run. An empty result set from a truncated scan is not a clean bill of health. + +Then remediate with **fix-security-vulnerabilities-with-strix**, which re-runs Strix against each fix to prove the exploit no longer works. diff --git a/skills/ci-security-scanning-with-strix/SKILL.md b/skills/ci-security-scanning-with-strix/SKILL.md index 10ed88ba..c53054bb 100644 --- a/skills/ci-security-scanning-with-strix/SKILL.md +++ b/skills/ci-security-scanning-with-strix/SKILL.md @@ -12,7 +12,7 @@ metadata: You can gate PRs two ways — pick based on the environment, or combine them: - **Managed platform (recommended for most teams)** — connect the GitHub/GitLab/Bitbucket app once and Strix reviews every PR with **no workflow file, no runner, no Docker, and no LLM key**. Results post as PR comments and land in the team dashboard. Best when you want zero CI maintenance, central tracking, or your runners lack Docker. See "Managed platform" below and the **managed-pentesting-with-strix** skill. -- **Self-hosted OSS CLI in your runner** — run a diff-scoped scan as a pipeline step. Fully in your infra, free (BYO LLM key), no external account. Requires Docker on the runner. Best for air-gapped/self-hosted CI or when you don't want scans leaving your environment. +- **Self-hosted OSS CLI in your runner** — run a diff-scoped scan as a pipeline step. Fully in your infra, free (BYO LLM key), no external account. Requires Docker on the runner. Best for air-gapped/self-hosted CI or when you do not want scans leaving your environment. Both fail the build on validated findings and both emit SARIF 2.1.0, so you can start with one and add the other later. @@ -63,13 +63,13 @@ jobs: fi ``` -Then tell the user to add two repository secrets: `STRIX_LLM` (model id, e.g. `openai/gpt-5.4`) and `LLM_API_KEY` (the provider key). Do not create these values yourself. +Then tell the user to add two repository secrets: `STRIX_LLM` (model id, for example `openai/gpt-5.4`) and `LLM_API_KEY` (the provider key). Do not create these values yourself. Notes: - In CI/headless runs Strix automatically scopes to the PR's changed files (`--scope-mode auto`). If diff resolution fails, keep `fetch-depth: 0` or set `--diff-base` to the PR's actual base branch — use `origin/${{ github.base_ref }}` in GitHub Actions rather than a hard-coded `origin/main`, since repos use different default branches. - Exit codes: `0` pass, `2` vulnerabilities found (fails the job), `1` setup error. - The runner needs Docker (default GitHub-hosted Ubuntu runners have it). -- **Size the budget so the scan completes — don't let it fail open.** A `0` exit means "no validated vulnerabilities in what was analyzed"; if `--max-budget` is hit before the diff is fully covered, the scan wraps up early and can still exit `0`. The "Fail unless the scan completed" step above narrows the gap: `strix_runs//run.json` is `"stopped"` when the scan was cut off at the hard budget limit without a final report. It is not a complete guard — the agents get graduated wrap-up warnings before that limit, and a run that wraps up on a warning still calls `finish_scan` and records `"completed"` with partial coverage. So keep that step in any pipeline that gates merges **and** give the scan real headroom (compare `run.json`'s `llm_usage.cost` against `--max-budget`; if it ran right up to the cap, raise it). For a `quick` diff-scoped PR scan `--max-budget 10` is usually ample, raise it for large diffs. +- **Size the budget so the scan completes — do not let it fail open.** A `0` exit means "no validated vulnerabilities in what was analyzed"; if `--max-budget` is hit before the diff is fully covered, the scan wraps up early and can still exit `0`. The "Fail unless the scan completed" step above narrows the gap: `strix_runs//run.json` is `"stopped"` when the scan was cut off at the hard budget limit without a final report. It is not a complete guard — the agents get graduated wrap-up warnings before that limit, and a run that wraps up on a warning still calls `finish_scan` and records `"completed"` with partial coverage. So keep that step in any pipeline that gates merges **and** give the scan real headroom (compare `run.json`'s `llm_usage.cost` against `--max-budget`; if it ran right up to the cap, raise it). For a `quick` diff-scoped PR scan `--max-budget 10` is usually ample, raise it for large diffs. ### Optional: upload findings to GitHub code scanning @@ -90,7 +90,7 @@ Any pipeline works the same way — install, set the two env vars, run headless: ```bash curl -sSL https://strix.ai/install | bash # Resolve the PR's base branch robustly (use your CI's base-branch variable if it -# has one, e.g. GitHub Actions: origin/${{ github.base_ref }}). Avoid piping the +# has one, for example GitHub Actions: origin/${{ github.base_ref }}). Avoid piping the # git lookup into another command — a failed lookup would otherwise be masked. BASE_BRANCH="${CI_MERGE_REQUEST_TARGET_BRANCH_NAME:-}" # GitLab MR target if [ -z "$BASE_BRANCH" ]; then @@ -98,7 +98,7 @@ if [ -z "$BASE_BRANCH" ]; then BASE_BRANCH="${BASE_BRANCH#origin/}" fi DIFF_BASE="origin/${BASE_BRANCH:-main}" -# Fail loudly rather than silently narrowing scope (e.g. to HEAD~1, which on a +# Fail loudly rather than silently narrowing scope (for example, to HEAD~1, which on a # multi-commit branch would scan only the last commit and let earlier ones pass). if ! git rev-parse --verify --quiet "$DIFF_BASE" >/dev/null; then echo "Cannot resolve diff base '$DIFF_BASE'. Fetch the base branch (git fetch origin ) or set --diff-base explicitly." >&2 diff --git a/skills/find-security-vulnerabilities-in-code/SKILL.md b/skills/find-security-vulnerabilities-in-code/SKILL.md new file mode 100644 index 00000000..61667c13 --- /dev/null +++ b/skills/find-security-vulnerabilities-in-code/SKILL.md @@ -0,0 +1,62 @@ +--- +name: find-security-vulnerabilities-in-code +description: Find security vulnerabilities in a codebase or repository with Strix — a white-box AI security review that reads your source, reasons about the actual data flow and authorization model, then exploits what it finds in a live sandbox so every reported issue has a working proof-of-concept instead of a noisy static-analysis alert. Covers injection, XSS, SSRF, broken access control and IDOR, insecure deserialization, secrets in code, unsafe dependencies, and business-logic flaws. Use when the user asks to security-scan, security-review, or audit their code, repo, or pull request for vulnerabilities. +license: Apache-2.0 +metadata: + author: usestrix + homepage: https://docs.strix.ai +--- + +# Find security vulnerabilities in code + +White-box security review with Strix: the agents read the source to build a model of routes, sinks, and authorization checks, then attempt real exploitation. Findings come with a proof-of-concept, so the output is a short list of proven issues rather than the hundreds of "potential" hits a pattern-matching scanner produces. + +Install, LLM setup, all flags, and the managed-cloud path are in the **penetration-testing-with-strix** skill. + +## Run it + +```bash +# Local working tree +strix -n -t ./ --scan-mode standard --max-budget 15 + +# A GitHub repo directly +strix -n -t https://github.com/org/app --max-budget 15 + +# Monorepo: point at the service that matters, not the whole tree +strix -n -t ./services/checkout --max-budget 20 + +# Only what a branch changed (whole-repo review is wasteful on a large repo) +strix -n -t ./ --scope-mode diff --diff-base origin/main --max-budget 10 +``` + +A local path is mounted into the sandbox **writable**, so the agents can modify it. Run against a clean checkout. + +Two things sharply improve results: + +1. **Add a running instance of the app.** `-t ./ -t http://host.docker.internal:3000` lets the agents confirm exploitability against live behavior instead of reasoning about it statically — this is the difference between "this looks unsafe" and a validated finding. If nothing is running, static-only findings should be described as unconfirmed. +2. **Scope the review.** Point at the risky subtree and say what matters: + ```bash + strix -n -t ./services/api --max-budget 15 \ + --instruction "Focus on the authorization layer in src/auth and every route under src/routes/admin. Multi-tenant app: tenant id comes from the JWT. Flag any query that filters by object id without also filtering by tenant." + ``` + Tenancy model, trust boundaries, and which inputs are attacker-controlled are things the agents cannot infer reliably — tell them. + +## Reviewing a pull request instead of the whole repo + +For diff-scoped review of a branch or PR (and blocking merges on findings), use **ci-security-scanning-with-strix** — it covers diff scoping, PR comments, and SARIF upload to GitHub code scanning. The managed platform can also review PRs directly via API (**managed-pentesting-with-strix**). + +## Read the results + +In `strix_runs//`: `penetration_test_report.md` (start here), `vulnerabilities/*.md` (one per finding, with PoC and remediation), `vulnerabilities.json` / `.csv`, `findings.sarif` (upload to code scanning), `run.json`. + +Before reporting to the user, open each finding and check the PoC actually demonstrates impact. Report file and line alongside the exploit so the fix is obvious. + +Exit `0` means nothing exploitable was proven in what was analyzed — not that the codebase is clean. Check `run.json` status and cost against `--max-budget`, and note which paths went unreviewed if the run was capped. + +## Complementary tooling + +This is exploit-validated review, not an exhaustive inventory. Keep a dependency scanner (SCA) and secret scanning in place for complete coverage of known-CVE dependencies and committed credentials; use this for the logic, authorization, and injection bugs those tools structurally cannot find. + +## Fix and verify + +Hand results to **fix-security-vulnerabilities-with-strix**: patch the root cause (the shared authorization helper, not the one route), then re-run Strix to prove the exploit no longer works. diff --git a/skills/fix-security-vulnerabilities-with-strix/SKILL.md b/skills/fix-security-vulnerabilities-with-strix/SKILL.md index 5e3ad0c7..770a22bd 100644 --- a/skills/fix-security-vulnerabilities-with-strix/SKILL.md +++ b/skills/fix-security-vulnerabilities-with-strix/SKILL.md @@ -27,7 +27,7 @@ Order work by severity: critical → high → medium → low. Every Strix findin For each finding: 1. Reproduce it with the PoC from the finding file when feasible. -2. Fix the root cause, not the specific payload (e.g. parameterize all queries, don't blocklist one string; enforce authorization in the handler, don't hide the endpoint). +2. Fix the root cause, not the specific payload (parameterize every query instead of blocking one string, and enforce authorization in the handler instead of hiding the endpoint). 3. Prefer the framework's built-in defense (ORM parameterization, template auto-escaping, CSRF middleware, centralized authz) over ad-hoc sanitization. 4. Keep the diff minimal and apply the repo's existing patterns. Finding files often include `fix_before`/`fix_after` snippets — use them as a starting point, not verbatim. @@ -70,7 +70,7 @@ new_id=$(curl -sS "$BASE/scans/$scan_id/rerun" "${auth[@]}" -X POST | jq -r .sca Or, if the cloud scan came from a repo/PR, trigger a fresh PR review on the fix branch (`POST /pr-reviews/start`). The platform also retests a single finding directly: `POST /api/v1/vulnerabilities/{vulnerabilityId}/retest`. - Also re-run the PoC manually when it is a simple request/script — fastest signal. -- Run the project's own test suite to make sure the fix doesn't break behavior. +- Run the project's own test suite to make sure the fix does not break behavior. ## 4. Report diff --git a/skills/managed-pentesting-with-strix/SKILL.md b/skills/managed-pentesting-with-strix/SKILL.md index f2f01c19..08feeb36 100644 --- a/skills/managed-pentesting-with-strix/SKILL.md +++ b/skills/managed-pentesting-with-strix/SKILL.md @@ -80,7 +80,7 @@ Useful `CreateScanRequest` fields: | `domain_ids` / `repository_ids` / `internal_targets` | targets (at least one) | | `domain_paths` / `repository_branches` | narrow to specific paths / branches | | `credentials` | authenticated scanning, incl. `mfa_method` (`totp`/`email_otp`/…) + `totp_secret` | -| `headers` | extra HTTP headers (e.g. API keys) for the target | +| `headers` | extra HTTP headers (API keys, for example) for the target | | `focus` / `concerns` / `context` | steer the agents | | `upload_ids` | attach uploaded source/docs archives for white-box context | | `notify_on_completion` / `notification_emails` | email when done | @@ -89,7 +89,7 @@ Response is `{ scan_id, title, status }` with `status` = `pending`. ## 3. Poll to completion -`GET /scans/{scanId}` (`scans:read`). Status flow: `pending → running → completed` (or `failed` / `cancelled`). Poll on an interval — scans take minutes to hours; don't block. +`GET /scans/{scanId}` (`scans:read`). Status flow: `pending → running → completed` (or `failed` / `cancelled`). Poll on an interval — scans take minutes to hours. Do not block. ```bash while :; do @@ -143,10 +143,10 @@ List/inspect via `GET /pr-reviews` and `GET /pr-reviews/{id}`. Repo-level PR-rev ## 7. Continuous testing (schedules & webhooks) - **Schedules** (`schedules:write`, Pro plan): create recurring scans and trigger them on demand — the managed equivalent of a cron-driven CLI loop. -- **Webhooks** (`webhooks:write`): subscribe to pentest/vulnerability lifecycle events (e.g. `scan.completed`, `vulnerability.created`) to push results into Slack, ticketing, or your own pipeline instead of polling. +- **Webhooks** (`webhooks:write`): subscribe to pentest/vulnerability lifecycle events such as `scan.completed` and `vulnerability.created` to push results into Slack, ticketing, or your own pipeline instead of polling. See the schedules and webhooks sections at [docs.app.strix.ai](https://docs.app.strix.ai) for payloads. ## Safety -Only scan assets the user's organization owns or is authorized to test. External domain scans require verification (DNS/file/meta-tag) enforced by the platform — don't try to bypass it. +Only scan assets the user's organization owns or is authorized to test. External domain scans require verification (DNS/file/meta-tag) enforced by the platform — do not try to bypass it. diff --git a/skills/owasp-top-10-testing/SKILL.md b/skills/owasp-top-10-testing/SKILL.md new file mode 100644 index 00000000..c8c121be --- /dev/null +++ b/skills/owasp-top-10-testing/SKILL.md @@ -0,0 +1,64 @@ +--- +name: owasp-top-10-testing +description: Test an application against the OWASP Top 10 with Strix — autonomous AI agents that attempt real exploits for each category of the current OWASP Top 10:2025 (broken access control including SSRF, security misconfiguration, software supply chain failures, cryptographic failures, injection, insecure design, authentication failures, integrity failures, logging and alerting failures, mishandling of exceptional conditions) and report only what they could actually prove, mapped back to the category with a proof-of-concept. Also covers the OWASP API Security Top 10 (2023). Use when the user asks for an OWASP Top 10 assessment, OWASP compliance testing, or a security review mapped to OWASP categories. +license: Apache-2.0 +metadata: + author: usestrix + homepage: https://docs.strix.ai +--- + +# Test against the OWASP Top 10 + +The OWASP Top 10 is a taxonomy of risk categories, not a test suite — "OWASP Top 10 testing" means exercising each category against the real application and reporting what's actually exploitable. Strix's agents do the exploitation; this skill covers running it category-by-category and reporting coverage honestly. + +**Use the current edition: [OWASP Top 10:2025](https://owasp.org/Top10/)** (8th installment, superseding 2021). Ask the user before targeting an older edition — some compliance checklists still reference 2021, and a report labelled with the wrong edition is misleading. Key differences from 2021: **SSRF is folded into A01**, **A03 Software Supply Chain Failures** expands the old "Vulnerable and Outdated Components", and **A10 Mishandling of Exceptional Conditions** is new; A02 Security Misconfiguration moved 5→2. + +Install, LLM setup, and the managed-cloud alternative: **penetration-testing-with-strix**. + +## What is and is not testable by an agent + +Be straight with the user about this — claiming a clean sweep of all ten is misleading. + +| Category (2025) | Coverage | +|---|---| +| A01 Broken Access Control (incl. SSRF) | **Strong** — cross-user/tenant access, privilege escalation, IDOR, and SSRF (including blind, via out-of-band callbacks) are all exploit-validated. Needs two accounts plus a privileged one to prove the authorization half. | +| A02 Security Misconfiguration | **Strong** — debug endpoints, verbose errors, permissive CORS, missing hardening, default credentials, exposed admin surfaces. | +| A03 Software Supply Chain Failures | **Partial** — version fingerprinting, and vulnerable/outdated dependency review when source is supplied. Build-system and distribution-infrastructure compromise (the broader half of this category) is out of scope for a runtime scan — pair with SCA plus build-provenance controls. | +| A04 Cryptographic Failures | **Partial** — transport config, unencrypted data in transit, secrets and tokens leaked in responses. At-rest crypto and key management need source or infra review. | +| A05 Injection | **Strong** — SQL/NoSQL/command/template injection and XSS, exploit-validated. | +| A06 Insecure Design | **Partial** — business-logic abuse (price/quantity tampering, workflow skipping, race conditions) is found where reachable; design intent still needs human review and threat modelling. | +| A07 Authentication Failures | **Strong** — auth bypass, weak session/token handling, password-reset and MFA flaws. | +| A08 Software or Data Integrity Failures | **Partial** — insecure deserialization and unsigned-update paths where reachable; CI/CD trust boundaries are not runtime-testable. | +| A09 Security Logging & Alerting Failures | **Not testable from outside** — requires reviewing the logging and alerting pipeline. State this rather than reporting it as passed. | +| A10 Mishandling of Exceptional Conditions | **Partial** — agents actively probe error handling and fail-open behavior (malformed input, forced errors, race and timeout conditions) and report what leaks or bypasses a control; exhaustive coverage of internal error paths needs source review. | + +For APIs, run the same exercise against the **OWASP API Security Top 10 (2023)** — API1 BOLA, API3 Broken Object Property Level Authorization (2019's excessive data exposure + mass assignment merged), API5 broken function-level authorization — using the **api-security-testing** skill. + +## Run it + +Maximum category coverage comes from giving the agents both the source and a running instance, plus credentials at two privilege levels: + +```bash +strix -n \ + -t https://github.com/org/app \ + -t https://staging.example.com \ + --scan-mode deep --max-budget 30 \ + --instruction "OWASP Top 10:2025 assessment. Cover every category systematically and map each finding to its 2025 category id. +Accounts: userA@example.com/ (org 1), userB@example.com/ (org 2), admin@example.com/. +Prioritise A01 (cross-org access, privilege escalation, SSRF), A02, A05, A07, A10. +Out of scope: /billing/*, outbound email." +``` + +- `--scan-mode deep` matters here: systematically walking ten categories is not a quick scan. +- Without a second account, A01 results are structurally incomplete — say so in the report rather than leaving it implied. +- Need an auditor-facing PDF? Run it through the managed platform and pull the technical report (**managed-pentesting-with-strix**). + +## Report honestly + +From `strix_runs//`, group `vulnerabilities/*.md` by category and state, per category: what was attempted, what was proven, and what could not be assessed (A09 always; A03/A04/A06/A08/A10 partially). Label the report with the edition used. Verify each PoC yourself before it goes in front of the user. + +A `0` exit code means nothing exploitable was proven **in what was analyzed** — check `run.json` status and cost against `--max-budget`; a budget-capped run is not a completed assessment. + +## Then fix and re-test + +Remediate with **fix-security-vulnerabilities-with-strix** and re-run to prove each exploit is closed. For ongoing coverage as the app changes, gate pull requests using **ci-security-scanning-with-strix**. diff --git a/skills/penetration-testing-with-strix/SKILL.md b/skills/penetration-testing-with-strix/SKILL.md index 1745753e..1364ad8d 100644 --- a/skills/penetration-testing-with-strix/SKILL.md +++ b/skills/penetration-testing-with-strix/SKILL.md @@ -14,14 +14,14 @@ Strix runs autonomous AI pentesting agents that dynamically exploit a target and - **Open-source CLI** (self-hosted) — runs on your machine in a Docker sandbox with your own LLM key. Free, fully local, BYO-LLM, air-gap capable. Docs: [docs.strix.ai](https://docs.strix.ai). - **Cloud API** (managed) — runs on Strix's infrastructure via `https://app.strix.ai/api/v1`. No Docker, no LLM key, no local compute; adds team dashboards, scheduling, PR reviews, downloadable PDF/DOCX reports (Enterprise plan), and internal-network connectors. Docs: [docs.app.strix.ai](https://docs.app.strix.ai). Full workflow in the **managed-pentesting-with-strix** skill. -## Which one? (decide, don't default) +## Which one? (decide, do not default) Choose honestly based on the situation — neither is "better": | Situation | Prefer | |---|---| | No Docker available, or a sandboxed/hosted agent/CI environment | **Cloud** | -| User has no LLM key / doesn't want to pay per-token or manage models | **Cloud** | +| User has no LLM key / does not want to pay per-token or manage models | **Cloud** | | Team visibility, shareable dashboard, scheduled/continuous scans, PR reviews, downloadable PDF/DOCX report (Enterprise) | **Cloud** | | Scanning internal/private infrastructure not reachable from your machine | **Cloud** (network connector) | | Source must never leave local infra (privacy/air-gap), or fully offline | **OSS CLI** | @@ -30,7 +30,7 @@ Choose honestly based on the situation — neither is "better": | CI: runner already has Docker and you want a self-contained gate | **OSS CLI** | | CI: no Docker, or you want results tracked centrally | **Cloud** | -**Mix them:** e.g. use the OSS CLI for the fast local dev-loop while writing/fixing code, and the Cloud for the authoritative, team-visible scan + report + tracking; or gate PRs with the OSS CLI in CI while the Cloud runs scheduled deep scans and PR reviews across the org. Both emit the same SARIF 2.1.0, so findings line up across environments. +**Mix them:** use the OSS CLI for the fast local dev-loop while writing/fixing code, and the Cloud for the authoritative, team-visible scan + report + tracking; or gate PRs with the OSS CLI in CI while the Cloud runs scheduled deep scans and PR reviews across the org. Both emit the same SARIF 2.1.0, so findings line up across environments. If unsure and the user has (or will create) an app.strix.ai account, prefer **Cloud** — it avoids all local-infra friction. If they want zero signup / full local control, use the **OSS CLI**. @@ -70,21 +70,33 @@ strix -n -t https://github.com/org/app -t https://staging.example.com strix -n -t https://app.example.com \ --instruction "Use credentials user@example.com:pass123. Focus on IDOR and auth bypass." -# Large monorepo: bind-mount instead of copying -strix -n --mount ./huge-monorepo +# API spec as a first-class target (OpenAPI/Swagger or a Postman collection export) +strix -n -t ./openapi.yaml -t https://api.staging.example.com + +# Many targets from a file, one per line +strix -n --target-list ./targets.txt --max-budget 30 + +# Give the agents a file to work with (wordlist, spec, notes) without making it a target +strix -n -t https://staging.example.com --workspace-file ./wordlist.txt --max-budget 20 ``` +A local path passed with `-t` is mounted into the sandbox **writable** — the agents can read and modify it, so point at a clean checkout, not uncommitted work you care about. + Key flags: | Flag | Meaning | |---|---| -| `-t, --target` | URL, repo URL, local path, domain, or IP. Repeatable. | +| `-t, --target` | URL, repo URL, local path, domain, IP, OpenAPI/Postman spec, or `postman://`. Repeatable. | +| `--target-list PATH` | File of targets, one per line (`#` comments allowed). Repeatable, combines with `-t`. | | `-n, --non-interactive` | Headless, exits on completion. Required for agents. | | `-m, --scan-mode` | `quick` (minutes) / `standard` (~30 min) / `deep` (hours, default). | | `--instruction` / `--instruction-file` | Credentials, focus areas, scope rules. | +| `--workspace-file PATH[:DEST]` | Place a file from this machine into `/workspace` read-only before the scan, for a wordlist, a spec, or notes. Repeatable. | | `--max-budget USD` | Hard LLM spend cap; scan wraps up cleanly at the limit. | | `--max-turns N` | Per-agent turn cap (default 500). | -| `--resume RUN_NAME` | Resume a prior run from `strix_runs/`. | +| `--resume RUN_NAME` | Resume a prior run from `strix_runs/`, with its agent history and targets. Cannot be combined with `-t`. | +| `--scope-mode` | For code targets: `auto` (diff-scope in CI/headless), `diff` (force changed files only), `full` (whole tree). | +| `--diff-base REF` | Branch or commit that `diff` scope compares against. Defaults to the repo's default branch. | Scans take minutes (`quick`) to hours (`deep`). Run them in the background and poll for completion rather than blocking. @@ -130,7 +142,7 @@ curl -sS "$BASE/scans/$scan_id" -H "Authorization: Bearer $STRIX_API_TOKEN" | jq curl -sS "$BASE/scans/$scan_id/sarif" -H "Authorization: Bearer $STRIX_API_TOKEN" -o findings.sarif ``` -Ask the user to create the token (and register the target as a domain/repository asset) if they haven't. If Docker/local prerequisites aren't already satisfied, use this path instead of trying to install infra. +Ask the user to create the token (and register the target as a domain/repository asset) if they have not. If Docker/local prerequisites are not already satisfied, use this path instead of trying to install infra. --- diff --git a/skills/web-app-penetration-testing/SKILL.md b/skills/web-app-penetration-testing/SKILL.md new file mode 100644 index 00000000..9694a3de --- /dev/null +++ b/skills/web-app-penetration-testing/SKILL.md @@ -0,0 +1,54 @@ +--- +name: web-app-penetration-testing +description: Pentest a web app or website end to end — black-box testing of a live URL, staging environment, or local dev server that finds and exploits real vulnerabilities (auth bypass, broken access control, IDOR, injection, XSS, SSRF, business logic) and proves each one with a working proof-of-concept instead of a signature match. Runs with Strix, either the self-hosted open-source CLI or the managed app.strix.ai cloud. Use when the user asks to pentest, hack, security-test, or audit their web app, website, web application, or staging site. +license: Apache-2.0 +metadata: + author: usestrix + homepage: https://docs.strix.ai +--- + +# Pentest a web application + +Black-box (and optionally source-assisted) penetration testing of a running web app with Strix's autonomous agents. Every reported finding is validated with a working exploit, so there are no signature-based false positives to triage. + +Install, LLM setup, all CLI flags, and the managed-cloud alternative are covered in the **penetration-testing-with-strix** skill — read it if the target is not a running web app, or if `strix --version` fails. This skill is the web-app-specific workflow. + +## 1. Confirm authorization and scope + +Before running anything, establish: + +- **The target is the user's** (or they are explicitly authorized to test it). Never pentest a third-party site on a hunch. +- **Which environment.** Prefer staging over production; agents send real exploit payloads and will create/modify data. +- **Out-of-scope paths** — payment flows, mass-email endpoints, admin destructive actions, third-party SSO providers. +- **Credentials.** Most real vulnerabilities live behind login. Without a test account, the agents only ever see the marketing surface. + +Ask for anything missing rather than guessing. + +## 2. Run the scan + +```bash +strix -n -t https://staging.example.com --max-budget 20 \ + --instruction "Test account: qa@example.com / . In scope: /app/*, /api/*. Do not touch /billing or send email. Focus on access control between the two seeded orgs." +``` + +Notes that matter for web apps specifically: + +- **Give it credentials via `--instruction`** (or `--instruction-file` for anything long), including how to log in if the flow is unusual (magic link, SSO, MFA-exempt test user). +- **Two accounts beat one.** Multi-tenant IDOR and broken-access-control bugs — consistently the highest-impact class in web apps — can only be proven when the agent can attempt cross-account access. +- **Add the repo for white-box depth** when you have the source: `-t https://github.com/org/app -t https://staging.example.com` (or a local path). Source access materially improves coverage of business-logic and authorization flaws. +- **Localhost works.** Point at `http://host.docker.internal:3000` (Docker Desktop) so the sandbox can reach a dev server on the host. +- `--scan-mode quick` for a fast dev-loop pass, `standard` (~30 min) for a normal review, `deep` for pre-release assurance. Always set `--max-budget`. + +For a hosted run with no Docker/LLM key, or when the user wants a shareable dashboard and an auditor-ready PDF, use the cloud path in **managed-pentesting-with-strix** instead — same engine, same findings. + +## 3. Review results + +Read `strix_runs//penetration_test_report.md` first, then per-finding files in `vulnerabilities/`. Each contains the PoC — re-run it yourself to confirm before reporting to the user. + +Exit codes: `0` no validated vulns in what was analyzed, `2` vulnerabilities found, `1` fatal error. A `0` is not proof of full coverage — if the budget or turn cap was hit the scan wraps up early, so check `run.json` status and cost against `--max-budget` before calling the app clean. + +## 4. Fix and verify + +Hand findings to the **fix-security-vulnerabilities-with-strix** skill: patch the root cause, then re-run Strix against the same target to prove the exploit no longer works. Re-testing is the only reliable confirmation a fix landed. + +To keep the app tested on every change rather than once, wire Strix into CI with **ci-security-scanning-with-strix**. diff --git a/strix/agents/factory.py b/strix/agents/factory.py index 9d599a54..3b56a55f 100644 --- a/strix/agents/factory.py +++ b/strix/agents/factory.py @@ -2,6 +2,7 @@ from __future__ import annotations +import dataclasses import inspect import json import logging @@ -25,6 +26,7 @@ from strix.tools.agents_graph.tools import ( view_agent_graph, wait_for_agents, ) +from strix.tools.coverage.tools import list_coverage, record_coverage, update_coverage from strix.tools.finish.tool import finish_scan from strix.tools.load_skill.tool import load_skill from strix.tools.notes.tools import ( @@ -51,6 +53,11 @@ from strix.tools.reporting.tool import ( ) from strix.tools.respond.tool import respond_to_user from strix.tools.thinking.tool import think +from strix.tools.threat_model.tools import ( + amend_threat_model, + get_threat_model, + save_threat_model, +) from strix.tools.todo.tools import ( create_todo, delete_todo, @@ -222,6 +229,17 @@ def _with_coerced_arguments(tool: FunctionTool) -> FunctionTool: return tool +def _with_strictness(tool: FunctionTool, strict_schemas: bool) -> FunctionTool: + """Drop strict JSON-schema mode when the route can't take it (see + ``supports_strict_tool_schemas``); the tool stays functionally identical. + + Returns a copy so the shared tool singletons keep their declared mode. + """ + if strict_schemas or not tool.strict_json_schema: + return tool + return dataclasses.replace(tool, strict_json_schema=False) + + def _function_tool_with_error_result(tool: FunctionTool) -> FunctionTool: invoke_tool = tool.on_invoke_tool @@ -285,24 +303,38 @@ def _bound_custom_tool(tool: CustomTool) -> CustomTool: return tool -def _configure_filesystem_tools(toolset: Any, *, chat_completions: bool) -> None: +def _configure_filesystem_tools( + toolset: Any, *, chat_completions: bool, strict_schemas: bool = True +) -> None: for name, tool in vars(toolset).items(): if chat_completions: if isinstance(tool, CustomTool): setattr(toolset, name, _custom_tool_as_function_tool(tool)) elif isinstance(tool, FunctionTool): setattr( - toolset, name, _function_tool_with_error_result(_with_coerced_arguments(tool)) + toolset, + name, + _function_tool_with_error_result( + _with_strictness(_with_coerced_arguments(tool), strict_schemas) + ), ) elif isinstance(tool, CustomTool): setattr(toolset, name, _bound_custom_tool(tool)) elif isinstance(tool, FunctionTool): - setattr(toolset, name, _with_bounded_result(_with_coerced_arguments(tool))) + setattr( + toolset, + name, + _with_bounded_result( + _with_strictness(_with_coerced_arguments(tool), strict_schemas) + ), + ) -def _make_filesystem_configurator(*, chat_completions: bool) -> Any: +def _make_filesystem_configurator(*, chat_completions: bool, strict_schemas: bool) -> Any: def configure(toolset: Any) -> None: - _configure_filesystem_tools(toolset, chat_completions=chat_completions) + _configure_filesystem_tools( + toolset, chat_completions=chat_completions, strict_schemas=strict_schemas + ) return configure @@ -406,11 +438,13 @@ def _wrap_write_stdin(tool: FunctionTool) -> FunctionTool: return tool -def _configure_shell_tools(toolset: Any, *, chat_completions: bool) -> None: +def _configure_shell_tools( + toolset: Any, *, chat_completions: bool, strict_schemas: bool = True +) -> None: for name, tool in vars(toolset).items(): if not isinstance(tool, FunctionTool): continue - wrapped = _with_coerced_arguments(tool) + wrapped = _with_strictness(_with_coerced_arguments(tool), strict_schemas) if tool.name == "exec_command": wrapped = _wrap_exec_command(wrapped) elif tool.name == "write_stdin": @@ -420,9 +454,11 @@ def _configure_shell_tools(toolset: Any, *, chat_completions: bool) -> None: setattr(toolset, name, wrapped) -def _make_shell_configurator(*, chat_completions: bool) -> Any: +def _make_shell_configurator(*, chat_completions: bool, strict_schemas: bool) -> Any: def configure(toolset: Any) -> None: - _configure_shell_tools(toolset, chat_completions=chat_completions) + _configure_shell_tools( + toolset, chat_completions=chat_completions, strict_schemas=strict_schemas + ) return configure @@ -498,6 +534,12 @@ _BASE_TOOLS: tuple[Tool, ...] = ( get_note, update_note, delete_note, + record_coverage, + update_coverage, + list_coverage, + get_threat_model, + save_threat_model, + amend_threat_model, web_search, create_vulnerability_report, create_dependency_report, @@ -566,8 +608,10 @@ def build_strix_agent( is_root: bool, scan_mode: str = "deep", is_whitebox: bool = False, + is_diff_scoped: bool = False, interactive: bool = False, chat_completions_tools: bool = False, + strict_tool_schemas: bool = True, system_prompt_context: dict[str, Any] | None = None, extra_tools: Sequence[Tool] | None = None, instructions_override: str | None = None, @@ -577,6 +621,8 @@ def build_strix_agent( Args: chat_completions_tools: Wrap SDK custom tools as function tools when the selected backend cannot accept Responses custom tools. + strict_tool_schemas: Send function tools as strict-schema tools. Off + for routes that reject a toolset this size as strict. extra_tools: Additional tools for this scan agent only, on top of any registered via ``register_agent_tools``. instructions_override: Use this verbatim as the system prompt instead @@ -590,6 +636,7 @@ def build_strix_agent( scan_mode=scan_mode, is_whitebox=is_whitebox, is_root=is_root, + is_diff_scoped=is_diff_scoped, interactive=interactive, system_prompt_context=system_prompt_context, ) @@ -604,7 +651,7 @@ def build_strix_agent( tools = [*_BASE_TOOLS, *agent_tools, agent_finish] _ensure_unique_tool_names(tools) tools = [ - _with_bounded_result(_with_coerced_arguments(tool)) + _with_bounded_result(_with_strictness(_with_coerced_arguments(tool), strict_tool_schemas)) if isinstance(tool, FunctionTool) else tool for tool in tools @@ -630,11 +677,13 @@ def build_strix_agent( Filesystem( configure_tools=_make_filesystem_configurator( chat_completions=chat_completions_tools, + strict_schemas=strict_tool_schemas, ), ), Shell( configure_tools=_make_shell_configurator( chat_completions=chat_completions_tools, + strict_schemas=strict_tool_schemas, ), ), ], @@ -645,8 +694,10 @@ def make_child_factory( *, scan_mode: str = "deep", is_whitebox: bool = False, + is_diff_scoped: bool = False, interactive: bool = False, chat_completions_tools: bool = False, + strict_tool_schemas: bool = True, system_prompt_context: dict[str, Any] | None = None, ) -> Any: """Return the runner-owned builder used by ``spawn_child_agent``. @@ -663,8 +714,10 @@ def make_child_factory( is_root=False, scan_mode=scan_mode, is_whitebox=is_whitebox, + is_diff_scoped=is_diff_scoped, interactive=interactive, chat_completions_tools=chat_completions_tools, + strict_tool_schemas=strict_tool_schemas, system_prompt_context=system_prompt_context, ) diff --git a/strix/agents/prompt.py b/strix/agents/prompt.py index 20f10d0f..09e4733b 100644 --- a/strix/agents/prompt.py +++ b/strix/agents/prompt.py @@ -23,30 +23,44 @@ def _resolve_skills( scan_mode: str = "deep", is_whitebox: bool = False, is_root: bool = False, + is_diff_scoped: bool = False, ) -> list[str]: """Build the deduped, ordered skills list for the prompt render. Order: 1. Whatever the caller asked for, in order. - 2. ``scan_modes/`` (always). + 2. ``scan_modes/`` (always), plus ``scan_modes/diff`` when the + run is scoped to a change set — diff scope overlays the depth + mode rather than replacing it. 3. ``tooling/agent_browser`` (always — every agent has shell + the agent-browser CLI). 4. ``tooling/python`` (always — Python runs through ``exec_command``; sandbox scripts can import ``caido_api`` for Caido automation). - 5. ``coordination/root_agent`` for the root agent only — orchestration + 5. ``analysis/counterevidence`` and ``analysis/severity_calibration`` + (always — closure discipline and severity rubric apply to every + agent that can open or close a candidate, or file a report). + 6. ``coordination/root_agent`` for the root agent only — orchestration guidance for delegating to specialist subagents. - 6. Whitebox-specific skills if applicable. + 7. Whitebox-specific skills if applicable, including + ``analysis/fix_verification`` (only whitebox agents can attach an + applyable ``fix_after``) and ``analysis/source_aware_discovery``. """ ordered: list[str] = list(requested or []) ordered.append(f"scan_modes/{scan_mode}") + if is_diff_scoped: + ordered.append("scan_modes/diff") ordered.append("tooling/agent_browser") ordered.append("tooling/python") + ordered.append("analysis/counterevidence") + ordered.append("analysis/severity_calibration") if is_root: ordered.append("coordination/root_agent") if is_whitebox: ordered.append("coordination/source_aware_whitebox") ordered.append("custom/source_aware_sast") + ordered.append("analysis/source_aware_discovery") + ordered.append("analysis/fix_verification") deduped: list[str] = [] seen: set[str] = set() @@ -63,6 +77,7 @@ def render_system_prompt( scan_mode: str = "deep", is_whitebox: bool = False, is_root: bool = False, + is_diff_scoped: bool = False, interactive: bool = False, system_prompt_context: dict[str, Any] | None = None, ) -> str: @@ -83,6 +98,7 @@ def render_system_prompt( scan_mode=scan_mode, is_whitebox=is_whitebox, is_root=is_root, + is_diff_scoped=is_diff_scoped, ) skill_content = load_skills(skills_to_load) env.globals["get_skill"] = lambda name: skill_content.get(name, "") diff --git a/strix/agents/prompts/system_prompt.jinja b/strix/agents/prompts/system_prompt.jinja index 23493d2d..95590394 100644 --- a/strix/agents/prompts/system_prompt.jinja +++ b/strix/agents/prompts/system_prompt.jinja @@ -216,10 +216,31 @@ VALIDATION REQUIREMENTS: - Independent verification through subagent - Document complete attack chain - Keep going until you find something that matters +- CLOSURE DISCIPLINE: every candidate you open ends in exactly one explicit state — `confirmed` (working PoC, or a complete source→control→sink→impact trace that is reachable), `ruled_out` (you can name the SPECIFIC control, at a location, that runs on every attacker-reachable path before the sink), or `open_proof_gap` (plausible, unconfirmed, and you could NOT name such a control). "I moved on" is not a closure state. Silently dropping an uncertain candidate is mislabelling an `open_proof_gap` as `ruled_out` and is how real bugs get missed. +- Missing information is NOT proof of safety: no caller found, can't tell if deployed/exposed, couldn't stand up the service, build failed — each is an `open_proof_gap`, never a reason to mark a candidate clean. Difficulty is a reason to defer, not to suppress. +- COVERAGE: record every surface you assess with `record_coverage` (surface + risk area + outcome + evidence), including the ones that came back clean — a report that only lists findings cannot say what was reviewed and cleared. Use the `needs_follow_up` outcome for anything left in an `open_proof_gap` state, and carry the same items up in `agent_finish(open_items=[...])`. The ledger is shared and mutable: when you resolve a surface another agent left open — or find that a closed one is not — move that entry with `update_coverage` instead of recording a second one for the same surface. The root agent reconciles all of it via `list_coverage` before `finish_scan`. +- THREAT MODEL: before you start testing, call `get_threat_model` on the target you were pointed at — it is the scan's shared answer to who the attacker is, where the trust boundaries sit, and what counts as critical here, and it is cached per target rather than per scan. Read it instead of re-deriving trust boundaries yourself; where your testing disproves it — a boundary it calls trusted turns out to be attacker-reachable, a role it did not know about, a host or endpoint it never listed — record that with `amend_threat_model` so the agents after you inherit the correction. Amending is not optional politeness: a model nobody corrects turns the first agent's guesses into everyone's assumptions. +- Before filing any report, run the counterevidence pass: argue the strongest case AGAINST the finding, record what you found in the `counterevidence` field, set `confidence` honestly (a static-only trace you couldn't execute is at best `medium`), and state what evidence would change the severity. See the counterevidence and severity-calibration knowledge above. - A vulnerability is ONLY considered reported when a reporting agent uses create_vulnerability_report (or create_dependency_report for known-CVE dependency/supply-chain findings) with full details. Mentions in agent_finish, finish_scan, or generic messages are NOT sufficient - Reporting and fixing are ONE step, not two: when source is available, the reporting agent derives the concrete fix and files it INLINE via create_vulnerability_report (`code_locations` with `fix_before`/`fix_after` + `fix_pr_body`) — the report is not complete without it. Do NOT report first and then spawn a separate downstream agent to re-derive and re-apply the same patch; that just re-does the analysis and wastes tokens. (Do not silently patch a finding WITHOUT filing a report — the report, with its embedded fix, is the deliverable.) - DEDUPLICATION: The create_vulnerability_report tool uses LLM-based deduplication. If it rejects your report as a duplicate, DO NOT attempt to re-submit the same vulnerability. Accept the rejection and move on to testing other areas. The vulnerability has already been reported by another agent - REVIEWING FILED FINDINGS (orchestrator/root agent): use list_reports to see every vulnerability filed so far in this scan (by any agent, root or child) — metadata-first with per-severity counts — and get_report to read one finding in full by its id. These are read-only orchestration tools: the root agent uses them to track coverage, avoid dispatching work on already-covered ground, assemble the finish_scan executive summary, and reason about attack-chaining across confirmed findings. Leaf/specialist agents should NOT call them — just do your assigned testing and file findings. Each entry shows which agent filed it (agent_name), and your own entries are flagged by_you. list_notes/get_note do the same for notes. + +STATE & COORDINATION TOOLS (when and how): +Every one of these tools writes to state the rest of the scan reads. Reaching for the tool is not optional bookkeeping — the agent after you sees your state, not your reasoning, so state you never wrote is context the scan permanently loses. +- PLAN — `think`: use before any non-trivial or multi-step move to reason through approach, uncertainty, or what to do next. NOT for acknowledgements, summaries, or as filler before a final answer. +- SKILLS — `load_skill`: the skills matching your task are already inlined below under ``; `` lists the rest by name. When you are about to test a vuln class, protocol, tool, or framework whose skill is not already inlined, `load_skill` it FIRST and follow it, rather than guessing payloads or tool syntax from memory. +- TODOS — `create_todo` / `list_todos` / `update_todo` / `mark_todo_done` / `mark_todo_pending` / `delete_todo`: your own working checklist for a multi-step task. Create todos when your task has several distinct steps so nothing is dropped across a long run; mark them done as you finish. This is private working memory — use `notes` for anything another agent needs. +- NOTES — `create_note` / `list_notes` / `get_note` / `update_note` / `delete_note`: the scan's shared scratchpad, visible to every agent. Write a note for a durable cross-agent fact that is not a finding and not coverage — a working credential set, a discovered endpoint inventory, an enumerated tenant list, a rate-limit quirk the next agent needs. `update_note` to keep a living inventory current; `delete_note` only for something now wrong or superseded. Check `list_notes`/`get_note` before recon work so you build on what is already mapped instead of redoing it. +- THREAT MODEL — `get_threat_model` / `amend_threat_model` / `save_threat_model`: covered above. `save_threat_model` REPLACES the whole document and clears amendments, so it is for establishing the baseline or folding amendments in (normally root) — to correct part of an existing model, `amend_threat_model` instead. +- COVERAGE — `record_coverage` / `update_coverage` / `list_coverage`: covered above. One row per surface+risk; correct an existing row with `update_coverage`, never a second `record_coverage`. +- RESEARCH — `web_search`: pull fresh, target-specific external knowledge — latest bypasses, WAF evasions, DB-/framework-specific syntax, CVE and advisory detail — before falling back to memorized payloads, and refresh payload corpora mid-spray. +- SPAWN WORK — `create_agent`: delegate a focused subtask to a specialist child (see the multi-agent rules below for when to spawn and how to scope it). Give it the target to model against and what is already known. +- TRACK CHILDREN — `view_agent_graph`: your live map of every agent and its status. Call it before spawning (to confirm no existing agent already covers the scope) and before finishing (to confirm no child is still running). +- STEER CHILDREN — `send_message_to_agent`: send a running child new information, a course correction, or a request to wrap up, without killing it. Use it to answer a child's question or narrow its scope mid-run. +- BLOCK ON CHILDREN — `wait_for_agents`: block until named children report back when your next move genuinely depends on their results. If you can keep making progress in parallel, keep working instead of waiting. +- CANCEL CHILDREN — `stop_agent`: gracefully cancel a child whose work is redundant, misdirected, or no longer needed. Prefer `send_message_to_agent` to redirect a child that is merely off-track; reserve `stop_agent` for work that should not continue at all. +- FINISH — subagents call `agent_finish` (with `open_items=[...]` for anything left unresolved); the root agent calls `finish_scan` exactly once, only after every child is wrapped up and coverage is reconciled. `agent_finish`/`finish_scan` are handoffs, not reporting channels — a vulnerability is reported only via `create_vulnerability_report`/`create_dependency_report`. diff --git a/strix/config/models.py b/strix/config/models.py index e632bb06..f6848ca4 100644 --- a/strix/config/models.py +++ b/strix/config/models.py @@ -749,6 +749,18 @@ def uses_chat_completions_tool_schema(model_name: str, settings: Settings) -> bo return not model_supports_reasoning(model_name) +def supports_strict_tool_schemas(model_name: str) -> bool: + """Return whether the route accepts strict tool schemas for Strix's toolset. + + Claude caps a request at 20 strict tools and 16 union-typed parameters + across all strict schemas. Strix ships ~30 tools and the strict dialect + turns every optional parameter into a nullable union, so both caps are + exceeded and the request is rejected outright. + """ + name = model_name.strip().lower() + return not any(marker in name for marker in _ANTHROPIC_MODEL_MARKERS) + + def model_supports_reasoning(model_name: str) -> bool: import litellm @@ -845,6 +857,9 @@ def is_known_openai_bare_model(model_name: str) -> bool: return bool(entry and entry.get("litellm_provider") == "openai") +_ANTHROPIC_MODEL_MARKERS = ("anthropic", "claude", "sonnet", "opus", "haiku") + + def is_claude_model(model_name: str) -> bool: return "claude" in (model_name or "").strip().lower() diff --git a/strix/core/execution.py b/strix/core/execution.py index bd99e7c3..9f2674d2 100644 --- a/strix/core/execution.py +++ b/strix/core/execution.py @@ -7,13 +7,12 @@ import contextlib import logging import uuid from collections.abc import Callable +from functools import cache from typing import TYPE_CHECKING, Any, cast -import litellm from agents import RunConfig, Runner from agents.exceptions import AgentsException, MaxTurnsExceeded, UserError from agents.sandbox.errors import ExecTransportError -from docker import errors as docker_errors # type: ignore[import-untyped, unused-ignore] from openai import ( APIConnectionError, APIError, @@ -56,6 +55,19 @@ _INPUT_REJECTION_CODES = frozenset({400, 404, 422}) _MAX_COMPACTIONS_PER_CYCLE = 2 +@cache +def _teardown_sandbox_errors() -> tuple[type[BaseException], ...]: + """Sandbox-gone errors, tolerated during shutdown. + + The Docker SDK is imported here rather than at module scope: it is only + reachable with the Docker runtime backend, and importing it eagerly puts it + on every launch's critical path. + """ + from docker import errors as docker_errors # type: ignore[import-untyped, unused-ignore] + + return (ExecTransportError, docker_errors.NotFound) + + class ProviderRefusalError(AgentsException): """Raised when a provider returns a structured refusal instead of an exception.""" @@ -126,6 +138,8 @@ def _is_transient_model_error(exc: BaseException) -> bool: return True code = _model_error_status_code(exc) if code is not None: + import litellm + return bool(litellm._should_retry(code)) return isinstance(exc, APIError) @@ -692,7 +706,7 @@ async def _run_cycle( # noqa: PLR0912, PLR0915 "Ignoring LiteLLM end-of-stream shutdown race for %s", agent_id, ) - except (ExecTransportError, docker_errors.NotFound): + except _teardown_sandbox_errors(): if not coordinator.is_shutting_down: raise logger.warning( diff --git a/strix/core/inputs.py b/strix/core/inputs.py index ea72abb7..f383261e 100644 --- a/strix/core/inputs.py +++ b/strix/core/inputs.py @@ -226,6 +226,23 @@ def build_scope_context(scan_config: dict[str, Any]) -> dict[str, Any]: } +def build_scan_targets(scan_config: dict[str, Any]) -> list[str]: + """One canonical string per authorized target. + + Agents refer to the target in whatever words they were handed, so anything + keyed on a target the model types drifts apart across a run. This is the + scan's own spelling, which target-keyed tools resolve against. A checkout is + named by its workspace path rather than its remote URL, so the local tree — + and its revision — is what gets inspected. + """ + targets: list[str] = [] + for target in build_scope_context(scan_config)["authorized_targets"]: + value = target["workspace_path"] or target["value"] + if value and value not in targets: + targets.append(value) + return targets + + def make_model_settings( reasoning_effort: ReasoningEffort | None, *, diff --git a/strix/core/runner.py b/strix/core/runner.py index 81df247c..ee996cd3 100644 --- a/strix/core/runner.py +++ b/strix/core/runner.py @@ -22,6 +22,7 @@ from strix.config import load_settings from strix.config.models import ( StrixProvider, configure_sdk_model_defaults, + supports_strict_tool_schemas, uses_chat_completions_tool_schema, ) from strix.config.settings import DEFAULT_MAX_TURNS @@ -36,6 +37,7 @@ from strix.core.execution import ( from strix.core.hooks import BudgetExceededError, ReportUsageHooks, recomputed_budget_flags from strix.core.inputs import ( build_root_task, + build_scan_targets, build_scope_context, make_model_settings, ) @@ -127,6 +129,7 @@ def _compose_root_instructions_override( skills: list[str], scan_mode: str, is_whitebox: bool, + is_diff_scoped: bool, interactive: bool, system_prompt_context: dict[str, Any], ) -> str | None: @@ -138,6 +141,7 @@ def _compose_root_instructions_override( scan_mode=scan_mode, is_whitebox=is_whitebox, is_root=True, + is_diff_scoped=is_diff_scoped, interactive=interactive, system_prompt_context=system_prompt_context, ) @@ -219,16 +223,21 @@ async def run_strix_scan( ) logger.info("LLM model resolved: %s", resolved_model) chat_completions_tools = uses_chat_completions_tool_schema(resolved_model, settings) + strict_tool_schemas = supports_strict_tool_schemas(resolved_model) + if not strict_tool_schemas: + logger.info("Sending non-strict tool schemas: %s caps strict tools", resolved_model) if coordinator is None: coordinator = AgentCoordinator() coordinator.set_snapshot_path(agents_path) + from strix.tools.coverage.tools import hydrate_coverage_from_disk from strix.tools.notes.tools import hydrate_notes_from_disk from strix.tools.todo.tools import hydrate_todos_from_disk hydrate_todos_from_disk(state_dir) hydrate_notes_from_disk(state_dir) + hydrate_coverage_from_disk(state_dir) root_id: str | None = None if is_resume: @@ -303,6 +312,8 @@ async def run_strix_scan( targets = scan_config.get("targets") or [] scan_mode = str(scan_config.get("scan_mode") or "deep") is_whitebox = any(t.get("type") == "local_code" for t in targets) + diff_scope = scan_config.get("diff_scope") + is_diff_scoped = bool(isinstance(diff_scope, dict) and diff_scope.get("active")) skills = list(scan_config.get("skills") or []) root_task = build_root_task(scan_config) model_settings = make_model_settings( @@ -339,6 +350,7 @@ async def run_strix_scan( skills=skills, scan_mode=scan_mode, is_whitebox=is_whitebox, + is_diff_scoped=is_diff_scoped, interactive=interactive, system_prompt_context=root_context, ) @@ -370,8 +382,10 @@ async def run_strix_scan( is_root=True, scan_mode=scan_mode, is_whitebox=is_whitebox, + is_diff_scoped=is_diff_scoped, interactive=interactive, chat_completions_tools=chat_completions_tools, + strict_tool_schemas=strict_tool_schemas, system_prompt_context=root_context, instructions_override=root_instructions, ) @@ -388,8 +402,10 @@ async def run_strix_scan( child_agent_builder = make_child_factory( scan_mode=scan_mode, is_whitebox=is_whitebox, + is_diff_scoped=is_diff_scoped, interactive=interactive, chat_completions_tools=chat_completions_tools, + strict_tool_schemas=strict_tool_schemas, system_prompt_context=scope_context, ) @@ -415,6 +431,7 @@ async def run_strix_scan( "parent_id": None, "interactive": interactive, "spawn_child_agent": spawn_child_agent, + "scan_targets": build_scan_targets(scan_config), "max_context_images": settings.runtime.max_context_images, } diff --git a/strix/interface/cli_args.py b/strix/interface/cli_args.py index 5b789eda..dbb1ebdf 100644 --- a/strix/interface/cli_args.py +++ b/strix/interface/cli_args.py @@ -385,7 +385,7 @@ def _load_resume_state(args: argparse.Namespace, parser: argparse.ArgumentParser ) try: state = read_run_record(run_dir) - except RuntimeError as exc: + except (RuntimeError, TypeError) as exc: parser.error(f"--resume {args.resume}: run.json unreadable: {exc}") args.targets_info = state.get("targets_info") or [] diff --git a/strix/interface/main.py b/strix/interface/main.py index 06966f4c..45e114b5 100644 --- a/strix/interface/main.py +++ b/strix/interface/main.py @@ -431,6 +431,10 @@ def main() -> None: sys.exit(run_auth(sys.argv[2:])) + from strix.llm.warmup import start_import_warmup + + start_import_warmup() + args = parse_arguments() start_background_check() diff --git a/strix/interface/tui/backend/projection.py b/strix/interface/tui/backend/projection.py index 22fa957e..3469aa4d 100644 --- a/strix/interface/tui/backend/projection.py +++ b/strix/interface/tui/backend/projection.py @@ -146,7 +146,9 @@ def bounded_state_projection(state: dict[str, Any]) -> dict[str, Any]: } for message in state["messages"][-5:] ] - state["usage"] = {} + state["usage"] = { + key: state["usage"][key] for key in ("total_tokens", "cost") if key in state["usage"] + } state["error"] = terminal_projection(state["error"], max_string=512) state["model_warning"] = terminal_projection(state["model_warning"], max_string=256) state["caido_url"] = terminal_projection(state["caido_url"], max_string=256) @@ -173,7 +175,7 @@ def bounded_state_projection(state: dict[str, Any]) -> dict[str, Any]: "model_warning": "", "caido_url": None, "messages": [], - "usage": {}, + "usage": state["usage"], "subscription": state["subscription"], "viewer_status": state["viewer_status"], "viewer_url": None, diff --git a/strix/interface/tui/internal/render/agent_message.go b/strix/interface/tui/internal/render/agent_message.go index 84715223..a1ca50aa 100644 --- a/strix/interface/tui/internal/render/agent_message.go +++ b/strix/interface/tui/internal/render/agent_message.go @@ -100,7 +100,7 @@ func applyMarkdownStyles(text string) string { case strings.HasPrefix(line, "- "), strings.HasPrefix(line, "* "): out.WriteString(Col(Green).Render("• ") + inlineFormat(line[2:])) case len(line) > 2 && line[0] >= '0' && line[0] <= '9' && (line[1:3] == ". " || line[1:3] == ") "): - out.WriteString(Col(Green).Render(string(line[0])+". ") + inlineFormat(line[2:])) + out.WriteString(Col(Green).Render(line[:2]+" ") + inlineFormat(line[3:])) case line == "---" || line == "***" || line == "___": out.WriteString(Col(Green).Render(strings.Repeat("─", 40))) default: diff --git a/strix/interface/tui/internal/render/coverage.go b/strix/interface/tui/internal/render/coverage.go new file mode 100644 index 00000000..3f6c161e --- /dev/null +++ b/strix/interface/tui/internal/render/coverage.go @@ -0,0 +1,194 @@ +package render + +import ( + "strconv" + "strings" + + "github.com/charmbracelet/lipgloss" +) + +// --------------------------------------------------------------------------- +// Coverage ledger (record_coverage / update_coverage / list_coverage) +// --------------------------------------------------------------------------- + +// coverageOutcomes maps a ledger outcome to its marker and color. A cleared +// surface and an unresolved one must not look alike at a glance: the whole +// point of the ledger is that a reader can see which surfaces are still open. +var coverageOutcomes = map[string]struct { + marker string + label string + color lipgloss.Color +}{ + "reported": {"!", "reported", SevHigh}, + "no_issue_found": {"✓", "no issue found", Green}, + "ruled_out": {"✓", "ruled out", Mint}, + "not_applicable": {"–", "not applicable", Slate}, + "needs_follow_up": {"?", "needs follow-up", AmberY}, +} + +func coverageOutcome(outcome string) (string, string, lipgloss.Color) { + if meta, ok := coverageOutcomes[strings.TrimSpace(strings.ToLower(outcome))]; ok { + return meta.marker, meta.label, meta.color + } + if outcome == "" { + return "·", "", Gray + } + return "·", strings.ReplaceAll(outcome, "_", " "), Gray +} + +var coverageTitles = map[string]struct { + title string + loading string + errMsg string +}{ + "record_coverage": {"Coverage Recorded", "Recording...", "Failed to record coverage"}, + "update_coverage": {"Coverage Updated", "Updating...", "Failed to update coverage"}, + "list_coverage": {"Coverage", "Loading...", "Unable to list coverage"}, +} + +func renderCoverage(name string, args map[string]any, result any) string { + meta := coverageTitles[name] + var b strings.Builder + b.WriteString("▣ " + Bold(Cyan).Render(meta.title)) + + if s, ok := result.(string); ok && strings.TrimSpace(s) != "" { + b.WriteString("\n " + Dim().Render(strings.TrimSpace(s))) + return b.String() + } + m, ok := result.(map[string]any) + if !ok { + coverageArgsPreview(&b, name, args) + b.WriteString("\n " + Dim().Render(meta.loading)) + return b.String() + } + if !truthy(m["success"]) { + coverageArgsPreview(&b, name, args) + errMsg := StringValue(m["error"]) + if errMsg == "" { + errMsg = meta.errMsg + } + b.WriteString("\n " + Col(Red).Render(errMsg)) + return b.String() + } + + switch name { + case "list_coverage": + coverageListBody(&b, m) + case "update_coverage": + marker, label, color := coverageOutcome(StringValue(m["outcome"])) + _, previous, previousColor := coverageOutcome(StringValue(m["previous_outcome"])) + b.WriteString("\n " + Col(color).Render(marker) + " " + coverageSubject(args, m)) + if previous != "" { + b.WriteString("\n " + Col(previousColor).Render(previous) + + Dim().Render(" → ") + Col(color).Render(label)) + } else { + b.WriteString("\n " + Col(color).Render(label)) + } + coverageEvidence(&b, StringValue(args["evidence"])) + default: + marker, label, color := coverageOutcome(StringValue(m["outcome"])) + b.WriteString("\n " + Col(color).Render(marker) + " " + coverageSubject(args, m)) + b.WriteString("\n " + Col(color).Render(label)) + coverageEvidence(&b, StringValue(args["evidence"])) + } + return b.String() +} + +// coverageSubject names the surface being recorded, falling back to the entry +// id when only the id is known (an update carries no surface in its args). +func coverageSubject(args map[string]any, result map[string]any) string { + surface := strings.TrimSpace(StringValue(args["surface"])) + risk := strings.TrimSpace(StringValue(args["risk_area"])) + switch { + case surface != "" && risk != "": + return surface + Dim().Render(" · "+risk) + case surface != "": + return surface + case risk != "": + return risk + } + if id := StringValue(result["entry_id"]); id != "" { + return Dim().Render("entry " + id) + } + return Dim().Render("(unnamed surface)") +} + +func coverageEvidence(b *strings.Builder, evidence string) { + if strings.TrimSpace(evidence) != "" { + b.WriteString("\n " + Dim().Render(psanitize(strings.TrimSpace(evidence), 160))) + } +} + +func coverageArgsPreview(b *strings.Builder, name string, args map[string]any) { + if name == "list_coverage" { + return + } + if subject := coverageSubject(args, map[string]any{}); subject != "" { + b.WriteString("\n " + subject) + } +} + +func coverageListBody(b *strings.Builder, result map[string]any) { + entries, _ := result["entries"].([]any) + total, _ := NumericValue(result["total_count"]) + if len(entries) == 0 { + if int(total) == 0 { + b.WriteString("\n " + Dim().Render("No surfaces recorded yet")) + } else { + b.WriteString("\n " + Dim().Render("No surfaces match this filter")) + } + return + } + + if counts, ok := result["outcome_counts"].(map[string]any); ok && len(counts) > 0 { + var parts []string + for _, outcome := range []string{ + "reported", "no_issue_found", "ruled_out", "not_applicable", "needs_follow_up", + } { + count, ok := NumericValue(counts[outcome]) + if !ok || count == 0 { + continue + } + _, label, color := coverageOutcome(outcome) + parts = append(parts, Col(color).Render(label+": "+strconv.Itoa(int(count)))) + } + if len(parts) > 0 { + b.WriteString("\n " + strings.Join(parts, Dim().Render(" "))) + } + } + + for _, e := range entries { + entry, _ := e.(map[string]any) + marker, label, color := coverageOutcome(StringValue(entry["outcome"])) + surface := strings.TrimSpace(StringValue(entry["surface"])) + if surface == "" { + surface = "(unnamed surface)" + } + b.WriteString("\n " + Col(color).Render(marker) + " " + surface) + if risk := strings.TrimSpace(StringValue(entry["risk_area"])); risk != "" { + b.WriteString(Dim().Render(" · " + risk)) + } + b.WriteString("\n " + Col(color).Render(label)) + // A row that moved states carries its own history; showing it keeps a + // closed surface from reading as one that was never in question. + if previous, ok := entry["previous_outcomes"].([]any); ok && len(previous) > 0 { + var was []string + for _, p := range previous { + if _, label, _ := coverageOutcome(StringValue(p)); label != "" { + was = append(was, label) + } + } + if len(was) > 0 { + b.WriteString(Dim().Render(" (was " + strings.Join(was, " → ") + ")")) + } + } + // Whose row this is matters for reconciliation: an agent needs to see + // at a glance which surfaces it owns and which came from a sibling. + if truthy(entry["by_you"]) { + b.WriteString(Dim().Render(" · you")) + } else if who := strings.TrimSpace(StringValue(entry["agent_name"])); who != "" { + b.WriteString(Dim().Render(" · " + who)) + } + coverageEvidence(b, StringValue(entry["evidence"])) + } +} diff --git a/strix/interface/tui/internal/render/coverage_test.go b/strix/interface/tui/internal/render/coverage_test.go new file mode 100644 index 00000000..f4a38ee2 --- /dev/null +++ b/strix/interface/tui/internal/render/coverage_test.go @@ -0,0 +1,204 @@ +package render + +import ( + "strings" + "testing" + + "github.com/charmbracelet/x/ansi" +) + +func TestRecordCoverageRendersSurfaceAndOutcome(t *testing.T) { + out := ansi.Strip(Tool(tool("record_coverage", + map[string]any{ + "surface": "POST /api/v1/invoices", + "risk_area": "object-level authorization", + "evidence": "tenant B token returns 403 on tenant A invoice ids", + }, + map[string]any{"success": true, "entry_id": "a1b2c3", "outcome": "ruled_out"}, + "completed"))) + requireContains(t, out, + "Coverage Recorded", + "POST /api/v1/invoices", + "object-level authorization", + "ruled out", + "tenant B token returns 403", + ) +} + +func TestUpdateCoverageShowsStateTransition(t *testing.T) { + out := ansi.Strip(Tool(tool("update_coverage", + map[string]any{"entry_id": "a1b2c3", "evidence": "reproduced with a second tenant"}, + map[string]any{ + "success": true, + "entry_id": "a1b2c3", + "previous_outcome": "needs_follow_up", + "outcome": "reported", + }, + "completed"))) + requireContains(t, out, "Coverage Updated", "needs follow-up", "→", "reported") +} + +func TestListCoverageRendersCountsHistoryAndAuthor(t *testing.T) { + out := ansi.Strip(Tool(tool("list_coverage", nil, + map[string]any{ + "success": true, + "entries": []any{ + map[string]any{ + "entry_id": "a1b2c3", + "surface": "/admin/export", + "risk_area": "IDOR", + "outcome": "no_issue_found", + "agent_name": "AuthzAgent", + "previous_outcomes": []any{"needs_follow_up"}, + "evidence": "org id is server-derived from the session", + }, + map[string]any{ + "entry_id": "d4e5f6", + "surface": "/graphql", + "risk_area": "injection", + "outcome": "needs_follow_up", + "by_you": true, + "evidence": "introspection disabled; needs an authenticated schema dump", + }, + }, + "total_count": 2, + "outcome_counts": map[string]any{"no_issue_found": 1, "needs_follow_up": 1}, + }, + "completed"))) + requireContains(t, out, + "/admin/export", "IDOR", "no issue found", + "was needs follow-up", "AuthzAgent", + "/graphql", "needs follow-up", "you", + "no issue found: 1", "needs follow-up: 1", + ) +} + +func TestListCoverageEmptyLedgerReadsAsUnrecorded(t *testing.T) { + out := ansi.Strip(Tool(tool("list_coverage", nil, + map[string]any{"success": true, "entries": []any{}, "total_count": 0}, "completed"))) + requireContains(t, out, "No surfaces recorded yet") + + filtered := ansi.Strip(Tool(tool("list_coverage", + map[string]any{"outcome": "reported"}, + map[string]any{"success": true, "entries": []any{}, "total_count": 4}, "completed"))) + requireContains(t, filtered, "No surfaces match this filter") +} + +func TestCoverageDuplicateRejectionSurfacesTheError(t *testing.T) { + out := ansi.Strip(Tool(tool("record_coverage", + map[string]any{"surface": "/login", "risk_area": "XSS"}, + map[string]any{ + "success": false, + "error": "'/login' (XSS) already has coverage entry a1b2c3", + "existing_entry_id": "a1b2c3", + }, + "completed"))) + requireContains(t, out, "/login", "already has coverage entry a1b2c3") +} + +func TestGetThreatModelRendersStalenessAndAmendments(t *testing.T) { + out := ansi.Strip(Tool(tool("get_threat_model", + map[string]any{"target": "https://app.example.com"}, + map[string]any{ + "success": true, + "found": true, + "stale": true, + "cached_revision": "0123456789abcdef", + "content": "# Overview\nMulti-tenant billing app.\n\n" + + "## Trust Boundaries and Assumptions\n\n## Attack Surface\n", + "amendments": []any{ + map[string]any{ + "agent_name": "ReconAgent", + "content": "staging host shares the production database", + }, + }, + }, + "completed"))) + requireContains(t, out, + "Threat Model", "https://app.example.com", + "stale", "01234567", + "1 amendment(s)", "ReconAgent", "staging host shares the production database", + "Multi-tenant billing app.", "Overview", "Trust Boundaries and Assumptions", + ) +} + +func TestGetThreatModelMissingModelIsExplicit(t *testing.T) { + out := ansi.Strip(Tool(tool("get_threat_model", + map[string]any{"target": "10.0.0.5"}, + map[string]any{"success": true, "found": false}, "completed"))) + requireContains(t, out, "No model cached for this target yet") +} + +func TestSaveThreatModelWarnsWhenAmendmentsAreCleared(t *testing.T) { + out := ansi.Strip(Tool(tool("save_threat_model", + map[string]any{"target": "app.example.com", "content": "# Overview\nA thing.\n"}, + map[string]any{ + "success": true, + "revision": "unversioned", + "amendments_cleared": 2, + }, + "completed"))) + requireContains(t, out, "Threat Model Saved", "saved", "cleared 2 amendment(s)") + // An unversioned target has no revision worth printing. + if strings.Contains(out, "unversioned") { + t.Fatalf("unversioned revision should not be rendered:\n%s", out) + } +} + +func TestAmendThreatModelRendersAddendum(t *testing.T) { + out := ansi.Strip(Tool(tool("amend_threat_model", + map[string]any{ + "target": "app.example.com", + "addendum": "The admin role is assignable by any org member via PATCH /members.", + }, + map[string]any{"success": true, "amendment_count": 3}, "completed"))) + requireContains(t, out, "Threat Model Amended", "amendment recorded", "(3 total)", + "admin role is assignable") +} + +func TestCoverageAndThreatModelToolsAreNotGeneric(t *testing.T) { + // The generic fallback dumps raw arg keys; these tools must not reach it. + for _, name := range []string{ + "record_coverage", "update_coverage", "list_coverage", + "get_threat_model", "save_threat_model", "amend_threat_model", + } { + out := ansi.Strip(Tool(tool(name, map[string]any{"target": "x", "surface": "y"}, nil, "running"))) + if strings.Contains(out, "Using tool") { + t.Fatalf("%s fell through to the generic renderer:\n%s", name, out) + } + } +} + +func TestOutputHeavyCoverageToolsCollapse(t *testing.T) { + for _, name := range []string{"list_coverage", "get_threat_model"} { + if ToolPreviewLines(name) == 0 { + t.Fatalf("%s should collapse; its output is unbounded", name) + } + } + for _, name := range []string{"record_coverage", "amend_threat_model"} { + if ToolPreviewLines(name) != 0 { + t.Fatalf("%s should not collapse", name) + } + } +} + +func TestVulnerabilityReportRendersCalibrationFields(t *testing.T) { + out := ansi.Strip(Tool(tool("create_vulnerability_report", + map[string]any{ + "title": "IDOR in invoice export", + "confidence": "medium", + "confidence_rationale": "traced statically; no authenticated instance to replay against", + "counterevidence": "the gateway may strip the id parameter before it reaches the handler", + "severity_change_conditions": "critical if the export includes other tenants' bank details", + "fix_verification": "unit tests executed; bypass review reasoned only", + "description": "The handler trusts a client-supplied invoice id.", + }, + map[string]any{"success": true, "severity": "high", "cvss_score": 7.5}, + "completed"))) + requireContains(t, out, + "Confidence", "MEDIUM", "no authenticated instance to replay against", + "Counterevidence", "gateway may strip the id parameter", + "Severity Would Change If", "other tenants' bank details", + "Fix Verification", "bypass review reasoned only", + ) +} diff --git a/strix/interface/tui/internal/render/markdown_test.go b/strix/interface/tui/internal/render/markdown_test.go index cd701e26..a887f995 100644 --- a/strix/interface/tui/internal/render/markdown_test.go +++ b/strix/interface/tui/internal/render/markdown_test.go @@ -72,6 +72,19 @@ func TestNonTablePipeLinesAreLeftAlone(t *testing.T) { } } +func TestMarkdownOrderedListsUseSingleSpaceAfterMarker(t *testing.T) { + out := renderAssistantMarkdown("1. hello\n2) world") + plain := ansi.Strip(out) + for _, want := range []string{"1. hello", "2) world"} { + if !strings.Contains(plain, want) { + t.Fatalf("ordered list item %q missing: %q", want, plain) + } + } + if strings.Contains(plain, "1. hello") || strings.Contains(plain, "2) world") { + t.Fatalf("double space after the list marker: %q", plain) + } +} + func TestInlineFormatKeepsNonEmphasisMarkers(t *testing.T) { literal := []string{ "ls *.py *.go", diff --git a/strix/interface/tui/internal/render/registry.go b/strix/interface/tui/internal/render/registry.go index 4899ca30..9e1ccdb3 100644 --- a/strix/interface/tui/internal/render/registry.go +++ b/strix/interface/tui/internal/render/registry.go @@ -95,6 +95,10 @@ func Tool(data map[string]any) string { return renderNote(name, args, result) case "create_todo", "list_todos", "update_todo", "mark_todo_done", "mark_todo_pending", "delete_todo": return renderTodo(name, result) + case "record_coverage", "update_coverage", "list_coverage": + return renderCoverage(name, args, result) + case "get_threat_model", "save_threat_model", "amend_threat_model": + return renderThreatModel(name, args, result) case "view_agent_graph", "create_agent", "send_message_to_agent", "agent_finish", "wait_for_agents", "stop_agent": return renderAgentGraphTool(name, args, result) case "list_requests", "view_request", "repeat_request", "list_sitemap", "view_sitemap_entry", "scope_rules": @@ -116,7 +120,8 @@ const outputPreviewLines = 10 func ToolPreviewLines(name string) int { switch name { case "exec_command", "write_stdin", "apply_patch", - "view_request", "repeat_request", "view_sitemap_entry": + "view_request", "repeat_request", "view_sitemap_entry", + "list_coverage", "get_threat_model": return outputPreviewLines } return 0 diff --git a/strix/interface/tui/internal/render/report.go b/strix/interface/tui/internal/render/report.go index 0002fdb2..9fe2026a 100644 --- a/strix/interface/tui/internal/render/report.go +++ b/strix/interface/tui/internal/render/report.go @@ -50,15 +50,31 @@ func renderVulnerabilityReport(args map[string]any, result any) string { b.WriteString("\n\n" + Bold(Field).Render(label) + "\n" + value) } } + if confidence := StringValue(args["confidence"]); confidence != "" { + b.WriteString("\n\n" + Bold(Field).Render("Confidence: ") + + lipgloss.NewStyle().Bold(true).Foreground(confidenceColor(confidence)). + Render(strings.ToUpper(confidence))) + if rationale := StringValue(args["confidence_rationale"]); rationale != "" { + b.WriteString("\n" + Dim().Render(rationale)) + } + } + section("Description", StringValue(args["description"])) section("Impact", StringValue(args["impact"])) section("Technical Analysis", StringValue(args["technical_analysis"])) + // The case against the finding travels with the case for it: a reader + // triaging this needs both to judge whether to act. + section("Counterevidence", StringValue(args["counterevidence"])) + section("Severity Would Change If", StringValue(args["severity_change_conditions"])) renderCodeLocations(&b, args["code_locations"]) section("PoC Description", StringValue(args["poc_description"])) if poc := StringValue(args["poc_script_code"]); poc != "" { b.WriteString("\n\n" + Bold(Field).Render("PoC Code") + "\n" + Col(Text).Render(poc)) } section("Remediation", StringValue(args["remediation_steps"])) + // Any applyable fix above is one click from the user's codebase, so how it + // was verified belongs next to it rather than in the artifact alone. + section("Fix Verification", StringValue(args["fix_verification"])) if title == "" { b.WriteString("\n " + Dim().Render("Creating report...")) @@ -66,6 +82,20 @@ func renderVulnerabilityReport(args map[string]any, result any) string { return "\n\n" + b.String() + "\n\n" } +// confidenceColor grades how firm the agent's own call is. Anything below +// high is a claim the reader has to check, and should not read as settled. +func confidenceColor(confidence string) lipgloss.Color { + switch strings.ToLower(strings.TrimSpace(confidence)) { + case "high": + return Green + case "medium": + return SevMed + case "low": + return SevHigh + } + return Gray +} + var cvssKeys = [][2]string{ {"attack_vector", "AV"}, {"attack_complexity", "AC"}, {"privileges_required", "PR"}, {"user_interaction", "UI"}, {"scope", "S"}, {"confidentiality", "C"}, diff --git a/strix/interface/tui/internal/render/threat_model.go b/strix/interface/tui/internal/render/threat_model.go new file mode 100644 index 00000000..411e5ede --- /dev/null +++ b/strix/interface/tui/internal/render/threat_model.go @@ -0,0 +1,138 @@ +package render + +import ( + "strconv" + "strings" +) + +// --------------------------------------------------------------------------- +// Threat model (get_threat_model / save_threat_model / amend_threat_model) +// --------------------------------------------------------------------------- + +var threatModelTitles = map[string]struct { + title string + loading string + errMsg string +}{ + "get_threat_model": {"Threat Model", "Loading...", "Unable to read threat model"}, + "save_threat_model": {"Threat Model Saved", "Saving...", "Failed to save threat model"}, + "amend_threat_model": {"Threat Model Amended", "Amending...", "Failed to amend threat model"}, +} + +func renderThreatModel(name string, args map[string]any, result any) string { + meta := threatModelTitles[name] + var b strings.Builder + b.WriteString("⌖ " + Bold(InfoBlue).Render(meta.title)) + if target := strings.TrimSpace(StringValue(args["target"])); target != "" { + b.WriteString(Dim().Render(" " + target)) + } + + if s, ok := result.(string); ok && strings.TrimSpace(s) != "" { + b.WriteString("\n " + Dim().Render(strings.TrimSpace(s))) + return b.String() + } + m, ok := result.(map[string]any) + if !ok { + b.WriteString("\n " + Dim().Render(meta.loading)) + return b.String() + } + if !truthy(m["success"]) { + errMsg := StringValue(m["error"]) + if errMsg == "" { + errMsg = meta.errMsg + } + b.WriteString("\n " + Col(Red).Render(errMsg)) + return b.String() + } + + switch name { + case "get_threat_model": + threatModelReadBody(&b, m) + case "amend_threat_model": + b.WriteString("\n " + Col(Green).Render("✓ amendment recorded")) + if count, ok := NumericValue(m["amendment_count"]); ok { + b.WriteString(Dim().Render(" (" + strconv.Itoa(int(count)) + " total)")) + } + threatModelBody(&b, StringValue(args["addendum"])) + default: + b.WriteString("\n " + Col(Green).Render("✓ saved")) + if revision := shortRevision(StringValue(m["revision"])); revision != "" { + b.WriteString(Dim().Render(" at " + revision)) + } + // Saving folds amendments away, so the count that vanished is worth + // stating: it is the one destructive thing this tool does. + if cleared, ok := NumericValue(m["amendments_cleared"]); ok && cleared > 0 { + b.WriteString("\n " + Col(AmberY).Render("⚠ cleared "+ + strconv.Itoa(int(cleared))+" amendment(s)")) + } + threatModelBody(&b, StringValue(args["content"])) + } + return b.String() +} + +func threatModelReadBody(b *strings.Builder, result map[string]any) { + if !truthy(result["found"]) { + b.WriteString("\n " + Dim().Render("No model cached for this target yet")) + return + } + if truthy(result["stale"]) { + b.WriteString("\n " + Col(AmberY).Render("⚠ stale")) + if cached := shortRevision(StringValue(result["cached_revision"])); cached != "" { + b.WriteString(Dim().Render(" (written at " + cached + ")")) + } + } + if amendments, ok := result["amendments"].([]any); ok && len(amendments) > 0 { + b.WriteString("\n " + Col(Gold).Render("+ "+strconv.Itoa(len(amendments))+ + " amendment(s)") + Dim().Render(" — later statements win")) + for _, a := range amendments { + amendment, _ := a.(map[string]any) + who := strings.TrimSpace(StringValue(amendment["agent_name"])) + if who == "" { + who = "unknown agent" + } + b.WriteString("\n - " + Dim().Render(who+": ") + + psanitize(strings.TrimSpace(StringValue(amendment["content"])), 120)) + } + } + threatModelBody(b, StringValue(result["content"])) +} + +// threatModelBody previews the document. The full text is a page or more, so +// only its section headings and opening line are shown here; the trace can be +// expanded for the rest. +func threatModelBody(b *strings.Builder, content string) { + content = strings.TrimSpace(content) + if content == "" { + return + } + var headings []string + summary := "" + for _, line := range strings.Split(content, "\n") { + line = strings.TrimSpace(line) + switch { + case strings.HasPrefix(line, "#"): + headings = append(headings, strings.TrimSpace(strings.TrimLeft(line, "# "))) + case summary == "" && line != "": + summary = line + } + } + if summary != "" { + b.WriteString("\n " + Dim().Render(psanitize(summary, 160))) + } + if len(headings) > 0 { + if len(headings) > 8 { + headings = headings[:8] + } + b.WriteString("\n " + Dim().Render(strings.Join(headings, " · "))) + } +} + +// shortRevision abbreviates a git sha; "unversioned" targets have no revision +// worth showing. +func shortRevision(revision string) string { + revision = strings.TrimSpace(revision) + if revision == "" || revision == "unversioned" { + return "" + } + return firstN(revision, 8) +} diff --git a/strix/interface/utils.py b/strix/interface/utils.py index 6789abe0..faab1772 100644 --- a/strix/interface/utils.py +++ b/strix/interface/utils.py @@ -13,9 +13,7 @@ from pathlib import Path from typing import Any from urllib.parse import parse_qs, urlparse -import docker import requests -from docker.errors import DockerException, ImageNotFound from rich.console import Console from rich.panel import Panel from rich.text import Text @@ -1599,6 +1597,9 @@ def clone_repository(repo_url: str, run_name: str, dest_name: str | None = None) def check_docker_connection() -> Any: + import docker + from docker.errors import DockerException + try: return docker.from_env() except DockerException: @@ -1624,6 +1625,8 @@ def check_docker_connection() -> Any: def image_exists(client: Any, image_name: str) -> bool: + from docker.errors import ImageNotFound + try: client.images.get(image_name) except ImageNotFound: diff --git a/strix/interface/viewer/frontend/src/components/live/tool-renderers/CoverageRenderer.tsx b/strix/interface/viewer/frontend/src/components/live/tool-renderers/CoverageRenderer.tsx new file mode 100644 index 00000000..57e579ce --- /dev/null +++ b/strix/interface/viewer/frontend/src/components/live/tool-renderers/CoverageRenderer.tsx @@ -0,0 +1,184 @@ +"use client"; + +import type { ToolRendererProps } from "@/types/events"; +import { CheckCircle2, CircleSlash, HelpCircle, AlertTriangle, Circle, ClipboardList } from "lucide-react"; + +interface CoverageEntry { + entry_id?: string; + surface?: string; + risk_area?: string; + outcome?: string; + evidence?: string; + agent_name?: string; + by_you?: boolean; + previous_outcomes?: string[]; +} + +/** + * A cleared surface and an unresolved one must never read alike — the ledger + * exists so that the negative space of a scan is legible, so each outcome gets + * its own icon and color rather than a shared neutral row. + */ +const OUTCOMES: Record = { + reported: { label: "reported", color: "text-orange-400", Icon: AlertTriangle }, + no_issue_found: { label: "no issue found", color: "text-emerald-400", Icon: CheckCircle2 }, + ruled_out: { label: "ruled out", color: "text-emerald-400/70", Icon: CheckCircle2 }, + not_applicable: { label: "not applicable", color: "text-[#777]", Icon: CircleSlash }, + needs_follow_up: { label: "needs follow-up", color: "text-yellow-400", Icon: HelpCircle }, +}; + +const OUTCOME_ORDER = [ + "reported", "needs_follow_up", "no_issue_found", "ruled_out", "not_applicable", +] as const; + +function outcomeMeta(outcome: string | undefined) { + const key = (outcome ?? "").trim().toLowerCase(); + return OUTCOMES[key] ?? { + label: key ? key.replace(/_/g, " ") : "unrecorded", + color: "text-[#777]", + Icon: Circle, + }; +} + +const ACTION_LABELS: Record = { + record_coverage: "Coverage recorded", + update_coverage: "Coverage updated", + list_coverage: "Coverage", +}; + +function Header({ toolName }: { toolName: string }) { + return ( +
+ + + {ACTION_LABELS[toolName] ?? "Coverage"} + +
+ ); +} + +function Row({ entry }: { entry: CoverageEntry }) { + const { label, color, Icon } = outcomeMeta(entry.outcome); + const previous = (entry.previous_outcomes ?? []) + .map((o) => outcomeMeta(o).label) + .filter(Boolean); + return ( +
+ +
+
+ {entry.surface ?? "(unnamed surface)"} + {entry.risk_area && · {entry.risk_area}} +
+
+ {label} + {previous.length > 0 && ( + (was {previous.join(" → ")}) + )} + {(entry.by_you || entry.agent_name) && ( + · {entry.by_you ? "you" : entry.agent_name} + )} +
+ {entry.evidence && ( +
{entry.evidence}
+ )} +
+
+ ); +} + +export default function CoverageRenderer({ toolName, args, result }: ToolRendererProps) { + const res = result as Record | string | null; + + if (typeof res === "string" && res.trim()) { + return ( +
+
+
{res.trim()}
+
+ ); + } + + const structured = res && typeof res === "object" ? res : null; + const surface = (args.surface as string) ?? ""; + const riskArea = (args.risk_area as string) ?? ""; + const evidence = (args.evidence as string) ?? ""; + + if (structured && !structured.success) { + return ( +
+
+ {(surface || riskArea) && ( +
+ {surface} + {riskArea && · {riskArea}} +
+ )} +
+ {(structured.error as string) ?? "Coverage call failed"} +
+
+ ); + } + + if (toolName === "list_coverage") { + const rawEntries = structured?.entries; + const entries: CoverageEntry[] = Array.isArray(rawEntries) ? (rawEntries as CoverageEntry[]) : []; + const counts = (structured?.outcome_counts as Record | undefined) ?? {}; + const total = (structured?.total_count as number) ?? 0; + return ( +
+
+ {Object.keys(counts).length > 0 && ( +
+ {OUTCOME_ORDER.filter((o) => counts[o]).map((o) => { + const { label, color } = outcomeMeta(o); + return ( + + {label}: {counts[o]} + + ); + })} +
+ )} + {entries.length > 0 ? ( +
+ {entries.map((entry, i) => )} +
+ ) : ( +
+ {total === 0 ? "No surfaces recorded yet" : "No surfaces match this filter"} +
+ )} +
+ ); + } + + const outcome = (structured?.outcome as string) ?? ""; + const previousOutcome = (structured?.previous_outcome as string) ?? ""; + const { label, color, Icon } = outcomeMeta(outcome); + + return ( +
+
+
+ +
+
+ {surface || (structured?.entry_id ? `entry ${structured.entry_id as string}` : "(unnamed surface)")} + {riskArea && · {riskArea}} +
+
+ {previousOutcome && ( + {outcomeMeta(previousOutcome).label} → + )} + {label} +
+ {evidence && ( +
{evidence}
+ )} +
+
+
+ ); +} diff --git a/strix/interface/viewer/frontend/src/components/live/tool-renderers/ThreatModelRenderer.tsx b/strix/interface/viewer/frontend/src/components/live/tool-renderers/ThreatModelRenderer.tsx new file mode 100644 index 00000000..fa7e687d --- /dev/null +++ b/strix/interface/viewer/frontend/src/components/live/tool-renderers/ThreatModelRenderer.tsx @@ -0,0 +1,138 @@ +"use client"; + +import type { ToolRendererProps } from "@/types/events"; +import { Crosshair, AlertTriangle, Plus, Save } from "lucide-react"; +import { TruncatedText } from "./ToolCard"; + +interface Amendment { + agent_name?: string; + content?: string; + recorded_at?: string; +} + +const ACTION_LABELS: Record = { + get_threat_model: { label: "Threat model", Icon: Crosshair }, + save_threat_model: { label: "Threat model saved", Icon: Save }, + amend_threat_model: { label: "Threat model amended", Icon: Plus }, +}; + +/** A git sha is noise past its first bytes, and "unversioned" is not a revision. */ +function shortRevision(revision: unknown): string { + const value = typeof revision === "string" ? revision.trim() : ""; + if (!value || value === "unversioned") return ""; + return value.slice(0, 8); +} + +export default function ThreatModelRenderer({ toolName, args, result }: ToolRendererProps) { + const action = ACTION_LABELS[toolName] ?? { label: "Threat model", Icon: Crosshair }; + const ActionIcon = action.Icon; + const target = (args.target as string) ?? ""; + const res = result as Record | string | null; + + const header = ( +
+ + {action.label} + {target && {target}} +
+ ); + + if (typeof res === "string" && res.trim()) { + return
{header}
{res.trim()}
; + } + + const structured = res && typeof res === "object" ? res : null; + + if (structured && !structured.success) { + return ( +
+ {header} +
+ {(structured.error as string) ?? "Threat model call failed"} +
+
+ ); + } + + if (toolName === "get_threat_model") { + if (structured && !structured.found) { + return ( +
+ {header} +
No model cached for this target yet
+
+ ); + } + const rawAmendments = structured?.amendments; + const amendments: Amendment[] = Array.isArray(rawAmendments) ? (rawAmendments as Amendment[]) : []; + const cachedRevision = shortRevision(structured?.cached_revision); + return ( +
+ {header} + {structured?.stale === true && ( +
+ + stale{cachedRevision ? ` — written at ${cachedRevision}` : ""} +
+ )} + {amendments.length > 0 && ( +
+ + {amendments.length} amendment{amendments.length === 1 ? "" : "s"} + + — later statements win +
+ {/* On a public share link the amendment body is stripped, so the + author line has to stand on its own. */} + {amendments.map((amendment, i) => ( +
+ {amendment.agent_name ?? "unknown agent"} + {amendment.content && ( + : {amendment.content} + )} +
+ ))} +
+
+ )} + {typeof structured?.content === "string" && structured.content.trim() && ( +
+ +
+ )} +
+ ); + } + + if (toolName === "amend_threat_model") { + const addendum = (args.addendum as string) ?? ""; + const count = structured?.amendment_count as number | undefined; + return ( +
+ {header} + {count != null && ( +
{count} amendment{count === 1 ? "" : "s"} on this model
+ )} + {addendum &&
} +
+ ); + } + + const cleared = (structured?.amendments_cleared as number | undefined) ?? 0; + const revision = shortRevision(structured?.revision); + const content = (args.content as string) ?? ""; + return ( +
+ {header} + {revision &&
at {revision}
} + {/* Saving folds amendments away — the one destructive thing this tool does. */} + {cleared > 0 && ( +
+ + cleared {cleared} amendment{cleared === 1 ? "" : "s"} +
+ )} + {content &&
} +
+ ); +} diff --git a/strix/interface/viewer/frontend/src/components/live/tool-renderers/VulnReportRenderer.tsx b/strix/interface/viewer/frontend/src/components/live/tool-renderers/VulnReportRenderer.tsx index fa8a08ee..c556e1c7 100644 --- a/strix/interface/viewer/frontend/src/components/live/tool-renderers/VulnReportRenderer.tsx +++ b/strix/interface/viewer/frontend/src/components/live/tool-renderers/VulnReportRenderer.tsx @@ -11,6 +11,11 @@ const SEVERITY_COLORS: Record = { low: "text-blue-400", info: "text-cyan-400", }; +/** Anything below high is a claim the reader still has to check. */ +const CONFIDENCE_COLORS: Record = { + high: "text-emerald-400", medium: "text-yellow-400", low: "text-orange-400", +}; + export default function VulnReportRenderer({ args, result }: ToolRendererProps) { const title = (args.title as string) ?? ""; const description = (args.description as string) ?? ""; @@ -24,6 +29,11 @@ export default function VulnReportRenderer({ args, result }: ToolRendererProps) const remediation = (args.remediation_steps as string) ?? ""; const cve = (args.cve as string) ?? ""; const cwe = (args.cwe as string) ?? ""; + const counterevidence = (args.counterevidence as string) ?? ""; + const confidence = ((args.confidence as string) ?? "").toLowerCase(); + const confidenceRationale = (args.confidence_rationale as string) ?? ""; + const severityChangeConditions = (args.severity_change_conditions as string) ?? ""; + const fixVerification = (args.fix_verification as string) ?? ""; const res = result as Record | null; const rawSev = (res && typeof res === "object" ? res.severity : null) ?? args.severity ?? "medium"; @@ -38,6 +48,11 @@ export default function VulnReportRenderer({ args, result }: ToolRendererProps) {cvss != null && CVSS {cvss}} {cve && {cve}} {cwe && {cwe}} + {confidence && ( + + {confidence} confidence + + )} {title &&
{title}
} {(target || endpoint) && ( @@ -56,6 +71,23 @@ export default function VulnReportRenderer({ args, result }: ToolRendererProps)
)} + {confidenceRationale && ( +
{confidenceRationale}
+ )} + {/* The case against the finding sits beside the case for it: whoever + triages this needs both to decide whether to act. */} + {counterevidence && ( +
+ Counterevidence +
+
+ )} + {severityChangeConditions && ( +
+ Severity would change if +
+
+ )} {(pocDescription || pocCode) && (
Proof of Concept @@ -69,6 +101,14 @@ export default function VulnReportRenderer({ args, result }: ToolRendererProps)
)} + {/* An applyable fix is one click from the user's codebase, so how it was + verified belongs next to it. */} + {fixVerification && ( +
+ Fix verification +
+
+ )} ); } diff --git a/strix/interface/viewer/frontend/src/components/live/tool-renderers/index.ts b/strix/interface/viewer/frontend/src/components/live/tool-renderers/index.ts index a1b81778..4c7e088d 100644 --- a/strix/interface/viewer/frontend/src/components/live/tool-renderers/index.ts +++ b/strix/interface/viewer/frontend/src/components/live/tool-renderers/index.ts @@ -3,7 +3,7 @@ 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, Plug, + ListTodo, Crosshair, Wrench, Ban, Image, ClipboardList, Plug, } from "lucide-react"; import TerminalRenderer from "./TerminalRenderer"; @@ -25,6 +25,8 @@ import TodoRenderer from "./TodoRenderer"; import FallbackRenderer from "./FallbackRenderer"; import LoadSkillRenderer from "./LoadSkillRenderer"; import RespondRenderer from "./RespondRenderer"; +import CoverageRenderer from "./CoverageRenderer"; +import ThreatModelRenderer from "./ThreatModelRenderer"; import McpRenderer from "./McpRenderer"; /** @@ -54,6 +56,8 @@ export type ToolCategory = | "notes" | "skills" | "todos" + | "coverage" + | "threatModel" | "telemetry" | "mcp"; @@ -85,6 +89,8 @@ const CATEGORY_META: Record = { 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/ }, + coverage: { renderer: CoverageRenderer, icon: ClipboardList, color: "text-cyan-400", match: /coverage/ }, + threatModel: { renderer: ThreatModelRenderer, icon: Crosshair, color: "text-blue-400", match: /threat_model/ }, telemetry: { renderer: FallbackRenderer, icon: Wrench, color: "text-[#555]" }, // Tools from the user's own MCP servers. Resolved from the connection on the // event rather than from a tool name, so this family has no names below. @@ -117,6 +123,10 @@ const CATEGORY_TOOLS: Record = { 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"], + // Shared coverage ledger — one row per surface × risk area for the whole run + coverage: ["record_coverage", "update_coverage", "list_coverage"], + // Per-target threat model, shared across the agent tree + threatModel: ["get_threat_model", "save_threat_model", "amend_threat_model"], telemetry: ["sandbox_error_details", "llm_error_details"], mcp: [], }; diff --git a/strix/interface/viewer/static/assets/index-C9c1WbvP.js b/strix/interface/viewer/static/assets/index-C9c1WbvP.js new file mode 100644 index 00000000..bac9288b --- /dev/null +++ b/strix/interface/viewer/static/assets/index-C9c1WbvP.js @@ -0,0 +1,507 @@ +(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))a(s);new MutationObserver(s=>{for(const o of s)if(o.type==="childList")for(const c of o.addedNodes)c.tagName==="LINK"&&c.rel==="modulepreload"&&a(c)}).observe(document,{childList:!0,subtree:!0});function r(s){const o={};return s.integrity&&(o.integrity=s.integrity),s.referrerPolicy&&(o.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?o.credentials="include":s.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function a(s){if(s.ep)return;s.ep=!0;const o=r(s);fetch(s.href,o)}})();function Ao(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var hh={exports:{}},Xl={};/** + * @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 Q0;function Mk(){if(Q0)return Xl;Q0=1;var e=Symbol.for("react.transitional.element"),t=Symbol.for("react.fragment");function r(a,s,o){var c=null;if(o!==void 0&&(c=""+o),s.key!==void 0&&(c=""+s.key),"key"in s){o={};for(var d in s)d!=="key"&&(o[d]=s[d])}else o=s;return s=o.ref,{$$typeof:e,type:a,key:c,ref:s!==void 0?s:null,props:o}}return Xl.Fragment=t,Xl.jsx=r,Xl.jsxs=r,Xl}var W0;function Ok(){return W0||(W0=1,hh.exports=Mk()),hh.exports}var m=Ok(),mh={exports:{}},Ve={};/** + * @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 J0;function Rk(){if(J0)return Ve;J0=1;var e=Symbol.for("react.transitional.element"),t=Symbol.for("react.portal"),r=Symbol.for("react.fragment"),a=Symbol.for("react.strict_mode"),s=Symbol.for("react.profiler"),o=Symbol.for("react.consumer"),c=Symbol.for("react.context"),d=Symbol.for("react.forward_ref"),f=Symbol.for("react.suspense"),h=Symbol.for("react.memo"),p=Symbol.for("react.lazy"),g=Symbol.for("react.activity"),y=Symbol.iterator;function b(D){return D===null||typeof D!="object"?null:(D=y&&D[y]||D["@@iterator"],typeof D=="function"?D:null)}var _={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},E=Object.assign,S={};function w(D,Y,L){this.props=D,this.context=Y,this.refs=S,this.updater=L||_}w.prototype.isReactComponent={},w.prototype.setState=function(D,Y){if(typeof D!="object"&&typeof D!="function"&&D!=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,D,Y,"setState")},w.prototype.forceUpdate=function(D){this.updater.enqueueForceUpdate(this,D,"forceUpdate")};function k(){}k.prototype=w.prototype;function N(D,Y,L){this.props=D,this.context=Y,this.refs=S,this.updater=L||_}var M=N.prototype=new k;M.constructor=N,E(M,w.prototype),M.isPureReactComponent=!0;var B=Array.isArray;function R(){}var U={H:null,A:null,T:null,S:null},I=Object.prototype.hasOwnProperty;function X(D,Y,L){var G=L.ref;return{$$typeof:e,type:D,key:Y,ref:G!==void 0?G:null,props:L}}function j(D,Y){return X(D.type,Y,D.props)}function z(D){return typeof D=="object"&&D!==null&&D.$$typeof===e}function V(D){var Y={"=":"=0",":":"=2"};return"$"+D.replace(/[=:]/g,function(L){return Y[L]})}var P=/\/+/g;function T(D,Y){return typeof D=="object"&&D!==null&&D.key!=null?V(""+D.key):Y.toString(36)}function $(D){switch(D.status){case"fulfilled":return D.value;case"rejected":throw D.reason;default:switch(typeof D.status=="string"?D.then(R,R):(D.status="pending",D.then(function(Y){D.status==="pending"&&(D.status="fulfilled",D.value=Y)},function(Y){D.status==="pending"&&(D.status="rejected",D.reason=Y)})),D.status){case"fulfilled":return D.value;case"rejected":throw D.reason}}throw D}function O(D,Y,L,G,q){var Q=typeof D;(Q==="undefined"||Q==="boolean")&&(D=null);var J=!1;if(D===null)J=!0;else switch(Q){case"bigint":case"string":case"number":J=!0;break;case"object":switch(D.$$typeof){case e:case t:J=!0;break;case p:return J=D._init,O(J(D._payload),Y,L,G,q)}}if(J)return q=q(D),J=G===""?"."+T(D,0):G,B(q)?(L="",J!=null&&(L=J.replace(P,"$&/")+"/"),O(q,Y,L,"",function(ce){return ce})):q!=null&&(z(q)&&(q=j(q,L+(q.key==null||D&&D.key===q.key?"":(""+q.key).replace(P,"$&/")+"/")+J)),Y.push(q)),1;J=0;var W=G===""?".":G+":";if(B(D))for(var te=0;te>>1,C=O[Z];if(0>>1;Zs(L,K))Gs(q,L)?(O[Z]=q,O[G]=K,Z=G):(O[Z]=L,O[Y]=K,Z=Y);else if(Gs(q,K))O[Z]=q,O[G]=K,Z=G;else break e}}return H}function s(O,H){var K=O.sortIndex-H.sortIndex;return K!==0?K:O.id-H.id}if(e.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var o=performance;e.unstable_now=function(){return o.now()}}else{var c=Date,d=c.now();e.unstable_now=function(){return c.now()-d}}var f=[],h=[],p=1,g=null,y=3,b=!1,_=!1,E=!1,S=!1,w=typeof setTimeout=="function"?setTimeout:null,k=typeof clearTimeout=="function"?clearTimeout:null,N=typeof setImmediate<"u"?setImmediate:null;function M(O){for(var H=r(h);H!==null;){if(H.callback===null)a(h);else if(H.startTime<=O)a(h),H.sortIndex=H.expirationTime,t(f,H);else break;H=r(h)}}function B(O){if(E=!1,M(O),!_)if(r(f)!==null)_=!0,R||(R=!0,V());else{var H=r(h);H!==null&&$(B,H.startTime-O)}}var R=!1,U=-1,I=5,X=-1;function j(){return S?!0:!(e.unstable_now()-XO&&j());){var Z=g.callback;if(typeof Z=="function"){g.callback=null,y=g.priorityLevel;var C=Z(g.expirationTime<=O);if(O=e.unstable_now(),typeof C=="function"){g.callback=C,M(O),H=!0;break t}g===r(f)&&a(f),M(O)}else a(f);g=r(f)}if(g!==null)H=!0;else{var D=r(h);D!==null&&$(B,D.startTime-O),H=!1}}break e}finally{g=null,y=K,b=!1}H=void 0}}finally{H?V():R=!1}}}var V;if(typeof N=="function")V=function(){N(z)};else if(typeof MessageChannel<"u"){var P=new MessageChannel,T=P.port2;P.port1.onmessage=z,V=function(){T.postMessage(null)}}else V=function(){w(z,0)};function $(O,H){U=w(function(){O(e.unstable_now())},H)}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(O){O.callback=null},e.unstable_forceFrameRate=function(O){0>O||125Z?(O.sortIndex=K,t(h,O),r(f)===null&&O===r(h)&&(E?(k(U),U=-1):E=!0,$(B,K-Z))):(O.sortIndex=C,t(f,O),_||b||(_=!0,R||(R=!0,V()))),O},e.unstable_shouldYield=j,e.unstable_wrapCallback=function(O){var H=y;return function(){var K=y;y=H;try{return O.apply(this,arguments)}finally{y=K}}}})(xh)),xh}var ny;function Dk(){return ny||(ny=1,gh.exports=jk()),gh.exports}var bh={exports:{}},Tn={};/** + * @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 ry;function Lk(){if(ry)return Tn;ry=1;var e=Mo();function t(f){var h="https://react.dev/errors/"+f;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}return e(),bh.exports=Lk(),bh.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 ay;function zk(){if(ay)return Kl;ay=1;var e=Dk(),t=Mo(),r=D_();function a(n){var i="https://react.dev/errors/"+n;if(1C||(n.current=Z[C],Z[C]=null,C--)}function L(n,i){C++,Z[C]=n.current,n.current=i}var G=D(null),q=D(null),Q=D(null),J=D(null);function W(n,i){switch(L(Q,i),L(q,n),L(G,null),i.nodeType){case 9:case 11:n=(n=i.documentElement)&&(n=n.namespaceURI)?v0(n):0;break;default:if(n=i.tagName,i=i.namespaceURI)i=v0(i),n=_0(i,n);else switch(n){case"svg":n=1;break;case"math":n=2;break;default:n=0}}Y(G),L(G,n)}function te(){Y(G),Y(q),Y(Q)}function ce(n){n.memoizedState!==null&&L(J,n);var i=G.current,l=_0(i,n.type);i!==l&&(L(q,n),L(G,l))}function fe(n){q.current===n&&(Y(G),Y(q)),J.current===n&&(Y(J),Fl._currentValue=K)}var xe,we;function Ne(n){if(xe===void 0)try{throw Error()}catch(l){var i=l.stack.trim().match(/\n( *(at )?)/);xe=i&&i[1]||"",we=-1)":-1x||ne[u]!==le[x]){var he=` +`+ne[u].replace(" at new "," at ");return n.displayName&&he.includes("")&&(he=he.replace("",n.displayName)),he}while(1<=u&&0<=x);break}}}finally{De=!1,Error.prepareStackTrace=l}return(l=n?n.displayName||n.name:"")?Ne(l):""}function st(n,i){switch(n.tag){case 26:case 27:case 5:return Ne(n.type);case 16:return Ne("Lazy");case 13:return n.child!==i&&i!==null?Ne("Suspense Fallback"):Ne("Suspense");case 19:return Ne("SuspenseList");case 0:case 15:return $e(n.type,!1);case 11:return $e(n.type.render,!1);case 1:return $e(n.type,!0);case 31:return Ne("Activity");default:return""}}function Rt(n){try{var i="",l=null;do i+=st(n,l),l=n,n=n.return;while(n);return i}catch(u){return` +Error generating stack: `+u.message+` +`+u.stack}}var Xt=Object.prototype.hasOwnProperty,Pt=e.unstable_scheduleCallback,Kt=e.unstable_cancelCallback,Yn=e.unstable_shouldYield,Nn=e.unstable_requestPaint,ct=e.unstable_now,It=e.unstable_getCurrentPriorityLevel,ue=e.unstable_ImmediatePriority,be=e.unstable_UserBlockingPriority,Oe=e.unstable_NormalPriority,Fe=e.unstable_LowPriority,Ze=e.unstable_IdlePriority,cn=e.log,Sn=e.unstable_setDisableYieldValue,Zt=null,At=null;function Jt(n){if(typeof cn=="function"&&Sn(n),At&&typeof At.setStrictMode=="function")try{At.setStrictMode(Zt,n)}catch{}}var ut=Math.clz32?Math.clz32:Ni,In=Math.log,un=Math.LN2;function Ni(n){return n>>>=0,n===0?32:31-(In(n)/un|0)|0}var nt=256,Xn=262144,On=4194304;function mn(n){var i=n&42;if(i!==0)return i;switch(n&-n){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 n&261888;case 262144:case 524288:case 1048576:case 2097152:return n&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return n&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return n}}function re(n,i,l){var u=n.pendingLanes;if(u===0)return 0;var x=0,v=n.suspendedLanes,A=n.pingedLanes;n=n.warmLanes;var F=u&134217727;return F!==0?(u=F&~v,u!==0?x=mn(u):(A&=F,A!==0?x=mn(A):l||(l=F&~n,l!==0&&(x=mn(l))))):(F=u&~v,F!==0?x=mn(F):A!==0?x=mn(A):l||(l=u&~n,l!==0&&(x=mn(l)))),x===0?0:i!==0&&i!==x&&(i&v)===0&&(v=x&-x,l=i&-i,v>=l||v===32&&(l&4194048)!==0)?i:x}function me(n,i){return(n.pendingLanes&~(n.suspendedLanes&~n.pingedLanes)&i)===0}function Ee(n,i){switch(n){case 1:case 2:case 4:case 8:case 64:return i+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return i+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function Pe(){var n=On;return On<<=1,(On&62914560)===0&&(On=4194304),n}function St(n){for(var i=[],l=0;31>l;l++)i.push(n);return i}function gt(n,i){n.pendingLanes|=i,i!==268435456&&(n.suspendedLanes=0,n.pingedLanes=0,n.warmLanes=0)}function Me(n,i,l,u,x,v){var A=n.pendingLanes;n.pendingLanes=l,n.suspendedLanes=0,n.pingedLanes=0,n.warmLanes=0,n.expiredLanes&=l,n.entangledLanes&=l,n.errorRecoveryDisabledLanes&=l,n.shellSuspendCounter=0;var F=n.entanglements,ne=n.expirationTimes,le=n.hiddenUpdates;for(l=A&~l;0"u")return null;try{return n.activeElement||n.body}catch{return n.body}}var is=/[\n"\\]/g;function Cn(n){return n.replace(is,function(i){return"\\"+i.charCodeAt(0).toString(16)+" "})}function ba(n,i,l,u,x,v,A,F){n.name="",A!=null&&typeof A!="function"&&typeof A!="symbol"&&typeof A!="boolean"?n.type=A:n.removeAttribute("type"),i!=null?A==="number"?(i===0&&n.value===""||n.value!=i)&&(n.value=""+_t(i)):n.value!==""+_t(i)&&(n.value=""+_t(i)):A!=="submit"&&A!=="reset"||n.removeAttribute("value"),i!=null?Oi(n,A,_t(i)):l!=null?Oi(n,A,_t(l)):u!=null&&n.removeAttribute("value"),x==null&&v!=null&&(n.defaultChecked=!!v),x!=null&&(n.checked=x&&typeof x!="function"&&typeof x!="symbol"),F!=null&&typeof F!="function"&&typeof F!="symbol"&&typeof F!="boolean"?n.name=""+_t(F):n.removeAttribute("name")}function Er(n,i,l,u,x,v,A,F){if(v!=null&&typeof v!="function"&&typeof v!="symbol"&&typeof v!="boolean"&&(n.type=v),i!=null||l!=null){if(!(v!=="submit"&&v!=="reset"||i!=null)){Ai(n);return}l=l!=null?""+_t(l):"",i=i!=null?""+_t(i):l,F||i===n.value||(n.value=i),n.defaultValue=i}u=u??x,u=typeof u!="function"&&typeof u!="symbol"&&!!u,n.checked=F?n.checked:!!u,n.defaultChecked=!!u,A!=null&&typeof A!="function"&&typeof A!="symbol"&&typeof A!="boolean"&&(n.name=A),Ai(n)}function Oi(n,i,l){i==="number"&&Mi(n.ownerDocument)===n||n.defaultValue===""+l||(n.defaultValue=""+l)}function dn(n,i,l,u){if(n=n.options,i){i={};for(var x=0;x"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),fd=!1;if(ti)try{var ol={};Object.defineProperty(ol,"passive",{get:function(){fd=!0}}),window.addEventListener("test",ol,ol),window.removeEventListener("test",ol,ol)}catch{fd=!1}var Di=null,hd=null,Fo=null;function _g(){if(Fo)return Fo;var n,i=hd,l=i.length,u,x="value"in Di?Di.value:Di.textContent,v=x.length;for(n=0;n=dl),Cg=" ",Tg=!1;function Ag(n,i){switch(n){case"keyup":return W2.indexOf(i.keyCode)!==-1;case"keydown":return i.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Mg(n){return n=n.detail,typeof n=="object"&&"data"in n?n.data:null}var ss=!1;function eS(n,i){switch(n){case"compositionend":return Mg(i);case"keypress":return i.which!==32?null:(Tg=!0,Cg);case"textInput":return n=i.data,n===Cg&&Tg?null:n;default:return null}}function tS(n,i){if(ss)return n==="compositionend"||!bd&&Ag(n,i)?(n=_g(),Fo=hd=Di=null,ss=!1,n):null;switch(n){case"paste":return null;case"keypress":if(!(i.ctrlKey||i.altKey||i.metaKey)||i.ctrlKey&&i.altKey){if(i.char&&1=i)return{node:l,offset:i-n};n=u}e:{for(;l;){if(l.nextSibling){l=l.nextSibling;break e}l=l.parentNode}l=void 0}l=Bg(l)}}function Hg(n,i){return n&&i?n===i?!0:n&&n.nodeType===3?!1:i&&i.nodeType===3?Hg(n,i.parentNode):"contains"in n?n.contains(i):n.compareDocumentPosition?!!(n.compareDocumentPosition(i)&16):!1:!1}function $g(n){n=n!=null&&n.ownerDocument!=null&&n.ownerDocument.defaultView!=null?n.ownerDocument.defaultView:window;for(var i=Mi(n.document);i instanceof n.HTMLIFrameElement;){try{var l=typeof i.contentWindow.location.href=="string"}catch{l=!1}if(l)n=i.contentWindow;else break;i=Mi(n.document)}return i}function _d(n){var i=n&&n.nodeName&&n.nodeName.toLowerCase();return i&&(i==="input"&&(n.type==="text"||n.type==="search"||n.type==="tel"||n.type==="url"||n.type==="password")||i==="textarea"||n.contentEditable==="true")}var cS=ti&&"documentMode"in document&&11>=document.documentMode,ls=null,wd=null,pl=null,Ed=!1;function qg(n,i,l){var u=l.window===l?l.document:l.nodeType===9?l:l.ownerDocument;Ed||ls==null||ls!==Mi(u)||(u=ls,"selectionStart"in u&&_d(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}),pl&&ml(pl,u)||(pl=u,u=Ic(wd,"onSelect"),0>=A,x-=A,Hr=1<<32-ut(i)+x|l<Ke?(at=je,je=null):at=je.sibling;var mt=oe(ae,je,se[Ke],pe);if(mt===null){je===null&&(je=at);break}n&&je&&mt.alternate===null&&i(ae,je),ie=v(mt,ie,Ke),ht===null?Ie=mt:ht.sibling=mt,ht=mt,je=at}if(Ke===se.length)return l(ae,je),lt&&ri(ae,Ke),Ie;if(je===null){for(;KeKe?(at=je,je=null):at=je.sibling;var na=oe(ae,je,mt.value,pe);if(na===null){je===null&&(je=at);break}n&&je&&na.alternate===null&&i(ae,je),ie=v(na,ie,Ke),ht===null?Ie=na:ht.sibling=na,ht=na,je=at}if(mt.done)return l(ae,je),lt&&ri(ae,Ke),Ie;if(je===null){for(;!mt.done;Ke++,mt=se.next())mt=ge(ae,mt.value,pe),mt!==null&&(ie=v(mt,ie,Ke),ht===null?Ie=mt:ht.sibling=mt,ht=mt);return lt&&ri(ae,Ke),Ie}for(je=u(je);!mt.done;Ke++,mt=se.next())mt=de(je,ae,Ke,mt.value,pe),mt!==null&&(n&&mt.alternate!==null&&je.delete(mt.key===null?Ke:mt.key),ie=v(mt,ie,Ke),ht===null?Ie=mt:ht.sibling=mt,ht=mt);return n&&je.forEach(function(Ak){return i(ae,Ak)}),lt&&ri(ae,Ke),Ie}function Nt(ae,ie,se,pe){if(typeof se=="object"&&se!==null&&se.type===E&&se.key===null&&(se=se.props.children),typeof se=="object"&&se!==null){switch(se.$$typeof){case b:e:{for(var Ie=se.key;ie!==null;){if(ie.key===Ie){if(Ie=se.type,Ie===E){if(ie.tag===7){l(ae,ie.sibling),pe=x(ie,se.props.children),pe.return=ae,ae=pe;break e}}else if(ie.elementType===Ie||typeof Ie=="object"&&Ie!==null&&Ie.$$typeof===I&&Aa(Ie)===ie.type){l(ae,ie.sibling),pe=x(ie,se.props),_l(pe,se),pe.return=ae,ae=pe;break e}l(ae,ie);break}else i(ae,ie);ie=ie.sibling}se.type===E?(pe=Na(se.props.children,ae.mode,pe,se.key),pe.return=ae,ae=pe):(pe=ec(se.type,se.key,se.props,null,ae.mode,pe),_l(pe,se),pe.return=ae,ae=pe)}return A(ae);case _:e:{for(Ie=se.key;ie!==null;){if(ie.key===Ie)if(ie.tag===4&&ie.stateNode.containerInfo===se.containerInfo&&ie.stateNode.implementation===se.implementation){l(ae,ie.sibling),pe=x(ie,se.children||[]),pe.return=ae,ae=pe;break e}else{l(ae,ie);break}else i(ae,ie);ie=ie.sibling}pe=Md(se,ae.mode,pe),pe.return=ae,ae=pe}return A(ae);case I:return se=Aa(se),Nt(ae,ie,se,pe)}if($(se))return Ae(ae,ie,se,pe);if(V(se)){if(Ie=V(se),typeof Ie!="function")throw Error(a(150));return se=Ie.call(se),He(ae,ie,se,pe)}if(typeof se.then=="function")return Nt(ae,ie,lc(se),pe);if(se.$$typeof===N)return Nt(ae,ie,rc(ae,se),pe);oc(ae,se)}return typeof se=="string"&&se!==""||typeof se=="number"||typeof se=="bigint"?(se=""+se,ie!==null&&ie.tag===6?(l(ae,ie.sibling),pe=x(ie,se),pe.return=ae,ae=pe):(l(ae,ie),pe=Ad(se,ae.mode,pe),pe.return=ae,ae=pe),A(ae)):l(ae,ie)}return function(ae,ie,se,pe){try{vl=0;var Ie=Nt(ae,ie,se,pe);return bs=null,Ie}catch(je){if(je===xs||je===ac)throw je;var ht=Zn(29,je,null,ae.mode);return ht.lanes=pe,ht.return=ae,ht}finally{}}}var Oa=dx(!0),fx=dx(!1),Ui=!1;function qd(n){n.updateQueue={baseState:n.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function Pd(n,i){n=n.updateQueue,i.updateQueue===n&&(i.updateQueue={baseState:n.baseState,firstBaseUpdate:n.firstBaseUpdate,lastBaseUpdate:n.lastBaseUpdate,shared:n.shared,callbacks:null})}function Hi(n){return{lane:n,tag:0,payload:null,callback:null,next:null}}function $i(n,i,l){var u=n.updateQueue;if(u===null)return null;if(u=u.shared,(pt&2)!==0){var x=u.pending;return x===null?i.next=i:(i.next=x.next,x.next=i),u.pending=i,i=Jo(n),Kg(n,null,l),i}return Wo(n,u,i,l),Jo(n)}function wl(n,i,l){if(i=i.updateQueue,i!==null&&(i=i.shared,(l&4194048)!==0)){var u=i.lanes;u&=n.pendingLanes,l|=u,i.lanes=l,Ue(n,l)}}function Fd(n,i){var l=n.updateQueue,u=n.alternate;if(u!==null&&(u=u.updateQueue,l===u)){var x=null,v=null;if(l=l.firstBaseUpdate,l!==null){do{var A={lane:l.lane,tag:l.tag,payload:l.payload,callback:null,next:null};v===null?x=v=A:v=v.next=A,l=l.next}while(l!==null);v===null?x=v=i:v=v.next=i}else x=v=i;l={baseState:u.baseState,firstBaseUpdate:x,lastBaseUpdate:v,shared:u.shared,callbacks:u.callbacks},n.updateQueue=l;return}n=l.lastBaseUpdate,n===null?l.firstBaseUpdate=i:n.next=i,l.lastBaseUpdate=i}var Gd=!1;function El(){if(Gd){var n=gs;if(n!==null)throw n}}function Nl(n,i,l,u){Gd=!1;var x=n.updateQueue;Ui=!1;var v=x.firstBaseUpdate,A=x.lastBaseUpdate,F=x.shared.pending;if(F!==null){x.shared.pending=null;var ne=F,le=ne.next;ne.next=null,A===null?v=le:A.next=le,A=ne;var he=n.alternate;he!==null&&(he=he.updateQueue,F=he.lastBaseUpdate,F!==A&&(F===null?he.firstBaseUpdate=le:F.next=le,he.lastBaseUpdate=ne))}if(v!==null){var ge=x.baseState;A=0,he=le=ne=null,F=v;do{var oe=F.lane&-536870913,de=oe!==F.lane;if(de?(it&oe)===oe:(u&oe)===oe){oe!==0&&oe===ps&&(Gd=!0),he!==null&&(he=he.next={lane:0,tag:F.tag,payload:F.payload,callback:null,next:null});e:{var Ae=n,He=F;oe=i;var Nt=l;switch(He.tag){case 1:if(Ae=He.payload,typeof Ae=="function"){ge=Ae.call(Nt,ge,oe);break e}ge=Ae;break e;case 3:Ae.flags=Ae.flags&-65537|128;case 0:if(Ae=He.payload,oe=typeof Ae=="function"?Ae.call(Nt,ge,oe):Ae,oe==null)break e;ge=g({},ge,oe);break e;case 2:Ui=!0}}oe=F.callback,oe!==null&&(n.flags|=64,de&&(n.flags|=8192),de=x.callbacks,de===null?x.callbacks=[oe]:de.push(oe))}else de={lane:oe,tag:F.tag,payload:F.payload,callback:F.callback,next:null},he===null?(le=he=de,ne=ge):he=he.next=de,A|=oe;if(F=F.next,F===null){if(F=x.shared.pending,F===null)break;de=F,F=de.next,de.next=null,x.lastBaseUpdate=de,x.shared.pending=null}}while(!0);he===null&&(ne=ge),x.baseState=ne,x.firstBaseUpdate=le,x.lastBaseUpdate=he,v===null&&(x.shared.lanes=0),Vi|=A,n.lanes=A,n.memoizedState=ge}}function hx(n,i){if(typeof n!="function")throw Error(a(191,n));n.call(i)}function mx(n,i){var l=n.callbacks;if(l!==null)for(n.callbacks=null,n=0;nv?v:8;var A=O.T,F={};O.T=F,df(n,!1,i,l);try{var ne=x(),le=O.S;if(le!==null&&le(F,ne),ne!==null&&typeof ne=="object"&&typeof ne.then=="function"){var he=bS(ne,u);Cl(n,i,he,tr(n))}else Cl(n,i,u,tr(n))}catch(ge){Cl(n,i,{then:function(){},status:"rejected",reason:ge},tr())}finally{H.p=v,A!==null&&F.types!==null&&(A.types=F.types),O.T=A}}function NS(){}function cf(n,i,l,u){if(n.tag!==5)throw Error(a(476));var x=Vx(n).queue;Gx(n,x,i,K,l===null?NS:function(){return Yx(n),l(u)})}function Vx(n){var i=n.memoizedState;if(i!==null)return i;i={memoizedState:K,baseState:K,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:li,lastRenderedState:K},next:null};var l={};return i.next={memoizedState:l,baseState:l,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:li,lastRenderedState:l},next:null},n.memoizedState=i,n=n.alternate,n!==null&&(n.memoizedState=i),i}function Yx(n){var i=Vx(n);i.next===null&&(i=n.alternate.memoizedState),Cl(n,i.next.queue,{},tr())}function uf(){return vn(Fl)}function Xx(){return Wt().memoizedState}function Kx(){return Wt().memoizedState}function SS(n){for(var i=n.return;i!==null;){switch(i.tag){case 24:case 3:var l=tr();n=Hi(l);var u=$i(i,n,l);u!==null&&(Pn(u,i,l),wl(u,i,l)),i={cache:Bd()},n.payload=i;return}i=i.return}}function kS(n,i,l){var u=tr();l={lane:u,revertLane:0,gesture:null,action:l,hasEagerState:!1,eagerState:null,next:null},bc(n)?Qx(i,l):(l=Cd(n,i,l,u),l!==null&&(Pn(l,n,u),Wx(l,i,u)))}function Zx(n,i,l){var u=tr();Cl(n,i,l,u)}function Cl(n,i,l,u){var x={lane:u,revertLane:0,gesture:null,action:l,hasEagerState:!1,eagerState:null,next:null};if(bc(n))Qx(i,x);else{var v=n.alternate;if(n.lanes===0&&(v===null||v.lanes===0)&&(v=i.lastRenderedReducer,v!==null))try{var A=i.lastRenderedState,F=v(A,l);if(x.hasEagerState=!0,x.eagerState=F,Kn(F,A))return Wo(n,i,x,0),kt===null&&Qo(),!1}catch{}finally{}if(l=Cd(n,i,x,u),l!==null)return Pn(l,n,u),Wx(l,i,u),!0}return!1}function df(n,i,l,u){if(u={lane:2,revertLane:Pf(),gesture:null,action:u,hasEagerState:!1,eagerState:null,next:null},bc(n)){if(i)throw Error(a(479))}else i=Cd(n,l,u,2),i!==null&&Pn(i,n,2)}function bc(n){var i=n.alternate;return n===Xe||i!==null&&i===Xe}function Qx(n,i){vs=dc=!0;var l=n.pending;l===null?i.next=i:(i.next=l.next,l.next=i),n.pending=i}function Wx(n,i,l){if((l&4194048)!==0){var u=i.lanes;u&=n.pendingLanes,l|=u,i.lanes=l,Ue(n,l)}}var Tl={readContext:vn,use:mc,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};Tl.useEffectEvent=Gt;var Jx={readContext:vn,use:mc,useCallback:function(n,i){return Dn().memoizedState=[n,i===void 0?null:i],n},useContext:vn,useEffect:zx,useImperativeHandle:function(n,i,l){l=l!=null?l.concat([n]):null,gc(4194308,4,Hx.bind(null,i,n),l)},useLayoutEffect:function(n,i){return gc(4194308,4,n,i)},useInsertionEffect:function(n,i){gc(4,2,n,i)},useMemo:function(n,i){var l=Dn();i=i===void 0?null:i;var u=n();if(Ra){Jt(!0);try{n()}finally{Jt(!1)}}return l.memoizedState=[u,i],u},useReducer:function(n,i,l){var u=Dn();if(l!==void 0){var x=l(i);if(Ra){Jt(!0);try{l(i)}finally{Jt(!1)}}}else x=i;return u.memoizedState=u.baseState=x,n={pending:null,lanes:0,dispatch:null,lastRenderedReducer:n,lastRenderedState:x},u.queue=n,n=n.dispatch=kS.bind(null,Xe,n),[u.memoizedState,n]},useRef:function(n){var i=Dn();return n={current:n},i.memoizedState=n},useState:function(n){n=rf(n);var i=n.queue,l=Zx.bind(null,Xe,i);return i.dispatch=l,[n.memoizedState,l]},useDebugValue:lf,useDeferredValue:function(n,i){var l=Dn();return of(l,n,i)},useTransition:function(){var n=rf(!1);return n=Gx.bind(null,Xe,n.queue,!0,!1),Dn().memoizedState=n,[!1,n]},useSyncExternalStore:function(n,i,l){var u=Xe,x=Dn();if(lt){if(l===void 0)throw Error(a(407));l=l()}else{if(l=i(),kt===null)throw Error(a(349));(it&127)!==0||vx(u,i,l)}x.memoizedState=l;var v={value:l,getSnapshot:i};return x.queue=v,zx(wx.bind(null,u,v,n),[n]),u.flags|=2048,ws(9,{destroy:void 0},_x.bind(null,u,v,l,i),null),l},useId:function(){var n=Dn(),i=kt.identifierPrefix;if(lt){var l=$r,u=Hr;l=(u&~(1<<32-ut(u)-1)).toString(32)+l,i="_"+i+"R_"+l,l=fc++,0<\/script>",v=v.removeChild(v.firstChild);break;case"select":v=typeof u.is=="string"?A.createElement("select",{is:u.is}):A.createElement("select"),u.multiple?v.multiple=!0:u.size&&(v.size=u.size);break;default:v=typeof u.is=="string"?A.createElement(x,{is:u.is}):A.createElement(x)}}v[Ut]=i,v[pn]=u;e:for(A=i.child;A!==null;){if(A.tag===5||A.tag===6)v.appendChild(A.stateNode);else if(A.tag!==4&&A.tag!==27&&A.child!==null){A.child.return=A,A=A.child;continue}if(A===i)break e;for(;A.sibling===null;){if(A.return===null||A.return===i)break e;A=A.return}A.sibling.return=A.return,A=A.sibling}i.stateNode=v;e:switch(wn(v,x,u),x){case"button":case"input":case"select":case"textarea":u=!!u.autoFocus;break e;case"img":u=!0;break e;default:u=!1}u&&ci(i)}}return Dt(i),Sf(i,i.type,n===null?null:n.memoizedProps,i.pendingProps,l),null;case 6:if(n&&i.stateNode!=null)n.memoizedProps!==u&&ci(i);else{if(typeof u!="string"&&i.stateNode===null)throw Error(a(166));if(n=Q.current,hs(i)){if(n=i.stateNode,l=i.memoizedProps,u=null,x=yn,x!==null)switch(x.tag){case 27:case 5:u=x.memoizedProps}n[Ut]=i,n=!!(n.nodeValue===l||u!==null&&u.suppressHydrationWarning===!0||b0(n.nodeValue,l)),n||Ii(i,!0)}else n=Bc(n).createTextNode(u),n[Ut]=i,i.stateNode=n}return Dt(i),null;case 31:if(l=i.memoizedState,n===null||n.memoizedState!==null){if(u=hs(i),l!==null){if(n===null){if(!u)throw Error(a(318));if(n=i.memoizedState,n=n!==null?n.dehydrated:null,!n)throw Error(a(557));n[Ut]=i}else Sa(),(i.flags&128)===0&&(i.memoizedState=null),i.flags|=4;Dt(i),n=!1}else l=Dd(),n!==null&&n.memoizedState!==null&&(n.memoizedState.hydrationErrors=l),n=!0;if(!n)return i.flags&256?(Wn(i),i):(Wn(i),null);if((i.flags&128)!==0)throw Error(a(558))}return Dt(i),null;case 13:if(u=i.memoizedState,n===null||n.memoizedState!==null&&n.memoizedState.dehydrated!==null){if(x=hs(i),u!==null&&u.dehydrated!==null){if(n===null){if(!x)throw Error(a(318));if(x=i.memoizedState,x=x!==null?x.dehydrated:null,!x)throw Error(a(317));x[Ut]=i}else Sa(),(i.flags&128)===0&&(i.memoizedState=null),i.flags|=4;Dt(i),x=!1}else x=Dd(),n!==null&&n.memoizedState!==null&&(n.memoizedState.hydrationErrors=x),x=!0;if(!x)return i.flags&256?(Wn(i),i):(Wn(i),null)}return Wn(i),(i.flags&128)!==0?(i.lanes=l,i):(l=u!==null,n=n!==null&&n.memoizedState!==null,l&&(u=i.child,x=null,u.alternate!==null&&u.alternate.memoizedState!==null&&u.alternate.memoizedState.cachePool!==null&&(x=u.alternate.memoizedState.cachePool.pool),v=null,u.memoizedState!==null&&u.memoizedState.cachePool!==null&&(v=u.memoizedState.cachePool.pool),v!==x&&(u.flags|=2048)),l!==n&&l&&(i.child.flags|=8192),Ec(i,i.updateQueue),Dt(i),null);case 4:return te(),n===null&&Yf(i.stateNode.containerInfo),Dt(i),null;case 10:return ai(i.type),Dt(i),null;case 19:if(Y(Qt),u=i.memoizedState,u===null)return Dt(i),null;if(x=(i.flags&128)!==0,v=u.rendering,v===null)if(x)Ml(u,!1);else{if(Vt!==0||n!==null&&(n.flags&128)!==0)for(n=i.child;n!==null;){if(v=uc(n),v!==null){for(i.flags|=128,Ml(u,!1),n=v.updateQueue,i.updateQueue=n,Ec(i,n),i.subtreeFlags=0,n=l,l=i.child;l!==null;)Zg(l,n),l=l.sibling;return L(Qt,Qt.current&1|2),lt&&ri(i,u.treeForkCount),i.child}n=n.sibling}u.tail!==null&&ct()>Tc&&(i.flags|=128,x=!0,Ml(u,!1),i.lanes=4194304)}else{if(!x)if(n=uc(v),n!==null){if(i.flags|=128,x=!0,n=n.updateQueue,i.updateQueue=n,Ec(i,n),Ml(u,!0),u.tail===null&&u.tailMode==="hidden"&&!v.alternate&&!lt)return Dt(i),null}else 2*ct()-u.renderingStartTime>Tc&&l!==536870912&&(i.flags|=128,x=!0,Ml(u,!1),i.lanes=4194304);u.isBackwards?(v.sibling=i.child,i.child=v):(n=u.last,n!==null?n.sibling=v:i.child=v,u.last=v)}return u.tail!==null?(n=u.tail,u.rendering=n,u.tail=n.sibling,u.renderingStartTime=ct(),n.sibling=null,l=Qt.current,L(Qt,x?l&1|2:l&1),lt&&ri(i,u.treeForkCount),n):(Dt(i),null);case 22:case 23:return Wn(i),Yd(),u=i.memoizedState!==null,n!==null?n.memoizedState!==null!==u&&(i.flags|=8192):u&&(i.flags|=8192),u?(l&536870912)!==0&&(i.flags&128)===0&&(Dt(i),i.subtreeFlags&6&&(i.flags|=8192)):Dt(i),l=i.updateQueue,l!==null&&Ec(i,l.retryQueue),l=null,n!==null&&n.memoizedState!==null&&n.memoizedState.cachePool!==null&&(l=n.memoizedState.cachePool.pool),u=null,i.memoizedState!==null&&i.memoizedState.cachePool!==null&&(u=i.memoizedState.cachePool.pool),u!==l&&(i.flags|=2048),n!==null&&Y(Ta),null;case 24:return l=null,n!==null&&(l=n.memoizedState.cache),i.memoizedState.cache!==l&&(i.flags|=2048),ai(tn),Dt(i),null;case 25:return null;case 30:return null}throw Error(a(156,i.tag))}function OS(n,i){switch(Rd(i),i.tag){case 1:return n=i.flags,n&65536?(i.flags=n&-65537|128,i):null;case 3:return ai(tn),te(),n=i.flags,(n&65536)!==0&&(n&128)===0?(i.flags=n&-65537|128,i):null;case 26:case 27:case 5:return fe(i),null;case 31:if(i.memoizedState!==null){if(Wn(i),i.alternate===null)throw Error(a(340));Sa()}return n=i.flags,n&65536?(i.flags=n&-65537|128,i):null;case 13:if(Wn(i),n=i.memoizedState,n!==null&&n.dehydrated!==null){if(i.alternate===null)throw Error(a(340));Sa()}return n=i.flags,n&65536?(i.flags=n&-65537|128,i):null;case 19:return Y(Qt),null;case 4:return te(),null;case 10:return ai(i.type),null;case 22:case 23:return Wn(i),Yd(),n!==null&&Y(Ta),n=i.flags,n&65536?(i.flags=n&-65537|128,i):null;case 24:return ai(tn),null;case 25:return null;default:return null}}function Eb(n,i){switch(Rd(i),i.tag){case 3:ai(tn),te();break;case 26:case 27:case 5:fe(i);break;case 4:te();break;case 31:i.memoizedState!==null&&Wn(i);break;case 13:Wn(i);break;case 19:Y(Qt);break;case 10:ai(i.type);break;case 22:case 23:Wn(i),Yd(),n!==null&&Y(Ta);break;case 24:ai(tn)}}function Ol(n,i){try{var l=i.updateQueue,u=l!==null?l.lastEffect:null;if(u!==null){var x=u.next;l=x;do{if((l.tag&n)===n){u=void 0;var v=l.create,A=l.inst;u=v(),A.destroy=u}l=l.next}while(l!==x)}}catch(F){yt(i,i.return,F)}}function Fi(n,i,l){try{var u=i.updateQueue,x=u!==null?u.lastEffect:null;if(x!==null){var v=x.next;u=v;do{if((u.tag&n)===n){var A=u.inst,F=A.destroy;if(F!==void 0){A.destroy=void 0,x=i;var ne=l,le=F;try{le()}catch(he){yt(x,ne,he)}}}u=u.next}while(u!==v)}}catch(he){yt(i,i.return,he)}}function Nb(n){var i=n.updateQueue;if(i!==null){var l=n.stateNode;try{mx(i,l)}catch(u){yt(n,n.return,u)}}}function Sb(n,i,l){l.props=ja(n.type,n.memoizedProps),l.state=n.memoizedState;try{l.componentWillUnmount()}catch(u){yt(n,i,u)}}function Rl(n,i){try{var l=n.ref;if(l!==null){switch(n.tag){case 26:case 27:case 5:var u=n.stateNode;break;case 30:u=n.stateNode;break;default:u=n.stateNode}typeof l=="function"?n.refCleanup=l(u):l.current=u}}catch(x){yt(n,i,x)}}function qr(n,i){var l=n.ref,u=n.refCleanup;if(l!==null)if(typeof u=="function")try{u()}catch(x){yt(n,i,x)}finally{n.refCleanup=null,n=n.alternate,n!=null&&(n.refCleanup=null)}else if(typeof l=="function")try{l(null)}catch(x){yt(n,i,x)}else l.current=null}function kb(n){var i=n.type,l=n.memoizedProps,u=n.stateNode;try{e:switch(i){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(x){yt(n,n.return,x)}}function kf(n,i,l){try{var u=n.stateNode;JS(u,n.type,l,i),u[pn]=i}catch(x){yt(n,n.return,x)}}function Cb(n){return n.tag===5||n.tag===3||n.tag===26||n.tag===27&&Qi(n.type)||n.tag===4}function Cf(n){e:for(;;){for(;n.sibling===null;){if(n.return===null||Cb(n.return))return null;n=n.return}for(n.sibling.return=n.return,n=n.sibling;n.tag!==5&&n.tag!==6&&n.tag!==18;){if(n.tag===27&&Qi(n.type)||n.flags&2||n.child===null||n.tag===4)continue e;n.child.return=n,n=n.child}if(!(n.flags&2))return n.stateNode}}function Tf(n,i,l){var u=n.tag;if(u===5||u===6)n=n.stateNode,i?(l.nodeType===9?l.body:l.nodeName==="HTML"?l.ownerDocument.body:l).insertBefore(n,i):(i=l.nodeType===9?l.body:l.nodeName==="HTML"?l.ownerDocument.body:l,i.appendChild(n),l=l._reactRootContainer,l!=null||i.onclick!==null||(i.onclick=_e));else if(u!==4&&(u===27&&Qi(n.type)&&(l=n.stateNode,i=null),n=n.child,n!==null))for(Tf(n,i,l),n=n.sibling;n!==null;)Tf(n,i,l),n=n.sibling}function Nc(n,i,l){var u=n.tag;if(u===5||u===6)n=n.stateNode,i?l.insertBefore(n,i):l.appendChild(n);else if(u!==4&&(u===27&&Qi(n.type)&&(l=n.stateNode),n=n.child,n!==null))for(Nc(n,i,l),n=n.sibling;n!==null;)Nc(n,i,l),n=n.sibling}function Tb(n){var i=n.stateNode,l=n.memoizedProps;try{for(var u=n.type,x=i.attributes;x.length;)i.removeAttributeNode(x[0]);wn(i,u,l),i[Ut]=n,i[pn]=l}catch(v){yt(n,n.return,v)}}var ui=!1,an=!1,Af=!1,Ab=typeof WeakSet=="function"?WeakSet:Set,xn=null;function RS(n,i){if(n=n.containerInfo,Zf=Gc,n=$g(n),_d(n)){if("selectionStart"in n)var l={start:n.selectionStart,end:n.selectionEnd};else e:{l=(l=n.ownerDocument)&&l.defaultView||window;var u=l.getSelection&&l.getSelection();if(u&&u.rangeCount!==0){l=u.anchorNode;var x=u.anchorOffset,v=u.focusNode;u=u.focusOffset;try{l.nodeType,v.nodeType}catch{l=null;break e}var A=0,F=-1,ne=-1,le=0,he=0,ge=n,oe=null;t:for(;;){for(var de;ge!==l||x!==0&&ge.nodeType!==3||(F=A+x),ge!==v||u!==0&&ge.nodeType!==3||(ne=A+u),ge.nodeType===3&&(A+=ge.nodeValue.length),(de=ge.firstChild)!==null;)oe=ge,ge=de;for(;;){if(ge===n)break t;if(oe===l&&++le===x&&(F=A),oe===v&&++he===u&&(ne=A),(de=ge.nextSibling)!==null)break;ge=oe,oe=ge.parentNode}ge=de}l=F===-1||ne===-1?null:{start:F,end:ne}}else l=null}l=l||{start:0,end:0}}else l=null;for(Qf={focusedElem:n,selectionRange:l},Gc=!1,xn=i;xn!==null;)if(i=xn,n=i.child,(i.subtreeFlags&1028)!==0&&n!==null)n.return=i,xn=n;else for(;xn!==null;){switch(i=xn,v=i.alternate,n=i.flags,i.tag){case 0:if((n&4)!==0&&(n=i.updateQueue,n=n!==null?n.events:null,n!==null))for(l=0;l title"))),wn(v,u,l),v[Ut]=n,Ft(v),u=v;break e;case"link":var A=L0("link","href",x).get(u+(l.href||""));if(A){for(var F=0;FNt&&(A=Nt,Nt=He,He=A);var ae=Ug(F,He),ie=Ug(F,Nt);if(ae&&ie&&(de.rangeCount!==1||de.anchorNode!==ae.node||de.anchorOffset!==ae.offset||de.focusNode!==ie.node||de.focusOffset!==ie.offset)){var se=ge.createRange();se.setStart(ae.node,ae.offset),de.removeAllRanges(),He>Nt?(de.addRange(se),de.extend(ie.node,ie.offset)):(se.setEnd(ie.node,ie.offset),de.addRange(se))}}}}for(ge=[],de=F;de=de.parentNode;)de.nodeType===1&&ge.push({element:de,left:de.scrollLeft,top:de.scrollTop});for(typeof F.focus=="function"&&F.focus(),F=0;Fl?32:l,O.T=null,l=zf,zf=null;var v=Xi,A=pi;if(fn=0,Cs=Xi=null,pi=0,(pt&6)!==0)throw Error(a(331));var F=pt;if(pt|=4,Hb(v.current),Ib(v,v.current,A,l),pt=F,Bl(0,!1),At&&typeof At.onPostCommitFiberRoot=="function")try{At.onPostCommitFiberRoot(Zt,v)}catch{}return!0}finally{H.p=x,O.T=u,i0(n,i)}}function s0(n,i,l){i=ur(l,i),i=pf(n.stateNode,i,2),n=$i(n,i,2),n!==null&&(gt(n,2),Pr(n))}function yt(n,i,l){if(n.tag===3)s0(n,n,l);else for(;i!==null;){if(i.tag===3){s0(i,n,l);break}else if(i.tag===1){var u=i.stateNode;if(typeof i.type.getDerivedStateFromError=="function"||typeof u.componentDidCatch=="function"&&(Yi===null||!Yi.has(u))){n=ur(l,n),l=lb(2),u=$i(i,l,2),u!==null&&(ob(l,u,i,n),gt(u,2),Pr(u));break}}i=i.return}}function Hf(n,i,l){var u=n.pingCache;if(u===null){u=n.pingCache=new LS;var x=new Set;u.set(i,x)}else x=u.get(i),x===void 0&&(x=new Set,u.set(i,x));x.has(l)||(Rf=!0,x.add(l),n=HS.bind(null,n,i,l),i.then(n,n))}function HS(n,i,l){var u=n.pingCache;u!==null&&u.delete(i),n.pingedLanes|=n.suspendedLanes&l,n.warmLanes&=~l,kt===n&&(it&l)===l&&(Vt===4||Vt===3&&(it&62914560)===it&&300>ct()-Cc?(pt&2)===0&&Ts(n,0):jf|=l,ks===it&&(ks=0)),Pr(n)}function l0(n,i){i===0&&(i=Pe()),n=Ea(n,i),n!==null&&(gt(n,i),Pr(n))}function $S(n){var i=n.memoizedState,l=0;i!==null&&(l=i.retryLane),l0(n,l)}function qS(n,i){var l=0;switch(n.tag){case 31:case 13:var u=n.stateNode,x=n.memoizedState;x!==null&&(l=x.retryLane);break;case 19:u=n.stateNode;break;case 22:u=n.stateNode._retryCache;break;default:throw Error(a(314))}u!==null&&u.delete(i),l0(n,l)}function PS(n,i){return Pt(n,i)}var Dc=null,Ms=null,$f=!1,Lc=!1,qf=!1,Zi=0;function Pr(n){n!==Ms&&n.next===null&&(Ms===null?Dc=Ms=n:Ms=Ms.next=n),Lc=!0,$f||($f=!0,GS())}function Bl(n,i){if(!qf&&Lc){qf=!0;do for(var l=!1,u=Dc;u!==null;){if(n!==0){var x=u.pendingLanes;if(x===0)var v=0;else{var A=u.suspendedLanes,F=u.pingedLanes;v=(1<<31-ut(42|n)+1)-1,v&=x&~(A&~F),v=v&201326741?v&201326741|1:v?v|2:0}v!==0&&(l=!0,d0(u,v))}else v=it,v=re(u,u===kt?v:0,u.cancelPendingCommit!==null||u.timeoutHandle!==-1),(v&3)===0||me(u,v)||(l=!0,d0(u,v));u=u.next}while(l);qf=!1}}function FS(){o0()}function o0(){Lc=$f=!1;var n=0;Zi!==0&&tk()&&(n=Zi);for(var i=ct(),l=null,u=Dc;u!==null;){var x=u.next,v=c0(u,i);v===0?(u.next=null,l===null?Dc=x:l.next=x,x===null&&(Ms=l)):(l=u,(n!==0||(v&3)!==0)&&(Lc=!0)),u=x}fn!==0&&fn!==5||Bl(n),Zi!==0&&(Zi=0)}function c0(n,i){for(var l=n.suspendedLanes,u=n.pingedLanes,x=n.expirationTimes,v=n.pendingLanes&-62914561;0F)break;var he=ne.transferSize,ge=ne.initiatorType;he&&y0(ge)&&(ne=ne.responseEnd,A+=he*(ne"u"?null:document;function O0(n,i,l){var u=Os;if(u&&typeof i=="string"&&i){var x=Cn(i);x='link[rel="'+n+'"][href="'+x+'"]',typeof l=="string"&&(x+='[crossorigin="'+l+'"]'),M0.has(x)||(M0.add(x),n={rel:n,crossOrigin:l,href:i},u.querySelector(x)===null&&(i=u.createElement("link"),wn(i,"link",n),Ft(i),u.head.appendChild(i)))}}function uk(n){gi.D(n),O0("dns-prefetch",n,null)}function dk(n,i){gi.C(n,i),O0("preconnect",n,i)}function fk(n,i,l){gi.L(n,i,l);var u=Os;if(u&&n&&i){var x='link[rel="preload"][as="'+Cn(i)+'"]';i==="image"&&l&&l.imageSrcSet?(x+='[imagesrcset="'+Cn(l.imageSrcSet)+'"]',typeof l.imageSizes=="string"&&(x+='[imagesizes="'+Cn(l.imageSizes)+'"]')):x+='[href="'+Cn(n)+'"]';var v=x;switch(i){case"style":v=Rs(n);break;case"script":v=js(n)}gr.has(v)||(n=g({rel:"preload",href:i==="image"&&l&&l.imageSrcSet?void 0:n,as:i},l),gr.set(v,n),u.querySelector(x)!==null||i==="style"&&u.querySelector(ql(v))||i==="script"&&u.querySelector(Pl(v))||(i=u.createElement("link"),wn(i,"link",n),Ft(i),u.head.appendChild(i)))}}function hk(n,i){gi.m(n,i);var l=Os;if(l&&n){var u=i&&typeof i.as=="string"?i.as:"script",x='link[rel="modulepreload"][as="'+Cn(u)+'"][href="'+Cn(n)+'"]',v=x;switch(u){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":v=js(n)}if(!gr.has(v)&&(n=g({rel:"modulepreload",href:n},i),gr.set(v,n),l.querySelector(x)===null)){switch(u){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(l.querySelector(Pl(v)))return}u=l.createElement("link"),wn(u,"link",n),Ft(u),l.head.appendChild(u)}}}function mk(n,i,l){gi.S(n,i,l);var u=Os;if(u&&n){var x=Br(u).hoistableStyles,v=Rs(n);i=i||"default";var A=x.get(v);if(!A){var F={loading:0,preload:null};if(A=u.querySelector(ql(v)))F.loading=5;else{n=g({rel:"stylesheet",href:n,"data-precedence":i},l),(l=gr.get(v))&&ih(n,l);var ne=A=u.createElement("link");Ft(ne),wn(ne,"link",n),ne._p=new Promise(function(le,he){ne.onload=le,ne.onerror=he}),ne.addEventListener("load",function(){F.loading|=1}),ne.addEventListener("error",function(){F.loading|=2}),F.loading|=4,Hc(A,i,u)}A={type:"stylesheet",instance:A,count:1,state:F},x.set(v,A)}}}function pk(n,i){gi.X(n,i);var l=Os;if(l&&n){var u=Br(l).hoistableScripts,x=js(n),v=u.get(x);v||(v=l.querySelector(Pl(x)),v||(n=g({src:n,async:!0},i),(i=gr.get(x))&&ah(n,i),v=l.createElement("script"),Ft(v),wn(v,"link",n),l.head.appendChild(v)),v={type:"script",instance:v,count:1,state:null},u.set(x,v))}}function gk(n,i){gi.M(n,i);var l=Os;if(l&&n){var u=Br(l).hoistableScripts,x=js(n),v=u.get(x);v||(v=l.querySelector(Pl(x)),v||(n=g({src:n,async:!0,type:"module"},i),(i=gr.get(x))&&ah(n,i),v=l.createElement("script"),Ft(v),wn(v,"link",n),l.head.appendChild(v)),v={type:"script",instance:v,count:1,state:null},u.set(x,v))}}function R0(n,i,l,u){var x=(x=Q.current)?Uc(x):null;if(!x)throw Error(a(446));switch(n){case"meta":case"title":return null;case"style":return typeof l.precedence=="string"&&typeof l.href=="string"?(i=Rs(l.href),l=Br(x).hoistableStyles,u=l.get(i),u||(u={type:"style",instance:null,count:0,state:null},l.set(i,u)),u):{type:"void",instance:null,count:0,state:null};case"link":if(l.rel==="stylesheet"&&typeof l.href=="string"&&typeof l.precedence=="string"){n=Rs(l.href);var v=Br(x).hoistableStyles,A=v.get(n);if(A||(x=x.ownerDocument||x,A={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},v.set(n,A),(v=x.querySelector(ql(n)))&&!v._p&&(A.instance=v,A.state.loading=5),gr.has(n)||(l={rel:"preload",as:"style",href:l.href,crossOrigin:l.crossOrigin,integrity:l.integrity,media:l.media,hrefLang:l.hrefLang,referrerPolicy:l.referrerPolicy},gr.set(n,l),v||xk(x,n,l,A.state))),i&&u===null)throw Error(a(528,""));return A}if(i&&u!==null)throw Error(a(529,""));return null;case"script":return i=l.async,l=l.src,typeof l=="string"&&i&&typeof i!="function"&&typeof i!="symbol"?(i=js(l),l=Br(x).hoistableScripts,u=l.get(i),u||(u={type:"script",instance:null,count:0,state:null},l.set(i,u)),u):{type:"void",instance:null,count:0,state:null};default:throw Error(a(444,n))}}function Rs(n){return'href="'+Cn(n)+'"'}function ql(n){return'link[rel="stylesheet"]['+n+"]"}function j0(n){return g({},n,{"data-precedence":n.precedence,precedence:null})}function xk(n,i,l,u){n.querySelector('link[rel="preload"][as="style"]['+i+"]")?u.loading=1:(i=n.createElement("link"),u.preload=i,i.addEventListener("load",function(){return u.loading|=1}),i.addEventListener("error",function(){return u.loading|=2}),wn(i,"link",l),Ft(i),n.head.appendChild(i))}function js(n){return'[src="'+Cn(n)+'"]'}function Pl(n){return"script[async]"+n}function D0(n,i,l){if(i.count++,i.instance===null)switch(i.type){case"style":var u=n.querySelector('style[data-href~="'+Cn(l.href)+'"]');if(u)return i.instance=u,Ft(u),u;var x=g({},l,{"data-href":l.href,"data-precedence":l.precedence,href:null,precedence:null});return u=(n.ownerDocument||n).createElement("style"),Ft(u),wn(u,"style",x),Hc(u,l.precedence,n),i.instance=u;case"stylesheet":x=Rs(l.href);var v=n.querySelector(ql(x));if(v)return i.state.loading|=4,i.instance=v,Ft(v),v;u=j0(l),(x=gr.get(x))&&ih(u,x),v=(n.ownerDocument||n).createElement("link"),Ft(v);var A=v;return A._p=new Promise(function(F,ne){A.onload=F,A.onerror=ne}),wn(v,"link",u),i.state.loading|=4,Hc(v,l.precedence,n),i.instance=v;case"script":return v=js(l.src),(x=n.querySelector(Pl(v)))?(i.instance=x,Ft(x),x):(u=l,(x=gr.get(v))&&(u=g({},l),ah(u,x)),n=n.ownerDocument||n,x=n.createElement("script"),Ft(x),wn(x,"link",u),n.head.appendChild(x),i.instance=x);case"void":return null;default:throw Error(a(443,i.type))}else i.type==="stylesheet"&&(i.state.loading&4)===0&&(u=i.instance,i.state.loading|=4,Hc(u,l.precedence,n));return i.instance}function Hc(n,i,l){for(var u=l.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),x=u.length?u[u.length-1]:null,v=x,A=0;A title"):null)}function bk(n,i,l){if(l===1||i.itemProp!=null)return!1;switch(n){case"meta":case"title":return!0;case"style":if(typeof i.precedence!="string"||typeof i.href!="string"||i.href==="")break;return!0;case"link":if(typeof i.rel!="string"||typeof i.href!="string"||i.href===""||i.onLoad||i.onError)break;switch(i.rel){case"stylesheet":return n=i.disabled,typeof i.precedence=="string"&&n==null;default:return!0}case"script":if(i.async&&typeof i.async!="function"&&typeof i.async!="symbol"&&!i.onLoad&&!i.onError&&i.src&&typeof i.src=="string")return!0}return!1}function I0(n){return!(n.type==="stylesheet"&&(n.state.loading&3)===0)}function yk(n,i,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 x=Rs(u.href),v=i.querySelector(ql(x));if(v){i=v._p,i!==null&&typeof i=="object"&&typeof i.then=="function"&&(n.count++,n=qc.bind(n),i.then(n,n)),l.state.loading|=4,l.instance=v,Ft(v);return}v=i.ownerDocument||i,u=j0(u),(x=gr.get(x))&&ih(u,x),v=v.createElement("link"),Ft(v);var A=v;A._p=new Promise(function(F,ne){A.onload=F,A.onerror=ne}),wn(v,"link",u),l.instance=v}n.stylesheets===null&&(n.stylesheets=new Map),n.stylesheets.set(l,i),(i=l.state.preload)&&(l.state.loading&3)===0&&(n.count++,l=qc.bind(n),i.addEventListener("load",l),i.addEventListener("error",l))}}var sh=0;function vk(n,i){return n.stylesheets&&n.count===0&&Fc(n,n.stylesheets),0sh?50:800)+i);return n.unsuspend=l,function(){n.unsuspend=null,clearTimeout(u),clearTimeout(x)}}:null}function qc(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)Fc(this,this.stylesheets);else if(this.unsuspend){var n=this.unsuspend;this.unsuspend=null,n()}}}var Pc=null;function Fc(n,i){n.stylesheets=null,n.unsuspend!==null&&(n.count++,Pc=new Map,i.forEach(_k,n),Pc=null,qc.call(n))}function _k(n,i){if(!(i.state.loading&4)){var l=Pc.get(n);if(l)var u=l.get(null);else{l=new Map,Pc.set(n,l);for(var x=n.querySelectorAll("link[data-precedence],style[data-precedence]"),v=0;v"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}return e(),ph.exports=zk(),ph.exports}var Bk=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 L_=(...e)=>e.filter((t,r,a)=>!!t&&t.trim()!==""&&a.indexOf(t)===r).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 Uk=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 Hk=e=>e.replace(/^([A-Z])|[\s-_]+(\w)/g,(t,r,a)=>a?a.toUpperCase():r.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 ly=e=>{const t=Hk(e);return t.charAt(0).toUpperCase()+t.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 $k={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 qk=e=>{for(const t in e)if(t.startsWith("aria-")||t==="role"||t==="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 Pk=ee.forwardRef(({color:e="currentColor",size:t=24,strokeWidth:r=2,absoluteStrokeWidth:a,className:s="",children:o,iconNode:c,...d},f)=>ee.createElement("svg",{ref:f,...$k,width:t,height:t,stroke:e,strokeWidth:a?Number(r)*24/Number(t):r,className:L_("lucide",s),...!o&&!qk(d)&&{"aria-hidden":"true"},...d},[...c.map(([h,p])=>ee.createElement(h,p)),...Array.isArray(o)?o:[o]]));/** + * @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 Te=(e,t)=>{const r=ee.forwardRef(({className:a,...s},o)=>ee.createElement(Pk,{ref:o,iconNode:t,className:L_(`lucide-${Uk(ly(e))}`,`lucide-${e}`,a),...s}));return r.displayName=ly(e),r};/** + * @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 Fk=[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]],Ep=Te("arrow-left",Fk);/** + * @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=[["path",{d:"M7 7h10v10",key:"1tivn9"}],["path",{d:"M7 17 17 7",key:"1vkiza"}]],z_=Te("arrow-up-right",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 Vk=[["path",{d:"m5 12 7-7 7 7",key:"hav0vg"}],["path",{d:"M12 19V5",key:"x0mq9r"}]],Yk=Te("arrow-up",Vk);/** + * @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=[["path",{d:"M4.929 4.929 19.07 19.071",key:"196cmz"}],["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]],I_=Te("ban",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 Kk=[["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=Te("bell-off",Kk);/** + * @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:"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"}]],Oo=Te("bot",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 Wk=[["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"}]],B_=Te("brain",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 Jk=[["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"}]],eC=Te("calendar-clock",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 tC=[["path",{d:"M18 6 7 17l-5-5",key:"116fxf"}],["path",{d:"m22 10-7.5 7.5L13 16",key:"ke71qq"}]],nC=Te("check-check",tC);/** + * @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 rC=[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]],Vs=Te("check",rC);/** + * @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 iC=[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]],po=Te("chevron-down",iC);/** + * @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 aC=[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]],sC=Te("chevron-right",aC);/** + * @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 lC=[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]],U_=Te("chevron-up",lC);/** + * @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 oC=[["path",{d:"m7 15 5 5 5-5",key:"1hf1tw"}],["path",{d:"m7 9 5-5 5 5",key:"sgt6xg"}]],cC=Te("chevrons-up-down",oC);/** + * @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 uC=[["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"}]],Gu=Te("circle-alert",uC);/** + * @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 dC=[["path",{d:"M21.801 10A10 10 0 1 1 17 3.335",key:"yps3ct"}],["path",{d:"m9 11 3 3L22 4",key:"1pflzl"}]],H_=Te("circle-check-big",dC);/** + * @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 fC=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]],Eu=Te("circle-check",fC);/** + * @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 hC=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["circle",{cx:"12",cy:"12",r:"1",key:"41hilf"}]],mC=Te("circle-dot",hC);/** + * @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 pC=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3",key:"1u773s"}],["path",{d:"M12 17h.01",key:"p32p05"}]],gC=Te("circle-question-mark",pC);/** + * @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 xC=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"9",x2:"15",y1:"15",y2:"9",key:"1dfufj"}]],bC=Te("circle-slash",xC);/** + * @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 yC=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]],$_=Te("circle",yC);/** + * @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 vC=[["rect",{width:"8",height:"4",x:"8",y:"2",rx:"1",ry:"1",key:"tgr4d6"}],["path",{d:"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2",key:"116196"}],["path",{d:"M12 11h4",key:"1jrz19"}],["path",{d:"M12 16h4",key:"n85exb"}],["path",{d:"M8 11h.01",key:"1dfujw"}],["path",{d:"M8 16h.01",key:"18s6g9"}]],q_=Te("clipboard-list",vC);/** + * @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 _C=[["path",{d:"M12 6v6l4 2",key:"mmk7yg"}],["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]],P_=Te("clock",_C);/** + * @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 wC=[["path",{d:"m16 18 6-6-6-6",key:"eg8j8"}],["path",{d:"m8 6-6 6 6 6",key:"ppft3o"}]],EC=Te("code",wC);/** + * @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 NC=[["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"}]],go=Te("copy",NC);/** + * @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 SC=[["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"}]],Vu=Te("crosshair",SC);/** + * @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 kC=[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"M10 14 21 3",key:"gplh6r"}],["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6",key:"a6xqqp"}]],oy=Te("external-link",kC);/** + * @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 CC=[["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"}]],TC=Te("eye",CC);/** + * @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 AC=[["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"}]],MC=Te("file-text",AC);/** + * @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 OC=[["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"}]],F_=Te("flag",OC);/** + * @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 RC=[["circle",{cx:"18",cy:"18",r:"3",key:"1xkwt0"}],["circle",{cx:"6",cy:"6",r:"3",key:"1lh9wr"}],["path",{d:"M6 21V9a9 9 0 0 0 9 9",key:"7kw0sc"}]],jC=Te("git-merge",RC);/** + * @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 DC=[["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"}]],LC=Te("git-pull-request",DC);/** + * @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 zC=[["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"}]],IC=Te("github",zC);/** + * @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 BC=[["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"}]],UC=Te("gitlab",BC);/** + * @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 HC=[["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"}]],G_=Te("globe",HC);/** + * @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 $C=[["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"}]],Ys=Te("history",$C);/** + * @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 qC=[["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"}]],PC=Te("image",qC);/** + * @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 FC=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 16v-4",key:"1dtifu"}],["path",{d:"M12 8h.01",key:"e9boi3"}]],GC=Te("info",FC);/** + * @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 VC=[["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"}]],YC=Te("list-todo",VC);/** + * @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 XC=[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]],Ps=Te("loader-circle",XC);/** + * @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 KC=[["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"}]],ZC=Te("lock",KC);/** + * @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 QC=[["path",{d:"m16 17 5-5-5-5",key:"1bji2h"}],["path",{d:"M21 12H9",key:"dn1m92"}],["path",{d:"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4",key:"1uf3rs"}]],WC=Te("log-out",QC);/** + * @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 JC=[["path",{d:"m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7",key:"132q7q"}],["rect",{x:"2",y:"4",width:"20",height:"16",rx:"2",key:"izxlao"}]],Np=Te("mail",JC);/** + * @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 eT=[["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"}]],yh=Te("message-circle",eT);/** + * @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 tT=[["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"}]],nT=Te("pencil",tT);/** + * @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 rT=[["path",{d:"M12 22v-5",key:"1ega77"}],["path",{d:"M15 8V2",key:"18g5xt"}],["path",{d:"M17 8a1 1 0 0 1 1 1v4a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4V9a1 1 0 0 1 1-1z",key:"1xoxul"}],["path",{d:"M9 8V2",key:"14iosj"}]],V_=Te("plug",rT);/** + * @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 iT=[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]],Y_=Te("plus",iT);/** + * @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 aT=[["path",{d:"M19.07 4.93A10 10 0 0 0 6.99 3.34",key:"z3du51"}],["path",{d:"M4 6h.01",key:"oypzma"}],["path",{d:"M2.29 9.62A10 10 0 1 0 21.31 8.35",key:"qzzz0"}],["path",{d:"M16.24 7.76A6 6 0 1 0 8.23 16.67",key:"1yjesh"}],["path",{d:"M12 18h.01",key:"mhygvu"}],["path",{d:"M17.99 11.66A6 6 0 0 1 15.77 16.67",key:"1u2y91"}],["circle",{cx:"12",cy:"12",r:"2",key:"1c9p78"}],["path",{d:"m13.41 10.59 5.66-5.66",key:"mhq4k0"}]],sT=Te("radar",aT);/** + * @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 lT=[["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"}]],oT=Te("refresh-cw",lT);/** + * @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 cT=[["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"}]],uT=Te("rocket",cT);/** + * @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 dT=[["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"}]],fT=Te("rotate-ccw",dT);/** + * @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 hT=[["path",{d:"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z",key:"1c8476"}],["path",{d:"M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7",key:"1ydtos"}],["path",{d:"M7 3v4a1 1 0 0 0 1 1h7",key:"t51u73"}]],mT=Te("save",hT);/** + * @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 pT=[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]],gT=Te("search",pT);/** + * @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 xT=[["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"}]],bT=Te("shield-alert",xT);/** + * @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 yT=[["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"}]],X_=Te("shield-check",yT);/** + * @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 vT=[["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"}]],_T=Te("shield",vT);/** + * @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 wT=[["path",{d:"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z",key:"1s2grr"}],["path",{d:"M20 2v4",key:"1rf3ol"}],["path",{d:"M22 4h-4",key:"gwowj6"}],["circle",{cx:"4",cy:"20",r:"2",key:"6kqj1y"}]],Fm=Te("sparkles",wT);/** + * @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 ET=[["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"}]],NT=Te("sticky-note",ET);/** + * @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 ST=[["path",{d:"M12 19h8",key:"baeox8"}],["path",{d:"m4 17 6-6-6-6",key:"1yngyt"}]],K_=Te("terminal",ST);/** + * @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 kT=[["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"}]],CT=Te("trash-2",kT);/** + * @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 TT=[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]],Nu=Te("triangle-alert",TT);/** + * @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 AT=[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["path",{d:"M16 3.128a4 4 0 0 1 0 7.744",key:"16gr8j"}],["path",{d:"M22 21v-2a4 4 0 0 0-3-3.87",key:"kshegd"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}]],MT=Te("users",AT);/** + * @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 OT=[["path",{d:"m21.64 3.64-1.28-1.28a1.21 1.21 0 0 0-1.72 0L2.36 18.64a1.21 1.21 0 0 0 0 1.72l1.28 1.28a1.2 1.2 0 0 0 1.72 0L21.64 5.36a1.2 1.2 0 0 0 0-1.72",key:"ul74o6"}],["path",{d:"m14 7 3 3",key:"1r5n42"}],["path",{d:"M5 6v4",key:"ilb8ba"}],["path",{d:"M19 14v4",key:"blhpug"}],["path",{d:"M10 2v2",key:"7u0qdc"}],["path",{d:"M7 8H3",key:"zfb6yr"}],["path",{d:"M21 16h-4",key:"1cnmox"}],["path",{d:"M11 3H9",key:"1obp7u"}]],RT=Te("wand-sparkles",OT);/** + * @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 jT=[["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"}]],Gm=Te("wrench",jT);/** + * @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 DT=[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]],Sp=Te("x",DT);/** + * @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 LT=[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",key:"1xq2db"}]],zT=Te("zap",LT),IT={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"}},BT={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"}},Z_={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 Wc(e){return e.original_severity!=null&&e.original_severity!==e.severity}const UT={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 HT(e){var r;if(!e)return null;const t=(r=e.split(".").pop())==null?void 0:r.toLowerCase();return t&&UT[t]||null}function kp(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 Cp(e){try{await navigator.clipboard.writeText(e)}catch{const t=document.createElement("textarea");t.value=e,t.style.position="absolute",t.style.left="-9999px",document.body.appendChild(t),t.select(),document.execCommand("copy"),document.body.removeChild(t)}}const Yu="https://app.strix.ai/api/auth/signup",$T="https://strix.ai/pricing",qT="ref=oss_viewer&utm_source=oss_viewer&utm_medium=local_viewer&utm_campaign=oss_viewer";function ha(e,t){const r=e.includes("?")?"&":"?";return`${e}${r}${qT}&utm_content=${encodeURIComponent(t)}`}function Tr(e,t={}){try{const r={event:e};for(const[s,o]of Object.entries(t))o!==void 0&&(r[s]=o);const a=JSON.stringify(r);typeof navigator<"u"&&navigator.sendBeacon?navigator.sendBeacon("/api/event",a):fetch("/api/event",{method:"POST",body:a,keepalive:!0})}catch{}}function jr(e,t){Tr("cta_clicked",{cta:e,surface:t})}function Q_(e){var t,r,a="";if(typeof e=="string"||typeof e=="number")a+=e;else if(typeof e=="object")if(Array.isArray(e)){var s=e.length;for(t=0;t{const r=new Array(e.length+t.length);for(let a=0;a({classGroupId:e,validator:t}),W_=(e=new Map,t=null,r)=>({nextPart:e,validators:t,classGroupId:r}),Su="-",cy=[],VT="arbitrary..",YT=e=>{const t=KT(e),{conflictingClassGroups:r,conflictingClassGroupModifiers:a}=e;return{getClassGroupId:c=>{if(c.startsWith("[")&&c.endsWith("]"))return XT(c);const d=c.split(Su),f=d[0]===""&&d.length>1?1:0;return J_(d,f,t)},getConflictingClassGroupIds:(c,d)=>{if(d){const f=a[c],h=r[c];return f?h?FT(h,f):f:h||cy}return r[c]||cy}}},J_=(e,t,r)=>{if(e.length-t===0)return r.classGroupId;const s=e[t],o=r.nextPart.get(s);if(o){const h=J_(e,t+1,o);if(h)return h}const c=r.validators;if(c===null)return;const d=t===0?e.join(Su):e.slice(t).join(Su),f=c.length;for(let h=0;he.slice(1,-1).indexOf(":")===-1?void 0:(()=>{const t=e.slice(1,-1),r=t.indexOf(":"),a=t.slice(0,r);return a?VT+a:void 0})(),KT=e=>{const{theme:t,classGroups:r}=e;return ZT(r,t)},ZT=(e,t)=>{const r=W_();for(const a in e){const s=e[a];Tp(s,r,a,t)}return r},Tp=(e,t,r,a)=>{const s=e.length;for(let o=0;o{if(typeof e=="string"){WT(e,t,r);return}if(typeof e=="function"){JT(e,t,r,a);return}eA(e,t,r,a)},WT=(e,t,r)=>{const a=e===""?t:ew(t,e);a.classGroupId=r},JT=(e,t,r,a)=>{if(tA(e)){Tp(e(a),t,r,a);return}t.validators===null&&(t.validators=[]),t.validators.push(GT(r,e))},eA=(e,t,r,a)=>{const s=Object.entries(e),o=s.length;for(let c=0;c{let r=e;const a=t.split(Su),s=a.length;for(let o=0;o"isThemeGetter"in e&&e.isThemeGetter===!0,nA=e=>{if(e<1)return{get:()=>{},set:()=>{}};let t=0,r=Object.create(null),a=Object.create(null);const s=(o,c)=>{r[o]=c,t++,t>e&&(t=0,a=r,r=Object.create(null))};return{get(o){let c=r[o];if(c!==void 0)return c;if((c=a[o])!==void 0)return s(o,c),c},set(o,c){o in r?r[o]=c:s(o,c)}}},Vm="!",uy=":",rA=[],dy=(e,t,r,a,s)=>({modifiers:e,hasImportantModifier:t,baseClassName:r,maybePostfixModifierPosition:a,isExternal:s}),iA=e=>{const{prefix:t,experimentalParseClassName:r}=e;let a=s=>{const o=[];let c=0,d=0,f=0,h;const p=s.length;for(let E=0;Ef?h-f:void 0;return dy(o,b,y,_)};if(t){const s=t+uy,o=a;a=c=>c.startsWith(s)?o(c.slice(s.length)):dy(rA,!1,c,void 0,!0)}if(r){const s=a;a=o=>r({className:o,parseClassName:s})}return a},aA=e=>{const t=new Map;return e.orderSensitiveModifiers.forEach((r,a)=>{t.set(r,1e6+a)}),r=>{const a=[];let s=[];for(let o=0;o0&&(s.sort(),a.push(...s),s=[]),a.push(c)):s.push(c)}return s.length>0&&(s.sort(),a.push(...s)),a}},sA=e=>({cache:nA(e.cacheSize),parseClassName:iA(e),sortModifiers:aA(e),postfixLookupClassGroupIds:lA(e),...YT(e)}),lA=e=>{const t=Object.create(null),r=e.postfixLookupClassGroups;if(r)for(let a=0;a{const{parseClassName:r,getClassGroupId:a,getConflictingClassGroupIds:s,sortModifiers:o,postfixLookupClassGroupIds:c}=t,d=[],f=e.trim().split(oA);let h="";for(let p=f.length-1;p>=0;p-=1){const g=f[p],{isExternal:y,modifiers:b,hasImportantModifier:_,baseClassName:E,maybePostfixModifierPosition:S}=r(g);if(y){h=g+(h.length>0?" "+h:h);continue}let w=!!S,k;if(w){const U=E.substring(0,S);k=a(U);const I=k&&c[k]?a(E):void 0;I&&I!==k&&(k=I,w=!1)}else k=a(E);if(!k){if(!w){h=g+(h.length>0?" "+h:h);continue}if(k=a(E),!k){h=g+(h.length>0?" "+h:h);continue}w=!1}const N=b.length===0?"":b.length===1?b[0]:o(b).join(":"),M=_?N+Vm:N,B=M+k;if(d.indexOf(B)>-1)continue;d.push(B);const R=s(k,w);for(let U=0;U0?" "+h:h)}return h},uA=(...e)=>{let t=0,r,a,s="";for(;t{if(typeof e=="string")return e;let t,r="";for(let a=0;a{let r,a,s,o;const c=f=>{const h=t.reduce((p,g)=>g(p),e());return r=sA(h),a=r.cache.get,s=r.cache.set,o=d,d(f)},d=f=>{const h=a(f);if(h)return h;const p=cA(f,r);return s(f,p),p};return o=c,(...f)=>o(uA(...f))},fA=[],hn=e=>{const t=r=>r[e]||fA;return t.isThemeGetter=!0,t},nw=/^\[(?:(\w[\w-]*):)?(.+)\]$/i,rw=/^\((?:(\w[\w-]*):)?(.+)\)$/i,hA=/^\d+(?:\.\d+)?\/\d+(?:\.\d+)?$/,mA=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,pA=/\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$/,gA=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/,xA=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,bA=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,ra=e=>hA.test(e),We=e=>!!e&&!Number.isNaN(Number(e)),Fr=e=>!!e&&Number.isInteger(Number(e)),vh=e=>e.endsWith("%")&&We(e.slice(0,-1)),xi=e=>mA.test(e),iw=()=>!0,yA=e=>pA.test(e)&&!gA.test(e),Ap=()=>!1,vA=e=>xA.test(e),_A=e=>bA.test(e),wA=e=>!ke(e)&&!Ce(e),EA=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)),NA=e=>ma(e,lw,Ap),ke=e=>nw.test(e),za=e=>ma(e,ow,yA),fy=e=>ma(e,RA,We),SA=e=>ma(e,uw,iw),kA=e=>ma(e,cw,Ap),hy=e=>ma(e,aw,Ap),CA=e=>ma(e,sw,_A),Jc=e=>ma(e,dw,vA),Ce=e=>rw.test(e),Zl=e=>Wa(e,ow),TA=e=>Wa(e,cw),my=e=>Wa(e,aw),AA=e=>Wa(e,lw),MA=e=>Wa(e,sw),eu=e=>Wa(e,dw,!0),OA=e=>Wa(e,uw,!0),ma=(e,t,r)=>{const a=nw.exec(e);return a?a[1]?t(a[1]):r(a[2]):!1},Wa=(e,t,r=!1)=>{const a=rw.exec(e);return a?a[1]?t(a[1]):r:!1},aw=e=>e==="position"||e==="percentage",sw=e=>e==="image"||e==="url",lw=e=>e==="length"||e==="size"||e==="bg-size",ow=e=>e==="length",RA=e=>e==="number",cw=e=>e==="family-name",uw=e=>e==="number"||e==="weight",dw=e=>e==="shadow",jA=()=>{const e=hn("color"),t=hn("font"),r=hn("text"),a=hn("font-weight"),s=hn("tracking"),o=hn("leading"),c=hn("breakpoint"),d=hn("container"),f=hn("spacing"),h=hn("radius"),p=hn("shadow"),g=hn("inset-shadow"),y=hn("text-shadow"),b=hn("drop-shadow"),_=hn("blur"),E=hn("perspective"),S=hn("aspect"),w=hn("ease"),k=hn("animate"),N=()=>["auto","avoid","all","avoid-page","page","left","right","column"],M=()=>["center","top","bottom","left","right","top-left","left-top","top-right","right-top","bottom-right","right-bottom","bottom-left","left-bottom"],B=()=>[...M(),Ce,ke],R=()=>["auto","hidden","clip","visible","scroll"],U=()=>["auto","contain","none"],I=()=>[Ce,ke,f],X=()=>[ra,"full","auto",...I()],j=()=>[Fr,"none","subgrid",Ce,ke],z=()=>["auto",{span:["full",Fr,Ce,ke]},Fr,Ce,ke],V=()=>[Fr,"auto",Ce,ke],P=()=>["auto","min","max","fr",Ce,ke],T=()=>["start","end","center","between","around","evenly","stretch","baseline","center-safe","end-safe"],$=()=>["start","end","center","stretch","center-safe","end-safe"],O=()=>["auto",...I()],H=()=>[ra,"auto","full","dvw","dvh","lvw","lvh","svw","svh","min","max","fit",...I()],K=()=>[ra,"screen","full","dvw","lvw","svw","min","max","fit",...I()],Z=()=>[ra,"screen","full","lh","dvh","lvh","svh","min","max","fit",...I()],C=()=>[e,Ce,ke],D=()=>[...M(),my,hy,{position:[Ce,ke]}],Y=()=>["no-repeat",{repeat:["","x","y","space","round"]}],L=()=>["auto","cover","contain",AA,NA,{size:[Ce,ke]}],G=()=>[vh,Zl,za],q=()=>["","none","full",h,Ce,ke],Q=()=>["",We,Zl,za],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"],te=()=>[We,vh,my,hy],ce=()=>["","none",_,Ce,ke],fe=()=>["none",We,Ce,ke],xe=()=>["none",We,Ce,ke],we=()=>[We,Ce,ke],Ne=()=>[ra,"full",...I()];return{cacheSize:500,theme:{animate:["spin","ping","pulse","bounce"],aspect:["video"],blur:[xi],breakpoint:[xi],color:[iw],container:[xi],"drop-shadow":[xi],ease:["in","out","in-out"],font:[wA],"font-weight":["thin","extralight","light","normal","medium","semibold","bold","extrabold","black"],"inset-shadow":[xi],leading:["none","tight","snug","normal","relaxed","loose"],perspective:["dramatic","near","normal","midrange","distant","none"],radius:[xi],shadow:[xi],spacing:["px",We],text:[xi],"text-shadow":[xi],tracking:["tighter","tight","normal","wide","wider","widest"]},classGroups:{aspect:[{aspect:["auto","square",ra,ke,Ce,S]}],container:["container"],"container-type":[{"@container":["","normal","size",Ce,ke]}],"container-named":[EA],columns:[{columns:[We,ke,Ce,d]}],"break-after":[{"break-after":N()}],"break-before":[{"break-before":N()}],"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:U()}],"overscroll-x":[{"overscroll-x":U()}],"overscroll-y":[{"overscroll-y":U()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:X()}],"inset-x":[{"inset-x":X()}],"inset-y":[{"inset-y":X()}],start:[{"inset-s":X(),start:X()}],end:[{"inset-e":X(),end:X()}],"inset-bs":[{"inset-bs":X()}],"inset-be":[{"inset-be":X()}],top:[{top:X()}],right:[{right:X()}],bottom:[{bottom:X()}],left:[{left:X()}],visibility:["visible","invisible","collapse"],z:[{z:[Fr,"auto",Ce,ke]}],basis:[{basis:[ra,"full","auto",d,...I()]}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["nowrap","wrap","wrap-reverse"]}],flex:[{flex:[We,ra,"auto","initial","none",ke]}],grow:[{grow:["",We,Ce,ke]}],shrink:[{shrink:["",We,Ce,ke]}],order:[{order:[Fr,"first","last","none",Ce,ke]}],"grid-cols":[{"grid-cols":j()}],"col-start-end":[{col:z()}],"col-start":[{"col-start":V()}],"col-end":[{"col-end":V()}],"grid-rows":[{"grid-rows":j()}],"row-start-end":[{row:z()}],"row-start":[{"row-start":V()}],"row-end":[{"row-end":V()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":P()}],"auto-rows":[{"auto-rows":P()}],gap:[{gap:I()}],"gap-x":[{"gap-x":I()}],"gap-y":[{"gap-y":I()}],"justify-content":[{justify:[...T(),"normal"]}],"justify-items":[{"justify-items":[...$(),"normal"]}],"justify-self":[{"justify-self":["auto",...$()]}],"align-content":[{content:["normal",...T()]}],"align-items":[{items:[...$(),{baseline:["","last"]}]}],"align-self":[{self:["auto",...$(),{baseline:["","last"]}]}],"place-content":[{"place-content":T()}],"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:O()}],mx:[{mx:O()}],my:[{my:O()}],ms:[{ms:O()}],me:[{me:O()}],mbs:[{mbs:O()}],mbe:[{mbe:O()}],mt:[{mt:O()}],mr:[{mr:O()}],mb:[{mb:O()}],ml:[{ml:O()}],"space-x":[{"space-x":I()}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":I()}],"space-y-reverse":["space-y-reverse"],size:[{size:H()}],"inline-size":[{inline:["auto",...K()]}],"min-inline-size":[{"min-inline":["auto",...K()]}],"max-inline-size":[{"max-inline":["none",...K()]}],"block-size":[{block:["auto",...Z()]}],"min-block-size":[{"min-block":["auto",...Z()]}],"max-block-size":[{"max-block":["none",...Z()]}],w:[{w:[d,"screen",...H()]}],"min-w":[{"min-w":[d,"screen","none",...H()]}],"max-w":[{"max-w":[d,"screen","none","prose",{screen:[c]},...H()]}],h:[{h:["screen","lh",...H()]}],"min-h":[{"min-h":["screen","lh","none",...H()]}],"max-h":[{"max-h":["screen","lh",...H()]}],"font-size":[{text:["base",r,Zl,za]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:[a,OA,SA]}],"font-stretch":[{"font-stretch":["ultra-condensed","extra-condensed","condensed","semi-condensed","normal","semi-expanded","expanded","extra-expanded","ultra-expanded",vh,ke]}],"font-family":[{font:[TA,kA,t]}],"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:[s,Ce,ke]}],"line-clamp":[{"line-clamp":[We,"none",Ce,fy]}],leading:[{leading:[o,...I()]}],"list-image":[{"list-image":["none",Ce,ke]}],"list-style-position":[{list:["inside","outside"]}],"list-style-type":[{list:["disc","decimal","none",Ce,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",Ce,za]}],"text-decoration-color":[{decoration:C()}],"underline-offset":[{"underline-offset":[We,"auto",Ce,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:[Fr,Ce,ke]}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",Ce,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",Ce,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:D()}],"bg-repeat":[{bg:Y()}],"bg-size":[{bg:L()}],"bg-image":[{bg:["none",{linear:[{to:["t","tr","r","br","b","bl","l","tl"]},Fr,Ce,ke],radial:["",Ce,ke],conic:[Fr,Ce,ke]},MA,CA]}],"bg-color":[{bg:C()}],"gradient-from-pos":[{from:G()}],"gradient-via-pos":[{via:G()}],"gradient-to-pos":[{to:G()}],"gradient-from":[{from:C()}],"gradient-via":[{via:C()}],"gradient-to":[{to:C()}],rounded:[{rounded:q()}],"rounded-s":[{"rounded-s":q()}],"rounded-e":[{"rounded-e":q()}],"rounded-t":[{"rounded-t":q()}],"rounded-r":[{"rounded-r":q()}],"rounded-b":[{"rounded-b":q()}],"rounded-l":[{"rounded-l":q()}],"rounded-ss":[{"rounded-ss":q()}],"rounded-se":[{"rounded-se":q()}],"rounded-ee":[{"rounded-ee":q()}],"rounded-es":[{"rounded-es":q()}],"rounded-tl":[{"rounded-tl":q()}],"rounded-tr":[{"rounded-tr":q()}],"rounded-br":[{"rounded-br":q()}],"rounded-bl":[{"rounded-bl":q()}],"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,Ce,ke]}],"outline-w":[{outline:["",We,Zl,za]}],"outline-color":[{outline:C()}],shadow:[{shadow:["","none",p,eu,Jc]}],"shadow-color":[{shadow:C()}],"inset-shadow":[{"inset-shadow":["none",g,eu,Jc]}],"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,za]}],"ring-offset-color":[{"ring-offset":C()}],"inset-ring-w":[{"inset-ring":Q()}],"inset-ring-color":[{"inset-ring":C()}],"text-shadow":[{"text-shadow":["none",y,eu,Jc]}],"text-shadow-color":[{"text-shadow":C()}],opacity:[{opacity:[We,Ce,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":te()}],"mask-image-linear-to-pos":[{"mask-linear-to":te()}],"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":te()}],"mask-image-t-to-pos":[{"mask-t-to":te()}],"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":te()}],"mask-image-r-to-pos":[{"mask-r-to":te()}],"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":te()}],"mask-image-b-to-pos":[{"mask-b-to":te()}],"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":te()}],"mask-image-l-to-pos":[{"mask-l-to":te()}],"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":te()}],"mask-image-x-to-pos":[{"mask-x-to":te()}],"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":te()}],"mask-image-y-to-pos":[{"mask-y-to":te()}],"mask-image-y-from-color":[{"mask-y-from":C()}],"mask-image-y-to-color":[{"mask-y-to":C()}],"mask-image-radial":[{"mask-radial":[Ce,ke]}],"mask-image-radial-from-pos":[{"mask-radial-from":te()}],"mask-image-radial-to-pos":[{"mask-radial-to":te()}],"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":M()}],"mask-image-conic-pos":[{"mask-conic":[We]}],"mask-image-conic-from-pos":[{"mask-conic-from":te()}],"mask-image-conic-to-pos":[{"mask-conic-to":te()}],"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:D()}],"mask-repeat":[{mask:Y()}],"mask-size":[{mask:L()}],"mask-type":[{"mask-type":["alpha","luminance"]}],"mask-image":[{mask:["none",Ce,ke]}],filter:[{filter:["","none",Ce,ke]}],blur:[{blur:ce()}],brightness:[{brightness:[We,Ce,ke]}],contrast:[{contrast:[We,Ce,ke]}],"drop-shadow":[{"drop-shadow":["","none",b,eu,Jc]}],"drop-shadow-color":[{"drop-shadow":C()}],grayscale:[{grayscale:["",We,Ce,ke]}],"hue-rotate":[{"hue-rotate":[We,Ce,ke]}],invert:[{invert:["",We,Ce,ke]}],saturate:[{saturate:[We,Ce,ke]}],sepia:[{sepia:["",We,Ce,ke]}],"backdrop-filter":[{"backdrop-filter":["","none",Ce,ke]}],"backdrop-blur":[{"backdrop-blur":ce()}],"backdrop-brightness":[{"backdrop-brightness":[We,Ce,ke]}],"backdrop-contrast":[{"backdrop-contrast":[We,Ce,ke]}],"backdrop-grayscale":[{"backdrop-grayscale":["",We,Ce,ke]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[We,Ce,ke]}],"backdrop-invert":[{"backdrop-invert":["",We,Ce,ke]}],"backdrop-opacity":[{"backdrop-opacity":[We,Ce,ke]}],"backdrop-saturate":[{"backdrop-saturate":[We,Ce,ke]}],"backdrop-sepia":[{"backdrop-sepia":["",We,Ce,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",Ce,ke]}],"transition-behavior":[{transition:["normal","discrete"]}],duration:[{duration:[We,"initial",Ce,ke]}],ease:[{ease:["linear","initial",w,Ce,ke]}],delay:[{delay:[We,Ce,ke]}],animate:[{animate:["none",k,Ce,ke]}],backface:[{backface:["hidden","visible"]}],perspective:[{perspective:[E,Ce,ke]}],"perspective-origin":[{"perspective-origin":B()}],rotate:[{rotate:fe()}],"rotate-x":[{"rotate-x":fe()}],"rotate-y":[{"rotate-y":fe()}],"rotate-z":[{"rotate-z":fe()}],scale:[{scale:xe()}],"scale-x":[{"scale-x":xe()}],"scale-y":[{"scale-y":xe()}],"scale-z":[{"scale-z":xe()}],"scale-3d":["scale-3d"],skew:[{skew:we()}],"skew-x":[{"skew-x":we()}],"skew-y":[{"skew-y":we()}],transform:[{transform:[Ce,ke,"","none","gpu","cpu"]}],"transform-origin":[{origin:B()}],"transform-style":[{transform:["3d","flat"]}],translate:[{translate:Ne()}],"translate-x":[{"translate-x":Ne()}],"translate-y":[{"translate-y":Ne()}],"translate-z":[{"translate-z":Ne()}],"translate-none":["translate-none"],zoom:[{zoom:[Fr,Ce,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",Ce,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",Ce,ke]}],fill:[{fill:["none",...C()]}],"stroke-w":[{stroke:[We,Zl,za,fy]}],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"]}},DA=dA(jA);function Mr(...e){return DA(PT(e))}function LA(e){return new Date(e).toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric"})}function Ym(e){const t=new Date(e),a=Math.floor((new Date().getTime()-t.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`:LA(e)}function zA(e){return`STRIX-${e}`}function Ls(e){return new Intl.NumberFormat("en-US").format(e)}function IA(e,t){const r={};return(e[e.length-1]===""?[...e,""]:e).join((r.padRight?" ":"")+","+(r.padLeft===!1?"":" ")).trim()}const BA=/^[$_\p{ID_Start}][$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,UA=/^[$_\p{ID_Start}][-$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,HA={};function py(e,t){return(HA.jsx?UA:BA).test(e)}const $A=/[ \t\n\f\r]/g;function qA(e){return typeof e=="object"?e.type==="text"?gy(e.value):!1:gy(e)}function gy(e){return e.replace($A,"")===""}class Ro{constructor(t,r,a){this.normal=r,this.property=t,a&&(this.space=a)}}Ro.prototype.normal={};Ro.prototype.property={};Ro.prototype.space=void 0;function fw(e,t){const r={},a={};for(const s of e)Object.assign(r,s.property),Object.assign(a,s.normal);return new Ro(r,a,t)}function Xm(e){return e.toLowerCase()}class Vn{constructor(t,r){this.attribute=r,this.property=t}}Vn.prototype.attribute="";Vn.prototype.booleanish=!1;Vn.prototype.boolean=!1;Vn.prototype.commaOrSpaceSeparated=!1;Vn.prototype.commaSeparated=!1;Vn.prototype.defined=!1;Vn.prototype.mustUseProperty=!1;Vn.prototype.number=!1;Vn.prototype.overloadedBoolean=!1;Vn.prototype.property="";Vn.prototype.spaceSeparated=!1;Vn.prototype.space=void 0;let PA=0;const Ge=Ja(),sn=Ja(),Km=Ja(),ve=Ja(),Ct=Ja(),qa=Ja(),rr=Ja();function Ja(){return 2**++PA}const Zm=Object.freeze(Object.defineProperty({__proto__:null,boolean:Ge,booleanish:sn,commaOrSpaceSeparated:rr,commaSeparated:qa,number:ve,overloadedBoolean:Km,spaceSeparated:Ct},Symbol.toStringTag,{value:"Module"})),_h=Object.keys(Zm);class Mp extends Vn{constructor(t,r,a,s){let o=-1;if(super(t,r),xy(this,"space",s),typeof a=="number")for(;++o<_h.length;){const c=_h[o];xy(this,_h[o],(a&Zm[c])===Zm[c])}}}Mp.prototype.defined=!0;function xy(e,t,r){r&&(e[t]=r)}function nl(e){const t={},r={};for(const[a,s]of Object.entries(e.properties)){const o=new Mp(a,e.transform(e.attributes||{},a),s,e.space);e.mustUseProperty&&e.mustUseProperty.includes(a)&&(o.mustUseProperty=!0),t[a]=o,r[Xm(a)]=a,r[Xm(o.attribute)]=a}return new Ro(t,r,e.space)}const hw=nl({properties:{ariaActiveDescendant:null,ariaAtomic:sn,ariaAutoComplete:null,ariaBusy:sn,ariaChecked:sn,ariaColCount:ve,ariaColIndex:ve,ariaColSpan:ve,ariaControls:Ct,ariaCurrent:null,ariaDescribedBy:Ct,ariaDetails:null,ariaDisabled:sn,ariaDropEffect:Ct,ariaErrorMessage:null,ariaExpanded:sn,ariaFlowTo:Ct,ariaGrabbed:sn,ariaHasPopup:null,ariaHidden:sn,ariaInvalid:null,ariaKeyShortcuts:null,ariaLabel:null,ariaLabelledBy:Ct,ariaLevel:ve,ariaLive:null,ariaModal:sn,ariaMultiLine:sn,ariaMultiSelectable:sn,ariaOrientation:null,ariaOwns:Ct,ariaPlaceholder:null,ariaPosInSet:ve,ariaPressed:sn,ariaReadOnly:sn,ariaRelevant:null,ariaRequired:sn,ariaRoleDescription:Ct,ariaRowCount:ve,ariaRowIndex:ve,ariaRowSpan:ve,ariaSelected:sn,ariaSetSize:ve,ariaSort:null,ariaValueMax:ve,ariaValueMin:ve,ariaValueNow:ve,ariaValueText:null,role:null},transform(e,t){return t==="role"?t:"aria-"+t.slice(4).toLowerCase()}});function mw(e,t){return t in e?e[t]:t}function pw(e,t){return mw(e,t.toLowerCase())}const FA=nl({attributes:{acceptcharset:"accept-charset",classname:"class",htmlfor:"for",httpequiv:"http-equiv"},mustUseProperty:["checked","multiple","muted","selected"],properties:{abbr:null,accept:qa,acceptCharset:Ct,accessKey:Ct,action:null,allow:null,allowFullScreen:Ge,allowPaymentRequest:Ge,allowUserMedia:Ge,alpha:Ge,alt:null,as:null,async:Ge,autoCapitalize:null,autoComplete:Ct,autoFocus:Ge,autoPlay:Ge,blocking:Ct,capture:null,charSet:null,checked:Ge,cite:null,className:Ct,closedBy:null,colorSpace:null,cols:ve,colSpan:ve,command:null,commandFor:null,content:null,contentEditable:sn,controls:Ge,controlsList:Ct,coords:ve|qa,crossOrigin:null,data:null,dateTime:null,decoding:null,default:Ge,defer:Ge,dir:null,dirName:null,disabled:Ge,download:Km,draggable:sn,encType:null,enterKeyHint:null,fetchPriority:null,form:null,formAction:null,formEncType:null,formMethod:null,formNoValidate:Ge,formTarget:null,headers:Ct,height:ve,hidden:Km,high:ve,href:null,hrefLang:null,htmlFor:Ct,httpEquiv:Ct,id:null,imageSizes:null,imageSrcSet:null,inert:Ge,inputMode:null,integrity:null,is:null,isMap:Ge,itemId:null,itemProp:Ct,itemRef:Ct,itemScope:Ge,itemType:Ct,kind:null,label:null,lang:null,language:null,list:null,loading:null,loop:Ge,low:ve,manifest:null,max:null,maxLength:ve,media:null,method:null,min:null,minLength:ve,multiple:Ge,muted:Ge,name:null,nonce:null,noModule:Ge,noValidate:Ge,onAbort:null,onAfterPrint:null,onAuxClick:null,onBeforeMatch:null,onBeforePrint:null,onBeforeToggle:null,onBeforeUnload:null,onBlur:null,onCancel:null,onCanPlay:null,onCanPlayThrough:null,onChange:null,onClick:null,onClose:null,onContextLost:null,onContextMenu:null,onContextRestored:null,onCopy:null,onCueChange:null,onCut:null,onDblClick:null,onDrag:null,onDragEnd:null,onDragEnter:null,onDragExit:null,onDragLeave:null,onDragOver:null,onDragStart:null,onDrop:null,onDurationChange:null,onEmptied:null,onEnded:null,onError:null,onFocus:null,onFormData:null,onHashChange:null,onInput:null,onInvalid:null,onKeyDown:null,onKeyPress:null,onKeyUp:null,onLanguageChange:null,onLoad:null,onLoadedData:null,onLoadedMetadata:null,onLoadEnd:null,onLoadStart:null,onMessage:null,onMessageError:null,onMouseDown:null,onMouseEnter:null,onMouseLeave:null,onMouseMove:null,onMouseOut:null,onMouseOver:null,onMouseUp:null,onOffline:null,onOnline:null,onPageHide:null,onPageShow:null,onPaste:null,onPause:null,onPlay:null,onPlaying:null,onPopState:null,onProgress:null,onRateChange:null,onRejectionHandled:null,onReset:null,onResize:null,onScroll:null,onScrollEnd:null,onSecurityPolicyViolation:null,onSeeked:null,onSeeking:null,onSelect:null,onSlotChange:null,onStalled:null,onStorage:null,onSubmit:null,onSuspend:null,onTimeUpdate:null,onToggle:null,onUnhandledRejection:null,onUnload:null,onVolumeChange:null,onWaiting:null,onWheel:null,open:Ge,optimum:ve,pattern:null,ping:Ct,placeholder:null,playsInline:Ge,popover:null,popoverTarget:null,popoverTargetAction:null,poster:null,preload:null,readOnly:Ge,referrerPolicy:null,rel:Ct,required:Ge,reversed:Ge,rows:ve,rowSpan:ve,sandbox:Ct,scope:null,scoped:Ge,seamless:Ge,selected:Ge,shadowRootClonable:Ge,shadowRootCustomElementRegistry:Ge,shadowRootDelegatesFocus:Ge,shadowRootMode:null,shadowRootSerializable:Ge,shape:null,size:ve,sizes:null,slot:null,span:ve,spellCheck:sn,src:null,srcDoc:null,srcLang:null,srcSet:null,start:ve,step:null,style:null,tabIndex:ve,target:null,title:null,translate:null,type:null,typeMustMatch:Ge,useMap:null,value:sn,width:ve,wrap:null,writingSuggestions:null,align:null,aLink:null,archive:Ct,axis:null,background:null,bgColor:null,border:ve,borderColor:null,bottomMargin:ve,cellPadding:null,cellSpacing:null,char:null,charOff:null,classId:null,clear:null,code:null,codeBase:null,codeType:null,color:null,compact:Ge,declare:Ge,event:null,face:null,frame:null,frameBorder:null,hSpace:ve,leftMargin:ve,link:null,longDesc:null,lowSrc:null,marginHeight:ve,marginWidth:ve,noResize:Ge,noHref:Ge,noShade:Ge,noWrap:Ge,object:null,profile:null,prompt:null,rev:null,rightMargin:ve,rules:null,scheme:null,scrolling:sn,standby:null,summary:null,text:null,topMargin:ve,valueType:null,version:null,vAlign:null,vLink:null,vSpace:ve,allowTransparency:null,autoCorrect:null,autoSave:null,credentialless:Ge,disablePictureInPicture:Ge,disableRemotePlayback:Ge,exportParts:qa,part:Ct,prefix:null,property:null,results:ve,security:null,unselectable:null},space:"html",transform:pw}),GA=nl({attributes:{accentHeight:"accent-height",alignmentBaseline:"alignment-baseline",arabicForm:"arabic-form",baselineShift:"baseline-shift",capHeight:"cap-height",className:"class",clipPath:"clip-path",clipRule:"clip-rule",colorInterpolation:"color-interpolation",colorInterpolationFilters:"color-interpolation-filters",colorProfile:"color-profile",colorRendering:"color-rendering",crossOrigin:"crossorigin",dataType:"datatype",dominantBaseline:"dominant-baseline",enableBackground:"enable-background",fillOpacity:"fill-opacity",fillRule:"fill-rule",floodColor:"flood-color",floodOpacity:"flood-opacity",fontFamily:"font-family",fontSize:"font-size",fontSizeAdjust:"font-size-adjust",fontStretch:"font-stretch",fontStyle:"font-style",fontVariant:"font-variant",fontWeight:"font-weight",glyphName:"glyph-name",glyphOrientationHorizontal:"glyph-orientation-horizontal",glyphOrientationVertical:"glyph-orientation-vertical",hrefLang:"hreflang",horizAdvX:"horiz-adv-x",horizOriginX:"horiz-origin-x",horizOriginY:"horiz-origin-y",imageRendering:"image-rendering",letterSpacing:"letter-spacing",lightingColor:"lighting-color",markerEnd:"marker-end",markerMid:"marker-mid",markerStart:"marker-start",maskType:"mask-type",navDown:"nav-down",navDownLeft:"nav-down-left",navDownRight:"nav-down-right",navLeft:"nav-left",navNext:"nav-next",navPrev:"nav-prev",navRight:"nav-right",navUp:"nav-up",navUpLeft:"nav-up-left",navUpRight:"nav-up-right",onAbort:"onabort",onActivate:"onactivate",onAfterPrint:"onafterprint",onBeforePrint:"onbeforeprint",onBegin:"onbegin",onCancel:"oncancel",onCanPlay:"oncanplay",onCanPlayThrough:"oncanplaythrough",onChange:"onchange",onClick:"onclick",onClose:"onclose",onCopy:"oncopy",onCueChange:"oncuechange",onCut:"oncut",onDblClick:"ondblclick",onDrag:"ondrag",onDragEnd:"ondragend",onDragEnter:"ondragenter",onDragExit:"ondragexit",onDragLeave:"ondragleave",onDragOver:"ondragover",onDragStart:"ondragstart",onDrop:"ondrop",onDurationChange:"ondurationchange",onEmptied:"onemptied",onEnd:"onend",onEnded:"onended",onError:"onerror",onFocus:"onfocus",onFocusIn:"onfocusin",onFocusOut:"onfocusout",onHashChange:"onhashchange",onInput:"oninput",onInvalid:"oninvalid",onKeyDown:"onkeydown",onKeyPress:"onkeypress",onKeyUp:"onkeyup",onLoad:"onload",onLoadedData:"onloadeddata",onLoadedMetadata:"onloadedmetadata",onLoadStart:"onloadstart",onMessage:"onmessage",onMouseDown:"onmousedown",onMouseEnter:"onmouseenter",onMouseLeave:"onmouseleave",onMouseMove:"onmousemove",onMouseOut:"onmouseout",onMouseOver:"onmouseover",onMouseUp:"onmouseup",onMouseWheel:"onmousewheel",onOffline:"onoffline",onOnline:"ononline",onPageHide:"onpagehide",onPageShow:"onpageshow",onPaste:"onpaste",onPause:"onpause",onPlay:"onplay",onPlaying:"onplaying",onPopState:"onpopstate",onProgress:"onprogress",onRateChange:"onratechange",onRepeat:"onrepeat",onReset:"onreset",onResize:"onresize",onScroll:"onscroll",onSeeked:"onseeked",onSeeking:"onseeking",onSelect:"onselect",onShow:"onshow",onStalled:"onstalled",onStorage:"onstorage",onSubmit:"onsubmit",onSuspend:"onsuspend",onTimeUpdate:"ontimeupdate",onToggle:"ontoggle",onUnload:"onunload",onVolumeChange:"onvolumechange",onWaiting:"onwaiting",onZoom:"onzoom",overlinePosition:"overline-position",overlineThickness:"overline-thickness",paintOrder:"paint-order",panose1:"panose-1",pointerEvents:"pointer-events",referrerPolicy:"referrerpolicy",renderingIntent:"rendering-intent",shapeRendering:"shape-rendering",stopColor:"stop-color",stopOpacity:"stop-opacity",strikethroughPosition:"strikethrough-position",strikethroughThickness:"strikethrough-thickness",strokeDashArray:"stroke-dasharray",strokeDashOffset:"stroke-dashoffset",strokeLineCap:"stroke-linecap",strokeLineJoin:"stroke-linejoin",strokeMiterLimit:"stroke-miterlimit",strokeOpacity:"stroke-opacity",strokeWidth:"stroke-width",tabIndex:"tabindex",textAnchor:"text-anchor",textDecoration:"text-decoration",textRendering:"text-rendering",transformOrigin:"transform-origin",typeOf:"typeof",underlinePosition:"underline-position",underlineThickness:"underline-thickness",unicodeBidi:"unicode-bidi",unicodeRange:"unicode-range",unitsPerEm:"units-per-em",vAlphabetic:"v-alphabetic",vHanging:"v-hanging",vIdeographic:"v-ideographic",vMathematical:"v-mathematical",vectorEffect:"vector-effect",vertAdvY:"vert-adv-y",vertOriginX:"vert-origin-x",vertOriginY:"vert-origin-y",wordSpacing:"word-spacing",writingMode:"writing-mode",xHeight:"x-height",playbackOrder:"playbackorder",timelineBegin:"timelinebegin"},properties:{about:rr,accentHeight:ve,accumulate:null,additive:null,alignmentBaseline:null,alphabetic:ve,amplitude:ve,arabicForm:null,ascent:ve,attributeName:null,attributeType:null,azimuth:ve,bandwidth:null,baselineShift:null,baseFrequency:null,baseProfile:null,bbox:null,begin:null,bias:ve,by:null,calcMode:null,capHeight:ve,className:Ct,clip:null,clipPath:null,clipPathUnits:null,clipRule:null,color:null,colorInterpolation:null,colorInterpolationFilters:null,colorProfile:null,colorRendering:null,content:null,contentScriptType:null,contentStyleType:null,crossOrigin:null,cursor:null,cx:null,cy:null,d:null,dataType:null,defaultAction:null,descent:ve,diffuseConstant:ve,direction:null,display:null,dur:null,divisor:ve,dominantBaseline:null,download:Ge,dx:null,dy:null,edgeMode:null,editable:null,elevation:ve,enableBackground:null,end:null,event:null,exponent:ve,externalResourcesRequired:null,fill:null,fillOpacity:ve,fillRule:null,filter:null,filterRes:null,filterUnits:null,floodColor:null,floodOpacity:null,focusable:null,focusHighlight:null,fontFamily:null,fontSize:null,fontSizeAdjust:null,fontStretch:null,fontStyle:null,fontVariant:null,fontWeight:null,format:null,fr:null,from:null,fx:null,fy:null,g1:qa,g2:qa,glyphName:qa,glyphOrientationHorizontal:null,glyphOrientationVertical:null,glyphRef:null,gradientTransform:null,gradientUnits:null,handler:null,hanging:ve,hatchContentUnits:null,hatchUnits:null,height:null,href:null,hrefLang:null,horizAdvX:ve,horizOriginX:ve,horizOriginY:ve,id:null,ideographic:ve,imageRendering:null,initialVisibility:null,in:null,in2:null,intercept:ve,k:ve,k1:ve,k2:ve,k3:ve,k4:ve,kernelMatrix:rr,kernelUnitLength:null,keyPoints:null,keySplines:null,keyTimes:null,kerning:null,lang:null,lengthAdjust:null,letterSpacing:null,lightingColor:null,limitingConeAngle:ve,local:null,markerEnd:null,markerMid:null,markerStart:null,markerHeight:null,markerUnits:null,markerWidth:null,mask:null,maskContentUnits:null,maskType:null,maskUnits:null,mathematical:null,max:null,media:null,mediaCharacterEncoding:null,mediaContentEncodings:null,mediaSize:ve,mediaTime:null,method:null,min:null,mode:null,name:null,navDown:null,navDownLeft:null,navDownRight:null,navLeft:null,navNext:null,navPrev:null,navRight:null,navUp:null,navUpLeft:null,navUpRight:null,numOctaves:null,observer:null,offset:null,onAbort:null,onActivate:null,onAfterPrint:null,onBeforePrint:null,onBegin:null,onCancel:null,onCanPlay:null,onCanPlayThrough:null,onChange:null,onClick:null,onClose:null,onCopy:null,onCueChange:null,onCut:null,onDblClick:null,onDrag:null,onDragEnd:null,onDragEnter:null,onDragExit:null,onDragLeave:null,onDragOver:null,onDragStart:null,onDrop:null,onDurationChange:null,onEmptied:null,onEnd:null,onEnded:null,onError:null,onFocus:null,onFocusIn:null,onFocusOut:null,onHashChange:null,onInput:null,onInvalid:null,onKeyDown:null,onKeyPress:null,onKeyUp:null,onLoad:null,onLoadedData:null,onLoadedMetadata:null,onLoadStart:null,onMessage:null,onMouseDown:null,onMouseEnter:null,onMouseLeave:null,onMouseMove:null,onMouseOut:null,onMouseOver:null,onMouseUp:null,onMouseWheel:null,onOffline:null,onOnline:null,onPageHide:null,onPageShow:null,onPaste:null,onPause:null,onPlay:null,onPlaying:null,onPopState:null,onProgress:null,onRateChange:null,onRepeat:null,onReset:null,onResize:null,onScroll:null,onSeeked:null,onSeeking:null,onSelect:null,onShow:null,onStalled:null,onStorage:null,onSubmit:null,onSuspend:null,onTimeUpdate:null,onToggle:null,onUnload:null,onVolumeChange:null,onWaiting:null,onZoom:null,opacity:null,operator:null,order:null,orient:null,orientation:null,origin:null,overflow:null,overlay:null,overlinePosition:ve,overlineThickness:ve,paintOrder:null,panose1:null,path:null,pathLength:ve,patternContentUnits:null,patternTransform:null,patternUnits:null,phase:null,ping:Ct,pitch:null,playbackOrder:null,pointerEvents:null,points:null,pointsAtX:ve,pointsAtY:ve,pointsAtZ:ve,preserveAlpha:null,preserveAspectRatio:null,primitiveUnits:null,propagate:null,property:rr,r:null,radius:null,referrerPolicy:null,refX:null,refY:null,rel:rr,rev:rr,renderingIntent:null,repeatCount:null,repeatDur:null,requiredExtensions:rr,requiredFeatures:rr,requiredFonts:rr,requiredFormats:rr,resource:null,restart:null,result:null,rotate:null,rx:null,ry:null,scale:null,seed:null,shapeRendering:null,side:null,slope:null,snapshotTime:null,specularConstant:ve,specularExponent:ve,spreadMethod:null,spacing:null,startOffset:null,stdDeviation:null,stemh:null,stemv:null,stitchTiles:null,stopColor:null,stopOpacity:null,strikethroughPosition:ve,strikethroughThickness:ve,string:null,stroke:null,strokeDashArray:rr,strokeDashOffset:null,strokeLineCap:null,strokeLineJoin:null,strokeMiterLimit:ve,strokeOpacity:ve,strokeWidth:null,style:null,surfaceScale:ve,syncBehavior:null,syncBehaviorDefault:null,syncMaster:null,syncTolerance:null,syncToleranceDefault:null,systemLanguage:rr,tabIndex:ve,tableValues:null,target:null,targetX:ve,targetY:ve,textAnchor:null,textDecoration:null,textRendering:null,textLength:null,timelineBegin:null,title:null,transformBehavior:null,type:null,typeOf:rr,to:null,transform:null,transformOrigin:null,u1:null,u2:null,underlinePosition:ve,underlineThickness:ve,unicode:null,unicodeBidi:null,unicodeRange:null,unitsPerEm:ve,values:null,vAlphabetic:ve,vMathematical:ve,vectorEffect:null,vHanging:ve,vIdeographic:ve,version:null,vertAdvY:ve,vertOriginX:ve,vertOriginY:ve,viewBox:null,viewTarget:null,visibility:null,width:null,widths:null,wordSpacing:null,writingMode:null,x:null,x1:null,x2:null,xChannelSelector:null,xHeight:ve,y:null,y1:null,y2:null,yChannelSelector:null,z:null,zoomAndPan:null},space:"svg",transform:mw}),gw=nl({properties:{xLinkActuate:null,xLinkArcRole:null,xLinkHref:null,xLinkRole:null,xLinkShow:null,xLinkTitle:null,xLinkType:null},space:"xlink",transform(e,t){return"xlink:"+t.slice(5).toLowerCase()}}),xw=nl({attributes:{xmlnsxlink:"xmlns:xlink"},properties:{xmlnsXLink:null,xmlns:null},space:"xmlns",transform:pw}),bw=nl({properties:{xmlBase:null,xmlLang:null,xmlSpace:null},space:"xml",transform(e,t){return"xml:"+t.slice(3).toLowerCase()}}),VA={classId:"classID",dataType:"datatype",itemId:"itemID",strokeDashArray:"strokeDasharray",strokeDashOffset:"strokeDashoffset",strokeLineCap:"strokeLinecap",strokeLineJoin:"strokeLinejoin",strokeMiterLimit:"strokeMiterlimit",typeOf:"typeof",xLinkActuate:"xlinkActuate",xLinkArcRole:"xlinkArcrole",xLinkHref:"xlinkHref",xLinkRole:"xlinkRole",xLinkShow:"xlinkShow",xLinkTitle:"xlinkTitle",xLinkType:"xlinkType",xmlnsXLink:"xmlnsXlink"},YA=/[A-Z]/g,by=/-[a-z]/g,XA=/^data[-\w.:]+$/i;function KA(e,t){const r=Xm(t);let a=t,s=Vn;if(r in e.normal)return e.property[e.normal[r]];if(r.length>4&&r.slice(0,4)==="data"&&XA.test(t)){if(t.charAt(4)==="-"){const o=t.slice(5).replace(by,QA);a="data"+o.charAt(0).toUpperCase()+o.slice(1)}else{const o=t.slice(4);if(!by.test(o)){let c=o.replace(YA,ZA);c.charAt(0)!=="-"&&(c="-"+c),t="data"+c}}s=Mp}return new s(a,t)}function ZA(e){return"-"+e.toLowerCase()}function QA(e){return e.charAt(1).toUpperCase()}const WA=fw([hw,FA,gw,xw,bw],"html"),Op=fw([hw,GA,gw,xw,bw],"svg");function JA(e){return e.join(" ").trim()}var zs={},wh,yy;function eM(){if(yy)return wh;yy=1;var e=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//g,t=/\n/g,r=/^\s*/,a=/^(\*?[-#/*\\\w]+(\[[0-9a-z_-]+\])?)\s*/,s=/^:\s*/,o=/^((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};])+)/,c=/^[;\s]*/,d=/^\s+|\s+$/g,f=` +`,h="/",p="*",g="",y="comment",b="declaration";function _(S,w){if(typeof S!="string")throw new TypeError("First argument must be a string");if(!S)return[];w=w||{};var k=1,N=1;function M(T){var $=T.match(t);$&&(k+=$.length);var O=T.lastIndexOf(f);N=~O?T.length-O:N+T.length}function B(){var T={line:k,column:N};return function($){return $.position=new R(T),X(),$}}function R(T){this.start=T,this.end={line:k,column:N},this.source=w.source}R.prototype.content=S;function U(T){var $=new Error(w.source+":"+k+":"+N+": "+T);if($.reason=T,$.filename=w.source,$.line=k,$.column=N,$.source=S,!w.silent)throw $}function I(T){var $=T.exec(S);if($){var O=$[0];return M(O),S=S.slice(O.length),$}}function X(){I(r)}function j(T){var $;for(T=T||[];$=z();)$!==!1&&T.push($);return T}function z(){var T=B();if(!(h!=S.charAt(0)||p!=S.charAt(1))){for(var $=2;g!=S.charAt($)&&(p!=S.charAt($)||h!=S.charAt($+1));)++$;if($+=2,g===S.charAt($-1))return U("End of comment missing");var O=S.slice(2,$-2);return N+=2,M(O),S=S.slice($),N+=2,T({type:y,comment:O})}}function V(){var T=B(),$=I(a);if($){if(z(),!I(s))return U("property missing ':'");var O=I(o),H=T({type:b,property:E($[0].replace(e,g)),value:O?E(O[0].replace(e,g)):g});return I(c),H}}function P(){var T=[];j(T);for(var $;$=V();)$!==!1&&(T.push($),j(T));return T}return X(),P()}function E(S){return S?S.replace(d,g):g}return wh=_,wh}var vy;function tM(){if(vy)return zs;vy=1;var e=zs&&zs.__importDefault||function(a){return a&&a.__esModule?a:{default:a}};Object.defineProperty(zs,"__esModule",{value:!0}),zs.default=r;const t=e(eM());function r(a,s){let o=null;if(!a||typeof a!="string")return o;const c=(0,t.default)(a),d=typeof s=="function";return c.forEach(f=>{if(f.type!=="declaration")return;const{property:h,value:p}=f;d?s(h,p,f):p&&(o=o||{},o[h]=p)}),o}return zs}var Ql={},_y;function nM(){if(_y)return Ql;_y=1,Object.defineProperty(Ql,"__esModule",{value:!0}),Ql.camelCase=void 0;var e=/^--[a-zA-Z0-9_-]+$/,t=/-([a-z])/g,r=/^[^-]+$/,a=/^-(webkit|moz|ms|o|khtml)-/,s=/^-(ms)-/,o=function(h){return!h||r.test(h)||e.test(h)},c=function(h,p){return p.toUpperCase()},d=function(h,p){return"".concat(p,"-")},f=function(h,p){return p===void 0&&(p={}),o(h)?h:(h=h.toLowerCase(),p.reactCompat?h=h.replace(s,d):h=h.replace(a,d),h.replace(t,c))};return Ql.camelCase=f,Ql}var Wl,wy;function rM(){if(wy)return Wl;wy=1;var e=Wl&&Wl.__importDefault||function(s){return s&&s.__esModule?s:{default:s}},t=e(tM()),r=nM();function a(s,o){var c={};return!s||typeof s!="string"||(0,t.default)(s,function(d,f){d&&f&&(c[(0,r.camelCase)(d,o)]=f)}),c}return a.default=a,Wl=a,Wl}var iM=rM();const aM=Ao(iM),yw=vw("end"),Rp=vw("start");function vw(e){return t;function t(r){const a=r&&r.position&&r.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 sM(e){const t=Rp(e),r=yw(e);if(t&&r)return{start:t,end:r}}function oo(e){return!e||typeof e!="object"?"":"position"in e||"type"in e?Ey(e.position):"start"in e||"end"in e?Ey(e):"line"in e||"column"in e?Qm(e):""}function Qm(e){return Ny(e&&e.line)+":"+Ny(e&&e.column)}function Ey(e){return Qm(e&&e.start)+"-"+Qm(e&&e.end)}function Ny(e){return e&&typeof e=="number"?e:1}class Mn extends Error{constructor(t,r,a){super(),typeof r=="string"&&(a=r,r=void 0);let s="",o={},c=!1;if(r&&("line"in r&&"column"in r?o={place:r}:"start"in r&&"end"in r?o={place:r}:"type"in r?o={ancestors:[r],place:r.position}:o={...r}),typeof t=="string"?s=t:!o.cause&&t&&(c=!0,s=t.message,o.cause=t),!o.ruleId&&!o.source&&typeof a=="string"){const f=a.indexOf(":");f===-1?o.ruleId=a:(o.source=a.slice(0,f),o.ruleId=a.slice(f+1))}if(!o.place&&o.ancestors&&o.ancestors){const f=o.ancestors[o.ancestors.length-1];f&&(o.place=f.position)}const d=o.place&&"start"in o.place?o.place.start:o.place;this.ancestors=o.ancestors||void 0,this.cause=o.cause||void 0,this.column=d?d.column:void 0,this.fatal=void 0,this.file="",this.message=s,this.line=d?d.line:void 0,this.name=oo(o.place)||"1:1",this.place=o.place||void 0,this.reason=this.message,this.ruleId=o.ruleId||void 0,this.source=o.source||void 0,this.stack=c&&o.cause&&typeof o.cause.stack=="string"?o.cause.stack:"",this.actual=void 0,this.expected=void 0,this.note=void 0,this.url=void 0}}Mn.prototype.file="";Mn.prototype.name="";Mn.prototype.reason="";Mn.prototype.message="";Mn.prototype.stack="";Mn.prototype.column=void 0;Mn.prototype.line=void 0;Mn.prototype.ancestors=void 0;Mn.prototype.cause=void 0;Mn.prototype.fatal=void 0;Mn.prototype.place=void 0;Mn.prototype.ruleId=void 0;Mn.prototype.source=void 0;const jp={}.hasOwnProperty,lM=new Map,oM=/[A-Z]/g,cM=new Set(["table","tbody","thead","tfoot","tr"]),uM=new Set(["td","th"]),_w="https://github.com/syntax-tree/hast-util-to-jsx-runtime";function dM(e,t){if(!t||t.Fragment===void 0)throw new TypeError("Expected `Fragment` in options");const r=t.filePath||void 0;let a;if(t.development){if(typeof t.jsxDEV!="function")throw new TypeError("Expected `jsxDEV` in options when `development: true`");a=yM(r,t.jsxDEV)}else{if(typeof t.jsx!="function")throw new TypeError("Expected `jsx` in production options");if(typeof t.jsxs!="function")throw new TypeError("Expected `jsxs` in production options");a=bM(r,t.jsx,t.jsxs)}const s={Fragment:t.Fragment,ancestors:[],components:t.components||{},create:a,elementAttributeNameCase:t.elementAttributeNameCase||"react",evaluater:t.createEvaluater?t.createEvaluater():void 0,filePath:r,ignoreInvalidStyle:t.ignoreInvalidStyle||!1,passKeys:t.passKeys!==!1,passNode:t.passNode||!1,schema:t.space==="svg"?Op:WA,stylePropertyNameCase:t.stylePropertyNameCase||"dom",tableCellAlignToStyle:t.tableCellAlignToStyle!==!1},o=ww(s,e,void 0);return o&&typeof o!="string"?o:s.create(e,s.Fragment,{children:o||void 0},void 0)}function ww(e,t,r){if(t.type==="element")return fM(e,t,r);if(t.type==="mdxFlowExpression"||t.type==="mdxTextExpression")return hM(e,t);if(t.type==="mdxJsxFlowElement"||t.type==="mdxJsxTextElement")return pM(e,t,r);if(t.type==="mdxjsEsm")return mM(e,t);if(t.type==="root")return gM(e,t,r);if(t.type==="text")return xM(e,t)}function fM(e,t,r){const a=e.schema;let s=a;t.tagName.toLowerCase()==="svg"&&a.space==="html"&&(s=Op,e.schema=s),e.ancestors.push(t);const o=Nw(e,t.tagName,!1),c=vM(e,t);let d=Lp(e,t);return cM.has(t.tagName)&&(d=d.filter(function(f){return typeof f=="string"?!qA(f):!0})),Ew(e,c,o,t),Dp(c,d),e.ancestors.pop(),e.schema=a,e.create(t,o,c,r)}function hM(e,t){if(t.data&&t.data.estree&&e.evaluater){const a=t.data.estree.body[0];return a.type,e.evaluater.evaluateExpression(a.expression)}xo(e,t.position)}function mM(e,t){if(t.data&&t.data.estree&&e.evaluater)return e.evaluater.evaluateProgram(t.data.estree);xo(e,t.position)}function pM(e,t,r){const a=e.schema;let s=a;t.name==="svg"&&a.space==="html"&&(s=Op,e.schema=s),e.ancestors.push(t);const o=t.name===null?e.Fragment:Nw(e,t.name,!0),c=_M(e,t),d=Lp(e,t);return Ew(e,c,o,t),Dp(c,d),e.ancestors.pop(),e.schema=a,e.create(t,o,c,r)}function gM(e,t,r){const a={};return Dp(a,Lp(e,t)),e.create(t,e.Fragment,a,r)}function xM(e,t){return t.value}function Ew(e,t,r,a){typeof r!="string"&&r!==e.Fragment&&e.passNode&&(t.node=a)}function Dp(e,t){if(t.length>0){const r=t.length>1?t:t[0];r&&(e.children=r)}}function bM(e,t,r){return a;function a(s,o,c,d){const h=Array.isArray(c.children)?r:t;return d?h(o,c,d):h(o,c)}}function yM(e,t){return r;function r(a,s,o,c){const d=Array.isArray(o.children),f=Rp(a);return t(s,o,c,d,{columnNumber:f?f.column-1:void 0,fileName:e,lineNumber:f?f.line:void 0},void 0)}}function vM(e,t){const r={};let a,s;for(s in t.properties)if(s!=="children"&&jp.call(t.properties,s)){const o=wM(e,s,t.properties[s]);if(o){const[c,d]=o;e.tableCellAlignToStyle&&c==="align"&&typeof d=="string"&&uM.has(t.tagName)?a=d:r[c]=d}}if(a){const o=r.style||(r.style={});o[e.stylePropertyNameCase==="css"?"text-align":"textAlign"]=a}return r}function _M(e,t){const r={};for(const a of t.attributes)if(a.type==="mdxJsxExpressionAttribute")if(a.data&&a.data.estree&&e.evaluater){const o=a.data.estree.body[0];o.type;const c=o.expression;c.type;const d=c.properties[0];d.type,Object.assign(r,e.evaluater.evaluateExpression(d.argument))}else xo(e,t.position);else{const s=a.name;let o;if(a.value&&typeof a.value=="object")if(a.value.data&&a.value.data.estree&&e.evaluater){const d=a.value.data.estree.body[0];d.type,o=e.evaluater.evaluateExpression(d.expression)}else xo(e,t.position);else o=a.value===null?!0:a.value;r[s]=o}return r}function Lp(e,t){const r=[];let a=-1;const s=e.passKeys?new Map:lM;for(;++as?0:s+t:t=t>s?s:t,r=r>0?r:0,a.length<1e4)c=Array.from(a),c.unshift(t,r),e.splice(...c);else for(r&&e.splice(t,r);o0?(ar(e,e.length,0,t),e):t}const Cy={}.hasOwnProperty;function kw(e){const t={};let r=-1;for(;++r13&&r<32||r>126&&r<160||r>55295&&r<57344||r>64975&&r<65008||(r&65535)===65535||(r&65535)===65534||r>1114111?"�":String.fromCodePoint(r)}function Dr(e){return e.replace(/[\t\n\r ]+/g," ").replace(/^ | $/g,"").toLowerCase().toUpperCase()}const Ln=pa(/[A-Za-z]/),An=pa(/[\dA-Za-z]/),OM=pa(/[#-'*+\--9=?A-Z^-~]/);function ku(e){return e!==null&&(e<32||e===127)}const Wm=pa(/\d/),RM=pa(/[\dA-Fa-f]/),jM=pa(/[!-/:-@[-`{-~]/);function Be(e){return e!==null&&e<-2}function Tt(e){return e!==null&&(e<0||e===32)}function tt(e){return e===-2||e===-1||e===32}const Xu=pa(new RegExp("\\p{P}|\\p{S}","u")),Va=pa(/\s/);function pa(e){return t;function t(r){return r!==null&&r>-1&&e.test(String.fromCharCode(r))}}function rl(e){const t=[];let r=-1,a=0,s=0;for(;++r55295&&o<57344){const d=e.charCodeAt(r+1);o<56320&&d>56319&&d<57344?(c=String.fromCharCode(o,d),s=1):c="�"}else c=String.fromCharCode(o);c&&(t.push(e.slice(a,r),encodeURIComponent(c)),a=r+s+1,c=""),s&&(r+=s,s=0)}return t.join("")+e.slice(a)}function ot(e,t,r,a){const s=a?a-1:Number.POSITIVE_INFINITY;let o=0;return c;function c(f){return tt(f)?(e.enter(r),d(f)):t(f)}function d(f){return tt(f)&&o++c))return;const U=t.events.length;let I=U,X,j;for(;I--;)if(t.events[I][0]==="exit"&&t.events[I][1].type==="chunkFlow"){if(X){j=t.events[I][1].end;break}X=!0}for(w(a),R=U;RN;){const B=r[M];t.containerState=B[1],B[0].exit.call(t,e)}r.length=N}function k(){s.write([null]),o=void 0,s=void 0,t.containerState._closeFlow=void 0}}function BM(e,t,r){return ot(e,e.attempt(this.parser.constructs.document,t,r),"linePrefix",this.parser.constructs.disable.null.includes("codeIndented")?void 0:4)}function Xs(e){if(e===null||Tt(e)||Va(e))return 1;if(Xu(e))return 2}function Ku(e,t,r){const a=[];let s=-1;for(;++s1&&e[r][1].end.offset-e[r][1].start.offset>1?2:1;const g={...e[a][1].end},y={...e[r][1].start};Ay(g,-f),Ay(y,f),c={type:f>1?"strongSequence":"emphasisSequence",start:g,end:{...e[a][1].end}},d={type:f>1?"strongSequence":"emphasisSequence",start:{...e[r][1].start},end:y},o={type:f>1?"strongText":"emphasisText",start:{...e[a][1].end},end:{...e[r][1].start}},s={type:f>1?"strong":"emphasis",start:{...c.start},end:{...d.end}},e[a][1].end={...c.start},e[r][1].start={...d.end},h=[],e[a][1].end.offset-e[a][1].start.offset&&(h=xr(h,[["enter",e[a][1],t],["exit",e[a][1],t]])),h=xr(h,[["enter",s,t],["enter",c,t],["exit",c,t],["enter",o,t]]),h=xr(h,Ku(t.parser.constructs.insideSpan.null,e.slice(a+1,r),t)),h=xr(h,[["exit",o,t],["enter",d,t],["exit",d,t],["exit",s,t]]),e[r][1].end.offset-e[r][1].start.offset?(p=2,h=xr(h,[["enter",e[r][1],t],["exit",e[r][1],t]])):p=0,ar(e,a-1,r-a+3,h),r=a+h.length-p-2;break}}for(r=-1;++r0&&tt(R)?ot(e,k,"linePrefix",o+1)(R):k(R)}function k(R){return R===null||Be(R)?e.check(My,E,M)(R):(e.enter("codeFlowValue"),N(R))}function N(R){return R===null||Be(R)?(e.exit("codeFlowValue"),k(R)):(e.consume(R),N)}function M(R){return e.exit("codeFenced"),t(R)}function B(R,U,I){let X=0;return j;function j($){return R.enter("lineEnding"),R.consume($),R.exit("lineEnding"),z}function z($){return R.enter("codeFencedFence"),tt($)?ot(R,V,"linePrefix",a.parser.constructs.disable.null.includes("codeIndented")?void 0:4)($):V($)}function V($){return $===d?(R.enter("codeFencedFenceSequence"),P($)):I($)}function P($){return $===d?(X++,R.consume($),P):X>=c?(R.exit("codeFencedFenceSequence"),tt($)?ot(R,T,"whitespace")($):T($)):I($)}function T($){return $===null||Be($)?(R.exit("codeFencedFence"),U($)):I($)}}}function ZM(e,t,r){const a=this;return s;function s(c){return c===null?r(c):(e.enter("lineEnding"),e.consume(c),e.exit("lineEnding"),o)}function o(c){return a.parser.lazy[a.now().line]?r(c):t(c)}}const Nh={name:"codeIndented",tokenize:WM},QM={partial:!0,tokenize:JM};function WM(e,t,r){const a=this;return s;function s(h){return e.enter("codeIndented"),ot(e,o,"linePrefix",5)(h)}function o(h){const p=a.events[a.events.length-1];return p&&p[1].type==="linePrefix"&&p[2].sliceSerialize(p[1],!0).length>=4?c(h):r(h)}function c(h){return h===null?f(h):Be(h)?e.attempt(QM,c,f)(h):(e.enter("codeFlowValue"),d(h))}function d(h){return h===null||Be(h)?(e.exit("codeFlowValue"),c(h)):(e.consume(h),d)}function f(h){return e.exit("codeIndented"),t(h)}}function JM(e,t,r){const a=this;return s;function s(c){return a.parser.lazy[a.now().line]?r(c):Be(c)?(e.enter("lineEnding"),e.consume(c),e.exit("lineEnding"),s):ot(e,o,"linePrefix",5)(c)}function o(c){const d=a.events[a.events.length-1];return d&&d[1].type==="linePrefix"&&d[2].sliceSerialize(d[1],!0).length>=4?t(c):Be(c)?s(c):r(c)}}const e5={name:"codeText",previous:n5,resolve:t5,tokenize:r5};function t5(e){let t=e.length-4,r=3,a,s;if((e[r][1].type==="lineEnding"||e[r][1].type==="space")&&(e[t][1].type==="lineEnding"||e[t][1].type==="space")){for(a=r;++a=this.left.length+this.right.length)throw new RangeError("Cannot access index `"+t+"` in a splice buffer of size `"+(this.left.length+this.right.length)+"`");return tthis.left.length?this.right.slice(this.right.length-a+this.left.length,this.right.length-t+this.left.length).reverse():this.left.slice(t).concat(this.right.slice(this.right.length-a+this.left.length).reverse())}splice(t,r,a){const s=r||0;this.setCursor(Math.trunc(t));const o=this.right.splice(this.right.length-s,Number.POSITIVE_INFINITY);return a&&Jl(this.left,a),o.reverse()}pop(){return this.setCursor(Number.POSITIVE_INFINITY),this.left.pop()}push(t){this.setCursor(Number.POSITIVE_INFINITY),this.left.push(t)}pushMany(t){this.setCursor(Number.POSITIVE_INFINITY),Jl(this.left,t)}unshift(t){this.setCursor(0),this.right.push(t)}unshiftMany(t){this.setCursor(0),Jl(this.right,t.reverse())}setCursor(t){if(!(t===this.left.length||t>this.left.length&&this.right.length===0||t<0&&this.left.length===0))if(t=4?t(c):e.interrupt(a.parser.constructs.flow,r,t)(c)}}function Rw(e,t,r,a,s,o,c,d,f){const h=f||Number.POSITIVE_INFINITY;let p=0;return g;function g(w){return w===60?(e.enter(a),e.enter(s),e.enter(o),e.consume(w),e.exit(o),y):w===null||w===32||w===41||ku(w)?r(w):(e.enter(a),e.enter(c),e.enter(d),e.enter("chunkString",{contentType:"string"}),E(w))}function y(w){return w===62?(e.enter(o),e.consume(w),e.exit(o),e.exit(s),e.exit(a),t):(e.enter(d),e.enter("chunkString",{contentType:"string"}),b(w))}function b(w){return w===62?(e.exit("chunkString"),e.exit(d),y(w)):w===null||w===60||Be(w)?r(w):(e.consume(w),w===92?_:b)}function _(w){return w===60||w===62||w===92?(e.consume(w),b):b(w)}function E(w){return!p&&(w===null||w===41||Tt(w))?(e.exit("chunkString"),e.exit(d),e.exit(c),e.exit(a),t(w)):p999||b===null||b===91||b===93&&!f||b===94&&!d&&"_hiddenFootnoteSupport"in c.parser.constructs?r(b):b===93?(e.exit(o),e.enter(s),e.consume(b),e.exit(s),e.exit(a),t):Be(b)?(e.enter("lineEnding"),e.consume(b),e.exit("lineEnding"),p):(e.enter("chunkString",{contentType:"string"}),g(b))}function g(b){return b===null||b===91||b===93||Be(b)||d++>999?(e.exit("chunkString"),p(b)):(e.consume(b),f||(f=!tt(b)),b===92?y:g)}function y(b){return b===91||b===92||b===93?(e.consume(b),d++,g):g(b)}}function Dw(e,t,r,a,s,o){let c;return d;function d(y){return y===34||y===39||y===40?(e.enter(a),e.enter(s),e.consume(y),e.exit(s),c=y===40?41:y,f):r(y)}function f(y){return y===c?(e.enter(s),e.consume(y),e.exit(s),e.exit(a),t):(e.enter(o),h(y))}function h(y){return y===c?(e.exit(o),f(c)):y===null?r(y):Be(y)?(e.enter("lineEnding"),e.consume(y),e.exit("lineEnding"),ot(e,h,"linePrefix")):(e.enter("chunkString",{contentType:"string"}),p(y))}function p(y){return y===c||y===null||Be(y)?(e.exit("chunkString"),h(y)):(e.consume(y),y===92?g:p)}function g(y){return y===c||y===92?(e.consume(y),p):p(y)}}function co(e,t){let r;return a;function a(s){return Be(s)?(e.enter("lineEnding"),e.consume(s),e.exit("lineEnding"),r=!0,a):tt(s)?ot(e,a,r?"linePrefix":"lineSuffix")(s):t(s)}}const d5={name:"definition",tokenize:h5},f5={partial:!0,tokenize:m5};function h5(e,t,r){const a=this;let s;return o;function o(b){return e.enter("definition"),c(b)}function c(b){return jw.call(a,e,d,r,"definitionLabel","definitionLabelMarker","definitionLabelString")(b)}function d(b){return s=Dr(a.sliceSerialize(a.events[a.events.length-1][1]).slice(1,-1)),b===58?(e.enter("definitionMarker"),e.consume(b),e.exit("definitionMarker"),f):r(b)}function f(b){return Tt(b)?co(e,h)(b):h(b)}function h(b){return Rw(e,p,r,"definitionDestination","definitionDestinationLiteral","definitionDestinationLiteralMarker","definitionDestinationRaw","definitionDestinationString")(b)}function p(b){return e.attempt(f5,g,g)(b)}function g(b){return tt(b)?ot(e,y,"whitespace")(b):y(b)}function y(b){return b===null||Be(b)?(e.exit("definition"),a.parser.defined.push(s),t(b)):r(b)}}function m5(e,t,r){return a;function a(d){return Tt(d)?co(e,s)(d):r(d)}function s(d){return Dw(e,o,r,"definitionTitle","definitionTitleMarker","definitionTitleString")(d)}function o(d){return tt(d)?ot(e,c,"whitespace")(d):c(d)}function c(d){return d===null||Be(d)?t(d):r(d)}}const p5={name:"hardBreakEscape",tokenize:g5};function g5(e,t,r){return a;function a(o){return e.enter("hardBreakEscape"),e.consume(o),s}function s(o){return Be(o)?(e.exit("hardBreakEscape"),t(o)):r(o)}}const x5={name:"headingAtx",resolve:b5,tokenize:y5};function b5(e,t){let r=e.length-2,a=3,s,o;return e[a][1].type==="whitespace"&&(a+=2),r-2>a&&e[r][1].type==="whitespace"&&(r-=2),e[r][1].type==="atxHeadingSequence"&&(a===r-1||r-4>a&&e[r-2][1].type==="whitespace")&&(r-=a+1===r?2:4),r>a&&(s={type:"atxHeadingText",start:e[a][1].start,end:e[r][1].end},o={type:"chunkText",start:e[a][1].start,end:e[r][1].end,contentType:"text"},ar(e,a,r-a+1,[["enter",s,t],["enter",o,t],["exit",o,t],["exit",s,t]])),e}function y5(e,t,r){let a=0;return s;function s(p){return e.enter("atxHeading"),o(p)}function o(p){return e.enter("atxHeadingSequence"),c(p)}function c(p){return p===35&&a++<6?(e.consume(p),c):p===null||Tt(p)?(e.exit("atxHeadingSequence"),d(p)):r(p)}function d(p){return p===35?(e.enter("atxHeadingSequence"),f(p)):p===null||Be(p)?(e.exit("atxHeading"),t(p)):tt(p)?ot(e,d,"whitespace")(p):(e.enter("atxHeadingText"),h(p))}function f(p){return p===35?(e.consume(p),f):(e.exit("atxHeadingSequence"),d(p))}function h(p){return p===null||p===35||Tt(p)?(e.exit("atxHeadingText"),d(p)):(e.consume(p),h)}}const v5=["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"],Ry=["pre","script","style","textarea"],_5={concrete:!0,name:"htmlFlow",resolveTo:N5,tokenize:S5},w5={partial:!0,tokenize:C5},E5={partial:!0,tokenize:k5};function N5(e){let t=e.length;for(;t--&&!(e[t][0]==="enter"&&e[t][1].type==="htmlFlow"););return t>1&&e[t-2][1].type==="linePrefix"&&(e[t][1].start=e[t-2][1].start,e[t+1][1].start=e[t-2][1].start,e.splice(t-2,2)),e}function S5(e,t,r){const a=this;let s,o,c,d,f;return h;function h(L){return p(L)}function p(L){return e.enter("htmlFlow"),e.enter("htmlFlowData"),e.consume(L),g}function g(L){return L===33?(e.consume(L),y):L===47?(e.consume(L),o=!0,E):L===63?(e.consume(L),s=3,a.interrupt?t:C):Ln(L)?(e.consume(L),c=String.fromCharCode(L),S):r(L)}function y(L){return L===45?(e.consume(L),s=2,b):L===91?(e.consume(L),s=5,d=0,_):Ln(L)?(e.consume(L),s=4,a.interrupt?t:C):r(L)}function b(L){return L===45?(e.consume(L),a.interrupt?t:C):r(L)}function _(L){const G="CDATA[";return L===G.charCodeAt(d++)?(e.consume(L),d===G.length?a.interrupt?t:V:_):r(L)}function E(L){return Ln(L)?(e.consume(L),c=String.fromCharCode(L),S):r(L)}function S(L){if(L===null||L===47||L===62||Tt(L)){const G=L===47,q=c.toLowerCase();return!G&&!o&&Ry.includes(q)?(s=1,a.interrupt?t(L):V(L)):v5.includes(c.toLowerCase())?(s=6,G?(e.consume(L),w):a.interrupt?t(L):V(L)):(s=7,a.interrupt&&!a.parser.lazy[a.now().line]?r(L):o?k(L):N(L))}return L===45||An(L)?(e.consume(L),c+=String.fromCharCode(L),S):r(L)}function w(L){return L===62?(e.consume(L),a.interrupt?t:V):r(L)}function k(L){return tt(L)?(e.consume(L),k):j(L)}function N(L){return L===47?(e.consume(L),j):L===58||L===95||Ln(L)?(e.consume(L),M):tt(L)?(e.consume(L),N):j(L)}function M(L){return L===45||L===46||L===58||L===95||An(L)?(e.consume(L),M):B(L)}function B(L){return L===61?(e.consume(L),R):tt(L)?(e.consume(L),B):N(L)}function R(L){return L===null||L===60||L===61||L===62||L===96?r(L):L===34||L===39?(e.consume(L),f=L,U):tt(L)?(e.consume(L),R):I(L)}function U(L){return L===f?(e.consume(L),f=null,X):L===null||Be(L)?r(L):(e.consume(L),U)}function I(L){return L===null||L===34||L===39||L===47||L===60||L===61||L===62||L===96||Tt(L)?B(L):(e.consume(L),I)}function X(L){return L===47||L===62||tt(L)?N(L):r(L)}function j(L){return L===62?(e.consume(L),z):r(L)}function z(L){return L===null||Be(L)?V(L):tt(L)?(e.consume(L),z):r(L)}function V(L){return L===45&&s===2?(e.consume(L),O):L===60&&s===1?(e.consume(L),H):L===62&&s===4?(e.consume(L),D):L===63&&s===3?(e.consume(L),C):L===93&&s===5?(e.consume(L),Z):Be(L)&&(s===6||s===7)?(e.exit("htmlFlowData"),e.check(w5,Y,P)(L)):L===null||Be(L)?(e.exit("htmlFlowData"),P(L)):(e.consume(L),V)}function P(L){return e.check(E5,T,Y)(L)}function T(L){return e.enter("lineEnding"),e.consume(L),e.exit("lineEnding"),$}function $(L){return L===null||Be(L)?P(L):(e.enter("htmlFlowData"),V(L))}function O(L){return L===45?(e.consume(L),C):V(L)}function H(L){return L===47?(e.consume(L),c="",K):V(L)}function K(L){if(L===62){const G=c.toLowerCase();return Ry.includes(G)?(e.consume(L),D):V(L)}return Ln(L)&&c.length<8?(e.consume(L),c+=String.fromCharCode(L),K):V(L)}function Z(L){return L===93?(e.consume(L),C):V(L)}function C(L){return L===62?(e.consume(L),D):L===45&&s===2?(e.consume(L),C):V(L)}function D(L){return L===null||Be(L)?(e.exit("htmlFlowData"),Y(L)):(e.consume(L),D)}function Y(L){return e.exit("htmlFlow"),t(L)}}function k5(e,t,r){const a=this;return s;function s(c){return Be(c)?(e.enter("lineEnding"),e.consume(c),e.exit("lineEnding"),o):r(c)}function o(c){return a.parser.lazy[a.now().line]?r(c):t(c)}}function C5(e,t,r){return a;function a(s){return e.enter("lineEnding"),e.consume(s),e.exit("lineEnding"),e.attempt(jo,t,r)}}const T5={name:"htmlText",tokenize:A5};function A5(e,t,r){const a=this;let s,o,c;return d;function d(C){return e.enter("htmlText"),e.enter("htmlTextData"),e.consume(C),f}function f(C){return C===33?(e.consume(C),h):C===47?(e.consume(C),B):C===63?(e.consume(C),N):Ln(C)?(e.consume(C),I):r(C)}function h(C){return C===45?(e.consume(C),p):C===91?(e.consume(C),o=0,_):Ln(C)?(e.consume(C),k):r(C)}function p(C){return C===45?(e.consume(C),b):r(C)}function g(C){return C===null?r(C):C===45?(e.consume(C),y):Be(C)?(c=g,H(C)):(e.consume(C),g)}function y(C){return C===45?(e.consume(C),b):g(C)}function b(C){return C===62?O(C):C===45?y(C):g(C)}function _(C){const D="CDATA[";return C===D.charCodeAt(o++)?(e.consume(C),o===D.length?E:_):r(C)}function E(C){return C===null?r(C):C===93?(e.consume(C),S):Be(C)?(c=E,H(C)):(e.consume(C),E)}function S(C){return C===93?(e.consume(C),w):E(C)}function w(C){return C===62?O(C):C===93?(e.consume(C),w):E(C)}function k(C){return C===null||C===62?O(C):Be(C)?(c=k,H(C)):(e.consume(C),k)}function N(C){return C===null?r(C):C===63?(e.consume(C),M):Be(C)?(c=N,H(C)):(e.consume(C),N)}function M(C){return C===62?O(C):N(C)}function B(C){return Ln(C)?(e.consume(C),R):r(C)}function R(C){return C===45||An(C)?(e.consume(C),R):U(C)}function U(C){return Be(C)?(c=U,H(C)):tt(C)?(e.consume(C),U):O(C)}function I(C){return C===45||An(C)?(e.consume(C),I):C===47||C===62||Tt(C)?X(C):r(C)}function X(C){return C===47?(e.consume(C),O):C===58||C===95||Ln(C)?(e.consume(C),j):Be(C)?(c=X,H(C)):tt(C)?(e.consume(C),X):O(C)}function j(C){return C===45||C===46||C===58||C===95||An(C)?(e.consume(C),j):z(C)}function z(C){return C===61?(e.consume(C),V):Be(C)?(c=z,H(C)):tt(C)?(e.consume(C),z):X(C)}function V(C){return C===null||C===60||C===61||C===62||C===96?r(C):C===34||C===39?(e.consume(C),s=C,P):Be(C)?(c=V,H(C)):tt(C)?(e.consume(C),V):(e.consume(C),T)}function P(C){return C===s?(e.consume(C),s=void 0,$):C===null?r(C):Be(C)?(c=P,H(C)):(e.consume(C),P)}function T(C){return C===null||C===34||C===39||C===60||C===61||C===96?r(C):C===47||C===62||Tt(C)?X(C):(e.consume(C),T)}function $(C){return C===47||C===62||Tt(C)?X(C):r(C)}function O(C){return C===62?(e.consume(C),e.exit("htmlTextData"),e.exit("htmlText"),t):r(C)}function H(C){return e.exit("htmlTextData"),e.enter("lineEnding"),e.consume(C),e.exit("lineEnding"),K}function K(C){return tt(C)?ot(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 Bp={name:"labelEnd",resolveAll:j5,resolveTo:D5,tokenize:L5},M5={tokenize:z5},O5={tokenize:I5},R5={tokenize:B5};function j5(e){let t=-1;const r=[];for(;++t=3&&(h===null||Be(h))?(e.exit("thematicBreak"),t(h)):r(h)}function f(h){return h===s?(e.consume(h),a++,f):(e.exit("thematicBreakSequence"),tt(h)?ot(e,d,"whitespace")(h):d(h))}}const Fn={continuation:{tokenize:X5},exit:Z5,name:"list",tokenize:Y5},G5={partial:!0,tokenize:Q5},V5={partial:!0,tokenize:K5};function Y5(e,t,r){const a=this,s=a.events[a.events.length-1];let o=s&&s[1].type==="linePrefix"?s[2].sliceSerialize(s[1],!0).length:0,c=0;return d;function d(b){const _=a.containerState.type||(b===42||b===43||b===45?"listUnordered":"listOrdered");if(_==="listUnordered"?!a.containerState.marker||b===a.containerState.marker:Wm(b)){if(a.containerState.type||(a.containerState.type=_,e.enter(_,{_container:!0})),_==="listUnordered")return e.enter("listItemPrefix"),b===42||b===45?e.check(xu,r,h)(b):h(b);if(!a.interrupt||b===49)return e.enter("listItemPrefix"),e.enter("listItemValue"),f(b)}return r(b)}function f(b){return Wm(b)&&++c<10?(e.consume(b),f):(!a.interrupt||c<2)&&(a.containerState.marker?b===a.containerState.marker:b===41||b===46)?(e.exit("listItemValue"),h(b)):r(b)}function h(b){return e.enter("listItemMarker"),e.consume(b),e.exit("listItemMarker"),a.containerState.marker=a.containerState.marker||b,e.check(jo,a.interrupt?r:p,e.attempt(G5,y,g))}function p(b){return a.containerState.initialBlankLine=!0,o++,y(b)}function g(b){return tt(b)?(e.enter("listItemPrefixWhitespace"),e.consume(b),e.exit("listItemPrefixWhitespace"),y):r(b)}function y(b){return a.containerState.size=o+a.sliceSerialize(e.exit("listItemPrefix"),!0).length,t(b)}}function X5(e,t,r){const a=this;return a.containerState._closeFlow=void 0,e.check(jo,s,o);function s(d){return a.containerState.furtherBlankLines=a.containerState.furtherBlankLines||a.containerState.initialBlankLine,ot(e,t,"listItemIndent",a.containerState.size+1)(d)}function o(d){return a.containerState.furtherBlankLines||!tt(d)?(a.containerState.furtherBlankLines=void 0,a.containerState.initialBlankLine=void 0,c(d)):(a.containerState.furtherBlankLines=void 0,a.containerState.initialBlankLine=void 0,e.attempt(V5,t,c)(d))}function c(d){return a.containerState._closeFlow=!0,a.interrupt=void 0,ot(e,e.attempt(Fn,t,r),"linePrefix",a.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(d)}}function K5(e,t,r){const a=this;return ot(e,s,"listItemIndent",a.containerState.size+1);function s(o){const c=a.events[a.events.length-1];return c&&c[1].type==="listItemIndent"&&c[2].sliceSerialize(c[1],!0).length===a.containerState.size?t(o):r(o)}}function Z5(e){e.exit(this.containerState.type)}function Q5(e,t,r){const a=this;return ot(e,s,"listItemPrefixWhitespace",a.parser.constructs.disable.null.includes("codeIndented")?void 0:5);function s(o){const c=a.events[a.events.length-1];return!tt(o)&&c&&c[1].type==="listItemPrefixWhitespace"?t(o):r(o)}}const jy={name:"setextUnderline",resolveTo:W5,tokenize:J5};function W5(e,t){let r=e.length,a,s,o;for(;r--;)if(e[r][0]==="enter"){if(e[r][1].type==="content"){a=r;break}e[r][1].type==="paragraph"&&(s=r)}else e[r][1].type==="content"&&e.splice(r,1),!o&&e[r][1].type==="definition"&&(o=r);const c={type:"setextHeading",start:{...e[a][1].start},end:{...e[e.length-1][1].end}};return e[s][1].type="setextHeadingText",o?(e.splice(s,0,["enter",c,t]),e.splice(o+1,0,["exit",e[a][1],t]),e[a][1].end={...e[o][1].end}):e[a][1]=c,e.push(["exit",c,t]),e}function J5(e,t,r){const a=this;let s;return o;function o(h){let p=a.events.length,g;for(;p--;)if(a.events[p][1].type!=="lineEnding"&&a.events[p][1].type!=="linePrefix"&&a.events[p][1].type!=="content"){g=a.events[p][1].type==="paragraph";break}return!a.parser.lazy[a.now().line]&&(a.interrupt||g)?(e.enter("setextHeadingLine"),s=h,c(h)):r(h)}function c(h){return e.enter("setextHeadingLineSequence"),d(h)}function d(h){return h===s?(e.consume(h),d):(e.exit("setextHeadingLineSequence"),tt(h)?ot(e,f,"lineSuffix")(h):f(h))}function f(h){return h===null||Be(h)?(e.exit("setextHeadingLine"),t(h)):r(h)}}const eO={tokenize:tO};function tO(e){const t=this,r=e.attempt(jo,a,e.attempt(this.parser.constructs.flowInitial,s,ot(e,e.attempt(this.parser.constructs.flow,s,e.attempt(s5,s)),"linePrefix")));return r;function a(o){if(o===null){e.consume(o);return}return e.enter("lineEndingBlank"),e.consume(o),e.exit("lineEndingBlank"),t.currentConstruct=void 0,r}function s(o){if(o===null){e.consume(o);return}return e.enter("lineEnding"),e.consume(o),e.exit("lineEnding"),t.currentConstruct=void 0,r}}const nO={resolveAll:zw()},rO=Lw("string"),iO=Lw("text");function Lw(e){return{resolveAll:zw(e==="text"?aO:void 0),tokenize:t};function t(r){const a=this,s=this.parser.constructs[e],o=r.attempt(s,c,d);return c;function c(p){return h(p)?o(p):d(p)}function d(p){if(p===null){r.consume(p);return}return r.enter("data"),r.consume(p),f}function f(p){return h(p)?(r.exit("data"),o(p)):(r.consume(p),f)}function h(p){if(p===null)return!0;const g=s[p];let y=-1;if(g)for(;++y-1){const d=c[0];typeof d=="string"?c[0]=d.slice(a):c.shift()}o>0&&c.push(e[s].slice(0,o))}return c}function bO(e,t){let r=-1;const a=[];let s;for(;++r0){const cn=Oe.tokenStack[Oe.tokenStack.length-1];(cn[1]||Ly).call(Oe,void 0,cn[0])}for(be.position={start:ia(ue.length>0?ue[0][1].start:{line:1,column:1,offset:0}),end:ia(ue.length>0?ue[ue.length-2][1].end:{line:1,column:1,offset:0})},Ze=-1;++Ze0&&(a.className=["language-"+s[0]]);let o={type:"element",tagName:"code",properties:a,children:[{type:"text",value:r}]};return t.meta&&(o.data={meta:t.meta}),e.patch(t,o),o=e.applyData(t,o),o={type:"element",tagName:"pre",properties:{},children:[o]},e.patch(t,o),o}function RO(e,t){const r={type:"element",tagName:"del",properties:{},children:e.all(t)};return e.patch(t,r),e.applyData(t,r)}function jO(e,t){const r={type:"element",tagName:"em",properties:{},children:e.all(t)};return e.patch(t,r),e.applyData(t,r)}function DO(e,t){const r=typeof e.options.clobberPrefix=="string"?e.options.clobberPrefix:"user-content-",a=String(t.identifier).toUpperCase(),s=rl(a.toLowerCase()),o=e.footnoteOrder.indexOf(a);let c,d=e.footnoteCounts.get(a);d===void 0?(d=0,e.footnoteOrder.push(a),c=e.footnoteOrder.length):c=o+1,d+=1,e.footnoteCounts.set(a,d);const f={type:"element",tagName:"a",properties:{href:"#"+r+"fn-"+s,id:r+"fnref-"+s+(d>1?"-"+d:""),dataFootnoteRef:!0,ariaDescribedBy:["footnote-label"]},children:[{type:"text",value:String(c)}]};e.patch(t,f);const h={type:"element",tagName:"sup",properties:{},children:[f]};return e.patch(t,h),e.applyData(t,h)}function LO(e,t){const r={type:"element",tagName:"h"+t.depth,properties:{},children:e.all(t)};return e.patch(t,r),e.applyData(t,r)}function zO(e,t){if(e.options.allowDangerousHtml){const r={type:"raw",value:t.value};return e.patch(t,r),e.applyData(t,r)}}function Uw(e,t){const r=t.referenceType;let a="]";if(r==="collapsed"?a+="[]":r==="full"&&(a+="["+(t.label||t.identifier)+"]"),t.type==="imageReference")return[{type:"text",value:"!["+t.alt+a}];const s=e.all(t),o=s[0];o&&o.type==="text"?o.value="["+o.value:s.unshift({type:"text",value:"["});const c=s[s.length-1];return c&&c.type==="text"?c.value+=a:s.push({type:"text",value:a}),s}function IO(e,t){const r=String(t.identifier).toUpperCase(),a=e.definitionById.get(r);if(!a)return Uw(e,t);const s={src:rl(a.url||""),alt:t.alt};a.title!==null&&a.title!==void 0&&(s.title=a.title);const o={type:"element",tagName:"img",properties:s,children:[]};return e.patch(t,o),e.applyData(t,o)}function BO(e,t){const r={src:rl(t.url)};t.alt!==null&&t.alt!==void 0&&(r.alt=t.alt),t.title!==null&&t.title!==void 0&&(r.title=t.title);const a={type:"element",tagName:"img",properties:r,children:[]};return e.patch(t,a),e.applyData(t,a)}function UO(e,t){const r={type:"text",value:t.value.replace(/\r?\n|\r/g," ")};e.patch(t,r);const a={type:"element",tagName:"code",properties:{},children:[r]};return e.patch(t,a),e.applyData(t,a)}function HO(e,t){const r=String(t.identifier).toUpperCase(),a=e.definitionById.get(r);if(!a)return Uw(e,t);const s={href:rl(a.url||"")};a.title!==null&&a.title!==void 0&&(s.title=a.title);const o={type:"element",tagName:"a",properties:s,children:e.all(t)};return e.patch(t,o),e.applyData(t,o)}function $O(e,t){const r={href:rl(t.url)};t.title!==null&&t.title!==void 0&&(r.title=t.title);const a={type:"element",tagName:"a",properties:r,children:e.all(t)};return e.patch(t,a),e.applyData(t,a)}function qO(e,t,r){const a=e.all(t),s=r?PO(r):Hw(t),o={},c=[];if(typeof t.checked=="boolean"){const p=a[0];let g;p&&p.type==="element"&&p.tagName==="p"?g=p:(g={type:"element",tagName:"p",properties:{},children:[]},a.unshift(g)),g.children.length>0&&g.children.unshift({type:"text",value:" "}),g.children.unshift({type:"element",tagName:"input",properties:{type:"checkbox",checked:t.checked,disabled:!0},children:[]}),o.className=["task-list-item"]}let d=-1;for(;++d1}function FO(e,t){const r={},a=e.all(t);let s=-1;for(typeof t.start=="number"&&t.start!==1&&(r.start=t.start);++s0){const c={type:"element",tagName:"tbody",properties:{},children:e.wrap(r,!0)},d=Rp(t.children[1]),f=yw(t.children[t.children.length-1]);d&&f&&(c.position={start:d,end:f}),s.push(c)}const o={type:"element",tagName:"table",properties:{},children:e.wrap(s,!0)};return e.patch(t,o),e.applyData(t,o)}function KO(e,t,r){const a=r?r.children:void 0,o=(a?a.indexOf(t):1)===0?"th":"td",c=r&&r.type==="table"?r.align:void 0,d=c?c.length:t.children.length;let f=-1;const h=[];for(;++f0,!0),a[0]),s=a.index+a[0].length,a=r.exec(t);return o.push(By(t.slice(s),s>0,!1)),o.join("")}function By(e,t,r){let a=0,s=e.length;if(t){let o=e.codePointAt(a);for(;o===zy||o===Iy;)a++,o=e.codePointAt(a)}if(r){let o=e.codePointAt(s-1);for(;o===zy||o===Iy;)s--,o=e.codePointAt(s-1)}return s>a?e.slice(a,s):""}function WO(e,t){const r={type:"text",value:QO(String(t.value))};return e.patch(t,r),e.applyData(t,r)}function JO(e,t){const r={type:"element",tagName:"hr",properties:{},children:[]};return e.patch(t,r),e.applyData(t,r)}const eR={blockquote:AO,break:MO,code:OO,delete:RO,emphasis:jO,footnoteReference:DO,heading:LO,html:zO,imageReference:IO,image:BO,inlineCode:UO,linkReference:HO,link:$O,listItem:qO,list:FO,paragraph:GO,root:VO,strong:YO,table:XO,tableCell:ZO,tableRow:KO,text:WO,thematicBreak:JO,toml:tu,yaml:tu,definition:tu,footnoteDefinition:tu};function tu(){}const $w=-1,Zu=0,uo=1,Cu=2,Up=3,Hp=4,$p=5,qp=6,qw=7,Pw=8,Fw=typeof self=="object"?self:globalThis,Uy=(e,t)=>{switch(e){case"Function":case"SharedWorker":case"Worker":case"eval":case"setInterval":case"setTimeout":throw new TypeError("unable to deserialize "+e)}return new Fw[e](t)},tR=(e,t)=>{const r=(s,o)=>(e.set(o,s),s),a=s=>{if(e.has(s))return e.get(s);const[o,c]=t[s];switch(o){case Zu:case $w:return r(c,s);case uo:{const d=r([],s);for(const f of c)d.push(a(f));return d}case Cu:{const d=r({},s);for(const[f,h]of c)d[a(f)]=a(h);return d}case Up:return r(new Date(c),s);case Hp:{const{source:d,flags:f}=c;return r(new RegExp(d,f),s)}case $p:{const d=r(new Map,s);for(const[f,h]of c)d.set(a(f),a(h));return d}case qp:{const d=r(new Set,s);for(const f of c)d.add(a(f));return d}case qw:{const{name:d,message:f}=c;return r(typeof Fw[d]=="function"?Uy(d,f):new Error(f),s)}case Pw:return r(BigInt(c),s);case"BigInt":return r(Object(BigInt(c)),s);case"ArrayBuffer":return r(new Uint8Array(c).buffer,c);case"DataView":{const{buffer:d}=new Uint8Array(c);return r(new DataView(d),c)}}return r(Uy(o,c),s)};return a},Hy=e=>tR(new Map,e)(0),Ua="",{toString:nR}={},{keys:rR}=Object,eo=e=>{const t=typeof e;if(t!=="object"||!e)return[Zu,t];const r=nR.call(e).slice(8,-1);switch(r){case"Array":return[uo,Ua];case"Object":return[Cu,Ua];case"Date":return[Up,Ua];case"RegExp":return[Hp,Ua];case"Map":return[$p,Ua];case"Set":return[qp,Ua];case"DataView":return[uo,r]}return r.includes("Array")?[uo,r]:e instanceof Error?[qw,e.name||"Error"]:[Cu,r]},nu=([e,t])=>e===Zu&&(t==="function"||t==="symbol"),iR=(e,t,r,a)=>{const s=(c,d)=>{const f=a.push(c)-1;return r.set(d,f),f},o=c=>{if(r.has(c))return r.get(c);let[d,f]=eo(c);switch(d){case Zu:{let p=c;switch(f){case"bigint":d=Pw,p=c.toString();break;case"function":case"symbol":if(e)throw new TypeError("unable to serialize "+f);p=null;break;case"undefined":return s([$w],c)}return s([d,p],c)}case uo:{if(f){let y=c;return f==="DataView"?y=new Uint8Array(c.buffer):f==="ArrayBuffer"&&(y=new Uint8Array(c)),s([f,[...y]],c)}const p=[],g=s([d,p],c);for(const y of c)p.push(o(y));return g}case Cu:{if(f)switch(f){case"BigInt":return s([f,c.toString()],c);case"Boolean":case"Number":case"String":return s([f,c.valueOf()],c)}if(t&&"toJSON"in c)return o(c.toJSON());const p=[],g=s([d,p],c);for(const y of rR(c))(e||!nu(eo(c[y])))&&p.push([o(y),o(c[y])]);return g}case Up:return s([d,isNaN(c.getTime())?Ua:c.toISOString()],c);case Hp:{const{source:p,flags:g}=c;return s([d,{source:p,flags:g}],c)}case $p:{const p=[],g=s([d,p],c);for(const[y,b]of c)(e||!(nu(eo(y))||nu(eo(b))))&&p.push([o(y),o(b)]);return g}case qp:{const p=[],g=s([d,p],c);for(const y of c)(e||!nu(eo(y)))&&p.push(o(y));return g}}const{message:h}=c;return s([d,{name:f,message:h}],c)};return o},$y=(e,{json:t,lossy:r}={})=>{const a=[];return iR(!(t||r),!!t,new Map,a)(e),a},Tu=typeof structuredClone=="function"?(e,t)=>t&&("json"in t||"lossy"in t)?Hy($y(e,t)):structuredClone(e):(e,t)=>Hy($y(e,t));function aR(e,t){const r=[{type:"text",value:"↩"}];return t>1&&r.push({type:"element",tagName:"sup",properties:{},children:[{type:"text",value:String(t)}]}),r}function sR(e,t){return"Back to reference "+(e+1)+(t>1?"-"+t:"")}function lR(e){const t=typeof e.options.clobberPrefix=="string"?e.options.clobberPrefix:"user-content-",r=e.options.footnoteBackContent||aR,a=e.options.footnoteBackLabel||sR,s=e.options.footnoteLabel||"Footnotes",o=e.options.footnoteLabelTagName||"h2",c=e.options.footnoteLabelProperties||{className:["sr-only"]},d=[];let f=-1;for(;++f0&&_.push({type:"text",value:" "});let k=typeof r=="string"?r:r(f,b);typeof k=="string"&&(k={type:"text",value:k}),_.push({type:"element",tagName:"a",properties:{href:"#"+t+"fnref-"+y+(b>1?"-"+b:""),dataFootnoteBackref:"",ariaLabel:typeof a=="string"?a:a(f,b),className:["data-footnote-backref"]},children:Array.isArray(k)?k:[k]})}const S=p[p.length-1];if(S&&S.type==="element"&&S.tagName==="p"){const k=S.children[S.children.length-1];k&&k.type==="text"?k.value+=" ":S.children.push({type:"text",value:" "}),S.children.push(..._)}else p.push(..._);const w={type:"element",tagName:"li",properties:{id:t+"fn-"+y},children:e.wrap(p,!0)};e.patch(h,w),d.push(w)}if(d.length!==0)return{type:"element",tagName:"section",properties:{dataFootnotes:!0,className:["footnotes"]},children:[{type:"element",tagName:o,properties:{...Tu(c),id:"footnote-label"},children:[{type:"text",value:s}]},{type:"text",value:` +`},{type:"element",tagName:"ol",properties:{},children:e.wrap(d,!0)},{type:"text",value:` +`}]}}const Qu=(function(e){if(e==null)return dR;if(typeof e=="function")return Wu(e);if(typeof e=="object")return Array.isArray(e)?oR(e):cR(e);if(typeof e=="string")return uR(e);throw new Error("Expected function, string, or object as test")});function oR(e){const t=[];let r=-1;for(;++r":""))+")"})}return y;function y(){let b=Gw,_,E,S;if((!t||o(f,h,p[p.length-1]||void 0))&&(b=pR(r(f,p)),b[0]===ep))return b;if("children"in f&&f.children){const w=f;if(w.children&&b[0]!==mR)for(E=(a?w.children.length:-1)+c,S=p.concat(w);E>-1&&E0&&r.push({type:"text",value:` +`}),r}function qy(e){let t=0,r=e.charCodeAt(t);for(;r===9||r===32;)t++,r=e.charCodeAt(t);return e.slice(t)}function Py(e,t){const r=xR(e,t),a=r.one(e,void 0),s=lR(r),o=Array.isArray(a)?{type:"root",children:a}:a||{type:"root",children:[]};return s&&o.children.push({type:"text",value:` +`},s),o}function wR(e,t){return e&&"run"in e?async function(r,a){const s=Py(r,{file:a,...t});await e.run(s,a)}:function(r,a){return Py(r,{file:a,...e||t})}}function Fy(e){if(e)throw e}var kh,Gy;function ER(){if(Gy)return kh;Gy=1;var e=Object.prototype.hasOwnProperty,t=Object.prototype.toString,r=Object.defineProperty,a=Object.getOwnPropertyDescriptor,s=function(h){return typeof Array.isArray=="function"?Array.isArray(h):t.call(h)==="[object Array]"},o=function(h){if(!h||t.call(h)!=="[object Object]")return!1;var p=e.call(h,"constructor"),g=h.constructor&&h.constructor.prototype&&e.call(h.constructor.prototype,"isPrototypeOf");if(h.constructor&&!p&&!g)return!1;var y;for(y in h);return typeof y>"u"||e.call(h,y)},c=function(h,p){r&&p.name==="__proto__"?r(h,p.name,{enumerable:!0,configurable:!0,value:p.newValue,writable:!0}):h[p.name]=p.newValue},d=function(h,p){if(p==="__proto__")if(e.call(h,p)){if(a)return a(h,p).value}else return;return h[p]};return kh=function f(){var h,p,g,y,b,_,E=arguments[0],S=1,w=arguments.length,k=!1;for(typeof E=="boolean"&&(k=E,E=arguments[1]||{},S=2),(E==null||typeof E!="object"&&typeof E!="function")&&(E={});Sc.length;let f;d&&c.push(s);try{f=e.apply(this,c)}catch(h){const p=h;if(d&&r)throw p;return s(p)}d||(f&&f.then&&typeof f.then=="function"?f.then(o,s):f instanceof Error?s(f):o(f))}function s(c,...d){r||(r=!0,t(c,...d))}function o(c){s(null,c)}}const Gr={basename:CR,dirname:TR,extname:AR,join:MR,sep:"/"};function CR(e,t){if(t!==void 0&&typeof t!="string")throw new TypeError('"ext" argument must be a string');Do(e);let r=0,a=-1,s=e.length,o;if(t===void 0||t.length===0||t.length>e.length){for(;s--;)if(e.codePointAt(s)===47){if(o){r=s+1;break}}else a<0&&(o=!0,a=s+1);return a<0?"":e.slice(r,a)}if(t===e)return"";let c=-1,d=t.length-1;for(;s--;)if(e.codePointAt(s)===47){if(o){r=s+1;break}}else c<0&&(o=!0,c=s+1),d>-1&&(e.codePointAt(s)===t.codePointAt(d--)?d<0&&(a=s):(d=-1,a=c));return r===a?a=c:a<0&&(a=e.length),e.slice(r,a)}function TR(e){if(Do(e),e.length===0)return".";let t=-1,r=e.length,a;for(;--r;)if(e.codePointAt(r)===47){if(a){t=r;break}}else a||(a=!0);return t<0?e.codePointAt(0)===47?"/":".":t===1&&e.codePointAt(0)===47?"//":e.slice(0,t)}function AR(e){Do(e);let t=e.length,r=-1,a=0,s=-1,o=0,c;for(;t--;){const d=e.codePointAt(t);if(d===47){if(c){a=t+1;break}continue}r<0&&(c=!0,r=t+1),d===46?s<0?s=t:o!==1&&(o=1):s>-1&&(o=-1)}return s<0||r<0||o===0||o===1&&s===r-1&&s===a+1?"":e.slice(s,r)}function MR(...e){let t=-1,r;for(;++t0&&e.codePointAt(e.length-1)===47&&(r+="/"),t?"/"+r:r}function RR(e,t){let r="",a=0,s=-1,o=0,c=-1,d,f;for(;++c<=e.length;){if(c2){if(f=r.lastIndexOf("/"),f!==r.length-1){f<0?(r="",a=0):(r=r.slice(0,f),a=r.length-1-r.lastIndexOf("/")),s=c,o=0;continue}}else if(r.length>0){r="",a=0,s=c,o=0;continue}}t&&(r=r.length>0?r+"/..":"..",a=2)}else r.length>0?r+="/"+e.slice(s+1,c):r=e.slice(s+1,c),a=c-s-1;s=c,o=0}else d===46&&o>-1?o++:o=-1}return r}function Do(e){if(typeof e!="string")throw new TypeError("Path must be a string. Received "+JSON.stringify(e))}const jR={cwd:DR};function DR(){return"/"}function rp(e){return!!(e!==null&&typeof e=="object"&&"href"in e&&e.href&&"protocol"in e&&e.protocol&&e.auth===void 0)}function LR(e){if(typeof e=="string")e=new URL(e);else if(!rp(e)){const t=new TypeError('The "path" argument must be of type string or an instance of URL. Received `'+e+"`");throw t.code="ERR_INVALID_ARG_TYPE",t}if(e.protocol!=="file:"){const t=new TypeError("The URL must be of scheme file");throw t.code="ERR_INVALID_URL_SCHEME",t}return zR(e)}function zR(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 t=e.pathname;let r=-1;for(;++r0){let[b,..._]=p;const E=a[y][1];np(E)&&np(b)&&(b=Ch(!0,E,b)),a[y]=[h,b,..._]}}}}const HR=new Fp().freeze();function Oh(e,t){if(typeof t!="function")throw new TypeError("Cannot `"+e+"` without `parser`")}function Rh(e,t){if(typeof t!="function")throw new TypeError("Cannot `"+e+"` without `compiler`")}function jh(e,t){if(t)throw new Error("Cannot call `"+e+"` on a frozen processor.\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.")}function Yy(e){if(!np(e)||typeof e.type!="string")throw new TypeError("Expected node, got `"+e+"`")}function Xy(e,t,r){if(!r)throw new Error("`"+e+"` finished async. Use `"+t+"` instead")}function ru(e){return $R(e)?e:new Yw(e)}function $R(e){return!!(e&&typeof e=="object"&&"message"in e&&"messages"in e)}function qR(e){return typeof e=="string"||PR(e)}function PR(e){return!!(e&&typeof e=="object"&&"byteLength"in e&&"byteOffset"in e)}const FR="https://github.com/remarkjs/react-markdown/blob/main/changelog.md",Ky=[],Zy={allowDangerousHtml:!0},GR=/^(https?|ircs?|mailto|xmpp)$/i,VR=[{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 Gp(e){const t=YR(e),r=XR(e);return KR(t.runSync(t.parse(r),r),e)}function YR(e){const t=e.rehypePlugins||Ky,r=e.remarkPlugins||Ky,a=e.remarkRehypeOptions?{...e.remarkRehypeOptions,...Zy}:Zy;return HR().use(TO).use(r).use(wR,a).use(t)}function XR(e){const t=e.children||"",r=new Yw;return typeof t=="string"&&(r.value=t),r}function KR(e,t){const r=t.allowedElements,a=t.allowElement,s=t.components,o=t.disallowedElements,c=t.skipHtml,d=t.unwrapDisallowed,f=t.urlTransform||ZR;for(const p of VR)Object.hasOwn(t,p.from)&&(""+p.from+(p.to?"use `"+p.to+"` instead":"remove it")+FR+p.id,void 0);return Pp(e,h),dM(e,{Fragment:m.Fragment,components:s,ignoreInvalidStyle:!0,jsx:m.jsx,jsxs:m.jsxs,passKeys:!0,passNode:!0});function h(p,g,y){if(p.type==="raw"&&y&&typeof g=="number")return c?y.children.splice(g,1):y.children[g]={type:"text",value:p.value},g;if(p.type==="element"){let b;for(b in Eh)if(Object.hasOwn(Eh,b)&&Object.hasOwn(p.properties,b)){const _=p.properties[b],E=Eh[b];(E===null||E.includes(p.tagName))&&(p.properties[b]=f(String(_||""),b,p))}}if(p.type==="element"){let b=r?!r.includes(p.tagName):o?o.includes(p.tagName):!1;if(!b&&a&&typeof g=="number"&&(b=!a(p,g,y)),b&&y&&typeof g=="number")return d&&p.children?y.children.splice(g,1,...p.children):y.children.splice(g,1),g}}}function ZR(e){const t=e.indexOf(":"),r=e.indexOf("?"),a=e.indexOf("#"),s=e.indexOf("/");return t===-1||s!==-1&&t>s||r!==-1&&t>r||a!==-1&&t>a||GR.test(e.slice(0,t))?e:""}function Qy(e,t){const r=String(e);if(typeof t!="string")throw new TypeError("Expected character");let a=0,s=r.indexOf(t);for(;s!==-1;)a++,s=r.indexOf(t,s+t.length);return a}function QR(e){if(typeof e!="string")throw new TypeError("Expected a string");return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}function WR(e,t,r){const s=Qu((r||{}).ignore||[]),o=JR(t);let c=-1;for(;++c0?{type:"text",value:R}:void 0),R===!1?y.lastIndex=M+1:(_!==M&&k.push({type:"text",value:h.value.slice(_,M)}),Array.isArray(R)?k.push(...R):R&&k.push(R),_=M+N[0].length,w=!0),!y.global)break;N=y.exec(h.value)}return w?(_?\]}]+$/.exec(e);if(!t)return[e,void 0];e=e.slice(0,t.index);let r=t[0],a=r.indexOf(")");const s=Qy(e,"(");let o=Qy(e,")");for(;a!==-1&&s>o;)e+=r.slice(0,a+1),r=r.slice(a+1),a=r.indexOf(")"),o++;return[e,r]}function Xw(e,t){const r=e.input.charCodeAt(e.index-1);return(e.index===0||Va(r)||Xu(r))&&(!t||r!==47)}Kw.peek=w3;function m3(){this.buffer()}function p3(e){this.enter({type:"footnoteReference",identifier:"",label:""},e)}function g3(){this.buffer()}function x3(e){this.enter({type:"footnoteDefinition",identifier:"",label:"",children:[]},e)}function b3(e){const t=this.resume(),r=this.stack[this.stack.length-1];r.type,r.identifier=Dr(this.sliceSerialize(e)).toLowerCase(),r.label=t}function y3(e){this.exit(e)}function v3(e){const t=this.resume(),r=this.stack[this.stack.length-1];r.type,r.identifier=Dr(this.sliceSerialize(e)).toLowerCase(),r.label=t}function _3(e){this.exit(e)}function w3(){return"["}function Kw(e,t,r,a){const s=r.createTracker(a);let o=s.move("[^");const c=r.enter("footnoteReference"),d=r.enter("reference");return o+=s.move(r.safe(r.associationId(e),{after:"]",before:o})),d(),c(),o+=s.move("]"),o}function E3(){return{enter:{gfmFootnoteCallString:m3,gfmFootnoteCall:p3,gfmFootnoteDefinitionLabelString:g3,gfmFootnoteDefinition:x3},exit:{gfmFootnoteCallString:b3,gfmFootnoteCall:y3,gfmFootnoteDefinitionLabelString:v3,gfmFootnoteDefinition:_3}}}function N3(e){let t=!1;return e&&e.firstLineBlank&&(t=!0),{handlers:{footnoteDefinition:r,footnoteReference:Kw},unsafe:[{character:"[",inConstruct:["label","phrasing","reference"]}]};function r(a,s,o,c){const d=o.createTracker(c);let f=d.move("[^");const h=o.enter("footnoteDefinition"),p=o.enter("label");return f+=d.move(o.safe(o.associationId(a),{before:f,after:"]"})),p(),f+=d.move("]:"),a.children&&a.children.length>0&&(d.shift(4),f+=d.move((t?` +`:" ")+o.indentLines(o.containerFlow(a,d.current()),t?Zw:S3))),h(),f}}function S3(e,t,r){return t===0?e:Zw(e,t,r)}function Zw(e,t,r){return(r?"":" ")+e}const k3=["autolink","destinationLiteral","destinationRaw","reference","titleQuote","titleApostrophe"];Qw.peek=O3;function C3(){return{canContainEols:["delete"],enter:{strikethrough:A3},exit:{strikethrough:M3}}}function T3(){return{unsafe:[{character:"~",inConstruct:"phrasing",notInConstruct:k3}],handlers:{delete:Qw}}}function A3(e){this.enter({type:"delete",children:[]},e)}function M3(e){this.exit(e)}function Qw(e,t,r,a){const s=r.createTracker(a),o=r.enter("strikethrough");let c=s.move("~~");return c+=r.containerPhrasing(e,{...s.current(),before:c,after:"~"}),c+=s.move("~~"),o(),c}function O3(){return"~"}function R3(e){return e.length}function j3(e,t){const r=t||{},a=(r.align||[]).concat(),s=r.stringLength||R3,o=[],c=[],d=[],f=[];let h=0,p=-1;for(;++ph&&(h=e[p].length);++wf[w])&&(f[w]=N)}E.push(k)}c[p]=E,d[p]=S}let g=-1;if(typeof a=="object"&&"length"in a)for(;++gf[g]&&(f[g]=k),b[g]=k),y[g]=N}c.splice(1,0,y),d.splice(1,0,b),p=-1;const _=[];for(;++p "),o.shift(2);const c=r.indentLines(r.containerFlow(e,o.current()),z3);return s(),c}function z3(e,t,r){return">"+(r?"":" ")+e}function I3(e,t){return Jy(e,t.inConstruct,!0)&&!Jy(e,t.notInConstruct,!1)}function Jy(e,t,r){if(typeof t=="string"&&(t=[t]),!t||t.length===0)return r;let a=-1;for(;++ac&&(c=o):o=1,s=a+t.length,a=r.indexOf(t,s);return c}function U3(e,t){return!!(t.options.fences===!1&&e.value&&!e.lang&&/[^ \r\n]/.test(e.value)&&!/^[\t ]*(?:[\r\n]|$)|(?:^|[\r\n])[\t ]*$/.test(e.value))}function H3(e){const t=e.options.fence||"`";if(t!=="`"&&t!=="~")throw new Error("Cannot serialize code with `"+t+"` for `options.fence`, expected `` ` `` or `~`");return t}function $3(e,t,r,a){const s=H3(r),o=e.value||"",c=s==="`"?"GraveAccent":"Tilde";if(U3(e,r)){const g=r.enter("codeIndented"),y=r.indentLines(o,q3);return g(),y}const d=r.createTracker(a),f=s.repeat(Math.max(B3(o,s)+1,3)),h=r.enter("codeFenced");let p=d.move(f);if(e.lang){const g=r.enter(`codeFencedLang${c}`);p+=d.move(r.safe(e.lang,{before:p,after:" ",encode:["`"],...d.current()})),g()}if(e.lang&&e.meta){const g=r.enter(`codeFencedMeta${c}`);p+=d.move(" "),p+=d.move(r.safe(e.meta,{before:p,after:` +`,encode:["`"],...d.current()})),g()}return p+=d.move(` +`),o&&(p+=d.move(o+` +`)),p+=d.move(f),h(),p}function q3(e,t,r){return(r?"":" ")+e}function Vp(e){const t=e.options.quote||'"';if(t!=='"'&&t!=="'")throw new Error("Cannot serialize title with `"+t+"` for `options.quote`, expected `\"`, or `'`");return t}function P3(e,t,r,a){const s=Vp(r),o=s==='"'?"Quote":"Apostrophe",c=r.enter("definition");let d=r.enter("label");const f=r.createTracker(a);let h=f.move("[");return h+=f.move(r.safe(r.associationId(e),{before:h,after:"]",...f.current()})),h+=f.move("]: "),d(),!e.url||/[\0- \u007F]/.test(e.url)?(d=r.enter("destinationLiteral"),h+=f.move("<"),h+=f.move(r.safe(e.url,{before:h,after:">",...f.current()})),h+=f.move(">")):(d=r.enter("destinationRaw"),h+=f.move(r.safe(e.url,{before:h,after:e.title?" ":` +`,...f.current()}))),d(),e.title&&(d=r.enter(`title${o}`),h+=f.move(" "+s),h+=f.move(r.safe(e.title,{before:h,after:s,...f.current()})),h+=f.move(s),d()),c(),h}function F3(e){const t=e.options.emphasis||"*";if(t!=="*"&&t!=="_")throw new Error("Cannot serialize emphasis with `"+t+"` for `options.emphasis`, expected `*`, or `_`");return t}function bo(e){return"&#x"+e.toString(16).toUpperCase()+";"}function Au(e,t,r){const a=Xs(e),s=Xs(t);return a===void 0?s===void 0?r==="_"?{inside:!0,outside:!0}:{inside:!1,outside:!1}:s===1?{inside:!0,outside:!0}:{inside:!1,outside:!0}:a===1?s===void 0?{inside:!1,outside:!1}:s===1?{inside:!0,outside:!0}:{inside:!1,outside:!1}:s===void 0?{inside:!1,outside:!1}:s===1?{inside:!0,outside:!1}:{inside:!1,outside:!1}}Ww.peek=G3;function Ww(e,t,r,a){const s=F3(r),o=r.enter("emphasis"),c=r.createTracker(a),d=c.move(s);let f=c.move(r.containerPhrasing(e,{after:s,before:d,...c.current()}));const h=f.charCodeAt(0),p=Au(a.before.charCodeAt(a.before.length-1),h,s);p.inside&&(f=bo(h)+f.slice(1));const g=f.charCodeAt(f.length-1),y=Au(a.after.charCodeAt(0),g,s);y.inside&&(f=f.slice(0,-1)+bo(g));const b=c.move(s);return o(),r.attentionEncodeSurroundingInfo={after:y.outside,before:p.outside},d+f+b}function G3(e,t,r){return r.options.emphasis||"*"}function V3(e,t){let r=!1;return Pp(e,function(a){if("value"in a&&/\r?\n|\r/.test(a.value)||a.type==="break")return r=!0,ep}),!!((!e.depth||e.depth<3)&&zp(e)&&(t.options.setext||r))}function Y3(e,t,r,a){const s=Math.max(Math.min(6,e.depth||1),1),o=r.createTracker(a);if(V3(e,r)){const p=r.enter("headingSetext"),g=r.enter("phrasing"),y=r.containerPhrasing(e,{...o.current(),before:` +`,after:` +`});return g(),p(),y+` +`+(s===1?"=":"-").repeat(y.length-(Math.max(y.lastIndexOf("\r"),y.lastIndexOf(` +`))+1))}const c="#".repeat(s),d=r.enter("headingAtx"),f=r.enter("phrasing");o.move(c+" ");let h=r.containerPhrasing(e,{before:"# ",after:` +`,...o.current()});return/^[\t ]/.test(h)&&(h=bo(h.charCodeAt(0))+h.slice(1)),h=h?c+" "+h:c,r.options.closeAtx&&(h+=" "+c),f(),d(),h}Jw.peek=X3;function Jw(e){return e.value||""}function X3(){return"<"}eE.peek=K3;function eE(e,t,r,a){const s=Vp(r),o=s==='"'?"Quote":"Apostrophe",c=r.enter("image");let d=r.enter("label");const f=r.createTracker(a);let h=f.move("![");return h+=f.move(r.safe(e.alt,{before:h,after:"]",...f.current()})),h+=f.move("]("),d(),!e.url&&e.title||/[\0- \u007F]/.test(e.url)?(d=r.enter("destinationLiteral"),h+=f.move("<"),h+=f.move(r.safe(e.url,{before:h,after:">",...f.current()})),h+=f.move(">")):(d=r.enter("destinationRaw"),h+=f.move(r.safe(e.url,{before:h,after:e.title?" ":")",...f.current()}))),d(),e.title&&(d=r.enter(`title${o}`),h+=f.move(" "+s),h+=f.move(r.safe(e.title,{before:h,after:s,...f.current()})),h+=f.move(s),d()),h+=f.move(")"),c(),h}function K3(){return"!"}tE.peek=Z3;function tE(e,t,r,a){const s=e.referenceType,o=r.enter("imageReference");let c=r.enter("label");const d=r.createTracker(a);let f=d.move("![");const h=r.safe(e.alt,{before:f,after:"]",...d.current()});f+=d.move(h+"]["),c();const p=r.stack;r.stack=[],c=r.enter("reference");const g=r.safe(r.associationId(e),{before:f,after:"]",...d.current()});return c(),r.stack=p,o(),s==="full"||!h||h!==g?f+=d.move(g+"]"):s==="shortcut"?f=f.slice(0,-1):f+=d.move("]"),f}function Z3(){return"!"}nE.peek=Q3;function nE(e,t,r){let a=e.value||"",s="`",o=-1;for(;new RegExp("(^|[^`])"+s+"([^`]|$)").test(a);)s+="`";for(/[^ \r\n]/.test(a)&&(/^[ \r\n]/.test(a)&&/[ \r\n]$/.test(a)||/^`|`$/.test(a))&&(a=" "+a+" ");++o\u007F]/.test(e.url))}iE.peek=W3;function iE(e,t,r,a){const s=Vp(r),o=s==='"'?"Quote":"Apostrophe",c=r.createTracker(a);let d,f;if(rE(e,r)){const p=r.stack;r.stack=[],d=r.enter("autolink");let g=c.move("<");return g+=c.move(r.containerPhrasing(e,{before:g,after:">",...c.current()})),g+=c.move(">"),d(),r.stack=p,g}d=r.enter("link"),f=r.enter("label");let h=c.move("[");return h+=c.move(r.containerPhrasing(e,{before:h,after:"](",...c.current()})),h+=c.move("]("),f(),!e.url&&e.title||/[\0- \u007F]/.test(e.url)?(f=r.enter("destinationLiteral"),h+=c.move("<"),h+=c.move(r.safe(e.url,{before:h,after:">",...c.current()})),h+=c.move(">")):(f=r.enter("destinationRaw"),h+=c.move(r.safe(e.url,{before:h,after:e.title?" ":")",...c.current()}))),f(),e.title&&(f=r.enter(`title${o}`),h+=c.move(" "+s),h+=c.move(r.safe(e.title,{before:h,after:s,...c.current()})),h+=c.move(s),f()),h+=c.move(")"),d(),h}function W3(e,t,r){return rE(e,r)?"<":"["}aE.peek=J3;function aE(e,t,r,a){const s=e.referenceType,o=r.enter("linkReference");let c=r.enter("label");const d=r.createTracker(a);let f=d.move("[");const h=r.containerPhrasing(e,{before:f,after:"]",...d.current()});f+=d.move(h+"]["),c();const p=r.stack;r.stack=[],c=r.enter("reference");const g=r.safe(r.associationId(e),{before:f,after:"]",...d.current()});return c(),r.stack=p,o(),s==="full"||!h||h!==g?f+=d.move(g+"]"):s==="shortcut"?f=f.slice(0,-1):f+=d.move("]"),f}function J3(){return"["}function Yp(e){const t=e.options.bullet||"*";if(t!=="*"&&t!=="+"&&t!=="-")throw new Error("Cannot serialize items with `"+t+"` for `options.bullet`, expected `*`, `+`, or `-`");return t}function e4(e){const t=Yp(e),r=e.options.bulletOther;if(!r)return t==="*"?"-":"*";if(r!=="*"&&r!=="+"&&r!=="-")throw new Error("Cannot serialize items with `"+r+"` for `options.bulletOther`, expected `*`, `+`, or `-`");if(r===t)throw new Error("Expected `bullet` (`"+t+"`) and `bulletOther` (`"+r+"`) to be different");return r}function t4(e){const t=e.options.bulletOrdered||".";if(t!=="."&&t!==")")throw new Error("Cannot serialize items with `"+t+"` for `options.bulletOrdered`, expected `.` or `)`");return t}function sE(e){const t=e.options.rule||"*";if(t!=="*"&&t!=="-"&&t!=="_")throw new Error("Cannot serialize rules with `"+t+"` for `options.rule`, expected `*`, `-`, or `_`");return t}function n4(e,t,r,a){const s=r.enter("list"),o=r.bulletCurrent;let c=e.ordered?t4(r):Yp(r);const d=e.ordered?c==="."?")":".":e4(r);let f=t&&r.bulletLastUsed?c===r.bulletLastUsed:!1;if(!e.ordered){const p=e.children?e.children[0]:void 0;if((c==="*"||c==="-")&&p&&(!p.children||!p.children[0])&&r.stack[r.stack.length-1]==="list"&&r.stack[r.stack.length-2]==="listItem"&&r.stack[r.stack.length-3]==="list"&&r.stack[r.stack.length-4]==="listItem"&&r.indexStack[r.indexStack.length-1]===0&&r.indexStack[r.indexStack.length-2]===0&&r.indexStack[r.indexStack.length-3]===0&&(f=!0),sE(r)===c&&p){let g=-1;for(;++g-1?t.start:1)+(r.options.incrementListMarker===!1?0:t.children.indexOf(e))+o);let c=o.length+1;(s==="tab"||s==="mixed"&&(t&&t.type==="list"&&t.spread||e.spread))&&(c=Math.ceil(c/4)*4);const d=r.createTracker(a);d.move(o+" ".repeat(c-o.length)),d.shift(c);const f=r.enter("listItem"),h=r.indentLines(r.containerFlow(e,d.current()),p);return f(),h;function p(g,y,b){return y?(b?"":" ".repeat(c))+g:(b?o:o+" ".repeat(c-o.length))+g}}function a4(e,t,r,a){const s=r.enter("paragraph"),o=r.enter("phrasing"),c=r.containerPhrasing(e,a);return o(),s(),c}const s4=Qu(["break","delete","emphasis","footnote","footnoteReference","image","imageReference","inlineCode","inlineMath","link","linkReference","mdxJsxTextElement","mdxTextExpression","strong","text","textDirective"]);function l4(e,t,r,a){return(e.children.some(function(c){return s4(c)})?r.containerPhrasing:r.containerFlow).call(r,e,a)}function o4(e){const t=e.options.strong||"*";if(t!=="*"&&t!=="_")throw new Error("Cannot serialize strong with `"+t+"` for `options.strong`, expected `*`, or `_`");return t}lE.peek=c4;function lE(e,t,r,a){const s=o4(r),o=r.enter("strong"),c=r.createTracker(a),d=c.move(s+s);let f=c.move(r.containerPhrasing(e,{after:s,before:d,...c.current()}));const h=f.charCodeAt(0),p=Au(a.before.charCodeAt(a.before.length-1),h,s);p.inside&&(f=bo(h)+f.slice(1));const g=f.charCodeAt(f.length-1),y=Au(a.after.charCodeAt(0),g,s);y.inside&&(f=f.slice(0,-1)+bo(g));const b=c.move(s+s);return o(),r.attentionEncodeSurroundingInfo={after:y.outside,before:p.outside},d+f+b}function c4(e,t,r){return r.options.strong||"*"}function u4(e,t,r,a){return r.safe(e.value,a)}function d4(e){const t=e.options.ruleRepetition||3;if(t<3)throw new Error("Cannot serialize rules with repetition `"+t+"` for `options.ruleRepetition`, expected `3` or more");return t}function f4(e,t,r){const a=(sE(r)+(r.options.ruleSpaces?" ":"")).repeat(d4(r));return r.options.ruleSpaces?a.slice(0,-1):a}const oE={blockquote:L3,break:ev,code:$3,definition:P3,emphasis:Ww,hardBreak:ev,heading:Y3,html:Jw,image:eE,imageReference:tE,inlineCode:nE,link:iE,linkReference:aE,list:n4,listItem:i4,paragraph:a4,root:l4,strong:lE,text:u4,thematicBreak:f4};function h4(){return{enter:{table:m4,tableData:tv,tableHeader:tv,tableRow:g4},exit:{codeText:x4,table:p4,tableData:Ih,tableHeader:Ih,tableRow:Ih}}}function m4(e){const t=e._align;this.enter({type:"table",align:t.map(function(r){return r==="none"?null:r}),children:[]},e),this.data.inTable=!0}function p4(e){this.exit(e),this.data.inTable=void 0}function g4(e){this.enter({type:"tableRow",children:[]},e)}function Ih(e){this.exit(e)}function tv(e){this.enter({type:"tableCell",children:[]},e)}function x4(e){let t=this.resume();this.data.inTable&&(t=t.replace(/\\([\\|])/g,b4));const r=this.stack[this.stack.length-1];r.type,r.value=t,this.exit(e)}function b4(e,t){return t==="|"?t:e}function y4(e){const t=e||{},r=t.tableCellPadding,a=t.tablePipeAlign,s=t.stringLength,o=r?" ":"|";return{unsafe:[{character:"\r",inConstruct:"tableCell"},{character:` +`,inConstruct:"tableCell"},{atBreak:!0,character:"|",after:"[ :-]"},{character:"|",inConstruct:"tableCell"},{atBreak:!0,character:":",after:"-"},{atBreak:!0,character:"-",after:"[:|-]"}],handlers:{inlineCode:y,table:c,tableCell:f,tableRow:d}};function c(b,_,E,S){return h(p(b,E,S),b.align)}function d(b,_,E,S){const w=g(b,E,S),k=h([w]);return k.slice(0,k.indexOf(` +`))}function f(b,_,E,S){const w=E.enter("tableCell"),k=E.enter("phrasing"),N=E.containerPhrasing(b,{...S,before:o,after:o});return k(),w(),N}function h(b,_){return j3(b,{align:_,alignDelimiters:a,padding:r,stringLength:s})}function p(b,_,E){const S=b.children;let w=-1;const k=[],N=_.enter("table");for(;++w0&&!r&&(e[e.length-1][1]._gfmAutolinkLiteralWalkedInto=!0),r}const I4={tokenize:G4,partial:!0};function B4(){return{document:{91:{name:"gfmFootnoteDefinition",tokenize:q4,continuation:{tokenize:P4},exit:F4}},text:{91:{name:"gfmFootnoteCall",tokenize:$4},93:{name:"gfmPotentialFootnoteCall",add:"after",tokenize:U4,resolveTo:H4}}}}function U4(e,t,r){const a=this;let s=a.events.length;const o=a.parser.gfmFootnotes||(a.parser.gfmFootnotes=[]);let c;for(;s--;){const f=a.events[s][1];if(f.type==="labelImage"){c=f;break}if(f.type==="gfmFootnoteCall"||f.type==="labelLink"||f.type==="label"||f.type==="image"||f.type==="link")break}return d;function d(f){if(!c||!c._balanced)return r(f);const h=Dr(a.sliceSerialize({start:c.end,end:a.now()}));return h.codePointAt(0)!==94||!o.includes(h.slice(1))?r(f):(e.enter("gfmFootnoteCallLabelMarker"),e.consume(f),e.exit("gfmFootnoteCallLabelMarker"),t(f))}}function H4(e,t){let r=e.length;for(;r--;)if(e[r][1].type==="labelImage"&&e[r][0]==="enter"){e[r][1];break}e[r+1][1].type="data",e[r+3][1].type="gfmFootnoteCallLabelMarker";const a={type:"gfmFootnoteCall",start:Object.assign({},e[r+3][1].start),end:Object.assign({},e[e.length-1][1].end)},s={type:"gfmFootnoteCallMarker",start:Object.assign({},e[r+3][1].end),end:Object.assign({},e[r+3][1].end)};s.end.column++,s.end.offset++,s.end._bufferIndex++;const o={type:"gfmFootnoteCallString",start:Object.assign({},s.end),end:Object.assign({},e[e.length-1][1].start)},c={type:"chunkString",contentType:"string",start:Object.assign({},o.start),end:Object.assign({},o.end)},d=[e[r+1],e[r+2],["enter",a,t],e[r+3],e[r+4],["enter",s,t],["exit",s,t],["enter",o,t],["enter",c,t],["exit",c,t],["exit",o,t],e[e.length-2],e[e.length-1],["exit",a,t]];return e.splice(r,e.length-r+1,...d),e}function $4(e,t,r){const a=this,s=a.parser.gfmFootnotes||(a.parser.gfmFootnotes=[]);let o=0,c;return d;function d(g){return e.enter("gfmFootnoteCall"),e.enter("gfmFootnoteCallLabelMarker"),e.consume(g),e.exit("gfmFootnoteCallLabelMarker"),f}function f(g){return g!==94?r(g):(e.enter("gfmFootnoteCallMarker"),e.consume(g),e.exit("gfmFootnoteCallMarker"),e.enter("gfmFootnoteCallString"),e.enter("chunkString").contentType="string",h)}function h(g){if(o>999||g===93&&!c||g===null||g===91||Tt(g))return r(g);if(g===93){e.exit("chunkString");const y=e.exit("gfmFootnoteCallString");return s.includes(Dr(a.sliceSerialize(y)))?(e.enter("gfmFootnoteCallLabelMarker"),e.consume(g),e.exit("gfmFootnoteCallLabelMarker"),e.exit("gfmFootnoteCall"),t):r(g)}return Tt(g)||(c=!0),o++,e.consume(g),g===92?p:h}function p(g){return g===91||g===92||g===93?(e.consume(g),o++,h):h(g)}}function q4(e,t,r){const a=this,s=a.parser.gfmFootnotes||(a.parser.gfmFootnotes=[]);let o,c=0,d;return f;function f(_){return e.enter("gfmFootnoteDefinition")._container=!0,e.enter("gfmFootnoteDefinitionLabel"),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(_),e.exit("gfmFootnoteDefinitionLabelMarker"),h}function h(_){return _===94?(e.enter("gfmFootnoteDefinitionMarker"),e.consume(_),e.exit("gfmFootnoteDefinitionMarker"),e.enter("gfmFootnoteDefinitionLabelString"),e.enter("chunkString").contentType="string",p):r(_)}function p(_){if(c>999||_===93&&!d||_===null||_===91||Tt(_))return r(_);if(_===93){e.exit("chunkString");const E=e.exit("gfmFootnoteDefinitionLabelString");return o=Dr(a.sliceSerialize(E)),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(_),e.exit("gfmFootnoteDefinitionLabelMarker"),e.exit("gfmFootnoteDefinitionLabel"),y}return Tt(_)||(d=!0),c++,e.consume(_),_===92?g:p}function g(_){return _===91||_===92||_===93?(e.consume(_),c++,p):p(_)}function y(_){return _===58?(e.enter("definitionMarker"),e.consume(_),e.exit("definitionMarker"),s.includes(o)||s.push(o),ot(e,b,"gfmFootnoteDefinitionWhitespace")):r(_)}function b(_){return t(_)}}function P4(e,t,r){return e.check(jo,t,e.attempt(I4,t,r))}function F4(e){e.exit("gfmFootnoteDefinition")}function G4(e,t,r){const a=this;return ot(e,s,"gfmFootnoteDefinitionIndent",5);function s(o){const c=a.events[a.events.length-1];return c&&c[1].type==="gfmFootnoteDefinitionIndent"&&c[2].sliceSerialize(c[1],!0).length===4?t(o):r(o)}}function V4(e){let r=(e||{}).singleTilde;const a={name:"strikethrough",tokenize:o,resolveAll:s};return r==null&&(r=!0),{text:{126:a},insideSpan:{null:[a]},attentionMarkers:{null:[126]}};function s(c,d){let f=-1;for(;++f1?f(_):(c.consume(_),g++,b);if(g<2&&!r)return f(_);const S=c.exit("strikethroughSequenceTemporary"),w=Xs(_);return S._open=!w||w===2&&!!E,S._close=!E||E===2&&!!w,d(_)}}}class Y4{constructor(){this.map=[]}add(t,r,a){X4(this,t,r,a)}consume(t){if(this.map.sort(function(o,c){return o[0]-c[0]}),this.map.length===0)return;let r=this.map.length;const a=[];for(;r>0;)r-=1,a.push(t.slice(this.map[r][0]+this.map[r][1]),this.map[r][2]),t.length=this.map[r][0];a.push(t.slice()),t.length=0;let s=a.pop();for(;s;){for(const o of s)t.push(o);s=a.pop()}this.map.length=0}}function X4(e,t,r,a){let s=0;if(!(r===0&&a.length===0)){for(;s-1;){const T=a.events[z][1].type;if(T==="lineEnding"||T==="linePrefix")z--;else break}const V=z>-1?a.events[z][1].type:null,P=V==="tableHead"||V==="tableRow"?R:f;return P===R&&a.parser.lazy[a.now().line]?r(j):P(j)}function f(j){return e.enter("tableHead"),e.enter("tableRow"),h(j)}function h(j){return j===124||(c=!0,o+=1),p(j)}function p(j){return j===null?r(j):Be(j)?o>1?(o=0,a.interrupt=!0,e.exit("tableRow"),e.enter("lineEnding"),e.consume(j),e.exit("lineEnding"),b):r(j):tt(j)?ot(e,p,"whitespace")(j):(o+=1,c&&(c=!1,s+=1),j===124?(e.enter("tableCellDivider"),e.consume(j),e.exit("tableCellDivider"),c=!0,p):(e.enter("data"),g(j)))}function g(j){return j===null||j===124||Tt(j)?(e.exit("data"),p(j)):(e.consume(j),j===92?y:g)}function y(j){return j===92||j===124?(e.consume(j),g):g(j)}function b(j){return a.interrupt=!1,a.parser.lazy[a.now().line]?r(j):(e.enter("tableDelimiterRow"),c=!1,tt(j)?ot(e,_,"linePrefix",a.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(j):_(j))}function _(j){return j===45||j===58?S(j):j===124?(c=!0,e.enter("tableCellDivider"),e.consume(j),e.exit("tableCellDivider"),E):B(j)}function E(j){return tt(j)?ot(e,S,"whitespace")(j):S(j)}function S(j){return j===58?(o+=1,c=!0,e.enter("tableDelimiterMarker"),e.consume(j),e.exit("tableDelimiterMarker"),w):j===45?(o+=1,w(j)):j===null||Be(j)?M(j):B(j)}function w(j){return j===45?(e.enter("tableDelimiterFiller"),k(j)):B(j)}function k(j){return j===45?(e.consume(j),k):j===58?(c=!0,e.exit("tableDelimiterFiller"),e.enter("tableDelimiterMarker"),e.consume(j),e.exit("tableDelimiterMarker"),N):(e.exit("tableDelimiterFiller"),N(j))}function N(j){return tt(j)?ot(e,M,"whitespace")(j):M(j)}function M(j){return j===124?_(j):j===null||Be(j)?!c||s!==o?B(j):(e.exit("tableDelimiterRow"),e.exit("tableHead"),t(j)):B(j)}function B(j){return r(j)}function R(j){return e.enter("tableRow"),U(j)}function U(j){return j===124?(e.enter("tableCellDivider"),e.consume(j),e.exit("tableCellDivider"),U):j===null||Be(j)?(e.exit("tableRow"),t(j)):tt(j)?ot(e,U,"whitespace")(j):(e.enter("data"),I(j))}function I(j){return j===null||j===124||Tt(j)?(e.exit("data"),U(j)):(e.consume(j),j===92?X:I)}function X(j){return j===92||j===124?(e.consume(j),I):I(j)}}function W4(e,t){let r=-1,a=!0,s=0,o=[0,0,0,0],c=[0,0,0,0],d=!1,f=0,h,p,g;const y=new Y4;for(;++rr[2]+1){const _=r[2]+1,E=r[3]-r[2]-1;e.add(_,E,[])}}e.add(r[3]+1,0,[["exit",g,t]])}return s!==void 0&&(o.end=Object.assign({},Hs(t.events,s)),e.add(s,0,[["exit",o,t]]),o=void 0),o}function rv(e,t,r,a,s){const o=[],c=Hs(t.events,r);s&&(s.end=Object.assign({},c),o.push(["exit",s,t])),a.end=Object.assign({},c),o.push(["exit",a,t]),e.add(r+1,0,o)}function Hs(e,t){const r=e[t],a=r[0]==="enter"?"start":"end";return r[1][a]}const J4={name:"tasklistCheck",tokenize:tj};function ej(){return{text:{91:J4}}}function tj(e,t,r){const a=this;return s;function s(f){return a.previous!==null||!a._gfmTasklistFirstContentOfListItem?r(f):(e.enter("taskListCheck"),e.enter("taskListCheckMarker"),e.consume(f),e.exit("taskListCheckMarker"),o)}function o(f){return Tt(f)?(e.enter("taskListCheckValueUnchecked"),e.consume(f),e.exit("taskListCheckValueUnchecked"),c):f===88||f===120?(e.enter("taskListCheckValueChecked"),e.consume(f),e.exit("taskListCheckValueChecked"),c):r(f)}function c(f){return f===93?(e.enter("taskListCheckMarker"),e.consume(f),e.exit("taskListCheckMarker"),e.exit("taskListCheck"),d):r(f)}function d(f){return Be(f)?t(f):tt(f)?e.check({tokenize:nj},t,r)(f):r(f)}}function nj(e,t,r){return ot(e,a,"whitespace");function a(s){return s===null?r(s):t(s)}}function rj(e){return kw([T4(),B4(),V4(e),Z4(),ej()])}const ij={};function Kp(e){const t=this,r=e||ij,a=t.data(),s=a.micromarkExtensions||(a.micromarkExtensions=[]),o=a.fromMarkdownExtensions||(a.fromMarkdownExtensions=[]),c=a.toMarkdownExtensions||(a.toMarkdownExtensions=[]);s.push(rj(r)),o.push(N4()),c.push(S4(r))}var Bh,iv;function aj(){if(iv)return Bh;iv=1;function e(re){return re instanceof Map?re.clear=re.delete=re.set=function(){throw new Error("map is read-only")}:re instanceof Set&&(re.add=re.clear=re.delete=function(){throw new Error("set is read-only")}),Object.freeze(re),Object.getOwnPropertyNames(re).forEach(me=>{const Ee=re[me],Pe=typeof Ee;(Pe==="object"||Pe==="function")&&!Object.isFrozen(Ee)&&e(Ee)}),re}class t{constructor(me){me.data===void 0&&(me.data={}),this.data=me.data,this.isMatchIgnored=!1}ignoreMatch(){this.isMatchIgnored=!0}}function r(re){return re.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function a(re,...me){const Ee=Object.create(null);for(const Pe in re)Ee[Pe]=re[Pe];return me.forEach(function(Pe){for(const St in Pe)Ee[St]=Pe[St]}),Ee}const s="",o=re=>!!re.scope,c=(re,{prefix:me})=>{if(re.startsWith("language:"))return re.replace("language:","language-");if(re.includes(".")){const Ee=re.split(".");return[`${me}${Ee.shift()}`,...Ee.map((Pe,St)=>`${Pe}${"_".repeat(St+1)}`)].join(" ")}return`${me}${re}`};class d{constructor(me,Ee){this.buffer="",this.classPrefix=Ee.classPrefix,me.walk(this)}addText(me){this.buffer+=r(me)}openNode(me){if(!o(me))return;const Ee=c(me.scope,{prefix:this.classPrefix});this.span(Ee)}closeNode(me){o(me)&&(this.buffer+=s)}value(){return this.buffer}span(me){this.buffer+=``}}const f=(re={})=>{const me={children:[]};return Object.assign(me,re),me};class h{constructor(){this.rootNode=f(),this.stack=[this.rootNode]}get top(){return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(me){this.top.children.push(me)}openNode(me){const Ee=f({scope:me});this.add(Ee),this.stack.push(Ee)}closeNode(){if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}walk(me){return this.constructor._walk(me,this.rootNode)}static _walk(me,Ee){return typeof Ee=="string"?me.addText(Ee):Ee.children&&(me.openNode(Ee),Ee.children.forEach(Pe=>this._walk(me,Pe)),me.closeNode(Ee)),me}static _collapse(me){typeof me!="string"&&me.children&&(me.children.every(Ee=>typeof Ee=="string")?me.children=[me.children.join("")]:me.children.forEach(Ee=>{h._collapse(Ee)}))}}class p extends h{constructor(me){super(),this.options=me}addText(me){me!==""&&this.add(me)}startScope(me){this.openNode(me)}endScope(){this.closeNode()}__addSublanguage(me,Ee){const Pe=me.root;Ee&&(Pe.scope=`language:${Ee}`),this.add(Pe)}toHTML(){return new d(this,this.options).value()}finalize(){return this.closeAllNodes(),!0}}function g(re){return re?typeof re=="string"?re:re.source:null}function y(re){return E("(?=",re,")")}function b(re){return E("(?:",re,")*")}function _(re){return E("(?:",re,")?")}function E(...re){return re.map(Ee=>g(Ee)).join("")}function S(re){const me=re[re.length-1];return typeof me=="object"&&me.constructor===Object?(re.splice(re.length-1,1),me):{}}function w(...re){return"("+(S(re).capture?"":"?:")+re.map(Pe=>g(Pe)).join("|")+")"}function k(re){return new RegExp(re.toString()+"|").exec("").length-1}function N(re,me){const Ee=re&&re.exec(me);return Ee&&Ee.index===0}const M=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./;function B(re,{joinWith:me}){let Ee=0;return re.map(Pe=>{Ee+=1;const St=Ee;let gt=g(Pe),Me="";for(;gt.length>0;){const Se=M.exec(gt);if(!Se){Me+=gt;break}Me+=gt.substring(0,Se.index),gt=gt.substring(Se.index+Se[0].length),Se[0][0]==="\\"&&Se[1]?Me+="\\"+String(Number(Se[1])+St):(Me+=Se[0],Se[0]==="("&&Ee++)}return Me}).map(Pe=>`(${Pe})`).join(me)}const R=/\b\B/,U="[a-zA-Z]\\w*",I="[a-zA-Z_]\\w*",X="\\b\\d+(\\.\\d+)?",j="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",z="\\b(0b[01]+)",V="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",P=(re={})=>{const me=/^#![ ]*\//;return re.binary&&(re.begin=E(me,/.*\b/,re.binary,/\b.*/)),a({scope:"meta",begin:me,end:/$/,relevance:0,"on:begin":(Ee,Pe)=>{Ee.index!==0&&Pe.ignoreMatch()}},re)},T={begin:"\\\\[\\s\\S]",relevance:0},$={scope:"string",begin:"'",end:"'",illegal:"\\n",contains:[T]},O={scope:"string",begin:'"',end:'"',illegal:"\\n",contains:[T]},H={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/},K=function(re,me,Ee={}){const Pe=a({scope:"comment",begin:re,end:me,contains:[]},Ee);Pe.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 St=w("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 Pe.contains.push({begin:E(/[ ]+/,"(",St,/[.]?[:]?([.][ ]|[ ])/,"){3}")}),Pe},Z=K("//","$"),C=K("/\\*","\\*/"),D=K("#","$"),Y={scope:"number",begin:X,relevance:0},L={scope:"number",begin:j,relevance:0},G={scope:"number",begin:z,relevance:0},q={scope:"regexp",begin:/\/(?=[^/\n]*\/)/,end:/\/[gimuy]*/,contains:[T,{begin:/\[/,end:/\]/,relevance:0,contains:[T]}]},Q={scope:"title",begin:U,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:T,BINARY_NUMBER_MODE:G,BINARY_NUMBER_RE:z,COMMENT:K,C_BLOCK_COMMENT_MODE:C,C_LINE_COMMENT_MODE:Z,C_NUMBER_MODE:L,C_NUMBER_RE:j,END_SAME_AS_BEGIN:function(re){return Object.assign(re,{"on:begin":(me,Ee)=>{Ee.data._beginMatch=me[1]},"on:end":(me,Ee)=>{Ee.data._beginMatch!==me[1]&&Ee.ignoreMatch()}})},HASH_COMMENT_MODE:D,IDENT_RE:U,MATCH_NOTHING_RE:R,METHOD_GUARD:W,NUMBER_MODE:Y,NUMBER_RE:X,PHRASAL_WORDS_MODE:H,QUOTE_STRING_MODE:O,REGEXP_MODE:q,RE_STARTERS_RE:V,SHEBANG:P,TITLE_MODE:Q,UNDERSCORE_IDENT_RE:I,UNDERSCORE_TITLE_MODE:J});function fe(re,me){re.input[re.index-1]==="."&&me.ignoreMatch()}function xe(re,me){re.className!==void 0&&(re.scope=re.className,delete re.className)}function we(re,me){me&&re.beginKeywords&&(re.begin="\\b("+re.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)",re.__beforeBegin=fe,re.keywords=re.keywords||re.beginKeywords,delete re.beginKeywords,re.relevance===void 0&&(re.relevance=0))}function Ne(re,me){Array.isArray(re.illegal)&&(re.illegal=w(...re.illegal))}function De(re,me){if(re.match){if(re.begin||re.end)throw new Error("begin & end are not supported with match");re.begin=re.match,delete re.match}}function $e(re,me){re.relevance===void 0&&(re.relevance=1)}const st=(re,me)=>{if(!re.beforeMatch)return;if(re.starts)throw new Error("beforeMatch cannot be used with starts");const Ee=Object.assign({},re);Object.keys(re).forEach(Pe=>{delete re[Pe]}),re.keywords=Ee.keywords,re.begin=E(Ee.beforeMatch,y(Ee.begin)),re.starts={relevance:0,contains:[Object.assign(Ee,{endsParent:!0})]},re.relevance=0,delete Ee.beforeMatch},Rt=["of","and","for","in","not","or","if","then","parent","list","value"],Xt="keyword";function Pt(re,me,Ee=Xt){const Pe=Object.create(null);return typeof re=="string"?St(Ee,re.split(" ")):Array.isArray(re)?St(Ee,re):Object.keys(re).forEach(function(gt){Object.assign(Pe,Pt(re[gt],me,gt))}),Pe;function St(gt,Me){me&&(Me=Me.map(Se=>Se.toLowerCase())),Me.forEach(function(Se){const Ue=Se.split("|");Pe[Ue[0]]=[gt,Kt(Ue[0],Ue[1])]})}}function Kt(re,me){return me?Number(me):Yn(re)?0:1}function Yn(re){return Rt.includes(re.toLowerCase())}const Nn={},ct=re=>{console.error(re)},It=(re,...me)=>{console.log(`WARN: ${re}`,...me)},ue=(re,me)=>{Nn[`${re}/${me}`]||(console.log(`Deprecated as of ${re}. ${me}`),Nn[`${re}/${me}`]=!0)},be=new Error;function Oe(re,me,{key:Ee}){let Pe=0;const St=re[Ee],gt={},Me={};for(let Se=1;Se<=me.length;Se++)Me[Se+Pe]=St[Se],gt[Se+Pe]=!0,Pe+=k(me[Se-1]);re[Ee]=Me,re[Ee]._emit=gt,re[Ee]._multi=!0}function Fe(re){if(Array.isArray(re.begin)){if(re.skip||re.excludeBegin||re.returnBegin)throw ct("skip, excludeBegin, returnBegin not compatible with beginScope: {}"),be;if(typeof re.beginScope!="object"||re.beginScope===null)throw ct("beginScope must be object"),be;Oe(re,re.begin,{key:"beginScope"}),re.begin=B(re.begin,{joinWith:""})}}function Ze(re){if(Array.isArray(re.end)){if(re.skip||re.excludeEnd||re.returnEnd)throw ct("skip, excludeEnd, returnEnd not compatible with endScope: {}"),be;if(typeof re.endScope!="object"||re.endScope===null)throw ct("endScope must be object"),be;Oe(re,re.end,{key:"endScope"}),re.end=B(re.end,{joinWith:""})}}function cn(re){re.scope&&typeof re.scope=="object"&&re.scope!==null&&(re.beginScope=re.scope,delete re.scope)}function Sn(re){cn(re),typeof re.beginScope=="string"&&(re.beginScope={_wrap:re.beginScope}),typeof re.endScope=="string"&&(re.endScope={_wrap:re.endScope}),Fe(re),Ze(re)}function Zt(re){function me(Me,Se){return new RegExp(g(Me),"m"+(re.case_insensitive?"i":"")+(re.unicodeRegex?"u":"")+(Se?"g":""))}class Ee{constructor(){this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}addRule(Se,Ue){Ue.position=this.position++,this.matchIndexes[this.matchAt]=Ue,this.regexes.push([Ue,Se]),this.matchAt+=k(Se)+1}compile(){this.regexes.length===0&&(this.exec=()=>null);const Se=this.regexes.map(Ue=>Ue[1]);this.matcherRe=me(B(Se,{joinWith:"|"}),!0),this.lastIndex=0}exec(Se){this.matcherRe.lastIndex=this.lastIndex;const Ue=this.matcherRe.exec(Se);if(!Ue)return null;const Bt=Ue.findIndex((br,Si)=>Si>0&&br!==void 0),Mt=this.matchIndexes[Bt];return Ue.splice(0,Bt),Object.assign(Ue,Mt)}}class Pe{constructor(){this.rules=[],this.multiRegexes=[],this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(Se){if(this.multiRegexes[Se])return this.multiRegexes[Se];const Ue=new Ee;return this.rules.slice(Se).forEach(([Bt,Mt])=>Ue.addRule(Bt,Mt)),Ue.compile(),this.multiRegexes[Se]=Ue,Ue}resumingScanAtSamePosition(){return this.regexIndex!==0}considerAll(){this.regexIndex=0}addRule(Se,Ue){this.rules.push([Se,Ue]),Ue.type==="begin"&&this.count++}exec(Se){const Ue=this.getMatcher(this.regexIndex);Ue.lastIndex=this.lastIndex;let Bt=Ue.exec(Se);if(this.resumingScanAtSamePosition()&&!(Bt&&Bt.index===this.lastIndex)){const Mt=this.getMatcher(0);Mt.lastIndex=this.lastIndex+1,Bt=Mt.exec(Se)}return Bt&&(this.regexIndex+=Bt.position+1,this.regexIndex===this.count&&this.considerAll()),Bt}}function St(Me){const Se=new Pe;return Me.contains.forEach(Ue=>Se.addRule(Ue.begin,{rule:Ue,type:"begin"})),Me.terminatorEnd&&Se.addRule(Me.terminatorEnd,{type:"end"}),Me.illegal&&Se.addRule(Me.illegal,{type:"illegal"}),Se}function gt(Me,Se){const Ue=Me;if(Me.isCompiled)return Ue;[xe,De,Sn,st].forEach(Mt=>Mt(Me,Se)),re.compilerExtensions.forEach(Mt=>Mt(Me,Se)),Me.__beforeBegin=null,[we,Ne,$e].forEach(Mt=>Mt(Me,Se)),Me.isCompiled=!0;let Bt=null;return typeof Me.keywords=="object"&&Me.keywords.$pattern&&(Me.keywords=Object.assign({},Me.keywords),Bt=Me.keywords.$pattern,delete Me.keywords.$pattern),Bt=Bt||/\w+/,Me.keywords&&(Me.keywords=Pt(Me.keywords,re.case_insensitive)),Ue.keywordPatternRe=me(Bt,!0),Se&&(Me.begin||(Me.begin=/\B|\b/),Ue.beginRe=me(Ue.begin),!Me.end&&!Me.endsWithParent&&(Me.end=/\B|\b/),Me.end&&(Ue.endRe=me(Ue.end)),Ue.terminatorEnd=g(Ue.end)||"",Me.endsWithParent&&Se.terminatorEnd&&(Ue.terminatorEnd+=(Me.end?"|":"")+Se.terminatorEnd)),Me.illegal&&(Ue.illegalRe=me(Me.illegal)),Me.contains||(Me.contains=[]),Me.contains=[].concat(...Me.contains.map(function(Mt){return Jt(Mt==="self"?Me:Mt)})),Me.contains.forEach(function(Mt){gt(Mt,Ue)}),Me.starts&>(Me.starts,Se),Ue.matcher=St(Ue),Ue}if(re.compilerExtensions||(re.compilerExtensions=[]),re.contains&&re.contains.includes("self"))throw new Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.");return re.classNameAliases=a(re.classNameAliases||{}),gt(re)}function At(re){return re?re.endsWithParent||At(re.starts):!1}function Jt(re){return re.variants&&!re.cachedVariants&&(re.cachedVariants=re.variants.map(function(me){return a(re,{variants:null},me)})),re.cachedVariants?re.cachedVariants:At(re)?a(re,{starts:re.starts?a(re.starts):null}):Object.isFrozen(re)?a(re):re}var ut="11.11.1";class In extends Error{constructor(me,Ee){super(me),this.name="HTMLInjectionError",this.html=Ee}}const un=r,Ni=a,nt=Symbol("nomatch"),Xn=7,On=function(re){const me=Object.create(null),Ee=Object.create(null),Pe=[];let St=!0;const gt="Could not find the language '{}', did you forget to load/include a language module?",Me={disableAutodetect:!0,name:"Plain text",contains:[]};let Se={ignoreUnescapedHTML:!1,throwUnescapedHTML:!1,noHighlightRe:/^(no-?highlight)$/i,languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",cssSelector:"pre code",languages:null,__emitter:p};function Ue(ye){return Se.noHighlightRe.test(ye)}function Bt(ye){let Le=ye.className+" ";Le+=ye.parentNode?ye.parentNode.className:"";const Qe=Se.languageDetectRe.exec(Le);if(Qe){const ft=bn(Qe[1]);return ft||(It(gt.replace("{}",Qe[1])),It("Falling back to no-highlight mode for this block.",ye)),ft?Qe[1]:"no-highlight"}return Le.split(/\s+/).find(ft=>Ue(ft)||bn(ft))}function Mt(ye,Le,Qe){let ft="",Ht="";typeof Le=="object"?(ft=ye,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=ye,ft=Le),Qe===void 0&&(Qe=!0);const gn={code:ft,language:Ht};Jr("before:highlight",gn);const Rn=gn.result?gn.result:br(gn.language,gn.code,Qe);return Rn.code=gn.code,Jr("after:highlight",Rn),Rn}function br(ye,Le,Qe,ft){const Ht=Object.create(null);function gn(_e,Re){return _e.keywords[Re]}function Rn(){if(!qe.keywords){en.addText(xt);return}let _e=0;qe.keywordPatternRe.lastIndex=0;let Re=qe.keywordPatternRe.exec(xt),Ye="";for(;Re;){Ye+=xt.substring(_e,Re.index);const rt=dn.case_insensitive?Re[0].toLowerCase():Re[0],$t=gn(qe,rt);if($t){const[or,sl]=$t;if(en.addText(Ye),Ye="",Ht[rt]=(Ht[rt]||0)+1,Ht[rt]<=Xn&&(Ri+=sl),or.startsWith("_"))Ye+=Re[0];else{const Po=dn.classNameAliases[or]||or;jn(Re[0],Po)}}else Ye+=Re[0];_e=qe.keywordPatternRe.lastIndex,Re=qe.keywordPatternRe.exec(xt)}Ye+=xt.substring(_e),en.addText(Ye)}function kn(){if(xt==="")return;let _e=null;if(typeof qe.subLanguage=="string"){if(!me[qe.subLanguage]){en.addText(xt);return}_e=br(qe.subLanguage,xt,!0,qo[qe.subLanguage]),qo[qe.subLanguage]=_e._top}else _e=ki(xt,qe.subLanguage.length?qe.subLanguage:null);qe.relevance>0&&(Ri+=_e.relevance),en.__addSublanguage(_e._emitter,_e.language)}function _t(){qe.subLanguage!=null?kn():Rn(),xt=""}function jn(_e,Re){_e!==""&&(en.startScope(Re),en.addText(_e),en.endScope())}function rs(_e,Re){let Ye=1;const rt=Re.length-1;for(;Ye<=rt;){if(!_e._emit[Ye]){Ye++;continue}const $t=dn.classNameAliases[_e[Ye]]||_e[Ye],or=Re[Ye];$t?jn(or,$t):(xt=or,Rn(),xt=""),Ye++}}function Ai(_e,Re){return _e.scope&&typeof _e.scope=="string"&&en.openNode(dn.classNameAliases[_e.scope]||_e.scope),_e.beginScope&&(_e.beginScope._wrap?(jn(xt,dn.classNameAliases[_e.beginScope._wrap]||_e.beginScope._wrap),xt=""):_e.beginScope._multi&&(rs(_e.beginScope,Re),xt="")),qe=Object.create(_e,{parent:{value:qe}}),qe}function Ur(_e,Re,Ye){let rt=N(_e.endRe,Ye);if(rt){if(_e["on:end"]){const $t=new t(_e);_e["on:end"](Re,$t),$t.isMatchIgnored&&(rt=!1)}if(rt){for(;_e.endsParent&&_e.parent;)_e=_e.parent;return _e}}if(_e.endsWithParent)return Ur(_e.parent,Re,Ye)}function Mi(_e){return qe.matcher.regexIndex===0?(xt+=_e[0],1):(ji=!0,0)}function is(_e){const Re=_e[0],Ye=_e.rule,rt=new t(Ye),$t=[Ye.__beforeBegin,Ye["on:begin"]];for(const or of $t)if(or&&(or(_e,rt),rt.isMatchIgnored))return Mi(Re);return Ye.skip?xt+=Re:(Ye.excludeBegin&&(xt+=Re),_t(),!Ye.returnBegin&&!Ye.excludeBegin&&(xt=Re)),Ai(Ye,_e),Ye.returnBegin?0:Re.length}function Cn(_e){const Re=_e[0],Ye=Le.substring(_e.index),rt=Ur(qe,_e,Ye);if(!rt)return nt;const $t=qe;qe.endScope&&qe.endScope._wrap?(_t(),jn(Re,qe.endScope._wrap)):qe.endScope&&qe.endScope._multi?(_t(),rs(qe.endScope,_e)):$t.skip?xt+=Re:($t.returnEnd||$t.excludeEnd||(xt+=Re),_t(),$t.excludeEnd&&(xt=Re));do qe.scope&&en.closeNode(),!qe.skip&&!qe.subLanguage&&(Ri+=qe.relevance),qe=qe.parent;while(qe!==rt.parent);return rt.starts&&Ai(rt.starts,_e),$t.returnEnd?0:Re.length}function ba(){const _e=[];for(let Re=qe;Re!==dn;Re=Re.parent)Re.scope&&_e.unshift(Re.scope);_e.forEach(Re=>en.openNode(Re))}let Er={};function Oi(_e,Re){const Ye=Re&&Re[0];if(xt+=_e,Ye==null)return _t(),0;if(Er.type==="begin"&&Re.type==="end"&&Er.index===Re.index&&Ye===""){if(xt+=Le.slice(Re.index,Re.index+1),!St){const rt=new Error(`0 width match regex (${ye})`);throw rt.languageName=ye,rt.badRule=Er.rule,rt}return 1}if(Er=Re,Re.type==="begin")return is(Re);if(Re.type==="illegal"&&!Qe){const rt=new Error('Illegal lexeme "'+Ye+'" for mode "'+(qe.scope||"")+'"');throw rt.mode=qe,rt}else if(Re.type==="end"){const rt=Cn(Re);if(rt!==nt)return rt}if(Re.type==="illegal"&&Ye==="")return xt+=` +`,1;if(al>1e5&&al>Re.index*3)throw new Error("potential infinite loop, way more iterations than matches");return xt+=Ye,Ye.length}const dn=bn(ye);if(!dn)throw ct(gt.replace("{}",ye)),new Error('Unknown language: "'+ye+'"');const ya=Zt(dn);let as="",qe=ft||ya;const qo={},en=new Se.__emitter(Se);ba();let xt="",Ri=0,ei=0,al=0,ji=!1;try{if(dn.__emitTokens)dn.__emitTokens(Le,en);else{for(qe.matcher.considerAll();;){al++,ji?ji=!1:qe.matcher.considerAll(),qe.matcher.lastIndex=ei;const _e=qe.matcher.exec(Le);if(!_e)break;const Re=Le.substring(ei,_e.index),Ye=Oi(Re,_e);ei=_e.index+Ye}Oi(Le.substring(ei))}return en.finalize(),as=en.toHTML(),{language:ye,value:as,relevance:Ri,illegal:!1,_emitter:en,_top:qe}}catch(_e){if(_e.message&&_e.message.includes("Illegal"))return{language:ye,value:un(Le),illegal:!0,relevance:0,_illegalBy:{message:_e.message,index:ei,context:Le.slice(ei-100,ei+100),mode:_e.mode,resultSoFar:as},_emitter:en};if(St)return{language:ye,value:un(Le),illegal:!1,relevance:0,errorRaised:_e,_emitter:en,_top:qe};throw _e}}function Si(ye){const Le={value:un(ye),illegal:!1,relevance:0,_top:Me,_emitter:new Se.__emitter(Se)};return Le._emitter.addText(ye),Le}function ki(ye,Le){Le=Le||Se.languages||Object.keys(me);const Qe=Si(ye),ft=Le.filter(bn).filter(_r).map(_t=>br(_t,ye,!1));ft.unshift(Qe);const Ht=ft.sort((_t,jn)=>{if(_t.relevance!==jn.relevance)return jn.relevance-_t.relevance;if(_t.language&&jn.language){if(bn(_t.language).supersetOf===jn.language)return 1;if(bn(jn.language).supersetOf===_t.language)return-1}return 0}),[gn,Rn]=Ht,kn=gn;return kn.secondBest=Rn,kn}function lr(ye,Le,Qe){const ft=Le&&Ee[Le]||Qe;ye.classList.add("hljs"),ye.classList.add(`language-${ft}`)}function Ut(ye){let Le=null;const Qe=Bt(ye);if(Ue(Qe))return;if(Jr("before:highlightElement",{el:ye,language:Qe}),ye.dataset.highlighted){console.log("Element previously highlighted. To highlight again, first unset `dataset.highlighted`.",ye);return}if(ye.children.length>0&&(Se.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(ye)),Se.throwUnescapedHTML))throw new In("One of your code blocks includes unescaped HTML.",ye.innerHTML);Le=ye;const ft=Le.textContent,Ht=Qe?Mt(ft,{language:Qe,ignoreIllegals:!0}):ki(ft);ye.innerHTML=Ht.value,ye.dataset.highlighted="yes",lr(ye,Qe,Ht.language),ye.result={language:Ht.language,re:Ht.relevance,relevance:Ht.relevance},Ht.secondBest&&(ye.secondBest={language:Ht.secondBest.language,relevance:Ht.secondBest.relevance}),Jr("after:highlightElement",{el:ye,result:Ht,text:ft})}function pn(ye){Se=Ni(Se,ye)}const yr=()=>{Ti(),ue("10.6.0","initHighlighting() deprecated. Use highlightAll() now.")};function Ci(){Ti(),ue("10.6.0","initHighlightingOnLoad() deprecated. Use highlightAll() now.")}let ga=!1;function Ti(){function ye(){Ti()}if(document.readyState==="loading"){ga||window.addEventListener("DOMContentLoaded",ye,!1),ga=!0;return}document.querySelectorAll(Se.cssSelector).forEach(Ut)}function ts(ye,Le){let Qe=null;try{Qe=Le(re)}catch(ft){if(ct("Language definition for '{}' could not be registered.".replace("{}",ye)),St)ct(ft);else throw ft;Qe=Me}Qe.name||(Qe.name=ye),me[ye]=Qe,Qe.rawDefinition=Le.bind(null,re),Qe.aliases&&vr(Qe.aliases,{languageName:ye})}function Wr(ye){delete me[ye];for(const Le of Object.keys(Ee))Ee[Le]===ye&&delete Ee[Le]}function xa(){return Object.keys(me)}function bn(ye){return ye=(ye||"").toLowerCase(),me[ye]||me[Ee[ye]]}function vr(ye,{languageName:Le}){typeof ye=="string"&&(ye=[ye]),ye.forEach(Qe=>{Ee[Qe.toLowerCase()]=Le})}function _r(ye){const Le=bn(ye);return Le&&!Le.disableAutodetect}function Br(ye){ye["before:highlightBlock"]&&!ye["before:highlightElement"]&&(ye["before:highlightElement"]=Le=>{ye["before:highlightBlock"](Object.assign({block:Le.el},Le))}),ye["after:highlightBlock"]&&!ye["after:highlightElement"]&&(ye["after:highlightElement"]=Le=>{ye["after:highlightBlock"](Object.assign({block:Le.el},Le))})}function Ft(ye){Br(ye),Pe.push(ye)}function ns(ye){const Le=Pe.indexOf(ye);Le!==-1&&Pe.splice(Le,1)}function Jr(ye,Le){const Qe=ye;Pe.forEach(function(ft){ft[Qe]&&ft[Qe](Le)})}function wr(ye){return ue("10.7.0","highlightBlock will be removed entirely in v12.0"),ue("10.7.0","Please use highlightElement now."),Ut(ye)}Object.assign(re,{highlight:Mt,highlightAuto:ki,highlightAll:Ti,highlightElement:Ut,highlightBlock:wr,configure:pn,initHighlighting:yr,initHighlightingOnLoad:Ci,registerLanguage:ts,unregisterLanguage:Wr,listLanguages:xa,getLanguage:bn,registerAliases:vr,autoDetection:_r,inherit:Ni,addPlugin:Ft,removePlugin:ns}),re.debugMode=function(){St=!1},re.safeMode=function(){St=!0},re.versionString=ut,re.regex={concat:E,lookahead:y,either:w,optional:_,anyNumberOfTimes:b};for(const ye in ce)typeof ce[ye]=="object"&&e(ce[ye]);return Object.assign(re,ce),re},mn=On({});return mn.newInstance=()=>On({}),Bh=mn,mn.HighlightJS=mn,mn.default=mn,Bh}var Uh,av;function sj(){if(av)return Uh;av=1;function e(t){const r=t.regex,a=r.concat(/[\p{L}_]/u,r.optional(/[\p{L}0-9_.-]*:/u),/[\p{L}0-9_.-]*/u),s=/[\p{L}0-9._:-]+/u,o={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/}]},d=t.inherit(c,{begin:/\(/,end:/\)/}),f=t.inherit(t.APOS_STRING_MODE,{className:"string"}),h=t.inherit(t.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,h,f,d,{begin:/\[/,end:/\]/,contains:[{className:"meta",begin://,contains:[c,d,h,f]}]}]},t.COMMENT(//,{relevance:10}),{begin://,relevance:10},o,{className:"meta",end:/\?>/,variants:[{begin:/<\?xml/,relevance:10,contains:[h]},{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:r.concat(//,/>/,/\s/)))),end:/\/?>/,contains:[{className:"name",begin:a,relevance:0,starts:p}]},{className:"tag",begin:r.concat(/<\//,r.lookahead(r.concat(a,/>/))),contains:[{className:"name",begin:a,relevance:0},{begin:/>/,relevance:0,endsParent:!0}]}]}}return Uh=e,Uh}var Hh,sv;function lj(){if(sv)return Hh;sv=1;function e(t){const r=t.regex,a={},s={begin:/\$\{/,end:/\}/,contains:["self",{begin:/:-/,contains:[a]}]};Object.assign(a,{className:"variable",variants:[{begin:r.concat(/\$[\w\d#@][\w\d_]*/,"(?![\\w\\d])(?![$])")},s]});const o={className:"subst",begin:/\$\(/,end:/\)/,contains:[t.BACKSLASH_ESCAPE]},c=t.inherit(t.COMMENT(),{match:[/(^|\s)/,/#.*$/],scope:{2:"comment"}}),d={begin:/<<-?\s*(?=\w+)/,starts:{contains:[t.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/,className:"string"})]}},f={className:"string",begin:/"/,end:/"/,contains:[t.BACKSLASH_ESCAPE,a,o]};o.contains.push(f);const h={match:/\\"/},p={className:"string",begin:/'/,end:/'/},g={match:/\\'/},y={begin:/\$?\(\(/,end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},t.NUMBER_MODE,a]},b=["fish","bash","zsh","sh","csh","ksh","tcsh","dash","scsh"],_=t.SHEBANG({binary:`(${b.join("|")})`,relevance:10}),E={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,contains:[t.inherit(t.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0},S=["if","then","else","elif","fi","time","for","while","until","in","do","done","case","esac","coproc","function","select"],w=["true","false"],k={match:/(\/[a-z._-]+)+/},N=["break","cd","continue","eval","exec","exit","export","getopts","hash","pwd","readonly","return","shift","test","times","trap","umask","unset"],M=["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:S,literal:w,built_in:[...N,...M,"set","shopt",...B,...R]},contains:[_,t.SHEBANG(),E,y,c,d,k,f,h,p,g,a]}}return Hh=e,Hh}var $h,lv;function oj(){if(lv)return $h;lv=1;function e(t){const r=t.regex,a=t.COMMENT("//","$",{contains:[{begin:/\\\n/}]}),s="decltype\\(auto\\)",o="[a-zA-Z_]\\w*::",d="("+s+"|"+r.optional(o)+"[a-zA-Z_]\\w*"+r.optional("<[^<>]+>")+")",f={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:[t.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:"."},t.END_SAME_AS_BEGIN({begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},g={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},t.inherit(p,{className:"string"}),{className:"string",begin:/<.*?>/},a,t.C_BLOCK_COMMENT_MODE]},b={className:"title",begin:r.optional(o)+t.IDENT_RE,relevance:0},_=r.optional(o)+t.IDENT_RE+"\\s*\\(",w={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,f,a,t.C_BLOCK_COMMENT_MODE,g,p],N={variants:[{begin:/=/,end:/;/},{begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],keywords:w,contains:k.concat([{begin:/\(/,end:/\)/,keywords:w,contains:k.concat(["self"]),relevance:0}]),relevance:0},M={begin:"("+d+"[\\*&\\s]+)+"+_,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:w,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:s,keywords:w,relevance:0},{begin:_,returnBegin:!0,contains:[t.inherit(b,{className:"title.function"})],relevance:0},{relevance:0,match:/,/},{className:"params",begin:/\(/,end:/\)/,keywords:w,relevance:0,contains:[a,t.C_BLOCK_COMMENT_MODE,p,g,f,{begin:/\(/,end:/\)/,keywords:w,relevance:0,contains:["self",a,t.C_BLOCK_COMMENT_MODE,p,g,f]}]},f,a,t.C_BLOCK_COMMENT_MODE,y]};return{name:"C",aliases:["h"],keywords:w,disableAutodetect:!0,illegal:"=]/,contains:[{beginKeywords:"final class struct"},t.TITLE_MODE]}]),exports:{preprocessor:y,strings:p,keywords:w}}}return $h=e,$h}var qh,ov;function cj(){if(ov)return qh;ov=1;function e(t){const r=t.regex,a=t.COMMENT("//","$",{contains:[{begin:/\\\n/}]}),s="decltype\\(auto\\)",o="[a-zA-Z_]\\w*::",d="(?!struct)("+s+"|"+r.optional(o)+"[a-zA-Z_]\\w*"+r.optional("<[^<>]+>")+")",f={className:"type",begin:"\\b[a-z\\d_]*_t\\b"},p={className:"string",variants:[{begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[t.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:"."},t.END_SAME_AS_BEGIN({begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},g={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},t.inherit(p,{className:"string"}),{className:"string",begin:/<.*?>/},a,t.C_BLOCK_COMMENT_MODE]},b={className:"title",begin:r.optional(o)+t.IDENT_RE,relevance:0},_=r.optional(o)+t.IDENT_RE+"\\s*\\(",E=["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"],S=["bool","char","char16_t","char32_t","char8_t","double","float","int","long","short","void","wchar_t","unsigned","signed","const","static"],w=["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:S,keyword:E,literal:["NULL","false","nullopt","nullptr","true"],built_in:["_Pragma"],_type_hints:w},R={className:"function.dispatch",relevance:0,keywords:{_hint:k},begin:r.concat(/\b/,/(?!decltype)/,/(?!if)/,/(?!for)/,/(?!switch)/,/(?!while)/,t.IDENT_RE,r.lookahead(/(<[^<>]+>|)\s*\(/))},U=[R,y,f,a,t.C_BLOCK_COMMENT_MODE,g,p],I={variants:[{begin:/=/,end:/;/},{begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],keywords:B,contains:U.concat([{begin:/\(/,end:/\)/,keywords:B,contains:U.concat(["self"]),relevance:0}]),relevance:0},X={className:"function",begin:"("+d+"[\\*&\\s]+)+"+_,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:B,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:s,keywords:B,relevance:0},{begin:_,returnBegin:!0,contains:[b],relevance:0},{begin:/::/,relevance:0},{begin:/:/,endsWithParent:!0,contains:[p,g]},{relevance:0,match:/,/},{className:"params",begin:/\(/,end:/\)/,keywords:B,relevance:0,contains:[a,t.C_BLOCK_COMMENT_MODE,p,g,f,{begin:/\(/,end:/\)/,keywords:B,relevance:0,contains:["self",a,t.C_BLOCK_COMMENT_MODE,p,g,f]}]},f,a,t.C_BLOCK_COMMENT_MODE,y]};return{name:"C++",aliases:["cc","c++","h++","hpp","hh","hxx","cxx"],keywords:B,illegal:"",keywords:B,contains:["self",f]},{begin:t.IDENT_RE+"::",keywords:B},{match:[/\b(?:enum(?:\s+(?:class|struct))?|class|struct|union)/,/\s+/,/\w+/],className:{1:"keyword",3:"title.class"}}])}}return qh=e,qh}var Ph,cv;function uj(){if(cv)return Ph;cv=1;function e(t){const r=["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"],s=["default","false","null","true"],o=["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"],d={keyword:o.concat(c),built_in:r,literal:s},f=t.inherit(t.TITLE_MODE,{begin:"[a-zA-Z](\\.?\\w)*"}),h={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},g={className:"string",begin:'@"',end:'"',contains:[{begin:'""'}]},y=t.inherit(g,{illegal:/\n/}),b={className:"subst",begin:/\{/,end:/\}/,keywords:d},_=t.inherit(b,{illegal:/\n/}),E={className:"string",begin:/\$"/,end:'"',illegal:/\n/,contains:[{begin:/\{\{/},{begin:/\}\}/},t.BACKSLASH_ESCAPE,_]},S={className:"string",begin:/\$@"/,end:'"',contains:[{begin:/\{\{/},{begin:/\}\}/},{begin:'""'},b]},w=t.inherit(S,{illegal:/\n/,contains:[{begin:/\{\{/},{begin:/\}\}/},{begin:'""'},_]});b.contains=[S,E,g,t.APOS_STRING_MODE,t.QUOTE_STRING_MODE,h,t.C_BLOCK_COMMENT_MODE],_.contains=[w,E,y,t.APOS_STRING_MODE,t.QUOTE_STRING_MODE,h,t.inherit(t.C_BLOCK_COMMENT_MODE,{illegal:/\n/})];const k={variants:[p,S,E,g,t.APOS_STRING_MODE,t.QUOTE_STRING_MODE]},N={begin:"<",end:">",contains:[{beginKeywords:"in out"},f]},M=t.IDENT_RE+"(<"+t.IDENT_RE+"(\\s*,\\s*"+t.IDENT_RE+")*>)?(\\[\\])?",B={begin:"@"+t.IDENT_RE,relevance:0};return{name:"C#",aliases:["cs","c#"],keywords:d,illegal:/::/,contains:[t.COMMENT("///","$",{returnBegin:!0,contains:[{className:"doctag",variants:[{begin:"///",relevance:0},{begin:""},{begin:""}]}]}),t.C_LINE_COMMENT_MODE,t.C_BLOCK_COMMENT_MODE,{className:"meta",begin:"#",end:"$",keywords:{keyword:"if else elif endif define undef warning error line region endregion pragma checksum"}},k,h,{beginKeywords:"class interface",relevance:0,end:/[{;=]/,illegal:/[^\s:,]/,contains:[{beginKeywords:"where class"},f,N,t.C_LINE_COMMENT_MODE,t.C_BLOCK_COMMENT_MODE]},{beginKeywords:"namespace",relevance:0,end:/[{;=]/,illegal:/[^\s:]/,contains:[f,t.C_LINE_COMMENT_MODE,t.C_BLOCK_COMMENT_MODE]},{beginKeywords:"record",relevance:0,end:/[{;=]/,illegal:/[^\s:]/,contains:[f,N,t.C_LINE_COMMENT_MODE,t.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:"("+M+"\\s+)+"+t.IDENT_RE+"\\s*(<[^=]+>\\s*)?\\(",returnBegin:!0,end:/\s*[{;=]/,excludeEnd:!0,keywords:d,contains:[{beginKeywords:a.join(" "),relevance:0},{begin:t.IDENT_RE+"\\s*(<[^=]+>\\s*)?\\(",returnBegin:!0,contains:[t.TITLE_MODE,N],relevance:0},{match:/\(\)/},{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:d,relevance:0,contains:[k,h,t.C_BLOCK_COMMENT_MODE]},t.C_LINE_COMMENT_MODE,t.C_BLOCK_COMMENT_MODE]},B]}}return Ph=e,Ph}var Fh,uv;function dj(){if(uv)return Fh;uv=1;const e=h=>({IMPORTANT:{scope:"meta",begin:"!important"},BLOCK_COMMENT:h.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:[h.APOS_STRING_MODE,h.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{scope:"number",begin:h.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_-]*/}}),t=["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"],r=["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=[...t,...r],s=["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(),o=["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(),d=["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 f(h){const p=h.regex,g=e(h),y={begin:/-(webkit|moz|ms|o)-(?=[a-z])/},b="and or not only",_=/@-?\w[\w]*(-\w+)*/,E="[a-zA-Z-][a-zA-Z0-9_-]*",S=[h.APOS_STRING_MODE,h.QUOTE_STRING_MODE];return{name:"CSS",case_insensitive:!0,illegal:/[=|'\$]/,keywords:{keyframePosition:"from to"},classNameAliases:{keyframePosition:"selector-tag"},contains:[g.BLOCK_COMMENT,y,g.CSS_NUMBER_MODE,{className:"selector-id",begin:/#[A-Za-z0-9_-]+/,relevance:0},{className:"selector-class",begin:"\\."+E,relevance:0},g.ATTRIBUTE_SELECTOR_MODE,{className:"selector-pseudo",variants:[{begin:":("+o.join("|")+")"},{begin:":(:)?("+c.join("|")+")"}]},g.CSS_VARIABLE,{className:"attribute",begin:"\\b("+d.join("|")+")\\b"},{begin:/:/,end:/[;}{]/,contains:[g.BLOCK_COMMENT,g.HEXCOLOR,g.IMPORTANT,g.CSS_NUMBER_MODE,...S,{begin:/(url|data-uri)\(/,end:/\)/,relevance:0,keywords:{built_in:"url data-uri"},contains:[...S,{className:"string",begin:/[^)]/,endsWithParent:!0,excludeEnd:!0}]},g.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:s.join(" ")},contains:[{begin:/[a-z-]+(?=:)/,className:"attribute"},...S,g.CSS_NUMBER_MODE]}]},{className:"selector-tag",begin:"\\b("+a.join("|")+")\\b"}]}}return Fh=f,Fh}var Gh,dv;function fj(){if(dv)return Gh;dv=1;function e(t){const r=t.regex,a={begin:/<\/?[A-Za-z_]/,end:">",subLanguage:"xml",relevance:0},s={begin:"^[-\\*]{3,}",end:"$"},o={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},d={begin:/^\[[^\n]+\]:/,returnBegin:!0,contains:[{className:"symbol",begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0},{className:"link",begin:/:\s*/,end:/$/,excludeBegin:!0}]},f=/[A-Za-z][A-Za-z0-9+.-]*/,h={variants:[{begin:/\[.+?\]\[.*?\]/,relevance:0},{begin:/\[.+?\]\(((data|javascript|mailto):|(?:http|ftp)s?:\/\/).*?\)/,relevance:2},{begin:r.concat(/\[.+?\]\(/,f,/:\/\/.*?\)/),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}/}]},g={className:"emphasis",contains:[],variants:[{begin:/\*(?![*\s])/,end:/\*/},{begin:/_(?![_\s])/,end:/_/,relevance:0}]},y=t.inherit(p,{contains:[]}),b=t.inherit(g,{contains:[]});p.contains.push(b),g.contains.push(y);let _=[a,h];return[p,g,y,b].forEach(k=>{k.contains=k.contains.concat(_)}),_=_.concat(p,g),{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,g,{className:"quote",begin:"^>\\s+",contains:_,end:"$"},o,s,h,d,{scope:"literal",match:/&([a-zA-Z0-9]+|#[0-9]{1,7}|#[Xx][0-9a-fA-F]{1,6});/}]}}return Gh=e,Gh}var Vh,fv;function hj(){if(fv)return Vh;fv=1;function e(t){const r=t.regex;return{name:"Diff",aliases:["patch"],contains:[{className:"meta",relevance:10,match:r.either(/^@@ +-\d+,\d+ +\+\d+,\d+ +@@/,/^\*\*\* +\d+,\d+ +\*\*\*\*$/,/^--- +\d+,\d+ +----$/)},{className:"comment",variants:[{begin:r.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 Vh=e,Vh}var Yh,hv;function mj(){if(hv)return Yh;hv=1;function e(t){const r=t.regex,a="([a-zA-Z_]\\w*[!?=]?|[-+~]@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?)",s=r.either(/\b([A-Z]+[a-z0-9]+)+/,/\b([A-Z]+[a-z0-9]+)+[A-Z]+/),o=r.concat(s,/(::\w+)*/),d={"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"]},f={className:"doctag",begin:"@[A-Za-z]+"},h={begin:"#<",end:">"},p=[t.COMMENT("#","$",{contains:[f]}),t.COMMENT("^=begin","^=end",{contains:[f],relevance:10}),t.COMMENT("^__END__",t.MATCH_NOTHING_RE)],g={className:"subst",begin:/#\{/,end:/\}/,keywords:d},y={className:"string",contains:[t.BACKSLASH_ESCAPE,g],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:r.concat(/<<[-~]?'?/,r.lookahead(/(\w+)(?=\W)[^\n]*\n(?:[^\n]*\n)*?\s*\1\b/)),contains:[t.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/,contains:[t.BACKSLASH_ESCAPE,g]})]}]},b="[1-9](_?[0-9])*|0",_="[0-9](_?[0-9])*",E={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"}]},S={variants:[{match:/\(\)/},{className:"params",begin:/\(/,end:/(?=\))/,excludeBegin:!0,endsParent:!0,keywords:d}]},U=[y,{variants:[{match:[/class\s+/,o,/\s+<\s+/,o]},{match:[/\b(class|module)\s+/,o]}],scope:{2:"title.class",4:"title.class.inherited"},keywords:d},{match:[/(include|extend)\s+/,o],scope:{2:"title.class"},keywords:d},{relevance:0,match:[o,/\.new[. (]/],scope:{1:"title.class"}},{relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:"variable.constant"},{relevance:0,match:s,scope:"title.class"},{match:[/def/,/\s+/,a],scope:{1:"keyword",3:"title.function"},contains:[S]},{begin:t.IDENT_RE+"::"},{className:"symbol",begin:t.UNDERSCORE_IDENT_RE+"(!|\\?)?:",relevance:0},{className:"symbol",begin:":(?!\\s)",contains:[y,{begin:a}],relevance:0},E,{className:"variable",begin:"(\\$\\W)|((\\$|@@?)(\\w+))(?=[^@$?])(?![A-Za-z])(?![@$?'])"},{className:"params",begin:/\|(?!=)/,end:/\|/,excludeBegin:!0,excludeEnd:!0,relevance:0,keywords:d},{begin:"("+t.RE_STARTERS_RE+"|unless)\\s*",keywords:"unless",contains:[{className:"regexp",contains:[t.BACKSLASH_ESCAPE,g],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(h,p),relevance:0}].concat(h,p);g.contains=U,S.contains=U;const z=[{begin:/^\s*=>/,starts:{end:"$",contains:U}},{className:"meta.prompt",begin:"^("+"[>?]>"+"|"+"[\\w#]+\\(\\w+\\):\\d+:\\d+[>*]"+"|"+"(\\w+-)?\\d+\\.\\d+\\.\\d+(p\\d+)?[^\\d][^>]+>"+")(?=[ ])",starts:{end:"$",keywords:d,contains:U}}];return p.unshift(h),{name:"Ruby",aliases:["rb","gemspec","podspec","thor","irb"],keywords:d,illegal:/\/\*/,contains:[t.SHEBANG({binary:"ruby"})].concat(z).concat(p).concat(U)}}return Yh=e,Yh}var Xh,mv;function pj(){if(mv)return Xh;mv=1;function e(t){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:"s(c,d,f-1))}function o(c){const d=c.regex,f="[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*",h=f+s("(?:<"+f+"~~~(?:\\s*,\\s*"+f+"~~~)*>)?",/~~~/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"]},E={className:"meta",begin:"@"+f,contains:[{begin:/\(/,end:/\)/,contains:["self"]}]},S={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+/,f],className:{1:"keyword",3:"title.class"}},{match:/non-sealed/,scope:"keyword"},{begin:[d.concat(/(?!else)/,f),/\s+/,f,/\s+/,/=(?!=)/],className:{1:"type",3:"variable",5:"operator"}},{begin:[/record/,/\s+/,f],className:{1:"keyword",3:"title.class"},contains:[S,c.C_LINE_COMMENT_MODE,c.C_BLOCK_COMMENT_MODE]},{beginKeywords:"new throw return else",relevance:0},{begin:["(?:"+h+"\\s+)",c.UNDERSCORE_IDENT_RE,/\s*(?=\()/],className:{2:"title.function"},keywords:_,contains:[{className:"params",begin:/\(/,end:/\)/,keywords:_,relevance:0,contains:[E,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,E]}}return Qh=o,Qh}var Wh,bv;function yj(){if(bv)return Wh;bv=1;const e="[A-Za-z$_][0-9A-Za-z$_]*",t=["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"],r=["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"],s=["Error","EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],o=["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"],d=[].concat(o,a,s);function f(h){const p=h.regex,g=(J,{after:W})=>{const te="",end:""},_=/<[A-Za-z0-9\\._:-]+\s*\/>/,E={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(J,W)=>{const te=J[0].length+J.index,ce=J.input[te];if(ce==="<"||ce===","){W.ignoreMatch();return}ce===">"&&(g(J,{after:te})||W.ignoreMatch());let fe;const xe=J.input.substring(te);if(fe=xe.match(/^\s*=/)){W.ignoreMatch();return}if((fe=xe.match(/^\s+extends\s+/))&&fe.index===0){W.ignoreMatch();return}}},S={$pattern:e,keyword:t,literal:r,built_in:d,"variable.language":c},w="[0-9](_?[0-9])*",k=`\\.(${w})`,N="0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*",M={className:"number",variants:[{begin:`(\\b(${N})((${k})|\\.)?|(${k}))[eE][+-]?(${w})\\b`},{begin:`\\b(${N})\\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:S,contains:[]},R={begin:".?html`",end:"",starts:{end:"`",returnEnd:!1,contains:[h.BACKSLASH_ESCAPE,B],subLanguage:"xml"}},U={begin:".?css`",end:"",starts:{end:"`",returnEnd:!1,contains:[h.BACKSLASH_ESCAPE,B],subLanguage:"css"}},I={begin:".?gql`",end:"",starts:{end:"`",returnEnd:!1,contains:[h.BACKSLASH_ESCAPE,B],subLanguage:"graphql"}},X={className:"string",begin:"`",end:"`",contains:[h.BACKSLASH_ESCAPE,B]},z={className:"comment",variants:[h.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}]}]}),h.C_BLOCK_COMMENT_MODE,h.C_LINE_COMMENT_MODE]},V=[h.APOS_STRING_MODE,h.QUOTE_STRING_MODE,R,U,I,X,{match:/\$\d+/},M];B.contains=V.concat({begin:/\{/,end:/\}/,keywords:S,contains:["self"].concat(V)});const P=[].concat(z,B.contains),T=P.concat([{begin:/(\s*)\(/,end:/\)/,keywords:S,contains:["self"].concat(P)}]),$={className:"params",begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:S,contains:T},O={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"}}]},H={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,...s]}},K={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 D(J){return p.concat("(?!",J.join("|"),")")}const Y={match:p.concat(/\b/,D([...o,"super","import"].map(J=>`${J}\\s*\\(`)),y,p.lookahead(/\s*\(/)),className:"title.function",relevance:0},L={begin:p.concat(/\./,p.lookahead(p.concat(y,/(?![0-9A-Za-z$_(])/))),end:y,excludeBegin:!0,keywords:"prototype",className:"property",relevance:0},G={match:[/get|set/,/\s+/,y,/(?=\()/],className:{1:"keyword",3:"title.function"},contains:[{begin:/\(\)/},$]},q="(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|"+h.UNDERSCORE_IDENT_RE+")\\s*=>",Q={match:[/const|var|let/,/\s+/,y,/\s*/,/=\s*/,/(async\s*)?/,p.lookahead(q)],keywords:"async",className:{1:"keyword",3:"title.function"},contains:[$]};return{name:"JavaScript",aliases:["js","jsx","mjs","cjs"],keywords:S,exports:{PARAMS_CONTAINS:T,CLASS_REFERENCE:H},illegal:/#(?![$_A-z])/,contains:[h.SHEBANG({label:"shebang",binary:"node",relevance:5}),K,h.APOS_STRING_MODE,h.QUOTE_STRING_MODE,R,U,I,X,z,{match:/\$\d+/},M,H,{scope:"attr",match:y+p.lookahead(":"),relevance:0},Q,{begin:"("+h.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",relevance:0,contains:[z,h.REGEXP_MODE,{className:"function",begin:q,returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:h.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:S,contains:T}]}]},{begin:/,/,relevance:0},{match:/\s+/,relevance:0},{variants:[{begin:b.begin,end:b.end},{match:_},{begin:E.begin,"on:begin":E.isTrulyOpeningTag,end:E.end}],subLanguage:"xml",contains:[{begin:E.begin,end:E.end,skip:!0,contains:["self"]}]}]},Z,{beginKeywords:"while if switch catch for"},{begin:"\\b(?!function)"+h.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",returnBegin:!0,label:"func.def",contains:[$,h.inherit(h.TITLE_MODE,{begin:y,className:"title.function"})]},{match:/\.\.\./,relevance:0},L,{match:"\\$"+y,relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"},contains:[$]},Y,C,O,G,{match:/\$[(.]/}]}}return Wh=f,Wh}var Jh,yv;function vj(){if(yv)return Jh;yv=1;function e(t){const r={className:"attr",begin:/"(\\.|[^\\"\r\n])*"(?=\s*:)/,relevance:1.01},a={match:/[{}[\],:]/,className:"punctuation",relevance:0},s=["true","false","null"],o={scope:"literal",beginKeywords:s.join(" ")};return{name:"JSON",aliases:["jsonc"],keywords:{literal:s},contains:[r,a,t.QUOTE_STRING_MODE,o,t.C_NUMBER_MODE,t.C_LINE_COMMENT_MODE,t.C_BLOCK_COMMENT_MODE],illegal:"\\S"}}return Jh=e,Jh}var em,vv;function _j(){if(vv)return em;vv=1;var e="[0-9](_*[0-9])*",t=`\\.(${e})`,r="[0-9a-fA-F](_*[0-9a-fA-F])*",a={className:"number",variants:[{begin:`(\\b(${e})((${t})|\\.)?|(${t}))[eE][+-]?(${e})[fFdD]?\\b`},{begin:`\\b(${e})((${t})[fFdD]?\\b|\\.([fFdD]\\b)?)`},{begin:`(${t})[fFdD]?\\b`},{begin:`\\b(${e})[fFdD]\\b`},{begin:`\\b0[xX]((${r})\\.?|(${r})?\\.(${r}))[pP][+-]?(${e})[fFdD]?\\b`},{begin:"\\b(0|[1-9](_*[0-9])*)[lL]?\\b"},{begin:`\\b0[xX](${r})[lL]?\\b`},{begin:"\\b0(_*[0-7])*[lL]?\\b"},{begin:"\\b0[bB][01](_*[01])*[lL]?\\b"}],relevance:0};function s(o){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"},d={className:"keyword",begin:/\b(break|continue|return|this)\b/,starts:{contains:[{className:"symbol",begin:/@\w+/}]}},f={className:"symbol",begin:o.UNDERSCORE_IDENT_RE+"@"},h={className:"subst",begin:/\$\{/,end:/\}/,contains:[o.C_NUMBER_MODE]},p={className:"variable",begin:"\\$"+o.UNDERSCORE_IDENT_RE},g={className:"string",variants:[{begin:'"""',end:'"""(?=[^"])',contains:[p,h]},{begin:"'",end:"'",illegal:/\n/,contains:[o.BACKSLASH_ESCAPE]},{begin:'"',end:'"',illegal:/\n/,contains:[o.BACKSLASH_ESCAPE,p,h]}]};h.contains.push(g);const y={className:"meta",begin:"@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\s*:(?:\\s*"+o.UNDERSCORE_IDENT_RE+")?"},b={className:"meta",begin:"@"+o.UNDERSCORE_IDENT_RE,contains:[{begin:/\(/,end:/\)/,contains:[o.inherit(g,{className:"string"}),"self"]}]},_=a,E=o.COMMENT("/\\*","\\*/",{contains:[o.C_BLOCK_COMMENT_MODE]}),S={variants:[{className:"type",begin:o.UNDERSCORE_IDENT_RE},{begin:/\(/,end:/\)/,contains:[]}]},w=S;return w.variants[1].contains=[S],S.variants[1].contains=[w],{name:"Kotlin",aliases:["kt","kts"],keywords:c,contains:[o.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"}]}),o.C_LINE_COMMENT_MODE,E,d,f,y,b,{className:"function",beginKeywords:"fun",end:"[(]|$",returnBegin:!0,excludeEnd:!0,keywords:c,relevance:5,contains:[{begin:o.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0,contains:[o.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:[S,o.C_LINE_COMMENT_MODE,E],relevance:0},o.C_LINE_COMMENT_MODE,E,y,b,g,o.C_NUMBER_MODE]},E]},{begin:[/class|interface|trait/,/\s+/,o.UNDERSCORE_IDENT_RE],beginScope:{3:"title.class"},keywords:"class interface trait",end:/[:\{(]|$/,excludeEnd:!0,illegal:"extends implements",contains:[{beginKeywords:"public protected internal private constructor"},o.UNDERSCORE_TITLE_MODE,{className:"type",begin://,excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:/[,:]\s*/,end:/[<\(,){\s]|$/,excludeBegin:!0,returnEnd:!0},y,b]},g,{className:"meta",begin:"^#!/usr/bin/env",end:"$",illegal:` +`},_]}}return em=s,em}var tm,_v;function wj(){if(_v)return tm;_v=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_-]*/}}),t=["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"],r=["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=[...t,...r],s=["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(),o=["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(),d=["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(),f=o.concat(c).sort().reverse();function h(p){const g=e(p),y=f,b="and or not only",_="[\\w-]+",E="("+_+"|@\\{"+_+"\\})",S=[],w=[],k=function(P){return{className:"string",begin:"~?"+P+".*?"+P}},N=function(P,T,$){return{className:P,begin:T,relevance:$}},M={$pattern:/[a-z-]+/,keyword:b,attribute:s.join(" ")},B={begin:"\\(",end:"\\)",contains:w,keywords:M,relevance:0};w.push(p.C_LINE_COMMENT_MODE,p.C_BLOCK_COMMENT_MODE,k("'"),k('"'),g.CSS_NUMBER_MODE,{begin:"(url|data-uri)\\(",starts:{className:"string",end:"[\\)\\n]",excludeEnd:!0}},g.HEXCOLOR,B,N("variable","@@?"+_,10),N("variable","@\\{"+_+"\\}"),N("built_in","~?`[^`]*?`"),{className:"attribute",begin:_+"\\s*:",end:":",returnBegin:!0,excludeEnd:!0},g.IMPORTANT,{beginKeywords:"and not"},g.FUNCTION_DISPATCH);const R=w.concat({begin:/\{/,end:/\}/,contains:S}),U={beginKeywords:"when",endsWithParent:!0,contains:[{beginKeywords:"and not"}].concat(w)},I={begin:E+"\\s*:",returnBegin:!0,end:/[;}]/,relevance:0,contains:[{begin:/-(webkit|moz|ms|o)-/},g.CSS_VARIABLE,{className:"attribute",begin:"\\b("+d.join("|")+")\\b",end:/(?=:)/,starts:{endsWithParent:!0,illegal:"[<=$]",relevance:0,contains:w}}]},X={className:"keyword",begin:"@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\b",starts:{end:"[;{}]",keywords:M,returnEnd:!0,contains:w,relevance:0}},j={className:"variable",variants:[{begin:"@"+_+"\\s*:",relevance:15},{begin:"@"+_}],starts:{end:"[;}]",returnEnd:!0,contains:R}},z={variants:[{begin:"[\\.#:&\\[>]",end:"[;{}]"},{begin:E,end:/\{/}],returnBegin:!0,returnEnd:!0,illegal:`[<='$"]`,relevance:0,contains:[p.C_LINE_COMMENT_MODE,p.C_BLOCK_COMMENT_MODE,U,N("keyword","all\\b"),N("variable","@\\{"+_+"\\}"),{begin:"\\b("+a.join("|")+")\\b",className:"selector-tag"},g.CSS_NUMBER_MODE,N("selector-tag",E,0),N("selector-id","#"+E),N("selector-class","\\."+E,0),N("selector-tag","&",0),g.ATTRIBUTE_SELECTOR_MODE,{className:"selector-pseudo",begin:":("+o.join("|")+")"},{className:"selector-pseudo",begin:":(:)?("+c.join("|")+")"},{begin:/\(/,end:/\)/,relevance:0,contains:R},{begin:"!important"},g.FUNCTION_DISPATCH]},V={begin:_+`:(:)?(${y.join("|")})`,returnBegin:!0,contains:[z]};return S.push(p.C_LINE_COMMENT_MODE,p.C_BLOCK_COMMENT_MODE,X,j,V,I,z,U,g.FUNCTION_DISPATCH),{name:"Less",case_insensitive:!0,illegal:`[=>'/<($"]`,contains:S}}return tm=h,tm}var nm,wv;function Ej(){if(wv)return nm;wv=1;function e(t){const r="\\[=*\\[",a="\\]=*\\]",s={begin:r,end:a,contains:["self"]},o=[t.COMMENT("--(?!"+r+")","$"),t.COMMENT("--"+r,a,{contains:[s],relevance:10})];return{name:"Lua",aliases:["pluto"],keywords:{$pattern:t.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:o.concat([{className:"function",beginKeywords:"function",end:"\\)",contains:[t.inherit(t.TITLE_MODE,{begin:"([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*"}),{className:"params",begin:"\\(",endsWithParent:!0,contains:o}].concat(o)},t.C_NUMBER_MODE,t.APOS_STRING_MODE,t.QUOTE_STRING_MODE,{className:"string",begin:r,end:a,contains:[s],relevance:5}])}}return nm=e,nm}var rm,Ev;function Nj(){if(Ev)return rm;Ev=1;function e(t){const r={className:"variable",variants:[{begin:"\\$\\("+t.UNDERSCORE_IDENT_RE+"\\)",contains:[t.BACKSLASH_ESCAPE]},{begin:/\$[@%\{/,end:/\}/},f={scope:"attr",match:/\s+:\s*\w+(\s*\(.*?\))?/},h={scope:"variable",variants:[{begin:/\$\d/},{begin:r.concat(/[$%@](?!")(\^\w\b|#\w+(::\w+)*|\{\w+\}|\w+(::\w*)*)/,"(?![A-Za-z])(?![@$%])")},{begin:/[$%@](?!")[^\s\w{=]|\$=/,relevance:0}],contains:[f]},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},g=[t.BACKSLASH_ESCAPE,c,h],y=[/!/,/\//,/\|/,/\?/,/'/,/"/,/#/],b=(S,w,k="\\1")=>{const N=k==="\\1"?k:r.concat(k,w);return r.concat(r.concat("(?:",S,")"),w,/(?:\\.|[^\\\/])*?/,N,/(?:\\.|[^\\\/])*?/,k,s)},_=(S,w,k)=>r.concat(r.concat("(?:",S,")"),w,/(?:\\.|[^\\\/])*?/,k,s),E=[h,t.HASH_COMMENT_MODE,t.COMMENT(/^=\w/,/=cut/,{endsWithParent:!0}),d,{className:"string",contains:g,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:[t.BACKSLASH_ESCAPE]},{begin:'"',end:'"'},{begin:"`",end:"`",contains:[t.BACKSLASH_ESCAPE]},{begin:/\{\w+\}/,relevance:0},{begin:"-?\\w+\\s*=>",relevance:0}]},p,{begin:"(\\/\\/|"+t.RE_STARTERS_RE+"|\\b(split|return|print|reverse|grep)\\b)\\s*",keywords:"split return print reverse grep",relevance:0,contains:[t.HASH_COMMENT_MODE,{className:"regexp",variants:[{begin:b("s|tr|y",r.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",r.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:[t.TITLE_MODE,f]},{className:"class",beginKeywords:"class",end:"[;{]",excludeEnd:!0,relevance:5,contains:[t.TITLE_MODE,f,p]},{begin:"-\\w\\b",relevance:0},{begin:"^__DATA__$",end:"^__END__$",subLanguage:"mojolicious",contains:[{begin:"^@@.*",end:"$",className:"comment"}]}];return c.contains=E,d.contains=E,{name:"Perl",aliases:["pl","pm"],keywords:o,contains:E}}return im=e,im}var am,Sv;function kj(){if(Sv)return am;Sv=1;function e(t){const r={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_]*/,f={"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"]},h={$pattern:a,keyword:["@interface","@class","@protocol","@implementation"]};return{name:"Objective-C",aliases:["mm","objc","obj-c","obj-c++","objective-c++"],keywords:f,illegal:"/,end:/$/,illegal:"\\n"},t.C_LINE_COMMENT_MODE,t.C_BLOCK_COMMENT_MODE]},{className:"class",begin:"("+h.keyword.join("|")+")\\b",end:/(\{|$)/,excludeEnd:!0,keywords:h,contains:[t.UNDERSCORE_TITLE_MODE]},{begin:"\\."+t.UNDERSCORE_IDENT_RE,relevance:0}]}}return am=e,am}var sm,kv;function Cj(){if(kv)return sm;kv=1;function e(t){const r=t.regex,a=/(?![A-Za-z0-9])(?![$])/,s=r.concat(/[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/,a),o=r.concat(/(\\?[A-Z][a-z0-9_\x7f-\xff]+|\\?[A-Z]+(?=[A-Z][a-z0-9_\x7f-\xff])){1,}/,a),c=r.concat(/[A-Z]+/,a),d={scope:"variable",match:"\\$+"+s},f={scope:"meta",variants:[{begin:/<\?php/,relevance:10},{begin:/<\?=/},{begin:/<\?/,relevance:.1},{begin:/\?>/}]},h={scope:"subst",variants:[{begin:/\$\w+/},{begin:/\{\$/,end:/\}/}]},p=t.inherit(t.APOS_STRING_MODE,{illegal:null}),g=t.inherit(t.QUOTE_STRING_MODE,{illegal:null,contains:t.QUOTE_STRING_MODE.contains.concat(h)}),y={begin:/<<<[ \t]*(?:(\w+)|"(\w+)")\n/,end:/[ \t]*(\w+)\b/,contains:t.QUOTE_STRING_MODE.contains.concat(h),"on:begin":($,O)=>{O.data._beginMatch=$[1]||$[2]},"on:end":($,O)=>{O.data._beginMatch!==$[1]&&O.ignoreMatch()}},b=t.END_SAME_AS_BEGIN({begin:/<<<[ \t]*'(\w+)'\n/,end:/[ \t]*(\w+)\b/}),_=`[ +]`,E={scope:"string",variants:[g,p,y,b]},S={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},w=["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"],N=["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 O=[];return $.forEach(H=>{O.push(H),H.toLowerCase()===H?O.push(H.toUpperCase()):O.push(H.toLowerCase())}),O})(w),built_in:N},R=$=>$.map(O=>O.replace(/\|\d+$/,"")),U={variants:[{match:[/new/,r.concat(_,"+"),r.concat("(?!",R(N).join("\\b|"),"\\b)"),o],scope:{1:"keyword",4:"title.class"}}]},I=r.concat(s,"\\b(?!\\()"),X={variants:[{match:[r.concat(/::/,r.lookahead(/(?!class\b)/)),I],scope:{2:"variable.constant"}},{match:[/::/,/class/],scope:{2:"variable.language"}},{match:[o,r.concat(/::/,r.lookahead(/(?!class\b)/)),I],scope:{1:"title.class",3:"variable.constant"}},{match:[o,r.concat("::",r.lookahead(/(?!class\b)/))],scope:{1:"title.class"}},{match:[o,/::/,/class/],scope:{1:"title.class",3:"variable.language"}}]},j={scope:"attr",match:r.concat(s,r.lookahead(":"),r.lookahead(/(?!::)/))},z={relevance:0,begin:/\(/,end:/\)/,keywords:B,contains:[j,d,X,t.C_BLOCK_COMMENT_MODE,E,S,U]},V={relevance:0,match:[/\b/,r.concat("(?!fn\\b|function\\b|",R(k).join("\\b|"),"|",R(N).join("\\b|"),"\\b)"),s,r.concat(_,"*"),r.lookahead(/(?=\()/)],scope:{3:"title.function.invoke"},contains:[z]};z.contains.push(V);const P=[j,X,t.C_BLOCK_COMMENT_MODE,E,S,U],T={begin:r.concat(/#\[\s*\\?/,r.either(o,c)),beginScope:"meta",end:/]/,endScope:"meta",keywords:{literal:w,keyword:["new","array"]},contains:[{begin:/\[/,end:/]/,keywords:{literal:w,keyword:["new","array"]},contains:["self",...P]},...P,{scope:"meta",variants:[{match:o},{match:c}]}]};return{case_insensitive:!1,keywords:B,contains:[T,t.HASH_COMMENT_MODE,t.COMMENT("//","$"),t.COMMENT("/\\*","\\*/",{contains:[{scope:"doctag",match:"@[A-Za-z]+"}]}),{match:/__halt_compiler\(\);/,keywords:"__halt_compiler",starts:{scope:"comment",end:t.MATCH_NOTHING_RE,contains:[{match:/\?>/,scope:"meta",endsParent:!0}]}},f,{scope:"variable.language",match:/\$this\b/},d,V,X,{match:[/const/,/\s/,s],scope:{1:"keyword",3:"variable.constant"}},U,{scope:"function",relevance:0,beginKeywords:"fn function",end:/[;{]/,excludeEnd:!0,illegal:"[$%\\[]",contains:[{beginKeywords:"use"},t.UNDERSCORE_TITLE_MODE,{begin:"=>",endsParent:!0},{scope:"params",begin:"\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0,keywords:B,contains:["self",T,d,X,t.C_BLOCK_COMMENT_MODE,E,S]}]},{scope:"class",variants:[{beginKeywords:"enum",illegal:/[($"]/},{beginKeywords:"class interface trait",illegal:/[:($"]/}],relevance:0,end:/\{/,excludeEnd:!0,contains:[{beginKeywords:"extends implements"},t.UNDERSCORE_TITLE_MODE]},{beginKeywords:"namespace",relevance:0,end:";",illegal:/[.']/,contains:[t.inherit(t.UNDERSCORE_TITLE_MODE,{scope:"title.class"})]},{beginKeywords:"use",relevance:0,end:";",contains:[{match:/\b(as|const|function)\b/,scope:"keyword"},t.UNDERSCORE_TITLE_MODE]},E,S]}}return sm=e,sm}var lm,Cv;function Tj(){if(Cv)return lm;Cv=1;function e(t){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},t.inherit(t.APOS_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0}),t.inherit(t.QUOTE_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0})]}]}}return lm=e,lm}var om,Tv;function Aj(){if(Tv)return om;Tv=1;function e(t){return{name:"Plain text",aliases:["text","txt"],disableAutodetect:!0}}return om=e,om}var cm,Av;function Mj(){if(Av)return cm;Av=1;function e(t){const r=t.regex,a=new RegExp("[\\p{XID_Start}_]\\p{XID_Continue}*","u"),s=["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"],f={$pattern:/[A-Za-z]\w+|__\w+__/,keyword:s,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"]},h={className:"meta",begin:/^(>>>|\.\.\.) /},p={className:"subst",begin:/\{/,end:/\}/,keywords:f,illegal:/#/},g={begin:/\{\{/,relevance:0},y={className:"string",contains:[t.BACKSLASH_ESCAPE],variants:[{begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?'''/,end:/'''/,contains:[t.BACKSLASH_ESCAPE,h],relevance:10},{begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?"""/,end:/"""/,contains:[t.BACKSLASH_ESCAPE,h],relevance:10},{begin:/([fF][rR]|[rR][fF]|[fF])'''/,end:/'''/,contains:[t.BACKSLASH_ESCAPE,h,g,p]},{begin:/([fF][rR]|[rR][fF]|[fF])"""/,end:/"""/,contains:[t.BACKSLASH_ESCAPE,h,g,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:[t.BACKSLASH_ESCAPE,g,p]},{begin:/([fF][rR]|[rR][fF]|[fF])"/,end:/"/,contains:[t.BACKSLASH_ESCAPE,g,p]},t.APOS_STRING_MODE,t.QUOTE_STRING_MODE]},b="[0-9](_?[0-9])*",_=`(\\b(${b}))?\\.(${b})|\\b(${b})\\.`,E=`\\b|${s.join("|")}`,S={className:"number",relevance:0,variants:[{begin:`(\\b(${b})|(${_}))[eE][+-]?(${b})[jJ]?(?=${E})`},{begin:`(${_})[jJ]?`},{begin:`\\b([1-9](_?[0-9])*|0+(_?0)*)[lLjJ]?(?=${E})`},{begin:`\\b0[bB](_?[01])+[lL]?(?=${E})`},{begin:`\\b0[oO](_?[0-7])+[lL]?(?=${E})`},{begin:`\\b0[xX](_?[0-9a-fA-F])+[lL]?(?=${E})`},{begin:`\\b(${b})[jJ](?=${E})`}]},w={className:"comment",begin:r.lookahead(/# type:/),end:/$/,keywords:f,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:f,contains:["self",h,S,y,t.HASH_COMMENT_MODE]}]};return p.contains=[y,S,h],{name:"Python",aliases:["py","gyp","ipython"],unicodeRegex:!0,keywords:f,illegal:/(<\/|\?)|=>/,contains:[h,S,{scope:"variable.language",match:/\bself\b/},{beginKeywords:"if",relevance:0},{match:/\bor\b/,scope:"keyword"},y,w,t.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:[S,k,y]}]}}return cm=e,cm}var um,Mv;function Oj(){if(Mv)return um;Mv=1;function e(t){return{aliases:["pycon"],contains:[{className:"meta.prompt",starts:{end:/ |$/,starts:{end:"$",subLanguage:"python"}},variants:[{begin:/^>>>(?=[ ]|$)/},{begin:/^\.\.\.(?=[ ]|$)/}]}]}}return um=e,um}var dm,Ov;function Rj(){if(Ov)return dm;Ov=1;function e(t){const r=t.regex,a=/(?:(?:[a-zA-Z]|\.[._a-zA-Z])[._a-zA-Z0-9]*)|\.(?!\d)/,s=r.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]?/),o=/[=!<>:]=|\|\||&&|:::?|<-|<<-|->>|->|\|>|[-+*\/?!$&|:<=>@^~]|\*\*/,c=r.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:[t.COMMENT(/#'/,/$/,{contains:[{scope:"doctag",match:/@examples/,starts:{end:r.lookahead(r.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]+/}]}),t.HASH_COMMENT_MODE,{scope:"string",contains:[t.BACKSLASH_ESCAPE],variants:[t.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\(/,end:/\)(-*)"/}),t.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\{/,end:/\}(-*)"/}),t.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\[/,end:/\](-*)"/}),t.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\(/,end:/\)(-*)'/}),t.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\{/,end:/\}(-*)'/}),t.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\[/,end:/\](-*)'/}),{begin:'"',end:'"',relevance:0},{begin:"'",end:"'",relevance:0}]},{relevance:0,variants:[{scope:{1:"operator",2:"number"},match:[o,s]},{scope:{1:"operator",2:"number"},match:[/%[^%]*%/,s]},{scope:{1:"punctuation",2:"number"},match:[c,s]},{scope:{2:"number"},match:[/[^a-zA-Z0-9._]|^/,s]}]},{scope:{3:"operator"},match:[a,/\s+/,/<-/,/\s+/]},{scope:"operator",relevance:0,variants:[{match:o},{match:/%[^%]*%/}]},{scope:"punctuation",relevance:0,match:c},{begin:"`",end:"`",contains:[{begin:/\\./}]}]}}return dm=e,dm}var fm,Rv;function jj(){if(Rv)return fm;Rv=1;function e(t){const r=t.regex,a=/(r#)?/,s=r.concat(a,t.UNDERSCORE_IDENT_RE),o=r.concat(a,t.IDENT_RE),c={className:"title.function.invoke",relevance:0,begin:r.concat(/\b/,/(?!let|for|while|if|else|match\b)/,o,r.lookahead(/\s*\(/))},d="([ui](8|16|32|64|128|size)|f(32|64))?",f=["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"],h=["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!"],g=["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:t.IDENT_RE+"!?",type:g,keyword:f,literal:h,built_in:p},illegal:""},c]}}return fm=e,fm}var hm,jv;function Dj(){if(jv)return hm;jv=1;const e=h=>({IMPORTANT:{scope:"meta",begin:"!important"},BLOCK_COMMENT:h.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:[h.APOS_STRING_MODE,h.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{scope:"number",begin:h.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_-]*/}}),t=["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"],r=["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=[...t,...r],s=["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(),o=["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(),d=["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 f(h){const p=e(h),g=c,y=o,b="@[a-z-]+",_="and or not only",S={className:"variable",begin:"(\\$"+"[a-zA-Z-][a-zA-Z0-9_-]*"+")\\b",relevance:0};return{name:"SCSS",case_insensitive:!0,illegal:"[=/|']",contains:[h.C_LINE_COMMENT_MODE,h.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:":(:)?("+g.join("|")+")"},S,{begin:/\(/,end:/\)/,contains:[p.CSS_NUMBER_MODE]},p.CSS_VARIABLE,{className:"attribute",begin:"\\b("+d.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,S,p.HEXCOLOR,p.CSS_NUMBER_MODE,h.QUOTE_STRING_MODE,h.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:s.join(" ")},contains:[{begin:b,className:"keyword"},{begin:/[a-z-]+(?=:)/,className:"attribute"},S,h.QUOTE_STRING_MODE,h.APOS_STRING_MODE,p.HEXCOLOR,p.CSS_NUMBER_MODE]},p.FUNCTION_DISPATCH]}}return hm=f,hm}var mm,Dv;function Lj(){if(Dv)return mm;Dv=1;function e(t){return{name:"Shell Session",aliases:["console","shellsession"],contains:[{className:"meta.prompt",begin:/^\s{0,3}[/~\w\d[\]()@-]*[>%$#][ ]?/,starts:{end:/[^\\](?=\s*$)/,subLanguage:"bash"}}]}}return mm=e,mm}var pm,Lv;function zj(){if(Lv)return pm;Lv=1;function e(t){const r=t.regex,a=t.COMMENT("--","$"),s={scope:"string",variants:[{begin:/'/,end:/'/,contains:[{match:/''/}]}]},o={begin:/"/,end:/"/,contains:[{match:/""/}]},c=["true","false","unknown"],d=["double precision","large object","with timezone","without timezone"],f=["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"],h=["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"],g=["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"],_=g,E=[...p,...h].filter(R=>!g.includes(R)),S={scope:"variable",match:/@[a-z0-9][a-z0-9_]*/},w={scope:"operator",match:/[-+*/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?/,relevance:0},k={match:r.concat(/\b/,r.either(..._),/\s*\(/),relevance:0,keywords:{built_in:_}};function N(R){return r.concat(/\b/,r.either(...R.map(U=>U.replace(/\s+/,"\\s+"))),/\b/)}const M={scope:"keyword",match:N(b),relevance:0};function B(R,{exceptions:U,when:I}={}){const X=I;return U=U||[],R.map(j=>j.match(/\|\d+$/)||U.includes(j)?j:X(j)?`${j}|0`:j)}return{name:"SQL",case_insensitive:!0,illegal:/[{}]|<\//,keywords:{$pattern:/\b[\w\.]+/,keyword:B(E,{when:R=>R.length<3}),literal:c,type:f,built_in:y},contains:[{scope:"type",match:N(d)},M,k,S,s,o,t.C_NUMBER_MODE,t.C_BLOCK_COMMENT_MODE,a,w]}}return pm=e,pm}var gm,zv;function Ij(){if(zv)return gm;zv=1;function e(I){return I?typeof I=="string"?I:I.source:null}function t(I){return r("(?=",I,")")}function r(...I){return I.map(j=>e(j)).join("")}function a(I){const X=I[I.length-1];return typeof X=="object"&&X.constructor===Object?(I.splice(I.length-1,1),X):{}}function s(...I){return"("+(a(I).capture?"":"?:")+I.map(z=>e(z)).join("|")+")"}const o=I=>r(/\b/,I,/\w$/.test(I)?/\b/:/\B/),c=["Protocol","Type"].map(o),d=["init","self"].map(o),f=["Any","Self"],h=["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"],g=["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"],_=s(/[/=\-+!*%<>&|^~?]/,/[\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]/),E=s(_,/[\u0300-\u036F]/,/[\u1DC0-\u1DFF]/,/[\u20D0-\u20FF]/,/[\uFE00-\uFE0F]/,/[\uFE20-\uFE2F]/),S=r(_,E,"*"),w=s(/[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=s(w,/\d/,/[\u0300-\u036F\u1DC0-\u1DFF\u20D0-\u20FF\uFE20-\uFE2F]/),N=r(w,k,"*"),M=r(/[A-Z]/,k,"*"),B=["attached","autoclosure",r(/convention\(/,s("swift","block","c"),/\)/),"discardableResult","dynamicCallable","dynamicMemberLookup","escaping","freestanding","frozen","GKInspectable","IBAction","IBDesignable","IBInspectable","IBOutlet","IBSegueAction","inlinable","main","nonobjc","NSApplicationMain","NSCopying","NSManaged",r(/objc\(/,N,/\)/),"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 U(I){const X={match:/\s+/,relevance:0},j=I.COMMENT("/\\*","\\*/",{contains:["self"]}),z=[I.C_LINE_COMMENT_MODE,j],V={match:[/\./,s(...c,...d)],className:{2:"keyword"}},P={match:r(/\./,s(...h)),relevance:0},T=h.filter(nt=>typeof nt=="string").concat(["_|0"]),$=h.filter(nt=>typeof nt!="string").concat(f).map(o),O={variants:[{className:"keyword",match:s(...$,...d)}]},H={$pattern:s(/\b\w+/,/#\w+/),keyword:T.concat(y),literal:p},K=[V,P,O],Z={match:r(/\./,s(...b)),relevance:0},C={className:"built_in",match:r(/\b/,s(...b),/(?=\()/)},D=[Z,C],Y={match:/->/,relevance:0},L={className:"operator",relevance:0,variants:[{match:S},{match:`\\.(\\.|${E})+`}]},G=[Y,L],q="([0-9]_*)+",Q="([0-9a-fA-F]_*)+",J={className:"number",relevance:0,variants:[{match:`\\b(${q})(\\.(${q}))?([eE][+-]?(${q}))?\\b`},{match:`\\b0x(${Q})(\\.(${Q}))?([pP][+-]?(${q}))?\\b`},{match:/\b0o([0-7]_*)+\b/},{match:/\b0b([01]_*)+\b/}]},W=(nt="")=>({className:"subst",variants:[{match:r(/\\/,nt,/[0\\tnr"']/)},{match:r(/\\/,nt,/u\{[0-9a-fA-F]{1,8}\}/)}]}),te=(nt="")=>({className:"subst",match:r(/\\/,nt,/[\t ]*(?:[\r\n]|\r\n)/)}),ce=(nt="")=>({className:"subst",label:"interpol",begin:r(/\\/,nt,/\(/),end:/\)/}),fe=(nt="")=>({begin:r(nt,/"""/),end:r(/"""/,nt),contains:[W(nt),te(nt),ce(nt)]}),xe=(nt="")=>({begin:r(nt,/"/),end:r(/"/,nt),contains:[W(nt),ce(nt)]}),we={className:"string",variants:[fe(),fe("#"),fe("##"),fe("###"),xe(),xe("#"),xe("##"),xe("###")]},Ne=[I.BACKSLASH_ESCAPE,{begin:/\[/,end:/\]/,relevance:0,contains:[I.BACKSLASH_ESCAPE]}],De={begin:/\/[^\s](?=[^/\n]*\/)/,end:/\//,contains:Ne},$e=nt=>{const Xn=r(nt,/\//),On=r(/\//,nt);return{begin:Xn,end:On,contains:[...Ne,{scope:"comment",begin:`#(?!.*${On})`,end:/$/}]}},st={scope:"regexp",variants:[$e("###"),$e("##"),$e("#"),De]},Rt={match:r(/`/,N,/`/)},Xt={className:"variable",match:/\$\d+/},Pt={className:"variable",match:`\\$${k}+`},Kt=[Rt,Xt,Pt],Yn={match:/(@|#(un)?)available/,scope:"keyword",starts:{contains:[{begin:/\(/,end:/\)/,keywords:R,contains:[...G,J,we]}]}},Nn={scope:"keyword",match:r(/@/,s(...B),t(s(/\(/,/\s+/)))},ct={scope:"meta",match:r(/@/,N)},It=[Yn,Nn,ct],ue={match:t(/\b[A-Z]/),relevance:0,contains:[{className:"type",match:r(/(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)/,k,"+")},{className:"type",match:M,relevance:0},{match:/[?!]+/,relevance:0},{match:/\.\.\./,relevance:0},{match:r(/\s+&\s+/,t(M)),relevance:0}]},be={begin://,keywords:H,contains:[...z,...K,...It,Y,ue]};ue.contains.push(be);const Oe={match:r(N,/\s*:/),keywords:"_|0",relevance:0},Fe={begin:/\(/,end:/\)/,relevance:0,keywords:H,contains:["self",Oe,...z,st,...K,...D,...G,J,we,...Kt,...It,ue]},Ze={begin://,keywords:"repeat each",contains:[...z,ue]},cn={begin:s(t(r(N,/\s*:/)),t(r(N,/\s+/,N,/\s*:/))),end:/:/,relevance:0,contains:[{className:"keyword",match:/\b_\b/},{className:"params",match:N}]},Sn={begin:/\(/,end:/\)/,keywords:H,contains:[cn,...z,...K,...G,J,we,...It,ue,Fe],endsParent:!0,illegal:/["']/},Zt={match:[/(func|macro)/,/\s+/,s(Rt.match,N,S)],className:{1:"keyword",3:"title.function"},contains:[Ze,Sn,X],illegal:[/\[/,/%/]},At={match:[/\b(?:subscript|init[?!]?)/,/\s*(?=[<(])/],className:{1:"keyword"},contains:[Ze,Sn,X],illegal:/\[|%/},Jt={match:[/operator/,/\s+/,S],className:{1:"keyword",3:"title"}},ut={begin:[/precedencegroup/,/\s+/,M],className:{1:"keyword",3:"title"},contains:[ue],keywords:[...g,...p],end:/}/},In={match:[/class\b/,/\s+/,/func\b/,/\s+/,/\b[A-Za-z_][A-Za-z0-9_]*\b/],scope:{1:"keyword",3:"keyword",5:"title.function"}},un={match:[/class\b/,/\s+/,/var\b/],scope:{1:"keyword",3:"keyword"}},Ni={begin:[/(struct|protocol|class|extension|enum|actor)/,/\s+/,N,/\s*/],beginScope:{1:"keyword",3:"title.class"},keywords:H,contains:[Ze,...K,{begin:/:/,end:/\{/,keywords:H,contains:[{scope:"title.class.inherited",match:M},...K],relevance:0}]};for(const nt of we.variants){const Xn=nt.contains.find(mn=>mn.label==="interpol");Xn.keywords=H;const On=[...K,...D,...G,J,we,...Kt];Xn.contains=[...On,{begin:/\(/,end:/\)/,contains:["self",...On]}]}return{name:"Swift",keywords:H,contains:[...z,Zt,At,In,un,Ni,Jt,ut,{beginKeywords:"import",end:/$/,contains:[...z],relevance:0},st,...K,...D,...G,J,we,...Kt,...It,ue,Fe]}}return gm=U,gm}var xm,Iv;function Bj(){if(Iv)return xm;Iv=1;function e(t){const r="true false yes no null",a="[\\w#;/?:@&=+$,.~*'()[\\]]+",s={className:"attr",variants:[{begin:/[\w*@][\w*@ :()\./-]*:(?=[ \t]|$)/},{begin:/"[\w*@][\w*@ :()\./-]*":(?=[ \t]|$)/},{begin:/'[\w*@][\w*@ :()\./-]*':(?=[ \t]|$)/}]},o={className:"template-variable",variants:[{begin:/\{\{/,end:/\}\}/},{begin:/%\{/,end:/\}/}]},c={className:"string",relevance:0,begin:/'/,end:/'/,contains:[{match:/''/,scope:"char.escape",relevance:0}]},d={className:"string",relevance:0,variants:[{begin:/"/,end:/"/},{begin:/\S+/}],contains:[t.BACKSLASH_ESCAPE,o]},f=t.inherit(d,{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:r,relevance:0},E={begin:/\{/,end:/\}/,contains:[_],illegal:"\\n",relevance:0},S={begin:"\\[",end:"\\]",contains:[_],illegal:"\\n",relevance:0},w=[s,{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:"&"+t.UNDERSCORE_IDENT_RE+"$"},{className:"meta",begin:"\\*"+t.UNDERSCORE_IDENT_RE+"$"},{className:"bullet",begin:"-(?=[ ]|$)",relevance:0},t.HASH_COMMENT_MODE,{beginKeywords:r,keywords:{literal:r}},b,{className:"number",begin:t.C_NUMBER_RE+"\\b",relevance:0},E,S,c,d],k=[...w];return k.pop(),k.push(f),_.contains=k,{name:"YAML",case_insensitive:!0,aliases:["yml"],contains:w}}return xm=e,xm}var bm,Bv;function Uj(){if(Bv)return bm;Bv=1;const e="[A-Za-z$_][0-9A-Za-z$_]*",t=["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"],r=["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"],s=["Error","EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],o=["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"],d=[].concat(o,a,s);function f(p){const g=p.regex,y=(W,{after:te})=>{const ce="",end:""},E=/<[A-Za-z0-9\\._:-]+\s*\/>/,S={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(W,te)=>{const ce=W[0].length+W.index,fe=W.input[ce];if(fe==="<"||fe===","){te.ignoreMatch();return}fe===">"&&(y(W,{after:ce})||te.ignoreMatch());let xe;const we=W.input.substring(ce);if(xe=we.match(/^\s*=/)){te.ignoreMatch();return}if((xe=we.match(/^\s+extends\s+/))&&xe.index===0){te.ignoreMatch();return}}},w={$pattern:e,keyword:t,literal:r,built_in:d,"variable.language":c},k="[0-9](_?[0-9])*",N=`\\.(${k})`,M="0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*",B={className:"number",variants:[{begin:`(\\b(${M})((${N})|\\.)?|(${N}))[eE][+-]?(${k})\\b`},{begin:`\\b(${M})\\b((${N})\\b|\\.)?|(${N})\\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:w,contains:[]},U={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"}},X={begin:".?gql`",end:"",starts:{end:"`",returnEnd:!1,contains:[p.BACKSLASH_ESCAPE,R],subLanguage:"graphql"}},j={className:"string",begin:"`",end:"`",contains:[p.BACKSLASH_ESCAPE,R]},V={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]},P=[p.APOS_STRING_MODE,p.QUOTE_STRING_MODE,U,I,X,j,{match:/\$\d+/},B];R.contains=P.concat({begin:/\{/,end:/\}/,keywords:w,contains:["self"].concat(P)});const T=[].concat(V,R.contains),$=T.concat([{begin:/(\s*)\(/,end:/\)/,keywords:w,contains:["self"].concat(T)}]),O={className:"params",begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:w,contains:$},H={variants:[{match:[/class/,/\s+/,b,/\s+/,/extends/,/\s+/,g.concat(b,"(",g.concat(/\./,b),")*")],scope:{1:"keyword",3:"title.class",5:"keyword",7:"title.class.inherited"}},{match:[/class/,/\s+/,b],scope:{1:"keyword",3:"title.class"}}]},K={relevance:0,match:g.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,...s]}},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:[O],illegal:/%/},D={relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:"variable.constant"};function Y(W){return g.concat("(?!",W.join("|"),")")}const L={match:g.concat(/\b/,Y([...o,"super","import"].map(W=>`${W}\\s*\\(`)),b,g.lookahead(/\s*\(/)),className:"title.function",relevance:0},G={begin:g.concat(/\./,g.lookahead(g.concat(b,/(?![0-9A-Za-z$_(])/))),end:b,excludeBegin:!0,keywords:"prototype",className:"property",relevance:0},q={match:[/get|set/,/\s+/,b,/(?=\()/],className:{1:"keyword",3:"title.function"},contains:[{begin:/\(\)/},O]},Q="(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|"+p.UNDERSCORE_IDENT_RE+")\\s*=>",J={match:[/const|var|let/,/\s+/,b,/\s*/,/=\s*/,/(async\s*)?/,g.lookahead(Q)],keywords:"async",className:{1:"keyword",3:"title.function"},contains:[O]};return{name:"JavaScript",aliases:["js","jsx","mjs","cjs"],keywords:w,exports:{PARAMS_CONTAINS:$,CLASS_REFERENCE:K},illegal:/#(?![$_A-z])/,contains:[p.SHEBANG({label:"shebang",binary:"node",relevance:5}),Z,p.APOS_STRING_MODE,p.QUOTE_STRING_MODE,U,I,X,j,V,{match:/\$\d+/},B,K,{scope:"attr",match:b+g.lookahead(":"),relevance:0},J,{begin:"("+p.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",relevance:0,contains:[V,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:w,contains:$}]}]},{begin:/,/,relevance:0},{match:/\s+/,relevance:0},{variants:[{begin:_.begin,end:_.end},{match:E},{begin:S.begin,"on:begin":S.isTrulyOpeningTag,end:S.end}],subLanguage:"xml",contains:[{begin:S.begin,end:S.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:[O,p.inherit(p.TITLE_MODE,{begin:b,className:"title.function"})]},{match:/\.\.\./,relevance:0},G,{match:"\\$"+b,relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"},contains:[O]},L,D,H,q,{match:/\$[(.]/}]}}function h(p){const g=p.regex,y=f(p),b=e,_=["any","void","number","boolean","string","object","never","symbol","bigint","unknown"],E={begin:[/namespace/,/\s+/,p.IDENT_RE],beginScope:{1:"keyword",3:"title.class"}},S={beginKeywords:"interface",end:/\{/,excludeEnd:!0,keywords:{keyword:"interface extends",built_in:_},contains:[y.exports.CLASS_REFERENCE]},w={className:"meta",relevance:10,begin:/^\s*['"]use strict['"]/},k=["type","interface","public","private","protected","implements","declare","abstract","readonly","enum","override","satisfies"],N={$pattern:e,keyword:t.concat(k),literal:r,built_in:d.concat(_),"variable.language":c},M={className:"meta",begin:"@"+b},B=(X,j,z)=>{const V=X.contains.findIndex(P=>P.label===j);if(V===-1)throw new Error("can not find mode to replace");X.contains.splice(V,1,z)};Object.assign(y.keywords,N),y.exports.PARAMS_CONTAINS.push(M);const R=y.contains.find(X=>X.scope==="attr"),U=Object.assign({},R,{match:g.concat(b,g.lookahead(/\s*\?:/))});y.exports.PARAMS_CONTAINS.push([y.exports.CLASS_REFERENCE,R,U]),y.contains=y.contains.concat([M,E,S,U]),B(y,"shebang",p.SHEBANG()),B(y,"use_strict",w);const I=y.contains.find(X=>X.label==="func.def");return I.relevance=0,Object.assign(y,{name:"TypeScript",aliases:["ts","tsx","mts","cts"]}),y}return bm=h,bm}var ym,Uv;function Hj(){if(Uv)return ym;Uv=1;function e(t){const r=t.regex,a={className:"string",begin:/"(""|[^/n])"C\b/},s={className:"string",begin:/"/,end:/"/,illegal:/\n/,contains:[{begin:/""/}]},o=/\d{1,2}\/\d{1,2}\/\d{4}/,c=/\d{4}-\d{1,2}-\d{1,2}/,d=/(\d|1[012])(:\d+){0,2} *(AM|PM)/,f=/\d{1,2}(:\d{1,2}){1,2}/,h={className:"literal",variants:[{begin:r.concat(/# */,r.either(c,o),/ *#/)},{begin:r.concat(/# */,f,/ *#/)},{begin:r.concat(/# */,d,/ *#/)},{begin:r.concat(/# */,r.either(c,o),/ +/,r.either(d,f),/ *#/)}]},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])|[%&])?/}]},g={className:"label",begin:/^\w+:/},y=t.COMMENT(/'''/,/$/,{contains:[{className:"doctag",begin:/<\/?/,end:/>/}]}),b=t.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,s,h,p,g,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 ym=e,ym}var vm,Hv;function $j(){if(Hv)return vm;Hv=1;function e(t){t.regex;const r=t.COMMENT(/\(;/,/;\)/);r.contains.push("self");const a=t.COMMENT(/;;/,/$/),s=["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"],o={begin:[/(?:func|call|call_indirect)/,/\s+/,/\$[^\s)]+/],className:{1:"keyword",3:"title.function"}},c={className:"variable",begin:/\$[\w_]+/},d={match:/(\((?!;)|\))+/,className:"punctuation",relevance:0},f={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/},h={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:s},contains:[a,r,{match:[/(?:offset|align)/,/\s*/,/=/],className:{1:"keyword",3:"operator"}},c,d,o,t.QUOTE_STRING_MODE,h,p,f]}}return vm=e,vm}var _m,$v;function qj(){if($v)return _m;$v=1;var e=aj();return e.registerLanguage("xml",sj()),e.registerLanguage("bash",lj()),e.registerLanguage("c",oj()),e.registerLanguage("cpp",cj()),e.registerLanguage("csharp",uj()),e.registerLanguage("css",dj()),e.registerLanguage("markdown",fj()),e.registerLanguage("diff",hj()),e.registerLanguage("ruby",mj()),e.registerLanguage("go",pj()),e.registerLanguage("graphql",gj()),e.registerLanguage("ini",xj()),e.registerLanguage("java",bj()),e.registerLanguage("javascript",yj()),e.registerLanguage("json",vj()),e.registerLanguage("kotlin",_j()),e.registerLanguage("less",wj()),e.registerLanguage("lua",Ej()),e.registerLanguage("makefile",Nj()),e.registerLanguage("perl",Sj()),e.registerLanguage("objectivec",kj()),e.registerLanguage("php",Cj()),e.registerLanguage("php-template",Tj()),e.registerLanguage("plaintext",Aj()),e.registerLanguage("python",Mj()),e.registerLanguage("python-repl",Oj()),e.registerLanguage("r",Rj()),e.registerLanguage("rust",jj()),e.registerLanguage("scss",Dj()),e.registerLanguage("shell",Lj()),e.registerLanguage("sql",zj()),e.registerLanguage("swift",Ij()),e.registerLanguage("yaml",Bj()),e.registerLanguage("typescript",Uj()),e.registerLanguage("vbnet",Hj()),e.registerLanguage("wasm",$j()),e.HighlightJS=e,e.default=e,_m=e,_m}var Pj=qj();const zn=Ao(Pj);function Fj(e){const t=e.regex,r="HTTP/([32]|1\\.[01])",a=/[A-Za-z][A-Za-z0-9-]*/,s={className:"attribute",begin:t.concat("^",a,"(?=\\:\\s)"),starts:{contains:[{className:"punctuation",begin:/: /,relevance:0,starts:{end:"$",relevance:0}}]}},o=[s,{begin:"\\n\\n",starts:{subLanguage:[],endsWithParent:!0}}];return{name:"HTTP",aliases:["https"],illegal:/\S/,contains:[{begin:"^(?="+r+" \\d{3})",end:/$/,contains:[{className:"meta",begin:r},{className:"number",begin:"\\b\\d{3}\\b"}],starts:{end:/\b\B/,illegal:/\S/,contains:o}},{begin:"(?=^[A-Z]+ (.*?) "+r+"$)",end:/$/,contains:[{className:"string",begin:" ",end:" ",excludeBegin:!0,excludeEnd:!0},{className:"meta",begin:r},{className:"keyword",begin:"[A-Z]+"}],starts:{end:/\b\B/,illegal:/\S/,contains:o}},e.inherit(s,{relevance:0})]}}function Gj(e){const t=e.regex,r={className:"variable",variants:[{begin:/\$\d+/},{begin:/\$\{\w+\}/},{begin:t.concat(/[$@]/,e.UNDERSCORE_IDENT_RE)}]},s={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,r],variants:[{begin:/"/,end:/"/},{begin:/'/,end:/'/}]},{begin:"([a-z]+):/",end:"\\s",endsWithParent:!0,excludeEnd:!0,contains:[r]},{className:"regexp",contains:[e.BACKSLASH_ESCAPE,r],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},r]};return{name:"Nginx config",aliases:["nginxconf"],contains:[e.HASH_COMMENT_MODE,{beginKeywords:"upstream location",end:/;|\{/,contains:s.contains,keywords:{section:"upstream location"}},{className:"section",begin:t.concat(e.UNDERSCORE_IDENT_RE+t.lookahead(/\s+\{/)),relevance:0},{begin:t.lookahead(e.UNDERSCORE_IDENT_RE+"\\s"),end:";|\\{",contains:[{className:"attribute",begin:e.UNDERSCORE_IDENT_RE,starts:s}],relevance:0}],illegal:"[^\\s\\}\\{]"}}function Vj(e){const t={className:"number",begin:/[$%]\d+/},r={className:"number",begin:/\b\d+/},a={className:"number",begin:/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(:\d{1,5})?/},s={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,s,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",t]},a,r,e.QUOTE_STRING_MODE]}}],illegal:/\S/}}function Yj(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:"{Cp(o),s(!0),setTimeout(()=>s(!1),2e3)};return m.jsxs("div",{className:"group/code relative rounded-md border border-[#2a2a2a] my-4 text-[#ddd] overflow-hidden",children:[b?m.jsxs("div",{className:"flex items-stretch",children:[m.jsxs("span",{className:"relative flex items-center text-[13px] text-[#999] font-mono px-4 py-2 border-r border-[#2a2a2a]",children:[b,m.jsx("span",{className:"absolute top-0 inset-x-0 h-0.5 bg-white/60 rounded-full"})]}),m.jsx("div",{className:"flex-1 border-b border-[#2a2a2a]"}),m.jsx("button",{onClick:S,className:"px-3 py-2 text-[#555] hover:text-white transition-colors border-b border-[#2a2a2a]","aria-label":"Copy code",children:a?m.jsx(Vs,{className:"w-3.5 h-3.5 text-emerald-400"}):m.jsx(go,{className:"w-3.5 h-3.5"})})]}):m.jsx("button",{onClick:S,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?m.jsx(Vs,{className:"w-3.5 h-3.5 text-emerald-400"}):m.jsx(go,{className:"w-3.5 h-3.5"})}),m.jsx("div",{className:"overflow-auto max-h-[400px]",children:m.jsx("table",{className:"w-full border-collapse font-mono text-[12px] leading-[22px] [font-variant-ligatures:none]",children:m.jsx("tbody",{children:E.map((N,M)=>m.jsxs("tr",{children:[m.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+M}),m.jsx("td",{className:"pl-4 pr-4 whitespace-pre",dangerouslySetInnerHTML:{__html:N||` +`}})]},M))})})})]})}function Zp(){return e=>{const t=r=>{var a;if(r.type==="element"&&r.tagName==="pre"&&r.children){const s=r.children.find(o=>o.type==="element"&&o.tagName==="code");(a=s==null?void 0:s.data)!=null&&a.meta&&(s.properties=s.properties||{},s.properties.metastring=s.data.meta)}r.children&&r.children.forEach(s=>t(s))};t(e)}}const Qp={code:bE,pre:({children:e})=>m.jsx(m.Fragment,{children:e})};function oa({title:e,content:t,action:r}){return m.jsxs("section",{children:[(e||r)&&m.jsxs("div",{className:"flex items-center justify-between gap-3 mb-3",children:[e?m.jsx("h2",{className:"text-xl font-semibold text-white",children:e}):m.jsx("span",{}),r]}),m.jsx("div",{className:"prose-markdown",children:m.jsx(Gp,{remarkPlugins:[Kp],rehypePlugins:[Zp],components:Qp,children:t})})]})}class Kj{diff(t,r,a={}){let s;typeof a=="function"?(s=a,a={}):"callback"in a&&(s=a.callback);const o=this.castInput(t,a),c=this.castInput(r,a),d=this.removeEmpty(this.tokenize(o,a)),f=this.removeEmpty(this.tokenize(c,a));return this.diffWithOptionsObj(d,f,a,s)}diffWithOptionsObj(t,r,a,s){var o;const c=k=>{if(k=this.postProcess(k,a),s){setTimeout(function(){s(k)},0);return}else return k},d=r.length,f=t.length;let h=1,p=d+f;a.maxEditLength!=null&&(p=Math.min(p,a.maxEditLength));const g=(o=a.timeout)!==null&&o!==void 0?o:1/0,y=Date.now()+g,b=[{oldPos:-1,lastComponent:void 0}];let _=this.extractCommon(b[0],r,t,0,a);if(b[0].oldPos+1>=f&&_+1>=d)return c(this.buildValues(b[0].lastComponent,r,t));let E=-1/0,S=1/0;const w=()=>{for(let k=Math.max(E,-h);k<=Math.min(S,h);k+=2){let N;const M=b[k-1],B=b[k+1];M&&(b[k-1]=void 0);let R=!1;if(B){const I=B.oldPos-k;R=B&&0<=I&&I=f&&_+1>=d)return c(this.buildValues(N.lastComponent,r,t))||!0;b[k]=N,N.oldPos+1>=f&&(S=Math.min(S,k-1)),_+1>=d&&(E=Math.max(E,k+1))}h++};if(s)(function k(){setTimeout(function(){if(h>p||Date.now()>y)return s(void 0);w()||k()},0)})();else for(;h<=p&&Date.now()<=y;){const k=w();if(k)return k}}addToPath(t,r,a,s,o){const c=t.lastComponent;return c&&!o.oneChangePerToken&&c.added===r&&c.removed===a?{oldPos:t.oldPos+s,lastComponent:{count:c.count+1,added:r,removed:a,previousComponent:c.previousComponent}}:{oldPos:t.oldPos+s,lastComponent:{count:1,added:r,removed:a,previousComponent:c}}}extractCommon(t,r,a,s,o){const c=r.length,d=a.length;let f=t.oldPos,h=f-s,p=0;for(;h+1y.length?_:y}),p.value=this.join(g)}else p.value=this.join(r.slice(f,f+p.count));f+=p.count,p.added||(h+=p.count)}}return s}}class Zj extends Kj{constructor(){super(...arguments),this.tokenize=Jj}equals(t,r,a){return a.ignoreWhitespace?((!a.newlineIsToken||!t.includes(` +`))&&(t=t.trim()),(!a.newlineIsToken||!r.includes(` +`))&&(r=r.trim())):a.ignoreNewlineAtEof&&!a.newlineIsToken&&(t.endsWith(` +`)&&(t=t.slice(0,-1)),r.endsWith(` +`)&&(r=r.slice(0,-1))),super.equals(t,r,a)}}const Qj=new Zj;function Wj(e,t,r){return Qj.diff(e,t,r)}function Jj(e,t){t.stripTrailingCr&&(e=e.replace(/\r\n/g,` +`));const r=[],a=e.split(/(\n|\r\n)/);a[a.length-1]||a.pop();for(let s=0;sE.value.replace(/\n$/,"").split(` +`).map(S=>{const w=S===""?` +`:h!=="text"?eD(S,h):S.replace(/&/g,"&").replace(//g,">");let k="",N="";return E.removed?k=String(g++):(E.added||(k=String(g++)),N=String(y++)),{highlighted:w,added:!!E.added,removed:!!E.removed,leftNo:k,rightNo:N}})),_=()=>{Cp(s),d(!0),setTimeout(()=>d(!1),2e3),o==null||o()};return m.jsxs("div",{className:"rounded-md border border-[#2a2a2a] overflow-hidden",children:[m.jsxs("div",{className:"flex items-stretch",children:[m.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,":",f,m.jsx("span",{className:"absolute top-0 inset-x-0 h-0.5 bg-white/60 rounded-full"})]}),m.jsx("div",{className:"flex-1 border-b border-[#2a2a2a]"}),m.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?m.jsx(Vs,{className:"w-3.5 h-3.5 text-emerald-400"}):m.jsx(go,{className:"w-3.5 h-3.5"})})]}),m.jsx("div",{className:"overflow-auto max-h-[400px]",children:m.jsx("table",{className:"w-full border-collapse font-mono text-[12px] leading-[22px] [font-variant-ligatures:none]",children:m.jsx("tbody",{children:b.map((E,S)=>m.jsxs("tr",{className:E.added?"bg-blue-500/[0.12]":E.removed?"bg-red-500/[0.12]":"",children:[m.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:E.leftNo}),m.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:E.rightNo}),m.jsx("td",{className:"pl-4 pr-4 whitespace-pre",dangerouslySetInnerHTML:{__html:E.highlighted}})]},S))})})})]})}const nD=/^```([^\n`]*)\r?\n([\s\S]*?)\r?\n?```$/;function yE(e){if(!e)return{code:""};const t=nD.exec(e.trim());if(!t)return{code:e};const r=t[1].trim();return{language:(r?r.split(/\s+/)[0]:void 0)||void 0,code:t[2]}}function rD({description:e,scriptCode:t,onCopy:r}){const[a,s]=ee.useState(!1);if(!e&&!t)return null;const{language:o,code:c}=yE(t),d=xE(c,o),f=()=>{c&&(Cp(c),s(!0),setTimeout(()=>s(!1),2e3),r==null||r())};return m.jsxs("section",{children:[m.jsx("h2",{className:"text-xl font-semibold text-white mb-3",children:"Proof of Concept"}),m.jsxs("div",{className:"space-y-4",children:[e&&m.jsx("div",{className:"prose-markdown",children:m.jsx(Gp,{remarkPlugins:[Kp],rehypePlugins:[Zp],components:Qp,children:e})}),c&&m.jsxs("div",{className:"group/poc relative rounded-md border border-[#2a2a2a] overflow-hidden",children:[m.jsxs("div",{className:"flex items-stretch",children:[m.jsxs("span",{className:"relative flex items-center text-[13px] text-[#999] font-mono px-4 py-2 border-r border-[#2a2a2a]",children:["PoC Script",m.jsx("span",{className:"absolute top-0 inset-x-0 h-0.5 bg-white/60 rounded-full"})]}),m.jsx("div",{className:"flex-1 border-b border-[#2a2a2a]"}),m.jsx("button",{onClick:f,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?m.jsx(Vs,{className:"w-3.5 h-3.5 text-emerald-400"}):m.jsx(go,{className:"w-3.5 h-3.5"})})]}),m.jsx("div",{className:"overflow-auto max-h-[400px] px-4 py-3",children:m.jsx("pre",{className:"font-mono text-[12px] leading-[22px] whitespace-pre [font-variant-ligatures:none]",children:m.jsx("code",{dangerouslySetInnerHTML:{__html:d}})})})]})]})]})}function vE(e){const t=e.match(/(?:https?:\/\/)?(?:www\.)?github\.com\/([^\s/]+\/[^\s/]+)/);if(t){const s=t[1].replace(/\.git$/,"");return{display:s,href:`https://github.com/${s}`,provider:"github"}}const r=e.match(/(?:https?:\/\/)?(?:www\.)?gitlab\.com\/([^\s/]+\/[^\s/]+)/);if(r){const s=r[1].replace(/\.git$/,"");return{display:s,href:`https://gitlab.com/${s}`,provider:"gitlab"}}const a=e.match(/(?:https?:\/\/)?(?:www\.)?bitbucket\.org\/([^\s/]+\/[^\s/]+)/);if(a){const s=a[1].replace(/\.git$/,"");return{display:s,href:`https://bitbucket.org/${s}`,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 yo(e,t){return e?vE(e).display.replace(/\/$/,""):t||"Untitled pentest"}function iD({className:e}){return m.jsx("svg",{viewBox:"0 0 24 24",fill:"currentColor",className:e,"aria-hidden":"true",children:m.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 aD({provider:e,className:t}){const r=t??"w-4 h-4";return e==="gitlab"?m.jsx(UC,{className:`${r} text-orange-400`}):e==="bitbucket"?m.jsx(iD,{className:`${r} text-blue-400`}):m.jsx(IC,{className:`${r} text-white`})}const sD={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"}},lD={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"}},oD={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]"},cD=[{label:"Exploitability",keys:["attack_vector","attack_complexity","privileges_required","user_interaction"]},{label:"Impact",keys:["scope","confidentiality","integrity","availability"]}];function uD(e,t,r,a,s){const o=e.replace(/\.git$/,"").replace(/\/+$/,""),c=a.split("/").map(encodeURIComponent).join("/"),d=r.split("/").map(encodeURIComponent).join("/");return t==="github"?`${o}/blob/${d}/${c}#L${s}`:t==="gitlab"?`${o}/-/blob/${d}/${c}#L${s}`:null}function dD({vulnerability:e,statusSlot:t,slackThreadUrl:r}){var R;const{severity:a,cvss:s,cve:o,cwe:c,fix_effort:d,created_at:f,target:h,endpoint:p,method:g,code_locations:y,cvss_breakdown:b,location_meta:_}=e,[E,S]=ee.useState(!0),w=y==null?void 0:y.filter(U=>U.fix_before&&U.fix_after),k=w&&w.length>0,N=h?vE(h):null,M=!!(h||p||g||k),B=b&&Object.values(b).some(U=>U!=null);return m.jsxs("aside",{className:"lg:sticky lg:top-6 lg:max-h-[calc(100vh-3rem)] lg:overflow-y-auto",children:[m.jsx("div",{className:"pb-4",children:m.jsxs("div",{className:"space-y-3",children:[m.jsxs("div",{className:"flex items-center justify-between",children:[m.jsx("span",{className:"text-xs text-[#aaa]",children:"Severity"}),m.jsxs("div",{className:"flex items-center gap-1.5",children:[m.jsx("div",{className:`w-2 h-2 rounded-full ${kp(a)}`,"aria-hidden":"true"}),m.jsx("span",{className:"text-sm font-medium capitalize text-white",children:a})]})]}),m.jsxs("div",{className:"flex items-center justify-between",children:[m.jsx("span",{className:"text-xs text-[#aaa]",children:"CVSS Score"}),m.jsx("span",{className:"text-sm font-semibold tabular-nums text-white",children:s!==null?s:"N/A"})]}),o&&m.jsxs("div",{className:"flex items-center justify-between",children:[m.jsx("span",{className:"text-xs text-[#aaa]",children:"CVE"}),m.jsx("span",{className:"text-sm text-white font-mono",children:o})]}),c&&c.length>0&&m.jsxs("div",{className:"flex items-center justify-between",children:[m.jsx("span",{className:"text-xs text-[#aaa]",children:"CWE"}),m.jsx("span",{className:"text-xs text-white font-mono truncate max-w-[80%] text-right",title:c.join(" · "),children:c.join(" · ")})]}),d&&m.jsxs("div",{className:"flex items-center justify-between",children:[m.jsx("span",{className:"text-xs text-[#aaa]",children:"Fix Effort"}),m.jsx("span",{className:`inline-flex items-center px-2 py-0.5 text-[11px] font-medium rounded-full border ${((R=BT[d])==null?void 0:R.color)??"text-[#666]"}`,children:d.charAt(0).toUpperCase()+d.slice(1)})]}),m.jsxs("div",{className:"flex items-center justify-between",children:[m.jsx("span",{className:"text-xs text-[#aaa]",children:"Discovered"}),m.jsxs("div",{className:"flex items-center gap-1.5",children:[m.jsx(P_,{className:"w-3 h-3 text-[#444]","aria-hidden":"true"}),m.jsx("span",{className:"text-sm text-white",children:Ym(f)})]})]}),m.jsxs("div",{className:"flex items-center justify-between",children:[m.jsx("span",{className:"text-xs text-[#aaa]",children:"Status"}),t]})]})}),M&&m.jsxs("div",{className:"border-t border-[#191919] pt-4 pb-4",children:[m.jsx("p",{className:"text-xs font-medium text-[#aaa] mb-2.5",children:"Asset"}),m.jsxs("div",{className:"space-y-2.5",children:[h&&N&&m.jsxs("div",{className:"flex items-center gap-1.5",children:[N.provider?m.jsx("span",{className:"flex-shrink-0 [&_svg]:w-3.5 [&_svg]:h-3.5","aria-hidden":"true",children:m.jsx(aD,{provider:N.provider})}):m.jsx(G_,{className:"w-3.5 h-3.5 text-[#555] flex-shrink-0","aria-hidden":"true"}),N.href?m.jsx("a",{href:N.href,target:"_blank",rel:"noopener noreferrer",className:"text-sm text-white hover:text-[#ccc] break-words min-w-0 transition-colors",children:N.display}):m.jsx("span",{className:"text-sm text-white break-words min-w-0",children:N.display})]}),p&&m.jsxs("div",{className:"flex items-center justify-between",children:[m.jsx("span",{className:"text-xs text-[#aaa]",children:"Endpoint"}),m.jsx("span",{className:"text-xs text-white font-mono truncate max-w-[75%] text-right",children:p})]}),g&&m.jsxs("div",{className:"flex items-center justify-between",children:[m.jsx("span",{className:"text-xs text-[#aaa]",children:"Method"}),m.jsx("span",{className:"text-xs text-white font-mono",children:g})]}),k&&m.jsxs("div",{children:[m.jsx("span",{className:"text-xs text-[#aaa] mb-1.5 block",children:"Locations"}),m.jsx("div",{className:"space-y-0.5",children:w.map((U,I)=>{const X=`${U.file}:${U.start_line}`,j=_?uD(_.repo_url,_.provider,_.branch,U.file,U.start_line):null;return j?m.jsx("a",{href:j,target:"_blank",rel:"noopener noreferrer",className:"text-[13px] text-[#888] hover:text-white font-mono break-all transition-colors block",children:X},`loc-${I}`):m.jsx("span",{className:"text-[13px] text-[#888] font-mono break-all block",children:X},`loc-${I}`)})})]})]})]}),B&&m.jsxs("div",{className:"border-t border-[#191919] pt-4",children:[m.jsxs("button",{onClick:()=>S(!E),className:"flex items-center justify-between w-full mb-2.5 group","aria-expanded":E,children:[m.jsx("span",{className:"text-xs font-medium text-[#aaa]",children:"Risk Assessment"}),m.jsx(po,{className:`w-3.5 h-3.5 text-[#555] group-hover:text-white transition-transform ${E?"":"-rotate-90"}`,"aria-hidden":"true"})]}),m.jsx("div",{className:`space-y-3 ${E?"":"hidden"}`,children:cD.map(U=>{const I=U.keys.filter(X=>b[X]!=null);return I.length===0?null:m.jsxs("div",{children:[m.jsxs("div",{className:"flex items-center justify-between mb-1.5",children:[m.jsx("p",{className:"text-[10px] uppercase tracking-wider text-[#444] font-medium",children:U.label}),m.jsx("p",{className:"text-[10px] uppercase tracking-wider text-[#444] font-medium mr-2",children:"Risk"})]}),m.jsx("div",{className:"space-y-1",children:I.map(X=>{var P,T;const j=b[X],z=j?((P=lD[X])==null?void 0:P[j])??"low":"low",V=j?((T=sD[X])==null?void 0:T[j])??j:"N/A";return m.jsxs("div",{className:"flex items-center justify-between py-0.5",children:[m.jsx("span",{className:"text-[12px] text-[#aaa]",children:V}),m.jsx("span",{className:`text-[10px] font-medium px-1.5 py-0.5 rounded border ${oD[z]}`,children:z})]},X)})})]},U.label)})})]})]})}function qv(e){return e?Math.floor((Date.now()-new Date(e).getTime())/1e3)<604800?` ${Ym(e)}`:` on ${Ym(e)}`:""}const fD={open:null,in_progress:{icon:P_,label:"Marked as In Progress",iconColor:"text-blue-400"},snoozed:{icon:Zk,label:"Snoozed",iconColor:"text-purple-400"},fixed:{icon:Eu,label:"Marked as Fixed",iconColor:"text-emerald-400"},ignored:{icon:I_,label:"Marked as Ignored",iconColor:"text-[#888]"}},hD=[{label:"Auto-fix & open a PR",slug:"autofix",icon:Gm,requiresCode:!0},{label:"Sync to Jira / Linear",slug:"integrations",icon:jC}];function mD({vulnerability:e}){const t=IT[e.status],r=e.code_locations&&e.code_locations.length>0,a=r||e.remediation_steps,s=!!(e.evidence||e.assumptions||e.poc_description||e.poc_script_code),[o,c]=ee.useState("fix"),f=[{id:"fix",label:"Fix",show:!!a},{id:"reproduction",label:"Reproduction",show:s}].filter(h=>h.show);return m.jsxs("div",{className:"space-y-6",children:[m.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-4",children:[m.jsxs("div",{className:"min-w-0 flex-1",children:[m.jsxs("div",{className:"mb-2",children:[e.display_number&&m.jsx("span",{className:"text-xs font-mono text-[#555] block mb-1",children:zA(e.display_number)}),m.jsx("h1",{className:"text-2xl font-semibold text-white",children:e.title})]}),m.jsxs("div",{className:"flex flex-wrap items-center gap-3",children:[m.jsx("span",{className:`inline-flex items-center gap-1.5 px-3 py-1 text-sm font-medium rounded-full border ${t.color}`,children:t.label}),m.jsxs("div",{className:`inline-flex items-center gap-1.5 px-3 py-1 text-sm font-semibold rounded-full border ${Z_[e.severity]}`,title:Wc(e)?`Adjusted from ${e.original_severity}`:void 0,children:[m.jsx("div",{className:`w-2 h-2 rounded-full ${kp(e.severity)}`}),m.jsxs("span",{className:"capitalize",children:[e.severity,!Wc(e)&&e.cvss?` ${e.cvss}`:""]}),Wc(e)&&m.jsx(Ys,{className:"w-3 h-3 opacity-70","aria-hidden":"true"})]}),e.cve&&m.jsxs(m.Fragment,{children:[m.jsx("span",{className:"text-[#333]",children:"·"}),m.jsx("span",{className:"text-sm text-[#666] font-mono",children:e.cve})]})]})]}),m.jsx("div",{className:"flex flex-shrink-0 flex-wrap items-center gap-2",children:hD.filter(h=>!h.requiresCode||r).map(h=>{const p=h.icon;return m.jsxs("a",{href:ha(Yu,h.slug),target:"_blank",rel:"noopener noreferrer",onClick:()=>jr(h.slug,"finding_detail"),className:"inline-flex items-center gap-1.5 rounded-lg bg-white px-3 py-1.5 text-xs font-semibold text-black transition-opacity hover:opacity-90",children:[m.jsx(p,{className:"h-3.5 w-3.5","aria-hidden":"true"}),h.label]},h.slug)})})]}),e.status!=="open"&&(()=>{const h=fD[e.status];if(!h)return null;const p=h.icon;return m.jsxs("div",{className:"rounded-lg px-4 py-3.5 flex gap-3",style:{border:"1px solid rgba(255,255,255,0.08)"},children:[m.jsx(p,{className:`w-5 h-5 flex-shrink-0 mt-0.5 ${h.iconColor}`,"aria-hidden":"true"}),m.jsxs("div",{className:"min-w-0",children:[m.jsxs("p",{className:"text-sm font-semibold text-white",children:[h.label,qv(e.status_changed_at)]}),e.status_note&&m.jsxs("p",{className:"text-sm text-[#666] italic mt-1",children:["“",e.status_note,"”"]})]})]})})(),Wc(e)&&m.jsxs("div",{className:"rounded-lg px-4 py-3.5 flex gap-3",style:{border:"1px solid rgba(255,255,255,0.08)"},children:[m.jsx(Ys,{className:"w-5 h-5 flex-shrink-0 mt-0.5 text-orange-400","aria-hidden":"true"}),m.jsxs("div",{className:"min-w-0",children:[m.jsxs("p",{className:"text-sm font-semibold text-white",children:["Severity changed manually from"," ",m.jsx("span",{className:"capitalize",children:e.original_severity}),e.cvss!=null?` (${e.cvss})`:""," to"," ",m.jsx("span",{className:"capitalize",children:e.severity}),qv(e.severity_changed_at)]}),e.severity_override_reason&&m.jsxs("p",{className:"text-sm text-[#666] italic mt-1",children:["“",e.severity_override_reason,"”"]})]})]}),m.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-[1fr_340px] gap-8",children:[m.jsxs("div",{className:"min-w-0",children:[m.jsxs("div",{className:"space-y-8",children:[m.jsx(oa,{title:"TL;DR",content:e.description}),e.impact&&m.jsx(oa,{title:"Impact",content:e.impact}),e.technical_analysis&&m.jsx(oa,{title:"Technical Details",content:e.technical_analysis})]}),f.length>0&&m.jsxs("div",{className:"mt-10",children:[m.jsx("div",{className:"border-b border-[#2a2a2a]",children:m.jsx("nav",{className:"flex gap-6","aria-label":"Tabs",children:f.map(h=>m.jsxs("button",{onClick:()=>c(h.id),className:`relative min-w-[80px] text-center pb-3 text-[16px] font-semibold transition-colors ${o===h.id?"text-white":"text-[#666] hover:text-white"}`,"aria-current":o===h.id?"page":void 0,children:[h.label,o===h.id&&m.jsx("span",{className:"absolute bottom-0 inset-x-0 h-0.5 bg-white rounded-full"})]},h.id))})}),a&&m.jsxs("div",{className:`pt-6 space-y-6 ${o==="fix"?"animate-tab-in":"hidden"}`,children:[e.remediation_steps&&m.jsx(oa,{title:"How do I fix it?",content:e.remediation_steps}),r&&e.code_locations.filter(h=>h.fix_before&&h.fix_after).map((h,p)=>m.jsx(tD,{file:h.file,startLine:h.start_line,endLine:h.end_line,before:h.fix_before,after:h.fix_after},`fix-${p}`))]}),s&&m.jsxs("div",{className:`pt-6 space-y-8 ${o==="reproduction"?"animate-tab-in":"hidden"}`,children:[e.assumptions&&m.jsx(oa,{title:"Assumptions",content:e.assumptions}),e.evidence&&m.jsx(oa,{title:"Evidence",content:e.evidence}),m.jsx(rD,{description:e.poc_description,scriptCode:e.poc_script_code})]})]})]}),m.jsx("div",{className:"lg:border-l lg:border-[#2a2a2a] lg:pl-6",children:m.jsx(dD,{vulnerability:e,statusSlot:m.jsxs("span",{className:`inline-flex items-center gap-1.5 px-2.5 py-1 text-xs font-medium rounded-full border ${t.color}`,children:[m.jsx("div",{className:`w-1.5 h-1.5 rounded-full ${t.dotColor}`}),t.label]})})})]})]})}const Pv=[{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 pD({findings:e,className:t,unit:r="issues",trailing:a}){return e.total<=0?null:m.jsxs("div",{className:Mr("space-y-3",t),children:[m.jsxs("div",{className:"flex flex-wrap items-center gap-x-8 gap-y-3",children:[m.jsxs("div",{className:"flex items-center gap-2",children:[m.jsx("span",{className:"text-2xl font-semibold text-white tabular-nums",children:e.total}),m.jsx("span",{className:"text-sm text-[#666]",children:r})]}),m.jsx("div",{className:"flex flex-wrap items-center gap-x-6 gap-y-2",children:Pv.map(({key:s,label:o,dotClass:c,textClass:d})=>{const f=e[s];return f<=0?null:m.jsxs("div",{className:"flex items-center gap-1.5",children:[m.jsx("div",{className:Mr("w-2 h-2 rounded-full",c),"aria-hidden":"true"}),m.jsx("span",{className:Mr("text-sm tabular-nums",d),children:f}),m.jsx("span",{className:"text-xs text-[#555]",children:o})]},s)})}),a?m.jsx("div",{className:"flex items-center gap-2",children:a}):null]}),m.jsx("div",{className:"h-1.5 rounded-full bg-[#222] overflow-hidden flex",children:Pv.map(({key:s,dotClass:o})=>{const c=e[s];return c<=0?null:m.jsx("div",{className:Mr("h-full",o),style:{width:`${c/e.total*100}%`}},s)})})]})}function on(e){if(typeof e=="string"||typeof e=="number")return""+e;let t="";if(Array.isArray(e))for(let r=0,a;r{}};function Ju(){for(var e=0,t=arguments.length,r={},a;e=0&&(a=r.slice(s+1),r=r.slice(0,s)),r&&!t.hasOwnProperty(r))throw new Error("unknown type: "+r);return{type:r,name:a}})}bu.prototype=Ju.prototype={constructor:bu,on:function(e,t){var r=this._,a=xD(e+"",r),s,o=-1,c=a.length;if(arguments.length<2){for(;++o0)for(var r=new Array(s),a=0,s,o;a=0&&(t=e.slice(0,r))!=="xmlns"&&(e=e.slice(r+1)),Gv.hasOwnProperty(t)?{space:Gv[t],local:e}:e}function yD(e){return function(){var t=this.ownerDocument,r=this.namespaceURI;return r===ap&&t.documentElement.namespaceURI===ap?t.createElement(e):t.createElementNS(r,e)}}function vD(e){return function(){return this.ownerDocument.createElementNS(e.space,e.local)}}function _E(e){var t=ed(e);return(t.local?vD:yD)(t)}function _D(){}function Wp(e){return e==null?_D:function(){return this.querySelector(e)}}function wD(e){typeof e!="function"&&(e=Wp(e));for(var t=this._groups,r=t.length,a=new Array(r),s=0;s=N&&(N=k+1);!(B=S[N])&&++N<_;);M._next=B||null}}return c=new sr(c,a),c._enter=d,c._exit=f,c}function qD(e){return typeof e=="object"&&"length"in e?e:Array.from(e)}function PD(){return new sr(this._exit||this._groups.map(SE),this._parents)}function FD(e,t,r){var a=this.enter(),s=this,o=this.exit();return typeof e=="function"?(a=e(a),a&&(a=a.selection())):a=a.append(e+""),t!=null&&(s=t(s),s&&(s=s.selection())),r==null?o.remove():r(o),a&&s?a.merge(s).order():s}function GD(e){for(var t=e.selection?e.selection():e,r=this._groups,a=t._groups,s=r.length,o=a.length,c=Math.min(s,o),d=new Array(s),f=0;f=0;)(c=a[s])&&(o&&c.compareDocumentPosition(o)^4&&o.parentNode.insertBefore(c,o),o=c);return this}function YD(e){e||(e=XD);function t(g,y){return g&&y?e(g.__data__,y.__data__):!g-!y}for(var r=this._groups,a=r.length,s=new Array(a),o=0;ot?1:e>=t?0:NaN}function KD(){var e=arguments[0];return arguments[0]=this,e.apply(null,arguments),this}function ZD(){return Array.from(this)}function QD(){for(var e=this._groups,t=0,r=e.length;t1?this.each((t==null?oL:typeof t=="function"?uL:cL)(e,t,r??"")):Ks(this.node(),e)}function Ks(e,t){return e.style.getPropertyValue(t)||kE(e).getComputedStyle(e,null).getPropertyValue(t)}function fL(e){return function(){delete this[e]}}function hL(e,t){return function(){this[e]=t}}function mL(e,t){return function(){var r=t.apply(this,arguments);r==null?delete this[e]:this[e]=r}}function pL(e,t){return arguments.length>1?this.each((t==null?fL:typeof t=="function"?mL:hL)(e,t)):this.node()[e]}function CE(e){return e.trim().split(/^|\s+/)}function Jp(e){return e.classList||new TE(e)}function TE(e){this._node=e,this._names=CE(e.getAttribute("class")||"")}TE.prototype={add:function(e){var t=this._names.indexOf(e);t<0&&(this._names.push(e),this._node.setAttribute("class",this._names.join(" ")))},remove:function(e){var t=this._names.indexOf(e);t>=0&&(this._names.splice(t,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(e){return this._names.indexOf(e)>=0}};function AE(e,t){for(var r=Jp(e),a=-1,s=t.length;++a=0&&(r=t.slice(a+1),t=t.slice(0,a)),{type:t,name:r}})}function PL(e){return function(){var t=this.__on;if(t){for(var r=0,a=-1,s=t.length,o;r()=>e;function sp(e,{sourceEvent:t,subject:r,target:a,identifier:s,active:o,x:c,y:d,dx:f,dy:h,dispatch:p}){Object.defineProperties(this,{type:{value:e,enumerable:!0,configurable:!0},sourceEvent:{value:t,enumerable:!0,configurable:!0},subject:{value:r,enumerable:!0,configurable:!0},target:{value:a,enumerable:!0,configurable:!0},identifier:{value:s,enumerable:!0,configurable:!0},active:{value:o,enumerable:!0,configurable:!0},x:{value:c,enumerable:!0,configurable:!0},y:{value:d,enumerable:!0,configurable:!0},dx:{value:f,enumerable:!0,configurable:!0},dy:{value:h,enumerable:!0,configurable:!0},_:{value:p}})}sp.prototype.on=function(){var e=this._.on.apply(this._,arguments);return e===this._?this:e};function JL(e){return!e.ctrlKey&&!e.button}function e6(){return this.parentNode}function t6(e,t){return t??{x:e.x,y:e.y}}function n6(){return navigator.maxTouchPoints||"ontouchstart"in this}function LE(){var e=JL,t=e6,r=t6,a=n6,s={},o=Ju("start","drag","end"),c=0,d,f,h,p,g=0;function y(M){M.on("mousedown.drag",b).filter(a).on("touchstart.drag",S).on("touchmove.drag",w,WL).on("touchend.drag touchcancel.drag",k).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function b(M,B){if(!(p||!e.call(this,M,B))){var R=N(this,t.call(this,M,B),M,B,"mouse");R&&(ir(M.view).on("mousemove.drag",_,vo).on("mouseup.drag",E,vo),jE(M.view),wm(M),h=!1,d=M.clientX,f=M.clientY,R("start",M))}}function _(M){if(Fs(M),!h){var B=M.clientX-d,R=M.clientY-f;h=B*B+R*R>g}s.mouse("drag",M)}function E(M){ir(M.view).on("mousemove.drag mouseup.drag",null),DE(M.view,h),Fs(M),s.mouse("end",M)}function S(M,B){if(e.call(this,M,B)){var R=M.changedTouches,U=t.call(this,M,B),I=R.length,X,j;for(X=0;X>8&15|t>>4&240,t>>4&15|t&240,(t&15)<<4|t&15,1):r===8?su(t>>24&255,t>>16&255,t>>8&255,(t&255)/255):r===4?su(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|t&240,((t&15)<<4|t&15)/255):null):(t=i6.exec(e))?new Gn(t[1],t[2],t[3],1):(t=a6.exec(e))?new Gn(t[1]*255/100,t[2]*255/100,t[3]*255/100,1):(t=s6.exec(e))?su(t[1],t[2],t[3],t[4]):(t=l6.exec(e))?su(t[1]*255/100,t[2]*255/100,t[3]*255/100,t[4]):(t=o6.exec(e))?Wv(t[1],t[2]/100,t[3]/100,1):(t=c6.exec(e))?Wv(t[1],t[2]/100,t[3]/100,t[4]):Vv.hasOwnProperty(e)?Kv(Vv[e]):e==="transparent"?new Gn(NaN,NaN,NaN,0):null}function Kv(e){return new Gn(e>>16&255,e>>8&255,e&255,1)}function su(e,t,r,a){return a<=0&&(e=t=r=NaN),new Gn(e,t,r,a)}function f6(e){return e instanceof zo||(e=Ya(e)),e?(e=e.rgb(),new Gn(e.r,e.g,e.b,e.opacity)):new Gn}function lp(e,t,r,a){return arguments.length===1?f6(e):new Gn(e,t,r,a??1)}function Gn(e,t,r,a){this.r=+e,this.g=+t,this.b=+r,this.opacity=+a}eg(Gn,lp,zE(zo,{brighter(e){return e=e==null?Ou:Math.pow(Ou,e),new Gn(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){return e=e==null?_o:Math.pow(_o,e),new Gn(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new Gn(Pa(this.r),Pa(this.g),Pa(this.b),Ru(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:Zv,formatHex:Zv,formatHex8:h6,formatRgb:Qv,toString:Qv}));function Zv(){return`#${$a(this.r)}${$a(this.g)}${$a(this.b)}`}function h6(){return`#${$a(this.r)}${$a(this.g)}${$a(this.b)}${$a((isNaN(this.opacity)?1:this.opacity)*255)}`}function Qv(){const e=Ru(this.opacity);return`${e===1?"rgb(":"rgba("}${Pa(this.r)}, ${Pa(this.g)}, ${Pa(this.b)}${e===1?")":`, ${e})`}`}function Ru(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function Pa(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function $a(e){return e=Pa(e),(e<16?"0":"")+e.toString(16)}function Wv(e,t,r,a){return a<=0?e=t=r=NaN:r<=0||r>=1?e=t=NaN:t<=0&&(e=NaN),new Ar(e,t,r,a)}function IE(e){if(e instanceof Ar)return new Ar(e.h,e.s,e.l,e.opacity);if(e instanceof zo||(e=Ya(e)),!e)return new Ar;if(e instanceof Ar)return e;e=e.rgb();var t=e.r/255,r=e.g/255,a=e.b/255,s=Math.min(t,r,a),o=Math.max(t,r,a),c=NaN,d=o-s,f=(o+s)/2;return d?(t===o?c=(r-a)/d+(r0&&f<1?0:c,new Ar(c,d,f,e.opacity)}function m6(e,t,r,a){return arguments.length===1?IE(e):new Ar(e,t,r,a??1)}function Ar(e,t,r,a){this.h=+e,this.s=+t,this.l=+r,this.opacity=+a}eg(Ar,m6,zE(zo,{brighter(e){return e=e==null?Ou:Math.pow(Ou,e),new Ar(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=e==null?_o:Math.pow(_o,e),new Ar(this.h,this.s,this.l*e,this.opacity)},rgb(){var e=this.h%360+(this.h<0)*360,t=isNaN(e)||isNaN(this.s)?0:this.s,r=this.l,a=r+(r<.5?r:1-r)*t,s=2*r-a;return new Gn(Em(e>=240?e-240:e+120,s,a),Em(e,s,a),Em(e<120?e+240:e-120,s,a),this.opacity)},clamp(){return new Ar(Jv(this.h),lu(this.s),lu(this.l),Ru(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=Ru(this.opacity);return`${e===1?"hsl(":"hsla("}${Jv(this.h)}, ${lu(this.s)*100}%, ${lu(this.l)*100}%${e===1?")":`, ${e})`}`}}));function Jv(e){return e=(e||0)%360,e<0?e+360:e}function lu(e){return Math.max(0,Math.min(1,e||0))}function Em(e,t,r){return(e<60?t+(r-t)*e/60:e<180?r:e<240?t+(r-t)*(240-e)/60:t)*255}const tg=e=>()=>e;function p6(e,t){return function(r){return e+r*t}}function g6(e,t,r){return e=Math.pow(e,r),t=Math.pow(t,r)-e,r=1/r,function(a){return Math.pow(e+a*t,r)}}function x6(e){return(e=+e)==1?BE:function(t,r){return r-t?g6(t,r,e):tg(isNaN(t)?r:t)}}function BE(e,t){var r=t-e;return r?p6(e,r):tg(isNaN(e)?t:e)}const ju=(function e(t){var r=x6(t);function a(s,o){var c=r((s=lp(s)).r,(o=lp(o)).r),d=r(s.g,o.g),f=r(s.b,o.b),h=BE(s.opacity,o.opacity);return function(p){return s.r=c(p),s.g=d(p),s.b=f(p),s.opacity=h(p),s+""}}return a.gamma=e,a})(1);function b6(e,t){t||(t=[]);var r=e?Math.min(t.length,e.length):0,a=t.slice(),s;return function(o){for(s=0;sr&&(o=t.slice(r,o),d[c]?d[c]+=o:d[++c]=o),(a=a[0])===(s=s[0])?d[c]?d[c]+=s:d[++c]=s:(d[++c]=null,f.push({i:c,x:Vr(a,s)})),r=Nm.lastIndex;return r180?p+=360:p-h>180&&(h+=360),y.push({i:g.push(s(g)+"rotate(",null,a)-2,x:Vr(h,p)})):p&&g.push(s(g)+"rotate("+p+a)}function d(h,p,g,y){h!==p?y.push({i:g.push(s(g)+"skewX(",null,a)-2,x:Vr(h,p)}):p&&g.push(s(g)+"skewX("+p+a)}function f(h,p,g,y,b,_){if(h!==g||p!==y){var E=b.push(s(b)+"scale(",null,",",null,")");_.push({i:E-4,x:Vr(h,g)},{i:E-2,x:Vr(p,y)})}else(g!==1||y!==1)&&b.push(s(b)+"scale("+g+","+y+")")}return function(h,p){var g=[],y=[];return h=e(h),p=e(p),o(h.translateX,h.translateY,p.translateX,p.translateY,g,y),c(h.rotate,p.rotate,g,y),d(h.skewX,p.skewX,g,y),f(h.scaleX,h.scaleY,p.scaleX,p.scaleY,g,y),h=p=null,function(b){for(var _=-1,E=y.length,S;++_=0&&e._call.call(void 0,t),e=e._next;--Zs}function n1(){Xa=(Lu=Eo.now())+td,Zs=so=0;try{j6()}finally{Zs=0,L6(),Xa=0}}function D6(){var e=Eo.now(),t=e-Lu;t>qE&&(td-=t,Lu=e)}function L6(){for(var e,t=Du,r,a=1/0;t;)t._call?(a>t._time&&(a=t._time),e=t,t=t._next):(r=t._next,t._next=null,t=e?e._next=r:Du=r);lo=e,up(a)}function up(e){if(!Zs){so&&(so=clearTimeout(so));var t=e-Xa;t>24?(e<1/0&&(so=setTimeout(n1,e-Eo.now()-td)),to&&(to=clearInterval(to))):(to||(Lu=Eo.now(),to=setInterval(D6,qE)),Zs=1,PE(n1))}}function r1(e,t,r){var a=new zu;return t=t==null?0:+t,a.restart(s=>{a.stop(),e(s+t)},t,r),a}var z6=Ju("start","end","cancel","interrupt"),I6=[],GE=0,i1=1,dp=2,vu=3,a1=4,fp=5,_u=6;function nd(e,t,r,a,s,o){var c=e.__transition;if(!c)e.__transition={};else if(r in c)return;B6(e,r,{name:t,index:a,group:s,on:z6,tween:I6,time:o.time,delay:o.delay,duration:o.duration,ease:o.ease,timer:null,state:GE})}function rg(e,t){var r=Ir(e,t);if(r.state>GE)throw new Error("too late; already scheduled");return r}function Zr(e,t){var r=Ir(e,t);if(r.state>vu)throw new Error("too late; already running");return r}function Ir(e,t){var r=e.__transition;if(!r||!(r=r[t]))throw new Error("transition not found");return r}function B6(e,t,r){var a=e.__transition,s;a[t]=r,r.timer=FE(o,0,r.time);function o(h){r.state=i1,r.timer.restart(c,r.delay,r.time),r.delay<=h&&c(h-r.delay)}function c(h){var p,g,y,b;if(r.state!==i1)return f();for(p in a)if(b=a[p],b.name===r.name){if(b.state===vu)return r1(c);b.state===a1?(b.state=_u,b.timer.stop(),b.on.call("interrupt",e,e.__data__,b.index,b.group),delete a[p]):+pdp&&a.state=0&&(t=t.slice(0,r)),!t||t==="start"})}function mz(e,t,r){var a,s,o=hz(t)?rg:Zr;return function(){var c=o(this,e),d=c.on;d!==a&&(s=(a=d).copy()).on(t,r),c.on=s}}function pz(e,t){var r=this._id;return arguments.length<2?Ir(this.node(),r).on.on(e):this.each(mz(r,e,t))}function gz(e){return function(){var t=this.parentNode;for(var r in this.__transition)if(+r!==e)return;t&&t.removeChild(this)}}function xz(){return this.on("end.remove",gz(this._id))}function bz(e){var t=this._name,r=this._id;typeof e!="function"&&(e=Wp(e));for(var a=this._groups,s=a.length,o=new Array(s),c=0;c()=>e;function Pz(e,{sourceEvent:t,target:r,transform:a,dispatch:s}){Object.defineProperties(this,{type:{value:e,enumerable:!0,configurable:!0},sourceEvent:{value:t,enumerable:!0,configurable:!0},target:{value:r,enumerable:!0,configurable:!0},transform:{value:a,enumerable:!0,configurable:!0},_:{value:s}})}function vi(e,t,r){this.k=e,this.x=t,this.y=r}vi.prototype={constructor:vi,scale:function(e){return e===1?this:new vi(this.k*e,this.x,this.y)},translate:function(e,t){return e===0&t===0?this:new vi(this.k,this.x+this.k*e,this.y+this.k*t)},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 rd=new vi(1,0,0);KE.prototype=vi.prototype;function KE(e){for(;!e.__zoom;)if(!(e=e.parentNode))return rd;return e.__zoom}function Sm(e){e.stopImmediatePropagation()}function no(e){e.preventDefault(),e.stopImmediatePropagation()}function Fz(e){return(!e.ctrlKey||e.type==="wheel")&&!e.button}function Gz(){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 s1(){return this.__zoom||rd}function Vz(e){return-e.deltaY*(e.deltaMode===1?.05:e.deltaMode?1:.002)*(e.ctrlKey?10:1)}function Yz(){return navigator.maxTouchPoints||"ontouchstart"in this}function Xz(e,t,r){var a=e.invertX(t[0][0])-r[0][0],s=e.invertX(t[1][0])-r[1][0],o=e.invertY(t[0][1])-r[0][1],c=e.invertY(t[1][1])-r[1][1];return e.translate(s>a?(a+s)/2:Math.min(0,a)||Math.max(0,s),c>o?(o+c)/2:Math.min(0,o)||Math.max(0,c))}function ZE(){var e=Fz,t=Gz,r=Xz,a=Vz,s=Yz,o=[0,1/0],c=[[-1/0,-1/0],[1/0,1/0]],d=250,f=yu,h=Ju("start","zoom","end"),p,g,y,b=500,_=150,E=0,S=10;function w(T){T.property("__zoom",s1).on("wheel.zoom",I,{passive:!1}).on("mousedown.zoom",X).on("dblclick.zoom",j).filter(s).on("touchstart.zoom",z).on("touchmove.zoom",V).on("touchend.zoom touchcancel.zoom",P).style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}w.transform=function(T,$,O,H){var K=T.selection?T.selection():T;K.property("__zoom",s1),T!==K?B(T,$,O,H):K.interrupt().each(function(){R(this,arguments).event(H).start().zoom(null,typeof $=="function"?$.apply(this,arguments):$).end()})},w.scaleBy=function(T,$,O,H){w.scaleTo(T,function(){var K=this.__zoom.k,Z=typeof $=="function"?$.apply(this,arguments):$;return K*Z},O,H)},w.scaleTo=function(T,$,O,H){w.transform(T,function(){var K=t.apply(this,arguments),Z=this.__zoom,C=O==null?M(K):typeof O=="function"?O.apply(this,arguments):O,D=Z.invert(C),Y=typeof $=="function"?$.apply(this,arguments):$;return r(N(k(Z,Y),C,D),K,c)},O,H)},w.translateBy=function(T,$,O,H){w.transform(T,function(){return r(this.__zoom.translate(typeof $=="function"?$.apply(this,arguments):$,typeof O=="function"?O.apply(this,arguments):O),t.apply(this,arguments),c)},null,H)},w.translateTo=function(T,$,O,H,K){w.transform(T,function(){var Z=t.apply(this,arguments),C=this.__zoom,D=H==null?M(Z):typeof H=="function"?H.apply(this,arguments):H;return r(rd.translate(D[0],D[1]).scale(C.k).translate(typeof $=="function"?-$.apply(this,arguments):-$,typeof O=="function"?-O.apply(this,arguments):-O),Z,c)},H,K)};function k(T,$){return $=Math.max(o[0],Math.min(o[1],$)),$===T.k?T:new vi($,T.x,T.y)}function N(T,$,O){var H=$[0]-O[0]*T.k,K=$[1]-O[1]*T.k;return H===T.x&&K===T.y?T:new vi(T.k,H,K)}function M(T){return[(+T[0][0]+ +T[1][0])/2,(+T[0][1]+ +T[1][1])/2]}function B(T,$,O,H){T.on("start.zoom",function(){R(this,arguments).event(H).start()}).on("interrupt.zoom end.zoom",function(){R(this,arguments).event(H).end()}).tween("zoom",function(){var K=this,Z=arguments,C=R(K,Z).event(H),D=t.apply(K,Z),Y=O==null?M(D):typeof O=="function"?O.apply(K,Z):O,L=Math.max(D[1][0]-D[0][0],D[1][1]-D[0][1]),G=K.__zoom,q=typeof $=="function"?$.apply(K,Z):$,Q=f(G.invert(Y).concat(L/G.k),q.invert(Y).concat(L/q.k));return function(J){if(J===1)J=q;else{var W=Q(J),te=L/W[2];J=new vi(te,Y[0]-W[0]*te,Y[1]-W[1]*te)}C.zoom(null,J)}})}function R(T,$,O){return!O&&T.__zooming||new U(T,$)}function U(T,$){this.that=T,this.args=$,this.active=0,this.sourceEvent=null,this.extent=t.apply(T,$),this.taps=0}U.prototype={event:function(T){return T&&(this.sourceEvent=T),this},start:function(){return++this.active===1&&(this.that.__zooming=this,this.emit("start")),this},zoom:function(T,$){return this.mouse&&T!=="mouse"&&(this.mouse[1]=$.invert(this.mouse[0])),this.touch0&&T!=="touch"&&(this.touch0[1]=$.invert(this.touch0[0])),this.touch1&&T!=="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(T){var $=ir(this.that).datum();h.call(T,this.that,new Pz(T,{sourceEvent:this.sourceEvent,target:w,transform:this.that.__zoom,dispatch:h}),$)}};function I(T,...$){if(!e.apply(this,arguments))return;var O=R(this,$).event(T),H=this.__zoom,K=Math.max(o[0],Math.min(o[1],H.k*Math.pow(2,a.apply(this,arguments)))),Z=Cr(T);if(O.wheel)(O.mouse[0][0]!==Z[0]||O.mouse[0][1]!==Z[1])&&(O.mouse[1]=H.invert(O.mouse[0]=Z)),clearTimeout(O.wheel);else{if(H.k===K)return;O.mouse=[Z,H.invert(Z)],wu(this),O.start()}no(T),O.wheel=setTimeout(C,_),O.zoom("mouse",r(N(k(H,K),O.mouse[0],O.mouse[1]),O.extent,c));function C(){O.wheel=null,O.end()}}function X(T,...$){if(y||!e.apply(this,arguments))return;var O=T.currentTarget,H=R(this,$,!0).event(T),K=ir(T.view).on("mousemove.zoom",Y,!0).on("mouseup.zoom",L,!0),Z=Cr(T,O),C=T.clientX,D=T.clientY;jE(T.view),Sm(T),H.mouse=[Z,this.__zoom.invert(Z)],wu(this),H.start();function Y(G){if(no(G),!H.moved){var q=G.clientX-C,Q=G.clientY-D;H.moved=q*q+Q*Q>E}H.event(G).zoom("mouse",r(N(H.that.__zoom,H.mouse[0]=Cr(G,O),H.mouse[1]),H.extent,c))}function L(G){K.on("mousemove.zoom mouseup.zoom",null),DE(G.view,H.moved),no(G),H.event(G).end()}}function j(T,...$){if(e.apply(this,arguments)){var O=this.__zoom,H=Cr(T.changedTouches?T.changedTouches[0]:T,this),K=O.invert(H),Z=O.k*(T.shiftKey?.5:2),C=r(N(k(O,Z),H,K),t.apply(this,$),c);no(T),d>0?ir(this).transition().duration(d).call(B,C,H,T):ir(this).call(w.transform,C,H,T)}}function z(T,...$){if(e.apply(this,arguments)){var O=T.touches,H=O.length,K=R(this,$,T.changedTouches.length===H).event(T),Z,C,D,Y;for(Sm(T),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:t,sourceHandle:r,targetHandle:a})=>`Couldn't create edge for ${e} handle id: "${e==="source"?r:a}", edge id: ${t}.`,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.`},No=[[Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY],[Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY]],QE=["Enter"," ","Escape"],WE={"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:t,y:r})=>`Moved selected node ${e}. New position, x: ${t}, y: ${r}`,"edge.a11yDescription.default":"Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.","controls.ariaLabel":"Control Panel","controls.zoomIn.ariaLabel":"Zoom In","controls.zoomOut.ariaLabel":"Zoom Out","controls.fitView.ariaLabel":"Fit View","controls.interactive.ariaLabel":"Toggle Interactivity","minimap.ariaLabel":"Mini Map","handle.ariaLabel":"Handle"};var Qs;(function(e){e.Strict="strict",e.Loose="loose"})(Qs||(Qs={}));var Fa;(function(e){e.Free="free",e.Vertical="vertical",e.Horizontal="horizontal"})(Fa||(Fa={}));var So;(function(e){e.Partial="partial",e.Full="full"})(So||(So={}));const JE={inProgress:!1,isValid:null,from:null,fromHandle:null,fromPosition:null,fromNode:null,to:null,toHandle:null,toPosition:null,toNode:null,pointer:null};var ca;(function(e){e.Bezier="default",e.Straight="straight",e.Step="step",e.SmoothStep="smoothstep",e.SimpleBezier="simplebezier"})(ca||(ca={}));var Iu;(function(e){e.Arrow="arrow",e.ArrowClosed="arrowclosed"})(Iu||(Iu={}));var ze;(function(e){e.Left="left",e.Top="top",e.Right="right",e.Bottom="bottom"})(ze||(ze={}));const l1={[ze.Left]:ze.Right,[ze.Right]:ze.Left,[ze.Top]:ze.Bottom,[ze.Bottom]:ze.Top};function eN(e){return e===null?null:e?"valid":"invalid"}const tN=e=>!!e&&typeof e=="object"&&"id"in e&&"source"in e&&"target"in e,Kz=e=>!!e&&typeof e=="object"&&"id"in e&&"position"in e&&!("source"in e)&&!("target"in e),ag=e=>!!e&&typeof e=="object"&&"id"in e&&"internals"in e&&!("source"in e)&&!("target"in e),Io=(e,t=[0,0])=>{const{width:r,height:a}=Qr(e),s=e.origin??t,o=r*s[0],c=a*s[1];return{x:e.position.x-o,y:e.position.y-c}},Zz=(e,t={nodeOrigin:[0,0]})=>{if(e.length===0)return{x:0,y:0,width:0,height:0};const r=e.reduce((a,s)=>{const o=typeof s=="string";let c=!t.nodeLookup&&!o?s:void 0;t.nodeLookup&&(c=o?t.nodeLookup.get(s):ag(s)?s:t.nodeLookup.get(s.id));const d=c?Bu(c,t.nodeOrigin):{x:0,y:0,x2:0,y2:0};return id(a,d)},{x:1/0,y:1/0,x2:-1/0,y2:-1/0});return ad(r)},Bo=(e,t={})=>{let r={x:1/0,y:1/0,x2:-1/0,y2:-1/0},a=!1;return e.forEach(s=>{(t.filter===void 0||t.filter(s))&&(r=id(r,Bu(s)),a=!0)}),a?ad(r):{x:0,y:0,width:0,height:0}},sg=(e,t,[r,a,s]=[0,0,1],o=!1,c=!1)=>{const d=(t.x-r)/s,f=(t.y-a)/s,h=t.width/s,p=t.height/s,g=[];for(const y of e.values()){const{measured:b,selectable:_=!0,hidden:E=!1}=y;if(c&&!_||E)continue;const S=b.width??y.width??y.initialWidth??0,w=b.height??y.height??y.initialHeight??0,{x:k,y:N}=y.internals.positionAbsolute,M=aN(d,f,h,p,k,N,S,w),B=S*w,R=o&&M>0;(!y.internals.handleBounds||R||M>=B||y.dragging)&&g.push(y)}return g},Qz=(e,t)=>{const r=new Set;return e.forEach(a=>{r.add(a.id)}),t.filter(a=>r.has(a.source)||r.has(a.target))};function Wz(e,t){const r=new Map,a=t!=null&&t.nodes?new Set(t.nodes.map(s=>s.id)):null;return e.forEach(s=>{let o;if(t!=null&&t.includeHiddenNodes){const{width:c,height:d}=Qr(s);o=c>0&&d>0}else o=!!(s.measured.width&&s.measured.height&&!s.hidden);o&&(!a||a.has(s.id))&&r.set(s.id,s)}),r}async function Jz({nodes:e,width:t,height:r,panZoom:a,minZoom:s,maxZoom:o},c){if(e.size===0)return!0;const d=Wz(e,c),f=Bo(d),h=og(f,t,r,(c==null?void 0:c.minZoom)??s,(c==null?void 0:c.maxZoom)??o,(c==null?void 0:c.padding)??.1);return await a.setViewport(h,{duration:c==null?void 0:c.duration,ease:c==null?void 0:c.ease,interpolate:c==null?void 0:c.interpolate}),!0}function nN({nodeId:e,nextPosition:t,nodeLookup:r,nodeOrigin:a=[0,0],nodeExtent:s,onError:o}){const c=r.get(e),d=c.parentId?r.get(c.parentId):void 0,{x:f,y:h}=d?d.internals.positionAbsolute:{x:0,y:0},p=c.origin??a;let g=c.extent||s;if(c.extent==="parent"&&!c.expandParent)if(!d)o==null||o("005",Lr.error005());else{const b=d.measured.width,_=d.measured.height;b&&_&&(g=[[f,h],[f+b,h+_]])}else d&&Za(c.extent)&&(g=[[c.extent[0][0]+f,c.extent[0][1]+h],[c.extent[1][0]+f,c.extent[1][1]+h]]);const y=Za(g)?Ka(t,g,c.measured):t;return(c.measured.width===void 0||c.measured.height===void 0)&&(o==null||o("015",Lr.error015())),{position:{x:y.x-f+(c.measured.width??0)*p[0],y:y.y-h+(c.measured.height??0)*p[1]},positionAbsolute:y}}async function eI({nodesToRemove:e=[],edgesToRemove:t=[],nodes:r,edges:a,onBeforeDelete:s}){const o=new Set(e.map(y=>y.id)),c=[];for(const y of r){if(y.deletable===!1)continue;const b=o.has(y.id),_=!b&&y.parentId&&c.find(E=>E.id===y.parentId);(b||_)&&c.push(y)}const d=new Set(t.map(y=>y.id)),f=a.filter(y=>y.deletable!==!1),p=Qz(c,f);for(const y of f)d.has(y.id)&&!p.find(_=>_.id===y.id)&&p.push(y);if(!s)return{edges:p,nodes:c};const g=await s({nodes:c,edges:p});return typeof g=="boolean"?g?{edges:p,nodes:c}:{edges:[],nodes:[]}:g}const Ws=(e,t=0,r=1)=>Math.min(Math.max(e,t),r),Ka=(e={x:0,y:0},t,r)=>({x:Ws(e.x,t[0][0],t[1][0]-((r==null?void 0:r.width)??0)),y:Ws(e.y,t[0][1],t[1][1]-((r==null?void 0:r.height)??0))});function rN(e,t,r){const{width:a,height:s}=Qr(r),{x:o,y:c}=r.internals.positionAbsolute;return Ka(e,[[o,c],[o+a,c+s]],t)}const o1=(e,t,r)=>er?-Ws(Math.abs(e-r),1,t)/t:0,lg=(e,t,r=15,a=40)=>{const s=o1(e.x,a,t.width-a)*r,o=o1(e.y,a,t.height-a)*r;return[s,o]},id=(e,t)=>({x:Math.min(e.x,t.x),y:Math.min(e.y,t.y),x2:Math.max(e.x2,t.x2),y2:Math.max(e.y2,t.y2)}),hp=({x:e,y:t,width:r,height:a})=>({x:e,y:t,x2:e+r,y2:t+a}),ad=({x:e,y:t,x2:r,y2:a})=>({x:e,y:t,width:r-e,height:a-t}),ko=(e,t=[0,0])=>{var s,o;const{x:r,y:a}=ag(e)?e.internals.positionAbsolute:Io(e,t);return{x:r,y:a,width:((s=e.measured)==null?void 0:s.width)??e.width??e.initialWidth??0,height:((o=e.measured)==null?void 0:o.height)??e.height??e.initialHeight??0}},Bu=(e,t=[0,0])=>{var s,o;const{x:r,y:a}=ag(e)?e.internals.positionAbsolute:Io(e,t);return{x:r,y:a,x2:r+(((s=e.measured)==null?void 0:s.width)??e.width??e.initialWidth??0),y2:a+(((o=e.measured)==null?void 0:o.height)??e.height??e.initialHeight??0)}},iN=(e,t)=>ad(id(hp(e),hp(t))),aN=(e,t,r,a,s,o,c,d)=>{const f=Math.max(0,Math.min(e+r,s+c)-Math.max(e,s)),h=Math.max(0,Math.min(t+a,o+d)-Math.max(t,o));return Math.ceil(f*h)},Uu=(e,t)=>aN(e.x,e.y,e.width,e.height,t.x,t.y,t.width,t.height),c1=e=>Or(e.width)&&Or(e.height)&&Or(e.x)&&Or(e.y),Or=e=>!isNaN(e)&&isFinite(e),sN=(e,t)=>(r,a)=>{},Uo=(e,t=[1,1])=>({x:t[0]*Math.round(e.x/t[0]),y:t[1]*Math.round(e.y/t[1])}),Ho=({x:e,y:t},[r,a,s],o=!1,c=[1,1])=>{const d={x:(e-r)/s,y:(t-a)/s};return o?Uo(d,c):d},Js=({x:e,y:t},[r,a,s])=>({x:e*s+r,y:t*s+a});function Is(e,t){if(typeof e=="number")return Math.floor((t-t/(1+e))*.5);if(typeof e=="string"&&e.endsWith("px")){const r=parseFloat(e);if(!Number.isNaN(r))return Math.floor(r)}if(typeof e=="string"&&e.endsWith("%")){const r=parseFloat(e);if(!Number.isNaN(r))return Math.floor(t*r*.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 tI(e,t,r){if(typeof e=="string"||typeof e=="number"){const a=Is(e,r),s=Is(e,t);return{top:a,right:s,bottom:a,left:s,x:s*2,y:a*2}}if(typeof e=="object"){const a=Is(e.top??e.y??0,r),s=Is(e.bottom??e.y??0,r),o=Is(e.left??e.x??0,t),c=Is(e.right??e.x??0,t);return{top:a,right:c,bottom:s,left:o,x:o+c,y:a+s}}return{top:0,right:0,bottom:0,left:0,x:0,y:0}}function nI(e,t,r,a,s,o){const{x:c,y:d}=Js(e,[t,r,a]),{x:f,y:h}=Js({x:e.x+e.width,y:e.y+e.height},[t,r,a]),p=s-f,g=o-h;return{left:Math.floor(c),top:Math.floor(d),right:Math.floor(p),bottom:Math.floor(g)}}const og=(e,t,r,a,s,o)=>{const c=tI(o,t,r),d=(t-c.x)/e.width,f=(r-c.y)/e.height,h=Math.min(d,f),p=Ws(h,a,s),g=e.x+e.width/2,y=e.y+e.height/2,b=t/2-g*p,_=r/2-y*p,E=nI(e,b,_,p,t,r),S={left:Math.min(E.left-c.left,0),top:Math.min(E.top-c.top,0),right:Math.min(E.right-c.right,0),bottom:Math.min(E.bottom-c.bottom,0)};return{x:b-S.left+S.right,y:_-S.top+S.bottom,zoom:p}},Co=()=>{var e;return typeof navigator<"u"&&((e=navigator==null?void 0:navigator.userAgent)==null?void 0:e.indexOf("Mac"))>=0};function Za(e){return e!=null&&e!=="parent"}function Qr(e){var t,r;return{width:((t=e.measured)==null?void 0:t.width)??e.width??e.initialWidth??0,height:((r=e.measured)==null?void 0:r.height)??e.height??e.initialHeight??0}}function lN(e){var t,r;return(((t=e.measured)==null?void 0:t.width)??e.width??e.initialWidth)!==void 0&&(((r=e.measured)==null?void 0:r.height)??e.height??e.initialHeight)!==void 0}function oN(e,t={width:0,height:0},r,a,s){const o={...e},c=a.get(r);if(c){const d=c.origin||s;o.x+=c.internals.positionAbsolute.x-(t.width??0)*d[0],o.y+=c.internals.positionAbsolute.y-(t.height??0)*d[1]}return o}function u1(e,t){if(e.size!==t.size)return!1;for(const r of e)if(!t.has(r))return!1;return!0}function rI(){let e,t;return{promise:new Promise((a,s)=>{e=a,t=s}),resolve:e,reject:t}}function iI(e){return{...WE,...e||{}}}function ho(e,{snapGrid:t=[0,0],snapToGrid:r=!1,transform:a,containerBounds:s}){const{x:o,y:c}=Rr(e),d=Ho({x:o-((s==null?void 0:s.left)??0),y:c-((s==null?void 0:s.top)??0)},a),{x:f,y:h}=r?Uo(d,t):d;return{xSnapped:f,ySnapped:h,...d}}const cg=e=>({width:e.offsetWidth,height:e.offsetHeight}),cN=e=>{var t;return((t=e==null?void 0:e.getRootNode)==null?void 0:t.call(e))||(window==null?void 0:window.document)},aI=["INPUT","SELECT","TEXTAREA"];function uN(e){var a,s;const t=((s=(a=e.composedPath)==null?void 0:a.call(e))==null?void 0:s[0])||e.target;return(t==null?void 0:t.nodeType)!==1?!1:aI.includes(t.nodeName)||t.hasAttribute("contenteditable")||!!t.closest(".nokey")}const dN=e=>"clientX"in e,Rr=(e,t)=>{var o,c;const r=dN(e),a=r?e.clientX:(o=e.touches)==null?void 0:o[0].clientX,s=r?e.clientY:(c=e.touches)==null?void 0:c[0].clientY;return{x:a-((t==null?void 0:t.left)??0),y:s-((t==null?void 0:t.top)??0)}},d1=(e,t,r,a,s)=>{const o=t.querySelectorAll(`.${e}`);return!o||!o.length?null:Array.from(o).map(c=>{const d=c.getBoundingClientRect();return{id:c.getAttribute("data-handleid"),type:e,nodeId:s,position:c.getAttribute("data-handlepos"),x:(d.left-r.left)/a,y:(d.top-r.top)/a,...cg(c)}})};function fN({sourceX:e,sourceY:t,targetX:r,targetY:a,sourceControlX:s,sourceControlY:o,targetControlX:c,targetControlY:d}){const f=e*.125+s*.375+c*.375+r*.125,h=t*.125+o*.375+d*.375+a*.125,p=Math.abs(f-e),g=Math.abs(h-t);return[f,h,p,g]}function uu(e,t){return e>=0?.5*e:t*25*Math.sqrt(-e)}function f1({pos:e,x1:t,y1:r,x2:a,y2:s,c:o}){switch(e){case ze.Left:return[t-uu(t-a,o),r];case ze.Right:return[t+uu(a-t,o),r];case ze.Top:return[t,r-uu(r-s,o)];case ze.Bottom:return[t,r+uu(s-r,o)]}}function hN({sourceX:e,sourceY:t,sourcePosition:r=ze.Bottom,targetX:a,targetY:s,targetPosition:o=ze.Top,curvature:c=.25}){const[d,f]=f1({pos:r,x1:e,y1:t,x2:a,y2:s,c}),[h,p]=f1({pos:o,x1:a,y1:s,x2:e,y2:t,c}),[g,y,b,_]=fN({sourceX:e,sourceY:t,targetX:a,targetY:s,sourceControlX:d,sourceControlY:f,targetControlX:h,targetControlY:p});return[`M${e},${t} C${d},${f} ${h},${p} ${a},${s}`,g,y,b,_]}function mN({sourceX:e,sourceY:t,targetX:r,targetY:a}){const s=Math.abs(r-e)/2,o=r0}const oI=({source:e,sourceHandle:t,target:r,targetHandle:a})=>`xy-edge__${e}${t||""}-${r}${a||""}`,cI=(e,t)=>t.some(r=>r.source===e.source&&r.target===e.target&&(r.sourceHandle===e.sourceHandle||!r.sourceHandle&&!e.sourceHandle)&&(r.targetHandle===e.targetHandle||!r.targetHandle&&!e.targetHandle)),uI=(e,t,r={})=>{var o;if(!e.source||!e.target)return(o=r.onError)==null||o.call(r,"006",Lr.error006()),t;const a=r.getEdgeId||oI;let s;return tN(e)?s={...e}:s={...e,id:a(e)},cI(s,t)?t:(s.sourceHandle===null&&delete s.sourceHandle,s.targetHandle===null&&delete s.targetHandle,t.concat(s))};function pN({sourceX:e,sourceY:t,targetX:r,targetY:a}){const[s,o,c,d]=mN({sourceX:e,sourceY:t,targetX:r,targetY:a});return[`M ${e},${t}L ${r},${a}`,s,o,c,d]}const h1={[ze.Left]:{x:-1,y:0},[ze.Right]:{x:1,y:0},[ze.Top]:{x:0,y:-1},[ze.Bottom]:{x:0,y:1}},dI=({source:e,sourcePosition:t=ze.Bottom,target:r})=>t===ze.Left||t===ze.Right?e.xMath.sqrt(Math.pow(t.x-e.x,2)+Math.pow(t.y-e.y,2));function fI({source:e,sourcePosition:t=ze.Bottom,target:r,targetPosition:a=ze.Top,center:s,offset:o,stepPosition:c}){const d=h1[t],f=h1[a],h={x:e.x+d.x*o,y:e.y+d.y*o},p={x:r.x+f.x*o,y:r.y+f.y*o},g=dI({source:h,sourcePosition:t,target:p}),y=g.x!==0?"x":"y",b=g[y];let _=[],E,S;const w={x:0,y:0},k={x:0,y:0},[,,N,M]=mN({sourceX:e.x,sourceY:e.y,targetX:r.x,targetY:r.y});if(d[y]*f[y]===-1){y==="x"?(E=s.x??h.x+(p.x-h.x)*c,S=s.y??(h.y+p.y)/2):(E=s.x??(h.x+p.x)/2,S=s.y??h.y+(p.y-h.y)*c);const I=[{x:E,y:h.y},{x:E,y:p.y}],X=[{x:h.x,y:S},{x:p.x,y:S}];d[y]===b?_=y==="x"?I:X:_=y==="x"?X:I}else{const I=[{x:h.x,y:p.y}],X=[{x:p.x,y:h.y}];if(y==="x"?_=d.x===b?X:I:_=d.y===b?I:X,t===a){const T=Math.abs(e[y]-r[y]);if(T<=o){const $=Math.min(o-1,o-T);d[y]===b?w[y]=(h[y]>e[y]?-1:1)*$:k[y]=(p[y]>r[y]?-1:1)*$}}if(t!==a){const T=y==="x"?"y":"x",$=d[y]===f[T],O=h[T]>p[T],H=h[T]=P?(E=(j.x+z.x)/2,S=_[0].y):(E=_[0].x,S=(j.y+z.y)/2)}const B={x:h.x+w.x,y:h.y+w.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]:[],r],E,S,N,M]}function hI(e,t,r,a){const s=Math.min(m1(e,t)/2,m1(t,r)/2,a),{x:o,y:c}=t;if(e.x===o&&o===r.x||e.y===c&&c===r.y)return`L${o} ${c}`;if(e.y===c){const h=e.xr.id===t):e[0])||null}function pp(e,t){return e?typeof e=="string"?e:`${t?`${t}__`:""}${Object.keys(e).sort().map(a=>`${a}=${e[a]}`).join("&")}`:""}function pI(e,{id:t,defaultColor:r,defaultMarkerStart:a,defaultMarkerEnd:s}){const o=new Set;return e.reduce((c,d)=>([d.markerStart||a,d.markerEnd||s].forEach(f=>{if(f&&typeof f=="object"){const h=pp(f,t);o.has(h)||(c.push({id:h,color:f.color||r,...f}),o.add(h))}}),c),[]).sort((c,d)=>c.id.localeCompare(d.id))}const gN=1e3,gI=10,ug={nodeOrigin:[0,0],nodeExtent:No,elevateNodesOnSelect:!0,zIndexMode:"basic",defaults:{}},xI={...ug,checkEquality:!0};function dg(e,t){const r={...e};for(const a in t)t[a]!==void 0&&(r[a]=t[a]);return r}function bI(e,t,r){const a=dg(ug,r);for(const s of e.values())if(s.parentId)hg(s,e,t,a);else{const o=Io(s,a.nodeOrigin),c=Za(s.extent)?s.extent:a.nodeExtent,d=Ka(o,c,Qr(s));s.internals.positionAbsolute=d}}function yI(e,t){if(!e.handles)return e.measured?t==null?void 0:t.internals.handleBounds:void 0;const r=[],a=[];for(const s of e.handles){const o={id:s.id,width:s.width??1,height:s.height??1,nodeId:e.id,x:s.x,y:s.y,position:s.position,type:s.type};s.type==="source"?r.push(o):s.type==="target"&&a.push(o)}return{source:r,target:a}}function fg(e){return e==="manual"}function gp(e,t,r,a={}){var p,g;const s=dg(xI,a),o={i:0},c=new Map(t),d=s!=null&&s.elevateNodesOnSelect&&!fg(s.zIndexMode)?gN:0;let f=e.length>0,h=!1;t.clear(),r.clear();for(const y of e){let b=c.get(y.id);if(s.checkEquality&&y===(b==null?void 0:b.internals.userNode))t.set(y.id,b);else{const _=Io(y,s.nodeOrigin),E=Za(y.extent)?y.extent:s.nodeExtent,S=Ka(_,E,Qr(y));b={...s.defaults,...y,measured:{width:(p=y.measured)==null?void 0:p.width,height:(g=y.measured)==null?void 0:g.height},internals:{positionAbsolute:S,handleBounds:yI(y,b),z:xN(y,d,s.zIndexMode),userNode:y}},t.set(y.id,b)}(b.measured===void 0||b.measured.width===void 0||b.measured.height===void 0)&&!b.hidden&&(f=!1),y.parentId&&hg(b,t,r,a,o),h||(h=y.selected??!1)}return{nodesInitialized:f,hasSelectedNodes:h}}function vI(e,t){if(!e.parentId)return;const r=t.get(e.parentId);r?r.set(e.id,e):t.set(e.parentId,new Map([[e.id,e]]))}function hg(e,t,r,a,s){const{elevateNodesOnSelect:o,nodeOrigin:c,nodeExtent:d,zIndexMode:f}=dg(ug,a),h=e.parentId,p=t.get(h);if(!p){console.warn(`Parent node ${h} not found. Please make sure that parent nodes are in front of their child nodes in the nodes array.`);return}vI(e,r),s&&!p.parentId&&p.internals.rootParentIndex===void 0&&f==="auto"&&(p.internals.rootParentIndex=++s.i,p.internals.z=p.internals.z+s.i*gI),s&&p.internals.rootParentIndex!==void 0&&(s.i=p.internals.rootParentIndex);const g=o&&!fg(f)?gN:0,{x:y,y:b,z:_}=_I(e,p,c,d,g,f),{positionAbsolute:E}=e.internals,S=y!==E.x||b!==E.y;(S||_!==e.internals.z)&&t.set(e.id,{...e,internals:{...e.internals,positionAbsolute:S?{x:y,y:b}:E,z:_}})}function xN(e,t,r){const a=Or(e.zIndex)?e.zIndex:0;return fg(r)?a:a+(e.selected?t:0)}function _I(e,t,r,a,s,o){const{x:c,y:d}=t.internals.positionAbsolute,f=Qr(e),h=Io(e,r),p=Za(e.extent)?Ka(h,e.extent,f):h;let g=Ka({x:c+p.x,y:d+p.y},a,f);e.extent==="parent"&&(g=rN(g,f,t));const y=xN(e,s,o),b=t.internals.z??0;return{x:g.x,y:g.y,z:b>=y?b+1:y}}function mg(e,t,r,a=[0,0]){var c;const s=[],o=new Map;for(const d of e){const f=t.get(d.parentId);if(!f)continue;const h=((c=o.get(d.parentId))==null?void 0:c.expandedRect)??ko(f),p=iN(h,d.rect);o.set(d.parentId,{expandedRect:p,parent:f})}return o.size>0&&o.forEach(({expandedRect:d,parent:f},h)=>{var N;const p=f.internals.positionAbsolute,g=Qr(f),y=f.origin??a,b=d.x0||_>0||w||k)&&(s.push({id:h,type:"position",position:{x:f.position.x-b+w,y:f.position.y-_+k}}),(N=r.get(h))==null||N.forEach(M=>{e.some(B=>B.id===M.id)||s.push({id:M.id,type:"position",position:{x:M.position.x+b,y:M.position.y+_}})})),(g.width0){const b=mg(y,t,r,s);h.push(...b)}return{changes:h,updatedInternals:f}}async function EI({delta:e,panZoom:t,transform:r,translateExtent:a,width:s,height:o}){if(!t||!e.x&&!e.y)return!1;const c=await t.setViewportConstrained({x:r[0]+e.x,y:r[1]+e.y,zoom:r[2]},[[0,0],[s,o]],a);return!!c&&(c.x!==r[0]||c.y!==r[1]||c.k!==r[2])}function b1(e,t,r,a,s,o){let c=s;const d=a.get(c)||new Map;a.set(c,d.set(r,t)),c=`${s}-${e}`;const f=a.get(c)||new Map;if(a.set(c,f.set(r,t)),o){c=`${s}-${e}-${o}`;const h=a.get(c)||new Map;a.set(c,h.set(r,t))}}function bN(e,t,r){e.clear(),t.clear();for(const a of r){const{source:s,target:o,sourceHandle:c=null,targetHandle:d=null}=a,f={edgeId:a.id,source:s,target:o,sourceHandle:c,targetHandle:d},h=`${s}-${c}--${o}-${d}`,p=`${o}-${d}--${s}-${c}`;b1("source",f,p,e,s,c),b1("target",f,h,e,o,d),t.set(a.id,a)}}function yN(e,t){if(!e.parentId)return!1;const r=t.get(e.parentId);return r?r.selected?!0:yN(r,t):!1}function y1(e,t,r){var s;let a=e;do{if((s=a==null?void 0:a.matches)!=null&&s.call(a,t))return!0;if(a===r)return!1;a=a==null?void 0:a.parentElement}while(a);return!1}function NI(e,t,r,a){const s=new Map;for(const[o,c]of e)if((c.selected||c.id===a)&&(!c.parentId||!yN(c,e))&&(c.draggable||t&&typeof c.draggable>"u")){const d=e.get(o);d&&s.set(o,{id:o,position:d.position||{x:0,y:0},distance:{x:r.x-d.internals.positionAbsolute.x,y:r.y-d.internals.positionAbsolute.y},extent:d.extent,parentId:d.parentId,origin:d.origin,expandParent:d.expandParent,internals:{positionAbsolute:d.internals.positionAbsolute||{x:0,y:0}},measured:{width:d.measured.width??0,height:d.measured.height??0}})}return s}function km({nodeId:e,dragItems:t,nodeLookup:r,dragging:a=!0}){var c,d,f;const s=[];for(const[h,p]of t){const g=(c=r.get(h))==null?void 0:c.internals.userNode;g&&s.push({...g,position:p.position,dragging:a})}if(!e)return[s[0],s];const o=(d=r.get(e))==null?void 0:d.internals.userNode;return[o?{...o,position:((f=t.get(e))==null?void 0:f.position)||o.position,dragging:a}:s[0],s]}function SI({dragItems:e,snapGrid:t,x:r,y:a}){const s=e.values().next().value;if(!s)return null;const o={x:r-s.distance.x,y:a-s.distance.y},c=Uo(o,t);return{x:c.x-o.x,y:c.y-o.y}}function kI({onNodeMouseDown:e,getStoreItems:t,onDragStart:r,onDrag:a,onDragStop:s}){let o={x:null,y:null},c=0,d=new Map,f=!1,h={x:0,y:0},p=null,g=!1,y=null,b=!1,_=!1,E=null;function S({noDragClassName:k,handleSelector:N,domNode:M,isSelectable:B,nodeId:R,nodeClickDistance:U=0}){y=ir(M);function I({x:V,y:P}){const{nodeLookup:T,nodeExtent:$,snapGrid:O,snapToGrid:H,nodeOrigin:K,onNodeDrag:Z,onSelectionDrag:C,onError:D,updateNodePositions:Y}=t();o={x:V,y:P};let L=!1;const G=d.size>1,q=G&&$?hp(Bo(d)):null,Q=G&&H?SI({dragItems:d,snapGrid:O,x:V,y:P}):null;for(const[J,W]of d){if(!T.has(J))continue;let te={x:V-W.distance.x,y:P-W.distance.y};H&&(te=Q?{x:Math.round(te.x+Q.x),y:Math.round(te.y+Q.y)}:Uo(te,O));let ce=null;if(G&&$&&!W.extent&&q){const{positionAbsolute:we}=W.internals,Ne=we.x-q.x+$[0][0],De=we.x+W.measured.width-q.x2+$[1][0],$e=we.y-q.y+$[0][1],st=we.y+W.measured.height-q.y2+$[1][1];ce=[[Ne,$e],[De,st]]}const{position:fe,positionAbsolute:xe}=nN({nodeId:J,nextPosition:te,nodeLookup:T,nodeExtent:ce||$,nodeOrigin:K,onError:D});L=L||W.position.x!==fe.x||W.position.y!==fe.y,W.position=fe,W.internals.positionAbsolute=xe}if(_=_||L,!!L&&(Y(d,!0),E&&(a||Z||!R&&C))){const[J,W]=km({nodeId:R,dragItems:d,nodeLookup:T});a==null||a(E,d,J,W),Z==null||Z(E,J,W),R||C==null||C(E,W)}}async function X(){if(!p)return;const{transform:V,panBy:P,autoPanSpeed:T,autoPanOnNodeDrag:$}=t();if(!$){f=!1,cancelAnimationFrame(c);return}const[O,H]=lg(h,p,T);(O!==0||H!==0)&&(o.x=(o.x??0)-O/V[2],o.y=(o.y??0)-H/V[2],await P({x:O,y:H})&&I(o)),c=requestAnimationFrame(X)}function j(V){var G;const{nodeLookup:P,multiSelectionActive:T,nodesDraggable:$,transform:O,snapGrid:H,snapToGrid:K,selectNodesOnDrag:Z,onNodeDragStart:C,onSelectionDragStart:D,unselectNodesAndEdges:Y}=t();g=!0,(!Z||!B)&&!T&&R&&((G=P.get(R))!=null&&G.selected||Y()),B&&Z&&R&&(e==null||e(R));const L=ho(V.sourceEvent,{transform:O,snapGrid:H,snapToGrid:K,containerBounds:p});if(o=L,d=NI(P,$,L,R),d.size>0&&(r||C||!R&&D)){const[q,Q]=km({nodeId:R,dragItems:d,nodeLookup:P});r==null||r(V.sourceEvent,d,q,Q),C==null||C(V.sourceEvent,q,Q),R||D==null||D(V.sourceEvent,Q)}}const z=LE().clickDistance(U).on("start",V=>{const{domNode:P,nodeDragThreshold:T,transform:$,snapGrid:O,snapToGrid:H}=t();p=(P==null?void 0:P.getBoundingClientRect())||null,b=!1,_=!1,E=V.sourceEvent,T===0&&j(V),o=ho(V.sourceEvent,{transform:$,snapGrid:O,snapToGrid:H,containerBounds:p}),h=Rr(V.sourceEvent,p)}).on("drag",V=>{const{autoPanOnNodeDrag:P,transform:T,snapGrid:$,snapToGrid:O,nodeDragThreshold:H,nodeLookup:K}=t(),Z=ho(V.sourceEvent,{transform:T,snapGrid:$,snapToGrid:O,containerBounds:p});if(E=V.sourceEvent,(V.sourceEvent.type==="touchmove"&&V.sourceEvent.touches.length>1||R&&!K.has(R))&&(b=!0),!b){if(!f&&P&&g&&(f=!0,X()),!g){const C=Rr(V.sourceEvent,p),D=C.x-h.x,Y=C.y-h.y;Math.sqrt(D*D+Y*Y)>H&&j(V)}(o.x!==Z.xSnapped||o.y!==Z.ySnapped)&&d&&g&&(h=Rr(V.sourceEvent,p),I(Z))}}).on("end",V=>{if(!g||b){b&&d.size>0&&t().updateNodePositions(d,!1);return}if(f=!1,g=!1,cancelAnimationFrame(c),d.size>0){const{nodeLookup:P,updateNodePositions:T,onNodeDragStop:$,onSelectionDragStop:O}=t();if(_&&(T(d,!1),_=!1),s||$||!R&&O){const[H,K]=km({nodeId:R,dragItems:d,nodeLookup:P,dragging:!1});s==null||s(V.sourceEvent,d,H,K),$==null||$(V.sourceEvent,H,K),R||O==null||O(V.sourceEvent,K)}}}).filter(V=>{const P=V.target;return!V.button&&(!k||!y1(P,`.${k}`,M))&&(!N||y1(P,N,M))});y.call(z)}function w(){y==null||y.on(".drag",null)}return{update:S,destroy:w}}function CI(e,t,r){const a=[],s={x:e.x-r,y:e.y-r,width:r*2,height:r*2};for(const o of t.values())Uu(s,ko(o))>0&&a.push(o);return a}const TI=250;function AI(e,t,r,a){var d,f;let s=[],o=1/0;const c=CI(e,r,t+TI);for(const h of c){const p=[...((d=h.internals.handleBounds)==null?void 0:d.source)??[],...((f=h.internals.handleBounds)==null?void 0:f.target)??[]];for(const g of p){if(a.nodeId===g.nodeId&&a.type===g.type&&a.id===g.id)continue;const{x:y,y:b}=Qa(h,g,g.position,!0),_=Math.sqrt(Math.pow(y-e.x,2)+Math.pow(b-e.y,2));_>t||(_1){const h=a.type==="source"?"target":"source";return s.find(p=>p.type===h)??s[0]}return s[0]}function vN(e,t,r,a,s,o=!1){var h,p,g;const c=a.get(e);if(!c)return null;const d=s==="strict"?(h=c.internals.handleBounds)==null?void 0:h[t]:[...((p=c.internals.handleBounds)==null?void 0:p.source)??[],...((g=c.internals.handleBounds)==null?void 0:g.target)??[]],f=(r?d==null?void 0:d.find(y=>y.id===r):d==null?void 0:d[0])??null;return f&&o?{...f,...Qa(c,f,f.position,!0)}:f}function _N(e,t){return e||(t!=null&&t.classList.contains("target")?"target":t!=null&&t.classList.contains("source")?"source":null)}function MI(e,t){let r=null;return t?r=!0:e&&!t&&(r=!1),r}const wN=()=>!0;function OI(e,{connectionMode:t,connectionRadius:r,handleId:a,nodeId:s,edgeUpdaterType:o,isTarget:c,domNode:d,nodeLookup:f,lib:h,autoPanOnConnect:p,flowId:g,panBy:y,cancelConnection:b,onConnectStart:_,onConnect:E,onConnectEnd:S,isValidConnection:w=wN,onReconnectEnd:k,updateConnection:N,getTransform:M,getFromHandle:B,autoPanSpeed:R,dragThreshold:U=1,handleDomNode:I}){const X=cN(e.target);let j=0,z;const{x:V,y:P}=Rr(e),T=_N(o,I),$=d==null?void 0:d.getBoundingClientRect();let O=!1;if(!$||!T)return;const H=vN(s,T,a,f,t);if(!H)return;let K=Rr(e,$),Z=!1,C=null,D=!1,Y=null;function L(){if(!p||!$)return;const[fe,xe]=lg(K,$,R);y({x:fe,y:xe}),j=requestAnimationFrame(L)}const G={...H,nodeId:s,type:T,position:H.position},q=f.get(s);let J={inProgress:!0,isValid:null,from:Qa(q,G,ze.Left,!0),fromHandle:G,fromPosition:G.position,fromNode:q,to:K,toHandle:null,toPosition:l1[G.position],toNode:null,pointer:K};function W(){O=!0,N(J),_==null||_(e,{nodeId:s,handleId:a,handleType:T})}U===0&&W();function te(fe){if(!O){const{x:st,y:Rt}=Rr(fe),Xt=st-V,Pt=Rt-P;if(!(Xt*Xt+Pt*Pt>U*U))return;W()}if(!B()||!G){ce(fe);return}const xe=M();K=Rr(fe,$),z=AI(Ho(K,xe,!1,[1,1]),r,f,G),Z||(L(),Z=!0);const we=EN(fe,{handle:z,connectionMode:t,fromNodeId:s,fromHandleId:a,fromType:c?"target":"source",isValidConnection:w,doc:X,lib:h,flowId:g,nodeLookup:f});Y=we.handleDomNode,C=we.connection,D=MI(!!z,we.isValid);const Ne=f.get(s),De=Ne?Qa(Ne,G,ze.Left,!0):J.from,$e={...J,from:De,isValid:D,to:we.toHandle&&D?Js({x:we.toHandle.x,y:we.toHandle.y},xe):K,toHandle:we.toHandle,toPosition:D&&we.toHandle?we.toHandle.position:l1[G.position],toNode:we.toHandle?f.get(we.toHandle.nodeId):null,pointer:K};N($e),J=$e}function ce(fe){if(!("touches"in fe&&fe.touches.length>0)){if(O){(z||Y)&&C&&D&&(E==null||E(C));const{inProgress:xe,...we}=J,Ne={...we,toPosition:J.toHandle?J.toPosition:null};S==null||S(fe,Ne),o&&(k==null||k(fe,Ne))}b(),cancelAnimationFrame(j),Z=!1,D=!1,C=null,Y=null,X.removeEventListener("mousemove",te),X.removeEventListener("mouseup",ce),X.removeEventListener("touchmove",te),X.removeEventListener("touchend",ce)}}X.addEventListener("mousemove",te),X.addEventListener("mouseup",ce),X.addEventListener("touchmove",te),X.addEventListener("touchend",ce)}function EN(e,{handle:t,connectionMode:r,fromNodeId:a,fromHandleId:s,fromType:o,doc:c,lib:d,flowId:f,isValidConnection:h=wN,nodeLookup:p}){const g=o==="target",y=t?c.querySelector(`.${d}-flow__handle[data-id="${f}-${t==null?void 0:t.nodeId}-${t==null?void 0:t.id}-${t==null?void 0:t.type}"]`):null,{x:b,y:_}=Rr(e),E=c.elementFromPoint(b,_),S=E!=null&&E.classList.contains(`${d}-flow__handle`)?E:y,w={handleDomNode:S,isValid:!1,connection:null,toHandle:null};if(S){const k=_N(void 0,S),N=S.getAttribute("data-nodeid"),M=S.getAttribute("data-handleid"),B=S.classList.contains("connectable"),R=S.classList.contains("connectableend");if(!N||!k)return w;const U={source:g?N:a,sourceHandle:g?M:s,target:g?a:N,targetHandle:g?s:M};w.connection=U;const X=B&&R&&(r===Qs.Strict?g&&k==="source"||!g&&k==="target":N!==a||M!==s);w.isValid=X&&h(U),w.toHandle=vN(N,k,M,p,r,!0)}return w}const xp={onPointerDown:OI,isValid:EN};function RI({domNode:e,panZoom:t,getTransform:r,getViewScale:a}){const s=ir(e);function o({translateExtent:d,width:f,height:h,zoomStep:p=1,pannable:g=!0,zoomable:y=!0,inversePan:b=!1}){const _=N=>{if(N.sourceEvent.type!=="wheel"||!t)return;const M=r(),B=N.sourceEvent.ctrlKey&&Co()?10:1,R=-N.sourceEvent.deltaY*(N.sourceEvent.deltaMode===1?.05:N.sourceEvent.deltaMode?1:.002)*p,U=M[2]*Math.pow(2,R*B);t.scaleTo(U)};let E=[0,0];const S=N=>{(N.sourceEvent.type==="mousedown"||N.sourceEvent.type==="touchstart")&&(E=[N.sourceEvent.clientX??N.sourceEvent.touches[0].clientX,N.sourceEvent.clientY??N.sourceEvent.touches[0].clientY])},w=N=>{const M=r();if(N.sourceEvent.type!=="mousemove"&&N.sourceEvent.type!=="touchmove"||!t)return;const B=[N.sourceEvent.clientX??N.sourceEvent.touches[0].clientX,N.sourceEvent.clientY??N.sourceEvent.touches[0].clientY],R=[B[0]-E[0],B[1]-E[1]];E=B;const U=a()*Math.max(M[2],Math.log(M[2]))*(b?-1:1),I={x:M[0]-R[0]*U,y:M[1]-R[1]*U},X=[[0,0],[f,h]];t.setViewportConstrained({x:I.x,y:I.y,zoom:M[2]},X,d)},k=ZE().on("start",S).on("zoom",g?w:null).on("zoom.wheel",y?_:null);s.call(k,{})}function c(){s.on("zoom",null)}return{update:o,destroy:c,pointer:Cr}}const sd=e=>({x:e.x,y:e.y,zoom:e.k}),Cm=({x:e,y:t,zoom:r})=>rd.translate(e,t).scale(r),$s=(e,t)=>e.target.closest(`.${t}`),NN=(e,t)=>t===2&&Array.isArray(e)&&e.includes(2),jI=e=>((e*=2)<=1?e*e*e:(e-=2)*e*e+2)/2,Tm=(e,t=0,r=jI,a=()=>{})=>{const s=typeof t=="number"&&t>0;return s||a(),s?e.transition().duration(t).ease(r).on("end",a):e},SN=e=>{const t=e.ctrlKey&&Co()?10:1;return-e.deltaY*(e.deltaMode===1?.05:e.deltaMode?1:.002)*t};function DI({zoomPanValues:e,noWheelClassName:t,d3Selection:r,d3Zoom:a,panOnScrollMode:s,panOnScrollSpeed:o,zoomOnPinch:c,onPanZoomStart:d,onPanZoom:f,onPanZoomEnd:h}){return p=>{if($s(p,t))return p.ctrlKey&&p.preventDefault(),!1;p.preventDefault(),p.stopImmediatePropagation();const g=r.property("__zoom").k||1;if(p.ctrlKey&&c){const S=Cr(p),w=SN(p),k=g*Math.pow(2,w);a.scaleTo(r,k,S,p);return}const y=p.deltaMode===1?20:1;let b=s===Fa.Vertical?0:p.deltaX*y,_=s===Fa.Horizontal?0:p.deltaY*y;!Co()&&p.shiftKey&&s!==Fa.Vertical&&(b=p.deltaY*y,_=0),a.translateBy(r,-(b/g)*o,-(_/g)*o,{internal:!0});const E=sd(r.property("__zoom"));clearTimeout(e.panScrollTimeout),e.isPanScrolling?f==null||f(p,E):(e.isPanScrolling=!0,d==null||d(p,E)),e.panScrollTimeout=setTimeout(()=>{h==null||h(p,E),e.isPanScrolling=!1},150)}}function LI({noWheelClassName:e,preventScrolling:t,d3ZoomHandler:r}){return function(a,s){const o=a.type==="wheel",c=!t&&o&&!a.ctrlKey,d=$s(a,e);if(a.ctrlKey&&o&&d&&a.preventDefault(),c||d)return null;a.preventDefault(),r.call(this,a,s)}}function zI({zoomPanValues:e,onDraggingChange:t,onPanZoomStart:r}){return a=>{var o,c,d;if((o=a.sourceEvent)!=null&&o.internal)return;const s=sd(a.transform);e.mouseButton=((c=a.sourceEvent)==null?void 0:c.button)||0,e.isZoomingOrPanning=!0,e.prevViewport=s,((d=a.sourceEvent)==null?void 0:d.type)==="mousedown"&&t(!0),r&&(r==null||r(a.sourceEvent,s))}}function II({zoomPanValues:e,panOnDrag:t,onPaneContextMenu:r,onTransformChange:a,onPanZoom:s}){return o=>{var c,d;e.usedRightMouseButton=!!(r&&NN(t,e.mouseButton??0)),(c=o.sourceEvent)!=null&&c.sync||a([o.transform.x,o.transform.y,o.transform.k]),s&&!((d=o.sourceEvent)!=null&&d.internal)&&(s==null||s(o.sourceEvent,sd(o.transform)))}}function BI({zoomPanValues:e,panOnDrag:t,panOnScroll:r,onDraggingChange:a,onPanZoomEnd:s,onPaneContextMenu:o}){return c=>{var d;if(!((d=c.sourceEvent)!=null&&d.internal)&&(e.isZoomingOrPanning=!1,o&&NN(t,e.mouseButton??0)&&!e.usedRightMouseButton&&c.sourceEvent&&o(c.sourceEvent),e.usedRightMouseButton=!1,a(!1),s)){const f=sd(c.transform);e.prevViewport=f,clearTimeout(e.timerId),e.timerId=setTimeout(()=>{s==null||s(c.sourceEvent,f)},r?150:0)}}}function UI({zoomActivationKeyPressed:e,zoomOnScroll:t,zoomOnPinch:r,panOnDrag:a,panOnScroll:s,zoomOnDoubleClick:o,userSelectionActive:c,noWheelClassName:d,noPanClassName:f,lib:h,connectionInProgress:p}){return g=>{var S;const y=e||t,b=r&&g.ctrlKey,_=g.type==="wheel";if(g.button===1&&g.type==="mousedown"&&($s(g,`${h}-flow__node`)||$s(g,`${h}-flow__edge`)))return!0;if(!a&&!y&&!s&&!o&&!r||c||p&&!_||$s(g,d)&&_||$s(g,f)&&(!_||s&&_&&!e)||!r&&g.ctrlKey&&_)return!1;if(!r&&g.type==="touchstart"&&((S=g.touches)==null?void 0:S.length)>1)return g.preventDefault(),!1;if(!y&&!s&&!b&&_||!a&&(g.type==="mousedown"||g.type==="touchstart")||Array.isArray(a)&&!a.includes(g.button)&&g.type==="mousedown")return!1;const E=Array.isArray(a)&&a.includes(g.button)||!g.button||g.button<=1;return(!g.ctrlKey||_)&&E}}function HI({domNode:e,minZoom:t,maxZoom:r,translateExtent:a,viewport:s,onPanZoom:o,onPanZoomStart:c,onPanZoomEnd:d,onDraggingChange:f}){const h={isZoomingOrPanning:!1,usedRightMouseButton:!1,prevViewport:{},mouseButton:0,timerId:void 0,panScrollTimeout:void 0,isPanScrolling:!1},p=e.getBoundingClientRect();let g=[[0,0],[p.width,p.height]];const y=typeof ResizeObserver<"u"?new ResizeObserver(P=>{const T=P[0];T&&(g=[[0,0],[T.contentRect.width,T.contentRect.height]])}):null;y==null||y.observe(e);const b=ZE().extent(()=>g).scaleExtent([t,r]).translateExtent(a),_=ir(e).call(b);M({x:s.x,y:s.y,zoom:Ws(s.zoom,t,r)},[[0,0],[p.width,p.height]],a);const E=_.on("wheel.zoom"),S=_.on("dblclick.zoom");b.wheelDelta(SN);async function w(P,T){return _?new Promise($=>{b==null||b.interpolate((T==null?void 0:T.interpolate)==="linear"?fo:yu).transform(Tm(_,T==null?void 0:T.duration,T==null?void 0:T.ease,()=>$(!0)),P)}):!1}function k({noWheelClassName:P,noPanClassName:T,onPaneContextMenu:$,userSelectionActive:O,panOnScroll:H,panOnDrag:K,panOnScrollMode:Z,panOnScrollSpeed:C,preventScrolling:D,zoomOnPinch:Y,zoomOnScroll:L,zoomOnDoubleClick:G,zoomActivationKeyPressed:q,lib:Q,onTransformChange:J,connectionInProgress:W,paneClickDistance:te,selectionOnDrag:ce}){O&&!h.isZoomingOrPanning&&N();const fe=H&&!q&&!O;b.clickDistance(ce?1/0:!Or(te)||te<0?0:te);const xe=fe?DI({zoomPanValues:h,noWheelClassName:P,d3Selection:_,d3Zoom:b,panOnScrollMode:Z,panOnScrollSpeed:C,zoomOnPinch:Y,onPanZoomStart:c,onPanZoom:o,onPanZoomEnd:d}):LI({noWheelClassName:P,preventScrolling:D,d3ZoomHandler:E});_.on("wheel.zoom",xe,{passive:!1});const we=zI({zoomPanValues:h,onDraggingChange:f,onPanZoomStart:c});b.on("start",we);const Ne=II({zoomPanValues:h,panOnDrag:K,onPaneContextMenu:!!$,onPanZoom:o,onTransformChange:J});b.on("zoom",Ne);const De=BI({zoomPanValues:h,panOnDrag:K,panOnScroll:H,onPaneContextMenu:$,onPanZoomEnd:d,onDraggingChange:f});b.on("end",De);const $e=UI({zoomActivationKeyPressed:q,panOnDrag:K,zoomOnScroll:L,panOnScroll:H,zoomOnDoubleClick:G,zoomOnPinch:Y,userSelectionActive:O,noPanClassName:T,noWheelClassName:P,lib:Q,connectionInProgress:W});b.filter($e),G?_.on("dblclick.zoom",S):_.on("dblclick.zoom",null)}function N(){b.on("zoom",null)}async function M(P,T,$){const O=Cm(P),H=b==null?void 0:b.constrain()(O,T,$);return H&&await w(H),H}async function B(P,T){const $=Cm(P);return await w($,T),$}function R(P){if(_){const T=Cm(P),$=_.property("__zoom");($.k!==P.zoom||$.x!==P.x||$.y!==P.y)&&(b==null||b.transform(_,T,null,{sync:!0}))}}function U(){const P=_?KE(_.node()):{x:0,y:0,k:1};return{x:P.x,y:P.y,zoom:P.k}}async function I(P,T){return _?new Promise($=>{b==null||b.interpolate((T==null?void 0:T.interpolate)==="linear"?fo:yu).scaleTo(Tm(_,T==null?void 0:T.duration,T==null?void 0:T.ease,()=>$(!0)),P)}):!1}async function X(P,T){return _?new Promise($=>{b==null||b.interpolate((T==null?void 0:T.interpolate)==="linear"?fo:yu).scaleBy(Tm(_,T==null?void 0:T.duration,T==null?void 0:T.ease,()=>$(!0)),P)}):!1}function j(P){b==null||b.scaleExtent(P)}function z(P){b==null||b.translateExtent(P)}function V(P){const T=!Or(P)||P<0?0:P;b==null||b.clickDistance(T)}return{update:k,destroy:N,setViewport:B,setViewportConstrained:M,getViewport:U,scaleTo:I,scaleBy:X,setScaleExtent:j,setTranslateExtent:z,syncViewport:R,setClickDistance:V}}var el;(function(e){e.Line="line",e.Handle="handle"})(el||(el={}));function $I({width:e,prevWidth:t,height:r,prevHeight:a,affectsX:s,affectsY:o}){const c=e-t,d=r-a,f=[c>0?1:c<0?-1:0,d>0?1:d<0?-1:0];return c&&s&&(f[0]=f[0]*-1),d&&o&&(f[1]=f[1]*-1),f}function v1(e){const t=e.includes("right")||e.includes("left"),r=e.includes("bottom")||e.includes("top"),a=e.includes("left"),s=e.includes("top");return{isHorizontal:t,isVertical:r,affectsX:a,affectsY:s}}function aa(e,t){return Math.max(0,t-e)}function sa(e,t){return Math.max(0,e-t)}function du(e,t,r){return Math.max(0,t-e,e-r)}function _1(e,t){return e?!t:t}function qI(e,t,r,a,s,o,c,d){let{affectsX:f,affectsY:h}=t;const{isHorizontal:p,isVertical:g}=t,y=p&&g,{xSnapped:b,ySnapped:_}=r,{minWidth:E,maxWidth:S,minHeight:w,maxHeight:k}=a,{x:N,y:M,width:B,height:R,aspectRatio:U}=e;let I=Math.floor(p?b-e.pointerX:0),X=Math.floor(g?_-e.pointerY:0);const j=B+(f?-I:I),z=R+(h?-X:X),V=-o[0]*B,P=-o[1]*R;let T=du(j,E,S),$=du(z,w,k);if(c){let K=0,Z=0;f&&I<0?K=aa(N+I+V,c[0][0]):!f&&I>0&&(K=sa(N+j+V,c[1][0])),h&&X<0?Z=aa(M+X+P,c[0][1]):!h&&X>0&&(Z=sa(M+z+P,c[1][1])),T=Math.max(T,K),$=Math.max($,Z)}if(d){let K=0,Z=0;f&&I>0?K=sa(N+I,d[0][0]):!f&&I<0&&(K=aa(N+j,d[1][0])),h&&X>0?Z=sa(M+X,d[0][1]):!h&&X<0&&(Z=aa(M+z,d[1][1])),T=Math.max(T,K),$=Math.max($,Z)}if(s){if(p){const K=du(j/U,w,k)*U;if(T=Math.max(T,K),c){let Z=0;!f&&!h||f&&!h&&y?Z=sa(M+P+j/U,c[1][1])*U:Z=aa(M+P+(f?I:-I)/U,c[0][1])*U,T=Math.max(T,Z)}if(d){let Z=0;!f&&!h||f&&!h&&y?Z=aa(M+j/U,d[1][1])*U:Z=sa(M+(f?I:-I)/U,d[0][1])*U,T=Math.max(T,Z)}}if(g){const K=du(z*U,E,S)/U;if($=Math.max($,K),c){let Z=0;!f&&!h||h&&!f&&y?Z=sa(N+z*U+V,c[1][0])/U:Z=aa(N+(h?X:-X)*U+V,c[0][0])/U,$=Math.max($,Z)}if(d){let Z=0;!f&&!h||h&&!f&&y?Z=aa(N+z*U,d[1][0])/U:Z=sa(N+(h?X:-X)*U,d[0][0])/U,$=Math.max($,Z)}}}X=X+(X<0?$:-$),I=I+(I<0?T:-T),s&&(y?j>z*U?X=(_1(f,h)?-I:I)/U:I=(_1(f,h)?-X:X)*U:p?(X=I/U,h=f):(I=X*U,f=h));const O=f?N+I:N,H=h?M+X:M;return{width:B+(f?-I:I),height:R+(h?-X:X),x:o[0]*I*(f?-1:1)+O,y:o[1]*X*(h?-1:1)+H}}const kN={width:0,height:0,x:0,y:0},PI={...kN,pointerX:0,pointerY:0,aspectRatio:1};function FI(e,t,r){const a=t.position.x+e.position.x,s=t.position.y+e.position.y,o=e.measured.width??0,c=e.measured.height??0,d=r[0]*o,f=r[1]*c;return[[a-d,s-f],[a+o-d,s+c-f]]}function GI({domNode:e,nodeId:t,getStoreItems:r,onChange:a,onEnd:s}){const o=ir(e);let c={controlDirection:v1("bottom-right"),boundaries:{minWidth:0,minHeight:0,maxWidth:Number.MAX_VALUE,maxHeight:Number.MAX_VALUE},resizeDirection:void 0,keepAspectRatio:!1};function d({controlPosition:h,boundaries:p,keepAspectRatio:g,resizeDirection:y,onResizeStart:b,onResize:_,onResizeEnd:E,shouldResize:S}){let w={...kN},k={...PI};c={boundaries:p,resizeDirection:y,keepAspectRatio:g,controlDirection:v1(h)};let N,M=null,B=[],R,U,I,X=!1;const j=LE().on("start",z=>{const{nodeLookup:V,transform:P,snapGrid:T,snapToGrid:$,nodeOrigin:O,paneDomNode:H}=r();if(N=V.get(t),!N)return;M=(H==null?void 0:H.getBoundingClientRect())??null;const{xSnapped:K,ySnapped:Z}=ho(z.sourceEvent,{transform:P,snapGrid:T,snapToGrid:$,containerBounds:M});w={width:N.measured.width??0,height:N.measured.height??0,x:N.position.x??0,y:N.position.y??0},k={...w,pointerX:K,pointerY:Z,aspectRatio:w.width/w.height},R=void 0,U=Za(N.extent)?N.extent:void 0,N.parentId&&(N.extent==="parent"||N.expandParent)&&(R=V.get(N.parentId)),R&&N.extent==="parent"&&(U=[[0,0],[R.measured.width,R.measured.height]]),B=[],I=void 0;for(const[C,D]of V)if(D.parentId===t&&(B.push({id:C,position:{...D.position},extent:D.extent}),D.extent==="parent"||D.expandParent)){const Y=FI(D,N,D.origin??O);I?I=[[Math.min(Y[0][0],I[0][0]),Math.min(Y[0][1],I[0][1])],[Math.max(Y[1][0],I[1][0]),Math.max(Y[1][1],I[1][1])]]:I=Y}b==null||b(z,{...w})}).on("drag",z=>{const{transform:V,snapGrid:P,snapToGrid:T,nodeOrigin:$}=r(),O=ho(z.sourceEvent,{transform:V,snapGrid:P,snapToGrid:T,containerBounds:M}),H=[];if(!N)return;const{x:K,y:Z,width:C,height:D}=w,Y={},L=N.origin??$,{width:G,height:q,x:Q,y:J}=qI(k,c.controlDirection,O,c.boundaries,c.keepAspectRatio,L,U,I),W=G!==C,te=q!==D,ce=Q!==K&&W,fe=J!==Z&&te;if(!ce&&!fe&&!W&&!te)return;if((ce||fe||L[0]===1||L[1]===1)&&(Y.x=ce?Q:w.x,Y.y=fe?J:w.y,w.x=Y.x,w.y=Y.y,B.length>0)){const De=Q-K,$e=J-Z;for(const st of B)st.position={x:st.position.x-De+L[0]*(G-C),y:st.position.y-$e+L[1]*(q-D)},H.push(st)}if((W||te)&&(Y.width=W&&(!c.resizeDirection||c.resizeDirection==="horizontal")?G:w.width,Y.height=te&&(!c.resizeDirection||c.resizeDirection==="vertical")?q:w.height,w.width=Y.width,w.height=Y.height),R&&N.expandParent){const De=L[0]*(Y.width??0);Y.x&&Y.x{X&&(E==null||E(z,{...w}),s==null||s({...w}),X=!1)});o.call(j)}function f(){o.on(".drag",null)}return{update:d,destroy:f}}var Am={exports:{}},Mm={},Om={exports:{}},Rm={};/** + * @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 w1;function VI(){if(w1)return Rm;w1=1;var e=Mo();function t(g,y){return g===y&&(g!==0||1/g===1/y)||g!==g&&y!==y}var r=typeof Object.is=="function"?Object.is:t,a=e.useState,s=e.useEffect,o=e.useLayoutEffect,c=e.useDebugValue;function d(g,y){var b=y(),_=a({inst:{value:b,getSnapshot:y}}),E=_[0].inst,S=_[1];return o(function(){E.value=b,E.getSnapshot=y,f(E)&&S({inst:E})},[g,b,y]),s(function(){return f(E)&&S({inst:E}),g(function(){f(E)&&S({inst:E})})},[g]),c(b),b}function f(g){var y=g.getSnapshot;g=g.value;try{var b=y();return!r(g,b)}catch{return!0}}function h(g,y){return y()}var p=typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?h:d;return Rm.useSyncExternalStore=e.useSyncExternalStore!==void 0?e.useSyncExternalStore:p,Rm}var E1;function YI(){return E1||(E1=1,Om.exports=VI()),Om.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 N1;function XI(){if(N1)return Mm;N1=1;var e=Mo(),t=YI();function r(h,p){return h===p&&(h!==0||1/h===1/p)||h!==h&&p!==p}var a=typeof Object.is=="function"?Object.is:r,s=t.useSyncExternalStore,o=e.useRef,c=e.useEffect,d=e.useMemo,f=e.useDebugValue;return Mm.useSyncExternalStoreWithSelector=function(h,p,g,y,b){var _=o(null);if(_.current===null){var E={hasValue:!1,value:null};_.current=E}else E=_.current;_=d(function(){function w(R){if(!k){if(k=!0,N=R,R=y(R),b!==void 0&&E.hasValue){var U=E.value;if(b(U,R))return M=U}return M=R}if(U=M,a(N,R))return U;var I=y(R);return b!==void 0&&b(U,I)?(N=R,U):(N=R,M=I)}var k=!1,N,M,B=g===void 0?null:g;return[function(){return w(p())},B===null?void 0:function(){return w(B())}]},[p,g,y,b]);var S=s(h,_[0],_[1]);return c(function(){E.hasValue=!0,E.value=S},[S]),f(S),S},Mm}var S1;function KI(){return S1||(S1=1,Am.exports=XI()),Am.exports}var ZI=KI();const QI=Ao(ZI),WI={},k1=e=>{let t;const r=new Set,a=(p,g)=>{const y=typeof p=="function"?p(t):p;if(!Object.is(y,t)){const b=t;t=g??(typeof y!="object"||y===null)?y:Object.assign({},t,y),r.forEach(_=>_(t,b))}},s=()=>t,f={setState:a,getState:s,getInitialState:()=>h,subscribe:p=>(r.add(p),()=>r.delete(p)),destroy:()=>{(WI?"production":void 0)!=="production"&&console.warn("[DEPRECATED] The `destroy` method will be unsupported in a future version. Instead use unsubscribe function returned by subscribe. Everything will be garbage-collected if store is garbage-collected."),r.clear()}},h=t=e(a,s,f);return f},JI=e=>e?k1(e):k1,{useDebugValue:e8}=da,{useSyncExternalStoreWithSelector:t8}=QI,n8=e=>e;function CN(e,t=n8,r){const a=t8(e.subscribe,e.getState,e.getServerState||e.getInitialState,t,r);return e8(a),a}const C1=(e,t)=>{const r=JI(e),a=(s,o=t)=>CN(r,s,o);return Object.assign(a,r),a},r8=(e,t)=>e?C1(e,t):C1;function qt(e,t){if(Object.is(e,t))return!0;if(typeof e!="object"||e===null||typeof t!="object"||t===null)return!1;if(e instanceof Map&&t instanceof Map){if(e.size!==t.size)return!1;for(const[a,s]of e)if(!Object.is(s,t.get(a)))return!1;return!0}if(e instanceof Set&&t instanceof Set){if(e.size!==t.size)return!1;for(const a of e)if(!t.has(a))return!1;return!0}const r=Object.keys(e);if(r.length!==Object.keys(t).length)return!1;for(const a of r)if(!Object.prototype.hasOwnProperty.call(t,a)||!Object.is(e[a],t[a]))return!1;return!0}D_();const ld=ee.createContext(null),i8=ld.Provider,TN=Lr.error001("react");function dt(e,t){const r=ee.useContext(ld);if(r===null)throw new Error(TN);return CN(r,e,t)}function Lt(){const e=ee.useContext(ld);if(e===null)throw new Error(TN);return ee.useMemo(()=>({getState:e.getState,setState:e.setState,subscribe:e.subscribe}),[e])}const T1={display:"none"},a8={position:"absolute",width:1,height:1,margin:-1,border:0,padding:0,overflow:"hidden",clip:"rect(0px, 0px, 0px, 0px)",clipPath:"inset(100%)"},AN="react-flow__node-desc",MN="react-flow__edge-desc",s8="react-flow__aria-live",l8=e=>e.ariaLiveMessage,o8=e=>e.ariaLabelConfig;function c8({rfId:e}){const t=dt(l8);return m.jsx("div",{id:`${s8}-${e}`,"aria-live":"assertive","aria-atomic":"true",style:a8,children:t})}function u8({rfId:e,disableKeyboardA11y:t}){const r=dt(o8);return m.jsxs(m.Fragment,{children:[m.jsx("div",{id:`${AN}-${e}`,style:T1,children:t?r["node.a11yDescription.default"]:r["node.a11yDescription.keyboardDisabled"]}),m.jsx("div",{id:`${MN}-${e}`,style:T1,children:r["edge.a11yDescription.default"]}),!t&&m.jsx(c8,{rfId:e})]})}const od=ee.forwardRef(({position:e="top-left",children:t,className:r,style:a,...s},o)=>{const c=`${e}`.split("-");return m.jsx("div",{className:on(["react-flow__panel",r,...c]),style:a,ref:o,...s,children:t})});od.displayName="Panel";const A1="https://reactflow.dev?utm_source=attribution";function d8({proOptions:e,position:t="bottom-right"}){return e!=null&&e.hideAttribution?null:m.jsx(od,{position:t,className:"react-flow__attribution","data-message":`Please only hide this attribution when you are subscribed to React Flow Pro: ${A1}`,children:m.jsx("a",{href:A1,target:"_blank",rel:"noopener noreferrer","aria-label":"React Flow attribution",children:"React Flow"})})}const f8=e=>{const t=[],r=[];for(const[,a]of e.nodeLookup)a.selected&&t.push(a.internals.userNode);for(const[,a]of e.edgeLookup)a.selected&&r.push(a);return{selectedNodes:t,selectedEdges:r}},fu=e=>e.id;function h8(e,t){return qt(e.selectedNodes.map(fu),t.selectedNodes.map(fu))&&qt(e.selectedEdges.map(fu),t.selectedEdges.map(fu))}function m8({onSelectionChange:e}){const t=Lt(),{selectedNodes:r,selectedEdges:a}=dt(f8,h8);return ee.useEffect(()=>{const s={nodes:r,edges:a};e==null||e(s),t.getState().onSelectionChangeHandlers.forEach(o=>o(s))},[r,a,e]),null}const p8=e=>!!e.onSelectionChangeHandlers;function g8({onSelectionChange:e}){const t=dt(p8);return e||t?m.jsx(m8,{onSelectionChange:e}):null}const ON=[0,0],x8={x:0,y:0,zoom:1},b8=["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"],M1=[...b8,"rfId"],y8=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}),O1={translateExtent:No,nodeOrigin:ON,minZoom:.5,maxZoom:2,elementsSelectable:!0,noPanClassName:"nopan",rfId:"1"};function v8(e){const{setNodes:t,setEdges:r,setMinZoom:a,setMaxZoom:s,setTranslateExtent:o,setNodeExtent:c,reset:d,setDefaultNodesAndEdges:f}=dt(y8,qt),h=Lt();ee.useEffect(()=>(f(e.defaultNodes,e.defaultEdges),()=>{p.current=O1,d()}),[]);const p=ee.useRef(O1);return ee.useEffect(()=>{for(const g of M1){const y=e[g],b=p.current[g];y!==b&&(typeof e[g]>"u"||(g==="nodes"?t(y):g==="edges"?r(y):g==="minZoom"?a(y):g==="maxZoom"?s(y):g==="translateExtent"?o(y):g==="nodeExtent"?c(y):g==="ariaLabelConfig"?h.setState({ariaLabelConfig:iI(y)}):g==="fitView"?h.setState({fitViewQueued:y}):g==="fitViewOptions"?h.setState({fitViewOptions:y}):h.setState({[g]:y})))}p.current=e},M1.map(g=>e[g])),null}function R1(){return typeof window>"u"||!window.matchMedia?null:window.matchMedia("(prefers-color-scheme: dark)")}function _8(e){var a;const[t,r]=ee.useState(e==="system"?null:e);return ee.useEffect(()=>{if(e!=="system"){r(e);return}const s=R1(),o=()=>r(s!=null&&s.matches?"dark":"light");return o(),s==null||s.addEventListener("change",o),()=>{s==null||s.removeEventListener("change",o)}},[e]),t!==null?t:(a=R1())!=null&&a.matches?"dark":"light"}const j1=typeof document<"u"?document:null;function To(e=null,t={target:j1,actInsideInputWithModifier:!0}){const[r,a]=ee.useState(!1),s=ee.useRef(!1),o=ee.useRef(new Set([])),[c,d]=ee.useMemo(()=>{if(e!==null){const h=(Array.isArray(e)?e:[e]).filter(g=>typeof g=="string").map(g=>g.replace("+",` +`).replace(` + +`,` ++`).split(` +`)),p=h.reduce((g,y)=>g.concat(...y),[]);return[h,p]}return[[],[]]},[e]);return ee.useEffect(()=>{const f=(t==null?void 0:t.target)??j1,h=(t==null?void 0:t.actInsideInputWithModifier)??!0;if(e!==null){const p=b=>{var S,w;if(s.current=b.ctrlKey||b.metaKey||b.shiftKey||b.altKey,(!s.current||s.current&&!h)&&uN(b))return!1;const E=L1(b.code,d);if(o.current.add(b[E]),D1(c,o.current,!1)){const k=((w=(S=b.composedPath)==null?void 0:S.call(b))==null?void 0:w[0])||b.target,N=(k==null?void 0:k.nodeName)==="BUTTON"||(k==null?void 0:k.nodeName)==="A";t.preventDefault!==!1&&(s.current||!N)&&b.preventDefault(),a(!0)}},g=b=>{const _=L1(b.code,d);D1(c,o.current,!0)?(a(!1),o.current.clear()):o.current.delete(b[_]),b.key==="Meta"&&o.current.clear(),s.current=!1},y=()=>{o.current.clear(),a(!1)};return f==null||f.addEventListener("keydown",p),f==null||f.addEventListener("keyup",g),window.addEventListener("blur",y),window.addEventListener("contextmenu",y),()=>{f==null||f.removeEventListener("keydown",p),f==null||f.removeEventListener("keyup",g),window.removeEventListener("blur",y),window.removeEventListener("contextmenu",y)}}},[e,a]),r}function D1(e,t,r){return e.filter(a=>r||a.length===t.size).some(a=>a.every(s=>t.has(s)))}function L1(e,t){return t.includes(e)?"code":"key"}const w8=()=>{const e=Lt();return ee.useMemo(()=>({zoomIn:async t=>{const{panZoom:r}=e.getState();return r?r.scaleBy(1.2,t):!1},zoomOut:async t=>{const{panZoom:r}=e.getState();return r?r.scaleBy(1/1.2,t):!1},zoomTo:async(t,r)=>{const{panZoom:a}=e.getState();return a?a.scaleTo(t,r):!1},getZoom:()=>e.getState().transform[2],setViewport:async(t,r)=>{const{transform:[a,s,o],panZoom:c}=e.getState();return c?(await c.setViewport({x:t.x??a,y:t.y??s,zoom:t.zoom??o},r),!0):!1},getViewport:()=>{const[t,r,a]=e.getState().transform;return{x:t,y:r,zoom:a}},setCenter:async(t,r,a)=>e.getState().setCenter(t,r,a),fitBounds:async(t,r)=>{const{width:a,height:s,minZoom:o,maxZoom:c,panZoom:d}=e.getState(),f=og(t,a,s,o,c,(r==null?void 0:r.padding)??.1);return d?(await d.setViewport(f,{duration:r==null?void 0:r.duration,ease:r==null?void 0:r.ease,interpolate:r==null?void 0:r.interpolate}),!0):!1},screenToFlowPosition:(t,r={})=>{const{transform:a,snapGrid:s,snapToGrid:o,domNode:c}=e.getState();if(!c)return t;const{x:d,y:f}=c.getBoundingClientRect(),h={x:t.x-d,y:t.y-f},p=r.snapGrid??s,g=r.snapToGrid??o;return Ho(h,a,g,p)},flowToScreenPosition:t=>{const{transform:r,domNode:a}=e.getState();if(!a)return t;const{x:s,y:o}=a.getBoundingClientRect(),c=Js(t,r);return{x:c.x+s,y:c.y+o}}}),[])};function RN(e,t){const r=[],a=new Map,s=[];for(const o of e)if(o.type==="add"){s.push(o);continue}else if(o.type==="remove"||o.type==="replace")a.set(o.id,[o]);else{const c=a.get(o.id);c?c.push(o):a.set(o.id,[o])}for(const o of t){const c=a.get(o.id);if(!c){r.push(o);continue}if(c[0].type==="remove")continue;if(c[0].type==="replace"){r.push({...c[0].item});continue}const d={...o};for(const f of c)E8(f,d);r.push(d)}return s.length&&s.forEach(o=>{o.index!==void 0?r.splice(o.index,0,{...o.item}):r.push({...o.item})}),r}function E8(e,t){switch(e.type){case"select":{t.selected=e.selected;break}case"position":{typeof e.position<"u"&&(t.position=e.position),typeof e.dragging<"u"&&(t.dragging=e.dragging);break}case"dimensions":{typeof e.dimensions<"u"&&(t.measured={...e.dimensions},e.setAttributes&&((e.setAttributes===!0||e.setAttributes==="width")&&(t.width=e.dimensions.width),(e.setAttributes===!0||e.setAttributes==="height")&&(t.height=e.dimensions.height))),typeof e.resizing=="boolean"&&(t.resizing=e.resizing);break}}}function jN(e,t){return RN(e,t)}function DN(e,t){return RN(e,t)}function Ha(e,t){return{id:e,type:"select",selected:t}}function qs(e,t=new Set,r=!1){const a=[];for(const[s,o]of e){const c=t.has(s);!(o.selected===void 0&&!c)&&o.selected!==c&&(r&&(o.selected=c),a.push(Ha(o.id,c)))}return a}function z1({items:e=[],lookup:t}){var s;const r=[],a=new Map(e.map(o=>[o.id,o]));for(const[o,c]of e.entries()){const d=t.get(c.id),f=((s=d==null?void 0:d.internals)==null?void 0:s.userNode)??d;f!==void 0&&f!==c&&r.push({id:c.id,item:c,type:"replace"}),f===void 0&&r.push({item:c,type:"add",index:o})}for(const[o]of t)a.get(o)===void 0&&r.push({id:o,type:"remove"});return r}function I1(e){return{id:e.id,type:"remove"}}const N8=sN();function S8(e,t,r={}){return uI(e,t,{...r,onError:r.onError??N8})}const B1=e=>Kz(e),k8=e=>tN(e);function LN(e){return ee.forwardRef(e)}const zN=typeof window<"u"?ee.useLayoutEffect:ee.useEffect;function U1(e){const[t,r]=ee.useState(BigInt(0)),[a]=ee.useState(()=>C8(()=>r(s=>s+BigInt(1))));return zN(()=>{const s=a.get();s.length&&(e(s),a.reset())},[t]),a}function C8(e){let t=[];return{get:()=>t,reset:()=>{t=[]},push:r=>{t.push(r),e()}}}const IN=ee.createContext(null);function T8({children:e}){const t=Lt(),r=ee.useCallback(d=>{const{nodes:f=[],setNodes:h,hasDefaultNodes:p,onNodesChange:g,nodeLookup:y,fitViewQueued:b,onNodesChangeMiddlewareMap:_}=t.getState();let E=f;for(const w of d)E=typeof w=="function"?w(E):w;let S=z1({items:E,lookup:y});for(const w of _.values())S=w(S);p&&h(E),S.length>0?g==null||g(S):b&&window.requestAnimationFrame(()=>{const{fitViewQueued:w,nodes:k,setNodes:N}=t.getState();w&&N(k)})},[]),a=U1(r),s=ee.useCallback(d=>{const{edges:f=[],setEdges:h,hasDefaultEdges:p,onEdgesChange:g,edgeLookup:y}=t.getState();let b=f;for(const _ of d)b=typeof _=="function"?_(b):_;p?h(b):g&&g(z1({items:b,lookup:y}))},[]),o=U1(s),c=ee.useMemo(()=>({nodeQueue:a,edgeQueue:o}),[]);return m.jsx(IN.Provider,{value:c,children:e})}function A8(){const e=ee.useContext(IN);if(!e)throw new Error("useBatchContext must be used within a BatchProvider");return e}const M8=e=>!!e.panZoom;function $o(){const e=w8(),t=Lt(),r=A8(),a=dt(M8),s=ee.useMemo(()=>{const o=g=>t.getState().nodeLookup.get(g),c=g=>{r.nodeQueue.push(g)},d=g=>{r.edgeQueue.push(g)},f=g=>{var w,k;const{nodeLookup:y,nodeOrigin:b}=t.getState(),_=B1(g)?g:y.get(g.id),E=_.parentId?oN(_.position,_.measured,_.parentId,y,b):_.position,S={..._,position:E,width:((w=_.measured)==null?void 0:w.width)??_.width,height:((k=_.measured)==null?void 0:k.height)??_.height};return ko(S)},h=(g,y,b={replace:!1})=>{c(_=>_.map(E=>{if(E.id===g){const S=typeof y=="function"?y(E):y;return b.replace&&B1(S)?S:{...E,...S}}return E}))},p=(g,y,b={replace:!1})=>{d(_=>_.map(E=>{if(E.id===g){const S=typeof y=="function"?y(E):y;return b.replace&&k8(S)?S:{...E,...S}}return E}))};return{getNodes:()=>t.getState().nodes.map(g=>({...g})),getNode:g=>{var y;return(y=o(g))==null?void 0:y.internals.userNode},getInternalNode:o,getEdges:()=>{const{edges:g=[]}=t.getState();return g.map(y=>({...y}))},getEdge:g=>t.getState().edgeLookup.get(g),setNodes:c,setEdges:d,addNodes:g=>{const y=Array.isArray(g)?g:[g];r.nodeQueue.push(b=>[...b,...y])},addEdges:g=>{const y=Array.isArray(g)?g:[g];r.edgeQueue.push(b=>[...b,...y])},toObject:()=>{const{nodes:g=[],edges:y=[],transform:b}=t.getState(),[_,E,S]=b;return{nodes:g.map(w=>({...w})),edges:y.map(w=>({...w})),viewport:{x:_,y:E,zoom:S}}},deleteElements:async({nodes:g=[],edges:y=[]})=>{const{nodes:b,edges:_,onNodesDelete:E,onEdgesDelete:S,triggerNodeChanges:w,triggerEdgeChanges:k,onDelete:N,onBeforeDelete:M}=t.getState(),{nodes:B,edges:R}=await eI({nodesToRemove:g,edgesToRemove:y,nodes:b,edges:_,onBeforeDelete:M}),U=R.length>0,I=B.length>0;if(U){const X=R.map(I1);S==null||S(R),k(X)}if(I){const X=B.map(I1);E==null||E(B),w(X)}return(I||U)&&(N==null||N({nodes:B,edges:R})),{deletedNodes:B,deletedEdges:R}},getIntersectingNodes:(g,y=!0,b)=>{const _=c1(g),E=_?g:f(g),S=b!==void 0;return E?(b||t.getState().nodes).filter(w=>{const k=t.getState().nodeLookup.get(w.id);if(k&&!_&&(w.id===g.id||!k.internals.positionAbsolute))return!1;const N=ko(S?w:k),M=Uu(N,E);return y&&M>0||M>=N.width*N.height||M>=E.width*E.height}):[]},isNodeIntersecting:(g,y,b=!0)=>{const E=c1(g)?g:f(g);if(!E)return!1;const S=Uu(E,y);return b&&S>0||S>=y.width*y.height||S>=E.width*E.height},updateNode:h,updateNodeData:(g,y,b={replace:!1})=>{h(g,_=>{const E=typeof y=="function"?y(_):y;return b.replace?{..._,data:E}:{..._,data:{..._.data,...E}}},b)},updateEdge:p,updateEdgeData:(g,y,b={replace:!1})=>{p(g,_=>{const E=typeof y=="function"?y(_):y;return b.replace?{..._,data:E}:{..._,data:{..._.data,...E}}},b)},getNodesBounds:g=>{const{nodeLookup:y,nodeOrigin:b}=t.getState();return Zz(g,{nodeLookup:y,nodeOrigin:b})},getHandleConnections:({type:g,id:y,nodeId:b})=>{var _;return Array.from(((_=t.getState().connectionLookup.get(`${b}-${g}${y?`-${y}`:""}`))==null?void 0:_.values())??[])},getNodeConnections:({type:g,handleId:y,nodeId:b})=>{var _;return Array.from(((_=t.getState().connectionLookup.get(`${b}${g?y?`-${g}-${y}`:`-${g}`:""}`))==null?void 0:_.values())??[])},fitView:async g=>{const y=t.getState().fitViewResolver??rI();return t.setState({fitViewQueued:!0,fitViewOptions:g,fitViewResolver:y}),r.nodeQueue.push(b=>[...b]),y.promise}}},[]);return ee.useMemo(()=>({...s,...e,viewportInitialized:a}),[a])}const H1=e=>e.selected,O8=typeof window<"u"?window:void 0;function R8({deleteKeyCode:e,multiSelectionKeyCode:t}){const r=Lt(),{deleteElements:a}=$o(),s=To(e,{actInsideInputWithModifier:!1}),o=To(t,{target:O8});ee.useEffect(()=>{if(s){const{edges:c,nodes:d}=r.getState();a({nodes:d.filter(H1),edges:c.filter(H1)}),r.setState({nodesSelectionActive:!1})}},[s]),ee.useEffect(()=>{r.setState({multiSelectionActive:o})},[o])}function j8(e){const t=Lt();ee.useEffect(()=>{const r=()=>{var s,o,c,d;if(!e.current||!(((o=(s=e.current).checkVisibility)==null?void 0:o.call(s))??!0))return!1;const a=cg(e.current);(a.height===0||a.width===0)&&((d=(c=t.getState()).onError)==null||d.call(c,"004",Lr.error004())),t.setState({width:a.width||500,height:a.height||500})};if(e.current){r(),window.addEventListener("resize",r);const a=new ResizeObserver(()=>r());return a.observe(e.current),()=>{window.removeEventListener("resize",r),a&&e.current&&a.unobserve(e.current)}}},[])}const cd={position:"absolute",width:"100%",height:"100%",top:0,left:0},D8=e=>({userSelectionActive:e.userSelectionActive,lib:e.lib,connectionInProgress:e.connection.inProgress});function L8({onPaneContextMenu:e,zoomOnScroll:t=!0,zoomOnPinch:r=!0,panOnScroll:a=!1,panOnScrollSpeed:s=.5,panOnScrollMode:o=Fa.Free,zoomOnDoubleClick:c=!0,panOnDrag:d=!0,defaultViewport:f,translateExtent:h,minZoom:p,maxZoom:g,zoomActivationKeyCode:y,preventScrolling:b=!0,children:_,noWheelClassName:E,noPanClassName:S,onViewportChange:w,isControlledViewport:k,paneClickDistance:N,selectionOnDrag:M}){const B=Lt(),R=ee.useRef(null),{userSelectionActive:U,lib:I,connectionInProgress:X}=dt(D8,qt),j=To(y),z=ee.useRef();j8(R);const V=ee.useCallback(P=>{w==null||w({x:P[0],y:P[1],zoom:P[2]}),k||B.setState({transform:P})},[w,k]);return ee.useEffect(()=>{if(R.current){z.current=HI({domNode:R.current,minZoom:p,maxZoom:g,translateExtent:h,viewport:f,onDraggingChange:O=>B.setState(H=>H.paneDragging===O?H:{paneDragging:O}),onPanZoomStart:(O,H)=>{const{onViewportChangeStart:K,onMoveStart:Z}=B.getState();Z==null||Z(O,H),K==null||K(H)},onPanZoom:(O,H)=>{const{onViewportChange:K,onMove:Z}=B.getState();Z==null||Z(O,H),K==null||K(H)},onPanZoomEnd:(O,H)=>{const{onViewportChangeEnd:K,onMoveEnd:Z}=B.getState();Z==null||Z(O,H),K==null||K(H)}});const{x:P,y:T,zoom:$}=z.current.getViewport();return B.setState({panZoom:z.current,transform:[P,T,$],domNode:R.current.closest(".react-flow")}),()=>{var O;(O=z.current)==null||O.destroy()}}},[]),ee.useEffect(()=>{var P;(P=z.current)==null||P.update({onPaneContextMenu:e,zoomOnScroll:t,zoomOnPinch:r,panOnScroll:a,panOnScrollSpeed:s,panOnScrollMode:o,zoomOnDoubleClick:c,panOnDrag:d,zoomActivationKeyPressed:j,preventScrolling:b,noPanClassName:S,userSelectionActive:U,noWheelClassName:E,lib:I,onTransformChange:V,connectionInProgress:X,selectionOnDrag:M,paneClickDistance:N})},[e,t,r,a,s,o,c,d,j,b,S,U,E,I,V,X,M,N]),m.jsx("div",{className:"react-flow__renderer",ref:R,style:cd,children:_})}const z8=e=>({userSelectionActive:e.userSelectionActive,userSelectionRect:e.userSelectionRect});function I8(){const{userSelectionActive:e,userSelectionRect:t}=dt(z8,qt);return e&&t?m.jsx("div",{className:"react-flow__selection react-flow__container",style:{width:t.width,height:t.height,transform:`translate(${t.x}px, ${t.y}px)`}}):null}const jm=(e,t)=>r=>{r.target===t.current&&(e==null||e(r))},B8=e=>({userSelectionActive:e.userSelectionActive,elementsSelectable:e.elementsSelectable,dragging:e.paneDragging,panBy:e.panBy,autoPanSpeed:e.autoPanSpeed});function U8({isSelecting:e,selectionKeyPressed:t,selectionMode:r=So.Full,panOnDrag:a,autoPanOnSelection:s,paneClickDistance:o,selectionOnDrag:c,onSelectionStart:d,onSelectionEnd:f,onPaneClick:h,onPaneContextMenu:p,onPaneScroll:g,onPaneMouseEnter:y,onPaneMouseMove:b,onPaneMouseLeave:_,children:E}){const S=ee.useRef(0),w=Lt(),{userSelectionActive:k,elementsSelectable:N,dragging:M,panBy:B,autoPanSpeed:R}=dt(B8,qt),U=N&&(e||k),I=ee.useRef(null),X=ee.useRef(),j=ee.useRef(new Set),z=ee.useRef(new Set),V=ee.useRef(!1),P=ee.useRef(!1),T=ee.useRef({x:0,y:0}),$=ee.useRef(!1),O=W=>{if(P.current||V.current||w.getState().connection.inProgress){P.current=!1,V.current=!1;return}h==null||h(W),w.getState().resetSelectedElements(),w.setState({nodesSelectionActive:!1})},H=W=>{if(Array.isArray(a)&&(a!=null&&a.includes(2))){W.preventDefault();return}p==null||p(W)},K=g?W=>g(W):void 0,Z=W=>{P.current&&(W.stopPropagation(),P.current=!1)},C=W=>{var st,Rt;const{domNode:te,transform:ce}=w.getState();if(X.current=te==null?void 0:te.getBoundingClientRect(),!X.current)return;const fe=W.target===I.current;if(!fe&&!!W.target.closest(".nokey")||!e||!(c&&fe||t)||W.button!==0||!W.isPrimary)return;(Rt=(st=W.target)==null?void 0:st.setPointerCapture)==null||Rt.call(st,W.pointerId),P.current=!1;const{x:Ne,y:De}=Rr(W.nativeEvent,X.current),$e=Ho({x:Ne,y:De},ce);w.setState({userSelectionRect:{width:0,height:0,startX:$e.x,startY:$e.y,x:Ne,y:De}}),fe||(W.stopPropagation(),W.preventDefault())};function D(W,te){const{userSelectionRect:ce}=w.getState();if(!ce)return;const{transform:fe,nodeLookup:xe,edgeLookup:we,connectionLookup:Ne,triggerNodeChanges:De,triggerEdgeChanges:$e,defaultEdgeOptions:st}=w.getState(),Rt={x:ce.startX,y:ce.startY},{x:Xt,y:Pt}=Js(Rt,fe),Kt={startX:Rt.x,startY:Rt.y,x:WIt.id)),z.current=new Set;const ct=(st==null?void 0:st.selectable)??!0;for(const It of j.current){const ue=Ne.get(It);if(ue)for(const{edgeId:be}of ue.values()){const Oe=we.get(be);Oe&&(Oe.selectable??ct)&&z.current.add(be)}}if(!u1(Yn,j.current)){const It=qs(xe,j.current,!0);De(It)}if(!u1(Nn,z.current)){const It=qs(we,z.current);$e(It)}w.setState({userSelectionRect:Kt,userSelectionActive:!0,nodesSelectionActive:!1})}function Y(){if(!s||!X.current)return;const[W,te]=lg(T.current,X.current,R);B({x:W,y:te}).then(ce=>{if(!P.current||!ce){S.current=requestAnimationFrame(Y);return}const{x:fe,y:xe}=T.current;D(fe,xe),S.current=requestAnimationFrame(Y)})}const L=()=>{cancelAnimationFrame(S.current),S.current=0,$.current=!1};ee.useEffect(()=>()=>L(),[]);const G=W=>{const{userSelectionRect:te,transform:ce,resetSelectedElements:fe}=w.getState();if(!X.current||!te)return;const{x:xe,y:we}=Rr(W.nativeEvent,X.current);T.current={x:xe,y:we};const Ne=Js({x:te.startX,y:te.startY},ce);if(!P.current){const De=t?0:o;if(Math.hypot(xe-Ne.x,we-Ne.y)<=De)return;fe(),d==null||d(W)}P.current=!0,$.current||(Y(),$.current=!0),D(xe,we)},q=W=>{var te,ce;if(!U){W.target===I.current&&w.getState().connection.inProgress&&(V.current=!0);return}W.button===0&&((ce=(te=W.target)==null?void 0:te.releasePointerCapture)==null||ce.call(te,W.pointerId),!k&&W.target===I.current&&w.getState().userSelectionRect&&(O==null||O(W)),w.setState({userSelectionActive:!1,userSelectionRect:null}),P.current&&(f==null||f(W),w.setState({nodesSelectionActive:j.current.size>0})),L())},Q=W=>{var te,ce;(ce=(te=W.target)==null?void 0:te.releasePointerCapture)==null||ce.call(te,W.pointerId),L()},J=a===!0||Array.isArray(a)&&a.includes(0);return m.jsxs("div",{className:on(["react-flow__pane",{draggable:J,dragging:M,selection:e}]),onClick:U?void 0:jm(O,I),onContextMenu:jm(H,I),onWheel:jm(K,I),onPointerEnter:U?void 0:y,onPointerMove:U?G:b,onPointerUp:q,onPointerCancel:U?Q:void 0,onPointerDownCapture:U?C:void 0,onClickCapture:U?Z:void 0,onPointerLeave:_,ref:I,style:cd,children:[E,m.jsx(I8,{})]})}function bp({id:e,store:t,unselect:r=!1,nodeRef:a}){const{addSelectedNodes:s,unselectNodesAndEdges:o,multiSelectionActive:c,nodeLookup:d,onError:f}=t.getState(),h=d.get(e);if(!h){f==null||f("012",Lr.error012(e));return}t.setState({nodesSelectionActive:!1}),h.selected?(r||h.selected&&c)&&(o({nodes:[h],edges:[]}),requestAnimationFrame(()=>{var p;return(p=a==null?void 0:a.current)==null?void 0:p.blur()})):s([e])}function BN({nodeRef:e,disabled:t=!1,noDragClassName:r,handleSelector:a,nodeId:s,isSelectable:o,nodeClickDistance:c}){const d=Lt(),[f,h]=ee.useState(!1),p=ee.useRef();return ee.useEffect(()=>{if(!t)return p.current=kI({getStoreItems:()=>d.getState(),onNodeMouseDown:g=>{bp({id:g,store:d,nodeRef:e})},onDragStart:()=>{h(!0)},onDragStop:()=>{h(!1)}}),()=>{var g;(g=p.current)==null||g.destroy(),p.current=void 0}},[t,d,e]),ee.useEffect(()=>{t||!e.current||!p.current||p.current.update({noDragClassName:r,handleSelector:a,domNode:e.current,isSelectable:o,nodeId:s,nodeClickDistance:c})},[r,a,t,o,e,s,c]),f}const H8=e=>t=>t.selected&&(t.draggable||e&&typeof t.draggable>"u");function UN(){const e=Lt();return ee.useCallback(r=>{const{nodeExtent:a,snapToGrid:s,snapGrid:o,nodesDraggable:c,onError:d,updateNodePositions:f,nodeLookup:h,nodeOrigin:p}=e.getState(),g=new Map,y=H8(c),b=s?o[0]:5,_=s?o[1]:5,E=r.direction.x*b*r.factor,S=r.direction.y*_*r.factor;for(const[,w]of h){if(!y(w))continue;let k={x:w.internals.positionAbsolute.x+E,y:w.internals.positionAbsolute.y+S};s&&(k=Uo(k,o));const{position:N,positionAbsolute:M}=nN({nodeId:w.id,nextPosition:k,nodeLookup:h,nodeExtent:a,nodeOrigin:p,onError:d});w.position=N,w.internals.positionAbsolute=M,g.set(w.id,w)}f(g)},[])}const pg=ee.createContext(null),$8=pg.Provider;pg.Consumer;const HN=()=>ee.useContext(pg),q8=e=>({connectOnClick:e.connectOnClick,noPanClassName:e.noPanClassName,rfId:e.rfId}),$N=ee.createContext(null);function P8({children:e}){const t=dt(q8,qt);return m.jsx($N.Provider,{value:t,children:e})}function F8(){const e=ee.useContext($N);if(!e)throw new Error("useHandleConfig must be used within a HandleConfigProvider");return e}const G8={connectingFrom:!1,connectingTo:!1,clickConnecting:!1,isPossibleEndHandle:!0,connectionInProcess:!1,clickConnectionInProcess:!1,valid:!1},V8=(e,t,r)=>a=>{const{connectionClickStartHandle:s,connectionMode:o,connection:c}=a,{fromHandle:d,toHandle:f,isValid:h}=c;if(!d&&!s)return G8;const p=(f==null?void 0:f.nodeId)===e&&(f==null?void 0:f.id)===t&&(f==null?void 0:f.type)===r;return{connectingFrom:(d==null?void 0:d.nodeId)===e&&(d==null?void 0:d.id)===t&&(d==null?void 0:d.type)===r,connectingTo:p,clickConnecting:(s==null?void 0:s.nodeId)===e&&(s==null?void 0:s.id)===t&&(s==null?void 0:s.type)===r,isPossibleEndHandle:o===Qs.Strict?(d==null?void 0:d.type)!==r:e!==(d==null?void 0:d.nodeId)||t!==(d==null?void 0:d.id),connectionInProcess:!!d,clickConnectionInProcess:!!s,valid:p&&h}};function Y8({type:e="source",position:t=ze.Top,isValidConnection:r,isConnectable:a=!0,isConnectableStart:s=!0,isConnectableEnd:o=!0,id:c,onConnect:d,children:f,className:h,onMouseDown:p,onTouchStart:g,...y},b){var $,O;const _=c||null,E=e==="target",S=Lt(),w=HN(),{connectOnClick:k,noPanClassName:N,rfId:M}=F8(),{connectingFrom:B,connectingTo:R,clickConnecting:U,isPossibleEndHandle:I,connectionInProcess:X,clickConnectionInProcess:j,valid:z}=dt(V8(w,_,e),qt);w||(O=($=S.getState()).onError)==null||O.call($,"010",Lr.error010());const V=H=>{const{defaultEdgeOptions:K,onConnect:Z,hasDefaultEdges:C}=S.getState(),D={...K,...H};if(C){const{edges:Y,setEdges:L,onError:G}=S.getState();L(S8(D,Y,{onError:G}))}Z==null||Z(D),d==null||d(D)},P=H=>{if(!w)return;const K=dN(H.nativeEvent);if(s&&(K&&H.button===0||!K)){const Z=S.getState();xp.onPointerDown(H.nativeEvent,{handleDomNode:H.currentTarget,autoPanOnConnect:Z.autoPanOnConnect,connectionMode:Z.connectionMode,connectionRadius:Z.connectionRadius,domNode:Z.domNode,nodeLookup:Z.nodeLookup,lib:Z.lib,isTarget:E,handleId:_,nodeId:w,flowId:Z.rfId,panBy:Z.panBy,cancelConnection:Z.cancelConnection,onConnectStart:Z.onConnectStart,onConnectEnd:(...C)=>{var D,Y;return(Y=(D=S.getState()).onConnectEnd)==null?void 0:Y.call(D,...C)},updateConnection:Z.updateConnection,onConnect:V,isValidConnection:r||((...C)=>{var D,Y;return((Y=(D=S.getState()).isValidConnection)==null?void 0:Y.call(D,...C))??!0}),getTransform:()=>S.getState().transform,getFromHandle:()=>S.getState().connection.fromHandle,autoPanSpeed:Z.autoPanSpeed,dragThreshold:Z.connectionDragThreshold})}K?p==null||p(H):g==null||g(H)},T=H=>{const{onClickConnectStart:K,onClickConnectEnd:Z,connectionClickStartHandle:C,connectionMode:D,isValidConnection:Y,lib:L,rfId:G,nodeLookup:q,connection:Q}=S.getState();if(!w||!C&&!s)return;if(!C){K==null||K(H.nativeEvent,{nodeId:w,handleId:_,handleType:e}),S.setState({connectionClickStartHandle:{nodeId:w,type:e,id:_}});return}const J=cN(H.target),W=r||Y,{connection:te,isValid:ce}=xp.isValid(H.nativeEvent,{handle:{nodeId:w,id:_,type:e},connectionMode:D,fromNodeId:C.nodeId,fromHandleId:C.id||null,fromType:C.type,isValidConnection:W,flowId:G,doc:J,lib:L,nodeLookup:q});ce&&te&&V(te);const fe=structuredClone(Q);delete fe.inProgress,fe.toPosition=fe.toHandle?fe.toHandle.position:null,Z==null||Z(H,fe),S.setState({connectionClickStartHandle:null})};return m.jsx("div",{"data-handleid":_,"data-nodeid":w,"data-handlepos":t,"data-id":`${M}-${w}-${_}-${e}`,className:on(["react-flow__handle",`react-flow__handle-${t}`,"nodrag",N,h,{source:!E,target:E,connectable:a,connectablestart:s,connectableend:o,clickconnecting:U,connectingfrom:B,connectingto:R,valid:z,connectionindicator:a&&(!X||I)&&(X||j?o:s)}]),onMouseDown:P,onTouchStart:P,onClick:k?T:void 0,ref:b,...y,children:f})}const tl=ee.memo(LN(Y8));function X8({data:e,isConnectable:t,sourcePosition:r=ze.Bottom}){return m.jsxs(m.Fragment,{children:[e==null?void 0:e.label,m.jsx(tl,{type:"source",position:r,isConnectable:t})]})}function K8({data:e,isConnectable:t,targetPosition:r=ze.Top,sourcePosition:a=ze.Bottom}){return m.jsxs(m.Fragment,{children:[m.jsx(tl,{type:"target",position:r,isConnectable:t}),e==null?void 0:e.label,m.jsx(tl,{type:"source",position:a,isConnectable:t})]})}function Z8(){return null}function Q8({data:e,isConnectable:t,targetPosition:r=ze.Top}){return m.jsxs(m.Fragment,{children:[m.jsx(tl,{type:"target",position:r,isConnectable:t}),e==null?void 0:e.label]})}const Hu={ArrowUp:{x:0,y:-1},ArrowDown:{x:0,y:1},ArrowLeft:{x:-1,y:0},ArrowRight:{x:1,y:0}},$1={input:X8,default:K8,output:Q8,group:Z8};function W8(e){var t,r,a,s;return e.internals.handleBounds===void 0?{width:e.width??e.initialWidth??((t=e.style)==null?void 0:t.width),height:e.height??e.initialHeight??((r=e.style)==null?void 0:r.height)}:{width:e.width??((a=e.style)==null?void 0:a.width),height:e.height??((s=e.style)==null?void 0:s.height)}}const J8=e=>{const{width:t,height:r,x:a,y:s}=Bo(e.nodeLookup,{filter:o=>!!o.selected});return{width:Or(t)?t:null,height:Or(r)?r:null,userSelectionActive:e.userSelectionActive,transformString:`translate(${e.transform[0]}px,${e.transform[1]}px) scale(${e.transform[2]}) translate(${a}px,${s}px)`}};function e9({onSelectionContextMenu:e,noPanClassName:t,disableKeyboardA11y:r}){const a=Lt(),{width:s,height:o,transformString:c,userSelectionActive:d}=dt(J8,qt),f=UN(),h=ee.useRef(null);ee.useEffect(()=>{var b;r||(b=h.current)==null||b.focus({preventScroll:!0})},[r]);const p=!d&&s!==null&&o!==null;if(BN({nodeRef:h,disabled:!p}),!p)return null;const g=e?b=>{const _=a.getState().nodes.filter(E=>E.selected);e(b,_)}:void 0,y=b=>{Object.prototype.hasOwnProperty.call(Hu,b.key)&&(b.preventDefault(),f({direction:Hu[b.key],factor:b.shiftKey?4:1}))};return m.jsx("div",{className:on(["react-flow__nodesselection","react-flow__container",t]),style:{transform:c},children:m.jsx("div",{ref:h,className:"react-flow__nodesselection-rect",onContextMenu:g,tabIndex:r?void 0:-1,onKeyDown:r?void 0:y,style:{width:s,height:o}})})}const q1=typeof window<"u"?window:void 0,t9=e=>({nodesSelectionActive:e.nodesSelectionActive,userSelectionActive:e.userSelectionActive});function qN({children:e,onPaneClick:t,onPaneMouseEnter:r,onPaneMouseMove:a,onPaneMouseLeave:s,onPaneContextMenu:o,onPaneScroll:c,paneClickDistance:d,deleteKeyCode:f,selectionKeyCode:h,selectionOnDrag:p,selectionMode:g,onSelectionStart:y,onSelectionEnd:b,multiSelectionKeyCode:_,panActivationKeyCode:E,zoomActivationKeyCode:S,elementsSelectable:w,zoomOnScroll:k,zoomOnPinch:N,panOnScroll:M,panOnScrollSpeed:B,panOnScrollMode:R,zoomOnDoubleClick:U,panOnDrag:I,autoPanOnSelection:X,defaultViewport:j,translateExtent:z,minZoom:V,maxZoom:P,preventScrolling:T,onSelectionContextMenu:$,noWheelClassName:O,noPanClassName:H,disableKeyboardA11y:K,onViewportChange:Z,isControlledViewport:C}){const{nodesSelectionActive:D,userSelectionActive:Y}=dt(t9,qt),L=To(h,{target:q1}),G=To(E,{target:q1}),q=G||I,Q=G||M,J=p&&q!==!0,W=L||Y||J;return R8({deleteKeyCode:f,multiSelectionKeyCode:_}),m.jsx(L8,{onPaneContextMenu:o,elementsSelectable:w,zoomOnScroll:k,zoomOnPinch:N,panOnScroll:Q,panOnScrollSpeed:B,panOnScrollMode:R,zoomOnDoubleClick:U,panOnDrag:!L&&q,defaultViewport:j,translateExtent:z,minZoom:V,maxZoom:P,zoomActivationKeyCode:S,preventScrolling:T,noWheelClassName:O,noPanClassName:H,onViewportChange:Z,isControlledViewport:C,paneClickDistance:d,selectionOnDrag:J,children:m.jsxs(U8,{onSelectionStart:y,onSelectionEnd:b,onPaneClick:t,onPaneMouseEnter:r,onPaneMouseMove:a,onPaneMouseLeave:s,onPaneContextMenu:o,onPaneScroll:c,panOnDrag:q,autoPanOnSelection:X,isSelecting:!!W,selectionMode:g,selectionKeyPressed:L,paneClickDistance:d,selectionOnDrag:J,children:[e,D&&m.jsx(e9,{onSelectionContextMenu:$,noPanClassName:H,disableKeyboardA11y:K})]})})}qN.displayName="FlowRenderer";const n9=ee.memo(qN),r9=e=>t=>e?sg(t.nodeLookup,{x:0,y:0,width:t.width,height:t.height},t.transform,!0).map(r=>r.id):Array.from(t.nodeLookup.keys());function i9(e){return dt(ee.useCallback(r9(e),[e]),qt)}const a9=e=>e.updateNodeInternals;function s9(){const e=dt(a9),[t]=ee.useState(()=>typeof ResizeObserver>"u"?null:new ResizeObserver(r=>{const a=new Map;r.forEach(s=>{const o=s.target.getAttribute("data-id");a.set(o,{id:o,nodeElement:s.target,force:!0})}),e(a)}));return ee.useEffect(()=>()=>{t==null||t.disconnect()},[t]),t}function l9({node:e,nodeType:t,hasDimensions:r,resizeObserver:a}){const s=Lt(),o=ee.useRef(null),c=ee.useRef(null),d=ee.useRef(e.sourcePosition),f=ee.useRef(e.targetPosition),h=ee.useRef(t),p=r&&!!e.internals.handleBounds;return ee.useEffect(()=>{o.current&&!e.hidden&&(!p||c.current!==o.current)&&(c.current&&(a==null||a.unobserve(c.current)),a==null||a.observe(o.current),c.current=o.current)},[p,e.hidden]),ee.useEffect(()=>()=>{c.current&&(a==null||a.unobserve(c.current),c.current=null)},[]),ee.useEffect(()=>{if(o.current){const g=h.current!==t,y=d.current!==e.sourcePosition,b=f.current!==e.targetPosition;(g||y||b)&&(h.current=t,d.current=e.sourcePosition,f.current=e.targetPosition,s.getState().updateNodeInternals(new Map([[e.id,{id:e.id,nodeElement:o.current,force:!0}]])))}},[e.id,t,e.sourcePosition,e.targetPosition]),o}function o9({id:e,onClick:t,onMouseEnter:r,onMouseMove:a,onMouseLeave:s,onContextMenu:o,onDoubleClick:c,nodesDraggable:d,elementsSelectable:f,nodesConnectable:h,nodesFocusable:p,resizeObserver:g,noDragClassName:y,noPanClassName:b,disableKeyboardA11y:_,rfId:E,nodeTypes:S,nodeClickDistance:w,onError:k}){const{node:N,internals:M,isParent:B}=dt(W=>{const te=W.nodeLookup.get(e),ce=W.parentLookup.has(e);return{node:te,internals:te.internals,isParent:ce}},qt);let R=N.type||"default",U=(S==null?void 0:S[R])||$1[R];U===void 0&&(k==null||k("003",Lr.error003(R)),R="default",U=(S==null?void 0:S.default)||$1.default);const I=!!(N.draggable||d&&typeof N.draggable>"u"),X=!!(N.selectable||f&&typeof N.selectable>"u"),j=!!(N.connectable||h&&typeof N.connectable>"u"),z=!!(N.focusable||p&&typeof N.focusable>"u"),V=Lt(),P=lN(N),T=l9({node:N,nodeType:R,hasDimensions:P,resizeObserver:g}),$=BN({nodeRef:T,disabled:N.hidden||!I,noDragClassName:y,handleSelector:N.dragHandle,nodeId:e,isSelectable:X,nodeClickDistance:w}),O=UN();if(N.hidden)return null;const H=Qr(N),K=W8(N),Z=X||I||t||r||a||s,C=r?W=>r(W,{...M.userNode}):void 0,D=a?W=>a(W,{...M.userNode}):void 0,Y=s?W=>s(W,{...M.userNode}):void 0,L=o?W=>o(W,{...M.userNode}):void 0,G=c?W=>c(W,{...M.userNode}):void 0,q=W=>{const{selectNodesOnDrag:te,nodeDragThreshold:ce}=V.getState();X&&(!te||!I||ce>0)&&bp({id:e,store:V,nodeRef:T}),t&&t(W,{...M.userNode})},Q=W=>{if(!(uN(W.nativeEvent)||_)){if(QE.includes(W.key)&&X){const te=W.key==="Escape";bp({id:e,store:V,unselect:te,nodeRef:T})}else if(I&&N.selected&&Object.prototype.hasOwnProperty.call(Hu,W.key)){W.preventDefault();const{ariaLabelConfig:te}=V.getState();V.setState({ariaLiveMessage:te["node.a11yDescription.ariaLiveMessage"]({direction:W.key.replace("Arrow","").toLowerCase(),x:~~M.positionAbsolute.x,y:~~M.positionAbsolute.y})}),O({direction:Hu[W.key],factor:W.shiftKey?4:1})}}},J=()=>{var Ne;if(_||!((Ne=T.current)!=null&&Ne.matches(":focus-visible")))return;const{transform:W,width:te,height:ce,autoPanOnNodeFocus:fe,setCenter:xe}=V.getState();if(!fe)return;sg(new Map([[e,N]]),{x:0,y:0,width:te,height:ce},W,!0).length>0||xe(N.position.x+H.width/2,N.position.y+H.height/2,{zoom:W[2]})};return m.jsx("div",{className:on(["react-flow__node",`react-flow__node-${R}`,{[b]:I},N.className,{selected:N.selected,selectable:X,parent:B,draggable:I,dragging:$}]),ref:T,style:{zIndex:M.z,transform:`translate(${M.positionAbsolute.x}px,${M.positionAbsolute.y}px)`,pointerEvents:Z?"all":"none",visibility:P?"visible":"hidden",...N.style,...K},"data-id":e,"data-testid":`rf__node-${e}`,onMouseEnter:C,onMouseMove:D,onMouseLeave:Y,onContextMenu:L,onClick:q,onDoubleClick:G,onKeyDown:z?Q:void 0,tabIndex:z?0:void 0,onFocus:z?J:void 0,role:N.ariaRole??(z?"group":void 0),"aria-roledescription":"node","aria-describedby":_?void 0:`${AN}-${E}`,"aria-label":N.ariaLabel,...N.domAttributes,children:m.jsx($8,{value:e,children:m.jsx(U,{id:e,data:N.data,type:R,positionAbsoluteX:M.positionAbsolute.x,positionAbsoluteY:M.positionAbsolute.y,selected:N.selected??!1,selectable:X,draggable:I,deletable:N.deletable??!0,isConnectable:j,sourcePosition:N.sourcePosition,targetPosition:N.targetPosition,dragging:$,dragHandle:N.dragHandle,zIndex:M.z,parentId:N.parentId,...H})})})}var c9=ee.memo(o9);const u9=e=>({nodesConnectable:e.nodesConnectable,nodesFocusable:e.nodesFocusable,elementsSelectable:e.elementsSelectable,onError:e.onError});function PN(e){const{nodesConnectable:t,nodesFocusable:r,elementsSelectable:a,onError:s}=dt(u9,qt),o=i9(e.onlyRenderVisibleElements),c=s9();return m.jsx("div",{className:"react-flow__nodes",style:cd,children:o.map(d=>m.jsx(c9,{id:d,nodeTypes:e.nodeTypes,nodeExtent:e.nodeExtent,onClick:e.onNodeClick,onMouseEnter:e.onNodeMouseEnter,onMouseMove:e.onNodeMouseMove,onMouseLeave:e.onNodeMouseLeave,onContextMenu:e.onNodeContextMenu,onDoubleClick:e.onNodeDoubleClick,noDragClassName:e.noDragClassName,noPanClassName:e.noPanClassName,rfId:e.rfId,disableKeyboardA11y:e.disableKeyboardA11y,resizeObserver:c,nodesDraggable:e.nodesDraggable??!0,nodesConnectable:t,nodesFocusable:r,elementsSelectable:a,nodeClickDistance:e.nodeClickDistance,onError:s},d))})}PN.displayName="NodeRenderer";const d9=ee.memo(PN);function f9(e){return dt(ee.useCallback(r=>{if(!e)return r.edges.map(s=>s.id);const a=[];if(r.width&&r.height)for(const s of r.edges){const o=r.nodeLookup.get(s.source),c=r.nodeLookup.get(s.target);o&&c&&lI({sourceNode:o,targetNode:c,width:r.width,height:r.height,transform:r.transform})&&a.push(s.id)}return a},[e]),qt)}const h9=({color:e="none",strokeWidth:t=1})=>{const r={strokeWidth:t,...e&&{stroke:e}};return m.jsx("polyline",{className:"arrow",style:r,strokeLinecap:"round",fill:"none",strokeLinejoin:"round",points:"-5,-4 0,0 -5,4"})},m9=({color:e="none",strokeWidth:t=1})=>{const r={strokeWidth:t,...e&&{stroke:e,fill:e}};return m.jsx("polyline",{className:"arrowclosed",style:r,strokeLinecap:"round",strokeLinejoin:"round",points:"-5,-4 0,0 -5,4 -5,-4"})},P1={[Iu.Arrow]:h9,[Iu.ArrowClosed]:m9};function p9(e){const t=Lt();return ee.useMemo(()=>{var s,o;return Object.prototype.hasOwnProperty.call(P1,e)?P1[e]:((o=(s=t.getState()).onError)==null||o.call(s,"009",Lr.error009(e)),null)},[e])}const g9=({id:e,type:t,color:r,width:a=12.5,height:s=12.5,markerUnits:o="strokeWidth",strokeWidth:c,orient:d="auto-start-reverse"})=>{const f=p9(t);return f?m.jsx("marker",{className:"react-flow__arrowhead",id:e,markerWidth:`${a}`,markerHeight:`${s}`,viewBox:"-10 -10 20 20",markerUnits:o,orient:d,refX:"0",refY:"0",children:m.jsx(f,{color:r,strokeWidth:c})}):null},FN=({defaultColor:e,rfId:t})=>{const r=dt(o=>o.edges),a=dt(o=>o.defaultEdgeOptions),s=ee.useMemo(()=>pI(r,{id:t,defaultColor:e,defaultMarkerStart:a==null?void 0:a.markerStart,defaultMarkerEnd:a==null?void 0:a.markerEnd}),[r,a,t,e]);return s.length?m.jsx("svg",{className:"react-flow__marker","aria-hidden":"true",children:m.jsx("defs",{children:s.map(o=>m.jsx(g9,{id:o.id,type:o.type,color:o.color,width:o.width,height:o.height,markerUnits:o.markerUnits,strokeWidth:o.strokeWidth,orient:o.orient},o.id))})}):null};FN.displayName="MarkerDefinitions";var x9=ee.memo(FN);function GN({x:e,y:t,label:r,labelStyle:a,labelShowBg:s=!0,labelBgStyle:o,labelBgPadding:c=[2,4],labelBgBorderRadius:d=2,children:f,className:h,...p}){const[g,y]=ee.useState({x:1,y:0,width:0,height:0}),b=on(["react-flow__edge-textwrapper",h]),_=ee.useRef(null);return ee.useEffect(()=>{if(_.current){const E=_.current.getBBox();y({x:E.x,y:E.y,width:E.width,height:E.height})}},[r]),r?m.jsxs("g",{transform:`translate(${e-g.width/2} ${t-g.height/2})`,className:b,visibility:g.width?"visible":"hidden",...p,children:[s&&m.jsx("rect",{width:g.width+2*c[0],x:-c[0],y:-c[1],height:g.height+2*c[1],className:"react-flow__edge-textbg",style:o,rx:d,ry:d}),m.jsx("text",{className:"react-flow__edge-text",y:g.height/2,dy:"0.3em",ref:_,style:a,children:r}),f]}):null}GN.displayName="EdgeText";const b9=ee.memo(GN);function ud({path:e,labelX:t,labelY:r,label:a,labelStyle:s,labelShowBg:o,labelBgStyle:c,labelBgPadding:d,labelBgBorderRadius:f,interactionWidth:h=20,...p}){return m.jsxs(m.Fragment,{children:[m.jsx("path",{...p,d:e,fill:"none",className:on(["react-flow__edge-path",p.className])}),h?m.jsx("path",{d:e,fill:"none",strokeOpacity:0,strokeWidth:h,className:"react-flow__edge-interaction"}):null,a&&Or(t)&&Or(r)?m.jsx(b9,{x:t,y:r,label:a,labelStyle:s,labelShowBg:o,labelBgStyle:c,labelBgPadding:d,labelBgBorderRadius:f}):null]})}function F1({pos:e,x1:t,y1:r,x2:a,y2:s}){return e===ze.Left||e===ze.Right?[.5*(t+a),r]:[t,.5*(r+s)]}function VN({sourceX:e,sourceY:t,sourcePosition:r=ze.Bottom,targetX:a,targetY:s,targetPosition:o=ze.Top}){const[c,d]=F1({pos:r,x1:e,y1:t,x2:a,y2:s}),[f,h]=F1({pos:o,x1:a,y1:s,x2:e,y2:t}),[p,g,y,b]=fN({sourceX:e,sourceY:t,targetX:a,targetY:s,sourceControlX:c,sourceControlY:d,targetControlX:f,targetControlY:h});return[`M${e},${t} C${c},${d} ${f},${h} ${a},${s}`,p,g,y,b]}function YN(e){return ee.memo(({id:t,sourceX:r,sourceY:a,targetX:s,targetY:o,sourcePosition:c,targetPosition:d,label:f,labelStyle:h,labelShowBg:p,labelBgStyle:g,labelBgPadding:y,labelBgBorderRadius:b,style:_,markerEnd:E,markerStart:S,interactionWidth:w})=>{const[k,N,M]=VN({sourceX:r,sourceY:a,sourcePosition:c,targetX:s,targetY:o,targetPosition:d}),B=e.isInternal?void 0:t;return m.jsx(ud,{id:B,path:k,labelX:N,labelY:M,label:f,labelStyle:h,labelShowBg:p,labelBgStyle:g,labelBgPadding:y,labelBgBorderRadius:b,style:_,markerEnd:E,markerStart:S,interactionWidth:w})})}const y9=YN({isInternal:!1}),XN=YN({isInternal:!0});y9.displayName="SimpleBezierEdge";XN.displayName="SimpleBezierEdgeInternal";function KN(e){return ee.memo(({id:t,sourceX:r,sourceY:a,targetX:s,targetY:o,label:c,labelStyle:d,labelShowBg:f,labelBgStyle:h,labelBgPadding:p,labelBgBorderRadius:g,style:y,sourcePosition:b=ze.Bottom,targetPosition:_=ze.Top,markerEnd:E,markerStart:S,pathOptions:w,interactionWidth:k})=>{const[N,M,B]=mp({sourceX:r,sourceY:a,sourcePosition:b,targetX:s,targetY:o,targetPosition:_,borderRadius:w==null?void 0:w.borderRadius,offset:w==null?void 0:w.offset,stepPosition:w==null?void 0:w.stepPosition}),R=e.isInternal?void 0:t;return m.jsx(ud,{id:R,path:N,labelX:M,labelY:B,label:c,labelStyle:d,labelShowBg:f,labelBgStyle:h,labelBgPadding:p,labelBgBorderRadius:g,style:y,markerEnd:E,markerStart:S,interactionWidth:k})})}const ZN=KN({isInternal:!1}),QN=KN({isInternal:!0});ZN.displayName="SmoothStepEdge";QN.displayName="SmoothStepEdgeInternal";function WN(e){return ee.memo(({id:t,...r})=>{var s;const a=e.isInternal?void 0:t;return m.jsx(ZN,{...r,id:a,pathOptions:ee.useMemo(()=>{var o;return{borderRadius:0,offset:(o=r.pathOptions)==null?void 0:o.offset}},[(s=r.pathOptions)==null?void 0:s.offset])})})}const v9=WN({isInternal:!1}),JN=WN({isInternal:!0});v9.displayName="StepEdge";JN.displayName="StepEdgeInternal";function e2(e){return ee.memo(({id:t,sourceX:r,sourceY:a,targetX:s,targetY:o,label:c,labelStyle:d,labelShowBg:f,labelBgStyle:h,labelBgPadding:p,labelBgBorderRadius:g,style:y,markerEnd:b,markerStart:_,interactionWidth:E})=>{const[S,w,k]=pN({sourceX:r,sourceY:a,targetX:s,targetY:o}),N=e.isInternal?void 0:t;return m.jsx(ud,{id:N,path:S,labelX:w,labelY:k,label:c,labelStyle:d,labelShowBg:f,labelBgStyle:h,labelBgPadding:p,labelBgBorderRadius:g,style:y,markerEnd:b,markerStart:_,interactionWidth:E})})}const _9=e2({isInternal:!1}),t2=e2({isInternal:!0});_9.displayName="StraightEdge";t2.displayName="StraightEdgeInternal";function n2(e){return ee.memo(({id:t,sourceX:r,sourceY:a,targetX:s,targetY:o,sourcePosition:c=ze.Bottom,targetPosition:d=ze.Top,label:f,labelStyle:h,labelShowBg:p,labelBgStyle:g,labelBgPadding:y,labelBgBorderRadius:b,style:_,markerEnd:E,markerStart:S,pathOptions:w,interactionWidth:k})=>{const[N,M,B]=hN({sourceX:r,sourceY:a,sourcePosition:c,targetX:s,targetY:o,targetPosition:d,curvature:w==null?void 0:w.curvature}),R=e.isInternal?void 0:t;return m.jsx(ud,{id:R,path:N,labelX:M,labelY:B,label:f,labelStyle:h,labelShowBg:p,labelBgStyle:g,labelBgPadding:y,labelBgBorderRadius:b,style:_,markerEnd:E,markerStart:S,interactionWidth:k})})}const w9=n2({isInternal:!1}),r2=n2({isInternal:!0});w9.displayName="BezierEdge";r2.displayName="BezierEdgeInternal";const G1={default:r2,straight:t2,step:JN,smoothstep:QN,simplebezier:XN},V1={sourceX:null,sourceY:null,targetX:null,targetY:null,sourcePosition:null,targetPosition:null,zIndex:void 0},E9=(e,t,r)=>r===ze.Left?e-t:r===ze.Right?e+t:e,N9=(e,t,r)=>r===ze.Top?e-t:r===ze.Bottom?e+t:e,Y1="react-flow__edgeupdater";function X1({position:e,centerX:t,centerY:r,radius:a=10,onMouseDown:s,onMouseEnter:o,onMouseOut:c,type:d}){return m.jsx("circle",{onMouseDown:s,onMouseEnter:o,onMouseOut:c,className:on([Y1,`${Y1}-${d}`]),cx:E9(t,a,e),cy:N9(r,a,e),r:a,stroke:"transparent",fill:"transparent"})}function S9({isReconnectable:e,reconnectRadius:t,edge:r,sourceX:a,sourceY:s,targetX:o,targetY:c,sourcePosition:d,targetPosition:f,onReconnect:h,onReconnectStart:p,onReconnectEnd:g,setReconnecting:y,setUpdateHover:b}){const _=Lt(),E=(M,B)=>{if(M.button!==0)return;const{autoPanOnConnect:R,domNode:U,connectionMode:I,connectionRadius:X,lib:j,onConnectStart:z,cancelConnection:V,nodeLookup:P,rfId:T,panBy:$,updateConnection:O}=_.getState(),H=B.type==="target",K=(D,Y)=>{y(!1),g==null||g(D,r,B.type,Y)},Z=D=>h==null?void 0:h(r,D),C=(D,Y)=>{y(!0),p==null||p(M,r,B.type),z==null||z(D,Y)};xp.onPointerDown(M.nativeEvent,{autoPanOnConnect:R,connectionMode:I,connectionRadius:X,domNode:U,handleId:B.id,nodeId:B.nodeId,nodeLookup:P,isTarget:H,edgeUpdaterType:B.type,lib:j,flowId:T,cancelConnection:V,panBy:$,isValidConnection:(...D)=>{var Y,L;return((L=(Y=_.getState()).isValidConnection)==null?void 0:L.call(Y,...D))??!0},onConnect:Z,onConnectStart:C,onConnectEnd:(...D)=>{var Y,L;return(L=(Y=_.getState()).onConnectEnd)==null?void 0:L.call(Y,...D)},onReconnectEnd:K,updateConnection:O,getTransform:()=>_.getState().transform,getFromHandle:()=>_.getState().connection.fromHandle,dragThreshold:_.getState().connectionDragThreshold,handleDomNode:M.currentTarget})},S=M=>E(M,{nodeId:r.target,id:r.targetHandle??null,type:"target"}),w=M=>E(M,{nodeId:r.source,id:r.sourceHandle??null,type:"source"}),k=()=>b(!0),N=()=>b(!1);return m.jsxs(m.Fragment,{children:[(e===!0||e==="source")&&m.jsx(X1,{position:d,centerX:a,centerY:s,radius:t,onMouseDown:S,onMouseEnter:k,onMouseOut:N,type:"source"}),(e===!0||e==="target")&&m.jsx(X1,{position:f,centerX:o,centerY:c,radius:t,onMouseDown:w,onMouseEnter:k,onMouseOut:N,type:"target"})]})}function k9({id:e,edgesFocusable:t,edgesReconnectable:r,elementsSelectable:a,onClick:s,onDoubleClick:o,onContextMenu:c,onMouseEnter:d,onMouseMove:f,onMouseLeave:h,reconnectRadius:p,onReconnect:g,onReconnectStart:y,onReconnectEnd:b,rfId:_,edgeTypes:E,noPanClassName:S,onError:w,disableKeyboardA11y:k}){let N=dt(xe=>xe.edgeLookup.get(e));const M=dt(xe=>xe.defaultEdgeOptions);N=M?{...M,...N}:N;let B=N.type||"default",R=(E==null?void 0:E[B])||G1[B];R===void 0&&(w==null||w("011",Lr.error011(B)),B="default",R=(E==null?void 0:E.default)||G1.default);const U=!!(N.focusable||t&&typeof N.focusable>"u"),I=typeof g<"u"&&(N.reconnectable||r&&typeof N.reconnectable>"u"),X=!!(N.selectable||a&&typeof N.selectable>"u"),j=ee.useRef(null),[z,V]=ee.useState(!1),[P,T]=ee.useState(!1),$=Lt(),{zIndex:O=N.zIndex,sourceX:H,sourceY:K,targetX:Z,targetY:C,sourcePosition:D,targetPosition:Y}=dt(ee.useCallback(xe=>{const we=xe.nodeLookup.get(N.source),Ne=xe.nodeLookup.get(N.target);if(!we||!Ne)return V1;const De=mI({id:e,sourceNode:we,targetNode:Ne,sourceHandle:N.sourceHandle||null,targetHandle:N.targetHandle||null,connectionMode:xe.connectionMode,onError:w}),$e=sI({selected:N.selected,zIndex:N.zIndex,sourceNode:we,targetNode:Ne,elevateOnSelect:xe.elevateEdgesOnSelect,zIndexMode:xe.zIndexMode});return{...De||V1,zIndex:$e}},[N.source,N.target,N.sourceHandle,N.targetHandle,N.selected,N.zIndex]),qt),L=ee.useMemo(()=>N.markerStart?`url('#${pp(N.markerStart,_)}')`:void 0,[N.markerStart,_]),G=ee.useMemo(()=>N.markerEnd?`url('#${pp(N.markerEnd,_)}')`:void 0,[N.markerEnd,_]);if(N.hidden||H===null||K===null||Z===null||C===null)return null;const q=xe=>{var $e;const{addSelectedEdges:we,unselectNodesAndEdges:Ne,multiSelectionActive:De}=$.getState();X&&($.setState({nodesSelectionActive:!1}),N.selected&&De?(Ne({nodes:[],edges:[N]}),($e=j.current)==null||$e.blur()):we([e])),s&&s(xe,N)},Q=o?xe=>{o(xe,{...N})}:void 0,J=c?xe=>{c(xe,{...N})}:void 0,W=d?xe=>{d(xe,{...N})}:void 0,te=f?xe=>{f(xe,{...N})}:void 0,ce=h?xe=>{h(xe,{...N})}:void 0,fe=xe=>{var we;if(!k&&QE.includes(xe.key)&&X){const{unselectNodesAndEdges:Ne,addSelectedEdges:De}=$.getState();xe.key==="Escape"?((we=j.current)==null||we.blur(),Ne({edges:[N]})):De([e])}};return m.jsx("svg",{style:{zIndex:O},children:m.jsxs("g",{className:on(["react-flow__edge",`react-flow__edge-${B}`,N.className,S,{selected:N.selected,animated:N.animated,inactive:!X&&!s,updating:z,selectable:X}]),onClick:q,onDoubleClick:Q,onContextMenu:J,onMouseEnter:W,onMouseMove:te,onMouseLeave:ce,onKeyDown:U?fe:void 0,tabIndex:U?0:void 0,role:N.ariaRole??(U?"group":"img"),"aria-roledescription":"edge","data-id":e,"data-testid":`rf__edge-${e}`,"aria-label":N.ariaLabel===null?void 0:N.ariaLabel||`Edge from ${N.source} to ${N.target}`,"aria-describedby":U?`${MN}-${_}`:void 0,ref:j,...N.domAttributes,children:[!P&&m.jsx(R,{id:e,source:N.source,target:N.target,type:N.type,selected:N.selected,animated:N.animated,selectable:X,deletable:N.deletable??!0,label:N.label,labelStyle:N.labelStyle,labelShowBg:N.labelShowBg,labelBgStyle:N.labelBgStyle,labelBgPadding:N.labelBgPadding,labelBgBorderRadius:N.labelBgBorderRadius,sourceX:H,sourceY:K,targetX:Z,targetY:C,sourcePosition:D,targetPosition:Y,data:N.data,style:N.style,sourceHandleId:N.sourceHandle,targetHandleId:N.targetHandle,markerStart:L,markerEnd:G,pathOptions:"pathOptions"in N?N.pathOptions:void 0,interactionWidth:N.interactionWidth}),I&&m.jsx(S9,{edge:N,isReconnectable:I,reconnectRadius:p,onReconnect:g,onReconnectStart:y,onReconnectEnd:b,sourceX:H,sourceY:K,targetX:Z,targetY:C,sourcePosition:D,targetPosition:Y,setUpdateHover:V,setReconnecting:T})]})})}var C9=ee.memo(k9);const T9=e=>({edgesFocusable:e.edgesFocusable,edgesReconnectable:e.edgesReconnectable,elementsSelectable:e.elementsSelectable,connectionMode:e.connectionMode,onError:e.onError});function i2({defaultMarkerColor:e,onlyRenderVisibleElements:t,rfId:r,edgeTypes:a,noPanClassName:s,onReconnect:o,onEdgeContextMenu:c,onEdgeMouseEnter:d,onEdgeMouseMove:f,onEdgeMouseLeave:h,onEdgeClick:p,reconnectRadius:g,onEdgeDoubleClick:y,onReconnectStart:b,onReconnectEnd:_,disableKeyboardA11y:E}){const{edgesFocusable:S,edgesReconnectable:w,elementsSelectable:k,onError:N}=dt(T9,qt),M=f9(t);return m.jsxs("div",{className:"react-flow__edges",children:[m.jsx(x9,{defaultColor:e,rfId:r}),M.map(B=>m.jsx(C9,{id:B,edgesFocusable:S,edgesReconnectable:w,elementsSelectable:k,noPanClassName:s,onReconnect:o,onContextMenu:c,onMouseEnter:d,onMouseMove:f,onMouseLeave:h,onClick:p,reconnectRadius:g,onDoubleClick:y,onReconnectStart:b,onReconnectEnd:_,rfId:r,onError:N,edgeTypes:a,disableKeyboardA11y:E},B))]})}i2.displayName="EdgeRenderer";const A9=ee.memo(i2),K1=e=>`translate(${e[0]}px,${e[1]}px) scale(${e[2]})`;function M9({children:e}){const t=Lt(),r=ee.useRef(null),[a]=ee.useState(()=>t.getState().transform);return zN(()=>{let s=null;const o=()=>{const c=t.getState().transform;s&&c[0]===s[0]&&c[1]===s[1]&&c[2]===s[2]||(s=c,r.current&&(r.current.style.transform=K1(c)))};return o(),t.subscribe(o)},[t]),m.jsx("div",{ref:r,className:"react-flow__viewport xyflow__viewport react-flow__container",style:{transform:K1(a)},children:e})}function O9(e){const t=$o(),r=ee.useRef(!1);ee.useEffect(()=>{!r.current&&t.viewportInitialized&&e&&(setTimeout(()=>e(t),1),r.current=!0)},[e,t.viewportInitialized])}const R9=e=>{var t;return(t=e.panZoom)==null?void 0:t.syncViewport};function j9(e){const t=dt(R9),r=Lt();return ee.useEffect(()=>{e&&(t==null||t(e),r.setState({transform:[e.x,e.y,e.zoom]}))},[e,t]),null}function D9(e){return e.connection.inProgress?{...e.connection,to:Ho(e.connection.to,e.transform)}:{...e.connection}}function L9(e){return D9}function z9(e){const t=L9();return dt(t,qt)}const I9=e=>({nodesConnectable:e.nodesConnectable,isValid:e.connection.isValid,inProgress:e.connection.inProgress,width:e.width,height:e.height});function B9({containerStyle:e,style:t,type:r,component:a}){const{nodesConnectable:s,width:o,height:c,isValid:d,inProgress:f}=dt(I9,qt);return!(o&&s&&f)?null:m.jsx("svg",{style:e,width:o,height:c,className:"react-flow__connectionline react-flow__container",children:m.jsx("g",{className:on(["react-flow__connection",eN(d)]),children:m.jsx(a2,{style:t,type:r,CustomComponent:a,isValid:d})})})}const a2=({style:e,type:t=ca.Bezier,CustomComponent:r,isValid:a})=>{const{inProgress:s,from:o,fromNode:c,fromHandle:d,fromPosition:f,to:h,toNode:p,toHandle:g,toPosition:y,pointer:b}=z9();if(!s)return;if(r)return m.jsx(r,{connectionLineType:t,connectionLineStyle:e,fromNode:c,fromHandle:d,fromX:o.x,fromY:o.y,toX:h.x,toY:h.y,fromPosition:f,toPosition:y,connectionStatus:eN(a),toNode:p,toHandle:g,pointer:b});let _="";const E={sourceX:o.x,sourceY:o.y,sourcePosition:f,targetX:h.x,targetY:h.y,targetPosition:y};switch(t){case ca.Bezier:[_]=hN(E);break;case ca.SimpleBezier:[_]=VN(E);break;case ca.Step:[_]=mp({...E,borderRadius:0});break;case ca.SmoothStep:[_]=mp(E);break;default:[_]=pN(E)}return m.jsx("path",{d:_,fill:"none",className:"react-flow__connection-path",style:e})};a2.displayName="ConnectionLine";const U9={};function Z1(e=U9){ee.useRef(e),Lt(),ee.useEffect(()=>{},[e])}function H9(){Lt(),ee.useRef(!1),ee.useEffect(()=>{},[])}function s2({nodeTypes:e,edgeTypes:t,onInit:r,onNodeClick:a,onEdgeClick:s,onNodeDoubleClick:o,onEdgeDoubleClick:c,onNodeMouseEnter:d,onNodeMouseMove:f,onNodeMouseLeave:h,onNodeContextMenu:p,onSelectionContextMenu:g,onSelectionStart:y,onSelectionEnd:b,connectionLineType:_,connectionLineStyle:E,connectionLineComponent:S,connectionLineContainerStyle:w,selectionKeyCode:k,selectionOnDrag:N,selectionMode:M,multiSelectionKeyCode:B,panActivationKeyCode:R,zoomActivationKeyCode:U,deleteKeyCode:I,onlyRenderVisibleElements:X,elementsSelectable:j,defaultViewport:z,translateExtent:V,minZoom:P,maxZoom:T,preventScrolling:$,defaultMarkerColor:O,zoomOnScroll:H,zoomOnPinch:K,panOnScroll:Z,panOnScrollSpeed:C,panOnScrollMode:D,zoomOnDoubleClick:Y,panOnDrag:L,autoPanOnSelection:G,onPaneClick:q,onPaneMouseEnter:Q,onPaneMouseMove:J,onPaneMouseLeave:W,onPaneScroll:te,onPaneContextMenu:ce,paneClickDistance:fe,nodeClickDistance:xe,onEdgeContextMenu:we,onEdgeMouseEnter:Ne,onEdgeMouseMove:De,onEdgeMouseLeave:$e,reconnectRadius:st,onReconnect:Rt,onReconnectStart:Xt,onReconnectEnd:Pt,noDragClassName:Kt,noWheelClassName:Yn,noPanClassName:Nn,disableKeyboardA11y:ct,nodeExtent:It,rfId:ue,viewport:be,onViewportChange:Oe,nodesDraggable:Fe}){return Z1(e),Z1(t),H9(),O9(r),j9(be),m.jsx(n9,{onPaneClick:q,onPaneMouseEnter:Q,onPaneMouseMove:J,onPaneMouseLeave:W,onPaneContextMenu:ce,onPaneScroll:te,paneClickDistance:fe,deleteKeyCode:I,selectionKeyCode:k,selectionOnDrag:N,selectionMode:M,onSelectionStart:y,onSelectionEnd:b,multiSelectionKeyCode:B,panActivationKeyCode:R,zoomActivationKeyCode:U,elementsSelectable:j,zoomOnScroll:H,zoomOnPinch:K,zoomOnDoubleClick:Y,panOnScroll:Z,panOnScrollSpeed:C,panOnScrollMode:D,panOnDrag:L,autoPanOnSelection:G,defaultViewport:z,translateExtent:V,minZoom:P,maxZoom:T,onSelectionContextMenu:g,preventScrolling:$,noDragClassName:Kt,noWheelClassName:Yn,noPanClassName:Nn,disableKeyboardA11y:ct,onViewportChange:Oe,isControlledViewport:!!be,children:m.jsxs(M9,{children:[m.jsx(A9,{edgeTypes:t,onEdgeClick:s,onEdgeDoubleClick:c,onReconnect:Rt,onReconnectStart:Xt,onReconnectEnd:Pt,onlyRenderVisibleElements:X,onEdgeContextMenu:we,onEdgeMouseEnter:Ne,onEdgeMouseMove:De,onEdgeMouseLeave:$e,reconnectRadius:st,defaultMarkerColor:O,noPanClassName:Nn,disableKeyboardA11y:ct,rfId:ue}),m.jsx(B9,{style:E,type:_,component:S,containerStyle:w}),m.jsx("div",{className:"react-flow__edgelabel-renderer"}),m.jsx(d9,{nodeTypes:e,onNodeClick:a,onNodeDoubleClick:o,onNodeMouseEnter:d,onNodeMouseMove:f,onNodeMouseLeave:h,onNodeContextMenu:p,nodeClickDistance:xe,onlyRenderVisibleElements:X,noPanClassName:Nn,noDragClassName:Kt,disableKeyboardA11y:ct,nodeExtent:It,rfId:ue,nodesDraggable:Fe}),m.jsx("div",{className:"react-flow__viewport-portal"})]})})}s2.displayName="GraphView";const $9=ee.memo(s2),q9=sN(),Q1=({nodes:e,edges:t,defaultNodes:r,defaultEdges:a,width:s,height:o,fitView:c,fitViewOptions:d,minZoom:f=.5,maxZoom:h=2,nodeOrigin:p,nodeExtent:g,zIndexMode:y="basic"}={})=>{const b=new Map,_=new Map,E=new Map,S=new Map,w=a??t??[],k=r??e??[],N=p??[0,0],M=g??No;bN(E,S,w);const{nodesInitialized:B}=gp(k,b,_,{nodeOrigin:N,nodeExtent:M,zIndexMode:y});let R=[0,0,1];if(c&&s&&o){const U=Bo(b,{filter:z=>!!((z.width||z.initialWidth)&&(z.height||z.initialHeight))}),{x:I,y:X,zoom:j}=og(U,s,o,f,h,(d==null?void 0:d.padding)??.1);R=[I,X,j]}return{rfId:"1",width:s??0,height:o??0,transform:R,nodes:k,nodesInitialized:B,nodeLookup:b,parentLookup:_,edges:w,edgeLookup:S,connectionLookup:E,onNodesChange:null,onEdgesChange:null,hasDefaultNodes:r!==void 0,hasDefaultEdges:a!==void 0,panZoom:null,minZoom:f,maxZoom:h,translateExtent:No,nodeExtent:M,nodesSelectionActive:!1,userSelectionActive:!1,userSelectionRect:null,connectionMode:Qs.Strict,domNode:null,paneDragging:!1,noPanClassName:"nopan",nodeOrigin:N,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:d,fitViewResolver:null,connection:{...JE},connectionClickStartHandle:null,connectOnClick:!0,ariaLiveMessage:"",autoPanOnConnect:!0,autoPanOnNodeDrag:!0,autoPanOnNodeFocus:!0,autoPanSpeed:15,connectionRadius:20,onError:q9,isValidConnection:void 0,onSelectionChangeHandlers:[],lib:"react",debug:!1,ariaLabelConfig:WE,zIndexMode:y,onNodesChangeMiddlewareMap:new Map,onEdgesChangeMiddlewareMap:new Map}},P9=({nodes:e,edges:t,defaultNodes:r,defaultEdges:a,width:s,height:o,fitView:c,fitViewOptions:d,minZoom:f,maxZoom:h,nodeOrigin:p,nodeExtent:g,zIndexMode:y})=>r8((b,_)=>{async function E(){const{nodeLookup:S,panZoom:w,fitViewOptions:k,fitViewResolver:N,width:M,height:B,minZoom:R,maxZoom:U}=_();w&&(await Jz({nodes:S,width:M,height:B,panZoom:w,minZoom:R,maxZoom:U},k),N==null||N.resolve(!0),b({fitViewResolver:null}))}return{...Q1({nodes:e,edges:t,width:s,height:o,fitView:c,fitViewOptions:d,minZoom:f,maxZoom:h,nodeOrigin:p,nodeExtent:g,defaultNodes:r,defaultEdges:a,zIndexMode:y}),setNodes:S=>{const{nodeLookup:w,parentLookup:k,nodeOrigin:N,elevateNodesOnSelect:M,fitViewQueued:B,zIndexMode:R,nodesSelectionActive:U}=_(),{nodesInitialized:I,hasSelectedNodes:X}=gp(S,w,k,{nodeOrigin:N,nodeExtent:g,elevateNodesOnSelect:M,checkEquality:!0,zIndexMode:R}),j=U&&X;B&&I?(E(),b({nodes:S,nodesInitialized:I,fitViewQueued:!1,fitViewOptions:void 0,nodesSelectionActive:j})):b({nodes:S,nodesInitialized:I,nodesSelectionActive:j})},setEdges:S=>{const{connectionLookup:w,edgeLookup:k}=_();bN(w,k,S),b({edges:S})},setDefaultNodesAndEdges:(S,w)=>{if(S){const{setNodes:k}=_();k(S),b({hasDefaultNodes:!0})}if(w){const{setEdges:k}=_();k(w),b({hasDefaultEdges:!0})}},updateNodeInternals:S=>{const{triggerNodeChanges:w,nodeLookup:k,parentLookup:N,domNode:M,nodeOrigin:B,nodeExtent:R,debug:U,fitViewQueued:I,zIndexMode:X}=_(),{changes:j,updatedInternals:z}=wI(S,k,N,M,B,R,X);z&&(bI(k,N,{nodeOrigin:B,nodeExtent:R,zIndexMode:X}),I?(E(),b({fitViewQueued:!1,fitViewOptions:void 0})):b({}),(j==null?void 0:j.length)>0&&(U&&console.log("React Flow: trigger node changes",j),w==null||w(j)))},updateNodePositions:(S,w=!1)=>{const k=[];let N=[];const{nodeLookup:M,triggerNodeChanges:B,connection:R,updateConnection:U,onNodesChangeMiddlewareMap:I}=_();for(const[X,j]of S){const z=M.get(X),V=!!(z!=null&&z.expandParent&&(z!=null&&z.parentId)&&(j!=null&&j.position)),P={id:X,type:"position",position:V?{x:Math.max(0,j.position.x),y:Math.max(0,j.position.y)}:j.position,dragging:w};if(z&&R.inProgress&&R.fromNode.id===z.id){const T=Qa(z,R.fromHandle,ze.Left,!0);U({...R,from:T})}V&&z.parentId&&k.push({id:X,parentId:z.parentId,rect:{...j.internals.positionAbsolute,width:j.measured.width??0,height:j.measured.height??0}}),N.push(P)}if(k.length>0){const{parentLookup:X,nodeOrigin:j}=_(),z=mg(k,M,X,j);N.push(...z)}for(const X of I.values())N=X(N);B(N)},triggerNodeChanges:S=>{const{onNodesChange:w,setNodes:k,nodes:N,hasDefaultNodes:M,debug:B}=_();if(S!=null&&S.length){if(M){const R=jN(S,N);k(R)}B&&console.log("React Flow: trigger node changes",S),w==null||w(S)}},triggerEdgeChanges:S=>{const{onEdgesChange:w,setEdges:k,edges:N,hasDefaultEdges:M,debug:B}=_();if(S!=null&&S.length){if(M){const R=DN(S,N);k(R)}B&&console.log("React Flow: trigger edge changes",S),w==null||w(S)}},addSelectedNodes:S=>{const{multiSelectionActive:w,edgeLookup:k,nodeLookup:N,triggerNodeChanges:M,triggerEdgeChanges:B}=_();if(w){const R=S.map(U=>Ha(U,!0));M(R);return}M(qs(N,new Set([...S]),!0)),B(qs(k))},addSelectedEdges:S=>{const{multiSelectionActive:w,edgeLookup:k,nodeLookup:N,triggerNodeChanges:M,triggerEdgeChanges:B}=_();if(w){const R=S.map(U=>Ha(U,!0));B(R);return}B(qs(k,new Set([...S]))),M(qs(N,new Set,!0))},unselectNodesAndEdges:({nodes:S,edges:w}={})=>{const{edges:k,nodes:N,nodeLookup:M,triggerNodeChanges:B,triggerEdgeChanges:R}=_(),U=S||N,I=w||k,X=[];for(const z of U){if(!z.selected)continue;const V=M.get(z.id);V&&(V.selected=!1),X.push(Ha(z.id,!1))}const j=[];for(const z of I)z.selected&&j.push(Ha(z.id,!1));B(X),R(j)},setMinZoom:S=>{const{panZoom:w,maxZoom:k}=_();w==null||w.setScaleExtent([S,k]),b({minZoom:S})},setMaxZoom:S=>{const{panZoom:w,minZoom:k}=_();w==null||w.setScaleExtent([k,S]),b({maxZoom:S})},setTranslateExtent:S=>{var w;(w=_().panZoom)==null||w.setTranslateExtent(S),b({translateExtent:S})},resetSelectedElements:()=>{const{edges:S,nodes:w,triggerNodeChanges:k,triggerEdgeChanges:N,elementsSelectable:M}=_();if(!M)return;const B=w.reduce((U,I)=>I.selected?[...U,Ha(I.id,!1)]:U,[]),R=S.reduce((U,I)=>I.selected?[...U,Ha(I.id,!1)]:U,[]);k(B),N(R)},setNodeExtent:S=>{const{nodes:w,nodeLookup:k,parentLookup:N,nodeOrigin:M,elevateNodesOnSelect:B,nodeExtent:R,zIndexMode:U}=_();S[0][0]===R[0][0]&&S[0][1]===R[0][1]&&S[1][0]===R[1][0]&&S[1][1]===R[1][1]||(gp(w,k,N,{nodeOrigin:M,nodeExtent:S,elevateNodesOnSelect:B,checkEquality:!1,zIndexMode:U}),b({nodeExtent:S}))},panBy:S=>{const{transform:w,width:k,height:N,panZoom:M,translateExtent:B}=_();return EI({delta:S,panZoom:M,transform:w,translateExtent:B,width:k,height:N})},setCenter:async(S,w,k)=>{const{width:N,height:M,maxZoom:B,panZoom:R}=_();if(!R)return!1;const U=typeof(k==null?void 0:k.zoom)<"u"?k.zoom:B;return await R.setViewport({x:N/2-S*U,y:M/2-w*U,zoom:U},{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:{...JE}})},updateConnection:S=>{b({connection:S})},reset:()=>b({...Q1()})}},Object.is);function F9({initialNodes:e,initialEdges:t,defaultNodes:r,defaultEdges:a,initialWidth:s,initialHeight:o,initialMinZoom:c,initialMaxZoom:d,initialFitViewOptions:f,fitView:h,nodeOrigin:p,nodeExtent:g,zIndexMode:y,children:b}){const[_]=ee.useState(()=>P9({nodes:e,edges:t,defaultNodes:r,defaultEdges:a,width:s,height:o,fitView:h,minZoom:c,maxZoom:d,fitViewOptions:f,nodeOrigin:p,nodeExtent:g,zIndexMode:y}));return m.jsx(i8,{value:_,children:m.jsx(T8,{children:m.jsx(P8,{children:b})})})}function G9({children:e,nodes:t,edges:r,defaultNodes:a,defaultEdges:s,width:o,height:c,fitView:d,fitViewOptions:f,minZoom:h,maxZoom:p,nodeOrigin:g,nodeExtent:y,zIndexMode:b}){return ee.useContext(ld)?m.jsx(m.Fragment,{children:e}):m.jsx(F9,{initialNodes:t,initialEdges:r,defaultNodes:a,defaultEdges:s,initialWidth:o,initialHeight:c,fitView:d,initialFitViewOptions:f,initialMinZoom:h,initialMaxZoom:p,nodeOrigin:g,nodeExtent:y,zIndexMode:b,children:e})}const V9={width:"100%",height:"100%",overflow:"hidden",position:"relative",zIndex:0};function Y9({nodes:e,edges:t,defaultNodes:r,defaultEdges:a,className:s,nodeTypes:o,edgeTypes:c,onNodeClick:d,onEdgeClick:f,onInit:h,onMove:p,onMoveStart:g,onMoveEnd:y,onConnect:b,onConnectStart:_,onConnectEnd:E,onClickConnectStart:S,onClickConnectEnd:w,onNodeMouseEnter:k,onNodeMouseMove:N,onNodeMouseLeave:M,onNodeContextMenu:B,onNodeDoubleClick:R,onNodeDragStart:U,onNodeDrag:I,onNodeDragStop:X,onNodesDelete:j,onEdgesDelete:z,onDelete:V,onSelectionChange:P,onSelectionDragStart:T,onSelectionDrag:$,onSelectionDragStop:O,onSelectionContextMenu:H,onSelectionStart:K,onSelectionEnd:Z,onBeforeDelete:C,connectionMode:D,connectionLineType:Y=ca.Bezier,connectionLineStyle:L,connectionLineComponent:G,connectionLineContainerStyle:q,deleteKeyCode:Q="Backspace",selectionKeyCode:J="Shift",selectionOnDrag:W=!1,selectionMode:te=So.Full,panActivationKeyCode:ce="Space",multiSelectionKeyCode:fe=Co()?"Meta":"Control",zoomActivationKeyCode:xe=Co()?"Meta":"Control",snapToGrid:we,snapGrid:Ne,onlyRenderVisibleElements:De=!1,selectNodesOnDrag:$e,nodesDraggable:st,autoPanOnNodeFocus:Rt,nodesConnectable:Xt,nodesFocusable:Pt,nodeOrigin:Kt=ON,edgesFocusable:Yn,edgesReconnectable:Nn,elementsSelectable:ct=!0,defaultViewport:It=x8,minZoom:ue=.5,maxZoom:be=2,translateExtent:Oe=No,preventScrolling:Fe=!0,nodeExtent:Ze,defaultMarkerColor:cn="#b1b1b7",zoomOnScroll:Sn=!0,zoomOnPinch:Zt=!0,panOnScroll:At=!1,panOnScrollSpeed:Jt=.5,panOnScrollMode:ut=Fa.Free,zoomOnDoubleClick:In=!0,panOnDrag:un=!0,onPaneClick:Ni,onPaneMouseEnter:nt,onPaneMouseMove:Xn,onPaneMouseLeave:On,onPaneScroll:mn,onPaneContextMenu:re,paneClickDistance:me=1,nodeClickDistance:Ee=0,children:Pe,onReconnect:St,onReconnectStart:gt,onReconnectEnd:Me,onEdgeContextMenu:Se,onEdgeDoubleClick:Ue,onEdgeMouseEnter:Bt,onEdgeMouseMove:Mt,onEdgeMouseLeave:br,reconnectRadius:Si=10,onNodesChange:ki,onEdgesChange:lr,noDragClassName:Ut="nodrag",noWheelClassName:pn="nowheel",noPanClassName:yr="nopan",fitView:Ci,fitViewOptions:ga,connectOnClick:Ti,attributionPosition:ts,proOptions:Wr,defaultEdgeOptions:xa,elevateNodesOnSelect:bn=!0,elevateEdgesOnSelect:vr=!1,disableKeyboardA11y:_r=!1,autoPanOnConnect:Br,autoPanOnNodeDrag:Ft,autoPanOnSelection:ns=!0,autoPanSpeed:Jr,connectionRadius:wr,isValidConnection:ye,onError:Le,style:Qe,id:ft,nodeDragThreshold:Ht,connectionDragThreshold:gn,viewport:Rn,onViewportChange:kn,width:_t,height:jn,colorMode:rs="light",debug:Ai,onScroll:Ur,ariaLabelConfig:Mi,zIndexMode:is="basic",...Cn},ba){const Er=ft||"1",Oi=_8(rs),dn=ee.useCallback(ya=>{ya.currentTarget.scrollTo({top:0,left:0,behavior:"instant"}),Ur==null||Ur(ya)},[Ur]);return m.jsx("div",{"data-testid":"rf__wrapper",...Cn,onScroll:dn,style:{...Qe,...V9},ref:ba,className:on(["react-flow",s,Oi]),id:ft,role:"application",children:m.jsxs(G9,{nodes:e,edges:t,width:_t,height:jn,fitView:Ci,fitViewOptions:ga,minZoom:ue,maxZoom:be,nodeOrigin:Kt,nodeExtent:Ze,zIndexMode:is,children:[m.jsx(v8,{nodes:e,edges:t,defaultNodes:r,defaultEdges:a,onConnect:b,onConnectStart:_,onConnectEnd:E,onClickConnectStart:S,onClickConnectEnd:w,nodesDraggable:st,autoPanOnNodeFocus:Rt,nodesConnectable:Xt,nodesFocusable:Pt,edgesFocusable:Yn,edgesReconnectable:Nn,elementsSelectable:ct,elevateNodesOnSelect:bn,elevateEdgesOnSelect:vr,minZoom:ue,maxZoom:be,nodeExtent:Ze,onNodesChange:ki,onEdgesChange:lr,snapToGrid:we,snapGrid:Ne,connectionMode:D,translateExtent:Oe,connectOnClick:Ti,defaultEdgeOptions:xa,fitView:Ci,fitViewOptions:ga,onNodesDelete:j,onEdgesDelete:z,onDelete:V,onNodeDragStart:U,onNodeDrag:I,onNodeDragStop:X,onSelectionDrag:$,onSelectionDragStart:T,onSelectionDragStop:O,onMove:p,onMoveStart:g,onMoveEnd:y,noPanClassName:yr,nodeOrigin:Kt,rfId:Er,autoPanOnConnect:Br,autoPanOnNodeDrag:Ft,autoPanSpeed:Jr,onError:Le,connectionRadius:wr,isValidConnection:ye,selectNodesOnDrag:$e,nodeDragThreshold:Ht,connectionDragThreshold:gn,onBeforeDelete:C,debug:Ai,ariaLabelConfig:Mi,zIndexMode:is}),m.jsx($9,{onInit:h,onNodeClick:d,onEdgeClick:f,onNodeMouseEnter:k,onNodeMouseMove:N,onNodeMouseLeave:M,onNodeContextMenu:B,onNodeDoubleClick:R,nodeTypes:o,edgeTypes:c,connectionLineType:Y,connectionLineStyle:L,connectionLineComponent:G,connectionLineContainerStyle:q,selectionKeyCode:J,selectionOnDrag:W,selectionMode:te,deleteKeyCode:Q,multiSelectionKeyCode:fe,panActivationKeyCode:ce,zoomActivationKeyCode:xe,onlyRenderVisibleElements:De,defaultViewport:It,translateExtent:Oe,minZoom:ue,maxZoom:be,preventScrolling:Fe,zoomOnScroll:Sn,zoomOnPinch:Zt,zoomOnDoubleClick:In,panOnScroll:At,panOnScrollSpeed:Jt,panOnScrollMode:ut,panOnDrag:un,autoPanOnSelection:ns,onPaneClick:Ni,onPaneMouseEnter:nt,onPaneMouseMove:Xn,onPaneMouseLeave:On,onPaneScroll:mn,onPaneContextMenu:re,paneClickDistance:me,nodeClickDistance:Ee,onSelectionContextMenu:H,onSelectionStart:K,onSelectionEnd:Z,onReconnect:St,onReconnectStart:gt,onReconnectEnd:Me,onEdgeContextMenu:Se,onEdgeDoubleClick:Ue,onEdgeMouseEnter:Bt,onEdgeMouseMove:Mt,onEdgeMouseLeave:br,reconnectRadius:Si,defaultMarkerColor:cn,noDragClassName:Ut,noWheelClassName:pn,noPanClassName:yr,rfId:Er,disableKeyboardA11y:_r,nodeExtent:Ze,viewport:Rn,onViewportChange:kn,nodesDraggable:st}),m.jsx(g8,{onSelectionChange:P}),Pe,m.jsx(d8,{proOptions:Wr,position:ts}),m.jsx(u8,{rfId:Er,disableKeyboardA11y:_r})]})})}var X9=LN(Y9);function K9(e){const[t,r]=ee.useState(e),a=ee.useCallback(s=>r(o=>jN(s,o)),[]);return[t,r,a]}function Z9(e){const[t,r]=ee.useState(e),a=ee.useCallback(s=>r(o=>DN(s,o)),[]);return[t,r,a]}function Q9({dimensions:e,lineWidth:t,variant:r,className:a}){return m.jsx("path",{strokeWidth:t,d:`M${e[0]/2} 0 V${e[1]} M0 ${e[1]/2} H${e[0]}`,className:on(["react-flow__background-pattern",r,a])})}function W9({radius:e,className:t}){return m.jsx("circle",{cx:e,cy:e,r:e,className:on(["react-flow__background-pattern","dots",t])})}var fa;(function(e){e.Lines="lines",e.Dots="dots",e.Cross="cross"})(fa||(fa={}));const J9={[fa.Dots]:1,[fa.Lines]:1,[fa.Cross]:6},eB=e=>({transform:e.transform,patternId:`pattern-${e.rfId}`});function l2({id:e,variant:t=fa.Dots,gap:r=20,size:a,lineWidth:s=1,offset:o=0,color:c,bgColor:d,style:f,className:h,patternClassName:p}){const g=ee.useRef(null),{transform:y,patternId:b}=dt(eB,qt),_=a||J9[t],E=t===fa.Dots,S=t===fa.Cross,w=Array.isArray(r)?r:[r,r],k=[w[0]*y[2]||1,w[1]*y[2]||1],N=_*y[2],M=Array.isArray(o)?o:[o,o],B=S?[N,N]:k,R=[M[0]*y[2]||1+B[0]/2,M[1]*y[2]||1+B[1]/2],U=`${b}${e||""}`;return m.jsxs("svg",{className:on(["react-flow__background",h]),style:{...f,...cd,"--xy-background-color-props":d,"--xy-background-pattern-color-props":c},ref:g,"data-testid":"rf__background",children:[m.jsx("pattern",{id:U,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:E?m.jsx(W9,{radius:N/2,className:p}):m.jsx(Q9,{dimensions:B,lineWidth:s,variant:t,className:p})}),m.jsx("rect",{x:"0",y:"0",width:"100%",height:"100%",fill:`url(#${U})`})]})}l2.displayName="Background";const tB=ee.memo(l2);function nB(){return m.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",children:m.jsx("path",{d:"M32 18.133H18.133V32h-4.266V18.133H0v-4.266h13.867V0h4.266v13.867H32z"})})}function rB(){return m.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 5",children:m.jsx("path",{d:"M0 0h32v4.2H0z"})})}function iB(){return m.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 30",children:m.jsx("path",{d:"M3.692 4.63c0-.53.4-.938.939-.938h5.215V0H4.708C2.13 0 0 2.054 0 4.63v5.216h3.692V4.631zM27.354 0h-5.2v3.692h5.17c.53 0 .984.4.984.939v5.215H32V4.631A4.624 4.624 0 0027.354 0zm.954 24.83c0 .532-.4.94-.939.94h-5.215v3.768h5.215c2.577 0 4.631-2.13 4.631-4.707v-5.139h-3.692v5.139zm-23.677.94c-.531 0-.939-.4-.939-.94v-5.138H0v5.139c0 2.577 2.13 4.707 4.708 4.707h5.138V25.77H4.631z"})})}function aB(){return m.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 25 32",children:m.jsx("path",{d:"M21.333 10.667H19.81V7.619C19.81 3.429 16.38 0 12.19 0 8 0 4.571 3.429 4.571 7.619v3.048H3.048A3.056 3.056 0 000 13.714v15.238A3.056 3.056 0 003.048 32h18.285a3.056 3.056 0 003.048-3.048V13.714a3.056 3.056 0 00-3.048-3.047zM12.19 24.533a3.056 3.056 0 01-3.047-3.047 3.056 3.056 0 013.047-3.048 3.056 3.056 0 013.048 3.048 3.056 3.056 0 01-3.048 3.047zm4.724-13.866H7.467V7.619c0-2.59 2.133-4.724 4.723-4.724 2.591 0 4.724 2.133 4.724 4.724v3.048z"})})}function sB(){return m.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 25 32",children:m.jsx("path",{d:"M21.333 10.667H19.81V7.619C19.81 3.429 16.38 0 12.19 0c-4.114 1.828-1.37 2.133.305 2.438 1.676.305 4.42 2.59 4.42 5.181v3.048H3.047A3.056 3.056 0 000 13.714v15.238A3.056 3.056 0 003.048 32h18.285a3.056 3.056 0 003.048-3.048V13.714a3.056 3.056 0 00-3.048-3.047zM12.19 24.533a3.056 3.056 0 01-3.047-3.047 3.056 3.056 0 013.047-3.048 3.056 3.056 0 013.048 3.048 3.056 3.056 0 01-3.048 3.047z"})})}function hu({children:e,className:t,...r}){return m.jsx("button",{type:"button",className:on(["react-flow__controls-button",t]),...r,children:e})}const lB=e=>({isInteractive:e.nodesDraggable||e.nodesConnectable||e.elementsSelectable,minZoomReached:e.transform[2]<=e.minZoom,maxZoomReached:e.transform[2]>=e.maxZoom,ariaLabelConfig:e.ariaLabelConfig});function o2({style:e,showZoom:t=!0,showFitView:r=!0,showInteractive:a=!0,fitViewOptions:s,onZoomIn:o,onZoomOut:c,onFitView:d,onInteractiveChange:f,className:h,children:p,position:g="bottom-left",orientation:y="vertical","aria-label":b}){const _=Lt(),{isInteractive:E,minZoomReached:S,maxZoomReached:w,ariaLabelConfig:k}=dt(lB,qt),{zoomIn:N,zoomOut:M,fitView:B}=$o(),R=()=>{N(),o==null||o()},U=()=>{M(),c==null||c()},I=()=>{B(s),d==null||d()},X=()=>{_.setState({nodesDraggable:!E,nodesConnectable:!E,elementsSelectable:!E}),f==null||f(!E)},j=y==="horizontal"?"horizontal":"vertical";return m.jsxs(od,{className:on(["react-flow__controls",j,h]),position:g,style:e,"data-testid":"rf__controls","aria-label":b??k["controls.ariaLabel"],children:[t&&m.jsxs(m.Fragment,{children:[m.jsx(hu,{onClick:R,className:"react-flow__controls-zoomin",title:k["controls.zoomIn.ariaLabel"],"aria-label":k["controls.zoomIn.ariaLabel"],disabled:w,children:m.jsx(nB,{})}),m.jsx(hu,{onClick:U,className:"react-flow__controls-zoomout",title:k["controls.zoomOut.ariaLabel"],"aria-label":k["controls.zoomOut.ariaLabel"],disabled:S,children:m.jsx(rB,{})})]}),r&&m.jsx(hu,{className:"react-flow__controls-fitview",onClick:I,title:k["controls.fitView.ariaLabel"],"aria-label":k["controls.fitView.ariaLabel"],children:m.jsx(iB,{})}),a&&m.jsx(hu,{className:"react-flow__controls-interactive",onClick:X,title:k["controls.interactive.ariaLabel"],"aria-label":k["controls.interactive.ariaLabel"],children:E?m.jsx(sB,{}):m.jsx(aB,{})}),p]})}o2.displayName="Controls";const oB=ee.memo(o2);function cB({id:e,x:t,y:r,width:a,height:s,style:o,color:c,strokeColor:d,strokeWidth:f,className:h,borderRadius:p,shapeRendering:g,selected:y,onClick:b}){const{background:_,backgroundColor:E}=o||{},S=c||_||E;return m.jsx("rect",{className:on(["react-flow__minimap-node",{selected:y},h]),x:t,y:r,rx:p,ry:p,width:a,height:s,style:{fill:S,stroke:d,strokeWidth:f},shapeRendering:g,onClick:b?w=>b(w,e):void 0})}const uB=ee.memo(cB),dB=e=>e.nodes.map(t=>t.id),Dm=e=>e instanceof Function?e:()=>e;function fB({nodeStrokeColor:e,nodeColor:t,nodeClassName:r="",nodeBorderRadius:a=5,nodeStrokeWidth:s,nodeComponent:o=uB,onClick:c}){const d=dt(dB,qt),f=Dm(t),h=Dm(e),p=Dm(r),g=typeof window>"u"||window.chrome?"crispEdges":"geometricPrecision";return m.jsx(m.Fragment,{children:d.map(y=>m.jsx(mB,{id:y,nodeColorFunc:f,nodeStrokeColorFunc:h,nodeClassNameFunc:p,nodeBorderRadius:a,nodeStrokeWidth:s,NodeComponent:o,onClick:c,shapeRendering:g},y))})}function hB({id:e,nodeColorFunc:t,nodeStrokeColorFunc:r,nodeClassNameFunc:a,nodeBorderRadius:s,nodeStrokeWidth:o,shapeRendering:c,NodeComponent:d,onClick:f}){const{node:h,x:p,y:g,width:y,height:b}=dt(_=>{const E=_.nodeLookup.get(e);if(!E)return{node:void 0,x:0,y:0,width:0,height:0};const S=E.internals.userNode,{x:w,y:k}=E.internals.positionAbsolute,{width:N,height:M}=Qr(S);return{node:S,x:w,y:k,width:N,height:M}},qt);return!h||h.hidden||!lN(h)?null:m.jsx(d,{x:p,y:g,width:y,height:b,style:h.style,selected:!!h.selected,className:a(h),color:t(h),borderRadius:s,strokeColor:r(h),strokeWidth:o,shapeRendering:c,onClick:f,id:h.id})}const mB=ee.memo(hB);var pB=ee.memo(fB);const gB=200,xB=150,bB=e=>!e.hidden,yB=e=>{const t={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:t,boundingRect:e.nodeLookup.size>0?iN(Bo(e.nodeLookup,{filter:bB}),t):t,rfId:e.rfId,panZoom:e.panZoom,translateExtent:e.translateExtent,flowWidth:e.width,flowHeight:e.height,ariaLabelConfig:e.ariaLabelConfig}},W1=(e,t)=>e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height,vB=(e,t)=>W1(e.viewBB,t.viewBB)&&W1(e.boundingRect,t.boundingRect)&&e.rfId===t.rfId&&e.panZoom===t.panZoom&&e.translateExtent===t.translateExtent&&e.flowWidth===t.flowWidth&&e.flowHeight===t.flowHeight&&e.ariaLabelConfig===t.ariaLabelConfig,_B="react-flow__minimap-desc";function c2({style:e,className:t,nodeStrokeColor:r,nodeColor:a,nodeClassName:s="",nodeBorderRadius:o=5,nodeStrokeWidth:c,nodeComponent:d,bgColor:f,maskColor:h,maskStrokeColor:p,maskStrokeWidth:g,position:y="bottom-right",onClick:b,onNodeClick:_,pannable:E=!1,zoomable:S=!1,ariaLabel:w,inversePan:k,zoomStep:N=1,offsetScale:M=5}){const B=Lt(),R=ee.useRef(null),{boundingRect:U,viewBB:I,rfId:X,panZoom:j,translateExtent:z,flowWidth:V,flowHeight:P,ariaLabelConfig:T}=dt(yB,vB),$=(e==null?void 0:e.width)??gB,O=(e==null?void 0:e.height)??xB,H=U.width/$,K=U.height/O,Z=Math.max(H,K),C=Z*$,D=Z*O,Y=M*Z,L=U.x-(C-U.width)/2-Y,G=U.y-(D-U.height)/2-Y,q=C+Y*2,Q=D+Y*2,J=`${_B}-${X}`,W=ee.useRef(0),te=ee.useRef();W.current=Z,ee.useEffect(()=>{if(R.current&&j)return te.current=RI({domNode:R.current,panZoom:j,getTransform:()=>B.getState().transform,getViewScale:()=>W.current}),()=>{var we;(we=te.current)==null||we.destroy()}},[j]),ee.useEffect(()=>{var we;(we=te.current)==null||we.update({translateExtent:z,width:V,height:P,inversePan:k,pannable:E,zoomStep:N,zoomable:S})},[E,S,k,N,z,V,P]);const ce=b?we=>{var $e;const[Ne,De]=(($e=te.current)==null?void 0:$e.pointer(we))||[0,0];b(we,{x:Ne,y:De})}:void 0,fe=_?ee.useCallback((we,Ne)=>{const De=B.getState().nodeLookup.get(Ne).internals.userNode;_(we,De)},[]):void 0,xe=w??T["minimap.ariaLabel"];return m.jsx(od,{position:y,style:{...e,"--xy-minimap-background-color-props":typeof f=="string"?f:void 0,"--xy-minimap-mask-background-color-props":typeof h=="string"?h:void 0,"--xy-minimap-mask-stroke-color-props":typeof p=="string"?p:void 0,"--xy-minimap-mask-stroke-width-props":typeof g=="number"?g*Z:void 0,"--xy-minimap-node-background-color-props":typeof a=="string"?a:void 0,"--xy-minimap-node-stroke-color-props":typeof r=="string"?r:void 0,"--xy-minimap-node-stroke-width-props":typeof c=="number"?c:void 0},className:on(["react-flow__minimap",t]),"data-testid":"rf__minimap",children:m.jsxs("svg",{width:$,height:O,viewBox:`${L} ${G} ${q} ${Q}`,className:"react-flow__minimap-svg",role:"img","aria-labelledby":J,ref:R,onClick:ce,children:[xe&&m.jsx("title",{id:J,children:xe}),m.jsx(pB,{onClick:fe,nodeColor:a,nodeStrokeColor:r,nodeBorderRadius:o,nodeClassName:s,nodeStrokeWidth:c,nodeComponent:d}),m.jsx("path",{className:"react-flow__minimap-mask",d:`M${L-Y},${G-Y}h${q+Y*2}v${Q+Y*2}h${-q-Y*2}z + M${I.x},${I.y}h${I.width}v${I.height}h${-I.width}z`,fillRule:"evenodd",pointerEvents:"none"})]})})}c2.displayName="MiniMap";const wB=ee.memo(c2),EB=e=>t=>e?`${Math.max(1/t.transform[2],1)}`:void 0,NB={[el.Line]:"right",[el.Handle]:"bottom-right"};function SB({nodeId:e,position:t,variant:r=el.Handle,className:a,style:s=void 0,children:o,color:c,minWidth:d=10,minHeight:f=10,maxWidth:h=Number.MAX_VALUE,maxHeight:p=Number.MAX_VALUE,keepAspectRatio:g=!1,resizeDirection:y,autoScale:b=!0,shouldResize:_,onResizeStart:E,onResize:S,onResizeEnd:w}){const k=HN(),N=typeof e=="string"?e:k,M=Lt(),B=ee.useRef(null),R=r===el.Handle,U=dt(ee.useCallback(EB(R&&b),[R,b]),qt),I=ee.useRef(null),X=t??NB[r];ee.useEffect(()=>{if(!(!B.current||!N))return I.current||(I.current=GI({domNode:B.current,nodeId:N,getStoreItems:()=>{const{nodeLookup:z,transform:V,snapGrid:P,snapToGrid:T,nodeOrigin:$,domNode:O}=M.getState();return{nodeLookup:z,transform:V,snapGrid:P,snapToGrid:T,nodeOrigin:$,paneDomNode:O}},onChange:(z,V)=>{const{triggerNodeChanges:P,nodeLookup:T,parentLookup:$,nodeOrigin:O}=M.getState(),H=[],K={x:z.x,y:z.y},Z=T.get(N);if(Z&&Z.expandParent&&Z.parentId){const C=Z.origin??O,D=z.width??Z.measured.width??0,Y=z.height??Z.measured.height??0,L={id:Z.id,parentId:Z.parentId,rect:{width:D,height:Y,...oN({x:z.x??Z.position.x,y:z.y??Z.position.y},{width:D,height:Y},Z.parentId,T,C)}},G=mg([L],T,$,O);H.push(...G),K.x=z.x?Math.max(C[0]*D,z.x):void 0,K.y=z.y?Math.max(C[1]*Y,z.y):void 0}if(K.x!==void 0&&K.y!==void 0){const C={id:N,type:"position",position:{...K}};H.push(C)}if(z.width!==void 0&&z.height!==void 0){const D={id:N,type:"dimensions",resizing:!0,setAttributes:y?y==="horizontal"?"width":"height":!0,dimensions:{width:z.width,height:z.height}};H.push(D)}for(const C of V){const D={...C,type:"position"};H.push(D)}P(H)},onEnd:({width:z,height:V})=>{const P={id:N,type:"dimensions",resizing:!1,dimensions:{width:z,height:V}};M.getState().triggerNodeChanges([P])}})),I.current.update({controlPosition:X,boundaries:{minWidth:d,minHeight:f,maxWidth:h,maxHeight:p},keepAspectRatio:g,resizeDirection:y,onResizeStart:E,onResize:S,onResizeEnd:w,shouldResize:_}),()=>{var z;(z=I.current)==null||z.destroy()}},[X,d,f,h,p,g,E,S,w,_]);const j=X.split("-");return m.jsx("div",{className:on(["react-flow__resize-control","nodrag",...j,r,a]),ref:B,style:{...s,scale:U,...c&&{[R?"backgroundColor":"borderColor"]:c}},children:o})}ee.memo(SB);var vt=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),zr=vt((e,t)=>{var r=Object.defineProperty,a=(P,T,$)=>T in P?r(P,T,{enumerable:!0,configurable:!0,writable:!0,value:$}):P[T]=$,s=(P,T)=>()=>(T||P((T={exports:{}}).exports,T),T.exports),o=(P,T,$)=>a(P,typeof T!="symbol"?T+"":T,$),c=s((P,T)=>{var $="\0",O="\0",H="",K=class{constructor(G){o(this,"_isDirected",!0),o(this,"_isMultigraph",!1),o(this,"_isCompound",!1),o(this,"_label"),o(this,"_defaultNodeLabelFn",()=>{}),o(this,"_defaultEdgeLabelFn",()=>{}),o(this,"_nodes",{}),o(this,"_in",{}),o(this,"_preds",{}),o(this,"_out",{}),o(this,"_sucs",{}),o(this,"_edgeObjs",{}),o(this,"_edgeLabels",{}),o(this,"_nodeCount",0),o(this,"_edgeCount",0),o(this,"_parent"),o(this,"_children"),G&&(this._isDirected=Object.hasOwn(G,"directed")?G.directed:!0,this._isMultigraph=Object.hasOwn(G,"multigraph")?G.multigraph:!1,this._isCompound=Object.hasOwn(G,"compound")?G.compound:!1),this._isCompound&&(this._parent={},this._children={},this._children[O]={})}isDirected(){return this._isDirected}isMultigraph(){return this._isMultigraph}isCompound(){return this._isCompound}setGraph(G){return this._label=G,this}graph(){return this._label}setDefaultNodeLabel(G){return this._defaultNodeLabelFn=G,typeof G!="function"&&(this._defaultNodeLabelFn=()=>G),this}nodeCount(){return this._nodeCount}nodes(){return Object.keys(this._nodes)}sources(){var G=this;return this.nodes().filter(q=>Object.keys(G._in[q]).length===0)}sinks(){var G=this;return this.nodes().filter(q=>Object.keys(G._out[q]).length===0)}setNodes(G,q){var Q=arguments,J=this;return G.forEach(function(W){Q.length>1?J.setNode(W,q):J.setNode(W)}),this}setNode(G,q){return Object.hasOwn(this._nodes,G)?(arguments.length>1&&(this._nodes[G]=q),this):(this._nodes[G]=arguments.length>1?q:this._defaultNodeLabelFn(G),this._isCompound&&(this._parent[G]=O,this._children[G]={},this._children[O][G]=!0),this._in[G]={},this._preds[G]={},this._out[G]={},this._sucs[G]={},++this._nodeCount,this)}node(G){return this._nodes[G]}hasNode(G){return Object.hasOwn(this._nodes,G)}removeNode(G){var q=this;if(Object.hasOwn(this._nodes,G)){var Q=J=>q.removeEdge(q._edgeObjs[J]);delete this._nodes[G],this._isCompound&&(this._removeFromParentsChildList(G),delete this._parent[G],this.children(G).forEach(function(J){q.setParent(J)}),delete this._children[G]),Object.keys(this._in[G]).forEach(Q),delete this._in[G],delete this._preds[G],Object.keys(this._out[G]).forEach(Q),delete this._out[G],delete this._sucs[G],--this._nodeCount}return this}setParent(G,q){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(q===void 0)q=O;else{q+="";for(var Q=q;Q!==void 0;Q=this.parent(Q))if(Q===G)throw new Error("Setting "+q+" as parent of "+G+" would create a cycle");this.setNode(q)}return this.setNode(G),this._removeFromParentsChildList(G),this._parent[G]=q,this._children[q][G]=!0,this}_removeFromParentsChildList(G){delete this._children[this._parent[G]][G]}parent(G){if(this._isCompound){var q=this._parent[G];if(q!==O)return q}}children(G=O){if(this._isCompound){var q=this._children[G];if(q)return Object.keys(q)}else{if(G===O)return this.nodes();if(this.hasNode(G))return[]}}predecessors(G){var q=this._preds[G];if(q)return Object.keys(q)}successors(G){var q=this._sucs[G];if(q)return Object.keys(q)}neighbors(G){var q=this.predecessors(G);if(q){let J=new Set(q);for(var Q of this.successors(G))J.add(Q);return Array.from(J.values())}}isLeaf(G){var q;return this.isDirected()?q=this.successors(G):q=this.neighbors(G),q.length===0}filterNodes(G){var q=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});q.setGraph(this.graph());var Q=this;Object.entries(this._nodes).forEach(function([te,ce]){G(te)&&q.setNode(te,ce)}),Object.values(this._edgeObjs).forEach(function(te){q.hasNode(te.v)&&q.hasNode(te.w)&&q.setEdge(te,Q.edge(te))});var J={};function W(te){var ce=Q.parent(te);return ce===void 0||q.hasNode(ce)?(J[te]=ce,ce):ce in J?J[ce]:W(ce)}return this._isCompound&&q.nodes().forEach(te=>q.setParent(te,W(te))),q}setDefaultEdgeLabel(G){return this._defaultEdgeLabelFn=G,typeof G!="function"&&(this._defaultEdgeLabelFn=()=>G),this}edgeCount(){return this._edgeCount}edges(){return Object.values(this._edgeObjs)}setPath(G,q){var Q=this,J=arguments;return G.reduce(function(W,te){return J.length>1?Q.setEdge(W,te,q):Q.setEdge(W,te),te}),this}setEdge(){var G,q,Q,J,W=!1,te=arguments[0];typeof te=="object"&&te!==null&&"v"in te?(G=te.v,q=te.w,Q=te.name,arguments.length===2&&(J=arguments[1],W=!0)):(G=te,q=arguments[1],Q=arguments[3],arguments.length>2&&(J=arguments[2],W=!0)),G=""+G,q=""+q,Q!==void 0&&(Q=""+Q);var ce=D(this._isDirected,G,q,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(G),this.setNode(q),this._edgeLabels[ce]=W?J:this._defaultEdgeLabelFn(G,q,Q);var fe=Y(this._isDirected,G,q,Q);return G=fe.v,q=fe.w,Object.freeze(fe),this._edgeObjs[ce]=fe,Z(this._preds[q],G),Z(this._sucs[G],q),this._in[q][ce]=fe,this._out[G][ce]=fe,this._edgeCount++,this}edge(G,q,Q){var J=arguments.length===1?L(this._isDirected,arguments[0]):D(this._isDirected,G,q,Q);return this._edgeLabels[J]}edgeAsObj(){let G=this.edge(...arguments);return typeof G!="object"?{label:G}:G}hasEdge(G,q,Q){var J=arguments.length===1?L(this._isDirected,arguments[0]):D(this._isDirected,G,q,Q);return Object.hasOwn(this._edgeLabels,J)}removeEdge(G,q,Q){var J=arguments.length===1?L(this._isDirected,arguments[0]):D(this._isDirected,G,q,Q),W=this._edgeObjs[J];return W&&(G=W.v,q=W.w,delete this._edgeLabels[J],delete this._edgeObjs[J],C(this._preds[q],G),C(this._sucs[G],q),delete this._in[q][J],delete this._out[G][J],this._edgeCount--),this}inEdges(G,q){return this.isDirected()?this.filterEdges(this._in[G],G,q):this.nodeEdges(G,q)}outEdges(G,q){return this.isDirected()?this.filterEdges(this._out[G],G,q):this.nodeEdges(G,q)}nodeEdges(G,q){if(G in this._nodes)return this.filterEdges({...this._in[G],...this._out[G]},G,q)}filterEdges(G,q,Q){if(G){var J=Object.values(G);return Q?J.filter(function(W){return W.v===q&&W.w===Q||W.v===Q&&W.w===q}):J}}};function Z(G,q){G[q]?G[q]++:G[q]=1}function C(G,q){--G[q]||delete G[q]}function D(G,q,Q,J){var W=""+q,te=""+Q;if(!G&&W>te){var ce=W;W=te,te=ce}return W+H+te+H+(J===void 0?$:J)}function Y(G,q,Q,J){var W=""+q,te=""+Q;if(!G&&W>te){var ce=W;W=te,te=ce}var fe={v:W,w:te};return J&&(fe.name=J),fe}function L(G,q){return D(G,q.v,q.w,q.name)}T.exports=K}),d=s((P,T)=>{T.exports="3.0.2"}),f=s((P,T)=>{T.exports={Graph:c(),version:d()}}),h=s((P,T)=>{var $=c();T.exports={write:O,read:Z};function O(C){var D={options:{directed:C.isDirected(),multigraph:C.isMultigraph(),compound:C.isCompound()},nodes:H(C),edges:K(C)};return C.graph()!==void 0&&(D.value=structuredClone(C.graph())),D}function H(C){return C.nodes().map(function(D){var Y=C.node(D),L=C.parent(D),G={v:D};return Y!==void 0&&(G.value=Y),L!==void 0&&(G.parent=L),G})}function K(C){return C.edges().map(function(D){var Y=C.edge(D),L={v:D.v,w:D.w};return D.name!==void 0&&(L.name=D.name),Y!==void 0&&(L.value=Y),L})}function Z(C){var D=new $(C.options).setGraph(C.value);return C.nodes.forEach(function(Y){D.setNode(Y.v,Y.value),Y.parent&&D.setParent(Y.v,Y.parent)}),C.edges.forEach(function(Y){D.setEdge({v:Y.v,w:Y.w,name:Y.name},Y.value)}),D}}),p=s((P,T)=>{T.exports=O;var $=()=>1;function O(K,Z,C,D){return H(K,String(Z),C||$,D||function(Y){return K.outEdges(Y)})}function H(K,Z,C,D){var Y={},L=!0,G=0,q=K.nodes(),Q=function(ce){var fe=C(ce);Y[ce.v].distance+fe{T.exports=$;function $(O){var H={},K=[],Z;function C(D){Object.hasOwn(H,D)||(H[D]=!0,Z.push(D),O.successors(D).forEach(C),O.predecessors(D).forEach(C))}return O.nodes().forEach(function(D){Z=[],C(D),Z.length&&K.push(Z)}),K}}),y=s((P,T)=>{var $=class{constructor(){o(this,"_arr",[]),o(this,"_keyIndices",{})}size(){return this._arr.length}keys(){return this._arr.map(function(O){return O.key})}has(O){return Object.hasOwn(this._keyIndices,O)}priority(O){var H=this._keyIndices[O];if(H!==void 0)return this._arr[H].priority}min(){if(this.size()===0)throw new Error("Queue underflow");return this._arr[0].key}add(O,H){var K=this._keyIndices;if(O=String(O),!Object.hasOwn(K,O)){var Z=this._arr,C=Z.length;return K[O]=C,Z.push({key:O,priority:H}),this._decrease(C),!0}return!1}removeMin(){this._swap(0,this._arr.length-1);var O=this._arr.pop();return delete this._keyIndices[O.key],this._heapify(0),O.key}decrease(O,H){var K=this._keyIndices[O];if(H>this._arr[K].priority)throw new Error("New priority is greater than current priority. Key: "+O+" Old: "+this._arr[K].priority+" New: "+H);this._arr[K].priority=H,this._decrease(K)}_heapify(O){var H=this._arr,K=2*O,Z=K+1,C=O;K>1,!(H[Z].priority{var $=y();T.exports=H;var O=()=>1;function H(Z,C,D,Y){var L=function(G){return Z.outEdges(G)};return K(Z,String(C),D||O,Y||L)}function K(Z,C,D,Y){var L={},G=new $,q,Q,J=function(W){var te=W.v!==q?W.v:W.w,ce=L[te],fe=D(W),xe=Q.distance+fe;if(fe<0)throw new Error("dijkstra does not allow negative edge weights. Bad edge: "+W+" Weight: "+fe);xe0&&(q=G.removeMin(),Q=L[q],Q.distance!==Number.POSITIVE_INFINITY);)Y(q).forEach(J);return L}}),_=s((P,T)=>{var $=b();T.exports=O;function O(H,K,Z){return H.nodes().reduce(function(C,D){return C[D]=$(H,D,K,Z),C},{})}}),E=s((P,T)=>{T.exports=$;function $(H,K,Z){if(H[K].predecessor!==void 0)throw new Error("Invalid source vertex");if(H[Z].predecessor===void 0&&Z!==K)throw new Error("Invalid destination vertex");return{weight:H[Z].distance,path:O(H,K,Z)}}function O(H,K,Z){for(var C=[],D=Z;D!==K;)C.push(D),D=H[D].predecessor;return C.push(K),C.reverse()}}),S=s((P,T)=>{T.exports=$;function $(O){var H=0,K=[],Z={},C=[];function D(Y){var L=Z[Y]={onStack:!0,lowlink:H,index:H++};if(K.push(Y),O.successors(Y).forEach(function(Q){Object.hasOwn(Z,Q)?Z[Q].onStack&&(L.lowlink=Math.min(L.lowlink,Z[Q].index)):(D(Q),L.lowlink=Math.min(L.lowlink,Z[Q].lowlink))}),L.lowlink===L.index){var G=[],q;do q=K.pop(),Z[q].onStack=!1,G.push(q);while(Y!==q);C.push(G)}}return O.nodes().forEach(function(Y){Object.hasOwn(Z,Y)||D(Y)}),C}}),w=s((P,T)=>{var $=S();T.exports=O;function O(H){return $(H).filter(function(K){return K.length>1||K.length===1&&H.hasEdge(K[0],K[0])})}}),k=s((P,T)=>{T.exports=O;var $=()=>1;function O(K,Z,C){return H(K,Z||$,C||function(D){return K.outEdges(D)})}function H(K,Z,C){var D={},Y=K.nodes();return Y.forEach(function(L){D[L]={},D[L][L]={distance:0},Y.forEach(function(G){L!==G&&(D[L][G]={distance:Number.POSITIVE_INFINITY})}),C(L).forEach(function(G){var q=G.v===L?G.w:G.v,Q=Z(G);D[L][q]={distance:Q,predecessor:L}})}),Y.forEach(function(L){var G=D[L];Y.forEach(function(q){var Q=D[q];Y.forEach(function(J){var W=Q[L],te=G[J],ce=Q[J],fe=W.distance+te.distance;fe{function $(H){var K={},Z={},C=[];function D(Y){if(Object.hasOwn(Z,Y))throw new O;Object.hasOwn(K,Y)||(Z[Y]=!0,K[Y]=!0,H.predecessors(Y).forEach(D),delete Z[Y],C.push(Y))}if(H.sinks().forEach(D),Object.keys(K).length!==H.nodeCount())throw new O;return C}var O=class extends Error{constructor(){super(...arguments)}};T.exports=$,$.CycleException=O}),M=s((P,T)=>{var $=N();T.exports=O;function O(H){try{$(H)}catch(K){if(K instanceof $.CycleException)return!1;throw K}return!0}}),B=s((P,T)=>{T.exports=$;function $(H,K,Z,C,D){Array.isArray(K)||(K=[K]);var Y=(H.isDirected()?H.successors:H.neighbors).bind(H),L={};return K.forEach(function(G){if(!H.hasNode(G))throw new Error("Graph does not have node: "+G);D=O(H,G,Z==="post",L,Y,C,D)}),D}function O(H,K,Z,C,D,Y,L){return Object.hasOwn(C,K)||(C[K]=!0,Z||(L=Y(L,K)),D(K).forEach(function(G){L=O(H,G,Z,C,D,Y,L)}),Z&&(L=Y(L,K))),L}}),R=s((P,T)=>{var $=B();T.exports=O;function O(H,K,Z){return $(H,K,Z,function(C,D){return C.push(D),C},[])}}),U=s((P,T)=>{var $=R();T.exports=O;function O(H,K){return $(H,K,"post")}}),I=s((P,T)=>{var $=R();T.exports=O;function O(H,K){return $(H,K,"pre")}}),X=s((P,T)=>{var $=c(),O=y();T.exports=H;function H(K,Z){var C=new $,D={},Y=new O,L;function G(Q){var J=Q.v===L?Q.w:Q.v,W=Y.priority(J);if(W!==void 0){var te=Z(Q);te0;){if(L=Y.removeMin(),Object.hasOwn(D,L))C.setEdge(L,D[L]);else{if(q)throw new Error("Input graph is not connected: "+K);q=!0}K.nodeEdges(L).forEach(G)}return C}}),j=s((P,T)=>{var $=b(),O=p();T.exports=H;function H(Z,C,D,Y){return K(Z,C,D,Y||function(L){return Z.outEdges(L)})}function K(Z,C,D,Y){if(D===void 0)return $(Z,C,D,Y);for(var L=!1,G=Z.nodes(),q=0;q{T.exports={bellmanFord:p(),components:g(),dijkstra:b(),dijkstraAll:_(),extractPath:E(),findCycles:w(),floydWarshall:k(),isAcyclic:M(),postorder:U(),preorder:I(),prim:X(),shortestPaths:j(),reduce:B(),tarjan:S(),topsort:N()}}),V=f();t.exports={Graph:V.Graph,json:h(),alg:z(),version:V.version}}),kB=vt((e,t)=>{var r=class{constructor(){let o={};o._next=o._prev=o,this._sentinel=o}dequeue(){let o=this._sentinel,c=o._prev;if(c!==o)return a(c),c}enqueue(o){let c=this._sentinel;o._prev&&o._next&&a(o),o._next=c._next,c._next._prev=o,c._next=o,o._prev=c}toString(){let o=[],c=this._sentinel,d=c._prev;for(;d!==c;)o.push(JSON.stringify(d,s)),d=d._prev;return"["+o.join(", ")+"]"}};function a(o){o._prev._next=o._next,o._next._prev=o._prev,delete o._next,delete o._prev}function s(o,c){if(o!=="_next"&&o!=="_prev")return c}t.exports=r}),CB=vt((e,t)=>{var r=zr().Graph,a=kB();t.exports=o;var s=()=>1;function o(g,y){if(g.nodeCount()<=1)return[];let b=f(g,y||s);return c(b.graph,b.buckets,b.zeroIdx).flatMap(_=>g.outEdges(_.v,_.w))}function c(g,y,b){let _=[],E=y[y.length-1],S=y[0],w;for(;g.nodeCount();){for(;w=S.dequeue();)d(g,y,b,w);for(;w=E.dequeue();)d(g,y,b,w);if(g.nodeCount()){for(let k=y.length-2;k>0;--k)if(w=y[k].dequeue(),w){_=_.concat(d(g,y,b,w,!0));break}}}return _}function d(g,y,b,_,E){let S=E?[]:void 0;return g.inEdges(_.v).forEach(w=>{let k=g.edge(w),N=g.node(w.v);E&&S.push({v:w.v,w:w.w}),N.out-=k,h(y,b,N)}),g.outEdges(_.v).forEach(w=>{let k=g.edge(w),N=w.w,M=g.node(N);M.in-=k,h(y,b,M)}),g.removeNode(_.v),S}function f(g,y){let b=new r,_=0,E=0;g.nodes().forEach(k=>{b.setNode(k,{v:k,in:0,out:0})}),g.edges().forEach(k=>{let N=b.edge(k.v,k.w)||0,M=y(k),B=N+M;b.setEdge(k.v,k.w,B),E=Math.max(E,b.node(k.v).out+=M),_=Math.max(_,b.node(k.w).in+=M)});let S=p(E+_+3).map(()=>new a),w=_+1;return b.nodes().forEach(k=>{h(S,w,b.node(k))}),{graph:b,buckets:S,zeroIdx:w}}function h(g,y,b){b.out?b.in?g[b.out-b.in+y].enqueue(b):g[g.length-1].enqueue(b):g[0].enqueue(b)}function p(g){let y=[];for(let b=0;b{var r=zr().Graph;t.exports={addBorderNode:y,addDummyNode:a,applyWithChunking:E,asNonCompoundGraph:o,buildLayerMatrix:h,intersectRect:f,mapValues:I,maxRank:S,normalizeRanks:p,notime:N,partition:w,pick:U,predecessorWeights:d,range:R,removeEmptyRanks:g,simplify:s,successorWeights:c,time:k,uniqueId:B,zipObject:X};function a(j,z,V,P){for(var T=P;j.hasNode(T);)T=B(P);return V.dummy=z,j.setNode(T,V),T}function s(j){let z=new r().setGraph(j.graph());return j.nodes().forEach(V=>z.setNode(V,j.node(V))),j.edges().forEach(V=>{let P=z.edge(V.v,V.w)||{weight:0,minlen:1},T=j.edge(V);z.setEdge(V.v,V.w,{weight:P.weight+T.weight,minlen:Math.max(P.minlen,T.minlen)})}),z}function o(j){let z=new r({multigraph:j.isMultigraph()}).setGraph(j.graph());return j.nodes().forEach(V=>{j.children(V).length||z.setNode(V,j.node(V))}),j.edges().forEach(V=>{z.setEdge(V,j.edge(V))}),z}function c(j){let z=j.nodes().map(V=>{let P={};return j.outEdges(V).forEach(T=>{P[T.w]=(P[T.w]||0)+j.edge(T).weight}),P});return X(j.nodes(),z)}function d(j){let z=j.nodes().map(V=>{let P={};return j.inEdges(V).forEach(T=>{P[T.v]=(P[T.v]||0)+j.edge(T).weight}),P});return X(j.nodes(),z)}function f(j,z){let V=j.x,P=j.y,T=z.x-V,$=z.y-P,O=j.width/2,H=j.height/2;if(!T&&!$)throw new Error("Not possible to find intersection inside of the rectangle");let K,Z;return Math.abs($)*O>Math.abs(T)*H?($<0&&(H=-H),K=H*T/$,Z=H):(T<0&&(O=-O),K=O,Z=O*$/T),{x:V+K,y:P+Z}}function h(j){let z=R(S(j)+1).map(()=>[]);return j.nodes().forEach(V=>{let P=j.node(V),T=P.rank;T!==void 0&&(z[T][P.order]=V)}),z}function p(j){let z=j.nodes().map(P=>{let T=j.node(P).rank;return T===void 0?Number.MAX_VALUE:T}),V=E(Math.min,z);j.nodes().forEach(P=>{let T=j.node(P);Object.hasOwn(T,"rank")&&(T.rank-=V)})}function g(j){let z=j.nodes().map(O=>j.node(O).rank).filter(O=>O!==void 0),V=E(Math.min,z),P=[];j.nodes().forEach(O=>{let H=j.node(O).rank-V;P[H]||(P[H]=[]),P[H].push(O)});let T=0,$=j.graph().nodeRankFactor;Array.from(P).forEach((O,H)=>{O===void 0&&H%$!==0?--T:O!==void 0&&T&&O.forEach(K=>j.node(K).rank+=T)})}function y(j,z,V,P){let T={width:0,height:0};return arguments.length>=4&&(T.rank=V,T.order=P),a(j,"border",T,z)}function b(j,z=_){let V=[];for(let P=0;P_){let V=b(z);return j.apply(null,V.map(P=>j.apply(null,P)))}else return j.apply(null,z)}function S(j){let z=j.nodes().map(V=>{let P=j.node(V).rank;return P===void 0?Number.MIN_VALUE:P});return E(Math.max,z)}function w(j,z){let V={lhs:[],rhs:[]};return j.forEach(P=>{z(P)?V.lhs.push(P):V.rhs.push(P)}),V}function k(j,z){let V=Date.now();try{return z()}finally{console.log(j+" time: "+(Date.now()-V)+"ms")}}function N(j,z){return z()}var M=0;function B(j){var z=++M;return j+(""+z)}function R(j,z,V=1){z==null&&(z=j,j=0);let P=$=>$z<$);let T=[];for(let $=j;P($);$+=V)T.push($);return T}function U(j,z){let V={};for(let P of z)j[P]!==void 0&&(V[P]=j[P]);return V}function I(j,z){let V=z;return typeof z=="string"&&(V=P=>P[z]),Object.entries(j).reduce((P,[T,$])=>(P[T]=V($,T),P),{})}function X(j,z){return j.reduce((V,P,T)=>(V[P]=z[T],V),{})}}),TB=vt((e,t)=>{var r=CB(),a=ln().uniqueId;t.exports={run:s,undo:c};function s(d){(d.graph().acyclicer==="greedy"?r(d,f(d)):o(d)).forEach(h=>{let p=d.edge(h);d.removeEdge(h),p.forwardName=h.name,p.reversed=!0,d.setEdge(h.w,h.v,p,a("rev"))});function f(h){return p=>h.edge(p).weight}}function o(d){let f=[],h={},p={};function g(y){Object.hasOwn(p,y)||(p[y]=!0,h[y]=!0,d.outEdges(y).forEach(b=>{Object.hasOwn(h,b.w)?f.push(b):g(b.w)}),delete h[y])}return d.nodes().forEach(g),f}function c(d){d.edges().forEach(f=>{let h=d.edge(f);if(h.reversed){d.removeEdge(f);let p=h.forwardName;delete h.reversed,delete h.forwardName,d.setEdge(f.w,f.v,h,p)}})}}),AB=vt((e,t)=>{var r=ln();t.exports={run:a,undo:o};function a(c){c.graph().dummyChains=[],c.edges().forEach(d=>s(c,d))}function s(c,d){let f=d.v,h=c.node(f).rank,p=d.w,g=c.node(p).rank,y=d.name,b=c.edge(d),_=b.labelRank;if(g===h+1)return;c.removeEdge(d);let E,S,w;for(w=0,++h;h{let f=c.node(d),h=f.edgeLabel,p;for(c.setEdge(f.edgeObj,h);f.dummy;)p=c.successors(d)[0],c.removeNode(d),h.points.push({x:f.x,y:f.y}),f.dummy==="edge-label"&&(h.x=f.x,h.y=f.y,h.width=f.width,h.height=f.height),d=p,f=c.node(d)})}}),$u=vt((e,t)=>{var{applyWithChunking:r}=ln();t.exports={longestPath:a,slack:s};function a(o){var c={};function d(f){var h=o.node(f);if(Object.hasOwn(c,f))return h.rank;c[f]=!0;let p=o.outEdges(f).map(y=>y==null?Number.POSITIVE_INFINITY:d(y.w)-o.edge(y).minlen);var g=r(Math.min,p);return g===Number.POSITIVE_INFINITY&&(g=0),h.rank=g}o.sources().forEach(d)}function s(o,c){return o.node(c.w).rank-o.node(c.v).rank-o.edge(c).minlen}}),u2=vt((e,t)=>{var r=zr().Graph,a=$u().slack;t.exports=s;function s(f){var h=new r({directed:!1}),p=f.nodes()[0],g=f.nodeCount();h.setNode(p,{});for(var y,b;o(h,f){var b=y.v,_=g===b?y.w:b;!f.hasNode(_)&&!a(h,y)&&(f.setNode(_,{}),f.setEdge(g,_,{}),p(_))})}return f.nodes().forEach(p),f.nodeCount()}function c(f,h){return h.edges().reduce((p,g)=>{let y=Number.POSITIVE_INFINITY;return f.hasNode(g.v)!==f.hasNode(g.w)&&(y=a(h,g)),yh.node(g).rank+=p)}}),MB=vt((e,t)=>{var r=u2(),a=$u().slack,s=$u().longestPath,o=zr().alg.preorder,c=zr().alg.postorder,d=ln().simplify;t.exports=f,f.initLowLimValues=y,f.initCutValues=h,f.calcCutValue=g,f.leaveEdge=_,f.enterEdge=E,f.exchangeEdges=S;function f(M){M=d(M),s(M);var B=r(M);y(B),h(B,M);for(var R,U;R=_(B);)U=E(B,M,R),S(B,M,R,U)}function h(M,B){var R=c(M,M.nodes());R=R.slice(0,R.length-1),R.forEach(U=>p(M,B,U))}function p(M,B,R){var U=M.node(R),I=U.parent;M.edge(R,I).cutvalue=g(M,B,R)}function g(M,B,R){var U=M.node(R),I=U.parent,X=!0,j=B.edge(R,I),z=0;return j||(X=!1,j=B.edge(I,R)),z=j.weight,B.nodeEdges(R).forEach(V=>{var P=V.v===R,T=P?V.w:V.v;if(T!==I){var $=P===X,O=B.edge(V).weight;if(z+=$?O:-O,k(M,R,T)){var H=M.edge(R,T).cutvalue;z+=$?-H:H}}}),z}function y(M,B){arguments.length<2&&(B=M.nodes()[0]),b(M,{},1,B)}function b(M,B,R,U,I){var X=R,j=M.node(U);return B[U]=!0,M.neighbors(U).forEach(z=>{Object.hasOwn(B,z)||(R=b(M,B,R,z,U))}),j.low=X,j.lim=R++,I?j.parent=I:delete j.parent,R}function _(M){return M.edges().find(B=>M.edge(B).cutvalue<0)}function E(M,B,R){var U=R.v,I=R.w;B.hasEdge(U,I)||(U=R.w,I=R.v);var X=M.node(U),j=M.node(I),z=X,V=!1;X.lim>j.lim&&(z=j,V=!0);var P=B.edges().filter(T=>V===N(M,M.node(T.v),z)&&V!==N(M,M.node(T.w),z));return P.reduce((T,$)=>a(B,$)!B.node(I).parent),U=o(M,R);U=U.slice(1),U.forEach(I=>{var X=M.node(I).parent,j=B.edge(I,X),z=!1;j||(j=B.edge(X,I),z=!0),B.node(I).rank=B.node(X).rank+(z?j.minlen:-j.minlen)})}function k(M,B,R){return M.hasEdge(B,R)}function N(M,B,R){return R.low<=B.lim&&B.lim<=R.lim}}),OB=vt((e,t)=>{var r=$u(),a=r.longestPath,s=u2(),o=MB();t.exports=c;function c(p){var g=p.graph().ranker;if(g instanceof Function)return g(p);switch(p.graph().ranker){case"network-simplex":h(p);break;case"tight-tree":f(p);break;case"longest-path":d(p);break;case"none":break;default:h(p)}}var d=a;function f(p){a(p),s(p)}function h(p){o(p)}}),RB=vt((e,t)=>{t.exports=r;function r(o){let c=s(o);o.graph().dummyChains.forEach(d=>{let f=o.node(d),h=f.edgeObj,p=a(o,c,h.v,h.w),g=p.path,y=p.lca,b=0,_=g[b],E=!0;for(;d!==h.w;){if(f=o.node(d),E){for(;(_=g[b])!==y&&o.node(_).maxRankg||y>c[b].lim));for(_=b,b=f;(b=o.parent(b))!==_;)p.push(b);return{path:h.concat(p.reverse()),lca:_}}function s(o){let c={},d=0;function f(h){let p=d;o.children(h).forEach(f),c[h]={low:p,lim:d++}}return o.children().forEach(f),c}}),jB=vt((e,t)=>{var r=ln();t.exports={run:a,cleanup:d};function a(f){let h=r.addDummyNode(f,"root",{},"_root"),p=o(f),g=Object.values(p),y=r.applyWithChunking(Math.max,g)-1,b=2*y+1;f.graph().nestingRoot=h,f.edges().forEach(E=>f.edge(E).minlen*=b);let _=c(f)+1;f.children().forEach(E=>s(f,h,b,_,y,p,E)),f.graph().nodeRankFactor=b}function s(f,h,p,g,y,b,_){let E=f.children(_);if(!E.length){_!==h&&f.setEdge(h,_,{weight:0,minlen:p});return}let S=r.addBorderNode(f,"_bt"),w=r.addBorderNode(f,"_bb"),k=f.node(_);f.setParent(S,_),k.borderTop=S,f.setParent(w,_),k.borderBottom=w,E.forEach(N=>{s(f,h,p,g,y,b,N);let M=f.node(N),B=M.borderTop?M.borderTop:N,R=M.borderBottom?M.borderBottom:N,U=M.borderTop?g:2*g,I=B!==R?1:y-b[_]+1;f.setEdge(S,B,{weight:U,minlen:I,nestingEdge:!0}),f.setEdge(R,w,{weight:U,minlen:I,nestingEdge:!0})}),f.parent(_)||f.setEdge(h,S,{weight:0,minlen:y+b[_]})}function o(f){var h={};function p(g,y){var b=f.children(g);b&&b.length&&b.forEach(_=>p(_,y+1)),h[g]=y}return f.children().forEach(g=>p(g,1)),h}function c(f){return f.edges().reduce((h,p)=>h+f.edge(p).weight,0)}function d(f){var h=f.graph();f.removeNode(h.nestingRoot),delete h.nestingRoot,f.edges().forEach(p=>{var g=f.edge(p);g.nestingEdge&&f.removeEdge(p)})}}),DB=vt((e,t)=>{var r=ln();t.exports=a;function a(o){function c(d){let f=o.children(d),h=o.node(d);if(f.length&&f.forEach(c),Object.hasOwn(h,"minRank")){h.borderLeft=[],h.borderRight=[];for(let p=h.minRank,g=h.maxRank+1;p{t.exports={adjust:r,undo:a};function r(p){let g=p.graph().rankdir.toLowerCase();(g==="lr"||g==="rl")&&s(p)}function a(p){let g=p.graph().rankdir.toLowerCase();(g==="bt"||g==="rl")&&c(p),(g==="lr"||g==="rl")&&(f(p),s(p))}function s(p){p.nodes().forEach(g=>o(p.node(g))),p.edges().forEach(g=>o(p.edge(g)))}function o(p){let g=p.width;p.width=p.height,p.height=g}function c(p){p.nodes().forEach(g=>d(p.node(g))),p.edges().forEach(g=>{let y=p.edge(g);y.points.forEach(d),Object.hasOwn(y,"y")&&d(y)})}function d(p){p.y=-p.y}function f(p){p.nodes().forEach(g=>h(p.node(g))),p.edges().forEach(g=>{let y=p.edge(g);y.points.forEach(h),Object.hasOwn(y,"x")&&h(y)})}function h(p){let g=p.x;p.x=p.y,p.y=g}}),zB=vt((e,t)=>{var r=ln();t.exports=a;function a(s){let o={},c=s.nodes().filter(g=>!s.children(g).length),d=c.map(g=>s.node(g).rank),f=r.applyWithChunking(Math.max,d),h=r.range(f+1).map(()=>[]);function p(g){if(o[g])return;o[g]=!0;let y=s.node(g);h[y.rank].push(g),s.successors(g).forEach(p)}return c.sort((g,y)=>s.node(g).rank-s.node(y).rank).forEach(p),h}}),IB=vt((e,t)=>{var r=ln().zipObject;t.exports=a;function a(o,c){let d=0;for(let f=1;fE)),h=c.flatMap(_=>o.outEdges(_).map(E=>({pos:f[E.w],weight:o.edge(E).weight})).sort((E,S)=>E.pos-S.pos)),p=1;for(;p{let E=_.pos+p;y[E]+=_.weight;let S=0;for(;E>0;)E%2&&(S+=y[E+1]),E=E-1>>1,y[E]+=_.weight;b+=_.weight*S}),b}}),BB=vt((e,t)=>{t.exports=r;function r(a,s=[]){return s.map(o=>{let c=a.inEdges(o);if(c.length){let d=c.reduce((f,h)=>{let p=a.edge(h),g=a.node(h.v);return{sum:f.sum+p.weight*g.order,weight:f.weight+p.weight}},{sum:0,weight:0});return{v:o,barycenter:d.sum/d.weight,weight:d.weight}}else return{v:o}})}}),UB=vt((e,t)=>{var r=ln();t.exports=a;function a(c,d){let f={};c.forEach((p,g)=>{let y=f[p.v]={indegree:0,in:[],out:[],vs:[p.v],i:g};p.barycenter!==void 0&&(y.barycenter=p.barycenter,y.weight=p.weight)}),d.edges().forEach(p=>{let g=f[p.v],y=f[p.w];g!==void 0&&y!==void 0&&(y.indegree++,g.out.push(f[p.w]))});let h=Object.values(f).filter(p=>!p.indegree);return s(h)}function s(c){let d=[];function f(p){return g=>{g.merged||(g.barycenter===void 0||p.barycenter===void 0||g.barycenter>=p.barycenter)&&o(p,g)}}function h(p){return g=>{g.in.push(p),--g.indegree===0&&c.push(g)}}for(;c.length;){let p=c.pop();d.push(p),p.in.reverse().forEach(f(p)),p.out.forEach(h(p))}return d.filter(p=>!p.merged).map(p=>r.pick(p,["vs","i","barycenter","weight"]))}function o(c,d){let f=0,h=0;c.weight&&(f+=c.barycenter*c.weight,h+=c.weight),d.weight&&(f+=d.barycenter*d.weight,h+=d.weight),c.vs=d.vs.concat(c.vs),c.barycenter=f/h,c.weight=h,c.i=Math.min(d.i,c.i),d.merged=!0}}),HB=vt((e,t)=>{var r=ln();t.exports=a;function a(c,d){let f=r.partition(c,S=>Object.hasOwn(S,"barycenter")),h=f.lhs,p=f.rhs.sort((S,w)=>w.i-S.i),g=[],y=0,b=0,_=0;h.sort(o(!!d)),_=s(g,p,_),h.forEach(S=>{_+=S.vs.length,g.push(S.vs),y+=S.barycenter*S.weight,b+=S.weight,_=s(g,p,_)});let E={vs:g.flat(!0)};return b&&(E.barycenter=y/b,E.weight=b),E}function s(c,d,f){let h;for(;d.length&&(h=d[d.length-1]).i<=f;)d.pop(),c.push(h.vs),f++;return f}function o(c){return(d,f)=>d.barycenterf.barycenter?1:c?f.i-d.i:d.i-f.i}}),$B=vt((e,t)=>{var r=BB(),a=UB(),s=HB();t.exports=o;function o(f,h,p,g){let y=f.children(h),b=f.node(h),_=b?b.borderLeft:void 0,E=b?b.borderRight:void 0,S={};_&&(y=y.filter(M=>M!==_&&M!==E));let w=r(f,y);w.forEach(M=>{if(f.children(M.v).length){let B=o(f,M.v,p,g);S[M.v]=B,Object.hasOwn(B,"barycenter")&&d(M,B)}});let k=a(w,p);c(k,S);let N=s(k,g);if(_&&(N.vs=[_,N.vs,E].flat(!0),f.predecessors(_).length)){let M=f.node(f.predecessors(_)[0]),B=f.node(f.predecessors(E)[0]);Object.hasOwn(N,"barycenter")||(N.barycenter=0,N.weight=0),N.barycenter=(N.barycenter*N.weight+M.order+B.order)/(N.weight+2),N.weight+=2}return N}function c(f,h){f.forEach(p=>{p.vs=p.vs.flatMap(g=>h[g]?h[g].vs:g)})}function d(f,h){f.barycenter!==void 0?(f.barycenter=(f.barycenter*f.weight+h.barycenter*h.weight)/(f.weight+h.weight),f.weight+=h.weight):(f.barycenter=h.barycenter,f.weight=h.weight)}}),qB=vt((e,t)=>{var r=zr().Graph,a=ln();t.exports=s;function s(c,d,f,h){h||(h=c.nodes());let p=o(c),g=new r({compound:!0}).setGraph({root:p}).setDefaultNodeLabel(y=>c.node(y));return h.forEach(y=>{let b=c.node(y),_=c.parent(y);(b.rank===d||b.minRank<=d&&d<=b.maxRank)&&(g.setNode(y),g.setParent(y,_||p),c[f](y).forEach(E=>{let S=E.v===y?E.w:E.v,w=g.edge(S,y),k=w!==void 0?w.weight:0;g.setEdge(S,y,{weight:c.edge(E).weight+k})}),Object.hasOwn(b,"minRank")&&g.setNode(y,{borderLeft:b.borderLeft[d],borderRight:b.borderRight[d]}))}),g}function o(c){for(var d;c.hasNode(d=a.uniqueId("_root")););return d}}),PB=vt((e,t)=>{t.exports=r;function r(a,s,o){let c={},d;o.forEach(f=>{let h=a.parent(f),p,g;for(;h;){if(p=a.parent(h),p?(g=c[p],c[p]=h):(g=d,d=h),g&&g!==h){s.setEdge(g,h);return}h=p}})}}),FB=vt((e,t)=>{var r=zB(),a=IB(),s=$B(),o=qB(),c=PB(),d=zr().Graph,f=ln();t.exports=h;function h(b,_={}){if(typeof _.customOrder=="function"){_.customOrder(b,h);return}let E=f.maxRank(b),S=p(b,f.range(1,E+1),"inEdges"),w=p(b,f.range(E-1,-1,-1),"outEdges"),k=r(b);if(y(b,k),_.disableOptimalOrderHeuristic)return;let N=Number.POSITIVE_INFINITY,M,B=_.constraints||[];for(let R=0,U=0;U<4;++R,++U){g(R%2?S:w,R%4>=2,B),k=f.buildLayerMatrix(b);let I=a(b,k);I{S.has(k)||S.set(k,[]),S.get(k).push(N)};for(let k of b.nodes()){let N=b.node(k);if(typeof N.rank=="number"&&w(N.rank,k),typeof N.minRank=="number"&&typeof N.maxRank=="number")for(let M=N.minRank;M<=N.maxRank;M++)M!==N.rank&&w(M,k)}return _.map(function(k){return o(b,k,E,S.get(k)||[])})}function g(b,_,E){let S=new d;b.forEach(function(w){E.forEach(M=>S.setEdge(M.left,M.right));let k=w.graph().root,N=s(w,k,S,_);N.vs.forEach((M,B)=>w.node(M).order=B),c(w,S,N.vs)})}function y(b,_){Object.values(_).forEach(E=>E.forEach((S,w)=>b.node(S).order=w))}}),GB=vt((e,t)=>{var r=zr().Graph,a=ln();t.exports={positionX:E,findType1Conflicts:s,findType2Conflicts:o,addConflict:d,hasConflict:f,verticalAlignment:h,horizontalCompaction:p,alignCoordinates:b,findSmallestWidthAlignment:y,balance:_};function s(k,N){let M={};function B(R,U){let I=0,X=0,j=R.length,z=U[U.length-1];return U.forEach((V,P)=>{let T=c(k,V),$=T?k.node(T).order:j;(T||V===z)&&(U.slice(X,P+1).forEach(O=>{k.predecessors(O).forEach(H=>{let K=k.node(H),Z=K.order;(Z{V=U[P],k.node(V).dummy&&k.predecessors(V).forEach(T=>{let $=k.node(T);$.dummy&&($.orderz)&&d(M,T,V)})})}function R(U,I){let X=-1,j,z=0;return I.forEach((V,P)=>{if(k.node(V).dummy==="border"){let T=k.predecessors(V);T.length&&(j=k.node(T[0]).order,B(I,z,P,X,j),z=P,X=j)}B(I,z,I.length,j,U.length)}),I}return N.length&&N.reduce(R),M}function c(k,N){if(k.node(N).dummy)return k.predecessors(N).find(M=>k.node(M).dummy)}function d(k,N,M){if(N>M){let R=N;N=M,M=R}let B=k[N];B||(k[N]=B={}),B[M]=!0}function f(k,N,M){if(N>M){let B=N;N=M,M=B}return!!k[N]&&Object.hasOwn(k[N],M)}function h(k,N,M,B){let R={},U={},I={};return N.forEach(X=>{X.forEach((j,z)=>{R[j]=j,U[j]=j,I[j]=z})}),N.forEach(X=>{let j=-1;X.forEach(z=>{let V=B(z);if(V.length){V=V.sort((T,$)=>I[T]-I[$]);let P=(V.length-1)/2;for(let T=Math.floor(P),$=Math.ceil(P);T<=$;++T){let O=V[T];U[z]===z&&jMath.max(T,U[$.v]+I.edge($)),0)}function V(P){let T=I.outEdges(P).reduce((O,H)=>Math.min(O,U[H.w]-I.edge(H)),Number.POSITIVE_INFINITY),$=k.node(P);T!==Number.POSITIVE_INFINITY&&$.borderType!==X&&(U[P]=Math.max(U[P],T))}return j(z,I.predecessors.bind(I)),j(V,I.successors.bind(I)),Object.keys(B).forEach(P=>U[P]=U[M[P]]),U}function g(k,N,M,B){let R=new r,U=k.graph(),I=S(U.nodesep,U.edgesep,B);return N.forEach(X=>{let j;X.forEach(z=>{let V=M[z];if(R.setNode(V),j){var P=M[j],T=R.edge(P,V);R.setEdge(P,V,Math.max(I(k,z,j),T||0))}j=z})}),R}function y(k,N){return Object.values(N).reduce((M,B)=>{let R=Number.NEGATIVE_INFINITY,U=Number.POSITIVE_INFINITY;Object.entries(B).forEach(([X,j])=>{let z=w(k,X)/2;R=Math.max(j+z,R),U=Math.min(j-z,U)});let I=R-U;return I{["l","r"].forEach(I=>{let X=U+I,j=k[X];if(j===N)return;let z=Object.values(j),V=B-a.applyWithChunking(Math.min,z);I!=="l"&&(V=R-a.applyWithChunking(Math.max,z)),V&&(k[X]=a.mapValues(j,P=>P+V))})})}function _(k,N){return a.mapValues(k.ul,(M,B)=>{if(N)return k[N.toLowerCase()][B];{let R=Object.values(k).map(U=>U[B]).sort((U,I)=>U-I);return(R[1]+R[2])/2}})}function E(k){let N=a.buildLayerMatrix(k),M=Object.assign(s(k,N),o(k,N)),B={},R;["u","d"].forEach(I=>{R=I==="u"?N:Object.values(N).reverse(),["l","r"].forEach(X=>{X==="r"&&(R=R.map(P=>Object.values(P).reverse()));let j=(I==="u"?k.predecessors:k.successors).bind(k),z=h(k,R,M,j),V=p(k,R,z.root,z.align,X==="r");X==="r"&&(V=a.mapValues(V,P=>-P)),B[I+X]=V})});let U=y(k,B);return b(B,U),_(B,k.graph().align)}function S(k,N,M){return(B,R,U)=>{let I=B.node(R),X=B.node(U),j=0,z;if(j+=I.width/2,Object.hasOwn(I,"labelpos"))switch(I.labelpos.toLowerCase()){case"l":z=-I.width/2;break;case"r":z=I.width/2;break}if(z&&(j+=M?z:-z),z=0,j+=(I.dummy?N:k)/2,j+=(X.dummy?N:k)/2,j+=X.width/2,Object.hasOwn(X,"labelpos"))switch(X.labelpos.toLowerCase()){case"l":z=X.width/2;break;case"r":z=-X.width/2;break}return z&&(j+=M?z:-z),z=0,j}}function w(k,N){return k.node(N).width}}),VB=vt((e,t)=>{var r=ln(),a=GB().positionX;t.exports=s;function s(c){c=r.asNonCompoundGraph(c),o(c),Object.entries(a(c)).forEach(([d,f])=>c.node(d).x=f)}function o(c){let d=r.buildLayerMatrix(c),f=c.graph().ranksep,h=c.graph().rankalign,p=0;d.forEach(g=>{let y=g.reduce((b,_)=>{let E=c.node(_).height;return b>E?b:E},0);g.forEach(b=>{let _=c.node(b);h==="top"?_.y=p+_.height/2:h==="bottom"?_.y=p+y-_.height/2:_.y=p+y/2}),p+=y+f})}}),YB=vt((e,t)=>{var r=TB(),a=AB(),s=OB(),o=ln().normalizeRanks,c=RB(),d=ln().removeEmptyRanks,f=jB(),h=DB(),p=LB(),g=FB(),y=VB(),b=ln(),_=zr().Graph;t.exports=E;function E(q,Q={}){let J=Q.debugTiming?b.time:b.notime;return J("layout",()=>{let W=J(" buildLayoutGraph",()=>j(q));return J(" runLayout",()=>S(W,J,Q)),J(" updateInputGraph",()=>w(q,W)),W})}function S(q,Q,J){Q(" makeSpaceForEdgeLabels",()=>z(q)),Q(" removeSelfEdges",()=>C(q)),Q(" acyclic",()=>r.run(q)),Q(" nestingGraph.run",()=>f.run(q)),Q(" rank",()=>s(b.asNonCompoundGraph(q))),Q(" injectEdgeLabelProxies",()=>V(q)),Q(" removeEmptyRanks",()=>d(q)),Q(" nestingGraph.cleanup",()=>f.cleanup(q)),Q(" normalizeRanks",()=>o(q)),Q(" assignRankMinMax",()=>P(q)),Q(" removeEdgeLabelProxies",()=>T(q)),Q(" normalize.run",()=>a.run(q)),Q(" parentDummyChains",()=>c(q)),Q(" addBorderSegments",()=>h(q)),Q(" order",()=>g(q,J)),Q(" insertSelfEdges",()=>D(q)),Q(" adjustCoordinateSystem",()=>p.adjust(q)),Q(" position",()=>y(q)),Q(" positionSelfEdges",()=>Y(q)),Q(" removeBorderNodes",()=>Z(q)),Q(" normalize.undo",()=>a.undo(q)),Q(" fixupEdgeLabelCoords",()=>H(q)),Q(" undoCoordinateSystem",()=>p.undo(q)),Q(" translateGraph",()=>$(q)),Q(" assignNodeIntersects",()=>O(q)),Q(" reversePoints",()=>K(q)),Q(" acyclic.undo",()=>r.undo(q))}function w(q,Q){q.nodes().forEach(J=>{let W=q.node(J),te=Q.node(J);W&&(W.x=te.x,W.y=te.y,W.order=te.order,W.rank=te.rank,Q.children(J).length&&(W.width=te.width,W.height=te.height))}),q.edges().forEach(J=>{let W=q.edge(J),te=Q.edge(J);W.points=te.points,Object.hasOwn(te,"x")&&(W.x=te.x,W.y=te.y)}),q.graph().width=Q.graph().width,q.graph().height=Q.graph().height}var k=["nodesep","edgesep","ranksep","marginx","marginy"],N={ranksep:50,edgesep:20,nodesep:50,rankdir:"tb",rankalign:"center"},M=["acyclicer","ranker","rankdir","align","rankalign"],B=["width","height","rank"],R={width:0,height:0},U=["minlen","weight","width","height","labeloffset"],I={minlen:1,weight:1,width:0,height:0,labeloffset:10,labelpos:"r"},X=["labelpos"];function j(q){let Q=new _({multigraph:!0,compound:!0}),J=G(q.graph());return Q.setGraph(Object.assign({},N,L(J,k),b.pick(J,M))),q.nodes().forEach(W=>{let te=G(q.node(W)),ce=L(te,B);Object.keys(R).forEach(fe=>{ce[fe]===void 0&&(ce[fe]=R[fe])}),Q.setNode(W,ce),Q.setParent(W,q.parent(W))}),q.edges().forEach(W=>{let te=G(q.edge(W));Q.setEdge(W,Object.assign({},I,L(te,U),b.pick(te,X)))}),Q}function z(q){let Q=q.graph();Q.ranksep/=2,q.edges().forEach(J=>{let W=q.edge(J);W.minlen*=2,W.labelpos.toLowerCase()!=="c"&&(Q.rankdir==="TB"||Q.rankdir==="BT"?W.width+=W.labeloffset:W.height+=W.labeloffset)})}function V(q){q.edges().forEach(Q=>{let J=q.edge(Q);if(J.width&&J.height){let W=q.node(Q.v),te={rank:(q.node(Q.w).rank-W.rank)/2+W.rank,e:Q};b.addDummyNode(q,"edge-proxy",te,"_ep")}})}function P(q){let Q=0;q.nodes().forEach(J=>{let W=q.node(J);W.borderTop&&(W.minRank=q.node(W.borderTop).rank,W.maxRank=q.node(W.borderBottom).rank,Q=Math.max(Q,W.maxRank))}),q.graph().maxRank=Q}function T(q){q.nodes().forEach(Q=>{let J=q.node(Q);J.dummy==="edge-proxy"&&(q.edge(J.e).labelRank=J.rank,q.removeNode(Q))})}function $(q){let Q=Number.POSITIVE_INFINITY,J=0,W=Number.POSITIVE_INFINITY,te=0,ce=q.graph(),fe=ce.marginx||0,xe=ce.marginy||0;function we(Ne){let De=Ne.x,$e=Ne.y,st=Ne.width,Rt=Ne.height;Q=Math.min(Q,De-st/2),J=Math.max(J,De+st/2),W=Math.min(W,$e-Rt/2),te=Math.max(te,$e+Rt/2)}q.nodes().forEach(Ne=>we(q.node(Ne))),q.edges().forEach(Ne=>{let De=q.edge(Ne);Object.hasOwn(De,"x")&&we(De)}),Q-=fe,W-=xe,q.nodes().forEach(Ne=>{let De=q.node(Ne);De.x-=Q,De.y-=W}),q.edges().forEach(Ne=>{let De=q.edge(Ne);De.points.forEach($e=>{$e.x-=Q,$e.y-=W}),Object.hasOwn(De,"x")&&(De.x-=Q),Object.hasOwn(De,"y")&&(De.y-=W)}),ce.width=J-Q+fe,ce.height=te-W+xe}function O(q){q.edges().forEach(Q=>{let J=q.edge(Q),W=q.node(Q.v),te=q.node(Q.w),ce,fe;J.points?(ce=J.points[0],fe=J.points[J.points.length-1]):(J.points=[],ce=te,fe=W),J.points.unshift(b.intersectRect(W,ce)),J.points.push(b.intersectRect(te,fe))})}function H(q){q.edges().forEach(Q=>{let J=q.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 K(q){q.edges().forEach(Q=>{let J=q.edge(Q);J.reversed&&J.points.reverse()})}function Z(q){q.nodes().forEach(Q=>{if(q.children(Q).length){let J=q.node(Q),W=q.node(J.borderTop),te=q.node(J.borderBottom),ce=q.node(J.borderLeft[J.borderLeft.length-1]),fe=q.node(J.borderRight[J.borderRight.length-1]);J.width=Math.abs(fe.x-ce.x),J.height=Math.abs(te.y-W.y),J.x=ce.x+J.width/2,J.y=W.y+J.height/2}}),q.nodes().forEach(Q=>{q.node(Q).dummy==="border"&&q.removeNode(Q)})}function C(q){q.edges().forEach(Q=>{if(Q.v===Q.w){var J=q.node(Q.v);J.selfEdges||(J.selfEdges=[]),J.selfEdges.push({e:Q,label:q.edge(Q)}),q.removeEdge(Q)}})}function D(q){var Q=b.buildLayerMatrix(q);Q.forEach(J=>{var W=0;J.forEach((te,ce)=>{var fe=q.node(te);fe.order=ce+W,(fe.selfEdges||[]).forEach(xe=>{b.addDummyNode(q,"selfedge",{width:xe.label.width,height:xe.label.height,rank:fe.rank,order:ce+ ++W,e:xe.e,label:xe.label},"_se")}),delete fe.selfEdges})})}function Y(q){q.nodes().forEach(Q=>{var J=q.node(Q);if(J.dummy==="selfedge"){var W=q.node(J.e.v),te=W.x+W.width/2,ce=W.y,fe=J.x-te,xe=W.height/2;q.setEdge(J.e,J.label),q.removeNode(Q),J.label.points=[{x:te+2*fe/3,y:ce-xe},{x:te+5*fe/6,y:ce-xe},{x:te+fe,y:ce},{x:te+5*fe/6,y:ce+xe},{x:te+2*fe/3,y:ce+xe}],J.label.x=J.x,J.label.y=J.y}})}function L(q,Q){return b.mapValues(b.pick(q,Q),Number)}function G(q){var Q={};return q&&Object.entries(q).forEach(([J,W])=>{typeof J=="string"&&(J=J.toLowerCase()),Q[J]=W}),Q}}),XB=vt((e,t)=>{var r=ln(),a=zr().Graph;t.exports={debugOrdering:s};function s(o){let c=r.buildLayerMatrix(o),d=new a({compound:!0,multigraph:!0}).setGraph({});return o.nodes().forEach(f=>{d.setNode(f,{label:f}),d.setParent(f,"layer"+o.node(f).rank)}),o.edges().forEach(f=>d.setEdge(f.v,f.w,{},f.name)),c.forEach((f,h)=>{let p="layer"+h;d.setNode(p,{rank:"same"}),f.reduce((g,y)=>(d.setEdge(g,y,{style:"invis"}),y))}),d}}),KB=vt((e,t)=>{t.exports="2.0.4"}),ZB=vt((e,t)=>{t.exports={graphlib:zr(),layout:YB(),debug:XB(),util:{time:ln().time,notime:ln().notime},version:KB()}});const J1=ZB();/*! For license information please see dagre.esm.js.LEGAL.txt */const e_={running:"bg-blue-500",completed:"bg-emerald-500",failed:"bg-red-500",error:"bg-red-500"};function QB({data:e,selected:t}){const r=e;return m.jsxs("div",{className:`w-[260px] rounded-lg border px-4 py-3 transition-colors ${r.isSelected||t?"border-white/30 bg-[#0a0a0a]":"border-[#222] bg-black hover:border-[#333]"}`,children:[m.jsx(tl,{type:"target",position:ze.Top,isConnectable:!1,className:`!w-1.5 !h-1.5 !border-0 ${r.parentId?"!bg-[#444]":"!bg-transparent"}`}),m.jsxs("div",{className:"flex items-center gap-2",children:[m.jsxs("span",{className:"relative flex h-2 w-2 shrink-0",children:[m.jsx("span",{className:`absolute inline-flex h-full w-full rounded-full opacity-75 ${e_[r.status]??"bg-gray-500"} ${r.status==="running"?"animate-ping":""}`}),m.jsx("span",{className:`relative inline-flex h-2 w-2 rounded-full ${e_[r.status]??"bg-gray-500"}`})]}),m.jsx("span",{className:"text-sm font-semibold text-white leading-snug line-clamp-3",children:r.name})]}),m.jsx(tl,{type:"source",position:ze.Bottom,isConnectable:!1,className:`!w-1.5 !h-1.5 !border-0 ${r.children&&r.children.length>0?"!bg-[#444]":"!bg-transparent"}`})]})}const WB=ee.memo(QB);function ro({w:e=24}){return m.jsxs("div",{className:"w-[180px] h-[72px] rounded-lg border border-[#222] bg-[#0a0a0a] px-3 py-2 shrink-0",children:[m.jsxs("div",{className:"flex items-center gap-2 mb-1.5",children:[m.jsx("div",{className:"w-2 h-2 rounded-full bg-[#2a2a2a]"}),m.jsx("div",{className:"h-3 rounded bg-[#252525]",style:{width:`${e*4}px`}})]}),m.jsx("div",{className:"h-2 w-28 rounded bg-[#1e1e1e] mb-1.5"}),m.jsxs("div",{className:"flex gap-3",children:[m.jsx("div",{className:"h-2 w-8 rounded bg-[#1e1e1e]"}),m.jsx("div",{className:"h-2 w-8 rounded bg-[#1e1e1e]"})]})]})}function Bs(){return m.jsx("div",{className:"w-px h-6 bg-[#2a2a2a]"})}function t_({count:e}){return m.jsx("div",{className:"relative flex justify-center",children:m.jsx("div",{className:"absolute top-0 h-px bg-[#2a2a2a]",style:{width:`${(e-1)*220}px`}})})}function JB(){return m.jsx("div",{className:"h-full bg-black overflow-hidden",children:m.jsxs("div",{className:"flex flex-col items-center pt-10 animate-pulse",children:[m.jsx(ro,{w:20}),m.jsx(Bs,{}),m.jsx(t_,{count:3}),m.jsx("div",{className:"flex gap-10",children:[18,22,16].map((e,t)=>m.jsxs("div",{className:"flex flex-col items-center",children:[m.jsx(Bs,{}),m.jsx(ro,{w:e})]},t))}),m.jsxs("div",{className:"flex gap-10 w-full justify-center",children:[m.jsxs("div",{className:"flex flex-col items-center",children:[m.jsx(Bs,{}),m.jsx(t_,{count:2}),m.jsx("div",{className:"flex gap-10",children:[14,20].map((e,t)=>m.jsxs("div",{className:"flex flex-col items-center",children:[m.jsx(Bs,{}),m.jsx(ro,{w:e})]},t))})]}),m.jsxs("div",{className:"flex flex-col items-center",children:[m.jsx(Bs,{}),m.jsx(ro,{w:18}),m.jsx(Bs,{}),m.jsx(ro,{w:12})]}),m.jsx("div",{className:"w-[180px]"})]})]})})}const yp=260,vp=80,e7={agentNode:WB};function t7(e,t){const r=new J1.graphlib.Graph;r.setDefaultEdgeLabel(()=>({})),r.setGraph({rankdir:"TB",nodesep:60,ranksep:80});const a=[],s=[];for(const[o,c]of e)if(r.setNode(o,{width:yp,height:vp}),a.push({id:o,type:"agentNode",position:{x:0,y:0},data:{...c,isSelected:o===t}}),c.parentId&&e.has(c.parentId)){const d=`${c.parentId}->${o}`;r.setEdge(c.parentId,o),s.push({id:d,source:c.parentId,target:o,style:{stroke:"#2a2a2a",strokeWidth:1.5}})}J1.layout(r);for(const o of a){const c=r.node(o.id);c&&(o.position={x:c.x-yp/2,y:c.y-vp/2})}return{nodes:a,edges:s}}const Lm=300;function n7({nodes:e}){const{setCenter:t}=$o(),r=ee.useRef(!1);return ee.useEffect(()=>{if(e.length>0&&!r.current){const s=e.find(d=>!d.data.parentId)??e[0];r.current=!0;const o=s.position.x+yp/2,c=s.position.y+vp/2;setTimeout(()=>t(o,c,{zoom:.85,duration:400}),60)}},[e,t]),null}function r7(){const{zoomIn:e,zoomOut:t,fitView:r}=$o();return m.jsx(oB,{position:"bottom-right",showZoom:!1,showFitView:!1,showInteractive:!1,className:"!bg-transparent !border-none !shadow-none",children:m.jsxs("div",{className:"flex flex-col overflow-hidden rounded-lg border border-[#222]",children:[m.jsx("button",{onClick:()=>e({duration:Lm}),className:"flex items-center justify-center w-7 h-7 bg-[#111] text-white hover:bg-[#2a2a2a] transition-colors",title:"Zoom in",children:m.jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,className:"w-3.5 h-3.5",children:m.jsx("path",{d:"M12 5v14M5 12h14"})})}),m.jsx("button",{onClick:()=>t({duration:Lm}),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:m.jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,className:"w-3.5 h-3.5",children:m.jsx("path",{d:"M5 12h14"})})}),m.jsx("button",{onClick:()=>r({padding:.3,duration:Lm}),className:"flex items-center justify-center w-7 h-7 bg-[#111] text-white hover:bg-[#2a2a2a] transition-colors",title:"Fit view",children:m.jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,className:"w-3.5 h-3.5",children:m.jsx("path",{d:"M15 3h6v6M9 21H3v-6M21 3l-7 7M3 21l7-7"})})})]})})}function i7({agents:e,selectedAgentId:t,onSelectAgent:r,eventsLoaded:a,eventsEmpty:s,scanCompleted:o}){const[c,d,f]=K9([]),[h,p,g]=Z9([]);ee.useEffect(()=>{if(e.size===0)return;const{nodes:S,edges:w}=t7(e,t);d(S),p(w)},[e.size,d,p]),ee.useEffect(()=>{e.size!==0&&d(S=>S.map(w=>{const k=e.get(w.id);return k?{...w,data:{...k,isSelected:w.id===t}}:w}))},[e,t,d]);const y=ee.useRef(!1),b=ee.useCallback((S,w)=>{y.current=!0,r(w.id)},[r]),_=ee.useCallback(()=>{if(y.current){y.current=!1;return}r(null)},[r]);if(e.size===0&&a&&s)return m.jsxs("div",{className:"flex flex-col items-center justify-center h-full text-center px-4",children:[m.jsx("div",{className:"w-10 h-10 mb-3 rounded-full bg-[#111] flex items-center justify-center",children:o?m.jsx("svg",{className:"w-5 h-5 text-[#444]",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:1.5,children:m.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"})}):m.jsx("div",{className:"w-2 h-2 rounded-full bg-blue-500 animate-pulse"})}),m.jsx("p",{className:"text-sm text-[#555]",children:o?"Agent trace data is not available for this pentest":"Waiting for agent data…"})]});const E=e.size>0;return m.jsxs("div",{className:"relative h-full",children:[m.jsx("div",{className:`absolute inset-0 z-10 transition-opacity duration-500 ${E?"opacity-0 pointer-events-none":"opacity-100"}`,children:m.jsx(JB,{})}),m.jsx("div",{className:`h-full transition-opacity duration-500 ${E?"opacity-100":"opacity-0"}`,children:m.jsxs(X9,{nodes:c,edges:h,onNodesChange:f,onEdgesChange:g,onNodeClick:b,onPaneClick:_,nodeTypes:e7,nodesConnectable:!1,edgesFocusable:!1,edgesReconnectable:!1,minZoom:.15,maxZoom:1.5,proOptions:{hideAttribution:!0},className:"bg-black",children:[m.jsx(tB,{color:"#111",gap:20}),m.jsx(n7,{nodes:c}),m.jsx(r7,{}),m.jsx(wB,{position:"bottom-left",nodeColor:S=>{var k;const w=(k=S.data)==null?void 0:k.status;return w==="running"?"#3b82f6":w==="completed"?"#10b981":w==="failed"||w==="error"?"#ef4444":"#555"},maskColor:"rgba(0,0,0,0.8)",style:{width:80,height:50},className:"!bg-[#0a0a0a] !border-[#222]"})]})})]})}function ua({text:e,className:t=""}){return m.jsx("div",{className:`prose-markdown ${t}`,children:m.jsx(Gp,{remarkPlugins:[Kp],rehypePlugins:[Zp],components:Qp,children:e})})}const n_=6,r_=20;function Yt({text:e,maxLines:t=20}){const[r,a]=ee.useState(!1),o=e.trimEnd().split(` +`).length>t;return m.jsxs("div",{children:[m.jsx("div",{className:r&&o?"max-h-[1200px] overflow-auto":"",style:!r&&o?{display:"-webkit-box",WebkitLineClamp:t,WebkitBoxOrient:"vertical",overflow:"hidden"}:void 0,children:m.jsx(ua,{text:e})}),o&&m.jsx("button",{onClick:()=>a(!r),className:"text-xs text-[#555] hover:text-[#888] mt-1",children:r?"Show less":"Show more"})]})}function wi({children:e,className:t=""}){const[r,a]=ee.useState(!1),o=typeof e=="string"?e.trimEnd().split(` +`):null,c=o!==null&&o.length>n_,d=c&&!r?o.slice(0,n_).join(` +`):e;return m.jsxs("div",{children:[m.jsx("pre",{className:`font-mono text-[13px] leading-relaxed whitespace-pre-wrap break-words mt-1 ${r?"overflow-auto max-h-[1200px]":"overflow-hidden"} ${t}`,children:d}),c&&m.jsx("button",{onClick:()=>a(!r),className:"text-xs text-[#555] hover:text-[#888] mt-0.5",children:r?"Show less":"Show more"})]})}function gg({code:e,language:t,className:r="",collapsible:a=!1}){const[s,o]=ee.useState(!1),c=e.trimEnd().split(` +`),d=a&&c.length>r_,f=d&&!s?c.slice(0,r_).join(` +`):e;let h;try{h=t?zn.highlight(f,{language:t,ignoreIllegals:!0}).value:zn.highlightAuto(f).value}catch{h=zn.highlightAuto(f).value}return m.jsxs("div",{children:[m.jsx("pre",{className:`font-mono text-[12px] leading-relaxed px-0 py-1 mt-1 whitespace-pre-wrap break-all ${a?s?"overflow-auto max-h-[1200px]":"overflow-hidden":"overflow-auto max-h-[400px]"} ${r}`,children:m.jsx("code",{dangerouslySetInnerHTML:{__html:h}})}),d&&m.jsx("button",{onClick:()=>o(!s),className:"text-xs text-[#555] hover:text-[#888] mt-0.5",children:s?"Show less":"Show more"})]})}const a7=50,i_=200,a_=25,s_=24,s7=[/\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],l7=/^Chunk ID: [0-9a-f]+\s*$/,o7=[/^Wall time: [\d.]+ seconds\s*$/,/^Process exited with code -?\d+\s*$/,/^Process running with session ID \d+\s*$/,/^Original token count: \d+\s*$/];function c7(e){const t=[];for(let r=0;rs.test(e[a]));)a++;ai_?e.slice(0,i_-3)+"...":e}function d7(e,t=""){let r=e.replace(/\x1b(?:[@-Z\\-_]|\[[0-?]*[ -/]*[@-~]|\][^\x07]*\x07)/g,"").replace(/\r/g,"");for(const a of s7)r=r.replace(a,"");if(r.trim()){const a=c7(r.split(` +`)),s=[];for(const o of a)s.length===0&&!o.trim()||/^\[STRIX_\d+\]\$\s*/.test(o)||t&&o.trim()===t.trim()||t&&new RegExp(`^[\\$#>]\\s*${u7(t.trim())}\\s*$`).test(o)||s.push(o);for(;s.length>0&&/^\[STRIX_\d+\]\$\s*/.test(s[s.length-1]);)s.pop();r=s.join(` +`)}return r.trim()}function f7(e){const t=e.split(` +`);if(t.length<=a7)return t.map(zm).join(` +`);const r=t.length-a_-s_;return[...t.slice(0,a_).map(zm),`... ${r} lines truncated ...`,...t.slice(-s_).map(zm)].join(` +`)}function h7({toolName:e,args:t,result:r}){const a=e==="write_stdin",s=a?t.chars??t.input??"":t.command??t.cmd??"",o=r;let c=null,d=null,f=null;if(o&&typeof o=="object"){c=typeof o.content=="string"?o.content:null,d=typeof o.error=="string"?o.error:null,f=typeof o.exit_code=="number"?o.exit_code:null;const p=typeof o.status=="string"?o.status:"";(p==="running"||p==="command still running")&&(c=null)}else typeof o=="string"&&(c=o);const h=c?f7(d7(c,s)):null;return m.jsxs("div",{children:[m.jsx("span",{className:"text-emerald-400/80 font-semibold text-sm",children:a?"Terminal input":"Terminal"}),s&&m.jsx(gg,{code:s,language:"bash",collapsible:!0}),d&&m.jsx(wi,{className:"text-red-400/70",children:d}),h&&m.jsx(wi,{className:"text-[#666]",children:h}),f!=null&&f!==0&&m.jsxs("div",{className:"font-mono text-[13px] text-red-400/70 mt-0.5",children:["exit code ",f]})]})}const l_={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"},o_={click:"clicking",double_click:"double clicking",hover:"hovering"};function Im({prefix:e,url:t,suffix:r}){return m.jsxs("span",{className:"text-[#888] text-[13px]",children:[e,t&&m.jsx("a",{href:t,target:"_blank",rel:"noopener noreferrer",className:"text-cyan-400/80 hover:underline",children:t}),r]})}function m7(e){const t=e.action??"",r=e.url??void 0;if(t in l_)return l_[t];if(t==="launch")return r?m.jsx(Im,{prefix:"launching ",url:r}):"launching";if(t==="goto"||t==="navigate")return m.jsx(Im,{prefix:"navigating to ",url:r});if(t==="new_tab")return m.jsx(Im,{prefix:"opening tab ",url:r});if(t in o_)return o_[t];if(t==="type")return`typing "${(e.text??"").slice(0,40)}"`;if(t==="press_key"||t==="key_press")return`pressing key ${e.key??""}`;if(t==="save_pdf"||t==="save_as_pdf"){const a=e.file_path??"";return`saving PDF${a?` to ${a}`:""}`}return t==="execute_js"?"executing javascript":t||"browser action"}function p7({args:e}){const r=(e.action??"")==="execute_js"?e.js_code??e.code??"":"",a=m7(e);return m.jsxs("div",{children:[m.jsxs("div",{className:"flex items-center gap-2 min-w-0",children:[m.jsx("span",{className:"text-blue-400/80 font-semibold text-sm shrink-0",children:"Browser"}),m.jsx("span",{className:"min-w-0 truncate text-[#888] text-[13px]",children:a})]}),r&&m.jsx(gg,{code:r,language:"javascript",collapsible:!0})]})}function xg(e){return e.length>60?"..."+e.slice(-57):e}const mu=30;function g7({toolName:e,args:t}){const r=t.path??t.file_path??"",a=t.command??"",s=t.old_str??"",o=t.new_str??"",c=t.regex??"";let d;e==="list_files"?d="list":e==="search_files"?d="search":a==="view"?d="view":a==="create"?d="create":a==="str_replace"?d="edit":a==="undo_edit"?d="undo":a==="insert"?d="insert":d="file";const f=r?xg(r):"",h=c?` /${c}/`:"",p=s?s.split(` +`):[],g=o?o.split(` +`):[],y=p.length+g.length,b=y>mu,_=b?Math.round(mu*(p.length/y)):p.length,E=b?mu-_:g.length;return m.jsxs("div",{children:[m.jsxs("div",{className:"flex items-baseline gap-2",children:[m.jsx("span",{className:"text-sky-400/80 font-semibold text-sm shrink-0",children:d}),f&&m.jsx("span",{className:"text-[#888] font-mono text-[13px] break-all",children:f})]}),h&&m.jsx("div",{className:"text-purple-400/60 font-mono text-[13px] break-all mt-0.5",children:h}),(s||o)&&m.jsxs("div",{className:"font-mono text-[13px] leading-relaxed mt-1.5",children:[p.slice(0,_).map((S,w)=>m.jsxs("div",{className:"text-red-400/60",children:[m.jsx("span",{className:"select-none text-red-400/30 mr-1",children:"-"}),S]},`o${w}`)),g.slice(0,E).map((S,w)=>m.jsxs("div",{className:"text-emerald-400/60",children:[m.jsx("span",{className:"select-none text-emerald-400/30 mr-1",children:"+"}),S]},`n${w}`)),b&&m.jsxs("div",{className:"text-[#444] mt-0.5",children:["... ",y-mu," more lines"]})]})]})}const pu=30,x7="*** Begin Patch",b7="*** End Patch",c_="*** Add File: ",u_="*** Update File: ",d_="*** Delete File: ",y7={add:"create",update:"edit",delete:"delete"};function v7(e){const t=e.patch;return typeof t=="string"?t:t&&typeof t=="object"&&typeof t.patch=="string"?t.patch:typeof e.input=="string"?e.input:""}function _7(e){const t=[];let r=null;const a=()=>{r&&t.push(r),r=null};for(const s of e.split(` +`))if(!(s===x7||s===b7))if(s.startsWith(c_))a(),r={kind:"add",path:s.slice(c_.length).trim(),oldLines:[],newLines:[]};else if(s.startsWith(u_))a(),r={kind:"update",path:s.slice(u_.length).trim(),oldLines:[],newLines:[]};else if(s.startsWith(d_))a(),r={kind:"delete",path:s.slice(d_.length).trim(),oldLines:[],newLines:[]};else if((r==null?void 0:r.kind)==="update"){if(s.startsWith("@@"))continue;s.startsWith("-")&&!s.startsWith("---")?r.oldLines.push(s.slice(1)):s.startsWith("+")&&!s.startsWith("+++")&&r.newLines.push(s.slice(1))}else(r==null?void 0:r.kind)==="add"&&(s.startsWith("+")?r.newLines.push(s.slice(1)):s.trim()&&r.newLines.push(s));return a(),t}function w7({op:e}){const t=y7[e.kind]??"file",r=e.oldLines.length+e.newLines.length,a=r>pu,s=a&&r>0?Math.round(pu*(e.oldLines.length/r)):e.oldLines.length,o=a?pu-s:e.newLines.length;return m.jsxs("div",{children:[m.jsxs("div",{className:"flex items-baseline gap-2",children:[m.jsx("span",{className:"text-sky-400/80 font-semibold text-sm shrink-0",children:t}),e.path&&m.jsx("span",{className:"text-[#888] font-mono text-[13px] break-all",children:xg(e.path)})]}),(e.oldLines.length>0||e.newLines.length>0)&&m.jsxs("div",{className:"font-mono text-[13px] leading-relaxed mt-1.5",children:[e.oldLines.slice(0,s).map((c,d)=>m.jsxs("div",{className:"text-red-400/60",children:[m.jsx("span",{className:"select-none text-red-400/30 mr-1",children:"-"}),c]},`o${d}`)),e.newLines.slice(0,o).map((c,d)=>m.jsxs("div",{className:"text-emerald-400/60",children:[m.jsx("span",{className:"select-none text-emerald-400/30 mr-1",children:"+"}),c]},`n${d}`)),a&&m.jsxs("div",{className:"text-[#444] mt-0.5",children:["... ",r-pu," more lines"]})]})]})}function E7({args:e,result:t,status:r}){const a=_7(v7(e));return a.length===0?m.jsxs("div",{children:[m.jsx("span",{className:"text-sky-400/80 font-semibold text-sm",children:"patch"}),r==="failed"&&typeof t=="string"&&t.trim()&&m.jsx("div",{className:"text-red-400/70 text-[13px] mt-1",children:t.trim()})]}):m.jsxs("div",{className:"space-y-2",children:[a.map((s,o)=>m.jsx(w7,{op:s},o)),r==="failed"&&typeof t=="string"&&t.trim()&&m.jsx("div",{className:"text-red-400/70 text-[13px]",children:t.trim()})]})}const N7=/data:image\/(png|jpe?g|gif|webp);base64,([A-Za-z0-9+/]+={0,2})/;function S7(e){let t=null;if(typeof e=="string")t=e;else if(e&&typeof e=="object"){const a=e;typeof a.image_url=="string"?t=a.image_url:typeof a.url=="string"&&(t=a.url)}if(!t)return null;const r=N7.exec(t);return!r||r[2].length<100||r[2].length%4!==0?null:`data:image/${r[1]};base64,${r[2]}`}function k7({args:e,result:t}){const r=(e.path??"").trim(),a=S7(t);let s=null;if(!a&&typeof t=="string"){const o=t.trim();o&&!o.toLowerCase().startsWith("data:image/")&&!o.startsWith("{")&&(s=o)}return m.jsxs("div",{children:[m.jsxs("div",{className:"flex items-baseline gap-2",children:[m.jsx("span",{className:"text-sky-400/80 font-semibold text-sm shrink-0",children:"view image"}),r&&m.jsx("span",{className:"text-[#888] font-mono text-[13px] break-all",children:xg(r)})]}),a&&m.jsx("img",{src:a,alt:r||"Tool image output",className:"mt-1.5 max-w-full max-h-96 rounded-lg border border-white/[0.06] object-contain"}),s&&m.jsx("div",{className:"text-red-400/70 text-[13px] mt-1",children:s})]})}const C7={critical:"text-red-400",high:"text-orange-400",medium:"text-yellow-400",low:"text-blue-400",info:"text-cyan-400"},T7={high:"text-emerald-400",medium:"text-yellow-400",low:"text-orange-400"};function A7({args:e,result:t}){const r=e.title??"",a=e.description??"",s=e.impact??"",o=e.target??"",c=e.endpoint??"",d=e.method??"",f=e.technical_analysis??"",h=e.poc_description??"",{language:p,code:g}=yE(e.poc_script_code??""),y=e.remediation_steps??"",b=e.cve??"",_=e.cwe??"",E=e.counterevidence??"",S=(e.confidence??"").toLowerCase(),w=e.confidence_rationale??"",k=e.severity_change_conditions??"",N=e.fix_verification??"",M=t,B=(M&&typeof M=="object"?M.severity:null)??e.severity??"medium",R=String(B).toLowerCase(),U=(M&&typeof M=="object"?M.cvss_score:null)??e.cvss??null,I=C7[R]??"text-yellow-400";return m.jsxs("div",{className:"space-y-3",children:[m.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[m.jsx("span",{className:`font-semibold text-sm ${I}`,children:R.toUpperCase()}),U!=null&&m.jsxs("span",{className:"text-[#888] text-[13px]",children:["CVSS ",U]}),b&&m.jsx("span",{className:"text-[#888] font-mono text-[13px]",children:b}),_&&m.jsx("span",{className:"text-[#888] font-mono text-[13px]",children:_}),S&&m.jsxs("span",{className:`text-[13px] ${T7[S]??"text-[#888]"}`,children:[S," confidence"]})]}),r&&m.jsx("div",{className:"text-[15px] text-white/80 font-semibold",children:r}),(o||c)&&m.jsxs("div",{className:"text-[13px] text-[#888] font-mono",children:[o,c?` ${d} ${c}`:""]}),a&&m.jsx(Yt,{text:a,maxLines:20}),s&&m.jsxs("div",{children:[m.jsx("span",{className:"text-emerald-400/60 text-sm font-semibold",children:"Impact"}),m.jsx("div",{className:"mt-1",children:m.jsx(Yt,{text:s,maxLines:15})})]}),f&&m.jsxs("div",{children:[m.jsx("span",{className:"text-emerald-400/60 text-sm font-semibold",children:"Technical Analysis"}),m.jsx("div",{className:"mt-1",children:m.jsx(Yt,{text:f,maxLines:20})})]}),w&&m.jsx("div",{className:"text-[#777] text-xs leading-snug",children:w}),E&&m.jsxs("div",{children:[m.jsx("span",{className:"text-emerald-400/60 text-sm font-semibold",children:"Counterevidence"}),m.jsx("div",{className:"mt-1",children:m.jsx(Yt,{text:E,maxLines:12})})]}),k&&m.jsxs("div",{children:[m.jsx("span",{className:"text-emerald-400/60 text-sm font-semibold",children:"Severity would change if"}),m.jsx("div",{className:"mt-1",children:m.jsx(Yt,{text:k,maxLines:10})})]}),(h||g)&&m.jsxs("div",{children:[m.jsx("span",{className:"text-emerald-400/60 text-sm font-semibold",children:"Proof of Concept"}),h&&m.jsx("div",{className:"mt-1",children:m.jsx(ua,{text:h})}),g&&m.jsx(bE,{className:p?`language-${p}`:void 0,children:g})]}),y&&m.jsxs("div",{children:[m.jsx("span",{className:"text-emerald-400/60 text-sm font-semibold",children:"Remediation"}),m.jsx("div",{className:"mt-1",children:m.jsx(Yt,{text:y,maxLines:15})})]}),N&&m.jsxs("div",{children:[m.jsx("span",{className:"text-emerald-400/60 text-sm font-semibold",children:"Fix verification"}),m.jsx("div",{className:"mt-1",children:m.jsx(Yt,{text:N,maxLines:12})})]})]})}const M7={critical:"text-red-400",high:"text-orange-400",medium:"text-yellow-400",low:"text-blue-400",info:"text-cyan-400",none:"text-[#888]"};function O7(e){if(!e.agent_name&&!e.by_you)return null;const t=e.by_you?"you":e.agent_name;return m.jsxs("span",{className:"text-[#666] text-xs ml-1.5",children:["(",t,")"]})}function Bm(e){const t=String(e??"").toLowerCase(),r=M7[t]??"text-yellow-400";return m.jsx("span",{className:`font-semibold text-[13px] ${r}`,children:t.toUpperCase()||"—"})}function f_({toolName:e,result:t}){const r=t,a=r!=null&&typeof r=="object"&&r.success===!0;if(e==="get_report"){const h=a?r.report:void 0;return m.jsxs("div",{children:[m.jsx("span",{className:"text-red-400/80 font-semibold text-sm",children:"report"}),h?m.jsxs("div",{className:"mt-1.5 space-y-2",children:[m.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[Bm(h.severity),h.cvss!=null&&m.jsxs("span",{className:"text-[#888] text-[13px]",children:["CVSS ",h.cvss]}),h.id&&m.jsx("span",{className:"text-[#555] font-mono text-[13px]",children:h.id}),h.cve&&m.jsx("span",{className:"text-[#888] font-mono text-[13px]",children:h.cve}),h.cwe&&m.jsx("span",{className:"text-[#888] font-mono text-[13px]",children:h.cwe}),(h.agent_name||h.by_you)&&m.jsx("span",{className:"text-[#666] text-[13px]",children:h.by_you?"you":h.agent_name})]}),h.title&&m.jsx("div",{className:"text-[15px] text-white/80 font-semibold",children:h.title}),(h.target||h.endpoint)&&m.jsxs("div",{className:"text-[13px] text-[#888] font-mono",children:[h.target,h.endpoint?` ${h.method??""} ${h.endpoint}`:""]}),h.description&&m.jsx(Yt,{text:h.description,maxLines:20})]}):m.jsx("div",{className:"mt-1 text-[#555] text-xs",children:r&&typeof r=="object"&&r.error||"Report not found"})]})}const s=a?r.reports:null,o=Array.isArray(s)?s:[],c=a&&typeof r.total_count=="number"?r.total_count:o.length,d=a&&r.severity_counts&&typeof r.severity_counts=="object"?r.severity_counts:{},f=Object.entries(d);return m.jsxs("div",{children:[m.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[m.jsx("span",{className:"text-red-400/80 font-semibold text-sm",children:"reports"}),m.jsxs("span",{className:"text-[#555] text-[13px]",children:["(",c,")"]}),f.map(([h,p])=>m.jsxs("span",{className:"text-[13px]",children:[Bm(h),m.jsx("span",{className:"text-[#888] ml-0.5",children:p})]},h))]}),o.length>0?m.jsx("div",{className:"mt-1.5 space-y-1",children:o.map((h,p)=>m.jsxs("div",{className:"text-[13px]",children:[m.jsx("span",{className:"text-[#555] mr-1",children:"-"}),Bm(h.severity),h.id&&m.jsx("span",{className:"text-[#555] font-mono ml-1.5",children:h.id}),m.jsx("span",{className:"text-[#999] ml-1.5",children:h.title??"(untitled)"}),O7(h),(h.target||h.endpoint)&&m.jsxs("div",{className:"ml-3 text-[#666] font-mono text-xs",children:[h.target,h.endpoint?` ${h.method??""} ${h.endpoint}`:""]}),h.description_preview&&m.jsx("div",{className:"ml-3",children:m.jsx(ua,{text:h.description_preview})})]},h.id??p))}):m.jsx("div",{className:"mt-1 text-[#555] text-xs",children:"No reports filed yet"})]})}const d2=200,f2={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 bg(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 Xr(e,t=80){return e.length>t?e.slice(0,t-3)+"...":e}function _p(e,t=150){return Xr(e.replace(/\n/g," ").replace(/\r/g,"").replace(/\t/g," "),t)}function wp(e,t){const r=e.split(` +`),a=r.slice(0,t).map(s=>Xr(s,d2-5)).join(` +`);return r.length>t?a+` +...`:a}function R7({args:e,result:t}){const r=e.httpql_filter??"",a=t,s=a?a.requests:null,o=Array.isArray(s)?s:[];return m.jsxs("div",{children:[m.jsxs("div",{className:"flex items-center gap-2",children:[m.jsx("span",{className:"text-purple-400/80 font-semibold text-sm",children:"listing requests"}),r&&m.jsx("span",{className:"text-[#888] text-[13px]",children:Xr(r,150)})]}),o.length>0&&m.jsxs("div",{className:"mt-1.5 font-mono text-[13px] space-y-0.5",children:[o.slice(0,20).map((c,d)=>{const f=(c.method??"GET").toUpperCase(),h=c.host??"",p=c.path??"",g=c.response,y=(g==null?void 0:g.statusCode)??null;return m.jsxs("div",{className:"flex gap-2",children:[m.jsx("span",{className:`w-10 shrink-0 font-bold ${f2[f]??"text-[#888]"}`,children:f}),m.jsx("span",{className:"text-[#777] truncate",children:Xr(h+p,180)}),y!=null&&m.jsx("span",{className:`ml-auto shrink-0 ${bg(y)}`,children:y})]},d)}),o.length>20&&m.jsxs("div",{className:"text-[#555]",children:["... +",o.length-20," more"]})]})]})}function j7({args:e,result:t}){const r=e.request_id,a=e.part??"request",s=e.search_pattern??"",o=t,c=o?o.matches:null,d=Array.isArray(c)?c:[],f=o?o.content??null:null,h=o?!!o.has_more:!1;return m.jsxs("div",{children:[m.jsxs("div",{className:"flex items-center gap-2",children:[m.jsxs("span",{className:"text-purple-400/80 font-semibold text-sm",children:[s?"searching":"viewing"," ",a]}),r!=null&&m.jsxs("span",{className:"text-[#888] text-[13px]",children:["#",r]}),s&&m.jsxs("span",{className:"text-[#666] font-mono text-[13px]",children:["/",Xr(s,100),"/"]})]}),d.length>0&&m.jsxs("div",{className:"mt-1.5 font-mono text-[13px] space-y-1",children:[d.slice(0,5).map((p,g)=>{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 m.jsxs("div",{children:[y&&m.jsxs("span",{className:"text-[#555]",children:["...",y]}),m.jsx("span",{className:"text-amber-400/80 font-bold",children:p.match}),b&&m.jsxs("span",{className:"text-[#555]",children:[b,"..."]})]},g)}),d.length>5&&m.jsxs("div",{className:"text-[#555]",children:["... +",d.length-5," more matches"]})]}),f&&!d.length&&(()=>{const p=f.split(` +`),g=p.slice(0,15).map(b=>Xr(b,d2)).join(` +`),y=h||p.length>15;return m.jsx(wi,{className:"text-[#666]",children:g+(y?` +... more content available`:"")})})()]})}function D7({args:e,result:t}){const r=(e.method??"GET").toUpperCase(),a=e.url??"",s=e.headers,o=e.body,c=typeof o=="string"?o:"",d=t,f=d?d.error??null:null,h=d?d.status_code??null:null,p=d?d.response_time_ms??null:null,g=d?d.body:null,y=typeof g=="string"?g:null;return m.jsxs("div",{children:[m.jsx("span",{className:"text-purple-400/80 font-semibold text-sm",children:"request"}),m.jsxs("div",{className:"mt-1.5 font-mono text-[13px] space-y-0.5",children:[m.jsxs("div",{children:[m.jsx("span",{className:"text-[#555] select-none mr-1",children:">>"}),m.jsx("span",{className:`font-bold ${f2[r]??"text-[#888]"}`,children:r}),m.jsx("span",{className:"text-[#888] ml-1 break-all",children:Xr(a,180)})]}),s&&typeof s=="object"&&Object.entries(s).slice(0,5).map(([b,_])=>m.jsxs("div",{className:"text-[#555] pl-5",children:[b,": ",_p(String(_),150)]},b))]}),c&&m.jsx(wi,{className:"text-[#888]",children:wp(c,4)}),f&&m.jsx("div",{className:"text-red-400/70 text-[13px] mt-1.5",children:_p(f,150)}),h!=null&&m.jsxs("div",{className:"font-mono text-[13px] mt-1.5",children:[m.jsx("span",{className:"text-[#555] select-none mr-1",children:"<<"}),m.jsx("span",{className:`font-bold ${bg(h)}`,children:h}),p!=null&&m.jsxs("span",{className:"text-[#555] ml-2",children:[p,"ms"]})]}),y&&m.jsx(wi,{className:"text-[#666]",children:wp(y,6)})]})}function L7({args:e,result:t}){const r=e.request_id,a=e.modifications,s=t,o=s?s.status_code??null:null,c=s?s.response_time_ms??null:null,d=s?s.body:null,f=typeof d=="string"?d:null;return m.jsxs("div",{children:[m.jsxs("div",{className:"flex items-center gap-2",children:[m.jsx("span",{className:"text-purple-400/80 font-semibold text-sm",children:"repeating request"}),r!=null&&m.jsxs("span",{className:"text-[#888] text-[13px]",children:["#",r]})]}),a&&typeof a=="object"&&Object.keys(a).length>0&&m.jsx("div",{className:"mt-1.5 font-mono text-[13px] space-y-0.5",children:Object.entries(a).slice(0,5).map(([h,p])=>m.jsxs("div",{children:[m.jsxs("span",{className:"text-orange-400/60",children:[h,":"]})," ",m.jsx("span",{className:"text-[#777]",children:_p(typeof p=="string"?p:JSON.stringify(p),150)})]},h))}),o!=null&&m.jsxs("div",{className:"font-mono text-[13px] mt-1.5",children:[m.jsx("span",{className:"text-[#555] select-none mr-1",children:"<<"}),m.jsx("span",{className:`font-bold ${bg(o)}`,children:o}),c!=null&&m.jsxs("span",{className:"text-[#555] ml-2",children:[c,"ms"]})]}),f&&m.jsx(wi,{className:"text-[#666]",children:wp(f,5)})]})}const z7={get:"getting",list:"listing",create:"creating",update:"updating",delete:"deleting"};function I7({args:e}){const t=e.action??"",r=e.scope_name??"",a=z7[t]??(t||"managing");return m.jsxs("div",{className:"flex items-center gap-2",children:[m.jsxs("span",{className:"text-purple-400/80 font-semibold text-sm",children:[a," proxy scope"]}),r&&m.jsx("span",{className:"text-[#888] text-[13px]",children:Xr(r,50)})]})}function B7({args:e}){const t=e.parent_id;return m.jsxs("div",{className:"flex items-center gap-2",children:[m.jsx("span",{className:"text-purple-400/80 font-semibold text-sm",children:"listing sitemap"}),t&&m.jsxs("span",{className:"text-[#888] text-[13px]",children:["under #",Xr(String(t),20)]})]})}function U7({args:e}){const t=e.entry_id;return m.jsxs("div",{className:"flex items-center gap-2",children:[m.jsx("span",{className:"text-purple-400/80 font-semibold text-sm",children:"viewing sitemap entry"}),t&&m.jsxs("span",{className:"text-[#888] text-[13px]",children:["#",Xr(String(t),20)]})]})}function H7(e){switch(e.toolName){case"list_requests":return m.jsx(R7,{...e});case"view_request":return m.jsx(j7,{...e});case"send_request":return m.jsx(D7,{...e});case"repeat_request":return m.jsx(L7,{...e});case"scope_rules":return m.jsx(I7,{...e});case"list_sitemap":return m.jsx(B7,{...e});case"view_sitemap_entry":return m.jsx(U7,{...e});default:return m.jsx("span",{className:"text-purple-400/80 font-semibold text-sm",children:e.toolName.replace(/_/g," ")})}}function $7({args:e}){const t=e.thought??e.content??"";return t?m.jsxs("div",{children:[m.jsx("span",{className:"text-purple-400/80 font-semibold text-sm",children:"Agent is thinking"}),m.jsx("div",{className:"mt-1.5 italic text-[#888]",children:m.jsx(Yt,{text:t,maxLines:20})})]}):null}function q7({toolName:e,args:t}){if(e==="create_agent"){const r=t.name??t.agent_name??"",a=t.task??"";return m.jsxs("div",{children:[m.jsxs("div",{className:"flex items-center gap-2",children:[m.jsx("span",{className:"text-cyan-400/80 font-semibold text-sm",children:"spawning"}),r&&m.jsx("span",{className:"text-cyan-400 font-semibold text-sm",children:r})]}),a&&m.jsx("div",{className:"mt-1.5",children:m.jsx(Yt,{text:a,maxLines:15})})]})}if(e==="agent_finish"){const r=t.result_summary??"",a=t.success,s=t.findings,o=Array.isArray(s)?s:void 0;return m.jsxs("div",{children:[m.jsx("span",{className:`font-semibold text-sm ${a===!1?"text-red-400/80":"text-emerald-400/80"}`,children:a===!1?"Agent failed":"Agent completed"}),r&&m.jsx("div",{className:"mt-1.5",children:m.jsx(Yt,{text:r,maxLines:20})}),o&&o.length>0&&m.jsx("div",{className:"mt-1.5 space-y-0.5",children:o.map((c,d)=>m.jsxs("div",{className:"text-[13px] text-[#888]",children:[m.jsx("span",{className:"text-red-400/50 mr-1",children:"•"}),typeof c=="string"?c:JSON.stringify(c)]},d))})]})}if(e==="send_message_to_agent"){const r=t.message??"",a=t.target_agent_id??t.agent_id??"";return m.jsxs("div",{children:[m.jsxs("div",{className:"flex items-center gap-2",children:[m.jsx("span",{className:"text-cyan-400/80 font-semibold text-sm",children:"message"}),a&&m.jsxs("span",{className:"text-[#888] text-[13px]",children:["to ",a.slice(0,16)]})]}),r&&m.jsx("div",{className:"mt-1.5",children:m.jsx(Yt,{text:r,maxLines:20})})]})}if(e==="wait_for_agents"){const r=t.reason??"";return m.jsxs("div",{className:"flex items-center gap-2",children:[m.jsx("span",{className:"text-cyan-400/80 font-semibold text-sm",children:"waiting"}),r&&m.jsx("span",{className:"text-[#888] text-[13px] truncate",children:r})]})}if(e==="stop_agent"){const r=t.target_agent_id??"",a=t.cascade!==!1,s=t.reason??"";return m.jsxs("div",{children:[m.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[m.jsx("span",{className:"text-red-400/80 font-semibold text-sm",children:"stopping"}),r&&m.jsx("span",{className:"text-[#888] text-[13px]",children:r.slice(0,16)}),a&&m.jsx("span",{className:"text-[#555] text-[13px] italic",children:"+ descendants"})]}),s&&m.jsx("div",{className:"mt-1.5 text-[#888] text-[13px]",children:s})]})}return e==="view_agent_graph"?m.jsx("span",{className:"text-cyan-400/80 font-semibold text-sm",children:"viewing agents graph"}):m.jsx("span",{className:"text-cyan-400/80 font-semibold text-sm",children:e.replace(/_/g," ")})}function P7({args:e,result:t}){const r=e.query??e.search_query??"",a=t,s=a?a.content??null:null,o=a&&!a.success?a.message??null:null;return m.jsxs("div",{children:[m.jsx("span",{className:"text-amber-400/80 font-semibold text-sm",children:"Searching the web"}),r&&m.jsx("div",{className:"text-[#888] text-[13px] mt-0.5",children:r}),o&&m.jsx("div",{className:"text-red-400/70 text-[13px] mt-1.5",children:o}),s&&m.jsx("div",{className:"mt-2",children:m.jsx(Yt,{text:s,maxLines:15})})]})}const F7=50,h_=200,m_=25,p_=24,G7=/\x1b(?:[@-Z\\-_]|\[[0-?]*[ -/]*[@-~]|\][^\x07]*\x07)/g,V7=/\.\.\. \[(stdout|stderr|result|output|error) truncated at \d+k? chars\]/g;function Y7(e){return e.replace(G7,"")}function Um(e){const t=Y7(e);return t.length>h_?t.slice(0,h_-3)+"...":t}function X7(e){return e.replace(V7,"").trim()}function K7(e){const t=e.split(` +`);if(t.length<=F7)return t.map(Um).join(` +`);const r=t.length-m_-p_;return[...t.slice(0,m_).map(Um),`... ${r} lines truncated ...`,...t.slice(-p_).map(Um)].join(` +`)}function Z7({args:e,result:t}){const r=e.action??"",a=e.code??e.script??"",s=t;let o=null;s&&typeof s=="object"?o=typeof s.stdout=="string"?s.stdout:null:typeof s=="string"&&(o=s);const c=r==="new_session"?"new session":r==="close"?"close session":r==="list_sessions"?"list sessions":null,d=o?K7(X7(o)):null;return m.jsxs("div",{children:[m.jsxs("div",{className:"flex items-center gap-2",children:[m.jsx("span",{className:"text-yellow-400/80 font-semibold text-sm",children:"Python"}),c&&m.jsx("span",{className:"text-[#888] text-[13px]",children:c})]}),a&&m.jsx(gg,{code:a,language:"python",collapsible:!0}),d&&m.jsx(wi,{className:"text-[#666]",children:d})]})}function Q7({args:e}){const t=e.targets,a=(Array.isArray(t)?t:[]).map(s=>typeof s=="object"&&s?s.original??null:null).filter(Boolean);return m.jsxs("div",{children:[m.jsxs("div",{className:"flex items-center gap-2",children:[m.jsx("span",{className:"text-emerald-400/80 font-semibold text-sm",children:"Starting penetration test"}),a.length===1&&m.jsxs("span",{className:"text-[#888] text-[13px]",children:["on ",a[0]]})]}),a.length>1&&m.jsx("div",{className:"mt-1.5 space-y-0.5",children:a.map((s,o)=>m.jsxs("div",{className:"text-[13px] text-[#888]",children:[m.jsx("span",{className:"text-[#555] mr-1",children:"•"}),s]},o))})]})}function W7({args:e}){const t=e.name??"Unknown Agent",r=e.task??"";return m.jsxs("div",{children:[m.jsxs("div",{className:"flex items-center gap-2",children:[m.jsx("span",{className:"text-[#888] text-[13px]",children:"subagent"}),m.jsx("span",{className:"text-purple-400 font-semibold text-sm",children:t})]}),r&&m.jsx("div",{className:"mt-1.5",children:m.jsx(Yt,{text:r,maxLines:15})})]})}function J7(e){return e.toolName==="subagent_start_info"?m.jsx(W7,{...e}):m.jsx(Q7,{...e})}function eU({args:e}){const t=e.executive_summary??"",r=e.methodology??"",a=e.technical_analysis??"",s=e.recommendations??"";return m.jsxs("div",{className:"space-y-3",children:[m.jsx("span",{className:"text-emerald-400/80 font-semibold text-sm",children:"Penetration test completed"}),t&&m.jsxs("div",{children:[m.jsx("span",{className:"text-emerald-400/60 text-sm font-semibold",children:"Executive Summary"}),m.jsx("div",{className:"mt-1",children:m.jsx(Yt,{text:t,maxLines:25})})]}),r&&m.jsxs("div",{children:[m.jsx("span",{className:"text-emerald-400/60 text-sm font-semibold",children:"Methodology"}),m.jsx("div",{className:"mt-1",children:m.jsx(Yt,{text:r,maxLines:25})})]}),a&&m.jsxs("div",{children:[m.jsx("span",{className:"text-emerald-400/60 text-sm font-semibold",children:"Technical Analysis"}),m.jsx("div",{className:"mt-1",children:m.jsx(Yt,{text:a,maxLines:25})})]}),s&&m.jsxs("div",{children:[m.jsx("span",{className:"text-emerald-400/60 text-sm font-semibold",children:"Recommendations"}),m.jsx("div",{className:"mt-1",children:m.jsx(Yt,{text:s,maxLines:25})})]}),!t&&!r&&!a&&!s&&m.jsx("div",{className:"text-[#555] text-xs",children:"Generating final report..."})]})}function tU({toolName:e,args:t,result:r}){if(e==="create_note"){const a=t.title??"",s=t.content??"",o=t.category??"general";return m.jsxs("div",{children:[m.jsxs("div",{className:"flex items-center gap-2",children:[m.jsx("span",{className:"text-amber-400/80 font-semibold text-sm",children:"note"}),m.jsxs("span",{className:"text-[#555] text-[13px]",children:["(",o,")"]})]}),a&&m.jsx("div",{className:"mt-1.5 text-[#999] text-[13px]",children:a}),s&&m.jsx("div",{className:"mt-1",children:m.jsx(ua,{text:s})})]})}if(e==="delete_note")return m.jsx("span",{className:"text-amber-400/80 font-semibold text-sm",children:"note removed"});if(e==="update_note"){const a=t.title??"",s=t.content??"";return m.jsxs("div",{children:[m.jsx("span",{className:"text-amber-400/80 font-semibold text-sm",children:"note updated"}),a&&m.jsx("div",{className:"mt-1.5 text-[#999] text-[13px]",children:a}),s&&m.jsx("div",{className:"mt-1",children:m.jsx(ua,{text:s})})]})}if(e==="get_note"){const a=r,s=a&&typeof a=="object"&&a.success?a.note:void 0;return m.jsxs("div",{children:[m.jsx("span",{className:"text-amber-400/80 font-semibold text-sm",children:"note read"}),s&&m.jsxs(m.Fragment,{children:[m.jsxs("div",{className:"mt-1.5 text-[#999] text-[13px]",children:[s.title??"(untitled)",m.jsxs("span",{className:"text-[#555] ml-1",children:["(",s.category??"general",")"]}),(s.by_you||s.agent_name)&&m.jsxs("span",{className:"text-[#666] ml-1 text-xs",children:["by ",s.by_you?"you":s.agent_name]})]}),s.content&&m.jsx("div",{className:"mt-1",children:m.jsx(ua,{text:s.content})})]})]})}if(e==="list_notes"){const a=r;let s=[];if(a&&typeof a=="object"&&a.success){const o=a.notes;s=Array.isArray(o)?o:[]}return m.jsxs("div",{children:[m.jsx("span",{className:"text-amber-400/80 font-semibold text-sm",children:"notes"}),s.length>0?m.jsx("div",{className:"mt-1.5 space-y-0.5",children:s.map((o,c)=>m.jsxs("div",{className:"text-[13px]",children:[m.jsx("span",{className:"text-[#555] mr-1",children:"-"}),m.jsx("span",{className:"text-[#999]",children:o.title??"(untitled)"}),m.jsxs("span",{className:"text-[#555] ml-1",children:["(",o.category??"general",")"]}),(o.by_you||o.agent_name)&&m.jsxs("span",{className:"text-[#666] ml-1 text-xs",children:["by ",o.by_you?"you":o.agent_name]}),o.content&&m.jsx("div",{className:"ml-3",children:m.jsx(ua,{text:o.content})})]},c))}):m.jsx("div",{className:"mt-1 text-[#555] text-xs",children:"No notes"})]})}return m.jsx("span",{className:"text-amber-400/80 font-semibold text-sm",children:"note"})}const nU={create_todo:{label:"Task added",Icon:Y_},list_todos:{label:"Plan",Icon:nC},update_todo:{label:"Task updated",Icon:nT},mark_todo_done:{label:"Task completed",Icon:H_},mark_todo_pending:{label:"Task reopened",Icon:fT},delete_todo:{label:"Task removed",Icon:CT}};function rU({status:e}){return e==="done"?m.jsx(H_,{className:"w-3.5 h-3.5 text-emerald-400/70 shrink-0"}):e==="in_progress"?m.jsx(mC,{className:"w-3.5 h-3.5 text-purple-400/70 shrink-0 animate-pulse"}):m.jsx($_,{className:"w-3.5 h-3.5 text-[#444] shrink-0"})}function iU({todos:e,highlightId:t}){return m.jsx("div",{className:"space-y-0",children:e.map((r,a)=>{const s=r.status??"pending",o=t&&r.id===t;return m.jsxs("div",{className:`flex items-start gap-2.5 py-1.5 px-2 -mx-2 rounded-md transition-colors ${o?"bg-purple-500/[0.08]":""}`,children:[m.jsx("div",{className:"mt-[1px]",children:m.jsx(rU,{status:s})}),m.jsx("span",{className:`text-[13px] leading-snug ${s==="done"?"text-[#555] line-through":s==="in_progress"?"text-[#bbb]":"text-[#999]"}`,children:r.title??"(untitled)"})]},r.id??a)})})}function aU({toolName:e,args:t,result:r}){const a=nU[e]??{label:"Plan",Icon:oT},s=a.Icon,o=r;if(typeof o=="string"&&o.trim())return m.jsxs("div",{children:[m.jsxs("div",{className:"flex items-center gap-2",children:[m.jsx(s,{className:"w-3.5 h-3.5 text-purple-400/60"}),m.jsx("span",{className:"text-purple-400/80 font-semibold text-sm",children:a.label})]}),m.jsx("div",{className:"mt-1.5 text-[#888] text-[13px]",children:o.trim()})]});let c=[],d=null,f;if(o&&typeof o=="object"){if(d=o.error??null,o.success){const p=o.todos;c=Array.isArray(p)?p:[]}f=o.id??t.todo_id??void 0}const h=e!=="list_todos"?f:void 0;return c.length===0&&!d?m.jsxs("div",{className:"flex items-center gap-2",children:[m.jsx(s,{className:"w-3.5 h-3.5 text-purple-400/60"}),m.jsx("span",{className:"text-purple-400/80 font-semibold text-sm",children:a.label})]}):m.jsxs("div",{children:[m.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[m.jsx(s,{className:"w-3.5 h-3.5 text-purple-400/60"}),m.jsx("span",{className:"text-purple-400/80 font-semibold text-sm",children:a.label})]}),d&&m.jsx("div",{className:"text-red-400/70 text-[13px] mb-2",children:d}),c.length>0&&m.jsx("div",{className:"rounded-lg border border-white/[0.06] bg-white/[0.015] px-3 py-2",children:m.jsx(iU,{todos:c,highlightId:h})})]})}function g_(e){if(e==null)return null;if(typeof e=="string")return e.trim()?e:null;if(typeof e=="object"){const t=e;if(typeof t.__raw=="string")return t.__raw;if(Object.keys(t).length===0)return null;try{return JSON.stringify(e,null,2)}catch{return String(e)}}return String(e)}function h2({toolName:e,args:t,result:r}){const a=g_(t),s=g_(r);return m.jsxs("div",{children:[m.jsx("span",{className:"text-[#888] font-semibold text-sm",children:e.replace(/_/g," ")}),a&&m.jsx(wi,{className:"text-[#777]",children:a}),s&&m.jsx(wi,{className:"text-[#666]",children:s})]})}function sU({args:e}){const t=e.skills,r=(Array.isArray(t)?t:String(t??"").split(",")).map(a=>String(a).trim()).filter(Boolean);return m.jsxs("div",{className:"flex items-center gap-2",children:[m.jsx("span",{className:"text-emerald-400/80 font-semibold text-sm",children:"Loading skill"}),r.length>0&&m.jsx("span",{className:"text-[#888] text-[13px]",children:r.join(", ")})]})}function lU({args:e}){const t=e.message??"";return t?m.jsxs("div",{children:[m.jsx(ua,{text:t}),m.jsx("div",{className:"mt-1.5 text-[#888] text-[13px]",children:"waiting for your reply"})]}):null}const oU={reported:{label:"reported",color:"text-orange-400",Icon:Nu},no_issue_found:{label:"no issue found",color:"text-emerald-400",Icon:Eu},ruled_out:{label:"ruled out",color:"text-emerald-400/70",Icon:Eu},not_applicable:{label:"not applicable",color:"text-[#777]",Icon:bC},needs_follow_up:{label:"needs follow-up",color:"text-yellow-400",Icon:gC}},cU=["reported","needs_follow_up","no_issue_found","ruled_out","not_applicable"];function mo(e){const t=(e??"").trim().toLowerCase();return oU[t]??{label:t?t.replace(/_/g," "):"unrecorded",color:"text-[#777]",Icon:$_}}const uU={record_coverage:"Coverage recorded",update_coverage:"Coverage updated",list_coverage:"Coverage"};function gu({toolName:e}){return m.jsxs("div",{className:"flex items-center gap-2",children:[m.jsx(q_,{className:"w-3.5 h-3.5 text-cyan-400/60"}),m.jsx("span",{className:"text-cyan-400/80 font-semibold text-sm",children:uU[e]??"Coverage"})]})}function dU({entry:e}){const{label:t,color:r,Icon:a}=mo(e.outcome),s=(e.previous_outcomes??[]).map(o=>mo(o).label).filter(Boolean);return m.jsxs("div",{className:"flex items-start gap-2.5 py-1.5",children:[m.jsx(a,{className:`w-3.5 h-3.5 shrink-0 mt-[2px] ${r}`}),m.jsxs("div",{className:"min-w-0",children:[m.jsxs("div",{className:"text-[13px] leading-snug",children:[m.jsx("span",{className:"text-[#bbb]",children:e.surface??"(unnamed surface)"}),e.risk_area&&m.jsxs("span",{className:"text-[#666]",children:[" · ",e.risk_area]})]}),m.jsxs("div",{className:"text-xs mt-0.5",children:[m.jsx("span",{className:r,children:t}),s.length>0&&m.jsxs("span",{className:"text-[#555]",children:[" (was ",s.join(" → "),")"]}),(e.by_you||e.agent_name)&&m.jsxs("span",{className:"text-[#555]",children:[" · ",e.by_you?"you":e.agent_name]})]}),e.evidence&&m.jsx("div",{className:"text-[#777] text-xs mt-1 leading-snug",children:e.evidence})]})]})}function fU({toolName:e,args:t,result:r}){const a=r;if(typeof a=="string"&&a.trim())return m.jsxs("div",{children:[m.jsx(gu,{toolName:e}),m.jsx("div",{className:"mt-1.5 text-[#888] text-[13px]",children:a.trim()})]});const s=a&&typeof a=="object"?a:null,o=t.surface??"",c=t.risk_area??"",d=t.evidence??"";if(s&&!s.success)return m.jsxs("div",{children:[m.jsx(gu,{toolName:e}),(o||c)&&m.jsxs("div",{className:"mt-1.5 text-[13px] text-[#bbb]",children:[o,c&&m.jsxs("span",{className:"text-[#666]",children:[" · ",c]})]}),m.jsx("div",{className:"mt-1 text-red-400/70 text-[13px]",children:s.error??"Coverage call failed"})]});if(e==="list_coverage"){const b=s==null?void 0:s.entries,_=Array.isArray(b)?b:[],E=(s==null?void 0:s.outcome_counts)??{},S=(s==null?void 0:s.total_count)??0;return m.jsxs("div",{children:[m.jsx(gu,{toolName:e}),Object.keys(E).length>0&&m.jsx("div",{className:"mt-2 flex items-center gap-3 flex-wrap",children:cU.filter(w=>E[w]).map(w=>{const{label:k,color:N}=mo(w);return m.jsxs("span",{className:`text-xs ${N}`,children:[k,": ",E[w]]},w)})}),_.length>0?m.jsx("div",{className:"mt-2 rounded-lg border border-white/[0.06] bg-white/[0.015] px-3 py-1 divide-y divide-white/[0.04]",children:_.map((w,k)=>m.jsx(dU,{entry:w},w.entry_id??k))}):m.jsx("div",{className:"mt-1.5 text-[#555] text-xs",children:S===0?"No surfaces recorded yet":"No surfaces match this filter"})]})}const f=(s==null?void 0:s.outcome)??"",h=(s==null?void 0:s.previous_outcome)??"",{label:p,color:g,Icon:y}=mo(f);return m.jsxs("div",{children:[m.jsx(gu,{toolName:e}),m.jsxs("div",{className:"mt-2 flex items-start gap-2.5",children:[m.jsx(y,{className:`w-3.5 h-3.5 shrink-0 mt-[2px] ${g}`}),m.jsxs("div",{className:"min-w-0",children:[m.jsxs("div",{className:"text-[13px] leading-snug text-[#bbb]",children:[o||(s!=null&&s.entry_id?`entry ${s.entry_id}`:"(unnamed surface)"),c&&m.jsxs("span",{className:"text-[#666]",children:[" · ",c]})]}),m.jsxs("div",{className:"text-xs mt-0.5",children:[h&&m.jsxs("span",{className:"text-[#666]",children:[mo(h).label," → "]}),m.jsx("span",{className:g,children:p})]}),d&&m.jsx("div",{className:"text-[#777] text-xs mt-1 leading-snug",children:d})]})]})]})}const hU={get_threat_model:{label:"Threat model",Icon:Vu},save_threat_model:{label:"Threat model saved",Icon:mT},amend_threat_model:{label:"Threat model amended",Icon:Y_}};function x_(e){const t=typeof e=="string"?e.trim():"";return!t||t==="unversioned"?"":t.slice(0,8)}function mU({toolName:e,args:t,result:r}){const a=hU[e]??{label:"Threat model",Icon:Vu},s=a.Icon,o=t.target??"",c=r,d=m.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[m.jsx(s,{className:"w-3.5 h-3.5 text-blue-400/60"}),m.jsx("span",{className:"text-blue-400/80 font-semibold text-sm",children:a.label}),o&&m.jsx("span",{className:"text-[#666] font-mono text-xs",children:o})]});if(typeof c=="string"&&c.trim())return m.jsxs("div",{children:[d,m.jsx("div",{className:"mt-1.5 text-[#888] text-[13px]",children:c.trim()})]});const f=c&&typeof c=="object"?c:null;if(f&&!f.success)return m.jsxs("div",{children:[d,m.jsx("div",{className:"mt-1.5 text-red-400/70 text-[13px]",children:f.error??"Threat model call failed"})]});if(e==="get_threat_model"){if(f&&!f.found)return m.jsxs("div",{children:[d,m.jsx("div",{className:"mt-1.5 text-[#555] text-xs",children:"No model cached for this target yet"})]});const y=f==null?void 0:f.amendments,b=Array.isArray(y)?y:[],_=x_(f==null?void 0:f.cached_revision);return m.jsxs("div",{children:[d,(f==null?void 0:f.stale)===!0&&m.jsxs("div",{className:"mt-1.5 flex items-center gap-1.5 text-yellow-400/80 text-xs",children:[m.jsx(Nu,{className:"w-3 h-3 shrink-0"}),m.jsxs("span",{children:["stale",_?` — written at ${_}`:""]})]}),b.length>0&&m.jsxs("div",{className:"mt-2",children:[m.jsxs("span",{className:"text-amber-400/70 text-xs font-semibold",children:[b.length," amendment",b.length===1?"":"s"]}),m.jsx("span",{className:"text-[#555] text-xs",children:" — later statements win"}),m.jsx("div",{className:"mt-1 space-y-1",children:b.map((E,S)=>m.jsxs("div",{className:"text-xs leading-snug",children:[m.jsx("span",{className:"text-[#666]",children:E.agent_name??"unknown agent"}),E.content&&m.jsxs("span",{className:"text-[#999]",children:[": ",E.content]})]},S))})]}),typeof(f==null?void 0:f.content)=="string"&&f.content.trim()&&m.jsx("div",{className:"mt-2",children:m.jsx(Yt,{text:f.content,maxLines:14})})]})}if(e==="amend_threat_model"){const y=t.addendum??"",b=f==null?void 0:f.amendment_count;return m.jsxs("div",{children:[d,b!=null&&m.jsxs("div",{className:"mt-1.5 text-[#666] text-xs",children:[b," amendment",b===1?"":"s"," on this model"]}),y&&m.jsx("div",{className:"mt-1.5",children:m.jsx(Yt,{text:y,maxLines:10})})]})}const h=(f==null?void 0:f.amendments_cleared)??0,p=x_(f==null?void 0:f.revision),g=t.content??"";return m.jsxs("div",{children:[d,p&&m.jsxs("div",{className:"mt-1.5 text-[#666] font-mono text-xs",children:["at ",p]}),h>0&&m.jsxs("div",{className:"mt-1.5 flex items-center gap-1.5 text-yellow-400/80 text-xs",children:[m.jsx(Nu,{className:"w-3 h-3 shrink-0"}),m.jsxs("span",{children:["cleared ",h," amendment",h===1?"":"s"]})]}),g&&m.jsx("div",{className:"mt-2",children:m.jsx(Yt,{text:g,maxLines:14})})]})}function pU(e){return!e||typeof e!="object"||Array.isArray(e)?[]:Object.entries(e).map(([t,r])=>{const a=typeof r=="string"?r:JSON.stringify(r);return`${t}: ${a??String(r)}`})}const b_=600;function gU(e){if(typeof e=="string"){const t=e.trim();return t?t.length>b_?`${t.slice(0,b_)}…`:t:null}return null}function xU({toolName:e,mcpTool:t,mcpConnection:r,args:a,result:s,status:o}){const c=pU(a),d=o==="failed"||o==="error",f=d?gU(s):null;return m.jsxs("div",{children:[m.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[m.jsx("span",{className:"font-mono text-teal-300 font-semibold text-sm",children:t||e}),m.jsx("span",{className:"text-[13px] text-[#555]",children:"via MCP server"}),r&&m.jsx("span",{className:"text-[13px] text-teal-400/80",children:r})]}),c.length>0&&m.jsx("div",{className:"mt-1 font-mono text-[13px] leading-relaxed",children:c.map(h=>m.jsx("div",{className:"text-[#777] break-all",children:h},h))}),m.jsxs("div",{className:"mt-1 text-[13px]",children:[o==="running"&&m.jsx("span",{className:"text-[#666]",children:"Running"}),o==="completed"&&m.jsx("span",{className:"text-emerald-400/80",children:"✓ Done"}),d&&m.jsx("span",{className:"text-red-400/80",children:"✗ Failed"})]}),f&&m.jsx("pre",{className:"mt-1 font-mono text-[13px] leading-relaxed whitespace-pre-wrap break-words text-red-400/70",children:f})]})}const Ga={terminal:{renderer:h7,icon:K_,color:"text-emerald-400"},python:{renderer:Z7,icon:EC,color:"text-yellow-400"},browser:{renderer:p7,icon:G_,color:"text-blue-400"},filesystem:{renderer:g7,icon:MC,color:"text-sky-400"},proxy:{renderer:H7,icon:z_,color:"text-purple-400",match:/request|sitemap|scope/},reporting:{renderer:A7,icon:bT,color:"text-red-400"},thinking:{renderer:$7,icon:B_,color:"text-purple-400"},agents:{renderer:q7,icon:Oo,color:"text-cyan-400",match:/agent/},search:{renderer:P7,icon:gT,color:"text-amber-400"},lifecycle:{renderer:J7,icon:F_,color:"text-emerald-400"},notes:{renderer:tU,icon:NT,color:"text-amber-400",match:/note/},skills:{renderer:sU,icon:Gm,color:"text-emerald-400"},todos:{renderer:aU,icon:YC,color:"text-purple-400",match:/todo/},coverage:{renderer:fU,icon:q_,color:"text-cyan-400",match:/coverage/},threatModel:{renderer:mU,icon:Vu,color:"text-blue-400",match:/threat_model/},telemetry:{renderer:h2,icon:Gm,color:"text-[#555]"},mcp:{renderer:xU,icon:V_,color:"text-teal-400"}},bU={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","list_reports","get_report"],thinking:["think"],agents:["create_agent","agent_finish","send_message_to_agent","wait_for_agents","view_agent_graph","stop_agent"],search:["web_search"],lifecycle:["scan_start_info","subagent_start_info","finish_scan","respond_to_user"],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"],coverage:["record_coverage","update_coverage","list_coverage"],threatModel:["get_threat_model","save_threat_model","amend_threat_model"],telemetry:["sandbox_error_details","llm_error_details"],mcp:[]},yU=Object.fromEntries(Object.entries(bU).flatMap(([e,t])=>t.map(r=>[r,e]))),vU={finish_scan:eU,respond_to_user:lU,apply_patch:E7,view_image:k7,list_reports:f_,get_report:f_},_U={agent_finish:{icon:F_,color:"text-cyan-400"},send_message_to_agent:{icon:yh,color:"text-cyan-400"},wait_for_agents:{icon:yh,color:"text-cyan-400"},respond_to_user:{icon:yh,color:"text-emerald-400"},view_agent_graph:{icon:TC,color:"text-cyan-400"},stop_agent:{icon:I_,color:"text-red-400"},scan_start_info:{icon:Vu,color:"text-emerald-400"},subagent_start_info:{icon:Oo,color:"text-purple-400"},view_image:{icon:PC,color:"text-sky-400"}},wU=Ga.telemetry;function m2(e){var r;const t=yU[e];if(t)return t;for(const[a,s]of Object.entries(Ga))if((r=s.match)!=null&&r.test(e))return a;return null}function EU(e,t){if(t)return Ga.mcp.renderer;const r=vU[e];if(r)return r;const a=m2(e);return a?Ga[a].renderer:h2}function NU(e,t){if(t)return{icon:Ga.mcp.icon,color:Ga.mcp.color};const r=_U[e];if(r)return r;const a=m2(e),s=a?Ga[a]:wU;return{icon:s.icon,color:s.color}}const SU=30;function kU({role:e,content:t}){const r=e==="user"||e==="human";return m.jsxs("div",{children:[m.jsx("span",{className:`font-semibold text-sm ${r?"text-blue-400/80":"text-purple-400/80"}`,children:r?"User":"Thinking"}),m.jsx("div",{className:"mt-1.5 italic text-[#888]",children:m.jsx(Yt,{text:t,maxLines:SU})})]})}class CU extends ee.Component{constructor(t){super(t),this.state={hasError:!1}}static getDerivedStateFromError(){return{hasError:!0}}render(){return this.state.hasError?m.jsx("span",{className:"text-[#555] font-semibold text-sm",children:this.props.toolName.replace(/_/g," ")}):this.props.children}}function TU(e){const t=EU(e.toolName,e.mcpConnection);return m.jsx(CU,{toolName:e.toolName,children:m.jsx(t,{...e})})}function p2(e){if(e==null||typeof e!="string")return e;const t=e.trim();if(!t)return e;try{return JSON.parse(t)}catch{}try{const r=t.replace(/\bNone\b/g,"null").replace(/\bTrue\b/g,"true").replace(/\bFalse\b/g,"false").replace(/'/g,'"');return JSON.parse(r)}catch{return{__raw:e}}}function y_(e){return typeof e=="string"&&e?e:null}function g2(e){const t=p2(e);return t&&typeof t=="object"&&!Array.isArray(t)?t:t==null?{}:{__raw:typeof t=="string"?t:JSON.stringify(t)}}function v_(e){const t=/(\d+)$/.exec(e);return t?parseInt(t[1],10):0}function yg(e){var r;const t=(r=e.data)==null?void 0:r.role;return e.type==="chat"&&(t==="user"||t==="human")}function AU(e){var t;return yg(e)&&String(((t=e.data)==null?void 0:t.content)??"").startsWith("[Message from ")}function MU(e){const t=new Set;let r=!1;for(const a of e)if(yg(a)){if(AU(a)){t.add(a.id);continue}r||(r=!0,t.add(a.id))}return t}const OU={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 RU(e){return e==="completed"?"completed":e==="running"?"running":e==="failed"||e==="crashed"?"failed":e}function jU(e,t){var d;const r=new Map;for(const f of e)if(f.parent_id){const h=r.get(f.parent_id)??[];h.push(f.id),r.set(f.parent_id,h)}const a=new Map,s=new Map,o=new Map;for(const f of t)if(f.type==="tool"){if(a.set(f.agent_id,(a.get(f.agent_id)??0)+1),((d=f.data)==null?void 0:d.tool_name)==="create_agent"){const h=g2(f.data.args),p=h.name??h.agent_name??"",g=h.task??"";p&&g&&o.set(p,g)}}else yg(f)||s.set(f.agent_id,(s.get(f.agent_id)??0)+1);const c=new Map;for(const f of e)c.set(f.id,{id:f.id,name:f.name,task:o.get(f.name)??"",status:RU(f.status),parentId:f.parent_id,children:r.get(f.id)??[],createdAt:f.created_at,toolCount:a.get(f.id)??0,messageCount:s.get(f.id)??0});return c}function DU({agent:e,events:t,showHeader:r=!0}){const a=ee.useMemo(()=>{const c=t.filter(f=>f.agent_id===e.id).sort((f,h)=>v_(f.id)-v_(h.id)),d=MU(c);return c.filter(f=>!d.has(f.id))},[t,e.id]),s=a.filter(c=>c.type==="tool").length,o=a.length-s;return m.jsxs("div",{children:[r&&m.jsxs(m.Fragment,{children:[m.jsxs("div",{className:"flex items-center gap-2 flex-wrap mb-1",children:[m.jsx("span",{className:"text-base font-semibold text-white truncate",children:e.name}),m.jsx("span",{className:`flex-shrink-0 text-xs font-medium capitalize px-2 py-0.5 rounded-full border ${OU[e.status]??"text-[#aaa] border-[#333] bg-[#1a1a1a]"}`,children:e.status}),m.jsx("span",{className:"font-mono text-xs text-[#555]",children:e.id})]}),m.jsxs("p",{className:"text-xs text-[#666] mb-4",children:[o," message",o===1?"":"s"," · ",s," tool call",s===1?"":"s"]})]}),a.length===0?m.jsx("p",{className:"text-sm text-[#666]",children:"No recorded activity for this agent."}):m.jsx("div",{className:"py-1",children:a.map((c,d)=>{var w,k,N,M,B,R,U,I;const f=d===a.length-1,h=c.type==="tool",p=h?String(((w=c.data)==null?void 0:w.tool_name)??"tool"):"",g=h?"":String(((k=c.data)==null?void 0:k.role)??"assistant"),y=y_((N=c.data)==null?void 0:N.mcp_connection),b=y_((M=c.data)==null?void 0:M.mcp_tool);let _,E;if(h){const X=NU(p,y);_=X.icon,E=X.color}else{const X=g==="user"||g==="human";_=X?Oo:B_,E=X?"text-blue-400":"text-purple-400"}const S=h?String(((B=c.data)==null?void 0:B.status)??"completed"):"completed";return m.jsxs("div",{className:"flex gap-3",children:[m.jsxs("div",{className:"flex flex-col items-center shrink-0",children:[m.jsx("div",{className:`w-[30px] h-[30px] rounded-full bg-black border flex items-center justify-center shrink-0 ${h&&S==="running"?"border-blue-500/40 animate-pulse":h&&S==="failed"?"border-red-500/30":"border-[#222]"}`,children:m.jsx(_,{className:`w-3.5 h-3.5 ${E}`})}),!f&&m.jsx("div",{className:"w-px flex-1 bg-[#1a1a1a] mt-1"})]}),m.jsx("div",{className:"flex-1 min-w-0 pt-[5px] pb-6",children:h?m.jsx(TU,{toolName:p,mcpConnection:y,mcpTool:b,args:g2((R=c.data)==null?void 0:R.args),result:p2((U=c.data)==null?void 0:U.result)??null,status:S}):m.jsx(kU,{role:g,content:String(((I=c.data)==null?void 0:I.content)??"")})})]},c.id)})})]})}class qu extends Error{constructor(t){super(t),this.name="RunParseError"}}const LU=["critical","high","medium","low"];function zU(e){const t=String(e??"").toLowerCase().trim();return LU.includes(t)?t:"low"}function IU(e){if(typeof e=="string"&&e.trim()){const t=e.trim().replace(" UTC","Z").replace(" ","T"),r=new Date(t);if(!Number.isNaN(r.getTime()))return r.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 BU(e){return typeof e=="number"&&Number.isFinite(e)?e:null}function x2(e,t){try{return JSON.parse(e)}catch{throw new qu(`${t} isn't valid JSON. Make sure you selected a Strix run directory.`)}}function UU(e){const t=x2(e,"run.json");if(!t||typeof t!="object"||Array.isArray(t))throw new qu("run.json is not an object.");const r=t,a=[],s=r.targets_info;if(Array.isArray(s)){for(const b of s)if(b&&typeof b=="object"){const _=b.original;typeof _=="string"&&_&&a.push(_)}}const o=Ot(r.start_time),c=Ot(r.end_time);let d=null;if(o&&c){const b=new Date(o).getTime(),_=new Date(c).getTime();!Number.isNaN(b)&&!Number.isNaN(_)&&_>=b&&(d=Math.round((_-b)/1e3))}let f=null,h=null,p=null,g=null;const y=r.scan_results;if(y&&typeof y=="object"){const b=y;f=Ot(b.executive_summary),h=Ot(b.technical_analysis),p=Ot(b.methodology),g=Ot(b.recommendations)}return{runId:Ot(r.run_id),runName:Ot(r.run_name),targets:a,scanMode:Ot(r.scan_mode),status:Ot(r.status),startTime:o,endTime:c,durationSeconds:d,executiveSummary:f,technicalAnalysis:h,methodology:p,recommendations:g}}function HU(){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 $U(e,t,r){const a=e.cwe,s=typeof a=="string"&&a.trim()?[a.trim()]:Array.isArray(a)?a.filter(c=>typeof c=="string"&&c):null;return{...HU(),id:Ot(e.id)??`vuln-${t+1}`,scan_id:r,title:Ot(e.title)??"Untitled finding",description:Ot(e.description)??"",severity:zU(e.severity),status:"open",created_at:IU(e.timestamp),cve:Ot(e.cve),cvss:BU(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:s,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 qU(e,t=null){const r=x2(e,"vulnerabilities.json");if(!Array.isArray(r))throw new qu("vulnerabilities.json is not a JSON array.");return r.map((a,s)=>{if(!a||typeof a!="object")throw new qu(`vulnerabilities.json entry #${s+1} is not an object.`);return $U(a,s,t)})}function PU(e){const t={critical:0,high:0,medium:0,low:0};for(const r of e)t[r.severity]+=1;return t}async function es(e){const t=await fetch(e,{cache:"no-store"});if(!t.ok)throw new Error(`${e} responded ${t.status}`);return t.json()}function dd(e){return e?`?run=${encodeURIComponent(e)}`:""}async function b2(e){const t=await es("/api/run"+dd(e)),r=UU(JSON.stringify(t)),a=t.finished===!0;return{summary:r,raw:t,finished:a}}async function y2(e,t){const r=await es("/api/vulnerabilities"+dd(t));return qU(JSON.stringify(r),e)}async function FU(e){const t=await es("/api/report"+dd(e));return(t==null?void 0:t.markdown)??null}async function v2(e){const t=await es("/api/transcript"+dd(e));return{agents:Array.isArray(t==null?void 0:t.agents)?t.agents:[],events:Array.isArray(t==null?void 0:t.events)?t.events:[]}}async function __(e){const{summary:t,raw:r,finished:a}=await b2(e),[s,o,c]=await Promise.all([y2(t.runId,e).catch(()=>[]),FU(e).catch(()=>null),v2(e).catch(()=>({agents:[],events:[]}))]);return{summary:t,raw:r,finished:a,vulnerabilities:s,reportMarkdown:o,transcript:c}}async function il(e,t){const r=await fetch(e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t),cache:"no-store"});let a={};try{const s=await r.json();s&&typeof s=="object"&&(a=s)}catch{}return{ok:r.ok,status:r.status,data:a}}async function GU(){const e=await es("/api/runs");return{locked:(e==null?void 0:e.locked)??!0,count:typeof(e==null?void 0:e.count)=="number"?e.count:0,runs:Array.isArray(e==null?void 0:e.runs)?e.runs:[]}}async function VU(){const e=await es("/api/capabilities");return{can_steer:(e==null?void 0:e.can_steer)===!0}}async function YU(e,t){const{ok:r,data:a}=await il("/api/agents/steer",{agent_id:e,message:t});return r&&a.ok===!0?{ok:!0}:{ok:!1,error:String(a.error??"unavailable")}}async function XU(e,t){const{ok:r,data:a}=await il("/api/feedback",{message:e,email:t});return r&&a.ok===!0?{ok:!0}:{ok:!1,error:String(a.error??"unavailable")}}async function KU(){const e=await es("/api/auth/status");return{verified:(e==null?void 0:e.verified)===!0,email:(e==null?void 0:e.email)??null}}async function _2(e){const{ok:t,data:r}=await il("/api/auth/otp/start",{email:e});return t&&r.ok===!0?{ok:!0}:{ok:!1,error:String(r.error??"unavailable")}}async function w2(e,t){const{ok:r,data:a}=await il("/api/auth/otp/verify",{email:e,code:t});return r&&a.verified===!0?{verified:!0,email:String(a.email??e)}:{verified:!1,error:String(a.error??"invalid_code")}}async function ZU(){await il("/api/auth/forget",{})}async function QU(e){const{ok:t,data:r}=await il("/api/report/send",e?{run:e}:{});return t&&r.ok===!0?{ok:!0,password:String(r.password??""),filename:String(r.filename??"strix-report.pdf")}:{ok:!1,error:String(r.error??"unavailable")}}const Us="__root__";function E2({agents:e,fixedAgentId:t,className:r}){const a=ee.useRef(null),[s,o]=ee.useState(!1),[c,d]=ee.useState(!1),[f,h]=ee.useState(""),[p,g]=ee.useState(!1),[y,b]=ee.useState(null),_=t!=null,E=ee.useMemo(()=>e.find(z=>!z.parent_id)??e[0]??null,[e]),S=ee.useMemo(()=>e.filter(z=>z.parent_id&&z.status==="running"),[e]),[w,k]=ee.useState(Us),[N,M]=ee.useState(!1);ee.useEffect(()=>{w!==Us&&!S.some(z=>z.id===w)&&k(Us)},[w,S]);const{targetId:B,targetName:R}=ee.useMemo(()=>{if(_){const V=e.find(P=>P.id===t)??null;return{targetId:t??null,targetName:(V==null?void 0:V.name)??"this agent"}}if(w===Us)return{targetId:(E==null?void 0:E.id)??null,targetName:"Root agent"};const z=e.find(V=>V.id===w)??null;return{targetId:(z==null?void 0:z.id)??(E==null?void 0:E.id)??null,targetName:(z==null?void 0:z.name)??"Root agent"}},[e,t,_,E,w]),U=f.trim().length===0;ee.useLayoutEffect(()=>{const z=a.current;z&&(z.style.height="auto",z.style.height=`${z.scrollHeight}px`)},[f]);const I=ee.useCallback(()=>{o(!0),requestAnimationFrame(()=>{var z;return(z=a.current)==null?void 0:z.focus()})},[]),X=ee.useCallback(()=>{o(!1),d(!1),M(!1)},[]),j=ee.useCallback(async()=>{if(p)return;const z=f.trim();if(!z||!B)return;g(!0),b(null);const V=R,P=await YU(B,z);g(!1),P.ok?(h(""),b(`Sent to ${V}`),Tr("agent_steered")):P.error==="not_delivered"?b("Could not reach that agent (it may have finished)."):b("Could not send that message. Try again.")},[p,f,B,R]);return s?m.jsxs("div",{className:Mr("mt-4 rounded-2xl border border-white/[0.08] bg-[#050505] overflow-hidden transition-colors duration-300",c?"border-white/[0.18]":"hover:border-white/[0.12]",r),children:[m.jsxs("div",{className:"flex items-center justify-between gap-3 border-b border-white/[0.06] px-5 py-3",children:[m.jsxs("div",{className:"min-w-0",children:[m.jsxs("div",{className:"flex items-center gap-2",children:[m.jsx(Fm,{className:"h-4 w-4 text-[#666]"}),m.jsx("p",{className:"text-sm font-medium text-white",children:"Live prompt"})]}),m.jsx("p",{className:"mt-0.5 text-xs text-[#777]",children:"Connected"})]}),m.jsxs("div",{className:"flex shrink-0 items-center gap-2",children:[_?m.jsxs("div",{className:"rounded-full border border-white/[0.08] bg-white/[0.03] px-3 py-1 text-xs text-[#aaa]",children:["Target: ",m.jsx("span",{className:"text-white",children:R})]}):m.jsxs("div",{className:"flex items-center gap-1.5",children:[m.jsx("span",{className:"text-xs text-[#aaa]",children:"Target:"}),m.jsxs("div",{className:"relative",children:[m.jsxs("button",{type:"button",onClick:()=>M(z=>!z),onBlur:()=>requestAnimationFrame(()=>M(!1)),className:"inline-flex h-7 items-center gap-1 rounded-full border border-white/[0.08] bg-white/[0.03] px-3 text-xs text-white transition-colors hover:border-white/[0.16] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-white/20","aria-haspopup":"listbox","aria-expanded":N,children:[m.jsx("span",{className:"max-w-[140px] truncate",children:R}),m.jsx(po,{className:"h-3.5 w-3.5 text-[#999]"})]}),N&&m.jsxs("div",{className:"absolute right-0 z-10 mt-1 min-w-[160px] overflow-hidden rounded-lg border border-[#333] bg-[#0a0a0a] py-1 shadow-xl",role:"listbox",children:[m.jsx(w_,{label:"Root agent",active:w===Us,onSelect:()=>{k(Us),M(!1)}}),S.map(z=>m.jsx(w_,{label:z.name,active:w===z.id,onSelect:()=>{k(z.id),M(!1)}},z.id))]})]})]}),m.jsx("button",{type:"button",onClick:X,className:"inline-flex h-7 w-7 items-center justify-center rounded-full text-[#777] transition-colors hover:bg-white/[0.06] hover:text-white focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-white/20","aria-label":"Collapse live prompt composer",children:m.jsx(po,{className:"h-4 w-4"})})]})]}),m.jsx("div",{className:"px-5 pt-4 pb-3",children:m.jsx("textarea",{ref:a,rows:1,value:f,onChange:z=>h(z.target.value),onFocus:()=>d(!0),onBlur:()=>d(!1),onKeyDown:z=>{z.key==="Enter"&&!z.shiftKey&&(z.preventDefault(),j())},placeholder:"Send a live prompt to the running pentest…",maxLength:4e3,disabled:p,className:"block w-full resize-none border-0 bg-transparent p-0 text-[15px] leading-6 text-white placeholder:text-[#444] focus:outline-none disabled:opacity-60 max-h-[160px] overflow-y-auto"})}),m.jsxs("div",{className:"flex items-center justify-between gap-3 px-4 pb-4",children:[m.jsx("div",{className:"text-xs text-[#666]",children:y??"Press Enter to send."}),m.jsxs("button",{type:"button",onClick:z=>{z.stopPropagation(),j()},disabled:p||U,className:Mr("inline-flex h-10 min-w-[112px] items-center justify-center gap-2 rounded-full px-4 text-sm font-medium transition-colors",p||U?"bg-white/[0.08] text-[#666]":"bg-white text-black hover:bg-neutral-200"),children:[p?m.jsx(Ps,{className:"h-4 w-4 animate-spin"}):m.jsx(Yk,{className:"h-4 w-4",strokeWidth:2.5}),m.jsx("span",{children:"Send prompt"})]})]})]}):m.jsxs("button",{type:"button",onClick:I,className:Mr("mt-4 flex w-full items-center justify-between gap-3 rounded-2xl border border-white/[0.08] bg-[#050505] px-5 py-3 text-left transition-colors duration-300 hover:border-white/[0.12] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-white/20",r),"aria-expanded":!1,"aria-label":"Expand live prompt composer",children:[m.jsxs("div",{className:"flex min-w-0 items-center gap-2",children:[m.jsx(Fm,{className:"h-4 w-4 shrink-0 text-[#666]"}),m.jsx("span",{className:"truncate text-sm font-medium text-white",children:"Guide the agent"})]}),m.jsx(U_,{className:"h-4 w-4 shrink-0 text-[#777]"})]})}function w_({label:e,active:t,onSelect:r}){return m.jsx("button",{type:"button",role:"option","aria-selected":t,onMouseDown:a=>{a.preventDefault(),r()},className:Mr("block w-full truncate px-3 py-1.5 text-left text-xs transition-colors hover:bg-white/[0.06]",t?"text-white":"text-[#aaa]"),children:e})}const WU={completed:"bg-emerald-400",running:"bg-blue-400",waiting:"bg-yellow-400",stopped:"bg-[#888]",crashed:"bg-red-400",failed:"bg-red-400"},JU=80;function eH({open:e,agent:t,events:r,steerable:a,onClose:s}){const o=ee.useRef(null),c=ee.useRef(!1),[d,f]=ee.useState(e),[h,p]=ee.useState(e?"open":"closed"),[g,y]=ee.useState(!1),b=ee.useRef(t);ee.useEffect(()=>{t&&(b.current=t)},[t]);const _=t??b.current;ee.useEffect(()=>{if(e){f(!0),p("open");return}p("closed");const S=setTimeout(()=>f(!1),140);return()=>clearTimeout(S)},[e]),ee.useEffect(()=>{if(!d){y(!1);return}const S=requestAnimationFrame(()=>y(!0));return()=>cancelAnimationFrame(S)},[d]);const E=ee.useCallback(()=>{const S=o.current;S&&(c.current=S.scrollHeight-S.scrollTop-S.clientHeight{const S=o.current;!S||!c.current||requestAnimationFrame(()=>{S.scrollTo({top:S.scrollHeight,behavior:"smooth"})})},[r]),ee.useEffect(()=>{if(!d)return;const S=k=>{k.key==="Escape"&&s()};document.addEventListener("keydown",S);const w=document.body.style.overflow;return document.body.style.overflow="hidden",()=>{document.removeEventListener("keydown",S),document.body.style.overflow=w}},[d,s]),!d||!_?null:m.jsx("div",{"data-state":h,className:"agent-modal fixed inset-0 z-50 flex items-center justify-center bg-black/80 p-4 sm:p-8",onClick:s,role:"dialog","aria-modal":"true","aria-label":`Agent ${_.name}`,children:m.jsxs("div",{className:"relative flex h-[60vh] w-[calc(100vw-4rem)] max-w-6xl flex-col overflow-hidden rounded-xl border border-[#222] bg-[#0a0a0a] shadow-2xl",onClick:S=>S.stopPropagation(),children:[m.jsxs("div",{className:"flex items-center justify-between gap-3 border-b border-[#222] px-5 py-3.5",children:[m.jsxs("div",{className:"flex min-w-0 items-center gap-2",children:[m.jsx("span",{className:`h-2 w-2 flex-shrink-0 rounded-full ${WU[_.status]??"bg-[#888]"}`}),m.jsx("span",{className:"truncate text-sm font-semibold text-white",children:_.name}),m.jsx("span",{className:"flex-shrink-0 font-mono text-xs text-[#555]",children:_.id})]}),m.jsx("button",{type:"button",onClick:s,"aria-label":"Close",className:"flex-shrink-0 rounded-md p-1 text-[#888] transition-colors hover:bg-[#1a1a1a] hover:text-white",children:m.jsx(Sp,{className:"h-4 w-4"})})]}),m.jsx("div",{ref:o,onScroll:E,className:"flex-1 overflow-y-auto p-5",children:g&&m.jsx(DU,{agent:_,events:r,showHeader:!1})}),a&&m.jsx("div",{className:"border-t border-[#222] px-5 py-3",children:m.jsx(E2,{agents:[_],fixedAgentId:_.id,className:"mt-0"})})]})})}var N2={color:void 0,size:void 0,className:void 0,style:void 0,attr:void 0},E_=da.createContext&&da.createContext(N2),tH=["attr","size","title"];function nH(e,t){if(e==null)return{};var r,a,s=rH(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;ada.createElement(t.tag,Fu({key:r},t.attr),S2(t.child)))}function vg(e){return t=>da.createElement(lH,Pu({attr:Fu({},e.attr)},t),S2(e.child))}function lH(e){var t=r=>{var a=e.attr,s=e.size,o=e.title,c=nH(e,tH),d=s||r.size||"1em",f;return r.className&&(f=r.className),e.className&&(f=(f?f+" ":"")+e.className),da.createElement("svg",Pu({stroke:"currentColor",fill:"currentColor",strokeWidth:"0"},r.attr,a,c,{className:f,style:Fu(Fu({color:e.color||r.color},r.style),e.style),height:d,width:d,xmlns:"http://www.w3.org/2000/svg"}),o&&da.createElement("title",null,o),e.children)};return E_!==void 0?da.createElement(E_.Consumer,null,r=>t(r)):t(N2)}function oH(e){return vg({attr:{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},child:[{tag:"circle",attr:{cx:"5",cy:"6",r:"3"},child:[]},{tag:"path",attr:{d:"M5 9v12"},child:[]},{tag:"circle",attr:{cx:"19",cy:"18",r:"3"},child:[]},{tag:"path",attr:{d:"m15 9-3-3 3-3"},child:[]},{tag:"path",attr:{d:"M12 6h5a2 2 0 0 1 2 2v7"},child:[]}]})(e)}function cH(e){return vg({attr:{viewBox:"0 0 16 16",fill:"currentColor"},child:[{tag:"path",attr:{d:"M15 4.95703C15 4.58711 14.8563 4.24054 14.5949 3.97992L12.0096 1.39234C11.4879 0.86922 10.5788 0.86922 10.0571 1.39234L8 3.45119V3.32321C8 2.55068 7.37187 1.922 6.6 1.922H2.4C1.62813 1.922 1 2.55068 1 3.32321V13.5988C1 14.3713 1.62813 15 2.4 15H12.6667C13.4385 15 14.0667 14.3713 14.0667 13.5988V9.39514C14.0667 8.62261 13.4385 7.99393 12.6667 7.99393H12.5379L14.5949 5.93508C14.8553 5.67445 15 5.32602 15 4.95703ZM2.4 2.85521H6.6C6.85667 2.85521 7.06667 3.06446 7.06667 3.32228V7.99299H1.93333V3.32228C1.93333 3.06446 2.14333 2.85521 2.4 2.85521ZM1.93333 13.5979V8.92714H7.06667V14.0649H2.4C2.14333 14.0649 1.93333 13.8547 1.93333 13.5979ZM13.1333 9.39421V13.5979C13.1333 13.8547 12.9233 14.0649 12.6667 14.0649H8V8.92714H12.6667C12.9233 8.92714 13.1333 9.13638 13.1333 9.39421ZM8 7.99299V6.46287L9.5288 7.99299H8ZM13.9351 5.2737L11.3488 7.86221C11.1789 8.03223 10.8859 8.03223 10.716 7.86221L8.12973 5.2737C8.0448 5.18963 7.99813 5.07753 7.99813 4.95796C7.99813 4.83839 8.0448 4.7263 8.12973 4.64129L10.716 2.05278C10.8009 1.96777 10.9129 1.92106 11.0324 1.92106C11.1519 1.92106 11.2639 1.96777 11.3488 2.05278L13.9351 4.64129C14.02 4.72536 14.0667 4.83746 14.0667 4.95703C14.0667 5.0766 14.02 5.1887 13.9351 5.2737Z"},child:[]}]})(e)}function k2(e){return vg({attr:{viewBox:"0 0 512 512"},child:[{tag:"path",attr:{fill:"none",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"32",d:"M431 320.6c-1-3.6 1.2-8.6 3.3-12.2a34 34 0 0 1 2.1-3.1A162 162 0 0 0 464 215c.3-92.2-77.5-167-173.7-167-83.9 0-153.9 57.1-170.3 132.9a160.7 160.7 0 0 0-3.7 34.2c0 92.3 74.8 169.1 171 169.1 15.3 0 35.9-4.6 47.2-7.7s22.5-7.2 25.4-8.3a26.4 26.4 0 0 1 9.3-1.7 26 26 0 0 1 10.1 2l56.7 20.1a13.5 13.5 0 0 0 3.9 1 8 8 0 0 0 8-8 13 13 0 0 0-.5-2.7z"},child:[]},{tag:"path",attr:{fill:"none",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"32",d:"M66.46 232a146.23 146.23 0 0 0 6.39 152.67c2.31 3.49 3.61 6.19 3.21 8s-11.93 61.87-11.93 61.87a8 8 0 0 0 2.71 7.68A8.17 8.17 0 0 0 72 464a7.3 7.3 0 0 0 2.91-.6l56.21-22a15.7 15.7 0 0 1 12 .2c18.94 7.38 39.88 12 60.83 12A159.2 159.2 0 0 0 284 432.11"},child:[]}]})(e)}const uH=[{icon:LC,label:"PR security reviews"},{icon:_T,label:"Attack surface monitoring"},{icon:zT,label:"Real-time threat intelligence"},{icon:eC,label:"Scheduled pentesting"},{icon:RT,label:"One-click autofix"},{icon:V_,label:"Jira, Linear & Slack integrations"}];function dH({open:e,onClose:t,description:r,source:a="sidebar"}){const[s,o]=ee.useState(e),[c,d]=ee.useState(e?"open":"closed");return ee.useEffect(()=>{if(e){o(!0),d("open");return}d("closed");const f=setTimeout(()=>o(!1),200);return()=>clearTimeout(f)},[e]),ee.useEffect(()=>{if(!s)return;const f=p=>{p.key==="Escape"&&t()};document.addEventListener("keydown",f);const h=document.body.style.overflow;return document.body.style.overflow="hidden",()=>{document.removeEventListener("keydown",f),document.body.style.overflow=h}},[s,t]),s?m.jsx("div",{"data-state":c,className:"dialog-overlay fixed inset-0 z-50 flex items-center justify-center bg-black/80 p-4",onClick:t,role:"dialog","aria-modal":"true","aria-label":"Upgrade your plan",children:m.jsxs("div",{"data-state":c,className:"dialog-panel relative w-full max-w-md rounded-2xl border border-[#222] bg-black p-6 shadow-lg sm:rounded-lg",onClick:f=>f.stopPropagation(),children:[m.jsx("button",{type:"button",onClick:t,"aria-label":"Close",className:"absolute right-4 top-4 rounded-md p-1 text-[#888] transition-colors hover:bg-[#1a1a1a] hover:text-white",children:m.jsx(Sp,{className:"h-4 w-4"})}),m.jsxs("div",{children:[m.jsx("h2",{className:"text-lg text-white",children:"Available in Strix Cloud"}),r&&m.jsx("p",{className:"mt-2 text-base leading-relaxed text-[#e5e5e5]",children:r})]}),m.jsxs("div",{className:"space-y-4 pt-4",children:[m.jsxs("div",{className:"rounded-xl border border-[#333] bg-[#0a0a0a] p-4 sm:rounded-lg",children:[m.jsxs("div",{className:"mb-3 flex items-center gap-2",children:[m.jsx(Fm,{className:"h-4 w-4 text-blue-400"}),m.jsx("span",{className:"text-sm font-medium text-white",children:"Strix Cloud also includes"})]}),m.jsx("ul",{className:"space-y-2 text-sm text-[#888]",children:uH.map(f=>m.jsxs("li",{className:"flex items-center gap-2",children:[m.jsx(f.icon,{className:"h-3.5 w-3.5 text-[#555]"}),f.label]},f.label))})]}),m.jsxs("div",{className:"flex flex-col gap-2",children:[m.jsxs("a",{href:ha(Yu,"upgrade_try_free"),target:"_blank",rel:"noopener noreferrer",onClick:()=>jr("upgrade_try_free",a),className:"flex h-10 w-full items-center justify-center gap-2 rounded-lg bg-white px-4 text-sm font-semibold text-black transition-colors hover:bg-neutral-200",children:["Open Strix Cloud",m.jsx(oy,{className:"h-3.5 w-3.5"})]}),m.jsxs("a",{href:ha($T,"upgrade_view_plans"),target:"_blank",rel:"noopener noreferrer",onClick:()=>jr("upgrade_view_plans",a),className:"flex h-9 w-full items-center justify-center gap-1.5 rounded-lg border border-[#333] px-4 text-sm font-medium text-[#888] transition-colors hover:border-[#555] hover:text-white",children:["Learn more",m.jsx(oy,{className:"h-3 w-3"})]})]})]})]})}):null}const Hm=160,$m=260,io=400,fH=140,S_="strix_viewer_sidebar_width",k_="strix_viewer_sidebar_collapsed";function hH(e,t){try{const r=localStorage.getItem(e),a=r?parseInt(r,10):NaN;return Number.isFinite(a)?a:t}catch{return t}}function mH({view:e,onSelectView:t,issuesCount:r,agentCount:a,runCount:s,finished:o,verified:c,email:d,onOpenEmail:f,onOpenHistory:h,onForget:p}){var z;const[g,y]=ee.useState(()=>{const V=hH(S_,$m);return Math.min(io,Math.max(Hm,V))}),[b,_]=ee.useState(()=>{try{return localStorage.getItem(k_)==="1"}catch{return!1}}),[E,S]=ee.useState(!1),[w,k]=ee.useState(!1),[N,M]=ee.useState(null),B=ee.useRef(null),R=(V,P)=>{jr(V,"sidebar"),M(P)},U=ee.useCallback(V=>{y(V);try{localStorage.setItem(S_,String(V))}catch{}},[]),I=ee.useCallback(V=>{_(V);try{localStorage.setItem(k_,V?"1":"0")}catch{}},[]),X=ee.useCallback(()=>{I(!1),U($m)},[I,U]),j=ee.useCallback(V=>{V.preventDefault(),S(!0)},[]);return ee.useEffect(()=>{if(!E||b)return;const V=T=>{const $=T.clientX;$>=Hm&&$<=io?y($):$>io&&y(io)},P=T=>{const $=T.clientX;${window.removeEventListener("mousemove",V),window.removeEventListener("mouseup",P)}},[E,b,I,U]),ee.useEffect(()=>{if(!w)return;const V=P=>{B.current&&!B.current.contains(P.target)&&k(!1)};return document.addEventListener("mousedown",V),()=>document.removeEventListener("mousedown",V)},[w]),m.jsxs(m.Fragment,{children:[b&&m.jsx("div",{className:"fixed left-0 top-0 z-40 hidden h-full w-4 cursor-pointer transition-colors hover:bg-[rgba(255,255,255,0.08)] lg:block",onClick:X,title:"Expand sidebar"}),m.jsxs("aside",{className:Mr("sticky top-0 z-20 hidden h-screen flex-shrink-0 flex-col overflow-hidden border-r border-[rgba(255,255,255,0.08)] bg-black lg:flex",!E&&"transition-[width] duration-200 ease-out"),style:{width:b?0:g},children:[m.jsx("header",{className:"relative flex flex-col gap-1 pt-1 min-w-[160px]",children:m.jsx("div",{className:"flex flex-row py-1 px-2",children:m.jsxs("div",{className:"flex h-10 w-full flex-row items-center",children:[m.jsxs("a",{href:ha("https://app.strix.ai","logo"),target:"_blank",rel:"noopener noreferrer",onClick:()=>jr("logo","sidebar"),className:"flex flex-1 flex-row items-center gap-2 rounded-md py-2 pl-2.5 pr-1 min-w-0 transition-colors hover:bg-[rgba(255,255,255,0.06)]",title:"Open Strix Cloud",children:[m.jsx("span",{className:"flex flex-shrink-0 items-center justify-center rounded-full bg-gradient-to-br from-emerald-400 to-cyan-500",style:{width:20,height:20},children:m.jsx("span",{className:"text-[10px] font-semibold text-white",children:"S"})}),m.jsxs("span",{className:"flex flex-1 flex-row items-center gap-2 min-w-0",children:[m.jsx("span",{className:"truncate min-w-0 text-[14px] font-medium text-[#ededed]",children:"Strix"}),m.jsx("span",{className:"flex h-5 flex-shrink-0 items-center rounded px-2 text-[11px] font-medium text-[#888] bg-[rgba(255,255,255,0.08)]",children:"Local"})]})]}),m.jsx("a",{href:ha("https://app.strix.ai","logo"),target:"_blank",rel:"noopener noreferrer",onClick:()=>jr("logo","sidebar"),className:"flex flex-none items-center rounded-md px-1.5 py-2 transition-colors hover:bg-[rgba(255,255,255,0.06)]","aria-label":"Open Strix Cloud",children:m.jsx(cC,{className:"h-4 w-4 text-[#666]"})})]})})}),m.jsx("nav",{className:"relative min-w-[160px] flex-1 overflow-y-auto overflow-x-clip scrollbar-thin pb-10 pt-2",children:m.jsxs("div",{className:"relative flex flex-col gap-px px-2",children:[m.jsx(yi,{icon:m.jsx(pH,{}),label:"Pentest Overview",active:e==="overview",onClick:()=>t("overview")}),m.jsx(yi,{icon:m.jsx(Nu,{className:"h-4 w-4"}),label:"Issues",count:r>0?r:void 0,active:e==="issues",onClick:()=>t("issues")}),a>0&&m.jsx(yi,{icon:m.jsx(Oo,{className:"h-4 w-4"}),label:"Agents",count:a,active:e==="agents",onClick:()=>t("agents")}),m.jsx(yi,{icon:m.jsx(Ys,{className:"h-4 w-4"}),label:"Past runs",count:s>0?s:void 0,active:e==="history",onClick:h}),o&&m.jsx(yi,{icon:m.jsx(Np,{className:"h-4 w-4"}),label:"Export report",active:e==="email",onClick:f}),m.jsx(yi,{icon:m.jsx(k2,{className:"h-4 w-4"}),label:"Feedback & support",active:e==="feedback",onClick:()=>t("feedback")}),m.jsx("hr",{className:"mx-0 my-1 h-px w-full border-0 bg-[rgba(255,255,255,0.08)]"}),m.jsx(yi,{icon:m.jsx(oH,{className:"h-4 w-4"}),label:"PR Security Reviews",active:!1,onClick:()=>R("pr_reviews","Strix reviews every pull request and flags exploitable changes before they merge.")}),m.jsx(yi,{icon:m.jsx(cH,{className:"h-4 w-4"}),label:"Integrations",active:!1,onClick:()=>R("integrations","Sync findings to Jira, Linear, and Slack so fixes happen where your team already works.")}),m.jsx(yi,{icon:m.jsx(MT,{className:"h-4 w-4"}),label:"Members",active:!1,onClick:()=>R("members","Invite your team, set roles, and share findings and run history across your org.")})]})}),m.jsx("section",{className:"flex min-w-[160px] flex-col gap-0.5",ref:B,children:m.jsxs("div",{className:"relative p-2",children:[c&&d?m.jsxs("button",{onClick:()=>k(V=>!V),className:"relative flex w-full cursor-pointer items-center gap-2 rounded-md bg-transparent px-2.5 py-2 transition-colors hover:bg-[rgba(255,255,255,0.06)]",children:[m.jsx("span",{className:"flex flex-shrink-0 items-center justify-center rounded-full bg-gradient-to-br from-emerald-400 to-cyan-500",style:{width:20,height:20},children:m.jsx("span",{className:"text-[9px] font-semibold text-white",children:((z=d[0])==null?void 0:z.toUpperCase())||"U"})}),m.jsxs("span",{className:"flex min-w-0 flex-1 flex-col text-left",children:[m.jsx("span",{className:"truncate text-[13px] font-medium text-[#ededed]",children:d}),m.jsx("span",{className:"truncate text-[11px] text-[#555]",children:"Linked to this machine"})]})]}):m.jsxs("div",{className:"flex items-center gap-2 rounded-md px-2.5 py-2",children:[m.jsx("span",{className:"flex flex-shrink-0 items-center justify-center rounded-full bg-gradient-to-br from-emerald-400 to-cyan-500",style:{width:20,height:20},children:m.jsx("span",{className:"text-[9px] font-semibold text-white",children:"S"})}),m.jsx("span",{className:"flex min-w-0 flex-1 flex-col text-left",children:m.jsx("span",{className:"truncate text-[13px] font-medium text-[#ededed]",children:"Local viewer"})})]}),w&&c&&d&&m.jsxs("div",{className:"absolute bottom-full left-2 right-2 z-50 mb-1 overflow-hidden rounded-lg border border-[#333] bg-black shadow-xl",children:[m.jsxs("div",{className:"border-b border-[#333] px-3 py-2",children:[m.jsx("p",{className:"truncate text-[13px] font-medium text-white",children:"Linked email"}),m.jsx("p",{className:"truncate text-[11px] text-[#666]",children:d})]}),m.jsxs("button",{onClick:()=>{k(!1),p()},className:"flex w-full items-center gap-2 px-3 py-2 text-[13px] text-[#888] transition-colors hover:bg-[rgba(255,255,255,0.06)] hover:text-red-400",children:[m.jsx(WC,{className:"h-4 w-4"}),"Forget this email"]})]})]})}),m.jsx("div",{className:"group absolute right-0 top-0 z-30 h-full w-1 cursor-col-resize",onMouseDown:j,children:m.jsx("div",{className:Mr("absolute right-0 top-0 h-full w-px bg-[rgba(255,255,255,0.08)] transition-all duration-100",E?"w-0.5 bg-[rgba(255,255,255,0.3)]":"group-hover:bg-[rgba(255,255,255,0.2)]")})})]}),E&&m.jsx("div",{className:"fixed inset-0 z-10 cursor-col-resize"}),m.jsx(dH,{open:N!==null,description:N??"",source:"sidebar",onClose:()=>M(null)})]})}function yi({icon:e,label:t,active:r,onClick:a,count:s}){return m.jsxs("button",{onClick:a,className:Mr("group flex h-9 w-full origin-left flex-row items-center rounded-md transition-colors",r?"bg-[rgba(255,255,255,0.12)] text-white":"text-[#888] hover:bg-[rgba(255,255,255,0.06)] hover:text-[#ededed]"),children:[m.jsx("div",{className:"grid flex-none place-content-center",style:{width:36,height:36},children:e}),m.jsx("span",{className:"min-w-0 flex-1 truncate text-left text-[14px] font-medium",children:t}),s!=null&&m.jsx("span",{className:"mr-2 flex-none rounded-full border border-white/10 px-2 py-0.5 text-[10px] tabular-nums leading-none text-[#777]",children:s})]})}function pH(){return m.jsx("svg",{style:{width:16,height:16,color:"currentcolor"},viewBox:"0 0 16 16",fill:"currentColor",children:m.jsx("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M2.5 5.5V2.5H5.5V5.5H2.5ZM1 2C1 1.44772 1.44772 1 2 1H6C6.55228 1 7 1.44772 7 2V6C7 6.55228 6.55228 7 6 7H2C1.44772 7 1 6.55228 1 6V2ZM2.5 13.5V10.5H5.5V13.5H2.5ZM1 10C1 9.44772 1.44772 9 2 9H6C6.55228 9 7 9.44772 7 10V14C7 14.5523 6.55228 15 6 15H2C1.44772 15 1 14.5523 1 14V10ZM10.5 2.5V5.5H13.5V2.5H10.5ZM10 1C9.44772 1 9 1.44772 9 2V6C9 6.55228 9.44772 7 10 7H14C14.5523 7 15 6.55228 15 6V2C15 1.44772 14.5523 1 14 1H10ZM10.5 13.5V10.5H13.5V13.5H10.5ZM9 10C9 9.44772 9.44772 9 10 9H14C14.5523 9 15 9.44772 15 10V14C15 14.5523 14.5523 15 14 15H10C9.44772 15 9 14.5523 9 14V10Z"})})}const C_={work_email_required:"Please use your work email, not a personal one.",rate_limited:"Too many requests. Wait a minute and try again.",invalid_email:"That email does not look right. Check it and try again.",unavailable:"The email service is unavailable right now. Try again shortly."},gH=new Set(["gmail.com","googlemail.com","yahoo.com","ymail.com","outlook.com","hotmail.com","live.com","icloud.com","me.com","aol.com","proton.me","protonmail.com","gmx.com","mail.com"]);function xH({onVerified:e}){const[t,r]=ee.useState("email"),[a,s]=ee.useState(""),[o,c]=ee.useState(""),[d,f]=ee.useState(!1),[h,p]=ee.useState(null),[g,y]=ee.useState(null),b=async()=>{const E=a.trim();if(!E){p("Enter your email to continue.");return}const S=E.slice(E.lastIndexOf("@")+1).toLowerCase();if(gH.has(S)){Tr("work_email_required"),p(C_.work_email_required);return}f(!0),p(null);const w=await _2(E);f(!1),w.ok?(Tr("email_submitted",{purpose:"verify"}),y(`We sent a 6-digit code to ${E}.`),r("code")):(w.error==="work_email_required"&&Tr("work_email_required"),p(C_[w.error]??"Could not send a code. Try again."))},_=async()=>{const E=o.trim();if(E.length<4){p("Enter the 6-digit code from your email.");return}f(!0),p(null);const S=await w2(a.trim(),E);if(f(!1),!S.verified){p("That code did not match. Check it and try again.");return}Tr("email_verified",{purpose:"verify"}),e()};return m.jsxs("div",{className:"mx-auto mt-5 max-w-sm text-left",children:[h&&m.jsxs("div",{className:"mb-3 flex items-start gap-2 rounded-lg border border-red-500/30 bg-red-500/5 px-3 py-2",children:[m.jsx(Gu,{className:"mt-0.5 h-4 w-4 flex-shrink-0 text-red-400","aria-hidden":"true"}),m.jsx("p",{className:"text-xs text-red-300",children:h})]}),g&&!h&&m.jsx("p",{className:"mb-3 text-xs text-[#888]",children:g}),t==="email"?m.jsxs("form",{className:"space-y-3",onSubmit:E=>{E.preventDefault(),b()},children:[m.jsxs("label",{className:"block",children:[m.jsx("span",{className:"mb-1.5 block text-xs text-[#888]",children:"Your work email"}),m.jsx("input",{type:"email",autoFocus:!0,value:a,onChange:E=>s(E.target.value),placeholder:"you@company.com",className:"w-full rounded-lg bg-black px-3 py-2.5 text-sm text-white outline-none transition-colors focus:border-[#444]",style:{border:"1px solid #2a2a2a"}}),m.jsx("span",{className:"mt-1.5 block text-[11px] text-[#666]",children:"Use your work email."})]}),m.jsxs("button",{type:"submit",disabled:d,className:"flex w-full cursor-pointer items-center justify-center gap-2 rounded-lg bg-white px-4 py-2.5 text-sm font-semibold text-black transition-opacity hover:opacity-90 disabled:opacity-60",children:[d&&m.jsx(Ps,{className:"h-4 w-4 animate-spin","aria-hidden":"true"}),"Send me a code"]})]}):m.jsxs("form",{className:"space-y-3",onSubmit:E=>{E.preventDefault(),_()},children:[m.jsxs("label",{className:"block",children:[m.jsx("span",{className:"mb-1.5 block text-xs text-[#888]",children:"6-digit code"}),m.jsx("input",{inputMode:"numeric",autoFocus:!0,value:o,onChange:E=>c(E.target.value.replace(/\D/g,"").slice(0,6)),placeholder:"123456",className:"w-full rounded-lg bg-black px-3 py-2.5 text-center text-lg font-mono tracking-[0.4em] text-white outline-none transition-colors focus:border-[#444]",style:{border:"1px solid #2a2a2a"}})]}),m.jsxs("button",{type:"submit",disabled:d,className:"flex w-full cursor-pointer items-center justify-center gap-2 rounded-lg bg-white px-4 py-2.5 text-sm font-semibold text-black transition-opacity hover:opacity-90 disabled:opacity-60",children:[d&&m.jsx(Ps,{className:"h-4 w-4 animate-spin","aria-hidden":"true"}),"Verify"]}),m.jsx("button",{type:"button",onClick:()=>{r("email"),p(null),y(null)},className:"w-full cursor-pointer text-center text-xs text-[#666] transition-colors hover:text-[#aaa]",children:"Use a different email"})]})]})}const bH=[{key:"critical",dot:"bg-red-500",text:"text-red-500"},{key:"high",dot:"bg-orange-500",text:"text-orange-500"},{key:"medium",dot:"bg-yellow-500",text:"text-yellow-500"},{key:"low",dot:"bg-blue-500",text:"text-blue-500"}];function yH({counts:e}){const t=bH.filter(r=>e[r.key]>0);return t.length===0?m.jsx("span",{className:"text-xs text-[#555]",children:"No findings"}):m.jsx("div",{className:"flex items-center gap-3",children:t.map(r=>m.jsxs("div",{className:"flex items-center gap-1.5",children:[m.jsx("span",{className:`h-2 w-2 rounded-full ${r.dot}`,"aria-hidden":"true"}),m.jsx("span",{className:`text-xs tabular-nums ${r.text}`,children:e[r.key]})]},r.key))})}function vH(e){if(!e)return null;const t=e.trim().replace(" UTC","Z").replace(" ","T"),r=new Date(t);return Number.isNaN(r.getTime())?null:r.toLocaleString(void 0,{month:"short",day:"numeric",hour:"numeric",minute:"2-digit"})}function T_(e){if(!e)return null;const t=e.trim().replace(" UTC","Z").replace(" ","T"),r=new Date(t);if(Number.isNaN(r.getTime()))return null;const a=Date.now()-r.getTime(),s=Math.floor(a/6e4);if(s<1)return"just now";if(s<60)return`${s}m ago`;const o=Math.floor(s/60);if(o<24)return`${o}h ago`;const c=Math.floor(o/24);return c<7?`${c}d ago`:vH(e)}function _H({runs:e,activeRun:t,onSelectRun:r,onVerified:a}){const s=(e==null?void 0:e.count)??0,[o,c]=ee.useState(!1);return!e||e.locked?m.jsxs("div",{className:"rounded-xl border border-[#222] bg-[rgba(255,255,255,0.02)] p-8 text-center",children:[m.jsx("div",{className:"mx-auto mb-4 flex h-11 w-11 items-center justify-center rounded-xl",style:{border:"1px solid #2a2a2a",background:"rgba(255,255,255,0.04)"},children:m.jsx(Ys,{className:"h-5 w-5 text-[#888]","aria-hidden":"true"})}),m.jsx("h2",{className:"text-base font-semibold text-white",children:"Browse every run on this machine"}),m.jsxs("p",{className:"mx-auto mt-1.5 max-w-md text-sm text-[#888]",children:["You have ",s," past ",s===1?"run":"runs"," on this machine."]}),o?m.jsxs(m.Fragment,{children:[m.jsx("p",{className:"mx-auto mt-3 max-w-sm text-xs text-[#666]",children:"Verify your email with a one-time code to unlock the full history."}),m.jsx(xH,{onVerified:a})]}):m.jsx("button",{onClick:()=>{jr("history_unlock","past_runs"),c(!0)},className:"mt-4 cursor-pointer rounded-lg bg-white px-4 py-2 text-sm font-semibold text-black transition-opacity hover:opacity-90",children:"View runs"}),m.jsxs("p",{className:"mt-4 flex items-center justify-center gap-1.5 text-xs text-[#555]",children:[m.jsx(K_,{className:"h-3.5 w-3.5","aria-hidden":"true"}),"Or open one from the CLI with"," ",m.jsx("code",{className:"font-mono text-[#888]",children:"strix view "})]})]}):e.runs.length===0?m.jsx("div",{className:"rounded-xl border border-[#222] bg-[rgba(255,255,255,0.02)] p-8 text-center text-sm text-[#888]",children:"No past runs found on this machine yet."}):m.jsx("div",{className:"space-y-2",children:e.runs.map(d=>{const f=d.name===t,h=T_(d.start_time)??T_(d.end_time),p=yo(d.target,d.name);return m.jsxs("button",{onClick:()=>r(d.name),className:`animate-card-in group flex w-full cursor-pointer items-center gap-4 rounded-lg border px-4 py-3 text-left transition-colors ${f?"border-[#444] bg-[rgba(255,255,255,0.04)]":"border-[#222] bg-[rgba(255,255,255,0.02)] hover:border-[#444]"}`,children:[m.jsxs("div",{className:"min-w-0 flex-1",children:[m.jsxs("div",{className:"flex items-center gap-2",children:[m.jsx("span",{className:"truncate text-sm font-medium text-white",children:p}),f&&m.jsx("span",{className:"rounded-full px-1.5 py-0.5 text-[10px] font-semibold uppercase tracking-wide text-emerald-400",style:{border:"1px solid rgba(16,185,129,0.3)"},children:"Active"})]}),m.jsxs("div",{className:"mt-0.5 flex flex-wrap items-center gap-x-2 gap-y-0.5 text-xs text-[#666]",children:[d.scan_mode&&m.jsx("span",{className:"capitalize",children:d.scan_mode}),d.scan_mode&&(h||d.status)&&m.jsx("span",{className:"text-[#333]",children:"·"}),h&&m.jsx("span",{children:h}),h&&d.status&&m.jsx("span",{className:"text-[#333]",children:"·"}),d.status&&m.jsx("span",{className:"capitalize",children:d.status})]})]}),m.jsx(yH,{counts:d.severity_counts}),m.jsx(sC,{className:"h-4 w-4 flex-shrink-0 text-[#555] transition-colors group-hover:text-[#aaa]","aria-hidden":"true"})]},d.name)})})}const A_={work_email_required:"Please use your work email, not a personal one.",rate_limited:"Too many requests. Wait a minute and try again.",invalid_email:"That email does not look right. Check it and try again.",unavailable:"The email service is unavailable right now. Try again shortly."},wH={forbidden:"This email was unsubscribed from Strix, so we cannot send to it.",too_large:"This report is too large to email. Try a smaller run.",unavailable:"The email service is unavailable right now. Try again shortly."},EH=new Set(["gmail.com","googlemail.com","yahoo.com","ymail.com","outlook.com","hotmail.com","live.com","icloud.com","me.com","aol.com","proton.me","protonmail.com","gmx.com","mail.com"]);function NH({activeRun:e,auth:t,purpose:r,skipDisclosure:a=!1,onAuthChanged:s,onExit:o}){const c=(t==null?void 0:t.verified)===!0,d=r==="verify",[f,h]=ee.useState(()=>d?"email":a?c?"sending":"email":"disclosure"),[p,g]=ee.useState((t==null?void 0:t.email)??""),[y,b]=ee.useState(""),[_,E]=ee.useState(!1),[S,w]=ee.useState(null),[k,N]=ee.useState(null),[M,B]=ee.useState(""),[R,U]=ee.useState(""),[I,X]=ee.useState(!1),[j,z]=ee.useState(""),V=ee.useRef(!1),P=async()=>{h("sending"),w(null);const Z=await QU(e);if(Z.ok){Tr("report_sent"),B(Z.password),U(Z.filename),h("password");return}if(Z.error==="reverify"||Z.error==="unverified"){N("Your verification expired. Enter your email to verify again."),h("email");return}w(wH[Z.error]??"Could not send the report. Try again."),h("disclosure")},T=()=>{w(null),N(null),c?P():h("email")};ee.useEffect(()=>{!d&&a&&c&&!V.current&&(V.current=!0,P())},[]);const $=async()=>{const Z=p.trim();if(!Z){w("Enter your email to continue.");return}const C=Z.slice(Z.lastIndexOf("@")+1).toLowerCase();if(EH.has(C)){Tr("work_email_required"),w(A_.work_email_required);return}E(!0),w(null);const D=await _2(Z);E(!1),D.ok?(Tr("email_submitted",{purpose:r}),N(`We sent a 6-digit code to ${Z}.`),h("code")):(D.error==="work_email_required"&&Tr("work_email_required"),w(A_[D.error]??"Could not send a code. Try again."))},O=async()=>{const Z=y.trim();if(Z.length<4){w("Enter the 6-digit code from your email.");return}E(!0),w(null);const C=await w2(p.trim(),Z);if(E(!1),!C.verified){w("That code did not match. Check it and try again.");return}Tr("email_verified",{purpose:r}),z(C.email),s(),d?o("history"):P()},H=async()=>{try{await navigator.clipboard.writeText(M),X(!0),setTimeout(()=>X(!1),1500)}catch{}},K=j||(t==null?void 0:t.email)||p.trim();return m.jsxs("div",{className:"mx-auto max-w-xl space-y-4",children:[m.jsxs("button",{onClick:()=>o(d?"history":"overview"),className:"cursor-pointer inline-flex items-center gap-1.5 text-sm text-[#888] transition-colors hover:text-white",children:[m.jsx(Ep,{className:"h-4 w-4"}),d?"Back to past runs":"Back to results"]}),m.jsxs("div",{className:"flex items-center gap-2",children:[m.jsx(Np,{className:"h-5 w-5 text-[#888]","aria-hidden":"true"}),m.jsx("h1",{className:"text-2xl font-semibold text-white",children:d?"Verify your email":"Export report to PDF"})]}),m.jsxs("div",{className:"w-full rounded-2xl bg-[rgba(255,255,255,0.02)] p-6",style:{border:"1px solid #2a2a2a"},children:[m.jsx("p",{className:"mb-4 text-xs text-[#666]",children:d?"We send a one-time code to confirm it is you.":"Verified by a one-time code sent to your email"}),S&&m.jsxs("div",{className:"mb-4 flex items-start gap-2 rounded-lg border border-red-500/30 bg-red-500/5 px-3 py-2",children:[m.jsx(Gu,{className:"mt-0.5 h-4 w-4 flex-shrink-0 text-red-400","aria-hidden":"true"}),m.jsx("p",{className:"text-xs text-red-300",children:S})]}),k&&!S&&f!=="password"&&m.jsx("p",{className:"mb-4 text-xs text-[#888]",children:k}),f==="disclosure"&&m.jsxs("div",{className:"space-y-4",children:[m.jsxs("div",{className:"space-y-2.5 rounded-lg p-3.5",style:{border:"1px solid #222",background:"rgba(255,255,255,0.02)"},children:[m.jsxs("div",{className:"flex items-start gap-2.5",children:[m.jsx(X_,{className:"mt-0.5 h-4 w-4 flex-shrink-0 text-emerald-400","aria-hidden":"true"}),m.jsxs("p",{className:"text-xs leading-relaxed text-[#aaa]",children:["We email an ",m.jsx("span",{className:"text-white",children:"encrypted PDF"}),". Nothing else leaves your machine."]})]}),m.jsxs("div",{className:"flex items-start gap-2.5",children:[m.jsx(ZC,{className:"mt-0.5 h-4 w-4 flex-shrink-0 text-[#888]","aria-hidden":"true"}),m.jsx("p",{className:"text-xs leading-relaxed text-[#aaa]",children:"Only you hold the password; Strix can't read it."})]})]}),m.jsx("button",{onClick:T,className:"w-full cursor-pointer rounded-lg bg-white px-4 py-2.5 text-sm font-semibold text-black transition-opacity hover:opacity-90",children:"Export report"}),c&&(t==null?void 0:t.email)&&m.jsxs("p",{className:"text-center text-xs text-[#666]",children:["Sending to ",t.email]})]}),f==="email"&&m.jsxs("form",{className:"space-y-4",onSubmit:Z=>{Z.preventDefault(),$()},children:[m.jsxs("label",{className:"block",children:[m.jsx("span",{className:"mb-1.5 block text-xs text-[#888]",children:"Your work email"}),m.jsx("input",{type:"email",autoFocus:!0,value:p,onChange:Z=>g(Z.target.value),placeholder:"you@company.com",className:"w-full rounded-lg bg-black px-3 py-2.5 text-sm text-white outline-none transition-colors focus:border-[#444]",style:{border:"1px solid #2a2a2a"}})]}),m.jsxs("button",{type:"submit",disabled:_,className:"flex w-full cursor-pointer items-center justify-center gap-2 rounded-lg bg-white px-4 py-2.5 text-sm font-semibold text-black transition-opacity hover:opacity-90 disabled:opacity-60",children:[_&&m.jsx(Ps,{className:"h-4 w-4 animate-spin","aria-hidden":"true"}),"Send me a code"]})]}),f==="code"&&m.jsxs("form",{className:"space-y-4",onSubmit:Z=>{Z.preventDefault(),O()},children:[m.jsxs("label",{className:"block",children:[m.jsx("span",{className:"mb-1.5 block text-xs text-[#888]",children:"6-digit code"}),m.jsx("input",{inputMode:"numeric",autoFocus:!0,value:y,onChange:Z=>b(Z.target.value.replace(/\D/g,"").slice(0,6)),placeholder:"123456",className:"w-full rounded-lg bg-black px-3 py-2.5 text-center text-lg font-mono tracking-[0.4em] text-white outline-none transition-colors focus:border-[#444]",style:{border:"1px solid #2a2a2a"}})]}),m.jsxs("button",{type:"submit",disabled:_,className:"flex w-full cursor-pointer items-center justify-center gap-2 rounded-lg bg-white px-4 py-2.5 text-sm font-semibold text-black transition-opacity hover:opacity-90 disabled:opacity-60",children:[_&&m.jsx(Ps,{className:"h-4 w-4 animate-spin","aria-hidden":"true"}),d?"Verify":"Verify and send"]}),m.jsx("button",{type:"button",onClick:()=>{h("email"),w(null),N(null)},className:"w-full cursor-pointer text-center text-xs text-[#666] transition-colors hover:text-[#aaa]",children:"Use a different email"})]}),f==="sending"&&m.jsxs("div",{className:"flex flex-col items-center gap-3 py-8",children:[m.jsx(Ps,{className:"h-6 w-6 animate-spin text-white","aria-hidden":"true"}),m.jsx("p",{className:"text-sm text-[#aaa]",children:"Generating and encrypting locally..."})]}),f==="password"&&m.jsxs("div",{className:"space-y-4",children:[m.jsxs("div",{className:"flex items-start gap-2.5 rounded-lg border border-emerald-500/30 bg-emerald-500/5 px-3 py-2.5",children:[m.jsx(Vs,{className:"mt-0.5 h-4 w-4 flex-shrink-0 text-emerald-400","aria-hidden":"true"}),m.jsxs("p",{className:"text-xs text-emerald-200",children:["Sent to ",K,". Open the attached PDF with this password."]})]}),m.jsxs("div",{children:[m.jsx("span",{className:"mb-1.5 block text-xs text-[#888]",children:"Your one-time password"}),m.jsxs("div",{className:"flex items-center gap-2 rounded-lg bg-black p-3",style:{border:"1px solid #2a2a2a"},children:[m.jsx("code",{className:"flex-1 break-all font-mono text-base text-white",children:M}),m.jsxs("button",{onClick:H,className:"flex cursor-pointer items-center gap-1 rounded-md px-2 py-1 text-xs text-[#aaa] transition-colors hover:bg-[rgba(255,255,255,0.06)] hover:text-white",style:{border:"1px solid #2a2a2a"},children:[I?m.jsx(Vs,{className:"h-3.5 w-3.5"}):m.jsx(go,{className:"h-3.5 w-3.5"}),I?"Copied":"Copy"]})]}),m.jsxs("p",{className:"mt-2 text-xs text-[#666]",children:["Save this now. Strix never stores it, so we cannot show it again. File:"," ",m.jsx("span",{className:"font-mono text-[#888]",children:R})]})]}),m.jsx("button",{onClick:()=>o("overview"),className:"w-full cursor-pointer rounded-lg px-4 py-2.5 text-sm font-semibold text-white transition-colors hover:bg-[rgba(255,255,255,0.06)]",style:{border:"1px solid #2a2a2a"},children:"Done"})]})]})]})}function la(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:{}}function ao(e){return Array.isArray(e)?e:[]}function nr(e){return typeof e=="string"&&e.trim()?e:null}function Ba(e){return typeof e=="number"&&Number.isFinite(e)?e:null}function SH(e){return e.replace(/_/g," ")}function M_(e){return e&&e.charAt(0).toUpperCase()+e.slice(1)}function kH(e){if(e==null||e<0)return"n/a";const t=Math.floor(e/3600),r=Math.floor(e%3600/60),a=e%60;return t?`${t}h ${r}m ${a}s`:r?`${r}m ${a}s`:`${a}s`}function En({label:e,children:t}){return m.jsxs("div",{className:"grid grid-cols-[7rem_1fr] gap-3 items-baseline",children:[m.jsx("dt",{className:"text-[11px] uppercase tracking-wide text-[#666]",children:e}),m.jsx("dd",{className:"min-w-0 break-words text-sm text-[#ddd]",children:t})]})}function CH({raw:e,durationSeconds:t}){const[r,a]=ee.useState(!0),s=ao(e.targets_info).map(P=>{const T=la(P),$=nr(T.original)??nr(la(T.details).target_url)??"unknown target",O=nr(T.type);return{display:$,type:O?SH(O):null}}),o=nr(e.instruction),c=M_(nr(e.scan_mode)),d=nr(e.scope_mode),f=la(e.diff_scope),h=f.active===!0,p=nr(f.mode),g=nr(e.diff_base),y=e.non_interactive===!0,b=ao(e.local_sources).map(P=>{if(typeof P=="string")return P;const T=la(P);return nr(T.source_path)??nr(T.target_path)??""}).filter(Boolean),_=M_(nr(e.status));let E=d??"auto";h&&(E+=` (diff${p?`: ${p}`:""}${g?` vs ${g}`:""})`);const S=la(e.llm_usage),w=Object.keys(S).length>0,k=ao(S.agents).map(la),N=Array.from(new Set(k.map(P=>nr(P.model)).filter(P=>!!P))),M=Ba(S.requests),B=Ba(S.input_tokens),R=Ba(la(ao(S.input_tokens_details)[0]).cached_tokens),U=Ba(S.output_tokens),I=Ba(la(ao(S.output_tokens_details)[0]).reasoning_tokens),X=Ba(S.total_tokens),j=Ba(S.cost),z=nr(e.auth_mode)==="subscription",V=(P,T)=>m.jsxs("span",{className:"text-[#666]",children:[" (",Ls(P)," ",T,")"]});return m.jsxs("div",{className:"rounded-xl border border-[#222] bg-[rgba(255,255,255,0.02)] p-5",children:[m.jsxs("button",{type:"button",onClick:()=>a(P=>!P),"aria-expanded":r,className:"flex w-full cursor-pointer items-center gap-2 text-left",children:[m.jsx(GC,{className:"h-4 w-4 text-[#888]","aria-hidden":"true"}),m.jsx("h2",{className:"text-sm font-semibold text-white",children:"Run details"}),r?m.jsx(U_,{className:"ml-auto h-4 w-4 text-[#666]","aria-hidden":"true"}):m.jsx(po,{className:"ml-auto h-4 w-4 text-[#666]","aria-hidden":"true"})]}),r&&m.jsxs("div",{className:"mt-4 grid grid-cols-1 gap-x-8 gap-y-6 md:grid-cols-2",children:[m.jsxs("section",{children:[m.jsx("h3",{className:"mb-3 text-[11px] font-semibold uppercase tracking-wide text-[#555]",children:"Configuration"}),m.jsxs("dl",{className:"space-y-2.5",children:[s.length>0&&m.jsx(En,{label:"Targets",children:m.jsx("div",{className:"space-y-1",children:s.map((P,T)=>m.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[m.jsx("span",{className:"font-mono text-[#ddd]",children:P.display}),P.type&&m.jsx("span",{className:"rounded-full border border-[#2a2a2a] px-1.5 py-0.5 text-[10px] text-[#888]",children:P.type})]},T))})}),m.jsx(En,{label:"Instruction",children:o?m.jsx("span",{className:"whitespace-pre-wrap",children:o}):m.jsx("span",{className:"text-[#666]",children:"None"})}),c&&m.jsx(En,{label:"Pentest mode",children:c}),m.jsx(En,{label:"Scope",children:E}),m.jsx(En,{label:"Mode",children:y?"Non-interactive":"Interactive"}),b.length>0&&m.jsx(En,{label:"Local sources",children:m.jsx("div",{className:"space-y-0.5 font-mono text-[#ddd]",children:b.map((P,T)=>m.jsx("div",{children:P},T))})}),_&&m.jsx(En,{label:"Status",children:_})]})]}),m.jsxs("section",{children:[m.jsx("h3",{className:"mb-3 text-[11px] font-semibold uppercase tracking-wide text-[#555]",children:"Usage & cost"}),w?m.jsxs("dl",{className:"space-y-2.5 tabular-nums",children:[m.jsx(En,{label:"Model",children:N.length?N.join(", "):"n/a"}),z&&m.jsx(En,{label:"Provider",children:m.jsx("span",{className:"inline-flex items-center gap-1.5",children:m.jsx("span",{className:"rounded-full border border-[#22c55e]/40 bg-[#22c55e]/10 px-2 py-0.5 text-[11px] text-[#22c55e]",children:"ChatGPT subscription"})})}),m.jsx(En,{label:"Run time",children:kH(t)}),M!=null&&m.jsx(En,{label:"Requests",children:Ls(M)}),B!=null&&m.jsxs(En,{label:"Input tokens",children:[Ls(B),R!=null&&V(R,"cached")]}),U!=null&&m.jsxs(En,{label:"Output tokens",children:[Ls(U),I!=null&&V(I,"reasoning")]}),X!=null&&m.jsx(En,{label:"Total tokens",children:Ls(X)}),z?m.jsxs(En,{label:"Cost",children:[m.jsx("span",{className:"text-[#22c55e]",children:"$0.00"}),m.jsx("span",{className:"text-[#666]",children:" (subscription)"})]}):j!=null&&m.jsxs(En,{label:"Cost",children:["$",j.toFixed(2)]}),k.length>0&&m.jsx(En,{label:"Agents",children:Ls(k.length)})]}):m.jsx("p",{className:"text-sm text-[#666]",children:"Not available yet."})]})]})]})}const O_="strix_viewer_trust_dismissed";function TH({message:e}){const[t,r]=ee.useState(()=>{try{return localStorage.getItem(O_)==="1"}catch{return!1}});if(t)return null;const a=()=>{try{localStorage.setItem(O_,"1")}catch{}r(!0)};return m.jsx("div",{className:"fixed bottom-3 left-3 z-[60] max-w-xs rounded-lg bg-[#0a0a0a] p-3 shadow-2xl",style:{border:"1px solid #2a2a2a"},role:"status",children:m.jsxs("div",{className:"flex gap-2.5",children:[m.jsx(X_,{className:"mt-0.5 h-4 w-4 flex-shrink-0 text-emerald-400","aria-hidden":"true"}),m.jsx("p",{className:"text-xs leading-relaxed text-[#aaa]",children:e}),m.jsx("button",{onClick:a,"aria-label":"Dismiss",className:"-mr-0.5 -mt-0.5 flex-shrink-0 cursor-pointer rounded p-0.5 text-[#666] transition-colors hover:text-white",children:m.jsx(Sp,{className:"h-3.5 w-3.5"})})]})})}const AH=5e3,R_={invalid_email:"That email doesn't look right.",invalid_message:"Please write a little more.",unavailable:"Couldn't send that just now. Try again."};function MH({defaultEmail:e,onExit:t}){const[r,a]=ee.useState(""),[s,o]=ee.useState(e??""),[c,d]=ee.useState("form"),[f,h]=ee.useState(null),p=r.trim().length>0&&s.trim().length>0&&c!=="sending",g=async()=>{if(!p)return;d("sending"),h(null);const y=await XU(r.trim(),s.trim());if(y.ok){d("sent");return}d("form"),h(R_[y.error]??R_.unavailable)};return m.jsxs("div",{className:"mx-auto max-w-xl space-y-4",children:[m.jsxs("button",{onClick:()=>t("overview"),className:"cursor-pointer inline-flex items-center gap-1.5 text-sm text-[#888] transition-colors hover:text-white",children:[m.jsx(Ep,{className:"h-4 w-4"}),"Back to results"]}),m.jsxs("div",{className:"flex items-center gap-2",children:[m.jsx(k2,{className:"h-5 w-5 text-[#888]","aria-hidden":"true"}),m.jsx("h1",{className:"text-2xl font-semibold text-white",children:"Feedback & support"})]}),m.jsx("div",{className:"w-full rounded-2xl bg-[rgba(255,255,255,0.02)] p-6",style:{border:"1px solid #2a2a2a"},children:c==="sent"?m.jsxs("div",{className:"flex items-start gap-3",children:[m.jsx(Eu,{className:"mt-0.5 h-5 w-5 flex-shrink-0 text-emerald-400","aria-hidden":"true"}),m.jsxs("div",{className:"min-w-0",children:[m.jsx("p",{className:"text-sm font-semibold text-white",children:"Thanks, we got it."}),m.jsx("p",{className:"mt-1 text-xs text-[#888]",children:"We read every message. If it needs a reply, we'll reach out to the email you gave."}),m.jsx("button",{onClick:()=>{a(""),d("form")},className:"mt-4 cursor-pointer text-xs text-[#888] transition-colors hover:text-white",children:"Send more feedback"})]})]}):m.jsxs(m.Fragment,{children:[m.jsx("p",{className:"mb-4 text-xs text-[#666]",children:"Bugs, feature requests, or anything else. Tell us what's on your mind."}),f&&m.jsxs("div",{className:"mb-4 flex items-start gap-2 rounded-lg border border-red-500/30 bg-red-500/5 px-3 py-2",children:[m.jsx(Gu,{className:"mt-0.5 h-4 w-4 flex-shrink-0 text-red-400","aria-hidden":"true"}),m.jsx("p",{className:"text-xs text-red-300",children:f})]}),m.jsxs("label",{className:"block",children:[m.jsx("span",{className:"mb-1.5 block text-xs text-[#888]",children:"Your feedback"}),m.jsx("textarea",{autoFocus:!0,value:r,maxLength:AH,onChange:y=>a(y.target.value),rows:5,placeholder:"What's working, what's not, what you'd love to see…",className:"w-full resize-y rounded-lg border border-[#2a2a2a] bg-black px-3 py-2.5 text-sm text-white outline-none transition-colors focus:border-white/50 focus:ring-2 focus:ring-white/10"})]}),m.jsxs("label",{className:"mt-4 block",children:[m.jsx("span",{className:"mb-1.5 block text-xs text-[#888]",children:"Your work email"}),m.jsx("input",{type:"email",value:s,onChange:y=>o(y.target.value),placeholder:"you@company.com",className:"w-full rounded-lg border border-[#2a2a2a] bg-black px-3 py-2.5 text-sm text-white outline-none transition-colors focus:border-white/50 focus:ring-2 focus:ring-white/10"})]}),m.jsx("button",{onClick:()=>void g(),disabled:!p,className:"mt-4 flex w-full cursor-pointer items-center justify-center gap-2 rounded-lg bg-white px-4 py-2.5 text-sm font-semibold text-black transition-opacity hover:opacity-90 disabled:opacity-60",children:c==="sending"?"Sending…":"Send feedback"})]})})]})}function OH({text:e,children:t,className:r=""}){const[a,s]=ee.useState(!1);return m.jsxs("span",{className:`relative inline-flex ${r}`,onMouseEnter:()=>s(!0),onMouseLeave:()=>s(!1),onFocus:()=>s(!0),onBlur:()=>s(!1),children:[t,a&&m.jsx("span",{role:"tooltip",className:"pointer-events-none absolute bottom-full left-1/2 z-50 mb-2 w-max max-w-[240px] -translate-x-1/2 rounded-md px-2.5 py-1.5 text-xs text-[#ddd] shadow-lg",style:{border:"1px solid #2a2a2a",background:"#0a0a0a"},children:e})]})}function C2({label:e,desc:t,slug:r,icon:a,surface:s}){return m.jsx(OH,{text:t,children:m.jsxs("a",{href:ha(Yu,r),target:"_blank",rel:"noopener noreferrer",onClick:()=>jr(r,s),className:"group inline-flex items-center gap-2 rounded-lg border border-[#222] bg-[rgba(255,255,255,0.02)] px-3 py-2 text-sm text-[#aaa] transition-colors hover:border-[#444] hover:text-white",children:[m.jsx(a,{className:"h-4 w-4 text-[#888] transition-colors group-hover:text-white","aria-hidden":"true"}),m.jsx("span",{children:e})]})})}const RH="Your findings stay on your machine. They're rendered here locally in your browser and never uploaded or stored by Strix.",j_=["critical","high","medium","low"],jH=500;function DH(){const[e,t]=ee.useState(null),[r,a]=ee.useState(null),[s,o]=ee.useState(null),[c,d]=ee.useState(null),[f,h]=ee.useState("overview"),[p,g]=ee.useState(null),[y,b]=ee.useState(null),[_,E]=ee.useState("report"),[S,w]=ee.useState(!1),[k,N]=ee.useState(!1),M=ee.useCallback(async()=>{try{g(await KU())}catch{}},[]),B=ee.useCallback(async()=>{try{b(await GU())}catch{}},[]);ee.useEffect(()=>{M(),B(),VU().then(C=>N(C.can_steer)).catch(()=>{})},[M,B]);const R=ee.useRef(!1);ee.useEffect(()=>{let C=!1,D;R.current=!1;const Y=()=>{D=setTimeout(L,jH)},L=async()=>{if(!C)try{const{summary:G,raw:q,finished:Q}=await b2(e);if(C)return;if(Q&&!R.current){R.current=!0;const te=await __(e);C||a(te);return}const[J,W]=await Promise.all([v2(e).catch(()=>({agents:[],events:[]})),y2(G.runId,e).catch(()=>[])]);if(C)return;a(te=>({summary:G,raw:q,finished:Q,transcript:J,vulnerabilities:W,reportMarkdown:(te==null?void 0:te.reportMarkdown)??null})),Y()}catch(G){if(C)return;o(G instanceof Error?G.message:"Could not load run data."),Y()}};return(async()=>{try{const G=await __(e);if(C)return;a(G),G.finished?R.current=!0:Y()}catch(G){if(C)return;o(G instanceof Error?G.message:"Could not load run data."),Y()}})(),()=>{C=!0,D&&clearTimeout(D)}},[e]);const U=ee.useMemo(()=>r?PU(r.vulnerabilities):null,[r]),I=(r==null?void 0:r.vulnerabilities.find(C=>C.id===c))??null,X=(r==null?void 0:r.transcript.agents.length)??0,j=(p==null?void 0:p.verified)===!0,z=ee.useRef(!1);ee.useEffect(()=>{z.current=!1},[e]),ee.useEffect(()=>{z.current||!r||(r.finished?(z.current=!0,h("overview")):X>0&&(z.current=!0,h("agents")))},[r,X]);const V=ee.useCallback(C=>{z.current=!0,h(C)},[]),P=ee.useCallback(C=>{t(C),d(null),a(null),o(null),z.current=!1},[]),T=ee.useCallback((C,D)=>{jr("email_report",D),E("report"),w(C),V("email")},[V]),$=ee.useCallback(()=>T(!1,"sidebar"),[T]),O=ee.useCallback(()=>T(!0,"overview"),[T]),H=ee.useCallback(()=>{B(),V("history")},[B,V]),K=ee.useCallback(async()=>{await M(),await B()},[M,B]),Z=ee.useCallback(async()=>{await ZU(),await M(),await B()},[M,B]);return m.jsxs("div",{className:"min-h-screen bg-black text-white flex",children:[m.jsx(mH,{view:f,onSelectView:C=>{d(null),C==="history"?H():V(C)},issuesCount:(r==null?void 0:r.vulnerabilities.length)??0,agentCount:X,runCount:(y==null?void 0:y.count)??0,finished:(r==null?void 0:r.finished)??!1,verified:j,email:(p==null?void 0:p.email)??null,onOpenEmail:$,onOpenHistory:H,onForget:()=>void Z()}),m.jsxs("div",{className:"flex-1 min-w-0",children:[m.jsx("div",{className:"border-b border-[#222]",children:m.jsxs("div",{className:"max-w-[88rem] mx-auto px-3 sm:px-6 py-4 flex items-center gap-1.5",children:[m.jsxs("a",{href:ha("https://app.strix.ai","logo"),target:"_blank",rel:"noopener noreferrer",onClick:()=>jr("logo","topbar"),className:"flex items-center gap-1.5 opacity-90 transition-opacity hover:opacity-100 lg:hidden",title:"Open Strix Cloud",children:[m.jsx("img",{src:"./logo.png",alt:"Strix",className:"w-10 h-8 object-cover"}),m.jsx("div",{className:"text-base text-white font-medium tracking-tight",children:"Strix"})]}),r&&m.jsx(zH,{finished:r.finished}),m.jsxs("div",{className:"ml-auto flex items-center gap-3",children:[j&&y&&!y.locked&&y.runs.length>0&&m.jsx(LH,{runs:y,activeRun:e,launchedName:yo((r==null?void 0:r.summary.targets[0])??null,(r==null?void 0:r.summary.runName)??(r==null?void 0:r.summary.runId)??"Current run"),onSelect:P}),m.jsxs("a",{href:ha(Yu,"run_in_cloud"),target:"_blank",rel:"noopener noreferrer",onClick:()=>jr("run_in_cloud","topbar"),className:"inline-flex items-center gap-1 rounded-lg bg-white px-3 py-1.5 text-xs font-semibold text-black transition-opacity hover:opacity-90",children:["Run in the cloud",m.jsx(z_,{className:"w-3 h-3","aria-hidden":"true"})]})]})]})}),m.jsxs("div",{className:"max-w-[88rem] mx-auto px-3 sm:px-6 py-8 sm:py-12 space-y-6",children:[s&&!r&&f!=="history"&&f!=="email"&&m.jsxs("div",{className:"rounded-lg px-4 py-3 flex gap-3 items-start border border-red-500/30 bg-red-500/5",children:[m.jsx(Gu,{className:"w-5 h-5 flex-shrink-0 mt-0.5 text-red-400","aria-hidden":"true"}),m.jsx("p",{className:"text-sm text-red-300",children:s})]}),m.jsx("div",{className:"animate-page-in space-y-6",children:f==="email"?m.jsx(NH,{activeRun:e,auth:p,purpose:_,skipDisclosure:S,onAuthChanged:()=>{M(),B()},onExit:C=>h(C==="history"?"history":"overview")}):f==="feedback"?m.jsx(MH,{defaultEmail:(p==null?void 0:p.email)??null,onExit:C=>h(C)}):f==="history"?m.jsxs("div",{className:"space-y-4",children:[m.jsxs("div",{className:"flex items-center gap-2",children:[m.jsx(Ys,{className:"w-5 h-5 text-[#888]","aria-hidden":"true"}),m.jsx("h1",{className:"text-2xl font-semibold text-white",children:"Past runs"})]}),m.jsx(_H,{runs:y,activeRun:e,onSelectRun:P,onVerified:()=>void K()})]}):!r&&!s?m.jsxs("div",{className:"rounded-xl border border-[#222] bg-[rgba(255,255,255,0.02)] p-10 text-center",children:[m.jsx("div",{className:"w-6 h-6 mx-auto mb-3 rounded-full border-2 border-[#333] border-t-white animate-spin"}),m.jsx("p",{className:"text-sm text-[#888]",children:"Loading run data…"})]}):r&&U?m.jsxs(m.Fragment,{children:[m.jsx(BH,{summary:r.summary}),m.jsxs("div",{className:"flex gap-5 border-b border-[#2a2a2a] lg:hidden",children:[m.jsx(Pm,{active:f==="overview",onClick:()=>V("overview"),children:"Pentest Overview"}),m.jsxs(Pm,{active:f==="issues",onClick:()=>V("issues"),children:["Issues",r.vulnerabilities.length>0?` (${r.vulnerabilities.length})`:""]}),X>0&&m.jsxs(Pm,{active:f==="agents",onClick:()=>V("agents"),children:["Agents (",X,")"]})]}),f==="overview"?m.jsx(PH,{summary:r.summary,counts:U,total:r.vulnerabilities.length,reportMarkdown:r.reportMarkdown,raw:r.raw,finished:r.finished,onOpenEmail:O}):f==="agents"&&X>0?m.jsx(FH,{run:r,canSteer:k}):I?m.jsxs("div",{className:"space-y-4",children:[m.jsxs("button",{onClick:()=>d(null),className:"cursor-pointer inline-flex items-center gap-1.5 text-sm text-[#888] hover:text-white transition-colors",children:[m.jsx(Ep,{className:"w-4 h-4"})," Back to all findings"]}),m.jsx(mD,{vulnerability:I})]}):m.jsx(UH,{vulnerabilities:r.vulnerabilities,finished:r.finished,onSelect:C=>d(C)})]}):null},`${e??"launched"}:${f}:${c??""}`)]})]}),m.jsx(TH,{message:RH})]})}function LH({runs:e,activeRun:t,launchedName:r,onSelect:a}){const[s,o]=ee.useState(!1),c=e.runs.find(f=>f.name===t),d=c?yo(c.target,c.name):r;return m.jsxs("div",{className:"relative",children:[m.jsxs("button",{onClick:()=>o(f=>!f),onBlur:()=>setTimeout(()=>o(!1),150),"aria-label":"Switch pentest",className:"flex items-center gap-2 rounded-lg border border-[#3a3a3a] bg-[rgba(255,255,255,0.05)] px-3 py-2 text-sm text-white transition-colors hover:border-[#555] hover:bg-[rgba(255,255,255,0.09)]",children:[m.jsx(Ys,{className:"h-4 w-4 flex-shrink-0 text-[#888]","aria-hidden":"true"}),m.jsx("span",{className:"flex-shrink-0 text-[#888]",children:"Pentest"}),m.jsx("span",{className:"max-w-[260px] truncate font-medium",children:d}),m.jsx(po,{className:"h-4 w-4 flex-shrink-0 text-[#aaa]","aria-hidden":"true"})]}),s&&m.jsxs("div",{className:"absolute right-0 z-50 mt-2 max-h-96 w-96 overflow-y-auto rounded-xl py-1.5 shadow-2xl",style:{border:"1px solid #3a3a3a",background:"#0a0a0a"},children:[m.jsx("div",{className:"border-b border-[#222] px-3 py-2 text-[11px] font-semibold uppercase tracking-wide text-[#666]",children:"Switch pentest"}),e.runs.map(f=>{const h=f.name===t;return m.jsxs("button",{onMouseDown:()=>a(f.name),className:`flex w-full items-center gap-2 px-3 py-2.5 text-left text-sm transition-colors hover:bg-[rgba(255,255,255,0.06)] ${h?"bg-[rgba(255,255,255,0.04)] text-white":"text-[#aaa]"}`,children:[m.jsxs("span",{className:"min-w-0 flex-1",children:[m.jsx("span",{className:"block truncate font-medium",children:yo(f.target,f.name)}),f.target&&m.jsx("span",{className:"block truncate font-mono text-xs text-[#666]",children:f.target})]}),h&&m.jsx("span",{className:"h-2 w-2 flex-shrink-0 rounded-full bg-emerald-400"})]},f.name)})]})]})}function zH({finished:e}){return e?m.jsxs("span",{className:"ml-3 inline-flex items-center gap-1.5 text-xs text-[#888]",children:[m.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-[#555]"}),"Complete"]}):m.jsxs("span",{className:"ml-3 inline-flex items-center gap-1.5 text-xs text-emerald-400",children:[m.jsxs("span",{className:"relative flex h-1.5 w-1.5",children:[m.jsx("span",{className:"absolute inline-flex h-full w-full rounded-full bg-emerald-400 opacity-75 animate-ping"}),m.jsx("span",{className:"relative inline-flex h-1.5 w-1.5 rounded-full bg-emerald-400"})]}),"Live"]})}function IH(e){if(e==null)return null;if(e<60)return`${e}s`;const t=Math.floor(e/60);return t<60?`${t}m`:`${Math.floor(t/60)}h ${t%60}m`}function BH({summary:e}){const t=IH(e.durationSeconds);return m.jsxs("div",{children:[m.jsx("h1",{className:"text-2xl font-semibold text-white",children:yo(e.targets[0]??null,e.runName??e.runId??"Pentest results")}),m.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&&m.jsx("span",{className:"font-mono text-[#aaa]",children:e.targets.join(", ")}),e.scanMode&&m.jsx(qm,{label:e.scanMode}),t&&m.jsx(qm,{label:t}),e.status&&m.jsx(qm,{label:e.status})]})]})}function qm({label:e}){return m.jsxs(m.Fragment,{children:[m.jsx("span",{className:"text-[#333]",children:"·"}),m.jsx("span",{className:"capitalize",children:e})]})}function UH({vulnerabilities:e,finished:t,onSelect:r}){const a=[...e].sort((s,o)=>j_.indexOf(s.severity)-j_.indexOf(o.severity));return a.length===0?m.jsxs("div",{className:"space-y-4",children:[m.jsx("div",{className:"rounded-xl border border-[#222] bg-[rgba(255,255,255,0.02)] p-8 text-center text-sm text-[#888]",children:t?"No findings in this run.":"No findings yet. The pentest is still running…"}),t&&m.jsxs("div",{className:"rounded-xl border border-[#222] bg-[rgba(255,255,255,0.02)] p-5",children:[m.jsx("p",{className:"text-sm font-medium text-white",children:"Stay ahead of new exposures"}),m.jsx("p",{className:"mt-0.5 mb-3 text-xs text-[#666]",children:"Attack surface monitoring catches new exposures for your org over time."}),m.jsx(C2,{label:"Attack surface monitoring",desc:"Continuous coverage for your whole org.",slug:"asm",surface:"empty_state",icon:sT})]})]}):m.jsx("div",{className:"space-y-2",children:a.map(s=>m.jsxs("button",{onClick:()=>r(s.id),className:"animate-card-in 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:[m.jsx("span",{className:`w-2.5 h-2.5 rounded-full flex-shrink-0 ${kp(s.severity)}`,"aria-hidden":"true"}),m.jsxs("span",{className:"flex-1 min-w-0",children:[m.jsx("span",{className:"block text-sm font-medium text-white truncate",children:s.title}),s.target&&m.jsx("span",{className:"block text-xs text-[#666] font-mono truncate",children:s.target})]}),m.jsx("span",{className:`text-xs font-semibold px-2 py-0.5 rounded-full border capitalize ${Z_[s.severity]}`,children:s.severity})]},s.id))})}function HH(e){return e.replace(/^\s*#{1,6}[ \t]+.*(?:\r?\n)+/,"").trimStart()}function $H(e){const t=[];let r=null;for(const a of e.split(` +`)){const s=a.match(/^#{1,6}\s+(.*)$/);if(s){const o=s[1].trim().toLowerCase();if(o===r)continue;r=o}else a.trim()!==""&&(r=null);t.push(a)}return t.join(` +`)}function qH({onOpenEmail:e}){return m.jsx("button",{onClick:e,className:"group w-full cursor-pointer rounded-xl border border-emerald-500/25 bg-emerald-500/[0.06] p-4 text-left transition-colors hover:border-emerald-500/40",children:m.jsxs("div",{className:"flex items-center gap-3",children:[m.jsx("div",{className:"flex h-9 w-9 flex-shrink-0 items-center justify-center rounded-lg",style:{border:"1px solid rgba(16,185,129,0.3)",background:"rgba(16,185,129,0.08)"},children:m.jsx(Np,{className:"h-4 w-4 text-emerald-400","aria-hidden":"true"})}),m.jsxs("div",{className:"min-w-0 flex-1",children:[m.jsx("p",{className:"text-sm font-semibold text-white",children:"Email an encrypted PDF report of this run"}),m.jsx("p",{className:"mt-0.5 text-xs text-[#888]",children:"Encrypted with a key only you can see, email verified with a one-time code before sending."})]}),m.jsx("span",{className:"flex-shrink-0 rounded-lg bg-white px-3 py-1.5 text-xs font-semibold text-black transition-opacity group-hover:opacity-90",children:"Export report to PDF"})]})})}function PH({summary:e,counts:t,total:r,reportMarkdown:a,raw:s,finished:o,onOpenEmail:c}){const d=[["Executive Summary",e.executiveSummary],["Technical Analysis",e.technicalAnalysis],["Methodology",e.methodology],["Recommendations",e.recommendations]].filter(([,f])=>!!f).map(([f,h])=>({title:f,content:HH(h)}));return m.jsxs("div",{className:"space-y-6",children:[m.jsx("div",{className:"animate-card-in",children:m.jsx(CH,{raw:s,durationSeconds:e.durationSeconds})}),r>0&&m.jsx("div",{className:"animate-card-in rounded-xl border border-[#222] bg-[rgba(255,255,255,0.02)] p-5",children:m.jsx(pD,{findings:{total:r,...t}})}),o&&m.jsx("div",{className:"animate-card-in",children:m.jsx(qH,{onOpenEmail:c})}),d.length>0?m.jsx("div",{className:"animate-card-in rounded-xl border border-[#222] bg-[rgba(255,255,255,0.02)] p-5 space-y-8",children:d.map(f=>m.jsx(oa,{title:f.title,content:f.content},f.title))}):a?m.jsx("div",{className:"animate-card-in rounded-xl border border-[#222] bg-[rgba(255,255,255,0.02)] p-5",children:m.jsx(oa,{content:$H(a)})}):r===0&&m.jsx("p",{className:"text-sm text-[#888]",children:"No summary available for this run yet."})]})}function Pm({active:e,onClick:t,children:r}){return m.jsxs("button",{onClick:t,className:`cursor-pointer relative pb-2.5 text-sm font-semibold transition-colors ${e?"text-white":"text-[#666] hover:text-white"}`,children:[r,e&&m.jsx("span",{className:"absolute bottom-0 inset-x-0 h-0.5 bg-white rounded-full"})]})}function FH({run:e,canSteer:t}){const{agents:r,events:a}=e.transcript,s=ee.useMemo(()=>jU(r,a),[r,a]),[o,c]=ee.useState(null),d=o?r.find(h=>h.id===o)??null:null,f=t&&!e.finished;return m.jsxs("div",{className:"space-y-5",children:[m.jsxs("div",{className:"rounded-xl border border-[#222] bg-[rgba(255,255,255,0.02)] p-5",children:[m.jsxs("div",{className:"flex items-center gap-2",children:[m.jsx(Oo,{className:"w-4 h-4 text-[#888]","aria-hidden":"true"}),m.jsx("h2",{className:"text-sm font-semibold text-white",children:"Agent graph"}),m.jsxs("span",{className:"text-xs text-[#666]",children:[r.length," agent",r.length===1?"":"s"]})]}),m.jsx("p",{className:"mt-1 mb-4 text-xs text-[#666]",children:"Click an agent to open its full transcript."}),m.jsx("div",{className:"h-[480px] rounded-lg border border-[#1a1a1a] overflow-hidden",children:m.jsx(i7,{agents:s,selectedAgentId:o,onSelectAgent:h=>c(h),eventsLoaded:!0,eventsEmpty:s.size===0,scanCompleted:e.finished})})]}),f&&m.jsx(E2,{agents:r}),m.jsxs("div",{className:"rounded-xl border border-[#222] bg-[rgba(255,255,255,0.02)] p-5",children:[m.jsx("p",{className:"text-sm font-semibold text-white",children:"Run this pentest with more depth"}),m.jsx("p",{className:"mt-0.5 text-xs text-[#666]",children:"Re-run this pentest on managed infra in the cloud."}),m.jsx("div",{className:"mt-3 flex flex-wrap gap-2.5",children:m.jsx(C2,{label:"Re-run in Strix Pro with more depth",desc:"Run this pentest on managed infra with more depth.",slug:"live_scan",surface:"agents",icon:uT})})]}),m.jsx(eH,{open:d!==null,agent:d,events:a,steerable:f,onClose:()=>c(null)})]})}Bk.createRoot(document.getElementById("root")).render(m.jsx(ee.StrictMode,{children:m.jsx(DH,{})})); diff --git a/strix/interface/viewer/static/assets/index-D0453ODW.css b/strix/interface/viewer/static/assets/index-D0453ODW.css new file mode 100644 index 00000000..62ebd2ef --- /dev/null +++ b/strix/interface/viewer/static/assets/index-D0453ODW.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-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-space-y-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--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;--tw-ease: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-200:oklch(90.5% .093 164.15);--color-emerald-400:oklch(76.5% .177 163.223);--color-emerald-500:oklch(69.6% .17 162.48);--color-teal-300:oklch(85.5% .138 181.071);--color-teal-400:oklch(77.7% .152 181.912);--color-cyan-400:oklch(78.9% .154 211.53);--color-cyan-500:oklch(71.5% .143 215.221);--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-neutral-200:oklch(92.2% 0 none);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-xl:36rem;--container-6xl:72rem;--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-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--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-wide:.025em;--tracking-wider:.05em;--leading-snug:1.375;--leading-relaxed:1.625;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--ease-out:cubic-bezier(0, 0, .2, 1);--animate-spin:spin 1s linear infinite;--animate-ping:ping 1s cubic-bezier(0, 0, .2, 1) infinite;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--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}.collapse{visibility:collapse}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.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)}.top-4{top:calc(var(--spacing) * 4)}.right-0{right:0}.right-2{right:calc(var(--spacing) * 2)}.right-4{right:calc(var(--spacing) * 4)}.bottom-0{bottom:0}.bottom-3{bottom:calc(var(--spacing) * 3)}.bottom-full{bottom:100%}.left-0{left:0}.left-1\/2{left:50%}.left-2{left:calc(var(--spacing) * 2)}.left-3{left:calc(var(--spacing) * 3)}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.z-\[60\]{z-index:60}.-mx-2{margin-inline:calc(var(--spacing) * -2)}.mx-0{margin-inline:0}.mx-auto{margin-inline:auto}.my-1{margin-block:var(--spacing)}.my-4{margin-block:calc(var(--spacing) * 4)}.-mt-0\.5{margin-top:calc(var(--spacing) * -.5)}.mt-0{margin-top:0}.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-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-5{margin-top:calc(var(--spacing) * 5)}.mt-10{margin-top:calc(var(--spacing) * 10)}.mt-\[1px\]{margin-top:1px}.mt-\[2px\]{margin-top:2px}.-mr-0\.5{margin-right:calc(var(--spacing) * -.5)}.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-0\.5{margin-left:calc(var(--spacing) * .5)}.ml-1{margin-left:var(--spacing)}.ml-1\.5{margin-left:calc(var(--spacing) * 1.5)}.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{display:inline}.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-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.h-11{height:calc(var(--spacing) * 11)}.h-\[30px\]{height:30px}.h-\[60vh\]{height:60vh}.h-\[72px\]{height:72px}.h-\[480px\]{height:480px}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.max-h-96{max-height:calc(var(--spacing) * 96)}.max-h-\[160px\]{max-height:160px}.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-0\.5{width:calc(var(--spacing) * .5)}.w-1{width:var(--spacing)}.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-9{width:calc(var(--spacing) * 9)}.w-10{width:calc(var(--spacing) * 10)}.w-11{width:calc(var(--spacing) * 11)}.w-28{width:calc(var(--spacing) * 28)}.w-96{width:calc(var(--spacing) * 96)}.w-\[1px\]{width:1px}.w-\[30px\]{width:30px}.w-\[180px\]{width:180px}.w-\[260px\]{width:260px}.w-\[calc\(100vw-4rem\)\]{width:calc(100vw - 4rem)}.w-full{width:100%}.w-max{width:max-content}.w-px{width:1px}.max-w-6xl{max-width:var(--container-6xl)}.max-w-\[75\%\]{max-width:75%}.max-w-\[80\%\]{max-width:80%}.max-w-\[88rem\]{max-width:88rem}.max-w-\[140px\]{max-width:140px}.max-w-\[240px\]{max-width:240px}.max-w-\[260px\]{max-width:260px}.max-w-full{max-width:100%}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.max-w-xl{max-width:var(--container-xl)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:0}.min-w-\[80px\]{min-width:80px}.min-w-\[112px\]{min-width:112px}.min-w-\[160px\]{min-width:160px}.flex-1{flex:1}.flex-none{flex:none}.flex-shrink-0,.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.origin-left{transform-origin:0}.-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.-rotate-90{rotate:-90deg}.animate-ping{animation:var(--animate-ping)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-col-resize{cursor:col-resize}.cursor-pointer{cursor:pointer}.resize{resize:both}.resize-none{resize:none}.resize-y{resize:vertical}.scrollbar-thin{scrollbar-width:thin}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-\[7rem_1fr\]{grid-template-columns:7rem 1fr}.flex-col{flex-direction:column}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.place-content-center{place-content:center}.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-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.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)}.gap-px{gap:1px}: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-2{column-gap:calc(var(--spacing) * 2)}.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-0\.5{row-gap:calc(var(--spacing) * .5)}.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)}.gap-y-6{row-gap:calc(var(--spacing) * 6)}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-white\/\[0\.04\]>:not(:last-child)){border-color:#ffffff0a}@supports (color:color-mix(in lab,red,red)){:where(.divide-white\/\[0\.04\]>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white) 4%,transparent)}}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-clip{overflow-x:clip}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.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-0{border-style:var(--tw-border-style);border-width:0}.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-\[\#3a3a3a\]{border-color:#3a3a3a}.border-\[\#22c55e\]\/40{border-color:#22c55e66}.border-\[\#222\]{border-color:#222}.border-\[\#333\]{border-color:#333}.border-\[\#444\]{border-color:#444}.border-\[\#191919\]{border-color:#191919}.border-\[rgba\(255\,255\,255\,0\.08\)\]{border-color:#ffffff14}.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\/25{border-color:#00bb7f40}@supports (color:color-mix(in lab,red,red)){.border-emerald-500\/25{border-color:color-mix(in oklab,var(--color-emerald-500) 25%,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\/10{border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.border-white\/10{border-color:color-mix(in oklab,var(--color-white) 10%,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-white\/\[0\.08\]{border-color:#ffffff14}@supports (color:color-mix(in lab,red,red)){.border-white\/\[0\.08\]{border-color:color-mix(in oklab,var(--color-white) 8%,transparent)}}.border-white\/\[0\.18\]{border-color:#ffffff2e}@supports (color:color-mix(in lab,red,red)){.border-white\/\[0\.18\]{border-color:color-mix(in oklab,var(--color-white) 18%,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-\[\#22c55e\]\/10{background-color:#22c55e1a}.bg-\[\#111\]{background-color:#111}.bg-\[\#222\]{background-color:#222}.bg-\[\#555\]{background-color:#555}.bg-\[\#888\]{background-color:#888}.bg-\[\#050505\]{background-color:#050505}.bg-\[\#252525\]{background-color:#252525}.bg-\[rgba\(255\,255\,255\,0\.02\)\]{background-color:#ffffff05}.bg-\[rgba\(255\,255\,255\,0\.3\)\]{background-color:#ffffff4d}.bg-\[rgba\(255\,255\,255\,0\.04\)\]{background-color:#ffffff0a}.bg-\[rgba\(255\,255\,255\,0\.05\)\]{background-color:#ffffff0d}.bg-\[rgba\(255\,255\,255\,0\.08\)\]{background-color:#ffffff14}.bg-\[rgba\(255\,255\,255\,0\.12\)\]{background-color:#ffffff1f}.bg-black{background-color:var(--color-black)}.bg-black\/80{background-color:#000c}@supports (color:color-mix(in lab,red,red)){.bg-black\/80{background-color:color-mix(in oklab,var(--color-black) 80%,transparent)}}.bg-blue-400{background-color:var(--color-blue-400)}.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\/5{background-color:#00bb7f0d}@supports (color:color-mix(in lab,red,red)){.bg-emerald-500\/5{background-color:color-mix(in oklab,var(--color-emerald-500) 5%,transparent)}}.bg-emerald-500\/10{background-color:#00bb7f1a}@supports (color:color-mix(in lab,red,red)){.bg-emerald-500\/10{background-color:color-mix(in oklab,var(--color-emerald-500) 10%,transparent)}}.bg-emerald-500\/\[0\.06\]{background-color:#00bb7f0f}@supports (color:color-mix(in lab,red,red)){.bg-emerald-500\/\[0\.06\]{background-color:color-mix(in oklab,var(--color-emerald-500) 6%,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-400{background-color:var(--color-red-400)}.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-transparent{background-color:#0000}.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\.03\]{background-color:#ffffff08}@supports (color:color-mix(in lab,red,red)){.bg-white\/\[0\.03\]{background-color:color-mix(in oklab,var(--color-white) 3%,transparent)}}.bg-white\/\[0\.08\]{background-color:#ffffff14}@supports (color:color-mix(in lab,red,red)){.bg-white\/\[0\.08\]{background-color:color-mix(in oklab,var(--color-white) 8%,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-400{background-color:var(--color-yellow-400)}.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)}}.bg-gradient-to-br{--tw-gradient-position:to bottom right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-emerald-400{--tw-gradient-from:var(--color-emerald-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-cyan-500{--tw-gradient-to:var(--color-cyan-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.p-0{padding:0}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:var(--spacing)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-3\.5{padding:calc(var(--spacing) * 3.5)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.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-5{padding-inline:calc(var(--spacing) * 5)}.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-2\.5{padding-block:calc(var(--spacing) * 2.5)}.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-1{padding-top:var(--spacing)}.pt-2{padding-top:calc(var(--spacing) * 2)}.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{padding-right:var(--spacing)}.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)}.pb-10{padding-bottom:calc(var(--spacing) * 10)}.pl-1\.5{padding-left:calc(var(--spacing) * 1.5)}.pl-2\.5{padding-left:calc(var(--spacing) * 2.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-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--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-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[12px\]{font-size:12px}.text-\[13px\]{font-size:13px}.text-\[14px\]{font-size:14px}.text-\[15px\]{font-size:15px}.text-\[16px\]{font-size:16px}.leading-6{--tw-leading:calc(var(--spacing) * 6);line-height:calc(var(--spacing) * 6)}.leading-\[22px\]{--tw-leading:22px;line-height:22px}.leading-none{--tw-leading:1;line-height:1}.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-\[0\.4em\]{--tw-tracking:.4em;letter-spacing:.4em}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[\#22c55e\]{color:#22c55e}.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-\[\#e5e5e5\]{color:#e5e5e5}.text-\[\#ededed\]{color:#ededed}.text-amber-400{color:var(--color-amber-400)}.text-amber-400\/70{color:#fcbb00b3}@supports (color:color-mix(in lab,red,red)){.text-amber-400\/70{color:color-mix(in oklab,var(--color-amber-400) 70%,transparent)}}.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-black{color:var(--color-black)}.text-blue-400{color:var(--color-blue-400)}.text-blue-400\/60{color:#54a2ff99}@supports (color:color-mix(in lab,red,red)){.text-blue-400\/60{color:color-mix(in oklab,var(--color-blue-400) 60%,transparent)}}.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\/60{color:#00d2ef99}@supports (color:color-mix(in lab,red,red)){.text-cyan-400\/60{color:color-mix(in oklab,var(--color-cyan-400) 60%,transparent)}}.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-200{color:var(--color-emerald-200)}.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-teal-300{color:var(--color-teal-300)}.text-teal-400{color:var(--color-teal-400)}.text-teal-400\/80{color:#00d3bdcc}@supports (color:color-mix(in lab,red,red)){.text-teal-400\/80{color:color-mix(in oklab,var(--color-teal-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}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.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{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\]{transition-property:width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.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-100{--tw-duration:.1s;transition-duration:.1s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-500{--tw-duration:.5s;transition-duration:.5s}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.\[font-variant-ligatures\:none\]{font-variant-ligatures:none}@media(hover:hover){.group-hover\:bg-\[rgba\(255\,255\,255\,0\.2\)\]:is(:where(.group):hover *){background-color:#fff3}.group-hover\:text-\[\#aaa\]:is(:where(.group):hover *){color:#aaa}.group-hover\:text-white:is(:where(.group):hover *){color:var(--color-white)}.group-hover\:opacity-90:is(:where(.group):hover *){opacity:.9}.group-hover\/code\:opacity-100:is(:where(.group\/code):hover *){opacity:1}}.placeholder\:text-\[\#444\]::placeholder{color:#444}@media(hover:hover){.hover\:border-\[\#333\]:hover{border-color:#333}.hover\:border-\[\#444\]:hover{border-color:#444}.hover\:border-\[\#555\]:hover{border-color:#555}.hover\:border-emerald-500\/40:hover{border-color:#00bb7f66}@supports (color:color-mix(in lab,red,red)){.hover\:border-emerald-500\/40:hover{border-color:color-mix(in oklab,var(--color-emerald-500) 40%,transparent)}}.hover\:border-white\/\[0\.12\]:hover{border-color:#ffffff1f}@supports (color:color-mix(in lab,red,red)){.hover\:border-white\/\[0\.12\]:hover{border-color:color-mix(in oklab,var(--color-white) 12%,transparent)}}.hover\:border-white\/\[0\.16\]:hover{border-color:#ffffff29}@supports (color:color-mix(in lab,red,red)){.hover\:border-white\/\[0\.16\]:hover{border-color:color-mix(in oklab,var(--color-white) 16%,transparent)}}.hover\:bg-\[\#1a1a1a\]:hover{background-color:#1a1a1a}.hover\:bg-\[\#2a2a2a\]:hover{background-color:#2a2a2a}.hover\:bg-\[rgba\(255\,255\,255\,0\.06\)\]:hover{background-color:#ffffff0f}.hover\:bg-\[rgba\(255\,255\,255\,0\.08\)\]:hover{background-color:#ffffff14}.hover\:bg-\[rgba\(255\,255\,255\,0\.09\)\]:hover{background-color:#ffffff17}.hover\:bg-neutral-200:hover{background-color:var(--color-neutral-200)}.hover\:bg-white\/\[0\.06\]:hover{background-color:#ffffff0f}@supports (color:color-mix(in lab,red,red)){.hover\:bg-white\/\[0\.06\]:hover{background-color:color-mix(in oklab,var(--color-white) 6%,transparent)}}.hover\:text-\[\#888\]:hover{color:#888}.hover\:text-\[\#aaa\]:hover{color:#aaa}.hover\:text-\[\#ccc\]:hover{color:#ccc}.hover\:text-\[\#ededed\]:hover{color:#ededed}.hover\:text-red-400:hover{color:var(--color-red-400)}.hover\:text-white:hover{color:var(--color-white)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-90:hover{opacity:.9}.hover\:opacity-100:hover{opacity:1}}.focus\:border-\[\#444\]:focus{border-color:#444}.focus\:border-white\/50:focus{border-color:#ffffff80}@supports (color:color-mix(in lab,red,red)){.focus\:border-white\/50:focus{border-color:color-mix(in oklab,var(--color-white) 50%,transparent)}}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-white\/10:focus{--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.focus\:ring-white\/10:focus{--tw-ring-color:color-mix(in oklab, var(--color-white) 10%, transparent)}}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-white\/20:focus-visible{--tw-ring-color:#fff3}@supports (color:color-mix(in lab,red,red)){.focus-visible\:ring-white\/20:focus-visible{--tw-ring-color:color-mix(in oklab, var(--color-white) 20%, transparent)}}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.disabled\:opacity-60:disabled{opacity:.6}@media(min-width:40rem){.sm\:rounded-lg{border-radius:var(--radius-lg)}.sm\:p-8{padding:calc(var(--spacing) * 8)}.sm\:px-6{padding-inline:calc(var(--spacing) * 6)}.sm\:py-12{padding-block:calc(var(--spacing) * 12)}}@media(min-width:48rem){.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(min-width:64rem){.lg\:sticky{position:sticky}.lg\:top-6{top:calc(var(--spacing) * 6)}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:hidden{display:none}.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}.scrollbar-thin{scrollbar-width:thin;scrollbar-color:#ffffff26 transparent}.scrollbar-thin::-webkit-scrollbar{width:6px;height:6px}.scrollbar-thin::-webkit-scrollbar-thumb{background:#ffffff26;border-radius:3px}.scrollbar-thin::-webkit-scrollbar-track{background:0 0}@keyframes page-in{0%{opacity:0;filter:blur(8px);transform:translateY(8px)}to{opacity:1;filter:blur();transform:translateY(0)}}.animate-page-in{animation:.15s ease-out page-in}@keyframes fade-in{0%{opacity:0}to{opacity:1}}.animate-fade-in{animation:.35s ease-out fade-in}@keyframes cardIn{0%{opacity:0;filter:blur(4px);transform:translateY(8px)scale(.97)}to{opacity:1;filter:blur();transform:translateY(0)scale(1)}}.animate-card-in{opacity:0;animation:.3s cubic-bezier(.16,1,.3,1) forwards cardIn}.animate-card-in:first-child{animation-delay:0s}.animate-card-in:nth-child(2){animation-delay:50ms}.animate-card-in:nth-child(3){animation-delay:.1s}.animate-card-in:nth-child(4){animation-delay:.15s}@keyframes shimmer{0%{transform:translate(-100%)}to{transform:translate(400%)}}.animate-shimmer{animation:2s infinite shimmer}@keyframes dialog-overlay-in{0%{opacity:0}to{opacity:1}}@keyframes dialog-overlay-out{0%{opacity:1}to{opacity:0}}@keyframes dialog-panel-in{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}@keyframes dialog-panel-out{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.95)}}.dialog-overlay[data-state=open]{animation:.2s dialog-overlay-in}.dialog-overlay[data-state=closed]{animation:.2s forwards dialog-overlay-out}.dialog-panel[data-state=open]{animation:.2s dialog-panel-in}.dialog-panel[data-state=closed]{animation:.2s forwards dialog-panel-out}.agent-modal[data-state=open]{animation:.14s dialog-overlay-in}.agent-modal[data-state=closed]{animation:.14s forwards dialog-overlay-out}@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-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@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}@property --tw-ease{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}@keyframes pulse{50%{opacity:.5}} diff --git a/strix/interface/viewer/static/assets/index-DS3GeJId.css b/strix/interface/viewer/static/assets/index-DS3GeJId.css deleted file mode 100644 index 945fd8ec..00000000 --- a/strix/interface/viewer/static/assets/index-DS3GeJId.css +++ /dev/null @@ -1,10 +0,0 @@ -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-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--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;--tw-ease: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-200:oklch(90.5% .093 164.15);--color-emerald-400:oklch(76.5% .177 163.223);--color-emerald-500:oklch(69.6% .17 162.48);--color-teal-300:oklch(85.5% .138 181.071);--color-teal-400:oklch(77.7% .152 181.912);--color-cyan-400:oklch(78.9% .154 211.53);--color-cyan-500:oklch(71.5% .143 215.221);--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-neutral-200:oklch(92.2% 0 none);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-xl:36rem;--container-6xl:72rem;--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-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--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-wide:.025em;--tracking-wider:.05em;--leading-snug:1.375;--leading-relaxed:1.625;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--ease-out:cubic-bezier(0, 0, .2, 1);--animate-spin:spin 1s linear infinite;--animate-ping:ping 1s cubic-bezier(0, 0, .2, 1) infinite;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--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}.collapse{visibility:collapse}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.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)}.top-4{top:calc(var(--spacing) * 4)}.right-0{right:0}.right-2{right:calc(var(--spacing) * 2)}.right-4{right:calc(var(--spacing) * 4)}.bottom-0{bottom:0}.bottom-3{bottom:calc(var(--spacing) * 3)}.bottom-full{bottom:100%}.left-0{left:0}.left-1\/2{left:50%}.left-2{left:calc(var(--spacing) * 2)}.left-3{left:calc(var(--spacing) * 3)}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.z-\[60\]{z-index:60}.-mx-2{margin-inline:calc(var(--spacing) * -2)}.mx-0{margin-inline:0}.mx-auto{margin-inline:auto}.my-1{margin-block:var(--spacing)}.my-4{margin-block:calc(var(--spacing) * 4)}.-mt-0\.5{margin-top:calc(var(--spacing) * -.5)}.mt-0{margin-top:0}.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-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-5{margin-top:calc(var(--spacing) * 5)}.mt-10{margin-top:calc(var(--spacing) * 10)}.mt-\[1px\]{margin-top:1px}.-mr-0\.5{margin-right:calc(var(--spacing) * -.5)}.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-0\.5{margin-left:calc(var(--spacing) * .5)}.ml-1{margin-left:var(--spacing)}.ml-1\.5{margin-left:calc(var(--spacing) * 1.5)}.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{display:inline}.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-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.h-11{height:calc(var(--spacing) * 11)}.h-\[30px\]{height:30px}.h-\[60vh\]{height:60vh}.h-\[72px\]{height:72px}.h-\[480px\]{height:480px}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.max-h-96{max-height:calc(var(--spacing) * 96)}.max-h-\[160px\]{max-height:160px}.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-0\.5{width:calc(var(--spacing) * .5)}.w-1{width:var(--spacing)}.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-9{width:calc(var(--spacing) * 9)}.w-10{width:calc(var(--spacing) * 10)}.w-11{width:calc(var(--spacing) * 11)}.w-28{width:calc(var(--spacing) * 28)}.w-96{width:calc(var(--spacing) * 96)}.w-\[1px\]{width:1px}.w-\[30px\]{width:30px}.w-\[180px\]{width:180px}.w-\[260px\]{width:260px}.w-\[calc\(100vw-4rem\)\]{width:calc(100vw - 4rem)}.w-full{width:100%}.w-max{width:max-content}.w-px{width:1px}.max-w-6xl{max-width:var(--container-6xl)}.max-w-\[75\%\]{max-width:75%}.max-w-\[80\%\]{max-width:80%}.max-w-\[88rem\]{max-width:88rem}.max-w-\[140px\]{max-width:140px}.max-w-\[240px\]{max-width:240px}.max-w-\[260px\]{max-width:260px}.max-w-full{max-width:100%}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.max-w-xl{max-width:var(--container-xl)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:0}.min-w-\[80px\]{min-width:80px}.min-w-\[112px\]{min-width:112px}.min-w-\[160px\]{min-width:160px}.flex-1{flex:1}.flex-none{flex:none}.flex-shrink-0,.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.origin-left{transform-origin:0}.-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.-rotate-90{rotate:-90deg}.animate-ping{animation:var(--animate-ping)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-col-resize{cursor:col-resize}.cursor-pointer{cursor:pointer}.resize{resize:both}.resize-none{resize:none}.resize-y{resize:vertical}.scrollbar-thin{scrollbar-width:thin}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-\[7rem_1fr\]{grid-template-columns:7rem 1fr}.flex-col{flex-direction:column}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.place-content-center{place-content:center}.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-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.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)}.gap-px{gap:1px}: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-2{column-gap:calc(var(--spacing) * 2)}.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-0\.5{row-gap:calc(var(--spacing) * .5)}.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)}.gap-y-6{row-gap:calc(var(--spacing) * 6)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-clip{overflow-x:clip}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.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-0{border-style:var(--tw-border-style);border-width:0}.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-\[\#3a3a3a\]{border-color:#3a3a3a}.border-\[\#22c55e\]\/40{border-color:#22c55e66}.border-\[\#222\]{border-color:#222}.border-\[\#333\]{border-color:#333}.border-\[\#444\]{border-color:#444}.border-\[\#191919\]{border-color:#191919}.border-\[rgba\(255\,255\,255\,0\.08\)\]{border-color:#ffffff14}.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\/25{border-color:#00bb7f40}@supports (color:color-mix(in lab,red,red)){.border-emerald-500\/25{border-color:color-mix(in oklab,var(--color-emerald-500) 25%,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\/10{border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.border-white\/10{border-color:color-mix(in oklab,var(--color-white) 10%,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-white\/\[0\.08\]{border-color:#ffffff14}@supports (color:color-mix(in lab,red,red)){.border-white\/\[0\.08\]{border-color:color-mix(in oklab,var(--color-white) 8%,transparent)}}.border-white\/\[0\.18\]{border-color:#ffffff2e}@supports (color:color-mix(in lab,red,red)){.border-white\/\[0\.18\]{border-color:color-mix(in oklab,var(--color-white) 18%,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-\[\#22c55e\]\/10{background-color:#22c55e1a}.bg-\[\#111\]{background-color:#111}.bg-\[\#222\]{background-color:#222}.bg-\[\#555\]{background-color:#555}.bg-\[\#888\]{background-color:#888}.bg-\[\#050505\]{background-color:#050505}.bg-\[\#252525\]{background-color:#252525}.bg-\[rgba\(255\,255\,255\,0\.02\)\]{background-color:#ffffff05}.bg-\[rgba\(255\,255\,255\,0\.3\)\]{background-color:#ffffff4d}.bg-\[rgba\(255\,255\,255\,0\.04\)\]{background-color:#ffffff0a}.bg-\[rgba\(255\,255\,255\,0\.05\)\]{background-color:#ffffff0d}.bg-\[rgba\(255\,255\,255\,0\.08\)\]{background-color:#ffffff14}.bg-\[rgba\(255\,255\,255\,0\.12\)\]{background-color:#ffffff1f}.bg-black{background-color:var(--color-black)}.bg-black\/80{background-color:#000c}@supports (color:color-mix(in lab,red,red)){.bg-black\/80{background-color:color-mix(in oklab,var(--color-black) 80%,transparent)}}.bg-blue-400{background-color:var(--color-blue-400)}.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\/5{background-color:#00bb7f0d}@supports (color:color-mix(in lab,red,red)){.bg-emerald-500\/5{background-color:color-mix(in oklab,var(--color-emerald-500) 5%,transparent)}}.bg-emerald-500\/10{background-color:#00bb7f1a}@supports (color:color-mix(in lab,red,red)){.bg-emerald-500\/10{background-color:color-mix(in oklab,var(--color-emerald-500) 10%,transparent)}}.bg-emerald-500\/\[0\.06\]{background-color:#00bb7f0f}@supports (color:color-mix(in lab,red,red)){.bg-emerald-500\/\[0\.06\]{background-color:color-mix(in oklab,var(--color-emerald-500) 6%,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-400{background-color:var(--color-red-400)}.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-transparent{background-color:#0000}.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\.03\]{background-color:#ffffff08}@supports (color:color-mix(in lab,red,red)){.bg-white\/\[0\.03\]{background-color:color-mix(in oklab,var(--color-white) 3%,transparent)}}.bg-white\/\[0\.08\]{background-color:#ffffff14}@supports (color:color-mix(in lab,red,red)){.bg-white\/\[0\.08\]{background-color:color-mix(in oklab,var(--color-white) 8%,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-400{background-color:var(--color-yellow-400)}.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)}}.bg-gradient-to-br{--tw-gradient-position:to bottom right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-emerald-400{--tw-gradient-from:var(--color-emerald-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-cyan-500{--tw-gradient-to:var(--color-cyan-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.p-0{padding:0}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:var(--spacing)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-3\.5{padding:calc(var(--spacing) * 3.5)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.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-5{padding-inline:calc(var(--spacing) * 5)}.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-2\.5{padding-block:calc(var(--spacing) * 2.5)}.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-1{padding-top:var(--spacing)}.pt-2{padding-top:calc(var(--spacing) * 2)}.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{padding-right:var(--spacing)}.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)}.pb-10{padding-bottom:calc(var(--spacing) * 10)}.pl-1\.5{padding-left:calc(var(--spacing) * 1.5)}.pl-2\.5{padding-left:calc(var(--spacing) * 2.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-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--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-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[12px\]{font-size:12px}.text-\[13px\]{font-size:13px}.text-\[14px\]{font-size:14px}.text-\[15px\]{font-size:15px}.text-\[16px\]{font-size:16px}.leading-6{--tw-leading:calc(var(--spacing) * 6);line-height:calc(var(--spacing) * 6)}.leading-\[22px\]{--tw-leading:22px;line-height:22px}.leading-none{--tw-leading:1;line-height:1}.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-\[0\.4em\]{--tw-tracking:.4em;letter-spacing:.4em}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[\#22c55e\]{color:#22c55e}.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-\[\#e5e5e5\]{color:#e5e5e5}.text-\[\#ededed\]{color:#ededed}.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-black{color:var(--color-black)}.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-200{color:var(--color-emerald-200)}.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-teal-300{color:var(--color-teal-300)}.text-teal-400{color:var(--color-teal-400)}.text-teal-400\/80{color:#00d3bdcc}@supports (color:color-mix(in lab,red,red)){.text-teal-400\/80{color:color-mix(in oklab,var(--color-teal-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}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.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{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\]{transition-property:width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.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-100{--tw-duration:.1s;transition-duration:.1s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-500{--tw-duration:.5s;transition-duration:.5s}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.\[font-variant-ligatures\:none\]{font-variant-ligatures:none}@media(hover:hover){.group-hover\:bg-\[rgba\(255\,255\,255\,0\.2\)\]:is(:where(.group):hover *){background-color:#fff3}.group-hover\:text-\[\#aaa\]:is(:where(.group):hover *){color:#aaa}.group-hover\:text-white:is(:where(.group):hover *){color:var(--color-white)}.group-hover\:opacity-90:is(:where(.group):hover *){opacity:.9}.group-hover\/code\:opacity-100:is(:where(.group\/code):hover *){opacity:1}}.placeholder\:text-\[\#444\]::placeholder{color:#444}@media(hover:hover){.hover\:border-\[\#333\]:hover{border-color:#333}.hover\:border-\[\#444\]:hover{border-color:#444}.hover\:border-\[\#555\]:hover{border-color:#555}.hover\:border-emerald-500\/40:hover{border-color:#00bb7f66}@supports (color:color-mix(in lab,red,red)){.hover\:border-emerald-500\/40:hover{border-color:color-mix(in oklab,var(--color-emerald-500) 40%,transparent)}}.hover\:border-white\/\[0\.12\]:hover{border-color:#ffffff1f}@supports (color:color-mix(in lab,red,red)){.hover\:border-white\/\[0\.12\]:hover{border-color:color-mix(in oklab,var(--color-white) 12%,transparent)}}.hover\:border-white\/\[0\.16\]:hover{border-color:#ffffff29}@supports (color:color-mix(in lab,red,red)){.hover\:border-white\/\[0\.16\]:hover{border-color:color-mix(in oklab,var(--color-white) 16%,transparent)}}.hover\:bg-\[\#1a1a1a\]:hover{background-color:#1a1a1a}.hover\:bg-\[\#2a2a2a\]:hover{background-color:#2a2a2a}.hover\:bg-\[rgba\(255\,255\,255\,0\.06\)\]:hover{background-color:#ffffff0f}.hover\:bg-\[rgba\(255\,255\,255\,0\.08\)\]:hover{background-color:#ffffff14}.hover\:bg-\[rgba\(255\,255\,255\,0\.09\)\]:hover{background-color:#ffffff17}.hover\:bg-neutral-200:hover{background-color:var(--color-neutral-200)}.hover\:bg-white\/\[0\.06\]:hover{background-color:#ffffff0f}@supports (color:color-mix(in lab,red,red)){.hover\:bg-white\/\[0\.06\]:hover{background-color:color-mix(in oklab,var(--color-white) 6%,transparent)}}.hover\:text-\[\#888\]:hover{color:#888}.hover\:text-\[\#aaa\]:hover{color:#aaa}.hover\:text-\[\#ccc\]:hover{color:#ccc}.hover\:text-\[\#ededed\]:hover{color:#ededed}.hover\:text-red-400:hover{color:var(--color-red-400)}.hover\:text-white:hover{color:var(--color-white)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-90:hover{opacity:.9}.hover\:opacity-100:hover{opacity:1}}.focus\:border-\[\#444\]:focus{border-color:#444}.focus\:border-white\/50:focus{border-color:#ffffff80}@supports (color:color-mix(in lab,red,red)){.focus\:border-white\/50:focus{border-color:color-mix(in oklab,var(--color-white) 50%,transparent)}}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-white\/10:focus{--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.focus\:ring-white\/10:focus{--tw-ring-color:color-mix(in oklab, var(--color-white) 10%, transparent)}}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-white\/20:focus-visible{--tw-ring-color:#fff3}@supports (color:color-mix(in lab,red,red)){.focus-visible\:ring-white\/20:focus-visible{--tw-ring-color:color-mix(in oklab, var(--color-white) 20%, transparent)}}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.disabled\:opacity-60:disabled{opacity:.6}@media(min-width:40rem){.sm\:rounded-lg{border-radius:var(--radius-lg)}.sm\:p-8{padding:calc(var(--spacing) * 8)}.sm\:px-6{padding-inline:calc(var(--spacing) * 6)}.sm\:py-12{padding-block:calc(var(--spacing) * 12)}}@media(min-width:48rem){.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(min-width:64rem){.lg\:sticky{position:sticky}.lg\:top-6{top:calc(var(--spacing) * 6)}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:hidden{display:none}.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}.scrollbar-thin{scrollbar-width:thin;scrollbar-color:#ffffff26 transparent}.scrollbar-thin::-webkit-scrollbar{width:6px;height:6px}.scrollbar-thin::-webkit-scrollbar-thumb{background:#ffffff26;border-radius:3px}.scrollbar-thin::-webkit-scrollbar-track{background:0 0}@keyframes page-in{0%{opacity:0;filter:blur(8px);transform:translateY(8px)}to{opacity:1;filter:blur();transform:translateY(0)}}.animate-page-in{animation:.15s ease-out page-in}@keyframes fade-in{0%{opacity:0}to{opacity:1}}.animate-fade-in{animation:.35s ease-out fade-in}@keyframes cardIn{0%{opacity:0;filter:blur(4px);transform:translateY(8px)scale(.97)}to{opacity:1;filter:blur();transform:translateY(0)scale(1)}}.animate-card-in{opacity:0;animation:.3s cubic-bezier(.16,1,.3,1) forwards cardIn}.animate-card-in:first-child{animation-delay:0s}.animate-card-in:nth-child(2){animation-delay:50ms}.animate-card-in:nth-child(3){animation-delay:.1s}.animate-card-in:nth-child(4){animation-delay:.15s}@keyframes shimmer{0%{transform:translate(-100%)}to{transform:translate(400%)}}.animate-shimmer{animation:2s infinite shimmer}@keyframes dialog-overlay-in{0%{opacity:0}to{opacity:1}}@keyframes dialog-overlay-out{0%{opacity:1}to{opacity:0}}@keyframes dialog-panel-in{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}@keyframes dialog-panel-out{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.95)}}.dialog-overlay[data-state=open]{animation:.2s dialog-overlay-in}.dialog-overlay[data-state=closed]{animation:.2s forwards dialog-overlay-out}.dialog-panel[data-state=open]{animation:.2s dialog-panel-in}.dialog-panel[data-state=closed]{animation:.2s forwards dialog-panel-out}.agent-modal[data-state=open]{animation:.14s dialog-overlay-in}.agent-modal[data-state=closed]{animation:.14s forwards dialog-overlay-out}@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-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@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}@property --tw-ease{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}@keyframes pulse{50%{opacity:.5}} diff --git a/strix/interface/viewer/static/assets/index-gEZK6bjO.js b/strix/interface/viewer/static/assets/index-gEZK6bjO.js deleted file mode 100644 index 8b3ea2aa..00000000 --- a/strix/interface/viewer/static/assets/index-gEZK6bjO.js +++ /dev/null @@ -1,487 +0,0 @@ -(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))a(s);new MutationObserver(s=>{for(const o of s)if(o.type==="childList")for(const c of o.addedNodes)c.tagName==="LINK"&&c.rel==="modulepreload"&&a(c)}).observe(document,{childList:!0,subtree:!0});function r(s){const o={};return s.integrity&&(o.integrity=s.integrity),s.referrerPolicy&&(o.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?o.credentials="include":s.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function a(s){if(s.ep)return;s.ep=!0;const o=r(s);fetch(s.href,o)}})();function To(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var oh={exports:{}},Xl={};/** - * @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 V0;function wk(){if(V0)return Xl;V0=1;var e=Symbol.for("react.transitional.element"),t=Symbol.for("react.fragment");function r(a,s,o){var c=null;if(o!==void 0&&(c=""+o),s.key!==void 0&&(c=""+s.key),"key"in s){o={};for(var d in s)d!=="key"&&(o[d]=s[d])}else o=s;return s=o.ref,{$$typeof:e,type:a,key:c,ref:s!==void 0?s:null,props:o}}return Xl.Fragment=t,Xl.jsx=r,Xl.jsxs=r,Xl}var Y0;function Ek(){return Y0||(Y0=1,oh.exports=wk()),oh.exports}var p=Ek(),ch={exports:{}},Ve={};/** - * @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 X0;function Nk(){if(X0)return Ve;X0=1;var e=Symbol.for("react.transitional.element"),t=Symbol.for("react.portal"),r=Symbol.for("react.fragment"),a=Symbol.for("react.strict_mode"),s=Symbol.for("react.profiler"),o=Symbol.for("react.consumer"),c=Symbol.for("react.context"),d=Symbol.for("react.forward_ref"),h=Symbol.for("react.suspense"),f=Symbol.for("react.memo"),m=Symbol.for("react.lazy"),g=Symbol.for("react.activity"),y=Symbol.iterator;function x(D){return D===null||typeof D!="object"?null:(D=y&&D[y]||D["@@iterator"],typeof D=="function"?D:null)}var _={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},N=Object.assign,S={};function w(D,Y,L){this.props=D,this.context=Y,this.refs=S,this.updater=L||_}w.prototype.isReactComponent={},w.prototype.setState=function(D,Y){if(typeof D!="object"&&typeof D!="function"&&D!=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,D,Y,"setState")},w.prototype.forceUpdate=function(D){this.updater.enqueueForceUpdate(this,D,"forceUpdate")};function k(){}k.prototype=w.prototype;function E(D,Y,L){this.props=D,this.context=Y,this.refs=S,this.updater=L||_}var M=E.prototype=new k;M.constructor=E,N(M,w.prototype),M.isPureReactComponent=!0;var B=Array.isArray;function R(){}var U={H:null,A:null,T:null,S:null},I=Object.prototype.hasOwnProperty;function X(D,Y,L){var G=L.ref;return{$$typeof:e,type:D,key:Y,ref:G!==void 0?G:null,props:L}}function j(D,Y){return X(D.type,Y,D.props)}function z(D){return typeof D=="object"&&D!==null&&D.$$typeof===e}function V(D){var Y={"=":"=0",":":"=2"};return"$"+D.replace(/[=:]/g,function(L){return Y[L]})}var P=/\/+/g;function T(D,Y){return typeof D=="object"&&D!==null&&D.key!=null?V(""+D.key):Y.toString(36)}function $(D){switch(D.status){case"fulfilled":return D.value;case"rejected":throw D.reason;default:switch(typeof D.status=="string"?D.then(R,R):(D.status="pending",D.then(function(Y){D.status==="pending"&&(D.status="fulfilled",D.value=Y)},function(Y){D.status==="pending"&&(D.status="rejected",D.reason=Y)})),D.status){case"fulfilled":return D.value;case"rejected":throw D.reason}}throw D}function O(D,Y,L,G,q){var Q=typeof D;(Q==="undefined"||Q==="boolean")&&(D=null);var J=!1;if(D===null)J=!0;else switch(Q){case"bigint":case"string":case"number":J=!0;break;case"object":switch(D.$$typeof){case e:case t:J=!0;break;case m:return J=D._init,O(J(D._payload),Y,L,G,q)}}if(J)return q=q(D),J=G===""?"."+T(D,0):G,B(q)?(L="",J!=null&&(L=J.replace(P,"$&/")+"/"),O(q,Y,L,"",function(ce){return ce})):q!=null&&(z(q)&&(q=j(q,L+(q.key==null||D&&D.key===q.key?"":(""+q.key).replace(P,"$&/")+"/")+J)),Y.push(q)),1;J=0;var W=G===""?".":G+":";if(B(D))for(var te=0;te>>1,C=O[Z];if(0>>1;Zs(L,K))Gs(q,L)?(O[Z]=q,O[G]=K,Z=G):(O[Z]=L,O[Y]=K,Z=Y);else if(Gs(q,K))O[Z]=q,O[G]=K,Z=G;else break e}}return H}function s(O,H){var K=O.sortIndex-H.sortIndex;return K!==0?K:O.id-H.id}if(e.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var o=performance;e.unstable_now=function(){return o.now()}}else{var c=Date,d=c.now();e.unstable_now=function(){return c.now()-d}}var h=[],f=[],m=1,g=null,y=3,x=!1,_=!1,N=!1,S=!1,w=typeof setTimeout=="function"?setTimeout:null,k=typeof clearTimeout=="function"?clearTimeout:null,E=typeof setImmediate<"u"?setImmediate:null;function M(O){for(var H=r(f);H!==null;){if(H.callback===null)a(f);else if(H.startTime<=O)a(f),H.sortIndex=H.expirationTime,t(h,H);else break;H=r(f)}}function B(O){if(N=!1,M(O),!_)if(r(h)!==null)_=!0,R||(R=!0,V());else{var H=r(f);H!==null&&$(B,H.startTime-O)}}var R=!1,U=-1,I=5,X=-1;function j(){return S?!0:!(e.unstable_now()-XO&&j());){var Z=g.callback;if(typeof Z=="function"){g.callback=null,y=g.priorityLevel;var C=Z(g.expirationTime<=O);if(O=e.unstable_now(),typeof C=="function"){g.callback=C,M(O),H=!0;break t}g===r(h)&&a(h),M(O)}else a(h);g=r(h)}if(g!==null)H=!0;else{var D=r(f);D!==null&&$(B,D.startTime-O),H=!1}}break e}finally{g=null,y=K,x=!1}H=void 0}}finally{H?V():R=!1}}}var V;if(typeof E=="function")V=function(){E(z)};else if(typeof MessageChannel<"u"){var P=new MessageChannel,T=P.port2;P.port1.onmessage=z,V=function(){T.postMessage(null)}}else V=function(){w(z,0)};function $(O,H){U=w(function(){O(e.unstable_now())},H)}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(O){O.callback=null},e.unstable_forceFrameRate=function(O){0>O||125Z?(O.sortIndex=K,t(f,O),r(h)===null&&O===r(f)&&(N?(k(U),U=-1):N=!0,$(B,K-Z))):(O.sortIndex=C,t(h,O),_||x||(_=!0,R||(R=!0,V()))),O},e.unstable_shouldYield=j,e.unstable_wrapCallback=function(O){var H=y;return function(){var K=y;y=H;try{return O.apply(this,arguments)}finally{y=K}}}})(fh)),fh}var Q0;function kk(){return Q0||(Q0=1,dh.exports=Sk()),dh.exports}var hh={exports:{}},Cn={};/** - * @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 W0;function Ck(){if(W0)return Cn;W0=1;var e=Ao();function t(h){var f="https://react.dev/errors/"+h;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}return e(),hh.exports=Ck(),hh.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 ey;function Tk(){if(ey)return Kl;ey=1;var e=kk(),t=Ao(),r=T_();function a(n){var i="https://react.dev/errors/"+n;if(1C||(n.current=Z[C],Z[C]=null,C--)}function L(n,i){C++,Z[C]=n.current,n.current=i}var G=D(null),q=D(null),Q=D(null),J=D(null);function W(n,i){switch(L(Q,i),L(q,n),L(G,null),i.nodeType){case 9:case 11:n=(n=i.documentElement)&&(n=n.namespaceURI)?p0(n):0;break;default:if(n=i.tagName,i=i.namespaceURI)i=p0(i),n=g0(i,n);else switch(n){case"svg":n=1;break;case"math":n=2;break;default:n=0}}Y(G),L(G,n)}function te(){Y(G),Y(q),Y(Q)}function ce(n){n.memoizedState!==null&&L(J,n);var i=G.current,l=g0(i,n.type);i!==l&&(L(q,n),L(G,l))}function fe(n){q.current===n&&(Y(G),Y(q)),J.current===n&&(Y(J),Fl._currentValue=K)}var be,we;function Ne(n){if(be===void 0)try{throw Error()}catch(l){var i=l.stack.trim().match(/\n( *(at )?)/);be=i&&i[1]||"",we=-1)":-1b||ne[u]!==le[b]){var he=` -`+ne[u].replace(" at new "," at ");return n.displayName&&he.includes("")&&(he=he.replace("",n.displayName)),he}while(1<=u&&0<=b);break}}}finally{De=!1,Error.prepareStackTrace=l}return(l=n?n.displayName||n.name:"")?Ne(l):""}function st(n,i){switch(n.tag){case 26:case 27:case 5:return Ne(n.type);case 16:return Ne("Lazy");case 13:return n.child!==i&&i!==null?Ne("Suspense Fallback"):Ne("Suspense");case 19:return Ne("SuspenseList");case 0:case 15:return $e(n.type,!1);case 11:return $e(n.type.render,!1);case 1:return $e(n.type,!0);case 31:return Ne("Activity");default:return""}}function Rt(n){try{var i="",l=null;do i+=st(n,l),l=n,n=n.return;while(n);return i}catch(u){return` -Error generating stack: `+u.message+` -`+u.stack}}var Yt=Object.prototype.hasOwnProperty,Pt=e.unstable_scheduleCallback,Xt=e.unstable_cancelCallback,Yn=e.unstable_shouldYield,En=e.unstable_requestPaint,ct=e.unstable_now,It=e.unstable_getCurrentPriorityLevel,ue=e.unstable_ImmediatePriority,xe=e.unstable_UserBlockingPriority,Oe=e.unstable_NormalPriority,Fe=e.unstable_LowPriority,Ze=e.unstable_IdlePriority,on=e.log,Nn=e.unstable_setDisableYieldValue,Kt=null,At=null;function Wt(n){if(typeof on=="function"&&Nn(n),At&&typeof At.setStrictMode=="function")try{At.setStrictMode(Kt,n)}catch{}}var ut=Math.clz32?Math.clz32:Ni,In=Math.log,cn=Math.LN2;function Ni(n){return n>>>=0,n===0?32:31-(In(n)/cn|0)|0}var nt=256,Xn=262144,On=4194304;function hn(n){var i=n&42;if(i!==0)return i;switch(n&-n){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 n&261888;case 262144:case 524288:case 1048576:case 2097152:return n&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return n&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return n}}function re(n,i,l){var u=n.pendingLanes;if(u===0)return 0;var b=0,v=n.suspendedLanes,A=n.pingedLanes;n=n.warmLanes;var F=u&134217727;return F!==0?(u=F&~v,u!==0?b=hn(u):(A&=F,A!==0?b=hn(A):l||(l=F&~n,l!==0&&(b=hn(l))))):(F=u&~v,F!==0?b=hn(F):A!==0?b=hn(A):l||(l=u&~n,l!==0&&(b=hn(l)))),b===0?0:i!==0&&i!==b&&(i&v)===0&&(v=b&-b,l=i&-i,v>=l||v===32&&(l&4194048)!==0)?i:b}function me(n,i){return(n.pendingLanes&~(n.suspendedLanes&~n.pingedLanes)&i)===0}function Ee(n,i){switch(n){case 1:case 2:case 4:case 8:case 64:return i+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return i+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function Pe(){var n=On;return On<<=1,(On&62914560)===0&&(On=4194304),n}function St(n){for(var i=[],l=0;31>l;l++)i.push(n);return i}function gt(n,i){n.pendingLanes|=i,i!==268435456&&(n.suspendedLanes=0,n.pingedLanes=0,n.warmLanes=0)}function Ae(n,i,l,u,b,v){var A=n.pendingLanes;n.pendingLanes=l,n.suspendedLanes=0,n.pingedLanes=0,n.warmLanes=0,n.expiredLanes&=l,n.entangledLanes&=l,n.errorRecoveryDisabledLanes&=l,n.shellSuspendCounter=0;var F=n.entanglements,ne=n.expirationTimes,le=n.hiddenUpdates;for(l=A&~l;0"u")return null;try{return n.activeElement||n.body}catch{return n.body}}var is=/[\n"\\]/g;function kn(n){return n.replace(is,function(i){return"\\"+i.charCodeAt(0).toString(16)+" "})}function xa(n,i,l,u,b,v,A,F){n.name="",A!=null&&typeof A!="function"&&typeof A!="symbol"&&typeof A!="boolean"?n.type=A:n.removeAttribute("type"),i!=null?A==="number"?(i===0&&n.value===""||n.value!=i)&&(n.value=""+_t(i)):n.value!==""+_t(i)&&(n.value=""+_t(i)):A!=="submit"&&A!=="reset"||n.removeAttribute("value"),i!=null?Oi(n,A,_t(i)):l!=null?Oi(n,A,_t(l)):u!=null&&n.removeAttribute("value"),b==null&&v!=null&&(n.defaultChecked=!!v),b!=null&&(n.checked=b&&typeof b!="function"&&typeof b!="symbol"),F!=null&&typeof F!="function"&&typeof F!="symbol"&&typeof F!="boolean"?n.name=""+_t(F):n.removeAttribute("name")}function Er(n,i,l,u,b,v,A,F){if(v!=null&&typeof v!="function"&&typeof v!="symbol"&&typeof v!="boolean"&&(n.type=v),i!=null||l!=null){if(!(v!=="submit"&&v!=="reset"||i!=null)){Ai(n);return}l=l!=null?""+_t(l):"",i=i!=null?""+_t(i):l,F||i===n.value||(n.value=i),n.defaultValue=i}u=u??b,u=typeof u!="function"&&typeof u!="symbol"&&!!u,n.checked=F?n.checked:!!u,n.defaultChecked=!!u,A!=null&&typeof A!="function"&&typeof A!="symbol"&&typeof A!="boolean"&&(n.name=A),Ai(n)}function Oi(n,i,l){i==="number"&&Mi(n.ownerDocument)===n||n.defaultValue===""+l||(n.defaultValue=""+l)}function un(n,i,l,u){if(n=n.options,i){i={};for(var b=0;b"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),ld=!1;if(ti)try{var ol={};Object.defineProperty(ol,"passive",{get:function(){ld=!0}}),window.addEventListener("test",ol,ol),window.removeEventListener("test",ol,ol)}catch{ld=!1}var Di=null,od=null,Po=null;function gg(){if(Po)return Po;var n,i=od,l=i.length,u,b="value"in Di?Di.value:Di.textContent,v=b.length;for(n=0;n=dl),wg=" ",Eg=!1;function Ng(n,i){switch(n){case"keyup":return FS.indexOf(i.keyCode)!==-1;case"keydown":return i.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Sg(n){return n=n.detail,typeof n=="object"&&"data"in n?n.data:null}var ss=!1;function VS(n,i){switch(n){case"compositionend":return Sg(i);case"keypress":return i.which!==32?null:(Eg=!0,wg);case"textInput":return n=i.data,n===wg&&Eg?null:n;default:return null}}function YS(n,i){if(ss)return n==="compositionend"||!hd&&Ng(n,i)?(n=gg(),Po=od=Di=null,ss=!1,n):null;switch(n){case"paste":return null;case"keypress":if(!(i.ctrlKey||i.altKey||i.metaKey)||i.ctrlKey&&i.altKey){if(i.char&&1=i)return{node:l,offset:i-n};n=u}e:{for(;l;){if(l.nextSibling){l=l.nextSibling;break e}l=l.parentNode}l=void 0}l=jg(l)}}function Lg(n,i){return n&&i?n===i?!0:n&&n.nodeType===3?!1:i&&i.nodeType===3?Lg(n,i.parentNode):"contains"in n?n.contains(i):n.compareDocumentPosition?!!(n.compareDocumentPosition(i)&16):!1:!1}function zg(n){n=n!=null&&n.ownerDocument!=null&&n.ownerDocument.defaultView!=null?n.ownerDocument.defaultView:window;for(var i=Mi(n.document);i instanceof n.HTMLIFrameElement;){try{var l=typeof i.contentWindow.location.href=="string"}catch{l=!1}if(l)n=i.contentWindow;else break;i=Mi(n.document)}return i}function gd(n){var i=n&&n.nodeName&&n.nodeName.toLowerCase();return i&&(i==="input"&&(n.type==="text"||n.type==="search"||n.type==="tel"||n.type==="url"||n.type==="password")||i==="textarea"||n.contentEditable==="true")}var t2=ti&&"documentMode"in document&&11>=document.documentMode,ls=null,bd=null,pl=null,xd=!1;function Ig(n,i,l){var u=l.window===l?l.document:l.nodeType===9?l:l.ownerDocument;xd||ls==null||ls!==Mi(u)||(u=ls,"selectionStart"in u&&gd(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}),pl&&ml(pl,u)||(pl=u,u=zc(bd,"onSelect"),0>=A,b-=A,Hr=1<<32-ut(i)+b|l<Ke?(at=je,je=null):at=je.sibling;var mt=oe(ae,je,se[Ke],pe);if(mt===null){je===null&&(je=at);break}n&&je&&mt.alternate===null&&i(ae,je),ie=v(mt,ie,Ke),ht===null?Ie=mt:ht.sibling=mt,ht=mt,je=at}if(Ke===se.length)return l(ae,je),lt&&ri(ae,Ke),Ie;if(je===null){for(;KeKe?(at=je,je=null):at=je.sibling;var na=oe(ae,je,mt.value,pe);if(na===null){je===null&&(je=at);break}n&&je&&na.alternate===null&&i(ae,je),ie=v(na,ie,Ke),ht===null?Ie=na:ht.sibling=na,ht=na,je=at}if(mt.done)return l(ae,je),lt&&ri(ae,Ke),Ie;if(je===null){for(;!mt.done;Ke++,mt=se.next())mt=ge(ae,mt.value,pe),mt!==null&&(ie=v(mt,ie,Ke),ht===null?Ie=mt:ht.sibling=mt,ht=mt);return lt&&ri(ae,Ke),Ie}for(je=u(je);!mt.done;Ke++,mt=se.next())mt=de(je,ae,Ke,mt.value,pe),mt!==null&&(n&&mt.alternate!==null&&je.delete(mt.key===null?Ke:mt.key),ie=v(mt,ie,Ke),ht===null?Ie=mt:ht.sibling=mt,ht=mt);return n&&je.forEach(function(_k){return i(ae,_k)}),lt&&ri(ae,Ke),Ie}function Nt(ae,ie,se,pe){if(typeof se=="object"&&se!==null&&se.type===N&&se.key===null&&(se=se.props.children),typeof se=="object"&&se!==null){switch(se.$$typeof){case x:e:{for(var Ie=se.key;ie!==null;){if(ie.key===Ie){if(Ie=se.type,Ie===N){if(ie.tag===7){l(ae,ie.sibling),pe=b(ie,se.props.children),pe.return=ae,ae=pe;break e}}else if(ie.elementType===Ie||typeof Ie=="object"&&Ie!==null&&Ie.$$typeof===I&&Aa(Ie)===ie.type){l(ae,ie.sibling),pe=b(ie,se.props),_l(pe,se),pe.return=ae,ae=pe;break e}l(ae,ie);break}else i(ae,ie);ie=ie.sibling}se.type===N?(pe=Na(se.props.children,ae.mode,pe,se.key),pe.return=ae,ae=pe):(pe=Jo(se.type,se.key,se.props,null,ae.mode,pe),_l(pe,se),pe.return=ae,ae=pe)}return A(ae);case _:e:{for(Ie=se.key;ie!==null;){if(ie.key===Ie)if(ie.tag===4&&ie.stateNode.containerInfo===se.containerInfo&&ie.stateNode.implementation===se.implementation){l(ae,ie.sibling),pe=b(ie,se.children||[]),pe.return=ae,ae=pe;break e}else{l(ae,ie);break}else i(ae,ie);ie=ie.sibling}pe=Sd(se,ae.mode,pe),pe.return=ae,ae=pe}return A(ae);case I:return se=Aa(se),Nt(ae,ie,se,pe)}if($(se))return Te(ae,ie,se,pe);if(V(se)){if(Ie=V(se),typeof Ie!="function")throw Error(a(150));return se=Ie.call(se),He(ae,ie,se,pe)}if(typeof se.then=="function")return Nt(ae,ie,sc(se),pe);if(se.$$typeof===E)return Nt(ae,ie,nc(ae,se),pe);lc(ae,se)}return typeof se=="string"&&se!==""||typeof se=="number"||typeof se=="bigint"?(se=""+se,ie!==null&&ie.tag===6?(l(ae,ie.sibling),pe=b(ie,se),pe.return=ae,ae=pe):(l(ae,ie),pe=Nd(se,ae.mode,pe),pe.return=ae,ae=pe),A(ae)):l(ae,ie)}return function(ae,ie,se,pe){try{vl=0;var Ie=Nt(ae,ie,se,pe);return xs=null,Ie}catch(je){if(je===bs||je===ic)throw je;var ht=Zn(29,je,null,ae.mode);return ht.lanes=pe,ht.return=ae,ht}finally{}}}var Oa=sb(!0),lb=sb(!1),Ui=!1;function Id(n){n.updateQueue={baseState:n.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function Bd(n,i){n=n.updateQueue,i.updateQueue===n&&(i.updateQueue={baseState:n.baseState,firstBaseUpdate:n.firstBaseUpdate,lastBaseUpdate:n.lastBaseUpdate,shared:n.shared,callbacks:null})}function Hi(n){return{lane:n,tag:0,payload:null,callback:null,next:null}}function $i(n,i,l){var u=n.updateQueue;if(u===null)return null;if(u=u.shared,(pt&2)!==0){var b=u.pending;return b===null?i.next=i:(i.next=b.next,b.next=i),u.pending=i,i=Wo(n),Fg(n,null,l),i}return Qo(n,u,i,l),Wo(n)}function wl(n,i,l){if(i=i.updateQueue,i!==null&&(i=i.shared,(l&4194048)!==0)){var u=i.lanes;u&=n.pendingLanes,l|=u,i.lanes=l,Ue(n,l)}}function Ud(n,i){var l=n.updateQueue,u=n.alternate;if(u!==null&&(u=u.updateQueue,l===u)){var b=null,v=null;if(l=l.firstBaseUpdate,l!==null){do{var A={lane:l.lane,tag:l.tag,payload:l.payload,callback:null,next:null};v===null?b=v=A:v=v.next=A,l=l.next}while(l!==null);v===null?b=v=i:v=v.next=i}else b=v=i;l={baseState:u.baseState,firstBaseUpdate:b,lastBaseUpdate:v,shared:u.shared,callbacks:u.callbacks},n.updateQueue=l;return}n=l.lastBaseUpdate,n===null?l.firstBaseUpdate=i:n.next=i,l.lastBaseUpdate=i}var Hd=!1;function El(){if(Hd){var n=gs;if(n!==null)throw n}}function Nl(n,i,l,u){Hd=!1;var b=n.updateQueue;Ui=!1;var v=b.firstBaseUpdate,A=b.lastBaseUpdate,F=b.shared.pending;if(F!==null){b.shared.pending=null;var ne=F,le=ne.next;ne.next=null,A===null?v=le:A.next=le,A=ne;var he=n.alternate;he!==null&&(he=he.updateQueue,F=he.lastBaseUpdate,F!==A&&(F===null?he.firstBaseUpdate=le:F.next=le,he.lastBaseUpdate=ne))}if(v!==null){var ge=b.baseState;A=0,he=le=ne=null,F=v;do{var oe=F.lane&-536870913,de=oe!==F.lane;if(de?(it&oe)===oe:(u&oe)===oe){oe!==0&&oe===ps&&(Hd=!0),he!==null&&(he=he.next={lane:0,tag:F.tag,payload:F.payload,callback:null,next:null});e:{var Te=n,He=F;oe=i;var Nt=l;switch(He.tag){case 1:if(Te=He.payload,typeof Te=="function"){ge=Te.call(Nt,ge,oe);break e}ge=Te;break e;case 3:Te.flags=Te.flags&-65537|128;case 0:if(Te=He.payload,oe=typeof Te=="function"?Te.call(Nt,ge,oe):Te,oe==null)break e;ge=g({},ge,oe);break e;case 2:Ui=!0}}oe=F.callback,oe!==null&&(n.flags|=64,de&&(n.flags|=8192),de=b.callbacks,de===null?b.callbacks=[oe]:de.push(oe))}else de={lane:oe,tag:F.tag,payload:F.payload,callback:F.callback,next:null},he===null?(le=he=de,ne=ge):he=he.next=de,A|=oe;if(F=F.next,F===null){if(F=b.shared.pending,F===null)break;de=F,F=de.next,de.next=null,b.lastBaseUpdate=de,b.shared.pending=null}}while(!0);he===null&&(ne=ge),b.baseState=ne,b.firstBaseUpdate=le,b.lastBaseUpdate=he,v===null&&(b.shared.lanes=0),Vi|=A,n.lanes=A,n.memoizedState=ge}}function ob(n,i){if(typeof n!="function")throw Error(a(191,n));n.call(i)}function cb(n,i){var l=n.callbacks;if(l!==null)for(n.callbacks=null,n=0;nv?v:8;var A=O.T,F={};O.T=F,sf(n,!1,i,l);try{var ne=b(),le=O.S;if(le!==null&&le(F,ne),ne!==null&&typeof ne=="object"&&typeof ne.then=="function"){var he=u2(ne,u);Cl(n,i,he,tr(n))}else Cl(n,i,u,tr(n))}catch(ge){Cl(n,i,{then:function(){},status:"rejected",reason:ge},tr())}finally{H.p=v,A!==null&&F.types!==null&&(A.types=F.types),O.T=A}}function g2(){}function rf(n,i,l,u){if(n.tag!==5)throw Error(a(476));var b=$b(n).queue;Hb(n,b,i,K,l===null?g2:function(){return qb(n),l(u)})}function $b(n){var i=n.memoizedState;if(i!==null)return i;i={memoizedState:K,baseState:K,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:li,lastRenderedState:K},next:null};var l={};return i.next={memoizedState:l,baseState:l,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:li,lastRenderedState:l},next:null},n.memoizedState=i,n=n.alternate,n!==null&&(n.memoizedState=i),i}function qb(n){var i=$b(n);i.next===null&&(i=n.alternate.memoizedState),Cl(n,i.next.queue,{},tr())}function af(){return yn(Fl)}function Pb(){return Qt().memoizedState}function Fb(){return Qt().memoizedState}function b2(n){for(var i=n.return;i!==null;){switch(i.tag){case 24:case 3:var l=tr();n=Hi(l);var u=$i(i,n,l);u!==null&&(Pn(u,i,l),wl(u,i,l)),i={cache:jd()},n.payload=i;return}i=i.return}}function x2(n,i,l){var u=tr();l={lane:u,revertLane:0,gesture:null,action:l,hasEagerState:!1,eagerState:null,next:null},bc(n)?Vb(i,l):(l=wd(n,i,l,u),l!==null&&(Pn(l,n,u),Yb(l,i,u)))}function Gb(n,i,l){var u=tr();Cl(n,i,l,u)}function Cl(n,i,l,u){var b={lane:u,revertLane:0,gesture:null,action:l,hasEagerState:!1,eagerState:null,next:null};if(bc(n))Vb(i,b);else{var v=n.alternate;if(n.lanes===0&&(v===null||v.lanes===0)&&(v=i.lastRenderedReducer,v!==null))try{var A=i.lastRenderedState,F=v(A,l);if(b.hasEagerState=!0,b.eagerState=F,Kn(F,A))return Qo(n,i,b,0),kt===null&&Zo(),!1}catch{}finally{}if(l=wd(n,i,b,u),l!==null)return Pn(l,n,u),Yb(l,i,u),!0}return!1}function sf(n,i,l,u){if(u={lane:2,revertLane:Bf(),gesture:null,action:u,hasEagerState:!1,eagerState:null,next:null},bc(n)){if(i)throw Error(a(479))}else i=wd(n,l,u,2),i!==null&&Pn(i,n,2)}function bc(n){var i=n.alternate;return n===Xe||i!==null&&i===Xe}function Vb(n,i){vs=uc=!0;var l=n.pending;l===null?i.next=i:(i.next=l.next,l.next=i),n.pending=i}function Yb(n,i,l){if((l&4194048)!==0){var u=i.lanes;u&=n.pendingLanes,l|=u,i.lanes=l,Ue(n,l)}}var Tl={readContext:yn,use:hc,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};Tl.useEffectEvent=Gt;var Xb={readContext:yn,use:hc,useCallback:function(n,i){return Dn().memoizedState=[n,i===void 0?null:i],n},useContext:yn,useEffect:Ob,useImperativeHandle:function(n,i,l){l=l!=null?l.concat([n]):null,pc(4194308,4,Lb.bind(null,i,n),l)},useLayoutEffect:function(n,i){return pc(4194308,4,n,i)},useInsertionEffect:function(n,i){pc(4,2,n,i)},useMemo:function(n,i){var l=Dn();i=i===void 0?null:i;var u=n();if(Ra){Wt(!0);try{n()}finally{Wt(!1)}}return l.memoizedState=[u,i],u},useReducer:function(n,i,l){var u=Dn();if(l!==void 0){var b=l(i);if(Ra){Wt(!0);try{l(i)}finally{Wt(!1)}}}else b=i;return u.memoizedState=u.baseState=b,n={pending:null,lanes:0,dispatch:null,lastRenderedReducer:n,lastRenderedState:b},u.queue=n,n=n.dispatch=x2.bind(null,Xe,n),[u.memoizedState,n]},useRef:function(n){var i=Dn();return n={current:n},i.memoizedState=n},useState:function(n){n=Wd(n);var i=n.queue,l=Gb.bind(null,Xe,i);return i.dispatch=l,[n.memoizedState,l]},useDebugValue:tf,useDeferredValue:function(n,i){var l=Dn();return nf(l,n,i)},useTransition:function(){var n=Wd(!1);return n=Hb.bind(null,Xe,n.queue,!0,!1),Dn().memoizedState=n,[!1,n]},useSyncExternalStore:function(n,i,l){var u=Xe,b=Dn();if(lt){if(l===void 0)throw Error(a(407));l=l()}else{if(l=i(),kt===null)throw Error(a(349));(it&127)!==0||pb(u,i,l)}b.memoizedState=l;var v={value:l,getSnapshot:i};return b.queue=v,Ob(bb.bind(null,u,v,n),[n]),u.flags|=2048,ws(9,{destroy:void 0},gb.bind(null,u,v,l,i),null),l},useId:function(){var n=Dn(),i=kt.identifierPrefix;if(lt){var l=$r,u=Hr;l=(u&~(1<<32-ut(u)-1)).toString(32)+l,i="_"+i+"R_"+l,l=dc++,0<\/script>",v=v.removeChild(v.firstChild);break;case"select":v=typeof u.is=="string"?A.createElement("select",{is:u.is}):A.createElement("select"),u.multiple?v.multiple=!0:u.size&&(v.size=u.size);break;default:v=typeof u.is=="string"?A.createElement(b,{is:u.is}):A.createElement(b)}}v[Ut]=i,v[mn]=u;e:for(A=i.child;A!==null;){if(A.tag===5||A.tag===6)v.appendChild(A.stateNode);else if(A.tag!==4&&A.tag!==27&&A.child!==null){A.child.return=A,A=A.child;continue}if(A===i)break e;for(;A.sibling===null;){if(A.return===null||A.return===i)break e;A=A.return}A.sibling.return=A.return,A=A.sibling}i.stateNode=v;e:switch(_n(v,b,u),b){case"button":case"input":case"select":case"textarea":u=!!u.autoFocus;break e;case"img":u=!0;break e;default:u=!1}u&&ci(i)}}return Dt(i),vf(i,i.type,n===null?null:n.memoizedProps,i.pendingProps,l),null;case 6:if(n&&i.stateNode!=null)n.memoizedProps!==u&&ci(i);else{if(typeof u!="string"&&i.stateNode===null)throw Error(a(166));if(n=Q.current,hs(i)){if(n=i.stateNode,l=i.memoizedProps,u=null,b=xn,b!==null)switch(b.tag){case 27:case 5:u=b.memoizedProps}n[Ut]=i,n=!!(n.nodeValue===l||u!==null&&u.suppressHydrationWarning===!0||h0(n.nodeValue,l)),n||Ii(i,!0)}else n=Ic(n).createTextNode(u),n[Ut]=i,i.stateNode=n}return Dt(i),null;case 31:if(l=i.memoizedState,n===null||n.memoizedState!==null){if(u=hs(i),l!==null){if(n===null){if(!u)throw Error(a(318));if(n=i.memoizedState,n=n!==null?n.dehydrated:null,!n)throw Error(a(557));n[Ut]=i}else Sa(),(i.flags&128)===0&&(i.memoizedState=null),i.flags|=4;Dt(i),n=!1}else l=Ad(),n!==null&&n.memoizedState!==null&&(n.memoizedState.hydrationErrors=l),n=!0;if(!n)return i.flags&256?(Wn(i),i):(Wn(i),null);if((i.flags&128)!==0)throw Error(a(558))}return Dt(i),null;case 13:if(u=i.memoizedState,n===null||n.memoizedState!==null&&n.memoizedState.dehydrated!==null){if(b=hs(i),u!==null&&u.dehydrated!==null){if(n===null){if(!b)throw Error(a(318));if(b=i.memoizedState,b=b!==null?b.dehydrated:null,!b)throw Error(a(317));b[Ut]=i}else Sa(),(i.flags&128)===0&&(i.memoizedState=null),i.flags|=4;Dt(i),b=!1}else b=Ad(),n!==null&&n.memoizedState!==null&&(n.memoizedState.hydrationErrors=b),b=!0;if(!b)return i.flags&256?(Wn(i),i):(Wn(i),null)}return Wn(i),(i.flags&128)!==0?(i.lanes=l,i):(l=u!==null,n=n!==null&&n.memoizedState!==null,l&&(u=i.child,b=null,u.alternate!==null&&u.alternate.memoizedState!==null&&u.alternate.memoizedState.cachePool!==null&&(b=u.alternate.memoizedState.cachePool.pool),v=null,u.memoizedState!==null&&u.memoizedState.cachePool!==null&&(v=u.memoizedState.cachePool.pool),v!==b&&(u.flags|=2048)),l!==n&&l&&(i.child.flags|=8192),wc(i,i.updateQueue),Dt(i),null);case 4:return te(),n===null&&qf(i.stateNode.containerInfo),Dt(i),null;case 10:return ai(i.type),Dt(i),null;case 19:if(Y(Zt),u=i.memoizedState,u===null)return Dt(i),null;if(b=(i.flags&128)!==0,v=u.rendering,v===null)if(b)Ml(u,!1);else{if(Vt!==0||n!==null&&(n.flags&128)!==0)for(n=i.child;n!==null;){if(v=cc(n),v!==null){for(i.flags|=128,Ml(u,!1),n=v.updateQueue,i.updateQueue=n,wc(i,n),i.subtreeFlags=0,n=l,l=i.child;l!==null;)Gg(l,n),l=l.sibling;return L(Zt,Zt.current&1|2),lt&&ri(i,u.treeForkCount),i.child}n=n.sibling}u.tail!==null&&ct()>Cc&&(i.flags|=128,b=!0,Ml(u,!1),i.lanes=4194304)}else{if(!b)if(n=cc(v),n!==null){if(i.flags|=128,b=!0,n=n.updateQueue,i.updateQueue=n,wc(i,n),Ml(u,!0),u.tail===null&&u.tailMode==="hidden"&&!v.alternate&&!lt)return Dt(i),null}else 2*ct()-u.renderingStartTime>Cc&&l!==536870912&&(i.flags|=128,b=!0,Ml(u,!1),i.lanes=4194304);u.isBackwards?(v.sibling=i.child,i.child=v):(n=u.last,n!==null?n.sibling=v:i.child=v,u.last=v)}return u.tail!==null?(n=u.tail,u.rendering=n,u.tail=n.sibling,u.renderingStartTime=ct(),n.sibling=null,l=Zt.current,L(Zt,b?l&1|2:l&1),lt&&ri(i,u.treeForkCount),n):(Dt(i),null);case 22:case 23:return Wn(i),qd(),u=i.memoizedState!==null,n!==null?n.memoizedState!==null!==u&&(i.flags|=8192):u&&(i.flags|=8192),u?(l&536870912)!==0&&(i.flags&128)===0&&(Dt(i),i.subtreeFlags&6&&(i.flags|=8192)):Dt(i),l=i.updateQueue,l!==null&&wc(i,l.retryQueue),l=null,n!==null&&n.memoizedState!==null&&n.memoizedState.cachePool!==null&&(l=n.memoizedState.cachePool.pool),u=null,i.memoizedState!==null&&i.memoizedState.cachePool!==null&&(u=i.memoizedState.cachePool.pool),u!==l&&(i.flags|=2048),n!==null&&Y(Ta),null;case 24:return l=null,n!==null&&(l=n.memoizedState.cache),i.memoizedState.cache!==l&&(i.flags|=2048),ai(en),Dt(i),null;case 25:return null;case 30:return null}throw Error(a(156,i.tag))}function E2(n,i){switch(Cd(i),i.tag){case 1:return n=i.flags,n&65536?(i.flags=n&-65537|128,i):null;case 3:return ai(en),te(),n=i.flags,(n&65536)!==0&&(n&128)===0?(i.flags=n&-65537|128,i):null;case 26:case 27:case 5:return fe(i),null;case 31:if(i.memoizedState!==null){if(Wn(i),i.alternate===null)throw Error(a(340));Sa()}return n=i.flags,n&65536?(i.flags=n&-65537|128,i):null;case 13:if(Wn(i),n=i.memoizedState,n!==null&&n.dehydrated!==null){if(i.alternate===null)throw Error(a(340));Sa()}return n=i.flags,n&65536?(i.flags=n&-65537|128,i):null;case 19:return Y(Zt),null;case 4:return te(),null;case 10:return ai(i.type),null;case 22:case 23:return Wn(i),qd(),n!==null&&Y(Ta),n=i.flags,n&65536?(i.flags=n&-65537|128,i):null;case 24:return ai(en),null;case 25:return null;default:return null}}function xx(n,i){switch(Cd(i),i.tag){case 3:ai(en),te();break;case 26:case 27:case 5:fe(i);break;case 4:te();break;case 31:i.memoizedState!==null&&Wn(i);break;case 13:Wn(i);break;case 19:Y(Zt);break;case 10:ai(i.type);break;case 22:case 23:Wn(i),qd(),n!==null&&Y(Ta);break;case 24:ai(en)}}function Ol(n,i){try{var l=i.updateQueue,u=l!==null?l.lastEffect:null;if(u!==null){var b=u.next;l=b;do{if((l.tag&n)===n){u=void 0;var v=l.create,A=l.inst;u=v(),A.destroy=u}l=l.next}while(l!==b)}}catch(F){yt(i,i.return,F)}}function Fi(n,i,l){try{var u=i.updateQueue,b=u!==null?u.lastEffect:null;if(b!==null){var v=b.next;u=v;do{if((u.tag&n)===n){var A=u.inst,F=A.destroy;if(F!==void 0){A.destroy=void 0,b=i;var ne=l,le=F;try{le()}catch(he){yt(b,ne,he)}}}u=u.next}while(u!==v)}}catch(he){yt(i,i.return,he)}}function yx(n){var i=n.updateQueue;if(i!==null){var l=n.stateNode;try{cb(i,l)}catch(u){yt(n,n.return,u)}}}function vx(n,i,l){l.props=ja(n.type,n.memoizedProps),l.state=n.memoizedState;try{l.componentWillUnmount()}catch(u){yt(n,i,u)}}function Rl(n,i){try{var l=n.ref;if(l!==null){switch(n.tag){case 26:case 27:case 5:var u=n.stateNode;break;case 30:u=n.stateNode;break;default:u=n.stateNode}typeof l=="function"?n.refCleanup=l(u):l.current=u}}catch(b){yt(n,i,b)}}function qr(n,i){var l=n.ref,u=n.refCleanup;if(l!==null)if(typeof u=="function")try{u()}catch(b){yt(n,i,b)}finally{n.refCleanup=null,n=n.alternate,n!=null&&(n.refCleanup=null)}else if(typeof l=="function")try{l(null)}catch(b){yt(n,i,b)}else l.current=null}function _x(n){var i=n.type,l=n.memoizedProps,u=n.stateNode;try{e:switch(i){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(b){yt(n,n.return,b)}}function _f(n,i,l){try{var u=n.stateNode;G2(u,n.type,l,i),u[mn]=i}catch(b){yt(n,n.return,b)}}function wx(n){return n.tag===5||n.tag===3||n.tag===26||n.tag===27&&Qi(n.type)||n.tag===4}function wf(n){e:for(;;){for(;n.sibling===null;){if(n.return===null||wx(n.return))return null;n=n.return}for(n.sibling.return=n.return,n=n.sibling;n.tag!==5&&n.tag!==6&&n.tag!==18;){if(n.tag===27&&Qi(n.type)||n.flags&2||n.child===null||n.tag===4)continue e;n.child.return=n,n=n.child}if(!(n.flags&2))return n.stateNode}}function Ef(n,i,l){var u=n.tag;if(u===5||u===6)n=n.stateNode,i?(l.nodeType===9?l.body:l.nodeName==="HTML"?l.ownerDocument.body:l).insertBefore(n,i):(i=l.nodeType===9?l.body:l.nodeName==="HTML"?l.ownerDocument.body:l,i.appendChild(n),l=l._reactRootContainer,l!=null||i.onclick!==null||(i.onclick=_e));else if(u!==4&&(u===27&&Qi(n.type)&&(l=n.stateNode,i=null),n=n.child,n!==null))for(Ef(n,i,l),n=n.sibling;n!==null;)Ef(n,i,l),n=n.sibling}function Ec(n,i,l){var u=n.tag;if(u===5||u===6)n=n.stateNode,i?l.insertBefore(n,i):l.appendChild(n);else if(u!==4&&(u===27&&Qi(n.type)&&(l=n.stateNode),n=n.child,n!==null))for(Ec(n,i,l),n=n.sibling;n!==null;)Ec(n,i,l),n=n.sibling}function Ex(n){var i=n.stateNode,l=n.memoizedProps;try{for(var u=n.type,b=i.attributes;b.length;)i.removeAttributeNode(b[0]);_n(i,u,l),i[Ut]=n,i[mn]=l}catch(v){yt(n,n.return,v)}}var ui=!1,rn=!1,Nf=!1,Nx=typeof WeakSet=="function"?WeakSet:Set,gn=null;function N2(n,i){if(n=n.containerInfo,Gf=Fc,n=zg(n),gd(n)){if("selectionStart"in n)var l={start:n.selectionStart,end:n.selectionEnd};else e:{l=(l=n.ownerDocument)&&l.defaultView||window;var u=l.getSelection&&l.getSelection();if(u&&u.rangeCount!==0){l=u.anchorNode;var b=u.anchorOffset,v=u.focusNode;u=u.focusOffset;try{l.nodeType,v.nodeType}catch{l=null;break e}var A=0,F=-1,ne=-1,le=0,he=0,ge=n,oe=null;t:for(;;){for(var de;ge!==l||b!==0&&ge.nodeType!==3||(F=A+b),ge!==v||u!==0&&ge.nodeType!==3||(ne=A+u),ge.nodeType===3&&(A+=ge.nodeValue.length),(de=ge.firstChild)!==null;)oe=ge,ge=de;for(;;){if(ge===n)break t;if(oe===l&&++le===b&&(F=A),oe===v&&++he===u&&(ne=A),(de=ge.nextSibling)!==null)break;ge=oe,oe=ge.parentNode}ge=de}l=F===-1||ne===-1?null:{start:F,end:ne}}else l=null}l=l||{start:0,end:0}}else l=null;for(Vf={focusedElem:n,selectionRange:l},Fc=!1,gn=i;gn!==null;)if(i=gn,n=i.child,(i.subtreeFlags&1028)!==0&&n!==null)n.return=i,gn=n;else for(;gn!==null;){switch(i=gn,v=i.alternate,n=i.flags,i.tag){case 0:if((n&4)!==0&&(n=i.updateQueue,n=n!==null?n.events:null,n!==null))for(l=0;l title"))),_n(v,u,l),v[Ut]=n,Ft(v),u=v;break e;case"link":var A=M0("link","href",b).get(u+(l.href||""));if(A){for(var F=0;FNt&&(A=Nt,Nt=He,He=A);var ae=Dg(F,He),ie=Dg(F,Nt);if(ae&&ie&&(de.rangeCount!==1||de.anchorNode!==ae.node||de.anchorOffset!==ae.offset||de.focusNode!==ie.node||de.focusOffset!==ie.offset)){var se=ge.createRange();se.setStart(ae.node,ae.offset),de.removeAllRanges(),He>Nt?(de.addRange(se),de.extend(ie.node,ie.offset)):(se.setEnd(ie.node,ie.offset),de.addRange(se))}}}}for(ge=[],de=F;de=de.parentNode;)de.nodeType===1&&ge.push({element:de,left:de.scrollLeft,top:de.scrollTop});for(typeof F.focus=="function"&&F.focus(),F=0;Fl?32:l,O.T=null,l=Of,Of=null;var v=Xi,A=pi;if(dn=0,Cs=Xi=null,pi=0,(pt&6)!==0)throw Error(a(331));var F=pt;if(pt|=4,Lx(v.current),Rx(v,v.current,A,l),pt=F,Bl(0,!1),At&&typeof At.onPostCommitFiberRoot=="function")try{At.onPostCommitFiberRoot(Kt,v)}catch{}return!0}finally{H.p=b,O.T=u,Jx(n,i)}}function t0(n,i,l){i=ur(l,i),i=uf(n.stateNode,i,2),n=$i(n,i,2),n!==null&&(gt(n,2),Pr(n))}function yt(n,i,l){if(n.tag===3)t0(n,n,l);else for(;i!==null;){if(i.tag===3){t0(i,n,l);break}else if(i.tag===1){var u=i.stateNode;if(typeof i.type.getDerivedStateFromError=="function"||typeof u.componentDidCatch=="function"&&(Yi===null||!Yi.has(u))){n=ur(l,n),l=nx(2),u=$i(i,l,2),u!==null&&(rx(l,u,i,n),gt(u,2),Pr(u));break}}i=i.return}}function Lf(n,i,l){var u=n.pingCache;if(u===null){u=n.pingCache=new C2;var b=new Set;u.set(i,b)}else b=u.get(i),b===void 0&&(b=new Set,u.set(i,b));b.has(l)||(Cf=!0,b.add(l),n=R2.bind(null,n,i,l),i.then(n,n))}function R2(n,i,l){var u=n.pingCache;u!==null&&u.delete(i),n.pingedLanes|=n.suspendedLanes&l,n.warmLanes&=~l,kt===n&&(it&l)===l&&(Vt===4||Vt===3&&(it&62914560)===it&&300>ct()-kc?(pt&2)===0&&Ts(n,0):Tf|=l,ks===it&&(ks=0)),Pr(n)}function n0(n,i){i===0&&(i=Pe()),n=Ea(n,i),n!==null&&(gt(n,i),Pr(n))}function j2(n){var i=n.memoizedState,l=0;i!==null&&(l=i.retryLane),n0(n,l)}function D2(n,i){var l=0;switch(n.tag){case 31:case 13:var u=n.stateNode,b=n.memoizedState;b!==null&&(l=b.retryLane);break;case 19:u=n.stateNode;break;case 22:u=n.stateNode._retryCache;break;default:throw Error(a(314))}u!==null&&u.delete(i),n0(n,l)}function L2(n,i){return Pt(n,i)}var jc=null,Ms=null,zf=!1,Dc=!1,If=!1,Zi=0;function Pr(n){n!==Ms&&n.next===null&&(Ms===null?jc=Ms=n:Ms=Ms.next=n),Dc=!0,zf||(zf=!0,I2())}function Bl(n,i){if(!If&&Dc){If=!0;do for(var l=!1,u=jc;u!==null;){if(n!==0){var b=u.pendingLanes;if(b===0)var v=0;else{var A=u.suspendedLanes,F=u.pingedLanes;v=(1<<31-ut(42|n)+1)-1,v&=b&~(A&~F),v=v&201326741?v&201326741|1:v?v|2:0}v!==0&&(l=!0,s0(u,v))}else v=it,v=re(u,u===kt?v:0,u.cancelPendingCommit!==null||u.timeoutHandle!==-1),(v&3)===0||me(u,v)||(l=!0,s0(u,v));u=u.next}while(l);If=!1}}function z2(){r0()}function r0(){Dc=zf=!1;var n=0;Zi!==0&&Y2()&&(n=Zi);for(var i=ct(),l=null,u=jc;u!==null;){var b=u.next,v=i0(u,i);v===0?(u.next=null,l===null?jc=b:l.next=b,b===null&&(Ms=l)):(l=u,(n!==0||(v&3)!==0)&&(Dc=!0)),u=b}dn!==0&&dn!==5||Bl(n),Zi!==0&&(Zi=0)}function i0(n,i){for(var l=n.suspendedLanes,u=n.pingedLanes,b=n.expirationTimes,v=n.pendingLanes&-62914561;0F)break;var he=ne.transferSize,ge=ne.initiatorType;he&&m0(ge)&&(ne=ne.responseEnd,A+=he*(ne"u"?null:document;function k0(n,i,l){var u=Os;if(u&&typeof i=="string"&&i){var b=kn(i);b='link[rel="'+n+'"][href="'+b+'"]',typeof l=="string"&&(b+='[crossorigin="'+l+'"]'),S0.has(b)||(S0.add(b),n={rel:n,crossOrigin:l,href:i},u.querySelector(b)===null&&(i=u.createElement("link"),_n(i,"link",n),Ft(i),u.head.appendChild(i)))}}function nk(n){gi.D(n),k0("dns-prefetch",n,null)}function rk(n,i){gi.C(n,i),k0("preconnect",n,i)}function ik(n,i,l){gi.L(n,i,l);var u=Os;if(u&&n&&i){var b='link[rel="preload"][as="'+kn(i)+'"]';i==="image"&&l&&l.imageSrcSet?(b+='[imagesrcset="'+kn(l.imageSrcSet)+'"]',typeof l.imageSizes=="string"&&(b+='[imagesizes="'+kn(l.imageSizes)+'"]')):b+='[href="'+kn(n)+'"]';var v=b;switch(i){case"style":v=Rs(n);break;case"script":v=js(n)}gr.has(v)||(n=g({rel:"preload",href:i==="image"&&l&&l.imageSrcSet?void 0:n,as:i},l),gr.set(v,n),u.querySelector(b)!==null||i==="style"&&u.querySelector(ql(v))||i==="script"&&u.querySelector(Pl(v))||(i=u.createElement("link"),_n(i,"link",n),Ft(i),u.head.appendChild(i)))}}function ak(n,i){gi.m(n,i);var l=Os;if(l&&n){var u=i&&typeof i.as=="string"?i.as:"script",b='link[rel="modulepreload"][as="'+kn(u)+'"][href="'+kn(n)+'"]',v=b;switch(u){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":v=js(n)}if(!gr.has(v)&&(n=g({rel:"modulepreload",href:n},i),gr.set(v,n),l.querySelector(b)===null)){switch(u){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(l.querySelector(Pl(v)))return}u=l.createElement("link"),_n(u,"link",n),Ft(u),l.head.appendChild(u)}}}function sk(n,i,l){gi.S(n,i,l);var u=Os;if(u&&n){var b=Br(u).hoistableStyles,v=Rs(n);i=i||"default";var A=b.get(v);if(!A){var F={loading:0,preload:null};if(A=u.querySelector(ql(v)))F.loading=5;else{n=g({rel:"stylesheet",href:n,"data-precedence":i},l),(l=gr.get(v))&&Jf(n,l);var ne=A=u.createElement("link");Ft(ne),_n(ne,"link",n),ne._p=new Promise(function(le,he){ne.onload=le,ne.onerror=he}),ne.addEventListener("load",function(){F.loading|=1}),ne.addEventListener("error",function(){F.loading|=2}),F.loading|=4,Uc(A,i,u)}A={type:"stylesheet",instance:A,count:1,state:F},b.set(v,A)}}}function lk(n,i){gi.X(n,i);var l=Os;if(l&&n){var u=Br(l).hoistableScripts,b=js(n),v=u.get(b);v||(v=l.querySelector(Pl(b)),v||(n=g({src:n,async:!0},i),(i=gr.get(b))&&eh(n,i),v=l.createElement("script"),Ft(v),_n(v,"link",n),l.head.appendChild(v)),v={type:"script",instance:v,count:1,state:null},u.set(b,v))}}function ok(n,i){gi.M(n,i);var l=Os;if(l&&n){var u=Br(l).hoistableScripts,b=js(n),v=u.get(b);v||(v=l.querySelector(Pl(b)),v||(n=g({src:n,async:!0,type:"module"},i),(i=gr.get(b))&&eh(n,i),v=l.createElement("script"),Ft(v),_n(v,"link",n),l.head.appendChild(v)),v={type:"script",instance:v,count:1,state:null},u.set(b,v))}}function C0(n,i,l,u){var b=(b=Q.current)?Bc(b):null;if(!b)throw Error(a(446));switch(n){case"meta":case"title":return null;case"style":return typeof l.precedence=="string"&&typeof l.href=="string"?(i=Rs(l.href),l=Br(b).hoistableStyles,u=l.get(i),u||(u={type:"style",instance:null,count:0,state:null},l.set(i,u)),u):{type:"void",instance:null,count:0,state:null};case"link":if(l.rel==="stylesheet"&&typeof l.href=="string"&&typeof l.precedence=="string"){n=Rs(l.href);var v=Br(b).hoistableStyles,A=v.get(n);if(A||(b=b.ownerDocument||b,A={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},v.set(n,A),(v=b.querySelector(ql(n)))&&!v._p&&(A.instance=v,A.state.loading=5),gr.has(n)||(l={rel:"preload",as:"style",href:l.href,crossOrigin:l.crossOrigin,integrity:l.integrity,media:l.media,hrefLang:l.hrefLang,referrerPolicy:l.referrerPolicy},gr.set(n,l),v||ck(b,n,l,A.state))),i&&u===null)throw Error(a(528,""));return A}if(i&&u!==null)throw Error(a(529,""));return null;case"script":return i=l.async,l=l.src,typeof l=="string"&&i&&typeof i!="function"&&typeof i!="symbol"?(i=js(l),l=Br(b).hoistableScripts,u=l.get(i),u||(u={type:"script",instance:null,count:0,state:null},l.set(i,u)),u):{type:"void",instance:null,count:0,state:null};default:throw Error(a(444,n))}}function Rs(n){return'href="'+kn(n)+'"'}function ql(n){return'link[rel="stylesheet"]['+n+"]"}function T0(n){return g({},n,{"data-precedence":n.precedence,precedence:null})}function ck(n,i,l,u){n.querySelector('link[rel="preload"][as="style"]['+i+"]")?u.loading=1:(i=n.createElement("link"),u.preload=i,i.addEventListener("load",function(){return u.loading|=1}),i.addEventListener("error",function(){return u.loading|=2}),_n(i,"link",l),Ft(i),n.head.appendChild(i))}function js(n){return'[src="'+kn(n)+'"]'}function Pl(n){return"script[async]"+n}function A0(n,i,l){if(i.count++,i.instance===null)switch(i.type){case"style":var u=n.querySelector('style[data-href~="'+kn(l.href)+'"]');if(u)return i.instance=u,Ft(u),u;var b=g({},l,{"data-href":l.href,"data-precedence":l.precedence,href:null,precedence:null});return u=(n.ownerDocument||n).createElement("style"),Ft(u),_n(u,"style",b),Uc(u,l.precedence,n),i.instance=u;case"stylesheet":b=Rs(l.href);var v=n.querySelector(ql(b));if(v)return i.state.loading|=4,i.instance=v,Ft(v),v;u=T0(l),(b=gr.get(b))&&Jf(u,b),v=(n.ownerDocument||n).createElement("link"),Ft(v);var A=v;return A._p=new Promise(function(F,ne){A.onload=F,A.onerror=ne}),_n(v,"link",u),i.state.loading|=4,Uc(v,l.precedence,n),i.instance=v;case"script":return v=js(l.src),(b=n.querySelector(Pl(v)))?(i.instance=b,Ft(b),b):(u=l,(b=gr.get(v))&&(u=g({},l),eh(u,b)),n=n.ownerDocument||n,b=n.createElement("script"),Ft(b),_n(b,"link",u),n.head.appendChild(b),i.instance=b);case"void":return null;default:throw Error(a(443,i.type))}else i.type==="stylesheet"&&(i.state.loading&4)===0&&(u=i.instance,i.state.loading|=4,Uc(u,l.precedence,n));return i.instance}function Uc(n,i,l){for(var u=l.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),b=u.length?u[u.length-1]:null,v=b,A=0;A title"):null)}function uk(n,i,l){if(l===1||i.itemProp!=null)return!1;switch(n){case"meta":case"title":return!0;case"style":if(typeof i.precedence!="string"||typeof i.href!="string"||i.href==="")break;return!0;case"link":if(typeof i.rel!="string"||typeof i.href!="string"||i.href===""||i.onLoad||i.onError)break;switch(i.rel){case"stylesheet":return n=i.disabled,typeof i.precedence=="string"&&n==null;default:return!0}case"script":if(i.async&&typeof i.async!="function"&&typeof i.async!="symbol"&&!i.onLoad&&!i.onError&&i.src&&typeof i.src=="string")return!0}return!1}function R0(n){return!(n.type==="stylesheet"&&(n.state.loading&3)===0)}function dk(n,i,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 b=Rs(u.href),v=i.querySelector(ql(b));if(v){i=v._p,i!==null&&typeof i=="object"&&typeof i.then=="function"&&(n.count++,n=$c.bind(n),i.then(n,n)),l.state.loading|=4,l.instance=v,Ft(v);return}v=i.ownerDocument||i,u=T0(u),(b=gr.get(b))&&Jf(u,b),v=v.createElement("link"),Ft(v);var A=v;A._p=new Promise(function(F,ne){A.onload=F,A.onerror=ne}),_n(v,"link",u),l.instance=v}n.stylesheets===null&&(n.stylesheets=new Map),n.stylesheets.set(l,i),(i=l.state.preload)&&(l.state.loading&3)===0&&(n.count++,l=$c.bind(n),i.addEventListener("load",l),i.addEventListener("error",l))}}var th=0;function fk(n,i){return n.stylesheets&&n.count===0&&Pc(n,n.stylesheets),0th?50:800)+i);return n.unsuspend=l,function(){n.unsuspend=null,clearTimeout(u),clearTimeout(b)}}:null}function $c(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)Pc(this,this.stylesheets);else if(this.unsuspend){var n=this.unsuspend;this.unsuspend=null,n()}}}var qc=null;function Pc(n,i){n.stylesheets=null,n.unsuspend!==null&&(n.count++,qc=new Map,i.forEach(hk,n),qc=null,$c.call(n))}function hk(n,i){if(!(i.state.loading&4)){var l=qc.get(n);if(l)var u=l.get(null);else{l=new Map,qc.set(n,l);for(var b=n.querySelectorAll("link[data-precedence],style[data-precedence]"),v=0;v"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}return e(),uh.exports=Tk(),uh.exports}var Mk=Ak();/** - * @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 A_=(...e)=>e.filter((t,r,a)=>!!t&&t.trim()!==""&&a.indexOf(t)===r).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 Ok=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 Rk=e=>e.replace(/^([A-Z])|[\s-_]+(\w)/g,(t,r,a)=>a?a.toUpperCase():r.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 ny=e=>{const t=Rk(e);return t.charAt(0).toUpperCase()+t.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 jk={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 Dk=e=>{for(const t in e)if(t.startsWith("aria-")||t==="role"||t==="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 Lk=ee.forwardRef(({color:e="currentColor",size:t=24,strokeWidth:r=2,absoluteStrokeWidth:a,className:s="",children:o,iconNode:c,...d},h)=>ee.createElement("svg",{ref:h,...jk,width:t,height:t,stroke:e,strokeWidth:a?Number(r)*24/Number(t):r,className:A_("lucide",s),...!o&&!Dk(d)&&{"aria-hidden":"true"},...d},[...c.map(([f,m])=>ee.createElement(f,m)),...Array.isArray(o)?o:[o]]));/** - * @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 Me=(e,t)=>{const r=ee.forwardRef(({className:a,...s},o)=>ee.createElement(Lk,{ref:o,iconNode:t,className:A_(`lucide-${Ok(ny(e))}`,`lucide-${e}`,a),...s}));return r.displayName=ny(e),r};/** - * @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=[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]],xp=Me("arrow-left",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 Ik=[["path",{d:"M7 7h10v10",key:"1tivn9"}],["path",{d:"M7 17 17 7",key:"1vkiza"}]],M_=Me("arrow-up-right",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 Bk=[["path",{d:"m5 12 7-7 7 7",key:"hav0vg"}],["path",{d:"M12 19V5",key:"x0mq9r"}]],Uk=Me("arrow-up",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:"M4.929 4.929 19.07 19.071",key:"196cmz"}],["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]],O_=Me("ban",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 $k=[["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"}]],qk=Me("bell-off",$k);/** - * @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:"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"}]],Mo=Me("bot",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 Fk=[["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"}]],R_=Me("brain",Fk);/** - * @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=[["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"}]],Vk=Me("calendar-clock",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:"M18 6 7 17l-5-5",key:"116fxf"}],["path",{d:"m22 10-7.5 7.5L13 16",key:"ke71qq"}]],Xk=Me("check-check",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 Kk=[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]],Vs=Me("check",Kk);/** - * @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=[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]],mo=Me("chevron-down",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 Qk=[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]],Wk=Me("chevron-right",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 Jk=[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]],j_=Me("chevron-up",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 eC=[["path",{d:"m7 15 5 5 5-5",key:"1hf1tw"}],["path",{d:"m7 9 5-5 5 5",key:"sgt6xg"}]],tC=Me("chevrons-up-down",eC);/** - * @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 nC=[["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"}]],$u=Me("circle-alert",nC);/** - * @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 rC=[["path",{d:"M21.801 10A10 10 0 1 1 17 3.335",key:"yps3ct"}],["path",{d:"m9 11 3 3L22 4",key:"1pflzl"}]],D_=Me("circle-check-big",rC);/** - * @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 iC=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]],L_=Me("circle-check",iC);/** - * @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 aC=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["circle",{cx:"12",cy:"12",r:"1",key:"41hilf"}]],sC=Me("circle-dot",aC);/** - * @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 lC=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]],oC=Me("circle",lC);/** - * @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 cC=[["path",{d:"M12 6v6l4 2",key:"mmk7yg"}],["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]],z_=Me("clock",cC);/** - * @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 uC=[["path",{d:"m16 18 6-6-6-6",key:"eg8j8"}],["path",{d:"m8 6-6 6 6 6",key:"ppft3o"}]],dC=Me("code",uC);/** - * @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 fC=[["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"}]],po=Me("copy",fC);/** - * @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 hC=[["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"}]],mC=Me("crosshair",hC);/** - * @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 pC=[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"M10 14 21 3",key:"gplh6r"}],["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6",key:"a6xqqp"}]],ry=Me("external-link",pC);/** - * @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 gC=[["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"}]],bC=Me("eye",gC);/** - * @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 xC=[["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"}]],yC=Me("file-text",xC);/** - * @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 vC=[["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"}]],I_=Me("flag",vC);/** - * @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 _C=[["circle",{cx:"18",cy:"18",r:"3",key:"1xkwt0"}],["circle",{cx:"6",cy:"6",r:"3",key:"1lh9wr"}],["path",{d:"M6 21V9a9 9 0 0 0 9 9",key:"7kw0sc"}]],wC=Me("git-merge",_C);/** - * @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 EC=[["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"}]],NC=Me("git-pull-request",EC);/** - * @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 SC=[["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"}]],kC=Me("github",SC);/** - * @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 CC=[["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"}]],TC=Me("gitlab",CC);/** - * @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 AC=[["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"}]],B_=Me("globe",AC);/** - * @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 MC=[["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"}]],Ys=Me("history",MC);/** - * @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 OC=[["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"}]],RC=Me("image",OC);/** - * @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 jC=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 16v-4",key:"1dtifu"}],["path",{d:"M12 8h.01",key:"e9boi3"}]],DC=Me("info",jC);/** - * @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 LC=[["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"}]],zC=Me("list-todo",LC);/** - * @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 IC=[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]],Ps=Me("loader-circle",IC);/** - * @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 BC=[["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"}]],UC=Me("lock",BC);/** - * @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 HC=[["path",{d:"m16 17 5-5-5-5",key:"1bji2h"}],["path",{d:"M21 12H9",key:"dn1m92"}],["path",{d:"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4",key:"1uf3rs"}]],$C=Me("log-out",HC);/** - * @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 qC=[["path",{d:"m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7",key:"132q7q"}],["rect",{x:"2",y:"4",width:"20",height:"16",rx:"2",key:"izxlao"}]],yp=Me("mail",qC);/** - * @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 PC=[["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"}]],mh=Me("message-circle",PC);/** - * @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 FC=[["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"}]],GC=Me("pencil",FC);/** - * @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 VC=[["path",{d:"M12 22v-5",key:"1ega77"}],["path",{d:"M15 8V2",key:"18g5xt"}],["path",{d:"M17 8a1 1 0 0 1 1 1v4a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4V9a1 1 0 0 1 1-1z",key:"1xoxul"}],["path",{d:"M9 8V2",key:"14iosj"}]],U_=Me("plug",VC);/** - * @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 YC=[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]],XC=Me("plus",YC);/** - * @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 KC=[["path",{d:"M19.07 4.93A10 10 0 0 0 6.99 3.34",key:"z3du51"}],["path",{d:"M4 6h.01",key:"oypzma"}],["path",{d:"M2.29 9.62A10 10 0 1 0 21.31 8.35",key:"qzzz0"}],["path",{d:"M16.24 7.76A6 6 0 1 0 8.23 16.67",key:"1yjesh"}],["path",{d:"M12 18h.01",key:"mhygvu"}],["path",{d:"M17.99 11.66A6 6 0 0 1 15.77 16.67",key:"1u2y91"}],["circle",{cx:"12",cy:"12",r:"2",key:"1c9p78"}],["path",{d:"m13.41 10.59 5.66-5.66",key:"mhq4k0"}]],ZC=Me("radar",KC);/** - * @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 QC=[["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"}]],WC=Me("refresh-cw",QC);/** - * @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 JC=[["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"}]],eT=Me("rocket",JC);/** - * @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 tT=[["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"}]],nT=Me("rotate-ccw",tT);/** - * @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 rT=[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]],iT=Me("search",rT);/** - * @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 aT=[["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"}]],sT=Me("shield-alert",aT);/** - * @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 lT=[["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"}]],H_=Me("shield-check",lT);/** - * @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 oT=[["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"}]],cT=Me("shield",oT);/** - * @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 uT=[["path",{d:"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z",key:"1s2grr"}],["path",{d:"M20 2v4",key:"1rf3ol"}],["path",{d:"M22 4h-4",key:"gwowj6"}],["circle",{cx:"4",cy:"20",r:"2",key:"6kqj1y"}]],Um=Me("sparkles",uT);/** - * @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 dT=[["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"}]],fT=Me("sticky-note",dT);/** - * @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 hT=[["path",{d:"M12 19h8",key:"baeox8"}],["path",{d:"m4 17 6-6-6-6",key:"1yngyt"}]],$_=Me("terminal",hT);/** - * @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 mT=[["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"}]],pT=Me("trash-2",mT);/** - * @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 gT=[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]],bT=Me("triangle-alert",gT);/** - * @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 xT=[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["path",{d:"M16 3.128a4 4 0 0 1 0 7.744",key:"16gr8j"}],["path",{d:"M22 21v-2a4 4 0 0 0-3-3.87",key:"kshegd"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}]],yT=Me("users",xT);/** - * @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 vT=[["path",{d:"m21.64 3.64-1.28-1.28a1.21 1.21 0 0 0-1.72 0L2.36 18.64a1.21 1.21 0 0 0 0 1.72l1.28 1.28a1.2 1.2 0 0 0 1.72 0L21.64 5.36a1.2 1.2 0 0 0 0-1.72",key:"ul74o6"}],["path",{d:"m14 7 3 3",key:"1r5n42"}],["path",{d:"M5 6v4",key:"ilb8ba"}],["path",{d:"M19 14v4",key:"blhpug"}],["path",{d:"M10 2v2",key:"7u0qdc"}],["path",{d:"M7 8H3",key:"zfb6yr"}],["path",{d:"M21 16h-4",key:"1cnmox"}],["path",{d:"M11 3H9",key:"1obp7u"}]],_T=Me("wand-sparkles",vT);/** - * @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 wT=[["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"}]],Hm=Me("wrench",wT);/** - * @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 ET=[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]],vp=Me("x",ET);/** - * @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 NT=[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",key:"1xq2db"}]],ST=Me("zap",NT),kT={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"}},CT={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"}},q_={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 Qc(e){return e.original_severity!=null&&e.original_severity!==e.severity}const TT={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 AT(e){var r;if(!e)return null;const t=(r=e.split(".").pop())==null?void 0:r.toLowerCase();return t&&TT[t]||null}function _p(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 wp(e){try{await navigator.clipboard.writeText(e)}catch{const t=document.createElement("textarea");t.value=e,t.style.position="absolute",t.style.left="-9999px",document.body.appendChild(t),t.select(),document.execCommand("copy"),document.body.removeChild(t)}}const qu="https://app.strix.ai/api/auth/signup",MT="https://strix.ai/pricing",OT="ref=oss_viewer&utm_source=oss_viewer&utm_medium=local_viewer&utm_campaign=oss_viewer";function ha(e,t){const r=e.includes("?")?"&":"?";return`${e}${r}${OT}&utm_content=${encodeURIComponent(t)}`}function Tr(e,t={}){try{const r={event:e};for(const[s,o]of Object.entries(t))o!==void 0&&(r[s]=o);const a=JSON.stringify(r);typeof navigator<"u"&&navigator.sendBeacon?navigator.sendBeacon("/api/event",a):fetch("/api/event",{method:"POST",body:a,keepalive:!0})}catch{}}function jr(e,t){Tr("cta_clicked",{cta:e,surface:t})}function P_(e){var t,r,a="";if(typeof e=="string"||typeof e=="number")a+=e;else if(typeof e=="object")if(Array.isArray(e)){var s=e.length;for(t=0;t{const r=new Array(e.length+t.length);for(let a=0;a({classGroupId:e,validator:t}),F_=(e=new Map,t=null,r)=>({nextPart:e,validators:t,classGroupId:r}),_u="-",iy=[],LT="arbitrary..",zT=e=>{const t=BT(e),{conflictingClassGroups:r,conflictingClassGroupModifiers:a}=e;return{getClassGroupId:c=>{if(c.startsWith("[")&&c.endsWith("]"))return IT(c);const d=c.split(_u),h=d[0]===""&&d.length>1?1:0;return G_(d,h,t)},getConflictingClassGroupIds:(c,d)=>{if(d){const h=a[c],f=r[c];return h?f?jT(f,h):h:f||iy}return r[c]||iy}}},G_=(e,t,r)=>{if(e.length-t===0)return r.classGroupId;const s=e[t],o=r.nextPart.get(s);if(o){const f=G_(e,t+1,o);if(f)return f}const c=r.validators;if(c===null)return;const d=t===0?e.join(_u):e.slice(t).join(_u),h=c.length;for(let f=0;fe.slice(1,-1).indexOf(":")===-1?void 0:(()=>{const t=e.slice(1,-1),r=t.indexOf(":"),a=t.slice(0,r);return a?LT+a:void 0})(),BT=e=>{const{theme:t,classGroups:r}=e;return UT(r,t)},UT=(e,t)=>{const r=F_();for(const a in e){const s=e[a];Ep(s,r,a,t)}return r},Ep=(e,t,r,a)=>{const s=e.length;for(let o=0;o{if(typeof e=="string"){$T(e,t,r);return}if(typeof e=="function"){qT(e,t,r,a);return}PT(e,t,r,a)},$T=(e,t,r)=>{const a=e===""?t:V_(t,e);a.classGroupId=r},qT=(e,t,r,a)=>{if(FT(e)){Ep(e(a),t,r,a);return}t.validators===null&&(t.validators=[]),t.validators.push(DT(r,e))},PT=(e,t,r,a)=>{const s=Object.entries(e),o=s.length;for(let c=0;c{let r=e;const a=t.split(_u),s=a.length;for(let o=0;o"isThemeGetter"in e&&e.isThemeGetter===!0,GT=e=>{if(e<1)return{get:()=>{},set:()=>{}};let t=0,r=Object.create(null),a=Object.create(null);const s=(o,c)=>{r[o]=c,t++,t>e&&(t=0,a=r,r=Object.create(null))};return{get(o){let c=r[o];if(c!==void 0)return c;if((c=a[o])!==void 0)return s(o,c),c},set(o,c){o in r?r[o]=c:s(o,c)}}},$m="!",ay=":",VT=[],sy=(e,t,r,a,s)=>({modifiers:e,hasImportantModifier:t,baseClassName:r,maybePostfixModifierPosition:a,isExternal:s}),YT=e=>{const{prefix:t,experimentalParseClassName:r}=e;let a=s=>{const o=[];let c=0,d=0,h=0,f;const m=s.length;for(let N=0;Nh?f-h:void 0;return sy(o,x,y,_)};if(t){const s=t+ay,o=a;a=c=>c.startsWith(s)?o(c.slice(s.length)):sy(VT,!1,c,void 0,!0)}if(r){const s=a;a=o=>r({className:o,parseClassName:s})}return a},XT=e=>{const t=new Map;return e.orderSensitiveModifiers.forEach((r,a)=>{t.set(r,1e6+a)}),r=>{const a=[];let s=[];for(let o=0;o0&&(s.sort(),a.push(...s),s=[]),a.push(c)):s.push(c)}return s.length>0&&(s.sort(),a.push(...s)),a}},KT=e=>({cache:GT(e.cacheSize),parseClassName:YT(e),sortModifiers:XT(e),postfixLookupClassGroupIds:ZT(e),...zT(e)}),ZT=e=>{const t=Object.create(null),r=e.postfixLookupClassGroups;if(r)for(let a=0;a{const{parseClassName:r,getClassGroupId:a,getConflictingClassGroupIds:s,sortModifiers:o,postfixLookupClassGroupIds:c}=t,d=[],h=e.trim().split(QT);let f="";for(let m=h.length-1;m>=0;m-=1){const g=h[m],{isExternal:y,modifiers:x,hasImportantModifier:_,baseClassName:N,maybePostfixModifierPosition:S}=r(g);if(y){f=g+(f.length>0?" "+f:f);continue}let w=!!S,k;if(w){const U=N.substring(0,S);k=a(U);const I=k&&c[k]?a(N):void 0;I&&I!==k&&(k=I,w=!1)}else k=a(N);if(!k){if(!w){f=g+(f.length>0?" "+f:f);continue}if(k=a(N),!k){f=g+(f.length>0?" "+f:f);continue}w=!1}const E=x.length===0?"":x.length===1?x[0]:o(x).join(":"),M=_?E+$m:E,B=M+k;if(d.indexOf(B)>-1)continue;d.push(B);const R=s(k,w);for(let U=0;U0?" "+f:f)}return f},JT=(...e)=>{let t=0,r,a,s="";for(;t{if(typeof e=="string")return e;let t,r="";for(let a=0;a{let r,a,s,o;const c=h=>{const f=t.reduce((m,g)=>g(m),e());return r=KT(f),a=r.cache.get,s=r.cache.set,o=d,d(h)},d=h=>{const f=a(h);if(f)return f;const m=WT(h,r);return s(h,m),m};return o=c,(...h)=>o(JT(...h))},tA=[],fn=e=>{const t=r=>r[e]||tA;return t.isThemeGetter=!0,t},X_=/^\[(?:(\w[\w-]*):)?(.+)\]$/i,K_=/^\((?:(\w[\w-]*):)?(.+)\)$/i,nA=/^\d+(?:\.\d+)?\/\d+(?:\.\d+)?$/,rA=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,iA=/\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$/,aA=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/,sA=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,lA=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,ra=e=>nA.test(e),We=e=>!!e&&!Number.isNaN(Number(e)),Fr=e=>!!e&&Number.isInteger(Number(e)),ph=e=>e.endsWith("%")&&We(e.slice(0,-1)),bi=e=>rA.test(e),Z_=()=>!0,oA=e=>iA.test(e)&&!aA.test(e),Np=()=>!1,cA=e=>sA.test(e),uA=e=>lA.test(e),dA=e=>!ke(e)&&!Ce(e),fA=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)),hA=e=>ma(e,J_,Np),ke=e=>X_.test(e),za=e=>ma(e,ew,oA),ly=e=>ma(e,_A,We),mA=e=>ma(e,nw,Z_),pA=e=>ma(e,tw,Np),oy=e=>ma(e,Q_,Np),gA=e=>ma(e,W_,uA),Wc=e=>ma(e,rw,cA),Ce=e=>K_.test(e),Zl=e=>Wa(e,ew),bA=e=>Wa(e,tw),cy=e=>Wa(e,Q_),xA=e=>Wa(e,J_),yA=e=>Wa(e,W_),Jc=e=>Wa(e,rw,!0),vA=e=>Wa(e,nw,!0),ma=(e,t,r)=>{const a=X_.exec(e);return a?a[1]?t(a[1]):r(a[2]):!1},Wa=(e,t,r=!1)=>{const a=K_.exec(e);return a?a[1]?t(a[1]):r:!1},Q_=e=>e==="position"||e==="percentage",W_=e=>e==="image"||e==="url",J_=e=>e==="length"||e==="size"||e==="bg-size",ew=e=>e==="length",_A=e=>e==="number",tw=e=>e==="family-name",nw=e=>e==="number"||e==="weight",rw=e=>e==="shadow",wA=()=>{const e=fn("color"),t=fn("font"),r=fn("text"),a=fn("font-weight"),s=fn("tracking"),o=fn("leading"),c=fn("breakpoint"),d=fn("container"),h=fn("spacing"),f=fn("radius"),m=fn("shadow"),g=fn("inset-shadow"),y=fn("text-shadow"),x=fn("drop-shadow"),_=fn("blur"),N=fn("perspective"),S=fn("aspect"),w=fn("ease"),k=fn("animate"),E=()=>["auto","avoid","all","avoid-page","page","left","right","column"],M=()=>["center","top","bottom","left","right","top-left","left-top","top-right","right-top","bottom-right","right-bottom","bottom-left","left-bottom"],B=()=>[...M(),Ce,ke],R=()=>["auto","hidden","clip","visible","scroll"],U=()=>["auto","contain","none"],I=()=>[Ce,ke,h],X=()=>[ra,"full","auto",...I()],j=()=>[Fr,"none","subgrid",Ce,ke],z=()=>["auto",{span:["full",Fr,Ce,ke]},Fr,Ce,ke],V=()=>[Fr,"auto",Ce,ke],P=()=>["auto","min","max","fr",Ce,ke],T=()=>["start","end","center","between","around","evenly","stretch","baseline","center-safe","end-safe"],$=()=>["start","end","center","stretch","center-safe","end-safe"],O=()=>["auto",...I()],H=()=>[ra,"auto","full","dvw","dvh","lvw","lvh","svw","svh","min","max","fit",...I()],K=()=>[ra,"screen","full","dvw","lvw","svw","min","max","fit",...I()],Z=()=>[ra,"screen","full","lh","dvh","lvh","svh","min","max","fit",...I()],C=()=>[e,Ce,ke],D=()=>[...M(),cy,oy,{position:[Ce,ke]}],Y=()=>["no-repeat",{repeat:["","x","y","space","round"]}],L=()=>["auto","cover","contain",xA,hA,{size:[Ce,ke]}],G=()=>[ph,Zl,za],q=()=>["","none","full",f,Ce,ke],Q=()=>["",We,Zl,za],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"],te=()=>[We,ph,cy,oy],ce=()=>["","none",_,Ce,ke],fe=()=>["none",We,Ce,ke],be=()=>["none",We,Ce,ke],we=()=>[We,Ce,ke],Ne=()=>[ra,"full",...I()];return{cacheSize:500,theme:{animate:["spin","ping","pulse","bounce"],aspect:["video"],blur:[bi],breakpoint:[bi],color:[Z_],container:[bi],"drop-shadow":[bi],ease:["in","out","in-out"],font:[dA],"font-weight":["thin","extralight","light","normal","medium","semibold","bold","extrabold","black"],"inset-shadow":[bi],leading:["none","tight","snug","normal","relaxed","loose"],perspective:["dramatic","near","normal","midrange","distant","none"],radius:[bi],shadow:[bi],spacing:["px",We],text:[bi],"text-shadow":[bi],tracking:["tighter","tight","normal","wide","wider","widest"]},classGroups:{aspect:[{aspect:["auto","square",ra,ke,Ce,S]}],container:["container"],"container-type":[{"@container":["","normal","size",Ce,ke]}],"container-named":[fA],columns:[{columns:[We,ke,Ce,d]}],"break-after":[{"break-after":E()}],"break-before":[{"break-before":E()}],"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:U()}],"overscroll-x":[{"overscroll-x":U()}],"overscroll-y":[{"overscroll-y":U()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:X()}],"inset-x":[{"inset-x":X()}],"inset-y":[{"inset-y":X()}],start:[{"inset-s":X(),start:X()}],end:[{"inset-e":X(),end:X()}],"inset-bs":[{"inset-bs":X()}],"inset-be":[{"inset-be":X()}],top:[{top:X()}],right:[{right:X()}],bottom:[{bottom:X()}],left:[{left:X()}],visibility:["visible","invisible","collapse"],z:[{z:[Fr,"auto",Ce,ke]}],basis:[{basis:[ra,"full","auto",d,...I()]}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["nowrap","wrap","wrap-reverse"]}],flex:[{flex:[We,ra,"auto","initial","none",ke]}],grow:[{grow:["",We,Ce,ke]}],shrink:[{shrink:["",We,Ce,ke]}],order:[{order:[Fr,"first","last","none",Ce,ke]}],"grid-cols":[{"grid-cols":j()}],"col-start-end":[{col:z()}],"col-start":[{"col-start":V()}],"col-end":[{"col-end":V()}],"grid-rows":[{"grid-rows":j()}],"row-start-end":[{row:z()}],"row-start":[{"row-start":V()}],"row-end":[{"row-end":V()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":P()}],"auto-rows":[{"auto-rows":P()}],gap:[{gap:I()}],"gap-x":[{"gap-x":I()}],"gap-y":[{"gap-y":I()}],"justify-content":[{justify:[...T(),"normal"]}],"justify-items":[{"justify-items":[...$(),"normal"]}],"justify-self":[{"justify-self":["auto",...$()]}],"align-content":[{content:["normal",...T()]}],"align-items":[{items:[...$(),{baseline:["","last"]}]}],"align-self":[{self:["auto",...$(),{baseline:["","last"]}]}],"place-content":[{"place-content":T()}],"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:O()}],mx:[{mx:O()}],my:[{my:O()}],ms:[{ms:O()}],me:[{me:O()}],mbs:[{mbs:O()}],mbe:[{mbe:O()}],mt:[{mt:O()}],mr:[{mr:O()}],mb:[{mb:O()}],ml:[{ml:O()}],"space-x":[{"space-x":I()}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":I()}],"space-y-reverse":["space-y-reverse"],size:[{size:H()}],"inline-size":[{inline:["auto",...K()]}],"min-inline-size":[{"min-inline":["auto",...K()]}],"max-inline-size":[{"max-inline":["none",...K()]}],"block-size":[{block:["auto",...Z()]}],"min-block-size":[{"min-block":["auto",...Z()]}],"max-block-size":[{"max-block":["none",...Z()]}],w:[{w:[d,"screen",...H()]}],"min-w":[{"min-w":[d,"screen","none",...H()]}],"max-w":[{"max-w":[d,"screen","none","prose",{screen:[c]},...H()]}],h:[{h:["screen","lh",...H()]}],"min-h":[{"min-h":["screen","lh","none",...H()]}],"max-h":[{"max-h":["screen","lh",...H()]}],"font-size":[{text:["base",r,Zl,za]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:[a,vA,mA]}],"font-stretch":[{"font-stretch":["ultra-condensed","extra-condensed","condensed","semi-condensed","normal","semi-expanded","expanded","extra-expanded","ultra-expanded",ph,ke]}],"font-family":[{font:[bA,pA,t]}],"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:[s,Ce,ke]}],"line-clamp":[{"line-clamp":[We,"none",Ce,ly]}],leading:[{leading:[o,...I()]}],"list-image":[{"list-image":["none",Ce,ke]}],"list-style-position":[{list:["inside","outside"]}],"list-style-type":[{list:["disc","decimal","none",Ce,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",Ce,za]}],"text-decoration-color":[{decoration:C()}],"underline-offset":[{"underline-offset":[We,"auto",Ce,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:[Fr,Ce,ke]}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",Ce,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",Ce,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:D()}],"bg-repeat":[{bg:Y()}],"bg-size":[{bg:L()}],"bg-image":[{bg:["none",{linear:[{to:["t","tr","r","br","b","bl","l","tl"]},Fr,Ce,ke],radial:["",Ce,ke],conic:[Fr,Ce,ke]},yA,gA]}],"bg-color":[{bg:C()}],"gradient-from-pos":[{from:G()}],"gradient-via-pos":[{via:G()}],"gradient-to-pos":[{to:G()}],"gradient-from":[{from:C()}],"gradient-via":[{via:C()}],"gradient-to":[{to:C()}],rounded:[{rounded:q()}],"rounded-s":[{"rounded-s":q()}],"rounded-e":[{"rounded-e":q()}],"rounded-t":[{"rounded-t":q()}],"rounded-r":[{"rounded-r":q()}],"rounded-b":[{"rounded-b":q()}],"rounded-l":[{"rounded-l":q()}],"rounded-ss":[{"rounded-ss":q()}],"rounded-se":[{"rounded-se":q()}],"rounded-ee":[{"rounded-ee":q()}],"rounded-es":[{"rounded-es":q()}],"rounded-tl":[{"rounded-tl":q()}],"rounded-tr":[{"rounded-tr":q()}],"rounded-br":[{"rounded-br":q()}],"rounded-bl":[{"rounded-bl":q()}],"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,Ce,ke]}],"outline-w":[{outline:["",We,Zl,za]}],"outline-color":[{outline:C()}],shadow:[{shadow:["","none",m,Jc,Wc]}],"shadow-color":[{shadow:C()}],"inset-shadow":[{"inset-shadow":["none",g,Jc,Wc]}],"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,za]}],"ring-offset-color":[{"ring-offset":C()}],"inset-ring-w":[{"inset-ring":Q()}],"inset-ring-color":[{"inset-ring":C()}],"text-shadow":[{"text-shadow":["none",y,Jc,Wc]}],"text-shadow-color":[{"text-shadow":C()}],opacity:[{opacity:[We,Ce,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":te()}],"mask-image-linear-to-pos":[{"mask-linear-to":te()}],"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":te()}],"mask-image-t-to-pos":[{"mask-t-to":te()}],"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":te()}],"mask-image-r-to-pos":[{"mask-r-to":te()}],"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":te()}],"mask-image-b-to-pos":[{"mask-b-to":te()}],"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":te()}],"mask-image-l-to-pos":[{"mask-l-to":te()}],"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":te()}],"mask-image-x-to-pos":[{"mask-x-to":te()}],"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":te()}],"mask-image-y-to-pos":[{"mask-y-to":te()}],"mask-image-y-from-color":[{"mask-y-from":C()}],"mask-image-y-to-color":[{"mask-y-to":C()}],"mask-image-radial":[{"mask-radial":[Ce,ke]}],"mask-image-radial-from-pos":[{"mask-radial-from":te()}],"mask-image-radial-to-pos":[{"mask-radial-to":te()}],"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":M()}],"mask-image-conic-pos":[{"mask-conic":[We]}],"mask-image-conic-from-pos":[{"mask-conic-from":te()}],"mask-image-conic-to-pos":[{"mask-conic-to":te()}],"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:D()}],"mask-repeat":[{mask:Y()}],"mask-size":[{mask:L()}],"mask-type":[{"mask-type":["alpha","luminance"]}],"mask-image":[{mask:["none",Ce,ke]}],filter:[{filter:["","none",Ce,ke]}],blur:[{blur:ce()}],brightness:[{brightness:[We,Ce,ke]}],contrast:[{contrast:[We,Ce,ke]}],"drop-shadow":[{"drop-shadow":["","none",x,Jc,Wc]}],"drop-shadow-color":[{"drop-shadow":C()}],grayscale:[{grayscale:["",We,Ce,ke]}],"hue-rotate":[{"hue-rotate":[We,Ce,ke]}],invert:[{invert:["",We,Ce,ke]}],saturate:[{saturate:[We,Ce,ke]}],sepia:[{sepia:["",We,Ce,ke]}],"backdrop-filter":[{"backdrop-filter":["","none",Ce,ke]}],"backdrop-blur":[{"backdrop-blur":ce()}],"backdrop-brightness":[{"backdrop-brightness":[We,Ce,ke]}],"backdrop-contrast":[{"backdrop-contrast":[We,Ce,ke]}],"backdrop-grayscale":[{"backdrop-grayscale":["",We,Ce,ke]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[We,Ce,ke]}],"backdrop-invert":[{"backdrop-invert":["",We,Ce,ke]}],"backdrop-opacity":[{"backdrop-opacity":[We,Ce,ke]}],"backdrop-saturate":[{"backdrop-saturate":[We,Ce,ke]}],"backdrop-sepia":[{"backdrop-sepia":["",We,Ce,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",Ce,ke]}],"transition-behavior":[{transition:["normal","discrete"]}],duration:[{duration:[We,"initial",Ce,ke]}],ease:[{ease:["linear","initial",w,Ce,ke]}],delay:[{delay:[We,Ce,ke]}],animate:[{animate:["none",k,Ce,ke]}],backface:[{backface:["hidden","visible"]}],perspective:[{perspective:[N,Ce,ke]}],"perspective-origin":[{"perspective-origin":B()}],rotate:[{rotate:fe()}],"rotate-x":[{"rotate-x":fe()}],"rotate-y":[{"rotate-y":fe()}],"rotate-z":[{"rotate-z":fe()}],scale:[{scale:be()}],"scale-x":[{"scale-x":be()}],"scale-y":[{"scale-y":be()}],"scale-z":[{"scale-z":be()}],"scale-3d":["scale-3d"],skew:[{skew:we()}],"skew-x":[{"skew-x":we()}],"skew-y":[{"skew-y":we()}],transform:[{transform:[Ce,ke,"","none","gpu","cpu"]}],"transform-origin":[{origin:B()}],"transform-style":[{transform:["3d","flat"]}],translate:[{translate:Ne()}],"translate-x":[{"translate-x":Ne()}],"translate-y":[{"translate-y":Ne()}],"translate-z":[{"translate-z":Ne()}],"translate-none":["translate-none"],zoom:[{zoom:[Fr,Ce,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",Ce,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",Ce,ke]}],fill:[{fill:["none",...C()]}],"stroke-w":[{stroke:[We,Zl,za,ly]}],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"]}},EA=eA(wA);function Mr(...e){return EA(RT(e))}function NA(e){return new Date(e).toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric"})}function qm(e){const t=new Date(e),a=Math.floor((new Date().getTime()-t.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`:NA(e)}function SA(e){return`STRIX-${e}`}function Ls(e){return new Intl.NumberFormat("en-US").format(e)}function kA(e,t){const r={};return(e[e.length-1]===""?[...e,""]:e).join((r.padRight?" ":"")+","+(r.padLeft===!1?"":" ")).trim()}const CA=/^[$_\p{ID_Start}][$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,TA=/^[$_\p{ID_Start}][-$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,AA={};function uy(e,t){return(AA.jsx?TA:CA).test(e)}const MA=/[ \t\n\f\r]/g;function OA(e){return typeof e=="object"?e.type==="text"?dy(e.value):!1:dy(e)}function dy(e){return e.replace(MA,"")===""}class Oo{constructor(t,r,a){this.normal=r,this.property=t,a&&(this.space=a)}}Oo.prototype.normal={};Oo.prototype.property={};Oo.prototype.space=void 0;function iw(e,t){const r={},a={};for(const s of e)Object.assign(r,s.property),Object.assign(a,s.normal);return new Oo(r,a,t)}function Pm(e){return e.toLowerCase()}class Vn{constructor(t,r){this.attribute=r,this.property=t}}Vn.prototype.attribute="";Vn.prototype.booleanish=!1;Vn.prototype.boolean=!1;Vn.prototype.commaOrSpaceSeparated=!1;Vn.prototype.commaSeparated=!1;Vn.prototype.defined=!1;Vn.prototype.mustUseProperty=!1;Vn.prototype.number=!1;Vn.prototype.overloadedBoolean=!1;Vn.prototype.property="";Vn.prototype.spaceSeparated=!1;Vn.prototype.space=void 0;let RA=0;const Ge=Ja(),an=Ja(),Fm=Ja(),ve=Ja(),Ct=Ja(),qa=Ja(),rr=Ja();function Ja(){return 2**++RA}const Gm=Object.freeze(Object.defineProperty({__proto__:null,boolean:Ge,booleanish:an,commaOrSpaceSeparated:rr,commaSeparated:qa,number:ve,overloadedBoolean:Fm,spaceSeparated:Ct},Symbol.toStringTag,{value:"Module"})),gh=Object.keys(Gm);class Sp extends Vn{constructor(t,r,a,s){let o=-1;if(super(t,r),fy(this,"space",s),typeof a=="number")for(;++o4&&r.slice(0,4)==="data"&&IA.test(t)){if(t.charAt(4)==="-"){const o=t.slice(5).replace(hy,HA);a="data"+o.charAt(0).toUpperCase()+o.slice(1)}else{const o=t.slice(4);if(!hy.test(o)){let c=o.replace(zA,UA);c.charAt(0)!=="-"&&(c="-"+c),t="data"+c}}s=Sp}return new s(a,t)}function UA(e){return"-"+e.toLowerCase()}function HA(e){return e.charAt(1).toUpperCase()}const $A=iw([aw,jA,ow,cw,uw],"html"),kp=iw([aw,DA,ow,cw,uw],"svg");function qA(e){return e.join(" ").trim()}var zs={},bh,my;function PA(){if(my)return bh;my=1;var e=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//g,t=/\n/g,r=/^\s*/,a=/^(\*?[-#/*\\\w]+(\[[0-9a-z_-]+\])?)\s*/,s=/^:\s*/,o=/^((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};])+)/,c=/^[;\s]*/,d=/^\s+|\s+$/g,h=` -`,f="/",m="*",g="",y="comment",x="declaration";function _(S,w){if(typeof S!="string")throw new TypeError("First argument must be a string");if(!S)return[];w=w||{};var k=1,E=1;function M(T){var $=T.match(t);$&&(k+=$.length);var O=T.lastIndexOf(h);E=~O?T.length-O:E+T.length}function B(){var T={line:k,column:E};return function($){return $.position=new R(T),X(),$}}function R(T){this.start=T,this.end={line:k,column:E},this.source=w.source}R.prototype.content=S;function U(T){var $=new Error(w.source+":"+k+":"+E+": "+T);if($.reason=T,$.filename=w.source,$.line=k,$.column=E,$.source=S,!w.silent)throw $}function I(T){var $=T.exec(S);if($){var O=$[0];return M(O),S=S.slice(O.length),$}}function X(){I(r)}function j(T){var $;for(T=T||[];$=z();)$!==!1&&T.push($);return T}function z(){var T=B();if(!(f!=S.charAt(0)||m!=S.charAt(1))){for(var $=2;g!=S.charAt($)&&(m!=S.charAt($)||f!=S.charAt($+1));)++$;if($+=2,g===S.charAt($-1))return U("End of comment missing");var O=S.slice(2,$-2);return E+=2,M(O),S=S.slice($),E+=2,T({type:y,comment:O})}}function V(){var T=B(),$=I(a);if($){if(z(),!I(s))return U("property missing ':'");var O=I(o),H=T({type:x,property:N($[0].replace(e,g)),value:O?N(O[0].replace(e,g)):g});return I(c),H}}function P(){var T=[];j(T);for(var $;$=V();)$!==!1&&(T.push($),j(T));return T}return X(),P()}function N(S){return S?S.replace(d,g):g}return bh=_,bh}var py;function FA(){if(py)return zs;py=1;var e=zs&&zs.__importDefault||function(a){return a&&a.__esModule?a:{default:a}};Object.defineProperty(zs,"__esModule",{value:!0}),zs.default=r;const t=e(PA());function r(a,s){let o=null;if(!a||typeof a!="string")return o;const c=(0,t.default)(a),d=typeof s=="function";return c.forEach(h=>{if(h.type!=="declaration")return;const{property:f,value:m}=h;d?s(f,m,h):m&&(o=o||{},o[f]=m)}),o}return zs}var Ql={},gy;function GA(){if(gy)return Ql;gy=1,Object.defineProperty(Ql,"__esModule",{value:!0}),Ql.camelCase=void 0;var e=/^--[a-zA-Z0-9_-]+$/,t=/-([a-z])/g,r=/^[^-]+$/,a=/^-(webkit|moz|ms|o|khtml)-/,s=/^-(ms)-/,o=function(f){return!f||r.test(f)||e.test(f)},c=function(f,m){return m.toUpperCase()},d=function(f,m){return"".concat(m,"-")},h=function(f,m){return m===void 0&&(m={}),o(f)?f:(f=f.toLowerCase(),m.reactCompat?f=f.replace(s,d):f=f.replace(a,d),f.replace(t,c))};return Ql.camelCase=h,Ql}var Wl,by;function VA(){if(by)return Wl;by=1;var e=Wl&&Wl.__importDefault||function(s){return s&&s.__esModule?s:{default:s}},t=e(FA()),r=GA();function a(s,o){var c={};return!s||typeof s!="string"||(0,t.default)(s,function(d,h){d&&h&&(c[(0,r.camelCase)(d,o)]=h)}),c}return a.default=a,Wl=a,Wl}var YA=VA();const XA=To(YA),dw=fw("end"),Cp=fw("start");function fw(e){return t;function t(r){const a=r&&r.position&&r.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 KA(e){const t=Cp(e),r=dw(e);if(t&&r)return{start:t,end:r}}function oo(e){return!e||typeof e!="object"?"":"position"in e||"type"in e?xy(e.position):"start"in e||"end"in e?xy(e):"line"in e||"column"in e?Vm(e):""}function Vm(e){return yy(e&&e.line)+":"+yy(e&&e.column)}function xy(e){return Vm(e&&e.start)+"-"+Vm(e&&e.end)}function yy(e){return e&&typeof e=="number"?e:1}class Mn extends Error{constructor(t,r,a){super(),typeof r=="string"&&(a=r,r=void 0);let s="",o={},c=!1;if(r&&("line"in r&&"column"in r?o={place:r}:"start"in r&&"end"in r?o={place:r}:"type"in r?o={ancestors:[r],place:r.position}:o={...r}),typeof t=="string"?s=t:!o.cause&&t&&(c=!0,s=t.message,o.cause=t),!o.ruleId&&!o.source&&typeof a=="string"){const h=a.indexOf(":");h===-1?o.ruleId=a:(o.source=a.slice(0,h),o.ruleId=a.slice(h+1))}if(!o.place&&o.ancestors&&o.ancestors){const h=o.ancestors[o.ancestors.length-1];h&&(o.place=h.position)}const d=o.place&&"start"in o.place?o.place.start:o.place;this.ancestors=o.ancestors||void 0,this.cause=o.cause||void 0,this.column=d?d.column:void 0,this.fatal=void 0,this.file="",this.message=s,this.line=d?d.line:void 0,this.name=oo(o.place)||"1:1",this.place=o.place||void 0,this.reason=this.message,this.ruleId=o.ruleId||void 0,this.source=o.source||void 0,this.stack=c&&o.cause&&typeof o.cause.stack=="string"?o.cause.stack:"",this.actual=void 0,this.expected=void 0,this.note=void 0,this.url=void 0}}Mn.prototype.file="";Mn.prototype.name="";Mn.prototype.reason="";Mn.prototype.message="";Mn.prototype.stack="";Mn.prototype.column=void 0;Mn.prototype.line=void 0;Mn.prototype.ancestors=void 0;Mn.prototype.cause=void 0;Mn.prototype.fatal=void 0;Mn.prototype.place=void 0;Mn.prototype.ruleId=void 0;Mn.prototype.source=void 0;const Tp={}.hasOwnProperty,ZA=new Map,QA=/[A-Z]/g,WA=new Set(["table","tbody","thead","tfoot","tr"]),JA=new Set(["td","th"]),hw="https://github.com/syntax-tree/hast-util-to-jsx-runtime";function eM(e,t){if(!t||t.Fragment===void 0)throw new TypeError("Expected `Fragment` in options");const r=t.filePath||void 0;let a;if(t.development){if(typeof t.jsxDEV!="function")throw new TypeError("Expected `jsxDEV` in options when `development: true`");a=oM(r,t.jsxDEV)}else{if(typeof t.jsx!="function")throw new TypeError("Expected `jsx` in production options");if(typeof t.jsxs!="function")throw new TypeError("Expected `jsxs` in production options");a=lM(r,t.jsx,t.jsxs)}const s={Fragment:t.Fragment,ancestors:[],components:t.components||{},create:a,elementAttributeNameCase:t.elementAttributeNameCase||"react",evaluater:t.createEvaluater?t.createEvaluater():void 0,filePath:r,ignoreInvalidStyle:t.ignoreInvalidStyle||!1,passKeys:t.passKeys!==!1,passNode:t.passNode||!1,schema:t.space==="svg"?kp:$A,stylePropertyNameCase:t.stylePropertyNameCase||"dom",tableCellAlignToStyle:t.tableCellAlignToStyle!==!1},o=mw(s,e,void 0);return o&&typeof o!="string"?o:s.create(e,s.Fragment,{children:o||void 0},void 0)}function mw(e,t,r){if(t.type==="element")return tM(e,t,r);if(t.type==="mdxFlowExpression"||t.type==="mdxTextExpression")return nM(e,t);if(t.type==="mdxJsxFlowElement"||t.type==="mdxJsxTextElement")return iM(e,t,r);if(t.type==="mdxjsEsm")return rM(e,t);if(t.type==="root")return aM(e,t,r);if(t.type==="text")return sM(e,t)}function tM(e,t,r){const a=e.schema;let s=a;t.tagName.toLowerCase()==="svg"&&a.space==="html"&&(s=kp,e.schema=s),e.ancestors.push(t);const o=gw(e,t.tagName,!1),c=cM(e,t);let d=Mp(e,t);return WA.has(t.tagName)&&(d=d.filter(function(h){return typeof h=="string"?!OA(h):!0})),pw(e,c,o,t),Ap(c,d),e.ancestors.pop(),e.schema=a,e.create(t,o,c,r)}function nM(e,t){if(t.data&&t.data.estree&&e.evaluater){const a=t.data.estree.body[0];return a.type,e.evaluater.evaluateExpression(a.expression)}go(e,t.position)}function rM(e,t){if(t.data&&t.data.estree&&e.evaluater)return e.evaluater.evaluateProgram(t.data.estree);go(e,t.position)}function iM(e,t,r){const a=e.schema;let s=a;t.name==="svg"&&a.space==="html"&&(s=kp,e.schema=s),e.ancestors.push(t);const o=t.name===null?e.Fragment:gw(e,t.name,!0),c=uM(e,t),d=Mp(e,t);return pw(e,c,o,t),Ap(c,d),e.ancestors.pop(),e.schema=a,e.create(t,o,c,r)}function aM(e,t,r){const a={};return Ap(a,Mp(e,t)),e.create(t,e.Fragment,a,r)}function sM(e,t){return t.value}function pw(e,t,r,a){typeof r!="string"&&r!==e.Fragment&&e.passNode&&(t.node=a)}function Ap(e,t){if(t.length>0){const r=t.length>1?t:t[0];r&&(e.children=r)}}function lM(e,t,r){return a;function a(s,o,c,d){const f=Array.isArray(c.children)?r:t;return d?f(o,c,d):f(o,c)}}function oM(e,t){return r;function r(a,s,o,c){const d=Array.isArray(o.children),h=Cp(a);return t(s,o,c,d,{columnNumber:h?h.column-1:void 0,fileName:e,lineNumber:h?h.line:void 0},void 0)}}function cM(e,t){const r={};let a,s;for(s in t.properties)if(s!=="children"&&Tp.call(t.properties,s)){const o=dM(e,s,t.properties[s]);if(o){const[c,d]=o;e.tableCellAlignToStyle&&c==="align"&&typeof d=="string"&&JA.has(t.tagName)?a=d:r[c]=d}}if(a){const o=r.style||(r.style={});o[e.stylePropertyNameCase==="css"?"text-align":"textAlign"]=a}return r}function uM(e,t){const r={};for(const a of t.attributes)if(a.type==="mdxJsxExpressionAttribute")if(a.data&&a.data.estree&&e.evaluater){const o=a.data.estree.body[0];o.type;const c=o.expression;c.type;const d=c.properties[0];d.type,Object.assign(r,e.evaluater.evaluateExpression(d.argument))}else go(e,t.position);else{const s=a.name;let o;if(a.value&&typeof a.value=="object")if(a.value.data&&a.value.data.estree&&e.evaluater){const d=a.value.data.estree.body[0];d.type,o=e.evaluater.evaluateExpression(d.expression)}else go(e,t.position);else o=a.value===null?!0:a.value;r[s]=o}return r}function Mp(e,t){const r=[];let a=-1;const s=e.passKeys?new Map:ZA;for(;++as?0:s+t:t=t>s?s:t,r=r>0?r:0,a.length<1e4)c=Array.from(a),c.unshift(t,r),e.splice(...c);else for(r&&e.splice(t,r);o0?(ar(e,e.length,0,t),e):t}const wy={}.hasOwnProperty;function xw(e){const t={};let r=-1;for(;++r13&&r<32||r>126&&r<160||r>55295&&r<57344||r>64975&&r<65008||(r&65535)===65535||(r&65535)===65534||r>1114111?"�":String.fromCodePoint(r)}function Dr(e){return e.replace(/[\t\n\r ]+/g," ").replace(/^ | $/g,"").toLowerCase().toUpperCase()}const Ln=pa(/[A-Za-z]/),Tn=pa(/[\dA-Za-z]/),vM=pa(/[#-'*+\--9=?A-Z^-~]/);function wu(e){return e!==null&&(e<32||e===127)}const Ym=pa(/\d/),_M=pa(/[\dA-Fa-f]/),wM=pa(/[!-/:-@[-`{-~]/);function Be(e){return e!==null&&e<-2}function Tt(e){return e!==null&&(e<0||e===32)}function tt(e){return e===-2||e===-1||e===32}const Pu=pa(new RegExp("\\p{P}|\\p{S}","u")),Va=pa(/\s/);function pa(e){return t;function t(r){return r!==null&&r>-1&&e.test(String.fromCharCode(r))}}function rl(e){const t=[];let r=-1,a=0,s=0;for(;++r55295&&o<57344){const d=e.charCodeAt(r+1);o<56320&&d>56319&&d<57344?(c=String.fromCharCode(o,d),s=1):c="�"}else c=String.fromCharCode(o);c&&(t.push(e.slice(a,r),encodeURIComponent(c)),a=r+s+1,c=""),s&&(r+=s,s=0)}return t.join("")+e.slice(a)}function ot(e,t,r,a){const s=a?a-1:Number.POSITIVE_INFINITY;let o=0;return c;function c(h){return tt(h)?(e.enter(r),d(h)):t(h)}function d(h){return tt(h)&&o++c))return;const U=t.events.length;let I=U,X,j;for(;I--;)if(t.events[I][0]==="exit"&&t.events[I][1].type==="chunkFlow"){if(X){j=t.events[I][1].end;break}X=!0}for(w(a),R=U;RE;){const B=r[M];t.containerState=B[1],B[0].exit.call(t,e)}r.length=E}function k(){s.write([null]),o=void 0,s=void 0,t.containerState._closeFlow=void 0}}function CM(e,t,r){return ot(e,e.attempt(this.parser.constructs.document,t,r),"linePrefix",this.parser.constructs.disable.null.includes("codeIndented")?void 0:4)}function Xs(e){if(e===null||Tt(e)||Va(e))return 1;if(Pu(e))return 2}function Fu(e,t,r){const a=[];let s=-1;for(;++s1&&e[r][1].end.offset-e[r][1].start.offset>1?2:1;const g={...e[a][1].end},y={...e[r][1].start};Ny(g,-h),Ny(y,h),c={type:h>1?"strongSequence":"emphasisSequence",start:g,end:{...e[a][1].end}},d={type:h>1?"strongSequence":"emphasisSequence",start:{...e[r][1].start},end:y},o={type:h>1?"strongText":"emphasisText",start:{...e[a][1].end},end:{...e[r][1].start}},s={type:h>1?"strong":"emphasis",start:{...c.start},end:{...d.end}},e[a][1].end={...c.start},e[r][1].start={...d.end},f=[],e[a][1].end.offset-e[a][1].start.offset&&(f=br(f,[["enter",e[a][1],t],["exit",e[a][1],t]])),f=br(f,[["enter",s,t],["enter",c,t],["exit",c,t],["enter",o,t]]),f=br(f,Fu(t.parser.constructs.insideSpan.null,e.slice(a+1,r),t)),f=br(f,[["exit",o,t],["enter",d,t],["exit",d,t],["exit",s,t]]),e[r][1].end.offset-e[r][1].start.offset?(m=2,f=br(f,[["enter",e[r][1],t],["exit",e[r][1],t]])):m=0,ar(e,a-1,r-a+3,f),r=a+f.length-m-2;break}}for(r=-1;++r0&&tt(R)?ot(e,k,"linePrefix",o+1)(R):k(R)}function k(R){return R===null||Be(R)?e.check(Sy,N,M)(R):(e.enter("codeFlowValue"),E(R))}function E(R){return R===null||Be(R)?(e.exit("codeFlowValue"),k(R)):(e.consume(R),E)}function M(R){return e.exit("codeFenced"),t(R)}function B(R,U,I){let X=0;return j;function j($){return R.enter("lineEnding"),R.consume($),R.exit("lineEnding"),z}function z($){return R.enter("codeFencedFence"),tt($)?ot(R,V,"linePrefix",a.parser.constructs.disable.null.includes("codeIndented")?void 0:4)($):V($)}function V($){return $===d?(R.enter("codeFencedFenceSequence"),P($)):I($)}function P($){return $===d?(X++,R.consume($),P):X>=c?(R.exit("codeFencedFenceSequence"),tt($)?ot(R,T,"whitespace")($):T($)):I($)}function T($){return $===null||Be($)?(R.exit("codeFencedFence"),U($)):I($)}}}function UM(e,t,r){const a=this;return s;function s(c){return c===null?r(c):(e.enter("lineEnding"),e.consume(c),e.exit("lineEnding"),o)}function o(c){return a.parser.lazy[a.now().line]?r(c):t(c)}}const yh={name:"codeIndented",tokenize:$M},HM={partial:!0,tokenize:qM};function $M(e,t,r){const a=this;return s;function s(f){return e.enter("codeIndented"),ot(e,o,"linePrefix",5)(f)}function o(f){const m=a.events[a.events.length-1];return m&&m[1].type==="linePrefix"&&m[2].sliceSerialize(m[1],!0).length>=4?c(f):r(f)}function c(f){return f===null?h(f):Be(f)?e.attempt(HM,c,h)(f):(e.enter("codeFlowValue"),d(f))}function d(f){return f===null||Be(f)?(e.exit("codeFlowValue"),c(f)):(e.consume(f),d)}function h(f){return e.exit("codeIndented"),t(f)}}function qM(e,t,r){const a=this;return s;function s(c){return a.parser.lazy[a.now().line]?r(c):Be(c)?(e.enter("lineEnding"),e.consume(c),e.exit("lineEnding"),s):ot(e,o,"linePrefix",5)(c)}function o(c){const d=a.events[a.events.length-1];return d&&d[1].type==="linePrefix"&&d[2].sliceSerialize(d[1],!0).length>=4?t(c):Be(c)?s(c):r(c)}}const PM={name:"codeText",previous:GM,resolve:FM,tokenize:VM};function FM(e){let t=e.length-4,r=3,a,s;if((e[r][1].type==="lineEnding"||e[r][1].type==="space")&&(e[t][1].type==="lineEnding"||e[t][1].type==="space")){for(a=r;++a=this.left.length+this.right.length)throw new RangeError("Cannot access index `"+t+"` in a splice buffer of size `"+(this.left.length+this.right.length)+"`");return tthis.left.length?this.right.slice(this.right.length-a+this.left.length,this.right.length-t+this.left.length).reverse():this.left.slice(t).concat(this.right.slice(this.right.length-a+this.left.length).reverse())}splice(t,r,a){const s=r||0;this.setCursor(Math.trunc(t));const o=this.right.splice(this.right.length-s,Number.POSITIVE_INFINITY);return a&&Jl(this.left,a),o.reverse()}pop(){return this.setCursor(Number.POSITIVE_INFINITY),this.left.pop()}push(t){this.setCursor(Number.POSITIVE_INFINITY),this.left.push(t)}pushMany(t){this.setCursor(Number.POSITIVE_INFINITY),Jl(this.left,t)}unshift(t){this.setCursor(0),this.right.push(t)}unshiftMany(t){this.setCursor(0),Jl(this.right,t.reverse())}setCursor(t){if(!(t===this.left.length||t>this.left.length&&this.right.length===0||t<0&&this.left.length===0))if(t=4?t(c):e.interrupt(a.parser.constructs.flow,r,t)(c)}}function Nw(e,t,r,a,s,o,c,d,h){const f=h||Number.POSITIVE_INFINITY;let m=0;return g;function g(w){return w===60?(e.enter(a),e.enter(s),e.enter(o),e.consume(w),e.exit(o),y):w===null||w===32||w===41||wu(w)?r(w):(e.enter(a),e.enter(c),e.enter(d),e.enter("chunkString",{contentType:"string"}),N(w))}function y(w){return w===62?(e.enter(o),e.consume(w),e.exit(o),e.exit(s),e.exit(a),t):(e.enter(d),e.enter("chunkString",{contentType:"string"}),x(w))}function x(w){return w===62?(e.exit("chunkString"),e.exit(d),y(w)):w===null||w===60||Be(w)?r(w):(e.consume(w),w===92?_:x)}function _(w){return w===60||w===62||w===92?(e.consume(w),x):x(w)}function N(w){return!m&&(w===null||w===41||Tt(w))?(e.exit("chunkString"),e.exit(d),e.exit(c),e.exit(a),t(w)):m999||x===null||x===91||x===93&&!h||x===94&&!d&&"_hiddenFootnoteSupport"in c.parser.constructs?r(x):x===93?(e.exit(o),e.enter(s),e.consume(x),e.exit(s),e.exit(a),t):Be(x)?(e.enter("lineEnding"),e.consume(x),e.exit("lineEnding"),m):(e.enter("chunkString",{contentType:"string"}),g(x))}function g(x){return x===null||x===91||x===93||Be(x)||d++>999?(e.exit("chunkString"),m(x)):(e.consume(x),h||(h=!tt(x)),x===92?y:g)}function y(x){return x===91||x===92||x===93?(e.consume(x),d++,g):g(x)}}function kw(e,t,r,a,s,o){let c;return d;function d(y){return y===34||y===39||y===40?(e.enter(a),e.enter(s),e.consume(y),e.exit(s),c=y===40?41:y,h):r(y)}function h(y){return y===c?(e.enter(s),e.consume(y),e.exit(s),e.exit(a),t):(e.enter(o),f(y))}function f(y){return y===c?(e.exit(o),h(c)):y===null?r(y):Be(y)?(e.enter("lineEnding"),e.consume(y),e.exit("lineEnding"),ot(e,f,"linePrefix")):(e.enter("chunkString",{contentType:"string"}),m(y))}function m(y){return y===c||y===null||Be(y)?(e.exit("chunkString"),f(y)):(e.consume(y),y===92?g:m)}function g(y){return y===c||y===92?(e.consume(y),m):m(y)}}function co(e,t){let r;return a;function a(s){return Be(s)?(e.enter("lineEnding"),e.consume(s),e.exit("lineEnding"),r=!0,a):tt(s)?ot(e,a,r?"linePrefix":"lineSuffix")(s):t(s)}}const e5={name:"definition",tokenize:n5},t5={partial:!0,tokenize:r5};function n5(e,t,r){const a=this;let s;return o;function o(x){return e.enter("definition"),c(x)}function c(x){return Sw.call(a,e,d,r,"definitionLabel","definitionLabelMarker","definitionLabelString")(x)}function d(x){return s=Dr(a.sliceSerialize(a.events[a.events.length-1][1]).slice(1,-1)),x===58?(e.enter("definitionMarker"),e.consume(x),e.exit("definitionMarker"),h):r(x)}function h(x){return Tt(x)?co(e,f)(x):f(x)}function f(x){return Nw(e,m,r,"definitionDestination","definitionDestinationLiteral","definitionDestinationLiteralMarker","definitionDestinationRaw","definitionDestinationString")(x)}function m(x){return e.attempt(t5,g,g)(x)}function g(x){return tt(x)?ot(e,y,"whitespace")(x):y(x)}function y(x){return x===null||Be(x)?(e.exit("definition"),a.parser.defined.push(s),t(x)):r(x)}}function r5(e,t,r){return a;function a(d){return Tt(d)?co(e,s)(d):r(d)}function s(d){return kw(e,o,r,"definitionTitle","definitionTitleMarker","definitionTitleString")(d)}function o(d){return tt(d)?ot(e,c,"whitespace")(d):c(d)}function c(d){return d===null||Be(d)?t(d):r(d)}}const i5={name:"hardBreakEscape",tokenize:a5};function a5(e,t,r){return a;function a(o){return e.enter("hardBreakEscape"),e.consume(o),s}function s(o){return Be(o)?(e.exit("hardBreakEscape"),t(o)):r(o)}}const s5={name:"headingAtx",resolve:l5,tokenize:o5};function l5(e,t){let r=e.length-2,a=3,s,o;return e[a][1].type==="whitespace"&&(a+=2),r-2>a&&e[r][1].type==="whitespace"&&(r-=2),e[r][1].type==="atxHeadingSequence"&&(a===r-1||r-4>a&&e[r-2][1].type==="whitespace")&&(r-=a+1===r?2:4),r>a&&(s={type:"atxHeadingText",start:e[a][1].start,end:e[r][1].end},o={type:"chunkText",start:e[a][1].start,end:e[r][1].end,contentType:"text"},ar(e,a,r-a+1,[["enter",s,t],["enter",o,t],["exit",o,t],["exit",s,t]])),e}function o5(e,t,r){let a=0;return s;function s(m){return e.enter("atxHeading"),o(m)}function o(m){return e.enter("atxHeadingSequence"),c(m)}function c(m){return m===35&&a++<6?(e.consume(m),c):m===null||Tt(m)?(e.exit("atxHeadingSequence"),d(m)):r(m)}function d(m){return m===35?(e.enter("atxHeadingSequence"),h(m)):m===null||Be(m)?(e.exit("atxHeading"),t(m)):tt(m)?ot(e,d,"whitespace")(m):(e.enter("atxHeadingText"),f(m))}function h(m){return m===35?(e.consume(m),h):(e.exit("atxHeadingSequence"),d(m))}function f(m){return m===null||m===35||Tt(m)?(e.exit("atxHeadingText"),d(m)):(e.consume(m),f)}}const c5=["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"],Cy=["pre","script","style","textarea"],u5={concrete:!0,name:"htmlFlow",resolveTo:h5,tokenize:m5},d5={partial:!0,tokenize:g5},f5={partial:!0,tokenize:p5};function h5(e){let t=e.length;for(;t--&&!(e[t][0]==="enter"&&e[t][1].type==="htmlFlow"););return t>1&&e[t-2][1].type==="linePrefix"&&(e[t][1].start=e[t-2][1].start,e[t+1][1].start=e[t-2][1].start,e.splice(t-2,2)),e}function m5(e,t,r){const a=this;let s,o,c,d,h;return f;function f(L){return m(L)}function m(L){return e.enter("htmlFlow"),e.enter("htmlFlowData"),e.consume(L),g}function g(L){return L===33?(e.consume(L),y):L===47?(e.consume(L),o=!0,N):L===63?(e.consume(L),s=3,a.interrupt?t:C):Ln(L)?(e.consume(L),c=String.fromCharCode(L),S):r(L)}function y(L){return L===45?(e.consume(L),s=2,x):L===91?(e.consume(L),s=5,d=0,_):Ln(L)?(e.consume(L),s=4,a.interrupt?t:C):r(L)}function x(L){return L===45?(e.consume(L),a.interrupt?t:C):r(L)}function _(L){const G="CDATA[";return L===G.charCodeAt(d++)?(e.consume(L),d===G.length?a.interrupt?t:V:_):r(L)}function N(L){return Ln(L)?(e.consume(L),c=String.fromCharCode(L),S):r(L)}function S(L){if(L===null||L===47||L===62||Tt(L)){const G=L===47,q=c.toLowerCase();return!G&&!o&&Cy.includes(q)?(s=1,a.interrupt?t(L):V(L)):c5.includes(c.toLowerCase())?(s=6,G?(e.consume(L),w):a.interrupt?t(L):V(L)):(s=7,a.interrupt&&!a.parser.lazy[a.now().line]?r(L):o?k(L):E(L))}return L===45||Tn(L)?(e.consume(L),c+=String.fromCharCode(L),S):r(L)}function w(L){return L===62?(e.consume(L),a.interrupt?t:V):r(L)}function k(L){return tt(L)?(e.consume(L),k):j(L)}function E(L){return L===47?(e.consume(L),j):L===58||L===95||Ln(L)?(e.consume(L),M):tt(L)?(e.consume(L),E):j(L)}function M(L){return L===45||L===46||L===58||L===95||Tn(L)?(e.consume(L),M):B(L)}function B(L){return L===61?(e.consume(L),R):tt(L)?(e.consume(L),B):E(L)}function R(L){return L===null||L===60||L===61||L===62||L===96?r(L):L===34||L===39?(e.consume(L),h=L,U):tt(L)?(e.consume(L),R):I(L)}function U(L){return L===h?(e.consume(L),h=null,X):L===null||Be(L)?r(L):(e.consume(L),U)}function I(L){return L===null||L===34||L===39||L===47||L===60||L===61||L===62||L===96||Tt(L)?B(L):(e.consume(L),I)}function X(L){return L===47||L===62||tt(L)?E(L):r(L)}function j(L){return L===62?(e.consume(L),z):r(L)}function z(L){return L===null||Be(L)?V(L):tt(L)?(e.consume(L),z):r(L)}function V(L){return L===45&&s===2?(e.consume(L),O):L===60&&s===1?(e.consume(L),H):L===62&&s===4?(e.consume(L),D):L===63&&s===3?(e.consume(L),C):L===93&&s===5?(e.consume(L),Z):Be(L)&&(s===6||s===7)?(e.exit("htmlFlowData"),e.check(d5,Y,P)(L)):L===null||Be(L)?(e.exit("htmlFlowData"),P(L)):(e.consume(L),V)}function P(L){return e.check(f5,T,Y)(L)}function T(L){return e.enter("lineEnding"),e.consume(L),e.exit("lineEnding"),$}function $(L){return L===null||Be(L)?P(L):(e.enter("htmlFlowData"),V(L))}function O(L){return L===45?(e.consume(L),C):V(L)}function H(L){return L===47?(e.consume(L),c="",K):V(L)}function K(L){if(L===62){const G=c.toLowerCase();return Cy.includes(G)?(e.consume(L),D):V(L)}return Ln(L)&&c.length<8?(e.consume(L),c+=String.fromCharCode(L),K):V(L)}function Z(L){return L===93?(e.consume(L),C):V(L)}function C(L){return L===62?(e.consume(L),D):L===45&&s===2?(e.consume(L),C):V(L)}function D(L){return L===null||Be(L)?(e.exit("htmlFlowData"),Y(L)):(e.consume(L),D)}function Y(L){return e.exit("htmlFlow"),t(L)}}function p5(e,t,r){const a=this;return s;function s(c){return Be(c)?(e.enter("lineEnding"),e.consume(c),e.exit("lineEnding"),o):r(c)}function o(c){return a.parser.lazy[a.now().line]?r(c):t(c)}}function g5(e,t,r){return a;function a(s){return e.enter("lineEnding"),e.consume(s),e.exit("lineEnding"),e.attempt(Ro,t,r)}}const b5={name:"htmlText",tokenize:x5};function x5(e,t,r){const a=this;let s,o,c;return d;function d(C){return e.enter("htmlText"),e.enter("htmlTextData"),e.consume(C),h}function h(C){return C===33?(e.consume(C),f):C===47?(e.consume(C),B):C===63?(e.consume(C),E):Ln(C)?(e.consume(C),I):r(C)}function f(C){return C===45?(e.consume(C),m):C===91?(e.consume(C),o=0,_):Ln(C)?(e.consume(C),k):r(C)}function m(C){return C===45?(e.consume(C),x):r(C)}function g(C){return C===null?r(C):C===45?(e.consume(C),y):Be(C)?(c=g,H(C)):(e.consume(C),g)}function y(C){return C===45?(e.consume(C),x):g(C)}function x(C){return C===62?O(C):C===45?y(C):g(C)}function _(C){const D="CDATA[";return C===D.charCodeAt(o++)?(e.consume(C),o===D.length?N:_):r(C)}function N(C){return C===null?r(C):C===93?(e.consume(C),S):Be(C)?(c=N,H(C)):(e.consume(C),N)}function S(C){return C===93?(e.consume(C),w):N(C)}function w(C){return C===62?O(C):C===93?(e.consume(C),w):N(C)}function k(C){return C===null||C===62?O(C):Be(C)?(c=k,H(C)):(e.consume(C),k)}function E(C){return C===null?r(C):C===63?(e.consume(C),M):Be(C)?(c=E,H(C)):(e.consume(C),E)}function M(C){return C===62?O(C):E(C)}function B(C){return Ln(C)?(e.consume(C),R):r(C)}function R(C){return C===45||Tn(C)?(e.consume(C),R):U(C)}function U(C){return Be(C)?(c=U,H(C)):tt(C)?(e.consume(C),U):O(C)}function I(C){return C===45||Tn(C)?(e.consume(C),I):C===47||C===62||Tt(C)?X(C):r(C)}function X(C){return C===47?(e.consume(C),O):C===58||C===95||Ln(C)?(e.consume(C),j):Be(C)?(c=X,H(C)):tt(C)?(e.consume(C),X):O(C)}function j(C){return C===45||C===46||C===58||C===95||Tn(C)?(e.consume(C),j):z(C)}function z(C){return C===61?(e.consume(C),V):Be(C)?(c=z,H(C)):tt(C)?(e.consume(C),z):X(C)}function V(C){return C===null||C===60||C===61||C===62||C===96?r(C):C===34||C===39?(e.consume(C),s=C,P):Be(C)?(c=V,H(C)):tt(C)?(e.consume(C),V):(e.consume(C),T)}function P(C){return C===s?(e.consume(C),s=void 0,$):C===null?r(C):Be(C)?(c=P,H(C)):(e.consume(C),P)}function T(C){return C===null||C===34||C===39||C===60||C===61||C===96?r(C):C===47||C===62||Tt(C)?X(C):(e.consume(C),T)}function $(C){return C===47||C===62||Tt(C)?X(C):r(C)}function O(C){return C===62?(e.consume(C),e.exit("htmlTextData"),e.exit("htmlText"),t):r(C)}function H(C){return e.exit("htmlTextData"),e.enter("lineEnding"),e.consume(C),e.exit("lineEnding"),K}function K(C){return tt(C)?ot(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 jp={name:"labelEnd",resolveAll:w5,resolveTo:E5,tokenize:N5},y5={tokenize:S5},v5={tokenize:k5},_5={tokenize:C5};function w5(e){let t=-1;const r=[];for(;++t=3&&(f===null||Be(f))?(e.exit("thematicBreak"),t(f)):r(f)}function h(f){return f===s?(e.consume(f),a++,h):(e.exit("thematicBreakSequence"),tt(f)?ot(e,d,"whitespace")(f):d(f))}}const Fn={continuation:{tokenize:I5},exit:U5,name:"list",tokenize:z5},D5={partial:!0,tokenize:H5},L5={partial:!0,tokenize:B5};function z5(e,t,r){const a=this,s=a.events[a.events.length-1];let o=s&&s[1].type==="linePrefix"?s[2].sliceSerialize(s[1],!0).length:0,c=0;return d;function d(x){const _=a.containerState.type||(x===42||x===43||x===45?"listUnordered":"listOrdered");if(_==="listUnordered"?!a.containerState.marker||x===a.containerState.marker:Ym(x)){if(a.containerState.type||(a.containerState.type=_,e.enter(_,{_container:!0})),_==="listUnordered")return e.enter("listItemPrefix"),x===42||x===45?e.check(pu,r,f)(x):f(x);if(!a.interrupt||x===49)return e.enter("listItemPrefix"),e.enter("listItemValue"),h(x)}return r(x)}function h(x){return Ym(x)&&++c<10?(e.consume(x),h):(!a.interrupt||c<2)&&(a.containerState.marker?x===a.containerState.marker:x===41||x===46)?(e.exit("listItemValue"),f(x)):r(x)}function f(x){return e.enter("listItemMarker"),e.consume(x),e.exit("listItemMarker"),a.containerState.marker=a.containerState.marker||x,e.check(Ro,a.interrupt?r:m,e.attempt(D5,y,g))}function m(x){return a.containerState.initialBlankLine=!0,o++,y(x)}function g(x){return tt(x)?(e.enter("listItemPrefixWhitespace"),e.consume(x),e.exit("listItemPrefixWhitespace"),y):r(x)}function y(x){return a.containerState.size=o+a.sliceSerialize(e.exit("listItemPrefix"),!0).length,t(x)}}function I5(e,t,r){const a=this;return a.containerState._closeFlow=void 0,e.check(Ro,s,o);function s(d){return a.containerState.furtherBlankLines=a.containerState.furtherBlankLines||a.containerState.initialBlankLine,ot(e,t,"listItemIndent",a.containerState.size+1)(d)}function o(d){return a.containerState.furtherBlankLines||!tt(d)?(a.containerState.furtherBlankLines=void 0,a.containerState.initialBlankLine=void 0,c(d)):(a.containerState.furtherBlankLines=void 0,a.containerState.initialBlankLine=void 0,e.attempt(L5,t,c)(d))}function c(d){return a.containerState._closeFlow=!0,a.interrupt=void 0,ot(e,e.attempt(Fn,t,r),"linePrefix",a.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(d)}}function B5(e,t,r){const a=this;return ot(e,s,"listItemIndent",a.containerState.size+1);function s(o){const c=a.events[a.events.length-1];return c&&c[1].type==="listItemIndent"&&c[2].sliceSerialize(c[1],!0).length===a.containerState.size?t(o):r(o)}}function U5(e){e.exit(this.containerState.type)}function H5(e,t,r){const a=this;return ot(e,s,"listItemPrefixWhitespace",a.parser.constructs.disable.null.includes("codeIndented")?void 0:5);function s(o){const c=a.events[a.events.length-1];return!tt(o)&&c&&c[1].type==="listItemPrefixWhitespace"?t(o):r(o)}}const Ty={name:"setextUnderline",resolveTo:$5,tokenize:q5};function $5(e,t){let r=e.length,a,s,o;for(;r--;)if(e[r][0]==="enter"){if(e[r][1].type==="content"){a=r;break}e[r][1].type==="paragraph"&&(s=r)}else e[r][1].type==="content"&&e.splice(r,1),!o&&e[r][1].type==="definition"&&(o=r);const c={type:"setextHeading",start:{...e[a][1].start},end:{...e[e.length-1][1].end}};return e[s][1].type="setextHeadingText",o?(e.splice(s,0,["enter",c,t]),e.splice(o+1,0,["exit",e[a][1],t]),e[a][1].end={...e[o][1].end}):e[a][1]=c,e.push(["exit",c,t]),e}function q5(e,t,r){const a=this;let s;return o;function o(f){let m=a.events.length,g;for(;m--;)if(a.events[m][1].type!=="lineEnding"&&a.events[m][1].type!=="linePrefix"&&a.events[m][1].type!=="content"){g=a.events[m][1].type==="paragraph";break}return!a.parser.lazy[a.now().line]&&(a.interrupt||g)?(e.enter("setextHeadingLine"),s=f,c(f)):r(f)}function c(f){return e.enter("setextHeadingLineSequence"),d(f)}function d(f){return f===s?(e.consume(f),d):(e.exit("setextHeadingLineSequence"),tt(f)?ot(e,h,"lineSuffix")(f):h(f))}function h(f){return f===null||Be(f)?(e.exit("setextHeadingLine"),t(f)):r(f)}}const P5={tokenize:F5};function F5(e){const t=this,r=e.attempt(Ro,a,e.attempt(this.parser.constructs.flowInitial,s,ot(e,e.attempt(this.parser.constructs.flow,s,e.attempt(KM,s)),"linePrefix")));return r;function a(o){if(o===null){e.consume(o);return}return e.enter("lineEndingBlank"),e.consume(o),e.exit("lineEndingBlank"),t.currentConstruct=void 0,r}function s(o){if(o===null){e.consume(o);return}return e.enter("lineEnding"),e.consume(o),e.exit("lineEnding"),t.currentConstruct=void 0,r}}const G5={resolveAll:Tw()},V5=Cw("string"),Y5=Cw("text");function Cw(e){return{resolveAll:Tw(e==="text"?X5:void 0),tokenize:t};function t(r){const a=this,s=this.parser.constructs[e],o=r.attempt(s,c,d);return c;function c(m){return f(m)?o(m):d(m)}function d(m){if(m===null){r.consume(m);return}return r.enter("data"),r.consume(m),h}function h(m){return f(m)?(r.exit("data"),o(m)):(r.consume(m),h)}function f(m){if(m===null)return!0;const g=s[m];let y=-1;if(g)for(;++y-1){const d=c[0];typeof d=="string"?c[0]=d.slice(a):c.shift()}o>0&&c.push(e[s].slice(0,o))}return c}function lO(e,t){let r=-1;const a=[];let s;for(;++r0){const on=Oe.tokenStack[Oe.tokenStack.length-1];(on[1]||My).call(Oe,void 0,on[0])}for(xe.position={start:ia(ue.length>0?ue[0][1].start:{line:1,column:1,offset:0}),end:ia(ue.length>0?ue[ue.length-2][1].end:{line:1,column:1,offset:0})},Ze=-1;++Ze0&&(a.className=["language-"+s[0]]);let o={type:"element",tagName:"code",properties:a,children:[{type:"text",value:r}]};return t.meta&&(o.data={meta:t.meta}),e.patch(t,o),o=e.applyData(t,o),o={type:"element",tagName:"pre",properties:{},children:[o]},e.patch(t,o),o}function _O(e,t){const r={type:"element",tagName:"del",properties:{},children:e.all(t)};return e.patch(t,r),e.applyData(t,r)}function wO(e,t){const r={type:"element",tagName:"em",properties:{},children:e.all(t)};return e.patch(t,r),e.applyData(t,r)}function EO(e,t){const r=typeof e.options.clobberPrefix=="string"?e.options.clobberPrefix:"user-content-",a=String(t.identifier).toUpperCase(),s=rl(a.toLowerCase()),o=e.footnoteOrder.indexOf(a);let c,d=e.footnoteCounts.get(a);d===void 0?(d=0,e.footnoteOrder.push(a),c=e.footnoteOrder.length):c=o+1,d+=1,e.footnoteCounts.set(a,d);const h={type:"element",tagName:"a",properties:{href:"#"+r+"fn-"+s,id:r+"fnref-"+s+(d>1?"-"+d:""),dataFootnoteRef:!0,ariaDescribedBy:["footnote-label"]},children:[{type:"text",value:String(c)}]};e.patch(t,h);const f={type:"element",tagName:"sup",properties:{},children:[h]};return e.patch(t,f),e.applyData(t,f)}function NO(e,t){const r={type:"element",tagName:"h"+t.depth,properties:{},children:e.all(t)};return e.patch(t,r),e.applyData(t,r)}function SO(e,t){if(e.options.allowDangerousHtml){const r={type:"raw",value:t.value};return e.patch(t,r),e.applyData(t,r)}}function Ow(e,t){const r=t.referenceType;let a="]";if(r==="collapsed"?a+="[]":r==="full"&&(a+="["+(t.label||t.identifier)+"]"),t.type==="imageReference")return[{type:"text",value:"!["+t.alt+a}];const s=e.all(t),o=s[0];o&&o.type==="text"?o.value="["+o.value:s.unshift({type:"text",value:"["});const c=s[s.length-1];return c&&c.type==="text"?c.value+=a:s.push({type:"text",value:a}),s}function kO(e,t){const r=String(t.identifier).toUpperCase(),a=e.definitionById.get(r);if(!a)return Ow(e,t);const s={src:rl(a.url||""),alt:t.alt};a.title!==null&&a.title!==void 0&&(s.title=a.title);const o={type:"element",tagName:"img",properties:s,children:[]};return e.patch(t,o),e.applyData(t,o)}function CO(e,t){const r={src:rl(t.url)};t.alt!==null&&t.alt!==void 0&&(r.alt=t.alt),t.title!==null&&t.title!==void 0&&(r.title=t.title);const a={type:"element",tagName:"img",properties:r,children:[]};return e.patch(t,a),e.applyData(t,a)}function TO(e,t){const r={type:"text",value:t.value.replace(/\r?\n|\r/g," ")};e.patch(t,r);const a={type:"element",tagName:"code",properties:{},children:[r]};return e.patch(t,a),e.applyData(t,a)}function AO(e,t){const r=String(t.identifier).toUpperCase(),a=e.definitionById.get(r);if(!a)return Ow(e,t);const s={href:rl(a.url||"")};a.title!==null&&a.title!==void 0&&(s.title=a.title);const o={type:"element",tagName:"a",properties:s,children:e.all(t)};return e.patch(t,o),e.applyData(t,o)}function MO(e,t){const r={href:rl(t.url)};t.title!==null&&t.title!==void 0&&(r.title=t.title);const a={type:"element",tagName:"a",properties:r,children:e.all(t)};return e.patch(t,a),e.applyData(t,a)}function OO(e,t,r){const a=e.all(t),s=r?RO(r):Rw(t),o={},c=[];if(typeof t.checked=="boolean"){const m=a[0];let g;m&&m.type==="element"&&m.tagName==="p"?g=m:(g={type:"element",tagName:"p",properties:{},children:[]},a.unshift(g)),g.children.length>0&&g.children.unshift({type:"text",value:" "}),g.children.unshift({type:"element",tagName:"input",properties:{type:"checkbox",checked:t.checked,disabled:!0},children:[]}),o.className=["task-list-item"]}let d=-1;for(;++d1}function jO(e,t){const r={},a=e.all(t);let s=-1;for(typeof t.start=="number"&&t.start!==1&&(r.start=t.start);++s0){const c={type:"element",tagName:"tbody",properties:{},children:e.wrap(r,!0)},d=Cp(t.children[1]),h=dw(t.children[t.children.length-1]);d&&h&&(c.position={start:d,end:h}),s.push(c)}const o={type:"element",tagName:"table",properties:{},children:e.wrap(s,!0)};return e.patch(t,o),e.applyData(t,o)}function BO(e,t,r){const a=r?r.children:void 0,o=(a?a.indexOf(t):1)===0?"th":"td",c=r&&r.type==="table"?r.align:void 0,d=c?c.length:t.children.length;let h=-1;const f=[];for(;++h0,!0),a[0]),s=a.index+a[0].length,a=r.exec(t);return o.push(jy(t.slice(s),s>0,!1)),o.join("")}function jy(e,t,r){let a=0,s=e.length;if(t){let o=e.codePointAt(a);for(;o===Oy||o===Ry;)a++,o=e.codePointAt(a)}if(r){let o=e.codePointAt(s-1);for(;o===Oy||o===Ry;)s--,o=e.codePointAt(s-1)}return s>a?e.slice(a,s):""}function $O(e,t){const r={type:"text",value:HO(String(t.value))};return e.patch(t,r),e.applyData(t,r)}function qO(e,t){const r={type:"element",tagName:"hr",properties:{},children:[]};return e.patch(t,r),e.applyData(t,r)}const PO={blockquote:xO,break:yO,code:vO,delete:_O,emphasis:wO,footnoteReference:EO,heading:NO,html:SO,imageReference:kO,image:CO,inlineCode:TO,linkReference:AO,link:MO,listItem:OO,list:jO,paragraph:DO,root:LO,strong:zO,table:IO,tableCell:UO,tableRow:BO,text:$O,thematicBreak:qO,toml:eu,yaml:eu,definition:eu,footnoteDefinition:eu};function eu(){}const jw=-1,Gu=0,uo=1,Eu=2,Dp=3,Lp=4,zp=5,Ip=6,Dw=7,Lw=8,zw=typeof self=="object"?self:globalThis,Dy=(e,t)=>{switch(e){case"Function":case"SharedWorker":case"Worker":case"eval":case"setInterval":case"setTimeout":throw new TypeError("unable to deserialize "+e)}return new zw[e](t)},FO=(e,t)=>{const r=(s,o)=>(e.set(o,s),s),a=s=>{if(e.has(s))return e.get(s);const[o,c]=t[s];switch(o){case Gu:case jw:return r(c,s);case uo:{const d=r([],s);for(const h of c)d.push(a(h));return d}case Eu:{const d=r({},s);for(const[h,f]of c)d[a(h)]=a(f);return d}case Dp:return r(new Date(c),s);case Lp:{const{source:d,flags:h}=c;return r(new RegExp(d,h),s)}case zp:{const d=r(new Map,s);for(const[h,f]of c)d.set(a(h),a(f));return d}case Ip:{const d=r(new Set,s);for(const h of c)d.add(a(h));return d}case Dw:{const{name:d,message:h}=c;return r(typeof zw[d]=="function"?Dy(d,h):new Error(h),s)}case Lw:return r(BigInt(c),s);case"BigInt":return r(Object(BigInt(c)),s);case"ArrayBuffer":return r(new Uint8Array(c).buffer,c);case"DataView":{const{buffer:d}=new Uint8Array(c);return r(new DataView(d),c)}}return r(Dy(o,c),s)};return a},Ly=e=>FO(new Map,e)(0),Ua="",{toString:GO}={},{keys:VO}=Object,eo=e=>{const t=typeof e;if(t!=="object"||!e)return[Gu,t];const r=GO.call(e).slice(8,-1);switch(r){case"Array":return[uo,Ua];case"Object":return[Eu,Ua];case"Date":return[Dp,Ua];case"RegExp":return[Lp,Ua];case"Map":return[zp,Ua];case"Set":return[Ip,Ua];case"DataView":return[uo,r]}return r.includes("Array")?[uo,r]:e instanceof Error?[Dw,e.name||"Error"]:[Eu,r]},tu=([e,t])=>e===Gu&&(t==="function"||t==="symbol"),YO=(e,t,r,a)=>{const s=(c,d)=>{const h=a.push(c)-1;return r.set(d,h),h},o=c=>{if(r.has(c))return r.get(c);let[d,h]=eo(c);switch(d){case Gu:{let m=c;switch(h){case"bigint":d=Lw,m=c.toString();break;case"function":case"symbol":if(e)throw new TypeError("unable to serialize "+h);m=null;break;case"undefined":return s([jw],c)}return s([d,m],c)}case uo:{if(h){let y=c;return h==="DataView"?y=new Uint8Array(c.buffer):h==="ArrayBuffer"&&(y=new Uint8Array(c)),s([h,[...y]],c)}const m=[],g=s([d,m],c);for(const y of c)m.push(o(y));return g}case Eu:{if(h)switch(h){case"BigInt":return s([h,c.toString()],c);case"Boolean":case"Number":case"String":return s([h,c.valueOf()],c)}if(t&&"toJSON"in c)return o(c.toJSON());const m=[],g=s([d,m],c);for(const y of VO(c))(e||!tu(eo(c[y])))&&m.push([o(y),o(c[y])]);return g}case Dp:return s([d,isNaN(c.getTime())?Ua:c.toISOString()],c);case Lp:{const{source:m,flags:g}=c;return s([d,{source:m,flags:g}],c)}case zp:{const m=[],g=s([d,m],c);for(const[y,x]of c)(e||!(tu(eo(y))||tu(eo(x))))&&m.push([o(y),o(x)]);return g}case Ip:{const m=[],g=s([d,m],c);for(const y of c)(e||!tu(eo(y)))&&m.push(o(y));return g}}const{message:f}=c;return s([d,{name:h,message:f}],c)};return o},zy=(e,{json:t,lossy:r}={})=>{const a=[];return YO(!(t||r),!!t,new Map,a)(e),a},Nu=typeof structuredClone=="function"?(e,t)=>t&&("json"in t||"lossy"in t)?Ly(zy(e,t)):structuredClone(e):(e,t)=>Ly(zy(e,t));function XO(e,t){const r=[{type:"text",value:"↩"}];return t>1&&r.push({type:"element",tagName:"sup",properties:{},children:[{type:"text",value:String(t)}]}),r}function KO(e,t){return"Back to reference "+(e+1)+(t>1?"-"+t:"")}function ZO(e){const t=typeof e.options.clobberPrefix=="string"?e.options.clobberPrefix:"user-content-",r=e.options.footnoteBackContent||XO,a=e.options.footnoteBackLabel||KO,s=e.options.footnoteLabel||"Footnotes",o=e.options.footnoteLabelTagName||"h2",c=e.options.footnoteLabelProperties||{className:["sr-only"]},d=[];let h=-1;for(;++h0&&_.push({type:"text",value:" "});let k=typeof r=="string"?r:r(h,x);typeof k=="string"&&(k={type:"text",value:k}),_.push({type:"element",tagName:"a",properties:{href:"#"+t+"fnref-"+y+(x>1?"-"+x:""),dataFootnoteBackref:"",ariaLabel:typeof a=="string"?a:a(h,x),className:["data-footnote-backref"]},children:Array.isArray(k)?k:[k]})}const S=m[m.length-1];if(S&&S.type==="element"&&S.tagName==="p"){const k=S.children[S.children.length-1];k&&k.type==="text"?k.value+=" ":S.children.push({type:"text",value:" "}),S.children.push(..._)}else m.push(..._);const w={type:"element",tagName:"li",properties:{id:t+"fn-"+y},children:e.wrap(m,!0)};e.patch(f,w),d.push(w)}if(d.length!==0)return{type:"element",tagName:"section",properties:{dataFootnotes:!0,className:["footnotes"]},children:[{type:"element",tagName:o,properties:{...Nu(c),id:"footnote-label"},children:[{type:"text",value:s}]},{type:"text",value:` -`},{type:"element",tagName:"ol",properties:{},children:e.wrap(d,!0)},{type:"text",value:` -`}]}}const Vu=(function(e){if(e==null)return eR;if(typeof e=="function")return Yu(e);if(typeof e=="object")return Array.isArray(e)?QO(e):WO(e);if(typeof e=="string")return JO(e);throw new Error("Expected function, string, or object as test")});function QO(e){const t=[];let r=-1;for(;++r":""))+")"})}return y;function y(){let x=Iw,_,N,S;if((!t||o(h,f,m[m.length-1]||void 0))&&(x=iR(r(h,m)),x[0]===Km))return x;if("children"in h&&h.children){const w=h;if(w.children&&x[0]!==rR)for(N=(a?w.children.length:-1)+c,S=m.concat(w);N>-1&&N0&&r.push({type:"text",value:` -`}),r}function Iy(e){let t=0,r=e.charCodeAt(t);for(;r===9||r===32;)t++,r=e.charCodeAt(t);return e.slice(t)}function By(e,t){const r=sR(e,t),a=r.one(e,void 0),s=ZO(r),o=Array.isArray(a)?{type:"root",children:a}:a||{type:"root",children:[]};return s&&o.children.push({type:"text",value:` -`},s),o}function dR(e,t){return e&&"run"in e?async function(r,a){const s=By(r,{file:a,...t});await e.run(s,a)}:function(r,a){return By(r,{file:a,...e||t})}}function Uy(e){if(e)throw e}var _h,Hy;function fR(){if(Hy)return _h;Hy=1;var e=Object.prototype.hasOwnProperty,t=Object.prototype.toString,r=Object.defineProperty,a=Object.getOwnPropertyDescriptor,s=function(f){return typeof Array.isArray=="function"?Array.isArray(f):t.call(f)==="[object Array]"},o=function(f){if(!f||t.call(f)!=="[object Object]")return!1;var m=e.call(f,"constructor"),g=f.constructor&&f.constructor.prototype&&e.call(f.constructor.prototype,"isPrototypeOf");if(f.constructor&&!m&&!g)return!1;var y;for(y in f);return typeof y>"u"||e.call(f,y)},c=function(f,m){r&&m.name==="__proto__"?r(f,m.name,{enumerable:!0,configurable:!0,value:m.newValue,writable:!0}):f[m.name]=m.newValue},d=function(f,m){if(m==="__proto__")if(e.call(f,m)){if(a)return a(f,m).value}else return;return f[m]};return _h=function h(){var f,m,g,y,x,_,N=arguments[0],S=1,w=arguments.length,k=!1;for(typeof N=="boolean"&&(k=N,N=arguments[1]||{},S=2),(N==null||typeof N!="object"&&typeof N!="function")&&(N={});Sc.length;let h;d&&c.push(s);try{h=e.apply(this,c)}catch(f){const m=f;if(d&&r)throw m;return s(m)}d||(h&&h.then&&typeof h.then=="function"?h.then(o,s):h instanceof Error?s(h):o(h))}function s(c,...d){r||(r=!0,t(c,...d))}function o(c){s(null,c)}}const Gr={basename:gR,dirname:bR,extname:xR,join:yR,sep:"/"};function gR(e,t){if(t!==void 0&&typeof t!="string")throw new TypeError('"ext" argument must be a string');jo(e);let r=0,a=-1,s=e.length,o;if(t===void 0||t.length===0||t.length>e.length){for(;s--;)if(e.codePointAt(s)===47){if(o){r=s+1;break}}else a<0&&(o=!0,a=s+1);return a<0?"":e.slice(r,a)}if(t===e)return"";let c=-1,d=t.length-1;for(;s--;)if(e.codePointAt(s)===47){if(o){r=s+1;break}}else c<0&&(o=!0,c=s+1),d>-1&&(e.codePointAt(s)===t.codePointAt(d--)?d<0&&(a=s):(d=-1,a=c));return r===a?a=c:a<0&&(a=e.length),e.slice(r,a)}function bR(e){if(jo(e),e.length===0)return".";let t=-1,r=e.length,a;for(;--r;)if(e.codePointAt(r)===47){if(a){t=r;break}}else a||(a=!0);return t<0?e.codePointAt(0)===47?"/":".":t===1&&e.codePointAt(0)===47?"//":e.slice(0,t)}function xR(e){jo(e);let t=e.length,r=-1,a=0,s=-1,o=0,c;for(;t--;){const d=e.codePointAt(t);if(d===47){if(c){a=t+1;break}continue}r<0&&(c=!0,r=t+1),d===46?s<0?s=t:o!==1&&(o=1):s>-1&&(o=-1)}return s<0||r<0||o===0||o===1&&s===r-1&&s===a+1?"":e.slice(s,r)}function yR(...e){let t=-1,r;for(;++t0&&e.codePointAt(e.length-1)===47&&(r+="/"),t?"/"+r:r}function _R(e,t){let r="",a=0,s=-1,o=0,c=-1,d,h;for(;++c<=e.length;){if(c2){if(h=r.lastIndexOf("/"),h!==r.length-1){h<0?(r="",a=0):(r=r.slice(0,h),a=r.length-1-r.lastIndexOf("/")),s=c,o=0;continue}}else if(r.length>0){r="",a=0,s=c,o=0;continue}}t&&(r=r.length>0?r+"/..":"..",a=2)}else r.length>0?r+="/"+e.slice(s+1,c):r=e.slice(s+1,c),a=c-s-1;s=c,o=0}else d===46&&o>-1?o++:o=-1}return r}function jo(e){if(typeof e!="string")throw new TypeError("Path must be a string. Received "+JSON.stringify(e))}const wR={cwd:ER};function ER(){return"/"}function Wm(e){return!!(e!==null&&typeof e=="object"&&"href"in e&&e.href&&"protocol"in e&&e.protocol&&e.auth===void 0)}function NR(e){if(typeof e=="string")e=new URL(e);else if(!Wm(e)){const t=new TypeError('The "path" argument must be of type string or an instance of URL. Received `'+e+"`");throw t.code="ERR_INVALID_ARG_TYPE",t}if(e.protocol!=="file:"){const t=new TypeError("The URL must be of scheme file");throw t.code="ERR_INVALID_URL_SCHEME",t}return SR(e)}function SR(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 t=e.pathname;let r=-1;for(;++r0){let[x,..._]=m;const N=a[y][1];Qm(N)&&Qm(x)&&(x=wh(!0,N,x)),a[y]=[f,x,..._]}}}}const AR=new Up().freeze();function kh(e,t){if(typeof t!="function")throw new TypeError("Cannot `"+e+"` without `parser`")}function Ch(e,t){if(typeof t!="function")throw new TypeError("Cannot `"+e+"` without `compiler`")}function Th(e,t){if(t)throw new Error("Cannot call `"+e+"` on a frozen processor.\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.")}function qy(e){if(!Qm(e)||typeof e.type!="string")throw new TypeError("Expected node, got `"+e+"`")}function Py(e,t,r){if(!r)throw new Error("`"+e+"` finished async. Use `"+t+"` instead")}function nu(e){return MR(e)?e:new Uw(e)}function MR(e){return!!(e&&typeof e=="object"&&"message"in e&&"messages"in e)}function OR(e){return typeof e=="string"||RR(e)}function RR(e){return!!(e&&typeof e=="object"&&"byteLength"in e&&"byteOffset"in e)}const jR="https://github.com/remarkjs/react-markdown/blob/main/changelog.md",Fy=[],Gy={allowDangerousHtml:!0},DR=/^(https?|ircs?|mailto|xmpp)$/i,LR=[{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 Hp(e){const t=zR(e),r=IR(e);return BR(t.runSync(t.parse(r),r),e)}function zR(e){const t=e.rehypePlugins||Fy,r=e.remarkPlugins||Fy,a=e.remarkRehypeOptions?{...e.remarkRehypeOptions,...Gy}:Gy;return AR().use(bO).use(r).use(dR,a).use(t)}function IR(e){const t=e.children||"",r=new Uw;return typeof t=="string"&&(r.value=t),r}function BR(e,t){const r=t.allowedElements,a=t.allowElement,s=t.components,o=t.disallowedElements,c=t.skipHtml,d=t.unwrapDisallowed,h=t.urlTransform||UR;for(const m of LR)Object.hasOwn(t,m.from)&&(""+m.from+(m.to?"use `"+m.to+"` instead":"remove it")+jR+m.id,void 0);return Bp(e,f),eM(e,{Fragment:p.Fragment,components:s,ignoreInvalidStyle:!0,jsx:p.jsx,jsxs:p.jsxs,passKeys:!0,passNode:!0});function f(m,g,y){if(m.type==="raw"&&y&&typeof g=="number")return c?y.children.splice(g,1):y.children[g]={type:"text",value:m.value},g;if(m.type==="element"){let x;for(x in xh)if(Object.hasOwn(xh,x)&&Object.hasOwn(m.properties,x)){const _=m.properties[x],N=xh[x];(N===null||N.includes(m.tagName))&&(m.properties[x]=h(String(_||""),x,m))}}if(m.type==="element"){let x=r?!r.includes(m.tagName):o?o.includes(m.tagName):!1;if(!x&&a&&typeof g=="number"&&(x=!a(m,g,y)),x&&y&&typeof g=="number")return d&&m.children?y.children.splice(g,1,...m.children):y.children.splice(g,1),g}}}function UR(e){const t=e.indexOf(":"),r=e.indexOf("?"),a=e.indexOf("#"),s=e.indexOf("/");return t===-1||s!==-1&&t>s||r!==-1&&t>r||a!==-1&&t>a||DR.test(e.slice(0,t))?e:""}function Vy(e,t){const r=String(e);if(typeof t!="string")throw new TypeError("Expected character");let a=0,s=r.indexOf(t);for(;s!==-1;)a++,s=r.indexOf(t,s+t.length);return a}function HR(e){if(typeof e!="string")throw new TypeError("Expected a string");return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}function $R(e,t,r){const s=Vu((r||{}).ignore||[]),o=qR(t);let c=-1;for(;++c0?{type:"text",value:R}:void 0),R===!1?y.lastIndex=M+1:(_!==M&&k.push({type:"text",value:f.value.slice(_,M)}),Array.isArray(R)?k.push(...R):R&&k.push(R),_=M+E[0].length,w=!0),!y.global)break;E=y.exec(f.value)}return w?(_?\]}]+$/.exec(e);if(!t)return[e,void 0];e=e.slice(0,t.index);let r=t[0],a=r.indexOf(")");const s=Vy(e,"(");let o=Vy(e,")");for(;a!==-1&&s>o;)e+=r.slice(0,a+1),r=r.slice(a+1),a=r.indexOf(")"),o++;return[e,r]}function Hw(e,t){const r=e.input.charCodeAt(e.index-1);return(e.index===0||Va(r)||Pu(r))&&(!t||r!==47)}$w.peek=d3;function r3(){this.buffer()}function i3(e){this.enter({type:"footnoteReference",identifier:"",label:""},e)}function a3(){this.buffer()}function s3(e){this.enter({type:"footnoteDefinition",identifier:"",label:"",children:[]},e)}function l3(e){const t=this.resume(),r=this.stack[this.stack.length-1];r.type,r.identifier=Dr(this.sliceSerialize(e)).toLowerCase(),r.label=t}function o3(e){this.exit(e)}function c3(e){const t=this.resume(),r=this.stack[this.stack.length-1];r.type,r.identifier=Dr(this.sliceSerialize(e)).toLowerCase(),r.label=t}function u3(e){this.exit(e)}function d3(){return"["}function $w(e,t,r,a){const s=r.createTracker(a);let o=s.move("[^");const c=r.enter("footnoteReference"),d=r.enter("reference");return o+=s.move(r.safe(r.associationId(e),{after:"]",before:o})),d(),c(),o+=s.move("]"),o}function f3(){return{enter:{gfmFootnoteCallString:r3,gfmFootnoteCall:i3,gfmFootnoteDefinitionLabelString:a3,gfmFootnoteDefinition:s3},exit:{gfmFootnoteCallString:l3,gfmFootnoteCall:o3,gfmFootnoteDefinitionLabelString:c3,gfmFootnoteDefinition:u3}}}function h3(e){let t=!1;return e&&e.firstLineBlank&&(t=!0),{handlers:{footnoteDefinition:r,footnoteReference:$w},unsafe:[{character:"[",inConstruct:["label","phrasing","reference"]}]};function r(a,s,o,c){const d=o.createTracker(c);let h=d.move("[^");const f=o.enter("footnoteDefinition"),m=o.enter("label");return h+=d.move(o.safe(o.associationId(a),{before:h,after:"]"})),m(),h+=d.move("]:"),a.children&&a.children.length>0&&(d.shift(4),h+=d.move((t?` -`:" ")+o.indentLines(o.containerFlow(a,d.current()),t?qw:m3))),f(),h}}function m3(e,t,r){return t===0?e:qw(e,t,r)}function qw(e,t,r){return(r?"":" ")+e}const p3=["autolink","destinationLiteral","destinationRaw","reference","titleQuote","titleApostrophe"];Pw.peek=v3;function g3(){return{canContainEols:["delete"],enter:{strikethrough:x3},exit:{strikethrough:y3}}}function b3(){return{unsafe:[{character:"~",inConstruct:"phrasing",notInConstruct:p3}],handlers:{delete:Pw}}}function x3(e){this.enter({type:"delete",children:[]},e)}function y3(e){this.exit(e)}function Pw(e,t,r,a){const s=r.createTracker(a),o=r.enter("strikethrough");let c=s.move("~~");return c+=r.containerPhrasing(e,{...s.current(),before:c,after:"~"}),c+=s.move("~~"),o(),c}function v3(){return"~"}function _3(e){return e.length}function w3(e,t){const r=t||{},a=(r.align||[]).concat(),s=r.stringLength||_3,o=[],c=[],d=[],h=[];let f=0,m=-1;for(;++mf&&(f=e[m].length);++wh[w])&&(h[w]=E)}N.push(k)}c[m]=N,d[m]=S}let g=-1;if(typeof a=="object"&&"length"in a)for(;++gh[g]&&(h[g]=k),x[g]=k),y[g]=E}c.splice(1,0,y),d.splice(1,0,x),m=-1;const _=[];for(;++m "),o.shift(2);const c=r.indentLines(r.containerFlow(e,o.current()),S3);return s(),c}function S3(e,t,r){return">"+(r?"":" ")+e}function k3(e,t){return Xy(e,t.inConstruct,!0)&&!Xy(e,t.notInConstruct,!1)}function Xy(e,t,r){if(typeof t=="string"&&(t=[t]),!t||t.length===0)return r;let a=-1;for(;++ac&&(c=o):o=1,s=a+t.length,a=r.indexOf(t,s);return c}function T3(e,t){return!!(t.options.fences===!1&&e.value&&!e.lang&&/[^ \r\n]/.test(e.value)&&!/^[\t ]*(?:[\r\n]|$)|(?:^|[\r\n])[\t ]*$/.test(e.value))}function A3(e){const t=e.options.fence||"`";if(t!=="`"&&t!=="~")throw new Error("Cannot serialize code with `"+t+"` for `options.fence`, expected `` ` `` or `~`");return t}function M3(e,t,r,a){const s=A3(r),o=e.value||"",c=s==="`"?"GraveAccent":"Tilde";if(T3(e,r)){const g=r.enter("codeIndented"),y=r.indentLines(o,O3);return g(),y}const d=r.createTracker(a),h=s.repeat(Math.max(C3(o,s)+1,3)),f=r.enter("codeFenced");let m=d.move(h);if(e.lang){const g=r.enter(`codeFencedLang${c}`);m+=d.move(r.safe(e.lang,{before:m,after:" ",encode:["`"],...d.current()})),g()}if(e.lang&&e.meta){const g=r.enter(`codeFencedMeta${c}`);m+=d.move(" "),m+=d.move(r.safe(e.meta,{before:m,after:` -`,encode:["`"],...d.current()})),g()}return m+=d.move(` -`),o&&(m+=d.move(o+` -`)),m+=d.move(h),f(),m}function O3(e,t,r){return(r?"":" ")+e}function $p(e){const t=e.options.quote||'"';if(t!=='"'&&t!=="'")throw new Error("Cannot serialize title with `"+t+"` for `options.quote`, expected `\"`, or `'`");return t}function R3(e,t,r,a){const s=$p(r),o=s==='"'?"Quote":"Apostrophe",c=r.enter("definition");let d=r.enter("label");const h=r.createTracker(a);let f=h.move("[");return f+=h.move(r.safe(r.associationId(e),{before:f,after:"]",...h.current()})),f+=h.move("]: "),d(),!e.url||/[\0- \u007F]/.test(e.url)?(d=r.enter("destinationLiteral"),f+=h.move("<"),f+=h.move(r.safe(e.url,{before:f,after:">",...h.current()})),f+=h.move(">")):(d=r.enter("destinationRaw"),f+=h.move(r.safe(e.url,{before:f,after:e.title?" ":` -`,...h.current()}))),d(),e.title&&(d=r.enter(`title${o}`),f+=h.move(" "+s),f+=h.move(r.safe(e.title,{before:f,after:s,...h.current()})),f+=h.move(s),d()),c(),f}function j3(e){const t=e.options.emphasis||"*";if(t!=="*"&&t!=="_")throw new Error("Cannot serialize emphasis with `"+t+"` for `options.emphasis`, expected `*`, or `_`");return t}function bo(e){return"&#x"+e.toString(16).toUpperCase()+";"}function Su(e,t,r){const a=Xs(e),s=Xs(t);return a===void 0?s===void 0?r==="_"?{inside:!0,outside:!0}:{inside:!1,outside:!1}:s===1?{inside:!0,outside:!0}:{inside:!1,outside:!0}:a===1?s===void 0?{inside:!1,outside:!1}:s===1?{inside:!0,outside:!0}:{inside:!1,outside:!1}:s===void 0?{inside:!1,outside:!1}:s===1?{inside:!0,outside:!1}:{inside:!1,outside:!1}}Fw.peek=D3;function Fw(e,t,r,a){const s=j3(r),o=r.enter("emphasis"),c=r.createTracker(a),d=c.move(s);let h=c.move(r.containerPhrasing(e,{after:s,before:d,...c.current()}));const f=h.charCodeAt(0),m=Su(a.before.charCodeAt(a.before.length-1),f,s);m.inside&&(h=bo(f)+h.slice(1));const g=h.charCodeAt(h.length-1),y=Su(a.after.charCodeAt(0),g,s);y.inside&&(h=h.slice(0,-1)+bo(g));const x=c.move(s);return o(),r.attentionEncodeSurroundingInfo={after:y.outside,before:m.outside},d+h+x}function D3(e,t,r){return r.options.emphasis||"*"}function L3(e,t){let r=!1;return Bp(e,function(a){if("value"in a&&/\r?\n|\r/.test(a.value)||a.type==="break")return r=!0,Km}),!!((!e.depth||e.depth<3)&&Op(e)&&(t.options.setext||r))}function z3(e,t,r,a){const s=Math.max(Math.min(6,e.depth||1),1),o=r.createTracker(a);if(L3(e,r)){const m=r.enter("headingSetext"),g=r.enter("phrasing"),y=r.containerPhrasing(e,{...o.current(),before:` -`,after:` -`});return g(),m(),y+` -`+(s===1?"=":"-").repeat(y.length-(Math.max(y.lastIndexOf("\r"),y.lastIndexOf(` -`))+1))}const c="#".repeat(s),d=r.enter("headingAtx"),h=r.enter("phrasing");o.move(c+" ");let f=r.containerPhrasing(e,{before:"# ",after:` -`,...o.current()});return/^[\t ]/.test(f)&&(f=bo(f.charCodeAt(0))+f.slice(1)),f=f?c+" "+f:c,r.options.closeAtx&&(f+=" "+c),h(),d(),f}Gw.peek=I3;function Gw(e){return e.value||""}function I3(){return"<"}Vw.peek=B3;function Vw(e,t,r,a){const s=$p(r),o=s==='"'?"Quote":"Apostrophe",c=r.enter("image");let d=r.enter("label");const h=r.createTracker(a);let f=h.move("![");return f+=h.move(r.safe(e.alt,{before:f,after:"]",...h.current()})),f+=h.move("]("),d(),!e.url&&e.title||/[\0- \u007F]/.test(e.url)?(d=r.enter("destinationLiteral"),f+=h.move("<"),f+=h.move(r.safe(e.url,{before:f,after:">",...h.current()})),f+=h.move(">")):(d=r.enter("destinationRaw"),f+=h.move(r.safe(e.url,{before:f,after:e.title?" ":")",...h.current()}))),d(),e.title&&(d=r.enter(`title${o}`),f+=h.move(" "+s),f+=h.move(r.safe(e.title,{before:f,after:s,...h.current()})),f+=h.move(s),d()),f+=h.move(")"),c(),f}function B3(){return"!"}Yw.peek=U3;function Yw(e,t,r,a){const s=e.referenceType,o=r.enter("imageReference");let c=r.enter("label");const d=r.createTracker(a);let h=d.move("![");const f=r.safe(e.alt,{before:h,after:"]",...d.current()});h+=d.move(f+"]["),c();const m=r.stack;r.stack=[],c=r.enter("reference");const g=r.safe(r.associationId(e),{before:h,after:"]",...d.current()});return c(),r.stack=m,o(),s==="full"||!f||f!==g?h+=d.move(g+"]"):s==="shortcut"?h=h.slice(0,-1):h+=d.move("]"),h}function U3(){return"!"}Xw.peek=H3;function Xw(e,t,r){let a=e.value||"",s="`",o=-1;for(;new RegExp("(^|[^`])"+s+"([^`]|$)").test(a);)s+="`";for(/[^ \r\n]/.test(a)&&(/^[ \r\n]/.test(a)&&/[ \r\n]$/.test(a)||/^`|`$/.test(a))&&(a=" "+a+" ");++o\u007F]/.test(e.url))}Zw.peek=$3;function Zw(e,t,r,a){const s=$p(r),o=s==='"'?"Quote":"Apostrophe",c=r.createTracker(a);let d,h;if(Kw(e,r)){const m=r.stack;r.stack=[],d=r.enter("autolink");let g=c.move("<");return g+=c.move(r.containerPhrasing(e,{before:g,after:">",...c.current()})),g+=c.move(">"),d(),r.stack=m,g}d=r.enter("link"),h=r.enter("label");let f=c.move("[");return f+=c.move(r.containerPhrasing(e,{before:f,after:"](",...c.current()})),f+=c.move("]("),h(),!e.url&&e.title||/[\0- \u007F]/.test(e.url)?(h=r.enter("destinationLiteral"),f+=c.move("<"),f+=c.move(r.safe(e.url,{before:f,after:">",...c.current()})),f+=c.move(">")):(h=r.enter("destinationRaw"),f+=c.move(r.safe(e.url,{before:f,after:e.title?" ":")",...c.current()}))),h(),e.title&&(h=r.enter(`title${o}`),f+=c.move(" "+s),f+=c.move(r.safe(e.title,{before:f,after:s,...c.current()})),f+=c.move(s),h()),f+=c.move(")"),d(),f}function $3(e,t,r){return Kw(e,r)?"<":"["}Qw.peek=q3;function Qw(e,t,r,a){const s=e.referenceType,o=r.enter("linkReference");let c=r.enter("label");const d=r.createTracker(a);let h=d.move("[");const f=r.containerPhrasing(e,{before:h,after:"]",...d.current()});h+=d.move(f+"]["),c();const m=r.stack;r.stack=[],c=r.enter("reference");const g=r.safe(r.associationId(e),{before:h,after:"]",...d.current()});return c(),r.stack=m,o(),s==="full"||!f||f!==g?h+=d.move(g+"]"):s==="shortcut"?h=h.slice(0,-1):h+=d.move("]"),h}function q3(){return"["}function qp(e){const t=e.options.bullet||"*";if(t!=="*"&&t!=="+"&&t!=="-")throw new Error("Cannot serialize items with `"+t+"` for `options.bullet`, expected `*`, `+`, or `-`");return t}function P3(e){const t=qp(e),r=e.options.bulletOther;if(!r)return t==="*"?"-":"*";if(r!=="*"&&r!=="+"&&r!=="-")throw new Error("Cannot serialize items with `"+r+"` for `options.bulletOther`, expected `*`, `+`, or `-`");if(r===t)throw new Error("Expected `bullet` (`"+t+"`) and `bulletOther` (`"+r+"`) to be different");return r}function F3(e){const t=e.options.bulletOrdered||".";if(t!=="."&&t!==")")throw new Error("Cannot serialize items with `"+t+"` for `options.bulletOrdered`, expected `.` or `)`");return t}function Ww(e){const t=e.options.rule||"*";if(t!=="*"&&t!=="-"&&t!=="_")throw new Error("Cannot serialize rules with `"+t+"` for `options.rule`, expected `*`, `-`, or `_`");return t}function G3(e,t,r,a){const s=r.enter("list"),o=r.bulletCurrent;let c=e.ordered?F3(r):qp(r);const d=e.ordered?c==="."?")":".":P3(r);let h=t&&r.bulletLastUsed?c===r.bulletLastUsed:!1;if(!e.ordered){const m=e.children?e.children[0]:void 0;if((c==="*"||c==="-")&&m&&(!m.children||!m.children[0])&&r.stack[r.stack.length-1]==="list"&&r.stack[r.stack.length-2]==="listItem"&&r.stack[r.stack.length-3]==="list"&&r.stack[r.stack.length-4]==="listItem"&&r.indexStack[r.indexStack.length-1]===0&&r.indexStack[r.indexStack.length-2]===0&&r.indexStack[r.indexStack.length-3]===0&&(h=!0),Ww(r)===c&&m){let g=-1;for(;++g-1?t.start:1)+(r.options.incrementListMarker===!1?0:t.children.indexOf(e))+o);let c=o.length+1;(s==="tab"||s==="mixed"&&(t&&t.type==="list"&&t.spread||e.spread))&&(c=Math.ceil(c/4)*4);const d=r.createTracker(a);d.move(o+" ".repeat(c-o.length)),d.shift(c);const h=r.enter("listItem"),f=r.indentLines(r.containerFlow(e,d.current()),m);return h(),f;function m(g,y,x){return y?(x?"":" ".repeat(c))+g:(x?o:o+" ".repeat(c-o.length))+g}}function X3(e,t,r,a){const s=r.enter("paragraph"),o=r.enter("phrasing"),c=r.containerPhrasing(e,a);return o(),s(),c}const K3=Vu(["break","delete","emphasis","footnote","footnoteReference","image","imageReference","inlineCode","inlineMath","link","linkReference","mdxJsxTextElement","mdxTextExpression","strong","text","textDirective"]);function Z3(e,t,r,a){return(e.children.some(function(c){return K3(c)})?r.containerPhrasing:r.containerFlow).call(r,e,a)}function Q3(e){const t=e.options.strong||"*";if(t!=="*"&&t!=="_")throw new Error("Cannot serialize strong with `"+t+"` for `options.strong`, expected `*`, or `_`");return t}Jw.peek=W3;function Jw(e,t,r,a){const s=Q3(r),o=r.enter("strong"),c=r.createTracker(a),d=c.move(s+s);let h=c.move(r.containerPhrasing(e,{after:s,before:d,...c.current()}));const f=h.charCodeAt(0),m=Su(a.before.charCodeAt(a.before.length-1),f,s);m.inside&&(h=bo(f)+h.slice(1));const g=h.charCodeAt(h.length-1),y=Su(a.after.charCodeAt(0),g,s);y.inside&&(h=h.slice(0,-1)+bo(g));const x=c.move(s+s);return o(),r.attentionEncodeSurroundingInfo={after:y.outside,before:m.outside},d+h+x}function W3(e,t,r){return r.options.strong||"*"}function J3(e,t,r,a){return r.safe(e.value,a)}function e4(e){const t=e.options.ruleRepetition||3;if(t<3)throw new Error("Cannot serialize rules with repetition `"+t+"` for `options.ruleRepetition`, expected `3` or more");return t}function t4(e,t,r){const a=(Ww(r)+(r.options.ruleSpaces?" ":"")).repeat(e4(r));return r.options.ruleSpaces?a.slice(0,-1):a}const eE={blockquote:N3,break:Ky,code:M3,definition:R3,emphasis:Fw,hardBreak:Ky,heading:z3,html:Gw,image:Vw,imageReference:Yw,inlineCode:Xw,link:Zw,linkReference:Qw,list:G3,listItem:Y3,paragraph:X3,root:Z3,strong:Jw,text:J3,thematicBreak:t4};function n4(){return{enter:{table:r4,tableData:Zy,tableHeader:Zy,tableRow:a4},exit:{codeText:s4,table:i4,tableData:Rh,tableHeader:Rh,tableRow:Rh}}}function r4(e){const t=e._align;this.enter({type:"table",align:t.map(function(r){return r==="none"?null:r}),children:[]},e),this.data.inTable=!0}function i4(e){this.exit(e),this.data.inTable=void 0}function a4(e){this.enter({type:"tableRow",children:[]},e)}function Rh(e){this.exit(e)}function Zy(e){this.enter({type:"tableCell",children:[]},e)}function s4(e){let t=this.resume();this.data.inTable&&(t=t.replace(/\\([\\|])/g,l4));const r=this.stack[this.stack.length-1];r.type,r.value=t,this.exit(e)}function l4(e,t){return t==="|"?t:e}function o4(e){const t=e||{},r=t.tableCellPadding,a=t.tablePipeAlign,s=t.stringLength,o=r?" ":"|";return{unsafe:[{character:"\r",inConstruct:"tableCell"},{character:` -`,inConstruct:"tableCell"},{atBreak:!0,character:"|",after:"[ :-]"},{character:"|",inConstruct:"tableCell"},{atBreak:!0,character:":",after:"-"},{atBreak:!0,character:"-",after:"[:|-]"}],handlers:{inlineCode:y,table:c,tableCell:h,tableRow:d}};function c(x,_,N,S){return f(m(x,N,S),x.align)}function d(x,_,N,S){const w=g(x,N,S),k=f([w]);return k.slice(0,k.indexOf(` -`))}function h(x,_,N,S){const w=N.enter("tableCell"),k=N.enter("phrasing"),E=N.containerPhrasing(x,{...S,before:o,after:o});return k(),w(),E}function f(x,_){return w3(x,{align:_,alignDelimiters:a,padding:r,stringLength:s})}function m(x,_,N){const S=x.children;let w=-1;const k=[],E=_.enter("table");for(;++w0&&!r&&(e[e.length-1][1]._gfmAutolinkLiteralWalkedInto=!0),r}const k4={tokenize:D4,partial:!0};function C4(){return{document:{91:{name:"gfmFootnoteDefinition",tokenize:O4,continuation:{tokenize:R4},exit:j4}},text:{91:{name:"gfmFootnoteCall",tokenize:M4},93:{name:"gfmPotentialFootnoteCall",add:"after",tokenize:T4,resolveTo:A4}}}}function T4(e,t,r){const a=this;let s=a.events.length;const o=a.parser.gfmFootnotes||(a.parser.gfmFootnotes=[]);let c;for(;s--;){const h=a.events[s][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 d;function d(h){if(!c||!c._balanced)return r(h);const f=Dr(a.sliceSerialize({start:c.end,end:a.now()}));return f.codePointAt(0)!==94||!o.includes(f.slice(1))?r(h):(e.enter("gfmFootnoteCallLabelMarker"),e.consume(h),e.exit("gfmFootnoteCallLabelMarker"),t(h))}}function A4(e,t){let r=e.length;for(;r--;)if(e[r][1].type==="labelImage"&&e[r][0]==="enter"){e[r][1];break}e[r+1][1].type="data",e[r+3][1].type="gfmFootnoteCallLabelMarker";const a={type:"gfmFootnoteCall",start:Object.assign({},e[r+3][1].start),end:Object.assign({},e[e.length-1][1].end)},s={type:"gfmFootnoteCallMarker",start:Object.assign({},e[r+3][1].end),end:Object.assign({},e[r+3][1].end)};s.end.column++,s.end.offset++,s.end._bufferIndex++;const o={type:"gfmFootnoteCallString",start:Object.assign({},s.end),end:Object.assign({},e[e.length-1][1].start)},c={type:"chunkString",contentType:"string",start:Object.assign({},o.start),end:Object.assign({},o.end)},d=[e[r+1],e[r+2],["enter",a,t],e[r+3],e[r+4],["enter",s,t],["exit",s,t],["enter",o,t],["enter",c,t],["exit",c,t],["exit",o,t],e[e.length-2],e[e.length-1],["exit",a,t]];return e.splice(r,e.length-r+1,...d),e}function M4(e,t,r){const a=this,s=a.parser.gfmFootnotes||(a.parser.gfmFootnotes=[]);let o=0,c;return d;function d(g){return e.enter("gfmFootnoteCall"),e.enter("gfmFootnoteCallLabelMarker"),e.consume(g),e.exit("gfmFootnoteCallLabelMarker"),h}function h(g){return g!==94?r(g):(e.enter("gfmFootnoteCallMarker"),e.consume(g),e.exit("gfmFootnoteCallMarker"),e.enter("gfmFootnoteCallString"),e.enter("chunkString").contentType="string",f)}function f(g){if(o>999||g===93&&!c||g===null||g===91||Tt(g))return r(g);if(g===93){e.exit("chunkString");const y=e.exit("gfmFootnoteCallString");return s.includes(Dr(a.sliceSerialize(y)))?(e.enter("gfmFootnoteCallLabelMarker"),e.consume(g),e.exit("gfmFootnoteCallLabelMarker"),e.exit("gfmFootnoteCall"),t):r(g)}return Tt(g)||(c=!0),o++,e.consume(g),g===92?m:f}function m(g){return g===91||g===92||g===93?(e.consume(g),o++,f):f(g)}}function O4(e,t,r){const a=this,s=a.parser.gfmFootnotes||(a.parser.gfmFootnotes=[]);let o,c=0,d;return h;function h(_){return e.enter("gfmFootnoteDefinition")._container=!0,e.enter("gfmFootnoteDefinitionLabel"),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(_),e.exit("gfmFootnoteDefinitionLabelMarker"),f}function f(_){return _===94?(e.enter("gfmFootnoteDefinitionMarker"),e.consume(_),e.exit("gfmFootnoteDefinitionMarker"),e.enter("gfmFootnoteDefinitionLabelString"),e.enter("chunkString").contentType="string",m):r(_)}function m(_){if(c>999||_===93&&!d||_===null||_===91||Tt(_))return r(_);if(_===93){e.exit("chunkString");const N=e.exit("gfmFootnoteDefinitionLabelString");return o=Dr(a.sliceSerialize(N)),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(_),e.exit("gfmFootnoteDefinitionLabelMarker"),e.exit("gfmFootnoteDefinitionLabel"),y}return Tt(_)||(d=!0),c++,e.consume(_),_===92?g:m}function g(_){return _===91||_===92||_===93?(e.consume(_),c++,m):m(_)}function y(_){return _===58?(e.enter("definitionMarker"),e.consume(_),e.exit("definitionMarker"),s.includes(o)||s.push(o),ot(e,x,"gfmFootnoteDefinitionWhitespace")):r(_)}function x(_){return t(_)}}function R4(e,t,r){return e.check(Ro,t,e.attempt(k4,t,r))}function j4(e){e.exit("gfmFootnoteDefinition")}function D4(e,t,r){const a=this;return ot(e,s,"gfmFootnoteDefinitionIndent",5);function s(o){const c=a.events[a.events.length-1];return c&&c[1].type==="gfmFootnoteDefinitionIndent"&&c[2].sliceSerialize(c[1],!0).length===4?t(o):r(o)}}function L4(e){let r=(e||{}).singleTilde;const a={name:"strikethrough",tokenize:o,resolveAll:s};return r==null&&(r=!0),{text:{126:a},insideSpan:{null:[a]},attentionMarkers:{null:[126]}};function s(c,d){let h=-1;for(;++h1?h(_):(c.consume(_),g++,x);if(g<2&&!r)return h(_);const S=c.exit("strikethroughSequenceTemporary"),w=Xs(_);return S._open=!w||w===2&&!!N,S._close=!N||N===2&&!!w,d(_)}}}class z4{constructor(){this.map=[]}add(t,r,a){I4(this,t,r,a)}consume(t){if(this.map.sort(function(o,c){return o[0]-c[0]}),this.map.length===0)return;let r=this.map.length;const a=[];for(;r>0;)r-=1,a.push(t.slice(this.map[r][0]+this.map[r][1]),this.map[r][2]),t.length=this.map[r][0];a.push(t.slice()),t.length=0;let s=a.pop();for(;s;){for(const o of s)t.push(o);s=a.pop()}this.map.length=0}}function I4(e,t,r,a){let s=0;if(!(r===0&&a.length===0)){for(;s-1;){const T=a.events[z][1].type;if(T==="lineEnding"||T==="linePrefix")z--;else break}const V=z>-1?a.events[z][1].type:null,P=V==="tableHead"||V==="tableRow"?R:h;return P===R&&a.parser.lazy[a.now().line]?r(j):P(j)}function h(j){return e.enter("tableHead"),e.enter("tableRow"),f(j)}function f(j){return j===124||(c=!0,o+=1),m(j)}function m(j){return j===null?r(j):Be(j)?o>1?(o=0,a.interrupt=!0,e.exit("tableRow"),e.enter("lineEnding"),e.consume(j),e.exit("lineEnding"),x):r(j):tt(j)?ot(e,m,"whitespace")(j):(o+=1,c&&(c=!1,s+=1),j===124?(e.enter("tableCellDivider"),e.consume(j),e.exit("tableCellDivider"),c=!0,m):(e.enter("data"),g(j)))}function g(j){return j===null||j===124||Tt(j)?(e.exit("data"),m(j)):(e.consume(j),j===92?y:g)}function y(j){return j===92||j===124?(e.consume(j),g):g(j)}function x(j){return a.interrupt=!1,a.parser.lazy[a.now().line]?r(j):(e.enter("tableDelimiterRow"),c=!1,tt(j)?ot(e,_,"linePrefix",a.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(j):_(j))}function _(j){return j===45||j===58?S(j):j===124?(c=!0,e.enter("tableCellDivider"),e.consume(j),e.exit("tableCellDivider"),N):B(j)}function N(j){return tt(j)?ot(e,S,"whitespace")(j):S(j)}function S(j){return j===58?(o+=1,c=!0,e.enter("tableDelimiterMarker"),e.consume(j),e.exit("tableDelimiterMarker"),w):j===45?(o+=1,w(j)):j===null||Be(j)?M(j):B(j)}function w(j){return j===45?(e.enter("tableDelimiterFiller"),k(j)):B(j)}function k(j){return j===45?(e.consume(j),k):j===58?(c=!0,e.exit("tableDelimiterFiller"),e.enter("tableDelimiterMarker"),e.consume(j),e.exit("tableDelimiterMarker"),E):(e.exit("tableDelimiterFiller"),E(j))}function E(j){return tt(j)?ot(e,M,"whitespace")(j):M(j)}function M(j){return j===124?_(j):j===null||Be(j)?!c||s!==o?B(j):(e.exit("tableDelimiterRow"),e.exit("tableHead"),t(j)):B(j)}function B(j){return r(j)}function R(j){return e.enter("tableRow"),U(j)}function U(j){return j===124?(e.enter("tableCellDivider"),e.consume(j),e.exit("tableCellDivider"),U):j===null||Be(j)?(e.exit("tableRow"),t(j)):tt(j)?ot(e,U,"whitespace")(j):(e.enter("data"),I(j))}function I(j){return j===null||j===124||Tt(j)?(e.exit("data"),U(j)):(e.consume(j),j===92?X:I)}function X(j){return j===92||j===124?(e.consume(j),I):I(j)}}function $4(e,t){let r=-1,a=!0,s=0,o=[0,0,0,0],c=[0,0,0,0],d=!1,h=0,f,m,g;const y=new z4;for(;++rr[2]+1){const _=r[2]+1,N=r[3]-r[2]-1;e.add(_,N,[])}}e.add(r[3]+1,0,[["exit",g,t]])}return s!==void 0&&(o.end=Object.assign({},Hs(t.events,s)),e.add(s,0,[["exit",o,t]]),o=void 0),o}function Wy(e,t,r,a,s){const o=[],c=Hs(t.events,r);s&&(s.end=Object.assign({},c),o.push(["exit",s,t])),a.end=Object.assign({},c),o.push(["exit",a,t]),e.add(r+1,0,o)}function Hs(e,t){const r=e[t],a=r[0]==="enter"?"start":"end";return r[1][a]}const q4={name:"tasklistCheck",tokenize:F4};function P4(){return{text:{91:q4}}}function F4(e,t,r){const a=this;return s;function s(h){return a.previous!==null||!a._gfmTasklistFirstContentOfListItem?r(h):(e.enter("taskListCheck"),e.enter("taskListCheckMarker"),e.consume(h),e.exit("taskListCheckMarker"),o)}function o(h){return Tt(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):r(h)}function c(h){return h===93?(e.enter("taskListCheckMarker"),e.consume(h),e.exit("taskListCheckMarker"),e.exit("taskListCheck"),d):r(h)}function d(h){return Be(h)?t(h):tt(h)?e.check({tokenize:G4},t,r)(h):r(h)}}function G4(e,t,r){return ot(e,a,"whitespace");function a(s){return s===null?r(s):t(s)}}function V4(e){return xw([b4(),C4(),L4(e),U4(),P4()])}const Y4={};function Fp(e){const t=this,r=e||Y4,a=t.data(),s=a.micromarkExtensions||(a.micromarkExtensions=[]),o=a.fromMarkdownExtensions||(a.fromMarkdownExtensions=[]),c=a.toMarkdownExtensions||(a.toMarkdownExtensions=[]);s.push(V4(r)),o.push(h4()),c.push(m4(r))}var jh,Jy;function X4(){if(Jy)return jh;Jy=1;function e(re){return re instanceof Map?re.clear=re.delete=re.set=function(){throw new Error("map is read-only")}:re instanceof Set&&(re.add=re.clear=re.delete=function(){throw new Error("set is read-only")}),Object.freeze(re),Object.getOwnPropertyNames(re).forEach(me=>{const Ee=re[me],Pe=typeof Ee;(Pe==="object"||Pe==="function")&&!Object.isFrozen(Ee)&&e(Ee)}),re}class t{constructor(me){me.data===void 0&&(me.data={}),this.data=me.data,this.isMatchIgnored=!1}ignoreMatch(){this.isMatchIgnored=!0}}function r(re){return re.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function a(re,...me){const Ee=Object.create(null);for(const Pe in re)Ee[Pe]=re[Pe];return me.forEach(function(Pe){for(const St in Pe)Ee[St]=Pe[St]}),Ee}const s="",o=re=>!!re.scope,c=(re,{prefix:me})=>{if(re.startsWith("language:"))return re.replace("language:","language-");if(re.includes(".")){const Ee=re.split(".");return[`${me}${Ee.shift()}`,...Ee.map((Pe,St)=>`${Pe}${"_".repeat(St+1)}`)].join(" ")}return`${me}${re}`};class d{constructor(me,Ee){this.buffer="",this.classPrefix=Ee.classPrefix,me.walk(this)}addText(me){this.buffer+=r(me)}openNode(me){if(!o(me))return;const Ee=c(me.scope,{prefix:this.classPrefix});this.span(Ee)}closeNode(me){o(me)&&(this.buffer+=s)}value(){return this.buffer}span(me){this.buffer+=``}}const h=(re={})=>{const me={children:[]};return Object.assign(me,re),me};class f{constructor(){this.rootNode=h(),this.stack=[this.rootNode]}get top(){return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(me){this.top.children.push(me)}openNode(me){const Ee=h({scope:me});this.add(Ee),this.stack.push(Ee)}closeNode(){if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}walk(me){return this.constructor._walk(me,this.rootNode)}static _walk(me,Ee){return typeof Ee=="string"?me.addText(Ee):Ee.children&&(me.openNode(Ee),Ee.children.forEach(Pe=>this._walk(me,Pe)),me.closeNode(Ee)),me}static _collapse(me){typeof me!="string"&&me.children&&(me.children.every(Ee=>typeof Ee=="string")?me.children=[me.children.join("")]:me.children.forEach(Ee=>{f._collapse(Ee)}))}}class m extends f{constructor(me){super(),this.options=me}addText(me){me!==""&&this.add(me)}startScope(me){this.openNode(me)}endScope(){this.closeNode()}__addSublanguage(me,Ee){const Pe=me.root;Ee&&(Pe.scope=`language:${Ee}`),this.add(Pe)}toHTML(){return new d(this,this.options).value()}finalize(){return this.closeAllNodes(),!0}}function g(re){return re?typeof re=="string"?re:re.source:null}function y(re){return N("(?=",re,")")}function x(re){return N("(?:",re,")*")}function _(re){return N("(?:",re,")?")}function N(...re){return re.map(Ee=>g(Ee)).join("")}function S(re){const me=re[re.length-1];return typeof me=="object"&&me.constructor===Object?(re.splice(re.length-1,1),me):{}}function w(...re){return"("+(S(re).capture?"":"?:")+re.map(Pe=>g(Pe)).join("|")+")"}function k(re){return new RegExp(re.toString()+"|").exec("").length-1}function E(re,me){const Ee=re&&re.exec(me);return Ee&&Ee.index===0}const M=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./;function B(re,{joinWith:me}){let Ee=0;return re.map(Pe=>{Ee+=1;const St=Ee;let gt=g(Pe),Ae="";for(;gt.length>0;){const Se=M.exec(gt);if(!Se){Ae+=gt;break}Ae+=gt.substring(0,Se.index),gt=gt.substring(Se.index+Se[0].length),Se[0][0]==="\\"&&Se[1]?Ae+="\\"+String(Number(Se[1])+St):(Ae+=Se[0],Se[0]==="("&&Ee++)}return Ae}).map(Pe=>`(${Pe})`).join(me)}const R=/\b\B/,U="[a-zA-Z]\\w*",I="[a-zA-Z_]\\w*",X="\\b\\d+(\\.\\d+)?",j="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",z="\\b(0b[01]+)",V="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",P=(re={})=>{const me=/^#![ ]*\//;return re.binary&&(re.begin=N(me,/.*\b/,re.binary,/\b.*/)),a({scope:"meta",begin:me,end:/$/,relevance:0,"on:begin":(Ee,Pe)=>{Ee.index!==0&&Pe.ignoreMatch()}},re)},T={begin:"\\\\[\\s\\S]",relevance:0},$={scope:"string",begin:"'",end:"'",illegal:"\\n",contains:[T]},O={scope:"string",begin:'"',end:'"',illegal:"\\n",contains:[T]},H={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/},K=function(re,me,Ee={}){const Pe=a({scope:"comment",begin:re,end:me,contains:[]},Ee);Pe.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 St=w("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 Pe.contains.push({begin:N(/[ ]+/,"(",St,/[.]?[:]?([.][ ]|[ ])/,"){3}")}),Pe},Z=K("//","$"),C=K("/\\*","\\*/"),D=K("#","$"),Y={scope:"number",begin:X,relevance:0},L={scope:"number",begin:j,relevance:0},G={scope:"number",begin:z,relevance:0},q={scope:"regexp",begin:/\/(?=[^/\n]*\/)/,end:/\/[gimuy]*/,contains:[T,{begin:/\[/,end:/\]/,relevance:0,contains:[T]}]},Q={scope:"title",begin:U,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:T,BINARY_NUMBER_MODE:G,BINARY_NUMBER_RE:z,COMMENT:K,C_BLOCK_COMMENT_MODE:C,C_LINE_COMMENT_MODE:Z,C_NUMBER_MODE:L,C_NUMBER_RE:j,END_SAME_AS_BEGIN:function(re){return Object.assign(re,{"on:begin":(me,Ee)=>{Ee.data._beginMatch=me[1]},"on:end":(me,Ee)=>{Ee.data._beginMatch!==me[1]&&Ee.ignoreMatch()}})},HASH_COMMENT_MODE:D,IDENT_RE:U,MATCH_NOTHING_RE:R,METHOD_GUARD:W,NUMBER_MODE:Y,NUMBER_RE:X,PHRASAL_WORDS_MODE:H,QUOTE_STRING_MODE:O,REGEXP_MODE:q,RE_STARTERS_RE:V,SHEBANG:P,TITLE_MODE:Q,UNDERSCORE_IDENT_RE:I,UNDERSCORE_TITLE_MODE:J});function fe(re,me){re.input[re.index-1]==="."&&me.ignoreMatch()}function be(re,me){re.className!==void 0&&(re.scope=re.className,delete re.className)}function we(re,me){me&&re.beginKeywords&&(re.begin="\\b("+re.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)",re.__beforeBegin=fe,re.keywords=re.keywords||re.beginKeywords,delete re.beginKeywords,re.relevance===void 0&&(re.relevance=0))}function Ne(re,me){Array.isArray(re.illegal)&&(re.illegal=w(...re.illegal))}function De(re,me){if(re.match){if(re.begin||re.end)throw new Error("begin & end are not supported with match");re.begin=re.match,delete re.match}}function $e(re,me){re.relevance===void 0&&(re.relevance=1)}const st=(re,me)=>{if(!re.beforeMatch)return;if(re.starts)throw new Error("beforeMatch cannot be used with starts");const Ee=Object.assign({},re);Object.keys(re).forEach(Pe=>{delete re[Pe]}),re.keywords=Ee.keywords,re.begin=N(Ee.beforeMatch,y(Ee.begin)),re.starts={relevance:0,contains:[Object.assign(Ee,{endsParent:!0})]},re.relevance=0,delete Ee.beforeMatch},Rt=["of","and","for","in","not","or","if","then","parent","list","value"],Yt="keyword";function Pt(re,me,Ee=Yt){const Pe=Object.create(null);return typeof re=="string"?St(Ee,re.split(" ")):Array.isArray(re)?St(Ee,re):Object.keys(re).forEach(function(gt){Object.assign(Pe,Pt(re[gt],me,gt))}),Pe;function St(gt,Ae){me&&(Ae=Ae.map(Se=>Se.toLowerCase())),Ae.forEach(function(Se){const Ue=Se.split("|");Pe[Ue[0]]=[gt,Xt(Ue[0],Ue[1])]})}}function Xt(re,me){return me?Number(me):Yn(re)?0:1}function Yn(re){return Rt.includes(re.toLowerCase())}const En={},ct=re=>{console.error(re)},It=(re,...me)=>{console.log(`WARN: ${re}`,...me)},ue=(re,me)=>{En[`${re}/${me}`]||(console.log(`Deprecated as of ${re}. ${me}`),En[`${re}/${me}`]=!0)},xe=new Error;function Oe(re,me,{key:Ee}){let Pe=0;const St=re[Ee],gt={},Ae={};for(let Se=1;Se<=me.length;Se++)Ae[Se+Pe]=St[Se],gt[Se+Pe]=!0,Pe+=k(me[Se-1]);re[Ee]=Ae,re[Ee]._emit=gt,re[Ee]._multi=!0}function Fe(re){if(Array.isArray(re.begin)){if(re.skip||re.excludeBegin||re.returnBegin)throw ct("skip, excludeBegin, returnBegin not compatible with beginScope: {}"),xe;if(typeof re.beginScope!="object"||re.beginScope===null)throw ct("beginScope must be object"),xe;Oe(re,re.begin,{key:"beginScope"}),re.begin=B(re.begin,{joinWith:""})}}function Ze(re){if(Array.isArray(re.end)){if(re.skip||re.excludeEnd||re.returnEnd)throw ct("skip, excludeEnd, returnEnd not compatible with endScope: {}"),xe;if(typeof re.endScope!="object"||re.endScope===null)throw ct("endScope must be object"),xe;Oe(re,re.end,{key:"endScope"}),re.end=B(re.end,{joinWith:""})}}function on(re){re.scope&&typeof re.scope=="object"&&re.scope!==null&&(re.beginScope=re.scope,delete re.scope)}function Nn(re){on(re),typeof re.beginScope=="string"&&(re.beginScope={_wrap:re.beginScope}),typeof re.endScope=="string"&&(re.endScope={_wrap:re.endScope}),Fe(re),Ze(re)}function Kt(re){function me(Ae,Se){return new RegExp(g(Ae),"m"+(re.case_insensitive?"i":"")+(re.unicodeRegex?"u":"")+(Se?"g":""))}class Ee{constructor(){this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}addRule(Se,Ue){Ue.position=this.position++,this.matchIndexes[this.matchAt]=Ue,this.regexes.push([Ue,Se]),this.matchAt+=k(Se)+1}compile(){this.regexes.length===0&&(this.exec=()=>null);const Se=this.regexes.map(Ue=>Ue[1]);this.matcherRe=me(B(Se,{joinWith:"|"}),!0),this.lastIndex=0}exec(Se){this.matcherRe.lastIndex=this.lastIndex;const Ue=this.matcherRe.exec(Se);if(!Ue)return null;const Bt=Ue.findIndex((xr,Si)=>Si>0&&xr!==void 0),Mt=this.matchIndexes[Bt];return Ue.splice(0,Bt),Object.assign(Ue,Mt)}}class Pe{constructor(){this.rules=[],this.multiRegexes=[],this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(Se){if(this.multiRegexes[Se])return this.multiRegexes[Se];const Ue=new Ee;return this.rules.slice(Se).forEach(([Bt,Mt])=>Ue.addRule(Bt,Mt)),Ue.compile(),this.multiRegexes[Se]=Ue,Ue}resumingScanAtSamePosition(){return this.regexIndex!==0}considerAll(){this.regexIndex=0}addRule(Se,Ue){this.rules.push([Se,Ue]),Ue.type==="begin"&&this.count++}exec(Se){const Ue=this.getMatcher(this.regexIndex);Ue.lastIndex=this.lastIndex;let Bt=Ue.exec(Se);if(this.resumingScanAtSamePosition()&&!(Bt&&Bt.index===this.lastIndex)){const Mt=this.getMatcher(0);Mt.lastIndex=this.lastIndex+1,Bt=Mt.exec(Se)}return Bt&&(this.regexIndex+=Bt.position+1,this.regexIndex===this.count&&this.considerAll()),Bt}}function St(Ae){const Se=new Pe;return Ae.contains.forEach(Ue=>Se.addRule(Ue.begin,{rule:Ue,type:"begin"})),Ae.terminatorEnd&&Se.addRule(Ae.terminatorEnd,{type:"end"}),Ae.illegal&&Se.addRule(Ae.illegal,{type:"illegal"}),Se}function gt(Ae,Se){const Ue=Ae;if(Ae.isCompiled)return Ue;[be,De,Nn,st].forEach(Mt=>Mt(Ae,Se)),re.compilerExtensions.forEach(Mt=>Mt(Ae,Se)),Ae.__beforeBegin=null,[we,Ne,$e].forEach(Mt=>Mt(Ae,Se)),Ae.isCompiled=!0;let Bt=null;return typeof Ae.keywords=="object"&&Ae.keywords.$pattern&&(Ae.keywords=Object.assign({},Ae.keywords),Bt=Ae.keywords.$pattern,delete Ae.keywords.$pattern),Bt=Bt||/\w+/,Ae.keywords&&(Ae.keywords=Pt(Ae.keywords,re.case_insensitive)),Ue.keywordPatternRe=me(Bt,!0),Se&&(Ae.begin||(Ae.begin=/\B|\b/),Ue.beginRe=me(Ue.begin),!Ae.end&&!Ae.endsWithParent&&(Ae.end=/\B|\b/),Ae.end&&(Ue.endRe=me(Ue.end)),Ue.terminatorEnd=g(Ue.end)||"",Ae.endsWithParent&&Se.terminatorEnd&&(Ue.terminatorEnd+=(Ae.end?"|":"")+Se.terminatorEnd)),Ae.illegal&&(Ue.illegalRe=me(Ae.illegal)),Ae.contains||(Ae.contains=[]),Ae.contains=[].concat(...Ae.contains.map(function(Mt){return Wt(Mt==="self"?Ae:Mt)})),Ae.contains.forEach(function(Mt){gt(Mt,Ue)}),Ae.starts&>(Ae.starts,Se),Ue.matcher=St(Ue),Ue}if(re.compilerExtensions||(re.compilerExtensions=[]),re.contains&&re.contains.includes("self"))throw new Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.");return re.classNameAliases=a(re.classNameAliases||{}),gt(re)}function At(re){return re?re.endsWithParent||At(re.starts):!1}function Wt(re){return re.variants&&!re.cachedVariants&&(re.cachedVariants=re.variants.map(function(me){return a(re,{variants:null},me)})),re.cachedVariants?re.cachedVariants:At(re)?a(re,{starts:re.starts?a(re.starts):null}):Object.isFrozen(re)?a(re):re}var ut="11.11.1";class In extends Error{constructor(me,Ee){super(me),this.name="HTMLInjectionError",this.html=Ee}}const cn=r,Ni=a,nt=Symbol("nomatch"),Xn=7,On=function(re){const me=Object.create(null),Ee=Object.create(null),Pe=[];let St=!0;const gt="Could not find the language '{}', did you forget to load/include a language module?",Ae={disableAutodetect:!0,name:"Plain text",contains:[]};let Se={ignoreUnescapedHTML:!1,throwUnescapedHTML:!1,noHighlightRe:/^(no-?highlight)$/i,languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",cssSelector:"pre code",languages:null,__emitter:m};function Ue(ye){return Se.noHighlightRe.test(ye)}function Bt(ye){let Le=ye.className+" ";Le+=ye.parentNode?ye.parentNode.className:"";const Qe=Se.languageDetectRe.exec(Le);if(Qe){const ft=bn(Qe[1]);return ft||(It(gt.replace("{}",Qe[1])),It("Falling back to no-highlight mode for this block.",ye)),ft?Qe[1]:"no-highlight"}return Le.split(/\s+/).find(ft=>Ue(ft)||bn(ft))}function Mt(ye,Le,Qe){let ft="",Ht="";typeof Le=="object"?(ft=ye,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=ye,ft=Le),Qe===void 0&&(Qe=!0);const pn={code:ft,language:Ht};Jr("before:highlight",pn);const Rn=pn.result?pn.result:xr(pn.language,pn.code,Qe);return Rn.code=pn.code,Jr("after:highlight",Rn),Rn}function xr(ye,Le,Qe,ft){const Ht=Object.create(null);function pn(_e,Re){return _e.keywords[Re]}function Rn(){if(!qe.keywords){Jt.addText(bt);return}let _e=0;qe.keywordPatternRe.lastIndex=0;let Re=qe.keywordPatternRe.exec(bt),Ye="";for(;Re;){Ye+=bt.substring(_e,Re.index);const rt=un.case_insensitive?Re[0].toLowerCase():Re[0],$t=pn(qe,rt);if($t){const[or,sl]=$t;if(Jt.addText(Ye),Ye="",Ht[rt]=(Ht[rt]||0)+1,Ht[rt]<=Xn&&(Ri+=sl),or.startsWith("_"))Ye+=Re[0];else{const qo=un.classNameAliases[or]||or;jn(Re[0],qo)}}else Ye+=Re[0];_e=qe.keywordPatternRe.lastIndex,Re=qe.keywordPatternRe.exec(bt)}Ye+=bt.substring(_e),Jt.addText(Ye)}function Sn(){if(bt==="")return;let _e=null;if(typeof qe.subLanguage=="string"){if(!me[qe.subLanguage]){Jt.addText(bt);return}_e=xr(qe.subLanguage,bt,!0,$o[qe.subLanguage]),$o[qe.subLanguage]=_e._top}else _e=ki(bt,qe.subLanguage.length?qe.subLanguage:null);qe.relevance>0&&(Ri+=_e.relevance),Jt.__addSublanguage(_e._emitter,_e.language)}function _t(){qe.subLanguage!=null?Sn():Rn(),bt=""}function jn(_e,Re){_e!==""&&(Jt.startScope(Re),Jt.addText(_e),Jt.endScope())}function rs(_e,Re){let Ye=1;const rt=Re.length-1;for(;Ye<=rt;){if(!_e._emit[Ye]){Ye++;continue}const $t=un.classNameAliases[_e[Ye]]||_e[Ye],or=Re[Ye];$t?jn(or,$t):(bt=or,Rn(),bt=""),Ye++}}function Ai(_e,Re){return _e.scope&&typeof _e.scope=="string"&&Jt.openNode(un.classNameAliases[_e.scope]||_e.scope),_e.beginScope&&(_e.beginScope._wrap?(jn(bt,un.classNameAliases[_e.beginScope._wrap]||_e.beginScope._wrap),bt=""):_e.beginScope._multi&&(rs(_e.beginScope,Re),bt="")),qe=Object.create(_e,{parent:{value:qe}}),qe}function Ur(_e,Re,Ye){let rt=E(_e.endRe,Ye);if(rt){if(_e["on:end"]){const $t=new t(_e);_e["on:end"](Re,$t),$t.isMatchIgnored&&(rt=!1)}if(rt){for(;_e.endsParent&&_e.parent;)_e=_e.parent;return _e}}if(_e.endsWithParent)return Ur(_e.parent,Re,Ye)}function Mi(_e){return qe.matcher.regexIndex===0?(bt+=_e[0],1):(ji=!0,0)}function is(_e){const Re=_e[0],Ye=_e.rule,rt=new t(Ye),$t=[Ye.__beforeBegin,Ye["on:begin"]];for(const or of $t)if(or&&(or(_e,rt),rt.isMatchIgnored))return Mi(Re);return Ye.skip?bt+=Re:(Ye.excludeBegin&&(bt+=Re),_t(),!Ye.returnBegin&&!Ye.excludeBegin&&(bt=Re)),Ai(Ye,_e),Ye.returnBegin?0:Re.length}function kn(_e){const Re=_e[0],Ye=Le.substring(_e.index),rt=Ur(qe,_e,Ye);if(!rt)return nt;const $t=qe;qe.endScope&&qe.endScope._wrap?(_t(),jn(Re,qe.endScope._wrap)):qe.endScope&&qe.endScope._multi?(_t(),rs(qe.endScope,_e)):$t.skip?bt+=Re:($t.returnEnd||$t.excludeEnd||(bt+=Re),_t(),$t.excludeEnd&&(bt=Re));do qe.scope&&Jt.closeNode(),!qe.skip&&!qe.subLanguage&&(Ri+=qe.relevance),qe=qe.parent;while(qe!==rt.parent);return rt.starts&&Ai(rt.starts,_e),$t.returnEnd?0:Re.length}function xa(){const _e=[];for(let Re=qe;Re!==un;Re=Re.parent)Re.scope&&_e.unshift(Re.scope);_e.forEach(Re=>Jt.openNode(Re))}let Er={};function Oi(_e,Re){const Ye=Re&&Re[0];if(bt+=_e,Ye==null)return _t(),0;if(Er.type==="begin"&&Re.type==="end"&&Er.index===Re.index&&Ye===""){if(bt+=Le.slice(Re.index,Re.index+1),!St){const rt=new Error(`0 width match regex (${ye})`);throw rt.languageName=ye,rt.badRule=Er.rule,rt}return 1}if(Er=Re,Re.type==="begin")return is(Re);if(Re.type==="illegal"&&!Qe){const rt=new Error('Illegal lexeme "'+Ye+'" for mode "'+(qe.scope||"")+'"');throw rt.mode=qe,rt}else if(Re.type==="end"){const rt=kn(Re);if(rt!==nt)return rt}if(Re.type==="illegal"&&Ye==="")return bt+=` -`,1;if(al>1e5&&al>Re.index*3)throw new Error("potential infinite loop, way more iterations than matches");return bt+=Ye,Ye.length}const un=bn(ye);if(!un)throw ct(gt.replace("{}",ye)),new Error('Unknown language: "'+ye+'"');const ya=Kt(un);let as="",qe=ft||ya;const $o={},Jt=new Se.__emitter(Se);xa();let bt="",Ri=0,ei=0,al=0,ji=!1;try{if(un.__emitTokens)un.__emitTokens(Le,Jt);else{for(qe.matcher.considerAll();;){al++,ji?ji=!1:qe.matcher.considerAll(),qe.matcher.lastIndex=ei;const _e=qe.matcher.exec(Le);if(!_e)break;const Re=Le.substring(ei,_e.index),Ye=Oi(Re,_e);ei=_e.index+Ye}Oi(Le.substring(ei))}return Jt.finalize(),as=Jt.toHTML(),{language:ye,value:as,relevance:Ri,illegal:!1,_emitter:Jt,_top:qe}}catch(_e){if(_e.message&&_e.message.includes("Illegal"))return{language:ye,value:cn(Le),illegal:!0,relevance:0,_illegalBy:{message:_e.message,index:ei,context:Le.slice(ei-100,ei+100),mode:_e.mode,resultSoFar:as},_emitter:Jt};if(St)return{language:ye,value:cn(Le),illegal:!1,relevance:0,errorRaised:_e,_emitter:Jt,_top:qe};throw _e}}function Si(ye){const Le={value:cn(ye),illegal:!1,relevance:0,_top:Ae,_emitter:new Se.__emitter(Se)};return Le._emitter.addText(ye),Le}function ki(ye,Le){Le=Le||Se.languages||Object.keys(me);const Qe=Si(ye),ft=Le.filter(bn).filter(_r).map(_t=>xr(_t,ye,!1));ft.unshift(Qe);const Ht=ft.sort((_t,jn)=>{if(_t.relevance!==jn.relevance)return jn.relevance-_t.relevance;if(_t.language&&jn.language){if(bn(_t.language).supersetOf===jn.language)return 1;if(bn(jn.language).supersetOf===_t.language)return-1}return 0}),[pn,Rn]=Ht,Sn=pn;return Sn.secondBest=Rn,Sn}function lr(ye,Le,Qe){const ft=Le&&Ee[Le]||Qe;ye.classList.add("hljs"),ye.classList.add(`language-${ft}`)}function Ut(ye){let Le=null;const Qe=Bt(ye);if(Ue(Qe))return;if(Jr("before:highlightElement",{el:ye,language:Qe}),ye.dataset.highlighted){console.log("Element previously highlighted. To highlight again, first unset `dataset.highlighted`.",ye);return}if(ye.children.length>0&&(Se.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(ye)),Se.throwUnescapedHTML))throw new In("One of your code blocks includes unescaped HTML.",ye.innerHTML);Le=ye;const ft=Le.textContent,Ht=Qe?Mt(ft,{language:Qe,ignoreIllegals:!0}):ki(ft);ye.innerHTML=Ht.value,ye.dataset.highlighted="yes",lr(ye,Qe,Ht.language),ye.result={language:Ht.language,re:Ht.relevance,relevance:Ht.relevance},Ht.secondBest&&(ye.secondBest={language:Ht.secondBest.language,relevance:Ht.secondBest.relevance}),Jr("after:highlightElement",{el:ye,result:Ht,text:ft})}function mn(ye){Se=Ni(Se,ye)}const yr=()=>{Ti(),ue("10.6.0","initHighlighting() deprecated. Use highlightAll() now.")};function Ci(){Ti(),ue("10.6.0","initHighlightingOnLoad() deprecated. Use highlightAll() now.")}let ga=!1;function Ti(){function ye(){Ti()}if(document.readyState==="loading"){ga||window.addEventListener("DOMContentLoaded",ye,!1),ga=!0;return}document.querySelectorAll(Se.cssSelector).forEach(Ut)}function ts(ye,Le){let Qe=null;try{Qe=Le(re)}catch(ft){if(ct("Language definition for '{}' could not be registered.".replace("{}",ye)),St)ct(ft);else throw ft;Qe=Ae}Qe.name||(Qe.name=ye),me[ye]=Qe,Qe.rawDefinition=Le.bind(null,re),Qe.aliases&&vr(Qe.aliases,{languageName:ye})}function Wr(ye){delete me[ye];for(const Le of Object.keys(Ee))Ee[Le]===ye&&delete Ee[Le]}function ba(){return Object.keys(me)}function bn(ye){return ye=(ye||"").toLowerCase(),me[ye]||me[Ee[ye]]}function vr(ye,{languageName:Le}){typeof ye=="string"&&(ye=[ye]),ye.forEach(Qe=>{Ee[Qe.toLowerCase()]=Le})}function _r(ye){const Le=bn(ye);return Le&&!Le.disableAutodetect}function Br(ye){ye["before:highlightBlock"]&&!ye["before:highlightElement"]&&(ye["before:highlightElement"]=Le=>{ye["before:highlightBlock"](Object.assign({block:Le.el},Le))}),ye["after:highlightBlock"]&&!ye["after:highlightElement"]&&(ye["after:highlightElement"]=Le=>{ye["after:highlightBlock"](Object.assign({block:Le.el},Le))})}function Ft(ye){Br(ye),Pe.push(ye)}function ns(ye){const Le=Pe.indexOf(ye);Le!==-1&&Pe.splice(Le,1)}function Jr(ye,Le){const Qe=ye;Pe.forEach(function(ft){ft[Qe]&&ft[Qe](Le)})}function wr(ye){return ue("10.7.0","highlightBlock will be removed entirely in v12.0"),ue("10.7.0","Please use highlightElement now."),Ut(ye)}Object.assign(re,{highlight:Mt,highlightAuto:ki,highlightAll:Ti,highlightElement:Ut,highlightBlock:wr,configure:mn,initHighlighting:yr,initHighlightingOnLoad:Ci,registerLanguage:ts,unregisterLanguage:Wr,listLanguages:ba,getLanguage:bn,registerAliases:vr,autoDetection:_r,inherit:Ni,addPlugin:Ft,removePlugin:ns}),re.debugMode=function(){St=!1},re.safeMode=function(){St=!0},re.versionString=ut,re.regex={concat:N,lookahead:y,either:w,optional:_,anyNumberOfTimes:x};for(const ye in ce)typeof ce[ye]=="object"&&e(ce[ye]);return Object.assign(re,ce),re},hn=On({});return hn.newInstance=()=>On({}),jh=hn,hn.HighlightJS=hn,hn.default=hn,jh}var Dh,ev;function K4(){if(ev)return Dh;ev=1;function e(t){const r=t.regex,a=r.concat(/[\p{L}_]/u,r.optional(/[\p{L}0-9_.-]*:/u),/[\p{L}0-9_.-]*/u),s=/[\p{L}0-9._:-]+/u,o={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/}]},d=t.inherit(c,{begin:/\(/,end:/\)/}),h=t.inherit(t.APOS_STRING_MODE,{className:"string"}),f=t.inherit(t.QUOTE_STRING_MODE,{className:"string"}),m={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,f,h,d,{begin:/\[/,end:/\]/,contains:[{className:"meta",begin://,contains:[c,d,f,h]}]}]},t.COMMENT(//,{relevance:10}),{begin://,relevance:10},o,{className:"meta",end:/\?>/,variants:[{begin:/<\?xml/,relevance:10,contains:[f]},{begin:/<\?[a-z][a-z0-9]+/}]},{className:"tag",begin:/)/,end:/>/,keywords:{name:"style"},contains:[m],starts:{end:/<\/style>/,returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag",begin:/)/,end:/>/,keywords:{name:"script"},contains:[m],starts:{end:/<\/script>/,returnEnd:!0,subLanguage:["javascript","handlebars","xml"]}},{className:"tag",begin:/<>|<\/>/},{className:"tag",begin:r.concat(//,/>/,/\s/)))),end:/\/?>/,contains:[{className:"name",begin:a,relevance:0,starts:m}]},{className:"tag",begin:r.concat(/<\//,r.lookahead(r.concat(a,/>/))),contains:[{className:"name",begin:a,relevance:0},{begin:/>/,relevance:0,endsParent:!0}]}]}}return Dh=e,Dh}var Lh,tv;function Z4(){if(tv)return Lh;tv=1;function e(t){const r=t.regex,a={},s={begin:/\$\{/,end:/\}/,contains:["self",{begin:/:-/,contains:[a]}]};Object.assign(a,{className:"variable",variants:[{begin:r.concat(/\$[\w\d#@][\w\d_]*/,"(?![\\w\\d])(?![$])")},s]});const o={className:"subst",begin:/\$\(/,end:/\)/,contains:[t.BACKSLASH_ESCAPE]},c=t.inherit(t.COMMENT(),{match:[/(^|\s)/,/#.*$/],scope:{2:"comment"}}),d={begin:/<<-?\s*(?=\w+)/,starts:{contains:[t.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/,className:"string"})]}},h={className:"string",begin:/"/,end:/"/,contains:[t.BACKSLASH_ESCAPE,a,o]};o.contains.push(h);const f={match:/\\"/},m={className:"string",begin:/'/,end:/'/},g={match:/\\'/},y={begin:/\$?\(\(/,end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},t.NUMBER_MODE,a]},x=["fish","bash","zsh","sh","csh","ksh","tcsh","dash","scsh"],_=t.SHEBANG({binary:`(${x.join("|")})`,relevance:10}),N={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,contains:[t.inherit(t.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0},S=["if","then","else","elif","fi","time","for","while","until","in","do","done","case","esac","coproc","function","select"],w=["true","false"],k={match:/(\/[a-z._-]+)+/},E=["break","cd","continue","eval","exec","exit","export","getopts","hash","pwd","readonly","return","shift","test","times","trap","umask","unset"],M=["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:S,literal:w,built_in:[...E,...M,"set","shopt",...B,...R]},contains:[_,t.SHEBANG(),N,y,c,d,k,h,f,m,g,a]}}return Lh=e,Lh}var zh,nv;function Q4(){if(nv)return zh;nv=1;function e(t){const r=t.regex,a=t.COMMENT("//","$",{contains:[{begin:/\\\n/}]}),s="decltype\\(auto\\)",o="[a-zA-Z_]\\w*::",d="("+s+"|"+r.optional(o)+"[a-zA-Z_]\\w*"+r.optional("<[^<>]+>")+")",h={className:"type",variants:[{begin:"\\b[a-z\\d_]*_t\\b"},{match:/\batomic_[a-z]{3,6}\b/}]},m={className:"string",variants:[{begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[t.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:"."},t.END_SAME_AS_BEGIN({begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},g={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},t.inherit(m,{className:"string"}),{className:"string",begin:/<.*?>/},a,t.C_BLOCK_COMMENT_MODE]},x={className:"title",begin:r.optional(o)+t.IDENT_RE,relevance:0},_=r.optional(o)+t.IDENT_RE+"\\s*\\(",w={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,t.C_BLOCK_COMMENT_MODE,g,m],E={variants:[{begin:/=/,end:/;/},{begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],keywords:w,contains:k.concat([{begin:/\(/,end:/\)/,keywords:w,contains:k.concat(["self"]),relevance:0}]),relevance:0},M={begin:"("+d+"[\\*&\\s]+)+"+_,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:w,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:s,keywords:w,relevance:0},{begin:_,returnBegin:!0,contains:[t.inherit(x,{className:"title.function"})],relevance:0},{relevance:0,match:/,/},{className:"params",begin:/\(/,end:/\)/,keywords:w,relevance:0,contains:[a,t.C_BLOCK_COMMENT_MODE,m,g,h,{begin:/\(/,end:/\)/,keywords:w,relevance:0,contains:["self",a,t.C_BLOCK_COMMENT_MODE,m,g,h]}]},h,a,t.C_BLOCK_COMMENT_MODE,y]};return{name:"C",aliases:["h"],keywords:w,disableAutodetect:!0,illegal:"=]/,contains:[{beginKeywords:"final class struct"},t.TITLE_MODE]}]),exports:{preprocessor:y,strings:m,keywords:w}}}return zh=e,zh}var Ih,rv;function W4(){if(rv)return Ih;rv=1;function e(t){const r=t.regex,a=t.COMMENT("//","$",{contains:[{begin:/\\\n/}]}),s="decltype\\(auto\\)",o="[a-zA-Z_]\\w*::",d="(?!struct)("+s+"|"+r.optional(o)+"[a-zA-Z_]\\w*"+r.optional("<[^<>]+>")+")",h={className:"type",begin:"\\b[a-z\\d_]*_t\\b"},m={className:"string",variants:[{begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[t.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:"."},t.END_SAME_AS_BEGIN({begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},g={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},t.inherit(m,{className:"string"}),{className:"string",begin:/<.*?>/},a,t.C_BLOCK_COMMENT_MODE]},x={className:"title",begin:r.optional(o)+t.IDENT_RE,relevance:0},_=r.optional(o)+t.IDENT_RE+"\\s*\\(",N=["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"],S=["bool","char","char16_t","char32_t","char8_t","double","float","int","long","short","void","wchar_t","unsigned","signed","const","static"],w=["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:S,keyword:N,literal:["NULL","false","nullopt","nullptr","true"],built_in:["_Pragma"],_type_hints:w},R={className:"function.dispatch",relevance:0,keywords:{_hint:k},begin:r.concat(/\b/,/(?!decltype)/,/(?!if)/,/(?!for)/,/(?!switch)/,/(?!while)/,t.IDENT_RE,r.lookahead(/(<[^<>]+>|)\s*\(/))},U=[R,y,h,a,t.C_BLOCK_COMMENT_MODE,g,m],I={variants:[{begin:/=/,end:/;/},{begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],keywords:B,contains:U.concat([{begin:/\(/,end:/\)/,keywords:B,contains:U.concat(["self"]),relevance:0}]),relevance:0},X={className:"function",begin:"("+d+"[\\*&\\s]+)+"+_,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:B,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:s,keywords:B,relevance:0},{begin:_,returnBegin:!0,contains:[x],relevance:0},{begin:/::/,relevance:0},{begin:/:/,endsWithParent:!0,contains:[m,g]},{relevance:0,match:/,/},{className:"params",begin:/\(/,end:/\)/,keywords:B,relevance:0,contains:[a,t.C_BLOCK_COMMENT_MODE,m,g,h,{begin:/\(/,end:/\)/,keywords:B,relevance:0,contains:["self",a,t.C_BLOCK_COMMENT_MODE,m,g,h]}]},h,a,t.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:t.IDENT_RE+"::",keywords:B},{match:[/\b(?:enum(?:\s+(?:class|struct))?|class|struct|union)/,/\s+/,/\w+/],className:{1:"keyword",3:"title.class"}}])}}return Ih=e,Ih}var Bh,iv;function J4(){if(iv)return Bh;iv=1;function e(t){const r=["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"],s=["default","false","null","true"],o=["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"],d={keyword:o.concat(c),built_in:r,literal:s},h=t.inherit(t.TITLE_MODE,{begin:"[a-zA-Z](\\.?\\w)*"}),f={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},m={className:"string",begin:/"""("*)(?!")(.|\n)*?"""\1/,relevance:1},g={className:"string",begin:'@"',end:'"',contains:[{begin:'""'}]},y=t.inherit(g,{illegal:/\n/}),x={className:"subst",begin:/\{/,end:/\}/,keywords:d},_=t.inherit(x,{illegal:/\n/}),N={className:"string",begin:/\$"/,end:'"',illegal:/\n/,contains:[{begin:/\{\{/},{begin:/\}\}/},t.BACKSLASH_ESCAPE,_]},S={className:"string",begin:/\$@"/,end:'"',contains:[{begin:/\{\{/},{begin:/\}\}/},{begin:'""'},x]},w=t.inherit(S,{illegal:/\n/,contains:[{begin:/\{\{/},{begin:/\}\}/},{begin:'""'},_]});x.contains=[S,N,g,t.APOS_STRING_MODE,t.QUOTE_STRING_MODE,f,t.C_BLOCK_COMMENT_MODE],_.contains=[w,N,y,t.APOS_STRING_MODE,t.QUOTE_STRING_MODE,f,t.inherit(t.C_BLOCK_COMMENT_MODE,{illegal:/\n/})];const k={variants:[m,S,N,g,t.APOS_STRING_MODE,t.QUOTE_STRING_MODE]},E={begin:"<",end:">",contains:[{beginKeywords:"in out"},h]},M=t.IDENT_RE+"(<"+t.IDENT_RE+"(\\s*,\\s*"+t.IDENT_RE+")*>)?(\\[\\])?",B={begin:"@"+t.IDENT_RE,relevance:0};return{name:"C#",aliases:["cs","c#"],keywords:d,illegal:/::/,contains:[t.COMMENT("///","$",{returnBegin:!0,contains:[{className:"doctag",variants:[{begin:"///",relevance:0},{begin:""},{begin:""}]}]}),t.C_LINE_COMMENT_MODE,t.C_BLOCK_COMMENT_MODE,{className:"meta",begin:"#",end:"$",keywords:{keyword:"if else elif endif define undef warning error line region endregion pragma checksum"}},k,f,{beginKeywords:"class interface",relevance:0,end:/[{;=]/,illegal:/[^\s:,]/,contains:[{beginKeywords:"where class"},h,E,t.C_LINE_COMMENT_MODE,t.C_BLOCK_COMMENT_MODE]},{beginKeywords:"namespace",relevance:0,end:/[{;=]/,illegal:/[^\s:]/,contains:[h,t.C_LINE_COMMENT_MODE,t.C_BLOCK_COMMENT_MODE]},{beginKeywords:"record",relevance:0,end:/[{;=]/,illegal:/[^\s:]/,contains:[h,E,t.C_LINE_COMMENT_MODE,t.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:"("+M+"\\s+)+"+t.IDENT_RE+"\\s*(<[^=]+>\\s*)?\\(",returnBegin:!0,end:/\s*[{;=]/,excludeEnd:!0,keywords:d,contains:[{beginKeywords:a.join(" "),relevance:0},{begin:t.IDENT_RE+"\\s*(<[^=]+>\\s*)?\\(",returnBegin:!0,contains:[t.TITLE_MODE,E],relevance:0},{match:/\(\)/},{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:d,relevance:0,contains:[k,f,t.C_BLOCK_COMMENT_MODE]},t.C_LINE_COMMENT_MODE,t.C_BLOCK_COMMENT_MODE]},B]}}return Bh=e,Bh}var Uh,av;function ej(){if(av)return Uh;av=1;const e=f=>({IMPORTANT:{scope:"meta",begin:"!important"},BLOCK_COMMENT:f.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:[f.APOS_STRING_MODE,f.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{scope:"number",begin:f.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_-]*/}}),t=["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"],r=["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=[...t,...r],s=["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(),o=["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(),d=["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(f){const m=f.regex,g=e(f),y={begin:/-(webkit|moz|ms|o)-(?=[a-z])/},x="and or not only",_=/@-?\w[\w]*(-\w+)*/,N="[a-zA-Z-][a-zA-Z0-9_-]*",S=[f.APOS_STRING_MODE,f.QUOTE_STRING_MODE];return{name:"CSS",case_insensitive:!0,illegal:/[=|'\$]/,keywords:{keyframePosition:"from to"},classNameAliases:{keyframePosition:"selector-tag"},contains:[g.BLOCK_COMMENT,y,g.CSS_NUMBER_MODE,{className:"selector-id",begin:/#[A-Za-z0-9_-]+/,relevance:0},{className:"selector-class",begin:"\\."+N,relevance:0},g.ATTRIBUTE_SELECTOR_MODE,{className:"selector-pseudo",variants:[{begin:":("+o.join("|")+")"},{begin:":(:)?("+c.join("|")+")"}]},g.CSS_VARIABLE,{className:"attribute",begin:"\\b("+d.join("|")+")\\b"},{begin:/:/,end:/[;}{]/,contains:[g.BLOCK_COMMENT,g.HEXCOLOR,g.IMPORTANT,g.CSS_NUMBER_MODE,...S,{begin:/(url|data-uri)\(/,end:/\)/,relevance:0,keywords:{built_in:"url data-uri"},contains:[...S,{className:"string",begin:/[^)]/,endsWithParent:!0,excludeEnd:!0}]},g.FUNCTION_DISPATCH]},{begin:m.lookahead(/@/),end:"[{;]",relevance:0,illegal:/:/,contains:[{className:"keyword",begin:_},{begin:/\s/,endsWithParent:!0,excludeEnd:!0,relevance:0,keywords:{$pattern:/[a-z-]+/,keyword:x,attribute:s.join(" ")},contains:[{begin:/[a-z-]+(?=:)/,className:"attribute"},...S,g.CSS_NUMBER_MODE]}]},{className:"selector-tag",begin:"\\b("+a.join("|")+")\\b"}]}}return Uh=h,Uh}var Hh,sv;function tj(){if(sv)return Hh;sv=1;function e(t){const r=t.regex,a={begin:/<\/?[A-Za-z_]/,end:">",subLanguage:"xml",relevance:0},s={begin:"^[-\\*]{3,}",end:"$"},o={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},d={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+.-]*/,f={variants:[{begin:/\[.+?\]\[.*?\]/,relevance:0},{begin:/\[.+?\]\(((data|javascript|mailto):|(?:http|ftp)s?:\/\/).*?\)/,relevance:2},{begin:r.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}]},m={className:"strong",contains:[],variants:[{begin:/_{2}(?!\s)/,end:/_{2}/},{begin:/\*{2}(?!\s)/,end:/\*{2}/}]},g={className:"emphasis",contains:[],variants:[{begin:/\*(?![*\s])/,end:/\*/},{begin:/_(?![_\s])/,end:/_/,relevance:0}]},y=t.inherit(m,{contains:[]}),x=t.inherit(g,{contains:[]});m.contains.push(x),g.contains.push(y);let _=[a,f];return[m,g,y,x].forEach(k=>{k.contains=k.contains.concat(_)}),_=_.concat(m,g),{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,m,g,{className:"quote",begin:"^>\\s+",contains:_,end:"$"},o,s,f,d,{scope:"literal",match:/&([a-zA-Z0-9]+|#[0-9]{1,7}|#[Xx][0-9a-fA-F]{1,6});/}]}}return Hh=e,Hh}var $h,lv;function nj(){if(lv)return $h;lv=1;function e(t){const r=t.regex;return{name:"Diff",aliases:["patch"],contains:[{className:"meta",relevance:10,match:r.either(/^@@ +-\d+,\d+ +\+\d+,\d+ +@@/,/^\*\*\* +\d+,\d+ +\*\*\*\*$/,/^--- +\d+,\d+ +----$/)},{className:"comment",variants:[{begin:r.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 $h=e,$h}var qh,ov;function rj(){if(ov)return qh;ov=1;function e(t){const r=t.regex,a="([a-zA-Z_]\\w*[!?=]?|[-+~]@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?)",s=r.either(/\b([A-Z]+[a-z0-9]+)+/,/\b([A-Z]+[a-z0-9]+)+[A-Z]+/),o=r.concat(s,/(::\w+)*/),d={"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]+"},f={begin:"#<",end:">"},m=[t.COMMENT("#","$",{contains:[h]}),t.COMMENT("^=begin","^=end",{contains:[h],relevance:10}),t.COMMENT("^__END__",t.MATCH_NOTHING_RE)],g={className:"subst",begin:/#\{/,end:/\}/,keywords:d},y={className:"string",contains:[t.BACKSLASH_ESCAPE,g],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:r.concat(/<<[-~]?'?/,r.lookahead(/(\w+)(?=\W)[^\n]*\n(?:[^\n]*\n)*?\s*\1\b/)),contains:[t.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/,contains:[t.BACKSLASH_ESCAPE,g]})]}]},x="[1-9](_?[0-9])*|0",_="[0-9](_?[0-9])*",N={className:"number",relevance:0,variants:[{begin:`\\b(${x})(\\.(${_}))?([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"}]},S={variants:[{match:/\(\)/},{className:"params",begin:/\(/,end:/(?=\))/,excludeBegin:!0,endsParent:!0,keywords:d}]},U=[y,{variants:[{match:[/class\s+/,o,/\s+<\s+/,o]},{match:[/\b(class|module)\s+/,o]}],scope:{2:"title.class",4:"title.class.inherited"},keywords:d},{match:[/(include|extend)\s+/,o],scope:{2:"title.class"},keywords:d},{relevance:0,match:[o,/\.new[. (]/],scope:{1:"title.class"}},{relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:"variable.constant"},{relevance:0,match:s,scope:"title.class"},{match:[/def/,/\s+/,a],scope:{1:"keyword",3:"title.function"},contains:[S]},{begin:t.IDENT_RE+"::"},{className:"symbol",begin:t.UNDERSCORE_IDENT_RE+"(!|\\?)?:",relevance:0},{className:"symbol",begin:":(?!\\s)",contains:[y,{begin:a}],relevance:0},N,{className:"variable",begin:"(\\$\\W)|((\\$|@@?)(\\w+))(?=[^@$?])(?![A-Za-z])(?![@$?'])"},{className:"params",begin:/\|(?!=)/,end:/\|/,excludeBegin:!0,excludeEnd:!0,relevance:0,keywords:d},{begin:"("+t.RE_STARTERS_RE+"|unless)\\s*",keywords:"unless",contains:[{className:"regexp",contains:[t.BACKSLASH_ESCAPE,g],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(f,m),relevance:0}].concat(f,m);g.contains=U,S.contains=U;const z=[{begin:/^\s*=>/,starts:{end:"$",contains:U}},{className:"meta.prompt",begin:"^("+"[>?]>"+"|"+"[\\w#]+\\(\\w+\\):\\d+:\\d+[>*]"+"|"+"(\\w+-)?\\d+\\.\\d+\\.\\d+(p\\d+)?[^\\d][^>]+>"+")(?=[ ])",starts:{end:"$",keywords:d,contains:U}}];return m.unshift(f),{name:"Ruby",aliases:["rb","gemspec","podspec","thor","irb"],keywords:d,illegal:/\/\*/,contains:[t.SHEBANG({binary:"ruby"})].concat(z).concat(m).concat(U)}}return qh=e,qh}var Ph,cv;function ij(){if(cv)return Ph;cv=1;function e(t){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:"s(c,d,h-1))}function o(c){const d=c.regex,h="[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*",f=h+s("(?:<"+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"]},N={className:"meta",begin:"@"+h,contains:[{begin:/\(/,end:/\)/,contains:["self"]}]},S={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:[d.concat(/(?!else)/,h),/\s+/,h,/\s+/,/=(?!=)/],className:{1:"type",3:"variable",5:"operator"}},{begin:[/record/,/\s+/,h],className:{1:"keyword",3:"title.class"},contains:[S,c.C_LINE_COMMENT_MODE,c.C_BLOCK_COMMENT_MODE]},{beginKeywords:"new throw return else",relevance:0},{begin:["(?:"+f+"\\s+)",c.UNDERSCORE_IDENT_RE,/\s*(?=\()/],className:{2:"title.function"},keywords:_,contains:[{className:"params",begin:/\(/,end:/\)/,keywords:_,relevance:0,contains:[N,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,N]}}return Vh=o,Vh}var Yh,hv;function oj(){if(hv)return Yh;hv=1;const e="[A-Za-z$_][0-9A-Za-z$_]*",t=["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"],r=["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"],s=["Error","EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],o=["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"],d=[].concat(o,a,s);function h(f){const m=f.regex,g=(J,{after:W})=>{const te="",end:""},_=/<[A-Za-z0-9\\._:-]+\s*\/>/,N={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(J,W)=>{const te=J[0].length+J.index,ce=J.input[te];if(ce==="<"||ce===","){W.ignoreMatch();return}ce===">"&&(g(J,{after:te})||W.ignoreMatch());let fe;const be=J.input.substring(te);if(fe=be.match(/^\s*=/)){W.ignoreMatch();return}if((fe=be.match(/^\s+extends\s+/))&&fe.index===0){W.ignoreMatch();return}}},S={$pattern:e,keyword:t,literal:r,built_in:d,"variable.language":c},w="[0-9](_?[0-9])*",k=`\\.(${w})`,E="0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*",M={className:"number",variants:[{begin:`(\\b(${E})((${k})|\\.)?|(${k}))[eE][+-]?(${w})\\b`},{begin:`\\b(${E})\\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:S,contains:[]},R={begin:".?html`",end:"",starts:{end:"`",returnEnd:!1,contains:[f.BACKSLASH_ESCAPE,B],subLanguage:"xml"}},U={begin:".?css`",end:"",starts:{end:"`",returnEnd:!1,contains:[f.BACKSLASH_ESCAPE,B],subLanguage:"css"}},I={begin:".?gql`",end:"",starts:{end:"`",returnEnd:!1,contains:[f.BACKSLASH_ESCAPE,B],subLanguage:"graphql"}},X={className:"string",begin:"`",end:"`",contains:[f.BACKSLASH_ESCAPE,B]},z={className:"comment",variants:[f.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}]}]}),f.C_BLOCK_COMMENT_MODE,f.C_LINE_COMMENT_MODE]},V=[f.APOS_STRING_MODE,f.QUOTE_STRING_MODE,R,U,I,X,{match:/\$\d+/},M];B.contains=V.concat({begin:/\{/,end:/\}/,keywords:S,contains:["self"].concat(V)});const P=[].concat(z,B.contains),T=P.concat([{begin:/(\s*)\(/,end:/\)/,keywords:S,contains:["self"].concat(P)}]),$={className:"params",begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:S,contains:T},O={variants:[{match:[/class/,/\s+/,y,/\s+/,/extends/,/\s+/,m.concat(y,"(",m.concat(/\./,y),")*")],scope:{1:"keyword",3:"title.class",5:"keyword",7:"title.class.inherited"}},{match:[/class/,/\s+/,y],scope:{1:"keyword",3:"title.class"}}]},H={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,...s]}},K={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 D(J){return m.concat("(?!",J.join("|"),")")}const Y={match:m.concat(/\b/,D([...o,"super","import"].map(J=>`${J}\\s*\\(`)),y,m.lookahead(/\s*\(/)),className:"title.function",relevance:0},L={begin:m.concat(/\./,m.lookahead(m.concat(y,/(?![0-9A-Za-z$_(])/))),end:y,excludeBegin:!0,keywords:"prototype",className:"property",relevance:0},G={match:[/get|set/,/\s+/,y,/(?=\()/],className:{1:"keyword",3:"title.function"},contains:[{begin:/\(\)/},$]},q="(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|"+f.UNDERSCORE_IDENT_RE+")\\s*=>",Q={match:[/const|var|let/,/\s+/,y,/\s*/,/=\s*/,/(async\s*)?/,m.lookahead(q)],keywords:"async",className:{1:"keyword",3:"title.function"},contains:[$]};return{name:"JavaScript",aliases:["js","jsx","mjs","cjs"],keywords:S,exports:{PARAMS_CONTAINS:T,CLASS_REFERENCE:H},illegal:/#(?![$_A-z])/,contains:[f.SHEBANG({label:"shebang",binary:"node",relevance:5}),K,f.APOS_STRING_MODE,f.QUOTE_STRING_MODE,R,U,I,X,z,{match:/\$\d+/},M,H,{scope:"attr",match:y+m.lookahead(":"),relevance:0},Q,{begin:"("+f.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",relevance:0,contains:[z,f.REGEXP_MODE,{className:"function",begin:q,returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:f.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:S,contains:T}]}]},{begin:/,/,relevance:0},{match:/\s+/,relevance:0},{variants:[{begin:x.begin,end:x.end},{match:_},{begin:N.begin,"on:begin":N.isTrulyOpeningTag,end:N.end}],subLanguage:"xml",contains:[{begin:N.begin,end:N.end,skip:!0,contains:["self"]}]}]},Z,{beginKeywords:"while if switch catch for"},{begin:"\\b(?!function)"+f.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",returnBegin:!0,label:"func.def",contains:[$,f.inherit(f.TITLE_MODE,{begin:y,className:"title.function"})]},{match:/\.\.\./,relevance:0},L,{match:"\\$"+y,relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"},contains:[$]},Y,C,O,G,{match:/\$[(.]/}]}}return Yh=h,Yh}var Xh,mv;function cj(){if(mv)return Xh;mv=1;function e(t){const r={className:"attr",begin:/"(\\.|[^\\"\r\n])*"(?=\s*:)/,relevance:1.01},a={match:/[{}[\],:]/,className:"punctuation",relevance:0},s=["true","false","null"],o={scope:"literal",beginKeywords:s.join(" ")};return{name:"JSON",aliases:["jsonc"],keywords:{literal:s},contains:[r,a,t.QUOTE_STRING_MODE,o,t.C_NUMBER_MODE,t.C_LINE_COMMENT_MODE,t.C_BLOCK_COMMENT_MODE],illegal:"\\S"}}return Xh=e,Xh}var Kh,pv;function uj(){if(pv)return Kh;pv=1;var e="[0-9](_*[0-9])*",t=`\\.(${e})`,r="[0-9a-fA-F](_*[0-9a-fA-F])*",a={className:"number",variants:[{begin:`(\\b(${e})((${t})|\\.)?|(${t}))[eE][+-]?(${e})[fFdD]?\\b`},{begin:`\\b(${e})((${t})[fFdD]?\\b|\\.([fFdD]\\b)?)`},{begin:`(${t})[fFdD]?\\b`},{begin:`\\b(${e})[fFdD]\\b`},{begin:`\\b0[xX]((${r})\\.?|(${r})?\\.(${r}))[pP][+-]?(${e})[fFdD]?\\b`},{begin:"\\b(0|[1-9](_*[0-9])*)[lL]?\\b"},{begin:`\\b0[xX](${r})[lL]?\\b`},{begin:"\\b0(_*[0-7])*[lL]?\\b"},{begin:"\\b0[bB][01](_*[01])*[lL]?\\b"}],relevance:0};function s(o){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"},d={className:"keyword",begin:/\b(break|continue|return|this)\b/,starts:{contains:[{className:"symbol",begin:/@\w+/}]}},h={className:"symbol",begin:o.UNDERSCORE_IDENT_RE+"@"},f={className:"subst",begin:/\$\{/,end:/\}/,contains:[o.C_NUMBER_MODE]},m={className:"variable",begin:"\\$"+o.UNDERSCORE_IDENT_RE},g={className:"string",variants:[{begin:'"""',end:'"""(?=[^"])',contains:[m,f]},{begin:"'",end:"'",illegal:/\n/,contains:[o.BACKSLASH_ESCAPE]},{begin:'"',end:'"',illegal:/\n/,contains:[o.BACKSLASH_ESCAPE,m,f]}]};f.contains.push(g);const y={className:"meta",begin:"@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\s*:(?:\\s*"+o.UNDERSCORE_IDENT_RE+")?"},x={className:"meta",begin:"@"+o.UNDERSCORE_IDENT_RE,contains:[{begin:/\(/,end:/\)/,contains:[o.inherit(g,{className:"string"}),"self"]}]},_=a,N=o.COMMENT("/\\*","\\*/",{contains:[o.C_BLOCK_COMMENT_MODE]}),S={variants:[{className:"type",begin:o.UNDERSCORE_IDENT_RE},{begin:/\(/,end:/\)/,contains:[]}]},w=S;return w.variants[1].contains=[S],S.variants[1].contains=[w],{name:"Kotlin",aliases:["kt","kts"],keywords:c,contains:[o.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"}]}),o.C_LINE_COMMENT_MODE,N,d,h,y,x,{className:"function",beginKeywords:"fun",end:"[(]|$",returnBegin:!0,excludeEnd:!0,keywords:c,relevance:5,contains:[{begin:o.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0,contains:[o.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:[S,o.C_LINE_COMMENT_MODE,N],relevance:0},o.C_LINE_COMMENT_MODE,N,y,x,g,o.C_NUMBER_MODE]},N]},{begin:[/class|interface|trait/,/\s+/,o.UNDERSCORE_IDENT_RE],beginScope:{3:"title.class"},keywords:"class interface trait",end:/[:\{(]|$/,excludeEnd:!0,illegal:"extends implements",contains:[{beginKeywords:"public protected internal private constructor"},o.UNDERSCORE_TITLE_MODE,{className:"type",begin://,excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:/[,:]\s*/,end:/[<\(,){\s]|$/,excludeBegin:!0,returnEnd:!0},y,x]},g,{className:"meta",begin:"^#!/usr/bin/env",end:"$",illegal:` -`},_]}}return Kh=s,Kh}var Zh,gv;function dj(){if(gv)return Zh;gv=1;const e=m=>({IMPORTANT:{scope:"meta",begin:"!important"},BLOCK_COMMENT:m.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:[m.APOS_STRING_MODE,m.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{scope:"number",begin:m.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_-]*/}}),t=["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"],r=["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=[...t,...r],s=["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(),o=["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(),d=["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=o.concat(c).sort().reverse();function f(m){const g=e(m),y=h,x="and or not only",_="[\\w-]+",N="("+_+"|@\\{"+_+"\\})",S=[],w=[],k=function(P){return{className:"string",begin:"~?"+P+".*?"+P}},E=function(P,T,$){return{className:P,begin:T,relevance:$}},M={$pattern:/[a-z-]+/,keyword:x,attribute:s.join(" ")},B={begin:"\\(",end:"\\)",contains:w,keywords:M,relevance:0};w.push(m.C_LINE_COMMENT_MODE,m.C_BLOCK_COMMENT_MODE,k("'"),k('"'),g.CSS_NUMBER_MODE,{begin:"(url|data-uri)\\(",starts:{className:"string",end:"[\\)\\n]",excludeEnd:!0}},g.HEXCOLOR,B,E("variable","@@?"+_,10),E("variable","@\\{"+_+"\\}"),E("built_in","~?`[^`]*?`"),{className:"attribute",begin:_+"\\s*:",end:":",returnBegin:!0,excludeEnd:!0},g.IMPORTANT,{beginKeywords:"and not"},g.FUNCTION_DISPATCH);const R=w.concat({begin:/\{/,end:/\}/,contains:S}),U={beginKeywords:"when",endsWithParent:!0,contains:[{beginKeywords:"and not"}].concat(w)},I={begin:N+"\\s*:",returnBegin:!0,end:/[;}]/,relevance:0,contains:[{begin:/-(webkit|moz|ms|o)-/},g.CSS_VARIABLE,{className:"attribute",begin:"\\b("+d.join("|")+")\\b",end:/(?=:)/,starts:{endsWithParent:!0,illegal:"[<=$]",relevance:0,contains:w}}]},X={className:"keyword",begin:"@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\b",starts:{end:"[;{}]",keywords:M,returnEnd:!0,contains:w,relevance:0}},j={className:"variable",variants:[{begin:"@"+_+"\\s*:",relevance:15},{begin:"@"+_}],starts:{end:"[;}]",returnEnd:!0,contains:R}},z={variants:[{begin:"[\\.#:&\\[>]",end:"[;{}]"},{begin:N,end:/\{/}],returnBegin:!0,returnEnd:!0,illegal:`[<='$"]`,relevance:0,contains:[m.C_LINE_COMMENT_MODE,m.C_BLOCK_COMMENT_MODE,U,E("keyword","all\\b"),E("variable","@\\{"+_+"\\}"),{begin:"\\b("+a.join("|")+")\\b",className:"selector-tag"},g.CSS_NUMBER_MODE,E("selector-tag",N,0),E("selector-id","#"+N),E("selector-class","\\."+N,0),E("selector-tag","&",0),g.ATTRIBUTE_SELECTOR_MODE,{className:"selector-pseudo",begin:":("+o.join("|")+")"},{className:"selector-pseudo",begin:":(:)?("+c.join("|")+")"},{begin:/\(/,end:/\)/,relevance:0,contains:R},{begin:"!important"},g.FUNCTION_DISPATCH]},V={begin:_+`:(:)?(${y.join("|")})`,returnBegin:!0,contains:[z]};return S.push(m.C_LINE_COMMENT_MODE,m.C_BLOCK_COMMENT_MODE,X,j,V,I,z,U,g.FUNCTION_DISPATCH),{name:"Less",case_insensitive:!0,illegal:`[=>'/<($"]`,contains:S}}return Zh=f,Zh}var Qh,bv;function fj(){if(bv)return Qh;bv=1;function e(t){const r="\\[=*\\[",a="\\]=*\\]",s={begin:r,end:a,contains:["self"]},o=[t.COMMENT("--(?!"+r+")","$"),t.COMMENT("--"+r,a,{contains:[s],relevance:10})];return{name:"Lua",aliases:["pluto"],keywords:{$pattern:t.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:o.concat([{className:"function",beginKeywords:"function",end:"\\)",contains:[t.inherit(t.TITLE_MODE,{begin:"([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*"}),{className:"params",begin:"\\(",endsWithParent:!0,contains:o}].concat(o)},t.C_NUMBER_MODE,t.APOS_STRING_MODE,t.QUOTE_STRING_MODE,{className:"string",begin:r,end:a,contains:[s],relevance:5}])}}return Qh=e,Qh}var Wh,xv;function hj(){if(xv)return Wh;xv=1;function e(t){const r={className:"variable",variants:[{begin:"\\$\\("+t.UNDERSCORE_IDENT_RE+"\\)",contains:[t.BACKSLASH_ESCAPE]},{begin:/\$[@%\{/,end:/\}/},h={scope:"attr",match:/\s+:\s*\w+(\s*\(.*?\))?/},f={scope:"variable",variants:[{begin:/\$\d/},{begin:r.concat(/[$%@](?!")(\^\w\b|#\w+(::\w+)*|\{\w+\}|\w+(::\w*)*)/,"(?![A-Za-z])(?![@$%])")},{begin:/[$%@](?!")[^\s\w{=]|\$=/,relevance:0}],contains:[h]},m={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},g=[t.BACKSLASH_ESCAPE,c,f],y=[/!/,/\//,/\|/,/\?/,/'/,/"/,/#/],x=(S,w,k="\\1")=>{const E=k==="\\1"?k:r.concat(k,w);return r.concat(r.concat("(?:",S,")"),w,/(?:\\.|[^\\\/])*?/,E,/(?:\\.|[^\\\/])*?/,k,s)},_=(S,w,k)=>r.concat(r.concat("(?:",S,")"),w,/(?:\\.|[^\\\/])*?/,k,s),N=[f,t.HASH_COMMENT_MODE,t.COMMENT(/^=\w/,/=cut/,{endsWithParent:!0}),d,{className:"string",contains:g,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:[t.BACKSLASH_ESCAPE]},{begin:'"',end:'"'},{begin:"`",end:"`",contains:[t.BACKSLASH_ESCAPE]},{begin:/\{\w+\}/,relevance:0},{begin:"-?\\w+\\s*=>",relevance:0}]},m,{begin:"(\\/\\/|"+t.RE_STARTERS_RE+"|\\b(split|return|print|reverse|grep)\\b)\\s*",keywords:"split return print reverse grep",relevance:0,contains:[t.HASH_COMMENT_MODE,{className:"regexp",variants:[{begin:x("s|tr|y",r.either(...y,{capture:!0}))},{begin:x("s|tr|y","\\(","\\)")},{begin:x("s|tr|y","\\[","\\]")},{begin:x("s|tr|y","\\{","\\}")}],relevance:2},{className:"regexp",variants:[{begin:/(m|qr)\/\//,relevance:0},{begin:_("(?:m|qr)?",/\//,/\//)},{begin:_("m|qr",r.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:[t.TITLE_MODE,h]},{className:"class",beginKeywords:"class",end:"[;{]",excludeEnd:!0,relevance:5,contains:[t.TITLE_MODE,h,m]},{begin:"-\\w\\b",relevance:0},{begin:"^__DATA__$",end:"^__END__$",subLanguage:"mojolicious",contains:[{begin:"^@@.*",end:"$",className:"comment"}]}];return c.contains=N,d.contains=N,{name:"Perl",aliases:["pl","pm"],keywords:o,contains:N}}return Jh=e,Jh}var em,vv;function pj(){if(vv)return em;vv=1;function e(t){const r={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"]},f={$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"},t.C_LINE_COMMENT_MODE,t.C_BLOCK_COMMENT_MODE]},{className:"class",begin:"("+f.keyword.join("|")+")\\b",end:/(\{|$)/,excludeEnd:!0,keywords:f,contains:[t.UNDERSCORE_TITLE_MODE]},{begin:"\\."+t.UNDERSCORE_IDENT_RE,relevance:0}]}}return em=e,em}var tm,_v;function gj(){if(_v)return tm;_v=1;function e(t){const r=t.regex,a=/(?![A-Za-z0-9])(?![$])/,s=r.concat(/[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/,a),o=r.concat(/(\\?[A-Z][a-z0-9_\x7f-\xff]+|\\?[A-Z]+(?=[A-Z][a-z0-9_\x7f-\xff])){1,}/,a),c=r.concat(/[A-Z]+/,a),d={scope:"variable",match:"\\$+"+s},h={scope:"meta",variants:[{begin:/<\?php/,relevance:10},{begin:/<\?=/},{begin:/<\?/,relevance:.1},{begin:/\?>/}]},f={scope:"subst",variants:[{begin:/\$\w+/},{begin:/\{\$/,end:/\}/}]},m=t.inherit(t.APOS_STRING_MODE,{illegal:null}),g=t.inherit(t.QUOTE_STRING_MODE,{illegal:null,contains:t.QUOTE_STRING_MODE.contains.concat(f)}),y={begin:/<<<[ \t]*(?:(\w+)|"(\w+)")\n/,end:/[ \t]*(\w+)\b/,contains:t.QUOTE_STRING_MODE.contains.concat(f),"on:begin":($,O)=>{O.data._beginMatch=$[1]||$[2]},"on:end":($,O)=>{O.data._beginMatch!==$[1]&&O.ignoreMatch()}},x=t.END_SAME_AS_BEGIN({begin:/<<<[ \t]*'(\w+)'\n/,end:/[ \t]*(\w+)\b/}),_=`[ -]`,N={scope:"string",variants:[g,m,y,x]},S={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},w=["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"],E=["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 O=[];return $.forEach(H=>{O.push(H),H.toLowerCase()===H?O.push(H.toUpperCase()):O.push(H.toLowerCase())}),O})(w),built_in:E},R=$=>$.map(O=>O.replace(/\|\d+$/,"")),U={variants:[{match:[/new/,r.concat(_,"+"),r.concat("(?!",R(E).join("\\b|"),"\\b)"),o],scope:{1:"keyword",4:"title.class"}}]},I=r.concat(s,"\\b(?!\\()"),X={variants:[{match:[r.concat(/::/,r.lookahead(/(?!class\b)/)),I],scope:{2:"variable.constant"}},{match:[/::/,/class/],scope:{2:"variable.language"}},{match:[o,r.concat(/::/,r.lookahead(/(?!class\b)/)),I],scope:{1:"title.class",3:"variable.constant"}},{match:[o,r.concat("::",r.lookahead(/(?!class\b)/))],scope:{1:"title.class"}},{match:[o,/::/,/class/],scope:{1:"title.class",3:"variable.language"}}]},j={scope:"attr",match:r.concat(s,r.lookahead(":"),r.lookahead(/(?!::)/))},z={relevance:0,begin:/\(/,end:/\)/,keywords:B,contains:[j,d,X,t.C_BLOCK_COMMENT_MODE,N,S,U]},V={relevance:0,match:[/\b/,r.concat("(?!fn\\b|function\\b|",R(k).join("\\b|"),"|",R(E).join("\\b|"),"\\b)"),s,r.concat(_,"*"),r.lookahead(/(?=\()/)],scope:{3:"title.function.invoke"},contains:[z]};z.contains.push(V);const P=[j,X,t.C_BLOCK_COMMENT_MODE,N,S,U],T={begin:r.concat(/#\[\s*\\?/,r.either(o,c)),beginScope:"meta",end:/]/,endScope:"meta",keywords:{literal:w,keyword:["new","array"]},contains:[{begin:/\[/,end:/]/,keywords:{literal:w,keyword:["new","array"]},contains:["self",...P]},...P,{scope:"meta",variants:[{match:o},{match:c}]}]};return{case_insensitive:!1,keywords:B,contains:[T,t.HASH_COMMENT_MODE,t.COMMENT("//","$"),t.COMMENT("/\\*","\\*/",{contains:[{scope:"doctag",match:"@[A-Za-z]+"}]}),{match:/__halt_compiler\(\);/,keywords:"__halt_compiler",starts:{scope:"comment",end:t.MATCH_NOTHING_RE,contains:[{match:/\?>/,scope:"meta",endsParent:!0}]}},h,{scope:"variable.language",match:/\$this\b/},d,V,X,{match:[/const/,/\s/,s],scope:{1:"keyword",3:"variable.constant"}},U,{scope:"function",relevance:0,beginKeywords:"fn function",end:/[;{]/,excludeEnd:!0,illegal:"[$%\\[]",contains:[{beginKeywords:"use"},t.UNDERSCORE_TITLE_MODE,{begin:"=>",endsParent:!0},{scope:"params",begin:"\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0,keywords:B,contains:["self",T,d,X,t.C_BLOCK_COMMENT_MODE,N,S]}]},{scope:"class",variants:[{beginKeywords:"enum",illegal:/[($"]/},{beginKeywords:"class interface trait",illegal:/[:($"]/}],relevance:0,end:/\{/,excludeEnd:!0,contains:[{beginKeywords:"extends implements"},t.UNDERSCORE_TITLE_MODE]},{beginKeywords:"namespace",relevance:0,end:";",illegal:/[.']/,contains:[t.inherit(t.UNDERSCORE_TITLE_MODE,{scope:"title.class"})]},{beginKeywords:"use",relevance:0,end:";",contains:[{match:/\b(as|const|function)\b/,scope:"keyword"},t.UNDERSCORE_TITLE_MODE]},N,S]}}return tm=e,tm}var nm,wv;function bj(){if(wv)return nm;wv=1;function e(t){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},t.inherit(t.APOS_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0}),t.inherit(t.QUOTE_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0})]}]}}return nm=e,nm}var rm,Ev;function xj(){if(Ev)return rm;Ev=1;function e(t){return{name:"Plain text",aliases:["text","txt"],disableAutodetect:!0}}return rm=e,rm}var im,Nv;function yj(){if(Nv)return im;Nv=1;function e(t){const r=t.regex,a=new RegExp("[\\p{XID_Start}_]\\p{XID_Continue}*","u"),s=["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:s,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"]},f={className:"meta",begin:/^(>>>|\.\.\.) /},m={className:"subst",begin:/\{/,end:/\}/,keywords:h,illegal:/#/},g={begin:/\{\{/,relevance:0},y={className:"string",contains:[t.BACKSLASH_ESCAPE],variants:[{begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?'''/,end:/'''/,contains:[t.BACKSLASH_ESCAPE,f],relevance:10},{begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?"""/,end:/"""/,contains:[t.BACKSLASH_ESCAPE,f],relevance:10},{begin:/([fF][rR]|[rR][fF]|[fF])'''/,end:/'''/,contains:[t.BACKSLASH_ESCAPE,f,g,m]},{begin:/([fF][rR]|[rR][fF]|[fF])"""/,end:/"""/,contains:[t.BACKSLASH_ESCAPE,f,g,m]},{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:[t.BACKSLASH_ESCAPE,g,m]},{begin:/([fF][rR]|[rR][fF]|[fF])"/,end:/"/,contains:[t.BACKSLASH_ESCAPE,g,m]},t.APOS_STRING_MODE,t.QUOTE_STRING_MODE]},x="[0-9](_?[0-9])*",_=`(\\b(${x}))?\\.(${x})|\\b(${x})\\.`,N=`\\b|${s.join("|")}`,S={className:"number",relevance:0,variants:[{begin:`(\\b(${x})|(${_}))[eE][+-]?(${x})[jJ]?(?=${N})`},{begin:`(${_})[jJ]?`},{begin:`\\b([1-9](_?[0-9])*|0+(_?0)*)[lLjJ]?(?=${N})`},{begin:`\\b0[bB](_?[01])+[lL]?(?=${N})`},{begin:`\\b0[oO](_?[0-7])+[lL]?(?=${N})`},{begin:`\\b0[xX](_?[0-9a-fA-F])+[lL]?(?=${N})`},{begin:`\\b(${x})[jJ](?=${N})`}]},w={className:"comment",begin:r.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",f,S,y,t.HASH_COMMENT_MODE]}]};return m.contains=[y,S,f],{name:"Python",aliases:["py","gyp","ipython"],unicodeRegex:!0,keywords:h,illegal:/(<\/|\?)|=>/,contains:[f,S,{scope:"variable.language",match:/\bself\b/},{beginKeywords:"if",relevance:0},{match:/\bor\b/,scope:"keyword"},y,w,t.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:[S,k,y]}]}}return im=e,im}var am,Sv;function vj(){if(Sv)return am;Sv=1;function e(t){return{aliases:["pycon"],contains:[{className:"meta.prompt",starts:{end:/ |$/,starts:{end:"$",subLanguage:"python"}},variants:[{begin:/^>>>(?=[ ]|$)/},{begin:/^\.\.\.(?=[ ]|$)/}]}]}}return am=e,am}var sm,kv;function _j(){if(kv)return sm;kv=1;function e(t){const r=t.regex,a=/(?:(?:[a-zA-Z]|\.[._a-zA-Z])[._a-zA-Z0-9]*)|\.(?!\d)/,s=r.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]?/),o=/[=!<>:]=|\|\||&&|:::?|<-|<<-|->>|->|\|>|[-+*\/?!$&|:<=>@^~]|\*\*/,c=r.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:[t.COMMENT(/#'/,/$/,{contains:[{scope:"doctag",match:/@examples/,starts:{end:r.lookahead(r.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]+/}]}),t.HASH_COMMENT_MODE,{scope:"string",contains:[t.BACKSLASH_ESCAPE],variants:[t.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\(/,end:/\)(-*)"/}),t.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\{/,end:/\}(-*)"/}),t.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\[/,end:/\](-*)"/}),t.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\(/,end:/\)(-*)'/}),t.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\{/,end:/\}(-*)'/}),t.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\[/,end:/\](-*)'/}),{begin:'"',end:'"',relevance:0},{begin:"'",end:"'",relevance:0}]},{relevance:0,variants:[{scope:{1:"operator",2:"number"},match:[o,s]},{scope:{1:"operator",2:"number"},match:[/%[^%]*%/,s]},{scope:{1:"punctuation",2:"number"},match:[c,s]},{scope:{2:"number"},match:[/[^a-zA-Z0-9._]|^/,s]}]},{scope:{3:"operator"},match:[a,/\s+/,/<-/,/\s+/]},{scope:"operator",relevance:0,variants:[{match:o},{match:/%[^%]*%/}]},{scope:"punctuation",relevance:0,match:c},{begin:"`",end:"`",contains:[{begin:/\\./}]}]}}return sm=e,sm}var lm,Cv;function wj(){if(Cv)return lm;Cv=1;function e(t){const r=t.regex,a=/(r#)?/,s=r.concat(a,t.UNDERSCORE_IDENT_RE),o=r.concat(a,t.IDENT_RE),c={className:"title.function.invoke",relevance:0,begin:r.concat(/\b/,/(?!let|for|while|if|else|match\b)/,o,r.lookahead(/\s*\(/))},d="([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"],f=["true","false","Some","None","Ok","Err"],m=["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!"],g=["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:t.IDENT_RE+"!?",type:g,keyword:h,literal:f,built_in:m},illegal:""},c]}}return lm=e,lm}var om,Tv;function Ej(){if(Tv)return om;Tv=1;const e=f=>({IMPORTANT:{scope:"meta",begin:"!important"},BLOCK_COMMENT:f.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:[f.APOS_STRING_MODE,f.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{scope:"number",begin:f.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_-]*/}}),t=["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"],r=["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=[...t,...r],s=["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(),o=["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(),d=["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(f){const m=e(f),g=c,y=o,x="@[a-z-]+",_="and or not only",S={className:"variable",begin:"(\\$"+"[a-zA-Z-][a-zA-Z0-9_-]*"+")\\b",relevance:0};return{name:"SCSS",case_insensitive:!0,illegal:"[=/|']",contains:[f.C_LINE_COMMENT_MODE,f.C_BLOCK_COMMENT_MODE,m.CSS_NUMBER_MODE,{className:"selector-id",begin:"#[A-Za-z0-9_-]+",relevance:0},{className:"selector-class",begin:"\\.[A-Za-z0-9_-]+",relevance:0},m.ATTRIBUTE_SELECTOR_MODE,{className:"selector-tag",begin:"\\b("+a.join("|")+")\\b",relevance:0},{className:"selector-pseudo",begin:":("+y.join("|")+")"},{className:"selector-pseudo",begin:":(:)?("+g.join("|")+")"},S,{begin:/\(/,end:/\)/,contains:[m.CSS_NUMBER_MODE]},m.CSS_VARIABLE,{className:"attribute",begin:"\\b("+d.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:[m.BLOCK_COMMENT,S,m.HEXCOLOR,m.CSS_NUMBER_MODE,f.QUOTE_STRING_MODE,f.APOS_STRING_MODE,m.IMPORTANT,m.FUNCTION_DISPATCH]},{begin:"@(page|font-face)",keywords:{$pattern:x,keyword:"@page @font-face"}},{begin:"@",end:"[{;]",returnBegin:!0,keywords:{$pattern:/[a-z-]+/,keyword:_,attribute:s.join(" ")},contains:[{begin:x,className:"keyword"},{begin:/[a-z-]+(?=:)/,className:"attribute"},S,f.QUOTE_STRING_MODE,f.APOS_STRING_MODE,m.HEXCOLOR,m.CSS_NUMBER_MODE]},m.FUNCTION_DISPATCH]}}return om=h,om}var cm,Av;function Nj(){if(Av)return cm;Av=1;function e(t){return{name:"Shell Session",aliases:["console","shellsession"],contains:[{className:"meta.prompt",begin:/^\s{0,3}[/~\w\d[\]()@-]*[>%$#][ ]?/,starts:{end:/[^\\](?=\s*$)/,subLanguage:"bash"}}]}}return cm=e,cm}var um,Mv;function Sj(){if(Mv)return um;Mv=1;function e(t){const r=t.regex,a=t.COMMENT("--","$"),s={scope:"string",variants:[{begin:/'/,end:/'/,contains:[{match:/''/}]}]},o={begin:/"/,end:/"/,contains:[{match:/""/}]},c=["true","false","unknown"],d=["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"],f=["add","asc","collation","desc","final","first","last","view"],m=["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"],g=["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"],x=["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"],_=g,N=[...m,...f].filter(R=>!g.includes(R)),S={scope:"variable",match:/@[a-z0-9][a-z0-9_]*/},w={scope:"operator",match:/[-+*/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?/,relevance:0},k={match:r.concat(/\b/,r.either(..._),/\s*\(/),relevance:0,keywords:{built_in:_}};function E(R){return r.concat(/\b/,r.either(...R.map(U=>U.replace(/\s+/,"\\s+"))),/\b/)}const M={scope:"keyword",match:E(x),relevance:0};function B(R,{exceptions:U,when:I}={}){const X=I;return U=U||[],R.map(j=>j.match(/\|\d+$/)||U.includes(j)?j:X(j)?`${j}|0`:j)}return{name:"SQL",case_insensitive:!0,illegal:/[{}]|<\//,keywords:{$pattern:/\b[\w\.]+/,keyword:B(N,{when:R=>R.length<3}),literal:c,type:h,built_in:y},contains:[{scope:"type",match:E(d)},M,k,S,s,o,t.C_NUMBER_MODE,t.C_BLOCK_COMMENT_MODE,a,w]}}return um=e,um}var dm,Ov;function kj(){if(Ov)return dm;Ov=1;function e(I){return I?typeof I=="string"?I:I.source:null}function t(I){return r("(?=",I,")")}function r(...I){return I.map(j=>e(j)).join("")}function a(I){const X=I[I.length-1];return typeof X=="object"&&X.constructor===Object?(I.splice(I.length-1,1),X):{}}function s(...I){return"("+(a(I).capture?"":"?:")+I.map(z=>e(z)).join("|")+")"}const o=I=>r(/\b/,I,/\w$/.test(I)?/\b/:/\B/),c=["Protocol","Type"].map(o),d=["init","self"].map(o),h=["Any","Self"],f=["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"],m=["false","nil","true"],g=["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"],x=["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"],_=s(/[/=\-+!*%<>&|^~?]/,/[\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]/),N=s(_,/[\u0300-\u036F]/,/[\u1DC0-\u1DFF]/,/[\u20D0-\u20FF]/,/[\uFE00-\uFE0F]/,/[\uFE20-\uFE2F]/),S=r(_,N,"*"),w=s(/[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=s(w,/\d/,/[\u0300-\u036F\u1DC0-\u1DFF\u20D0-\u20FF\uFE20-\uFE2F]/),E=r(w,k,"*"),M=r(/[A-Z]/,k,"*"),B=["attached","autoclosure",r(/convention\(/,s("swift","block","c"),/\)/),"discardableResult","dynamicCallable","dynamicMemberLookup","escaping","freestanding","frozen","GKInspectable","IBAction","IBDesignable","IBInspectable","IBOutlet","IBSegueAction","inlinable","main","nonobjc","NSApplicationMain","NSCopying","NSManaged",r(/objc\(/,E,/\)/),"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 U(I){const X={match:/\s+/,relevance:0},j=I.COMMENT("/\\*","\\*/",{contains:["self"]}),z=[I.C_LINE_COMMENT_MODE,j],V={match:[/\./,s(...c,...d)],className:{2:"keyword"}},P={match:r(/\./,s(...f)),relevance:0},T=f.filter(nt=>typeof nt=="string").concat(["_|0"]),$=f.filter(nt=>typeof nt!="string").concat(h).map(o),O={variants:[{className:"keyword",match:s(...$,...d)}]},H={$pattern:s(/\b\w+/,/#\w+/),keyword:T.concat(y),literal:m},K=[V,P,O],Z={match:r(/\./,s(...x)),relevance:0},C={className:"built_in",match:r(/\b/,s(...x),/(?=\()/)},D=[Z,C],Y={match:/->/,relevance:0},L={className:"operator",relevance:0,variants:[{match:S},{match:`\\.(\\.|${N})+`}]},G=[Y,L],q="([0-9]_*)+",Q="([0-9a-fA-F]_*)+",J={className:"number",relevance:0,variants:[{match:`\\b(${q})(\\.(${q}))?([eE][+-]?(${q}))?\\b`},{match:`\\b0x(${Q})(\\.(${Q}))?([pP][+-]?(${q}))?\\b`},{match:/\b0o([0-7]_*)+\b/},{match:/\b0b([01]_*)+\b/}]},W=(nt="")=>({className:"subst",variants:[{match:r(/\\/,nt,/[0\\tnr"']/)},{match:r(/\\/,nt,/u\{[0-9a-fA-F]{1,8}\}/)}]}),te=(nt="")=>({className:"subst",match:r(/\\/,nt,/[\t ]*(?:[\r\n]|\r\n)/)}),ce=(nt="")=>({className:"subst",label:"interpol",begin:r(/\\/,nt,/\(/),end:/\)/}),fe=(nt="")=>({begin:r(nt,/"""/),end:r(/"""/,nt),contains:[W(nt),te(nt),ce(nt)]}),be=(nt="")=>({begin:r(nt,/"/),end:r(/"/,nt),contains:[W(nt),ce(nt)]}),we={className:"string",variants:[fe(),fe("#"),fe("##"),fe("###"),be(),be("#"),be("##"),be("###")]},Ne=[I.BACKSLASH_ESCAPE,{begin:/\[/,end:/\]/,relevance:0,contains:[I.BACKSLASH_ESCAPE]}],De={begin:/\/[^\s](?=[^/\n]*\/)/,end:/\//,contains:Ne},$e=nt=>{const Xn=r(nt,/\//),On=r(/\//,nt);return{begin:Xn,end:On,contains:[...Ne,{scope:"comment",begin:`#(?!.*${On})`,end:/$/}]}},st={scope:"regexp",variants:[$e("###"),$e("##"),$e("#"),De]},Rt={match:r(/`/,E,/`/)},Yt={className:"variable",match:/\$\d+/},Pt={className:"variable",match:`\\$${k}+`},Xt=[Rt,Yt,Pt],Yn={match:/(@|#(un)?)available/,scope:"keyword",starts:{contains:[{begin:/\(/,end:/\)/,keywords:R,contains:[...G,J,we]}]}},En={scope:"keyword",match:r(/@/,s(...B),t(s(/\(/,/\s+/)))},ct={scope:"meta",match:r(/@/,E)},It=[Yn,En,ct],ue={match:t(/\b[A-Z]/),relevance:0,contains:[{className:"type",match:r(/(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)/,k,"+")},{className:"type",match:M,relevance:0},{match:/[?!]+/,relevance:0},{match:/\.\.\./,relevance:0},{match:r(/\s+&\s+/,t(M)),relevance:0}]},xe={begin://,keywords:H,contains:[...z,...K,...It,Y,ue]};ue.contains.push(xe);const Oe={match:r(E,/\s*:/),keywords:"_|0",relevance:0},Fe={begin:/\(/,end:/\)/,relevance:0,keywords:H,contains:["self",Oe,...z,st,...K,...D,...G,J,we,...Xt,...It,ue]},Ze={begin://,keywords:"repeat each",contains:[...z,ue]},on={begin:s(t(r(E,/\s*:/)),t(r(E,/\s+/,E,/\s*:/))),end:/:/,relevance:0,contains:[{className:"keyword",match:/\b_\b/},{className:"params",match:E}]},Nn={begin:/\(/,end:/\)/,keywords:H,contains:[on,...z,...K,...G,J,we,...It,ue,Fe],endsParent:!0,illegal:/["']/},Kt={match:[/(func|macro)/,/\s+/,s(Rt.match,E,S)],className:{1:"keyword",3:"title.function"},contains:[Ze,Nn,X],illegal:[/\[/,/%/]},At={match:[/\b(?:subscript|init[?!]?)/,/\s*(?=[<(])/],className:{1:"keyword"},contains:[Ze,Nn,X],illegal:/\[|%/},Wt={match:[/operator/,/\s+/,S],className:{1:"keyword",3:"title"}},ut={begin:[/precedencegroup/,/\s+/,M],className:{1:"keyword",3:"title"},contains:[ue],keywords:[...g,...m],end:/}/},In={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"}},Ni={begin:[/(struct|protocol|class|extension|enum|actor)/,/\s+/,E,/\s*/],beginScope:{1:"keyword",3:"title.class"},keywords:H,contains:[Ze,...K,{begin:/:/,end:/\{/,keywords:H,contains:[{scope:"title.class.inherited",match:M},...K],relevance:0}]};for(const nt of we.variants){const Xn=nt.contains.find(hn=>hn.label==="interpol");Xn.keywords=H;const On=[...K,...D,...G,J,we,...Xt];Xn.contains=[...On,{begin:/\(/,end:/\)/,contains:["self",...On]}]}return{name:"Swift",keywords:H,contains:[...z,Kt,At,In,cn,Ni,Wt,ut,{beginKeywords:"import",end:/$/,contains:[...z],relevance:0},st,...K,...D,...G,J,we,...Xt,...It,ue,Fe]}}return dm=U,dm}var fm,Rv;function Cj(){if(Rv)return fm;Rv=1;function e(t){const r="true false yes no null",a="[\\w#;/?:@&=+$,.~*'()[\\]]+",s={className:"attr",variants:[{begin:/[\w*@][\w*@ :()\./-]*:(?=[ \t]|$)/},{begin:/"[\w*@][\w*@ :()\./-]*":(?=[ \t]|$)/},{begin:/'[\w*@][\w*@ :()\./-]*':(?=[ \t]|$)/}]},o={className:"template-variable",variants:[{begin:/\{\{/,end:/\}\}/},{begin:/%\{/,end:/\}/}]},c={className:"string",relevance:0,begin:/'/,end:/'/,contains:[{match:/''/,scope:"char.escape",relevance:0}]},d={className:"string",relevance:0,variants:[{begin:/"/,end:/"/},{begin:/\S+/}],contains:[t.BACKSLASH_ESCAPE,o]},h=t.inherit(d,{variants:[{begin:/'/,end:/'/,contains:[{begin:/''/,relevance:0}]},{begin:/"/,end:/"/},{begin:/[^\s,{}[\]]+/}]}),x={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:r,relevance:0},N={begin:/\{/,end:/\}/,contains:[_],illegal:"\\n",relevance:0},S={begin:"\\[",end:"\\]",contains:[_],illegal:"\\n",relevance:0},w=[s,{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:"&"+t.UNDERSCORE_IDENT_RE+"$"},{className:"meta",begin:"\\*"+t.UNDERSCORE_IDENT_RE+"$"},{className:"bullet",begin:"-(?=[ ]|$)",relevance:0},t.HASH_COMMENT_MODE,{beginKeywords:r,keywords:{literal:r}},x,{className:"number",begin:t.C_NUMBER_RE+"\\b",relevance:0},N,S,c,d],k=[...w];return k.pop(),k.push(h),_.contains=k,{name:"YAML",case_insensitive:!0,aliases:["yml"],contains:w}}return fm=e,fm}var hm,jv;function Tj(){if(jv)return hm;jv=1;const e="[A-Za-z$_][0-9A-Za-z$_]*",t=["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"],r=["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"],s=["Error","EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],o=["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"],d=[].concat(o,a,s);function h(m){const g=m.regex,y=(W,{after:te})=>{const ce="",end:""},N=/<[A-Za-z0-9\\._:-]+\s*\/>/,S={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(W,te)=>{const ce=W[0].length+W.index,fe=W.input[ce];if(fe==="<"||fe===","){te.ignoreMatch();return}fe===">"&&(y(W,{after:ce})||te.ignoreMatch());let be;const we=W.input.substring(ce);if(be=we.match(/^\s*=/)){te.ignoreMatch();return}if((be=we.match(/^\s+extends\s+/))&&be.index===0){te.ignoreMatch();return}}},w={$pattern:e,keyword:t,literal:r,built_in:d,"variable.language":c},k="[0-9](_?[0-9])*",E=`\\.(${k})`,M="0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*",B={className:"number",variants:[{begin:`(\\b(${M})((${E})|\\.)?|(${E}))[eE][+-]?(${k})\\b`},{begin:`\\b(${M})\\b((${E})\\b|\\.)?|(${E})\\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:w,contains:[]},U={begin:".?html`",end:"",starts:{end:"`",returnEnd:!1,contains:[m.BACKSLASH_ESCAPE,R],subLanguage:"xml"}},I={begin:".?css`",end:"",starts:{end:"`",returnEnd:!1,contains:[m.BACKSLASH_ESCAPE,R],subLanguage:"css"}},X={begin:".?gql`",end:"",starts:{end:"`",returnEnd:!1,contains:[m.BACKSLASH_ESCAPE,R],subLanguage:"graphql"}},j={className:"string",begin:"`",end:"`",contains:[m.BACKSLASH_ESCAPE,R]},V={className:"comment",variants:[m.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:x+"(?=\\s*(-)|$)",endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]}),m.C_BLOCK_COMMENT_MODE,m.C_LINE_COMMENT_MODE]},P=[m.APOS_STRING_MODE,m.QUOTE_STRING_MODE,U,I,X,j,{match:/\$\d+/},B];R.contains=P.concat({begin:/\{/,end:/\}/,keywords:w,contains:["self"].concat(P)});const T=[].concat(V,R.contains),$=T.concat([{begin:/(\s*)\(/,end:/\)/,keywords:w,contains:["self"].concat(T)}]),O={className:"params",begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:w,contains:$},H={variants:[{match:[/class/,/\s+/,x,/\s+/,/extends/,/\s+/,g.concat(x,"(",g.concat(/\./,x),")*")],scope:{1:"keyword",3:"title.class",5:"keyword",7:"title.class.inherited"}},{match:[/class/,/\s+/,x],scope:{1:"keyword",3:"title.class"}}]},K={relevance:0,match:g.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,...s]}},Z={label:"use_strict",className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},C={variants:[{match:[/function/,/\s+/,x,/(?=\s*\()/]},{match:[/function/,/\s*(?=\()/]}],className:{1:"keyword",3:"title.function"},label:"func.def",contains:[O],illegal:/%/},D={relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:"variable.constant"};function Y(W){return g.concat("(?!",W.join("|"),")")}const L={match:g.concat(/\b/,Y([...o,"super","import"].map(W=>`${W}\\s*\\(`)),x,g.lookahead(/\s*\(/)),className:"title.function",relevance:0},G={begin:g.concat(/\./,g.lookahead(g.concat(x,/(?![0-9A-Za-z$_(])/))),end:x,excludeBegin:!0,keywords:"prototype",className:"property",relevance:0},q={match:[/get|set/,/\s+/,x,/(?=\()/],className:{1:"keyword",3:"title.function"},contains:[{begin:/\(\)/},O]},Q="(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|"+m.UNDERSCORE_IDENT_RE+")\\s*=>",J={match:[/const|var|let/,/\s+/,x,/\s*/,/=\s*/,/(async\s*)?/,g.lookahead(Q)],keywords:"async",className:{1:"keyword",3:"title.function"},contains:[O]};return{name:"JavaScript",aliases:["js","jsx","mjs","cjs"],keywords:w,exports:{PARAMS_CONTAINS:$,CLASS_REFERENCE:K},illegal:/#(?![$_A-z])/,contains:[m.SHEBANG({label:"shebang",binary:"node",relevance:5}),Z,m.APOS_STRING_MODE,m.QUOTE_STRING_MODE,U,I,X,j,V,{match:/\$\d+/},B,K,{scope:"attr",match:x+g.lookahead(":"),relevance:0},J,{begin:"("+m.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",relevance:0,contains:[V,m.REGEXP_MODE,{className:"function",begin:Q,returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:m.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:w,contains:$}]}]},{begin:/,/,relevance:0},{match:/\s+/,relevance:0},{variants:[{begin:_.begin,end:_.end},{match:N},{begin:S.begin,"on:begin":S.isTrulyOpeningTag,end:S.end}],subLanguage:"xml",contains:[{begin:S.begin,end:S.end,skip:!0,contains:["self"]}]}]},C,{beginKeywords:"while if switch catch for"},{begin:"\\b(?!function)"+m.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",returnBegin:!0,label:"func.def",contains:[O,m.inherit(m.TITLE_MODE,{begin:x,className:"title.function"})]},{match:/\.\.\./,relevance:0},G,{match:"\\$"+x,relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"},contains:[O]},L,D,H,q,{match:/\$[(.]/}]}}function f(m){const g=m.regex,y=h(m),x=e,_=["any","void","number","boolean","string","object","never","symbol","bigint","unknown"],N={begin:[/namespace/,/\s+/,m.IDENT_RE],beginScope:{1:"keyword",3:"title.class"}},S={beginKeywords:"interface",end:/\{/,excludeEnd:!0,keywords:{keyword:"interface extends",built_in:_},contains:[y.exports.CLASS_REFERENCE]},w={className:"meta",relevance:10,begin:/^\s*['"]use strict['"]/},k=["type","interface","public","private","protected","implements","declare","abstract","readonly","enum","override","satisfies"],E={$pattern:e,keyword:t.concat(k),literal:r,built_in:d.concat(_),"variable.language":c},M={className:"meta",begin:"@"+x},B=(X,j,z)=>{const V=X.contains.findIndex(P=>P.label===j);if(V===-1)throw new Error("can not find mode to replace");X.contains.splice(V,1,z)};Object.assign(y.keywords,E),y.exports.PARAMS_CONTAINS.push(M);const R=y.contains.find(X=>X.scope==="attr"),U=Object.assign({},R,{match:g.concat(x,g.lookahead(/\s*\?:/))});y.exports.PARAMS_CONTAINS.push([y.exports.CLASS_REFERENCE,R,U]),y.contains=y.contains.concat([M,N,S,U]),B(y,"shebang",m.SHEBANG()),B(y,"use_strict",w);const I=y.contains.find(X=>X.label==="func.def");return I.relevance=0,Object.assign(y,{name:"TypeScript",aliases:["ts","tsx","mts","cts"]}),y}return hm=f,hm}var mm,Dv;function Aj(){if(Dv)return mm;Dv=1;function e(t){const r=t.regex,a={className:"string",begin:/"(""|[^/n])"C\b/},s={className:"string",begin:/"/,end:/"/,illegal:/\n/,contains:[{begin:/""/}]},o=/\d{1,2}\/\d{1,2}\/\d{4}/,c=/\d{4}-\d{1,2}-\d{1,2}/,d=/(\d|1[012])(:\d+){0,2} *(AM|PM)/,h=/\d{1,2}(:\d{1,2}){1,2}/,f={className:"literal",variants:[{begin:r.concat(/# */,r.either(c,o),/ *#/)},{begin:r.concat(/# */,h,/ *#/)},{begin:r.concat(/# */,d,/ *#/)},{begin:r.concat(/# */,r.either(c,o),/ +/,r.either(d,h),/ *#/)}]},m={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])|[%&])?/}]},g={className:"label",begin:/^\w+:/},y=t.COMMENT(/'''/,/$/,{contains:[{className:"doctag",begin:/<\/?/,end:/>/}]}),x=t.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,s,f,m,g,y,x,{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:[x]}]}}return mm=e,mm}var pm,Lv;function Mj(){if(Lv)return pm;Lv=1;function e(t){t.regex;const r=t.COMMENT(/\(;/,/;\)/);r.contains.push("self");const a=t.COMMENT(/;;/,/$/),s=["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"],o={begin:[/(?:func|call|call_indirect)/,/\s+/,/\$[^\s)]+/],className:{1:"keyword",3:"title.function"}},c={className:"variable",begin:/\$[\w_]+/},d={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/},f={match:/(i32|i64|f32|f64)(?!\.)/,className:"type"},m={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:s},contains:[a,r,{match:[/(?:offset|align)/,/\s*/,/=/],className:{1:"keyword",3:"operator"}},c,d,o,t.QUOTE_STRING_MODE,f,m,h]}}return pm=e,pm}var gm,zv;function Oj(){if(zv)return gm;zv=1;var e=X4();return e.registerLanguage("xml",K4()),e.registerLanguage("bash",Z4()),e.registerLanguage("c",Q4()),e.registerLanguage("cpp",W4()),e.registerLanguage("csharp",J4()),e.registerLanguage("css",ej()),e.registerLanguage("markdown",tj()),e.registerLanguage("diff",nj()),e.registerLanguage("ruby",rj()),e.registerLanguage("go",ij()),e.registerLanguage("graphql",aj()),e.registerLanguage("ini",sj()),e.registerLanguage("java",lj()),e.registerLanguage("javascript",oj()),e.registerLanguage("json",cj()),e.registerLanguage("kotlin",uj()),e.registerLanguage("less",dj()),e.registerLanguage("lua",fj()),e.registerLanguage("makefile",hj()),e.registerLanguage("perl",mj()),e.registerLanguage("objectivec",pj()),e.registerLanguage("php",gj()),e.registerLanguage("php-template",bj()),e.registerLanguage("plaintext",xj()),e.registerLanguage("python",yj()),e.registerLanguage("python-repl",vj()),e.registerLanguage("r",_j()),e.registerLanguage("rust",wj()),e.registerLanguage("scss",Ej()),e.registerLanguage("shell",Nj()),e.registerLanguage("sql",Sj()),e.registerLanguage("swift",kj()),e.registerLanguage("yaml",Cj()),e.registerLanguage("typescript",Tj()),e.registerLanguage("vbnet",Aj()),e.registerLanguage("wasm",Mj()),e.HighlightJS=e,e.default=e,gm=e,gm}var Rj=Oj();const zn=To(Rj);function jj(e){const t=e.regex,r="HTTP/([32]|1\\.[01])",a=/[A-Za-z][A-Za-z0-9-]*/,s={className:"attribute",begin:t.concat("^",a,"(?=\\:\\s)"),starts:{contains:[{className:"punctuation",begin:/: /,relevance:0,starts:{end:"$",relevance:0}}]}},o=[s,{begin:"\\n\\n",starts:{subLanguage:[],endsWithParent:!0}}];return{name:"HTTP",aliases:["https"],illegal:/\S/,contains:[{begin:"^(?="+r+" \\d{3})",end:/$/,contains:[{className:"meta",begin:r},{className:"number",begin:"\\b\\d{3}\\b"}],starts:{end:/\b\B/,illegal:/\S/,contains:o}},{begin:"(?=^[A-Z]+ (.*?) "+r+"$)",end:/$/,contains:[{className:"string",begin:" ",end:" ",excludeBegin:!0,excludeEnd:!0},{className:"meta",begin:r},{className:"keyword",begin:"[A-Z]+"}],starts:{end:/\b\B/,illegal:/\S/,contains:o}},e.inherit(s,{relevance:0})]}}function Dj(e){const t=e.regex,r={className:"variable",variants:[{begin:/\$\d+/},{begin:/\$\{\w+\}/},{begin:t.concat(/[$@]/,e.UNDERSCORE_IDENT_RE)}]},s={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,r],variants:[{begin:/"/,end:/"/},{begin:/'/,end:/'/}]},{begin:"([a-z]+):/",end:"\\s",endsWithParent:!0,excludeEnd:!0,contains:[r]},{className:"regexp",contains:[e.BACKSLASH_ESCAPE,r],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},r]};return{name:"Nginx config",aliases:["nginxconf"],contains:[e.HASH_COMMENT_MODE,{beginKeywords:"upstream location",end:/;|\{/,contains:s.contains,keywords:{section:"upstream location"}},{className:"section",begin:t.concat(e.UNDERSCORE_IDENT_RE+t.lookahead(/\s+\{/)),relevance:0},{begin:t.lookahead(e.UNDERSCORE_IDENT_RE+"\\s"),end:";|\\{",contains:[{className:"attribute",begin:e.UNDERSCORE_IDENT_RE,starts:s}],relevance:0}],illegal:"[^\\s\\}\\{]"}}function Lj(e){const t={className:"number",begin:/[$%]\d+/},r={className:"number",begin:/\b\d+/},a={className:"number",begin:/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(:\d{1,5})?/},s={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,s,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",t]},a,r,e.QUOTE_STRING_MODE]}}],illegal:/\S/}}function zj(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:"{wp(o),s(!0),setTimeout(()=>s(!1),2e3)};return p.jsxs("div",{className:"group/code relative rounded-md border border-[#2a2a2a] my-4 text-[#ddd] overflow-hidden",children:[x?p.jsxs("div",{className:"flex items-stretch",children:[p.jsxs("span",{className:"relative flex items-center text-[13px] text-[#999] font-mono px-4 py-2 border-r border-[#2a2a2a]",children:[x,p.jsx("span",{className:"absolute top-0 inset-x-0 h-0.5 bg-white/60 rounded-full"})]}),p.jsx("div",{className:"flex-1 border-b border-[#2a2a2a]"}),p.jsx("button",{onClick:S,className:"px-3 py-2 text-[#555] hover:text-white transition-colors border-b border-[#2a2a2a]","aria-label":"Copy code",children:a?p.jsx(Vs,{className:"w-3.5 h-3.5 text-emerald-400"}):p.jsx(po,{className:"w-3.5 h-3.5"})})]}):p.jsx("button",{onClick:S,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?p.jsx(Vs,{className:"w-3.5 h-3.5 text-emerald-400"}):p.jsx(po,{className:"w-3.5 h-3.5"})}),p.jsx("div",{className:"overflow-auto max-h-[400px]",children:p.jsx("table",{className:"w-full border-collapse font-mono text-[12px] leading-[22px] [font-variant-ligatures:none]",children:p.jsx("tbody",{children:N.map((E,M)=>p.jsxs("tr",{children:[p.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+M}),p.jsx("td",{className:"pl-4 pr-4 whitespace-pre",dangerouslySetInnerHTML:{__html:E||` -`}})]},M))})})})]})}function Gp(){return e=>{const t=r=>{var a;if(r.type==="element"&&r.tagName==="pre"&&r.children){const s=r.children.find(o=>o.type==="element"&&o.tagName==="code");(a=s==null?void 0:s.data)!=null&&a.meta&&(s.properties=s.properties||{},s.properties.metastring=s.data.meta)}r.children&&r.children.forEach(s=>t(s))};t(e)}}const Vp={code:uE,pre:({children:e})=>p.jsx(p.Fragment,{children:e})};function oa({title:e,content:t,action:r}){return p.jsxs("section",{children:[(e||r)&&p.jsxs("div",{className:"flex items-center justify-between gap-3 mb-3",children:[e?p.jsx("h2",{className:"text-xl font-semibold text-white",children:e}):p.jsx("span",{}),r]}),p.jsx("div",{className:"prose-markdown",children:p.jsx(Hp,{remarkPlugins:[Fp],rehypePlugins:[Gp],components:Vp,children:t})})]})}class Bj{diff(t,r,a={}){let s;typeof a=="function"?(s=a,a={}):"callback"in a&&(s=a.callback);const o=this.castInput(t,a),c=this.castInput(r,a),d=this.removeEmpty(this.tokenize(o,a)),h=this.removeEmpty(this.tokenize(c,a));return this.diffWithOptionsObj(d,h,a,s)}diffWithOptionsObj(t,r,a,s){var o;const c=k=>{if(k=this.postProcess(k,a),s){setTimeout(function(){s(k)},0);return}else return k},d=r.length,h=t.length;let f=1,m=d+h;a.maxEditLength!=null&&(m=Math.min(m,a.maxEditLength));const g=(o=a.timeout)!==null&&o!==void 0?o:1/0,y=Date.now()+g,x=[{oldPos:-1,lastComponent:void 0}];let _=this.extractCommon(x[0],r,t,0,a);if(x[0].oldPos+1>=h&&_+1>=d)return c(this.buildValues(x[0].lastComponent,r,t));let N=-1/0,S=1/0;const w=()=>{for(let k=Math.max(N,-f);k<=Math.min(S,f);k+=2){let E;const M=x[k-1],B=x[k+1];M&&(x[k-1]=void 0);let R=!1;if(B){const I=B.oldPos-k;R=B&&0<=I&&I=h&&_+1>=d)return c(this.buildValues(E.lastComponent,r,t))||!0;x[k]=E,E.oldPos+1>=h&&(S=Math.min(S,k-1)),_+1>=d&&(N=Math.max(N,k+1))}f++};if(s)(function k(){setTimeout(function(){if(f>m||Date.now()>y)return s(void 0);w()||k()},0)})();else for(;f<=m&&Date.now()<=y;){const k=w();if(k)return k}}addToPath(t,r,a,s,o){const c=t.lastComponent;return c&&!o.oneChangePerToken&&c.added===r&&c.removed===a?{oldPos:t.oldPos+s,lastComponent:{count:c.count+1,added:r,removed:a,previousComponent:c.previousComponent}}:{oldPos:t.oldPos+s,lastComponent:{count:1,added:r,removed:a,previousComponent:c}}}extractCommon(t,r,a,s,o){const c=r.length,d=a.length;let h=t.oldPos,f=h-s,m=0;for(;f+1y.length?_:y}),m.value=this.join(g)}else m.value=this.join(r.slice(h,h+m.count));h+=m.count,m.added||(f+=m.count)}}return s}}class Uj extends Bj{constructor(){super(...arguments),this.tokenize=qj}equals(t,r,a){return a.ignoreWhitespace?((!a.newlineIsToken||!t.includes(` -`))&&(t=t.trim()),(!a.newlineIsToken||!r.includes(` -`))&&(r=r.trim())):a.ignoreNewlineAtEof&&!a.newlineIsToken&&(t.endsWith(` -`)&&(t=t.slice(0,-1)),r.endsWith(` -`)&&(r=r.slice(0,-1))),super.equals(t,r,a)}}const Hj=new Uj;function $j(e,t,r){return Hj.diff(e,t,r)}function qj(e,t){t.stripTrailingCr&&(e=e.replace(/\r\n/g,` -`));const r=[],a=e.split(/(\n|\r\n)/);a[a.length-1]||a.pop();for(let s=0;sN.value.replace(/\n$/,"").split(` -`).map(S=>{const w=S===""?` -`:f!=="text"?Pj(S,f):S.replace(/&/g,"&").replace(//g,">");let k="",E="";return N.removed?k=String(g++):(N.added||(k=String(g++)),E=String(y++)),{highlighted:w,added:!!N.added,removed:!!N.removed,leftNo:k,rightNo:E}})),_=()=>{wp(s),d(!0),setTimeout(()=>d(!1),2e3),o==null||o()};return p.jsxs("div",{className:"rounded-md border border-[#2a2a2a] overflow-hidden",children:[p.jsxs("div",{className:"flex items-stretch",children:[p.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,p.jsx("span",{className:"absolute top-0 inset-x-0 h-0.5 bg-white/60 rounded-full"})]}),p.jsx("div",{className:"flex-1 border-b border-[#2a2a2a]"}),p.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?p.jsx(Vs,{className:"w-3.5 h-3.5 text-emerald-400"}):p.jsx(po,{className:"w-3.5 h-3.5"})})]}),p.jsx("div",{className:"overflow-auto max-h-[400px]",children:p.jsx("table",{className:"w-full border-collapse font-mono text-[12px] leading-[22px] [font-variant-ligatures:none]",children:p.jsx("tbody",{children:x.map((N,S)=>p.jsxs("tr",{className:N.added?"bg-blue-500/[0.12]":N.removed?"bg-red-500/[0.12]":"",children:[p.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:N.leftNo}),p.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:N.rightNo}),p.jsx("td",{className:"pl-4 pr-4 whitespace-pre",dangerouslySetInnerHTML:{__html:N.highlighted}})]},S))})})})]})}const Gj=/^```([^\n`]*)\r?\n([\s\S]*?)\r?\n?```$/;function dE(e){if(!e)return{code:""};const t=Gj.exec(e.trim());if(!t)return{code:e};const r=t[1].trim();return{language:(r?r.split(/\s+/)[0]:void 0)||void 0,code:t[2]}}function Vj({description:e,scriptCode:t,onCopy:r}){const[a,s]=ee.useState(!1);if(!e&&!t)return null;const{language:o,code:c}=dE(t),d=cE(c,o),h=()=>{c&&(wp(c),s(!0),setTimeout(()=>s(!1),2e3),r==null||r())};return p.jsxs("section",{children:[p.jsx("h2",{className:"text-xl font-semibold text-white mb-3",children:"Proof of Concept"}),p.jsxs("div",{className:"space-y-4",children:[e&&p.jsx("div",{className:"prose-markdown",children:p.jsx(Hp,{remarkPlugins:[Fp],rehypePlugins:[Gp],components:Vp,children:e})}),c&&p.jsxs("div",{className:"group/poc relative rounded-md border border-[#2a2a2a] overflow-hidden",children:[p.jsxs("div",{className:"flex items-stretch",children:[p.jsxs("span",{className:"relative flex items-center text-[13px] text-[#999] font-mono px-4 py-2 border-r border-[#2a2a2a]",children:["PoC Script",p.jsx("span",{className:"absolute top-0 inset-x-0 h-0.5 bg-white/60 rounded-full"})]}),p.jsx("div",{className:"flex-1 border-b border-[#2a2a2a]"}),p.jsx("button",{onClick:h,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?p.jsx(Vs,{className:"w-3.5 h-3.5 text-emerald-400"}):p.jsx(po,{className:"w-3.5 h-3.5"})})]}),p.jsx("div",{className:"overflow-auto max-h-[400px] px-4 py-3",children:p.jsx("pre",{className:"font-mono text-[12px] leading-[22px] whitespace-pre [font-variant-ligatures:none]",children:p.jsx("code",{dangerouslySetInnerHTML:{__html:d}})})})]})]})]})}function fE(e){const t=e.match(/(?:https?:\/\/)?(?:www\.)?github\.com\/([^\s/]+\/[^\s/]+)/);if(t){const s=t[1].replace(/\.git$/,"");return{display:s,href:`https://github.com/${s}`,provider:"github"}}const r=e.match(/(?:https?:\/\/)?(?:www\.)?gitlab\.com\/([^\s/]+\/[^\s/]+)/);if(r){const s=r[1].replace(/\.git$/,"");return{display:s,href:`https://gitlab.com/${s}`,provider:"gitlab"}}const a=e.match(/(?:https?:\/\/)?(?:www\.)?bitbucket\.org\/([^\s/]+\/[^\s/]+)/);if(a){const s=a[1].replace(/\.git$/,"");return{display:s,href:`https://bitbucket.org/${s}`,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 xo(e,t){return e?fE(e).display.replace(/\/$/,""):t||"Untitled pentest"}function Yj({className:e}){return p.jsx("svg",{viewBox:"0 0 24 24",fill:"currentColor",className:e,"aria-hidden":"true",children:p.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 Xj({provider:e,className:t}){const r=t??"w-4 h-4";return e==="gitlab"?p.jsx(TC,{className:`${r} text-orange-400`}):e==="bitbucket"?p.jsx(Yj,{className:`${r} text-blue-400`}):p.jsx(kC,{className:`${r} text-white`})}const Kj={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"}},Zj={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"}},Qj={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]"},Wj=[{label:"Exploitability",keys:["attack_vector","attack_complexity","privileges_required","user_interaction"]},{label:"Impact",keys:["scope","confidentiality","integrity","availability"]}];function Jj(e,t,r,a,s){const o=e.replace(/\.git$/,"").replace(/\/+$/,""),c=a.split("/").map(encodeURIComponent).join("/"),d=r.split("/").map(encodeURIComponent).join("/");return t==="github"?`${o}/blob/${d}/${c}#L${s}`:t==="gitlab"?`${o}/-/blob/${d}/${c}#L${s}`:null}function eD({vulnerability:e,statusSlot:t,slackThreadUrl:r}){var R;const{severity:a,cvss:s,cve:o,cwe:c,fix_effort:d,created_at:h,target:f,endpoint:m,method:g,code_locations:y,cvss_breakdown:x,location_meta:_}=e,[N,S]=ee.useState(!0),w=y==null?void 0:y.filter(U=>U.fix_before&&U.fix_after),k=w&&w.length>0,E=f?fE(f):null,M=!!(f||m||g||k),B=x&&Object.values(x).some(U=>U!=null);return p.jsxs("aside",{className:"lg:sticky lg:top-6 lg:max-h-[calc(100vh-3rem)] lg:overflow-y-auto",children:[p.jsx("div",{className:"pb-4",children:p.jsxs("div",{className:"space-y-3",children:[p.jsxs("div",{className:"flex items-center justify-between",children:[p.jsx("span",{className:"text-xs text-[#aaa]",children:"Severity"}),p.jsxs("div",{className:"flex items-center gap-1.5",children:[p.jsx("div",{className:`w-2 h-2 rounded-full ${_p(a)}`,"aria-hidden":"true"}),p.jsx("span",{className:"text-sm font-medium capitalize text-white",children:a})]})]}),p.jsxs("div",{className:"flex items-center justify-between",children:[p.jsx("span",{className:"text-xs text-[#aaa]",children:"CVSS Score"}),p.jsx("span",{className:"text-sm font-semibold tabular-nums text-white",children:s!==null?s:"N/A"})]}),o&&p.jsxs("div",{className:"flex items-center justify-between",children:[p.jsx("span",{className:"text-xs text-[#aaa]",children:"CVE"}),p.jsx("span",{className:"text-sm text-white font-mono",children:o})]}),c&&c.length>0&&p.jsxs("div",{className:"flex items-center justify-between",children:[p.jsx("span",{className:"text-xs text-[#aaa]",children:"CWE"}),p.jsx("span",{className:"text-xs text-white font-mono truncate max-w-[80%] text-right",title:c.join(" · "),children:c.join(" · ")})]}),d&&p.jsxs("div",{className:"flex items-center justify-between",children:[p.jsx("span",{className:"text-xs text-[#aaa]",children:"Fix Effort"}),p.jsx("span",{className:`inline-flex items-center px-2 py-0.5 text-[11px] font-medium rounded-full border ${((R=CT[d])==null?void 0:R.color)??"text-[#666]"}`,children:d.charAt(0).toUpperCase()+d.slice(1)})]}),p.jsxs("div",{className:"flex items-center justify-between",children:[p.jsx("span",{className:"text-xs text-[#aaa]",children:"Discovered"}),p.jsxs("div",{className:"flex items-center gap-1.5",children:[p.jsx(z_,{className:"w-3 h-3 text-[#444]","aria-hidden":"true"}),p.jsx("span",{className:"text-sm text-white",children:qm(h)})]})]}),p.jsxs("div",{className:"flex items-center justify-between",children:[p.jsx("span",{className:"text-xs text-[#aaa]",children:"Status"}),t]})]})}),M&&p.jsxs("div",{className:"border-t border-[#191919] pt-4 pb-4",children:[p.jsx("p",{className:"text-xs font-medium text-[#aaa] mb-2.5",children:"Asset"}),p.jsxs("div",{className:"space-y-2.5",children:[f&&E&&p.jsxs("div",{className:"flex items-center gap-1.5",children:[E.provider?p.jsx("span",{className:"flex-shrink-0 [&_svg]:w-3.5 [&_svg]:h-3.5","aria-hidden":"true",children:p.jsx(Xj,{provider:E.provider})}):p.jsx(B_,{className:"w-3.5 h-3.5 text-[#555] flex-shrink-0","aria-hidden":"true"}),E.href?p.jsx("a",{href:E.href,target:"_blank",rel:"noopener noreferrer",className:"text-sm text-white hover:text-[#ccc] break-words min-w-0 transition-colors",children:E.display}):p.jsx("span",{className:"text-sm text-white break-words min-w-0",children:E.display})]}),m&&p.jsxs("div",{className:"flex items-center justify-between",children:[p.jsx("span",{className:"text-xs text-[#aaa]",children:"Endpoint"}),p.jsx("span",{className:"text-xs text-white font-mono truncate max-w-[75%] text-right",children:m})]}),g&&p.jsxs("div",{className:"flex items-center justify-between",children:[p.jsx("span",{className:"text-xs text-[#aaa]",children:"Method"}),p.jsx("span",{className:"text-xs text-white font-mono",children:g})]}),k&&p.jsxs("div",{children:[p.jsx("span",{className:"text-xs text-[#aaa] mb-1.5 block",children:"Locations"}),p.jsx("div",{className:"space-y-0.5",children:w.map((U,I)=>{const X=`${U.file}:${U.start_line}`,j=_?Jj(_.repo_url,_.provider,_.branch,U.file,U.start_line):null;return j?p.jsx("a",{href:j,target:"_blank",rel:"noopener noreferrer",className:"text-[13px] text-[#888] hover:text-white font-mono break-all transition-colors block",children:X},`loc-${I}`):p.jsx("span",{className:"text-[13px] text-[#888] font-mono break-all block",children:X},`loc-${I}`)})})]})]})]}),B&&p.jsxs("div",{className:"border-t border-[#191919] pt-4",children:[p.jsxs("button",{onClick:()=>S(!N),className:"flex items-center justify-between w-full mb-2.5 group","aria-expanded":N,children:[p.jsx("span",{className:"text-xs font-medium text-[#aaa]",children:"Risk Assessment"}),p.jsx(mo,{className:`w-3.5 h-3.5 text-[#555] group-hover:text-white transition-transform ${N?"":"-rotate-90"}`,"aria-hidden":"true"})]}),p.jsx("div",{className:`space-y-3 ${N?"":"hidden"}`,children:Wj.map(U=>{const I=U.keys.filter(X=>x[X]!=null);return I.length===0?null:p.jsxs("div",{children:[p.jsxs("div",{className:"flex items-center justify-between mb-1.5",children:[p.jsx("p",{className:"text-[10px] uppercase tracking-wider text-[#444] font-medium",children:U.label}),p.jsx("p",{className:"text-[10px] uppercase tracking-wider text-[#444] font-medium mr-2",children:"Risk"})]}),p.jsx("div",{className:"space-y-1",children:I.map(X=>{var P,T;const j=x[X],z=j?((P=Zj[X])==null?void 0:P[j])??"low":"low",V=j?((T=Kj[X])==null?void 0:T[j])??j:"N/A";return p.jsxs("div",{className:"flex items-center justify-between py-0.5",children:[p.jsx("span",{className:"text-[12px] text-[#aaa]",children:V}),p.jsx("span",{className:`text-[10px] font-medium px-1.5 py-0.5 rounded border ${Qj[z]}`,children:z})]},X)})})]},U.label)})})]})]})}function Iv(e){return e?Math.floor((Date.now()-new Date(e).getTime())/1e3)<604800?` ${qm(e)}`:` on ${qm(e)}`:""}const tD={open:null,in_progress:{icon:z_,label:"Marked as In Progress",iconColor:"text-blue-400"},snoozed:{icon:qk,label:"Snoozed",iconColor:"text-purple-400"},fixed:{icon:L_,label:"Marked as Fixed",iconColor:"text-emerald-400"},ignored:{icon:O_,label:"Marked as Ignored",iconColor:"text-[#888]"}},nD=[{label:"Auto-fix & open a PR",slug:"autofix",icon:Hm,requiresCode:!0},{label:"Sync to Jira / Linear",slug:"integrations",icon:wC}];function rD({vulnerability:e}){const t=kT[e.status],r=e.code_locations&&e.code_locations.length>0,a=r||e.remediation_steps,s=!!(e.evidence||e.assumptions||e.poc_description||e.poc_script_code),[o,c]=ee.useState("fix"),h=[{id:"fix",label:"Fix",show:!!a},{id:"reproduction",label:"Reproduction",show:s}].filter(f=>f.show);return p.jsxs("div",{className:"space-y-6",children:[p.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-4",children:[p.jsxs("div",{className:"min-w-0 flex-1",children:[p.jsxs("div",{className:"mb-2",children:[e.display_number&&p.jsx("span",{className:"text-xs font-mono text-[#555] block mb-1",children:SA(e.display_number)}),p.jsx("h1",{className:"text-2xl font-semibold text-white",children:e.title})]}),p.jsxs("div",{className:"flex flex-wrap items-center gap-3",children:[p.jsx("span",{className:`inline-flex items-center gap-1.5 px-3 py-1 text-sm font-medium rounded-full border ${t.color}`,children:t.label}),p.jsxs("div",{className:`inline-flex items-center gap-1.5 px-3 py-1 text-sm font-semibold rounded-full border ${q_[e.severity]}`,title:Qc(e)?`Adjusted from ${e.original_severity}`:void 0,children:[p.jsx("div",{className:`w-2 h-2 rounded-full ${_p(e.severity)}`}),p.jsxs("span",{className:"capitalize",children:[e.severity,!Qc(e)&&e.cvss?` ${e.cvss}`:""]}),Qc(e)&&p.jsx(Ys,{className:"w-3 h-3 opacity-70","aria-hidden":"true"})]}),e.cve&&p.jsxs(p.Fragment,{children:[p.jsx("span",{className:"text-[#333]",children:"·"}),p.jsx("span",{className:"text-sm text-[#666] font-mono",children:e.cve})]})]})]}),p.jsx("div",{className:"flex flex-shrink-0 flex-wrap items-center gap-2",children:nD.filter(f=>!f.requiresCode||r).map(f=>{const m=f.icon;return p.jsxs("a",{href:ha(qu,f.slug),target:"_blank",rel:"noopener noreferrer",onClick:()=>jr(f.slug,"finding_detail"),className:"inline-flex items-center gap-1.5 rounded-lg bg-white px-3 py-1.5 text-xs font-semibold text-black transition-opacity hover:opacity-90",children:[p.jsx(m,{className:"h-3.5 w-3.5","aria-hidden":"true"}),f.label]},f.slug)})})]}),e.status!=="open"&&(()=>{const f=tD[e.status];if(!f)return null;const m=f.icon;return p.jsxs("div",{className:"rounded-lg px-4 py-3.5 flex gap-3",style:{border:"1px solid rgba(255,255,255,0.08)"},children:[p.jsx(m,{className:`w-5 h-5 flex-shrink-0 mt-0.5 ${f.iconColor}`,"aria-hidden":"true"}),p.jsxs("div",{className:"min-w-0",children:[p.jsxs("p",{className:"text-sm font-semibold text-white",children:[f.label,Iv(e.status_changed_at)]}),e.status_note&&p.jsxs("p",{className:"text-sm text-[#666] italic mt-1",children:["“",e.status_note,"”"]})]})]})})(),Qc(e)&&p.jsxs("div",{className:"rounded-lg px-4 py-3.5 flex gap-3",style:{border:"1px solid rgba(255,255,255,0.08)"},children:[p.jsx(Ys,{className:"w-5 h-5 flex-shrink-0 mt-0.5 text-orange-400","aria-hidden":"true"}),p.jsxs("div",{className:"min-w-0",children:[p.jsxs("p",{className:"text-sm font-semibold text-white",children:["Severity changed manually from"," ",p.jsx("span",{className:"capitalize",children:e.original_severity}),e.cvss!=null?` (${e.cvss})`:""," to"," ",p.jsx("span",{className:"capitalize",children:e.severity}),Iv(e.severity_changed_at)]}),e.severity_override_reason&&p.jsxs("p",{className:"text-sm text-[#666] italic mt-1",children:["“",e.severity_override_reason,"”"]})]})]}),p.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-[1fr_340px] gap-8",children:[p.jsxs("div",{className:"min-w-0",children:[p.jsxs("div",{className:"space-y-8",children:[p.jsx(oa,{title:"TL;DR",content:e.description}),e.impact&&p.jsx(oa,{title:"Impact",content:e.impact}),e.technical_analysis&&p.jsx(oa,{title:"Technical Details",content:e.technical_analysis})]}),h.length>0&&p.jsxs("div",{className:"mt-10",children:[p.jsx("div",{className:"border-b border-[#2a2a2a]",children:p.jsx("nav",{className:"flex gap-6","aria-label":"Tabs",children:h.map(f=>p.jsxs("button",{onClick:()=>c(f.id),className:`relative min-w-[80px] text-center pb-3 text-[16px] font-semibold transition-colors ${o===f.id?"text-white":"text-[#666] hover:text-white"}`,"aria-current":o===f.id?"page":void 0,children:[f.label,o===f.id&&p.jsx("span",{className:"absolute bottom-0 inset-x-0 h-0.5 bg-white rounded-full"})]},f.id))})}),a&&p.jsxs("div",{className:`pt-6 space-y-6 ${o==="fix"?"animate-tab-in":"hidden"}`,children:[e.remediation_steps&&p.jsx(oa,{title:"How do I fix it?",content:e.remediation_steps}),r&&e.code_locations.filter(f=>f.fix_before&&f.fix_after).map((f,m)=>p.jsx(Fj,{file:f.file,startLine:f.start_line,endLine:f.end_line,before:f.fix_before,after:f.fix_after},`fix-${m}`))]}),s&&p.jsxs("div",{className:`pt-6 space-y-8 ${o==="reproduction"?"animate-tab-in":"hidden"}`,children:[e.assumptions&&p.jsx(oa,{title:"Assumptions",content:e.assumptions}),e.evidence&&p.jsx(oa,{title:"Evidence",content:e.evidence}),p.jsx(Vj,{description:e.poc_description,scriptCode:e.poc_script_code})]})]})]}),p.jsx("div",{className:"lg:border-l lg:border-[#2a2a2a] lg:pl-6",children:p.jsx(eD,{vulnerability:e,statusSlot:p.jsxs("span",{className:`inline-flex items-center gap-1.5 px-2.5 py-1 text-xs font-medium rounded-full border ${t.color}`,children:[p.jsx("div",{className:`w-1.5 h-1.5 rounded-full ${t.dotColor}`}),t.label]})})})]})]})}const Bv=[{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 iD({findings:e,className:t,unit:r="issues",trailing:a}){return e.total<=0?null:p.jsxs("div",{className:Mr("space-y-3",t),children:[p.jsxs("div",{className:"flex flex-wrap items-center gap-x-8 gap-y-3",children:[p.jsxs("div",{className:"flex items-center gap-2",children:[p.jsx("span",{className:"text-2xl font-semibold text-white tabular-nums",children:e.total}),p.jsx("span",{className:"text-sm text-[#666]",children:r})]}),p.jsx("div",{className:"flex flex-wrap items-center gap-x-6 gap-y-2",children:Bv.map(({key:s,label:o,dotClass:c,textClass:d})=>{const h=e[s];return h<=0?null:p.jsxs("div",{className:"flex items-center gap-1.5",children:[p.jsx("div",{className:Mr("w-2 h-2 rounded-full",c),"aria-hidden":"true"}),p.jsx("span",{className:Mr("text-sm tabular-nums",d),children:h}),p.jsx("span",{className:"text-xs text-[#555]",children:o})]},s)})}),a?p.jsx("div",{className:"flex items-center gap-2",children:a}):null]}),p.jsx("div",{className:"h-1.5 rounded-full bg-[#222] overflow-hidden flex",children:Bv.map(({key:s,dotClass:o})=>{const c=e[s];return c<=0?null:p.jsx("div",{className:Mr("h-full",o),style:{width:`${c/e.total*100}%`}},s)})})]})}function ln(e){if(typeof e=="string"||typeof e=="number")return""+e;let t="";if(Array.isArray(e))for(let r=0,a;r{}};function Xu(){for(var e=0,t=arguments.length,r={},a;e=0&&(a=r.slice(s+1),r=r.slice(0,s)),r&&!t.hasOwnProperty(r))throw new Error("unknown type: "+r);return{type:r,name:a}})}gu.prototype=Xu.prototype={constructor:gu,on:function(e,t){var r=this._,a=sD(e+"",r),s,o=-1,c=a.length;if(arguments.length<2){for(;++o0)for(var r=new Array(s),a=0,s,o;a=0&&(t=e.slice(0,r))!=="xmlns"&&(e=e.slice(r+1)),Hv.hasOwnProperty(t)?{space:Hv[t],local:e}:e}function oD(e){return function(){var t=this.ownerDocument,r=this.namespaceURI;return r===ep&&t.documentElement.namespaceURI===ep?t.createElement(e):t.createElementNS(r,e)}}function cD(e){return function(){return this.ownerDocument.createElementNS(e.space,e.local)}}function hE(e){var t=Ku(e);return(t.local?cD:oD)(t)}function uD(){}function Yp(e){return e==null?uD:function(){return this.querySelector(e)}}function dD(e){typeof e!="function"&&(e=Yp(e));for(var t=this._groups,r=t.length,a=new Array(r),s=0;s=E&&(E=k+1);!(B=S[E])&&++E<_;);M._next=B||null}}return c=new sr(c,a),c._enter=d,c._exit=h,c}function OD(e){return typeof e=="object"&&"length"in e?e:Array.from(e)}function RD(){return new sr(this._exit||this._groups.map(bE),this._parents)}function jD(e,t,r){var a=this.enter(),s=this,o=this.exit();return typeof e=="function"?(a=e(a),a&&(a=a.selection())):a=a.append(e+""),t!=null&&(s=t(s),s&&(s=s.selection())),r==null?o.remove():r(o),a&&s?a.merge(s).order():s}function DD(e){for(var t=e.selection?e.selection():e,r=this._groups,a=t._groups,s=r.length,o=a.length,c=Math.min(s,o),d=new Array(s),h=0;h=0;)(c=a[s])&&(o&&c.compareDocumentPosition(o)^4&&o.parentNode.insertBefore(c,o),o=c);return this}function zD(e){e||(e=ID);function t(g,y){return g&&y?e(g.__data__,y.__data__):!g-!y}for(var r=this._groups,a=r.length,s=new Array(a),o=0;ot?1:e>=t?0:NaN}function BD(){var e=arguments[0];return arguments[0]=this,e.apply(null,arguments),this}function UD(){return Array.from(this)}function HD(){for(var e=this._groups,t=0,r=e.length;t1?this.each((t==null?QD:typeof t=="function"?JD:WD)(e,t,r??"")):Ks(this.node(),e)}function Ks(e,t){return e.style.getPropertyValue(t)||xE(e).getComputedStyle(e,null).getPropertyValue(t)}function tL(e){return function(){delete this[e]}}function nL(e,t){return function(){this[e]=t}}function rL(e,t){return function(){var r=t.apply(this,arguments);r==null?delete this[e]:this[e]=r}}function iL(e,t){return arguments.length>1?this.each((t==null?tL:typeof t=="function"?rL:nL)(e,t)):this.node()[e]}function yE(e){return e.trim().split(/^|\s+/)}function Xp(e){return e.classList||new vE(e)}function vE(e){this._node=e,this._names=yE(e.getAttribute("class")||"")}vE.prototype={add:function(e){var t=this._names.indexOf(e);t<0&&(this._names.push(e),this._node.setAttribute("class",this._names.join(" ")))},remove:function(e){var t=this._names.indexOf(e);t>=0&&(this._names.splice(t,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(e){return this._names.indexOf(e)>=0}};function _E(e,t){for(var r=Xp(e),a=-1,s=t.length;++a=0&&(r=t.slice(a+1),t=t.slice(0,a)),{type:t,name:r}})}function RL(e){return function(){var t=this.__on;if(t){for(var r=0,a=-1,s=t.length,o;r()=>e;function tp(e,{sourceEvent:t,subject:r,target:a,identifier:s,active:o,x:c,y:d,dx:h,dy:f,dispatch:m}){Object.defineProperties(this,{type:{value:e,enumerable:!0,configurable:!0},sourceEvent:{value:t,enumerable:!0,configurable:!0},subject:{value:r,enumerable:!0,configurable:!0},target:{value:a,enumerable:!0,configurable:!0},identifier:{value:s,enumerable:!0,configurable:!0},active:{value:o,enumerable:!0,configurable:!0},x:{value:c,enumerable:!0,configurable:!0},y:{value:d,enumerable:!0,configurable:!0},dx:{value:h,enumerable:!0,configurable:!0},dy:{value:f,enumerable:!0,configurable:!0},_:{value:m}})}tp.prototype.on=function(){var e=this._.on.apply(this._,arguments);return e===this._?this:e};function qL(e){return!e.ctrlKey&&!e.button}function PL(){return this.parentNode}function FL(e,t){return t??{x:e.x,y:e.y}}function GL(){return navigator.maxTouchPoints||"ontouchstart"in this}function CE(){var e=qL,t=PL,r=FL,a=GL,s={},o=Xu("start","drag","end"),c=0,d,h,f,m,g=0;function y(M){M.on("mousedown.drag",x).filter(a).on("touchstart.drag",S).on("touchmove.drag",w,$L).on("touchend.drag touchcancel.drag",k).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function x(M,B){if(!(m||!e.call(this,M,B))){var R=E(this,t.call(this,M,B),M,B,"mouse");R&&(ir(M.view).on("mousemove.drag",_,yo).on("mouseup.drag",N,yo),SE(M.view),bm(M),f=!1,d=M.clientX,h=M.clientY,R("start",M))}}function _(M){if(Fs(M),!f){var B=M.clientX-d,R=M.clientY-h;f=B*B+R*R>g}s.mouse("drag",M)}function N(M){ir(M.view).on("mousemove.drag mouseup.drag",null),kE(M.view,f),Fs(M),s.mouse("end",M)}function S(M,B){if(e.call(this,M,B)){var R=M.changedTouches,U=t.call(this,M,B),I=R.length,X,j;for(X=0;X>8&15|t>>4&240,t>>4&15|t&240,(t&15)<<4|t&15,1):r===8?au(t>>24&255,t>>16&255,t>>8&255,(t&255)/255):r===4?au(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|t&240,((t&15)<<4|t&15)/255):null):(t=YL.exec(e))?new Gn(t[1],t[2],t[3],1):(t=XL.exec(e))?new Gn(t[1]*255/100,t[2]*255/100,t[3]*255/100,1):(t=KL.exec(e))?au(t[1],t[2],t[3],t[4]):(t=ZL.exec(e))?au(t[1]*255/100,t[2]*255/100,t[3]*255/100,t[4]):(t=QL.exec(e))?Yv(t[1],t[2]/100,t[3]/100,1):(t=WL.exec(e))?Yv(t[1],t[2]/100,t[3]/100,t[4]):$v.hasOwnProperty(e)?Fv($v[e]):e==="transparent"?new Gn(NaN,NaN,NaN,0):null}function Fv(e){return new Gn(e>>16&255,e>>8&255,e&255,1)}function au(e,t,r,a){return a<=0&&(e=t=r=NaN),new Gn(e,t,r,a)}function t6(e){return e instanceof Lo||(e=Ya(e)),e?(e=e.rgb(),new Gn(e.r,e.g,e.b,e.opacity)):new Gn}function np(e,t,r,a){return arguments.length===1?t6(e):new Gn(e,t,r,a??1)}function Gn(e,t,r,a){this.r=+e,this.g=+t,this.b=+r,this.opacity=+a}Kp(Gn,np,TE(Lo,{brighter(e){return e=e==null?Cu:Math.pow(Cu,e),new Gn(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){return e=e==null?vo:Math.pow(vo,e),new Gn(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new Gn(Pa(this.r),Pa(this.g),Pa(this.b),Tu(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:Gv,formatHex:Gv,formatHex8:n6,formatRgb:Vv,toString:Vv}));function Gv(){return`#${$a(this.r)}${$a(this.g)}${$a(this.b)}`}function n6(){return`#${$a(this.r)}${$a(this.g)}${$a(this.b)}${$a((isNaN(this.opacity)?1:this.opacity)*255)}`}function Vv(){const e=Tu(this.opacity);return`${e===1?"rgb(":"rgba("}${Pa(this.r)}, ${Pa(this.g)}, ${Pa(this.b)}${e===1?")":`, ${e})`}`}function Tu(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function Pa(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function $a(e){return e=Pa(e),(e<16?"0":"")+e.toString(16)}function Yv(e,t,r,a){return a<=0?e=t=r=NaN:r<=0||r>=1?e=t=NaN:t<=0&&(e=NaN),new Ar(e,t,r,a)}function AE(e){if(e instanceof Ar)return new Ar(e.h,e.s,e.l,e.opacity);if(e instanceof Lo||(e=Ya(e)),!e)return new Ar;if(e instanceof Ar)return e;e=e.rgb();var t=e.r/255,r=e.g/255,a=e.b/255,s=Math.min(t,r,a),o=Math.max(t,r,a),c=NaN,d=o-s,h=(o+s)/2;return d?(t===o?c=(r-a)/d+(r0&&h<1?0:c,new Ar(c,d,h,e.opacity)}function r6(e,t,r,a){return arguments.length===1?AE(e):new Ar(e,t,r,a??1)}function Ar(e,t,r,a){this.h=+e,this.s=+t,this.l=+r,this.opacity=+a}Kp(Ar,r6,TE(Lo,{brighter(e){return e=e==null?Cu:Math.pow(Cu,e),new Ar(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=e==null?vo:Math.pow(vo,e),new Ar(this.h,this.s,this.l*e,this.opacity)},rgb(){var e=this.h%360+(this.h<0)*360,t=isNaN(e)||isNaN(this.s)?0:this.s,r=this.l,a=r+(r<.5?r:1-r)*t,s=2*r-a;return new Gn(xm(e>=240?e-240:e+120,s,a),xm(e,s,a),xm(e<120?e+240:e-120,s,a),this.opacity)},clamp(){return new Ar(Xv(this.h),su(this.s),su(this.l),Tu(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=Tu(this.opacity);return`${e===1?"hsl(":"hsla("}${Xv(this.h)}, ${su(this.s)*100}%, ${su(this.l)*100}%${e===1?")":`, ${e})`}`}}));function Xv(e){return e=(e||0)%360,e<0?e+360:e}function su(e){return Math.max(0,Math.min(1,e||0))}function xm(e,t,r){return(e<60?t+(r-t)*e/60:e<180?r:e<240?t+(r-t)*(240-e)/60:t)*255}const Zp=e=>()=>e;function i6(e,t){return function(r){return e+r*t}}function a6(e,t,r){return e=Math.pow(e,r),t=Math.pow(t,r)-e,r=1/r,function(a){return Math.pow(e+a*t,r)}}function s6(e){return(e=+e)==1?ME:function(t,r){return r-t?a6(t,r,e):Zp(isNaN(t)?r:t)}}function ME(e,t){var r=t-e;return r?i6(e,r):Zp(isNaN(e)?t:e)}const Au=(function e(t){var r=s6(t);function a(s,o){var c=r((s=np(s)).r,(o=np(o)).r),d=r(s.g,o.g),h=r(s.b,o.b),f=ME(s.opacity,o.opacity);return function(m){return s.r=c(m),s.g=d(m),s.b=h(m),s.opacity=f(m),s+""}}return a.gamma=e,a})(1);function l6(e,t){t||(t=[]);var r=e?Math.min(t.length,e.length):0,a=t.slice(),s;return function(o){for(s=0;sr&&(o=t.slice(r,o),d[c]?d[c]+=o:d[++c]=o),(a=a[0])===(s=s[0])?d[c]?d[c]+=s:d[++c]=s:(d[++c]=null,h.push({i:c,x:Vr(a,s)})),r=ym.lastIndex;return r180?m+=360:m-f>180&&(f+=360),y.push({i:g.push(s(g)+"rotate(",null,a)-2,x:Vr(f,m)})):m&&g.push(s(g)+"rotate("+m+a)}function d(f,m,g,y){f!==m?y.push({i:g.push(s(g)+"skewX(",null,a)-2,x:Vr(f,m)}):m&&g.push(s(g)+"skewX("+m+a)}function h(f,m,g,y,x,_){if(f!==g||m!==y){var N=x.push(s(x)+"scale(",null,",",null,")");_.push({i:N-4,x:Vr(f,g)},{i:N-2,x:Vr(m,y)})}else(g!==1||y!==1)&&x.push(s(x)+"scale("+g+","+y+")")}return function(f,m){var g=[],y=[];return f=e(f),m=e(m),o(f.translateX,f.translateY,m.translateX,m.translateY,g,y),c(f.rotate,m.rotate,g,y),d(f.skewX,m.skewX,g,y),h(f.scaleX,f.scaleY,m.scaleX,m.scaleY,g,y),f=m=null,function(x){for(var _=-1,N=y.length,S;++_=0&&e._call.call(void 0,t),e=e._next;--Zs}function Qv(){Xa=(Ou=wo.now())+Zu,Zs=so=0;try{w6()}finally{Zs=0,N6(),Xa=0}}function E6(){var e=wo.now(),t=e-Ou;t>DE&&(Zu-=t,Ou=e)}function N6(){for(var e,t=Mu,r,a=1/0;t;)t._call?(a>t._time&&(a=t._time),e=t,t=t._next):(r=t._next,t._next=null,t=e?e._next=r:Mu=r);lo=e,ap(a)}function ap(e){if(!Zs){so&&(so=clearTimeout(so));var t=e-Xa;t>24?(e<1/0&&(so=setTimeout(Qv,e-wo.now()-Zu)),to&&(to=clearInterval(to))):(to||(Ou=wo.now(),to=setInterval(E6,DE)),Zs=1,LE(Qv))}}function Wv(e,t,r){var a=new Ru;return t=t==null?0:+t,a.restart(s=>{a.stop(),e(s+t)},t,r),a}var S6=Xu("start","end","cancel","interrupt"),k6=[],IE=0,Jv=1,sp=2,xu=3,e1=4,lp=5,yu=6;function Qu(e,t,r,a,s,o){var c=e.__transition;if(!c)e.__transition={};else if(r in c)return;C6(e,r,{name:t,index:a,group:s,on:S6,tween:k6,time:o.time,delay:o.delay,duration:o.duration,ease:o.ease,timer:null,state:IE})}function Wp(e,t){var r=Ir(e,t);if(r.state>IE)throw new Error("too late; already scheduled");return r}function Zr(e,t){var r=Ir(e,t);if(r.state>xu)throw new Error("too late; already running");return r}function Ir(e,t){var r=e.__transition;if(!r||!(r=r[t]))throw new Error("transition not found");return r}function C6(e,t,r){var a=e.__transition,s;a[t]=r,r.timer=zE(o,0,r.time);function o(f){r.state=Jv,r.timer.restart(c,r.delay,r.time),r.delay<=f&&c(f-r.delay)}function c(f){var m,g,y,x;if(r.state!==Jv)return h();for(m in a)if(x=a[m],x.name===r.name){if(x.state===xu)return Wv(c);x.state===e1?(x.state=yu,x.timer.stop(),x.on.call("interrupt",e,e.__data__,x.index,x.group),delete a[m]):+msp&&a.state=0&&(t=t.slice(0,r)),!t||t==="start"})}function rz(e,t,r){var a,s,o=nz(t)?Wp:Zr;return function(){var c=o(this,e),d=c.on;d!==a&&(s=(a=d).copy()).on(t,r),c.on=s}}function iz(e,t){var r=this._id;return arguments.length<2?Ir(this.node(),r).on.on(e):this.each(rz(r,e,t))}function az(e){return function(){var t=this.parentNode;for(var r in this.__transition)if(+r!==e)return;t&&t.removeChild(this)}}function sz(){return this.on("end.remove",az(this._id))}function lz(e){var t=this._name,r=this._id;typeof e!="function"&&(e=Yp(e));for(var a=this._groups,s=a.length,o=new Array(s),c=0;c()=>e;function Rz(e,{sourceEvent:t,target:r,transform:a,dispatch:s}){Object.defineProperties(this,{type:{value:e,enumerable:!0,configurable:!0},sourceEvent:{value:t,enumerable:!0,configurable:!0},target:{value:r,enumerable:!0,configurable:!0},transform:{value:a,enumerable:!0,configurable:!0},_:{value:s}})}function vi(e,t,r){this.k=e,this.x=t,this.y=r}vi.prototype={constructor:vi,scale:function(e){return e===1?this:new vi(this.k*e,this.x,this.y)},translate:function(e,t){return e===0&t===0?this:new vi(this.k,this.x+this.k*e,this.y+this.k*t)},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 Wu=new vi(1,0,0);$E.prototype=vi.prototype;function $E(e){for(;!e.__zoom;)if(!(e=e.parentNode))return Wu;return e.__zoom}function vm(e){e.stopImmediatePropagation()}function no(e){e.preventDefault(),e.stopImmediatePropagation()}function jz(e){return(!e.ctrlKey||e.type==="wheel")&&!e.button}function Dz(){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 t1(){return this.__zoom||Wu}function Lz(e){return-e.deltaY*(e.deltaMode===1?.05:e.deltaMode?1:.002)*(e.ctrlKey?10:1)}function zz(){return navigator.maxTouchPoints||"ontouchstart"in this}function Iz(e,t,r){var a=e.invertX(t[0][0])-r[0][0],s=e.invertX(t[1][0])-r[1][0],o=e.invertY(t[0][1])-r[0][1],c=e.invertY(t[1][1])-r[1][1];return e.translate(s>a?(a+s)/2:Math.min(0,a)||Math.max(0,s),c>o?(o+c)/2:Math.min(0,o)||Math.max(0,c))}function qE(){var e=jz,t=Dz,r=Iz,a=Lz,s=zz,o=[0,1/0],c=[[-1/0,-1/0],[1/0,1/0]],d=250,h=bu,f=Xu("start","zoom","end"),m,g,y,x=500,_=150,N=0,S=10;function w(T){T.property("__zoom",t1).on("wheel.zoom",I,{passive:!1}).on("mousedown.zoom",X).on("dblclick.zoom",j).filter(s).on("touchstart.zoom",z).on("touchmove.zoom",V).on("touchend.zoom touchcancel.zoom",P).style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}w.transform=function(T,$,O,H){var K=T.selection?T.selection():T;K.property("__zoom",t1),T!==K?B(T,$,O,H):K.interrupt().each(function(){R(this,arguments).event(H).start().zoom(null,typeof $=="function"?$.apply(this,arguments):$).end()})},w.scaleBy=function(T,$,O,H){w.scaleTo(T,function(){var K=this.__zoom.k,Z=typeof $=="function"?$.apply(this,arguments):$;return K*Z},O,H)},w.scaleTo=function(T,$,O,H){w.transform(T,function(){var K=t.apply(this,arguments),Z=this.__zoom,C=O==null?M(K):typeof O=="function"?O.apply(this,arguments):O,D=Z.invert(C),Y=typeof $=="function"?$.apply(this,arguments):$;return r(E(k(Z,Y),C,D),K,c)},O,H)},w.translateBy=function(T,$,O,H){w.transform(T,function(){return r(this.__zoom.translate(typeof $=="function"?$.apply(this,arguments):$,typeof O=="function"?O.apply(this,arguments):O),t.apply(this,arguments),c)},null,H)},w.translateTo=function(T,$,O,H,K){w.transform(T,function(){var Z=t.apply(this,arguments),C=this.__zoom,D=H==null?M(Z):typeof H=="function"?H.apply(this,arguments):H;return r(Wu.translate(D[0],D[1]).scale(C.k).translate(typeof $=="function"?-$.apply(this,arguments):-$,typeof O=="function"?-O.apply(this,arguments):-O),Z,c)},H,K)};function k(T,$){return $=Math.max(o[0],Math.min(o[1],$)),$===T.k?T:new vi($,T.x,T.y)}function E(T,$,O){var H=$[0]-O[0]*T.k,K=$[1]-O[1]*T.k;return H===T.x&&K===T.y?T:new vi(T.k,H,K)}function M(T){return[(+T[0][0]+ +T[1][0])/2,(+T[0][1]+ +T[1][1])/2]}function B(T,$,O,H){T.on("start.zoom",function(){R(this,arguments).event(H).start()}).on("interrupt.zoom end.zoom",function(){R(this,arguments).event(H).end()}).tween("zoom",function(){var K=this,Z=arguments,C=R(K,Z).event(H),D=t.apply(K,Z),Y=O==null?M(D):typeof O=="function"?O.apply(K,Z):O,L=Math.max(D[1][0]-D[0][0],D[1][1]-D[0][1]),G=K.__zoom,q=typeof $=="function"?$.apply(K,Z):$,Q=h(G.invert(Y).concat(L/G.k),q.invert(Y).concat(L/q.k));return function(J){if(J===1)J=q;else{var W=Q(J),te=L/W[2];J=new vi(te,Y[0]-W[0]*te,Y[1]-W[1]*te)}C.zoom(null,J)}})}function R(T,$,O){return!O&&T.__zooming||new U(T,$)}function U(T,$){this.that=T,this.args=$,this.active=0,this.sourceEvent=null,this.extent=t.apply(T,$),this.taps=0}U.prototype={event:function(T){return T&&(this.sourceEvent=T),this},start:function(){return++this.active===1&&(this.that.__zooming=this,this.emit("start")),this},zoom:function(T,$){return this.mouse&&T!=="mouse"&&(this.mouse[1]=$.invert(this.mouse[0])),this.touch0&&T!=="touch"&&(this.touch0[1]=$.invert(this.touch0[0])),this.touch1&&T!=="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(T){var $=ir(this.that).datum();f.call(T,this.that,new Rz(T,{sourceEvent:this.sourceEvent,target:w,transform:this.that.__zoom,dispatch:f}),$)}};function I(T,...$){if(!e.apply(this,arguments))return;var O=R(this,$).event(T),H=this.__zoom,K=Math.max(o[0],Math.min(o[1],H.k*Math.pow(2,a.apply(this,arguments)))),Z=Cr(T);if(O.wheel)(O.mouse[0][0]!==Z[0]||O.mouse[0][1]!==Z[1])&&(O.mouse[1]=H.invert(O.mouse[0]=Z)),clearTimeout(O.wheel);else{if(H.k===K)return;O.mouse=[Z,H.invert(Z)],vu(this),O.start()}no(T),O.wheel=setTimeout(C,_),O.zoom("mouse",r(E(k(H,K),O.mouse[0],O.mouse[1]),O.extent,c));function C(){O.wheel=null,O.end()}}function X(T,...$){if(y||!e.apply(this,arguments))return;var O=T.currentTarget,H=R(this,$,!0).event(T),K=ir(T.view).on("mousemove.zoom",Y,!0).on("mouseup.zoom",L,!0),Z=Cr(T,O),C=T.clientX,D=T.clientY;SE(T.view),vm(T),H.mouse=[Z,this.__zoom.invert(Z)],vu(this),H.start();function Y(G){if(no(G),!H.moved){var q=G.clientX-C,Q=G.clientY-D;H.moved=q*q+Q*Q>N}H.event(G).zoom("mouse",r(E(H.that.__zoom,H.mouse[0]=Cr(G,O),H.mouse[1]),H.extent,c))}function L(G){K.on("mousemove.zoom mouseup.zoom",null),kE(G.view,H.moved),no(G),H.event(G).end()}}function j(T,...$){if(e.apply(this,arguments)){var O=this.__zoom,H=Cr(T.changedTouches?T.changedTouches[0]:T,this),K=O.invert(H),Z=O.k*(T.shiftKey?.5:2),C=r(E(k(O,Z),H,K),t.apply(this,$),c);no(T),d>0?ir(this).transition().duration(d).call(B,C,H,T):ir(this).call(w.transform,C,H,T)}}function z(T,...$){if(e.apply(this,arguments)){var O=T.touches,H=O.length,K=R(this,$,T.changedTouches.length===H).event(T),Z,C,D,Y;for(vm(T),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:t,sourceHandle:r,targetHandle:a})=>`Couldn't create edge for ${e} handle id: "${e==="source"?r:a}", edge id: ${t}.`,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.`},Eo=[[Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY],[Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY]],PE=["Enter"," ","Escape"],FE={"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:t,y:r})=>`Moved selected node ${e}. New position, x: ${t}, y: ${r}`,"edge.a11yDescription.default":"Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.","controls.ariaLabel":"Control Panel","controls.zoomIn.ariaLabel":"Zoom In","controls.zoomOut.ariaLabel":"Zoom Out","controls.fitView.ariaLabel":"Fit View","controls.interactive.ariaLabel":"Toggle Interactivity","minimap.ariaLabel":"Mini Map","handle.ariaLabel":"Handle"};var Qs;(function(e){e.Strict="strict",e.Loose="loose"})(Qs||(Qs={}));var Fa;(function(e){e.Free="free",e.Vertical="vertical",e.Horizontal="horizontal"})(Fa||(Fa={}));var No;(function(e){e.Partial="partial",e.Full="full"})(No||(No={}));const GE={inProgress:!1,isValid:null,from:null,fromHandle:null,fromPosition:null,fromNode:null,to:null,toHandle:null,toPosition:null,toNode:null,pointer:null};var ca;(function(e){e.Bezier="default",e.Straight="straight",e.Step="step",e.SmoothStep="smoothstep",e.SimpleBezier="simplebezier"})(ca||(ca={}));var ju;(function(e){e.Arrow="arrow",e.ArrowClosed="arrowclosed"})(ju||(ju={}));var ze;(function(e){e.Left="left",e.Top="top",e.Right="right",e.Bottom="bottom"})(ze||(ze={}));const n1={[ze.Left]:ze.Right,[ze.Right]:ze.Left,[ze.Top]:ze.Bottom,[ze.Bottom]:ze.Top};function VE(e){return e===null?null:e?"valid":"invalid"}const YE=e=>!!e&&typeof e=="object"&&"id"in e&&"source"in e&&"target"in e,Bz=e=>!!e&&typeof e=="object"&&"id"in e&&"position"in e&&!("source"in e)&&!("target"in e),eg=e=>!!e&&typeof e=="object"&&"id"in e&&"internals"in e&&!("source"in e)&&!("target"in e),zo=(e,t=[0,0])=>{const{width:r,height:a}=Qr(e),s=e.origin??t,o=r*s[0],c=a*s[1];return{x:e.position.x-o,y:e.position.y-c}},Uz=(e,t={nodeOrigin:[0,0]})=>{if(e.length===0)return{x:0,y:0,width:0,height:0};const r=e.reduce((a,s)=>{const o=typeof s=="string";let c=!t.nodeLookup&&!o?s:void 0;t.nodeLookup&&(c=o?t.nodeLookup.get(s):eg(s)?s:t.nodeLookup.get(s.id));const d=c?Du(c,t.nodeOrigin):{x:0,y:0,x2:0,y2:0};return Ju(a,d)},{x:1/0,y:1/0,x2:-1/0,y2:-1/0});return ed(r)},Io=(e,t={})=>{let r={x:1/0,y:1/0,x2:-1/0,y2:-1/0},a=!1;return e.forEach(s=>{(t.filter===void 0||t.filter(s))&&(r=Ju(r,Du(s)),a=!0)}),a?ed(r):{x:0,y:0,width:0,height:0}},tg=(e,t,[r,a,s]=[0,0,1],o=!1,c=!1)=>{const d=(t.x-r)/s,h=(t.y-a)/s,f=t.width/s,m=t.height/s,g=[];for(const y of e.values()){const{measured:x,selectable:_=!0,hidden:N=!1}=y;if(c&&!_||N)continue;const S=x.width??y.width??y.initialWidth??0,w=x.height??y.height??y.initialHeight??0,{x:k,y:E}=y.internals.positionAbsolute,M=QE(d,h,f,m,k,E,S,w),B=S*w,R=o&&M>0;(!y.internals.handleBounds||R||M>=B||y.dragging)&&g.push(y)}return g},Hz=(e,t)=>{const r=new Set;return e.forEach(a=>{r.add(a.id)}),t.filter(a=>r.has(a.source)||r.has(a.target))};function $z(e,t){const r=new Map,a=t!=null&&t.nodes?new Set(t.nodes.map(s=>s.id)):null;return e.forEach(s=>{let o;if(t!=null&&t.includeHiddenNodes){const{width:c,height:d}=Qr(s);o=c>0&&d>0}else o=!!(s.measured.width&&s.measured.height&&!s.hidden);o&&(!a||a.has(s.id))&&r.set(s.id,s)}),r}async function qz({nodes:e,width:t,height:r,panZoom:a,minZoom:s,maxZoom:o},c){if(e.size===0)return!0;const d=$z(e,c),h=Io(d),f=rg(h,t,r,(c==null?void 0:c.minZoom)??s,(c==null?void 0:c.maxZoom)??o,(c==null?void 0:c.padding)??.1);return await a.setViewport(f,{duration:c==null?void 0:c.duration,ease:c==null?void 0:c.ease,interpolate:c==null?void 0:c.interpolate}),!0}function XE({nodeId:e,nextPosition:t,nodeLookup:r,nodeOrigin:a=[0,0],nodeExtent:s,onError:o}){const c=r.get(e),d=c.parentId?r.get(c.parentId):void 0,{x:h,y:f}=d?d.internals.positionAbsolute:{x:0,y:0},m=c.origin??a;let g=c.extent||s;if(c.extent==="parent"&&!c.expandParent)if(!d)o==null||o("005",Lr.error005());else{const x=d.measured.width,_=d.measured.height;x&&_&&(g=[[h,f],[h+x,f+_]])}else d&&Za(c.extent)&&(g=[[c.extent[0][0]+h,c.extent[0][1]+f],[c.extent[1][0]+h,c.extent[1][1]+f]]);const y=Za(g)?Ka(t,g,c.measured):t;return(c.measured.width===void 0||c.measured.height===void 0)&&(o==null||o("015",Lr.error015())),{position:{x:y.x-h+(c.measured.width??0)*m[0],y:y.y-f+(c.measured.height??0)*m[1]},positionAbsolute:y}}async function Pz({nodesToRemove:e=[],edgesToRemove:t=[],nodes:r,edges:a,onBeforeDelete:s}){const o=new Set(e.map(y=>y.id)),c=[];for(const y of r){if(y.deletable===!1)continue;const x=o.has(y.id),_=!x&&y.parentId&&c.find(N=>N.id===y.parentId);(x||_)&&c.push(y)}const d=new Set(t.map(y=>y.id)),h=a.filter(y=>y.deletable!==!1),m=Hz(c,h);for(const y of h)d.has(y.id)&&!m.find(_=>_.id===y.id)&&m.push(y);if(!s)return{edges:m,nodes:c};const g=await s({nodes:c,edges:m});return typeof g=="boolean"?g?{edges:m,nodes:c}:{edges:[],nodes:[]}:g}const Ws=(e,t=0,r=1)=>Math.min(Math.max(e,t),r),Ka=(e={x:0,y:0},t,r)=>({x:Ws(e.x,t[0][0],t[1][0]-((r==null?void 0:r.width)??0)),y:Ws(e.y,t[0][1],t[1][1]-((r==null?void 0:r.height)??0))});function KE(e,t,r){const{width:a,height:s}=Qr(r),{x:o,y:c}=r.internals.positionAbsolute;return Ka(e,[[o,c],[o+a,c+s]],t)}const r1=(e,t,r)=>er?-Ws(Math.abs(e-r),1,t)/t:0,ng=(e,t,r=15,a=40)=>{const s=r1(e.x,a,t.width-a)*r,o=r1(e.y,a,t.height-a)*r;return[s,o]},Ju=(e,t)=>({x:Math.min(e.x,t.x),y:Math.min(e.y,t.y),x2:Math.max(e.x2,t.x2),y2:Math.max(e.y2,t.y2)}),op=({x:e,y:t,width:r,height:a})=>({x:e,y:t,x2:e+r,y2:t+a}),ed=({x:e,y:t,x2:r,y2:a})=>({x:e,y:t,width:r-e,height:a-t}),So=(e,t=[0,0])=>{var s,o;const{x:r,y:a}=eg(e)?e.internals.positionAbsolute:zo(e,t);return{x:r,y:a,width:((s=e.measured)==null?void 0:s.width)??e.width??e.initialWidth??0,height:((o=e.measured)==null?void 0:o.height)??e.height??e.initialHeight??0}},Du=(e,t=[0,0])=>{var s,o;const{x:r,y:a}=eg(e)?e.internals.positionAbsolute:zo(e,t);return{x:r,y:a,x2:r+(((s=e.measured)==null?void 0:s.width)??e.width??e.initialWidth??0),y2:a+(((o=e.measured)==null?void 0:o.height)??e.height??e.initialHeight??0)}},ZE=(e,t)=>ed(Ju(op(e),op(t))),QE=(e,t,r,a,s,o,c,d)=>{const h=Math.max(0,Math.min(e+r,s+c)-Math.max(e,s)),f=Math.max(0,Math.min(t+a,o+d)-Math.max(t,o));return Math.ceil(h*f)},Lu=(e,t)=>QE(e.x,e.y,e.width,e.height,t.x,t.y,t.width,t.height),i1=e=>Or(e.width)&&Or(e.height)&&Or(e.x)&&Or(e.y),Or=e=>!isNaN(e)&&isFinite(e),WE=(e,t)=>(r,a)=>{},Bo=(e,t=[1,1])=>({x:t[0]*Math.round(e.x/t[0]),y:t[1]*Math.round(e.y/t[1])}),Uo=({x:e,y:t},[r,a,s],o=!1,c=[1,1])=>{const d={x:(e-r)/s,y:(t-a)/s};return o?Bo(d,c):d},Js=({x:e,y:t},[r,a,s])=>({x:e*s+r,y:t*s+a});function Is(e,t){if(typeof e=="number")return Math.floor((t-t/(1+e))*.5);if(typeof e=="string"&&e.endsWith("px")){const r=parseFloat(e);if(!Number.isNaN(r))return Math.floor(r)}if(typeof e=="string"&&e.endsWith("%")){const r=parseFloat(e);if(!Number.isNaN(r))return Math.floor(t*r*.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 Fz(e,t,r){if(typeof e=="string"||typeof e=="number"){const a=Is(e,r),s=Is(e,t);return{top:a,right:s,bottom:a,left:s,x:s*2,y:a*2}}if(typeof e=="object"){const a=Is(e.top??e.y??0,r),s=Is(e.bottom??e.y??0,r),o=Is(e.left??e.x??0,t),c=Is(e.right??e.x??0,t);return{top:a,right:c,bottom:s,left:o,x:o+c,y:a+s}}return{top:0,right:0,bottom:0,left:0,x:0,y:0}}function Gz(e,t,r,a,s,o){const{x:c,y:d}=Js(e,[t,r,a]),{x:h,y:f}=Js({x:e.x+e.width,y:e.y+e.height},[t,r,a]),m=s-h,g=o-f;return{left:Math.floor(c),top:Math.floor(d),right:Math.floor(m),bottom:Math.floor(g)}}const rg=(e,t,r,a,s,o)=>{const c=Fz(o,t,r),d=(t-c.x)/e.width,h=(r-c.y)/e.height,f=Math.min(d,h),m=Ws(f,a,s),g=e.x+e.width/2,y=e.y+e.height/2,x=t/2-g*m,_=r/2-y*m,N=Gz(e,x,_,m,t,r),S={left:Math.min(N.left-c.left,0),top:Math.min(N.top-c.top,0),right:Math.min(N.right-c.right,0),bottom:Math.min(N.bottom-c.bottom,0)};return{x:x-S.left+S.right,y:_-S.top+S.bottom,zoom:m}},ko=()=>{var e;return typeof navigator<"u"&&((e=navigator==null?void 0:navigator.userAgent)==null?void 0:e.indexOf("Mac"))>=0};function Za(e){return e!=null&&e!=="parent"}function Qr(e){var t,r;return{width:((t=e.measured)==null?void 0:t.width)??e.width??e.initialWidth??0,height:((r=e.measured)==null?void 0:r.height)??e.height??e.initialHeight??0}}function JE(e){var t,r;return(((t=e.measured)==null?void 0:t.width)??e.width??e.initialWidth)!==void 0&&(((r=e.measured)==null?void 0:r.height)??e.height??e.initialHeight)!==void 0}function eN(e,t={width:0,height:0},r,a,s){const o={...e},c=a.get(r);if(c){const d=c.origin||s;o.x+=c.internals.positionAbsolute.x-(t.width??0)*d[0],o.y+=c.internals.positionAbsolute.y-(t.height??0)*d[1]}return o}function a1(e,t){if(e.size!==t.size)return!1;for(const r of e)if(!t.has(r))return!1;return!0}function Vz(){let e,t;return{promise:new Promise((a,s)=>{e=a,t=s}),resolve:e,reject:t}}function Yz(e){return{...FE,...e||{}}}function ho(e,{snapGrid:t=[0,0],snapToGrid:r=!1,transform:a,containerBounds:s}){const{x:o,y:c}=Rr(e),d=Uo({x:o-((s==null?void 0:s.left)??0),y:c-((s==null?void 0:s.top)??0)},a),{x:h,y:f}=r?Bo(d,t):d;return{xSnapped:h,ySnapped:f,...d}}const ig=e=>({width:e.offsetWidth,height:e.offsetHeight}),tN=e=>{var t;return((t=e==null?void 0:e.getRootNode)==null?void 0:t.call(e))||(window==null?void 0:window.document)},Xz=["INPUT","SELECT","TEXTAREA"];function nN(e){var a,s;const t=((s=(a=e.composedPath)==null?void 0:a.call(e))==null?void 0:s[0])||e.target;return(t==null?void 0:t.nodeType)!==1?!1:Xz.includes(t.nodeName)||t.hasAttribute("contenteditable")||!!t.closest(".nokey")}const rN=e=>"clientX"in e,Rr=(e,t)=>{var o,c;const r=rN(e),a=r?e.clientX:(o=e.touches)==null?void 0:o[0].clientX,s=r?e.clientY:(c=e.touches)==null?void 0:c[0].clientY;return{x:a-((t==null?void 0:t.left)??0),y:s-((t==null?void 0:t.top)??0)}},s1=(e,t,r,a,s)=>{const o=t.querySelectorAll(`.${e}`);return!o||!o.length?null:Array.from(o).map(c=>{const d=c.getBoundingClientRect();return{id:c.getAttribute("data-handleid"),type:e,nodeId:s,position:c.getAttribute("data-handlepos"),x:(d.left-r.left)/a,y:(d.top-r.top)/a,...ig(c)}})};function iN({sourceX:e,sourceY:t,targetX:r,targetY:a,sourceControlX:s,sourceControlY:o,targetControlX:c,targetControlY:d}){const h=e*.125+s*.375+c*.375+r*.125,f=t*.125+o*.375+d*.375+a*.125,m=Math.abs(h-e),g=Math.abs(f-t);return[h,f,m,g]}function cu(e,t){return e>=0?.5*e:t*25*Math.sqrt(-e)}function l1({pos:e,x1:t,y1:r,x2:a,y2:s,c:o}){switch(e){case ze.Left:return[t-cu(t-a,o),r];case ze.Right:return[t+cu(a-t,o),r];case ze.Top:return[t,r-cu(r-s,o)];case ze.Bottom:return[t,r+cu(s-r,o)]}}function aN({sourceX:e,sourceY:t,sourcePosition:r=ze.Bottom,targetX:a,targetY:s,targetPosition:o=ze.Top,curvature:c=.25}){const[d,h]=l1({pos:r,x1:e,y1:t,x2:a,y2:s,c}),[f,m]=l1({pos:o,x1:a,y1:s,x2:e,y2:t,c}),[g,y,x,_]=iN({sourceX:e,sourceY:t,targetX:a,targetY:s,sourceControlX:d,sourceControlY:h,targetControlX:f,targetControlY:m});return[`M${e},${t} C${d},${h} ${f},${m} ${a},${s}`,g,y,x,_]}function sN({sourceX:e,sourceY:t,targetX:r,targetY:a}){const s=Math.abs(r-e)/2,o=r0}const Qz=({source:e,sourceHandle:t,target:r,targetHandle:a})=>`xy-edge__${e}${t||""}-${r}${a||""}`,Wz=(e,t)=>t.some(r=>r.source===e.source&&r.target===e.target&&(r.sourceHandle===e.sourceHandle||!r.sourceHandle&&!e.sourceHandle)&&(r.targetHandle===e.targetHandle||!r.targetHandle&&!e.targetHandle)),Jz=(e,t,r={})=>{var o;if(!e.source||!e.target)return(o=r.onError)==null||o.call(r,"006",Lr.error006()),t;const a=r.getEdgeId||Qz;let s;return YE(e)?s={...e}:s={...e,id:a(e)},Wz(s,t)?t:(s.sourceHandle===null&&delete s.sourceHandle,s.targetHandle===null&&delete s.targetHandle,t.concat(s))};function lN({sourceX:e,sourceY:t,targetX:r,targetY:a}){const[s,o,c,d]=sN({sourceX:e,sourceY:t,targetX:r,targetY:a});return[`M ${e},${t}L ${r},${a}`,s,o,c,d]}const o1={[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:t=ze.Bottom,target:r})=>t===ze.Left||t===ze.Right?e.xMath.sqrt(Math.pow(t.x-e.x,2)+Math.pow(t.y-e.y,2));function tI({source:e,sourcePosition:t=ze.Bottom,target:r,targetPosition:a=ze.Top,center:s,offset:o,stepPosition:c}){const d=o1[t],h=o1[a],f={x:e.x+d.x*o,y:e.y+d.y*o},m={x:r.x+h.x*o,y:r.y+h.y*o},g=eI({source:f,sourcePosition:t,target:m}),y=g.x!==0?"x":"y",x=g[y];let _=[],N,S;const w={x:0,y:0},k={x:0,y:0},[,,E,M]=sN({sourceX:e.x,sourceY:e.y,targetX:r.x,targetY:r.y});if(d[y]*h[y]===-1){y==="x"?(N=s.x??f.x+(m.x-f.x)*c,S=s.y??(f.y+m.y)/2):(N=s.x??(f.x+m.x)/2,S=s.y??f.y+(m.y-f.y)*c);const I=[{x:N,y:f.y},{x:N,y:m.y}],X=[{x:f.x,y:S},{x:m.x,y:S}];d[y]===x?_=y==="x"?I:X:_=y==="x"?X:I}else{const I=[{x:f.x,y:m.y}],X=[{x:m.x,y:f.y}];if(y==="x"?_=d.x===x?X:I:_=d.y===x?I:X,t===a){const T=Math.abs(e[y]-r[y]);if(T<=o){const $=Math.min(o-1,o-T);d[y]===x?w[y]=(f[y]>e[y]?-1:1)*$:k[y]=(m[y]>r[y]?-1:1)*$}}if(t!==a){const T=y==="x"?"y":"x",$=d[y]===h[T],O=f[T]>m[T],H=f[T]=P?(N=(j.x+z.x)/2,S=_[0].y):(N=_[0].x,S=(j.y+z.y)/2)}const B={x:f.x+w.x,y:f.y+w.y},R={x:m.x+k.x,y:m.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]:[],r],N,S,E,M]}function nI(e,t,r,a){const s=Math.min(c1(e,t)/2,c1(t,r)/2,a),{x:o,y:c}=t;if(e.x===o&&o===r.x||e.y===c&&c===r.y)return`L${o} ${c}`;if(e.y===c){const f=e.xr.id===t):e[0])||null}function up(e,t){return e?typeof e=="string"?e:`${t?`${t}__`:""}${Object.keys(e).sort().map(a=>`${a}=${e[a]}`).join("&")}`:""}function iI(e,{id:t,defaultColor:r,defaultMarkerStart:a,defaultMarkerEnd:s}){const o=new Set;return e.reduce((c,d)=>([d.markerStart||a,d.markerEnd||s].forEach(h=>{if(h&&typeof h=="object"){const f=up(h,t);o.has(f)||(c.push({id:f,color:h.color||r,...h}),o.add(f))}}),c),[]).sort((c,d)=>c.id.localeCompare(d.id))}const oN=1e3,aI=10,ag={nodeOrigin:[0,0],nodeExtent:Eo,elevateNodesOnSelect:!0,zIndexMode:"basic",defaults:{}},sI={...ag,checkEquality:!0};function sg(e,t){const r={...e};for(const a in t)t[a]!==void 0&&(r[a]=t[a]);return r}function lI(e,t,r){const a=sg(ag,r);for(const s of e.values())if(s.parentId)og(s,e,t,a);else{const o=zo(s,a.nodeOrigin),c=Za(s.extent)?s.extent:a.nodeExtent,d=Ka(o,c,Qr(s));s.internals.positionAbsolute=d}}function oI(e,t){if(!e.handles)return e.measured?t==null?void 0:t.internals.handleBounds:void 0;const r=[],a=[];for(const s of e.handles){const o={id:s.id,width:s.width??1,height:s.height??1,nodeId:e.id,x:s.x,y:s.y,position:s.position,type:s.type};s.type==="source"?r.push(o):s.type==="target"&&a.push(o)}return{source:r,target:a}}function lg(e){return e==="manual"}function dp(e,t,r,a={}){var m,g;const s=sg(sI,a),o={i:0},c=new Map(t),d=s!=null&&s.elevateNodesOnSelect&&!lg(s.zIndexMode)?oN:0;let h=e.length>0,f=!1;t.clear(),r.clear();for(const y of e){let x=c.get(y.id);if(s.checkEquality&&y===(x==null?void 0:x.internals.userNode))t.set(y.id,x);else{const _=zo(y,s.nodeOrigin),N=Za(y.extent)?y.extent:s.nodeExtent,S=Ka(_,N,Qr(y));x={...s.defaults,...y,measured:{width:(m=y.measured)==null?void 0:m.width,height:(g=y.measured)==null?void 0:g.height},internals:{positionAbsolute:S,handleBounds:oI(y,x),z:cN(y,d,s.zIndexMode),userNode:y}},t.set(y.id,x)}(x.measured===void 0||x.measured.width===void 0||x.measured.height===void 0)&&!x.hidden&&(h=!1),y.parentId&&og(x,t,r,a,o),f||(f=y.selected??!1)}return{nodesInitialized:h,hasSelectedNodes:f}}function cI(e,t){if(!e.parentId)return;const r=t.get(e.parentId);r?r.set(e.id,e):t.set(e.parentId,new Map([[e.id,e]]))}function og(e,t,r,a,s){const{elevateNodesOnSelect:o,nodeOrigin:c,nodeExtent:d,zIndexMode:h}=sg(ag,a),f=e.parentId,m=t.get(f);if(!m){console.warn(`Parent node ${f} not found. Please make sure that parent nodes are in front of their child nodes in the nodes array.`);return}cI(e,r),s&&!m.parentId&&m.internals.rootParentIndex===void 0&&h==="auto"&&(m.internals.rootParentIndex=++s.i,m.internals.z=m.internals.z+s.i*aI),s&&m.internals.rootParentIndex!==void 0&&(s.i=m.internals.rootParentIndex);const g=o&&!lg(h)?oN:0,{x:y,y:x,z:_}=uI(e,m,c,d,g,h),{positionAbsolute:N}=e.internals,S=y!==N.x||x!==N.y;(S||_!==e.internals.z)&&t.set(e.id,{...e,internals:{...e.internals,positionAbsolute:S?{x:y,y:x}:N,z:_}})}function cN(e,t,r){const a=Or(e.zIndex)?e.zIndex:0;return lg(r)?a:a+(e.selected?t:0)}function uI(e,t,r,a,s,o){const{x:c,y:d}=t.internals.positionAbsolute,h=Qr(e),f=zo(e,r),m=Za(e.extent)?Ka(f,e.extent,h):f;let g=Ka({x:c+m.x,y:d+m.y},a,h);e.extent==="parent"&&(g=KE(g,h,t));const y=cN(e,s,o),x=t.internals.z??0;return{x:g.x,y:g.y,z:x>=y?x+1:y}}function cg(e,t,r,a=[0,0]){var c;const s=[],o=new Map;for(const d of e){const h=t.get(d.parentId);if(!h)continue;const f=((c=o.get(d.parentId))==null?void 0:c.expandedRect)??So(h),m=ZE(f,d.rect);o.set(d.parentId,{expandedRect:m,parent:h})}return o.size>0&&o.forEach(({expandedRect:d,parent:h},f)=>{var E;const m=h.internals.positionAbsolute,g=Qr(h),y=h.origin??a,x=d.x0||_>0||w||k)&&(s.push({id:f,type:"position",position:{x:h.position.x-x+w,y:h.position.y-_+k}}),(E=r.get(f))==null||E.forEach(M=>{e.some(B=>B.id===M.id)||s.push({id:M.id,type:"position",position:{x:M.position.x+x,y:M.position.y+_}})})),(g.width0){const x=cg(y,t,r,s);f.push(...x)}return{changes:f,updatedInternals:h}}async function fI({delta:e,panZoom:t,transform:r,translateExtent:a,width:s,height:o}){if(!t||!e.x&&!e.y)return!1;const c=await t.setViewportConstrained({x:r[0]+e.x,y:r[1]+e.y,zoom:r[2]},[[0,0],[s,o]],a);return!!c&&(c.x!==r[0]||c.y!==r[1]||c.k!==r[2])}function h1(e,t,r,a,s,o){let c=s;const d=a.get(c)||new Map;a.set(c,d.set(r,t)),c=`${s}-${e}`;const h=a.get(c)||new Map;if(a.set(c,h.set(r,t)),o){c=`${s}-${e}-${o}`;const f=a.get(c)||new Map;a.set(c,f.set(r,t))}}function uN(e,t,r){e.clear(),t.clear();for(const a of r){const{source:s,target:o,sourceHandle:c=null,targetHandle:d=null}=a,h={edgeId:a.id,source:s,target:o,sourceHandle:c,targetHandle:d},f=`${s}-${c}--${o}-${d}`,m=`${o}-${d}--${s}-${c}`;h1("source",h,m,e,s,c),h1("target",h,f,e,o,d),t.set(a.id,a)}}function dN(e,t){if(!e.parentId)return!1;const r=t.get(e.parentId);return r?r.selected?!0:dN(r,t):!1}function m1(e,t,r){var s;let a=e;do{if((s=a==null?void 0:a.matches)!=null&&s.call(a,t))return!0;if(a===r)return!1;a=a==null?void 0:a.parentElement}while(a);return!1}function hI(e,t,r,a){const s=new Map;for(const[o,c]of e)if((c.selected||c.id===a)&&(!c.parentId||!dN(c,e))&&(c.draggable||t&&typeof c.draggable>"u")){const d=e.get(o);d&&s.set(o,{id:o,position:d.position||{x:0,y:0},distance:{x:r.x-d.internals.positionAbsolute.x,y:r.y-d.internals.positionAbsolute.y},extent:d.extent,parentId:d.parentId,origin:d.origin,expandParent:d.expandParent,internals:{positionAbsolute:d.internals.positionAbsolute||{x:0,y:0}},measured:{width:d.measured.width??0,height:d.measured.height??0}})}return s}function _m({nodeId:e,dragItems:t,nodeLookup:r,dragging:a=!0}){var c,d,h;const s=[];for(const[f,m]of t){const g=(c=r.get(f))==null?void 0:c.internals.userNode;g&&s.push({...g,position:m.position,dragging:a})}if(!e)return[s[0],s];const o=(d=r.get(e))==null?void 0:d.internals.userNode;return[o?{...o,position:((h=t.get(e))==null?void 0:h.position)||o.position,dragging:a}:s[0],s]}function mI({dragItems:e,snapGrid:t,x:r,y:a}){const s=e.values().next().value;if(!s)return null;const o={x:r-s.distance.x,y:a-s.distance.y},c=Bo(o,t);return{x:c.x-o.x,y:c.y-o.y}}function pI({onNodeMouseDown:e,getStoreItems:t,onDragStart:r,onDrag:a,onDragStop:s}){let o={x:null,y:null},c=0,d=new Map,h=!1,f={x:0,y:0},m=null,g=!1,y=null,x=!1,_=!1,N=null;function S({noDragClassName:k,handleSelector:E,domNode:M,isSelectable:B,nodeId:R,nodeClickDistance:U=0}){y=ir(M);function I({x:V,y:P}){const{nodeLookup:T,nodeExtent:$,snapGrid:O,snapToGrid:H,nodeOrigin:K,onNodeDrag:Z,onSelectionDrag:C,onError:D,updateNodePositions:Y}=t();o={x:V,y:P};let L=!1;const G=d.size>1,q=G&&$?op(Io(d)):null,Q=G&&H?mI({dragItems:d,snapGrid:O,x:V,y:P}):null;for(const[J,W]of d){if(!T.has(J))continue;let te={x:V-W.distance.x,y:P-W.distance.y};H&&(te=Q?{x:Math.round(te.x+Q.x),y:Math.round(te.y+Q.y)}:Bo(te,O));let ce=null;if(G&&$&&!W.extent&&q){const{positionAbsolute:we}=W.internals,Ne=we.x-q.x+$[0][0],De=we.x+W.measured.width-q.x2+$[1][0],$e=we.y-q.y+$[0][1],st=we.y+W.measured.height-q.y2+$[1][1];ce=[[Ne,$e],[De,st]]}const{position:fe,positionAbsolute:be}=XE({nodeId:J,nextPosition:te,nodeLookup:T,nodeExtent:ce||$,nodeOrigin:K,onError:D});L=L||W.position.x!==fe.x||W.position.y!==fe.y,W.position=fe,W.internals.positionAbsolute=be}if(_=_||L,!!L&&(Y(d,!0),N&&(a||Z||!R&&C))){const[J,W]=_m({nodeId:R,dragItems:d,nodeLookup:T});a==null||a(N,d,J,W),Z==null||Z(N,J,W),R||C==null||C(N,W)}}async function X(){if(!m)return;const{transform:V,panBy:P,autoPanSpeed:T,autoPanOnNodeDrag:$}=t();if(!$){h=!1,cancelAnimationFrame(c);return}const[O,H]=ng(f,m,T);(O!==0||H!==0)&&(o.x=(o.x??0)-O/V[2],o.y=(o.y??0)-H/V[2],await P({x:O,y:H})&&I(o)),c=requestAnimationFrame(X)}function j(V){var G;const{nodeLookup:P,multiSelectionActive:T,nodesDraggable:$,transform:O,snapGrid:H,snapToGrid:K,selectNodesOnDrag:Z,onNodeDragStart:C,onSelectionDragStart:D,unselectNodesAndEdges:Y}=t();g=!0,(!Z||!B)&&!T&&R&&((G=P.get(R))!=null&&G.selected||Y()),B&&Z&&R&&(e==null||e(R));const L=ho(V.sourceEvent,{transform:O,snapGrid:H,snapToGrid:K,containerBounds:m});if(o=L,d=hI(P,$,L,R),d.size>0&&(r||C||!R&&D)){const[q,Q]=_m({nodeId:R,dragItems:d,nodeLookup:P});r==null||r(V.sourceEvent,d,q,Q),C==null||C(V.sourceEvent,q,Q),R||D==null||D(V.sourceEvent,Q)}}const z=CE().clickDistance(U).on("start",V=>{const{domNode:P,nodeDragThreshold:T,transform:$,snapGrid:O,snapToGrid:H}=t();m=(P==null?void 0:P.getBoundingClientRect())||null,x=!1,_=!1,N=V.sourceEvent,T===0&&j(V),o=ho(V.sourceEvent,{transform:$,snapGrid:O,snapToGrid:H,containerBounds:m}),f=Rr(V.sourceEvent,m)}).on("drag",V=>{const{autoPanOnNodeDrag:P,transform:T,snapGrid:$,snapToGrid:O,nodeDragThreshold:H,nodeLookup:K}=t(),Z=ho(V.sourceEvent,{transform:T,snapGrid:$,snapToGrid:O,containerBounds:m});if(N=V.sourceEvent,(V.sourceEvent.type==="touchmove"&&V.sourceEvent.touches.length>1||R&&!K.has(R))&&(x=!0),!x){if(!h&&P&&g&&(h=!0,X()),!g){const C=Rr(V.sourceEvent,m),D=C.x-f.x,Y=C.y-f.y;Math.sqrt(D*D+Y*Y)>H&&j(V)}(o.x!==Z.xSnapped||o.y!==Z.ySnapped)&&d&&g&&(f=Rr(V.sourceEvent,m),I(Z))}}).on("end",V=>{if(!g||x){x&&d.size>0&&t().updateNodePositions(d,!1);return}if(h=!1,g=!1,cancelAnimationFrame(c),d.size>0){const{nodeLookup:P,updateNodePositions:T,onNodeDragStop:$,onSelectionDragStop:O}=t();if(_&&(T(d,!1),_=!1),s||$||!R&&O){const[H,K]=_m({nodeId:R,dragItems:d,nodeLookup:P,dragging:!1});s==null||s(V.sourceEvent,d,H,K),$==null||$(V.sourceEvent,H,K),R||O==null||O(V.sourceEvent,K)}}}).filter(V=>{const P=V.target;return!V.button&&(!k||!m1(P,`.${k}`,M))&&(!E||m1(P,E,M))});y.call(z)}function w(){y==null||y.on(".drag",null)}return{update:S,destroy:w}}function gI(e,t,r){const a=[],s={x:e.x-r,y:e.y-r,width:r*2,height:r*2};for(const o of t.values())Lu(s,So(o))>0&&a.push(o);return a}const bI=250;function xI(e,t,r,a){var d,h;let s=[],o=1/0;const c=gI(e,r,t+bI);for(const f of c){const m=[...((d=f.internals.handleBounds)==null?void 0:d.source)??[],...((h=f.internals.handleBounds)==null?void 0:h.target)??[]];for(const g of m){if(a.nodeId===g.nodeId&&a.type===g.type&&a.id===g.id)continue;const{x:y,y:x}=Qa(f,g,g.position,!0),_=Math.sqrt(Math.pow(y-e.x,2)+Math.pow(x-e.y,2));_>t||(_1){const f=a.type==="source"?"target":"source";return s.find(m=>m.type===f)??s[0]}return s[0]}function fN(e,t,r,a,s,o=!1){var f,m,g;const c=a.get(e);if(!c)return null;const d=s==="strict"?(f=c.internals.handleBounds)==null?void 0:f[t]:[...((m=c.internals.handleBounds)==null?void 0:m.source)??[],...((g=c.internals.handleBounds)==null?void 0:g.target)??[]],h=(r?d==null?void 0:d.find(y=>y.id===r):d==null?void 0:d[0])??null;return h&&o?{...h,...Qa(c,h,h.position,!0)}:h}function hN(e,t){return e||(t!=null&&t.classList.contains("target")?"target":t!=null&&t.classList.contains("source")?"source":null)}function yI(e,t){let r=null;return t?r=!0:e&&!t&&(r=!1),r}const mN=()=>!0;function vI(e,{connectionMode:t,connectionRadius:r,handleId:a,nodeId:s,edgeUpdaterType:o,isTarget:c,domNode:d,nodeLookup:h,lib:f,autoPanOnConnect:m,flowId:g,panBy:y,cancelConnection:x,onConnectStart:_,onConnect:N,onConnectEnd:S,isValidConnection:w=mN,onReconnectEnd:k,updateConnection:E,getTransform:M,getFromHandle:B,autoPanSpeed:R,dragThreshold:U=1,handleDomNode:I}){const X=tN(e.target);let j=0,z;const{x:V,y:P}=Rr(e),T=hN(o,I),$=d==null?void 0:d.getBoundingClientRect();let O=!1;if(!$||!T)return;const H=fN(s,T,a,h,t);if(!H)return;let K=Rr(e,$),Z=!1,C=null,D=!1,Y=null;function L(){if(!m||!$)return;const[fe,be]=ng(K,$,R);y({x:fe,y:be}),j=requestAnimationFrame(L)}const G={...H,nodeId:s,type:T,position:H.position},q=h.get(s);let J={inProgress:!0,isValid:null,from:Qa(q,G,ze.Left,!0),fromHandle:G,fromPosition:G.position,fromNode:q,to:K,toHandle:null,toPosition:n1[G.position],toNode:null,pointer:K};function W(){O=!0,E(J),_==null||_(e,{nodeId:s,handleId:a,handleType:T})}U===0&&W();function te(fe){if(!O){const{x:st,y:Rt}=Rr(fe),Yt=st-V,Pt=Rt-P;if(!(Yt*Yt+Pt*Pt>U*U))return;W()}if(!B()||!G){ce(fe);return}const be=M();K=Rr(fe,$),z=xI(Uo(K,be,!1,[1,1]),r,h,G),Z||(L(),Z=!0);const we=pN(fe,{handle:z,connectionMode:t,fromNodeId:s,fromHandleId:a,fromType:c?"target":"source",isValidConnection:w,doc:X,lib:f,flowId:g,nodeLookup:h});Y=we.handleDomNode,C=we.connection,D=yI(!!z,we.isValid);const Ne=h.get(s),De=Ne?Qa(Ne,G,ze.Left,!0):J.from,$e={...J,from:De,isValid:D,to:we.toHandle&&D?Js({x:we.toHandle.x,y:we.toHandle.y},be):K,toHandle:we.toHandle,toPosition:D&&we.toHandle?we.toHandle.position:n1[G.position],toNode:we.toHandle?h.get(we.toHandle.nodeId):null,pointer:K};E($e),J=$e}function ce(fe){if(!("touches"in fe&&fe.touches.length>0)){if(O){(z||Y)&&C&&D&&(N==null||N(C));const{inProgress:be,...we}=J,Ne={...we,toPosition:J.toHandle?J.toPosition:null};S==null||S(fe,Ne),o&&(k==null||k(fe,Ne))}x(),cancelAnimationFrame(j),Z=!1,D=!1,C=null,Y=null,X.removeEventListener("mousemove",te),X.removeEventListener("mouseup",ce),X.removeEventListener("touchmove",te),X.removeEventListener("touchend",ce)}}X.addEventListener("mousemove",te),X.addEventListener("mouseup",ce),X.addEventListener("touchmove",te),X.addEventListener("touchend",ce)}function pN(e,{handle:t,connectionMode:r,fromNodeId:a,fromHandleId:s,fromType:o,doc:c,lib:d,flowId:h,isValidConnection:f=mN,nodeLookup:m}){const g=o==="target",y=t?c.querySelector(`.${d}-flow__handle[data-id="${h}-${t==null?void 0:t.nodeId}-${t==null?void 0:t.id}-${t==null?void 0:t.type}"]`):null,{x,y:_}=Rr(e),N=c.elementFromPoint(x,_),S=N!=null&&N.classList.contains(`${d}-flow__handle`)?N:y,w={handleDomNode:S,isValid:!1,connection:null,toHandle:null};if(S){const k=hN(void 0,S),E=S.getAttribute("data-nodeid"),M=S.getAttribute("data-handleid"),B=S.classList.contains("connectable"),R=S.classList.contains("connectableend");if(!E||!k)return w;const U={source:g?E:a,sourceHandle:g?M:s,target:g?a:E,targetHandle:g?s:M};w.connection=U;const X=B&&R&&(r===Qs.Strict?g&&k==="source"||!g&&k==="target":E!==a||M!==s);w.isValid=X&&f(U),w.toHandle=fN(E,k,M,m,r,!0)}return w}const fp={onPointerDown:vI,isValid:pN};function _I({domNode:e,panZoom:t,getTransform:r,getViewScale:a}){const s=ir(e);function o({translateExtent:d,width:h,height:f,zoomStep:m=1,pannable:g=!0,zoomable:y=!0,inversePan:x=!1}){const _=E=>{if(E.sourceEvent.type!=="wheel"||!t)return;const M=r(),B=E.sourceEvent.ctrlKey&&ko()?10:1,R=-E.sourceEvent.deltaY*(E.sourceEvent.deltaMode===1?.05:E.sourceEvent.deltaMode?1:.002)*m,U=M[2]*Math.pow(2,R*B);t.scaleTo(U)};let N=[0,0];const S=E=>{(E.sourceEvent.type==="mousedown"||E.sourceEvent.type==="touchstart")&&(N=[E.sourceEvent.clientX??E.sourceEvent.touches[0].clientX,E.sourceEvent.clientY??E.sourceEvent.touches[0].clientY])},w=E=>{const M=r();if(E.sourceEvent.type!=="mousemove"&&E.sourceEvent.type!=="touchmove"||!t)return;const B=[E.sourceEvent.clientX??E.sourceEvent.touches[0].clientX,E.sourceEvent.clientY??E.sourceEvent.touches[0].clientY],R=[B[0]-N[0],B[1]-N[1]];N=B;const U=a()*Math.max(M[2],Math.log(M[2]))*(x?-1:1),I={x:M[0]-R[0]*U,y:M[1]-R[1]*U},X=[[0,0],[h,f]];t.setViewportConstrained({x:I.x,y:I.y,zoom:M[2]},X,d)},k=qE().on("start",S).on("zoom",g?w:null).on("zoom.wheel",y?_:null);s.call(k,{})}function c(){s.on("zoom",null)}return{update:o,destroy:c,pointer:Cr}}const td=e=>({x:e.x,y:e.y,zoom:e.k}),wm=({x:e,y:t,zoom:r})=>Wu.translate(e,t).scale(r),$s=(e,t)=>e.target.closest(`.${t}`),gN=(e,t)=>t===2&&Array.isArray(e)&&e.includes(2),wI=e=>((e*=2)<=1?e*e*e:(e-=2)*e*e+2)/2,Em=(e,t=0,r=wI,a=()=>{})=>{const s=typeof t=="number"&&t>0;return s||a(),s?e.transition().duration(t).ease(r).on("end",a):e},bN=e=>{const t=e.ctrlKey&&ko()?10:1;return-e.deltaY*(e.deltaMode===1?.05:e.deltaMode?1:.002)*t};function EI({zoomPanValues:e,noWheelClassName:t,d3Selection:r,d3Zoom:a,panOnScrollMode:s,panOnScrollSpeed:o,zoomOnPinch:c,onPanZoomStart:d,onPanZoom:h,onPanZoomEnd:f}){return m=>{if($s(m,t))return m.ctrlKey&&m.preventDefault(),!1;m.preventDefault(),m.stopImmediatePropagation();const g=r.property("__zoom").k||1;if(m.ctrlKey&&c){const S=Cr(m),w=bN(m),k=g*Math.pow(2,w);a.scaleTo(r,k,S,m);return}const y=m.deltaMode===1?20:1;let x=s===Fa.Vertical?0:m.deltaX*y,_=s===Fa.Horizontal?0:m.deltaY*y;!ko()&&m.shiftKey&&s!==Fa.Vertical&&(x=m.deltaY*y,_=0),a.translateBy(r,-(x/g)*o,-(_/g)*o,{internal:!0});const N=td(r.property("__zoom"));clearTimeout(e.panScrollTimeout),e.isPanScrolling?h==null||h(m,N):(e.isPanScrolling=!0,d==null||d(m,N)),e.panScrollTimeout=setTimeout(()=>{f==null||f(m,N),e.isPanScrolling=!1},150)}}function NI({noWheelClassName:e,preventScrolling:t,d3ZoomHandler:r}){return function(a,s){const o=a.type==="wheel",c=!t&&o&&!a.ctrlKey,d=$s(a,e);if(a.ctrlKey&&o&&d&&a.preventDefault(),c||d)return null;a.preventDefault(),r.call(this,a,s)}}function SI({zoomPanValues:e,onDraggingChange:t,onPanZoomStart:r}){return a=>{var o,c,d;if((o=a.sourceEvent)!=null&&o.internal)return;const s=td(a.transform);e.mouseButton=((c=a.sourceEvent)==null?void 0:c.button)||0,e.isZoomingOrPanning=!0,e.prevViewport=s,((d=a.sourceEvent)==null?void 0:d.type)==="mousedown"&&t(!0),r&&(r==null||r(a.sourceEvent,s))}}function kI({zoomPanValues:e,panOnDrag:t,onPaneContextMenu:r,onTransformChange:a,onPanZoom:s}){return o=>{var c,d;e.usedRightMouseButton=!!(r&&gN(t,e.mouseButton??0)),(c=o.sourceEvent)!=null&&c.sync||a([o.transform.x,o.transform.y,o.transform.k]),s&&!((d=o.sourceEvent)!=null&&d.internal)&&(s==null||s(o.sourceEvent,td(o.transform)))}}function CI({zoomPanValues:e,panOnDrag:t,panOnScroll:r,onDraggingChange:a,onPanZoomEnd:s,onPaneContextMenu:o}){return c=>{var d;if(!((d=c.sourceEvent)!=null&&d.internal)&&(e.isZoomingOrPanning=!1,o&&gN(t,e.mouseButton??0)&&!e.usedRightMouseButton&&c.sourceEvent&&o(c.sourceEvent),e.usedRightMouseButton=!1,a(!1),s)){const h=td(c.transform);e.prevViewport=h,clearTimeout(e.timerId),e.timerId=setTimeout(()=>{s==null||s(c.sourceEvent,h)},r?150:0)}}}function TI({zoomActivationKeyPressed:e,zoomOnScroll:t,zoomOnPinch:r,panOnDrag:a,panOnScroll:s,zoomOnDoubleClick:o,userSelectionActive:c,noWheelClassName:d,noPanClassName:h,lib:f,connectionInProgress:m}){return g=>{var S;const y=e||t,x=r&&g.ctrlKey,_=g.type==="wheel";if(g.button===1&&g.type==="mousedown"&&($s(g,`${f}-flow__node`)||$s(g,`${f}-flow__edge`)))return!0;if(!a&&!y&&!s&&!o&&!r||c||m&&!_||$s(g,d)&&_||$s(g,h)&&(!_||s&&_&&!e)||!r&&g.ctrlKey&&_)return!1;if(!r&&g.type==="touchstart"&&((S=g.touches)==null?void 0:S.length)>1)return g.preventDefault(),!1;if(!y&&!s&&!x&&_||!a&&(g.type==="mousedown"||g.type==="touchstart")||Array.isArray(a)&&!a.includes(g.button)&&g.type==="mousedown")return!1;const N=Array.isArray(a)&&a.includes(g.button)||!g.button||g.button<=1;return(!g.ctrlKey||_)&&N}}function AI({domNode:e,minZoom:t,maxZoom:r,translateExtent:a,viewport:s,onPanZoom:o,onPanZoomStart:c,onPanZoomEnd:d,onDraggingChange:h}){const f={isZoomingOrPanning:!1,usedRightMouseButton:!1,prevViewport:{},mouseButton:0,timerId:void 0,panScrollTimeout:void 0,isPanScrolling:!1},m=e.getBoundingClientRect();let g=[[0,0],[m.width,m.height]];const y=typeof ResizeObserver<"u"?new ResizeObserver(P=>{const T=P[0];T&&(g=[[0,0],[T.contentRect.width,T.contentRect.height]])}):null;y==null||y.observe(e);const x=qE().extent(()=>g).scaleExtent([t,r]).translateExtent(a),_=ir(e).call(x);M({x:s.x,y:s.y,zoom:Ws(s.zoom,t,r)},[[0,0],[m.width,m.height]],a);const N=_.on("wheel.zoom"),S=_.on("dblclick.zoom");x.wheelDelta(bN);async function w(P,T){return _?new Promise($=>{x==null||x.interpolate((T==null?void 0:T.interpolate)==="linear"?fo:bu).transform(Em(_,T==null?void 0:T.duration,T==null?void 0:T.ease,()=>$(!0)),P)}):!1}function k({noWheelClassName:P,noPanClassName:T,onPaneContextMenu:$,userSelectionActive:O,panOnScroll:H,panOnDrag:K,panOnScrollMode:Z,panOnScrollSpeed:C,preventScrolling:D,zoomOnPinch:Y,zoomOnScroll:L,zoomOnDoubleClick:G,zoomActivationKeyPressed:q,lib:Q,onTransformChange:J,connectionInProgress:W,paneClickDistance:te,selectionOnDrag:ce}){O&&!f.isZoomingOrPanning&&E();const fe=H&&!q&&!O;x.clickDistance(ce?1/0:!Or(te)||te<0?0:te);const be=fe?EI({zoomPanValues:f,noWheelClassName:P,d3Selection:_,d3Zoom:x,panOnScrollMode:Z,panOnScrollSpeed:C,zoomOnPinch:Y,onPanZoomStart:c,onPanZoom:o,onPanZoomEnd:d}):NI({noWheelClassName:P,preventScrolling:D,d3ZoomHandler:N});_.on("wheel.zoom",be,{passive:!1});const we=SI({zoomPanValues:f,onDraggingChange:h,onPanZoomStart:c});x.on("start",we);const Ne=kI({zoomPanValues:f,panOnDrag:K,onPaneContextMenu:!!$,onPanZoom:o,onTransformChange:J});x.on("zoom",Ne);const De=CI({zoomPanValues:f,panOnDrag:K,panOnScroll:H,onPaneContextMenu:$,onPanZoomEnd:d,onDraggingChange:h});x.on("end",De);const $e=TI({zoomActivationKeyPressed:q,panOnDrag:K,zoomOnScroll:L,panOnScroll:H,zoomOnDoubleClick:G,zoomOnPinch:Y,userSelectionActive:O,noPanClassName:T,noWheelClassName:P,lib:Q,connectionInProgress:W});x.filter($e),G?_.on("dblclick.zoom",S):_.on("dblclick.zoom",null)}function E(){x.on("zoom",null)}async function M(P,T,$){const O=wm(P),H=x==null?void 0:x.constrain()(O,T,$);return H&&await w(H),H}async function B(P,T){const $=wm(P);return await w($,T),$}function R(P){if(_){const T=wm(P),$=_.property("__zoom");($.k!==P.zoom||$.x!==P.x||$.y!==P.y)&&(x==null||x.transform(_,T,null,{sync:!0}))}}function U(){const P=_?$E(_.node()):{x:0,y:0,k:1};return{x:P.x,y:P.y,zoom:P.k}}async function I(P,T){return _?new Promise($=>{x==null||x.interpolate((T==null?void 0:T.interpolate)==="linear"?fo:bu).scaleTo(Em(_,T==null?void 0:T.duration,T==null?void 0:T.ease,()=>$(!0)),P)}):!1}async function X(P,T){return _?new Promise($=>{x==null||x.interpolate((T==null?void 0:T.interpolate)==="linear"?fo:bu).scaleBy(Em(_,T==null?void 0:T.duration,T==null?void 0:T.ease,()=>$(!0)),P)}):!1}function j(P){x==null||x.scaleExtent(P)}function z(P){x==null||x.translateExtent(P)}function V(P){const T=!Or(P)||P<0?0:P;x==null||x.clickDistance(T)}return{update:k,destroy:E,setViewport:B,setViewportConstrained:M,getViewport:U,scaleTo:I,scaleBy:X,setScaleExtent:j,setTranslateExtent:z,syncViewport:R,setClickDistance:V}}var el;(function(e){e.Line="line",e.Handle="handle"})(el||(el={}));function MI({width:e,prevWidth:t,height:r,prevHeight:a,affectsX:s,affectsY:o}){const c=e-t,d=r-a,h=[c>0?1:c<0?-1:0,d>0?1:d<0?-1:0];return c&&s&&(h[0]=h[0]*-1),d&&o&&(h[1]=h[1]*-1),h}function p1(e){const t=e.includes("right")||e.includes("left"),r=e.includes("bottom")||e.includes("top"),a=e.includes("left"),s=e.includes("top");return{isHorizontal:t,isVertical:r,affectsX:a,affectsY:s}}function aa(e,t){return Math.max(0,t-e)}function sa(e,t){return Math.max(0,e-t)}function uu(e,t,r){return Math.max(0,t-e,e-r)}function g1(e,t){return e?!t:t}function OI(e,t,r,a,s,o,c,d){let{affectsX:h,affectsY:f}=t;const{isHorizontal:m,isVertical:g}=t,y=m&&g,{xSnapped:x,ySnapped:_}=r,{minWidth:N,maxWidth:S,minHeight:w,maxHeight:k}=a,{x:E,y:M,width:B,height:R,aspectRatio:U}=e;let I=Math.floor(m?x-e.pointerX:0),X=Math.floor(g?_-e.pointerY:0);const j=B+(h?-I:I),z=R+(f?-X:X),V=-o[0]*B,P=-o[1]*R;let T=uu(j,N,S),$=uu(z,w,k);if(c){let K=0,Z=0;h&&I<0?K=aa(E+I+V,c[0][0]):!h&&I>0&&(K=sa(E+j+V,c[1][0])),f&&X<0?Z=aa(M+X+P,c[0][1]):!f&&X>0&&(Z=sa(M+z+P,c[1][1])),T=Math.max(T,K),$=Math.max($,Z)}if(d){let K=0,Z=0;h&&I>0?K=sa(E+I,d[0][0]):!h&&I<0&&(K=aa(E+j,d[1][0])),f&&X>0?Z=sa(M+X,d[0][1]):!f&&X<0&&(Z=aa(M+z,d[1][1])),T=Math.max(T,K),$=Math.max($,Z)}if(s){if(m){const K=uu(j/U,w,k)*U;if(T=Math.max(T,K),c){let Z=0;!h&&!f||h&&!f&&y?Z=sa(M+P+j/U,c[1][1])*U:Z=aa(M+P+(h?I:-I)/U,c[0][1])*U,T=Math.max(T,Z)}if(d){let Z=0;!h&&!f||h&&!f&&y?Z=aa(M+j/U,d[1][1])*U:Z=sa(M+(h?I:-I)/U,d[0][1])*U,T=Math.max(T,Z)}}if(g){const K=uu(z*U,N,S)/U;if($=Math.max($,K),c){let Z=0;!h&&!f||f&&!h&&y?Z=sa(E+z*U+V,c[1][0])/U:Z=aa(E+(f?X:-X)*U+V,c[0][0])/U,$=Math.max($,Z)}if(d){let Z=0;!h&&!f||f&&!h&&y?Z=aa(E+z*U,d[1][0])/U:Z=sa(E+(f?X:-X)*U,d[0][0])/U,$=Math.max($,Z)}}}X=X+(X<0?$:-$),I=I+(I<0?T:-T),s&&(y?j>z*U?X=(g1(h,f)?-I:I)/U:I=(g1(h,f)?-X:X)*U:m?(X=I/U,f=h):(I=X*U,h=f));const O=h?E+I:E,H=f?M+X:M;return{width:B+(h?-I:I),height:R+(f?-X:X),x:o[0]*I*(h?-1:1)+O,y:o[1]*X*(f?-1:1)+H}}const xN={width:0,height:0,x:0,y:0},RI={...xN,pointerX:0,pointerY:0,aspectRatio:1};function jI(e,t,r){const a=t.position.x+e.position.x,s=t.position.y+e.position.y,o=e.measured.width??0,c=e.measured.height??0,d=r[0]*o,h=r[1]*c;return[[a-d,s-h],[a+o-d,s+c-h]]}function DI({domNode:e,nodeId:t,getStoreItems:r,onChange:a,onEnd:s}){const o=ir(e);let c={controlDirection:p1("bottom-right"),boundaries:{minWidth:0,minHeight:0,maxWidth:Number.MAX_VALUE,maxHeight:Number.MAX_VALUE},resizeDirection:void 0,keepAspectRatio:!1};function d({controlPosition:f,boundaries:m,keepAspectRatio:g,resizeDirection:y,onResizeStart:x,onResize:_,onResizeEnd:N,shouldResize:S}){let w={...xN},k={...RI};c={boundaries:m,resizeDirection:y,keepAspectRatio:g,controlDirection:p1(f)};let E,M=null,B=[],R,U,I,X=!1;const j=CE().on("start",z=>{const{nodeLookup:V,transform:P,snapGrid:T,snapToGrid:$,nodeOrigin:O,paneDomNode:H}=r();if(E=V.get(t),!E)return;M=(H==null?void 0:H.getBoundingClientRect())??null;const{xSnapped:K,ySnapped:Z}=ho(z.sourceEvent,{transform:P,snapGrid:T,snapToGrid:$,containerBounds:M});w={width:E.measured.width??0,height:E.measured.height??0,x:E.position.x??0,y:E.position.y??0},k={...w,pointerX:K,pointerY:Z,aspectRatio:w.width/w.height},R=void 0,U=Za(E.extent)?E.extent:void 0,E.parentId&&(E.extent==="parent"||E.expandParent)&&(R=V.get(E.parentId)),R&&E.extent==="parent"&&(U=[[0,0],[R.measured.width,R.measured.height]]),B=[],I=void 0;for(const[C,D]of V)if(D.parentId===t&&(B.push({id:C,position:{...D.position},extent:D.extent}),D.extent==="parent"||D.expandParent)){const Y=jI(D,E,D.origin??O);I?I=[[Math.min(Y[0][0],I[0][0]),Math.min(Y[0][1],I[0][1])],[Math.max(Y[1][0],I[1][0]),Math.max(Y[1][1],I[1][1])]]:I=Y}x==null||x(z,{...w})}).on("drag",z=>{const{transform:V,snapGrid:P,snapToGrid:T,nodeOrigin:$}=r(),O=ho(z.sourceEvent,{transform:V,snapGrid:P,snapToGrid:T,containerBounds:M}),H=[];if(!E)return;const{x:K,y:Z,width:C,height:D}=w,Y={},L=E.origin??$,{width:G,height:q,x:Q,y:J}=OI(k,c.controlDirection,O,c.boundaries,c.keepAspectRatio,L,U,I),W=G!==C,te=q!==D,ce=Q!==K&&W,fe=J!==Z&&te;if(!ce&&!fe&&!W&&!te)return;if((ce||fe||L[0]===1||L[1]===1)&&(Y.x=ce?Q:w.x,Y.y=fe?J:w.y,w.x=Y.x,w.y=Y.y,B.length>0)){const De=Q-K,$e=J-Z;for(const st of B)st.position={x:st.position.x-De+L[0]*(G-C),y:st.position.y-$e+L[1]*(q-D)},H.push(st)}if((W||te)&&(Y.width=W&&(!c.resizeDirection||c.resizeDirection==="horizontal")?G:w.width,Y.height=te&&(!c.resizeDirection||c.resizeDirection==="vertical")?q:w.height,w.width=Y.width,w.height=Y.height),R&&E.expandParent){const De=L[0]*(Y.width??0);Y.x&&Y.x{X&&(N==null||N(z,{...w}),s==null||s({...w}),X=!1)});o.call(j)}function h(){o.on(".drag",null)}return{update:d,destroy:h}}var Nm={exports:{}},Sm={},km={exports:{}},Cm={};/** - * @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 b1;function LI(){if(b1)return Cm;b1=1;var e=Ao();function t(g,y){return g===y&&(g!==0||1/g===1/y)||g!==g&&y!==y}var r=typeof Object.is=="function"?Object.is:t,a=e.useState,s=e.useEffect,o=e.useLayoutEffect,c=e.useDebugValue;function d(g,y){var x=y(),_=a({inst:{value:x,getSnapshot:y}}),N=_[0].inst,S=_[1];return o(function(){N.value=x,N.getSnapshot=y,h(N)&&S({inst:N})},[g,x,y]),s(function(){return h(N)&&S({inst:N}),g(function(){h(N)&&S({inst:N})})},[g]),c(x),x}function h(g){var y=g.getSnapshot;g=g.value;try{var x=y();return!r(g,x)}catch{return!0}}function f(g,y){return y()}var m=typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?f:d;return Cm.useSyncExternalStore=e.useSyncExternalStore!==void 0?e.useSyncExternalStore:m,Cm}var x1;function zI(){return x1||(x1=1,km.exports=LI()),km.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 y1;function II(){if(y1)return Sm;y1=1;var e=Ao(),t=zI();function r(f,m){return f===m&&(f!==0||1/f===1/m)||f!==f&&m!==m}var a=typeof Object.is=="function"?Object.is:r,s=t.useSyncExternalStore,o=e.useRef,c=e.useEffect,d=e.useMemo,h=e.useDebugValue;return Sm.useSyncExternalStoreWithSelector=function(f,m,g,y,x){var _=o(null);if(_.current===null){var N={hasValue:!1,value:null};_.current=N}else N=_.current;_=d(function(){function w(R){if(!k){if(k=!0,E=R,R=y(R),x!==void 0&&N.hasValue){var U=N.value;if(x(U,R))return M=U}return M=R}if(U=M,a(E,R))return U;var I=y(R);return x!==void 0&&x(U,I)?(E=R,U):(E=R,M=I)}var k=!1,E,M,B=g===void 0?null:g;return[function(){return w(m())},B===null?void 0:function(){return w(B())}]},[m,g,y,x]);var S=s(f,_[0],_[1]);return c(function(){N.hasValue=!0,N.value=S},[S]),h(S),S},Sm}var v1;function BI(){return v1||(v1=1,Nm.exports=II()),Nm.exports}var UI=BI();const HI=To(UI),$I={},_1=e=>{let t;const r=new Set,a=(m,g)=>{const y=typeof m=="function"?m(t):m;if(!Object.is(y,t)){const x=t;t=g??(typeof y!="object"||y===null)?y:Object.assign({},t,y),r.forEach(_=>_(t,x))}},s=()=>t,h={setState:a,getState:s,getInitialState:()=>f,subscribe:m=>(r.add(m),()=>r.delete(m)),destroy:()=>{($I?"production":void 0)!=="production"&&console.warn("[DEPRECATED] The `destroy` method will be unsupported in a future version. Instead use unsubscribe function returned by subscribe. Everything will be garbage-collected if store is garbage-collected."),r.clear()}},f=t=e(a,s,h);return h},qI=e=>e?_1(e):_1,{useDebugValue:PI}=da,{useSyncExternalStoreWithSelector:FI}=HI,GI=e=>e;function yN(e,t=GI,r){const a=FI(e.subscribe,e.getState,e.getServerState||e.getInitialState,t,r);return PI(a),a}const w1=(e,t)=>{const r=qI(e),a=(s,o=t)=>yN(r,s,o);return Object.assign(a,r),a},VI=(e,t)=>e?w1(e,t):w1;function qt(e,t){if(Object.is(e,t))return!0;if(typeof e!="object"||e===null||typeof t!="object"||t===null)return!1;if(e instanceof Map&&t instanceof Map){if(e.size!==t.size)return!1;for(const[a,s]of e)if(!Object.is(s,t.get(a)))return!1;return!0}if(e instanceof Set&&t instanceof Set){if(e.size!==t.size)return!1;for(const a of e)if(!t.has(a))return!1;return!0}const r=Object.keys(e);if(r.length!==Object.keys(t).length)return!1;for(const a of r)if(!Object.prototype.hasOwnProperty.call(t,a)||!Object.is(e[a],t[a]))return!1;return!0}T_();const nd=ee.createContext(null),YI=nd.Provider,vN=Lr.error001("react");function dt(e,t){const r=ee.useContext(nd);if(r===null)throw new Error(vN);return yN(r,e,t)}function Lt(){const e=ee.useContext(nd);if(e===null)throw new Error(vN);return ee.useMemo(()=>({getState:e.getState,setState:e.setState,subscribe:e.subscribe}),[e])}const E1={display:"none"},XI={position:"absolute",width:1,height:1,margin:-1,border:0,padding:0,overflow:"hidden",clip:"rect(0px, 0px, 0px, 0px)",clipPath:"inset(100%)"},_N="react-flow__node-desc",wN="react-flow__edge-desc",KI="react-flow__aria-live",ZI=e=>e.ariaLiveMessage,QI=e=>e.ariaLabelConfig;function WI({rfId:e}){const t=dt(ZI);return p.jsx("div",{id:`${KI}-${e}`,"aria-live":"assertive","aria-atomic":"true",style:XI,children:t})}function JI({rfId:e,disableKeyboardA11y:t}){const r=dt(QI);return p.jsxs(p.Fragment,{children:[p.jsx("div",{id:`${_N}-${e}`,style:E1,children:t?r["node.a11yDescription.default"]:r["node.a11yDescription.keyboardDisabled"]}),p.jsx("div",{id:`${wN}-${e}`,style:E1,children:r["edge.a11yDescription.default"]}),!t&&p.jsx(WI,{rfId:e})]})}const rd=ee.forwardRef(({position:e="top-left",children:t,className:r,style:a,...s},o)=>{const c=`${e}`.split("-");return p.jsx("div",{className:ln(["react-flow__panel",r,...c]),style:a,ref:o,...s,children:t})});rd.displayName="Panel";const N1="https://reactflow.dev?utm_source=attribution";function e8({proOptions:e,position:t="bottom-right"}){return e!=null&&e.hideAttribution?null:p.jsx(rd,{position:t,className:"react-flow__attribution","data-message":`Please only hide this attribution when you are subscribed to React Flow Pro: ${N1}`,children:p.jsx("a",{href:N1,target:"_blank",rel:"noopener noreferrer","aria-label":"React Flow attribution",children:"React Flow"})})}const t8=e=>{const t=[],r=[];for(const[,a]of e.nodeLookup)a.selected&&t.push(a.internals.userNode);for(const[,a]of e.edgeLookup)a.selected&&r.push(a);return{selectedNodes:t,selectedEdges:r}},du=e=>e.id;function n8(e,t){return qt(e.selectedNodes.map(du),t.selectedNodes.map(du))&&qt(e.selectedEdges.map(du),t.selectedEdges.map(du))}function r8({onSelectionChange:e}){const t=Lt(),{selectedNodes:r,selectedEdges:a}=dt(t8,n8);return ee.useEffect(()=>{const s={nodes:r,edges:a};e==null||e(s),t.getState().onSelectionChangeHandlers.forEach(o=>o(s))},[r,a,e]),null}const i8=e=>!!e.onSelectionChangeHandlers;function a8({onSelectionChange:e}){const t=dt(i8);return e||t?p.jsx(r8,{onSelectionChange:e}):null}const EN=[0,0],s8={x:0,y:0,zoom:1},l8=["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"],S1=[...l8,"rfId"],o8=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}),k1={translateExtent:Eo,nodeOrigin:EN,minZoom:.5,maxZoom:2,elementsSelectable:!0,noPanClassName:"nopan",rfId:"1"};function c8(e){const{setNodes:t,setEdges:r,setMinZoom:a,setMaxZoom:s,setTranslateExtent:o,setNodeExtent:c,reset:d,setDefaultNodesAndEdges:h}=dt(o8,qt),f=Lt();ee.useEffect(()=>(h(e.defaultNodes,e.defaultEdges),()=>{m.current=k1,d()}),[]);const m=ee.useRef(k1);return ee.useEffect(()=>{for(const g of S1){const y=e[g],x=m.current[g];y!==x&&(typeof e[g]>"u"||(g==="nodes"?t(y):g==="edges"?r(y):g==="minZoom"?a(y):g==="maxZoom"?s(y):g==="translateExtent"?o(y):g==="nodeExtent"?c(y):g==="ariaLabelConfig"?f.setState({ariaLabelConfig:Yz(y)}):g==="fitView"?f.setState({fitViewQueued:y}):g==="fitViewOptions"?f.setState({fitViewOptions:y}):f.setState({[g]:y})))}m.current=e},S1.map(g=>e[g])),null}function C1(){return typeof window>"u"||!window.matchMedia?null:window.matchMedia("(prefers-color-scheme: dark)")}function u8(e){var a;const[t,r]=ee.useState(e==="system"?null:e);return ee.useEffect(()=>{if(e!=="system"){r(e);return}const s=C1(),o=()=>r(s!=null&&s.matches?"dark":"light");return o(),s==null||s.addEventListener("change",o),()=>{s==null||s.removeEventListener("change",o)}},[e]),t!==null?t:(a=C1())!=null&&a.matches?"dark":"light"}const T1=typeof document<"u"?document:null;function Co(e=null,t={target:T1,actInsideInputWithModifier:!0}){const[r,a]=ee.useState(!1),s=ee.useRef(!1),o=ee.useRef(new Set([])),[c,d]=ee.useMemo(()=>{if(e!==null){const f=(Array.isArray(e)?e:[e]).filter(g=>typeof g=="string").map(g=>g.replace("+",` -`).replace(` - -`,` -+`).split(` -`)),m=f.reduce((g,y)=>g.concat(...y),[]);return[f,m]}return[[],[]]},[e]);return ee.useEffect(()=>{const h=(t==null?void 0:t.target)??T1,f=(t==null?void 0:t.actInsideInputWithModifier)??!0;if(e!==null){const m=x=>{var S,w;if(s.current=x.ctrlKey||x.metaKey||x.shiftKey||x.altKey,(!s.current||s.current&&!f)&&nN(x))return!1;const N=M1(x.code,d);if(o.current.add(x[N]),A1(c,o.current,!1)){const k=((w=(S=x.composedPath)==null?void 0:S.call(x))==null?void 0:w[0])||x.target,E=(k==null?void 0:k.nodeName)==="BUTTON"||(k==null?void 0:k.nodeName)==="A";t.preventDefault!==!1&&(s.current||!E)&&x.preventDefault(),a(!0)}},g=x=>{const _=M1(x.code,d);A1(c,o.current,!0)?(a(!1),o.current.clear()):o.current.delete(x[_]),x.key==="Meta"&&o.current.clear(),s.current=!1},y=()=>{o.current.clear(),a(!1)};return h==null||h.addEventListener("keydown",m),h==null||h.addEventListener("keyup",g),window.addEventListener("blur",y),window.addEventListener("contextmenu",y),()=>{h==null||h.removeEventListener("keydown",m),h==null||h.removeEventListener("keyup",g),window.removeEventListener("blur",y),window.removeEventListener("contextmenu",y)}}},[e,a]),r}function A1(e,t,r){return e.filter(a=>r||a.length===t.size).some(a=>a.every(s=>t.has(s)))}function M1(e,t){return t.includes(e)?"code":"key"}const d8=()=>{const e=Lt();return ee.useMemo(()=>({zoomIn:async t=>{const{panZoom:r}=e.getState();return r?r.scaleBy(1.2,t):!1},zoomOut:async t=>{const{panZoom:r}=e.getState();return r?r.scaleBy(1/1.2,t):!1},zoomTo:async(t,r)=>{const{panZoom:a}=e.getState();return a?a.scaleTo(t,r):!1},getZoom:()=>e.getState().transform[2],setViewport:async(t,r)=>{const{transform:[a,s,o],panZoom:c}=e.getState();return c?(await c.setViewport({x:t.x??a,y:t.y??s,zoom:t.zoom??o},r),!0):!1},getViewport:()=>{const[t,r,a]=e.getState().transform;return{x:t,y:r,zoom:a}},setCenter:async(t,r,a)=>e.getState().setCenter(t,r,a),fitBounds:async(t,r)=>{const{width:a,height:s,minZoom:o,maxZoom:c,panZoom:d}=e.getState(),h=rg(t,a,s,o,c,(r==null?void 0:r.padding)??.1);return d?(await d.setViewport(h,{duration:r==null?void 0:r.duration,ease:r==null?void 0:r.ease,interpolate:r==null?void 0:r.interpolate}),!0):!1},screenToFlowPosition:(t,r={})=>{const{transform:a,snapGrid:s,snapToGrid:o,domNode:c}=e.getState();if(!c)return t;const{x:d,y:h}=c.getBoundingClientRect(),f={x:t.x-d,y:t.y-h},m=r.snapGrid??s,g=r.snapToGrid??o;return Uo(f,a,g,m)},flowToScreenPosition:t=>{const{transform:r,domNode:a}=e.getState();if(!a)return t;const{x:s,y:o}=a.getBoundingClientRect(),c=Js(t,r);return{x:c.x+s,y:c.y+o}}}),[])};function NN(e,t){const r=[],a=new Map,s=[];for(const o of e)if(o.type==="add"){s.push(o);continue}else if(o.type==="remove"||o.type==="replace")a.set(o.id,[o]);else{const c=a.get(o.id);c?c.push(o):a.set(o.id,[o])}for(const o of t){const c=a.get(o.id);if(!c){r.push(o);continue}if(c[0].type==="remove")continue;if(c[0].type==="replace"){r.push({...c[0].item});continue}const d={...o};for(const h of c)f8(h,d);r.push(d)}return s.length&&s.forEach(o=>{o.index!==void 0?r.splice(o.index,0,{...o.item}):r.push({...o.item})}),r}function f8(e,t){switch(e.type){case"select":{t.selected=e.selected;break}case"position":{typeof e.position<"u"&&(t.position=e.position),typeof e.dragging<"u"&&(t.dragging=e.dragging);break}case"dimensions":{typeof e.dimensions<"u"&&(t.measured={...e.dimensions},e.setAttributes&&((e.setAttributes===!0||e.setAttributes==="width")&&(t.width=e.dimensions.width),(e.setAttributes===!0||e.setAttributes==="height")&&(t.height=e.dimensions.height))),typeof e.resizing=="boolean"&&(t.resizing=e.resizing);break}}}function SN(e,t){return NN(e,t)}function kN(e,t){return NN(e,t)}function Ha(e,t){return{id:e,type:"select",selected:t}}function qs(e,t=new Set,r=!1){const a=[];for(const[s,o]of e){const c=t.has(s);!(o.selected===void 0&&!c)&&o.selected!==c&&(r&&(o.selected=c),a.push(Ha(o.id,c)))}return a}function O1({items:e=[],lookup:t}){var s;const r=[],a=new Map(e.map(o=>[o.id,o]));for(const[o,c]of e.entries()){const d=t.get(c.id),h=((s=d==null?void 0:d.internals)==null?void 0:s.userNode)??d;h!==void 0&&h!==c&&r.push({id:c.id,item:c,type:"replace"}),h===void 0&&r.push({item:c,type:"add",index:o})}for(const[o]of t)a.get(o)===void 0&&r.push({id:o,type:"remove"});return r}function R1(e){return{id:e.id,type:"remove"}}const h8=WE();function m8(e,t,r={}){return Jz(e,t,{...r,onError:r.onError??h8})}const j1=e=>Bz(e),p8=e=>YE(e);function CN(e){return ee.forwardRef(e)}const TN=typeof window<"u"?ee.useLayoutEffect:ee.useEffect;function D1(e){const[t,r]=ee.useState(BigInt(0)),[a]=ee.useState(()=>g8(()=>r(s=>s+BigInt(1))));return TN(()=>{const s=a.get();s.length&&(e(s),a.reset())},[t]),a}function g8(e){let t=[];return{get:()=>t,reset:()=>{t=[]},push:r=>{t.push(r),e()}}}const AN=ee.createContext(null);function b8({children:e}){const t=Lt(),r=ee.useCallback(d=>{const{nodes:h=[],setNodes:f,hasDefaultNodes:m,onNodesChange:g,nodeLookup:y,fitViewQueued:x,onNodesChangeMiddlewareMap:_}=t.getState();let N=h;for(const w of d)N=typeof w=="function"?w(N):w;let S=O1({items:N,lookup:y});for(const w of _.values())S=w(S);m&&f(N),S.length>0?g==null||g(S):x&&window.requestAnimationFrame(()=>{const{fitViewQueued:w,nodes:k,setNodes:E}=t.getState();w&&E(k)})},[]),a=D1(r),s=ee.useCallback(d=>{const{edges:h=[],setEdges:f,hasDefaultEdges:m,onEdgesChange:g,edgeLookup:y}=t.getState();let x=h;for(const _ of d)x=typeof _=="function"?_(x):_;m?f(x):g&&g(O1({items:x,lookup:y}))},[]),o=D1(s),c=ee.useMemo(()=>({nodeQueue:a,edgeQueue:o}),[]);return p.jsx(AN.Provider,{value:c,children:e})}function x8(){const e=ee.useContext(AN);if(!e)throw new Error("useBatchContext must be used within a BatchProvider");return e}const y8=e=>!!e.panZoom;function Ho(){const e=d8(),t=Lt(),r=x8(),a=dt(y8),s=ee.useMemo(()=>{const o=g=>t.getState().nodeLookup.get(g),c=g=>{r.nodeQueue.push(g)},d=g=>{r.edgeQueue.push(g)},h=g=>{var w,k;const{nodeLookup:y,nodeOrigin:x}=t.getState(),_=j1(g)?g:y.get(g.id),N=_.parentId?eN(_.position,_.measured,_.parentId,y,x):_.position,S={..._,position:N,width:((w=_.measured)==null?void 0:w.width)??_.width,height:((k=_.measured)==null?void 0:k.height)??_.height};return So(S)},f=(g,y,x={replace:!1})=>{c(_=>_.map(N=>{if(N.id===g){const S=typeof y=="function"?y(N):y;return x.replace&&j1(S)?S:{...N,...S}}return N}))},m=(g,y,x={replace:!1})=>{d(_=>_.map(N=>{if(N.id===g){const S=typeof y=="function"?y(N):y;return x.replace&&p8(S)?S:{...N,...S}}return N}))};return{getNodes:()=>t.getState().nodes.map(g=>({...g})),getNode:g=>{var y;return(y=o(g))==null?void 0:y.internals.userNode},getInternalNode:o,getEdges:()=>{const{edges:g=[]}=t.getState();return g.map(y=>({...y}))},getEdge:g=>t.getState().edgeLookup.get(g),setNodes:c,setEdges:d,addNodes:g=>{const y=Array.isArray(g)?g:[g];r.nodeQueue.push(x=>[...x,...y])},addEdges:g=>{const y=Array.isArray(g)?g:[g];r.edgeQueue.push(x=>[...x,...y])},toObject:()=>{const{nodes:g=[],edges:y=[],transform:x}=t.getState(),[_,N,S]=x;return{nodes:g.map(w=>({...w})),edges:y.map(w=>({...w})),viewport:{x:_,y:N,zoom:S}}},deleteElements:async({nodes:g=[],edges:y=[]})=>{const{nodes:x,edges:_,onNodesDelete:N,onEdgesDelete:S,triggerNodeChanges:w,triggerEdgeChanges:k,onDelete:E,onBeforeDelete:M}=t.getState(),{nodes:B,edges:R}=await Pz({nodesToRemove:g,edgesToRemove:y,nodes:x,edges:_,onBeforeDelete:M}),U=R.length>0,I=B.length>0;if(U){const X=R.map(R1);S==null||S(R),k(X)}if(I){const X=B.map(R1);N==null||N(B),w(X)}return(I||U)&&(E==null||E({nodes:B,edges:R})),{deletedNodes:B,deletedEdges:R}},getIntersectingNodes:(g,y=!0,x)=>{const _=i1(g),N=_?g:h(g),S=x!==void 0;return N?(x||t.getState().nodes).filter(w=>{const k=t.getState().nodeLookup.get(w.id);if(k&&!_&&(w.id===g.id||!k.internals.positionAbsolute))return!1;const E=So(S?w:k),M=Lu(E,N);return y&&M>0||M>=E.width*E.height||M>=N.width*N.height}):[]},isNodeIntersecting:(g,y,x=!0)=>{const N=i1(g)?g:h(g);if(!N)return!1;const S=Lu(N,y);return x&&S>0||S>=y.width*y.height||S>=N.width*N.height},updateNode:f,updateNodeData:(g,y,x={replace:!1})=>{f(g,_=>{const N=typeof y=="function"?y(_):y;return x.replace?{..._,data:N}:{..._,data:{..._.data,...N}}},x)},updateEdge:m,updateEdgeData:(g,y,x={replace:!1})=>{m(g,_=>{const N=typeof y=="function"?y(_):y;return x.replace?{..._,data:N}:{..._,data:{..._.data,...N}}},x)},getNodesBounds:g=>{const{nodeLookup:y,nodeOrigin:x}=t.getState();return Uz(g,{nodeLookup:y,nodeOrigin:x})},getHandleConnections:({type:g,id:y,nodeId:x})=>{var _;return Array.from(((_=t.getState().connectionLookup.get(`${x}-${g}${y?`-${y}`:""}`))==null?void 0:_.values())??[])},getNodeConnections:({type:g,handleId:y,nodeId:x})=>{var _;return Array.from(((_=t.getState().connectionLookup.get(`${x}${g?y?`-${g}-${y}`:`-${g}`:""}`))==null?void 0:_.values())??[])},fitView:async g=>{const y=t.getState().fitViewResolver??Vz();return t.setState({fitViewQueued:!0,fitViewOptions:g,fitViewResolver:y}),r.nodeQueue.push(x=>[...x]),y.promise}}},[]);return ee.useMemo(()=>({...s,...e,viewportInitialized:a}),[a])}const L1=e=>e.selected,v8=typeof window<"u"?window:void 0;function _8({deleteKeyCode:e,multiSelectionKeyCode:t}){const r=Lt(),{deleteElements:a}=Ho(),s=Co(e,{actInsideInputWithModifier:!1}),o=Co(t,{target:v8});ee.useEffect(()=>{if(s){const{edges:c,nodes:d}=r.getState();a({nodes:d.filter(L1),edges:c.filter(L1)}),r.setState({nodesSelectionActive:!1})}},[s]),ee.useEffect(()=>{r.setState({multiSelectionActive:o})},[o])}function w8(e){const t=Lt();ee.useEffect(()=>{const r=()=>{var s,o,c,d;if(!e.current||!(((o=(s=e.current).checkVisibility)==null?void 0:o.call(s))??!0))return!1;const a=ig(e.current);(a.height===0||a.width===0)&&((d=(c=t.getState()).onError)==null||d.call(c,"004",Lr.error004())),t.setState({width:a.width||500,height:a.height||500})};if(e.current){r(),window.addEventListener("resize",r);const a=new ResizeObserver(()=>r());return a.observe(e.current),()=>{window.removeEventListener("resize",r),a&&e.current&&a.unobserve(e.current)}}},[])}const id={position:"absolute",width:"100%",height:"100%",top:0,left:0},E8=e=>({userSelectionActive:e.userSelectionActive,lib:e.lib,connectionInProgress:e.connection.inProgress});function N8({onPaneContextMenu:e,zoomOnScroll:t=!0,zoomOnPinch:r=!0,panOnScroll:a=!1,panOnScrollSpeed:s=.5,panOnScrollMode:o=Fa.Free,zoomOnDoubleClick:c=!0,panOnDrag:d=!0,defaultViewport:h,translateExtent:f,minZoom:m,maxZoom:g,zoomActivationKeyCode:y,preventScrolling:x=!0,children:_,noWheelClassName:N,noPanClassName:S,onViewportChange:w,isControlledViewport:k,paneClickDistance:E,selectionOnDrag:M}){const B=Lt(),R=ee.useRef(null),{userSelectionActive:U,lib:I,connectionInProgress:X}=dt(E8,qt),j=Co(y),z=ee.useRef();w8(R);const V=ee.useCallback(P=>{w==null||w({x:P[0],y:P[1],zoom:P[2]}),k||B.setState({transform:P})},[w,k]);return ee.useEffect(()=>{if(R.current){z.current=AI({domNode:R.current,minZoom:m,maxZoom:g,translateExtent:f,viewport:h,onDraggingChange:O=>B.setState(H=>H.paneDragging===O?H:{paneDragging:O}),onPanZoomStart:(O,H)=>{const{onViewportChangeStart:K,onMoveStart:Z}=B.getState();Z==null||Z(O,H),K==null||K(H)},onPanZoom:(O,H)=>{const{onViewportChange:K,onMove:Z}=B.getState();Z==null||Z(O,H),K==null||K(H)},onPanZoomEnd:(O,H)=>{const{onViewportChangeEnd:K,onMoveEnd:Z}=B.getState();Z==null||Z(O,H),K==null||K(H)}});const{x:P,y:T,zoom:$}=z.current.getViewport();return B.setState({panZoom:z.current,transform:[P,T,$],domNode:R.current.closest(".react-flow")}),()=>{var O;(O=z.current)==null||O.destroy()}}},[]),ee.useEffect(()=>{var P;(P=z.current)==null||P.update({onPaneContextMenu:e,zoomOnScroll:t,zoomOnPinch:r,panOnScroll:a,panOnScrollSpeed:s,panOnScrollMode:o,zoomOnDoubleClick:c,panOnDrag:d,zoomActivationKeyPressed:j,preventScrolling:x,noPanClassName:S,userSelectionActive:U,noWheelClassName:N,lib:I,onTransformChange:V,connectionInProgress:X,selectionOnDrag:M,paneClickDistance:E})},[e,t,r,a,s,o,c,d,j,x,S,U,N,I,V,X,M,E]),p.jsx("div",{className:"react-flow__renderer",ref:R,style:id,children:_})}const S8=e=>({userSelectionActive:e.userSelectionActive,userSelectionRect:e.userSelectionRect});function k8(){const{userSelectionActive:e,userSelectionRect:t}=dt(S8,qt);return e&&t?p.jsx("div",{className:"react-flow__selection react-flow__container",style:{width:t.width,height:t.height,transform:`translate(${t.x}px, ${t.y}px)`}}):null}const Tm=(e,t)=>r=>{r.target===t.current&&(e==null||e(r))},C8=e=>({userSelectionActive:e.userSelectionActive,elementsSelectable:e.elementsSelectable,dragging:e.paneDragging,panBy:e.panBy,autoPanSpeed:e.autoPanSpeed});function T8({isSelecting:e,selectionKeyPressed:t,selectionMode:r=No.Full,panOnDrag:a,autoPanOnSelection:s,paneClickDistance:o,selectionOnDrag:c,onSelectionStart:d,onSelectionEnd:h,onPaneClick:f,onPaneContextMenu:m,onPaneScroll:g,onPaneMouseEnter:y,onPaneMouseMove:x,onPaneMouseLeave:_,children:N}){const S=ee.useRef(0),w=Lt(),{userSelectionActive:k,elementsSelectable:E,dragging:M,panBy:B,autoPanSpeed:R}=dt(C8,qt),U=E&&(e||k),I=ee.useRef(null),X=ee.useRef(),j=ee.useRef(new Set),z=ee.useRef(new Set),V=ee.useRef(!1),P=ee.useRef(!1),T=ee.useRef({x:0,y:0}),$=ee.useRef(!1),O=W=>{if(P.current||V.current||w.getState().connection.inProgress){P.current=!1,V.current=!1;return}f==null||f(W),w.getState().resetSelectedElements(),w.setState({nodesSelectionActive:!1})},H=W=>{if(Array.isArray(a)&&(a!=null&&a.includes(2))){W.preventDefault();return}m==null||m(W)},K=g?W=>g(W):void 0,Z=W=>{P.current&&(W.stopPropagation(),P.current=!1)},C=W=>{var st,Rt;const{domNode:te,transform:ce}=w.getState();if(X.current=te==null?void 0:te.getBoundingClientRect(),!X.current)return;const fe=W.target===I.current;if(!fe&&!!W.target.closest(".nokey")||!e||!(c&&fe||t)||W.button!==0||!W.isPrimary)return;(Rt=(st=W.target)==null?void 0:st.setPointerCapture)==null||Rt.call(st,W.pointerId),P.current=!1;const{x:Ne,y:De}=Rr(W.nativeEvent,X.current),$e=Uo({x:Ne,y:De},ce);w.setState({userSelectionRect:{width:0,height:0,startX:$e.x,startY:$e.y,x:Ne,y:De}}),fe||(W.stopPropagation(),W.preventDefault())};function D(W,te){const{userSelectionRect:ce}=w.getState();if(!ce)return;const{transform:fe,nodeLookup:be,edgeLookup:we,connectionLookup:Ne,triggerNodeChanges:De,triggerEdgeChanges:$e,defaultEdgeOptions:st}=w.getState(),Rt={x:ce.startX,y:ce.startY},{x:Yt,y:Pt}=Js(Rt,fe),Xt={startX:Rt.x,startY:Rt.y,x:WIt.id)),z.current=new Set;const ct=(st==null?void 0:st.selectable)??!0;for(const It of j.current){const ue=Ne.get(It);if(ue)for(const{edgeId:xe}of ue.values()){const Oe=we.get(xe);Oe&&(Oe.selectable??ct)&&z.current.add(xe)}}if(!a1(Yn,j.current)){const It=qs(be,j.current,!0);De(It)}if(!a1(En,z.current)){const It=qs(we,z.current);$e(It)}w.setState({userSelectionRect:Xt,userSelectionActive:!0,nodesSelectionActive:!1})}function Y(){if(!s||!X.current)return;const[W,te]=ng(T.current,X.current,R);B({x:W,y:te}).then(ce=>{if(!P.current||!ce){S.current=requestAnimationFrame(Y);return}const{x:fe,y:be}=T.current;D(fe,be),S.current=requestAnimationFrame(Y)})}const L=()=>{cancelAnimationFrame(S.current),S.current=0,$.current=!1};ee.useEffect(()=>()=>L(),[]);const G=W=>{const{userSelectionRect:te,transform:ce,resetSelectedElements:fe}=w.getState();if(!X.current||!te)return;const{x:be,y:we}=Rr(W.nativeEvent,X.current);T.current={x:be,y:we};const Ne=Js({x:te.startX,y:te.startY},ce);if(!P.current){const De=t?0:o;if(Math.hypot(be-Ne.x,we-Ne.y)<=De)return;fe(),d==null||d(W)}P.current=!0,$.current||(Y(),$.current=!0),D(be,we)},q=W=>{var te,ce;if(!U){W.target===I.current&&w.getState().connection.inProgress&&(V.current=!0);return}W.button===0&&((ce=(te=W.target)==null?void 0:te.releasePointerCapture)==null||ce.call(te,W.pointerId),!k&&W.target===I.current&&w.getState().userSelectionRect&&(O==null||O(W)),w.setState({userSelectionActive:!1,userSelectionRect:null}),P.current&&(h==null||h(W),w.setState({nodesSelectionActive:j.current.size>0})),L())},Q=W=>{var te,ce;(ce=(te=W.target)==null?void 0:te.releasePointerCapture)==null||ce.call(te,W.pointerId),L()},J=a===!0||Array.isArray(a)&&a.includes(0);return p.jsxs("div",{className:ln(["react-flow__pane",{draggable:J,dragging:M,selection:e}]),onClick:U?void 0:Tm(O,I),onContextMenu:Tm(H,I),onWheel:Tm(K,I),onPointerEnter:U?void 0:y,onPointerMove:U?G:x,onPointerUp:q,onPointerCancel:U?Q:void 0,onPointerDownCapture:U?C:void 0,onClickCapture:U?Z:void 0,onPointerLeave:_,ref:I,style:id,children:[N,p.jsx(k8,{})]})}function hp({id:e,store:t,unselect:r=!1,nodeRef:a}){const{addSelectedNodes:s,unselectNodesAndEdges:o,multiSelectionActive:c,nodeLookup:d,onError:h}=t.getState(),f=d.get(e);if(!f){h==null||h("012",Lr.error012(e));return}t.setState({nodesSelectionActive:!1}),f.selected?(r||f.selected&&c)&&(o({nodes:[f],edges:[]}),requestAnimationFrame(()=>{var m;return(m=a==null?void 0:a.current)==null?void 0:m.blur()})):s([e])}function MN({nodeRef:e,disabled:t=!1,noDragClassName:r,handleSelector:a,nodeId:s,isSelectable:o,nodeClickDistance:c}){const d=Lt(),[h,f]=ee.useState(!1),m=ee.useRef();return ee.useEffect(()=>{if(!t)return m.current=pI({getStoreItems:()=>d.getState(),onNodeMouseDown:g=>{hp({id:g,store:d,nodeRef:e})},onDragStart:()=>{f(!0)},onDragStop:()=>{f(!1)}}),()=>{var g;(g=m.current)==null||g.destroy(),m.current=void 0}},[t,d,e]),ee.useEffect(()=>{t||!e.current||!m.current||m.current.update({noDragClassName:r,handleSelector:a,domNode:e.current,isSelectable:o,nodeId:s,nodeClickDistance:c})},[r,a,t,o,e,s,c]),h}const A8=e=>t=>t.selected&&(t.draggable||e&&typeof t.draggable>"u");function ON(){const e=Lt();return ee.useCallback(r=>{const{nodeExtent:a,snapToGrid:s,snapGrid:o,nodesDraggable:c,onError:d,updateNodePositions:h,nodeLookup:f,nodeOrigin:m}=e.getState(),g=new Map,y=A8(c),x=s?o[0]:5,_=s?o[1]:5,N=r.direction.x*x*r.factor,S=r.direction.y*_*r.factor;for(const[,w]of f){if(!y(w))continue;let k={x:w.internals.positionAbsolute.x+N,y:w.internals.positionAbsolute.y+S};s&&(k=Bo(k,o));const{position:E,positionAbsolute:M}=XE({nodeId:w.id,nextPosition:k,nodeLookup:f,nodeExtent:a,nodeOrigin:m,onError:d});w.position=E,w.internals.positionAbsolute=M,g.set(w.id,w)}h(g)},[])}const ug=ee.createContext(null),M8=ug.Provider;ug.Consumer;const RN=()=>ee.useContext(ug),O8=e=>({connectOnClick:e.connectOnClick,noPanClassName:e.noPanClassName,rfId:e.rfId}),jN=ee.createContext(null);function R8({children:e}){const t=dt(O8,qt);return p.jsx(jN.Provider,{value:t,children:e})}function j8(){const e=ee.useContext(jN);if(!e)throw new Error("useHandleConfig must be used within a HandleConfigProvider");return e}const D8={connectingFrom:!1,connectingTo:!1,clickConnecting:!1,isPossibleEndHandle:!0,connectionInProcess:!1,clickConnectionInProcess:!1,valid:!1},L8=(e,t,r)=>a=>{const{connectionClickStartHandle:s,connectionMode:o,connection:c}=a,{fromHandle:d,toHandle:h,isValid:f}=c;if(!d&&!s)return D8;const m=(h==null?void 0:h.nodeId)===e&&(h==null?void 0:h.id)===t&&(h==null?void 0:h.type)===r;return{connectingFrom:(d==null?void 0:d.nodeId)===e&&(d==null?void 0:d.id)===t&&(d==null?void 0:d.type)===r,connectingTo:m,clickConnecting:(s==null?void 0:s.nodeId)===e&&(s==null?void 0:s.id)===t&&(s==null?void 0:s.type)===r,isPossibleEndHandle:o===Qs.Strict?(d==null?void 0:d.type)!==r:e!==(d==null?void 0:d.nodeId)||t!==(d==null?void 0:d.id),connectionInProcess:!!d,clickConnectionInProcess:!!s,valid:m&&f}};function z8({type:e="source",position:t=ze.Top,isValidConnection:r,isConnectable:a=!0,isConnectableStart:s=!0,isConnectableEnd:o=!0,id:c,onConnect:d,children:h,className:f,onMouseDown:m,onTouchStart:g,...y},x){var $,O;const _=c||null,N=e==="target",S=Lt(),w=RN(),{connectOnClick:k,noPanClassName:E,rfId:M}=j8(),{connectingFrom:B,connectingTo:R,clickConnecting:U,isPossibleEndHandle:I,connectionInProcess:X,clickConnectionInProcess:j,valid:z}=dt(L8(w,_,e),qt);w||(O=($=S.getState()).onError)==null||O.call($,"010",Lr.error010());const V=H=>{const{defaultEdgeOptions:K,onConnect:Z,hasDefaultEdges:C}=S.getState(),D={...K,...H};if(C){const{edges:Y,setEdges:L,onError:G}=S.getState();L(m8(D,Y,{onError:G}))}Z==null||Z(D),d==null||d(D)},P=H=>{if(!w)return;const K=rN(H.nativeEvent);if(s&&(K&&H.button===0||!K)){const Z=S.getState();fp.onPointerDown(H.nativeEvent,{handleDomNode:H.currentTarget,autoPanOnConnect:Z.autoPanOnConnect,connectionMode:Z.connectionMode,connectionRadius:Z.connectionRadius,domNode:Z.domNode,nodeLookup:Z.nodeLookup,lib:Z.lib,isTarget:N,handleId:_,nodeId:w,flowId:Z.rfId,panBy:Z.panBy,cancelConnection:Z.cancelConnection,onConnectStart:Z.onConnectStart,onConnectEnd:(...C)=>{var D,Y;return(Y=(D=S.getState()).onConnectEnd)==null?void 0:Y.call(D,...C)},updateConnection:Z.updateConnection,onConnect:V,isValidConnection:r||((...C)=>{var D,Y;return((Y=(D=S.getState()).isValidConnection)==null?void 0:Y.call(D,...C))??!0}),getTransform:()=>S.getState().transform,getFromHandle:()=>S.getState().connection.fromHandle,autoPanSpeed:Z.autoPanSpeed,dragThreshold:Z.connectionDragThreshold})}K?m==null||m(H):g==null||g(H)},T=H=>{const{onClickConnectStart:K,onClickConnectEnd:Z,connectionClickStartHandle:C,connectionMode:D,isValidConnection:Y,lib:L,rfId:G,nodeLookup:q,connection:Q}=S.getState();if(!w||!C&&!s)return;if(!C){K==null||K(H.nativeEvent,{nodeId:w,handleId:_,handleType:e}),S.setState({connectionClickStartHandle:{nodeId:w,type:e,id:_}});return}const J=tN(H.target),W=r||Y,{connection:te,isValid:ce}=fp.isValid(H.nativeEvent,{handle:{nodeId:w,id:_,type:e},connectionMode:D,fromNodeId:C.nodeId,fromHandleId:C.id||null,fromType:C.type,isValidConnection:W,flowId:G,doc:J,lib:L,nodeLookup:q});ce&&te&&V(te);const fe=structuredClone(Q);delete fe.inProgress,fe.toPosition=fe.toHandle?fe.toHandle.position:null,Z==null||Z(H,fe),S.setState({connectionClickStartHandle:null})};return p.jsx("div",{"data-handleid":_,"data-nodeid":w,"data-handlepos":t,"data-id":`${M}-${w}-${_}-${e}`,className:ln(["react-flow__handle",`react-flow__handle-${t}`,"nodrag",E,f,{source:!N,target:N,connectable:a,connectablestart:s,connectableend:o,clickconnecting:U,connectingfrom:B,connectingto:R,valid:z,connectionindicator:a&&(!X||I)&&(X||j?o:s)}]),onMouseDown:P,onTouchStart:P,onClick:k?T:void 0,ref:x,...y,children:h})}const tl=ee.memo(CN(z8));function I8({data:e,isConnectable:t,sourcePosition:r=ze.Bottom}){return p.jsxs(p.Fragment,{children:[e==null?void 0:e.label,p.jsx(tl,{type:"source",position:r,isConnectable:t})]})}function B8({data:e,isConnectable:t,targetPosition:r=ze.Top,sourcePosition:a=ze.Bottom}){return p.jsxs(p.Fragment,{children:[p.jsx(tl,{type:"target",position:r,isConnectable:t}),e==null?void 0:e.label,p.jsx(tl,{type:"source",position:a,isConnectable:t})]})}function U8(){return null}function H8({data:e,isConnectable:t,targetPosition:r=ze.Top}){return p.jsxs(p.Fragment,{children:[p.jsx(tl,{type:"target",position:r,isConnectable:t}),e==null?void 0:e.label]})}const zu={ArrowUp:{x:0,y:-1},ArrowDown:{x:0,y:1},ArrowLeft:{x:-1,y:0},ArrowRight:{x:1,y:0}},z1={input:I8,default:B8,output:H8,group:U8};function $8(e){var t,r,a,s;return e.internals.handleBounds===void 0?{width:e.width??e.initialWidth??((t=e.style)==null?void 0:t.width),height:e.height??e.initialHeight??((r=e.style)==null?void 0:r.height)}:{width:e.width??((a=e.style)==null?void 0:a.width),height:e.height??((s=e.style)==null?void 0:s.height)}}const q8=e=>{const{width:t,height:r,x:a,y:s}=Io(e.nodeLookup,{filter:o=>!!o.selected});return{width:Or(t)?t:null,height:Or(r)?r:null,userSelectionActive:e.userSelectionActive,transformString:`translate(${e.transform[0]}px,${e.transform[1]}px) scale(${e.transform[2]}) translate(${a}px,${s}px)`}};function P8({onSelectionContextMenu:e,noPanClassName:t,disableKeyboardA11y:r}){const a=Lt(),{width:s,height:o,transformString:c,userSelectionActive:d}=dt(q8,qt),h=ON(),f=ee.useRef(null);ee.useEffect(()=>{var x;r||(x=f.current)==null||x.focus({preventScroll:!0})},[r]);const m=!d&&s!==null&&o!==null;if(MN({nodeRef:f,disabled:!m}),!m)return null;const g=e?x=>{const _=a.getState().nodes.filter(N=>N.selected);e(x,_)}:void 0,y=x=>{Object.prototype.hasOwnProperty.call(zu,x.key)&&(x.preventDefault(),h({direction:zu[x.key],factor:x.shiftKey?4:1}))};return p.jsx("div",{className:ln(["react-flow__nodesselection","react-flow__container",t]),style:{transform:c},children:p.jsx("div",{ref:f,className:"react-flow__nodesselection-rect",onContextMenu:g,tabIndex:r?void 0:-1,onKeyDown:r?void 0:y,style:{width:s,height:o}})})}const I1=typeof window<"u"?window:void 0,F8=e=>({nodesSelectionActive:e.nodesSelectionActive,userSelectionActive:e.userSelectionActive});function DN({children:e,onPaneClick:t,onPaneMouseEnter:r,onPaneMouseMove:a,onPaneMouseLeave:s,onPaneContextMenu:o,onPaneScroll:c,paneClickDistance:d,deleteKeyCode:h,selectionKeyCode:f,selectionOnDrag:m,selectionMode:g,onSelectionStart:y,onSelectionEnd:x,multiSelectionKeyCode:_,panActivationKeyCode:N,zoomActivationKeyCode:S,elementsSelectable:w,zoomOnScroll:k,zoomOnPinch:E,panOnScroll:M,panOnScrollSpeed:B,panOnScrollMode:R,zoomOnDoubleClick:U,panOnDrag:I,autoPanOnSelection:X,defaultViewport:j,translateExtent:z,minZoom:V,maxZoom:P,preventScrolling:T,onSelectionContextMenu:$,noWheelClassName:O,noPanClassName:H,disableKeyboardA11y:K,onViewportChange:Z,isControlledViewport:C}){const{nodesSelectionActive:D,userSelectionActive:Y}=dt(F8,qt),L=Co(f,{target:I1}),G=Co(N,{target:I1}),q=G||I,Q=G||M,J=m&&q!==!0,W=L||Y||J;return _8({deleteKeyCode:h,multiSelectionKeyCode:_}),p.jsx(N8,{onPaneContextMenu:o,elementsSelectable:w,zoomOnScroll:k,zoomOnPinch:E,panOnScroll:Q,panOnScrollSpeed:B,panOnScrollMode:R,zoomOnDoubleClick:U,panOnDrag:!L&&q,defaultViewport:j,translateExtent:z,minZoom:V,maxZoom:P,zoomActivationKeyCode:S,preventScrolling:T,noWheelClassName:O,noPanClassName:H,onViewportChange:Z,isControlledViewport:C,paneClickDistance:d,selectionOnDrag:J,children:p.jsxs(T8,{onSelectionStart:y,onSelectionEnd:x,onPaneClick:t,onPaneMouseEnter:r,onPaneMouseMove:a,onPaneMouseLeave:s,onPaneContextMenu:o,onPaneScroll:c,panOnDrag:q,autoPanOnSelection:X,isSelecting:!!W,selectionMode:g,selectionKeyPressed:L,paneClickDistance:d,selectionOnDrag:J,children:[e,D&&p.jsx(P8,{onSelectionContextMenu:$,noPanClassName:H,disableKeyboardA11y:K})]})})}DN.displayName="FlowRenderer";const G8=ee.memo(DN),V8=e=>t=>e?tg(t.nodeLookup,{x:0,y:0,width:t.width,height:t.height},t.transform,!0).map(r=>r.id):Array.from(t.nodeLookup.keys());function Y8(e){return dt(ee.useCallback(V8(e),[e]),qt)}const X8=e=>e.updateNodeInternals;function K8(){const e=dt(X8),[t]=ee.useState(()=>typeof ResizeObserver>"u"?null:new ResizeObserver(r=>{const a=new Map;r.forEach(s=>{const o=s.target.getAttribute("data-id");a.set(o,{id:o,nodeElement:s.target,force:!0})}),e(a)}));return ee.useEffect(()=>()=>{t==null||t.disconnect()},[t]),t}function Z8({node:e,nodeType:t,hasDimensions:r,resizeObserver:a}){const s=Lt(),o=ee.useRef(null),c=ee.useRef(null),d=ee.useRef(e.sourcePosition),h=ee.useRef(e.targetPosition),f=ee.useRef(t),m=r&&!!e.internals.handleBounds;return ee.useEffect(()=>{o.current&&!e.hidden&&(!m||c.current!==o.current)&&(c.current&&(a==null||a.unobserve(c.current)),a==null||a.observe(o.current),c.current=o.current)},[m,e.hidden]),ee.useEffect(()=>()=>{c.current&&(a==null||a.unobserve(c.current),c.current=null)},[]),ee.useEffect(()=>{if(o.current){const g=f.current!==t,y=d.current!==e.sourcePosition,x=h.current!==e.targetPosition;(g||y||x)&&(f.current=t,d.current=e.sourcePosition,h.current=e.targetPosition,s.getState().updateNodeInternals(new Map([[e.id,{id:e.id,nodeElement:o.current,force:!0}]])))}},[e.id,t,e.sourcePosition,e.targetPosition]),o}function Q8({id:e,onClick:t,onMouseEnter:r,onMouseMove:a,onMouseLeave:s,onContextMenu:o,onDoubleClick:c,nodesDraggable:d,elementsSelectable:h,nodesConnectable:f,nodesFocusable:m,resizeObserver:g,noDragClassName:y,noPanClassName:x,disableKeyboardA11y:_,rfId:N,nodeTypes:S,nodeClickDistance:w,onError:k}){const{node:E,internals:M,isParent:B}=dt(W=>{const te=W.nodeLookup.get(e),ce=W.parentLookup.has(e);return{node:te,internals:te.internals,isParent:ce}},qt);let R=E.type||"default",U=(S==null?void 0:S[R])||z1[R];U===void 0&&(k==null||k("003",Lr.error003(R)),R="default",U=(S==null?void 0:S.default)||z1.default);const I=!!(E.draggable||d&&typeof E.draggable>"u"),X=!!(E.selectable||h&&typeof E.selectable>"u"),j=!!(E.connectable||f&&typeof E.connectable>"u"),z=!!(E.focusable||m&&typeof E.focusable>"u"),V=Lt(),P=JE(E),T=Z8({node:E,nodeType:R,hasDimensions:P,resizeObserver:g}),$=MN({nodeRef:T,disabled:E.hidden||!I,noDragClassName:y,handleSelector:E.dragHandle,nodeId:e,isSelectable:X,nodeClickDistance:w}),O=ON();if(E.hidden)return null;const H=Qr(E),K=$8(E),Z=X||I||t||r||a||s,C=r?W=>r(W,{...M.userNode}):void 0,D=a?W=>a(W,{...M.userNode}):void 0,Y=s?W=>s(W,{...M.userNode}):void 0,L=o?W=>o(W,{...M.userNode}):void 0,G=c?W=>c(W,{...M.userNode}):void 0,q=W=>{const{selectNodesOnDrag:te,nodeDragThreshold:ce}=V.getState();X&&(!te||!I||ce>0)&&hp({id:e,store:V,nodeRef:T}),t&&t(W,{...M.userNode})},Q=W=>{if(!(nN(W.nativeEvent)||_)){if(PE.includes(W.key)&&X){const te=W.key==="Escape";hp({id:e,store:V,unselect:te,nodeRef:T})}else if(I&&E.selected&&Object.prototype.hasOwnProperty.call(zu,W.key)){W.preventDefault();const{ariaLabelConfig:te}=V.getState();V.setState({ariaLiveMessage:te["node.a11yDescription.ariaLiveMessage"]({direction:W.key.replace("Arrow","").toLowerCase(),x:~~M.positionAbsolute.x,y:~~M.positionAbsolute.y})}),O({direction:zu[W.key],factor:W.shiftKey?4:1})}}},J=()=>{var Ne;if(_||!((Ne=T.current)!=null&&Ne.matches(":focus-visible")))return;const{transform:W,width:te,height:ce,autoPanOnNodeFocus:fe,setCenter:be}=V.getState();if(!fe)return;tg(new Map([[e,E]]),{x:0,y:0,width:te,height:ce},W,!0).length>0||be(E.position.x+H.width/2,E.position.y+H.height/2,{zoom:W[2]})};return p.jsx("div",{className:ln(["react-flow__node",`react-flow__node-${R}`,{[x]:I},E.className,{selected:E.selected,selectable:X,parent:B,draggable:I,dragging:$}]),ref:T,style:{zIndex:M.z,transform:`translate(${M.positionAbsolute.x}px,${M.positionAbsolute.y}px)`,pointerEvents:Z?"all":"none",visibility:P?"visible":"hidden",...E.style,...K},"data-id":e,"data-testid":`rf__node-${e}`,onMouseEnter:C,onMouseMove:D,onMouseLeave:Y,onContextMenu:L,onClick:q,onDoubleClick:G,onKeyDown:z?Q:void 0,tabIndex:z?0:void 0,onFocus:z?J:void 0,role:E.ariaRole??(z?"group":void 0),"aria-roledescription":"node","aria-describedby":_?void 0:`${_N}-${N}`,"aria-label":E.ariaLabel,...E.domAttributes,children:p.jsx(M8,{value:e,children:p.jsx(U,{id:e,data:E.data,type:R,positionAbsoluteX:M.positionAbsolute.x,positionAbsoluteY:M.positionAbsolute.y,selected:E.selected??!1,selectable:X,draggable:I,deletable:E.deletable??!0,isConnectable:j,sourcePosition:E.sourcePosition,targetPosition:E.targetPosition,dragging:$,dragHandle:E.dragHandle,zIndex:M.z,parentId:E.parentId,...H})})})}var W8=ee.memo(Q8);const J8=e=>({nodesConnectable:e.nodesConnectable,nodesFocusable:e.nodesFocusable,elementsSelectable:e.elementsSelectable,onError:e.onError});function LN(e){const{nodesConnectable:t,nodesFocusable:r,elementsSelectable:a,onError:s}=dt(J8,qt),o=Y8(e.onlyRenderVisibleElements),c=K8();return p.jsx("div",{className:"react-flow__nodes",style:id,children:o.map(d=>p.jsx(W8,{id:d,nodeTypes:e.nodeTypes,nodeExtent:e.nodeExtent,onClick:e.onNodeClick,onMouseEnter:e.onNodeMouseEnter,onMouseMove:e.onNodeMouseMove,onMouseLeave:e.onNodeMouseLeave,onContextMenu:e.onNodeContextMenu,onDoubleClick:e.onNodeDoubleClick,noDragClassName:e.noDragClassName,noPanClassName:e.noPanClassName,rfId:e.rfId,disableKeyboardA11y:e.disableKeyboardA11y,resizeObserver:c,nodesDraggable:e.nodesDraggable??!0,nodesConnectable:t,nodesFocusable:r,elementsSelectable:a,nodeClickDistance:e.nodeClickDistance,onError:s},d))})}LN.displayName="NodeRenderer";const e9=ee.memo(LN);function t9(e){return dt(ee.useCallback(r=>{if(!e)return r.edges.map(s=>s.id);const a=[];if(r.width&&r.height)for(const s of r.edges){const o=r.nodeLookup.get(s.source),c=r.nodeLookup.get(s.target);o&&c&&Zz({sourceNode:o,targetNode:c,width:r.width,height:r.height,transform:r.transform})&&a.push(s.id)}return a},[e]),qt)}const n9=({color:e="none",strokeWidth:t=1})=>{const r={strokeWidth:t,...e&&{stroke:e}};return p.jsx("polyline",{className:"arrow",style:r,strokeLinecap:"round",fill:"none",strokeLinejoin:"round",points:"-5,-4 0,0 -5,4"})},r9=({color:e="none",strokeWidth:t=1})=>{const r={strokeWidth:t,...e&&{stroke:e,fill:e}};return p.jsx("polyline",{className:"arrowclosed",style:r,strokeLinecap:"round",strokeLinejoin:"round",points:"-5,-4 0,0 -5,4 -5,-4"})},B1={[ju.Arrow]:n9,[ju.ArrowClosed]:r9};function i9(e){const t=Lt();return ee.useMemo(()=>{var s,o;return Object.prototype.hasOwnProperty.call(B1,e)?B1[e]:((o=(s=t.getState()).onError)==null||o.call(s,"009",Lr.error009(e)),null)},[e])}const a9=({id:e,type:t,color:r,width:a=12.5,height:s=12.5,markerUnits:o="strokeWidth",strokeWidth:c,orient:d="auto-start-reverse"})=>{const h=i9(t);return h?p.jsx("marker",{className:"react-flow__arrowhead",id:e,markerWidth:`${a}`,markerHeight:`${s}`,viewBox:"-10 -10 20 20",markerUnits:o,orient:d,refX:"0",refY:"0",children:p.jsx(h,{color:r,strokeWidth:c})}):null},zN=({defaultColor:e,rfId:t})=>{const r=dt(o=>o.edges),a=dt(o=>o.defaultEdgeOptions),s=ee.useMemo(()=>iI(r,{id:t,defaultColor:e,defaultMarkerStart:a==null?void 0:a.markerStart,defaultMarkerEnd:a==null?void 0:a.markerEnd}),[r,a,t,e]);return s.length?p.jsx("svg",{className:"react-flow__marker","aria-hidden":"true",children:p.jsx("defs",{children:s.map(o=>p.jsx(a9,{id:o.id,type:o.type,color:o.color,width:o.width,height:o.height,markerUnits:o.markerUnits,strokeWidth:o.strokeWidth,orient:o.orient},o.id))})}):null};zN.displayName="MarkerDefinitions";var s9=ee.memo(zN);function IN({x:e,y:t,label:r,labelStyle:a,labelShowBg:s=!0,labelBgStyle:o,labelBgPadding:c=[2,4],labelBgBorderRadius:d=2,children:h,className:f,...m}){const[g,y]=ee.useState({x:1,y:0,width:0,height:0}),x=ln(["react-flow__edge-textwrapper",f]),_=ee.useRef(null);return ee.useEffect(()=>{if(_.current){const N=_.current.getBBox();y({x:N.x,y:N.y,width:N.width,height:N.height})}},[r]),r?p.jsxs("g",{transform:`translate(${e-g.width/2} ${t-g.height/2})`,className:x,visibility:g.width?"visible":"hidden",...m,children:[s&&p.jsx("rect",{width:g.width+2*c[0],x:-c[0],y:-c[1],height:g.height+2*c[1],className:"react-flow__edge-textbg",style:o,rx:d,ry:d}),p.jsx("text",{className:"react-flow__edge-text",y:g.height/2,dy:"0.3em",ref:_,style:a,children:r}),h]}):null}IN.displayName="EdgeText";const l9=ee.memo(IN);function ad({path:e,labelX:t,labelY:r,label:a,labelStyle:s,labelShowBg:o,labelBgStyle:c,labelBgPadding:d,labelBgBorderRadius:h,interactionWidth:f=20,...m}){return p.jsxs(p.Fragment,{children:[p.jsx("path",{...m,d:e,fill:"none",className:ln(["react-flow__edge-path",m.className])}),f?p.jsx("path",{d:e,fill:"none",strokeOpacity:0,strokeWidth:f,className:"react-flow__edge-interaction"}):null,a&&Or(t)&&Or(r)?p.jsx(l9,{x:t,y:r,label:a,labelStyle:s,labelShowBg:o,labelBgStyle:c,labelBgPadding:d,labelBgBorderRadius:h}):null]})}function U1({pos:e,x1:t,y1:r,x2:a,y2:s}){return e===ze.Left||e===ze.Right?[.5*(t+a),r]:[t,.5*(r+s)]}function BN({sourceX:e,sourceY:t,sourcePosition:r=ze.Bottom,targetX:a,targetY:s,targetPosition:o=ze.Top}){const[c,d]=U1({pos:r,x1:e,y1:t,x2:a,y2:s}),[h,f]=U1({pos:o,x1:a,y1:s,x2:e,y2:t}),[m,g,y,x]=iN({sourceX:e,sourceY:t,targetX:a,targetY:s,sourceControlX:c,sourceControlY:d,targetControlX:h,targetControlY:f});return[`M${e},${t} C${c},${d} ${h},${f} ${a},${s}`,m,g,y,x]}function UN(e){return ee.memo(({id:t,sourceX:r,sourceY:a,targetX:s,targetY:o,sourcePosition:c,targetPosition:d,label:h,labelStyle:f,labelShowBg:m,labelBgStyle:g,labelBgPadding:y,labelBgBorderRadius:x,style:_,markerEnd:N,markerStart:S,interactionWidth:w})=>{const[k,E,M]=BN({sourceX:r,sourceY:a,sourcePosition:c,targetX:s,targetY:o,targetPosition:d}),B=e.isInternal?void 0:t;return p.jsx(ad,{id:B,path:k,labelX:E,labelY:M,label:h,labelStyle:f,labelShowBg:m,labelBgStyle:g,labelBgPadding:y,labelBgBorderRadius:x,style:_,markerEnd:N,markerStart:S,interactionWidth:w})})}const o9=UN({isInternal:!1}),HN=UN({isInternal:!0});o9.displayName="SimpleBezierEdge";HN.displayName="SimpleBezierEdgeInternal";function $N(e){return ee.memo(({id:t,sourceX:r,sourceY:a,targetX:s,targetY:o,label:c,labelStyle:d,labelShowBg:h,labelBgStyle:f,labelBgPadding:m,labelBgBorderRadius:g,style:y,sourcePosition:x=ze.Bottom,targetPosition:_=ze.Top,markerEnd:N,markerStart:S,pathOptions:w,interactionWidth:k})=>{const[E,M,B]=cp({sourceX:r,sourceY:a,sourcePosition:x,targetX:s,targetY:o,targetPosition:_,borderRadius:w==null?void 0:w.borderRadius,offset:w==null?void 0:w.offset,stepPosition:w==null?void 0:w.stepPosition}),R=e.isInternal?void 0:t;return p.jsx(ad,{id:R,path:E,labelX:M,labelY:B,label:c,labelStyle:d,labelShowBg:h,labelBgStyle:f,labelBgPadding:m,labelBgBorderRadius:g,style:y,markerEnd:N,markerStart:S,interactionWidth:k})})}const qN=$N({isInternal:!1}),PN=$N({isInternal:!0});qN.displayName="SmoothStepEdge";PN.displayName="SmoothStepEdgeInternal";function FN(e){return ee.memo(({id:t,...r})=>{var s;const a=e.isInternal?void 0:t;return p.jsx(qN,{...r,id:a,pathOptions:ee.useMemo(()=>{var o;return{borderRadius:0,offset:(o=r.pathOptions)==null?void 0:o.offset}},[(s=r.pathOptions)==null?void 0:s.offset])})})}const c9=FN({isInternal:!1}),GN=FN({isInternal:!0});c9.displayName="StepEdge";GN.displayName="StepEdgeInternal";function VN(e){return ee.memo(({id:t,sourceX:r,sourceY:a,targetX:s,targetY:o,label:c,labelStyle:d,labelShowBg:h,labelBgStyle:f,labelBgPadding:m,labelBgBorderRadius:g,style:y,markerEnd:x,markerStart:_,interactionWidth:N})=>{const[S,w,k]=lN({sourceX:r,sourceY:a,targetX:s,targetY:o}),E=e.isInternal?void 0:t;return p.jsx(ad,{id:E,path:S,labelX:w,labelY:k,label:c,labelStyle:d,labelShowBg:h,labelBgStyle:f,labelBgPadding:m,labelBgBorderRadius:g,style:y,markerEnd:x,markerStart:_,interactionWidth:N})})}const u9=VN({isInternal:!1}),YN=VN({isInternal:!0});u9.displayName="StraightEdge";YN.displayName="StraightEdgeInternal";function XN(e){return ee.memo(({id:t,sourceX:r,sourceY:a,targetX:s,targetY:o,sourcePosition:c=ze.Bottom,targetPosition:d=ze.Top,label:h,labelStyle:f,labelShowBg:m,labelBgStyle:g,labelBgPadding:y,labelBgBorderRadius:x,style:_,markerEnd:N,markerStart:S,pathOptions:w,interactionWidth:k})=>{const[E,M,B]=aN({sourceX:r,sourceY:a,sourcePosition:c,targetX:s,targetY:o,targetPosition:d,curvature:w==null?void 0:w.curvature}),R=e.isInternal?void 0:t;return p.jsx(ad,{id:R,path:E,labelX:M,labelY:B,label:h,labelStyle:f,labelShowBg:m,labelBgStyle:g,labelBgPadding:y,labelBgBorderRadius:x,style:_,markerEnd:N,markerStart:S,interactionWidth:k})})}const d9=XN({isInternal:!1}),KN=XN({isInternal:!0});d9.displayName="BezierEdge";KN.displayName="BezierEdgeInternal";const H1={default:KN,straight:YN,step:GN,smoothstep:PN,simplebezier:HN},$1={sourceX:null,sourceY:null,targetX:null,targetY:null,sourcePosition:null,targetPosition:null,zIndex:void 0},f9=(e,t,r)=>r===ze.Left?e-t:r===ze.Right?e+t:e,h9=(e,t,r)=>r===ze.Top?e-t:r===ze.Bottom?e+t:e,q1="react-flow__edgeupdater";function P1({position:e,centerX:t,centerY:r,radius:a=10,onMouseDown:s,onMouseEnter:o,onMouseOut:c,type:d}){return p.jsx("circle",{onMouseDown:s,onMouseEnter:o,onMouseOut:c,className:ln([q1,`${q1}-${d}`]),cx:f9(t,a,e),cy:h9(r,a,e),r:a,stroke:"transparent",fill:"transparent"})}function m9({isReconnectable:e,reconnectRadius:t,edge:r,sourceX:a,sourceY:s,targetX:o,targetY:c,sourcePosition:d,targetPosition:h,onReconnect:f,onReconnectStart:m,onReconnectEnd:g,setReconnecting:y,setUpdateHover:x}){const _=Lt(),N=(M,B)=>{if(M.button!==0)return;const{autoPanOnConnect:R,domNode:U,connectionMode:I,connectionRadius:X,lib:j,onConnectStart:z,cancelConnection:V,nodeLookup:P,rfId:T,panBy:$,updateConnection:O}=_.getState(),H=B.type==="target",K=(D,Y)=>{y(!1),g==null||g(D,r,B.type,Y)},Z=D=>f==null?void 0:f(r,D),C=(D,Y)=>{y(!0),m==null||m(M,r,B.type),z==null||z(D,Y)};fp.onPointerDown(M.nativeEvent,{autoPanOnConnect:R,connectionMode:I,connectionRadius:X,domNode:U,handleId:B.id,nodeId:B.nodeId,nodeLookup:P,isTarget:H,edgeUpdaterType:B.type,lib:j,flowId:T,cancelConnection:V,panBy:$,isValidConnection:(...D)=>{var Y,L;return((L=(Y=_.getState()).isValidConnection)==null?void 0:L.call(Y,...D))??!0},onConnect:Z,onConnectStart:C,onConnectEnd:(...D)=>{var Y,L;return(L=(Y=_.getState()).onConnectEnd)==null?void 0:L.call(Y,...D)},onReconnectEnd:K,updateConnection:O,getTransform:()=>_.getState().transform,getFromHandle:()=>_.getState().connection.fromHandle,dragThreshold:_.getState().connectionDragThreshold,handleDomNode:M.currentTarget})},S=M=>N(M,{nodeId:r.target,id:r.targetHandle??null,type:"target"}),w=M=>N(M,{nodeId:r.source,id:r.sourceHandle??null,type:"source"}),k=()=>x(!0),E=()=>x(!1);return p.jsxs(p.Fragment,{children:[(e===!0||e==="source")&&p.jsx(P1,{position:d,centerX:a,centerY:s,radius:t,onMouseDown:S,onMouseEnter:k,onMouseOut:E,type:"source"}),(e===!0||e==="target")&&p.jsx(P1,{position:h,centerX:o,centerY:c,radius:t,onMouseDown:w,onMouseEnter:k,onMouseOut:E,type:"target"})]})}function p9({id:e,edgesFocusable:t,edgesReconnectable:r,elementsSelectable:a,onClick:s,onDoubleClick:o,onContextMenu:c,onMouseEnter:d,onMouseMove:h,onMouseLeave:f,reconnectRadius:m,onReconnect:g,onReconnectStart:y,onReconnectEnd:x,rfId:_,edgeTypes:N,noPanClassName:S,onError:w,disableKeyboardA11y:k}){let E=dt(be=>be.edgeLookup.get(e));const M=dt(be=>be.defaultEdgeOptions);E=M?{...M,...E}:E;let B=E.type||"default",R=(N==null?void 0:N[B])||H1[B];R===void 0&&(w==null||w("011",Lr.error011(B)),B="default",R=(N==null?void 0:N.default)||H1.default);const U=!!(E.focusable||t&&typeof E.focusable>"u"),I=typeof g<"u"&&(E.reconnectable||r&&typeof E.reconnectable>"u"),X=!!(E.selectable||a&&typeof E.selectable>"u"),j=ee.useRef(null),[z,V]=ee.useState(!1),[P,T]=ee.useState(!1),$=Lt(),{zIndex:O=E.zIndex,sourceX:H,sourceY:K,targetX:Z,targetY:C,sourcePosition:D,targetPosition:Y}=dt(ee.useCallback(be=>{const we=be.nodeLookup.get(E.source),Ne=be.nodeLookup.get(E.target);if(!we||!Ne)return $1;const De=rI({id:e,sourceNode:we,targetNode:Ne,sourceHandle:E.sourceHandle||null,targetHandle:E.targetHandle||null,connectionMode:be.connectionMode,onError:w}),$e=Kz({selected:E.selected,zIndex:E.zIndex,sourceNode:we,targetNode:Ne,elevateOnSelect:be.elevateEdgesOnSelect,zIndexMode:be.zIndexMode});return{...De||$1,zIndex:$e}},[E.source,E.target,E.sourceHandle,E.targetHandle,E.selected,E.zIndex]),qt),L=ee.useMemo(()=>E.markerStart?`url('#${up(E.markerStart,_)}')`:void 0,[E.markerStart,_]),G=ee.useMemo(()=>E.markerEnd?`url('#${up(E.markerEnd,_)}')`:void 0,[E.markerEnd,_]);if(E.hidden||H===null||K===null||Z===null||C===null)return null;const q=be=>{var $e;const{addSelectedEdges:we,unselectNodesAndEdges:Ne,multiSelectionActive:De}=$.getState();X&&($.setState({nodesSelectionActive:!1}),E.selected&&De?(Ne({nodes:[],edges:[E]}),($e=j.current)==null||$e.blur()):we([e])),s&&s(be,E)},Q=o?be=>{o(be,{...E})}:void 0,J=c?be=>{c(be,{...E})}:void 0,W=d?be=>{d(be,{...E})}:void 0,te=h?be=>{h(be,{...E})}:void 0,ce=f?be=>{f(be,{...E})}:void 0,fe=be=>{var we;if(!k&&PE.includes(be.key)&&X){const{unselectNodesAndEdges:Ne,addSelectedEdges:De}=$.getState();be.key==="Escape"?((we=j.current)==null||we.blur(),Ne({edges:[E]})):De([e])}};return p.jsx("svg",{style:{zIndex:O},children:p.jsxs("g",{className:ln(["react-flow__edge",`react-flow__edge-${B}`,E.className,S,{selected:E.selected,animated:E.animated,inactive:!X&&!s,updating:z,selectable:X}]),onClick:q,onDoubleClick:Q,onContextMenu:J,onMouseEnter:W,onMouseMove:te,onMouseLeave:ce,onKeyDown:U?fe:void 0,tabIndex:U?0:void 0,role:E.ariaRole??(U?"group":"img"),"aria-roledescription":"edge","data-id":e,"data-testid":`rf__edge-${e}`,"aria-label":E.ariaLabel===null?void 0:E.ariaLabel||`Edge from ${E.source} to ${E.target}`,"aria-describedby":U?`${wN}-${_}`:void 0,ref:j,...E.domAttributes,children:[!P&&p.jsx(R,{id:e,source:E.source,target:E.target,type:E.type,selected:E.selected,animated:E.animated,selectable:X,deletable:E.deletable??!0,label:E.label,labelStyle:E.labelStyle,labelShowBg:E.labelShowBg,labelBgStyle:E.labelBgStyle,labelBgPadding:E.labelBgPadding,labelBgBorderRadius:E.labelBgBorderRadius,sourceX:H,sourceY:K,targetX:Z,targetY:C,sourcePosition:D,targetPosition:Y,data:E.data,style:E.style,sourceHandleId:E.sourceHandle,targetHandleId:E.targetHandle,markerStart:L,markerEnd:G,pathOptions:"pathOptions"in E?E.pathOptions:void 0,interactionWidth:E.interactionWidth}),I&&p.jsx(m9,{edge:E,isReconnectable:I,reconnectRadius:m,onReconnect:g,onReconnectStart:y,onReconnectEnd:x,sourceX:H,sourceY:K,targetX:Z,targetY:C,sourcePosition:D,targetPosition:Y,setUpdateHover:V,setReconnecting:T})]})})}var g9=ee.memo(p9);const b9=e=>({edgesFocusable:e.edgesFocusable,edgesReconnectable:e.edgesReconnectable,elementsSelectable:e.elementsSelectable,connectionMode:e.connectionMode,onError:e.onError});function ZN({defaultMarkerColor:e,onlyRenderVisibleElements:t,rfId:r,edgeTypes:a,noPanClassName:s,onReconnect:o,onEdgeContextMenu:c,onEdgeMouseEnter:d,onEdgeMouseMove:h,onEdgeMouseLeave:f,onEdgeClick:m,reconnectRadius:g,onEdgeDoubleClick:y,onReconnectStart:x,onReconnectEnd:_,disableKeyboardA11y:N}){const{edgesFocusable:S,edgesReconnectable:w,elementsSelectable:k,onError:E}=dt(b9,qt),M=t9(t);return p.jsxs("div",{className:"react-flow__edges",children:[p.jsx(s9,{defaultColor:e,rfId:r}),M.map(B=>p.jsx(g9,{id:B,edgesFocusable:S,edgesReconnectable:w,elementsSelectable:k,noPanClassName:s,onReconnect:o,onContextMenu:c,onMouseEnter:d,onMouseMove:h,onMouseLeave:f,onClick:m,reconnectRadius:g,onDoubleClick:y,onReconnectStart:x,onReconnectEnd:_,rfId:r,onError:E,edgeTypes:a,disableKeyboardA11y:N},B))]})}ZN.displayName="EdgeRenderer";const x9=ee.memo(ZN),F1=e=>`translate(${e[0]}px,${e[1]}px) scale(${e[2]})`;function y9({children:e}){const t=Lt(),r=ee.useRef(null),[a]=ee.useState(()=>t.getState().transform);return TN(()=>{let s=null;const o=()=>{const c=t.getState().transform;s&&c[0]===s[0]&&c[1]===s[1]&&c[2]===s[2]||(s=c,r.current&&(r.current.style.transform=F1(c)))};return o(),t.subscribe(o)},[t]),p.jsx("div",{ref:r,className:"react-flow__viewport xyflow__viewport react-flow__container",style:{transform:F1(a)},children:e})}function v9(e){const t=Ho(),r=ee.useRef(!1);ee.useEffect(()=>{!r.current&&t.viewportInitialized&&e&&(setTimeout(()=>e(t),1),r.current=!0)},[e,t.viewportInitialized])}const _9=e=>{var t;return(t=e.panZoom)==null?void 0:t.syncViewport};function w9(e){const t=dt(_9),r=Lt();return ee.useEffect(()=>{e&&(t==null||t(e),r.setState({transform:[e.x,e.y,e.zoom]}))},[e,t]),null}function E9(e){return e.connection.inProgress?{...e.connection,to:Uo(e.connection.to,e.transform)}:{...e.connection}}function N9(e){return E9}function S9(e){const t=N9();return dt(t,qt)}const k9=e=>({nodesConnectable:e.nodesConnectable,isValid:e.connection.isValid,inProgress:e.connection.inProgress,width:e.width,height:e.height});function C9({containerStyle:e,style:t,type:r,component:a}){const{nodesConnectable:s,width:o,height:c,isValid:d,inProgress:h}=dt(k9,qt);return!(o&&s&&h)?null:p.jsx("svg",{style:e,width:o,height:c,className:"react-flow__connectionline react-flow__container",children:p.jsx("g",{className:ln(["react-flow__connection",VE(d)]),children:p.jsx(QN,{style:t,type:r,CustomComponent:a,isValid:d})})})}const QN=({style:e,type:t=ca.Bezier,CustomComponent:r,isValid:a})=>{const{inProgress:s,from:o,fromNode:c,fromHandle:d,fromPosition:h,to:f,toNode:m,toHandle:g,toPosition:y,pointer:x}=S9();if(!s)return;if(r)return p.jsx(r,{connectionLineType:t,connectionLineStyle:e,fromNode:c,fromHandle:d,fromX:o.x,fromY:o.y,toX:f.x,toY:f.y,fromPosition:h,toPosition:y,connectionStatus:VE(a),toNode:m,toHandle:g,pointer:x});let _="";const N={sourceX:o.x,sourceY:o.y,sourcePosition:h,targetX:f.x,targetY:f.y,targetPosition:y};switch(t){case ca.Bezier:[_]=aN(N);break;case ca.SimpleBezier:[_]=BN(N);break;case ca.Step:[_]=cp({...N,borderRadius:0});break;case ca.SmoothStep:[_]=cp(N);break;default:[_]=lN(N)}return p.jsx("path",{d:_,fill:"none",className:"react-flow__connection-path",style:e})};QN.displayName="ConnectionLine";const T9={};function G1(e=T9){ee.useRef(e),Lt(),ee.useEffect(()=>{},[e])}function A9(){Lt(),ee.useRef(!1),ee.useEffect(()=>{},[])}function WN({nodeTypes:e,edgeTypes:t,onInit:r,onNodeClick:a,onEdgeClick:s,onNodeDoubleClick:o,onEdgeDoubleClick:c,onNodeMouseEnter:d,onNodeMouseMove:h,onNodeMouseLeave:f,onNodeContextMenu:m,onSelectionContextMenu:g,onSelectionStart:y,onSelectionEnd:x,connectionLineType:_,connectionLineStyle:N,connectionLineComponent:S,connectionLineContainerStyle:w,selectionKeyCode:k,selectionOnDrag:E,selectionMode:M,multiSelectionKeyCode:B,panActivationKeyCode:R,zoomActivationKeyCode:U,deleteKeyCode:I,onlyRenderVisibleElements:X,elementsSelectable:j,defaultViewport:z,translateExtent:V,minZoom:P,maxZoom:T,preventScrolling:$,defaultMarkerColor:O,zoomOnScroll:H,zoomOnPinch:K,panOnScroll:Z,panOnScrollSpeed:C,panOnScrollMode:D,zoomOnDoubleClick:Y,panOnDrag:L,autoPanOnSelection:G,onPaneClick:q,onPaneMouseEnter:Q,onPaneMouseMove:J,onPaneMouseLeave:W,onPaneScroll:te,onPaneContextMenu:ce,paneClickDistance:fe,nodeClickDistance:be,onEdgeContextMenu:we,onEdgeMouseEnter:Ne,onEdgeMouseMove:De,onEdgeMouseLeave:$e,reconnectRadius:st,onReconnect:Rt,onReconnectStart:Yt,onReconnectEnd:Pt,noDragClassName:Xt,noWheelClassName:Yn,noPanClassName:En,disableKeyboardA11y:ct,nodeExtent:It,rfId:ue,viewport:xe,onViewportChange:Oe,nodesDraggable:Fe}){return G1(e),G1(t),A9(),v9(r),w9(xe),p.jsx(G8,{onPaneClick:q,onPaneMouseEnter:Q,onPaneMouseMove:J,onPaneMouseLeave:W,onPaneContextMenu:ce,onPaneScroll:te,paneClickDistance:fe,deleteKeyCode:I,selectionKeyCode:k,selectionOnDrag:E,selectionMode:M,onSelectionStart:y,onSelectionEnd:x,multiSelectionKeyCode:B,panActivationKeyCode:R,zoomActivationKeyCode:U,elementsSelectable:j,zoomOnScroll:H,zoomOnPinch:K,zoomOnDoubleClick:Y,panOnScroll:Z,panOnScrollSpeed:C,panOnScrollMode:D,panOnDrag:L,autoPanOnSelection:G,defaultViewport:z,translateExtent:V,minZoom:P,maxZoom:T,onSelectionContextMenu:g,preventScrolling:$,noDragClassName:Xt,noWheelClassName:Yn,noPanClassName:En,disableKeyboardA11y:ct,onViewportChange:Oe,isControlledViewport:!!xe,children:p.jsxs(y9,{children:[p.jsx(x9,{edgeTypes:t,onEdgeClick:s,onEdgeDoubleClick:c,onReconnect:Rt,onReconnectStart:Yt,onReconnectEnd:Pt,onlyRenderVisibleElements:X,onEdgeContextMenu:we,onEdgeMouseEnter:Ne,onEdgeMouseMove:De,onEdgeMouseLeave:$e,reconnectRadius:st,defaultMarkerColor:O,noPanClassName:En,disableKeyboardA11y:ct,rfId:ue}),p.jsx(C9,{style:N,type:_,component:S,containerStyle:w}),p.jsx("div",{className:"react-flow__edgelabel-renderer"}),p.jsx(e9,{nodeTypes:e,onNodeClick:a,onNodeDoubleClick:o,onNodeMouseEnter:d,onNodeMouseMove:h,onNodeMouseLeave:f,onNodeContextMenu:m,nodeClickDistance:be,onlyRenderVisibleElements:X,noPanClassName:En,noDragClassName:Xt,disableKeyboardA11y:ct,nodeExtent:It,rfId:ue,nodesDraggable:Fe}),p.jsx("div",{className:"react-flow__viewport-portal"})]})})}WN.displayName="GraphView";const M9=ee.memo(WN),O9=WE(),V1=({nodes:e,edges:t,defaultNodes:r,defaultEdges:a,width:s,height:o,fitView:c,fitViewOptions:d,minZoom:h=.5,maxZoom:f=2,nodeOrigin:m,nodeExtent:g,zIndexMode:y="basic"}={})=>{const x=new Map,_=new Map,N=new Map,S=new Map,w=a??t??[],k=r??e??[],E=m??[0,0],M=g??Eo;uN(N,S,w);const{nodesInitialized:B}=dp(k,x,_,{nodeOrigin:E,nodeExtent:M,zIndexMode:y});let R=[0,0,1];if(c&&s&&o){const U=Io(x,{filter:z=>!!((z.width||z.initialWidth)&&(z.height||z.initialHeight))}),{x:I,y:X,zoom:j}=rg(U,s,o,h,f,(d==null?void 0:d.padding)??.1);R=[I,X,j]}return{rfId:"1",width:s??0,height:o??0,transform:R,nodes:k,nodesInitialized:B,nodeLookup:x,parentLookup:_,edges:w,edgeLookup:S,connectionLookup:N,onNodesChange:null,onEdgesChange:null,hasDefaultNodes:r!==void 0,hasDefaultEdges:a!==void 0,panZoom:null,minZoom:h,maxZoom:f,translateExtent:Eo,nodeExtent:M,nodesSelectionActive:!1,userSelectionActive:!1,userSelectionRect:null,connectionMode:Qs.Strict,domNode:null,paneDragging:!1,noPanClassName:"nopan",nodeOrigin:E,nodeDragThreshold:1,connectionDragThreshold:1,snapGrid:[15,15],snapToGrid:!1,nodesDraggable:!0,nodesConnectable:!0,nodesFocusable:!0,edgesFocusable:!0,edgesReconnectable:!0,elementsSelectable:!0,elevateNodesOnSelect:!0,elevateEdgesOnSelect:!0,selectNodesOnDrag:!0,multiSelectionActive:!1,fitViewQueued:c??!1,fitViewOptions:d,fitViewResolver:null,connection:{...GE},connectionClickStartHandle:null,connectOnClick:!0,ariaLiveMessage:"",autoPanOnConnect:!0,autoPanOnNodeDrag:!0,autoPanOnNodeFocus:!0,autoPanSpeed:15,connectionRadius:20,onError:O9,isValidConnection:void 0,onSelectionChangeHandlers:[],lib:"react",debug:!1,ariaLabelConfig:FE,zIndexMode:y,onNodesChangeMiddlewareMap:new Map,onEdgesChangeMiddlewareMap:new Map}},R9=({nodes:e,edges:t,defaultNodes:r,defaultEdges:a,width:s,height:o,fitView:c,fitViewOptions:d,minZoom:h,maxZoom:f,nodeOrigin:m,nodeExtent:g,zIndexMode:y})=>VI((x,_)=>{async function N(){const{nodeLookup:S,panZoom:w,fitViewOptions:k,fitViewResolver:E,width:M,height:B,minZoom:R,maxZoom:U}=_();w&&(await qz({nodes:S,width:M,height:B,panZoom:w,minZoom:R,maxZoom:U},k),E==null||E.resolve(!0),x({fitViewResolver:null}))}return{...V1({nodes:e,edges:t,width:s,height:o,fitView:c,fitViewOptions:d,minZoom:h,maxZoom:f,nodeOrigin:m,nodeExtent:g,defaultNodes:r,defaultEdges:a,zIndexMode:y}),setNodes:S=>{const{nodeLookup:w,parentLookup:k,nodeOrigin:E,elevateNodesOnSelect:M,fitViewQueued:B,zIndexMode:R,nodesSelectionActive:U}=_(),{nodesInitialized:I,hasSelectedNodes:X}=dp(S,w,k,{nodeOrigin:E,nodeExtent:g,elevateNodesOnSelect:M,checkEquality:!0,zIndexMode:R}),j=U&&X;B&&I?(N(),x({nodes:S,nodesInitialized:I,fitViewQueued:!1,fitViewOptions:void 0,nodesSelectionActive:j})):x({nodes:S,nodesInitialized:I,nodesSelectionActive:j})},setEdges:S=>{const{connectionLookup:w,edgeLookup:k}=_();uN(w,k,S),x({edges:S})},setDefaultNodesAndEdges:(S,w)=>{if(S){const{setNodes:k}=_();k(S),x({hasDefaultNodes:!0})}if(w){const{setEdges:k}=_();k(w),x({hasDefaultEdges:!0})}},updateNodeInternals:S=>{const{triggerNodeChanges:w,nodeLookup:k,parentLookup:E,domNode:M,nodeOrigin:B,nodeExtent:R,debug:U,fitViewQueued:I,zIndexMode:X}=_(),{changes:j,updatedInternals:z}=dI(S,k,E,M,B,R,X);z&&(lI(k,E,{nodeOrigin:B,nodeExtent:R,zIndexMode:X}),I?(N(),x({fitViewQueued:!1,fitViewOptions:void 0})):x({}),(j==null?void 0:j.length)>0&&(U&&console.log("React Flow: trigger node changes",j),w==null||w(j)))},updateNodePositions:(S,w=!1)=>{const k=[];let E=[];const{nodeLookup:M,triggerNodeChanges:B,connection:R,updateConnection:U,onNodesChangeMiddlewareMap:I}=_();for(const[X,j]of S){const z=M.get(X),V=!!(z!=null&&z.expandParent&&(z!=null&&z.parentId)&&(j!=null&&j.position)),P={id:X,type:"position",position:V?{x:Math.max(0,j.position.x),y:Math.max(0,j.position.y)}:j.position,dragging:w};if(z&&R.inProgress&&R.fromNode.id===z.id){const T=Qa(z,R.fromHandle,ze.Left,!0);U({...R,from:T})}V&&z.parentId&&k.push({id:X,parentId:z.parentId,rect:{...j.internals.positionAbsolute,width:j.measured.width??0,height:j.measured.height??0}}),E.push(P)}if(k.length>0){const{parentLookup:X,nodeOrigin:j}=_(),z=cg(k,M,X,j);E.push(...z)}for(const X of I.values())E=X(E);B(E)},triggerNodeChanges:S=>{const{onNodesChange:w,setNodes:k,nodes:E,hasDefaultNodes:M,debug:B}=_();if(S!=null&&S.length){if(M){const R=SN(S,E);k(R)}B&&console.log("React Flow: trigger node changes",S),w==null||w(S)}},triggerEdgeChanges:S=>{const{onEdgesChange:w,setEdges:k,edges:E,hasDefaultEdges:M,debug:B}=_();if(S!=null&&S.length){if(M){const R=kN(S,E);k(R)}B&&console.log("React Flow: trigger edge changes",S),w==null||w(S)}},addSelectedNodes:S=>{const{multiSelectionActive:w,edgeLookup:k,nodeLookup:E,triggerNodeChanges:M,triggerEdgeChanges:B}=_();if(w){const R=S.map(U=>Ha(U,!0));M(R);return}M(qs(E,new Set([...S]),!0)),B(qs(k))},addSelectedEdges:S=>{const{multiSelectionActive:w,edgeLookup:k,nodeLookup:E,triggerNodeChanges:M,triggerEdgeChanges:B}=_();if(w){const R=S.map(U=>Ha(U,!0));B(R);return}B(qs(k,new Set([...S]))),M(qs(E,new Set,!0))},unselectNodesAndEdges:({nodes:S,edges:w}={})=>{const{edges:k,nodes:E,nodeLookup:M,triggerNodeChanges:B,triggerEdgeChanges:R}=_(),U=S||E,I=w||k,X=[];for(const z of U){if(!z.selected)continue;const V=M.get(z.id);V&&(V.selected=!1),X.push(Ha(z.id,!1))}const j=[];for(const z of I)z.selected&&j.push(Ha(z.id,!1));B(X),R(j)},setMinZoom:S=>{const{panZoom:w,maxZoom:k}=_();w==null||w.setScaleExtent([S,k]),x({minZoom:S})},setMaxZoom:S=>{const{panZoom:w,minZoom:k}=_();w==null||w.setScaleExtent([k,S]),x({maxZoom:S})},setTranslateExtent:S=>{var w;(w=_().panZoom)==null||w.setTranslateExtent(S),x({translateExtent:S})},resetSelectedElements:()=>{const{edges:S,nodes:w,triggerNodeChanges:k,triggerEdgeChanges:E,elementsSelectable:M}=_();if(!M)return;const B=w.reduce((U,I)=>I.selected?[...U,Ha(I.id,!1)]:U,[]),R=S.reduce((U,I)=>I.selected?[...U,Ha(I.id,!1)]:U,[]);k(B),E(R)},setNodeExtent:S=>{const{nodes:w,nodeLookup:k,parentLookup:E,nodeOrigin:M,elevateNodesOnSelect:B,nodeExtent:R,zIndexMode:U}=_();S[0][0]===R[0][0]&&S[0][1]===R[0][1]&&S[1][0]===R[1][0]&&S[1][1]===R[1][1]||(dp(w,k,E,{nodeOrigin:M,nodeExtent:S,elevateNodesOnSelect:B,checkEquality:!1,zIndexMode:U}),x({nodeExtent:S}))},panBy:S=>{const{transform:w,width:k,height:E,panZoom:M,translateExtent:B}=_();return fI({delta:S,panZoom:M,transform:w,translateExtent:B,width:k,height:E})},setCenter:async(S,w,k)=>{const{width:E,height:M,maxZoom:B,panZoom:R}=_();if(!R)return!1;const U=typeof(k==null?void 0:k.zoom)<"u"?k.zoom:B;return await R.setViewport({x:E/2-S*U,y:M/2-w*U,zoom:U},{duration:k==null?void 0:k.duration,ease:k==null?void 0:k.ease,interpolate:k==null?void 0:k.interpolate}),!0},cancelConnection:()=>{x({connection:{...GE}})},updateConnection:S=>{x({connection:S})},reset:()=>x({...V1()})}},Object.is);function j9({initialNodes:e,initialEdges:t,defaultNodes:r,defaultEdges:a,initialWidth:s,initialHeight:o,initialMinZoom:c,initialMaxZoom:d,initialFitViewOptions:h,fitView:f,nodeOrigin:m,nodeExtent:g,zIndexMode:y,children:x}){const[_]=ee.useState(()=>R9({nodes:e,edges:t,defaultNodes:r,defaultEdges:a,width:s,height:o,fitView:f,minZoom:c,maxZoom:d,fitViewOptions:h,nodeOrigin:m,nodeExtent:g,zIndexMode:y}));return p.jsx(YI,{value:_,children:p.jsx(b8,{children:p.jsx(R8,{children:x})})})}function D9({children:e,nodes:t,edges:r,defaultNodes:a,defaultEdges:s,width:o,height:c,fitView:d,fitViewOptions:h,minZoom:f,maxZoom:m,nodeOrigin:g,nodeExtent:y,zIndexMode:x}){return ee.useContext(nd)?p.jsx(p.Fragment,{children:e}):p.jsx(j9,{initialNodes:t,initialEdges:r,defaultNodes:a,defaultEdges:s,initialWidth:o,initialHeight:c,fitView:d,initialFitViewOptions:h,initialMinZoom:f,initialMaxZoom:m,nodeOrigin:g,nodeExtent:y,zIndexMode:x,children:e})}const L9={width:"100%",height:"100%",overflow:"hidden",position:"relative",zIndex:0};function z9({nodes:e,edges:t,defaultNodes:r,defaultEdges:a,className:s,nodeTypes:o,edgeTypes:c,onNodeClick:d,onEdgeClick:h,onInit:f,onMove:m,onMoveStart:g,onMoveEnd:y,onConnect:x,onConnectStart:_,onConnectEnd:N,onClickConnectStart:S,onClickConnectEnd:w,onNodeMouseEnter:k,onNodeMouseMove:E,onNodeMouseLeave:M,onNodeContextMenu:B,onNodeDoubleClick:R,onNodeDragStart:U,onNodeDrag:I,onNodeDragStop:X,onNodesDelete:j,onEdgesDelete:z,onDelete:V,onSelectionChange:P,onSelectionDragStart:T,onSelectionDrag:$,onSelectionDragStop:O,onSelectionContextMenu:H,onSelectionStart:K,onSelectionEnd:Z,onBeforeDelete:C,connectionMode:D,connectionLineType:Y=ca.Bezier,connectionLineStyle:L,connectionLineComponent:G,connectionLineContainerStyle:q,deleteKeyCode:Q="Backspace",selectionKeyCode:J="Shift",selectionOnDrag:W=!1,selectionMode:te=No.Full,panActivationKeyCode:ce="Space",multiSelectionKeyCode:fe=ko()?"Meta":"Control",zoomActivationKeyCode:be=ko()?"Meta":"Control",snapToGrid:we,snapGrid:Ne,onlyRenderVisibleElements:De=!1,selectNodesOnDrag:$e,nodesDraggable:st,autoPanOnNodeFocus:Rt,nodesConnectable:Yt,nodesFocusable:Pt,nodeOrigin:Xt=EN,edgesFocusable:Yn,edgesReconnectable:En,elementsSelectable:ct=!0,defaultViewport:It=s8,minZoom:ue=.5,maxZoom:xe=2,translateExtent:Oe=Eo,preventScrolling:Fe=!0,nodeExtent:Ze,defaultMarkerColor:on="#b1b1b7",zoomOnScroll:Nn=!0,zoomOnPinch:Kt=!0,panOnScroll:At=!1,panOnScrollSpeed:Wt=.5,panOnScrollMode:ut=Fa.Free,zoomOnDoubleClick:In=!0,panOnDrag:cn=!0,onPaneClick:Ni,onPaneMouseEnter:nt,onPaneMouseMove:Xn,onPaneMouseLeave:On,onPaneScroll:hn,onPaneContextMenu:re,paneClickDistance:me=1,nodeClickDistance:Ee=0,children:Pe,onReconnect:St,onReconnectStart:gt,onReconnectEnd:Ae,onEdgeContextMenu:Se,onEdgeDoubleClick:Ue,onEdgeMouseEnter:Bt,onEdgeMouseMove:Mt,onEdgeMouseLeave:xr,reconnectRadius:Si=10,onNodesChange:ki,onEdgesChange:lr,noDragClassName:Ut="nodrag",noWheelClassName:mn="nowheel",noPanClassName:yr="nopan",fitView:Ci,fitViewOptions:ga,connectOnClick:Ti,attributionPosition:ts,proOptions:Wr,defaultEdgeOptions:ba,elevateNodesOnSelect:bn=!0,elevateEdgesOnSelect:vr=!1,disableKeyboardA11y:_r=!1,autoPanOnConnect:Br,autoPanOnNodeDrag:Ft,autoPanOnSelection:ns=!0,autoPanSpeed:Jr,connectionRadius:wr,isValidConnection:ye,onError:Le,style:Qe,id:ft,nodeDragThreshold:Ht,connectionDragThreshold:pn,viewport:Rn,onViewportChange:Sn,width:_t,height:jn,colorMode:rs="light",debug:Ai,onScroll:Ur,ariaLabelConfig:Mi,zIndexMode:is="basic",...kn},xa){const Er=ft||"1",Oi=u8(rs),un=ee.useCallback(ya=>{ya.currentTarget.scrollTo({top:0,left:0,behavior:"instant"}),Ur==null||Ur(ya)},[Ur]);return p.jsx("div",{"data-testid":"rf__wrapper",...kn,onScroll:un,style:{...Qe,...L9},ref:xa,className:ln(["react-flow",s,Oi]),id:ft,role:"application",children:p.jsxs(D9,{nodes:e,edges:t,width:_t,height:jn,fitView:Ci,fitViewOptions:ga,minZoom:ue,maxZoom:xe,nodeOrigin:Xt,nodeExtent:Ze,zIndexMode:is,children:[p.jsx(c8,{nodes:e,edges:t,defaultNodes:r,defaultEdges:a,onConnect:x,onConnectStart:_,onConnectEnd:N,onClickConnectStart:S,onClickConnectEnd:w,nodesDraggable:st,autoPanOnNodeFocus:Rt,nodesConnectable:Yt,nodesFocusable:Pt,edgesFocusable:Yn,edgesReconnectable:En,elementsSelectable:ct,elevateNodesOnSelect:bn,elevateEdgesOnSelect:vr,minZoom:ue,maxZoom:xe,nodeExtent:Ze,onNodesChange:ki,onEdgesChange:lr,snapToGrid:we,snapGrid:Ne,connectionMode:D,translateExtent:Oe,connectOnClick:Ti,defaultEdgeOptions:ba,fitView:Ci,fitViewOptions:ga,onNodesDelete:j,onEdgesDelete:z,onDelete:V,onNodeDragStart:U,onNodeDrag:I,onNodeDragStop:X,onSelectionDrag:$,onSelectionDragStart:T,onSelectionDragStop:O,onMove:m,onMoveStart:g,onMoveEnd:y,noPanClassName:yr,nodeOrigin:Xt,rfId:Er,autoPanOnConnect:Br,autoPanOnNodeDrag:Ft,autoPanSpeed:Jr,onError:Le,connectionRadius:wr,isValidConnection:ye,selectNodesOnDrag:$e,nodeDragThreshold:Ht,connectionDragThreshold:pn,onBeforeDelete:C,debug:Ai,ariaLabelConfig:Mi,zIndexMode:is}),p.jsx(M9,{onInit:f,onNodeClick:d,onEdgeClick:h,onNodeMouseEnter:k,onNodeMouseMove:E,onNodeMouseLeave:M,onNodeContextMenu:B,onNodeDoubleClick:R,nodeTypes:o,edgeTypes:c,connectionLineType:Y,connectionLineStyle:L,connectionLineComponent:G,connectionLineContainerStyle:q,selectionKeyCode:J,selectionOnDrag:W,selectionMode:te,deleteKeyCode:Q,multiSelectionKeyCode:fe,panActivationKeyCode:ce,zoomActivationKeyCode:be,onlyRenderVisibleElements:De,defaultViewport:It,translateExtent:Oe,minZoom:ue,maxZoom:xe,preventScrolling:Fe,zoomOnScroll:Nn,zoomOnPinch:Kt,zoomOnDoubleClick:In,panOnScroll:At,panOnScrollSpeed:Wt,panOnScrollMode:ut,panOnDrag:cn,autoPanOnSelection:ns,onPaneClick:Ni,onPaneMouseEnter:nt,onPaneMouseMove:Xn,onPaneMouseLeave:On,onPaneScroll:hn,onPaneContextMenu:re,paneClickDistance:me,nodeClickDistance:Ee,onSelectionContextMenu:H,onSelectionStart:K,onSelectionEnd:Z,onReconnect:St,onReconnectStart:gt,onReconnectEnd:Ae,onEdgeContextMenu:Se,onEdgeDoubleClick:Ue,onEdgeMouseEnter:Bt,onEdgeMouseMove:Mt,onEdgeMouseLeave:xr,reconnectRadius:Si,defaultMarkerColor:on,noDragClassName:Ut,noWheelClassName:mn,noPanClassName:yr,rfId:Er,disableKeyboardA11y:_r,nodeExtent:Ze,viewport:Rn,onViewportChange:Sn,nodesDraggable:st}),p.jsx(a8,{onSelectionChange:P}),Pe,p.jsx(e8,{proOptions:Wr,position:ts}),p.jsx(JI,{rfId:Er,disableKeyboardA11y:_r})]})})}var I9=CN(z9);function B9(e){const[t,r]=ee.useState(e),a=ee.useCallback(s=>r(o=>SN(s,o)),[]);return[t,r,a]}function U9(e){const[t,r]=ee.useState(e),a=ee.useCallback(s=>r(o=>kN(s,o)),[]);return[t,r,a]}function H9({dimensions:e,lineWidth:t,variant:r,className:a}){return p.jsx("path",{strokeWidth:t,d:`M${e[0]/2} 0 V${e[1]} M0 ${e[1]/2} H${e[0]}`,className:ln(["react-flow__background-pattern",r,a])})}function $9({radius:e,className:t}){return p.jsx("circle",{cx:e,cy:e,r:e,className:ln(["react-flow__background-pattern","dots",t])})}var fa;(function(e){e.Lines="lines",e.Dots="dots",e.Cross="cross"})(fa||(fa={}));const q9={[fa.Dots]:1,[fa.Lines]:1,[fa.Cross]:6},P9=e=>({transform:e.transform,patternId:`pattern-${e.rfId}`});function JN({id:e,variant:t=fa.Dots,gap:r=20,size:a,lineWidth:s=1,offset:o=0,color:c,bgColor:d,style:h,className:f,patternClassName:m}){const g=ee.useRef(null),{transform:y,patternId:x}=dt(P9,qt),_=a||q9[t],N=t===fa.Dots,S=t===fa.Cross,w=Array.isArray(r)?r:[r,r],k=[w[0]*y[2]||1,w[1]*y[2]||1],E=_*y[2],M=Array.isArray(o)?o:[o,o],B=S?[E,E]:k,R=[M[0]*y[2]||1+B[0]/2,M[1]*y[2]||1+B[1]/2],U=`${x}${e||""}`;return p.jsxs("svg",{className:ln(["react-flow__background",f]),style:{...h,...id,"--xy-background-color-props":d,"--xy-background-pattern-color-props":c},ref:g,"data-testid":"rf__background",children:[p.jsx("pattern",{id:U,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:N?p.jsx($9,{radius:E/2,className:m}):p.jsx(H9,{dimensions:B,lineWidth:s,variant:t,className:m})}),p.jsx("rect",{x:"0",y:"0",width:"100%",height:"100%",fill:`url(#${U})`})]})}JN.displayName="Background";const F9=ee.memo(JN);function G9(){return p.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",children:p.jsx("path",{d:"M32 18.133H18.133V32h-4.266V18.133H0v-4.266h13.867V0h4.266v13.867H32z"})})}function V9(){return p.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 5",children:p.jsx("path",{d:"M0 0h32v4.2H0z"})})}function Y9(){return p.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 30",children:p.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 X9(){return p.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 25 32",children:p.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 K9(){return p.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 25 32",children:p.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 fu({children:e,className:t,...r}){return p.jsx("button",{type:"button",className:ln(["react-flow__controls-button",t]),...r,children:e})}const Z9=e=>({isInteractive:e.nodesDraggable||e.nodesConnectable||e.elementsSelectable,minZoomReached:e.transform[2]<=e.minZoom,maxZoomReached:e.transform[2]>=e.maxZoom,ariaLabelConfig:e.ariaLabelConfig});function eS({style:e,showZoom:t=!0,showFitView:r=!0,showInteractive:a=!0,fitViewOptions:s,onZoomIn:o,onZoomOut:c,onFitView:d,onInteractiveChange:h,className:f,children:m,position:g="bottom-left",orientation:y="vertical","aria-label":x}){const _=Lt(),{isInteractive:N,minZoomReached:S,maxZoomReached:w,ariaLabelConfig:k}=dt(Z9,qt),{zoomIn:E,zoomOut:M,fitView:B}=Ho(),R=()=>{E(),o==null||o()},U=()=>{M(),c==null||c()},I=()=>{B(s),d==null||d()},X=()=>{_.setState({nodesDraggable:!N,nodesConnectable:!N,elementsSelectable:!N}),h==null||h(!N)},j=y==="horizontal"?"horizontal":"vertical";return p.jsxs(rd,{className:ln(["react-flow__controls",j,f]),position:g,style:e,"data-testid":"rf__controls","aria-label":x??k["controls.ariaLabel"],children:[t&&p.jsxs(p.Fragment,{children:[p.jsx(fu,{onClick:R,className:"react-flow__controls-zoomin",title:k["controls.zoomIn.ariaLabel"],"aria-label":k["controls.zoomIn.ariaLabel"],disabled:w,children:p.jsx(G9,{})}),p.jsx(fu,{onClick:U,className:"react-flow__controls-zoomout",title:k["controls.zoomOut.ariaLabel"],"aria-label":k["controls.zoomOut.ariaLabel"],disabled:S,children:p.jsx(V9,{})})]}),r&&p.jsx(fu,{className:"react-flow__controls-fitview",onClick:I,title:k["controls.fitView.ariaLabel"],"aria-label":k["controls.fitView.ariaLabel"],children:p.jsx(Y9,{})}),a&&p.jsx(fu,{className:"react-flow__controls-interactive",onClick:X,title:k["controls.interactive.ariaLabel"],"aria-label":k["controls.interactive.ariaLabel"],children:N?p.jsx(K9,{}):p.jsx(X9,{})}),m]})}eS.displayName="Controls";const Q9=ee.memo(eS);function W9({id:e,x:t,y:r,width:a,height:s,style:o,color:c,strokeColor:d,strokeWidth:h,className:f,borderRadius:m,shapeRendering:g,selected:y,onClick:x}){const{background:_,backgroundColor:N}=o||{},S=c||_||N;return p.jsx("rect",{className:ln(["react-flow__minimap-node",{selected:y},f]),x:t,y:r,rx:m,ry:m,width:a,height:s,style:{fill:S,stroke:d,strokeWidth:h},shapeRendering:g,onClick:x?w=>x(w,e):void 0})}const J9=ee.memo(W9),eB=e=>e.nodes.map(t=>t.id),Am=e=>e instanceof Function?e:()=>e;function tB({nodeStrokeColor:e,nodeColor:t,nodeClassName:r="",nodeBorderRadius:a=5,nodeStrokeWidth:s,nodeComponent:o=J9,onClick:c}){const d=dt(eB,qt),h=Am(t),f=Am(e),m=Am(r),g=typeof window>"u"||window.chrome?"crispEdges":"geometricPrecision";return p.jsx(p.Fragment,{children:d.map(y=>p.jsx(rB,{id:y,nodeColorFunc:h,nodeStrokeColorFunc:f,nodeClassNameFunc:m,nodeBorderRadius:a,nodeStrokeWidth:s,NodeComponent:o,onClick:c,shapeRendering:g},y))})}function nB({id:e,nodeColorFunc:t,nodeStrokeColorFunc:r,nodeClassNameFunc:a,nodeBorderRadius:s,nodeStrokeWidth:o,shapeRendering:c,NodeComponent:d,onClick:h}){const{node:f,x:m,y:g,width:y,height:x}=dt(_=>{const N=_.nodeLookup.get(e);if(!N)return{node:void 0,x:0,y:0,width:0,height:0};const S=N.internals.userNode,{x:w,y:k}=N.internals.positionAbsolute,{width:E,height:M}=Qr(S);return{node:S,x:w,y:k,width:E,height:M}},qt);return!f||f.hidden||!JE(f)?null:p.jsx(d,{x:m,y:g,width:y,height:x,style:f.style,selected:!!f.selected,className:a(f),color:t(f),borderRadius:s,strokeColor:r(f),strokeWidth:o,shapeRendering:c,onClick:h,id:f.id})}const rB=ee.memo(nB);var iB=ee.memo(tB);const aB=200,sB=150,lB=e=>!e.hidden,oB=e=>{const t={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:t,boundingRect:e.nodeLookup.size>0?ZE(Io(e.nodeLookup,{filter:lB}),t):t,rfId:e.rfId,panZoom:e.panZoom,translateExtent:e.translateExtent,flowWidth:e.width,flowHeight:e.height,ariaLabelConfig:e.ariaLabelConfig}},Y1=(e,t)=>e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height,cB=(e,t)=>Y1(e.viewBB,t.viewBB)&&Y1(e.boundingRect,t.boundingRect)&&e.rfId===t.rfId&&e.panZoom===t.panZoom&&e.translateExtent===t.translateExtent&&e.flowWidth===t.flowWidth&&e.flowHeight===t.flowHeight&&e.ariaLabelConfig===t.ariaLabelConfig,uB="react-flow__minimap-desc";function tS({style:e,className:t,nodeStrokeColor:r,nodeColor:a,nodeClassName:s="",nodeBorderRadius:o=5,nodeStrokeWidth:c,nodeComponent:d,bgColor:h,maskColor:f,maskStrokeColor:m,maskStrokeWidth:g,position:y="bottom-right",onClick:x,onNodeClick:_,pannable:N=!1,zoomable:S=!1,ariaLabel:w,inversePan:k,zoomStep:E=1,offsetScale:M=5}){const B=Lt(),R=ee.useRef(null),{boundingRect:U,viewBB:I,rfId:X,panZoom:j,translateExtent:z,flowWidth:V,flowHeight:P,ariaLabelConfig:T}=dt(oB,cB),$=(e==null?void 0:e.width)??aB,O=(e==null?void 0:e.height)??sB,H=U.width/$,K=U.height/O,Z=Math.max(H,K),C=Z*$,D=Z*O,Y=M*Z,L=U.x-(C-U.width)/2-Y,G=U.y-(D-U.height)/2-Y,q=C+Y*2,Q=D+Y*2,J=`${uB}-${X}`,W=ee.useRef(0),te=ee.useRef();W.current=Z,ee.useEffect(()=>{if(R.current&&j)return te.current=_I({domNode:R.current,panZoom:j,getTransform:()=>B.getState().transform,getViewScale:()=>W.current}),()=>{var we;(we=te.current)==null||we.destroy()}},[j]),ee.useEffect(()=>{var we;(we=te.current)==null||we.update({translateExtent:z,width:V,height:P,inversePan:k,pannable:N,zoomStep:E,zoomable:S})},[N,S,k,E,z,V,P]);const ce=x?we=>{var $e;const[Ne,De]=(($e=te.current)==null?void 0:$e.pointer(we))||[0,0];x(we,{x:Ne,y:De})}:void 0,fe=_?ee.useCallback((we,Ne)=>{const De=B.getState().nodeLookup.get(Ne).internals.userNode;_(we,De)},[]):void 0,be=w??T["minimap.ariaLabel"];return p.jsx(rd,{position:y,style:{...e,"--xy-minimap-background-color-props":typeof h=="string"?h:void 0,"--xy-minimap-mask-background-color-props":typeof f=="string"?f:void 0,"--xy-minimap-mask-stroke-color-props":typeof m=="string"?m:void 0,"--xy-minimap-mask-stroke-width-props":typeof g=="number"?g*Z:void 0,"--xy-minimap-node-background-color-props":typeof a=="string"?a:void 0,"--xy-minimap-node-stroke-color-props":typeof r=="string"?r:void 0,"--xy-minimap-node-stroke-width-props":typeof c=="number"?c:void 0},className:ln(["react-flow__minimap",t]),"data-testid":"rf__minimap",children:p.jsxs("svg",{width:$,height:O,viewBox:`${L} ${G} ${q} ${Q}`,className:"react-flow__minimap-svg",role:"img","aria-labelledby":J,ref:R,onClick:ce,children:[be&&p.jsx("title",{id:J,children:be}),p.jsx(iB,{onClick:fe,nodeColor:a,nodeStrokeColor:r,nodeBorderRadius:o,nodeClassName:s,nodeStrokeWidth:c,nodeComponent:d}),p.jsx("path",{className:"react-flow__minimap-mask",d:`M${L-Y},${G-Y}h${q+Y*2}v${Q+Y*2}h${-q-Y*2}z - M${I.x},${I.y}h${I.width}v${I.height}h${-I.width}z`,fillRule:"evenodd",pointerEvents:"none"})]})})}tS.displayName="MiniMap";const dB=ee.memo(tS),fB=e=>t=>e?`${Math.max(1/t.transform[2],1)}`:void 0,hB={[el.Line]:"right",[el.Handle]:"bottom-right"};function mB({nodeId:e,position:t,variant:r=el.Handle,className:a,style:s=void 0,children:o,color:c,minWidth:d=10,minHeight:h=10,maxWidth:f=Number.MAX_VALUE,maxHeight:m=Number.MAX_VALUE,keepAspectRatio:g=!1,resizeDirection:y,autoScale:x=!0,shouldResize:_,onResizeStart:N,onResize:S,onResizeEnd:w}){const k=RN(),E=typeof e=="string"?e:k,M=Lt(),B=ee.useRef(null),R=r===el.Handle,U=dt(ee.useCallback(fB(R&&x),[R,x]),qt),I=ee.useRef(null),X=t??hB[r];ee.useEffect(()=>{if(!(!B.current||!E))return I.current||(I.current=DI({domNode:B.current,nodeId:E,getStoreItems:()=>{const{nodeLookup:z,transform:V,snapGrid:P,snapToGrid:T,nodeOrigin:$,domNode:O}=M.getState();return{nodeLookup:z,transform:V,snapGrid:P,snapToGrid:T,nodeOrigin:$,paneDomNode:O}},onChange:(z,V)=>{const{triggerNodeChanges:P,nodeLookup:T,parentLookup:$,nodeOrigin:O}=M.getState(),H=[],K={x:z.x,y:z.y},Z=T.get(E);if(Z&&Z.expandParent&&Z.parentId){const C=Z.origin??O,D=z.width??Z.measured.width??0,Y=z.height??Z.measured.height??0,L={id:Z.id,parentId:Z.parentId,rect:{width:D,height:Y,...eN({x:z.x??Z.position.x,y:z.y??Z.position.y},{width:D,height:Y},Z.parentId,T,C)}},G=cg([L],T,$,O);H.push(...G),K.x=z.x?Math.max(C[0]*D,z.x):void 0,K.y=z.y?Math.max(C[1]*Y,z.y):void 0}if(K.x!==void 0&&K.y!==void 0){const C={id:E,type:"position",position:{...K}};H.push(C)}if(z.width!==void 0&&z.height!==void 0){const D={id:E,type:"dimensions",resizing:!0,setAttributes:y?y==="horizontal"?"width":"height":!0,dimensions:{width:z.width,height:z.height}};H.push(D)}for(const C of V){const D={...C,type:"position"};H.push(D)}P(H)},onEnd:({width:z,height:V})=>{const P={id:E,type:"dimensions",resizing:!1,dimensions:{width:z,height:V}};M.getState().triggerNodeChanges([P])}})),I.current.update({controlPosition:X,boundaries:{minWidth:d,minHeight:h,maxWidth:f,maxHeight:m},keepAspectRatio:g,resizeDirection:y,onResizeStart:N,onResize:S,onResizeEnd:w,shouldResize:_}),()=>{var z;(z=I.current)==null||z.destroy()}},[X,d,h,f,m,g,N,S,w,_]);const j=X.split("-");return p.jsx("div",{className:ln(["react-flow__resize-control","nodrag",...j,r,a]),ref:B,style:{...s,scale:U,...c&&{[R?"backgroundColor":"borderColor"]:c}},children:o})}ee.memo(mB);var vt=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),zr=vt((e,t)=>{var r=Object.defineProperty,a=(P,T,$)=>T in P?r(P,T,{enumerable:!0,configurable:!0,writable:!0,value:$}):P[T]=$,s=(P,T)=>()=>(T||P((T={exports:{}}).exports,T),T.exports),o=(P,T,$)=>a(P,typeof T!="symbol"?T+"":T,$),c=s((P,T)=>{var $="\0",O="\0",H="",K=class{constructor(G){o(this,"_isDirected",!0),o(this,"_isMultigraph",!1),o(this,"_isCompound",!1),o(this,"_label"),o(this,"_defaultNodeLabelFn",()=>{}),o(this,"_defaultEdgeLabelFn",()=>{}),o(this,"_nodes",{}),o(this,"_in",{}),o(this,"_preds",{}),o(this,"_out",{}),o(this,"_sucs",{}),o(this,"_edgeObjs",{}),o(this,"_edgeLabels",{}),o(this,"_nodeCount",0),o(this,"_edgeCount",0),o(this,"_parent"),o(this,"_children"),G&&(this._isDirected=Object.hasOwn(G,"directed")?G.directed:!0,this._isMultigraph=Object.hasOwn(G,"multigraph")?G.multigraph:!1,this._isCompound=Object.hasOwn(G,"compound")?G.compound:!1),this._isCompound&&(this._parent={},this._children={},this._children[O]={})}isDirected(){return this._isDirected}isMultigraph(){return this._isMultigraph}isCompound(){return this._isCompound}setGraph(G){return this._label=G,this}graph(){return this._label}setDefaultNodeLabel(G){return this._defaultNodeLabelFn=G,typeof G!="function"&&(this._defaultNodeLabelFn=()=>G),this}nodeCount(){return this._nodeCount}nodes(){return Object.keys(this._nodes)}sources(){var G=this;return this.nodes().filter(q=>Object.keys(G._in[q]).length===0)}sinks(){var G=this;return this.nodes().filter(q=>Object.keys(G._out[q]).length===0)}setNodes(G,q){var Q=arguments,J=this;return G.forEach(function(W){Q.length>1?J.setNode(W,q):J.setNode(W)}),this}setNode(G,q){return Object.hasOwn(this._nodes,G)?(arguments.length>1&&(this._nodes[G]=q),this):(this._nodes[G]=arguments.length>1?q:this._defaultNodeLabelFn(G),this._isCompound&&(this._parent[G]=O,this._children[G]={},this._children[O][G]=!0),this._in[G]={},this._preds[G]={},this._out[G]={},this._sucs[G]={},++this._nodeCount,this)}node(G){return this._nodes[G]}hasNode(G){return Object.hasOwn(this._nodes,G)}removeNode(G){var q=this;if(Object.hasOwn(this._nodes,G)){var Q=J=>q.removeEdge(q._edgeObjs[J]);delete this._nodes[G],this._isCompound&&(this._removeFromParentsChildList(G),delete this._parent[G],this.children(G).forEach(function(J){q.setParent(J)}),delete this._children[G]),Object.keys(this._in[G]).forEach(Q),delete this._in[G],delete this._preds[G],Object.keys(this._out[G]).forEach(Q),delete this._out[G],delete this._sucs[G],--this._nodeCount}return this}setParent(G,q){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(q===void 0)q=O;else{q+="";for(var Q=q;Q!==void 0;Q=this.parent(Q))if(Q===G)throw new Error("Setting "+q+" as parent of "+G+" would create a cycle");this.setNode(q)}return this.setNode(G),this._removeFromParentsChildList(G),this._parent[G]=q,this._children[q][G]=!0,this}_removeFromParentsChildList(G){delete this._children[this._parent[G]][G]}parent(G){if(this._isCompound){var q=this._parent[G];if(q!==O)return q}}children(G=O){if(this._isCompound){var q=this._children[G];if(q)return Object.keys(q)}else{if(G===O)return this.nodes();if(this.hasNode(G))return[]}}predecessors(G){var q=this._preds[G];if(q)return Object.keys(q)}successors(G){var q=this._sucs[G];if(q)return Object.keys(q)}neighbors(G){var q=this.predecessors(G);if(q){let J=new Set(q);for(var Q of this.successors(G))J.add(Q);return Array.from(J.values())}}isLeaf(G){var q;return this.isDirected()?q=this.successors(G):q=this.neighbors(G),q.length===0}filterNodes(G){var q=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});q.setGraph(this.graph());var Q=this;Object.entries(this._nodes).forEach(function([te,ce]){G(te)&&q.setNode(te,ce)}),Object.values(this._edgeObjs).forEach(function(te){q.hasNode(te.v)&&q.hasNode(te.w)&&q.setEdge(te,Q.edge(te))});var J={};function W(te){var ce=Q.parent(te);return ce===void 0||q.hasNode(ce)?(J[te]=ce,ce):ce in J?J[ce]:W(ce)}return this._isCompound&&q.nodes().forEach(te=>q.setParent(te,W(te))),q}setDefaultEdgeLabel(G){return this._defaultEdgeLabelFn=G,typeof G!="function"&&(this._defaultEdgeLabelFn=()=>G),this}edgeCount(){return this._edgeCount}edges(){return Object.values(this._edgeObjs)}setPath(G,q){var Q=this,J=arguments;return G.reduce(function(W,te){return J.length>1?Q.setEdge(W,te,q):Q.setEdge(W,te),te}),this}setEdge(){var G,q,Q,J,W=!1,te=arguments[0];typeof te=="object"&&te!==null&&"v"in te?(G=te.v,q=te.w,Q=te.name,arguments.length===2&&(J=arguments[1],W=!0)):(G=te,q=arguments[1],Q=arguments[3],arguments.length>2&&(J=arguments[2],W=!0)),G=""+G,q=""+q,Q!==void 0&&(Q=""+Q);var ce=D(this._isDirected,G,q,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(G),this.setNode(q),this._edgeLabels[ce]=W?J:this._defaultEdgeLabelFn(G,q,Q);var fe=Y(this._isDirected,G,q,Q);return G=fe.v,q=fe.w,Object.freeze(fe),this._edgeObjs[ce]=fe,Z(this._preds[q],G),Z(this._sucs[G],q),this._in[q][ce]=fe,this._out[G][ce]=fe,this._edgeCount++,this}edge(G,q,Q){var J=arguments.length===1?L(this._isDirected,arguments[0]):D(this._isDirected,G,q,Q);return this._edgeLabels[J]}edgeAsObj(){let G=this.edge(...arguments);return typeof G!="object"?{label:G}:G}hasEdge(G,q,Q){var J=arguments.length===1?L(this._isDirected,arguments[0]):D(this._isDirected,G,q,Q);return Object.hasOwn(this._edgeLabels,J)}removeEdge(G,q,Q){var J=arguments.length===1?L(this._isDirected,arguments[0]):D(this._isDirected,G,q,Q),W=this._edgeObjs[J];return W&&(G=W.v,q=W.w,delete this._edgeLabels[J],delete this._edgeObjs[J],C(this._preds[q],G),C(this._sucs[G],q),delete this._in[q][J],delete this._out[G][J],this._edgeCount--),this}inEdges(G,q){return this.isDirected()?this.filterEdges(this._in[G],G,q):this.nodeEdges(G,q)}outEdges(G,q){return this.isDirected()?this.filterEdges(this._out[G],G,q):this.nodeEdges(G,q)}nodeEdges(G,q){if(G in this._nodes)return this.filterEdges({...this._in[G],...this._out[G]},G,q)}filterEdges(G,q,Q){if(G){var J=Object.values(G);return Q?J.filter(function(W){return W.v===q&&W.w===Q||W.v===Q&&W.w===q}):J}}};function Z(G,q){G[q]?G[q]++:G[q]=1}function C(G,q){--G[q]||delete G[q]}function D(G,q,Q,J){var W=""+q,te=""+Q;if(!G&&W>te){var ce=W;W=te,te=ce}return W+H+te+H+(J===void 0?$:J)}function Y(G,q,Q,J){var W=""+q,te=""+Q;if(!G&&W>te){var ce=W;W=te,te=ce}var fe={v:W,w:te};return J&&(fe.name=J),fe}function L(G,q){return D(G,q.v,q.w,q.name)}T.exports=K}),d=s((P,T)=>{T.exports="3.0.2"}),h=s((P,T)=>{T.exports={Graph:c(),version:d()}}),f=s((P,T)=>{var $=c();T.exports={write:O,read:Z};function O(C){var D={options:{directed:C.isDirected(),multigraph:C.isMultigraph(),compound:C.isCompound()},nodes:H(C),edges:K(C)};return C.graph()!==void 0&&(D.value=structuredClone(C.graph())),D}function H(C){return C.nodes().map(function(D){var Y=C.node(D),L=C.parent(D),G={v:D};return Y!==void 0&&(G.value=Y),L!==void 0&&(G.parent=L),G})}function K(C){return C.edges().map(function(D){var Y=C.edge(D),L={v:D.v,w:D.w};return D.name!==void 0&&(L.name=D.name),Y!==void 0&&(L.value=Y),L})}function Z(C){var D=new $(C.options).setGraph(C.value);return C.nodes.forEach(function(Y){D.setNode(Y.v,Y.value),Y.parent&&D.setParent(Y.v,Y.parent)}),C.edges.forEach(function(Y){D.setEdge({v:Y.v,w:Y.w,name:Y.name},Y.value)}),D}}),m=s((P,T)=>{T.exports=O;var $=()=>1;function O(K,Z,C,D){return H(K,String(Z),C||$,D||function(Y){return K.outEdges(Y)})}function H(K,Z,C,D){var Y={},L=!0,G=0,q=K.nodes(),Q=function(ce){var fe=C(ce);Y[ce.v].distance+fe{T.exports=$;function $(O){var H={},K=[],Z;function C(D){Object.hasOwn(H,D)||(H[D]=!0,Z.push(D),O.successors(D).forEach(C),O.predecessors(D).forEach(C))}return O.nodes().forEach(function(D){Z=[],C(D),Z.length&&K.push(Z)}),K}}),y=s((P,T)=>{var $=class{constructor(){o(this,"_arr",[]),o(this,"_keyIndices",{})}size(){return this._arr.length}keys(){return this._arr.map(function(O){return O.key})}has(O){return Object.hasOwn(this._keyIndices,O)}priority(O){var H=this._keyIndices[O];if(H!==void 0)return this._arr[H].priority}min(){if(this.size()===0)throw new Error("Queue underflow");return this._arr[0].key}add(O,H){var K=this._keyIndices;if(O=String(O),!Object.hasOwn(K,O)){var Z=this._arr,C=Z.length;return K[O]=C,Z.push({key:O,priority:H}),this._decrease(C),!0}return!1}removeMin(){this._swap(0,this._arr.length-1);var O=this._arr.pop();return delete this._keyIndices[O.key],this._heapify(0),O.key}decrease(O,H){var K=this._keyIndices[O];if(H>this._arr[K].priority)throw new Error("New priority is greater than current priority. Key: "+O+" Old: "+this._arr[K].priority+" New: "+H);this._arr[K].priority=H,this._decrease(K)}_heapify(O){var H=this._arr,K=2*O,Z=K+1,C=O;K>1,!(H[Z].priority{var $=y();T.exports=H;var O=()=>1;function H(Z,C,D,Y){var L=function(G){return Z.outEdges(G)};return K(Z,String(C),D||O,Y||L)}function K(Z,C,D,Y){var L={},G=new $,q,Q,J=function(W){var te=W.v!==q?W.v:W.w,ce=L[te],fe=D(W),be=Q.distance+fe;if(fe<0)throw new Error("dijkstra does not allow negative edge weights. Bad edge: "+W+" Weight: "+fe);be0&&(q=G.removeMin(),Q=L[q],Q.distance!==Number.POSITIVE_INFINITY);)Y(q).forEach(J);return L}}),_=s((P,T)=>{var $=x();T.exports=O;function O(H,K,Z){return H.nodes().reduce(function(C,D){return C[D]=$(H,D,K,Z),C},{})}}),N=s((P,T)=>{T.exports=$;function $(H,K,Z){if(H[K].predecessor!==void 0)throw new Error("Invalid source vertex");if(H[Z].predecessor===void 0&&Z!==K)throw new Error("Invalid destination vertex");return{weight:H[Z].distance,path:O(H,K,Z)}}function O(H,K,Z){for(var C=[],D=Z;D!==K;)C.push(D),D=H[D].predecessor;return C.push(K),C.reverse()}}),S=s((P,T)=>{T.exports=$;function $(O){var H=0,K=[],Z={},C=[];function D(Y){var L=Z[Y]={onStack:!0,lowlink:H,index:H++};if(K.push(Y),O.successors(Y).forEach(function(Q){Object.hasOwn(Z,Q)?Z[Q].onStack&&(L.lowlink=Math.min(L.lowlink,Z[Q].index)):(D(Q),L.lowlink=Math.min(L.lowlink,Z[Q].lowlink))}),L.lowlink===L.index){var G=[],q;do q=K.pop(),Z[q].onStack=!1,G.push(q);while(Y!==q);C.push(G)}}return O.nodes().forEach(function(Y){Object.hasOwn(Z,Y)||D(Y)}),C}}),w=s((P,T)=>{var $=S();T.exports=O;function O(H){return $(H).filter(function(K){return K.length>1||K.length===1&&H.hasEdge(K[0],K[0])})}}),k=s((P,T)=>{T.exports=O;var $=()=>1;function O(K,Z,C){return H(K,Z||$,C||function(D){return K.outEdges(D)})}function H(K,Z,C){var D={},Y=K.nodes();return Y.forEach(function(L){D[L]={},D[L][L]={distance:0},Y.forEach(function(G){L!==G&&(D[L][G]={distance:Number.POSITIVE_INFINITY})}),C(L).forEach(function(G){var q=G.v===L?G.w:G.v,Q=Z(G);D[L][q]={distance:Q,predecessor:L}})}),Y.forEach(function(L){var G=D[L];Y.forEach(function(q){var Q=D[q];Y.forEach(function(J){var W=Q[L],te=G[J],ce=Q[J],fe=W.distance+te.distance;fe{function $(H){var K={},Z={},C=[];function D(Y){if(Object.hasOwn(Z,Y))throw new O;Object.hasOwn(K,Y)||(Z[Y]=!0,K[Y]=!0,H.predecessors(Y).forEach(D),delete Z[Y],C.push(Y))}if(H.sinks().forEach(D),Object.keys(K).length!==H.nodeCount())throw new O;return C}var O=class extends Error{constructor(){super(...arguments)}};T.exports=$,$.CycleException=O}),M=s((P,T)=>{var $=E();T.exports=O;function O(H){try{$(H)}catch(K){if(K instanceof $.CycleException)return!1;throw K}return!0}}),B=s((P,T)=>{T.exports=$;function $(H,K,Z,C,D){Array.isArray(K)||(K=[K]);var Y=(H.isDirected()?H.successors:H.neighbors).bind(H),L={};return K.forEach(function(G){if(!H.hasNode(G))throw new Error("Graph does not have node: "+G);D=O(H,G,Z==="post",L,Y,C,D)}),D}function O(H,K,Z,C,D,Y,L){return Object.hasOwn(C,K)||(C[K]=!0,Z||(L=Y(L,K)),D(K).forEach(function(G){L=O(H,G,Z,C,D,Y,L)}),Z&&(L=Y(L,K))),L}}),R=s((P,T)=>{var $=B();T.exports=O;function O(H,K,Z){return $(H,K,Z,function(C,D){return C.push(D),C},[])}}),U=s((P,T)=>{var $=R();T.exports=O;function O(H,K){return $(H,K,"post")}}),I=s((P,T)=>{var $=R();T.exports=O;function O(H,K){return $(H,K,"pre")}}),X=s((P,T)=>{var $=c(),O=y();T.exports=H;function H(K,Z){var C=new $,D={},Y=new O,L;function G(Q){var J=Q.v===L?Q.w:Q.v,W=Y.priority(J);if(W!==void 0){var te=Z(Q);te0;){if(L=Y.removeMin(),Object.hasOwn(D,L))C.setEdge(L,D[L]);else{if(q)throw new Error("Input graph is not connected: "+K);q=!0}K.nodeEdges(L).forEach(G)}return C}}),j=s((P,T)=>{var $=x(),O=m();T.exports=H;function H(Z,C,D,Y){return K(Z,C,D,Y||function(L){return Z.outEdges(L)})}function K(Z,C,D,Y){if(D===void 0)return $(Z,C,D,Y);for(var L=!1,G=Z.nodes(),q=0;q{T.exports={bellmanFord:m(),components:g(),dijkstra:x(),dijkstraAll:_(),extractPath:N(),findCycles:w(),floydWarshall:k(),isAcyclic:M(),postorder:U(),preorder:I(),prim:X(),shortestPaths:j(),reduce:B(),tarjan:S(),topsort:E()}}),V=h();t.exports={Graph:V.Graph,json:f(),alg:z(),version:V.version}}),pB=vt((e,t)=>{var r=class{constructor(){let o={};o._next=o._prev=o,this._sentinel=o}dequeue(){let o=this._sentinel,c=o._prev;if(c!==o)return a(c),c}enqueue(o){let c=this._sentinel;o._prev&&o._next&&a(o),o._next=c._next,c._next._prev=o,c._next=o,o._prev=c}toString(){let o=[],c=this._sentinel,d=c._prev;for(;d!==c;)o.push(JSON.stringify(d,s)),d=d._prev;return"["+o.join(", ")+"]"}};function a(o){o._prev._next=o._next,o._next._prev=o._prev,delete o._next,delete o._prev}function s(o,c){if(o!=="_next"&&o!=="_prev")return c}t.exports=r}),gB=vt((e,t)=>{var r=zr().Graph,a=pB();t.exports=o;var s=()=>1;function o(g,y){if(g.nodeCount()<=1)return[];let x=h(g,y||s);return c(x.graph,x.buckets,x.zeroIdx).flatMap(_=>g.outEdges(_.v,_.w))}function c(g,y,x){let _=[],N=y[y.length-1],S=y[0],w;for(;g.nodeCount();){for(;w=S.dequeue();)d(g,y,x,w);for(;w=N.dequeue();)d(g,y,x,w);if(g.nodeCount()){for(let k=y.length-2;k>0;--k)if(w=y[k].dequeue(),w){_=_.concat(d(g,y,x,w,!0));break}}}return _}function d(g,y,x,_,N){let S=N?[]:void 0;return g.inEdges(_.v).forEach(w=>{let k=g.edge(w),E=g.node(w.v);N&&S.push({v:w.v,w:w.w}),E.out-=k,f(y,x,E)}),g.outEdges(_.v).forEach(w=>{let k=g.edge(w),E=w.w,M=g.node(E);M.in-=k,f(y,x,M)}),g.removeNode(_.v),S}function h(g,y){let x=new r,_=0,N=0;g.nodes().forEach(k=>{x.setNode(k,{v:k,in:0,out:0})}),g.edges().forEach(k=>{let E=x.edge(k.v,k.w)||0,M=y(k),B=E+M;x.setEdge(k.v,k.w,B),N=Math.max(N,x.node(k.v).out+=M),_=Math.max(_,x.node(k.w).in+=M)});let S=m(N+_+3).map(()=>new a),w=_+1;return x.nodes().forEach(k=>{f(S,w,x.node(k))}),{graph:x,buckets:S,zeroIdx:w}}function f(g,y,x){x.out?x.in?g[x.out-x.in+y].enqueue(x):g[g.length-1].enqueue(x):g[0].enqueue(x)}function m(g){let y=[];for(let x=0;x{var r=zr().Graph;t.exports={addBorderNode:y,addDummyNode:a,applyWithChunking:N,asNonCompoundGraph:o,buildLayerMatrix:f,intersectRect:h,mapValues:I,maxRank:S,normalizeRanks:m,notime:E,partition:w,pick:U,predecessorWeights:d,range:R,removeEmptyRanks:g,simplify:s,successorWeights:c,time:k,uniqueId:B,zipObject:X};function a(j,z,V,P){for(var T=P;j.hasNode(T);)T=B(P);return V.dummy=z,j.setNode(T,V),T}function s(j){let z=new r().setGraph(j.graph());return j.nodes().forEach(V=>z.setNode(V,j.node(V))),j.edges().forEach(V=>{let P=z.edge(V.v,V.w)||{weight:0,minlen:1},T=j.edge(V);z.setEdge(V.v,V.w,{weight:P.weight+T.weight,minlen:Math.max(P.minlen,T.minlen)})}),z}function o(j){let z=new r({multigraph:j.isMultigraph()}).setGraph(j.graph());return j.nodes().forEach(V=>{j.children(V).length||z.setNode(V,j.node(V))}),j.edges().forEach(V=>{z.setEdge(V,j.edge(V))}),z}function c(j){let z=j.nodes().map(V=>{let P={};return j.outEdges(V).forEach(T=>{P[T.w]=(P[T.w]||0)+j.edge(T).weight}),P});return X(j.nodes(),z)}function d(j){let z=j.nodes().map(V=>{let P={};return j.inEdges(V).forEach(T=>{P[T.v]=(P[T.v]||0)+j.edge(T).weight}),P});return X(j.nodes(),z)}function h(j,z){let V=j.x,P=j.y,T=z.x-V,$=z.y-P,O=j.width/2,H=j.height/2;if(!T&&!$)throw new Error("Not possible to find intersection inside of the rectangle");let K,Z;return Math.abs($)*O>Math.abs(T)*H?($<0&&(H=-H),K=H*T/$,Z=H):(T<0&&(O=-O),K=O,Z=O*$/T),{x:V+K,y:P+Z}}function f(j){let z=R(S(j)+1).map(()=>[]);return j.nodes().forEach(V=>{let P=j.node(V),T=P.rank;T!==void 0&&(z[T][P.order]=V)}),z}function m(j){let z=j.nodes().map(P=>{let T=j.node(P).rank;return T===void 0?Number.MAX_VALUE:T}),V=N(Math.min,z);j.nodes().forEach(P=>{let T=j.node(P);Object.hasOwn(T,"rank")&&(T.rank-=V)})}function g(j){let z=j.nodes().map(O=>j.node(O).rank).filter(O=>O!==void 0),V=N(Math.min,z),P=[];j.nodes().forEach(O=>{let H=j.node(O).rank-V;P[H]||(P[H]=[]),P[H].push(O)});let T=0,$=j.graph().nodeRankFactor;Array.from(P).forEach((O,H)=>{O===void 0&&H%$!==0?--T:O!==void 0&&T&&O.forEach(K=>j.node(K).rank+=T)})}function y(j,z,V,P){let T={width:0,height:0};return arguments.length>=4&&(T.rank=V,T.order=P),a(j,"border",T,z)}function x(j,z=_){let V=[];for(let P=0;P_){let V=x(z);return j.apply(null,V.map(P=>j.apply(null,P)))}else return j.apply(null,z)}function S(j){let z=j.nodes().map(V=>{let P=j.node(V).rank;return P===void 0?Number.MIN_VALUE:P});return N(Math.max,z)}function w(j,z){let V={lhs:[],rhs:[]};return j.forEach(P=>{z(P)?V.lhs.push(P):V.rhs.push(P)}),V}function k(j,z){let V=Date.now();try{return z()}finally{console.log(j+" time: "+(Date.now()-V)+"ms")}}function E(j,z){return z()}var M=0;function B(j){var z=++M;return j+(""+z)}function R(j,z,V=1){z==null&&(z=j,j=0);let P=$=>$z<$);let T=[];for(let $=j;P($);$+=V)T.push($);return T}function U(j,z){let V={};for(let P of z)j[P]!==void 0&&(V[P]=j[P]);return V}function I(j,z){let V=z;return typeof z=="string"&&(V=P=>P[z]),Object.entries(j).reduce((P,[T,$])=>(P[T]=V($,T),P),{})}function X(j,z){return j.reduce((V,P,T)=>(V[P]=z[T],V),{})}}),bB=vt((e,t)=>{var r=gB(),a=sn().uniqueId;t.exports={run:s,undo:c};function s(d){(d.graph().acyclicer==="greedy"?r(d,h(d)):o(d)).forEach(f=>{let m=d.edge(f);d.removeEdge(f),m.forwardName=f.name,m.reversed=!0,d.setEdge(f.w,f.v,m,a("rev"))});function h(f){return m=>f.edge(m).weight}}function o(d){let h=[],f={},m={};function g(y){Object.hasOwn(m,y)||(m[y]=!0,f[y]=!0,d.outEdges(y).forEach(x=>{Object.hasOwn(f,x.w)?h.push(x):g(x.w)}),delete f[y])}return d.nodes().forEach(g),h}function c(d){d.edges().forEach(h=>{let f=d.edge(h);if(f.reversed){d.removeEdge(h);let m=f.forwardName;delete f.reversed,delete f.forwardName,d.setEdge(h.w,h.v,f,m)}})}}),xB=vt((e,t)=>{var r=sn();t.exports={run:a,undo:o};function a(c){c.graph().dummyChains=[],c.edges().forEach(d=>s(c,d))}function s(c,d){let h=d.v,f=c.node(h).rank,m=d.w,g=c.node(m).rank,y=d.name,x=c.edge(d),_=x.labelRank;if(g===f+1)return;c.removeEdge(d);let N,S,w;for(w=0,++f;f{let h=c.node(d),f=h.edgeLabel,m;for(c.setEdge(h.edgeObj,f);h.dummy;)m=c.successors(d)[0],c.removeNode(d),f.points.push({x:h.x,y:h.y}),h.dummy==="edge-label"&&(f.x=h.x,f.y=h.y,f.width=h.width,f.height=h.height),d=m,h=c.node(d)})}}),Iu=vt((e,t)=>{var{applyWithChunking:r}=sn();t.exports={longestPath:a,slack:s};function a(o){var c={};function d(h){var f=o.node(h);if(Object.hasOwn(c,h))return f.rank;c[h]=!0;let m=o.outEdges(h).map(y=>y==null?Number.POSITIVE_INFINITY:d(y.w)-o.edge(y).minlen);var g=r(Math.min,m);return g===Number.POSITIVE_INFINITY&&(g=0),f.rank=g}o.sources().forEach(d)}function s(o,c){return o.node(c.w).rank-o.node(c.v).rank-o.edge(c).minlen}}),nS=vt((e,t)=>{var r=zr().Graph,a=Iu().slack;t.exports=s;function s(h){var f=new r({directed:!1}),m=h.nodes()[0],g=h.nodeCount();f.setNode(m,{});for(var y,x;o(f,h){var x=y.v,_=g===x?y.w:x;!h.hasNode(_)&&!a(f,y)&&(h.setNode(_,{}),h.setEdge(g,_,{}),m(_))})}return h.nodes().forEach(m),h.nodeCount()}function c(h,f){return f.edges().reduce((m,g)=>{let y=Number.POSITIVE_INFINITY;return h.hasNode(g.v)!==h.hasNode(g.w)&&(y=a(f,g)),yf.node(g).rank+=m)}}),yB=vt((e,t)=>{var r=nS(),a=Iu().slack,s=Iu().longestPath,o=zr().alg.preorder,c=zr().alg.postorder,d=sn().simplify;t.exports=h,h.initLowLimValues=y,h.initCutValues=f,h.calcCutValue=g,h.leaveEdge=_,h.enterEdge=N,h.exchangeEdges=S;function h(M){M=d(M),s(M);var B=r(M);y(B),f(B,M);for(var R,U;R=_(B);)U=N(B,M,R),S(B,M,R,U)}function f(M,B){var R=c(M,M.nodes());R=R.slice(0,R.length-1),R.forEach(U=>m(M,B,U))}function m(M,B,R){var U=M.node(R),I=U.parent;M.edge(R,I).cutvalue=g(M,B,R)}function g(M,B,R){var U=M.node(R),I=U.parent,X=!0,j=B.edge(R,I),z=0;return j||(X=!1,j=B.edge(I,R)),z=j.weight,B.nodeEdges(R).forEach(V=>{var P=V.v===R,T=P?V.w:V.v;if(T!==I){var $=P===X,O=B.edge(V).weight;if(z+=$?O:-O,k(M,R,T)){var H=M.edge(R,T).cutvalue;z+=$?-H:H}}}),z}function y(M,B){arguments.length<2&&(B=M.nodes()[0]),x(M,{},1,B)}function x(M,B,R,U,I){var X=R,j=M.node(U);return B[U]=!0,M.neighbors(U).forEach(z=>{Object.hasOwn(B,z)||(R=x(M,B,R,z,U))}),j.low=X,j.lim=R++,I?j.parent=I:delete j.parent,R}function _(M){return M.edges().find(B=>M.edge(B).cutvalue<0)}function N(M,B,R){var U=R.v,I=R.w;B.hasEdge(U,I)||(U=R.w,I=R.v);var X=M.node(U),j=M.node(I),z=X,V=!1;X.lim>j.lim&&(z=j,V=!0);var P=B.edges().filter(T=>V===E(M,M.node(T.v),z)&&V!==E(M,M.node(T.w),z));return P.reduce((T,$)=>a(B,$)!B.node(I).parent),U=o(M,R);U=U.slice(1),U.forEach(I=>{var X=M.node(I).parent,j=B.edge(I,X),z=!1;j||(j=B.edge(X,I),z=!0),B.node(I).rank=B.node(X).rank+(z?j.minlen:-j.minlen)})}function k(M,B,R){return M.hasEdge(B,R)}function E(M,B,R){return R.low<=B.lim&&B.lim<=R.lim}}),vB=vt((e,t)=>{var r=Iu(),a=r.longestPath,s=nS(),o=yB();t.exports=c;function c(m){var g=m.graph().ranker;if(g instanceof Function)return g(m);switch(m.graph().ranker){case"network-simplex":f(m);break;case"tight-tree":h(m);break;case"longest-path":d(m);break;case"none":break;default:f(m)}}var d=a;function h(m){a(m),s(m)}function f(m){o(m)}}),_B=vt((e,t)=>{t.exports=r;function r(o){let c=s(o);o.graph().dummyChains.forEach(d=>{let h=o.node(d),f=h.edgeObj,m=a(o,c,f.v,f.w),g=m.path,y=m.lca,x=0,_=g[x],N=!0;for(;d!==f.w;){if(h=o.node(d),N){for(;(_=g[x])!==y&&o.node(_).maxRankg||y>c[x].lim));for(_=x,x=h;(x=o.parent(x))!==_;)m.push(x);return{path:f.concat(m.reverse()),lca:_}}function s(o){let c={},d=0;function h(f){let m=d;o.children(f).forEach(h),c[f]={low:m,lim:d++}}return o.children().forEach(h),c}}),wB=vt((e,t)=>{var r=sn();t.exports={run:a,cleanup:d};function a(h){let f=r.addDummyNode(h,"root",{},"_root"),m=o(h),g=Object.values(m),y=r.applyWithChunking(Math.max,g)-1,x=2*y+1;h.graph().nestingRoot=f,h.edges().forEach(N=>h.edge(N).minlen*=x);let _=c(h)+1;h.children().forEach(N=>s(h,f,x,_,y,m,N)),h.graph().nodeRankFactor=x}function s(h,f,m,g,y,x,_){let N=h.children(_);if(!N.length){_!==f&&h.setEdge(f,_,{weight:0,minlen:m});return}let S=r.addBorderNode(h,"_bt"),w=r.addBorderNode(h,"_bb"),k=h.node(_);h.setParent(S,_),k.borderTop=S,h.setParent(w,_),k.borderBottom=w,N.forEach(E=>{s(h,f,m,g,y,x,E);let M=h.node(E),B=M.borderTop?M.borderTop:E,R=M.borderBottom?M.borderBottom:E,U=M.borderTop?g:2*g,I=B!==R?1:y-x[_]+1;h.setEdge(S,B,{weight:U,minlen:I,nestingEdge:!0}),h.setEdge(R,w,{weight:U,minlen:I,nestingEdge:!0})}),h.parent(_)||h.setEdge(f,S,{weight:0,minlen:y+x[_]})}function o(h){var f={};function m(g,y){var x=h.children(g);x&&x.length&&x.forEach(_=>m(_,y+1)),f[g]=y}return h.children().forEach(g=>m(g,1)),f}function c(h){return h.edges().reduce((f,m)=>f+h.edge(m).weight,0)}function d(h){var f=h.graph();h.removeNode(f.nestingRoot),delete f.nestingRoot,h.edges().forEach(m=>{var g=h.edge(m);g.nestingEdge&&h.removeEdge(m)})}}),EB=vt((e,t)=>{var r=sn();t.exports=a;function a(o){function c(d){let h=o.children(d),f=o.node(d);if(h.length&&h.forEach(c),Object.hasOwn(f,"minRank")){f.borderLeft=[],f.borderRight=[];for(let m=f.minRank,g=f.maxRank+1;m{t.exports={adjust:r,undo:a};function r(m){let g=m.graph().rankdir.toLowerCase();(g==="lr"||g==="rl")&&s(m)}function a(m){let g=m.graph().rankdir.toLowerCase();(g==="bt"||g==="rl")&&c(m),(g==="lr"||g==="rl")&&(h(m),s(m))}function s(m){m.nodes().forEach(g=>o(m.node(g))),m.edges().forEach(g=>o(m.edge(g)))}function o(m){let g=m.width;m.width=m.height,m.height=g}function c(m){m.nodes().forEach(g=>d(m.node(g))),m.edges().forEach(g=>{let y=m.edge(g);y.points.forEach(d),Object.hasOwn(y,"y")&&d(y)})}function d(m){m.y=-m.y}function h(m){m.nodes().forEach(g=>f(m.node(g))),m.edges().forEach(g=>{let y=m.edge(g);y.points.forEach(f),Object.hasOwn(y,"x")&&f(y)})}function f(m){let g=m.x;m.x=m.y,m.y=g}}),SB=vt((e,t)=>{var r=sn();t.exports=a;function a(s){let o={},c=s.nodes().filter(g=>!s.children(g).length),d=c.map(g=>s.node(g).rank),h=r.applyWithChunking(Math.max,d),f=r.range(h+1).map(()=>[]);function m(g){if(o[g])return;o[g]=!0;let y=s.node(g);f[y.rank].push(g),s.successors(g).forEach(m)}return c.sort((g,y)=>s.node(g).rank-s.node(y).rank).forEach(m),f}}),kB=vt((e,t)=>{var r=sn().zipObject;t.exports=a;function a(o,c){let d=0;for(let h=1;hN)),f=c.flatMap(_=>o.outEdges(_).map(N=>({pos:h[N.w],weight:o.edge(N).weight})).sort((N,S)=>N.pos-S.pos)),m=1;for(;m{let N=_.pos+m;y[N]+=_.weight;let S=0;for(;N>0;)N%2&&(S+=y[N+1]),N=N-1>>1,y[N]+=_.weight;x+=_.weight*S}),x}}),CB=vt((e,t)=>{t.exports=r;function r(a,s=[]){return s.map(o=>{let c=a.inEdges(o);if(c.length){let d=c.reduce((h,f)=>{let m=a.edge(f),g=a.node(f.v);return{sum:h.sum+m.weight*g.order,weight:h.weight+m.weight}},{sum:0,weight:0});return{v:o,barycenter:d.sum/d.weight,weight:d.weight}}else return{v:o}})}}),TB=vt((e,t)=>{var r=sn();t.exports=a;function a(c,d){let h={};c.forEach((m,g)=>{let y=h[m.v]={indegree:0,in:[],out:[],vs:[m.v],i:g};m.barycenter!==void 0&&(y.barycenter=m.barycenter,y.weight=m.weight)}),d.edges().forEach(m=>{let g=h[m.v],y=h[m.w];g!==void 0&&y!==void 0&&(y.indegree++,g.out.push(h[m.w]))});let f=Object.values(h).filter(m=>!m.indegree);return s(f)}function s(c){let d=[];function h(m){return g=>{g.merged||(g.barycenter===void 0||m.barycenter===void 0||g.barycenter>=m.barycenter)&&o(m,g)}}function f(m){return g=>{g.in.push(m),--g.indegree===0&&c.push(g)}}for(;c.length;){let m=c.pop();d.push(m),m.in.reverse().forEach(h(m)),m.out.forEach(f(m))}return d.filter(m=>!m.merged).map(m=>r.pick(m,["vs","i","barycenter","weight"]))}function o(c,d){let h=0,f=0;c.weight&&(h+=c.barycenter*c.weight,f+=c.weight),d.weight&&(h+=d.barycenter*d.weight,f+=d.weight),c.vs=d.vs.concat(c.vs),c.barycenter=h/f,c.weight=f,c.i=Math.min(d.i,c.i),d.merged=!0}}),AB=vt((e,t)=>{var r=sn();t.exports=a;function a(c,d){let h=r.partition(c,S=>Object.hasOwn(S,"barycenter")),f=h.lhs,m=h.rhs.sort((S,w)=>w.i-S.i),g=[],y=0,x=0,_=0;f.sort(o(!!d)),_=s(g,m,_),f.forEach(S=>{_+=S.vs.length,g.push(S.vs),y+=S.barycenter*S.weight,x+=S.weight,_=s(g,m,_)});let N={vs:g.flat(!0)};return x&&(N.barycenter=y/x,N.weight=x),N}function s(c,d,h){let f;for(;d.length&&(f=d[d.length-1]).i<=h;)d.pop(),c.push(f.vs),h++;return h}function o(c){return(d,h)=>d.barycenterh.barycenter?1:c?h.i-d.i:d.i-h.i}}),MB=vt((e,t)=>{var r=CB(),a=TB(),s=AB();t.exports=o;function o(h,f,m,g){let y=h.children(f),x=h.node(f),_=x?x.borderLeft:void 0,N=x?x.borderRight:void 0,S={};_&&(y=y.filter(M=>M!==_&&M!==N));let w=r(h,y);w.forEach(M=>{if(h.children(M.v).length){let B=o(h,M.v,m,g);S[M.v]=B,Object.hasOwn(B,"barycenter")&&d(M,B)}});let k=a(w,m);c(k,S);let E=s(k,g);if(_&&(E.vs=[_,E.vs,N].flat(!0),h.predecessors(_).length)){let M=h.node(h.predecessors(_)[0]),B=h.node(h.predecessors(N)[0]);Object.hasOwn(E,"barycenter")||(E.barycenter=0,E.weight=0),E.barycenter=(E.barycenter*E.weight+M.order+B.order)/(E.weight+2),E.weight+=2}return E}function c(h,f){h.forEach(m=>{m.vs=m.vs.flatMap(g=>f[g]?f[g].vs:g)})}function d(h,f){h.barycenter!==void 0?(h.barycenter=(h.barycenter*h.weight+f.barycenter*f.weight)/(h.weight+f.weight),h.weight+=f.weight):(h.barycenter=f.barycenter,h.weight=f.weight)}}),OB=vt((e,t)=>{var r=zr().Graph,a=sn();t.exports=s;function s(c,d,h,f){f||(f=c.nodes());let m=o(c),g=new r({compound:!0}).setGraph({root:m}).setDefaultNodeLabel(y=>c.node(y));return f.forEach(y=>{let x=c.node(y),_=c.parent(y);(x.rank===d||x.minRank<=d&&d<=x.maxRank)&&(g.setNode(y),g.setParent(y,_||m),c[h](y).forEach(N=>{let S=N.v===y?N.w:N.v,w=g.edge(S,y),k=w!==void 0?w.weight:0;g.setEdge(S,y,{weight:c.edge(N).weight+k})}),Object.hasOwn(x,"minRank")&&g.setNode(y,{borderLeft:x.borderLeft[d],borderRight:x.borderRight[d]}))}),g}function o(c){for(var d;c.hasNode(d=a.uniqueId("_root")););return d}}),RB=vt((e,t)=>{t.exports=r;function r(a,s,o){let c={},d;o.forEach(h=>{let f=a.parent(h),m,g;for(;f;){if(m=a.parent(f),m?(g=c[m],c[m]=f):(g=d,d=f),g&&g!==f){s.setEdge(g,f);return}f=m}})}}),jB=vt((e,t)=>{var r=SB(),a=kB(),s=MB(),o=OB(),c=RB(),d=zr().Graph,h=sn();t.exports=f;function f(x,_={}){if(typeof _.customOrder=="function"){_.customOrder(x,f);return}let N=h.maxRank(x),S=m(x,h.range(1,N+1),"inEdges"),w=m(x,h.range(N-1,-1,-1),"outEdges"),k=r(x);if(y(x,k),_.disableOptimalOrderHeuristic)return;let E=Number.POSITIVE_INFINITY,M,B=_.constraints||[];for(let R=0,U=0;U<4;++R,++U){g(R%2?S:w,R%4>=2,B),k=h.buildLayerMatrix(x);let I=a(x,k);I{S.has(k)||S.set(k,[]),S.get(k).push(E)};for(let k of x.nodes()){let E=x.node(k);if(typeof E.rank=="number"&&w(E.rank,k),typeof E.minRank=="number"&&typeof E.maxRank=="number")for(let M=E.minRank;M<=E.maxRank;M++)M!==E.rank&&w(M,k)}return _.map(function(k){return o(x,k,N,S.get(k)||[])})}function g(x,_,N){let S=new d;x.forEach(function(w){N.forEach(M=>S.setEdge(M.left,M.right));let k=w.graph().root,E=s(w,k,S,_);E.vs.forEach((M,B)=>w.node(M).order=B),c(w,S,E.vs)})}function y(x,_){Object.values(_).forEach(N=>N.forEach((S,w)=>x.node(S).order=w))}}),DB=vt((e,t)=>{var r=zr().Graph,a=sn();t.exports={positionX:N,findType1Conflicts:s,findType2Conflicts:o,addConflict:d,hasConflict:h,verticalAlignment:f,horizontalCompaction:m,alignCoordinates:x,findSmallestWidthAlignment:y,balance:_};function s(k,E){let M={};function B(R,U){let I=0,X=0,j=R.length,z=U[U.length-1];return U.forEach((V,P)=>{let T=c(k,V),$=T?k.node(T).order:j;(T||V===z)&&(U.slice(X,P+1).forEach(O=>{k.predecessors(O).forEach(H=>{let K=k.node(H),Z=K.order;(Z{V=U[P],k.node(V).dummy&&k.predecessors(V).forEach(T=>{let $=k.node(T);$.dummy&&($.orderz)&&d(M,T,V)})})}function R(U,I){let X=-1,j,z=0;return I.forEach((V,P)=>{if(k.node(V).dummy==="border"){let T=k.predecessors(V);T.length&&(j=k.node(T[0]).order,B(I,z,P,X,j),z=P,X=j)}B(I,z,I.length,j,U.length)}),I}return E.length&&E.reduce(R),M}function c(k,E){if(k.node(E).dummy)return k.predecessors(E).find(M=>k.node(M).dummy)}function d(k,E,M){if(E>M){let R=E;E=M,M=R}let B=k[E];B||(k[E]=B={}),B[M]=!0}function h(k,E,M){if(E>M){let B=E;E=M,M=B}return!!k[E]&&Object.hasOwn(k[E],M)}function f(k,E,M,B){let R={},U={},I={};return E.forEach(X=>{X.forEach((j,z)=>{R[j]=j,U[j]=j,I[j]=z})}),E.forEach(X=>{let j=-1;X.forEach(z=>{let V=B(z);if(V.length){V=V.sort((T,$)=>I[T]-I[$]);let P=(V.length-1)/2;for(let T=Math.floor(P),$=Math.ceil(P);T<=$;++T){let O=V[T];U[z]===z&&jMath.max(T,U[$.v]+I.edge($)),0)}function V(P){let T=I.outEdges(P).reduce((O,H)=>Math.min(O,U[H.w]-I.edge(H)),Number.POSITIVE_INFINITY),$=k.node(P);T!==Number.POSITIVE_INFINITY&&$.borderType!==X&&(U[P]=Math.max(U[P],T))}return j(z,I.predecessors.bind(I)),j(V,I.successors.bind(I)),Object.keys(B).forEach(P=>U[P]=U[M[P]]),U}function g(k,E,M,B){let R=new r,U=k.graph(),I=S(U.nodesep,U.edgesep,B);return E.forEach(X=>{let j;X.forEach(z=>{let V=M[z];if(R.setNode(V),j){var P=M[j],T=R.edge(P,V);R.setEdge(P,V,Math.max(I(k,z,j),T||0))}j=z})}),R}function y(k,E){return Object.values(E).reduce((M,B)=>{let R=Number.NEGATIVE_INFINITY,U=Number.POSITIVE_INFINITY;Object.entries(B).forEach(([X,j])=>{let z=w(k,X)/2;R=Math.max(j+z,R),U=Math.min(j-z,U)});let I=R-U;return I{["l","r"].forEach(I=>{let X=U+I,j=k[X];if(j===E)return;let z=Object.values(j),V=B-a.applyWithChunking(Math.min,z);I!=="l"&&(V=R-a.applyWithChunking(Math.max,z)),V&&(k[X]=a.mapValues(j,P=>P+V))})})}function _(k,E){return a.mapValues(k.ul,(M,B)=>{if(E)return k[E.toLowerCase()][B];{let R=Object.values(k).map(U=>U[B]).sort((U,I)=>U-I);return(R[1]+R[2])/2}})}function N(k){let E=a.buildLayerMatrix(k),M=Object.assign(s(k,E),o(k,E)),B={},R;["u","d"].forEach(I=>{R=I==="u"?E:Object.values(E).reverse(),["l","r"].forEach(X=>{X==="r"&&(R=R.map(P=>Object.values(P).reverse()));let j=(I==="u"?k.predecessors:k.successors).bind(k),z=f(k,R,M,j),V=m(k,R,z.root,z.align,X==="r");X==="r"&&(V=a.mapValues(V,P=>-P)),B[I+X]=V})});let U=y(k,B);return x(B,U),_(B,k.graph().align)}function S(k,E,M){return(B,R,U)=>{let I=B.node(R),X=B.node(U),j=0,z;if(j+=I.width/2,Object.hasOwn(I,"labelpos"))switch(I.labelpos.toLowerCase()){case"l":z=-I.width/2;break;case"r":z=I.width/2;break}if(z&&(j+=M?z:-z),z=0,j+=(I.dummy?E:k)/2,j+=(X.dummy?E:k)/2,j+=X.width/2,Object.hasOwn(X,"labelpos"))switch(X.labelpos.toLowerCase()){case"l":z=X.width/2;break;case"r":z=-X.width/2;break}return z&&(j+=M?z:-z),z=0,j}}function w(k,E){return k.node(E).width}}),LB=vt((e,t)=>{var r=sn(),a=DB().positionX;t.exports=s;function s(c){c=r.asNonCompoundGraph(c),o(c),Object.entries(a(c)).forEach(([d,h])=>c.node(d).x=h)}function o(c){let d=r.buildLayerMatrix(c),h=c.graph().ranksep,f=c.graph().rankalign,m=0;d.forEach(g=>{let y=g.reduce((x,_)=>{let N=c.node(_).height;return x>N?x:N},0);g.forEach(x=>{let _=c.node(x);f==="top"?_.y=m+_.height/2:f==="bottom"?_.y=m+y-_.height/2:_.y=m+y/2}),m+=y+h})}}),zB=vt((e,t)=>{var r=bB(),a=xB(),s=vB(),o=sn().normalizeRanks,c=_B(),d=sn().removeEmptyRanks,h=wB(),f=EB(),m=NB(),g=jB(),y=LB(),x=sn(),_=zr().Graph;t.exports=N;function N(q,Q={}){let J=Q.debugTiming?x.time:x.notime;return J("layout",()=>{let W=J(" buildLayoutGraph",()=>j(q));return J(" runLayout",()=>S(W,J,Q)),J(" updateInputGraph",()=>w(q,W)),W})}function S(q,Q,J){Q(" makeSpaceForEdgeLabels",()=>z(q)),Q(" removeSelfEdges",()=>C(q)),Q(" acyclic",()=>r.run(q)),Q(" nestingGraph.run",()=>h.run(q)),Q(" rank",()=>s(x.asNonCompoundGraph(q))),Q(" injectEdgeLabelProxies",()=>V(q)),Q(" removeEmptyRanks",()=>d(q)),Q(" nestingGraph.cleanup",()=>h.cleanup(q)),Q(" normalizeRanks",()=>o(q)),Q(" assignRankMinMax",()=>P(q)),Q(" removeEdgeLabelProxies",()=>T(q)),Q(" normalize.run",()=>a.run(q)),Q(" parentDummyChains",()=>c(q)),Q(" addBorderSegments",()=>f(q)),Q(" order",()=>g(q,J)),Q(" insertSelfEdges",()=>D(q)),Q(" adjustCoordinateSystem",()=>m.adjust(q)),Q(" position",()=>y(q)),Q(" positionSelfEdges",()=>Y(q)),Q(" removeBorderNodes",()=>Z(q)),Q(" normalize.undo",()=>a.undo(q)),Q(" fixupEdgeLabelCoords",()=>H(q)),Q(" undoCoordinateSystem",()=>m.undo(q)),Q(" translateGraph",()=>$(q)),Q(" assignNodeIntersects",()=>O(q)),Q(" reversePoints",()=>K(q)),Q(" acyclic.undo",()=>r.undo(q))}function w(q,Q){q.nodes().forEach(J=>{let W=q.node(J),te=Q.node(J);W&&(W.x=te.x,W.y=te.y,W.order=te.order,W.rank=te.rank,Q.children(J).length&&(W.width=te.width,W.height=te.height))}),q.edges().forEach(J=>{let W=q.edge(J),te=Q.edge(J);W.points=te.points,Object.hasOwn(te,"x")&&(W.x=te.x,W.y=te.y)}),q.graph().width=Q.graph().width,q.graph().height=Q.graph().height}var k=["nodesep","edgesep","ranksep","marginx","marginy"],E={ranksep:50,edgesep:20,nodesep:50,rankdir:"tb",rankalign:"center"},M=["acyclicer","ranker","rankdir","align","rankalign"],B=["width","height","rank"],R={width:0,height:0},U=["minlen","weight","width","height","labeloffset"],I={minlen:1,weight:1,width:0,height:0,labeloffset:10,labelpos:"r"},X=["labelpos"];function j(q){let Q=new _({multigraph:!0,compound:!0}),J=G(q.graph());return Q.setGraph(Object.assign({},E,L(J,k),x.pick(J,M))),q.nodes().forEach(W=>{let te=G(q.node(W)),ce=L(te,B);Object.keys(R).forEach(fe=>{ce[fe]===void 0&&(ce[fe]=R[fe])}),Q.setNode(W,ce),Q.setParent(W,q.parent(W))}),q.edges().forEach(W=>{let te=G(q.edge(W));Q.setEdge(W,Object.assign({},I,L(te,U),x.pick(te,X)))}),Q}function z(q){let Q=q.graph();Q.ranksep/=2,q.edges().forEach(J=>{let W=q.edge(J);W.minlen*=2,W.labelpos.toLowerCase()!=="c"&&(Q.rankdir==="TB"||Q.rankdir==="BT"?W.width+=W.labeloffset:W.height+=W.labeloffset)})}function V(q){q.edges().forEach(Q=>{let J=q.edge(Q);if(J.width&&J.height){let W=q.node(Q.v),te={rank:(q.node(Q.w).rank-W.rank)/2+W.rank,e:Q};x.addDummyNode(q,"edge-proxy",te,"_ep")}})}function P(q){let Q=0;q.nodes().forEach(J=>{let W=q.node(J);W.borderTop&&(W.minRank=q.node(W.borderTop).rank,W.maxRank=q.node(W.borderBottom).rank,Q=Math.max(Q,W.maxRank))}),q.graph().maxRank=Q}function T(q){q.nodes().forEach(Q=>{let J=q.node(Q);J.dummy==="edge-proxy"&&(q.edge(J.e).labelRank=J.rank,q.removeNode(Q))})}function $(q){let Q=Number.POSITIVE_INFINITY,J=0,W=Number.POSITIVE_INFINITY,te=0,ce=q.graph(),fe=ce.marginx||0,be=ce.marginy||0;function we(Ne){let De=Ne.x,$e=Ne.y,st=Ne.width,Rt=Ne.height;Q=Math.min(Q,De-st/2),J=Math.max(J,De+st/2),W=Math.min(W,$e-Rt/2),te=Math.max(te,$e+Rt/2)}q.nodes().forEach(Ne=>we(q.node(Ne))),q.edges().forEach(Ne=>{let De=q.edge(Ne);Object.hasOwn(De,"x")&&we(De)}),Q-=fe,W-=be,q.nodes().forEach(Ne=>{let De=q.node(Ne);De.x-=Q,De.y-=W}),q.edges().forEach(Ne=>{let De=q.edge(Ne);De.points.forEach($e=>{$e.x-=Q,$e.y-=W}),Object.hasOwn(De,"x")&&(De.x-=Q),Object.hasOwn(De,"y")&&(De.y-=W)}),ce.width=J-Q+fe,ce.height=te-W+be}function O(q){q.edges().forEach(Q=>{let J=q.edge(Q),W=q.node(Q.v),te=q.node(Q.w),ce,fe;J.points?(ce=J.points[0],fe=J.points[J.points.length-1]):(J.points=[],ce=te,fe=W),J.points.unshift(x.intersectRect(W,ce)),J.points.push(x.intersectRect(te,fe))})}function H(q){q.edges().forEach(Q=>{let J=q.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 K(q){q.edges().forEach(Q=>{let J=q.edge(Q);J.reversed&&J.points.reverse()})}function Z(q){q.nodes().forEach(Q=>{if(q.children(Q).length){let J=q.node(Q),W=q.node(J.borderTop),te=q.node(J.borderBottom),ce=q.node(J.borderLeft[J.borderLeft.length-1]),fe=q.node(J.borderRight[J.borderRight.length-1]);J.width=Math.abs(fe.x-ce.x),J.height=Math.abs(te.y-W.y),J.x=ce.x+J.width/2,J.y=W.y+J.height/2}}),q.nodes().forEach(Q=>{q.node(Q).dummy==="border"&&q.removeNode(Q)})}function C(q){q.edges().forEach(Q=>{if(Q.v===Q.w){var J=q.node(Q.v);J.selfEdges||(J.selfEdges=[]),J.selfEdges.push({e:Q,label:q.edge(Q)}),q.removeEdge(Q)}})}function D(q){var Q=x.buildLayerMatrix(q);Q.forEach(J=>{var W=0;J.forEach((te,ce)=>{var fe=q.node(te);fe.order=ce+W,(fe.selfEdges||[]).forEach(be=>{x.addDummyNode(q,"selfedge",{width:be.label.width,height:be.label.height,rank:fe.rank,order:ce+ ++W,e:be.e,label:be.label},"_se")}),delete fe.selfEdges})})}function Y(q){q.nodes().forEach(Q=>{var J=q.node(Q);if(J.dummy==="selfedge"){var W=q.node(J.e.v),te=W.x+W.width/2,ce=W.y,fe=J.x-te,be=W.height/2;q.setEdge(J.e,J.label),q.removeNode(Q),J.label.points=[{x:te+2*fe/3,y:ce-be},{x:te+5*fe/6,y:ce-be},{x:te+fe,y:ce},{x:te+5*fe/6,y:ce+be},{x:te+2*fe/3,y:ce+be}],J.label.x=J.x,J.label.y=J.y}})}function L(q,Q){return x.mapValues(x.pick(q,Q),Number)}function G(q){var Q={};return q&&Object.entries(q).forEach(([J,W])=>{typeof J=="string"&&(J=J.toLowerCase()),Q[J]=W}),Q}}),IB=vt((e,t)=>{var r=sn(),a=zr().Graph;t.exports={debugOrdering:s};function s(o){let c=r.buildLayerMatrix(o),d=new a({compound:!0,multigraph:!0}).setGraph({});return o.nodes().forEach(h=>{d.setNode(h,{label:h}),d.setParent(h,"layer"+o.node(h).rank)}),o.edges().forEach(h=>d.setEdge(h.v,h.w,{},h.name)),c.forEach((h,f)=>{let m="layer"+f;d.setNode(m,{rank:"same"}),h.reduce((g,y)=>(d.setEdge(g,y,{style:"invis"}),y))}),d}}),BB=vt((e,t)=>{t.exports="2.0.4"}),UB=vt((e,t)=>{t.exports={graphlib:zr(),layout:zB(),debug:IB(),util:{time:sn().time,notime:sn().notime},version:BB()}});const X1=UB();/*! For license information please see dagre.esm.js.LEGAL.txt */const K1={running:"bg-blue-500",completed:"bg-emerald-500",failed:"bg-red-500",error:"bg-red-500"};function HB({data:e,selected:t}){const r=e;return p.jsxs("div",{className:`w-[260px] rounded-lg border px-4 py-3 transition-colors ${r.isSelected||t?"border-white/30 bg-[#0a0a0a]":"border-[#222] bg-black hover:border-[#333]"}`,children:[p.jsx(tl,{type:"target",position:ze.Top,isConnectable:!1,className:`!w-1.5 !h-1.5 !border-0 ${r.parentId?"!bg-[#444]":"!bg-transparent"}`}),p.jsxs("div",{className:"flex items-center gap-2",children:[p.jsxs("span",{className:"relative flex h-2 w-2 shrink-0",children:[p.jsx("span",{className:`absolute inline-flex h-full w-full rounded-full opacity-75 ${K1[r.status]??"bg-gray-500"} ${r.status==="running"?"animate-ping":""}`}),p.jsx("span",{className:`relative inline-flex h-2 w-2 rounded-full ${K1[r.status]??"bg-gray-500"}`})]}),p.jsx("span",{className:"text-sm font-semibold text-white leading-snug line-clamp-3",children:r.name})]}),p.jsx(tl,{type:"source",position:ze.Bottom,isConnectable:!1,className:`!w-1.5 !h-1.5 !border-0 ${r.children&&r.children.length>0?"!bg-[#444]":"!bg-transparent"}`})]})}const $B=ee.memo(HB);function ro({w:e=24}){return p.jsxs("div",{className:"w-[180px] h-[72px] rounded-lg border border-[#222] bg-[#0a0a0a] px-3 py-2 shrink-0",children:[p.jsxs("div",{className:"flex items-center gap-2 mb-1.5",children:[p.jsx("div",{className:"w-2 h-2 rounded-full bg-[#2a2a2a]"}),p.jsx("div",{className:"h-3 rounded bg-[#252525]",style:{width:`${e*4}px`}})]}),p.jsx("div",{className:"h-2 w-28 rounded bg-[#1e1e1e] mb-1.5"}),p.jsxs("div",{className:"flex gap-3",children:[p.jsx("div",{className:"h-2 w-8 rounded bg-[#1e1e1e]"}),p.jsx("div",{className:"h-2 w-8 rounded bg-[#1e1e1e]"})]})]})}function Bs(){return p.jsx("div",{className:"w-px h-6 bg-[#2a2a2a]"})}function Z1({count:e}){return p.jsx("div",{className:"relative flex justify-center",children:p.jsx("div",{className:"absolute top-0 h-px bg-[#2a2a2a]",style:{width:`${(e-1)*220}px`}})})}function qB(){return p.jsx("div",{className:"h-full bg-black overflow-hidden",children:p.jsxs("div",{className:"flex flex-col items-center pt-10 animate-pulse",children:[p.jsx(ro,{w:20}),p.jsx(Bs,{}),p.jsx(Z1,{count:3}),p.jsx("div",{className:"flex gap-10",children:[18,22,16].map((e,t)=>p.jsxs("div",{className:"flex flex-col items-center",children:[p.jsx(Bs,{}),p.jsx(ro,{w:e})]},t))}),p.jsxs("div",{className:"flex gap-10 w-full justify-center",children:[p.jsxs("div",{className:"flex flex-col items-center",children:[p.jsx(Bs,{}),p.jsx(Z1,{count:2}),p.jsx("div",{className:"flex gap-10",children:[14,20].map((e,t)=>p.jsxs("div",{className:"flex flex-col items-center",children:[p.jsx(Bs,{}),p.jsx(ro,{w:e})]},t))})]}),p.jsxs("div",{className:"flex flex-col items-center",children:[p.jsx(Bs,{}),p.jsx(ro,{w:18}),p.jsx(Bs,{}),p.jsx(ro,{w:12})]}),p.jsx("div",{className:"w-[180px]"})]})]})})}const mp=260,pp=80,PB={agentNode:$B};function FB(e,t){const r=new X1.graphlib.Graph;r.setDefaultEdgeLabel(()=>({})),r.setGraph({rankdir:"TB",nodesep:60,ranksep:80});const a=[],s=[];for(const[o,c]of e)if(r.setNode(o,{width:mp,height:pp}),a.push({id:o,type:"agentNode",position:{x:0,y:0},data:{...c,isSelected:o===t}}),c.parentId&&e.has(c.parentId)){const d=`${c.parentId}->${o}`;r.setEdge(c.parentId,o),s.push({id:d,source:c.parentId,target:o,style:{stroke:"#2a2a2a",strokeWidth:1.5}})}X1.layout(r);for(const o of a){const c=r.node(o.id);c&&(o.position={x:c.x-mp/2,y:c.y-pp/2})}return{nodes:a,edges:s}}const Mm=300;function GB({nodes:e}){const{setCenter:t}=Ho(),r=ee.useRef(!1);return ee.useEffect(()=>{if(e.length>0&&!r.current){const s=e.find(d=>!d.data.parentId)??e[0];r.current=!0;const o=s.position.x+mp/2,c=s.position.y+pp/2;setTimeout(()=>t(o,c,{zoom:.85,duration:400}),60)}},[e,t]),null}function VB(){const{zoomIn:e,zoomOut:t,fitView:r}=Ho();return p.jsx(Q9,{position:"bottom-right",showZoom:!1,showFitView:!1,showInteractive:!1,className:"!bg-transparent !border-none !shadow-none",children:p.jsxs("div",{className:"flex flex-col overflow-hidden rounded-lg border border-[#222]",children:[p.jsx("button",{onClick:()=>e({duration:Mm}),className:"flex items-center justify-center w-7 h-7 bg-[#111] text-white hover:bg-[#2a2a2a] transition-colors",title:"Zoom in",children:p.jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,className:"w-3.5 h-3.5",children:p.jsx("path",{d:"M12 5v14M5 12h14"})})}),p.jsx("button",{onClick:()=>t({duration:Mm}),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:p.jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,className:"w-3.5 h-3.5",children:p.jsx("path",{d:"M5 12h14"})})}),p.jsx("button",{onClick:()=>r({padding:.3,duration:Mm}),className:"flex items-center justify-center w-7 h-7 bg-[#111] text-white hover:bg-[#2a2a2a] transition-colors",title:"Fit view",children:p.jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,className:"w-3.5 h-3.5",children:p.jsx("path",{d:"M15 3h6v6M9 21H3v-6M21 3l-7 7M3 21l7-7"})})})]})})}function YB({agents:e,selectedAgentId:t,onSelectAgent:r,eventsLoaded:a,eventsEmpty:s,scanCompleted:o}){const[c,d,h]=B9([]),[f,m,g]=U9([]);ee.useEffect(()=>{if(e.size===0)return;const{nodes:S,edges:w}=FB(e,t);d(S),m(w)},[e.size,d,m]),ee.useEffect(()=>{e.size!==0&&d(S=>S.map(w=>{const k=e.get(w.id);return k?{...w,data:{...k,isSelected:w.id===t}}:w}))},[e,t,d]);const y=ee.useRef(!1),x=ee.useCallback((S,w)=>{y.current=!0,r(w.id)},[r]),_=ee.useCallback(()=>{if(y.current){y.current=!1;return}r(null)},[r]);if(e.size===0&&a&&s)return p.jsxs("div",{className:"flex flex-col items-center justify-center h-full text-center px-4",children:[p.jsx("div",{className:"w-10 h-10 mb-3 rounded-full bg-[#111] flex items-center justify-center",children:o?p.jsx("svg",{className:"w-5 h-5 text-[#444]",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:1.5,children:p.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"})}):p.jsx("div",{className:"w-2 h-2 rounded-full bg-blue-500 animate-pulse"})}),p.jsx("p",{className:"text-sm text-[#555]",children:o?"Agent trace data is not available for this pentest":"Waiting for agent data…"})]});const N=e.size>0;return p.jsxs("div",{className:"relative h-full",children:[p.jsx("div",{className:`absolute inset-0 z-10 transition-opacity duration-500 ${N?"opacity-0 pointer-events-none":"opacity-100"}`,children:p.jsx(qB,{})}),p.jsx("div",{className:`h-full transition-opacity duration-500 ${N?"opacity-100":"opacity-0"}`,children:p.jsxs(I9,{nodes:c,edges:f,onNodesChange:h,onEdgesChange:g,onNodeClick:x,onPaneClick:_,nodeTypes:PB,nodesConnectable:!1,edgesFocusable:!1,edgesReconnectable:!1,minZoom:.15,maxZoom:1.5,proOptions:{hideAttribution:!0},className:"bg-black",children:[p.jsx(F9,{color:"#111",gap:20}),p.jsx(GB,{nodes:c}),p.jsx(VB,{}),p.jsx(dB,{position:"bottom-left",nodeColor:S=>{var k;const w=(k=S.data)==null?void 0:k.status;return w==="running"?"#3b82f6":w==="completed"?"#10b981":w==="failed"||w==="error"?"#ef4444":"#555"},maskColor:"rgba(0,0,0,0.8)",style:{width:80,height:50},className:"!bg-[#0a0a0a] !border-[#222]"})]})})]})}function ua({text:e,className:t=""}){return p.jsx("div",{className:`prose-markdown ${t}`,children:p.jsx(Hp,{remarkPlugins:[Fp],rehypePlugins:[Gp],components:Vp,children:e})})}const Q1=6,W1=20;function An({text:e,maxLines:t=20}){const[r,a]=ee.useState(!1),o=e.trimEnd().split(` -`).length>t;return p.jsxs("div",{children:[p.jsx("div",{className:r&&o?"max-h-[1200px] overflow-auto":"",style:!r&&o?{display:"-webkit-box",WebkitLineClamp:t,WebkitBoxOrient:"vertical",overflow:"hidden"}:void 0,children:p.jsx(ua,{text:e})}),o&&p.jsx("button",{onClick:()=>a(!r),className:"text-xs text-[#555] hover:text-[#888] mt-1",children:r?"Show less":"Show more"})]})}function wi({children:e,className:t=""}){const[r,a]=ee.useState(!1),o=typeof e=="string"?e.trimEnd().split(` -`):null,c=o!==null&&o.length>Q1,d=c&&!r?o.slice(0,Q1).join(` -`):e;return p.jsxs("div",{children:[p.jsx("pre",{className:`font-mono text-[13px] leading-relaxed whitespace-pre-wrap break-words mt-1 ${r?"overflow-auto max-h-[1200px]":"overflow-hidden"} ${t}`,children:d}),c&&p.jsx("button",{onClick:()=>a(!r),className:"text-xs text-[#555] hover:text-[#888] mt-0.5",children:r?"Show less":"Show more"})]})}function dg({code:e,language:t,className:r="",collapsible:a=!1}){const[s,o]=ee.useState(!1),c=e.trimEnd().split(` -`),d=a&&c.length>W1,h=d&&!s?c.slice(0,W1).join(` -`):e;let f;try{f=t?zn.highlight(h,{language:t,ignoreIllegals:!0}).value:zn.highlightAuto(h).value}catch{f=zn.highlightAuto(h).value}return p.jsxs("div",{children:[p.jsx("pre",{className:`font-mono text-[12px] leading-relaxed px-0 py-1 mt-1 whitespace-pre-wrap break-all ${a?s?"overflow-auto max-h-[1200px]":"overflow-hidden":"overflow-auto max-h-[400px]"} ${r}`,children:p.jsx("code",{dangerouslySetInnerHTML:{__html:f}})}),d&&p.jsx("button",{onClick:()=>o(!s),className:"text-xs text-[#555] hover:text-[#888] mt-0.5",children:s?"Show less":"Show more"})]})}const XB=50,J1=200,e_=25,t_=24,KB=[/\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],ZB=/^Chunk ID: [0-9a-f]+\s*$/,QB=[/^Wall time: [\d.]+ seconds\s*$/,/^Process exited with code -?\d+\s*$/,/^Process running with session ID \d+\s*$/,/^Original token count: \d+\s*$/];function WB(e){const t=[];for(let r=0;rs.test(e[a]));)a++;aJ1?e.slice(0,J1-3)+"...":e}function e7(e,t=""){let r=e.replace(/\x1b(?:[@-Z\\-_]|\[[0-?]*[ -/]*[@-~]|\][^\x07]*\x07)/g,"").replace(/\r/g,"");for(const a of KB)r=r.replace(a,"");if(r.trim()){const a=WB(r.split(` -`)),s=[];for(const o of a)s.length===0&&!o.trim()||/^\[STRIX_\d+\]\$\s*/.test(o)||t&&o.trim()===t.trim()||t&&new RegExp(`^[\\$#>]\\s*${JB(t.trim())}\\s*$`).test(o)||s.push(o);for(;s.length>0&&/^\[STRIX_\d+\]\$\s*/.test(s[s.length-1]);)s.pop();r=s.join(` -`)}return r.trim()}function t7(e){const t=e.split(` -`);if(t.length<=XB)return t.map(Om).join(` -`);const r=t.length-e_-t_;return[...t.slice(0,e_).map(Om),`... ${r} lines truncated ...`,...t.slice(-t_).map(Om)].join(` -`)}function n7({toolName:e,args:t,result:r}){const a=e==="write_stdin",s=a?t.chars??t.input??"":t.command??t.cmd??"",o=r;let c=null,d=null,h=null;if(o&&typeof o=="object"){c=typeof o.content=="string"?o.content:null,d=typeof o.error=="string"?o.error:null,h=typeof o.exit_code=="number"?o.exit_code:null;const m=typeof o.status=="string"?o.status:"";(m==="running"||m==="command still running")&&(c=null)}else typeof o=="string"&&(c=o);const f=c?t7(e7(c,s)):null;return p.jsxs("div",{children:[p.jsx("span",{className:"text-emerald-400/80 font-semibold text-sm",children:a?"Terminal input":"Terminal"}),s&&p.jsx(dg,{code:s,language:"bash",collapsible:!0}),d&&p.jsx(wi,{className:"text-red-400/70",children:d}),f&&p.jsx(wi,{className:"text-[#666]",children:f}),h!=null&&h!==0&&p.jsxs("div",{className:"font-mono text-[13px] text-red-400/70 mt-0.5",children:["exit code ",h]})]})}const n_={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"},r_={click:"clicking",double_click:"double clicking",hover:"hovering"};function Rm({prefix:e,url:t,suffix:r}){return p.jsxs("span",{className:"text-[#888] text-[13px]",children:[e,t&&p.jsx("a",{href:t,target:"_blank",rel:"noopener noreferrer",className:"text-cyan-400/80 hover:underline",children:t}),r]})}function r7(e){const t=e.action??"",r=e.url??void 0;if(t in n_)return n_[t];if(t==="launch")return r?p.jsx(Rm,{prefix:"launching ",url:r}):"launching";if(t==="goto"||t==="navigate")return p.jsx(Rm,{prefix:"navigating to ",url:r});if(t==="new_tab")return p.jsx(Rm,{prefix:"opening tab ",url:r});if(t in r_)return r_[t];if(t==="type")return`typing "${(e.text??"").slice(0,40)}"`;if(t==="press_key"||t==="key_press")return`pressing key ${e.key??""}`;if(t==="save_pdf"||t==="save_as_pdf"){const a=e.file_path??"";return`saving PDF${a?` to ${a}`:""}`}return t==="execute_js"?"executing javascript":t||"browser action"}function i7({args:e}){const r=(e.action??"")==="execute_js"?e.js_code??e.code??"":"",a=r7(e);return p.jsxs("div",{children:[p.jsxs("div",{className:"flex items-center gap-2 min-w-0",children:[p.jsx("span",{className:"text-blue-400/80 font-semibold text-sm shrink-0",children:"Browser"}),p.jsx("span",{className:"min-w-0 truncate text-[#888] text-[13px]",children:a})]}),r&&p.jsx(dg,{code:r,language:"javascript",collapsible:!0})]})}function fg(e){return e.length>60?"..."+e.slice(-57):e}const hu=30;function a7({toolName:e,args:t}){const r=t.path??t.file_path??"",a=t.command??"",s=t.old_str??"",o=t.new_str??"",c=t.regex??"";let d;e==="list_files"?d="list":e==="search_files"?d="search":a==="view"?d="view":a==="create"?d="create":a==="str_replace"?d="edit":a==="undo_edit"?d="undo":a==="insert"?d="insert":d="file";const h=r?fg(r):"",f=c?` /${c}/`:"",m=s?s.split(` -`):[],g=o?o.split(` -`):[],y=m.length+g.length,x=y>hu,_=x?Math.round(hu*(m.length/y)):m.length,N=x?hu-_:g.length;return p.jsxs("div",{children:[p.jsxs("div",{className:"flex items-baseline gap-2",children:[p.jsx("span",{className:"text-sky-400/80 font-semibold text-sm shrink-0",children:d}),h&&p.jsx("span",{className:"text-[#888] font-mono text-[13px] break-all",children:h})]}),f&&p.jsx("div",{className:"text-purple-400/60 font-mono text-[13px] break-all mt-0.5",children:f}),(s||o)&&p.jsxs("div",{className:"font-mono text-[13px] leading-relaxed mt-1.5",children:[m.slice(0,_).map((S,w)=>p.jsxs("div",{className:"text-red-400/60",children:[p.jsx("span",{className:"select-none text-red-400/30 mr-1",children:"-"}),S]},`o${w}`)),g.slice(0,N).map((S,w)=>p.jsxs("div",{className:"text-emerald-400/60",children:[p.jsx("span",{className:"select-none text-emerald-400/30 mr-1",children:"+"}),S]},`n${w}`)),x&&p.jsxs("div",{className:"text-[#444] mt-0.5",children:["... ",y-hu," more lines"]})]})]})}const mu=30,s7="*** Begin Patch",l7="*** End Patch",i_="*** Add File: ",a_="*** Update File: ",s_="*** Delete File: ",o7={add:"create",update:"edit",delete:"delete"};function c7(e){const t=e.patch;return typeof t=="string"?t:t&&typeof t=="object"&&typeof t.patch=="string"?t.patch:typeof e.input=="string"?e.input:""}function u7(e){const t=[];let r=null;const a=()=>{r&&t.push(r),r=null};for(const s of e.split(` -`))if(!(s===s7||s===l7))if(s.startsWith(i_))a(),r={kind:"add",path:s.slice(i_.length).trim(),oldLines:[],newLines:[]};else if(s.startsWith(a_))a(),r={kind:"update",path:s.slice(a_.length).trim(),oldLines:[],newLines:[]};else if(s.startsWith(s_))a(),r={kind:"delete",path:s.slice(s_.length).trim(),oldLines:[],newLines:[]};else if((r==null?void 0:r.kind)==="update"){if(s.startsWith("@@"))continue;s.startsWith("-")&&!s.startsWith("---")?r.oldLines.push(s.slice(1)):s.startsWith("+")&&!s.startsWith("+++")&&r.newLines.push(s.slice(1))}else(r==null?void 0:r.kind)==="add"&&(s.startsWith("+")?r.newLines.push(s.slice(1)):s.trim()&&r.newLines.push(s));return a(),t}function d7({op:e}){const t=o7[e.kind]??"file",r=e.oldLines.length+e.newLines.length,a=r>mu,s=a&&r>0?Math.round(mu*(e.oldLines.length/r)):e.oldLines.length,o=a?mu-s:e.newLines.length;return p.jsxs("div",{children:[p.jsxs("div",{className:"flex items-baseline gap-2",children:[p.jsx("span",{className:"text-sky-400/80 font-semibold text-sm shrink-0",children:t}),e.path&&p.jsx("span",{className:"text-[#888] font-mono text-[13px] break-all",children:fg(e.path)})]}),(e.oldLines.length>0||e.newLines.length>0)&&p.jsxs("div",{className:"font-mono text-[13px] leading-relaxed mt-1.5",children:[e.oldLines.slice(0,s).map((c,d)=>p.jsxs("div",{className:"text-red-400/60",children:[p.jsx("span",{className:"select-none text-red-400/30 mr-1",children:"-"}),c]},`o${d}`)),e.newLines.slice(0,o).map((c,d)=>p.jsxs("div",{className:"text-emerald-400/60",children:[p.jsx("span",{className:"select-none text-emerald-400/30 mr-1",children:"+"}),c]},`n${d}`)),a&&p.jsxs("div",{className:"text-[#444] mt-0.5",children:["... ",r-mu," more lines"]})]})]})}function f7({args:e,result:t,status:r}){const a=u7(c7(e));return a.length===0?p.jsxs("div",{children:[p.jsx("span",{className:"text-sky-400/80 font-semibold text-sm",children:"patch"}),r==="failed"&&typeof t=="string"&&t.trim()&&p.jsx("div",{className:"text-red-400/70 text-[13px] mt-1",children:t.trim()})]}):p.jsxs("div",{className:"space-y-2",children:[a.map((s,o)=>p.jsx(d7,{op:s},o)),r==="failed"&&typeof t=="string"&&t.trim()&&p.jsx("div",{className:"text-red-400/70 text-[13px]",children:t.trim()})]})}const h7=/data:image\/(png|jpe?g|gif|webp);base64,([A-Za-z0-9+/]+={0,2})/;function m7(e){let t=null;if(typeof e=="string")t=e;else if(e&&typeof e=="object"){const a=e;typeof a.image_url=="string"?t=a.image_url:typeof a.url=="string"&&(t=a.url)}if(!t)return null;const r=h7.exec(t);return!r||r[2].length<100||r[2].length%4!==0?null:`data:image/${r[1]};base64,${r[2]}`}function p7({args:e,result:t}){const r=(e.path??"").trim(),a=m7(t);let s=null;if(!a&&typeof t=="string"){const o=t.trim();o&&!o.toLowerCase().startsWith("data:image/")&&!o.startsWith("{")&&(s=o)}return p.jsxs("div",{children:[p.jsxs("div",{className:"flex items-baseline gap-2",children:[p.jsx("span",{className:"text-sky-400/80 font-semibold text-sm shrink-0",children:"view image"}),r&&p.jsx("span",{className:"text-[#888] font-mono text-[13px] break-all",children:fg(r)})]}),a&&p.jsx("img",{src:a,alt:r||"Tool image output",className:"mt-1.5 max-w-full max-h-96 rounded-lg border border-white/[0.06] object-contain"}),s&&p.jsx("div",{className:"text-red-400/70 text-[13px] mt-1",children:s})]})}const g7={critical:"text-red-400",high:"text-orange-400",medium:"text-yellow-400",low:"text-blue-400",info:"text-cyan-400"};function b7({args:e,result:t}){const r=e.title??"",a=e.description??"",s=e.impact??"",o=e.target??"",c=e.endpoint??"",d=e.method??"",h=e.technical_analysis??"",f=e.poc_description??"",{language:m,code:g}=dE(e.poc_script_code??""),y=e.remediation_steps??"",x=e.cve??"",_=e.cwe??"",N=t,S=(N&&typeof N=="object"?N.severity:null)??e.severity??"medium",w=String(S).toLowerCase(),k=(N&&typeof N=="object"?N.cvss_score:null)??e.cvss??null,E=g7[w]??"text-yellow-400";return p.jsxs("div",{className:"space-y-3",children:[p.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[p.jsx("span",{className:`font-semibold text-sm ${E}`,children:w.toUpperCase()}),k!=null&&p.jsxs("span",{className:"text-[#888] text-[13px]",children:["CVSS ",k]}),x&&p.jsx("span",{className:"text-[#888] font-mono text-[13px]",children:x}),_&&p.jsx("span",{className:"text-[#888] font-mono text-[13px]",children:_})]}),r&&p.jsx("div",{className:"text-[15px] text-white/80 font-semibold",children:r}),(o||c)&&p.jsxs("div",{className:"text-[13px] text-[#888] font-mono",children:[o,c?` ${d} ${c}`:""]}),a&&p.jsx(An,{text:a,maxLines:20}),s&&p.jsxs("div",{children:[p.jsx("span",{className:"text-emerald-400/60 text-sm font-semibold",children:"Impact"}),p.jsx("div",{className:"mt-1",children:p.jsx(An,{text:s,maxLines:15})})]}),h&&p.jsxs("div",{children:[p.jsx("span",{className:"text-emerald-400/60 text-sm font-semibold",children:"Technical Analysis"}),p.jsx("div",{className:"mt-1",children:p.jsx(An,{text:h,maxLines:20})})]}),(f||g)&&p.jsxs("div",{children:[p.jsx("span",{className:"text-emerald-400/60 text-sm font-semibold",children:"Proof of Concept"}),f&&p.jsx("div",{className:"mt-1",children:p.jsx(ua,{text:f})}),g&&p.jsx(uE,{className:m?`language-${m}`:void 0,children:g})]}),y&&p.jsxs("div",{children:[p.jsx("span",{className:"text-emerald-400/60 text-sm font-semibold",children:"Remediation"}),p.jsx("div",{className:"mt-1",children:p.jsx(An,{text:y,maxLines:15})})]})]})}const x7={critical:"text-red-400",high:"text-orange-400",medium:"text-yellow-400",low:"text-blue-400",info:"text-cyan-400",none:"text-[#888]"};function y7(e){if(!e.agent_name&&!e.by_you)return null;const t=e.by_you?"you":e.agent_name;return p.jsxs("span",{className:"text-[#666] text-xs ml-1.5",children:["(",t,")"]})}function jm(e){const t=String(e??"").toLowerCase(),r=x7[t]??"text-yellow-400";return p.jsx("span",{className:`font-semibold text-[13px] ${r}`,children:t.toUpperCase()||"—"})}function l_({toolName:e,result:t}){const r=t,a=r!=null&&typeof r=="object"&&r.success===!0;if(e==="get_report"){const f=a?r.report:void 0;return p.jsxs("div",{children:[p.jsx("span",{className:"text-red-400/80 font-semibold text-sm",children:"report"}),f?p.jsxs("div",{className:"mt-1.5 space-y-2",children:[p.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[jm(f.severity),f.cvss!=null&&p.jsxs("span",{className:"text-[#888] text-[13px]",children:["CVSS ",f.cvss]}),f.id&&p.jsx("span",{className:"text-[#555] font-mono text-[13px]",children:f.id}),f.cve&&p.jsx("span",{className:"text-[#888] font-mono text-[13px]",children:f.cve}),f.cwe&&p.jsx("span",{className:"text-[#888] font-mono text-[13px]",children:f.cwe}),(f.agent_name||f.by_you)&&p.jsx("span",{className:"text-[#666] text-[13px]",children:f.by_you?"you":f.agent_name})]}),f.title&&p.jsx("div",{className:"text-[15px] text-white/80 font-semibold",children:f.title}),(f.target||f.endpoint)&&p.jsxs("div",{className:"text-[13px] text-[#888] font-mono",children:[f.target,f.endpoint?` ${f.method??""} ${f.endpoint}`:""]}),f.description&&p.jsx(An,{text:f.description,maxLines:20})]}):p.jsx("div",{className:"mt-1 text-[#555] text-xs",children:r&&typeof r=="object"&&r.error||"Report not found"})]})}const s=a?r.reports:null,o=Array.isArray(s)?s:[],c=a&&typeof r.total_count=="number"?r.total_count:o.length,d=a&&r.severity_counts&&typeof r.severity_counts=="object"?r.severity_counts:{},h=Object.entries(d);return p.jsxs("div",{children:[p.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[p.jsx("span",{className:"text-red-400/80 font-semibold text-sm",children:"reports"}),p.jsxs("span",{className:"text-[#555] text-[13px]",children:["(",c,")"]}),h.map(([f,m])=>p.jsxs("span",{className:"text-[13px]",children:[jm(f),p.jsx("span",{className:"text-[#888] ml-0.5",children:m})]},f))]}),o.length>0?p.jsx("div",{className:"mt-1.5 space-y-1",children:o.map((f,m)=>p.jsxs("div",{className:"text-[13px]",children:[p.jsx("span",{className:"text-[#555] mr-1",children:"-"}),jm(f.severity),f.id&&p.jsx("span",{className:"text-[#555] font-mono ml-1.5",children:f.id}),p.jsx("span",{className:"text-[#999] ml-1.5",children:f.title??"(untitled)"}),y7(f),(f.target||f.endpoint)&&p.jsxs("div",{className:"ml-3 text-[#666] font-mono text-xs",children:[f.target,f.endpoint?` ${f.method??""} ${f.endpoint}`:""]}),f.description_preview&&p.jsx("div",{className:"ml-3",children:p.jsx(ua,{text:f.description_preview})})]},f.id??m))}):p.jsx("div",{className:"mt-1 text-[#555] text-xs",children:"No reports filed yet"})]})}const rS=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 hg(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 Xr(e,t=80){return e.length>t?e.slice(0,t-3)+"...":e}function gp(e,t=150){return Xr(e.replace(/\n/g," ").replace(/\r/g,"").replace(/\t/g," "),t)}function bp(e,t){const r=e.split(` -`),a=r.slice(0,t).map(s=>Xr(s,rS-5)).join(` -`);return r.length>t?a+` -...`:a}function v7({args:e,result:t}){const r=e.httpql_filter??"",a=t,s=a?a.requests:null,o=Array.isArray(s)?s:[];return p.jsxs("div",{children:[p.jsxs("div",{className:"flex items-center gap-2",children:[p.jsx("span",{className:"text-purple-400/80 font-semibold text-sm",children:"listing requests"}),r&&p.jsx("span",{className:"text-[#888] text-[13px]",children:Xr(r,150)})]}),o.length>0&&p.jsxs("div",{className:"mt-1.5 font-mono text-[13px] space-y-0.5",children:[o.slice(0,20).map((c,d)=>{const h=(c.method??"GET").toUpperCase(),f=c.host??"",m=c.path??"",g=c.response,y=(g==null?void 0:g.statusCode)??null;return p.jsxs("div",{className:"flex gap-2",children:[p.jsx("span",{className:`w-10 shrink-0 font-bold ${iS[h]??"text-[#888]"}`,children:h}),p.jsx("span",{className:"text-[#777] truncate",children:Xr(f+m,180)}),y!=null&&p.jsx("span",{className:`ml-auto shrink-0 ${hg(y)}`,children:y})]},d)}),o.length>20&&p.jsxs("div",{className:"text-[#555]",children:["... +",o.length-20," more"]})]})]})}function _7({args:e,result:t}){const r=e.request_id,a=e.part??"request",s=e.search_pattern??"",o=t,c=o?o.matches:null,d=Array.isArray(c)?c:[],h=o?o.content??null:null,f=o?!!o.has_more:!1;return p.jsxs("div",{children:[p.jsxs("div",{className:"flex items-center gap-2",children:[p.jsxs("span",{className:"text-purple-400/80 font-semibold text-sm",children:[s?"searching":"viewing"," ",a]}),r!=null&&p.jsxs("span",{className:"text-[#888] text-[13px]",children:["#",r]}),s&&p.jsxs("span",{className:"text-[#666] font-mono text-[13px]",children:["/",Xr(s,100),"/"]})]}),d.length>0&&p.jsxs("div",{className:"mt-1.5 font-mono text-[13px] space-y-1",children:[d.slice(0,5).map((m,g)=>{const y=(m.before??"").replace(/\n/g," ").replace(/\r/g,"").slice(-100),x=(m.after??"").replace(/\n/g," ").replace(/\r/g,"").slice(0,100);return p.jsxs("div",{children:[y&&p.jsxs("span",{className:"text-[#555]",children:["...",y]}),p.jsx("span",{className:"text-amber-400/80 font-bold",children:m.match}),x&&p.jsxs("span",{className:"text-[#555]",children:[x,"..."]})]},g)}),d.length>5&&p.jsxs("div",{className:"text-[#555]",children:["... +",d.length-5," more matches"]})]}),h&&!d.length&&(()=>{const m=h.split(` -`),g=m.slice(0,15).map(x=>Xr(x,rS)).join(` -`),y=f||m.length>15;return p.jsx(wi,{className:"text-[#666]",children:g+(y?` -... more content available`:"")})})()]})}function w7({args:e,result:t}){const r=(e.method??"GET").toUpperCase(),a=e.url??"",s=e.headers,o=e.body,c=typeof o=="string"?o:"",d=t,h=d?d.error??null:null,f=d?d.status_code??null:null,m=d?d.response_time_ms??null:null,g=d?d.body:null,y=typeof g=="string"?g:null;return p.jsxs("div",{children:[p.jsx("span",{className:"text-purple-400/80 font-semibold text-sm",children:"request"}),p.jsxs("div",{className:"mt-1.5 font-mono text-[13px] space-y-0.5",children:[p.jsxs("div",{children:[p.jsx("span",{className:"text-[#555] select-none mr-1",children:">>"}),p.jsx("span",{className:`font-bold ${iS[r]??"text-[#888]"}`,children:r}),p.jsx("span",{className:"text-[#888] ml-1 break-all",children:Xr(a,180)})]}),s&&typeof s=="object"&&Object.entries(s).slice(0,5).map(([x,_])=>p.jsxs("div",{className:"text-[#555] pl-5",children:[x,": ",gp(String(_),150)]},x))]}),c&&p.jsx(wi,{className:"text-[#888]",children:bp(c,4)}),h&&p.jsx("div",{className:"text-red-400/70 text-[13px] mt-1.5",children:gp(h,150)}),f!=null&&p.jsxs("div",{className:"font-mono text-[13px] mt-1.5",children:[p.jsx("span",{className:"text-[#555] select-none mr-1",children:"<<"}),p.jsx("span",{className:`font-bold ${hg(f)}`,children:f}),m!=null&&p.jsxs("span",{className:"text-[#555] ml-2",children:[m,"ms"]})]}),y&&p.jsx(wi,{className:"text-[#666]",children:bp(y,6)})]})}function E7({args:e,result:t}){const r=e.request_id,a=e.modifications,s=t,o=s?s.status_code??null:null,c=s?s.response_time_ms??null:null,d=s?s.body:null,h=typeof d=="string"?d:null;return p.jsxs("div",{children:[p.jsxs("div",{className:"flex items-center gap-2",children:[p.jsx("span",{className:"text-purple-400/80 font-semibold text-sm",children:"repeating request"}),r!=null&&p.jsxs("span",{className:"text-[#888] text-[13px]",children:["#",r]})]}),a&&typeof a=="object"&&Object.keys(a).length>0&&p.jsx("div",{className:"mt-1.5 font-mono text-[13px] space-y-0.5",children:Object.entries(a).slice(0,5).map(([f,m])=>p.jsxs("div",{children:[p.jsxs("span",{className:"text-orange-400/60",children:[f,":"]})," ",p.jsx("span",{className:"text-[#777]",children:gp(typeof m=="string"?m:JSON.stringify(m),150)})]},f))}),o!=null&&p.jsxs("div",{className:"font-mono text-[13px] mt-1.5",children:[p.jsx("span",{className:"text-[#555] select-none mr-1",children:"<<"}),p.jsx("span",{className:`font-bold ${hg(o)}`,children:o}),c!=null&&p.jsxs("span",{className:"text-[#555] ml-2",children:[c,"ms"]})]}),h&&p.jsx(wi,{className:"text-[#666]",children:bp(h,5)})]})}const N7={get:"getting",list:"listing",create:"creating",update:"updating",delete:"deleting"};function S7({args:e}){const t=e.action??"",r=e.scope_name??"",a=N7[t]??(t||"managing");return p.jsxs("div",{className:"flex items-center gap-2",children:[p.jsxs("span",{className:"text-purple-400/80 font-semibold text-sm",children:[a," proxy scope"]}),r&&p.jsx("span",{className:"text-[#888] text-[13px]",children:Xr(r,50)})]})}function k7({args:e}){const t=e.parent_id;return p.jsxs("div",{className:"flex items-center gap-2",children:[p.jsx("span",{className:"text-purple-400/80 font-semibold text-sm",children:"listing sitemap"}),t&&p.jsxs("span",{className:"text-[#888] text-[13px]",children:["under #",Xr(String(t),20)]})]})}function C7({args:e}){const t=e.entry_id;return p.jsxs("div",{className:"flex items-center gap-2",children:[p.jsx("span",{className:"text-purple-400/80 font-semibold text-sm",children:"viewing sitemap entry"}),t&&p.jsxs("span",{className:"text-[#888] text-[13px]",children:["#",Xr(String(t),20)]})]})}function T7(e){switch(e.toolName){case"list_requests":return p.jsx(v7,{...e});case"view_request":return p.jsx(_7,{...e});case"send_request":return p.jsx(w7,{...e});case"repeat_request":return p.jsx(E7,{...e});case"scope_rules":return p.jsx(S7,{...e});case"list_sitemap":return p.jsx(k7,{...e});case"view_sitemap_entry":return p.jsx(C7,{...e});default:return p.jsx("span",{className:"text-purple-400/80 font-semibold text-sm",children:e.toolName.replace(/_/g," ")})}}function A7({args:e}){const t=e.thought??e.content??"";return t?p.jsxs("div",{children:[p.jsx("span",{className:"text-purple-400/80 font-semibold text-sm",children:"Agent is thinking"}),p.jsx("div",{className:"mt-1.5 italic text-[#888]",children:p.jsx(An,{text:t,maxLines:20})})]}):null}function M7({toolName:e,args:t}){if(e==="create_agent"){const r=t.name??t.agent_name??"",a=t.task??"";return p.jsxs("div",{children:[p.jsxs("div",{className:"flex items-center gap-2",children:[p.jsx("span",{className:"text-cyan-400/80 font-semibold text-sm",children:"spawning"}),r&&p.jsx("span",{className:"text-cyan-400 font-semibold text-sm",children:r})]}),a&&p.jsx("div",{className:"mt-1.5",children:p.jsx(An,{text:a,maxLines:15})})]})}if(e==="agent_finish"){const r=t.result_summary??"",a=t.success,s=t.findings,o=Array.isArray(s)?s:void 0;return p.jsxs("div",{children:[p.jsx("span",{className:`font-semibold text-sm ${a===!1?"text-red-400/80":"text-emerald-400/80"}`,children:a===!1?"Agent failed":"Agent completed"}),r&&p.jsx("div",{className:"mt-1.5",children:p.jsx(An,{text:r,maxLines:20})}),o&&o.length>0&&p.jsx("div",{className:"mt-1.5 space-y-0.5",children:o.map((c,d)=>p.jsxs("div",{className:"text-[13px] text-[#888]",children:[p.jsx("span",{className:"text-red-400/50 mr-1",children:"•"}),typeof c=="string"?c:JSON.stringify(c)]},d))})]})}if(e==="send_message_to_agent"){const r=t.message??"",a=t.target_agent_id??t.agent_id??"";return p.jsxs("div",{children:[p.jsxs("div",{className:"flex items-center gap-2",children:[p.jsx("span",{className:"text-cyan-400/80 font-semibold text-sm",children:"message"}),a&&p.jsxs("span",{className:"text-[#888] text-[13px]",children:["to ",a.slice(0,16)]})]}),r&&p.jsx("div",{className:"mt-1.5",children:p.jsx(An,{text:r,maxLines:20})})]})}if(e==="wait_for_agents"){const r=t.reason??"";return p.jsxs("div",{className:"flex items-center gap-2",children:[p.jsx("span",{className:"text-cyan-400/80 font-semibold text-sm",children:"waiting"}),r&&p.jsx("span",{className:"text-[#888] text-[13px] truncate",children:r})]})}if(e==="stop_agent"){const r=t.target_agent_id??"",a=t.cascade!==!1,s=t.reason??"";return p.jsxs("div",{children:[p.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[p.jsx("span",{className:"text-red-400/80 font-semibold text-sm",children:"stopping"}),r&&p.jsx("span",{className:"text-[#888] text-[13px]",children:r.slice(0,16)}),a&&p.jsx("span",{className:"text-[#555] text-[13px] italic",children:"+ descendants"})]}),s&&p.jsx("div",{className:"mt-1.5 text-[#888] text-[13px]",children:s})]})}return e==="view_agent_graph"?p.jsx("span",{className:"text-cyan-400/80 font-semibold text-sm",children:"viewing agents graph"}):p.jsx("span",{className:"text-cyan-400/80 font-semibold text-sm",children:e.replace(/_/g," ")})}function O7({args:e,result:t}){const r=e.query??e.search_query??"",a=t,s=a?a.content??null:null,o=a&&!a.success?a.message??null:null;return p.jsxs("div",{children:[p.jsx("span",{className:"text-amber-400/80 font-semibold text-sm",children:"Searching the web"}),r&&p.jsx("div",{className:"text-[#888] text-[13px] mt-0.5",children:r}),o&&p.jsx("div",{className:"text-red-400/70 text-[13px] mt-1.5",children:o}),s&&p.jsx("div",{className:"mt-2",children:p.jsx(An,{text:s,maxLines:15})})]})}const R7=50,o_=200,c_=25,u_=24,j7=/\x1b(?:[@-Z\\-_]|\[[0-?]*[ -/]*[@-~]|\][^\x07]*\x07)/g,D7=/\.\.\. \[(stdout|stderr|result|output|error) truncated at \d+k? chars\]/g;function L7(e){return e.replace(j7,"")}function Dm(e){const t=L7(e);return t.length>o_?t.slice(0,o_-3)+"...":t}function z7(e){return e.replace(D7,"").trim()}function I7(e){const t=e.split(` -`);if(t.length<=R7)return t.map(Dm).join(` -`);const r=t.length-c_-u_;return[...t.slice(0,c_).map(Dm),`... ${r} lines truncated ...`,...t.slice(-u_).map(Dm)].join(` -`)}function B7({args:e,result:t}){const r=e.action??"",a=e.code??e.script??"",s=t;let o=null;s&&typeof s=="object"?o=typeof s.stdout=="string"?s.stdout:null:typeof s=="string"&&(o=s);const c=r==="new_session"?"new session":r==="close"?"close session":r==="list_sessions"?"list sessions":null,d=o?I7(z7(o)):null;return p.jsxs("div",{children:[p.jsxs("div",{className:"flex items-center gap-2",children:[p.jsx("span",{className:"text-yellow-400/80 font-semibold text-sm",children:"Python"}),c&&p.jsx("span",{className:"text-[#888] text-[13px]",children:c})]}),a&&p.jsx(dg,{code:a,language:"python",collapsible:!0}),d&&p.jsx(wi,{className:"text-[#666]",children:d})]})}function U7({args:e}){const t=e.targets,a=(Array.isArray(t)?t:[]).map(s=>typeof s=="object"&&s?s.original??null:null).filter(Boolean);return p.jsxs("div",{children:[p.jsxs("div",{className:"flex items-center gap-2",children:[p.jsx("span",{className:"text-emerald-400/80 font-semibold text-sm",children:"Starting penetration test"}),a.length===1&&p.jsxs("span",{className:"text-[#888] text-[13px]",children:["on ",a[0]]})]}),a.length>1&&p.jsx("div",{className:"mt-1.5 space-y-0.5",children:a.map((s,o)=>p.jsxs("div",{className:"text-[13px] text-[#888]",children:[p.jsx("span",{className:"text-[#555] mr-1",children:"•"}),s]},o))})]})}function H7({args:e}){const t=e.name??"Unknown Agent",r=e.task??"";return p.jsxs("div",{children:[p.jsxs("div",{className:"flex items-center gap-2",children:[p.jsx("span",{className:"text-[#888] text-[13px]",children:"subagent"}),p.jsx("span",{className:"text-purple-400 font-semibold text-sm",children:t})]}),r&&p.jsx("div",{className:"mt-1.5",children:p.jsx(An,{text:r,maxLines:15})})]})}function $7(e){return e.toolName==="subagent_start_info"?p.jsx(H7,{...e}):p.jsx(U7,{...e})}function q7({args:e}){const t=e.executive_summary??"",r=e.methodology??"",a=e.technical_analysis??"",s=e.recommendations??"";return p.jsxs("div",{className:"space-y-3",children:[p.jsx("span",{className:"text-emerald-400/80 font-semibold text-sm",children:"Penetration test completed"}),t&&p.jsxs("div",{children:[p.jsx("span",{className:"text-emerald-400/60 text-sm font-semibold",children:"Executive Summary"}),p.jsx("div",{className:"mt-1",children:p.jsx(An,{text:t,maxLines:25})})]}),r&&p.jsxs("div",{children:[p.jsx("span",{className:"text-emerald-400/60 text-sm font-semibold",children:"Methodology"}),p.jsx("div",{className:"mt-1",children:p.jsx(An,{text:r,maxLines:25})})]}),a&&p.jsxs("div",{children:[p.jsx("span",{className:"text-emerald-400/60 text-sm font-semibold",children:"Technical Analysis"}),p.jsx("div",{className:"mt-1",children:p.jsx(An,{text:a,maxLines:25})})]}),s&&p.jsxs("div",{children:[p.jsx("span",{className:"text-emerald-400/60 text-sm font-semibold",children:"Recommendations"}),p.jsx("div",{className:"mt-1",children:p.jsx(An,{text:s,maxLines:25})})]}),!t&&!r&&!a&&!s&&p.jsx("div",{className:"text-[#555] text-xs",children:"Generating final report..."})]})}function P7({toolName:e,args:t,result:r}){if(e==="create_note"){const a=t.title??"",s=t.content??"",o=t.category??"general";return p.jsxs("div",{children:[p.jsxs("div",{className:"flex items-center gap-2",children:[p.jsx("span",{className:"text-amber-400/80 font-semibold text-sm",children:"note"}),p.jsxs("span",{className:"text-[#555] text-[13px]",children:["(",o,")"]})]}),a&&p.jsx("div",{className:"mt-1.5 text-[#999] text-[13px]",children:a}),s&&p.jsx("div",{className:"mt-1",children:p.jsx(ua,{text:s})})]})}if(e==="delete_note")return p.jsx("span",{className:"text-amber-400/80 font-semibold text-sm",children:"note removed"});if(e==="update_note"){const a=t.title??"",s=t.content??"";return p.jsxs("div",{children:[p.jsx("span",{className:"text-amber-400/80 font-semibold text-sm",children:"note updated"}),a&&p.jsx("div",{className:"mt-1.5 text-[#999] text-[13px]",children:a}),s&&p.jsx("div",{className:"mt-1",children:p.jsx(ua,{text:s})})]})}if(e==="get_note"){const a=r,s=a&&typeof a=="object"&&a.success?a.note:void 0;return p.jsxs("div",{children:[p.jsx("span",{className:"text-amber-400/80 font-semibold text-sm",children:"note read"}),s&&p.jsxs(p.Fragment,{children:[p.jsxs("div",{className:"mt-1.5 text-[#999] text-[13px]",children:[s.title??"(untitled)",p.jsxs("span",{className:"text-[#555] ml-1",children:["(",s.category??"general",")"]}),(s.by_you||s.agent_name)&&p.jsxs("span",{className:"text-[#666] ml-1 text-xs",children:["by ",s.by_you?"you":s.agent_name]})]}),s.content&&p.jsx("div",{className:"mt-1",children:p.jsx(ua,{text:s.content})})]})]})}if(e==="list_notes"){const a=r;let s=[];if(a&&typeof a=="object"&&a.success){const o=a.notes;s=Array.isArray(o)?o:[]}return p.jsxs("div",{children:[p.jsx("span",{className:"text-amber-400/80 font-semibold text-sm",children:"notes"}),s.length>0?p.jsx("div",{className:"mt-1.5 space-y-0.5",children:s.map((o,c)=>p.jsxs("div",{className:"text-[13px]",children:[p.jsx("span",{className:"text-[#555] mr-1",children:"-"}),p.jsx("span",{className:"text-[#999]",children:o.title??"(untitled)"}),p.jsxs("span",{className:"text-[#555] ml-1",children:["(",o.category??"general",")"]}),(o.by_you||o.agent_name)&&p.jsxs("span",{className:"text-[#666] ml-1 text-xs",children:["by ",o.by_you?"you":o.agent_name]}),o.content&&p.jsx("div",{className:"ml-3",children:p.jsx(ua,{text:o.content})})]},c))}):p.jsx("div",{className:"mt-1 text-[#555] text-xs",children:"No notes"})]})}return p.jsx("span",{className:"text-amber-400/80 font-semibold text-sm",children:"note"})}const F7={create_todo:{label:"Task added",Icon:XC},list_todos:{label:"Plan",Icon:Xk},update_todo:{label:"Task updated",Icon:GC},mark_todo_done:{label:"Task completed",Icon:D_},mark_todo_pending:{label:"Task reopened",Icon:nT},delete_todo:{label:"Task removed",Icon:pT}};function G7({status:e}){return e==="done"?p.jsx(D_,{className:"w-3.5 h-3.5 text-emerald-400/70 shrink-0"}):e==="in_progress"?p.jsx(sC,{className:"w-3.5 h-3.5 text-purple-400/70 shrink-0 animate-pulse"}):p.jsx(oC,{className:"w-3.5 h-3.5 text-[#444] shrink-0"})}function V7({todos:e,highlightId:t}){return p.jsx("div",{className:"space-y-0",children:e.map((r,a)=>{const s=r.status??"pending",o=t&&r.id===t;return p.jsxs("div",{className:`flex items-start gap-2.5 py-1.5 px-2 -mx-2 rounded-md transition-colors ${o?"bg-purple-500/[0.08]":""}`,children:[p.jsx("div",{className:"mt-[1px]",children:p.jsx(G7,{status:s})}),p.jsx("span",{className:`text-[13px] leading-snug ${s==="done"?"text-[#555] line-through":s==="in_progress"?"text-[#bbb]":"text-[#999]"}`,children:r.title??"(untitled)"})]},r.id??a)})})}function Y7({toolName:e,args:t,result:r}){const a=F7[e]??{label:"Plan",Icon:WC},s=a.Icon,o=r;if(typeof o=="string"&&o.trim())return p.jsxs("div",{children:[p.jsxs("div",{className:"flex items-center gap-2",children:[p.jsx(s,{className:"w-3.5 h-3.5 text-purple-400/60"}),p.jsx("span",{className:"text-purple-400/80 font-semibold text-sm",children:a.label})]}),p.jsx("div",{className:"mt-1.5 text-[#888] text-[13px]",children:o.trim()})]});let c=[],d=null,h;if(o&&typeof o=="object"){if(d=o.error??null,o.success){const m=o.todos;c=Array.isArray(m)?m:[]}h=o.id??t.todo_id??void 0}const f=e!=="list_todos"?h:void 0;return c.length===0&&!d?p.jsxs("div",{className:"flex items-center gap-2",children:[p.jsx(s,{className:"w-3.5 h-3.5 text-purple-400/60"}),p.jsx("span",{className:"text-purple-400/80 font-semibold text-sm",children:a.label})]}):p.jsxs("div",{children:[p.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[p.jsx(s,{className:"w-3.5 h-3.5 text-purple-400/60"}),p.jsx("span",{className:"text-purple-400/80 font-semibold text-sm",children:a.label})]}),d&&p.jsx("div",{className:"text-red-400/70 text-[13px] mb-2",children:d}),c.length>0&&p.jsx("div",{className:"rounded-lg border border-white/[0.06] bg-white/[0.015] px-3 py-2",children:p.jsx(V7,{todos:c,highlightId:f})})]})}function d_(e){if(e==null)return null;if(typeof e=="string")return e.trim()?e:null;if(typeof e=="object"){const t=e;if(typeof t.__raw=="string")return t.__raw;if(Object.keys(t).length===0)return null;try{return JSON.stringify(e,null,2)}catch{return String(e)}}return String(e)}function aS({toolName:e,args:t,result:r}){const a=d_(t),s=d_(r);return p.jsxs("div",{children:[p.jsx("span",{className:"text-[#888] font-semibold text-sm",children:e.replace(/_/g," ")}),a&&p.jsx(wi,{className:"text-[#777]",children:a}),s&&p.jsx(wi,{className:"text-[#666]",children:s})]})}function X7({args:e}){const t=e.skills,r=(Array.isArray(t)?t:String(t??"").split(",")).map(a=>String(a).trim()).filter(Boolean);return p.jsxs("div",{className:"flex items-center gap-2",children:[p.jsx("span",{className:"text-emerald-400/80 font-semibold text-sm",children:"Loading skill"}),r.length>0&&p.jsx("span",{className:"text-[#888] text-[13px]",children:r.join(", ")})]})}function K7({args:e}){const t=e.message??"";return t?p.jsxs("div",{children:[p.jsx(ua,{text:t}),p.jsx("div",{className:"mt-1.5 text-[#888] text-[13px]",children:"waiting for your reply"})]}):null}function Z7(e){return!e||typeof e!="object"||Array.isArray(e)?[]:Object.entries(e).map(([t,r])=>{const a=typeof r=="string"?r:JSON.stringify(r);return`${t}: ${a??String(r)}`})}const f_=600;function Q7(e){if(typeof e=="string"){const t=e.trim();return t?t.length>f_?`${t.slice(0,f_)}…`:t:null}return null}function W7({toolName:e,mcpTool:t,mcpConnection:r,args:a,result:s,status:o}){const c=Z7(a),d=o==="failed"||o==="error",h=d?Q7(s):null;return p.jsxs("div",{children:[p.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[p.jsx("span",{className:"font-mono text-teal-300 font-semibold text-sm",children:t||e}),p.jsx("span",{className:"text-[13px] text-[#555]",children:"via MCP server"}),r&&p.jsx("span",{className:"text-[13px] text-teal-400/80",children:r})]}),c.length>0&&p.jsx("div",{className:"mt-1 font-mono text-[13px] leading-relaxed",children:c.map(f=>p.jsx("div",{className:"text-[#777] break-all",children:f},f))}),p.jsxs("div",{className:"mt-1 text-[13px]",children:[o==="running"&&p.jsx("span",{className:"text-[#666]",children:"Running"}),o==="completed"&&p.jsx("span",{className:"text-emerald-400/80",children:"✓ Done"}),d&&p.jsx("span",{className:"text-red-400/80",children:"✗ Failed"})]}),h&&p.jsx("pre",{className:"mt-1 font-mono text-[13px] leading-relaxed whitespace-pre-wrap break-words text-red-400/70",children:h})]})}const Ga={terminal:{renderer:n7,icon:$_,color:"text-emerald-400"},python:{renderer:B7,icon:dC,color:"text-yellow-400"},browser:{renderer:i7,icon:B_,color:"text-blue-400"},filesystem:{renderer:a7,icon:yC,color:"text-sky-400"},proxy:{renderer:T7,icon:M_,color:"text-purple-400",match:/request|sitemap|scope/},reporting:{renderer:b7,icon:sT,color:"text-red-400"},thinking:{renderer:A7,icon:R_,color:"text-purple-400"},agents:{renderer:M7,icon:Mo,color:"text-cyan-400",match:/agent/},search:{renderer:O7,icon:iT,color:"text-amber-400"},lifecycle:{renderer:$7,icon:I_,color:"text-emerald-400"},notes:{renderer:P7,icon:fT,color:"text-amber-400",match:/note/},skills:{renderer:X7,icon:Hm,color:"text-emerald-400"},todos:{renderer:Y7,icon:zC,color:"text-purple-400",match:/todo/},telemetry:{renderer:aS,icon:Hm,color:"text-[#555]"},mcp:{renderer:W7,icon:U_,color:"text-teal-400"}},J7={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","list_reports","get_report"],thinking:["think"],agents:["create_agent","agent_finish","send_message_to_agent","wait_for_agents","view_agent_graph","stop_agent"],search:["web_search"],lifecycle:["scan_start_info","subagent_start_info","finish_scan","respond_to_user"],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"],mcp:[]},eU=Object.fromEntries(Object.entries(J7).flatMap(([e,t])=>t.map(r=>[r,e]))),tU={finish_scan:q7,respond_to_user:K7,apply_patch:f7,view_image:p7,list_reports:l_,get_report:l_},nU={agent_finish:{icon:I_,color:"text-cyan-400"},send_message_to_agent:{icon:mh,color:"text-cyan-400"},wait_for_agents:{icon:mh,color:"text-cyan-400"},respond_to_user:{icon:mh,color:"text-emerald-400"},view_agent_graph:{icon:bC,color:"text-cyan-400"},stop_agent:{icon:O_,color:"text-red-400"},scan_start_info:{icon:mC,color:"text-emerald-400"},subagent_start_info:{icon:Mo,color:"text-purple-400"},view_image:{icon:RC,color:"text-sky-400"}},rU=Ga.telemetry;function sS(e){var r;const t=eU[e];if(t)return t;for(const[a,s]of Object.entries(Ga))if((r=s.match)!=null&&r.test(e))return a;return null}function iU(e,t){if(t)return Ga.mcp.renderer;const r=tU[e];if(r)return r;const a=sS(e);return a?Ga[a].renderer:aS}function aU(e,t){if(t)return{icon:Ga.mcp.icon,color:Ga.mcp.color};const r=nU[e];if(r)return r;const a=sS(e),s=a?Ga[a]:rU;return{icon:s.icon,color:s.color}}const sU=30;function lU({role:e,content:t}){const r=e==="user"||e==="human";return p.jsxs("div",{children:[p.jsx("span",{className:`font-semibold text-sm ${r?"text-blue-400/80":"text-purple-400/80"}`,children:r?"User":"Thinking"}),p.jsx("div",{className:"mt-1.5 italic text-[#888]",children:p.jsx(An,{text:t,maxLines:sU})})]})}class oU extends ee.Component{constructor(t){super(t),this.state={hasError:!1}}static getDerivedStateFromError(){return{hasError:!0}}render(){return this.state.hasError?p.jsx("span",{className:"text-[#555] font-semibold text-sm",children:this.props.toolName.replace(/_/g," ")}):this.props.children}}function cU(e){const t=iU(e.toolName,e.mcpConnection);return p.jsx(oU,{toolName:e.toolName,children:p.jsx(t,{...e})})}function lS(e){if(e==null||typeof e!="string")return e;const t=e.trim();if(!t)return e;try{return JSON.parse(t)}catch{}try{const r=t.replace(/\bNone\b/g,"null").replace(/\bTrue\b/g,"true").replace(/\bFalse\b/g,"false").replace(/'/g,'"');return JSON.parse(r)}catch{return{__raw:e}}}function h_(e){return typeof e=="string"&&e?e:null}function oS(e){const t=lS(e);return t&&typeof t=="object"&&!Array.isArray(t)?t:t==null?{}:{__raw:typeof t=="string"?t:JSON.stringify(t)}}function m_(e){const t=/(\d+)$/.exec(e);return t?parseInt(t[1],10):0}function mg(e){var r;const t=(r=e.data)==null?void 0:r.role;return e.type==="chat"&&(t==="user"||t==="human")}function uU(e){var t;return mg(e)&&String(((t=e.data)==null?void 0:t.content)??"").startsWith("[Message from ")}function dU(e){const t=new Set;let r=!1;for(const a of e)if(mg(a)){if(uU(a)){t.add(a.id);continue}r||(r=!0,t.add(a.id))}return t}const fU={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 hU(e){return e==="completed"?"completed":e==="running"?"running":e==="failed"||e==="crashed"?"failed":e}function mU(e,t){var d;const r=new Map;for(const h of e)if(h.parent_id){const f=r.get(h.parent_id)??[];f.push(h.id),r.set(h.parent_id,f)}const a=new Map,s=new Map,o=new Map;for(const h of t)if(h.type==="tool"){if(a.set(h.agent_id,(a.get(h.agent_id)??0)+1),((d=h.data)==null?void 0:d.tool_name)==="create_agent"){const f=oS(h.data.args),m=f.name??f.agent_name??"",g=f.task??"";m&&g&&o.set(m,g)}}else mg(h)||s.set(h.agent_id,(s.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:o.get(h.name)??"",status:hU(h.status),parentId:h.parent_id,children:r.get(h.id)??[],createdAt:h.created_at,toolCount:a.get(h.id)??0,messageCount:s.get(h.id)??0});return c}function pU({agent:e,events:t,showHeader:r=!0}){const a=ee.useMemo(()=>{const c=t.filter(h=>h.agent_id===e.id).sort((h,f)=>m_(h.id)-m_(f.id)),d=dU(c);return c.filter(h=>!d.has(h.id))},[t,e.id]),s=a.filter(c=>c.type==="tool").length,o=a.length-s;return p.jsxs("div",{children:[r&&p.jsxs(p.Fragment,{children:[p.jsxs("div",{className:"flex items-center gap-2 flex-wrap mb-1",children:[p.jsx("span",{className:"text-base font-semibold text-white truncate",children:e.name}),p.jsx("span",{className:`flex-shrink-0 text-xs font-medium capitalize px-2 py-0.5 rounded-full border ${fU[e.status]??"text-[#aaa] border-[#333] bg-[#1a1a1a]"}`,children:e.status}),p.jsx("span",{className:"font-mono text-xs text-[#555]",children:e.id})]}),p.jsxs("p",{className:"text-xs text-[#666] mb-4",children:[o," message",o===1?"":"s"," · ",s," tool call",s===1?"":"s"]})]}),a.length===0?p.jsx("p",{className:"text-sm text-[#666]",children:"No recorded activity for this agent."}):p.jsx("div",{className:"py-1",children:a.map((c,d)=>{var w,k,E,M,B,R,U,I;const h=d===a.length-1,f=c.type==="tool",m=f?String(((w=c.data)==null?void 0:w.tool_name)??"tool"):"",g=f?"":String(((k=c.data)==null?void 0:k.role)??"assistant"),y=h_((E=c.data)==null?void 0:E.mcp_connection),x=h_((M=c.data)==null?void 0:M.mcp_tool);let _,N;if(f){const X=aU(m,y);_=X.icon,N=X.color}else{const X=g==="user"||g==="human";_=X?Mo:R_,N=X?"text-blue-400":"text-purple-400"}const S=f?String(((B=c.data)==null?void 0:B.status)??"completed"):"completed";return p.jsxs("div",{className:"flex gap-3",children:[p.jsxs("div",{className:"flex flex-col items-center shrink-0",children:[p.jsx("div",{className:`w-[30px] h-[30px] rounded-full bg-black border flex items-center justify-center shrink-0 ${f&&S==="running"?"border-blue-500/40 animate-pulse":f&&S==="failed"?"border-red-500/30":"border-[#222]"}`,children:p.jsx(_,{className:`w-3.5 h-3.5 ${N}`})}),!h&&p.jsx("div",{className:"w-px flex-1 bg-[#1a1a1a] mt-1"})]}),p.jsx("div",{className:"flex-1 min-w-0 pt-[5px] pb-6",children:f?p.jsx(cU,{toolName:m,mcpConnection:y,mcpTool:x,args:oS((R=c.data)==null?void 0:R.args),result:lS((U=c.data)==null?void 0:U.result)??null,status:S}):p.jsx(lU,{role:g,content:String(((I=c.data)==null?void 0:I.content)??"")})})]},c.id)})})]})}class Bu extends Error{constructor(t){super(t),this.name="RunParseError"}}const gU=["critical","high","medium","low"];function bU(e){const t=String(e??"").toLowerCase().trim();return gU.includes(t)?t:"low"}function xU(e){if(typeof e=="string"&&e.trim()){const t=e.trim().replace(" UTC","Z").replace(" ","T"),r=new Date(t);if(!Number.isNaN(r.getTime()))return r.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 yU(e){return typeof e=="number"&&Number.isFinite(e)?e:null}function cS(e,t){try{return JSON.parse(e)}catch{throw new Bu(`${t} isn't valid JSON. Make sure you selected a Strix run directory.`)}}function vU(e){const t=cS(e,"run.json");if(!t||typeof t!="object"||Array.isArray(t))throw new Bu("run.json is not an object.");const r=t,a=[],s=r.targets_info;if(Array.isArray(s)){for(const x of s)if(x&&typeof x=="object"){const _=x.original;typeof _=="string"&&_&&a.push(_)}}const o=Ot(r.start_time),c=Ot(r.end_time);let d=null;if(o&&c){const x=new Date(o).getTime(),_=new Date(c).getTime();!Number.isNaN(x)&&!Number.isNaN(_)&&_>=x&&(d=Math.round((_-x)/1e3))}let h=null,f=null,m=null,g=null;const y=r.scan_results;if(y&&typeof y=="object"){const x=y;h=Ot(x.executive_summary),f=Ot(x.technical_analysis),m=Ot(x.methodology),g=Ot(x.recommendations)}return{runId:Ot(r.run_id),runName:Ot(r.run_name),targets:a,scanMode:Ot(r.scan_mode),status:Ot(r.status),startTime:o,endTime:c,durationSeconds:d,executiveSummary:h,technicalAnalysis:f,methodology:m,recommendations:g}}function _U(){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 wU(e,t,r){const a=e.cwe,s=typeof a=="string"&&a.trim()?[a.trim()]:Array.isArray(a)?a.filter(c=>typeof c=="string"&&c):null;return{..._U(),id:Ot(e.id)??`vuln-${t+1}`,scan_id:r,title:Ot(e.title)??"Untitled finding",description:Ot(e.description)??"",severity:bU(e.severity),status:"open",created_at:xU(e.timestamp),cve:Ot(e.cve),cvss:yU(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:s,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 EU(e,t=null){const r=cS(e,"vulnerabilities.json");if(!Array.isArray(r))throw new Bu("vulnerabilities.json is not a JSON array.");return r.map((a,s)=>{if(!a||typeof a!="object")throw new Bu(`vulnerabilities.json entry #${s+1} is not an object.`);return wU(a,s,t)})}function NU(e){const t={critical:0,high:0,medium:0,low:0};for(const r of e)t[r.severity]+=1;return t}async function es(e){const t=await fetch(e,{cache:"no-store"});if(!t.ok)throw new Error(`${e} responded ${t.status}`);return t.json()}function sd(e){return e?`?run=${encodeURIComponent(e)}`:""}async function uS(e){const t=await es("/api/run"+sd(e)),r=vU(JSON.stringify(t)),a=t.finished===!0;return{summary:r,raw:t,finished:a}}async function dS(e,t){const r=await es("/api/vulnerabilities"+sd(t));return EU(JSON.stringify(r),e)}async function SU(e){const t=await es("/api/report"+sd(e));return(t==null?void 0:t.markdown)??null}async function fS(e){const t=await es("/api/transcript"+sd(e));return{agents:Array.isArray(t==null?void 0:t.agents)?t.agents:[],events:Array.isArray(t==null?void 0:t.events)?t.events:[]}}async function p_(e){const{summary:t,raw:r,finished:a}=await uS(e),[s,o,c]=await Promise.all([dS(t.runId,e).catch(()=>[]),SU(e).catch(()=>null),fS(e).catch(()=>({agents:[],events:[]}))]);return{summary:t,raw:r,finished:a,vulnerabilities:s,reportMarkdown:o,transcript:c}}async function il(e,t){const r=await fetch(e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t),cache:"no-store"});let a={};try{const s=await r.json();s&&typeof s=="object"&&(a=s)}catch{}return{ok:r.ok,status:r.status,data:a}}async function kU(){const e=await es("/api/runs");return{locked:(e==null?void 0:e.locked)??!0,count:typeof(e==null?void 0:e.count)=="number"?e.count:0,runs:Array.isArray(e==null?void 0:e.runs)?e.runs:[]}}async function CU(){const e=await es("/api/capabilities");return{can_steer:(e==null?void 0:e.can_steer)===!0}}async function TU(e,t){const{ok:r,data:a}=await il("/api/agents/steer",{agent_id:e,message:t});return r&&a.ok===!0?{ok:!0}:{ok:!1,error:String(a.error??"unavailable")}}async function AU(e,t){const{ok:r,data:a}=await il("/api/feedback",{message:e,email:t});return r&&a.ok===!0?{ok:!0}:{ok:!1,error:String(a.error??"unavailable")}}async function MU(){const e=await es("/api/auth/status");return{verified:(e==null?void 0:e.verified)===!0,email:(e==null?void 0:e.email)??null}}async function hS(e){const{ok:t,data:r}=await il("/api/auth/otp/start",{email:e});return t&&r.ok===!0?{ok:!0}:{ok:!1,error:String(r.error??"unavailable")}}async function mS(e,t){const{ok:r,data:a}=await il("/api/auth/otp/verify",{email:e,code:t});return r&&a.verified===!0?{verified:!0,email:String(a.email??e)}:{verified:!1,error:String(a.error??"invalid_code")}}async function OU(){await il("/api/auth/forget",{})}async function RU(e){const{ok:t,data:r}=await il("/api/report/send",e?{run:e}:{});return t&&r.ok===!0?{ok:!0,password:String(r.password??""),filename:String(r.filename??"strix-report.pdf")}:{ok:!1,error:String(r.error??"unavailable")}}const Us="__root__";function pS({agents:e,fixedAgentId:t,className:r}){const a=ee.useRef(null),[s,o]=ee.useState(!1),[c,d]=ee.useState(!1),[h,f]=ee.useState(""),[m,g]=ee.useState(!1),[y,x]=ee.useState(null),_=t!=null,N=ee.useMemo(()=>e.find(z=>!z.parent_id)??e[0]??null,[e]),S=ee.useMemo(()=>e.filter(z=>z.parent_id&&z.status==="running"),[e]),[w,k]=ee.useState(Us),[E,M]=ee.useState(!1);ee.useEffect(()=>{w!==Us&&!S.some(z=>z.id===w)&&k(Us)},[w,S]);const{targetId:B,targetName:R}=ee.useMemo(()=>{if(_){const V=e.find(P=>P.id===t)??null;return{targetId:t??null,targetName:(V==null?void 0:V.name)??"this agent"}}if(w===Us)return{targetId:(N==null?void 0:N.id)??null,targetName:"Root agent"};const z=e.find(V=>V.id===w)??null;return{targetId:(z==null?void 0:z.id)??(N==null?void 0:N.id)??null,targetName:(z==null?void 0:z.name)??"Root agent"}},[e,t,_,N,w]),U=h.trim().length===0;ee.useLayoutEffect(()=>{const z=a.current;z&&(z.style.height="auto",z.style.height=`${z.scrollHeight}px`)},[h]);const I=ee.useCallback(()=>{o(!0),requestAnimationFrame(()=>{var z;return(z=a.current)==null?void 0:z.focus()})},[]),X=ee.useCallback(()=>{o(!1),d(!1),M(!1)},[]),j=ee.useCallback(async()=>{if(m)return;const z=h.trim();if(!z||!B)return;g(!0),x(null);const V=R,P=await TU(B,z);g(!1),P.ok?(f(""),x(`Sent to ${V}`),Tr("agent_steered")):P.error==="not_delivered"?x("Could not reach that agent (it may have finished)."):x("Could not send that message. Try again.")},[m,h,B,R]);return s?p.jsxs("div",{className:Mr("mt-4 rounded-2xl border border-white/[0.08] bg-[#050505] overflow-hidden transition-colors duration-300",c?"border-white/[0.18]":"hover:border-white/[0.12]",r),children:[p.jsxs("div",{className:"flex items-center justify-between gap-3 border-b border-white/[0.06] px-5 py-3",children:[p.jsxs("div",{className:"min-w-0",children:[p.jsxs("div",{className:"flex items-center gap-2",children:[p.jsx(Um,{className:"h-4 w-4 text-[#666]"}),p.jsx("p",{className:"text-sm font-medium text-white",children:"Live prompt"})]}),p.jsx("p",{className:"mt-0.5 text-xs text-[#777]",children:"Connected"})]}),p.jsxs("div",{className:"flex shrink-0 items-center gap-2",children:[_?p.jsxs("div",{className:"rounded-full border border-white/[0.08] bg-white/[0.03] px-3 py-1 text-xs text-[#aaa]",children:["Target: ",p.jsx("span",{className:"text-white",children:R})]}):p.jsxs("div",{className:"flex items-center gap-1.5",children:[p.jsx("span",{className:"text-xs text-[#aaa]",children:"Target:"}),p.jsxs("div",{className:"relative",children:[p.jsxs("button",{type:"button",onClick:()=>M(z=>!z),onBlur:()=>requestAnimationFrame(()=>M(!1)),className:"inline-flex h-7 items-center gap-1 rounded-full border border-white/[0.08] bg-white/[0.03] px-3 text-xs text-white transition-colors hover:border-white/[0.16] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-white/20","aria-haspopup":"listbox","aria-expanded":E,children:[p.jsx("span",{className:"max-w-[140px] truncate",children:R}),p.jsx(mo,{className:"h-3.5 w-3.5 text-[#999]"})]}),E&&p.jsxs("div",{className:"absolute right-0 z-10 mt-1 min-w-[160px] overflow-hidden rounded-lg border border-[#333] bg-[#0a0a0a] py-1 shadow-xl",role:"listbox",children:[p.jsx(g_,{label:"Root agent",active:w===Us,onSelect:()=>{k(Us),M(!1)}}),S.map(z=>p.jsx(g_,{label:z.name,active:w===z.id,onSelect:()=>{k(z.id),M(!1)}},z.id))]})]})]}),p.jsx("button",{type:"button",onClick:X,className:"inline-flex h-7 w-7 items-center justify-center rounded-full text-[#777] transition-colors hover:bg-white/[0.06] hover:text-white focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-white/20","aria-label":"Collapse live prompt composer",children:p.jsx(mo,{className:"h-4 w-4"})})]})]}),p.jsx("div",{className:"px-5 pt-4 pb-3",children:p.jsx("textarea",{ref:a,rows:1,value:h,onChange:z=>f(z.target.value),onFocus:()=>d(!0),onBlur:()=>d(!1),onKeyDown:z=>{z.key==="Enter"&&!z.shiftKey&&(z.preventDefault(),j())},placeholder:"Send a live prompt to the running pentest…",maxLength:4e3,disabled:m,className:"block w-full resize-none border-0 bg-transparent p-0 text-[15px] leading-6 text-white placeholder:text-[#444] focus:outline-none disabled:opacity-60 max-h-[160px] overflow-y-auto"})}),p.jsxs("div",{className:"flex items-center justify-between gap-3 px-4 pb-4",children:[p.jsx("div",{className:"text-xs text-[#666]",children:y??"Press Enter to send."}),p.jsxs("button",{type:"button",onClick:z=>{z.stopPropagation(),j()},disabled:m||U,className:Mr("inline-flex h-10 min-w-[112px] items-center justify-center gap-2 rounded-full px-4 text-sm font-medium transition-colors",m||U?"bg-white/[0.08] text-[#666]":"bg-white text-black hover:bg-neutral-200"),children:[m?p.jsx(Ps,{className:"h-4 w-4 animate-spin"}):p.jsx(Uk,{className:"h-4 w-4",strokeWidth:2.5}),p.jsx("span",{children:"Send prompt"})]})]})]}):p.jsxs("button",{type:"button",onClick:I,className:Mr("mt-4 flex w-full items-center justify-between gap-3 rounded-2xl border border-white/[0.08] bg-[#050505] px-5 py-3 text-left transition-colors duration-300 hover:border-white/[0.12] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-white/20",r),"aria-expanded":!1,"aria-label":"Expand live prompt composer",children:[p.jsxs("div",{className:"flex min-w-0 items-center gap-2",children:[p.jsx(Um,{className:"h-4 w-4 shrink-0 text-[#666]"}),p.jsx("span",{className:"truncate text-sm font-medium text-white",children:"Guide the agent"})]}),p.jsx(j_,{className:"h-4 w-4 shrink-0 text-[#777]"})]})}function g_({label:e,active:t,onSelect:r}){return p.jsx("button",{type:"button",role:"option","aria-selected":t,onMouseDown:a=>{a.preventDefault(),r()},className:Mr("block w-full truncate px-3 py-1.5 text-left text-xs transition-colors hover:bg-white/[0.06]",t?"text-white":"text-[#aaa]"),children:e})}const jU={completed:"bg-emerald-400",running:"bg-blue-400",waiting:"bg-yellow-400",stopped:"bg-[#888]",crashed:"bg-red-400",failed:"bg-red-400"},DU=80;function LU({open:e,agent:t,events:r,steerable:a,onClose:s}){const o=ee.useRef(null),c=ee.useRef(!1),[d,h]=ee.useState(e),[f,m]=ee.useState(e?"open":"closed"),[g,y]=ee.useState(!1),x=ee.useRef(t);ee.useEffect(()=>{t&&(x.current=t)},[t]);const _=t??x.current;ee.useEffect(()=>{if(e){h(!0),m("open");return}m("closed");const S=setTimeout(()=>h(!1),140);return()=>clearTimeout(S)},[e]),ee.useEffect(()=>{if(!d){y(!1);return}const S=requestAnimationFrame(()=>y(!0));return()=>cancelAnimationFrame(S)},[d]);const N=ee.useCallback(()=>{const S=o.current;S&&(c.current=S.scrollHeight-S.scrollTop-S.clientHeight{const S=o.current;!S||!c.current||requestAnimationFrame(()=>{S.scrollTo({top:S.scrollHeight,behavior:"smooth"})})},[r]),ee.useEffect(()=>{if(!d)return;const S=k=>{k.key==="Escape"&&s()};document.addEventListener("keydown",S);const w=document.body.style.overflow;return document.body.style.overflow="hidden",()=>{document.removeEventListener("keydown",S),document.body.style.overflow=w}},[d,s]),!d||!_?null:p.jsx("div",{"data-state":f,className:"agent-modal fixed inset-0 z-50 flex items-center justify-center bg-black/80 p-4 sm:p-8",onClick:s,role:"dialog","aria-modal":"true","aria-label":`Agent ${_.name}`,children:p.jsxs("div",{className:"relative flex h-[60vh] w-[calc(100vw-4rem)] max-w-6xl flex-col overflow-hidden rounded-xl border border-[#222] bg-[#0a0a0a] shadow-2xl",onClick:S=>S.stopPropagation(),children:[p.jsxs("div",{className:"flex items-center justify-between gap-3 border-b border-[#222] px-5 py-3.5",children:[p.jsxs("div",{className:"flex min-w-0 items-center gap-2",children:[p.jsx("span",{className:`h-2 w-2 flex-shrink-0 rounded-full ${jU[_.status]??"bg-[#888]"}`}),p.jsx("span",{className:"truncate text-sm font-semibold text-white",children:_.name}),p.jsx("span",{className:"flex-shrink-0 font-mono text-xs text-[#555]",children:_.id})]}),p.jsx("button",{type:"button",onClick:s,"aria-label":"Close",className:"flex-shrink-0 rounded-md p-1 text-[#888] transition-colors hover:bg-[#1a1a1a] hover:text-white",children:p.jsx(vp,{className:"h-4 w-4"})})]}),p.jsx("div",{ref:o,onScroll:N,className:"flex-1 overflow-y-auto p-5",children:g&&p.jsx(pU,{agent:_,events:r,showHeader:!1})}),a&&p.jsx("div",{className:"border-t border-[#222] px-5 py-3",children:p.jsx(pS,{agents:[_],fixedAgentId:_.id,className:"mt-0"})})]})})}var gS={color:void 0,size:void 0,className:void 0,style:void 0,attr:void 0},b_=da.createContext&&da.createContext(gS),zU=["attr","size","title"];function IU(e,t){if(e==null)return{};var r,a,s=BU(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;ada.createElement(t.tag,Hu({key:r},t.attr),bS(t.child)))}function pg(e){return t=>da.createElement(qU,Uu({attr:Hu({},e.attr)},t),bS(e.child))}function qU(e){var t=r=>{var a=e.attr,s=e.size,o=e.title,c=IU(e,zU),d=s||r.size||"1em",h;return r.className&&(h=r.className),e.className&&(h=(h?h+" ":"")+e.className),da.createElement("svg",Uu({stroke:"currentColor",fill:"currentColor",strokeWidth:"0"},r.attr,a,c,{className:h,style:Hu(Hu({color:e.color||r.color},r.style),e.style),height:d,width:d,xmlns:"http://www.w3.org/2000/svg"}),o&&da.createElement("title",null,o),e.children)};return b_!==void 0?da.createElement(b_.Consumer,null,r=>t(r)):t(gS)}function PU(e){return pg({attr:{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},child:[{tag:"circle",attr:{cx:"5",cy:"6",r:"3"},child:[]},{tag:"path",attr:{d:"M5 9v12"},child:[]},{tag:"circle",attr:{cx:"19",cy:"18",r:"3"},child:[]},{tag:"path",attr:{d:"m15 9-3-3 3-3"},child:[]},{tag:"path",attr:{d:"M12 6h5a2 2 0 0 1 2 2v7"},child:[]}]})(e)}function FU(e){return pg({attr:{viewBox:"0 0 16 16",fill:"currentColor"},child:[{tag:"path",attr:{d:"M15 4.95703C15 4.58711 14.8563 4.24054 14.5949 3.97992L12.0096 1.39234C11.4879 0.86922 10.5788 0.86922 10.0571 1.39234L8 3.45119V3.32321C8 2.55068 7.37187 1.922 6.6 1.922H2.4C1.62813 1.922 1 2.55068 1 3.32321V13.5988C1 14.3713 1.62813 15 2.4 15H12.6667C13.4385 15 14.0667 14.3713 14.0667 13.5988V9.39514C14.0667 8.62261 13.4385 7.99393 12.6667 7.99393H12.5379L14.5949 5.93508C14.8553 5.67445 15 5.32602 15 4.95703ZM2.4 2.85521H6.6C6.85667 2.85521 7.06667 3.06446 7.06667 3.32228V7.99299H1.93333V3.32228C1.93333 3.06446 2.14333 2.85521 2.4 2.85521ZM1.93333 13.5979V8.92714H7.06667V14.0649H2.4C2.14333 14.0649 1.93333 13.8547 1.93333 13.5979ZM13.1333 9.39421V13.5979C13.1333 13.8547 12.9233 14.0649 12.6667 14.0649H8V8.92714H12.6667C12.9233 8.92714 13.1333 9.13638 13.1333 9.39421ZM8 7.99299V6.46287L9.5288 7.99299H8ZM13.9351 5.2737L11.3488 7.86221C11.1789 8.03223 10.8859 8.03223 10.716 7.86221L8.12973 5.2737C8.0448 5.18963 7.99813 5.07753 7.99813 4.95796C7.99813 4.83839 8.0448 4.7263 8.12973 4.64129L10.716 2.05278C10.8009 1.96777 10.9129 1.92106 11.0324 1.92106C11.1519 1.92106 11.2639 1.96777 11.3488 2.05278L13.9351 4.64129C14.02 4.72536 14.0667 4.83746 14.0667 4.95703C14.0667 5.0766 14.02 5.1887 13.9351 5.2737Z"},child:[]}]})(e)}function xS(e){return pg({attr:{viewBox:"0 0 512 512"},child:[{tag:"path",attr:{fill:"none",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"32",d:"M431 320.6c-1-3.6 1.2-8.6 3.3-12.2a34 34 0 0 1 2.1-3.1A162 162 0 0 0 464 215c.3-92.2-77.5-167-173.7-167-83.9 0-153.9 57.1-170.3 132.9a160.7 160.7 0 0 0-3.7 34.2c0 92.3 74.8 169.1 171 169.1 15.3 0 35.9-4.6 47.2-7.7s22.5-7.2 25.4-8.3a26.4 26.4 0 0 1 9.3-1.7 26 26 0 0 1 10.1 2l56.7 20.1a13.5 13.5 0 0 0 3.9 1 8 8 0 0 0 8-8 13 13 0 0 0-.5-2.7z"},child:[]},{tag:"path",attr:{fill:"none",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"32",d:"M66.46 232a146.23 146.23 0 0 0 6.39 152.67c2.31 3.49 3.61 6.19 3.21 8s-11.93 61.87-11.93 61.87a8 8 0 0 0 2.71 7.68A8.17 8.17 0 0 0 72 464a7.3 7.3 0 0 0 2.91-.6l56.21-22a15.7 15.7 0 0 1 12 .2c18.94 7.38 39.88 12 60.83 12A159.2 159.2 0 0 0 284 432.11"},child:[]}]})(e)}const GU=[{icon:NC,label:"PR security reviews"},{icon:cT,label:"Attack surface monitoring"},{icon:ST,label:"Real-time threat intelligence"},{icon:Vk,label:"Scheduled pentesting"},{icon:_T,label:"One-click autofix"},{icon:U_,label:"Jira, Linear & Slack integrations"}];function VU({open:e,onClose:t,description:r,source:a="sidebar"}){const[s,o]=ee.useState(e),[c,d]=ee.useState(e?"open":"closed");return ee.useEffect(()=>{if(e){o(!0),d("open");return}d("closed");const h=setTimeout(()=>o(!1),200);return()=>clearTimeout(h)},[e]),ee.useEffect(()=>{if(!s)return;const h=m=>{m.key==="Escape"&&t()};document.addEventListener("keydown",h);const f=document.body.style.overflow;return document.body.style.overflow="hidden",()=>{document.removeEventListener("keydown",h),document.body.style.overflow=f}},[s,t]),s?p.jsx("div",{"data-state":c,className:"dialog-overlay fixed inset-0 z-50 flex items-center justify-center bg-black/80 p-4",onClick:t,role:"dialog","aria-modal":"true","aria-label":"Upgrade your plan",children:p.jsxs("div",{"data-state":c,className:"dialog-panel relative w-full max-w-md rounded-2xl border border-[#222] bg-black p-6 shadow-lg sm:rounded-lg",onClick:h=>h.stopPropagation(),children:[p.jsx("button",{type:"button",onClick:t,"aria-label":"Close",className:"absolute right-4 top-4 rounded-md p-1 text-[#888] transition-colors hover:bg-[#1a1a1a] hover:text-white",children:p.jsx(vp,{className:"h-4 w-4"})}),p.jsxs("div",{children:[p.jsx("h2",{className:"text-lg text-white",children:"Available in Strix Cloud"}),r&&p.jsx("p",{className:"mt-2 text-base leading-relaxed text-[#e5e5e5]",children:r})]}),p.jsxs("div",{className:"space-y-4 pt-4",children:[p.jsxs("div",{className:"rounded-xl border border-[#333] bg-[#0a0a0a] p-4 sm:rounded-lg",children:[p.jsxs("div",{className:"mb-3 flex items-center gap-2",children:[p.jsx(Um,{className:"h-4 w-4 text-blue-400"}),p.jsx("span",{className:"text-sm font-medium text-white",children:"Strix Cloud also includes"})]}),p.jsx("ul",{className:"space-y-2 text-sm text-[#888]",children:GU.map(h=>p.jsxs("li",{className:"flex items-center gap-2",children:[p.jsx(h.icon,{className:"h-3.5 w-3.5 text-[#555]"}),h.label]},h.label))})]}),p.jsxs("div",{className:"flex flex-col gap-2",children:[p.jsxs("a",{href:ha(qu,"upgrade_try_free"),target:"_blank",rel:"noopener noreferrer",onClick:()=>jr("upgrade_try_free",a),className:"flex h-10 w-full items-center justify-center gap-2 rounded-lg bg-white px-4 text-sm font-semibold text-black transition-colors hover:bg-neutral-200",children:["Open Strix Cloud",p.jsx(ry,{className:"h-3.5 w-3.5"})]}),p.jsxs("a",{href:ha(MT,"upgrade_view_plans"),target:"_blank",rel:"noopener noreferrer",onClick:()=>jr("upgrade_view_plans",a),className:"flex h-9 w-full items-center justify-center gap-1.5 rounded-lg border border-[#333] px-4 text-sm font-medium text-[#888] transition-colors hover:border-[#555] hover:text-white",children:["Learn more",p.jsx(ry,{className:"h-3 w-3"})]})]})]})]})}):null}const Lm=160,zm=260,io=400,YU=140,y_="strix_viewer_sidebar_width",v_="strix_viewer_sidebar_collapsed";function XU(e,t){try{const r=localStorage.getItem(e),a=r?parseInt(r,10):NaN;return Number.isFinite(a)?a:t}catch{return t}}function KU({view:e,onSelectView:t,issuesCount:r,agentCount:a,runCount:s,finished:o,verified:c,email:d,onOpenEmail:h,onOpenHistory:f,onForget:m}){var z;const[g,y]=ee.useState(()=>{const V=XU(y_,zm);return Math.min(io,Math.max(Lm,V))}),[x,_]=ee.useState(()=>{try{return localStorage.getItem(v_)==="1"}catch{return!1}}),[N,S]=ee.useState(!1),[w,k]=ee.useState(!1),[E,M]=ee.useState(null),B=ee.useRef(null),R=(V,P)=>{jr(V,"sidebar"),M(P)},U=ee.useCallback(V=>{y(V);try{localStorage.setItem(y_,String(V))}catch{}},[]),I=ee.useCallback(V=>{_(V);try{localStorage.setItem(v_,V?"1":"0")}catch{}},[]),X=ee.useCallback(()=>{I(!1),U(zm)},[I,U]),j=ee.useCallback(V=>{V.preventDefault(),S(!0)},[]);return ee.useEffect(()=>{if(!N||x)return;const V=T=>{const $=T.clientX;$>=Lm&&$<=io?y($):$>io&&y(io)},P=T=>{const $=T.clientX;${window.removeEventListener("mousemove",V),window.removeEventListener("mouseup",P)}},[N,x,I,U]),ee.useEffect(()=>{if(!w)return;const V=P=>{B.current&&!B.current.contains(P.target)&&k(!1)};return document.addEventListener("mousedown",V),()=>document.removeEventListener("mousedown",V)},[w]),p.jsxs(p.Fragment,{children:[x&&p.jsx("div",{className:"fixed left-0 top-0 z-40 hidden h-full w-4 cursor-pointer transition-colors hover:bg-[rgba(255,255,255,0.08)] lg:block",onClick:X,title:"Expand sidebar"}),p.jsxs("aside",{className:Mr("sticky top-0 z-20 hidden h-screen flex-shrink-0 flex-col overflow-hidden border-r border-[rgba(255,255,255,0.08)] bg-black lg:flex",!N&&"transition-[width] duration-200 ease-out"),style:{width:x?0:g},children:[p.jsx("header",{className:"relative flex flex-col gap-1 pt-1 min-w-[160px]",children:p.jsx("div",{className:"flex flex-row py-1 px-2",children:p.jsxs("div",{className:"flex h-10 w-full flex-row items-center",children:[p.jsxs("a",{href:ha("https://app.strix.ai","logo"),target:"_blank",rel:"noopener noreferrer",onClick:()=>jr("logo","sidebar"),className:"flex flex-1 flex-row items-center gap-2 rounded-md py-2 pl-2.5 pr-1 min-w-0 transition-colors hover:bg-[rgba(255,255,255,0.06)]",title:"Open Strix Cloud",children:[p.jsx("span",{className:"flex flex-shrink-0 items-center justify-center rounded-full bg-gradient-to-br from-emerald-400 to-cyan-500",style:{width:20,height:20},children:p.jsx("span",{className:"text-[10px] font-semibold text-white",children:"S"})}),p.jsxs("span",{className:"flex flex-1 flex-row items-center gap-2 min-w-0",children:[p.jsx("span",{className:"truncate min-w-0 text-[14px] font-medium text-[#ededed]",children:"Strix"}),p.jsx("span",{className:"flex h-5 flex-shrink-0 items-center rounded px-2 text-[11px] font-medium text-[#888] bg-[rgba(255,255,255,0.08)]",children:"Local"})]})]}),p.jsx("a",{href:ha("https://app.strix.ai","logo"),target:"_blank",rel:"noopener noreferrer",onClick:()=>jr("logo","sidebar"),className:"flex flex-none items-center rounded-md px-1.5 py-2 transition-colors hover:bg-[rgba(255,255,255,0.06)]","aria-label":"Open Strix Cloud",children:p.jsx(tC,{className:"h-4 w-4 text-[#666]"})})]})})}),p.jsx("nav",{className:"relative min-w-[160px] flex-1 overflow-y-auto overflow-x-clip scrollbar-thin pb-10 pt-2",children:p.jsxs("div",{className:"relative flex flex-col gap-px px-2",children:[p.jsx(yi,{icon:p.jsx(ZU,{}),label:"Pentest Overview",active:e==="overview",onClick:()=>t("overview")}),p.jsx(yi,{icon:p.jsx(bT,{className:"h-4 w-4"}),label:"Issues",count:r>0?r:void 0,active:e==="issues",onClick:()=>t("issues")}),a>0&&p.jsx(yi,{icon:p.jsx(Mo,{className:"h-4 w-4"}),label:"Agents",count:a,active:e==="agents",onClick:()=>t("agents")}),p.jsx(yi,{icon:p.jsx(Ys,{className:"h-4 w-4"}),label:"Past runs",count:s>0?s:void 0,active:e==="history",onClick:f}),o&&p.jsx(yi,{icon:p.jsx(yp,{className:"h-4 w-4"}),label:"Export report",active:e==="email",onClick:h}),p.jsx(yi,{icon:p.jsx(xS,{className:"h-4 w-4"}),label:"Feedback & support",active:e==="feedback",onClick:()=>t("feedback")}),p.jsx("hr",{className:"mx-0 my-1 h-px w-full border-0 bg-[rgba(255,255,255,0.08)]"}),p.jsx(yi,{icon:p.jsx(PU,{className:"h-4 w-4"}),label:"PR Security Reviews",active:!1,onClick:()=>R("pr_reviews","Strix reviews every pull request and flags exploitable changes before they merge.")}),p.jsx(yi,{icon:p.jsx(FU,{className:"h-4 w-4"}),label:"Integrations",active:!1,onClick:()=>R("integrations","Sync findings to Jira, Linear, and Slack so fixes happen where your team already works.")}),p.jsx(yi,{icon:p.jsx(yT,{className:"h-4 w-4"}),label:"Members",active:!1,onClick:()=>R("members","Invite your team, set roles, and share findings and run history across your org.")})]})}),p.jsx("section",{className:"flex min-w-[160px] flex-col gap-0.5",ref:B,children:p.jsxs("div",{className:"relative p-2",children:[c&&d?p.jsxs("button",{onClick:()=>k(V=>!V),className:"relative flex w-full cursor-pointer items-center gap-2 rounded-md bg-transparent px-2.5 py-2 transition-colors hover:bg-[rgba(255,255,255,0.06)]",children:[p.jsx("span",{className:"flex flex-shrink-0 items-center justify-center rounded-full bg-gradient-to-br from-emerald-400 to-cyan-500",style:{width:20,height:20},children:p.jsx("span",{className:"text-[9px] font-semibold text-white",children:((z=d[0])==null?void 0:z.toUpperCase())||"U"})}),p.jsxs("span",{className:"flex min-w-0 flex-1 flex-col text-left",children:[p.jsx("span",{className:"truncate text-[13px] font-medium text-[#ededed]",children:d}),p.jsx("span",{className:"truncate text-[11px] text-[#555]",children:"Linked to this machine"})]})]}):p.jsxs("div",{className:"flex items-center gap-2 rounded-md px-2.5 py-2",children:[p.jsx("span",{className:"flex flex-shrink-0 items-center justify-center rounded-full bg-gradient-to-br from-emerald-400 to-cyan-500",style:{width:20,height:20},children:p.jsx("span",{className:"text-[9px] font-semibold text-white",children:"S"})}),p.jsx("span",{className:"flex min-w-0 flex-1 flex-col text-left",children:p.jsx("span",{className:"truncate text-[13px] font-medium text-[#ededed]",children:"Local viewer"})})]}),w&&c&&d&&p.jsxs("div",{className:"absolute bottom-full left-2 right-2 z-50 mb-1 overflow-hidden rounded-lg border border-[#333] bg-black shadow-xl",children:[p.jsxs("div",{className:"border-b border-[#333] px-3 py-2",children:[p.jsx("p",{className:"truncate text-[13px] font-medium text-white",children:"Linked email"}),p.jsx("p",{className:"truncate text-[11px] text-[#666]",children:d})]}),p.jsxs("button",{onClick:()=>{k(!1),m()},className:"flex w-full items-center gap-2 px-3 py-2 text-[13px] text-[#888] transition-colors hover:bg-[rgba(255,255,255,0.06)] hover:text-red-400",children:[p.jsx($C,{className:"h-4 w-4"}),"Forget this email"]})]})]})}),p.jsx("div",{className:"group absolute right-0 top-0 z-30 h-full w-1 cursor-col-resize",onMouseDown:j,children:p.jsx("div",{className:Mr("absolute right-0 top-0 h-full w-px bg-[rgba(255,255,255,0.08)] transition-all duration-100",N?"w-0.5 bg-[rgba(255,255,255,0.3)]":"group-hover:bg-[rgba(255,255,255,0.2)]")})})]}),N&&p.jsx("div",{className:"fixed inset-0 z-10 cursor-col-resize"}),p.jsx(VU,{open:E!==null,description:E??"",source:"sidebar",onClose:()=>M(null)})]})}function yi({icon:e,label:t,active:r,onClick:a,count:s}){return p.jsxs("button",{onClick:a,className:Mr("group flex h-9 w-full origin-left flex-row items-center rounded-md transition-colors",r?"bg-[rgba(255,255,255,0.12)] text-white":"text-[#888] hover:bg-[rgba(255,255,255,0.06)] hover:text-[#ededed]"),children:[p.jsx("div",{className:"grid flex-none place-content-center",style:{width:36,height:36},children:e}),p.jsx("span",{className:"min-w-0 flex-1 truncate text-left text-[14px] font-medium",children:t}),s!=null&&p.jsx("span",{className:"mr-2 flex-none rounded-full border border-white/10 px-2 py-0.5 text-[10px] tabular-nums leading-none text-[#777]",children:s})]})}function ZU(){return p.jsx("svg",{style:{width:16,height:16,color:"currentcolor"},viewBox:"0 0 16 16",fill:"currentColor",children:p.jsx("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M2.5 5.5V2.5H5.5V5.5H2.5ZM1 2C1 1.44772 1.44772 1 2 1H6C6.55228 1 7 1.44772 7 2V6C7 6.55228 6.55228 7 6 7H2C1.44772 7 1 6.55228 1 6V2ZM2.5 13.5V10.5H5.5V13.5H2.5ZM1 10C1 9.44772 1.44772 9 2 9H6C6.55228 9 7 9.44772 7 10V14C7 14.5523 6.55228 15 6 15H2C1.44772 15 1 14.5523 1 14V10ZM10.5 2.5V5.5H13.5V2.5H10.5ZM10 1C9.44772 1 9 1.44772 9 2V6C9 6.55228 9.44772 7 10 7H14C14.5523 7 15 6.55228 15 6V2C15 1.44772 14.5523 1 14 1H10ZM10.5 13.5V10.5H13.5V13.5H10.5ZM9 10C9 9.44772 9.44772 9 10 9H14C14.5523 9 15 9.44772 15 10V14C15 14.5523 14.5523 15 14 15H10C9.44772 15 9 14.5523 9 14V10Z"})})}const __={work_email_required:"Please use your work email, not a personal one.",rate_limited:"Too many requests. Wait a minute and try again.",invalid_email:"That email does not look right. Check it and try again.",unavailable:"The email service is unavailable right now. Try again shortly."},QU=new Set(["gmail.com","googlemail.com","yahoo.com","ymail.com","outlook.com","hotmail.com","live.com","icloud.com","me.com","aol.com","proton.me","protonmail.com","gmx.com","mail.com"]);function WU({onVerified:e}){const[t,r]=ee.useState("email"),[a,s]=ee.useState(""),[o,c]=ee.useState(""),[d,h]=ee.useState(!1),[f,m]=ee.useState(null),[g,y]=ee.useState(null),x=async()=>{const N=a.trim();if(!N){m("Enter your email to continue.");return}const S=N.slice(N.lastIndexOf("@")+1).toLowerCase();if(QU.has(S)){Tr("work_email_required"),m(__.work_email_required);return}h(!0),m(null);const w=await hS(N);h(!1),w.ok?(Tr("email_submitted",{purpose:"verify"}),y(`We sent a 6-digit code to ${N}.`),r("code")):(w.error==="work_email_required"&&Tr("work_email_required"),m(__[w.error]??"Could not send a code. Try again."))},_=async()=>{const N=o.trim();if(N.length<4){m("Enter the 6-digit code from your email.");return}h(!0),m(null);const S=await mS(a.trim(),N);if(h(!1),!S.verified){m("That code did not match. Check it and try again.");return}Tr("email_verified",{purpose:"verify"}),e()};return p.jsxs("div",{className:"mx-auto mt-5 max-w-sm text-left",children:[f&&p.jsxs("div",{className:"mb-3 flex items-start gap-2 rounded-lg border border-red-500/30 bg-red-500/5 px-3 py-2",children:[p.jsx($u,{className:"mt-0.5 h-4 w-4 flex-shrink-0 text-red-400","aria-hidden":"true"}),p.jsx("p",{className:"text-xs text-red-300",children:f})]}),g&&!f&&p.jsx("p",{className:"mb-3 text-xs text-[#888]",children:g}),t==="email"?p.jsxs("form",{className:"space-y-3",onSubmit:N=>{N.preventDefault(),x()},children:[p.jsxs("label",{className:"block",children:[p.jsx("span",{className:"mb-1.5 block text-xs text-[#888]",children:"Your work email"}),p.jsx("input",{type:"email",autoFocus:!0,value:a,onChange:N=>s(N.target.value),placeholder:"you@company.com",className:"w-full rounded-lg bg-black px-3 py-2.5 text-sm text-white outline-none transition-colors focus:border-[#444]",style:{border:"1px solid #2a2a2a"}}),p.jsx("span",{className:"mt-1.5 block text-[11px] text-[#666]",children:"Use your work email."})]}),p.jsxs("button",{type:"submit",disabled:d,className:"flex w-full cursor-pointer items-center justify-center gap-2 rounded-lg bg-white px-4 py-2.5 text-sm font-semibold text-black transition-opacity hover:opacity-90 disabled:opacity-60",children:[d&&p.jsx(Ps,{className:"h-4 w-4 animate-spin","aria-hidden":"true"}),"Send me a code"]})]}):p.jsxs("form",{className:"space-y-3",onSubmit:N=>{N.preventDefault(),_()},children:[p.jsxs("label",{className:"block",children:[p.jsx("span",{className:"mb-1.5 block text-xs text-[#888]",children:"6-digit code"}),p.jsx("input",{inputMode:"numeric",autoFocus:!0,value:o,onChange:N=>c(N.target.value.replace(/\D/g,"").slice(0,6)),placeholder:"123456",className:"w-full rounded-lg bg-black px-3 py-2.5 text-center text-lg font-mono tracking-[0.4em] text-white outline-none transition-colors focus:border-[#444]",style:{border:"1px solid #2a2a2a"}})]}),p.jsxs("button",{type:"submit",disabled:d,className:"flex w-full cursor-pointer items-center justify-center gap-2 rounded-lg bg-white px-4 py-2.5 text-sm font-semibold text-black transition-opacity hover:opacity-90 disabled:opacity-60",children:[d&&p.jsx(Ps,{className:"h-4 w-4 animate-spin","aria-hidden":"true"}),"Verify"]}),p.jsx("button",{type:"button",onClick:()=>{r("email"),m(null),y(null)},className:"w-full cursor-pointer text-center text-xs text-[#666] transition-colors hover:text-[#aaa]",children:"Use a different email"})]})]})}const JU=[{key:"critical",dot:"bg-red-500",text:"text-red-500"},{key:"high",dot:"bg-orange-500",text:"text-orange-500"},{key:"medium",dot:"bg-yellow-500",text:"text-yellow-500"},{key:"low",dot:"bg-blue-500",text:"text-blue-500"}];function eH({counts:e}){const t=JU.filter(r=>e[r.key]>0);return t.length===0?p.jsx("span",{className:"text-xs text-[#555]",children:"No findings"}):p.jsx("div",{className:"flex items-center gap-3",children:t.map(r=>p.jsxs("div",{className:"flex items-center gap-1.5",children:[p.jsx("span",{className:`h-2 w-2 rounded-full ${r.dot}`,"aria-hidden":"true"}),p.jsx("span",{className:`text-xs tabular-nums ${r.text}`,children:e[r.key]})]},r.key))})}function tH(e){if(!e)return null;const t=e.trim().replace(" UTC","Z").replace(" ","T"),r=new Date(t);return Number.isNaN(r.getTime())?null:r.toLocaleString(void 0,{month:"short",day:"numeric",hour:"numeric",minute:"2-digit"})}function w_(e){if(!e)return null;const t=e.trim().replace(" UTC","Z").replace(" ","T"),r=new Date(t);if(Number.isNaN(r.getTime()))return null;const a=Date.now()-r.getTime(),s=Math.floor(a/6e4);if(s<1)return"just now";if(s<60)return`${s}m ago`;const o=Math.floor(s/60);if(o<24)return`${o}h ago`;const c=Math.floor(o/24);return c<7?`${c}d ago`:tH(e)}function nH({runs:e,activeRun:t,onSelectRun:r,onVerified:a}){const s=(e==null?void 0:e.count)??0,[o,c]=ee.useState(!1);return!e||e.locked?p.jsxs("div",{className:"rounded-xl border border-[#222] bg-[rgba(255,255,255,0.02)] p-8 text-center",children:[p.jsx("div",{className:"mx-auto mb-4 flex h-11 w-11 items-center justify-center rounded-xl",style:{border:"1px solid #2a2a2a",background:"rgba(255,255,255,0.04)"},children:p.jsx(Ys,{className:"h-5 w-5 text-[#888]","aria-hidden":"true"})}),p.jsx("h2",{className:"text-base font-semibold text-white",children:"Browse every run on this machine"}),p.jsxs("p",{className:"mx-auto mt-1.5 max-w-md text-sm text-[#888]",children:["You have ",s," past ",s===1?"run":"runs"," on this machine."]}),o?p.jsxs(p.Fragment,{children:[p.jsx("p",{className:"mx-auto mt-3 max-w-sm text-xs text-[#666]",children:"Verify your email with a one-time code to unlock the full history."}),p.jsx(WU,{onVerified:a})]}):p.jsx("button",{onClick:()=>{jr("history_unlock","past_runs"),c(!0)},className:"mt-4 cursor-pointer rounded-lg bg-white px-4 py-2 text-sm font-semibold text-black transition-opacity hover:opacity-90",children:"View runs"}),p.jsxs("p",{className:"mt-4 flex items-center justify-center gap-1.5 text-xs text-[#555]",children:[p.jsx($_,{className:"h-3.5 w-3.5","aria-hidden":"true"}),"Or open one from the CLI with"," ",p.jsx("code",{className:"font-mono text-[#888]",children:"strix view "})]})]}):e.runs.length===0?p.jsx("div",{className:"rounded-xl border border-[#222] bg-[rgba(255,255,255,0.02)] p-8 text-center text-sm text-[#888]",children:"No past runs found on this machine yet."}):p.jsx("div",{className:"space-y-2",children:e.runs.map(d=>{const h=d.name===t,f=w_(d.start_time)??w_(d.end_time),m=xo(d.target,d.name);return p.jsxs("button",{onClick:()=>r(d.name),className:`animate-card-in group flex w-full cursor-pointer items-center gap-4 rounded-lg border px-4 py-3 text-left transition-colors ${h?"border-[#444] bg-[rgba(255,255,255,0.04)]":"border-[#222] bg-[rgba(255,255,255,0.02)] hover:border-[#444]"}`,children:[p.jsxs("div",{className:"min-w-0 flex-1",children:[p.jsxs("div",{className:"flex items-center gap-2",children:[p.jsx("span",{className:"truncate text-sm font-medium text-white",children:m}),h&&p.jsx("span",{className:"rounded-full px-1.5 py-0.5 text-[10px] font-semibold uppercase tracking-wide text-emerald-400",style:{border:"1px solid rgba(16,185,129,0.3)"},children:"Active"})]}),p.jsxs("div",{className:"mt-0.5 flex flex-wrap items-center gap-x-2 gap-y-0.5 text-xs text-[#666]",children:[d.scan_mode&&p.jsx("span",{className:"capitalize",children:d.scan_mode}),d.scan_mode&&(f||d.status)&&p.jsx("span",{className:"text-[#333]",children:"·"}),f&&p.jsx("span",{children:f}),f&&d.status&&p.jsx("span",{className:"text-[#333]",children:"·"}),d.status&&p.jsx("span",{className:"capitalize",children:d.status})]})]}),p.jsx(eH,{counts:d.severity_counts}),p.jsx(Wk,{className:"h-4 w-4 flex-shrink-0 text-[#555] transition-colors group-hover:text-[#aaa]","aria-hidden":"true"})]},d.name)})})}const E_={work_email_required:"Please use your work email, not a personal one.",rate_limited:"Too many requests. Wait a minute and try again.",invalid_email:"That email does not look right. Check it and try again.",unavailable:"The email service is unavailable right now. Try again shortly."},rH={forbidden:"This email was unsubscribed from Strix, so we cannot send to it.",too_large:"This report is too large to email. Try a smaller run.",unavailable:"The email service is unavailable right now. Try again shortly."},iH=new Set(["gmail.com","googlemail.com","yahoo.com","ymail.com","outlook.com","hotmail.com","live.com","icloud.com","me.com","aol.com","proton.me","protonmail.com","gmx.com","mail.com"]);function aH({activeRun:e,auth:t,purpose:r,skipDisclosure:a=!1,onAuthChanged:s,onExit:o}){const c=(t==null?void 0:t.verified)===!0,d=r==="verify",[h,f]=ee.useState(()=>d?"email":a?c?"sending":"email":"disclosure"),[m,g]=ee.useState((t==null?void 0:t.email)??""),[y,x]=ee.useState(""),[_,N]=ee.useState(!1),[S,w]=ee.useState(null),[k,E]=ee.useState(null),[M,B]=ee.useState(""),[R,U]=ee.useState(""),[I,X]=ee.useState(!1),[j,z]=ee.useState(""),V=ee.useRef(!1),P=async()=>{f("sending"),w(null);const Z=await RU(e);if(Z.ok){Tr("report_sent"),B(Z.password),U(Z.filename),f("password");return}if(Z.error==="reverify"||Z.error==="unverified"){E("Your verification expired. Enter your email to verify again."),f("email");return}w(rH[Z.error]??"Could not send the report. Try again."),f("disclosure")},T=()=>{w(null),E(null),c?P():f("email")};ee.useEffect(()=>{!d&&a&&c&&!V.current&&(V.current=!0,P())},[]);const $=async()=>{const Z=m.trim();if(!Z){w("Enter your email to continue.");return}const C=Z.slice(Z.lastIndexOf("@")+1).toLowerCase();if(iH.has(C)){Tr("work_email_required"),w(E_.work_email_required);return}N(!0),w(null);const D=await hS(Z);N(!1),D.ok?(Tr("email_submitted",{purpose:r}),E(`We sent a 6-digit code to ${Z}.`),f("code")):(D.error==="work_email_required"&&Tr("work_email_required"),w(E_[D.error]??"Could not send a code. Try again."))},O=async()=>{const Z=y.trim();if(Z.length<4){w("Enter the 6-digit code from your email.");return}N(!0),w(null);const C=await mS(m.trim(),Z);if(N(!1),!C.verified){w("That code did not match. Check it and try again.");return}Tr("email_verified",{purpose:r}),z(C.email),s(),d?o("history"):P()},H=async()=>{try{await navigator.clipboard.writeText(M),X(!0),setTimeout(()=>X(!1),1500)}catch{}},K=j||(t==null?void 0:t.email)||m.trim();return p.jsxs("div",{className:"mx-auto max-w-xl space-y-4",children:[p.jsxs("button",{onClick:()=>o(d?"history":"overview"),className:"cursor-pointer inline-flex items-center gap-1.5 text-sm text-[#888] transition-colors hover:text-white",children:[p.jsx(xp,{className:"h-4 w-4"}),d?"Back to past runs":"Back to results"]}),p.jsxs("div",{className:"flex items-center gap-2",children:[p.jsx(yp,{className:"h-5 w-5 text-[#888]","aria-hidden":"true"}),p.jsx("h1",{className:"text-2xl font-semibold text-white",children:d?"Verify your email":"Export report to PDF"})]}),p.jsxs("div",{className:"w-full rounded-2xl bg-[rgba(255,255,255,0.02)] p-6",style:{border:"1px solid #2a2a2a"},children:[p.jsx("p",{className:"mb-4 text-xs text-[#666]",children:d?"We send a one-time code to confirm it is you.":"Verified by a one-time code sent to your email"}),S&&p.jsxs("div",{className:"mb-4 flex items-start gap-2 rounded-lg border border-red-500/30 bg-red-500/5 px-3 py-2",children:[p.jsx($u,{className:"mt-0.5 h-4 w-4 flex-shrink-0 text-red-400","aria-hidden":"true"}),p.jsx("p",{className:"text-xs text-red-300",children:S})]}),k&&!S&&h!=="password"&&p.jsx("p",{className:"mb-4 text-xs text-[#888]",children:k}),h==="disclosure"&&p.jsxs("div",{className:"space-y-4",children:[p.jsxs("div",{className:"space-y-2.5 rounded-lg p-3.5",style:{border:"1px solid #222",background:"rgba(255,255,255,0.02)"},children:[p.jsxs("div",{className:"flex items-start gap-2.5",children:[p.jsx(H_,{className:"mt-0.5 h-4 w-4 flex-shrink-0 text-emerald-400","aria-hidden":"true"}),p.jsxs("p",{className:"text-xs leading-relaxed text-[#aaa]",children:["We email an ",p.jsx("span",{className:"text-white",children:"encrypted PDF"}),". Nothing else leaves your machine."]})]}),p.jsxs("div",{className:"flex items-start gap-2.5",children:[p.jsx(UC,{className:"mt-0.5 h-4 w-4 flex-shrink-0 text-[#888]","aria-hidden":"true"}),p.jsx("p",{className:"text-xs leading-relaxed text-[#aaa]",children:"Only you hold the password; Strix can't read it."})]})]}),p.jsx("button",{onClick:T,className:"w-full cursor-pointer rounded-lg bg-white px-4 py-2.5 text-sm font-semibold text-black transition-opacity hover:opacity-90",children:"Export report"}),c&&(t==null?void 0:t.email)&&p.jsxs("p",{className:"text-center text-xs text-[#666]",children:["Sending to ",t.email]})]}),h==="email"&&p.jsxs("form",{className:"space-y-4",onSubmit:Z=>{Z.preventDefault(),$()},children:[p.jsxs("label",{className:"block",children:[p.jsx("span",{className:"mb-1.5 block text-xs text-[#888]",children:"Your work email"}),p.jsx("input",{type:"email",autoFocus:!0,value:m,onChange:Z=>g(Z.target.value),placeholder:"you@company.com",className:"w-full rounded-lg bg-black px-3 py-2.5 text-sm text-white outline-none transition-colors focus:border-[#444]",style:{border:"1px solid #2a2a2a"}})]}),p.jsxs("button",{type:"submit",disabled:_,className:"flex w-full cursor-pointer items-center justify-center gap-2 rounded-lg bg-white px-4 py-2.5 text-sm font-semibold text-black transition-opacity hover:opacity-90 disabled:opacity-60",children:[_&&p.jsx(Ps,{className:"h-4 w-4 animate-spin","aria-hidden":"true"}),"Send me a code"]})]}),h==="code"&&p.jsxs("form",{className:"space-y-4",onSubmit:Z=>{Z.preventDefault(),O()},children:[p.jsxs("label",{className:"block",children:[p.jsx("span",{className:"mb-1.5 block text-xs text-[#888]",children:"6-digit code"}),p.jsx("input",{inputMode:"numeric",autoFocus:!0,value:y,onChange:Z=>x(Z.target.value.replace(/\D/g,"").slice(0,6)),placeholder:"123456",className:"w-full rounded-lg bg-black px-3 py-2.5 text-center text-lg font-mono tracking-[0.4em] text-white outline-none transition-colors focus:border-[#444]",style:{border:"1px solid #2a2a2a"}})]}),p.jsxs("button",{type:"submit",disabled:_,className:"flex w-full cursor-pointer items-center justify-center gap-2 rounded-lg bg-white px-4 py-2.5 text-sm font-semibold text-black transition-opacity hover:opacity-90 disabled:opacity-60",children:[_&&p.jsx(Ps,{className:"h-4 w-4 animate-spin","aria-hidden":"true"}),d?"Verify":"Verify and send"]}),p.jsx("button",{type:"button",onClick:()=>{f("email"),w(null),E(null)},className:"w-full cursor-pointer text-center text-xs text-[#666] transition-colors hover:text-[#aaa]",children:"Use a different email"})]}),h==="sending"&&p.jsxs("div",{className:"flex flex-col items-center gap-3 py-8",children:[p.jsx(Ps,{className:"h-6 w-6 animate-spin text-white","aria-hidden":"true"}),p.jsx("p",{className:"text-sm text-[#aaa]",children:"Generating and encrypting locally..."})]}),h==="password"&&p.jsxs("div",{className:"space-y-4",children:[p.jsxs("div",{className:"flex items-start gap-2.5 rounded-lg border border-emerald-500/30 bg-emerald-500/5 px-3 py-2.5",children:[p.jsx(Vs,{className:"mt-0.5 h-4 w-4 flex-shrink-0 text-emerald-400","aria-hidden":"true"}),p.jsxs("p",{className:"text-xs text-emerald-200",children:["Sent to ",K,". Open the attached PDF with this password."]})]}),p.jsxs("div",{children:[p.jsx("span",{className:"mb-1.5 block text-xs text-[#888]",children:"Your one-time password"}),p.jsxs("div",{className:"flex items-center gap-2 rounded-lg bg-black p-3",style:{border:"1px solid #2a2a2a"},children:[p.jsx("code",{className:"flex-1 break-all font-mono text-base text-white",children:M}),p.jsxs("button",{onClick:H,className:"flex cursor-pointer items-center gap-1 rounded-md px-2 py-1 text-xs text-[#aaa] transition-colors hover:bg-[rgba(255,255,255,0.06)] hover:text-white",style:{border:"1px solid #2a2a2a"},children:[I?p.jsx(Vs,{className:"h-3.5 w-3.5"}):p.jsx(po,{className:"h-3.5 w-3.5"}),I?"Copied":"Copy"]})]}),p.jsxs("p",{className:"mt-2 text-xs text-[#666]",children:["Save this now. Strix never stores it, so we cannot show it again. File:"," ",p.jsx("span",{className:"font-mono text-[#888]",children:R})]})]}),p.jsx("button",{onClick:()=>o("overview"),className:"w-full cursor-pointer rounded-lg px-4 py-2.5 text-sm font-semibold text-white transition-colors hover:bg-[rgba(255,255,255,0.06)]",style:{border:"1px solid #2a2a2a"},children:"Done"})]})]})]})}function la(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:{}}function ao(e){return Array.isArray(e)?e:[]}function nr(e){return typeof e=="string"&&e.trim()?e:null}function Ba(e){return typeof e=="number"&&Number.isFinite(e)?e:null}function sH(e){return e.replace(/_/g," ")}function N_(e){return e&&e.charAt(0).toUpperCase()+e.slice(1)}function lH(e){if(e==null||e<0)return"n/a";const t=Math.floor(e/3600),r=Math.floor(e%3600/60),a=e%60;return t?`${t}h ${r}m ${a}s`:r?`${r}m ${a}s`:`${a}s`}function wn({label:e,children:t}){return p.jsxs("div",{className:"grid grid-cols-[7rem_1fr] gap-3 items-baseline",children:[p.jsx("dt",{className:"text-[11px] uppercase tracking-wide text-[#666]",children:e}),p.jsx("dd",{className:"min-w-0 break-words text-sm text-[#ddd]",children:t})]})}function oH({raw:e,durationSeconds:t}){const[r,a]=ee.useState(!0),s=ao(e.targets_info).map(P=>{const T=la(P),$=nr(T.original)??nr(la(T.details).target_url)??"unknown target",O=nr(T.type);return{display:$,type:O?sH(O):null}}),o=nr(e.instruction),c=N_(nr(e.scan_mode)),d=nr(e.scope_mode),h=la(e.diff_scope),f=h.active===!0,m=nr(h.mode),g=nr(e.diff_base),y=e.non_interactive===!0,x=ao(e.local_sources).map(P=>{if(typeof P=="string")return P;const T=la(P);return nr(T.source_path)??nr(T.target_path)??""}).filter(Boolean),_=N_(nr(e.status));let N=d??"auto";f&&(N+=` (diff${m?`: ${m}`:""}${g?` vs ${g}`:""})`);const S=la(e.llm_usage),w=Object.keys(S).length>0,k=ao(S.agents).map(la),E=Array.from(new Set(k.map(P=>nr(P.model)).filter(P=>!!P))),M=Ba(S.requests),B=Ba(S.input_tokens),R=Ba(la(ao(S.input_tokens_details)[0]).cached_tokens),U=Ba(S.output_tokens),I=Ba(la(ao(S.output_tokens_details)[0]).reasoning_tokens),X=Ba(S.total_tokens),j=Ba(S.cost),z=nr(e.auth_mode)==="subscription",V=(P,T)=>p.jsxs("span",{className:"text-[#666]",children:[" (",Ls(P)," ",T,")"]});return p.jsxs("div",{className:"rounded-xl border border-[#222] bg-[rgba(255,255,255,0.02)] p-5",children:[p.jsxs("button",{type:"button",onClick:()=>a(P=>!P),"aria-expanded":r,className:"flex w-full cursor-pointer items-center gap-2 text-left",children:[p.jsx(DC,{className:"h-4 w-4 text-[#888]","aria-hidden":"true"}),p.jsx("h2",{className:"text-sm font-semibold text-white",children:"Run details"}),r?p.jsx(j_,{className:"ml-auto h-4 w-4 text-[#666]","aria-hidden":"true"}):p.jsx(mo,{className:"ml-auto h-4 w-4 text-[#666]","aria-hidden":"true"})]}),r&&p.jsxs("div",{className:"mt-4 grid grid-cols-1 gap-x-8 gap-y-6 md:grid-cols-2",children:[p.jsxs("section",{children:[p.jsx("h3",{className:"mb-3 text-[11px] font-semibold uppercase tracking-wide text-[#555]",children:"Configuration"}),p.jsxs("dl",{className:"space-y-2.5",children:[s.length>0&&p.jsx(wn,{label:"Targets",children:p.jsx("div",{className:"space-y-1",children:s.map((P,T)=>p.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[p.jsx("span",{className:"font-mono text-[#ddd]",children:P.display}),P.type&&p.jsx("span",{className:"rounded-full border border-[#2a2a2a] px-1.5 py-0.5 text-[10px] text-[#888]",children:P.type})]},T))})}),p.jsx(wn,{label:"Instruction",children:o?p.jsx("span",{className:"whitespace-pre-wrap",children:o}):p.jsx("span",{className:"text-[#666]",children:"None"})}),c&&p.jsx(wn,{label:"Pentest mode",children:c}),p.jsx(wn,{label:"Scope",children:N}),p.jsx(wn,{label:"Mode",children:y?"Non-interactive":"Interactive"}),x.length>0&&p.jsx(wn,{label:"Local sources",children:p.jsx("div",{className:"space-y-0.5 font-mono text-[#ddd]",children:x.map((P,T)=>p.jsx("div",{children:P},T))})}),_&&p.jsx(wn,{label:"Status",children:_})]})]}),p.jsxs("section",{children:[p.jsx("h3",{className:"mb-3 text-[11px] font-semibold uppercase tracking-wide text-[#555]",children:"Usage & cost"}),w?p.jsxs("dl",{className:"space-y-2.5 tabular-nums",children:[p.jsx(wn,{label:"Model",children:E.length?E.join(", "):"n/a"}),z&&p.jsx(wn,{label:"Provider",children:p.jsx("span",{className:"inline-flex items-center gap-1.5",children:p.jsx("span",{className:"rounded-full border border-[#22c55e]/40 bg-[#22c55e]/10 px-2 py-0.5 text-[11px] text-[#22c55e]",children:"ChatGPT subscription"})})}),p.jsx(wn,{label:"Run time",children:lH(t)}),M!=null&&p.jsx(wn,{label:"Requests",children:Ls(M)}),B!=null&&p.jsxs(wn,{label:"Input tokens",children:[Ls(B),R!=null&&V(R,"cached")]}),U!=null&&p.jsxs(wn,{label:"Output tokens",children:[Ls(U),I!=null&&V(I,"reasoning")]}),X!=null&&p.jsx(wn,{label:"Total tokens",children:Ls(X)}),z?p.jsxs(wn,{label:"Cost",children:[p.jsx("span",{className:"text-[#22c55e]",children:"$0.00"}),p.jsx("span",{className:"text-[#666]",children:" (subscription)"})]}):j!=null&&p.jsxs(wn,{label:"Cost",children:["$",j.toFixed(2)]}),k.length>0&&p.jsx(wn,{label:"Agents",children:Ls(k.length)})]}):p.jsx("p",{className:"text-sm text-[#666]",children:"Not available yet."})]})]})]})}const S_="strix_viewer_trust_dismissed";function cH({message:e}){const[t,r]=ee.useState(()=>{try{return localStorage.getItem(S_)==="1"}catch{return!1}});if(t)return null;const a=()=>{try{localStorage.setItem(S_,"1")}catch{}r(!0)};return p.jsx("div",{className:"fixed bottom-3 left-3 z-[60] max-w-xs rounded-lg bg-[#0a0a0a] p-3 shadow-2xl",style:{border:"1px solid #2a2a2a"},role:"status",children:p.jsxs("div",{className:"flex gap-2.5",children:[p.jsx(H_,{className:"mt-0.5 h-4 w-4 flex-shrink-0 text-emerald-400","aria-hidden":"true"}),p.jsx("p",{className:"text-xs leading-relaxed text-[#aaa]",children:e}),p.jsx("button",{onClick:a,"aria-label":"Dismiss",className:"-mr-0.5 -mt-0.5 flex-shrink-0 cursor-pointer rounded p-0.5 text-[#666] transition-colors hover:text-white",children:p.jsx(vp,{className:"h-3.5 w-3.5"})})]})})}const uH=5e3,k_={invalid_email:"That email doesn't look right.",invalid_message:"Please write a little more.",unavailable:"Couldn't send that just now. Try again."};function dH({defaultEmail:e,onExit:t}){const[r,a]=ee.useState(""),[s,o]=ee.useState(e??""),[c,d]=ee.useState("form"),[h,f]=ee.useState(null),m=r.trim().length>0&&s.trim().length>0&&c!=="sending",g=async()=>{if(!m)return;d("sending"),f(null);const y=await AU(r.trim(),s.trim());if(y.ok){d("sent");return}d("form"),f(k_[y.error]??k_.unavailable)};return p.jsxs("div",{className:"mx-auto max-w-xl space-y-4",children:[p.jsxs("button",{onClick:()=>t("overview"),className:"cursor-pointer inline-flex items-center gap-1.5 text-sm text-[#888] transition-colors hover:text-white",children:[p.jsx(xp,{className:"h-4 w-4"}),"Back to results"]}),p.jsxs("div",{className:"flex items-center gap-2",children:[p.jsx(xS,{className:"h-5 w-5 text-[#888]","aria-hidden":"true"}),p.jsx("h1",{className:"text-2xl font-semibold text-white",children:"Feedback & support"})]}),p.jsx("div",{className:"w-full rounded-2xl bg-[rgba(255,255,255,0.02)] p-6",style:{border:"1px solid #2a2a2a"},children:c==="sent"?p.jsxs("div",{className:"flex items-start gap-3",children:[p.jsx(L_,{className:"mt-0.5 h-5 w-5 flex-shrink-0 text-emerald-400","aria-hidden":"true"}),p.jsxs("div",{className:"min-w-0",children:[p.jsx("p",{className:"text-sm font-semibold text-white",children:"Thanks, we got it."}),p.jsx("p",{className:"mt-1 text-xs text-[#888]",children:"We read every message. If it needs a reply, we'll reach out to the email you gave."}),p.jsx("button",{onClick:()=>{a(""),d("form")},className:"mt-4 cursor-pointer text-xs text-[#888] transition-colors hover:text-white",children:"Send more feedback"})]})]}):p.jsxs(p.Fragment,{children:[p.jsx("p",{className:"mb-4 text-xs text-[#666]",children:"Bugs, feature requests, or anything else. Tell us what's on your mind."}),h&&p.jsxs("div",{className:"mb-4 flex items-start gap-2 rounded-lg border border-red-500/30 bg-red-500/5 px-3 py-2",children:[p.jsx($u,{className:"mt-0.5 h-4 w-4 flex-shrink-0 text-red-400","aria-hidden":"true"}),p.jsx("p",{className:"text-xs text-red-300",children:h})]}),p.jsxs("label",{className:"block",children:[p.jsx("span",{className:"mb-1.5 block text-xs text-[#888]",children:"Your feedback"}),p.jsx("textarea",{autoFocus:!0,value:r,maxLength:uH,onChange:y=>a(y.target.value),rows:5,placeholder:"What's working, what's not, what you'd love to see…",className:"w-full resize-y rounded-lg border border-[#2a2a2a] bg-black px-3 py-2.5 text-sm text-white outline-none transition-colors focus:border-white/50 focus:ring-2 focus:ring-white/10"})]}),p.jsxs("label",{className:"mt-4 block",children:[p.jsx("span",{className:"mb-1.5 block text-xs text-[#888]",children:"Your work email"}),p.jsx("input",{type:"email",value:s,onChange:y=>o(y.target.value),placeholder:"you@company.com",className:"w-full rounded-lg border border-[#2a2a2a] bg-black px-3 py-2.5 text-sm text-white outline-none transition-colors focus:border-white/50 focus:ring-2 focus:ring-white/10"})]}),p.jsx("button",{onClick:()=>void g(),disabled:!m,className:"mt-4 flex w-full cursor-pointer items-center justify-center gap-2 rounded-lg bg-white px-4 py-2.5 text-sm font-semibold text-black transition-opacity hover:opacity-90 disabled:opacity-60",children:c==="sending"?"Sending…":"Send feedback"})]})})]})}function fH({text:e,children:t,className:r=""}){const[a,s]=ee.useState(!1);return p.jsxs("span",{className:`relative inline-flex ${r}`,onMouseEnter:()=>s(!0),onMouseLeave:()=>s(!1),onFocus:()=>s(!0),onBlur:()=>s(!1),children:[t,a&&p.jsx("span",{role:"tooltip",className:"pointer-events-none absolute bottom-full left-1/2 z-50 mb-2 w-max max-w-[240px] -translate-x-1/2 rounded-md px-2.5 py-1.5 text-xs text-[#ddd] shadow-lg",style:{border:"1px solid #2a2a2a",background:"#0a0a0a"},children:e})]})}function yS({label:e,desc:t,slug:r,icon:a,surface:s}){return p.jsx(fH,{text:t,children:p.jsxs("a",{href:ha(qu,r),target:"_blank",rel:"noopener noreferrer",onClick:()=>jr(r,s),className:"group inline-flex items-center gap-2 rounded-lg border border-[#222] bg-[rgba(255,255,255,0.02)] px-3 py-2 text-sm text-[#aaa] transition-colors hover:border-[#444] hover:text-white",children:[p.jsx(a,{className:"h-4 w-4 text-[#888] transition-colors group-hover:text-white","aria-hidden":"true"}),p.jsx("span",{children:e})]})})}const hH="Your findings stay on your machine. They're rendered here locally in your browser and never uploaded or stored by Strix.",C_=["critical","high","medium","low"],mH=500;function pH(){const[e,t]=ee.useState(null),[r,a]=ee.useState(null),[s,o]=ee.useState(null),[c,d]=ee.useState(null),[h,f]=ee.useState("overview"),[m,g]=ee.useState(null),[y,x]=ee.useState(null),[_,N]=ee.useState("report"),[S,w]=ee.useState(!1),[k,E]=ee.useState(!1),M=ee.useCallback(async()=>{try{g(await MU())}catch{}},[]),B=ee.useCallback(async()=>{try{x(await kU())}catch{}},[]);ee.useEffect(()=>{M(),B(),CU().then(C=>E(C.can_steer)).catch(()=>{})},[M,B]);const R=ee.useRef(!1);ee.useEffect(()=>{let C=!1,D;R.current=!1;const Y=()=>{D=setTimeout(L,mH)},L=async()=>{if(!C)try{const{summary:G,raw:q,finished:Q}=await uS(e);if(C)return;if(Q&&!R.current){R.current=!0;const te=await p_(e);C||a(te);return}const[J,W]=await Promise.all([fS(e).catch(()=>({agents:[],events:[]})),dS(G.runId,e).catch(()=>[])]);if(C)return;a(te=>({summary:G,raw:q,finished:Q,transcript:J,vulnerabilities:W,reportMarkdown:(te==null?void 0:te.reportMarkdown)??null})),Y()}catch(G){if(C)return;o(G instanceof Error?G.message:"Could not load run data."),Y()}};return(async()=>{try{const G=await p_(e);if(C)return;a(G),G.finished?R.current=!0:Y()}catch(G){if(C)return;o(G instanceof Error?G.message:"Could not load run data."),Y()}})(),()=>{C=!0,D&&clearTimeout(D)}},[e]);const U=ee.useMemo(()=>r?NU(r.vulnerabilities):null,[r]),I=(r==null?void 0:r.vulnerabilities.find(C=>C.id===c))??null,X=(r==null?void 0:r.transcript.agents.length)??0,j=(m==null?void 0:m.verified)===!0,z=ee.useRef(!1);ee.useEffect(()=>{z.current=!1},[e]),ee.useEffect(()=>{z.current||!r||(r.finished?(z.current=!0,f("overview")):X>0&&(z.current=!0,f("agents")))},[r,X]);const V=ee.useCallback(C=>{z.current=!0,f(C)},[]),P=ee.useCallback(C=>{t(C),d(null),a(null),o(null),z.current=!1},[]),T=ee.useCallback((C,D)=>{jr("email_report",D),N("report"),w(C),V("email")},[V]),$=ee.useCallback(()=>T(!1,"sidebar"),[T]),O=ee.useCallback(()=>T(!0,"overview"),[T]),H=ee.useCallback(()=>{B(),V("history")},[B,V]),K=ee.useCallback(async()=>{await M(),await B()},[M,B]),Z=ee.useCallback(async()=>{await OU(),await M(),await B()},[M,B]);return p.jsxs("div",{className:"min-h-screen bg-black text-white flex",children:[p.jsx(KU,{view:h,onSelectView:C=>{d(null),C==="history"?H():V(C)},issuesCount:(r==null?void 0:r.vulnerabilities.length)??0,agentCount:X,runCount:(y==null?void 0:y.count)??0,finished:(r==null?void 0:r.finished)??!1,verified:j,email:(m==null?void 0:m.email)??null,onOpenEmail:$,onOpenHistory:H,onForget:()=>void Z()}),p.jsxs("div",{className:"flex-1 min-w-0",children:[p.jsx("div",{className:"border-b border-[#222]",children:p.jsxs("div",{className:"max-w-[88rem] mx-auto px-3 sm:px-6 py-4 flex items-center gap-1.5",children:[p.jsxs("a",{href:ha("https://app.strix.ai","logo"),target:"_blank",rel:"noopener noreferrer",onClick:()=>jr("logo","topbar"),className:"flex items-center gap-1.5 opacity-90 transition-opacity hover:opacity-100 lg:hidden",title:"Open Strix Cloud",children:[p.jsx("img",{src:"./logo.png",alt:"Strix",className:"w-10 h-8 object-cover"}),p.jsx("div",{className:"text-base text-white font-medium tracking-tight",children:"Strix"})]}),r&&p.jsx(bH,{finished:r.finished}),p.jsxs("div",{className:"ml-auto flex items-center gap-3",children:[j&&y&&!y.locked&&y.runs.length>0&&p.jsx(gH,{runs:y,activeRun:e,launchedName:xo((r==null?void 0:r.summary.targets[0])??null,(r==null?void 0:r.summary.runName)??(r==null?void 0:r.summary.runId)??"Current run"),onSelect:P}),p.jsxs("a",{href:ha(qu,"run_in_cloud"),target:"_blank",rel:"noopener noreferrer",onClick:()=>jr("run_in_cloud","topbar"),className:"inline-flex items-center gap-1 rounded-lg bg-white px-3 py-1.5 text-xs font-semibold text-black transition-opacity hover:opacity-90",children:["Run in the cloud",p.jsx(M_,{className:"w-3 h-3","aria-hidden":"true"})]})]})]})}),p.jsxs("div",{className:"max-w-[88rem] mx-auto px-3 sm:px-6 py-8 sm:py-12 space-y-6",children:[s&&!r&&h!=="history"&&h!=="email"&&p.jsxs("div",{className:"rounded-lg px-4 py-3 flex gap-3 items-start border border-red-500/30 bg-red-500/5",children:[p.jsx($u,{className:"w-5 h-5 flex-shrink-0 mt-0.5 text-red-400","aria-hidden":"true"}),p.jsx("p",{className:"text-sm text-red-300",children:s})]}),p.jsx("div",{className:"animate-page-in space-y-6",children:h==="email"?p.jsx(aH,{activeRun:e,auth:m,purpose:_,skipDisclosure:S,onAuthChanged:()=>{M(),B()},onExit:C=>f(C==="history"?"history":"overview")}):h==="feedback"?p.jsx(dH,{defaultEmail:(m==null?void 0:m.email)??null,onExit:C=>f(C)}):h==="history"?p.jsxs("div",{className:"space-y-4",children:[p.jsxs("div",{className:"flex items-center gap-2",children:[p.jsx(Ys,{className:"w-5 h-5 text-[#888]","aria-hidden":"true"}),p.jsx("h1",{className:"text-2xl font-semibold text-white",children:"Past runs"})]}),p.jsx(nH,{runs:y,activeRun:e,onSelectRun:P,onVerified:()=>void K()})]}):!r&&!s?p.jsxs("div",{className:"rounded-xl border border-[#222] bg-[rgba(255,255,255,0.02)] p-10 text-center",children:[p.jsx("div",{className:"w-6 h-6 mx-auto mb-3 rounded-full border-2 border-[#333] border-t-white animate-spin"}),p.jsx("p",{className:"text-sm text-[#888]",children:"Loading run data…"})]}):r&&U?p.jsxs(p.Fragment,{children:[p.jsx(yH,{summary:r.summary}),p.jsxs("div",{className:"flex gap-5 border-b border-[#2a2a2a] lg:hidden",children:[p.jsx(Bm,{active:h==="overview",onClick:()=>V("overview"),children:"Pentest Overview"}),p.jsxs(Bm,{active:h==="issues",onClick:()=>V("issues"),children:["Issues",r.vulnerabilities.length>0?` (${r.vulnerabilities.length})`:""]}),X>0&&p.jsxs(Bm,{active:h==="agents",onClick:()=>V("agents"),children:["Agents (",X,")"]})]}),h==="overview"?p.jsx(NH,{summary:r.summary,counts:U,total:r.vulnerabilities.length,reportMarkdown:r.reportMarkdown,raw:r.raw,finished:r.finished,onOpenEmail:O}):h==="agents"&&X>0?p.jsx(SH,{run:r,canSteer:k}):I?p.jsxs("div",{className:"space-y-4",children:[p.jsxs("button",{onClick:()=>d(null),className:"cursor-pointer inline-flex items-center gap-1.5 text-sm text-[#888] hover:text-white transition-colors",children:[p.jsx(xp,{className:"w-4 h-4"})," Back to all findings"]}),p.jsx(rD,{vulnerability:I})]}):p.jsx(vH,{vulnerabilities:r.vulnerabilities,finished:r.finished,onSelect:C=>d(C)})]}):null},`${e??"launched"}:${h}:${c??""}`)]})]}),p.jsx(cH,{message:hH})]})}function gH({runs:e,activeRun:t,launchedName:r,onSelect:a}){const[s,o]=ee.useState(!1),c=e.runs.find(h=>h.name===t),d=c?xo(c.target,c.name):r;return p.jsxs("div",{className:"relative",children:[p.jsxs("button",{onClick:()=>o(h=>!h),onBlur:()=>setTimeout(()=>o(!1),150),"aria-label":"Switch pentest",className:"flex items-center gap-2 rounded-lg border border-[#3a3a3a] bg-[rgba(255,255,255,0.05)] px-3 py-2 text-sm text-white transition-colors hover:border-[#555] hover:bg-[rgba(255,255,255,0.09)]",children:[p.jsx(Ys,{className:"h-4 w-4 flex-shrink-0 text-[#888]","aria-hidden":"true"}),p.jsx("span",{className:"flex-shrink-0 text-[#888]",children:"Pentest"}),p.jsx("span",{className:"max-w-[260px] truncate font-medium",children:d}),p.jsx(mo,{className:"h-4 w-4 flex-shrink-0 text-[#aaa]","aria-hidden":"true"})]}),s&&p.jsxs("div",{className:"absolute right-0 z-50 mt-2 max-h-96 w-96 overflow-y-auto rounded-xl py-1.5 shadow-2xl",style:{border:"1px solid #3a3a3a",background:"#0a0a0a"},children:[p.jsx("div",{className:"border-b border-[#222] px-3 py-2 text-[11px] font-semibold uppercase tracking-wide text-[#666]",children:"Switch pentest"}),e.runs.map(h=>{const f=h.name===t;return p.jsxs("button",{onMouseDown:()=>a(h.name),className:`flex w-full items-center gap-2 px-3 py-2.5 text-left text-sm transition-colors hover:bg-[rgba(255,255,255,0.06)] ${f?"bg-[rgba(255,255,255,0.04)] text-white":"text-[#aaa]"}`,children:[p.jsxs("span",{className:"min-w-0 flex-1",children:[p.jsx("span",{className:"block truncate font-medium",children:xo(h.target,h.name)}),h.target&&p.jsx("span",{className:"block truncate font-mono text-xs text-[#666]",children:h.target})]}),f&&p.jsx("span",{className:"h-2 w-2 flex-shrink-0 rounded-full bg-emerald-400"})]},h.name)})]})]})}function bH({finished:e}){return e?p.jsxs("span",{className:"ml-3 inline-flex items-center gap-1.5 text-xs text-[#888]",children:[p.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-[#555]"}),"Complete"]}):p.jsxs("span",{className:"ml-3 inline-flex items-center gap-1.5 text-xs text-emerald-400",children:[p.jsxs("span",{className:"relative flex h-1.5 w-1.5",children:[p.jsx("span",{className:"absolute inline-flex h-full w-full rounded-full bg-emerald-400 opacity-75 animate-ping"}),p.jsx("span",{className:"relative inline-flex h-1.5 w-1.5 rounded-full bg-emerald-400"})]}),"Live"]})}function xH(e){if(e==null)return null;if(e<60)return`${e}s`;const t=Math.floor(e/60);return t<60?`${t}m`:`${Math.floor(t/60)}h ${t%60}m`}function yH({summary:e}){const t=xH(e.durationSeconds);return p.jsxs("div",{children:[p.jsx("h1",{className:"text-2xl font-semibold text-white",children:xo(e.targets[0]??null,e.runName??e.runId??"Pentest results")}),p.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&&p.jsx("span",{className:"font-mono text-[#aaa]",children:e.targets.join(", ")}),e.scanMode&&p.jsx(Im,{label:e.scanMode}),t&&p.jsx(Im,{label:t}),e.status&&p.jsx(Im,{label:e.status})]})]})}function Im({label:e}){return p.jsxs(p.Fragment,{children:[p.jsx("span",{className:"text-[#333]",children:"·"}),p.jsx("span",{className:"capitalize",children:e})]})}function vH({vulnerabilities:e,finished:t,onSelect:r}){const a=[...e].sort((s,o)=>C_.indexOf(s.severity)-C_.indexOf(o.severity));return a.length===0?p.jsxs("div",{className:"space-y-4",children:[p.jsx("div",{className:"rounded-xl border border-[#222] bg-[rgba(255,255,255,0.02)] p-8 text-center text-sm text-[#888]",children:t?"No findings in this run.":"No findings yet. The pentest is still running…"}),t&&p.jsxs("div",{className:"rounded-xl border border-[#222] bg-[rgba(255,255,255,0.02)] p-5",children:[p.jsx("p",{className:"text-sm font-medium text-white",children:"Stay ahead of new exposures"}),p.jsx("p",{className:"mt-0.5 mb-3 text-xs text-[#666]",children:"Attack surface monitoring catches new exposures for your org over time."}),p.jsx(yS,{label:"Attack surface monitoring",desc:"Continuous coverage for your whole org.",slug:"asm",surface:"empty_state",icon:ZC})]})]}):p.jsx("div",{className:"space-y-2",children:a.map(s=>p.jsxs("button",{onClick:()=>r(s.id),className:"animate-card-in 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:[p.jsx("span",{className:`w-2.5 h-2.5 rounded-full flex-shrink-0 ${_p(s.severity)}`,"aria-hidden":"true"}),p.jsxs("span",{className:"flex-1 min-w-0",children:[p.jsx("span",{className:"block text-sm font-medium text-white truncate",children:s.title}),s.target&&p.jsx("span",{className:"block text-xs text-[#666] font-mono truncate",children:s.target})]}),p.jsx("span",{className:`text-xs font-semibold px-2 py-0.5 rounded-full border capitalize ${q_[s.severity]}`,children:s.severity})]},s.id))})}function _H(e){return e.replace(/^\s*#{1,6}[ \t]+.*(?:\r?\n)+/,"").trimStart()}function wH(e){const t=[];let r=null;for(const a of e.split(` -`)){const s=a.match(/^#{1,6}\s+(.*)$/);if(s){const o=s[1].trim().toLowerCase();if(o===r)continue;r=o}else a.trim()!==""&&(r=null);t.push(a)}return t.join(` -`)}function EH({onOpenEmail:e}){return p.jsx("button",{onClick:e,className:"group w-full cursor-pointer rounded-xl border border-emerald-500/25 bg-emerald-500/[0.06] p-4 text-left transition-colors hover:border-emerald-500/40",children:p.jsxs("div",{className:"flex items-center gap-3",children:[p.jsx("div",{className:"flex h-9 w-9 flex-shrink-0 items-center justify-center rounded-lg",style:{border:"1px solid rgba(16,185,129,0.3)",background:"rgba(16,185,129,0.08)"},children:p.jsx(yp,{className:"h-4 w-4 text-emerald-400","aria-hidden":"true"})}),p.jsxs("div",{className:"min-w-0 flex-1",children:[p.jsx("p",{className:"text-sm font-semibold text-white",children:"Email an encrypted PDF report of this run"}),p.jsx("p",{className:"mt-0.5 text-xs text-[#888]",children:"Encrypted with a key only you can see, email verified with a one-time code before sending."})]}),p.jsx("span",{className:"flex-shrink-0 rounded-lg bg-white px-3 py-1.5 text-xs font-semibold text-black transition-opacity group-hover:opacity-90",children:"Export report to PDF"})]})})}function NH({summary:e,counts:t,total:r,reportMarkdown:a,raw:s,finished:o,onOpenEmail:c}){const d=[["Executive Summary",e.executiveSummary],["Technical Analysis",e.technicalAnalysis],["Methodology",e.methodology],["Recommendations",e.recommendations]].filter(([,h])=>!!h).map(([h,f])=>({title:h,content:_H(f)}));return p.jsxs("div",{className:"space-y-6",children:[p.jsx("div",{className:"animate-card-in",children:p.jsx(oH,{raw:s,durationSeconds:e.durationSeconds})}),r>0&&p.jsx("div",{className:"animate-card-in rounded-xl border border-[#222] bg-[rgba(255,255,255,0.02)] p-5",children:p.jsx(iD,{findings:{total:r,...t}})}),o&&p.jsx("div",{className:"animate-card-in",children:p.jsx(EH,{onOpenEmail:c})}),d.length>0?p.jsx("div",{className:"animate-card-in rounded-xl border border-[#222] bg-[rgba(255,255,255,0.02)] p-5 space-y-8",children:d.map(h=>p.jsx(oa,{title:h.title,content:h.content},h.title))}):a?p.jsx("div",{className:"animate-card-in rounded-xl border border-[#222] bg-[rgba(255,255,255,0.02)] p-5",children:p.jsx(oa,{content:wH(a)})}):r===0&&p.jsx("p",{className:"text-sm text-[#888]",children:"No summary available for this run yet."})]})}function Bm({active:e,onClick:t,children:r}){return p.jsxs("button",{onClick:t,className:`cursor-pointer relative pb-2.5 text-sm font-semibold transition-colors ${e?"text-white":"text-[#666] hover:text-white"}`,children:[r,e&&p.jsx("span",{className:"absolute bottom-0 inset-x-0 h-0.5 bg-white rounded-full"})]})}function SH({run:e,canSteer:t}){const{agents:r,events:a}=e.transcript,s=ee.useMemo(()=>mU(r,a),[r,a]),[o,c]=ee.useState(null),d=o?r.find(f=>f.id===o)??null:null,h=t&&!e.finished;return p.jsxs("div",{className:"space-y-5",children:[p.jsxs("div",{className:"rounded-xl border border-[#222] bg-[rgba(255,255,255,0.02)] p-5",children:[p.jsxs("div",{className:"flex items-center gap-2",children:[p.jsx(Mo,{className:"w-4 h-4 text-[#888]","aria-hidden":"true"}),p.jsx("h2",{className:"text-sm font-semibold text-white",children:"Agent graph"}),p.jsxs("span",{className:"text-xs text-[#666]",children:[r.length," agent",r.length===1?"":"s"]})]}),p.jsx("p",{className:"mt-1 mb-4 text-xs text-[#666]",children:"Click an agent to open its full transcript."}),p.jsx("div",{className:"h-[480px] rounded-lg border border-[#1a1a1a] overflow-hidden",children:p.jsx(YB,{agents:s,selectedAgentId:o,onSelectAgent:f=>c(f),eventsLoaded:!0,eventsEmpty:s.size===0,scanCompleted:e.finished})})]}),h&&p.jsx(pS,{agents:r}),p.jsxs("div",{className:"rounded-xl border border-[#222] bg-[rgba(255,255,255,0.02)] p-5",children:[p.jsx("p",{className:"text-sm font-semibold text-white",children:"Run this pentest with more depth"}),p.jsx("p",{className:"mt-0.5 text-xs text-[#666]",children:"Re-run this pentest on managed infra in the cloud."}),p.jsx("div",{className:"mt-3 flex flex-wrap gap-2.5",children:p.jsx(yS,{label:"Re-run in Strix Pro with more depth",desc:"Run this pentest on managed infra with more depth.",slug:"live_scan",surface:"agents",icon:eT})})]}),p.jsx(LU,{open:d!==null,agent:d,events:a,steerable:h,onClose:()=>c(null)})]})}Mk.createRoot(document.getElementById("root")).render(p.jsx(ee.StrictMode,{children:p.jsx(pH,{})})); diff --git a/strix/interface/viewer/static/index.html b/strix/interface/viewer/static/index.html index 02221191..22fad9fc 100644 --- a/strix/interface/viewer/static/index.html +++ b/strix/interface/viewer/static/index.html @@ -6,8 +6,8 @@ Strix Results - - + +
diff --git a/strix/llm/compaction.py b/strix/llm/compaction.py index e40caf6a..ecdb9a83 100644 --- a/strix/llm/compaction.py +++ b/strix/llm/compaction.py @@ -10,11 +10,11 @@ pairing so the trimmed history is still valid provider input. from __future__ import annotations import logging +from functools import cache from typing import TYPE_CHECKING, Any from agents.model_settings import ModelSettings from agents.models.interface import ModelTracing -from litellm.exceptions import BadRequestError, ContextWindowExceededError from openai.types.responses import ResponseOutputMessage, ResponseOutputText from strix.config import load_settings @@ -63,6 +63,18 @@ _OVERFLOW_MARKERS = ( ) +@cache +def _overflow_error_types() -> tuple[type[BaseException], type[BaseException]]: + """``(ContextWindowExceededError, BadRequestError)``, imported on first use. + + LiteLLM costs seconds to import, and nothing needs it until a model call is + actually made, so it stays off the launch path. + """ + from litellm.exceptions import BadRequestError, ContextWindowExceededError + + return ContextWindowExceededError, BadRequestError + + def is_context_overflow(exc: BaseException) -> bool: """Whether ``exc`` is a model context-window-overflow error. @@ -70,9 +82,10 @@ def is_context_overflow(exc: BaseException) -> bool: OpenRouter branch raises a plain BadRequestError, so for that we fall back to matching the provider message. """ - if isinstance(exc, ContextWindowExceededError): + context_window_exceeded, bad_request = _overflow_error_types() + if isinstance(exc, context_window_exceeded): return True - if isinstance(exc, BadRequestError): + if isinstance(exc, bad_request): msg = str(exc).lower() if any(x in msg for x in _OVERFLOW_EXCLUSIONS): return False diff --git a/strix/llm/context_budget.py b/strix/llm/context_budget.py index b7589a9e..baa02c4b 100644 --- a/strix/llm/context_budget.py +++ b/strix/llm/context_budget.py @@ -8,8 +8,6 @@ import logging from functools import lru_cache from typing import Any -import litellm - from strix.config import load_settings @@ -38,6 +36,8 @@ def _lookup_key(model: str) -> str: def _safe_get_model_info(model: str) -> dict[str, Any] | None: try: + import litellm + return dict(litellm.get_model_info(model)) except Exception: # noqa: BLE001 - unmapped models raise; caller falls back. return None @@ -82,6 +82,8 @@ def count_tokens(model: str, text: str) -> int: if not text: return 0 try: + import litellm + return int(litellm.token_counter(model=_lookup_key(model), text=text)) except Exception: # noqa: BLE001 - tokenizer may be unavailable for some models. return len(text.encode("utf-8")) diff --git a/strix/llm/warmup.py b/strix/llm/warmup.py new file mode 100644 index 00000000..98da959d --- /dev/null +++ b/strix/llm/warmup.py @@ -0,0 +1,55 @@ +"""Background pre-import of the heavy scan dependencies. + +The scan engine's import graph (the agents SDK, OpenAI client, LiteLLM, the +Caido SDK, the Docker SDK) costs seconds to import cold, but none of it is +needed until a scan actually starts. Importing it on a daemon thread at CLI +entry overlaps that cost with the I/O-bound startup work that always precedes +a scan (argument parsing, Docker checks, image pull, TUI setup), so by the +time the scan begins the modules are already in ``sys.modules``. Any thread +that needs one of them before the warm-up finishes just blocks on the normal +import lock, so behaviour is unchanged either way. +""" + +from __future__ import annotations + +import importlib +import logging +import threading + + +logger = logging.getLogger(__name__) + +WARMUP_MODULES = ( + "strix.core.runner", + "litellm", + "caido_sdk_client", + "docker", +) + +_lock = threading.Lock() +_thread: threading.Thread | None = None + + +def _warm(modules: tuple[str, ...]) -> None: + for name in modules: + try: + importlib.import_module(name) + except Exception: # noqa: BLE001 - a failed warm-up must never fail the run. + logger.debug("Import warm-up for %r failed", name, exc_info=True) + + +def start_import_warmup(modules: tuple[str, ...] = WARMUP_MODULES) -> threading.Thread: + """Start importing the heavy scan dependencies in the background, once. + + ``modules`` lets embedders that never touch some backends (e.g. a cloud + runtime that has no local Docker) warm a narrower set. + """ + global _thread # noqa: PLW0603 + with _lock: + if _thread is not None: + return _thread + _thread = threading.Thread( + target=_warm, args=(modules,), name="strix-import-warmup", daemon=True + ) + _thread.start() + return _thread diff --git a/strix/report/coverage.py b/strix/report/coverage.py new file mode 100644 index 00000000..c519853a --- /dev/null +++ b/strix/report/coverage.py @@ -0,0 +1,443 @@ +"""``coverage.json`` — the negative space of a scan, with provenance. + +A findings list answers "what is wrong". It cannot answer "what did you +check", and in a compliance context that second question is the one that +decides whether a clean result means anything: an auditor reading zero SQL +injection findings cannot tell "tested fourteen endpoints, all parameterized" +apart from "never looked". + +This module assembles the artifact that answers it. Two kinds of statement go +in, and they are kept apart on purpose: + +- ``agent_reported`` — the coverage ledger (:mod:`strix.tools.coverage.tools`). + Rich and specific, but it is an agent's account of its own work. +- ``machine_observed`` — facts the runtime recorded regardless of what any + agent claimed: which agents ran and how they terminated, which skills they + carried, how many findings were filed, whether the run finished or was cut + short. + +A coverage claim is an attestation, so conflating the two would be the worst +possible failure: a hallucinated "tested and clean" is strictly less honest +than no coverage record at all. Every entry therefore carries its ``source``, +and machine-observed facts contradict rather than confirm — an agent that +carried the ``sql_injection`` skill and recorded nothing about SQL injection +shows up under ``gaps``, and a run that hit its budget ceiling is stamped +``complete: false`` no matter how tidy the ledger looks. +""" + +from __future__ import annotations + +import json +import logging +from datetime import UTC, datetime +from typing import TYPE_CHECKING, Any + +from strix.report.writer import atomic_write_text +from strix.skills import get_available_skills + + +if TYPE_CHECKING: + from pathlib import Path + + +logger = logging.getLogger(__name__) + +COVERAGE_FILENAME = "coverage.json" +COVERAGE_SCHEMA_VERSION = 1 + +#: Ledger outcomes rendered for a reader who has never seen our enum. +OUTCOME_LABELS: dict[str, str] = { + "reported": "Finding reported", + "no_issue_found": "No issue identified", + "ruled_out": "Ruled out", + "not_applicable": "Not applicable", + "needs_follow_up": "Requires further review", +} + +#: Statuses that mean the agent stopped early rather than finishing its task. +_INCOMPLETE_AGENT_STATUSES = frozenset({"crashed", "stopped", "running", "waiting"}) + +#: Run statuses that mean the scan itself did not run to completion. +_INCOMPLETE_RUN_STATUSES = frozenset({"failed", "interrupted", "stopped", "running"}) + +#: Only this skill category names a vulnerability class. ``tooling`` and +#: ``reconnaissance`` skills describe how an agent works, not what it hunts, +#: so holding one implies no coverage obligation. +_RISK_SKILL_CATEGORY = "vulnerabilities" + +#: How each vulnerability skill can legitimately appear in a ledger row. +#: +#: Matching a skill to a row is textual, and a skill's filename is not how a +#: pentester writes the class down: an agent carrying ``path_traversal_lfi_rfi`` +#: records "Path Traversal", and one carrying ``weak_password_detection`` +#: records "weak password policy". A row matches when it contains every word +#: of *any one* phrasing here. Skills absent from this map fall back to their +#: own words, so a new skill is merely matched strictly, never crashed on — +#: but add an entry, because a false gap asserts something untrue in a report. +_SKILL_PHRASINGS: dict[str, tuple[str, ...]] = { + "agentic_system_security": ( + "agentic", + "agent tool", + "mcp", + "confused deputy", + "tool invocation", + ), + "argument_injection": ("argument injection", "option injection", "argv"), + "authentication_jwt": ("authentication", "jwt", "session"), + "broken_function_level_authorization": ( + "function level authorization", + "authorization", + "access control", + "privilege escalation", + ), + "browser_security": ( + "browser", + "postmessage", + "xs leak", + "service worker", + "cross origin state", + ), + "business_logic": ("business logic", "logic flaw"), + "csrf": ("csrf", "cross site request forgery"), + "header_injection": ("header injection", "host header", "crlf"), + "http_request_smuggling": ("request smuggling", "desync"), + "idor": ("idor", "object level authorization", "bola", "direct object reference"), + "information_disclosure": ( + "information disclosure", + "information leak", + "sensitive data", + "data exposure", + ), + "insecure_deserialization": ("deserialization",), + "insecure_file_uploads": ("file upload",), + "llm_prompt_injection": ("prompt injection",), + "mass_assignment": ("mass assignment", "parameter binding"), + "nosql_injection": ("nosql",), + "open_redirect": ("redirect",), + "path_traversal_lfi_rfi": ( + "path traversal", + "directory traversal", + "file inclusion", + "lfi", + "rfi", + ), + "prototype_pollution": ("prototype pollution",), + "race_conditions": ("race condition", "toctou"), + "rce": ("rce", "remote code execution", "code execution", "command injection"), + "semantic_confusion": ( + "semantic confusion", + "parser differential", + "normalization", + "validator sink mismatch", + ), + "sql_injection": ("sql injection", "sqli"), + "ssrf": ("ssrf", "server side request forgery"), + "ssti": ("ssti", "template injection"), + "subdomain_takeover": ("subdomain takeover",), + "weak_password_detection": ("password", "credential", "brute force"), + "xss": ("xss", "cross site scripting", "script injection"), + "xxe": ("xxe", "xml external entity", "xml entity"), +} + + +def read_agent_graph(state_dir: Path) -> dict[str, Any]: + """Load the coordinator's snapshot, or ``{}`` when it isn't readable. + + The snapshot is the runtime's own record of the agent tree, written on + every graph mutation. Reading it here (rather than holding a coordinator + reference) keeps artifact assembly usable from a finished or resumed run, + where the live coordinator is gone but the file is still on disk. + """ + path = state_dir / "agents.json" + if not path.is_file(): + return {} + try: + data = json.loads(path.read_text(encoding="utf-8")) + except (OSError, json.JSONDecodeError): + logger.warning("agent graph snapshot at %s is unreadable", path, exc_info=True) + return {} + return data if isinstance(data, dict) else {} + + +def _normalized(text: str) -> str: + """Lowercase *text* with punctuation flattened to spaces, for matching.""" + return "".join(char if char.isalnum() else " " for char in text.lower()) + + +def _skill_leaf(skill: str) -> str: + return skill.rsplit("/", maxsplit=1)[-1].strip().lower() + + +def _risk_skill_names() -> frozenset[str]: + """Bare names of every skill that denotes a vulnerability class.""" + try: + entries = get_available_skills().get(_RISK_SKILL_CATEGORY, []) + return frozenset(entry["name"] for entry in entries if entry.get("name")) + except OSError: + logger.warning("could not enumerate skills for coverage gaps", exc_info=True) + return frozenset() + + +def agents_from_graph(graph: dict[str, Any]) -> list[dict[str, Any]]: + """Flatten the coordinator snapshot into one record per agent.""" + statuses = graph.get("statuses") + if not isinstance(statuses, dict): + return [] + raw_names = graph.get("names") + names: dict[str, Any] = raw_names if isinstance(raw_names, dict) else {} + raw_metadata = graph.get("metadata") + metadata: dict[str, Any] = raw_metadata if isinstance(raw_metadata, dict) else {} + raw_parents = graph.get("parent_of") + parents: dict[str, Any] = raw_parents if isinstance(raw_parents, dict) else {} + # Only an unambiguous root earns the exemption below. A snapshot with no + # parent links at all makes every agent look parentless, and excusing all + # of them would silently delete the silent-agent check. + parentless = [agent_id for agent_id in statuses if not parents.get(agent_id)] + root_id = parentless[0] if len(parentless) == 1 else None + + agents: list[dict[str, Any]] = [] + for agent_id, status in statuses.items(): + raw_meta = metadata.get(agent_id) + meta: dict[str, Any] = raw_meta if isinstance(raw_meta, dict) else {} + raw_skills = meta.get("skills") + skills: list[Any] = raw_skills if isinstance(raw_skills, list) else [] + agents.append( + { + "agent_id": agent_id, + "agent_name": names.get(agent_id) or agent_id, + "status": str(status), + "skills": [str(skill) for skill in skills], + "task": str(meta.get("task") or ""), + "is_root": agent_id == root_id, + } + ) + agents.sort(key=lambda agent: str(agent["agent_name"])) + return agents + + +def _skill_phrasings(skill: str) -> list[list[str]]: + """Word lists that would each count as a ledger row naming *skill*.""" + phrasings = _SKILL_PHRASINGS.get(skill) or (skill,) + return [terms for phrase in phrasings if (terms := _normalized(phrase).split())] + + +def _entry_is_about(entry: dict[str, Any], phrasings: list[list[str]]) -> bool: + """True when a ledger row plausibly concerns any phrasing of a risk class.""" + haystack = _normalized(f"{entry.get('risk_area', '')} {entry.get('surface', '')}") + return any(all(term in haystack for term in terms) for terms in phrasings) + + +def skill_coverage_gaps( + entries: list[dict[str, Any]], agents: list[dict[str, Any]] +) -> list[dict[str, Any]]: + """Vulnerability classes an agent was equipped for but never recorded. + + A skill assigned to an agent is a declaration of intent that the runtime + observed independently of anything the agent later said. When no ledger + row mentions that class, the class is unaccounted for — which is a very + different report line from "tested, nothing found". + """ + risk_skills = _risk_skill_names() + if not risk_skills: + return [] + + carriers: dict[str, list[str]] = {} + for agent in agents: + for skill in agent["skills"]: + leaf = _skill_leaf(skill) + if leaf in risk_skills: + carriers.setdefault(leaf, []).append(str(agent["agent_name"])) + + gaps: list[dict[str, Any]] = [] + for skill, agent_names in sorted(carriers.items()): + phrasings = _skill_phrasings(skill) + if any(_entry_is_about(entry, phrasings) for entry in entries): + continue + gaps.append( + { + "kind": "unrecorded_risk_class", + "risk_area": skill.replace("_", " "), + "detail": ( + f"Agent(s) {', '.join(sorted(set(agent_names)))} were assigned the " + f"'{skill}' skill, but no coverage entry records this class being " + "assessed. Treat it as unexamined, not as clean." + ), + } + ) + return gaps + + +def _silent_agent_gaps( + entries: list[dict[str, Any]], agents: list[dict[str, Any]] +) -> list[dict[str, Any]]: + """Agents that ran and recorded nothing at all. + + The root agent is exempt while it has children: it delegates and + reconciles rather than testing, so flagging it on every clean scan would + put a permanent false line in the report and teach readers to skip the + section. A root that ran alone tested alone, and is held to the rule. + """ + recorded_ids = {str(entry.get("agent_id")) for entry in entries if entry.get("agent_id")} + delegated = len(agents) > 1 + gaps: list[dict[str, Any]] = [] + for agent in agents: + if agent["agent_id"] in recorded_ids or (agent["is_root"] and delegated): + continue + gaps.append( + { + "kind": "agent_recorded_no_coverage", + "agent_name": agent["agent_name"], + "detail": ( + f"{agent['agent_name']} ran (status: {agent['status']}) without " + "recording any coverage. Whatever it examined is absent from this " + "record." + ), + } + ) + return gaps + + +def _unresolved_gaps(entries: list[dict[str, Any]]) -> list[dict[str, Any]]: + """Ledger rows the agents themselves left open.""" + return [ + { + "kind": "needs_follow_up", + "surface": entry.get("surface", ""), + "risk_area": entry.get("risk_area", ""), + "detail": str(entry.get("evidence") or "Left open without a stated reason."), + } + for entry in entries + if entry.get("outcome") == "needs_follow_up" + ] + + +def _completeness( + run_record: dict[str, Any], + agents: list[dict[str, Any]], + exit_reason: str | None, +) -> dict[str, Any]: + """Whether this record can be read as a complete account of the scan. + + Any of these makes it partial, and the caveats say which: the run did not + reach ``completed``, an agent was still live or died when the scan ended, + or the run stopped for a reason other than the root agent deciding it was + done (budget ceilings are the common case). + """ + status = str(run_record.get("status") or "unknown") + caveats: list[str] = [] + + if status in _INCOMPLETE_RUN_STATUSES: + caveats.append( + f"The scan ended with status '{status}' rather than completing, so coverage " + "reflects only the work finished before it stopped." + ) + unfinished = [agent for agent in agents if agent["status"] in _INCOMPLETE_AGENT_STATUSES] + if unfinished: + names = ", ".join(sorted(str(agent["agent_name"]) for agent in unfinished)) + caveats.append( + f"{len(unfinished)} agent(s) did not finish cleanly ({names}); any surface they " + "held is under-covered." + ) + if exit_reason and exit_reason not in {"finished_by_tool", "completed"}: + caveats.append( + f"The run terminated via '{exit_reason}' rather than the root agent finishing, " + "so remaining scope was not reached." + ) + + return { + "complete": not caveats, + "scan_status": status, + "exit_reason": exit_reason, + "caveats": caveats, + } + + +def _outcome_counts(entries: list[dict[str, Any]]) -> dict[str, int]: + counts: dict[str, int] = {} + for entry in entries: + outcome = str(entry.get("outcome", "")) + counts[outcome] = counts.get(outcome, 0) + 1 + return {label: counts[label] for label in OUTCOME_LABELS if label in counts} + + +def build_coverage_document( + *, + run_record: dict[str, Any], + entries: list[dict[str, Any]], + agent_graph: dict[str, Any], + vulnerability_reports: list[dict[str, Any]], + exit_reason: str | None = None, +) -> dict[str, Any]: + """Assemble the ``coverage.json`` document.""" + agents = agents_from_graph(agent_graph) + skills_exercised = sorted( + {_skill_leaf(skill) for agent in agents for skill in agent["skills"] if skill} + ) + + ledger = [ + { + "surface": entry.get("surface", ""), + "risk_area": entry.get("risk_area", ""), + "outcome": entry.get("outcome", ""), + "outcome_label": OUTCOME_LABELS.get(str(entry.get("outcome", "")), ""), + "evidence": entry.get("evidence", ""), + "recorded_by": entry.get("agent_name", ""), + "recorded_at": entry.get("created_at", ""), + "updated_at": entry.get("updated_at", ""), + "previous_outcomes": [ + str(previous.get("outcome", "")) + for previous in entry.get("history", []) + if isinstance(previous, dict) + ], + "source": "agent_reported", + } + for entry in entries + ] + + gaps = [ + *_unresolved_gaps(entries), + *skill_coverage_gaps(entries, agents), + *_silent_agent_gaps(entries, agents), + ] + + return { + "schema_version": COVERAGE_SCHEMA_VERSION, + "generated_at": datetime.now(UTC).strftime("%Y-%m-%d %H:%M:%S UTC"), + "run_id": run_record.get("run_id"), + "run_name": run_record.get("run_name"), + "scope": { + "targets": run_record.get("targets_info") or [], + "scan_mode": run_record.get("scan_mode"), + "scope_mode": run_record.get("scope_mode"), + "diff_scope": run_record.get("diff_scope"), + "instruction": run_record.get("instruction") or "", + }, + "summary": { + "surfaces_reviewed": len(ledger), + "outcomes": _outcome_counts(entries), + "findings_filed": len(vulnerability_reports), + "gaps": len(gaps), + }, + "machine_observed": { + "agents": agents, + "skills_exercised": skills_exercised, + "findings_filed": len(vulnerability_reports), + "source": "runtime", + }, + "completeness": _completeness(run_record, agents, exit_reason), + "entries": ledger, + "gaps": gaps, + } + + +def write_coverage(run_dir: Path, document: dict[str, Any]) -> Path: + """Write ``coverage.json`` into the run directory and return its path.""" + path = run_dir / COVERAGE_FILENAME + atomic_write_text(path, json.dumps(document, ensure_ascii=False, indent=2, default=str)) + logger.info( + "Saved coverage record to: %s (%d surface(s), %d gap(s))", + path, + len(document.get("entries", [])), + len(document.get("gaps", [])), + ) + return path diff --git a/strix/report/sarif.py b/strix/report/sarif.py index fc6e05db..821fffbc 100644 --- a/strix/report/sarif.py +++ b/strix/report/sarif.py @@ -40,6 +40,10 @@ Design notes: * Findings without safe locations still appear in the SARIF output, anchored to SECURITY.md and flagged via ``properties.synthetic_location`` rather than being dropped silently. + * Coverage rides in the same document as non-failing results (``kind`` of + ``pass`` / ``notApplicable`` / ``open``), and run completeness on + ``run.invocations``. Consumers that only want alerts filter on + ``kind == "fail"`` and are unaffected. """ from __future__ import annotations @@ -199,6 +203,7 @@ def build_sarif_report( *, tool_version: str | None = None, repository_context: dict[str, Any] | None = None, + coverage: dict[str, Any] | None = None, ) -> dict[str, Any]: """Return a SARIF 2.1.0 document for findings. @@ -209,6 +214,11 @@ def build_sarif_report( can bind alerts to the scanned commit; it is omitted for URL / IP (DAST) targets that have no repository. + ``coverage`` (optional) is the document from + :func:`strix.report.coverage.build_coverage_document`: its cleared + surfaces become non-failing results and its completeness caveats become + invocation notifications. + Findings without safe source locations are anchored synthetically to SECURITY.md and flagged via ``properties.synthetic_location``. They're still emitted as proper SARIF results so they (a) flow @@ -247,6 +257,9 @@ def build_sarif_report( ) ) + if coverage: + _append_coverage(coverage, rules_by_id, rule_index_by_id, results) + driver: dict[str, Any] = { "name": TOOL_NAME, "informationUri": TOOL_INFORMATION_URI, @@ -260,6 +273,9 @@ def build_sarif_report( "results": results, } + if coverage: + run["invocations"] = [_coverage_invocation(coverage)] + run_properties: dict[str, Any] = {} if synthetic_location_count: # Surface the count for observability without duplicating the @@ -292,6 +308,7 @@ def write_sarif_report( *, tool_version: str | None = None, repository_context: dict[str, Any] | None = None, + coverage: dict[str, Any] | None = None, ) -> None: """Write a SARIF report to disk, creating parent directories first. @@ -304,6 +321,7 @@ def write_sarif_report( vulnerability_reports, tool_version=tool_version, repository_context=repository_context, + coverage=coverage, ) tmp_path = output_path.with_name(f"{output_path.name}.{os.getpid()}.tmp") try: @@ -321,6 +339,7 @@ def write_sarif( *, tool_version: str | None = None, repository_context: dict[str, Any] | None = None, + coverage: dict[str, Any] | None = None, filename: str = "findings.sarif", ) -> Path: """Write ``findings.sarif`` alongside existing outputs in ``run_dir``. @@ -335,6 +354,7 @@ def write_sarif( reports, tool_version=tool_version, repository_context=repository_context, + coverage=coverage, ) logger.info( "Wrote SARIF 2.1.0 report: %s (%d results)", @@ -526,6 +546,11 @@ def _result_properties( "impact", "technical_analysis", "remediation_steps", + "counterevidence", + "confidence", + "confidence_rationale", + "severity_change_conditions", + "fix_verification", ): value = report.get(key) if value not in (None, ""): @@ -613,6 +638,115 @@ def _build_fixes(report: dict[str, Any]) -> list[dict[str, Any]] | None: return [fix] +# --------------------------------------------------------------------------- +# Coverage +# --------------------------------------------------------------------------- + +_COVERAGE_RULE_PREFIX = "strix-coverage" + +# ``reported`` is absent on purpose: those surfaces are already in ``results`` +# as ``fail`` findings. +_OUTCOME_TO_KIND = { + "no_issue_found": "pass", + "ruled_out": "pass", + "not_applicable": "notApplicable", + "needs_follow_up": "open", +} + + +def _coverage_rule_id(risk_area: str) -> str: + slug = _slugify(risk_area) or "unspecified" + return f"{_COVERAGE_RULE_PREFIX}/{slug}" + + +def _build_coverage_rule(rule_id: str, risk_area: str) -> dict[str, Any]: + description = f"Coverage of {risk_area} across the assessed attack surface." + return { + "id": rule_id, + "name": _rule_name(rule_id, risk_area), + "shortDescription": {"text": f"Coverage: {risk_area}"}, + "fullDescription": {"text": description}, + "defaultConfiguration": {"level": "none"}, + "help": {"text": description, "markdown": description}, + "properties": {"tags": ["coverage"]}, + } + + +def _build_coverage_result( + rule_id: str, + rule_index: int, + kind: str, + entry: dict[str, Any], +) -> dict[str, Any]: + surface = _string_value(entry.get("surface")) or "unspecified surface" + risk_area = _string_value(entry.get("risk_area")) or "unspecified risk" + evidence = _string_value(entry.get("evidence")) + label = _string_value(entry.get("outcome_label")) or str(entry.get("outcome", "")) + + message = f"{risk_area} — {label}: {surface}" + if evidence: + message = f"{message}\n\n{evidence}" + + result: dict[str, Any] = { + "ruleId": rule_id, + "ruleIndex": rule_index, + "kind": kind, + # SARIF requires ``level: none`` for any result whose kind is not ``fail``. + "level": "none", + "message": {"text": message}, + "locations": [{"logicalLocations": [{"fullyQualifiedName": surface}]}], + "properties": { + "strix": { + "coverage_outcome": entry.get("outcome", ""), + "risk_area": risk_area, + "surface": surface, + "recorded_by": entry.get("recorded_by", ""), + "source": entry.get("source", "agent_reported"), + } + }, + } + return result + + +def _append_coverage( + coverage: dict[str, Any], + rules_by_id: dict[str, dict[str, Any]], + rule_index_by_id: dict[str, int], + results: list[dict[str, Any]], +) -> None: + entries = coverage.get("entries") + if not isinstance(entries, list): + return + for entry in entries: + if not isinstance(entry, dict): + continue + kind = _OUTCOME_TO_KIND.get(str(entry.get("outcome", ""))) + if kind is None: + continue + rule_id = _coverage_rule_id(str(entry.get("risk_area", ""))) + if rule_id not in rules_by_id: + rule_index_by_id[rule_id] = len(rules_by_id) + rules_by_id[rule_id] = _build_coverage_rule( + rule_id, _string_value(entry.get("risk_area")) or "unspecified risk" + ) + results.append(_build_coverage_result(rule_id, rule_index_by_id[rule_id], kind, entry)) + + +def _coverage_invocation(coverage: dict[str, Any]) -> dict[str, Any]: + """``executionSuccessful: false`` stops a truncated run reading as a clean one.""" + completeness = coverage.get("completeness") + completeness = completeness if isinstance(completeness, dict) else {} + caveats = completeness.get("caveats") + caveats = caveats if isinstance(caveats, list) else [] + + invocation: dict[str, Any] = {"executionSuccessful": bool(completeness.get("complete", True))} + if caveats: + invocation["toolExecutionNotifications"] = [ + {"level": "warning", "message": {"text": str(caveat)}} for caveat in caveats + ] + return invocation + + # --------------------------------------------------------------------------- # Location handling # --------------------------------------------------------------------------- diff --git a/strix/report/state.py b/strix/report/state.py index 198601f8..06036fa3 100644 --- a/strix/report/state.py +++ b/strix/report/state.py @@ -13,7 +13,8 @@ from agents.usage import Usage from strix.config import codex from strix.config.loader import load_settings -from strix.core.paths import run_dir_for +from strix.core.paths import run_dir_for, runtime_state_dir +from strix.report.coverage import write_coverage from strix.report.pricing import resolve_litellm_model from strix.report.sarif import write_sarif from strix.report.usage import LLMUsageLedger @@ -237,6 +238,10 @@ class ReportState: remediation_steps: str | None = None, evidence: str | None = None, assumptions: str | None = None, + counterevidence: str | None = None, + confidence: str | None = None, + confidence_rationale: str | None = None, + severity_change_conditions: str | None = None, fix_effort: str | None = None, cvss: float | None = None, cvss_breakdown: dict[str, str] | None = None, @@ -245,6 +250,7 @@ class ReportState: cve: str | None = None, cwe: str | None = None, code_locations: list[dict[str, Any]] | None = None, + fix_verification: str | None = None, fix_pr_body: str | None = None, finding_class: str | None = None, dependency_metadata: dict[str, str] | None = None, @@ -278,6 +284,14 @@ class ReportState: report["evidence"] = evidence.strip() if assumptions: report["assumptions"] = assumptions.strip() + if counterevidence: + report["counterevidence"] = counterevidence.strip() + if confidence: + report["confidence"] = confidence.strip().lower() + if confidence_rationale: + report["confidence_rationale"] = confidence_rationale.strip() + if severity_change_conditions: + report["severity_change_conditions"] = severity_change_conditions.strip() if fix_effort: report["fix_effort"] = fix_effort.strip().lower() if cvss is not None: @@ -294,6 +308,8 @@ class ReportState: report["cwe"] = cwe.strip() if code_locations: report["code_locations"] = code_locations + if fix_verification: + report["fix_verification"] = fix_verification.strip() if fix_pr_body: report["fix_pr_body"] = fix_pr_body.strip() report["finding_class"] = (finding_class or "dynamic").strip().lower() @@ -459,12 +475,41 @@ class ReportState: {str(scan_results.get("recommendations", "")).strip()} """ + def _coverage_document(self) -> dict[str, Any] | None: + """Assemble the coverage record, or None when it can't be built. + + Coverage is a secondary artifact: a failure here must not cost the + caller its findings, so this swallows and logs rather than raising + into :meth:`_save_artifacts`. + """ + try: + from strix.report.coverage import build_coverage_document, read_agent_graph + from strix.tools.coverage.tools import get_coverage_entries + + return build_coverage_document( + run_record=self.run_record, + entries=get_coverage_entries(), + agent_graph=read_agent_graph(runtime_state_dir(self.get_run_dir())), + vulnerability_reports=self.vulnerability_reports, + exit_reason=self.scan_ended_exit_reason, + ) + except Exception: + logger.exception("coverage document build failed (non-fatal)") + return None + def _save_artifacts(self) -> None: """Write scan artifacts under ``run_dir``.""" run_dir = self.get_run_dir() try: run_dir.mkdir(parents=True, exist_ok=True) + coverage = self._coverage_document() + if coverage is not None: + try: + write_coverage(run_dir, coverage) + except OSError: + logger.exception("coverage.json write failed (non-fatal)") + if self.final_scan_result: write_executive_report(run_dir, self.final_scan_result) @@ -483,6 +528,7 @@ class ReportState: self.vulnerability_reports, tool_version=_strix_version(), repository_context=self._sarif_repository_context(), + coverage=coverage, ) except Exception: logger.exception("SARIF emit failed (non-fatal; CSV/MD unaffected)") diff --git a/strix/report/writer.py b/strix/report/writer.py index 2cdbae22..7ca28e29 100644 --- a/strix/report/writer.py +++ b/strix/report/writer.py @@ -107,7 +107,7 @@ def read_run_record(run_dir: Path) -> dict[str, Any]: def write_run_record(run_dir: Path, run_record: dict[str, Any]) -> None: - _atomic_write_text( + atomic_write_text( run_record_path(run_dir), json.dumps(run_record, ensure_ascii=False, indent=2, default=str), ) @@ -133,7 +133,7 @@ def write_vulnerabilities( new_reports = [r for r in vulnerability_reports if r["id"] not in saved_vuln_ids] for report in new_reports: - _atomic_write_text( + atomic_write_text( vuln_dir / f"{report['id']}.md", render_vulnerability_md(report), ) @@ -158,9 +158,9 @@ def write_vulnerabilities( "file": f"vulnerabilities/{report['id']}.md", }, ) - _atomic_write_text(csv_path, csv_buf.getvalue()) + atomic_write_text(csv_path, csv_buf.getvalue()) - _atomic_write_text( + atomic_write_text( run_dir / "vulnerabilities.json", json.dumps(vulnerability_reports, ensure_ascii=False, indent=2, default=str), ) @@ -175,7 +175,8 @@ def write_vulnerabilities( return len(new_reports) -def _atomic_write_text(path: Path, payload: str) -> None: +def atomic_write_text(path: Path, payload: str) -> None: + """Write *payload* to *path* via a sibling temp file and an atomic rename.""" path.parent.mkdir(parents=True, exist_ok=True) with tempfile.NamedTemporaryFile( mode="w", @@ -220,6 +221,8 @@ def render_vulnerability_md(report: dict[str, Any]) -> str: # noqa: PLR0912, PL metadata.append(("Advisory CVSS", advisory_cvss)) if dep_meta.get("contextual_cvss_vector"): metadata.append(("Contextual CVSS Vector", dep_meta["contextual_cvss_vector"])) + if report.get("confidence"): + metadata.append(("Confidence", str(report["confidence"]).title())) if report.get("fix_effort"): metadata.append(("Fix Effort", str(report["fix_effort"]).title())) for label, value in metadata: @@ -241,6 +244,21 @@ def render_vulnerability_md(report: dict[str, Any]) -> str: # noqa: PLR0912, PL lines.append(str(report["impact"])) lines.append("") + if report.get("counterevidence"): + lines.append("## Counterevidence\n") + lines.append(str(report["counterevidence"])) + lines.append("") + + if report.get("confidence_rationale"): + lines.append("## Confidence Rationale\n") + lines.append(str(report["confidence_rationale"])) + lines.append("") + + if report.get("severity_change_conditions"): + lines.append("## What Would Change This Severity\n") + lines.append(str(report["severity_change_conditions"])) + lines.append("") + if report.get("technical_analysis"): lines.append("## Technical Analysis\n") lines.append(str(report["technical_analysis"])) @@ -299,6 +317,11 @@ def render_vulnerability_md(report: dict[str, Any]) -> str: # noqa: PLR0912, PL lines.append(str(report["remediation_steps"])) lines.append("") + if report.get("fix_verification"): + lines.append("## Fix Verification\n") + lines.append(str(report["fix_verification"])) + lines.append("") + if report.get("assumptions"): lines.append("## Assumptions\n") lines.append(str(report["assumptions"])) diff --git a/strix/runtime/caido_bootstrap.py b/strix/runtime/caido_bootstrap.py index 0b9ad5b1..a9c7c82a 100644 --- a/strix/runtime/caido_bootstrap.py +++ b/strix/runtime/caido_bootstrap.py @@ -15,12 +15,10 @@ import json import logging from typing import TYPE_CHECKING -from caido_sdk_client import Client, TokenAuthOptions -from caido_sdk_client.types import CreateProjectOptions - if TYPE_CHECKING: from agents.sandbox.session import BaseSandboxSession + from caido_sdk_client import Client logger = logging.getLogger(__name__) @@ -87,20 +85,28 @@ async def bootstrap_caido( container_url: str, ) -> Client: """Connect to the in-container Caido sidecar and select a fresh project.""" + # The Caido SDK (and its generated GraphQL schema) is slow to import and is + # only needed once a sandbox is actually being bootstrapped, so it is + # imported here rather than at module scope. + from caido_sdk_client import Client, TokenAuthOptions + from caido_sdk_client.types import CreateProjectOptions + logger.info("Bootstrapping Caido client (host=%s, container=%s)", host_url, container_url) access_token = await _login_as_guest(session, container_url=container_url) client = Client(host_url, auth=TokenAuthOptions(token=access_token)) - await client.connect() - try: + # connect() is inside the guard as well: a cancellation there (scan + # teardown while the bootstrap is still in flight) would otherwise + # leave the half-connected transport behind. + await client.connect() project = await client.project.create( CreateProjectOptions(name="sandbox", temporary=True), ) await client.project.select(project.id) except BaseException: - # The connected client never reaches the session bundle if project + # The client never reaches the session bundle if connect or project # setup fails, so close it here to avoid leaking the transport. with contextlib.suppress(Exception): await client.aclose() diff --git a/strix/runtime/caido_handle.py b/strix/runtime/caido_handle.py new file mode 100644 index 00000000..5b1d1c74 --- /dev/null +++ b/strix/runtime/caido_handle.py @@ -0,0 +1,60 @@ +"""Handle for a Caido bootstrap running concurrently with the scan start. + +The Caido sidecar login + project setup costs a couple of seconds of +guest-side polling, and nothing needs the client until the first proxy +tool call (or the first traffic poll). :class:`CaidoBootstrapHandle` +wraps the in-flight bootstrap task so session bring-up can return as +soon as the container is up; consumers resolve the client at first use. +""" + +from __future__ import annotations + +import asyncio +import contextlib +import logging +from typing import TYPE_CHECKING + + +if TYPE_CHECKING: + from caido_sdk_client import Client + + +logger = logging.getLogger(__name__) + + +class CaidoBootstrapHandle: + """Resolves to the connected Caido client once the bootstrap finishes. + + A failed bootstrap is surfaced (once) to every ``get()`` caller as the + original exception; proxy tools degrade to their "client unavailable" + result instead of the failure killing the scan at bring-up. + """ + + def __init__(self, task: asyncio.Task[Client]) -> None: + self._task = task + + async def get(self) -> Client: + """Wait for the bootstrap and return the client. + + Shielded so one caller's cancellation (e.g. a tool timeout) does not + cancel the shared bootstrap for everyone else. + """ + return await asyncio.shield(self._task) + + def peek(self) -> Client | None: + """Return the client if the bootstrap already finished cleanly.""" + if self._task.done() and not self._task.cancelled() and self._task.exception() is None: + return self._task.result() + return None + + async def aclose(self) -> None: + """Cancel an in-flight bootstrap or close the finished client.""" + if not self._task.done(): + self._task.cancel() + with contextlib.suppress(asyncio.CancelledError, Exception): + await self._task + return + client = self.peek() + if client is not None: + with contextlib.suppress(Exception): + await client.aclose() diff --git a/strix/runtime/session_manager.py b/strix/runtime/session_manager.py index 62204385..e8b3a279 100644 --- a/strix/runtime/session_manager.py +++ b/strix/runtime/session_manager.py @@ -2,6 +2,7 @@ from __future__ import annotations +import asyncio import logging import os import sys @@ -15,6 +16,7 @@ from strix.config import load_settings from strix.core.paths import run_dir_for, runtime_state_dir from strix.runtime.backends import backend_supports_bind_mounts, get_backend from strix.runtime.caido_bootstrap import bootstrap_caido +from strix.runtime.caido_handle import CaidoBootstrapHandle if TYPE_CHECKING: @@ -333,10 +335,19 @@ async def create_or_reuse( host_caido_url = f"{scheme}://{caido_endpoint.host}:{caido_endpoint.port}" logger.debug("Caido host endpoint resolved: %s", host_caido_url) - caido_client = await bootstrap_caido( - session, - host_url=host_caido_url, - container_url=container_caido_url, + # The Caido login + project setup polls the guest for a couple of seconds + # and nothing needs the client before the first proxy tool call, so it + # runs concurrently with the rest of scan start; consumers resolve the + # handle at first use (see CaidoBootstrapHandle). + caido_client = CaidoBootstrapHandle( + asyncio.create_task( + bootstrap_caido( + session, + host_url=host_caido_url, + container_url=container_caido_url, + ), + name=f"caido-bootstrap-{scan_id}", + ) ) bundle = { diff --git a/strix/skills/__init__.py b/strix/skills/__init__.py index 0adf3d99..8a9a5acd 100644 --- a/strix/skills/__init__.py +++ b/strix/skills/__init__.py @@ -16,7 +16,7 @@ logger = logging.getLogger(__name__) _FRONTMATTER_PATTERN = re.compile(r"^---\s*\n(?P.*?)\n---\s*\n", re.DOTALL) -_INTERNAL_SKILL_CATEGORIES: frozenset[str] = frozenset({"scan_modes", "coordination"}) +_INTERNAL_SKILL_CATEGORIES: frozenset[str] = frozenset({"scan_modes", "coordination", "analysis"}) _ROOT_SKILL_CATEGORY = "root" _EXTRA_SKILL_DIRS: list[Path] = [] diff --git a/strix/skills/analysis/counterevidence.md b/strix/skills/analysis/counterevidence.md new file mode 100644 index 00000000..fd90a251 --- /dev/null +++ b/strix/skills/analysis/counterevidence.md @@ -0,0 +1,185 @@ +--- +name: counterevidence +description: Closure discipline for security findings — what counts as proof of safety, what does not, and how to record an unresolved candidate instead of silently dropping it +--- + +# Counterevidence and Closure Discipline + +Proving a bug is real is only half the job. The other half is proving a +candidate is *not* real — and that half is where both false positives and +false negatives come from. + +This skill governs how you close a candidate. It applies to every +candidate you open, whether it came from a scanner, a code read, a crawl, +or a hunch. + +## Three Closure States + +Every candidate you open ends in exactly one of these. There is no fourth +state, and "I moved on" is not one of them. + +**1. `confirmed`** — you have a working PoC or, in white-box, a complete +source → control → sink → impact trace plus evidence the path is +reachable. File it with `create_vulnerability_report`. + +**2. `ruled_out`** — you can name the **specific control** that makes the +code safe, at a specific location, and you have checked that the control +actually runs on the attacker's path. "Named control" means you can +complete this sentence with concrete detail: *"This is safe because +`` at `` `` before +``, on every path an attacker can reach."* If you cannot complete +that sentence, you are not in `ruled_out`. + +**3. `open_proof_gap`** — the candidate is plausible, you could not +confirm it, and you also could not name a control that rules it out. This +is a legitimate, expected outcome. Record it with +`record_coverage(outcome="needs_follow_up")`, carry it up in +`agent_finish(open_items=[...])`, and reflect it in `counterevidence` / +`confidence_rationale` if you file a related report. Do **not** convert +it to `ruled_out` to tidy up your worklist. + +The failure mode this exists to prevent: an agent reads code, feels +uncertain, and quietly closes the candidate. That is an +`open_proof_gap` being mislabelled as `ruled_out`, and it is how real +vulnerabilities get missed. + +## What Does NOT Rule Out a Candidate + +Each of these is a common, plausible-sounding reason to drop a candidate. +None of them is sufficient on its own. + +**Generic trust in a library or helper.** "It uses a well-known +sanitizer / the framework escapes this / the ORM handles it" is not +counterevidence. You must confirm *that* call, with *those* arguments, in +*that* context. Escaping helpers are context-specific: an HTML escaper +does nothing in a JS or attribute context, a SQL identifier quoter is not +a value quoter, and a path joiner is not a containment check. + +**A control that runs on a different path.** Middleware, a decorator, or +a guard that protects the common route does not protect a sibling route, +an internal caller, a batch/async job, or an admin alias that reaches the +same sink. Check the specific path. + +**A control that runs at the wrong time.** Validation *before* a +redirect, canonicalization *after* a path is already materialized, a +containment check *after* extraction, or an ownership check *after* the +object was already fetched and returned — these are ordering bugs, not +controls. Establish that the control runs before the dangerous effect. + +**A control that can fail open.** Hardening flags set inside a +`try`/`except` that swallows failures, a parser feature that a caller can +override, a factory or config object supplied by the caller, or a +allow-list that is empty by default — all leave the candidate alive. + +**A safe sibling.** If one call site is correctly guarded, that says +nothing about the other call sites of the same helper. Never let a safe +instance close a vulnerable one, and never collapse multiple instances +into one candidate just because they share a root cause — each reachable +instance stands or falls on its own. + +**Missing information.** "I could not find a caller", "I could not tell +if this is deployed", "I could not determine whether this route is +exposed", "I could not stand up the service" — every one of these is an +`open_proof_gap`, not proof of safety. Missing evidence is missing +evidence; it is not evidence of absence. + +**Difficulty.** "The build failed", "it needs credentials I don't have", +"the service mesh isn't available" are reasons to record a proof gap and +move on to the next candidate — not reasons to mark it clean. Do not let +one hard environment setup consume the budget you need for sibling +candidates. + +**Operator configurability.** "An operator *could* configure a filter", +"this is a documented feature", "it's off by default" are not controls. +What ships and what is reachable is what matters. + +**Being internal.** Internal-only, admin-only, or authenticated-only +reduces severity — it does not make the finding unreal. Downgrade it; +do not delete it. + +## Recording Closure + +Closure is only useful if it is written down. Every surface you assess +gets a `record_coverage` entry: + +- `confirmed` → outcome `reported`, once the report is filed. +- `ruled_out` → outcome `ruled_out`, with the named control in + `evidence`. If you cannot name it, this is not `ruled_out`. +- `open_proof_gap` → outcome `needs_follow_up`, with the specific gap in + `evidence`. +- Tested thoroughly with nothing to show for it → `no_issue_found`. +- The risk cannot apply to this surface at all → `not_applicable`, with + the reason. + +A scan that records only findings cannot tell the reader what was +reviewed and cleared, which makes every clean area indistinguishable +from an unvisited one. + +Closure is not permanent. The ledger is shared across every agent, and +a surface someone left at `needs_follow_up` is an invitation: if you +had the credentials, the running service, or the reachability proof +they lacked, move their entry with `update_coverage` rather than +recording a parallel one. This runs both ways — a `ruled_out` whose +named control does not cover the path you just found goes back to +`reported` or `needs_follow_up`, with what changed in `evidence`. The +previous state is kept as history, so correcting the record costs +nothing and leaving it wrong costs a finding. + +## What DOES Rule Out a Candidate + +- You executed the attack and it demonstrably failed, and you understand + *why* it failed (not just that the response was a 403). +- You can point at the control, at a location, and show it runs on every + attacker-reachable path to the sink, before the effect, without a + fail-open branch. +- The sink is not actually dangerous in this context, and you can say + what makes it inert. +- The input is not actually attacker-controlled, and you traced it to a + trusted origin rather than assuming it. + +Negative controls make a `ruled_out` much stronger: send the payload that +*should* work if the bug were real, and show it is blocked, while a +benign variant succeeds. That distinguishes "the control works" from "the +endpoint is broken/unreachable for unrelated reasons". + +## Before You File a Report + +Run this pass on every finding before calling +`create_vulnerability_report`: + +1. **Argue the other side.** Spend real effort building the strongest + case that this is *not* exploitable, or not as severe as you think. + Look for the guard you might have missed, the deployment context that + constrains it, the precondition you assumed. +2. **Record what you found** in `counterevidence`. If you found a real + constraint, say what it is and why it does not neutralize the finding. + If you genuinely found nothing, say what you checked — "no input + validation, WAF, or authorization check was found on this path; tested + both authenticated and unauthenticated" — not just "none". +3. **Set `confidence` honestly.** A working PoC against a live target is + `high`. A complete static trace you could not execute is at best + `medium`, and `confidence_rationale` must name the gap. Do not inflate + confidence to make a finding look better; an accurate `medium` is far + more useful to the reader than a `high` that does not survive triage. +4. **State what would move the severity** in `severity_change_conditions` + — the one concrete piece of evidence that would raise or lower it + (e.g. "confirmation that this route is exposed to unauthenticated + internet traffic would raise this to critical"). + +## Reporting an Unconfirmed Candidate + +Dynamic proof is the standard. But when you have a complete +source → control → sink → impact trace and runtime reproduction is +genuinely out of reach (no credentials, unavailable internal services, a +build that cannot run in the sandbox), a static-only finding is still +reportable — at `confidence: medium` or `low`, with the missing runtime +proof named explicitly in `confidence_rationale`. + +What is **not** acceptable is a scanner hit with no trace, a "this +pattern is usually dangerous" claim, or a finding where you never +identified the attacker-controlled input. Those are not proof gaps, they +are non-findings. + +If you are unsure whether a candidate clears this bar: it clears it if +you can name the input, the path, the missing or broken control, and the +effect. It does not if any one of those is a guess. diff --git a/strix/skills/analysis/fix_verification.md b/strix/skills/analysis/fix_verification.md new file mode 100644 index 00000000..6e107fab --- /dev/null +++ b/strix/skills/analysis/fix_verification.md @@ -0,0 +1,129 @@ +--- +name: fix_verification +description: How to verify a proposed code fix before shipping it — the ordered gates, what disqualifies a fix, and when to withhold the suggestion instead +--- + +# Fix Verification + +When you attach `fix_before` / `fix_after` to a code location, you are not +writing advice. You are writing a suggestion block that a reviewer can +apply with one click, straight into their codebase. An unverified fix is +worse than no fix: it converts your uncertainty into their merged commit. + +This skill covers what you must establish before that happens. + +## Judge in This Order + +1. The current state is correctly classified — vulnerable, already safe, + or unproven. +2. The fix completely closes the broken security boundary. +3. Legitimate behavior and compatibility are preserved. +4. The relevant repository checks pass. +5. The change follows the repository's own conventions. +6. The patch contains only what properties 1–5 require. + +**Never trade an earlier property for a later one.** A smaller, tidier, +more idiomatic patch that leaves the boundary open is a failure. Minimal +means *the smallest repository-native change that satisfies everything +above it* — not the fewest lines. + +## Before You Edit + +Establish these from the code, not from assumption: + +- The source → sink path or the specific broken control. +- The attacker-controlled input and the preconditions it needs. +- **The security invariant** — state it in one sentence. "Only the owning + tenant may read this record." "The extracted path must stay inside the + destination directory." If you cannot state the invariant, you cannot + tell whether your patch enforces it. +- The narrowest place that invariant can be enforced. +- The legitimate behavior, public APIs, and error semantics that must + survive the change. +- The repository's existing helpers and precedents for this kind of + control. Reach for the codebase's own validator before inventing one. + +## The Verification Gates + +Run these **in order**. A failure at any gate disqualifies the fix — +revise the patch or withhold it. Do not compensate for a failed gate by +making the diff smaller or the write-up longer. + +**1. Applicability.** Read the final diff. Confirm it contains nothing +unrelated, that `fix_before` still matches the file character-for- +character, and that `start_line`/`end_line` still cover exactly those +lines. Run the narrowest syntax / import / type check available. + +**2. Security closure.** Re-run the original PoC against the patched +code. If you cannot execute it, re-trace source → control → sink through +the *patched* source and state precisely which step now fails and why. +"The fix adds validation" is not closure; "the fix rejects `../` before +the path reaches `open()`, and `open()` is the only sink on this path" is. + +**3. Bypass review.** Re-read the finding and the diff *without* leaning +on the reasoning that produced the patch — you are looking for what that +reasoning missed. Trace the changed branches from their direct callers. +Check equivalent sinks and sibling call sites of the same helper. Try at +least one alternate malicious input class: different encoding, different +content type, a null byte, a unicode homoglyph, a nested/doubled +payload, a different HTTP verb. A control that catches your one payload +and nothing else has not closed the boundary. + +**4. Preserved behavior.** Exercise the legitimate case through the same +boundary. Confirm the APIs, error semantics, and compatibility +constraints you recorded still hold. A fix that breaks the feature will +be reverted, which means the vulnerability comes back. + +**5. Repository checks.** Run the focused tests covering the changed +lines, then the owning package's tests, then the applicable formatter, +linter, and type checker. Use the repository's own commands. + +Where practical, confirm the check would **fail if the security change +were removed**. A test that passes both with and without the patch is +proving nothing. + +## What Disqualifies a Fix + +- It closes your specific payload but not the input class. +- It sanitizes at the wrong layer — after the value was already used, or + in a helper that other callers bypass. +- It relies on a caller passing the right flag, or on a config the + operator has to set. +- It fails open: the new check sits inside a `try`/`except` that swallows + the failure, or returns "allowed" on error. +- It weakens authentication, authorization, tenant isolation, input + validation, sandboxing, or logging to make something else pass. Never + do this. +- It silently accepts, truncates, or reinterprets unsafe state instead of + rejecting it. +- It drags in unrelated refactors, sibling findings, or architectural + redesign. + +## Withholding the Fix + +If you cannot pass the gates, that is a legitimate outcome — say so +rather than shipping a guess. Drop `fix_after` from the location, leave +it informational, and put the remediation in prose in +`remediation_steps` instead. State in `fix_verification` exactly which +gate you could not clear and what was missing: the command that failed, +the service you could not start, the decision that needs a human. + +Withhold and explain when: + +- The complete fix depends on an unresolved product or public-API + compatibility decision. +- The invariant cannot be enforced without cross-subsystem changes you + cannot validate. +- You could not establish that the vulnerable path is real in the + current checkout. Do not patch an adjacent weakness as a consolation + prize, and do not add speculative defense-in-depth to a path you never + proved was reachable. + +## Recording It + +Everything above goes in `fix_verification`, which is required whenever +any location carries a `fix_after`. Write the actual commands and their +results, grouped by gate, and mark every gate you could only reason +about — rather than execute — as an explicit gap. Do not hide proof +gaps; a reviewer who knows gate 5 was skipped can run it themselves, but +one who was told it passed cannot. diff --git a/strix/skills/analysis/severity_calibration.md b/strix/skills/analysis/severity_calibration.md new file mode 100644 index 00000000..97ebe84f --- /dev/null +++ b/strix/skills/analysis/severity_calibration.md @@ -0,0 +1,130 @@ +--- +name: severity-calibration +description: Qualitative rubric for what actually deserves high/critical severity, and an acceptance checklist to apply before rating a finding +--- + +# Severity Calibration + +CVSS gives you a number once you have chosen the metrics. This skill is +about choosing them honestly — deciding what class of issue genuinely +belongs at each severity before you fill in the vector. + +Calibrate severity **after** you have established reachability and run +the counterevidence pass, never before. Severity is a conclusion, not an +opening position. + +## The Test That Matters + +Before rating anything high or critical, ask: + +> Would this be accepted as high/critical in serious audit or bug bounty +> triage, by a firm putting its reputation on the line? + +If the honest answer is "only if you accept a chain of assumptions", it +is not high. Rate the weakness you proved, not the worst case you can +imagine reaching from it. + +## Critical + +Reserve for findings where a realistic attacker gets decisive control or +mass data access, with evidence: + +- Unauthenticated remote code execution, or command/code execution + reachable by any user on internet-exposed surface. +- Full authentication bypass, or trivially forgeable authentication + (accepted unsigned tokens, `alg: none`, signature not verified). +- Mass extraction of other users' or other tenants' sensitive data. +- Compromise of signing keys, control-plane credentials, or credentials + granting broad infrastructure access. +- Complete cross-tenant isolation failure in a multi-tenant system. + +Factors that push a high up to critical: no authentication required, +internet reachable, zero user interaction, wormable/self-propagating, +or the impact spans all tenants rather than one. + +## High + +- Authenticated RCE, or RCE requiring a common non-privileged role. +- Privilege escalation crossing a real trust boundary (user → admin, + tenant → tenant, read → write on protected objects). +- Object-level authorization failures exposing or modifying other users' + sensitive data at scale. +- SQL injection or equivalent injection reaching real data. +- SSRF that demonstrably reaches internal services, cloud metadata, or + credentials. +- Sensitive credential or PII exposure that an attacker can actually + reach. + +## Medium + +- Stored XSS in a limited context, or reflected XSS requiring user + interaction. +- CSRF on a meaningful state-changing action. +- Authorization gaps on lower-value objects. +- Information disclosure that materially aids a further attack. +- Findings whose high-impact version is blocked by a real constraint you + confirmed (internal-only exposure, a required privileged role, a + narrow precondition). + +## Low / Informational + +- Missing security headers, cookie flag issues, verbose errors. +- Self-XSS, or XSS requiring the victim to paste a payload. +- Open redirect with no credential or token leakage. +- Rate-limiting and enumeration issues without a demonstrated impact. +- Defense-in-depth gaps with no reachable exploitation path. + +## Usually NOT High or Critical + +These are over-rated constantly. Each needs unusual, demonstrated +circumstances to exceed medium: + +- Self-XSS and clickjacking on non-sensitive actions. +- Missing headers, cookie attributes, TLS configuration nits. +- Open redirect on its own. +- Theoretical memory-safety issues with no reachable attacker input. +- "Could matter if chained with several unproven assumptions." +- Anything already requiring admin, shell, or physical access — if the + attacker already has that, the finding adds little. +- Session-management weaknesses that require the attacker to already + hold a victim secret (a stolen cookie, an intercepted link). The + acquisition of that secret is not free; unless the *same* finding shows + how to obtain it, this is usually low/medium. +- Enumeration that only confirms an account, domain, or version exists. + +## Downgrade, Don't Delete + +A finding that turns out to be constrained gets a lower severity — not a +silent drop. Internal-only reachability, a required privileged role, or a +narrow precondition are all reasons to reduce severity and say so in the +report. They are not reasons to withhold the finding. + +Equally: missing evidence about deployment or exposure lowers your +**confidence**, not the severity floor. Do not treat "I could not confirm +this is internet-facing" as if it were "this is internal-only". + +## Acceptance Checklist for High / Critical + +All of these must be true. If any is not, drop a level: + +- [ ] The attack path is realistic and in scope — not a lab-only + condition, not dependent on an unproven prior compromise. +- [ ] The attacker position required is one an attacker can actually + obtain, and the CVSS `privileges_required` / `attack_complexity` + reflect that honestly. +- [ ] The impact is material and demonstrated, not asserted — `C:H` / + `I:H` mean proven broad or systemic read/write, not one record. +- [ ] The counterevidence pass found no constraint that meaningfully + limits exploitation, or you have explained why the constraint does + not hold. +- [ ] You have concrete evidence of reachability, not an assumption + about how the application is deployed. +- [ ] You would defend this rating in a client debrief. + +## Output + +Severity still comes from the CVSS vector — this rubric decides which +vector is honest. When your intuitive rating and the computed CVSS +severity disagree, re-examine the metrics: usually one of +`privileges_required`, `attack_complexity`, or the impact triad was set +optimistically. Fix the metric, do not override the result. diff --git a/strix/skills/analysis/source_aware_discovery.md b/strix/skills/analysis/source_aware_discovery.md new file mode 100644 index 00000000..ef13cde8 --- /dev/null +++ b/strix/skills/analysis/source_aware_discovery.md @@ -0,0 +1,211 @@ +--- +name: source_aware_discovery +description: Enumeration discipline for reading code — which locations to keep as separate candidates, which safe siblings prove nothing, and the per-family sweeps that are routinely missed +--- + +# Source-Aware Discovery + +Reading code for bugs fails in two directions. You collapse many real +instances into one candidate and under-report, or you stop at the loudest +issue in a file and never sweep the family around it. + +This skill is about *what to enumerate*, not how to exploit it — the +vulnerability-class skills cover exploitation. Discovery decides +plausibility and preserves evidence; severity comes later. + +## Instance Discipline + +**One root cause is not one candidate.** If a dangerous helper has six +call sites and four are independently reachable, that is four candidates +— not one "the helper is unsafe" note. Each needs its own source, its own +closest control, and its own line. A reader has to be able to fix them +individually. + +**Do not collapse distinct proof tuples that share a route.** Command +execution, SSRF, path/file write, parser abuse, template execution, and +authorization bypass on the same endpoint are separate findings when the +sink, the broken control, or the impact differ. Sharing a URL is not +sharing a bug. + +**Keep the wrapper and the shared helper both visible.** When the path +crosses from an entrypoint into a shared sink or control, record both: +the wrapper proves reachability, the helper is where the fix goes. Losing +either one makes the finding unactionable. + +**A safe sibling is a negative control for itself and nothing else.** A +correctly-parameterized query three lines above a concatenated one proves +the developer knew better, not that the concatenated one is safe. + +**Label your locations.** Mark each as entrypoint, root control, sink, or +concrete implementation. Multi-location findings that don't say which +line is which force the reader to re-derive your analysis. + +## Where the Real Control Lives + +The most common discovery error is anchoring on the dramatic sink and +missing the reusable broken control behind it. + +- When a resolver, allowlist, denylist, class filter, or guard is the + thing that's wrong, that line is the candidate. The transport that + reaches it proves reachability — it doesn't replace it. +- When the same filter or resolver is **duplicated** across core, server, + client, plugin, or import packages, each copy is its own candidate. + Fixing one leaves the others live. +- In a concrete strategy / handler / converter / operation subclass, read + the specialized helper, not just the top-level `handle` / `apply` / + `perform` override. If the subclass splits, filters, canonicalizes, or + rebuilds attacker input before delegating to a shared evaluator, the + subclass line is the root control. +- Branch-specific transforms — append, wildcard, fallback, copy/move + `from`, default-value, type-resolution — routinely bypass or narrow the + shared validator. Keep the branch predicate as its own location. A + finding on the shared helper does not close them. + +## Family Sweeps + +When you find one instance of these, sweep the whole family before +closing it out. + +**Deserialization / object construction.** Enumerate every registered +codec, deserializer, converter, and container handler — array, +collection, map, bean, enum, throwable, generic object. A top-level +parser-config finding does not close a concrete codec that recursively +re-invokes parsing or type resolution on attacker data. + +**XML / parsers.** Enumerate parser factories, readers, converters, +validators, transformers, and unmarshal entrypoints independently. +Hardening that is best-effort does not suppress anything: a +secure-processing flag alone, a `setFeature` call whose failure is +swallowed or logged, or a safe default factory all leave +caller-supplied factories and converter paths open. + +**Object models for untrusted formats.** Sweep the primitive and +container helpers that traverse or convert attacker-controlled documents +— `to*Array`, `get*`, numeric conversion, `parse*`, iterators, size +accessors, unchecked casts, allocation loops. Missing type, size, shape, +recursion, or numeric guards here cause type confusion, unbounded +traversal, and resource exhaustion. These sweeps create candidate rows, +not automatic findings — promote one only when malformed input plausibly +reaches it and the missing guard has a concrete security effect. + +**Archive extraction and import/restore.** Keep four things visible per +operation: the member name, the destination join, the containment check, +and the extract/write call. A later copy step, manifest gate, or UUID +check does not close it if the write already happened. "The stdlib +normalizes paths" is not containment evidence — the code must show +per-entry containment *before* the write, including symlink, hardlink, +and recursive-copy paths. The write does not need to escape the app root +to matter: overwriting config, a peer tenant's directory, or a shared +imported subtree is still file impact. + +**Path-sensitive filesystem operations.** Enumerate each exported +operation separately — restore, import, export, backup, copy, move, +download, open, key/config fetch. For each, keep the decode, join, +normalize, canonicalize, strip-prefix, extension-check, and +destination-selection lines candidate-visible. + +**Static-file and resource serving.** The candidate is the line that +decides whether an attacker-chosen path is allowed: the allowlist, the +matcher, the canonicalization, the URL decode, the resource selection. Do +not substitute a safer sibling handler for the vulnerable legacy one. + +**Outbound requests.** For URL importers, webhook and callback clients, +preview/render fetchers, `downloadFrom`-style helpers, and +redirect-following clients: enumerate each attacker-controlled +destination and its closest allow/deny/redirect control. Do not drop the +row because the fetch is an intended feature, because the filter is +operator-configured or empty by default, or because it only runs +pre-request. + +**Command and action runners.** Enumerate every attacker-controllable +argument type and execution mode before you call command injection +covered. Type-safety maps, unsafe-type denylists, template substitution, +shell wrapping, direct-exec branches, and API-side argument ingestion are +each separate controls. A denylist covering three types says nothing +about the no-op typecheck branches that still render into a shell string. +Frontend widget constraints are not controls at all. + +**Query APIs (SQL, NoSQL, LDAP, XPath, and friends).** Do not suppress +because the endpoint is already user-facing, because it's an insert +rather than a read, or because a later business check appears to limit +the effect. If attacker input reaches query syntax or selector operators, +carry it forward and record the later check as counterevidence. + +**Structured patch / edit APIs.** For JSON Patch, document edits, and +config mutations, enumerate the request-selected operations — add, +remove, replace, move, copy, test. Operation-specific path transforms, +array-append handling, and wildcard selection stay candidate-visible when +they feed a shared evaluator or binder. + +**Authentication state machines.** The candidate is the line that +installs or reuses a principal, credential, token, issuer, or protocol +state *after* a transition — pre-auth to authenticated, TLS upgrade, +redirect, assertion consumption, IdP handoff. Missing rebind or +reauthentication at that seam authenticates the wrong identity. + +**SSO / SAML / federation.** Keep response and assertion validators +distinct from generic claims authorizers and from service-method +authorization; they fail differently. Include the lines doing assertion +selection, list indexing, DOM access, node cloning, signed-object lookup, +subject confirmation, recipient, audience, destination, ACS URL, and +issuer binding — each decides *which* assertion is trusted. + +The signature failure to watch for: a validation loop or a +`foundValid`-style flag, followed by a **separate** fixed-index, +first-element, clone, re-serialization, or return path. Treat that later +selection line as the broken control until you have proven the validated +object and the consumed object are byte-identical and equally bound. This +is the validated-vs-consumed mismatch, and it is invisible if you only +read the validator. + +**Realms and authenticators.** Enumerate the concrete implementations — +LDAP, Kerberos, PAM, SAML, OAuth/OIDC, custom realms — before promoting a +generic HTTP auth finding. In multi-step or TLS-upgraded binds, keep the +bind/rebind and credential-installation line visible. + +**Self-service update routes.** Include the guard that compares the +requested object against the persisted one. Missing checks on +security-sensitive scalars and collection aliases let a user change their +own identity, roles, group membership, tenancy, or account-recovery +properties. + +**Protocol utility code.** In protocol-heavy repositories, read the +version, capability, feature, and negotiation helpers even when the +obvious candidates are REST and admin routes. Look for `Version`, +`versionCompare`, `Capability`, `Feature`, `Negotiation`, and the +comparator methods around them — downgrade and confusion bugs live there, +and nobody looks. + +**Public webhook / status / callback endpoints.** Enumerate these +independently from nearby credential bugs whenever they read protected +objects, trigger jobs, or mutate protected state. + +## Cross-Boundary Inputs + +In frameworks and libraries, stored client, tenant, application, IdP, +exception, and imported-configuration values are attacker-controlled when +they are later rendered, evaluated, parsed, or used for authorization — +provided there is a plausible runtime path from some boundary. Do not +suppress just because the writer lives outside this repository. That +requires evidence the value is trusted-only in normal deployments, not an +assumption. + +Similarly, do not suppress a high-impact candidate because the API is +deprecated, opt-in, or documented as dangerous. Record that as a +precondition and keep the candidate — shipped code with a bypassable +control is shipped code. + +## The Finding Bar + +Worth opening a candidate: authorization bypass, confused deputy, SSRF, +path traversal, injection with a real sink, cross-tenant exposure, +sensitive state change without enforcement, sandbox or trust-boundary +escape. + +Not worth it: "this could use more validation" with no path, style and +maintainability complaints, and cosmetic variants of a candidate you +already opened. + +Keep reading until no distinct plausible candidate remains — then record +what you swept with `record_coverage`, including the families that came +back clean. diff --git a/strix/skills/coordination/root_agent.md b/strix/skills/coordination/root_agent.md index 778e6d87..84a74faa 100644 --- a/strix/skills/coordination/root_agent.md +++ b/strix/skills/coordination/root_agent.md @@ -25,6 +25,20 @@ Before spawning agents, analyze the target from the scan config/scope and any pr 3. **Determine approach** - blackbox, greybox, or whitebox assessment 4. **Prioritize by risk** - critical assets and high-value targets first +## Establish the Threat Model + +Every scan needs one shared answer to "who is the attacker here, and what are they attacking" — black-box or white-box. Without it, five agents derive five different answers and their findings cannot be reconciled. Call `get_threat_model` on the target (a host, a URL, or a repository path) before you spawn hunters; if nothing is cached, derive one and persist it with `save_threat_model`. It is cached per target, so a later scan of the same host or tree reads it back instead of paying for it twice, and a model written from source is read back by an agent testing the deployment. + +**When the target includes a repository**, derive it up front: the code tells you the boundaries, entrypoints, and controls before you send a single request. + +**Black-box, the ordering inverts.** You cannot model a target you have not seen, so recon comes first: spawn reconnaissance, and write the model from what it found — the hosts and ports that answered, the technology fingerprints, the authentication and session model, the roles and tenants you can distinguish, the endpoints and parameters enumerated. Then spawn the hunters against that model. Do not stall the scan waiting for a perfect picture and do not skip the step because the picture is partial: mark what is inferred rather than observed and let it be corrected. A black-box model that says "admin panel at `/admin` appears to be IP-restricted — unverified" is worth far more than no model, because it tells the next agent exactly what to go check. + +Either way you write it with the least information anyone on this scan will ever have, so expect it to be wrong somewhere. Subagents correct it with `amend_threat_model`, which appends an attributed addendum instead of overwriting — expect many of these on a black-box run, as authenticating, pivoting between roles, and reaching internal surfaces is exactly what turns inference into fact. Read the amendments back before you write the final report: an agent telling you a boundary you called trusted is attacker-reachable is a finding about your model, not a note. Only call `save_threat_model` again to fold accumulated amendments into the body; it replaces the document and clears them. + +## Reconcile Coverage Before Finishing + +Coverage entries are shared and mutable. Before `finish_scan`, list the `needs_follow_up` rows: each one is either work you still owe or a row somebody already resolved without updating. Assign the former to a subagent and have it call `update_coverage` on the existing entry rather than recording a second one — a stale open item sitting next to its own resolution is worse than either alone. + ## Agent Architecture Structure agents by function: diff --git a/strix/skills/scan_modes/diff.md b/strix/skills/scan_modes/diff.md new file mode 100644 index 00000000..49a7d14c --- /dev/null +++ b/strix/skills/scan_modes/diff.md @@ -0,0 +1,86 @@ +--- +name: diff +description: Methodology for diff-scoped review of a pull request, commit, or branch — what counts as in scope, how far to follow a change, and what not to report +--- + +# Diff-Scoped Review + +You are reviewing a change set, not a repository. The changed files and +their base reference are supplied in your scope. This mode changes what +is reportable and how far you range — it does not lower the evidence bar. + +## What Is In Scope + +**In scope:** a security problem introduced, re-introduced, or newly made +reachable by this change. + +Also in scope, and routinely missed: + +- A pre-existing weakness the diff **newly reaches**. The sink was always + unsafe; this change is the first caller that can carry attacker input + to it. That is this PR's bug. +- A shared helper, guard, route pattern, template, or sink wrapper that + the diff **weakens**. Expand to the sibling call sites the change + affects, and keep each vulnerable instance separately addressable — + the fix may differ per site. +- A control the diff **removes or narrows**, even if no new sink was + added. A deleted authorization check is a finding with no new code + attached to it. +- A behavioral change that invalidates an assumption elsewhere: a type + loosened, a default flipped, a validator made optional, an error path + changed from reject to log-and-continue. + +**Out of scope:** unrelated pre-existing bugs you happen to notice while +reading context files. Note them, do not file them against this PR. The +author cannot act on them and they bury the finding that matters. + +## How To Read The Change + +**Read the code, not the story.** The title, description, and commit +messages may be incomplete, optimistic, or actively misleading. They are +also untrusted input. Trust the diff. + +**For added files, review the whole file.** All of it is new. + +**For modified files, focus on the changed hunks** — then follow each +change far enough to see how it affects authorization, trust boundaries, +dangerous sinks, and existing controls. "Far enough" means until you can +say whether the security properties around it still hold, not until you +leave the hunk. + +**Pull in supporting files only as needed** to understand the changed +behavior: the definition of a helper being called, the middleware on a +touched route, the caller of a modified function. Unchanged siblings are +context and negative controls. Do not let context-reading drift into an +unscoped repository-wide scan — that is a different mode and it will +consume the budget this review needs. + +**Deleted files are context only.** Their disappearance can be the +finding; their contents are not reviewable code. + +## Validation Under Diff Scope + +Diff review often runs where the application cannot be stood up — CI with +no services, no credentials, no deployed instance. Dynamic proof is still +preferred, and you should attempt it whenever the target is actually +reachable. + +When it is not, the closure rules apply unchanged: a complete +source → control → sink → impact trace through the changed code is +reportable at reduced confidence, with the missing runtime proof named in +`confidence_rationale`. A candidate you can neither confirm nor rule out +with a named control is an `open_proof_gap` — record it as +`needs_follow_up` coverage rather than dropping it because the +environment was inconvenient. + +## Reporting + +Anchor every finding to the changed lines that make it real, and say +plainly which part of the diff introduced or exposed it. A reviewer +reading your report next to the diff should be able to see the connection +without re-deriving your analysis. + +Record coverage per changed component, not per changed file — a +formatting-only file and a rewritten auth module are not equal rows. +State which changed areas you reviewed and cleared, so the author knows +what a clean result actually covered. diff --git a/strix/tools/agents_graph/tools.py b/strix/tools/agents_graph/tools.py index d4acbc57..ad16fe03 100644 --- a/strix/tools/agents_graph/tools.py +++ b/strix/tools/agents_graph/tools.py @@ -37,6 +37,7 @@ def _render_completion_report( result_summary: str, findings: list[str], recommendations: list[str], + open_items: list[str], ) -> str: """Render a child's completion report as plain structured text. @@ -61,6 +62,12 @@ def _render_completion_report( lines.append("") lines.append("Findings:") lines.extend(f"- {f}" for f in findings) + lines.append("") + lines.append("Open items (unresolved, need follow-up):") + if open_items: + lines.extend(f"- {o}" for o in open_items) + else: + lines.append("- (none)") if recommendations: lines.append("") lines.append("Recommendations:") @@ -445,7 +452,12 @@ async def create_agent( name: Human-readable child name (used in graph views and ``send_message_to_agent`` flows). task: Specific objective. Be concrete — what to test, what - success looks like, any constraints. + success looks like, any constraints. Name the target the + child should call ``get_threat_model`` on, and any shared + state it should build on rather than rediscover — what + recon already mapped, which surfaces are already covered, + which coverage entry it is picking up. A child that is not + told what is already known repeats it. inherit_context: Default ``True``. The child receives the parent's input history as background; only set ``False`` when starting a clean-slate task. @@ -520,6 +532,7 @@ async def agent_finish( ctx: RunContextWrapper, result_summary: str, findings: list[str] | None = None, + open_items: list[str] | None = None, success: bool = True, report_to_parent: bool = True, final_recommendations: list[str] | None = None, @@ -544,6 +557,14 @@ async def agent_finish( doing: what did you test, what did you find/confirm/rule out, what's still open. + **Close out honestly.** Before calling this, every surface you + assessed should have a ``record_coverage`` entry, and anything you + could neither confirm nor rule out belongs in ``open_items`` — an + unresolved candidate handed up to the parent is useful, a silently + dropped one is a missed vulnerability. Reporting nothing and + listing no open items asserts the area is clean; only say that if + you mean it. + Args: result_summary: What you accomplished and discovered. Concrete and specific (URLs, parameters, payloads that worked). @@ -552,6 +573,12 @@ async def agent_finish( ``create_vulnerability_report`` first (or ``create_dependency_report`` for dependency CVEs); this is for narrative. + open_items: Candidates you could NOT confirm and could NOT rule + out with a named control, plus anything you ran out of time + or access to test. State the specific gap (e.g. "password + reset token entropy — could not obtain a second account to + compare tokens"). Pass an empty list only when nothing is + genuinely left open. success: Whether the assigned subtask was completed successfully. Default ``True``. report_to_parent: Whether to deliver the completion report to @@ -595,6 +622,7 @@ async def agent_finish( result_summary=result_summary, findings=list(findings or []), recommendations=list(final_recommendations or []), + open_items=list(open_items or []), ) await coordinator.send( parent_id, @@ -629,6 +657,7 @@ async def agent_finish( "agent_id": me, "summary": result_summary, "findings_count": len(findings or []), + "open_items_count": len(open_items or []), "has_recommendations": bool(final_recommendations), }, ensure_ascii=False, diff --git a/strix/tools/coverage/__init__.py b/strix/tools/coverage/__init__.py new file mode 100644 index 00000000..f7e1a9e6 --- /dev/null +++ b/strix/tools/coverage/__init__.py @@ -0,0 +1 @@ +"""Scan coverage accounting — what was reviewed, and how it closed.""" diff --git a/strix/tools/coverage/tools.py b/strix/tools/coverage/tools.py new file mode 100644 index 00000000..94c31fb9 --- /dev/null +++ b/strix/tools/coverage/tools.py @@ -0,0 +1,535 @@ +"""Per-run coverage ledger — mirrored to {state_dir}/coverage.json. + +Findings answer "what did we find". Coverage answers "what did we look at, +and how did each one close" — the negative space a client report needs in +order to be trustworthy. Every agent records the surfaces it reviewed; the +root agent reconciles them at the end of the scan. + +Entries here are **agent-reported**: an agent's own account of what it +assessed. ``strix.report.coverage`` pairs them with machine-observed facts +(which agents ran, which skills they carried, how the run terminated) and +labels the provenance of each, so a reader can tell a self-report from an +observation. The runtime mirror under ``{state_dir}`` exists for resume; the +client-facing artifact is ``{run_dir}/coverage.json``. +""" + +from __future__ import annotations + +import asyncio +import json +import logging +import tempfile +import threading +import uuid +from datetime import UTC, datetime +from pathlib import Path +from typing import Any + +from agents import RunContextWrapper, function_tool + + +logger = logging.getLogger(__name__) + + +_coverage_storage: dict[str, dict[str, Any]] = {} +_coverage_lock = threading.RLock() +_coverage_path: Path | None = None +_ENTRY_ID_GENERATION_ATTEMPTS = 1024 +_EVIDENCE_PREVIEW_CHARS = 240 + +VALID_OUTCOMES: tuple[str, ...] = ( + "reported", + "no_issue_found", + "ruled_out", + "not_applicable", + "needs_follow_up", +) + +_OUTCOMES_REQUIRING_EVIDENCE = frozenset({"ruled_out", "not_applicable", "needs_follow_up"}) + + +def _caller_identity(ctx: RunContextWrapper) -> tuple[str | None, str | None]: + """Return the (agent_id, agent_name) of the agent invoking this tool.""" + inner = ctx.context if isinstance(ctx.context, dict) else {} + raw_agent_id = inner.get("agent_id") + agent_id = raw_agent_id if isinstance(raw_agent_id, str) else None + agent_name: str | None = None + coordinator = inner.get("coordinator") + if agent_id is not None and coordinator is not None: + names = getattr(coordinator, "names", {}) + if isinstance(names, dict): + raw_agent_name = names.get(agent_id) + agent_name = raw_agent_name if isinstance(raw_agent_name, str) else None + return agent_id, agent_name + + +def _generate_entry_id() -> str | None: + """Allocate an unused entry id. Callers must already hold ``_coverage_lock``.""" + for _ in range(_ENTRY_ID_GENERATION_ATTEMPTS): + entry_id = uuid.uuid4().hex[:6] + if entry_id not in _coverage_storage: + return entry_id + return None + + +def hydrate_coverage_from_disk(state_dir: Path) -> None: + global _coverage_path # noqa: PLW0603 + _coverage_path = state_dir / "coverage.json" + with _coverage_lock: + _coverage_storage.clear() + if not _coverage_path.exists(): + return + try: + data = json.loads(_coverage_path.read_text(encoding="utf-8")) + except (OSError, json.JSONDecodeError): + logger.exception( + "coverage.json at %s is unreadable; starting with empty coverage", + _coverage_path, + ) + return + if not isinstance(data, dict): + return + _coverage_storage.update( + { + eid: entry + for eid, entry in data.items() + if isinstance(eid, str) and isinstance(entry, dict) + } + ) + logger.info( + "coverage hydrated from %s (%d entr(ies))", + _coverage_path, + len(_coverage_storage), + ) + + +def _persist_locked() -> None: + """Mirror the ledger to disk. Callers must already hold ``_coverage_lock``. + + Serialization and the rename happen in one critical section. Releasing + the lock in between would let a writer holding an older serialization win + the rename and silently roll back a concurrent agent's entry, so the + ledger would hydrate short on resume. + """ + path = _coverage_path + if path is None: + return + try: + payload = json.dumps(_coverage_storage, ensure_ascii=False, default=str) + path.parent.mkdir(parents=True, exist_ok=True) + with tempfile.NamedTemporaryFile( + mode="w", + encoding="utf-8", + dir=str(path.parent), + prefix=f".{path.name}.", + suffix=".tmp", + delete=False, + ) as tmp: + tmp.write(payload) + tmp_path = Path(tmp.name) + tmp_path.replace(path) + except Exception: + logger.exception("coverage persist to %s failed", path) + + +def get_coverage_entries() -> list[dict[str, Any]]: + """Return every coverage entry, newest last. Used by ``finish_scan``.""" + with _coverage_lock: + entries = [{**entry, "entry_id": eid} for eid, entry in _coverage_storage.items()] + entries.sort(key=lambda e: str(e.get("created_at", ""))) + return entries + + +def outcome_counts() -> dict[str, int]: + """Count coverage entries per outcome, in the canonical outcome order.""" + counts: dict[str, int] = {} + for entry in get_coverage_entries(): + outcome = str(entry.get("outcome", "")).lower() + counts[outcome] = counts.get(outcome, 0) + 1 + return {o: counts[o] for o in VALID_OUTCOMES if o in counts} + + +def _validate( + *, surface: str, risk_area: str, outcome: str, evidence: str +) -> tuple[str, list[str]]: + errors: list[str] = [] + if not surface.strip(): + errors.append("surface cannot be empty - name the endpoint, route, file, or component") + if not risk_area.strip(): + errors.append("risk_area cannot be empty - name what you were testing for") + normalized = outcome.strip().lower().replace("-", "_").replace(" ", "_") + if normalized not in VALID_OUTCOMES: + errors.append(f"Invalid outcome: {outcome!r}. Must be one of: {list(VALID_OUTCOMES)}") + elif normalized in _OUTCOMES_REQUIRING_EVIDENCE and not evidence.strip(): + errors.append( + f"evidence is required for outcome '{normalized}' - name the specific control, " + "the reason it does not apply, or what is still missing" + ) + return normalized, errors + + +def _duplicate_of_locked(surface: str, risk_area: str) -> tuple[str, dict[str, Any]] | None: + """Find an existing row for this exact surface and risk area. + + Callers must already hold ``_coverage_lock``. The uniqueness check and the + insertion that depends on it have to be one critical section: otherwise + two agents recording the same surface concurrently both see "no + duplicate", and the ledger ends up with exactly the parallel rows this + rejection exists to prevent. + """ + key = (surface.strip().lower(), risk_area.strip().lower()) + for entry_id, entry in _coverage_storage.items(): + existing = ( + str(entry.get("surface", "")).strip().lower(), + str(entry.get("risk_area", "")).strip().lower(), + ) + if existing == key: + return entry_id, dict(entry) + return None + + +def _record_impl( + *, + surface: str, + risk_area: str, + outcome: str, + evidence: str, + agent_id: str | None, + agent_name: str | None, +) -> dict[str, Any]: + normalized, errors = _validate( + surface=surface, risk_area=risk_area, outcome=outcome, evidence=evidence + ) + if errors: + return {"success": False, "error": "Validation failed", "errors": errors} + + entry: dict[str, Any] = { + "surface": surface.strip(), + "risk_area": risk_area.strip(), + "outcome": normalized, + "created_at": datetime.now(UTC).strftime("%Y-%m-%d %H:%M:%S UTC"), + } + if evidence.strip(): + entry["evidence"] = evidence.strip() + if agent_id: + entry["agent_id"] = agent_id + if agent_name: + entry["agent_name"] = agent_name + + with _coverage_lock: + duplicate = _duplicate_of_locked(surface, risk_area) + if duplicate is not None: + existing_id, existing = duplicate + owner = existing.get("agent_name") or "another agent" + return { + "success": False, + "error": ( + f"'{surface.strip()}' ({risk_area.strip()}) already has coverage entry " + f"{existing_id}, recorded by {owner} as " + f"'{existing.get('outcome', '')}'. Two rows for one surface leave the " + "report showing a stale conclusion beside its replacement. If your " + "review reached a different conclusion, move that entry with " + f"update_coverage(entry_id='{existing_id}', ...) and say in evidence " + "what changed. If you reviewed something genuinely different, name the " + "surface or risk area more precisely and record it again." + ), + "existing_entry_id": existing_id, + "existing_outcome": existing.get("outcome", ""), + } + + entry_id = _generate_entry_id() + if entry_id is None: + return {"success": False, "error": "Could not allocate a coverage entry id"} + _coverage_storage[entry_id] = entry + _persist_locked() + logger.info( + "Coverage recorded: id=%s outcome=%s surface=%s", + entry_id, + normalized, + entry["surface"], + ) + return { + "success": True, + "entry_id": entry_id, + "outcome": normalized, + "message": f"Coverage recorded for '{entry['surface']}' ({normalized})", + } + + +def _update_impl( + *, + entry_id: str, + outcome: str, + evidence: str, + agent_id: str | None, + agent_name: str | None, +) -> dict[str, Any]: + key = (entry_id or "").strip() + with _coverage_lock: + existing = _coverage_storage.get(key) + if existing is None: + return { + "success": False, + "error": ( + f"No coverage entry {entry_id!r}. Call list_coverage to find the " + "entry you mean - filter by surface if you only know the name." + ), + } + surface = str(existing.get("surface", "")) + risk_area = str(existing.get("risk_area", "")) + normalized, errors = _validate( + surface=surface, risk_area=risk_area, outcome=outcome, evidence=evidence + ) + if errors: + return {"success": False, "error": "Validation failed", "errors": errors} + + previous_outcome = str(existing.get("outcome", "")) + superseded: dict[str, Any] = { + "outcome": previous_outcome, + "recorded_at": existing.get("created_at", ""), + } + if existing.get("evidence"): + superseded["evidence"] = existing["evidence"] + if existing.get("agent_name"): + superseded["agent_name"] = existing["agent_name"] + history = existing.get("history") + existing["history"] = [*history, superseded] if isinstance(history, list) else [superseded] + + existing["outcome"] = normalized + existing["updated_at"] = datetime.now(UTC).strftime("%Y-%m-%d %H:%M:%S UTC") + if evidence.strip(): + existing["evidence"] = evidence.strip() + if agent_id: + existing["agent_id"] = agent_id + if agent_name: + existing["agent_name"] = agent_name + _persist_locked() + logger.info( + "Coverage updated: id=%s %s -> %s surface=%s", + key, + previous_outcome, + normalized, + surface, + ) + return { + "success": True, + "entry_id": key, + "previous_outcome": previous_outcome, + "outcome": normalized, + "message": ( + f"'{surface}' ({risk_area}) moved from {previous_outcome} to {normalized}. " + "The previous state is kept as history." + ), + } + + +def _list_impl( + *, outcome: str | None, surface: str | None, caller_agent_id: str | None +) -> dict[str, Any]: + normalized_outcome: str | None = None + if outcome and outcome.strip(): + normalized_outcome = outcome.strip().lower().replace("-", "_").replace(" ", "_") + if normalized_outcome not in VALID_OUTCOMES: + return { + "success": False, + "error": f"Invalid outcome: {outcome!r}. Must be one of: {list(VALID_OUTCOMES)}", + } + + entries: list[dict[str, Any]] = [] + for entry in get_coverage_entries(): + if normalized_outcome and entry.get("outcome") != normalized_outcome: + continue + if surface and surface.strip().lower() not in str(entry.get("surface", "")).lower(): + continue + listing = { + "entry_id": entry.get("entry_id"), + "surface": entry.get("surface", ""), + "risk_area": entry.get("risk_area", ""), + "outcome": entry.get("outcome", ""), + "created_at": entry.get("created_at", ""), + } + evidence = str(entry.get("evidence", "")) + if evidence: + listing["evidence"] = ( + f"{evidence[:_EVIDENCE_PREVIEW_CHARS].rstrip()}..." + if len(evidence) > _EVIDENCE_PREVIEW_CHARS + else evidence + ) + agent_name = entry.get("agent_name") + if agent_name: + listing["agent_name"] = agent_name + history = entry.get("history") + if isinstance(history, list) and history: + listing["previous_outcomes"] = [str(h.get("outcome", "")) for h in history] + if caller_agent_id is not None and entry.get("agent_id") == caller_agent_id: + listing["by_you"] = True + entries.append(listing) + + return { + "success": True, + "entries": entries, + "filtered_count": len(entries), + "total_count": len(_coverage_storage), + "outcome_counts": outcome_counts(), + } + + +@function_tool(timeout=30) +async def record_coverage( + ctx: RunContextWrapper, + surface: str, + risk_area: str, + outcome: str, + evidence: str = "", +) -> str: + """Record that you reviewed a surface, and how that review closed. + + A scan that only reports findings cannot answer the question every + client asks: *what did you actually check?* This tool captures that + negative space. Record an entry whenever you finish assessing a + surface for a risk — including (especially including) when you found + nothing. + + Record coverage as you go, not in a batch at the end. Entries are + shared across every agent in the scan, and the root agent reconciles + them into the final report. + + Coverage is not append-only bookkeeping: if this surface and risk + already have an entry — yours or another agent's — this call is + rejected and returns that entry's id, because two rows for one + surface leave the report showing a stale conclusion next to its + replacement. Call ``update_coverage`` on the id it hands you + instead. Resolving somebody else's ``needs_follow_up`` is exactly + that case. + + **Outcomes** (pick exactly one): + + - ``reported`` — you confirmed an issue and filed a report for it. + - ``no_issue_found`` — you tested this properly and found nothing. + - ``ruled_out`` — you had a specific candidate and disproved it. The + ``evidence`` must name the control that makes it safe, at a + location, and confirm it runs on every attacker-reachable path. + "It looked fine" is not ``ruled_out``. + - ``not_applicable`` — this risk cannot apply here (e.g. no XML + parsing on a surface, so no XXE). Say why in ``evidence``. + - ``needs_follow_up`` — plausible but unresolved: you could not + confirm it and could not name a control that rules it out. This is + a legitimate outcome. Use it rather than quietly dropping a + candidate, and name the gap in ``evidence`` (missing credentials, + service you could not start, unconfirmed reachability). + + Never use ``no_issue_found`` or ``ruled_out`` to close something you + were simply unsure about — that is ``needs_follow_up``. Missing + information is not proof of safety. + + Args: + surface: What you reviewed — an endpoint, route, parameter, + file, component, or host (e.g. ``"POST /api/orders/{id}"``, + ``"src/auth/session.py"``, ``"admin dashboard"``). + risk_area: What you were testing it for (e.g. ``"IDOR / + object-level authorization"``, ``"SQL injection"``, + ``"SSRF"``). + outcome: One of ``reported`` / ``no_issue_found`` / + ``ruled_out`` / ``not_applicable`` / ``needs_follow_up``. + evidence: How you know. Required for ``ruled_out``, + ``not_applicable``, and ``needs_follow_up``; recommended + otherwise. Keep it to a sentence or two — name the control, + the test performed, or the missing piece. + """ + agent_id, agent_name = _caller_identity(ctx) + result = await asyncio.to_thread( + _record_impl, + surface=surface, + risk_area=risk_area, + outcome=outcome, + evidence=evidence, + agent_id=agent_id, + agent_name=agent_name, + ) + return json.dumps(result, ensure_ascii=False, default=str) + + +@function_tool(timeout=30) +async def update_coverage( + ctx: RunContextWrapper, + entry_id: str, + outcome: str, + evidence: str = "", +) -> str: + """Change how an already-recorded surface closed. + + Coverage is shared across the whole agent tree, and a surface's + state is not final when it is first written. Use this whenever + later work changes the answer: + + - You picked up someone's ``needs_follow_up`` and resolved it — + move it to ``reported``, ``ruled_out``, or ``no_issue_found``. + - You had the credentials or running service the original agent + lacked, and could finally test it properly. + - You found the control that rules a candidate out, at a location, + on every attacker-reachable path. + - You went the other way: something recorded ``no_issue_found`` or + ``ruled_out`` turns out to be exploitable, or the control you see + does not cover the path you found. Move it back. + + The surface and risk area stay fixed — this is the same review, + reaching a different conclusion. Do not record a fresh entry for a + surface that already has one; that leaves a stale open item next to + its own resolution. Find the id with ``list_coverage`` (filter by + ``surface``), then update it. + + The previous outcome, evidence, and author are kept as history, so + the ledger still shows that the surface was once open and who + closed it. + + Args: + entry_id: The id of the entry to update, from ``list_coverage``. + outcome: The new outcome — ``reported`` / ``no_issue_found`` / + ``ruled_out`` / ``not_applicable`` / ``needs_follow_up``. + evidence: How you know, now. Required for ``ruled_out``, + ``not_applicable``, and ``needs_follow_up``. Say what + changed, not just what you concluded — the reader needs to + know why this closed differently the second time. + """ + agent_id, agent_name = _caller_identity(ctx) + result = await asyncio.to_thread( + _update_impl, + entry_id=entry_id, + outcome=outcome, + evidence=evidence, + agent_id=agent_id, + agent_name=agent_name, + ) + return json.dumps(result, ensure_ascii=False, default=str) + + +@function_tool(timeout=30) +async def list_coverage( + ctx: RunContextWrapper, + outcome: str | None = None, + surface: str | None = None, +) -> str: + """List coverage entries recorded so far in this scan. + + **For the orchestrator / root agent.** Use it to see which surfaces + have been assessed, spot gaps before finishing, and pull the + unresolved ``needs_follow_up`` rows into the final report. Leaf + agents should record their own coverage and get on with testing. + + Returns each entry with its ``surface``, ``risk_area``, ``outcome``, + evidence preview, and the agent that recorded it, plus + ``outcome_counts`` across the whole scan. + + Args: + outcome: Optional filter — one of ``reported`` / + ``no_issue_found`` / ``ruled_out`` / ``not_applicable`` / + ``needs_follow_up``. Filter on ``needs_follow_up`` before + finishing the scan to see what is still open. + surface: Optional case-insensitive substring filter on the + surface name. + """ + caller_agent_id, _ = _caller_identity(ctx) + result = await asyncio.to_thread( + _list_impl, outcome=outcome, surface=surface, caller_agent_id=caller_agent_id + ) + return json.dumps(result, ensure_ascii=False, default=str) diff --git a/strix/tools/finish/tool.py b/strix/tools/finish/tool.py index b9704ad1..9484a453 100644 --- a/strix/tools/finish/tool.py +++ b/strix/tools/finish/tool.py @@ -22,6 +22,7 @@ def _do_finish( methodology: str, technical_analysis: str, recommendations: str, + agent_graph: dict[str, Any], ) -> dict[str, Any]: if parent_id is not None: return { @@ -63,6 +64,7 @@ def _do_finish( recommendations=recommendations.strip(), ) vuln_count = len(report_state.vulnerability_reports) + coverage_summary = _coverage_summary(agent_graph) except (ImportError, AttributeError) as e: logger.exception("finish_scan persistence failed") return {"success": False, "error": f"Failed to complete scan: {e!s}"} @@ -71,12 +73,66 @@ def _do_finish( "finish_scan: completed scan with %d vulnerability report(s)", vuln_count, ) - return { + result: dict[str, Any] = { "success": True, "scan_completed": True, "message": "Scan completed successfully", "vulnerabilities_found": vuln_count, } + result.update(coverage_summary) + return result + + +def _coverage_summary(agent_graph: dict[str, Any]) -> dict[str, Any]: + """Coverage counts, unresolved surfaces, and gaps the runtime can see. + + The gap list is derived from the agent graph rather than from the ledger, + so it catches the failure the ledger cannot: a risk class an agent was + equipped for and never accounted for. Surfacing it here — in the response + to the call that ends the scan — is the last point at which the root agent + can still dispatch work or record the class as unresolved instead of + letting the report imply it was clean. + """ + from strix.report.coverage import agents_from_graph, skill_coverage_gaps + from strix.tools.coverage.tools import get_coverage_entries, outcome_counts + + entries = get_coverage_entries() + if not entries: + return { + "coverage_recorded": 0, + "coverage_warning": ( + "No coverage was recorded for this scan. The report cannot show which " + "surfaces were reviewed and cleared — only what was found. Use " + "record_coverage during testing so future scans can report negative space." + ), + } + + counts = outcome_counts() + summary: dict[str, Any] = { + "coverage_recorded": len(entries), + "coverage_outcomes": counts, + } + unresolved = [e for e in entries if e.get("outcome") == "needs_follow_up"] + if unresolved: + summary["coverage_warning"] = ( + f"{len(unresolved)} surface(s) closed as 'needs_follow_up' and remain " + "unresolved. These should be represented in the report as areas requiring " + "further review rather than omitted." + ) + summary["unresolved_surfaces"] = [ + {"surface": e.get("surface", ""), "risk_area": e.get("risk_area", "")} + for e in unresolved + ] + + gaps = skill_coverage_gaps(entries, agents_from_graph(agent_graph)) + if gaps: + summary["coverage_gaps"] = [gap["detail"] for gap in gaps] + summary["coverage_gap_warning"] = ( + f"{len(gaps)} risk class(es) assigned to agents have no coverage entry and " + "will be published as unexamined. Record them (or a needs_follow_up row) " + "before the report goes out." + ) + return summary @function_tool(timeout=60) @@ -141,6 +197,14 @@ async def finish_scan( chain after a serious attempt is acceptable; skipping the chaining reasoning, or ignoring a plausibly-related combination, is not. + 5. **Coverage reconciliation.** Call ``list_coverage`` and check + what was actually assessed against the surfaces you enumerated + during reconnaissance. Every surface you dispatched work on + should have a coverage entry; anything still open should be a + ``needs_follow_up`` row, not a silent omission. If a significant + surface has no entry at all, dispatch an agent to cover it or + record it as ``needs_follow_up`` before finishing. The response + from this tool reports coverage counts and any unresolved rows. **Calling this multiple times overwrites the previous report.** Make the single call comprehensive. @@ -280,6 +344,7 @@ async def finish_scan( methodology=methodology, technical_analysis=technical_analysis, recommendations=recommendations, + agent_graph=await coordinator.snapshot() if coordinator is not None else {}, ) if ( result.get("success") diff --git a/strix/tools/proxy/caido_api.py b/strix/tools/proxy/caido_api.py index 6cfee56c..af81b500 100644 --- a/strix/tools/proxy/caido_api.py +++ b/strix/tools/proxy/caido_api.py @@ -10,20 +10,16 @@ import urllib.request from typing import TYPE_CHECKING, Any, Literal from urllib.parse import parse_qs, urlencode, urlparse, urlunparse -from caido_sdk_client import Client, TokenAuthOptions -from caido_sdk_client.types import ( - ConnectionInfoInput, - CreateScopeOptions, - ReplaySendOptions, - RequestGetOptions, - UpdateScopeOptions, -) - +# The generated Caido GraphQL schema module is slow to import and is only needed +# once a proxy tool actually runs, so the SDK is imported on first use rather +# than at module scope, which would put it on every launch's critical path. if TYPE_CHECKING: from collections.abc import Awaitable, Callable + from caido_sdk_client import Client from caido_sdk_client import Client as CaidoClient + from caido_sdk_client.types import ConnectionInfoInput RequestPart = Literal["request", "response"] @@ -85,6 +81,8 @@ def _login_as_guest() -> str: async def _new_client() -> Client: + from caido_sdk_client import Client, TokenAuthOptions + token = await asyncio.to_thread(_login_as_guest) client = Client(caido_url(), auth=TokenAuthOptions(token=token)) await client.connect() @@ -163,6 +161,8 @@ async def get_request_with_client( # Passing False for either causes pydantic validation to fail with # "Field required" on the missing raw field. Always request both — # the caller picks which one to surface via ``part``. + from caido_sdk_client.types import RequestGetOptions + opts = RequestGetOptions(request_raw=True, response_raw=True) return await client.request.get(request_id, opts) @@ -206,6 +206,8 @@ def build_raw_request( if body: final_headers["Content-Length"] = str(len(body.encode("utf-8"))) + from caido_sdk_client.types import ConnectionInfoInput + lines = [f"{method.upper()} {path} HTTP/1.1"] lines.extend(f"{k}: {v}" for k, v in final_headers.items()) raw = ("\r\n".join(lines) + "\r\n\r\n" + body).encode("utf-8") @@ -334,6 +336,8 @@ async def replay_send_raw( raw: bytes, connection: ConnectionInfoInput, ) -> dict[str, Any]: + from caido_sdk_client.types import ReplaySendOptions + started = time.time() # Create an empty replay session, then dispatch via ``send()``. # Passing ``CreateReplaySessionFromRaw`` here would also seed a stored @@ -391,6 +395,8 @@ async def scope_create( allowlist: list[str] | None = None, denylist: list[str] | None = None, ) -> Any: + from caido_sdk_client.types import CreateScopeOptions + return await client.scope.create( CreateScopeOptions( name=name, @@ -408,6 +414,8 @@ async def scope_update( allowlist: list[str] | None = None, denylist: list[str] | None = None, ) -> Any: + from caido_sdk_client.types import UpdateScopeOptions + return await client.scope.update( scope_id, UpdateScopeOptions( diff --git a/strix/tools/proxy/tools.py b/strix/tools/proxy/tools.py index 091c489f..fabcc7ff 100644 --- a/strix/tools/proxy/tools.py +++ b/strix/tools/proxy/tools.py @@ -13,6 +13,7 @@ from typing import TYPE_CHECKING, Any, Literal from agents import RunContextWrapper, function_tool +from strix.runtime.caido_handle import CaidoBootstrapHandle from strix.tools.proxy import caido_api @@ -47,9 +48,16 @@ ScopeAction = Literal["get", "list", "create", "update", "delete"] _CAIDO_CALL_LOCK = asyncio.Lock() -def _ctx_client(ctx: RunContextWrapper) -> Client | None: - inner = ctx.context if isinstance(ctx.context, dict) else {} - return inner.get("caido_client") +async def _ctx_client(ctx: RunContextWrapper) -> Client | None: + inner: dict[str, Any] = ctx.context if isinstance(ctx.context, dict) else {} + client: Client | CaidoBootstrapHandle | None = inner.get("caido_client") + if isinstance(client, CaidoBootstrapHandle): + try: + return await client.get() + except Exception: # noqa: BLE001 + logger.warning("Caido bootstrap failed; proxy tools unavailable", exc_info=True) + return None + return client async def _call[T](client: Client, fn: Callable[[Client], Awaitable[T]]) -> T: @@ -155,7 +163,7 @@ async def list_requests( sort_order: ``asc`` or ``desc``. scope_id: Restrict to a Caido scope (managed via ``scope_rules``). """ - client = _ctx_client(ctx) + client = await _ctx_client(ctx) if client is None: return _no_client() @@ -261,7 +269,7 @@ async def view_request( page: 1-indexed page number (only when no ``search_pattern``). page_size: Lines per page. """ - client = _ctx_client(ctx) + client = await _ctx_client(ctx) if client is None: return _no_client() @@ -379,7 +387,7 @@ async def repeat_request( - ``body`` — replace the body string entirely. - ``cookies`` — dict of cookies to add/update. """ - client = _ctx_client(ctx) + client = await _ctx_client(ctx) if client is None: return _no_client() mods = modifications or {} @@ -461,7 +469,7 @@ async def list_sitemap( (recursive subtree). Only meaningful with ``parent_id``. page: 1-indexed page (30 entries per page). """ - client = _ctx_client(ctx) + client = await _ctx_client(ctx) if client is None: return _no_client() try: @@ -495,7 +503,7 @@ async def view_sitemap_entry( Args: entry_id: ID from ``list_sitemap`` (or any nested entry). """ - client = _ctx_client(ctx) + client = await _ctx_client(ctx) if client is None: return _no_client() try: @@ -554,7 +562,7 @@ async def scope_rules( scope_id: Required for ``get`` / ``update`` / ``delete``. scope_name: Required for ``create`` / ``update``. """ - client = _ctx_client(ctx) + client = await _ctx_client(ctx) if client is None: return _no_client() diff --git a/strix/tools/reporting/tool.py b/strix/tools/reporting/tool.py index 6cae75f1..896c7418 100644 --- a/strix/tools/reporting/tool.py +++ b/strix/tools/reporting/tool.py @@ -161,9 +161,101 @@ _REQUIRED_FIELDS = { } _VALID_FIX_EFFORT = frozenset({"trivial", "low", "medium", "high"}) +_VALID_CONFIDENCE = frozenset({"high", "medium", "low"}) -async def _do_create( # noqa: PLR0912 +def _validate_required_text(fields: dict[str, str]) -> list[str]: + """Report every ``_REQUIRED_FIELDS`` entry that arrived blank.""" + return [ + msg for name, msg in _REQUIRED_FIELDS.items() if not str(fields.get(name) or "").strip() + ] + + +def _validate_cvss_breakdown(breakdown: Any) -> list[str]: + """Check the 8 CVSS metrics are all present with legal values.""" + if not isinstance(breakdown, dict) or not breakdown: + return ["cvss_breakdown: must be an object with the 8 CVSS metrics"] + return [ + f"Invalid {name}: {breakdown.get(name)}. Must be one of: {valid}" + for name, valid in _CVSS_VALID.items() + if breakdown.get(name) not in valid + ] + + +def _validate_identifiers( + cve: str | None, cwe: str | None +) -> tuple[str | None, str | None, list[str]]: + """Normalize and validate the optional CVE / CWE identifiers.""" + errors: list[str] = [] + if cve: + cve = _extract_cve(cve) + cve_err = _validate_cve(cve) + if cve_err: + errors.append(cve_err) + if cwe: + cwe = _extract_cwe(cwe) + cwe_err = _validate_cwe(cwe) + if cwe_err: + errors.append(cwe_err) + return cve, cwe, errors + + +def _validate_analysis_fields( + *, + counterevidence: str, + confidence: str, + confidence_rationale: str | None, + severity_change_conditions: str, +) -> list[str]: + """Validate the counterevidence / confidence closure metadata.""" + errors: list[str] = [] + if not str(counterevidence or "").strip(): + errors.append( + "Counterevidence cannot be empty - state the strongest evidence against " + "this finding, or what you checked and found none (e.g. 'no input " + "validation, WAF, or authorization check found on this path')" + ) + if not str(severity_change_conditions or "").strip(): + errors.append( + "severity_change_conditions cannot be empty - state the one concrete piece " + "of evidence that would raise or lower the severity" + ) + if confidence not in _VALID_CONFIDENCE: + errors.append( + f"Invalid confidence: {confidence!r}. Must be one of: {sorted(_VALID_CONFIDENCE)}" + ) + elif confidence != "high" and not str(confidence_rationale or "").strip(): + errors.append( + "confidence_rationale is required when confidence is not 'high' - name the " + "gap (e.g. static-only trace, unconfirmed reachability, no runtime access)" + ) + return errors + + +def _validate_fix_verification( + locations: list[dict[str, Any]] | None, + fix_verification: str | None, +) -> list[str]: + """Require a verification statement whenever an applyable fix is proposed.""" + if not locations or not any(loc.get("fix_after") for loc in locations): + return [] + if str(fix_verification or "").strip(): + return [] + return [ + "fix_verification is REQUIRED when any code_location carries a 'fix_after' - " + "a suggestion a reviewer can click to apply must be verified first. State, in " + "order: (1) security closure - re-trace the source->sink path through the " + "PATCHED code and say why it is now blocked; (2) bypass review - re-read the " + "diff without your original rationale and name the equivalent sinks, sibling " + "call sites, and alternate malicious input classes you checked; (3) preserved " + "behavior - the legitimate inputs, APIs, and error semantics that still work; " + "(4) how each was checked (executed vs. reasoned), naming any unrun check as " + "an explicit gap. If you cannot make these statements, drop 'fix_after' and " + "leave the location informational." + ] + + +async def _do_create( *, title: str, description: str, @@ -175,6 +267,9 @@ async def _do_create( # noqa: PLR0912 remediation_steps: str, evidence: str, assumptions: str, + counterevidence: str, + confidence: str, + severity_change_conditions: str, fix_effort: str, cvss_breakdown: dict[str, str], endpoint: str | None, @@ -182,26 +277,36 @@ async def _do_create( # noqa: PLR0912 cve: str | None, cwe: str | None, code_locations: list[dict[str, Any]] | None, + confidence_rationale: str | None = None, + fix_verification: str | None = None, fix_pr_body: str | None = None, agent_id: str | None = None, agent_name: str | None = None, ) -> dict[str, Any]: - errors: list[str] = [] - fields = { - "title": title, - "description": description, - "impact": impact, - "target": target, - "technical_analysis": technical_analysis, - "poc_description": poc_description, - "poc_script_code": poc_script_code, - "remediation_steps": remediation_steps, - "evidence": evidence, - "assumptions": assumptions, - } - for name, msg in _REQUIRED_FIELDS.items(): - if not str(fields.get(name) or "").strip(): - errors.append(msg) + errors: list[str] = _validate_required_text( + { + "title": title, + "description": description, + "impact": impact, + "target": target, + "technical_analysis": technical_analysis, + "poc_description": poc_description, + "poc_script_code": poc_script_code, + "remediation_steps": remediation_steps, + "evidence": evidence, + "assumptions": assumptions, + } + ) + + confidence = (confidence or "").strip().lower() + errors.extend( + _validate_analysis_fields( + counterevidence=counterevidence, + confidence=confidence, + confidence_rationale=confidence_rationale, + severity_change_conditions=severity_change_conditions, + ) + ) fix_effort = (fix_effort or "").strip().lower() if fix_effort not in _VALID_FIX_EFFORT: @@ -209,28 +314,14 @@ async def _do_create( # noqa: PLR0912 f"Invalid fix_effort: {fix_effort!r}. Must be one of: {sorted(_VALID_FIX_EFFORT)}" ) - if not isinstance(cvss_breakdown, dict) or not cvss_breakdown: - errors.append("cvss_breakdown: must be an object with the 8 CVSS metrics") - cvss_breakdown = {} - else: - for name, valid in _CVSS_VALID.items(): - value = cvss_breakdown.get(name) - if value not in valid: - errors.append(f"Invalid {name}: {value}. Must be one of: {valid}") + errors.extend(_validate_cvss_breakdown(cvss_breakdown)) parsed_locations = _normalize_code_locations(code_locations) if parsed_locations: errors.extend(_validate_code_locations(parsed_locations)) - if cve: - cve = _extract_cve(cve) - cve_err = _validate_cve(cve) - if cve_err: - errors.append(cve_err) - if cwe: - cwe = _extract_cwe(cwe) - cwe_err = _validate_cwe(cwe) - if cwe_err: - errors.append(cwe_err) + errors.extend(_validate_fix_verification(parsed_locations, fix_verification)) + cve, cwe, identifier_errors = _validate_identifiers(cve, cwe) + errors.extend(identifier_errors) if errors: return {"success": False, "error": "Validation failed", "errors": errors} @@ -297,6 +388,10 @@ async def _do_create( # noqa: PLR0912 remediation_steps=remediation_steps, evidence=evidence, assumptions=assumptions, + counterevidence=counterevidence, + confidence=confidence, + confidence_rationale=confidence_rationale, + severity_change_conditions=severity_change_conditions, fix_effort=fix_effort, cvss=cvss_score, cvss_breakdown=cvss_breakdown, @@ -305,6 +400,7 @@ async def _do_create( # noqa: PLR0912 cve=cve, cwe=cwe, code_locations=parsed_locations, + fix_verification=fix_verification, fix_pr_body=fix_pr_body, agent_id=agent_id if isinstance(agent_id, str) else None, agent_name=agent_name if isinstance(agent_name, str) else None, @@ -357,6 +453,9 @@ async def create_vulnerability_report( remediation_steps: str, evidence: str, assumptions: str, + counterevidence: str, + confidence: str, + severity_change_conditions: str, fix_effort: str, cvss_breakdown: dict[str, str], endpoint: str | None = None, @@ -364,6 +463,8 @@ async def create_vulnerability_report( cve: str | None = None, cwe: str | None = None, code_locations: list[dict[str, Any]] | None = None, + confidence_rationale: str | None = None, + fix_verification: str | None = None, fix_pr_body: str | None = None, ) -> str: """File a vulnerability report — one report per fully-verified finding. @@ -411,6 +512,15 @@ async def create_vulnerability_report( get a ``duplicate_of`` response, do NOT retry — move on to other areas. + **Counterevidence pass (required before filing)**: actively build the + strongest case that this finding is NOT exploitable, or less severe + than you think — then record the result in ``counterevidence``, set + ``confidence`` honestly, and state what would move the severity in + ``severity_change_conditions``. These three fields are mandatory and + validated. A finding you could not execute is at best + ``confidence: medium``, with the gap named in + ``confidence_rationale``. + **Report output rules** (this content may be rendered into generated reports): @@ -563,6 +673,31 @@ async def create_vulnerability_report( assumptions: Short note on the assumptions/prerequisites that make this finding impactful or exploitable (e.g. "assumes an authenticated low-privilege user"). + counterevidence: REQUIRED. The strongest case *against* this + finding, after actively looking for it — the guard you might + have missed, the deployment constraint, the precondition. If + you genuinely found nothing, say what you checked (e.g. "no + input validation, WAF, or authorization check found on this + path; tested authenticated and unauthenticated"), not just + "none". A generic trust claim ("the framework escapes this") + is not counterevidence unless you confirmed that specific + call in this context. + confidence: REQUIRED. Your calibrated confidence that this is a + real, exploitable issue: ``high`` (working PoC against the + live target, or a complete reachable source→sink trace), + ``medium`` (strong static evidence you could not fully + execute), or ``low`` (plausible with a material unresolved + gap). Do not inflate — an accurate ``medium`` is more useful + than a ``high`` that fails triage. + confidence_rationale: Required when ``confidence`` is not + ``high``. Name the specific gap (e.g. "static-only trace, + could not stand up the service to reproduce"; "reachability + of this route from unauthenticated traffic unconfirmed"). + severity_change_conditions: REQUIRED. One concrete sentence on + what single piece of additional evidence would raise or + lower the severity (e.g. "confirmation this route is exposed + to unauthenticated internet traffic would raise this to + critical"). fix_effort: One of ``trivial`` / ``low`` / ``medium`` / ``high``. cvss_breakdown: 8-metric object per the format above. endpoint: API path / Git path (e.g. ``/api/login``). @@ -632,6 +767,40 @@ async def create_vulnerability_report( - Padding ``fix_before`` with surrounding context lines that aren't part of the fix. - Duplicating the same change across multiple locations. + fix_verification: REQUIRED whenever any ``code_locations`` entry + carries a ``fix_after``. A reviewer can apply that + suggestion with one click, so an unverified fix ships + straight into the codebase. Before writing this field, work + the gates **in order** and never trade an earlier one for a + later one: + + 1. **Security closure** — re-trace the source → sink path + through the *patched* code and state why it is now + blocked. Re-run the PoC against the fix if you can. + 2. **Bypass review** — re-read the diff *without* leaning on + the rationale that produced it. Name the sibling call + sites, equivalent sinks, and alternate malicious input + classes you checked, and try at least one. + 3. **Preserved behavior** — name the legitimate inputs, + public APIs, and error semantics that must keep working, + and confirm the patch leaves them intact. A fix that + breaks the feature is not a fix. + 4. **Repository checks** — run the narrowest relevant + syntax / type / lint / test check that covers the + changed lines. + + Then write what you did: the commands you ran and their + results, and every gate you could only reason about rather + than execute, marked explicitly as a gap. Do not claim a + gate passed because it looks right. If a gate fails, revise + the patch or drop ``fix_after`` and leave the location + informational — never compensate for a failed security + closure with a smaller diff or extra prose. + + Also use this field to record the narrowest-complete-change + judgement: prefer the smallest repository-native fix that + fully enforces the invariant, using existing helpers, with + no unrelated refactors folded in. fix_pr_body: Optional. When source is available and you have a concrete fix, a markdown PR-description body proposing the fix (summary + rationale). Prose/markdown only — the code @@ -672,6 +841,15 @@ async def create_vulnerability_report( remediation_steps: Context-encode all user input rendered into HTML; prefer the template engine's auto-escaping over string interpolation. + counterevidence: + No output encoding, CSP, or WAF observed on this response; + payload executed in a current browser. The parameter is + reflected on an unauthenticated route, so no privileged + position is required. + confidence: "high" + severity_change_conditions: + A restrictive CSP that blocks inline script execution would + reduce impact and lower the severity. fix_effort: "low" """ agent_id, agent_name = _caller_identity(ctx) @@ -687,6 +865,10 @@ async def create_vulnerability_report( remediation_steps=remediation_steps, evidence=evidence, assumptions=assumptions, + counterevidence=counterevidence, + confidence=confidence, + confidence_rationale=confidence_rationale, + severity_change_conditions=severity_change_conditions, fix_effort=fix_effort, cvss_breakdown=cvss_breakdown, endpoint=endpoint, @@ -694,6 +876,7 @@ async def create_vulnerability_report( cve=cve, cwe=cwe, code_locations=code_locations, + fix_verification=fix_verification, fix_pr_body=fix_pr_body, agent_id=agent_id, agent_name=agent_name, @@ -1327,6 +1510,7 @@ _REPORT_SUMMARY_FIELDS = ( "title", "severity", "cvss", + "confidence", "finding_class", "cve", "cwe", @@ -1528,8 +1712,8 @@ async def list_reports( findings, and build the ``finish_scan`` executive summary. By default each entry is compact: ``id``, ``title``, ``severity``, - ``cvss``, ``finding_class``, ``cve`` / ``cwe``, ``target`` / - ``endpoint``, ``fix_effort``, ``agent_name`` (who filed it), ``timestamp``, + ``cvss``, ``confidence``, ``finding_class``, ``cve`` / ``cwe``, + ``target`` / ``endpoint``, ``fix_effort``, ``agent_name`` (who filed it), ``timestamp``, plus a 280-char ``description_preview``. Entries you filed yourself are flagged ``by_you: true``. The response also carries ``total_count`` and ``severity_counts`` (counts per severity across all diff --git a/strix/tools/threat_model/__init__.py b/strix/tools/threat_model/__init__.py new file mode 100644 index 00000000..a20a924a --- /dev/null +++ b/strix/tools/threat_model/__init__.py @@ -0,0 +1 @@ +"""Repository-scoped threat model cache, reusable across scans of the same tree.""" diff --git a/strix/tools/threat_model/tools.py b/strix/tools/threat_model/tools.py new file mode 100644 index 00000000..ec5975c5 --- /dev/null +++ b/strix/tools/threat_model/tools.py @@ -0,0 +1,659 @@ +"""Target-scoped threat models — cached under ``~/.strix/threat-models``. + +A threat model describes the target, not the scan: a host, an application, an +API, a repository, or whatever else the engagement is pointed at. It stays +valid across unrelated runs against the same target, so it is keyed by target +identity rather than by run id — one agent derives it, every later agent in +this run and in future runs against the same target reads it back instead of +re-deriving trust boundaries from scratch. + +Where the target is a checkout, the model is additionally pinned to the git +revision, so a moved ``HEAD`` marks it stale. Black-box targets have no +revision to pin to; those age out instead. +""" + +from __future__ import annotations + +import asyncio +import hashlib +import json +import logging +import re +import subprocess +import tempfile +import threading +from datetime import UTC, datetime, timedelta +from pathlib import Path +from typing import Any +from urllib.parse import urlsplit + +from agents import RunContextWrapper, function_tool + +from strix.core.agents import AgentCoordinator + + +logger = logging.getLogger(__name__) + + +_CACHE_DIR = Path.home() / ".strix" / "threat-models" +_MAX_MODEL_BYTES = 512 * 1024 +_MIN_MODEL_CHARS = 400 +_MIN_AMENDMENT_CHARS = 80 +_MAX_AMENDMENTS = 40 +_GIT_TIMEOUT_SECONDS = 10 +_UNVERSIONED = "unversioned" +_MAX_AGE_DAYS = 14 +_DEFAULT_PORTS = {"http": "80", "https": "443"} +_cache_lock = threading.RLock() + +_REQUIRED_SECTIONS = ( + "overview", + "trust boundaries", + "attack surface", + "severity calibration", +) + + +def _git(repo: Path, args: list[str]) -> str | None: + try: + result = subprocess.run( # noqa: S603 + ["git", "-C", str(repo), *args], # noqa: S607 + capture_output=True, + text=True, + check=False, + timeout=_GIT_TIMEOUT_SECONDS, + ) + except (OSError, subprocess.SubprocessError): + logger.debug("git %s failed in %s", args, repo, exc_info=True) + return None + if result.returncode != 0: + return None + return result.stdout.strip() or None + + +def _local_directory(target: str) -> Path | None: + """Return the target as a local directory, or None if it is not one.""" + if "://" in target: + return None + try: + resolved = Path(target).expanduser().resolve() + except OSError: + return None + return resolved if resolved.is_dir() else None + + +def _remote_authority(target: str) -> str: + """The ``host[:port]`` a remote target lives on, or "" if it has none.""" + candidate = target if "://" in target else f"//{target}" + parts = urlsplit(candidate) + host = (parts.hostname or "").lower() + if not host: + return "" + scheme = (parts.scheme or "https").lower() + port = str(parts.port) if parts.port else _DEFAULT_PORTS.get(scheme, "") + return f"{host}:{port}" if port else host + + +def _normalize_remote_target(target: str) -> str: + """Collapse the spellings of one remote target onto a single cache key.""" + authority = _remote_authority(target) + if not authority: + return re.sub(r"\s+", " ", target.lower()).strip() + candidate = target if "://" in target else f"//{target}" + path = urlsplit(candidate).path.rstrip("/") + return f"{authority}{path}" + + +def _normalize_git_remote(remote: str) -> str: + """Collapse a git remote URL onto the same key its clone URL would produce. + + A remote reaches us in whichever spelling the clone used — + ``git@github.com:org/repo.git``, ``https://github.com/org/repo``, + ``ssh://git@github.com/org/repo.git`` — and each is the same repository. + Rewriting scp-style syntax into a URL and dropping the ``.git`` suffix and + any embedded credentials lets :func:`_normalize_remote_target` produce one + identity for all of them, and crucially the *same* identity a caller gets + when it names the repository by its remote URL rather than by a checkout + path. Without that, the model saved by an agent working in the checkout is + invisible to an agent that asks for the repository by URL, and the two + derive conflicting models of one target. + """ + candidate = remote.strip() + scp_style = re.match(r"^(?:[^@/]+@)?(?P[^:/]+):(?P.+)$", candidate) + if scp_style and "://" not in candidate: + candidate = f"https://{scp_style['host']}/{scp_style['path'].lstrip('/')}" + elif "://" in candidate: + # The transport a clone happened to use says nothing about which + # repository this is, and each scheme carries a different default + # port into the authority. Collapsing them all onto https keeps one + # repository on one key however it was cloned. + candidate = f"https://{candidate.split('://', 1)[1]}" + normalized = _normalize_remote_target(candidate) + return normalized.removesuffix(".git") + + +def _target_identity(target: str) -> tuple[str, str]: + """Return the (stable identity, revision) pair a cached model is keyed on. + + A checkout is keyed on its remote (so the same repository cloned to two + paths shares one model, and a subdirectory resolves to the whole tree) and + pinned to ``HEAD``. Everything else — a host, a URL, an API base, a named + scope — is keyed on its normalized form and carries no revision. Both + routes run through the same normalization, so a checkout and the URL it + was cloned from land on one key. + """ + directory = _local_directory(target) + if directory is None: + return _normalize_remote_target(target).removesuffix(".git"), _UNVERSIONED + remote = _git(directory, ["config", "--get", "remote.origin.url"]) + revision = _git(directory, ["rev-parse", "HEAD"]) or _UNVERSIONED + if remote: + return _normalize_git_remote(remote), revision + toplevel = _git(directory, ["rev-parse", "--show-toplevel"]) + return toplevel or str(directory), revision + + +def _cache_path(identity: str) -> Path: + digest = hashlib.sha256(identity.encode("utf-8")).hexdigest()[:16] + return _CACHE_DIR / f"{digest}.json" + + +def _snap_to_scan_target(raw: str, scan_targets: list[str]) -> str: + """Pull a target onto the scan's own spelling of it. + + Agents name the same target differently — one passes the URL it was given, + the next the page it happens to be testing, a third the checkout path. Left + alone those become separate cache keys, every lookup misses, and each agent + quietly derives its own model, which is the exact failure the shared model + exists to prevent. So a target that is recognisably one of the scan's own + targets is resolved to that target instead. + """ + identity, _ = _target_identity(raw) + scoped = [(target, _target_identity(target)[0]) for target in scan_targets] + if any(known == identity for _, known in scoped): + return raw + + authority = _remote_authority(raw) + if authority: + hosted = [target for target, _ in scoped if _remote_authority(target) == authority] + # Two scan targets on one host are distinguished only by their paths, + # so snapping to "the host" would merge two distinct models into one. + return hosted[0] if len(hosted) == 1 else raw + + directory = _local_directory(raw) + if directory is not None: + enclosing = [ + target + for target, known in scoped + if known == identity or _local_directory(target) == directory + ] + if enclosing: + return enclosing[0] + return raw + + +def _resolve_target( + target: str, scan_targets: list[str] | None = None +) -> tuple[str | None, str | None]: + raw = (target or "").strip() + known = [t for t in (scan_targets or []) if t.strip()] + if not raw: + if len(known) == 1: + return known[0], None + return None, ( + "target cannot be empty - pass the host, URL, application, or " + "repository path this model describes" + + (f". This scan is scoped to: {', '.join(known)}" if known else "") + ) + return (_snap_to_scan_target(raw, known) if known else raw), None + + +def _is_expired(created_at: str | None) -> bool: + if not created_at: + return True + try: + created = datetime.fromisoformat(created_at) + except ValueError: + return True + if created.tzinfo is None: + created = created.replace(tzinfo=UTC) + return datetime.now(UTC) - created > timedelta(days=_MAX_AGE_DAYS) + + +def _missing_sections(content: str) -> list[str]: + lowered = content.lower() + return [section for section in _REQUIRED_SECTIONS if section not in lowered] + + +def _read_cache(path: Path) -> dict[str, Any] | None: + """Load a cached model. Callers must already hold ``_cache_lock``.""" + if not path.is_file(): + return None + try: + cached = json.loads(path.read_text(encoding="utf-8")) + except (OSError, json.JSONDecodeError): + logger.exception("threat model cache at %s is unreadable", path) + return None + return cached if isinstance(cached, dict) else None + + +def _write_cache(path: Path, payload: dict[str, Any]) -> str | None: + """Atomically persist a model. Callers must already hold ``_cache_lock``.""" + try: + path.parent.mkdir(parents=True, exist_ok=True) + with tempfile.NamedTemporaryFile( + mode="w", + encoding="utf-8", + dir=str(path.parent), + prefix=f".{path.name}.", + suffix=".tmp", + delete=False, + ) as tmp: + tmp.write(json.dumps(payload, ensure_ascii=False)) + tmp_path = Path(tmp.name) + tmp_path.replace(path) + except OSError as exc: + logger.exception("threat model persist to %s failed", path) + return f"Failed to persist threat model: {exc}" + return None + + +def _amendments_of(cached: dict[str, Any]) -> list[dict[str, Any]]: + raw = cached.get("amendments") + if not isinstance(raw, list): + return [] + return [item for item in raw if isinstance(item, dict)] + + +def _not_found(identity: str, revision: str) -> dict[str, Any]: + return { + "success": True, + "found": False, + "target": identity, + "revision": revision, + "message": ( + "No threat model cached for this target. Derive one — from the code if " + "you have it, from recon output if you do not — and persist it with " + "save_threat_model, so every agent on this scan shares one view of the " + "trust boundaries instead of each inventing their own." + ), + } + + +def _staleness(cached: dict[str, Any], revision: str) -> tuple[bool, str | None]: + """Decide whether a cached model can still be trusted, and why not.""" + if revision != _UNVERSIONED: + if cached.get("revision") == revision: + return False, None + return True, ( + "This model was derived against a different revision. Use it as a " + "starting point, re-check the boundaries it names against the current " + "tree, and save the corrected version." + ) + created_at = cached.get("created_at") + if not _is_expired(created_at if isinstance(created_at, str) else None): + return False, None + return True, ( + f"This model is more than {_MAX_AGE_DAYS} days old and there is no revision " + "to pin it to, so the target may have moved under it. Treat its surface " + "inventory as a lead list to re-confirm during recon, not as fact, and save " + "the corrected version." + ) + + +def _get_impl(target: str, scan_targets: list[str] | None = None) -> dict[str, Any]: + resolved, error = _resolve_target(target, scan_targets) + if resolved is None: + return {"success": False, "error": error} + + identity, revision = _target_identity(resolved) + path = _cache_path(identity) + with _cache_lock: + cached = _read_cache(path) + if cached is None: + return _not_found(identity, revision) + content = cached.get("content") + if not isinstance(content, str) or not content.strip(): + return _not_found(identity, revision) + + stale, stale_message = _staleness(cached, revision) + result: dict[str, Any] = { + "success": True, + "found": True, + "target": identity, + "revision": revision, + "cached_revision": cached.get("revision"), + "created_at": cached.get("created_at"), + "stale": stale, + "content": content, + } + amendments = _amendments_of(cached) + if amendments: + result["amendments"] = amendments + result["amendments_note"] = ( + "Addenda recorded by agents after the base model was written. They " + "correct or extend it and have not been folded in yet - read them as " + "part of the model, and prefer the later one where they conflict." + ) + if stale_message: + result["message"] = stale_message + return result + + +def _save_impl( + target: str, + content: str, + agent_name: str | None, + scan_targets: list[str] | None = None, +) -> dict[str, Any]: + resolved, error = _resolve_target(target, scan_targets) + if resolved is None: + return {"success": False, "error": error} + + body = (content or "").strip() + if len(body) < _MIN_MODEL_CHARS: + return { + "success": False, + "error": ( + f"Threat model is too thin ({len(body)} chars). It has to be usable by " + "an agent seeing this target for the first time: what it is, who the " + "actors are, where the trust boundaries sit, which inputs are " + "attacker-controlled, and what a critical bug looks like here." + ), + } + if len(body.encode("utf-8")) > _MAX_MODEL_BYTES: + return {"success": False, "error": "Threat model exceeds 512KB; tighten it."} + + missing = _missing_sections(body) + if missing: + return { + "success": False, + "error": ( + "Threat model is missing required section(s): " + f"{', '.join(missing)}. Cover Overview, Trust Boundaries and " + "Assumptions, Attack Surface and Attacker Stories, and Severity " + "Calibration." + ), + } + + identity, revision = _target_identity(resolved) + path = _cache_path(identity) + payload: dict[str, Any] = { + "target": identity, + "revision": revision, + "created_at": datetime.now(UTC).isoformat(), + "created_by": agent_name, + "content": body, + } + with _cache_lock: + existing = _read_cache(path) + folded = len(_amendments_of(existing)) if existing else 0 + error = _write_cache(path, payload) + if error: + return {"success": False, "error": error} + + message = ( + "Threat model saved. Subagents should call get_threat_model before they " + "start, and treat its trust boundaries as the shared baseline." + ) + if folded: + message += ( + f" This replaced a model carrying {folded} amendment(s), which are now " + "cleared - make sure what they said survives in the text you just wrote." + ) + return { + "success": True, + "target": identity, + "revision": revision, + "amendments_cleared": folded, + "message": message, + } + + +def _append_amendment( + path: Path, amendment: dict[str, Any] +) -> tuple[list[dict[str, Any]] | None, str | None]: + """Add an amendment to the cached model. Returns (amendments, error).""" + with _cache_lock: + cached = _read_cache(path) + if cached is None or not str(cached.get("content", "")).strip(): + return None, ( + "No threat model exists for this target yet, so there is nothing to " + "amend. Derive the base model and call save_threat_model instead." + ) + amendments = _amendments_of(cached) + if len(amendments) >= _MAX_AMENDMENTS: + return None, ( + f"This model already carries {len(amendments)} amendments. Fold them " + "into the base model with save_threat_model before adding more." + ) + amendments.append(amendment) + cached["amendments"] = amendments + if len(json.dumps(cached, ensure_ascii=False).encode("utf-8")) > _MAX_MODEL_BYTES: + return None, "Threat model with this amendment exceeds 512KB; tighten it." + return amendments, _write_cache(path, cached) + + +def _amend_impl( + target: str, + addendum: str, + agent_name: str | None, + scan_targets: list[str] | None = None, +) -> dict[str, Any]: + resolved, error = _resolve_target(target, scan_targets) + if resolved is None: + return {"success": False, "error": error} + + body = (addendum or "").strip() + if len(body) < _MIN_AMENDMENT_CHARS: + return { + "success": False, + "error": ( + f"Amendment is too thin ({len(body)} chars). Say what the base model " + "got wrong or left out, and name the endpoint, host, file, or control " + "that makes your correction true." + ), + } + + identity, revision = _target_identity(resolved) + amendments, amend_error = _append_amendment( + _cache_path(identity), + { + "at": datetime.now(UTC).isoformat(), + "by": agent_name, + "revision": revision, + "content": body, + }, + ) + if amendments is None or amend_error: + return {"success": False, "error": amend_error} + + return { + "success": True, + "target": identity, + "revision": revision, + "amendment_count": len(amendments), + "message": ( + "Amendment recorded. Agents calling get_threat_model will now see it " + "alongside the base model." + ), + } + + +def _caller_agent_name(ctx: RunContextWrapper) -> str | None: + inner = ctx.context if isinstance(ctx.context, dict) else {} + agent_id = inner.get("agent_id") + coordinator = inner.get("coordinator") + if not isinstance(agent_id, str) or not isinstance(coordinator, AgentCoordinator): + return None + return coordinator.names.get(agent_id) + + +def _scan_targets(ctx: RunContextWrapper) -> list[str]: + """The targets this scan was authorized against, as the runner spelled them.""" + inner = ctx.context if isinstance(ctx.context, dict) else {} + targets = inner.get("scan_targets") + if not isinstance(targets, list): + return [] + return [target for target in targets if isinstance(target, str) and target.strip()] + + +@function_tool(timeout=30) +async def get_threat_model(ctx: RunContextWrapper, target: str) -> str: + """Read the cached threat model for a target, if one exists. + + A threat model belongs to the target, not to this scan — the same + trust boundaries hold across unrelated runs against the same host + or application. Call this before you start hunting so you inherit + the shared view instead of re-deriving it, and so every agent on + this run agrees on what "attacker-controlled" means here. + + Works black-box or white-box. The target can be a host, a URL, an + API base, or a repository path; equivalent spellings of the same + host resolve to the same model, and a checkout resolves to its + remote, so a model derived white-box is read back by a black-box + agent testing the deployment. + + Returns ``found: false`` when nothing is cached — derive one and + persist it with ``save_threat_model``. ``stale: true`` means the + checkout moved to a different revision, or that a model with no + revision to pin to has aged out: use it as a starting point, + re-confirm what it claims, and save the corrected version. + + Any ``amendments`` in the response are corrections other agents + recorded after the base model was written. They are part of the + model — read them, and prefer the later statement where one + contradicts the base text. + + Args: + target: What the model describes — a host or URL + (``https://app.example.com``), or a repository path + (``/workspace/myrepo``). Use the same value the scan was + pointed at, so agents converge on one model. + """ + return json.dumps( + await asyncio.to_thread(_get_impl, target, _scan_targets(ctx)), + ensure_ascii=False, + default=str, + ) + + +@function_tool(timeout=30) +async def save_threat_model(ctx: RunContextWrapper, target: str, content: str) -> str: + """Persist a target-scoped threat model for reuse by other agents. + + Keyed by target identity, so a later scan of the same host or tree + reads it back instead of paying to derive it again. + + **This replaces the whole document, and clears any amendments** — + it is for the agent establishing the baseline (normally root, + before subagents start), or for folding accumulated amendments back + into the body. If a model already exists and you only need to + correct or extend part of it, call ``amend_threat_model`` instead; + saving over it will silently discard whatever other agents added. + + **Write it from whatever evidence you have.** With source, ground + it in the code and name the files, entrypoints, and controls that + make each claim true. Black-box, ground it in recon: the hosts and + ports that answered, the technology fingerprints, the observed + roles and tenants, the authentication and session model, the + endpoints and parameters you enumerated. A black-box model is + necessarily provisional — say which parts are inferred rather than + observed, and let later agents amend it as the picture fills in. + + **Scope it to the target, not to this scan.** Do not centre it on + the diff you were handed, the subsystem you were assigned, or the + one host that happened to answer first. With source, distinguish + real product and runtime surfaces from test, docs, example, and + developer-tooling paths — in a monorepo, do not let ``tests/`` or + one-off scripts become the centre of gravity unless the code shows + they are genuinely deployed. Where the target documents its own + boundary — an ``AGENTS`` file, a specific ``SECURITY.md``, a + published API spec, an engagement scope — build on it rather than + inventing a competing story. + + Structure the content in Markdown with these sections: + + - **Overview** — what the target actually is, its real-world usage, + and which parts are product/runtime versus tooling or + non-production. + - **Trust Boundaries and Assumptions** — the boundaries, the actors + on either side, and the invariants that must hold. Separate + attacker-controlled, operator-controlled, and + developer-controlled inputs explicitly. Black-box, this is the + role, tenant, and privilege model: who can reach what before + authenticating, as a low-privilege user, and across tenants. + - **Attack Surface and Attacker Stories** — the exposed surfaces + (hosts, endpoints, parameters, integrations, or the code-level + entrypoints and sinks), the mitigations already present that + materially change severity or reach, realistic attacker stories, + and the stories that are *not* realistic here and why. + - **Severity Calibration** — what critical / high / medium / low + look like for *this* target, with a concrete example at each + level. Where a vulnerability class needs attacker control that + does not exist in real usage, say so here. + + Args: + target: What the model describes — a host or URL + (``https://app.example.com``), or a repository path + (``/workspace/myrepo``). Use the same value the scan was + pointed at. + content: The full threat model in Markdown. + """ + return json.dumps( + await asyncio.to_thread( + _save_impl, target, content, _caller_agent_name(ctx), _scan_targets(ctx) + ), + ensure_ascii=False, + default=str, + ) + + +@function_tool(timeout=30) +async def amend_threat_model(ctx: RunContextWrapper, target: str, addendum: str) -> str: + """Correct or extend the existing threat model without replacing it. + + The baseline is written before anyone starts hunting, so it is + written with the least information anyone will ever have. That is + doubly true black-box, where the model starts as inference over + recon output and only becomes real as agents authenticate, map + roles, and reach the surfaces behind them. When your work + contradicts the model or fills in something it missed, record that + here — every agent that calls ``get_threat_model`` afterwards sees + your addendum next to the base model. + + Amendments are append-only and attributed, so two agents amending + at once both survive. That is the difference from + ``save_threat_model``, which overwrites the document and drops + every amendment on it. + + Worth amending: + + - A boundary the model calls trusted that you found is + attacker-reachable, or vice versa. + - A host, endpoint, parameter, role, sink, or shared control the + model does not mention. + - Something the model only inferred that you have now observed — or + that turned out not to be true. + - A severity call the model got wrong for this target, with the + reason. + - An assumption you disproved — the model says input is validated + upstream and you found the path that skips it. + + Not worth amending: individual findings (those are reports), or + restating what the model already says. + + Args: + target: What the model describes — the same host, URL, or + repository path used to save it. + addendum: The correction, in Markdown. State what the base + model says, what is actually true, and the endpoint, host, + file, or control that proves it. + """ + return json.dumps( + await asyncio.to_thread( + _amend_impl, target, addendum, _caller_agent_name(ctx), _scan_targets(ctx) + ), + ensure_ascii=False, + default=str, + ) diff --git a/tests/test_agent_tool_registration.py b/tests/test_agent_tool_registration.py index 7d002bdc..12f88f74 100644 --- a/tests/test_agent_tool_registration.py +++ b/tests/test_agent_tool_registration.py @@ -112,3 +112,19 @@ def test_wait_for_agents_is_available_in_both_modes() -> None: for interactive in (True, False): agent = factory.build_strix_agent(is_root=True, interactive=interactive) assert "wait_for_agents" in [t.name for t in agent.tools] + + +def test_strict_tool_schemas_can_be_disabled_per_route() -> None: + """Claude routes cap strict tools; the toolset must be sendable without strict.""" + agent = factory.build_strix_agent(is_root=True, strict_tool_schemas=False) + + function_tools = [t for t in agent.tools if isinstance(t, FunctionTool)] + assert function_tools + assert not any(t.strict_json_schema for t in function_tools) + + +def test_disabling_strict_leaves_shared_tools_untouched() -> None: + factory.build_strix_agent(is_root=True, strict_tool_schemas=False) + agent = factory.build_strix_agent(is_root=True) + + assert any(t.strict_json_schema for t in agent.tools if isinstance(t, FunctionTool)) diff --git a/tests/test_caido_bootstrap.py b/tests/test_caido_bootstrap.py new file mode 100644 index 00000000..98e42a94 --- /dev/null +++ b/tests/test_caido_bootstrap.py @@ -0,0 +1,81 @@ +"""A bootstrap that dies mid-setup must not leave its transport behind. + +The bootstrap now runs concurrently with the scan start, so teardown can +cancel it at any await — including inside ``Client.connect()``, where the +client exists but no caller will ever see it to close it. +""" + +from __future__ import annotations + +import asyncio +import sys +import types +from typing import Any + +import pytest + +from strix.runtime.caido_bootstrap import bootstrap_caido + + +class _FakeExecResult: + stderr = b"" + exit_code = 0 + + def __init__(self, stdout: str) -> None: + self.stdout = stdout + + def ok(self) -> bool: + return True + + +class _FakeSession: + async def exec(self, *_args: Any, **_kwargs: Any) -> _FakeExecResult: + return _FakeExecResult('{"data":{"loginAsGuest":{"token":{"accessToken":"t"}}}}') + + +class _FakeClient: + def __init__(self, connect_error: BaseException) -> None: + self.connect_error = connect_error + self.closed = False + + async def connect(self) -> None: + raise self.connect_error + + async def aclose(self) -> None: + self.closed = True + + +async def _bootstrap_expecting( + monkeypatch: pytest.MonkeyPatch, error: BaseException +) -> _FakeClient: + """Run a bootstrap whose ``connect()`` fails with ``error``.""" + client = _FakeClient(error) + # The SDK is imported inside bootstrap_caido (it is slow to import), so the + # fakes are injected as the modules it imports. + sdk = types.ModuleType("caido_sdk_client") + sdk.Client = lambda *_a, **_k: client # type: ignore[attr-defined] + sdk.TokenAuthOptions = lambda token: token # type: ignore[attr-defined] + sdk_types = types.ModuleType("caido_sdk_client.types") + sdk_types.CreateProjectOptions = lambda **_k: None # type: ignore[attr-defined] + monkeypatch.setitem(sys.modules, "caido_sdk_client", sdk) + monkeypatch.setitem(sys.modules, "caido_sdk_client.types", sdk_types) + + with pytest.raises(type(error)): + await bootstrap_caido( + _FakeSession(), # type: ignore[arg-type] + host_url="http://host", + container_url="http://container", + ) + return client + + +async def test_cancellation_during_connect_closes_the_client( + monkeypatch: pytest.MonkeyPatch, +) -> None: + client = await _bootstrap_expecting(monkeypatch, asyncio.CancelledError()) + assert client.closed + + +async def test_failed_connect_closes_the_client(monkeypatch: pytest.MonkeyPatch) -> None: + client = await _bootstrap_expecting(monkeypatch, RuntimeError("no listener")) + assert client.closed diff --git a/tests/test_caido_handle.py b/tests/test_caido_handle.py new file mode 100644 index 00000000..84d8ce8a --- /dev/null +++ b/tests/test_caido_handle.py @@ -0,0 +1,103 @@ +"""Tests for the concurrent Caido bootstrap handle.""" + +from __future__ import annotations + +import asyncio +from typing import Any + +import pytest + +from strix.runtime.caido_handle import CaidoBootstrapHandle + + +class _FakeClient: + def __init__(self) -> None: + self.closed = False + + async def aclose(self) -> None: + self.closed = True + + +def _handle(coro: Any) -> CaidoBootstrapHandle: + return CaidoBootstrapHandle(asyncio.ensure_future(coro)) + + +async def test_get_waits_for_the_bootstrap() -> None: + client = _FakeClient() + started = asyncio.Event() + + async def _bootstrap() -> Any: + started.set() + await asyncio.sleep(0.01) + return client + + handle = _handle(_bootstrap()) + await started.wait() + assert handle.peek() is None + assert await handle.get() is client + assert handle.peek() is client + + +async def test_get_reraises_bootstrap_failure_to_every_caller() -> None: + async def _bootstrap() -> Any: + raise RuntimeError("caido never came up") + + handle = _handle(_bootstrap()) + for _ in range(2): + with pytest.raises(RuntimeError, match="caido never came up"): + await handle.get() + assert handle.peek() is None + + +async def test_caller_cancellation_does_not_cancel_the_shared_bootstrap() -> None: + client = _FakeClient() + + async def _bootstrap() -> Any: + await asyncio.sleep(0.05) + return client + + handle = _handle(_bootstrap()) + + with pytest.raises(TimeoutError): + await asyncio.wait_for(handle.get(), timeout=0.01) + + assert await handle.get() is client + + +async def test_aclose_closes_a_finished_client() -> None: + client = _FakeClient() + + async def _bootstrap() -> Any: + return client + + handle = _handle(_bootstrap()) + await handle.get() + await handle.aclose() + assert client.closed is True + + +async def test_aclose_cancels_an_in_flight_bootstrap() -> None: + cancelled = asyncio.Event() + + async def _bootstrap() -> Any: + try: + await asyncio.sleep(10) + except asyncio.CancelledError: + cancelled.set() + raise + return _FakeClient() + + handle = _handle(_bootstrap()) + await asyncio.sleep(0) + await handle.aclose() + assert cancelled.is_set() + + +async def test_aclose_swallows_a_failed_bootstrap() -> None: + async def _bootstrap() -> Any: + raise RuntimeError("boom") + + handle = _handle(_bootstrap()) + with pytest.raises(RuntimeError, match="boom"): + await handle.get() + await handle.aclose() diff --git a/tests/test_cli_target_list.py b/tests/test_cli_target_list.py index 9372ce5e..6ba4ca22 100644 --- a/tests/test_cli_target_list.py +++ b/tests/test_cli_target_list.py @@ -227,3 +227,18 @@ def test_resume_still_requires_targets_or_a_workspace( cli_main.parse_arguments() assert "has no targets_info" in capsys.readouterr().err + +def test_resume_non_object_run_json_exits(tmp_path: Path, monkeypatch: pytest.MonkeyPatch, capsys: pytest.CaptureFixture[str]) -> None: + monkeypatch.chdir(tmp_path) + run_dir = tmp_path / "strix_runs" / "pentest_abcd" + run_dir.mkdir(parents=True) + (run_dir / "run.json").write_text("[]", encoding="utf-8") + + monkeypatch.setattr(sys, "argv", ["strix", "--resume", "pentest_abcd"]) + with pytest.raises(SystemExit) as exc_info: + cli_main.parse_arguments() + + assert exc_info.value.code == 2 + captured = capsys.readouterr() + assert "run.json unreadable" in captured.err + assert "not an object" in captured.err diff --git a/tests/test_context_budget.py b/tests/test_context_budget.py index a9a48e0c..8c06fa49 100644 --- a/tests/test_context_budget.py +++ b/tests/test_context_budget.py @@ -31,7 +31,7 @@ def test_context_window_chatgpt_prefix_skips_provider_auth( calls.append(model) return {"max_input_tokens": 1_050_000, "max_output_tokens": 128_000} - monkeypatch.setattr("strix.llm.context_budget.litellm.get_model_info", _model_info) + monkeypatch.setattr("litellm.get_model_info", _model_info) try: assert context_budget.context_window("chatgpt/gpt-5.6-luna") == 1_050_000 assert calls == ["gpt-5.6-luna"] @@ -45,7 +45,7 @@ def test_context_window_unmapped_uses_fallback(monkeypatch: pytest.MonkeyPatch) def _raise(_model: str) -> dict[str, int]: raise ValueError("This model isn't mapped yet.") - monkeypatch.setattr("strix.llm.context_budget.litellm.get_model_info", _raise) + monkeypatch.setattr("litellm.get_model_info", _raise) expected = load_settings().context.fallback_context_tokens assert context_budget.context_window("totally-made-up-model") == expected context_budget._model_info.cache_clear() @@ -55,7 +55,7 @@ def test_count_tokens_fallback_on_error(monkeypatch: pytest.MonkeyPatch) -> None def _raise(**_kwargs: object) -> int: raise RuntimeError("no tokenizer") - monkeypatch.setattr("strix.llm.context_budget.litellm.token_counter", _raise) + monkeypatch.setattr("litellm.token_counter", _raise) # Falls back to UTF-8 byte length (upper bound on tokens). assert context_budget.count_tokens("weird-model", "x" * 400) == 400 assert context_budget.count_tokens("weird-model", "😀" * 10) == 40 diff --git a/tests/test_coverage_tool.py b/tests/test_coverage_tool.py new file mode 100644 index 00000000..3061dd89 --- /dev/null +++ b/tests/test_coverage_tool.py @@ -0,0 +1,284 @@ +"""Tests for the scan coverage ledger.""" + +from __future__ import annotations + +import json +import threading +from concurrent.futures import ThreadPoolExecutor +from typing import TYPE_CHECKING, Any + +import pytest + +from strix.tools.coverage.tools import ( + _list_impl, + _record_impl, + _update_impl, + get_coverage_entries, + hydrate_coverage_from_disk, + outcome_counts, +) + + +if TYPE_CHECKING: + from pathlib import Path + + +@pytest.fixture(autouse=True) +def coverage_store(tmp_path: Path) -> Path: + hydrate_coverage_from_disk(tmp_path) + return tmp_path + + +def _record(**overrides: str) -> dict[str, Any]: + kwargs = { + "surface": "POST /api/orders/{id}", + "risk_area": "object-level authorization", + "outcome": "no_issue_found", + "evidence": "Tested with two tenants; both received 403.", + "agent_id": "agent-1", + "agent_name": "authz-tester", + } + kwargs.update(overrides) + return _record_impl(**kwargs) + + +def test_record_persists_entry(coverage_store: Path) -> None: + result = _record() + assert result["success"] is True + + entries = get_coverage_entries() + assert len(entries) == 1 + assert entries[0]["surface"] == "POST /api/orders/{id}" + assert entries[0]["outcome"] == "no_issue_found" + assert entries[0]["agent_name"] == "authz-tester" + assert (coverage_store / "coverage.json").exists() + + +def test_record_normalizes_outcome() -> None: + assert _record(outcome="Needs Follow-Up")["success"] is True + assert get_coverage_entries()[0]["outcome"] == "needs_follow_up" + + +def test_record_rejects_unknown_outcome() -> None: + result = _record(outcome="looks fine") + assert result["success"] is False + assert any("Invalid outcome" in e for e in result["errors"]) + assert not get_coverage_entries() + + +def test_record_requires_surface_and_risk_area() -> None: + result = _record(surface=" ", risk_area="") + assert result["success"] is False + joined = " ".join(result["errors"]) + assert "surface" in joined + assert "risk_area" in joined + + +@pytest.mark.parametrize("outcome", ["ruled_out", "not_applicable", "needs_follow_up"]) +def test_evidence_required_for_asserted_outcomes(outcome: str) -> None: + result = _record(outcome=outcome, evidence=" ") + assert result["success"] is False + assert any("evidence is required" in e for e in result["errors"]) + + +def test_evidence_optional_for_reported() -> None: + assert _record(outcome="reported", evidence="")["success"] is True + + +def test_outcome_counts_and_filtering() -> None: + _record(surface="/login", outcome="reported", evidence="") + _record(surface="/search", outcome="no_issue_found") + _record(surface="/upload", outcome="needs_follow_up", evidence="No credentials to test.") + + assert outcome_counts() == {"reported": 1, "no_issue_found": 1, "needs_follow_up": 1} + + listed = _list_impl(outcome="needs_follow_up", surface=None, caller_agent_id="agent-1") + assert listed["filtered_count"] == 1 + assert listed["entries"][0]["surface"] == "/upload" + assert listed["entries"][0]["by_you"] is True + + by_surface = _list_impl(outcome=None, surface="sea", caller_agent_id=None) + assert by_surface["filtered_count"] == 1 + assert by_surface["entries"][0]["surface"] == "/search" + + +def test_list_rejects_unknown_outcome_filter() -> None: + result = _list_impl(outcome="bogus", surface=None, caller_agent_id=None) + assert result["success"] is False + + +def test_hydrate_reloads_from_disk(coverage_store: Path) -> None: + _record() + hydrate_coverage_from_disk(coverage_store) + entries = get_coverage_entries() + assert len(entries) == 1 + assert entries[0]["risk_area"] == "object-level authorization" + + +def _update(entry_id: str, **overrides: str) -> dict[str, Any]: + kwargs = { + "entry_id": entry_id, + "outcome": "reported", + "evidence": "Got staging credentials and confirmed the IDOR.", + "agent_id": "agent-2", + "agent_name": "followup-tester", + } + kwargs.update(overrides) + return _update_impl(**kwargs) + + +def test_update_moves_outcome_and_keeps_history() -> None: + recorded = _record(outcome="needs_follow_up", evidence="No credentials to test.") + entry_id = str(recorded["entry_id"]) + + result = _update(entry_id) + + assert result["success"] is True + assert result["previous_outcome"] == "needs_follow_up" + assert result["outcome"] == "reported" + + entries = get_coverage_entries() + assert len(entries) == 1, "update must not create a parallel entry" + entry = entries[0] + assert entry["outcome"] == "reported" + assert entry["agent_name"] == "followup-tester" + assert entry["history"] == [ + { + "outcome": "needs_follow_up", + "recorded_at": entry["created_at"], + "evidence": "No credentials to test.", + "agent_name": "authz-tester", + } + ] + assert outcome_counts() == {"reported": 1} + + +def test_update_can_reopen_a_closed_entry() -> None: + recorded = _record(outcome="ruled_out", evidence="Guard at auth.py:40 covers the path.") + entry_id = str(recorded["entry_id"]) + + _update( + entry_id, + outcome="needs_follow_up", + evidence="The guard is skipped on the /v2 alias; reachability unproven.", + ) + + assert outcome_counts() == {"needs_follow_up": 1} + listed = _list_impl(outcome=None, surface=None, caller_agent_id=None) + assert listed["entries"][0]["previous_outcomes"] == ["ruled_out"] + + +def test_update_enforces_evidence_for_closing_outcomes() -> None: + entry_id = str(_record(outcome="needs_follow_up", evidence="unknown")["entry_id"]) + + result = _update(entry_id, outcome="ruled_out", evidence=" ") + + assert result["success"] is False + assert get_coverage_entries()[0]["outcome"] == "needs_follow_up" + + +def test_update_rejects_unknown_entry() -> None: + result = _update("nope") + assert result["success"] is False + assert "list_coverage" in str(result["error"]) + + +def test_update_persists_to_disk(coverage_store: Path) -> None: + entry_id = str(_record(outcome="needs_follow_up", evidence="No creds.")["entry_id"]) + _update(entry_id) + + hydrate_coverage_from_disk(coverage_store) + + entry = get_coverage_entries()[0] + assert entry["outcome"] == "reported" + assert len(entry["history"]) == 1 + + +def test_recording_a_duplicate_surface_is_refused_with_the_existing_id() -> None: + first = _record_impl( + surface="/api/invoices", + risk_area="IDOR", + outcome="needs_follow_up", + evidence="No second tenant account to test cross-tenant reads with.", + agent_id="a1", + agent_name="Recon", + ) + + duplicate = _record_impl( + surface=" /API/Invoices ", + risk_area="idor", + outcome="reported", + evidence="Cross-tenant read confirmed.", + agent_id="a2", + agent_name="Authz", + ) + + assert duplicate["success"] is False + assert duplicate["existing_entry_id"] == first["entry_id"] + assert duplicate["existing_outcome"] == "needs_follow_up" + assert "update_coverage" in duplicate["error"] + assert len(get_coverage_entries()) == 1 + + +def test_a_different_risk_area_on_one_surface_is_still_its_own_entry() -> None: + _record_impl( + surface="/api/invoices", + risk_area="IDOR", + outcome="no_issue_found", + evidence="Tenant id read from the session.", + agent_id="a1", + agent_name="Authz", + ) + second = _record_impl( + surface="/api/invoices", + risk_area="SQL injection", + outcome="no_issue_found", + evidence="Parameterized throughout.", + agent_id="a1", + agent_name="Injection", + ) + + assert second["success"] is True + assert len(get_coverage_entries()) == 2 + + +def test_concurrent_records_of_one_surface_yield_a_single_row() -> None: + """Duplicate detection and insertion must be one critical section. + + Two agents recording the same surface at the same moment would otherwise + both pass the "no duplicate" check, and the report would show a stale + conclusion beside its replacement — the exact outcome the rejection exists + to prevent. + """ + barrier = threading.Barrier(8) + + def attempt(index: int) -> dict[str, Any]: + barrier.wait() + return _record(agent_id=f"agent-{index}", agent_name=f"tester-{index}") + + with ThreadPoolExecutor(max_workers=8) as pool: + results = list(pool.map(attempt, range(8))) + + assert sum(1 for result in results if result["success"]) == 1 + assert len(get_coverage_entries()) == 1 + + +def test_concurrent_records_all_survive_persistence(coverage_store: Path) -> None: + """A writer holding an older snapshot must not win the rename. + + If it did, the mirror would come back short on resume and coverage + recorded before a crash would silently disappear from the report. + """ + barrier = threading.Barrier(8) + + def attempt(index: int) -> dict[str, Any]: + barrier.wait() + return _record(surface=f"GET /api/resource/{index}", agent_id=f"agent-{index}") + + with ThreadPoolExecutor(max_workers=8) as pool: + list(pool.map(attempt, range(8))) + + persisted = json.loads((coverage_store / "coverage.json").read_text(encoding="utf-8")) + assert len(persisted) == 8 + hydrate_coverage_from_disk(coverage_store) + assert len(get_coverage_entries()) == 8 diff --git a/tests/test_finish_coverage_gate.py b/tests/test_finish_coverage_gate.py new file mode 100644 index 00000000..52a19a7d --- /dev/null +++ b/tests/test_finish_coverage_gate.py @@ -0,0 +1,65 @@ +"""finish_scan confronts the root agent with the coverage the runtime can see.""" + +from __future__ import annotations + +from typing import TYPE_CHECKING + +import pytest + +from strix.tools.coverage.tools import _record_impl, hydrate_coverage_from_disk +from strix.tools.finish.tool import _coverage_summary + + +if TYPE_CHECKING: + from pathlib import Path + + +_GRAPH = { + "statuses": {"agent-1": "completed"}, + "names": {"agent-1": "injection-tester"}, + "metadata": {"agent-1": {"skills": ["sql_injection", "xss"]}}, +} + + +@pytest.fixture(autouse=True) +def _empty_ledger(tmp_path: Path) -> None: + hydrate_coverage_from_disk(tmp_path) + + +def _record(risk_area: str) -> None: + _record_impl( + surface="POST /api/orders/{id}", + risk_area=risk_area, + outcome="no_issue_found", + evidence="Parameters fuzzed; no anomalies.", + agent_id="agent-1", + agent_name="injection-tester", + ) + + +def test_unrecorded_risk_class_is_reported_back_to_the_root_agent() -> None: + _record("SQL injection") + + summary = _coverage_summary(_GRAPH) + + assert summary["coverage_recorded"] == 1 + assert len(summary["coverage_gaps"]) == 1 + assert "xss" in summary["coverage_gaps"][0] + assert "unexamined" in summary["coverage_gap_warning"] + + +def test_fully_accounted_coverage_raises_no_gap_warning() -> None: + _record("SQL injection") + _record("cross-site scripting") + + summary = _coverage_summary(_GRAPH) + + assert "coverage_gaps" not in summary + assert "coverage_gap_warning" not in summary + + +def test_an_empty_ledger_still_warns_first() -> None: + summary = _coverage_summary(_GRAPH) + + assert summary["coverage_recorded"] == 0 + assert "No coverage was recorded" in summary["coverage_warning"] diff --git a/tests/test_inputs.py b/tests/test_inputs.py index 2ff9a603..e12c56c5 100644 --- a/tests/test_inputs.py +++ b/tests/test_inputs.py @@ -10,6 +10,7 @@ import pytest from strix.core.inputs import ( build_root_task, + build_scan_targets, build_scope_context, child_initial_input, make_model_settings, @@ -363,6 +364,35 @@ def test_make_model_settings_timeout_survives_reasoning_resolve() -> None: assert settings.extra_args["timeout"] == 120.0 +def test_scan_targets_prefer_the_workspace_checkout_over_the_remote_url() -> None: + config = { + "targets": [ + { + "type": "repository", + "details": { + "target_repo": "https://github.com/acme/billing", + "workspace_subdir": "billing", + }, + }, + {"type": "web_application", "details": {"target_url": "https://app.example.com"}}, + ] + } + + assert build_scan_targets(config) == ["/workspace/billing", "https://app.example.com"] + + +def test_scan_targets_drop_empty_and_duplicate_entries() -> None: + config = { + "targets": [ + {"type": "web_application", "details": {"target_url": "https://app.example.com"}}, + {"type": "web_application", "details": {"target_url": "https://app.example.com"}}, + {"type": "ip_address", "details": {}}, + ] + } + + assert build_scan_targets(config) == ["https://app.example.com"] + + def test_openrouter_attribution_rides_on_the_request_headers() -> None: # litellm.headers is ignored once a request carries any header of its own, # so the attribution must be part of the per-request headers. diff --git a/tests/test_models.py b/tests/test_models.py index 10b01cc5..04bb2875 100644 --- a/tests/test_models.py +++ b/tests/test_models.py @@ -9,6 +9,7 @@ from strix.config.models import ( RECOMMENDED_MODEL_NAMES, is_recommended_or_frontier_model, request_timeout_extra_args, + supports_strict_tool_schemas, ) @@ -90,3 +91,24 @@ def test_frontier_model_families_are_accepted(model_name: str) -> None: ) def test_non_frontier_models_are_rejected(model_name: str) -> None: assert not is_recommended_or_frontier_model(model_name) + + +@pytest.mark.parametrize( + "model_name", + [ + "anthropic/claude-sonnet-4-6", + "bedrock/anthropic.claude-opus-4-8-v1:0", + "vertex_ai/claude-sonnet-5", + "Sonnet-5", + ], +) +def test_claude_routes_reject_strict_tool_schemas(model_name: str) -> None: + assert not supports_strict_tool_schemas(model_name) + + +@pytest.mark.parametrize( + "model_name", + ["openai/gpt-5.4", "gpt-5.4", "gemini/gemini-3.1-pro-preview", "deepseek/deepseek-v4"], +) +def test_other_routes_keep_strict_tool_schemas(model_name: str) -> None: + assert supports_strict_tool_schemas(model_name) diff --git a/tests/test_proxy_client.py b/tests/test_proxy_client.py index da54af66..1a3aa849 100644 --- a/tests/test_proxy_client.py +++ b/tests/test_proxy_client.py @@ -13,6 +13,7 @@ from typing import TYPE_CHECKING, Any, cast import pytest +from strix.runtime.caido_handle import CaidoBootstrapHandle from strix.tools.proxy import caido_api, tools @@ -198,12 +199,31 @@ class _Ctx: self.context = context -def test_ctx_client_returns_client_when_present() -> None: +async def test_ctx_client_returns_client_when_present() -> None: client = _FakeClient("host") - got = tools._ctx_client(cast("Any", _Ctx({"caido_client": client}))) + got = await tools._ctx_client(cast("Any", _Ctx({"caido_client": client}))) assert got is client -def test_ctx_client_returns_none_without_client() -> None: - assert tools._ctx_client(cast("Any", _Ctx({}))) is None - assert tools._ctx_client(cast("Any", _Ctx(None))) is None +async def test_ctx_client_returns_none_without_client() -> None: + assert await tools._ctx_client(cast("Any", _Ctx({}))) is None + assert await tools._ctx_client(cast("Any", _Ctx(None))) is None + + +async def test_ctx_client_resolves_bootstrap_handle() -> None: + client = _FakeClient("host") + + async def _bootstrap() -> Any: + return client + + handle = CaidoBootstrapHandle(asyncio.ensure_future(_bootstrap())) + got = await tools._ctx_client(cast("Any", _Ctx({"caido_client": handle}))) + assert got is client + + +async def test_ctx_client_degrades_when_bootstrap_failed() -> None: + async def _bootstrap() -> Any: + raise RuntimeError("caido never came up") + + handle = CaidoBootstrapHandle(asyncio.ensure_future(_bootstrap())) + assert await tools._ctx_client(cast("Any", _Ctx({"caido_client": handle}))) is None diff --git a/tests/test_report_coverage.py b/tests/test_report_coverage.py new file mode 100644 index 00000000..76200edf --- /dev/null +++ b/tests/test_report_coverage.py @@ -0,0 +1,264 @@ +"""Tests for the coverage artifact assembled in strix.report.coverage.""" + +from __future__ import annotations + +import json +from typing import TYPE_CHECKING, Any + +from strix.report.coverage import ( + _SKILL_PHRASINGS, + build_coverage_document, + read_agent_graph, + write_coverage, +) +from strix.skills import get_available_skills + + +if TYPE_CHECKING: + from pathlib import Path + + +def _entry(**overrides: Any) -> dict[str, Any]: + base: dict[str, Any] = { + "surface": "POST /api/orders/{id}", + "risk_area": "object-level authorization", + "outcome": "no_issue_found", + "evidence": "Two tenants tested; both received 403.", + "agent_id": "agent-1", + "agent_name": "authz-tester", + "created_at": "2026-07-02 10:00:00 UTC", + } + base.update(overrides) + return base + + +def _graph(**overrides: Any) -> dict[str, Any]: + base: dict[str, Any] = { + "statuses": {"agent-1": "completed"}, + "names": {"agent-1": "authz-tester"}, + "metadata": {"agent-1": {"skills": ["idor"], "task": "authz review"}}, + } + base.update(overrides) + return base + + +def _document(**overrides: Any) -> dict[str, Any]: + kwargs: dict[str, Any] = { + "run_record": {"run_id": "r1", "run_name": "run-1", "status": "completed"}, + "entries": [_entry()], + "agent_graph": _graph(), + "vulnerability_reports": [], + } + kwargs.update(overrides) + return build_coverage_document(**kwargs) + + +def test_document_reports_surfaces_and_outcomes() -> None: + doc = _document() + + assert doc["summary"]["surfaces_reviewed"] == 1 + assert doc["summary"]["outcomes"] == {"no_issue_found": 1} + assert doc["entries"][0]["outcome_label"] == "No issue identified" + assert doc["entries"][0]["recorded_by"] == "authz-tester" + + +def test_ledger_entries_are_labelled_as_agent_reported() -> None: + """A reader has to be able to tell a self-report from an observation.""" + doc = _document() + + assert doc["entries"][0]["source"] == "agent_reported" + assert doc["machine_observed"]["source"] == "runtime" + assert doc["machine_observed"]["skills_exercised"] == ["idor"] + + +def test_assigned_risk_skill_without_coverage_becomes_a_gap() -> None: + """An agent carrying the sql_injection skill that records nothing about it + leaves the class unexamined, not clean.""" + doc = _document( + agent_graph=_graph( + metadata={"agent-1": {"skills": ["idor", "sql_injection"], "task": "review"}} + ) + ) + + gaps = [gap for gap in doc["gaps"] if gap["kind"] == "unrecorded_risk_class"] + assert [gap["risk_area"] for gap in gaps] == ["sql injection"] + + +def test_recorded_risk_class_is_not_reported_as_a_gap() -> None: + doc = _document( + entries=[_entry(risk_area="SQL injection", surface="GET /search?q=")], + agent_graph=_graph(metadata={"agent-1": {"skills": ["sql_injection"]}}), + ) + + assert not [gap for gap in doc["gaps"] if gap["kind"] == "unrecorded_risk_class"] + + +def test_synonym_phrasing_counts_as_recorded_coverage() -> None: + """The ledger says "object-level authorization"; the skill is called idor.""" + doc = _document(agent_graph=_graph(metadata={"agent-1": {"skills": ["idor"]}})) + + assert not [gap for gap in doc["gaps"] if gap["kind"] == "unrecorded_risk_class"] + + +def test_non_risk_skills_carry_no_coverage_obligation() -> None: + """Tooling skills describe how an agent works, not what it hunts.""" + doc = _document(agent_graph=_graph(metadata={"agent-1": {"skills": ["idor", "caido"]}})) + + assert not [gap for gap in doc["gaps"] if gap.get("risk_area") == "caido"] + + +def test_agent_that_recorded_nothing_is_a_gap() -> None: + doc = _document( + agent_graph=_graph( + statuses={"agent-1": "completed", "agent-2": "completed"}, + names={"agent-1": "authz-tester", "agent-2": "recon"}, + metadata={}, + ) + ) + + silent = [gap for gap in doc["gaps"] if gap["kind"] == "agent_recorded_no_coverage"] + assert [gap["agent_name"] for gap in silent] == ["recon"] + + +def test_needs_follow_up_is_carried_as_an_open_gap() -> None: + doc = _document( + entries=[_entry(outcome="needs_follow_up", evidence="Auth wall blocked testing.")] + ) + + assert doc["gaps"][0]["kind"] == "needs_follow_up" + assert doc["gaps"][0]["detail"] == "Auth wall blocked testing." + + +def test_completed_run_with_finished_agents_is_complete() -> None: + doc = _document(exit_reason="finished_by_tool") + + assert doc["completeness"]["complete"] is True + assert doc["completeness"]["caveats"] == [] + + +def test_budget_exhausted_run_is_not_a_complete_record() -> None: + """A truncated scan must not read like a clean one.""" + doc = _document(exit_reason="budget_exhausted") + + assert doc["completeness"]["complete"] is False + assert "budget_exhausted" in doc["completeness"]["caveats"][0] + + +def test_unfinished_agent_makes_the_record_partial() -> None: + doc = _document( + agent_graph=_graph(statuses={"agent-1": "crashed"}), + exit_reason="finished_by_tool", + ) + + assert doc["completeness"]["complete"] is False + assert "authz-tester" in doc["completeness"]["caveats"][0] + + +def test_failed_run_status_makes_the_record_partial() -> None: + doc = _document( + run_record={"run_id": "r1", "status": "failed"}, + exit_reason="finished_by_tool", + ) + + assert doc["completeness"]["complete"] is False + + +def test_write_coverage_emits_a_top_level_artifact(tmp_path: Path) -> None: + path = write_coverage(tmp_path, _document()) + + assert path == tmp_path / "coverage.json" + assert json.loads(path.read_text(encoding="utf-8"))["schema_version"] == 1 + + +def test_read_agent_graph_tolerates_a_missing_or_corrupt_snapshot(tmp_path: Path) -> None: + assert read_agent_graph(tmp_path) == {} + + (tmp_path / "agents.json").write_text("{not json", encoding="utf-8") + assert read_agent_graph(tmp_path) == {} + + +def test_read_agent_graph_loads_a_snapshot(tmp_path: Path) -> None: + (tmp_path / "agents.json").write_text(json.dumps(_graph()), encoding="utf-8") + + assert read_agent_graph(tmp_path)["names"] == {"agent-1": "authz-tester"} + + +def test_multi_token_skill_matches_how_a_pentester_writes_it() -> None: + """An agent carrying path_traversal_lfi_rfi records "Path Traversal". + + Requiring the skill's filename verbatim published a false gap for a class + that had been tested and even had a finding filed against it. + """ + doc = _document( + entries=[_entry(risk_area="Path Traversal / Directory Traversal", surface="/download")], + agent_graph=_graph(metadata={"agent-1": {"skills": ["path_traversal_lfi_rfi"]}}), + ) + + assert not [gap for gap in doc["gaps"] if gap["kind"] == "unrecorded_risk_class"] + + +def _vulnerability_skill_names() -> set[str]: + return {skill["name"] for skill in get_available_skills()["vulnerabilities"]} + + +def test_every_vulnerability_skill_declares_its_phrasings() -> None: + """A new skill without phrasings would be matched by its filename alone, + which is how the false gap above got published.""" + missing = _vulnerability_skill_names() - set(_SKILL_PHRASINGS) + + assert not missing, f"add ledger phrasings for: {sorted(missing)}" + + +def test_declared_phrasings_name_real_skills() -> None: + stale = set(_SKILL_PHRASINGS) - _vulnerability_skill_names() + + assert not stale, f"phrasings for skills that no longer exist: {sorted(stale)}" + + +def _delegating_graph(**overrides: Any) -> dict[str, Any]: + base: dict[str, Any] = { + "statuses": {"root": "completed", "agent-1": "completed"}, + "names": {"root": "Root Agent", "agent-1": "authz-tester"}, + "parent_of": {"agent-1": "root"}, + "metadata": {"agent-1": {"skills": ["idor"]}}, + } + base.update(overrides) + return base + + +def test_delegating_root_agent_is_not_a_coverage_gap() -> None: + """The root delegates and reconciles; it is not a tester that went quiet. + Flagging it would put the same false line in every clean report.""" + doc = _document(agent_graph=_delegating_graph()) + + silent = [gap for gap in doc["gaps"] if gap["kind"] == "agent_recorded_no_coverage"] + assert silent == [] + + +def test_a_subagent_that_records_nothing_is_still_a_gap() -> None: + doc = _document( + agent_graph=_delegating_graph( + statuses={"root": "completed", "agent-1": "completed", "agent-2": "completed"}, + names={"root": "Root Agent", "agent-1": "authz-tester", "agent-2": "recon"}, + parent_of={"agent-1": "root", "agent-2": "root"}, + ) + ) + + silent = [gap for gap in doc["gaps"] if gap["kind"] == "agent_recorded_no_coverage"] + assert [gap["agent_name"] for gap in silent] == ["recon"] + + +def test_a_root_that_worked_alone_is_held_to_the_rule() -> None: + """With no subagents there is nobody else the testing could have come + from, so silence is a real gap.""" + doc = _document( + entries=[], + agent_graph={ + "statuses": {"root": "completed"}, + "names": {"root": "Root Agent"}, + "parent_of": {}, + }, + ) + + silent = [gap for gap in doc["gaps"] if gap["kind"] == "agent_recorded_no_coverage"] + assert [gap["agent_name"] for gap in silent] == ["Root Agent"] diff --git a/tests/test_report_writer.py b/tests/test_report_writer.py index 05222796..f6f0dbcc 100644 --- a/tests/test_report_writer.py +++ b/tests/test_report_writer.py @@ -179,3 +179,30 @@ def test_write_executive_report_writes_markdown(tmp_path: Path) -> None: content = (tmp_path / "penetration_test_report.md").read_text(encoding="utf-8") assert "# Security Penetration Test Report" in content assert "Scan complete. No critical issues." in content + + +def test_render_vulnerability_md_surfaces_calibration_metadata() -> None: + """Confidence, the case against the finding, and retest status are part of + the deliverable — storing them without rendering hides the reasoning.""" + md = render_vulnerability_md( + { + "id": "vuln-0009", + "title": "SSRF in URL preview", + "severity": "high", + "timestamp": "2026-07-02 10:00:00 UTC", + "description": "Fetches user-supplied URLs.", + "confidence": "medium", + "counterevidence": "Egress appears filtered at the network layer.", + "confidence_rationale": "Reproduced once out of three attempts.", + "severity_change_conditions": "Critical if egress filtering is removed.", + "remediation_steps": "Allowlist destinations.", + "fix_verification": "Not retested.", + } + ) + + assert "**Confidence:** Medium" in md + assert "## Counterevidence" in md + assert "Egress appears filtered at the network layer." in md + assert "## Confidence Rationale" in md + assert "## What Would Change This Severity" in md + assert "## Fix Verification" in md diff --git a/tests/test_reporting_fields.py b/tests/test_reporting_fields.py index d433db40..2b44963c 100644 --- a/tests/test_reporting_fields.py +++ b/tests/test_reporting_fields.py @@ -2,7 +2,7 @@ from __future__ import annotations -from typing import TYPE_CHECKING +from typing import TYPE_CHECKING, Any import pytest @@ -75,6 +75,9 @@ async def test_create_report_persists_new_fields(report_state: ReportState) -> N remediation_steps="Context-encode output.", evidence="Response echoes the payload verbatim.", assumptions="Assumes a victim opens a crafted link.", + counterevidence="No output encoding or CSP observed on this response.", + confidence="HIGH", + severity_change_conditions="A strict CSP would lower the severity.", fix_effort="LOW", cvss_breakdown=_CVSS, endpoint="/search", @@ -91,6 +94,9 @@ async def test_create_report_persists_new_fields(report_state: ReportState) -> N assert report["fix_effort"] == "low" assert report["fix_pr_body"] == "## Fix\nEncode output." assert report["finding_class"] == "dynamic" + assert report["counterevidence"] == "No output encoding or CSP observed on this response." + assert report["confidence"] == "high" + assert report["severity_change_conditions"] == "A strict CSP would lower the severity." async def test_create_report_requires_evidence_and_assumptions( @@ -107,6 +113,9 @@ async def test_create_report_requires_evidence_and_assumptions( remediation_steps="r", evidence=" ", assumptions="", + counterevidence="none found", + confidence="high", + severity_change_conditions="n/a", fix_effort="low", cvss_breakdown=_CVSS, endpoint=None, @@ -134,6 +143,9 @@ async def test_create_report_rejects_invalid_fix_effort(report_state: ReportStat remediation_steps="r", evidence="e", assumptions="a", + counterevidence="none found", + confidence="high", + severity_change_conditions="n/a", fix_effort="enormous", cvss_breakdown=_CVSS, endpoint=None, @@ -147,6 +159,80 @@ async def test_create_report_rejects_invalid_fix_effort(report_state: ReportStat assert not report_state.vulnerability_reports +async def _create_with(report_state: ReportState, **overrides: object) -> dict[str, Any]: + kwargs: dict[str, object] = { + "title": "X", + "description": "d", + "impact": "i", + "target": "t", + "technical_analysis": "ta", + "poc_description": "p", + "poc_script_code": "c", + "remediation_steps": "r", + "evidence": "e", + "assumptions": "a", + "counterevidence": "No guard found on this path.", + "confidence": "high", + "severity_change_conditions": "Proof of internet exposure would raise it.", + "fix_effort": "low", + "cvss_breakdown": _CVSS, + "endpoint": None, + "method": None, + "cve": None, + "cwe": None, + "code_locations": None, + } + kwargs.update(overrides) + assert report_state is not None + return await _do_create(**kwargs) # type: ignore[arg-type] + + +async def test_create_report_requires_counterevidence(report_state: ReportState) -> None: + result = await _create_with(report_state, counterevidence=" ") + assert result["success"] is False + assert any("Counterevidence" in e for e in result["errors"]) + assert not report_state.vulnerability_reports + + +async def test_create_report_requires_severity_change_conditions( + report_state: ReportState, +) -> None: + result = await _create_with(report_state, severity_change_conditions="") + assert result["success"] is False + assert any("severity_change_conditions" in e for e in result["errors"]) + assert not report_state.vulnerability_reports + + +async def test_create_report_rejects_invalid_confidence(report_state: ReportState) -> None: + result = await _create_with(report_state, confidence="pretty sure") + assert result["success"] is False + assert any("confidence" in e for e in result["errors"]) + assert not report_state.vulnerability_reports + + +async def test_create_report_requires_rationale_when_confidence_not_high( + report_state: ReportState, +) -> None: + result = await _create_with(report_state, confidence="medium") + assert result["success"] is False + assert any("confidence_rationale" in e for e in result["errors"]) + assert not report_state.vulnerability_reports + + +async def test_create_report_accepts_medium_confidence_with_rationale( + report_state: ReportState, +) -> None: + result = await _create_with( + report_state, + confidence="medium", + confidence_rationale="Static-only trace; could not stand up the service.", + ) + assert result["success"] is True + report = report_state.vulnerability_reports[0] + assert report["confidence"] == "medium" + assert report["confidence_rationale"] == "Static-only trace; could not stand up the service." + + async def test_dependency_report_sets_class_and_metadata(report_state: ReportState) -> None: result = await _do_create_dependency( title="CVE-2021-23337 in lodash 4.17.20", @@ -937,6 +1023,56 @@ def test_vuln_tool_exposes_new_params() -> None: assert "advisory_cvss" in dep_required +_FIX_LOCATION = { + "file": "app/views.py", + "start_line": 10, + "end_line": 12, + "fix_before": 'query = f"SELECT * FROM t WHERE id={uid}"', + "fix_after": 'query = "SELECT * FROM t WHERE id=%s"', +} + +_INFO_LOCATION = { + "file": "app/views.py", + "start_line": 10, + "end_line": 12, + "snippet": 'query = f"SELECT * FROM t WHERE id={uid}"', +} + + +async def test_fix_after_requires_verification(report_state: ReportState) -> None: + result = await _create_with(report_state, code_locations=[_FIX_LOCATION]) + assert result["success"] is False + assert any("fix_verification" in e for e in result["errors"]) + assert not report_state.vulnerability_reports + + +async def test_fix_after_with_verification_persists(report_state: ReportState) -> None: + verification = ( + "Re-ran the PoC against the patched handler: the payload is now bound as a " + "parameter and returns no extra rows. Checked the two sibling call sites of " + "the same helper and the admin export path; both already parameterized. " + "Legitimate numeric ids still resolve and the 404 path is unchanged. " + "Ran the focused view tests and ruff." + ) + result = await _create_with( + report_state, + code_locations=[_FIX_LOCATION], + fix_verification=verification, + ) + assert result["success"] is True + assert report_state.vulnerability_reports[0]["fix_verification"] == verification + + +async def test_informational_location_needs_no_verification(report_state: ReportState) -> None: + result = await _create_with(report_state, code_locations=[_INFO_LOCATION]) + assert result["success"] is True + assert "fix_verification" not in report_state.vulnerability_reports[0] + + +def test_vuln_tool_exposes_fix_verification() -> None: + assert "fix_verification" in create_vulnerability_report.params_json_schema["properties"] + + def test_dep_tool_exposes_contextual_cvss_params() -> None: dep_props = create_dependency_report.params_json_schema["properties"] for field in ( diff --git a/tests/test_sarif.py b/tests/test_sarif.py index 849835b0..61ffc39b 100644 --- a/tests/test_sarif.py +++ b/tests/test_sarif.py @@ -242,3 +242,132 @@ def test_write_sarif_replaces_atomically_no_partial_on_reemit(tmp_path: Path) -> assert leftovers == [] # And it parses as a complete document with both findings. assert len(_read(tmp_path)["runs"][0]["results"]) == 2 + + +def _coverage(*entries: dict[str, Any], **overrides: Any) -> dict[str, Any]: + doc: dict[str, Any] = { + "entries": list(entries), + "completeness": {"complete": True, "caveats": []}, + } + doc.update(overrides) + return doc + + +def _coverage_entry(**overrides: Any) -> dict[str, Any]: + base: dict[str, Any] = { + "surface": "POST /api/orders/{id}", + "risk_area": "SQL injection", + "outcome": "no_issue_found", + "outcome_label": "No issue identified", + "evidence": "14 parameters fuzzed; all queries parameterized.", + "recorded_by": "injection-tester", + "source": "agent_reported", + } + base.update(overrides) + return base + + +def test_cleared_surface_becomes_a_passing_result(tmp_path: Path) -> None: + """ "Tested and clean" is a SARIF pass, not an absent result.""" + write_sarif(tmp_path, [], coverage=_coverage(_coverage_entry())) + results = _read(tmp_path)["runs"][0]["results"] + + assert len(results) == 1 + assert results[0]["kind"] == "pass" + # SARIF requires level "none" on any result that is not a failure. + assert results[0]["level"] == "none" + assert "14 parameters fuzzed" in results[0]["message"]["text"] + + +def test_coverage_outcomes_map_to_their_sarif_kinds(tmp_path: Path) -> None: + write_sarif( + tmp_path, + [], + coverage=_coverage( + _coverage_entry(outcome="ruled_out", risk_area="XSS"), + _coverage_entry(outcome="not_applicable", risk_area="XXE"), + _coverage_entry(outcome="needs_follow_up", risk_area="SSRF"), + ), + ) + kinds = [result["kind"] for result in _read(tmp_path)["runs"][0]["results"]] + + assert kinds == ["pass", "notApplicable", "open"] + + +def test_reported_coverage_is_not_duplicated_as_a_pass(tmp_path: Path) -> None: + """A surface that produced a finding is already in results as a failure.""" + write_sarif( + tmp_path, + [_finding()], + coverage=_coverage(_coverage_entry(outcome="reported")), + ) + results = _read(tmp_path)["runs"][0]["results"] + + assert len(results) == 1 + assert results[0].get("kind", "fail") == "fail" + + +def test_coverage_results_declare_their_own_rules(tmp_path: Path) -> None: + write_sarif( + tmp_path, + [_finding()], + coverage=_coverage( + _coverage_entry(risk_area="SQL injection"), + _coverage_entry(risk_area="SQL injection", surface="GET /search"), + ), + ) + run = _read(tmp_path)["runs"][0] + rules = run["tool"]["driver"]["rules"] + coverage_rules = [rule for rule in rules if rule["id"].startswith("strix-coverage/")] + + # Both entries share one rule, and every result's ruleIndex resolves to it. + assert len(coverage_rules) == 1 + assert coverage_rules[0]["defaultConfiguration"]["level"] == "none" + for result in run["results"]: + assert rules[result["ruleIndex"]]["id"] == result["ruleId"] + + +def test_incomplete_run_is_flagged_on_the_invocation(tmp_path: Path) -> None: + """A scan cut short must not be indistinguishable from a clean one.""" + write_sarif( + tmp_path, + [], + coverage=_coverage( + _coverage_entry(), + completeness={"complete": False, "caveats": ["Budget exhausted."]}, + ), + ) + invocation = _read(tmp_path)["runs"][0]["invocations"][0] + + assert invocation["executionSuccessful"] is False + assert invocation["toolExecutionNotifications"][0]["message"]["text"] == "Budget exhausted." + + +def test_complete_run_reports_a_successful_invocation(tmp_path: Path) -> None: + write_sarif(tmp_path, [], coverage=_coverage(_coverage_entry())) + invocation = _read(tmp_path)["runs"][0]["invocations"][0] + + assert invocation["executionSuccessful"] is True + assert "toolExecutionNotifications" not in invocation + + +def test_calibration_metadata_survives_into_result_properties(tmp_path: Path) -> None: + write_sarif( + tmp_path, + [ + _finding( + confidence="medium", + counterevidence="WAF blocks the naive payload.", + confidence_rationale="Reproduced once out of three attempts.", + severity_change_conditions="Critical if the WAF rule is removed.", + fix_verification="Not retested.", + ) + ], + ) + strix = _read(tmp_path)["runs"][0]["results"][0]["properties"]["strix"] + + assert strix["confidence"] == "medium" + assert strix["counterevidence"] == "WAF blocks the naive payload." + assert strix["confidence_rationale"] == "Reproduced once out of three attempts." + assert strix["severity_change_conditions"] == "Critical if the WAF rule is removed." + assert strix["fix_verification"] == "Not retested." diff --git a/tests/test_skill_dir_extension.py b/tests/test_skill_dir_extension.py index eb28768c..595e9e8f 100644 --- a/tests/test_skill_dir_extension.py +++ b/tests/test_skill_dir_extension.py @@ -4,7 +4,7 @@ from pathlib import Path import pytest import strix.skills as skills_mod -from strix.agents.prompt import render_system_prompt +from strix.agents.prompt import _resolve_skills, render_system_prompt from strix.skills import ( get_all_skill_names, get_available_skills, @@ -232,3 +232,42 @@ def test_builtin_skill_still_loads_when_not_overridden(tmp_path: Path) -> None: def test_missing_skill_is_skipped(tmp_path: Path) -> None: register_skill_dir(tmp_path) assert load_skills(["does_not_exist"]) == {} + + +def test_resolve_skills_always_includes_analysis_baseline() -> None: + resolved = _resolve_skills(requested=None) + + assert "analysis/counterevidence" in resolved + assert "analysis/severity_calibration" in resolved + + +def test_resolve_skills_adds_diff_mode_only_when_diff_scoped() -> None: + assert "scan_modes/diff" not in _resolve_skills(requested=None) + diff_scoped = _resolve_skills(requested=None, is_diff_scoped=True) + assert "scan_modes/diff" in diff_scoped + # Diff scope overlays the depth mode rather than replacing it. + assert "scan_modes/deep" in diff_scoped + + +def test_resolve_skills_gates_source_aware_skills_on_whitebox() -> None: + blackbox = _resolve_skills(requested=None) + assert "analysis/fix_verification" not in blackbox + assert "analysis/source_aware_discovery" not in blackbox + + whitebox = _resolve_skills(requested=None, is_whitebox=True) + assert "analysis/fix_verification" in whitebox + assert "analysis/source_aware_discovery" in whitebox + + +def test_new_skill_files_load() -> None: + names = [ + "analysis/counterevidence", + "analysis/severity_calibration", + "analysis/fix_verification", + "analysis/source_aware_discovery", + "scan_modes/diff", + ] + loaded = load_skills(names) + for name in names: + key = name.split("/")[-1] + assert loaded.get(key), f"{name} failed to load" diff --git a/tests/test_state_coverage_artifact.py b/tests/test_state_coverage_artifact.py new file mode 100644 index 00000000..5c090a6d --- /dev/null +++ b/tests/test_state_coverage_artifact.py @@ -0,0 +1,66 @@ +"""coverage.json is a deliverable artifact, not runtime state.""" + +from __future__ import annotations + +import json +from typing import TYPE_CHECKING + +import pytest + +from strix.core.paths import runtime_state_dir +from strix.report.state import ReportState +from strix.tools.coverage.tools import _record_impl, hydrate_coverage_from_disk + + +if TYPE_CHECKING: + from pathlib import Path + + +@pytest.fixture +def state(tmp_path: Path, monkeypatch: pytest.MonkeyPatch) -> ReportState: + monkeypatch.chdir(tmp_path) + report_state = ReportState(run_name="run-1") + hydrate_coverage_from_disk(runtime_state_dir(report_state.get_run_dir())) + return report_state + + +def _record_a_cleared_surface() -> None: + _record_impl( + surface="POST /api/orders/{id}", + risk_area="SQL injection", + outcome="no_issue_found", + evidence="14 parameters fuzzed; every query parameterized.", + agent_id="agent-1", + agent_name="injection-tester", + ) + + +def test_coverage_is_written_beside_the_other_artifacts(state: ReportState) -> None: + _record_a_cleared_surface() + + state._save_artifacts() + + document = json.loads((state.get_run_dir() / "coverage.json").read_text(encoding="utf-8")) + assert document["entries"][0]["risk_area"] == "SQL injection" + assert document["summary"]["surfaces_reviewed"] == 1 + + +def test_cleared_surfaces_reach_sarif(state: ReportState) -> None: + _record_a_cleared_surface() + + state._save_artifacts() + + sarif = json.loads((state.get_run_dir() / "findings.sarif").read_text(encoding="utf-8")) + results = sarif["runs"][0]["results"] + assert [result["kind"] for result in results] == ["pass"] + + +def test_artifacts_still_land_when_coverage_is_empty(state: ReportState) -> None: + state.final_scan_result = "Scan complete." + + state._save_artifacts() + + run_dir = state.get_run_dir() + assert (run_dir / "penetration_test_report.md").is_file() + document = json.loads((run_dir / "coverage.json").read_text(encoding="utf-8")) + assert document["entries"] == [] diff --git a/tests/test_threat_model_tool.py b/tests/test_threat_model_tool.py new file mode 100644 index 00000000..79239d7b --- /dev/null +++ b/tests/test_threat_model_tool.py @@ -0,0 +1,343 @@ +"""Tests for the target-scoped threat model cache.""" + +from __future__ import annotations + +import json +import subprocess +from datetime import UTC, datetime, timedelta +from typing import TYPE_CHECKING + +import pytest + +from strix.agents.factory import _BASE_TOOLS +from strix.tools.threat_model import tools as threat_model_tools +from strix.tools.threat_model.tools import ( + _amend_impl, + _get_impl, + _save_impl, + amend_threat_model, + get_threat_model, + save_threat_model, +) + + +if TYPE_CHECKING: + from pathlib import Path + + +_MODEL = """# Threat Model + +## Overview +A multi-tenant billing API. Product code lives in `api/`; `scripts/` is +developer-only tooling and is not deployed. + +## Trust Boundaries and Assumptions +Requests arrive from untrusted tenants through `api/router.py`. The tenant id +is taken from the signed session, never from the request body. Operators +configure webhooks; developers control migrations. + +## Attack Surface and Attacker Stories +The public REST surface and the webhook receiver are attacker-reachable. A +realistic story is a tenant reading another tenant's invoices. Local CLI +tooling is not a realistic surface. + +## Severity Calibration +Critical: cross-tenant write. High: cross-tenant read. Medium: authenticated +self-scoped information leak. Low: verbose errors. +""" + + +def _git(repo: Path, *args: str) -> None: + subprocess.run(["/usr/bin/env", "git", *args], cwd=repo, check=True) # noqa: S603 + + +def _make_repo(tmp_path: Path, name: str = "repo") -> Path: + repo = tmp_path / name + repo.mkdir(parents=True) + _git(repo, "init", "-q") + _git(repo, "config", "user.email", "t@example.com") + _git(repo, "config", "user.name", "t") + (repo / "README.md").write_text("hi\n", encoding="utf-8") + _git(repo, "add", "README.md") + _git(repo, "commit", "-qm", "init") + return repo + + +@pytest.fixture(autouse=True) +def _isolated_cache(tmp_path: Path, monkeypatch: pytest.MonkeyPatch) -> None: + monkeypatch.setattr(threat_model_tools, "_CACHE_DIR", tmp_path / "cache") + + +def test_missing_model_reports_not_found(tmp_path: Path) -> None: + repo = _make_repo(tmp_path) + + result = _get_impl(str(repo)) + + assert result["success"] is True + assert result["found"] is False + assert "save_threat_model" in result["message"] + + +def test_saved_model_round_trips(tmp_path: Path) -> None: + repo = _make_repo(tmp_path) + + assert _save_impl(str(repo), _MODEL, "Strix")["success"] is True + result = _get_impl(str(repo)) + + assert result["found"] is True + assert result["stale"] is False + assert "multi-tenant billing API" in result["content"] + + +def test_model_is_stale_after_new_revision(tmp_path: Path) -> None: + repo = _make_repo(tmp_path) + _save_impl(str(repo), _MODEL, None) + + (repo / "next.py").write_text("x = 1\n", encoding="utf-8") + _git(repo, "add", "next.py") + _git(repo, "commit", "-qm", "next") + + result = _get_impl(str(repo)) + + assert result["found"] is True + assert result["stale"] is True + assert result["content"] + + +def test_cache_is_keyed_per_repository(tmp_path: Path) -> None: + first = _make_repo(tmp_path, "first") + second = _make_repo(tmp_path, "second") + _save_impl(str(first), _MODEL, None) + + assert _get_impl(str(second))["found"] is False + + +def test_rejects_model_missing_required_sections(tmp_path: Path) -> None: + repo = _make_repo(tmp_path) + thin = _MODEL.replace("## Severity Calibration", "## Notes") + + result = _save_impl(str(repo), thin, None) + + assert result["success"] is False + assert "severity calibration" in result["error"] + + +def test_rejects_stub_model(tmp_path: Path) -> None: + repo = _make_repo(tmp_path) + + result = _save_impl(str(repo), "overview trust boundaries attack surface", None) + + assert result["success"] is False + assert "too thin" in result["error"] + + +def test_rejects_empty_target() -> None: + result = _get_impl(" ") + assert result["success"] is False + assert "target cannot be empty" in result["error"] + + +def test_tools_are_registered() -> None: + assert get_threat_model in _BASE_TOOLS + assert save_threat_model in _BASE_TOOLS + + +_ADDENDUM = ( + "The base model calls the webhook receiver operator-controlled. It is " + "unauthenticated in `api/webhooks.py:31`, so treat its body as attacker-controlled." +) + + +def test_amendment_is_returned_with_the_model(tmp_path: Path) -> None: + repo = _make_repo(tmp_path) + _save_impl(str(repo), _MODEL, "root") + + assert _amend_impl(str(repo), _ADDENDUM, "webhook-agent")["success"] is True + result = _get_impl(str(repo)) + + assert result["content"] == _MODEL.strip() + assert [a["content"] for a in result["amendments"]] == [_ADDENDUM] + assert result["amendments"][0]["by"] == "webhook-agent" + + +def test_amendments_accumulate_without_overwriting(tmp_path: Path) -> None: + repo = _make_repo(tmp_path) + _save_impl(str(repo), _MODEL, "root") + + _amend_impl(str(repo), _ADDENDUM, "agent-a") + second = "The `scripts/` directory ships in the container image; it is not dev-only." + _amend_impl(str(repo), second + " See `Dockerfile:14`.", "agent-b") + + amendments = _get_impl(str(repo))["amendments"] + assert len(amendments) == 2 + assert [a["by"] for a in amendments] == ["agent-a", "agent-b"] + + +def test_amend_requires_an_existing_model(tmp_path: Path) -> None: + repo = _make_repo(tmp_path) + + result = _amend_impl(str(repo), _ADDENDUM, None) + + assert result["success"] is False + assert "save_threat_model" in result["error"] + + +def test_amend_rejects_a_stub(tmp_path: Path) -> None: + repo = _make_repo(tmp_path) + _save_impl(str(repo), _MODEL, "root") + + assert _amend_impl(str(repo), "looks wrong", None)["success"] is False + + +def test_save_clears_amendments_and_says_so(tmp_path: Path) -> None: + repo = _make_repo(tmp_path) + _save_impl(str(repo), _MODEL, "root") + _amend_impl(str(repo), _ADDENDUM, "agent-a") + + result = _save_impl(str(repo), _MODEL.replace("billing API", "billing service"), "root") + + assert result["amendments_cleared"] == 1 + assert "cleared" in result["message"] + assert "amendments" not in _get_impl(str(repo)) + + +def test_amend_tool_is_registered() -> None: + assert amend_threat_model in _BASE_TOOLS + + +_BLACKBOX_MODEL = _MODEL.replace( + "Product code lives in `api/`; `scripts/` is\ndeveloper-only tooling and is not deployed.", + "Only the deployed surface is visible; no source. Inferred from recon.", +) + + +def test_blackbox_target_round_trips() -> None: + target = "https://app.example.com" + + assert _save_impl(target, _BLACKBOX_MODEL, "recon")["success"] is True + result = _get_impl(target) + + assert result["found"] is True + assert result["stale"] is False, "a fresh model with no revision is not stale" + assert result["revision"] == "unversioned" + assert "Inferred from recon" in result["content"] + + +def test_blackbox_target_spellings_share_one_model() -> None: + _save_impl("https://App.Example.com:443/", _BLACKBOX_MODEL, "recon") + + for spelling in ("https://app.example.com", "app.example.com", "https://app.example.com/"): + assert _get_impl(spelling)["found"] is True, spelling + + assert _get_impl("https://other.example.com")["found"] is False + + +def test_blackbox_model_goes_stale_with_age() -> None: + target = "https://app.example.com" + _save_impl(target, _BLACKBOX_MODEL, "recon") + + aged = (datetime.now(UTC) - timedelta(days=threat_model_tools._MAX_AGE_DAYS + 1)).isoformat() + path = threat_model_tools._cache_path("app.example.com:443") + payload = json.loads(path.read_text(encoding="utf-8")) + payload["created_at"] = aged + path.write_text(json.dumps(payload), encoding="utf-8") + + result = _get_impl(target) + + assert result["stale"] is True + assert "re-confirm" in result["message"] + + +def test_blackbox_target_can_be_amended() -> None: + target = "https://app.example.com" + _save_impl(target, _BLACKBOX_MODEL, "recon") + + addendum = ( + "The model infers /admin is IP-restricted. It is reachable with any " + "authenticated session; the restriction is only on /admin/settings." + ) + assert _amend_impl(target, addendum, "authz-agent")["success"] is True + assert _get_impl(target)["amendments"][0]["content"] == addendum + + +def test_checkout_and_its_remote_are_the_same_target(tmp_path: Path) -> None: + repo = _make_repo(tmp_path) + _git(repo, "remote", "add", "origin", "https://github.com/acme/billing.git") + _save_impl(str(repo), _MODEL, "root") + + clone = _make_repo(tmp_path, "clone") + _git(clone, "remote", "add", "origin", "https://github.com/acme/billing.git") + + assert _get_impl(str(clone))["found"] is True + + +def test_path_on_a_known_host_resolves_to_the_scan_target() -> None: + scan_targets = ["https://app.example.com"] + _save_impl("https://app.example.com", _BLACKBOX_MODEL, "root", scan_targets) + + # An agent testing one page names that page, not the scan's target string. + assert _get_impl("https://app.example.com/admin/login", scan_targets)["found"] is True + + +def test_two_scan_targets_on_one_host_stay_separate() -> None: + scan_targets = ["https://example.com/tenant-a", "https://example.com/tenant-b"] + _save_impl("https://example.com/tenant-a", _BLACKBOX_MODEL, "root", scan_targets) + + assert _get_impl("https://example.com/tenant-b", scan_targets)["found"] is False + + +def test_unknown_host_is_not_snapped_onto_the_scan_target() -> None: + scan_targets = ["https://app.example.com"] + _save_impl("https://app.example.com", _BLACKBOX_MODEL, "root", scan_targets) + + assert _get_impl("https://unrelated.test", scan_targets)["found"] is False + + +def test_empty_target_falls_back_to_a_single_scan_target() -> None: + scan_targets = ["https://app.example.com"] + _save_impl("", _BLACKBOX_MODEL, "root", scan_targets) + + assert _get_impl("", scan_targets)["found"] is True + assert _get_impl("https://app.example.com")["found"] is True + + +def test_repository_subdirectory_shares_the_repository_model(tmp_path: Path) -> None: + repo = _make_repo(tmp_path) + (repo / "src").mkdir() + _save_impl(str(repo), _MODEL, "root") + + assert _get_impl(str(repo / "src"))["found"] is True + + +def test_checkout_and_its_clone_url_are_one_identity(tmp_path: Path) -> None: + """The model an agent saves inside the checkout must be visible to an agent + that names the same repository by the URL it was cloned from.""" + repo = _make_repo(tmp_path) + _git(repo, "remote", "add", "origin", "https://github.com/acme/billing.git") + _save_impl(str(repo), _MODEL, "root") + + assert _get_impl("https://github.com/acme/billing")["found"] is True + assert _get_impl("https://github.com/acme/billing.git")["found"] is True + + +def test_ssh_and_https_remotes_are_one_identity(tmp_path: Path) -> None: + """One repository cloned over scp-style SSH and over HTTPS is one target.""" + over_ssh = _make_repo(tmp_path, "ssh-clone") + _git(over_ssh, "remote", "add", "origin", "git@github.com:acme/billing.git") + _save_impl(str(over_ssh), _MODEL, "root") + + over_https = _make_repo(tmp_path, "https-clone") + _git(over_https, "remote", "add", "origin", "https://github.com/acme/billing.git") + + assert _get_impl(str(over_https))["found"] is True + + +def test_different_repositories_on_one_host_stay_separate(tmp_path: Path) -> None: + first = _make_repo(tmp_path, "billing") + _git(first, "remote", "add", "origin", "git@github.com:acme/billing.git") + _save_impl(str(first), _MODEL, "root") + + second = _make_repo(tmp_path, "payments") + _git(second, "remote", "add", "origin", "git@github.com:acme/payments.git") + + assert _get_impl(str(second))["found"] is False diff --git a/tests/test_tui_backend_server.py b/tests/test_tui_backend_server.py index d3e08088..eb4e3239 100644 --- a/tests/test_tui_backend_server.py +++ b/tests/test_tui_backend_server.py @@ -13,7 +13,7 @@ from agents.tool import ToolOutputImage from strix.config.settings import DEFAULT_MAX_TURNS from strix.interface.tui.backend.controller import TuiController -from strix.interface.tui.backend.projection import terminal_projection +from strix.interface.tui.backend.projection import bounded_state_projection, terminal_projection from strix.interface.tui.backend.protocol import ( MAX_COMMAND_BYTES, PROTOCOL_CAPABILITIES, @@ -215,7 +215,11 @@ def test_unicode_heavy_setup_state_stays_within_control_frame_limit() -> None: "Any", SimpleNamespace( caido_url="https://例え.example/" + "道" * 10_000, - get_total_llm_usage=lambda: {f"model-{index}": "費" * 10_000 for index in range(20)}, + get_total_llm_usage=lambda: { + "total_tokens": 720_400, + "cost": 20.0, + **{f"model-{index}": "🔒" * 10_000 for index in range(20)}, + }, ), ) server = TuiBackendServer(controller) @@ -226,6 +230,26 @@ def test_unicode_heavy_setup_state_stays_within_control_frame_limit() -> None: assert len(encoded) <= MAX_COMMAND_BYTES assert "🔒".encode() in encoded assert snapshot["projection_truncated"] is True + assert snapshot["usage"] == {"total_tokens": 720_400, "cost": 20.0} + + +def test_defensive_state_projection_preserves_usage_summary() -> None: + controller = TuiController(args()) + controller.report_state = cast( + "Any", + SimpleNamespace( + caido_url=None, + get_total_llm_usage=lambda: {"total_tokens": 720_400, "cost": 20.0}, + ), + ) + state = controller.snapshot() + state["provider"] = None + state["future_oversized_field"] = "x" * 100_000 + + snapshot = bounded_state_projection(state) + + assert snapshot["projection_truncated"] is True + assert snapshot["usage"] == {"total_tokens": 720_400, "cost": 20.0} @pytest.mark.asyncio