diff --git a/.claude/skills/sentry-sdk-testing/SKILL.md b/.claude/skills/sentry-sdk-testing/SKILL.md new file mode 100644 index 0000000..567b2d1 --- /dev/null +++ b/.claude/skills/sentry-sdk-testing/SKILL.md @@ -0,0 +1,185 @@ +--- +name: sentry-sdk-testing +description: Test Buggregator's Sentry module compatibility with different Sentry PHP SDK versions. Triggers when the user asks to test Sentry compatibility, verify a new SDK version works, check Sentry transport changes, or mentions "sentry sdk", "sentry version", "sentry compatibility". Also triggers on requests to prepare for a new Sentry SDK release. +--- + +# Sentry SDK Compatibility Testing + +## Role + +You are a protocol compatibility engineer. Your job is to verify that Buggregator's Sentry ingestion pipeline correctly handles payloads from all supported Sentry PHP SDK versions (v2, v3, v4, and future releases). + +## When to Use + +- A new major/minor Sentry PHP SDK version is released +- A user reports that events from a specific SDK version are not appearing in the UI +- Before a Buggregator release, to verify no regressions in Sentry support + +## Workflow + +### Phase 1 — Install SDK Versions + +Create isolated temporary directories for each SDK version and install them via Composer: + +```bash +# For each version you need to test: +mkdir -p /tmp/sentry-vN +cd /tmp/sentry-vN +composer require sentry/sentry:"^N.0" --no-interaction + +# If PHP version constraint fails: +composer require sentry/sentry:"^N.0" --no-interaction --ignore-platform-reqs + +# Verify installed version: +cd /tmp/sentry-vN && composer show sentry/sentry | head -5 +``` + +### Phase 2 — Analyze Transport Layer + +For each SDK version, examine these key files: + +| What to Find | Where to Look | +|---|---| +| Endpoint paths | `src/Dsn.php` — `getStoreApiEndpointUrl()`, `getEnvelopeApiEndpointUrl()` | +| Transport logic | `src/Transport/HttpTransport.php` — `send()` method, which endpoint is chosen | +| Headers | `src/HttpClient/Authentication/`, `src/Util/Http.php` | +| Serialization | `src/Serializer/PayloadSerializer.php` (v2/v3) or `src/Serializer/EnvelopItems/*.php` (v4+) | +| Compression | `src/HttpClient/Plugin/GzipEncoderPlugin.php` or `src/HttpClient/HttpClient.php` | +| Event structure | `src/Event.php` — `toArray()` method (v2/v3) or `EnvelopItems/EventItem.php` (v4+) | + +Document findings in a comparison table covering: +1. **Endpoint** — `/store/` vs `/envelope/` vs both +2. **Content-Type** — `application/json` vs `application/x-sentry-envelope` +3. **Body format** — plain JSON vs envelope (header + items) +4. **`event_id` location** — in payload, in envelope header, or both +5. **Timestamp format** — ISO 8601 string vs numeric epoch float +6. **Message format** — plain string vs `{"message","params","formatted"}` object +7. **New/removed fields** in event payload +8. **New envelope item types** (e.g., `log`, `trace_metric`, `client_report`) +9. **Compression** — gzip, deflate, or none by default + +### Phase 3 — Generate Real Payloads + +Write a PHP script in each SDK directory to produce real serialized output: + +```php + 'http://test@localhost:8000/1', + 'http_compression' => false, + // For v3 with tracing: 'traces_sample_rate' => 1.0, +]); + +$serializer = new PayloadSerializer($options); + +$event = Event::createEvent(); // v3/v4 +// $event = new Event(); // v2 +$event->setLevel(Severity::error()); +$event->setEnvironment('production'); +$event->setRelease('1.0.0'); +$event->setServerName('web-01'); + +$exception = new ExceptionDataBag(new \RuntimeException('Test error')); +$event->setExceptions([$exception]); + +echo $serializer->serialize($event); +``` + +Save generated payloads for use in Go tests. + +### Phase 4 — Write Go Tests + +Add tests in `modules/sentry/handler_test.go` using real payloads from Phase 3. + +Each test must verify: + +1. **`Handle()` returns non-nil** — the event is recognized +2. **`inc.UUID`** — matches the expected event_id +3. **`inc.Type == "sentry"`** — correct event type +4. **`inc.Project`** — extracted from URL path +5. **`event_id` in payload** — present in `inc.Payload` JSON (critical for frontend rendering) +6. **Exception/message data preserved** — key fields survive parsing + +For structured storage tests (with DB), also verify: +- Row exists in `sentry_error_events` +- Exceptions stored in `sentry_exceptions` +- Breadcrumbs stored in `sentry_breadcrumbs` + +Test naming convention: +``` +TestHandler_SDKvN_Format (e.g., TestHandler_SDKv4_Envelope) +TestHandler_SDKvN_Format_WithDB (e.g., TestHandler_SDKv2_PlainJSON_WithDB) +``` + +### Phase 5 — Fix Compatibility Issues + +Common patterns that break between SDK versions: + +| Problem | Symptom | Fix Pattern | +|---|---|---| +| `event_id` missing from item payload | Events invisible in UI | Inject from envelope header via `injectEventID()` | +| Timestamp format change (string vs float) | `json.Unmarshal` fails silently | Use `FlexibleTS` type that accepts both | +| Field type change (string vs object) | Structured storage skipped | Use flexible unmarshaler (e.g., `FlexibleMessage`) | +| New envelope item type | Unknown items silently dropped | Add case to `handleEnvelope()` switch | +| New fields in payload | Data loss in structured tables | Add fields to Go structs, update store functions | +| Endpoint change | Handler doesn't match request | Update `Match()` path checks | + +### Phase 6 — Verify All Tests Pass + +```bash +# Sentry module tests only: +cd /home/butschster/repos/buggregator/server +go test ./modules/sentry/ -v + +# Full project: +go test ./... +``` + +## Known Version Differences (Reference) + +### SDK v2 (2.x) +- Plain JSON only, `/api/{id}/store/` +- Timestamp: ISO 8601 string +- No envelope support +- No tracing/spans + +### SDK v3 (3.x) +- Plain JSON to `/store/` (no tracing) or Envelope to `/envelope/` (with tracing) +- Timestamp: float epoch +- `event_id` present in both envelope header and item payload + +### SDK v4 (4.x) +- Always Envelope to `/api/{id}/envelope/` +- Timestamp: float epoch +- `event_id` ONLY in envelope header (not in item payload) +- New item types: `log`, `trace_metric`, `client_report` +- SDK payload includes `packages` array +- Span `origin` field added + +## Key Files in Buggregator + +| File | Responsibility | +|---|---| +| `modules/sentry/handler.go` | Request matching, decompression, JSON vs envelope routing, event_id injection | +| `modules/sentry/envelope.go` | Envelope parsing (header + item pairs) | +| `modules/sentry/types.go` | `ErrorEvent`, `FlexibleTS`, `FlexibleMessage`, `Transaction`, `RawSpan`, etc. | +| `modules/sentry/store_error.go` | Structured storage for error events, exceptions, breadcrumbs | +| `modules/sentry/store_transaction.go` | Structured storage for transactions and spans | +| `modules/sentry/preview.go` | Preview mapper for WebSocket broadcast | +| `modules/sentry/handler_test.go` | SDK compatibility tests | + +## Cleanup + +After testing, remove temporary directories: + +```bash +rm -rf /tmp/sentry-v2 /tmp/sentry-v3 /tmp/sentry-v4 /tmp/sentry-v5 +``` diff --git a/.gitignore b/.gitignore index 49ca122..d8e8e64 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ php/vardumper/box.phar php/vardumper/micro-*.sfx php/vardumper/vardumper-parser.phar modules/vardumper/bin/vardumper-parser-* +internal/frontend/dist \ No newline at end of file diff --git a/buggregator.yaml.example b/buggregator.yaml.example index 04ce077..a2bbbc4 100644 --- a/buggregator.yaml.example +++ b/buggregator.yaml.example @@ -8,6 +8,8 @@ # HTTP server server: addr: ${HTTP_ADDR::8000} + cors_origins: # Allowed CORS origins. Default: ["*"] (all origins). + - "*" # Use specific origins to restrict: ["http://localhost:3000"] # Database database: diff --git a/docker-compose.yaml b/docker-compose.yaml index 42d1648..c67b908 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -8,6 +8,10 @@ services: - "${SMTP_PORT:-1025}:1025" # SMTP - "${VAR_DUMPER_PORT:-9912}:9912" # VarDumper - "${MONOLOG_PORT:-9913}:9913" # Monolog + volumes: + - ../frontend/dist:/app/frontend/dist:ro # Mount local frontend build for development + environment: + FRONTEND_DIR: /app/frontend/dist # Serve from mounted volume instead of embedded networks: - buggregator @@ -40,12 +44,17 @@ services: RAY_PORT: 8000 VAR_DUMPER_SERVER: buggregator:9912 SENTRY_LARAVEL_DSN: http://sentry@buggregator:8000/default + SENTRY_TRACES_SAMPLE_RATE: "1.0" LOG_SOCKET_URL: buggregator:9913 INSPECTOR_URL: http://inspector@buggregator:8000 INSPECTOR_API_KEY: test PROFILER_ENDPOINT: http://profiler@buggregator:8000 HTTP_DUMP_ENDPOINT: http://http-dump@buggregator:8000 SMS_ENDPOINT: http://buggregator:8000/sms + volumes: + - ../examples/app:/app/app:ro + - ../examples/routes:/app/routes:ro + - ../examples/config/sentry.php:/app/config/sentry.php:ro networks: - buggregator diff --git a/e2e/tests/helpers.ts b/e2e/tests/helpers.ts index a0fb82c..a6d82f4 100644 --- a/e2e/tests/helpers.ts +++ b/e2e/tests/helpers.ts @@ -15,13 +15,17 @@ export async function triggerExample(action: string, route = '/example/call'): P // We don't care about the response, just that it was sent } -/** Clear all events via the API */ +/** Clear all events via the API (including sentry structured tables) */ export async function clearEvents(): Promise { await fetch(`${BUGGREGATOR_URL}/api/events`, { method: 'DELETE', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({}), }); + // Also clear sentry structured tables. + await fetch(`${BUGGREGATOR_URL}/api/sentry/all`, { + method: 'DELETE', + }).catch(() => {}); } /** Get event count from the API */ diff --git a/e2e/tests/sentry-navigation.spec.ts b/e2e/tests/sentry-navigation.spec.ts new file mode 100644 index 0000000..624d2a2 --- /dev/null +++ b/e2e/tests/sentry-navigation.spec.ts @@ -0,0 +1,494 @@ +import { test, expect, Page } from '@playwright/test'; +import { triggerExample, clearEvents, openBuggregator, waitForEvents } from './helpers'; + +const BUGGREGATOR = 'http://localhost:8000'; + +test.describe.configure({ mode: 'serial' }); + +// ============================================================ +// Helpers +// ============================================================ + +async function goToSentry(page: Page): Promise { + await openBuggregator(page); + await page.locator('a').filter({ hasText: 'Sentry' }).first().click(); + await page.waitForTimeout(1500); +} + +async function waitForSubNav(page: Page): Promise { + await expect(page.locator('text=Exceptions').first()).toBeVisible({ timeout: 10_000 }); +} + +async function waitForPreviewCard(page: Page, timeout = 15_000): Promise { + await expect(page.locator('.preview-card').first()).toBeVisible({ timeout }); +} + +// ============================================================ +// 1. Sentry Exceptions — Timeline navigation +// ============================================================ +test.describe('Sentry Exceptions — Timeline', () => { + test.beforeAll(async () => { + await clearEvents(); + await triggerExample('sentry:trace_with_error'); + await waitForEvents(undefined as unknown as Page, 1); + }); + + test('sidebar navigates to /sentry/exceptions with sub-nav', async ({ page }) => { + await goToSentry(page); + await waitForSubNav(page); + + expect(page.url()).toContain('/sentry/exceptions'); + await expect(page.locator('text=Timeline').first()).toBeVisible(); + await expect(page.locator('text=Group by type').first()).toBeVisible(); + }); + + test('event card is visible and clickable', async ({ page }) => { + await goToSentry(page); + await waitForSubNav(page); + await waitForPreviewCard(page); + + const card = page.locator('.preview-card').first(); + // Card should have sentry type label + const cardText = await card.textContent(); + expect(cardText?.toLowerCase()).toContain('sentry'); + }); + + test('clicking event body link opens detail at /sentry/event/:id', async ({ page }) => { + await goToSentry(page); + await waitForSubNav(page); + await waitForPreviewCard(page); + + // Click the body link inside the card + const bodyLink = page.locator('.preview-card a').first(); + await bodyLink.click(); + await page.waitForTimeout(2000); + + // Should be on /sentry/event/ + expect(page.url()).toMatch(/\/sentry\/(event\/)?[0-9a-f-]+/); + }); + + test('detail page shows exception content', async ({ page }) => { + await goToSentry(page); + await waitForSubNav(page); + await waitForPreviewCard(page); + + await page.locator('.preview-card a').first().click(); + await page.waitForTimeout(2000); + + // Should show exception info — at least one of these + const body = await page.textContent('body'); + expect(body!.length).toBeGreaterThan(200); + }); + + test('"Open full event" header button also opens detail', async ({ page }) => { + await goToSentry(page); + await waitForSubNav(page); + await waitForPreviewCard(page); + + const openBtn = page.locator('.preview-card a[title="Open full event"]').first(); + if (await openBtn.isVisible().catch(() => false)) { + await openBtn.click(); + await page.waitForTimeout(2000); + expect(page.url()).toMatch(/\/sentry\/(event\/)?[0-9a-f-]+/); + } + }); +}); + +// ============================================================ +// 2. Sentry Exceptions — Grouped view +// ============================================================ +test.describe('Sentry Exceptions — Grouped', () => { + test.beforeAll(async () => { + await clearEvents(); + // Send multiple exceptions to populate grouped view + await triggerExample('sentry:trace_with_error'); + await triggerExample('sentry:trace_with_error'); + await triggerExample('sentry:event'); + await waitForEvents(undefined as unknown as Page, 3); + }); + + test('"Group by type" toggle shows grouped list', async ({ page }) => { + await goToSentry(page); + await waitForSubNav(page); + + await page.locator('text=Group by type').first().click(); + await page.waitForTimeout(2000); + + expect(page.url()).toContain('/sentry/exceptions'); + const body = await page.textContent('body'); + expect(body!.length).toBeGreaterThan(50); + }); + + test('switching back to Timeline shows event cards', async ({ page }) => { + await goToSentry(page); + await waitForSubNav(page); + + await page.locator('text=Group by type').first().click(); + await page.waitForTimeout(1000); + + await page.locator('text=Timeline').first().click(); + await page.waitForTimeout(1000); + + expect(page.url()).toContain('/sentry/exceptions'); + await waitForPreviewCard(page); + }); +}); + +// ============================================================ +// 3. Sentry Sub-Navigation — tab switching +// ============================================================ +test.describe('Sentry Sub-Navigation', () => { + test.beforeAll(async () => { + await clearEvents(); + // Send trace + logs to populate all tabs + await triggerExample('sentry:trace_with_error'); + await triggerExample('sentry:trace'); + await triggerExample('sentry:logs'); + await waitForEvents(undefined as unknown as Page, 2); + // Extra wait for structured data processing + await new Promise(r => setTimeout(r, 3000)); + }); + + test('Exceptions tab is always visible and active by default', async ({ page }) => { + await goToSentry(page); + await waitForSubNav(page); + + const tab = page.locator('a').filter({ hasText: 'Exceptions' }).first(); + await expect(tab).toBeVisible(); + }); + + test('Traces tab navigates to /sentry/traces', async ({ page }) => { + await goToSentry(page); + await waitForSubNav(page); + + const tracesTab = page.locator('a').filter({ hasText: 'Traces' }).first(); + // Traces tab appears when trace data exists + if (await tracesTab.isVisible().catch(() => false)) { + await tracesTab.click(); + await page.waitForTimeout(1500); + expect(page.url()).toContain('/sentry/traces'); + + // Should show waterfall list / service map toggle + const hasToggle = await page.locator('text=Waterfall list').first().isVisible().catch(() => false); + if (hasToggle) { + await expect(page.locator('text=Service map').first()).toBeVisible(); + } + } + }); + + test('Logs tab navigates to /sentry/logs', async ({ page }) => { + await goToSentry(page); + await waitForSubNav(page); + + const logsTab = page.locator('a').filter({ hasText: 'Logs' }).first(); + if (await logsTab.isVisible().catch(() => false)) { + await logsTab.click(); + await page.waitForTimeout(1500); + expect(page.url()).toContain('/sentry/logs'); + } + }); + + test('clicking Exceptions tab returns to /sentry/exceptions', async ({ page }) => { + await goToSentry(page); + await waitForSubNav(page); + + // Navigate to traces first if available + const tracesTab = page.locator('a').filter({ hasText: 'Traces' }).first(); + if (await tracesTab.isVisible().catch(() => false)) { + await tracesTab.click(); + await page.waitForTimeout(1000); + } + + // Click back to Exceptions + await page.locator('a').filter({ hasText: 'Exceptions' }).first().click(); + await page.waitForTimeout(1000); + expect(page.url()).toContain('/sentry/exceptions'); + }); +}); + +// ============================================================ +// 4. Sentry Traces — list and detail page navigation +// ============================================================ +test.describe('Sentry Traces — detail navigation', () => { + test.beforeAll(async () => { + await clearEvents(); + await triggerExample('sentry:trace'); + await triggerExample('sentry:trace_with_error'); + await waitForEvents(undefined as unknown as Page, 2); + await new Promise(r => setTimeout(r, 3000)); + }); + + test('traces page shows trace cards when data exists', async ({ page }) => { + await page.goto(`${BUGGREGATOR}/sentry/traces`); + await page.waitForLoadState('networkidle'); + await page.waitForTimeout(2000); + + const body = await page.textContent('body'); + // Should show either trace cards or empty state with setup instructions + expect(body!.length).toBeGreaterThan(30); + }); + + test('clicking a trace card navigates to trace detail', async ({ page }) => { + await page.goto(`${BUGGREGATOR}/sentry/traces`); + await page.waitForLoadState('networkidle'); + await page.waitForTimeout(2000); + + // Look for trace cards (they have class trace-card) + const traceCard = page.locator('.trace-card').first(); + if (await traceCard.isVisible().catch(() => false)) { + await traceCard.click(); + await page.waitForTimeout(2000); + + // Should navigate to /sentry/traces/ + expect(page.url()).toMatch(/\/sentry\/traces\/[0-9a-f]+/); + + // Trace detail should show Spans tab + await expect(page.locator('text=Spans').first()).toBeVisible({ timeout: 5000 }); + } + }); + + test('trace detail shows waterfall with spans', async ({ page }) => { + await page.goto(`${BUGGREGATOR}/sentry/traces`); + await page.waitForLoadState('networkidle'); + await page.waitForTimeout(2000); + + const traceCard = page.locator('.trace-card').first(); + if (await traceCard.isVisible().catch(() => false)) { + await traceCard.click(); + await page.waitForTimeout(2000); + + // Waterfall should show operation names + const hasDbQuery = await page.locator('text=db.query').first().isVisible().catch(() => false); + const hasHttpClient = await page.locator('text=http.client').first().isVisible().catch(() => false); + const hasHttpServer = await page.locator('text=http.server').first().isVisible().catch(() => false); + + // At least one span operation should be visible + expect(hasDbQuery || hasHttpClient || hasHttpServer).toBeTruthy(); + } + }); + + test('trace detail Related Errors tab shows error entries', async ({ page }) => { + await page.goto(`${BUGGREGATOR}/sentry/traces`); + await page.waitForLoadState('networkidle'); + await page.waitForTimeout(2000); + + // Find the trace that has errors (from sentry:trace_with_error) + const traceCards = page.locator('.trace-card'); + const count = await traceCards.count(); + + for (let i = 0; i < count; i++) { + const card = traceCards.nth(i); + const text = await card.textContent(); + // The trace_with_error sends "POST /api/checkout" or has "error" badge + if (text?.includes('error') || text?.includes('checkout')) { + await card.click(); + await page.waitForTimeout(2000); + break; + } + } + + // If we're on a trace detail page, check Related Errors tab + if (page.url().match(/\/sentry\/traces\/[0-9a-f]+/)) { + const errorsTab = page.locator('button').filter({ hasText: 'Related Errors' }).first(); + if (await errorsTab.isVisible().catch(() => false)) { + await errorsTab.click(); + await page.waitForTimeout(1000); + + // Error entry should be visible with exception type + const errorLink = page.locator('a').filter({ hasText: 'RuntimeException' }).first(); + await expect(errorLink).toBeVisible({ timeout: 5000 }); + + // The link should exist and point to a sentry event detail URL + const href = await errorLink.getAttribute('href'); + expect(href).toBeTruthy(); + + // Click the link — should navigate to event detail, NOT 404 + await errorLink.click(); + await page.waitForTimeout(3000); + + expect(page.url()).not.toContain('/404'); + expect(page.url()).toMatch(/\/sentry\/(event\/)?[0-9a-f-]+/); + } + } + }); +}); + +// ============================================================ +// 5. Sentry Logs — page and filtering +// ============================================================ +test.describe('Sentry Logs', () => { + test.beforeAll(async () => { + await clearEvents(); + await triggerExample('sentry:logs'); + await new Promise(r => setTimeout(r, 3000)); + }); + + test('logs page shows log rows or empty state', async ({ page }) => { + await page.goto(`${BUGGREGATOR}/sentry/logs`); + await page.waitForLoadState('networkidle'); + await page.waitForTimeout(2000); + + const body = await page.textContent('body'); + expect(body!.length).toBeGreaterThan(20); + }); + + test('log level filter chips are visible', async ({ page }) => { + await page.goto(`${BUGGREGATOR}/sentry/logs`); + await page.waitForLoadState('networkidle'); + await page.waitForTimeout(2000); + + // If logs tab is visible, filter chips should be present + const logsTab = page.locator('a').filter({ hasText: 'Logs' }).first(); + if (await logsTab.isVisible().catch(() => false)) { + // Check for filter buttons + const allChip = page.locator('button').filter({ hasText: /^all$/i }).first(); + if (await allChip.isVisible().catch(() => false)) { + await expect(allChip).toBeVisible(); + // Click error filter + const errorChip = page.locator('button').filter({ hasText: /^error$/i }).first(); + if (await errorChip.isVisible().catch(() => false)) { + await errorChip.click(); + await page.waitForTimeout(500); + // Should still be on logs page + expect(page.url()).toContain('/sentry/logs'); + } + } + } + }); +}); + +// ============================================================ +// 5b. Sentry Logs — trace link navigation +// ============================================================ +test.describe('Sentry Logs — trace link', () => { + test.beforeAll(async () => { + await clearEvents(); + // Send logs with orphan trace_ids (no matching trace exists) + await triggerExample('sentry:logs'); + await new Promise(r => setTimeout(r, 3000)); + }); + + test('log rows with orphan trace_id do NOT show a trace link', async ({ page }) => { + await page.goto(`${BUGGREGATOR}/sentry/logs`); + await page.waitForLoadState('networkidle'); + await page.waitForTimeout(2000); + + // Logs were sent with random trace_ids that don't match any trace. + // The "trace →" link should NOT appear because trace_exists=false. + const traceLink = page.locator('.log-row__trace-link').first(); + const isVisible = await traceLink.isVisible().catch(() => false); + expect(isVisible).toBeFalsy(); + }); + + test('log rows with existing trace_id show a working trace link', async ({ page }) => { + // Now send a trace so a real trace_id exists, then send logs referencing it + // sentry:trace_with_error creates both a trace and an error event + await triggerExample('sentry:trace_with_error'); + await new Promise(r => setTimeout(r, 3000)); + + await page.goto(`${BUGGREGATOR}/sentry/logs`); + await page.waitForLoadState('networkidle'); + await page.waitForTimeout(2000); + + // Check if any trace link is now visible + const traceLink = page.locator('.log-row__trace-link').first(); + if (await traceLink.isVisible().catch(() => false)) { + const href = await traceLink.getAttribute('href'); + expect(href).toContain('/sentry/traces/'); + + // Click it — should navigate to trace detail, NOT 404 + await traceLink.click(); + await page.waitForTimeout(3000); + + expect(page.url()).not.toContain('/404'); + expect(page.url()).toMatch(/\/sentry\/traces\/[0-9a-f]+/); + await expect(page.locator('text=Spans').first()).toBeVisible({ timeout: 5000 }); + } + }); +}); + +// ============================================================ +// 6. Global feed — Sentry events link correctly +// ============================================================ +test.describe('Global Feed — Sentry event links', () => { + test.beforeAll(async () => { + await clearEvents(); + await triggerExample('sentry:trace_with_error'); + await waitForEvents(undefined as unknown as Page, 1); + }); + + test('sentry event in global feed links to /sentry/event/:id', async ({ page }) => { + await openBuggregator(page); + await page.waitForTimeout(2000); + await waitForPreviewCard(page); + + // Find the sentry-type card (has border-l-rose-500 stripe and "sentry" text) + const sentryCard = page.locator('.preview-card--type-sentry').first(); + if (await sentryCard.isVisible().catch(() => false)) { + const bodyLink = sentryCard.locator('a').first(); + await bodyLink.click(); + await page.waitForTimeout(2000); + + // Should navigate to sentry event detail + expect(page.url()).toMatch(/\/sentry\/(event\/)?[0-9a-f-]+/); + } + }); + + test('detail page back to feed via sidebar Home', async ({ page }) => { + await openBuggregator(page); + expect(page.url()).toBe(BUGGREGATOR + '/'); + await waitForPreviewCard(page); + }); +}); + +// ============================================================ +// 7. Direct URL access — all routes resolve +// ============================================================ +test.describe('Sentry Routes — direct URL', () => { + test('/sentry redirects to /sentry/exceptions', async ({ page }) => { + await page.goto(`${BUGGREGATOR}/sentry`); + await page.waitForLoadState('networkidle'); + await page.waitForTimeout(1000); + expect(page.url()).toContain('/sentry/exceptions'); + }); + + test('/sentry/exceptions loads', async ({ page }) => { + await page.goto(`${BUGGREGATOR}/sentry/exceptions`); + await page.waitForLoadState('networkidle'); + await expect(page.locator('text=Exceptions').first()).toBeVisible({ timeout: 10_000 }); + }); + + test('/sentry/traces loads', async ({ page }) => { + await page.goto(`${BUGGREGATOR}/sentry/traces`); + await page.waitForLoadState('networkidle'); + const body = await page.textContent('body'); + expect(body!.length).toBeGreaterThan(20); + }); + + test('/sentry/logs loads', async ({ page }) => { + await page.goto(`${BUGGREGATOR}/sentry/logs`); + await page.waitForLoadState('networkidle'); + const body = await page.textContent('body'); + expect(body!.length).toBeGreaterThan(20); + }); + + test('/sentry/event/:id redirect from /sentry/:id works', async ({ page }) => { + // First get an event ID + await clearEvents(); + await triggerExample('sentry:event'); + await waitForEvents(undefined as unknown as Page, 1); + + const res = await fetch(`${BUGGREGATOR}/api/events?type=sentry`); + const json = await res.json(); + const eventId = json.data?.[0]?.uuid; + + if (eventId) { + // Navigate to /sentry/ — should redirect to /sentry/event/ + await page.goto(`${BUGGREGATOR}/sentry/${eventId}`); + await page.waitForLoadState('networkidle'); + await page.waitForTimeout(2000); + + expect(page.url()).toContain(`/sentry/event/${eventId}`); + } + }); +}); diff --git a/internal/app/app.go b/internal/app/app.go index 0b5dfa6..edbf782 100644 --- a/internal/app/app.go +++ b/internal/app/app.go @@ -162,11 +162,19 @@ func (a *App) Run() { mux.HandleFunc("GET /connection/websocket", a.hub.HandleUpgrade) mux.HandleFunc("GET /ws", a.hub.HandleUpgrade) - // Prepare embedded frontend filesystem. - frontendFS, err := fs.Sub(frontend.Dist, "dist") - if err != nil { - slog.Error("failed to load frontend", "err", err) - os.Exit(1) + // Prepare frontend filesystem. + // When FRONTEND_DIR is set, serve from disk (for development); otherwise use embedded build. + var frontendFS fs.FS + if dir := os.Getenv("FRONTEND_DIR"); dir != "" { + slog.Info("serving frontend from disk", "dir", dir) + frontendFS = os.DirFS(dir) + } else { + var err error + frontendFS, err = fs.Sub(frontend.Dist, "dist") + if err != nil { + slog.Error("failed to load frontend", "err", err) + os.Exit(1) + } } // Register ingestion pipeline + frontend fallback as catch-all. @@ -202,10 +210,13 @@ func (a *App) Run() { // Start WebSocket hub. go a.hub.Run(ctx) - // Start HTTP server (with optional metrics middleware). + // Start HTTP server (with CORS and optional metrics middleware). var handler http.Handler = mux + if len(a.cfg.Server.CORSOrigins) > 0 { + handler = httpserver.CORSMiddleware(handler, a.cfg.Server.CORSOrigins) + } if a.metrics != nil { - handler = metrics.HTTPMiddleware(mux, a.metrics) + handler = metrics.HTTPMiddleware(handler, a.metrics) } srv := &http.Server{Addr: a.cfg.HTTPAddr, Handler: handler} diff --git a/internal/app/config.go b/internal/app/config.go index 3120cb5..45a5a3c 100644 --- a/internal/app/config.go +++ b/internal/app/config.go @@ -70,7 +70,8 @@ type MetricsConfig struct { } type ServerConfig struct { - Addr string `yaml:"addr"` + Addr string `yaml:"addr"` + CORSOrigins []string `yaml:"cors_origins"` // Allowed CORS origins. Empty = CORS disabled. Use ["*"] to allow all. } type StorageConfig struct { @@ -203,6 +204,15 @@ func LoadConfig() Config { cfg.Auth.Scopes = coalesce(os.Getenv("AUTH_SCOPES"), fileCfg.Auth.Scopes, "openid,email,profile") cfg.Auth.JWTSecret = coalesce(os.Getenv("AUTH_JWT_SECRET"), fileCfg.Auth.JWTSecret) + // CORS origins. + cfg.Server.CORSOrigins = fileCfg.Server.CORSOrigins + if env := os.Getenv("CORS_ORIGINS"); env != "" { + cfg.Server.CORSOrigins = strings.Split(env, ",") + } + if len(cfg.Server.CORSOrigins) == 0 { + cfg.Server.CORSOrigins = []string{"*"} + } + // Modules: merge from file config, env override. cfg.Modules = fileCfg.Modules if env := os.Getenv("CLIENT_SUPPORTED_EVENTS"); env != "" { diff --git a/internal/frontend/dist/assets/@vue-flow-CYFxhQNu.js b/internal/frontend/dist/assets/@vue-flow-CYFxhQNu.js deleted file mode 100644 index b019202..0000000 --- a/internal/frontend/dist/assets/@vue-flow-CYFxhQNu.js +++ /dev/null @@ -1,26 +0,0 @@ -import{i as xt,e as Hi,w as ge,p as pt,g as Fi,o as rn,a as Nt,r as Is,c as re,d as ye,u as Cs,b as ks,f as fe,h as pe,j as He,k as no,l as rt,m as ee,n as bo,t as Ms,q as Ts,s as xe,v as Ye,x as Ps,y as me,z as Qe,A as At,B as je,C as st,D as oo,E as ze,F as Be,G as Eo,H as Ke,I as Yi,J as Os,K as mt,L as le,M as Ds,N as ve,O as Gi,P as sn,Q as $s,R as As,S as Xi,T as zs,U as Bs}from"./@vue-rv4FKaB-.js";var Ui=Object.defineProperty,Rs=(e,t,n)=>t in e?Ui(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Vs=(e,t)=>{for(var n in t)Ui(e,n,{get:t[n],enumerable:!0})},Ls=(e,t,n)=>Rs(e,t+"",n),Zi={};Vs(Zi,{Graph:()=>Ie,alg:()=>xo,json:()=>ji,version:()=>Ys});var Hs=Object.defineProperty,Wi=(e,t)=>{for(var n in t)Hs(e,n,{get:t[n],enumerable:!0})},Ie=class{constructor(e){this._isDirected=!0,this._isMultigraph=!1,this._isCompound=!1,this._nodes={},this._in={},this._preds={},this._out={},this._sucs={},this._edgeObjs={},this._edgeLabels={},this._nodeCount=0,this._edgeCount=0,this._defaultNodeLabelFn=()=>{},this._defaultEdgeLabelFn=()=>{},e&&(this._isDirected="directed"in e?e.directed:!0,this._isMultigraph="multigraph"in e?e.multigraph:!1,this._isCompound="compound"in e?e.compound:!1),this._isCompound&&(this._parent={},this._children={},this._children["\0"]={})}isDirected(){return this._isDirected}isMultigraph(){return this._isMultigraph}isCompound(){return this._isCompound}setGraph(e){return this._label=e,this}graph(){return this._label}setDefaultNodeLabel(e){return typeof e!="function"?this._defaultNodeLabelFn=()=>e:this._defaultNodeLabelFn=e,this}nodeCount(){return this._nodeCount}nodes(){return Object.keys(this._nodes)}sources(){return this.nodes().filter(e=>Object.keys(this._in[e]).length===0)}sinks(){return this.nodes().filter(e=>Object.keys(this._out[e]).length===0)}setNodes(e,t){return e.forEach(n=>{t!==void 0?this.setNode(n,t):this.setNode(n)}),this}setNode(e,t){return e in this._nodes?(arguments.length>1&&(this._nodes[e]=t),this):(this._nodes[e]=arguments.length>1?t:this._defaultNodeLabelFn(e),this._isCompound&&(this._parent[e]="\0",this._children[e]={},this._children["\0"][e]=!0),this._in[e]={},this._preds[e]={},this._out[e]={},this._sucs[e]={},++this._nodeCount,this)}node(e){return this._nodes[e]}hasNode(e){return e in this._nodes}removeNode(e){if(e in this._nodes){let t=n=>this.removeEdge(this._edgeObjs[n]);delete this._nodes[e],this._isCompound&&(this._removeFromParentsChildList(e),delete this._parent[e],this.children(e).forEach(n=>{this.setParent(n)}),delete this._children[e]),Object.keys(this._in[e]).forEach(t),delete this._in[e],delete this._preds[e],Object.keys(this._out[e]).forEach(t),delete this._out[e],delete this._sucs[e],--this._nodeCount}return this}setParent(e,t){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(t===void 0)t="\0";else{t+="";for(let n=t;n!==void 0;n=this.parent(n))if(n===e)throw new Error("Setting "+t+" as parent of "+e+" would create a cycle");this.setNode(t)}return this.setNode(e),this._removeFromParentsChildList(e),this._parent[e]=t,this._children[t][e]=!0,this}parent(e){if(this._isCompound){let t=this._parent[e];if(t!=="\0")return t}}children(e="\0"){if(this._isCompound){let t=this._children[e];if(t)return Object.keys(t)}else{if(e==="\0")return this.nodes();if(this.hasNode(e))return[]}return[]}predecessors(e){let t=this._preds[e];if(t)return Object.keys(t)}successors(e){let t=this._sucs[e];if(t)return Object.keys(t)}neighbors(e){let t=this.predecessors(e);if(t){let n=new Set(t);for(let o of this.successors(e))n.add(o);return Array.from(n.values())}}isLeaf(e){let t;return this.isDirected()?t=this.successors(e):t=this.neighbors(e),t.length===0}filterNodes(e){let t=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});t.setGraph(this.graph()),Object.entries(this._nodes).forEach(([i,r])=>{e(i)&&t.setNode(i,r)}),Object.values(this._edgeObjs).forEach(i=>{t.hasNode(i.v)&&t.hasNode(i.w)&&t.setEdge(i,this.edge(i))});let n={},o=i=>{let r=this.parent(i);return!r||t.hasNode(r)?(n[i]=r??void 0,r??void 0):r in n?n[r]:o(r)};return this._isCompound&&t.nodes().forEach(i=>t.setParent(i,o(i))),t}setDefaultEdgeLabel(e){return typeof e!="function"?this._defaultEdgeLabelFn=()=>e:this._defaultEdgeLabelFn=e,this}edgeCount(){return this._edgeCount}edges(){return Object.values(this._edgeObjs)}setPath(e,t){return e.reduce((n,o)=>(t!==void 0?this.setEdge(n,o,t):this.setEdge(n,o),o)),this}setEdge(e,t,n,o){let i,r,s,a,l=!1;typeof e=="object"&&e!==null&&"v"in e?(i=e.v,r=e.w,s=e.name,arguments.length===2&&(a=t,l=!0)):(i=e,r=t,s=o,arguments.length>2&&(a=n,l=!0)),i=""+i,r=""+r,s!==void 0&&(s=""+s);let u=kt(this._isDirected,i,r,s);if(u in this._edgeLabels)return l&&(this._edgeLabels[u]=a),this;if(s!==void 0&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(i),this.setNode(r),this._edgeLabels[u]=l?a:this._defaultEdgeLabelFn(i,r,s);let c=Fs(this._isDirected,i,r,s);return i=c.v,r=c.w,Object.freeze(c),this._edgeObjs[u]=c,Vo(this._preds[r],i),Vo(this._sucs[i],r),this._in[r][u]=c,this._out[i][u]=c,this._edgeCount++,this}edge(e,t,n){let o=arguments.length===1?Vn(this._isDirected,e):kt(this._isDirected,e,t,n);return this._edgeLabels[o]}edgeAsObj(e,t,n){let o=arguments.length===1?this.edge(e):this.edge(e,t,n);return typeof o!="object"?{label:o}:o}hasEdge(e,t,n){return(arguments.length===1?Vn(this._isDirected,e):kt(this._isDirected,e,t,n))in this._edgeLabels}removeEdge(e,t,n){let o=arguments.length===1?Vn(this._isDirected,e):kt(this._isDirected,e,t,n),i=this._edgeObjs[o];if(i){let r=i.v,s=i.w;delete this._edgeLabels[o],delete this._edgeObjs[o],Lo(this._preds[s],r),Lo(this._sucs[r],s),delete this._in[s][o],delete this._out[r][o],this._edgeCount--}return this}inEdges(e,t){return this.isDirected()?this.filterEdges(this._in[e],e,t):this.nodeEdges(e,t)}outEdges(e,t){return this.isDirected()?this.filterEdges(this._out[e],e,t):this.nodeEdges(e,t)}nodeEdges(e,t){if(e in this._nodes)return this.filterEdges({...this._in[e],...this._out[e]},e,t)}_removeFromParentsChildList(e){delete this._children[this._parent[e]][e]}filterEdges(e,t,n){if(!e)return;let o=Object.values(e);return n?o.filter(i=>i.v===t&&i.w===n||i.v===n&&i.w===t):o}};function Vo(e,t){e[t]?e[t]++:e[t]=1}function Lo(e,t){e[t]!==void 0&&!--e[t]&&delete e[t]}function kt(e,t,n,o){let i=""+t,r=""+n;if(!e&&i>r){let s=i;i=r,r=s}return i+""+r+""+(o===void 0?"\0":o)}function Fs(e,t,n,o){let i=""+t,r=""+n;if(!e&&i>r){let a=i;i=r,r=a}let s={v:i,w:r};return o&&(s.name=o),s}function Vn(e,t){return kt(e,t.v,t.w,t.name)}var Ys="4.0.1",ji={};Wi(ji,{read:()=>Zs,write:()=>Gs});function Gs(e){let t={options:{directed:e.isDirected(),multigraph:e.isMultigraph(),compound:e.isCompound()},nodes:Xs(e),edges:Us(e)},n=e.graph();return n!==void 0&&(t.value=structuredClone(n)),t}function Xs(e){return e.nodes().map(t=>{let n=e.node(t),o=e.parent(t),i={v:t};return n!==void 0&&(i.value=n),o!==void 0&&(i.parent=o),i})}function Us(e){return e.edges().map(t=>{let n=e.edge(t),o={v:t.v,w:t.w};return t.name!==void 0&&(o.name=t.name),n!==void 0&&(o.value=n),o})}function Zs(e){let t=new Ie(e.options);return e.value!==void 0&&t.setGraph(e.value),e.nodes.forEach(n=>{t.setNode(n.v,n.value),n.parent&&t.setParent(n.v,n.parent)}),e.edges.forEach(n=>{t.setEdge({v:n.v,w:n.w,name:n.name},n.value)}),t}var xo={};Wi(xo,{CycleException:()=>hn,bellmanFord:()=>Ki,components:()=>Ks,dijkstra:()=>fn,dijkstraAll:()=>Qs,findCycles:()=>ea,floydWarshall:()=>na,isAcyclic:()=>ia,postorder:()=>sa,preorder:()=>aa,prim:()=>la,shortestPaths:()=>ua,tarjan:()=>Ji,topsort:()=>Qi});var Ws=()=>1;function Ki(e,t,n,o){return js(e,String(t),n||Ws,o||function(i){return e.outEdges(i)})}function js(e,t,n,o){let i={},r,s=0,a=e.nodes(),l=function(d){let f=n(d);i[d.v].distance+fe.key)}has(e){return e in this._keyIndices}priority(e){let t=this._keyIndices[e];if(t!==void 0)return this._arr[t].priority}min(){if(this.size()===0)throw new Error("Queue underflow");return this._arr[0].key}add(e,t){let n=this._keyIndices,o=String(e);if(!(o in n)){let i=this._arr,r=i.length;return n[o]=r,i.push({key:o,priority:t}),this._decrease(r),!0}return!1}removeMin(){this._swap(0,this._arr.length-1);let e=this._arr.pop();return delete this._keyIndices[e.key],this._heapify(0),e.key}decrease(e,t){let n=this._keyIndices[e];if(n===void 0)throw new Error(`Key not found: ${e}`);let o=this._arr[n].priority;if(t>o)throw new Error(`New priority is greater than current priority. Key: ${e} Old: ${o} New: ${t}`);this._arr[n].priority=t,this._decrease(n)}_heapify(e){let t=this._arr,n=2*e,o=n+1,i=e;n>1,!(t[o].priority1;function fn(e,t,n,o){let i=function(r){return e.outEdges(r)};return Js(e,String(t),n||qs,o||i)}function Js(e,t,n,o){let i={},r=new qi,s,a,l=function(u){let c=u.v!==s?u.v:u.w,d=i[c],f=n(u),h=a.distance+f;if(f<0)throw new Error("dijkstra does not allow negative edge weights. Bad edge: "+u+" Weight: "+f);h0&&(s=r.removeMin(),a=i[s],a.distance!==Number.POSITIVE_INFINITY);)o(s).forEach(l);return i}function Qs(e,t,n){return e.nodes().reduce(function(o,i){return o[i]=fn(e,i,t,n),o},{})}function Ji(e){let t=0,n=[],o={},i=[];function r(s){let a=o[s]={onStack:!0,lowlink:t,index:t++};if(n.push(s),e.successors(s).forEach(function(l){l in o?o[l].onStack&&(a.lowlink=Math.min(a.lowlink,o[l].index)):(r(l),a.lowlink=Math.min(a.lowlink,o[l].lowlink))}),a.lowlink===a.index){let l=[],u;do u=n.pop(),o[u].onStack=!1,l.push(u);while(s!==u);i.push(l)}}return e.nodes().forEach(function(s){s in o||r(s)}),i}function ea(e){return Ji(e).filter(function(t){return t.length>1||t.length===1&&e.hasEdge(t[0],t[0])})}var ta=()=>1;function na(e,t,n){return oa(e,t||ta,n||function(o){return e.outEdges(o)})}function oa(e,t,n){let o={},i=e.nodes();return i.forEach(function(r){o[r]={},o[r][r]={distance:0,predecessor:""},i.forEach(function(s){r!==s&&(o[r][s]={distance:Number.POSITIVE_INFINITY,predecessor:""})}),n(r).forEach(function(s){let a=s.v===r?s.w:s.v,l=t(s);o[r][a]={distance:l,predecessor:r}})}),i.forEach(function(r){let s=o[r];i.forEach(function(a){let l=o[a];i.forEach(function(u){let c=l[r],d=s[u],f=l[u],h=c.distance+d.distance;h{var l;return(l=e.isDirected()?e.successors(a):e.neighbors(a))!=null?l:[]},s={};return t.forEach(function(a){if(!e.hasNode(a))throw new Error("Graph does not have node: "+a);i=er(e,a,n==="post",s,r,o,i)}),i}function er(e,t,n,o,i,r,s){return t in o||(o[t]=!0,n||(s=r(s,t)),i(t).forEach(function(a){s=er(e,a,n,o,i,r,s)}),n&&(s=r(s,t))),s}function tr(e,t,n){return ra(e,t,n,function(o,i){return o.push(i),o},[])}function sa(e,t){return tr(e,t,"post")}function aa(e,t){return tr(e,t,"pre")}function la(e,t){let n=new Ie,o={},i=new qi,r;function s(l){let u=l.v===r?l.w:l.v,c=i.priority(u);if(c!==void 0){let d=t(l);d0;){if(r=i.removeMin(),r in o)n.setEdge(r,o[r]);else{if(a)throw new Error("Input graph is not connected: "+e);a=!0}e.nodeEdges(r).forEach(s)}return n}function ua(e,t,n,o){return ca(e,t,n,o??(i=>{let r=e.outEdges(i);return r??[]}))}function ca(e,t,n,o){if(n===void 0)return fn(e,t,n,o);let i=!1,r=e.nodes();for(let s=0;st.setNode(n,e.node(n))),e.edges().forEach(n=>{let o=t.edge(n.v,n.w)||{weight:0,minlen:1},i=e.edge(n);t.setEdge(n.v,n.w,{weight:o.weight+i.weight,minlen:Math.max(o.minlen,i.minlen)})}),t}function nr(e){let t=new Ie({multigraph:e.isMultigraph()}).setGraph(e.graph());return e.nodes().forEach(n=>{e.children(n).length||t.setNode(n,e.node(n))}),e.edges().forEach(n=>{t.setEdge(n,e.edge(n))}),t}function Ho(e,t){let n=e.x,o=e.y,i=t.x-n,r=t.y-o,s=e.width/2,a=e.height/2;if(!i&&!r)throw new Error("Not possible to find intersection inside of the rectangle");let l,u;return Math.abs(r)*s>Math.abs(i)*a?(r<0&&(a=-a),l=a*i/r,u=a):(i<0&&(s=-s),l=s,u=s*r/i),{x:n+l,y:o+u}}function Xt(e){let t=zt(ir(e)+1).map(()=>[]);return e.nodes().forEach(n=>{let o=e.node(n),i=o.rank;i!==void 0&&(t[i]||(t[i]=[]),t[i][o.order]=n)}),t}function fa(e){let t=e.nodes().map(o=>{let i=e.node(o).rank;return i===void 0?Number.MAX_VALUE:i}),n=$e(Math.min,t);e.nodes().forEach(o=>{let i=e.node(o);Object.hasOwn(i,"rank")&&(i.rank-=n)})}function ha(e){let t=e.nodes().map(s=>e.node(s).rank).filter(s=>s!==void 0),n=$e(Math.min,t),o=[];e.nodes().forEach(s=>{let a=e.node(s).rank-n;o[a]||(o[a]=[]),o[a].push(s)});let i=0,r=e.graph().nodeRankFactor;Array.from(o).forEach((s,a)=>{s===void 0&&a%r!==0?--i:s!==void 0&&i&&s.forEach(l=>e.node(l).rank+=i)})}function Fo(e,t,n,o){let i={width:0,height:0};return arguments.length>=4&&(i.rank=n,i.order=o),St(e,"border",i,t)}function ga(e,t=or){let n=[];for(let o=0;oor){let n=ga(t);return e(...n.map(o=>e(...o)))}else return e(...t)}function ir(e){let t=e.nodes().map(n=>{let o=e.node(n).rank;return o===void 0?Number.MIN_VALUE:o});return $e(Math.max,t)}function va(e,t){let n={lhs:[],rhs:[]};return e.forEach(o=>{t(o)?n.lhs.push(o):n.rhs.push(o)}),n}function rr(e,t){let n=Date.now();try{return t()}finally{console.log(e+" time: "+(Date.now()-n)+"ms")}}function sr(e,t){return t()}var pa=0;function No(e){let t=++pa;return e+(""+t)}function zt(e,t,n=1){t==null&&(t=e,e=0);let o=r=>rto[t]:n=t,Object.entries(e).reduce((o,[i,r])=>(o[i]=n(r,i),o),{})}function ma(e,t){return e.reduce((n,o,i)=>(n[o]=t[i],n),{})}var Cn="\0",ya="3.0.0",wa=class{constructor(){Ls(this,"_sentinel");let e={};e._next=e._prev=e,this._sentinel=e}dequeue(){let e=this._sentinel,t=e._prev;if(t!==e)return Yo(t),t}enqueue(e){let t=this._sentinel;e._prev&&e._next&&Yo(e),e._next=t._next,t._next._prev=e,t._next=e,e._prev=t}toString(){let e=[],t=this._sentinel,n=t._prev;for(;n!==t;)e.push(JSON.stringify(n,_a)),n=n._prev;return"["+e.join(", ")+"]"}};function Yo(e){e._prev._next=e._next,e._next._prev=e._prev,delete e._next,delete e._prev}function _a(e,t){if(e!=="_next"&&e!=="_prev")return t}var ba=wa;function Ea(e,t){if(e.nodeCount()<=1)return[];let n=Na(e,t);return xa(n.graph,n.buckets,n.zeroIdx).flatMap(o=>e.outEdges(o.v,o.w)||[])}function xa(e,t,n){var o;let i=[],r=t[t.length-1],s=t[0],a;for(;e.nodeCount();){for(;a=s.dequeue();)Ln(e,t,n,a);for(;a=r.dequeue();)Ln(e,t,n,a);if(e.nodeCount()){for(let l=t.length-2;l>0;--l)if(a=(o=t[l])==null?void 0:o.dequeue(),a){i=i.concat(Ln(e,t,n,a,!0)||[]);break}}}return i}function Ln(e,t,n,o,i){let r=[],s=i?r:void 0;return(e.inEdges(o.v)||[]).forEach(a=>{let l=e.edge(a),u=e.node(a.v);i&&r.push({v:a.v,w:a.w}),u.out-=l,io(t,n,u)}),(e.outEdges(o.v)||[]).forEach(a=>{let l=e.edge(a),u=a.w,c=e.node(u);c.in-=l,io(t,n,c)}),e.removeNode(o.v),s}function Na(e,t){let n=new Ie,o=0,i=0;e.nodes().forEach(a=>{n.setNode(a,{v:a,in:0,out:0})}),e.edges().forEach(a=>{let l=n.edge(a.v,a.w)||0,u=t(a),c=l+u;n.setEdge(a.v,a.w,c);let d=n.node(a.v),f=n.node(a.w);i=Math.max(i,d.out+=u),o=Math.max(o,f.in+=u)});let r=Sa(i+o+3).map(()=>new ba),s=o+1;return n.nodes().forEach(a=>{io(r,s,n.node(a))}),{graph:n,buckets:r,zeroIdx:s}}function io(e,t,n){var o,i,r;n.out?n.in?(r=e[n.out-n.in+t])==null||r.enqueue(n):(i=e[e.length-1])==null||i.enqueue(n):(o=e[0])==null||o.enqueue(n)}function Sa(e){let t=[];for(let n=0;n{let o=e.edge(n);e.removeEdge(n),o.forwardName=n.name,o.reversed=!0,e.setEdge(n.w,n.v,o,No("rev"))});function t(n){return o=>n.edge(o).weight}}function Ca(e){let t=[],n={},o={};function i(r){Object.hasOwn(o,r)||(o[r]=!0,n[r]=!0,e.outEdges(r).forEach(s=>{Object.hasOwn(n,s.w)?t.push(s):i(s.w)}),delete n[r])}return e.nodes().forEach(i),t}function ka(e){e.edges().forEach(t=>{let n=e.edge(t);if(n.reversed){e.removeEdge(t);let o=n.forwardName;delete n.reversed,delete n.forwardName,e.setEdge(t.w,t.v,n,o)}})}function Ma(e){e.graph().dummyChains=[],e.edges().forEach(t=>Ta(e,t))}function Ta(e,t){let n=t.v,o=e.node(n).rank,i=t.w,r=e.node(i).rank,s=t.name,a=e.edge(t),l=a.labelRank;if(r===o+1)return;e.removeEdge(t);let u,c,d;for(d=0,++o;o{let n=e.node(t),o=n.edgeLabel,i;for(e.setEdge(n.edgeObj,o);n.dummy;)i=e.successors(t)[0],e.removeNode(t),o.points.push({x:n.x,y:n.y}),n.dummy==="edge-label"&&(o.x=n.x,o.y=n.y,o.width=n.width,o.height=n.height),t=i,n=e.node(t)})}function So(e){let t={};function n(o){let i=e.node(o);if(Object.hasOwn(t,o))return i.rank;t[o]=!0;let r=e.outEdges(o),s=r?r.map(l=>l==null?Number.POSITIVE_INFINITY:n(l.w)-e.edge(l).minlen):[],a=$e(Math.min,s);return a===Number.POSITIVE_INFINITY&&(a=0),i.rank=a}e.sources().forEach(n)}function yt(e,t){return e.node(t.w).rank-e.node(t.v).rank-e.edge(t).minlen}var ar=Oa;function Oa(e){let t=new Ie({directed:!1}),n=e.nodes();if(n.length===0)throw new Error("Graph must have at least one node");let o=n[0],i=e.nodeCount();t.setNode(o,{});let r,s;for(;Da(t,e){let s=r.v,a=o===s?r.w:s;!e.hasNode(a)&&!yt(t,r)&&(e.setNode(a,{}),e.setEdge(o,a,{}),n(a))})}return e.nodes().forEach(n),e.nodeCount()}function $a(e,t){return t.edges().reduce((n,o)=>{let i=Number.POSITIVE_INFINITY;return e.hasNode(o.v)!==e.hasNode(o.w)&&(i=yt(t,o)),it.node(o).rank+=n)}var{preorder:za,postorder:Ba}=xo,Ra=ct;ct.initLowLimValues=Co;ct.initCutValues=Io;ct.calcCutValue=lr;ct.leaveEdge=cr;ct.enterEdge=dr;ct.exchangeEdges=fr;function ct(e){e=da(e),So(e);let t=ar(e);Co(t),Io(t,e);let n,o;for(;n=cr(t);)o=dr(t,e,n),fr(t,e,n,o)}function Io(e,t){let n=Ba(e,e.nodes());n=n.slice(0,n.length-1),n.forEach(o=>Va(e,t,o))}function Va(e,t,n){let o=e.node(n).parent,i=e.edge(n,o);i.cutvalue=lr(e,t,n)}function lr(e,t,n){let o=e.node(n).parent,i=!0,r=t.edge(n,o),s=0;r||(i=!1,r=t.edge(o,n)),s=r.weight;let a=t.nodeEdges(n);return a&&a.forEach(l=>{let u=l.v===n,c=u?l.w:l.v;if(c!==o){let d=u===i,f=t.edge(l).weight;if(s+=d?f:-f,Ha(e,n,c)){let h=e.edge(n,c).cutvalue;s+=d?-h:h}}}),s}function Co(e,t){arguments.length<2&&(t=e.nodes()[0]),ur(e,{},1,t)}function ur(e,t,n,o,i){let r=n,s=e.node(o);t[o]=!0;let a=e.neighbors(o);return a&&a.forEach(l=>{Object.hasOwn(t,l)||(n=ur(e,t,n,l,o))}),s.low=r,s.lim=n++,i?s.parent=i:delete s.parent,n}function cr(e){return e.edges().find(t=>e.edge(t).cutvalue<0)}function dr(e,t,n){let o=n.v,i=n.w;t.hasEdge(o,i)||(o=n.w,i=n.v);let r=e.node(o),s=e.node(i),a=r,l=!1;return r.lim>s.lim&&(a=s,l=!0),t.edges().filter(u=>l===Go(e,e.node(u.v),a)&&l!==Go(e,e.node(u.w),a)).reduce((u,c)=>yt(t,c)!e.node(i).parent);if(!n)return;let o=za(e,[n]);o=o.slice(1),o.forEach(i=>{let r=e.node(i).parent,s=t.edge(i,r),a=!1;s||(s=t.edge(r,i),a=!0),t.node(i).rank=t.node(r).rank+(a?s.minlen:-s.minlen)})}function Ha(e,t,n){return e.hasEdge(t,n)}function Go(e,t,n){return n.low<=t.lim&&t.lim<=n.lim}var Fa=Ya;function Ya(e){let t=e.graph().ranker;if(typeof t=="function")return t(e);switch(t){case"network-simplex":Xo(e);break;case"tight-tree":Xa(e);break;case"longest-path":Ga(e);break;case"none":break;default:Xo(e)}}var Ga=So;function Xa(e){So(e),ar(e)}function Xo(e){Ra(e)}var Ua=Za;function Za(e){let t=ja(e);e.graph().dummyChains.forEach(n=>{let o=e.node(n),i=o.edgeObj,r=Wa(e,t,i.v,i.w),s=r.path,a=r.lca,l=0,u=s[l],c=!0;for(;n!==i.w;){if(o=e.node(n),c){for(;(u=s[l])!==a&&e.node(u).maxRanks||a>t[l].lim));let u=l,c=o;for(;(c=e.parent(c))!==u;)r.push(c);return{path:i.concat(r.reverse()),lca:u}}function ja(e){let t={},n=0;function o(i){let r=n;e.children(i).forEach(o),t[i]={low:r,lim:n++}}return e.children(Cn).forEach(o),t}function Ka(e){let t=St(e,"root",{},"_root"),n=qa(e),o=Object.values(n),i=$e(Math.max,o)-1,r=2*i+1;e.graph().nestingRoot=t,e.edges().forEach(a=>e.edge(a).minlen*=r);let s=Ja(e)+1;e.children(Cn).forEach(a=>hr(e,t,r,s,i,n,a)),e.graph().nodeRankFactor=r}function hr(e,t,n,o,i,r,s){var a;let l=e.children(s);if(!l.length){s!==t&&e.setEdge(t,s,{weight:0,minlen:n});return}let u=Fo(e,"_bt"),c=Fo(e,"_bb"),d=e.node(s);e.setParent(u,s),d.borderTop=u,e.setParent(c,s),d.borderBottom=c,l.forEach(f=>{var h;hr(e,t,n,o,i,r,f);let _=e.node(f),y=_.borderTop?_.borderTop:f,b=_.borderBottom?_.borderBottom:f,N=_.borderTop?o:2*o,k=y!==b?1:i-((h=r[s])!=null?h:0)+1;e.setEdge(u,y,{weight:N,minlen:k,nestingEdge:!0}),e.setEdge(b,c,{weight:N,minlen:k,nestingEdge:!0})}),e.parent(s)||e.setEdge(t,u,{weight:0,minlen:i+((a=r[s])!=null?a:0)})}function qa(e){let t={};function n(o,i){let r=e.children(o);r&&r.length&&r.forEach(s=>n(s,i+1)),t[o]=i}return e.children(Cn).forEach(o=>n(o,1)),t}function Ja(e){return e.edges().reduce((t,n)=>t+e.edge(n).weight,0)}function Qa(e){let t=e.graph();e.removeNode(t.nestingRoot),delete t.nestingRoot,e.edges().forEach(n=>{e.edge(n).nestingEdge&&e.removeEdge(n)})}var el=tl;function tl(e){function t(n){let o=e.children(n),i=e.node(n);if(o.length&&o.forEach(t),Object.hasOwn(i,"minRank")){i.borderLeft=[],i.borderRight=[];for(let r=i.minRank,s=i.maxRank+1;rZo(e.node(t))),e.edges().forEach(t=>Zo(e.edge(t)))}function Zo(e){let t=e.width;e.width=e.height,e.height=t}function il(e){e.nodes().forEach(t=>Hn(e.node(t))),e.edges().forEach(t=>{var n;let o=e.edge(t);(n=o.points)==null||n.forEach(Hn),Object.hasOwn(o,"y")&&Hn(o)})}function Hn(e){e.y=-e.y}function rl(e){e.nodes().forEach(t=>Fn(e.node(t))),e.edges().forEach(t=>{var n;let o=e.edge(t);(n=o.points)==null||n.forEach(Fn),Object.hasOwn(o,"x")&&Fn(o)})}function Fn(e){let t=e.x;e.x=e.y,e.y=t}function sl(e){let t={},n=e.nodes().filter(a=>!e.children(a).length),o=n.map(a=>e.node(a).rank),i=$e(Math.max,o),r=zt(i+1).map(()=>[]);function s(a){if(t[a])return;t[a]=!0;let l=e.node(a);r[l.rank].push(a);let u=e.successors(a);u&&u.forEach(s)}return n.sort((a,l)=>e.node(a).rank-e.node(l).rank).forEach(s),r}function al(e,t){let n=0;for(let o=1;oc)),i=t.flatMap(u=>{let c=e.outEdges(u);return c?c.map(d=>({pos:o[d.w],weight:e.edge(d).weight})).sort((d,f)=>d.pos-f.pos):[]}),r=1;for(;r{let c=u.pos+r;a[c]+=u.weight;let d=0;for(;c>0;)c%2&&(d+=a[c+1]),c=c-1>>1,a[c]+=u.weight;l+=u.weight*d}),l}function ul(e,t=[]){return t.map(n=>{let o=e.inEdges(n);if(!o||!o.length)return{v:n};{let i=o.reduce((r,s)=>{let a=e.edge(s),l=e.node(s.v);return{sum:r.sum+a.weight*l.order,weight:r.weight+a.weight}},{sum:0,weight:0});return{v:n,barycenter:i.sum/i.weight,weight:i.weight}}})}function cl(e,t){let n={};e.forEach((i,r)=>{let s={indegree:0,in:[],out:[],vs:[i.v],i:r};i.barycenter!==void 0&&(s.barycenter=i.barycenter,s.weight=i.weight),n[i.v]=s}),t.edges().forEach(i=>{let r=n[i.v],s=n[i.w];r!==void 0&&s!==void 0&&(s.indegree++,r.out.push(s))});let o=Object.values(n).filter(i=>!i.indegree);return dl(o)}function dl(e){let t=[];function n(i){return r=>{r.merged||(r.barycenter===void 0||i.barycenter===void 0||r.barycenter>=i.barycenter)&&fl(i,r)}}function o(i){return r=>{r.in.push(i),--r.indegree===0&&e.push(r)}}for(;e.length;){let i=e.pop();t.push(i),i.in.reverse().forEach(n(i)),i.out.forEach(o(i))}return t.filter(i=>!i.merged).map(i=>gn(i,["vs","i","barycenter","weight"]))}function fl(e,t){let n=0,o=0;e.weight&&(n+=e.barycenter*e.weight,o+=e.weight),t.weight&&(n+=t.barycenter*t.weight,o+=t.weight),e.vs=t.vs.concat(e.vs),e.barycenter=n/o,e.weight=o,e.i=Math.min(t.i,e.i),t.merged=!0}function hl(e,t){let n=va(e,c=>Object.hasOwn(c,"barycenter")),o=n.lhs,i=n.rhs.sort((c,d)=>d.i-c.i),r=[],s=0,a=0,l=0;o.sort(gl(!!t)),l=Wo(r,i,l),o.forEach(c=>{l+=c.vs.length,r.push(c.vs),s+=c.barycenter*c.weight,a+=c.weight,l=Wo(r,i,l)});let u={vs:r.flat(1)};return a&&(u.barycenter=s/a,u.weight=a),u}function Wo(e,t,n){let o;for(;t.length&&(o=t[t.length-1]).i<=n;)t.pop(),e.push(o.vs),n++;return n}function gl(e){return(t,n)=>t.barycentern.barycenter?1:e?n.i-t.i:t.i-n.i}function vr(e,t,n,o){let i=e.children(t),r=e.node(t),s=r?r.borderLeft:void 0,a=r?r.borderRight:void 0,l={};s&&(i=i.filter(f=>f!==s&&f!==a));let u=ul(e,i);u.forEach(f=>{if(e.children(f.v).length){let h=vr(e,f.v,n,o);l[f.v]=h,Object.hasOwn(h,"barycenter")&&pl(f,h)}});let c=cl(u,n);vl(c,l);let d=hl(c,o);if(s&&a){d.vs=[s,d.vs,a].flat(1);let f=e.predecessors(s);if(f&&f.length){let h=e.node(f[0]),_=e.predecessors(a),y=e.node(_[0]);Object.hasOwn(d,"barycenter")||(d.barycenter=0,d.weight=0),d.barycenter=(d.barycenter*d.weight+h.order+y.order)/(d.weight+2),d.weight+=2}}return d}function vl(e,t){e.forEach(n=>{n.vs=n.vs.flatMap(o=>t[o]?t[o].vs:o)})}function pl(e,t){e.barycenter!==void 0?(e.barycenter=(e.barycenter*e.weight+t.barycenter*t.weight)/(e.weight+t.weight),e.weight+=t.weight):(e.barycenter=t.barycenter,e.weight=t.weight)}function ml(e,t,n,o){let i=yl(e),r=new Ie({compound:!0}).setGraph({root:i}).setDefaultNodeLabel(s=>e.node(s));return o.forEach(s=>{let a=e.node(s),l=e.parent(s);if(a.rank===t||a.minRank<=t&&t<=a.maxRank){r.setNode(s),r.setParent(s,l||i);let u=e[n](s);u&&u.forEach(c=>{let d=c.v===s?c.w:c.v,f=r.edge(d,s),h=f!==void 0?f.weight:0;r.setEdge(d,s,{weight:e.edge(c).weight+h})}),Object.hasOwn(a,"minRank")&&r.setNode(s,{borderLeft:a.borderLeft[t],borderRight:a.borderRight[t]})}}),r}function yl(e){let t;for(;e.hasNode(t=No("_root")););return t}function wl(e,t,n){let o={},i;n.forEach(r=>{let s=e.parent(r),a,l;for(;s;){if(a=e.parent(s),a?(l=o[a],o[a]=s):(l=i,i=s),l&&l!==s){t.setEdge(l,s);return}s=a}})}function pr(e,t={}){if(typeof t.customOrder=="function"){t.customOrder(e,pr);return}let n=ir(e),o=jo(e,zt(1,n+1),"inEdges"),i=jo(e,zt(n-1,-1,-1),"outEdges"),r=sl(e);if(Ko(e,r),t.disableOptimalOrderHeuristic)return;let s=Number.POSITIVE_INFINITY,a,l=t.constraints||[];for(let u=0,c=0;c<4;++u,++c){_l(u%2?o:i,u%4>=2,l),r=Xt(e);let d=al(e,r);d{o.has(r)||o.set(r,[]),o.get(r).push(s)};for(let r of e.nodes()){let s=e.node(r);if(typeof s.rank=="number"&&i(s.rank,r),typeof s.minRank=="number"&&typeof s.maxRank=="number")for(let a=s.minRank;a<=s.maxRank;a++)a!==s.rank&&i(a,r)}return t.map(function(r){return ml(e,r,n,o.get(r)||[])})}function _l(e,t,n){let o=new Ie;e.forEach(function(i){n.forEach(a=>o.setEdge(a.left,a.right));let r=i.graph().root,s=vr(i,r,o,t);s.vs.forEach((a,l)=>i.node(a).order=l),wl(i,o,s.vs)})}function Ko(e,t){Object.values(t).forEach(n=>n.forEach((o,i)=>e.node(o).order=i))}function bl(e,t){let n={};function o(i,r){let s=0,a=0,l=i.length,u=r[r.length-1];return r.forEach((c,d)=>{let f=xl(e,c),h=f?e.node(f).order:l;(f||c===u)&&(r.slice(a,d+1).forEach(_=>{let y=e.predecessors(_);y&&y.forEach(b=>{let N=e.node(b),k=N.order;(k{let d=r[c];if(d!==void 0&&e.node(d).dummy){let f=e.predecessors(d);f&&f.forEach(h=>{if(h===void 0)return;let _=e.node(h);_.dummy&&(_.orderu)&&mr(n,h,d)})}})}function i(r,s){let a=-1,l=-1,u=0;return s.forEach((c,d)=>{if(e.node(c).dummy==="border"){let f=e.predecessors(c);if(f&&f.length){let h=f[0];if(h===void 0)return;l=e.node(h).order,o(s,u,d,a,l),u=d,a=l}}o(s,u,s.length,l,r.length)}),s}return t.length&&t.reduce(i),n}function xl(e,t){if(e.node(t).dummy){let n=e.predecessors(t);if(n)return n.find(o=>e.node(o).dummy)}}function mr(e,t,n){if(t>n){let i=t;t=n,n=i}let o=e[t];o||(e[t]=o={}),o[n]=!0}function Nl(e,t,n){if(t>n){let i=t;t=n,n=i}let o=e[t];return o!==void 0&&Object.hasOwn(o,n)}function Sl(e,t,n,o){let i={},r={},s={};return t.forEach(a=>{a.forEach((l,u)=>{i[l]=l,r[l]=l,s[l]=u})}),t.forEach(a=>{let l=-1;a.forEach(u=>{let c=o(u);if(c&&c.length){let d=c.sort((h,_)=>{let y=s[h],b=s[_];return(y!==void 0?y:0)-(b!==void 0?b:0)}),f=(d.length-1)/2;for(let h=Math.floor(f),_=Math.ceil(f);h<=_;++h){let y=d[h];if(y===void 0)continue;let b=s[y];if(b!==void 0&&r[u]===u&&l{var N;let k=(N=r[b.v])!=null?N:0,w=s.edge(b);return Math.max(y,k+(w!==void 0?w:0))},0):r[h]=0}function c(h){let _=s.outEdges(h),y=Number.POSITIVE_INFINITY;_&&(y=_.reduce((N,k)=>{let w=r[k.w],C=s.edge(k);return Math.min(N,(w!==void 0?w:0)-(C!==void 0?C:0))},Number.POSITIVE_INFINITY));let b=e.node(h);y!==Number.POSITIVE_INFINITY&&b.borderType!==a&&(r[h]=Math.max(r[h]!==void 0?r[h]:0,y))}function d(h){return s.predecessors(h)||[]}function f(h){return s.successors(h)||[]}return l(u,d),l(c,f),Object.keys(o).forEach(h=>{var _;let y=n[h];y!==void 0&&(r[h]=(_=r[y])!=null?_:0)}),r}function Cl(e,t,n,o){let i=new Ie,r=e.graph(),s=Ol(r.nodesep,r.edgesep,o);return t.forEach(a=>{let l;a.forEach(u=>{let c=n[u];if(c!==void 0){if(i.setNode(c),l!==void 0){let d=n[l];if(d!==void 0){let f=i.edge(d,c);i.setEdge(d,c,Math.max(s(e,u,l),f||0))}}l=u}})}),i}function kl(e,t){return Object.values(t).reduce((n,o)=>{let i=Number.NEGATIVE_INFINITY,r=Number.POSITIVE_INFINITY;Object.entries(o).forEach(([a,l])=>{let u=Dl(e,a)/2;i=Math.max(l+u,i),r=Math.min(l-u,r)});let s=i-r;return s{["l","r"].forEach(s=>{let a=r+s,l=e[a];if(!l||l===t)return;let u=Object.values(l),c=o-$e(Math.min,u);s!=="l"&&(c=i-$e(Math.max,u)),c&&(e[a]=In(l,d=>d+c))})})}function Tl(e,t=void 0){let n=e.ul;return n?In(n,(o,i)=>{var r,s;if(t){let l=t.toLowerCase(),u=e[l];if(u&&u[i]!==void 0)return u[i]}let a=Object.values(e).map(l=>{let u=l[i];return u!==void 0?u:0}).sort((l,u)=>l-u);return(((r=a[1])!=null?r:0)+((s=a[2])!=null?s:0))/2}):{}}function Pl(e){let t=Xt(e),n=Object.assign(bl(e,t),El(e,t)),o={},i;["u","d"].forEach(s=>{i=s==="u"?t:Object.values(t).reverse(),["l","r"].forEach(a=>{a==="r"&&(i=i.map(c=>Object.values(c).reverse()));let l=Sl(e,i,n,c=>(s==="u"?e.predecessors(c):e.successors(c))||[]),u=Il(e,i,l.root,l.align,a==="r");a==="r"&&(u=In(u,c=>-c)),o[s+a]=u})});let r=kl(e,o);return Ml(o,r),Tl(o,e.graph().align)}function Ol(e,t,n){return(o,i,r)=>{let s=o.node(i),a=o.node(r),l=0,u;if(l+=s.width/2,Object.hasOwn(s,"labelpos"))switch(s.labelpos.toLowerCase()){case"l":u=-s.width/2;break;case"r":u=s.width/2;break}if(u&&(l+=n?u:-u),u=void 0,l+=(s.dummy?t:e)/2,l+=(a.dummy?t:e)/2,l+=a.width/2,Object.hasOwn(a,"labelpos"))switch(a.labelpos.toLowerCase()){case"l":u=a.width/2;break;case"r":u=-a.width/2;break}return u&&(l+=n?u:-u),l}}function Dl(e,t){return e.node(t).width}function $l(e){e=nr(e),Al(e),Object.entries(Pl(e)).forEach(([t,n])=>e.node(t).x=n)}function Al(e){let t=Xt(e),n=e.graph(),o=n.ranksep,i=n.rankalign,r=0;t.forEach(s=>{let a=s.reduce((l,u)=>{var c;let d=(c=e.node(u).height)!=null?c:0;return l>d?l:d},0);s.forEach(l=>{let u=e.node(l);i==="top"?u.y=r+u.height/2:i==="bottom"?u.y=r+a-u.height/2:u.y=r+a/2}),r+=a+o})}function zl(e,t={}){let n=t.debugTiming?rr:sr;return n("layout",()=>{let o=n(" buildLayoutGraph",()=>Ul(e));return n(" runLayout",()=>Bl(o,n,t)),n(" updateInputGraph",()=>Rl(e,o)),o})}function Bl(e,t,n){t(" makeSpaceForEdgeLabels",()=>Zl(e)),t(" removeSelfEdges",()=>nu(e)),t(" acyclic",()=>Ia(e)),t(" nestingGraph.run",()=>Ka(e)),t(" rank",()=>Fa(nr(e))),t(" injectEdgeLabelProxies",()=>Wl(e)),t(" removeEmptyRanks",()=>ha(e)),t(" nestingGraph.cleanup",()=>Qa(e)),t(" normalizeRanks",()=>fa(e)),t(" assignRankMinMax",()=>jl(e)),t(" removeEdgeLabelProxies",()=>Kl(e)),t(" normalize.run",()=>Ma(e)),t(" parentDummyChains",()=>Ua(e)),t(" addBorderSegments",()=>el(e)),t(" order",()=>pr(e,n)),t(" insertSelfEdges",()=>ou(e)),t(" adjustCoordinateSystem",()=>nl(e)),t(" position",()=>$l(e)),t(" positionSelfEdges",()=>iu(e)),t(" removeBorderNodes",()=>tu(e)),t(" normalize.undo",()=>Pa(e)),t(" fixupEdgeLabelCoords",()=>Ql(e)),t(" undoCoordinateSystem",()=>ol(e)),t(" translateGraph",()=>ql(e)),t(" assignNodeIntersects",()=>Jl(e)),t(" reversePoints",()=>eu(e)),t(" acyclic.undo",()=>ka(e))}function Rl(e,t){e.nodes().forEach(n=>{let o=e.node(n),i=t.node(n);o&&(o.x=i.x,o.y=i.y,o.order=i.order,o.rank=i.rank,t.children(n).length&&(o.width=i.width,o.height=i.height))}),e.edges().forEach(n=>{let o=e.edge(n),i=t.edge(n);o.points=i.points,Object.hasOwn(i,"x")&&(o.x=i.x,o.y=i.y)}),e.graph().width=t.graph().width,e.graph().height=t.graph().height}var Vl=["nodesep","edgesep","ranksep","marginx","marginy"],Ll={ranksep:50,edgesep:20,nodesep:50,rankdir:"TB",rankalign:"center"},Hl=["acyclicer","ranker","rankdir","align","rankalign"],Fl=["width","height","rank"],qo={width:0,height:0},Yl=["minlen","weight","width","height","labeloffset"],Gl={minlen:1,weight:1,width:0,height:0,labeloffset:10,labelpos:"r"},Xl=["labelpos"];function Ul(e){let t=new Ie({multigraph:!0,compound:!0}),n=Gn(e.graph());return t.setGraph(Object.assign({},Ll,Yn(n,Vl),gn(n,Hl))),e.nodes().forEach(o=>{let i=Gn(e.node(o)),r=Yn(i,Fl);Object.keys(qo).forEach(a=>{r[a]===void 0&&(r[a]=qo[a])}),t.setNode(o,r);let s=e.parent(o);s!==void 0&&t.setParent(o,s)}),e.edges().forEach(o=>{let i=Gn(e.edge(o));t.setEdge(o,Object.assign({},Gl,Yn(i,Yl),gn(i,Xl)))}),t}function Zl(e){let t=e.graph();t.ranksep/=2,e.edges().forEach(n=>{let o=e.edge(n);o.minlen*=2,o.labelpos.toLowerCase()!=="c"&&(t.rankdir==="TB"||t.rankdir==="BT"?o.width+=o.labeloffset:o.height+=o.labeloffset)})}function Wl(e){e.edges().forEach(t=>{let n=e.edge(t);if(n.width&&n.height){let o=e.node(t.v),i={rank:(e.node(t.w).rank-o.rank)/2+o.rank,e:t};St(e,"edge-proxy",i,"_ep")}})}function jl(e){let t=0;e.nodes().forEach(n=>{let o=e.node(n);o.borderTop&&(o.minRank=e.node(o.borderTop).rank,o.maxRank=e.node(o.borderBottom).rank,t=Math.max(t,o.maxRank))}),e.graph().maxRank=t}function Kl(e){e.nodes().forEach(t=>{let n=e.node(t);if(n.dummy==="edge-proxy"){let o=n;e.edge(o.e).labelRank=n.rank,e.removeNode(t)}})}function ql(e){let t=Number.POSITIVE_INFINITY,n=0,o=Number.POSITIVE_INFINITY,i=0,r=e.graph(),s=r.marginx||0,a=r.marginy||0;function l(u){let c=u.x,d=u.y,f=u.width,h=u.height;t=Math.min(t,c-f/2),n=Math.max(n,c+f/2),o=Math.min(o,d-h/2),i=Math.max(i,d+h/2)}e.nodes().forEach(u=>l(e.node(u))),e.edges().forEach(u=>{let c=e.edge(u);Object.hasOwn(c,"x")&&l(c)}),t-=s,o-=a,e.nodes().forEach(u=>{let c=e.node(u);c.x-=t,c.y-=o}),e.edges().forEach(u=>{let c=e.edge(u);c.points.forEach(d=>{d.x-=t,d.y-=o}),Object.hasOwn(c,"x")&&(c.x-=t),Object.hasOwn(c,"y")&&(c.y-=o)}),r.width=n-t+s,r.height=i-o+a}function Jl(e){e.edges().forEach(t=>{let n=e.edge(t),o=e.node(t.v),i=e.node(t.w),r,s;n.points?(r=n.points[0],s=n.points[n.points.length-1]):(n.points=[],r=i,s=o),n.points.unshift(Ho(o,r)),n.points.push(Ho(i,s))})}function Ql(e){e.edges().forEach(t=>{let n=e.edge(t);if(Object.hasOwn(n,"x"))switch((n.labelpos==="l"||n.labelpos==="r")&&(n.width-=n.labeloffset),n.labelpos){case"l":n.x-=n.width/2+n.labeloffset;break;case"r":n.x+=n.width/2+n.labeloffset;break}})}function eu(e){e.edges().forEach(t=>{let n=e.edge(t);n.reversed&&n.points.reverse()})}function tu(e){e.nodes().forEach(t=>{if(e.children(t).length){let n=e.node(t),o=e.node(n.borderTop),i=e.node(n.borderBottom),r=e.node(n.borderLeft[n.borderLeft.length-1]),s=e.node(n.borderRight[n.borderRight.length-1]);n.width=Math.abs(s.x-r.x),n.height=Math.abs(i.y-o.y),n.x=r.x+n.width/2,n.y=o.y+n.height/2}}),e.nodes().forEach(t=>{e.node(t).dummy==="border"&&e.removeNode(t)})}function nu(e){e.edges().forEach(t=>{if(t.v===t.w){let n=e.node(t.v);n.selfEdges||(n.selfEdges=[]),n.selfEdges.push({e:t,label:e.edge(t)}),e.removeEdge(t)}})}function ou(e){Xt(e).forEach(t=>{let n=0;t.forEach((o,i)=>{let r=e.node(o);r.order=i+n,(r.selfEdges||[]).forEach(s=>{St(e,"selfedge",{width:s.label.width,height:s.label.height,rank:r.rank,order:i+ ++n,e:s.e,label:s.label},"_se")}),delete r.selfEdges})})}function iu(e){e.nodes().forEach(t=>{let n=e.node(t);if(n.dummy==="selfedge"){let o=n,i=e.node(o.e.v),r=i.x+i.width/2,s=i.y,a=n.x-r,l=i.height/2;e.setEdge(o.e,o.label),e.removeNode(t),o.label.points=[{x:r+2*a/3,y:s-l},{x:r+5*a/6,y:s-l},{x:r+a,y:s},{x:r+5*a/6,y:s+l},{x:r+2*a/3,y:s+l}],o.label.x=n.x,o.label.y=n.y}})}function Yn(e,t){return In(gn(e,t),Number)}function Gn(e){let t={};return e&&Object.entries(e).forEach(([n,o])=>{typeof n=="string"&&(n=n.toLowerCase()),t[n]=o}),t}function ru(e){let t=Xt(e),n=new Ie({compound:!0,multigraph:!0}).setGraph({});return e.nodes().forEach(o=>{n.setNode(o,{label:o}),n.setParent(o,"layer"+e.node(o).rank)}),e.edges().forEach(o=>n.setEdge(o.v,o.w,{},o.name)),t.forEach((o,i)=>{let r="layer"+i;n.setNode(r,{rank:"same"}),o.reduce((s,a)=>(n.setEdge(s,a,{style:"invis"}),a))}),n}var su={graphlib:Zi,version:ya,layout:zl,debug:ru,util:{time:rr,notime:sr}},vv=su;/*! For license information please see dagre.esm.js.LEGAL.txt */function Bt(e){return Fi()?(rn(e),!0):!1}function Le(e){return typeof e=="function"?e():ee(e)}const au=typeof window<"u"&&typeof document<"u",lu=e=>typeof e<"u",uu=Object.prototype.toString,cu=e=>uu.call(e)==="[object Object]",du=()=>{};function fu(e,t){function n(...o){return new Promise((i,r)=>{Promise.resolve(e(()=>t.apply(this,o),{fn:t,thisArg:this,args:o})).then(i).catch(r)})}return n}const yr=e=>e();function hu(e=yr){const t=xe(!0);function n(){t.value=!1}function o(){t.value=!0}const i=(...r)=>{t.value&&e(...r)};return{isActive:$s(t),pause:n,resume:o,eventFilter:i}}function Jo(e,t=!1,n="Timeout"){return new Promise((o,i)=>{setTimeout(t?()=>i(n):o,e)})}function gu(e,t,n={}){const{eventFilter:o=yr,...i}=n;return ge(e,fu(o,t),i)}function dt(e,t,n={}){const{eventFilter:o,...i}=n,{eventFilter:r,pause:s,resume:a,isActive:l}=hu(o);return{stop:gu(e,t,{...i,eventFilter:r}),pause:s,resume:a,isActive:l}}function vu(e,t={}){if(!bo(e))return Ms(e);const n=Array.isArray(e.value)?Array.from({length:e.value.length}):{};for(const o in e.value)n[o]=Ts(()=>({get(){return e.value[o]},set(i){var r;if((r=Le(t.replaceRef))!=null?r:!0)if(Array.isArray(e.value)){const a=[...e.value];a[o]=i,e.value=a}else{const a={...e.value,[o]:i};Object.setPrototypeOf(a,Object.getPrototypeOf(e.value)),e.value=a}else e.value[o]=i}}));return n}function ro(e,t=!1){function n(d,{flush:f="sync",deep:h=!1,timeout:_,throwOnTimeout:y}={}){let b=null;const k=[new Promise(w=>{b=ge(e,C=>{d(C)!==t&&(b==null||b(),w(C))},{flush:f,deep:h,immediate:!0})})];return _!=null&&k.push(Jo(_,y).then(()=>Le(e)).finally(()=>b==null?void 0:b())),Promise.race(k)}function o(d,f){if(!bo(d))return n(C=>C===d,f);const{flush:h="sync",deep:_=!1,timeout:y,throwOnTimeout:b}=f??{};let N=null;const w=[new Promise(C=>{N=ge([e,d],([D,V])=>{t!==(D===V)&&(N==null||N(),C(D))},{flush:h,deep:_,immediate:!0})})];return y!=null&&w.push(Jo(y,b).then(()=>Le(e)).finally(()=>(N==null||N(),Le(e)))),Promise.race(w)}function i(d){return n(f=>!!f,d)}function r(d){return o(null,d)}function s(d){return o(void 0,d)}function a(d){return n(Number.isNaN,d)}function l(d,f){return n(h=>{const _=Array.from(h);return _.includes(d)||_.includes(Le(d))},f)}function u(d){return c(1,d)}function c(d=1,f){let h=-1;return n(()=>(h+=1,h>=d),f)}return Array.isArray(Le(e))?{toMatch:n,toContains:l,changed:u,changedTimes:c,get not(){return ro(e,!t)}}:{toMatch:n,toBe:o,toBeTruthy:i,toBeNull:r,toBeNaN:a,toBeUndefined:s,changed:u,changedTimes:c,get not(){return ro(e,!t)}}}function so(e){return ro(e)}function pu(e){var t;const n=Le(e);return(t=n==null?void 0:n.$el)!=null?t:n}const wr=au?window:void 0;function _r(...e){let t,n,o,i;if(typeof e[0]=="string"||Array.isArray(e[0])?([n,o,i]=e,t=wr):[t,n,o,i]=e,!t)return du;Array.isArray(n)||(n=[n]),Array.isArray(o)||(o=[o]);const r=[],s=()=>{r.forEach(c=>c()),r.length=0},a=(c,d,f,h)=>(c.addEventListener(d,f,h),()=>c.removeEventListener(d,f,h)),l=ge(()=>[pu(t),Le(i)],([c,d])=>{if(s(),!c)return;const f=cu(d)?{...d}:d;r.push(...n.flatMap(h=>o.map(_=>a(c,h,_,f))))},{immediate:!0,flush:"post"}),u=()=>{l(),s()};return Bt(u),u}function mu(e){return typeof e=="function"?e:typeof e=="string"?t=>t.key===e:Array.isArray(e)?t=>e.includes(t.key):()=>!0}function Qo(...e){let t,n,o={};e.length===3?(t=e[0],n=e[1],o=e[2]):e.length===2?typeof e[1]=="object"?(t=!0,n=e[0],o=e[1]):(t=e[0],n=e[1]):(t=!0,n=e[0]);const{target:i=wr,eventName:r="keydown",passive:s=!1,dedupe:a=!1}=o,l=mu(t);return _r(i,r,c=>{c.repeat&&Le(a)||l(c)&&n(c)},s)}function yu(e){return JSON.parse(JSON.stringify(e))}function Xn(e,t,n,o={}){var i,r,s;const{clone:a=!1,passive:l=!1,eventName:u,deep:c=!1,defaultValue:d,shouldEmit:f}=o,h=Nt(),_=n||(h==null?void 0:h.emit)||((i=h==null?void 0:h.$emit)==null?void 0:i.bind(h))||((s=(r=h==null?void 0:h.proxy)==null?void 0:r.$emit)==null?void 0:s.bind(h==null?void 0:h.proxy));let y=u;t||(t="modelValue"),y=y||`update:${t.toString()}`;const b=w=>a?typeof a=="function"?a(w):yu(w):w,N=()=>lu(e[t])?b(e[t]):d,k=w=>{f?f(w)&&_(y,w):_(y,w)};if(l){const w=N(),C=xe(w);let D=!1;return ge(()=>e[t],V=>{D||(D=!0,C.value=b(V),Ye(()=>D=!1))}),ge(C,V=>{!D&&(V!==e[t]||c)&&k(V)},{deep:c}),C}else return re({get(){return N()},set(w){k(w)}})}var wu={value:()=>{}};function kn(){for(var e=0,t=arguments.length,n={},o;e=0&&(o=n.slice(i+1),n=n.slice(0,i)),n&&!t.hasOwnProperty(n))throw new Error("unknown type: "+n);return{type:n,name:o}})}an.prototype=kn.prototype={constructor:an,on:function(e,t){var n=this._,o=_u(e+"",n),i,r=-1,s=o.length;if(arguments.length<2){for(;++r0)for(var n=new Array(i),o=0,i,r;o=0&&(t=e.slice(0,n))!=="xmlns"&&(e=e.slice(n+1)),ti.hasOwnProperty(t)?{space:ti[t],local:e}:e}function Eu(e){return function(){var t=this.ownerDocument,n=this.namespaceURI;return n===ao&&t.documentElement.namespaceURI===ao?t.createElement(e):t.createElementNS(n,e)}}function xu(e){return function(){return this.ownerDocument.createElementNS(e.space,e.local)}}function br(e){var t=Mn(e);return(t.local?xu:Eu)(t)}function Nu(){}function ko(e){return e==null?Nu:function(){return this.querySelector(e)}}function Su(e){typeof e!="function"&&(e=ko(e));for(var t=this._groups,n=t.length,o=new Array(n),i=0;i=w&&(w=k+1);!(D=b[w])&&++w<_;);C._next=D||null}}return s=new Se(s,o),s._enter=a,s._exit=l,s}function Xu(e){return typeof e=="object"&&"length"in e?e:Array.from(e)}function Uu(){return new Se(this._exit||this._groups.map(Sr),this._parents)}function Zu(e,t,n){var o=this.enter(),i=this,r=this.exit();return typeof e=="function"?(o=e(o),o&&(o=o.selection())):o=o.append(e+""),t!=null&&(i=t(i),i&&(i=i.selection())),n==null?r.remove():n(r),o&&i?o.merge(i).order():i}function Wu(e){for(var t=e.selection?e.selection():e,n=this._groups,o=t._groups,i=n.length,r=o.length,s=Math.min(i,r),a=new Array(i),l=0;l=0;)(s=o[i])&&(r&&s.compareDocumentPosition(r)^4&&r.parentNode.insertBefore(s,r),r=s);return this}function Ku(e){e||(e=qu);function t(d,f){return d&&f?e(d.__data__,f.__data__):!d-!f}for(var n=this._groups,o=n.length,i=new Array(o),r=0;rt?1:e>=t?0:NaN}function Ju(){var e=arguments[0];return arguments[0]=this,e.apply(null,arguments),this}function Qu(){return Array.from(this)}function ec(){for(var e=this._groups,t=0,n=e.length;t1?this.each((t==null?dc:typeof t=="function"?hc:fc)(e,t,n??"")):wt(this.node(),e)}function wt(e,t){return e.style.getPropertyValue(t)||Ir(e).getComputedStyle(e,null).getPropertyValue(t)}function vc(e){return function(){delete this[e]}}function pc(e,t){return function(){this[e]=t}}function mc(e,t){return function(){var n=t.apply(this,arguments);n==null?delete this[e]:this[e]=n}}function yc(e,t){return arguments.length>1?this.each((t==null?vc:typeof t=="function"?mc:pc)(e,t)):this.node()[e]}function Cr(e){return e.trim().split(/^|\s+/)}function Mo(e){return e.classList||new kr(e)}function kr(e){this._node=e,this._names=Cr(e.getAttribute("class")||"")}kr.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 Mr(e,t){for(var n=Mo(e),o=-1,i=t.length;++o=0&&(n=t.slice(o+1),t=t.slice(0,o)),{type:t,name:n}})}function Uc(e){return function(){var t=this.__on;if(t){for(var n=0,o=-1,i=t.length,r;n()=>e;function lo(e,{sourceEvent:t,subject:n,target:o,identifier:i,active:r,x:s,y:a,dx:l,dy:u,dispatch:c}){Object.defineProperties(this,{type:{value:e,enumerable:!0,configurable:!0},sourceEvent:{value:t,enumerable:!0,configurable:!0},subject:{value:n,enumerable:!0,configurable:!0},target:{value:o,enumerable:!0,configurable:!0},identifier:{value:i,enumerable:!0,configurable:!0},active:{value:r,enumerable:!0,configurable:!0},x:{value:s,enumerable:!0,configurable:!0},y:{value:a,enumerable:!0,configurable:!0},dx:{value:l,enumerable:!0,configurable:!0},dy:{value:u,enumerable:!0,configurable:!0},_:{value:c}})}lo.prototype.on=function(){var e=this._.on.apply(this._,arguments);return e===this._?this:e};function nd(e){return!e.ctrlKey&&!e.button}function od(){return this.parentNode}function id(e,t){return t??{x:e.x,y:e.y}}function rd(){return navigator.maxTouchPoints||"ontouchstart"in this}function sd(){var e=nd,t=od,n=id,o=rd,i={},r=kn("start","drag","end"),s=0,a,l,u,c,d=0;function f(C){C.on("mousedown.drag",h).filter(o).on("touchstart.drag",b).on("touchmove.drag",N,td).on("touchend.drag touchcancel.drag",k).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function h(C,D){if(!(c||!e.call(this,C,D))){var V=w(this,t.call(this,C,D),C,D,"mouse");V&&(Ce(C.view).on("mousemove.drag",_,Rt).on("mouseup.drag",y,Rt),Dr(C.view),Un(C),u=!1,a=C.clientX,l=C.clientY,V("start",C))}}function _(C){if(ht(C),!u){var D=C.clientX-a,V=C.clientY-l;u=D*D+V*V>d}i.mouse("drag",C)}function y(C){Ce(C.view).on("mousemove.drag mouseup.drag",null),$r(C.view,u),ht(C),i.mouse("end",C)}function b(C,D){if(e.call(this,C,D)){var V=C.changedTouches,H=t.call(this,C,D),z=V.length,q,Y;for(q=0;q>8&15|t>>4&240,t>>4&15|t&240,(t&15)<<4|t&15,1):n===8?Kt(t>>24&255,t>>16&255,t>>8&255,(t&255)/255):n===4?Kt(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=ld.exec(e))?new Ne(t[1],t[2],t[3],1):(t=ud.exec(e))?new Ne(t[1]*255/100,t[2]*255/100,t[3]*255/100,1):(t=cd.exec(e))?Kt(t[1],t[2],t[3],t[4]):(t=dd.exec(e))?Kt(t[1]*255/100,t[2]*255/100,t[3]*255/100,t[4]):(t=fd.exec(e))?li(t[1],t[2]/100,t[3]/100,1):(t=hd.exec(e))?li(t[1],t[2]/100,t[3]/100,t[4]):ni.hasOwnProperty(e)?ri(ni[e]):e==="transparent"?new Ne(NaN,NaN,NaN,0):null}function ri(e){return new Ne(e>>16&255,e>>8&255,e&255,1)}function Kt(e,t,n,o){return o<=0&&(e=t=n=NaN),new Ne(e,t,n,o)}function pd(e){return e instanceof Zt||(e=at(e)),e?(e=e.rgb(),new Ne(e.r,e.g,e.b,e.opacity)):new Ne}function uo(e,t,n,o){return arguments.length===1?pd(e):new Ne(e,t,n,o??1)}function Ne(e,t,n,o){this.r=+e,this.g=+t,this.b=+n,this.opacity=+o}To(Ne,uo,Ar(Zt,{brighter(e){return e=e==null?pn:Math.pow(pn,e),new Ne(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){return e=e==null?Vt:Math.pow(Vt,e),new Ne(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new Ne(ot(this.r),ot(this.g),ot(this.b),mn(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:si,formatHex:si,formatHex8:md,formatRgb:ai,toString:ai}));function si(){return`#${nt(this.r)}${nt(this.g)}${nt(this.b)}`}function md(){return`#${nt(this.r)}${nt(this.g)}${nt(this.b)}${nt((isNaN(this.opacity)?1:this.opacity)*255)}`}function ai(){const e=mn(this.opacity);return`${e===1?"rgb(":"rgba("}${ot(this.r)}, ${ot(this.g)}, ${ot(this.b)}${e===1?")":`, ${e})`}`}function mn(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function ot(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function nt(e){return e=ot(e),(e<16?"0":"")+e.toString(16)}function li(e,t,n,o){return o<=0?e=t=n=NaN:n<=0||n>=1?e=t=NaN:t<=0&&(e=NaN),new ke(e,t,n,o)}function zr(e){if(e instanceof ke)return new ke(e.h,e.s,e.l,e.opacity);if(e instanceof Zt||(e=at(e)),!e)return new ke;if(e instanceof ke)return e;e=e.rgb();var t=e.r/255,n=e.g/255,o=e.b/255,i=Math.min(t,n,o),r=Math.max(t,n,o),s=NaN,a=r-i,l=(r+i)/2;return a?(t===r?s=(n-o)/a+(n0&&l<1?0:s,new ke(s,a,l,e.opacity)}function yd(e,t,n,o){return arguments.length===1?zr(e):new ke(e,t,n,o??1)}function ke(e,t,n,o){this.h=+e,this.s=+t,this.l=+n,this.opacity=+o}To(ke,yd,Ar(Zt,{brighter(e){return e=e==null?pn:Math.pow(pn,e),new ke(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=e==null?Vt:Math.pow(Vt,e),new ke(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,n=this.l,o=n+(n<.5?n:1-n)*t,i=2*n-o;return new Ne(Zn(e>=240?e-240:e+120,i,o),Zn(e,i,o),Zn(e<120?e+240:e-120,i,o),this.opacity)},clamp(){return new ke(ui(this.h),qt(this.s),qt(this.l),mn(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=mn(this.opacity);return`${e===1?"hsl(":"hsla("}${ui(this.h)}, ${qt(this.s)*100}%, ${qt(this.l)*100}%${e===1?")":`, ${e})`}`}}));function ui(e){return e=(e||0)%360,e<0?e+360:e}function qt(e){return Math.max(0,Math.min(1,e||0))}function Zn(e,t,n){return(e<60?t+(n-t)*e/60:e<180?n:e<240?t+(n-t)*(240-e)/60:t)*255}const Po=e=>()=>e;function wd(e,t){return function(n){return e+n*t}}function _d(e,t,n){return e=Math.pow(e,n),t=Math.pow(t,n)-e,n=1/n,function(o){return Math.pow(e+o*t,n)}}function bd(e){return(e=+e)==1?Br:function(t,n){return n-t?_d(t,n,e):Po(isNaN(t)?n:t)}}function Br(e,t){var n=t-e;return n?wd(e,n):Po(isNaN(e)?t:e)}const yn=function e(t){var n=bd(t);function o(i,r){var s=n((i=uo(i)).r,(r=uo(r)).r),a=n(i.g,r.g),l=n(i.b,r.b),u=Br(i.opacity,r.opacity);return function(c){return i.r=s(c),i.g=a(c),i.b=l(c),i.opacity=u(c),i+""}}return o.gamma=e,o}(1);function Ed(e,t){t||(t=[]);var n=e?Math.min(t.length,e.length):0,o=t.slice(),i;return function(r){for(i=0;in&&(r=t.slice(n,r),a[s]?a[s]+=r:a[++s]=r),(o=o[0])===(i=i[0])?a[s]?a[s]+=i:a[++s]=i:(a[++s]=null,l.push({i:s,x:Oe(o,i)})),n=Wn.lastIndex;return n180?c+=360:c-u>180&&(u+=360),f.push({i:d.push(i(d)+"rotate(",null,o)-2,x:Oe(u,c)})):c&&d.push(i(d)+"rotate("+c+o)}function a(u,c,d,f){u!==c?f.push({i:d.push(i(d)+"skewX(",null,o)-2,x:Oe(u,c)}):c&&d.push(i(d)+"skewX("+c+o)}function l(u,c,d,f,h,_){if(u!==d||c!==f){var y=h.push(i(h)+"scale(",null,",",null,")");_.push({i:y-4,x:Oe(u,d)},{i:y-2,x:Oe(c,f)})}else(d!==1||f!==1)&&h.push(i(h)+"scale("+d+","+f+")")}return function(u,c){var d=[],f=[];return u=e(u),c=e(c),r(u.translateX,u.translateY,c.translateX,c.translateY,d,f),s(u.rotate,c.rotate,d,f),a(u.skewX,c.skewX,d,f),l(u.scaleX,u.scaleY,c.scaleX,c.scaleY,d,f),u=c=null,function(h){for(var _=-1,y=f.length,b;++_=0&&e._call.call(void 0,t),e=e._next;--_t}function fi(){lt=(_n=Ht.now())+Tn,_t=Mt=0;try{Bd()}finally{_t=0,Vd(),lt=0}}function Rd(){var e=Ht.now(),t=e-_n;t>Hr&&(Tn-=t,_n=e)}function Vd(){for(var e,t=wn,n,o=1/0;t;)t._call?(o>t._time&&(o=t._time),e=t,t=t._next):(n=t._next,t._next=null,t=e?e._next=n:wn=n);Tt=e,ho(o)}function ho(e){if(!_t){Mt&&(Mt=clearTimeout(Mt));var t=e-lt;t>24?(e<1/0&&(Mt=setTimeout(fi,e-Ht.now()-Tn)),It&&(It=clearInterval(It))):(It||(_n=Ht.now(),It=setInterval(Rd,Hr)),_t=1,Fr(fi))}}function hi(e,t,n){var o=new bn;return t=t==null?0:+t,o.restart(i=>{o.stop(),e(i+t)},t,n),o}var Ld=kn("start","end","cancel","interrupt"),Hd=[],Gr=0,gi=1,go=2,un=3,vi=4,vo=5,cn=6;function Pn(e,t,n,o,i,r){var s=e.__transition;if(!s)e.__transition={};else if(n in s)return;Fd(e,n,{name:t,index:o,group:i,on:Ld,tween:Hd,time:r.time,delay:r.delay,duration:r.duration,ease:r.ease,timer:null,state:Gr})}function Do(e,t){var n=Me(e,t);if(n.state>Gr)throw new Error("too late; already scheduled");return n}function Re(e,t){var n=Me(e,t);if(n.state>un)throw new Error("too late; already running");return n}function Me(e,t){var n=e.__transition;if(!n||!(n=n[t]))throw new Error("transition not found");return n}function Fd(e,t,n){var o=e.__transition,i;o[t]=n,n.timer=Yr(r,0,n.time);function r(u){n.state=gi,n.timer.restart(s,n.delay,n.time),n.delay<=u&&s(u-n.delay)}function s(u){var c,d,f,h;if(n.state!==gi)return l();for(c in o)if(h=o[c],h.name===n.name){if(h.state===un)return hi(s);h.state===vi?(h.state=cn,h.timer.stop(),h.on.call("interrupt",e,e.__data__,h.index,h.group),delete o[c]):+cgo&&o.state=0&&(t=t.slice(0,n)),!t||t==="start"})}function wf(e,t,n){var o,i,r=yf(t)?Do:Re;return function(){var s=r(this,e),a=s.on;a!==o&&(i=(o=a).copy()).on(t,n),s.on=i}}function _f(e,t){var n=this._id;return arguments.length<2?Me(this.node(),n).on.on(e):this.each(wf(n,e,t))}function bf(e){return function(){var t=this.parentNode;for(var n in this.__transition)if(+n!==e)return;t&&t.removeChild(this)}}function Ef(){return this.on("end.remove",bf(this._id))}function xf(e){var t=this._name,n=this._id;typeof e!="function"&&(e=ko(e));for(var o=this._groups,i=o.length,r=new Array(i),s=0;s()=>e;function Wf(e,{sourceEvent:t,target:n,transform:o,dispatch:i}){Object.defineProperties(this,{type:{value:e,enumerable:!0,configurable:!0},sourceEvent:{value:t,enumerable:!0,configurable:!0},target:{value:n,enumerable:!0,configurable:!0},transform:{value:o,enumerable:!0,configurable:!0},_:{value:i}})}function Fe(e,t,n){this.k=e,this.x=t,this.y=n}Fe.prototype={constructor:Fe,scale:function(e){return e===1?this:new Fe(this.k*e,this.x,this.y)},translate:function(e,t){return e===0&t===0?this:new Fe(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 bt=new Fe(1,0,0);Fe.prototype;function jn(e){e.stopImmediatePropagation()}function Ct(e){e.preventDefault(),e.stopImmediatePropagation()}function jf(e){return(!e.ctrlKey||e.type==="wheel")&&!e.button}function Kf(){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 pi(){return this.__zoom||bt}function qf(e){return-e.deltaY*(e.deltaMode===1?.05:e.deltaMode?1:.002)*(e.ctrlKey?10:1)}function Jf(){return navigator.maxTouchPoints||"ontouchstart"in this}function Qf(e,t,n){var o=e.invertX(t[0][0])-n[0][0],i=e.invertX(t[1][0])-n[1][0],r=e.invertY(t[0][1])-n[0][1],s=e.invertY(t[1][1])-n[1][1];return e.translate(i>o?(o+i)/2:Math.min(0,o)||Math.max(0,i),s>r?(r+s)/2:Math.min(0,r)||Math.max(0,s))}function eh(){var e=jf,t=Kf,n=Qf,o=qf,i=Jf,r=[0,1/0],s=[[-1/0,-1/0],[1/0,1/0]],a=250,l=ln,u=kn("start","zoom","end"),c,d,f,h=500,_=150,y=0,b=10;function N(m){m.property("__zoom",pi).on("wheel.zoom",z,{passive:!1}).on("mousedown.zoom",q).on("dblclick.zoom",Y).filter(i).on("touchstart.zoom",O).on("touchmove.zoom",E).on("touchend.zoom touchcancel.zoom",W).style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}N.transform=function(m,M,S,T){var P=m.selection?m.selection():m;P.property("__zoom",pi),m!==P?D(m,M,S,T):P.interrupt().each(function(){V(this,arguments).event(T).start().zoom(null,typeof M=="function"?M.apply(this,arguments):M).end()})},N.scaleBy=function(m,M,S,T){N.scaleTo(m,function(){var P=this.__zoom.k,$=typeof M=="function"?M.apply(this,arguments):M;return P*$},S,T)},N.scaleTo=function(m,M,S,T){N.transform(m,function(){var P=t.apply(this,arguments),$=this.__zoom,A=S==null?C(P):typeof S=="function"?S.apply(this,arguments):S,X=$.invert(A),J=typeof M=="function"?M.apply(this,arguments):M;return n(w(k($,J),A,X),P,s)},S,T)},N.translateBy=function(m,M,S,T){N.transform(m,function(){return n(this.__zoom.translate(typeof M=="function"?M.apply(this,arguments):M,typeof S=="function"?S.apply(this,arguments):S),t.apply(this,arguments),s)},null,T)},N.translateTo=function(m,M,S,T,P){N.transform(m,function(){var $=t.apply(this,arguments),A=this.__zoom,X=T==null?C($):typeof T=="function"?T.apply(this,arguments):T;return n(bt.translate(X[0],X[1]).scale(A.k).translate(typeof M=="function"?-M.apply(this,arguments):-M,typeof S=="function"?-S.apply(this,arguments):-S),$,s)},T,P)};function k(m,M){return M=Math.max(r[0],Math.min(r[1],M)),M===m.k?m:new Fe(M,m.x,m.y)}function w(m,M,S){var T=M[0]-S[0]*m.k,P=M[1]-S[1]*m.k;return T===m.x&&P===m.y?m:new Fe(m.k,T,P)}function C(m){return[(+m[0][0]+ +m[1][0])/2,(+m[0][1]+ +m[1][1])/2]}function D(m,M,S,T){m.on("start.zoom",function(){V(this,arguments).event(T).start()}).on("interrupt.zoom end.zoom",function(){V(this,arguments).event(T).end()}).tween("zoom",function(){var P=this,$=arguments,A=V(P,$).event(T),X=t.apply(P,$),J=S==null?C(X):typeof S=="function"?S.apply(P,$):S,oe=Math.max(X[1][0]-X[0][0],X[1][1]-X[0][1]),se=P.__zoom,F=typeof M=="function"?M.apply(P,$):M,G=l(se.invert(J).concat(oe/se.k),F.invert(J).concat(oe/F.k));return function(K){if(K===1)K=F;else{var ue=G(K),he=oe/ue[2];K=new Fe(he,J[0]-ue[0]*he,J[1]-ue[1]*he)}A.zoom(null,K)}})}function V(m,M,S){return!S&&m.__zooming||new H(m,M)}function H(m,M){this.that=m,this.args=M,this.active=0,this.sourceEvent=null,this.extent=t.apply(m,M),this.taps=0}H.prototype={event:function(m){return m&&(this.sourceEvent=m),this},start:function(){return++this.active===1&&(this.that.__zooming=this,this.emit("start")),this},zoom:function(m,M){return this.mouse&&m!=="mouse"&&(this.mouse[1]=M.invert(this.mouse[0])),this.touch0&&m!=="touch"&&(this.touch0[1]=M.invert(this.touch0[0])),this.touch1&&m!=="touch"&&(this.touch1[1]=M.invert(this.touch1[0])),this.that.__zoom=M,this.emit("zoom"),this},end:function(){return--this.active===0&&(delete this.that.__zooming,this.emit("end")),this},emit:function(m){var M=Ce(this.that).datum();u.call(m,this.that,new Wf(m,{sourceEvent:this.sourceEvent,target:N,type:m,transform:this.that.__zoom,dispatch:u}),M)}};function z(m,...M){if(!e.apply(this,arguments))return;var S=V(this,M).event(m),T=this.__zoom,P=Math.max(r[0],Math.min(r[1],T.k*Math.pow(2,o.apply(this,arguments)))),$=Pe(m);if(S.wheel)(S.mouse[0][0]!==$[0]||S.mouse[0][1]!==$[1])&&(S.mouse[1]=T.invert(S.mouse[0]=$)),clearTimeout(S.wheel);else{if(T.k===P)return;S.mouse=[$,T.invert($)],dn(this),S.start()}Ct(m),S.wheel=setTimeout(A,_),S.zoom("mouse",n(w(k(T,P),S.mouse[0],S.mouse[1]),S.extent,s));function A(){S.wheel=null,S.end()}}function q(m,...M){if(f||!e.apply(this,arguments))return;var S=m.currentTarget,T=V(this,M,!0).event(m),P=Ce(m.view).on("mousemove.zoom",J,!0).on("mouseup.zoom",oe,!0),$=Pe(m,S),A=m.clientX,X=m.clientY;Dr(m.view),jn(m),T.mouse=[$,this.__zoom.invert($)],dn(this),T.start();function J(se){if(Ct(se),!T.moved){var F=se.clientX-A,G=se.clientY-X;T.moved=F*F+G*G>y}T.event(se).zoom("mouse",n(w(T.that.__zoom,T.mouse[0]=Pe(se,S),T.mouse[1]),T.extent,s))}function oe(se){P.on("mousemove.zoom mouseup.zoom",null),$r(se.view,T.moved),Ct(se),T.event(se).end()}}function Y(m,...M){if(e.apply(this,arguments)){var S=this.__zoom,T=Pe(m.changedTouches?m.changedTouches[0]:m,this),P=S.invert(T),$=S.k*(m.shiftKey?.5:2),A=n(w(k(S,$),T,P),t.apply(this,M),s);Ct(m),a>0?Ce(this).transition().duration(a).call(D,A,T,m):Ce(this).call(N.transform,A,T,m)}}function O(m,...M){if(e.apply(this,arguments)){var S=m.touches,T=S.length,P=V(this,M,m.changedTouches.length===T).event(m),$,A,X,J;for(jn(m),A=0;A(e.Left="left",e.Top="top",e.Right="right",e.Bottom="bottom",e))(Z||{}),Ao=(e=>(e.Partial="partial",e.Full="full",e))(Ao||{}),et=(e=>(e.Bezier="default",e.SimpleBezier="simple-bezier",e.Straight="straight",e.Step="step",e.SmoothStep="smoothstep",e))(et||{}),qe=(e=>(e.Strict="strict",e.Loose="loose",e))(qe||{}),po=(e=>(e.Arrow="arrow",e.ArrowClosed="arrowclosed",e))(po||{}),Dt=(e=>(e.Free="free",e.Vertical="vertical",e.Horizontal="horizontal",e))(Dt||{});const th=["INPUT","SELECT","TEXTAREA"],nh=typeof document<"u"?document:null;function mo(e){var t,n;const o=((n=(t=e.composedPath)==null?void 0:t.call(e))==null?void 0:n[0])||e.target,i=typeof(o==null?void 0:o.hasAttribute)=="function"?o.hasAttribute("contenteditable"):!1,r=typeof(o==null?void 0:o.closest)=="function"?o.closest(".nokey"):null;return th.includes(o==null?void 0:o.nodeName)||i||!!r}function oh(e){return e.ctrlKey||e.metaKey||e.shiftKey||e.altKey}function mi(e,t,n,o){const i=t.replace("+",` -`).replace(` - -`,` -+`).split(` -`).map(s=>s.trim().toLowerCase());if(i.length===1)return e.toLowerCase()===t.toLowerCase();o||n.add(e.toLowerCase());const r=i.every((s,a)=>n.has(s)&&Array.from(n.values())[a]===i[a]);return o&&n.delete(e.toLowerCase()),r}function ih(e,t){return n=>{if(!n.code&&!n.key)return!1;const o=rh(n.code,e);return Array.isArray(e)?e.some(i=>mi(n[o],i,t,n.type==="keyup")):mi(n[o],e,t,n.type==="keyup")}}function rh(e,t){return t.includes(e)?"code":"key"}function $t(e,t){const n=re(()=>le(t==null?void 0:t.target)??nh),o=je(le(e)===!0);let i=!1;const r=new Set;let s=l(le(e));ge(()=>le(e),(u,c)=>{typeof c=="boolean"&&typeof u!="boolean"&&a(),s=l(u)},{immediate:!0}),_r(["blur","contextmenu"],a),Qo((...u)=>s(...u),u=>{var c,d;const f=le(t==null?void 0:t.actInsideInputWithModifier)??!0,h=le(t==null?void 0:t.preventDefault)??!1;if(i=oh(u),(!i||i&&!f)&&mo(u))return;const y=((d=(c=u.composedPath)==null?void 0:c.call(u))==null?void 0:d[0])||u.target,b=(y==null?void 0:y.nodeName)==="BUTTON"||(y==null?void 0:y.nodeName)==="A";!h&&(i||!b)&&u.preventDefault(),o.value=!0},{eventName:"keydown",target:n}),Qo((...u)=>s(...u),u=>{const c=le(t==null?void 0:t.actInsideInputWithModifier)??!0;if(o.value){if((!i||i&&!c)&&mo(u))return;i=!1,o.value=!1}},{eventName:"keyup",target:n});function a(){i=!1,r.clear(),o.value=le(e)===!0}function l(u){return u===null?(a(),()=>!1):typeof u=="boolean"?(a(),o.value=u,()=>!1):Array.isArray(u)||typeof u=="string"?ih(u,r):u}return o}const Wr="vue-flow__node-desc",jr="vue-flow__edge-desc",sh="vue-flow__aria-live",Kr=["Enter"," ","Escape"],vt={ArrowUp:{x:0,y:-1},ArrowDown:{x:0,y:1},ArrowLeft:{x:-1,y:0},ArrowRight:{x:1,y:0}};function En(e){return{...e.computedPosition||{x:0,y:0},width:e.dimensions.width||0,height:e.dimensions.height||0}}function xn(e,t){const n=Math.max(0,Math.min(e.x+e.width,t.x+t.width)-Math.max(e.x,t.x)),o=Math.max(0,Math.min(e.y+e.height,t.y+t.height)-Math.max(e.y,t.y));return Math.ceil(n*o)}function On(e){return{width:e.offsetWidth,height:e.offsetHeight}}function ut(e,t=0,n=1){return Math.min(Math.max(e,t),n)}function qr(e,t){return{x:ut(e.x,t[0][0],t[1][0]),y:ut(e.y,t[0][1],t[1][1])}}function yi(e){const t=e.getRootNode();return"elementFromPoint"in t?t:window.document}function Je(e){return e&&typeof e=="object"&&"id"in e&&"source"in e&&"target"in e}function it(e){return e&&typeof e=="object"&&"id"in e&&"position"in e&&!Je(e)}function Pt(e){return it(e)&&"computedPosition"in e}function en(e){return!Number.isNaN(e)&&Number.isFinite(e)}function ah(e){return en(e.width)&&en(e.height)&&en(e.x)&&en(e.y)}function lh(e,t,n){const o={id:e.id.toString(),type:e.type??"default",dimensions:sn({width:0,height:0}),computedPosition:sn({z:0,...e.position}),handleBounds:{source:[],target:[]},draggable:void 0,selectable:void 0,connectable:void 0,focusable:void 0,selected:!1,dragging:!1,resizing:!1,initialized:!1,isParent:!1,position:{x:0,y:0},data:_e(e.data)?e.data:{},events:sn(_e(e.events)?e.events:{})};return Object.assign(t??o,e,{id:e.id.toString(),parentNode:n})}function Jr(e,t,n){var o,i;const r={id:e.id.toString(),type:e.type??(t==null?void 0:t.type)??"default",source:e.source.toString(),target:e.target.toString(),sourceHandle:(o=e.sourceHandle)==null?void 0:o.toString(),targetHandle:(i=e.targetHandle)==null?void 0:i.toString(),updatable:e.updatable??(n==null?void 0:n.updatable),selectable:e.selectable??(n==null?void 0:n.selectable),focusable:e.focusable??(n==null?void 0:n.focusable),data:_e(e.data)?e.data:{},events:sn(_e(e.events)?e.events:{}),label:e.label??"",interactionWidth:e.interactionWidth??(n==null?void 0:n.interactionWidth),...n??{}};return Object.assign(t??r,e,{id:e.id.toString()})}function Qr(e,t,n,o){const i=typeof e=="string"?e:e.id,r=new Set,s=o==="source"?"target":"source";for(const a of n)a[s]===i&&r.add(a[o]);return t.filter(a=>r.has(a.id))}function uh(...e){if(e.length===3){const[r,s,a]=e;return Qr(r,s,a,"target")}const[t,n]=e,o=typeof t=="string"?t:t.id;return n.filter(r=>Je(r)&&r.source===o).map(r=>n.find(s=>it(s)&&s.id===r.target))}function ch(...e){if(e.length===3){const[r,s,a]=e;return Qr(r,s,a,"source")}const[t,n]=e,o=typeof t=="string"?t:t.id;return n.filter(r=>Je(r)&&r.target===o).map(r=>n.find(s=>it(s)&&s.id===r.source))}function es({source:e,sourceHandle:t,target:n,targetHandle:o}){return`vueflow__edge-${e}${t??""}-${n}${o??""}`}function dh(e,t){return t.some(n=>Je(n)&&n.source===e.source&&n.target===e.target&&(n.sourceHandle===e.sourceHandle||!n.sourceHandle&&!e.sourceHandle)&&(n.targetHandle===e.targetHandle||!n.targetHandle&&!e.targetHandle))}function Ft({x:e,y:t},{x:n,y:o,zoom:i}){return{x:e*i+n,y:t*i+o}}function Yt({x:e,y:t},{x:n,y:o,zoom:i},r=!1,s=[1,1]){const a={x:(e-n)/i,y:(t-o)/i};return r?Dn(a,s):a}function fh(e,t){return{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)}}function ts({x:e,y:t,width:n,height:o}){return{x:e,y:t,x2:e+n,y2:t+o}}function hh({x:e,y:t,x2:n,y2:o}){return{x:e,y:t,width:n-e,height:o-t}}function ns(e){let t={x:Number.POSITIVE_INFINITY,y:Number.POSITIVE_INFINITY,x2:Number.NEGATIVE_INFINITY,y2:Number.NEGATIVE_INFINITY};for(let n=0;n0,b=(d??0)*(f??0);(_||y||h>=b||a.dragging)&&s.push(a)}return s}function is(e,t){const n=new Set;if(typeof e=="string")n.add(e);else if(e.length>=1)for(const o of e)n.add(o.id);return t.filter(o=>n.has(o.source)||n.has(o.target))}function ft(e,t){if(typeof e=="number")return Math.floor((t-t/(1+e))*.5);if(typeof e=="string"&&e.endsWith("px")){const n=Number.parseFloat(e);if(!Number.isNaN(n))return Math.floor(n)}if(typeof e=="string"&&e.endsWith("%")){const n=Number.parseFloat(e);if(!Number.isNaN(n))return Math.floor(t*n*.01)}return Wt(`The padding value "${e}" is invalid. Please provide a number or a string with a valid unit (px or %).`),0}function gh(e,t,n){if(typeof e=="string"||typeof e=="number"){const o=ft(e,n),i=ft(e,t);return{top:o,right:i,bottom:o,left:i,x:i*2,y:o*2}}if(typeof e=="object"){const o=ft(e.top??e.y??0,n),i=ft(e.bottom??e.y??0,n),r=ft(e.left??e.x??0,t),s=ft(e.right??e.x??0,t);return{top:o,right:s,bottom:i,left:r,x:r+s,y:o+i}}return{top:0,right:0,bottom:0,left:0,x:0,y:0}}function vh(e,t,n,o,i,r){const{x:s,y:a}=Ft(e,{x:t,y:n,zoom:o}),{x:l,y:u}=Ft({x:e.x+e.width,y:e.y+e.height},{x:t,y:n,zoom:o}),c=i-l,d=r-u;return{left:Math.floor(s),top:Math.floor(a),right:Math.floor(c),bottom:Math.floor(d)}}function wi(e,t,n,o,i,r=.1){const s=gh(r,t,n),a=(t-s.x)/e.width,l=(n-s.y)/e.height,u=Math.min(a,l),c=ut(u,o,i),d=e.x+e.width/2,f=e.y+e.height/2,h=t/2-d*c,_=n/2-f*c,y=vh(e,h,_,c,t,n),b={left:Math.min(y.left-s.left,0),top:Math.min(y.top-s.top,0),right:Math.min(y.right-s.right,0),bottom:Math.min(y.bottom-s.bottom,0)};return{x:h-b.left+b.right,y:_-b.top+b.bottom,zoom:c}}function ph(e,t){return{x:t.x+e.x,y:t.y+e.y,z:(e.z>t.z?e.z:t.z)+1}}function rs(e,t){if(!e.parentNode)return!1;const n=t.get(e.parentNode);return n?n.selected?!0:rs(n,t):!1}function Gt(e,t){return typeof e>"u"?"":typeof e=="string"?e:`${t?`${t}__`:""}${Object.keys(e).sort().map(o=>`${o}=${e[o]}`).join("&")}`}function _i(e){const t=e.ctrlKey&&Nn()?10:1;return-e.deltaY*(e.deltaMode===1?.05:e.deltaMode?1:.002)*t}function bi(e,t,n){return en?-ut(Math.abs(e-n),1,t)/t:0}function ss(e,t,n=15,o=40){const i=bi(e.x,o,t.width-o)*n,r=bi(e.y,o,t.height-o)*n;return[i,r]}function Kn(e,t){if(t){const n=e.position.x+e.dimensions.width-t.dimensions.width,o=e.position.y+e.dimensions.height-t.dimensions.height;if(n>0||o>0||e.position.x<0||e.position.y<0){let i={};if(typeof t.style=="function"?i={...t.style(t)}:t.style&&(i={...t.style}),i.width=i.width??`${t.dimensions.width}px`,i.height=i.height??`${t.dimensions.height}px`,n>0)if(typeof i.width=="string"){const r=Number(i.width.replace("px",""));i.width=`${r+n}px`}else i.width+=n;if(o>0)if(typeof i.height=="string"){const r=Number(i.height.replace("px",""));i.height=`${r+o}px`}else i.height+=o;if(e.position.x<0){const r=Math.abs(e.position.x);if(t.position.x=t.position.x-r,typeof i.width=="string"){const s=Number(i.width.replace("px",""));i.width=`${s+r}px`}else i.width+=r;e.position.x=0}if(e.position.y<0){const r=Math.abs(e.position.y);if(t.position.y=t.position.y-r,typeof i.height=="string"){const s=Number(i.height.replace("px",""));i.height=`${s+r}px`}else i.height+=r;e.position.y=0}t.dimensions.width=Number(i.width.toString().replace("px","")),t.dimensions.height=Number(i.height.toString().replace("px","")),typeof t.style=="function"?t.style=r=>{const s=t.style;return{...s(r),...i}}:t.style={...t.style,...i}}}}function Ei(e,t){var n,o;const i=e.filter(s=>s.type==="add"||s.type==="remove");for(const s of i)if(s.type==="add")t.findIndex(l=>l.id===s.item.id)===-1&&t.push(s.item);else if(s.type==="remove"){const a=t.findIndex(l=>l.id===s.id);a!==-1&&t.splice(a,1)}const r=t.map(s=>s.id);for(const s of t)for(const a of e)if(a.id===s.id)switch(a.type){case"select":s.selected=a.selected;break;case"position":if(Pt(s)&&(typeof a.position<"u"&&(s.position=a.position),typeof a.dragging<"u"&&(s.dragging=a.dragging),s.expandParent&&s.parentNode)){const l=t[r.indexOf(s.parentNode)];l&&Pt(l)&&Kn(s,l)}break;case"dimensions":if(Pt(s)&&(typeof a.dimensions<"u"&&(s.dimensions=a.dimensions),typeof a.updateStyle<"u"&&a.updateStyle&&(s.style={...s.style||{},width:`${(n=a.dimensions)==null?void 0:n.width}px`,height:`${(o=a.dimensions)==null?void 0:o.height}px`}),typeof a.resizing<"u"&&(s.resizing=a.resizing),s.expandParent&&s.parentNode)){const l=t[r.indexOf(s.parentNode)];l&&Pt(l)&&(!!l.dimensions.width&&!!l.dimensions.height?Kn(s,l):Ye(()=>{Kn(s,l)}))}break}return t}function Ze(e,t){return{id:e,type:"select",selected:t}}function xi(e){return{item:e,type:"add"}}function Ni(e){return{id:e,type:"remove"}}function Si(e,t,n,o,i){return{id:e,source:t,target:n,sourceHandle:o||null,targetHandle:i||null,type:"remove"}}function We(e,t=new Set,n=!1){const o=[];for(const[i,r]of e){const s=t.has(i);!(r.selected===void 0&&!s)&&r.selected!==s&&(n&&(r.selected=s),o.push(Ze(r.id,s)))}return o}const Ii=()=>{};function B(e){const t=new Set;let n=Ii,o=()=>!1;const i=()=>t.size>0||o(),r=f=>{n=f},s=()=>{n=Ii},a=f=>{o=f},l=()=>{o=()=>!1},u=f=>{t.delete(f)};return{on:f=>{t.add(f);const h=()=>u(f);return Bt(h),{off:h}},off:u,trigger:f=>{const h=[n];return i()?h.push(...t):e&&h.push(e),Promise.allSettled(h.map(_=>_(f)))},hasListeners:i,listeners:t,setEmitter:r,removeEmitter:s,setHasEmitListeners:a,removeHasEmitListeners:l}}function Ci(e,t,n){let o=e;do{if(o&&o.matches(t))return!0;if(o===n)return!1;o=o.parentElement}while(o);return!1}function mh(e,t,n,o){var i,r;const s=new Map;for(const[a,l]of e)(l.selected||l.id===o)&&(!l.parentNode||!rs(l,e))&&(l.draggable||t&&typeof l.draggable>"u")&&e.get(a)&&s.set(a,{id:l.id,position:l.position||{x:0,y:0},distance:{x:n.x-((i=l.computedPosition)==null?void 0:i.x)||0,y:n.y-((r=l.computedPosition)==null?void 0:r.y)||0},from:{x:l.computedPosition.x,y:l.computedPosition.y},extent:l.extent,parentNode:l.parentNode,dimensions:{...l.dimensions},expandParent:l.expandParent});return Array.from(s.values())}function qn({id:e,dragItems:t,findNode:n}){const o=[];for(const i of t){const r=n(i.id);r&&o.push(r)}return[e?o.find(i=>i.id===e):o[0],o]}function as(e){if(Array.isArray(e))switch(e.length){case 1:return[e[0],e[0],e[0],e[0]];case 2:return[e[0],e[1],e[0],e[1]];case 3:return[e[0],e[1],e[2],e[1]];case 4:return e;default:return[0,0,0,0]}return[e,e,e,e]}function yh(e,t,n){const[o,i,r,s]=typeof e!="string"?as(e.padding):[0,0,0,0];return n&&typeof n.computedPosition.x<"u"&&typeof n.computedPosition.y<"u"&&typeof n.dimensions.width<"u"&&typeof n.dimensions.height<"u"?[[n.computedPosition.x+s,n.computedPosition.y+o],[n.computedPosition.x+n.dimensions.width-i,n.computedPosition.y+n.dimensions.height-r]]:!1}function wh(e,t,n,o){let i=e.extent||n;if((i==="parent"||!Array.isArray(i)&&(i==null?void 0:i.range)==="parent")&&!e.expandParent)if(e.parentNode&&o&&e.dimensions.width&&e.dimensions.height){const r=yh(i,e,o);r&&(i=r)}else t(new Ee(be.NODE_EXTENT_INVALID,e.id)),i=n;else if(Array.isArray(i)){const r=(o==null?void 0:o.computedPosition.x)||0,s=(o==null?void 0:o.computedPosition.y)||0;i=[[i[0][0]+r,i[0][1]+s],[i[1][0]+r,i[1][1]+s]]}else if(i!=="parent"&&(i!=null&&i.range)&&Array.isArray(i.range)){const[r,s,a,l]=as(i.padding),u=(o==null?void 0:o.computedPosition.x)||0,c=(o==null?void 0:o.computedPosition.y)||0;i=[[i.range[0][0]+u+l,i.range[0][1]+c+r],[i.range[1][0]+u-s,i.range[1][1]+c-a]]}return i==="parent"?[[Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY],[Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY]]:i}function _h({width:e,height:t},n){return[n[0],[n[1][0]-(e||0),n[1][1]-(t||0)]]}function zo(e,t,n,o,i){const r=_h(e.dimensions,wh(e,n,o,i)),s=qr(t,r);return{position:{x:s.x-((i==null?void 0:i.computedPosition.x)||0),y:s.y-((i==null?void 0:i.computedPosition.y)||0)},computedPosition:s}}function Et(e,t,n=Z.Left,o=!1){const i=((t==null?void 0:t.x)??0)+e.computedPosition.x,r=((t==null?void 0:t.y)??0)+e.computedPosition.y,{width:s,height:a}=t??Nh(e);if(o)return{x:i+s/2,y:r+a/2};switch((t==null?void 0:t.position)??n){case Z.Top:return{x:i+s/2,y:r};case Z.Right:return{x:i+s,y:r+a/2};case Z.Bottom:return{x:i+s/2,y:r+a};case Z.Left:return{x:i,y:r+a/2}}}function ki(e,t){return e&&(t?e.find(n=>n.id===t):e[0])||null}function bh({sourcePos:e,targetPos:t,sourceWidth:n,sourceHeight:o,targetWidth:i,targetHeight:r,width:s,height:a,viewport:l}){const u={x:Math.min(e.x,t.x),y:Math.min(e.y,t.y),x2:Math.max(e.x+n,t.x+i),y2:Math.max(e.y+o,t.y+r)};u.x===u.x2&&(u.x2+=1),u.y===u.y2&&(u.y2+=1);const c=ts({x:(0-l.x)/l.zoom,y:(0-l.y)/l.zoom,width:s/l.zoom,height:a/l.zoom}),d=Math.max(0,Math.min(c.x2,u.x2)-Math.max(c.x,u.x)),f=Math.max(0,Math.min(c.y2,u.y2)-Math.max(c.y,u.y));return Math.ceil(d*f)>0}function Eh(e,t,n=!1){const o=typeof e.zIndex=="number";let i=o?e.zIndex:0;const r=t(e.source),s=t(e.target);return!r||!s?0:(n&&(i=o?e.zIndex:Math.max(r.computedPosition.z||0,s.computedPosition.z||0)),i)}var be=(e=>(e.MISSING_STYLES="MISSING_STYLES",e.MISSING_VIEWPORT_DIMENSIONS="MISSING_VIEWPORT_DIMENSIONS",e.NODE_INVALID="NODE_INVALID",e.NODE_NOT_FOUND="NODE_NOT_FOUND",e.NODE_MISSING_PARENT="NODE_MISSING_PARENT",e.NODE_TYPE_MISSING="NODE_TYPE_MISSING",e.NODE_EXTENT_INVALID="NODE_EXTENT_INVALID",e.EDGE_INVALID="EDGE_INVALID",e.EDGE_NOT_FOUND="EDGE_NOT_FOUND",e.EDGE_SOURCE_MISSING="EDGE_SOURCE_MISSING",e.EDGE_TARGET_MISSING="EDGE_TARGET_MISSING",e.EDGE_TYPE_MISSING="EDGE_TYPE_MISSING",e.EDGE_SOURCE_TARGET_SAME="EDGE_SOURCE_TARGET_SAME",e.EDGE_SOURCE_TARGET_MISSING="EDGE_SOURCE_TARGET_MISSING",e.EDGE_ORPHANED="EDGE_ORPHANED",e.USEVUEFLOW_OPTIONS="USEVUEFLOW_OPTIONS",e))(be||{});const Mi={MISSING_STYLES:()=>"It seems that you haven't loaded the necessary styles. Please import '@vue-flow/core/dist/style.css' to ensure that the graph is rendered correctly",MISSING_VIEWPORT_DIMENSIONS:()=>"The Vue Flow parent container needs a width and a height to render the graph",NODE_INVALID:e=>`Node is invalid -Node: ${e}`,NODE_NOT_FOUND:e=>`Node not found -Node: ${e}`,NODE_MISSING_PARENT:(e,t)=>`Node is missing a parent -Node: ${e} -Parent: ${t}`,NODE_TYPE_MISSING:e=>`Node type is missing -Type: ${e}`,NODE_EXTENT_INVALID:e=>`Only child nodes can use a parent extent -Node: ${e}`,EDGE_INVALID:e=>`An edge needs a source and a target -Edge: ${e}`,EDGE_SOURCE_MISSING:(e,t)=>`Edge source is missing -Edge: ${e} -Source: ${t}`,EDGE_TARGET_MISSING:(e,t)=>`Edge target is missing -Edge: ${e} -Target: ${t}`,EDGE_TYPE_MISSING:e=>`Edge type is missing -Type: ${e}`,EDGE_SOURCE_TARGET_SAME:(e,t,n)=>`Edge source and target are the same -Edge: ${e} -Source: ${t} -Target: ${n}`,EDGE_SOURCE_TARGET_MISSING:(e,t,n)=>`Edge source or target is missing -Edge: ${e} -Source: ${t} -Target: ${n}`,EDGE_ORPHANED:e=>`Edge was orphaned (suddenly missing source or target) and has been removed -Edge: ${e}`,EDGE_NOT_FOUND:e=>`Edge not found -Edge: ${e}`,USEVUEFLOW_OPTIONS:()=>"The options parameter is deprecated and will be removed in the next major version. Please use the id parameter instead"};class Ee extends Error{constructor(t,...n){var o;super((o=Mi[t])==null?void 0:o.call(Mi,...n)),this.name="VueFlowError",this.code=t,this.args=n}}function Bo(e){return"clientX"in e}function xh(e){return"sourceEvent"in e}function De(e,t){const n=Bo(e);let o,i;return n?(o=e.clientX,i=e.clientY):"touches"in e&&e.touches.length>0?(o=e.touches[0].clientX,i=e.touches[0].clientY):"changedTouches"in e&&e.changedTouches.length>0?(o=e.changedTouches[0].clientX,i=e.changedTouches[0].clientY):(o=0,i=0),{x:o-((t==null?void 0:t.left)??0),y:i-((t==null?void 0:t.top)??0)}}const Nn=()=>{var e;return typeof navigator<"u"&&((e=navigator==null?void 0:navigator.userAgent)==null?void 0:e.indexOf("Mac"))>=0};function Nh(e){var t,n;return{width:((t=e.dimensions)==null?void 0:t.width)??e.width??0,height:((n=e.dimensions)==null?void 0:n.height)??e.height??0}}function Dn(e,t=[1,1]){return{x:t[0]*Math.round(e.x/t[0]),y:t[1]*Math.round(e.y/t[1])}}const Sh=()=>!0;function Jn(e){e==null||e.classList.remove("valid","connecting","vue-flow__handle-valid","vue-flow__handle-connecting")}function Ih(e,t,n){const o=[],i={x:e.x-n,y:e.y-n,width:n*2,height:n*2};for(const r of t.values())xn(i,En(r))>0&&o.push(r);return o}const Ch=250;function kh(e,t,n,o){var i,r;let s=[],a=Number.POSITIVE_INFINITY;const l=Ih(e,n,t+Ch);for(const u of l){const c=[...((i=u.handleBounds)==null?void 0:i.source)??[],...((r=u.handleBounds)==null?void 0:r.target)??[]];for(const d of c){if(o.nodeId===d.nodeId&&o.type===d.type&&o.id===d.id)continue;const{x:f,y:h}=Et(u,d,d.position,!0),_=Math.sqrt((f-e.x)**2+(h-e.y)**2);_>t||(_1){const u=o.type==="source"?"target":"source";return s.find(c=>c.type===u)??s[0]}return s[0]}function Ti(e,{handle:t,connectionMode:n,fromNodeId:o,fromHandleId:i,fromType:r,doc:s,lib:a,flowId:l,isValidConnection:u=Sh},c,d,f,h){const _=r==="target",y=t?s.querySelector(`.${a}-flow__handle[data-id="${l}-${t==null?void 0:t.nodeId}-${t==null?void 0:t.id}-${t==null?void 0:t.type}"]`):null,{x:b,y:N}=De(e),k=s.elementFromPoint(b,N),w=k!=null&&k.classList.contains(`${a}-flow__handle`)?k:y,C={handleDomNode:w,isValid:!1,connection:null,toHandle:null};if(w){const D=ls(void 0,w),V=w.getAttribute("data-nodeid"),H=w.getAttribute("data-handleid"),z=w.classList.contains("connectable"),q=w.classList.contains("connectableend");if(!V||!D)return C;const Y={source:_?V:o,sourceHandle:_?H:i,target:_?o:V,targetHandle:_?i:H};C.connection=Y;const E=z&&q&&(n===qe.Strict?_&&D==="source"||!_&&D==="target":V!==o||H!==i);C.isValid=E&&u(Y,{nodes:d,edges:c,sourceNode:f(Y.source),targetNode:f(Y.target)}),C.toHandle=us(V,D,H,h,n,!0)}return C}function ls(e,t){return e||(t!=null&&t.classList.contains("target")?"target":t!=null&&t.classList.contains("source")?"source":null)}function Mh(e,t){let n=null;return t?n="valid":e&&!t&&(n="invalid"),n}function Th(e,t){let n=null;return t?n=!0:e&&!t&&(n=!1),n}function us(e,t,n,o,i,r=!1){var s,a,l;const u=o.get(e);if(!u)return null;const c=i===qe.Strict?(s=u.handleBounds)==null?void 0:s[t]:[...((a=u.handleBounds)==null?void 0:a.source)??[],...((l=u.handleBounds)==null?void 0:l.target)??[]],d=(n?c==null?void 0:c.find(f=>f.id===n):c==null?void 0:c[0])??null;return d&&r?{...d,...Et(u,d,d.position,!0)}:d}const yo={[Z.Left]:Z.Right,[Z.Right]:Z.Left,[Z.Top]:Z.Bottom,[Z.Bottom]:Z.Top},Ph=["production","prod"];function Wt(e,...t){cs()&&console.warn(`[Vue Flow]: ${e}`,...t)}function cs(){return!Ph.includes("prod")}function Pi(e,t,n,o,i){const r=t.querySelectorAll(`.vue-flow__handle.${e}`);return r!=null&&r.length?Array.from(r).map(s=>{const a=s.getBoundingClientRect();return{id:s.getAttribute("data-handleid"),type:e,nodeId:i,position:s.getAttribute("data-handlepos"),x:(a.left-n.left)/o,y:(a.top-n.top)/o,...On(s)}}):null}function wo(e,t,n,o,i,r=!1,s){i.value=!1,e.selected?(r||e.selected&&t)&&(o([e]),Ye(()=>{s.blur()})):n([e])}function _e(e){return typeof ee(e)<"u"}function Oh(e,t,n,o){if(!e||!e.source||!e.target)return n(new Ee(be.EDGE_INVALID,(e==null?void 0:e.id)??"[ID UNKNOWN]")),!1;let i;return Je(e)?i=e:i={...e,id:es(e)},i=Jr(i,void 0,o),dh(i,t)?!1:i}function Dh(e,t,n,o,i){if(!t.source||!t.target)return i(new Ee(be.EDGE_INVALID,e.id)),!1;if(!n)return i(new Ee(be.EDGE_NOT_FOUND,e.id)),!1;const{id:r,...s}=e;return{...s,id:o?es(t):r,source:t.source,target:t.target,sourceHandle:t.sourceHandle,targetHandle:t.targetHandle}}function Oi(e,t,n){const o={},i=[];for(let r=0;ra.id===r.parentNode);r.parentNode&&!s&&n(new Ee(be.NODE_MISSING_PARENT,r.id,r.parentNode)),(r.parentNode||o[r.id])&&(o[r.id]&&(r.isParent=!0),s&&(s.isParent=!0))}return i}function Di(e,t,n,o,i,r){let s=i;const a=o.get(s)||new Map;o.set(s,a.set(n,t)),s=`${i}-${e}`;const l=o.get(s)||new Map;if(o.set(s,l.set(n,t)),r){s=`${i}-${e}-${r}`;const u=o.get(s)||new Map;o.set(s,u.set(n,t))}}function Qn(e,t,n){e.clear();for(const o of n){const{source:i,target:r,sourceHandle:s=null,targetHandle:a=null}=o,l={edgeId:o.id,source:i,target:r,sourceHandle:s,targetHandle:a},u=`${i}-${s}--${r}-${a}`,c=`${r}-${a}--${i}-${s}`;Di("source",l,c,e,i,s),Di("target",l,u,e,r,a)}}function $i(e,t){if(e.size!==t.size)return!1;for(const n of e)if(!t.has(n))return!1;return!0}function eo(e,t,n,o,i,r,s,a){const l=[];for(const u of e){const c=Je(u)?u:Oh(u,a,i,r);if(!c)continue;const d=n(c.source),f=n(c.target);if(!d||!f){i(new Ee(be.EDGE_SOURCE_TARGET_MISSING,c.id,c.source,c.target));continue}if(!d){i(new Ee(be.EDGE_SOURCE_MISSING,c.id,c.source));continue}if(!f){i(new Ee(be.EDGE_TARGET_MISSING,c.id,c.target));continue}if(t&&!t(c,{edges:a,nodes:s,sourceNode:d,targetNode:f})){i(new Ee(be.EDGE_INVALID,c.id));continue}const h=o(c.id);l.push({...Jr(c,h,r),sourceNode:d,targetNode:f})}return l}const Ai=Symbol("vueFlow"),ds=Symbol("nodeId"),fs=Symbol("nodeRef"),$h=Symbol("edgeId"),Ah=Symbol("edgeRef"),$n=Symbol("slots");function hs(e){const{vueFlowRef:t,snapToGrid:n,snapGrid:o,noDragClassName:i,nodeLookup:r,nodeExtent:s,nodeDragThreshold:a,viewport:l,autoPanOnNodeDrag:u,autoPanSpeed:c,nodesDraggable:d,panBy:f,findNode:h,multiSelectionActive:_,nodesSelectionActive:y,selectNodesOnDrag:b,removeSelectedElements:N,addSelectedNodes:k,updateNodePositions:w,emits:C}=we(),{onStart:D,onDrag:V,onStop:H,onClick:z,el:q,disabled:Y,id:O,selectable:E,dragHandle:W}=e,m=je(!1);let M=[],S,T=null,P={x:void 0,y:void 0},$={x:0,y:0},A=null,X=!1,J=!1,oe=0,se=!1;const F=Rh(),G=({x:Q,y:ne})=>{P={x:Q,y:ne};let v=!1;if(M=M.map(g=>{const p={x:Q-g.distance.x,y:ne-g.distance.y},{computedPosition:I}=zo(g,n.value?Dn(p,o.value):p,C.error,s.value,g.parentNode?h(g.parentNode):void 0);return v=v||g.position.x!==I.x||g.position.y!==I.y,g.position=I,g}),J=J||v,!!v&&(w(M,!0,!0),m.value=!0,A)){const[g,p]=qn({id:O,dragItems:M,findNode:h});V({event:A,node:g,nodes:p})}},K=()=>{if(!T)return;const[Q,ne]=ss($,T,c.value);if(Q!==0||ne!==0){const v={x:(P.x??0)-Q/l.value.zoom,y:(P.y??0)-ne/l.value.zoom};f({x:Q,y:ne})&&G(v)}oe=requestAnimationFrame(K)},ue=(Q,ne)=>{X=!0;const v=h(O);!b.value&&!_.value&&v&&(v.selected||N()),v&&le(E)&&b.value&&wo(v,_.value,k,N,y,!1,ne);const g=F(Q.sourceEvent);if(P=g,M=mh(r.value,d.value,g,O),M.length){const[p,I]=qn({id:O,dragItems:M,findNode:h});D({event:Q.sourceEvent,node:p,nodes:I})}},he=(Q,ne)=>{var v;Q.sourceEvent.type==="touchmove"&&Q.sourceEvent.touches.length>1||(J=!1,a.value===0&&ue(Q,ne),P=F(Q.sourceEvent),T=((v=t.value)==null?void 0:v.getBoundingClientRect())||null,$=De(Q.sourceEvent,T))},ie=(Q,ne)=>{const v=F(Q.sourceEvent);if(!se&&X&&u.value&&(se=!0,K()),!X){const g=v.xSnapped-(P.x??0),p=v.ySnapped-(P.y??0);Math.sqrt(g*g+p*p)>a.value&&ue(Q,ne)}(P.x!==v.xSnapped||P.y!==v.ySnapped)&&M.length&&X&&(A=Q.sourceEvent,$=De(Q.sourceEvent,T),G(v))},ce=Q=>{let ne=!1;if(!X&&!m.value&&!_.value){const v=Q.sourceEvent,g=F(v),p=g.xSnapped-(P.x??0),I=g.ySnapped-(P.y??0),x=Math.sqrt(p*p+I*I);x!==0&&x<=a.value&&(z==null||z(v),ne=!0)}if(M.length&&!ne){J&&(w(M,!1,!1),J=!1);const[v,g]=qn({id:O,dragItems:M,findNode:h});H({event:Q.sourceEvent,node:v,nodes:g})}M=[],m.value=!1,se=!1,X=!1,P={x:void 0,y:void 0},cancelAnimationFrame(oe)};return ge([()=>le(Y),q],([Q,ne],v,g)=>{if(ne){const p=Ce(ne);Q||(S=sd().on("start",I=>he(I,ne)).on("drag",I=>ie(I,ne)).on("end",I=>ce(I)).filter(I=>{const x=I.target,R=le(W);return!I.button&&(!i.value||!Ci(x,`.${i.value}`,ne)&&(!R||Ci(x,R,ne)))}),p.call(S)),g(()=>{p.on(".drag",null),S&&(S.on("start",null),S.on("drag",null),S.on("end",null))})}}),m}function zh(){return{doubleClick:B(),click:B(),mouseEnter:B(),mouseMove:B(),mouseLeave:B(),contextMenu:B(),updateStart:B(),update:B(),updateEnd:B()}}function Bh(e,t){const n=zh();return n.doubleClick.on(o=>{var i,r;t.edgeDoubleClick(o),(r=(i=e.events)==null?void 0:i.doubleClick)==null||r.call(i,o)}),n.click.on(o=>{var i,r;t.edgeClick(o),(r=(i=e.events)==null?void 0:i.click)==null||r.call(i,o)}),n.mouseEnter.on(o=>{var i,r;t.edgeMouseEnter(o),(r=(i=e.events)==null?void 0:i.mouseEnter)==null||r.call(i,o)}),n.mouseMove.on(o=>{var i,r;t.edgeMouseMove(o),(r=(i=e.events)==null?void 0:i.mouseMove)==null||r.call(i,o)}),n.mouseLeave.on(o=>{var i,r;t.edgeMouseLeave(o),(r=(i=e.events)==null?void 0:i.mouseLeave)==null||r.call(i,o)}),n.contextMenu.on(o=>{var i,r;t.edgeContextMenu(o),(r=(i=e.events)==null?void 0:i.contextMenu)==null||r.call(i,o)}),n.updateStart.on(o=>{var i,r;t.edgeUpdateStart(o),(r=(i=e.events)==null?void 0:i.updateStart)==null||r.call(i,o)}),n.update.on(o=>{var i,r;t.edgeUpdate(o),(r=(i=e.events)==null?void 0:i.update)==null||r.call(i,o)}),n.updateEnd.on(o=>{var i,r;t.edgeUpdateEnd(o),(r=(i=e.events)==null?void 0:i.updateEnd)==null||r.call(i,o)}),Object.entries(n).reduce((o,[i,r])=>(o.emit[i]=r.trigger,o.on[i]=r.on,o),{emit:{},on:{}})}function Rh(){const{viewport:e,snapGrid:t,snapToGrid:n,vueFlowRef:o}=we();return i=>{var r;const s=((r=o.value)==null?void 0:r.getBoundingClientRect())??{left:0,top:0},a=xh(i)?i.sourceEvent:i,{x:l,y:u}=De(a,s),c=Yt({x:l,y:u},e.value),{x:d,y:f}=n.value?Dn(c,t.value):c;return{xSnapped:d,ySnapped:f,...c}}}function tn(){return!0}function gs({handleId:e,nodeId:t,type:n,isValidConnection:o,edgeUpdaterType:i,onEdgeUpdate:r,onEdgeUpdateEnd:s}){const{id:a,vueFlowRef:l,connectionMode:u,connectionRadius:c,connectOnClick:d,connectionClickStartHandle:f,nodesConnectable:h,autoPanOnConnect:_,autoPanSpeed:y,findNode:b,panBy:N,startConnection:k,updateConnection:w,endConnection:C,emits:D,viewport:V,edges:H,nodes:z,isValidConnection:q,nodeLookup:Y}=we();let O=null,E=!1,W=null;function m(S){var T;const P=le(n)==="target",$=Bo(S),A=yi(S.target),X=S.currentTarget;if(X&&($&&S.button===0||!$)){let J=function(U){v=De(U,ce),G=kh(Yt(v,V.value,!1,[1,1]),c.value,Y.value,I),g||(p(),g=!0);const te=Ti(U,{handle:G,connectionMode:u.value,fromNodeId:le(t),fromHandleId:le(e),fromType:P?"target":"source",isValidConnection:F,doc:A,lib:"vue",flowId:a,nodeLookup:Y.value},H.value,z.value,b,Y.value);W=te.handleDomNode,O=te.connection,E=Th(!!G,te.isValid);const ae={...j,isValid:E,to:te.toHandle&&E?Ft({x:te.toHandle.x,y:te.toHandle.y},V.value):v,toHandle:te.toHandle,toPosition:E&&te.toHandle?te.toHandle.position:yo[I.position],toNode:te.toHandle?Y.value.get(te.toHandle.nodeId):null};if(E&&G&&(j!=null&&j.toHandle)&&ae.toHandle&&j.toHandle.type===ae.toHandle.type&&j.toHandle.nodeId===ae.toHandle.nodeId&&j.toHandle.id===ae.toHandle.id&&j.to.x===ae.to.x&&j.to.y===ae.to.y)return;const de=G??te.toHandle;if(w(de&&E?Ft({x:de.x,y:de.y},V.value):v,de,Mh(!!de,E)),j=ae,!G&&!E&&!W)return Jn(ne);O&&O.source!==O.target&&W&&(Jn(ne),ne=W,W.classList.add("connecting","vue-flow__handle-connecting"),W.classList.toggle("valid",!!E),W.classList.toggle("vue-flow__handle-valid",!!E))},oe=function(U){"touches"in U&&U.touches.length>0||((G||W)&&O&&E&&(r?r(U,O):D.connect(O)),D.connectEnd(U),i&&(s==null||s(U)),Jn(ne),cancelAnimationFrame(K),C(U),g=!1,E=!1,O=null,W=null,A.removeEventListener("mousemove",J),A.removeEventListener("mouseup",oe),A.removeEventListener("touchmove",J),A.removeEventListener("touchend",oe))};const se=b(le(t));let F=le(o)||q.value||tn;!F&&se&&(F=(P?se.isValidSourcePos:se.isValidTargetPos)||tn);let G,K=0;const{x:ue,y:he}=De(S),ie=ls(le(i),X),ce=(T=l.value)==null?void 0:T.getBoundingClientRect();if(!ce||!ie)return;const Q=us(le(t),ie,le(e),Y.value,u.value);if(!Q)return;let ne,v=De(S,ce),g=!1;const p=()=>{if(!_.value)return;const[U,te]=ss(v,ce,y.value);N({x:U,y:te}),K=requestAnimationFrame(p)},I={...Q,nodeId:le(t),type:ie,position:Q.position},x=Y.value.get(le(t)),L={inProgress:!0,isValid:null,from:Et(x,I,Z.Left,!0),fromHandle:I,fromPosition:I.position,fromNode:x,to:v,toHandle:null,toPosition:yo[I.position],toNode:null};k({nodeId:le(t),id:le(e),type:ie,position:(X==null?void 0:X.getAttribute("data-handlepos"))||Z.Top,...v},{x:ue-ce.left,y:he-ce.top}),D.connectStart({event:S,nodeId:le(t),handleId:le(e),handleType:ie});let j=L;A.addEventListener("mousemove",J),A.addEventListener("mouseup",oe),A.addEventListener("touchmove",J),A.addEventListener("touchend",oe)}}function M(S){var T,P;if(!d.value)return;const $=le(n)==="target";if(!f.value){D.clickConnectStart({event:S,nodeId:le(t),handleId:le(e)}),k({nodeId:le(t),type:le(n),id:le(e),position:Z.Top,...De(S)},void 0,!0);return}let A=le(o)||q.value||tn;const X=b(le(t));if(!A&&X&&(A=($?X.isValidSourcePos:X.isValidTargetPos)||tn),X&&(typeof X.connectable>"u"?h.value:X.connectable)===!1)return;const J=yi(S.target),oe=Ti(S,{handle:{nodeId:le(t),id:le(e),type:le(n),position:Z.Top,...De(S)},connectionMode:u.value,fromNodeId:f.value.nodeId,fromHandleId:f.value.id??null,fromType:f.value.type,isValidConnection:A,doc:J,lib:"vue",flowId:a,nodeLookup:Y.value},H.value,z.value,b,Y.value),se=((T=oe.connection)==null?void 0:T.source)===((P=oe.connection)==null?void 0:P.target);oe.isValid&&oe.connection&&!se&&D.connect(oe.connection),D.clickConnectEnd(S),C(S,!0)}return{handlePointerDown:m,handleClick:M}}function Vh(){return xt(ds,"")}function vs(e){const t=e??Vh()??"",n=xt(fs,xe(null)),{findNode:o,edges:i,emits:r}=we(),s=o(t);return s||r.error(new Ee(be.NODE_NOT_FOUND,t)),{id:t,nodeEl:n,node:s,parentNode:re(()=>o(s.parentNode)),connectedEdges:re(()=>is([s],i.value))}}function Lh(){return{doubleClick:B(),click:B(),mouseEnter:B(),mouseMove:B(),mouseLeave:B(),contextMenu:B(),dragStart:B(),drag:B(),dragStop:B()}}function Hh(e,t){const n=Lh();return n.doubleClick.on(o=>{var i,r;t.nodeDoubleClick(o),(r=(i=e.events)==null?void 0:i.doubleClick)==null||r.call(i,o)}),n.click.on(o=>{var i,r;t.nodeClick(o),(r=(i=e.events)==null?void 0:i.click)==null||r.call(i,o)}),n.mouseEnter.on(o=>{var i,r;t.nodeMouseEnter(o),(r=(i=e.events)==null?void 0:i.mouseEnter)==null||r.call(i,o)}),n.mouseMove.on(o=>{var i,r;t.nodeMouseMove(o),(r=(i=e.events)==null?void 0:i.mouseMove)==null||r.call(i,o)}),n.mouseLeave.on(o=>{var i,r;t.nodeMouseLeave(o),(r=(i=e.events)==null?void 0:i.mouseLeave)==null||r.call(i,o)}),n.contextMenu.on(o=>{var i,r;t.nodeContextMenu(o),(r=(i=e.events)==null?void 0:i.contextMenu)==null||r.call(i,o)}),n.dragStart.on(o=>{var i,r;t.nodeDragStart(o),(r=(i=e.events)==null?void 0:i.dragStart)==null||r.call(i,o)}),n.drag.on(o=>{var i,r;t.nodeDrag(o),(r=(i=e.events)==null?void 0:i.drag)==null||r.call(i,o)}),n.dragStop.on(o=>{var i,r;t.nodeDragStop(o),(r=(i=e.events)==null?void 0:i.dragStop)==null||r.call(i,o)}),Object.entries(n).reduce((o,[i,r])=>(o.emit[i]=r.trigger,o.on[i]=r.on,o),{emit:{},on:{}})}function ps(){const{getSelectedNodes:e,nodeExtent:t,updateNodePositions:n,findNode:o,snapGrid:i,snapToGrid:r,nodesDraggable:s,emits:a}=we();return(l,u=!1)=>{const c=r.value?i.value[0]:5,d=r.value?i.value[1]:5,f=u?4:1,h=l.x*c*f,_=l.y*d*f,y=[];for(const b of e.value)if(b.draggable||s&&typeof b.draggable>"u"){const N={x:b.computedPosition.x+h,y:b.computedPosition.y+_},{position:k}=zo(b,N,a.error,t.value,b.parentNode?o(b.parentNode):void 0);y.push({id:b.id,position:k,from:b.position,distance:{x:l.x,y:l.y},dimensions:b.dimensions})}n(y,!0,!1)}}const nn=.1,Fh=e=>((e*=2)<=1?e*e*e:(e-=2)*e*e+2)/2;function Ue(){return Wt("Viewport not initialized yet."),Promise.resolve(!1)}const Yh={zoomIn:Ue,zoomOut:Ue,zoomTo:Ue,fitView:Ue,setCenter:Ue,fitBounds:Ue,project:e=>e,screenToFlowCoordinate:e=>e,flowToScreenCoordinate:e=>e,setViewport:Ue,setTransform:Ue,getViewport:()=>({x:0,y:0,zoom:1}),getTransform:()=>({x:0,y:0,zoom:1}),viewportInitialized:!1};function Gh(e){function t(o,i){return new Promise(r=>{e.d3Selection&&e.d3Zoom?e.d3Zoom.interpolate((i==null?void 0:i.interpolate)==="linear"?Ot:ln).scaleBy(to(e.d3Selection,i==null?void 0:i.duration,i==null?void 0:i.ease,()=>{r(!0)}),o):r(!1)})}function n(o,i,r,s){return new Promise(a=>{var l;const{x:u,y:c}=qr({x:-o,y:-i},e.translateExtent),d=bt.translate(-u,-c).scale(r);e.d3Selection&&e.d3Zoom?(l=e.d3Zoom)==null||l.interpolate((s==null?void 0:s.interpolate)==="linear"?Ot:ln).transform(to(e.d3Selection,s==null?void 0:s.duration,s==null?void 0:s.ease,()=>{a(!0)}),d):a(!1)})}return re(()=>e.d3Zoom&&e.d3Selection&&e.dimensions.width&&e.dimensions.height?{viewportInitialized:!0,zoomIn:i=>t(1.2,i),zoomOut:i=>t(1/1.2,i),zoomTo:(i,r)=>new Promise(s=>{e.d3Selection&&e.d3Zoom?e.d3Zoom.interpolate((r==null?void 0:r.interpolate)==="linear"?Ot:ln).scaleTo(to(e.d3Selection,r==null?void 0:r.duration,r==null?void 0:r.ease,()=>{s(!0)}),i):s(!1)}),setViewport:(i,r)=>n(i.x,i.y,i.zoom,r),setTransform:(i,r)=>n(i.x,i.y,i.zoom,r),getViewport:()=>({x:e.viewport.x,y:e.viewport.y,zoom:e.viewport.zoom}),getTransform:()=>({x:e.viewport.x,y:e.viewport.y,zoom:e.viewport.zoom}),fitView:(i={padding:nn,includeHiddenNodes:!1,duration:0})=>{var r,s;const a=[];for(const f of e.nodes)f.dimensions.width&&f.dimensions.height&&((i==null?void 0:i.includeHiddenNodes)||!f.hidden)&&(!((r=i.nodes)!=null&&r.length)||(s=i.nodes)!=null&&s.length&&i.nodes.includes(f.id))&&a.push(f);if(!a.length)return Promise.resolve(!1);const l=ns(a),{x:u,y:c,zoom:d}=wi(l,e.dimensions.width,e.dimensions.height,i.minZoom??e.minZoom,i.maxZoom??e.maxZoom,i.padding??nn);return n(u,c,d,i)},setCenter:(i,r,s)=>{const a=typeof(s==null?void 0:s.zoom)<"u"?s.zoom:e.maxZoom,l=e.dimensions.width/2-i*a,u=e.dimensions.height/2-r*a;return n(l,u,a,s)},fitBounds:(i,r={padding:nn})=>{const{x:s,y:a,zoom:l}=wi(i,e.dimensions.width,e.dimensions.height,e.minZoom,e.maxZoom,r.padding??nn);return n(s,a,l,r)},project:i=>Yt(i,e.viewport,e.snapToGrid,e.snapGrid),screenToFlowCoordinate:i=>{if(e.vueFlowRef){const{x:r,y:s}=e.vueFlowRef.getBoundingClientRect(),a={x:i.x-r,y:i.y-s};return Yt(a,e.viewport,e.snapToGrid,e.snapGrid)}return{x:0,y:0}},flowToScreenCoordinate:i=>{if(e.vueFlowRef){const{x:r,y:s}=e.vueFlowRef.getBoundingClientRect(),a={x:i.x+r,y:i.y+s};return Ft(a,e.viewport)}return{x:0,y:0}}}:Yh)}function to(e,t=0,n=Fh,o=()=>{}){const i=typeof t=="number"&&t>0;return i||o(),i?e.transition().duration(t).ease(n).on("end",o):e}function Xh(e,t,n){const o=Hi(!0);return o.run(()=>{const i=()=>{o.run(()=>{let y,b,N=!!(n.nodes.value.length||n.edges.value.length);y=dt([e.modelValue,()=>{var k,w;return(w=(k=e.modelValue)==null?void 0:k.value)==null?void 0:w.length}],([k])=>{k&&Array.isArray(k)&&(b==null||b.pause(),n.setElements(k),!b&&!N&&k.length?N=!0:b==null||b.resume())}),b=dt([n.nodes,n.edges,()=>n.edges.value.length,()=>n.nodes.value.length],([k,w])=>{var C;(C=e.modelValue)!=null&&C.value&&Array.isArray(e.modelValue.value)&&(y==null||y.pause(),e.modelValue.value=[...k,...w],Ye(()=>{y==null||y.resume()}))},{immediate:N}),rn(()=>{y==null||y.stop(),b==null||b.stop()})})},r=()=>{o.run(()=>{let y,b,N=!!n.nodes.value.length;y=dt([e.nodes,()=>{var k,w;return(w=(k=e.nodes)==null?void 0:k.value)==null?void 0:w.length}],([k])=>{k&&Array.isArray(k)&&(b==null||b.pause(),n.setNodes(k),!b&&!N&&k.length?N=!0:b==null||b.resume())}),b=dt([n.nodes,()=>n.nodes.value.length],([k])=>{var w;(w=e.nodes)!=null&&w.value&&Array.isArray(e.nodes.value)&&(y==null||y.pause(),e.nodes.value=[...k],Ye(()=>{y==null||y.resume()}))},{immediate:N}),rn(()=>{y==null||y.stop(),b==null||b.stop()})})},s=()=>{o.run(()=>{let y,b,N=!!n.edges.value.length;y=dt([e.edges,()=>{var k,w;return(w=(k=e.edges)==null?void 0:k.value)==null?void 0:w.length}],([k])=>{k&&Array.isArray(k)&&(b==null||b.pause(),n.setEdges(k),!b&&!N&&k.length?N=!0:b==null||b.resume())}),b=dt([n.edges,()=>n.edges.value.length],([k])=>{var w;(w=e.edges)!=null&&w.value&&Array.isArray(e.edges.value)&&(y==null||y.pause(),e.edges.value=[...k],Ye(()=>{y==null||y.resume()}))},{immediate:N}),rn(()=>{y==null||y.stop(),b==null||b.stop()})})},a=()=>{o.run(()=>{ge(()=>t.maxZoom,()=>{t.maxZoom&&_e(t.maxZoom)&&n.setMaxZoom(t.maxZoom)},{immediate:!0})})},l=()=>{o.run(()=>{ge(()=>t.minZoom,()=>{t.minZoom&&_e(t.minZoom)&&n.setMinZoom(t.minZoom)},{immediate:!0})})},u=()=>{o.run(()=>{ge(()=>t.translateExtent,()=>{t.translateExtent&&_e(t.translateExtent)&&n.setTranslateExtent(t.translateExtent)},{immediate:!0})})},c=()=>{o.run(()=>{ge(()=>t.nodeExtent,()=>{t.nodeExtent&&_e(t.nodeExtent)&&n.setNodeExtent(t.nodeExtent)},{immediate:!0})})},d=()=>{o.run(()=>{ge(()=>t.applyDefault,()=>{_e(t.applyDefault)&&(n.applyDefault.value=t.applyDefault)},{immediate:!0})})},f=()=>{o.run(()=>{const y=async b=>{let N=b;typeof t.autoConnect=="function"&&(N=await t.autoConnect(b)),N!==!1&&n.addEdges([N])};ge(()=>t.autoConnect,()=>{_e(t.autoConnect)&&(n.autoConnect.value=t.autoConnect)},{immediate:!0}),ge(n.autoConnect,(b,N,k)=>{b?n.onConnect(y):n.hooks.value.connect.off(y),k(()=>{n.hooks.value.connect.off(y)})},{immediate:!0})})},h=()=>{const y=["id","modelValue","translateExtent","nodeExtent","edges","nodes","maxZoom","minZoom","applyDefault","autoConnect"];for(const b of Object.keys(t)){const N=b;if(!y.includes(N)){const k=me(()=>t[N]),w=n[N];bo(w)&&o.run(()=>{ge(k,C=>{_e(C)&&(w.value=C)},{immediate:!0})})}}};(()=>{i(),r(),s(),l(),a(),u(),c(),d(),f(),h()})()}),()=>o.stop()}function Uh(){return{edgesChange:B(),nodesChange:B(),nodeDoubleClick:B(),nodeClick:B(),nodeMouseEnter:B(),nodeMouseMove:B(),nodeMouseLeave:B(),nodeContextMenu:B(),nodeDragStart:B(),nodeDrag:B(),nodeDragStop:B(),nodesInitialized:B(),miniMapNodeClick:B(),miniMapNodeDoubleClick:B(),miniMapNodeMouseEnter:B(),miniMapNodeMouseMove:B(),miniMapNodeMouseLeave:B(),connect:B(),connectStart:B(),connectEnd:B(),clickConnectStart:B(),clickConnectEnd:B(),paneReady:B(),init:B(),move:B(),moveStart:B(),moveEnd:B(),selectionDragStart:B(),selectionDrag:B(),selectionDragStop:B(),selectionContextMenu:B(),selectionStart:B(),selectionEnd:B(),viewportChangeStart:B(),viewportChange:B(),viewportChangeEnd:B(),paneScroll:B(),paneClick:B(),paneContextMenu:B(),paneMouseEnter:B(),paneMouseMove:B(),paneMouseLeave:B(),edgeContextMenu:B(),edgeMouseEnter:B(),edgeMouseMove:B(),edgeMouseLeave:B(),edgeDoubleClick:B(),edgeClick:B(),edgeUpdateStart:B(),edgeUpdate:B(),edgeUpdateEnd:B(),updateNodeInternals:B(),error:B(e=>Wt(e.message))}}function Zh(e,t){const n=Nt();Ps(()=>{for(const[i,r]of Object.entries(t.value)){const s=a=>{e(i,a)};r.setEmitter(s),Bt(r.removeEmitter),r.setHasEmitListeners(()=>o(i)),Bt(r.removeHasEmitListeners)}});function o(i){var r;const s=Wh(i);return!!((r=n==null?void 0:n.vnode.props)==null?void 0:r[s])}}function Wh(e){const[t,...n]=e.split(":");return`on${t.replace(/(?:^|-)(\w)/g,(i,r)=>r.toUpperCase())}${n.length?`:${n.join(":")}`:""}`}function ms(){return{vueFlowRef:null,viewportRef:null,nodes:[],edges:[],connectionLookup:new Map,nodeTypes:{},edgeTypes:{},initialized:!1,dimensions:{width:0,height:0},viewport:{x:0,y:0,zoom:1},d3Zoom:null,d3Selection:null,d3ZoomHandler:null,minZoom:.5,maxZoom:2,translateExtent:[[Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY],[Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY]],nodeExtent:[[Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY],[Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY]],selectionMode:Ao.Full,paneDragging:!1,preventScrolling:!0,zoomOnScroll:!0,zoomOnPinch:!0,zoomOnDoubleClick:!0,panOnScroll:!1,panOnScrollSpeed:.5,panOnScrollMode:Dt.Free,paneClickDistance:0,panOnDrag:!0,edgeUpdaterRadius:10,onlyRenderVisibleElements:!1,defaultViewport:{x:0,y:0,zoom:1},nodesSelectionActive:!1,userSelectionActive:!1,userSelectionRect:null,defaultMarkerColor:"#b1b1b7",connectionLineStyle:{},connectionLineType:null,connectionLineOptions:{type:et.Bezier,style:{}},connectionMode:qe.Loose,connectionStartHandle:null,connectionEndHandle:null,connectionClickStartHandle:null,connectionPosition:{x:Number.NaN,y:Number.NaN},connectionRadius:20,connectOnClick:!0,connectionStatus:null,isValidConnection:null,snapGrid:[15,15],snapToGrid:!1,edgesUpdatable:!1,edgesFocusable:!0,nodesFocusable:!0,nodesConnectable:!0,nodesDraggable:!0,nodeDragThreshold:1,elementsSelectable:!0,selectNodesOnDrag:!0,multiSelectionActive:!1,selectionKeyCode:"Shift",multiSelectionKeyCode:Nn()?"Meta":"Control",zoomActivationKeyCode:Nn()?"Meta":"Control",deleteKeyCode:"Backspace",panActivationKeyCode:"Space",hooks:Uh(),applyDefault:!0,autoConnect:!1,fitViewOnInit:!1,fitViewOnInitDone:!1,noDragClassName:"nodrag",noWheelClassName:"nowheel",noPanClassName:"nopan",defaultEdgeOptions:void 0,elevateEdgesOnSelect:!1,elevateNodesOnSelect:!0,autoPanOnNodeDrag:!0,autoPanOnConnect:!0,autoPanSpeed:15,disableKeyboardA11y:!1,ariaLiveMessage:""}}const jh=["id","vueFlowRef","viewportRef","initialized","modelValue","nodes","edges","maxZoom","minZoom","translateExtent","hooks","defaultEdgeOptions"];function Kh(e,t,n){const o=Gh(e),i=v=>{const g=v??[];e.hooks.updateNodeInternals.trigger(g)},r=v=>ch(v,e.nodes,e.edges),s=v=>uh(v,e.nodes,e.edges),a=v=>is(v,e.edges),l=({id:v,type:g,nodeId:p})=>{var I;const x=v?`-${g}-${v}`:`-${g}`;return Array.from(((I=e.connectionLookup.get(`${p}${x}`))==null?void 0:I.values())??[])},u=v=>{if(v)return t.value.get(v)},c=v=>{if(v)return n.value.get(v)},d=(v,g,p)=>{var I,x;const R=[];for(const L of v){const j={id:L.id,type:"position",dragging:p,from:L.from};if(g&&(j.position=L.position,L.parentNode)){const U=u(L.parentNode);j.position={x:j.position.x-(((I=U==null?void 0:U.computedPosition)==null?void 0:I.x)??0),y:j.position.y-(((x=U==null?void 0:U.computedPosition)==null?void 0:x.y)??0)}}R.push(j)}R!=null&&R.length&&e.hooks.nodesChange.trigger(R)},f=v=>{if(!e.vueFlowRef)return;const g=e.vueFlowRef.querySelector(".vue-flow__transformationpane");if(!g)return;const p=window.getComputedStyle(g),{m22:I}=new window.DOMMatrixReadOnly(p.transform),x=[];for(const R of v){const L=R,j=u(L.id);if(j){const U=On(L.nodeElement);if(!!(U.width&&U.height&&(j.dimensions.width!==U.width||j.dimensions.height!==U.height||L.forceUpdate))){const ae=L.nodeElement.getBoundingClientRect();j.dimensions=U,j.handleBounds.source=Pi("source",L.nodeElement,ae,I,j.id),j.handleBounds.target=Pi("target",L.nodeElement,ae,I,j.id),x.push({id:j.id,type:"dimensions",dimensions:U})}}}!e.fitViewOnInitDone&&e.fitViewOnInit&&o.value.fitView().then(()=>{e.fitViewOnInitDone=!0}),x.length&&e.hooks.nodesChange.trigger(x)},h=(v,g)=>{const p=new Set,I=new Set;for(const L of v)it(L)?p.add(L.id):Je(L)&&I.add(L.id);const x=We(t.value,p,!0),R=We(n.value,I);if(e.multiSelectionActive){for(const L of p)x.push(Ze(L,g));for(const L of I)R.push(Ze(L,g))}x.length&&e.hooks.nodesChange.trigger(x),R.length&&e.hooks.edgesChange.trigger(R)},_=v=>{if(e.multiSelectionActive){const g=v.map(p=>Ze(p.id,!0));e.hooks.nodesChange.trigger(g);return}e.hooks.nodesChange.trigger(We(t.value,new Set(v.map(g=>g.id)),!0)),e.hooks.edgesChange.trigger(We(n.value))},y=v=>{if(e.multiSelectionActive){const g=v.map(p=>Ze(p.id,!0));e.hooks.edgesChange.trigger(g);return}e.hooks.edgesChange.trigger(We(n.value,new Set(v.map(g=>g.id)))),e.hooks.nodesChange.trigger(We(t.value,new Set,!0))},b=v=>{h(v,!0)},N=v=>{const p=(v||e.nodes).map(I=>(I.selected=!1,Ze(I.id,!1)));e.hooks.nodesChange.trigger(p)},k=v=>{const p=(v||e.edges).map(I=>(I.selected=!1,Ze(I.id,!1)));e.hooks.edgesChange.trigger(p)},w=v=>{if(!v||!v.length)return h([],!1);const g=v.reduce((p,I)=>{const x=Ze(I.id,!1);return it(I)?p.nodes.push(x):p.edges.push(x),p},{nodes:[],edges:[]});g.nodes.length&&e.hooks.nodesChange.trigger(g.nodes),g.edges.length&&e.hooks.edgesChange.trigger(g.edges)},C=v=>{var g;(g=e.d3Zoom)==null||g.scaleExtent([v,e.maxZoom]),e.minZoom=v},D=v=>{var g;(g=e.d3Zoom)==null||g.scaleExtent([e.minZoom,v]),e.maxZoom=v},V=v=>{var g;(g=e.d3Zoom)==null||g.translateExtent(v),e.translateExtent=v},H=v=>{e.nodeExtent=v,i()},z=v=>{var g;(g=e.d3Zoom)==null||g.clickDistance(v)},q=v=>{e.nodesDraggable=v,e.nodesConnectable=v,e.elementsSelectable=v},Y=v=>{const g=v instanceof Function?v(e.nodes):v;!e.initialized&&!g.length||(e.nodes=Oi(g,u,e.hooks.error.trigger))},O=v=>{const g=v instanceof Function?v(e.edges):v;if(!e.initialized&&!g.length)return;const p=eo(g,e.isValidConnection,u,c,e.hooks.error.trigger,e.defaultEdgeOptions,e.nodes,e.edges);Qn(e.connectionLookup,n.value,p),e.edges=p},E=v=>{const g=v instanceof Function?v([...e.nodes,...e.edges]):v;!e.initialized&&!g.length||(Y(g.filter(it)),O(g.filter(Je)))},W=v=>{let g=v instanceof Function?v(e.nodes):v;g=Array.isArray(g)?g:[g];const p=Oi(g,u,e.hooks.error.trigger),I=[];for(const x of p)I.push(xi(x));I.length&&e.hooks.nodesChange.trigger(I)},m=v=>{let g=v instanceof Function?v(e.edges):v;g=Array.isArray(g)?g:[g];const p=eo(g,e.isValidConnection,u,c,e.hooks.error.trigger,e.defaultEdgeOptions,e.nodes,e.edges),I=[];for(const x of p)I.push(xi(x));I.length&&e.hooks.edgesChange.trigger(I)},M=(v,g=!0,p=!1)=>{const I=v instanceof Function?v(e.nodes):v,x=Array.isArray(I)?I:[I],R=[],L=[];function j(te){const ae=a(te);for(const de of ae)(!_e(de.deletable)||de.deletable)&&L.push(Si(de.id,de.source,de.target,de.sourceHandle,de.targetHandle))}function U(te){const ae=[];for(const de of e.nodes)de.parentNode===te&&ae.push(de);if(ae.length){for(const de of ae)R.push(Ni(de.id));g&&j(ae);for(const de of ae)U(de.id)}}for(const te of x){const ae=typeof te=="string"?u(te):te;ae&&(_e(ae.deletable)&&!ae.deletable||(R.push(Ni(ae.id)),g&&j([ae]),p&&U(ae.id)))}L.length&&e.hooks.edgesChange.trigger(L),R.length&&e.hooks.nodesChange.trigger(R)},S=v=>{const g=v instanceof Function?v(e.edges):v,p=Array.isArray(g)?g:[g],I=[];for(const x of p){const R=typeof x=="string"?c(x):x;R&&(_e(R.deletable)&&!R.deletable||I.push(Si(typeof x=="string"?x:x.id,R.source,R.target,R.sourceHandle,R.targetHandle)))}e.hooks.edgesChange.trigger(I)},T=(v,g,p=!0)=>{const I=c(v.id);if(!I)return!1;const x=e.edges.indexOf(I),R=Dh(v,g,I,p,e.hooks.error.trigger);if(R){const[L]=eo([R],e.isValidConnection,u,c,e.hooks.error.trigger,e.defaultEdgeOptions,e.nodes,e.edges);return e.edges=e.edges.map((j,U)=>U===x?L:j),Qn(e.connectionLookup,n.value,[L]),L}return!1},P=(v,g,p={replace:!1})=>{const I=c(v);if(!I)return;const x=typeof g=="function"?g(I):g;I.data=p.replace?x:{...I.data,...x}},$=v=>Ei(v,e.nodes),A=v=>{const g=Ei(v,e.edges);return Qn(e.connectionLookup,n.value,g),g},X=(v,g,p={replace:!1})=>{const I=u(v);if(!I)return;const x=typeof g=="function"?g(I):g;p.replace?e.nodes.splice(e.nodes.indexOf(I),1,x):Object.assign(I,x)},J=(v,g,p={replace:!1})=>{const I=u(v);if(!I)return;const x=typeof g=="function"?g(I):g;I.data=p.replace?x:{...I.data,...x}},oe=(v,g,p=!1)=>{p?e.connectionClickStartHandle=v:e.connectionStartHandle=v,e.connectionEndHandle=null,e.connectionStatus=null,g&&(e.connectionPosition=g)},se=(v,g=null,p=null)=>{e.connectionStartHandle&&(e.connectionPosition=v,e.connectionEndHandle=g,e.connectionStatus=p)},F=(v,g)=>{e.connectionPosition={x:Number.NaN,y:Number.NaN},e.connectionEndHandle=null,e.connectionStatus=null,g?e.connectionClickStartHandle=null:e.connectionStartHandle=null},G=v=>{const g=ah(v),p=g?null:Pt(v)?v:u(v.id);return!g&&!p?[null,null,g]:[g?v:En(p),p,g]},K=(v,g=!0,p=e.nodes)=>{const[I,x,R]=G(v);if(!I)return[];const L=[];for(const j of p||e.nodes){if(!R&&(j.id===x.id||!j.computedPosition))continue;const U=En(j),te=xn(U,I);(g&&te>0||te>=U.width*U.height||te>=Number(I.width)*Number(I.height))&&L.push(j)}return L},ue=(v,g,p=!0)=>{const[I]=G(v);if(!I)return!1;const x=xn(I,g);return p&&x>0||x>=Number(I.width)*Number(I.height)},he=v=>{const{viewport:g,dimensions:p,d3Zoom:I,d3Selection:x,translateExtent:R}=e;if(!I||!x||!v.x&&!v.y)return!1;const L=bt.translate(g.x+v.x,g.y+v.y).scale(g.zoom),j=[[0,0],[p.width,p.height]],U=I.constrain()(L,j,R),te=e.viewport.x!==U.x||e.viewport.y!==U.y||e.viewport.zoom!==U.k;return I.transform(x,U),te},ie=v=>{const g=v instanceof Function?v(e):v,p=["d3Zoom","d3Selection","d3ZoomHandler","viewportRef","vueFlowRef","dimensions","hooks"];_e(g.defaultEdgeOptions)&&(e.defaultEdgeOptions=g.defaultEdgeOptions);const I=g.modelValue||g.nodes||g.edges?[]:void 0;I&&(g.modelValue&&I.push(...g.modelValue),g.nodes&&I.push(...g.nodes),g.edges&&I.push(...g.edges),E(I));const x=()=>{_e(g.maxZoom)&&D(g.maxZoom),_e(g.minZoom)&&C(g.minZoom),_e(g.translateExtent)&&V(g.translateExtent)};for(const R of Object.keys(g)){const L=R,j=g[L];![...jh,...p].includes(L)&&_e(j)&&(e[L]=j)}so(()=>e.d3Zoom).not.toBeNull().then(x),e.initialized||(e.initialized=!0)};return{updateNodePositions:d,updateNodeDimensions:f,setElements:E,setNodes:Y,setEdges:O,addNodes:W,addEdges:m,removeNodes:M,removeEdges:S,findNode:u,findEdge:c,updateEdge:T,updateEdgeData:P,updateNode:X,updateNodeData:J,applyEdgeChanges:A,applyNodeChanges:$,addSelectedElements:b,addSelectedNodes:_,addSelectedEdges:y,setMinZoom:C,setMaxZoom:D,setTranslateExtent:V,setNodeExtent:H,setPaneClickDistance:z,removeSelectedElements:w,removeSelectedNodes:N,removeSelectedEdges:k,startConnection:oe,updateConnection:se,endConnection:F,setInteractive:q,setState:ie,getIntersectingNodes:K,getIncomers:r,getOutgoers:s,getConnectedEdges:a,getHandleConnections:l,isNodeIntersecting:ue,panBy:he,fitView:v=>o.value.fitView(v),zoomIn:v=>o.value.zoomIn(v),zoomOut:v=>o.value.zoomOut(v),zoomTo:(v,g)=>o.value.zoomTo(v,g),setViewport:(v,g)=>o.value.setViewport(v,g),setTransform:(v,g)=>o.value.setTransform(v,g),getViewport:()=>o.value.getViewport(),getTransform:()=>o.value.getTransform(),setCenter:(v,g,p)=>o.value.setCenter(v,g,p),fitBounds:(v,g)=>o.value.fitBounds(v,g),project:v=>o.value.project(v),screenToFlowCoordinate:v=>o.value.screenToFlowCoordinate(v),flowToScreenCoordinate:v=>o.value.flowToScreenCoordinate(v),toObject:()=>{const v=[],g=[];for(const p of e.nodes){const{computedPosition:I,handleBounds:x,selected:R,dimensions:L,isParent:j,resizing:U,dragging:te,events:ae,...de}=p;v.push(de)}for(const p of e.edges){const{selected:I,sourceNode:x,targetNode:R,events:L,...j}=p;g.push(j)}return JSON.parse(JSON.stringify({nodes:v,edges:g,position:[e.viewport.x,e.viewport.y],zoom:e.viewport.zoom,viewport:e.viewport}))},fromObject:v=>new Promise(g=>{const{nodes:p,edges:I,position:x,zoom:R,viewport:L}=v;p&&Y(p),I&&O(I);const[j,U]=L!=null&&L.x&&(L!=null&&L.y)?[L.x,L.y]:x??[null,null];if(j&&U){const te=(L==null?void 0:L.zoom)||R||e.viewport.zoom;return so(()=>o.value.viewportInitialized).toBe(!0).then(()=>{o.value.setViewport({x:j,y:U,zoom:te}).then(()=>{g(!0)})})}else g(!0)}),updateNodeInternals:i,viewportHelper:o,$reset:()=>{const v=ms();if(e.edges=[],e.nodes=[],e.d3Zoom&&e.d3Selection){const g=bt.translate(v.defaultViewport.x??0,v.defaultViewport.y??0).scale(ut(v.defaultViewport.zoom??1,v.minZoom,v.maxZoom)),p=e.viewportRef.getBoundingClientRect(),I=[[0,0],[p.width,p.height]],x=e.d3Zoom.constrain()(g,I,v.translateExtent);e.d3Zoom.transform(e.d3Selection,x)}ie(v)},$destroy:()=>{}}}const qh=["data-id","data-handleid","data-nodeid","data-handlepos"],Jh={name:"Handle",compatConfig:{MODE:3}},Sn=ye({...Jh,props:{id:{default:null},type:{},position:{default:()=>Z.Top},isValidConnection:{type:Function},connectable:{type:[Boolean,Number,String,Function],default:void 0},connectableStart:{type:Boolean,default:!0},connectableEnd:{type:Boolean,default:!0}},setup(e,{expose:t}){const n=Ds(e,["position","connectable","connectableStart","connectableEnd","id"]),o=me(()=>n.type??"source"),i=me(()=>n.isValidConnection??null),{id:r,connectionStartHandle:s,connectionClickStartHandle:a,connectionEndHandle:l,vueFlowRef:u,nodesConnectable:c,noDragClassName:d,noPanClassName:f}=we(),{id:h,node:_,nodeEl:y,connectedEdges:b}=vs(),N=xe(),k=me(()=>typeof e.connectableStart<"u"?e.connectableStart:!0),w=me(()=>typeof e.connectableEnd<"u"?e.connectableEnd:!0),C=me(()=>{var O,E,W,m,M,S;return((O=s.value)==null?void 0:O.nodeId)===h&&((E=s.value)==null?void 0:E.id)===e.id&&((W=s.value)==null?void 0:W.type)===o.value||((m=l.value)==null?void 0:m.nodeId)===h&&((M=l.value)==null?void 0:M.id)===e.id&&((S=l.value)==null?void 0:S.type)===o.value}),D=me(()=>{var O,E,W;return((O=a.value)==null?void 0:O.nodeId)===h&&((E=a.value)==null?void 0:E.id)===e.id&&((W=a.value)==null?void 0:W.type)===o.value}),{handlePointerDown:V,handleClick:H}=gs({nodeId:h,handleId:e.id,isValidConnection:i,type:o}),z=re(()=>typeof e.connectable=="string"&&e.connectable==="single"?!b.value.some(O=>{const E=O[`${o.value}Handle`];return O[o.value]!==h?!1:E?E===e.id:!0}):typeof e.connectable=="number"?b.value.filter(O=>{const E=O[`${o.value}Handle`];return O[o.value]!==h?!1:E?E===e.id:!0}).length{var O;if(!_.dimensions.width||!_.dimensions.height)return;const E=(O=_.handleBounds[o.value])==null?void 0:O.find($=>$.id===e.id);if(!u.value||E)return;const W=u.value.querySelector(".vue-flow__transformationpane");if(!y.value||!N.value||!W||!e.id)return;const m=y.value.getBoundingClientRect(),M=N.value.getBoundingClientRect(),S=window.getComputedStyle(W),{m22:T}=new window.DOMMatrixReadOnly(S.transform),P={id:e.id,position:e.position,x:(M.left-m.left)/T,y:(M.top-m.top)/T,type:o.value,nodeId:h,...On(N.value)};_.handleBounds[o.value]=[..._.handleBounds[o.value]??[],P]});function q(O){const E=Bo(O);z.value&&k.value&&(E&&O.button===0||!E)&&V(O)}function Y(O){!h||!a.value&&!k.value||z.value&&H(O)}return t({handleClick:H,handlePointerDown:V,onClick:Y,onPointerDown:q}),(O,E)=>(fe(),pe("div",{ref_key:"handle",ref:N,"data-id":`${ee(r)}-${ee(h)}-${e.id}-${o.value}`,"data-handleid":e.id,"data-nodeid":ee(h),"data-handlepos":O.position,class:At(["vue-flow__handle",[`vue-flow__handle-${O.position}`,`vue-flow__handle-${e.id}`,ee(d),ee(f),o.value,{connectable:z.value,connecting:D.value,connectablestart:k.value,connectableend:w.value,connectionindicator:z.value&&(k.value&&!C.value||w.value&&C.value)}]]),onMousedown:q,onTouchstartPassive:q,onClick:Y},[rt(O.$slots,"default",{id:O.id})],42,qh))}}),An=function({sourcePosition:e=Z.Bottom,targetPosition:t=Z.Top,label:n,connectable:o=!0,isValidTargetPos:i,isValidSourcePos:r,data:s}){const a=s.label??n;return[ve(Sn,{type:"target",position:t,connectable:o,isValidConnection:i}),typeof a!="string"&&a?ve(a):ve(Be,[a]),ve(Sn,{type:"source",position:e,connectable:o,isValidConnection:r})]};An.props=["sourcePosition","targetPosition","label","isValidTargetPos","isValidSourcePos","connectable","data"];An.inheritAttrs=!1;An.compatConfig={MODE:3};const Qh=An,zn=function({targetPosition:e=Z.Top,label:t,connectable:n=!0,isValidTargetPos:o,data:i}){const r=i.label??t;return[ve(Sn,{type:"target",position:e,connectable:n,isValidConnection:o}),typeof r!="string"&&r?ve(r):ve(Be,[r])]};zn.props=["targetPosition","label","isValidTargetPos","connectable","data"];zn.inheritAttrs=!1;zn.compatConfig={MODE:3};const eg=zn,Bn=function({sourcePosition:e=Z.Bottom,label:t,connectable:n=!0,isValidSourcePos:o,data:i}){const r=i.label??t;return[typeof r!="string"&&r?ve(r):ve(Be,[r]),ve(Sn,{type:"source",position:e,connectable:n,isValidConnection:o})]};Bn.props=["sourcePosition","label","isValidSourcePos","connectable","data"];Bn.inheritAttrs=!1;Bn.compatConfig={MODE:3};const tg=Bn,ng=["transform"],og=["width","height","x","y","rx","ry"],ig=["y"],rg={name:"EdgeText",compatConfig:{MODE:3}},sg=ye({...rg,props:{x:{},y:{},label:{},labelStyle:{default:()=>({})},labelShowBg:{type:Boolean,default:!0},labelBgStyle:{default:()=>({})},labelBgPadding:{default:()=>[2,4]},labelBgBorderRadius:{default:2}},setup(e){const t=xe({x:0,y:0,width:0,height:0}),n=xe(null),o=re(()=>`translate(${e.x-t.value.width/2} ${e.y-t.value.height/2})`);Qe(i),ge([()=>e.x,()=>e.y,n,()=>e.label],i);function i(){if(!n.value)return;const r=n.value.getBBox();(r.width!==t.value.width||r.height!==t.value.height)&&(t.value=r)}return(r,s)=>(fe(),pe("g",{transform:o.value,class:"vue-flow__edge-textwrapper"},[r.labelShowBg?(fe(),pe("rect",{key:0,class:"vue-flow__edge-textbg",width:`${t.value.width+2*r.labelBgPadding[0]}px`,height:`${t.value.height+2*r.labelBgPadding[1]}px`,x:-r.labelBgPadding[0],y:-r.labelBgPadding[1],style:Ke(r.labelBgStyle),rx:r.labelBgBorderRadius,ry:r.labelBgBorderRadius},null,12,og)):ze("",!0),st("text",Xi(r.$attrs,{ref_key:"el",ref:n,class:"vue-flow__edge-text",y:t.value.height/2,dy:"0.3em",style:r.labelStyle}),[rt(r.$slots,"default",{},()=>[typeof r.label!="string"?(fe(),mt(zs(r.label),{key:0})):(fe(),pe(Be,{key:1},[Bs(oo(r.label),1)],64))])],16,ig)],8,ng))}}),ag=["id","d","marker-end","marker-start"],lg=["d","stroke-width"],ug={name:"BaseEdge",inheritAttrs:!1,compatConfig:{MODE:3}},Rn=ye({...ug,props:{id:{},labelX:{},labelY:{},path:{},label:{},markerStart:{},markerEnd:{},interactionWidth:{default:20},labelStyle:{},labelShowBg:{type:Boolean},labelBgStyle:{},labelBgPadding:{},labelBgBorderRadius:{}},setup(e,{expose:t}){const n=xe(null),o=xe(null),i=xe(null),r=As();return t({pathEl:n,interactionEl:o,labelEl:i}),(s,a)=>(fe(),pe(Be,null,[st("path",Xi(ee(r),{id:s.id,ref_key:"pathEl",ref:n,d:s.path,class:"vue-flow__edge-path","marker-end":s.markerEnd,"marker-start":s.markerStart}),null,16,ag),s.interactionWidth?(fe(),pe("path",{key:0,ref_key:"interactionEl",ref:o,fill:"none",d:s.path,"stroke-width":s.interactionWidth,"stroke-opacity":0,class:"vue-flow__edge-interaction"},null,8,lg)):ze("",!0),s.label&&s.labelX&&s.labelY?(fe(),mt(sg,{key:1,ref_key:"labelEl",ref:i,x:s.labelX,y:s.labelY,label:s.label,"label-show-bg":s.labelShowBg,"label-bg-style":s.labelBgStyle,"label-bg-padding":s.labelBgPadding,"label-bg-border-radius":s.labelBgBorderRadius,"label-style":s.labelStyle},null,8,["x","y","label","label-show-bg","label-bg-style","label-bg-padding","label-bg-border-radius","label-style"])):ze("",!0)],64))}});function ys({sourceX:e,sourceY:t,targetX:n,targetY:o}){const i=Math.abs(n-e)/2,r=n=0?.5*e:t*25*Math.sqrt(-e)}function zi({pos:e,x1:t,y1:n,x2:o,y2:i,c:r}){let s,a;switch(e){case Z.Left:s=t-on(t-o,r),a=n;break;case Z.Right:s=t+on(o-t,r),a=n;break;case Z.Top:s=t,a=n-on(n-i,r);break;case Z.Bottom:s=t,a=n+on(i-n,r);break}return[s,a]}function _s(e){const{sourceX:t,sourceY:n,sourcePosition:o=Z.Bottom,targetX:i,targetY:r,targetPosition:s=Z.Top,curvature:a=.25}=e,[l,u]=zi({pos:o,x1:t,y1:n,x2:i,y2:r,c:a}),[c,d]=zi({pos:s,x1:i,y1:r,x2:t,y2:n,c:a}),[f,h,_,y]=ws({sourceX:t,sourceY:n,targetX:i,targetY:r,sourceControlX:l,sourceControlY:u,targetControlX:c,targetControlY:d});return[`M${t},${n} C${l},${u} ${c},${d} ${i},${r}`,f,h,_,y]}function Bi({pos:e,x1:t,y1:n,x2:o,y2:i}){let r,s;switch(e){case Z.Left:case Z.Right:r=.5*(t+o),s=n;break;case Z.Top:case Z.Bottom:r=t,s=.5*(n+i);break}return[r,s]}function bs(e){const{sourceX:t,sourceY:n,sourcePosition:o=Z.Bottom,targetX:i,targetY:r,targetPosition:s=Z.Top}=e,[a,l]=Bi({pos:o,x1:t,y1:n,x2:i,y2:r}),[u,c]=Bi({pos:s,x1:i,y1:r,x2:t,y2:n}),[d,f,h,_]=ws({sourceX:t,sourceY:n,targetX:i,targetY:r,sourceControlX:a,sourceControlY:l,targetControlX:u,targetControlY:c});return[`M${t},${n} C${a},${l} ${u},${c} ${i},${r}`,d,f,h,_]}const Ri={[Z.Left]:{x:-1,y:0},[Z.Right]:{x:1,y:0},[Z.Top]:{x:0,y:-1},[Z.Bottom]:{x:0,y:1}};function cg({source:e,sourcePosition:t=Z.Bottom,target:n}){return t===Z.Left||t===Z.Right?e.xe[d]?-1:1)*m:N[d]=(u[d]>n[d]?-1:1)*m}}if(t!==o){const W=d==="x"?"y":"x",m=s[d]===a[W],M=l[W]>u[W],S=l[W]=E?(_=(q.x+Y.x)/2,y=h[0].y):(_=h[0].x,y=(q.y+Y.y)/2)}return[[e,{x:l.x+b.x,y:l.y+b.y},...h,{x:u.x+N.x,y:u.y+N.y},n],_,y,C,D]}function fg(e,t,n,o){const i=Math.min(Vi(e,t)/2,Vi(t,n)/2,o),{x:r,y:s}=t;if(e.x===r&&r===n.x||e.y===s&&s===n.y)return`L${r} ${s}`;if(e.y===s){const u=e.x{let C;return w>0&&w{const[n,o,i]=hg(e);return ve(Rn,{path:n,labelX:o,labelY:i,...t,...e})}}}),vg=gg,pg=ye({name:"SmoothStepEdge",props:["sourcePosition","targetPosition","label","labelStyle","labelShowBg","labelBgStyle","labelBgPadding","labelBgBorderRadius","sourceY","sourceX","targetX","targetY","borderRadius","markerEnd","markerStart","interactionWidth","offset"],compatConfig:{MODE:3},setup(e,{attrs:t}){return()=>{const[n,o,i]=_o({...e,sourcePosition:e.sourcePosition??Z.Bottom,targetPosition:e.targetPosition??Z.Top});return ve(Rn,{path:n,labelX:o,labelY:i,...t,...e})}}}),Es=pg,mg=ye({name:"StepEdge",props:["sourcePosition","targetPosition","label","labelStyle","labelShowBg","labelBgStyle","labelBgPadding","labelBgBorderRadius","sourceY","sourceX","targetX","targetY","markerEnd","markerStart","interactionWidth"],setup(e,{attrs:t}){return()=>ve(Es,{...e,...t,borderRadius:0})}}),yg=mg,wg=ye({name:"BezierEdge",props:["sourcePosition","targetPosition","label","labelStyle","labelShowBg","labelBgStyle","labelBgPadding","labelBgBorderRadius","sourceY","sourceX","targetX","targetY","curvature","markerEnd","markerStart","interactionWidth"],compatConfig:{MODE:3},setup(e,{attrs:t}){return()=>{const[n,o,i]=_s({...e,sourcePosition:e.sourcePosition??Z.Bottom,targetPosition:e.targetPosition??Z.Top});return ve(Rn,{path:n,labelX:o,labelY:i,...t,...e})}}}),_g=wg,bg=ye({name:"SimpleBezierEdge",props:["sourcePosition","targetPosition","label","labelStyle","labelShowBg","labelBgStyle","labelBgPadding","labelBgBorderRadius","sourceY","sourceX","targetX","targetY","markerEnd","markerStart","interactionWidth"],compatConfig:{MODE:3},setup(e,{attrs:t}){return()=>{const[n,o,i]=bs({...e,sourcePosition:e.sourcePosition??Z.Bottom,targetPosition:e.targetPosition??Z.Top});return ve(Rn,{path:n,labelX:o,labelY:i,...t,...e})}}}),Eg=bg,xg={input:tg,default:Qh,output:eg},Ng={default:_g,straight:vg,step:yg,smoothstep:Es,simplebezier:Eg};function Sg(e,t,n){const o=re(()=>y=>t.value.get(y)),i=re(()=>y=>n.value.get(y)),r=re(()=>{const y={...Ng,...e.edgeTypes},b=Object.keys(y);for(const N of e.edges)N.type&&!b.includes(N.type)&&(y[N.type]=N.type);return y}),s=re(()=>{const y={...xg,...e.nodeTypes},b=Object.keys(y);for(const N of e.nodes)N.type&&!b.includes(N.type)&&(y[N.type]=N.type);return y}),a=re(()=>e.onlyRenderVisibleElements?os(e.nodes,{x:0,y:0,width:e.dimensions.width,height:e.dimensions.height},e.viewport,!0):e.nodes),l=re(()=>{if(e.onlyRenderVisibleElements){const y=[];for(const b of e.edges){const N=t.value.get(b.source),k=t.value.get(b.target);bh({sourcePos:N.computedPosition||{x:0,y:0},targetPos:k.computedPosition||{x:0,y:0},sourceWidth:N.dimensions.width,sourceHeight:N.dimensions.height,targetWidth:k.dimensions.width,targetHeight:k.dimensions.height,width:e.dimensions.width,height:e.dimensions.height,viewport:e.viewport})&&y.push(b)}return y}return e.edges}),u=re(()=>[...a.value,...l.value]),c=re(()=>{const y=[];for(const b of e.nodes)b.selected&&y.push(b);return y}),d=re(()=>{const y=[];for(const b of e.edges)b.selected&&y.push(b);return y}),f=re(()=>[...c.value,...d.value]),h=re(()=>{const y=[];for(const b of e.nodes)b.dimensions.width&&b.dimensions.height&&b.handleBounds!==void 0&&y.push(b);return y}),_=re(()=>a.value.length>0&&h.value.length===a.value.length);return{getNode:o,getEdge:i,getElements:u,getEdgeTypes:r,getNodeTypes:s,getEdges:l,getNodes:a,getSelectedElements:f,getSelectedNodes:c,getSelectedEdges:d,getNodesInitialized:h,areNodesInitialized:_}}class tt{constructor(){this.currentId=0,this.flows=new Map}static getInstance(){var t;const n=(t=Nt())==null?void 0:t.appContext.app,o=(n==null?void 0:n.config.globalProperties.$vueFlowStorage)??tt.instance;return tt.instance=o??new tt,n&&(n.config.globalProperties.$vueFlowStorage=tt.instance),tt.instance}set(t,n){return this.flows.set(t,n)}get(t){return this.flows.get(t)}remove(t){return this.flows.delete(t)}create(t,n){const o=ms(),i=Is(o),r={};for(const[f,h]of Object.entries(i.hooks)){const _=`on${f.charAt(0).toUpperCase()+f.slice(1)}`;r[_]=h.on}const s={};for(const[f,h]of Object.entries(i.hooks))s[f]=h.trigger;const a=re(()=>{const f=new Map;for(const h of i.nodes)f.set(h.id,h);return f}),l=re(()=>{const f=new Map;for(const h of i.edges)f.set(h.id,h);return f}),u=Sg(i,a,l),c=Kh(i,a,l);c.setState({...i,...n});const d={...r,...u,...c,...vu(i),nodeLookup:a,edgeLookup:l,emits:s,id:t,vueFlowVersion:"1.48.2",$destroy:()=>{this.remove(t)}};return this.set(t,d),d}getId(){return`vue-flow-${this.currentId++}`}}function we(e){const t=tt.getInstance(),n=Fi(),o=typeof e=="object",i=o?e:{id:e},r=i.id,s=r??(n==null?void 0:n.vueFlowId);let a;if(n){const l=xt(Ai,null);typeof l<"u"&&l!==null&&(!s||l.id===s)&&(a=l)}if(a||s&&(a=t.get(s)),!a||s&&a.id!==s){const l=r??t.getId(),u=t.create(l,i);a=u,(n??Hi(!0)).run(()=>{ge(u.applyDefault,(d,f,h)=>{const _=b=>{u.applyNodeChanges(b)},y=b=>{u.applyEdgeChanges(b)};d?(u.onNodesChange(_),u.onEdgesChange(y)):(u.hooks.value.nodesChange.off(_),u.hooks.value.edgesChange.off(y)),h(()=>{u.hooks.value.nodesChange.off(_),u.hooks.value.edgesChange.off(y)})},{immediate:!0}),Bt(()=>{if(a){const d=t.get(a.id);d?d.$destroy():Wt(`No store instance found for id ${a.id} in storage.`)}})})}else o&&a.setState(i);if(n&&(pt(Ai,a),n.vueFlowId=a.id),o){const l=Nt();(l==null?void 0:l.type.name)!=="VueFlow"&&a.emits.error(new Ee(be.USEVUEFLOW_OPTIONS))}return a}function Ig(e){const{emits:t,dimensions:n}=we();let o;Qe(()=>{const i=()=>{var r,s;if(!e.value||!(((s=(r=e.value).checkVisibility)==null?void 0:s.call(r))??!0))return;const a=On(e.value);(a.width===0||a.height===0)&&t.error(new Ee(be.MISSING_VIEWPORT_DIMENSIONS)),n.value={width:a.width||500,height:a.height||500}};i(),window.addEventListener("resize",i),e.value&&(o=new ResizeObserver(()=>i()),o.observe(e.value)),Yi(()=>{window.removeEventListener("resize",i),o&&e.value&&o.unobserve(e.value)})})}const Cg={name:"UserSelection",compatConfig:{MODE:3}},kg=ye({...Cg,props:{userSelectionRect:{}},setup(e){return(t,n)=>(fe(),pe("div",{class:"vue-flow__selection vue-flow__container",style:Ke({width:`${t.userSelectionRect.width}px`,height:`${t.userSelectionRect.height}px`,transform:`translate(${t.userSelectionRect.x}px, ${t.userSelectionRect.y}px)`})},null,4))}}),Mg=["tabIndex"],Tg={name:"NodesSelection",compatConfig:{MODE:3}},Pg=ye({...Tg,setup(e){const{emits:t,viewport:n,getSelectedNodes:o,noPanClassName:i,disableKeyboardA11y:r,userSelectionActive:s}=we(),a=ps(),l=xe(null),u=hs({el:l,onStart(_){t.selectionDragStart(_),t.nodeDragStart(_)},onDrag(_){t.selectionDrag(_),t.nodeDrag(_)},onStop(_){t.selectionDragStop(_),t.nodeDragStop(_)}});Qe(()=>{var _;r.value||(_=l.value)==null||_.focus({preventScroll:!0})});const c=re(()=>ns(o.value)),d=re(()=>({width:`${c.value.width}px`,height:`${c.value.height}px`,top:`${c.value.y}px`,left:`${c.value.x}px`}));function f(_){t.selectionContextMenu({event:_,nodes:o.value})}function h(_){r.value||vt[_.key]&&(_.preventDefault(),a({x:vt[_.key].x,y:vt[_.key].y},_.shiftKey))}return(_,y)=>!ee(s)&&c.value.width&&c.value.height?(fe(),pe("div",{key:0,class:At(["vue-flow__nodesselection vue-flow__container",ee(i)]),style:Ke({transform:`translate(${ee(n).x}px,${ee(n).y}px) scale(${ee(n).zoom})`})},[st("div",{ref_key:"el",ref:l,class:At([{dragging:ee(u)},"vue-flow__nodesselection-rect"]),style:Ke(d.value),tabIndex:ee(r)?void 0:-1,onContextmenu:f,onKeydown:h},null,46,Mg)],6)):ze("",!0)}});function Og(e,t){return{x:e.clientX-t.left,y:e.clientY-t.top}}const Dg={name:"Pane",compatConfig:{MODE:3}},$g=ye({...Dg,props:{isSelecting:{type:Boolean},selectionKeyPressed:{type:Boolean}},setup(e){const{vueFlowRef:t,nodes:n,viewport:o,emits:i,userSelectionActive:r,removeSelectedElements:s,userSelectionRect:a,elementsSelectable:l,nodesSelectionActive:u,getSelectedEdges:c,getSelectedNodes:d,removeNodes:f,removeEdges:h,selectionMode:_,deleteKeyCode:y,multiSelectionKeyCode:b,multiSelectionActive:N,edgeLookup:k,nodeLookup:w,connectionLookup:C,defaultEdgeOptions:D,connectionStartHandle:V,panOnDrag:H}=we(),z=je(null),q=je(new Set),Y=je(new Set),O=je(null),E=me(()=>l.value&&(e.isSelecting||r.value)),W=me(()=>V.value!==null);let m=!1,M=!1;const S=$t(y,{actInsideInputWithModifier:!1}),T=$t(b);ge(S,F=>{F&&(f(d.value),h(c.value),u.value=!1)}),ge(T,F=>{N.value=F});function P(F,G){return K=>{K.target===G&&(F==null||F(K))}}function $(F){if(m||W.value){m=!1;return}i.paneClick(F),s(),u.value=!1}function A(F){var G;if(Array.isArray(H.value)&&((G=H.value)!=null&&G.includes(2))){F.preventDefault();return}i.paneContextMenu(F)}function X(F){i.paneScroll(F)}function J(F){var G,K,ue;if(O.value=((G=t.value)==null?void 0:G.getBoundingClientRect())??null,!l.value||!e.isSelecting||F.button!==0||F.target!==z.value||!O.value)return;(ue=(K=F.target)==null?void 0:K.setPointerCapture)==null||ue.call(K,F.pointerId);const{x:he,y:ie}=Og(F,O.value);M=!0,m=!1,s(),a.value={width:0,height:0,startX:he,startY:ie,x:he,y:ie},i.selectionStart(F)}function oe(F){var G;if(!O.value||!a.value)return;m=!0;const{x:K,y:ue}=De(F,O.value),{startX:he=0,startY:ie=0}=a.value,ce={startX:he,startY:ie,x:Kg.id)),Y.value=new Set;const v=((G=D.value)==null?void 0:G.selectable)??!0;for(const g of q.value){const p=C.value.get(g);if(p)for(const{edgeId:I}of p.values()){const x=k.value.get(I);x&&(x.selectable??v)&&Y.value.add(I)}}if(!$i(Q,q.value)){const g=We(w.value,q.value,!0);i.nodesChange(g)}if(!$i(ne,Y.value)){const g=We(k.value,Y.value);i.edgesChange(g)}a.value=ce,r.value=!0,u.value=!1}function se(F){var G;F.button!==0||!M||((G=F.target)==null||G.releasePointerCapture(F.pointerId),!r.value&&a.value&&F.target===z.value&&$(F),r.value=!1,a.value=null,u.value=q.value.size>0,i.selectionEnd(F),e.selectionKeyPressed&&(m=!1),M=!1)}return(F,G)=>(fe(),pe("div",{ref_key:"container",ref:z,class:At(["vue-flow__pane vue-flow__container",{selection:F.isSelecting}]),onClick:G[0]||(G[0]=K=>E.value?void 0:P($,z.value)(K)),onContextmenu:G[1]||(G[1]=K=>P(A,z.value)(K)),onWheelPassive:G[2]||(G[2]=K=>P(X,z.value)(K)),onPointerenter:G[3]||(G[3]=K=>E.value?void 0:ee(i).paneMouseEnter(K)),onPointerdown:G[4]||(G[4]=K=>E.value?J(K):ee(i).paneMouseMove(K)),onPointermove:G[5]||(G[5]=K=>E.value?oe(K):ee(i).paneMouseMove(K)),onPointerup:G[6]||(G[6]=K=>E.value?se(K):void 0),onPointerleave:G[7]||(G[7]=K=>ee(i).paneMouseLeave(K))},[rt(F.$slots,"default"),ee(r)&&ee(a)?(fe(),mt(kg,{key:0,"user-selection-rect":ee(a)},null,8,["user-selection-rect"])):ze("",!0),ee(u)&&ee(d).length?(fe(),mt(Pg,{key:1})):ze("",!0)],34))}}),Ag={name:"Transform",compatConfig:{MODE:3}},zg=ye({...Ag,setup(e){const{viewport:t,fitViewOnInit:n,fitViewOnInitDone:o}=we(),i=re(()=>n.value?!o.value:!1),r=re(()=>`translate(${t.value.x}px,${t.value.y}px) scale(${t.value.zoom})`);return(s,a)=>(fe(),pe("div",{class:"vue-flow__transformationpane vue-flow__container",style:Ke({transform:r.value,opacity:i.value?0:void 0})},[rt(s.$slots,"default")],4))}}),Bg={name:"Viewport",compatConfig:{MODE:3}},Rg=ye({...Bg,setup(e){const{minZoom:t,maxZoom:n,defaultViewport:o,translateExtent:i,zoomActivationKeyCode:r,selectionKeyCode:s,panActivationKeyCode:a,panOnScroll:l,panOnScrollMode:u,panOnScrollSpeed:c,panOnDrag:d,zoomOnDoubleClick:f,zoomOnPinch:h,zoomOnScroll:_,preventScrolling:y,noWheelClassName:b,noPanClassName:N,emits:k,connectionStartHandle:w,userSelectionActive:C,paneDragging:D,d3Zoom:V,d3Selection:H,d3ZoomHandler:z,viewport:q,viewportRef:Y,paneClickDistance:O}=we();Ig(Y);const E=je(!1),W=je(!1);let m=null,M=!1,S=0,T={x:0,y:0,zoom:0};const P=$t(a),$=$t(s),A=$t(r),X=me(()=>(!$.value||$.value&&s.value===!0)&&(P.value||d.value)),J=me(()=>P.value||l.value),oe=me(()=>s.value===!0&&X.value!==!0),se=me(()=>$.value&&s.value!==!0||C.value||oe.value),F=me(()=>w.value!==null);Qe(()=>{if(!Y.value){Wt("Viewport element is missing");return}const ie=Y.value,ce=ie.getBoundingClientRect(),Q=eh().clickDistance(O.value).scaleExtent([t.value,n.value]).translateExtent(i.value),ne=Ce(ie).call(Q),v=ne.on("wheel.zoom"),g=bt.translate(o.value.x??0,o.value.y??0).scale(ut(o.value.zoom??1,t.value,n.value)),p=[[0,0],[ce.width,ce.height]],I=Q.constrain()(g,p,i.value);Q.transform(ne,I),Q.wheelDelta(_i),V.value=Q,H.value=ne,z.value=v,q.value={x:I.x,y:I.y,zoom:I.k},Q.on("start",x=>{var R;if(!x.sourceEvent)return null;S=x.sourceEvent.button,E.value=!0;const L=ue(x.transform);((R=x.sourceEvent)==null?void 0:R.type)==="mousedown"&&(D.value=!0),T=L,k.viewportChangeStart(L),k.moveStart({event:x,flowTransform:L})}),Q.on("end",x=>{if(!x.sourceEvent)return null;if(E.value=!1,D.value=!1,G(X.value,S??0)&&!M&&k.paneContextMenu(x.sourceEvent),M=!1,K(T,x.transform)){const R=ue(x.transform);T=R,k.viewportChangeEnd(R),k.moveEnd({event:x,flowTransform:R})}}),Q.filter(x=>{var R;const L=A.value||_.value,j=h.value&&x.ctrlKey,U=x.button,te=x.type==="wheel";if(U===1&&x.type==="mousedown"&&(he(x,"vue-flow__node")||he(x,"vue-flow__edge")))return!0;if(!X.value&&!L&&!J.value&&!f.value&&!h.value||C.value||F.value&&!te||!f.value&&x.type==="dblclick"||he(x,b.value)&&te||he(x,N.value)&&(!te||J.value&&te&&!A.value)||!h.value&&x.ctrlKey&&te||!L&&!J.value&&!j&&te)return!1;if(!h&&x.type==="touchstart"&&((R=x.touches)==null?void 0:R.length)>1)return x.preventDefault(),!1;if(!X.value&&(x.type==="mousedown"||x.type==="touchstart")||oe.value&&Array.isArray(d.value)&&d.value.includes(0)&&U===0||Array.isArray(d.value)&&!d.value.includes(U)&&(x.type==="mousedown"||x.type==="touchstart"))return!1;const ae=Array.isArray(d.value)&&d.value.includes(U)||s.value===!0&&Array.isArray(d.value)&&!d.value.includes(0)||!U||U<=1;return(!x.ctrlKey||P.value||te)&&ae}),ge([C,X],()=>{C.value&&!E.value?Q.on("zoom",null):C.value||Q.on("zoom",x=>{q.value={x:x.transform.x,y:x.transform.y,zoom:x.transform.k};const R=ue(x.transform);M=G(X.value,S??0),k.viewportChange(R),k.move({event:x,flowTransform:R})})},{immediate:!0}),ge([C,J,u,A,h,y,b],()=>{J.value&&!A.value&&!C.value?ne.on("wheel.zoom",x=>{if(he(x,b.value))return!1;const R=A.value||_.value,L=h.value&&x.ctrlKey;if(!(!y.value||J.value||R||L))return!1;x.preventDefault(),x.stopImmediatePropagation();const U=ne.property("__zoom").k||1,te=Nn();if(!P.value&&x.ctrlKey&&h.value&&te){const xs=Pe(x),Ns=_i(x),Ss=U*2**Ns;Q.scaleTo(ne,Ss,xs,x);return}const ae=x.deltaMode===1?20:1;let de=u.value===Dt.Vertical?0:x.deltaX*ae,Xe=u.value===Dt.Horizontal?0:x.deltaY*ae;!te&&x.shiftKey&&u.value!==Dt.Vertical&&!de&&Xe&&(de=Xe,Xe=0),Q.translateBy(ne,-(de/U)*c.value,-(Xe/U)*c.value);const Te=ue(ne.property("__zoom"));m&&clearTimeout(m),W.value?(k.move({event:x,flowTransform:Te}),k.viewportChange(Te),m=setTimeout(()=>{k.moveEnd({event:x,flowTransform:Te}),k.viewportChangeEnd(Te),W.value=!1},150)):(W.value=!0,k.moveStart({event:x,flowTransform:Te}),k.viewportChangeStart(Te))},{passive:!1}):typeof v<"u"&&ne.on("wheel.zoom",function(x,R){const L=!y.value&&x.type==="wheel"&&!x.ctrlKey,j=A.value||_.value,U=h.value&&x.ctrlKey;if(!j&&!l.value&&!U&&x.type==="wheel"||L||he(x,b.value))return null;x.preventDefault(),v.call(this,x,R)},{passive:!1})},{immediate:!0})});function G(ie,ce){return ce===2&&Array.isArray(ie)&&ie.includes(2)}function K(ie,ce){return ie.x!==ce.x&&!Number.isNaN(ce.x)||ie.y!==ce.y&&!Number.isNaN(ce.y)||ie.zoom!==ce.k&&!Number.isNaN(ce.k)}function ue(ie){return{x:ie.x,y:ie.y,zoom:ie.k}}function he(ie,ce){return ie.target.closest(`.${ce}`)}return(ie,ce)=>(fe(),pe("div",{ref_key:"viewportRef",ref:Y,class:"vue-flow__viewport vue-flow__container"},[He($g,{"is-selecting":se.value,"selection-key-pressed":ee($),class:At({connecting:F.value,dragging:ee(D),draggable:ee(d)===!0||Array.isArray(ee(d))&&ee(d).includes(0)})},{default:no(()=>[He(zg,null,{default:no(()=>[rt(ie.$slots,"default")]),_:3})]),_:3},8,["is-selecting","selection-key-pressed","class"])],512))}}),Vg=["id"],Lg=["id"],Hg=["id"],Fg={name:"A11yDescriptions",compatConfig:{MODE:3}},Yg=ye({...Fg,setup(e){const{id:t,disableKeyboardA11y:n,ariaLiveMessage:o}=we();return(i,r)=>(fe(),pe(Be,null,[st("div",{id:`${ee(Wr)}-${ee(t)}`,style:{display:"none"}}," Press enter or space to select a node. "+oo(ee(n)?"":"You can then use the arrow keys to move the node around.")+" You can then use the arrow keys to move the node around, press delete to remove it and press escape to cancel. ",9,Vg),st("div",{id:`${ee(jr)}-${ee(t)}`,style:{display:"none"}}," Press enter or space to select an edge. You can then press delete to remove it or press escape to cancel. ",8,Lg),ee(n)?ze("",!0):(fe(),pe("div",{key:0,id:`${ee(sh)}-${ee(t)}`,"aria-live":"assertive","aria-atomic":"true",style:{position:"absolute",width:"1px",height:"1px",margin:"-1px",border:"0",padding:"0",overflow:"hidden",clip:"rect(0px, 0px, 0px, 0px)","clip-path":"inset(100%)"}},oo(ee(o)),9,Hg))],64))}});function Gg(){const e=we();ge(()=>e.viewportHelper.value.viewportInitialized,t=>{t&&setTimeout(()=>{e.emits.init(e),e.emits.paneReady(e)},1)})}function Xg(e,t,n){return n===Z.Left?e-t:n===Z.Right?e+t:e}function Ug(e,t,n){return n===Z.Top?e-t:n===Z.Bottom?e+t:e}const Ro=function({radius:e=10,centerX:t=0,centerY:n=0,position:o=Z.Top,type:i}){return ve("circle",{class:`vue-flow__edgeupdater vue-flow__edgeupdater-${i}`,cx:Xg(t,e,o),cy:Ug(n,e,o),r:e,stroke:"transparent",fill:"transparent"})};Ro.props=["radius","centerX","centerY","position","type"];Ro.compatConfig={MODE:3};const Li=Ro,Zg=ye({name:"Edge",compatConfig:{MODE:3},props:["id"],setup(e){const{id:t,addSelectedEdges:n,connectionMode:o,edgeUpdaterRadius:i,emits:r,nodesSelectionActive:s,noPanClassName:a,getEdgeTypes:l,removeSelectedEdges:u,findEdge:c,findNode:d,isValidConnection:f,multiSelectionActive:h,disableKeyboardA11y:_,elementsSelectable:y,edgesUpdatable:b,edgesFocusable:N,hooks:k}=we(),w=re(()=>c(e.id)),{emit:C,on:D}=Bh(w.value,r),V=xt($n),H=Nt(),z=xe(!1),q=xe(!1),Y=xe(""),O=xe(null),E=xe("source"),W=xe(null),m=me(()=>typeof w.value.selectable>"u"?y.value:w.value.selectable),M=me(()=>typeof w.value.updatable>"u"?b.value:w.value.updatable),S=me(()=>typeof w.value.focusable>"u"?N.value:w.value.focusable);pt($h,e.id),pt(Ah,W);const T=re(()=>w.value.class instanceof Function?w.value.class(w.value):w.value.class),P=re(()=>w.value.style instanceof Function?w.value.style(w.value):w.value.style),$=re(()=>{const g=w.value.type||"default",p=V==null?void 0:V[`edge-${g}`];if(p)return p;let I=w.value.template??l.value[g];if(typeof I=="string"&&H){const x=Object.keys(H.appContext.components);x&&x.includes(g)&&(I=Gi(g,!1))}return I&&typeof I!="string"?I:(r.error(new Ee(be.EDGE_TYPE_MISSING,I)),!1)}),{handlePointerDown:A}=gs({nodeId:Y,handleId:O,type:E,isValidConnection:f,edgeUpdaterType:E,onEdgeUpdate:oe,onEdgeUpdateEnd:se});return()=>{const g=d(w.value.source),p=d(w.value.target),I="pathOptions"in w.value?w.value.pathOptions:{};if(!g&&!p)return r.error(new Ee(be.EDGE_SOURCE_TARGET_MISSING,w.value.id,w.value.source,w.value.target)),null;if(!g)return r.error(new Ee(be.EDGE_SOURCE_MISSING,w.value.id,w.value.source)),null;if(!p)return r.error(new Ee(be.EDGE_TARGET_MISSING,w.value.id,w.value.target)),null;if(!w.value||w.value.hidden||g.hidden||p.hidden)return null;let x;o.value===qe.Strict?x=g.handleBounds.source:x=[...g.handleBounds.source||[],...g.handleBounds.target||[]];const R=ki(x,w.value.sourceHandle);let L;o.value===qe.Strict?L=p.handleBounds.target:L=[...p.handleBounds.target||[],...p.handleBounds.source||[]];const j=ki(L,w.value.targetHandle),U=(R==null?void 0:R.position)||Z.Bottom,te=(j==null?void 0:j.position)||Z.Top,{x:ae,y:de}=Et(g,R,U),{x:Xe,y:Te}=Et(p,j,te);return w.value.sourceX=ae,w.value.sourceY=de,w.value.targetX=Xe,w.value.targetY=Te,ve("g",{ref:W,key:e.id,"data-id":e.id,class:["vue-flow__edge",`vue-flow__edge-${$.value===!1?"default":w.value.type||"default"}`,a.value,T.value,{updating:z.value,selected:w.value.selected,animated:w.value.animated,inactive:!m.value&&!k.value.edgeClick.hasListeners()}],tabIndex:S.value?0:void 0,"aria-label":w.value.ariaLabel===null?void 0:w.value.ariaLabel??`Edge from ${w.value.source} to ${w.value.target}`,"aria-describedby":S.value?`${jr}-${t}`:void 0,"aria-roledescription":"edge",role:S.value?"group":"img",...w.value.domAttributes,onClick:G,onContextmenu:K,onDblclick:ue,onMouseenter:he,onMousemove:ie,onMouseleave:ce,onKeyDown:S.value?v:void 0},[q.value?null:ve($.value===!1?l.value.default:$.value,{id:e.id,sourceNode:g,targetNode:p,source:w.value.source,target:w.value.target,type:w.value.type,updatable:M.value,selected:w.value.selected,animated:w.value.animated,label:w.value.label,labelStyle:w.value.labelStyle,labelShowBg:w.value.labelShowBg,labelBgStyle:w.value.labelBgStyle,labelBgPadding:w.value.labelBgPadding,labelBgBorderRadius:w.value.labelBgBorderRadius,data:w.value.data,events:{...w.value.events,...D},style:P.value,markerStart:`url('#${Gt(w.value.markerStart,t)}')`,markerEnd:`url('#${Gt(w.value.markerEnd,t)}')`,sourcePosition:U,targetPosition:te,sourceX:ae,sourceY:de,targetX:Xe,targetY:Te,sourceHandleId:w.value.sourceHandle,targetHandleId:w.value.targetHandle,interactionWidth:w.value.interactionWidth,...I}),[M.value==="source"||M.value===!0?[ve("g",{onMousedown:Q,onMouseenter:X,onMouseout:J},ve(Li,{position:U,centerX:ae,centerY:de,radius:i.value,type:"source","data-type":"source"}))]:null,M.value==="target"||M.value===!0?[ve("g",{onMousedown:ne,onMouseenter:X,onMouseout:J},ve(Li,{position:te,centerX:Xe,centerY:Te,radius:i.value,type:"target","data-type":"target"}))]:null]])};function X(){z.value=!0}function J(){z.value=!1}function oe(g,p){C.update({event:g,edge:w.value,connection:p})}function se(g){C.updateEnd({event:g,edge:w.value}),q.value=!1}function F(g,p){g.button===0&&(q.value=!0,Y.value=p?w.value.target:w.value.source,O.value=(p?w.value.targetHandle:w.value.sourceHandle)??null,E.value=p?"target":"source",C.updateStart({event:g,edge:w.value}),A(g))}function G(g){var p;const I={event:g,edge:w.value};m.value&&(s.value=!1,w.value.selected&&h.value?(u([w.value]),(p=W.value)==null||p.blur()):n([w.value])),C.click(I)}function K(g){C.contextMenu({event:g,edge:w.value})}function ue(g){C.doubleClick({event:g,edge:w.value})}function he(g){C.mouseEnter({event:g,edge:w.value})}function ie(g){C.mouseMove({event:g,edge:w.value})}function ce(g){C.mouseLeave({event:g,edge:w.value})}function Q(g){F(g,!0)}function ne(g){F(g,!1)}function v(g){var p;!_.value&&Kr.includes(g.key)&&m.value&&(g.key==="Escape"?((p=W.value)==null||p.blur(),u([c(e.id)])):n([c(e.id)]))}}}),Wg=Zg,jg=ye({name:"ConnectionLine",compatConfig:{MODE:3},setup(){var e;const{id:t,connectionMode:n,connectionStartHandle:o,connectionEndHandle:i,connectionPosition:r,connectionLineType:s,connectionLineStyle:a,connectionLineOptions:l,connectionStatus:u,viewport:c,findNode:d}=we(),f=(e=xt($n))==null?void 0:e["connection-line"],h=re(()=>{var k;return d((k=o.value)==null?void 0:k.nodeId)}),_=re(()=>{var k;return d((k=i.value)==null?void 0:k.nodeId)??null}),y=re(()=>({x:(r.value.x-c.value.x)/c.value.zoom,y:(r.value.y-c.value.y)/c.value.zoom})),b=re(()=>l.value.markerStart?`url(#${Gt(l.value.markerStart,t)})`:""),N=re(()=>l.value.markerEnd?`url(#${Gt(l.value.markerEnd,t)})`:"");return()=>{var k,w,C;if(!h.value||!o.value)return null;const D=o.value.id,V=o.value.type,H=h.value.handleBounds;let z=(H==null?void 0:H[V])??[];if(n.value===qe.Loose){const P=(H==null?void 0:H[V==="source"?"target":"source"])??[];z=[...z,...P]}if(!z)return null;const q=(D?z.find(P=>P.id===D):z[0])??null,Y=(q==null?void 0:q.position)??Z.Top,{x:O,y:E}=Et(h.value,q,Y);let W=null;_.value&&(n.value===qe.Strict?W=((k=_.value.handleBounds[V==="source"?"target":"source"])==null?void 0:k.find(P=>{var $;return P.id===(($=i.value)==null?void 0:$.id)}))||null:W=((w=[..._.value.handleBounds.source??[],..._.value.handleBounds.target??[]])==null?void 0:w.find(P=>{var $;return P.id===(($=i.value)==null?void 0:$.id)}))||null);const m=((C=i.value)==null?void 0:C.position)??(Y?yo[Y]:null);if(!Y||!m)return null;const M=s.value??l.value.type??et.Bezier;let S="";const T={sourceX:O,sourceY:E,sourcePosition:Y,targetX:y.value.x,targetY:y.value.y,targetPosition:m};return M===et.Bezier?[S]=_s(T):M===et.Step?[S]=_o({...T,borderRadius:0}):M===et.SmoothStep?[S]=_o(T):M===et.SimpleBezier?[S]=bs(T):S=`M${O},${E} ${y.value.x},${y.value.y}`,ve("svg",{class:"vue-flow__edges vue-flow__connectionline vue-flow__container"},ve("g",{class:"vue-flow__connection"},f?ve(f,{sourceX:O,sourceY:E,sourcePosition:Y,targetX:y.value.x,targetY:y.value.y,targetPosition:m,sourceNode:h.value,sourceHandle:q,targetNode:_.value,targetHandle:W,markerEnd:N.value,markerStart:b.value,connectionStatus:u.value}):ve("path",{d:S,class:[l.value.class,u.value,"vue-flow__connection-path"],style:{...a.value,...l.value.style},"marker-end":N.value,"marker-start":b.value})))}}}),Kg=jg,qg=["id","markerWidth","markerHeight","markerUnits","orient"],Jg={name:"MarkerType",compatConfig:{MODE:3}},Qg=ye({...Jg,props:{id:{},type:{},color:{default:"none"},width:{default:12.5},height:{default:12.5},markerUnits:{default:"strokeWidth"},orient:{default:"auto-start-reverse"},strokeWidth:{default:1}},setup(e){return(t,n)=>(fe(),pe("marker",{id:t.id,class:"vue-flow__arrowhead",viewBox:"-10 -10 20 20",refX:"0",refY:"0",markerWidth:`${t.width}`,markerHeight:`${t.height}`,markerUnits:t.markerUnits,orient:t.orient},[t.type===ee(po).ArrowClosed?(fe(),pe("polyline",{key:0,style:Ke({stroke:t.color,fill:t.color,strokeWidth:t.strokeWidth}),"stroke-linecap":"round","stroke-linejoin":"round",points:"-5,-4 0,0 -5,4 -5,-4"},null,4)):ze("",!0),t.type===ee(po).Arrow?(fe(),pe("polyline",{key:1,style:Ke({stroke:t.color,strokeWidth:t.strokeWidth}),"stroke-linecap":"round","stroke-linejoin":"round",fill:"none",points:"-5,-4 0,0 -5,4"},null,4)):ze("",!0)],8,qg))}}),ev={class:"vue-flow__marker vue-flow__container","aria-hidden":"true"},tv={name:"MarkerDefinitions",compatConfig:{MODE:3}},nv=ye({...tv,setup(e){const{id:t,edges:n,connectionLineOptions:o,defaultMarkerColor:i}=we(),r=re(()=>{const s=new Set,a=[],l=u=>{if(u){const c=Gt(u,t);s.has(c)||(typeof u=="object"?a.push({...u,id:c,color:u.color||i.value}):a.push({id:c,color:i.value,type:u}),s.add(c))}};for(const u of[o.value.markerEnd,o.value.markerStart])l(u);for(const u of n.value)for(const c of[u.markerStart,u.markerEnd])l(c);return a.sort((u,c)=>u.id.localeCompare(c.id))});return(s,a)=>(fe(),pe("svg",ev,[st("defs",null,[(fe(!0),pe(Be,null,Eo(r.value,l=>(fe(),mt(Qg,{id:l.id,key:l.id,type:l.type,color:l.color,width:l.width,height:l.height,markerUnits:l.markerUnits,"stroke-width":l.strokeWidth,orient:l.orient},null,8,["id","type","color","width","height","markerUnits","stroke-width","orient"]))),128))])]))}}),ov={name:"Edges",compatConfig:{MODE:3}},iv=ye({...ov,setup(e){const{findNode:t,getEdges:n,elevateEdgesOnSelect:o}=we();return(i,r)=>(fe(),pe(Be,null,[He(nv),(fe(!0),pe(Be,null,Eo(ee(n),s=>(fe(),pe("svg",{key:s.id,class:"vue-flow__edges vue-flow__container",style:Ke({zIndex:ee(Eh)(s,ee(t),ee(o))})},[He(ee(Wg),{id:s.id},null,8,["id"])],4))),128)),He(ee(Kg))],64))}}),rv=ye({name:"Node",compatConfig:{MODE:3},props:["id","resizeObserver"],setup(e){const{id:t,noPanClassName:n,selectNodesOnDrag:o,nodesSelectionActive:i,multiSelectionActive:r,emits:s,removeSelectedNodes:a,addSelectedNodes:l,updateNodeDimensions:u,onUpdateNodeInternals:c,getNodeTypes:d,nodeExtent:f,elevateNodesOnSelect:h,disableKeyboardA11y:_,ariaLiveMessage:y,snapToGrid:b,snapGrid:N,nodeDragThreshold:k,nodesDraggable:w,elementsSelectable:C,nodesConnectable:D,nodesFocusable:V,hooks:H}=we(),z=xe(null);pt(fs,z),pt(ds,e.id);const q=xt($n),Y=Nt(),O=ps(),{node:E,parentNode:W}=vs(e.id),{emit:m,on:M}=Hh(E,s),S=me(()=>typeof E.draggable>"u"?w.value:E.draggable),T=me(()=>typeof E.selectable>"u"?C.value:E.selectable),P=me(()=>typeof E.connectable>"u"?D.value:E.connectable),$=me(()=>typeof E.focusable>"u"?V.value:E.focusable),A=re(()=>T.value||S.value||H.value.nodeClick.hasListeners()||H.value.nodeDoubleClick.hasListeners()||H.value.nodeMouseEnter.hasListeners()||H.value.nodeMouseMove.hasListeners()||H.value.nodeMouseLeave.hasListeners()),X=me(()=>!!E.dimensions.width&&!!E.dimensions.height),J=re(()=>{const p=E.type||"default",I=q==null?void 0:q[`node-${p}`];if(I)return I;let x=E.template||d.value[p];if(typeof x=="string"&&Y){const R=Object.keys(Y.appContext.components);R&&R.includes(p)&&(x=Gi(p,!1))}return x&&typeof x!="string"?x:(s.error(new Ee(be.NODE_TYPE_MISSING,x)),!1)}),oe=hs({id:e.id,el:z,disabled:()=>!S.value,selectable:T,dragHandle:()=>E.dragHandle,onStart(p){m.dragStart(p)},onDrag(p){m.drag(p)},onStop(p){m.dragStop(p)},onClick(p){v(p)}}),se=re(()=>E.class instanceof Function?E.class(E):E.class),F=re(()=>{const p=(E.style instanceof Function?E.style(E):E.style)||{},I=E.width instanceof Function?E.width(E):E.width,x=E.height instanceof Function?E.height(E):E.height;return!p.width&&I&&(p.width=typeof I=="string"?I:`${I}px`),!p.height&&x&&(p.height=typeof x=="string"?x:`${x}px`),p}),G=me(()=>Number(E.zIndex??F.value.zIndex??0));return c(p=>{(p.includes(e.id)||!p.length)&&ue()}),Qe(()=>{ge(()=>E.hidden,(p=!1,I,x)=>{!p&&z.value&&(e.resizeObserver.observe(z.value),x(()=>{z.value&&e.resizeObserver.unobserve(z.value)}))},{immediate:!0,flush:"post"})}),ge([()=>E.type,()=>E.sourcePosition,()=>E.targetPosition],()=>{Ye(()=>{u([{id:e.id,nodeElement:z.value,forceUpdate:!0}])})}),ge([()=>E.position.x,()=>E.position.y,()=>{var p;return(p=W.value)==null?void 0:p.computedPosition.x},()=>{var p;return(p=W.value)==null?void 0:p.computedPosition.y},()=>{var p;return(p=W.value)==null?void 0:p.computedPosition.z},G,()=>E.selected,()=>E.dimensions.height,()=>E.dimensions.width,()=>{var p;return(p=W.value)==null?void 0:p.dimensions.height},()=>{var p;return(p=W.value)==null?void 0:p.dimensions.width}],([p,I,x,R,L,j])=>{const U={x:p,y:I,z:j+(h.value&&E.selected?1e3:0)};typeof x<"u"&&typeof R<"u"?E.computedPosition=ph({x,y:R,z:L},U):E.computedPosition=U},{flush:"post",immediate:!0}),ge([()=>E.extent,f],([p,I],[x,R])=>{(p!==x||I!==R)&&K()}),E.extent==="parent"||typeof E.extent=="object"&&"range"in E.extent&&E.extent.range==="parent"?so(()=>X).toBe(!0).then(K):K(),()=>E.hidden?null:ve("div",{ref:z,"data-id":E.id,class:["vue-flow__node",`vue-flow__node-${J.value===!1?"default":E.type||"default"}`,{[n.value]:S.value,dragging:oe==null?void 0:oe.value,draggable:S.value,selected:E.selected,selectable:T.value,parent:E.isParent},se.value],style:{visibility:X.value?"visible":"hidden",zIndex:E.computedPosition.z??G.value,transform:`translate(${E.computedPosition.x}px,${E.computedPosition.y}px)`,pointerEvents:A.value?"all":"none",...F.value},tabIndex:$.value?0:void 0,role:$.value?"group":void 0,"aria-describedby":_.value?void 0:`${Wr}-${t}`,"aria-label":E.ariaLabel,"aria-roledescription":"node",...E.domAttributes,onMouseenter:he,onMousemove:ie,onMouseleave:ce,onContextmenu:Q,onClick:v,onDblclick:ne,onKeydown:g},[ve(J.value===!1?d.value.default:J.value,{id:E.id,type:E.type,data:E.data,events:{...E.events,...M},selected:E.selected,resizing:E.resizing,dragging:oe.value,connectable:P.value,position:E.computedPosition,dimensions:E.dimensions,isValidTargetPos:E.isValidTargetPos,isValidSourcePos:E.isValidSourcePos,parent:E.parentNode,parentNodeId:E.parentNode,zIndex:E.computedPosition.z??G.value,targetPosition:E.targetPosition,sourcePosition:E.sourcePosition,label:E.label,dragHandle:E.dragHandle,onUpdateNodeInternals:ue})]);function K(){const p=E.computedPosition,{computedPosition:I,position:x}=zo(E,b.value?Dn(p,N.value):p,s.error,f.value,W.value);(E.computedPosition.x!==I.x||E.computedPosition.y!==I.y)&&(E.computedPosition={...E.computedPosition,...I}),(E.position.x!==x.x||E.position.y!==x.y)&&(E.position=x)}function ue(){z.value&&u([{id:e.id,nodeElement:z.value,forceUpdate:!0}])}function he(p){oe!=null&&oe.value||m.mouseEnter({event:p,node:E})}function ie(p){oe!=null&&oe.value||m.mouseMove({event:p,node:E})}function ce(p){oe!=null&&oe.value||m.mouseLeave({event:p,node:E})}function Q(p){return m.contextMenu({event:p,node:E})}function ne(p){return m.doubleClick({event:p,node:E})}function v(p){T.value&&(!o.value||!S.value||k.value>0)&&wo(E,r.value,l,a,i,!1,z.value),m.click({event:p,node:E})}function g(p){if(!(mo(p)||_.value))if(Kr.includes(p.key)&&T.value){const I=p.key==="Escape";wo(E,r.value,l,a,i,I,z.value)}else S.value&&E.selected&&vt[p.key]&&(p.preventDefault(),y.value=`Moved selected node ${p.key.replace("Arrow","").toLowerCase()}. New position, x: ${~~E.position.x}, y: ${~~E.position.y}`,O({x:vt[p.key].x,y:vt[p.key].y},p.shiftKey))}}}),sv=rv;function av(e={includeHiddenNodes:!1}){const{nodes:t}=we();return re(()=>{if(t.value.length===0)return!1;for(const n of t.value)if((e.includeHiddenNodes||!n.hidden)&&((n==null?void 0:n.handleBounds)===void 0||n.dimensions.width===0||n.dimensions.height===0))return!1;return!0})}const lv={class:"vue-flow__nodes vue-flow__container"},uv={name:"Nodes",compatConfig:{MODE:3}},cv=ye({...uv,setup(e){const{getNodes:t,updateNodeDimensions:n,emits:o}=we(),i=av(),r=xe();return ge(i,s=>{s&&Ye(()=>{o.nodesInitialized(t.value)})},{immediate:!0}),Qe(()=>{r.value=new ResizeObserver(s=>{const a=s.map(l=>({id:l.target.getAttribute("data-id"),nodeElement:l.target,forceUpdate:!0}));Ye(()=>n(a))})}),Yi(()=>{var s;return(s=r.value)==null?void 0:s.disconnect()}),(s,a)=>(fe(),pe("div",lv,[r.value?(fe(!0),pe(Be,{key:0},Eo(ee(t),(l,u,c,d)=>{const f=[l.id];if(d&&d.key===l.id&&Os(d,f))return d;const h=(fe(),mt(ee(sv),{id:l.id,key:l.id,"resize-observer":r.value},null,8,["id","resize-observer"]));return h.memo=f,h},a,0),128)):ze("",!0)]))}});function dv(){const{emits:e}=we();Qe(()=>{if(cs()){const t=document.querySelector(".vue-flow__pane");t&&window.getComputedStyle(t).zIndex!=="1"&&e.error(new Ee(be.MISSING_STYLES))}})}const fv=st("div",{class:"vue-flow__edge-labels"},null,-1),hv={name:"VueFlow",compatConfig:{MODE:3}},pv=ye({...hv,props:{id:{},modelValue:{},nodes:{},edges:{},edgeTypes:{},nodeTypes:{},connectionMode:{},connectionLineType:{},connectionLineStyle:{default:void 0},connectionLineOptions:{default:void 0},connectionRadius:{},isValidConnection:{type:[Function,null],default:void 0},deleteKeyCode:{default:void 0},selectionKeyCode:{type:[Boolean,null],default:void 0},multiSelectionKeyCode:{default:void 0},zoomActivationKeyCode:{default:void 0},panActivationKeyCode:{default:void 0},snapToGrid:{type:Boolean,default:void 0},snapGrid:{},onlyRenderVisibleElements:{type:Boolean,default:void 0},edgesUpdatable:{type:[Boolean,String],default:void 0},nodesDraggable:{type:Boolean,default:void 0},nodesConnectable:{type:Boolean,default:void 0},nodeDragThreshold:{},elementsSelectable:{type:Boolean,default:void 0},selectNodesOnDrag:{type:Boolean,default:void 0},panOnDrag:{type:[Boolean,Array],default:void 0},minZoom:{},maxZoom:{},defaultViewport:{},translateExtent:{},nodeExtent:{},defaultMarkerColor:{},zoomOnScroll:{type:Boolean,default:void 0},zoomOnPinch:{type:Boolean,default:void 0},panOnScroll:{type:Boolean,default:void 0},panOnScrollSpeed:{},panOnScrollMode:{},paneClickDistance:{},zoomOnDoubleClick:{type:Boolean,default:void 0},preventScrolling:{type:Boolean,default:void 0},selectionMode:{},edgeUpdaterRadius:{},fitViewOnInit:{type:Boolean,default:void 0},connectOnClick:{type:Boolean,default:void 0},applyDefault:{type:Boolean,default:void 0},autoConnect:{type:[Boolean,Function],default:void 0},noDragClassName:{},noWheelClassName:{},noPanClassName:{},defaultEdgeOptions:{},elevateEdgesOnSelect:{type:Boolean,default:void 0},elevateNodesOnSelect:{type:Boolean,default:void 0},disableKeyboardA11y:{type:Boolean,default:void 0},edgesFocusable:{type:Boolean,default:void 0},nodesFocusable:{type:Boolean,default:void 0},autoPanOnConnect:{type:Boolean,default:void 0},autoPanOnNodeDrag:{type:Boolean,default:void 0},autoPanSpeed:{}},emits:["nodesChange","edgesChange","nodesInitialized","paneReady","init","updateNodeInternals","error","connect","connectStart","connectEnd","clickConnectStart","clickConnectEnd","moveStart","move","moveEnd","selectionDragStart","selectionDrag","selectionDragStop","selectionContextMenu","selectionStart","selectionEnd","viewportChangeStart","viewportChange","viewportChangeEnd","paneScroll","paneClick","paneContextMenu","paneMouseEnter","paneMouseMove","paneMouseLeave","edgeUpdate","edgeContextMenu","edgeMouseEnter","edgeMouseMove","edgeMouseLeave","edgeDoubleClick","edgeClick","edgeUpdateStart","edgeUpdateEnd","nodeContextMenu","nodeMouseEnter","nodeMouseMove","nodeMouseLeave","nodeDoubleClick","nodeClick","nodeDragStart","nodeDrag","nodeDragStop","miniMapNodeClick","miniMapNodeDoubleClick","miniMapNodeMouseEnter","miniMapNodeMouseMove","miniMapNodeMouseLeave","update:modelValue","update:nodes","update:edges"],setup(e,{expose:t,emit:n}){const o=e,i=Cs(),r=Xn(o,"modelValue",n),s=Xn(o,"nodes",n),a=Xn(o,"edges",n),l=we(o),u=Xh({modelValue:r,nodes:s,edges:a},o,l);return Zh(n,l.hooks),Gg(),dv(),pt($n,i),ks(u),t(l),(c,d)=>(fe(),pe("div",{ref:ee(l).vueFlowRef,class:"vue-flow"},[He(Rg,null,{default:no(()=>[He(iv),fv,He(cv),rt(c.$slots,"zoom-pane")]),_:3}),rt(c.$slots,"default"),He(Yg)],512))}});export{po as M,Z as P,vv as T,Sn as _,pv as a,we as u}; diff --git a/internal/frontend/dist/assets/@vue-rv4FKaB-.js b/internal/frontend/dist/assets/@vue-rv4FKaB-.js deleted file mode 100644 index dd4f320..0000000 --- a/internal/frontend/dist/assets/@vue-rv4FKaB-.js +++ /dev/null @@ -1,29 +0,0 @@ -/** -* @vue/shared v3.5.13 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**//*! #__NO_SIDE_EFFECTS__ */function Qe(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const B=Object.freeze({}),Rt=Object.freeze([]),de=()=>{},Di=()=>!1,ln=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),En=e=>e.startsWith("onUpdate:"),re=Object.assign,jr=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Ni=Object.prototype.hasOwnProperty,W=(e,t)=>Ni.call(e,t),M=Array.isArray,gt=e=>Un(e)==="[object Map]",Qs=e=>Un(e)==="[object Set]",R=e=>typeof e=="function",Z=e=>typeof e=="string",Xe=e=>typeof e=="symbol",G=e=>e!==null&&typeof e=="object",Vr=e=>(G(e)||R(e))&&R(e.then)&&R(e.catch),Xs=Object.prototype.toString,Un=e=>Xs.call(e),Hr=e=>Un(e).slice(8,-1),Zs=e=>Un(e)==="[object Object]",Ur=e=>Z(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,Jt=Qe(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),ji=Qe("bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo"),kn=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},Vi=/-(\w)/g,pe=kn(e=>e.replace(Vi,(t,n)=>n?n.toUpperCase():"")),Hi=/\B([A-Z])/g,Be=kn(e=>e.replace(Hi,"-$1").toLowerCase()),xt=kn(e=>e.charAt(0).toUpperCase()+e.slice(1)),dt=kn(e=>e?`on${xt(e)}`:""),ve=(e,t)=>!Object.is(e,t),It=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:r,value:n})},br=e=>{const t=parseFloat(e);return isNaN(t)?e:t},Ui=e=>{const t=Z(e)?Number(e):NaN;return isNaN(t)?e:t};let os;const cn=()=>os||(os=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function kr(e){if(M(e)){const t={};for(let n=0;n{if(n){const r=n.split(Bi);r.length>1&&(t[r[0].trim()]=r[1].trim())}}),t}function Br(e){let t="";if(Z(e))t=e;else if(M(e))for(let n=0;n!!(e&&e.__v_isRef===!0),el=e=>Z(e)?e:e==null?"":M(e)||G(e)&&(e.toString===Xs||!R(e.toString))?to(e)?el(e.value):JSON.stringify(e,no,2):String(e),no=(e,t)=>to(t)?no(e,t.value):gt(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[r,s],o)=>(n[rr(r,o)+" =>"]=s,n),{})}:Qs(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>rr(n))}:Xe(t)?rr(t):G(t)&&!M(t)&&!Zs(t)?String(t):t,rr=(e,t="")=>{var n;return Xe(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/** -* @vue/reactivity v3.5.13 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/function $e(e,...t){console.warn(`[Vue warn] ${e}`,...t)}let _e;class ro{constructor(t=!1){this.detached=t,this._active=!0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.parent=_e,!t&&_e&&(this.index=(_e.scopes||(_e.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes)for(t=0,n=this.scopes.length;t0)return;if(zt){let t=zt;for(zt=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;Yt;){let t=Yt;for(Yt=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(r){e||(e=r)}t=n}}if(e)throw e}function lo(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function co(e){let t,n=e.depsTail,r=n;for(;r;){const s=r.prevDep;r.version===-1?(r===n&&(n=s),Gr(r),nl(r)):t=r,r.dep.activeLink=r.prevActiveLink,r.prevActiveLink=void 0,r=s}e.deps=t,e.depsTail=n}function yr(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(fo(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function fo(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===Zt))return;e.globalVersion=Zt;const t=e.dep;if(e.flags|=2,t.version>0&&!e.isSSR&&e.deps&&!yr(e)){e.flags&=-3;return}const n=J,r=Pe;J=e,Pe=!0;try{lo(e);const s=e.fn(e._value);(t.version===0||ve(s,e._value))&&(e._value=s,t.version++)}catch(s){throw t.version++,s}finally{J=n,Pe=r,co(e),e.flags&=-3}}function Gr(e,t=!1){const{dep:n,prevSub:r,nextSub:s}=e;if(r&&(r.nextSub=s,e.prevSub=void 0),s&&(s.prevSub=r,e.nextSub=void 0),n.subsHead===e&&(n.subsHead=s),n.subs===e&&(n.subs=r,!r&&n.computed)){n.computed.flags&=-5;for(let o=n.computed.deps;o;o=o.nextDep)Gr(o,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function nl(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let Pe=!0;const ao=[];function Ze(){ao.push(Pe),Pe=!1}function et(){const e=ao.pop();Pe=e===void 0?!0:e}function is(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=J;J=void 0;try{t()}finally{J=n}}}let Zt=0;class rl{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class Bn{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.subsHead=void 0}track(t){if(!J||!Pe||J===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==J)n=this.activeLink=new rl(J,this),J.deps?(n.prevDep=J.depsTail,J.depsTail.nextDep=n,J.depsTail=n):J.deps=J.depsTail=n,uo(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const r=n.nextDep;r.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=r),n.prevDep=J.depsTail,n.nextDep=void 0,J.depsTail.nextDep=n,J.depsTail=n,J.deps===n&&(J.deps=r)}return J.onTrack&&J.onTrack(re({effect:J},t)),n}trigger(t){this.version++,Zt++,this.notify(t)}notify(t){Kr();try{for(let n=this.subsHead;n;n=n.nextSub)n.sub.onTrigger&&!(n.sub.flags&8)&&n.sub.onTrigger(re({effect:n.sub},t));for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{Wr()}}}function uo(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let r=t.deps;r;r=r.nextDep)uo(r)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subsHead===void 0&&(e.dep.subsHead=e),e.dep.subs=e}}const $n=new WeakMap,mt=Symbol("Object iterate"),_r=Symbol("Map keys iterate"),en=Symbol("Array iterate");function fe(e,t,n){if(Pe&&J){let r=$n.get(e);r||$n.set(e,r=new Map);let s=r.get(n);s||(r.set(n,s=new Bn),s.map=r,s.key=n),s.track({target:e,type:t,key:n})}}function He(e,t,n,r,s,o){const i=$n.get(e);if(!i){Zt++;return}const l=c=>{c&&c.trigger({target:e,type:t,key:n,newValue:r,oldValue:s,oldTarget:o})};if(Kr(),t==="clear")i.forEach(l);else{const c=M(e),p=c&&Ur(n);if(c&&n==="length"){const u=Number(r);i.forEach((a,h)=>{(h==="length"||h===en||!Xe(h)&&h>=u)&&l(a)})}else switch((n!==void 0||i.has(void 0))&&l(i.get(n)),p&&l(i.get(en)),t){case"add":c?p&&l(i.get("length")):(l(i.get(mt)),gt(e)&&l(i.get(_r)));break;case"delete":c||(l(i.get(mt)),gt(e)&&l(i.get(_r)));break;case"set":gt(e)&&l(i.get(mt));break}}Wr()}function sl(e,t){const n=$n.get(e);return n&&n.get(t)}function Ot(e){const t=D(e);return t===e?t:(fe(t,"iterate",en),Te(e)?t:t.map(ue))}function Kn(e){return fe(e=D(e),"iterate",en),e}const ol={__proto__:null,[Symbol.iterator](){return or(this,Symbol.iterator,ue)},concat(...e){return Ot(this).concat(...e.map(t=>M(t)?Ot(t):t))},entries(){return or(this,"entries",e=>(e[1]=ue(e[1]),e))},every(e,t){return We(this,"every",e,t,void 0,arguments)},filter(e,t){return We(this,"filter",e,t,n=>n.map(ue),arguments)},find(e,t){return We(this,"find",e,t,ue,arguments)},findIndex(e,t){return We(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return We(this,"findLast",e,t,ue,arguments)},findLastIndex(e,t){return We(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return We(this,"forEach",e,t,void 0,arguments)},includes(...e){return ir(this,"includes",e)},indexOf(...e){return ir(this,"indexOf",e)},join(e){return Ot(this).join(e)},lastIndexOf(...e){return ir(this,"lastIndexOf",e)},map(e,t){return We(this,"map",e,t,void 0,arguments)},pop(){return kt(this,"pop")},push(...e){return kt(this,"push",e)},reduce(e,...t){return ls(this,"reduce",e,t)},reduceRight(e,...t){return ls(this,"reduceRight",e,t)},shift(){return kt(this,"shift")},some(e,t){return We(this,"some",e,t,void 0,arguments)},splice(...e){return kt(this,"splice",e)},toReversed(){return Ot(this).toReversed()},toSorted(e){return Ot(this).toSorted(e)},toSpliced(...e){return Ot(this).toSpliced(...e)},unshift(...e){return kt(this,"unshift",e)},values(){return or(this,"values",ue)}};function or(e,t,n){const r=Kn(e),s=r[t]();return r!==e&&!Te(e)&&(s._next=s.next,s.next=()=>{const o=s._next();return o.value&&(o.value=n(o.value)),o}),s}const il=Array.prototype;function We(e,t,n,r,s,o){const i=Kn(e),l=i!==e&&!Te(e),c=i[t];if(c!==il[t]){const a=c.apply(e,o);return l?ue(a):a}let p=n;i!==e&&(l?p=function(a,h){return n.call(this,ue(a),h,e)}:n.length>2&&(p=function(a,h){return n.call(this,a,h,e)}));const u=c.call(i,p,r);return l&&s?s(u):u}function ls(e,t,n,r){const s=Kn(e);let o=n;return s!==e&&(Te(e)?n.length>3&&(o=function(i,l,c){return n.call(this,i,l,c,e)}):o=function(i,l,c){return n.call(this,i,ue(l),c,e)}),s[t](o,...r)}function ir(e,t,n){const r=D(e);fe(r,"iterate",en);const s=r[t](...n);return(s===-1||s===!1)&&tn(n[0])?(n[0]=D(n[0]),r[t](...n)):s}function kt(e,t,n=[]){Ze(),Kr();const r=D(e)[t].apply(e,n);return Wr(),et(),r}const ll=Qe("__proto__,__v_isRef,__isVue"),po=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(Xe));function cl(e){Xe(e)||(e=String(e));const t=D(this);return fe(t,"has",e),t.hasOwnProperty(e)}class ho{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,r){if(n==="__v_skip")return t.__v_skip;const s=this._isReadonly,o=this._isShallow;if(n==="__v_isReactive")return!s;if(n==="__v_isReadonly")return s;if(n==="__v_isShallow")return o;if(n==="__v_raw")return r===(s?o?vo:_o:o?yo:bo).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(r)?t:void 0;const i=M(t);if(!s){let c;if(i&&(c=ol[n]))return c;if(n==="hasOwnProperty")return cl}const l=Reflect.get(t,n,oe(t)?t:r);return(Xe(n)?po.has(n):ll(n))||(s||fe(t,"get",n),o)?l:oe(l)?i&&Ur(n)?l:l.value:G(l)?s?wo(l):qr(l):l}}class go extends ho{constructor(t=!1){super(!1,t)}set(t,n,r,s){let o=t[n];if(!this._isShallow){const c=ze(o);if(!Te(r)&&!ze(r)&&(o=D(o),r=D(r)),!M(t)&&oe(o)&&!oe(r))return c?!1:(o.value=r,!0)}const i=M(t)&&Ur(n)?Number(n)e,gn=e=>Reflect.getPrototypeOf(e);function pl(e,t,n){return function(...r){const s=this.__v_raw,o=D(s),i=gt(o),l=e==="entries"||e===Symbol.iterator&&i,c=e==="keys"&&i,p=s[e](...r),u=n?vr:t?wr:ue;return!t&&fe(o,"iterate",c?_r:mt),{next(){const{value:a,done:h}=p.next();return h?{value:a,done:h}:{value:l?[u(a[0]),u(a[1])]:u(a),done:h}},[Symbol.iterator](){return this}}}}function mn(e){return function(...t){{const n=t[0]?`on key "${t[0]}" `:"";$e(`${xt(e)} operation ${n}failed: target is readonly.`,D(this))}return e==="delete"?!1:e==="clear"?void 0:this}}function hl(e,t){const n={get(s){const o=this.__v_raw,i=D(o),l=D(s);e||(ve(s,l)&&fe(i,"get",s),fe(i,"get",l));const{has:c}=gn(i),p=t?vr:e?wr:ue;if(c.call(i,s))return p(o.get(s));if(c.call(i,l))return p(o.get(l));o!==i&&o.get(s)},get size(){const s=this.__v_raw;return!e&&fe(D(s),"iterate",mt),Reflect.get(s,"size",s)},has(s){const o=this.__v_raw,i=D(o),l=D(s);return e||(ve(s,l)&&fe(i,"has",s),fe(i,"has",l)),s===l?o.has(s):o.has(s)||o.has(l)},forEach(s,o){const i=this,l=i.__v_raw,c=D(l),p=t?vr:e?wr:ue;return!e&&fe(c,"iterate",mt),l.forEach((u,a)=>s.call(o,p(u),p(a),i))}};return re(n,e?{add:mn("add"),set:mn("set"),delete:mn("delete"),clear:mn("clear")}:{add(s){!t&&!Te(s)&&!ze(s)&&(s=D(s));const o=D(this);return gn(o).has.call(o,s)||(o.add(s),He(o,"add",s,s)),this},set(s,o){!t&&!Te(o)&&!ze(o)&&(o=D(o));const i=D(this),{has:l,get:c}=gn(i);let p=l.call(i,s);p?cs(i,l,s):(s=D(s),p=l.call(i,s));const u=c.call(i,s);return i.set(s,o),p?ve(o,u)&&He(i,"set",s,o,u):He(i,"add",s,o),this},delete(s){const o=D(this),{has:i,get:l}=gn(o);let c=i.call(o,s);c?cs(o,i,s):(s=D(s),c=i.call(o,s));const p=l?l.call(o,s):void 0,u=o.delete(s);return c&&He(o,"delete",s,void 0,p),u},clear(){const s=D(this),o=s.size!==0,i=gt(s)?new Map(s):new Set(s),l=s.clear();return o&&He(s,"clear",void 0,void 0,i),l}}),["keys","values","entries",Symbol.iterator].forEach(s=>{n[s]=pl(s,e,t)}),n}function Wn(e,t){const n=hl(e,t);return(r,s,o)=>s==="__v_isReactive"?!e:s==="__v_isReadonly"?e:s==="__v_raw"?r:Reflect.get(W(n,s)&&s in r?n:r,s,o)}const gl={get:Wn(!1,!1)},ml={get:Wn(!1,!0)},bl={get:Wn(!0,!1)},yl={get:Wn(!0,!0)};function cs(e,t,n){const r=D(n);if(r!==n&&t.call(e,r)){const s=Hr(e);$e(`Reactive ${s} contains both the raw and reactive versions of the same object${s==="Map"?" as keys":""}, which can lead to inconsistencies. Avoid differentiating between the raw and reactive versions of an object and only use the reactive version if possible.`)}}const bo=new WeakMap,yo=new WeakMap,_o=new WeakMap,vo=new WeakMap;function _l(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function vl(e){return e.__v_skip||!Object.isExtensible(e)?0:_l(Hr(e))}function qr(e){return ze(e)?e:Gn(e,!1,fl,gl,bo)}function wl(e){return Gn(e,!1,ul,ml,yo)}function wo(e){return Gn(e,!0,al,bl,_o)}function ke(e){return Gn(e,!0,dl,yl,vo)}function Gn(e,t,n,r,s){if(!G(e))return $e(`value cannot be made ${t?"readonly":"reactive"}: ${String(e)}`),e;if(e.__v_raw&&!(t&&e.__v_isReactive))return e;const o=s.get(e);if(o)return o;const i=vl(e);if(i===0)return e;const l=new Proxy(e,i===2?r:n);return s.set(e,l),l}function bt(e){return ze(e)?bt(e.__v_raw):!!(e&&e.__v_isReactive)}function ze(e){return!!(e&&e.__v_isReadonly)}function Te(e){return!!(e&&e.__v_isShallow)}function tn(e){return e?!!e.__v_raw:!1}function D(e){const t=e&&e.__v_raw;return t?D(t):e}function xl(e){return!W(e,"__v_skip")&&Object.isExtensible(e)&&An(e,"__v_skip",!0),e}const ue=e=>G(e)?qr(e):e,wr=e=>G(e)?wo(e):e;function oe(e){return e?e.__v_isRef===!0:!1}function xr(e){return xo(e,!1)}function ma(e){return xo(e,!0)}function xo(e,t){return oe(e)?e:new Sl(e,t)}class Sl{constructor(t,n){this.dep=new Bn,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:D(t),this._value=n?t:ue(t),this.__v_isShallow=n}get value(){return this.dep.track({target:this,type:"get",key:"value"}),this._value}set value(t){const n=this._rawValue,r=this.__v_isShallow||Te(t)||ze(t);t=r?t:D(t),ve(t,n)&&(this._rawValue=t,this._value=r?t:ue(t),this.dep.trigger({target:this,type:"set",key:"value",newValue:t,oldValue:n}))}}function So(e){return oe(e)?e.value:e}function ba(e){return R(e)?e():So(e)}const Tl={get:(e,t,n)=>t==="__v_raw"?e:So(Reflect.get(e,t,n)),set:(e,t,n,r)=>{const s=e[t];return oe(s)&&!oe(n)?(s.value=n,!0):Reflect.set(e,t,n,r)}};function To(e){return bt(e)?e:new Proxy(e,Tl)}class Cl{constructor(t){this.__v_isRef=!0,this._value=void 0;const n=this.dep=new Bn,{get:r,set:s}=t(n.track.bind(n),n.trigger.bind(n));this._get=r,this._set=s}get value(){return this._value=this._get()}set value(t){this._set(t)}}function Ol(e){return new Cl(e)}function ya(e){tn(e)||$e("toRefs() expects a reactive object but received a plain one.");const t=M(e)?new Array(e.length):{};for(const n in e)t[n]=Co(e,n);return t}class El{constructor(t,n,r){this._object=t,this._key=n,this._defaultValue=r,this.__v_isRef=!0,this._value=void 0}get value(){const t=this._object[this._key];return this._value=t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return sl(D(this._object),this._key)}}class Al{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0,this._value=void 0}get value(){return this._value=this._getter()}}function _a(e,t,n){return oe(e)?e:R(e)?new Al(e):G(e)&&arguments.length>1?Co(e,t,n):xr(e)}function Co(e,t,n){const r=e[t];return oe(r)?r:new El(e,t,n)}class $l{constructor(t,n,r){this.fn=t,this.setter=n,this._value=void 0,this.dep=new Bn(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Zt-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=r}notify(){if(this.flags|=16,!(this.flags&8)&&J!==this)return io(this,!0),!0}get value(){const t=this.dep.track({target:this,type:"get",key:"value"});return fo(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter?this.setter(t):$e("Write operation failed: computed value is readonly")}}function Il(e,t,n=!1){let r,s;return R(e)?r=e:(r=e.get,s=e.set),new $l(r,s,n)}const bn={},In=new WeakMap;let pt;function Ml(e,t=!1,n=pt){if(n){let r=In.get(n);r||In.set(n,r=[]),r.push(e)}else t||$e("onWatcherCleanup() was called when there was no active watcher to associate with.")}function Pl(e,t,n=B){const{immediate:r,deep:s,once:o,scheduler:i,augmentJob:l,call:c}=n,p=$=>{(n.onWarn||$e)("Invalid watch source: ",$,"A watch source can only be a getter/effect function, a ref, a reactive object, or an array of these types.")},u=$=>s?$:Te($)||s===!1||s===0?Je($,1):Je($);let a,h,m,T,E=!1,ee=!1;if(oe(e)?(h=()=>e.value,E=Te(e)):bt(e)?(h=()=>u(e),E=!0):M(e)?(ee=!0,E=e.some($=>bt($)||Te($)),h=()=>e.map($=>{if(oe($))return $.value;if(bt($))return u($);if(R($))return c?c($,2):$();p($)})):R(e)?t?h=c?()=>c(e,2):e:h=()=>{if(m){Ze();try{m()}finally{et()}}const $=pt;pt=a;try{return c?c(e,3,[T]):e(T)}finally{pt=$}}:(h=de,p(e)),t&&s){const $=h,j=s===!0?1/0:s;h=()=>Je($(),j)}const N=tl(),Q=()=>{a.stop(),N&&N.active&&jr(N.effects,a)};if(o&&t){const $=t;t=(...j)=>{$(...j),Q()}}let V=ee?new Array(e.length).fill(bn):bn;const se=$=>{if(!(!(a.flags&1)||!a.dirty&&!$))if(t){const j=a.run();if(s||E||(ee?j.some((ne,q)=>ve(ne,V[q])):ve(j,V))){m&&m();const ne=pt;pt=a;try{const q=[j,V===bn?void 0:ee&&V[0]===bn?[]:V,T];c?c(t,3,q):t(...q),V=j}finally{pt=ne}}}else a.run()};return l&&l(se),a=new so(h),a.scheduler=i?()=>i(se,!1):se,T=$=>Ml($,!1,a),m=a.onStop=()=>{const $=In.get(a);if($){if(c)c($,4);else for(const j of $)j();In.delete(a)}},a.onTrack=n.onTrack,a.onTrigger=n.onTrigger,t?r?se(!0):V=a.run():i?i(se.bind(null,!0),!0):a.run(),Q.pause=a.pause.bind(a),Q.resume=a.resume.bind(a),Q.stop=Q,Q}function Je(e,t=1/0,n){if(t<=0||!G(e)||e.__v_skip||(n=n||new Set,n.has(e)))return e;if(n.add(e),t--,oe(e))Je(e.value,t,n);else if(M(e))for(let r=0;r{Je(r,t,n)});else if(Zs(e)){for(const r in e)Je(e[r],t,n);for(const r of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,r)&&Je(e[r],t,n)}return e}/** -* @vue/runtime-core v3.5.13 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/const yt=[];function vn(e){yt.push(e)}function wn(){yt.pop()}let lr=!1;function _(e,...t){if(lr)return;lr=!0,Ze();const n=yt.length?yt[yt.length-1].component:null,r=n&&n.appContext.config.warnHandler,s=Rl();if(r)Nt(r,n,11,[e+t.map(o=>{var i,l;return(l=(i=o.toString)==null?void 0:i.call(o))!=null?l:JSON.stringify(o)}).join(""),n&&n.proxy,s.map(({vnode:o})=>`at <${Zn(n,o.type)}>`).join(` -`),s]);else{const o=[`[Vue warn]: ${e}`,...t];s.length&&o.push(` -`,...Fl(s)),console.warn(...o)}et(),lr=!1}function Rl(){let e=yt[yt.length-1];if(!e)return[];const t=[];for(;e;){const n=t[0];n&&n.vnode===e?n.recurseCount++:t.push({vnode:e,recurseCount:0});const r=e.component&&e.component.parent;e=r&&r.vnode}return t}function Fl(e){const t=[];return e.forEach((n,r)=>{t.push(...r===0?[]:[` -`],...Ll(n))}),t}function Ll({vnode:e,recurseCount:t}){const n=t>0?`... (${t} recursive calls)`:"",r=e.component?e.component.parent==null:!1,s=` at <${Zn(e.component,e.type,r)}`,o=">"+n;return e.props?[s,...Dl(e.props),o]:[s+o]}function Dl(e){const t=[],n=Object.keys(e);return n.slice(0,3).forEach(r=>{t.push(...Oo(r,e[r]))}),n.length>3&&t.push(" ..."),t}function Oo(e,t,n){return Z(t)?(t=JSON.stringify(t),n?t:[`${e}=${t}`]):typeof t=="number"||typeof t=="boolean"||t==null?n?t:[`${e}=${t}`]:oe(t)?(t=Oo(e,D(t.value),!0),n?t:[`${e}=Ref<`,t,">"]):R(t)?[`${e}=fn${t.name?`<${t.name}>`:""}`]:(t=D(t),n?t:[`${e}=`,t])}function Nl(e,t){e!==void 0&&(typeof e!="number"?_(`${t} is not a valid number - got ${JSON.stringify(e)}.`):isNaN(e)&&_(`${t} is NaN - the duration expression might be incorrect.`))}const Jr={sp:"serverPrefetch hook",bc:"beforeCreate hook",c:"created hook",bm:"beforeMount hook",m:"mounted hook",bu:"beforeUpdate hook",u:"updated",bum:"beforeUnmount hook",um:"unmounted hook",a:"activated hook",da:"deactivated hook",ec:"errorCaptured hook",rtc:"renderTracked hook",rtg:"renderTriggered hook",0:"setup function",1:"render function",2:"watcher getter",3:"watcher callback",4:"watcher cleanup function",5:"native event handler",6:"component event handler",7:"vnode hook",8:"directive hook",9:"transition hook",10:"app errorHandler",11:"app warnHandler",12:"ref function",13:"async component loader",14:"scheduler flush",15:"component update",16:"app unmount cleanup function"};function Nt(e,t,n,r){try{return r?e(...r):e()}catch(s){fn(s,t,n)}}function Re(e,t,n,r){if(R(e)){const s=Nt(e,t,n,r);return s&&Vr(s)&&s.catch(o=>{fn(o,t,n)}),s}if(M(e)){const s=[];for(let o=0;o>>1,s=we[r],o=nn(s);o=nn(n)?we.push(e):we.splice(Ul(t),0,e),e.flags|=1,Ao()}}function Ao(){Mn||(Mn=Eo.then(Mo))}function $o(e){M(e)?Ft.push(...e):st&&e.id===-1?st.splice(Mt+1,0,e):e.flags&1||(Ft.push(e),e.flags|=1),Ao()}function fs(e,t,n=Ve+1){for(t=t||new Map;nnn(n)-nn(r));if(Ft.length=0,st){st.push(...t);return}for(st=t,e=e||new Map,Mt=0;Mte.id==null?e.flags&2?-1:1/0:e.id;function Mo(e){e=e||new Map;const t=n=>Yr(e,n);try{for(Ve=0;VeVl){const r=t.i,s=r&&ts(r.type);return fn(`Maximum recursive updates exceeded${s?` in component <${s}>`:""}. This means you have a reactive effect that is mutating its own dependencies and thus recursively triggering itself. Possible sources include component template, render function, updated hook or watcher source function.`,null,10),!0}return e.set(t,n+1),!1}let Me=!1;const xn=new Map;cn().__VUE_HMR_RUNTIME__={createRecord:cr(Po),rerender:cr(Kl),reload:cr(Wl)};const St=new Map;function kl(e){const t=e.type.__hmrId;let n=St.get(t);n||(Po(t,e.type),n=St.get(t)),n.instances.add(e)}function Bl(e){St.get(e.type.__hmrId).instances.delete(e)}function Po(e,t){return St.has(e)?!1:(St.set(e,{initialDef:Pn(t),instances:new Set}),!0)}function Pn(e){return $i(e)?e.__vccOpts:e}function Kl(e,t){const n=St.get(e);n&&(n.initialDef.render=t,[...n.instances].forEach(r=>{t&&(r.render=t,Pn(r.type).render=t),r.renderCache=[],Me=!0,r.update(),Me=!1}))}function Wl(e,t){const n=St.get(e);if(!n)return;t=Pn(t),as(n.initialDef,t);const r=[...n.instances];for(let s=0;s{Me=!0,o.parent.update(),Me=!1,l.delete(o)}):o.appContext.reload?o.appContext.reload():typeof window<"u"?window.location.reload():console.warn("[HMR] Root or manually mounted instance modified. Full reload required."),o.root.ce&&o!==o.root&&o.root.ce._removeChildStyle(i)}$o(()=>{xn.clear()})}function as(e,t){re(e,t);for(const n in e)n!=="__file"&&!(n in t)&&delete e[n]}function cr(e){return(t,n)=>{try{return e(t,n)}catch(r){console.error(r),console.warn("[HMR] Something went wrong during Vue component hot-reload. Full reload required.")}}}let Ue,Gt=[],Sr=!1;function an(e,...t){Ue?Ue.emit(e,...t):Sr||Gt.push({event:e,args:t})}function Ro(e,t){var n,r;Ue=e,Ue?(Ue.enabled=!0,Gt.forEach(({event:s,args:o})=>Ue.emit(s,...o)),Gt=[]):typeof window<"u"&&window.HTMLElement&&!((r=(n=window.navigator)==null?void 0:n.userAgent)!=null&&r.includes("jsdom"))?((t.__VUE_DEVTOOLS_HOOK_REPLAY__=t.__VUE_DEVTOOLS_HOOK_REPLAY__||[]).push(o=>{Ro(o,t)}),setTimeout(()=>{Ue||(t.__VUE_DEVTOOLS_HOOK_REPLAY__=null,Sr=!0,Gt=[])},3e3)):(Sr=!0,Gt=[])}function Gl(e,t){an("app:init",e,t,{Fragment:Oe,Text:dn,Comment:ie,Static:Qt})}function ql(e){an("app:unmount",e)}const Jl=zr("component:added"),Fo=zr("component:updated"),Yl=zr("component:removed"),zl=e=>{Ue&&typeof Ue.cleanupBuffer=="function"&&!Ue.cleanupBuffer(e)&&Yl(e)};/*! #__NO_SIDE_EFFECTS__ */function zr(e){return t=>{an(e,t.appContext.app,t.uid,t.parent?t.parent.uid:void 0,t)}}const Ql=Lo("perf:start"),Xl=Lo("perf:end");function Lo(e){return(t,n,r)=>{an(e,t.appContext.app,t.uid,t,n,r)}}function Zl(e,t,n){an("component:emit",e.appContext.app,e,t,n)}let le=null,Do=null;function Rn(e){const t=le;return le=e,Do=e&&e.type.__scopeId||null,t}function ec(e,t=le,n){if(!t||e._n)return e;const r=(...s)=>{r._d&&Es(-1);const o=Rn(t);let i;try{i=e(...s)}finally{Rn(o),r._d&&Es(1)}return Fo(t),i};return r._n=!0,r._c=!0,r._d=!0,r}function No(e){ji(e)&&_("Do not use built-in directive ids as custom directive id: "+e)}function va(e,t){if(le===null)return _("withDirectives can only be used inside render functions."),e;const n=Xn(le),r=e.dirs||(e.dirs=[]);for(let s=0;se.__isTeleport,_t=e=>e&&(e.disabled||e.disabled===""),us=e=>e&&(e.defer||e.defer===""),ds=e=>typeof SVGElement<"u"&&e instanceof SVGElement,ps=e=>typeof MathMLElement=="function"&&e instanceof MathMLElement,Tr=(e,t)=>{const n=e&&e.to;if(Z(n))if(t){const r=t(n);return!r&&!_t(e)&&_(`Failed to locate Teleport target with selector "${n}". Note the target element must exist before the component is mounted - i.e. the target cannot be rendered by the component itself, and ideally should be outside of the entire Vue component tree.`),r}else return _("Current renderer does not support string target for Teleports. (missing querySelector renderer option)"),null;else return!n&&!_t(e)&&_(`Invalid Teleport target: ${n}`),n},Ho={name:"Teleport",__isTeleport:!0,process(e,t,n,r,s,o,i,l,c,p){const{mc:u,pc:a,pbc:h,o:{insert:m,querySelector:T,createText:E,createComment:ee}}=p,N=_t(t.props);let{shapeFlag:Q,children:V,dynamicChildren:se}=t;if(Me&&(c=!1,se=null),e==null){const $=t.el=ee("teleport start"),j=t.anchor=ee("teleport end");m($,n,r),m(j,n,r);const ne=(I,H)=>{Q&16&&(s&&s.isCE&&(s.ce._teleportTarget=I),u(V,I,H,s,o,i,l,c))},q=()=>{const I=t.target=Tr(t.props,T),H=Uo(I,t,E,m);I?(i!=="svg"&&ds(I)?i="svg":i!=="mathml"&&ps(I)&&(i="mathml"),N||(ne(I,H),Sn(t,!1))):N||_("Invalid Teleport target on mount:",I,`(${typeof I})`)};N&&(ne(n,j),Sn(t,!0)),us(t.props)?ye(()=>{q(),t.el.__isMounted=!0},o):q()}else{if(us(t.props)&&!e.el.__isMounted){ye(()=>{Ho.process(e,t,n,r,s,o,i,l,c,p),delete e.el.__isMounted},o);return}t.el=e.el,t.targetStart=e.targetStart;const $=t.anchor=e.anchor,j=t.target=e.target,ne=t.targetAnchor=e.targetAnchor,q=_t(e.props),I=q?n:j,H=q?$:ne;if(i==="svg"||ds(j)?i="svg":(i==="mathml"||ps(j))&&(i="mathml"),se?(h(e.dynamicChildren,se,I,s,o,i,l),Nn(e,t,!0)):c||a(e,t,I,H,s,o,i,l,!1),N)q?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):yn(t,n,$,p,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const Y=t.target=Tr(t.props,T);Y?yn(t,Y,null,p,0):_("Invalid Teleport target on update:",j,`(${typeof j})`)}else q&&yn(t,j,ne,p,1);Sn(t,N)}},remove(e,t,n,{um:r,o:{remove:s}},o){const{shapeFlag:i,children:l,anchor:c,targetStart:p,targetAnchor:u,target:a,props:h}=e;if(a&&(s(p),s(u)),o&&s(c),i&16){const m=o||!_t(h);for(let T=0;T{e.isMounted=!0}),zo(()=>{e.isUnmounting=!0}),e}const Ae=[Function,Array],ko={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Ae,onEnter:Ae,onAfterEnter:Ae,onEnterCancelled:Ae,onBeforeLeave:Ae,onLeave:Ae,onAfterLeave:Ae,onLeaveCancelled:Ae,onBeforeAppear:Ae,onAppear:Ae,onAfterAppear:Ae,onAppearCancelled:Ae},Bo=e=>{const t=e.subTree;return t.component?Bo(t.component):t},rc={name:"BaseTransition",props:ko,setup(e,{slots:t}){const n=Qn(),r=nc();return()=>{const s=t.default&&Go(t.default(),!0);if(!s||!s.length)return;const o=Ko(s),i=D(e),{mode:l}=i;if(l&&l!=="in-out"&&l!=="out-in"&&l!=="default"&&_(`invalid mode: ${l}`),r.isLeaving)return fr(o);const c=hs(o);if(!c)return fr(o);let p=Cr(c,i,r,n,a=>p=a);c.type!==ie&&rn(c,p);let u=n.subTree&&hs(n.subTree);if(u&&u.type!==ie&&!ht(c,u)&&Bo(n).type!==ie){let a=Cr(u,i,r,n);if(rn(u,a),l==="out-in"&&c.type!==ie)return r.isLeaving=!0,a.afterLeave=()=>{r.isLeaving=!1,n.job.flags&8||n.update(),delete a.afterLeave,u=void 0},fr(o);l==="in-out"&&c.type!==ie?a.delayLeave=(h,m,T)=>{const E=Wo(r,u);E[String(u.key)]=u,h[ot]=()=>{m(),h[ot]=void 0,delete p.delayedLeave,u=void 0},p.delayedLeave=()=>{T(),delete p.delayedLeave,u=void 0}}:u=void 0}else u&&(u=void 0);return o}}};function Ko(e){let t=e[0];if(e.length>1){let n=!1;for(const r of e)if(r.type!==ie){if(n){_(" can only be used on a single element or component. Use for lists.");break}t=r,n=!0}}return t}const sc=rc;function Wo(e,t){const{leavingVNodes:n}=e;let r=n.get(t.type);return r||(r=Object.create(null),n.set(t.type,r)),r}function Cr(e,t,n,r,s){const{appear:o,mode:i,persisted:l=!1,onBeforeEnter:c,onEnter:p,onAfterEnter:u,onEnterCancelled:a,onBeforeLeave:h,onLeave:m,onAfterLeave:T,onLeaveCancelled:E,onBeforeAppear:ee,onAppear:N,onAfterAppear:Q,onAppearCancelled:V}=t,se=String(e.key),$=Wo(n,e),j=(I,H)=>{I&&Re(I,r,9,H)},ne=(I,H)=>{const Y=H[1];j(I,H),M(I)?I.every(A=>A.length<=1)&&Y():I.length<=1&&Y()},q={mode:i,persisted:l,beforeEnter(I){let H=c;if(!n.isMounted)if(o)H=ee||c;else return;I[ot]&&I[ot](!0);const Y=$[se];Y&&ht(e,Y)&&Y.el[ot]&&Y.el[ot](),j(H,[I])},enter(I){let H=p,Y=u,A=a;if(!n.isMounted)if(o)H=N||p,Y=Q||u,A=V||a;else return;let te=!1;const he=I[_n]=ge=>{te||(te=!0,ge?j(A,[I]):j(Y,[I]),q.delayedLeave&&q.delayedLeave(),I[_n]=void 0)};H?ne(H,[I,he]):he()},leave(I,H){const Y=String(e.key);if(I[_n]&&I[_n](!0),n.isUnmounting)return H();j(h,[I]);let A=!1;const te=I[ot]=he=>{A||(A=!0,H(),he?j(E,[I]):j(T,[I]),I[ot]=void 0,$[Y]===e&&delete $[Y])};$[Y]=e,m?ne(m,[I,te]):te()},clone(I){const H=Cr(I,t,n,r,s);return s&&s(H),H}};return q}function fr(e){if(un(e))return e=Ke(e),e.children=null,e}function hs(e){if(!un(e))return Vo(e.type)&&e.children?Ko(e.children):e;if(e.component)return e.component.subTree;const{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&R(n.default))return n.default()}}function rn(e,t){e.shapeFlag&6&&e.component?(e.transition=t,rn(e.component.subTree,t)):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Go(e,t=!1,n){let r=[],s=0;for(let o=0;o1)for(let o=0;oFn(T,t&&(M(t)?t[E]:t),n,r,s));return}if(Lt(r)&&!s){r.shapeFlag&512&&r.type.__asyncResolved&&r.component.subTree.component&&Fn(e,t,n,r.component.subTree);return}const o=r.shapeFlag&4?Xn(r.component):r.el,i=s?null:o,{i:l,r:c}=e;if(!l){_("Missing ref owner context. ref cannot be used on hoisted vnodes. A vnode with ref must be created inside the render function.");return}const p=t&&t.r,u=l.refs===B?l.refs={}:l.refs,a=l.setupState,h=D(a),m=a===B?()=>!1:T=>(W(h,T)&&!oe(h[T])&&_(`Template ref "${T}" used on a non-ref value. It will not work in the production build.`),oc.has(h[T])?!1:W(h,T));if(p!=null&&p!==c&&(Z(p)?(u[p]=null,m(p)&&(a[p]=null)):oe(p)&&(p.value=null)),R(c))Nt(c,l,12,[i,u]);else{const T=Z(c),E=oe(c);if(T||E){const ee=()=>{if(e.f){const N=T?m(c)?a[c]:u[c]:c.value;s?M(N)&&jr(N,o):M(N)?N.includes(o)||N.push(o):T?(u[c]=[o],m(c)&&(a[c]=u[c])):(c.value=[o],e.k&&(u[e.k]=c.value))}else T?(u[c]=i,m(c)&&(a[c]=i)):E?(c.value=i,e.k&&(u[e.k]=i)):_("Invalid template ref type:",c,`(${typeof c})`)};i?(ee.id=-1,ye(ee,n)):ee()}else _("Invalid template ref type:",c,`(${typeof c})`)}}cn().requestIdleCallback;cn().cancelIdleCallback;const Lt=e=>!!e.type.__asyncLoader,un=e=>e.type.__isKeepAlive;function ic(e,t){Jo(e,"a",t)}function lc(e,t){Jo(e,"da",t)}function Jo(e,t,n=ce){const r=e.__wdc||(e.__wdc=()=>{let s=n;for(;s;){if(s.isDeactivated)return;s=s.parent}return e()});if(Jn(t,r,n),n){let s=n.parent;for(;s&&s.parent;)un(s.parent.vnode)&&cc(r,t,n,s),s=s.parent}}function cc(e,t,n,r){const s=Jn(t,e,r,!0);Qo(()=>{jr(r[t],s)},n)}function Jn(e,t,n=ce,r=!1){if(n){const s=n[e]||(n[e]=[]),o=t.__weh||(t.__weh=(...i)=>{Ze();const l=pn(n),c=Re(t,n,e,i);return l(),et(),c});return r?s.unshift(o):s.push(o),o}else{const s=dt(Jr[e].replace(/ hook$/,""));_(`${s} is called when there is no active component instance to be associated with. Lifecycle injection APIs can only be used during execution of setup(). If you are using async setup(), make sure to register lifecycle hooks before the first await statement.`)}}const tt=e=>(t,n=ce)=>{(!sn||e==="sp")&&Jn(e,(...r)=>t(...r),n)},fc=tt("bm"),Yo=tt("m"),ac=tt("bu"),uc=tt("u"),zo=tt("bum"),Qo=tt("um"),dc=tt("sp"),pc=tt("rtg"),hc=tt("rtc");function gc(e,t=ce){Jn("ec",e,t)}const Xo="components";function Sa(e,t){return ei(Xo,e,!0,t)||e}const Zo=Symbol.for("v-ndc");function Ta(e){return Z(e)?ei(Xo,e,!1)||e:e||Zo}function ei(e,t,n=!0,r=!1){const s=le||ce;if(s){const o=s.type;{const l=ts(o,!1);if(l&&(l===t||l===pe(t)||l===xt(pe(t))))return o}const i=gs(s[e]||o[e],t)||gs(s.appContext[e],t);return!i&&r?o:(n&&!i&&_(`Failed to resolve ${e.slice(0,-1)}: ${t} -If this is a native custom element, make sure to exclude it from component resolution via compilerOptions.isCustomElement.`),i)}else _(`resolve${xt(e.slice(0,-1))} can only be used in render() or setup().`)}function gs(e,t){return e&&(e[t]||e[pe(t)]||e[xt(pe(t))])}function Ca(e,t,n,r){let s;const o=n&&n[r],i=M(e);if(i||Z(e)){const l=i&&bt(e);let c=!1;l&&(c=!Te(e),e=Kn(e)),s=new Array(e.length);for(let p=0,u=e.length;pt(l,c,void 0,o&&o[c]));else{const l=Object.keys(e);s=new Array(l.length);for(let c=0,p=l.length;c1&&(_("SSR-optimized slot function detected in a non-SSR-optimized render function. You need to mark this component with $dynamic-slots in the parent template."),o=()=>[]),o&&o._c&&(o._d=!1),Pr();const i=o&&ti(o(n)),l=n.key||i&&i.key,c=Rr(Oe,{key:(l&&!Xe(l)?l:`_${t}`)+(!i&&r?"_fb":"")},i||(r?r():[]),i&&e._===1?64:-2);return!s&&c.scopeId&&(c.slotScopeIds=[c.scopeId+"-s"]),o&&o._c&&(o._d=!0),c}function ti(e){return e.some(t=>Tt(t)?!(t.type===ie||t.type===Oe&&!ti(t.children)):!0)?e:null}const Or=e=>e?Oi(e)?Xn(e):Or(e.parent):null,vt=re(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>ke(e.props),$attrs:e=>ke(e.attrs),$slots:e=>ke(e.slots),$refs:e=>ke(e.refs),$parent:e=>Or(e.parent),$root:e=>Or(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>oi(e),$forceUpdate:e=>e.f||(e.f=()=>{qn(e.update)}),$nextTick:e=>e.n||(e.n=Hl.bind(e.proxy)),$watch:e=>Yc.bind(e)}),Qr=e=>e==="_"||e==="$",ar=(e,t)=>e!==B&&!e.__isScriptSetup&&W(e,t),ni={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:r,data:s,props:o,accessCache:i,type:l,appContext:c}=e;if(t==="__isVue")return!0;let p;if(t[0]!=="$"){const m=i[t];if(m!==void 0)switch(m){case 1:return r[t];case 2:return s[t];case 4:return n[t];case 3:return o[t]}else{if(ar(r,t))return i[t]=1,r[t];if(s!==B&&W(s,t))return i[t]=2,s[t];if((p=e.propsOptions[0])&&W(p,t))return i[t]=3,o[t];if(n!==B&&W(n,t))return i[t]=4,n[t];Er&&(i[t]=0)}}const u=vt[t];let a,h;if(u)return t==="$attrs"?(fe(e.attrs,"get",""),jn()):t==="$slots"&&fe(e,"get",t),u(e);if((a=l.__cssModules)&&(a=a[t]))return a;if(n!==B&&W(n,t))return i[t]=4,n[t];if(h=c.config.globalProperties,W(h,t))return h[t];le&&(!Z(t)||t.indexOf("__v")!==0)&&(s!==B&&Qr(t[0])&&W(s,t)?_(`Property ${JSON.stringify(t)} must be accessed via $data because it starts with a reserved character ("$" or "_") and is not proxied on the render context.`):e===le&&_(`Property ${JSON.stringify(t)} was accessed during render but is not defined on instance.`))},set({_:e},t,n){const{data:r,setupState:s,ctx:o}=e;return ar(s,t)?(s[t]=n,!0):s.__isScriptSetup&&W(s,t)?(_(`Cannot mutate