diff --git a/app/src/__tests__/page-conventions.test.ts b/app/src/__tests__/page-conventions.test.ts index e9f56b1f..2561ed97 100644 --- a/app/src/__tests__/page-conventions.test.ts +++ b/app/src/__tests__/page-conventions.test.ts @@ -11,9 +11,13 @@ async function pageSources(): Promise> { const fsName = 'node:fs'; const fs = (await import(/* @vite-ignore */ fsName)) as { readFileSync(path: string, encoding: 'utf8'): string; - readdirSync(path: string): string[]; + readdirSync(path: string, options: { recursive: true }): string[]; }; - const files = fs.readdirSync(PAGES).filter((file) => file.endsWith('.ts')); + // Recursive, so a page split into a folder (pages/network/) is still checked. + const files = fs + .readdirSync(PAGES, { recursive: true }) + .map((file) => file.replaceAll('\\', '/')) + .filter((file) => file.endsWith('.ts')); return new Map(files.map((file) => [file, fs.readFileSync(`${PAGES}${file}`, 'utf8')])); } @@ -125,7 +129,8 @@ describe('pages with a keyboard list use the shared roving list', () => { const lists = { 'capacitor-inspector.ts': '[data-cap-call]', 'pipes-inspector.ts': '[data-pipe-row]', - 'network-inspector.ts': '', + 'network/call-timeline.ts': '', + 'network/ssr-requests.ts': '', 'query-inspector.ts': '', 'signal-inspector.ts': '', 'store-inspector.ts': '', diff --git a/app/src/pages/network-inspector.ts b/app/src/pages/network-inspector.ts index d7c110c1..d7038aa9 100644 --- a/app/src/pages/network-inspector.ts +++ b/app/src/pages/network-inspector.ts @@ -1,356 +1,47 @@ -import { - Component, - DestroyRef, - ElementRef, - Injector, - afterNextRender, - computed, - effect, - inject, - input, - linkedSignal, - signal, - untracked, - viewChild, -} from '@angular/core'; -import { JsonPipe } from '@angular/common'; +import { Component, effect, inject, input } from '@angular/core'; import type { DevframeRpcClient } from 'devframe/client'; -import { hostPageId } from '../page-id'; -import { rpcCall as call } from '../rpc'; -import { actionAllowed, actionBlockedMessage, panelConfig } from '../devtools-config'; -import { - CACHE_SKIP_TEXT, - HTTP_RULE_STATUSES, - isHttpRuleStatus, - type CacheSkip, -} from '@pangular-inspector/devtools/internal/config'; -import { prettyJson } from '../format'; -import { LimitNote } from '../ui/limit-note'; import { AppState } from '../ui/app-state'; -import { LiveControls, LiveFeed, followNewest } from '../ui/live-feed'; -import { SortHeader, sortRows, type SortState } from '../ui/sort-header'; -import { RovingList } from '../ui/roving-list'; -import { Select, type SelectOption } from '../ui/select'; -import { VirtualWindow } from '../ui/virtual-window'; -import { HttpHeadersView } from './http-headers'; -import { NetworkWaterfall } from './network-waterfall'; -import { SearchField } from '../ui/search-field'; -import { CallCopy } from './network/call-copy'; -import { CallOriginTag } from './network/call-origin'; +import { Select } from '../ui/select'; +import { rememberSelection } from '../view-memory'; +import { CallTimeline } from './network/call-timeline'; +import { FaultRules } from './network/fault-rules'; import { HarExport } from './network/har-export'; import { HttpLint } from './network/http-lint'; -import { PayloadInsights } from './network/payload-insights'; -import { RuleMatchCount } from './network/rule-match-count'; -import { RulePresets } from './network/rule-presets'; -import { presetRules } from '@pangular-inspector/devtools/internal/http-data'; -import { rememberSelection } from '../view-memory'; -import { RedactionCount } from '../ui/redaction-count'; - -type HttpSide = 'client' | 'server'; - -interface HttpRule { - id: string; - pattern: string; - method?: string; - enabled: boolean; - target: HttpSide | 'both'; - status?: number; - delayMs?: number; - body?: string; - chance?: number; -} - -interface HttpCall { - id: string; - url: string; - method: string; - status: number; - durationMs: number; - side: HttpSide; - cacheHit: boolean; - faulted: boolean; - mocked?: boolean; - delayMs?: number; - cancelled?: boolean; - ruleId?: string; - rulePattern?: string; - pageUrl?: string; - requestId?: string; - /** The Angular API that likely started the call, from a stack heuristic. */ - origin?: 'httpResource' | 'resource' | 'defer'; - cacheStored?: boolean; - cacheSkip?: CacheSkip; - at: number; - error?: string; - preview?: string; - requestHeaders?: Record; - responseHeaders?: Record; - /** Made with the page's own `fetch()`, not through `HttpClient`. */ - nativeFetch?: true; -} - -interface SsrNavigation { - url: string; - finalUrl?: string; - outcome: string; - reason?: string; - durationMs?: number; - guards?: { names: string[]; passed?: boolean; ms?: number }; - resolvers?: { names: string[]; ms?: number }; -} - -interface SsrRequest { - id: string; - method: string; - url: string; - status: number; - at: number; - durationMs: number; - renderMs: number; - bytes: number; - renderMode: 'server' | 'prerender' | 'client' | 'redirect' | 'not-rendered' | 'unknown'; - fetches: number; - fetchMs: number; - headers: Record; - navigations?: SsrNavigation[]; - overrides?: { id: string; kind: SsrOverrideKind; applied: boolean; note?: string }[]; - compressedBeforeTrace?: boolean; - aborted?: boolean; -} - -type SsrOverrideKind = 'render-error' | 'client-render' | 'state-edit'; - -interface SsrOverride { - id: string; - kind: SsrOverrideKind; - pattern: string; - enabled: boolean; - message?: string; - key?: string; - value?: string; -} - -interface OverrideDraft { - kind: SsrOverrideKind; - pattern: string; - message: string; - key: string; - value: string; -} - -const EMPTY_OVERRIDE: OverrideDraft = { - kind: 'render-error', - pattern: '', - message: '', - key: '', - value: '', -}; - -const OVERRIDE_LABEL: Record = { - 'render-error': 'Render error', - 'client-render': 'Client render', - 'state-edit': 'TransferState edit', -}; - -const RENDER_MODE_LABEL: Record = { - server: 'Server', - prerender: 'Prerender', - client: 'Client', - redirect: 'Redirect', - 'not-rendered': 'Not rendered', - unknown: 'Unknown', -}; - -interface PayloadEntry { - key: string; - http?: { url?: string; status?: number; statusText?: string; responseType?: string }; - source?: 'http' | 'analog' | 'hydration'; - fn?: { id: string; name?: string; file?: string }; - size: number; - value: unknown; -} - -interface HydrationMismatch { - component: string; - /** `component` is a class name (`ProductCard`), not a node name (`app-card`). */ - isClass?: boolean; - expected?: string; - actual?: string; -} - -interface HydrationStats { - enabled: boolean; - hydratedComponents?: number; - hydratedNodes?: number; - componentsSkippedHydration?: number; - deferBlocksWithIncrementalHydration?: number; - nodes?: { hydrated: number; skipped: number; mismatched: number }; - mismatches?: HydrationMismatch[]; - skipHydrationHosts: string[]; - warnings: string[]; - warningsCaptured?: boolean; - stableMs?: number; -} - -interface HttpPayload { - found: boolean; - size: number; - entries: PayloadEntry[]; - error?: string; - /** Set when the payload came from Refetch, not from the HTML the tab was served with. */ - refetchedAt?: number; -} - -interface HttpPage { - pageId: string; - url: string; - initialUrl?: string; - title: string; - hydration: HydrationStats | null; - calls: HttpCall[]; - dropped?: number; - ssrRequestId?: string; - firstSeenAt?: number; - reportedAt: number; -} - -interface HttpState { - serverCalls: HttpCall[]; - serverDropped?: number; - requests?: SsrRequest[]; - pages: HttpPage[]; - rules: HttpRule[]; - ssrOverrides?: SsrOverride[]; -} - -interface RuleDraft { - pattern: string; - method: string; - target: HttpRule['target']; - status: string; - delayMs: string; - body: string; - chance: string; -} - -const EMPTY_DRAFT: RuleDraft = { - pattern: '', - method: '', - target: 'both', - status: '', - delayMs: '', - body: '', - chance: '', -}; - -/** A new fault rule id, unique enough for one rule list. */ -function newRuleId(): string { - return `r${Date.now().toString(36)}${Math.random().toString(36).slice(2, 6)}`; -} - -/** The chance field as a whole percent, null when it is not one from 1 to 99, undefined when empty. */ -function chanceOf(text: string): number | null | undefined { - if (!text.trim()) return undefined; - const chance = Number(text); - return Number.isInteger(chance) && chance >= 1 && chance <= 99 ? chance : null; -} - -function pathOf(url: string): string { - try { - const parsed = new URL(url, 'http://x'); - return parsed.pathname + parsed.search; - } catch { - return url; - } -} - -const REDACTED_IN_URL = /\[redacted\]|%5Bredacted%5D/gi; - -/** - * A rule pattern for a recorded call: its path and query, without the origin, so it - * matches the relative client URL and the absolute SSR URL. A relative URL stays as - * recorded, since `api/x` never contains `/api/x`. A redacted value becomes `*`, - * because the real request carries the secret. - */ -function mockPattern(url: string): string { - const absolute = /^([a-z][a-z\d+.-]*:|\/\/)/i.test(url); - return (absolute ? pathOf(url) : url).replace(REDACTED_IN_URL, '*'); -} - -/** The preview as a mock body, when it is complete JSON (the rule form takes JSON only). */ -function jsonBody(preview: string): string | null { - const pretty = prettyJson(preview); - if (pretty !== null) return pretty; - try { - JSON.parse(preview); - return preview.trim(); - } catch { - return null; - } -} - -const STANDARD_METHODS = ['GET', 'POST', 'PUT', 'PATCH', 'DELETE']; - -/** - * The path of a page, as an SSR override pattern. The query is left out because the panel only - * has a redacted copy of it, which would not match the real request. - */ -function pagePath(url: string): string { - try { - return new URL(url, 'http://x').pathname; - } catch { - return ''; - } -} +import { + mocksOnServer, + type HttpCall, + type OverrideDraft, + type PayloadEntry, + type RuleDraft, +} from './network/http-model'; +import { HydrationStats } from './network/hydration-stats'; +import { NetworkState } from './network/network-state'; +import { OverrideState } from './network/override-state'; +import { RuleState } from './network/rule-state'; +import { SsrOverrides } from './network/ssr-overrides'; +import { SsrRequests } from './network/ssr-requests'; +import { TransferPayload } from './network/transfer-payload'; /** - * The page path as a prefilled override pattern. Patterns match anywhere in the URL, so the site - * root (`/`) would match every page; it is left empty for the user to fill in. + * The Network page: the toolbar, and one section per part of the `http` shared state. The + * sections live in `./network/` and share the page's {@link NetworkState}, {@link RuleState} and + * {@link OverrideState}; the page keeps the members its tests and the shell read on itself. */ -function pagePattern(url: string): string { - const path = pagePath(url); - return path === '/' ? '' : path; -} - -/** A part the server masked in a payload key, plain or URL-encoded. */ -const REDACTED_PART = /\[redacted\]|%5Bredacted%5D/i; - -/** The longest TransferState key `set-ssr-overrides` keeps (see `sanitizeSsrOverrides`). */ -const MAX_OVERRIDE_KEY = 200; -const MAX_RULES = 50; -const MAX_PATTERN = 500; -const MAX_BODY = 100_000; - -const HTTP_STATUS_OPTIONS: SelectOption[] = [ - { value: '', label: 'None' }, - ...HTTP_RULE_STATUSES.map(([status, reason]) => ({ - value: String(status), - label: `${status} ${reason}`, - })), -]; - @Component({ selector: 'app-network-inspector', imports: [ AppState, - LiveControls, - SortHeader, - SearchField, - CallCopy, - CallOriginTag, + CallTimeline, + FaultRules, HarExport, - JsonPipe, - HttpHeadersView, HttpLint, - LimitNote, - NetworkWaterfall, - PayloadInsights, - RedactionCount, - RovingList, - RuleMatchCount, - RulePresets, + HydrationStats, Select, + SsrOverrides, + SsrRequests, + TransferPayload, ], + providers: [NetworkState, RuleState, OverrideState], template: `

HttpClient calls made while rendering on the server and in the browser, from the live page and @@ -396,488 +87,8 @@ const HTTP_STATUS_OPTIONS: SelectOption[] = [

-
-

SSR requests ({{ requests().length }})

- @if (requests().length) { -
- - - - - - - - - - - - - @for (req of requests(); track req.id) { - - - - - - - - - } - -
RequestStatusRender modeRenderServer callsNotes
- - - {{ req.status }} - {{ renderModeLabel(req.renderMode) }}{{ req.renderMs }} ms{{ req.fetches }} ({{ req.fetchMs }} ms) -
- @if (req.id === selected()?.ssrRequestId) { - this page - } - @if (req.overrides?.length) { - overridden - } - @if (req.aborted) { - aborted - } -
-
-
- @if (selectedRequest(); as req) { -
-

- {{ req.method }} {{ req.url }} -

-
-
-
Request id
-
- {{ req.id }} -
-
-
-
Render
-
{{ req.renderMs }} ms
-
-
-
Total
-
{{ req.durationMs }} ms
-
-
-
Sent
-
{{ req.bytes }} B
-
-
-
Browser page
-
{{ requestPage()?.title || requestPage()?.url || 'not connected' }}
-
-
- @if (compressedWith(req); as encoding) { -

- The body was already compressed ({{ encoding }}) when - ssrMiddleware saw it, so the render mode can't be read and - TransferState edits can't apply. Mount ssrMiddleware after - compression(). -

- } - @if (req.overrides?.length) { -

Overrides from the panel

-

- This response was changed on purpose, so it is not what the app sends on its own. -

- @for (o of req.overrides; track o.id + o.kind) { -

- {{ overrideLabel(o.kind) }} - {{ o.applied ? 'applied' : 'not applied' }} - @if (o.note) { - {{ o.note }} - } -

- } - } - @if (req.navigations?.length) { -

Router during the render

- @for (n of req.navigations; track $index) { - - @if (n.reason) { -

{{ n.reason }}

- } - } - } -

Server calls ({{ requestCalls().length }})

- @for (c of requestCalls(); track c.id) { -

- {{ c.method }} - {{ c.url }} - {{ statusLabel(c) }} - {{ c.durationMs }} ms - @if (c.cacheStored) { - cached - } @else if (c.cacheSkip) { - not cached - } -

- @if (!c.cacheStored && c.cacheSkip) { -

Not cached: {{ skipText(c.cacheSkip) }}.

- } - } @empty { -

The render made no HttpClient calls.

- } - @if (refetched().length) { -

Fetched again in the browser ({{ refetched().length }})

-

- These calls ran on the server and again after hydration instead of reading the - transfer cache. -

- @for (c of refetched(); track c.id) { -

- {{ c.method }} - {{ c.url }} - cache miss -

- @if (refetchReason(c); as why) { -

Why: {{ why }}.

- } - } - } @else if (requestPage() && requestCalls().length) { -

No server call ran again in the browser.

- } -
- } - } @else { -
-

No SSR requests traced.

-

- Add app.use(devtools.ssrMiddleware) before the Angular handler in - server.ts, or wrap a web-standard handler with - withPangularSsr(), then load a server rendered page. -

-
- } -
- -
-

HTTP timeline ({{ timeline().length }})

- -
- - - -
- - -
- {{ countText() }} - {{ filterStatus() }} -
-
- -
- @if (visibleCalls().length && timelineView() === 'waterfall') { - - } @else if (visibleCalls().length) { - @if (callWindow.enabled()) { -

- Rows render as you scroll, so the browser's find only sees the ones near view; the - search field searches them all. -

- } -
- - - - - - - - - - - - - - @if (callWindow.padTop()) { - - - - } - @for (shown of shownCalls(); track shown.entry.side + shown.entry.id) { - @let entry = shown.entry; - - - - - - - - - - } - @if (callWindow.padBottom()) { - - - - } - -
SideMethodURLPageStatusTimeNotes
- {{ - entry.side === 'server' ? 'SSR' : 'Client' - }} - {{ entry.method }} - - - {{ entry.pageUrl ?? '' }} - - {{ statusLabel(entry) }} - {{ entry.durationMs }} ms -
- @if (entry.nativeFetch) { - fetch() - } - @if (entry.origin) { - - } - @if (entry.cacheHit) { - transfer cache - } - @if (entry.delayMs) { - delayed {{ entry.delayMs }} ms - } - @if (entry.mocked) { - mocked - } - @if (entry.faulted) { - faulted - } - @if (rulePatternOf(entry); as pattern) { - rule {{ pattern }} - } -
-
-
- } @else if (timeline().length) { -
-

No requests match.

-

- @if (callQuery().trim()) { - Nothing matches “{{ callQuery().trim() }}” with these filters. - } @else { - None of the {{ timeline().length }} requests fit these filters. - } -

-
- -
-
- } @else { -
-

No requests yet.

-

- Add withPangular() to provideHttpClient, then load a page of - the app. -

-
- } - @if (selectedCall(); as detail) { -
-
-

Response preview

-
- @if (!detail.error && detail.preview) { - - } - - @if (!detail.nativeFetch) { - - } - -
-
-

- {{ detail.method }} - {{ statusLabel(detail) }} - {{ detail.url }} -

- @if (detail.nativeFetch) { -

- Made with fetch() directly, which skips the HttpClient interceptor, so - a fault rule cannot mock it. -

- } - @if (rulePatternOf(detail); as pattern) { -

- Matched rule {{ pattern }} -

- } - - -
{{ detail.error ?? previewText(detail) ?? '(no body)' }}
- -
- } -
- +
+

HTTP lint

- -
-

Fault injection

- @if (!canWrite()) { -

{{ writesOff }}

- } - -
- - -
-
- Method - -
-
- Apply on - -
-
-
-
- Status - -
- -
- - -

{{ bodyError() }}

- @if (draftMocksOnServer()) { -

- SSR mocks are not transferred to the client: the browser requests the URL again and - gets the real response unless the rule also applies on the client. -

- } -

{{ draftHint() }}

-
- -
- - -

- Rules ({{ rules().length }}) -

-
    - @for (rule of rules(); track rule.id) { -
  • - - - - {{ targetLabel(rule.target) }} - @if (rule.status === undefined) { - passthrough - } @else if (rule.status === 0) { - network error - } @else { - {{ rule.status }} - } - @if (rule.delayMs) { - {{ rule.delayMs }} ms - } - @if (rule.body) { - mock body - } - @if (rule.chance) { - {{ rule.chance }}% of requests - } - - @if (mocksOnServer(rule)) { -

    - The SSR mock is not written to TransferState, so the browser requests this URL - again. -

    - } -
  • - } @empty { -
  • No rules. SSR rules apply on the next page load.
  • - } -
-
- -
-

SSR overrides

-

- Development only. These change what the server sends for matching pages, from the next - full page load, and the request is marked overridden. -

-
-
- Override - -
- - @switch (overrideDraft().kind) { - @case ('render-error') { -

- Throws while the server renders, so it needs providePangularHttp() and - a page the engine renders. Prerendered files served as static files skip it. -

- - } - @case ('state-edit') { - - -

{{ overrideValueError() }}

- @if (overrideFromPayload(); as from) { -

- Filled in from the TransferState payload. The value starts empty because the panel - only shows a redacted copy, so type the JSON the server should send. - @if (from === 'http') { - For a cached HTTP response this is the whole cache record, not only the response - body. - } -

- } - } - @case ('client-render') { -

- Serves index.csr.html instead of rendering. Needs - browserDistFolder in initPangularHub(). -

- } - } -
- -
-
- -

- Overrides ({{ overrides().length }}) -

-
    - @for (o of overrides(); track o.id) { -
  • - - - - @if (o.message) { - {{ o.message }} - } - @if (o.key) { - {{ o.value === undefined ? 'remove' : 'set' }} {{ o.key }} - } - -
  • - } @empty { -
  • No overrides.
  • - } -
-
- -
-

Hydration

- @if (selected()?.hydration; as h) { -
-
-
Enabled
-
- {{ - h.enabled ? 'yes' : 'no (client render only)' - }} -
-
-
-
Hydrated components
-
{{ h.hydratedComponents ?? 'n/a' }}
-
-
-
Hydrated nodes
-
{{ h.hydratedNodes ?? 'n/a' }}
-
-
-
Skipped components
-
{{ h.componentsSkippedHydration ?? 'n/a' }}
-
-
-
App stable after
-
{{ h.stableMs === undefined ? 'n/a' : h.stableMs + ' ms' }}
-
-
-
Incremental defer blocks
-
{{ h.deferBlocksWithIncrementalHydration ?? 'n/a' }}
-
- @if (h.nodes; as n) { -
-
DOM nodes hydrated
-
{{ n.hydrated }}
-
-
-
DOM nodes skipped
-
{{ n.skipped }}
-
-
-
Mismatched components
-
{{ n.mismatched }}
-
- } -
- @if (h.mismatches?.length) { -

Mismatches ({{ h.mismatches!.length }})

-
    - @for (m of h.mismatches; track $index) { -
  • - {{ m.isClass ? m.component : '<' + m.component + '>' }} - @if (m.expected) { - Expected - {{ m.expected }} - } - @if (m.actual) { - Actual {{ m.actual }} - } -
  • - } -
- } - @if (h.skipHydrationHosts.length) { -

ngSkipHydration hosts

-
    - @for (host of h.skipHydrationHosts; track $index) { -
  • - {{ host }} -
  • - } -
- } - @if (h.warningsCaptured === false) { -

Warnings

-

- Not captured: add providePangularHttp() to the app providers. -

- } @else { -

Warnings ({{ h.warnings.length }})

- @for (warning of h.warnings; track $index) { -
{{ warning }}
- } @empty { -

No hydration warnings.

- } - } - } @else { -
-

No hydration data for this page.

-

Open a server rendered page of the app to see its stats.

-
- } -
- -
-

TransferState payload

- @if (selected(); as page) { -
- - - Renders this URL again on the server, with this tab's cookies, and shows the payload - it sends now. The tab does not reload. - -
- } - @if (selectedPayload(); as payload) { - @if (!payload.found) { -
-

No TransferState script: this page was not server rendered.

-
- } @else { -

- {{ payload.entries.length }} entr{{ payload.entries.length === 1 ? 'y' : 'ies' }}, - {{ payload.size }} bytes - @if (payload.refetchedAt) { - Refetched - } -

- @if (payload.error) { - - } - - -
- @for (entry of payload.entries; track entry.key) { -
- - - @if (payloadLabel(entry); as label) { - {{ label }} - } - @if (entry.http; as http) { - HTTP {{ http.status }} - {{ http.url ?? entry.key }} - } @else { - {{ entry.key }} - } - {{ entry.size }} B - -
- Key - {{ entry.key }} -
- - @if (canEditEntry(entry)) { - - } -
-
- -
{{
-                    entry.value | json
-                  }}
-
- } -
- } - } @else { -
-

Open a page of the app to see its payload.

-
- } -
+
+
+
+
`, styles: ` @use 'mixins' as m; + @use 'network' as net; .page-intro { margin: 0 0 12px; @@ -1509,17 +187,6 @@ const HTTP_STATUS_OPTIONS: SelectOption[] = [ width: 280px; max-width: 420px; } - .field-group { - display: grid; - gap: 6px; - min-width: 0; - color: var(--text-2); - font-size: 12px; - font-weight: 500; - } - .field-group app-select { - width: 100%; - } .message { flex: 1 1 200px; min-width: 0; @@ -1545,1598 +212,138 @@ const HTTP_STATUS_OPTIONS: SelectOption[] = [ .wide { grid-column: 1 / -1; } - h2 { - @include m.label; - margin: 0 0 16px; - } - h3 { - margin: 16px 0 8px; - color: var(--text-strong); - font-size: 12px; - font-weight: 600; - } - p { - margin: 0; - } - label { - display: grid; - gap: 6px; - color: var(--text-2); - font-size: 12px; - font-weight: 500; - } - label.inline { - display: flex; - align-items: center; - gap: 8px; - min-width: 0; - color: var(--text); - cursor: pointer; - } - .hint { - color: var(--text-3); - font-weight: 400; - } - input, - select, - textarea, - button { - font: inherit; - color: var(--text); - } - input:not([type='checkbox']), - select, - textarea { - width: 100%; - min-width: 0; - padding: 0 10px; - border: 1px solid var(--control-border); - border-radius: var(--radius-sm); - background-color: var(--bg); - transition: - border-color 0.2s var(--ease), - box-shadow 0.2s var(--ease); - } - input:not([type='checkbox']), - select { - height: 34px; - } - select { - padding-right: 36px; - } - textarea { - padding: 8px 10px; - font-family: var(--font-mono); - font-size: 12px; - } - input::placeholder, - textarea::placeholder { - color: var(--text-3); - } - input:not([type='checkbox']):hover, - select:hover, - textarea:hover { - border-color: color-mix(in srgb, var(--control-border) 60%, var(--text-3)); - } - input:not([type='checkbox']):focus-visible, - select:focus-visible, - textarea:focus-visible { - @include m.field-focus; - } - textarea[aria-invalid='true'] { - border-color: color-mix(in srgb, var(--danger) 60%, transparent); - } - input[type='checkbox'] { - flex: none; - width: 16px; - height: 16px; - margin: 0; - accent-color: var(--accent); - cursor: pointer; - } - button { - display: inline-flex; - align-items: center; - justify-content: center; - height: 34px; - padding: 0 14px; - border: 1px solid var(--control-border); - border-radius: var(--radius-sm); - background: var(--surface-2); - font-weight: 500; - white-space: nowrap; - cursor: pointer; - transition: - background-color 0.2s var(--ease), - border-color 0.2s var(--ease), - color 0.2s var(--ease), - transform 0.1s var(--ease); - } - button:hover:not(:disabled) { - border-color: var(--accent-line); - background: var(--surface-3); - } - button:active:not(:disabled) { - transform: translateY(1px); - } - button[type='submit'] { - border-color: var(--accent); - background: var(--accent); - color: var(--accent-ink); - font-weight: 600; - } - button[type='submit']:hover:not(:disabled) { - border-color: var(--accent-hover); - background: var(--accent-hover); - } - button:disabled { - opacity: 0.5; - cursor: not-allowed; - } - button.ghost { - height: 28px; - padding: 0 10px; - border-color: transparent; - background: none; - color: var(--text-2); - font-size: 12px; - } - button.ghost:hover:not(:disabled) { - border-color: var(--border-strong); - background: var(--surface-2); - color: var(--text); - } - button.link { - display: inline; - height: auto; - padding: 0; - border: none; - border-radius: 4px; - background: none; - color: var(--text); - text-align: left; - } - button.link:hover:not(:disabled) { - border: none; - background: none; - color: var(--accent); - } - button.link:active:not(:disabled) { - transform: none; - } - :focus-visible { - @include m.focus-ring; - } - .muted { - color: var(--text-2); - } - .small { - font-size: 12px; - } - .bad { - color: var(--danger); - } - .empty { - display: grid; - gap: 4px; - padding: 24px 16px; - border: 1px dashed var(--border-strong); - border-radius: var(--radius-sm); - color: var(--text); - text-align: center; - line-height: 1.5; - } - .empty-actions { - display: flex; - justify-content: center; - margin-top: 8px; - } - .filters { - display: flex; - flex-wrap: wrap; - align-items: center; - gap: 8px 12px; - margin: 0 0 12px; - } - .live-row { - display: flex; - flex-wrap: wrap; - align-items: center; - gap: 8px 12px; - margin: -4px 0 12px; - } - .search { - position: relative; - flex: 1 1 220px; - min-width: 0; - } - .search-icon { - position: absolute; - top: 50%; - left: 12px; - width: 14px; - height: 14px; - transform: translateY(-50%); - fill: none; - stroke: var(--text-3); - stroke-width: 2.2; - stroke-linecap: round; - pointer-events: none; - } - .search:focus-within .search-icon { - stroke: var(--accent); - } - .filters input[type='search'] { - height: var(--control-h); - padding-left: 34px; - } - .filters .side-filter { - flex: 0 0 140px; - } - .failed-toggle { - flex: none; - height: var(--control-h); - font-size: 13px; - font-weight: 500; - } - .total { - flex: none; - color: var(--text-2); - font-size: 12px; - white-space: nowrap; - font-variant-numeric: tabular-nums; - } - /* "0 of 0" says nothing before the first call; the empty state below explains it. */ - .filters.no-calls .total { - display: none; - } - .table-wrap { - max-height: min(420px, 60vh); - overflow: auto; - margin: 0 -16px; - padding: 0 16px; - } - .table-wrap :focus-visible { - @include m.focus-ring(-2px); - } - thead th { - position: sticky; - top: 0; - z-index: 1; - background: var(--surface); - } - table { - width: 100%; - min-width: 560px; - border-collapse: collapse; - font-variant-numeric: tabular-nums; - } - th, - td { - height: 36px; - padding: 6px 12px; - border-bottom: 1px solid var(--border); - text-align: left; - vertical-align: middle; - white-space: nowrap; - } - th:first-child, - td:first-child { - padding-left: 8px; - } - th { - @include m.label; - height: 32px; - border-bottom-color: var(--border-strong); - } - .num { - text-align: right; - } - td.num { - color: var(--text-2); - } - tbody tr { - cursor: pointer; - } - tbody tr.spacer td { - padding: 0; - border: 0; - } - .window-note { - margin: 0 0 6px; - } - tbody td { - transition: background-color 0.15s var(--ease); - } - tbody tr:hover td { - background: var(--surface-2); - } - tr.selected td, - tr.selected:hover td { - background: var(--accent-soft); - } - tr.selected td:first-child { - box-shadow: inset 2px 0 0 var(--accent); - } - .method { - font-family: var(--font-mono); - font-size: 12px; - font-weight: 600; - color: var(--text-strong); - } - td.url { - width: 100%; - max-width: 0; - font-family: var(--font-mono); - font-size: 12px; - } - td.url button.link { - display: block; - max-width: 100%; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - } - tr.selected td.url button.link { - color: var(--text-strong); - } - td.page-url { - max-width: 160px; - overflow: hidden; - color: var(--text-2); - font-family: var(--font-mono); - font-size: 12px; - text-overflow: ellipsis; - white-space: nowrap; - } - .rule-note { - grid-column: 1 / -1; - margin: 0; - padding-left: 24px; - color: var(--text-2); - font-size: 12px; - } - .mismatches li { - display: grid; - gap: 4px; - padding: 8px 12px; - border: 1px solid var(--border); - border-radius: var(--radius-sm); - background: var(--surface-2); - } - .mismatch-row { - display: flex; - gap: 8px; - min-width: 0; - font-size: 12px; - } - .mismatch-row code { - min-width: 0; - overflow-wrap: anywhere; - } - .mismatch-label { - flex: none; - width: 64px; - color: var(--text-2); - } - .status { - font-family: var(--font-mono); - font-size: 12px; - font-weight: 600; - color: var(--text-2); - } - .status.ok { - color: var(--ok); - } - .status.bad { - color: var(--danger); - } - .dot { - display: inline-block; - width: 6px; - height: 6px; - margin-right: 6px; - border-radius: 50%; - background: currentColor; - vertical-align: middle; - } - .notes { - display: flex; - gap: 4px; - } - .tag { - display: inline-flex; - align-items: center; - height: 20px; - padding: 0 8px; - border: 1px solid var(--border-strong); - border-radius: 99px; - background: var(--surface-3); - color: var(--text-2); - font-size: 11px; - font-weight: 600; - white-space: nowrap; - } - .tag.server { - @include m.tint(accent); - } - .tag.fault { - @include m.tint(danger); - } - .tag.mock { - @include m.tint(accent); - } - .tag.rule-ref { - gap: 4px; - max-width: 220px; - } - .tag.rule-ref code { - @include m.truncate; - font-family: var(--font-mono); - } - .tag.on { - @include m.tint(ok); - } - .tag.off-tag { - @include m.tint(warn); - } - pre { - margin: 0; - padding: 10px 12px; - max-height: 240px; - overflow: auto; - border: 1px solid var(--border); - border-radius: var(--radius-sm); - background: var(--bg); - color: var(--text-2); - font: 12px/1.5 var(--font-mono); - white-space: pre-wrap; - overflow-wrap: anywhere; - } - pre + pre { - margin-top: 8px; - } - pre.warn { - border-color: color-mix(in srgb, var(--warn) 30%, transparent); - color: var(--warn); - } - pre.error { - border-color: color-mix(in srgb, var(--danger) 30%, transparent); - color: var(--danger); - } - .view-toggle { - display: inline-flex; - border: 1px solid var(--control-border); - border-radius: var(--radius-sm); - overflow: hidden; - } - .view-toggle button { - height: calc(var(--control-h) - 2px); - padding: 0 10px; - border: 0; - border-radius: 0; - background: transparent; - color: var(--text-2); - } - .view-toggle button + button { - border-left: 1px solid var(--border-strong); - } - .view-toggle button[aria-pressed='true'] { - background: var(--accent-soft); - color: var(--text-strong); - } - .view-toggle button:focus-visible { - @include m.focus-ring(-2px); - } - .preview { - @include m.enter(0.2s); - margin-top: 16px; - } - .preview-head { - display: flex; - flex-wrap: wrap; - align-items: center; - justify-content: space-between; - gap: 4px 8px; - margin-bottom: 4px; - } - .preview-actions { - display: flex; - flex-wrap: wrap; - gap: 4px; - } - pre.preview-body { - max-height: 320px; - } - .preview-head h3 { - margin: 0; - } - .preview-meta { - display: flex; - align-items: baseline; - gap: 8px; - min-width: 0; - margin-bottom: 8px; - } - .request-call { - display: flex; - align-items: baseline; - gap: 8px; - min-width: 0; - margin: 0 0 4px; - } - .request-call .preview-url { - flex: 1 1 auto; - } - .skip-reason { - margin: 0 0 8px; - } - .nav-stats { - margin-bottom: 8px; - } - .preview-rule { - margin-bottom: 8px; - color: var(--text-2); - font-size: 12px; - } - .preview-url { - min-width: 0; - overflow: hidden; - color: var(--text-2); - font-family: var(--font-mono); - font-size: 12px; - text-overflow: ellipsis; - white-space: nowrap; - } - .rule-form { - display: grid; - gap: 12px; - } - .row { - display: grid; - grid-template-columns: repeat(2, minmax(0, 1fr)); - gap: 12px; - } - @media (max-width: 420px) { - .row { - grid-template-columns: minmax(0, 1fr); - } - } - .field-error { - margin-top: -4px; - color: var(--danger); - font-size: 12px; - } - .field-error:empty { - display: none; - } - .form-actions { - display: flex; - } - .rules-heading { - margin-top: 24px; - } - .rules, - .plain { - display: grid; - gap: 8px; - margin: 0; - padding: 0; - list-style: none; - } - .rules li { - display: grid; - grid-template-columns: minmax(0, 1fr) auto; - align-items: center; - gap: 4px 12px; - padding: 8px 12px; - border: 1px solid var(--border); - border-radius: var(--radius-sm); - background: var(--surface-2); - transition: - border-color 0.2s var(--ease), - opacity 0.2s var(--ease); - } - .rules li:hover { - border-color: var(--border-strong); - } - .rules li.off .rule-pattern { - color: var(--text-2); - text-decoration: line-through; - } - .rules li.off .rule-method, - .rules li.off .rule-meta, - .rules li.off .rule-meta .status { - color: var(--text-3); - } - .rules li.empty-rule { - display: block; - padding: 16px 12px; - border-style: dashed; - border-color: var(--border-strong); - background: none; - color: var(--text-2); - text-align: center; - } - .rule-pattern { - min-width: 0; - overflow: hidden; - color: var(--text-strong); - text-overflow: ellipsis; - white-space: nowrap; - } - .rule-method { - color: var(--accent); - font-weight: 600; - } - .rule-meta { - display: flex; - flex-wrap: wrap; - grid-column: 1 / -1; - gap: 4px 8px; - padding-left: 24px; - color: var(--text-2); - font-size: 12px; - font-variant-numeric: tabular-nums; - } - .rule-meta > span + span::before { - content: '·'; - margin-right: 8px; - color: var(--text-3); - } - .rule-meta .status { - font-size: 11px; - } - .rules button.remove { - padding: 2px 4px; - color: var(--text-2); - font-size: 12px; - } - .rules button.remove:hover:not(:disabled) { - color: var(--danger); - } - .plain li { - overflow-wrap: anywhere; - } - code { - font-family: var(--font-mono); - font-size: 12px; - } - .stats { - display: grid; - margin: 0; - } - .stats > div { - display: flex; - align-items: center; - justify-content: space-between; - gap: 16px; - min-height: 36px; - padding: 6px 0; - border-bottom: 1px solid var(--border); - } - .stats > div:last-child { - border-bottom: none; - } - dt { - color: var(--text-2); - } - dd { - margin: 0; - color: var(--text-strong); - font-weight: 600; - font-variant-numeric: tabular-nums; - text-align: right; - } - .ok-note { - color: var(--text-2); - } - .summary-line { - margin-bottom: 8px; - font-variant-numeric: tabular-nums; - } - .payload-tools { - display: flex; - flex-wrap: wrap; - align-items: center; - gap: 8px 12px; - margin-bottom: 12px; - } - .payload-tools .muted { - flex: 1 1 240px; - min-width: 0; - } - .entries { - border-top: 1px solid var(--border); - } - details { - border-bottom: 1px solid var(--border); - } - details pre { - margin: 0 0 12px; - } - summary { - display: flex; - align-items: center; - gap: 8px; - min-height: 36px; - padding: 6px 4px; - border-radius: 4px; - list-style: none; - cursor: pointer; - transition: background-color 0.15s var(--ease); - } - summary::-webkit-details-marker { - display: none; - } - summary:hover { - background: var(--surface-2); - } - .chevron { - flex: none; - width: 6px; - height: 6px; - margin: 0 4px; - border-right: 1.5px solid var(--text-3); - border-bottom: 1.5px solid var(--text-3); - transform: rotate(-45deg); - transition: transform 0.15s var(--ease); - } - details[open] .chevron { - transform: rotate(45deg); - } - .entry-key { - flex: 1 1 auto; - min-width: 0; - overflow: hidden; - font-family: var(--font-mono); - font-size: 12px; - text-overflow: ellipsis; - white-space: nowrap; - } - summary:hover .entry-key { - color: var(--accent); - } - .entry-key-row { - display: flex; - flex-wrap: wrap; - align-items: center; - gap: 4px 8px; - min-width: 0; - margin: 0 0 8px; - padding: 0 4px; - } - .entry-key-label { - @include m.label; - flex: none; - } - .entry-key-text { - flex: 1 1 200px; - min-width: 0; - color: var(--text-strong); - overflow-wrap: anywhere; - user-select: text; - } - .entry-actions { - display: flex; - flex-wrap: wrap; - gap: 4px; - } - .entry-size { - flex: none; - color: var(--text-2); - font-size: 12px; - font-variant-numeric: tabular-nums; - } - @media (max-width: 760px) { - .grid { - grid-template-columns: minmax(0, 1fr); - } - .toolbar .page-picker { - flex: 1 1 100%; - } - .toolbar app-select { - flex: 1 1 auto; - width: auto; - max-width: none; - } - .message { - text-align: left; - } + @include net.controls; + @media (max-width: 760px) { + .grid { + grid-template-columns: minmax(0, 1fr); + } + .toolbar .page-picker { + flex: 1 1 100%; + } + .toolbar app-select { + flex: 1 1 auto; + width: auto; + max-width: none; + } + .message { + text-align: left; + } } `, }) export class NetworkInspector { readonly rpc = input(null); - readonly canWrite = computed(() => actionAllowed(this.rpc(), 'http')); - protected readonly writesOff = actionBlockedMessage('http'); - - readonly loading = signal(false); - readonly failed = signal(false); - readonly serverCalls = signal([]); - readonly pages = signal([]); - readonly payloads = signal>({}); - readonly serverDropped = signal(0); - readonly requests = signal([]); - readonly rules = signal([]); - /** True while an added rule or override is being saved, so Add can't send it twice. */ - readonly addingRule = signal(false); - readonly addingOverride = signal(false); - private ruleSaves = Promise.resolve(true); - private overrideSaves = Promise.resolve(true); - readonly overrides = signal([]); - readonly overrideDraft = signal({ ...EMPTY_OVERRIDE }); - /** Set when the draft came from a TransferState entry, so the form can explain the empty value. */ - readonly overrideFromPayload = signal<'http' | 'other' | null>(null); - readonly overrideKindOptions: SelectOption[] = [ - { value: 'render-error', label: 'Render error' }, - { value: 'client-render', label: 'Force Client render' }, - { value: 'state-edit', label: 'Edit TransferState entry' }, - ]; - - readonly overrideValueError = computed(() => { - const value = this.overrideDraft().value.trim(); - if (!value) return ''; - try { - JSON.parse(value); - return ''; - } catch { - return 'The value must be valid JSON.'; - } - }); - - readonly overrideReady = computed(() => { - const d = this.overrideDraft(); - if (!d.pattern.trim() || this.overrides().length >= 20) return false; - if (d.kind === 'state-edit') return !!d.key.trim() && !this.overrideValueError(); - return true; - }); - private readonly hostPageId = hostPageId(); - readonly selectedPageId = linkedSignal({ - source: () => this.pages(), - computation: (pages, previous) => - previous?.value && pages.some((p) => p.pageId === previous.value) - ? previous.value - : (pages.find((p) => p.pageId === this.hostPageId)?.pageId ?? pages[0]?.pageId ?? null), - }); - readonly selectedCallId = signal(null); - readonly draft = signal({ ...EMPTY_DRAFT }); - readonly message = signal(''); - readonly refetching = signal(false); - readonly bodyPlaceholder = '{ "error": "Service unavailable" }'; - readonly statusOptions = HTTP_STATUS_OPTIONS; - private unsubscribe: (() => void)[] = []; - private readonly destroyRef = inject(DestroyRef); - private readonly injector = inject(Injector); - private readonly host = inject>(ElementRef); - - readonly selected = computed( - () => this.pages().find((p) => p.pageId === this.selectedPageId()) ?? null, - ); - - private readonly pageRequestId = computed(() => this.selected()?.ssrRequestId ?? null); - readonly selectedRequestId = linkedSignal(() => this.pageRequestId()); - - readonly selectedPayload = computed(() => { - const pageId = this.selectedPageId(); - return pageId ? (this.payloads()[pageId] ?? null) : null; - }); - - readonly maxCalls = computed(() => panelConfig(this.rpc()).limits.httpCalls); - - readonly droppedCalls = computed(() => (this.selected()?.dropped ?? 0) + this.serverDropped()); - - readonly pageServerCalls = computed(() => { - const initialUrl = this.selected()?.initialUrl; - if (!initialUrl) return this.serverCalls(); - return this.serverCalls().filter((c) => !c.pageUrl || c.pageUrl === initialUrl); - }); - - /** The server calls of the SSR request that served the selected page, for the HTTP lint. */ - readonly renderServerCalls = computed(() => { - const id = this.pageRequestId(); - return id ? this.serverCalls().filter((c) => c.requestId === id) : []; - }); - - /** Every call of the selected page as it arrives, newest first. */ - private readonly liveTimeline = computed(() => - [...this.pageServerCalls(), ...(this.selected()?.calls ?? [])].sort((a, b) => b.at - a.at), - ); - /** Pause holds the timeline as it is while the app keeps calling. */ - readonly callFeed = new LiveFeed({ - name: 'network', - source: this.liveTimeline, - key: (c) => `${c.side}:${c.id}`, - scope: this.selectedPageId, - }); - readonly timeline = computed(() => [...this.callFeed.items()]); - /** The column the call table is sorted by; `null` keeps newest first. */ - readonly callSort = signal(null); - - readonly callQuery = signal(''); - /** The timeline as a table of every call, or a waterfall of the client calls by navigation. */ - readonly timelineView = signal<'table' | 'waterfall'>('table'); - readonly waterfallCalls = computed(() => this.visibleCalls().filter((c) => c.side === 'client')); - readonly sideFilter = signal('all'); - readonly failedOnly = signal(false); - readonly sideOptions: SelectOption[] = [ - { value: 'all', label: 'All sides' }, - { value: 'server', label: 'SSR' }, - { value: 'client', label: 'Client' }, - ]; - - /** A long call list renders only the rows near view in its scroll box. */ - readonly callWindow = new VirtualWindow({ - count: computed(() => this.visibleCalls().length), - estimate: 37, - }); - readonly shownCalls = computed(() => { - const { start, end } = this.callWindow.range(); - return this.visibleCalls() - .slice(start, end) - .map((entry, i) => ({ entry, index: start + i })); - }); - private readonly callsBody = viewChild>('callsBody'); - - readonly visibleCalls = computed(() => { - const query = this.callQuery().trim().toLowerCase(); - const side = this.sideFilter() ?? 'all'; - const failedOnly = this.failedOnly(); - const matching = this.timeline().filter( - (c) => - (side === 'all' || c.side === side) && - (!failedOnly || this.isFailed(c)) && - (!query || - `${c.method} ${c.url}`.toLowerCase().includes(query) || - `${c.method} ${pathOf(c.url)}`.toLowerCase().includes(query)), - ); - return sortRows(matching, this.callSort(), { - method: (c) => c.method, - url: (c) => c.url, - status: (c) => (c.cancelled || !c.status ? undefined : c.status), - time: (c) => c.durationMs, - }) as HttpCall[]; - }); - - /** - * The count, announced only when a filter changes. The visible count also changes with every - * call the app makes, which would make a screen reader talk while the user uses the app. - */ - /** What the view shows out of every call: the waterfall shows only client calls. */ - readonly countText = computed(() => { - const total = this.timeline().length; - if (this.timelineView() !== 'waterfall') return `${this.visibleCalls().length} of ${total}`; - const client = this.waterfallCalls().length; - return `${client} client ${client === 1 ? 'call' : 'calls'} of ${total}`; - }); - readonly filterStatus = computed(() => { - this.callQuery(); - this.sideFilter(); - this.failedOnly(); - this.timelineView(); - // A filter change that keeps the same counts still gets announced: the text flips a - // trailing no-break space so the live region sees a change. - this.filterFlip = !this.filterFlip; - const text = untracked(() => this.countText()); - return this.filterFlip ? `${text}\u00a0` : text; - }); - private filterFlip = true; - - /** Follows the visible rows, so the preview hides while filters hide its call. */ - readonly selectedCall = computed( - () => this.visibleCalls().find((c) => c.id === this.selectedCallId()) ?? null, - ); - - /** The SSR request that served the selected page, for the HAR export. */ - readonly pageSsrRequest = computed( - () => this.requests().find((r) => r.id === this.pageRequestId()) ?? null, - ); - - readonly selectedRequest = computed( - () => this.requests().find((r) => r.id === this.selectedRequestId()) ?? null, - ); - - readonly requestCalls = computed(() => { - const id = this.selectedRequest()?.id; - return id ? this.serverCalls().filter((c) => c.requestId === id) : []; - }); - - readonly requestPage = computed(() => { - const id = this.selectedRequest()?.id; - return id ? (this.pages().find((p) => p.ssrRequestId === id) ?? null) : null; - }); - - readonly refetched = computed(() => { - const request = this.selectedRequest(); - const page = this.requestPage(); - if (!request || !page) return []; - const fetched = new Set( - this.requestCalls() - .filter((c) => c.status) - .map((c) => `${c.method} ${pathOf(c.url)}`), - ); - return page.calls.filter( - (c) => - c.side === 'client' && - // The page's own fetch() never goes through the transfer cache, so it is no cache miss. - !c.nativeFetch && - !c.cacheHit && - !c.mocked && - c.at >= request.at && - fetched.has(`${c.method} ${pathOf(c.url)}`), - ); - }); - - readonly draftMocksOnServer = computed(() => { - const rule = this.draftRule(); - return !!rule && this.mocksOnServer(rule); - }); - - readonly draftRule = computed | null>(() => { - const draft = this.draft(); - const pattern = draft.pattern.trim(); - if (!pattern || pattern.length > MAX_PATTERN || this.bodyError()) return null; - if (this.rules().length >= MAX_RULES) return null; - const body = draft.body.trim(); - const delayMs = Math.min(Math.max(Math.round(Number(draft.delayMs)) || 0, 0), 10_000); - const status = draft.status.trim() ? Number(draft.status) : body ? 200 : undefined; - if (status !== undefined && !isHttpRuleStatus(status)) return null; - if (status === undefined && !delayMs) return null; - const chance = chanceOf(draft.chance); - if (chance === null) return null; - return { - pattern, - enabled: true, - target: draft.target, - ...(draft.method ? { method: draft.method } : {}), - ...(status !== undefined ? { status } : {}), - ...(delayMs ? { delayMs } : {}), - ...(body ? { body } : {}), - ...(chance !== undefined ? { chance } : {}), - }; - }); - - readonly draftHint = computed(() => { - const draft = this.draft(); - if (this.rules().length >= MAX_RULES) { - return `You can add up to ${MAX_RULES} rules. Remove one to add another.`; - } - if (!draft.pattern.trim()) return 'Enter a URL pattern to add a rule.'; - if (draft.pattern.trim().length > MAX_PATTERN) - return `The URL pattern is limited to ${MAX_PATTERN} characters.`; - if (this.bodyError()) return ''; - if (draft.status.trim() && !isHttpRuleStatus(Number(draft.status))) - return 'Pick a status from the list.'; - if (chanceOf(draft.chance) === null) return 'Chance is a whole percent from 1 to 99.'; - if (!this.draftRule()) return 'Set a status, a delay or a mock body.'; - if (!draft.status.trim() && draft.body.trim()) - return 'With no status, the mock body returns 200.'; - return ''; - }); - - readonly bodyError = computed(() => { - const body = this.draft().body.trim(); - if (!body) return ''; - if (body.length > MAX_BODY) return `The mock body is limited to ${MAX_BODY} characters.`; - try { - JSON.parse(body); - return ''; - } catch { - return 'The mock body must be valid JSON.'; - } - }); + private readonly state = inject(NetworkState); + private readonly ruleState = inject(RuleState); + private readonly overrideState = inject(OverrideState); + + readonly canWrite = this.state.canWrite; + readonly loading = this.state.loading; + readonly failed = this.state.failed; + readonly serverCalls = this.state.serverCalls; + readonly pages = this.state.pages; + readonly payloads = this.state.payloads; + readonly requests = this.state.requests; + readonly rules = this.state.rules; + readonly overrides = this.state.overrides; + readonly message = this.state.message; + readonly selected = this.state.selected; + readonly selectedCallId = this.state.selectedCallId; + readonly selectedCall = this.state.selectedCall; + readonly selectedRequestId = this.state.selectedRequestId; + readonly refetched = this.state.refetched; + readonly timeline = this.state.timeline; + readonly sideFilter = this.state.sideFilter; + readonly failedOnly = this.state.failedOnly; + readonly pageOptions = this.state.pageOptions; + readonly pageSsrRequest = this.state.pageSsrRequest; + readonly renderServerCalls = this.state.renderServerCalls; + + readonly draft = this.ruleState.draft; + readonly draftRule = this.ruleState.draftRule; + readonly methodOptions = this.ruleState.methodOptions; + + readonly overrideDraft = this.overrideState.overrideDraft; + readonly overrideFromPayload = this.overrideState.overrideFromPayload; + readonly overrideReady = this.overrideState.overrideReady; + readonly overrideValueError = this.overrideState.overrideValueError; + + readonly mocksOnServer = mocksOnServer; constructor() { + this.state.connect(this.rpc); rememberSelection('network', this.selectedCallId); - // Newest first, so following the newest call keeps the table scrolled to the top. - followNewest(this.callFeed, () => { - if (this.callSort()) return; - // The SSR requests table comes first and has a .table-wrap too. - const wrap = this.callsBody()?.nativeElement.closest('.table-wrap'); - if (wrap) wrap.scrollTop = 0; - }); - effect(() => { - const body = this.callsBody()?.nativeElement; - if (body) this.callWindow.attach(body); - }); effect(() => { const client = this.rpc(); - if (client) this.load(client); + if (client) void this.state.load(client); }); - this.destroyRef.onDestroy(() => this.stopListening()); - } - - async load(client: DevframeRpcClient) { - this.loading.set(true); - this.failed.set(false); - try { - const rpc = client.scope('pangular').rpc; - const [state, payloads] = await Promise.all([ - rpc.sharedState('http'), - rpc.sharedState('http-payloads'), - ]); - if (this.destroyRef.destroyed) return; - const apply = (value: unknown) => { - const snapshot = value as HttpState | undefined; - this.serverCalls.set(snapshot?.serverCalls ?? []); - this.serverDropped.set(snapshot?.serverDropped ?? 0); - this.requests.set([...(snapshot?.requests ?? [])].reverse()); - this.pages.set(snapshot?.pages ?? []); - this.rules.set(snapshot?.rules ?? []); - this.overrides.set(snapshot?.ssrOverrides ?? []); - }; - const applyPayloads = (value: unknown) => - this.payloads.set( - (value as { pages?: Record } | undefined)?.pages ?? {}, - ); - apply(state.value()); - applyPayloads(payloads.value()); - this.stopListening(); - this.unsubscribe = [state.on('updated', apply), payloads.on('updated', applyPayloads)]; - } catch { - this.failed.set(true); - } finally { - this.loading.set(false); - } } retry() { - const client = this.rpc(); - if (client) void this.load(client); + this.state.retry(); } - /** A guard that returns a UrlTree reports shouldActivate false, so a redirect is not a rejection. */ - guardVerdict(nav: SsrNavigation): 'redirected' | 'rejected' | '' { - if (nav.guards?.passed !== false) return ''; - return nav.outcome === 'redirected' ? 'redirected' : 'rejected'; - } - - msLabel(ms: number | undefined): string { - return ms === undefined ? 'n/a' : `${ms} ms`; - } - - skipText(skip: CacheSkip): string { - return CACHE_SKIP_TEXT[skip] ?? ''; - } - - refetchReason(call: HttpCall): string { - const key = `${call.method} ${pathOf(call.url)}`; - const matches = this.requestCalls().filter((c) => `${c.method} ${pathOf(c.url)}` === key); - const first = matches[0]; - // Several matching server calls with different outcomes can't be paired, so name no reason. - return first?.cacheSkip && matches.every((c) => c.cacheSkip === first.cacheSkip) - ? this.skipText(first.cacheSkip) - : ''; - } - - /** The response encoding when a compression middleware ran before `ssrMiddleware` saw the body. */ - compressedWith(req: SsrRequest): string | undefined { - // The final Content-Encoding is also set when compression runs after ssrMiddleware, as it should. - if (!req.compressedBeforeTrace) return undefined; - return req.headers['content-encoding'] ?? 'unknown encoding'; - } - - renderModeLabel(mode: SsrRequest['renderMode']): string { - return RENDER_MODE_LABEL[mode] ?? 'Unknown'; - } - - statusLabel(call: HttpCall): string { - if (call.cancelled) return 'cancelled'; - return call.status ? String(call.status) : 'ERR'; - } - - callTone(call: HttpCall): 'ok' | 'redirect' | 'bad' | 'neutral' { - return call.cancelled ? 'neutral' : this.statusTone(call.status); - } - - /** A failed call has a status of 400 or more, no status (ERR) or was cancelled. */ - isFailed(call: HttpCall): boolean { - return !!call.cancelled || !call.status || call.status >= 400; - } - - clearCallFilters() { - this.callQuery.set(''); - this.sideFilter.set('all'); - this.failedOnly.set(false); - this.host.nativeElement.querySelector('#timeline-search')?.focus(); - } - - rulePatternOf(call: HttpCall): string | null { - if (call.rulePattern) return call.rulePattern; - if (!call.ruleId) return null; - return this.rules().find((rule) => rule.id === call.ruleId)?.pattern ?? null; - } - - openCall(id: string) { - this.selectedCallId.set(id); - afterNextRender( - () => this.host.nativeElement.querySelector('#preview-heading')?.focus(), - { injector: this.injector }, - ); - } - - /** The preview as shown: JSON indented by 2 spaces, other text as recorded (both already redacted). */ - previewText(call: HttpCall): string | undefined { - if (call.preview === undefined) return undefined; - return prettyJson(call.preview) ?? call.preview; - } - - async copyPreview(call: HttpCall) { - const text = this.previewText(call); - if (!text) return; - try { - await navigator.clipboard.writeText(text); - this.message.set('Copied.'); - } catch { - this.message.set('The clipboard is not available here.'); - } - } - - /** Fills the fault rule form from a recorded call and moves focus to it. Nothing is saved. */ - mockCall(call: HttpCall) { - const method = call.method.toUpperCase(); - const pattern = mockPattern(call.url); - const body = call.error || !call.preview ? null : jsonBody(call.preview); - this.draft.set({ ...EMPTY_DRAFT, pattern, method, body: body ?? '' }); - const what = `${method} ${pattern}`; - this.message.set( - body - ? `Filled in a rule for ${what} with the preview as its body. Check it, then add the rule.` - : call.preview && !call.error - ? `Filled in a rule for ${what}. The preview is not complete JSON, so it is not used as the body.` - : `Filled in a rule for ${what}. Set a status, a delay or a body, then add the rule.`, - ); - afterNextRender( - () => this.host.nativeElement.querySelector('#rule-pattern')?.focus(), - { injector: this.injector }, - ); - } - - closePreview() { - const id = this.selectedCallId(); - this.selectedCallId.set(null); - if (!id) return; - const buttons = this.host.nativeElement.querySelectorAll('button[data-call-id]'); - [...buttons].find((button) => button.dataset['callId'] === id)?.focus(); - } - - private stopListening() { - for (const stop of this.unsubscribe.splice(0)) stop(); - } - - statusTone(status: number | undefined): 'ok' | 'redirect' | 'bad' | 'neutral' { - if (status === undefined) return 'neutral'; - if (status === 0 || status >= 400) return 'bad'; - if (status >= 300) return 'redirect'; - if (status >= 200) return 'ok'; - return 'neutral'; - } - - mocksOnServer(rule: Pick): boolean { - return ( - rule.target !== 'client' && rule.status !== undefined && rule.status > 0 && rule.status < 400 - ); - } - - payloadLabel(entry: PayloadEntry): string | null { - if (entry.source === 'hydration') return 'hydration annotations'; - if (entry.fn) return `Analog server function ${entry.fn.name ?? entry.fn.id}`; - if (entry.source === 'analog') return 'Analog'; - return null; - } - - targetLabel(target: HttpRule['target']): string { - return target === 'both' ? 'SSR + client' : target === 'server' ? 'SSR only' : 'Client only'; - } - - readonly pageOptions = computed(() => - this.pages().map((page) => ({ value: page.pageId, label: page.title || page.url })), - ); - - /** The usual methods, plus the draft's own when "Mock this request" filled in another one. */ - readonly methodOptions = computed(() => { - const draft = this.draft().method; - const methods = - draft && !STANDARD_METHODS.includes(draft) ? [...STANDARD_METHODS, draft] : STANDARD_METHODS; - return [{ value: '', label: 'Any' }, ...methods.map((m) => ({ value: m, label: m }))]; - }); - - readonly targetOptions: SelectOption[] = [ - { value: 'both', label: 'SSR + client' }, - { value: 'server', label: 'SSR only' }, - { value: 'client', label: 'Client only' }, - ]; - selectPage(pageId: string | null) { - if (pageId) this.selectedPageId.set(pageId); + if (pageId) this.state.selectedPageId.set(pageId); this.selectedCallId.set(null); this.overrideFromPayload.set(null); } - setDraft(key: K, value: RuleDraft[K]) { - this.draft.update((draft) => ({ ...draft, [key]: value })); + openCall(id: string) { + this.state.openCall(id); } - patch(key: keyof RuleDraft, event: Event) { - const value = (event.target as HTMLInputElement).value; - this.draft.update((draft) => ({ ...draft, [key]: value })); + clearCalls() { + return this.state.clearCalls(); } - async addRule(event: Event) { - event.preventDefault(); - const draft = this.draftRule(); - if (!draft || this.addingRule()) return; - const rule: HttpRule = { id: newRuleId(), ...draft }; - this.addingRule.set(true); - const added = await this.saveRules((rules) => [[...rules, rule], rule], 'Rule added.'); - this.addingRule.set(false); - if (added) { - this.draft.set({ ...EMPTY_DRAFT }); - this.host.nativeElement.querySelector('#rule-pattern')?.focus(); - } + copyPreview(call: HttpCall) { + return this.state.copyPreview(call); } - /** Adds the rules of a built-in preset after the current ones. */ - async addPreset(id: string) { - const added = presetRules(id, newRuleId); - if (!added.length) return; - if (this.rules().length + added.length > MAX_RULES) { - this.message.set(`You can add up to ${MAX_RULES} rules. Remove one to add the preset.`); - return; - } - await this.saveRules( - (rules) => [[...rules, ...added], added[0]], - `Added ${added.length === 1 ? 'a rule' : `${added.length} rules`} for every browser request.`, - ); + copyKey(key: string) { + return this.state.copyKey(key); } - toggleRule(id: string) { - void this.saveRules((rules) => { - const rule = rules.find((r) => r.id === id); - if (!rule) return null; - return [rules.map((r) => (r.id === id ? { ...r, enabled: !r.enabled } : r)), rule]; - }, 'Rule updated.'); + setDraft(key: K, value: RuleDraft[K]) { + this.ruleState.setDraft(key, value); } - async removeRule(id: string) { - let index = -1; - const removed = await this.saveRules((rules) => { - index = rules.findIndex((r) => r.id === id); - return index < 0 ? null : [rules.filter((r) => r.id !== id), rules[index]]; - }, 'Rule removed.'); - if (removed) this.focusAfterRemove('[data-remove-rule]', index, '#rule-list-heading'); + addRule(event: Event) { + return this.ruleState.addRule(event); } - async clearCalls() { - try { - await call(this.rpc(), 'clear-http-calls'); - // A paused feed holds the old calls, so show the cleared list. - this.callFeed.resume(); - this.selectedCallId.set(null); - this.message.set('Timeline cleared.'); - } catch { - this.message.set('Could not clear the timeline.'); - } + toggleRule(id: string) { + this.ruleState.toggleRule(id); } - overrideLabel(kind: SsrOverrideKind): string { - return OVERRIDE_LABEL[kind] ?? kind; + removeRule(id: string) { + return this.ruleState.removeRule(id); } setOverrideDraft(key: K, value: OverrideDraft[K]) { - this.overrideDraft.update((d) => ({ ...d, [key]: value })); - // The "filled in from the payload" note only describes the entry the form was filled from. - if (key === 'kind' && value !== 'state-edit') this.overrideFromPayload.set(null); + this.overrideState.setOverrideDraft(key, value); } - patchOverride(key: keyof OverrideDraft, event: Event) { - const value = (event.target as HTMLInputElement).value; - this.overrideDraft.update((d) => ({ ...d, [key]: value })); - if (key === 'key') this.overrideFromPayload.set(null); - } - - async copyKey(key: string) { - try { - await navigator.clipboard.writeText(key); - this.message.set('Copied.'); - } catch { - this.message.set('The clipboard is not available here.'); - } - } - - /** - * The edit needs HTTP writes and a key the server keeps exactly: it trims keys and drops longer - * ones than it accepts. A key with a redacted part can never match the real one. - */ canEditEntry(entry: PayloadEntry): boolean { - const { key } = entry; - return ( - this.canWrite() && - !!key && - key === key.trim() && - key.length <= MAX_OVERRIDE_KEY && - !REDACTED_PART.test(key) - ); + return this.overrideState.canEditEntry(entry); } - /** - * Opens the SSR overrides form as a TransferState edit for this entry. The value stays empty: - * the payload the panel holds is redacted and clipped, so copying it would write masks back. - */ - editEntry(entry: PayloadEntry) { - if (!this.canEditEntry(entry)) return; - const page = this.selected(); - this.overrideDraft.set({ - ...EMPTY_OVERRIDE, - kind: 'state-edit', - pattern: page ? pagePattern(page.initialUrl ?? page.url) : '', - key: entry.key, - }); - this.overrideFromPayload.set(entry.http ? 'http' : 'other'); - this.message.set('Editing the TransferState entry in SSR overrides.'); - afterNextRender( - () => { - const host = this.host.nativeElement; - const target = host.querySelector( - this.overrideDraft().pattern ? '#override-value' : '#override-pattern', - ); - target?.scrollIntoView?.({ block: 'center' }); - target?.focus(); - }, - { injector: this.injector }, - ); - } - - async addOverride(event: Event) { - event.preventDefault(); - if (!this.overrideReady() || this.addingOverride()) return; - const d = this.overrideDraft(); - const next: SsrOverride = { - id: `o${Date.now().toString(36)}${Math.random().toString(36).slice(2, 6)}`, - kind: d.kind, - pattern: d.pattern.trim(), - enabled: true, - ...(d.kind === 'render-error' && d.message.trim() ? { message: d.message.trim() } : {}), - ...(d.kind === 'state-edit' ? { key: d.key.trim() } : {}), - ...(d.kind === 'state-edit' && d.value.trim() ? { value: d.value.trim() } : {}), - }; - this.addingOverride.set(true); - const added = await this.saveOverrides( - (overrides) => [...overrides, next], - 'Override added. Reload the page.', - ); - this.addingOverride.set(false); - if (added) { - this.overrideDraft.set({ ...EMPTY_OVERRIDE, kind: d.kind }); - this.overrideFromPayload.set(null); - this.host.nativeElement.querySelector('#override-pattern')?.focus(); - } + addOverride(event: Event) { + return this.overrideState.addOverride(event); } toggleOverride(id: string) { - void this.saveOverrides( - (overrides) => - overrides.some((o) => o.id === id) - ? overrides.map((o) => (o.id === id ? { ...o, enabled: !o.enabled } : o)) - : null, - 'Override updated. Reload the page.', - ); - } - - async removeOverride(id: string) { - let index = -1; - const removed = await this.saveOverrides((overrides) => { - index = overrides.findIndex((o) => o.id === id); - return index < 0 ? null : overrides.filter((o) => o.id !== id); - }, 'Override removed.'); - if (removed) { - this.focusAfterRemove('[data-remove-override]', index, '#override-list-heading'); - } + this.overrideState.toggleOverride(id); } - /** - * The removed row's button is gone, so focus moves to the Remove button that took its place, - * the one before it when the last row went, or the list heading when the list is empty. - */ - private focusAfterRemove(buttons: string, index: number, heading: string) { - afterNextRender( - () => { - const host = this.host.nativeElement; - const remaining = host.querySelectorAll(buttons); - const next = remaining[Math.min(index, remaining.length - 1)]; - (next ?? host.querySelector(heading))?.focus(); - }, - { injector: this.injector }, - ); - } - - /** Asks the page to render its URL again on the server and push the payload it gets. */ - async refetchPayload(pageId: string) { - if (this.refetching()) return; - this.refetching.set(true); - try { - const result = (await call(this.rpc(), 'request-http-payload-refetch', { pageId })) as - { error?: string; found?: boolean; entries?: number; status?: number } | null | undefined; - if (!result) this.announce('Could not reach the devtools server.'); - else if (result.error) this.announce(result.error); - else if (!result.found) { - this.announce(`The server answered ${result.status} without a TransferState payload.`); - } else { - const count = result.entries ?? 0; - this.announce(`Refetched: ${count} entr${count === 1 ? 'y' : 'ies'}.`); - } - } catch { - this.announce('Could not refetch the payload.'); - } finally { - this.refetching.set(false); - } + removeOverride(id: string) { + return this.overrideState.removeOverride(id); } /** Clears a repeated message first, so the live region speaks again for the same text. */ - private announce(text: string) { - if (this.message() !== text) { - this.message.set(text); - return; - } - this.message.set(''); - // A newer message set before the render wins over this restore. - afterNextRender( - () => { - if (this.message() === '') this.message.set(text); - }, - { injector: this.injector }, - ); - } - - /** - * Saves run one after another, and each change is applied to the list the previous save left, - * so two quick changes never start from the same old list. `change` returns null when its - * override is gone by then. - */ - private saveOverrides( - change: (overrides: SsrOverride[]) => SsrOverride[] | null, - done: string, - ): Promise { - const save = this.overrideSaves.then(async () => { - const next = change(this.overrides()); - if (!next) return false; - try { - const saved = await call(this.rpc(), 'set-ssr-overrides', next); - this.overrides.set(Array.isArray(saved) ? (saved as SsrOverride[]) : next); - this.announce(done); - return true; - } catch { - this.message.set('Could not save the overrides.'); - return false; - } - }); - this.overrideSaves = save; - return save; - } - - /** Like `saveOverrides`; `change` also returns the rule it changed, for the message. */ - private saveRules( - change: (rules: HttpRule[]) => [HttpRule[], HttpRule] | null, - done: string, - ): Promise { - const save = this.ruleSaves.then(async () => { - const next = change(this.rules()); - if (!next) return false; - const [rules, changed] = next; - try { - const saved = await call(this.rpc(), 'set-http-rules', rules); - this.rules.set(Array.isArray(saved) ? (saved as HttpRule[]) : rules); - this.announce( - changed.target === 'client' ? done : `${done} Reload the page to apply it to SSR.`, - ); - return true; - } catch { - this.message.set('Could not save the rules.'); - return false; - } - }); - this.ruleSaves = save; - return save; + protected announce(text: string) { + this.state.announce(text); } } diff --git a/app/src/pages/network/call-timeline.ts b/app/src/pages/network/call-timeline.ts new file mode 100644 index 00000000..927eff6c --- /dev/null +++ b/app/src/pages/network/call-timeline.ts @@ -0,0 +1,389 @@ +import { Component, ElementRef, computed, effect, inject, viewChild } from '@angular/core'; +import { LimitNote } from '../../ui/limit-note'; +import { LiveControls, followNewest } from '../../ui/live-feed'; +import { RovingList } from '../../ui/roving-list'; +import { SearchField } from '../../ui/search-field'; +import { Select } from '../../ui/select'; +import { SortHeader } from '../../ui/sort-header'; +import { VirtualWindow } from '../../ui/virtual-window'; +import { NetworkWaterfall } from '../network-waterfall'; +import { CallOriginTag } from './call-origin'; +import { callTone, statusLabel, type HttpCall } from './http-model'; +import { NetworkState } from './network-state'; +import { ResponsePreview } from './response-preview'; + +/** + * The HTTP timeline of the Network page: filters, the live controls, the call table or the + * waterfall, and the response preview of the selected call. + */ +@Component({ + selector: 'section[appCallTimeline]', + imports: [ + CallOriginTag, + LimitNote, + LiveControls, + NetworkWaterfall, + ResponsePreview, + RovingList, + SearchField, + Select, + SortHeader, + ], + template: ` +

HTTP timeline ({{ timeline().length }})

+ +
+ + + +
+ + +
+ {{ countText() }} + {{ filterStatus() }} +
+
+ +
+ @if (visibleCalls().length && timelineView() === 'waterfall') { + + } @else if (visibleCalls().length) { + @if (callWindow.enabled()) { +

+ Rows render as you scroll, so the browser's find only sees the ones near view; the search + field searches them all. +

+ } +
+ + + + + + + + + + + + + + @if (callWindow.padTop()) { + + + + } + @for (shown of shownCalls(); track shown.entry.side + shown.entry.id) { + @let entry = shown.entry; + + + + + + + + + + } + @if (callWindow.padBottom()) { + + + + } + +
SideMethodURLPageStatusTimeNotes
+ {{ + entry.side === 'server' ? 'SSR' : 'Client' + }} + {{ entry.method }} + + + {{ entry.pageUrl ?? '' }} + + {{ statusLabel(entry) }} + {{ entry.durationMs }} ms +
+ @if (entry.nativeFetch) { + fetch() + } + @if (entry.origin) { + + } + @if (entry.cacheHit) { + transfer cache + } + @if (entry.delayMs) { + delayed {{ entry.delayMs }} ms + } + @if (entry.mocked) { + mocked + } + @if (entry.faulted) { + faulted + } + @if (rulePatternOf(entry); as pattern) { + rule {{ pattern }} + } +
+
+
+ } @else if (timeline().length) { +
+

No requests match.

+

+ @if (callQuery().trim()) { + Nothing matches “{{ callQuery().trim() }}” with these filters. + } @else { + None of the {{ timeline().length }} requests fit these filters. + } +

+
+ +
+
+ } @else { +
+

No requests yet.

+

+ Add withPangular() to provideHttpClient, then load a page of the + app. +

+
+ } + @if (selectedCall(); as detail) { +
+ } + `, + styles: ` + @use 'mixins' as m; + @use 'network' as net; + + @include net.controls; + .filters { + display: flex; + flex-wrap: wrap; + align-items: center; + gap: 8px 12px; + margin: 0 0 12px; + } + .live-row { + display: flex; + flex-wrap: wrap; + align-items: center; + gap: 8px 12px; + margin: -4px 0 12px; + } + .search { + position: relative; + flex: 1 1 220px; + min-width: 0; + } + .search-icon { + position: absolute; + top: 50%; + left: 12px; + width: 14px; + height: 14px; + transform: translateY(-50%); + fill: none; + stroke: var(--text-3); + stroke-width: 2.2; + stroke-linecap: round; + pointer-events: none; + } + .search:focus-within .search-icon { + stroke: var(--accent); + } + .filters input[type='search'] { + height: var(--control-h); + padding-left: 34px; + } + .filters .side-filter { + flex: 0 0 140px; + } + .failed-toggle { + flex: none; + height: var(--control-h); + font-size: 13px; + font-weight: 500; + } + .total { + flex: none; + color: var(--text-2); + font-size: 12px; + white-space: nowrap; + font-variant-numeric: tabular-nums; + } + /* "0 of 0" says nothing before the first call; the empty state below explains it. */ + .filters.no-calls .total { + display: none; + } + @include net.table; + @include net.status; + .view-toggle { + display: inline-flex; + border: 1px solid var(--control-border); + border-radius: var(--radius-sm); + overflow: hidden; + } + .view-toggle button { + height: calc(var(--control-h) - 2px); + padding: 0 10px; + border: 0; + border-radius: 0; + background: transparent; + color: var(--text-2); + } + .view-toggle button + button { + border-left: 1px solid var(--border-strong); + } + .view-toggle button[aria-pressed='true'] { + background: var(--accent-soft); + color: var(--text-strong); + } + .view-toggle button:focus-visible { + @include m.focus-ring(-2px); + } + @include net.preview; + `, +}) +export class CallTimeline { + private readonly state = inject(NetworkState); + protected readonly timeline = this.state.timeline; + protected readonly droppedCalls = this.state.droppedCalls; + protected readonly maxCalls = this.state.maxCalls; + protected readonly callFeed = this.state.callFeed; + protected readonly callQuery = this.state.callQuery; + protected readonly callSort = this.state.callSort; + protected readonly sideFilter = this.state.sideFilter; + protected readonly sideOptions = this.state.sideOptions; + protected readonly failedOnly = this.state.failedOnly; + protected readonly timelineView = this.state.timelineView; + protected readonly countText = this.state.countText; + protected readonly filterStatus = this.state.filterStatus; + protected readonly visibleCalls = this.state.visibleCalls; + protected readonly waterfallCalls = this.state.waterfallCalls; + protected readonly selectedCall = this.state.selectedCall; + + protected readonly callTone = callTone; + protected readonly statusLabel = statusLabel; + + /** A long call list renders only the rows near view in its scroll box. */ + protected readonly callWindow = new VirtualWindow({ + count: computed(() => this.visibleCalls().length), + estimate: 37, + }); + protected readonly shownCalls = computed(() => { + const { start, end } = this.callWindow.range(); + return this.visibleCalls() + .slice(start, end) + .map((entry, i) => ({ entry, index: start + i })); + }); + private readonly callsBody = viewChild>('callsBody'); + + constructor() { + // Newest first, so following the newest call keeps the table scrolled to the top. + followNewest(this.callFeed, () => { + if (this.callSort()) return; + // The SSR requests table comes first and has a .table-wrap too. + const wrap = this.callsBody()?.nativeElement.closest('.table-wrap'); + if (wrap) wrap.scrollTop = 0; + }); + effect(() => { + const body = this.callsBody()?.nativeElement; + if (body) this.callWindow.attach(body); + }); + } + + protected rulePatternOf(call: HttpCall): string | null { + return this.state.rulePatternOf(call); + } + + protected openCall(id: string) { + this.state.openCall(id); + } + + protected closePreview() { + this.state.closePreview(); + } + + protected clearCallFilters() { + this.state.clearCallFilters(); + } +} diff --git a/app/src/pages/network/fault-rules.ts b/app/src/pages/network/fault-rules.ts new file mode 100644 index 00000000..daa8801f --- /dev/null +++ b/app/src/pages/network/fault-rules.ts @@ -0,0 +1,262 @@ +import { Component, inject } from '@angular/core'; +import { Select } from '../../ui/select'; +import { + HTTP_STATUS_OPTIONS, + mocksOnServer, + statusTone, + targetLabel, + type HttpRule, + type RuleDraft, +} from './http-model'; +import { NetworkState } from './network-state'; +import { RuleMatchCount } from './rule-match-count'; +import { RulePresets } from './rule-presets'; +import { RuleState } from './rule-state'; +import type { SelectOption } from '../../ui/select'; + +/** The fault injection section of the Network page: presets, the rule form and the rule list. */ +@Component({ + selector: 'section[appFaultRules]', + imports: [RuleMatchCount, RulePresets, Select], + template: ` +

Fault injection

+ @if (!canWrite()) { +

{{ writesOff }}

+ } + +
+ + +
+
+ Method + +
+
+ Apply on + +
+
+
+
+ Status + +
+ +
+ + +

{{ bodyError() }}

+ @if (draftMocksOnServer()) { +

+ SSR mocks are not transferred to the client: the browser requests the URL again and gets + the real response unless the rule also applies on the client. +

+ } +

{{ draftHint() }}

+
+ +
+ + +

Rules ({{ rules().length }})

+
    + @for (rule of rules(); track rule.id) { +
  • + + + + {{ targetLabel(rule.target) }} + @if (rule.status === undefined) { + passthrough + } @else if (rule.status === 0) { + network error + } @else { + {{ rule.status }} + } + @if (rule.delayMs) { + {{ rule.delayMs }} ms + } + @if (rule.body) { + mock body + } + @if (rule.chance) { + {{ rule.chance }}% of requests + } + + @if (mocksOnServer(rule)) { +

    + The SSR mock is not written to TransferState, so the browser requests this URL again. +

    + } +
  • + } @empty { +
  • No rules. SSR rules apply on the next page load.
  • + } +
+ `, + styles: ` + @use 'network' as net; + + @include net.controls; + @include net.status; + @include net.rule-form; + `, +}) +export class FaultRules { + private readonly state = inject(NetworkState); + private readonly ruleState = inject(RuleState); + protected readonly canWrite = this.state.canWrite; + protected readonly writesOff = this.state.writesOff; + protected readonly timeline = this.state.timeline; + protected readonly rules = this.state.rules; + protected readonly draft = this.ruleState.draft; + protected readonly draftRule = this.ruleState.draftRule; + protected readonly draftHint = this.ruleState.draftHint; + protected readonly draftMocksOnServer = this.ruleState.draftMocksOnServer; + protected readonly bodyError = this.ruleState.bodyError; + protected readonly addingRule = this.ruleState.addingRule; + protected readonly methodOptions = this.ruleState.methodOptions; + protected readonly bodyPlaceholder = '{ "error": "Service unavailable" }'; + protected readonly statusOptions = HTTP_STATUS_OPTIONS; + protected readonly targetOptions: SelectOption[] = [ + { value: 'both', label: 'SSR + client' }, + { value: 'server', label: 'SSR only' }, + { value: 'client', label: 'Client only' }, + ]; + + protected readonly mocksOnServer = mocksOnServer; + protected readonly statusTone = statusTone; + protected readonly targetLabel = targetLabel; + + protected setDraft(key: K, value: RuleDraft[K]) { + this.ruleState.setDraft(key, value); + } + + protected patch(key: keyof RuleDraft, event: Event) { + this.ruleState.patch(key, event); + } + + protected addRule(event: Event) { + void this.ruleState.addRule(event); + } + + protected addPreset(id: string) { + void this.ruleState.addPreset(id); + } + + protected toggleRule(id: string) { + this.ruleState.toggleRule(id); + } + + protected removeRule(id: string) { + void this.ruleState.removeRule(id); + } +} diff --git a/app/src/pages/network/http-model.ts b/app/src/pages/network/http-model.ts new file mode 100644 index 00000000..b89282ae --- /dev/null +++ b/app/src/pages/network/http-model.ts @@ -0,0 +1,365 @@ +/** The data the Network page shows, as the `http` shared state sends it, and pure helpers for it. */ +import { + CACHE_SKIP_TEXT, + HTTP_RULE_STATUSES, + type CacheSkip, +} from '@pangular-inspector/devtools/internal/config'; +import { prettyJson } from '../../format'; +import type { SelectOption } from '../../ui/select'; + +export type HttpSide = 'client' | 'server'; + +export interface HttpRule { + id: string; + pattern: string; + method?: string; + enabled: boolean; + target: HttpSide | 'both'; + status?: number; + delayMs?: number; + body?: string; + chance?: number; +} + +export interface HttpCall { + id: string; + url: string; + method: string; + status: number; + durationMs: number; + side: HttpSide; + cacheHit: boolean; + faulted: boolean; + mocked?: boolean; + delayMs?: number; + cancelled?: boolean; + ruleId?: string; + rulePattern?: string; + pageUrl?: string; + requestId?: string; + /** The Angular API that likely started the call, from a stack heuristic. */ + origin?: 'httpResource' | 'resource' | 'defer'; + cacheStored?: boolean; + cacheSkip?: CacheSkip; + at: number; + error?: string; + preview?: string; + requestHeaders?: Record; + responseHeaders?: Record; + /** Made with the page's own `fetch()`, not through `HttpClient`. */ + nativeFetch?: true; +} + +export interface SsrNavigation { + url: string; + finalUrl?: string; + outcome: string; + reason?: string; + durationMs?: number; + guards?: { names: string[]; passed?: boolean; ms?: number }; + resolvers?: { names: string[]; ms?: number }; +} + +export interface SsrRequest { + id: string; + method: string; + url: string; + status: number; + at: number; + durationMs: number; + renderMs: number; + bytes: number; + renderMode: 'server' | 'prerender' | 'client' | 'redirect' | 'not-rendered' | 'unknown'; + fetches: number; + fetchMs: number; + headers: Record; + navigations?: SsrNavigation[]; + overrides?: { id: string; kind: SsrOverrideKind; applied: boolean; note?: string }[]; + compressedBeforeTrace?: boolean; + aborted?: boolean; +} + +export type SsrOverrideKind = 'render-error' | 'client-render' | 'state-edit'; + +export interface SsrOverride { + id: string; + kind: SsrOverrideKind; + pattern: string; + enabled: boolean; + message?: string; + key?: string; + value?: string; +} + +export interface OverrideDraft { + kind: SsrOverrideKind; + pattern: string; + message: string; + key: string; + value: string; +} + +export const EMPTY_OVERRIDE: OverrideDraft = { + kind: 'render-error', + pattern: '', + message: '', + key: '', + value: '', +}; + +export const OVERRIDE_LABEL: Record = { + 'render-error': 'Render error', + 'client-render': 'Client render', + 'state-edit': 'TransferState edit', +}; + +export const RENDER_MODE_LABEL: Record = { + server: 'Server', + prerender: 'Prerender', + client: 'Client', + redirect: 'Redirect', + 'not-rendered': 'Not rendered', + unknown: 'Unknown', +}; + +export interface PayloadEntry { + key: string; + http?: { url?: string; status?: number; statusText?: string; responseType?: string }; + source?: 'http' | 'analog' | 'hydration'; + fn?: { id: string; name?: string; file?: string }; + size: number; + value: unknown; +} + +export interface HydrationMismatch { + component: string; + /** `component` is a class name (`ProductCard`), not a node name (`app-card`). */ + isClass?: boolean; + expected?: string; + actual?: string; +} + +export interface HydrationStats { + enabled: boolean; + hydratedComponents?: number; + hydratedNodes?: number; + componentsSkippedHydration?: number; + deferBlocksWithIncrementalHydration?: number; + nodes?: { hydrated: number; skipped: number; mismatched: number }; + mismatches?: HydrationMismatch[]; + skipHydrationHosts: string[]; + warnings: string[]; + warningsCaptured?: boolean; + stableMs?: number; +} + +export interface HttpPayload { + found: boolean; + size: number; + entries: PayloadEntry[]; + error?: string; + /** Set when the payload came from Refetch, not from the HTML the tab was served with. */ + refetchedAt?: number; +} + +export interface HttpPage { + pageId: string; + url: string; + initialUrl?: string; + title: string; + hydration: HydrationStats | null; + calls: HttpCall[]; + dropped?: number; + ssrRequestId?: string; + firstSeenAt?: number; + reportedAt: number; +} + +export interface HttpState { + serverCalls: HttpCall[]; + serverDropped?: number; + requests?: SsrRequest[]; + pages: HttpPage[]; + rules: HttpRule[]; + ssrOverrides?: SsrOverride[]; +} + +export interface RuleDraft { + pattern: string; + method: string; + target: HttpRule['target']; + status: string; + delayMs: string; + body: string; + chance: string; +} + +export const EMPTY_DRAFT: RuleDraft = { + pattern: '', + method: '', + target: 'both', + status: '', + delayMs: '', + body: '', + chance: '', +}; + +/** A new fault rule id, unique enough for one rule list. */ +export function newRuleId(): string { + return `r${Date.now().toString(36)}${Math.random().toString(36).slice(2, 6)}`; +} + +/** The chance field as a whole percent, null when it is not one from 1 to 99, undefined when empty. */ +export function chanceOf(text: string): number | null | undefined { + if (!text.trim()) return undefined; + const chance = Number(text); + return Number.isInteger(chance) && chance >= 1 && chance <= 99 ? chance : null; +} + +export function pathOf(url: string): string { + try { + const parsed = new URL(url, 'http://x'); + return parsed.pathname + parsed.search; + } catch { + return url; + } +} + +const REDACTED_IN_URL = /\[redacted\]|%5Bredacted%5D/gi; + +/** + * A rule pattern for a recorded call: its path and query, without the origin, so it + * matches the relative client URL and the absolute SSR URL. A relative URL stays as + * recorded, since `api/x` never contains `/api/x`. A redacted value becomes `*`, + * because the real request carries the secret. + */ +export function mockPattern(url: string): string { + const absolute = /^([a-z][a-z\d+.-]*:|\/\/)/i.test(url); + return (absolute ? pathOf(url) : url).replace(REDACTED_IN_URL, '*'); +} + +/** The preview as a mock body, when it is complete JSON (the rule form takes JSON only). */ +export function jsonBody(preview: string): string | null { + const pretty = prettyJson(preview); + if (pretty !== null) return pretty; + try { + JSON.parse(preview); + return preview.trim(); + } catch { + return null; + } +} + +export const STANDARD_METHODS = ['GET', 'POST', 'PUT', 'PATCH', 'DELETE']; + +/** + * The path of a page, as an SSR override pattern. The query is left out because the panel only + * has a redacted copy of it, which would not match the real request. + */ +function pagePath(url: string): string { + try { + return new URL(url, 'http://x').pathname; + } catch { + return ''; + } +} + +/** + * The page path as a prefilled override pattern. Patterns match anywhere in the URL, so the site + * root (`/`) would match every page; it is left empty for the user to fill in. + */ +export function pagePattern(url: string): string { + const path = pagePath(url); + return path === '/' ? '' : path; +} + +/** A part the server masked in a payload key, plain or URL-encoded. */ +export const REDACTED_PART = /\[redacted\]|%5Bredacted%5D/i; + +/** The longest TransferState key `set-ssr-overrides` keeps (see `sanitizeSsrOverrides`). */ +export const MAX_OVERRIDE_KEY = 200; +export const MAX_RULES = 50; +export const MAX_PATTERN = 500; +export const MAX_BODY = 100_000; + +export const HTTP_STATUS_OPTIONS: SelectOption[] = [ + { value: '', label: 'None' }, + ...HTTP_RULE_STATUSES.map(([status, reason]) => ({ + value: String(status), + label: `${status} ${reason}`, + })), +]; + +export function statusTone(status: number | undefined): 'ok' | 'redirect' | 'bad' | 'neutral' { + if (status === undefined) return 'neutral'; + if (status === 0 || status >= 400) return 'bad'; + if (status >= 300) return 'redirect'; + if (status >= 200) return 'ok'; + return 'neutral'; +} + +export function statusLabel(call: HttpCall): string { + if (call.cancelled) return 'cancelled'; + return call.status ? String(call.status) : 'ERR'; +} + +export function callTone(call: HttpCall): 'ok' | 'redirect' | 'bad' | 'neutral' { + return call.cancelled ? 'neutral' : statusTone(call.status); +} + +/** A failed call has a status of 400 or more, no status (ERR) or was cancelled. */ +export function isFailed(call: HttpCall): boolean { + return !!call.cancelled || !call.status || call.status >= 400; +} + +/** The preview as shown: JSON indented by 2 spaces, other text as recorded (both already redacted). */ +export function previewText(call: HttpCall): string | undefined { + if (call.preview === undefined) return undefined; + return prettyJson(call.preview) ?? call.preview; +} + +export function mocksOnServer(rule: Pick): boolean { + return ( + rule.target !== 'client' && rule.status !== undefined && rule.status > 0 && rule.status < 400 + ); +} + +export function targetLabel(target: HttpRule['target']): string { + return target === 'both' ? 'SSR + client' : target === 'server' ? 'SSR only' : 'Client only'; +} + +export function overrideLabel(kind: SsrOverrideKind): string { + return OVERRIDE_LABEL[kind] ?? kind; +} + +export function renderModeLabel(mode: SsrRequest['renderMode']): string { + return RENDER_MODE_LABEL[mode] ?? 'Unknown'; +} + +export function skipText(skip: CacheSkip): string { + return CACHE_SKIP_TEXT[skip] ?? ''; +} + +export function msLabel(ms: number | undefined): string { + return ms === undefined ? 'n/a' : `${ms} ms`; +} + +/** A guard that returns a UrlTree reports shouldActivate false, so a redirect is not a rejection. */ +export function guardVerdict(nav: SsrNavigation): 'redirected' | 'rejected' | '' { + if (nav.guards?.passed !== false) return ''; + return nav.outcome === 'redirected' ? 'redirected' : 'rejected'; +} + +/** The response encoding when a compression middleware ran before `ssrMiddleware` saw the body. */ +export function compressedWith(req: SsrRequest): string | undefined { + // The final Content-Encoding is also set when compression runs after ssrMiddleware, as it should. + if (!req.compressedBeforeTrace) return undefined; + return req.headers['content-encoding'] ?? 'unknown encoding'; +} + +export function payloadLabel(entry: PayloadEntry): string | null { + if (entry.source === 'hydration') return 'hydration annotations'; + if (entry.fn) return `Analog server function ${entry.fn.name ?? entry.fn.id}`; + if (entry.source === 'analog') return 'Analog'; + return null; +} diff --git a/app/src/pages/network/hydration-stats.ts b/app/src/pages/network/hydration-stats.ts new file mode 100644 index 00000000..243ef7e0 --- /dev/null +++ b/app/src/pages/network/hydration-stats.ts @@ -0,0 +1,148 @@ +import { Component, inject } from '@angular/core'; +import { NetworkState } from './network-state'; + +/** The hydration stats, mismatches and warnings of the page selected on the Network page. */ +@Component({ + selector: 'section[appHydrationStats]', + template: ` +

Hydration

+ @if (selected()?.hydration; as h) { +
+
+
Enabled
+
+ {{ + h.enabled ? 'yes' : 'no (client render only)' + }} +
+
+
+
Hydrated components
+
{{ h.hydratedComponents ?? 'n/a' }}
+
+
+
Hydrated nodes
+
{{ h.hydratedNodes ?? 'n/a' }}
+
+
+
Skipped components
+
{{ h.componentsSkippedHydration ?? 'n/a' }}
+
+
+
App stable after
+
{{ h.stableMs === undefined ? 'n/a' : h.stableMs + ' ms' }}
+
+
+
Incremental defer blocks
+
{{ h.deferBlocksWithIncrementalHydration ?? 'n/a' }}
+
+ @if (h.nodes; as n) { +
+
DOM nodes hydrated
+
{{ n.hydrated }}
+
+
+
DOM nodes skipped
+
{{ n.skipped }}
+
+
+
Mismatched components
+
{{ n.mismatched }}
+
+ } +
+ @if (h.mismatches?.length) { +

Mismatches ({{ h.mismatches!.length }})

+
    + @for (m of h.mismatches; track $index) { +
  • + {{ m.isClass ? m.component : '<' + m.component + '>' }} + @if (m.expected) { + Expected {{ m.expected }} + } + @if (m.actual) { + Actual {{ m.actual }} + } +
  • + } +
+ } + @if (h.skipHydrationHosts.length) { +

ngSkipHydration hosts

+
    + @for (host of h.skipHydrationHosts; track $index) { +
  • + {{ host }} +
  • + } +
+ } + @if (h.warningsCaptured === false) { +

Warnings

+

+ Not captured: add providePangularHttp() to the app providers. +

+ } @else { +

Warnings ({{ h.warnings.length }})

+ @for (warning of h.warnings; track $index) { +
{{ warning }}
+ } @empty { +

No hydration warnings.

+ } + } + } @else { +
+

No hydration data for this page.

+

Open a server rendered page of the app to see its stats.

+
+ } + `, + styles: ` + @use 'network' as net; + + @include net.controls; + .mismatches li { + display: grid; + gap: 4px; + padding: 8px 12px; + border: 1px solid var(--border); + border-radius: var(--radius-sm); + background: var(--surface-2); + } + .mismatch-row { + display: flex; + gap: 8px; + min-width: 0; + font-size: 12px; + } + .mismatch-row code { + min-width: 0; + overflow-wrap: anywhere; + } + .mismatch-label { + flex: none; + width: 64px; + color: var(--text-2); + } + @include net.status; + @include net.pre; + .plain { + display: grid; + gap: 8px; + margin: 0; + padding: 0; + list-style: none; + } + .plain li { + overflow-wrap: anywhere; + } + @include net.stats; + `, +}) +export class HydrationStats { + protected readonly selected = inject(NetworkState).selected; +} diff --git a/app/src/pages/network/network-state.ts b/app/src/pages/network/network-state.ts new file mode 100644 index 00000000..1ce5f40b --- /dev/null +++ b/app/src/pages/network/network-state.ts @@ -0,0 +1,399 @@ +import { + ElementRef, + Injectable, + Injector, + afterNextRender, + computed, + inject, + linkedSignal, + signal, + untracked, + type OnDestroy, + type Signal, +} from '@angular/core'; +import type { DevframeRpcClient } from 'devframe/client'; +import { hostPageId } from '../../page-id'; +import { rpcCall as call } from '../../rpc'; +import { actionAllowed, actionBlockedMessage, panelConfig } from '../../devtools-config'; +import { LiveFeed } from '../../ui/live-feed'; +import { sortRows, type SortState } from '../../ui/sort-header'; +import type { SelectOption } from '../../ui/select'; +import { + isFailed, + pathOf, + previewText, + skipText, + type HttpCall, + type HttpPage, + type HttpPayload, + type HttpRule, + type HttpSide, + type HttpState, + type SsrOverride, + type SsrRequest, +} from './http-model'; + +/** + * The state the Network page and its sections share: the `http` and `http-payloads` shared + * states, the selected page, call and SSR request, the timeline filters and the toolbar message. + * Provided by the page, so every section of one page reads the same signals. + */ +@Injectable() +export class NetworkState implements OnDestroy { + private rpcSource: Signal = signal(null); + readonly rpc = computed(() => this.rpcSource()); + readonly canWrite = computed(() => actionAllowed(this.rpc(), 'http')); + readonly writesOff = actionBlockedMessage('http'); + + readonly loading = signal(false); + readonly failed = signal(false); + readonly serverCalls = signal([]); + readonly pages = signal([]); + readonly payloads = signal>({}); + readonly serverDropped = signal(0); + readonly requests = signal([]); + readonly rules = signal([]); + readonly overrides = signal([]); + readonly message = signal(''); + readonly refetching = signal(false); + + private readonly hostPageId = hostPageId(); + readonly selectedPageId = linkedSignal({ + source: () => this.pages(), + computation: (pages, previous) => + previous?.value && pages.some((p) => p.pageId === previous.value) + ? previous.value + : (pages.find((p) => p.pageId === this.hostPageId)?.pageId ?? pages[0]?.pageId ?? null), + }); + readonly selectedCallId = signal(null); + + private unsubscribe: (() => void)[] = []; + private destroyed = false; + private readonly injector = inject(Injector); + private readonly host = inject>(ElementRef); + + readonly selected = computed( + () => this.pages().find((p) => p.pageId === this.selectedPageId()) ?? null, + ); + + private readonly pageRequestId = computed(() => this.selected()?.ssrRequestId ?? null); + readonly selectedRequestId = linkedSignal(() => this.pageRequestId()); + + readonly selectedPayload = computed(() => { + const pageId = this.selectedPageId(); + return pageId ? (this.payloads()[pageId] ?? null) : null; + }); + + readonly maxCalls = computed(() => panelConfig(this.rpc()).limits.httpCalls); + + readonly droppedCalls = computed(() => (this.selected()?.dropped ?? 0) + this.serverDropped()); + + readonly pageServerCalls = computed(() => { + const initialUrl = this.selected()?.initialUrl; + if (!initialUrl) return this.serverCalls(); + return this.serverCalls().filter((c) => !c.pageUrl || c.pageUrl === initialUrl); + }); + + /** The server calls of the SSR request that served the selected page, for the HTTP lint. */ + readonly renderServerCalls = computed(() => { + const id = this.pageRequestId(); + return id ? this.serverCalls().filter((c) => c.requestId === id) : []; + }); + + /** Every call of the selected page as it arrives, newest first. */ + private readonly liveTimeline = computed(() => + [...this.pageServerCalls(), ...(this.selected()?.calls ?? [])].sort((a, b) => b.at - a.at), + ); + /** Pause holds the timeline as it is while the app keeps calling. */ + readonly callFeed = new LiveFeed({ + name: 'network', + source: this.liveTimeline, + key: (c) => `${c.side}:${c.id}`, + scope: this.selectedPageId, + }); + readonly timeline = computed(() => [...this.callFeed.items()]); + /** The column the call table is sorted by; `null` keeps newest first. */ + readonly callSort = signal(null); + + readonly callQuery = signal(''); + /** The timeline as a table of every call, or a waterfall of the client calls by navigation. */ + readonly timelineView = signal<'table' | 'waterfall'>('table'); + readonly waterfallCalls = computed(() => this.visibleCalls().filter((c) => c.side === 'client')); + readonly sideFilter = signal('all'); + readonly failedOnly = signal(false); + readonly sideOptions: SelectOption[] = [ + { value: 'all', label: 'All sides' }, + { value: 'server', label: 'SSR' }, + { value: 'client', label: 'Client' }, + ]; + + readonly visibleCalls = computed(() => { + const query = this.callQuery().trim().toLowerCase(); + const side = this.sideFilter() ?? 'all'; + const failedOnly = this.failedOnly(); + const matching = this.timeline().filter( + (c) => + (side === 'all' || c.side === side) && + (!failedOnly || isFailed(c)) && + (!query || + `${c.method} ${c.url}`.toLowerCase().includes(query) || + `${c.method} ${pathOf(c.url)}`.toLowerCase().includes(query)), + ); + return sortRows(matching, this.callSort(), { + method: (c) => c.method, + url: (c) => c.url, + status: (c) => (c.cancelled || !c.status ? undefined : c.status), + time: (c) => c.durationMs, + }) as HttpCall[]; + }); + + /** + * The count, announced only when a filter changes. The visible count also changes with every + * call the app makes, which would make a screen reader talk while the user uses the app. + */ + /** What the view shows out of every call: the waterfall shows only client calls. */ + readonly countText = computed(() => { + const total = this.timeline().length; + if (this.timelineView() !== 'waterfall') return `${this.visibleCalls().length} of ${total}`; + const client = this.waterfallCalls().length; + return `${client} client ${client === 1 ? 'call' : 'calls'} of ${total}`; + }); + readonly filterStatus = computed(() => { + this.callQuery(); + this.sideFilter(); + this.failedOnly(); + this.timelineView(); + // A filter change that keeps the same counts still gets announced: the text flips a + // trailing no-break space so the live region sees a change. + this.filterFlip = !this.filterFlip; + const text = untracked(() => this.countText()); + return this.filterFlip ? `${text} ` : text; + }); + private filterFlip = true; + + /** Follows the visible rows, so the preview hides while filters hide its call. */ + readonly selectedCall = computed( + () => this.visibleCalls().find((c) => c.id === this.selectedCallId()) ?? null, + ); + + /** The SSR request that served the selected page, for the HAR export. */ + readonly pageSsrRequest = computed( + () => this.requests().find((r) => r.id === this.pageRequestId()) ?? null, + ); + + readonly selectedRequest = computed( + () => this.requests().find((r) => r.id === this.selectedRequestId()) ?? null, + ); + + readonly requestCalls = computed(() => { + const id = this.selectedRequest()?.id; + return id ? this.serverCalls().filter((c) => c.requestId === id) : []; + }); + + readonly requestPage = computed(() => { + const id = this.selectedRequest()?.id; + return id ? (this.pages().find((p) => p.ssrRequestId === id) ?? null) : null; + }); + + readonly refetched = computed(() => { + const request = this.selectedRequest(); + const page = this.requestPage(); + if (!request || !page) return []; + const fetched = new Set( + this.requestCalls() + .filter((c) => c.status) + .map((c) => `${c.method} ${pathOf(c.url)}`), + ); + return page.calls.filter( + (c) => + c.side === 'client' && + // The page's own fetch() never goes through the transfer cache, so it is no cache miss. + !c.nativeFetch && + !c.cacheHit && + !c.mocked && + c.at >= request.at && + fetched.has(`${c.method} ${pathOf(c.url)}`), + ); + }); + + readonly pageOptions = computed(() => + this.pages().map((page) => ({ value: page.pageId, label: page.title || page.url })), + ); + + /** Reads the RPC client from the page's `rpc` input. Called once, by the page. */ + connect(rpc: Signal) { + this.rpcSource = rpc; + } + + async load(client: DevframeRpcClient) { + this.loading.set(true); + this.failed.set(false); + try { + const rpc = client.scope('pangular').rpc; + const [state, payloads] = await Promise.all([ + rpc.sharedState('http'), + rpc.sharedState('http-payloads'), + ]); + if (this.destroyed) return; + const apply = (value: unknown) => { + const snapshot = value as HttpState | undefined; + this.serverCalls.set(snapshot?.serverCalls ?? []); + this.serverDropped.set(snapshot?.serverDropped ?? 0); + this.requests.set([...(snapshot?.requests ?? [])].reverse()); + this.pages.set(snapshot?.pages ?? []); + this.rules.set(snapshot?.rules ?? []); + this.overrides.set(snapshot?.ssrOverrides ?? []); + }; + const applyPayloads = (value: unknown) => + this.payloads.set( + (value as { pages?: Record } | undefined)?.pages ?? {}, + ); + apply(state.value()); + applyPayloads(payloads.value()); + this.stopListening(); + this.unsubscribe = [state.on('updated', apply), payloads.on('updated', applyPayloads)]; + } catch { + this.failed.set(true); + } finally { + this.loading.set(false); + } + } + + retry() { + const client = this.rpc(); + if (client) void this.load(client); + } + + ngOnDestroy() { + this.destroyed = true; + this.stopListening(); + } + + private stopListening() { + for (const stop of this.unsubscribe.splice(0)) stop(); + } + + refetchReason(call: HttpCall): string { + const key = `${call.method} ${pathOf(call.url)}`; + const matches = this.requestCalls().filter((c) => `${c.method} ${pathOf(c.url)}` === key); + const first = matches[0]; + // Several matching server calls with different outcomes can't be paired, so name no reason. + return first?.cacheSkip && matches.every((c) => c.cacheSkip === first.cacheSkip) + ? skipText(first.cacheSkip) + : ''; + } + + rulePatternOf(call: HttpCall): string | null { + if (call.rulePattern) return call.rulePattern; + if (!call.ruleId) return null; + return this.rules().find((rule) => rule.id === call.ruleId)?.pattern ?? null; + } + + clearCallFilters() { + this.callQuery.set(''); + this.sideFilter.set('all'); + this.failedOnly.set(false); + this.query('#timeline-search')?.focus(); + } + + openCall(id: string) { + this.selectedCallId.set(id); + this.afterRender(() => this.query('#preview-heading')?.focus()); + } + + closePreview() { + const id = this.selectedCallId(); + this.selectedCallId.set(null); + if (!id) return; + const buttons = this.host.nativeElement.querySelectorAll('button[data-call-id]'); + [...buttons].find((button) => button.dataset['callId'] === id)?.focus(); + } + + async copyPreview(call: HttpCall) { + const text = previewText(call); + if (!text) return; + await this.copy(text); + } + + async copyKey(key: string) { + await this.copy(key); + } + + private async copy(text: string) { + try { + await navigator.clipboard.writeText(text); + this.message.set('Copied.'); + } catch { + this.message.set('The clipboard is not available here.'); + } + } + + async clearCalls() { + try { + await call(this.rpc(), 'clear-http-calls'); + // A paused feed holds the old calls, so show the cleared list. + this.callFeed.resume(); + this.selectedCallId.set(null); + this.message.set('Timeline cleared.'); + } catch { + this.message.set('Could not clear the timeline.'); + } + } + + /** Asks the page to render its URL again on the server and push the payload it gets. */ + async refetchPayload(pageId: string) { + if (this.refetching()) return; + this.refetching.set(true); + try { + const result = (await call(this.rpc(), 'request-http-payload-refetch', { pageId })) as + { error?: string; found?: boolean; entries?: number; status?: number } | null | undefined; + if (!result) this.announce('Could not reach the devtools server.'); + else if (result.error) this.announce(result.error); + else if (!result.found) { + this.announce(`The server answered ${result.status} without a TransferState payload.`); + } else { + const count = result.entries ?? 0; + this.announce(`Refetched: ${count} entr${count === 1 ? 'y' : 'ies'}.`); + } + } catch { + this.announce('Could not refetch the payload.'); + } finally { + this.refetching.set(false); + } + } + + /** Clears a repeated message first, so the live region speaks again for the same text. */ + announce(text: string) { + if (this.message() !== text) { + this.message.set(text); + return; + } + this.message.set(''); + // A newer message set before the render wins over this restore. + this.afterRender(() => { + if (this.message() === '') this.message.set(text); + }); + } + + /** The first element of the page that matches `selector`, in any section. */ + query(selector: string): T | null { + return this.host.nativeElement.querySelector(selector); + } + + /** + * The removed row's button is gone, so focus moves to the Remove button that took its place, + * the one before it when the last row went, or the list heading when the list is empty. + */ + focusAfterRemove(buttons: string, index: number, heading: string) { + this.afterRender(() => { + const host = this.host.nativeElement; + const remaining = host.querySelectorAll(buttons); + const next = remaining[Math.min(index, remaining.length - 1)]; + (next ?? host.querySelector(heading))?.focus(); + }); + } + + afterRender(run: () => void) { + afterNextRender(run, { injector: this.injector }); + } +} diff --git a/app/src/pages/network/override-state.ts b/app/src/pages/network/override-state.ts new file mode 100644 index 00000000..3dca25d2 --- /dev/null +++ b/app/src/pages/network/override-state.ts @@ -0,0 +1,174 @@ +import { Injectable, computed, inject, signal } from '@angular/core'; +import { rpcCall as call } from '../../rpc'; +import type { SelectOption } from '../../ui/select'; +import { + EMPTY_OVERRIDE, + MAX_OVERRIDE_KEY, + REDACTED_PART, + pagePattern, + type OverrideDraft, + type PayloadEntry, + type SsrOverride, + type SsrOverrideKind, +} from './http-model'; +import { NetworkState } from './network-state'; + +/** The SSR override form and list: the draft, its checks, and the saves to the server. */ +@Injectable() +export class OverrideState { + private readonly state = inject(NetworkState); + + /** True while an added override is being saved, so Add can't send it twice. */ + readonly addingOverride = signal(false); + private overrideSaves = Promise.resolve(true); + readonly overrideDraft = signal({ ...EMPTY_OVERRIDE }); + /** Set when the draft came from a TransferState entry, so the form can explain the empty value. */ + readonly overrideFromPayload = signal<'http' | 'other' | null>(null); + readonly overrideKindOptions: SelectOption[] = [ + { value: 'render-error', label: 'Render error' }, + { value: 'client-render', label: 'Force Client render' }, + { value: 'state-edit', label: 'Edit TransferState entry' }, + ]; + + readonly overrideValueError = computed(() => { + const value = this.overrideDraft().value.trim(); + if (!value) return ''; + try { + JSON.parse(value); + return ''; + } catch { + return 'The value must be valid JSON.'; + } + }); + + readonly overrideReady = computed(() => { + const d = this.overrideDraft(); + if (!d.pattern.trim() || this.state.overrides().length >= 20) return false; + if (d.kind === 'state-edit') return !!d.key.trim() && !this.overrideValueError(); + return true; + }); + + setOverrideDraft(key: K, value: OverrideDraft[K]) { + this.overrideDraft.update((d) => ({ ...d, [key]: value })); + // The "filled in from the payload" note only describes the entry the form was filled from. + if (key === 'kind' && value !== 'state-edit') this.overrideFromPayload.set(null); + } + + patchOverride(key: keyof OverrideDraft, event: Event) { + const value = (event.target as HTMLInputElement).value; + this.overrideDraft.update((d) => ({ ...d, [key]: value })); + if (key === 'key') this.overrideFromPayload.set(null); + } + + /** + * The edit needs HTTP writes and a key the server keeps exactly: it trims keys and drops longer + * ones than it accepts. A key with a redacted part can never match the real one. + */ + canEditEntry(entry: PayloadEntry): boolean { + const { key } = entry; + return ( + this.state.canWrite() && + !!key && + key === key.trim() && + key.length <= MAX_OVERRIDE_KEY && + !REDACTED_PART.test(key) + ); + } + + /** + * Opens the SSR overrides form as a TransferState edit for this entry. The value stays empty: + * the payload the panel holds is redacted and clipped, so copying it would write masks back. + */ + editEntry(entry: PayloadEntry) { + if (!this.canEditEntry(entry)) return; + const page = this.state.selected(); + this.overrideDraft.set({ + ...EMPTY_OVERRIDE, + kind: 'state-edit', + pattern: page ? pagePattern(page.initialUrl ?? page.url) : '', + key: entry.key, + }); + this.overrideFromPayload.set(entry.http ? 'http' : 'other'); + this.state.message.set('Editing the TransferState entry in SSR overrides.'); + this.state.afterRender(() => { + const target = this.state.query( + this.overrideDraft().pattern ? '#override-value' : '#override-pattern', + ); + target?.scrollIntoView?.({ block: 'center' }); + target?.focus(); + }); + } + + async addOverride(event: Event) { + event.preventDefault(); + if (!this.overrideReady() || this.addingOverride()) return; + const d = this.overrideDraft(); + const next: SsrOverride = { + id: `o${Date.now().toString(36)}${Math.random().toString(36).slice(2, 6)}`, + kind: d.kind, + pattern: d.pattern.trim(), + enabled: true, + ...(d.kind === 'render-error' && d.message.trim() ? { message: d.message.trim() } : {}), + ...(d.kind === 'state-edit' ? { key: d.key.trim() } : {}), + ...(d.kind === 'state-edit' && d.value.trim() ? { value: d.value.trim() } : {}), + }; + this.addingOverride.set(true); + const added = await this.saveOverrides( + (overrides) => [...overrides, next], + 'Override added. Reload the page.', + ); + this.addingOverride.set(false); + if (added) { + this.overrideDraft.set({ ...EMPTY_OVERRIDE, kind: d.kind }); + this.overrideFromPayload.set(null); + this.state.query('#override-pattern')?.focus(); + } + } + + toggleOverride(id: string) { + void this.saveOverrides( + (overrides) => + overrides.some((o) => o.id === id) + ? overrides.map((o) => (o.id === id ? { ...o, enabled: !o.enabled } : o)) + : null, + 'Override updated. Reload the page.', + ); + } + + async removeOverride(id: string) { + let index = -1; + const removed = await this.saveOverrides((overrides) => { + index = overrides.findIndex((o) => o.id === id); + return index < 0 ? null : overrides.filter((o) => o.id !== id); + }, 'Override removed.'); + if (removed) { + this.state.focusAfterRemove('[data-remove-override]', index, '#override-list-heading'); + } + } + + /** + * Saves run one after another, and each change is applied to the list the previous save left, + * so two quick changes never start from the same old list. `change` returns null when its + * override is gone by then. + */ + private saveOverrides( + change: (overrides: SsrOverride[]) => SsrOverride[] | null, + done: string, + ): Promise { + const save = this.overrideSaves.then(async () => { + const next = change(this.state.overrides()); + if (!next) return false; + try { + const saved = await call(this.state.rpc(), 'set-ssr-overrides', next); + this.state.overrides.set(Array.isArray(saved) ? (saved as SsrOverride[]) : next); + this.state.announce(done); + return true; + } catch { + this.state.message.set('Could not save the overrides.'); + return false; + } + }); + this.overrideSaves = save; + return save; + } +} diff --git a/app/src/pages/network/response-preview.ts b/app/src/pages/network/response-preview.ts new file mode 100644 index 00000000..0fec762c --- /dev/null +++ b/app/src/pages/network/response-preview.ts @@ -0,0 +1,120 @@ +import { Component, inject, input } from '@angular/core'; +import { HttpHeadersView } from '../http-headers'; +import { RedactionCount } from '../../ui/redaction-count'; +import { CallCopy } from './call-copy'; +import { callTone, previewText, statusLabel, type HttpCall } from './http-model'; +import { NetworkState } from './network-state'; +import { RuleState } from './rule-state'; + +/** + * The response preview of the selected call in the HTTP timeline. The timeline gives its host the + * region role, the id the URL buttons point at and Escape to close. + */ +@Component({ + selector: 'div[appResponsePreview]', + imports: [CallCopy, HttpHeadersView, RedactionCount], + template: ` + @let detail = call(); +
+

Response preview

+
+ @if (!detail.error && detail.preview) { + + } + + @if (!detail.nativeFetch) { + + } + +
+
+

+ {{ detail.method }} + {{ statusLabel(detail) }} + {{ detail.url }} +

+ @if (detail.nativeFetch) { +

+ Made with fetch() directly, which skips the HttpClient interceptor, so a fault + rule cannot mock it. +

+ } + @if (rulePatternOf(detail); as pattern) { +

+ Matched rule {{ pattern }} +

+ } + + +
{{ detail.error ?? previewText(detail) ?? '(no body)' }}
+ + `, + styles: ` + @use 'network' as net; + + @include net.controls; + @include net.status; + @include net.pre; + @include net.preview; + `, +}) +export class ResponsePreview { + readonly call = input.required(); + + private readonly state = inject(NetworkState); + private readonly ruleState = inject(RuleState); + protected readonly canWrite = this.state.canWrite; + protected readonly message = this.state.message; + + protected readonly callTone = callTone; + protected readonly previewText = previewText; + protected readonly statusLabel = statusLabel; + + protected rulePatternOf(call: HttpCall): string | null { + return this.state.rulePatternOf(call); + } + + protected copyPreview(call: HttpCall) { + void this.state.copyPreview(call); + } + + protected mockCall(call: HttpCall) { + this.ruleState.mockCall(call); + } + + protected closePreview() { + this.state.closePreview(); + } +} diff --git a/app/src/pages/network/rule-state.ts b/app/src/pages/network/rule-state.ts new file mode 100644 index 00000000..a99d0108 --- /dev/null +++ b/app/src/pages/network/rule-state.ts @@ -0,0 +1,199 @@ +import { Injectable, computed, inject, signal } from '@angular/core'; +import { isHttpRuleStatus } from '@pangular-inspector/devtools/internal/config'; +import { presetRules } from '@pangular-inspector/devtools/internal/http-data'; +import { rpcCall as call } from '../../rpc'; +import type { SelectOption } from '../../ui/select'; +import { + EMPTY_DRAFT, + MAX_BODY, + MAX_PATTERN, + MAX_RULES, + STANDARD_METHODS, + chanceOf, + jsonBody, + mockPattern, + mocksOnServer, + newRuleId, + type HttpCall, + type HttpRule, + type RuleDraft, +} from './http-model'; +import { NetworkState } from './network-state'; + +/** The fault rule form and the rule list: the draft, its checks, and the saves to the server. */ +@Injectable() +export class RuleState { + private readonly state = inject(NetworkState); + + readonly draft = signal({ ...EMPTY_DRAFT }); + /** True while an added rule is being saved, so Add can't send it twice. */ + readonly addingRule = signal(false); + private ruleSaves = Promise.resolve(true); + + readonly draftMocksOnServer = computed(() => { + const rule = this.draftRule(); + return !!rule && mocksOnServer(rule); + }); + + readonly draftRule = computed | null>(() => { + const draft = this.draft(); + const pattern = draft.pattern.trim(); + if (!pattern || pattern.length > MAX_PATTERN || this.bodyError()) return null; + if (this.state.rules().length >= MAX_RULES) return null; + const body = draft.body.trim(); + const delayMs = Math.min(Math.max(Math.round(Number(draft.delayMs)) || 0, 0), 10_000); + const status = draft.status.trim() ? Number(draft.status) : body ? 200 : undefined; + if (status !== undefined && !isHttpRuleStatus(status)) return null; + if (status === undefined && !delayMs) return null; + const chance = chanceOf(draft.chance); + if (chance === null) return null; + return { + pattern, + enabled: true, + target: draft.target, + ...(draft.method ? { method: draft.method } : {}), + ...(status !== undefined ? { status } : {}), + ...(delayMs ? { delayMs } : {}), + ...(body ? { body } : {}), + ...(chance !== undefined ? { chance } : {}), + }; + }); + + readonly draftHint = computed(() => { + const draft = this.draft(); + if (this.state.rules().length >= MAX_RULES) { + return `You can add up to ${MAX_RULES} rules. Remove one to add another.`; + } + if (!draft.pattern.trim()) return 'Enter a URL pattern to add a rule.'; + if (draft.pattern.trim().length > MAX_PATTERN) + return `The URL pattern is limited to ${MAX_PATTERN} characters.`; + if (this.bodyError()) return ''; + if (draft.status.trim() && !isHttpRuleStatus(Number(draft.status))) + return 'Pick a status from the list.'; + if (chanceOf(draft.chance) === null) return 'Chance is a whole percent from 1 to 99.'; + if (!this.draftRule()) return 'Set a status, a delay or a mock body.'; + if (!draft.status.trim() && draft.body.trim()) + return 'With no status, the mock body returns 200.'; + return ''; + }); + + readonly bodyError = computed(() => { + const body = this.draft().body.trim(); + if (!body) return ''; + if (body.length > MAX_BODY) return `The mock body is limited to ${MAX_BODY} characters.`; + try { + JSON.parse(body); + return ''; + } catch { + return 'The mock body must be valid JSON.'; + } + }); + + /** The usual methods, plus the draft's own when "Mock this request" filled in another one. */ + readonly methodOptions = computed(() => { + const draft = this.draft().method; + const methods = + draft && !STANDARD_METHODS.includes(draft) ? [...STANDARD_METHODS, draft] : STANDARD_METHODS; + return [{ value: '', label: 'Any' }, ...methods.map((m) => ({ value: m, label: m }))]; + }); + + setDraft(key: K, value: RuleDraft[K]) { + this.draft.update((draft) => ({ ...draft, [key]: value })); + } + + patch(key: keyof RuleDraft, event: Event) { + const value = (event.target as HTMLInputElement).value; + this.draft.update((draft) => ({ ...draft, [key]: value })); + } + + /** Fills the fault rule form from a recorded call and moves focus to it. Nothing is saved. */ + mockCall(call: HttpCall) { + const method = call.method.toUpperCase(); + const pattern = mockPattern(call.url); + const body = call.error || !call.preview ? null : jsonBody(call.preview); + this.draft.set({ ...EMPTY_DRAFT, pattern, method, body: body ?? '' }); + const what = `${method} ${pattern}`; + this.state.message.set( + body + ? `Filled in a rule for ${what} with the preview as its body. Check it, then add the rule.` + : call.preview && !call.error + ? `Filled in a rule for ${what}. The preview is not complete JSON, so it is not used as the body.` + : `Filled in a rule for ${what}. Set a status, a delay or a body, then add the rule.`, + ); + this.state.afterRender(() => this.state.query('#rule-pattern')?.focus()); + } + + async addRule(event: Event) { + event.preventDefault(); + const draft = this.draftRule(); + if (!draft || this.addingRule()) return; + const rule: HttpRule = { id: newRuleId(), ...draft }; + this.addingRule.set(true); + const added = await this.saveRules((rules) => [[...rules, rule], rule], 'Rule added.'); + this.addingRule.set(false); + if (added) { + this.draft.set({ ...EMPTY_DRAFT }); + this.state.query('#rule-pattern')?.focus(); + } + } + + /** Adds the rules of a built-in preset after the current ones. */ + async addPreset(id: string) { + const added = presetRules(id, newRuleId); + if (!added.length) return; + if (this.state.rules().length + added.length > MAX_RULES) { + this.state.message.set(`You can add up to ${MAX_RULES} rules. Remove one to add the preset.`); + return; + } + await this.saveRules( + (rules) => [[...rules, ...added], added[0]], + `Added ${added.length === 1 ? 'a rule' : `${added.length} rules`} for every browser request.`, + ); + } + + toggleRule(id: string) { + void this.saveRules((rules) => { + const rule = rules.find((r) => r.id === id); + if (!rule) return null; + return [rules.map((r) => (r.id === id ? { ...r, enabled: !r.enabled } : r)), rule]; + }, 'Rule updated.'); + } + + async removeRule(id: string) { + let index = -1; + const removed = await this.saveRules((rules) => { + index = rules.findIndex((r) => r.id === id); + return index < 0 ? null : [rules.filter((r) => r.id !== id), rules[index]]; + }, 'Rule removed.'); + if (removed) this.state.focusAfterRemove('[data-remove-rule]', index, '#rule-list-heading'); + } + + /** + * Saves run one after another, and each change is applied to the list the previous save left, + * so two quick changes never start from the same old list. `change` returns null when its + * rule is gone by then, and otherwise also the rule it changed, for the message. + */ + private saveRules( + change: (rules: HttpRule[]) => [HttpRule[], HttpRule] | null, + done: string, + ): Promise { + const save = this.ruleSaves.then(async () => { + const next = change(this.state.rules()); + if (!next) return false; + const [rules, changed] = next; + try { + const saved = await call(this.state.rpc(), 'set-http-rules', rules); + this.state.rules.set(Array.isArray(saved) ? (saved as HttpRule[]) : rules); + this.state.announce( + changed.target === 'client' ? done : `${done} Reload the page to apply it to SSR.`, + ); + return true; + } catch { + this.state.message.set('Could not save the rules.'); + return false; + } + }); + this.ruleSaves = save; + return save; + } +} diff --git a/app/src/pages/network/ssr-overrides.ts b/app/src/pages/network/ssr-overrides.ts new file mode 100644 index 00000000..137f81e6 --- /dev/null +++ b/app/src/pages/network/ssr-overrides.ts @@ -0,0 +1,199 @@ +import { Component, inject } from '@angular/core'; +import { Select } from '../../ui/select'; +import { overrideLabel, type OverrideDraft } from './http-model'; +import { NetworkState } from './network-state'; +import { OverrideState } from './override-state'; + +/** The SSR overrides section of the Network page: the override form and the override list. */ +@Component({ + selector: 'section[appSsrOverrides]', + imports: [Select], + template: ` +

SSR overrides

+

+ Development only. These change what the server sends for matching pages, from the next full + page load, and the request is marked overridden. +

+
+
+ Override + +
+ + @switch (overrideDraft().kind) { + @case ('render-error') { +

+ Throws while the server renders, so it needs providePangularHttp() and a + page the engine renders. Prerendered files served as static files skip it. +

+ + } + @case ('state-edit') { + + +

{{ overrideValueError() }}

+ @if (overrideFromPayload(); as from) { +

+ Filled in from the TransferState payload. The value starts empty because the panel + only shows a redacted copy, so type the JSON the server should send. + @if (from === 'http') { + For a cached HTTP response this is the whole cache record, not only the response + body. + } +

+ } + } + @case ('client-render') { +

+ Serves index.csr.html instead of rendering. Needs + browserDistFolder in initPangularHub(). +

+ } + } +
+ +
+
+ +

+ Overrides ({{ overrides().length }}) +

+
    + @for (o of overrides(); track o.id) { +
  • + + + + @if (o.message) { + {{ o.message }} + } + @if (o.key) { + {{ o.value === undefined ? 'remove' : 'set' }} {{ o.key }} + } + +
  • + } @empty { +
  • No overrides.
  • + } +
+ `, + styles: ` + @use 'network' as net; + + @include net.controls; + @include net.rule-form; + `, +}) +export class SsrOverrides { + private readonly state = inject(NetworkState); + private readonly overrideState = inject(OverrideState); + protected readonly canWrite = this.state.canWrite; + protected readonly overrides = this.state.overrides; + protected readonly overrideDraft = this.overrideState.overrideDraft; + protected readonly overrideKindOptions = this.overrideState.overrideKindOptions; + protected readonly overrideValueError = this.overrideState.overrideValueError; + protected readonly overrideFromPayload = this.overrideState.overrideFromPayload; + protected readonly overrideReady = this.overrideState.overrideReady; + protected readonly addingOverride = this.overrideState.addingOverride; + + protected readonly overrideLabel = overrideLabel; + + protected setOverrideDraft(key: K, value: OverrideDraft[K]) { + this.overrideState.setOverrideDraft(key, value); + } + + protected patchOverride(key: keyof OverrideDraft, event: Event) { + this.overrideState.patchOverride(key, event); + } + + protected addOverride(event: Event) { + void this.overrideState.addOverride(event); + } + + protected toggleOverride(id: string) { + this.overrideState.toggleOverride(id); + } + + protected removeOverride(id: string) { + void this.overrideState.removeOverride(id); + } +} diff --git a/app/src/pages/network/ssr-requests.ts b/app/src/pages/network/ssr-requests.ts new file mode 100644 index 00000000..46a370c9 --- /dev/null +++ b/app/src/pages/network/ssr-requests.ts @@ -0,0 +1,265 @@ +import { Component, inject } from '@angular/core'; +import { RovingList } from '../../ui/roving-list'; +import { + callTone, + compressedWith, + guardVerdict, + msLabel, + overrideLabel, + renderModeLabel, + skipText, + statusLabel, + statusTone, + type HttpCall, +} from './http-model'; +import { NetworkState } from './network-state'; + +/** The SSR requests table of the Network page, with the detail of the selected request. */ +@Component({ + selector: 'section[appSsrRequests]', + imports: [RovingList], + template: ` +

SSR requests ({{ requests().length }})

+ @if (requests().length) { +
+ + + + + + + + + + + + + @for (req of requests(); track req.id) { + + + + + + + + + } + +
RequestStatusRender modeRenderServer callsNotes
+ + + {{ req.status }} + {{ renderModeLabel(req.renderMode) }}{{ req.renderMs }} ms{{ req.fetches }} ({{ req.fetchMs }} ms) +
+ @if (req.id === selected()?.ssrRequestId) { + this page + } + @if (req.overrides?.length) { + overridden + } + @if (req.aborted) { + aborted + } +
+
+
+ @if (selectedRequest(); as req) { +
+

+ {{ req.method }} {{ req.url }} +

+
+
+
Request id
+
+ {{ req.id }} +
+
+
+
Render
+
{{ req.renderMs }} ms
+
+
+
Total
+
{{ req.durationMs }} ms
+
+
+
Sent
+
{{ req.bytes }} B
+
+
+
Browser page
+
{{ requestPage()?.title || requestPage()?.url || 'not connected' }}
+
+
+ @if (compressedWith(req); as encoding) { +

+ The body was already compressed ({{ encoding }}) when ssrMiddleware saw + it, so the render mode can't be read and TransferState edits can't apply. Mount + ssrMiddleware after compression(). +

+ } + @if (req.overrides?.length) { +

Overrides from the panel

+

+ This response was changed on purpose, so it is not what the app sends on its own. +

+ @for (o of req.overrides; track o.id + o.kind) { +

+ {{ overrideLabel(o.kind) }} + {{ o.applied ? 'applied' : 'not applied' }} + @if (o.note) { + {{ o.note }} + } +

+ } + } + @if (req.navigations?.length) { +

Router during the render

+ @for (n of req.navigations; track $index) { + + @if (n.reason) { +

{{ n.reason }}

+ } + } + } +

Server calls ({{ requestCalls().length }})

+ @for (c of requestCalls(); track c.id) { +

+ {{ c.method }} + {{ c.url }} + {{ statusLabel(c) }} + {{ c.durationMs }} ms + @if (c.cacheStored) { + cached + } @else if (c.cacheSkip) { + not cached + } +

+ @if (!c.cacheStored && c.cacheSkip) { +

Not cached: {{ skipText(c.cacheSkip) }}.

+ } + } @empty { +

The render made no HttpClient calls.

+ } + @if (refetched().length) { +

Fetched again in the browser ({{ refetched().length }})

+

+ These calls ran on the server and again after hydration instead of reading the + transfer cache. +

+ @for (c of refetched(); track c.id) { +

+ {{ c.method }} + {{ c.url }} + cache miss +

+ @if (refetchReason(c); as why) { +

Why: {{ why }}.

+ } + } + } @else if (requestPage() && requestCalls().length) { +

No server call ran again in the browser.

+ } +
+ } + } @else { +
+

No SSR requests traced.

+

+ Add app.use(devtools.ssrMiddleware) before the Angular handler in + server.ts, or wrap a web-standard handler with + withPangularSsr(), then load a server rendered page. +

+
+ } + `, + styles: ` + @use 'network' as net; + + @include net.controls; + @include net.table; + @include net.status; + @include net.preview; + @include net.stats; + `, +}) +export class SsrRequests { + private readonly state = inject(NetworkState); + protected readonly requests = this.state.requests; + protected readonly selected = this.state.selected; + protected readonly selectedRequest = this.state.selectedRequest; + protected readonly selectedRequestId = this.state.selectedRequestId; + protected readonly requestCalls = this.state.requestCalls; + protected readonly requestPage = this.state.requestPage; + protected readonly refetched = this.state.refetched; + + protected readonly callTone = callTone; + protected readonly compressedWith = compressedWith; + protected readonly guardVerdict = guardVerdict; + protected readonly msLabel = msLabel; + protected readonly overrideLabel = overrideLabel; + protected readonly renderModeLabel = renderModeLabel; + protected readonly skipText = skipText; + protected readonly statusLabel = statusLabel; + protected readonly statusTone = statusTone; + + protected refetchReason(call: HttpCall): string { + return this.state.refetchReason(call); + } +} diff --git a/app/src/pages/network/transfer-payload.ts b/app/src/pages/network/transfer-payload.ts new file mode 100644 index 00000000..cbb760ce --- /dev/null +++ b/app/src/pages/network/transfer-payload.ts @@ -0,0 +1,241 @@ +import { Component, inject } from '@angular/core'; +import { JsonPipe } from '@angular/common'; +import { RedactionCount } from '../../ui/redaction-count'; +import { payloadLabel, statusTone, type PayloadEntry } from './http-model'; +import { NetworkState } from './network-state'; +import { OverrideState } from './override-state'; +import { PayloadInsights } from './payload-insights'; + +/** The TransferState payload of the page selected on the Network page, with Refetch. */ +@Component({ + selector: 'section[appTransferPayload]', + imports: [JsonPipe, PayloadInsights, RedactionCount], + template: ` +

TransferState payload

+ @if (selected(); as page) { +
+ + + Renders this URL again on the server, with this tab's cookies, and shows the payload it + sends now. The tab does not reload. + +
+ } + @if (selectedPayload(); as payload) { + @if (!payload.found) { +
+

No TransferState script: this page was not server rendered.

+
+ } @else { +

+ {{ payload.entries.length }} entr{{ payload.entries.length === 1 ? 'y' : 'ies' }}, + {{ payload.size }} bytes + @if (payload.refetchedAt) { + Refetched + } +

+ @if (payload.error) { + + } + + +
+ @for (entry of payload.entries; track entry.key) { +
+ + + @if (payloadLabel(entry); as label) { + {{ label }} + } + @if (entry.http; as http) { + HTTP {{ http.status }} + {{ http.url ?? entry.key }} + } @else { + {{ entry.key }} + } + {{ entry.size }} B + +
+ Key + {{ entry.key }} +
+ + @if (canEditEntry(entry)) { + + } +
+
+ +
{{
+                entry.value | json
+              }}
+
+ } +
+ } + } @else { +
+

Open a page of the app to see its payload.

+
+ } + `, + styles: ` + @use 'mixins' as m; + @use 'network' as net; + + @include net.controls; + @include net.status; + @include net.pre; + .summary-line { + margin-bottom: 8px; + font-variant-numeric: tabular-nums; + } + .payload-tools { + display: flex; + flex-wrap: wrap; + align-items: center; + gap: 8px 12px; + margin-bottom: 12px; + } + .payload-tools .muted { + flex: 1 1 240px; + min-width: 0; + } + .entries { + border-top: 1px solid var(--border); + } + details { + border-bottom: 1px solid var(--border); + } + details pre { + margin: 0 0 12px; + } + summary { + display: flex; + align-items: center; + gap: 8px; + min-height: 36px; + padding: 6px 4px; + border-radius: 4px; + list-style: none; + cursor: pointer; + transition: background-color 0.15s var(--ease); + } + summary::-webkit-details-marker { + display: none; + } + summary:hover { + background: var(--surface-2); + } + .chevron { + flex: none; + width: 6px; + height: 6px; + margin: 0 4px; + border-right: 1.5px solid var(--text-3); + border-bottom: 1.5px solid var(--text-3); + transform: rotate(-45deg); + transition: transform 0.15s var(--ease); + } + details[open] .chevron { + transform: rotate(45deg); + } + .entry-key { + flex: 1 1 auto; + min-width: 0; + overflow: hidden; + font-family: var(--font-mono); + font-size: 12px; + text-overflow: ellipsis; + white-space: nowrap; + } + summary:hover .entry-key { + color: var(--accent); + } + .entry-key-row { + display: flex; + flex-wrap: wrap; + align-items: center; + gap: 4px 8px; + min-width: 0; + margin: 0 0 8px; + padding: 0 4px; + } + .entry-key-label { + @include m.label; + flex: none; + } + .entry-key-text { + flex: 1 1 200px; + min-width: 0; + color: var(--text-strong); + overflow-wrap: anywhere; + user-select: text; + } + .entry-actions { + display: flex; + flex-wrap: wrap; + gap: 4px; + } + .entry-size { + flex: none; + color: var(--text-2); + font-size: 12px; + font-variant-numeric: tabular-nums; + } + `, +}) +export class TransferPayload { + private readonly state = inject(NetworkState); + private readonly overrideState = inject(OverrideState); + protected readonly canWrite = this.state.canWrite; + protected readonly selected = this.state.selected; + protected readonly selectedPayload = this.state.selectedPayload; + protected readonly refetching = this.state.refetching; + + protected readonly payloadLabel = payloadLabel; + protected readonly statusTone = statusTone; + + protected refetchPayload(pageId: string) { + void this.state.refetchPayload(pageId); + } + + protected copyKey(key: string) { + void this.state.copyKey(key); + } + + protected canEditEntry(entry: PayloadEntry): boolean { + return this.overrideState.canEditEntry(entry); + } + + protected editEntry(entry: PayloadEntry) { + this.overrideState.editEntry(entry); + } +} diff --git a/app/src/styles/_network.scss b/app/src/styles/_network.scss new file mode 100644 index 00000000..041308fa --- /dev/null +++ b/app/src/styles/_network.scss @@ -0,0 +1,612 @@ +// Styles shared by the Network page's sections (`app/src/pages/network/`), in the order the page +// had them as one component, so each section looks as it did. Include the groups a section uses, +// in this order: controls, table, status, pre, preview, rule-form, stats. +@use 'mixins' as m; + +@mixin controls { + h2 { + @include m.label; + margin: 0 0 16px; + } + h3 { + margin: 16px 0 8px; + color: var(--text-strong); + font-size: 12px; + font-weight: 600; + } + p { + margin: 0; + } + label { + display: grid; + gap: 6px; + color: var(--text-2); + font-size: 12px; + font-weight: 500; + } + label.inline { + display: flex; + align-items: center; + gap: 8px; + min-width: 0; + color: var(--text); + cursor: pointer; + } + .hint { + color: var(--text-3); + font-weight: 400; + } + input, + select, + textarea, + button { + font: inherit; + color: var(--text); + } + input:not([type='checkbox']), + select, + textarea { + width: 100%; + min-width: 0; + padding: 0 10px; + border: 1px solid var(--control-border); + border-radius: var(--radius-sm); + background-color: var(--bg); + transition: + border-color 0.2s var(--ease), + box-shadow 0.2s var(--ease); + } + input:not([type='checkbox']), + select { + height: 34px; + } + select { + padding-right: 36px; + } + textarea { + padding: 8px 10px; + font-family: var(--font-mono); + font-size: 12px; + } + input::placeholder, + textarea::placeholder { + color: var(--text-3); + } + input:not([type='checkbox']):hover, + select:hover, + textarea:hover { + border-color: color-mix(in srgb, var(--control-border) 60%, var(--text-3)); + } + input:not([type='checkbox']):focus-visible, + select:focus-visible, + textarea:focus-visible { + @include m.field-focus; + } + textarea[aria-invalid='true'] { + border-color: color-mix(in srgb, var(--danger) 60%, transparent); + } + input[type='checkbox'] { + flex: none; + width: 16px; + height: 16px; + margin: 0; + accent-color: var(--accent); + cursor: pointer; + } + button { + display: inline-flex; + align-items: center; + justify-content: center; + height: 34px; + padding: 0 14px; + border: 1px solid var(--control-border); + border-radius: var(--radius-sm); + background: var(--surface-2); + font-weight: 500; + white-space: nowrap; + cursor: pointer; + transition: + background-color 0.2s var(--ease), + border-color 0.2s var(--ease), + color 0.2s var(--ease), + transform 0.1s var(--ease); + } + button:hover:not(:disabled) { + border-color: var(--accent-line); + background: var(--surface-3); + } + button:active:not(:disabled) { + transform: translateY(1px); + } + button[type='submit'] { + border-color: var(--accent); + background: var(--accent); + color: var(--accent-ink); + font-weight: 600; + } + button[type='submit']:hover:not(:disabled) { + border-color: var(--accent-hover); + background: var(--accent-hover); + } + button:disabled { + opacity: 0.5; + cursor: not-allowed; + } + button.ghost { + height: 28px; + padding: 0 10px; + border-color: transparent; + background: none; + color: var(--text-2); + font-size: 12px; + } + button.ghost:hover:not(:disabled) { + border-color: var(--border-strong); + background: var(--surface-2); + color: var(--text); + } + button.link { + display: inline; + height: auto; + padding: 0; + border: none; + border-radius: 4px; + background: none; + color: var(--text); + text-align: left; + } + button.link:hover:not(:disabled) { + border: none; + background: none; + color: var(--accent); + } + button.link:active:not(:disabled) { + transform: none; + } + :focus-visible { + @include m.focus-ring; + } + .muted { + color: var(--text-2); + } + .small { + font-size: 12px; + } + .bad { + color: var(--danger); + } + .empty { + display: grid; + gap: 4px; + padding: 24px 16px; + border: 1px dashed var(--border-strong); + border-radius: var(--radius-sm); + color: var(--text); + text-align: center; + line-height: 1.5; + } + .empty-actions { + display: flex; + justify-content: center; + margin-top: 8px; + } + code { + font-family: var(--font-mono); + font-size: 12px; + } +} + +@mixin table { + .table-wrap { + max-height: min(420px, 60vh); + overflow: auto; + margin: 0 -16px; + padding: 0 16px; + } + .table-wrap :focus-visible { + @include m.focus-ring(-2px); + } + thead th { + position: sticky; + top: 0; + z-index: 1; + background: var(--surface); + } + table { + width: 100%; + min-width: 560px; + border-collapse: collapse; + font-variant-numeric: tabular-nums; + } + th, + td { + height: 36px; + padding: 6px 12px; + border-bottom: 1px solid var(--border); + text-align: left; + vertical-align: middle; + white-space: nowrap; + } + th:first-child, + td:first-child { + padding-left: 8px; + } + th { + @include m.label; + height: 32px; + border-bottom-color: var(--border-strong); + } + .num { + text-align: right; + } + td.num { + color: var(--text-2); + } + tbody tr { + cursor: pointer; + } + tbody tr.spacer td { + padding: 0; + border: 0; + } + .window-note { + margin: 0 0 6px; + } + tbody td { + transition: background-color 0.15s var(--ease); + } + tbody tr:hover td { + background: var(--surface-2); + } + tr.selected td, + tr.selected:hover td { + background: var(--accent-soft); + } + tr.selected td:first-child { + box-shadow: inset 2px 0 0 var(--accent); + } + td.url { + width: 100%; + max-width: 0; + font-family: var(--font-mono); + font-size: 12px; + } + td.url button.link { + display: block; + max-width: 100%; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + tr.selected td.url button.link { + color: var(--text-strong); + } + td.page-url { + max-width: 160px; + overflow: hidden; + color: var(--text-2); + font-family: var(--font-mono); + font-size: 12px; + text-overflow: ellipsis; + white-space: nowrap; + } +} + +@mixin status { + .method { + font-family: var(--font-mono); + font-size: 12px; + font-weight: 600; + color: var(--text-strong); + } + .status { + font-family: var(--font-mono); + font-size: 12px; + font-weight: 600; + color: var(--text-2); + } + .status.ok { + color: var(--ok); + } + .status.bad { + color: var(--danger); + } + .dot { + display: inline-block; + width: 6px; + height: 6px; + margin-right: 6px; + border-radius: 50%; + background: currentColor; + vertical-align: middle; + } + .notes { + display: flex; + gap: 4px; + } + .tag { + display: inline-flex; + align-items: center; + height: 20px; + padding: 0 8px; + border: 1px solid var(--border-strong); + border-radius: 99px; + background: var(--surface-3); + color: var(--text-2); + font-size: 11px; + font-weight: 600; + white-space: nowrap; + } + .tag.server { + @include m.tint(accent); + } + .tag.fault { + @include m.tint(danger); + } + .tag.mock { + @include m.tint(accent); + } + .tag.rule-ref { + gap: 4px; + max-width: 220px; + } + .tag.rule-ref code { + @include m.truncate; + font-family: var(--font-mono); + } + .tag.on { + @include m.tint(ok); + } + .tag.off-tag { + @include m.tint(warn); + } +} + +@mixin pre { + pre { + margin: 0; + padding: 10px 12px; + max-height: 240px; + overflow: auto; + border: 1px solid var(--border); + border-radius: var(--radius-sm); + background: var(--bg); + color: var(--text-2); + font: 12px/1.5 var(--font-mono); + white-space: pre-wrap; + overflow-wrap: anywhere; + } + pre + pre { + margin-top: 8px; + } + pre.warn { + border-color: color-mix(in srgb, var(--warn) 30%, transparent); + color: var(--warn); + } + pre.error { + border-color: color-mix(in srgb, var(--danger) 30%, transparent); + color: var(--danger); + } +} + +@mixin preview { + .preview { + @include m.enter(0.2s); + margin-top: 16px; + } + .preview-head { + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: space-between; + gap: 4px 8px; + margin-bottom: 4px; + } + .preview-actions { + display: flex; + flex-wrap: wrap; + gap: 4px; + } + pre.preview-body { + max-height: 320px; + } + .preview-head h3 { + margin: 0; + } + .preview-meta { + display: flex; + align-items: baseline; + gap: 8px; + min-width: 0; + margin-bottom: 8px; + } + .request-call { + display: flex; + align-items: baseline; + gap: 8px; + min-width: 0; + margin: 0 0 4px; + } + .request-call .preview-url { + flex: 1 1 auto; + } + .skip-reason { + margin: 0 0 8px; + } + .nav-stats { + margin-bottom: 8px; + } + .preview-rule { + margin-bottom: 8px; + color: var(--text-2); + font-size: 12px; + } + .preview-url { + min-width: 0; + overflow: hidden; + color: var(--text-2); + font-family: var(--font-mono); + font-size: 12px; + text-overflow: ellipsis; + white-space: nowrap; + } +} + +@mixin rule-form { + .field-group { + display: grid; + gap: 6px; + min-width: 0; + color: var(--text-2); + font-size: 12px; + font-weight: 500; + } + .field-group app-select { + width: 100%; + } + .rule-note { + grid-column: 1 / -1; + margin: 0; + padding-left: 24px; + color: var(--text-2); + font-size: 12px; + } + .rule-form { + display: grid; + gap: 12px; + } + .row { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 12px; + } + @media (max-width: 420px) { + .row { + grid-template-columns: minmax(0, 1fr); + } + } + .field-error { + margin-top: -4px; + color: var(--danger); + font-size: 12px; + } + .field-error:empty { + display: none; + } + .form-actions { + display: flex; + } + .rules-heading { + margin-top: 24px; + } + .rules { + display: grid; + gap: 8px; + margin: 0; + padding: 0; + list-style: none; + } + .rules li { + display: grid; + grid-template-columns: minmax(0, 1fr) auto; + align-items: center; + gap: 4px 12px; + padding: 8px 12px; + border: 1px solid var(--border); + border-radius: var(--radius-sm); + background: var(--surface-2); + transition: + border-color 0.2s var(--ease), + opacity 0.2s var(--ease); + } + .rules li:hover { + border-color: var(--border-strong); + } + .rules li.off .rule-pattern { + color: var(--text-2); + text-decoration: line-through; + } + .rules li.off .rule-method, + .rules li.off .rule-meta, + .rules li.off .rule-meta .status { + color: var(--text-3); + } + .rules li.empty-rule { + display: block; + padding: 16px 12px; + border-style: dashed; + border-color: var(--border-strong); + background: none; + color: var(--text-2); + text-align: center; + } + .rule-pattern { + min-width: 0; + overflow: hidden; + color: var(--text-strong); + text-overflow: ellipsis; + white-space: nowrap; + } + .rule-method { + color: var(--accent); + font-weight: 600; + } + .rule-meta { + display: flex; + flex-wrap: wrap; + grid-column: 1 / -1; + gap: 4px 8px; + padding-left: 24px; + color: var(--text-2); + font-size: 12px; + font-variant-numeric: tabular-nums; + } + .rule-meta > span + span::before { + content: '·'; + margin-right: 8px; + color: var(--text-3); + } + .rule-meta .status { + font-size: 11px; + } + .rules button.remove { + padding: 2px 4px; + color: var(--text-2); + font-size: 12px; + } + .rules button.remove:hover:not(:disabled) { + color: var(--danger); + } +} + +@mixin stats { + .stats { + display: grid; + margin: 0; + } + .stats > div { + display: flex; + align-items: center; + justify-content: space-between; + gap: 16px; + min-height: 36px; + padding: 6px 0; + border-bottom: 1px solid var(--border); + } + .stats > div:last-child { + border-bottom: none; + } + dt { + color: var(--text-2); + } + dd { + margin: 0; + color: var(--text-strong); + font-weight: 600; + font-variant-numeric: tabular-nums; + text-align: right; + } + .ok-note { + color: var(--text-2); + } +} diff --git a/apps/docs/src/content/contributing/development.md b/apps/docs/src/content/contributing/development.md index 6b95b9ff..880f99f8 100644 --- a/apps/docs/src/content/contributing/development.md +++ b/apps/docs/src/content/contributing/development.md @@ -281,6 +281,8 @@ The panel's devframe client caches the functions listed in `PANEL_CACHED_RPC` in 2. Import and add it to `app/src/app.ts` (imports array, tabs array, template switch). 3. Add a card to `app/src/pages/dashboard.ts`. +`pnpm lint` keeps the TypeScript sources in `app/src` and `packages/devtools/src` short with a ratchet (tests are left out): a new file can't go over 1,500 lines, and a file already over it in `lint-baseline.json` can't grow. Split a large page into a folder next to it, as `app/src/pages/network/` does for the SSR & HTTP tab. Each section is a component that attaches to the page's existing `
` element, so the DOM stays the same. State the sections share lives in services the page provides, and shared styles are SCSS mixins in `app/src/styles/`, such as `_network.scss`. + ### Add an agent tool Add `agent: { description }` to an RPC function, or call `ctx.agent.registerTool()` in the devframe setup. List the tool on the [Tools](../agents/tools.md) page. diff --git a/extension/ui/assets/browser-agent-rpc-KH4HHvHf-BRjb6RYu.js b/extension/ui/assets/browser-agent-rpc-KH4HHvHf-aJiGMZYV.js similarity index 95% rename from extension/ui/assets/browser-agent-rpc-KH4HHvHf-BRjb6RYu.js rename to extension/ui/assets/browser-agent-rpc-KH4HHvHf-aJiGMZYV.js index 84f458ad..c1f0b186 100644 --- a/extension/ui/assets/browser-agent-rpc-KH4HHvHf-BRjb6RYu.js +++ b/extension/ui/assets/browser-agent-rpc-KH4HHvHf-aJiGMZYV.js @@ -1 +1 @@ -import{t as e}from"./index-C6_fmlBD.js";var t=Symbol.for(`devframe:browser-agent-registry`),{tools:n,listeners:r}=globalThis[t]??={tools:new Map,listeners:new Set};function i(){return[...n.values()]}function a(e){return r.add(e),()=>r.delete(e)}var o=`devframe:client-id`,s;function c(t=globalThis.window){try{let n=t?.sessionStorage;if(n){let t=n.getItem(o);return t||(t=e(),n.setItem(o,t)),t}}catch{}return s??=e(),s}function l(){let e=typeof document>`u`?void 0:document;return{url:e?.location?.href??``,title:e?.title??``,visible:!e||e.visibilityState===`visible`,focused:e?.hasFocus()??!0}}function u(e){e.client.register({name:`devframe:agent:invoke-client-tool`,type:`action`,jsonSerializable:!0,handler:async(e,t)=>{let n=i().find(t=>t.id===e);if(!n)throw Error(`[devframe/agent] browser tool "${e}" not found`);return await n.invoke(t)}});let t=!1,n=!1,r=0,o=()=>{t||n||(t=!0,queueMicrotask(async()=>{if(t=!1,n)return;let a=i().map(({invoke:e,...t})=>t);(a.length!==0||r!==0)&&(r=a.length,await e.callOptional(`devframe:agent:sync-client-tools`,c(),a,l()).catch(()=>{}))}))},s=a(o),u=e.events.on(`connection:status`,e=>{e===`connected`&&o()}),d=typeof window>`u`?void 0:window;return d?.addEventListener(`focus`,o),d?.addEventListener(`blur`,o),d?.document.addEventListener(`visibilitychange`,o),o(),()=>{n=!0,s(),u(),d?.removeEventListener(`focus`,o),d?.removeEventListener(`blur`,o),d?.document.removeEventListener(`visibilitychange`,o)}}export{u as setupBrowserAgentRpcBridge}; \ No newline at end of file +import{t as e}from"./index-XF1T2gjx.js";var t=Symbol.for(`devframe:browser-agent-registry`),{tools:n,listeners:r}=globalThis[t]??={tools:new Map,listeners:new Set};function i(){return[...n.values()]}function a(e){return r.add(e),()=>r.delete(e)}var o=`devframe:client-id`,s;function c(t=globalThis.window){try{let n=t?.sessionStorage;if(n){let t=n.getItem(o);return t||(t=e(),n.setItem(o,t)),t}}catch{}return s??=e(),s}function l(){let e=typeof document>`u`?void 0:document;return{url:e?.location?.href??``,title:e?.title??``,visible:!e||e.visibilityState===`visible`,focused:e?.hasFocus()??!0}}function u(e){e.client.register({name:`devframe:agent:invoke-client-tool`,type:`action`,jsonSerializable:!0,handler:async(e,t)=>{let n=i().find(t=>t.id===e);if(!n)throw Error(`[devframe/agent] browser tool "${e}" not found`);return await n.invoke(t)}});let t=!1,n=!1,r=0,o=()=>{t||n||(t=!0,queueMicrotask(async()=>{if(t=!1,n)return;let a=i().map(({invoke:e,...t})=>t);(a.length!==0||r!==0)&&(r=a.length,await e.callOptional(`devframe:agent:sync-client-tools`,c(),a,l()).catch(()=>{}))}))},s=a(o),u=e.events.on(`connection:status`,e=>{e===`connected`&&o()}),d=typeof window>`u`?void 0:window;return d?.addEventListener(`focus`,o),d?.addEventListener(`blur`,o),d?.document.addEventListener(`visibilitychange`,o),o(),()=>{n=!0,s(),u(),d?.removeEventListener(`focus`,o),d?.removeEventListener(`blur`,o),d?.document.removeEventListener(`visibilitychange`,o)}}export{u as setupBrowserAgentRpcBridge}; \ No newline at end of file diff --git a/extension/ui/assets/index-C6_fmlBD.js b/extension/ui/assets/index-XF1T2gjx.js similarity index 63% rename from extension/ui/assets/index-C6_fmlBD.js rename to extension/ui/assets/index-XF1T2gjx.js index 9bd33416..2524a5f9 100644 --- a/extension/ui/assets/index-C6_fmlBD.js +++ b/extension/ui/assets/index-XF1T2gjx.js @@ -1,14 +1,14 @@ -(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),t.credentials=e.crossOrigin===`use-credentials`?`include`:e.crossOrigin===`anonymous`?`omit`:`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var e=Object.defineProperty,t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable,i=(t,n,r)=>n in t?e(t,n,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[n]=r,a=(e,a)=>{for(var o in a||={})n.call(a,o)&&i(e,o,a[o]);if(t)for(var o of t(a))r.call(a,o)&&i(e,o,a[o]);return e},o=(e,t,n)=>(i(e,typeof t==`symbol`?t:t+``,n),n),s=globalThis;function c(e){let t=s.__Zone_symbol_prefix;return(typeof t==`string`?t:`__zone_symbol__`)+e}function l(){let e=s.performance;function t(t){e&&e.mark&&e.mark(t)}function n(t,n){e&&e.measure&&e.measure(t,n)}t(`Zone`);let r=class e{constructor(e,t){o(this,`_parent`),o(this,`_name`),o(this,`_properties`),o(this,`_zoneDelegate`),this._parent=e,this._name=t?t.name||`unnamed`:``,this._properties=t&&t.properties||{},this._zoneDelegate=new l(this,this._parent&&this._parent._zoneDelegate,t)}static assertZonePatched(){if(s.Promise!==me.ZoneAwarePromise)throw Error("Zone.js has detected that ZoneAwarePromise `(window|global).Promise` has been overwritten.\nMost likely cause is that a Promise polyfill has been loaded after Zone.js (Polyfilling Promise api is not necessary when zone.js is loaded. If you must load one, do so before loading zone.js.)")}static get root(){let t=e.current;for(;t.parent;)t=t.parent;return t}static get current(){return ge.zone}static get currentTask(){return _e}static __load_patch(r,i,a=!1){if(Object.hasOwn(me,r)){let e=s[c(`forceDuplicateZoneCheck`)]===!0;if(!a&&e)throw Error(`Already loaded patch: `+r)}else if(!s[`__Zone_disable_`+r]){let a=`Zone:`+r;t(a),me[r]=i(s,e,he),n(a,a)}}get parent(){return this._parent}get name(){return this._name}get(e){let t=this.getZoneWith(e);if(t)return t._properties[e]}getZoneWith(e){let t=this;for(;t;){if(Object.hasOwn(t._properties,e))return t;t=t._parent}return null}fork(e){if(!e)throw Error(`ZoneSpec required!`);return this._zoneDelegate.fork(this,e)}wrap(e,t){if(typeof e!=`function`)throw Error(`Expecting function got: `+e);let n=this._zoneDelegate.intercept(this,e,t),r=this;return function(){return r.runGuarded(n,this,arguments,t)}}run(e,t,n,r){ge={parent:ge,zone:this};try{return this._zoneDelegate.invoke(this,e,t,n,r)}finally{ge=ge.parent}}runGuarded(e,t=null,n,r){ge={parent:ge,zone:this};try{try{return this._zoneDelegate.invoke(this,e,t,n,r)}catch(e){if(this._zoneDelegate.handleError(this,e))throw e}}finally{ge=ge.parent}}runTask(e,t,n){if(e.zone!=this)throw Error(`A task can only be run in the zone of creation! (Creation: `+(e.zone||ie).name+`; Execution: `+this.name+`)`);let r=e,{type:i,data:{isPeriodic:a=!1,isRefreshable:o=!1}={}}=e;if(e.state===ae&&(i===pe||i===fe))return;let s=e.state!=ce;s&&r._transitionTo(ce,se);let c=_e;_e=r,ge={parent:ge,zone:this};try{i==fe&&e.data&&!a&&!o&&(e.cancelFn=void 0);try{return this._zoneDelegate.invokeTask(this,r,t,n)}catch(e){if(this._zoneDelegate.handleError(this,e))throw e}}finally{let t=e.state;if(t!==ae&&t!==ue){if(i==pe||a||o&&t===oe)s&&r._transitionTo(se,ce,oe);else{let e=r._zoneDelegates;this._updateTaskCount(r,-1),s&&r._transitionTo(ae,ce,ae),o&&(r._zoneDelegates=e)}}ge=ge.parent,_e=c}}scheduleTask(e){if(e.zone&&e.zone!==this){let t=this;for(;t;){if(t===e.zone)throw Error(`can not reschedule task to ${this.name} which is descendants of the original zone ${e.zone.name}`);t=t.parent}}e._transitionTo(oe,ae);let t=[];e._zoneDelegates=t,e._zone=this;try{e=this._zoneDelegate.scheduleTask(this,e)}catch(t){throw e._transitionTo(ue,oe,ae),this._zoneDelegate.handleError(this,t),t}return e._zoneDelegates===t&&this._updateTaskCount(e,1),e.state==oe&&e._transitionTo(se,oe),e}scheduleMicroTask(e,t,n,r){return this.scheduleTask(new u(de,e,t,n,r,void 0))}scheduleMacroTask(e,t,n,r,i){return this.scheduleTask(new u(fe,e,t,n,r,i))}scheduleEventTask(e,t,n,r,i){return this.scheduleTask(new u(pe,e,t,n,r,i))}cancelTask(e){if(e.zone!=this)throw Error(`A task can only be cancelled in the zone of creation! (Creation: `+(e.zone||ie).name+`; Execution: `+this.name+`)`);if(e.state===se||e.state===ce){e._transitionTo(le,se,ce);try{this._zoneDelegate.cancelTask(this,e)}catch(t){throw e._transitionTo(ue,le),this._zoneDelegate.handleError(this,t),t}return this._updateTaskCount(e,-1),e._transitionTo(ae,le),e.runCount=-1,e}}_updateTaskCount(e,t){let n=e._zoneDelegates;t==-1&&(e._zoneDelegates=null);for(let r=0;re.hasTask(n,r),onScheduleTask:(e,t,n,r)=>e.scheduleTask(n,r),onInvokeTask:(e,t,n,r,i,a)=>e.invokeTask(n,r,i,a),onCancelTask:(e,t,n,r)=>e.cancelTask(n,r)};class l{constructor(e,t,n){o(this,`_zone`),o(this,`_taskCounts`,{microTask:0,macroTask:0,eventTask:0}),o(this,`_forkDlgt`),o(this,`_forkZS`),o(this,`_forkCurrZone`),o(this,`_interceptDlgt`),o(this,`_interceptZS`),o(this,`_interceptCurrZone`),o(this,`_invokeDlgt`),o(this,`_invokeZS`),o(this,`_invokeCurrZone`),o(this,`_handleErrorDlgt`),o(this,`_handleErrorZS`),o(this,`_handleErrorCurrZone`),o(this,`_scheduleTaskDlgt`),o(this,`_scheduleTaskZS`),o(this,`_scheduleTaskCurrZone`),o(this,`_invokeTaskDlgt`),o(this,`_invokeTaskZS`),o(this,`_invokeTaskCurrZone`),o(this,`_cancelTaskDlgt`),o(this,`_cancelTaskZS`),o(this,`_cancelTaskCurrZone`),o(this,`_hasTaskDlgt`),o(this,`_hasTaskDlgtOwner`),o(this,`_hasTaskZS`),o(this,`_hasTaskCurrZone`),this._zone=e,this._forkZS=n&&(n&&n.onFork?n:t._forkZS),this._forkDlgt=n&&(n.onFork?t:t._forkDlgt),this._forkCurrZone=n&&(n.onFork?this._zone:t._forkCurrZone),this._interceptZS=n&&(n.onIntercept?n:t._interceptZS),this._interceptDlgt=n&&(n.onIntercept?t:t._interceptDlgt),this._interceptCurrZone=n&&(n.onIntercept?this._zone:t._interceptCurrZone),this._invokeZS=n&&(n.onInvoke?n:t._invokeZS),this._invokeDlgt=n&&(n.onInvoke?t:t._invokeDlgt),this._invokeCurrZone=n&&(n.onInvoke?this._zone:t._invokeCurrZone),this._handleErrorZS=n&&(n.onHandleError?n:t._handleErrorZS),this._handleErrorDlgt=n&&(n.onHandleError?t:t._handleErrorDlgt),this._handleErrorCurrZone=n&&(n.onHandleError?this._zone:t._handleErrorCurrZone),this._scheduleTaskZS=n&&(n.onScheduleTask?n:t._scheduleTaskZS),this._scheduleTaskDlgt=n&&(n.onScheduleTask?t:t._scheduleTaskDlgt),this._scheduleTaskCurrZone=n&&(n.onScheduleTask?this._zone:t._scheduleTaskCurrZone),this._invokeTaskZS=n&&(n.onInvokeTask?n:t._invokeTaskZS),this._invokeTaskDlgt=n&&(n.onInvokeTask?t:t._invokeTaskDlgt),this._invokeTaskCurrZone=n&&(n.onInvokeTask?this._zone:t._invokeTaskCurrZone),this._cancelTaskZS=n&&(n.onCancelTask?n:t._cancelTaskZS),this._cancelTaskDlgt=n&&(n.onCancelTask?t:t._cancelTaskDlgt),this._cancelTaskCurrZone=n&&(n.onCancelTask?this._zone:t._cancelTaskCurrZone),this._hasTaskZS=null,this._hasTaskDlgt=null,this._hasTaskDlgtOwner=null,this._hasTaskCurrZone=null;let r=n&&n.onHasTask,i=t&&t._hasTaskZS;(r||i)&&(this._hasTaskZS=r?n:a,this._hasTaskDlgt=t,this._hasTaskDlgtOwner=this,this._hasTaskCurrZone=this._zone,n.onScheduleTask||(this._scheduleTaskZS=a,this._scheduleTaskDlgt=t,this._scheduleTaskCurrZone=this._zone),n.onInvokeTask||(this._invokeTaskZS=a,this._invokeTaskDlgt=t,this._invokeTaskCurrZone=this._zone),n.onCancelTask||(this._cancelTaskZS=a,this._cancelTaskDlgt=t,this._cancelTaskCurrZone=this._zone))}get zone(){return this._zone}fork(e,t){return this._forkZS?this._forkZS.onFork(this._forkDlgt,this.zone,e,t):new i(e,t)}intercept(e,t,n){return this._interceptZS?this._interceptZS.onIntercept(this._interceptDlgt,this._interceptCurrZone,e,t,n):t}invoke(e,t,n,r,i){return this._invokeZS?this._invokeZS.onInvoke(this._invokeDlgt,this._invokeCurrZone,e,t,n,r,i):t.apply(n,r)}handleError(e,t){return!this._handleErrorZS||this._handleErrorZS.onHandleError(this._handleErrorDlgt,this._handleErrorCurrZone,e,t)}scheduleTask(e,t){let n=t;if(this._scheduleTaskZS)this._hasTaskZS&&n._zoneDelegates.push(this._hasTaskDlgtOwner),n=this._scheduleTaskZS.onScheduleTask(this._scheduleTaskDlgt,this._scheduleTaskCurrZone,e,t),n||=t;else if(t.scheduleFn)t.scheduleFn(t);else if(t.type==de)ne(t);else throw Error(`Task is missing scheduleFn.`);return n}invokeTask(e,t,n,r){return this._invokeTaskZS?this._invokeTaskZS.onInvokeTask(this._invokeTaskDlgt,this._invokeTaskCurrZone,e,t,n,r):t.callback.apply(n,r)}cancelTask(e,t){let n;if(this._cancelTaskZS)n=this._cancelTaskZS.onCancelTask(this._cancelTaskDlgt,this._cancelTaskCurrZone,e,t);else{if(!t.cancelFn)throw Error(`Task is not cancelable`);n=t.cancelFn(t)}return n}hasTask(e,t){try{this._hasTaskZS&&this._hasTaskZS.onHasTask(this._hasTaskDlgt,this._hasTaskCurrZone,e,t)}catch(t){this.handleError(e,t)}}_updateTaskCount(e,t){let n=this._taskCounts,r=n[e],i=n[e]=r+t;if(i<0)throw Error(`More tasks executed then were scheduled.`);if(r==0||i==0){let t={microTask:n.microTask>0,macroTask:n.macroTask>0,eventTask:n.eventTask>0,change:e};this.hasTask(this._zone,t)}}}class u{constructor(e,t,n,r,i,a){if(o(this,`type`),o(this,`source`),o(this,`invoke`),o(this,`callback`),o(this,`data`),o(this,`scheduleFn`),o(this,`cancelFn`),o(this,`_zone`,null),o(this,`runCount`,0),o(this,`_zoneDelegates`,null),o(this,`_state`,`notScheduled`),this.type=e,this.source=t,this.data=r,this.scheduleFn=i,this.cancelFn=a,!n)throw Error(`callback is not defined`);this.callback=n;let c=this;this.invoke=e===pe&&r&&r.useG?u.invokeTask:function(){return u.invokeTask.call(s,c,this,arguments)}}static invokeTask(e,t,n){e||=this,ve++;try{return e.runCount++,e.zone.runTask(e,t,n)}finally{try{ve===1&&!s[m]&&re()}finally{ve--}}}get zone(){return this._zone}get state(){return this._state}cancelScheduleRequest(){this._transitionTo(ae,oe)}_transitionTo(e,t,n){if(this._state===t||this._state===n)this._state=e,e==ae&&(this._zoneDelegates=null);else throw Error(`${this.type} '${this.source}': can not transition to '${e}', expecting state '${t}'${n?` or '`+n+`'`:``}, was '${this._state}'.`)}toString(){return this.data&&this.data.handleId!==void 0?this.data.handleId.toString():Object.prototype.toString.call(this)}toJSON(){return{type:this.type,state:this.state,source:this.source,zone:this.zone.name,runCount:this.runCount}}}let d=c(`setTimeout`),f=c(`Promise`),p=c(`then`),m=c(`enable_native_microtask_draining`),ee=[],h=!1,g;function te(e){!g&&s[f]&&(g=s[f].resolve(0)),g?(g[p]??g.then).call(g,e):s[d](e,0)}function ne(e){let t=s[m],n=t&&ee.length===0&&!h,r=!t&&ve===0&&ee.length===0;(n||r)&&te(re),e&&ee.push(e)}function re(){if(!h){h=!0;try{for(;ee.length;){let e=ee;ee=[];for(let t of e)try{t.zone.runTask(t,null,null)}catch(e){he.onUnhandledError(e)}}}finally{if(s[m])h=!1,he.microtaskDrainDone();else try{he.microtaskDrainDone()}finally{h=!1}}}}let ie={name:`NO ZONE`},ae=`notScheduled`,oe=`scheduling`,se=`scheduled`,ce=`running`,le=`canceling`,ue=`unknown`,de=`microTask`,fe=`macroTask`,pe=`eventTask`,me=Object.create(null),he={symbol:c,currentZoneFrame:()=>ge,onUnhandledError:ye,microtaskDrainDone:ye,scheduleMicroTask:ne,showUncaughtError:()=>!i[c(`ignoreConsoleErrorUncaughtError`)],patchEventTarget:()=>[],patchOnProperties:ye,patchMethod:()=>ye,bindArguments:()=>[],patchThen:()=>ye,patchMacroTask:()=>ye,patchEventPrototype:()=>ye,getGlobalObjects:()=>void 0,ObjectDefineProperty:()=>ye,ObjectGetOwnPropertyDescriptor:()=>void 0,ObjectCreate:()=>void 0,ArraySlice:()=>[],patchClass:()=>ye,wrapWithCurrentZone:()=>ye,filterProperties:()=>[],attachOriginToPatched:()=>ye,_redefineProperty:()=>ye,patchCallbacks:()=>ye,nativeScheduleMicroTask:te},ge={parent:null,zone:new i(null,null)},_e=null,ve=0;function ye(){}return n(`Zone`,`Zone`),i}function u(){let e=globalThis,t=e[c(`forceDuplicateZoneCheck`)]===!0;if(e.Zone&&(t||typeof e.Zone.__symbol__!=`function`))throw Error(`Zone already loaded.`);return e.Zone??=l(),e.Zone}var d=Object.getOwnPropertyDescriptor,f=Object.defineProperty,p=Object.getPrototypeOf,m=Object.create,ee=Array.prototype.slice,h=`addEventListener`,g=`removeEventListener`,te=c(h),ne=c(g),re=`true`,ie=`false`,ae=c(``);function oe(e,t){return Zone.current.wrap(e,t)}function se(e,t,n,r,i){return Zone.current.scheduleMacroTask(e,t,n,r,i)}var ce=c,le=typeof window<`u`,ue=le?window:void 0,de=le&&ue||globalThis,fe=`removeAttribute`;function pe(e,t){for(let n=e.length-1;n>=0;n--)typeof e[n]==`function`&&(e[n]=oe(e[n],t+`_`+n));return e}function me(e,t){let n=e.constructor.name;for(let r=0;r{let t=function(){return e.apply(this,pe(arguments,n+`.`+i))};return ke(t,e),t})(a)}}}function he(e){return e?e.writable===!1?!1:typeof e.get!=`function`||e.set!==void 0:!0}var ge=typeof WorkerGlobalScope<`u`&&self instanceof WorkerGlobalScope,_e=!(`nw`in de)&&de.process!==void 0&&de.process.toString()===`[object process]`,ve=!_e&&!ge&&!!(le&&ue.HTMLElement),ye=de.process!==void 0&&de.process.toString()===`[object process]`&&!ge&&!!(le&&ue.HTMLElement),be=Object.create(null),xe=ce(`enable_beforeunload`),Se=function(e){if(e||=de.event,!e)return;let t=be[e.type];t||=be[e.type]=ce(`ON_PROPERTY`+e.type);let n=this||e.target||de,r=n[t],i;if(ve&&n===ue&&e.type===`error`){let t=e;i=r&&r.call(this,t.message,t.filename,t.lineno,t.colno,t.error),i===!0&&e.preventDefault()}else i=r&&r.apply(this,arguments),e.type===`beforeunload`&&de[xe]&&typeof i==`string`?e.returnValue=i:i!=null&&!i&&e.preventDefault();return i};function Ce(e,t,n){let r=d(e,t);if(!r&&n&&d(n,t)&&(r={enumerable:!0,configurable:!0}),!r||!r.configurable)return;let i=ce(`on`+t+`patched`);if(Object.hasOwn(e,i)&&e[i])return;delete r.writable,delete r.value;let a=r.get,o=r.set,s=t.slice(2),c=be[s];c||=be[s]=ce(`ON_PROPERTY`+s),r.set=function(t){let n=this;!n&&e===de&&(n=de),n&&(typeof n[c]==`function`&&n.removeEventListener(s,Se),o?.call(n,null),n[c]=t,typeof t==`function`&&n.addEventListener(s,Se,!1))},r.get=function(){let n=this;if(!n&&e===de&&(n=de),!n)return null;let i=n[c];if(i)return i;if(a){let e=a.call(this);if(e)return r.set.call(this,e),typeof n[fe]==`function`&&n.removeAttribute(t),e}return null},f(e,t,r),e[i]=!0}function we(e,t,n){if(t)for(let r=0;rfunction(t,r){let a=n(t,r);return a.cbIdx>=0&&typeof r[a.cbIdx]==`function`?se(a.name,r[a.cbIdx],a,i):e.apply(t,r)})}function ke(e,t){e[ce(`OriginalDelegate`)]=t}function Ae(e){return typeof e==`function`}function je(e){return typeof e==`number`}var Me={useG:!0},Ne=Object.create(null),Pe={},Fe=RegExp(`^`+ae+`(\\w+)(true|false)$`),Ie=ce(`propagationStopped`),Le=[`capture`,`once`,`passive`,`signal`];function Re(e,t){let n=(t?t(e):e)+ie,r=(t?t(e):e)+re,i=ae+n,a=ae+r;Ne[e]={[ie]:i,[re]:a}}function ze(e,t,n,r){let i=r&&r.add||h,o=r&&r.rm||g,s=r&&r.listeners||`eventListeners`,c=r&&r.rmAll||`removeAllListeners`,l=ce(i),u=`.`+i+`:`,d=function(e,t,n){if(e.isRemoved)return;let r=e.callback;typeof r==`object`&&r.handleEvent&&(e.callback=e=>r.handleEvent(e),e.originalDelegate=r);let i;try{e.invoke(e,t,[n])}catch(e){i=e}let a=e.options;if(a&&typeof a==`object`&&a.once){let r=e.originalDelegate?e.originalDelegate:e.callback;t[o].call(t,n.type,r,a)}return i};function f(n,r,i){if(r||=e.event,!r)return;let a=n||r.target||e,o=a[Ne[r.type][i?re:ie]];if(o){let e=[];if(o.length===1){let t=d(o[0],a,r);t&&e.push(t)}else{let t=o.slice();for(let n=0;n{throw r})}}}let m=function(e){return f(this,e,!1)},ee=function(e){return f(this,e,!0)};function te(t,n){if(!t)return!1;let r=!0;n&&n.useG!==void 0&&(r=n.useG);let d=n&&n.vh,f=!0;n&&n.chkDup!==void 0&&(f=n.chkDup);let h=!1;n&&n.rt!==void 0&&(h=n.rt);let g=t;for(;g&&!Object.hasOwn(g,i);)g=p(g);if(!g&&t[i]&&(g=t),!g||g[l])return!1;let te=n&&n.eventNameToString,ne={},oe=g[l]=g[i],se=g[ce(o)]=g[o],le=g[ce(s)]=g[s],ue=g[ce(c)]=g[c],de;n&&n.prepend&&(de=g[ce(n.prepend)]=g[n.prepend]);function fe(e,t){return t?typeof e==`boolean`?{capture:e,passive:!0}:e?(typeof e==`object`&&e.passive!==!1&&(e.passive=!0),e):{passive:!0}:e}let pe=function(e){if(!ne.isExisting)return oe.call(ne.target,ne.eventName,ne.capture?ee:m,ne.options)},me=function(e){if(!e.isRemoved){let t=Ne[e.eventName],n;t&&(n=t[e.capture?re:ie]);let r=n&&e.target[n];if(r){for(let t=0;tve.zone.cancelTask(ve);t.call(g,`abort`,e,{once:!0}),ve.removeAbortListener=()=>g.removeEventListener(`abort`,e)}if(ne.target=null,ge&&(ge.taskData=null),oe&&(ne.options.once=!0),typeof ve.options!=`boolean`&&(ve.options=h),ve.target=l,ve.capture=ae,ve.eventName=u,m&&(ve.originalDelegate=p),c?ue.unshift(ve):ue.push(ve),s)return l}};return g[i]=Te(oe,u,ye,be,h),de&&(g.prependListener=Te(de,`.prependListener:`,ge,be,h,!0)),g[o]=function(){let t=this||e,r=arguments[0];n&&n.transferEventName&&(r=n.transferEventName(r));let i=arguments[2],a=i?typeof i==`boolean`||i.capture:!1,o=arguments[1];if(!o)return se.apply(this,arguments);if(d&&!d(se,o,t,arguments))return;let s=Ne[r],c;s&&(c=s[a?re:ie]);let l=c&&t[c];if(l)for(let e=0;efunction(t,n){t[Ie]=!0,e&&e.apply(t,n)})}function He(e,t){t.patchMethod(e,`queueMicrotask`,e=>function(e,t){Zone.current.scheduleMicroTask(`queueMicrotask`,t[0])})}var Ue=ce(`zoneTask`);function We(e,t,n,r){let i=null,a=null;t+=r,n+=r;let o={};function s(t){let n=t.data;n.args[0]=function(){return t.invoke.apply(this,arguments)};let r=i.apply(e,n.args);return je(r)?n.handleId=r:(n.handle=r,n.isRefreshable=Ae(r?.refresh)),t}function c(t){let{handle:n,handleId:r}=t.data;return a.call(e,n??r)}i=De(e,t,n=>function(i,a){if(Ae(a[0])){let e={isRefreshable:!1,isPeriodic:r===`Interval`,delay:r===`Timeout`||r===`Interval`?a[1]||0:void 0,args:a},n=a[0];a[0]=function(){try{return n.apply(this,arguments)}finally{let{handle:t,handleId:n,isPeriodic:r,isRefreshable:i}=e;!r&&!i&&(n?delete o[n]:t&&(t[Ue]=null))}};let i=se(t,a[0],e,s,c);if(!i)return i;let{handleId:l,handle:u,isRefreshable:d,isPeriodic:f}=i.data;if(l)o[l]=i;else if(u&&(u[Ue]=i,d&&!f)){let e=u.refresh;u.refresh=function(){let{zone:t,state:n}=i;return n===`notScheduled`?(i._state=`scheduled`,t._updateTaskCount(i,1)):n===`running`&&(i._state=`scheduling`),e.call(this)}}return u??l??i}return n.apply(e,a)}),a=De(e,n,t=>function(n,r){let i=r[0],a;je(i)?(a=o[i],delete o[i]):(a=i?.[Ue],a?i[Ue]=null:a=i),a?.type?a.cancelFn&&a.zone.cancelTask(a):t.apply(e,r)})}function Ge(e,t){let{isBrowser:n,isMix:r}=t.getGlobalObjects();(n||r)&&e.customElements&&`customElements`in e&&t.patchCallbacks(t,e.customElements,`customElements`,`define`,[`connectedCallback`,`disconnectedCallback`,`adoptedCallback`,`attributeChangedCallback`,`formAssociatedCallback`,`formDisabledCallback`,`formResetCallback`,`formStateRestoreCallback`])}function Ke(e,t){if(Zone[t.symbol(`patchEventTarget`)])return;let{eventNames:n,zoneSymbolEventNames:r,TRUE_STR:i,FALSE_STR:a,ZONE_SYMBOL_PREFIX:o}=t.getGlobalObjects();for(let e=0;et.target===e);if(r.length===0)return t;let i=r[0].ignoreProperties;return t.filter(e=>i.indexOf(e)===-1)}function Ye(e,t,n,r){e&&we(e,Je(e,t,n),r)}function Xe(e){return Object.getOwnPropertyNames(e).filter(e=>e.startsWith(`on`)&&e.length>2).map(e=>e.substring(2))}function eee(e,t){if(_e&&!ye||Zone[e.symbol(`patchEvents`)])return;let n=t.__Zone_ignore_on_properties,r=[];if(ve){let e=window;r=r.concat([`Document`,`SVGElement`,`Element`,`HTMLElement`,`HTMLBodyElement`,`HTMLMediaElement`,`HTMLFrameSetElement`,`HTMLFrameElement`,`HTMLIFrameElement`,`HTMLMarqueeElement`,`Worker`]),Ye(e,Xe(e),n,p(e))}r=r.concat([`XMLHttpRequest`,`XMLHttpRequestEventTarget`,`IDBIndex`,`IDBRequest`,`IDBOpenDBRequest`,`IDBDatabase`,`IDBTransaction`,`IDBCursor`,`WebSocket`]);for(let e=0;e{let t=`clear`;We(e,`set`,t,`Timeout`),We(e,`set`,t,`Interval`),We(e,`set`,t,`Immediate`)}),e.__load_patch(`requestAnimationFrame`,e=>{We(e,`request`,`cancel`,`AnimationFrame`),We(e,`mozRequest`,`mozCancel`,`AnimationFrame`),We(e,`webkitRequest`,`webkitCancel`,`AnimationFrame`)}),e.__load_patch(`blocking`,(e,t)=>{let n=[`alert`,`prompt`,`confirm`];for(let r=0;rfunction(r,a){return t.current.run(n,e,a,i)})}}),e.__load_patch(`EventTarget`,(e,t,n)=>{qe(e,n),Ke(e,n);let r=e.XMLHttpRequestEventTarget;r&&r.prototype&&n.patchEventTarget(e,n,[r.prototype])}),e.__load_patch(`MutationObserver`,(e,t,n)=>{Ee(`MutationObserver`),Ee(`WebKitMutationObserver`)}),e.__load_patch(`IntersectionObserver`,(e,t,n)=>{Ee(`IntersectionObserver`)}),e.__load_patch(`FileReader`,(e,t,n)=>{Ee(`FileReader`)}),e.__load_patch(`on_property`,(e,t,n)=>{eee(n,e)}),e.__load_patch(`customElements`,(e,t,n)=>{Ge(e,n)}),e.__load_patch(`XHR`,(e,t)=>{c(e);let n=ce(`xhrTask`),r=ce(`xhrSync`),i=ce(`xhrListener`),a=ce(`xhrScheduled`),o=ce(`xhrURL`),s=ce(`xhrErrorBeforeScheduled`);function c(e){let c=e.XMLHttpRequest;if(!c)return;let l=c.prototype;function u(e){return e[n]}let d=l[te],f=l[ne];if(!d){let t=e.XMLHttpRequestEventTarget;if(t){let e=t.prototype;d=e[te],f=e[ne]}}let p=`readystatechange`,m=`scheduled`;function ee(e){let r=e.data,o=r.target;o[a]=!1,o[s]=!1;let c=o[i];d||(d=o[te],f=o[ne]),c&&f.call(o,p,c);let l=o[i]=()=>{if(o.readyState===o.DONE){if(!r.aborted&&o[a]&&e.state===m){let n=o[t.__symbol__(`loadfalse`)];if(o.status!==0&&n&&n.length>0){let i=e.invoke;e.invoke=function(){let n=o[t.__symbol__(`loadfalse`)];for(let t=0;tfunction(e,t){return e[r]=t[2]==0,e[o]=t[1],re.apply(e,t)}),ie=ce(`fetchTaskAborting`),ae=ce(`fetchTaskScheduling`),oe=De(l,`send`,()=>function(e,n){if(t.current[ae]===!0||e[r])return oe.apply(e,n);{let t={target:e,url:e[o],isPeriodic:!1,args:n,aborted:!1},r=se(`XMLHttpRequest.send`,h,t,ee,g);e&&e[s]===!0&&!t.aborted&&r.state===m&&r.invoke()}}),le=De(l,`abort`,()=>function(e,n){let r=u(e);if(r&&typeof r.type==`string`){if(r.cancelFn==null||r.data&&r.data.aborted)return;r.zone.cancelTask(r)}else if(t.current[ie]===!0)return le.apply(e,n)})}}),e.__load_patch(`geolocation`,e=>{e.navigator&&e.navigator.geolocation&&me(e.navigator.geolocation,[`getCurrentPosition`,`watchPosition`])}),e.__load_patch(`PromiseRejectionEvent`,(e,t)=>{function n(t){return function(n){Be(e,t).forEach(r=>{let i=e.PromiseRejectionEvent;if(i){let e=new i(t,{promise:n.promise,reason:n.rejection});r.invoke(e)}})}}e.PromiseRejectionEvent&&(t[ce(`unhandledPromiseRejectionHandler`)]=n(`unhandledrejection`),t[ce(`rejectionHandledHandler`)]=n(`rejectionhandled`))}),e.__load_patch(`queueMicrotask`,(e,t,n)=>{He(e,n)})}function Ze(e){e.__load_patch(`ZoneAwarePromise`,(e,t,n)=>{let r=Object.getOwnPropertyDescriptor,i=Object.defineProperty;function a(e){return e&&e.toString===Object.prototype.toString?(e.constructor&&e.constructor.name||``)+`: `+JSON.stringify(e):e?e.toString():Object.prototype.toString.call(e)}let o=n.symbol,s=[],c=e[o(`DISABLE_WRAPPING_UNCAUGHT_PROMISE_REJECTION`)]!==!1,l=o(`Promise`),u=o(`then`);n.onUnhandledError=e=>{if(n.showUncaughtError()){let t=e&&e.rejection;t&&e.zone&&e.task?console.error(`Unhandled Promise rejection:`,t instanceof Error?t.message:t,`; Zone:`,e.zone.name,`; Task:`,e.task&&e.task.source,`; Value:`,t,t instanceof Error?t.stack:void 0):console.error(e)}},n.microtaskDrainDone=()=>{for(;s.length;){let e=s.shift();try{e.zone.runGuarded(()=>{throw e.throwOriginal?e.rejection:e})}catch(e){f(e)}}};let d=o(`unhandledPromiseRejectionHandler`);function f(e){n.onUnhandledError(e);try{let n=t[d];typeof n==`function`&&n.call(this,e)}catch{}}function p(e){return e&&typeof e.then==`function`}function m(e){return e}function ee(e){return pe.reject(e)}let h=o(`state`),g=o(`value`),te=o(`finally`),ne=o(`parentPromiseValue`),re=o(`parentPromiseState`);function ie(e,t){return n=>{try{se(e,t,n)}catch(t){se(e,!1,t)}}}let ae=function(){let e=!1;return function(t){return function(){e||(e=!0,t.apply(null,arguments))}}},oe=o(`currentTaskTrace`);function se(e,r,o){let l=ae();if(e===o)throw TypeError(`Promise resolved with itself`);if(e[h]===null){let u=null;try{(typeof o==`object`||typeof o==`function`)&&(u=o&&o.then)}catch(t){return l(()=>{se(e,!1,t)})(),e}if(r!==!1&&o instanceof pe&&Object.hasOwn(o,h)&&Object.hasOwn(o,g)&&o[h]!==null)le(o),se(e,o[h],o[g]);else if(r!==!1&&typeof u==`function`)try{u.call(o,l(ie(e,r)),l(ie(e,!1)))}catch(t){l(()=>{se(e,!1,t)})()}else{e[h]=r;let l=e[g];if(e[g]=o,e[te]===te&&r===!0&&(e[h]=e[re],e[g]=e[ne]),r===!1&&o instanceof Error){let e=t.currentTask&&t.currentTask.data&&t.currentTask.data.__creationTrace__;e&&i(o,oe,{configurable:!0,enumerable:!1,writable:!0,value:e})}for(let t=0;t{try{let r=e[g],i=!!n&&te===n[te];i&&(n[ne]=r,n[re]=a),se(n,!0,t.run(o,void 0,i&&o!==ee&&o!==m?[]:[r]))}catch(e){se(n,!1,e)}},n)}let de=function(){},fe=e.AggregateError;class pe{static toString(){return`function ZoneAwarePromise() { [native code] }`}static resolve(e){return e instanceof pe?e:se(new this(null),!0,e)}static reject(e){return se(new this(null),!1,e)}static withResolvers(){let e={};return e.promise=new pe((t,n)=>{e.resolve=t,e.reject=n}),e}static any(e){if(!e||typeof e[Symbol.iterator]!=`function`)return Promise.reject(new fe([],`All promises were rejected`));let t=[],n=0;try{for(let r of e)n++,t.push(pe.resolve(r))}catch{return Promise.reject(new fe([],`All promises were rejected`))}if(n===0)return Promise.reject(new fe([],`All promises were rejected`));let r=!1,i=[];return new pe((e,a)=>{for(let o=0;o{r||(r=!0,e(t))},e=>{i.push(e),n--,n===0&&(r=!0,a(new fe(i,`All promises were rejected`)))})})}static race(e){let t,n,r=new this((e,r)=>{t=e,n=r});function i(e){t(e)}function a(e){n(e)}for(let t of e)p(t)||(t=this.resolve(t)),t.then(i,a);return r}static all(e){return pe.allWithCallback(e)}static allSettled(e){return(this&&this.prototype instanceof pe?this:pe).allWithCallback(e,{thenCallback:e=>({status:`fulfilled`,value:e}),errorCallback:e=>({status:`rejected`,reason:e})})}static allWithCallback(e,t){let n,r,i=new this((e,t)=>{n=e,r=t}),a=2,o=0,s=[];for(let i of e){p(i)||(i=this.resolve(i));let e=o;try{i.then(r=>{s[e]=t?t.thenCallback(r):r,a--,a===0&&n(s)},i=>{t?(s[e]=t.errorCallback(i),a--,a===0&&n(s)):r(i)})}catch(e){r(e)}a++,o++}return a-=2,a===0&&n(s),i}constructor(e){let t=this;if(!(t instanceof pe))throw Error(`Must be an instanceof Promise.`);t[h]=null,t[g]=[];try{let n=ae();e&&e(n(ie(t,!0)),n(ie(t,!1)))}catch(e){se(t,!1,e)}}get[Symbol.toStringTag](){return`Promise`}get[Symbol.species](){return pe}then(e,n){let r=this.constructor?.[Symbol.species];(!r||typeof r!=`function`)&&(r=this.constructor||pe);let i=new r(de),a=t.current;return this[h]==null?this[g].push(a,i,e,n):ue(this,a,i,e,n),i}catch(e){return this.then(null,e)}finally(e){let n=this.constructor?.[Symbol.species];(!n||typeof n!=`function`)&&(n=pe);let r=new n(de);r[te]=te;let i=t.current;return this[h]==null?this[g].push(i,r,e,e):ue(this,i,r,e,e),r}}pe.resolve=pe.resolve,pe.reject=pe.reject,pe.race=pe.race,pe.all=pe.all;let me=e[l]=e.Promise;e.Promise=pe;let he=o(`thenPatched`);function ge(e){let t=e.prototype,n=r(t,`then`);if(n&&(n.writable===!1||!n.configurable))return;let i=t.then;t[u]=i,e.prototype.then=function(e,t){return new pe((e,t)=>{i.call(this,e,t)}).then(e,t)},e[he]=!0}n.patchThen=ge;function _e(e){return function(t,n){let r=e.apply(t,n);if(r instanceof pe)return r;let i=r.constructor;return i[he]||ge(i),r}}if(me){ge(me);let t=me.try;t&&typeof t==`function`&&(pe.try=t),De(e,`fetch`,e=>_e(e))}return Promise[t.__symbol__(`uncaughtPromiseErrors`)]=s,pe})}function Qe(e){e.__load_patch(`toString`,e=>{let t=Function.prototype.toString,n=ce(`OriginalDelegate`),r=ce(`Promise`),i=ce(`Error`),a=function(){if(typeof this==`function`){let a=this[n];if(a)return typeof a==`function`?t.call(a):Object.prototype.toString.call(a);if(this===Promise){let n=e[r];if(n)return t.call(n)}if(this===Error){let n=e[i];if(n)return t.call(n)}}return t.call(this)};a[n]=t,Function.prototype.toString=a;let o=Object.prototype.toString;Object.prototype.toString=function(){return typeof Promise==`function`&&this instanceof Promise?`[object Promise]`:o.call(this)}})}function $e(e,t,n,r,i){let a=Zone.__symbol__(r);if(t[a])return;let o=t[a]=t[r];t[r]=function(a,s,c){return s&&s.prototype&&i.forEach(function(t){let i=`${n}.${r}::`+t,a=s.prototype;try{if(Object.hasOwn(a,t)){let n=e.ObjectGetOwnPropertyDescriptor(a,t);n&&n.value?(n.value=e.wrapWithCurrentZone(n.value,i),e._redefineProperty(s.prototype,t,n)):a[t]&&(a[t]=e.wrapWithCurrentZone(a[t],i))}else a[t]&&(a[t]=e.wrapWithCurrentZone(a[t],i))}catch{}}),o.call(t,a,s,c)},e.attachOriginToPatched(t[r],o)}function et(e){e.__load_patch(`util`,(e,t,n)=>{let r=Xe(e);n.patchOnProperties=we,n.patchMethod=De,n.bindArguments=pe,n.patchMacroTask=Oe;let i=t.__symbol__(`BLACK_LISTED_EVENTS`),a=t.__symbol__(`UNPATCHED_EVENTS`);e[a]&&(e[i]=e[a]),e[i]&&(t[i]=t[a]=e[i]),n.patchEventPrototype=Ve,n.patchEventTarget=ze,n.ObjectDefineProperty=f,n.ObjectGetOwnPropertyDescriptor=d,n.ObjectCreate=m,n.ArraySlice=ee,n.patchClass=Ee,n.wrapWithCurrentZone=oe,n.filterProperties=Je,n.attachOriginToPatched=ke,n._redefineProperty=Object.defineProperty,n.patchCallbacks=$e,n.getGlobalObjects=()=>({globalSources:Pe,zoneSymbolEventNames:Ne,eventNames:r,isBrowser:ve,isMix:ye,isNode:_e,TRUE_STR:re,FALSE_STR:ie,ZONE_SYMBOL_PREFIX:ae,ADD_EVENT_LISTENER_STR:h,REMOVE_EVENT_LISTENER_STR:g})})}function tt(e){Ze(e),Qe(e),et(e)}var nt=u();tt(nt),tee(nt);var rt=(function(e){return e[e.NONE=0]=`NONE`,e[e.HTML=1]=`HTML`,e[e.STYLE=2]=`STYLE`,e[e.SCRIPT=3]=`SCRIPT`,e[e.URL=4]=`URL`,e[e.RESOURCE_URL=5]=`RESOURCE_URL`,e[e.ATTRIBUTE_NO_BINDING=6]=`ATTRIBUTE_NO_BINDING`,e})(rt||{}),it=(function(e){return e[e.None=0]=`None`,e[e.Const=1]=`Const`,e})(it||{}),at=class{modifiers;constructor(e=it.None){this.modifiers=e}hasModifier(e){return(this.modifiers&e)!==0}},ot=(function(e){return e[e.Dynamic=0]=`Dynamic`,e[e.Bool=1]=`Bool`,e[e.String=2]=`String`,e[e.Int=3]=`Int`,e[e.Number=4]=`Number`,e[e.Function=5]=`Function`,e[e.Inferred=6]=`Inferred`,e[e.None=7]=`None`,e})(ot||{}),st=class extends at{name;constructor(e,t){super(t),this.name=e}visitType(e,t){return e.visitBuiltinType(this,t)}};ot.Dynamic;var ct=new st(ot.Inferred);ot.Bool,ot.Int,ot.Number,ot.String,ot.Function,ot.None;var _=(function(e){return e[e.Equals=0]=`Equals`,e[e.NotEquals=1]=`NotEquals`,e[e.Assign=2]=`Assign`,e[e.Identical=3]=`Identical`,e[e.NotIdentical=4]=`NotIdentical`,e[e.Minus=5]=`Minus`,e[e.Plus=6]=`Plus`,e[e.Divide=7]=`Divide`,e[e.Multiply=8]=`Multiply`,e[e.Modulo=9]=`Modulo`,e[e.And=10]=`And`,e[e.Or=11]=`Or`,e[e.BitwiseOr=12]=`BitwiseOr`,e[e.BitwiseAnd=13]=`BitwiseAnd`,e[e.Lower=14]=`Lower`,e[e.LowerEquals=15]=`LowerEquals`,e[e.Bigger=16]=`Bigger`,e[e.BiggerEquals=17]=`BiggerEquals`,e[e.NullishCoalesce=18]=`NullishCoalesce`,e[e.Exponentiation=19]=`Exponentiation`,e[e.In=20]=`In`,e[e.InstanceOf=21]=`InstanceOf`,e[e.AdditionAssignment=22]=`AdditionAssignment`,e[e.SubtractionAssignment=23]=`SubtractionAssignment`,e[e.MultiplicationAssignment=24]=`MultiplicationAssignment`,e[e.DivisionAssignment=25]=`DivisionAssignment`,e[e.RemainderAssignment=26]=`RemainderAssignment`,e[e.ExponentiationAssignment=27]=`ExponentiationAssignment`,e[e.AndAssignment=28]=`AndAssignment`,e[e.OrAssignment=29]=`OrAssignment`,e[e.NullishCoalesceAssignment=30]=`NullishCoalesceAssignment`,e})(_||{});function lt(e,t){return e==null||t==null?e==t:e.isEquivalent(t)}function ut(e,t,n){let r=e.length;if(r!==t.length)return!1;for(let i=0;ie.isEquivalent(t))}var ft=class{leadingComments;type;sourceSpan;constructor(e,t,n){this.leadingComments=n,this.type=e||null,this.sourceSpan=t||null}prop(e,t){return new St(this,e,null,t)}key(e,t,n){return new nee(this,e,t,n)}callFn(e,t,n,r){return new ht(this,e,null,t,n,r)}instantiate(e,t,n,r){return new gt(this,e,t,n)}conditional(e,t=null,n,r){return new bt(this,e,t,null,n)}equals(e,t){return new xt(_.Equals,this,e,null,t)}notEquals(e,t){return new xt(_.NotEquals,this,e,null,t)}identical(e,t){return new xt(_.Identical,this,e,null,t)}notIdentical(e,t){return new xt(_.NotIdentical,this,e,null,t)}minus(e,t){return new xt(_.Minus,this,e,null,t)}plus(e,t){return new xt(_.Plus,this,e,null,t)}divide(e,t){return new xt(_.Divide,this,e,null,t)}multiply(e,t){return new xt(_.Multiply,this,e,null,t)}modulo(e,t){return new xt(_.Modulo,this,e,null,t)}power(e,t){return new xt(_.Exponentiation,this,e,null,t)}and(e,t){return new xt(_.And,this,e,null,t)}bitwiseOr(e,t){return new xt(_.BitwiseOr,this,e,null,t)}bitwiseAnd(e,t){return new xt(_.BitwiseAnd,this,e,null,t)}or(e,t){return new xt(_.Or,this,e,null,t)}lower(e,t){return new xt(_.Lower,this,e,null,t)}lowerEquals(e,t){return new xt(_.LowerEquals,this,e,null,t)}bigger(e,t){return new xt(_.Bigger,this,e,null,t)}biggerEquals(e,t){return new xt(_.BiggerEquals,this,e,null,t)}isBlank(e){return this.equals(see,e)}nullishCoalesce(e,t){return new xt(_.NullishCoalesce,this,e,null,t)}toStmt(e){return new lee(this,null,e)}},pt=class e extends ft{name;constructor(e,t,n,r){super(t,n,r),this.name=e}isEquivalent(t){return t instanceof e&&this.name===t.name}isConstant(){return!1}visitExpression(e,t){return e.visitReadVarExpr(this,t)}clone(){return new e(this.name,this.type,this.sourceSpan)}set(e){return new xt(_.Assign,this,e,null,this.sourceSpan)}},mt=class e extends ft{expr;constructor(e,t,n,r){super(t,n,r),this.expr=e}visitExpression(e,t){return e.visitTypeofExpr(this,t)}isEquivalent(t){return t instanceof e&&t.expr.isEquivalent(this.expr)}isConstant(){return this.expr.isConstant()}clone(){return new e(this.expr.clone())}},ht=class e extends ft{fn;args;pure;isOptional;constructor(e,t,n,r,i=!1,a,o=!1){super(n,r,a),this.fn=e,this.args=t,this.pure=i,this.isOptional=o}get receiver(){return this.fn}isEquivalent(t){return t instanceof e&&this.fn.isEquivalent(t.fn)&&dt(this.args,t.args)&&this.pure===t.pure}isConstant(){return!1}visitExpression(e,t){return e.visitInvokeFunctionExpr(this,t)}clone(){return new e(this.fn.clone(),this.args.map(e=>e.clone()),this.type,this.sourceSpan,this.pure,[],this.isOptional)}},gt=class e extends ft{classExpr;args;constructor(e,t,n,r,i){super(n,r,i),this.classExpr=e,this.args=t}isEquivalent(t){return t instanceof e&&this.classExpr.isEquivalent(t.classExpr)&&dt(this.args,t.args)}isConstant(){return!1}visitExpression(e,t){return e.visitInstantiateExpr(this,t)}clone(){return new e(this.classExpr.clone(),this.args.map(e=>e.clone()),this.type,this.sourceSpan)}},_t=class e extends ft{body;flags;constructor(e,t,n,r){super(null,n,r),this.body=e,this.flags=t}isEquivalent(t){return t instanceof e&&this.body===t.body&&this.flags===t.flags}isConstant(){return!0}visitExpression(e,t){return e.visitRegularExpressionLiteral(this,t)}clone(){return new e(this.body,this.flags,this.sourceSpan)}},vt=class e extends ft{value;constructor(e,t,n,r){super(t,n,r),this.value=e}isEquivalent(t){return t instanceof e&&this.value===t.value}isConstant(){return!0}visitExpression(e,t){return e.visitLiteralExpr(this,t)}clone(){return new e(this.value,this.type,this.sourceSpan)}},yt=class e extends ft{value;typeParams;constructor(e,t,n=null,r,i){super(t,r,i),this.value=e,this.typeParams=n}isEquivalent(t){return t instanceof e&&this.value.name===t.value.name&&this.value.moduleName===t.value.moduleName}isConstant(){return!1}visitExpression(e,t){return e.visitExternalExpr(this,t)}clone(){return new e(this.value,this.type,this.typeParams,this.sourceSpan)}},bt=class e extends ft{condition;falseCase;trueCase;constructor(e,t,n=null,r,i,a){super(r||t.type,i,a),this.condition=e,this.falseCase=n,this.trueCase=t}isEquivalent(t){return t instanceof e&&this.condition.isEquivalent(t.condition)&&this.trueCase.isEquivalent(t.trueCase)&<(this.falseCase,t.falseCase)}isConstant(){return!1}visitExpression(e,t){return e.visitConditionalExpr(this,t)}clone(){return new e(this.condition.clone(),this.trueCase.clone(),this.falseCase?.clone(),this.type,this.sourceSpan)}},xt=class e extends ft{operator;rhs;lhs;constructor(e,t,n,r,i,a){super(r||t.type,i,a),this.operator=e,this.rhs=n,this.lhs=t}isEquivalent(t){return t instanceof e&&this.operator===t.operator&&this.lhs.isEquivalent(t.lhs)&&this.rhs.isEquivalent(t.rhs)}isConstant(){return!1}visitExpression(e,t){return e.visitBinaryOperatorExpr(this,t)}clone(){return new e(this.operator,this.lhs.clone(),this.rhs.clone(),this.type,this.sourceSpan)}isAssignment(){let e=this.operator;return e===_.Assign||e===_.AdditionAssignment||e===_.SubtractionAssignment||e===_.MultiplicationAssignment||e===_.DivisionAssignment||e===_.RemainderAssignment||e===_.ExponentiationAssignment||e===_.AndAssignment||e===_.OrAssignment||e===_.NullishCoalesceAssignment}},St=class e extends ft{receiver;name;isOptional;constructor(e,t,n,r,i,a=!1){super(n,r,i),this.receiver=e,this.name=t,this.isOptional=a}get index(){return this.name}isEquivalent(t){return t instanceof e&&this.receiver.isEquivalent(t.receiver)&&this.name===t.name&&this.isOptional===t.isOptional}isConstant(){return!1}visitExpression(e,t){return e.visitReadPropExpr(this,t)}set(e){return new xt(_.Assign,this.receiver.prop(this.name),e,null,this.sourceSpan)}clone(){return new e(this.receiver.clone(),this.name,this.type,this.sourceSpan,[],this.isOptional)}},nee=class e extends ft{receiver;index;isOptional;constructor(e,t,n,r,i,a=!1){super(n,r,i),this.receiver=e,this.index=t,this.isOptional=a}isEquivalent(t){return t instanceof e&&this.receiver.isEquivalent(t.receiver)&&this.index.isEquivalent(t.index)&&this.isOptional===t.isOptional}isConstant(){return!1}visitExpression(e,t){return e.visitReadKeyExpr(this,t)}set(e){return new xt(_.Assign,this.receiver.key(this.index),e,null,this.sourceSpan)}clone(){return new e(this.receiver.clone(),this.index.clone(),this.type,this.sourceSpan,[],this.isOptional)}},ree=class e extends ft{entries;constructor(e,t,n,r){super(t,n,r),this.entries=e}isConstant(){return this.entries.every(e=>e.isConstant())}isEquivalent(t){return t instanceof e&&dt(this.entries,t.entries)}visitExpression(e,t){return e.visitLiteralArrayExpr(this,t)}clone(){return new e(this.entries.map(e=>e.clone()),this.type,this.sourceSpan)}},iee=class e{expression;constructor(e){this.expression=e}isEquivalent(t){return t instanceof e&&this.expression.isEquivalent(t.expression)}clone(){return new e(this.expression.clone())}isConstant(){return this.expression.isConstant()}},aee=class e extends ft{entries;valueType=null;constructor(e,t,n,r){super(t,n,r),this.entries=e,t&&(this.valueType=t.valueType)}isEquivalent(t){return t instanceof e&&dt(this.entries,t.entries)}isConstant(){return this.entries.every(e=>e.isConstant())}visitExpression(e,t){return e.visitLiteralMapExpr(this,t)}clone(){let t=this.entries.map(e=>e.clone());return new e(t,this.type,this.sourceSpan)}},oee=class e extends ft{expression;constructor(e,t,n){super(null,t,n),this.expression=e}isEquivalent(t){return t instanceof e&&this.expression.isEquivalent(t.expression)}isConstant(){return this.expression.isConstant()}visitExpression(e,t){return e.visitSpreadElementExpr(this,t)}clone(){return new e(this.expression.clone(),this.sourceSpan)}},see=new vt(null,ct,null),Ct=(function(e){return e[e.None=0]=`None`,e[e.Final=1]=`Final`,e[e.Private=2]=`Private`,e[e.Exported=4]=`Exported`,e[e.Static=8]=`Static`,e})(Ct||{}),cee=class{modifiers;sourceSpan;leadingComments;constructor(e=Ct.None,t=null,n){this.modifiers=e,this.sourceSpan=t,this.leadingComments=n}hasModifier(e){return(this.modifiers&e)!==0}addLeadingComment(e){this.leadingComments=this.leadingComments??[],this.leadingComments.push(e)}},lee=class e extends cee{expr;constructor(e,t,n){super(Ct.None,t,n),this.expr=e}isEquivalent(t){return t instanceof e&&this.expr.isEquivalent(t.expr)}visitStatement(e,t){return e.visitExpressionStmt(this,t)}};(class e{static INSTANCE=new e;keyOf(e){if(e instanceof vt&&typeof e.value==`string`)return`"${e.value}"`;if(e instanceof vt)return String(e.value);if(e instanceof _t)return`/${e.body}/${e.flags??``}`;if(e instanceof ree){let t=[];for(let n of e.entries)t.push(this.keyOf(n));return`[${t.join(`,`)}]`}if(e instanceof aee){let t=[];for(let n of e.entries)if(n instanceof iee)t.push(`...`+this.keyOf(n.expression));else{let e=n.key;n.quoted&&(e=`"${e}"`),t.push(e+`:`+this.keyOf(n.value))}return`{${t.join(`,`)}}`}if(e instanceof yt)return`import("${e.value.moduleName}", ${e.value.name})`;if(e instanceof pt)return`read(${e.name})`;if(e instanceof mt)return`typeof(${this.keyOf(e.expr)})`;if(e instanceof oee)return`...${this.keyOf(e.expression)}`;throw Error(`${this.constructor.name} does not handle expressions of type ${e.constructor.name}`)}});var v=`@angular/core`,y=(()=>{class e{static core={name:null,moduleName:v};static namespaceHTML={name:`ɵɵnamespaceHTML`,moduleName:v};static namespaceMathML={name:`ɵɵnamespaceMathML`,moduleName:v};static namespaceSVG={name:`ɵɵnamespaceSVG`,moduleName:v};static element={name:`ɵɵelement`,moduleName:v};static elementStart={name:`ɵɵelementStart`,moduleName:v};static elementEnd={name:`ɵɵelementEnd`,moduleName:v};static foreignComponent={name:`ɵɵforeignComponent`,moduleName:v};static foreignContent={name:`ɵɵforeignContent`,moduleName:v};static foreignContentFn={name:`ɵɵforeignContentFn`,moduleName:v};static domElement={name:`ɵɵdomElement`,moduleName:v};static domElementStart={name:`ɵɵdomElementStart`,moduleName:v};static domElementEnd={name:`ɵɵdomElementEnd`,moduleName:v};static domElementContainer={name:`ɵɵdomElementContainer`,moduleName:v};static domElementContainerStart={name:`ɵɵdomElementContainerStart`,moduleName:v};static domElementContainerEnd={name:`ɵɵdomElementContainerEnd`,moduleName:v};static domTemplate={name:`ɵɵdomTemplate`,moduleName:v};static domListener={name:`ɵɵdomListener`,moduleName:v};static advance={name:`ɵɵadvance`,moduleName:v};static syntheticHostProperty={name:`ɵɵsyntheticHostProperty`,moduleName:v};static syntheticHostListener={name:`ɵɵsyntheticHostListener`,moduleName:v};static attribute={name:`ɵɵattribute`,moduleName:v};static classProp={name:`ɵɵclassProp`,moduleName:v};static elementContainerStart={name:`ɵɵelementContainerStart`,moduleName:v};static elementContainerEnd={name:`ɵɵelementContainerEnd`,moduleName:v};static elementContainer={name:`ɵɵelementContainer`,moduleName:v};static styleMap={name:`ɵɵstyleMap`,moduleName:v};static classMap={name:`ɵɵclassMap`,moduleName:v};static styleProp={name:`ɵɵstyleProp`,moduleName:v};static interpolate={name:`ɵɵinterpolate`,moduleName:v};static interpolate1={name:`ɵɵinterpolate1`,moduleName:v};static interpolate2={name:`ɵɵinterpolate2`,moduleName:v};static interpolate3={name:`ɵɵinterpolate3`,moduleName:v};static interpolate4={name:`ɵɵinterpolate4`,moduleName:v};static interpolate5={name:`ɵɵinterpolate5`,moduleName:v};static interpolate6={name:`ɵɵinterpolate6`,moduleName:v};static interpolate7={name:`ɵɵinterpolate7`,moduleName:v};static interpolate8={name:`ɵɵinterpolate8`,moduleName:v};static interpolateV={name:`ɵɵinterpolateV`,moduleName:v};static nextContext={name:`ɵɵnextContext`,moduleName:v};static resetView={name:`ɵɵresetView`,moduleName:v};static templateCreate={name:`ɵɵtemplate`,moduleName:v};static defer={name:`ɵɵdefer`,moduleName:v};static deferWhen={name:`ɵɵdeferWhen`,moduleName:v};static deferOnIdle={name:`ɵɵdeferOnIdle`,moduleName:v};static deferOnImmediate={name:`ɵɵdeferOnImmediate`,moduleName:v};static deferOnTimer={name:`ɵɵdeferOnTimer`,moduleName:v};static deferOnHover={name:`ɵɵdeferOnHover`,moduleName:v};static deferOnInteraction={name:`ɵɵdeferOnInteraction`,moduleName:v};static deferOnViewport={name:`ɵɵdeferOnViewport`,moduleName:v};static deferPrefetchWhen={name:`ɵɵdeferPrefetchWhen`,moduleName:v};static deferPrefetchOnIdle={name:`ɵɵdeferPrefetchOnIdle`,moduleName:v};static deferPrefetchOnImmediate={name:`ɵɵdeferPrefetchOnImmediate`,moduleName:v};static deferPrefetchOnTimer={name:`ɵɵdeferPrefetchOnTimer`,moduleName:v};static deferPrefetchOnHover={name:`ɵɵdeferPrefetchOnHover`,moduleName:v};static deferPrefetchOnInteraction={name:`ɵɵdeferPrefetchOnInteraction`,moduleName:v};static deferPrefetchOnViewport={name:`ɵɵdeferPrefetchOnViewport`,moduleName:v};static deferHydrateWhen={name:`ɵɵdeferHydrateWhen`,moduleName:v};static deferHydrateNever={name:`ɵɵdeferHydrateNever`,moduleName:v};static deferHydrateOnIdle={name:`ɵɵdeferHydrateOnIdle`,moduleName:v};static deferHydrateOnImmediate={name:`ɵɵdeferHydrateOnImmediate`,moduleName:v};static deferHydrateOnTimer={name:`ɵɵdeferHydrateOnTimer`,moduleName:v};static deferHydrateOnHover={name:`ɵɵdeferHydrateOnHover`,moduleName:v};static deferHydrateOnInteraction={name:`ɵɵdeferHydrateOnInteraction`,moduleName:v};static deferHydrateOnViewport={name:`ɵɵdeferHydrateOnViewport`,moduleName:v};static deferEnableTimerScheduling={name:`ɵɵdeferEnableTimerScheduling`,moduleName:v};static enableIncrementalHydrationRuntime={name:`ɵɵenableIncrementalHydrationRuntime`,moduleName:v};static conditionalCreate={name:`ɵɵconditionalCreate`,moduleName:v};static conditionalBranchCreate={name:`ɵɵconditionalBranchCreate`,moduleName:v};static conditional={name:`ɵɵconditional`,moduleName:v};static repeater={name:`ɵɵrepeater`,moduleName:v};static repeaterCreate={name:`ɵɵrepeaterCreate`,moduleName:v};static repeaterTrackByIndex={name:`ɵɵrepeaterTrackByIndex`,moduleName:v};static repeaterTrackByIdentity={name:`ɵɵrepeaterTrackByIdentity`,moduleName:v};static componentInstance={name:`ɵɵcomponentInstance`,moduleName:v};static text={name:`ɵɵtext`,moduleName:v};static enableBindings={name:`ɵɵenableBindings`,moduleName:v};static disableBindings={name:`ɵɵdisableBindings`,moduleName:v};static getCurrentView={name:`ɵɵgetCurrentView`,moduleName:v};static textInterpolate={name:`ɵɵtextInterpolate`,moduleName:v};static textInterpolate1={name:`ɵɵtextInterpolate1`,moduleName:v};static textInterpolate2={name:`ɵɵtextInterpolate2`,moduleName:v};static textInterpolate3={name:`ɵɵtextInterpolate3`,moduleName:v};static textInterpolate4={name:`ɵɵtextInterpolate4`,moduleName:v};static textInterpolate5={name:`ɵɵtextInterpolate5`,moduleName:v};static textInterpolate6={name:`ɵɵtextInterpolate6`,moduleName:v};static textInterpolate7={name:`ɵɵtextInterpolate7`,moduleName:v};static textInterpolate8={name:`ɵɵtextInterpolate8`,moduleName:v};static textInterpolateV={name:`ɵɵtextInterpolateV`,moduleName:v};static restoreView={name:`ɵɵrestoreView`,moduleName:v};static pureFunction0={name:`ɵɵpureFunction0`,moduleName:v};static pureFunction1={name:`ɵɵpureFunction1`,moduleName:v};static pureFunction2={name:`ɵɵpureFunction2`,moduleName:v};static pureFunction3={name:`ɵɵpureFunction3`,moduleName:v};static pureFunction4={name:`ɵɵpureFunction4`,moduleName:v};static pureFunction5={name:`ɵɵpureFunction5`,moduleName:v};static pureFunction6={name:`ɵɵpureFunction6`,moduleName:v};static pureFunction7={name:`ɵɵpureFunction7`,moduleName:v};static pureFunction8={name:`ɵɵpureFunction8`,moduleName:v};static pureFunctionV={name:`ɵɵpureFunctionV`,moduleName:v};static pipeBind1={name:`ɵɵpipeBind1`,moduleName:v};static pipeBind2={name:`ɵɵpipeBind2`,moduleName:v};static pipeBind3={name:`ɵɵpipeBind3`,moduleName:v};static pipeBind4={name:`ɵɵpipeBind4`,moduleName:v};static pipeBindV={name:`ɵɵpipeBindV`,moduleName:v};static domProperty={name:`ɵɵdomProperty`,moduleName:v};static ariaProperty={name:`ɵɵariaProperty`,moduleName:v};static property={name:`ɵɵproperty`,moduleName:v};static control={name:`ɵɵcontrol`,moduleName:v};static controlCreate={name:`ɵɵcontrolCreate`,moduleName:v};static animationEnterListener={name:`ɵɵanimateEnterListener`,moduleName:v};static animationLeaveListener={name:`ɵɵanimateLeaveListener`,moduleName:v};static animationEnter={name:`ɵɵanimateEnter`,moduleName:v};static animationLeave={name:`ɵɵanimateLeave`,moduleName:v};static i18n={name:`ɵɵi18n`,moduleName:v};static i18nAttributes={name:`ɵɵi18nAttributes`,moduleName:v};static i18nExp={name:`ɵɵi18nExp`,moduleName:v};static i18nStart={name:`ɵɵi18nStart`,moduleName:v};static i18nEnd={name:`ɵɵi18nEnd`,moduleName:v};static i18nApply={name:`ɵɵi18nApply`,moduleName:v};static i18nPostprocess={name:`ɵɵi18nPostprocess`,moduleName:v};static pipe={name:`ɵɵpipe`,moduleName:v};static projection={name:`ɵɵprojection`,moduleName:v};static projectionDef={name:`ɵɵprojectionDef`,moduleName:v};static reference={name:`ɵɵreference`,moduleName:v};static inject={name:`ɵɵinject`,moduleName:v};static injectAttribute={name:`ɵɵinjectAttribute`,moduleName:v};static directiveInject={name:`ɵɵdirectiveInject`,moduleName:v};static invalidFactory={name:`ɵɵinvalidFactory`,moduleName:v};static invalidFactoryDep={name:`ɵɵinvalidFactoryDep`,moduleName:v};static templateRefExtractor={name:`ɵɵtemplateRefExtractor`,moduleName:v};static forwardRef={name:`forwardRef`,moduleName:v};static resolveForwardRef={name:`resolveForwardRef`,moduleName:v};static replaceMetadata={name:`ɵɵreplaceMetadata`,moduleName:v};static getReplaceMetadataURL={name:`ɵɵgetReplaceMetadataURL`,moduleName:v};static ɵɵdefineInjectable={name:`ɵɵdefineInjectable`,moduleName:v};static declareInjectable={name:`ɵɵngDeclareInjectable`,moduleName:v};static InjectableDeclaration={name:`ɵɵInjectableDeclaration`,moduleName:v};static defineService={name:`ɵɵdefineService`,moduleName:v};static declareService={name:`ɵɵngDeclareService`,moduleName:v};static resolveWindow={name:`ɵɵresolveWindow`,moduleName:v};static resolveDocument={name:`ɵɵresolveDocument`,moduleName:v};static resolveBody={name:`ɵɵresolveBody`,moduleName:v};static getComponentDepsFactory={name:`ɵɵgetComponentDepsFactory`,moduleName:v};static defineComponent={name:`ɵɵdefineComponent`,moduleName:v};static declareComponent={name:`ɵɵngDeclareComponent`,moduleName:v};static setComponentScope={name:`ɵɵsetComponentScope`,moduleName:v};static ChangeDetectionStrategy={name:`ChangeDetectionStrategy`,moduleName:v};static ViewEncapsulation={name:`ViewEncapsulation`,moduleName:v};static ComponentDeclaration={name:`ɵɵComponentDeclaration`,moduleName:v};static FactoryDeclaration={name:`ɵɵFactoryDeclaration`,moduleName:v};static declareFactory={name:`ɵɵngDeclareFactory`,moduleName:v};static FactoryTarget={name:`ɵɵFactoryTarget`,moduleName:v};static defineDirective={name:`ɵɵdefineDirective`,moduleName:v};static declareDirective={name:`ɵɵngDeclareDirective`,moduleName:v};static DirectiveDeclaration={name:`ɵɵDirectiveDeclaration`,moduleName:v};static InjectorDef={name:`ɵɵInjectorDef`,moduleName:v};static InjectorDeclaration={name:`ɵɵInjectorDeclaration`,moduleName:v};static defineInjector={name:`ɵɵdefineInjector`,moduleName:v};static declareInjector={name:`ɵɵngDeclareInjector`,moduleName:v};static NgModuleDeclaration={name:`ɵɵNgModuleDeclaration`,moduleName:v};static ModuleWithProviders={name:`ModuleWithProviders`,moduleName:v};static defineNgModule={name:`ɵɵdefineNgModule`,moduleName:v};static declareNgModule={name:`ɵɵngDeclareNgModule`,moduleName:v};static setNgModuleScope={name:`ɵɵsetNgModuleScope`,moduleName:v};static registerNgModuleType={name:`ɵɵregisterNgModuleType`,moduleName:v};static PipeDeclaration={name:`ɵɵPipeDeclaration`,moduleName:v};static definePipe={name:`ɵɵdefinePipe`,moduleName:v};static declarePipe={name:`ɵɵngDeclarePipe`,moduleName:v};static declareClassMetadata={name:`ɵɵngDeclareClassMetadata`,moduleName:v};static declareClassMetadataAsync={name:`ɵɵngDeclareClassMetadataAsync`,moduleName:v};static setClassMetadata={name:`ɵsetClassMetadata`,moduleName:v};static setClassMetadataAsync={name:`ɵsetClassMetadataAsync`,moduleName:v};static setClassDebugInfo={name:`ɵsetClassDebugInfo`,moduleName:v};static queryRefresh={name:`ɵɵqueryRefresh`,moduleName:v};static viewQuery={name:`ɵɵviewQuery`,moduleName:v};static loadQuery={name:`ɵɵloadQuery`,moduleName:v};static contentQuery={name:`ɵɵcontentQuery`,moduleName:v};static viewQuerySignal={name:`ɵɵviewQuerySignal`,moduleName:v};static contentQuerySignal={name:`ɵɵcontentQuerySignal`,moduleName:v};static queryAdvance={name:`ɵɵqueryAdvance`,moduleName:v};static twoWayProperty={name:`ɵɵtwoWayProperty`,moduleName:v};static twoWayBindingSet={name:`ɵɵtwoWayBindingSet`,moduleName:v};static twoWayListener={name:`ɵɵtwoWayListener`,moduleName:v};static declareLet={name:`ɵɵdeclareLet`,moduleName:v};static storeLet={name:`ɵɵstoreLet`,moduleName:v};static readContextLet={name:`ɵɵreadContextLet`,moduleName:v};static arrowFunction={name:`ɵɵarrowFunction`,moduleName:v};static attachSourceLocations={name:`ɵɵattachSourceLocations`,moduleName:v};static NgOnChangesFeature={name:`ɵɵNgOnChangesFeature`,moduleName:v};static ControlFeature={name:`ɵɵControlFeature`,moduleName:v};static InheritDefinitionFeature={name:`ɵɵInheritDefinitionFeature`,moduleName:v};static ProvidersFeature={name:`ɵɵProvidersFeature`,moduleName:v};static HostDirectivesFeature={name:`ɵɵHostDirectivesFeature`,moduleName:v};static ExternalStylesFeature={name:`ɵɵExternalStylesFeature`,moduleName:v};static listener={name:`ɵɵlistener`,moduleName:v};static getInheritedFactory={name:`ɵɵgetInheritedFactory`,moduleName:v};static sanitizeHtml={name:`ɵɵsanitizeHtml`,moduleName:v};static sanitizeStyle={name:`ɵɵsanitizeStyle`,moduleName:v};static validateAttribute={name:`ɵɵvalidateAttribute`,moduleName:v};static sanitizeResourceUrl={name:`ɵɵsanitizeResourceUrl`,moduleName:v};static sanitizeScript={name:`ɵɵsanitizeScript`,moduleName:v};static sanitizeUrl={name:`ɵɵsanitizeUrl`,moduleName:v};static sanitizeUrlOrResourceUrl={name:`ɵɵsanitizeUrlOrResourceUrl`,moduleName:v};static trustConstantHtml={name:`ɵɵtrustConstantHtml`,moduleName:v};static trustConstantResourceUrl={name:`ɵɵtrustConstantResourceUrl`,moduleName:v};static inputDecorator={name:`Input`,moduleName:v};static outputDecorator={name:`Output`,moduleName:v};static viewChildDecorator={name:`ViewChild`,moduleName:v};static viewChildrenDecorator={name:`ViewChildren`,moduleName:v};static contentChildDecorator={name:`ContentChild`,moduleName:v};static contentChildrenDecorator={name:`ContentChildren`,moduleName:v};static InputSignalBrandWriteType={name:`ɵINPUT_SIGNAL_BRAND_WRITE_TYPE`,moduleName:v};static UnwrapDirectiveSignalInputs={name:`ɵUnwrapDirectiveSignalInputs`,moduleName:v};static unwrapWritableSignal={name:`ɵunwrapWritableSignal`,moduleName:v};static assertType={name:`ɵassertType`,moduleName:v}}return e})();_.And,_.Bigger,_.BiggerEquals,_.BitwiseOr,_.BitwiseAnd,_.Divide,_.Assign,_.Equals,_.Identical,_.Lower,_.LowerEquals,_.Minus,_.Modulo,_.Exponentiation,_.Multiply,_.NotEquals,_.NotIdentical,_.NullishCoalesce,_.Or,_.Plus,_.In,_.InstanceOf,_.AdditionAssignment,_.SubtractionAssignment,_.MultiplicationAssignment,_.DivisionAssignment,_.RemainderAssignment,_.ExponentiationAssignment,_.AndAssignment,_.OrAssignment,_.NullishCoalesceAssignment;var wt=class{span;sourceSpan;constructor(e,t){this.span=e,this.sourceSpan=t}toString(){return`AST`}},Tt=class extends wt{receiver;args;argumentSpan;constructor(e,t,n,r,i){super(e,t),this.receiver=n,this.args=r,this.argumentSpan=i}visit(e,t=null){return e.visitCall(this,t)}},Et=(function(e){return e[e.Property=0]=`Property`,e[e.Attribute=1]=`Attribute`,e[e.Class=2]=`Class`,e[e.Style=3]=`Style`,e[e.LegacyAnimation=4]=`LegacyAnimation`,e[e.TwoWay=5]=`TwoWay`,e[e.Animation=6]=`Animation`,e})(Et||{}),Dt=`(:(where|is)\\()?`,Ot=`-shadowcsshost`,kt=`-shadowcsscontext`,At=`[^)(]*`,jt=String.raw`(?:\(${At}\)|${At})+?`,Mt=String.raw`(?:\(${jt}\)|${At})+?`,Nt=String.raw`(?:\((${Mt})\))`;String.raw`(:nth-[-\w]+)`+Nt,Ot+Nt+``,`${Dt}`,kt+Nt+``;var Pt=(function(e){return e[e.ListEnd=0]=`ListEnd`,e[e.Statement=1]=`Statement`,e[e.Variable=2]=`Variable`,e[e.ElementStart=3]=`ElementStart`,e[e.Element=4]=`Element`,e[e.ForeignComponent=5]=`ForeignComponent`,e[e.Template=6]=`Template`,e[e.ElementEnd=7]=`ElementEnd`,e[e.ContainerStart=8]=`ContainerStart`,e[e.Container=9]=`Container`,e[e.ContainerEnd=10]=`ContainerEnd`,e[e.DisableBindings=11]=`DisableBindings`,e[e.ConditionalCreate=12]=`ConditionalCreate`,e[e.ConditionalBranchCreate=13]=`ConditionalBranchCreate`,e[e.Conditional=14]=`Conditional`,e[e.EnableBindings=15]=`EnableBindings`,e[e.Text=16]=`Text`,e[e.Listener=17]=`Listener`,e[e.InterpolateText=18]=`InterpolateText`,e[e.Binding=19]=`Binding`,e[e.Property=20]=`Property`,e[e.StyleProp=21]=`StyleProp`,e[e.ClassProp=22]=`ClassProp`,e[e.StyleMap=23]=`StyleMap`,e[e.ClassMap=24]=`ClassMap`,e[e.Advance=25]=`Advance`,e[e.Pipe=26]=`Pipe`,e[e.Attribute=27]=`Attribute`,e[e.ExtractedAttribute=28]=`ExtractedAttribute`,e[e.Defer=29]=`Defer`,e[e.DeferOn=30]=`DeferOn`,e[e.DeferWhen=31]=`DeferWhen`,e[e.I18nMessage=32]=`I18nMessage`,e[e.DomProperty=33]=`DomProperty`,e[e.Namespace=34]=`Namespace`,e[e.ProjectionDef=35]=`ProjectionDef`,e[e.EnableIncrementalHydrationRuntime=36]=`EnableIncrementalHydrationRuntime`,e[e.Projection=37]=`Projection`,e[e.Content=38]=`Content`,e[e.RepeaterCreate=39]=`RepeaterCreate`,e[e.Repeater=40]=`Repeater`,e[e.TwoWayProperty=41]=`TwoWayProperty`,e[e.TwoWayListener=42]=`TwoWayListener`,e[e.DeclareLet=43]=`DeclareLet`,e[e.StoreLet=44]=`StoreLet`,e[e.I18nStart=45]=`I18nStart`,e[e.I18n=46]=`I18n`,e[e.I18nEnd=47]=`I18nEnd`,e[e.I18nExpression=48]=`I18nExpression`,e[e.I18nApply=49]=`I18nApply`,e[e.IcuStart=50]=`IcuStart`,e[e.IcuEnd=51]=`IcuEnd`,e[e.IcuPlaceholder=52]=`IcuPlaceholder`,e[e.I18nContext=53]=`I18nContext`,e[e.I18nAttributes=54]=`I18nAttributes`,e[e.SourceLocation=55]=`SourceLocation`,e[e.Animation=56]=`Animation`,e[e.AnimationString=57]=`AnimationString`,e[e.AnimationBinding=58]=`AnimationBinding`,e[e.AnimationListener=59]=`AnimationListener`,e[e.Control=60]=`Control`,e[e.ControlCreate=61]=`ControlCreate`,e})(Pt||{}),Ft=(function(e){return e[e.LexicalRead=0]=`LexicalRead`,e[e.Context=1]=`Context`,e[e.TrackContext=2]=`TrackContext`,e[e.ReadVariable=3]=`ReadVariable`,e[e.NextContext=4]=`NextContext`,e[e.Reference=5]=`Reference`,e[e.StoreLet=6]=`StoreLet`,e[e.ContextLetReference=7]=`ContextLetReference`,e[e.GetCurrentView=8]=`GetCurrentView`,e[e.RestoreView=9]=`RestoreView`,e[e.ResetView=10]=`ResetView`,e[e.PureFunctionExpr=11]=`PureFunctionExpr`,e[e.PureFunctionParameterExpr=12]=`PureFunctionParameterExpr`,e[e.PipeBinding=13]=`PipeBinding`,e[e.PipeBindingVariadic=14]=`PipeBindingVariadic`,e[e.SafePropertyRead=15]=`SafePropertyRead`,e[e.SafeKeyedRead=16]=`SafeKeyedRead`,e[e.SafeNavigationMigration=17]=`SafeNavigationMigration`,e[e.SafeTernaryExpr=18]=`SafeTernaryExpr`,e[e.EmptyExpr=19]=`EmptyExpr`,e[e.AssignTemporaryExpr=20]=`AssignTemporaryExpr`,e[e.ReadTemporaryExpr=21]=`ReadTemporaryExpr`,e[e.SlotLiteralExpr=22]=`SlotLiteralExpr`,e[e.ConditionalCase=23]=`ConditionalCase`,e[e.ConstCollected=24]=`ConstCollected`,e[e.TwoWayBindingSet=25]=`TwoWayBindingSet`,e[e.ForeignContent=26]=`ForeignContent`,e[e.ArrowFunction=27]=`ArrowFunction`,e})(Ft||{}),It=(function(e){return e[e.None=0]=`None`,e[e.AlwaysInline=1]=`AlwaysInline`,e})(It||{}),Lt=(function(e){return e[e.Context=0]=`Context`,e[e.Identifier=1]=`Identifier`,e[e.SavedView=2]=`SavedView`,e[e.Alias=3]=`Alias`,e})(Lt||{}),Rt=(function(e){return e[e.Attribute=0]=`Attribute`,e[e.ClassName=1]=`ClassName`,e[e.StyleProperty=2]=`StyleProperty`,e[e.Property=3]=`Property`,e[e.Template=4]=`Template`,e[e.I18n=5]=`I18n`,e[e.LegacyAnimation=6]=`LegacyAnimation`,e[e.TwoWayProperty=7]=`TwoWayProperty`,e[e.Animation=8]=`Animation`,e})(Rt||{}),zt=(function(e){return e[e.Creation=0]=`Creation`,e[e.Postproccessing=1]=`Postproccessing`,e})(zt||{}),Bt=(function(e){return e[e.I18nText=0]=`I18nText`,e[e.I18nAttribute=1]=`I18nAttribute`,e})(Bt||{}),Vt=(function(e){return e[e.None=0]=`None`,e[e.ElementTag=1]=`ElementTag`,e[e.TemplateTag=2]=`TemplateTag`,e[e.OpenTag=4]=`OpenTag`,e[e.CloseTag=8]=`CloseTag`,e[e.ExpressionIndex=16]=`ExpressionIndex`,e})(Vt||{}),Ht=(function(e){return e[e.HTML=0]=`HTML`,e[e.SVG=1]=`SVG`,e[e.Math=2]=`Math`,e})(Ht||{}),Ut=(function(e){return e[e.Idle=0]=`Idle`,e[e.Immediate=1]=`Immediate`,e[e.Timer=2]=`Timer`,e[e.Hover=3]=`Hover`,e[e.Interaction=4]=`Interaction`,e[e.Viewport=5]=`Viewport`,e[e.Never=6]=`Never`,e})(Ut||{}),Wt=(function(e){return e[e.RootI18n=0]=`RootI18n`,e[e.Icu=1]=`Icu`,e[e.Attr=2]=`Attr`,e})(Wt||{}),Gt=(function(e){return e[e.NgTemplate=0]=`NgTemplate`,e[e.Structural=1]=`Structural`,e[e.Block=2]=`Block`,e})(Gt||{}),Kt=(function(e){return e[e.None=0]=`None`,e[e.InChildOperation=1]=`InChildOperation`,e[e.InArrowFunctionOperation=2]=`InArrowFunctionOperation`,e[e.InSafeNavigationMigration=4]=`InSafeNavigationMigration`,e})(Kt||{});Pt.Element,Pt.ElementStart,Pt.Container,Pt.ContainerStart,Pt.Template,Pt.RepeaterCreate,Pt.ConditionalCreate,Pt.ConditionalBranchCreate;var b=(function(e){return e[e.Tmpl=0]=`Tmpl`,e[e.Host=1]=`Host`,e[e.Both=2]=`Both`,e})(b||{}),qt=(function(e){return e[e.Full=0]=`Full`,e[e.DomOnly=1]=`DomOnly`,e})(qt||{});y.ariaProperty,y.ariaProperty,y.attribute,y.attribute,y.classProp,y.classProp,y.element,y.element,y.elementContainer,y.elementContainer,y.elementContainerEnd,y.elementContainerEnd,y.elementContainerStart,y.elementContainerStart,y.elementEnd,y.elementEnd,y.elementStart,y.elementStart,y.domProperty,y.domProperty,y.i18nExp,y.i18nExp,y.listener,y.listener,y.listener,y.listener,y.property,y.property,y.styleProp,y.styleProp,y.syntheticHostListener,y.syntheticHostListener,y.syntheticHostProperty,y.syntheticHostProperty,y.templateCreate,y.templateCreate,y.twoWayProperty,y.twoWayProperty,y.twoWayListener,y.twoWayListener,y.declareLet,y.declareLet,y.conditionalCreate,y.conditionalBranchCreate,y.conditionalBranchCreate,y.conditionalBranchCreate,y.domElement,y.domElement,y.domElementStart,y.domElementStart,y.domElementEnd,y.domElementEnd,y.domElementContainer,y.domElementContainer,y.domElementContainerStart,y.domElementContainerStart,y.domElementContainerEnd,y.domElementContainerEnd,y.domListener,y.domListener,y.domTemplate,y.domTemplate,y.animationEnter,y.animationEnter,y.animationLeave,y.animationLeave,y.animationEnterListener,y.animationEnterListener,y.animationLeaveListener,y.animationLeaveListener,_.And,_.Bigger,_.BiggerEquals,_.BitwiseOr,_.BitwiseAnd,_.Divide,_.Assign,_.Equals,_.Identical,_.Lower,_.LowerEquals,_.Minus,_.Modulo,_.Exponentiation,_.Multiply,_.NotEquals,_.NotIdentical,_.NullishCoalesce,_.Or,_.Plus,_.In,_.InstanceOf,_.AdditionAssignment,_.SubtractionAssignment,_.MultiplicationAssignment,_.DivisionAssignment,_.RemainderAssignment,_.ExponentiationAssignment,_.AndAssignment,_.OrAssignment,_.NullishCoalesceAssignment,Pt.Property,Pt.Property,Pt.Property,Pt.Attribute,Pt.Attribute,Pt.Property,Pt.TwoWayProperty,Pt.Container,Pt.ContainerStart,Pt.ContainerEnd,Pt.Element,Pt.ElementStart,Pt.ElementEnd,Pt.Template,Pt.ElementEnd,Pt.ElementStart,Pt.Element,Pt.ContainerEnd,Pt.ContainerStart,Pt.Container,Pt.I18nEnd,Pt.I18nStart,Pt.I18n,Pt.Pipe;var Jt=` \f -\r \v ᠎ - \u2028\u2029   `;`${Jt}`,`${Jt}`;var Yt=(function(e){return e[e.Character=0]=`Character`,e[e.Identifier=1]=`Identifier`,e[e.PrivateIdentifier=2]=`PrivateIdentifier`,e[e.Keyword=3]=`Keyword`,e[e.String=4]=`String`,e[e.Operator=5]=`Operator`,e[e.Number=6]=`Number`,e[e.RegExpBody=7]=`RegExpBody`,e[e.RegExpFlags=8]=`RegExpFlags`,e[e.Error=9]=`Error`,e})(Yt||{}),Xt=(function(e){return e[e.Plain=0]=`Plain`,e[e.TemplateLiteralPart=1]=`TemplateLiteralPart`,e[e.TemplateLiteralEnd=2]=`TemplateLiteralEnd`,e})(Xt||{});Yt.Character,Pt.StyleMap,Pt.ClassMap,Pt.StyleProp,Pt.ClassProp,Pt.Attribute,Pt.Property,Pt.Attribute,Pt.Control,Pt.DomProperty,Pt.DomProperty,Pt.Attribute,Pt.StyleMap,Pt.ClassMap,Pt.StyleProp,Pt.ClassProp,Pt.Listener,Pt.TwoWayListener,Pt.AnimationListener,Pt.StyleMap,Pt.ClassMap,Pt.StyleProp,Pt.ClassProp,Pt.Property,Pt.TwoWayProperty,Pt.DomProperty,Pt.Attribute,Pt.Animation,Pt.Control,Ut.Idle,y.deferOnIdle,y.deferPrefetchOnIdle,y.deferHydrateOnIdle,Ut.Immediate,y.deferOnImmediate,y.deferPrefetchOnImmediate,y.deferHydrateOnImmediate,Ut.Timer,y.deferOnTimer,y.deferPrefetchOnTimer,y.deferHydrateOnTimer,Ut.Hover,y.deferOnHover,y.deferPrefetchOnHover,y.deferHydrateOnHover,Ut.Interaction,y.deferOnInteraction,y.deferPrefetchOnInteraction,y.deferHydrateOnInteraction,Ut.Viewport,y.deferOnViewport,y.deferPrefetchOnViewport,y.deferHydrateOnViewport,Ut.Never,y.deferHydrateNever,y.deferHydrateNever,y.deferHydrateNever,y.pipeBind1,y.pipeBind2,y.pipeBind3,y.pipeBind4,y.textInterpolate,y.textInterpolate1,y.textInterpolate2,y.textInterpolate3,y.textInterpolate4,y.textInterpolate5,y.textInterpolate6,y.textInterpolate7,y.textInterpolate8,y.textInterpolateV,y.interpolate,y.interpolate1,y.interpolate2,y.interpolate3,y.interpolate4,y.interpolate5,y.interpolate6,y.interpolate7,y.interpolate8,y.interpolateV,y.pureFunction0,y.pureFunction1,y.pureFunction2,y.pureFunction3,y.pureFunction4,y.pureFunction5,y.pureFunction6,y.pureFunction7,y.pureFunction8,y.pureFunctionV,y.resolveWindow,y.resolveDocument,y.resolveBody,rt.HTML,y.sanitizeHtml,rt.RESOURCE_URL,y.sanitizeResourceUrl,rt.SCRIPT,y.sanitizeScript,rt.STYLE,y.sanitizeStyle,rt.URL,y.sanitizeUrl,rt.ATTRIBUTE_NO_BINDING,y.validateAttribute,rt.HTML,y.trustConstantHtml,rt.RESOURCE_URL,y.trustConstantResourceUrl;var Zt=(function(e){return e[e.None=0]=`None`,e[e.ViewContextRead=1]=`ViewContextRead`,e[e.ViewContextWrite=2]=`ViewContextWrite`,e[e.SideEffectful=4]=`SideEffectful`,e})(Zt||{});b.Tmpl,b.Tmpl,b.Both,b.Host,b.Tmpl,b.Tmpl,b.Tmpl,b.Both,b.Both,b.Both,b.Tmpl,b.Both,b.Both,b.Tmpl,b.Both,b.Tmpl,b.Both,b.Both,b.Tmpl,b.Tmpl,b.Tmpl,b.Tmpl,b.Tmpl,b.Both,b.Both,b.Tmpl,b.Tmpl,b.Tmpl,b.Tmpl,b.Both,b.Both,b.Both,b.Tmpl,b.Tmpl,b.Both,b.Tmpl,b.Tmpl,b.Tmpl,b.Both,b.Both,b.Tmpl,b.Both,b.Both,b.Both,b.Both,b.Both,b.Tmpl,b.Tmpl,b.Tmpl,b.Tmpl,b.Tmpl,b.Tmpl,b.Tmpl,b.Tmpl,b.Tmpl,b.Tmpl,b.Tmpl,b.Tmpl,b.Both,b.Tmpl,b.Both,b.Tmpl,b.Both,b.Tmpl,b.Tmpl,b.Tmpl,b.Tmpl,b.Tmpl,b.Tmpl,b.Both,b.Both,b.Both,Et.Property,Rt.Property,Et.TwoWay,Rt.TwoWayProperty,Et.Attribute,Rt.Attribute,Et.Class,Rt.ClassName,Et.Style,Rt.StyleProperty,Et.LegacyAnimation,Rt.LegacyAnimation,Et.Animation,Rt.Animation;var Qt=`%COMP%`;`${Qt}`,`${Qt}`,class e{static SINGLETON=new e;static veWillInferAnyFor(t){let n=e.SINGLETON;return t instanceof Tt?t.visit(n):t.receiver.visit(n)}visitUnary(e){return e.expr.visit(this)}visitBinary(e){return e.left.visit(this)||e.right.visit(this)}visitChain(){return!1}visitConditional(e){return e.condition.visit(this)||e.trueExp.visit(this)||e.falseExp.visit(this)}visitCall(){return!0}visitSafeCall(){return!1}visitImplicitReceiver(){return!1}visitThisReceiver(){return!1}visitInterpolation(e){return e.expressions.some(e=>e.visit(this))}visitKeyedRead(){return!1}visitLiteralArray(){return!0}visitLiteralMap(){return!0}visitLiteralPrimitive(){return!1}visitPipe(){return!0}visitPrefixNot(e){return e.expression.visit(this)}visitTypeofExpression(e){return e.expression.visit(this)}visitVoidExpression(e){return e.expression.visit(this)}visitNonNullAssert(e){return e.expression.visit(this)}visitPropertyRead(){return!1}visitSafePropertyRead(){return!1}visitSafeKeyedRead(){return!1}visitTemplateLiteral(){return!1}visitTemplateLiteralElement(){return!1}visitTaggedTemplateLiteral(){return!1}visitParenthesizedExpression(e){return e.expression.visit(this)}visitRegularExpressionLiteral(){return!1}visitSpreadElement(e){return e.expression.visit(this)}visitArrowFunction(e,t){return!1}};var $t=null,en=!1,tn=1,nn=null,rn=Symbol(`SIGNAL`);function an(e){let t=$t;return $t=e,t}function on(){return $t}var sn={version:0,lastCleanEpoch:0,dirty:!1,producers:void 0,producersTail:void 0,consumers:void 0,consumersTail:void 0,recomputing:!1,consumerAllowSignalWrites:!1,consumerIsAlwaysLive:!1,kind:`unknown`,producerMustRecompute:()=>!1,producerRecomputeValue:()=>{},consumerMarkedDirty:()=>{},consumerOnSignalRead:()=>{}};function cn(e){if(en)throw Error(``);if($t===null)return;$t.consumerOnSignalRead(e);let t=$t.producersTail;if(t!==void 0&&t.producer===e)return;let n,r=$t.recomputing;if(r&&(n=t===void 0?$t.producers:t.nextProducer,n!==void 0&&n.producer===e)){$t.producersTail=n,n.lastReadVersion=e.version,n.knownValidAtEpoch=tn;return}let i=e.consumersTail;if(i!==void 0&&i.consumer===$t&&(!r||i.knownValidAtEpoch===tn))return;let a=Cn($t),o={producer:e,consumer:$t,nextProducer:n,prevConsumer:void 0,knownValidAtEpoch:tn,lastReadVersion:e.version,nextConsumer:void 0};$t.producersTail=o,t===void 0?$t.producers=o:t.nextProducer=o,a&&xn(e,o)}function ln(){tn++}function un(e){if((!Cn(e)||e.dirty)&&(e.dirty||e.lastCleanEpoch!==tn)){if(!e.producerMustRecompute(e)&&!yn(e)){mn(e);return}e.producerRecomputeValue(e),mn(e)}}function dn(e){if(e.consumers===void 0)return;let t=en;en=!0;try{for(let t=e.consumers;t!==void 0;t=t.nextConsumer){let e=t.consumer;e.dirty||pn(e)}}finally{en=t}}function fn(){return $t?.consumerAllowSignalWrites!==!1}function pn(e){e.dirty=!0,dn(e),e.consumerMarkedDirty?.(e)}function mn(e){e.dirty=!1,e.lastCleanEpoch=tn}function hn(e){return e&&gn(e),an(e)}function gn(e){if(e.producersTail?.knownValidAtEpoch===tn){let t=e.producers;for(;t!==void 0;)t.knownValidAtEpoch=null,t=t.nextProducer}e.producersTail=void 0,e.recomputing=!0}function _n(e,t){an(t),e&&vn(e)}function vn(e){e.recomputing=!1;let t=e.producersTail,n=t===void 0?e.producers:t.nextProducer;if(n!==void 0){if(Cn(e))do n=Sn(n);while(n!==void 0);t===void 0?e.producers=void 0:t.nextProducer=void 0}}function yn(e){for(let t=e.producers;t!==void 0;t=t.nextProducer){let e=t.producer,n=t.lastReadVersion;if(n!==e.version||(un(e),n!==e.version))return!0}return!1}function bn(e){if(Cn(e)){let t=e.producers;for(;t!==void 0;)t=Sn(t)}e.producers=void 0,e.producersTail=void 0,e.consumers=void 0,e.consumersTail=void 0}function xn(e,t){let n=e.consumersTail,r=Cn(e);if(n===void 0?(t.nextConsumer=void 0,e.consumers=t):(t.nextConsumer=n.nextConsumer,n.nextConsumer=t),t.prevConsumer=n,e.consumersTail=t,!r)for(let t=e.producers;t!==void 0;t=t.nextProducer)xn(t.producer,t)}function Sn(e){let t=e.producer,n=e.nextProducer,r=e.nextConsumer,i=e.prevConsumer;if(e.nextConsumer=void 0,e.prevConsumer=void 0,r===void 0?t.consumersTail=i:r.prevConsumer=i,i!==void 0)i.nextConsumer=r;else if(t.consumers=r,!Cn(t)){let e=t.producers;for(;e!==void 0;)e=Sn(e)}return n}function Cn(e){return e.consumerIsAlwaysLive||e.consumers!==void 0}function wn(e){nn?.(e)}function Tn(e,t){return Object.is(e,t)}function En(e,t){let n=Object.create(uee);n.computation=e,t!==void 0&&(n.equal=t);let r=()=>{if(un(n),cn(n),n.value===kn)throw n.error;return n.value};return r[rn]=n,wn(n),r}var Dn=Symbol(`UNSET`),On=Symbol(`COMPUTING`),kn=Symbol(`ERRORED`),uee={...sn,value:Dn,dirty:!0,error:null,equal:Tn,kind:`computed`,producerMustRecompute(e){return e.value===Dn||e.value===On},producerRecomputeValue(e){if(e.value===On)throw Error(``);let t=e.value;e.value=On;let n=hn(e),r,i=!1;try{r=e.computation(),an(null),i=t!==Dn&&t!==kn&&r!==kn&&e.equal(t,r)}catch(t){r=kn,e.error=t}finally{_n(e,n)}if(i){e.value=t;return}e.value=r,e.version++}};function dee(){throw Error()}var An=dee;function jn(e){An(e)}function fee(e){An=e}var pee=null;function mee(e,t){let n=Object.create(Pn);n.value=e,t!==void 0&&(n.equal=t);let r=()=>hee(n);return r[rn]=n,wn(n),[r,e=>Mn(n,e),e=>Nn(n,e)]}function hee(e){return cn(e),e.value}function Mn(e,t){fn()||jn(e),e.equal(e.value,t)||(e.value=t,Fn(e))}function Nn(e,t){fn()||jn(e),Mn(e,t(e.value))}var Pn={...sn,equal:Tn,value:void 0,kind:`signal`};function Fn(e){e.version++,ln(),dn(e),pee?.(e)}var In={...sn,consumerIsAlwaysLive:!0,consumerAllowSignalWrites:!0,dirty:!0,kind:`effect`};function Ln(e){if(e.dirty=!1,e.version>0&&!yn(e))return;e.version++;let t=hn(e);try{e.cleanup(),e.fn()}finally{_n(e,t)}}var Rn=void 0;function zn(){return Rn}function Bn(e){let t=Rn;return Rn=e,t}var Vn=Symbol(`NotFound`);function Hn(e){return e===Vn||e?.name===`ɵNotFound`}function Un(e,t,n){let r=Object.create(Kn);r.source=e,r.computation=t,n!=null&&(r.equal=n);let i=()=>{if(un(r),cn(r),r.value===kn)throw r.error;return r.value};return i[rn]=r,wn(r),i}function Wn(e,t){un(e),Mn(e,t),mn(e)}function Gn(e,t){if(un(e),e.value===kn)throw e.error;Nn(e,t),mn(e)}var Kn={...sn,value:Dn,dirty:!0,error:null,equal:Tn,kind:`linkedSignal`,producerMustRecompute(e){return e.value===Dn||e.value===On},producerRecomputeValue(e){if(e.value===On)throw Error(``);let t=e.value;e.value=On;let n=hn(e),r,i=!1;try{let n=e.source(),a=t!==Dn&&t!==kn,o=a?{source:e.sourceValue,value:t}:void 0;r=e.computation(n,o),e.sourceValue=n,an(null),i=a&&r!==kn&&e.equal(t,r)}catch(t){r=kn,e.error=t}finally{_n(e,n)}if(i){e.value=t;return}e.value=r,e.version++}};function qn(e){let t=an(null);try{return e()}finally{an(t)}}var Jn=function(e,t){return Jn=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},Jn(e,t)};function Yn(e,t){if(typeof t!=`function`&&t!==null)throw TypeError(`Class extends value `+String(t)+` is not a constructor or null`);Jn(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}function Xn(e,t,n,r){function i(e){return e instanceof n?e:new n(function(t){t(e)})}return new(n||=Promise)(function(n,a){function o(e){try{c(r.next(e))}catch(e){a(e)}}function s(e){try{c(r.throw(e))}catch(e){a(e)}}function c(e){e.done?n(e.value):i(e.value).then(o,s)}c((r=r.apply(e,t||[])).next())})}function Zn(e,t){var n={label:0,sent:function(){if(a[0]&1)throw a[1];return a[1]},trys:[],ops:[]},r,i,a,o=Object.create((typeof Iterator==`function`?Iterator:Object).prototype);return o.next=s(0),o.throw=s(1),o.return=s(2),typeof Symbol==`function`&&(o[Symbol.iterator]=function(){return this}),o;function s(e){return function(t){return c([e,t])}}function c(s){if(r)throw TypeError(`Generator is already executing.`);for(;o&&(o=0,s[0]&&(n=0)),n;)try{if(r=1,i&&(a=s[0]&2?i.return:s[0]?i.throw||((a=i.return)&&a.call(i),0):i.next)&&!(a=a.call(i,s[1])).done)return a;switch(i=0,a&&(s=[s[0]&2,a.value]),s[0]){case 0:case 1:a=s;break;case 4:return n.label++,{value:s[1],done:!1};case 5:n.label++,i=s[1],s=[0];continue;case 7:s=n.ops.pop(),n.trys.pop();continue;default:if(a=n.trys,!(a=a.length>0&&a[a.length-1])&&(s[0]===6||s[0]===2)){n=0;continue}if(s[0]===3&&(!a||s[1]>a[0]&&s[1]=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw TypeError(t?`Object is not iterable.`:`Symbol.iterator is not defined.`)}function $n(e,t){var n=typeof Symbol==`function`&&e[Symbol.iterator];if(!n)return e;var r=n.call(e),i,a=[],o;try{for(;(t===void 0||t-->0)&&!(i=r.next()).done;)a.push(i.value)}catch(e){o={error:e}}finally{try{i&&!i.done&&(n=r.return)&&n.call(r)}finally{if(o)throw o.error}}return a}function er(e,t,n){if(n||arguments.length===2)for(var r=0,i=t.length,a;r1||c(e,t)})},t&&(i[e]=t(i[e])))}function c(e,t){try{l(r[e](t))}catch(e){f(a[0][3],e)}}function l(e){e.value instanceof tr?Promise.resolve(e.value.v).then(u,d):f(a[0][2],e)}function u(e){c(`next`,e)}function d(e){c(`throw`,e)}function f(e,t){e(t),a.shift(),a.length&&c(a[0][0],a[0][1])}}function rr(e){if(!Symbol.asyncIterator)throw TypeError(`Symbol.asyncIterator is not defined.`);var t=e[Symbol.asyncIterator],n;return t?t.call(e):(e=typeof Qn==`function`?Qn(e):e[Symbol.iterator](),n={},r(`next`),r(`throw`),r(`return`),n[Symbol.asyncIterator]=function(){return this},n);function r(t){n[t]=e[t]&&function(n){return new Promise(function(r,a){n=e[t](n),i(r,a,n.done,n.value)})}}function i(e,t,n,r){Promise.resolve(r).then(function(t){e({value:t,done:n})},t)}}function ir(e){return typeof e==`function`}function ar(e){var t=e(function(e){Error.call(e),e.stack=Error().stack});return t.prototype=Object.create(Error.prototype),t.prototype.constructor=t,t}var or=ar(function(e){return function(t){e(this),this.message=t?t.length+` errors occurred during unsubscription: +(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),t.credentials=e.crossOrigin===`use-credentials`?`include`:e.crossOrigin===`anonymous`?`omit`:`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var e=Object.defineProperty,t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable,i=(t,n,r)=>n in t?e(t,n,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[n]=r,a=(e,a)=>{for(var o in a||={})n.call(a,o)&&i(e,o,a[o]);if(t)for(var o of t(a))r.call(a,o)&&i(e,o,a[o]);return e},o=(e,t,n)=>(i(e,typeof t==`symbol`?t:t+``,n),n),s=globalThis;function c(e){let t=s.__Zone_symbol_prefix;return(typeof t==`string`?t:`__zone_symbol__`)+e}function l(){let e=s.performance;function t(t){e&&e.mark&&e.mark(t)}function n(t,n){e&&e.measure&&e.measure(t,n)}t(`Zone`);let r=class e{constructor(e,t){o(this,`_parent`),o(this,`_name`),o(this,`_properties`),o(this,`_zoneDelegate`),this._parent=e,this._name=t?t.name||`unnamed`:``,this._properties=t&&t.properties||{},this._zoneDelegate=new l(this,this._parent&&this._parent._zoneDelegate,t)}static assertZonePatched(){if(s.Promise!==me.ZoneAwarePromise)throw Error("Zone.js has detected that ZoneAwarePromise `(window|global).Promise` has been overwritten.\nMost likely cause is that a Promise polyfill has been loaded after Zone.js (Polyfilling Promise api is not necessary when zone.js is loaded. If you must load one, do so before loading zone.js.)")}static get root(){let t=e.current;for(;t.parent;)t=t.parent;return t}static get current(){return ge.zone}static get currentTask(){return _e}static __load_patch(r,i,a=!1){if(Object.hasOwn(me,r)){let e=s[c(`forceDuplicateZoneCheck`)]===!0;if(!a&&e)throw Error(`Already loaded patch: `+r)}else if(!s[`__Zone_disable_`+r]){let a=`Zone:`+r;t(a),me[r]=i(s,e,he),n(a,a)}}get parent(){return this._parent}get name(){return this._name}get(e){let t=this.getZoneWith(e);if(t)return t._properties[e]}getZoneWith(e){let t=this;for(;t;){if(Object.hasOwn(t._properties,e))return t;t=t._parent}return null}fork(e){if(!e)throw Error(`ZoneSpec required!`);return this._zoneDelegate.fork(this,e)}wrap(e,t){if(typeof e!=`function`)throw Error(`Expecting function got: `+e);let n=this._zoneDelegate.intercept(this,e,t),r=this;return function(){return r.runGuarded(n,this,arguments,t)}}run(e,t,n,r){ge={parent:ge,zone:this};try{return this._zoneDelegate.invoke(this,e,t,n,r)}finally{ge=ge.parent}}runGuarded(e,t=null,n,r){ge={parent:ge,zone:this};try{try{return this._zoneDelegate.invoke(this,e,t,n,r)}catch(e){if(this._zoneDelegate.handleError(this,e))throw e}}finally{ge=ge.parent}}runTask(e,t,n){if(e.zone!=this)throw Error(`A task can only be run in the zone of creation! (Creation: `+(e.zone||ie).name+`; Execution: `+this.name+`)`);let r=e,{type:i,data:{isPeriodic:a=!1,isRefreshable:o=!1}={}}=e;if(e.state===ae&&(i===pe||i===fe))return;let s=e.state!=ce;s&&r._transitionTo(ce,se);let c=_e;_e=r,ge={parent:ge,zone:this};try{i==fe&&e.data&&!a&&!o&&(e.cancelFn=void 0);try{return this._zoneDelegate.invokeTask(this,r,t,n)}catch(e){if(this._zoneDelegate.handleError(this,e))throw e}}finally{let t=e.state;if(t!==ae&&t!==ue){if(i==pe||a||o&&t===oe)s&&r._transitionTo(se,ce,oe);else{let e=r._zoneDelegates;this._updateTaskCount(r,-1),s&&r._transitionTo(ae,ce,ae),o&&(r._zoneDelegates=e)}}ge=ge.parent,_e=c}}scheduleTask(e){if(e.zone&&e.zone!==this){let t=this;for(;t;){if(t===e.zone)throw Error(`can not reschedule task to ${this.name} which is descendants of the original zone ${e.zone.name}`);t=t.parent}}e._transitionTo(oe,ae);let t=[];e._zoneDelegates=t,e._zone=this;try{e=this._zoneDelegate.scheduleTask(this,e)}catch(t){throw e._transitionTo(ue,oe,ae),this._zoneDelegate.handleError(this,t),t}return e._zoneDelegates===t&&this._updateTaskCount(e,1),e.state==oe&&e._transitionTo(se,oe),e}scheduleMicroTask(e,t,n,r){return this.scheduleTask(new u(de,e,t,n,r,void 0))}scheduleMacroTask(e,t,n,r,i){return this.scheduleTask(new u(fe,e,t,n,r,i))}scheduleEventTask(e,t,n,r,i){return this.scheduleTask(new u(pe,e,t,n,r,i))}cancelTask(e){if(e.zone!=this)throw Error(`A task can only be cancelled in the zone of creation! (Creation: `+(e.zone||ie).name+`; Execution: `+this.name+`)`);if(e.state===se||e.state===ce){e._transitionTo(le,se,ce);try{this._zoneDelegate.cancelTask(this,e)}catch(t){throw e._transitionTo(ue,le),this._zoneDelegate.handleError(this,t),t}return this._updateTaskCount(e,-1),e._transitionTo(ae,le),e.runCount=-1,e}}_updateTaskCount(e,t){let n=e._zoneDelegates;t==-1&&(e._zoneDelegates=null);for(let r=0;re.hasTask(n,r),onScheduleTask:(e,t,n,r)=>e.scheduleTask(n,r),onInvokeTask:(e,t,n,r,i,a)=>e.invokeTask(n,r,i,a),onCancelTask:(e,t,n,r)=>e.cancelTask(n,r)};class l{constructor(e,t,n){o(this,`_zone`),o(this,`_taskCounts`,{microTask:0,macroTask:0,eventTask:0}),o(this,`_forkDlgt`),o(this,`_forkZS`),o(this,`_forkCurrZone`),o(this,`_interceptDlgt`),o(this,`_interceptZS`),o(this,`_interceptCurrZone`),o(this,`_invokeDlgt`),o(this,`_invokeZS`),o(this,`_invokeCurrZone`),o(this,`_handleErrorDlgt`),o(this,`_handleErrorZS`),o(this,`_handleErrorCurrZone`),o(this,`_scheduleTaskDlgt`),o(this,`_scheduleTaskZS`),o(this,`_scheduleTaskCurrZone`),o(this,`_invokeTaskDlgt`),o(this,`_invokeTaskZS`),o(this,`_invokeTaskCurrZone`),o(this,`_cancelTaskDlgt`),o(this,`_cancelTaskZS`),o(this,`_cancelTaskCurrZone`),o(this,`_hasTaskDlgt`),o(this,`_hasTaskDlgtOwner`),o(this,`_hasTaskZS`),o(this,`_hasTaskCurrZone`),this._zone=e,this._forkZS=n&&(n&&n.onFork?n:t._forkZS),this._forkDlgt=n&&(n.onFork?t:t._forkDlgt),this._forkCurrZone=n&&(n.onFork?this._zone:t._forkCurrZone),this._interceptZS=n&&(n.onIntercept?n:t._interceptZS),this._interceptDlgt=n&&(n.onIntercept?t:t._interceptDlgt),this._interceptCurrZone=n&&(n.onIntercept?this._zone:t._interceptCurrZone),this._invokeZS=n&&(n.onInvoke?n:t._invokeZS),this._invokeDlgt=n&&(n.onInvoke?t:t._invokeDlgt),this._invokeCurrZone=n&&(n.onInvoke?this._zone:t._invokeCurrZone),this._handleErrorZS=n&&(n.onHandleError?n:t._handleErrorZS),this._handleErrorDlgt=n&&(n.onHandleError?t:t._handleErrorDlgt),this._handleErrorCurrZone=n&&(n.onHandleError?this._zone:t._handleErrorCurrZone),this._scheduleTaskZS=n&&(n.onScheduleTask?n:t._scheduleTaskZS),this._scheduleTaskDlgt=n&&(n.onScheduleTask?t:t._scheduleTaskDlgt),this._scheduleTaskCurrZone=n&&(n.onScheduleTask?this._zone:t._scheduleTaskCurrZone),this._invokeTaskZS=n&&(n.onInvokeTask?n:t._invokeTaskZS),this._invokeTaskDlgt=n&&(n.onInvokeTask?t:t._invokeTaskDlgt),this._invokeTaskCurrZone=n&&(n.onInvokeTask?this._zone:t._invokeTaskCurrZone),this._cancelTaskZS=n&&(n.onCancelTask?n:t._cancelTaskZS),this._cancelTaskDlgt=n&&(n.onCancelTask?t:t._cancelTaskDlgt),this._cancelTaskCurrZone=n&&(n.onCancelTask?this._zone:t._cancelTaskCurrZone),this._hasTaskZS=null,this._hasTaskDlgt=null,this._hasTaskDlgtOwner=null,this._hasTaskCurrZone=null;let r=n&&n.onHasTask,i=t&&t._hasTaskZS;(r||i)&&(this._hasTaskZS=r?n:a,this._hasTaskDlgt=t,this._hasTaskDlgtOwner=this,this._hasTaskCurrZone=this._zone,n.onScheduleTask||(this._scheduleTaskZS=a,this._scheduleTaskDlgt=t,this._scheduleTaskCurrZone=this._zone),n.onInvokeTask||(this._invokeTaskZS=a,this._invokeTaskDlgt=t,this._invokeTaskCurrZone=this._zone),n.onCancelTask||(this._cancelTaskZS=a,this._cancelTaskDlgt=t,this._cancelTaskCurrZone=this._zone))}get zone(){return this._zone}fork(e,t){return this._forkZS?this._forkZS.onFork(this._forkDlgt,this.zone,e,t):new i(e,t)}intercept(e,t,n){return this._interceptZS?this._interceptZS.onIntercept(this._interceptDlgt,this._interceptCurrZone,e,t,n):t}invoke(e,t,n,r,i){return this._invokeZS?this._invokeZS.onInvoke(this._invokeDlgt,this._invokeCurrZone,e,t,n,r,i):t.apply(n,r)}handleError(e,t){return!this._handleErrorZS||this._handleErrorZS.onHandleError(this._handleErrorDlgt,this._handleErrorCurrZone,e,t)}scheduleTask(e,t){let n=t;if(this._scheduleTaskZS)this._hasTaskZS&&n._zoneDelegates.push(this._hasTaskDlgtOwner),n=this._scheduleTaskZS.onScheduleTask(this._scheduleTaskDlgt,this._scheduleTaskCurrZone,e,t),n||=t;else if(t.scheduleFn)t.scheduleFn(t);else if(t.type==de)ne(t);else throw Error(`Task is missing scheduleFn.`);return n}invokeTask(e,t,n,r){return this._invokeTaskZS?this._invokeTaskZS.onInvokeTask(this._invokeTaskDlgt,this._invokeTaskCurrZone,e,t,n,r):t.callback.apply(n,r)}cancelTask(e,t){let n;if(this._cancelTaskZS)n=this._cancelTaskZS.onCancelTask(this._cancelTaskDlgt,this._cancelTaskCurrZone,e,t);else{if(!t.cancelFn)throw Error(`Task is not cancelable`);n=t.cancelFn(t)}return n}hasTask(e,t){try{this._hasTaskZS&&this._hasTaskZS.onHasTask(this._hasTaskDlgt,this._hasTaskCurrZone,e,t)}catch(t){this.handleError(e,t)}}_updateTaskCount(e,t){let n=this._taskCounts,r=n[e],i=n[e]=r+t;if(i<0)throw Error(`More tasks executed then were scheduled.`);if(r==0||i==0){let t={microTask:n.microTask>0,macroTask:n.macroTask>0,eventTask:n.eventTask>0,change:e};this.hasTask(this._zone,t)}}}class u{constructor(e,t,n,r,i,a){if(o(this,`type`),o(this,`source`),o(this,`invoke`),o(this,`callback`),o(this,`data`),o(this,`scheduleFn`),o(this,`cancelFn`),o(this,`_zone`,null),o(this,`runCount`,0),o(this,`_zoneDelegates`,null),o(this,`_state`,`notScheduled`),this.type=e,this.source=t,this.data=r,this.scheduleFn=i,this.cancelFn=a,!n)throw Error(`callback is not defined`);this.callback=n;let c=this;this.invoke=e===pe&&r&&r.useG?u.invokeTask:function(){return u.invokeTask.call(s,c,this,arguments)}}static invokeTask(e,t,n){e||=this,ve++;try{return e.runCount++,e.zone.runTask(e,t,n)}finally{try{ve===1&&!s[m]&&re()}finally{ve--}}}get zone(){return this._zone}get state(){return this._state}cancelScheduleRequest(){this._transitionTo(ae,oe)}_transitionTo(e,t,n){if(this._state===t||this._state===n)this._state=e,e==ae&&(this._zoneDelegates=null);else throw Error(`${this.type} '${this.source}': can not transition to '${e}', expecting state '${t}'${n?` or '`+n+`'`:``}, was '${this._state}'.`)}toString(){return this.data&&this.data.handleId!==void 0?this.data.handleId.toString():Object.prototype.toString.call(this)}toJSON(){return{type:this.type,state:this.state,source:this.source,zone:this.zone.name,runCount:this.runCount}}}let d=c(`setTimeout`),f=c(`Promise`),p=c(`then`),m=c(`enable_native_microtask_draining`),ee=[],h=!1,g;function te(e){!g&&s[f]&&(g=s[f].resolve(0)),g?(g[p]??g.then).call(g,e):s[d](e,0)}function ne(e){let t=s[m],n=t&&ee.length===0&&!h,r=!t&&ve===0&&ee.length===0;(n||r)&&te(re),e&&ee.push(e)}function re(){if(!h){h=!0;try{for(;ee.length;){let e=ee;ee=[];for(let t of e)try{t.zone.runTask(t,null,null)}catch(e){he.onUnhandledError(e)}}}finally{if(s[m])h=!1,he.microtaskDrainDone();else try{he.microtaskDrainDone()}finally{h=!1}}}}let ie={name:`NO ZONE`},ae=`notScheduled`,oe=`scheduling`,se=`scheduled`,ce=`running`,le=`canceling`,ue=`unknown`,de=`microTask`,fe=`macroTask`,pe=`eventTask`,me=Object.create(null),he={symbol:c,currentZoneFrame:()=>ge,onUnhandledError:ye,microtaskDrainDone:ye,scheduleMicroTask:ne,showUncaughtError:()=>!i[c(`ignoreConsoleErrorUncaughtError`)],patchEventTarget:()=>[],patchOnProperties:ye,patchMethod:()=>ye,bindArguments:()=>[],patchThen:()=>ye,patchMacroTask:()=>ye,patchEventPrototype:()=>ye,getGlobalObjects:()=>void 0,ObjectDefineProperty:()=>ye,ObjectGetOwnPropertyDescriptor:()=>void 0,ObjectCreate:()=>void 0,ArraySlice:()=>[],patchClass:()=>ye,wrapWithCurrentZone:()=>ye,filterProperties:()=>[],attachOriginToPatched:()=>ye,_redefineProperty:()=>ye,patchCallbacks:()=>ye,nativeScheduleMicroTask:te},ge={parent:null,zone:new i(null,null)},_e=null,ve=0;function ye(){}return n(`Zone`,`Zone`),i}function u(){let e=globalThis,t=e[c(`forceDuplicateZoneCheck`)]===!0;if(e.Zone&&(t||typeof e.Zone.__symbol__!=`function`))throw Error(`Zone already loaded.`);return e.Zone??=l(),e.Zone}var d=Object.getOwnPropertyDescriptor,f=Object.defineProperty,p=Object.getPrototypeOf,m=Object.create,ee=Array.prototype.slice,h=`addEventListener`,g=`removeEventListener`,te=c(h),ne=c(g),re=`true`,ie=`false`,ae=c(``);function oe(e,t){return Zone.current.wrap(e,t)}function se(e,t,n,r,i){return Zone.current.scheduleMacroTask(e,t,n,r,i)}var ce=c,le=typeof window<`u`,ue=le?window:void 0,de=le&&ue||globalThis,fe=`removeAttribute`;function pe(e,t){for(let n=e.length-1;n>=0;n--)typeof e[n]==`function`&&(e[n]=oe(e[n],t+`_`+n));return e}function me(e,t){let n=e.constructor.name;for(let r=0;r{let t=function(){return e.apply(this,pe(arguments,n+`.`+i))};return ke(t,e),t})(a)}}}function he(e){return e?e.writable===!1?!1:typeof e.get!=`function`||e.set!==void 0:!0}var ge=typeof WorkerGlobalScope<`u`&&self instanceof WorkerGlobalScope,_e=!(`nw`in de)&&de.process!==void 0&&de.process.toString()===`[object process]`,ve=!_e&&!ge&&!!(le&&ue.HTMLElement),ye=de.process!==void 0&&de.process.toString()===`[object process]`&&!ge&&!!(le&&ue.HTMLElement),be=Object.create(null),xe=ce(`enable_beforeunload`),Se=function(e){if(e||=de.event,!e)return;let t=be[e.type];t||=be[e.type]=ce(`ON_PROPERTY`+e.type);let n=this||e.target||de,r=n[t],i;if(ve&&n===ue&&e.type===`error`){let t=e;i=r&&r.call(this,t.message,t.filename,t.lineno,t.colno,t.error),i===!0&&e.preventDefault()}else i=r&&r.apply(this,arguments),e.type===`beforeunload`&&de[xe]&&typeof i==`string`?e.returnValue=i:i!=null&&!i&&e.preventDefault();return i};function Ce(e,t,n){let r=d(e,t);if(!r&&n&&d(n,t)&&(r={enumerable:!0,configurable:!0}),!r||!r.configurable)return;let i=ce(`on`+t+`patched`);if(Object.hasOwn(e,i)&&e[i])return;delete r.writable,delete r.value;let a=r.get,o=r.set,s=t.slice(2),c=be[s];c||=be[s]=ce(`ON_PROPERTY`+s),r.set=function(t){let n=this;!n&&e===de&&(n=de),n&&(typeof n[c]==`function`&&n.removeEventListener(s,Se),o?.call(n,null),n[c]=t,typeof t==`function`&&n.addEventListener(s,Se,!1))},r.get=function(){let n=this;if(!n&&e===de&&(n=de),!n)return null;let i=n[c];if(i)return i;if(a){let e=a.call(this);if(e)return r.set.call(this,e),typeof n[fe]==`function`&&n.removeAttribute(t),e}return null},f(e,t,r),e[i]=!0}function we(e,t,n){if(t)for(let r=0;rfunction(t,r){let a=n(t,r);return a.cbIdx>=0&&typeof r[a.cbIdx]==`function`?se(a.name,r[a.cbIdx],a,i):e.apply(t,r)})}function ke(e,t){e[ce(`OriginalDelegate`)]=t}function Ae(e){return typeof e==`function`}function je(e){return typeof e==`number`}var Me={useG:!0},Ne=Object.create(null),Pe={},Fe=RegExp(`^`+ae+`(\\w+)(true|false)$`),Ie=ce(`propagationStopped`),Le=[`capture`,`once`,`passive`,`signal`];function Re(e,t){let n=(t?t(e):e)+ie,r=(t?t(e):e)+re,i=ae+n,a=ae+r;Ne[e]={[ie]:i,[re]:a}}function ze(e,t,n,r){let i=r&&r.add||h,o=r&&r.rm||g,s=r&&r.listeners||`eventListeners`,c=r&&r.rmAll||`removeAllListeners`,l=ce(i),u=`.`+i+`:`,d=function(e,t,n){if(e.isRemoved)return;let r=e.callback;typeof r==`object`&&r.handleEvent&&(e.callback=e=>r.handleEvent(e),e.originalDelegate=r);let i;try{e.invoke(e,t,[n])}catch(e){i=e}let a=e.options;if(a&&typeof a==`object`&&a.once){let r=e.originalDelegate?e.originalDelegate:e.callback;t[o].call(t,n.type,r,a)}return i};function f(n,r,i){if(r||=e.event,!r)return;let a=n||r.target||e,o=a[Ne[r.type][i?re:ie]];if(o){let e=[];if(o.length===1){let t=d(o[0],a,r);t&&e.push(t)}else{let t=o.slice();for(let n=0;n{throw r})}}}let m=function(e){return f(this,e,!1)},ee=function(e){return f(this,e,!0)};function te(t,n){if(!t)return!1;let r=!0;n&&n.useG!==void 0&&(r=n.useG);let d=n&&n.vh,f=!0;n&&n.chkDup!==void 0&&(f=n.chkDup);let h=!1;n&&n.rt!==void 0&&(h=n.rt);let g=t;for(;g&&!Object.hasOwn(g,i);)g=p(g);if(!g&&t[i]&&(g=t),!g||g[l])return!1;let te=n&&n.eventNameToString,ne={},oe=g[l]=g[i],se=g[ce(o)]=g[o],le=g[ce(s)]=g[s],ue=g[ce(c)]=g[c],de;n&&n.prepend&&(de=g[ce(n.prepend)]=g[n.prepend]);function fe(e,t){return t?typeof e==`boolean`?{capture:e,passive:!0}:e?(typeof e==`object`&&e.passive!==!1&&(e.passive=!0),e):{passive:!0}:e}let pe=function(e){if(!ne.isExisting)return oe.call(ne.target,ne.eventName,ne.capture?ee:m,ne.options)},me=function(e){if(!e.isRemoved){let t=Ne[e.eventName],n;t&&(n=t[e.capture?re:ie]);let r=n&&e.target[n];if(r){for(let t=0;tve.zone.cancelTask(ve);t.call(g,`abort`,e,{once:!0}),ve.removeAbortListener=()=>g.removeEventListener(`abort`,e)}if(ne.target=null,ge&&(ge.taskData=null),oe&&(ne.options.once=!0),typeof ve.options!=`boolean`&&(ve.options=h),ve.target=l,ve.capture=ae,ve.eventName=u,m&&(ve.originalDelegate=p),c?ue.unshift(ve):ue.push(ve),s)return l}};return g[i]=Te(oe,u,ye,be,h),de&&(g.prependListener=Te(de,`.prependListener:`,ge,be,h,!0)),g[o]=function(){let t=this||e,r=arguments[0];n&&n.transferEventName&&(r=n.transferEventName(r));let i=arguments[2],a=i?typeof i==`boolean`||i.capture:!1,o=arguments[1];if(!o)return se.apply(this,arguments);if(d&&!d(se,o,t,arguments))return;let s=Ne[r],c;s&&(c=s[a?re:ie]);let l=c&&t[c];if(l)for(let e=0;efunction(t,n){t[Ie]=!0,e&&e.apply(t,n)})}function He(e,t){t.patchMethod(e,`queueMicrotask`,e=>function(e,t){Zone.current.scheduleMicroTask(`queueMicrotask`,t[0])})}var Ue=ce(`zoneTask`);function We(e,t,n,r){let i=null,a=null;t+=r,n+=r;let o={};function s(t){let n=t.data;n.args[0]=function(){return t.invoke.apply(this,arguments)};let r=i.apply(e,n.args);return je(r)?n.handleId=r:(n.handle=r,n.isRefreshable=Ae(r?.refresh)),t}function c(t){let{handle:n,handleId:r}=t.data;return a.call(e,n??r)}i=De(e,t,n=>function(i,a){if(Ae(a[0])){let e={isRefreshable:!1,isPeriodic:r===`Interval`,delay:r===`Timeout`||r===`Interval`?a[1]||0:void 0,args:a},n=a[0];a[0]=function(){try{return n.apply(this,arguments)}finally{let{handle:t,handleId:n,isPeriodic:r,isRefreshable:i}=e;!r&&!i&&(n?delete o[n]:t&&(t[Ue]=null))}};let i=se(t,a[0],e,s,c);if(!i)return i;let{handleId:l,handle:u,isRefreshable:d,isPeriodic:f}=i.data;if(l)o[l]=i;else if(u&&(u[Ue]=i,d&&!f)){let e=u.refresh;u.refresh=function(){let{zone:t,state:n}=i;return n===`notScheduled`?(i._state=`scheduled`,t._updateTaskCount(i,1)):n===`running`&&(i._state=`scheduling`),e.call(this)}}return u??l??i}return n.apply(e,a)}),a=De(e,n,t=>function(n,r){let i=r[0],a;je(i)?(a=o[i],delete o[i]):(a=i?.[Ue],a?i[Ue]=null:a=i),a?.type?a.cancelFn&&a.zone.cancelTask(a):t.apply(e,r)})}function Ge(e,t){let{isBrowser:n,isMix:r}=t.getGlobalObjects();(n||r)&&e.customElements&&`customElements`in e&&t.patchCallbacks(t,e.customElements,`customElements`,`define`,[`connectedCallback`,`disconnectedCallback`,`adoptedCallback`,`attributeChangedCallback`,`formAssociatedCallback`,`formDisabledCallback`,`formResetCallback`,`formStateRestoreCallback`])}function Ke(e,t){if(Zone[t.symbol(`patchEventTarget`)])return;let{eventNames:n,zoneSymbolEventNames:r,TRUE_STR:i,FALSE_STR:a,ZONE_SYMBOL_PREFIX:o}=t.getGlobalObjects();for(let e=0;et.target===e);if(r.length===0)return t;let i=r[0].ignoreProperties;return t.filter(e=>i.indexOf(e)===-1)}function Ye(e,t,n,r){e&&we(e,Je(e,t,n),r)}function Xe(e){return Object.getOwnPropertyNames(e).filter(e=>e.startsWith(`on`)&&e.length>2).map(e=>e.substring(2))}function eee(e,t){if(_e&&!ye||Zone[e.symbol(`patchEvents`)])return;let n=t.__Zone_ignore_on_properties,r=[];if(ve){let e=window;r=r.concat([`Document`,`SVGElement`,`Element`,`HTMLElement`,`HTMLBodyElement`,`HTMLMediaElement`,`HTMLFrameSetElement`,`HTMLFrameElement`,`HTMLIFrameElement`,`HTMLMarqueeElement`,`Worker`]),Ye(e,Xe(e),n,p(e))}r=r.concat([`XMLHttpRequest`,`XMLHttpRequestEventTarget`,`IDBIndex`,`IDBRequest`,`IDBOpenDBRequest`,`IDBDatabase`,`IDBTransaction`,`IDBCursor`,`WebSocket`]);for(let e=0;e{let t=`clear`;We(e,`set`,t,`Timeout`),We(e,`set`,t,`Interval`),We(e,`set`,t,`Immediate`)}),e.__load_patch(`requestAnimationFrame`,e=>{We(e,`request`,`cancel`,`AnimationFrame`),We(e,`mozRequest`,`mozCancel`,`AnimationFrame`),We(e,`webkitRequest`,`webkitCancel`,`AnimationFrame`)}),e.__load_patch(`blocking`,(e,t)=>{let n=[`alert`,`prompt`,`confirm`];for(let r=0;rfunction(r,a){return t.current.run(n,e,a,i)})}}),e.__load_patch(`EventTarget`,(e,t,n)=>{qe(e,n),Ke(e,n);let r=e.XMLHttpRequestEventTarget;r&&r.prototype&&n.patchEventTarget(e,n,[r.prototype])}),e.__load_patch(`MutationObserver`,(e,t,n)=>{Ee(`MutationObserver`),Ee(`WebKitMutationObserver`)}),e.__load_patch(`IntersectionObserver`,(e,t,n)=>{Ee(`IntersectionObserver`)}),e.__load_patch(`FileReader`,(e,t,n)=>{Ee(`FileReader`)}),e.__load_patch(`on_property`,(e,t,n)=>{eee(n,e)}),e.__load_patch(`customElements`,(e,t,n)=>{Ge(e,n)}),e.__load_patch(`XHR`,(e,t)=>{c(e);let n=ce(`xhrTask`),r=ce(`xhrSync`),i=ce(`xhrListener`),a=ce(`xhrScheduled`),o=ce(`xhrURL`),s=ce(`xhrErrorBeforeScheduled`);function c(e){let c=e.XMLHttpRequest;if(!c)return;let l=c.prototype;function u(e){return e[n]}let d=l[te],f=l[ne];if(!d){let t=e.XMLHttpRequestEventTarget;if(t){let e=t.prototype;d=e[te],f=e[ne]}}let p=`readystatechange`,m=`scheduled`;function ee(e){let r=e.data,o=r.target;o[a]=!1,o[s]=!1;let c=o[i];d||(d=o[te],f=o[ne]),c&&f.call(o,p,c);let l=o[i]=()=>{if(o.readyState===o.DONE){if(!r.aborted&&o[a]&&e.state===m){let n=o[t.__symbol__(`loadfalse`)];if(o.status!==0&&n&&n.length>0){let i=e.invoke;e.invoke=function(){let n=o[t.__symbol__(`loadfalse`)];for(let t=0;tfunction(e,t){return e[r]=t[2]==0,e[o]=t[1],re.apply(e,t)}),ie=ce(`fetchTaskAborting`),ae=ce(`fetchTaskScheduling`),oe=De(l,`send`,()=>function(e,n){if(t.current[ae]===!0||e[r])return oe.apply(e,n);{let t={target:e,url:e[o],isPeriodic:!1,args:n,aborted:!1},r=se(`XMLHttpRequest.send`,h,t,ee,g);e&&e[s]===!0&&!t.aborted&&r.state===m&&r.invoke()}}),le=De(l,`abort`,()=>function(e,n){let r=u(e);if(r&&typeof r.type==`string`){if(r.cancelFn==null||r.data&&r.data.aborted)return;r.zone.cancelTask(r)}else if(t.current[ie]===!0)return le.apply(e,n)})}}),e.__load_patch(`geolocation`,e=>{e.navigator&&e.navigator.geolocation&&me(e.navigator.geolocation,[`getCurrentPosition`,`watchPosition`])}),e.__load_patch(`PromiseRejectionEvent`,(e,t)=>{function n(t){return function(n){Be(e,t).forEach(r=>{let i=e.PromiseRejectionEvent;if(i){let e=new i(t,{promise:n.promise,reason:n.rejection});r.invoke(e)}})}}e.PromiseRejectionEvent&&(t[ce(`unhandledPromiseRejectionHandler`)]=n(`unhandledrejection`),t[ce(`rejectionHandledHandler`)]=n(`rejectionhandled`))}),e.__load_patch(`queueMicrotask`,(e,t,n)=>{He(e,n)})}function nee(e){e.__load_patch(`ZoneAwarePromise`,(e,t,n)=>{let r=Object.getOwnPropertyDescriptor,i=Object.defineProperty;function a(e){return e&&e.toString===Object.prototype.toString?(e.constructor&&e.constructor.name||``)+`: `+JSON.stringify(e):e?e.toString():Object.prototype.toString.call(e)}let o=n.symbol,s=[],c=e[o(`DISABLE_WRAPPING_UNCAUGHT_PROMISE_REJECTION`)]!==!1,l=o(`Promise`),u=o(`then`);n.onUnhandledError=e=>{if(n.showUncaughtError()){let t=e&&e.rejection;t&&e.zone&&e.task?console.error(`Unhandled Promise rejection:`,t instanceof Error?t.message:t,`; Zone:`,e.zone.name,`; Task:`,e.task&&e.task.source,`; Value:`,t,t instanceof Error?t.stack:void 0):console.error(e)}},n.microtaskDrainDone=()=>{for(;s.length;){let e=s.shift();try{e.zone.runGuarded(()=>{throw e.throwOriginal?e.rejection:e})}catch(e){f(e)}}};let d=o(`unhandledPromiseRejectionHandler`);function f(e){n.onUnhandledError(e);try{let n=t[d];typeof n==`function`&&n.call(this,e)}catch{}}function p(e){return e&&typeof e.then==`function`}function m(e){return e}function ee(e){return pe.reject(e)}let h=o(`state`),g=o(`value`),te=o(`finally`),ne=o(`parentPromiseValue`),re=o(`parentPromiseState`);function ie(e,t){return n=>{try{se(e,t,n)}catch(t){se(e,!1,t)}}}let ae=function(){let e=!1;return function(t){return function(){e||(e=!0,t.apply(null,arguments))}}},oe=o(`currentTaskTrace`);function se(e,r,o){let l=ae();if(e===o)throw TypeError(`Promise resolved with itself`);if(e[h]===null){let u=null;try{(typeof o==`object`||typeof o==`function`)&&(u=o&&o.then)}catch(t){return l(()=>{se(e,!1,t)})(),e}if(r!==!1&&o instanceof pe&&Object.hasOwn(o,h)&&Object.hasOwn(o,g)&&o[h]!==null)le(o),se(e,o[h],o[g]);else if(r!==!1&&typeof u==`function`)try{u.call(o,l(ie(e,r)),l(ie(e,!1)))}catch(t){l(()=>{se(e,!1,t)})()}else{e[h]=r;let l=e[g];if(e[g]=o,e[te]===te&&r===!0&&(e[h]=e[re],e[g]=e[ne]),r===!1&&o instanceof Error){let e=t.currentTask&&t.currentTask.data&&t.currentTask.data.__creationTrace__;e&&i(o,oe,{configurable:!0,enumerable:!1,writable:!0,value:e})}for(let t=0;t{try{let r=e[g],i=!!n&&te===n[te];i&&(n[ne]=r,n[re]=a),se(n,!0,t.run(o,void 0,i&&o!==ee&&o!==m?[]:[r]))}catch(e){se(n,!1,e)}},n)}let de=function(){},fe=e.AggregateError;class pe{static toString(){return`function ZoneAwarePromise() { [native code] }`}static resolve(e){return e instanceof pe?e:se(new this(null),!0,e)}static reject(e){return se(new this(null),!1,e)}static withResolvers(){let e={};return e.promise=new pe((t,n)=>{e.resolve=t,e.reject=n}),e}static any(e){if(!e||typeof e[Symbol.iterator]!=`function`)return Promise.reject(new fe([],`All promises were rejected`));let t=[],n=0;try{for(let r of e)n++,t.push(pe.resolve(r))}catch{return Promise.reject(new fe([],`All promises were rejected`))}if(n===0)return Promise.reject(new fe([],`All promises were rejected`));let r=!1,i=[];return new pe((e,a)=>{for(let o=0;o{r||(r=!0,e(t))},e=>{i.push(e),n--,n===0&&(r=!0,a(new fe(i,`All promises were rejected`)))})})}static race(e){let t,n,r=new this((e,r)=>{t=e,n=r});function i(e){t(e)}function a(e){n(e)}for(let t of e)p(t)||(t=this.resolve(t)),t.then(i,a);return r}static all(e){return pe.allWithCallback(e)}static allSettled(e){return(this&&this.prototype instanceof pe?this:pe).allWithCallback(e,{thenCallback:e=>({status:`fulfilled`,value:e}),errorCallback:e=>({status:`rejected`,reason:e})})}static allWithCallback(e,t){let n,r,i=new this((e,t)=>{n=e,r=t}),a=2,o=0,s=[];for(let i of e){p(i)||(i=this.resolve(i));let e=o;try{i.then(r=>{s[e]=t?t.thenCallback(r):r,a--,a===0&&n(s)},i=>{t?(s[e]=t.errorCallback(i),a--,a===0&&n(s)):r(i)})}catch(e){r(e)}a++,o++}return a-=2,a===0&&n(s),i}constructor(e){let t=this;if(!(t instanceof pe))throw Error(`Must be an instanceof Promise.`);t[h]=null,t[g]=[];try{let n=ae();e&&e(n(ie(t,!0)),n(ie(t,!1)))}catch(e){se(t,!1,e)}}get[Symbol.toStringTag](){return`Promise`}get[Symbol.species](){return pe}then(e,n){let r=this.constructor?.[Symbol.species];(!r||typeof r!=`function`)&&(r=this.constructor||pe);let i=new r(de),a=t.current;return this[h]==null?this[g].push(a,i,e,n):ue(this,a,i,e,n),i}catch(e){return this.then(null,e)}finally(e){let n=this.constructor?.[Symbol.species];(!n||typeof n!=`function`)&&(n=pe);let r=new n(de);r[te]=te;let i=t.current;return this[h]==null?this[g].push(i,r,e,e):ue(this,i,r,e,e),r}}pe.resolve=pe.resolve,pe.reject=pe.reject,pe.race=pe.race,pe.all=pe.all;let me=e[l]=e.Promise;e.Promise=pe;let he=o(`thenPatched`);function ge(e){let t=e.prototype,n=r(t,`then`);if(n&&(n.writable===!1||!n.configurable))return;let i=t.then;t[u]=i,e.prototype.then=function(e,t){return new pe((e,t)=>{i.call(this,e,t)}).then(e,t)},e[he]=!0}n.patchThen=ge;function _e(e){return function(t,n){let r=e.apply(t,n);if(r instanceof pe)return r;let i=r.constructor;return i[he]||ge(i),r}}if(me){ge(me);let t=me.try;t&&typeof t==`function`&&(pe.try=t),De(e,`fetch`,e=>_e(e))}return Promise[t.__symbol__(`uncaughtPromiseErrors`)]=s,pe})}function Ze(e){e.__load_patch(`toString`,e=>{let t=Function.prototype.toString,n=ce(`OriginalDelegate`),r=ce(`Promise`),i=ce(`Error`),a=function(){if(typeof this==`function`){let a=this[n];if(a)return typeof a==`function`?t.call(a):Object.prototype.toString.call(a);if(this===Promise){let n=e[r];if(n)return t.call(n)}if(this===Error){let n=e[i];if(n)return t.call(n)}}return t.call(this)};a[n]=t,Function.prototype.toString=a;let o=Object.prototype.toString;Object.prototype.toString=function(){return typeof Promise==`function`&&this instanceof Promise?`[object Promise]`:o.call(this)}})}function Qe(e,t,n,r,i){let a=Zone.__symbol__(r);if(t[a])return;let o=t[a]=t[r];t[r]=function(a,s,c){return s&&s.prototype&&i.forEach(function(t){let i=`${n}.${r}::`+t,a=s.prototype;try{if(Object.hasOwn(a,t)){let n=e.ObjectGetOwnPropertyDescriptor(a,t);n&&n.value?(n.value=e.wrapWithCurrentZone(n.value,i),e._redefineProperty(s.prototype,t,n)):a[t]&&(a[t]=e.wrapWithCurrentZone(a[t],i))}else a[t]&&(a[t]=e.wrapWithCurrentZone(a[t],i))}catch{}}),o.call(t,a,s,c)},e.attachOriginToPatched(t[r],o)}function $e(e){e.__load_patch(`util`,(e,t,n)=>{let r=Xe(e);n.patchOnProperties=we,n.patchMethod=De,n.bindArguments=pe,n.patchMacroTask=Oe;let i=t.__symbol__(`BLACK_LISTED_EVENTS`),a=t.__symbol__(`UNPATCHED_EVENTS`);e[a]&&(e[i]=e[a]),e[i]&&(t[i]=t[a]=e[i]),n.patchEventPrototype=Ve,n.patchEventTarget=ze,n.ObjectDefineProperty=f,n.ObjectGetOwnPropertyDescriptor=d,n.ObjectCreate=m,n.ArraySlice=ee,n.patchClass=Ee,n.wrapWithCurrentZone=oe,n.filterProperties=Je,n.attachOriginToPatched=ke,n._redefineProperty=Object.defineProperty,n.patchCallbacks=Qe,n.getGlobalObjects=()=>({globalSources:Pe,zoneSymbolEventNames:Ne,eventNames:r,isBrowser:ve,isMix:ye,isNode:_e,TRUE_STR:re,FALSE_STR:ie,ZONE_SYMBOL_PREFIX:ae,ADD_EVENT_LISTENER_STR:h,REMOVE_EVENT_LISTENER_STR:g})})}function et(e){nee(e),Ze(e),$e(e)}var tt=u();et(tt),tee(tt);var nt=(function(e){return e[e.NONE=0]=`NONE`,e[e.HTML=1]=`HTML`,e[e.STYLE=2]=`STYLE`,e[e.SCRIPT=3]=`SCRIPT`,e[e.URL=4]=`URL`,e[e.RESOURCE_URL=5]=`RESOURCE_URL`,e[e.ATTRIBUTE_NO_BINDING=6]=`ATTRIBUTE_NO_BINDING`,e})(nt||{}),rt=(function(e){return e[e.None=0]=`None`,e[e.Const=1]=`Const`,e})(rt||{}),it=class{modifiers;constructor(e=rt.None){this.modifiers=e}hasModifier(e){return(this.modifiers&e)!==0}},at=(function(e){return e[e.Dynamic=0]=`Dynamic`,e[e.Bool=1]=`Bool`,e[e.String=2]=`String`,e[e.Int=3]=`Int`,e[e.Number=4]=`Number`,e[e.Function=5]=`Function`,e[e.Inferred=6]=`Inferred`,e[e.None=7]=`None`,e})(at||{}),ot=class extends it{name;constructor(e,t){super(t),this.name=e}visitType(e,t){return e.visitBuiltinType(this,t)}};at.Dynamic;var st=new ot(at.Inferred);at.Bool,at.Int,at.Number,at.String,at.Function,at.None;var _=(function(e){return e[e.Equals=0]=`Equals`,e[e.NotEquals=1]=`NotEquals`,e[e.Assign=2]=`Assign`,e[e.Identical=3]=`Identical`,e[e.NotIdentical=4]=`NotIdentical`,e[e.Minus=5]=`Minus`,e[e.Plus=6]=`Plus`,e[e.Divide=7]=`Divide`,e[e.Multiply=8]=`Multiply`,e[e.Modulo=9]=`Modulo`,e[e.And=10]=`And`,e[e.Or=11]=`Or`,e[e.BitwiseOr=12]=`BitwiseOr`,e[e.BitwiseAnd=13]=`BitwiseAnd`,e[e.Lower=14]=`Lower`,e[e.LowerEquals=15]=`LowerEquals`,e[e.Bigger=16]=`Bigger`,e[e.BiggerEquals=17]=`BiggerEquals`,e[e.NullishCoalesce=18]=`NullishCoalesce`,e[e.Exponentiation=19]=`Exponentiation`,e[e.In=20]=`In`,e[e.InstanceOf=21]=`InstanceOf`,e[e.AdditionAssignment=22]=`AdditionAssignment`,e[e.SubtractionAssignment=23]=`SubtractionAssignment`,e[e.MultiplicationAssignment=24]=`MultiplicationAssignment`,e[e.DivisionAssignment=25]=`DivisionAssignment`,e[e.RemainderAssignment=26]=`RemainderAssignment`,e[e.ExponentiationAssignment=27]=`ExponentiationAssignment`,e[e.AndAssignment=28]=`AndAssignment`,e[e.OrAssignment=29]=`OrAssignment`,e[e.NullishCoalesceAssignment=30]=`NullishCoalesceAssignment`,e})(_||{});function ct(e,t){return e==null||t==null?e==t:e.isEquivalent(t)}function lt(e,t,n){let r=e.length;if(r!==t.length)return!1;for(let i=0;ie.isEquivalent(t))}var dt=class{leadingComments;type;sourceSpan;constructor(e,t,n){this.leadingComments=n,this.type=e||null,this.sourceSpan=t||null}prop(e,t){return new xt(this,e,null,t)}key(e,t,n){return new ree(this,e,t,n)}callFn(e,t,n,r){return new mt(this,e,null,t,n,r)}instantiate(e,t,n,r){return new ht(this,e,t,n)}conditional(e,t=null,n,r){return new yt(this,e,t,null,n)}equals(e,t){return new bt(_.Equals,this,e,null,t)}notEquals(e,t){return new bt(_.NotEquals,this,e,null,t)}identical(e,t){return new bt(_.Identical,this,e,null,t)}notIdentical(e,t){return new bt(_.NotIdentical,this,e,null,t)}minus(e,t){return new bt(_.Minus,this,e,null,t)}plus(e,t){return new bt(_.Plus,this,e,null,t)}divide(e,t){return new bt(_.Divide,this,e,null,t)}multiply(e,t){return new bt(_.Multiply,this,e,null,t)}modulo(e,t){return new bt(_.Modulo,this,e,null,t)}power(e,t){return new bt(_.Exponentiation,this,e,null,t)}and(e,t){return new bt(_.And,this,e,null,t)}bitwiseOr(e,t){return new bt(_.BitwiseOr,this,e,null,t)}bitwiseAnd(e,t){return new bt(_.BitwiseAnd,this,e,null,t)}or(e,t){return new bt(_.Or,this,e,null,t)}lower(e,t){return new bt(_.Lower,this,e,null,t)}lowerEquals(e,t){return new bt(_.LowerEquals,this,e,null,t)}bigger(e,t){return new bt(_.Bigger,this,e,null,t)}biggerEquals(e,t){return new bt(_.BiggerEquals,this,e,null,t)}isBlank(e){return this.equals(cee,e)}nullishCoalesce(e,t){return new bt(_.NullishCoalesce,this,e,null,t)}toStmt(e){return new uee(this,null,e)}},ft=class e extends dt{name;constructor(e,t,n,r){super(t,n,r),this.name=e}isEquivalent(t){return t instanceof e&&this.name===t.name}isConstant(){return!1}visitExpression(e,t){return e.visitReadVarExpr(this,t)}clone(){return new e(this.name,this.type,this.sourceSpan)}set(e){return new bt(_.Assign,this,e,null,this.sourceSpan)}},pt=class e extends dt{expr;constructor(e,t,n,r){super(t,n,r),this.expr=e}visitExpression(e,t){return e.visitTypeofExpr(this,t)}isEquivalent(t){return t instanceof e&&t.expr.isEquivalent(this.expr)}isConstant(){return this.expr.isConstant()}clone(){return new e(this.expr.clone())}},mt=class e extends dt{fn;args;pure;isOptional;constructor(e,t,n,r,i=!1,a,o=!1){super(n,r,a),this.fn=e,this.args=t,this.pure=i,this.isOptional=o}get receiver(){return this.fn}isEquivalent(t){return t instanceof e&&this.fn.isEquivalent(t.fn)&&ut(this.args,t.args)&&this.pure===t.pure}isConstant(){return!1}visitExpression(e,t){return e.visitInvokeFunctionExpr(this,t)}clone(){return new e(this.fn.clone(),this.args.map(e=>e.clone()),this.type,this.sourceSpan,this.pure,[],this.isOptional)}},ht=class e extends dt{classExpr;args;constructor(e,t,n,r,i){super(n,r,i),this.classExpr=e,this.args=t}isEquivalent(t){return t instanceof e&&this.classExpr.isEquivalent(t.classExpr)&&ut(this.args,t.args)}isConstant(){return!1}visitExpression(e,t){return e.visitInstantiateExpr(this,t)}clone(){return new e(this.classExpr.clone(),this.args.map(e=>e.clone()),this.type,this.sourceSpan)}},gt=class e extends dt{body;flags;constructor(e,t,n,r){super(null,n,r),this.body=e,this.flags=t}isEquivalent(t){return t instanceof e&&this.body===t.body&&this.flags===t.flags}isConstant(){return!0}visitExpression(e,t){return e.visitRegularExpressionLiteral(this,t)}clone(){return new e(this.body,this.flags,this.sourceSpan)}},_t=class e extends dt{value;constructor(e,t,n,r){super(t,n,r),this.value=e}isEquivalent(t){return t instanceof e&&this.value===t.value}isConstant(){return!0}visitExpression(e,t){return e.visitLiteralExpr(this,t)}clone(){return new e(this.value,this.type,this.sourceSpan)}},vt=class e extends dt{value;typeParams;constructor(e,t,n=null,r,i){super(t,r,i),this.value=e,this.typeParams=n}isEquivalent(t){return t instanceof e&&this.value.name===t.value.name&&this.value.moduleName===t.value.moduleName}isConstant(){return!1}visitExpression(e,t){return e.visitExternalExpr(this,t)}clone(){return new e(this.value,this.type,this.typeParams,this.sourceSpan)}},yt=class e extends dt{condition;falseCase;trueCase;constructor(e,t,n=null,r,i,a){super(r||t.type,i,a),this.condition=e,this.falseCase=n,this.trueCase=t}isEquivalent(t){return t instanceof e&&this.condition.isEquivalent(t.condition)&&this.trueCase.isEquivalent(t.trueCase)&&ct(this.falseCase,t.falseCase)}isConstant(){return!1}visitExpression(e,t){return e.visitConditionalExpr(this,t)}clone(){return new e(this.condition.clone(),this.trueCase.clone(),this.falseCase?.clone(),this.type,this.sourceSpan)}},bt=class e extends dt{operator;rhs;lhs;constructor(e,t,n,r,i,a){super(r||t.type,i,a),this.operator=e,this.rhs=n,this.lhs=t}isEquivalent(t){return t instanceof e&&this.operator===t.operator&&this.lhs.isEquivalent(t.lhs)&&this.rhs.isEquivalent(t.rhs)}isConstant(){return!1}visitExpression(e,t){return e.visitBinaryOperatorExpr(this,t)}clone(){return new e(this.operator,this.lhs.clone(),this.rhs.clone(),this.type,this.sourceSpan)}isAssignment(){let e=this.operator;return e===_.Assign||e===_.AdditionAssignment||e===_.SubtractionAssignment||e===_.MultiplicationAssignment||e===_.DivisionAssignment||e===_.RemainderAssignment||e===_.ExponentiationAssignment||e===_.AndAssignment||e===_.OrAssignment||e===_.NullishCoalesceAssignment}},xt=class e extends dt{receiver;name;isOptional;constructor(e,t,n,r,i,a=!1){super(n,r,i),this.receiver=e,this.name=t,this.isOptional=a}get index(){return this.name}isEquivalent(t){return t instanceof e&&this.receiver.isEquivalent(t.receiver)&&this.name===t.name&&this.isOptional===t.isOptional}isConstant(){return!1}visitExpression(e,t){return e.visitReadPropExpr(this,t)}set(e){return new bt(_.Assign,this.receiver.prop(this.name),e,null,this.sourceSpan)}clone(){return new e(this.receiver.clone(),this.name,this.type,this.sourceSpan,[],this.isOptional)}},ree=class e extends dt{receiver;index;isOptional;constructor(e,t,n,r,i,a=!1){super(n,r,i),this.receiver=e,this.index=t,this.isOptional=a}isEquivalent(t){return t instanceof e&&this.receiver.isEquivalent(t.receiver)&&this.index.isEquivalent(t.index)&&this.isOptional===t.isOptional}isConstant(){return!1}visitExpression(e,t){return e.visitReadKeyExpr(this,t)}set(e){return new bt(_.Assign,this.receiver.key(this.index),e,null,this.sourceSpan)}clone(){return new e(this.receiver.clone(),this.index.clone(),this.type,this.sourceSpan,[],this.isOptional)}},iee=class e extends dt{entries;constructor(e,t,n,r){super(t,n,r),this.entries=e}isConstant(){return this.entries.every(e=>e.isConstant())}isEquivalent(t){return t instanceof e&&ut(this.entries,t.entries)}visitExpression(e,t){return e.visitLiteralArrayExpr(this,t)}clone(){return new e(this.entries.map(e=>e.clone()),this.type,this.sourceSpan)}},aee=class e{expression;constructor(e){this.expression=e}isEquivalent(t){return t instanceof e&&this.expression.isEquivalent(t.expression)}clone(){return new e(this.expression.clone())}isConstant(){return this.expression.isConstant()}},oee=class e extends dt{entries;valueType=null;constructor(e,t,n,r){super(t,n,r),this.entries=e,t&&(this.valueType=t.valueType)}isEquivalent(t){return t instanceof e&&ut(this.entries,t.entries)}isConstant(){return this.entries.every(e=>e.isConstant())}visitExpression(e,t){return e.visitLiteralMapExpr(this,t)}clone(){let t=this.entries.map(e=>e.clone());return new e(t,this.type,this.sourceSpan)}},see=class e extends dt{expression;constructor(e,t,n){super(null,t,n),this.expression=e}isEquivalent(t){return t instanceof e&&this.expression.isEquivalent(t.expression)}isConstant(){return this.expression.isConstant()}visitExpression(e,t){return e.visitSpreadElementExpr(this,t)}clone(){return new e(this.expression.clone(),this.sourceSpan)}},cee=new _t(null,st,null),St=(function(e){return e[e.None=0]=`None`,e[e.Final=1]=`Final`,e[e.Private=2]=`Private`,e[e.Exported=4]=`Exported`,e[e.Static=8]=`Static`,e})(St||{}),lee=class{modifiers;sourceSpan;leadingComments;constructor(e=St.None,t=null,n){this.modifiers=e,this.sourceSpan=t,this.leadingComments=n}hasModifier(e){return(this.modifiers&e)!==0}addLeadingComment(e){this.leadingComments=this.leadingComments??[],this.leadingComments.push(e)}},uee=class e extends lee{expr;constructor(e,t,n){super(St.None,t,n),this.expr=e}isEquivalent(t){return t instanceof e&&this.expr.isEquivalent(t.expr)}visitStatement(e,t){return e.visitExpressionStmt(this,t)}};(class e{static INSTANCE=new e;keyOf(e){if(e instanceof _t&&typeof e.value==`string`)return`"${e.value}"`;if(e instanceof _t)return String(e.value);if(e instanceof gt)return`/${e.body}/${e.flags??``}`;if(e instanceof iee){let t=[];for(let n of e.entries)t.push(this.keyOf(n));return`[${t.join(`,`)}]`}if(e instanceof oee){let t=[];for(let n of e.entries)if(n instanceof aee)t.push(`...`+this.keyOf(n.expression));else{let e=n.key;n.quoted&&(e=`"${e}"`),t.push(e+`:`+this.keyOf(n.value))}return`{${t.join(`,`)}}`}if(e instanceof vt)return`import("${e.value.moduleName}", ${e.value.name})`;if(e instanceof ft)return`read(${e.name})`;if(e instanceof pt)return`typeof(${this.keyOf(e.expr)})`;if(e instanceof see)return`...${this.keyOf(e.expression)}`;throw Error(`${this.constructor.name} does not handle expressions of type ${e.constructor.name}`)}});var v=`@angular/core`,y=(()=>{class e{static core={name:null,moduleName:v};static namespaceHTML={name:`ɵɵnamespaceHTML`,moduleName:v};static namespaceMathML={name:`ɵɵnamespaceMathML`,moduleName:v};static namespaceSVG={name:`ɵɵnamespaceSVG`,moduleName:v};static element={name:`ɵɵelement`,moduleName:v};static elementStart={name:`ɵɵelementStart`,moduleName:v};static elementEnd={name:`ɵɵelementEnd`,moduleName:v};static foreignComponent={name:`ɵɵforeignComponent`,moduleName:v};static foreignContent={name:`ɵɵforeignContent`,moduleName:v};static foreignContentFn={name:`ɵɵforeignContentFn`,moduleName:v};static domElement={name:`ɵɵdomElement`,moduleName:v};static domElementStart={name:`ɵɵdomElementStart`,moduleName:v};static domElementEnd={name:`ɵɵdomElementEnd`,moduleName:v};static domElementContainer={name:`ɵɵdomElementContainer`,moduleName:v};static domElementContainerStart={name:`ɵɵdomElementContainerStart`,moduleName:v};static domElementContainerEnd={name:`ɵɵdomElementContainerEnd`,moduleName:v};static domTemplate={name:`ɵɵdomTemplate`,moduleName:v};static domListener={name:`ɵɵdomListener`,moduleName:v};static advance={name:`ɵɵadvance`,moduleName:v};static syntheticHostProperty={name:`ɵɵsyntheticHostProperty`,moduleName:v};static syntheticHostListener={name:`ɵɵsyntheticHostListener`,moduleName:v};static attribute={name:`ɵɵattribute`,moduleName:v};static classProp={name:`ɵɵclassProp`,moduleName:v};static elementContainerStart={name:`ɵɵelementContainerStart`,moduleName:v};static elementContainerEnd={name:`ɵɵelementContainerEnd`,moduleName:v};static elementContainer={name:`ɵɵelementContainer`,moduleName:v};static styleMap={name:`ɵɵstyleMap`,moduleName:v};static classMap={name:`ɵɵclassMap`,moduleName:v};static styleProp={name:`ɵɵstyleProp`,moduleName:v};static interpolate={name:`ɵɵinterpolate`,moduleName:v};static interpolate1={name:`ɵɵinterpolate1`,moduleName:v};static interpolate2={name:`ɵɵinterpolate2`,moduleName:v};static interpolate3={name:`ɵɵinterpolate3`,moduleName:v};static interpolate4={name:`ɵɵinterpolate4`,moduleName:v};static interpolate5={name:`ɵɵinterpolate5`,moduleName:v};static interpolate6={name:`ɵɵinterpolate6`,moduleName:v};static interpolate7={name:`ɵɵinterpolate7`,moduleName:v};static interpolate8={name:`ɵɵinterpolate8`,moduleName:v};static interpolateV={name:`ɵɵinterpolateV`,moduleName:v};static nextContext={name:`ɵɵnextContext`,moduleName:v};static resetView={name:`ɵɵresetView`,moduleName:v};static templateCreate={name:`ɵɵtemplate`,moduleName:v};static defer={name:`ɵɵdefer`,moduleName:v};static deferWhen={name:`ɵɵdeferWhen`,moduleName:v};static deferOnIdle={name:`ɵɵdeferOnIdle`,moduleName:v};static deferOnImmediate={name:`ɵɵdeferOnImmediate`,moduleName:v};static deferOnTimer={name:`ɵɵdeferOnTimer`,moduleName:v};static deferOnHover={name:`ɵɵdeferOnHover`,moduleName:v};static deferOnInteraction={name:`ɵɵdeferOnInteraction`,moduleName:v};static deferOnViewport={name:`ɵɵdeferOnViewport`,moduleName:v};static deferPrefetchWhen={name:`ɵɵdeferPrefetchWhen`,moduleName:v};static deferPrefetchOnIdle={name:`ɵɵdeferPrefetchOnIdle`,moduleName:v};static deferPrefetchOnImmediate={name:`ɵɵdeferPrefetchOnImmediate`,moduleName:v};static deferPrefetchOnTimer={name:`ɵɵdeferPrefetchOnTimer`,moduleName:v};static deferPrefetchOnHover={name:`ɵɵdeferPrefetchOnHover`,moduleName:v};static deferPrefetchOnInteraction={name:`ɵɵdeferPrefetchOnInteraction`,moduleName:v};static deferPrefetchOnViewport={name:`ɵɵdeferPrefetchOnViewport`,moduleName:v};static deferHydrateWhen={name:`ɵɵdeferHydrateWhen`,moduleName:v};static deferHydrateNever={name:`ɵɵdeferHydrateNever`,moduleName:v};static deferHydrateOnIdle={name:`ɵɵdeferHydrateOnIdle`,moduleName:v};static deferHydrateOnImmediate={name:`ɵɵdeferHydrateOnImmediate`,moduleName:v};static deferHydrateOnTimer={name:`ɵɵdeferHydrateOnTimer`,moduleName:v};static deferHydrateOnHover={name:`ɵɵdeferHydrateOnHover`,moduleName:v};static deferHydrateOnInteraction={name:`ɵɵdeferHydrateOnInteraction`,moduleName:v};static deferHydrateOnViewport={name:`ɵɵdeferHydrateOnViewport`,moduleName:v};static deferEnableTimerScheduling={name:`ɵɵdeferEnableTimerScheduling`,moduleName:v};static enableIncrementalHydrationRuntime={name:`ɵɵenableIncrementalHydrationRuntime`,moduleName:v};static conditionalCreate={name:`ɵɵconditionalCreate`,moduleName:v};static conditionalBranchCreate={name:`ɵɵconditionalBranchCreate`,moduleName:v};static conditional={name:`ɵɵconditional`,moduleName:v};static repeater={name:`ɵɵrepeater`,moduleName:v};static repeaterCreate={name:`ɵɵrepeaterCreate`,moduleName:v};static repeaterTrackByIndex={name:`ɵɵrepeaterTrackByIndex`,moduleName:v};static repeaterTrackByIdentity={name:`ɵɵrepeaterTrackByIdentity`,moduleName:v};static componentInstance={name:`ɵɵcomponentInstance`,moduleName:v};static text={name:`ɵɵtext`,moduleName:v};static enableBindings={name:`ɵɵenableBindings`,moduleName:v};static disableBindings={name:`ɵɵdisableBindings`,moduleName:v};static getCurrentView={name:`ɵɵgetCurrentView`,moduleName:v};static textInterpolate={name:`ɵɵtextInterpolate`,moduleName:v};static textInterpolate1={name:`ɵɵtextInterpolate1`,moduleName:v};static textInterpolate2={name:`ɵɵtextInterpolate2`,moduleName:v};static textInterpolate3={name:`ɵɵtextInterpolate3`,moduleName:v};static textInterpolate4={name:`ɵɵtextInterpolate4`,moduleName:v};static textInterpolate5={name:`ɵɵtextInterpolate5`,moduleName:v};static textInterpolate6={name:`ɵɵtextInterpolate6`,moduleName:v};static textInterpolate7={name:`ɵɵtextInterpolate7`,moduleName:v};static textInterpolate8={name:`ɵɵtextInterpolate8`,moduleName:v};static textInterpolateV={name:`ɵɵtextInterpolateV`,moduleName:v};static restoreView={name:`ɵɵrestoreView`,moduleName:v};static pureFunction0={name:`ɵɵpureFunction0`,moduleName:v};static pureFunction1={name:`ɵɵpureFunction1`,moduleName:v};static pureFunction2={name:`ɵɵpureFunction2`,moduleName:v};static pureFunction3={name:`ɵɵpureFunction3`,moduleName:v};static pureFunction4={name:`ɵɵpureFunction4`,moduleName:v};static pureFunction5={name:`ɵɵpureFunction5`,moduleName:v};static pureFunction6={name:`ɵɵpureFunction6`,moduleName:v};static pureFunction7={name:`ɵɵpureFunction7`,moduleName:v};static pureFunction8={name:`ɵɵpureFunction8`,moduleName:v};static pureFunctionV={name:`ɵɵpureFunctionV`,moduleName:v};static pipeBind1={name:`ɵɵpipeBind1`,moduleName:v};static pipeBind2={name:`ɵɵpipeBind2`,moduleName:v};static pipeBind3={name:`ɵɵpipeBind3`,moduleName:v};static pipeBind4={name:`ɵɵpipeBind4`,moduleName:v};static pipeBindV={name:`ɵɵpipeBindV`,moduleName:v};static domProperty={name:`ɵɵdomProperty`,moduleName:v};static ariaProperty={name:`ɵɵariaProperty`,moduleName:v};static property={name:`ɵɵproperty`,moduleName:v};static control={name:`ɵɵcontrol`,moduleName:v};static controlCreate={name:`ɵɵcontrolCreate`,moduleName:v};static animationEnterListener={name:`ɵɵanimateEnterListener`,moduleName:v};static animationLeaveListener={name:`ɵɵanimateLeaveListener`,moduleName:v};static animationEnter={name:`ɵɵanimateEnter`,moduleName:v};static animationLeave={name:`ɵɵanimateLeave`,moduleName:v};static i18n={name:`ɵɵi18n`,moduleName:v};static i18nAttributes={name:`ɵɵi18nAttributes`,moduleName:v};static i18nExp={name:`ɵɵi18nExp`,moduleName:v};static i18nStart={name:`ɵɵi18nStart`,moduleName:v};static i18nEnd={name:`ɵɵi18nEnd`,moduleName:v};static i18nApply={name:`ɵɵi18nApply`,moduleName:v};static i18nPostprocess={name:`ɵɵi18nPostprocess`,moduleName:v};static pipe={name:`ɵɵpipe`,moduleName:v};static projection={name:`ɵɵprojection`,moduleName:v};static projectionDef={name:`ɵɵprojectionDef`,moduleName:v};static reference={name:`ɵɵreference`,moduleName:v};static inject={name:`ɵɵinject`,moduleName:v};static injectAttribute={name:`ɵɵinjectAttribute`,moduleName:v};static directiveInject={name:`ɵɵdirectiveInject`,moduleName:v};static invalidFactory={name:`ɵɵinvalidFactory`,moduleName:v};static invalidFactoryDep={name:`ɵɵinvalidFactoryDep`,moduleName:v};static templateRefExtractor={name:`ɵɵtemplateRefExtractor`,moduleName:v};static forwardRef={name:`forwardRef`,moduleName:v};static resolveForwardRef={name:`resolveForwardRef`,moduleName:v};static replaceMetadata={name:`ɵɵreplaceMetadata`,moduleName:v};static getReplaceMetadataURL={name:`ɵɵgetReplaceMetadataURL`,moduleName:v};static ɵɵdefineInjectable={name:`ɵɵdefineInjectable`,moduleName:v};static declareInjectable={name:`ɵɵngDeclareInjectable`,moduleName:v};static InjectableDeclaration={name:`ɵɵInjectableDeclaration`,moduleName:v};static defineService={name:`ɵɵdefineService`,moduleName:v};static declareService={name:`ɵɵngDeclareService`,moduleName:v};static resolveWindow={name:`ɵɵresolveWindow`,moduleName:v};static resolveDocument={name:`ɵɵresolveDocument`,moduleName:v};static resolveBody={name:`ɵɵresolveBody`,moduleName:v};static getComponentDepsFactory={name:`ɵɵgetComponentDepsFactory`,moduleName:v};static defineComponent={name:`ɵɵdefineComponent`,moduleName:v};static declareComponent={name:`ɵɵngDeclareComponent`,moduleName:v};static setComponentScope={name:`ɵɵsetComponentScope`,moduleName:v};static ChangeDetectionStrategy={name:`ChangeDetectionStrategy`,moduleName:v};static ViewEncapsulation={name:`ViewEncapsulation`,moduleName:v};static ComponentDeclaration={name:`ɵɵComponentDeclaration`,moduleName:v};static FactoryDeclaration={name:`ɵɵFactoryDeclaration`,moduleName:v};static declareFactory={name:`ɵɵngDeclareFactory`,moduleName:v};static FactoryTarget={name:`ɵɵFactoryTarget`,moduleName:v};static defineDirective={name:`ɵɵdefineDirective`,moduleName:v};static declareDirective={name:`ɵɵngDeclareDirective`,moduleName:v};static DirectiveDeclaration={name:`ɵɵDirectiveDeclaration`,moduleName:v};static InjectorDef={name:`ɵɵInjectorDef`,moduleName:v};static InjectorDeclaration={name:`ɵɵInjectorDeclaration`,moduleName:v};static defineInjector={name:`ɵɵdefineInjector`,moduleName:v};static declareInjector={name:`ɵɵngDeclareInjector`,moduleName:v};static NgModuleDeclaration={name:`ɵɵNgModuleDeclaration`,moduleName:v};static ModuleWithProviders={name:`ModuleWithProviders`,moduleName:v};static defineNgModule={name:`ɵɵdefineNgModule`,moduleName:v};static declareNgModule={name:`ɵɵngDeclareNgModule`,moduleName:v};static setNgModuleScope={name:`ɵɵsetNgModuleScope`,moduleName:v};static registerNgModuleType={name:`ɵɵregisterNgModuleType`,moduleName:v};static PipeDeclaration={name:`ɵɵPipeDeclaration`,moduleName:v};static definePipe={name:`ɵɵdefinePipe`,moduleName:v};static declarePipe={name:`ɵɵngDeclarePipe`,moduleName:v};static declareClassMetadata={name:`ɵɵngDeclareClassMetadata`,moduleName:v};static declareClassMetadataAsync={name:`ɵɵngDeclareClassMetadataAsync`,moduleName:v};static setClassMetadata={name:`ɵsetClassMetadata`,moduleName:v};static setClassMetadataAsync={name:`ɵsetClassMetadataAsync`,moduleName:v};static setClassDebugInfo={name:`ɵsetClassDebugInfo`,moduleName:v};static queryRefresh={name:`ɵɵqueryRefresh`,moduleName:v};static viewQuery={name:`ɵɵviewQuery`,moduleName:v};static loadQuery={name:`ɵɵloadQuery`,moduleName:v};static contentQuery={name:`ɵɵcontentQuery`,moduleName:v};static viewQuerySignal={name:`ɵɵviewQuerySignal`,moduleName:v};static contentQuerySignal={name:`ɵɵcontentQuerySignal`,moduleName:v};static queryAdvance={name:`ɵɵqueryAdvance`,moduleName:v};static twoWayProperty={name:`ɵɵtwoWayProperty`,moduleName:v};static twoWayBindingSet={name:`ɵɵtwoWayBindingSet`,moduleName:v};static twoWayListener={name:`ɵɵtwoWayListener`,moduleName:v};static declareLet={name:`ɵɵdeclareLet`,moduleName:v};static storeLet={name:`ɵɵstoreLet`,moduleName:v};static readContextLet={name:`ɵɵreadContextLet`,moduleName:v};static arrowFunction={name:`ɵɵarrowFunction`,moduleName:v};static attachSourceLocations={name:`ɵɵattachSourceLocations`,moduleName:v};static NgOnChangesFeature={name:`ɵɵNgOnChangesFeature`,moduleName:v};static ControlFeature={name:`ɵɵControlFeature`,moduleName:v};static InheritDefinitionFeature={name:`ɵɵInheritDefinitionFeature`,moduleName:v};static ProvidersFeature={name:`ɵɵProvidersFeature`,moduleName:v};static HostDirectivesFeature={name:`ɵɵHostDirectivesFeature`,moduleName:v};static ExternalStylesFeature={name:`ɵɵExternalStylesFeature`,moduleName:v};static listener={name:`ɵɵlistener`,moduleName:v};static getInheritedFactory={name:`ɵɵgetInheritedFactory`,moduleName:v};static sanitizeHtml={name:`ɵɵsanitizeHtml`,moduleName:v};static sanitizeStyle={name:`ɵɵsanitizeStyle`,moduleName:v};static validateAttribute={name:`ɵɵvalidateAttribute`,moduleName:v};static sanitizeResourceUrl={name:`ɵɵsanitizeResourceUrl`,moduleName:v};static sanitizeScript={name:`ɵɵsanitizeScript`,moduleName:v};static sanitizeUrl={name:`ɵɵsanitizeUrl`,moduleName:v};static sanitizeUrlOrResourceUrl={name:`ɵɵsanitizeUrlOrResourceUrl`,moduleName:v};static trustConstantHtml={name:`ɵɵtrustConstantHtml`,moduleName:v};static trustConstantResourceUrl={name:`ɵɵtrustConstantResourceUrl`,moduleName:v};static inputDecorator={name:`Input`,moduleName:v};static outputDecorator={name:`Output`,moduleName:v};static viewChildDecorator={name:`ViewChild`,moduleName:v};static viewChildrenDecorator={name:`ViewChildren`,moduleName:v};static contentChildDecorator={name:`ContentChild`,moduleName:v};static contentChildrenDecorator={name:`ContentChildren`,moduleName:v};static InputSignalBrandWriteType={name:`ɵINPUT_SIGNAL_BRAND_WRITE_TYPE`,moduleName:v};static UnwrapDirectiveSignalInputs={name:`ɵUnwrapDirectiveSignalInputs`,moduleName:v};static unwrapWritableSignal={name:`ɵunwrapWritableSignal`,moduleName:v};static assertType={name:`ɵassertType`,moduleName:v}}return e})();_.And,_.Bigger,_.BiggerEquals,_.BitwiseOr,_.BitwiseAnd,_.Divide,_.Assign,_.Equals,_.Identical,_.Lower,_.LowerEquals,_.Minus,_.Modulo,_.Exponentiation,_.Multiply,_.NotEquals,_.NotIdentical,_.NullishCoalesce,_.Or,_.Plus,_.In,_.InstanceOf,_.AdditionAssignment,_.SubtractionAssignment,_.MultiplicationAssignment,_.DivisionAssignment,_.RemainderAssignment,_.ExponentiationAssignment,_.AndAssignment,_.OrAssignment,_.NullishCoalesceAssignment;var Ct=class{span;sourceSpan;constructor(e,t){this.span=e,this.sourceSpan=t}toString(){return`AST`}},wt=class extends Ct{receiver;args;argumentSpan;constructor(e,t,n,r,i){super(e,t),this.receiver=n,this.args=r,this.argumentSpan=i}visit(e,t=null){return e.visitCall(this,t)}},Tt=(function(e){return e[e.Property=0]=`Property`,e[e.Attribute=1]=`Attribute`,e[e.Class=2]=`Class`,e[e.Style=3]=`Style`,e[e.LegacyAnimation=4]=`LegacyAnimation`,e[e.TwoWay=5]=`TwoWay`,e[e.Animation=6]=`Animation`,e})(Tt||{}),Et=`(:(where|is)\\()?`,Dt=`-shadowcsshost`,Ot=`-shadowcsscontext`,kt=`[^)(]*`,At=String.raw`(?:\(${kt}\)|${kt})+?`,jt=String.raw`(?:\(${At}\)|${kt})+?`,Mt=String.raw`(?:\((${jt})\))`;String.raw`(:nth-[-\w]+)`+Mt,Dt+Mt+``,`${Et}`,Ot+Mt+``;var Nt=(function(e){return e[e.ListEnd=0]=`ListEnd`,e[e.Statement=1]=`Statement`,e[e.Variable=2]=`Variable`,e[e.ElementStart=3]=`ElementStart`,e[e.Element=4]=`Element`,e[e.ForeignComponent=5]=`ForeignComponent`,e[e.Template=6]=`Template`,e[e.ElementEnd=7]=`ElementEnd`,e[e.ContainerStart=8]=`ContainerStart`,e[e.Container=9]=`Container`,e[e.ContainerEnd=10]=`ContainerEnd`,e[e.DisableBindings=11]=`DisableBindings`,e[e.ConditionalCreate=12]=`ConditionalCreate`,e[e.ConditionalBranchCreate=13]=`ConditionalBranchCreate`,e[e.Conditional=14]=`Conditional`,e[e.EnableBindings=15]=`EnableBindings`,e[e.Text=16]=`Text`,e[e.Listener=17]=`Listener`,e[e.InterpolateText=18]=`InterpolateText`,e[e.Binding=19]=`Binding`,e[e.Property=20]=`Property`,e[e.StyleProp=21]=`StyleProp`,e[e.ClassProp=22]=`ClassProp`,e[e.StyleMap=23]=`StyleMap`,e[e.ClassMap=24]=`ClassMap`,e[e.Advance=25]=`Advance`,e[e.Pipe=26]=`Pipe`,e[e.Attribute=27]=`Attribute`,e[e.ExtractedAttribute=28]=`ExtractedAttribute`,e[e.Defer=29]=`Defer`,e[e.DeferOn=30]=`DeferOn`,e[e.DeferWhen=31]=`DeferWhen`,e[e.I18nMessage=32]=`I18nMessage`,e[e.DomProperty=33]=`DomProperty`,e[e.Namespace=34]=`Namespace`,e[e.ProjectionDef=35]=`ProjectionDef`,e[e.EnableIncrementalHydrationRuntime=36]=`EnableIncrementalHydrationRuntime`,e[e.Projection=37]=`Projection`,e[e.Content=38]=`Content`,e[e.RepeaterCreate=39]=`RepeaterCreate`,e[e.Repeater=40]=`Repeater`,e[e.TwoWayProperty=41]=`TwoWayProperty`,e[e.TwoWayListener=42]=`TwoWayListener`,e[e.DeclareLet=43]=`DeclareLet`,e[e.StoreLet=44]=`StoreLet`,e[e.I18nStart=45]=`I18nStart`,e[e.I18n=46]=`I18n`,e[e.I18nEnd=47]=`I18nEnd`,e[e.I18nExpression=48]=`I18nExpression`,e[e.I18nApply=49]=`I18nApply`,e[e.IcuStart=50]=`IcuStart`,e[e.IcuEnd=51]=`IcuEnd`,e[e.IcuPlaceholder=52]=`IcuPlaceholder`,e[e.I18nContext=53]=`I18nContext`,e[e.I18nAttributes=54]=`I18nAttributes`,e[e.SourceLocation=55]=`SourceLocation`,e[e.Animation=56]=`Animation`,e[e.AnimationString=57]=`AnimationString`,e[e.AnimationBinding=58]=`AnimationBinding`,e[e.AnimationListener=59]=`AnimationListener`,e[e.Control=60]=`Control`,e[e.ControlCreate=61]=`ControlCreate`,e})(Nt||{}),Pt=(function(e){return e[e.LexicalRead=0]=`LexicalRead`,e[e.Context=1]=`Context`,e[e.TrackContext=2]=`TrackContext`,e[e.ReadVariable=3]=`ReadVariable`,e[e.NextContext=4]=`NextContext`,e[e.Reference=5]=`Reference`,e[e.StoreLet=6]=`StoreLet`,e[e.ContextLetReference=7]=`ContextLetReference`,e[e.GetCurrentView=8]=`GetCurrentView`,e[e.RestoreView=9]=`RestoreView`,e[e.ResetView=10]=`ResetView`,e[e.PureFunctionExpr=11]=`PureFunctionExpr`,e[e.PureFunctionParameterExpr=12]=`PureFunctionParameterExpr`,e[e.PipeBinding=13]=`PipeBinding`,e[e.PipeBindingVariadic=14]=`PipeBindingVariadic`,e[e.SafePropertyRead=15]=`SafePropertyRead`,e[e.SafeKeyedRead=16]=`SafeKeyedRead`,e[e.SafeNavigationMigration=17]=`SafeNavigationMigration`,e[e.SafeTernaryExpr=18]=`SafeTernaryExpr`,e[e.EmptyExpr=19]=`EmptyExpr`,e[e.AssignTemporaryExpr=20]=`AssignTemporaryExpr`,e[e.ReadTemporaryExpr=21]=`ReadTemporaryExpr`,e[e.SlotLiteralExpr=22]=`SlotLiteralExpr`,e[e.ConditionalCase=23]=`ConditionalCase`,e[e.ConstCollected=24]=`ConstCollected`,e[e.TwoWayBindingSet=25]=`TwoWayBindingSet`,e[e.ForeignContent=26]=`ForeignContent`,e[e.ArrowFunction=27]=`ArrowFunction`,e})(Pt||{}),Ft=(function(e){return e[e.None=0]=`None`,e[e.AlwaysInline=1]=`AlwaysInline`,e})(Ft||{}),It=(function(e){return e[e.Context=0]=`Context`,e[e.Identifier=1]=`Identifier`,e[e.SavedView=2]=`SavedView`,e[e.Alias=3]=`Alias`,e})(It||{}),Lt=(function(e){return e[e.Attribute=0]=`Attribute`,e[e.ClassName=1]=`ClassName`,e[e.StyleProperty=2]=`StyleProperty`,e[e.Property=3]=`Property`,e[e.Template=4]=`Template`,e[e.I18n=5]=`I18n`,e[e.LegacyAnimation=6]=`LegacyAnimation`,e[e.TwoWayProperty=7]=`TwoWayProperty`,e[e.Animation=8]=`Animation`,e})(Lt||{}),Rt=(function(e){return e[e.Creation=0]=`Creation`,e[e.Postproccessing=1]=`Postproccessing`,e})(Rt||{}),zt=(function(e){return e[e.I18nText=0]=`I18nText`,e[e.I18nAttribute=1]=`I18nAttribute`,e})(zt||{}),Bt=(function(e){return e[e.None=0]=`None`,e[e.ElementTag=1]=`ElementTag`,e[e.TemplateTag=2]=`TemplateTag`,e[e.OpenTag=4]=`OpenTag`,e[e.CloseTag=8]=`CloseTag`,e[e.ExpressionIndex=16]=`ExpressionIndex`,e})(Bt||{}),Vt=(function(e){return e[e.HTML=0]=`HTML`,e[e.SVG=1]=`SVG`,e[e.Math=2]=`Math`,e})(Vt||{}),Ht=(function(e){return e[e.Idle=0]=`Idle`,e[e.Immediate=1]=`Immediate`,e[e.Timer=2]=`Timer`,e[e.Hover=3]=`Hover`,e[e.Interaction=4]=`Interaction`,e[e.Viewport=5]=`Viewport`,e[e.Never=6]=`Never`,e})(Ht||{}),Ut=(function(e){return e[e.RootI18n=0]=`RootI18n`,e[e.Icu=1]=`Icu`,e[e.Attr=2]=`Attr`,e})(Ut||{}),Wt=(function(e){return e[e.NgTemplate=0]=`NgTemplate`,e[e.Structural=1]=`Structural`,e[e.Block=2]=`Block`,e})(Wt||{}),Gt=(function(e){return e[e.None=0]=`None`,e[e.InChildOperation=1]=`InChildOperation`,e[e.InArrowFunctionOperation=2]=`InArrowFunctionOperation`,e[e.InSafeNavigationMigration=4]=`InSafeNavigationMigration`,e})(Gt||{});Nt.Element,Nt.ElementStart,Nt.Container,Nt.ContainerStart,Nt.Template,Nt.RepeaterCreate,Nt.ConditionalCreate,Nt.ConditionalBranchCreate;var b=(function(e){return e[e.Tmpl=0]=`Tmpl`,e[e.Host=1]=`Host`,e[e.Both=2]=`Both`,e})(b||{}),Kt=(function(e){return e[e.Full=0]=`Full`,e[e.DomOnly=1]=`DomOnly`,e})(Kt||{});y.ariaProperty,y.ariaProperty,y.attribute,y.attribute,y.classProp,y.classProp,y.element,y.element,y.elementContainer,y.elementContainer,y.elementContainerEnd,y.elementContainerEnd,y.elementContainerStart,y.elementContainerStart,y.elementEnd,y.elementEnd,y.elementStart,y.elementStart,y.domProperty,y.domProperty,y.i18nExp,y.i18nExp,y.listener,y.listener,y.listener,y.listener,y.property,y.property,y.styleProp,y.styleProp,y.syntheticHostListener,y.syntheticHostListener,y.syntheticHostProperty,y.syntheticHostProperty,y.templateCreate,y.templateCreate,y.twoWayProperty,y.twoWayProperty,y.twoWayListener,y.twoWayListener,y.declareLet,y.declareLet,y.conditionalCreate,y.conditionalBranchCreate,y.conditionalBranchCreate,y.conditionalBranchCreate,y.domElement,y.domElement,y.domElementStart,y.domElementStart,y.domElementEnd,y.domElementEnd,y.domElementContainer,y.domElementContainer,y.domElementContainerStart,y.domElementContainerStart,y.domElementContainerEnd,y.domElementContainerEnd,y.domListener,y.domListener,y.domTemplate,y.domTemplate,y.animationEnter,y.animationEnter,y.animationLeave,y.animationLeave,y.animationEnterListener,y.animationEnterListener,y.animationLeaveListener,y.animationLeaveListener,_.And,_.Bigger,_.BiggerEquals,_.BitwiseOr,_.BitwiseAnd,_.Divide,_.Assign,_.Equals,_.Identical,_.Lower,_.LowerEquals,_.Minus,_.Modulo,_.Exponentiation,_.Multiply,_.NotEquals,_.NotIdentical,_.NullishCoalesce,_.Or,_.Plus,_.In,_.InstanceOf,_.AdditionAssignment,_.SubtractionAssignment,_.MultiplicationAssignment,_.DivisionAssignment,_.RemainderAssignment,_.ExponentiationAssignment,_.AndAssignment,_.OrAssignment,_.NullishCoalesceAssignment,Nt.Property,Nt.Property,Nt.Property,Nt.Attribute,Nt.Attribute,Nt.Property,Nt.TwoWayProperty,Nt.Container,Nt.ContainerStart,Nt.ContainerEnd,Nt.Element,Nt.ElementStart,Nt.ElementEnd,Nt.Template,Nt.ElementEnd,Nt.ElementStart,Nt.Element,Nt.ContainerEnd,Nt.ContainerStart,Nt.Container,Nt.I18nEnd,Nt.I18nStart,Nt.I18n,Nt.Pipe;var qt=` \f +\r \v ᠎ - \u2028\u2029   `;`${qt}`,`${qt}`;var Jt=(function(e){return e[e.Character=0]=`Character`,e[e.Identifier=1]=`Identifier`,e[e.PrivateIdentifier=2]=`PrivateIdentifier`,e[e.Keyword=3]=`Keyword`,e[e.String=4]=`String`,e[e.Operator=5]=`Operator`,e[e.Number=6]=`Number`,e[e.RegExpBody=7]=`RegExpBody`,e[e.RegExpFlags=8]=`RegExpFlags`,e[e.Error=9]=`Error`,e})(Jt||{}),Yt=(function(e){return e[e.Plain=0]=`Plain`,e[e.TemplateLiteralPart=1]=`TemplateLiteralPart`,e[e.TemplateLiteralEnd=2]=`TemplateLiteralEnd`,e})(Yt||{});Jt.Character,Nt.StyleMap,Nt.ClassMap,Nt.StyleProp,Nt.ClassProp,Nt.Attribute,Nt.Property,Nt.Attribute,Nt.Control,Nt.DomProperty,Nt.DomProperty,Nt.Attribute,Nt.StyleMap,Nt.ClassMap,Nt.StyleProp,Nt.ClassProp,Nt.Listener,Nt.TwoWayListener,Nt.AnimationListener,Nt.StyleMap,Nt.ClassMap,Nt.StyleProp,Nt.ClassProp,Nt.Property,Nt.TwoWayProperty,Nt.DomProperty,Nt.Attribute,Nt.Animation,Nt.Control,Ht.Idle,y.deferOnIdle,y.deferPrefetchOnIdle,y.deferHydrateOnIdle,Ht.Immediate,y.deferOnImmediate,y.deferPrefetchOnImmediate,y.deferHydrateOnImmediate,Ht.Timer,y.deferOnTimer,y.deferPrefetchOnTimer,y.deferHydrateOnTimer,Ht.Hover,y.deferOnHover,y.deferPrefetchOnHover,y.deferHydrateOnHover,Ht.Interaction,y.deferOnInteraction,y.deferPrefetchOnInteraction,y.deferHydrateOnInteraction,Ht.Viewport,y.deferOnViewport,y.deferPrefetchOnViewport,y.deferHydrateOnViewport,Ht.Never,y.deferHydrateNever,y.deferHydrateNever,y.deferHydrateNever,y.pipeBind1,y.pipeBind2,y.pipeBind3,y.pipeBind4,y.textInterpolate,y.textInterpolate1,y.textInterpolate2,y.textInterpolate3,y.textInterpolate4,y.textInterpolate5,y.textInterpolate6,y.textInterpolate7,y.textInterpolate8,y.textInterpolateV,y.interpolate,y.interpolate1,y.interpolate2,y.interpolate3,y.interpolate4,y.interpolate5,y.interpolate6,y.interpolate7,y.interpolate8,y.interpolateV,y.pureFunction0,y.pureFunction1,y.pureFunction2,y.pureFunction3,y.pureFunction4,y.pureFunction5,y.pureFunction6,y.pureFunction7,y.pureFunction8,y.pureFunctionV,y.resolveWindow,y.resolveDocument,y.resolveBody,nt.HTML,y.sanitizeHtml,nt.RESOURCE_URL,y.sanitizeResourceUrl,nt.SCRIPT,y.sanitizeScript,nt.STYLE,y.sanitizeStyle,nt.URL,y.sanitizeUrl,nt.ATTRIBUTE_NO_BINDING,y.validateAttribute,nt.HTML,y.trustConstantHtml,nt.RESOURCE_URL,y.trustConstantResourceUrl;var Xt=(function(e){return e[e.None=0]=`None`,e[e.ViewContextRead=1]=`ViewContextRead`,e[e.ViewContextWrite=2]=`ViewContextWrite`,e[e.SideEffectful=4]=`SideEffectful`,e})(Xt||{});b.Tmpl,b.Tmpl,b.Both,b.Host,b.Tmpl,b.Tmpl,b.Tmpl,b.Both,b.Both,b.Both,b.Tmpl,b.Both,b.Both,b.Tmpl,b.Both,b.Tmpl,b.Both,b.Both,b.Tmpl,b.Tmpl,b.Tmpl,b.Tmpl,b.Tmpl,b.Both,b.Both,b.Tmpl,b.Tmpl,b.Tmpl,b.Tmpl,b.Both,b.Both,b.Both,b.Tmpl,b.Tmpl,b.Both,b.Tmpl,b.Tmpl,b.Tmpl,b.Both,b.Both,b.Tmpl,b.Both,b.Both,b.Both,b.Both,b.Both,b.Tmpl,b.Tmpl,b.Tmpl,b.Tmpl,b.Tmpl,b.Tmpl,b.Tmpl,b.Tmpl,b.Tmpl,b.Tmpl,b.Tmpl,b.Tmpl,b.Both,b.Tmpl,b.Both,b.Tmpl,b.Both,b.Tmpl,b.Tmpl,b.Tmpl,b.Tmpl,b.Tmpl,b.Tmpl,b.Both,b.Both,b.Both,Tt.Property,Lt.Property,Tt.TwoWay,Lt.TwoWayProperty,Tt.Attribute,Lt.Attribute,Tt.Class,Lt.ClassName,Tt.Style,Lt.StyleProperty,Tt.LegacyAnimation,Lt.LegacyAnimation,Tt.Animation,Lt.Animation;var Zt=`%COMP%`;`${Zt}`,`${Zt}`,class e{static SINGLETON=new e;static veWillInferAnyFor(t){let n=e.SINGLETON;return t instanceof wt?t.visit(n):t.receiver.visit(n)}visitUnary(e){return e.expr.visit(this)}visitBinary(e){return e.left.visit(this)||e.right.visit(this)}visitChain(){return!1}visitConditional(e){return e.condition.visit(this)||e.trueExp.visit(this)||e.falseExp.visit(this)}visitCall(){return!0}visitSafeCall(){return!1}visitImplicitReceiver(){return!1}visitThisReceiver(){return!1}visitInterpolation(e){return e.expressions.some(e=>e.visit(this))}visitKeyedRead(){return!1}visitLiteralArray(){return!0}visitLiteralMap(){return!0}visitLiteralPrimitive(){return!1}visitPipe(){return!0}visitPrefixNot(e){return e.expression.visit(this)}visitTypeofExpression(e){return e.expression.visit(this)}visitVoidExpression(e){return e.expression.visit(this)}visitNonNullAssert(e){return e.expression.visit(this)}visitPropertyRead(){return!1}visitSafePropertyRead(){return!1}visitSafeKeyedRead(){return!1}visitTemplateLiteral(){return!1}visitTemplateLiteralElement(){return!1}visitTaggedTemplateLiteral(){return!1}visitParenthesizedExpression(e){return e.expression.visit(this)}visitRegularExpressionLiteral(){return!1}visitSpreadElement(e){return e.expression.visit(this)}visitArrowFunction(e,t){return!1}};var Qt=null,$t=!1,en=1,tn=null,nn=Symbol(`SIGNAL`);function rn(e){let t=Qt;return Qt=e,t}function an(){return Qt}var on={version:0,lastCleanEpoch:0,dirty:!1,producers:void 0,producersTail:void 0,consumers:void 0,consumersTail:void 0,recomputing:!1,consumerAllowSignalWrites:!1,consumerIsAlwaysLive:!1,kind:`unknown`,producerMustRecompute:()=>!1,producerRecomputeValue:()=>{},consumerMarkedDirty:()=>{},consumerOnSignalRead:()=>{}};function sn(e){if($t)throw Error(``);if(Qt===null)return;Qt.consumerOnSignalRead(e);let t=Qt.producersTail;if(t!==void 0&&t.producer===e)return;let n,r=Qt.recomputing;if(r&&(n=t===void 0?Qt.producers:t.nextProducer,n!==void 0&&n.producer===e)){Qt.producersTail=n,n.lastReadVersion=e.version,n.knownValidAtEpoch=en;return}let i=e.consumersTail;if(i!==void 0&&i.consumer===Qt&&(!r||i.knownValidAtEpoch===en))return;let a=Sn(Qt),o={producer:e,consumer:Qt,nextProducer:n,prevConsumer:void 0,knownValidAtEpoch:en,lastReadVersion:e.version,nextConsumer:void 0};Qt.producersTail=o,t===void 0?Qt.producers=o:t.nextProducer=o,a&&bn(e,o)}function cn(){en++}function ln(e){if((!Sn(e)||e.dirty)&&(e.dirty||e.lastCleanEpoch!==en)){if(!e.producerMustRecompute(e)&&!vn(e)){pn(e);return}e.producerRecomputeValue(e),pn(e)}}function un(e){if(e.consumers===void 0)return;let t=$t;$t=!0;try{for(let t=e.consumers;t!==void 0;t=t.nextConsumer){let e=t.consumer;e.dirty||fn(e)}}finally{$t=t}}function dn(){return Qt?.consumerAllowSignalWrites!==!1}function fn(e){e.dirty=!0,un(e),e.consumerMarkedDirty?.(e)}function pn(e){e.dirty=!1,e.lastCleanEpoch=en}function mn(e){return e&&hn(e),rn(e)}function hn(e){if(e.producersTail?.knownValidAtEpoch===en){let t=e.producers;for(;t!==void 0;)t.knownValidAtEpoch=null,t=t.nextProducer}e.producersTail=void 0,e.recomputing=!0}function gn(e,t){rn(t),e&&_n(e)}function _n(e){e.recomputing=!1;let t=e.producersTail,n=t===void 0?e.producers:t.nextProducer;if(n!==void 0){if(Sn(e))do n=xn(n);while(n!==void 0);t===void 0?e.producers=void 0:t.nextProducer=void 0}}function vn(e){for(let t=e.producers;t!==void 0;t=t.nextProducer){let e=t.producer,n=t.lastReadVersion;if(n!==e.version||(ln(e),n!==e.version))return!0}return!1}function yn(e){if(Sn(e)){let t=e.producers;for(;t!==void 0;)t=xn(t)}e.producers=void 0,e.producersTail=void 0,e.consumers=void 0,e.consumersTail=void 0}function bn(e,t){let n=e.consumersTail,r=Sn(e);if(n===void 0?(t.nextConsumer=void 0,e.consumers=t):(t.nextConsumer=n.nextConsumer,n.nextConsumer=t),t.prevConsumer=n,e.consumersTail=t,!r)for(let t=e.producers;t!==void 0;t=t.nextProducer)bn(t.producer,t)}function xn(e){let t=e.producer,n=e.nextProducer,r=e.nextConsumer,i=e.prevConsumer;if(e.nextConsumer=void 0,e.prevConsumer=void 0,r===void 0?t.consumersTail=i:r.prevConsumer=i,i!==void 0)i.nextConsumer=r;else if(t.consumers=r,!Sn(t)){let e=t.producers;for(;e!==void 0;)e=xn(e)}return n}function Sn(e){return e.consumerIsAlwaysLive||e.consumers!==void 0}function Cn(e){tn?.(e)}function wn(e,t){return Object.is(e,t)}function Tn(e,t){let n=Object.create(dee);n.computation=e,t!==void 0&&(n.equal=t);let r=()=>{if(ln(n),sn(n),n.value===On)throw n.error;return n.value};return r[nn]=n,Cn(n),r}var En=Symbol(`UNSET`),Dn=Symbol(`COMPUTING`),On=Symbol(`ERRORED`),dee={...on,value:En,dirty:!0,error:null,equal:wn,kind:`computed`,producerMustRecompute(e){return e.value===En||e.value===Dn},producerRecomputeValue(e){if(e.value===Dn)throw Error(``);let t=e.value;e.value=Dn;let n=mn(e),r,i=!1;try{r=e.computation(),rn(null),i=t!==En&&t!==On&&r!==On&&e.equal(t,r)}catch(t){r=On,e.error=t}finally{gn(e,n)}if(i){e.value=t;return}e.value=r,e.version++}};function fee(){throw Error()}var kn=fee;function An(e){kn(e)}function pee(e){kn=e}var mee=null;function hee(e,t){let n=Object.create(Nn);n.value=e,t!==void 0&&(n.equal=t);let r=()=>gee(n);return r[nn]=n,Cn(n),[r,e=>jn(n,e),e=>Mn(n,e)]}function gee(e){return sn(e),e.value}function jn(e,t){dn()||An(e),e.equal(e.value,t)||(e.value=t,Pn(e))}function Mn(e,t){dn()||An(e),jn(e,t(e.value))}var Nn={...on,equal:wn,value:void 0,kind:`signal`};function Pn(e){e.version++,cn(),un(e),mee?.(e)}var Fn={...on,consumerIsAlwaysLive:!0,consumerAllowSignalWrites:!0,dirty:!0,kind:`effect`};function In(e){if(e.dirty=!1,e.version>0&&!vn(e))return;e.version++;let t=mn(e);try{e.cleanup(),e.fn()}finally{gn(e,t)}}var Ln=void 0;function Rn(){return Ln}function zn(e){let t=Ln;return Ln=e,t}var Bn=Symbol(`NotFound`);function Vn(e){return e===Bn||e?.name===`ɵNotFound`}function Hn(e,t,n){let r=Object.create(Gn);r.source=e,r.computation=t,n!=null&&(r.equal=n);let i=()=>{if(ln(r),sn(r),r.value===On)throw r.error;return r.value};return i[nn]=r,Cn(r),i}function Un(e,t){ln(e),jn(e,t),pn(e)}function Wn(e,t){if(ln(e),e.value===On)throw e.error;Mn(e,t),pn(e)}var Gn={...on,value:En,dirty:!0,error:null,equal:wn,kind:`linkedSignal`,producerMustRecompute(e){return e.value===En||e.value===Dn},producerRecomputeValue(e){if(e.value===Dn)throw Error(``);let t=e.value;e.value=Dn;let n=mn(e),r,i=!1;try{let n=e.source(),a=t!==En&&t!==On,o=a?{source:e.sourceValue,value:t}:void 0;r=e.computation(n,o),e.sourceValue=n,rn(null),i=a&&r!==On&&e.equal(t,r)}catch(t){r=On,e.error=t}finally{gn(e,n)}if(i){e.value=t;return}e.value=r,e.version++}};function Kn(e){let t=rn(null);try{return e()}finally{rn(t)}}var qn=function(e,t){return qn=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},qn(e,t)};function Jn(e,t){if(typeof t!=`function`&&t!==null)throw TypeError(`Class extends value `+String(t)+` is not a constructor or null`);qn(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}function Yn(e,t,n,r){function i(e){return e instanceof n?e:new n(function(t){t(e)})}return new(n||=Promise)(function(n,a){function o(e){try{c(r.next(e))}catch(e){a(e)}}function s(e){try{c(r.throw(e))}catch(e){a(e)}}function c(e){e.done?n(e.value):i(e.value).then(o,s)}c((r=r.apply(e,t||[])).next())})}function Xn(e,t){var n={label:0,sent:function(){if(a[0]&1)throw a[1];return a[1]},trys:[],ops:[]},r,i,a,o=Object.create((typeof Iterator==`function`?Iterator:Object).prototype);return o.next=s(0),o.throw=s(1),o.return=s(2),typeof Symbol==`function`&&(o[Symbol.iterator]=function(){return this}),o;function s(e){return function(t){return c([e,t])}}function c(s){if(r)throw TypeError(`Generator is already executing.`);for(;o&&(o=0,s[0]&&(n=0)),n;)try{if(r=1,i&&(a=s[0]&2?i.return:s[0]?i.throw||((a=i.return)&&a.call(i),0):i.next)&&!(a=a.call(i,s[1])).done)return a;switch(i=0,a&&(s=[s[0]&2,a.value]),s[0]){case 0:case 1:a=s;break;case 4:return n.label++,{value:s[1],done:!1};case 5:n.label++,i=s[1],s=[0];continue;case 7:s=n.ops.pop(),n.trys.pop();continue;default:if(a=n.trys,!(a=a.length>0&&a[a.length-1])&&(s[0]===6||s[0]===2)){n=0;continue}if(s[0]===3&&(!a||s[1]>a[0]&&s[1]=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw TypeError(t?`Object is not iterable.`:`Symbol.iterator is not defined.`)}function Qn(e,t){var n=typeof Symbol==`function`&&e[Symbol.iterator];if(!n)return e;var r=n.call(e),i,a=[],o;try{for(;(t===void 0||t-->0)&&!(i=r.next()).done;)a.push(i.value)}catch(e){o={error:e}}finally{try{i&&!i.done&&(n=r.return)&&n.call(r)}finally{if(o)throw o.error}}return a}function $n(e,t,n){if(n||arguments.length===2)for(var r=0,i=t.length,a;r1||c(e,t)})},t&&(i[e]=t(i[e])))}function c(e,t){try{l(r[e](t))}catch(e){f(a[0][3],e)}}function l(e){e.value instanceof er?Promise.resolve(e.value.v).then(u,d):f(a[0][2],e)}function u(e){c(`next`,e)}function d(e){c(`throw`,e)}function f(e,t){e(t),a.shift(),a.length&&c(a[0][0],a[0][1])}}function nr(e){if(!Symbol.asyncIterator)throw TypeError(`Symbol.asyncIterator is not defined.`);var t=e[Symbol.asyncIterator],n;return t?t.call(e):(e=typeof Zn==`function`?Zn(e):e[Symbol.iterator](),n={},r(`next`),r(`throw`),r(`return`),n[Symbol.asyncIterator]=function(){return this},n);function r(t){n[t]=e[t]&&function(n){return new Promise(function(r,a){n=e[t](n),i(r,a,n.done,n.value)})}}function i(e,t,n,r){Promise.resolve(r).then(function(t){e({value:t,done:n})},t)}}function rr(e){return typeof e==`function`}function ir(e){var t=e(function(e){Error.call(e),e.stack=Error().stack});return t.prototype=Object.create(Error.prototype),t.prototype.constructor=t,t}var ar=ir(function(e){return function(t){e(this),this.message=t?t.length+` errors occurred during unsubscription: `+t.map(function(e,t){return t+1+`) `+e.toString()}).join(` - `):``,this.name=`UnsubscriptionError`,this.errors=t}});function sr(e,t){if(e){var n=e.indexOf(t);0<=n&&e.splice(n,1)}}var cr=function(){function e(e){this.initialTeardown=e,this.closed=!1,this._parentage=null,this._finalizers=null}return e.prototype.unsubscribe=function(){var e,t,n,r,i;if(!this.closed){this.closed=!0;var a=this._parentage;if(a){if(this._parentage=null,Array.isArray(a))try{for(var o=Qn(a),s=o.next();!s.done;s=o.next())s.value.remove(this)}catch(t){e={error:t}}finally{try{s&&!s.done&&(t=o.return)&&t.call(o)}finally{if(e)throw e.error}}else a.remove(this)}var c=this.initialTeardown;if(ir(c))try{c()}catch(e){i=e instanceof or?e.errors:[e]}var l=this._finalizers;if(l){this._finalizers=null;try{for(var u=Qn(l),d=u.next();!d.done;d=u.next()){var f=d.value;try{dr(f)}catch(e){i??=[],e instanceof or?i=er(er([],$n(i)),$n(e.errors)):i.push(e)}}}catch(e){n={error:e}}finally{try{d&&!d.done&&(r=u.return)&&r.call(u)}finally{if(n)throw n.error}}}if(i)throw new or(i)}},e.prototype.add=function(t){if(t&&t!==this){if(this.closed)dr(t);else{if(t instanceof e){if(t.closed||t._hasParent(this))return;t._addParent(this)}(this._finalizers=this._finalizers??[]).push(t)}}},e.prototype._hasParent=function(e){var t=this._parentage;return t===e||Array.isArray(t)&&t.includes(e)},e.prototype._addParent=function(e){var t=this._parentage;this._parentage=Array.isArray(t)?(t.push(e),t):t?[t,e]:e},e.prototype._removeParent=function(e){var t=this._parentage;t===e?this._parentage=null:Array.isArray(t)&&sr(t,e)},e.prototype.remove=function(t){var n=this._finalizers;n&&sr(n,t),t instanceof e&&t._removeParent(this)},e.EMPTY=(function(){var t=new e;return t.closed=!0,t})(),e}(),lr=cr.EMPTY;function ur(e){return e instanceof cr||e&&`closed`in e&&ir(e.remove)&&ir(e.add)&&ir(e.unsubscribe)}function dr(e){ir(e)?e():e.unsubscribe()}var fr={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1},pr={setTimeout:function(e,t){var n=[...arguments].slice(2),r=pr.delegate;return r?.setTimeout?r.setTimeout.apply(r,er([e,t],$n(n))):setTimeout.apply(void 0,er([e,t],$n(n)))},clearTimeout:function(e){return(pr.delegate?.clearTimeout||clearTimeout)(e)},delegate:void 0};function mr(e){pr.setTimeout(function(){var t=fr.onUnhandledError;if(t)t(e);else throw e})}function hr(){}var gr=(function(){return yr(`C`,void 0,void 0)})();function _r(e){return yr(`E`,void 0,e)}function vr(e){return yr(`N`,e,void 0)}function yr(e,t,n){return{kind:e,value:t,error:n}}var br=null;function xr(e){if(fr.useDeprecatedSynchronousErrorHandling){var t=!br;if(t&&(br={errorThrown:!1,error:null}),e(),t){var n=br,r=n.errorThrown,i=n.error;if(br=null,r)throw i}}else e()}function Sr(e){fr.useDeprecatedSynchronousErrorHandling&&br&&(br.errorThrown=!0,br.error=e)}var Cr=function(e){Yn(t,e);function t(t){var n=e.call(this)||this;return n.isStopped=!1,t?(n.destination=t,ur(t)&&t.add(n)):n.destination=jr,n}return t.create=function(e,t,n){return new Dr(e,t,n)},t.prototype.next=function(e){this.isStopped?Ar(vr(e),this):this._next(e)},t.prototype.error=function(e){this.isStopped?Ar(_r(e),this):(this.isStopped=!0,this._error(e))},t.prototype.complete=function(){this.isStopped?Ar(gr,this):(this.isStopped=!0,this._complete())},t.prototype.unsubscribe=function(){this.closed||(this.isStopped=!0,e.prototype.unsubscribe.call(this),this.destination=null)},t.prototype._next=function(e){this.destination.next(e)},t.prototype._error=function(e){try{this.destination.error(e)}finally{this.unsubscribe()}},t.prototype._complete=function(){try{this.destination.complete()}finally{this.unsubscribe()}},t}(cr),wr=Function.prototype.bind;function Tr(e,t){return wr.call(e,t)}var Er=function(){function e(e){this.partialObserver=e}return e.prototype.next=function(e){var t=this.partialObserver;if(t.next)try{t.next(e)}catch(e){Or(e)}},e.prototype.error=function(e){var t=this.partialObserver;if(t.error)try{t.error(e)}catch(e){Or(e)}else Or(e)},e.prototype.complete=function(){var e=this.partialObserver;if(e.complete)try{e.complete()}catch(e){Or(e)}},e}(),Dr=function(e){Yn(t,e);function t(t,n,r){var i=e.call(this)||this,a;if(ir(t)||!t)a={next:t??void 0,error:n??void 0,complete:r??void 0};else{var o;i&&fr.useDeprecatedNextContext?(o=Object.create(t),o.unsubscribe=function(){return i.unsubscribe()},a={next:t.next&&Tr(t.next,o),error:t.error&&Tr(t.error,o),complete:t.complete&&Tr(t.complete,o)}):a=t}return i.destination=new Er(a),i}return t}(Cr);function Or(e){fr.useDeprecatedSynchronousErrorHandling?Sr(e):mr(e)}function kr(e){throw e}function Ar(e,t){var n=fr.onStoppedNotification;n&&pr.setTimeout(function(){return n(e,t)})}var jr={closed:!0,next:hr,error:kr,complete:hr},Mr=(function(){return typeof Symbol==`function`&&Symbol.observable||`@@observable`})();function Nr(e){return e}function Pr(e){return e.length===0?Nr:e.length===1?e[0]:function(t){return e.reduce(function(e,t){return t(e)},t)}}var Fr=function(){function e(e){e&&(this._subscribe=e)}return e.prototype.lift=function(t){var n=new e;return n.source=this,n.operator=t,n},e.prototype.subscribe=function(e,t,n){var r=this,i=Rr(e)?e:new Dr(e,t,n);return xr(function(){var e=r,t=e.operator,n=e.source;i.add(t?t.call(i,n):n?r._subscribe(i):r._trySubscribe(i))}),i},e.prototype._trySubscribe=function(e){try{return this._subscribe(e)}catch(t){e.error(t)}},e.prototype.forEach=function(e,t){var n=this;return t=Ir(t),new t(function(t,r){var i=new Dr({next:function(t){try{e(t)}catch(e){r(e),i.unsubscribe()}},error:r,complete:t});n.subscribe(i)})},e.prototype._subscribe=function(e){return this.source?.subscribe(e)},e.prototype[Mr]=function(){return this},e.prototype.pipe=function(){return Pr([...arguments])(this)},e.prototype.toPromise=function(e){var t=this;return e=Ir(e),new e(function(e,n){var r;t.subscribe(function(e){return r=e},function(e){return n(e)},function(){return e(r)})})},e.create=function(t){return new e(t)},e}();function Ir(e){return e??fr.Promise??Promise}function Lr(e){return e&&ir(e.next)&&ir(e.error)&&ir(e.complete)}function Rr(e){return e&&e instanceof Cr||Lr(e)&&ur(e)}function zr(e){return ir(e?.lift)}function Br(e){return function(t){if(zr(t))return t.lift(function(t){try{return e(t,this)}catch(e){this.error(e)}});throw TypeError(`Unable to lift unknown Observable type`)}}function Vr(e,t,n,r,i){return new Hr(e,t,n,r,i)}var Hr=function(e){Yn(t,e);function t(t,n,r,i,a,o){var s=e.call(this,t)||this;return s.onFinalize=a,s.shouldUnsubscribe=o,s._next=n?function(e){try{n(e)}catch(e){t.error(e)}}:e.prototype._next,s._error=i?function(e){try{i(e)}catch(e){t.error(e)}finally{this.unsubscribe()}}:e.prototype._error,s._complete=r?function(){try{r()}catch(e){t.error(e)}finally{this.unsubscribe()}}:e.prototype._complete,s}return t.prototype.unsubscribe=function(){var t;if(!this.shouldUnsubscribe||this.shouldUnsubscribe()){var n=this.closed;e.prototype.unsubscribe.call(this),!n&&((t=this.onFinalize)==null||t.call(this))}},t}(Cr),Ur=ar(function(e){return function(){e(this),this.name=`ObjectUnsubscribedError`,this.message=`object unsubscribed`}}),Wr=function(e){Yn(t,e);function t(){var t=e.call(this)||this;return t.closed=!1,t.currentObservers=null,t.observers=[],t.isStopped=!1,t.hasError=!1,t.thrownError=null,t}return t.prototype.lift=function(e){var t=new Gr(this,this);return t.operator=e,t},t.prototype._throwIfClosed=function(){if(this.closed)throw new Ur},t.prototype.next=function(e){var t=this;xr(function(){var n,r;if(t._throwIfClosed(),!t.isStopped){t.currentObservers||=Array.from(t.observers);try{for(var i=Qn(t.currentObservers),a=i.next();!a.done;a=i.next())a.value.next(e)}catch(e){n={error:e}}finally{try{a&&!a.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}}})},t.prototype.error=function(e){var t=this;xr(function(){if(t._throwIfClosed(),!t.isStopped){t.hasError=t.isStopped=!0,t.thrownError=e;for(var n=t.observers;n.length;)n.shift().error(e)}})},t.prototype.complete=function(){var e=this;xr(function(){if(e._throwIfClosed(),!e.isStopped){e.isStopped=!0;for(var t=e.observers;t.length;)t.shift().complete()}})},t.prototype.unsubscribe=function(){this.isStopped=this.closed=!0,this.observers=this.currentObservers=null},Object.defineProperty(t.prototype,"observed",{get:function(){return this.observers?.length>0},enumerable:!1,configurable:!0}),t.prototype._trySubscribe=function(t){return this._throwIfClosed(),e.prototype._trySubscribe.call(this,t)},t.prototype._subscribe=function(e){return this._throwIfClosed(),this._checkFinalizedStatuses(e),this._innerSubscribe(e)},t.prototype._innerSubscribe=function(e){var t=this,n=this,r=n.hasError,i=n.isStopped,a=n.observers;return r||i?lr:(this.currentObservers=null,a.push(e),new cr(function(){t.currentObservers=null,sr(a,e)}))},t.prototype._checkFinalizedStatuses=function(e){var t=this,n=t.hasError,r=t.thrownError,i=t.isStopped;n?e.error(r):i&&e.complete()},t.prototype.asObservable=function(){var e=new Fr;return e.source=this,e},t.create=function(e,t){return new Gr(e,t)},t}(Fr),Gr=function(e){Yn(t,e);function t(t,n){var r=e.call(this)||this;return r.destination=t,r.source=n,r}return t.prototype.next=function(e){var t,n;(n=(t=this.destination)?.next)==null||n.call(t,e)},t.prototype.error=function(e){var t,n;(n=(t=this.destination)?.error)==null||n.call(t,e)},t.prototype.complete=function(){var e,t;(t=(e=this.destination)?.complete)==null||t.call(e)},t.prototype._subscribe=function(e){return this.source?.subscribe(e)??lr},t}(Wr),Kr=function(e){Yn(t,e);function t(t){var n=e.call(this)||this;return n._value=t,n}return Object.defineProperty(t.prototype,"value",{get:function(){return this.getValue()},enumerable:!1,configurable:!0}),t.prototype._subscribe=function(t){var n=e.prototype._subscribe.call(this,t);return!n.closed&&t.next(this._value),n},t.prototype.getValue=function(){var e=this,t=e.hasError,n=e.thrownError,r=e._value;if(t)throw n;return this._throwIfClosed(),r},t.prototype.next=function(t){e.prototype.next.call(this,this._value=t)},t}(Wr);function qr(e){return e[e.length-1]}function Jr(e){return ir(qr(e))?e.pop():void 0}var Yr=(function(e){return e&&typeof e.length==`number`&&typeof e!=`function`});function Xr(e){return ir(e?.then)}function Zr(e){return ir(e[Mr])}function Qr(e){return Symbol.asyncIterator&&ir(e?.[Symbol.asyncIterator])}function $r(e){return TypeError(`You provided `+(typeof e==`object`&&e?`an invalid object`:`'`+e+`'`)+` where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.`)}function ei(){return typeof Symbol!=`function`||!Symbol.iterator?`@@iterator`:Symbol.iterator}var ti=ei();function ni(e){return ir(e?.[ti])}function ri(e){return nr(this,arguments,function(){var t,n,r,i;return Zn(this,function(a){switch(a.label){case 0:t=e.getReader(),a.label=1;case 1:a.trys.push([1,,9,10]),a.label=2;case 2:return[4,tr(t.read())];case 3:return n=a.sent(),r=n.value,i=n.done,i?[4,tr(void 0)]:[3,5];case 4:return[2,a.sent()];case 5:return[4,tr(r)];case 6:return[4,a.sent()];case 7:return a.sent(),[3,2];case 8:return[3,10];case 9:return t.releaseLock(),[7];case 10:return[2]}})})}function ii(e){return ir(e?.getReader)}function ai(e){if(e instanceof Fr)return e;if(e!=null){if(Zr(e))return gee(e);if(Yr(e))return _ee(e);if(Xr(e))return vee(e);if(Qr(e))return oi(e);if(ni(e))return yee(e);if(ii(e))return bee(e)}throw $r(e)}function gee(e){return new Fr(function(t){var n=e[Mr]();if(ir(n.subscribe))return n.subscribe(t);throw TypeError(`Provided object does not correctly implement Symbol.observable`)})}function _ee(e){return new Fr(function(t){for(var n=0;n=0?n.slice(0,r):n}function _i(e,t){return e?t?`${e} ${t}`:e:t||``}var Hee=hi({__forward_ref__:hi});function vi(e){return e.__forward_ref__=vi,e}function yi(e){return bi(e)?e():e}function bi(e){return typeof e==`function`&&Object.hasOwn(e,Hee)&&e.__forward_ref__===vi}function xi(e){return{token:e.token,providedIn:e.providedIn||null,factory:e.factory,value:void 0}}function Si(e){return Ci(e,Ei)}function Ci(e,t){return Object.hasOwn(e,t)&&e[t]||null}function wi(e){return(e?.[Ei]??null)||null}function Ti(e){return e&&Object.hasOwn(e,Di)?e[Di]:null}var Ei=hi({ɵprov:hi}),Di=hi({ɵinj:hi}),Oi=class{_desc;ngMetadataName=`InjectionToken`;ɵprov;constructor(e,t){this._desc=e,this.ɵprov=void 0,typeof t==`number`?this.__NG_ELEMENT_ID__=t:t!==void 0&&(this.ɵprov=xi({token:this,providedIn:t.providedIn||`root`,factory:t.factory}))}get multi(){return this}toString(){return`InjectionToken ${this._desc}`}};function ki(e){return e&&!!e.ɵproviders}var Ai=hi({ɵcmp:hi}),ji=hi({ɵdir:hi}),Mi=hi({ɵpipe:hi}),Ni=hi({ɵfac:hi}),Pi=hi({__NG_ELEMENT_ID__:hi}),Fi=hi({__NG_ENV_ID__:hi});function Ii(e){return zi(e,`@Component`),e[Ai]||null}function Li(e){return zi(e,`@Directive`),e[ji]||null}function Ri(e){return zi(e,`@Pipe`),e[Mi]||null}function zi(e,t){if(e==null)throw new pi(-919,!1)}function Bi(e){return typeof e==`string`?e:e==null?``:String(e)}var Vi=hi({ngErrorCode:hi}),Hi=hi({ngErrorMessage:hi}),Ui=hi({ngTokenPath:hi});function Wi(e,t){return Ki(``,-200,t)}function Gi(e,t){throw new pi(-201,!1)}function Ki(e,t,n){let r=new pi(t,e);return r[Vi]=t,r[Hi]=e,n&&(r[Ui]=n),r}function qi(e){return e[Vi]}var Ji;function Yi(){return Ji}function Xi(e){let t=Ji;return Ji=e,t}function Zi(e,t,n){let r=Si(e);if(r&&r.providedIn==`root`)return r.value===void 0?r.value=r.factory():r.value;if(n&8)return null;if(t!==void 0)return t;Gi(e,``)}var Qi=globalThis,$i={},ea=`__NG_DI_FLAG__`,ta=class{injector;constructor(e){this.injector=e}retrieve(e,t){let n=ia(t)||0;try{return this.injector.get(e,n&8?null:$i,n)}catch(e){if(Hn(e))return e;throw e}}};function na(e,t=0){let n=zn();if(n===void 0)throw new pi(-203,!1);if(n===null)return Zi(e,void 0,t);{let r=aa(t),i=n.retrieve(e,r);if(Hn(i)){if(r.optional)return null;throw i}return i}}function ra(e,t=0){return(Yi()||na)(yi(e),t)}function x(e,t){return ra(e,ia(t))}function ia(e){return e===void 0||typeof e==`number`?e:0|(e.optional&&8)|(e.host&&1)|(e.self&&2)|(e.skipSelf&&4)}function aa(e){return{optional:!!(e&8),host:!!(e&1),self:!!(e&2),skipSelf:!!(e&4)}}function oa(e){let t=[];for(let n=0;nArray.isArray(e)?da(e,t):t(e))}function fa(e,t,n){t>=e.length?e.push(n):e.splice(t,0,n)}function pa(e,t){return t>=e.length-1?e.pop():e.splice(t,1)[0]}function ma(e,t){let n=[];for(let r=0;rt;){let t=i-2;e[i]=e[t],i--}e[t]=n,e[t+1]=r}}function ga(e,t,n){let r=va(e,t);return r>=0?e[r|1]=n:(r=~r,ha(e,r,t,n)),r}function _a(e,t){let n=va(e,t);if(n>=0)return e[n|1]}function va(e,t){return ya(e,t,1)}function ya(e,t,n){let r=0,i=e.length>>n;for(;i!==r;){let a=r+(i-r>>1),o=e[a<t?i=a:r=a+1}return~(i<{n.push(e)};return da(t,e=>{let t=e;ka(t,a,[],r)&&(i||=[],i.push(t))}),i!==void 0&&Oa(i,a),n}function Oa(e,t){for(let n=0;n{t(e,r)})}}function ka(e,t,n,r){if(e=yi(e),!e)return!1;let i=null,a=Ti(e),o=!a&&Ii(e);if(!a&&!o){let t=e.ngModule;if(a=Ti(t),a)i=t;else return!1}else if(o&&!o.standalone)return!1;else i=e;let s=r.has(i);if(o){if(s)return!1;if(r.add(i),o.dependencies){let e=typeof o.dependencies==`function`?o.dependencies():o.dependencies;for(let i of e)ka(i,t,n,r)}}else if(a){if(a.imports!=null&&!s){r.add(i);let e;try{da(a.imports,i=>{ka(i,t,n,r)&&(e||=[],e.push(i))})}finally{}e!==void 0&&Oa(e,t)}if(!s){let e=ca(i)||(()=>new i);t({provide:i,useFactory:e,deps:xa},i),t({provide:wa,useValue:i,multi:!0},i),t({provide:Sa,useValue:()=>ra(i),multi:!0},i)}let o=a.providers;if(o!=null&&!s){let n=e;Aa(o,e=>{t(e,n)})}}else return!1;return i!==e&&e.providers!==void 0}function Aa(e,t){for(let n of e)ki(n)&&(n=n.ɵproviders),Array.isArray(n)?Aa(n,t):t(n)}var ja=hi({provide:String,useValue:hi});function Ma(e){return typeof e==`object`&&!!e&&ja in e}function Na(e){return!!(e&&e.useExisting)}function Pa(e){return!!(e&&e.useFactory)}function Fa(e){return typeof e==`function`}function Ia(e){return!!e.useClass}var La=new Oi(``),Ra={},za={},Ba=void 0;function Va(){return Ba===void 0&&(Ba=new Ta),Ba}var Ha=class{},Ua=class extends Ha{parent;source;scopes;records=new Map;_ngOnDestroyHooks=new Set;_onDestroyHooks=[];get destroyed(){return this._destroyed}_destroyed=!1;injectorDefTypes;constructor(e,t,n,r){super(),this.parent=t,this.source=n,this.scopes=r,$a(e,e=>this.processProvider(e)),this.records.set(Ca,Ya(void 0,this)),r.has(`environment`)&&this.records.set(Ha,Ya(void 0,this));let i=this.records.get(La);i!=null&&typeof i.value==`string`&&this.scopes.add(i.value),this.injectorDefTypes=new Set(this.get(wa,xa,{self:!0}))}retrieve(e,t){let n=ia(t)||0;try{return this.get(e,$i,n)}catch(e){if(Hn(e))return e;throw e}}destroy(){Ja(this),this._destroyed=!0;let e=an(null);try{for(let e of this._ngOnDestroyHooks)e.ngOnDestroy();let e=this._onDestroyHooks;this._onDestroyHooks=[];for(let t of e)t()}finally{this.records.clear(),this._ngOnDestroyHooks.clear(),this.injectorDefTypes.clear(),an(e)}}onDestroy(e){return Ja(this),this._onDestroyHooks.push(e),()=>this.removeOnDestroy(e)}runInContext(e){Ja(this);let t=Bn(this),n=Xi(void 0);try{return e()}finally{Bn(t),Xi(n)}}get(e,t=$i,n){if(Ja(this),Object.hasOwn(e,Fi))return e[Fi](this);let r=ia(n),i=Bn(this),a=Xi(void 0);try{if(!(r&4)){let t=this.records.get(e);if(t===void 0){let n=Qa(e)&&Si(e);t=n&&this.injectableDefInScope(n)?Ya(Wa(e),Ra):null,this.records.set(e,t)}if(t!=null)return this.hydrate(e,t,r)}let n=r&2?Va():this.parent;return t=r&8&&t===$i?null:t,n.get(e,t)}catch(e){let t=qi(e);throw t===-200||t===-201?new pi(t,null):e}finally{Xi(a),Bn(i)}}resolveInjectorInitializers(){let e=an(null),t=Bn(this),n=Xi(void 0);try{let e=this.get(Sa,xa,{self:!0});for(let t of e)t()}finally{Bn(t),Xi(n),an(e)}}toString(){return`R3Injector[...]`}processProvider(e){e=yi(e);let t=Fa(e)?e:yi(e&&e.provide),n=Ka(e);if(!Fa(e)&&e.multi===!0){let n=this.records.get(t);n||(n=Ya(void 0,Ra,!0),n.factory=()=>oa(n.multi),this.records.set(t,n)),t=e,n.multi.push(e)}this.records.set(t,n)}hydrate(e,t,n){let r=an(null);try{if(t.value===za)throw Wi(``);return t.value===Ra&&(t.value=za,t.value=t.factory(void 0,n)),typeof t.value==`object`&&t.value&&Za(t.value)&&this._ngOnDestroyHooks.add(t.value),t.value}finally{an(r)}}injectableDefInScope(e){if(!e.providedIn)return!1;let t=yi(e.providedIn);return typeof t==`string`?t===`any`||this.scopes.has(t):this.injectorDefTypes.has(t)}removeOnDestroy(e){let t=this._onDestroyHooks.indexOf(e);t!==-1&&this._onDestroyHooks.splice(t,1)}};function Wa(e){let t=Si(e),n=t===null?ca(e):t.factory;if(n!==null)return n;if(e instanceof Oi)throw new pi(-204,!1);if(e instanceof Function)return Ga(e);throw new pi(-204,!1)}function Ga(e){if(e.length>0)throw new pi(-204,!1);let t=wi(e);return t===null?()=>new e:()=>t.factory(e)}function Ka(e){return Ma(e)?Ya(void 0,e.useValue):Ya(qa(e),Ra)}function qa(e,t,n){let r;if(Fa(e)){let t=yi(e);return ca(t)||Wa(t)}if(Ma(e))r=()=>yi(e.useValue);else if(Pa(e))r=()=>e.useFactory(...oa(e.deps||[]));else if(Na(e))r=(t,n)=>ra(yi(e.useExisting),n!==void 0&&n&8?8:void 0);else{let t=yi(e&&(e.useClass||e.provide));if(Xa(e))r=()=>new t(...oa(e.deps));else return ca(t)||Wa(t)}return r}function Ja(e){if(e.destroyed)throw new pi(-205,!1)}function Ya(e,t,n=!1){return{factory:e,value:t,multi:n?[]:void 0}}function Xa(e){return!!e.deps}function Za(e){return typeof e==`object`&&!!e&&typeof e.ngOnDestroy==`function`}function Qa(e){return typeof e==`function`||typeof e==`object`&&e.ngMetadataName===`InjectionToken`}function $a(e,t){for(let n of e)Array.isArray(n)?$a(n,t):n&&ki(n)?$a(n.ɵproviders,t):t(n)}function eo(e,t){let n;e instanceof Ua?(Ja(e),n=e):n=new ta(e);let r=Bn(n),i=Xi(void 0);try{return t()}finally{Bn(r),Xi(i)}}function to(){return Yi()!==void 0||zn()!=null}var no=1;function ro(e){return Array.isArray(e)&&typeof e[no]==`object`}function io(e){return Array.isArray(e)&&e[no]===!0}function ao(e){return!!(e.flags&4)}function oo(e){return e.componentOffset>-1}function so(e){return(e.flags&1)==1}function co(e){return!!e.template}function lo(e){return!!(e[2]&512)}function uo(e){return(e[2]&256)==256}var fo=(function(e){return e[e.NONE=0]=`NONE`,e[e.HTML=1]=`HTML`,e[e.STYLE=2]=`STYLE`,e[e.SCRIPT=3]=`SCRIPT`,e[e.URL=4]=`URL`,e[e.RESOURCE_URL=5]=`RESOURCE_URL`,e[e.ATTRIBUTE_NO_BINDING=6]=`ATTRIBUTE_NO_BINDING`,e})(fo||{}),po=`math`;function mo(e){for(;Array.isArray(e);)e=e[0];return e}function ho(e,t){return mo(t[e])}function go(e,t){return mo(t[e.index])}function _o(e,t){return e.data[t]}function vo(e,t){return e[t]}function yo(e,t,n,r){n>=e.data.length&&(e.data[n]=null,e.blueprint[n]=null),t[n]=r}function bo(e,t){let n=t[e];return ro(n)?n:n[0]}function xo(e){return(e[2]&128)==128}function So(e){return io(e[3])}function Co(e,t){return t==null?null:e[t]}function wo(e){e[17]=0}function To(e){e[2]&1024||(e[2]|=1024,xo(e)&&ko(e))}function Eo(e,t){for(;e>0;)t=t[14],e--;return t}function Do(e){return!!(e[2]&9216||e[24]?.dirty)}function Oo(e){e[10].changeDetectionScheduler?.notify(8),e[2]&64&&(e[2]|=1024),Do(e)&&ko(e)}function ko(e){e[10].changeDetectionScheduler?.notify(0);let t=jo(e);for(;t!==null&&!(t[2]&8192||(t[2]|=8192,!xo(t)));)t=jo(t)}function Ao(e,t){if(uo(e))throw new pi(911,!1);e[21]===null&&(e[21]=[]),e[21].push(t)}function Uee(e,t){if(e[21]===null)return;let n=e[21].indexOf(t);n!==-1&&e[21].splice(n,1)}function jo(e){let t=e[3];return io(t)?t[3]:t}function Mo(e){return e[7]??=[]}function No(e){return e.cleanup??=[]}function Wee(e,t,n,r){let i=Mo(t);i.push(n),e.firstCreatePass&&No(e).push(r,i.length-1)}var Po={lFrame:os(null),bindingsEnabled:!0,skipHydrationRootTNode:null},Fo=!1;function Gee(){return Po.lFrame.elementDepthCount}function Kee(){Po.lFrame.elementDepthCount++}function Io(){Po.lFrame.elementDepthCount--}function Lo(){return Po.bindingsEnabled}function Ro(){return Po.skipHydrationRootTNode!==null}function zo(e){return Po.skipHydrationRootTNode===e}function Bo(){Po.skipHydrationRootTNode=null}function Vo(){return Po.lFrame.lView}function Ho(){return Po.lFrame.tView}function S(e){return Po.lFrame.contextLView=e,e[8]}function C(e){return Po.lFrame.contextLView=null,e}function Uo(){let e=Wo();for(;e!==null&&e.type===64;)e=e.parent;return e}function Wo(){return Po.lFrame.currentTNode}function qee(){let e=Po.lFrame,t=e.currentTNode;return e.isParent?t:t.parent}function Go(e,t){let n=Po.lFrame;n.currentTNode=e,n.isParent=t}function Ko(){return Po.lFrame.isParent}function qo(){Po.lFrame.isParent=!1}function Jo(){return Po.lFrame.contextLView}function Yo(){return Fo}function Xo(e){let t=Fo;return Fo=e,t}function Zo(){let e=Po.lFrame,t=e.bindingRootIndex;return t===-1&&(t=e.bindingRootIndex=e.tView.bindingStartIndex),t}function Qo(){return Po.lFrame.bindingIndex}function Jee(e){return Po.lFrame.bindingIndex=e}function $o(){return Po.lFrame.bindingIndex++}function es(e){let t=Po.lFrame,n=t.bindingIndex;return t.bindingIndex+=e,n}function Yee(){return Po.lFrame.inI18n}function Xee(e,t){let n=Po.lFrame;n.bindingIndex=n.bindingRootIndex=e,ts(t)}function Zee(){return Po.lFrame.currentDirectiveIndex}function ts(e){Po.lFrame.currentDirectiveIndex=e}function Qee(e){let t=Po.lFrame.currentDirectiveIndex;return t===-1?null:e[t]}function $ee(){return Po.lFrame.currentQueryIndex}function ns(e){Po.lFrame.currentQueryIndex=e}function ete(e){let t=e[1];return t.type===2?t.declTNode:t.type===1?e[5]:null}function rs(e,t,n){if(n&4){let r=t,i=e;for(;r=r.parent,r===null&&!(n&1)&&(r=ete(i),!(r===null||(i=i[14],r.type&10))););if(r===null)return!1;t=r,e=i}let r=Po.lFrame=as();return r.currentTNode=t,r.lView=e,!0}function is(e){let t=as(),n=e[1];Po.lFrame=t,t.currentTNode=n.firstChild,t.lView=e,t.tView=n,t.contextLView=e,t.bindingIndex=n.bindingStartIndex,t.inI18n=!1}function as(){let e=Po.lFrame,t=e===null?null:e.child;return t===null?os(e):t}function os(e){let t={currentTNode:null,isParent:!0,lView:null,tView:null,selectedIndex:-1,contextLView:null,elementDepthCount:0,currentNamespace:null,currentDirectiveIndex:-1,bindingRootIndex:-1,bindingIndex:-1,currentQueryIndex:0,parent:e,child:null,inI18n:!1};return e!==null&&(e.child=t),t}function ss(){let e=Po.lFrame;return Po.lFrame=e.parent,e.currentTNode=null,e.lView=null,e}var cs=ss;function ls(){let e=ss();e.isParent=!0,e.tView=null,e.selectedIndex=-1,e.contextLView=null,e.elementDepthCount=0,e.currentDirectiveIndex=-1,e.currentNamespace=null,e.bindingRootIndex=-1,e.bindingIndex=-1,e.currentQueryIndex=0}function tte(e){return(Po.lFrame.contextLView=Eo(e,Po.lFrame.contextLView))[8]}function us(){return Po.lFrame.selectedIndex}function ds(e){Po.lFrame.selectedIndex=e}function fs(){let e=Po.lFrame;return _o(e.tView,e.selectedIndex)}function w(){Po.lFrame.currentNamespace=`svg`}function ps(){ms()}function ms(){Po.lFrame.currentNamespace=null}function hs(){return Po.lFrame.currentNamespace}var gs=!0;function _s(){return gs}function vs(e){gs=e}function ys(e,t=null,n=null,r){let i=bs(e,t,n,r);return i.resolveInjectorInitializers(),i}function bs(e,t=null,n=null,r,i=new Set){return new Ua([n||xa,Ea(e)],t||Va(),null,i)}var xs=class e{static THROW_IF_NOT_FOUND=$i;static NULL=new Ta;static create(e,t){if(Array.isArray(e))return ys({name:``},t,e,``);{let t=e.name??``;return ys({name:t},e.parent,e.providers,t)}}static ɵprov=xi({token:e,providedIn:`any`,factory:()=>ra(Ca)});static __NG_ELEMENT_ID__=-1},Ss=new Oi(``),Cs=class{static __NG_ELEMENT_ID__=Ts;static __NG_ENV_ID__=e=>e},ws=class extends Cs{_lView;constructor(e){super(),this._lView=e}get destroyed(){return uo(this._lView)}onDestroy(e){let t=this._lView;return Ao(t,e),()=>Uee(t,e)}};function Ts(){return new ws(Vo())}var Es=new Oi(``),Ds=(()=>{class e{taskId=0;pendingTasks=new Set;destroyed=!1;pendingTask=new Kr(!1);debugTaskTracker=x(Es,{optional:!0});get hasPendingTasks(){return!this.destroyed&&this.pendingTask.value}get hasPendingTasksObservable(){return this.destroyed?new Fr(e=>{e.next(!1),e.complete()}):this.pendingTask}add(){!this.hasPendingTasks&&!this.destroyed&&this.pendingTask.next(!0);let e=this.taskId++;return this.pendingTasks.add(e),this.debugTaskTracker?.add(e),e}has(e){return this.pendingTasks.has(e)}remove(e){this.pendingTasks.delete(e),this.debugTaskTracker?.remove(e),this.pendingTasks.size===0&&this.hasPendingTasks&&this.pendingTask.next(!1)}ngOnDestroy(){this.pendingTasks.clear(),this.hasPendingTasks&&this.pendingTask.next(!1),this.destroyed=!0,this.pendingTask.unsubscribe()}static ɵprov=xi({token:e,providedIn:`root`,factory:()=>new e})}return e})(),Os=class extends Wr{__isAsync;destroyRef=void 0;pendingTasks=void 0;constructor(e=!1){super(),this.__isAsync=e,to()&&(this.destroyRef=x(Cs,{optional:!0})??void 0,this.pendingTasks=x(Ds,{optional:!0})??void 0)}emit(e){let t=an(null);try{super.next(e)}finally{an(t)}}subscribe(e,t,n){let r=e,i=t||(()=>null),a=n;if(e&&typeof e==`object`){let t=e;r=t.next?.bind(t),i=t.error?.bind(t),a=t.complete?.bind(t)}this.__isAsync&&(i=this.wrapInTimeout(i),r&&=this.wrapInTimeout(r),a&&=this.wrapInTimeout(a));let o=super.subscribe({next:r,error:i,complete:a});return e instanceof cr&&e.add(o),o}wrapInTimeout(e){return t=>{let n=this.pendingTasks?.add();setTimeout(()=>{try{e(t)}finally{n!==void 0&&this.pendingTasks?.remove(n)}})}}};function ks(...e){}function As(e){let t,n;function r(){e=ks;try{n!==void 0&&typeof cancelAnimationFrame==`function`&&cancelAnimationFrame(n),t!==void 0&&clearTimeout(t)}catch{}}return t=setTimeout(()=>{e(),r()}),typeof requestAnimationFrame==`function`&&(n=requestAnimationFrame(()=>{e(),r()})),()=>r()}function js(e){return queueMicrotask(()=>e()),()=>{e=ks}}var Ms=`isAngularZone`,Ns=`isAngularZone_ID`,Ps=0,Fs=class e{hasPendingMacrotasks=!1;hasPendingMicrotasks=!1;isStable=!0;onUnstable=new Os(!1);onMicrotaskEmpty=new Os(!1);onStable=new Os(!1);onError=new Os(!1);constructor(e){let{enableLongStackTrace:t=!1,shouldCoalesceEventChangeDetection:n=!1,shouldCoalesceRunChangeDetection:r=!1,scheduleInRootZone:i=!1}=e;if(typeof Zone>`u`)throw new pi(908,!1);Zone.assertZonePatched();let a=this;a._nesting=0,a._outer=a._inner=Zone.current,Zone.TaskTrackingZoneSpec&&(a._inner=a._inner.fork(new Zone.TaskTrackingZoneSpec)),t&&Zone.longStackTraceZoneSpec&&(a._inner=a._inner.fork(Zone.longStackTraceZoneSpec)),a.shouldCoalesceEventChangeDetection=!r&&n,a.shouldCoalesceRunChangeDetection=r,a.callbackScheduled=!1,a.scheduleInRootZone=i,zs(a)}static isInAngularZone(){return typeof Zone<`u`&&Zone.current.get(Ms)===!0}static assertInAngularZone(){if(!e.isInAngularZone())throw new pi(909,!1)}static assertNotInAngularZone(){if(e.isInAngularZone())throw new pi(909,!1)}run(e,t,n){return this._inner.run(e,t,n)}runTask(e,t,n,r){let i=this._inner,a=i.scheduleEventTask(`NgZoneEvent: `+r,e,Is,ks,ks);try{return i.runTask(a,t,n)}finally{i.cancelTask(a)}}runGuarded(e,t,n){return this._inner.runGuarded(e,t,n)}runOutsideAngular(e){return this._outer.run(e)}},Is={};function Ls(e){if(e._nesting==0&&!e.hasPendingMicrotasks&&!e.isStable)try{e._nesting++,e.onMicrotaskEmpty.emit(null)}finally{if(e._nesting--,!e.hasPendingMicrotasks)try{e.runOutsideAngular(()=>e.onStable.emit(null))}finally{e.isStable=!0}}}function Rs(e){if(e.isCheckStableRunning||e.callbackScheduled)return;e.callbackScheduled=!0;function t(){As(()=>{e.callbackScheduled=!1,Bs(e),e.isCheckStableRunning=!0,Ls(e),e.isCheckStableRunning=!1})}e.scheduleInRootZone?Zone.root.run(()=>{t()}):e._outer.run(()=>{t()}),Bs(e)}function zs(e){let t=()=>{Rs(e)},n=Ps++;e._inner=e._inner.fork({name:`angular`,properties:{[Ms]:!0,[Ns]:n,[Ns+n]:!0},onInvokeTask:(n,r,i,a,o,s)=>{if(Ws(s))return n.invokeTask(i,a,o,s);try{return Vs(e),n.invokeTask(i,a,o,s)}finally{(e.shouldCoalesceEventChangeDetection&&a.type===`eventTask`||e.shouldCoalesceRunChangeDetection)&&t(),Hs(e)}},onInvoke:(n,r,i,a,o,s,c)=>{try{return Vs(e),n.invoke(i,a,o,s,c)}finally{e.shouldCoalesceRunChangeDetection&&!e.callbackScheduled&&!Gs(s)&&t(),Hs(e)}},onHasTask:(t,n,r,i)=>{t.hasTask(r,i),n===r&&(i.change==`microTask`?(e._hasPendingMicrotasks=i.microTask,Bs(e),Ls(e)):i.change==`macroTask`&&(e.hasPendingMacrotasks=i.macroTask))},onHandleError:(t,n,r,i)=>(t.handleError(r,i),e.runOutsideAngular(()=>e.onError.emit(i)),!1)})}function Bs(e){e.hasPendingMicrotasks=!!(e._hasPendingMicrotasks||(e.shouldCoalesceEventChangeDetection||e.shouldCoalesceRunChangeDetection)&&e.callbackScheduled===!0)}function Vs(e){e._nesting++,e.isStable&&(e.isStable=!1,e.onUnstable.emit(null))}function Hs(e){e._nesting--,Ls(e)}var Us=class{hasPendingMicrotasks=!1;hasPendingMacrotasks=!1;isStable=!0;onUnstable=new Os;onMicrotaskEmpty=new Os;onStable=new Os;onError=new Os;run(e,t,n){return e.apply(t,n)}runGuarded(e,t,n){return e.apply(t,n)}runOutsideAngular(e){return e()}runTask(e,t,n,r){return e.apply(t,n)}};function Ws(e){return Ks(e,`__ignore_ng_zone__`)}function Gs(e){return Ks(e,`__scheduler_tick__`)}function Ks(e,t){return!Array.isArray(e)||e.length!==1?!1:e[0]?.data?.[t]===!0}var qs=class{_console=console;handleError(e){this._console.error(`ERROR`,e)}},Js=new Oi(``,{factory:()=>{let e=x(Fs),t=x(Ha),n;return r=>{e.runOutsideAngular(()=>{t.destroyed&&!n?setTimeout(()=>{throw r}):(n??=t.get(qs),n.handleError(r))})}}}),Ys={provide:Sa,useValue:()=>{x(qs,{optional:!0})},multi:!0};function T(e,t){let[n,r,i]=mee(e,t?.equal),a=n;return a[rn],a.set=r,a.update=i,a.asReadonly=Xs.bind(a),a}function Xs(){let e=this[rn];if(e.readonlyFn===void 0){let t=()=>this();t[rn]=e,e.readonlyFn=t}return e.readonlyFn}var Zs=new Oi(``,{factory:()=>Qs}),Qs=`ng`,$s=new Oi(``),ec=new Oi(``,{providedIn:`platform`,factory:()=>`unknown`}),tc=new Oi(``,{factory:()=>x(Ss).body?.querySelector(`[ngCspNonce]`)?.getAttribute(`ngCspNonce`)||null}),nc=(()=>{class e{view;node;constructor(e,t){this.view=e,this.node=t}static __NG_ELEMENT_ID__=rc}return e})();function rc(){return new nc(Vo(),Uo())}var ic=class{},ac=new Oi(``,{factory:()=>!0}),oc=new Oi(``),sc=(()=>{class e{static ɵprov=xi({token:e,providedIn:`root`,factory:()=>new cc})}return e})(),cc=class{dirtyEffectCount=0;queues=new Map;add(e){this.enqueue(e),this.schedule(e)}schedule(e){e.dirty&&this.dirtyEffectCount++}remove(e){let t=e.zone,n=this.queues.get(t);n.has(e)&&(n.delete(e),e.dirty&&this.dirtyEffectCount--)}enqueue(e){let t=e.zone;this.queues.has(t)||this.queues.set(t,new Set);let n=this.queues.get(t);n.has(e)||n.add(e)}flush(){for(;this.dirtyEffectCount>0;){let e=!1;for(let[t,n]of this.queues)e||=t===null?this.flushQueue(n):t.run(()=>this.flushQueue(n));e||(this.dirtyEffectCount=0)}}flushQueue(e){let t=!1;for(let n of e)n.dirty&&(this.dirtyEffectCount--,t=!0,n.run());return t}},lc=class{[rn];constructor(e){this[rn]=e}destroy(){this[rn].destroy()}};function E(e,t){let n=t?.injector??x(xs),r=t?.manualCleanup===!0?null:n.get(Cs),i,a=n.get(nc,null,{optional:!0}),o=n.get(ic);return a===null?i=mc(e,n.get(sc),o):(i=pc(a.view,o,e),r instanceof ws&&r._lView===a.view&&(r=null)),i.injector=n,r!==null&&(i.onDestroyFns=[r.onDestroy(()=>i.destroy())]),new lc(i)}var uc={...In,cleanupFns:void 0,zone:null,onDestroyFns:null,run(){let e=Xo(!1);try{Ln(this)}finally{Xo(e)}},cleanup(){if(!this.cleanupFns?.length)return;let e=an(null);try{for(;this.cleanupFns.length;)this.cleanupFns.pop()()}finally{this.cleanupFns=[],an(e)}}},dc={...uc,consumerMarkedDirty(){this.scheduler.schedule(this),this.notifier.notify(12)},destroy(){if(bn(this),this.onDestroyFns!==null)for(let e of this.onDestroyFns)e();this.cleanup(),this.scheduler.remove(this)}},fc={...uc,consumerMarkedDirty(){this.view[2]|=8192,ko(this.view),this.notifier.notify(13)},destroy(){if(bn(this),this.onDestroyFns!==null)for(let e of this.onDestroyFns)e();this.cleanup(),this.view[23]?.delete(this)}};function pc(e,t,n){let r=Object.create(fc);return r.view=e,r.zone=typeof Zone<`u`?Zone.current:null,r.notifier=t,r.fn=hc(r,n),e[23]??=new Set,e[23].add(r),r.consumerMarkedDirty(r),r}function mc(e,t,n){let r=Object.create(dc);return r.fn=hc(r,e),r.scheduler=t,r.notifier=n,r.zone=typeof Zone<`u`?Zone.current:null,r.scheduler.add(r),r.notifier.notify(12),r}function hc(e,t){return()=>{t(t=>(e.cleanupFns??=[]).push(t))}}function gc(e){return typeof e==`function`&&e[rn]!==void 0}function _c(e){return gc(e)&&typeof e.set==`function`}var vc=Symbol(`InputSignalNode#UNSET`),yc={...Pn,transformFn:void 0,applyValueToInputSignal(e,t){Mn(e,t)}};function bc(e){return{toString:e}.toString()}var xc=(function(e){return e[e.TemplateCreateStart=0]=`TemplateCreateStart`,e[e.TemplateCreateEnd=1]=`TemplateCreateEnd`,e[e.TemplateUpdateStart=2]=`TemplateUpdateStart`,e[e.TemplateUpdateEnd=3]=`TemplateUpdateEnd`,e[e.LifecycleHookStart=4]=`LifecycleHookStart`,e[e.LifecycleHookEnd=5]=`LifecycleHookEnd`,e[e.OutputStart=6]=`OutputStart`,e[e.OutputEnd=7]=`OutputEnd`,e[e.BootstrapApplicationStart=8]=`BootstrapApplicationStart`,e[e.BootstrapApplicationEnd=9]=`BootstrapApplicationEnd`,e[e.BootstrapComponentStart=10]=`BootstrapComponentStart`,e[e.BootstrapComponentEnd=11]=`BootstrapComponentEnd`,e[e.ChangeDetectionStart=12]=`ChangeDetectionStart`,e[e.ChangeDetectionEnd=13]=`ChangeDetectionEnd`,e[e.ChangeDetectionSyncStart=14]=`ChangeDetectionSyncStart`,e[e.ChangeDetectionSyncEnd=15]=`ChangeDetectionSyncEnd`,e[e.AfterRenderHooksStart=16]=`AfterRenderHooksStart`,e[e.AfterRenderHooksEnd=17]=`AfterRenderHooksEnd`,e[e.ComponentStart=18]=`ComponentStart`,e[e.ComponentEnd=19]=`ComponentEnd`,e[e.DeferBlockStateStart=20]=`DeferBlockStateStart`,e[e.DeferBlockStateEnd=21]=`DeferBlockStateEnd`,e[e.DynamicComponentStart=22]=`DynamicComponentStart`,e[e.DynamicComponentEnd=23]=`DynamicComponentEnd`,e[e.HostBindingsUpdateStart=24]=`HostBindingsUpdateStart`,e[e.HostBindingsUpdateEnd=25]=`HostBindingsUpdateEnd`,e})(xc||{}),Sc=class{previousValue;currentValue;firstChange;constructor(e,t,n){this.previousValue=e,this.currentValue=t,this.firstChange=n}isFirstChange(){return this.firstChange}};function Cc(e,t,n,r){t===null?e[n]=r:t.applyValueToInputSignal(t,r)}var wc=null,Tc=(()=>{wc=Dc;let e=()=>Dc;return e.ngInherit=!0,e})();function Ec(){return wc}function Dc(e){return e.type.prototype.ngOnChanges&&(e.setInput=kc),Oc}function Oc(){let e=jc(this),t=e?.current;if(t){let n=e.previous;if(n===ba)e.previous=t;else for(let e in t)n[e]=t[e];e.current=null,this.ngOnChanges(t)}}function kc(e,t,n,r,i){let a=this.declaredInputs[r],o=jc(e)||Mc(e,{previous:ba,current:null}),s=o.current||={},c=o.previous,l=c[a];s[a]=new Sc(l&&l.currentValue,n,c===ba),Cc(e,t,i,n)}var Ac=`__ngSimpleChanges__`;function jc(e){return Object.hasOwn(e,Ac)&&e[Ac]||null}function Mc(e,t){return e[Ac]=t}var Nc=[],Pc=function(e,t=null,n){for(let r=0;r=r)break}else t[c]<0&&(e[17]+=65536),(s>14>16&&(e[2]&3)===t&&(e[2]+=16384,Vc(o,a)):Vc(o,a)}var Uc=-1,Wc=class{factory;name;injectImpl;resolving=!1;canSeeViewProviders;multi;componentProviders;index;providerFactory;constructor(e,t,n,r){this.factory=e,this.name=r,this.canSeeViewProviders=t,this.injectImpl=n}};function Gc(e){return!!(e.flags&8)}function Kc(e){return!!(e.flags&16)}function qc(e,t,n){let r=0;for(;rt){o=a-1;break}}}for(;a>16}function tl(e,t){let n=el(e),r=t;for(;n>0;)r=r[14],n--;return r}var nl=!0;function rl(e){let t=nl;return nl=e,t}var il=255,al=5,ol=0,sl={};function cl(e,t,n){let r;typeof n==`string`?r=n.charCodeAt(0)||0:Object.hasOwn(n,Pi)&&(r=n[Pi]),r??=n[Pi]=ol++;let i=r&il,a=1<>al)]|=a}function ll(e,t){let n=dl(e,t);if(n!==-1)return n;let r=t[1];r.firstCreatePass&&(e.injectorIndex=t.length,ul(r.data,e),ul(t,null),ul(r.blueprint,null));let i=fl(e,t),a=e.injectorIndex;if(Qc(i)){let e=$c(i),n=tl(i,t),r=n[1].data;for(let i=0;i<8;i++)t[a+i]=n[e+i]|r[e+i]}return t[a+8]=i,a}function ul(e,t){e.push(0,0,0,0,0,0,0,0,t)}function dl(e,t){return e.injectorIndex===-1||e.parent&&e.parent.injectorIndex===e.injectorIndex||t[e.injectorIndex+8]===null?-1:e.injectorIndex}function fl(e,t){if(e.parent&&e.parent.injectorIndex!==-1)return e.parent.injectorIndex;let n=0,r=null,i=t;for(;i!==null;){if(r=kl(i),r===null)return Uc;if(n++,i=i[14],r.injectorIndex!==-1)return r.injectorIndex|n<<16}return Uc}function pl(e,t,n){cl(e,t,n)}function ml(e,t,n){if(n&8||e!==void 0)return e;Gi(t,`NodeInjector`)}function hl(e,t,n,r){if(n&8&&r===void 0&&(r=null),!(n&3)){let i=e[9],a=Xi(void 0);try{return i?i.get(t,r,n&8):Zi(t,r,n&8)}finally{Xi(a)}}return ml(r,t,n)}function gl(e,t,n,r=0,i){if(e!==null){if(t[2]&2048&&!(r&2)){let i=Ol(e,t,n,r,sl);if(i!==sl)return i}let i=_l(e,t,n,r,sl);if(i!==sl)return i}return hl(t,n,r,i)}function _l(e,t,n,r,i){let a=xl(n);if(typeof a==`function`){if(!rs(t,e,r))return r&1?ml(i,n,r):hl(t,n,r,i);try{let e;if(e=a(r),e==null&&!(r&8))Gi(n);else return e}finally{cs()}}else if(typeof a==`number`){let i=null,o=dl(e,t),s=Uc,c=r&1?t[15][5]:null;for((o===-1||r&4)&&(s=o===-1?fl(e,t):t[o+8],s===Uc||!Cl(r,!1)?o=-1:(i=t[1],o=$c(s),t=tl(s,t)));o!==-1;){let e=t[1];if(Sl(a,o,e.data)){let e=vl(o,t,n,i,r,c);if(e!==sl)return e}s=t[o+8],s!==Uc&&Cl(r,t[1].data[o+8]===c)&&Sl(a,o,t)?(i=e,o=$c(s),t=tl(s,t)):o=-1}}return i}function vl(e,t,n,r,i,a){let o=t[1],s=o.data[e+8],c=yl(s,o,n,r==null?oo(s)&&nl:r!=o&&!!(s.type&3),i&1&&a===s);return c===null?sl:bl(t,o,c,s,i)}function yl(e,t,n,r,i){let a=e.providerIndexes,o=t.data,s=a&1048575,c=e.directiveStart,l=e.directiveEnd,u=a>>20,d=r?s:s+u,f=i?s+u:l;for(let e=d;e=c&&t.type===n)return e}if(i){let e=o[c];if(e&&co(e)&&e.type===n)return c}return null}function bl(e,t,n,r,i){let a=e[n],o=t.data;if(a instanceof Wc){let s=a;if(s.resolving)throw Wi(``);let c=rl(s.canSeeViewProviders);s.resolving=!0,o[n].type||o[n];let l=s.injectImpl?Xi(s.injectImpl):null;rs(e,r,0);try{a=e[n]=s.factory(void 0,i,o,e,r),t.firstCreatePass&&n>=r.directiveStart&&Fc(n,o[n],t)}finally{l!==null&&Xi(l),rl(c),s.resolving=!1,cs()}}return a}function xl(e){if(typeof e==`string`)return e.charCodeAt(0)||0;let t=Object.hasOwn(e,Pi)?e[Pi]:void 0;return typeof t==`number`?t>=0?t&il:Tl:t}function Sl(e,t,n){let r=1<>al)]&r)}function Cl(e,t){return!(e&2)&&!(e&1&&t)}var wl=class{_tNode;_lView;constructor(e,t){this._tNode=e,this._lView=t}get(e,t,n){return gl(this._tNode,this._lView,e,ia(n),t)}};function Tl(){return new wl(Uo(),Vo())}function El(e){return bc(()=>{let t=e.prototype.constructor,n=t[Ni]||Dl(t),r=Object.prototype,i=Object.getPrototypeOf(e.prototype).constructor;for(;i&&i!==r;){let e=i[Ni]||Dl(i);if(e&&e!==n)return e;i=Object.getPrototypeOf(i)}return e=>new e})}function Dl(e){return bi(e)?()=>{let t=Dl(yi(e));return t&&t()}:ca(e)}function Ol(e,t,n,r,i){let a=e,o=t;for(;a!==null&&o!==null&&o[2]&2048&&!lo(o);){let e=_l(a,o,n,r|2,sl);if(e!==sl)return e;r&=-5;let t=a.parent;if(!t){let e=o[20];if(e){let t=e.get(n,sl,r);if(t!==sl)return t}t=kl(o),o=o[14]}a=t}return i}function kl(e){let t=e[1],n=t.type;return n===2?t.declTNode:n===1?e[5]:null}function Al(e){return{token:e.token,providedIn:e.autoProvided===!1?null:`root`,factory:e.factory,value:void 0}}function jl(){return Ml(Uo(),Vo())}function Ml(e,t){return new Nl(go(e,t))}var Nl=(()=>{class e{nativeElement;constructor(e){this.nativeElement=e}static __NG_ELEMENT_ID__=jl}return e})();function Pl(e){return e instanceof Nl?e.nativeElement:e}function Fl(){return this._results[Symbol.iterator]()}var Il=class{_emitDistinctChangesOnly;dirty=!0;_onDirty=void 0;_results=[];_changesDetected=!1;_changes=void 0;length=0;first=void 0;last=void 0;get changes(){return this._changes??=new Wr}constructor(e=!1){this._emitDistinctChangesOnly=e}get(e){return this._results[e]}map(e){return this._results.map(e)}filter(e){return this._results.filter(e)}find(e){return this._results.find(e)}reduce(e,t){return this._results.reduce(e,t)}forEach(e){this._results.forEach(e)}some(e){return this._results.some(e)}toArray(){return this._results.slice()}toString(){return this._results.toString()}reset(e,t){this.dirty=!1;let n=ua(e);(this._changesDetected=!la(this._results,n,t))&&(this._results=n,this.length=n.length,this.last=n[this.length-1],this.first=n[0])}notifyOnChanges(){this._changes!==void 0&&(this._changesDetected||!this._emitDistinctChangesOnly)&&this._changes.next(this)}onDirty(e){this._onDirty=e}setDirty(){this.dirty=!0,this._onDirty?.()}destroy(){this._changes!==void 0&&(this._changes.complete(),this._changes.unsubscribe())}[Symbol.iterator]=Fl};function Ll(e){return(e.flags&128)==128}var Rl=(function(e){return e[e.OnPush=0]=`OnPush`,e[e.Eager=1]=`Eager`,e[e.Default=1]=`Default`,e})(Rl||{}),zl=new Map,Bl=0;function Vl(){return Bl++}function Hl(e){zl.set(e[19],e)}function Ul(e){zl.delete(e[19])}var Wl=`__ngContext__`;function Gl(e,t){ro(t)?(e[Wl]=t[19],Hl(t)):e[Wl]=t}function Kl(e){return Jl(e[12])}function ql(e){return Jl(e[4])}function Jl(e){for(;e!==null&&!io(e);)e=e[4];return e}var Yl=void 0;function Xl(e){Yl=e}function Zl(){if(Yl!==void 0)return Yl;if(typeof document<`u`)return document;throw new pi(210,!1)}var Ql=!1,$l=new Oi(``,{factory:()=>Ql}),eu=new WeakMap;function tu(e,t){if(typeof e!=`object`||!e)return;let n=eu.get(e);n||(n=new WeakSet,eu.set(e,n)),n.add(t)}function nu(e){return(e.flags&32)==32}var ru=()=>null;function iu(e,t,n=!1){return ru(e,t,n)}function au(e,t){let n=e.contentQueries;if(n!==null){let r=an(null);try{for(let r=0;r|^->||--!>|)/g,_u=`​$1​`;function vu(e){return e.replace(hu,e=>e.replace(gu,_u))}function yu(e,t){return e.createText(t)}function bu(e,t,n){e.setValue(t,n)}function xu(e,t){return e.createComment(vu(t))}function Su(e,t,n){return e.createElement(t,n)}function Cu(e,t,n,r,i){e.insertBefore(t,n,r,i)}function wu(e,t,n){e.appendChild(t,n)}function Tu(e,t,n,r,i){r===null?wu(e,t,n):Cu(e,t,n,r,i)}function Eu(e,t,n,r){e.removeChild(null,t,n,r)}function nte(e,t,n){e.setAttribute(t,`style`,n)}function rte(e,t,n){n===``?e.removeAttribute(t,`class`):e.setAttribute(t,`class`,n)}function Du(e,t,n){let{mergedAttrs:r,classes:i,styles:a}=n;r!==null&&qc(e,t,r),i!==null&&rte(e,t,i),a!==null&&nte(e,t,a)}function Ou(e){let t=ite();return t?t.sanitize(fo.URL,e)||``:du(e,`URL`)?uu(e):mu(Bi(e))}function ite(){let e=Vo();return e&&e[10].sanitizer}function ku(e){return e.ownerDocument.defaultView}function Au(e){return e.ownerDocument}function ate(e,t,n){let r=e.length;for(;;){let i=e.indexOf(t,n);if(i===-1)return i;if(i===0||e.charCodeAt(i-1)<=32){let n=t.length;if(i+n===r||e.charCodeAt(i+n)<=32)return i}n=i+1}}var ju=`ng-template`;function ote(e,t,n,r){let i=0;if(r){for(;i-1){let e;for(;++ia?``:i[u+1].toLowerCase(),r&2&&l!==e){if(Nu(r))return!1;o=!0}}}}}return Nu(r)||o}function Nu(e){return!(e&1)}function lte(e,t,n,r){if(t===null)return-1;let i=0;if(r||!n){let n=!1;for(;i-1)for(n++;n0?`="`+t+`"`:``)+`]`}else r&8?i+=`.`+o:r&4&&(i+=` `+o)}else i!==``&&!Nu(o)&&(t+=Fu(a,i),i=``),r=o,a||=!Nu(r);n++}return i!==``&&(t+=Fu(a,i)),t}function hte(e){return e.map(mte).join(`,`)}function gte(e){let t=[],n=[],r=1,i=2;for(;r!1});function zu(e){if(!e)return 0;let t=e.toLowerCase().indexOf(`ms`)>-1?1:1e3;return parseFloat(e)*t}function Bu(e,t){return e.getPropertyValue(t).split(`,`).map(e=>e.trim())}function yte(e){let t=Bu(e,`transition-property`),n=Bu(e,`transition-duration`),r=Bu(e,`transition-delay`),i={propertyName:``,duration:0,animationName:void 0};for(let e=0;ei.duration&&(i.propertyName=t[e],i.duration=a)}return i}function bte(e){let t=Bu(e,`animation-name`),n=Bu(e,`animation-delay`),r=Bu(e,`animation-duration`),i=Bu(e,`animation-iteration-count`),a={animationName:``,propertyName:void 0,duration:0};for(let e=0;ea.duration&&s!==`infinite`&&(a.animationName=t[e],a.duration=o)}return a}function Vu(e,t){return e!==void 0&&e.duration>t.duration}function Hu(e){return(e.animationName!=null||e.propertyName!=null)&&e.duration>0}function Uu(e){let t=e.effect?.getTiming();if(t===void 0)return;let n=typeof t.duration==`number`?t.duration:0,r=(t.delay??0)+n,i=e.playbackRate;return i!==void 0&&i!==0&&i!==1&&(r/=Math.abs(i)),r}function xte(e,t){let n=getComputedStyle(e),r=bte(n),i=yte(n),a=r.duration>i.duration?r:i;Vu(t.get(e),a)||Hu(a)&&t.set(e,a)}function Ste(e,t,n){if(!n)return;let r=e.getAnimations();return r.length===0?xte(e,t):Cte(e,t,r)}function Cte(e,t,n){let r={animationName:void 0,propertyName:void 0,duration:0};for(let e of n){if(e.effect?.getTiming()?.iterations===1/0)continue;let t=Uu(e)??0,n,i;e.animationName?i=e.animationName:n=e.transitionProperty,t>=r.duration&&(r={animationName:i,propertyName:n,duration:t})}Vu(t.get(e),r)||Hu(r)&&t.set(e,r)}var Wu=new Set,wte=!1,Tte=1,Gu=typeof document<`u`&&typeof document?.documentElement?.getAnimations==`function`;function Ete(e){return e[9].get(vte,wte)}function Dte(e,t,n){let r=qu.get(e);if(r){for(let e of t)r.classList.push(e);for(let e of n)r.cleanupFns.push(e)}else qu.set(e,{classList:t,cleanupFns:n})}function Ku(e){let t=qu.get(e);if(t){for(let e of t.cleanupFns)e();qu.delete(e)}Ju.delete(e)}var qu=new WeakMap,Ju=new WeakMap,Yu=new WeakMap;function Xu(e){return e?e[14]??e:null}var Zu=new WeakSet;function Ote(e,t,n){let r=Yu.get(e);if(!r||r.length===0)return;let i=t.parentNode,a=t.previousSibling,o=Xu(n);for(let e=r.length-1;e>=0;e--){let{el:n,declarationView:s}=r[e],c=n.parentNode;n===t?(r.splice(e,1),Zu.add(n),n.dispatchEvent(new CustomEvent(`animationend`,{detail:{cancel:!0}}))):(a&&n===a||c&&i&&c!==i&&(o===null||s===null||o===s))&&(r.splice(e,1),n.dispatchEvent(new CustomEvent(`animationend`,{detail:{cancel:!0}})),n.parentNode?.removeChild(n))}}function kte(e,t,n){let r=Xu(n),i=Yu.get(e);i?i.some(e=>e.el===t)||i.push({el:t,declarationView:r}):Yu.set(e,[{el:t,declarationView:r}])}function Qu(e){let t=e[26]??={};return t.enter??=new Map}function Ate(e){let t=typeof e==`function`?e():e,n=Array.isArray(t)?t:null;return typeof t==`string`&&(n=t.trim().split(/\s+/).filter(e=>e)),n}function $u(e){return e.composedPath?e.composedPath()[0]:e.target}function ed(e,t){let n=Ju.get(t);if(n===void 0)return!0;if(t!==$u(e))return!1;let r=e.animation;if(r){let e=Uu(r);if(e!==void 0&&e+Tte{class e{impl=null;execute(){this.impl?.execute()}static ɵprov=xi({token:e,providedIn:`root`,factory:()=>new e})}return e})(),od=[0,1,2,3],sd=(()=>{class e{ngZone=x(Fs);scheduler=x(ic);errorHandler=x(qs,{optional:!0});sequences=new Set;deferredRegistrations=new Set;executing=!1;constructor(){x(nd,{optional:!0})}execute(){let e=this.sequences.size>0;e&&Pc(xc.AfterRenderHooksStart),this.executing=!0;for(let e of od)for(let t of this.sequences)if(!t.erroredOrDestroyed&&t.hooks[e])try{t.pipelinedValue=this.ngZone.runOutsideAngular(()=>this.maybeTrace(()=>{let n=t.hooks[e];return n(t.pipelinedValue)},t.snapshot))}catch(e){t.erroredOrDestroyed=!0,this.errorHandler?.handleError(e)}this.executing=!1;for(let e of this.sequences)e.afterRun(),e.once&&(this.sequences.delete(e),e.destroy());for(let e of this.deferredRegistrations)this.sequences.add(e);this.deferredRegistrations.size>0&&this.scheduler.notify(7),this.deferredRegistrations.clear(),e&&Pc(xc.AfterRenderHooksEnd)}register(e){let{view:t}=e;t===void 0?this.executing?this.deferredRegistrations.add(e):this.addSequence(e):((t[25]??=[]).push(e),ko(t),t[2]|=8192)}addSequence(e){this.sequences.add(e),this.scheduler.notify(7)}unregister(e){this.executing&&this.sequences.has(e)?(e.erroredOrDestroyed=!0,e.pipelinedValue=void 0,e.once=!0):(this.sequences.delete(e),this.deferredRegistrations.delete(e))}maybeTrace(e,t){return t?t.run(td.AFTER_NEXT_RENDER,e):e()}static ɵprov=xi({token:e,providedIn:`root`,factory:()=>new e})}return e})(),cd=class{impl;hooks;view;once;snapshot;erroredOrDestroyed=!1;pipelinedValue=void 0;unregisterOnDestroy;constructor(e,t,n,r,i,a=null){this.impl=e,this.hooks=t,this.view=n,this.once=r,this.snapshot=a,this.unregisterOnDestroy=i?.onDestroy(()=>this.destroy())}afterRun(){this.erroredOrDestroyed=!1,this.pipelinedValue=void 0,this.snapshot?.dispose(),this.snapshot=null}destroy(){this.impl.unregister(this),this.unregisterOnDestroy?.();let e=this.view?.[25];e&&(this.view[25]=e.filter(e=>e!==this))}};function ld(e,t){let n=t?.injector??x(xs);return id(`NgAfterNextRender`),Nte(e,n,t,!0)}function Mte(e){return e instanceof Function?[void 0,void 0,e,void 0]:[e.earlyRead,e.write,e.mixedReadWrite,e.read]}function Nte(e,t,n,r){let i=t.get(ad);i.impl??=t.get(sd);let a=t.get(nd,null,{optional:!0}),o=n?.manualCleanup===!0?null:t.get(Cs),s=t.get(nc,null,{optional:!0}),c=new cd(i.impl,Mte(e),s?.view,r,o,a?.snapshot(null));return i.impl.register(c),c}var ud=new Oi(``,{factory:()=>{let e=x(Ha),t=new Set;return e.onDestroy(()=>t.clear()),{queue:t,isScheduled:!1,scheduler:null,injector:e}}});function dd(e,t,n){let r=e.get(ud);if(Array.isArray(t))for(let e of t)r.queue.add(e),n?.detachedLeaveAnimationFns?.push(e);else r.queue.add(t),n?.detachedLeaveAnimationFns?.push(t);r.scheduler&&r.scheduler(e)}function Pte(e,t){let n=e.get(ud);if(Array.isArray(t))for(let e of t)n.queue.delete(e);else n.queue.delete(t)}function Fte(e,t){let n=e.get(ud);if(t.detachedLeaveAnimationFns){for(let e of t.detachedLeaveAnimationFns)n.queue.delete(e);t.detachedLeaveAnimationFns=void 0}}function Ite(e){let t=e.get(ud);t.isScheduled||=(ld(()=>{t.isScheduled=!1;for(let e of t.queue)e();t.queue.clear()},{injector:t.injector}),!0)}function Lte(e){let t=e.get(ud);t.scheduler=Ite,t.scheduler(e)}function fd(e,t){for(let[n,r]of t)dd(e,r.animateFns)}function pd(e,t,n,r){let i=e?.[26]?.enter;t!==null&&i&&i.has(n.index)&&fd(r,i)}function md(e,t,n,r){try{n.get(Ca)}catch{return r(!1)}let i=e?.[26];i?.enter?.has(t.index)&&Pte(n,i.enter.get(t.index).animateFns);let a=Rte(e,t,i);if(a.size===0){let n=!1;if(e){let r=[];hd(e,t,r),n=r.length>0}if(!n)return r(!1)}e&&Wu.add(e[19]),dd(n,()=>zte(e,t,i||void 0,a,r),i||void 0)}function Rte(e,t,n){let r=new Map,i=n?.leave;if(i&&i.has(t.index)&&r.set(t.index,i.get(t.index)),e&&i)for(let[n,a]of i){if(r.has(n))continue;let i=e[1].data[n].parent;for(;i;){if(i===t){r.set(n,a);break}i=i.parent}}return r}function zte(e,t,n,r,i){let a=[];if(n&&n.leave)for(let[e]of r){if(!n.leave.has(e))continue;let t=n.leave.get(e);for(let e of t.animateFns){let{promise:t}=e();a.push(t)}n.detachedLeaveAnimationFns=void 0}if(e&&hd(e,t,a),a.length>0){let t=n||e?.[26];if(t){let n=t.running;n&&a.push(n),t.running=Promise.allSettled(a),Vte(e,t.running,i)}else Promise.allSettled(a).then(()=>{e&&Wu.delete(e[19]),i(!0)})}else e&&Wu.delete(e[19]),i(!1)}function hd(e,t,n){if(t.type&12){let r=e[t.index];if(io(r))for(let e=10;e{e[26]?.running===t&&(e[26].running=void 0,Wu.delete(e[19])),n(!0)})}function gd(e,t,n,r,i,a,o,s){if(i!=null){let c,l=!1;io(i)?c=i:ro(i)&&(l=!0,i=i[0]);let u=mo(i);e===0&&r!==null?(pd(s,r,a,n),o==null?wu(t,r,u):Cu(t,r,u,o||null,!0)):e===1&&r!==null?(pd(s,r,a,n),Cu(t,r,u,o||null,!0),Ote(a,u,s)):e===2?(s?.[26]?.leave?.has(a.index)&&kte(a,u,s),Zu.delete(u),md(s,a,n,e=>{if(Zu.has(u)){Zu.delete(u);return}Eu(t,u,l,e)})):e===3&&(Zu.delete(u),md(s,a,n,()=>{t.destroyNode(u)})),c!=null&&Ad(t,e,n,c,a,r,o)}}function Hte(e,t){_d(e,t),t[0]=null,t[5]=null}function Ute(e,t,n,r,i,a){r[0]=i,r[5]=t,Od(e,r,n,1,i,a)}function _d(e,t){t[10].changeDetectionScheduler?.notify(9),Od(e,t,t[11],2,null,null)}function Wte(e){let t=e[12];if(!t)return bd(e[1],e);for(;t;){let n=null;if(ro(t))n=t[12];else{let e=t[10];e&&(n=e)}if(!n){for(;t&&!t[4]&&t!==e;)ro(t)&&bd(t[1],t),t=t[3];t===null&&(t=e),ro(t)&&bd(t[1],t),n=t&&t[4]}t=n}}function vd(e,t){let n=e[9],r=n.indexOf(t);n.splice(r,1)}function yd(e,t){if(uo(t))return;let n=t[11];n.destroyNode&&Od(e,t,n,3,null,null),Wte(t)}function bd(e,t){if(uo(t))return;let n=an(null);try{t[2]&=-129,t[2]|=256,t[24]&&bn(t[24]),Kte(e,t),Gte(e,t),t[1].type===1&&t[11].destroy();let n=t[16];if(n!==null&&io(t[3])){n!==t[3]&&vd(n,t);let r=t[18];r!==null&&r.detachView(e)}Ul(t)}finally{an(n)}}function Gte(e,t){let n=e.cleanup,r=t[7];if(n!==null)for(let e=0;e=0?r[t]():r[-t].unsubscribe(),e+=2}else{let t=r[n[e+1]];n[e].call(t)}r!==null&&(t[7]=null);let i=t[21];if(i!==null){t[21]=null;for(let e=0;e27&&Bd(e,t,27,!1),Pc(o?xc.TemplateUpdateStart:xc.TemplateCreateStart,i,n),n(r,i)}finally{ds(a),Pc(o?xc.TemplateUpdateEnd:xc.TemplateCreateEnd,i,n)}}function Wd(e,t,n){Zd(e,t,n),(n.flags&64)==64&&Qd(e,t,n)}function Gd(e,t,n=go){let r=t.localNames;if(r!==null){let i=t.index+1;for(let a=0;a=s&&i<=c){let o=t.data[i],s=r[e+1];Hd(o,n[i],s,a),l=!0}else if(i>c)break}}return o!==null&&Object.hasOwn(r.inputs,i)&&(Hd(r,n[o],i,a),l=!0),l}function uf(e,t){let n=bo(t,e),r=n[1];df(r,n);let i=n[0];i!==null&&n[6]===null&&(n[6]=iu(i,n[9])),Pc(xc.ComponentStart);try{ff(r,n,n[8])}finally{Pc(xc.ComponentEnd,n[8])}}function df(e,t){for(let n=t.length;n{ko(e.lView)},consumerOnSignalRead(){this.lView[24]=this}};function wf(e){let t=e[24]??Object.create(Tf);return t.lView=e,t}var Tf={...sn,consumerIsAlwaysLive:!0,kind:`template`,consumerMarkedDirty:e=>{let t=jo(e.lView);for(;t&&!Ef(t[1]);)t=jo(t);t&&To(t)},consumerOnSignalRead(){this.lView[24]=this}};function Ef(e){return e.type!==2}function Df(e){if(e[23]===null)return;let t=!0;for(;t;){let n=!1;for(let t of e[23])if(t.dirty&&(n=!0,t.zone===null||Zone.current===t.zone?t.run():t.zone.run(()=>t.run()),e[23]===null))return;t=n&&!!(e[2]&8192)}}var Of=100;function kf(e,t=0){let n=e[10].rendererFactory;n.begin?.();try{Af(e,t)}finally{n.end?.()}}function Af(e,t){let n=Yo();try{Xo(!0),If(e,t);let n=0;for(;Do(e);){if(n===Of)throw new pi(103,!1);n++,If(e,1)}}finally{Xo(n)}}function jf(e,t,n,r){if(uo(t))return;let i=t[2];is(t);let a=!0,o=null,s=null;Ef(e)?(s=bf(t),o=hn(s)):on()===null?(a=!1,s=wf(t),o=hn(s)):t[24]&&=(bn(t[24]),null);try{wo(t),Jee(e.bindingStartIndex),n!==null&&Ud(e,t,n,2,r);let a=(i&3)==3;if(a){let n=e.preOrderCheckHooks;n!==null&&Lc(t,n,null)}else{let n=e.preOrderHooks;n!==null&&Rc(t,n,0,null),zc(t,0)}if(Nf(t),Df(t),Mf(t,0),e.contentQueries!==null&&au(e,t),a){let n=e.contentCheckHooks;n!==null&&Lc(t,n)}else{let n=e.contentHooks;n!==null&&Rc(t,n,1),zc(t,1)}Rf(e,t);let o=e.components;o!==null&&Lf(t,o,0);let s=e.viewQuery;if(s!==null&&ou(2,s,r),a){let n=e.viewCheckHooks;n!==null&&Lc(t,n)}else{let n=e.viewHooks;n!==null&&Rc(t,n,2),zc(t,2)}if(e.firstUpdatePass===!0&&(e.firstUpdatePass=!1),t[22]){for(let e of t[22])e();t[22]=null}vf(t),t[2]&=-73}catch(e){throw ko(t),e}finally{s!==null&&(_n(s,o),a&&Sf(s)),ls()}}function Mf(e,t){for(let n=Kl(e);n!==null;n=ql(n))for(let e=10;e0&&(e[n-1][4]=r[4]);let a=pa(e,10+t);Hte(r[1],r);let o=a[18];o!==null&&o.detachView(a[1]),r[3]=null,r[4]=null,r[2]&=-129}return r}function Gf(e,t,n,r){let i=10+r,a=n.length;r>0&&(n[i-1][4]=t),r-1&&(Wf(e,n),pa(t,n))}this._attachedToViewContainer=!1}yd(this._lView[1],this._lView)}onDestroy(e){Ao(this._lView,e)}markForCheck(){zf(this._cdRefInjectingView||this._lView,4)}detach(){this._lView[2]&=-129}reattach(){Oo(this._lView),this._lView[2]|=128}detectChanges(){this._lView[2]|=1024,kf(this._lView)}checkNoChanges(){}attachToViewContainerRef(){if(this._appRef)throw new pi(902,!1);this._attachedToViewContainer=!0}detachFromAppRef(){this._appRef=null;let e=lo(this._lView),t=this._lView[16];t!==null&&!e&&vd(t,this._lView),_d(this._lView[1],this._lView)}attachToAppRef(e){if(this._attachedToViewContainer)throw new pi(902,!1);this._appRef=e;let t=lo(this._lView),n=this._lView[16];n!==null&&!t&&Kf(n,this._lView),Oo(this._lView)}},Jf=(()=>{class e{_declarationLView;_declarationTContainer;elementRef;static __NG_ELEMENT_ID__=Yf;constructor(e,t,n){this._declarationLView=e,this._declarationTContainer=t,this.elementRef=n}get ssrId(){return this._declarationTContainer.tView?.ssrId||null}createEmbeddedView(e,t){return this.createEmbeddedViewImpl(e,t)}createEmbeddedViewImpl(e,t,n){return new qf(mf(this._declarationLView,this._declarationTContainer,e,{embeddedViewInjector:t,dehydratedView:n}))}}return e})();function Yf(){return Xf(Uo(),Vo())}function Xf(e,t){return e.type&4?new Jf(t,e,Ml(e,t)):null}function Zf(e,t,n,r,i){let a=e.data[t];if(a===null)a=Qf(e,t,n,r,i),Yee()&&(a.flags|=32);else if(a.type&64){a.type=n,a.value=r,a.attrs=i;let e=qee();a.injectorIndex=e===null?-1:e.injectorIndex}return Go(a,!0),a}function Qf(e,t,n,r,i){let a=Wo(),o=Ko(),s=o?a:a&&a.parent,c=e.data[t]=ep(e,s,n,t,r,i);return $f(e,c,a,o),c}function $f(e,t,n,r){e.firstChild===null&&(e.firstChild=t),n!==null&&(r?n.child==null&&t.parent!==null&&(n.child=t):n.next===null&&(n.next=t,t.prev=n))}function ep(e,t,n,r,i,a){let o=t?t.injectorIndex:-1,s=0;return Ro()&&(s|=128),{type:n,index:r,insertBeforeIndex:null,injectorIndex:o,directiveStart:-1,directiveEnd:-1,directiveStylingLast:-1,componentOffset:-1,controlDirectiveIndex:-1,customControlIndex:-1,propertyBindings:null,flags:s,providerIndexes:0,value:i,namespace:hs(),attrs:a,mergedAttrs:null,localNames:null,initialInputs:null,inputs:null,hostDirectiveInputs:null,outputs:null,hostDirectiveOutputs:null,directiveToIndex:null,tView:null,next:null,prev:null,projectionNext:null,child:null,parent:t,projection:null,styles:null,stylesWithoutHost:null,residualStyles:void 0,classes:null,classesWithoutHost:null,residualClasses:void 0,classBindings:0,styleBindings:0}}function tp(e){let t=e[6]??[],n=e[3][11],r=[];for(let e of t)e.data.di===void 0?np(e,n):r.push(e);e[6]=r}function np(e,t){let n=0,r=e.firstChild;if(r){let i=e.data.r;for(;nnull,ip=()=>null;function ap(e,t){return rp(e,t)}function op(e,t,n){return ip(e,t,n)}var sp=class{},cp=class{},lp=class{destroyNode=null;static __NG_ELEMENT_ID__=()=>up()};function up(){let e=Vo(),t=bo(Uo().index,e);return(ro(t)?t:e)[11]}var dp=(()=>{class e{static ɵprov=xi({token:e,providedIn:`root`,factory:()=>null})}return e})();function fp(e){return e.debugInfo?.className||e.type.name||null}var pp={},mp=class{injector;parentInjector;constructor(e,t){this.injector=e,this.parentInjector=t}get(e,t,n){let r=this.injector.get(e,pp,n);return r!==pp||t===pp?r:this.parentInjector.get(e,t,n)}};function hp(e,t,n){return e[t]=n}function gp(e,t){return e[t]}function _p(e,t,n){if(n===Iu)return!1;let r=e[t];return!Object.is(r,n)&&(e[t]=n,!0)}function vp(e,t,n,r){let i=_p(e,t,n);return _p(e,t+1,r)||i}function yp(e,t,n,r,i){let a=vp(e,t,n,r);return _p(e,t+2,i)||a}function bp(e,t,n,r,i,a){let o=vp(e,t,n,r);return vp(e,t+2,i,a)||o}function xp(e,t,n){return function r(i){let a=r.__ngNativeEl__;a!==void 0&&tu(i,a),zf(oo(e)?bo(e.index,t):t,5);let o=t[8],s=Sp(t,o,n,i),c=r.__ngNextListenerFn__;for(;c;)s=Sp(t,o,c,i)&&s,c=c.__ngNextListenerFn__;return s}}function Sp(e,t,n,r){let i=an(null);try{return Pc(xc.OutputStart,t,n),n(r)!==!1}catch(t){return sf(e,t),!1}finally{Pc(xc.OutputEnd,t,n),an(i)}}function Cp(e,t,n,r,i,a,o,s){let c=so(e),l=!1,u=null;if(!r&&c&&(u=Tp(t,n,a,e.index)),u!==null){let e=u.__ngLastListenerFn__||u;e.__ngNextListenerFn__=o,u.__ngLastListenerFn__=o,l=!0}else{let o=go(e,n),c=r?r(o):o;r||(s.__ngNativeEl__=o);let l=i.listen(c,a,s);wp(a)||Ep(r?t=>r(mo(t[e.index])):e.index,t,n,a,s,l,!1)}return l}function wp(e){return e.startsWith(`animation`)||e.startsWith(`transition`)}function Tp(e,t,n,r){let i=e.cleanup;if(i!=null)for(let e=0;er?n[r]:null}typeof a==`string`&&(e+=2)}return null}function Ep(e,t,n,r,i,a,o){let s=t.firstCreatePass?No(t):null,c=Mo(n),l=c.length;c.push(i,a),s&&s.push(r,e,l,(l+1)*(o?-1:1))}function Dp(e,t,n,r,i){let a=null,o=null,s=null,c=!1,l=e.directiveToIndex.get(n.type);if(typeof l==`number`?a=l:[a,o,s]=l,o!==null&&s!==null&&e.hostDirectiveOutputs&&Object.hasOwn(e.hostDirectiveOutputs,r)){let n=e.hostDirectiveOutputs[r];for(let a=0;a=o&&l<=s)c=!0,Op(e,t,l,n[a+1],r,i);else if(l>s)break}}return Object.hasOwn(n.outputs,r)&&(c=!0,Op(e,t,a,r,r,i)),c}function Op(e,t,n,r,i,a){let o=t[n],s=t[1],c=o[s.data[n].outputs[r]].subscribe(a);Ep(e.index,s,t,i,a,c,!0)}function kp(){Ap()}function Ap(){let e=Vo(),t=Ho(),n=Uo();if(t.firstCreatePass&&Ip(t,n),n.controlDirectiveIndex===-1)return;id(`NgSignalForms`);let r=e[n.controlDirectiveIndex];t.data[n.controlDirectiveIndex].controlDef.create(r,new Np(e,t,n))}function jp(){Mp()}function Mp(){let e=Vo(),t=Ho(),n=fs();if(n.controlDirectiveIndex===-1)return;let r=t.data[n.controlDirectiveIndex].controlDef,i=e[n.controlDirectiveIndex];r.update(i,new Np(e,t,n))}var Np=class{lView;tView;tNode;hasPassThrough;constructor(e,t,n){this.lView=e,this.tView=t,this.tNode=n,this.hasPassThrough=!!(n.flags&4096)}get customControl(){return this.tNode.customControlIndex===-1?void 0:this.lView[this.tNode.customControlIndex]}get nativeElement(){return go(this.tNode,this.lView)}get descriptor(){return`<${this.tNode.value}>`}listenToCustomControlOutput(e,t){let n=this.tView.data[this.tNode.customControlIndex];Dp(this.tNode,this.lView,n,e,xp(this.tNode,this.lView,t))}listenToCustomControlModel(e){let t=this.tNode.flags&1024?`valueChange`:`checkedChange`,n=this.tView.data[this.tNode.customControlIndex];Dp(this.tNode,this.lView,n,t,xp(this.tNode,this.lView,e))}listenToDom(e,t){Cp(this.tNode,this.tView,this.lView,void 0,this.lView[11],e,t,xp(this.tNode,this.lView,t))}setInputOnDirectives(e,t,n){let r=this.tNode.inputs?.[e],i=this.tNode.hostDirectiveInputs?.[e];if(!r&&!i)return!1;let a=!1;if(r)for(let i of r){if(i===this.tNode.controlDirectiveIndex)continue;let r=this.lView[i],o=this.tView.data[i];(!n||n(Fp(r,o,e)))&&(Hd(o,r,e,t),a=!0)}if(i)for(let r=0;r0;){let e=n.shift();if(typeof e!=`function`){for(let n in e.inputs)t[e.inputs[n]]=!0;let r=Pp(e.directive);r!==null&&n.push(...r);continue}for(let r of e()){if(typeof r==`function`)continue;if(r.inputs)for(let e=0;e1){t.flags|=4096;return}Lp(e,t)}function Lp(e,t){for(let n=t.directiveStart;n{let r=t.hostDirectiveInputs[e],i=t.hostDirectiveOutputs[e+`Change`];if(!r||!i)return!1;for(let e=0;e=i&&a<=o)return t.flags|=n,t.customControlIndex=r,!0}}return!1};if(e(`value`,1024)||e(`checked`,2048))return}}function Rp(e,t){return zp(e,t)&&Bp(e,t+`Change`)}function zp(e,t){return t in e.inputs}function Bp(e,t){return t in e.outputs}var Vp=Symbol(`BINDING`),Hp=new Oi(``);function Up(e,t,n){let r=n?e.styles:null,i=n?e.classes:null,a=0;if(t!==null)for(let e=0;e0&&(n.directiveToIndex=new Map);for(let c=0;c0;){let n=e[--t];if(typeof n==`number`&&n<0)return n}return 0}function rm(e,t,n){if(n){if(t.exportAs)for(let r=0;r{let[n,r,i]=e[t],a={propName:n,templateName:t,isSignal:(r&Vd.SignalBased)!==0};return i&&(a.transform=i),a})}function dm(e){return Object.keys(e).map(t=>({propName:e[t],templateName:t}))}function fm(e,t,n){let r=t instanceof Ha?t:t?.injector;return r&&e.getStandaloneInjector!==null&&(r=e.getStandaloneInjector(r)||r),r?new mp(n,r):n}function pm(e){let t=e.get(cp,null);if(t===null)throw new pi(407,!1);return{rendererFactory:t,sanitizer:e.get(dp,null),changeDetectionScheduler:e.get(ic,null),ngReflect:!1,tracingService:e.get(nd,null,{optional:!0})}}function mm(e,t,n){let r=gm(e);return Su(t,r,r===`svg`?`svg`:r===`math`?po:n)}function hm(e){if((e&&`localName`in e&&typeof e.localName==`string`?e.localName:e?.tagName)?.toLowerCase()===`script`)throw new pi(905,!1)}function gm(e){return(e.selectors[0][0]||`div`).toLowerCase()}var _m=class{componentDef;ngModule;selector;componentType;ngContentSelectors;isBoundToModule;cachedInputs=null;cachedOutputs=null;get inputs(){return this.cachedInputs??=um(this.componentDef.inputs),this.cachedInputs}get outputs(){return this.cachedOutputs??=dm(this.componentDef.outputs),this.cachedOutputs}constructor(e,t){this.componentDef=e,this.ngModule=t,this.componentType=e.type,this.selector=hte(e.selectors),this.ngContentSelectors=e.ngContentSelectors??[],this.isBoundToModule=!!t}create(e,t,n,r,i,a,o){Pc(xc.DynamicComponentStart);let s=an(null);try{let s=this.componentDef,c=fm(s,r||this.ngModule,e),l=pm(c),u=l.tracingService;return u&&u.componentCreate?u.componentCreate(fp(s),()=>this.createComponentRef(l,c,t,n,i,a,o)):this.createComponentRef(l,c,t,n,i,a,o)}finally{an(s)}}createComponentRef(e,t,n,r,i,a,o){let s=this.componentDef,c=vm(r,s,a,i),l=e.rendererFactory.createRenderer(null,s),u=r?Kd(l,r,s.encapsulation,t):mm(s,l,o??null);hm(u);let d=t.get(Hp,null),f=ym(u,()=>t.get(Ss,null)??Zl());d&&d.addHost(f);let p=a?.some(xm)||i?.some(e=>typeof e!=`function`&&e.bindings.some(xm)),m=Fd(null,c,null,512|Ld(s),null,null,e,l,t,null,iu(u,t,!0));d&&cm&&f instanceof ShadowRoot&&Ao(m,()=>{d.removeHost(f)}),m[27]=u,is(m);let ee=null;try{let e=am(27,m,2,`#host`,()=>c.directiveRegistry,!0,0);Du(l,u,e),Gl(u,m),Wd(c,m,e),su(c,e,m),om(c,e),n!==void 0&&Cm(e,this.ngContentSelectors,n),ee=bo(e.index,m),m[8]=ee[8],ff(c,m,null)}catch(e){throw ee!==null&&Ul(ee),Ul(m),e}finally{Pc(xc.DynamicComponentEnd),ls()}return new Sm(this.componentType,m,!!p)}};function vm(e,t,n,r){let i=e?[`ng-version`,`22.1.7`]:gte(t.selectors[0]),a=null,o=null,s=0;if(n)for(let e of n)s+=e[Vp].requiredVars,e.create&&(e.targetIdx=0,(a??=[]).push(e)),e.update&&(e.targetIdx=0,(o??=[]).push(e));if(r)for(let e=0;e{if(n&1&&e)for(let t of e)t.create();if(n&2&&t)for(let e of t)e.update()}}function xm(e){let t=e[Vp].kind;return t===`input`||t===`twoWay`}var Sm=class extends sp{_rootLView;_hasInputBindings;instance;hostView;changeDetectorRef;componentType;location;previousInputValues=null;_tNode;constructor(e,t,n){super(),this._rootLView=t,this._hasInputBindings=n,this._tNode=_o(t[1],27),this.location=Ml(this._tNode,t),this.instance=bo(this._tNode.index,t)[8],this.hostView=this.changeDetectorRef=new qf(t,void 0),this.componentType=e}setInput(e,t){this._hasInputBindings;let n=this._tNode;if(this.previousInputValues??=new Map,this.previousInputValues.has(e)&&Object.is(this.previousInputValues.get(e),t))return;let r=this._rootLView;cf(n,r[1],r,e,t),this.previousInputValues.set(e,t),zf(bo(n.index,r),1)}get injector(){return new wl(this._tNode,this._rootLView)}destroy(){this.hostView.destroy()}onDestroy(e){this.hostView.onDestroy(e)}};function Cm(e,t,n){let r=e.projection=[];for(let e=0;e{class e{static __NG_ELEMENT_ID__=Tm}return e})();function Tm(){return km(Uo(),Vo())}var Em=class e extends wm{_lContainer;_hostTNode;_hostLView;constructor(e,t,n){super(),this._lContainer=e,this._hostTNode=t,this._hostLView=n}get element(){return Ml(this._hostTNode,this._hostLView)}get injector(){return new wl(this._hostTNode,this._hostLView)}get parentInjector(){let e=fl(this._hostTNode,this._hostLView);if(Qc(e)){let t=tl(e,this._hostLView),n=$c(e),r=t[1].data[n+8];return new wl(r,t)}return new wl(null,this._hostLView)}clear(){for(;this.length>0;)this.remove(this.length-1)}get(e){let t=Dm(this._lContainer);return t!==null&&t[e]||null}get length(){return this._lContainer.length-10}createEmbeddedView(e,t,n){let r,i;typeof n==`number`?r=n:n!=null&&(r=n.index,i=n.injector);let a=ap(this._lContainer,e.ssrId),o=e.createEmbeddedViewImpl(t||{},i,a);return this.insertImpl(o,r,hf(this._hostTNode,a)),o}createComponent(e,t,n,r,i,a,o){let s,c=t||{};s=c.index,n=c.injector,r=c.projectableNodes,i=c.environmentInjector||c.ngModuleRef,a=c.directives,o=c.bindings;let l=new _m(Ii(e)),u=n||this.parentInjector;if(!i&&l.ngModule==null){let e=this.parentInjector.get(Ha,null);e&&(i=e)}let d=Ii(l.componentType??{}),f=ap(this._lContainer,d?.id??null),p=f?.firstChild??null,m=l.create(u,r,p,i,a,o,this._getHostElementNamespace());return this.insertImpl(m.hostView,s,hf(this._hostTNode,f)),m}_getHostElementNamespace(){if(this._hostTNode.type&2){let e=this._hostTNode.parent??this._hostLView[5];return e!==null&&e.type&2&&typeof e.value==`string`&&e.value.toLowerCase()===`foreignobject`?null:e?.namespace??null}return this._hostTNode.namespace}insert(e,t){return this.insertImpl(e,t,!0)}insertImpl(t,n,r){let i=t._lView;if(So(i)){let n=this.indexOf(t);if(n!==-1)this.detach(n);else{let n=i[3],r=new e(n,n[5],n[3]);r.detach(r.indexOf(t))}}let a=this._adjustIndex(n),o=this._lContainer;return Hf(o,i,a,r),t.attachToViewContainerRef(),fa(Om(o),a,t),t}move(e,t){return this.insert(e,t)}indexOf(e){let t=Dm(this._lContainer);return t===null?-1:t.indexOf(e)}remove(e){let t=this._adjustIndex(e,-1),n=Wf(this._lContainer,t);n&&(pa(Om(this._lContainer),t),yd(n[1],n))}detach(e){let t=this._adjustIndex(e,-1),n=Wf(this._lContainer,t);return n&&pa(Om(this._lContainer),t)!=null?new qf(n):null}_adjustIndex(e,t=0){return e??this.length+t}};function Dm(e){return e[8]}function Om(e){return e[8]||=[]}function km(e,t){let n,r=t[e.index];return io(r)?n=r:(n=Bf(r,t,null,e),t[e.index]=n,zd(t,n)),jm(n,t,e,r),new Em(n,e,t)}function Am(e,t){let n=e[11],r=n.createComment(``),i=go(t,e);return Cu(n,n.parentNode(i),r,n.nextSibling(i),!1),r}var jm=Pm,Mm=()=>!1;function Nm(e,t,n){return Mm(e,t,n)}function Pm(e,t,n,r){if(e[7])return;let i;i=n.type&8?mo(r):Am(t,n),e[7]=i}var Fm=class e{queryList;matches=null;constructor(e){this.queryList=e}clone(){return new e(this.queryList)}setDirty(){this.queryList.setDirty()}},Im=class e{queries;constructor(e=[]){this.queries=e}createEmbeddedView(t){let n=t.queries;if(n!==null){let r=t.contentQueries===null?n.length:t.contentQueries[0],i=[];for(let e=0;e0)r.push(o[e/2]);else{let i=a[e+1],o=t[-n];for(let e=10;ee.trim())}function Xm(e,t,n){e.queries===null&&(e.queries=new Rm),e.queries.track(new zm(t,n))}function Zm(e,t){return e.queries.getByIndex(t)}function Qm(e,t){let n=e[1],r=Zm(n,t);return r.crossesNgTemplate?Gm(n,e,t,[]):Wm(n,e,r,t)}function $m(e,t,n){let r,i=En(()=>{r._dirtyCounter();let n=rh(r,e);if(t&&n===void 0)throw new pi(-951,!1);return n});return r=i[rn],r._dirtyCounter=T(0),r._flatValue=void 0,i}function eh(e){return $m(!0,!1,e)}function th(e){return $m(!0,!0,e)}function nh(e,t){let n=e[rn];n._lView=Vo(),n._queryIndex=t,n._queryList=Km(n._lView,t),n._queryList.onDirty(()=>n._dirtyCounter.update(e=>e+1))}function rh(e,t){let n=e._lView,r=e._queryIndex;if(n===void 0||r===void 0||n[2]&4)return t?void 0:xa;let i=Km(n,r),a=Qm(n,r);return i.reset(a,Pl),t?i.first:i._changesDetected||e._flatValue===void 0?e._flatValue=i.toArray():e._flatValue}function ih(e){return!!e&&typeof e.then==`function`}function ah(e){return!!e&&typeof e.subscribe==`function`}var oh=class{},sh=class extends oh{injector;instance=null;constructor(e){super();let t=new Ua([...e.providers,{provide:oh,useValue:this}],e.parent||Va(),e.debugName,new Set([`environment`]));this.injector=t,e.runEnvironmentInitializers&&t.resolveInjectorInitializers()}destroy(){this.injector.destroy()}onDestroy(e){this.injector.onDestroy(e)}};function ch(e,t,n=null){return new sh({providers:e,parent:t,debugName:n,runEnvironmentInitializers:!0}).injector}var lh=(()=>{class e{_injector;cachedInjectors=new Map;constructor(e){this._injector=e}getOrCreateStandaloneInjector(e){if(!e.standalone)return null;if(!this.cachedInjectors.has(e)){let t=Da(!1,e.type),n=t.length>0?ch([t],this._injector,``):null;this.cachedInjectors.set(e,n)}return this.cachedInjectors.get(e)}ngOnDestroy(){try{for(let e of this.cachedInjectors.values())e!==null&&e.destroy()}finally{this.cachedInjectors.clear()}}static ɵprov=xi({token:e,providedIn:`environment`,factory:()=>new e(ra(Ha))})}return e})();function O(e){return bc(()=>{let t=hh(e),n={...t,decls:e.decls,vars:e.vars,template:e.template,consts:e.consts||null,ngContentSelectors:e.ngContentSelectors,onPush:e.changeDetection!==Rl.Eager,directiveDefs:null,pipeDefs:null,dependencies:t.standalone&&e.dependencies||null,getStandaloneInjector:t.standalone?e=>e.get(lh).getOrCreateStandaloneInjector(n):null,getExternalStyles:null,signals:e.signals??!1,data:e.data||{},encapsulation:e.encapsulation||cu.Emulated,styles:e.styles||xa,_:null,schemas:e.schemas||null,tView:null,id:``};t.standalone&&id(`NgStandalone`),gh(n);let r=e.dependencies;return n.directiveDefs=_h(r,uh),n.pipeDefs=_h(r,Ri),n.id=vh(n),n})}function uh(e){return Ii(e)||Li(e)}function dh(e,t){if(e==null)return ba;let n={};for(let r in e)if(Object.hasOwn(e,r)){let i=e[r],a,o,s,c;Array.isArray(i)?(s=i[0],a=i[1],o=i[2]??a,c=i[3]||null):(a=i,o=i,s=Vd.None,c=null),n[a]=[r,s,c],t[a]=o}return n}function fh(e){if(e==null)return ba;let t={};for(let n in e)Object.hasOwn(e,n)&&(t[e[n]]=n);return t}function ph(e){return bc(()=>{let t=hh(e);return gh(t),t})}function mh(e){return{type:e.type,name:e.name,factory:null,pure:e.pure!==!1,standalone:e.standalone??!0,onDestroy:e.type.prototype.ngOnDestroy||null}}function hh(e){let t={};return{type:e.type,providersResolver:null,viewProvidersResolver:null,factory:null,hostBindings:e.hostBindings||null,hostVars:e.hostVars||0,hostAttrs:e.hostAttrs||null,contentQueries:e.contentQueries||null,declaredInputs:t,inputConfig:e.inputs||ba,exportAs:e.exportAs||null,standalone:e.standalone??!0,signals:e.signals===!0,selectors:e.selectors||xa,viewQuery:e.viewQuery||null,features:e.features||null,setInput:null,resolveHostDirectives:null,hostDirectives:null,controlDef:null,signalFormsInputPresence:null,inputs:dh(e.inputs,t),outputs:fh(e.outputs),debugInfo:null}}function gh(e){e.features?.forEach(t=>t(e))}function _h(e,t){return e?()=>{let n=typeof e==`function`?e():e,r=[];for(let e of n){let n=t(e);n!==null&&r.push(n)}return r}:null}function vh(e){let t=0,n=typeof e.consts==`function`?``:e.consts,r=[e.selectors,e.ngContentSelectors,e.hostVars,e.hostAttrs,n,e.vars,e.decls,e.encapsulation,e.standalone,e.signals,e.exportAs,JSON.stringify(e.inputs),JSON.stringify(e.outputs),Object.getOwnPropertyNames(e.type.prototype),!!e.contentQueries,!!e.viewQuery];for(let e of r.join(`|`))t=Math.imul(31,t)+e.charCodeAt(0)<<0;return t+=2147483648,`c`+t}var yh=new Oi(``),bh=(()=>{class e{resolve;reject;initialized=!1;done=!1;donePromise=new Promise((e,t)=>{this.resolve=e,this.reject=t});appInits=x(yh,{optional:!0})??[];injector=x(xs);constructor(){}runInitializers(){if(this.initialized)return;let e=[];for(let t of this.appInits){let n=eo(this.injector,t);if(ih(n))e.push(n);else if(ah(n)){let t=new Promise((e,t)=>{n.subscribe({complete:e,error:t})});e.push(t)}}let t=()=>{this.done=!0,this.resolve()};Promise.all(e).then(()=>{t()}).catch(e=>{this.reject(e)}),e.length===0&&t(),this.initialized=!0}static ɵfac=function(t){return new(t||e)};static ɵprov=Al({token:e,factory:e.ɵfac})}return e})();function xh(e){return t=>{t.controlDef={create:(e,t)=>{e?.ɵngControlCreate(t)},update:(e,t)=>{e?.ɵngControlUpdate?.(t)},passThroughInput:e}}}function Sh(e){return Object.getPrototypeOf(e.prototype).constructor}function Ch(e){let t=Sh(e.type),n=!0,r=[e];for(;t&&t!==Function.prototype&&t!==Object.prototype;){let i,a=Object.hasOwn(t,Ai)?t[Ai]:void 0,o=Object.hasOwn(t,ji)?t[ji]:void 0;if(co(e))i=a??o;else{if(a)throw new pi(903,!1);i=o}if(i){if(n){r.push(i);let t=e;t.inputs=Eh(e.inputs),t.declaredInputs=Eh(e.declaredInputs),t.outputs=Eh(e.outputs);let n=i.hostBindings;n&&kh(e,n);let a=i.viewQuery,o=i.contentQueries;if(a&&Dh(e,a),o&&Oh(e,o),wh(e,i),Vee(e.outputs,i.outputs),co(i)&&i.data.animation){let t=e.data;t.animation=(t.animation||[]).concat(i.data.animation)}}let t=i.features;if(t)for(let r=0;r=0;r--){let i=e[r];i.hostVars=t+=i.hostVars,i.hostAttrs=Xc(i.hostAttrs,n=Xc(n,i.hostAttrs))}}function Eh(e){return e===ba?{}:e===xa?[]:e}function Dh(e,t){let n=e.viewQuery;e.viewQuery=n?(e,r)=>{t(e,r),n(e,r)}:t}function Oh(e,t){let n=e.contentQueries;e.contentQueries=n?(e,r,i)=>{t(e,r,i),n(e,r,i)}:t}function kh(e,t){let n=e.hostBindings;e.hostBindings=n?(e,r)=>{t(e,r),n(e,r)}:t}function Ah(e,t,n,r,i,a,o,s){if(n.firstCreatePass){e.mergedAttrs=Xc(e.mergedAttrs,e.attrs);let t=e.tView=Md(2,e,i,a,o,n.directiveRegistry,n.pipeRegistry,null,n.schemas,n.consts,null);n.queries!==null&&(n.queries.template(n,e),t.queries=n.queries.embeddedTView(e))}s&&(e.flags|=s),Go(e,!1);let c=Ph(n,t,e,r);_s()&&Cd(n,t,c,e),Gl(c,t);let l=Bf(c,t,c,e);t[r+27]=l,zd(t,l),Nm(l,e,t)}function jh(e,t,n,r,i,a,o,s,c,l,u){let d=n+27,f;return t.firstCreatePass?(f=Zf(t,d,4,o||null,s||null),Lo()&&Gp(t,e,f,Co(t.consts,l),ef),Ic(t,f)):f=t.data[d],Ah(f,e,t,n,r,i,a,c),so(f)&&Wd(t,e,f),l!=null&&Gd(e,f,u),f}function Mh(e,t,n,r,i,a,o,s,c,l,u){let d=n+27,f;if(t.firstCreatePass){if(f=Zf(t,d,4,o||null,s||null),l!=null){let e=Co(t.consts,l);f.localNames=[];for(let t=0;t{throw new pi(600,``)})}var zh=10,Bh=(()=>{class e{_runningTick=!1;_destroyed=!1;_destroyListeners=[];_views=[];internalErrorHandler=x(Js);afterRenderManager=x(ad);zonelessEnabled=x(ac);rootEffectScheduler=x(sc);dirtyFlags=0;tracingSnapshot=null;allTestViews=new Set;autoDetectTestViews=new Set;includeAllTestViews=!1;afterTick=new Wr;get allViews(){return[...(this.includeAllTestViews?this.allTestViews:this.autoDetectTestViews).keys(),...this._views]}get destroyed(){return this._destroyed}componentTypes=[];components=[];internalPendingTask=x(Ds);get isStable(){return this.internalPendingTask.hasPendingTasksObservable.pipe(di(e=>!e))}constructor(){x(nd,{optional:!0})}whenStable(){let e;return new Promise(t=>{e=this.isStable.subscribe({next:e=>{e&&t()}})}).finally(()=>{e.unsubscribe()})}_injector=x(Ha);_rendererFactory=null;get injector(){return this._injector}bootstrap(e,t){return this.bootstrapImpl(e,t)}bootstrapImpl(e,t,n=xs.NULL){return this._injector.get(Fs).run(()=>{if(Pc(xc.BootstrapComponentStart),!this._injector.get(bh).done)throw new pi(405,``);let r=Ii(e),i=this._injector.get(oh),a=new _m(r,i);this.componentTypes.push(e);let{hostElement:o,directives:s,bindings:c}=Vh(t),l=o||a.selector,u=a.create(n,[],l,i.injector,s,c),d=u.location.nativeElement,f=u.injector.get(Ih,null);return f?.registerApplication(d),u.onDestroy(()=>{this.detachView(u.hostView),Hh(this.components,u),f?.unregisterApplication(d)}),this._loadComponent(u),Pc(xc.BootstrapComponentEnd,u),u})}tick(){this.zonelessEnabled||(this.dirtyFlags|=1),this._tick()}_tick(){Pc(xc.ChangeDetectionStart),this.tracingSnapshot===null?this.tickImpl():this.tracingSnapshot.run(td.CHANGE_DETECTION,this.tickImpl)}tickImpl=()=>{if(this._runningTick)throw Pc(xc.ChangeDetectionEnd),new pi(101,!1);let e=an(null);try{this._runningTick=!0,this.synchronize()}finally{this._runningTick=!1,this.tracingSnapshot?.dispose(),this.tracingSnapshot=null,an(e),this.afterTick.next(),Pc(xc.ChangeDetectionEnd)}};synchronize(){this._rendererFactory===null&&!this._injector.destroyed&&(this._rendererFactory=this._injector.get(cp,null,{optional:!0}));let e=0;for(;this.dirtyFlags!==0&&e++Do(e))){this.dirtyFlags|=2;return}this.dirtyFlags&=-8}attachView(e){let t=e;this._views.push(t),t.attachToAppRef(this)}detachView(e){let t=e;Hh(this._views,t),t.detachFromAppRef()}_loadComponent(e){this.attachView(e.hostView);try{this.tick()}catch(e){this.internalErrorHandler(e)}this.components.push(e),this._injector.get(Lh,[]).forEach(t=>t(e))}ngOnDestroy(){if(!this._destroyed)try{this._destroyListeners.forEach(e=>e()),this._views.slice().forEach(e=>e.destroy())}finally{this._destroyed=!0,this._views=[],this._destroyListeners=[]}}onDestroy(e){return this._destroyListeners.push(e),()=>Hh(this._destroyListeners,e)}destroy(){if(this._destroyed)throw new pi(406,!1);let e=this._injector;e.destroy&&!e.destroyed&&e.destroy()}get viewCount(){return this._views.length}static ɵfac=function(t){return new(t||e)};static ɵprov=Al({token:e,factory:e.ɵfac})}return e})();function Vh(e){return e===void 0||typeof e==`string`||e instanceof Element?{hostElement:e}:e}function Hh(e,t){let n=e.indexOf(t);n>-1&&e.splice(n,1)}function k(e,t,n,r){let i=Vo();return _p(i,$o(),t)&&(Ho(),tf(fs(),i,e,t,n,r)),k}function Uh(e){if(id(`NgAnimateEnter`),!Gu)return Uh;let t=Vo();if(Ete(t))return Uh;let n=Uo(),r=t[9].get(Fs);return jte(Qu(t),n,()=>Wh(t,n,e,r)),Lte(t[9]),fd(t[9],Qu(t)),Uh}function Wh(e,t,n,r){let i=go(t,e),a=e[11],o=Ate(n),s=[],c=!1,l=e=>{if($u(e)!==i)return;let t=e instanceof AnimationEvent?`animationend`:`transitionend`;r.runOutsideAngular(()=>{a.listen(i,t,u)})},u=e=>{$u(e)===i&&(ed(e,i)&&(c=!0),Gh(e,i,a))};if(o&&o.length>0){r.runOutsideAngular(()=>{s.push(a.listen(i,`animationstart`,l)),s.push(a.listen(i,`transitionstart`,l))}),Dte(i,o,s);for(let e of o)a.addClass(i,e);r.runOutsideAngular(()=>{requestAnimationFrame(()=>{if(!c&&(Ste(i,Ju,Gu),!Ju.has(i))){for(let e of o)a.removeClass(i,e);Ku(i)}})})}}function Gh(e,t,n){let r=qu.get(t);if($u(e)===t&&r&&ed(e,t)){e.stopPropagation();for(let e of r.classList)n.removeClass(t,e);Ku(t)}}var Kh=class{destroy(e){}updateValue(e,t){}swap(e,t){let n=Math.min(e,t),r=Math.max(e,t),i=this.detach(r);if(r-n>1){let e=this.detach(n);this.attach(n,i),this.attach(r,e)}else this.attach(n,i)}move(e,t){this.attach(t,this.detach(e))}};function qh(e,t,n,r,i){return e===n&&Object.is(t,r)?1:Object.is(i(e,t),i(n,r))?-1:0}function Jh(e,t,n,r){let i,a,o=0,s=e.length-1;if(Array.isArray(t)){an(r);let c=t.length-1;for(an(null);o<=s&&o<=c;){let r=e.at(o),l=t[o],u=qh(o,r,o,l,n);if(u!==0){u<0&&e.updateValue(o,l),o++;continue}let d=e.at(s),f=t[c],p=qh(s,d,c,f,n);if(p!==0){p<0&&e.updateValue(s,f),s--,c--;continue}let m=n(o,r),ee=n(s,d),h=n(o,l);if(Object.is(h,ee)){let t=n(c,f);Object.is(t,m)?(e.swap(o,s),e.updateValue(s,f),c--,s--):e.move(s,o),e.updateValue(o,l),o++;continue}if(i??=new Qh,a??=Zh(e,o,s,n),Yh(e,i,o,h))e.updateValue(o,l),o++,s++;else if(a.has(h))i.set(m,e.detach(o)),s--;else{let n=e.create(o,t[o]);e.attach(o,n),o++,s++}}for(;o<=c;)Xh(e,i,n,o,t[o]),o++}else if(t!=null){an(r);let c=t[Symbol.iterator]();an(null);let l=c.next();for(;!l.done&&o<=s;){let t=e.at(o),r=l.value,u=qh(o,t,o,r,n);if(u!==0)u<0&&e.updateValue(o,r),o++,l=c.next();else{i??=new Qh,a??=Zh(e,o,s,n);let u=n(o,r);if(Yh(e,i,o,u))e.updateValue(o,r),o++,s++,l=c.next();else if(!a.has(u))e.attach(o,e.create(o,r)),o++,s++,l=c.next();else{let r=n(o,t);i.set(r,e.detach(o)),s--}}}for(;!l.done;)Xh(e,i,n,e.length,l.value),l=c.next()}for(;o<=s;)e.destroy(e.detach(s--));i?.forEach(t=>{e.destroy(t)})}function Yh(e,t,n,r){return t!==void 0&&t.has(r)?(e.attach(n,t.get(r)),t.delete(r),!0):!1}function Xh(e,t,n,r,i){if(Yh(e,t,r,n(r,i)))e.updateValue(r,i);else{let t=e.create(r,i);e.attach(r,t)}}function Zh(e,t,n,r){let i=new Set;for(let a=t;a<=n;a++)i.add(r(a,e.at(a)));return i}var Qh=class{kvMap=new Map;_vMap=void 0;has(e){return this.kvMap.has(e)}delete(e){if(!this.has(e))return!1;let t=this.kvMap.get(e);return this._vMap!==void 0&&this._vMap.has(t)?(this.kvMap.set(e,this._vMap.get(t)),this._vMap.delete(t)):this.kvMap.delete(e),!0}get(e){return this.kvMap.get(e)}set(e,t){if(this.kvMap.has(e)){let n=this.kvMap.get(e);this._vMap===void 0&&(this._vMap=new Map);let r=this._vMap;for(;r.has(n);)n=r.get(n);r.set(n,t)}else this.kvMap.set(e,t)}forEach(e){for(let[t,n]of this.kvMap)if(e(n,t),this._vMap!==void 0){let r=this._vMap;for(;r.has(n);)n=r.get(n),e(n,t)}}};function A(e,t,n,r,i,a,o,s){id(`NgControlFlow`);let c=Vo(),l=Ho();return Mh(c,l,e,t,n,r,i,Co(l.consts,a),256,o,s),$h}function $h(e,t,n,r,i,a,o,s){id(`NgControlFlow`);let c=Vo(),l=Ho();return Mh(c,l,e,t,n,r,i,Co(l.consts,a),512,o,s),$h}function j(e,t){id(`NgControlFlow`);let n=Vo(),r=$o(),i=n[r]===Iu?-1:n[r],a=i===-1?void 0:ag(n,27+i);if(_p(n,r,e)){let r=an(null);try{if(a!==void 0&&Uf(a,0),e!==-1){let r=27+e,i=ag(n,r),a=ug(n[1],r),o=op(i,a,n);Hf(i,mf(n,a,t,{dehydratedView:o}),0,hf(a,o))}}finally{an(r)}}else if(a!==void 0){let e=Vf(a,0);e!==void 0&&(e[8]=t)}}var eg=class{lContainer;$implicit;$index;constructor(e,t,n){this.lContainer=e,this.$implicit=t,this.$index=n}get $count(){return this.lContainer.length-10}};function tg(e){return e}function ng(e,t){return t}var rg=class{hasEmptyBlock;trackByFn;liveCollection;constructor(e,t,n){this.hasEmptyBlock=e,this.trackByFn=t,this.liveCollection=n}};function M(e,t,n,r,i,a,o,s,c,l,u,d,f){id(`NgControlFlow`);let p=Vo(),m=Ho(),ee=c!==void 0,h=Vo(),g=new rg(ee,s?o.bind(h[15][8]):o);h[27+e]=g,Mh(p,m,e+1,t,n,r,i,Co(m.consts,a),256),ee&&Mh(p,m,e+2,c,l,u,d,Co(m.consts,f),512)}var ig=class extends Kh{lContainer;hostLView;templateTNode;operationsCounter=void 0;needsIndexUpdate=!1;constructor(e,t,n){super(),this.lContainer=e,this.hostLView=t,this.templateTNode=n}get length(){return this.lContainer.length-10}at(e){return this.getLView(e)[8].$implicit}attach(e,t){let n=t[6];this.needsIndexUpdate||=e!==this.length,Hf(this.lContainer,t,e,hf(this.templateTNode,n)),og(this.lContainer,e)}detach(e){return this.needsIndexUpdate||=e!==this.length-1,sg(this.lContainer,e),cg(this.lContainer,e)}create(e,t){let n=ap(this.lContainer,this.templateTNode.tView.ssrId);return mf(this.hostLView,this.templateTNode,new eg(this.lContainer,t,e),{dehydratedView:n})}destroy(e){yd(e[1],e)}updateValue(e,t){this.getLView(e)[8].$implicit=t}reset(){this.needsIndexUpdate=!1}updateIndexes(){if(this.needsIndexUpdate)for(let e=0;e0){let e=n[9];Fte(e,r),Wu.delete(n[19]),r.detachedLeaveAnimationFns=void 0}}function sg(e,t){if(e.length<=10)return;let n=e[10+t],r=n?n[26]:void 0;r&&r.leave&&r.leave.size>0&&(r.detachedLeaveAnimationFns=[])}function cg(e,t){return Wf(e,t)}function lg(e,t){return Vf(e,t)}function ug(e,t){return _o(e,t)}function P(e,t,n){let r=Vo();return _p(r,$o(),t)&&(Ho(),Jd(fs(),r,e,t,r[11],n)),P}function dg(e,t,n,r,i){cf(t,e,n,i?`class`:`style`,r)}function F(e,t,n,r){let i=Vo(),a=i[1],o=e+27,s=a.firstCreatePass?am(o,i,2,t,ef,Lo(),n,r):a.data[o];if(oo(s)){let n=i[10].tracingService;if(n&&n.componentCreate){let o=a.data[s.directiveStart+s.componentOffset];return n.componentCreate(fp(o),()=>(fg(e,t,i,s,r),F))}}return fg(e,t,i,s,r),F}function fg(e,t,n,r,i){if(af(r,n,e,t,mg),so(r)){let e=n[1];Wd(e,n,r),su(e,r,n)}i!=null&&Gd(n,r)}function I(){let e=Ho(),t=of(Uo());return e.firstCreatePass&&om(e,t),zo(t)&&Bo(),Io(),t.classesWithoutHost!=null&&Gc(t)&&dg(e,t,Vo(),t.classesWithoutHost,!0),t.stylesWithoutHost!=null&&Kc(t)&&dg(e,t,Vo(),t.stylesWithoutHost,!1),I}function L(e,t,n,r){return F(e,t,n,r),I(),L}function R(e,t,n,r){let i=Vo(),a=i[1],o=e+27,s=a.firstCreatePass?sm(o,a,2,t,n,r):a.data[o];return af(s,i,e,t,mg),r!=null&&Gd(i,s),R}function z(){return zo(of(Uo()))&&Bo(),Io(),z}function pg(e,t,n,r){return R(e,t,n,r),z(),pg}var mg=(e,t,n,r,i)=>(vs(!0),Su(t[11],r,hs()));function hg(e,t,n){let r=Vo(),i=r[1],a=e+27,o=i.firstCreatePass?am(a,r,8,`ng-container`,ef,Lo(),t,n):i.data[a];if(af(o,r,e,`ng-container`,vg),so(o)){let e=r[1];Wd(e,r,o),su(e,o,r)}return n!=null&&Gd(r,o),hg}function gg(){let e=Ho(),t=of(Uo());return e.firstCreatePass&&om(e,t),gg}function _g(e,t,n){return hg(e,t,n),gg(),_g}var vg=(e,t,n,r,i)=>(vs(!0),xu(t[11],``));function B(){return Vo()}function V(e,t,n){let r=Vo();return _p(r,$o(),t)&&(Ho(),Yd(fs(),r,e,t,r[11],n)),V}var yg=void 0;function bg(e){let t=Math.floor(Math.abs(e)),n=e.toString().replace(/^[^.]*\.?/,``).length;return t===1&&n===0?1:5}var xg=[`en`,[[`a`,`p`],[`AM`,`PM`]],[[`AM`,`PM`]],[[`S`,`M`,`T`,`W`,`T`,`F`,`S`],[`Sun`,`Mon`,`Tue`,`Wed`,`Thu`,`Fri`,`Sat`],[`Sunday`,`Monday`,`Tuesday`,`Wednesday`,`Thursday`,`Friday`,`Saturday`],[`Su`,`Mo`,`Tu`,`We`,`Th`,`Fr`,`Sa`]],yg,[[`J`,`F`,`M`,`A`,`M`,`J`,`J`,`A`,`S`,`O`,`N`,`D`],[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`],[`January`,`February`,`March`,`April`,`May`,`June`,`July`,`August`,`September`,`October`,`November`,`December`]],yg,[[`B`,`A`],[`BC`,`AD`],[`Before Christ`,`Anno Domini`]],0,[6,0],[`M/d/yy`,`MMM d, y`,`MMMM d, y`,`EEEE, MMMM d, y`],[`h:mm a`,`h:mm:ss a`,`h:mm:ss a z`,`h:mm:ss a zzzz`],[`{1}, {0}`,yg,yg,yg],[`.`,`,`,`;`,`%`,`+`,`-`,`E`,`×`,`‰`,`∞`,`NaN`,`:`],[`#,##0.###`,`#,##0%`,`¤#,##0.00`,`#E0`],`USD`,`$`,`US Dollar`,{},`ltr`,bg],Sg=Object.create(null);function Cg(e){let t=Eg(e),n=wg(t);if(n)return n;let r=t.split(`-`)[0];if(n=wg(r),n)return n;if(r===`en`)return xg;throw new pi(701,!1)}function wg(e){if(!(e in Sg)){let t=Qi.ng&&Qi.ng.common&&Qi.ng.common.locales&&Qi.ng.common.locales[e];return t!==void 0&&(Sg[e]=t),t}return Sg[e]}var Tg={LocaleId:0,DayPeriodsFormat:1,DayPeriodsStandalone:2,DaysFormat:3,DaysStandalone:4,MonthsFormat:5,MonthsStandalone:6,Eras:7,FirstDayOfWeek:8,WeekendRange:9,DateFormat:10,TimeFormat:11,DateTimeFormat:12,NumberSymbols:13,NumberFormats:14,CurrencyCode:15,CurrencySymbol:16,CurrencyName:17,Currencies:18,Directionality:19,PluralCase:20,ExtraData:21};function Eg(e){return e.toLowerCase().replace(/_/g,`-`)}var Dg=`en-US`;function Og(e){typeof e==`string`&&e.toLowerCase().replace(/_/g,`-`)}function H(e,t,n){let r=Vo(),i=Ho(),a=Uo();return kg(i,r,r[11],a,e,t,n),H}function U(e,t,n){let r=Vo(),i=Ho(),a=Uo();return(a.type&3||n)&&Cp(a,i,r,n,r[11],e,t,xp(a,r,t)),U}function kg(e,t,n,r,i,a,o){let s=!0,c=null;if((r.type&3||o)&&(c??=xp(r,t,a),Cp(r,e,t,o,n,i,a,c)&&(s=!1)),s){let e=r.outputs?.[i],n=r.hostDirectiveOutputs?.[i];if(n&&n.length)for(let e=0;e>17&32767}function zg(e){return(e&2)==2}function Bg(e,t){return e&131071|t<<17}function Vg(e){return e|2}function Hg(e){return(e&131068)>>2}function Ug(e,t){return e&-131069|t<<2}function Wg(e){return(e&1)==1}function Gg(e){return e|1}function Kg(e,t,n,r,i,a){let o=a?t.classBindings:t.styleBindings,s=Rg(o),c=Hg(o);e[r]=n;let l=!1,u;if(Array.isArray(n)){let e=n;u=e[1],(u===null||va(e,u)>0)&&(l=!0)}else u=n;if(i){if(c!==0){let t=Rg(e[s+1]);e[r+1]=Lg(t,s),t!==0&&(e[t+1]=Ug(e[t+1],r)),e[s+1]=Bg(e[s+1],r)}else e[r+1]=Lg(s,0),s!==0&&(e[s+1]=Ug(e[s+1],r)),s=r}else e[r+1]=Lg(c,0),s===0?s=r:e[c+1]=Ug(e[c+1],r),c=r;l&&(e[r+1]=Vg(e[r+1])),Jg(e,u,r,!0),Jg(e,u,r,!1),qg(t,u,e,r,a),o=Lg(s,c),a?t.classBindings=o:t.styleBindings=o}function qg(e,t,n,r,i){let a=i?e.residualClasses:e.residualStyles;a!=null&&typeof t==`string`&&va(a,t)>=0&&(n[r+1]=Gg(n[r+1]))}function Jg(e,t,n,r){let i=e[n+1],a=t===null,o=r?Rg(i):Hg(i),s=!1;for(;o!==0&&(s===!1||a);){let n=e[o],i=e[o+1];Yg(n,t)&&(s=!0,e[o+1]=r?Gg(i):Vg(i)),o=r?Rg(i):Hg(i)}s&&(e[n+1]=r?Vg(i):Gg(i))}function Yg(e,t){return e===null||t==null||(Array.isArray(e)?e[1]:e)===t?!0:Array.isArray(e)&&typeof t==`string`?va(e,t)>=0:!1}var Xg={textEnd:0,key:0,keyEnd:0,value:0,valueEnd:0};function Zg(e){return e.substring(Xg.key,Xg.keyEnd)}function Qg(e){return e_(e),$g(e,t_(e,0,Xg.textEnd))}function $g(e,t){let n=Xg.textEnd;return n===t?-1:(t=Xg.keyEnd=n_(e,Xg.key=t,n),t_(e,t,n))}function e_(e){Xg.key=0,Xg.keyEnd=0,Xg.value=0,Xg.valueEnd=0,Xg.textEnd=e.length}function t_(e,t,n){for(;t32;)t++;return t}function r_(e,t,n){return o_(e,t,n,!1),r_}function G(e,t){return o_(e,t,null,!0),G}function i_(e){s_(__,a_,e,!0)}function a_(e,t){for(let n=Qg(t);n>=0;n=$g(t,n))ga(e,Zg(t),!0)}function o_(e,t,n,r){let i=Vo(),a=Ho(),o=es(2);if(a.firstUpdatePass&&l_(a,e,o,r),t!==Iu&&_p(i,o,t)){let s=a.data[us()];y_(a,s,i,i[11],e,i[o+1]=S_(t,n),r,o)}}function s_(e,t,n,r){let i=Ho(),a=es(2);i.firstUpdatePass&&l_(i,null,a,r);let o=Vo();if(n!==Iu&&_p(o,a,n)){let s=i.data[us()];if(C_(s,r)&&!c_(i,a)){let e=r?s.classesWithoutHost:s.stylesWithoutHost;e!==null&&(n=_i(e,n||``)),dg(i,s,o,n,r)}else v_(i,s,o,o[11],o[a+1],o[a+1]=g_(e,t,n),r,a)}}function c_(e,t){return t>=e.expandoStartIndex}function l_(e,t,n,r){let i=e.data;if(i[n+1]===null){let a=i[us()],o=c_(e,n);C_(a,r)&&t===null&&!o&&(t=!1),t=u_(i,a,t,r),Kg(i,a,t,n,o,r)}}function u_(e,t,n,r){let i=Qee(e),a=r?t.residualClasses:t.residualStyles;if(i===null)(r?t.classBindings:t.styleBindings)===0&&(n=m_(null,e,t,n,r),n=h_(n,t.attrs,r),a=null);else{let o=t.directiveStylingLast;if(o===-1||e[o]!==i){if(n=m_(i,e,t,n,r),a===null){let n=d_(e,t,r);n!==void 0&&Array.isArray(n)&&(n=m_(null,e,t,n[1],r),n=h_(n,t.attrs,r),f_(e,t,r,n))}else a=p_(e,t,r)}}return a!==void 0&&(r?t.residualClasses=a:t.residualStyles=a),n}function d_(e,t,n){let r=n?t.classBindings:t.styleBindings;if(Hg(r)!==0)return e[Rg(r)]}function f_(e,t,n,r){let i=n?t.classBindings:t.styleBindings;e[Rg(i)]=r}function p_(e,t,n){let r,i=t.directiveEnd;for(let a=1+t.directiveStylingLast;a0;){let t=e[i],a=Array.isArray(t),c=a?t[1]:t,l=c===null,u=n[i+1];u===Iu&&(u=l?xa:void 0);let d=l?_a(u,r):c===r?u:void 0;if(a&&!x_(d)&&(d=_a(t,r)),x_(d)&&(s=d,o))return s;let f=e[i+1];i=o?Rg(f):Hg(f)}if(t!==null){let e=a?t.residualClasses:t.residualStyles;e!=null&&(s=_a(e,r))}return s}function x_(e){return e!==void 0}function S_(e,t){return e==null||e===``||(typeof t==`string`?e=uu(e)+t:typeof e==`object`&&(e=gi(uu(e)))),e}function C_(e,t){return!!(e.flags&(t?8:16))}function K(e,t=``){let n=Vo(),r=Ho(),i=e+27,a=r.firstCreatePass?Zf(r,i,1,t,null):r.data[i],o=w_(r,n,a,t);n[i]=o,_s()&&Cd(r,n,o,a),Go(a,!1)}var w_=(e,t,n,r)=>(vs(!0),yu(t[11],r));function T_(e,t,n,r=``){return _p(e,$o(),n)?t+Bi(n)+r:Iu}function E_(e,t,n,r,i,a=``){let o=vp(e,Qo(),n,i);return es(2),o?t+Bi(n)+r+Bi(i)+a:Iu}function D_(e,t,n,r,i,a,o,s=``){let c=yp(e,Qo(),n,i,o);return es(3),c?t+Bi(n)+r+Bi(i)+a+Bi(o)+s:Iu}function O_(e,t,n,r,i,a,o,s,c,l=``){let u=bp(e,Qo(),n,i,o,c);return es(4),u?t+Bi(n)+r+Bi(i)+a+Bi(o)+s+Bi(c)+l:Iu}function q(e){return J(``,e),q}function J(e,t,n){let r=Vo(),i=T_(r,e,t,n);return i!==Iu&&j_(r,us(),i),J}function Y(e,t,n,r,i){let a=Vo(),o=E_(a,e,t,n,r,i);return o!==Iu&&j_(a,us(),o),Y}function k_(e,t,n,r,i,a,o){let s=Vo(),c=D_(s,e,t,n,r,i,a,o);return c!==Iu&&j_(s,us(),c),k_}function A_(e,t,n,r,i,a,o,s,c){let l=Vo(),u=O_(l,e,t,n,r,i,a,o,s,c);return u!==Iu&&j_(l,us(),u),A_}function j_(e,t,n){let r=ho(t,e);bu(e[11],r,n)}function M_(e,t,n){_c(t)&&(t=t());let r=Vo();return _p(r,$o(),t)&&(Ho(),Jd(fs(),r,e,t,r[11],n)),M_}function N_(e,t){let n=_c(e);return n&&e.set(t),n}function P_(e,t){let n=Vo(),r=Ho(),i=Uo();return kg(r,n,n[11],i,e,t),P_}var F_={};function I_(e){id(`NgLet`);let t=Ho(),n=Vo(),r=e+27;return Go(Zf(t,r,128,null,null),!1),yo(t,n,r,F_),I_}function L_(e){return yo(Ho(),Vo(),us(),e),e}function R_(e){let t=vo(Jo(),27+e);if(t===F_)throw new pi(314,!1);return t}function z_(e,t,n=``){return T_(Vo(),e,t,n)}function B_(e,t,n){let r=Ho();r.firstCreatePass&&V_(t,r.data,r.blueprint,co(e),n)}function V_(e,t,n,r,i){if(e=yi(e),Array.isArray(e))for(let a=0;a>20;if(Fa(e)||!e.multi){let r=new Wc(l,i,Wp,null),p=W_(c,t,i?u:u+f,d);p===-1?(pl(ll(s,o),a,c),H_(a,e,t.length),t.push(c),s.directiveStart++,s.directiveEnd++,i&&(s.providerIndexes+=1048576),n.push(r),o.push(r)):(n[p]=r,o[p]=r)}else{let p=W_(c,t,u+f,d),m=W_(c,t,u,u+f),ee=p>=0&&n[p],h=m>=0&&n[m];if(i&&!h||!i&&!ee){pl(ll(s,o),a,c);let u=ene(i?$te:Qte,n.length,i,r,l,e);!i&&h&&(n[m].providerFactory=u),H_(a,e,t.length,0),t.push(c),s.directiveStart++,s.directiveEnd++,i&&(s.providerIndexes+=1048576),n.push(u),o.push(u)}else{let t=U_(n[i?m:p],l,!i&&r);H_(a,e,p>-1?p:m,t)}!i&&r&&h&&n[m].componentProviders++}}}function H_(e,t,n,r){let i=Fa(t),a=Ia(t);if(i||a){let o=(a?yi(t.useClass):t).prototype.ngOnDestroy;if(o){let a=e.destroyHooks||=[];if(!i&&t.multi){let e=a.indexOf(n);e===-1?a.push(n,[r,o]):a[e+1].push(r,o)}else a.push(n,o)}}}function U_(e,t,n){return n&&e.componentProviders++,e.multi.push(t)-1}function W_(e,t,n,r){for(let i=n;i{n.providersResolver=(t,n)=>B_(t,n?n(e):e,!1),t&&(n.viewProvidersResolver=(e,n)=>B_(e,n?n(t):t,!0))}}function q_(e,t){let n=Zo()+e,r=Vo();return r[n]===Iu?hp(r,n,t()):gp(r,n)}function J_(e,t,n){return Z_(Vo(),Zo(),e,t,n)}function Y_(e,t,n,r){return Q_(Vo(),Zo(),e,t,n,r)}function tne(e,t,n,r,i,a,o){return nne(Vo(),Zo(),e,t,n,r,i,a)}function X_(e,t){let n=e[t];return n===Iu?void 0:n}function Z_(e,t,n,r,i,a){let o=t+n;return _p(e,o,i)?hp(e,o+1,a?r.call(a,i):r(i)):X_(e,o+1)}function Q_(e,t,n,r,i,a,o){let s=t+n;return vp(e,s,i,a)?hp(e,s+2,o?r.call(o,i,a):r(i,a)):X_(e,s+2)}function nne(e,t,n,r,i,a,o,s,c){let l=t+n;return bp(e,l,i,a,o,s)?hp(e,l+4,c?r.call(c,i,a,o,s):r(i,a,o,s)):X_(e,l+4)}function $_(e,t){let n=Ho(),r,i=e+27;n.firstCreatePass?(r=rne(t,n.pipeRegistry),n.data[i]=r,r.onDestroy&&(n.destroyHooks??=[]).push(i,r.onDestroy)):r=n.data[i];let a=r.factory||(r.factory=ca(r.type,!0)),o=Xi(Wp);try{let e=rl(!1),t=a();return rl(e),yo(n,Vo(),i,t),t}finally{Xi(o)}}function rne(e,t){if(t)for(let n=t.length-1;n>=0;n--){let r=t[n];if(e===r.name)return r}}function ev(e,t,n){let r=e+27,i=Vo(),a=vo(i,r);return nv(i,r)?Z_(i,Zo(),t,a.transform,n,a):a.transform(n)}function tv(e,t,n,r){let i=e+27,a=Vo(),o=vo(a,i);return nv(a,i)?Q_(a,Zo(),t,o.transform,n,r,o):o.transform(n,r)}function nv(e,t){return e[1].data[t].pure}function rv(e,t){return Xf(e,t)}var ine=(()=>{class e{applicationErrorHandler=x(Js);appRef=x(Bh);taskService=x(Ds);ngZone=x(Fs);zonelessEnabled=x(ac);tracing=x(nd,{optional:!0});zoneIsDefined=typeof Zone<`u`&&!!Zone.root.run;schedulerTickApplyArgs=[{data:{__scheduler_tick__:!0}}];subscriptions=new cr;angularZoneId=this.zoneIsDefined?this.ngZone._inner?.get(Ns):null;scheduleInRootZone=!this.zonelessEnabled&&this.zoneIsDefined&&(x(oc,{optional:!0})??!1);cancelScheduledCallback=null;useMicrotaskScheduler=!1;runningTick=!1;pendingRenderTaskId=null;constructor(){this.subscriptions.add(this.appRef.afterTick.subscribe(()=>{let e=this.taskService.add();if(!this.runningTick&&(this.cleanup(),!this.zonelessEnabled||this.appRef.includeAllTestViews)){this.taskService.remove(e);return}this.switchToMicrotaskScheduler(),this.taskService.remove(e)})),this.subscriptions.add(this.ngZone.onUnstable.subscribe(()=>{this.runningTick||this.cleanup()}))}switchToMicrotaskScheduler(){this.ngZone.runOutsideAngular(()=>{let e=this.taskService.add();this.useMicrotaskScheduler=!0,queueMicrotask(()=>{this.useMicrotaskScheduler=!1,this.taskService.remove(e)})})}notify(e){if(!this.zonelessEnabled&&e===5)return;switch(e){case 0:case 2:this.appRef.dirtyFlags|=2;break;case 3:case 4:case 5:case 1:this.appRef.dirtyFlags|=4;break;case 6:this.appRef.dirtyFlags|=2;break;case 12:this.appRef.dirtyFlags|=16;break;case 13:this.appRef.dirtyFlags|=2;break;case 11:break;default:this.appRef.dirtyFlags|=8}if(this.appRef.tracingSnapshot=this.tracing?.snapshot(this.appRef.tracingSnapshot)??null,!this.shouldScheduleTick())return;let t=this.useMicrotaskScheduler?js:As;this.pendingRenderTaskId=this.taskService.add(),this.cancelScheduledCallback=this.scheduleInRootZone?Zone.root.run(()=>t(()=>this.tick())):this.ngZone.runOutsideAngular(()=>t(()=>this.tick()))}shouldScheduleTick(){return!(this.appRef.destroyed||this.pendingRenderTaskId!==null||this.runningTick||this.appRef._runningTick||!this.zonelessEnabled&&this.zoneIsDefined&&Zone.current.get(`isAngularZone_ID`+this.angularZoneId))}tick(){if(this.runningTick||this.appRef.destroyed)return;if(this.appRef.dirtyFlags===0){this.cleanup();return}!this.zonelessEnabled&&this.appRef.dirtyFlags&7&&(this.appRef.dirtyFlags|=1);let e=this.taskService.add();try{this.ngZone.run(()=>{this.runningTick=!0,this.appRef._tick()},void 0,this.schedulerTickApplyArgs)}catch(e){this.applicationErrorHandler(e)}finally{this.taskService.remove(e),this.cleanup()}}ngOnDestroy(){this.subscriptions.unsubscribe(),this.cleanup()}cleanup(){if(this.runningTick=!1,this.cancelScheduledCallback?.(),this.cancelScheduledCallback=null,this.pendingRenderTaskId!==null){let e=this.pendingRenderTaskId;this.pendingRenderTaskId=null,this.taskService.remove(e)}}static ɵfac=function(t){return new(t||e)};static ɵprov=Al({token:e,factory:e.ɵfac})}return e})();function ane(){return[{provide:ic,useExisting:ine},{provide:Fs,useClass:Us},{provide:ac,useValue:!0}]}function one(){return typeof $localize<`u`&&$localize.locale||`en-US`}var iv=new Oi(``,{factory:()=>x(iv,{optional:!0,skipSelf:!0})||one()}),av=class{destroyed=!1;listeners=null;errorHandler=x(qs,{optional:!0});isEmitting=!1;hasNullListeners=!1;destroyRef=x(Cs);constructor(){this.destroyRef.onDestroy(()=>{this.destroyed=!0,this.listeners=null})}subscribe(e){if(this.destroyed)throw new pi(953,!1);return(this.listeners??=[]).push(e),{unsubscribe:()=>{let t=this.listeners?this.listeners.indexOf(e):-1;t>-1&&(this.isEmitting?(this.hasNullListeners=!0,this.listeners[t]=null):this.listeners.splice(t,1))}}}emit(e){if(this.destroyed){console.warn(mi(953,!1));return}if(this.listeners===null)return;this.isEmitting=!0;let t=an(null);try{for(let t of this.listeners)try{t!==null&&t(e)}catch(e){this.errorHandler?.handleError(e)}}finally{this.hasNullListeners&&(this.hasNullListeners=!1,this.listeners&&sne(this.listeners)),an(t),this.isEmitting=!1}}};function sne(e){let t=e.length-1;for(;t>-1;)e[t]===null&&e.splice(t,1),t--}function X(e,t){return En(e,t?.equal)}function Z(e){return qn(e)}(class e extends Error{_brand;constructor(e){super(e)}static IDLE=new e(`IDLE`);static LOADING=new e(`LOADING`)});var cne=e=>e;function Q(e,t){return typeof e==`function`?ov(Un(e,cne,t?.equal),t?.debugName,t?.set):ov(Un(e.source,e.computation,e.equal),e.debugName,e.set)}function ov(e,t,n){let r=e[rn],i=e;if(n!==void 0){let t=e=>Wn(r,e);i.set=e=>n(e,t),i.update=r=>n(r(Z(e)),t)}else i.set=e=>Wn(r,e),i.update=e=>Gn(r,e);return i.asReadonly=Xs.bind(e),i}var sv=!1;function lne(){return sv}function cv(e){sv=e}function lv(e,t){let n=Object.create(yc);n.value=e,n.transformFn=t?.transform;function r(){if(cn(n),n.value===vc)throw new pi(-950,null);return n.value}return r[rn]=n,r}function uv(e){return new av}function dv(e,t){return lv(e,t)}function une(e){return lv(vc,e)}var $=(dv.required=une,dv);function fv(e,t){let n=Object.create(yc),r=new av;n.value=e;function i(){return cn(n),pv(n.value),n.value}return i[rn]=n,i.asReadonly=Xs.bind(i),i.set=e=>{n.equal(n.value,e)||(Mn(n,e),r.emit(e))},i.update=e=>{pv(n.value),i.set(e(n.value))},i.subscribe=r.subscribe.bind(r),i.destroyRef=r.destroyRef,i}function pv(e){if(e===vc)throw new pi(952,!1)}function mv(e,t){return fv(e,t)}function dne(e){return fv(vc,e)}var hv=(mv.required=dne,mv);function gv(e,t){return eh(t)}function fne(e,t){return th(t)}var _v=(gv.required=fne,gv),pne=(()=>{class e{static __NG_ELEMENT_ID__=mne}return e})();function mne(e){return hne(Uo(),Vo(),(e&16)==16)}function hne(e,t,n){if(oo(e)&&!n){let n=bo(e.index,t);return new qf(n,n)}if(e.type&175){let e=t[15];return new qf(e,t)}return null}var vv=new Oi(``),gne=new Oi(``);function yv(e){return!e.moduleRef}function _ne(e){let t=yv(e)?e.r3Injector:e.moduleRef.injector,n=t.get(Fs);return n.run(()=>{yv(e)?e.r3Injector.resolveInjectorInitializers():e.moduleRef.resolveInjectorInitializers();let r=t.get(Js),i;if(n.runOutsideAngular(()=>{i=n.onError.subscribe({next:r})}),yv(e)){let n=()=>t.destroy(),r=e.platformInjector.get(vv);r.add(n),t.onDestroy(()=>{i.unsubscribe(),r.delete(n)})}else{let t=()=>e.moduleRef.destroy(),n=e.platformInjector.get(vv);n.add(t),e.moduleRef.onDestroy(()=>{Hh(e.allPlatformModules,e.moduleRef),i.unsubscribe(),n.delete(t)})}return yne(r,n,()=>{let n=t.get(Ds),r=n.add(),i=t.get(bh);return i.runInitializers(),i.donePromise.then(()=>{if(Og(t.get(iv,Dg)||`en-US`),!t.get(gne,!0))return yv(e)?t.get(Bh):(e.allPlatformModules.push(e.moduleRef),e.moduleRef);if(yv(e)){let n=t.get(Bh);return e.rootComponent!==void 0&&n.bootstrap(e.rootComponent),n}return vne?.(e.moduleRef,e.allPlatformModules),e.moduleRef}).finally(()=>void n.remove(r))})})}var vne;function yne(e,t,n){try{let r=n();return ih(r)?r.catch(n=>{throw t.runOutsideAngular(()=>e(n)),n}):r}catch(n){throw t.runOutsideAngular(()=>e(n)),n}}var bv=null;function bne(e=[],t){return xs.create({name:t,providers:[{provide:La,useValue:`platform`},{provide:vv,useValue:new Set([()=>bv=null])},...e]})}function xne(e=[]){if(bv)return bv;let t=bne(e);return bv=t,Rh(),Sne(t),t}function Sne(e){let t=e.get($s,null);eo(e,()=>{t?.forEach(e=>e())})}function Cne(e){let{rootComponent:t,appProviders:n,platformProviders:r,platformRef:i}=e;Pc(xc.BootstrapApplicationStart);try{let e=i?.injector??xne(r);return _ne({r3Injector:new sh({providers:[ane(),Ys,...n||[]],parent:e,debugName:``,runEnvironmentInitializers:!1}).injector,platformInjector:e,rootComponent:t})}catch(e){return Promise.reject(e)}finally{Pc(xc.BootstrapApplicationEnd)}}function xv(e){return typeof e==`boolean`?e:e!=null&&e!==`false`}var Sv=Symbol(`NOT_SET`),Cv=new Set,wne={...Pn,kind:`afterRenderEffectPhase`,consumerIsAlwaysLive:!0,consumerAllowSignalWrites:!0,value:Sv,cleanup:null,consumerMarkedDirty(){if(this.sequence.impl.executing){if(this.sequence.lastPhase===null||this.sequence.lastPhase(cn(r),r.value),r.signal[rn]=r,r.registerCleanupFn=e=>(r.cleanup??=new Set).add(e),this.nodes[e]=r,this.hooks[e]=e=>r.phaseFn(e)}}afterRun(){super.afterRun(),this.lastPhase=null}destroy(){if(this.onDestroyFns!==null)for(let e of this.onDestroyFns)e();super.destroy();for(let e of this.nodes)if(e)try{for(let t of e.cleanup??Cv)t()}finally{bn(e)}}};function wv(e,t){let n=t?.injector??x(xs),r=n.get(ic),i=n.get(ad),a=n.get(nd,null,{optional:!0});i.impl??=n.get(sd);let o=e;typeof o==`function`&&(o={mixedReadWrite:e});let s=n.get(nc,null,{optional:!0}),c=new Tne(i.impl,[o.earlyRead,o.write,o.mixedReadWrite,o.read],s?.view,r,n,a?.snapshot(null));return i.impl.register(c),c}var Tv=null;function Ev(){return Tv}function Ene(e){Tv??=e}var Dne=class{},Dv=(function(e){return e[e.Format=0]=`Format`,e[e.Standalone=1]=`Standalone`,e})(Dv||{}),Ov=(function(e){return e[e.Narrow=0]=`Narrow`,e[e.Abbreviated=1]=`Abbreviated`,e[e.Wide=2]=`Wide`,e[e.Short=3]=`Short`,e})(Ov||{}),kv=(function(e){return e[e.Short=0]=`Short`,e[e.Medium=1]=`Medium`,e[e.Long=2]=`Long`,e[e.Full=3]=`Full`,e})(kv||{}),Av={Decimal:0,Group:1,List:2,PercentSign:3,PlusSign:4,MinusSign:5,Exponential:6,SuperscriptingExponent:7,PerMille:8,Infinity:9,NaN:10,TimeSeparator:11,CurrencyDecimal:12,CurrencyGroup:13};function One(e){return Cg(e)[Tg.LocaleId]}function kne(e,t,n){let r=Cg(e);return Iv(Iv([r[Tg.DayPeriodsFormat],r[Tg.DayPeriodsStandalone]],t),n)}function Ane(e,t,n){let r=Cg(e);return Iv(Iv([r[Tg.DaysFormat],r[Tg.DaysStandalone]],t),n)}function jne(e,t,n){let r=Cg(e);return Iv(Iv([r[Tg.MonthsFormat],r[Tg.MonthsStandalone]],t),n)}function Mne(e,t){let n=Cg(e)[Tg.Eras];return Iv(n,t)}function jv(e,t){return Iv(Cg(e)[Tg.DateFormat],t)}function Mv(e,t){return Iv(Cg(e)[Tg.TimeFormat],t)}function Nv(e,t){let n=Cg(e)[Tg.DateTimeFormat];return Iv(n,t)}function Pv(e,t){let n=Cg(e),r=n[Tg.NumberSymbols][t];if(r===void 0){if(t===Av.CurrencyDecimal)return n[Tg.NumberSymbols][Av.Decimal];if(t===Av.CurrencyGroup)return n[Tg.NumberSymbols][Av.Group]}return r}function Fv(e){if(!e[Tg.ExtraData])throw new pi(2303,!1)}function Nne(e){let t=Cg(e);return Fv(t),(t[Tg.ExtraData][2]||[]).map(e=>typeof e==`string`?Lv(e):[Lv(e[0]),Lv(e[1])])}function Pne(e,t,n){let r=Cg(e);return Fv(r),Iv(Iv([r[Tg.ExtraData][0],r[Tg.ExtraData][1]],t)||[],n)||[]}function Iv(e,t){for(let n=t;n>-1;n--)if(e[n]!==void 0)return e[n];throw new pi(2304,!1)}function Lv(e){let[t,n]=e.split(`:`);return{hours:+t,minutes:+n}}var Fne=/^(\d{4,})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/,Rv=Object.create(null),Ine=/((?:[^BEGHLMOSWYZabcdhmswyz']+)|(?:'(?:[^']|'')*')|(?:G{1,5}|y{1,4}|Y{1,4}|M{1,5}|L{1,5}|w{1,2}|W{1}|d{1,2}|E{1,6}|c{1,6}|a{1,5}|b{1,5}|B{1,5}|h{1,2}|H{1,2}|m{1,2}|s{1,2}|S{1,3}|z{1,4}|Z{1,5}|O{1,4}))([\s\S]*)/,Lne=256;function Rne(e,t,n,r){let i=Jne(e);zne(t),t=Bv(n,t)||t;let a=[],o;for(;t;)if(o=Ine.exec(t),o){a=a.concat(o.slice(1));let e=a.pop();if(!e)break;t=e}else{a.push(t);break}let s=i.getTimezoneOffset();r&&(s=Zv(r,s),i=qne(i,r));let c=``;return a.forEach(e=>{let t=Gne(e);c+=t?t(i,n,s):e===`''`?`'`:e.replace(/(^'|'$)/g,``).replace(/''/g,`'`)}),c}function zne(e){if(e.length>Lne)throw new pi(2300,!1)}function zv(e,t,n){let r=new Date(0);return r.setFullYear(e,t,n),r.setHours(0,0,0),r}function Bv(e,t){let n=One(e);if(Rv[n]??=Object.create(null),Rv[n][t])return Rv[n][t];let r=``;switch(t){case`shortDate`:r=jv(e,kv.Short);break;case`mediumDate`:r=jv(e,kv.Medium);break;case`longDate`:r=jv(e,kv.Long);break;case`fullDate`:r=jv(e,kv.Full);break;case`shortTime`:r=Mv(e,kv.Short);break;case`mediumTime`:r=Mv(e,kv.Medium);break;case`longTime`:r=Mv(e,kv.Long);break;case`fullTime`:r=Mv(e,kv.Full);break;case`short`:let t=Bv(e,`shortTime`),n=Bv(e,`shortDate`);r=Vv(Nv(e,kv.Short),[t,n]);break;case`medium`:let i=Bv(e,`mediumTime`),a=Bv(e,`mediumDate`);r=Vv(Nv(e,kv.Medium),[i,a]);break;case`long`:let o=Bv(e,`longTime`),s=Bv(e,`longDate`);r=Vv(Nv(e,kv.Long),[o,s]);break;case`full`:let c=Bv(e,`fullTime`),l=Bv(e,`fullDate`);r=Vv(Nv(e,kv.Full),[c,l])}return r&&(Rv[n][t]=r),r}function Vv(e,t){return t&&(e=e.replace(/\{([^}]+)}/g,function(e,n){return Object.hasOwn(t,n)?t[n]:e})),e}function Hv(e,t,n=`-`,r,i){let a=``;(e<0||i&&e<=0)&&(i?e=-e+1:(e=-e,a=n));let o=String(e);for(;o.length0||s>-n)&&(s+=n),e===3)s===0&&n===-12&&(s=12);else if(e===6)return Bne(s,t);let c=Pv(o,Av.MinusSign);return Hv(s,t,c,r,i)}}function Vne(e,t){switch(e){case 0:return t.getFullYear();case 1:return t.getMonth();case 2:return t.getDate();case 3:return t.getHours();case 4:return t.getMinutes();case 5:return t.getSeconds();case 6:return t.getMilliseconds();case 7:return t.getDay();default:throw new pi(2301,!1)}}function Wv(e,t,n=Dv.Format,r=!1){return function(i,a){return Hne(i,a,e,t,n,r)}}function Hne(e,t,n,r,i,a){switch(n){case 2:return jne(t,i,r)[e.getMonth()];case 1:return Ane(t,i,r)[e.getDay()];case 0:let n=e.getHours(),o=e.getMinutes();if(a){let e=Nne(t),a=Pne(t,i,r),s=e.findIndex(e=>{if(Array.isArray(e)){let[t,r]=e,i=n>=t.hours&&o>=t.minutes,a=n0?Math.floor(i/60):Math.ceil(i/60);switch(e){case 0:return(i>=0?`+`:``)+Hv(o,2,a)+Hv(Math.abs(i%60),2,a);case 1:return`GMT`+(i>=0?`+`:``)+Hv(o,1,a);case 2:return`GMT`+(i>=0?`+`:``)+Hv(o,2,a)+`:`+Hv(Math.abs(i%60),2,a);case 3:return r===0?`Z`:(i>=0?`+`:``)+Hv(o,2,a)+`:`+Hv(Math.abs(i%60),2,a);default:throw new pi(2310,!1)}}}var Une=0,Kv=4;function Wne(e){let t=zv(e,Une,1).getDay();return zv(e,0,1+(t<=Kv?Kv:11)-t)}function qv(e){let t=e.getDay(),n=t===0?-3:Kv-t;return zv(e.getFullYear(),e.getMonth(),e.getDate()+n)}function Jv(e,t=!1){return function(n,r){let i;if(t){let e=new Date(n.getFullYear(),n.getMonth(),1).getDay()-1,t=n.getDate();i=1+Math.floor((t+e)/7)}else{let e=qv(n),t=Wne(e.getFullYear()),r=e.getTime()-t.getTime();i=1+Math.round(r/6048e5)}return Hv(i,e,Pv(r,Av.MinusSign))}}function Yv(e,t=!1){return function(n,r){return Hv(qv(n).getFullYear(),e,Pv(r,Av.MinusSign),t)}}var Xv=Object.create(null);function Gne(e){if(Xv[e])return Xv[e];let t;switch(e){case`G`:case`GG`:case`GGG`:t=Wv(3,Ov.Abbreviated);break;case`GGGG`:t=Wv(3,Ov.Wide);break;case`GGGGG`:t=Wv(3,Ov.Narrow);break;case`y`:t=Uv(0,1,0,!1,!0);break;case`yy`:t=Uv(0,2,0,!0,!0);break;case`yyy`:t=Uv(0,3,0,!1,!0);break;case`yyyy`:t=Uv(0,4,0,!1,!0);break;case`Y`:t=Yv(1);break;case`YY`:t=Yv(2,!0);break;case`YYY`:t=Yv(3);break;case`YYYY`:t=Yv(4);break;case`M`:case`L`:t=Uv(1,1,1);break;case`MM`:case`LL`:t=Uv(1,2,1);break;case`MMM`:t=Wv(2,Ov.Abbreviated);break;case`MMMM`:t=Wv(2,Ov.Wide);break;case`MMMMM`:t=Wv(2,Ov.Narrow);break;case`LLL`:t=Wv(2,Ov.Abbreviated,Dv.Standalone);break;case`LLLL`:t=Wv(2,Ov.Wide,Dv.Standalone);break;case`LLLLL`:t=Wv(2,Ov.Narrow,Dv.Standalone);break;case`w`:t=Jv(1);break;case`ww`:t=Jv(2);break;case`W`:t=Jv(1,!0);break;case`d`:t=Uv(2,1);break;case`dd`:t=Uv(2,2);break;case`c`:case`cc`:t=Uv(7,1);break;case`ccc`:t=Wv(1,Ov.Abbreviated,Dv.Standalone);break;case`cccc`:t=Wv(1,Ov.Wide,Dv.Standalone);break;case`ccccc`:t=Wv(1,Ov.Narrow,Dv.Standalone);break;case`cccccc`:t=Wv(1,Ov.Short,Dv.Standalone);break;case`E`:case`EE`:case`EEE`:t=Wv(1,Ov.Abbreviated);break;case`EEEE`:t=Wv(1,Ov.Wide);break;case`EEEEE`:t=Wv(1,Ov.Narrow);break;case`EEEEEE`:t=Wv(1,Ov.Short);break;case`a`:case`aa`:case`aaa`:t=Wv(0,Ov.Abbreviated);break;case`aaaa`:t=Wv(0,Ov.Wide);break;case`aaaaa`:t=Wv(0,Ov.Narrow);break;case`b`:case`bb`:case`bbb`:t=Wv(0,Ov.Abbreviated,Dv.Standalone,!0);break;case`bbbb`:t=Wv(0,Ov.Wide,Dv.Standalone,!0);break;case`bbbbb`:t=Wv(0,Ov.Narrow,Dv.Standalone,!0);break;case`B`:case`BB`:case`BBB`:t=Wv(0,Ov.Abbreviated,Dv.Format,!0);break;case`BBBB`:t=Wv(0,Ov.Wide,Dv.Format,!0);break;case`BBBBB`:t=Wv(0,Ov.Narrow,Dv.Format,!0);break;case`h`:t=Uv(3,1,-12);break;case`hh`:t=Uv(3,2,-12);break;case`H`:t=Uv(3,1);break;case`HH`:t=Uv(3,2);break;case`m`:t=Uv(4,1);break;case`mm`:t=Uv(4,2);break;case`s`:t=Uv(5,1);break;case`ss`:t=Uv(5,2);break;case`S`:t=Uv(6,1);break;case`SS`:t=Uv(6,2);break;case`SSS`:t=Uv(6,3);break;case`Z`:case`ZZ`:case`ZZZ`:t=Gv(0);break;case`ZZZZZ`:t=Gv(3);break;case`O`:case`OO`:case`OOO`:case`z`:case`zz`:case`zzz`:t=Gv(1);break;case`OOOO`:case`ZZZZ`:case`zzzz`:t=Gv(2);break;default:return null}return Xv[e]=t,t}function Zv(e,t){e=e.replace(/:/g,``);let n=Date.parse(`Jan 01, 1970 00:00:00 `+e)/6e4;return isNaN(n)?t:n}function Kne(e,t){return e=new Date(e.getTime()),e.setMinutes(e.getMinutes()+t),e}function qne(e,t,n){let r=e.getTimezoneOffset();return Kne(e,-1*(Zv(t,r)-r))}function Jne(e){if(Qv(e))return e;if(typeof e==`number`&&!isNaN(e))return new Date(e);if(typeof e==`string`){if(e=e.trim(),/^(\d{4}(-\d{1,2}(-\d{1,2})?)?)$/.test(e)){let[t,n=1,r=1]=e.split(`-`).map(e=>+e);return zv(t,n-1,r)}let t=parseFloat(e);if(!isNaN(e-t))return new Date(t);let n;if(n=e.match(Fne))return Yne(n)}let t=new Date(e);if(!Qv(t))throw new pi(2311,!1);return t}function Yne(e){let t=new Date(0),n=0,r=0,i=e[8]?t.setUTCFullYear:t.setFullYear,a=e[8]?t.setUTCHours:t.setHours;e[9]&&(n=Number(e[9]+e[10]),r=Number(e[9]+e[11])),i.call(t,Number(e[1]),Number(e[2])-1,Number(e[3]));let o=Number(e[4]||0)-n,s=Number(e[5]||0)-r,c=Number(e[6]||0),l=Math.floor(parseFloat(`0.`+(e[7]||0))*1e3);return a.call(t,o,s,c,l),t}function Qv(e){return e instanceof Date&&!isNaN(e.valueOf())}var $v=(()=>{class e{_viewContainerRef;_viewRef=null;ngTemplateOutletContext=null;ngTemplateOutlet=null;ngTemplateOutletInjector=null;injector=x(xs);constructor(e){this._viewContainerRef=e}ngOnChanges(e){if(this._shouldRecreateView(e)){let e=this._viewContainerRef;if(this._viewRef&&e.remove(e.indexOf(this._viewRef)),!this.ngTemplateOutlet){this._viewRef=null;return}let t=this._createContextForwardProxy();this._viewRef=e.createEmbeddedView(this.ngTemplateOutlet,t,{injector:this._getInjector()})}}_getInjector(){return this.ngTemplateOutletInjector===`outlet`?this.injector:this.ngTemplateOutletInjector??void 0}_shouldRecreateView(e){return!!e.ngTemplateOutlet||!!e.ngTemplateOutletInjector}_createContextForwardProxy(){return new Proxy({},{set:(e,t,n)=>this.ngTemplateOutletContext?Reflect.set(this.ngTemplateOutletContext,t,n):!1,get:(e,t,n)=>{if(this.ngTemplateOutletContext)return Reflect.get(this.ngTemplateOutletContext,t,n)}})}static ɵfac=function(t){return new(t||e)(Wp(wm))};static ɵdir=ph({type:e,selectors:[[``,`ngTemplateOutlet`,``]],inputs:{ngTemplateOutletContext:`ngTemplateOutletContext`,ngTemplateOutlet:`ngTemplateOutlet`,ngTemplateOutletInjector:`ngTemplateOutletInjector`},features:[Tc]})}return e})();function Xne(e,t){return new pi(2100,!1)}var Zne=`mediumDate`,Qne=new Oi(``),$ne=new Oi(``),ey=(()=>{class e{locale;defaultTimezone;defaultOptions;constructor(e,t,n){this.locale=e,this.defaultTimezone=t,this.defaultOptions=n}transform(t,n,r,i){if(t==null||t===``||t!==t)return null;try{let e=n??this.defaultOptions?.dateFormat??Zne,a=r??this.defaultOptions?.timezone??this.defaultTimezone??void 0;return Rne(t,e,i||this.locale,a)}catch(t){throw Xne(e,t.message)}}static ɵfac=function(t){return new(t||e)(Wp(iv,16),Wp(Qne,24),Wp($ne,24))};static ɵpipe=mh({name:`date`,type:e,pure:!0})}return e})(),ty=(()=>{class e{transform(e){return JSON.stringify(e,null,2)}static ɵfac=function(t){return new(t||e)};static ɵpipe=mh({name:`json`,type:e,pure:!1})}return e})();function ere(e,t){t=encodeURIComponent(t);for(let n of e.split(`;`)){let e=n.indexOf(`=`),[r,i]=e==-1?[n,``]:[n.slice(0,e),n.slice(e+1)];if(r.trim()!==t)continue;let a=i;try{a=decodeURIComponent(i)}catch{}return a.length>1&&a[0]===`"`&&a[a.length-1]===`"`&&(a=a.slice(1,-1)),a}return null}var tre=`browser`,ny=class{_doc;constructor(e){this._doc=e}manager},ry=(()=>{class e extends ny{constructor(e){super(e)}supports(e){return!0}addEventListener(e,t,n,r){return e.addEventListener(t,n,r),()=>this.removeEventListener(e,t,n,r)}removeEventListener(e,t,n,r){return e.removeEventListener(t,n,r)}static ɵfac=function(t){return new(t||e)(ra(Ss))};static ɵprov=xi({token:e,factory:e.ɵfac})}return e})(),iy=new Oi(``),ay=(()=>{class e{_zone;_plugins;_eventNameToPlugin=new Map;constructor(e,t){this._zone=t,e.forEach(e=>{e.manager=this});let n=e.filter(e=>!(e instanceof ry));this._plugins=n.slice().reverse();let r=e.find(e=>e instanceof ry);r&&this._plugins.push(r)}addEventListener(e,t,n,r){return this._findPluginFor(t).addEventListener(e,t,n,r)}getZone(){return this._zone}_findPluginFor(e){let t=this._eventNameToPlugin.get(e);if(t)return t;if(t=this._plugins.find(t=>t.supports(e)),!t)throw new pi(-5101,!1);return this._eventNameToPlugin.set(e,t),t}static ɵfac=function(t){return new(t||e)(ra(iy),ra(Fs))};static ɵprov=xi({token:e,factory:e.ɵfac})}return e})(),oy=`ng-app-id`;function sy(e){for(let t of e)t.remove()}function cy(e,t){let n=t.createElement(`style`);return n.textContent=e,n}function nre(e,t,n,r){let i=e.head?.querySelectorAll(`style[${oy}="${t}"],link[${oy}="${t}"]`);if(!i||i.length===0)return!1;for(let e of i)e.removeAttribute(oy),e instanceof HTMLLinkElement?r.set(e.href.slice(e.href.lastIndexOf(`/`)+1),{usage:0,elements:[e]}):e.textContent&&n.set(e.textContent,{usage:0,elements:[e]});return!0}function ly(e,t){let n=t.createElement(`link`);return n.setAttribute(`rel`,`stylesheet`),n.setAttribute(`href`,e),n}var uy=(()=>{class e{doc;appId;nonce;inline=new Map;external=new Map;hosts=new Set;constructor(e,t,n,r={}){this.doc=e,this.appId=t,this.nonce=n,nre(e,t,this.inline,this.external)&&this.hosts.add(e.head)}addStyles(e,t){for(let t of e)this.addUsage(t,this.inline,cy);t?.forEach(e=>this.addUsage(e,this.external,ly))}removeStyles(e,t){for(let t of e)this.removeUsage(t,this.inline);t?.forEach(e=>this.removeUsage(e,this.external))}addUsage(e,t,n){let r=t.get(e);r?r.usage++:t.set(e,{usage:1,elements:[...this.hosts].map(t=>this.addElement(t,n(e,this.doc)))})}removeUsage(e,t){let n=t.get(e);n&&(n.usage--,n.usage<=0&&(sy(n.elements),t.delete(e)))}ngOnDestroy(){for(let[,{elements:e}]of[...this.inline,...this.external])sy(e);this.hosts.clear()}addHost(e){if(!this.hosts.has(e)){this.hosts.add(e);for(let[t,{elements:n}]of this.inline)n.push(this.addElement(e,cy(t,this.doc)));for(let[t,{elements:n}]of this.external)n.push(this.addElement(e,ly(t,this.doc)))}}removeHost(e){this.hosts.delete(e);for(let t of[...this.inline.values(),...this.external.values()]){let n=[];for(let r of t.elements)r.parentNode===e?r.remove():n.push(r);t.elements=n}}addElement(e,t){return this.nonce&&t.setAttribute(`nonce`,this.nonce),e.appendChild(t)}static ɵfac=function(t){return new(t||e)(ra(Ss),ra(Zs),ra(tc,8),ra(ec))};static ɵprov=xi({token:e,factory:e.ɵfac})}return e})(),dy={svg:`http://www.w3.org/2000/svg`,xhtml:`http://www.w3.org/1999/xhtml`,xlink:`http://www.w3.org/1999/xlink`,xml:`http://www.w3.org/XML/1998/namespace`,xmlns:`http://www.w3.org/2000/xmlns/`,math:`http://www.w3.org/1998/Math/MathML`},fy=/%COMP%/g,py=`%COMP%`,rre=`_nghost-${py}`,ire=`_ngcontent-${py}`,are=!0,ore=new Oi(``,{factory:()=>are}),sre=new Oi(``);function cre(e){return ire.replace(fy,e)}function lre(e){return rre.replace(fy,e)}function my(e,t){return t.map(t=>t.replace(fy,e))}var hy=(()=>{class e{eventManager;sharedStylesHost;appId;removeStylesOnCompDestroy;doc;ngZone;nonce;tracingService;rendererByCompId=new Map;defaultRenderer;cssVarNamespace;constructor(e,t,n,r,i,a,o=null,s=null,c=null){this.eventManager=e,this.sharedStylesHost=t,this.appId=n,this.removeStylesOnCompDestroy=r,this.doc=i,this.ngZone=a,this.nonce=o,this.tracingService=s,this.cssVarNamespace=c??``,this.defaultRenderer=new gy(e,i,a,this.tracingService,this.cssVarNamespace)}createRenderer(e,t){if(!e||!t)return this.defaultRenderer;let n=this.getOrCreateRenderer(e,t);return n instanceof by?n.applyToHost(e):n instanceof yy&&n.applyStyles(),n}getOrCreateRenderer(e,t){let n=this.rendererByCompId,r=n.get(t.id);if(!r){let i=this.doc,a=this.ngZone,o=this.eventManager,s=this.sharedStylesHost,c=this.removeStylesOnCompDestroy,l=this.tracingService;switch(t.encapsulation){case cu.Emulated:r=new by(o,s,t,this.appId,c,i,a,l,this.cssVarNamespace);break;case cu.ShadowDom:return new vy(o,e,t,i,a,this.nonce,l,this.cssVarNamespace,s);case cu.ExperimentalIsolatedShadowDom:return new vy(o,e,t,i,a,this.nonce,l,this.cssVarNamespace);default:r=new yy(o,s,t,c,i,a,l,this.cssVarNamespace)}n.set(t.id,r)}return r}ngOnDestroy(){this.rendererByCompId.clear()}componentReplaced(e){this.rendererByCompId.delete(e)}static ɵfac=function(t){return new(t||e)(ra(ay),ra(Hp),ra(Zs),ra(ore),ra(Ss),ra(Fs),ra(tc),ra(nd,8),ra(sre,8))};static ɵprov=xi({token:e,factory:e.ɵfac})}return e})(),gy=class{eventManager;doc;ngZone;tracingService;cssVarNamespace;data=Object.create(null);throwOnSyntheticProps=!0;constructor(e,t,n,r,i=``){this.eventManager=e,this.doc=t,this.ngZone=n,this.tracingService=r,this.cssVarNamespace=i}destroy(){}destroyNode=null;createElement(e,t){return t?this.doc.createElementNS(dy[t]||t,e):this.doc.createElement(e)}createComment(e){return this.doc.createComment(e)}createText(e){return this.doc.createTextNode(e)}appendChild(e,t){(_y(e)?e.content:e).appendChild(t)}insertBefore(e,t,n){if(e){let r=_y(e)?e.content:e;if(n!=null&&n.parentNode!==r)throw new pi(-5106,!1);r.insertBefore(t,n)}}removeChild(e,t){t.remove()}selectRootElement(e,t){let n=typeof e==`string`?this.doc.querySelector(e):e;if(!n)throw new pi(-5104,!1);return t||(n.textContent=``),n}parentNode(e){return e.parentNode}nextSibling(e){return e.nextSibling}setAttribute(e,t,n,r){if(r){t=r+`:`+t;let i=dy[r];i?e.setAttributeNS(i,t,n):e.setAttribute(t,n)}else e.setAttribute(t,n)}removeAttribute(e,t,n){if(n){let r=dy[n];r?e.removeAttributeNS(r,t):e.removeAttribute(`${n}:${t}`)}else e.removeAttribute(t)}addClass(e,t){e.classList.add(t)}removeClass(e,t){e.classList.remove(t)}setStyle(e,t,n,r){let i=t.startsWith(`--`);i&&(t=t.replace(`%NS%`,this.cssVarNamespace)),i||r&(Lu.DashCase|Lu.Important)?e.style.setProperty(t,n,r&Lu.Important?`important`:``):e.style[t]=n}removeStyle(e,t,n){let r=t.startsWith(`--`);r&&(t=t.replace(`%NS%`,this.cssVarNamespace)),r||n&Lu.DashCase?e.style.removeProperty(t):e.style[t]=``}setProperty(e,t,n){e!=null&&(e[t]=n)}setValue(e,t){e.nodeValue=t}listen(e,t,n,r){if(typeof e==`string`&&(e=Ev().getGlobalEventTarget(this.doc,e),!e))throw new pi(-5102,!1);let i=this.decoratePreventDefault(n);return this.tracingService?.wrapEventListener&&(i=this.tracingService.wrapEventListener(e,t,i)),this.eventManager.addEventListener(e,t,i,r)}decoratePreventDefault(e){return t=>{if(t===`__ngUnwrap__`)return e;e(t)===!1&&t.preventDefault()}}};function _y(e){return e.tagName===`TEMPLATE`&&e.content!==void 0}var vy=class extends gy{hostEl;sharedStylesHost;shadowRoot;constructor(e,t,n,r,i,a,o,s,c){super(e,r,i,o,s),this.hostEl=t,this.sharedStylesHost=c,this.shadowRoot=t.attachShadow({mode:`open`}),this.sharedStylesHost&&this.sharedStylesHost.addHost(this.shadowRoot);let l=n.styles;l=my(n.id,l).map(e=>e.replace(/%NS%/g,s));for(let e of l){let t=document.createElement(`style`);a&&t.setAttribute(`nonce`,a),t.textContent=e,this.shadowRoot.appendChild(t)}let u=n.getExternalStyles?.();if(u)for(let e of u){let t=ly(e,r);a&&t.setAttribute(`nonce`,a),this.shadowRoot.appendChild(t)}}nodeOrShadowRoot(e){return e===this.hostEl?this.shadowRoot:e}appendChild(e,t){return super.appendChild(this.nodeOrShadowRoot(e),t)}insertBefore(e,t,n){return super.insertBefore(this.nodeOrShadowRoot(e),t,n)}removeChild(e,t){return super.removeChild(null,t)}parentNode(e){return this.nodeOrShadowRoot(super.parentNode(this.nodeOrShadowRoot(e)))}destroy(){this.sharedStylesHost&&this.sharedStylesHost.removeHost(this.shadowRoot)}},yy=class extends gy{sharedStylesHost;removeStylesOnCompDestroy;styles;styleUrls;constructor(e,t,n,r,i,a,o,s,c){super(e,i,a,o,s),this.sharedStylesHost=t,this.removeStylesOnCompDestroy=r;let l=n.styles,u=c?my(c,l):l;this.styles=u.map(e=>e.replace(/%NS%/g,s)),this.styleUrls=n.getExternalStyles?.(c)}applyStyles(){this.sharedStylesHost.addStyles(this.styles,this.styleUrls)}destroy(){this.removeStylesOnCompDestroy&&Wu.size===0&&this.sharedStylesHost.removeStyles(this.styles,this.styleUrls)}},by=class extends yy{contentAttr;hostAttr;constructor(e,t,n,r,i,a,o,s,c){let l=r+`-`+n.id;super(e,t,n,i,a,o,s,c,l),this.contentAttr=cre(l),this.hostAttr=lre(l)}applyToHost(e){this.applyStyles(),this.setAttribute(e,this.hostAttr,``)}createElement(e,t){let n=super.createElement(e,t);return super.setAttribute(n,this.contentAttr,``),n}},ure=class e extends Dne{supportsDOMEvents=!0;static makeCurrent(){Ene(new e)}onAndCancel(e,t,n,r){return e.addEventListener(t,n,r),()=>{e.removeEventListener(t,n,r)}}dispatchEvent(e,t){e.dispatchEvent(t)}remove(e){e.remove()}createElement(e,t){return t||=this.getDefaultDocument(),t.createElement(e)}createHtmlDocument(){return document.implementation.createHTMLDocument(`fakeTitle`)}getDefaultDocument(){return document}isElementNode(e){return e.nodeType===Node.ELEMENT_NODE}isShadowRoot(e){return e instanceof DocumentFragment}getGlobalEventTarget(e,t){return t===`window`?window:t===`document`?e:t===`body`?e.body:null}getBaseHref(e){let t=dre();return t==null?null:fre(t)}resetBaseElement(){xy=null}getUserAgent(){return window.navigator.userAgent}getCookie(e){return ere(document.cookie,e)}},xy=null;function dre(){return xy||=document.head.querySelector(`base`),xy?xy.getAttribute(`href`):null}function fre(e){return new URL(e,document.baseURI).pathname}var Sy=[`alt`,`control`,`meta`,`shift`],pre={"\b":`Backspace`," ":`Tab`,"":`Delete`,"\x1B":`Escape`,Del:`Delete`,Esc:`Escape`,Left:`ArrowLeft`,Right:`ArrowRight`,Up:`ArrowUp`,Down:`ArrowDown`,Menu:`ContextMenu`,Scroll:`ScrollLock`,Win:`OS`},mre={alt:e=>e.altKey,control:e=>e.ctrlKey,meta:e=>e.metaKey,shift:e=>e.shiftKey},hre=(()=>{class e extends ny{constructor(e){super(e)}supports(t){return e.parseEventName(t)!=null}addEventListener(t,n,r,i){let a=e.parseEventName(n),o=e.eventCallback(a.fullKey,r,this.manager.getZone());return this.manager.getZone().runOutsideAngular(()=>Ev().onAndCancel(t,a.domEventName,o,i))}static parseEventName(t){let n=t.toLowerCase().split(`.`),r=n.shift();if(n.length===0||r!==`keydown`&&r!==`keyup`)return null;let i=e._normalizeKey(n.pop()),a=``,o=n.indexOf(`code`);if(o>-1&&(n.splice(o,1),a=`code.`),Sy.forEach(e=>{let t=n.indexOf(e);t>-1&&(n.splice(t,1),a+=e+`.`)}),a+=i,n.length!=0||i.length===0)return null;let s={};return s.domEventName=r,s.fullKey=a,s}static matchEventFullKeyCode(e,t){let n=pre[e.key]||e.key,r=``;return t.indexOf(`code.`)>-1&&(n=e.code,r=`code.`),n==null||!n?!1:(n=n.toLowerCase(),n===` `?n=`space`:n===`.`&&(n=`dot`),Sy.forEach(t=>{if(t!==n){let n=mre[t];n(e)&&(r+=t+`.`)}}),r+=n,r===t)}static eventCallback(t,n,r){return i=>{e.matchEventFullKeyCode(i,t)&&r.runGuarded(()=>n(i))}}static _normalizeKey(e){return e===`esc`?`escape`:e}static ɵfac=function(t){return new(t||e)(ra(Ss))};static ɵprov=xi({token:e,factory:e.ɵfac})}return e})();async function gre(e,t,n){return Cne({rootComponent:e,..._re(t,n)})}function _re(e,t){return{platformRef:t?.platformRef,appProviders:[...Sre,...e?.providers??[]],platformProviders:xre}}function vre(){ure.makeCurrent()}function yre(){return new qs}function bre(){return Xl(document),document}var xre=[{provide:ec,useValue:tre},{provide:$s,useValue:vre,multi:!0},{provide:Ss,useFactory:bre}],Sre=[{provide:La,useValue:`root`},{provide:qs,useFactory:yre},{provide:iy,useClass:ry,multi:!0},{provide:iy,useClass:hre,multi:!0},hy,{provide:Hp,useClass:uy},{provide:uy,useExisting:Hp},ay,{provide:cp,useExisting:hy},[]];function Cy(e,t){let n=`\x1B[${e}m`,r=`\x1B[${t}m`;return((e,...t)=>{if(Array.isArray(e)&&`raw`in e){let i=e,a=``;for(let e=0;e{let r=new Tre({code:i,why:wy(a.why,e),fix:wy(a.fix,e),docs:o,cause:e.cause,sources:e.sources,data:wy(a.data,e)},s);for(let e of t)e(r,n);return r};n[i]=s}return n}function Ore(e){return t=>{let n=`${e.bold(e.red(`[${t.name}]`))} ${t.message}`,r=[];return t.fix&&r.push(`${e.dim(`fix:`)} ${t.fix}`),t.sources?.length&&r.push(`${e.dim(`sources:`)} ${t.sources.join(`, `)}`),t.docs&&r.push(`${e.dim(`see:`)} ${e.cyan(t.docs)}`),r.length===0?n:[n,...r.map((t,n)=>`${e.dim(n{e=n,t=r}),resolve:e,reject:t}}var Nre=Math.random.bind(Math),Pre=`useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict`;function Ey(e=21){let t=``,n=e;for(;n--;)t+=Pre[Nre()*64|0];return t}var Dy=6e4,Oy=e=>e,ky=Oy,{clearTimeout:Ay,setTimeout:jy}=globalThis;function My(e,t){let{post:n,on:r,off:i=()=>{},eventNames:a=[],serialize:o=Oy,deserialize:s=ky,resolver:c,bind:l=`rpc`,timeout:u=Dy,proxify:d=!0}=t,f=!1,p=new Map,m,ee;async function h(e,r,i,a){if(f)throw Error(`[birpc] rpc is closed, cannot call "${e}"`);let s={m:e,a:r,t:`q`};a&&(s.o=!0);let c=async e=>n(o(e));if(i){await c(s);return}if(m)try{await m}finally{m=void 0}let{promise:l,resolve:d,reject:h}=Mre(),g=Ey();s.i=g;let te;async function ne(n=s){return u>=0&&(te=jy(()=>{try{if(t.onTimeoutError?.call(ee,e,r)!==!0)throw Error(`[birpc] timeout on calling "${e}"`)}catch(e){h(e)}p.delete(g)},u),typeof te==`object`&&(te=te.unref?.())),p.set(g,{resolve:d,reject:h,timeoutId:te,method:e}),await c(n),l}try{t.onRequest?await t.onRequest.call(ee,s,ne,d):await ne()}catch(e){if(t.onGeneralError?.call(ee,e)!==!0)throw e;return}finally{Ay(te),p.delete(g)}return l}let g={$call:(e,...t)=>h(e,t,!1),$callOptional:(e,...t)=>h(e,t,!1,!0),$callEvent:(e,...t)=>h(e,t,!0),$callRaw:e=>h(e.method,e.args,e.event,e.optional),$rejectPendingCalls:ne,get $closed(){return f},get $meta(){return t.meta},$close:te,$functions:e};ee=d?new Proxy({},{get(t,n){if(Object.hasOwn(g,n))return g[n];if(n===`then`&&!a.includes(`then`)&&!(`then`in e))return;let r=(...e)=>h(n,e,!0);if(a.includes(n))return r.asEvent=r,r;let i=(...e)=>h(n,e,!1);return i.asEvent=r,i}}):g;function te(e){f=!0,p.forEach(({reject:t,method:n})=>{let r=Error(`[birpc] rpc is closed, cannot call "${n}"`);if(e)return e.cause??=r,t(e);t(r)}),p.clear(),i(re)}function ne(e){let t=Array.from(p.values()).map(({method:t,reject:n})=>e?e({method:t,reject:n}):n(Error(`[birpc]: rejected pending call "${t}".`)));return p.clear(),t}async function re(r,...i){let a;try{a=s(r)}catch(e){if(t.onGeneralError?.call(ee,e)!==!0)throw e;return}if(a.t===`q`){let{m:r,a:s,o:u}=a,d,f,p=await(c?c.call(ee,r,e[r]):e[r]);if(u&&(p||=()=>void 0),!p)f=Error(`[birpc] function "${r}" not found`);else try{d=await p.apply(l===`rpc`?ee:e,s)}catch(e){f=e}if(a.i){if(f&&t.onFunctionError&&t.onFunctionError.call(ee,f,r,s)===!0)return;if(!f)try{await n(o({t:`s`,i:a.i,r:d}),...i);return}catch(e){if(f=e,t.onGeneralError?.call(ee,e,r,s)!==!0)throw e}try{await n(o({t:`s`,i:a.i,e:f}),...i)}catch(e){if(t.onGeneralError?.call(ee,e,r,s)!==!0)throw e}}}else{let{i:e,r:t,e:n}=a,r=p.get(e);r&&(Ay(r.timeoutId),n?r.reject(n):r.resolve(t)),p.delete(e)}}return m=r(re),ee}function Ny(e,t){return t.safety?t.safety:e===`static`||e===`query`||e==null?`read`:`action`}var Py=Object.freeze({type:`object`,additionalProperties:!0});function Fy(e){let t=e[`~standard`];if(t.jsonSchema)try{return t.jsonSchema.input({target:`draft-2020-12`})}catch{return Py}return Py}function Iy(e){if(!e||e.length===0)return{type:`object`,properties:{}};let t={},n=[];for(let r=0;rn[`arg${t}`]);if(`arg0`in n){let e=[];for(;`arg${e.length}`in n;)e.push(n[`arg${e.length}`]);return e}return Object.keys(n).length===0?[]:void 0}function Ry(e,t){return Ly(e,t)??[e]}function zy(e){return typeof e==`string`?`'${e}'`:new Uy().serialize(e)}var By=` _-,;:!?.'"()[]{}@*/\\&#%\`^+<=>|~$0123456789abcdefghijklmnopqrstuvwxyz`,Vy=(function(){let e=new Uint8Array(128);for(let t=0;t<69;t++)e[By.charCodeAt(t)]=t+1;for(let t=65;t<=90;t++)e[t]=e[t+32];return e})();function Hy(e,t){if(e===t)return 0;let n=Math.min(e.length,t.length),r=0;for(let i=0;ia?-1:1)}return e.length===t.length?r:e.lengththis.compare(e[0],t[0])),r=`${e}{`;for(let e=0;ethis.compare(e,t)))}`}$Map(e){return this.serializeObjectEntries(`Map`,e.entries())}}for(let t of[`Error`,`RegExp`,`URL`])e.prototype[`$`+t]=function(e){return`${t}(${e})`};for(let t of[`Int8Array`,`Uint8Array`,`Uint8ClampedArray`,`Int16Array`,`Uint16Array`,`Int32Array`,`Uint32Array`,`Float32Array`,`Float64Array`])e.prototype[`$`+t]=function(e){return`${t}[${e.join(`,`)}]`};for(let t of[`BigInt64Array`,`BigUint64Array`])e.prototype[`$`+t]=function(e){return`${t}[${e.join(`n,`)}${e.length>0?`n`:``}]`};return e})(),Wy=[1779033703,-1150833019,1013904242,-1521486534,1359893119,-1694144372,528734635,1541459225],Gy=[1116352408,1899447441,-1245643825,-373957723,961987163,1508970993,-1841331548,-1424204075,-670586216,310598401,607225278,1426881987,1925078388,-2132889090,-1680079193,-1046744716,-459576895,-272742522,264347078,604807628,770255983,1249150122,1555081692,1996064986,-1740746414,-1473132947,-1341970488,-1084653625,-958395405,-710438585,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,-2117940946,-1838011259,-1564481375,-1474664885,-1035236496,-949202525,-778901479,-694614492,-200395387,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,-2067236844,-1933114872,-1866530822,-1538233109,-1090935817,-965641998],Ky=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_`,qy=[],Jy=class{_data=new Yy;_hash=new Yy([...Wy]);_nDataBytes=0;_minBufferSize=0;finalize(e){e&&this._append(e);let t=this._nDataBytes*8,n=this._data.sigBytes*8;return this._data.words[n>>>5]|=128<<24-n%32,this._data.words[(n+64>>>9<<4)+14]=Math.floor(t/4294967296),this._data.words[(n+64>>>9<<4)+15]=t,this._data.sigBytes=this._data.words.length*4,this._process(),this._hash}_doProcessBlock(e,t){let n=this._hash.words,r=n[0],i=n[1],a=n[2],o=n[3],s=n[4],c=n[5],l=n[6],u=n[7];for(let n=0;n<64;n++){if(n<16)qy[n]=e[t+n]|0;else{let e=qy[n-15],t=(e<<25|e>>>7)^(e<<14|e>>>18)^e>>>3,r=qy[n-2],i=(r<<15|r>>>17)^(r<<13|r>>>19)^r>>>10;qy[n]=t+qy[n-7]+i+qy[n-16]}let d=s&c^~s&l,f=r&i^r&a^i&a,p=(r<<30|r>>>2)^(r<<19|r>>>13)^(r<<10|r>>>22),m=(s<<26|s>>>6)^(s<<21|s>>>11)^(s<<7|s>>>25),ee=u+m+d+Gy[n]+qy[n],h=p+f;u=l,l=c,c=s,s=o+ee|0,o=a,a=i,i=r,r=ee+h|0}n[0]=n[0]+r|0,n[1]=n[1]+i|0,n[2]=n[2]+a|0,n[3]=n[3]+o|0,n[4]=n[4]+s|0,n[5]=n[5]+c|0,n[6]=n[6]+l|0,n[7]=n[7]+u|0}_append(e){typeof e==`string`&&(e=Yy.fromUtf8(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes}_process(e){let t,n=this._data.sigBytes/64;n=e?Math.ceil(n):Math.max((n|0)-this._minBufferSize,0);let r=n*16,i=Math.min(r*4,this._data.sigBytes);if(r){for(let e=0;e>>2]|=(n.charCodeAt(e)&255)<<24-e%4*8;return new e(i,r)}toBase64(){let e=[];for(let t=0;t>>2]>>>24-t%4*8&255,r=this.words[t+1>>>2]>>>24-(t+1)%4*8&255,i=this.words[t+2>>>2]>>>24-(t+2)%4*8&255,a=n<<16|r<<8|i;for(let n=0;n<4&&t*8+n*6>>6*(3-n)&63))}return e.join(``)}concat(e){if(this.words[this.sigBytes>>>2]&=4294967295<<32-this.sigBytes%4*8,this.words.length=Math.ceil(this.sigBytes/4),this.sigBytes%4)for(let t=0;t>>2]>>>24-t%4*8&255;this.words[this.sigBytes+t>>>2]|=n<<24-(this.sigBytes+t)%4*8}else for(let t=0;t>>2]=e.words[t>>>2];this.sigBytes+=e.sigBytes}};function Xy(e){return new Jy().finalize(e).toBase64()}function Zy(e){return Xy(zy(e))}function Qy(e){return Zy(e)}function $y(){let e={};function t(t,...n){let r=e[t]||[];for(let e=0,t=r.length;e{e[t]=e[t]?.filter(e=>n!==e)}}function i(e,t){let n=r(e,((...e)=>(n(),t(...e))));return n}return{_listeners:e,emit:t,emitOnce:n,on:r,once:i}}var eb=/^[\w+.-]{2,}:\/\//;function tb(e){return e.endsWith(`/`)?e:`${e}/`}function nb(e){return(e.endsWith(`/`)?e.slice(0,-1):e)||`/`}function rb(e,...t){let n=e;for(let e of t)e&&e!==`/`&&(n=n?tb(n)+e.replace(/^\.?\//,``):e);return n}function ib(e,t){if(!t||t===`/`||eb.test(e))return e;let n=nb(t);return e.startsWith(n)?e:rb(n,e)}function ab(e,t){let n=e.match(eb);return t+(n?e.slice(n[0].length):e)}var ob=`useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict`;function sb(e=21){let t=``,n=e;for(;n--;)t+=ob[Math.random()*64|0];return t}var cb=Symbol.for(`immer-nothing`),lb=Symbol.for(`immer-draftable`),ub=Symbol.for(`immer-state`),db=[function(e){return`The plugin for '${e}' has not been loaded into Immer. To enable the plugin, import and call \`enable${e}()\` when initializing your application.`},function(e){return`produce can only be called on things that are draftable: plain objects, arrays, Map, Set or classes that are marked with '[immerable]: true'. Got '${e}'`},`This object has been frozen and should not be mutated`,function(e){return`Cannot use a proxy that has been revoked. Did you pass an object from inside an immer function to an async process? `+e},`An immer producer returned a new value *and* modified its draft. Either return a new value *or* modify the draft.`,`Immer forbids circular references`,"The first or second argument to `produce` must be a function","The third argument to `produce` must be a function or undefined","First argument to `createDraft` must be a plain object, an array, or an immerable object","First argument to `finishDraft` must be a draft returned by `createDraft`",function(e){return`'current' expects a draft, got: ${e}`},`Object.defineProperty() cannot be used on an Immer draft`,`Object.setPrototypeOf() cannot be used on an Immer draft`,`Immer only supports deleting array indices`,`Immer only supports setting array indices and the 'length' property`,function(e){return`'original' expects a draft, got: ${e}`}];function fb(e,...t){{let n=db[e],r=Ib(n)?n.apply(null,t):n;throw Error(`[Immer] ${r}`)}}var pb=Object,mb=pb.getPrototypeOf,hb=`constructor`,gb=`prototype`,_b=`configurable`,vb=`enumerable`,yb=`writable`,bb=`value`,xb=e=>!!e&&!!e[ub];function Sb(e){return e?Tb(e)||Mb(e)||!!e[lb]||!!e[hb]?.[lb]||Nb(e)||Pb(e):!1}var Cb=pb[gb][hb].toString(),wb=new WeakMap;function Tb(e){if(!e||!Fb(e))return!1;let t=mb(e);if(t===null||t===pb[gb])return!0;let n=pb.hasOwnProperty.call(t,hb)&&t[hb];if(n===Object)return!0;if(!Ib(n))return!1;let r=wb.get(n);return r===void 0&&(r=Function.toString.call(n),wb.set(n,r)),r===Cb}function Eb(e,t,n=!0){Db(e)===0?(n?Reflect.ownKeys(e):pb.keys(e)).forEach(n=>{t(n,e[n],e)}):e.forEach((n,r)=>t(r,n,e))}function Db(e){let t=e[ub];return t?t.type_:Mb(e)?1:Nb(e)?2:Pb(e)?3:0}var Ob=(e,t,n=Db(e))=>n===2?e.has(t):pb[gb].hasOwnProperty.call(e,t),kb=(e,t,n=Db(e))=>n===2?e.get(t):e[t],Ab=(e,t,n,r=Db(e))=>{r===2?e.set(t,n):r===3?e.add(n):e[t]=n};function jb(e,t){return e===t?e!==0||1/e==1/t:e!==e&&t!==t}var Mb=Array.isArray,Nb=e=>e instanceof Map,Pb=e=>e instanceof Set,Fb=e=>typeof e==`object`,Ib=e=>typeof e==`function`,Lb=e=>typeof e==`boolean`;function Rb(e){let t=+e;return Number.isInteger(t)&&String(t)===e}var zb=e=>Fb(e)?e?.[ub]:null,Bb=e=>e.copy_||e.base_,Vb=e=>e.modified_?e.copy_:e.base_;function Hb(e,t){if(Nb(e))return new Map(e);if(Pb(e))return new Set(e);if(Mb(e))return Array[gb].slice.call(e);let n=Tb(e);if(t===!0||t===`class_only`&&!n){let t=pb.getOwnPropertyDescriptors(e);delete t[ub];let n=Reflect.ownKeys(t);for(let r=0;r1&&pb.defineProperties(e,{set:Gb,add:Gb,clear:Gb,delete:Gb}),pb.freeze(e),t&&Eb(e,(e,t)=>{Ub(t,!0)},!1),e)}function Wb(){fb(2)}var Gb={[bb]:Wb};function Kb(e){return e===null||!Fb(e)||pb.isFrozen(e)}var qb=`MapSet`,Jb=`Patches`,Yb=`ArrayMethods`,Xb={};function Zb(e){let t=Xb[e];return t||fb(0,e),t}var Qb=e=>!!Xb[e];function $b(e,t){Xb[e]||(Xb[e]=t)}var ex,tx=()=>ex,nx=(e,t)=>({drafts_:[],parent_:e,immer_:t,canAutoFreeze_:!0,unfinalizedDrafts_:0,handledSet_:new Set,processedForPatches_:new Set,mapSetPlugin_:Qb(qb)?Zb(qb):void 0,arrayMethodsPlugin_:Qb(Yb)?Zb(Yb):void 0});function rx(e,t){t&&(e.patchPlugin_=Zb(Jb),e.patches_=[],e.inversePatches_=[],e.patchListener_=t)}function ix(e){ax(e),e.drafts_.forEach(sx),e.drafts_=null}function ax(e){e===ex&&(ex=e.parent_)}var ox=e=>ex=nx(ex,e);function sx(e){let t=e[ub];t.type_===0||t.type_===1?t.revoke_():t.revoked_=!0}function cx(e,t){t.unfinalizedDrafts_=t.drafts_.length;let n=t.drafts_[0];if(e!==void 0&&e!==n){n[ub].modified_&&(ix(t),fb(4)),Sb(e)&&(e=lx(t,e));let{patchPlugin_:r}=t;r&&r.generateReplacementPatches_(n[ub].base_,e,t)}else e=lx(t,n);return ux(t,e,!0),ix(t),t.patches_&&t.patchListener_(t.patches_,t.inversePatches_),e===cb?void 0:e}function lx(e,t){if(Kb(t))return t;let n=t[ub];if(!n)return vx(t,e.handledSet_,e);if(!fx(n,e))return t;if(!n.modified_)return n.base_;if(!n.finalized_){let{callbacks_:t}=n;if(t)for(;t.length>0;)t.pop()(e);gx(n,e)}return n.copy_}function ux(e,t,n=!1){!e.parent_&&e.immer_.autoFreeze_&&e.canAutoFreeze_&&Ub(t,n)}function dx(e){e.finalized_=!0,e.scope_.unfinalizedDrafts_--}var fx=(e,t)=>e.scope_===t,px=[];function mx(e,t,n,r){let i=Bb(e),a=e.type_;if(r!==void 0&&kb(i,r,a)===t){Ab(i,r,n,a);return}if(!e.draftLocations_){let t=e.draftLocations_=new Map;Eb(i,(e,n)=>{if(xb(n)){let r=t.get(n)||[];r.push(e),t.set(n,r)}})}let o=e.draftLocations_.get(t)??px;for(let e of o)Ab(i,e,n,a)}function hx(e,t,n){e.callbacks_.push(function(r){let i=t;if(!i||!fx(i,r))return;r.mapSetPlugin_?.fixSetContents(i);let a=Vb(i);mx(e,i.draft_??i,a,n),gx(i,r)})}function gx(e,t){if(e.modified_&&!e.finalized_&&(e.type_===3||e.type_===1&&e.allIndicesReassigned_||(e.assigned_?.size??0)>0)){let{patchPlugin_:n}=t;if(n){let r=n.getPath(e);r&&n.generatePatches_(e,r,t)}dx(e)}}function _x(e,t,n){let{scope_:r}=e;if(xb(n)){let i=n[ub];fx(i,r)&&i.callbacks_.push(function(){Dx(e),mx(e,n,Vb(i),t)})}else Sb(n)&&e.callbacks_.push(function(){let i=Bb(e);e.type_===3?i.has(n)&&vx(n,r.handledSet_,r):kb(i,t,e.type_)===n&&r.drafts_.length>1&&(e.assigned_.get(t)??!1)===!0&&e.copy_&&vx(kb(e.copy_,t,e.type_),r.handledSet_,r)})}function vx(e,t,n){return!n.immer_.autoFreeze_&&n.unfinalizedDrafts_<1||xb(e)||t.has(e)||!Sb(e)||Kb(e)?e:(t.add(e),Eb(e,(r,i)=>{if(xb(i)){let t=i[ub];fx(t,n)&&(Ab(e,r,Vb(t),e.type_),dx(t))}else Sb(i)&&vx(i,t,n)}),e)}function yx(e,t){let n=Mb(e),r={type_:+!!n,scope_:t?t.scope_:tx(),modified_:!1,finalized_:!1,assigned_:void 0,parent_:t,base_:e,draft_:null,copy_:null,revoke_:null,isManual_:!1,callbacks_:void 0},i=r,a=bx;n&&(i=[r],a=xx);let{revoke:o,proxy:s}=Proxy.revocable(i,a);return r.draft_=s,r.revoke_=o,[s,r]}var bx={get(e,t){if(t===ub)return e;let n=e.scope_.arrayMethodsPlugin_,r=e.type_===1&&typeof t==`string`;if(r&&n?.isArrayOperationMethod(t))return n.createMethodInterceptor(e,t);let i=Bb(e);if(!Ob(i,t,e.type_))return wx(e,i,t);let a=i[t];if(e.finalized_||!Sb(a)||r&&e.operationMethod&&n?.isMutatingArrayMethod(e.operationMethod)&&Rb(t))return a;if(a===Sx(e.base_,t)||Cx(e,t,a)){Dx(e);let n=e.type_===1?+t:t,r=kx(e.scope_,a,e,n);return e.copy_[n]=r}return a},has(e,t){return t in Bb(e)},ownKeys(e){return Reflect.ownKeys(Bb(e))},set(e,t,n){let r=Tx(Bb(e),t);if(r?.set)return r.set.call(e.draft_,n),!0;if(!e.modified_){let r=Sx(Bb(e),t),i=r?.[ub];if(i&&i.base_===n)return e.copy_[t]=n,e.assigned_.delete(t),!0;if(jb(n,r)&&(n!==void 0||Ob(e.base_,t,e.type_)))return!0;Dx(e),Ex(e)}return e.copy_[t]===n&&(n!==void 0||Ob(e.copy_,t,e.type_))||Number.isNaN(n)&&Number.isNaN(e.copy_[t])?!0:(e.copy_[t]=n,e.assigned_.set(t,!0),_x(e,t,n),!0)},deleteProperty(e,t){return Dx(e),Sx(e.base_,t)!==void 0||t in e.base_?(e.assigned_.set(t,!1),Ex(e)):e.assigned_.delete(t),e.copy_&&delete e.copy_[t],!0},getOwnPropertyDescriptor(e,t){let n=Bb(e),r=Reflect.getOwnPropertyDescriptor(n,t);return r&&{[yb]:!0,[_b]:e.type_!==1||t!==`length`,[vb]:r[vb],[bb]:n[t]}},defineProperty(){fb(11)},getPrototypeOf(e){return mb(e.base_)},setPrototypeOf(){fb(12)}},xx={};for(let e in bx){let t=bx[e];xx[e]=function(){let e=arguments;return e[0]=e[0][0],t.apply(this,e)}}xx.deleteProperty=function(e,t){return isNaN(parseInt(t))&&fb(13),xx.set.call(this,e,t,void 0)},xx.set=function(e,t,n){return t!==`length`&&isNaN(parseInt(t))&&fb(14),bx.set.call(this,e[0],t,n,e[0])};function Sx(e,t){let n=e[ub];return(n?Bb(n):e)[t]}function Cx(e,t,n){return e.type_!==1||!e.allIndicesReassigned_||e.assigned_?.get(t)||!Sb(n)||n[ub]?!1:e.baseRefs_.has(n)}function wx(e,t,n){let r=Tx(t,n);return r?bb in r?r[bb]:r.get?.call(e.draft_):void 0}function Tx(e,t){if(!(t in e))return;let n=mb(e);for(;n;){let e=Object.getOwnPropertyDescriptor(n,t);if(e)return e;n=mb(n)}}function Ex(e){e.modified_||(e.modified_=!0,e.parent_&&Ex(e.parent_))}function Dx(e){e.copy_||=(e.assigned_=new Map,Hb(e.base_,e.scope_.immer_.useStrictShallowCopy_))}var Ox=class{constructor(e){this.autoFreeze_=!0,this.useStrictShallowCopy_=!1,this.useStrictIteration_=!1,this.produce=(e,t,n)=>{if(Ib(e)&&!Ib(t)){let n=t;t=e;let r=this;return function(e=n,...i){return r.produce(e,e=>t.call(this,e,...i))}}Ib(t)||fb(6),n!==void 0&&!Ib(n)&&fb(7);let r;if(Sb(e)){let i=ox(this),a=kx(i,e,void 0),o=!0;try{r=t(a),o=!1}finally{o?ix(i):ax(i)}return rx(i,n),cx(r,i)}if(!e||!Fb(e)){if(r=t(e),r===void 0&&(r=e),r===cb&&(r=void 0),this.autoFreeze_&&Ub(r,!0),n){let t=[],i=[];Zb(Jb).generateReplacementPatches_(e,r,{patches_:t,inversePatches_:i}),n(t,i)}return r}fb(1,e)},this.produceWithPatches=(e,t)=>{if(Ib(e))return(t,...n)=>this.produceWithPatches(t,t=>e(t,...n));let n,r;return[this.produce(e,t,(e,t)=>{n=e,r=t}),n,r]},Lb(e?.autoFreeze)&&this.setAutoFreeze(e.autoFreeze),Lb(e?.useStrictShallowCopy)&&this.setUseStrictShallowCopy(e.useStrictShallowCopy),Lb(e?.useStrictIteration)&&this.setUseStrictIteration(e.useStrictIteration)}createDraft(e){Sb(e)||fb(8),xb(e)&&(e=Ax(e));let t=ox(this),n=kx(t,e,void 0);return n[ub].isManual_=!0,ax(t),n}finishDraft(e,t){let n=e&&e[ub];(!n||!n.isManual_)&&fb(9);let{scope_:r}=n;return rx(r,t),cx(void 0,r)}setAutoFreeze(e){this.autoFreeze_=e}setUseStrictShallowCopy(e){this.useStrictShallowCopy_=e}setUseStrictIteration(e){this.useStrictIteration_=e}shouldUseStrictIteration(){return this.useStrictIteration_}applyPatches(e,t){let n;for(n=t.length-1;n>=0;n--){let r=t[n];if(r.path.length===0&&r.op===`replace`){e=r.value;break}}n>-1&&(t=t.slice(n+1));let r=Zb(Jb).applyPatches_;return xb(e)?r(e,t):this.produce(e,e=>r(e,t))}};function kx(e,t,n,r){let[i,a]=Nb(t)?Zb(qb).proxyMap_(t,n):Pb(t)?Zb(qb).proxySet_(t,n):yx(t,n);return(n?.scope_??tx()).drafts_.push(i),a.callbacks_=n?.callbacks_??[],a.key_=r,n&&r!==void 0?hx(n,a,r):a.callbacks_.push(function(e){e.mapSetPlugin_?.fixSetContents(a);let{patchPlugin_:t}=e;a.modified_&&t&&t.generatePatches_(a,[],e)}),i}function Ax(e){return xb(e)||fb(10,e),jx(e)}function jx(e){if(!Sb(e)||Kb(e))return e;let t=e[ub],n,r=!0;if(t){if(!t.modified_)return t.base_;t.finalized_=!0,n=Hb(e,t.scope_.immer_.useStrictShallowCopy_),r=t.scope_.immer_.shouldUseStrictIteration()}else n=Hb(e,!0);let i=n;return Pb(n)&&(n=new Set),Eb(i,(e,t)=>{Ab(n,e,jx(t))},r),t&&(t.finalized_=!1),n}function Mx(){db.push(`Sets cannot have "replace" patches.`,function(e){return`Unsupported patch operation: `+e},function(e){return`Cannot apply patch, path doesn't resolve: `+e},`Patching reserved attributes like __proto__, prototype and constructor is not allowed`);function e(n,r=[]){if(n.key_!==void 0){let e=n.parent_.copy_??n.parent_.base_,t=zb(kb(e,n.key_)),i=kb(e,n.key_);if(i===void 0||i!==n.draft_&&i!==n.base_&&i!==n.copy_||t!=null&&t.base_!==n.base_)return null;let a=n.parent_.type_===3,o;if(a){let e=n.parent_;o=Array.from(e.drafts_.keys()).indexOf(n.key_)}else o=n.key_;if(!(a&&e.size>o||Ob(e,o))||n.parent_.type_===1&&n.parent_.allIndicesReassigned_)return null;r.push(o)}if(n.parent_)return e(n.parent_,r);r.reverse();try{t(n.copy_,r)}catch{return null}return r}function t(e,t){let n=e;for(let e=0;e{let u=kb(o,e,c),f=kb(s,e,c),p=l?Ob(o,e)?n:`add`:r;if(u===f&&p===n)return;let m=t.concat(e);i.push(p===r?{op:p,path:m}:{op:p,path:m,value:d(f)}),a.push(p===`add`?{op:r,path:m}:p===r?{op:`add`,path:m,value:d(u)}:{op:n,path:m,value:d(u)})})}function s(e,t,n,i){let{base_:a,copy_:o}=e,s=0;a.forEach(e=>{if(!o.has(e)){let a=t.concat([s]);n.push({op:r,path:a,value:e}),i.unshift({op:`add`,path:a,value:e})}s++}),s=0,o.forEach(e=>{if(!a.has(e)){let a=t.concat([s]);n.push({op:`add`,path:a,value:e}),i.unshift({op:r,path:a,value:e})}s++})}function c(e,t,r){let{patches_:i,inversePatches_:a}=r;i.push({op:n,path:[],value:t===cb?void 0:t}),a.push({op:n,path:[],value:e})}function l(e,t){return t.forEach(t=>{let{path:i,op:a}=t,o=e;for(let e=0;e[e,u(t)]));if(Pb(e))return new Set(Array.from(e).map(u));let t=Object.create(mb(e));for(let n in e)t[n]=u(e[n]);return Ob(e,lb)&&(t[lb]=e[lb]),t}function d(e){return xb(e)?u(e):e}$b(Jb,{applyPatches_:l,generatePatches_:i,generateReplacementPatches_:c,getPath:e})}globalThis.Iterator?.from;var Nx=new Ox,Px=Nx.produce,Fx=Nx.produceWithPatches.bind(Nx),Ix=Nx.applyPatches.bind(Nx),Lx=1e3;function Rx(e,t){if(e.add(t),e.size>Lx){let t=e.values().next().value;t!==void 0&&e.delete(t)}}function zx(e){let{enablePatches:t=!1}=e;t&&Mx();let n=$y(),r=e.initialValue,i=new Set;return{on:n.on,value:()=>r,patch:(e,t=sb())=>{i.has(t)||(Mx(),r=Ix(r,e),Rx(i,t),n.emit(`updated`,r,void 0,t))},mutate:(e,a=sb())=>{if(!i.has(a)){if(Rx(i,a),t){let[t,i]=Fx(r,e);if(t===r)return;r=t,n.emit(`updated`,r,i,a)}else{let t=Px(r,e);if(t===r)return;r=t,n.emit(`updated`,r,void 0,a)}}},syncIds:i}}var Bx=typeof self==`object`?self:globalThis,Vx=new Set([`Error`,`EvalError`,`RangeError`,`ReferenceError`,`SyntaxError`,`TypeError`,`URIError`,`AggregateError`]),Hx=new Set([`Boolean`,`Number`,`String`,`Int8Array`,`Uint8Array`,`Uint8ClampedArray`,`Int16Array`,`Uint16Array`,`Int32Array`,`Uint32Array`,`Float16Array`,`Float32Array`,`Float64Array`,`BigInt64Array`,`BigUint64Array`]);function Ux(e,t){let n=(t,n)=>(e.set(n,t),t),r=i=>{if(e.has(i))return e.get(i);let[a,o]=t[i];switch(a){case 0:case-1:return n(o,i);case 1:{let e=n([],i);for(let t of o)e.push(r(t));return e}case 2:{let e=n({},i);for(let[t,n]of o)e[r(t)]=r(n);return e}case 3:return n(new Date(o),i);case 4:{let{source:e,flags:t}=o;return n(new RegExp(e,t),i)}case 5:{let e=n(new Map,i);for(let[t,n]of o)e.set(r(t),r(n));return e}case 6:{let e=n(new Set,i);for(let t of o)e.add(r(t));return e}case 7:{let{name:e,message:t}=o,r=Vx.has(e)?Bx[e]:void 0;return n(new(r??Bx.Error)(t),i)}case 8:return n(BigInt(o),i);case`BigInt`:return n(Object(BigInt(o)),i);case`ArrayBuffer`:return n(new Uint8Array(o).buffer,o);case`DataView`:{let{buffer:e}=new Uint8Array(o);return n(new DataView(e),o)}}if(typeof a==`string`&&Hx.has(a))return n(new Bx[a](o),i);throw TypeError(`unable to deserialize unsafe or unknown type: ${String(a)}`)};return r}function Wx(e){return Ux(new Map,e)(0)}var Gx=``,{toString:Kx}={},{keys:qx}=Object;function Jx(e){let t=typeof e;if(t!==`object`||!e)return[0,t];let n=Kx.call(e).slice(8,-1);switch(n){case`Array`:return[1,Gx];case`Object`:return[2,Gx];case`Date`:return[3,Gx];case`RegExp`:return[4,Gx];case`Map`:return[5,Gx];case`Set`:return[6,Gx];case`DataView`:return[1,n]}return n.includes(`Array`)?[1,n]:n.includes(`Error`)?[7,n]:[2,n]}function Yx([e,t]){return e===0&&(t===`function`||t===`symbol`)}function Xx(e,t,n,r){let i=(e,t)=>{let i=r.push(e)-1;return n.set(t,i),i},a=r=>{if(n.has(r))return n.get(r);let[o,s]=Jx(r);switch(o){case 0:{let t=r;switch(s){case`bigint`:o=8,t=r.toString();break;case`function`:case`symbol`:if(e)throw TypeError(`unable to serialize ${s}`);t=null;break;case`undefined`:return i([-1],r)}return i([o,t],r)}case 1:{if(s){let e=r;return s===`DataView`?e=new Uint8Array(r.buffer):s===`ArrayBuffer`&&(e=new Uint8Array(r)),i([s,[...e]],r)}let e=[],t=i([o,e],r);for(let t of r)e.push(a(t));return t}case 2:{if(s)switch(s){case`BigInt`:return i([s,r.toString()],r);case`Boolean`:case`Number`:case`String`:return i([s,r.valueOf()],r)}if(t&&`toJSON`in r)return a(r.toJSON());let n=[],c=i([o,n],r);for(let t of qx(r))(e||!Yx(Jx(r[t])))&&n.push([a(t),a(r[t])]);return c}case 3:return i([o,r.toISOString()],r);case 4:{let{source:e,flags:t}=r;return i([o,{source:e,flags:t}],r)}case 5:{let t=[],n=i([o,t],r);for(let[n,i]of r)(e||!(Yx(Jx(n))||Yx(Jx(i))))&&t.push([a(n),a(i)]);return n}case 6:{let t=[],n=i([o,t],r);for(let n of r)(e||!Yx(Jx(n)))&&t.push(a(n));return n}}let{message:c}=r;return i([o,{name:s,message:c}],r)};return a}function Zx(e,t={}){let n=[];return Xx(!(t.json||t.lossy),!!t.json,new Map,n)(e),n}var{parse:Qx,stringify:$x}=JSON,eS={json:!0,lossy:!0};function tS(e){return Wx(Qx(e))}function nS(e){return $x(Zx(e,eS))}function rS(e){return Wx(e)}function iS(e){return nS(e)}function aS(e){return tS(e)}var oS=256,sS=class extends Error{name=`StreamClosedError`};function cS(e={}){let t=e.id??sb(),n=Math.max(0,e.replayWindow??0),r=$y(),i=new AbortController,a=[],o=!1,s=0;function c(e){if(o)throw new sS(`Cannot write to a closed stream "${t}"`);s+=1,n>0&&(a.push({seq:s,chunk:e}),a.length>n&&(a.length-n===1?a.shift():a.splice(0,a.length-n))),r.emit(`chunk`,s,e)}function l(e){if(o)return;o=!0;let t=uS(e);i.abort(e),r.emit(`end`,t)}function u(){o||(o=!0,i.signal.aborted||i.abort(`stream closed`),r.emit(`end`,void 0))}function d(e){o||i.signal.aborted||i.abort(e??`aborted`)}let f=new WritableStream({write(e){c(e)},close(){u()},abort(e){l(e)}});return{id:t,signal:i.signal,get closed(){return o},get lastSeq(){return s},write:c,error:l,close:u,abort:d,writable:f,events:r,buffer:a}}function lS(e={}){let t=e.id??sb(),n=Math.max(1,e.highWaterMark??oS),r=[],i=0,a=!1,o=!1,s,c,l,u;function d(){if(c){if(r.length>0){let e=r.shift(),t=c;c=void 0,t.resolve({value:e,done:!1});return}if(a){let e=c;if(c=void 0,s){let t=Error(s.message);t.name=s.name,e.reject(t)}else e.resolve({value:void 0,done:!0})}}}function f(){if(l){for(;r.length>0;){let e=r.shift();try{l.enqueue(e)}catch{break}}if(a&&l){try{if(s){let e=Error(s.message);e.name=s.name,l.error(e)}else l.close()}catch{}l=void 0}}}function p(t,s){if(!(a||o)&&!(t<=i)){if(i=t,r.push(s),r.length>n){let t=r.length-n;r.splice(0,t),e.onOverflow?.(t)}d(),u&&f()}}function m(e){a||(a=!0,s=e,d(),u&&f())}function ee(){o||a||(o=!0,e.onCancel?.(),m(void 0))}function h(){return u||(u=new ReadableStream({start(e){l=e,f()},cancel(){ee()}}),u)}return{id:t,get cancelled(){return o},get done(){return a},get lastSeenSeq(){return i},get readable(){return h()},cancel:ee,_push:p,_end:m,[Symbol.asyncIterator](){return{next(){if(r.length>0)return Promise.resolve({value:r.shift(),done:!1});if(a){if(s){let e=Error(s.message);return e.name=s.name,Promise.reject(e)}return Promise.resolve({value:void 0,done:!0})}return new Promise((e,t)=>{c={resolve:e,reject:t}})},return(){return ee(),Promise.resolve({value:void 0,done:!0})}}}}}function uS(e){if(e instanceof Error)return{name:e.name||`Error`,message:e.message};if(typeof e==`string`)return{name:`Error`,message:e};try{return{name:`Error`,message:JSON.stringify(e)}}catch{return{name:`Error`,message:String(e)}}}var dS=128;function fS(e){return e.replace(/[^\w-]+/g,`_`).slice(0,dS)}var pS=`modulepreload`,mS=function(e,t){return new URL(e,t).href},hS={},gS=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function s(e){return import.meta.resolve?import.meta.resolve(e):new URL(e,import.meta.url).href}r=o(t.map(t=>{if(t=mS(t,n),t=s(t),t in hS)return;hS[t]=!0;let r=t.endsWith(`.css`);for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}let i=document.createElement(`link`);if(i.rel=r?`stylesheet`:pS,r||(i.as=`script`),i.crossOrigin=``,i.href=t,a&&i.setAttribute(`nonce`,a),document.head.appendChild(i),r)return new Promise((e,n)=>{i.addEventListener(`load`,e),i.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}).filter(e=>e!==void 0))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},_S=`__connection.json`,vS=`__DEVFRAME_CONNECTION__`,yS=`x-birpc-session`,bS=`__rpc-dump/index.json`,xS=`devframe:services`,SS=`devframe_otp`,CS=`devframe_auth_token`;Ty.postMessage.remoteAssetsError;var wS=class{cacheMap=new Map;options;keySerializer;constructor(e){this.options=e,this.keySerializer=e.keySerializer||(e=>Qy(e))}updateOptions(e){this.options={...this.options,...e}}cached(e,t){let n=this.cacheMap.get(e);if(n)return n.get(this.keySerializer(t))}has(e,t){return this.cacheMap.get(e)?.has(this.keySerializer(t))??!1}apply(e,t){let n=this.cacheMap.get(e.m)||new Map;n.set(this.keySerializer(e.a),t),this.cacheMap.set(e.m,n)}validate(e){return this.options.functions.includes(e)}clear(e){e?this.cacheMap.delete(e):this.cacheMap.clear()}},TS=jre({docsBase:`https://devfra.me/errors`,codes:{DF0019:{why:e=>`RPC function "${e.name}" has \`agent\` set but \`jsonSerializable\` is \`false\`; MCP requires JSON-serializable data.`,fix:"Remove `jsonSerializable: false`, or remove `agent` to keep it RPC-only."},DF0020:{why:e=>`RPC function "${e.name}" declares \`jsonSerializable: true\` but the value at "${e.path}" is a ${e.type}.`,fix:"Either drop `jsonSerializable: true` (falls back to structured-clone) or change the value to a JSON-safe shape."},DF0021:{why:e=>`RPC function "${e.name}" is already registered`,fix:"Use the `force` parameter to overwrite an existing registration."},DF0022:{why:e=>`RPC function "${e.name}" is not registered. Use register() to add new functions.`},DF0023:{why:e=>`RPC function "${e.name}" is not registered`},DF0024:{why:e=>`Either handler or setup function must be provided for RPC function "${e.name}"`},DF0025:{why:e=>`Function "${e.name}" not found in dump store`},DF0026:{why:e=>`No dump match for "${e.name}" with args: ${e.args}`},DF0027:{why:e=>`Function "${e.name}" with type "${e.type}" cannot have dump configuration. Only "static" and "query" types support dumps.`},DF0028:{why:e=>`Function "${e.name}" with type "${e.type}" cannot use \`snapshot: true\`. Only "query" functions support this sugar; "static" functions have equivalent default behavior already.`,fix:"Remove `snapshot: true`, or change the function type to `query`."},DF0043:{why:e=>`RPC function "${e.name}" received an invalid argument at position ${e.index}: ${e.issues}`,fix:"Pass a value that satisfies the `args` schema declared for this function."},DF0044:{why:e=>`RPC function "${e.name}" returned a value that failed its \`returns\` schema: ${e.issues}`,fix:"Make the handler return a value that satisfies the `returns` schema, or relax the schema."}}});function ES(e){if(e.agent&&e.jsonSerializable===!1)throw TS.DF0019({name:e.name});e.agent&&!e.jsonSerializable&&(e.jsonSerializable=!0)}async function DS(e,t){let n=e[`~standard`].validate(t);return n instanceof Promise?await n:n}function OS(e){return e.map(e=>{let t=e.path?.map(e=>typeof e==`object`?e.key:e).join(`.`);return t?`${t}: ${e.message}`:e.message}).join(`; `)}async function kS(e,t,n){let r=n.slice();if(!t||t.length===0)return r;for(let r=0;r{n.get(t)===r&&n.delete(t)}),n.set(t,r)),await r}if(!e.__promise){let n=Promise.resolve(e.setup(t));n.catch(()=>{e.__promise===n&&(e.__promise=void 0)}),e.__promise=n}return await e.__promise}async function MS(e,t){let n=e.handler;if(!n){let r=await jS(e,t);if(!r.handler)throw TS.DF0024({name:e.name});n=r.handler}let r=e.args,i=e.returns;if(!r&&!i)return n;let a=n;return async(...t)=>{let n=await kS(e.name,r,t),o=await a(...n);return await AS(e.name,i,o)}}var NS=class{context;definitions=new Map;functions;_onChanged=[];constructor(e){this.context=e;let t=this.definitions,n=this;this.functions=new Proxy({},{get(e,r){let i=t.get(r);if(i)return MS(i,n.context)},has(e,n){return t.has(n)},getOwnPropertyDescriptor(e,n){return{value:t.get(n)?.handler,configurable:!0,enumerable:!0}},ownKeys(){return Array.from(t.keys())}})}register(e,t=!1){if(this.definitions.has(e.name)&&!t)throw TS.DF0021({name:e.name});ES(e),this.definitions.set(e.name,e),this._onChanged.forEach(t=>t(e.name))}update(e,t=!1){if(!this.definitions.has(e.name)&&!t)throw TS.DF0022({name:e.name});ES(e),this.definitions.set(e.name,e),this._onChanged.forEach(t=>t(e.name))}onChanged(e){return this._onChanged.push(e),()=>{let t=this._onChanged.indexOf(e);t!==-1&&this._onChanged.splice(t,1)}}async getHandler(e){return await MS(this.definitions.get(e),this.context)}getSchema(e){let t=this.definitions.get(e);if(!t)throw TS.DF0023({name:String(e)});return{args:t.args,returns:t.returns}}has(e){return this.definitions.has(e)}get(e){return this.definitions.get(e)}list(){return Array.from(this.definitions.keys())}};function PS(e,t=``){return JSON.stringify(e,function(e,n){let r=this,i=r==null?n:r[e];if(i===void 0){if(Array.isArray(r))throw IS(t,`undefined`,r,e);return n}return i!==null&&FS(i,r,e,t),n})}function FS(e,t,n,r){if(typeof e==`bigint`)throw IS(r,`BigInt`,t,n);if(typeof e!=`object`)return;if(e instanceof Map)throw IS(r,`Map`,t,n);if(e instanceof Set)throw IS(r,`Set`,t,n);if(e instanceof Date)throw IS(r,`Date`,t,n);if(Array.isArray(e))return;let i=Object.getPrototypeOf(e);if(i!==null&&i!==Object.prototype)throw IS(r,e.constructor?.name??`class instance`,t,n)}function IS(e,t,n,r){let i=LS(n,r);return TS.DF0020({name:e||``,type:t,path:i})}function LS(e,t){return Array.isArray(e)?`[${t}]`:t===``?``:t}var RS=`__DEVFRAME_CONNECTION_META__`,zS=`__DEVFRAME_CONNECTION_AUTH_TOKEN__`;function BS(e){let t=[()=>window?.[e],()=>globalThis?.[e],()=>parent.window?.[e]];for(let e of t)try{let t=e();if(t)return t}catch{}}function VS(){return BS(vS)}function HS(){return BS(RS)}function US(e){if(e)return e;try{let e=localStorage.getItem(zS);if(e)return e}catch{}return BS(zS)}function WS(e){globalThis[vS]=e,globalThis[RS]={...e.connectionMeta,baseUrl:e.metaBaseUrl},e.authToken&&GS(e.authToken)}function GS(e){try{localStorage.setItem(zS,e)}catch{}globalThis[zS]=e;let t=VS();t&&(globalThis[vS]={...t,authToken:e})}function KS(e){let t=ib(_S,e);try{return new URL(t,globalThis.location?.href).href}catch{return t}}function qS(e,t){return t&&t!==e.authToken?{...e,authToken:t}:e}function JS(){let e=VS();if(e)return qS(e,US()??e.authToken??e.connectionMeta.authToken);let t=HS();if(t)return{connectionMeta:t,metaBaseUrl:t.baseUrl??KS(`./`),authToken:US(t.authToken)}}async function YS(e={}){if(e.connection){let t=qS(e.connection,US(e.authToken??e.connection.authToken??e.connection.connectionMeta.authToken));return WS(t),t}let t=Array.isArray(e.baseURL)?e.baseURL:[e.baseURL??`./`];if(e.connectionMeta){let n={connectionMeta:e.connectionMeta,metaBaseUrl:KS(t[0]??`./`),authToken:US(e.authToken??e.connectionMeta.authToken)};return WS(n),n}let n=JS();if(n){let t=qS(n,US(e.authToken??n.authToken??n.connectionMeta.authToken));return WS(t),t}let r=[];for(let n of t){let t=ib(_S,n),i=KS(n);try{let n=await fetch(t);if(!n.ok)throw Error(`Failed to fetch connection meta from ${i}: ${n.status}`);let r=await n.json(),a=n.url||i,o={connectionMeta:r,metaBaseUrl:r.baseUrl?new URL(r.baseUrl,a).href:a,authToken:US(e.authToken??r.authToken)};return WS(o),o}catch(e){r.push(e)}}throw Error(`Failed to get connection meta from ${t.join(`, `)}`,{cause:r})}var XS=class extends Error{name=`DevframeConnectionError`;kind;constructor(e,t,n){super(t,n),this.kind=e}};function ZS(e=SS){try{let t=globalThis.location?.hash?.replace(/^#/,``)??``;return new URLSearchParams(t).get(e)||void 0}catch{return}}function QS(e){try{let t=new URL(globalThis.location.href),n=new URLSearchParams(t.hash.replace(/^#/,``));if(!n.has(e))return;n.delete(e),t.hash=n.toString(),globalThis.history?.replaceState(globalThis.history.state,``,t.href)}catch{}}function $S(e=SS){let t=ZS(e);return t&&QS(e),t}async function eC(e,t={}){let n=$S(t.param??`devframe_otp`);return n?e.isTrusted?!0:e.requestTrustWithCode(n):!1}function tC(e){let t={},n=new WeakMap,r,i=()=>(r??=e.sharedState.get(xS,{initialValue:{}}).then(e=>(t=e.value(),e.on(`updated`,e=>{t=e}),e)),r);return i(),{state:i,has:e=>e in t,keys:()=>Object.keys(t),get:r=>{let i=t[r];if(!i)return;let a=n.get(i);return a||(a={...i,rpc:e.scope(i.scope).rpc},n.set(i,a)),a}}}function nC(e){let t=new Map,n=new Map,r=new Map,i=new Set,a=e.connectionMeta.backend===`static`;function o(e,t){let n=r.get(e);return n&&typeof n==`object`&&!Array.isArray(n)&&typeof t==`object`&&!Array.isArray(t)?{...n,...t}:t}e.client.register({name:Ty.broadcast.clientStateUpdated,type:`event`,handler:(e,n,r)=>{let i=t.get(e);i&&!i.syncIds.has(r)&&i.mutate(()=>o(e,n),r)}}),e.client.register({name:Ty.broadcast.clientStatePatch,type:`event`,handler:(e,n,r)=>{let i=t.get(e);i&&!i.syncIds.has(r)&&i.patch(n,r)}});function s(t,n){let r=[];return r.push(n.on(`updated`,(n,r,i)=>{a||(r?e.callEvent(`devframe:rpc:server-state:patch`,t,r,i):e.callEvent(`devframe:rpc:server-state:set`,t,n,i))})),()=>{for(let e of r)e()}}return{keys:()=>Array.from(t.keys()),onKeyAdded(e){return i.add(e),()=>{i.delete(e)}},delete(e){let i=n.get(e);n.delete(e);let a=t.delete(e);return r.delete(e),i?.(),a},get:async(c,l)=>{if(l?.initialValue!==void 0&&r.set(c,l.initialValue),t.has(c))return t.get(c);let u=zx({initialValue:l?.initialValue,enablePatches:!1});async function d(){if(a||e.callEvent(`devframe:rpc:server-state:subscribe`,c),l?.initialValue!==void 0){t.set(c,u);for(let e of i)e(c);return e.call(`devframe:rpc:server-state:get`,c).then(e=>{e!==void 0&&u.mutate(()=>o(c,e))}).catch(e=>{console.error(`Error getting server state`,e)}),n.set(c,s(c,u)),u}{let r=await e.call(`devframe:rpc:server-state:get`,c);u.mutate(()=>o(c,r)),t.set(c,u);for(let e of i)e(c);return n.set(c,s(c,u)),u}}return new Promise((t,n)=>{if(e.isTrusted)d().then(t,n);else{t(u);let n=!1;e.events.on(Ty.client.isTrustedUpdated,e=>{e&&!n&&(n=!0,d())})}})}}}var rC=new Map;function iC(e=rC){let t=new Map;return{serialize:n=>{let r;return n.t===`q`?r=n.m:(r=t.get(n.i),t.delete(n.i)),!(n.t===`s`&&`e`in n)&&r&&e.get(r)?.jsonSerializable===!0?PS(n,r??``):`s:${iS(n)}`},deserialize:e=>{let n=e.startsWith(`s:`)?aS(e.slice(2)):JSON.parse(e);return n.t===`q`&&n.i&&n.m&&t.set(n.i,n.m),n}}}function aC(){}function oC(e){let t=e.search(/\n\n|\r\n\r\n/);if(!(t<0))return{frame:e.slice(0,t),rest:e.slice(t+(e[t]===`\r`?4:2))}}function sC(e){let t=`message`,n=[];for(let r of e.split(/\r?\n/))r.startsWith(`:`)||(r.startsWith(`event:`)?t=r.slice(6).trimStart():r.startsWith(`data:`)&&n.push(r.slice(5).replace(/^ /,``)));return{event:t,data:n}}function cC(e){let{onConnected:t=aC,onError:n=aC,onDisconnected:r=aC,definitions:i,fetch:a=globalThis.fetch.bind(globalThis)}=e,o=e.url;e.authToken&&(o=`${o}${o.includes(`?`)?`&`:`?`}${CS}=${encodeURIComponent(e.authToken)}`);let s=iC(i),c=new AbortController,l=!1,u,d,f,p,m=new Promise((e,t)=>{f=e,p=t});m.catch(()=>{});function ee(e){l||(l=!0,p(e),n(e),r())}function h(){l||(l=!0,p(Error(`Devframe SSE stream closed`)),r())}function g(e,n){if(e===`session`){f(n),t();return}u?.(n)}async function te(e){let t=e.getReader();d=t;let n=new TextDecoder,r=``;for(;;){let{done:e,value:i}=await t.read();if(e)break;for(r+=n.decode(i,{stream:!0});;){let e=oC(r);if(!e)break;r=e.rest;let{event:t,data:n}=sC(e.frame);n.length>0&&g(t,n.join(` -`))}}h()}return(async()=>{try{let e=await a(o,{headers:{accept:`text/event-stream`},signal:c.signal});if(!e.ok||!e.body)throw Error(`Devframe SSE stream request failed: ${e.status}`);await te(e.body)}catch(e){if(c.signal.aborted){h();return}ee(e instanceof Error?e:Error(String(e)))}})(),{close:()=>{l=!0,c.abort(),d?.cancel().catch(()=>{})},on:e=>{u=e},post:async e=>{let t;try{t=await m}catch{return}if(l){n(Error(`Devframe SSE channel is closed; message dropped`));return}try{let n=await a(o,{method:`POST`,headers:{"content-type":`text/plain; charset=utf-8`,[yS]:t},body:e});if(n.status===200){let e=await n.text();e&&u?.(e);return}if(!n.ok)throw Error(`Devframe SSE POST failed: ${n.status}`)}catch(e){n(e instanceof Error?e:Error(String(e)))}},serialize:s.serialize,deserialize:s.deserialize}}function lC(e,t){let{channel:n,rpcOptions:r={}}=t;return My(e,{...n,timeout:-1,...r,proxify:!1})}function uC(e){let{transport:t,authToken:n,connectionMeta:r,events:i,clientRpc:a,rpcOptions:o={},callTimeout:s=0}=e,c=!1,l=`connecting`,u=null,d=Promise.withResolvers();function f(e,t=null){if(t?u=t:e===`connected`&&(u=null),e===l)return;let n=l;l=e,i.emit(Ty.client.connectionStatus,e,n)}let p=new Set;function m(e){for(let t of[...p])t.reject(e)}function ee(){return l===`disconnected`||l===`error`?new XS(`connection`,`[devframe] Not connected to the devframe server`,{cause:u??void 0}):l===`unauthorized`?new XS(`auth`,`[devframe] Not authorized by the devframe server`,{cause:u??void 0}):null}function h(e,t){return new Promise((n,r)=>{let a=!1,o,c={reject(e){a||(l(),i.emit(Ty.client.error,e,t),r(e))}};function l(){a=!0,p.delete(c),o&&clearTimeout(o)}p.add(c),s>0&&(o=setTimeout(()=>{c.reject(new XS(`timeout`,`[devframe] RPC call "${t}" timed out after ${s}ms`))},s)),e.then(e=>{a||(l(),n(e))},e=>{if(a)return;l();let n=e instanceof Error?e:Error(String(e));i.emit(Ty.client.error,n,t),r(n)})})}let g=new Map;for(let e of r.jsonSerializableMethods??[])g.set(e,{jsonSerializable:!0});let te=e.createChannel({definitions:g,onError(e){f(`error`,e),i.emit(Ty.client.connectionError,e),m(new XS(`connection`,`[devframe] Connection to the devframe server failed`,{cause:e}))},onDisconnected(){l!==`error`&&f(`disconnected`),m(new XS(`connection`,`[devframe] Disconnected from the devframe server`,{cause:u??void 0}))}}),ne=lC(a.functions,{channel:te,rpcOptions:o});a.register({name:Ty.broadcast.authRevoked,type:`event`,handler:()=>{c=!1;let e=new XS(`auth`,`[devframe] The devframe server revoked this client's trust`);f(`unauthorized`,e),i.emit(Ty.client.connectionError,e),m(e),i.emit(Ty.client.isTrustedUpdated,!1)}});let re=n;async function ie(e){re=e;let t=await ne.$call(`anonymous:devframe:auth`,{authToken:e,ua:navigator.userAgent,origin:location.origin});if(c=t.isTrusted,c)d.resolve(!0),f(`connected`);else{let e=new XS(`auth`,`[devframe] The devframe server refused this client's credentials`);f(`unauthorized`,e),i.emit(Ty.client.connectionError,e)}return i.emit(Ty.client.isTrustedUpdated,c),t.isTrusted}async function ae(e){let t=(await ne.$call(`anonymous:devframe:auth:exchange`,{code:e,ua:navigator.userAgent,origin:location.origin}))?.authToken??null;return t&&(re=t,c=!0,d.resolve(!0),f(`connected`),i.emit(Ty.client.isTrustedUpdated,!0)),t}async function oe(e={}){await ne.$call(`anonymous:devframe:auth:request-code`,{ua:navigator.userAgent,origin:location.origin,...e.reissue?{reissue:!0}:{}})}async function se(){return c?!0:ie(re??``)}async function ce(e=6e4){if(c&&d.resolve(!0),e<=0)return d.promise;let t;try{return await Promise.race([d.promise,new Promise((n,r)=>{t=setTimeout(()=>{r(Error(`[devframe] Timeout waiting for rpc to be trusted`))},e)})]),c}finally{clearTimeout(t)}}return{transport:t,get isTrusted(){return c},get status(){return l},get connectionError(){return u},requestTrust:se,requestTrustWithToken:ie,requestTrustWithCode:ae,requestAuthCode:oe,ensureTrusted:ce,call:(...e)=>{let t=String(e[0]),n=ee();return n?(i.emit(Ty.client.error,n,t),Promise.reject(n)):h(ne.$call(...e),t)},callEvent:(...e)=>{let t=ee();if(t){i.emit(Ty.client.error,t,String(e[0]));return}return ne.$callEvent(...e)},callOptional:(...e)=>{let t=String(e[0]),n=ee();return n?(i.emit(Ty.client.error,n,t),Promise.reject(n)):h(ne.$callOptional(...e),t)},close:()=>{te.close()}}}function dC(e,t,n){let r=(()=>{try{return new URL(t,n.href)}catch{return new URL(n.href)}})();if(e&&typeof e==`object`){if(e.host!=null||e.port!=null){let t=e.host??`${r.hostname}:${e.port}`;return new URL(e.path??`/`,`${r.protocol}//${t}`).href}return new URL(e.path??``,r).href}let i=e??``;return/^https?:\/\//i.test(i)?i:new URL(i,r).href}function fC(e){let{authToken:t,connectionMeta:n,metaBaseUrl:r,events:i,clientRpc:a,rpcOptions:o={},sseOptions:s={},callTimeout:c=0}=e,l=dC(n.sse,r??`./`,location);return uC({transport:`sse`,authToken:t,connectionMeta:n,events:i,clientRpc:a,rpcOptions:o,callTimeout:c,createChannel:e=>cC({url:l,authToken:t,definitions:e.definitions,...s,onConnected(){s.onConnected?.()},onError(t){e.onError(t),s.onError?.(t)},onDisconnected(){e.onDisconnected(),s.onDisconnected?.()}})})}function pC(e){let{name:t,message:n,cause:r,...i}=e,a=r instanceof Error?r:mC(r)?pC(r):r,o=a===void 0?Error(n):Error(n,{cause:a});return o.name=t,Object.assign(o,i),o}function mC(e){return typeof e==`object`&&!!e&&typeof e.message==`string`&&typeof e.name==`string`}function hC(e){return typeof e==`object`&&!!e&&e.type===`static`&&typeof e.path==`string`}function gC(e){return typeof e==`object`&&!!e&&e.type===`query`&&typeof e.records==`object`&&e.records!==null}function _C(e){return typeof e==`object`&&!!e&&(`output`in e||`error`in e)}function vC(e){if(e.error)throw pC(e.error);return e.output}function yC(e){return e.some(e=>e!=null)}function bC(e){return typeof e==`object`&&e&&`serialization`in e&&`data`in e?e.data:e}function xC(e,t){let n=new Map,r=new Map;function i(e,t){return t===`structured-clone`&&Array.isArray(e)?rS(e):e}function a(e,t){return i(bC(e),t)}async function o(e){n.has(e.path)||n.set(e.path,t(e.path).then(t=>a(t,e.serialization)));let r=await n.get(e.path);return _C(r)?vC(r):r}async function s(e,n){return r.has(e)||r.set(e,t(e).then(e=>a(e,n))),await r.get(e)}async function c(t,n){if(!(t in e))throw Error(`[devframe-rpc] Function "${t}" not found in dump store`);let r=e[t];if(hC(r)){if(yC(n))throw Error(`[devframe-rpc] No dump match for "${t}" with args: ${JSON.stringify(n)}`);return await o(r)}if(gC(r)){let e=Qy(n),i=r.records[e];if(i)return vC(await s(i,r.serialization));if(r.fallback)return vC(await s(r.fallback,r.serialization));throw Error(`[devframe-rpc] No dump match for "${t}" with args: ${JSON.stringify(n)}`)}if(!yC(n))return r;throw Error(`[devframe-rpc] No dump match for "${t}" with args: ${JSON.stringify(n)}`)}return{call:async(e,t)=>await c(e,t),callOptional:async(t,n)=>{if(t in e)return await c(t,n)},callEvent:async(e,t)=>{}}}async function SC(e){let t=xC(await e.fetchJsonFromBases(bS),e.fetchJsonFromBases);return{transport:`static`,isTrusted:!0,status:`connected`,connectionError:null,requestTrust:async()=>!0,requestTrustWithToken:async()=>!0,requestTrustWithCode:async()=>null,requestAuthCode:async()=>{},ensureTrusted:async()=>!0,call:(...e)=>t.call(e[0],e.slice(1)),callEvent:(...e)=>t.callEvent(e[0],e.slice(1)),callOptional:(...e)=>t.callOptional(e[0],e.slice(1)),close:()=>{}}}var CC=``;function wC(e,t){return`${e}${CC}${t}`}function TC(e){let t=new Map,n=new Map;e.client.register({name:Ty.broadcast.streamingChunk,type:`event`,handler(e,n,r,i){t.get(wC(e,n))?._push(r,i)}}),e.client.register({name:Ty.broadcast.streamingEnd,type:`event`,handler(e,n,r){let i=wC(e,n),a=t.get(i);a&&(a._end(r),t.delete(i))}}),e.client.register({name:Ty.broadcast.streamingUploadCancel,type:`event`,handler(e,t){let r=wC(e,t),i=n.get(r);i&&(i.abort(`server cancelled upload`),n.delete(r))}}),e.events.on(Ty.client.isTrustedUpdated,n=>{if(n)for(let[n,r]of t){if(r.cancelled||r.done)continue;let t=n.indexOf(CC);if(t<0)continue;let i=n.slice(0,t),a=n.slice(t+1);e.callEvent(`devframe:streaming:subscribe`,i,a,{afterSeq:r.lastSeenSeq})}});function r(n,r,i={}){let a=wC(n,r),o=t.get(a);if(o)return o;let s=lS({id:r,highWaterMark:i.highWaterMark,onOverflow(e){console.warn(`[devframe] DF0029: Stream "${n}#${r}" dropped ${e} chunk(s) after exceeding the client high-water mark.`)},onCancel(){e.callEvent(`devframe:streaming:cancel`,n,r),t.delete(a)}});if(t.set(a,s),e.isTrusted)e.callEvent(`devframe:streaming:subscribe`,n,r,{afterSeq:0});else{let i=e.events.on(Ty.client.isTrustedUpdated,o=>{o&&(i(),t.has(a)&&!s.cancelled&&!s.done&&e.callEvent(`devframe:streaming:subscribe`,n,r,{afterSeq:s.lastSeenSeq}))})}return s}function i(t,r){let i=wC(t,r),a=n.get(i);if(a)return a;let o=cS({id:r});return o.events.on(`chunk`,(n,i)=>{e.callEvent(`devframe:streaming:upload-chunk`,t,r,n,i)}),o.events.on(`end`,a=>{e.callEvent(`devframe:streaming:upload-end`,t,r,a),n.delete(i)}),n.set(i,o),o}return{subscribe:r,upload:i}}function EC(){}var DC=new Map;function OC(e){let t=e.url;e.authToken&&(t=`${t}?${CS}=${encodeURIComponent(e.authToken)}`);let n=new WebSocket(t),{onConnected:r=EC,onError:i=EC,onDisconnected:a=EC,definitions:o=DC}=e;n.addEventListener(`open`,e=>{r(e)}),n.addEventListener(`error`,e=>{let t=e instanceof Error?e:Error(e.type);i(t)}),n.addEventListener(`close`,e=>{a(e)});let s=iC(o);return{close:()=>{n.close()},on:e=>{n.addEventListener(`message`,t=>{e(t.data)})},post:e=>{if(n.readyState===WebSocket.OPEN){n.send(e);return}if(n.readyState===WebSocket.CONNECTING){let t=()=>{i(),n.readyState===WebSocket.OPEN&&n.send(e)},r=()=>i();function i(){n.removeEventListener(`open`,t),n.removeEventListener(`close`,r)}n.addEventListener(`open`,t),n.addEventListener(`close`,r);return}i(Error(`Devframe WebSocket is not open; message dropped`))},serialize:s.serialize,deserialize:s.deserialize}}function kC(e,t,n){let r=(()=>{try{return new URL(t,n.href)}catch{return new URL(n.href)}})(),i=r.protocol===`https:`?`wss:`:`ws:`;if(e&&typeof e==`object`){if(e.host!=null||e.port!=null){let t=e.host??`${r.hostname}:${e.port}`,n=new URL(e.path??`/`,`${i}//${t}`);return n.protocol=i,n.href}let t=new URL(e.path??``,r);return t.protocol=i,t.href}if(typeof e==`number`)return`${i}//${r.hostname}:${e}`;let a=e??``;if(/^wss?:\/\//i.test(a))return a;if(/^https?:\/\//i.test(a))return ab(a,/^https/i.test(a)?`wss://`:`ws://`);let o=new URL(a,r);return o.protocol=i,o.href}function AC(e){let{authToken:t,connectionMeta:n,metaBaseUrl:r,events:i,clientRpc:a,rpcOptions:o={},wsOptions:s={},callTimeout:c=0}=e,l=kC(n.websocket,r??`./`,location);return uC({transport:`websocket`,authToken:t,connectionMeta:n,events:i,clientRpc:a,rpcOptions:o,callTimeout:c,createChannel:e=>OC({url:l,authToken:t,definitions:e.definitions,...s,onConnected(e){s.onConnected?.(e)},onError(t){e.onError(t),s.onError?.(t)},onDisconnected(t){e.onDisconnected(),s.onDisconnected?.(t)}})})}function jC(e){return e.includes(`:`)}function MC(e,t){return jC(t)?t:`${e}:${t}`}function NC(e){return{async get(t){return(await e()).value()?.[t]},async set(t,n){(await e()).mutate(e=>{if(e===void 0)return{[t]:n};e[t]=n})},async delete(t){(await e()).mutate(e=>{e!==void 0&&delete e[t]})},async all(){return(await e()).value()??{}},async onChange(t){return(await e()).on(`updated`,e=>t(e??{}))}}}function PC(e,t,n){let r=`devframe:settings:${n}:${t}`,i;function a(){return i||=(async()=>(await e.ensureTrusted(),e.sharedState.get(r)))().catch(e=>{throw i=void 0,e}),i}return NC(a)}function FC(e,t){return{global:PC(e,t,`global`),project:PC(e,t,`project`)}}function IC(e,t){return{namespace:t,base:e,rpc:{namespace:t,register(n){if(jC(n.name))throw Error(`[devframe] Scoped client RPC registration for namespace "${t}" received an already-namespaced function name "${n.name}". Pass a bare name without a ":" separator.`);e.client.register({...n,name:`${t}:${n.name}`})},call:((n,...r)=>e.call(MC(t,n),...r)),callEvent:((n,...r)=>e.callEvent(MC(t,n),...r)),callOptional:((n,...r)=>e.callOptional(MC(t,n),...r)),sharedState:((n,r)=>e.sharedState.get(MC(t,n),r)),streaming:{subscribe:(n,r,i)=>e.streaming.subscribe(MC(t,n),r,i),upload:(n,r)=>e.streaming.upload(MC(t,n),r)}},settings:FC(e,t),scope:e.scope}}function LC(){if(typeof document<`u`){let e=document.modelContext;if(e)return e}if(typeof navigator<`u`){let e=navigator.modelContext;if(e)return e}}function RC(e,t={}){let n=t.modelContext??LC();if(!n)return()=>{};let r=n,i=new Map,a=new Map;function o(t,n){let o=fS(t.name),s=a.get(o);if(s&&s!==t.name){console.warn(`[devframe] WebMCP tool name "${o}" (from "${t.name}") collides with "${s}"; keeping the first registration.`);return}let c=new AbortController,l=Ny(t.type,n),u=r.registerTool({name:o,description:n.description,inputSchema:Iy(t.args),annotations:{title:n.title??t.name,readOnlyHint:l===`read`,destructiveHint:l===`destructive`},execute:n=>zC(t,e.context,n)},{signal:c.signal});u&&`then`in u&&u.then(()=>{},()=>{}),a.set(o,t.name),i.set(t.name,()=>{c.abort(),u&&`unregister`in u&&typeof u.unregister==`function`&&u.unregister(),a.delete(o)})}function s(t){let n=t?[t]:[...e.definitions.keys()];for(let t of n){i.get(t)?.(),i.delete(t);let n=e.definitions.get(t),r=n?.agent;n&&r&&o(n,r)}}s();let c=e.onChanged(e=>s(e));return()=>{c();for(let e of i.values())e();i.clear()}}async function zC(e,t,n){try{let r=Ry(n,e.args?.length);return{content:[{type:`text`,text:BC(await(await MS(e,t))(...r))}]}}catch(e){return{isError:!0,content:[{type:`text`,text:VC(e)}]}}}function BC(e){return e===void 0?`undefined`:typeof e==`string`?e:JSON.stringify(e,null,2)}function VC(e){if(!(e instanceof Error))return String(e);let t=e.cause instanceof Error?` (cause: ${e.cause.message})`:``;return`${e.name}: ${e.message}${t}`}function HC(e,t){if(t.backend===`static`)return`static`;let n=t.websocket!==void 0,r=t.sse!==void 0;if(e===`websocket`){if(!n)throw Error(`[devframe] transport: 'websocket' was requested, but this server does not advertise a WebSocket endpoint`);return`websocket`}if(e===`sse`){if(!r)throw Error(`[devframe] transport: 'sse' was requested, but this server does not advertise an SSE endpoint`);return`sse`}if(t.backend===`sse`&&r)return`sse`;if(n)return`websocket`;if(r)return`sse`;throw Error(`[devframe] This server advertises no RPC transport (backend "none"), so there is nothing to connect to. Enable the WebSocket or SSE endpoint on the server, or use its static/MCP surfaces instead.`)}async function UC(e={}){let{baseURL:t=`./`,rpcOptions:n={},cacheOptions:r=!1}=e,i=$y(),a=Array.isArray(t)?t:[t],o=await YS(e),{connectionMeta:s,metaBaseUrl:c,authToken:l}=o,u=a[0]??`./`;try{u=new URL(`.`,c).href}catch{}let d=new wS({functions:[],...typeof e.cacheOptions==`object`?e.cacheOptions:{}}),f={rpc:void 0},p=new NS(f),m=e.webmcp===!1?void 0:RC(p),ee,h=!1,g=0,te;function ne(){g++,te=void 0,d.clear(),r===!0&&d.updateOptions({functions:[]})}r&&(p.register({name:Ty.broadcast.cacheInvalidate,type:`event`,handler:ne}),i.on(Ty.client.connectionStatus,ne),i.on(Ty.client.isTrustedUpdated,ne));async function re(e){let t=[u,...a.filter(e=>e!==u)].filter(e=>e!=null),n=[];for(let r of t)try{return await fetch(ib(e,r)).then(t=>{if(!t.ok)throw Error(`Failed to fetch ${e} from ${r}: ${t.status}`);return t.json()})}catch(e){n.push(e)}throw Error(`Failed to load ${e} from ${t.join(`, `)}`,{cause:n})}let ie=e.callTimeout??0,ae=ie>0?ie:1/0,oe,se={authToken:l,connectionMeta:s,metaBaseUrl:c,events:i,clientRpc:p,callTimeout:e.callTimeout,rpcOptions:{...n,async onRequest(e,t,i){let a=performance.now()+ae;if(await n.onRequest?.call(this,e,t,i),r===!0&&e.i&&oe.isTrusted&&!e.m.startsWith(`anonymous:`)&&e.m!==`devframe:rpc:cacheable-functions`){function t(){if(performance.now()>=a)throw new XS(`timeout`,`[devframe] RPC call "${e.m}" timed out after ${ie}ms`)}for(;!te&&(t(),!(h||oe.status!==`connected`));){let e=g;te=oe.callOptional(`devframe:rpc:cacheable-functions`).then(t=>{e===g&&d.updateOptions({functions:t??[]})}).catch(t=>{throw e===g&&(te=void 0),t}),await te}await te,t()}let o=g;if(r&&e.i&&!h&&oe.isTrusted&&d.validate(e.m)){if(d.has(e.m,e.a))return i(d.cached(e.m,e.a));let n=await t(e);o===g&&!h&&d.apply(e,n)}else await t(e)}}},ce=HC(e.transport??`auto`,s);oe=ce===`static`?await SC({fetchJsonFromBases:re}):ce===`sse`?fC({...se,sseOptions:e.sseOptions}):AC({...se,wsOptions:e.wsOptions});let le;try{le=new BroadcastChannel(`devframe-auth`)}catch{}let ue,de=!1;function fe(e){return((...t)=>de||!ue?e(...t):ue.then(()=>e(...t)))}function pe(){h=!0,ne();try{ee?.(),m?.()}finally{try{le?.close()}finally{oe.close?.()}}}let me={events:i,get isTrusted(){return oe.isTrusted},get status(){return oe.status},get connectionError(){return oe.connectionError},get transport(){return oe.transport??ce},get connection(){return o},connectionMeta:s,ensureTrusted:oe.ensureTrusted,requestTrust:oe.requestTrust,requestTrustWithToken:async e=>(GS(e),o={...o,authToken:e},oe.requestTrustWithToken(e)),requestTrustWithCode:async e=>{let t=await oe.requestTrustWithCode(e);if(!t)return!1;GS(t),o={...o,authToken:t};try{le?.postMessage({type:`auth-update`,authToken:t})}catch{}return!0},requestAuthCode:e=>oe.requestAuthCode(e),call:fe(oe.call),callEvent:fe(oe.callEvent),callOptional:fe(oe.callOptional),client:p,sharedState:void 0,services:void 0,streaming:void 0,cacheManager:d,scope:void 0,close:pe};me.sharedState=nC(me),me.streaming=TC(me),me.services=tC(me);let he=new Map;me.scope=(e=>{if(!e)return me;let t=he.get(e);return t||(t=IC(me,e),he.set(e,t)),t}),f.rpc=me;function ge(){try{return typeof window<`u`&&window.self===window.top}catch{return!1}}async function _e(){if(e.simpleAuth!==!1&&ge()&&typeof globalThis.prompt==`function`)for(await me.requestAuthCode().catch(()=>{});!me.isTrusted;){let e=globalThis.prompt(`devframe: enter the authentication code shown in your terminal`);if(e==null)return;let t=e.trim();if(t&&await me.requestTrustWithCode(t))return}}async function ve(){let t=await oe.requestTrust(),n=e.otpParam??`devframe_otp`,r=n?await eC(me,{param:n}):!1;t||r||me.isTrusted||await _e()}return ue=ve().then(()=>{de=!0},()=>{de=!0}),s.mcp&&gS(async()=>{let{setupBrowserAgentRpcBridge:e}=await import(`./browser-agent-rpc-KH4HHvHf-BRjb6RYu.js`);return{setupBrowserAgentRpcBridge:e}},[],import.meta.url).then(({setupBrowserAgentRpcBridge:e})=>{h||(ee=e(me))}).catch(()=>{}),le&&(le.onmessage=e=>{e.data?.type===`auth-update`&&e.data.authToken&&me.requestTrustWithToken(e.data.authToken)}),me}var WC=UC,GC=[`components`,`injectors`,`signals`,`ngrx`,`tanstackQuery`,`forms`,`router`,`pipes`,`http`,`analog`,`capacitor`,`errors`,`plugins`,`performance`,`build`],KC=[`angular`,`ngrx`,`analog`,`angular-native`,`nativescript`,`capacitor`];function qC(e){return`pangular:${e}`}var JC=[`forms`,`router`,`ngrx`,`http`,`analog`,`components`,`tanstackQuery`,`plugins`],YC={refreshMs:{default:3e3,min:500,max:8e3},navigations:{default:50,min:5,max:500},formTimeline:{default:200,min:10,max:2e3},httpCalls:{default:200,min:10,max:2e3},changeLog:{default:200,min:10,max:2e3},cdCycles:{default:200,min:10,max:2e3},cdSlowMs:{default:16,min:1,max:1e3},capacitorCalls:{default:200,min:10,max:2e3},idleAfterMs:{default:6e4,min:0,max:6e5}},XC={"opted-out":`the request sets transferCache: false`,post:`POST requests are left out unless includePostRequests is set`,method:`only GET, HEAD and POST requests are cached`,"auth-headers":`it sends an Authorization, Proxy-Authorization or Cookie header`,credentials:`it sends credentials (withCredentials or credentials: include/same-origin)`,"no-cache-request":`the request asks for no-store, no-cache or private`,"no-cache-response":`the response has Cache-Control no-store, no-cache or private`,"set-cookie":`the response sets a cookie`,error:`failed responses are not stored`,mocked:`a fault rule answered before the transfer cache ran`,filter:`the transferCache filter passed to withPangular() left it out`,"cache-off-or-filter":`the transfer cache is off, or its filter (or another withHttpTransferCacheOptions setting) left it out`},ZC=[[0,`Network error (offline)`],[200,`OK`],[201,`Created`],[202,`Accepted`],[203,`Non-Authoritative Information`],[204,`No Content`],[205,`Reset Content`],[206,`Partial Content`],[207,`Multi-Status`],[208,`Already Reported`],[226,`IM Used`],[300,`Multiple Choices`],[301,`Moved Permanently`],[302,`Found`],[303,`See Other`],[304,`Not Modified`],[307,`Temporary Redirect`],[308,`Permanent Redirect`],[400,`Bad Request`],[401,`Unauthorized`],[402,`Payment Required`],[403,`Forbidden`],[404,`Not Found`],[405,`Method Not Allowed`],[406,`Not Acceptable`],[407,`Proxy Authentication Required`],[408,`Request Timeout`],[409,`Conflict`],[410,`Gone`],[411,`Length Required`],[412,`Precondition Failed`],[413,`Content Too Large`],[414,`URI Too Long`],[415,`Unsupported Media Type`],[416,`Range Not Satisfiable`],[417,`Expectation Failed`],[418,`I'm a Teapot`],[421,`Misdirected Request`],[422,`Unprocessable Content`],[423,`Locked`],[424,`Failed Dependency`],[425,`Too Early`],[426,`Upgrade Required`],[428,`Precondition Required`],[429,`Too Many Requests`],[431,`Request Header Fields Too Large`],[451,`Unavailable For Legal Reasons`],[499,`Client Closed Request`],[500,`Internal Server Error`],[501,`Not Implemented`],[502,`Bad Gateway`],[503,`Service Unavailable`],[504,`Gateway Timeout`],[505,`HTTP Version Not Supported`],[506,`Variant Also Negotiates`],[507,`Insufficient Storage`],[508,`Loop Detected`],[510,`Not Extended`],[511,`Network Authentication Required`],[520,`Web Server Returned an Unknown Error`],[521,`Web Server Is Down`],[522,`Connection Timed Out`],[523,`Origin Is Unreachable`],[524,`A Timeout Occurred`]];function QC(e){return ZC.some(([t])=>t===e)}var $C=/^[a-z][a-z0-9-]{0,39}$/;function ew(e,t){let n=t.plugins?.[e],r=t.inspectors.plugins&&$C.test(e)&&(n?.enabled??!0);return{enabled:r,tools:r&&t.agent.tools.plugins&&(n?.tools??!0),actions:r&&t.actions.plugins&&(n?.actions??!0)}}var tw=`pangular`,nw={mod:`Mod`,ctrl:`Ctrl`,control:`Ctrl`,meta:`Meta`,cmd:`Meta`,command:`Meta`,alt:`Alt`,option:`Alt`,opt:`Alt`,shift:`Shift`},rw=[`Mod`,`Ctrl`,`Meta`,`Alt`,`Shift`];function iw(e){if(typeof e!=`string`||e.length>40)return;let t=e.split(`+`).map(e=>e.trim());if(t.some(e=>!e))return;let n=new Set,r;for(let e of t){let t=nw[e.toLowerCase()];if(t){if(n.has(t))return;n.add(t);continue}if(r!==void 0)return;if(/^[a-z0-9]$/i.test(e))r=e.toUpperCase();else if(/^f([1-9]|1[0-2])$/i.test(e))r=e.toUpperCase();else return}if(r&&[...n].some(e=>e!==`Shift`)&&!(n.has(`Mod`)&&(n.has(`Ctrl`)||n.has(`Meta`))))return[...rw.filter(e=>n.has(e)),r].join(`+`)}function aw(e,t,n){let r=t.split(`+`),i=r.pop(),a=new Set(r),o=a.has(`Ctrl`)||a.has(`Mod`)&&!n,s=a.has(`Meta`)||a.has(`Mod`)&&n;if(e.ctrlKey!==o||e.metaKey!==s||e.altKey!==a.has(`Alt`)||e.shiftKey!==a.has(`Shift`))return!1;if(/^F\d+$/.test(i))return e.key.toUpperCase()===i;let c=/^\d$/.test(i)?`Digit${i}`:`Key${i}`;return e.code?e.code===c:e.key.toUpperCase()===i}function ow(e,t){if(!t)return e.replace(/^Mod\b/,`Ctrl`);let n={Mod:`⌘`,Meta:`⌘`,Ctrl:`⌃`,Alt:`⌥`,Shift:`⇧`};return e.split(`+`).map(e=>n[e]??e).join(``)}var sw=[{id:`dashboard`,label:`Dashboard`},{id:`timeline`,label:`Timeline`},{id:`audit`,label:`Audit`},{id:`analog`,label:`Analog`,inspector:`analog`},{id:`components`,label:`Components`,inspector:`components`},{id:`routes`,label:`Routes`,inspector:`router`},{id:`signals`,label:`Signals`,inspector:`signals`},{id:`injectors`,label:`Injectors`,inspector:`injectors`},{id:`store`,label:`Store`,inspector:`ngrx`},{id:`queries`,label:`Queries`,inspector:`tanstackQuery`},{id:`forms`,label:`Forms`,inspector:`forms`},{id:`pipes`,label:`Pipes`,inspector:`pipes`},{id:`network`,label:`SSR & HTTP`,inspector:`http`},{id:`errors`,label:`Errors`,inspector:`errors`},{id:`performance`,label:`Performance`,inspector:`performance`},{id:`build`,label:`Build`,inspector:`build`},{id:`capacitor`,label:`Capacitor`,inspector:`capacitor`},{id:`plugins`,label:`Plugins`,inspector:`plugins`}],cw=1e4;function lw(e){return sw.filter(t=>!(`inspector`in t)||e.inspectors[t.inspector])}var uw={components:`a component instance, by its id in the component tree`,injectors:`a component's element injector, by the component's id`,signals:`a component's signal graph, by the component's id`,forms:`a form, by its id`},dw=200;function fw(e){let t=new URLSearchParams({tab:e.tab});return e.id&&t.set(`id`,e.id),e.page&&t.set(`page`,e.page),`#${t.toString()}`}function pw(e){let t=new URLSearchParams(e.replace(/^#/,``)),n=e=>{let n=t.get(e)?.trim();return n&&n.length<=dw?n:void 0},r=n(`tab`);if(!r)return null;let i=n(`id`),a=n(`page`);return{tab:r,...i?{id:i}:{},...a?{page:a}:{}}}var mw=[{id:`settings`,title:`Open settings`,group:`Go to`,keywords:`preferences tabs`},{id:`pick-component`,title:`Pick component on page`,group:`Actions`,keywords:`select inspect element`,inspector:`components`},{id:`cd-record-start`,title:`Start recording change detection`,group:`Actions`,keywords:`profiler cycles`,inspector:`components`},{id:`cd-record-stop`,title:`Stop recording change detection`,group:`Actions`,keywords:`profiler cycles`,inspector:`components`},{id:`cd-clear`,title:`Clear change detection recording`,group:`Actions`,keywords:`reset recordings cycles`,inspector:`components`},{id:`theme:system`,title:`Theme: follow the system`,group:`Theme`,keywords:`auto`},{id:`theme:light`,title:`Theme: light`,group:`Theme`},{id:`theme:dark`,title:`Theme: dark`,group:`Theme`},{id:`dock:float`,title:`Popup: float`,group:`Popup`,keywords:`dock`,popupOnly:!0},{id:`dock:bottom`,title:`Popup: dock to the bottom`,group:`Popup`,keywords:`dock`,popupOnly:!0},{id:`dock:right`,title:`Popup: dock to the right`,group:`Popup`,keywords:`dock`,popupOnly:!0},{id:`dock:reset-size`,title:`Popup: reset the docked size`,group:`Popup`,keywords:`splitter resize height width`,popupOnly:!0},{id:`popout`,title:`Popup: open in its own window`,group:`Popup`,keywords:`pop out detach new window`,popupOnly:!0},{id:`popout:return`,title:`Popup: back into the page`,group:`Popup`,keywords:`pop in attach dock window`,popupOnly:!0}];function hw(e){let t=lw(e).map(e=>({id:`tab:${e.id}`,title:`Go to ${e.label}`,group:`Go to`,keywords:`tab open`})),n=mw.filter(t=>!t.inspector||e.inspectors[t.inspector]).map(({inspector:e,...t})=>t);return[...t,...n]}function gw(e){return e&&typeof e==`object`&&!Array.isArray(e)?e:{}}var _w=Object.freeze({minLength:24,threshold:4.5}),vw={min:16,max:512},yw={min:2,max:6};function bw(e){return typeof e==`number`&&Number.isInteger(e)&&e>=vw.min&&e<=vw.max}function xw(e){return typeof e==`number`&&Number.isFinite(e)&&e>=yw.min&&e<=yw.max}function Sw(e){if(e===!0)return{..._w};if(!e||typeof e!=`object`||Array.isArray(e))return;let{minLength:t,threshold:n}=e;return{minLength:bw(t)?t:_w.minLength,threshold:xw(n)?n:_w.threshold}}function Cw(e){let t=Sw(e);return t?{entropy:t}:{}}function ww(e,t){return typeof e==`boolean`?e:t}var Tw=100,Ew=100;function Dw(e){if(!Array.isArray(e))return[];let t=e.filter(e=>typeof e==`string`).map(e=>e.trim()).filter(e=>e&&e.length<=Ew);return[...new Set(t)].slice(0,Tw)}function Ow(e,t){let{default:n,min:r,max:i}=YC[t];return typeof e!=`number`||!Number.isFinite(e)?n:Math.min(i,Math.max(r,Math.round(e)))}function kw(e,t){return Object.fromEntries(e.map(e=>[e,t(e)]))}function Aw(e){let t=gw(e),n=gw(t.agent),r=gw(t.inspectors),i=gw(n.tools),a=gw(t.actions),o=ww(t.actions,!0),s=gw(t.redaction),c=gw(t.limits),l=kw(GC,e=>ww(r[e],!0));return{inspectors:l,agent:{readOnly:ww(n.readOnly,!1),tools:kw(GC,e=>l[e]&&ww(i[e],!0)),browserTools:ww(n.browserTools,!1)},actions:kw(JC,e=>l[e]&&ww(a[e],o)),redaction:{secretNames:Dw(s.secretNames),unmask:Dw(s.unmask),...Cw(s.entropy)},limits:Object.fromEntries(Object.keys(YC).map(e=>[e,Ow(c[e],e)])),popup:{hotkey:Lw(gw(t.popup).hotkey)},plugins:Iw(t.plugins),lint:{rules:Pw(t.lint)},analog:Mw(t.analog),ngrx:{trace:ww(gw(t.ngrx).trace,!1)}}}var jw=500;function Mw(e){let t=gw(e).contentSchema;return typeof t==`string`&&t.trim()&&t.length<=jw?{contentSchema:t.trim()}:{}}var Nw=200;function Pw(e){let t=gw(gw(e).rules),n={};for(let[e,r]of Object.entries(t).slice(0,Nw))typeof r==`boolean`&&(n[e]=r);return n}var Fw=100;function Iw(e){let t={};for(let[n,r]of Object.entries(gw(e)).slice(0,Fw)){if(!$C.test(n))continue;if(typeof r==`boolean`){t[n]={enabled:r,tools:!0,actions:!0};continue}let e=gw(r);r!==void 0&&Object.keys(e).length&&(t[n]={enabled:ww(e.enabled,!0),tools:ww(e.tools,!0),actions:ww(e.actions,!0)})}return t}function Lw(e){return e===!1?!1:iw(e)??`Alt+Shift+P`}function Rw(e){let t=e?.configs;return Aw(t?.[tw])}function zw(e){return`${{forms:`Writing to forms`,router:`Navigating and clearing navigations`,ngrx:`Restoring NgRx state, dispatching actions and changing the Store DevTools history`,http:`Changing HTTP mock rules and SSR overrides, refetching the TransferState payload, and clearing HTTP calls`,analog:`Calling API routes, clearing server calls, running Nitro tasks and purging the Nitro cache`,components:`Editing component properties and signals`,tanstackQuery:`Invalidating and refetching TanStack queries`,plugins:`Running plugin actions`}[e]} is turned off in the devtools config (actions.${e}).`}var Bw=[`pangular:build-meta`],Vw={components:`Components`,injectors:`Injectors`,signals:`Signals`,ngrx:`NgRx`,tanstackQuery:`TanStack Query`,forms:`Forms`,router:`Router`,pipes:`Pipes`,http:`HTTP`,analog:`Analog`,capacitor:`Capacitor`,errors:`Errors`,plugins:`Plugins`,performance:`Performance`,build:`Build`},Hw={forms:`Form writes`,router:`Navigation`,ngrx:`NgRx restore, dispatch and Store DevTools`,http:`HTTP mocking`,analog:`Analog API calls`,components:`Component edits`,tanstackQuery:`TanStack Query invalidate and refetch`,plugins:`Plugin actions`},Uw={refreshMs:e=>`poll every ${e} ms`,navigations:e=>`${e} navigations`,formTimeline:e=>`${e} form events`,httpCalls:e=>`${e} HTTP calls`,changeLog:e=>`${e} NgRx changes`,cdCycles:e=>`${e} change detection cycles`,cdSlowMs:e=>`slow cycles over ${e} ms`,capacitorCalls:e=>`${e} Capacitor plugin calls`,idleAfterMs:e=>e?`idle ${e/1e3} s after the last agent call`:`never idle`};function Ww(e){if(!e)return[];let t=[`On`];return e.minLength!==_w.minLength&&t.push(`${e.minLength} characters or more`),e.threshold!==_w.threshold&&t.push(`up to ${e.threshold} bits per character`),t}function Gw(e){let t=[],n=(e,n)=>{n.length&&t.push({label:e,value:n.join(`, `)})},r=GC.filter(t=>e.inspectors[t]);n(`Inspectors off`,GC.filter(t=>!e.inspectors[t]).map(e=>Vw[e])),n(`Agent`,e.agent.readOnly?[`Read-only`]:[]),n(`Hidden from the agent`,r.filter(t=>!e.agent.tools[t]).map(e=>Vw[e])),n(`Blocked actions`,JC.filter(t=>e.inspectors[t]&&!e.actions[t]).map(e=>Hw[e])),n(`Extra secret names`,e.redaction.secretNames),n(`Unmasked names`,e.redaction.unmask),n(`Entropy masking`,Ww(e.redaction.entropy)),n(`Limits`,Object.keys(YC).filter(t=>e.limits[t]!==YC[t].default).map(t=>Uw[t](e.limits[t]))),e.popup.hotkey!==`Alt+Shift+P`&&n(`Popup shortcut`,[e.popup.hotkey===!1?`Off`:e.popup.hotkey]);let i=Object.entries(e.plugins??{});return n(`Plugins off`,i.filter(([,e])=>!e.enabled).map(([e])=>e)),n(`Plugin tools or actions off`,i.filter(([,e])=>e.enabled&&(!e.tools||!e.actions)).map(([e,t])=>`${e} (${[!t.tools&&`tools`,!t.actions&&`actions`].filter(Boolean).join(`, `)})`)),n(`Lint rules off`,Object.entries(e.lint?.rules??{}).filter(([,e])=>!e).map(([e])=>e)),t}function Kw(e){let t={tags:[],directives:[],text:``},n=e.toLowerCase();return n=n.replace(/<\s*([^<>\s]+)\s*>/g,(e,n)=>(t.tags.push({value:n,exact:!0}),` `)),n=n.replace(/\[\s*([^[\]\s]+)\s*\]/g,(e,n)=>(t.directives.push({value:n,exact:!0}),` `)),n=n.replace(/(^|\s)([<[])([^<>[\]\s]*)$/,(e,n,r,i)=>(i&&(r===`<`?t.tags:t.directives).push({value:i,exact:!1}),n)),t.text=n.replace(/\s+/g,` `).trim(),t}function qw(e){return!e.tags.length&&!e.directives.length&&!e.text}function Jw(e,t){let n=e.tag.toLowerCase(),r=(e.directives??[]).map(e=>e.toLowerCase()),i=(e.attributes??[]).map(e=>e.toLowerCase()),a=[...r,...r.map(e=>e.replace(/directive$/,``)),...i];for(let{value:e,exact:r}of t.tags)if(r?n!==e:!n.startsWith(e))return!1;for(let{value:e,exact:n}of t.directives)if(!a.some(t=>n?t===e:t.includes(e)))return!1;if(t.text){let a=t.text;if(!(e.name.toLowerCase().includes(a)||n.includes(a)||r.some(e=>e.includes(a))||i.some(e=>e.includes(a))))return!1}return!0}var Yw={debugApi:{subject:`Live data`,since:`12.0`},injectorProviders:{subject:`Reading providers and environment injectors`,since:`16.2`},injectorMetadata:{subject:`The full injector tree`,since:`17.0`},isSignal:{subject:`Telling signals apart in component values`,since:`17.1`},signalGraph:{subject:`The live signal graph`,since:`20.1`},deferBlocks:{subject:`Listing @defer blocks`,since:`19.1`},forBlocks:{subject:`Listing @for blocks`,since:`22.0`},profiler:{subject:`Recording change detection`,since:`20.0`},angularProfiling:{subject:`Angular profiling`,since:`20.0`},routerInstance:{subject:`The router debug util`,since:`20.3`}};function Xw(e){let t=/^(\d+)\.(\d+)/.exec(e.trim());return t?`${t[1]}.${t[2]}`:e.trim()}function Zw(e){let t=/^(\d+)(?:\.(\d+))?/.exec(e.trim());return t?[Number(t[1]),Number(t[2]??0)]:null}function Qw(e,t){let n=Zw(e),r=Zw(t);return!n||!r?!1:n[0]===r[0]?n[1]>=r[1]:n[0]>r[0]}function $w(e,t){return e?.capabilities?.[t]===!1}function eT(e,t){let n=Yw[e],r=`${n.subject} needs Angular ${n.since} or later`;if(!t)return`${r}; this page's Angular version is unknown.`;let i=Xw(t);return Qw(t,n.since)?`${r} in a development build; this page runs Angular ${i} without it, which usually means a production build.`:`${r}; this page runs Angular ${i}.`}function tT(e){return e.hydration===`hydrated`&&e.hydratedAt===void 0?`hydrated before inspection`:e.hydration}var nT=/^on (viewport|interaction|hover)\b/;function rT(e){let t=e.filter(e=>!/^(prefetch|hydrate) /.test(e));return t.length>0&&t.every(e=>nT.test(e))}function iT(e,t){let n=[],r=e.since>0?Math.max(0,Math.round((t-e.since)/1e3)):0;return e.state===`error`&&n.push({kind:`failed`,text:`failed to load`,label:`failed`}),(e.state===`placeholder`||e.state===`initial`)&&r*1e3>=1e4&&n.push(rT(e.triggers)?{kind:`waiting`,text:`waiting for its trigger for ${r}s`,label:`waiting ${r}s`,seconds:r}:{kind:`stuck`,text:`on its placeholder for ${r}s`,label:`stuck ${r}s`,seconds:r}),e.hydrateNever?n.push({kind:`hydrate-never`,text:`hydrate never: the server HTML stays static`,label:`hydrate never`}):e.hydration===`dehydrated`&&n.push({kind:`dehydrated`,text:`still dehydrated`,label:`dehydrated`}),n}var aT=`pangular-page-id`,oT=null;function sT(e){oT=e}function cT(){if(oT)return oT;try{return new URLSearchParams(location.search).get(`pageId`)||(window.top===window?null:sessionStorage.getItem(aT)||null)}catch{return null}}function lT(e,t){if(t.chosen&&e[t.chosen])return t.chosen;if(t.host)return t.host;if(t.previous&&e[t.previous])return t.previous;let n=null;for(let t of Object.values(e))(!n||t.reportedAt>n.reportedAt)&&(n=t);return n?.pageId??null}function uT(e,t){return e?t?e.pages?.[t]??null:e:null}function dT(e,t){return e?t?e.pages?.[t]??null:e.graph??null:null}function fT(){return{functions:[...Bw]}}function pT(e,t,n){return e?e.scope(`pangular`).rpc.call(t,...n===void 0?[]:[n]):Promise.resolve(null)}function mT(e,t,n){return pT(e,t,n).then(e=>e,()=>null)}function hT(e){return e?.connectionMeta.backend===`static`}function gT(e){let t=()=>{let t=e()?.scope(`pangular`).rpc;t&&(t.callEvent(`request-page-highlight`,null),t.callEvent(`request-form-highlight`,null))};return addEventListener(`pagehide`,t),()=>{removeEventListener(`pagehide`,t),t()}}function _T(e=globalThis){delete e.__DEVFRAME_CONNECTION__,delete e.__DEVFRAME_CONNECTION_META__}function vT(e){return e.split(`@`)[1]??``}var yT={signal:`Signal Forms`,reactive:`Reactive`,template:`Template-driven`},bT={own:`validator`,directive:`template attribute`,tree:`cross-field rule`,async:`async`,parse:`parse`,submission:`server`,schema:`schema`,manual:`setErrors`},xT=mT,ST={key:`name looks secret`,"input-type":`password input`,autocomplete:`autocomplete is a secret kind`,marker:`marked as mask`,parent:`inside a secret group`,config:`listed in mask`};function CT(e){return ST[e]??e}var wT=`https://pangular-inspector.dev/security/#opt-fields-in-or-out`;async function TT(e,t){return await xT(e,`request-form-action`,t)??{ok:!1,error:`The devtools server did not answer.`}}function ET(e){return`${e.ok?e.message??`Done.`:e.error??`Failed.`}${e.skipped?.length?` Skipped: ${e.skipped.map(e=>`${e.path} (${e.reason})`).join(`, `)}.`:``}${e.status?` Status: ${e.status}.`:``}`}var DT=/"(?:[^"\\\n]|\\.)*"|`([^`\n]*)`|\*\*/g;function OT(e){return(e??``).replace(/^_Labels, paths.*_\n\n/,``).replace(DT,(e,t)=>t??(e===`**`?``:e))}function kT(e,t){let n=Math.max(0,e-t),r=Math.ceil(n/6e4);if(r<60)return`in ${r} min`;let i=Math.round(r/60);return i<48?`in ${i} ${i===1?`hour`:`hours`}`:`in ${Math.round(i/24)} days`}function AT(e,t){return e.length?e.join(`, `):t}function jT(e,t){let n=[];if(n.push({label:`One-time code`,value:e.auth?e.oneTimeCode.state===`locked`?`Locked after too many wrong codes: run pangular token --rotate or restart the server for a new code`:e.oneTimeCode.expiresAt?`On, current code expires ${kT(e.oneTimeCode.expiresAt,t)}`:`On`:`Off: every client is trusted`}),e.auth){let{count:r,nextExpiresAt:i,lastExpiresAt:a}=e.tokens;n.push({label:`Trusted clients`,value:r?r===1||i===a?`${r} ${r===1?`token`:`tokens`}, expires ${kT(i??t,t)}`:`${r} tokens, the first expires ${kT(i??t,t)}, the last ${kT(a??t,t)}`:`None`}),e.pairingTokens&&n.push({label:`Pairing tokens`,value:`${e.pairingTokens} accepted instead of the code`})}return e.reported?(n.push({label:`Reach`,value:e.network?`This machine and other machines`:`This machine only`}),n.push({label:`Allowed origins`,value:e.originCheck?`${AT(e.allowedOrigins,`This machine and the Chrome extension`)}${e.customOrigins?`, plus a custom origin check`:``}`:`Any: the origin check is off`}),(e.allowedHosts===`any`||e.allowedHosts.length)&&n.push({label:`Allowed hosts`,value:e.allowedHosts===`any`?`Any`:e.allowedHosts.join(`, `)}),n):n}function MT(e){return Rw(e?.connectionMeta)}function NT(e){return Array.isArray(e)&&e.every(e=>typeof e==`string`)?[...e]:void 0}function PT(e,t){if(!t||typeof t!=`object`)return e;let n=NT(t.secretNames),r=NT(t.unmask);if(!n||!r)return e;let i=Sw(t.entropy);return{...e,redaction:i?{secretNames:n,unmask:r,entropy:i}:{secretNames:n,unmask:r}}}function FT(e,t){return MT(e).actions[t]}var IT={components:`components`,routes:`router`,signals:`signals`,injectors:`injectors`,store:`ngrx`,queries:`tanstackQuery`,forms:`forms`,pipes:`pipes`,network:`http`,analog:`analog`,capacitor:`capacitor`,errors:`errors`,plugins:`plugins`,performance:`performance`,build:`build`};function LT(e){return IT[e]}var RT=`https://pangular-inspector.dev/getting-started/configuration/#inspectors-and-agent-tools`;function zT(e,t){let n=IT[e];return!n||t.inspectors[n]}function BT(e,t){e&1&&(w(),pg(0,`rect`,5)(1,`rect`,6)(2,`rect`,7)(3,`rect`,8))}function VT(e,t){e&1&&(w(),pg(0,`path`,9)(1,`circle`,10)(2,`circle`,11)(3,`path`,12))}function HT(e,t){e&1&&(w(),pg(0,`path`,13)(1,`path`,14))}function UT(e,t){e&1&&(w(),pg(0,`path`,15)(1,`path`,16)(2,`path`,17))}function WT(e,t){e&1&&(w(),pg(0,`circle`,18)(1,`path`,19)(2,`circle`,20))}function GT(e,t){e&1&&(w(),pg(0,`path`,1))}function KT(e,t){e&1&&(w(),pg(0,`path`,21)(1,`path`,22)(2,`path`,23)(3,`path`,24))}function qT(e,t){e&1&&(w(),pg(0,`ellipse`,25)(1,`path`,26)(2,`path`,27))}function JT(e,t){e&1&&(w(),pg(0,`rect`,28)(1,`path`,29)(2,`path`,30)(3,`path`,31))}function YT(e,t){e&1&&(w(),pg(0,`circle`,32)(1,`path`,9)(2,`path`,33))}function XT(e,t){e&1&&(w(),pg(0,`path`,34)(1,`path`,35)(2,`path`,36)(3,`path`,37)(4,`circle`,38))}function ZT(e,t){e&1&&(w(),pg(0,`circle`,39)(1,`path`,40))}function QT(e,t){e&1&&(w(),pg(0,`ellipse`,41)(1,`path`,42)(2,`path`,43)(3,`path`,44)(4,`path`,45))}function $T(e,t){e&1&&(w(),pg(0,`circle`,32)(1,`path`,46)(2,`path`,47))}function eE(e,t){e&1&&(w(),pg(0,`path`,48)(1,`path`,49))}function tE(e,t){e&1&&(w(),pg(0,`path`,50)(1,`path`,51)(2,`path`,52))}function nE(e,t){e&1&&(w(),pg(0,`path`,2))}function rE(e,t){e&1&&(w(),pg(0,`path`,3))}function iE(e,t){e&1&&(w(),pg(0,`path`,4))}var aE=class e{name=$.required();static ɵfac=function(t){return new(t||e)};static ɵcmp=O({type:e,selectors:[[`app-tab-icon`]],inputs:{name:[1,`name`]},decls:20,vars:1,consts:[[`viewBox`,`0 0 24 24`,`width`,`16`,`height`,`16`,`fill`,`none`,`stroke`,`currentColor`,`stroke-width`,`1.8`,`stroke-linecap`,`round`,`stroke-linejoin`,`round`,`aria-hidden`,`true`],[`d`,`M22 12h-4l-3 9L9 3l-3 9H2`],[`d`,`M10 3h4v3a2 2 0 1 0 4 0V5h1a2 2 0 0 1 2 2v4h-2a2 2 0 1 0 0 4h2v4a2 2 0 0 1-2 2h-4v-2a2 2 0 1 0-4 0v2H7a2 2 0 0 1-2-2v-4H4a2 2 0 1 1 0-4h1V7a2 2 0 0 1 2-2h3Z`],[`d`,`m8 3 4 8 5-5 5 15H2L8 3z`],[`fill`,`currentColor`,`stroke`,`none`,`transform`,`translate(1.8 1.8) scale(0.85)`,`d`,`M24 3.7l-5.766 5.766 5.725 5.736-3.713 3.712L5.073 3.742 8.786.03l5.736 5.726L20.284 0 24 3.7zM.029 8.785l3.713-3.713 15.173 15.173-3.713 3.714-5.732-5.726L3.7 24 0 20.285l5.754-5.764L.029 8.785z`],[`x`,`3`,`y`,`3`,`width`,`7`,`height`,`9`,`rx`,`1.5`],[`x`,`14`,`y`,`3`,`width`,`7`,`height`,`5`,`rx`,`1.5`],[`x`,`14`,`y`,`12`,`width`,`7`,`height`,`9`,`rx`,`1.5`],[`x`,`3`,`y`,`16`,`width`,`7`,`height`,`5`,`rx`,`1.5`],[`d`,`M3 12h18`],[`cx`,`7`,`cy`,`12`,`r`,`2`],[`cx`,`14`,`cy`,`12`,`r`,`2`],[`d`,`M18 7v10`],[`d`,`M9 11l2 2 4-4`],[`d`,`M12 3 4 6v6c0 4.5 3.4 8.3 8 9 4.6-.7 8-4.5 8-9V6l-8-3Z`],[`d`,`M12 2 3 7l9 5 9-5-9-5Z`],[`d`,`m3 12 9 5 9-5`],[`d`,`m3 17 9 5 9-5`],[`cx`,`6`,`cy`,`19`,`r`,`3`],[`d`,`M9 19h8.5a3.5 3.5 0 0 0 0-7h-11a3.5 3.5 0 0 1 0-7H15`],[`cx`,`18`,`cy`,`5`,`r`,`3`],[`d`,`M12 22v-5`],[`d`,`M9 8V2`],[`d`,`M15 8V2`],[`d`,`M18 8v5a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4V8Z`],[`cx`,`12`,`cy`,`5`,`rx`,`9`,`ry`,`3`],[`d`,`M3 5v14a9 3 0 0 0 18 0V5`],[`d`,`M3 12a9 3 0 0 0 18 0`],[`x`,`3`,`y`,`4`,`width`,`18`,`height`,`16`,`rx`,`2`],[`d`,`M7 9h10`],[`d`,`M7 13h6`],[`d`,`M7 17h8`],[`cx`,`12`,`cy`,`12`,`r`,`9`],[`d`,`M12 3a14 14 0 0 1 0 18a14 14 0 0 1 0-18Z`],[`d`,`M4 7h10`],[`d`,`M4 17h6`],[`d`,`m14 13 4 4-4 4`],[`d`,`M10 17h8`],[`cx`,`18`,`cy`,`7`,`r`,`3`],[`cx`,`12`,`cy`,`12`,`r`,`3`],[`d`,`M19.4 15a1.7 1.7 0 0 0 .3 1.8l.1.1a2 2 0 1 1-2.8 2.8l-.1-.1a1.7 1.7 0 0 0-1.8-.3 1.7 1.7 0 0 0-1 1.5V21a2 2 0 1 1-4 0v-.1a1.7 1.7 0 0 0-1.1-1.5 1.7 1.7 0 0 0-1.8.3l-.1.1a2 2 0 1 1-2.8-2.8l.1-.1a1.7 1.7 0 0 0 .3-1.8 1.7 1.7 0 0 0-1.5-1H3a2 2 0 1 1 0-4h.1a1.7 1.7 0 0 0 1.5-1.1 1.7 1.7 0 0 0-.3-1.8l-.1-.1a2 2 0 1 1 2.8-2.8l.1.1a1.7 1.7 0 0 0 1.8.3H9a1.7 1.7 0 0 0 1-1.5V3a2 2 0 1 1 4 0v.1a1.7 1.7 0 0 0 1 1.5 1.7 1.7 0 0 0 1.8-.3l.1-.1a2 2 0 1 1 2.8 2.8l-.1.1a1.7 1.7 0 0 0-.3 1.8V9a1.7 1.7 0 0 0 1.5 1H21a2 2 0 1 1 0 4h-.1a1.7 1.7 0 0 0-1.5 1Z`],[`cx`,`11`,`cy`,`5`,`rx`,`8`,`ry`,`3`],[`d`,`M3 5v6c0 1.66 3.58 3 8 3`],[`d`,`M3 11v6c0 1.66 3.58 3 8 3`],[`d`,`M21 14a4 4 0 1 1-1.2-2.85L21 12.3`],[`d`,`M21 9v3.3h-3.3`],[`d`,`M12 7v6`],[`d`,`M12 16.5v.01`],[`d`,`M12 14l4-4`],[`d`,`M3.34 19a10 10 0 1 1 17.32 0`],[`d`,`M21 16V8l-9-5-9 5v8l9 5 9-5Z`],[`d`,`m3.3 7 8.7 5 8.7-5`],[`d`,`M12 22V12`]],template:function(e,t){if(e&1&&(w(),R(0,`svg`,0),A(1,BT,4,0)(2,VT,4,0)(3,HT,2,0)(4,UT,3,0)(5,WT,3,0)(6,GT,1,0,`:svg:path`,1)(7,KT,4,0)(8,qT,3,0)(9,JT,4,0)(10,YT,3,0)(11,XT,5,0)(12,ZT,2,0)(13,QT,5,0)(14,$T,3,0)(15,eE,2,0)(16,tE,3,0)(17,nE,1,0,`:svg:path`,2)(18,rE,1,0,`:svg:path`,3)(19,iE,1,0,`:svg:path`,4),z()),e&2){let e;D(),j((e=t.name())===`dashboard`?1:e===`timeline`?2:e===`audit`?3:e===`components`?4:e===`routes`?5:e===`signals`?6:e===`injectors`?7:e===`store`?8:e===`forms`?9:e===`network`?10:e===`pipes`?11:e===`settings`?12:e===`queries`?13:e===`errors`?14:e===`performance`?15:e===`build`?16:e===`plugins`?17:e===`analog`?18:e===`capacitor`?19:-1)}},styles:[`[_nghost-%COMP%] { + `):``,this.name=`UnsubscriptionError`,this.errors=t}});function or(e,t){if(e){var n=e.indexOf(t);0<=n&&e.splice(n,1)}}var sr=function(){function e(e){this.initialTeardown=e,this.closed=!1,this._parentage=null,this._finalizers=null}return e.prototype.unsubscribe=function(){var e,t,n,r,i;if(!this.closed){this.closed=!0;var a=this._parentage;if(a){if(this._parentage=null,Array.isArray(a))try{for(var o=Zn(a),s=o.next();!s.done;s=o.next())s.value.remove(this)}catch(t){e={error:t}}finally{try{s&&!s.done&&(t=o.return)&&t.call(o)}finally{if(e)throw e.error}}else a.remove(this)}var c=this.initialTeardown;if(rr(c))try{c()}catch(e){i=e instanceof ar?e.errors:[e]}var l=this._finalizers;if(l){this._finalizers=null;try{for(var u=Zn(l),d=u.next();!d.done;d=u.next()){var f=d.value;try{ur(f)}catch(e){i??=[],e instanceof ar?i=$n($n([],Qn(i)),Qn(e.errors)):i.push(e)}}}catch(e){n={error:e}}finally{try{d&&!d.done&&(r=u.return)&&r.call(u)}finally{if(n)throw n.error}}}if(i)throw new ar(i)}},e.prototype.add=function(t){if(t&&t!==this){if(this.closed)ur(t);else{if(t instanceof e){if(t.closed||t._hasParent(this))return;t._addParent(this)}(this._finalizers=this._finalizers??[]).push(t)}}},e.prototype._hasParent=function(e){var t=this._parentage;return t===e||Array.isArray(t)&&t.includes(e)},e.prototype._addParent=function(e){var t=this._parentage;this._parentage=Array.isArray(t)?(t.push(e),t):t?[t,e]:e},e.prototype._removeParent=function(e){var t=this._parentage;t===e?this._parentage=null:Array.isArray(t)&&or(t,e)},e.prototype.remove=function(t){var n=this._finalizers;n&&or(n,t),t instanceof e&&t._removeParent(this)},e.EMPTY=(function(){var t=new e;return t.closed=!0,t})(),e}(),cr=sr.EMPTY;function lr(e){return e instanceof sr||e&&`closed`in e&&rr(e.remove)&&rr(e.add)&&rr(e.unsubscribe)}function ur(e){rr(e)?e():e.unsubscribe()}var dr={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1},fr={setTimeout:function(e,t){var n=[...arguments].slice(2),r=fr.delegate;return r?.setTimeout?r.setTimeout.apply(r,$n([e,t],Qn(n))):setTimeout.apply(void 0,$n([e,t],Qn(n)))},clearTimeout:function(e){return(fr.delegate?.clearTimeout||clearTimeout)(e)},delegate:void 0};function pr(e){fr.setTimeout(function(){var t=dr.onUnhandledError;if(t)t(e);else throw e})}function mr(){}var hr=(function(){return vr(`C`,void 0,void 0)})();function gr(e){return vr(`E`,void 0,e)}function _r(e){return vr(`N`,e,void 0)}function vr(e,t,n){return{kind:e,value:t,error:n}}var yr=null;function br(e){if(dr.useDeprecatedSynchronousErrorHandling){var t=!yr;if(t&&(yr={errorThrown:!1,error:null}),e(),t){var n=yr,r=n.errorThrown,i=n.error;if(yr=null,r)throw i}}else e()}function xr(e){dr.useDeprecatedSynchronousErrorHandling&&yr&&(yr.errorThrown=!0,yr.error=e)}var Sr=function(e){Jn(t,e);function t(t){var n=e.call(this)||this;return n.isStopped=!1,t?(n.destination=t,lr(t)&&t.add(n)):n.destination=Ar,n}return t.create=function(e,t,n){return new Er(e,t,n)},t.prototype.next=function(e){this.isStopped?kr(_r(e),this):this._next(e)},t.prototype.error=function(e){this.isStopped?kr(gr(e),this):(this.isStopped=!0,this._error(e))},t.prototype.complete=function(){this.isStopped?kr(hr,this):(this.isStopped=!0,this._complete())},t.prototype.unsubscribe=function(){this.closed||(this.isStopped=!0,e.prototype.unsubscribe.call(this),this.destination=null)},t.prototype._next=function(e){this.destination.next(e)},t.prototype._error=function(e){try{this.destination.error(e)}finally{this.unsubscribe()}},t.prototype._complete=function(){try{this.destination.complete()}finally{this.unsubscribe()}},t}(sr),Cr=Function.prototype.bind;function wr(e,t){return Cr.call(e,t)}var Tr=function(){function e(e){this.partialObserver=e}return e.prototype.next=function(e){var t=this.partialObserver;if(t.next)try{t.next(e)}catch(e){Dr(e)}},e.prototype.error=function(e){var t=this.partialObserver;if(t.error)try{t.error(e)}catch(e){Dr(e)}else Dr(e)},e.prototype.complete=function(){var e=this.partialObserver;if(e.complete)try{e.complete()}catch(e){Dr(e)}},e}(),Er=function(e){Jn(t,e);function t(t,n,r){var i=e.call(this)||this,a;if(rr(t)||!t)a={next:t??void 0,error:n??void 0,complete:r??void 0};else{var o;i&&dr.useDeprecatedNextContext?(o=Object.create(t),o.unsubscribe=function(){return i.unsubscribe()},a={next:t.next&&wr(t.next,o),error:t.error&&wr(t.error,o),complete:t.complete&&wr(t.complete,o)}):a=t}return i.destination=new Tr(a),i}return t}(Sr);function Dr(e){dr.useDeprecatedSynchronousErrorHandling?xr(e):pr(e)}function Or(e){throw e}function kr(e,t){var n=dr.onStoppedNotification;n&&fr.setTimeout(function(){return n(e,t)})}var Ar={closed:!0,next:mr,error:Or,complete:mr},jr=(function(){return typeof Symbol==`function`&&Symbol.observable||`@@observable`})();function Mr(e){return e}function Nr(e){return e.length===0?Mr:e.length===1?e[0]:function(t){return e.reduce(function(e,t){return t(e)},t)}}var Pr=function(){function e(e){e&&(this._subscribe=e)}return e.prototype.lift=function(t){var n=new e;return n.source=this,n.operator=t,n},e.prototype.subscribe=function(e,t,n){var r=this,i=Lr(e)?e:new Er(e,t,n);return br(function(){var e=r,t=e.operator,n=e.source;i.add(t?t.call(i,n):n?r._subscribe(i):r._trySubscribe(i))}),i},e.prototype._trySubscribe=function(e){try{return this._subscribe(e)}catch(t){e.error(t)}},e.prototype.forEach=function(e,t){var n=this;return t=Fr(t),new t(function(t,r){var i=new Er({next:function(t){try{e(t)}catch(e){r(e),i.unsubscribe()}},error:r,complete:t});n.subscribe(i)})},e.prototype._subscribe=function(e){return this.source?.subscribe(e)},e.prototype[jr]=function(){return this},e.prototype.pipe=function(){return Nr([...arguments])(this)},e.prototype.toPromise=function(e){var t=this;return e=Fr(e),new e(function(e,n){var r;t.subscribe(function(e){return r=e},function(e){return n(e)},function(){return e(r)})})},e.create=function(t){return new e(t)},e}();function Fr(e){return e??dr.Promise??Promise}function Ir(e){return e&&rr(e.next)&&rr(e.error)&&rr(e.complete)}function Lr(e){return e&&e instanceof Sr||Ir(e)&&lr(e)}function Rr(e){return rr(e?.lift)}function zr(e){return function(t){if(Rr(t))return t.lift(function(t){try{return e(t,this)}catch(e){this.error(e)}});throw TypeError(`Unable to lift unknown Observable type`)}}function Br(e,t,n,r,i){return new Vr(e,t,n,r,i)}var Vr=function(e){Jn(t,e);function t(t,n,r,i,a,o){var s=e.call(this,t)||this;return s.onFinalize=a,s.shouldUnsubscribe=o,s._next=n?function(e){try{n(e)}catch(e){t.error(e)}}:e.prototype._next,s._error=i?function(e){try{i(e)}catch(e){t.error(e)}finally{this.unsubscribe()}}:e.prototype._error,s._complete=r?function(){try{r()}catch(e){t.error(e)}finally{this.unsubscribe()}}:e.prototype._complete,s}return t.prototype.unsubscribe=function(){var t;if(!this.shouldUnsubscribe||this.shouldUnsubscribe()){var n=this.closed;e.prototype.unsubscribe.call(this),!n&&((t=this.onFinalize)==null||t.call(this))}},t}(Sr),Hr=ir(function(e){return function(){e(this),this.name=`ObjectUnsubscribedError`,this.message=`object unsubscribed`}}),Ur=function(e){Jn(t,e);function t(){var t=e.call(this)||this;return t.closed=!1,t.currentObservers=null,t.observers=[],t.isStopped=!1,t.hasError=!1,t.thrownError=null,t}return t.prototype.lift=function(e){var t=new Wr(this,this);return t.operator=e,t},t.prototype._throwIfClosed=function(){if(this.closed)throw new Hr},t.prototype.next=function(e){var t=this;br(function(){var n,r;if(t._throwIfClosed(),!t.isStopped){t.currentObservers||=Array.from(t.observers);try{for(var i=Zn(t.currentObservers),a=i.next();!a.done;a=i.next())a.value.next(e)}catch(e){n={error:e}}finally{try{a&&!a.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}}})},t.prototype.error=function(e){var t=this;br(function(){if(t._throwIfClosed(),!t.isStopped){t.hasError=t.isStopped=!0,t.thrownError=e;for(var n=t.observers;n.length;)n.shift().error(e)}})},t.prototype.complete=function(){var e=this;br(function(){if(e._throwIfClosed(),!e.isStopped){e.isStopped=!0;for(var t=e.observers;t.length;)t.shift().complete()}})},t.prototype.unsubscribe=function(){this.isStopped=this.closed=!0,this.observers=this.currentObservers=null},Object.defineProperty(t.prototype,"observed",{get:function(){return this.observers?.length>0},enumerable:!1,configurable:!0}),t.prototype._trySubscribe=function(t){return this._throwIfClosed(),e.prototype._trySubscribe.call(this,t)},t.prototype._subscribe=function(e){return this._throwIfClosed(),this._checkFinalizedStatuses(e),this._innerSubscribe(e)},t.prototype._innerSubscribe=function(e){var t=this,n=this,r=n.hasError,i=n.isStopped,a=n.observers;return r||i?cr:(this.currentObservers=null,a.push(e),new sr(function(){t.currentObservers=null,or(a,e)}))},t.prototype._checkFinalizedStatuses=function(e){var t=this,n=t.hasError,r=t.thrownError,i=t.isStopped;n?e.error(r):i&&e.complete()},t.prototype.asObservable=function(){var e=new Pr;return e.source=this,e},t.create=function(e,t){return new Wr(e,t)},t}(Pr),Wr=function(e){Jn(t,e);function t(t,n){var r=e.call(this)||this;return r.destination=t,r.source=n,r}return t.prototype.next=function(e){var t,n;(n=(t=this.destination)?.next)==null||n.call(t,e)},t.prototype.error=function(e){var t,n;(n=(t=this.destination)?.error)==null||n.call(t,e)},t.prototype.complete=function(){var e,t;(t=(e=this.destination)?.complete)==null||t.call(e)},t.prototype._subscribe=function(e){return this.source?.subscribe(e)??cr},t}(Ur),Gr=function(e){Jn(t,e);function t(t){var n=e.call(this)||this;return n._value=t,n}return Object.defineProperty(t.prototype,"value",{get:function(){return this.getValue()},enumerable:!1,configurable:!0}),t.prototype._subscribe=function(t){var n=e.prototype._subscribe.call(this,t);return!n.closed&&t.next(this._value),n},t.prototype.getValue=function(){var e=this,t=e.hasError,n=e.thrownError,r=e._value;if(t)throw n;return this._throwIfClosed(),r},t.prototype.next=function(t){e.prototype.next.call(this,this._value=t)},t}(Ur);function Kr(e){return e[e.length-1]}function qr(e){return rr(Kr(e))?e.pop():void 0}var Jr=(function(e){return e&&typeof e.length==`number`&&typeof e!=`function`});function Yr(e){return rr(e?.then)}function Xr(e){return rr(e[jr])}function Zr(e){return Symbol.asyncIterator&&rr(e?.[Symbol.asyncIterator])}function Qr(e){return TypeError(`You provided `+(typeof e==`object`&&e?`an invalid object`:`'`+e+`'`)+` where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.`)}function $r(){return typeof Symbol!=`function`||!Symbol.iterator?`@@iterator`:Symbol.iterator}var ei=$r();function ti(e){return rr(e?.[ei])}function ni(e){return tr(this,arguments,function(){var t,n,r,i;return Xn(this,function(a){switch(a.label){case 0:t=e.getReader(),a.label=1;case 1:a.trys.push([1,,9,10]),a.label=2;case 2:return[4,er(t.read())];case 3:return n=a.sent(),r=n.value,i=n.done,i?[4,er(void 0)]:[3,5];case 4:return[2,a.sent()];case 5:return[4,er(r)];case 6:return[4,a.sent()];case 7:return a.sent(),[3,2];case 8:return[3,10];case 9:return t.releaseLock(),[7];case 10:return[2]}})})}function ri(e){return rr(e?.getReader)}function ii(e){if(e instanceof Pr)return e;if(e!=null){if(Xr(e))return _ee(e);if(Jr(e))return vee(e);if(Yr(e))return yee(e);if(Zr(e))return ai(e);if(ti(e))return bee(e);if(ri(e))return xee(e)}throw Qr(e)}function _ee(e){return new Pr(function(t){var n=e[jr]();if(rr(n.subscribe))return n.subscribe(t);throw TypeError(`Provided object does not correctly implement Symbol.observable`)})}function vee(e){return new Pr(function(t){for(var n=0;n=0?n.slice(0,r):n}function gi(e,t){return e?t?`${e} ${t}`:e:t||``}var Uee=mi({__forward_ref__:mi});function _i(e){return e.__forward_ref__=_i,e}function vi(e){return yi(e)?e():e}function yi(e){return typeof e==`function`&&Object.hasOwn(e,Uee)&&e.__forward_ref__===_i}function bi(e){return{token:e.token,providedIn:e.providedIn||null,factory:e.factory,value:void 0}}function xi(e){return Si(e,Ti)}function Si(e,t){return Object.hasOwn(e,t)&&e[t]||null}function Ci(e){return(e?.[Ti]??null)||null}function wi(e){return e&&Object.hasOwn(e,Ei)?e[Ei]:null}var Ti=mi({ɵprov:mi}),Ei=mi({ɵinj:mi}),Di=class{_desc;ngMetadataName=`InjectionToken`;ɵprov;constructor(e,t){this._desc=e,this.ɵprov=void 0,typeof t==`number`?this.__NG_ELEMENT_ID__=t:t!==void 0&&(this.ɵprov=bi({token:this,providedIn:t.providedIn||`root`,factory:t.factory}))}get multi(){return this}toString(){return`InjectionToken ${this._desc}`}};function Oi(e){return e&&!!e.ɵproviders}var ki=mi({ɵcmp:mi}),Ai=mi({ɵdir:mi}),ji=mi({ɵpipe:mi}),Mi=mi({ɵfac:mi}),Ni=mi({__NG_ELEMENT_ID__:mi}),Pi=mi({__NG_ENV_ID__:mi});function Fi(e){return Ri(e,`@Component`),e[ki]||null}function Ii(e){return Ri(e,`@Directive`),e[Ai]||null}function Li(e){return Ri(e,`@Pipe`),e[ji]||null}function Ri(e,t){if(e==null)throw new fi(-919,!1)}function zi(e){return typeof e==`string`?e:e==null?``:String(e)}var Bi=mi({ngErrorCode:mi}),Vi=mi({ngErrorMessage:mi}),Hi=mi({ngTokenPath:mi});function Ui(e,t){return Gi(``,-200,t)}function Wi(e,t){throw new fi(-201,!1)}function Gi(e,t,n){let r=new fi(t,e);return r[Bi]=t,r[Vi]=e,n&&(r[Hi]=n),r}function Ki(e){return e[Bi]}var qi;function Ji(){return qi}function Yi(e){let t=qi;return qi=e,t}function Xi(e,t,n){let r=xi(e);if(r&&r.providedIn==`root`)return r.value===void 0?r.value=r.factory():r.value;if(n&8)return null;if(t!==void 0)return t;Wi(e,``)}var Zi=globalThis,Qi={},$i=`__NG_DI_FLAG__`,ea=class{injector;constructor(e){this.injector=e}retrieve(e,t){let n=ra(t)||0;try{return this.injector.get(e,n&8?null:Qi,n)}catch(e){if(Vn(e))return e;throw e}}};function ta(e,t=0){let n=Rn();if(n===void 0)throw new fi(-203,!1);if(n===null)return Xi(e,void 0,t);{let r=ia(t),i=n.retrieve(e,r);if(Vn(i)){if(r.optional)return null;throw i}return i}}function na(e,t=0){return(Ji()||ta)(vi(e),t)}function x(e,t){return na(e,ra(t))}function ra(e){return e===void 0||typeof e==`number`?e:0|(e.optional&&8)|(e.host&&1)|(e.self&&2)|(e.skipSelf&&4)}function ia(e){return{optional:!!(e&8),host:!!(e&1),self:!!(e&2),skipSelf:!!(e&4)}}function aa(e){let t=[];for(let n=0;nArray.isArray(e)?ua(e,t):t(e))}function da(e,t,n){t>=e.length?e.push(n):e.splice(t,0,n)}function fa(e,t){return t>=e.length-1?e.pop():e.splice(t,1)[0]}function pa(e,t){let n=[];for(let r=0;rt;){let t=i-2;e[i]=e[t],i--}e[t]=n,e[t+1]=r}}function ha(e,t,n){let r=_a(e,t);return r>=0?e[r|1]=n:(r=~r,ma(e,r,t,n)),r}function ga(e,t){let n=_a(e,t);if(n>=0)return e[n|1]}function _a(e,t){return va(e,t,1)}function va(e,t,n){let r=0,i=e.length>>n;for(;i!==r;){let a=r+(i-r>>1),o=e[a<t?i=a:r=a+1}return~(i<{n.push(e)};return ua(t,e=>{let t=e;Oa(t,a,[],r)&&(i||=[],i.push(t))}),i!==void 0&&Da(i,a),n}function Da(e,t){for(let n=0;n{t(e,r)})}}function Oa(e,t,n,r){if(e=vi(e),!e)return!1;let i=null,a=wi(e),o=!a&&Fi(e);if(!a&&!o){let t=e.ngModule;if(a=wi(t),a)i=t;else return!1}else if(o&&!o.standalone)return!1;else i=e;let s=r.has(i);if(o){if(s)return!1;if(r.add(i),o.dependencies){let e=typeof o.dependencies==`function`?o.dependencies():o.dependencies;for(let i of e)Oa(i,t,n,r)}}else if(a){if(a.imports!=null&&!s){r.add(i);let e;try{ua(a.imports,i=>{Oa(i,t,n,r)&&(e||=[],e.push(i))})}finally{}e!==void 0&&Da(e,t)}if(!s){let e=sa(i)||(()=>new i);t({provide:i,useFactory:e,deps:ba},i),t({provide:Ca,useValue:i,multi:!0},i),t({provide:xa,useValue:()=>na(i),multi:!0},i)}let o=a.providers;if(o!=null&&!s){let n=e;ka(o,e=>{t(e,n)})}}else return!1;return i!==e&&e.providers!==void 0}function ka(e,t){for(let n of e)Oi(n)&&(n=n.ɵproviders),Array.isArray(n)?ka(n,t):t(n)}var Aa=mi({provide:String,useValue:mi});function ja(e){return typeof e==`object`&&!!e&&Aa in e}function Ma(e){return!!(e&&e.useExisting)}function Na(e){return!!(e&&e.useFactory)}function Pa(e){return typeof e==`function`}function Fa(e){return!!e.useClass}var Ia=new Di(``),La={},Ra={},za=void 0;function Ba(){return za===void 0&&(za=new wa),za}var Va=class{},Ha=class extends Va{parent;source;scopes;records=new Map;_ngOnDestroyHooks=new Set;_onDestroyHooks=[];get destroyed(){return this._destroyed}_destroyed=!1;injectorDefTypes;constructor(e,t,n,r){super(),this.parent=t,this.source=n,this.scopes=r,Qa(e,e=>this.processProvider(e)),this.records.set(Sa,Ja(void 0,this)),r.has(`environment`)&&this.records.set(Va,Ja(void 0,this));let i=this.records.get(Ia);i!=null&&typeof i.value==`string`&&this.scopes.add(i.value),this.injectorDefTypes=new Set(this.get(Ca,ba,{self:!0}))}retrieve(e,t){let n=ra(t)||0;try{return this.get(e,Qi,n)}catch(e){if(Vn(e))return e;throw e}}destroy(){qa(this),this._destroyed=!0;let e=rn(null);try{for(let e of this._ngOnDestroyHooks)e.ngOnDestroy();let e=this._onDestroyHooks;this._onDestroyHooks=[];for(let t of e)t()}finally{this.records.clear(),this._ngOnDestroyHooks.clear(),this.injectorDefTypes.clear(),rn(e)}}onDestroy(e){return qa(this),this._onDestroyHooks.push(e),()=>this.removeOnDestroy(e)}runInContext(e){qa(this);let t=zn(this),n=Yi(void 0);try{return e()}finally{zn(t),Yi(n)}}get(e,t=Qi,n){if(qa(this),Object.hasOwn(e,Pi))return e[Pi](this);let r=ra(n),i=zn(this),a=Yi(void 0);try{if(!(r&4)){let t=this.records.get(e);if(t===void 0){let n=Za(e)&&xi(e);t=n&&this.injectableDefInScope(n)?Ja(Ua(e),La):null,this.records.set(e,t)}if(t!=null)return this.hydrate(e,t,r)}let n=r&2?Ba():this.parent;return t=r&8&&t===Qi?null:t,n.get(e,t)}catch(e){let t=Ki(e);throw t===-200||t===-201?new fi(t,null):e}finally{Yi(a),zn(i)}}resolveInjectorInitializers(){let e=rn(null),t=zn(this),n=Yi(void 0);try{let e=this.get(xa,ba,{self:!0});for(let t of e)t()}finally{zn(t),Yi(n),rn(e)}}toString(){return`R3Injector[...]`}processProvider(e){e=vi(e);let t=Pa(e)?e:vi(e&&e.provide),n=Ga(e);if(!Pa(e)&&e.multi===!0){let n=this.records.get(t);n||(n=Ja(void 0,La,!0),n.factory=()=>aa(n.multi),this.records.set(t,n)),t=e,n.multi.push(e)}this.records.set(t,n)}hydrate(e,t,n){let r=rn(null);try{if(t.value===Ra)throw Ui(``);return t.value===La&&(t.value=Ra,t.value=t.factory(void 0,n)),typeof t.value==`object`&&t.value&&Xa(t.value)&&this._ngOnDestroyHooks.add(t.value),t.value}finally{rn(r)}}injectableDefInScope(e){if(!e.providedIn)return!1;let t=vi(e.providedIn);return typeof t==`string`?t===`any`||this.scopes.has(t):this.injectorDefTypes.has(t)}removeOnDestroy(e){let t=this._onDestroyHooks.indexOf(e);t!==-1&&this._onDestroyHooks.splice(t,1)}};function Ua(e){let t=xi(e),n=t===null?sa(e):t.factory;if(n!==null)return n;if(e instanceof Di)throw new fi(-204,!1);if(e instanceof Function)return Wa(e);throw new fi(-204,!1)}function Wa(e){if(e.length>0)throw new fi(-204,!1);let t=Ci(e);return t===null?()=>new e:()=>t.factory(e)}function Ga(e){return ja(e)?Ja(void 0,e.useValue):Ja(Ka(e),La)}function Ka(e,t,n){let r;if(Pa(e)){let t=vi(e);return sa(t)||Ua(t)}if(ja(e))r=()=>vi(e.useValue);else if(Na(e))r=()=>e.useFactory(...aa(e.deps||[]));else if(Ma(e))r=(t,n)=>na(vi(e.useExisting),n!==void 0&&n&8?8:void 0);else{let t=vi(e&&(e.useClass||e.provide));if(Ya(e))r=()=>new t(...aa(e.deps));else return sa(t)||Ua(t)}return r}function qa(e){if(e.destroyed)throw new fi(-205,!1)}function Ja(e,t,n=!1){return{factory:e,value:t,multi:n?[]:void 0}}function Ya(e){return!!e.deps}function Xa(e){return typeof e==`object`&&!!e&&typeof e.ngOnDestroy==`function`}function Za(e){return typeof e==`function`||typeof e==`object`&&e.ngMetadataName===`InjectionToken`}function Qa(e,t){for(let n of e)Array.isArray(n)?Qa(n,t):n&&Oi(n)?Qa(n.ɵproviders,t):t(n)}function $a(e,t){let n;e instanceof Ha?(qa(e),n=e):n=new ea(e);let r=zn(n),i=Yi(void 0);try{return t()}finally{zn(r),Yi(i)}}function eo(){return Ji()!==void 0||Rn()!=null}var to=1;function no(e){return Array.isArray(e)&&typeof e[to]==`object`}function ro(e){return Array.isArray(e)&&e[to]===!0}function io(e){return!!(e.flags&4)}function ao(e){return e.componentOffset>-1}function oo(e){return(e.flags&1)==1}function so(e){return!!e.template}function co(e){return!!(e[2]&512)}function lo(e){return(e[2]&256)==256}var uo=(function(e){return e[e.NONE=0]=`NONE`,e[e.HTML=1]=`HTML`,e[e.STYLE=2]=`STYLE`,e[e.SCRIPT=3]=`SCRIPT`,e[e.URL=4]=`URL`,e[e.RESOURCE_URL=5]=`RESOURCE_URL`,e[e.ATTRIBUTE_NO_BINDING=6]=`ATTRIBUTE_NO_BINDING`,e})(uo||{}),fo=`math`;function po(e){for(;Array.isArray(e);)e=e[0];return e}function mo(e,t){return po(t[e])}function ho(e,t){return po(t[e.index])}function go(e,t){return e.data[t]}function _o(e,t){return e[t]}function vo(e,t,n,r){n>=e.data.length&&(e.data[n]=null,e.blueprint[n]=null),t[n]=r}function yo(e,t){let n=t[e];return no(n)?n:n[0]}function bo(e){return(e[2]&128)==128}function xo(e){return ro(e[3])}function So(e,t){return t==null?null:e[t]}function Co(e){e[17]=0}function wo(e){e[2]&1024||(e[2]|=1024,bo(e)&&Oo(e))}function To(e,t){for(;e>0;)t=t[14],e--;return t}function Eo(e){return!!(e[2]&9216||e[24]?.dirty)}function Do(e){e[10].changeDetectionScheduler?.notify(8),e[2]&64&&(e[2]|=1024),Eo(e)&&Oo(e)}function Oo(e){e[10].changeDetectionScheduler?.notify(0);let t=Ao(e);for(;t!==null&&!(t[2]&8192||(t[2]|=8192,!bo(t)));)t=Ao(t)}function ko(e,t){if(lo(e))throw new fi(911,!1);e[21]===null&&(e[21]=[]),e[21].push(t)}function Wee(e,t){if(e[21]===null)return;let n=e[21].indexOf(t);n!==-1&&e[21].splice(n,1)}function Ao(e){let t=e[3];return ro(t)?t[3]:t}function jo(e){return e[7]??=[]}function Mo(e){return e.cleanup??=[]}function Gee(e,t,n,r){let i=jo(t);i.push(n),e.firstCreatePass&&Mo(e).push(r,i.length-1)}var No={lFrame:as(null),bindingsEnabled:!0,skipHydrationRootTNode:null},Po=!1;function Kee(){return No.lFrame.elementDepthCount}function qee(){No.lFrame.elementDepthCount++}function Fo(){No.lFrame.elementDepthCount--}function Io(){return No.bindingsEnabled}function Lo(){return No.skipHydrationRootTNode!==null}function Ro(e){return No.skipHydrationRootTNode===e}function zo(){No.skipHydrationRootTNode=null}function Bo(){return No.lFrame.lView}function Vo(){return No.lFrame.tView}function S(e){return No.lFrame.contextLView=e,e[8]}function C(e){return No.lFrame.contextLView=null,e}function Ho(){let e=Uo();for(;e!==null&&e.type===64;)e=e.parent;return e}function Uo(){return No.lFrame.currentTNode}function Jee(){let e=No.lFrame,t=e.currentTNode;return e.isParent?t:t.parent}function Wo(e,t){let n=No.lFrame;n.currentTNode=e,n.isParent=t}function Go(){return No.lFrame.isParent}function Ko(){No.lFrame.isParent=!1}function qo(){return No.lFrame.contextLView}function Jo(){return Po}function Yo(e){let t=Po;return Po=e,t}function Xo(){let e=No.lFrame,t=e.bindingRootIndex;return t===-1&&(t=e.bindingRootIndex=e.tView.bindingStartIndex),t}function Zo(){return No.lFrame.bindingIndex}function Yee(e){return No.lFrame.bindingIndex=e}function Qo(){return No.lFrame.bindingIndex++}function $o(e){let t=No.lFrame,n=t.bindingIndex;return t.bindingIndex+=e,n}function Xee(){return No.lFrame.inI18n}function Zee(e,t){let n=No.lFrame;n.bindingIndex=n.bindingRootIndex=e,es(t)}function Qee(){return No.lFrame.currentDirectiveIndex}function es(e){No.lFrame.currentDirectiveIndex=e}function $ee(e){let t=No.lFrame.currentDirectiveIndex;return t===-1?null:e[t]}function ete(){return No.lFrame.currentQueryIndex}function ts(e){No.lFrame.currentQueryIndex=e}function tte(e){let t=e[1];return t.type===2?t.declTNode:t.type===1?e[5]:null}function ns(e,t,n){if(n&4){let r=t,i=e;for(;r=r.parent,r===null&&!(n&1)&&(r=tte(i),!(r===null||(i=i[14],r.type&10))););if(r===null)return!1;t=r,e=i}let r=No.lFrame=is();return r.currentTNode=t,r.lView=e,!0}function rs(e){let t=is(),n=e[1];No.lFrame=t,t.currentTNode=n.firstChild,t.lView=e,t.tView=n,t.contextLView=e,t.bindingIndex=n.bindingStartIndex,t.inI18n=!1}function is(){let e=No.lFrame,t=e===null?null:e.child;return t===null?as(e):t}function as(e){let t={currentTNode:null,isParent:!0,lView:null,tView:null,selectedIndex:-1,contextLView:null,elementDepthCount:0,currentNamespace:null,currentDirectiveIndex:-1,bindingRootIndex:-1,bindingIndex:-1,currentQueryIndex:0,parent:e,child:null,inI18n:!1};return e!==null&&(e.child=t),t}function os(){let e=No.lFrame;return No.lFrame=e.parent,e.currentTNode=null,e.lView=null,e}var ss=os;function cs(){let e=os();e.isParent=!0,e.tView=null,e.selectedIndex=-1,e.contextLView=null,e.elementDepthCount=0,e.currentDirectiveIndex=-1,e.currentNamespace=null,e.bindingRootIndex=-1,e.bindingIndex=-1,e.currentQueryIndex=0}function nte(e){return(No.lFrame.contextLView=To(e,No.lFrame.contextLView))[8]}function ls(){return No.lFrame.selectedIndex}function us(e){No.lFrame.selectedIndex=e}function ds(){let e=No.lFrame;return go(e.tView,e.selectedIndex)}function w(){No.lFrame.currentNamespace=`svg`}function fs(){ps()}function ps(){No.lFrame.currentNamespace=null}function ms(){return No.lFrame.currentNamespace}var hs=!0;function gs(){return hs}function _s(e){hs=e}function vs(e,t=null,n=null,r){let i=ys(e,t,n,r);return i.resolveInjectorInitializers(),i}function ys(e,t=null,n=null,r,i=new Set){return new Ha([n||ba,Ta(e)],t||Ba(),null,i)}var bs=class e{static THROW_IF_NOT_FOUND=Qi;static NULL=new wa;static create(e,t){if(Array.isArray(e))return vs({name:``},t,e,``);{let t=e.name??``;return vs({name:t},e.parent,e.providers,t)}}static ɵprov=bi({token:e,providedIn:`any`,factory:()=>na(Sa)});static __NG_ELEMENT_ID__=-1},xs=new Di(``),Ss=class{static __NG_ELEMENT_ID__=ws;static __NG_ENV_ID__=e=>e},Cs=class extends Ss{_lView;constructor(e){super(),this._lView=e}get destroyed(){return lo(this._lView)}onDestroy(e){let t=this._lView;return ko(t,e),()=>Wee(t,e)}};function ws(){return new Cs(Bo())}var Ts=new Di(``),Es=(()=>{class e{taskId=0;pendingTasks=new Set;destroyed=!1;pendingTask=new Gr(!1);debugTaskTracker=x(Ts,{optional:!0});get hasPendingTasks(){return!this.destroyed&&this.pendingTask.value}get hasPendingTasksObservable(){return this.destroyed?new Pr(e=>{e.next(!1),e.complete()}):this.pendingTask}add(){!this.hasPendingTasks&&!this.destroyed&&this.pendingTask.next(!0);let e=this.taskId++;return this.pendingTasks.add(e),this.debugTaskTracker?.add(e),e}has(e){return this.pendingTasks.has(e)}remove(e){this.pendingTasks.delete(e),this.debugTaskTracker?.remove(e),this.pendingTasks.size===0&&this.hasPendingTasks&&this.pendingTask.next(!1)}ngOnDestroy(){this.pendingTasks.clear(),this.hasPendingTasks&&this.pendingTask.next(!1),this.destroyed=!0,this.pendingTask.unsubscribe()}static ɵprov=bi({token:e,providedIn:`root`,factory:()=>new e})}return e})(),Ds=class extends Ur{__isAsync;destroyRef=void 0;pendingTasks=void 0;constructor(e=!1){super(),this.__isAsync=e,eo()&&(this.destroyRef=x(Ss,{optional:!0})??void 0,this.pendingTasks=x(Es,{optional:!0})??void 0)}emit(e){let t=rn(null);try{super.next(e)}finally{rn(t)}}subscribe(e,t,n){let r=e,i=t||(()=>null),a=n;if(e&&typeof e==`object`){let t=e;r=t.next?.bind(t),i=t.error?.bind(t),a=t.complete?.bind(t)}this.__isAsync&&(i=this.wrapInTimeout(i),r&&=this.wrapInTimeout(r),a&&=this.wrapInTimeout(a));let o=super.subscribe({next:r,error:i,complete:a});return e instanceof sr&&e.add(o),o}wrapInTimeout(e){return t=>{let n=this.pendingTasks?.add();setTimeout(()=>{try{e(t)}finally{n!==void 0&&this.pendingTasks?.remove(n)}})}}};function Os(...e){}function ks(e){let t,n;function r(){e=Os;try{n!==void 0&&typeof cancelAnimationFrame==`function`&&cancelAnimationFrame(n),t!==void 0&&clearTimeout(t)}catch{}}return t=setTimeout(()=>{e(),r()}),typeof requestAnimationFrame==`function`&&(n=requestAnimationFrame(()=>{e(),r()})),()=>r()}function As(e){return queueMicrotask(()=>e()),()=>{e=Os}}var js=`isAngularZone`,Ms=`isAngularZone_ID`,Ns=0,Ps=class e{hasPendingMacrotasks=!1;hasPendingMicrotasks=!1;isStable=!0;onUnstable=new Ds(!1);onMicrotaskEmpty=new Ds(!1);onStable=new Ds(!1);onError=new Ds(!1);constructor(e){let{enableLongStackTrace:t=!1,shouldCoalesceEventChangeDetection:n=!1,shouldCoalesceRunChangeDetection:r=!1,scheduleInRootZone:i=!1}=e;if(typeof Zone>`u`)throw new fi(908,!1);Zone.assertZonePatched();let a=this;a._nesting=0,a._outer=a._inner=Zone.current,Zone.TaskTrackingZoneSpec&&(a._inner=a._inner.fork(new Zone.TaskTrackingZoneSpec)),t&&Zone.longStackTraceZoneSpec&&(a._inner=a._inner.fork(Zone.longStackTraceZoneSpec)),a.shouldCoalesceEventChangeDetection=!r&&n,a.shouldCoalesceRunChangeDetection=r,a.callbackScheduled=!1,a.scheduleInRootZone=i,Rs(a)}static isInAngularZone(){return typeof Zone<`u`&&Zone.current.get(js)===!0}static assertInAngularZone(){if(!e.isInAngularZone())throw new fi(909,!1)}static assertNotInAngularZone(){if(e.isInAngularZone())throw new fi(909,!1)}run(e,t,n){return this._inner.run(e,t,n)}runTask(e,t,n,r){let i=this._inner,a=i.scheduleEventTask(`NgZoneEvent: `+r,e,Fs,Os,Os);try{return i.runTask(a,t,n)}finally{i.cancelTask(a)}}runGuarded(e,t,n){return this._inner.runGuarded(e,t,n)}runOutsideAngular(e){return this._outer.run(e)}},Fs={};function Is(e){if(e._nesting==0&&!e.hasPendingMicrotasks&&!e.isStable)try{e._nesting++,e.onMicrotaskEmpty.emit(null)}finally{if(e._nesting--,!e.hasPendingMicrotasks)try{e.runOutsideAngular(()=>e.onStable.emit(null))}finally{e.isStable=!0}}}function Ls(e){if(e.isCheckStableRunning||e.callbackScheduled)return;e.callbackScheduled=!0;function t(){ks(()=>{e.callbackScheduled=!1,zs(e),e.isCheckStableRunning=!0,Is(e),e.isCheckStableRunning=!1})}e.scheduleInRootZone?Zone.root.run(()=>{t()}):e._outer.run(()=>{t()}),zs(e)}function Rs(e){let t=()=>{Ls(e)},n=Ns++;e._inner=e._inner.fork({name:`angular`,properties:{[js]:!0,[Ms]:n,[Ms+n]:!0},onInvokeTask:(n,r,i,a,o,s)=>{if(Us(s))return n.invokeTask(i,a,o,s);try{return Bs(e),n.invokeTask(i,a,o,s)}finally{(e.shouldCoalesceEventChangeDetection&&a.type===`eventTask`||e.shouldCoalesceRunChangeDetection)&&t(),Vs(e)}},onInvoke:(n,r,i,a,o,s,c)=>{try{return Bs(e),n.invoke(i,a,o,s,c)}finally{e.shouldCoalesceRunChangeDetection&&!e.callbackScheduled&&!Ws(s)&&t(),Vs(e)}},onHasTask:(t,n,r,i)=>{t.hasTask(r,i),n===r&&(i.change==`microTask`?(e._hasPendingMicrotasks=i.microTask,zs(e),Is(e)):i.change==`macroTask`&&(e.hasPendingMacrotasks=i.macroTask))},onHandleError:(t,n,r,i)=>(t.handleError(r,i),e.runOutsideAngular(()=>e.onError.emit(i)),!1)})}function zs(e){e.hasPendingMicrotasks=!!(e._hasPendingMicrotasks||(e.shouldCoalesceEventChangeDetection||e.shouldCoalesceRunChangeDetection)&&e.callbackScheduled===!0)}function Bs(e){e._nesting++,e.isStable&&(e.isStable=!1,e.onUnstable.emit(null))}function Vs(e){e._nesting--,Is(e)}var Hs=class{hasPendingMicrotasks=!1;hasPendingMacrotasks=!1;isStable=!0;onUnstable=new Ds;onMicrotaskEmpty=new Ds;onStable=new Ds;onError=new Ds;run(e,t,n){return e.apply(t,n)}runGuarded(e,t,n){return e.apply(t,n)}runOutsideAngular(e){return e()}runTask(e,t,n,r){return e.apply(t,n)}};function Us(e){return Gs(e,`__ignore_ng_zone__`)}function Ws(e){return Gs(e,`__scheduler_tick__`)}function Gs(e,t){return!Array.isArray(e)||e.length!==1?!1:e[0]?.data?.[t]===!0}var Ks=class{_console=console;handleError(e){this._console.error(`ERROR`,e)}},qs=new Di(``,{factory:()=>{let e=x(Ps),t=x(Va),n;return r=>{e.runOutsideAngular(()=>{t.destroyed&&!n?setTimeout(()=>{throw r}):(n??=t.get(Ks),n.handleError(r))})}}}),Js={provide:xa,useValue:()=>{x(Ks,{optional:!0})},multi:!0};function T(e,t){let[n,r,i]=hee(e,t?.equal),a=n;return a[nn],a.set=r,a.update=i,a.asReadonly=Ys.bind(a),a}function Ys(){let e=this[nn];if(e.readonlyFn===void 0){let t=()=>this();t[nn]=e,e.readonlyFn=t}return e.readonlyFn}var Xs=new Di(``,{factory:()=>Zs}),Zs=`ng`,Qs=new Di(``),$s=new Di(``,{providedIn:`platform`,factory:()=>`unknown`}),ec=new Di(``,{factory:()=>x(xs).body?.querySelector(`[ngCspNonce]`)?.getAttribute(`ngCspNonce`)||null}),tc=(()=>{class e{view;node;constructor(e,t){this.view=e,this.node=t}static __NG_ELEMENT_ID__=nc}return e})();function nc(){return new tc(Bo(),Ho())}var rc=class{},ic=new Di(``,{factory:()=>!0}),ac=new Di(``),oc=(()=>{class e{static ɵprov=bi({token:e,providedIn:`root`,factory:()=>new sc})}return e})(),sc=class{dirtyEffectCount=0;queues=new Map;add(e){this.enqueue(e),this.schedule(e)}schedule(e){e.dirty&&this.dirtyEffectCount++}remove(e){let t=e.zone,n=this.queues.get(t);n.has(e)&&(n.delete(e),e.dirty&&this.dirtyEffectCount--)}enqueue(e){let t=e.zone;this.queues.has(t)||this.queues.set(t,new Set);let n=this.queues.get(t);n.has(e)||n.add(e)}flush(){for(;this.dirtyEffectCount>0;){let e=!1;for(let[t,n]of this.queues)e||=t===null?this.flushQueue(n):t.run(()=>this.flushQueue(n));e||(this.dirtyEffectCount=0)}}flushQueue(e){let t=!1;for(let n of e)n.dirty&&(this.dirtyEffectCount--,t=!0,n.run());return t}},cc=class{[nn];constructor(e){this[nn]=e}destroy(){this[nn].destroy()}};function E(e,t){let n=t?.injector??x(bs),r=t?.manualCleanup===!0?null:n.get(Ss),i,a=n.get(tc,null,{optional:!0}),o=n.get(rc);return a===null?i=pc(e,n.get(oc),o):(i=fc(a.view,o,e),r instanceof Cs&&r._lView===a.view&&(r=null)),i.injector=n,r!==null&&(i.onDestroyFns=[r.onDestroy(()=>i.destroy())]),new cc(i)}var lc={...Fn,cleanupFns:void 0,zone:null,onDestroyFns:null,run(){let e=Yo(!1);try{In(this)}finally{Yo(e)}},cleanup(){if(!this.cleanupFns?.length)return;let e=rn(null);try{for(;this.cleanupFns.length;)this.cleanupFns.pop()()}finally{this.cleanupFns=[],rn(e)}}},uc={...lc,consumerMarkedDirty(){this.scheduler.schedule(this),this.notifier.notify(12)},destroy(){if(yn(this),this.onDestroyFns!==null)for(let e of this.onDestroyFns)e();this.cleanup(),this.scheduler.remove(this)}},dc={...lc,consumerMarkedDirty(){this.view[2]|=8192,Oo(this.view),this.notifier.notify(13)},destroy(){if(yn(this),this.onDestroyFns!==null)for(let e of this.onDestroyFns)e();this.cleanup(),this.view[23]?.delete(this)}};function fc(e,t,n){let r=Object.create(dc);return r.view=e,r.zone=typeof Zone<`u`?Zone.current:null,r.notifier=t,r.fn=mc(r,n),e[23]??=new Set,e[23].add(r),r.consumerMarkedDirty(r),r}function pc(e,t,n){let r=Object.create(uc);return r.fn=mc(r,e),r.scheduler=t,r.notifier=n,r.zone=typeof Zone<`u`?Zone.current:null,r.scheduler.add(r),r.notifier.notify(12),r}function mc(e,t){return()=>{t(t=>(e.cleanupFns??=[]).push(t))}}function hc(e){return typeof e==`function`&&e[nn]!==void 0}function gc(e){return hc(e)&&typeof e.set==`function`}var _c=Symbol(`InputSignalNode#UNSET`),vc={...Nn,transformFn:void 0,applyValueToInputSignal(e,t){jn(e,t)}};function yc(e){return{toString:e}.toString()}var bc=(function(e){return e[e.TemplateCreateStart=0]=`TemplateCreateStart`,e[e.TemplateCreateEnd=1]=`TemplateCreateEnd`,e[e.TemplateUpdateStart=2]=`TemplateUpdateStart`,e[e.TemplateUpdateEnd=3]=`TemplateUpdateEnd`,e[e.LifecycleHookStart=4]=`LifecycleHookStart`,e[e.LifecycleHookEnd=5]=`LifecycleHookEnd`,e[e.OutputStart=6]=`OutputStart`,e[e.OutputEnd=7]=`OutputEnd`,e[e.BootstrapApplicationStart=8]=`BootstrapApplicationStart`,e[e.BootstrapApplicationEnd=9]=`BootstrapApplicationEnd`,e[e.BootstrapComponentStart=10]=`BootstrapComponentStart`,e[e.BootstrapComponentEnd=11]=`BootstrapComponentEnd`,e[e.ChangeDetectionStart=12]=`ChangeDetectionStart`,e[e.ChangeDetectionEnd=13]=`ChangeDetectionEnd`,e[e.ChangeDetectionSyncStart=14]=`ChangeDetectionSyncStart`,e[e.ChangeDetectionSyncEnd=15]=`ChangeDetectionSyncEnd`,e[e.AfterRenderHooksStart=16]=`AfterRenderHooksStart`,e[e.AfterRenderHooksEnd=17]=`AfterRenderHooksEnd`,e[e.ComponentStart=18]=`ComponentStart`,e[e.ComponentEnd=19]=`ComponentEnd`,e[e.DeferBlockStateStart=20]=`DeferBlockStateStart`,e[e.DeferBlockStateEnd=21]=`DeferBlockStateEnd`,e[e.DynamicComponentStart=22]=`DynamicComponentStart`,e[e.DynamicComponentEnd=23]=`DynamicComponentEnd`,e[e.HostBindingsUpdateStart=24]=`HostBindingsUpdateStart`,e[e.HostBindingsUpdateEnd=25]=`HostBindingsUpdateEnd`,e})(bc||{}),xc=class{previousValue;currentValue;firstChange;constructor(e,t,n){this.previousValue=e,this.currentValue=t,this.firstChange=n}isFirstChange(){return this.firstChange}};function Sc(e,t,n,r){t===null?e[n]=r:t.applyValueToInputSignal(t,r)}var Cc=null,wc=(()=>{Cc=Ec;let e=()=>Ec;return e.ngInherit=!0,e})();function Tc(){return Cc}function Ec(e){return e.type.prototype.ngOnChanges&&(e.setInput=Oc),Dc}function Dc(){let e=Ac(this),t=e?.current;if(t){let n=e.previous;if(n===ya)e.previous=t;else for(let e in t)n[e]=t[e];e.current=null,this.ngOnChanges(t)}}function Oc(e,t,n,r,i){let a=this.declaredInputs[r],o=Ac(e)||jc(e,{previous:ya,current:null}),s=o.current||={},c=o.previous,l=c[a];s[a]=new xc(l&&l.currentValue,n,c===ya),Sc(e,t,i,n)}var kc=`__ngSimpleChanges__`;function Ac(e){return Object.hasOwn(e,kc)&&e[kc]||null}function jc(e,t){return e[kc]=t}var Mc=[],Nc=function(e,t=null,n){for(let r=0;r=r)break}else t[c]<0&&(e[17]+=65536),(s>14>16&&(e[2]&3)===t&&(e[2]+=16384,Bc(o,a)):Bc(o,a)}var Hc=-1,Uc=class{factory;name;injectImpl;resolving=!1;canSeeViewProviders;multi;componentProviders;index;providerFactory;constructor(e,t,n,r){this.factory=e,this.name=r,this.canSeeViewProviders=t,this.injectImpl=n}};function Wc(e){return!!(e.flags&8)}function Gc(e){return!!(e.flags&16)}function Kc(e,t,n){let r=0;for(;rt){o=a-1;break}}}for(;a>16}function el(e,t){let n=$c(e),r=t;for(;n>0;)r=r[14],n--;return r}var tl=!0;function nl(e){let t=tl;return tl=e,t}var rl=255,il=5,al=0,ol={};function sl(e,t,n){let r;typeof n==`string`?r=n.charCodeAt(0)||0:Object.hasOwn(n,Ni)&&(r=n[Ni]),r??=n[Ni]=al++;let i=r&rl,a=1<>il)]|=a}function cl(e,t){let n=ul(e,t);if(n!==-1)return n;let r=t[1];r.firstCreatePass&&(e.injectorIndex=t.length,ll(r.data,e),ll(t,null),ll(r.blueprint,null));let i=dl(e,t),a=e.injectorIndex;if(Zc(i)){let e=Qc(i),n=el(i,t),r=n[1].data;for(let i=0;i<8;i++)t[a+i]=n[e+i]|r[e+i]}return t[a+8]=i,a}function ll(e,t){e.push(0,0,0,0,0,0,0,0,t)}function ul(e,t){return e.injectorIndex===-1||e.parent&&e.parent.injectorIndex===e.injectorIndex||t[e.injectorIndex+8]===null?-1:e.injectorIndex}function dl(e,t){if(e.parent&&e.parent.injectorIndex!==-1)return e.parent.injectorIndex;let n=0,r=null,i=t;for(;i!==null;){if(r=Ol(i),r===null)return Hc;if(n++,i=i[14],r.injectorIndex!==-1)return r.injectorIndex|n<<16}return Hc}function fl(e,t,n){sl(e,t,n)}function pl(e,t,n){if(n&8||e!==void 0)return e;Wi(t,`NodeInjector`)}function ml(e,t,n,r){if(n&8&&r===void 0&&(r=null),!(n&3)){let i=e[9],a=Yi(void 0);try{return i?i.get(t,r,n&8):Xi(t,r,n&8)}finally{Yi(a)}}return pl(r,t,n)}function hl(e,t,n,r=0,i){if(e!==null){if(t[2]&2048&&!(r&2)){let i=Dl(e,t,n,r,ol);if(i!==ol)return i}let i=gl(e,t,n,r,ol);if(i!==ol)return i}return ml(t,n,r,i)}function gl(e,t,n,r,i){let a=bl(n);if(typeof a==`function`){if(!ns(t,e,r))return r&1?pl(i,n,r):ml(t,n,r,i);try{let e;if(e=a(r),e==null&&!(r&8))Wi(n);else return e}finally{ss()}}else if(typeof a==`number`){let i=null,o=ul(e,t),s=Hc,c=r&1?t[15][5]:null;for((o===-1||r&4)&&(s=o===-1?dl(e,t):t[o+8],s===Hc||!Sl(r,!1)?o=-1:(i=t[1],o=Qc(s),t=el(s,t)));o!==-1;){let e=t[1];if(xl(a,o,e.data)){let e=_l(o,t,n,i,r,c);if(e!==ol)return e}s=t[o+8],s!==Hc&&Sl(r,t[1].data[o+8]===c)&&xl(a,o,t)?(i=e,o=Qc(s),t=el(s,t)):o=-1}}return i}function _l(e,t,n,r,i,a){let o=t[1],s=o.data[e+8],c=vl(s,o,n,r==null?ao(s)&&tl:r!=o&&!!(s.type&3),i&1&&a===s);return c===null?ol:yl(t,o,c,s,i)}function vl(e,t,n,r,i){let a=e.providerIndexes,o=t.data,s=a&1048575,c=e.directiveStart,l=e.directiveEnd,u=a>>20,d=r?s:s+u,f=i?s+u:l;for(let e=d;e=c&&t.type===n)return e}if(i){let e=o[c];if(e&&so(e)&&e.type===n)return c}return null}function yl(e,t,n,r,i){let a=e[n],o=t.data;if(a instanceof Uc){let s=a;if(s.resolving)throw Ui(``);let c=nl(s.canSeeViewProviders);s.resolving=!0,o[n].type||o[n];let l=s.injectImpl?Yi(s.injectImpl):null;ns(e,r,0);try{a=e[n]=s.factory(void 0,i,o,e,r),t.firstCreatePass&&n>=r.directiveStart&&Pc(n,o[n],t)}finally{l!==null&&Yi(l),nl(c),s.resolving=!1,ss()}}return a}function bl(e){if(typeof e==`string`)return e.charCodeAt(0)||0;let t=Object.hasOwn(e,Ni)?e[Ni]:void 0;return typeof t==`number`?t>=0?t&rl:wl:t}function xl(e,t,n){let r=1<>il)]&r)}function Sl(e,t){return!(e&2)&&!(e&1&&t)}var Cl=class{_tNode;_lView;constructor(e,t){this._tNode=e,this._lView=t}get(e,t,n){return hl(this._tNode,this._lView,e,ra(n),t)}};function wl(){return new Cl(Ho(),Bo())}function Tl(e){return yc(()=>{let t=e.prototype.constructor,n=t[Mi]||El(t),r=Object.prototype,i=Object.getPrototypeOf(e.prototype).constructor;for(;i&&i!==r;){let e=i[Mi]||El(i);if(e&&e!==n)return e;i=Object.getPrototypeOf(i)}return e=>new e})}function El(e){return yi(e)?()=>{let t=El(vi(e));return t&&t()}:sa(e)}function Dl(e,t,n,r,i){let a=e,o=t;for(;a!==null&&o!==null&&o[2]&2048&&!co(o);){let e=gl(a,o,n,r|2,ol);if(e!==ol)return e;r&=-5;let t=a.parent;if(!t){let e=o[20];if(e){let t=e.get(n,ol,r);if(t!==ol)return t}t=Ol(o),o=o[14]}a=t}return i}function Ol(e){let t=e[1],n=t.type;return n===2?t.declTNode:n===1?e[5]:null}function kl(e){return{token:e.token,providedIn:e.autoProvided===!1?null:`root`,factory:e.factory,value:void 0}}function Al(){return jl(Ho(),Bo())}function jl(e,t){return new Ml(ho(e,t))}var Ml=(()=>{class e{nativeElement;constructor(e){this.nativeElement=e}static __NG_ELEMENT_ID__=Al}return e})();function Nl(e){return e instanceof Ml?e.nativeElement:e}function Pl(){return this._results[Symbol.iterator]()}var Fl=class{_emitDistinctChangesOnly;dirty=!0;_onDirty=void 0;_results=[];_changesDetected=!1;_changes=void 0;length=0;first=void 0;last=void 0;get changes(){return this._changes??=new Ur}constructor(e=!1){this._emitDistinctChangesOnly=e}get(e){return this._results[e]}map(e){return this._results.map(e)}filter(e){return this._results.filter(e)}find(e){return this._results.find(e)}reduce(e,t){return this._results.reduce(e,t)}forEach(e){this._results.forEach(e)}some(e){return this._results.some(e)}toArray(){return this._results.slice()}toString(){return this._results.toString()}reset(e,t){this.dirty=!1;let n=la(e);(this._changesDetected=!ca(this._results,n,t))&&(this._results=n,this.length=n.length,this.last=n[this.length-1],this.first=n[0])}notifyOnChanges(){this._changes!==void 0&&(this._changesDetected||!this._emitDistinctChangesOnly)&&this._changes.next(this)}onDirty(e){this._onDirty=e}setDirty(){this.dirty=!0,this._onDirty?.()}destroy(){this._changes!==void 0&&(this._changes.complete(),this._changes.unsubscribe())}[Symbol.iterator]=Pl};function Il(e){return(e.flags&128)==128}var Ll=(function(e){return e[e.OnPush=0]=`OnPush`,e[e.Eager=1]=`Eager`,e[e.Default=1]=`Default`,e})(Ll||{}),Rl=new Map,zl=0;function Bl(){return zl++}function Vl(e){Rl.set(e[19],e)}function Hl(e){Rl.delete(e[19])}var Ul=`__ngContext__`;function Wl(e,t){no(t)?(e[Ul]=t[19],Vl(t)):e[Ul]=t}function Gl(e){return ql(e[12])}function Kl(e){return ql(e[4])}function ql(e){for(;e!==null&&!ro(e);)e=e[4];return e}var Jl=void 0;function Yl(e){Jl=e}function Xl(){if(Jl!==void 0)return Jl;if(typeof document<`u`)return document;throw new fi(210,!1)}var Zl=!1,Ql=new Di(``,{factory:()=>Zl}),$l=new WeakMap;function eu(e,t){if(typeof e!=`object`||!e)return;let n=$l.get(e);n||(n=new WeakSet,$l.set(e,n)),n.add(t)}function tu(e){return(e.flags&32)==32}var nu=()=>null;function ru(e,t,n=!1){return nu(e,t,n)}function iu(e,t){let n=e.contentQueries;if(n!==null){let r=rn(null);try{for(let r=0;r|^->||--!>|)/g,gu=`​$1​`;function _u(e){return e.replace(mu,e=>e.replace(hu,gu))}function vu(e,t){return e.createText(t)}function yu(e,t,n){e.setValue(t,n)}function bu(e,t){return e.createComment(_u(t))}function xu(e,t,n){return e.createElement(t,n)}function Su(e,t,n,r,i){e.insertBefore(t,n,r,i)}function Cu(e,t,n){e.appendChild(t,n)}function wu(e,t,n,r,i){r===null?Cu(e,t,n):Su(e,t,n,r,i)}function Tu(e,t,n,r){e.removeChild(null,t,n,r)}function rte(e,t,n){e.setAttribute(t,`style`,n)}function ite(e,t,n){n===``?e.removeAttribute(t,`class`):e.setAttribute(t,`class`,n)}function Eu(e,t,n){let{mergedAttrs:r,classes:i,styles:a}=n;r!==null&&Kc(e,t,r),i!==null&&ite(e,t,i),a!==null&&rte(e,t,a)}function Du(e){let t=ate();return t?t.sanitize(uo.URL,e)||``:uu(e,`URL`)?lu(e):pu(zi(e))}function ate(){let e=Bo();return e&&e[10].sanitizer}function Ou(e){return e.ownerDocument.defaultView}function ku(e){return e.ownerDocument}function ote(e,t,n){let r=e.length;for(;;){let i=e.indexOf(t,n);if(i===-1)return i;if(i===0||e.charCodeAt(i-1)<=32){let n=t.length;if(i+n===r||e.charCodeAt(i+n)<=32)return i}n=i+1}}var Au=`ng-template`;function ste(e,t,n,r){let i=0;if(r){for(;i-1){let e;for(;++ia?``:i[u+1].toLowerCase(),r&2&&l!==e){if(Mu(r))return!1;o=!0}}}}}return Mu(r)||o}function Mu(e){return!(e&1)}function ute(e,t,n,r){if(t===null)return-1;let i=0;if(r||!n){let n=!1;for(;i-1)for(n++;n0?`="`+t+`"`:``)+`]`}else r&8?i+=`.`+o:r&4&&(i+=` `+o)}else i!==``&&!Mu(o)&&(t+=Pu(a,i),i=``),r=o,a||=!Mu(r);n++}return i!==``&&(t+=Pu(a,i)),t}function gte(e){return e.map(hte).join(`,`)}function _te(e){let t=[],n=[],r=1,i=2;for(;r!1});function Ru(e){if(!e)return 0;let t=e.toLowerCase().indexOf(`ms`)>-1?1:1e3;return parseFloat(e)*t}function zu(e,t){return e.getPropertyValue(t).split(`,`).map(e=>e.trim())}function bte(e){let t=zu(e,`transition-property`),n=zu(e,`transition-duration`),r=zu(e,`transition-delay`),i={propertyName:``,duration:0,animationName:void 0};for(let e=0;ei.duration&&(i.propertyName=t[e],i.duration=a)}return i}function xte(e){let t=zu(e,`animation-name`),n=zu(e,`animation-delay`),r=zu(e,`animation-duration`),i=zu(e,`animation-iteration-count`),a={animationName:``,propertyName:void 0,duration:0};for(let e=0;ea.duration&&s!==`infinite`&&(a.animationName=t[e],a.duration=o)}return a}function Bu(e,t){return e!==void 0&&e.duration>t.duration}function Vu(e){return(e.animationName!=null||e.propertyName!=null)&&e.duration>0}function Hu(e){let t=e.effect?.getTiming();if(t===void 0)return;let n=typeof t.duration==`number`?t.duration:0,r=(t.delay??0)+n,i=e.playbackRate;return i!==void 0&&i!==0&&i!==1&&(r/=Math.abs(i)),r}function Ste(e,t){let n=getComputedStyle(e),r=xte(n),i=bte(n),a=r.duration>i.duration?r:i;Bu(t.get(e),a)||Vu(a)&&t.set(e,a)}function Cte(e,t,n){if(!n)return;let r=e.getAnimations();return r.length===0?Ste(e,t):wte(e,t,r)}function wte(e,t,n){let r={animationName:void 0,propertyName:void 0,duration:0};for(let e of n){if(e.effect?.getTiming()?.iterations===1/0)continue;let t=Hu(e)??0,n,i;e.animationName?i=e.animationName:n=e.transitionProperty,t>=r.duration&&(r={animationName:i,propertyName:n,duration:t})}Bu(t.get(e),r)||Vu(r)&&t.set(e,r)}var Uu=new Set,Tte=!1,Ete=1,Wu=typeof document<`u`&&typeof document?.documentElement?.getAnimations==`function`;function Dte(e){return e[9].get(yte,Tte)}function Ote(e,t,n){let r=Ku.get(e);if(r){for(let e of t)r.classList.push(e);for(let e of n)r.cleanupFns.push(e)}else Ku.set(e,{classList:t,cleanupFns:n})}function Gu(e){let t=Ku.get(e);if(t){for(let e of t.cleanupFns)e();Ku.delete(e)}qu.delete(e)}var Ku=new WeakMap,qu=new WeakMap,Ju=new WeakMap;function Yu(e){return e?e[14]??e:null}var Xu=new WeakSet;function kte(e,t,n){let r=Ju.get(e);if(!r||r.length===0)return;let i=t.parentNode,a=t.previousSibling,o=Yu(n);for(let e=r.length-1;e>=0;e--){let{el:n,declarationView:s}=r[e],c=n.parentNode;n===t?(r.splice(e,1),Xu.add(n),n.dispatchEvent(new CustomEvent(`animationend`,{detail:{cancel:!0}}))):(a&&n===a||c&&i&&c!==i&&(o===null||s===null||o===s))&&(r.splice(e,1),n.dispatchEvent(new CustomEvent(`animationend`,{detail:{cancel:!0}})),n.parentNode?.removeChild(n))}}function Ate(e,t,n){let r=Yu(n),i=Ju.get(e);i?i.some(e=>e.el===t)||i.push({el:t,declarationView:r}):Ju.set(e,[{el:t,declarationView:r}])}function Zu(e){let t=e[26]??={};return t.enter??=new Map}function jte(e){let t=typeof e==`function`?e():e,n=Array.isArray(t)?t:null;return typeof t==`string`&&(n=t.trim().split(/\s+/).filter(e=>e)),n}function Qu(e){return e.composedPath?e.composedPath()[0]:e.target}function $u(e,t){let n=qu.get(t);if(n===void 0)return!0;if(t!==Qu(e))return!1;let r=e.animation;if(r){let e=Hu(r);if(e!==void 0&&e+Ete{class e{impl=null;execute(){this.impl?.execute()}static ɵprov=bi({token:e,providedIn:`root`,factory:()=>new e})}return e})(),ad=[0,1,2,3],od=(()=>{class e{ngZone=x(Ps);scheduler=x(rc);errorHandler=x(Ks,{optional:!0});sequences=new Set;deferredRegistrations=new Set;executing=!1;constructor(){x(td,{optional:!0})}execute(){let e=this.sequences.size>0;e&&Nc(bc.AfterRenderHooksStart),this.executing=!0;for(let e of ad)for(let t of this.sequences)if(!t.erroredOrDestroyed&&t.hooks[e])try{t.pipelinedValue=this.ngZone.runOutsideAngular(()=>this.maybeTrace(()=>{let n=t.hooks[e];return n(t.pipelinedValue)},t.snapshot))}catch(e){t.erroredOrDestroyed=!0,this.errorHandler?.handleError(e)}this.executing=!1;for(let e of this.sequences)e.afterRun(),e.once&&(this.sequences.delete(e),e.destroy());for(let e of this.deferredRegistrations)this.sequences.add(e);this.deferredRegistrations.size>0&&this.scheduler.notify(7),this.deferredRegistrations.clear(),e&&Nc(bc.AfterRenderHooksEnd)}register(e){let{view:t}=e;t===void 0?this.executing?this.deferredRegistrations.add(e):this.addSequence(e):((t[25]??=[]).push(e),Oo(t),t[2]|=8192)}addSequence(e){this.sequences.add(e),this.scheduler.notify(7)}unregister(e){this.executing&&this.sequences.has(e)?(e.erroredOrDestroyed=!0,e.pipelinedValue=void 0,e.once=!0):(this.sequences.delete(e),this.deferredRegistrations.delete(e))}maybeTrace(e,t){return t?t.run(ed.AFTER_NEXT_RENDER,e):e()}static ɵprov=bi({token:e,providedIn:`root`,factory:()=>new e})}return e})(),sd=class{impl;hooks;view;once;snapshot;erroredOrDestroyed=!1;pipelinedValue=void 0;unregisterOnDestroy;constructor(e,t,n,r,i,a=null){this.impl=e,this.hooks=t,this.view=n,this.once=r,this.snapshot=a,this.unregisterOnDestroy=i?.onDestroy(()=>this.destroy())}afterRun(){this.erroredOrDestroyed=!1,this.pipelinedValue=void 0,this.snapshot?.dispose(),this.snapshot=null}destroy(){this.impl.unregister(this),this.unregisterOnDestroy?.();let e=this.view?.[25];e&&(this.view[25]=e.filter(e=>e!==this))}};function cd(e,t){let n=t?.injector??x(bs);return rd(`NgAfterNextRender`),Pte(e,n,t,!0)}function Nte(e){return e instanceof Function?[void 0,void 0,e,void 0]:[e.earlyRead,e.write,e.mixedReadWrite,e.read]}function Pte(e,t,n,r){let i=t.get(id);i.impl??=t.get(od);let a=t.get(td,null,{optional:!0}),o=n?.manualCleanup===!0?null:t.get(Ss),s=t.get(tc,null,{optional:!0}),c=new sd(i.impl,Nte(e),s?.view,r,o,a?.snapshot(null));return i.impl.register(c),c}var ld=new Di(``,{factory:()=>{let e=x(Va),t=new Set;return e.onDestroy(()=>t.clear()),{queue:t,isScheduled:!1,scheduler:null,injector:e}}});function ud(e,t,n){let r=e.get(ld);if(Array.isArray(t))for(let e of t)r.queue.add(e),n?.detachedLeaveAnimationFns?.push(e);else r.queue.add(t),n?.detachedLeaveAnimationFns?.push(t);r.scheduler&&r.scheduler(e)}function Fte(e,t){let n=e.get(ld);if(Array.isArray(t))for(let e of t)n.queue.delete(e);else n.queue.delete(t)}function Ite(e,t){let n=e.get(ld);if(t.detachedLeaveAnimationFns){for(let e of t.detachedLeaveAnimationFns)n.queue.delete(e);t.detachedLeaveAnimationFns=void 0}}function Lte(e){let t=e.get(ld);t.isScheduled||=(cd(()=>{t.isScheduled=!1;for(let e of t.queue)e();t.queue.clear()},{injector:t.injector}),!0)}function Rte(e){let t=e.get(ld);t.scheduler=Lte,t.scheduler(e)}function dd(e,t){for(let[n,r]of t)ud(e,r.animateFns)}function fd(e,t,n,r){let i=e?.[26]?.enter;t!==null&&i&&i.has(n.index)&&dd(r,i)}function pd(e,t,n,r){try{n.get(Sa)}catch{return r(!1)}let i=e?.[26];i?.enter?.has(t.index)&&Fte(n,i.enter.get(t.index).animateFns);let a=zte(e,t,i);if(a.size===0){let n=!1;if(e){let r=[];md(e,t,r),n=r.length>0}if(!n)return r(!1)}e&&Uu.add(e[19]),ud(n,()=>Bte(e,t,i||void 0,a,r),i||void 0)}function zte(e,t,n){let r=new Map,i=n?.leave;if(i&&i.has(t.index)&&r.set(t.index,i.get(t.index)),e&&i)for(let[n,a]of i){if(r.has(n))continue;let i=e[1].data[n].parent;for(;i;){if(i===t){r.set(n,a);break}i=i.parent}}return r}function Bte(e,t,n,r,i){let a=[];if(n&&n.leave)for(let[e]of r){if(!n.leave.has(e))continue;let t=n.leave.get(e);for(let e of t.animateFns){let{promise:t}=e();a.push(t)}n.detachedLeaveAnimationFns=void 0}if(e&&md(e,t,a),a.length>0){let t=n||e?.[26];if(t){let n=t.running;n&&a.push(n),t.running=Promise.allSettled(a),Hte(e,t.running,i)}else Promise.allSettled(a).then(()=>{e&&Uu.delete(e[19]),i(!0)})}else e&&Uu.delete(e[19]),i(!1)}function md(e,t,n){if(t.type&12){let r=e[t.index];if(ro(r))for(let e=10;e{e[26]?.running===t&&(e[26].running=void 0,Uu.delete(e[19])),n(!0)})}function hd(e,t,n,r,i,a,o,s){if(i!=null){let c,l=!1;ro(i)?c=i:no(i)&&(l=!0,i=i[0]);let u=po(i);e===0&&r!==null?(fd(s,r,a,n),o==null?Cu(t,r,u):Su(t,r,u,o||null,!0)):e===1&&r!==null?(fd(s,r,a,n),Su(t,r,u,o||null,!0),kte(a,u,s)):e===2?(s?.[26]?.leave?.has(a.index)&&Ate(a,u,s),Xu.delete(u),pd(s,a,n,e=>{if(Xu.has(u)){Xu.delete(u);return}Tu(t,u,l,e)})):e===3&&(Xu.delete(u),pd(s,a,n,()=>{t.destroyNode(u)})),c!=null&&$te(t,e,n,c,a,r,o)}}function Ute(e,t){gd(e,t),t[0]=null,t[5]=null}function Wte(e,t,n,r,i,a){r[0]=i,r[5]=t,Dd(e,r,n,1,i,a)}function gd(e,t){t[10].changeDetectionScheduler?.notify(9),Dd(e,t,t[11],2,null,null)}function Gte(e){let t=e[12];if(!t)return yd(e[1],e);for(;t;){let n=null;if(no(t))n=t[12];else{let e=t[10];e&&(n=e)}if(!n){for(;t&&!t[4]&&t!==e;)no(t)&&yd(t[1],t),t=t[3];t===null&&(t=e),no(t)&&yd(t[1],t),n=t&&t[4]}t=n}}function _d(e,t){let n=e[9],r=n.indexOf(t);n.splice(r,1)}function vd(e,t){if(lo(t))return;let n=t[11];n.destroyNode&&Dd(e,t,n,3,null,null),Gte(t)}function yd(e,t){if(lo(t))return;let n=rn(null);try{t[2]&=-129,t[2]|=256,t[24]&&yn(t[24]),qte(e,t),Kte(e,t),t[1].type===1&&t[11].destroy();let n=t[16];if(n!==null&&ro(t[3])){n!==t[3]&&_d(n,t);let r=t[18];r!==null&&r.detachView(e)}Hl(t)}finally{rn(n)}}function Kte(e,t){let n=e.cleanup,r=t[7];if(n!==null)for(let e=0;e=0?r[t]():r[-t].unsubscribe(),e+=2}else{let t=r[n[e+1]];n[e].call(t)}r!==null&&(t[7]=null);let i=t[21];if(i!==null){t[21]=null;for(let e=0;e27&&Rd(e,t,27,!1),Nc(o?bc.TemplateUpdateStart:bc.TemplateCreateStart,i,n),n(r,i)}finally{us(a),Nc(o?bc.TemplateUpdateEnd:bc.TemplateCreateEnd,i,n)}}function Hd(e,t,n){Yd(e,t,n),(n.flags&64)==64&&Xd(e,t,n)}function Ud(e,t,n=ho){let r=t.localNames;if(r!==null){let i=t.index+1;for(let a=0;a=s&&i<=c){let o=t.data[i],s=r[e+1];Bd(o,n[i],s,a),l=!0}else if(i>c)break}}return o!==null&&Object.hasOwn(r.inputs,i)&&(Bd(r,n[o],i,a),l=!0),l}function cf(e,t){let n=yo(t,e),r=n[1];lf(r,n);let i=n[0];i!==null&&n[6]===null&&(n[6]=ru(i,n[9])),Nc(bc.ComponentStart);try{uf(r,n,n[8])}finally{Nc(bc.ComponentEnd,n[8])}}function lf(e,t){for(let n=t.length;n{Oo(e.lView)},consumerOnSignalRead(){this.lView[24]=this}};function Sf(e){let t=e[24]??Object.create(Cf);return t.lView=e,t}var Cf={...on,consumerIsAlwaysLive:!0,kind:`template`,consumerMarkedDirty:e=>{let t=Ao(e.lView);for(;t&&!wf(t[1]);)t=Ao(t);t&&wo(t)},consumerOnSignalRead(){this.lView[24]=this}};function wf(e){return e.type!==2}function Tf(e){if(e[23]===null)return;let t=!0;for(;t;){let n=!1;for(let t of e[23])if(t.dirty&&(n=!0,t.zone===null||Zone.current===t.zone?t.run():t.zone.run(()=>t.run()),e[23]===null))return;t=n&&!!(e[2]&8192)}}var Ef=100;function Df(e,t=0){let n=e[10].rendererFactory;n.begin?.();try{Of(e,t)}finally{n.end?.()}}function Of(e,t){let n=Jo();try{Yo(!0),Pf(e,t);let n=0;for(;Eo(e);){if(n===Ef)throw new fi(103,!1);n++,Pf(e,1)}}finally{Yo(n)}}function kf(e,t,n,r){if(lo(t))return;let i=t[2];rs(t);let a=!0,o=null,s=null;wf(e)?(s=vf(t),o=mn(s)):an()===null?(a=!1,s=Sf(t),o=mn(s)):t[24]&&=(yn(t[24]),null);try{Co(t),Yee(e.bindingStartIndex),n!==null&&Vd(e,t,n,2,r);let a=(i&3)==3;if(a){let n=e.preOrderCheckHooks;n!==null&&Ic(t,n,null)}else{let n=e.preOrderHooks;n!==null&&Lc(t,n,0,null),Rc(t,0)}if(jf(t),Tf(t),Af(t,0),e.contentQueries!==null&&iu(e,t),a){let n=e.contentCheckHooks;n!==null&&Ic(t,n)}else{let n=e.contentHooks;n!==null&&Lc(t,n,1),Rc(t,1)}If(e,t);let o=e.components;o!==null&&Ff(t,o,0);let s=e.viewQuery;if(s!==null&&au(2,s,r),a){let n=e.viewCheckHooks;n!==null&&Ic(t,n)}else{let n=e.viewHooks;n!==null&&Lc(t,n,2),Rc(t,2)}if(e.firstUpdatePass===!0&&(e.firstUpdatePass=!1),t[22]){for(let e of t[22])e();t[22]=null}gf(t),t[2]&=-73}catch(e){throw Oo(t),e}finally{s!==null&&(gn(s,o),a&&bf(s)),cs()}}function Af(e,t){for(let n=Gl(e);n!==null;n=Kl(n))for(let e=10;e0&&(e[n-1][4]=r[4]);let a=fa(e,10+t);Ute(r[1],r);let o=a[18];o!==null&&o.detachView(a[1]),r[3]=null,r[4]=null,r[2]&=-129}return r}function Uf(e,t,n,r){let i=10+r,a=n.length;r>0&&(n[i-1][4]=t),r-1&&(Hf(e,n),fa(t,n))}this._attachedToViewContainer=!1}vd(this._lView[1],this._lView)}onDestroy(e){ko(this._lView,e)}markForCheck(){Lf(this._cdRefInjectingView||this._lView,4)}detach(){this._lView[2]&=-129}reattach(){Do(this._lView),this._lView[2]|=128}detectChanges(){this._lView[2]|=1024,Df(this._lView)}checkNoChanges(){}attachToViewContainerRef(){if(this._appRef)throw new fi(902,!1);this._attachedToViewContainer=!0}detachFromAppRef(){this._appRef=null;let e=co(this._lView),t=this._lView[16];t!==null&&!e&&_d(t,this._lView),gd(this._lView[1],this._lView)}attachToAppRef(e){if(this._attachedToViewContainer)throw new fi(902,!1);this._appRef=e;let t=co(this._lView),n=this._lView[16];n!==null&&!t&&Wf(n,this._lView),Do(this._lView)}},Kf=(()=>{class e{_declarationLView;_declarationTContainer;elementRef;static __NG_ELEMENT_ID__=qf;constructor(e,t,n){this._declarationLView=e,this._declarationTContainer=t,this.elementRef=n}get ssrId(){return this._declarationTContainer.tView?.ssrId||null}createEmbeddedView(e,t){return this.createEmbeddedViewImpl(e,t)}createEmbeddedViewImpl(e,t,n){return new Gf(ff(this._declarationLView,this._declarationTContainer,e,{embeddedViewInjector:t,dehydratedView:n}))}}return e})();function qf(){return Jf(Ho(),Bo())}function Jf(e,t){return e.type&4?new Kf(t,e,jl(e,t)):null}function Yf(e,t,n,r,i){let a=e.data[t];if(a===null)a=Xf(e,t,n,r,i),Xee()&&(a.flags|=32);else if(a.type&64){a.type=n,a.value=r,a.attrs=i;let e=Jee();a.injectorIndex=e===null?-1:e.injectorIndex}return Wo(a,!0),a}function Xf(e,t,n,r,i){let a=Uo(),o=Go(),s=o?a:a&&a.parent,c=e.data[t]=Qf(e,s,n,t,r,i);return Zf(e,c,a,o),c}function Zf(e,t,n,r){e.firstChild===null&&(e.firstChild=t),n!==null&&(r?n.child==null&&t.parent!==null&&(n.child=t):n.next===null&&(n.next=t,t.prev=n))}function Qf(e,t,n,r,i,a){let o=t?t.injectorIndex:-1,s=0;return Lo()&&(s|=128),{type:n,index:r,insertBeforeIndex:null,injectorIndex:o,directiveStart:-1,directiveEnd:-1,directiveStylingLast:-1,componentOffset:-1,controlDirectiveIndex:-1,customControlIndex:-1,propertyBindings:null,flags:s,providerIndexes:0,value:i,namespace:ms(),attrs:a,mergedAttrs:null,localNames:null,initialInputs:null,inputs:null,hostDirectiveInputs:null,outputs:null,hostDirectiveOutputs:null,directiveToIndex:null,tView:null,next:null,prev:null,projectionNext:null,child:null,parent:t,projection:null,styles:null,stylesWithoutHost:null,residualStyles:void 0,classes:null,classesWithoutHost:null,residualClasses:void 0,classBindings:0,styleBindings:0}}function $f(e){let t=e[6]??[],n=e[3][11],r=[];for(let e of t)e.data.di===void 0?ep(e,n):r.push(e);e[6]=r}function ep(e,t){let n=0,r=e.firstChild;if(r){let i=e.data.r;for(;nnull,np=()=>null;function rp(e,t){return tp(e,t)}function ip(e,t,n){return np(e,t,n)}var ap=class{},op=class{},sp=class{destroyNode=null;static __NG_ELEMENT_ID__=()=>cp()};function cp(){let e=Bo(),t=yo(Ho().index,e);return(no(t)?t:e)[11]}var lp=(()=>{class e{static ɵprov=bi({token:e,providedIn:`root`,factory:()=>null})}return e})();function up(e){return e.debugInfo?.className||e.type.name||null}var dp={},fp=class{injector;parentInjector;constructor(e,t){this.injector=e,this.parentInjector=t}get(e,t,n){let r=this.injector.get(e,dp,n);return r!==dp||t===dp?r:this.parentInjector.get(e,t,n)}};function pp(e,t,n){return e[t]=n}function mp(e,t){return e[t]}function hp(e,t,n){if(n===Fu)return!1;let r=e[t];return!Object.is(r,n)&&(e[t]=n,!0)}function gp(e,t,n,r){let i=hp(e,t,n);return hp(e,t+1,r)||i}function _p(e,t,n,r,i){let a=gp(e,t,n,r);return hp(e,t+2,i)||a}function vp(e,t,n,r,i,a){let o=gp(e,t,n,r);return gp(e,t+2,i,a)||o}function yp(e,t,n){return function r(i){let a=r.__ngNativeEl__;a!==void 0&&eu(i,a),Lf(ao(e)?yo(e.index,t):t,5);let o=t[8],s=bp(t,o,n,i),c=r.__ngNextListenerFn__;for(;c;)s=bp(t,o,c,i)&&s,c=c.__ngNextListenerFn__;return s}}function bp(e,t,n,r){let i=rn(null);try{return Nc(bc.OutputStart,t,n),n(r)!==!1}catch(t){return af(e,t),!1}finally{Nc(bc.OutputEnd,t,n),rn(i)}}function xp(e,t,n,r,i,a,o,s){let c=oo(e),l=!1,u=null;if(!r&&c&&(u=Cp(t,n,a,e.index)),u!==null){let e=u.__ngLastListenerFn__||u;e.__ngNextListenerFn__=o,u.__ngLastListenerFn__=o,l=!0}else{let o=ho(e,n),c=r?r(o):o;r||(s.__ngNativeEl__=o);let l=i.listen(c,a,s);Sp(a)||wp(r?t=>r(po(t[e.index])):e.index,t,n,a,s,l,!1)}return l}function Sp(e){return e.startsWith(`animation`)||e.startsWith(`transition`)}function Cp(e,t,n,r){let i=e.cleanup;if(i!=null)for(let e=0;er?n[r]:null}typeof a==`string`&&(e+=2)}return null}function wp(e,t,n,r,i,a,o){let s=t.firstCreatePass?Mo(t):null,c=jo(n),l=c.length;c.push(i,a),s&&s.push(r,e,l,(l+1)*(o?-1:1))}function Tp(e,t,n,r,i){let a=null,o=null,s=null,c=!1,l=e.directiveToIndex.get(n.type);if(typeof l==`number`?a=l:[a,o,s]=l,o!==null&&s!==null&&e.hostDirectiveOutputs&&Object.hasOwn(e.hostDirectiveOutputs,r)){let n=e.hostDirectiveOutputs[r];for(let a=0;a=o&&l<=s)c=!0,Ep(e,t,l,n[a+1],r,i);else if(l>s)break}}return Object.hasOwn(n.outputs,r)&&(c=!0,Ep(e,t,a,r,r,i)),c}function Ep(e,t,n,r,i,a){let o=t[n],s=t[1],c=o[s.data[n].outputs[r]].subscribe(a);wp(e.index,s,t,i,a,c,!0)}function Dp(){Op()}function Op(){let e=Bo(),t=Vo(),n=Ho();if(t.firstCreatePass&&Pp(t,n),n.controlDirectiveIndex===-1)return;rd(`NgSignalForms`);let r=e[n.controlDirectiveIndex];t.data[n.controlDirectiveIndex].controlDef.create(r,new jp(e,t,n))}function kp(){Ap()}function Ap(){let e=Bo(),t=Vo(),n=ds();if(n.controlDirectiveIndex===-1)return;let r=t.data[n.controlDirectiveIndex].controlDef,i=e[n.controlDirectiveIndex];r.update(i,new jp(e,t,n))}var jp=class{lView;tView;tNode;hasPassThrough;constructor(e,t,n){this.lView=e,this.tView=t,this.tNode=n,this.hasPassThrough=!!(n.flags&4096)}get customControl(){return this.tNode.customControlIndex===-1?void 0:this.lView[this.tNode.customControlIndex]}get nativeElement(){return ho(this.tNode,this.lView)}get descriptor(){return`<${this.tNode.value}>`}listenToCustomControlOutput(e,t){let n=this.tView.data[this.tNode.customControlIndex];Tp(this.tNode,this.lView,n,e,yp(this.tNode,this.lView,t))}listenToCustomControlModel(e){let t=this.tNode.flags&1024?`valueChange`:`checkedChange`,n=this.tView.data[this.tNode.customControlIndex];Tp(this.tNode,this.lView,n,t,yp(this.tNode,this.lView,e))}listenToDom(e,t){xp(this.tNode,this.tView,this.lView,void 0,this.lView[11],e,t,yp(this.tNode,this.lView,t))}setInputOnDirectives(e,t,n){let r=this.tNode.inputs?.[e],i=this.tNode.hostDirectiveInputs?.[e];if(!r&&!i)return!1;let a=!1;if(r)for(let i of r){if(i===this.tNode.controlDirectiveIndex)continue;let r=this.lView[i],o=this.tView.data[i];(!n||n(Np(r,o,e)))&&(Bd(o,r,e,t),a=!0)}if(i)for(let r=0;r0;){let e=n.shift();if(typeof e!=`function`){for(let n in e.inputs)t[e.inputs[n]]=!0;let r=Mp(e.directive);r!==null&&n.push(...r);continue}for(let r of e()){if(typeof r==`function`)continue;if(r.inputs)for(let e=0;e1){t.flags|=4096;return}Fp(e,t)}function Fp(e,t){for(let n=t.directiveStart;n{let r=t.hostDirectiveInputs[e],i=t.hostDirectiveOutputs[e+`Change`];if(!r||!i)return!1;for(let e=0;e=i&&a<=o)return t.flags|=n,t.customControlIndex=r,!0}}return!1};if(e(`value`,1024)||e(`checked`,2048))return}}function Ip(e,t){return Lp(e,t)&&Rp(e,t+`Change`)}function Lp(e,t){return t in e.inputs}function Rp(e,t){return t in e.outputs}var zp=Symbol(`BINDING`),Bp=new Di(``);function Vp(e,t,n){let r=n?e.styles:null,i=n?e.classes:null,a=0;if(t!==null)for(let e=0;e0&&(n.directiveToIndex=new Map);for(let c=0;c0;){let n=e[--t];if(typeof n==`number`&&n<0)return n}return 0}function tm(e,t,n){if(n){if(t.exportAs)for(let r=0;r{let[n,r,i]=e[t],a={propName:n,templateName:t,isSignal:(r&zd.SignalBased)!==0};return i&&(a.transform=i),a})}function lm(e){return Object.keys(e).map(t=>({propName:e[t],templateName:t}))}function um(e,t,n){let r=t instanceof Va?t:t?.injector;return r&&e.getStandaloneInjector!==null&&(r=e.getStandaloneInjector(r)||r),r?new fp(n,r):n}function dm(e){let t=e.get(op,null);if(t===null)throw new fi(407,!1);return{rendererFactory:t,sanitizer:e.get(lp,null),changeDetectionScheduler:e.get(rc,null),ngReflect:!1,tracingService:e.get(td,null,{optional:!0})}}function fm(e,t,n){let r=mm(e);return xu(t,r,r===`svg`?`svg`:r===`math`?fo:n)}function pm(e){if((e&&`localName`in e&&typeof e.localName==`string`?e.localName:e?.tagName)?.toLowerCase()===`script`)throw new fi(905,!1)}function mm(e){return(e.selectors[0][0]||`div`).toLowerCase()}var hm=class{componentDef;ngModule;selector;componentType;ngContentSelectors;isBoundToModule;cachedInputs=null;cachedOutputs=null;get inputs(){return this.cachedInputs??=cm(this.componentDef.inputs),this.cachedInputs}get outputs(){return this.cachedOutputs??=lm(this.componentDef.outputs),this.cachedOutputs}constructor(e,t){this.componentDef=e,this.ngModule=t,this.componentType=e.type,this.selector=gte(e.selectors),this.ngContentSelectors=e.ngContentSelectors??[],this.isBoundToModule=!!t}create(e,t,n,r,i,a,o){Nc(bc.DynamicComponentStart);let s=rn(null);try{let s=this.componentDef,c=um(s,r||this.ngModule,e),l=dm(c),u=l.tracingService;return u&&u.componentCreate?u.componentCreate(up(s),()=>this.createComponentRef(l,c,t,n,i,a,o)):this.createComponentRef(l,c,t,n,i,a,o)}finally{rn(s)}}createComponentRef(e,t,n,r,i,a,o){let s=this.componentDef,c=gm(r,s,a,i),l=e.rendererFactory.createRenderer(null,s),u=r?Wd(l,r,s.encapsulation,t):fm(s,l,o??null);pm(u);let d=t.get(Bp,null),f=_m(u,()=>t.get(xs,null)??Xl());d&&d.addHost(f);let p=a?.some(ym)||i?.some(e=>typeof e!=`function`&&e.bindings.some(ym)),m=Nd(null,c,null,512|Fd(s),null,null,e,l,t,null,ru(u,t,!0));d&&om&&f instanceof ShadowRoot&&ko(m,()=>{d.removeHost(f)}),m[27]=u,rs(m);let ee=null;try{let e=rm(27,m,2,`#host`,()=>c.directiveRegistry,!0,0);Eu(l,u,e),Wl(u,m),Hd(c,m,e),ou(c,e,m),im(c,e),n!==void 0&&xm(e,this.ngContentSelectors,n),ee=yo(e.index,m),m[8]=ee[8],uf(c,m,null)}catch(e){throw ee!==null&&Hl(ee),Hl(m),e}finally{Nc(bc.DynamicComponentEnd),cs()}return new bm(this.componentType,m,!!p)}};function gm(e,t,n,r){let i=e?[`ng-version`,`22.1.7`]:_te(t.selectors[0]),a=null,o=null,s=0;if(n)for(let e of n)s+=e[zp].requiredVars,e.create&&(e.targetIdx=0,(a??=[]).push(e)),e.update&&(e.targetIdx=0,(o??=[]).push(e));if(r)for(let e=0;e{if(n&1&&e)for(let t of e)t.create();if(n&2&&t)for(let e of t)e.update()}}function ym(e){let t=e[zp].kind;return t===`input`||t===`twoWay`}var bm=class extends ap{_rootLView;_hasInputBindings;instance;hostView;changeDetectorRef;componentType;location;previousInputValues=null;_tNode;constructor(e,t,n){super(),this._rootLView=t,this._hasInputBindings=n,this._tNode=go(t[1],27),this.location=jl(this._tNode,t),this.instance=yo(this._tNode.index,t)[8],this.hostView=this.changeDetectorRef=new Gf(t,void 0),this.componentType=e}setInput(e,t){this._hasInputBindings;let n=this._tNode;if(this.previousInputValues??=new Map,this.previousInputValues.has(e)&&Object.is(this.previousInputValues.get(e),t))return;let r=this._rootLView;of(n,r[1],r,e,t),this.previousInputValues.set(e,t),Lf(yo(n.index,r),1)}get injector(){return new Cl(this._tNode,this._rootLView)}destroy(){this.hostView.destroy()}onDestroy(e){this.hostView.onDestroy(e)}};function xm(e,t,n){let r=e.projection=[];for(let e=0;e{class e{static __NG_ELEMENT_ID__=Cm}return e})();function Cm(){return Dm(Ho(),Bo())}var wm=class e extends Sm{_lContainer;_hostTNode;_hostLView;constructor(e,t,n){super(),this._lContainer=e,this._hostTNode=t,this._hostLView=n}get element(){return jl(this._hostTNode,this._hostLView)}get injector(){return new Cl(this._hostTNode,this._hostLView)}get parentInjector(){let e=dl(this._hostTNode,this._hostLView);if(Zc(e)){let t=el(e,this._hostLView),n=Qc(e),r=t[1].data[n+8];return new Cl(r,t)}return new Cl(null,this._hostLView)}clear(){for(;this.length>0;)this.remove(this.length-1)}get(e){let t=Tm(this._lContainer);return t!==null&&t[e]||null}get length(){return this._lContainer.length-10}createEmbeddedView(e,t,n){let r,i;typeof n==`number`?r=n:n!=null&&(r=n.index,i=n.injector);let a=rp(this._lContainer,e.ssrId),o=e.createEmbeddedViewImpl(t||{},i,a);return this.insertImpl(o,r,pf(this._hostTNode,a)),o}createComponent(e,t,n,r,i,a,o){let s,c=t||{};s=c.index,n=c.injector,r=c.projectableNodes,i=c.environmentInjector||c.ngModuleRef,a=c.directives,o=c.bindings;let l=new hm(Fi(e)),u=n||this.parentInjector;if(!i&&l.ngModule==null){let e=this.parentInjector.get(Va,null);e&&(i=e)}let d=Fi(l.componentType??{}),f=rp(this._lContainer,d?.id??null),p=f?.firstChild??null,m=l.create(u,r,p,i,a,o,this._getHostElementNamespace());return this.insertImpl(m.hostView,s,pf(this._hostTNode,f)),m}_getHostElementNamespace(){if(this._hostTNode.type&2){let e=this._hostTNode.parent??this._hostLView[5];return e!==null&&e.type&2&&typeof e.value==`string`&&e.value.toLowerCase()===`foreignobject`?null:e?.namespace??null}return this._hostTNode.namespace}insert(e,t){return this.insertImpl(e,t,!0)}insertImpl(t,n,r){let i=t._lView;if(xo(i)){let n=this.indexOf(t);if(n!==-1)this.detach(n);else{let n=i[3],r=new e(n,n[5],n[3]);r.detach(r.indexOf(t))}}let a=this._adjustIndex(n),o=this._lContainer;return Bf(o,i,a,r),t.attachToViewContainerRef(),da(Em(o),a,t),t}move(e,t){return this.insert(e,t)}indexOf(e){let t=Tm(this._lContainer);return t===null?-1:t.indexOf(e)}remove(e){let t=this._adjustIndex(e,-1),n=Hf(this._lContainer,t);n&&(fa(Em(this._lContainer),t),vd(n[1],n))}detach(e){let t=this._adjustIndex(e,-1),n=Hf(this._lContainer,t);return n&&fa(Em(this._lContainer),t)!=null?new Gf(n):null}_adjustIndex(e,t=0){return e??this.length+t}};function Tm(e){return e[8]}function Em(e){return e[8]||=[]}function Dm(e,t){let n,r=t[e.index];return ro(r)?n=r:(n=Rf(r,t,null,e),t[e.index]=n,Ld(t,n)),km(n,t,e,r),new wm(n,e,t)}function Om(e,t){let n=e[11],r=n.createComment(``),i=ho(t,e);return Su(n,n.parentNode(i),r,n.nextSibling(i),!1),r}var km=Mm,Am=()=>!1;function jm(e,t,n){return Am(e,t,n)}function Mm(e,t,n,r){if(e[7])return;let i;i=n.type&8?po(r):Om(t,n),e[7]=i}var Nm=class e{queryList;matches=null;constructor(e){this.queryList=e}clone(){return new e(this.queryList)}setDirty(){this.queryList.setDirty()}},Pm=class e{queries;constructor(e=[]){this.queries=e}createEmbeddedView(t){let n=t.queries;if(n!==null){let r=t.contentQueries===null?n.length:t.contentQueries[0],i=[];for(let e=0;e0)r.push(o[e/2]);else{let i=a[e+1],o=t[-n];for(let e=10;ee.trim())}function Jm(e,t,n){e.queries===null&&(e.queries=new Im),e.queries.track(new Lm(t,n))}function Ym(e,t){return e.queries.getByIndex(t)}function Xm(e,t){let n=e[1],r=Ym(n,t);return r.crossesNgTemplate?Um(n,e,t,[]):Hm(n,e,r,t)}function Zm(e,t,n){let r,i=Tn(()=>{r._dirtyCounter();let n=th(r,e);if(t&&n===void 0)throw new fi(-951,!1);return n});return r=i[nn],r._dirtyCounter=T(0),r._flatValue=void 0,i}function Qm(e){return Zm(!0,!1,e)}function $m(e){return Zm(!0,!0,e)}function eh(e,t){let n=e[nn];n._lView=Bo(),n._queryIndex=t,n._queryList=Wm(n._lView,t),n._queryList.onDirty(()=>n._dirtyCounter.update(e=>e+1))}function th(e,t){let n=e._lView,r=e._queryIndex;if(n===void 0||r===void 0||n[2]&4)return t?void 0:ba;let i=Wm(n,r),a=Xm(n,r);return i.reset(a,Nl),t?i.first:i._changesDetected||e._flatValue===void 0?e._flatValue=i.toArray():e._flatValue}function nh(e){return!!e&&typeof e.then==`function`}function rh(e){return!!e&&typeof e.subscribe==`function`}var ih=class{},ah=class extends ih{injector;instance=null;constructor(e){super();let t=new Ha([...e.providers,{provide:ih,useValue:this}],e.parent||Ba(),e.debugName,new Set([`environment`]));this.injector=t,e.runEnvironmentInitializers&&t.resolveInjectorInitializers()}destroy(){this.injector.destroy()}onDestroy(e){this.injector.onDestroy(e)}};function oh(e,t,n=null){return new ah({providers:e,parent:t,debugName:n,runEnvironmentInitializers:!0}).injector}var sh=(()=>{class e{_injector;cachedInjectors=new Map;constructor(e){this._injector=e}getOrCreateStandaloneInjector(e){if(!e.standalone)return null;if(!this.cachedInjectors.has(e)){let t=Ea(!1,e.type),n=t.length>0?oh([t],this._injector,``):null;this.cachedInjectors.set(e,n)}return this.cachedInjectors.get(e)}ngOnDestroy(){try{for(let e of this.cachedInjectors.values())e!==null&&e.destroy()}finally{this.cachedInjectors.clear()}}static ɵprov=bi({token:e,providedIn:`environment`,factory:()=>new e(na(Va))})}return e})();function O(e){return yc(()=>{let t=ph(e),n={...t,decls:e.decls,vars:e.vars,template:e.template,consts:e.consts||null,ngContentSelectors:e.ngContentSelectors,onPush:e.changeDetection!==Ll.Eager,directiveDefs:null,pipeDefs:null,dependencies:t.standalone&&e.dependencies||null,getStandaloneInjector:t.standalone?e=>e.get(sh).getOrCreateStandaloneInjector(n):null,getExternalStyles:null,signals:e.signals??!1,data:e.data||{},encapsulation:e.encapsulation||su.Emulated,styles:e.styles||ba,_:null,schemas:e.schemas||null,tView:null,id:``};t.standalone&&rd(`NgStandalone`),mh(n);let r=e.dependencies;return n.directiveDefs=hh(r,ch),n.pipeDefs=hh(r,Li),n.id=gh(n),n})}function ch(e){return Fi(e)||Ii(e)}function lh(e,t){if(e==null)return ya;let n={};for(let r in e)if(Object.hasOwn(e,r)){let i=e[r],a,o,s,c;Array.isArray(i)?(s=i[0],a=i[1],o=i[2]??a,c=i[3]||null):(a=i,o=i,s=zd.None,c=null),n[a]=[r,s,c],t[a]=o}return n}function uh(e){if(e==null)return ya;let t={};for(let n in e)Object.hasOwn(e,n)&&(t[e[n]]=n);return t}function dh(e){return yc(()=>{let t=ph(e);return mh(t),t})}function fh(e){return{type:e.type,name:e.name,factory:null,pure:e.pure!==!1,standalone:e.standalone??!0,onDestroy:e.type.prototype.ngOnDestroy||null}}function ph(e){let t={};return{type:e.type,providersResolver:null,viewProvidersResolver:null,factory:null,hostBindings:e.hostBindings||null,hostVars:e.hostVars||0,hostAttrs:e.hostAttrs||null,contentQueries:e.contentQueries||null,declaredInputs:t,inputConfig:e.inputs||ya,exportAs:e.exportAs||null,standalone:e.standalone??!0,signals:e.signals===!0,selectors:e.selectors||ba,viewQuery:e.viewQuery||null,features:e.features||null,setInput:null,resolveHostDirectives:null,hostDirectives:null,controlDef:null,signalFormsInputPresence:null,inputs:lh(e.inputs,t),outputs:uh(e.outputs),debugInfo:null}}function mh(e){e.features?.forEach(t=>t(e))}function hh(e,t){return e?()=>{let n=typeof e==`function`?e():e,r=[];for(let e of n){let n=t(e);n!==null&&r.push(n)}return r}:null}function gh(e){let t=0,n=typeof e.consts==`function`?``:e.consts,r=[e.selectors,e.ngContentSelectors,e.hostVars,e.hostAttrs,n,e.vars,e.decls,e.encapsulation,e.standalone,e.signals,e.exportAs,JSON.stringify(e.inputs),JSON.stringify(e.outputs),Object.getOwnPropertyNames(e.type.prototype),!!e.contentQueries,!!e.viewQuery];for(let e of r.join(`|`))t=Math.imul(31,t)+e.charCodeAt(0)<<0;return t+=2147483648,`c`+t}var _h=new Di(``),vh=(()=>{class e{resolve;reject;initialized=!1;done=!1;donePromise=new Promise((e,t)=>{this.resolve=e,this.reject=t});appInits=x(_h,{optional:!0})??[];injector=x(bs);constructor(){}runInitializers(){if(this.initialized)return;let e=[];for(let t of this.appInits){let n=$a(this.injector,t);if(nh(n))e.push(n);else if(rh(n)){let t=new Promise((e,t)=>{n.subscribe({complete:e,error:t})});e.push(t)}}let t=()=>{this.done=!0,this.resolve()};Promise.all(e).then(()=>{t()}).catch(e=>{this.reject(e)}),e.length===0&&t(),this.initialized=!0}static ɵfac=function(t){return new(t||e)};static ɵprov=kl({token:e,factory:e.ɵfac})}return e})();function yh(e){return t=>{t.controlDef={create:(e,t)=>{e?.ɵngControlCreate(t)},update:(e,t)=>{e?.ɵngControlUpdate?.(t)},passThroughInput:e}}}function bh(e){return Object.getPrototypeOf(e.prototype).constructor}function xh(e){let t=bh(e.type),n=!0,r=[e];for(;t&&t!==Function.prototype&&t!==Object.prototype;){let i,a=Object.hasOwn(t,ki)?t[ki]:void 0,o=Object.hasOwn(t,Ai)?t[Ai]:void 0;if(so(e))i=a??o;else{if(a)throw new fi(903,!1);i=o}if(i){if(n){r.push(i);let t=e;t.inputs=wh(e.inputs),t.declaredInputs=wh(e.declaredInputs),t.outputs=wh(e.outputs);let n=i.hostBindings;n&&Dh(e,n);let a=i.viewQuery,o=i.contentQueries;if(a&&Th(e,a),o&&Eh(e,o),Sh(e,i),Hee(e.outputs,i.outputs),so(i)&&i.data.animation){let t=e.data;t.animation=(t.animation||[]).concat(i.data.animation)}}let t=i.features;if(t)for(let r=0;r=0;r--){let i=e[r];i.hostVars=t+=i.hostVars,i.hostAttrs=Yc(i.hostAttrs,n=Yc(n,i.hostAttrs))}}function wh(e){return e===ya?{}:e===ba?[]:e}function Th(e,t){let n=e.viewQuery;e.viewQuery=n?(e,r)=>{t(e,r),n(e,r)}:t}function Eh(e,t){let n=e.contentQueries;e.contentQueries=n?(e,r,i)=>{t(e,r,i),n(e,r,i)}:t}function Dh(e,t){let n=e.hostBindings;e.hostBindings=n?(e,r)=>{t(e,r),n(e,r)}:t}function Oh(e,t,n,r,i,a,o,s){if(n.firstCreatePass){e.mergedAttrs=Yc(e.mergedAttrs,e.attrs);let t=e.tView=Ad(2,e,i,a,o,n.directiveRegistry,n.pipeRegistry,null,n.schemas,n.consts,null);n.queries!==null&&(n.queries.template(n,e),t.queries=n.queries.embeddedTView(e))}s&&(e.flags|=s),Wo(e,!1);let c=Mh(n,t,e,r);gs()&&Sd(n,t,c,e),Wl(c,t);let l=Rf(c,t,c,e);t[r+27]=l,Ld(t,l),jm(l,e,t)}function kh(e,t,n,r,i,a,o,s,c,l,u){let d=n+27,f;return t.firstCreatePass?(f=Yf(t,d,4,o||null,s||null),Io()&&Up(t,e,f,So(t.consts,l),Qd),Fc(t,f)):f=t.data[d],Oh(f,e,t,n,r,i,a,c),oo(f)&&Hd(t,e,f),l!=null&&Ud(e,f,u),f}function Ah(e,t,n,r,i,a,o,s,c,l,u){let d=n+27,f;if(t.firstCreatePass){if(f=Yf(t,d,4,o||null,s||null),l!=null){let e=So(t.consts,l);f.localNames=[];for(let t=0;t{throw new fi(600,``)})}var Lh=10,Rh=(()=>{class e{_runningTick=!1;_destroyed=!1;_destroyListeners=[];_views=[];internalErrorHandler=x(qs);afterRenderManager=x(id);zonelessEnabled=x(ic);rootEffectScheduler=x(oc);dirtyFlags=0;tracingSnapshot=null;allTestViews=new Set;autoDetectTestViews=new Set;includeAllTestViews=!1;afterTick=new Ur;get allViews(){return[...(this.includeAllTestViews?this.allTestViews:this.autoDetectTestViews).keys(),...this._views]}get destroyed(){return this._destroyed}componentTypes=[];components=[];internalPendingTask=x(Es);get isStable(){return this.internalPendingTask.hasPendingTasksObservable.pipe(ui(e=>!e))}constructor(){x(td,{optional:!0})}whenStable(){let e;return new Promise(t=>{e=this.isStable.subscribe({next:e=>{e&&t()}})}).finally(()=>{e.unsubscribe()})}_injector=x(Va);_rendererFactory=null;get injector(){return this._injector}bootstrap(e,t){return this.bootstrapImpl(e,t)}bootstrapImpl(e,t,n=bs.NULL){return this._injector.get(Ps).run(()=>{if(Nc(bc.BootstrapComponentStart),!this._injector.get(vh).done)throw new fi(405,``);let r=Fi(e),i=this._injector.get(ih),a=new hm(r,i);this.componentTypes.push(e);let{hostElement:o,directives:s,bindings:c}=zh(t),l=o||a.selector,u=a.create(n,[],l,i.injector,s,c),d=u.location.nativeElement,f=u.injector.get(Ph,null);return f?.registerApplication(d),u.onDestroy(()=>{this.detachView(u.hostView),Bh(this.components,u),f?.unregisterApplication(d)}),this._loadComponent(u),Nc(bc.BootstrapComponentEnd,u),u})}tick(){this.zonelessEnabled||(this.dirtyFlags|=1),this._tick()}_tick(){Nc(bc.ChangeDetectionStart),this.tracingSnapshot===null?this.tickImpl():this.tracingSnapshot.run(ed.CHANGE_DETECTION,this.tickImpl)}tickImpl=()=>{if(this._runningTick)throw Nc(bc.ChangeDetectionEnd),new fi(101,!1);let e=rn(null);try{this._runningTick=!0,this.synchronize()}finally{this._runningTick=!1,this.tracingSnapshot?.dispose(),this.tracingSnapshot=null,rn(e),this.afterTick.next(),Nc(bc.ChangeDetectionEnd)}};synchronize(){this._rendererFactory===null&&!this._injector.destroyed&&(this._rendererFactory=this._injector.get(op,null,{optional:!0}));let e=0;for(;this.dirtyFlags!==0&&e++Eo(e))){this.dirtyFlags|=2;return}this.dirtyFlags&=-8}attachView(e){let t=e;this._views.push(t),t.attachToAppRef(this)}detachView(e){let t=e;Bh(this._views,t),t.detachFromAppRef()}_loadComponent(e){this.attachView(e.hostView);try{this.tick()}catch(e){this.internalErrorHandler(e)}this.components.push(e),this._injector.get(Fh,[]).forEach(t=>t(e))}ngOnDestroy(){if(!this._destroyed)try{this._destroyListeners.forEach(e=>e()),this._views.slice().forEach(e=>e.destroy())}finally{this._destroyed=!0,this._views=[],this._destroyListeners=[]}}onDestroy(e){return this._destroyListeners.push(e),()=>Bh(this._destroyListeners,e)}destroy(){if(this._destroyed)throw new fi(406,!1);let e=this._injector;e.destroy&&!e.destroyed&&e.destroy()}get viewCount(){return this._views.length}static ɵfac=function(t){return new(t||e)};static ɵprov=kl({token:e,factory:e.ɵfac})}return e})();function zh(e){return e===void 0||typeof e==`string`||e instanceof Element?{hostElement:e}:e}function Bh(e,t){let n=e.indexOf(t);n>-1&&e.splice(n,1)}function k(e,t,n,r){let i=Bo();return hp(i,Qo(),t)&&(Vo(),$d(ds(),i,e,t,n,r)),k}function Vh(e){if(rd(`NgAnimateEnter`),!Wu)return Vh;let t=Bo();if(Dte(t))return Vh;let n=Ho(),r=t[9].get(Ps);return Mte(Zu(t),n,()=>Hh(t,n,e,r)),Rte(t[9]),dd(t[9],Zu(t)),Vh}function Hh(e,t,n,r){let i=ho(t,e),a=e[11],o=jte(n),s=[],c=!1,l=e=>{if(Qu(e)!==i)return;let t=e instanceof AnimationEvent?`animationend`:`transitionend`;r.runOutsideAngular(()=>{a.listen(i,t,u)})},u=e=>{Qu(e)===i&&($u(e,i)&&(c=!0),Uh(e,i,a))};if(o&&o.length>0){r.runOutsideAngular(()=>{s.push(a.listen(i,`animationstart`,l)),s.push(a.listen(i,`transitionstart`,l))}),Ote(i,o,s);for(let e of o)a.addClass(i,e);r.runOutsideAngular(()=>{requestAnimationFrame(()=>{if(!c&&(Cte(i,qu,Wu),!qu.has(i))){for(let e of o)a.removeClass(i,e);Gu(i)}})})}}function Uh(e,t,n){let r=Ku.get(t);if(Qu(e)===t&&r&&$u(e,t)){e.stopPropagation();for(let e of r.classList)n.removeClass(t,e);Gu(t)}}var Wh=class{destroy(e){}updateValue(e,t){}swap(e,t){let n=Math.min(e,t),r=Math.max(e,t),i=this.detach(r);if(r-n>1){let e=this.detach(n);this.attach(n,i),this.attach(r,e)}else this.attach(n,i)}move(e,t){this.attach(t,this.detach(e))}};function Gh(e,t,n,r,i){return e===n&&Object.is(t,r)?1:Object.is(i(e,t),i(n,r))?-1:0}function Kh(e,t,n,r){let i,a,o=0,s=e.length-1;if(Array.isArray(t)){rn(r);let c=t.length-1;for(rn(null);o<=s&&o<=c;){let r=e.at(o),l=t[o],u=Gh(o,r,o,l,n);if(u!==0){u<0&&e.updateValue(o,l),o++;continue}let d=e.at(s),f=t[c],p=Gh(s,d,c,f,n);if(p!==0){p<0&&e.updateValue(s,f),s--,c--;continue}let m=n(o,r),ee=n(s,d),h=n(o,l);if(Object.is(h,ee)){let t=n(c,f);Object.is(t,m)?(e.swap(o,s),e.updateValue(s,f),c--,s--):e.move(s,o),e.updateValue(o,l),o++;continue}if(i??=new Xh,a??=Yh(e,o,s,n),qh(e,i,o,h))e.updateValue(o,l),o++,s++;else if(a.has(h))i.set(m,e.detach(o)),s--;else{let n=e.create(o,t[o]);e.attach(o,n),o++,s++}}for(;o<=c;)Jh(e,i,n,o,t[o]),o++}else if(t!=null){rn(r);let c=t[Symbol.iterator]();rn(null);let l=c.next();for(;!l.done&&o<=s;){let t=e.at(o),r=l.value,u=Gh(o,t,o,r,n);if(u!==0)u<0&&e.updateValue(o,r),o++,l=c.next();else{i??=new Xh,a??=Yh(e,o,s,n);let u=n(o,r);if(qh(e,i,o,u))e.updateValue(o,r),o++,s++,l=c.next();else if(!a.has(u))e.attach(o,e.create(o,r)),o++,s++,l=c.next();else{let r=n(o,t);i.set(r,e.detach(o)),s--}}}for(;!l.done;)Jh(e,i,n,e.length,l.value),l=c.next()}for(;o<=s;)e.destroy(e.detach(s--));i?.forEach(t=>{e.destroy(t)})}function qh(e,t,n,r){return t!==void 0&&t.has(r)?(e.attach(n,t.get(r)),t.delete(r),!0):!1}function Jh(e,t,n,r,i){if(qh(e,t,r,n(r,i)))e.updateValue(r,i);else{let t=e.create(r,i);e.attach(r,t)}}function Yh(e,t,n,r){let i=new Set;for(let a=t;a<=n;a++)i.add(r(a,e.at(a)));return i}var Xh=class{kvMap=new Map;_vMap=void 0;has(e){return this.kvMap.has(e)}delete(e){if(!this.has(e))return!1;let t=this.kvMap.get(e);return this._vMap!==void 0&&this._vMap.has(t)?(this.kvMap.set(e,this._vMap.get(t)),this._vMap.delete(t)):this.kvMap.delete(e),!0}get(e){return this.kvMap.get(e)}set(e,t){if(this.kvMap.has(e)){let n=this.kvMap.get(e);this._vMap===void 0&&(this._vMap=new Map);let r=this._vMap;for(;r.has(n);)n=r.get(n);r.set(n,t)}else this.kvMap.set(e,t)}forEach(e){for(let[t,n]of this.kvMap)if(e(n,t),this._vMap!==void 0){let r=this._vMap;for(;r.has(n);)n=r.get(n),e(n,t)}}};function A(e,t,n,r,i,a,o,s){rd(`NgControlFlow`);let c=Bo(),l=Vo();return Ah(c,l,e,t,n,r,i,So(l.consts,a),256,o,s),Zh}function Zh(e,t,n,r,i,a,o,s){rd(`NgControlFlow`);let c=Bo(),l=Vo();return Ah(c,l,e,t,n,r,i,So(l.consts,a),512,o,s),Zh}function j(e,t){rd(`NgControlFlow`);let n=Bo(),r=Qo(),i=n[r]===Fu?-1:n[r],a=i===-1?void 0:rg(n,27+i);if(hp(n,r,e)){let r=rn(null);try{if(a!==void 0&&Vf(a,0),e!==-1){let r=27+e,i=rg(n,r),a=cg(n[1],r),o=ip(i,a,n);Bf(i,ff(n,a,t,{dehydratedView:o}),0,pf(a,o))}}finally{rn(r)}}else if(a!==void 0){let e=zf(a,0);e!==void 0&&(e[8]=t)}}var Qh=class{lContainer;$implicit;$index;constructor(e,t,n){this.lContainer=e,this.$implicit=t,this.$index=n}get $count(){return this.lContainer.length-10}};function $h(e){return e}function eg(e,t){return t}var tg=class{hasEmptyBlock;trackByFn;liveCollection;constructor(e,t,n){this.hasEmptyBlock=e,this.trackByFn=t,this.liveCollection=n}};function M(e,t,n,r,i,a,o,s,c,l,u,d,f){rd(`NgControlFlow`);let p=Bo(),m=Vo(),ee=c!==void 0,h=Bo(),g=new tg(ee,s?o.bind(h[15][8]):o);h[27+e]=g,Ah(p,m,e+1,t,n,r,i,So(m.consts,a),256),ee&&Ah(p,m,e+2,c,l,u,d,So(m.consts,f),512)}var ng=class extends Wh{lContainer;hostLView;templateTNode;operationsCounter=void 0;needsIndexUpdate=!1;constructor(e,t,n){super(),this.lContainer=e,this.hostLView=t,this.templateTNode=n}get length(){return this.lContainer.length-10}at(e){return this.getLView(e)[8].$implicit}attach(e,t){let n=t[6];this.needsIndexUpdate||=e!==this.length,Bf(this.lContainer,t,e,pf(this.templateTNode,n)),ig(this.lContainer,e)}detach(e){return this.needsIndexUpdate||=e!==this.length-1,ag(this.lContainer,e),og(this.lContainer,e)}create(e,t){let n=rp(this.lContainer,this.templateTNode.tView.ssrId);return ff(this.hostLView,this.templateTNode,new Qh(this.lContainer,t,e),{dehydratedView:n})}destroy(e){vd(e[1],e)}updateValue(e,t){this.getLView(e)[8].$implicit=t}reset(){this.needsIndexUpdate=!1}updateIndexes(){if(this.needsIndexUpdate)for(let e=0;e0){let e=n[9];Ite(e,r),Uu.delete(n[19]),r.detachedLeaveAnimationFns=void 0}}function ag(e,t){if(e.length<=10)return;let n=e[10+t],r=n?n[26]:void 0;r&&r.leave&&r.leave.size>0&&(r.detachedLeaveAnimationFns=[])}function og(e,t){return Hf(e,t)}function sg(e,t){return zf(e,t)}function cg(e,t){return go(e,t)}function P(e,t,n){let r=Bo();return hp(r,Qo(),t)&&(Vo(),Kd(ds(),r,e,t,r[11],n)),P}function lg(e,t,n,r,i){of(t,e,n,i?`class`:`style`,r)}function F(e,t,n,r){let i=Bo(),a=i[1],o=e+27,s=a.firstCreatePass?rm(o,i,2,t,Qd,Io(),n,r):a.data[o];if(ao(s)){let n=i[10].tracingService;if(n&&n.componentCreate){let o=a.data[s.directiveStart+s.componentOffset];return n.componentCreate(up(o),()=>(ug(e,t,i,s,r),F))}}return ug(e,t,i,s,r),F}function ug(e,t,n,r,i){if(nf(r,n,e,t,fg),oo(r)){let e=n[1];Hd(e,n,r),ou(e,r,n)}i!=null&&Ud(n,r)}function I(){let e=Vo(),t=rf(Ho());return e.firstCreatePass&&im(e,t),Ro(t)&&zo(),Fo(),t.classesWithoutHost!=null&&Wc(t)&&lg(e,t,Bo(),t.classesWithoutHost,!0),t.stylesWithoutHost!=null&&Gc(t)&&lg(e,t,Bo(),t.stylesWithoutHost,!1),I}function L(e,t,n,r){return F(e,t,n,r),I(),L}function R(e,t,n,r){let i=Bo(),a=i[1],o=e+27,s=a.firstCreatePass?am(o,a,2,t,n,r):a.data[o];return nf(s,i,e,t,fg),r!=null&&Ud(i,s),R}function z(){return Ro(rf(Ho()))&&zo(),Fo(),z}function dg(e,t,n,r){return R(e,t,n,r),z(),dg}var fg=(e,t,n,r,i)=>(_s(!0),xu(t[11],r,ms()));function pg(e,t,n){let r=Bo(),i=r[1],a=e+27,o=i.firstCreatePass?rm(a,r,8,`ng-container`,Qd,Io(),t,n):i.data[a];if(nf(o,r,e,`ng-container`,gg),oo(o)){let e=r[1];Hd(e,r,o),ou(e,o,r)}return n!=null&&Ud(r,o),pg}function mg(){let e=Vo(),t=rf(Ho());return e.firstCreatePass&&im(e,t),mg}function hg(e,t,n){return pg(e,t,n),mg(),hg}var gg=(e,t,n,r,i)=>(_s(!0),bu(t[11],``));function B(){return Bo()}function V(e,t,n){let r=Bo();return hp(r,Qo(),t)&&(Vo(),qd(ds(),r,e,t,r[11],n)),V}var _g=void 0;function vg(e){let t=Math.floor(Math.abs(e)),n=e.toString().replace(/^[^.]*\.?/,``).length;return t===1&&n===0?1:5}var yg=[`en`,[[`a`,`p`],[`AM`,`PM`]],[[`AM`,`PM`]],[[`S`,`M`,`T`,`W`,`T`,`F`,`S`],[`Sun`,`Mon`,`Tue`,`Wed`,`Thu`,`Fri`,`Sat`],[`Sunday`,`Monday`,`Tuesday`,`Wednesday`,`Thursday`,`Friday`,`Saturday`],[`Su`,`Mo`,`Tu`,`We`,`Th`,`Fr`,`Sa`]],_g,[[`J`,`F`,`M`,`A`,`M`,`J`,`J`,`A`,`S`,`O`,`N`,`D`],[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`],[`January`,`February`,`March`,`April`,`May`,`June`,`July`,`August`,`September`,`October`,`November`,`December`]],_g,[[`B`,`A`],[`BC`,`AD`],[`Before Christ`,`Anno Domini`]],0,[6,0],[`M/d/yy`,`MMM d, y`,`MMMM d, y`,`EEEE, MMMM d, y`],[`h:mm a`,`h:mm:ss a`,`h:mm:ss a z`,`h:mm:ss a zzzz`],[`{1}, {0}`,_g,_g,_g],[`.`,`,`,`;`,`%`,`+`,`-`,`E`,`×`,`‰`,`∞`,`NaN`,`:`],[`#,##0.###`,`#,##0%`,`¤#,##0.00`,`#E0`],`USD`,`$`,`US Dollar`,{},`ltr`,vg],bg=Object.create(null);function xg(e){let t=wg(e),n=Sg(t);if(n)return n;let r=t.split(`-`)[0];if(n=Sg(r),n)return n;if(r===`en`)return yg;throw new fi(701,!1)}function Sg(e){if(!(e in bg)){let t=Zi.ng&&Zi.ng.common&&Zi.ng.common.locales&&Zi.ng.common.locales[e];return t!==void 0&&(bg[e]=t),t}return bg[e]}var Cg={LocaleId:0,DayPeriodsFormat:1,DayPeriodsStandalone:2,DaysFormat:3,DaysStandalone:4,MonthsFormat:5,MonthsStandalone:6,Eras:7,FirstDayOfWeek:8,WeekendRange:9,DateFormat:10,TimeFormat:11,DateTimeFormat:12,NumberSymbols:13,NumberFormats:14,CurrencyCode:15,CurrencySymbol:16,CurrencyName:17,Currencies:18,Directionality:19,PluralCase:20,ExtraData:21};function wg(e){return e.toLowerCase().replace(/_/g,`-`)}var Tg=`en-US`;function Eg(e){typeof e==`string`&&e.toLowerCase().replace(/_/g,`-`)}function H(e,t,n){let r=Bo(),i=Vo(),a=Ho();return Dg(i,r,r[11],a,e,t,n),H}function U(e,t,n){let r=Bo(),i=Vo(),a=Ho();return(a.type&3||n)&&xp(a,i,r,n,r[11],e,t,yp(a,r,t)),U}function Dg(e,t,n,r,i,a,o){let s=!0,c=null;if((r.type&3||o)&&(c??=yp(r,t,a),xp(r,e,t,o,n,i,a,c)&&(s=!1)),s){let e=r.outputs?.[i],n=r.hostDirectiveOutputs?.[i];if(n&&n.length)for(let e=0;e>17&32767}function Lg(e){return(e&2)==2}function Rg(e,t){return e&131071|t<<17}function zg(e){return e|2}function Bg(e){return(e&131068)>>2}function Vg(e,t){return e&-131069|t<<2}function Hg(e){return(e&1)==1}function Ug(e){return e|1}function Wg(e,t,n,r,i,a){let o=a?t.classBindings:t.styleBindings,s=Ig(o),c=Bg(o);e[r]=n;let l=!1,u;if(Array.isArray(n)){let e=n;u=e[1],(u===null||_a(e,u)>0)&&(l=!0)}else u=n;if(i){if(c!==0){let t=Ig(e[s+1]);e[r+1]=Fg(t,s),t!==0&&(e[t+1]=Vg(e[t+1],r)),e[s+1]=Rg(e[s+1],r)}else e[r+1]=Fg(s,0),s!==0&&(e[s+1]=Vg(e[s+1],r)),s=r}else e[r+1]=Fg(c,0),s===0?s=r:e[c+1]=Vg(e[c+1],r),c=r;l&&(e[r+1]=zg(e[r+1])),Kg(e,u,r,!0),Kg(e,u,r,!1),Gg(t,u,e,r,a),o=Fg(s,c),a?t.classBindings=o:t.styleBindings=o}function Gg(e,t,n,r,i){let a=i?e.residualClasses:e.residualStyles;a!=null&&typeof t==`string`&&_a(a,t)>=0&&(n[r+1]=Ug(n[r+1]))}function Kg(e,t,n,r){let i=e[n+1],a=t===null,o=r?Ig(i):Bg(i),s=!1;for(;o!==0&&(s===!1||a);){let n=e[o],i=e[o+1];qg(n,t)&&(s=!0,e[o+1]=r?Ug(i):zg(i)),o=r?Ig(i):Bg(i)}s&&(e[n+1]=r?zg(i):Ug(i))}function qg(e,t){return e===null||t==null||(Array.isArray(e)?e[1]:e)===t?!0:Array.isArray(e)&&typeof t==`string`?_a(e,t)>=0:!1}var Jg={textEnd:0,key:0,keyEnd:0,value:0,valueEnd:0};function Yg(e){return e.substring(Jg.key,Jg.keyEnd)}function Xg(e){return Qg(e),Zg(e,$g(e,0,Jg.textEnd))}function Zg(e,t){let n=Jg.textEnd;return n===t?-1:(t=Jg.keyEnd=e_(e,Jg.key=t,n),$g(e,t,n))}function Qg(e){Jg.key=0,Jg.keyEnd=0,Jg.value=0,Jg.valueEnd=0,Jg.textEnd=e.length}function $g(e,t,n){for(;t32;)t++;return t}function t_(e,t,n){return i_(e,t,n,!1),t_}function G(e,t){return i_(e,t,null,!0),G}function n_(e){a_(h_,r_,e,!0)}function r_(e,t){for(let n=Xg(t);n>=0;n=Zg(t,n))ha(e,Yg(t),!0)}function i_(e,t,n,r){let i=Bo(),a=Vo(),o=$o(2);if(a.firstUpdatePass&&s_(a,e,o,r),t!==Fu&&hp(i,o,t)){let s=a.data[ls()];__(a,s,i,i[11],e,i[o+1]=b_(t,n),r,o)}}function a_(e,t,n,r){let i=Vo(),a=$o(2);i.firstUpdatePass&&s_(i,null,a,r);let o=Bo();if(n!==Fu&&hp(o,a,n)){let s=i.data[ls()];if(x_(s,r)&&!o_(i,a)){let e=r?s.classesWithoutHost:s.stylesWithoutHost;e!==null&&(n=gi(e,n||``)),lg(i,s,o,n,r)}else g_(i,s,o,o[11],o[a+1],o[a+1]=m_(e,t,n),r,a)}}function o_(e,t){return t>=e.expandoStartIndex}function s_(e,t,n,r){let i=e.data;if(i[n+1]===null){let a=i[ls()],o=o_(e,n);x_(a,r)&&t===null&&!o&&(t=!1),t=c_(i,a,t,r),Wg(i,a,t,n,o,r)}}function c_(e,t,n,r){let i=$ee(e),a=r?t.residualClasses:t.residualStyles;if(i===null)(r?t.classBindings:t.styleBindings)===0&&(n=f_(null,e,t,n,r),n=p_(n,t.attrs,r),a=null);else{let o=t.directiveStylingLast;if(o===-1||e[o]!==i){if(n=f_(i,e,t,n,r),a===null){let n=l_(e,t,r);n!==void 0&&Array.isArray(n)&&(n=f_(null,e,t,n[1],r),n=p_(n,t.attrs,r),u_(e,t,r,n))}else a=d_(e,t,r)}}return a!==void 0&&(r?t.residualClasses=a:t.residualStyles=a),n}function l_(e,t,n){let r=n?t.classBindings:t.styleBindings;if(Bg(r)!==0)return e[Ig(r)]}function u_(e,t,n,r){let i=n?t.classBindings:t.styleBindings;e[Ig(i)]=r}function d_(e,t,n){let r,i=t.directiveEnd;for(let a=1+t.directiveStylingLast;a0;){let t=e[i],a=Array.isArray(t),c=a?t[1]:t,l=c===null,u=n[i+1];u===Fu&&(u=l?ba:void 0);let d=l?ga(u,r):c===r?u:void 0;if(a&&!y_(d)&&(d=ga(t,r)),y_(d)&&(s=d,o))return s;let f=e[i+1];i=o?Ig(f):Bg(f)}if(t!==null){let e=a?t.residualClasses:t.residualStyles;e!=null&&(s=ga(e,r))}return s}function y_(e){return e!==void 0}function b_(e,t){return e==null||e===``||(typeof t==`string`?e=lu(e)+t:typeof e==`object`&&(e=hi(lu(e)))),e}function x_(e,t){return!!(e.flags&(t?8:16))}function K(e,t=``){let n=Bo(),r=Vo(),i=e+27,a=r.firstCreatePass?Yf(r,i,1,t,null):r.data[i],o=S_(r,n,a,t);n[i]=o,gs()&&Sd(r,n,o,a),Wo(a,!1)}var S_=(e,t,n,r)=>(_s(!0),vu(t[11],r));function C_(e,t,n,r=``){return hp(e,Qo(),n)?t+zi(n)+r:Fu}function w_(e,t,n,r,i,a=``){let o=gp(e,Zo(),n,i);return $o(2),o?t+zi(n)+r+zi(i)+a:Fu}function T_(e,t,n,r,i,a,o,s=``){let c=_p(e,Zo(),n,i,o);return $o(3),c?t+zi(n)+r+zi(i)+a+zi(o)+s:Fu}function E_(e,t,n,r,i,a,o,s,c,l=``){let u=vp(e,Zo(),n,i,o,c);return $o(4),u?t+zi(n)+r+zi(i)+a+zi(o)+s+zi(c)+l:Fu}function q(e){return J(``,e),q}function J(e,t,n){let r=Bo(),i=C_(r,e,t,n);return i!==Fu&&k_(r,ls(),i),J}function Y(e,t,n,r,i){let a=Bo(),o=w_(a,e,t,n,r,i);return o!==Fu&&k_(a,ls(),o),Y}function D_(e,t,n,r,i,a,o){let s=Bo(),c=T_(s,e,t,n,r,i,a,o);return c!==Fu&&k_(s,ls(),c),D_}function O_(e,t,n,r,i,a,o,s,c){let l=Bo(),u=E_(l,e,t,n,r,i,a,o,s,c);return u!==Fu&&k_(l,ls(),u),O_}function k_(e,t,n){let r=mo(t,e);yu(e[11],r,n)}function A_(e,t,n){gc(t)&&(t=t());let r=Bo();return hp(r,Qo(),t)&&(Vo(),Kd(ds(),r,e,t,r[11],n)),A_}function j_(e,t){let n=gc(e);return n&&e.set(t),n}function M_(e,t){let n=Bo(),r=Vo(),i=Ho();return Dg(r,n,n[11],i,e,t),M_}var N_={};function P_(e){rd(`NgLet`);let t=Vo(),n=Bo(),r=e+27;return Wo(Yf(t,r,128,null,null),!1),vo(t,n,r,N_),P_}function F_(e){return vo(Vo(),Bo(),ls(),e),e}function I_(e){let t=_o(qo(),27+e);if(t===N_)throw new fi(314,!1);return t}function L_(e,t,n=``){return C_(Bo(),e,t,n)}function R_(e,t,n){let r=Vo();r.firstCreatePass&&z_(t,r.data,r.blueprint,so(e),n)}function z_(e,t,n,r,i){if(e=vi(e),Array.isArray(e))for(let a=0;a>20;if(Pa(e)||!e.multi){let r=new Uc(l,i,Hp,null),p=H_(c,t,i?u:u+f,d);p===-1?(fl(cl(s,o),a,c),B_(a,e,t.length),t.push(c),s.directiveStart++,s.directiveEnd++,i&&(s.providerIndexes+=1048576),n.push(r),o.push(r)):(n[p]=r,o[p]=r)}else{let p=H_(c,t,u+f,d),m=H_(c,t,u,u+f),ee=p>=0&&n[p],h=m>=0&&n[m];if(i&&!h||!i&&!ee){fl(cl(s,o),a,c);let u=nne(i?tne:ene,n.length,i,r,l,e);!i&&h&&(n[m].providerFactory=u),B_(a,e,t.length,0),t.push(c),s.directiveStart++,s.directiveEnd++,i&&(s.providerIndexes+=1048576),n.push(u),o.push(u)}else{let t=V_(n[i?m:p],l,!i&&r);B_(a,e,p>-1?p:m,t)}!i&&r&&h&&n[m].componentProviders++}}}function B_(e,t,n,r){let i=Pa(t),a=Fa(t);if(i||a){let o=(a?vi(t.useClass):t).prototype.ngOnDestroy;if(o){let a=e.destroyHooks||=[];if(!i&&t.multi){let e=a.indexOf(n);e===-1?a.push(n,[r,o]):a[e+1].push(r,o)}else a.push(n,o)}}}function V_(e,t,n){return n&&e.componentProviders++,e.multi.push(t)-1}function H_(e,t,n,r){for(let i=n;i{n.providersResolver=(t,n)=>R_(t,n?n(e):e,!1),t&&(n.viewProvidersResolver=(e,n)=>R_(e,n?n(t):t,!0))}}function G_(e,t){let n=Xo()+e,r=Bo();return r[n]===Fu?pp(r,n,t()):mp(r,n)}function K_(e,t,n){return Y_(Bo(),Xo(),e,t,n)}function q_(e,t,n,r){return X_(Bo(),Xo(),e,t,n,r)}function rne(e,t,n,r,i,a,o){return ine(Bo(),Xo(),e,t,n,r,i,a)}function J_(e,t){let n=e[t];return n===Fu?void 0:n}function Y_(e,t,n,r,i,a){let o=t+n;return hp(e,o,i)?pp(e,o+1,a?r.call(a,i):r(i)):J_(e,o+1)}function X_(e,t,n,r,i,a,o){let s=t+n;return gp(e,s,i,a)?pp(e,s+2,o?r.call(o,i,a):r(i,a)):J_(e,s+2)}function ine(e,t,n,r,i,a,o,s,c){let l=t+n;return vp(e,l,i,a,o,s)?pp(e,l+4,c?r.call(c,i,a,o,s):r(i,a,o,s)):J_(e,l+4)}function Z_(e,t){let n=Vo(),r,i=e+27;n.firstCreatePass?(r=ane(t,n.pipeRegistry),n.data[i]=r,r.onDestroy&&(n.destroyHooks??=[]).push(i,r.onDestroy)):r=n.data[i];let a=r.factory||(r.factory=sa(r.type,!0)),o=Yi(Hp);try{let e=nl(!1),t=a();return nl(e),vo(n,Bo(),i,t),t}finally{Yi(o)}}function ane(e,t){if(t)for(let n=t.length-1;n>=0;n--){let r=t[n];if(e===r.name)return r}}function Q_(e,t,n){let r=e+27,i=Bo(),a=_o(i,r);return ev(i,r)?Y_(i,Xo(),t,a.transform,n,a):a.transform(n)}function $_(e,t,n,r){let i=e+27,a=Bo(),o=_o(a,i);return ev(a,i)?X_(a,Xo(),t,o.transform,n,r,o):o.transform(n,r)}function ev(e,t){return e[1].data[t].pure}function tv(e,t){return Jf(e,t)}var one=(()=>{class e{applicationErrorHandler=x(qs);appRef=x(Rh);taskService=x(Es);ngZone=x(Ps);zonelessEnabled=x(ic);tracing=x(td,{optional:!0});zoneIsDefined=typeof Zone<`u`&&!!Zone.root.run;schedulerTickApplyArgs=[{data:{__scheduler_tick__:!0}}];subscriptions=new sr;angularZoneId=this.zoneIsDefined?this.ngZone._inner?.get(Ms):null;scheduleInRootZone=!this.zonelessEnabled&&this.zoneIsDefined&&(x(ac,{optional:!0})??!1);cancelScheduledCallback=null;useMicrotaskScheduler=!1;runningTick=!1;pendingRenderTaskId=null;constructor(){this.subscriptions.add(this.appRef.afterTick.subscribe(()=>{let e=this.taskService.add();if(!this.runningTick&&(this.cleanup(),!this.zonelessEnabled||this.appRef.includeAllTestViews)){this.taskService.remove(e);return}this.switchToMicrotaskScheduler(),this.taskService.remove(e)})),this.subscriptions.add(this.ngZone.onUnstable.subscribe(()=>{this.runningTick||this.cleanup()}))}switchToMicrotaskScheduler(){this.ngZone.runOutsideAngular(()=>{let e=this.taskService.add();this.useMicrotaskScheduler=!0,queueMicrotask(()=>{this.useMicrotaskScheduler=!1,this.taskService.remove(e)})})}notify(e){if(!this.zonelessEnabled&&e===5)return;switch(e){case 0:case 2:this.appRef.dirtyFlags|=2;break;case 3:case 4:case 5:case 1:this.appRef.dirtyFlags|=4;break;case 6:this.appRef.dirtyFlags|=2;break;case 12:this.appRef.dirtyFlags|=16;break;case 13:this.appRef.dirtyFlags|=2;break;case 11:break;default:this.appRef.dirtyFlags|=8}if(this.appRef.tracingSnapshot=this.tracing?.snapshot(this.appRef.tracingSnapshot)??null,!this.shouldScheduleTick())return;let t=this.useMicrotaskScheduler?As:ks;this.pendingRenderTaskId=this.taskService.add(),this.cancelScheduledCallback=this.scheduleInRootZone?Zone.root.run(()=>t(()=>this.tick())):this.ngZone.runOutsideAngular(()=>t(()=>this.tick()))}shouldScheduleTick(){return!(this.appRef.destroyed||this.pendingRenderTaskId!==null||this.runningTick||this.appRef._runningTick||!this.zonelessEnabled&&this.zoneIsDefined&&Zone.current.get(`isAngularZone_ID`+this.angularZoneId))}tick(){if(this.runningTick||this.appRef.destroyed)return;if(this.appRef.dirtyFlags===0){this.cleanup();return}!this.zonelessEnabled&&this.appRef.dirtyFlags&7&&(this.appRef.dirtyFlags|=1);let e=this.taskService.add();try{this.ngZone.run(()=>{this.runningTick=!0,this.appRef._tick()},void 0,this.schedulerTickApplyArgs)}catch(e){this.applicationErrorHandler(e)}finally{this.taskService.remove(e),this.cleanup()}}ngOnDestroy(){this.subscriptions.unsubscribe(),this.cleanup()}cleanup(){if(this.runningTick=!1,this.cancelScheduledCallback?.(),this.cancelScheduledCallback=null,this.pendingRenderTaskId!==null){let e=this.pendingRenderTaskId;this.pendingRenderTaskId=null,this.taskService.remove(e)}}static ɵfac=function(t){return new(t||e)};static ɵprov=kl({token:e,factory:e.ɵfac})}return e})();function sne(){return[{provide:rc,useExisting:one},{provide:Ps,useClass:Hs},{provide:ic,useValue:!0}]}function cne(){return typeof $localize<`u`&&$localize.locale||`en-US`}var nv=new Di(``,{factory:()=>x(nv,{optional:!0,skipSelf:!0})||cne()}),rv=class{destroyed=!1;listeners=null;errorHandler=x(Ks,{optional:!0});isEmitting=!1;hasNullListeners=!1;destroyRef=x(Ss);constructor(){this.destroyRef.onDestroy(()=>{this.destroyed=!0,this.listeners=null})}subscribe(e){if(this.destroyed)throw new fi(953,!1);return(this.listeners??=[]).push(e),{unsubscribe:()=>{let t=this.listeners?this.listeners.indexOf(e):-1;t>-1&&(this.isEmitting?(this.hasNullListeners=!0,this.listeners[t]=null):this.listeners.splice(t,1))}}}emit(e){if(this.destroyed){console.warn(pi(953,!1));return}if(this.listeners===null)return;this.isEmitting=!0;let t=rn(null);try{for(let t of this.listeners)try{t!==null&&t(e)}catch(e){this.errorHandler?.handleError(e)}}finally{this.hasNullListeners&&(this.hasNullListeners=!1,this.listeners&&lne(this.listeners)),rn(t),this.isEmitting=!1}}};function lne(e){let t=e.length-1;for(;t>-1;)e[t]===null&&e.splice(t,1),t--}function X(e,t){return Tn(e,t?.equal)}function Z(e){return Kn(e)}(class e extends Error{_brand;constructor(e){super(e)}static IDLE=new e(`IDLE`);static LOADING=new e(`LOADING`)});var une=e=>e;function Q(e,t){return typeof e==`function`?iv(Hn(e,une,t?.equal),t?.debugName,t?.set):iv(Hn(e.source,e.computation,e.equal),e.debugName,e.set)}function iv(e,t,n){let r=e[nn],i=e;if(n!==void 0){let t=e=>Un(r,e);i.set=e=>n(e,t),i.update=r=>n(r(Z(e)),t)}else i.set=e=>Un(r,e),i.update=e=>Wn(r,e);return i.asReadonly=Ys.bind(e),i}var av=!1;function dne(){return av}function ov(e){av=e}function sv(e,t){let n=Object.create(vc);n.value=e,n.transformFn=t?.transform;function r(){if(sn(n),n.value===_c)throw new fi(-950,null);return n.value}return r[nn]=n,r}function cv(e){return new rv}function lv(e,t){return sv(e,t)}function fne(e){return sv(_c,e)}var $=(lv.required=fne,lv);function uv(e,t){let n=Object.create(vc),r=new rv;n.value=e;function i(){return sn(n),dv(n.value),n.value}return i[nn]=n,i.asReadonly=Ys.bind(i),i.set=e=>{n.equal(n.value,e)||(jn(n,e),r.emit(e))},i.update=e=>{dv(n.value),i.set(e(n.value))},i.subscribe=r.subscribe.bind(r),i.destroyRef=r.destroyRef,i}function dv(e){if(e===_c)throw new fi(952,!1)}function fv(e,t){return uv(e,t)}function pne(e){return uv(_c,e)}var pv=(fv.required=pne,fv);function mv(e,t){return Qm(t)}function mne(e,t){return $m(t)}var hv=(mv.required=mne,mv),hne=(()=>{class e{static __NG_ELEMENT_ID__=gne}return e})();function gne(e){return _ne(Ho(),Bo(),(e&16)==16)}function _ne(e,t,n){if(ao(e)&&!n){let n=yo(e.index,t);return new Gf(n,n)}if(e.type&175){let e=t[15];return new Gf(e,t)}return null}var gv=new Di(``),vne=new Di(``);function _v(e){return!e.moduleRef}function yne(e){let t=_v(e)?e.r3Injector:e.moduleRef.injector,n=t.get(Ps);return n.run(()=>{_v(e)?e.r3Injector.resolveInjectorInitializers():e.moduleRef.resolveInjectorInitializers();let r=t.get(qs),i;if(n.runOutsideAngular(()=>{i=n.onError.subscribe({next:r})}),_v(e)){let n=()=>t.destroy(),r=e.platformInjector.get(gv);r.add(n),t.onDestroy(()=>{i.unsubscribe(),r.delete(n)})}else{let t=()=>e.moduleRef.destroy(),n=e.platformInjector.get(gv);n.add(t),e.moduleRef.onDestroy(()=>{Bh(e.allPlatformModules,e.moduleRef),i.unsubscribe(),n.delete(t)})}return xne(r,n,()=>{let n=t.get(Es),r=n.add(),i=t.get(vh);return i.runInitializers(),i.donePromise.then(()=>{if(Eg(t.get(nv,Tg)||`en-US`),!t.get(vne,!0))return _v(e)?t.get(Rh):(e.allPlatformModules.push(e.moduleRef),e.moduleRef);if(_v(e)){let n=t.get(Rh);return e.rootComponent!==void 0&&n.bootstrap(e.rootComponent),n}return bne?.(e.moduleRef,e.allPlatformModules),e.moduleRef}).finally(()=>void n.remove(r))})})}var bne;function xne(e,t,n){try{let r=n();return nh(r)?r.catch(n=>{throw t.runOutsideAngular(()=>e(n)),n}):r}catch(n){throw t.runOutsideAngular(()=>e(n)),n}}var vv=null;function Sne(e=[],t){return bs.create({name:t,providers:[{provide:Ia,useValue:`platform`},{provide:gv,useValue:new Set([()=>vv=null])},...e]})}function Cne(e=[]){if(vv)return vv;let t=Sne(e);return vv=t,Ih(),wne(t),t}function wne(e){let t=e.get(Qs,null);$a(e,()=>{t?.forEach(e=>e())})}function Tne(e){let{rootComponent:t,appProviders:n,platformProviders:r,platformRef:i}=e;Nc(bc.BootstrapApplicationStart);try{let e=i?.injector??Cne(r);return yne({r3Injector:new ah({providers:[sne(),Js,...n||[]],parent:e,debugName:``,runEnvironmentInitializers:!1}).injector,platformInjector:e,rootComponent:t})}catch(e){return Promise.reject(e)}finally{Nc(bc.BootstrapApplicationEnd)}}function yv(e){return typeof e==`boolean`?e:e!=null&&e!==`false`}var bv=Symbol(`NOT_SET`),xv=new Set,Ene={...Nn,kind:`afterRenderEffectPhase`,consumerIsAlwaysLive:!0,consumerAllowSignalWrites:!0,value:bv,cleanup:null,consumerMarkedDirty(){if(this.sequence.impl.executing){if(this.sequence.lastPhase===null||this.sequence.lastPhase(sn(r),r.value),r.signal[nn]=r,r.registerCleanupFn=e=>(r.cleanup??=new Set).add(e),this.nodes[e]=r,this.hooks[e]=e=>r.phaseFn(e)}}afterRun(){super.afterRun(),this.lastPhase=null}destroy(){if(this.onDestroyFns!==null)for(let e of this.onDestroyFns)e();super.destroy();for(let e of this.nodes)if(e)try{for(let t of e.cleanup??xv)t()}finally{yn(e)}}};function Sv(e,t){let n=t?.injector??x(bs),r=n.get(rc),i=n.get(id),a=n.get(td,null,{optional:!0});i.impl??=n.get(od);let o=e;typeof o==`function`&&(o={mixedReadWrite:e});let s=n.get(tc,null,{optional:!0}),c=new Dne(i.impl,[o.earlyRead,o.write,o.mixedReadWrite,o.read],s?.view,r,n,a?.snapshot(null));return i.impl.register(c),c}var Cv=null;function wv(){return Cv}function One(e){Cv??=e}var kne=class{},Tv=(function(e){return e[e.Format=0]=`Format`,e[e.Standalone=1]=`Standalone`,e})(Tv||{}),Ev=(function(e){return e[e.Narrow=0]=`Narrow`,e[e.Abbreviated=1]=`Abbreviated`,e[e.Wide=2]=`Wide`,e[e.Short=3]=`Short`,e})(Ev||{}),Dv=(function(e){return e[e.Short=0]=`Short`,e[e.Medium=1]=`Medium`,e[e.Long=2]=`Long`,e[e.Full=3]=`Full`,e})(Dv||{}),Ov={Decimal:0,Group:1,List:2,PercentSign:3,PlusSign:4,MinusSign:5,Exponential:6,SuperscriptingExponent:7,PerMille:8,Infinity:9,NaN:10,TimeSeparator:11,CurrencyDecimal:12,CurrencyGroup:13};function Ane(e){return xg(e)[Cg.LocaleId]}function jne(e,t,n){let r=xg(e);return Pv(Pv([r[Cg.DayPeriodsFormat],r[Cg.DayPeriodsStandalone]],t),n)}function Mne(e,t,n){let r=xg(e);return Pv(Pv([r[Cg.DaysFormat],r[Cg.DaysStandalone]],t),n)}function Nne(e,t,n){let r=xg(e);return Pv(Pv([r[Cg.MonthsFormat],r[Cg.MonthsStandalone]],t),n)}function Pne(e,t){let n=xg(e)[Cg.Eras];return Pv(n,t)}function kv(e,t){return Pv(xg(e)[Cg.DateFormat],t)}function Av(e,t){return Pv(xg(e)[Cg.TimeFormat],t)}function jv(e,t){let n=xg(e)[Cg.DateTimeFormat];return Pv(n,t)}function Mv(e,t){let n=xg(e),r=n[Cg.NumberSymbols][t];if(r===void 0){if(t===Ov.CurrencyDecimal)return n[Cg.NumberSymbols][Ov.Decimal];if(t===Ov.CurrencyGroup)return n[Cg.NumberSymbols][Ov.Group]}return r}function Nv(e){if(!e[Cg.ExtraData])throw new fi(2303,!1)}function Fne(e){let t=xg(e);return Nv(t),(t[Cg.ExtraData][2]||[]).map(e=>typeof e==`string`?Fv(e):[Fv(e[0]),Fv(e[1])])}function Ine(e,t,n){let r=xg(e);return Nv(r),Pv(Pv([r[Cg.ExtraData][0],r[Cg.ExtraData][1]],t)||[],n)||[]}function Pv(e,t){for(let n=t;n>-1;n--)if(e[n]!==void 0)return e[n];throw new fi(2304,!1)}function Fv(e){let[t,n]=e.split(`:`);return{hours:+t,minutes:+n}}var Lne=/^(\d{4,})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/,Iv=Object.create(null),Rne=/((?:[^BEGHLMOSWYZabcdhmswyz']+)|(?:'(?:[^']|'')*')|(?:G{1,5}|y{1,4}|Y{1,4}|M{1,5}|L{1,5}|w{1,2}|W{1}|d{1,2}|E{1,6}|c{1,6}|a{1,5}|b{1,5}|B{1,5}|h{1,2}|H{1,2}|m{1,2}|s{1,2}|S{1,3}|z{1,4}|Z{1,5}|O{1,4}))([\s\S]*)/,zne=256;function Bne(e,t,n,r){let i=Xne(e);Vne(t),t=Rv(n,t)||t;let a=[],o;for(;t;)if(o=Rne.exec(t),o){a=a.concat(o.slice(1));let e=a.pop();if(!e)break;t=e}else{a.push(t);break}let s=i.getTimezoneOffset();r&&(s=Yv(r,s),i=Yne(i,r));let c=``;return a.forEach(e=>{let t=qne(e);c+=t?t(i,n,s):e===`''`?`'`:e.replace(/(^'|'$)/g,``).replace(/''/g,`'`)}),c}function Vne(e){if(e.length>zne)throw new fi(2300,!1)}function Lv(e,t,n){let r=new Date(0);return r.setFullYear(e,t,n),r.setHours(0,0,0),r}function Rv(e,t){let n=Ane(e);if(Iv[n]??=Object.create(null),Iv[n][t])return Iv[n][t];let r=``;switch(t){case`shortDate`:r=kv(e,Dv.Short);break;case`mediumDate`:r=kv(e,Dv.Medium);break;case`longDate`:r=kv(e,Dv.Long);break;case`fullDate`:r=kv(e,Dv.Full);break;case`shortTime`:r=Av(e,Dv.Short);break;case`mediumTime`:r=Av(e,Dv.Medium);break;case`longTime`:r=Av(e,Dv.Long);break;case`fullTime`:r=Av(e,Dv.Full);break;case`short`:let t=Rv(e,`shortTime`),n=Rv(e,`shortDate`);r=zv(jv(e,Dv.Short),[t,n]);break;case`medium`:let i=Rv(e,`mediumTime`),a=Rv(e,`mediumDate`);r=zv(jv(e,Dv.Medium),[i,a]);break;case`long`:let o=Rv(e,`longTime`),s=Rv(e,`longDate`);r=zv(jv(e,Dv.Long),[o,s]);break;case`full`:let c=Rv(e,`fullTime`),l=Rv(e,`fullDate`);r=zv(jv(e,Dv.Full),[c,l])}return r&&(Iv[n][t]=r),r}function zv(e,t){return t&&(e=e.replace(/\{([^}]+)}/g,function(e,n){return Object.hasOwn(t,n)?t[n]:e})),e}function Bv(e,t,n=`-`,r,i){let a=``;(e<0||i&&e<=0)&&(i?e=-e+1:(e=-e,a=n));let o=String(e);for(;o.length0||s>-n)&&(s+=n),e===3)s===0&&n===-12&&(s=12);else if(e===6)return Hne(s,t);let c=Mv(o,Ov.MinusSign);return Bv(s,t,c,r,i)}}function Une(e,t){switch(e){case 0:return t.getFullYear();case 1:return t.getMonth();case 2:return t.getDate();case 3:return t.getHours();case 4:return t.getMinutes();case 5:return t.getSeconds();case 6:return t.getMilliseconds();case 7:return t.getDay();default:throw new fi(2301,!1)}}function Hv(e,t,n=Tv.Format,r=!1){return function(i,a){return Wne(i,a,e,t,n,r)}}function Wne(e,t,n,r,i,a){switch(n){case 2:return Nne(t,i,r)[e.getMonth()];case 1:return Mne(t,i,r)[e.getDay()];case 0:let n=e.getHours(),o=e.getMinutes();if(a){let e=Fne(t),a=Ine(t,i,r),s=e.findIndex(e=>{if(Array.isArray(e)){let[t,r]=e,i=n>=t.hours&&o>=t.minutes,a=n0?Math.floor(i/60):Math.ceil(i/60);switch(e){case 0:return(i>=0?`+`:``)+Bv(o,2,a)+Bv(Math.abs(i%60),2,a);case 1:return`GMT`+(i>=0?`+`:``)+Bv(o,1,a);case 2:return`GMT`+(i>=0?`+`:``)+Bv(o,2,a)+`:`+Bv(Math.abs(i%60),2,a);case 3:return r===0?`Z`:(i>=0?`+`:``)+Bv(o,2,a)+`:`+Bv(Math.abs(i%60),2,a);default:throw new fi(2310,!1)}}}var Gne=0,Wv=4;function Kne(e){let t=Lv(e,Gne,1).getDay();return Lv(e,0,1+(t<=Wv?Wv:11)-t)}function Gv(e){let t=e.getDay(),n=t===0?-3:Wv-t;return Lv(e.getFullYear(),e.getMonth(),e.getDate()+n)}function Kv(e,t=!1){return function(n,r){let i;if(t){let e=new Date(n.getFullYear(),n.getMonth(),1).getDay()-1,t=n.getDate();i=1+Math.floor((t+e)/7)}else{let e=Gv(n),t=Kne(e.getFullYear()),r=e.getTime()-t.getTime();i=1+Math.round(r/6048e5)}return Bv(i,e,Mv(r,Ov.MinusSign))}}function qv(e,t=!1){return function(n,r){return Bv(Gv(n).getFullYear(),e,Mv(r,Ov.MinusSign),t)}}var Jv=Object.create(null);function qne(e){if(Jv[e])return Jv[e];let t;switch(e){case`G`:case`GG`:case`GGG`:t=Hv(3,Ev.Abbreviated);break;case`GGGG`:t=Hv(3,Ev.Wide);break;case`GGGGG`:t=Hv(3,Ev.Narrow);break;case`y`:t=Vv(0,1,0,!1,!0);break;case`yy`:t=Vv(0,2,0,!0,!0);break;case`yyy`:t=Vv(0,3,0,!1,!0);break;case`yyyy`:t=Vv(0,4,0,!1,!0);break;case`Y`:t=qv(1);break;case`YY`:t=qv(2,!0);break;case`YYY`:t=qv(3);break;case`YYYY`:t=qv(4);break;case`M`:case`L`:t=Vv(1,1,1);break;case`MM`:case`LL`:t=Vv(1,2,1);break;case`MMM`:t=Hv(2,Ev.Abbreviated);break;case`MMMM`:t=Hv(2,Ev.Wide);break;case`MMMMM`:t=Hv(2,Ev.Narrow);break;case`LLL`:t=Hv(2,Ev.Abbreviated,Tv.Standalone);break;case`LLLL`:t=Hv(2,Ev.Wide,Tv.Standalone);break;case`LLLLL`:t=Hv(2,Ev.Narrow,Tv.Standalone);break;case`w`:t=Kv(1);break;case`ww`:t=Kv(2);break;case`W`:t=Kv(1,!0);break;case`d`:t=Vv(2,1);break;case`dd`:t=Vv(2,2);break;case`c`:case`cc`:t=Vv(7,1);break;case`ccc`:t=Hv(1,Ev.Abbreviated,Tv.Standalone);break;case`cccc`:t=Hv(1,Ev.Wide,Tv.Standalone);break;case`ccccc`:t=Hv(1,Ev.Narrow,Tv.Standalone);break;case`cccccc`:t=Hv(1,Ev.Short,Tv.Standalone);break;case`E`:case`EE`:case`EEE`:t=Hv(1,Ev.Abbreviated);break;case`EEEE`:t=Hv(1,Ev.Wide);break;case`EEEEE`:t=Hv(1,Ev.Narrow);break;case`EEEEEE`:t=Hv(1,Ev.Short);break;case`a`:case`aa`:case`aaa`:t=Hv(0,Ev.Abbreviated);break;case`aaaa`:t=Hv(0,Ev.Wide);break;case`aaaaa`:t=Hv(0,Ev.Narrow);break;case`b`:case`bb`:case`bbb`:t=Hv(0,Ev.Abbreviated,Tv.Standalone,!0);break;case`bbbb`:t=Hv(0,Ev.Wide,Tv.Standalone,!0);break;case`bbbbb`:t=Hv(0,Ev.Narrow,Tv.Standalone,!0);break;case`B`:case`BB`:case`BBB`:t=Hv(0,Ev.Abbreviated,Tv.Format,!0);break;case`BBBB`:t=Hv(0,Ev.Wide,Tv.Format,!0);break;case`BBBBB`:t=Hv(0,Ev.Narrow,Tv.Format,!0);break;case`h`:t=Vv(3,1,-12);break;case`hh`:t=Vv(3,2,-12);break;case`H`:t=Vv(3,1);break;case`HH`:t=Vv(3,2);break;case`m`:t=Vv(4,1);break;case`mm`:t=Vv(4,2);break;case`s`:t=Vv(5,1);break;case`ss`:t=Vv(5,2);break;case`S`:t=Vv(6,1);break;case`SS`:t=Vv(6,2);break;case`SSS`:t=Vv(6,3);break;case`Z`:case`ZZ`:case`ZZZ`:t=Uv(0);break;case`ZZZZZ`:t=Uv(3);break;case`O`:case`OO`:case`OOO`:case`z`:case`zz`:case`zzz`:t=Uv(1);break;case`OOOO`:case`ZZZZ`:case`zzzz`:t=Uv(2);break;default:return null}return Jv[e]=t,t}function Yv(e,t){e=e.replace(/:/g,``);let n=Date.parse(`Jan 01, 1970 00:00:00 `+e)/6e4;return isNaN(n)?t:n}function Jne(e,t){return e=new Date(e.getTime()),e.setMinutes(e.getMinutes()+t),e}function Yne(e,t,n){let r=e.getTimezoneOffset();return Jne(e,-1*(Yv(t,r)-r))}function Xne(e){if(Xv(e))return e;if(typeof e==`number`&&!isNaN(e))return new Date(e);if(typeof e==`string`){if(e=e.trim(),/^(\d{4}(-\d{1,2}(-\d{1,2})?)?)$/.test(e)){let[t,n=1,r=1]=e.split(`-`).map(e=>+e);return Lv(t,n-1,r)}let t=parseFloat(e);if(!isNaN(e-t))return new Date(t);let n;if(n=e.match(Lne))return Zne(n)}let t=new Date(e);if(!Xv(t))throw new fi(2311,!1);return t}function Zne(e){let t=new Date(0),n=0,r=0,i=e[8]?t.setUTCFullYear:t.setFullYear,a=e[8]?t.setUTCHours:t.setHours;e[9]&&(n=Number(e[9]+e[10]),r=Number(e[9]+e[11])),i.call(t,Number(e[1]),Number(e[2])-1,Number(e[3]));let o=Number(e[4]||0)-n,s=Number(e[5]||0)-r,c=Number(e[6]||0),l=Math.floor(parseFloat(`0.`+(e[7]||0))*1e3);return a.call(t,o,s,c,l),t}function Xv(e){return e instanceof Date&&!isNaN(e.valueOf())}var Zv=(()=>{class e{_viewContainerRef;_viewRef=null;ngTemplateOutletContext=null;ngTemplateOutlet=null;ngTemplateOutletInjector=null;injector=x(bs);constructor(e){this._viewContainerRef=e}ngOnChanges(e){if(this._shouldRecreateView(e)){let e=this._viewContainerRef;if(this._viewRef&&e.remove(e.indexOf(this._viewRef)),!this.ngTemplateOutlet){this._viewRef=null;return}let t=this._createContextForwardProxy();this._viewRef=e.createEmbeddedView(this.ngTemplateOutlet,t,{injector:this._getInjector()})}}_getInjector(){return this.ngTemplateOutletInjector===`outlet`?this.injector:this.ngTemplateOutletInjector??void 0}_shouldRecreateView(e){return!!e.ngTemplateOutlet||!!e.ngTemplateOutletInjector}_createContextForwardProxy(){return new Proxy({},{set:(e,t,n)=>this.ngTemplateOutletContext?Reflect.set(this.ngTemplateOutletContext,t,n):!1,get:(e,t,n)=>{if(this.ngTemplateOutletContext)return Reflect.get(this.ngTemplateOutletContext,t,n)}})}static ɵfac=function(t){return new(t||e)(Hp(Sm))};static ɵdir=dh({type:e,selectors:[[``,`ngTemplateOutlet`,``]],inputs:{ngTemplateOutletContext:`ngTemplateOutletContext`,ngTemplateOutlet:`ngTemplateOutlet`,ngTemplateOutletInjector:`ngTemplateOutletInjector`},features:[wc]})}return e})();function Qne(e,t){return new fi(2100,!1)}var $ne=`mediumDate`,ere=new Di(``),tre=new Di(``),Qv=(()=>{class e{locale;defaultTimezone;defaultOptions;constructor(e,t,n){this.locale=e,this.defaultTimezone=t,this.defaultOptions=n}transform(t,n,r,i){if(t==null||t===``||t!==t)return null;try{let e=n??this.defaultOptions?.dateFormat??$ne,a=r??this.defaultOptions?.timezone??this.defaultTimezone??void 0;return Bne(t,e,i||this.locale,a)}catch(t){throw Qne(e,t.message)}}static ɵfac=function(t){return new(t||e)(Hp(nv,16),Hp(ere,24),Hp(tre,24))};static ɵpipe=fh({name:`date`,type:e,pure:!0})}return e})(),$v=(()=>{class e{transform(e){return JSON.stringify(e,null,2)}static ɵfac=function(t){return new(t||e)};static ɵpipe=fh({name:`json`,type:e,pure:!1})}return e})();function nre(e,t){t=encodeURIComponent(t);for(let n of e.split(`;`)){let e=n.indexOf(`=`),[r,i]=e==-1?[n,``]:[n.slice(0,e),n.slice(e+1)];if(r.trim()!==t)continue;let a=i;try{a=decodeURIComponent(i)}catch{}return a.length>1&&a[0]===`"`&&a[a.length-1]===`"`&&(a=a.slice(1,-1)),a}return null}var rre=`browser`,ey=class{_doc;constructor(e){this._doc=e}manager},ty=(()=>{class e extends ey{constructor(e){super(e)}supports(e){return!0}addEventListener(e,t,n,r){return e.addEventListener(t,n,r),()=>this.removeEventListener(e,t,n,r)}removeEventListener(e,t,n,r){return e.removeEventListener(t,n,r)}static ɵfac=function(t){return new(t||e)(na(xs))};static ɵprov=bi({token:e,factory:e.ɵfac})}return e})(),ny=new Di(``),ry=(()=>{class e{_zone;_plugins;_eventNameToPlugin=new Map;constructor(e,t){this._zone=t,e.forEach(e=>{e.manager=this});let n=e.filter(e=>!(e instanceof ty));this._plugins=n.slice().reverse();let r=e.find(e=>e instanceof ty);r&&this._plugins.push(r)}addEventListener(e,t,n,r){return this._findPluginFor(t).addEventListener(e,t,n,r)}getZone(){return this._zone}_findPluginFor(e){let t=this._eventNameToPlugin.get(e);if(t)return t;if(t=this._plugins.find(t=>t.supports(e)),!t)throw new fi(-5101,!1);return this._eventNameToPlugin.set(e,t),t}static ɵfac=function(t){return new(t||e)(na(ny),na(Ps))};static ɵprov=bi({token:e,factory:e.ɵfac})}return e})(),iy=`ng-app-id`;function ay(e){for(let t of e)t.remove()}function oy(e,t){let n=t.createElement(`style`);return n.textContent=e,n}function ire(e,t,n,r){let i=e.head?.querySelectorAll(`style[${iy}="${t}"],link[${iy}="${t}"]`);if(!i||i.length===0)return!1;for(let e of i)e.removeAttribute(iy),e instanceof HTMLLinkElement?r.set(e.href.slice(e.href.lastIndexOf(`/`)+1),{usage:0,elements:[e]}):e.textContent&&n.set(e.textContent,{usage:0,elements:[e]});return!0}function sy(e,t){let n=t.createElement(`link`);return n.setAttribute(`rel`,`stylesheet`),n.setAttribute(`href`,e),n}var cy=(()=>{class e{doc;appId;nonce;inline=new Map;external=new Map;hosts=new Set;constructor(e,t,n,r={}){this.doc=e,this.appId=t,this.nonce=n,ire(e,t,this.inline,this.external)&&this.hosts.add(e.head)}addStyles(e,t){for(let t of e)this.addUsage(t,this.inline,oy);t?.forEach(e=>this.addUsage(e,this.external,sy))}removeStyles(e,t){for(let t of e)this.removeUsage(t,this.inline);t?.forEach(e=>this.removeUsage(e,this.external))}addUsage(e,t,n){let r=t.get(e);r?r.usage++:t.set(e,{usage:1,elements:[...this.hosts].map(t=>this.addElement(t,n(e,this.doc)))})}removeUsage(e,t){let n=t.get(e);n&&(n.usage--,n.usage<=0&&(ay(n.elements),t.delete(e)))}ngOnDestroy(){for(let[,{elements:e}]of[...this.inline,...this.external])ay(e);this.hosts.clear()}addHost(e){if(!this.hosts.has(e)){this.hosts.add(e);for(let[t,{elements:n}]of this.inline)n.push(this.addElement(e,oy(t,this.doc)));for(let[t,{elements:n}]of this.external)n.push(this.addElement(e,sy(t,this.doc)))}}removeHost(e){this.hosts.delete(e);for(let t of[...this.inline.values(),...this.external.values()]){let n=[];for(let r of t.elements)r.parentNode===e?r.remove():n.push(r);t.elements=n}}addElement(e,t){return this.nonce&&t.setAttribute(`nonce`,this.nonce),e.appendChild(t)}static ɵfac=function(t){return new(t||e)(na(xs),na(Xs),na(ec,8),na($s))};static ɵprov=bi({token:e,factory:e.ɵfac})}return e})(),ly={svg:`http://www.w3.org/2000/svg`,xhtml:`http://www.w3.org/1999/xhtml`,xlink:`http://www.w3.org/1999/xlink`,xml:`http://www.w3.org/XML/1998/namespace`,xmlns:`http://www.w3.org/2000/xmlns/`,math:`http://www.w3.org/1998/Math/MathML`},uy=/%COMP%/g,dy=`%COMP%`,are=`_nghost-${dy}`,ore=`_ngcontent-${dy}`,sre=!0,cre=new Di(``,{factory:()=>sre}),lre=new Di(``);function ure(e){return ore.replace(uy,e)}function dre(e){return are.replace(uy,e)}function fy(e,t){return t.map(t=>t.replace(uy,e))}var py=(()=>{class e{eventManager;sharedStylesHost;appId;removeStylesOnCompDestroy;doc;ngZone;nonce;tracingService;rendererByCompId=new Map;defaultRenderer;cssVarNamespace;constructor(e,t,n,r,i,a,o=null,s=null,c=null){this.eventManager=e,this.sharedStylesHost=t,this.appId=n,this.removeStylesOnCompDestroy=r,this.doc=i,this.ngZone=a,this.nonce=o,this.tracingService=s,this.cssVarNamespace=c??``,this.defaultRenderer=new my(e,i,a,this.tracingService,this.cssVarNamespace)}createRenderer(e,t){if(!e||!t)return this.defaultRenderer;let n=this.getOrCreateRenderer(e,t);return n instanceof vy?n.applyToHost(e):n instanceof _y&&n.applyStyles(),n}getOrCreateRenderer(e,t){let n=this.rendererByCompId,r=n.get(t.id);if(!r){let i=this.doc,a=this.ngZone,o=this.eventManager,s=this.sharedStylesHost,c=this.removeStylesOnCompDestroy,l=this.tracingService;switch(t.encapsulation){case su.Emulated:r=new vy(o,s,t,this.appId,c,i,a,l,this.cssVarNamespace);break;case su.ShadowDom:return new gy(o,e,t,i,a,this.nonce,l,this.cssVarNamespace,s);case su.ExperimentalIsolatedShadowDom:return new gy(o,e,t,i,a,this.nonce,l,this.cssVarNamespace);default:r=new _y(o,s,t,c,i,a,l,this.cssVarNamespace)}n.set(t.id,r)}return r}ngOnDestroy(){this.rendererByCompId.clear()}componentReplaced(e){this.rendererByCompId.delete(e)}static ɵfac=function(t){return new(t||e)(na(ry),na(Bp),na(Xs),na(cre),na(xs),na(Ps),na(ec),na(td,8),na(lre,8))};static ɵprov=bi({token:e,factory:e.ɵfac})}return e})(),my=class{eventManager;doc;ngZone;tracingService;cssVarNamespace;data=Object.create(null);throwOnSyntheticProps=!0;constructor(e,t,n,r,i=``){this.eventManager=e,this.doc=t,this.ngZone=n,this.tracingService=r,this.cssVarNamespace=i}destroy(){}destroyNode=null;createElement(e,t){return t?this.doc.createElementNS(ly[t]||t,e):this.doc.createElement(e)}createComment(e){return this.doc.createComment(e)}createText(e){return this.doc.createTextNode(e)}appendChild(e,t){(hy(e)?e.content:e).appendChild(t)}insertBefore(e,t,n){if(e){let r=hy(e)?e.content:e;if(n!=null&&n.parentNode!==r)throw new fi(-5106,!1);r.insertBefore(t,n)}}removeChild(e,t){t.remove()}selectRootElement(e,t){let n=typeof e==`string`?this.doc.querySelector(e):e;if(!n)throw new fi(-5104,!1);return t||(n.textContent=``),n}parentNode(e){return e.parentNode}nextSibling(e){return e.nextSibling}setAttribute(e,t,n,r){if(r){t=r+`:`+t;let i=ly[r];i?e.setAttributeNS(i,t,n):e.setAttribute(t,n)}else e.setAttribute(t,n)}removeAttribute(e,t,n){if(n){let r=ly[n];r?e.removeAttributeNS(r,t):e.removeAttribute(`${n}:${t}`)}else e.removeAttribute(t)}addClass(e,t){e.classList.add(t)}removeClass(e,t){e.classList.remove(t)}setStyle(e,t,n,r){let i=t.startsWith(`--`);i&&(t=t.replace(`%NS%`,this.cssVarNamespace)),i||r&(Iu.DashCase|Iu.Important)?e.style.setProperty(t,n,r&Iu.Important?`important`:``):e.style[t]=n}removeStyle(e,t,n){let r=t.startsWith(`--`);r&&(t=t.replace(`%NS%`,this.cssVarNamespace)),r||n&Iu.DashCase?e.style.removeProperty(t):e.style[t]=``}setProperty(e,t,n){e!=null&&(e[t]=n)}setValue(e,t){e.nodeValue=t}listen(e,t,n,r){if(typeof e==`string`&&(e=wv().getGlobalEventTarget(this.doc,e),!e))throw new fi(-5102,!1);let i=this.decoratePreventDefault(n);return this.tracingService?.wrapEventListener&&(i=this.tracingService.wrapEventListener(e,t,i)),this.eventManager.addEventListener(e,t,i,r)}decoratePreventDefault(e){return t=>{if(t===`__ngUnwrap__`)return e;e(t)===!1&&t.preventDefault()}}};function hy(e){return e.tagName===`TEMPLATE`&&e.content!==void 0}var gy=class extends my{hostEl;sharedStylesHost;shadowRoot;constructor(e,t,n,r,i,a,o,s,c){super(e,r,i,o,s),this.hostEl=t,this.sharedStylesHost=c,this.shadowRoot=t.attachShadow({mode:`open`}),this.sharedStylesHost&&this.sharedStylesHost.addHost(this.shadowRoot);let l=n.styles;l=fy(n.id,l).map(e=>e.replace(/%NS%/g,s));for(let e of l){let t=document.createElement(`style`);a&&t.setAttribute(`nonce`,a),t.textContent=e,this.shadowRoot.appendChild(t)}let u=n.getExternalStyles?.();if(u)for(let e of u){let t=sy(e,r);a&&t.setAttribute(`nonce`,a),this.shadowRoot.appendChild(t)}}nodeOrShadowRoot(e){return e===this.hostEl?this.shadowRoot:e}appendChild(e,t){return super.appendChild(this.nodeOrShadowRoot(e),t)}insertBefore(e,t,n){return super.insertBefore(this.nodeOrShadowRoot(e),t,n)}removeChild(e,t){return super.removeChild(null,t)}parentNode(e){return this.nodeOrShadowRoot(super.parentNode(this.nodeOrShadowRoot(e)))}destroy(){this.sharedStylesHost&&this.sharedStylesHost.removeHost(this.shadowRoot)}},_y=class extends my{sharedStylesHost;removeStylesOnCompDestroy;styles;styleUrls;constructor(e,t,n,r,i,a,o,s,c){super(e,i,a,o,s),this.sharedStylesHost=t,this.removeStylesOnCompDestroy=r;let l=n.styles,u=c?fy(c,l):l;this.styles=u.map(e=>e.replace(/%NS%/g,s)),this.styleUrls=n.getExternalStyles?.(c)}applyStyles(){this.sharedStylesHost.addStyles(this.styles,this.styleUrls)}destroy(){this.removeStylesOnCompDestroy&&Uu.size===0&&this.sharedStylesHost.removeStyles(this.styles,this.styleUrls)}},vy=class extends _y{contentAttr;hostAttr;constructor(e,t,n,r,i,a,o,s,c){let l=r+`-`+n.id;super(e,t,n,i,a,o,s,c,l),this.contentAttr=ure(l),this.hostAttr=dre(l)}applyToHost(e){this.applyStyles(),this.setAttribute(e,this.hostAttr,``)}createElement(e,t){let n=super.createElement(e,t);return super.setAttribute(n,this.contentAttr,``),n}},fre=class e extends kne{supportsDOMEvents=!0;static makeCurrent(){One(new e)}onAndCancel(e,t,n,r){return e.addEventListener(t,n,r),()=>{e.removeEventListener(t,n,r)}}dispatchEvent(e,t){e.dispatchEvent(t)}remove(e){e.remove()}createElement(e,t){return t||=this.getDefaultDocument(),t.createElement(e)}createHtmlDocument(){return document.implementation.createHTMLDocument(`fakeTitle`)}getDefaultDocument(){return document}isElementNode(e){return e.nodeType===Node.ELEMENT_NODE}isShadowRoot(e){return e instanceof DocumentFragment}getGlobalEventTarget(e,t){return t===`window`?window:t===`document`?e:t===`body`?e.body:null}getBaseHref(e){let t=pre();return t==null?null:mre(t)}resetBaseElement(){yy=null}getUserAgent(){return window.navigator.userAgent}getCookie(e){return nre(document.cookie,e)}},yy=null;function pre(){return yy||=document.head.querySelector(`base`),yy?yy.getAttribute(`href`):null}function mre(e){return new URL(e,document.baseURI).pathname}var by=[`alt`,`control`,`meta`,`shift`],hre={"\b":`Backspace`," ":`Tab`,"":`Delete`,"\x1B":`Escape`,Del:`Delete`,Esc:`Escape`,Left:`ArrowLeft`,Right:`ArrowRight`,Up:`ArrowUp`,Down:`ArrowDown`,Menu:`ContextMenu`,Scroll:`ScrollLock`,Win:`OS`},gre={alt:e=>e.altKey,control:e=>e.ctrlKey,meta:e=>e.metaKey,shift:e=>e.shiftKey},_re=(()=>{class e extends ey{constructor(e){super(e)}supports(t){return e.parseEventName(t)!=null}addEventListener(t,n,r,i){let a=e.parseEventName(n),o=e.eventCallback(a.fullKey,r,this.manager.getZone());return this.manager.getZone().runOutsideAngular(()=>wv().onAndCancel(t,a.domEventName,o,i))}static parseEventName(t){let n=t.toLowerCase().split(`.`),r=n.shift();if(n.length===0||r!==`keydown`&&r!==`keyup`)return null;let i=e._normalizeKey(n.pop()),a=``,o=n.indexOf(`code`);if(o>-1&&(n.splice(o,1),a=`code.`),by.forEach(e=>{let t=n.indexOf(e);t>-1&&(n.splice(t,1),a+=e+`.`)}),a+=i,n.length!=0||i.length===0)return null;let s={};return s.domEventName=r,s.fullKey=a,s}static matchEventFullKeyCode(e,t){let n=hre[e.key]||e.key,r=``;return t.indexOf(`code.`)>-1&&(n=e.code,r=`code.`),n==null||!n?!1:(n=n.toLowerCase(),n===` `?n=`space`:n===`.`&&(n=`dot`),by.forEach(t=>{if(t!==n){let n=gre[t];n(e)&&(r+=t+`.`)}}),r+=n,r===t)}static eventCallback(t,n,r){return i=>{e.matchEventFullKeyCode(i,t)&&r.runGuarded(()=>n(i))}}static _normalizeKey(e){return e===`esc`?`escape`:e}static ɵfac=function(t){return new(t||e)(na(xs))};static ɵprov=bi({token:e,factory:e.ɵfac})}return e})();async function vre(e,t,n){return Tne({rootComponent:e,...yre(t,n)})}function yre(e,t){return{platformRef:t?.platformRef,appProviders:[...wre,...e?.providers??[]],platformProviders:Cre}}function bre(){fre.makeCurrent()}function xre(){return new Ks}function Sre(){return Yl(document),document}var Cre=[{provide:$s,useValue:rre},{provide:Qs,useValue:bre,multi:!0},{provide:xs,useFactory:Sre}],wre=[{provide:Ia,useValue:`root`},{provide:Ks,useFactory:xre},{provide:ny,useClass:ty,multi:!0},{provide:ny,useClass:_re,multi:!0},py,{provide:Bp,useClass:cy},{provide:cy,useExisting:Bp},ry,{provide:op,useExisting:py},[]];function xy(e,t){let n=`\x1B[${e}m`,r=`\x1B[${t}m`;return((e,...t)=>{if(Array.isArray(e)&&`raw`in e){let i=e,a=``;for(let e=0;e{let r=new Dre({code:i,why:Sy(a.why,e),fix:Sy(a.fix,e),docs:o,cause:e.cause,sources:e.sources,data:Sy(a.data,e)},s);for(let e of t)e(r,n);return r};n[i]=s}return n}function Are(e){return t=>{let n=`${e.bold(e.red(`[${t.name}]`))} ${t.message}`,r=[];return t.fix&&r.push(`${e.dim(`fix:`)} ${t.fix}`),t.sources?.length&&r.push(`${e.dim(`sources:`)} ${t.sources.join(`, `)}`),t.docs&&r.push(`${e.dim(`see:`)} ${e.cyan(t.docs)}`),r.length===0?n:[n,...r.map((t,n)=>`${e.dim(n{e=n,t=r}),resolve:e,reject:t}}var Fre=Math.random.bind(Math),Ire=`useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict`;function Lre(e=21){let t=``,n=e;for(;n--;)t+=Ire[Fre()*64|0];return t}var Rre=6e4,wy=e=>e,zre=wy,{clearTimeout:Ty,setTimeout:Bre}=globalThis;function Vre(e,t){let{post:n,on:r,off:i=()=>{},eventNames:a=[],serialize:o=wy,deserialize:s=zre,resolver:c,bind:l=`rpc`,timeout:u=Rre,proxify:d=!0}=t,f=!1,p=new Map,m,ee;async function h(e,r,i,a){if(f)throw Error(`[birpc] rpc is closed, cannot call "${e}"`);let s={m:e,a:r,t:`q`};a&&(s.o=!0);let c=async e=>n(o(e));if(i){await c(s);return}if(m)try{await m}finally{m=void 0}let{promise:l,resolve:d,reject:h}=Pre(),g=Lre();s.i=g;let te;async function ne(n=s){return u>=0&&(te=Bre(()=>{try{if(t.onTimeoutError?.call(ee,e,r)!==!0)throw Error(`[birpc] timeout on calling "${e}"`)}catch(e){h(e)}p.delete(g)},u),typeof te==`object`&&(te=te.unref?.())),p.set(g,{resolve:d,reject:h,timeoutId:te,method:e}),await c(n),l}try{t.onRequest?await t.onRequest.call(ee,s,ne,d):await ne()}catch(e){if(t.onGeneralError?.call(ee,e)!==!0)throw e;return}finally{Ty(te),p.delete(g)}return l}let g={$call:(e,...t)=>h(e,t,!1),$callOptional:(e,...t)=>h(e,t,!1,!0),$callEvent:(e,...t)=>h(e,t,!0),$callRaw:e=>h(e.method,e.args,e.event,e.optional),$rejectPendingCalls:ne,get $closed(){return f},get $meta(){return t.meta},$close:te,$functions:e};ee=d?new Proxy({},{get(t,n){if(Object.hasOwn(g,n))return g[n];if(n===`then`&&!a.includes(`then`)&&!(`then`in e))return;let r=(...e)=>h(n,e,!0);if(a.includes(n))return r.asEvent=r,r;let i=(...e)=>h(n,e,!1);return i.asEvent=r,i}}):g;function te(e){f=!0,p.forEach(({reject:t,method:n})=>{let r=Error(`[birpc] rpc is closed, cannot call "${n}"`);if(e)return e.cause??=r,t(e);t(r)}),p.clear(),i(re)}function ne(e){let t=Array.from(p.values()).map(({method:t,reject:n})=>e?e({method:t,reject:n}):n(Error(`[birpc]: rejected pending call "${t}".`)));return p.clear(),t}async function re(r,...i){let a;try{a=s(r)}catch(e){if(t.onGeneralError?.call(ee,e)!==!0)throw e;return}if(a.t===`q`){let{m:r,a:s,o:u}=a,d,f,p=await(c?c.call(ee,r,e[r]):e[r]);if(u&&(p||=()=>void 0),!p)f=Error(`[birpc] function "${r}" not found`);else try{d=await p.apply(l===`rpc`?ee:e,s)}catch(e){f=e}if(a.i){if(f&&t.onFunctionError&&t.onFunctionError.call(ee,f,r,s)===!0)return;if(!f)try{await n(o({t:`s`,i:a.i,r:d}),...i);return}catch(e){if(f=e,t.onGeneralError?.call(ee,e,r,s)!==!0)throw e}try{await n(o({t:`s`,i:a.i,e:f}),...i)}catch(e){if(t.onGeneralError?.call(ee,e,r,s)!==!0)throw e}}}else{let{i:e,r:t,e:n}=a,r=p.get(e);r&&(Ty(r.timeoutId),n?r.reject(n):r.resolve(t)),p.delete(e)}}return m=r(re),ee}function Ey(e,t){return t.safety?t.safety:e===`static`||e===`query`||e==null?`read`:`action`}var Dy=Object.freeze({type:`object`,additionalProperties:!0});function Oy(e){let t=e[`~standard`];if(t.jsonSchema)try{return t.jsonSchema.input({target:`draft-2020-12`})}catch{return Dy}return Dy}function ky(e){if(!e||e.length===0)return{type:`object`,properties:{}};let t={},n=[];for(let r=0;rn[`arg${t}`]);if(`arg0`in n){let e=[];for(;`arg${e.length}`in n;)e.push(n[`arg${e.length}`]);return e}return Object.keys(n).length===0?[]:void 0}function jy(e,t){return Ay(e,t)??[e]}function My(e){return typeof e==`string`?`'${e}'`:new Iy().serialize(e)}var Ny=` _-,;:!?.'"()[]{}@*/\\&#%\`^+<=>|~$0123456789abcdefghijklmnopqrstuvwxyz`,Py=(function(){let e=new Uint8Array(128);for(let t=0;t<69;t++)e[Ny.charCodeAt(t)]=t+1;for(let t=65;t<=90;t++)e[t]=e[t+32];return e})();function Fy(e,t){if(e===t)return 0;let n=Math.min(e.length,t.length),r=0;for(let i=0;ia?-1:1)}return e.length===t.length?r:e.lengththis.compare(e[0],t[0])),r=`${e}{`;for(let e=0;ethis.compare(e,t)))}`}$Map(e){return this.serializeObjectEntries(`Map`,e.entries())}}for(let t of[`Error`,`RegExp`,`URL`])e.prototype[`$`+t]=function(e){return`${t}(${e})`};for(let t of[`Int8Array`,`Uint8Array`,`Uint8ClampedArray`,`Int16Array`,`Uint16Array`,`Int32Array`,`Uint32Array`,`Float32Array`,`Float64Array`])e.prototype[`$`+t]=function(e){return`${t}[${e.join(`,`)}]`};for(let t of[`BigInt64Array`,`BigUint64Array`])e.prototype[`$`+t]=function(e){return`${t}[${e.join(`n,`)}${e.length>0?`n`:``}]`};return e})(),Ly=[1779033703,-1150833019,1013904242,-1521486534,1359893119,-1694144372,528734635,1541459225],Ry=[1116352408,1899447441,-1245643825,-373957723,961987163,1508970993,-1841331548,-1424204075,-670586216,310598401,607225278,1426881987,1925078388,-2132889090,-1680079193,-1046744716,-459576895,-272742522,264347078,604807628,770255983,1249150122,1555081692,1996064986,-1740746414,-1473132947,-1341970488,-1084653625,-958395405,-710438585,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,-2117940946,-1838011259,-1564481375,-1474664885,-1035236496,-949202525,-778901479,-694614492,-200395387,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,-2067236844,-1933114872,-1866530822,-1538233109,-1090935817,-965641998],zy=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_`,By=[],Vy=class{_data=new Hy;_hash=new Hy([...Ly]);_nDataBytes=0;_minBufferSize=0;finalize(e){e&&this._append(e);let t=this._nDataBytes*8,n=this._data.sigBytes*8;return this._data.words[n>>>5]|=128<<24-n%32,this._data.words[(n+64>>>9<<4)+14]=Math.floor(t/4294967296),this._data.words[(n+64>>>9<<4)+15]=t,this._data.sigBytes=this._data.words.length*4,this._process(),this._hash}_doProcessBlock(e,t){let n=this._hash.words,r=n[0],i=n[1],a=n[2],o=n[3],s=n[4],c=n[5],l=n[6],u=n[7];for(let n=0;n<64;n++){if(n<16)By[n]=e[t+n]|0;else{let e=By[n-15],t=(e<<25|e>>>7)^(e<<14|e>>>18)^e>>>3,r=By[n-2],i=(r<<15|r>>>17)^(r<<13|r>>>19)^r>>>10;By[n]=t+By[n-7]+i+By[n-16]}let d=s&c^~s&l,f=r&i^r&a^i&a,p=(r<<30|r>>>2)^(r<<19|r>>>13)^(r<<10|r>>>22),m=(s<<26|s>>>6)^(s<<21|s>>>11)^(s<<7|s>>>25),ee=u+m+d+Ry[n]+By[n],h=p+f;u=l,l=c,c=s,s=o+ee|0,o=a,a=i,i=r,r=ee+h|0}n[0]=n[0]+r|0,n[1]=n[1]+i|0,n[2]=n[2]+a|0,n[3]=n[3]+o|0,n[4]=n[4]+s|0,n[5]=n[5]+c|0,n[6]=n[6]+l|0,n[7]=n[7]+u|0}_append(e){typeof e==`string`&&(e=Hy.fromUtf8(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes}_process(e){let t,n=this._data.sigBytes/64;n=e?Math.ceil(n):Math.max((n|0)-this._minBufferSize,0);let r=n*16,i=Math.min(r*4,this._data.sigBytes);if(r){for(let e=0;e>>2]|=(n.charCodeAt(e)&255)<<24-e%4*8;return new e(i,r)}toBase64(){let e=[];for(let t=0;t>>2]>>>24-t%4*8&255,r=this.words[t+1>>>2]>>>24-(t+1)%4*8&255,i=this.words[t+2>>>2]>>>24-(t+2)%4*8&255,a=n<<16|r<<8|i;for(let n=0;n<4&&t*8+n*6>>6*(3-n)&63))}return e.join(``)}concat(e){if(this.words[this.sigBytes>>>2]&=4294967295<<32-this.sigBytes%4*8,this.words.length=Math.ceil(this.sigBytes/4),this.sigBytes%4)for(let t=0;t>>2]>>>24-t%4*8&255;this.words[this.sigBytes+t>>>2]|=n<<24-(this.sigBytes+t)%4*8}else for(let t=0;t>>2]=e.words[t>>>2];this.sigBytes+=e.sigBytes}};function Uy(e){return new Vy().finalize(e).toBase64()}function Wy(e){return Uy(My(e))}function Gy(e){return Wy(e)}function Ky(){let e={};function t(t,...n){let r=e[t]||[];for(let e=0,t=r.length;e{e[t]=e[t]?.filter(e=>n!==e)}}function i(e,t){let n=r(e,((...e)=>(n(),t(...e))));return n}return{_listeners:e,emit:t,emitOnce:n,on:r,once:i}}var qy=/^[\w+.-]{2,}:\/\//;function Jy(e){return e.endsWith(`/`)?e:`${e}/`}function Yy(e){return(e.endsWith(`/`)?e.slice(0,-1):e)||`/`}function Xy(e,...t){let n=e;for(let e of t)e&&e!==`/`&&(n=n?Jy(n)+e.replace(/^\.?\//,``):e);return n}function Zy(e,t){if(!t||t===`/`||qy.test(e))return e;let n=Yy(t);return e.startsWith(n)?e:Xy(n,e)}function Qy(e,t){let n=e.match(qy);return t+(n?e.slice(n[0].length):e)}var $y=`useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict`;function eb(e=21){let t=``,n=e;for(;n--;)t+=$y[Math.random()*64|0];return t}var tb=Symbol.for(`immer-nothing`),nb=Symbol.for(`immer-draftable`),rb=Symbol.for(`immer-state`),ib=[function(e){return`The plugin for '${e}' has not been loaded into Immer. To enable the plugin, import and call \`enable${e}()\` when initializing your application.`},function(e){return`produce can only be called on things that are draftable: plain objects, arrays, Map, Set or classes that are marked with '[immerable]: true'. Got '${e}'`},`This object has been frozen and should not be mutated`,function(e){return`Cannot use a proxy that has been revoked. Did you pass an object from inside an immer function to an async process? `+e},`An immer producer returned a new value *and* modified its draft. Either return a new value *or* modify the draft.`,`Immer forbids circular references`,"The first or second argument to `produce` must be a function","The third argument to `produce` must be a function or undefined","First argument to `createDraft` must be a plain object, an array, or an immerable object","First argument to `finishDraft` must be a draft returned by `createDraft`",function(e){return`'current' expects a draft, got: ${e}`},`Object.defineProperty() cannot be used on an Immer draft`,`Object.setPrototypeOf() cannot be used on an Immer draft`,`Immer only supports deleting array indices`,`Immer only supports setting array indices and the 'length' property`,function(e){return`'original' expects a draft, got: ${e}`}];function ab(e,...t){{let n=ib[e],r=kb(n)?n.apply(null,t):n;throw Error(`[Immer] ${r}`)}}var ob=Object,sb=ob.getPrototypeOf,cb=`constructor`,lb=`prototype`,ub=`configurable`,db=`enumerable`,fb=`writable`,pb=`value`,mb=e=>!!e&&!!e[rb];function hb(e){return e?vb(e)||Tb(e)||!!e[nb]||!!e[cb]?.[nb]||Eb(e)||Db(e):!1}var gb=ob[lb][cb].toString(),_b=new WeakMap;function vb(e){if(!e||!Ob(e))return!1;let t=sb(e);if(t===null||t===ob[lb])return!0;let n=ob.hasOwnProperty.call(t,cb)&&t[cb];if(n===Object)return!0;if(!kb(n))return!1;let r=_b.get(n);return r===void 0&&(r=Function.toString.call(n),_b.set(n,r)),r===gb}function yb(e,t,n=!0){bb(e)===0?(n?Reflect.ownKeys(e):ob.keys(e)).forEach(n=>{t(n,e[n],e)}):e.forEach((n,r)=>t(r,n,e))}function bb(e){let t=e[rb];return t?t.type_:Tb(e)?1:Eb(e)?2:Db(e)?3:0}var xb=(e,t,n=bb(e))=>n===2?e.has(t):ob[lb].hasOwnProperty.call(e,t),Sb=(e,t,n=bb(e))=>n===2?e.get(t):e[t],Cb=(e,t,n,r=bb(e))=>{r===2?e.set(t,n):r===3?e.add(n):e[t]=n};function wb(e,t){return e===t?e!==0||1/e==1/t:e!==e&&t!==t}var Tb=Array.isArray,Eb=e=>e instanceof Map,Db=e=>e instanceof Set,Ob=e=>typeof e==`object`,kb=e=>typeof e==`function`,Ab=e=>typeof e==`boolean`;function jb(e){let t=+e;return Number.isInteger(t)&&String(t)===e}var Mb=e=>Ob(e)?e?.[rb]:null,Nb=e=>e.copy_||e.base_,Pb=e=>e.modified_?e.copy_:e.base_;function Fb(e,t){if(Eb(e))return new Map(e);if(Db(e))return new Set(e);if(Tb(e))return Array[lb].slice.call(e);let n=vb(e);if(t===!0||t===`class_only`&&!n){let t=ob.getOwnPropertyDescriptors(e);delete t[rb];let n=Reflect.ownKeys(t);for(let r=0;r1&&ob.defineProperties(e,{set:Rb,add:Rb,clear:Rb,delete:Rb}),ob.freeze(e),t&&yb(e,(e,t)=>{Ib(t,!0)},!1),e)}function Lb(){ab(2)}var Rb={[pb]:Lb};function zb(e){return e===null||!Ob(e)||ob.isFrozen(e)}var Bb=`MapSet`,Vb=`Patches`,Hb=`ArrayMethods`,Ub={};function Wb(e){let t=Ub[e];return t||ab(0,e),t}var Gb=e=>!!Ub[e];function Kb(e,t){Ub[e]||(Ub[e]=t)}var qb,Jb=()=>qb,Yb=(e,t)=>({drafts_:[],parent_:e,immer_:t,canAutoFreeze_:!0,unfinalizedDrafts_:0,handledSet_:new Set,processedForPatches_:new Set,mapSetPlugin_:Gb(Bb)?Wb(Bb):void 0,arrayMethodsPlugin_:Gb(Hb)?Wb(Hb):void 0});function Xb(e,t){t&&(e.patchPlugin_=Wb(Vb),e.patches_=[],e.inversePatches_=[],e.patchListener_=t)}function Zb(e){Qb(e),e.drafts_.forEach(ex),e.drafts_=null}function Qb(e){e===qb&&(qb=e.parent_)}var $b=e=>qb=Yb(qb,e);function ex(e){let t=e[rb];t.type_===0||t.type_===1?t.revoke_():t.revoked_=!0}function tx(e,t){t.unfinalizedDrafts_=t.drafts_.length;let n=t.drafts_[0];if(e!==void 0&&e!==n){n[rb].modified_&&(Zb(t),ab(4)),hb(e)&&(e=nx(t,e));let{patchPlugin_:r}=t;r&&r.generateReplacementPatches_(n[rb].base_,e,t)}else e=nx(t,n);return rx(t,e,!0),Zb(t),t.patches_&&t.patchListener_(t.patches_,t.inversePatches_),e===tb?void 0:e}function nx(e,t){if(zb(t))return t;let n=t[rb];if(!n)return dx(t,e.handledSet_,e);if(!ax(n,e))return t;if(!n.modified_)return n.base_;if(!n.finalized_){let{callbacks_:t}=n;if(t)for(;t.length>0;)t.pop()(e);lx(n,e)}return n.copy_}function rx(e,t,n=!1){!e.parent_&&e.immer_.autoFreeze_&&e.canAutoFreeze_&&Ib(t,n)}function ix(e){e.finalized_=!0,e.scope_.unfinalizedDrafts_--}var ax=(e,t)=>e.scope_===t,ox=[];function sx(e,t,n,r){let i=Nb(e),a=e.type_;if(r!==void 0&&Sb(i,r,a)===t){Cb(i,r,n,a);return}if(!e.draftLocations_){let t=e.draftLocations_=new Map;yb(i,(e,n)=>{if(mb(n)){let r=t.get(n)||[];r.push(e),t.set(n,r)}})}let o=e.draftLocations_.get(t)??ox;for(let e of o)Cb(i,e,n,a)}function cx(e,t,n){e.callbacks_.push(function(r){let i=t;if(!i||!ax(i,r))return;r.mapSetPlugin_?.fixSetContents(i);let a=Pb(i);sx(e,i.draft_??i,a,n),lx(i,r)})}function lx(e,t){if(e.modified_&&!e.finalized_&&(e.type_===3||e.type_===1&&e.allIndicesReassigned_||(e.assigned_?.size??0)>0)){let{patchPlugin_:n}=t;if(n){let r=n.getPath(e);r&&n.generatePatches_(e,r,t)}ix(e)}}function ux(e,t,n){let{scope_:r}=e;if(mb(n)){let i=n[rb];ax(i,r)&&i.callbacks_.push(function(){bx(e),sx(e,n,Pb(i),t)})}else hb(n)&&e.callbacks_.push(function(){let i=Nb(e);e.type_===3?i.has(n)&&dx(n,r.handledSet_,r):Sb(i,t,e.type_)===n&&r.drafts_.length>1&&(e.assigned_.get(t)??!1)===!0&&e.copy_&&dx(Sb(e.copy_,t,e.type_),r.handledSet_,r)})}function dx(e,t,n){return!n.immer_.autoFreeze_&&n.unfinalizedDrafts_<1||mb(e)||t.has(e)||!hb(e)||zb(e)?e:(t.add(e),yb(e,(r,i)=>{if(mb(i)){let t=i[rb];ax(t,n)&&(Cb(e,r,Pb(t),e.type_),ix(t))}else hb(i)&&dx(i,t,n)}),e)}function fx(e,t){let n=Tb(e),r={type_:+!!n,scope_:t?t.scope_:Jb(),modified_:!1,finalized_:!1,assigned_:void 0,parent_:t,base_:e,draft_:null,copy_:null,revoke_:null,isManual_:!1,callbacks_:void 0},i=r,a=px;n&&(i=[r],a=mx);let{revoke:o,proxy:s}=Proxy.revocable(i,a);return r.draft_=s,r.revoke_=o,[s,r]}var px={get(e,t){if(t===rb)return e;let n=e.scope_.arrayMethodsPlugin_,r=e.type_===1&&typeof t==`string`;if(r&&n?.isArrayOperationMethod(t))return n.createMethodInterceptor(e,t);let i=Nb(e);if(!xb(i,t,e.type_))return _x(e,i,t);let a=i[t];if(e.finalized_||!hb(a)||r&&e.operationMethod&&n?.isMutatingArrayMethod(e.operationMethod)&&jb(t))return a;if(a===hx(e.base_,t)||gx(e,t,a)){bx(e);let n=e.type_===1?+t:t,r=Sx(e.scope_,a,e,n);return e.copy_[n]=r}return a},has(e,t){return t in Nb(e)},ownKeys(e){return Reflect.ownKeys(Nb(e))},set(e,t,n){let r=vx(Nb(e),t);if(r?.set)return r.set.call(e.draft_,n),!0;if(!e.modified_){let r=hx(Nb(e),t),i=r?.[rb];if(i&&i.base_===n)return e.copy_[t]=n,e.assigned_.delete(t),!0;if(wb(n,r)&&(n!==void 0||xb(e.base_,t,e.type_)))return!0;bx(e),yx(e)}return e.copy_[t]===n&&(n!==void 0||xb(e.copy_,t,e.type_))||Number.isNaN(n)&&Number.isNaN(e.copy_[t])?!0:(e.copy_[t]=n,e.assigned_.set(t,!0),ux(e,t,n),!0)},deleteProperty(e,t){return bx(e),hx(e.base_,t)!==void 0||t in e.base_?(e.assigned_.set(t,!1),yx(e)):e.assigned_.delete(t),e.copy_&&delete e.copy_[t],!0},getOwnPropertyDescriptor(e,t){let n=Nb(e),r=Reflect.getOwnPropertyDescriptor(n,t);return r&&{[fb]:!0,[ub]:e.type_!==1||t!==`length`,[db]:r[db],[pb]:n[t]}},defineProperty(){ab(11)},getPrototypeOf(e){return sb(e.base_)},setPrototypeOf(){ab(12)}},mx={};for(let e in px){let t=px[e];mx[e]=function(){let e=arguments;return e[0]=e[0][0],t.apply(this,e)}}mx.deleteProperty=function(e,t){return isNaN(parseInt(t))&&ab(13),mx.set.call(this,e,t,void 0)},mx.set=function(e,t,n){return t!==`length`&&isNaN(parseInt(t))&&ab(14),px.set.call(this,e[0],t,n,e[0])};function hx(e,t){let n=e[rb];return(n?Nb(n):e)[t]}function gx(e,t,n){return e.type_!==1||!e.allIndicesReassigned_||e.assigned_?.get(t)||!hb(n)||n[rb]?!1:e.baseRefs_.has(n)}function _x(e,t,n){let r=vx(t,n);return r?pb in r?r[pb]:r.get?.call(e.draft_):void 0}function vx(e,t){if(!(t in e))return;let n=sb(e);for(;n;){let e=Object.getOwnPropertyDescriptor(n,t);if(e)return e;n=sb(n)}}function yx(e){e.modified_||(e.modified_=!0,e.parent_&&yx(e.parent_))}function bx(e){e.copy_||=(e.assigned_=new Map,Fb(e.base_,e.scope_.immer_.useStrictShallowCopy_))}var xx=class{constructor(e){this.autoFreeze_=!0,this.useStrictShallowCopy_=!1,this.useStrictIteration_=!1,this.produce=(e,t,n)=>{if(kb(e)&&!kb(t)){let n=t;t=e;let r=this;return function(e=n,...i){return r.produce(e,e=>t.call(this,e,...i))}}kb(t)||ab(6),n!==void 0&&!kb(n)&&ab(7);let r;if(hb(e)){let i=$b(this),a=Sx(i,e,void 0),o=!0;try{r=t(a),o=!1}finally{o?Zb(i):Qb(i)}return Xb(i,n),tx(r,i)}if(!e||!Ob(e)){if(r=t(e),r===void 0&&(r=e),r===tb&&(r=void 0),this.autoFreeze_&&Ib(r,!0),n){let t=[],i=[];Wb(Vb).generateReplacementPatches_(e,r,{patches_:t,inversePatches_:i}),n(t,i)}return r}ab(1,e)},this.produceWithPatches=(e,t)=>{if(kb(e))return(t,...n)=>this.produceWithPatches(t,t=>e(t,...n));let n,r;return[this.produce(e,t,(e,t)=>{n=e,r=t}),n,r]},Ab(e?.autoFreeze)&&this.setAutoFreeze(e.autoFreeze),Ab(e?.useStrictShallowCopy)&&this.setUseStrictShallowCopy(e.useStrictShallowCopy),Ab(e?.useStrictIteration)&&this.setUseStrictIteration(e.useStrictIteration)}createDraft(e){hb(e)||ab(8),mb(e)&&(e=Cx(e));let t=$b(this),n=Sx(t,e,void 0);return n[rb].isManual_=!0,Qb(t),n}finishDraft(e,t){let n=e&&e[rb];(!n||!n.isManual_)&&ab(9);let{scope_:r}=n;return Xb(r,t),tx(void 0,r)}setAutoFreeze(e){this.autoFreeze_=e}setUseStrictShallowCopy(e){this.useStrictShallowCopy_=e}setUseStrictIteration(e){this.useStrictIteration_=e}shouldUseStrictIteration(){return this.useStrictIteration_}applyPatches(e,t){let n;for(n=t.length-1;n>=0;n--){let r=t[n];if(r.path.length===0&&r.op===`replace`){e=r.value;break}}n>-1&&(t=t.slice(n+1));let r=Wb(Vb).applyPatches_;return mb(e)?r(e,t):this.produce(e,e=>r(e,t))}};function Sx(e,t,n,r){let[i,a]=Eb(t)?Wb(Bb).proxyMap_(t,n):Db(t)?Wb(Bb).proxySet_(t,n):fx(t,n);return(n?.scope_??Jb()).drafts_.push(i),a.callbacks_=n?.callbacks_??[],a.key_=r,n&&r!==void 0?cx(n,a,r):a.callbacks_.push(function(e){e.mapSetPlugin_?.fixSetContents(a);let{patchPlugin_:t}=e;a.modified_&&t&&t.generatePatches_(a,[],e)}),i}function Cx(e){return mb(e)||ab(10,e),wx(e)}function wx(e){if(!hb(e)||zb(e))return e;let t=e[rb],n,r=!0;if(t){if(!t.modified_)return t.base_;t.finalized_=!0,n=Fb(e,t.scope_.immer_.useStrictShallowCopy_),r=t.scope_.immer_.shouldUseStrictIteration()}else n=Fb(e,!0);let i=n;return Db(n)&&(n=new Set),yb(i,(e,t)=>{Cb(n,e,wx(t))},r),t&&(t.finalized_=!1),n}function Tx(){ib.push(`Sets cannot have "replace" patches.`,function(e){return`Unsupported patch operation: `+e},function(e){return`Cannot apply patch, path doesn't resolve: `+e},`Patching reserved attributes like __proto__, prototype and constructor is not allowed`);function e(n,r=[]){if(n.key_!==void 0){let e=n.parent_.copy_??n.parent_.base_,t=Mb(Sb(e,n.key_)),i=Sb(e,n.key_);if(i===void 0||i!==n.draft_&&i!==n.base_&&i!==n.copy_||t!=null&&t.base_!==n.base_)return null;let a=n.parent_.type_===3,o;if(a){let e=n.parent_;o=Array.from(e.drafts_.keys()).indexOf(n.key_)}else o=n.key_;if(!(a&&e.size>o||xb(e,o))||n.parent_.type_===1&&n.parent_.allIndicesReassigned_)return null;r.push(o)}if(n.parent_)return e(n.parent_,r);r.reverse();try{t(n.copy_,r)}catch{return null}return r}function t(e,t){let n=e;for(let e=0;e{let u=Sb(o,e,c),f=Sb(s,e,c),p=l?xb(o,e)?n:`add`:r;if(u===f&&p===n)return;let m=t.concat(e);i.push(p===r?{op:p,path:m}:{op:p,path:m,value:d(f)}),a.push(p===`add`?{op:r,path:m}:p===r?{op:`add`,path:m,value:d(u)}:{op:n,path:m,value:d(u)})})}function s(e,t,n,i){let{base_:a,copy_:o}=e,s=0;a.forEach(e=>{if(!o.has(e)){let a=t.concat([s]);n.push({op:r,path:a,value:e}),i.unshift({op:`add`,path:a,value:e})}s++}),s=0,o.forEach(e=>{if(!a.has(e)){let a=t.concat([s]);n.push({op:`add`,path:a,value:e}),i.unshift({op:r,path:a,value:e})}s++})}function c(e,t,r){let{patches_:i,inversePatches_:a}=r;i.push({op:n,path:[],value:t===tb?void 0:t}),a.push({op:n,path:[],value:e})}function l(e,t){return t.forEach(t=>{let{path:i,op:a}=t,o=e;for(let e=0;e[e,u(t)]));if(Db(e))return new Set(Array.from(e).map(u));let t=Object.create(sb(e));for(let n in e)t[n]=u(e[n]);return xb(e,nb)&&(t[nb]=e[nb]),t}function d(e){return mb(e)?u(e):e}Kb(Vb,{applyPatches_:l,generatePatches_:i,generateReplacementPatches_:c,getPath:e})}globalThis.Iterator?.from;var Ex=new xx,Dx=Ex.produce,Ox=Ex.produceWithPatches.bind(Ex),kx=Ex.applyPatches.bind(Ex),Ax=1e3;function jx(e,t){if(e.add(t),e.size>Ax){let t=e.values().next().value;t!==void 0&&e.delete(t)}}function Mx(e){let{enablePatches:t=!1}=e;t&&Tx();let n=Ky(),r=e.initialValue,i=new Set;return{on:n.on,value:()=>r,patch:(e,t=eb())=>{i.has(t)||(Tx(),r=kx(r,e),jx(i,t),n.emit(`updated`,r,void 0,t))},mutate:(e,a=eb())=>{if(!i.has(a)){if(jx(i,a),t){let[t,i]=Ox(r,e);if(t===r)return;r=t,n.emit(`updated`,r,i,a)}else{let t=Dx(r,e);if(t===r)return;r=t,n.emit(`updated`,r,void 0,a)}}},syncIds:i}}var Nx=typeof self==`object`?self:globalThis,Px=new Set([`Error`,`EvalError`,`RangeError`,`ReferenceError`,`SyntaxError`,`TypeError`,`URIError`,`AggregateError`]),Fx=new Set([`Boolean`,`Number`,`String`,`Int8Array`,`Uint8Array`,`Uint8ClampedArray`,`Int16Array`,`Uint16Array`,`Int32Array`,`Uint32Array`,`Float16Array`,`Float32Array`,`Float64Array`,`BigInt64Array`,`BigUint64Array`]);function Ix(e,t){let n=(t,n)=>(e.set(n,t),t),r=i=>{if(e.has(i))return e.get(i);let[a,o]=t[i];switch(a){case 0:case-1:return n(o,i);case 1:{let e=n([],i);for(let t of o)e.push(r(t));return e}case 2:{let e=n({},i);for(let[t,n]of o)e[r(t)]=r(n);return e}case 3:return n(new Date(o),i);case 4:{let{source:e,flags:t}=o;return n(new RegExp(e,t),i)}case 5:{let e=n(new Map,i);for(let[t,n]of o)e.set(r(t),r(n));return e}case 6:{let e=n(new Set,i);for(let t of o)e.add(r(t));return e}case 7:{let{name:e,message:t}=o,r=Px.has(e)?Nx[e]:void 0;return n(new(r??Nx.Error)(t),i)}case 8:return n(BigInt(o),i);case`BigInt`:return n(Object(BigInt(o)),i);case`ArrayBuffer`:return n(new Uint8Array(o).buffer,o);case`DataView`:{let{buffer:e}=new Uint8Array(o);return n(new DataView(e),o)}}if(typeof a==`string`&&Fx.has(a))return n(new Nx[a](o),i);throw TypeError(`unable to deserialize unsafe or unknown type: ${String(a)}`)};return r}function Lx(e){return Ix(new Map,e)(0)}var Rx=``,{toString:zx}={},{keys:Bx}=Object;function Vx(e){let t=typeof e;if(t!==`object`||!e)return[0,t];let n=zx.call(e).slice(8,-1);switch(n){case`Array`:return[1,Rx];case`Object`:return[2,Rx];case`Date`:return[3,Rx];case`RegExp`:return[4,Rx];case`Map`:return[5,Rx];case`Set`:return[6,Rx];case`DataView`:return[1,n]}return n.includes(`Array`)?[1,n]:n.includes(`Error`)?[7,n]:[2,n]}function Hx([e,t]){return e===0&&(t===`function`||t===`symbol`)}function Ux(e,t,n,r){let i=(e,t)=>{let i=r.push(e)-1;return n.set(t,i),i},a=r=>{if(n.has(r))return n.get(r);let[o,s]=Vx(r);switch(o){case 0:{let t=r;switch(s){case`bigint`:o=8,t=r.toString();break;case`function`:case`symbol`:if(e)throw TypeError(`unable to serialize ${s}`);t=null;break;case`undefined`:return i([-1],r)}return i([o,t],r)}case 1:{if(s){let e=r;return s===`DataView`?e=new Uint8Array(r.buffer):s===`ArrayBuffer`&&(e=new Uint8Array(r)),i([s,[...e]],r)}let e=[],t=i([o,e],r);for(let t of r)e.push(a(t));return t}case 2:{if(s)switch(s){case`BigInt`:return i([s,r.toString()],r);case`Boolean`:case`Number`:case`String`:return i([s,r.valueOf()],r)}if(t&&`toJSON`in r)return a(r.toJSON());let n=[],c=i([o,n],r);for(let t of Bx(r))(e||!Hx(Vx(r[t])))&&n.push([a(t),a(r[t])]);return c}case 3:return i([o,r.toISOString()],r);case 4:{let{source:e,flags:t}=r;return i([o,{source:e,flags:t}],r)}case 5:{let t=[],n=i([o,t],r);for(let[n,i]of r)(e||!(Hx(Vx(n))||Hx(Vx(i))))&&t.push([a(n),a(i)]);return n}case 6:{let t=[],n=i([o,t],r);for(let n of r)(e||!Hx(Vx(n)))&&t.push(a(n));return n}}let{message:c}=r;return i([o,{name:s,message:c}],r)};return a}function Wx(e,t={}){let n=[];return Ux(!(t.json||t.lossy),!!t.json,new Map,n)(e),n}var{parse:Gx,stringify:Kx}=JSON,qx={json:!0,lossy:!0};function Jx(e){return Lx(Gx(e))}function Yx(e){return Kx(Wx(e,qx))}function Xx(e){return Lx(e)}function Zx(e){return Yx(e)}function Qx(e){return Jx(e)}var $x=256,eS=class extends Error{name=`StreamClosedError`};function tS(e={}){let t=e.id??eb(),n=Math.max(0,e.replayWindow??0),r=Ky(),i=new AbortController,a=[],o=!1,s=0;function c(e){if(o)throw new eS(`Cannot write to a closed stream "${t}"`);s+=1,n>0&&(a.push({seq:s,chunk:e}),a.length>n&&(a.length-n===1?a.shift():a.splice(0,a.length-n))),r.emit(`chunk`,s,e)}function l(e){if(o)return;o=!0;let t=rS(e);i.abort(e),r.emit(`end`,t)}function u(){o||(o=!0,i.signal.aborted||i.abort(`stream closed`),r.emit(`end`,void 0))}function d(e){o||i.signal.aborted||i.abort(e??`aborted`)}let f=new WritableStream({write(e){c(e)},close(){u()},abort(e){l(e)}});return{id:t,signal:i.signal,get closed(){return o},get lastSeq(){return s},write:c,error:l,close:u,abort:d,writable:f,events:r,buffer:a}}function nS(e={}){let t=e.id??eb(),n=Math.max(1,e.highWaterMark??$x),r=[],i=0,a=!1,o=!1,s,c,l,u;function d(){if(c){if(r.length>0){let e=r.shift(),t=c;c=void 0,t.resolve({value:e,done:!1});return}if(a){let e=c;if(c=void 0,s){let t=Error(s.message);t.name=s.name,e.reject(t)}else e.resolve({value:void 0,done:!0})}}}function f(){if(l){for(;r.length>0;){let e=r.shift();try{l.enqueue(e)}catch{break}}if(a&&l){try{if(s){let e=Error(s.message);e.name=s.name,l.error(e)}else l.close()}catch{}l=void 0}}}function p(t,s){if(!(a||o)&&!(t<=i)){if(i=t,r.push(s),r.length>n){let t=r.length-n;r.splice(0,t),e.onOverflow?.(t)}d(),u&&f()}}function m(e){a||(a=!0,s=e,d(),u&&f())}function ee(){o||a||(o=!0,e.onCancel?.(),m(void 0))}function h(){return u||(u=new ReadableStream({start(e){l=e,f()},cancel(){ee()}}),u)}return{id:t,get cancelled(){return o},get done(){return a},get lastSeenSeq(){return i},get readable(){return h()},cancel:ee,_push:p,_end:m,[Symbol.asyncIterator](){return{next(){if(r.length>0)return Promise.resolve({value:r.shift(),done:!1});if(a){if(s){let e=Error(s.message);return e.name=s.name,Promise.reject(e)}return Promise.resolve({value:void 0,done:!0})}return new Promise((e,t)=>{c={resolve:e,reject:t}})},return(){return ee(),Promise.resolve({value:void 0,done:!0})}}}}}function rS(e){if(e instanceof Error)return{name:e.name||`Error`,message:e.message};if(typeof e==`string`)return{name:`Error`,message:e};try{return{name:`Error`,message:JSON.stringify(e)}}catch{return{name:`Error`,message:String(e)}}}var iS=128;function aS(e){return e.replace(/[^\w-]+/g,`_`).slice(0,iS)}var oS=`modulepreload`,sS=function(e,t){return new URL(e,t).href},cS={},lS=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function s(e){return import.meta.resolve?import.meta.resolve(e):new URL(e,import.meta.url).href}r=o(t.map(t=>{if(t=sS(t,n),t=s(t),t in cS)return;cS[t]=!0;let r=t.endsWith(`.css`);for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}let i=document.createElement(`link`);if(i.rel=r?`stylesheet`:oS,r||(i.as=`script`),i.crossOrigin=``,i.href=t,a&&i.setAttribute(`nonce`,a),document.head.appendChild(i),r)return new Promise((e,n)=>{i.addEventListener(`load`,e),i.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}).filter(e=>e!==void 0))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},uS=`__connection.json`,dS=`__DEVFRAME_CONNECTION__`,fS=`x-birpc-session`,pS=`__rpc-dump/index.json`,mS=`devframe:services`,hS=`devframe_otp`,gS=`devframe_auth_token`;Cy.postMessage.remoteAssetsError;var _S=class{cacheMap=new Map;options;keySerializer;constructor(e){this.options=e,this.keySerializer=e.keySerializer||(e=>Gy(e))}updateOptions(e){this.options={...this.options,...e}}cached(e,t){let n=this.cacheMap.get(e);if(n)return n.get(this.keySerializer(t))}has(e,t){return this.cacheMap.get(e)?.has(this.keySerializer(t))??!1}apply(e,t){let n=this.cacheMap.get(e.m)||new Map;n.set(this.keySerializer(e.a),t),this.cacheMap.set(e.m,n)}validate(e){return this.options.functions.includes(e)}clear(e){e?this.cacheMap.delete(e):this.cacheMap.clear()}},vS=Nre({docsBase:`https://devfra.me/errors`,codes:{DF0019:{why:e=>`RPC function "${e.name}" has \`agent\` set but \`jsonSerializable\` is \`false\`; MCP requires JSON-serializable data.`,fix:"Remove `jsonSerializable: false`, or remove `agent` to keep it RPC-only."},DF0020:{why:e=>`RPC function "${e.name}" declares \`jsonSerializable: true\` but the value at "${e.path}" is a ${e.type}.`,fix:"Either drop `jsonSerializable: true` (falls back to structured-clone) or change the value to a JSON-safe shape."},DF0021:{why:e=>`RPC function "${e.name}" is already registered`,fix:"Use the `force` parameter to overwrite an existing registration."},DF0022:{why:e=>`RPC function "${e.name}" is not registered. Use register() to add new functions.`},DF0023:{why:e=>`RPC function "${e.name}" is not registered`},DF0024:{why:e=>`Either handler or setup function must be provided for RPC function "${e.name}"`},DF0025:{why:e=>`Function "${e.name}" not found in dump store`},DF0026:{why:e=>`No dump match for "${e.name}" with args: ${e.args}`},DF0027:{why:e=>`Function "${e.name}" with type "${e.type}" cannot have dump configuration. Only "static" and "query" types support dumps.`},DF0028:{why:e=>`Function "${e.name}" with type "${e.type}" cannot use \`snapshot: true\`. Only "query" functions support this sugar; "static" functions have equivalent default behavior already.`,fix:"Remove `snapshot: true`, or change the function type to `query`."},DF0043:{why:e=>`RPC function "${e.name}" received an invalid argument at position ${e.index}: ${e.issues}`,fix:"Pass a value that satisfies the `args` schema declared for this function."},DF0044:{why:e=>`RPC function "${e.name}" returned a value that failed its \`returns\` schema: ${e.issues}`,fix:"Make the handler return a value that satisfies the `returns` schema, or relax the schema."}}});function yS(e){if(e.agent&&e.jsonSerializable===!1)throw vS.DF0019({name:e.name});e.agent&&!e.jsonSerializable&&(e.jsonSerializable=!0)}async function bS(e,t){let n=e[`~standard`].validate(t);return n instanceof Promise?await n:n}function xS(e){return e.map(e=>{let t=e.path?.map(e=>typeof e==`object`?e.key:e).join(`.`);return t?`${t}: ${e.message}`:e.message}).join(`; `)}async function SS(e,t,n){let r=n.slice();if(!t||t.length===0)return r;for(let r=0;r{n.get(t)===r&&n.delete(t)}),n.set(t,r)),await r}if(!e.__promise){let n=Promise.resolve(e.setup(t));n.catch(()=>{e.__promise===n&&(e.__promise=void 0)}),e.__promise=n}return await e.__promise}async function TS(e,t){let n=e.handler;if(!n){let r=await wS(e,t);if(!r.handler)throw vS.DF0024({name:e.name});n=r.handler}let r=e.args,i=e.returns;if(!r&&!i)return n;let a=n;return async(...t)=>{let n=await SS(e.name,r,t),o=await a(...n);return await CS(e.name,i,o)}}var ES=class{context;definitions=new Map;functions;_onChanged=[];constructor(e){this.context=e;let t=this.definitions,n=this;this.functions=new Proxy({},{get(e,r){let i=t.get(r);if(i)return TS(i,n.context)},has(e,n){return t.has(n)},getOwnPropertyDescriptor(e,n){return{value:t.get(n)?.handler,configurable:!0,enumerable:!0}},ownKeys(){return Array.from(t.keys())}})}register(e,t=!1){if(this.definitions.has(e.name)&&!t)throw vS.DF0021({name:e.name});yS(e),this.definitions.set(e.name,e),this._onChanged.forEach(t=>t(e.name))}update(e,t=!1){if(!this.definitions.has(e.name)&&!t)throw vS.DF0022({name:e.name});yS(e),this.definitions.set(e.name,e),this._onChanged.forEach(t=>t(e.name))}onChanged(e){return this._onChanged.push(e),()=>{let t=this._onChanged.indexOf(e);t!==-1&&this._onChanged.splice(t,1)}}async getHandler(e){return await TS(this.definitions.get(e),this.context)}getSchema(e){let t=this.definitions.get(e);if(!t)throw vS.DF0023({name:String(e)});return{args:t.args,returns:t.returns}}has(e){return this.definitions.has(e)}get(e){return this.definitions.get(e)}list(){return Array.from(this.definitions.keys())}};function DS(e,t=``){return JSON.stringify(e,function(e,n){let r=this,i=r==null?n:r[e];if(i===void 0){if(Array.isArray(r))throw kS(t,`undefined`,r,e);return n}return i!==null&&OS(i,r,e,t),n})}function OS(e,t,n,r){if(typeof e==`bigint`)throw kS(r,`BigInt`,t,n);if(typeof e!=`object`)return;if(e instanceof Map)throw kS(r,`Map`,t,n);if(e instanceof Set)throw kS(r,`Set`,t,n);if(e instanceof Date)throw kS(r,`Date`,t,n);if(Array.isArray(e))return;let i=Object.getPrototypeOf(e);if(i!==null&&i!==Object.prototype)throw kS(r,e.constructor?.name??`class instance`,t,n)}function kS(e,t,n,r){let i=AS(n,r);return vS.DF0020({name:e||``,type:t,path:i})}function AS(e,t){return Array.isArray(e)?`[${t}]`:t===``?``:t}var jS=`__DEVFRAME_CONNECTION_META__`,MS=`__DEVFRAME_CONNECTION_AUTH_TOKEN__`;function NS(e){let t=[()=>window?.[e],()=>globalThis?.[e],()=>parent.window?.[e]];for(let e of t)try{let t=e();if(t)return t}catch{}}function PS(){return NS(dS)}function FS(){return NS(jS)}function IS(e){if(e)return e;try{let e=localStorage.getItem(MS);if(e)return e}catch{}return NS(MS)}function LS(e){globalThis[dS]=e,globalThis[jS]={...e.connectionMeta,baseUrl:e.metaBaseUrl},e.authToken&&RS(e.authToken)}function RS(e){try{localStorage.setItem(MS,e)}catch{}globalThis[MS]=e;let t=PS();t&&(globalThis[dS]={...t,authToken:e})}function zS(e){let t=Zy(uS,e);try{return new URL(t,globalThis.location?.href).href}catch{return t}}function BS(e,t){return t&&t!==e.authToken?{...e,authToken:t}:e}function VS(){let e=PS();if(e)return BS(e,IS()??e.authToken??e.connectionMeta.authToken);let t=FS();if(t)return{connectionMeta:t,metaBaseUrl:t.baseUrl??zS(`./`),authToken:IS(t.authToken)}}async function HS(e={}){if(e.connection){let t=BS(e.connection,IS(e.authToken??e.connection.authToken??e.connection.connectionMeta.authToken));return LS(t),t}let t=Array.isArray(e.baseURL)?e.baseURL:[e.baseURL??`./`];if(e.connectionMeta){let n={connectionMeta:e.connectionMeta,metaBaseUrl:zS(t[0]??`./`),authToken:IS(e.authToken??e.connectionMeta.authToken)};return LS(n),n}let n=VS();if(n){let t=BS(n,IS(e.authToken??n.authToken??n.connectionMeta.authToken));return LS(t),t}let r=[];for(let n of t){let t=Zy(uS,n),i=zS(n);try{let n=await fetch(t);if(!n.ok)throw Error(`Failed to fetch connection meta from ${i}: ${n.status}`);let r=await n.json(),a=n.url||i,o={connectionMeta:r,metaBaseUrl:r.baseUrl?new URL(r.baseUrl,a).href:a,authToken:IS(e.authToken??r.authToken)};return LS(o),o}catch(e){r.push(e)}}throw Error(`Failed to get connection meta from ${t.join(`, `)}`,{cause:r})}var US=class extends Error{name=`DevframeConnectionError`;kind;constructor(e,t,n){super(t,n),this.kind=e}};function WS(e=hS){try{let t=globalThis.location?.hash?.replace(/^#/,``)??``;return new URLSearchParams(t).get(e)||void 0}catch{return}}function GS(e){try{let t=new URL(globalThis.location.href),n=new URLSearchParams(t.hash.replace(/^#/,``));if(!n.has(e))return;n.delete(e),t.hash=n.toString(),globalThis.history?.replaceState(globalThis.history.state,``,t.href)}catch{}}function KS(e=hS){let t=WS(e);return t&&GS(e),t}async function qS(e,t={}){let n=KS(t.param??`devframe_otp`);return n?e.isTrusted?!0:e.requestTrustWithCode(n):!1}function JS(e){let t={},n=new WeakMap,r,i=()=>(r??=e.sharedState.get(mS,{initialValue:{}}).then(e=>(t=e.value(),e.on(`updated`,e=>{t=e}),e)),r);return i(),{state:i,has:e=>e in t,keys:()=>Object.keys(t),get:r=>{let i=t[r];if(!i)return;let a=n.get(i);return a||(a={...i,rpc:e.scope(i.scope).rpc},n.set(i,a)),a}}}function YS(e){let t=new Map,n=new Map,r=new Map,i=new Set,a=e.connectionMeta.backend===`static`;function o(e,t){let n=r.get(e);return n&&typeof n==`object`&&!Array.isArray(n)&&typeof t==`object`&&!Array.isArray(t)?{...n,...t}:t}e.client.register({name:Cy.broadcast.clientStateUpdated,type:`event`,handler:(e,n,r)=>{let i=t.get(e);i&&!i.syncIds.has(r)&&i.mutate(()=>o(e,n),r)}}),e.client.register({name:Cy.broadcast.clientStatePatch,type:`event`,handler:(e,n,r)=>{let i=t.get(e);i&&!i.syncIds.has(r)&&i.patch(n,r)}});function s(t,n){let r=[];return r.push(n.on(`updated`,(n,r,i)=>{a||(r?e.callEvent(`devframe:rpc:server-state:patch`,t,r,i):e.callEvent(`devframe:rpc:server-state:set`,t,n,i))})),()=>{for(let e of r)e()}}return{keys:()=>Array.from(t.keys()),onKeyAdded(e){return i.add(e),()=>{i.delete(e)}},delete(e){let i=n.get(e);n.delete(e);let a=t.delete(e);return r.delete(e),i?.(),a},get:async(c,l)=>{if(l?.initialValue!==void 0&&r.set(c,l.initialValue),t.has(c))return t.get(c);let u=Mx({initialValue:l?.initialValue,enablePatches:!1});async function d(){if(a||e.callEvent(`devframe:rpc:server-state:subscribe`,c),l?.initialValue!==void 0){t.set(c,u);for(let e of i)e(c);return e.call(`devframe:rpc:server-state:get`,c).then(e=>{e!==void 0&&u.mutate(()=>o(c,e))}).catch(e=>{console.error(`Error getting server state`,e)}),n.set(c,s(c,u)),u}{let r=await e.call(`devframe:rpc:server-state:get`,c);u.mutate(()=>o(c,r)),t.set(c,u);for(let e of i)e(c);return n.set(c,s(c,u)),u}}return new Promise((t,n)=>{if(e.isTrusted)d().then(t,n);else{t(u);let n=!1;e.events.on(Cy.client.isTrustedUpdated,e=>{e&&!n&&(n=!0,d())})}})}}}var XS=new Map;function ZS(e=XS){let t=new Map;return{serialize:n=>{let r;return n.t===`q`?r=n.m:(r=t.get(n.i),t.delete(n.i)),!(n.t===`s`&&`e`in n)&&r&&e.get(r)?.jsonSerializable===!0?DS(n,r??``):`s:${Zx(n)}`},deserialize:e=>{let n=e.startsWith(`s:`)?Qx(e.slice(2)):JSON.parse(e);return n.t===`q`&&n.i&&n.m&&t.set(n.i,n.m),n}}}function QS(){}function $S(e){let t=e.search(/\n\n|\r\n\r\n/);if(!(t<0))return{frame:e.slice(0,t),rest:e.slice(t+(e[t]===`\r`?4:2))}}function eC(e){let t=`message`,n=[];for(let r of e.split(/\r?\n/))r.startsWith(`:`)||(r.startsWith(`event:`)?t=r.slice(6).trimStart():r.startsWith(`data:`)&&n.push(r.slice(5).replace(/^ /,``)));return{event:t,data:n}}function tC(e){let{onConnected:t=QS,onError:n=QS,onDisconnected:r=QS,definitions:i,fetch:a=globalThis.fetch.bind(globalThis)}=e,o=e.url;e.authToken&&(o=`${o}${o.includes(`?`)?`&`:`?`}${gS}=${encodeURIComponent(e.authToken)}`);let s=ZS(i),c=new AbortController,l=!1,u,d,f,p,m=new Promise((e,t)=>{f=e,p=t});m.catch(()=>{});function ee(e){l||(l=!0,p(e),n(e),r())}function h(){l||(l=!0,p(Error(`Devframe SSE stream closed`)),r())}function g(e,n){if(e===`session`){f(n),t();return}u?.(n)}async function te(e){let t=e.getReader();d=t;let n=new TextDecoder,r=``;for(;;){let{done:e,value:i}=await t.read();if(e)break;for(r+=n.decode(i,{stream:!0});;){let e=$S(r);if(!e)break;r=e.rest;let{event:t,data:n}=eC(e.frame);n.length>0&&g(t,n.join(` +`))}}h()}return(async()=>{try{let e=await a(o,{headers:{accept:`text/event-stream`},signal:c.signal});if(!e.ok||!e.body)throw Error(`Devframe SSE stream request failed: ${e.status}`);await te(e.body)}catch(e){if(c.signal.aborted){h();return}ee(e instanceof Error?e:Error(String(e)))}})(),{close:()=>{l=!0,c.abort(),d?.cancel().catch(()=>{})},on:e=>{u=e},post:async e=>{let t;try{t=await m}catch{return}if(l){n(Error(`Devframe SSE channel is closed; message dropped`));return}try{let n=await a(o,{method:`POST`,headers:{"content-type":`text/plain; charset=utf-8`,[fS]:t},body:e});if(n.status===200){let e=await n.text();e&&u?.(e);return}if(!n.ok)throw Error(`Devframe SSE POST failed: ${n.status}`)}catch(e){n(e instanceof Error?e:Error(String(e)))}},serialize:s.serialize,deserialize:s.deserialize}}function nC(e,t){let{channel:n,rpcOptions:r={}}=t;return Vre(e,{...n,timeout:-1,...r,proxify:!1})}function rC(e){let{transport:t,authToken:n,connectionMeta:r,events:i,clientRpc:a,rpcOptions:o={},callTimeout:s=0}=e,c=!1,l=`connecting`,u=null,d=Promise.withResolvers();function f(e,t=null){if(t?u=t:e===`connected`&&(u=null),e===l)return;let n=l;l=e,i.emit(Cy.client.connectionStatus,e,n)}let p=new Set;function m(e){for(let t of[...p])t.reject(e)}function ee(){return l===`disconnected`||l===`error`?new US(`connection`,`[devframe] Not connected to the devframe server`,{cause:u??void 0}):l===`unauthorized`?new US(`auth`,`[devframe] Not authorized by the devframe server`,{cause:u??void 0}):null}function h(e,t){return new Promise((n,r)=>{let a=!1,o,c={reject(e){a||(l(),i.emit(Cy.client.error,e,t),r(e))}};function l(){a=!0,p.delete(c),o&&clearTimeout(o)}p.add(c),s>0&&(o=setTimeout(()=>{c.reject(new US(`timeout`,`[devframe] RPC call "${t}" timed out after ${s}ms`))},s)),e.then(e=>{a||(l(),n(e))},e=>{if(a)return;l();let n=e instanceof Error?e:Error(String(e));i.emit(Cy.client.error,n,t),r(n)})})}let g=new Map;for(let e of r.jsonSerializableMethods??[])g.set(e,{jsonSerializable:!0});let te=e.createChannel({definitions:g,onError(e){f(`error`,e),i.emit(Cy.client.connectionError,e),m(new US(`connection`,`[devframe] Connection to the devframe server failed`,{cause:e}))},onDisconnected(){l!==`error`&&f(`disconnected`),m(new US(`connection`,`[devframe] Disconnected from the devframe server`,{cause:u??void 0}))}}),ne=nC(a.functions,{channel:te,rpcOptions:o});a.register({name:Cy.broadcast.authRevoked,type:`event`,handler:()=>{c=!1;let e=new US(`auth`,`[devframe] The devframe server revoked this client's trust`);f(`unauthorized`,e),i.emit(Cy.client.connectionError,e),m(e),i.emit(Cy.client.isTrustedUpdated,!1)}});let re=n;async function ie(e){re=e;let t=await ne.$call(`anonymous:devframe:auth`,{authToken:e,ua:navigator.userAgent,origin:location.origin});if(c=t.isTrusted,c)d.resolve(!0),f(`connected`);else{let e=new US(`auth`,`[devframe] The devframe server refused this client's credentials`);f(`unauthorized`,e),i.emit(Cy.client.connectionError,e)}return i.emit(Cy.client.isTrustedUpdated,c),t.isTrusted}async function ae(e){let t=(await ne.$call(`anonymous:devframe:auth:exchange`,{code:e,ua:navigator.userAgent,origin:location.origin}))?.authToken??null;return t&&(re=t,c=!0,d.resolve(!0),f(`connected`),i.emit(Cy.client.isTrustedUpdated,!0)),t}async function oe(e={}){await ne.$call(`anonymous:devframe:auth:request-code`,{ua:navigator.userAgent,origin:location.origin,...e.reissue?{reissue:!0}:{}})}async function se(){return c?!0:ie(re??``)}async function ce(e=6e4){if(c&&d.resolve(!0),e<=0)return d.promise;let t;try{return await Promise.race([d.promise,new Promise((n,r)=>{t=setTimeout(()=>{r(Error(`[devframe] Timeout waiting for rpc to be trusted`))},e)})]),c}finally{clearTimeout(t)}}return{transport:t,get isTrusted(){return c},get status(){return l},get connectionError(){return u},requestTrust:se,requestTrustWithToken:ie,requestTrustWithCode:ae,requestAuthCode:oe,ensureTrusted:ce,call:(...e)=>{let t=String(e[0]),n=ee();return n?(i.emit(Cy.client.error,n,t),Promise.reject(n)):h(ne.$call(...e),t)},callEvent:(...e)=>{let t=ee();if(t){i.emit(Cy.client.error,t,String(e[0]));return}return ne.$callEvent(...e)},callOptional:(...e)=>{let t=String(e[0]),n=ee();return n?(i.emit(Cy.client.error,n,t),Promise.reject(n)):h(ne.$callOptional(...e),t)},close:()=>{te.close()}}}function iC(e,t,n){let r=(()=>{try{return new URL(t,n.href)}catch{return new URL(n.href)}})();if(e&&typeof e==`object`){if(e.host!=null||e.port!=null){let t=e.host??`${r.hostname}:${e.port}`;return new URL(e.path??`/`,`${r.protocol}//${t}`).href}return new URL(e.path??``,r).href}let i=e??``;return/^https?:\/\//i.test(i)?i:new URL(i,r).href}function aC(e){let{authToken:t,connectionMeta:n,metaBaseUrl:r,events:i,clientRpc:a,rpcOptions:o={},sseOptions:s={},callTimeout:c=0}=e,l=iC(n.sse,r??`./`,location);return rC({transport:`sse`,authToken:t,connectionMeta:n,events:i,clientRpc:a,rpcOptions:o,callTimeout:c,createChannel:e=>tC({url:l,authToken:t,definitions:e.definitions,...s,onConnected(){s.onConnected?.()},onError(t){e.onError(t),s.onError?.(t)},onDisconnected(){e.onDisconnected(),s.onDisconnected?.()}})})}function oC(e){let{name:t,message:n,cause:r,...i}=e,a=r instanceof Error?r:sC(r)?oC(r):r,o=a===void 0?Error(n):Error(n,{cause:a});return o.name=t,Object.assign(o,i),o}function sC(e){return typeof e==`object`&&!!e&&typeof e.message==`string`&&typeof e.name==`string`}function cC(e){return typeof e==`object`&&!!e&&e.type===`static`&&typeof e.path==`string`}function lC(e){return typeof e==`object`&&!!e&&e.type===`query`&&typeof e.records==`object`&&e.records!==null}function uC(e){return typeof e==`object`&&!!e&&(`output`in e||`error`in e)}function dC(e){if(e.error)throw oC(e.error);return e.output}function fC(e){return e.some(e=>e!=null)}function pC(e){return typeof e==`object`&&e&&`serialization`in e&&`data`in e?e.data:e}function mC(e,t){let n=new Map,r=new Map;function i(e,t){return t===`structured-clone`&&Array.isArray(e)?Xx(e):e}function a(e,t){return i(pC(e),t)}async function o(e){n.has(e.path)||n.set(e.path,t(e.path).then(t=>a(t,e.serialization)));let r=await n.get(e.path);return uC(r)?dC(r):r}async function s(e,n){return r.has(e)||r.set(e,t(e).then(e=>a(e,n))),await r.get(e)}async function c(t,n){if(!(t in e))throw Error(`[devframe-rpc] Function "${t}" not found in dump store`);let r=e[t];if(cC(r)){if(fC(n))throw Error(`[devframe-rpc] No dump match for "${t}" with args: ${JSON.stringify(n)}`);return await o(r)}if(lC(r)){let e=Gy(n),i=r.records[e];if(i)return dC(await s(i,r.serialization));if(r.fallback)return dC(await s(r.fallback,r.serialization));throw Error(`[devframe-rpc] No dump match for "${t}" with args: ${JSON.stringify(n)}`)}if(!fC(n))return r;throw Error(`[devframe-rpc] No dump match for "${t}" with args: ${JSON.stringify(n)}`)}return{call:async(e,t)=>await c(e,t),callOptional:async(t,n)=>{if(t in e)return await c(t,n)},callEvent:async(e,t)=>{}}}async function hC(e){let t=mC(await e.fetchJsonFromBases(pS),e.fetchJsonFromBases);return{transport:`static`,isTrusted:!0,status:`connected`,connectionError:null,requestTrust:async()=>!0,requestTrustWithToken:async()=>!0,requestTrustWithCode:async()=>null,requestAuthCode:async()=>{},ensureTrusted:async()=>!0,call:(...e)=>t.call(e[0],e.slice(1)),callEvent:(...e)=>t.callEvent(e[0],e.slice(1)),callOptional:(...e)=>t.callOptional(e[0],e.slice(1)),close:()=>{}}}var gC=``;function _C(e,t){return`${e}${gC}${t}`}function vC(e){let t=new Map,n=new Map;e.client.register({name:Cy.broadcast.streamingChunk,type:`event`,handler(e,n,r,i){t.get(_C(e,n))?._push(r,i)}}),e.client.register({name:Cy.broadcast.streamingEnd,type:`event`,handler(e,n,r){let i=_C(e,n),a=t.get(i);a&&(a._end(r),t.delete(i))}}),e.client.register({name:Cy.broadcast.streamingUploadCancel,type:`event`,handler(e,t){let r=_C(e,t),i=n.get(r);i&&(i.abort(`server cancelled upload`),n.delete(r))}}),e.events.on(Cy.client.isTrustedUpdated,n=>{if(n)for(let[n,r]of t){if(r.cancelled||r.done)continue;let t=n.indexOf(gC);if(t<0)continue;let i=n.slice(0,t),a=n.slice(t+1);e.callEvent(`devframe:streaming:subscribe`,i,a,{afterSeq:r.lastSeenSeq})}});function r(n,r,i={}){let a=_C(n,r),o=t.get(a);if(o)return o;let s=nS({id:r,highWaterMark:i.highWaterMark,onOverflow(e){console.warn(`[devframe] DF0029: Stream "${n}#${r}" dropped ${e} chunk(s) after exceeding the client high-water mark.`)},onCancel(){e.callEvent(`devframe:streaming:cancel`,n,r),t.delete(a)}});if(t.set(a,s),e.isTrusted)e.callEvent(`devframe:streaming:subscribe`,n,r,{afterSeq:0});else{let i=e.events.on(Cy.client.isTrustedUpdated,o=>{o&&(i(),t.has(a)&&!s.cancelled&&!s.done&&e.callEvent(`devframe:streaming:subscribe`,n,r,{afterSeq:s.lastSeenSeq}))})}return s}function i(t,r){let i=_C(t,r),a=n.get(i);if(a)return a;let o=tS({id:r});return o.events.on(`chunk`,(n,i)=>{e.callEvent(`devframe:streaming:upload-chunk`,t,r,n,i)}),o.events.on(`end`,a=>{e.callEvent(`devframe:streaming:upload-end`,t,r,a),n.delete(i)}),n.set(i,o),o}return{subscribe:r,upload:i}}function yC(){}var bC=new Map;function xC(e){let t=e.url;e.authToken&&(t=`${t}?${gS}=${encodeURIComponent(e.authToken)}`);let n=new WebSocket(t),{onConnected:r=yC,onError:i=yC,onDisconnected:a=yC,definitions:o=bC}=e;n.addEventListener(`open`,e=>{r(e)}),n.addEventListener(`error`,e=>{let t=e instanceof Error?e:Error(e.type);i(t)}),n.addEventListener(`close`,e=>{a(e)});let s=ZS(o);return{close:()=>{n.close()},on:e=>{n.addEventListener(`message`,t=>{e(t.data)})},post:e=>{if(n.readyState===WebSocket.OPEN){n.send(e);return}if(n.readyState===WebSocket.CONNECTING){let t=()=>{i(),n.readyState===WebSocket.OPEN&&n.send(e)},r=()=>i();function i(){n.removeEventListener(`open`,t),n.removeEventListener(`close`,r)}n.addEventListener(`open`,t),n.addEventListener(`close`,r);return}i(Error(`Devframe WebSocket is not open; message dropped`))},serialize:s.serialize,deserialize:s.deserialize}}function SC(e,t,n){let r=(()=>{try{return new URL(t,n.href)}catch{return new URL(n.href)}})(),i=r.protocol===`https:`?`wss:`:`ws:`;if(e&&typeof e==`object`){if(e.host!=null||e.port!=null){let t=e.host??`${r.hostname}:${e.port}`,n=new URL(e.path??`/`,`${i}//${t}`);return n.protocol=i,n.href}let t=new URL(e.path??``,r);return t.protocol=i,t.href}if(typeof e==`number`)return`${i}//${r.hostname}:${e}`;let a=e??``;if(/^wss?:\/\//i.test(a))return a;if(/^https?:\/\//i.test(a))return Qy(a,/^https/i.test(a)?`wss://`:`ws://`);let o=new URL(a,r);return o.protocol=i,o.href}function CC(e){let{authToken:t,connectionMeta:n,metaBaseUrl:r,events:i,clientRpc:a,rpcOptions:o={},wsOptions:s={},callTimeout:c=0}=e,l=SC(n.websocket,r??`./`,location);return rC({transport:`websocket`,authToken:t,connectionMeta:n,events:i,clientRpc:a,rpcOptions:o,callTimeout:c,createChannel:e=>xC({url:l,authToken:t,definitions:e.definitions,...s,onConnected(e){s.onConnected?.(e)},onError(t){e.onError(t),s.onError?.(t)},onDisconnected(t){e.onDisconnected(),s.onDisconnected?.(t)}})})}function wC(e){return e.includes(`:`)}function TC(e,t){return wC(t)?t:`${e}:${t}`}function EC(e){return{async get(t){return(await e()).value()?.[t]},async set(t,n){(await e()).mutate(e=>{if(e===void 0)return{[t]:n};e[t]=n})},async delete(t){(await e()).mutate(e=>{e!==void 0&&delete e[t]})},async all(){return(await e()).value()??{}},async onChange(t){return(await e()).on(`updated`,e=>t(e??{}))}}}function DC(e,t,n){let r=`devframe:settings:${n}:${t}`,i;function a(){return i||=(async()=>(await e.ensureTrusted(),e.sharedState.get(r)))().catch(e=>{throw i=void 0,e}),i}return EC(a)}function OC(e,t){return{global:DC(e,t,`global`),project:DC(e,t,`project`)}}function kC(e,t){return{namespace:t,base:e,rpc:{namespace:t,register(n){if(wC(n.name))throw Error(`[devframe] Scoped client RPC registration for namespace "${t}" received an already-namespaced function name "${n.name}". Pass a bare name without a ":" separator.`);e.client.register({...n,name:`${t}:${n.name}`})},call:((n,...r)=>e.call(TC(t,n),...r)),callEvent:((n,...r)=>e.callEvent(TC(t,n),...r)),callOptional:((n,...r)=>e.callOptional(TC(t,n),...r)),sharedState:((n,r)=>e.sharedState.get(TC(t,n),r)),streaming:{subscribe:(n,r,i)=>e.streaming.subscribe(TC(t,n),r,i),upload:(n,r)=>e.streaming.upload(TC(t,n),r)}},settings:OC(e,t),scope:e.scope}}function AC(){if(typeof document<`u`){let e=document.modelContext;if(e)return e}if(typeof navigator<`u`){let e=navigator.modelContext;if(e)return e}}function jC(e,t={}){let n=t.modelContext??AC();if(!n)return()=>{};let r=n,i=new Map,a=new Map;function o(t,n){let o=aS(t.name),s=a.get(o);if(s&&s!==t.name){console.warn(`[devframe] WebMCP tool name "${o}" (from "${t.name}") collides with "${s}"; keeping the first registration.`);return}let c=new AbortController,l=Ey(t.type,n),u=r.registerTool({name:o,description:n.description,inputSchema:ky(t.args),annotations:{title:n.title??t.name,readOnlyHint:l===`read`,destructiveHint:l===`destructive`},execute:n=>MC(t,e.context,n)},{signal:c.signal});u&&`then`in u&&u.then(()=>{},()=>{}),a.set(o,t.name),i.set(t.name,()=>{c.abort(),u&&`unregister`in u&&typeof u.unregister==`function`&&u.unregister(),a.delete(o)})}function s(t){let n=t?[t]:[...e.definitions.keys()];for(let t of n){i.get(t)?.(),i.delete(t);let n=e.definitions.get(t),r=n?.agent;n&&r&&o(n,r)}}s();let c=e.onChanged(e=>s(e));return()=>{c();for(let e of i.values())e();i.clear()}}async function MC(e,t,n){try{let r=jy(n,e.args?.length);return{content:[{type:`text`,text:NC(await(await TS(e,t))(...r))}]}}catch(e){return{isError:!0,content:[{type:`text`,text:PC(e)}]}}}function NC(e){return e===void 0?`undefined`:typeof e==`string`?e:JSON.stringify(e,null,2)}function PC(e){if(!(e instanceof Error))return String(e);let t=e.cause instanceof Error?` (cause: ${e.cause.message})`:``;return`${e.name}: ${e.message}${t}`}function FC(e,t){if(t.backend===`static`)return`static`;let n=t.websocket!==void 0,r=t.sse!==void 0;if(e===`websocket`){if(!n)throw Error(`[devframe] transport: 'websocket' was requested, but this server does not advertise a WebSocket endpoint`);return`websocket`}if(e===`sse`){if(!r)throw Error(`[devframe] transport: 'sse' was requested, but this server does not advertise an SSE endpoint`);return`sse`}if(t.backend===`sse`&&r)return`sse`;if(n)return`websocket`;if(r)return`sse`;throw Error(`[devframe] This server advertises no RPC transport (backend "none"), so there is nothing to connect to. Enable the WebSocket or SSE endpoint on the server, or use its static/MCP surfaces instead.`)}async function IC(e={}){let{baseURL:t=`./`,rpcOptions:n={},cacheOptions:r=!1}=e,i=Ky(),a=Array.isArray(t)?t:[t],o=await HS(e),{connectionMeta:s,metaBaseUrl:c,authToken:l}=o,u=a[0]??`./`;try{u=new URL(`.`,c).href}catch{}let d=new _S({functions:[],...typeof e.cacheOptions==`object`?e.cacheOptions:{}}),f={rpc:void 0},p=new ES(f),m=e.webmcp===!1?void 0:jC(p),ee,h=!1,g=0,te;function ne(){g++,te=void 0,d.clear(),r===!0&&d.updateOptions({functions:[]})}r&&(p.register({name:Cy.broadcast.cacheInvalidate,type:`event`,handler:ne}),i.on(Cy.client.connectionStatus,ne),i.on(Cy.client.isTrustedUpdated,ne));async function re(e){let t=[u,...a.filter(e=>e!==u)].filter(e=>e!=null),n=[];for(let r of t)try{return await fetch(Zy(e,r)).then(t=>{if(!t.ok)throw Error(`Failed to fetch ${e} from ${r}: ${t.status}`);return t.json()})}catch(e){n.push(e)}throw Error(`Failed to load ${e} from ${t.join(`, `)}`,{cause:n})}let ie=e.callTimeout??0,ae=ie>0?ie:1/0,oe,se={authToken:l,connectionMeta:s,metaBaseUrl:c,events:i,clientRpc:p,callTimeout:e.callTimeout,rpcOptions:{...n,async onRequest(e,t,i){let a=performance.now()+ae;if(await n.onRequest?.call(this,e,t,i),r===!0&&e.i&&oe.isTrusted&&!e.m.startsWith(`anonymous:`)&&e.m!==`devframe:rpc:cacheable-functions`){function t(){if(performance.now()>=a)throw new US(`timeout`,`[devframe] RPC call "${e.m}" timed out after ${ie}ms`)}for(;!te&&(t(),!(h||oe.status!==`connected`));){let e=g;te=oe.callOptional(`devframe:rpc:cacheable-functions`).then(t=>{e===g&&d.updateOptions({functions:t??[]})}).catch(t=>{throw e===g&&(te=void 0),t}),await te}await te,t()}let o=g;if(r&&e.i&&!h&&oe.isTrusted&&d.validate(e.m)){if(d.has(e.m,e.a))return i(d.cached(e.m,e.a));let n=await t(e);o===g&&!h&&d.apply(e,n)}else await t(e)}}},ce=FC(e.transport??`auto`,s);oe=ce===`static`?await hC({fetchJsonFromBases:re}):ce===`sse`?aC({...se,sseOptions:e.sseOptions}):CC({...se,wsOptions:e.wsOptions});let le;try{le=new BroadcastChannel(`devframe-auth`)}catch{}let ue,de=!1;function fe(e){return((...t)=>de||!ue?e(...t):ue.then(()=>e(...t)))}function pe(){h=!0,ne();try{ee?.(),m?.()}finally{try{le?.close()}finally{oe.close?.()}}}let me={events:i,get isTrusted(){return oe.isTrusted},get status(){return oe.status},get connectionError(){return oe.connectionError},get transport(){return oe.transport??ce},get connection(){return o},connectionMeta:s,ensureTrusted:oe.ensureTrusted,requestTrust:oe.requestTrust,requestTrustWithToken:async e=>(RS(e),o={...o,authToken:e},oe.requestTrustWithToken(e)),requestTrustWithCode:async e=>{let t=await oe.requestTrustWithCode(e);if(!t)return!1;RS(t),o={...o,authToken:t};try{le?.postMessage({type:`auth-update`,authToken:t})}catch{}return!0},requestAuthCode:e=>oe.requestAuthCode(e),call:fe(oe.call),callEvent:fe(oe.callEvent),callOptional:fe(oe.callOptional),client:p,sharedState:void 0,services:void 0,streaming:void 0,cacheManager:d,scope:void 0,close:pe};me.sharedState=YS(me),me.streaming=vC(me),me.services=JS(me);let he=new Map;me.scope=(e=>{if(!e)return me;let t=he.get(e);return t||(t=kC(me,e),he.set(e,t)),t}),f.rpc=me;function ge(){try{return typeof window<`u`&&window.self===window.top}catch{return!1}}async function _e(){if(e.simpleAuth!==!1&&ge()&&typeof globalThis.prompt==`function`)for(await me.requestAuthCode().catch(()=>{});!me.isTrusted;){let e=globalThis.prompt(`devframe: enter the authentication code shown in your terminal`);if(e==null)return;let t=e.trim();if(t&&await me.requestTrustWithCode(t))return}}async function ve(){let t=await oe.requestTrust(),n=e.otpParam??`devframe_otp`,r=n?await qS(me,{param:n}):!1;t||r||me.isTrusted||await _e()}return ue=ve().then(()=>{de=!0},()=>{de=!0}),s.mcp&&lS(async()=>{let{setupBrowserAgentRpcBridge:e}=await import(`./browser-agent-rpc-KH4HHvHf-aJiGMZYV.js`);return{setupBrowserAgentRpcBridge:e}},[],import.meta.url).then(({setupBrowserAgentRpcBridge:e})=>{h||(ee=e(me))}).catch(()=>{}),le&&(le.onmessage=e=>{e.data?.type===`auth-update`&&e.data.authToken&&me.requestTrustWithToken(e.data.authToken)}),me}var LC=IC,RC=[`components`,`injectors`,`signals`,`ngrx`,`tanstackQuery`,`forms`,`router`,`pipes`,`http`,`analog`,`capacitor`,`errors`,`plugins`,`performance`,`build`],zC=[`angular`,`ngrx`,`analog`,`angular-native`,`nativescript`,`capacitor`];function BC(e){return`pangular:${e}`}var VC=[`forms`,`router`,`ngrx`,`http`,`analog`,`components`,`tanstackQuery`,`plugins`],HC={refreshMs:{default:3e3,min:500,max:8e3},navigations:{default:50,min:5,max:500},formTimeline:{default:200,min:10,max:2e3},httpCalls:{default:200,min:10,max:2e3},changeLog:{default:200,min:10,max:2e3},cdCycles:{default:200,min:10,max:2e3},cdSlowMs:{default:16,min:1,max:1e3},capacitorCalls:{default:200,min:10,max:2e3},idleAfterMs:{default:6e4,min:0,max:6e5}},UC={"opted-out":`the request sets transferCache: false`,post:`POST requests are left out unless includePostRequests is set`,method:`only GET, HEAD and POST requests are cached`,"auth-headers":`it sends an Authorization, Proxy-Authorization or Cookie header`,credentials:`it sends credentials (withCredentials or credentials: include/same-origin)`,"no-cache-request":`the request asks for no-store, no-cache or private`,"no-cache-response":`the response has Cache-Control no-store, no-cache or private`,"set-cookie":`the response sets a cookie`,error:`failed responses are not stored`,mocked:`a fault rule answered before the transfer cache ran`,filter:`the transferCache filter passed to withPangular() left it out`,"cache-off-or-filter":`the transfer cache is off, or its filter (or another withHttpTransferCacheOptions setting) left it out`},WC=[[0,`Network error (offline)`],[200,`OK`],[201,`Created`],[202,`Accepted`],[203,`Non-Authoritative Information`],[204,`No Content`],[205,`Reset Content`],[206,`Partial Content`],[207,`Multi-Status`],[208,`Already Reported`],[226,`IM Used`],[300,`Multiple Choices`],[301,`Moved Permanently`],[302,`Found`],[303,`See Other`],[304,`Not Modified`],[307,`Temporary Redirect`],[308,`Permanent Redirect`],[400,`Bad Request`],[401,`Unauthorized`],[402,`Payment Required`],[403,`Forbidden`],[404,`Not Found`],[405,`Method Not Allowed`],[406,`Not Acceptable`],[407,`Proxy Authentication Required`],[408,`Request Timeout`],[409,`Conflict`],[410,`Gone`],[411,`Length Required`],[412,`Precondition Failed`],[413,`Content Too Large`],[414,`URI Too Long`],[415,`Unsupported Media Type`],[416,`Range Not Satisfiable`],[417,`Expectation Failed`],[418,`I'm a Teapot`],[421,`Misdirected Request`],[422,`Unprocessable Content`],[423,`Locked`],[424,`Failed Dependency`],[425,`Too Early`],[426,`Upgrade Required`],[428,`Precondition Required`],[429,`Too Many Requests`],[431,`Request Header Fields Too Large`],[451,`Unavailable For Legal Reasons`],[499,`Client Closed Request`],[500,`Internal Server Error`],[501,`Not Implemented`],[502,`Bad Gateway`],[503,`Service Unavailable`],[504,`Gateway Timeout`],[505,`HTTP Version Not Supported`],[506,`Variant Also Negotiates`],[507,`Insufficient Storage`],[508,`Loop Detected`],[510,`Not Extended`],[511,`Network Authentication Required`],[520,`Web Server Returned an Unknown Error`],[521,`Web Server Is Down`],[522,`Connection Timed Out`],[523,`Origin Is Unreachable`],[524,`A Timeout Occurred`]];function GC(e){return WC.some(([t])=>t===e)}var KC=/^[a-z][a-z0-9-]{0,39}$/;function qC(e,t){let n=t.plugins?.[e],r=t.inspectors.plugins&&KC.test(e)&&(n?.enabled??!0);return{enabled:r,tools:r&&t.agent.tools.plugins&&(n?.tools??!0),actions:r&&t.actions.plugins&&(n?.actions??!0)}}var JC=`pangular`,YC={mod:`Mod`,ctrl:`Ctrl`,control:`Ctrl`,meta:`Meta`,cmd:`Meta`,command:`Meta`,alt:`Alt`,option:`Alt`,opt:`Alt`,shift:`Shift`},XC=[`Mod`,`Ctrl`,`Meta`,`Alt`,`Shift`];function ZC(e){if(typeof e!=`string`||e.length>40)return;let t=e.split(`+`).map(e=>e.trim());if(t.some(e=>!e))return;let n=new Set,r;for(let e of t){let t=YC[e.toLowerCase()];if(t){if(n.has(t))return;n.add(t);continue}if(r!==void 0)return;if(/^[a-z0-9]$/i.test(e))r=e.toUpperCase();else if(/^f([1-9]|1[0-2])$/i.test(e))r=e.toUpperCase();else return}if(r&&[...n].some(e=>e!==`Shift`)&&!(n.has(`Mod`)&&(n.has(`Ctrl`)||n.has(`Meta`))))return[...XC.filter(e=>n.has(e)),r].join(`+`)}function QC(e,t,n){let r=t.split(`+`),i=r.pop(),a=new Set(r),o=a.has(`Ctrl`)||a.has(`Mod`)&&!n,s=a.has(`Meta`)||a.has(`Mod`)&&n;if(e.ctrlKey!==o||e.metaKey!==s||e.altKey!==a.has(`Alt`)||e.shiftKey!==a.has(`Shift`))return!1;if(/^F\d+$/.test(i))return e.key.toUpperCase()===i;let c=/^\d$/.test(i)?`Digit${i}`:`Key${i}`;return e.code?e.code===c:e.key.toUpperCase()===i}function $C(e,t){if(!t)return e.replace(/^Mod\b/,`Ctrl`);let n={Mod:`⌘`,Meta:`⌘`,Ctrl:`⌃`,Alt:`⌥`,Shift:`⇧`};return e.split(`+`).map(e=>n[e]??e).join(``)}var ew=[{id:`dashboard`,label:`Dashboard`},{id:`timeline`,label:`Timeline`},{id:`audit`,label:`Audit`},{id:`analog`,label:`Analog`,inspector:`analog`},{id:`components`,label:`Components`,inspector:`components`},{id:`routes`,label:`Routes`,inspector:`router`},{id:`signals`,label:`Signals`,inspector:`signals`},{id:`injectors`,label:`Injectors`,inspector:`injectors`},{id:`store`,label:`Store`,inspector:`ngrx`},{id:`queries`,label:`Queries`,inspector:`tanstackQuery`},{id:`forms`,label:`Forms`,inspector:`forms`},{id:`pipes`,label:`Pipes`,inspector:`pipes`},{id:`network`,label:`SSR & HTTP`,inspector:`http`},{id:`errors`,label:`Errors`,inspector:`errors`},{id:`performance`,label:`Performance`,inspector:`performance`},{id:`build`,label:`Build`,inspector:`build`},{id:`capacitor`,label:`Capacitor`,inspector:`capacitor`},{id:`plugins`,label:`Plugins`,inspector:`plugins`}],tw=1e4;function nw(e){return ew.filter(t=>!(`inspector`in t)||e.inspectors[t.inspector])}var rw={components:`a component instance, by its id in the component tree`,injectors:`a component's element injector, by the component's id`,signals:`a component's signal graph, by the component's id`,forms:`a form, by its id`},iw=200;function aw(e){let t=new URLSearchParams({tab:e.tab});return e.id&&t.set(`id`,e.id),e.page&&t.set(`page`,e.page),`#${t.toString()}`}function ow(e){let t=new URLSearchParams(e.replace(/^#/,``)),n=e=>{let n=t.get(e)?.trim();return n&&n.length<=iw?n:void 0},r=n(`tab`);if(!r)return null;let i=n(`id`),a=n(`page`);return{tab:r,...i?{id:i}:{},...a?{page:a}:{}}}var sw=[{id:`settings`,title:`Open settings`,group:`Go to`,keywords:`preferences tabs`},{id:`pick-component`,title:`Pick component on page`,group:`Actions`,keywords:`select inspect element`,inspector:`components`},{id:`cd-record-start`,title:`Start recording change detection`,group:`Actions`,keywords:`profiler cycles`,inspector:`components`},{id:`cd-record-stop`,title:`Stop recording change detection`,group:`Actions`,keywords:`profiler cycles`,inspector:`components`},{id:`cd-clear`,title:`Clear change detection recording`,group:`Actions`,keywords:`reset recordings cycles`,inspector:`components`},{id:`theme:system`,title:`Theme: follow the system`,group:`Theme`,keywords:`auto`},{id:`theme:light`,title:`Theme: light`,group:`Theme`},{id:`theme:dark`,title:`Theme: dark`,group:`Theme`},{id:`dock:float`,title:`Popup: float`,group:`Popup`,keywords:`dock`,popupOnly:!0},{id:`dock:bottom`,title:`Popup: dock to the bottom`,group:`Popup`,keywords:`dock`,popupOnly:!0},{id:`dock:right`,title:`Popup: dock to the right`,group:`Popup`,keywords:`dock`,popupOnly:!0},{id:`dock:reset-size`,title:`Popup: reset the docked size`,group:`Popup`,keywords:`splitter resize height width`,popupOnly:!0},{id:`popout`,title:`Popup: open in its own window`,group:`Popup`,keywords:`pop out detach new window`,popupOnly:!0},{id:`popout:return`,title:`Popup: back into the page`,group:`Popup`,keywords:`pop in attach dock window`,popupOnly:!0}];function cw(e){let t=nw(e).map(e=>({id:`tab:${e.id}`,title:`Go to ${e.label}`,group:`Go to`,keywords:`tab open`})),n=sw.filter(t=>!t.inspector||e.inspectors[t.inspector]).map(({inspector:e,...t})=>t);return[...t,...n]}function lw(e){return e&&typeof e==`object`&&!Array.isArray(e)?e:{}}var uw=Object.freeze({minLength:24,threshold:4.5}),dw={min:16,max:512},fw={min:2,max:6};function pw(e){return typeof e==`number`&&Number.isInteger(e)&&e>=dw.min&&e<=dw.max}function mw(e){return typeof e==`number`&&Number.isFinite(e)&&e>=fw.min&&e<=fw.max}function hw(e){if(e===!0)return{...uw};if(!e||typeof e!=`object`||Array.isArray(e))return;let{minLength:t,threshold:n}=e;return{minLength:pw(t)?t:uw.minLength,threshold:mw(n)?n:uw.threshold}}function gw(e){let t=hw(e);return t?{entropy:t}:{}}function _w(e,t){return typeof e==`boolean`?e:t}var vw=100,yw=100;function bw(e){if(!Array.isArray(e))return[];let t=e.filter(e=>typeof e==`string`).map(e=>e.trim()).filter(e=>e&&e.length<=yw);return[...new Set(t)].slice(0,vw)}function xw(e,t){let{default:n,min:r,max:i}=HC[t];return typeof e!=`number`||!Number.isFinite(e)?n:Math.min(i,Math.max(r,Math.round(e)))}function Sw(e,t){return Object.fromEntries(e.map(e=>[e,t(e)]))}function Cw(e){let t=lw(e),n=lw(t.agent),r=lw(t.inspectors),i=lw(n.tools),a=lw(t.actions),o=_w(t.actions,!0),s=lw(t.redaction),c=lw(t.limits),l=Sw(RC,e=>_w(r[e],!0));return{inspectors:l,agent:{readOnly:_w(n.readOnly,!1),tools:Sw(RC,e=>l[e]&&_w(i[e],!0)),browserTools:_w(n.browserTools,!1)},actions:Sw(VC,e=>l[e]&&_w(a[e],o)),redaction:{secretNames:bw(s.secretNames),unmask:bw(s.unmask),...gw(s.entropy)},limits:Object.fromEntries(Object.keys(HC).map(e=>[e,xw(c[e],e)])),popup:{hotkey:Aw(lw(t.popup).hotkey)},plugins:kw(t.plugins),lint:{rules:Dw(t.lint)},analog:Tw(t.analog),ngrx:{trace:_w(lw(t.ngrx).trace,!1)}}}var ww=500;function Tw(e){let t=lw(e).contentSchema;return typeof t==`string`&&t.trim()&&t.length<=ww?{contentSchema:t.trim()}:{}}var Ew=200;function Dw(e){let t=lw(lw(e).rules),n={};for(let[e,r]of Object.entries(t).slice(0,Ew))typeof r==`boolean`&&(n[e]=r);return n}var Ow=100;function kw(e){let t={};for(let[n,r]of Object.entries(lw(e)).slice(0,Ow)){if(!KC.test(n))continue;if(typeof r==`boolean`){t[n]={enabled:r,tools:!0,actions:!0};continue}let e=lw(r);r!==void 0&&Object.keys(e).length&&(t[n]={enabled:_w(e.enabled,!0),tools:_w(e.tools,!0),actions:_w(e.actions,!0)})}return t}function Aw(e){return e===!1?!1:ZC(e)??`Alt+Shift+P`}function jw(e){let t=e?.configs;return Cw(t?.[JC])}function Mw(e){return`${{forms:`Writing to forms`,router:`Navigating and clearing navigations`,ngrx:`Restoring NgRx state, dispatching actions and changing the Store DevTools history`,http:`Changing HTTP mock rules and SSR overrides, refetching the TransferState payload, and clearing HTTP calls`,analog:`Calling API routes, clearing server calls, running Nitro tasks and purging the Nitro cache`,components:`Editing component properties and signals`,tanstackQuery:`Invalidating and refetching TanStack queries`,plugins:`Running plugin actions`}[e]} is turned off in the devtools config (actions.${e}).`}var Nw=[`pangular:build-meta`],Pw={components:`Components`,injectors:`Injectors`,signals:`Signals`,ngrx:`NgRx`,tanstackQuery:`TanStack Query`,forms:`Forms`,router:`Router`,pipes:`Pipes`,http:`HTTP`,analog:`Analog`,capacitor:`Capacitor`,errors:`Errors`,plugins:`Plugins`,performance:`Performance`,build:`Build`},Fw={forms:`Form writes`,router:`Navigation`,ngrx:`NgRx restore, dispatch and Store DevTools`,http:`HTTP mocking`,analog:`Analog API calls`,components:`Component edits`,tanstackQuery:`TanStack Query invalidate and refetch`,plugins:`Plugin actions`},Iw={refreshMs:e=>`poll every ${e} ms`,navigations:e=>`${e} navigations`,formTimeline:e=>`${e} form events`,httpCalls:e=>`${e} HTTP calls`,changeLog:e=>`${e} NgRx changes`,cdCycles:e=>`${e} change detection cycles`,cdSlowMs:e=>`slow cycles over ${e} ms`,capacitorCalls:e=>`${e} Capacitor plugin calls`,idleAfterMs:e=>e?`idle ${e/1e3} s after the last agent call`:`never idle`};function Lw(e){if(!e)return[];let t=[`On`];return e.minLength!==uw.minLength&&t.push(`${e.minLength} characters or more`),e.threshold!==uw.threshold&&t.push(`up to ${e.threshold} bits per character`),t}function Rw(e){let t=[],n=(e,n)=>{n.length&&t.push({label:e,value:n.join(`, `)})},r=RC.filter(t=>e.inspectors[t]);n(`Inspectors off`,RC.filter(t=>!e.inspectors[t]).map(e=>Pw[e])),n(`Agent`,e.agent.readOnly?[`Read-only`]:[]),n(`Hidden from the agent`,r.filter(t=>!e.agent.tools[t]).map(e=>Pw[e])),n(`Blocked actions`,VC.filter(t=>e.inspectors[t]&&!e.actions[t]).map(e=>Fw[e])),n(`Extra secret names`,e.redaction.secretNames),n(`Unmasked names`,e.redaction.unmask),n(`Entropy masking`,Lw(e.redaction.entropy)),n(`Limits`,Object.keys(HC).filter(t=>e.limits[t]!==HC[t].default).map(t=>Iw[t](e.limits[t]))),e.popup.hotkey!==`Alt+Shift+P`&&n(`Popup shortcut`,[e.popup.hotkey===!1?`Off`:e.popup.hotkey]);let i=Object.entries(e.plugins??{});return n(`Plugins off`,i.filter(([,e])=>!e.enabled).map(([e])=>e)),n(`Plugin tools or actions off`,i.filter(([,e])=>e.enabled&&(!e.tools||!e.actions)).map(([e,t])=>`${e} (${[!t.tools&&`tools`,!t.actions&&`actions`].filter(Boolean).join(`, `)})`)),n(`Lint rules off`,Object.entries(e.lint?.rules??{}).filter(([,e])=>!e).map(([e])=>e)),t}function zw(e){let t={tags:[],directives:[],text:``},n=e.toLowerCase();return n=n.replace(/<\s*([^<>\s]+)\s*>/g,(e,n)=>(t.tags.push({value:n,exact:!0}),` `)),n=n.replace(/\[\s*([^[\]\s]+)\s*\]/g,(e,n)=>(t.directives.push({value:n,exact:!0}),` `)),n=n.replace(/(^|\s)([<[])([^<>[\]\s]*)$/,(e,n,r,i)=>(i&&(r===`<`?t.tags:t.directives).push({value:i,exact:!1}),n)),t.text=n.replace(/\s+/g,` `).trim(),t}function Bw(e){return!e.tags.length&&!e.directives.length&&!e.text}function Vw(e,t){let n=e.tag.toLowerCase(),r=(e.directives??[]).map(e=>e.toLowerCase()),i=(e.attributes??[]).map(e=>e.toLowerCase()),a=[...r,...r.map(e=>e.replace(/directive$/,``)),...i];for(let{value:e,exact:r}of t.tags)if(r?n!==e:!n.startsWith(e))return!1;for(let{value:e,exact:n}of t.directives)if(!a.some(t=>n?t===e:t.includes(e)))return!1;if(t.text){let a=t.text;if(!(e.name.toLowerCase().includes(a)||n.includes(a)||r.some(e=>e.includes(a))||i.some(e=>e.includes(a))))return!1}return!0}var Hw={debugApi:{subject:`Live data`,since:`12.0`},injectorProviders:{subject:`Reading providers and environment injectors`,since:`16.2`},injectorMetadata:{subject:`The full injector tree`,since:`17.0`},isSignal:{subject:`Telling signals apart in component values`,since:`17.1`},signalGraph:{subject:`The live signal graph`,since:`20.1`},deferBlocks:{subject:`Listing @defer blocks`,since:`19.1`},forBlocks:{subject:`Listing @for blocks`,since:`22.0`},profiler:{subject:`Recording change detection`,since:`20.0`},angularProfiling:{subject:`Angular profiling`,since:`20.0`},routerInstance:{subject:`The router debug util`,since:`20.3`}};function Uw(e){let t=/^(\d+)\.(\d+)/.exec(e.trim());return t?`${t[1]}.${t[2]}`:e.trim()}function Ww(e){let t=/^(\d+)(?:\.(\d+))?/.exec(e.trim());return t?[Number(t[1]),Number(t[2]??0)]:null}function Gw(e,t){let n=Ww(e),r=Ww(t);return!n||!r?!1:n[0]===r[0]?n[1]>=r[1]:n[0]>r[0]}function Kw(e,t){return e?.capabilities?.[t]===!1}function qw(e,t){let n=Hw[e],r=`${n.subject} needs Angular ${n.since} or later`;if(!t)return`${r}; this page's Angular version is unknown.`;let i=Uw(t);return Gw(t,n.since)?`${r} in a development build; this page runs Angular ${i} without it, which usually means a production build.`:`${r}; this page runs Angular ${i}.`}function Jw(e){return e.hydration===`hydrated`&&e.hydratedAt===void 0?`hydrated before inspection`:e.hydration}var Yw=/^on (viewport|interaction|hover)\b/;function Xw(e){let t=e.filter(e=>!/^(prefetch|hydrate) /.test(e));return t.length>0&&t.every(e=>Yw.test(e))}function Zw(e,t){let n=[],r=e.since>0?Math.max(0,Math.round((t-e.since)/1e3)):0;return e.state===`error`&&n.push({kind:`failed`,text:`failed to load`,label:`failed`}),(e.state===`placeholder`||e.state===`initial`)&&r*1e3>=1e4&&n.push(Xw(e.triggers)?{kind:`waiting`,text:`waiting for its trigger for ${r}s`,label:`waiting ${r}s`,seconds:r}:{kind:`stuck`,text:`on its placeholder for ${r}s`,label:`stuck ${r}s`,seconds:r}),e.hydrateNever?n.push({kind:`hydrate-never`,text:`hydrate never: the server HTML stays static`,label:`hydrate never`}):e.hydration===`dehydrated`&&n.push({kind:`dehydrated`,text:`still dehydrated`,label:`dehydrated`}),n}var Qw=`pangular-page-id`,$w=null;function eT(e){$w=e}function tT(){if($w)return $w;try{return new URLSearchParams(location.search).get(`pageId`)||(window.top===window?null:sessionStorage.getItem(Qw)||null)}catch{return null}}function nT(e,t){if(t.chosen&&e[t.chosen])return t.chosen;if(t.host)return t.host;if(t.previous&&e[t.previous])return t.previous;let n=null;for(let t of Object.values(e))(!n||t.reportedAt>n.reportedAt)&&(n=t);return n?.pageId??null}function rT(e,t){return e?t?e.pages?.[t]??null:e:null}function iT(e,t){return e?t?e.pages?.[t]??null:e.graph??null:null}function aT(){return{functions:[...Nw]}}function oT(e,t,n){return e?e.scope(`pangular`).rpc.call(t,...n===void 0?[]:[n]):Promise.resolve(null)}function sT(e,t,n){return oT(e,t,n).then(e=>e,()=>null)}function cT(e){return e?.connectionMeta.backend===`static`}function lT(e){let t=()=>{let t=e()?.scope(`pangular`).rpc;t&&(t.callEvent(`request-page-highlight`,null),t.callEvent(`request-form-highlight`,null))};return addEventListener(`pagehide`,t),()=>{removeEventListener(`pagehide`,t),t()}}function uT(e=globalThis){delete e.__DEVFRAME_CONNECTION__,delete e.__DEVFRAME_CONNECTION_META__}function dT(e){return e.split(`@`)[1]??``}var fT={signal:`Signal Forms`,reactive:`Reactive`,template:`Template-driven`},pT={own:`validator`,directive:`template attribute`,tree:`cross-field rule`,async:`async`,parse:`parse`,submission:`server`,schema:`schema`,manual:`setErrors`},mT=sT,hT={key:`name looks secret`,"input-type":`password input`,autocomplete:`autocomplete is a secret kind`,marker:`marked as mask`,parent:`inside a secret group`,config:`listed in mask`};function gT(e){return hT[e]??e}var _T=`https://pangular-inspector.dev/security/#opt-fields-in-or-out`;async function vT(e,t){return await mT(e,`request-form-action`,t)??{ok:!1,error:`The devtools server did not answer.`}}function yT(e){return`${e.ok?e.message??`Done.`:e.error??`Failed.`}${e.skipped?.length?` Skipped: ${e.skipped.map(e=>`${e.path} (${e.reason})`).join(`, `)}.`:``}${e.status?` Status: ${e.status}.`:``}`}var bT=/"(?:[^"\\\n]|\\.)*"|`([^`\n]*)`|\*\*/g;function xT(e){return(e??``).replace(/^_Labels, paths.*_\n\n/,``).replace(bT,(e,t)=>t??(e===`**`?``:e))}function ST(e,t){let n=Math.max(0,e-t),r=Math.ceil(n/6e4);if(r<60)return`in ${r} min`;let i=Math.round(r/60);return i<48?`in ${i} ${i===1?`hour`:`hours`}`:`in ${Math.round(i/24)} days`}function CT(e,t){return e.length?e.join(`, `):t}function wT(e,t){let n=[];if(n.push({label:`One-time code`,value:e.auth?e.oneTimeCode.state===`locked`?`Locked after too many wrong codes: run pangular token --rotate or restart the server for a new code`:e.oneTimeCode.expiresAt?`On, current code expires ${ST(e.oneTimeCode.expiresAt,t)}`:`On`:`Off: every client is trusted`}),e.auth){let{count:r,nextExpiresAt:i,lastExpiresAt:a}=e.tokens;n.push({label:`Trusted clients`,value:r?r===1||i===a?`${r} ${r===1?`token`:`tokens`}, expires ${ST(i??t,t)}`:`${r} tokens, the first expires ${ST(i??t,t)}, the last ${ST(a??t,t)}`:`None`}),e.pairingTokens&&n.push({label:`Pairing tokens`,value:`${e.pairingTokens} accepted instead of the code`})}return e.reported?(n.push({label:`Reach`,value:e.network?`This machine and other machines`:`This machine only`}),n.push({label:`Allowed origins`,value:e.originCheck?`${CT(e.allowedOrigins,`This machine and the Chrome extension`)}${e.customOrigins?`, plus a custom origin check`:``}`:`Any: the origin check is off`}),(e.allowedHosts===`any`||e.allowedHosts.length)&&n.push({label:`Allowed hosts`,value:e.allowedHosts===`any`?`Any`:e.allowedHosts.join(`, `)}),n):n}function TT(e){return jw(e?.connectionMeta)}function ET(e){return Array.isArray(e)&&e.every(e=>typeof e==`string`)?[...e]:void 0}function DT(e,t){if(!t||typeof t!=`object`)return e;let n=ET(t.secretNames),r=ET(t.unmask);if(!n||!r)return e;let i=hw(t.entropy);return{...e,redaction:i?{secretNames:n,unmask:r,entropy:i}:{secretNames:n,unmask:r}}}function OT(e,t){return TT(e).actions[t]}var kT={components:`components`,routes:`router`,signals:`signals`,injectors:`injectors`,store:`ngrx`,queries:`tanstackQuery`,forms:`forms`,pipes:`pipes`,network:`http`,analog:`analog`,capacitor:`capacitor`,errors:`errors`,plugins:`plugins`,performance:`performance`,build:`build`};function AT(e){return kT[e]}var jT=`https://pangular-inspector.dev/getting-started/configuration/#inspectors-and-agent-tools`;function MT(e,t){let n=kT[e];return!n||t.inspectors[n]}function NT(e,t){e&1&&(w(),dg(0,`rect`,5)(1,`rect`,6)(2,`rect`,7)(3,`rect`,8))}function PT(e,t){e&1&&(w(),dg(0,`path`,9)(1,`circle`,10)(2,`circle`,11)(3,`path`,12))}function FT(e,t){e&1&&(w(),dg(0,`path`,13)(1,`path`,14))}function IT(e,t){e&1&&(w(),dg(0,`path`,15)(1,`path`,16)(2,`path`,17))}function LT(e,t){e&1&&(w(),dg(0,`circle`,18)(1,`path`,19)(2,`circle`,20))}function RT(e,t){e&1&&(w(),dg(0,`path`,1))}function zT(e,t){e&1&&(w(),dg(0,`path`,21)(1,`path`,22)(2,`path`,23)(3,`path`,24))}function BT(e,t){e&1&&(w(),dg(0,`ellipse`,25)(1,`path`,26)(2,`path`,27))}function VT(e,t){e&1&&(w(),dg(0,`rect`,28)(1,`path`,29)(2,`path`,30)(3,`path`,31))}function HT(e,t){e&1&&(w(),dg(0,`circle`,32)(1,`path`,9)(2,`path`,33))}function UT(e,t){e&1&&(w(),dg(0,`path`,34)(1,`path`,35)(2,`path`,36)(3,`path`,37)(4,`circle`,38))}function WT(e,t){e&1&&(w(),dg(0,`circle`,39)(1,`path`,40))}function GT(e,t){e&1&&(w(),dg(0,`ellipse`,41)(1,`path`,42)(2,`path`,43)(3,`path`,44)(4,`path`,45))}function KT(e,t){e&1&&(w(),dg(0,`circle`,32)(1,`path`,46)(2,`path`,47))}function qT(e,t){e&1&&(w(),dg(0,`path`,48)(1,`path`,49))}function JT(e,t){e&1&&(w(),dg(0,`path`,50)(1,`path`,51)(2,`path`,52))}function YT(e,t){e&1&&(w(),dg(0,`path`,2))}function XT(e,t){e&1&&(w(),dg(0,`path`,3))}function ZT(e,t){e&1&&(w(),dg(0,`path`,4))}var QT=class e{name=$.required();static ɵfac=function(t){return new(t||e)};static ɵcmp=O({type:e,selectors:[[`app-tab-icon`]],inputs:{name:[1,`name`]},decls:20,vars:1,consts:[[`viewBox`,`0 0 24 24`,`width`,`16`,`height`,`16`,`fill`,`none`,`stroke`,`currentColor`,`stroke-width`,`1.8`,`stroke-linecap`,`round`,`stroke-linejoin`,`round`,`aria-hidden`,`true`],[`d`,`M22 12h-4l-3 9L9 3l-3 9H2`],[`d`,`M10 3h4v3a2 2 0 1 0 4 0V5h1a2 2 0 0 1 2 2v4h-2a2 2 0 1 0 0 4h2v4a2 2 0 0 1-2 2h-4v-2a2 2 0 1 0-4 0v2H7a2 2 0 0 1-2-2v-4H4a2 2 0 1 1 0-4h1V7a2 2 0 0 1 2-2h3Z`],[`d`,`m8 3 4 8 5-5 5 15H2L8 3z`],[`fill`,`currentColor`,`stroke`,`none`,`transform`,`translate(1.8 1.8) scale(0.85)`,`d`,`M24 3.7l-5.766 5.766 5.725 5.736-3.713 3.712L5.073 3.742 8.786.03l5.736 5.726L20.284 0 24 3.7zM.029 8.785l3.713-3.713 15.173 15.173-3.713 3.714-5.732-5.726L3.7 24 0 20.285l5.754-5.764L.029 8.785z`],[`x`,`3`,`y`,`3`,`width`,`7`,`height`,`9`,`rx`,`1.5`],[`x`,`14`,`y`,`3`,`width`,`7`,`height`,`5`,`rx`,`1.5`],[`x`,`14`,`y`,`12`,`width`,`7`,`height`,`9`,`rx`,`1.5`],[`x`,`3`,`y`,`16`,`width`,`7`,`height`,`5`,`rx`,`1.5`],[`d`,`M3 12h18`],[`cx`,`7`,`cy`,`12`,`r`,`2`],[`cx`,`14`,`cy`,`12`,`r`,`2`],[`d`,`M18 7v10`],[`d`,`M9 11l2 2 4-4`],[`d`,`M12 3 4 6v6c0 4.5 3.4 8.3 8 9 4.6-.7 8-4.5 8-9V6l-8-3Z`],[`d`,`M12 2 3 7l9 5 9-5-9-5Z`],[`d`,`m3 12 9 5 9-5`],[`d`,`m3 17 9 5 9-5`],[`cx`,`6`,`cy`,`19`,`r`,`3`],[`d`,`M9 19h8.5a3.5 3.5 0 0 0 0-7h-11a3.5 3.5 0 0 1 0-7H15`],[`cx`,`18`,`cy`,`5`,`r`,`3`],[`d`,`M12 22v-5`],[`d`,`M9 8V2`],[`d`,`M15 8V2`],[`d`,`M18 8v5a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4V8Z`],[`cx`,`12`,`cy`,`5`,`rx`,`9`,`ry`,`3`],[`d`,`M3 5v14a9 3 0 0 0 18 0V5`],[`d`,`M3 12a9 3 0 0 0 18 0`],[`x`,`3`,`y`,`4`,`width`,`18`,`height`,`16`,`rx`,`2`],[`d`,`M7 9h10`],[`d`,`M7 13h6`],[`d`,`M7 17h8`],[`cx`,`12`,`cy`,`12`,`r`,`9`],[`d`,`M12 3a14 14 0 0 1 0 18a14 14 0 0 1 0-18Z`],[`d`,`M4 7h10`],[`d`,`M4 17h6`],[`d`,`m14 13 4 4-4 4`],[`d`,`M10 17h8`],[`cx`,`18`,`cy`,`7`,`r`,`3`],[`cx`,`12`,`cy`,`12`,`r`,`3`],[`d`,`M19.4 15a1.7 1.7 0 0 0 .3 1.8l.1.1a2 2 0 1 1-2.8 2.8l-.1-.1a1.7 1.7 0 0 0-1.8-.3 1.7 1.7 0 0 0-1 1.5V21a2 2 0 1 1-4 0v-.1a1.7 1.7 0 0 0-1.1-1.5 1.7 1.7 0 0 0-1.8.3l-.1.1a2 2 0 1 1-2.8-2.8l.1-.1a1.7 1.7 0 0 0 .3-1.8 1.7 1.7 0 0 0-1.5-1H3a2 2 0 1 1 0-4h.1a1.7 1.7 0 0 0 1.5-1.1 1.7 1.7 0 0 0-.3-1.8l-.1-.1a2 2 0 1 1 2.8-2.8l.1.1a1.7 1.7 0 0 0 1.8.3H9a1.7 1.7 0 0 0 1-1.5V3a2 2 0 1 1 4 0v.1a1.7 1.7 0 0 0 1 1.5 1.7 1.7 0 0 0 1.8-.3l.1-.1a2 2 0 1 1 2.8 2.8l-.1.1a1.7 1.7 0 0 0-.3 1.8V9a1.7 1.7 0 0 0 1.5 1H21a2 2 0 1 1 0 4h-.1a1.7 1.7 0 0 0-1.5 1Z`],[`cx`,`11`,`cy`,`5`,`rx`,`8`,`ry`,`3`],[`d`,`M3 5v6c0 1.66 3.58 3 8 3`],[`d`,`M3 11v6c0 1.66 3.58 3 8 3`],[`d`,`M21 14a4 4 0 1 1-1.2-2.85L21 12.3`],[`d`,`M21 9v3.3h-3.3`],[`d`,`M12 7v6`],[`d`,`M12 16.5v.01`],[`d`,`M12 14l4-4`],[`d`,`M3.34 19a10 10 0 1 1 17.32 0`],[`d`,`M21 16V8l-9-5-9 5v8l9 5 9-5Z`],[`d`,`m3.3 7 8.7 5 8.7-5`],[`d`,`M12 22V12`]],template:function(e,t){if(e&1&&(w(),R(0,`svg`,0),A(1,NT,4,0)(2,PT,4,0)(3,FT,2,0)(4,IT,3,0)(5,LT,3,0)(6,RT,1,0,`:svg:path`,1)(7,zT,4,0)(8,BT,3,0)(9,VT,4,0)(10,HT,3,0)(11,UT,5,0)(12,WT,2,0)(13,GT,5,0)(14,KT,3,0)(15,qT,2,0)(16,JT,3,0)(17,YT,1,0,`:svg:path`,2)(18,XT,1,0,`:svg:path`,3)(19,ZT,1,0,`:svg:path`,4),z()),e&2){let e;D(),j((e=t.name())===`dashboard`?1:e===`timeline`?2:e===`audit`?3:e===`components`?4:e===`routes`?5:e===`signals`?6:e===`injectors`?7:e===`store`?8:e===`forms`?9:e===`network`?10:e===`pipes`?11:e===`settings`?12:e===`queries`?13:e===`errors`?14:e===`performance`?15:e===`build`?16:e===`plugins`?17:e===`analog`?18:e===`capacitor`?19:-1)}},styles:[`[_nghost-%COMP%] { display: inline-flex; flex-shrink: 0; -}`]})},oE=(e,t)=>t.tab,sE=(e,t)=>t.label;function cE(e,t){e&1&&K(0),e&2&&J(` `,W().meta()?.projectName,` `)}function lE(e,t){e&1&&K(0,` Project details unavailable `)}function uE(e,t){e&1&&K(0,` Loading… `)}function dE(e,t){e&1&&(K(0,` Run `),F(1,`code`),K(2,`pangular build`),I(),K(3,` again to rebuild the report. `))}function fE(e,t){e&1&&K(0,` Check that the dev server is running. `)}function pE(e,t){if(e&1){let e=B();F(0,`button`,13),H(`click`,function(){return S(e),C(W(2).loadMeta())}),K(1,`Try again`),I()}}function mE(e,t){if(e&1&&(F(0,`p`,11),A(1,dE,4,0)(2,fE,1,0),I(),A(3,pE,2,0,`button`,12)),e&2){let e=W();D(),j(e.staticReport()?1:2),D(2),j(e.staticReport()?-1:3)}}function hE(e,t){e&1&&(F(0,`li`,5)(1,`span`),K(2,`Analog`),I(),K(3),I()),e&2&&(D(3),q(t))}function gE(e,t){e&1&&(F(0,`li`)(1,`span`),K(2,`Change detection`),I(),K(3),I()),e&2&&(D(3),q(t))}function _E(e,t){if(e&1&&(F(0,`span`,20),K(1),I(),F(2,`span`,21),K(3),I()),e&2){let e=W().$implicit,t=W();D(),q(t.cards()[e.tab]?.value),D(2),q(t.cards()[e.tab]?.sub)}}function vE(e,t){e&1&&(F(0,`span`,22),K(1,`–`),I(),F(2,`span`,21),K(3,`Count unavailable`),I())}function yE(e,t){e&1&&(L(0,`span`,23),F(1,`span`,21),K(2,`Counting…`),I())}function bE(e,t){if(e&1){let e=B();F(0,`button`,14),H(`click`,function(){let t=S(e).$implicit;return C(W().navigate.emit(t.tab))}),F(1,`span`,15)(2,`span`,16),L(3,`app-tab-icon`,17),I(),F(4,`span`,18),K(5,`→`),I()(),F(6,`span`,19),K(7),I(),A(8,_E,4,2)(9,vE,4,0)(10,yE,3,0),I()}if(e&2){let e,n=t.$implicit,r=t.$index,i=W().stateOf(n.tab);r_(`animation-delay`,60*r,`ms`),k(`aria-busy`,i===`loading`),D(3),P(`name`,n.tab),D(4),q(n.label),D(),j((e=i)===`ready`?8:e===`error`?9:10)}}function xE(e,t){e&1&&(F(0,`p`),K(1,`Loading…`),I())}function SE(e,t){if(e&1&&(F(0,`div`)(1,`dt`),K(2),I(),F(3,`dd`),K(4),I()()),e&2){let e=t.$implicit;D(2),q(e.label),D(2),q(e.value)}}function CE(e,t){if(e&1&&(F(0,`dl`),M(1,SE,5,2,`div`,null,sE),I()),e&2){let e=W();D(),N(e.configItems())}}function wE(e,t){e&1&&(F(0,`p`),K(1,`Defaults`),I())}function TE(e,t){if(e&1&&(F(0,`div`)(1,`dt`),K(2),I(),F(3,`dd`),K(4),I()()),e&2){let e=t.$implicit;D(2),q(e.label),D(2),q(e.value)}}function EE(e,t){e&1&&(F(0,`section`,10)(1,`h2`,24),K(2,`Security`),I(),F(3,`dl`),M(4,TE,5,2,`div`,null,sE),I()()),e&2&&(D(4),N(t))}var DE=[{tab:`components`,label:`Components`},{tab:`routes`,label:`Routes`},{tab:`signals`,label:`Signals`},{tab:`injectors`,label:`Injectors`},{tab:`store`,label:`NgRx declarations`},{tab:`pipes`,label:`Pipes`},{tab:`forms`,label:`Forms`},{tab:`network`,label:`SSR & HTTP`}];function OE(e){return DE.filter(t=>zT(t.tab,e))}var kE={zoneless:`Zoneless`,zone:`zone.js`,"zone-unused":`Zoneless, zone.js loaded`};function AE(e){return e&&Object.hasOwn(kE,e)?kE[e]:null}var jE=new Set([`signal`,`computed`,`linkedSignal`,`effect`]),ME={action:[`action`,`actions`],reducer:[`reducer`,`reducers`],effect:[`effect`,`effects`],selector:[`selector`,`selectors`],feature:[`feature`,`features`],"store-setup":[`setup call`,`setup calls`],"signal-store":[`signal store`,`signal stores`],"signal-state":[`signal state`,`signal states`],"signal-method":[`signal method`,`signal methods`]};function NE(e,t,n){return`${e} ${e===1?t:n}`}function PE(e,t){for(let n of e??[])t(n),PE(n.children,t)}function FE(e){if(!e.some(e=>e.kind))return{value:e.length,sub:`discovered in source`};let t=e.filter(e=>e.kind===`directive`).length;return{value:e.length-t,sub:`components · ${NE(t,`directive`,`directives`)}`}}function IE(e){if(!e.some(e=>e.kind))return{value:e.length,sub:`route entries in source`};let t=e.filter(e=>e.kind===`redirect`).length;return{value:new Set(e.filter(e=>e.kind===`page`).map(e=>e.fullPath??e.path??``)).size,sub:`navigable paths · ${NE(t,`redirect`,`redirects`)}`}}function LE(e){let t=new Map;for(let n of e)n.kind&&t.set(n.kind,(t.get(n.kind)??0)+1);if(!t.size)return{value:e.length,sub:`declarations in source`};let n=[...t].sort((e,t)=>t[1]-e[1]).map(([e,t])=>{let[n,r]=ME[e]??[e,e];return NE(t,n,r)});return{value:e.length,sub:n.join(` · `)}}function RE(e,t){let n=e?.forms??[],r=t?n.filter(e=>vT(e.id)===t):n;if(!r.length)return{value:0,sub:`no forms on the page yet`};let i=r.filter(e=>e.root?.status===`INVALID`).length;return{value:r.length,sub:`${r.length===1?`form`:`forms`} · ${i} invalid`}}function zE(e){return e.cancelled||e.status===void 0?!1:e.status===0||e.status>=400}function BE(e,t){let n=e?.pages??[],r=t?n.find(e=>e.pageId===t)??null:n.reduce((e,t)=>!e||t.reportedAt>e.reportedAt?t:e,null),i=t&&!r?[]:e?.serverCalls??[],a=r?.initialUrl,o=[...a?i.filter(e=>!e.pageUrl||e.pageUrl===a):i,...r?.calls??[]];if(!o.length)return{value:0,sub:`no calls recorded yet`};let s=o.filter(zE).length;return{value:o.length,sub:`${o.length===1?`call`:`calls`} · ${s} failed`}}var VE=class e{rpc=$(null);navigate=uv();staticReport=X(()=>hT(this.rpc()));meta=T(null);security=T(null);redaction=T(null);config=X(()=>PT(MT(this.rpc()),this.redaction()));stats=X(()=>this.rpc()?OE(this.config()):[]);configItems=X(()=>Gw(this.config()));metaState=T(`loading`);states=T({});rows=T({});injectorTree=T(null);signalGraph=T(null);formsState=T(null);httpState=T(null);pageId=cT();destroyRef=x(Cs);stopLive=[];zone=X(()=>AE(uT(this.injectorTree(),this.pageId)?.zone));liveInjectors=X(()=>{let e=uT(this.injectorTree(),this.pageId);if(!e?.roots?.length)return null;let t=0,n=0,r=e=>{t++,n+=e.providers?.length??0};return PE(e.roots,r),PE(e.environment,r),{injectors:t,providers:n}});liveSignals=X(()=>{let e=dT(this.signalGraph(),this.pageId);return e?.nodes?.length?e.nodes.filter(e=>jE.has(e.kind??``)).length:null});cards=X(()=>{let e=this.rows(),t={};if(e.components&&(t.components=FE(e.components)),e.routes&&(t.routes=IE(e.routes)),e.store&&(t.store=LE(e.store)),e.pipes){let n=e.pipes.filter(e=>e.builtin).length;t.pipes={value:e.pipes.length-n,sub:n?`custom pipes · ${n} built-in in use`:`custom pipes in source`}}let n=this.liveSignals();n===null?e.signals&&(t.signals={value:e.signals.length,sub:`signal declarations in source`}):t.signals={value:n,sub:e.signals?`live on the page · ${e.signals.length} declared in source`:`live on the page`};let r=this.liveInjectors();r?t.injectors={value:r.injectors,sub:`live injectors · ${NE(r.providers,`provider`,`providers`)}`}:e.injectors&&(t.injectors={value:e.injectors.filter(e=>e.type!==`injection`).length,sub:`provider declarations in source`});let i=this.formsState();i&&(t.forms=RE(i,this.pageId));let a=this.httpState();return a&&(t.network=BE(a,this.pageId)),t});loadMeta(e=this.rpc()){e&&(this.metaState.set(`loading`),e.scope(`pangular`).rpc.call(`build-meta`).then(t=>{this.rpc()===e&&(this.meta.set(t),this.metaState.set(`ready`))}).catch(()=>{this.rpc()===e&&this.metaState.set(`error`)}))}loadRedaction(e){this.redaction.set(null),!hT(e)&&pT(e,`redaction-config`).then(t=>{this.rpc()===e&&this.redaction.set(t)}).catch(()=>{})}loadSecurity(e){this.security.set(null),!hT(e)&&mT(e,`security-status`).then(t=>{this.rpc()===e&&t&&this.security.set(jT(t,Date.now()))})}constructor(){E(()=>{let e=this.rpc();if(!e)return;let t=e.scope(`pangular`);this.states.set({}),this.rows.set({}),this.formsState.set(null),this.httpState.set(null),this.loadMeta(e),this.loadRedaction(e),this.loadSecurity(e);let n=MT(e),r=e=>zT(e,n);r(`components`)&&this.load(t.rpc.call(`get-components`),`components`),r(`routes`)&&this.load(t.rpc.call(`get-routes`),`routes`),r(`signals`)&&this.load(t.rpc.call(`get-signals`),`signals`),r(`injectors`)&&this.load(t.rpc.call(`get-providers`),`injectors`),r(`store`)&&this.load(t.rpc.call(`get-ngrx-store`),`store`),r(`pipes`)&&this.load(t.rpc.call(`get-pipes`),`pipes`),this.watchLive(e,n)}),this.destroyRef.onDestroy(()=>this.unwatch())}stateOf(e){return(e===`signals`?this.liveSignals():e===`injectors`?this.liveInjectors():null)===null?this.states()[e]??`loading`:`ready`}load(e,t){let n=e=>this.states.update(n=>({...n,[t]:e}));e.then(e=>{this.rows.update(n=>({...n,[t]:Array.isArray(e)?e:[]})),n(`ready`)}).catch(()=>n(`error`))}async watchLive(e,t){this.unwatch();let n=e.scope(`pangular`).rpc,r=async(t,r,i)=>{let a=e=>i&&this.states.update(t=>({...t,[i]:e}));try{let i=await n.sharedState(t);if(this.destroyRef.destroyed||this.rpc()!==e)return;r(i.value()),a(`ready`),this.stopLive.push(i.on(`updated`,e=>r(e)))}catch{if(this.destroyRef.destroyed||this.rpc()!==e)return;r(null),a(`error`)}};await Promise.all([t.inspectors.injectors&&r(`injector-tree`,e=>this.injectorTree.set(e)),t.inspectors.signals&&r(`signal-graph`,e=>this.signalGraph.set(e)),zT(`forms`,t)&&r(`forms`,e=>this.formsState.set(e??{}),`forms`),zT(`network`,t)&&r(`http`,e=>this.httpState.set(e??{}),`network`)])}unwatch(){for(let e of this.stopLive.splice(0))e()}static ɵfac=function(t){return new(t||e)};static ɵcmp=O({type:e,selectors:[[`app-dashboard`]],inputs:{rpc:[1,`rpc`]},outputs:{navigate:`navigate`},decls:34,vars:15,consts:[[`aria-labelledby`,`project-title`,1,`project`],[1,`project-head`],[1,`eyebrow`],[`id`,`project-title`],[1,`chips`],[1,`analog`],[1,`grid`],[`type`,`button`,1,`stat`,3,`animation-delay`],[`aria-labelledby`,`config-title`,1,`config`],[`id`,`config-title`],[`aria-labelledby`,`security-title`,1,`config`],[1,`hint`],[`type`,`button`,1,`retry`],[`type`,`button`,1,`retry`,3,`click`],[`type`,`button`,1,`stat`,3,`click`],[1,`top`],[1,`icon`],[3,`name`],[`aria-hidden`,`true`,1,`go`],[1,`label`],[1,`big`],[1,`sub`],[1,`big`,`muted`],[`aria-hidden`,`true`,1,`big`,`skeleton`],[`id`,`security-title`]],template:function(e,t){if(e&1&&(F(0,`section`,0)(1,`div`,1)(2,`p`,2),K(3,`Project`),I(),F(4,`h2`,3),A(5,cE,1,1)(6,lE,1,0)(7,uE,1,0),I(),A(8,mE,4,2),I(),F(9,`ul`,4)(10,`li`)(11,`span`),K(12,`Angular`),I(),K(13),I(),F(14,`li`)(15,`span`),K(16,`TypeScript`),I(),K(17),I(),F(18,`li`)(19,`span`),K(20,`SSR`),I(),K(21),I(),A(22,hE,4,1,`li`,5),A(23,gE,4,1,`li`),I()(),F(24,`div`,6),M(25,bE,11,6,`button`,7,oE),I(),F(27,`section`,8)(28,`h2`,9),K(29,`Configuration`),I(),A(30,xE,2,0,`p`)(31,CE,3,0,`dl`)(32,wE,2,0,`p`),I(),A(33,EE,6,0,`section`,10)),e&2){let e,n,r,i;k(`aria-busy`,t.metaState()===`loading`),D(4),G(`muted`,t.metaState()!==`ready`),D(),j((e=t.metaState())===`ready`?5:e===`error`?6:7),D(3),j(t.metaState()===`error`?8:-1),D(),G(`pending`,t.metaState()===`loading`),D(4),q(t.meta()?.angularVersion??`…`),D(4),q(t.meta()?.typescript??`…`),D(4),q(t.meta()?t.meta()?.ssr?`On`:`Off`:`…`),D(),j((n=t.meta()?.analog)?22:-1,n),D(),j((r=t.zone())?23:-1,r),D(2),N(t.stats()),D(2),k(`aria-busy`,!t.rpc()),D(3),j(t.rpc()?t.configItems().length?31:32:30),D(3),j((i=t.security())?33:-1,i)}},dependencies:[aE],styles:[`[_nghost-%COMP%] { +}`]})},$T=(e,t)=>t.tab,eE=(e,t)=>t.label;function tE(e,t){e&1&&K(0),e&2&&J(` `,W().meta()?.projectName,` `)}function nE(e,t){e&1&&K(0,` Project details unavailable `)}function rE(e,t){e&1&&K(0,` Loading… `)}function iE(e,t){e&1&&(K(0,` Run `),F(1,`code`),K(2,`pangular build`),I(),K(3,` again to rebuild the report. `))}function aE(e,t){e&1&&K(0,` Check that the dev server is running. `)}function oE(e,t){if(e&1){let e=B();F(0,`button`,13),H(`click`,function(){return S(e),C(W(2).loadMeta())}),K(1,`Try again`),I()}}function sE(e,t){if(e&1&&(F(0,`p`,11),A(1,iE,4,0)(2,aE,1,0),I(),A(3,oE,2,0,`button`,12)),e&2){let e=W();D(),j(e.staticReport()?1:2),D(2),j(e.staticReport()?-1:3)}}function cE(e,t){e&1&&(F(0,`li`,5)(1,`span`),K(2,`Analog`),I(),K(3),I()),e&2&&(D(3),q(t))}function lE(e,t){e&1&&(F(0,`li`)(1,`span`),K(2,`Change detection`),I(),K(3),I()),e&2&&(D(3),q(t))}function uE(e,t){if(e&1&&(F(0,`span`,20),K(1),I(),F(2,`span`,21),K(3),I()),e&2){let e=W().$implicit,t=W();D(),q(t.cards()[e.tab]?.value),D(2),q(t.cards()[e.tab]?.sub)}}function dE(e,t){e&1&&(F(0,`span`,22),K(1,`–`),I(),F(2,`span`,21),K(3,`Count unavailable`),I())}function fE(e,t){e&1&&(L(0,`span`,23),F(1,`span`,21),K(2,`Counting…`),I())}function pE(e,t){if(e&1){let e=B();F(0,`button`,14),H(`click`,function(){let t=S(e).$implicit;return C(W().navigate.emit(t.tab))}),F(1,`span`,15)(2,`span`,16),L(3,`app-tab-icon`,17),I(),F(4,`span`,18),K(5,`→`),I()(),F(6,`span`,19),K(7),I(),A(8,uE,4,2)(9,dE,4,0)(10,fE,3,0),I()}if(e&2){let e,n=t.$implicit,r=t.$index,i=W().stateOf(n.tab);t_(`animation-delay`,60*r,`ms`),k(`aria-busy`,i===`loading`),D(3),P(`name`,n.tab),D(4),q(n.label),D(),j((e=i)===`ready`?8:e===`error`?9:10)}}function mE(e,t){e&1&&(F(0,`p`),K(1,`Loading…`),I())}function hE(e,t){if(e&1&&(F(0,`div`)(1,`dt`),K(2),I(),F(3,`dd`),K(4),I()()),e&2){let e=t.$implicit;D(2),q(e.label),D(2),q(e.value)}}function gE(e,t){if(e&1&&(F(0,`dl`),M(1,hE,5,2,`div`,null,eE),I()),e&2){let e=W();D(),N(e.configItems())}}function _E(e,t){e&1&&(F(0,`p`),K(1,`Defaults`),I())}function vE(e,t){if(e&1&&(F(0,`div`)(1,`dt`),K(2),I(),F(3,`dd`),K(4),I()()),e&2){let e=t.$implicit;D(2),q(e.label),D(2),q(e.value)}}function yE(e,t){e&1&&(F(0,`section`,10)(1,`h2`,24),K(2,`Security`),I(),F(3,`dl`),M(4,vE,5,2,`div`,null,eE),I()()),e&2&&(D(4),N(t))}var bE=[{tab:`components`,label:`Components`},{tab:`routes`,label:`Routes`},{tab:`signals`,label:`Signals`},{tab:`injectors`,label:`Injectors`},{tab:`store`,label:`NgRx declarations`},{tab:`pipes`,label:`Pipes`},{tab:`forms`,label:`Forms`},{tab:`network`,label:`SSR & HTTP`}];function xE(e){return bE.filter(t=>MT(t.tab,e))}var SE={zoneless:`Zoneless`,zone:`zone.js`,"zone-unused":`Zoneless, zone.js loaded`};function CE(e){return e&&Object.hasOwn(SE,e)?SE[e]:null}var wE=new Set([`signal`,`computed`,`linkedSignal`,`effect`]),TE={action:[`action`,`actions`],reducer:[`reducer`,`reducers`],effect:[`effect`,`effects`],selector:[`selector`,`selectors`],feature:[`feature`,`features`],"store-setup":[`setup call`,`setup calls`],"signal-store":[`signal store`,`signal stores`],"signal-state":[`signal state`,`signal states`],"signal-method":[`signal method`,`signal methods`]};function EE(e,t,n){return`${e} ${e===1?t:n}`}function DE(e,t){for(let n of e??[])t(n),DE(n.children,t)}function OE(e){if(!e.some(e=>e.kind))return{value:e.length,sub:`discovered in source`};let t=e.filter(e=>e.kind===`directive`).length;return{value:e.length-t,sub:`components · ${EE(t,`directive`,`directives`)}`}}function kE(e){if(!e.some(e=>e.kind))return{value:e.length,sub:`route entries in source`};let t=e.filter(e=>e.kind===`redirect`).length;return{value:new Set(e.filter(e=>e.kind===`page`).map(e=>e.fullPath??e.path??``)).size,sub:`navigable paths · ${EE(t,`redirect`,`redirects`)}`}}function AE(e){let t=new Map;for(let n of e)n.kind&&t.set(n.kind,(t.get(n.kind)??0)+1);if(!t.size)return{value:e.length,sub:`declarations in source`};let n=[...t].sort((e,t)=>t[1]-e[1]).map(([e,t])=>{let[n,r]=TE[e]??[e,e];return EE(t,n,r)});return{value:e.length,sub:n.join(` · `)}}function jE(e,t){let n=e?.forms??[],r=t?n.filter(e=>dT(e.id)===t):n;if(!r.length)return{value:0,sub:`no forms on the page yet`};let i=r.filter(e=>e.root?.status===`INVALID`).length;return{value:r.length,sub:`${r.length===1?`form`:`forms`} · ${i} invalid`}}function ME(e){return e.cancelled||e.status===void 0?!1:e.status===0||e.status>=400}function NE(e,t){let n=e?.pages??[],r=t?n.find(e=>e.pageId===t)??null:n.reduce((e,t)=>!e||t.reportedAt>e.reportedAt?t:e,null),i=t&&!r?[]:e?.serverCalls??[],a=r?.initialUrl,o=[...a?i.filter(e=>!e.pageUrl||e.pageUrl===a):i,...r?.calls??[]];if(!o.length)return{value:0,sub:`no calls recorded yet`};let s=o.filter(ME).length;return{value:o.length,sub:`${o.length===1?`call`:`calls`} · ${s} failed`}}var PE=class e{rpc=$(null);navigate=cv();staticReport=X(()=>cT(this.rpc()));meta=T(null);security=T(null);redaction=T(null);config=X(()=>DT(TT(this.rpc()),this.redaction()));stats=X(()=>this.rpc()?xE(this.config()):[]);configItems=X(()=>Rw(this.config()));metaState=T(`loading`);states=T({});rows=T({});injectorTree=T(null);signalGraph=T(null);formsState=T(null);httpState=T(null);pageId=tT();destroyRef=x(Ss);stopLive=[];zone=X(()=>CE(rT(this.injectorTree(),this.pageId)?.zone));liveInjectors=X(()=>{let e=rT(this.injectorTree(),this.pageId);if(!e?.roots?.length)return null;let t=0,n=0,r=e=>{t++,n+=e.providers?.length??0};return DE(e.roots,r),DE(e.environment,r),{injectors:t,providers:n}});liveSignals=X(()=>{let e=iT(this.signalGraph(),this.pageId);return e?.nodes?.length?e.nodes.filter(e=>wE.has(e.kind??``)).length:null});cards=X(()=>{let e=this.rows(),t={};if(e.components&&(t.components=OE(e.components)),e.routes&&(t.routes=kE(e.routes)),e.store&&(t.store=AE(e.store)),e.pipes){let n=e.pipes.filter(e=>e.builtin).length;t.pipes={value:e.pipes.length-n,sub:n?`custom pipes · ${n} built-in in use`:`custom pipes in source`}}let n=this.liveSignals();n===null?e.signals&&(t.signals={value:e.signals.length,sub:`signal declarations in source`}):t.signals={value:n,sub:e.signals?`live on the page · ${e.signals.length} declared in source`:`live on the page`};let r=this.liveInjectors();r?t.injectors={value:r.injectors,sub:`live injectors · ${EE(r.providers,`provider`,`providers`)}`}:e.injectors&&(t.injectors={value:e.injectors.filter(e=>e.type!==`injection`).length,sub:`provider declarations in source`});let i=this.formsState();i&&(t.forms=jE(i,this.pageId));let a=this.httpState();return a&&(t.network=NE(a,this.pageId)),t});loadMeta(e=this.rpc()){e&&(this.metaState.set(`loading`),e.scope(`pangular`).rpc.call(`build-meta`).then(t=>{this.rpc()===e&&(this.meta.set(t),this.metaState.set(`ready`))}).catch(()=>{this.rpc()===e&&this.metaState.set(`error`)}))}loadRedaction(e){this.redaction.set(null),!cT(e)&&oT(e,`redaction-config`).then(t=>{this.rpc()===e&&this.redaction.set(t)}).catch(()=>{})}loadSecurity(e){this.security.set(null),!cT(e)&&sT(e,`security-status`).then(t=>{this.rpc()===e&&t&&this.security.set(wT(t,Date.now()))})}constructor(){E(()=>{let e=this.rpc();if(!e)return;let t=e.scope(`pangular`);this.states.set({}),this.rows.set({}),this.formsState.set(null),this.httpState.set(null),this.loadMeta(e),this.loadRedaction(e),this.loadSecurity(e);let n=TT(e),r=e=>MT(e,n);r(`components`)&&this.load(t.rpc.call(`get-components`),`components`),r(`routes`)&&this.load(t.rpc.call(`get-routes`),`routes`),r(`signals`)&&this.load(t.rpc.call(`get-signals`),`signals`),r(`injectors`)&&this.load(t.rpc.call(`get-providers`),`injectors`),r(`store`)&&this.load(t.rpc.call(`get-ngrx-store`),`store`),r(`pipes`)&&this.load(t.rpc.call(`get-pipes`),`pipes`),this.watchLive(e,n)}),this.destroyRef.onDestroy(()=>this.unwatch())}stateOf(e){return(e===`signals`?this.liveSignals():e===`injectors`?this.liveInjectors():null)===null?this.states()[e]??`loading`:`ready`}load(e,t){let n=e=>this.states.update(n=>({...n,[t]:e}));e.then(e=>{this.rows.update(n=>({...n,[t]:Array.isArray(e)?e:[]})),n(`ready`)}).catch(()=>n(`error`))}async watchLive(e,t){this.unwatch();let n=e.scope(`pangular`).rpc,r=async(t,r,i)=>{let a=e=>i&&this.states.update(t=>({...t,[i]:e}));try{let i=await n.sharedState(t);if(this.destroyRef.destroyed||this.rpc()!==e)return;r(i.value()),a(`ready`),this.stopLive.push(i.on(`updated`,e=>r(e)))}catch{if(this.destroyRef.destroyed||this.rpc()!==e)return;r(null),a(`error`)}};await Promise.all([t.inspectors.injectors&&r(`injector-tree`,e=>this.injectorTree.set(e)),t.inspectors.signals&&r(`signal-graph`,e=>this.signalGraph.set(e)),MT(`forms`,t)&&r(`forms`,e=>this.formsState.set(e??{}),`forms`),MT(`network`,t)&&r(`http`,e=>this.httpState.set(e??{}),`network`)])}unwatch(){for(let e of this.stopLive.splice(0))e()}static ɵfac=function(t){return new(t||e)};static ɵcmp=O({type:e,selectors:[[`app-dashboard`]],inputs:{rpc:[1,`rpc`]},outputs:{navigate:`navigate`},decls:34,vars:15,consts:[[`aria-labelledby`,`project-title`,1,`project`],[1,`project-head`],[1,`eyebrow`],[`id`,`project-title`],[1,`chips`],[1,`analog`],[1,`grid`],[`type`,`button`,1,`stat`,3,`animation-delay`],[`aria-labelledby`,`config-title`,1,`config`],[`id`,`config-title`],[`aria-labelledby`,`security-title`,1,`config`],[1,`hint`],[`type`,`button`,1,`retry`],[`type`,`button`,1,`retry`,3,`click`],[`type`,`button`,1,`stat`,3,`click`],[1,`top`],[1,`icon`],[3,`name`],[`aria-hidden`,`true`,1,`go`],[1,`label`],[1,`big`],[1,`sub`],[1,`big`,`muted`],[`aria-hidden`,`true`,1,`big`,`skeleton`],[`id`,`security-title`]],template:function(e,t){if(e&1&&(F(0,`section`,0)(1,`div`,1)(2,`p`,2),K(3,`Project`),I(),F(4,`h2`,3),A(5,tE,1,1)(6,nE,1,0)(7,rE,1,0),I(),A(8,sE,4,2),I(),F(9,`ul`,4)(10,`li`)(11,`span`),K(12,`Angular`),I(),K(13),I(),F(14,`li`)(15,`span`),K(16,`TypeScript`),I(),K(17),I(),F(18,`li`)(19,`span`),K(20,`SSR`),I(),K(21),I(),A(22,cE,4,1,`li`,5),A(23,lE,4,1,`li`),I()(),F(24,`div`,6),M(25,pE,11,6,`button`,7,$T),I(),F(27,`section`,8)(28,`h2`,9),K(29,`Configuration`),I(),A(30,mE,2,0,`p`)(31,gE,3,0,`dl`)(32,_E,2,0,`p`),I(),A(33,yE,6,0,`section`,10)),e&2){let e,n,r,i;k(`aria-busy`,t.metaState()===`loading`),D(4),G(`muted`,t.metaState()!==`ready`),D(),j((e=t.metaState())===`ready`?5:e===`error`?6:7),D(3),j(t.metaState()===`error`?8:-1),D(),G(`pending`,t.metaState()===`loading`),D(4),q(t.meta()?.angularVersion??`…`),D(4),q(t.meta()?.typescript??`…`),D(4),q(t.meta()?t.meta()?.ssr?`On`:`Off`:`…`),D(),j((n=t.meta()?.analog)?22:-1,n),D(),j((r=t.zone())?23:-1,r),D(2),N(t.stats()),D(2),k(`aria-busy`,!t.rpc()),D(3),j(t.rpc()?t.configItems().length?31:32:30),D(3),j((i=t.security())?33:-1,i)}},dependencies:[QT],styles:[`[_nghost-%COMP%] { display: block; max-width: 1200px; } @@ -325,7 +325,7 @@ h2.muted[_ngcontent-%COMP%] { .skeleton[_ngcontent-%COMP%] { animation: none; } -}`]})},HE=`pangular:panel-action-result`,UE=6e3,WE=0;function GE(e=window){return e.location.protocol===`chrome-extension:`&&e.parent!==e}function KE(e,t=window){let n=`pa-${Date.now().toString(36)}-${++WE}`;return new Promise(r=>{let i=e=>{t.clearTimeout(o),t.removeEventListener(`message`,a),r(e)},a=({source:e,origin:r,data:a})=>{if(e!==t.parent||r!==t.location.origin)return;let o=a;if(o?.type!==HE||o.requestId!==n)return;let{opened:s,error:c}=a;i({ok:o.ok===!0,...s===`file`||s===`class`?{opened:s}:{},...typeof c==`string`?{error:c}:{}})},o=t.setTimeout(()=>i({ok:!1,error:`timeout`}),UE);t.addEventListener(`message`,a),t.parent.postMessage({...e,requestId:n},t.location.origin)})}var qE=class e{available=GE();reveal(e,t){return KE({type:`pangular:reveal-element`,pageId:e,id:t})}openSource(e,t,n){return KE({type:`pangular:open-source`,pageId:e,id:t,...n?{file:n.file,line:n.line}:{}})}static ɵfac=function(t){return new(t||e)};static ɵprov=Al({token:e,factory:e.ɵfac})};function JE(e){return new Date(e).toLocaleTimeString()}var YE=/[ \t\n\r]/;function XE(e){let t=e.trim(),n;try{n=JSON.parse(t)}catch{return null}if(typeof n!=`object`||!n)return null;let r=``,i=0,a=()=>`\n${` `.repeat(i)}`;for(let e=0;et.name;function $E(e,t){e&1&&(R(0,`span`,11),K(1,`impure`),z())}function eD(e,t){e&1&&(R(0,`span`,11),K(1,`churning`),z())}function tD(e,t){e&1&&(R(0,`span`,11),K(1,`stale?`),z())}function nD(e,t){if(e&1&&(R(0,`span`,10),K(1),z()),e&2){let e=W(2).$implicit,t=W(3);D(),q(t.plural(e.calls,`call`))}}function rD(e,t){if(e&1){let e=B();R(0,`button`,7),U(`click`,function(){S(e);let t=W().$implicit;return C(W(3).showPipe.emit(t.name))}),R(1,`span`,8),K(2,`Show in Pipes:`),z(),R(3,`span`,9),K(4),z(),R(5,`span`,10),K(6),z(),A(7,$E,2,0,`span`,11),A(8,eD,2,0,`span`,11),A(9,tD,2,0,`span`,11),A(10,nD,2,1,`span`,10),z()}if(e&2){let e=W().$implicit;D(4),q(e.name),D(2),J(``,e.uses,`×`),D(),j(e.isPure?-1:7),D(),j(e.churn?8:-1),D(),j(e.stale?9:-1),D(),j(e.calls===void 0?-1:10)}}function iD(e,t){e&1&&(R(0,`span`,11),K(1,`impure`),z())}function aD(e,t){if(e&1&&(R(0,`span`,6)(1,`span`,9),K(2),z(),R(3,`span`,10),K(4),z(),A(5,iD,2,0,`span`,11),z()),e&2){let e=W().$implicit;D(2),q(e.name),D(2),J(``,e.uses,`×`),D(),j(e.isPure?-1:5)}}function oD(e,t){if(e&1&&(R(0,`li`),A(1,rD,11,6,`button`,5)(2,aD,6,3,`span`,6),z()),e&2){let e=W(3);D(),j(e.canShowPipes()?1:2)}}function sD(e,t){if(e&1&&(R(0,`ul`,3),M(1,oD,3,1,`li`,null,QE),z(),R(3,`p`,4),K(4,` Call counts cover every component that uses the pipe. Record calls in the Pipes tab to see them. `),z()),e&2){let e=W(2);D(),N(e.rows())}}function cD(e,t){e&1&&(R(0,`p`,2),K(1,`No pipe is in use in the rendered part of its template.`),z())}function lD(e,t){if(e&1&&(R(0,`div`,0)(1,`h3`),K(2,` Pipes in template `),R(3,`span`,1),K(4),z()(),A(5,sD,5,0)(6,cD,2,0,`p`,2),z()),e&2){let e=W();D(4),q(e.rows().length),D(),j(e.rows().length?5:6)}}function uD(e,t,n){let r=(t?e?.pages?.find(e=>e.pageId===t):void 0)?.pipes??e?.pipes??[],i=[];for(let e of r){let t=e.components.find(e=>e.name===n);t&&i.push({name:e.name,isPure:e.isPure,uses:t.count,...e.call?{calls:e.call.callCount}:{},churn:!!e.churn,stale:!!e.stale})}return i.sort((e,t)=>e.name.localeCompare(t.name))}var dD=class e{plural=ZE;destroyRef=x(Cs);rpc=$(null);pageId=$(void 0);component=$.required();canShowPipes=$(!1);showPipe=uv();snapshot=T(void 0);loaded=T(!1);rows=X(()=>uD(this.snapshot(),this.pageId(),this.component()));unsubscribe;constructor(){E(()=>{let e=this.rpc();e&&this.subscribe(e)}),this.destroyRef.onDestroy(()=>this.unsubscribe?.())}async subscribe(e){try{let t=await e.scope(`pangular`).rpc.sharedState(`pipe-usage`);if(this.destroyRef.destroyed)return;let n=e=>{this.snapshot.set(e),this.loaded.set(!0)};n(t.value()),this.unsubscribe?.(),this.unsubscribe=t.on(`updated`,n)}catch{}}static ɵfac=function(t){return new(t||e)};static ɵcmp=O({type:e,selectors:[[`app-component-pipes`]],inputs:{rpc:[1,`rpc`],pageId:[1,`pageId`],component:[1,`component`],canShowPipes:[1,`canShowPipes`]},outputs:{showPipe:`showPipe`},decls:1,vars:1,consts:[[1,`block`],[1,`pill`],[1,`empty-line`],[1,`chips`],[1,`hint`],[`type`,`button`,1,`pipe`],[1,`pipe`],[`type`,`button`,1,`pipe`,3,`click`],[1,`sr-only`],[1,`mono`],[1,`note`],[1,`flag`,`warn`]],template:function(e,t){e&1&&A(0,lD,7,2,`div`,0),e&2&&j(t.loaded()?0:-1)},styles:[`[_nghost-%COMP%] { +}`]})},FE=`pangular:panel-action-result`,IE=6e3,LE=0;function RE(e=window){return e.location.protocol===`chrome-extension:`&&e.parent!==e}function zE(e,t=window){let n=`pa-${Date.now().toString(36)}-${++LE}`;return new Promise(r=>{let i=e=>{t.clearTimeout(o),t.removeEventListener(`message`,a),r(e)},a=({source:e,origin:r,data:a})=>{if(e!==t.parent||r!==t.location.origin)return;let o=a;if(o?.type!==FE||o.requestId!==n)return;let{opened:s,error:c}=a;i({ok:o.ok===!0,...s===`file`||s===`class`?{opened:s}:{},...typeof c==`string`?{error:c}:{}})},o=t.setTimeout(()=>i({ok:!1,error:`timeout`}),IE);t.addEventListener(`message`,a),t.parent.postMessage({...e,requestId:n},t.location.origin)})}var BE=class e{available=RE();reveal(e,t){return zE({type:`pangular:reveal-element`,pageId:e,id:t})}openSource(e,t,n){return zE({type:`pangular:open-source`,pageId:e,id:t,...n?{file:n.file,line:n.line}:{}})}static ɵfac=function(t){return new(t||e)};static ɵprov=kl({token:e,factory:e.ɵfac})};function VE(e){return new Date(e).toLocaleTimeString()}var HE=/[ \t\n\r]/;function UE(e){let t=e.trim(),n;try{n=JSON.parse(t)}catch{return null}if(typeof n!=`object`||!n)return null;let r=``,i=0,a=()=>`\n${` `.repeat(i)}`;for(let e=0;et.name;function KE(e,t){e&1&&(R(0,`span`,11),K(1,`impure`),z())}function qE(e,t){e&1&&(R(0,`span`,11),K(1,`churning`),z())}function JE(e,t){e&1&&(R(0,`span`,11),K(1,`stale?`),z())}function YE(e,t){if(e&1&&(R(0,`span`,10),K(1),z()),e&2){let e=W(2).$implicit,t=W(3);D(),q(t.plural(e.calls,`call`))}}function XE(e,t){if(e&1){let e=B();R(0,`button`,7),U(`click`,function(){S(e);let t=W().$implicit;return C(W(3).showPipe.emit(t.name))}),R(1,`span`,8),K(2,`Show in Pipes:`),z(),R(3,`span`,9),K(4),z(),R(5,`span`,10),K(6),z(),A(7,KE,2,0,`span`,11),A(8,qE,2,0,`span`,11),A(9,JE,2,0,`span`,11),A(10,YE,2,1,`span`,10),z()}if(e&2){let e=W().$implicit;D(4),q(e.name),D(2),J(``,e.uses,`×`),D(),j(e.isPure?-1:7),D(),j(e.churn?8:-1),D(),j(e.stale?9:-1),D(),j(e.calls===void 0?-1:10)}}function ZE(e,t){e&1&&(R(0,`span`,11),K(1,`impure`),z())}function QE(e,t){if(e&1&&(R(0,`span`,6)(1,`span`,9),K(2),z(),R(3,`span`,10),K(4),z(),A(5,ZE,2,0,`span`,11),z()),e&2){let e=W().$implicit;D(2),q(e.name),D(2),J(``,e.uses,`×`),D(),j(e.isPure?-1:5)}}function $E(e,t){if(e&1&&(R(0,`li`),A(1,XE,11,6,`button`,5)(2,QE,6,3,`span`,6),z()),e&2){let e=W(3);D(),j(e.canShowPipes()?1:2)}}function eD(e,t){if(e&1&&(R(0,`ul`,3),M(1,$E,3,1,`li`,null,GE),z(),R(3,`p`,4),K(4,` Call counts cover every component that uses the pipe. Record calls in the Pipes tab to see them. `),z()),e&2){let e=W(2);D(),N(e.rows())}}function tD(e,t){e&1&&(R(0,`p`,2),K(1,`No pipe is in use in the rendered part of its template.`),z())}function nD(e,t){if(e&1&&(R(0,`div`,0)(1,`h3`),K(2,` Pipes in template `),R(3,`span`,1),K(4),z()(),A(5,eD,5,0)(6,tD,2,0,`p`,2),z()),e&2){let e=W();D(4),q(e.rows().length),D(),j(e.rows().length?5:6)}}function rD(e,t,n){let r=(t?e?.pages?.find(e=>e.pageId===t):void 0)?.pipes??e?.pipes??[],i=[];for(let e of r){let t=e.components.find(e=>e.name===n);t&&i.push({name:e.name,isPure:e.isPure,uses:t.count,...e.call?{calls:e.call.callCount}:{},churn:!!e.churn,stale:!!e.stale})}return i.sort((e,t)=>e.name.localeCompare(t.name))}var iD=class e{plural=WE;destroyRef=x(Ss);rpc=$(null);pageId=$(void 0);component=$.required();canShowPipes=$(!1);showPipe=cv();snapshot=T(void 0);loaded=T(!1);rows=X(()=>rD(this.snapshot(),this.pageId(),this.component()));unsubscribe;constructor(){E(()=>{let e=this.rpc();e&&this.subscribe(e)}),this.destroyRef.onDestroy(()=>this.unsubscribe?.())}async subscribe(e){try{let t=await e.scope(`pangular`).rpc.sharedState(`pipe-usage`);if(this.destroyRef.destroyed)return;let n=e=>{this.snapshot.set(e),this.loaded.set(!0)};n(t.value()),this.unsubscribe?.(),this.unsubscribe=t.on(`updated`,n)}catch{}}static ɵfac=function(t){return new(t||e)};static ɵcmp=O({type:e,selectors:[[`app-component-pipes`]],inputs:{rpc:[1,`rpc`],pageId:[1,`pageId`],component:[1,`component`],canShowPipes:[1,`canShowPipes`]},outputs:{showPipe:`showPipe`},decls:1,vars:1,consts:[[1,`block`],[1,`pill`],[1,`empty-line`],[1,`chips`],[1,`hint`],[`type`,`button`,1,`pipe`],[1,`pipe`],[`type`,`button`,1,`pipe`,3,`click`],[1,`sr-only`],[1,`mono`],[1,`note`],[1,`flag`,`warn`]],template:function(e,t){e&1&&A(0,nD,7,2,`div`,0),e&2&&j(t.loaded()?0:-1)},styles:[`[_nghost-%COMP%] { display: block; } @@ -436,7 +436,7 @@ button.pipe[_ngcontent-%COMP%]:focus-visible { button.pipe[_ngcontent-%COMP%] { transition: none; } -}`]})};function fD(e){let t=e?.pages;return t&&typeof t==`object`?t:{}}function pD(e){let t=x(Cs),n=T({}),r=null,i=null,a=async e=>{i?.(),i=null,r=e;try{let a=await e.scope(`pangular`).rpc.sharedState(`page-angular`);if(t.destroyed||r!==e)return;let o=e=>n.set(fD(e));o(a.value()),i=a.on(`updated`,o)}catch{r===e&&n.set({})}};return E(()=>{let t=e();t&&t!==r&&Z(()=>void a(t))}),t.onDestroy(()=>i?.()),n.asReadonly()}function mD(e,t){if(t)return e[t]??null;let n=null;for(let t of Object.values(e))(!n||t.reportedAt>n.reportedAt)&&(n=t);return n}var hD=[`*`];function gD(e,t){if(e&1&&(R(0,`div`,1)(1,`p`,2),K(2),z(),R(3,`p`,3),K(4),Mg(5),R(6,`a`,4),K(7,`Supported versions`),z()()()),e&2){let e=W();G(`compact`,e.compact()),D(2),q(e.title()),D(2),J(` `,t,` `),D(2),V(`href`,e.docsUrl,Ou)}}var _D=`https://pangular-inspector.dev/getting-started/installation/#supported-angular-versions`,vD=class e{page=$(null);capability=$.required();missing=$(!1,{transform:xv});compact=$(!1,{transform:xv});docsUrl=_D;text=X(()=>{let e=this.page();return!this.missing()&&!$w(e,this.capability())?null:eT(this.capability(),e?.version)});title=X(()=>{let e=this.page()?.version;return e?`Not available on Angular ${Xw(e)}`:`Not available on this page`});static ɵfac=function(t){return new(t||e)};static ɵcmp=O({type:e,selectors:[[`app-angular-unavailable`]],inputs:{page:[1,`page`],capability:[1,`capability`],missing:[1,`missing`],compact:[1,`compact`]},ngContentSelectors:hD,decls:1,vars:1,consts:[[`role`,`status`,1,`unavailable`,3,`compact`],[`role`,`status`,1,`unavailable`],[1,`title`],[1,`hint`],[`target`,`_blank`,`rel`,`noopener noreferrer`,3,`href`]],template:function(e,t){if(e&1&&(jg(),A(0,gD,8,5,`div`,0)),e&2){let e;j((e=t.text())?0:-1,e)}},styles:[`[_nghost-%COMP%] { +}`]})};function aD(e){let t=e?.pages;return t&&typeof t==`object`?t:{}}function oD(e){let t=x(Ss),n=T({}),r=null,i=null,a=async e=>{i?.(),i=null,r=e;try{let a=await e.scope(`pangular`).rpc.sharedState(`page-angular`);if(t.destroyed||r!==e)return;let o=e=>n.set(aD(e));o(a.value()),i=a.on(`updated`,o)}catch{r===e&&n.set({})}};return E(()=>{let t=e();t&&t!==r&&Z(()=>void a(t))}),t.onDestroy(()=>i?.()),n.asReadonly()}function sD(e,t){if(t)return e[t]??null;let n=null;for(let t of Object.values(e))(!n||t.reportedAt>n.reportedAt)&&(n=t);return n}var cD=[`*`];function lD(e,t){if(e&1&&(R(0,`div`,1)(1,`p`,2),K(2),z(),R(3,`p`,3),K(4),Ag(5),R(6,`a`,4),K(7,`Supported versions`),z()()()),e&2){let e=W();G(`compact`,e.compact()),D(2),q(e.title()),D(2),J(` `,t,` `),D(2),V(`href`,e.docsUrl,Du)}}var uD=`https://pangular-inspector.dev/getting-started/installation/#supported-angular-versions`,dD=class e{page=$(null);capability=$.required();missing=$(!1,{transform:yv});compact=$(!1,{transform:yv});docsUrl=uD;text=X(()=>{let e=this.page();return!this.missing()&&!Kw(e,this.capability())?null:qw(this.capability(),e?.version)});title=X(()=>{let e=this.page()?.version;return e?`Not available on Angular ${Uw(e)}`:`Not available on this page`});static ɵfac=function(t){return new(t||e)};static ɵcmp=O({type:e,selectors:[[`app-angular-unavailable`]],inputs:{page:[1,`page`],capability:[1,`capability`],missing:[1,`missing`],compact:[1,`compact`]},ngContentSelectors:cD,decls:1,vars:1,consts:[[`role`,`status`,1,`unavailable`,3,`compact`],[`role`,`status`,1,`unavailable`],[1,`title`],[1,`hint`],[`target`,`_blank`,`rel`,`noopener noreferrer`,3,`href`]],template:function(e,t){if(e&1&&(kg(),A(0,lD,8,5,`div`,0)),e&2){let e;j((e=t.text())?0:-1,e)}},styles:[`[_nghost-%COMP%] { display: block; } @@ -483,7 +483,7 @@ a[_ngcontent-%COMP%] { a[_ngcontent-%COMP%]:focus-visible { outline: 2px solid var(--%NS%accent); outline-offset: 2px; -}`]})};function yD(e){return e?.platform===`angular-native`}function bD(e){return yD(e)||e?.platform===`nativescript`}function xD(e,t){let n=Object.values(e??{}).filter(yD);if(t&&n.some(e=>e.pageId===t))return t;let r=null;for(let e of n)(!r||e.reportedAt>r.reportedAt)&&(r=e);return r?.pageId??null}var SD=[`trigger`],CD=[`list`],wD=(e,t)=>t.value;function TD(e,t){if(e&1&&(R(0,`span`,4),K(1),z()),e&2){let e=W();D(),q(e.current().hint)}}function ED(e,t){if(e&1&&(R(0,`span`,15),K(1),z()),e&2){let e=W().$implicit;D(),q(e.hint)}}function DD(e,t){if(e&1){let e=B();R(0,`li`,11),U(`pointerenter`,function(){let t=S(e).$index;return C(W(2).active.set(t))})(`pointerdown`,function(e){return e.preventDefault()})(`click`,function(){let t=S(e).$index;return C(W(2).choose(t))}),w(),R(1,`svg`,12),pg(2,`path`,13),z(),ps(),R(3,`span`,14),K(4),z(),A(5,ED,2,1,`span`,15),z()}if(e&2){let e=t.$implicit,n=t.$index,r=W(2);G(`active`,n===r.active())(`selected`,e.value===r.value()),k(`id`,r.uid+`-opt-`+n)(`aria-selected`,e.value===r.value())(`aria-disabled`,e.disabled||null),D(4),q(e.label),D(),j(e.hint?5:-1)}}function OD(e,t){if(e&1&&(R(0,`li`,10),K(1),z()),e&2){let e=W(2);D(),q(e.emptyText())}}function kD(e,t){if(e&1&&(R(0,`ul`,8,1),Uh(`list-in`),U(`pointerdown`,function(e){return e.preventDefault()}),M(2,DD,6,9,`li`,9,wD,!1,OD,2,1,`li`,10),z()),e&2){let e=W();G(`up`,e.dropUp()),k(`id`,e.uid+`-list`)(`aria-labelledby`,e.labelledBy()||e.uid+`-trigger`),D(2),N(e.options())}}var AD=0,jD=class e{options=$.required();value=hv(null);placeholder=$(`Select…`);ariaLabel=$(``);labelledBy=$(``);describedBy=$(``);disabled=$(!1);emptyText=$(`Nothing to choose`);uid=`app-select-${++AD}`;open=T(!1);active=T(-1);dropUp=T(!1);current=X(()=>this.options().find(e=>e.value===this.value())??null);host=x(Nl);injector=x(xs);trigger=_v.required(`trigger`);list=_v(`list`);typed=``;typedAt=0;toggle(){this.open()?this.close():this.show()}choose(e){let t=this.options()[e];t&&!t.disabled&&(this.value.set(t.value),this.close(),this.trigger().nativeElement.focus())}onKey(e){let t=this.options(),n=this.open();switch(e.key){case`ArrowDown`:case`ArrowUp`:if(e.preventDefault(),!n){this.show();return}this.move(e.key===`ArrowDown`?1:-1);return;case`Home`:case`End`:if(!n)return;e.preventDefault(),this.setActive(e.key===`Home`?this.firstEnabled(0,1):this.firstEnabled(t.length-1,-1));return;case`Enter`:case` `:e.preventDefault(),n&&this.active()>=0?this.choose(this.active()):this.show();return;case`Escape`:if(!n)return;e.preventDefault(),e.stopPropagation(),this.close();return;case`Tab`:n&&this.close();return;default:e.key.length===1&&!e.metaKey&&!e.ctrlKey&&!e.altKey&&this.typeAhead(e.key)}}onBlur(e){let t=e.relatedTarget;t&&this.host.nativeElement.contains(t)||this.close()}onOutside(e){this.open()&&!this.host.nativeElement.contains(e.target)&&this.close()}show(){if(this.disabled())return;let e=this.host.nativeElement.getBoundingClientRect(),t=window.innerHeight-e.bottom;this.dropUp.set(t<220&&e.top>t);let n=this.options().findIndex(e=>e.value===this.value());this.open.set(!0),this.setActive(n>=0?n:this.firstEnabled(0,1))}close(){this.open.set(!1),this.active.set(-1)}move(e){let t=this.firstEnabled(this.active()+e,e);t>=0&&this.setActive(t)}firstEnabled(e,t){let n=this.options();for(let r=e;r>=0&&r{(this.list()?.nativeElement.querySelector(`#${this.uid}-opt-${e}`))?.scrollIntoView({block:`nearest`})},{injector:this.injector})}typeAhead(e){let t=performance.now();this.typed=t-this.typedAt>600?e.toLowerCase():this.typed+e.toLowerCase(),this.typedAt=t;let n=this.options().findIndex(e=>!e.disabled&&e.label.toLowerCase().startsWith(this.typed));n<0||(this.open()?this.setActive(n):this.value.set(this.options()[n].value))}static ɵfac=function(t){return new(t||e)};static ɵcmp=O({type:e,selectors:[[`app-select`]],viewQuery:function(e,t){e&1&&Pg(t.trigger,SD,5)(t.list,CD,5),e&2&&Fg(2)},hostAttrs:[1,`app-select`],hostVars:2,hostBindings:function(e,t){e&1&&H(`pointerdown`,function(e){return t.onOutside(e)},Au),e&2&&G(`open`,t.open())},inputs:{options:[1,`options`],value:[1,`value`],placeholder:[1,`placeholder`],ariaLabel:[1,`ariaLabel`],labelledBy:[1,`labelledBy`],describedBy:[1,`describedBy`],disabled:[1,`disabled`],emptyText:[1,`emptyText`]},outputs:{value:`valueChange`},decls:8,vars:13,consts:[[`trigger`,``],[`list`,``],[`type`,`button`,`role`,`combobox`,`aria-haspopup`,`listbox`,1,`trigger`,3,`click`,`keydown`,`blur`,`disabled`],[1,`value`],[1,`value-hint`],[`viewBox`,`0 0 24 24`,`aria-hidden`,`true`,1,`chevron`],[`d`,`m6 9 6 6 6-6`],[`role`,`listbox`,`tabindex`,`-1`,1,`list`,3,`up`],[`role`,`listbox`,`tabindex`,`-1`,1,`list`,3,`pointerdown`],[`role`,`option`,3,`active`,`selected`],[`role`,`option`,`aria-disabled`,`true`,1,`empty`],[`role`,`option`,3,`pointerenter`,`pointerdown`,`click`],[`viewBox`,`0 0 24 24`,`aria-hidden`,`true`,1,`check`],[`d`,`m5 12 5 5 9-10`],[1,`label`],[1,`hint`]],template:function(e,t){e&1&&(R(0,`button`,2,0),U(`click`,function(){return t.toggle()})(`keydown`,function(e){return t.onKey(e)})(`blur`,function(e){return t.onBlur(e)}),R(2,`span`,3),K(3),z(),A(4,TD,2,1,`span`,4),w(),R(5,`svg`,5),pg(6,`path`,6),z()(),A(7,kD,5,5,`ul`,7)),e&2&&(V(`disabled`,t.disabled()),k(`id`,t.uid+`-trigger`)(`aria-controls`,t.uid+`-list`)(`aria-expanded`,t.open())(`aria-label`,t.ariaLabel()||null)(`aria-labelledby`,t.labelledBy()||null)(`aria-describedby`,t.describedBy()||null)(`aria-activedescendant`,t.open()&&t.active()>=0?t.uid+`-opt-`+t.active():null),D(2),G(`placeholder`,!t.current()),D(),J(` `,t.current()?.label??t.placeholder(),` `),D(),j(t.current()?.hint?4:-1),D(3),j(t.open()?7:-1))},styles:[`[_nghost-%COMP%] { +}`]})};function fD(e){return e?.platform===`angular-native`}function pD(e){return fD(e)||e?.platform===`nativescript`}function mD(e,t){let n=Object.values(e??{}).filter(fD);if(t&&n.some(e=>e.pageId===t))return t;let r=null;for(let e of n)(!r||e.reportedAt>r.reportedAt)&&(r=e);return r?.pageId??null}var hD=[`trigger`],gD=[`list`],_D=(e,t)=>t.value;function vD(e,t){if(e&1&&(R(0,`span`,4),K(1),z()),e&2){let e=W();D(),q(e.current().hint)}}function yD(e,t){if(e&1&&(R(0,`span`,15),K(1),z()),e&2){let e=W().$implicit;D(),q(e.hint)}}function bD(e,t){if(e&1){let e=B();R(0,`li`,11),U(`pointerenter`,function(){let t=S(e).$index;return C(W(2).active.set(t))})(`pointerdown`,function(e){return e.preventDefault()})(`click`,function(){let t=S(e).$index;return C(W(2).choose(t))}),w(),R(1,`svg`,12),dg(2,`path`,13),z(),fs(),R(3,`span`,14),K(4),z(),A(5,yD,2,1,`span`,15),z()}if(e&2){let e=t.$implicit,n=t.$index,r=W(2);G(`active`,n===r.active())(`selected`,e.value===r.value()),k(`id`,r.uid+`-opt-`+n)(`aria-selected`,e.value===r.value())(`aria-disabled`,e.disabled||null),D(4),q(e.label),D(),j(e.hint?5:-1)}}function xD(e,t){if(e&1&&(R(0,`li`,10),K(1),z()),e&2){let e=W(2);D(),q(e.emptyText())}}function SD(e,t){if(e&1&&(R(0,`ul`,8,1),Vh(`list-in`),U(`pointerdown`,function(e){return e.preventDefault()}),M(2,bD,6,9,`li`,9,_D,!1,xD,2,1,`li`,10),z()),e&2){let e=W();G(`up`,e.dropUp()),k(`id`,e.uid+`-list`)(`aria-labelledby`,e.labelledBy()||e.uid+`-trigger`),D(2),N(e.options())}}var CD=0,wD=class e{options=$.required();value=pv(null);placeholder=$(`Select…`);ariaLabel=$(``);labelledBy=$(``);describedBy=$(``);disabled=$(!1);emptyText=$(`Nothing to choose`);uid=`app-select-${++CD}`;open=T(!1);active=T(-1);dropUp=T(!1);current=X(()=>this.options().find(e=>e.value===this.value())??null);host=x(Ml);injector=x(bs);trigger=hv.required(`trigger`);list=hv(`list`);typed=``;typedAt=0;toggle(){this.open()?this.close():this.show()}choose(e){let t=this.options()[e];t&&!t.disabled&&(this.value.set(t.value),this.close(),this.trigger().nativeElement.focus())}onKey(e){let t=this.options(),n=this.open();switch(e.key){case`ArrowDown`:case`ArrowUp`:if(e.preventDefault(),!n){this.show();return}this.move(e.key===`ArrowDown`?1:-1);return;case`Home`:case`End`:if(!n)return;e.preventDefault(),this.setActive(e.key===`Home`?this.firstEnabled(0,1):this.firstEnabled(t.length-1,-1));return;case`Enter`:case` `:e.preventDefault(),n&&this.active()>=0?this.choose(this.active()):this.show();return;case`Escape`:if(!n)return;e.preventDefault(),e.stopPropagation(),this.close();return;case`Tab`:n&&this.close();return;default:e.key.length===1&&!e.metaKey&&!e.ctrlKey&&!e.altKey&&this.typeAhead(e.key)}}onBlur(e){let t=e.relatedTarget;t&&this.host.nativeElement.contains(t)||this.close()}onOutside(e){this.open()&&!this.host.nativeElement.contains(e.target)&&this.close()}show(){if(this.disabled())return;let e=this.host.nativeElement.getBoundingClientRect(),t=window.innerHeight-e.bottom;this.dropUp.set(t<220&&e.top>t);let n=this.options().findIndex(e=>e.value===this.value());this.open.set(!0),this.setActive(n>=0?n:this.firstEnabled(0,1))}close(){this.open.set(!1),this.active.set(-1)}move(e){let t=this.firstEnabled(this.active()+e,e);t>=0&&this.setActive(t)}firstEnabled(e,t){let n=this.options();for(let r=e;r>=0&&r{(this.list()?.nativeElement.querySelector(`#${this.uid}-opt-${e}`))?.scrollIntoView({block:`nearest`})},{injector:this.injector})}typeAhead(e){let t=performance.now();this.typed=t-this.typedAt>600?e.toLowerCase():this.typed+e.toLowerCase(),this.typedAt=t;let n=this.options().findIndex(e=>!e.disabled&&e.label.toLowerCase().startsWith(this.typed));n<0||(this.open()?this.setActive(n):this.value.set(this.options()[n].value))}static ɵfac=function(t){return new(t||e)};static ɵcmp=O({type:e,selectors:[[`app-select`]],viewQuery:function(e,t){e&1&&Mg(t.trigger,hD,5)(t.list,gD,5),e&2&&Ng(2)},hostAttrs:[1,`app-select`],hostVars:2,hostBindings:function(e,t){e&1&&H(`pointerdown`,function(e){return t.onOutside(e)},ku),e&2&&G(`open`,t.open())},inputs:{options:[1,`options`],value:[1,`value`],placeholder:[1,`placeholder`],ariaLabel:[1,`ariaLabel`],labelledBy:[1,`labelledBy`],describedBy:[1,`describedBy`],disabled:[1,`disabled`],emptyText:[1,`emptyText`]},outputs:{value:`valueChange`},decls:8,vars:13,consts:[[`trigger`,``],[`list`,``],[`type`,`button`,`role`,`combobox`,`aria-haspopup`,`listbox`,1,`trigger`,3,`click`,`keydown`,`blur`,`disabled`],[1,`value`],[1,`value-hint`],[`viewBox`,`0 0 24 24`,`aria-hidden`,`true`,1,`chevron`],[`d`,`m6 9 6 6 6-6`],[`role`,`listbox`,`tabindex`,`-1`,1,`list`,3,`up`],[`role`,`listbox`,`tabindex`,`-1`,1,`list`,3,`pointerdown`],[`role`,`option`,3,`active`,`selected`],[`role`,`option`,`aria-disabled`,`true`,1,`empty`],[`role`,`option`,3,`pointerenter`,`pointerdown`,`click`],[`viewBox`,`0 0 24 24`,`aria-hidden`,`true`,1,`check`],[`d`,`m5 12 5 5 9-10`],[1,`label`],[1,`hint`]],template:function(e,t){e&1&&(R(0,`button`,2,0),U(`click`,function(){return t.toggle()})(`keydown`,function(e){return t.onKey(e)})(`blur`,function(e){return t.onBlur(e)}),R(2,`span`,3),K(3),z(),A(4,vD,2,1,`span`,4),w(),R(5,`svg`,5),dg(6,`path`,6),z()(),A(7,SD,5,5,`ul`,7)),e&2&&(V(`disabled`,t.disabled()),k(`id`,t.uid+`-trigger`)(`aria-controls`,t.uid+`-list`)(`aria-expanded`,t.open())(`aria-label`,t.ariaLabel()||null)(`aria-labelledby`,t.labelledBy()||null)(`aria-describedby`,t.describedBy()||null)(`aria-activedescendant`,t.open()&&t.active()>=0?t.uid+`-opt-`+t.active():null),D(2),G(`placeholder`,!t.current()),D(),J(` `,t.current()?.label??t.placeholder(),` `),D(),j(t.current()?.hint?4:-1),D(3),j(t.open()?7:-1))},styles:[`[_nghost-%COMP%] { position: relative; display: inline-flex; min-width: 0; @@ -678,7 +678,7 @@ li.selected[_ngcontent-%COMP%] .check[_ngcontent-%COMP%] { .chevron[_ngcontent-%COMP%] { transition: none; } -}`]})};function MD(e,t){let n=Kw(t);if(qw(n))return{nodes:e,matches:0};let r=0,i=e=>e.flatMap(e=>{let t=Jw(e,n);t&&r++;let a=i(e.children);return t||a.length?[{...e,children:a}]:[]});return{nodes:i(e),matches:r}}function ND(e){return e.flatMap(e=>e.kind===`directive`?ND(e.children):[{...e,children:ND(e.children)}])}function PD(e){return(e.attributes?.length?e.attributes:e.directives??[e.name]).map(e=>`[${e}]`).join(` `)}var FD={hydrated:`Hydrated`,skipped:`Skipped`,mismatched:`Mismatch`,client:`Client`};function ID(e){return FD[e]}function LD(e,t,n,r=!1,i=0){let a=r?`${e}+`:`${e}`;if(n)return`${t} of ${r?`${e+i}+`:e+i}`;let o=i?` · ${i} directive ${i===1?`host`:`hosts`}`:``;return`${a} ${e===1&&!r?`instance`:`instances`}${o}`}function RD(e,t,n,r=!1,i=0){if(!n.trim())return``;if(!t)return`No components match.`;let a=e+i,o=r?`${a}+`:`${a}`,s=!r&&a===1;return`${t} of ${o} ${i?s?`row`:`rows`:s?`instance`:`instances`} match.`}function zD(e){let t=e?.components,n=e?.depth;return t&&n?`Showing the first ${t} component instances, and none nested more than ${n} elements deep. Others are not listed or searchable.`:t?`Showing the first ${t} component instances. Others are not listed or searchable.`:n?`Components nested more than ${n} elements deep are not listed or searchable.`:`The page has more components than the tree shows.`}function BD(e,t){let n=t?.detail?.id??null,r=t?.pageId??null;if(r!==e.pageId)return{pageId:r,selectedId:n,detailId:n,destroyed:null};let i=e.selectedId;return n&&n!==e.detailId&&n!==i&&(i=n),i&&t&&!t.truncated&&!VD(t.roots,i)?{pageId:r,selectedId:null,detailId:n,destroyed:i}:{pageId:r,selectedId:i,detailId:n,destroyed:null}}function VD(e,t){return e.some(e=>e.id===t||VD(e.children,t))}function HD(e,t,n){let r=e.indexOf(n);if(r<0)return null;for(let n=r+1;n=0;n--)if(t.has(e[n]))return e[n];return null}var UD=(e,t)=>t.key,WD=(e,t)=>t.id;function GD(e,t){e&1&&(R(0,`p`,2),K(1,` The HTML came from the server, but no component was hydrated, so the app rendered again on the client. Add `),R(2,`code`),K(3,`provideClientHydration()`),z(),K(4,` and use a development build to see each component's status. `),z())}function KD(e,t){if(e&1&&(R(0,`li`)(1,`span`,9),K(2),z(),K(3),z()),e&2){let e=t.$implicit;i_(`count count-`+e.key),D(2),q(e.value),D(),J(` `,e.label,` `)}}function qD(e,t){if(e&1&&(R(0,`span`,15),K(1,`Expected `),R(2,`code`),K(3),z()()),e&2){let e=W().$implicit;D(3),q(e.expected)}}function JD(e,t){if(e&1&&(R(0,`span`,15),K(1,`Found `),R(2,`code`),K(3),z()()),e&2){let e=W().$implicit;D(3),q(e.actual)}}function YD(e,t){if(e&1){let e=B();R(0,`li`)(1,`button`,12),U(`click`,function(){let t=S(e).$implicit;return C(W(4).showNode.emit(t.id))})(`focus`,function(){let t=S(e).$implicit;return C(W(4).highlight.emit(t.id))})(`blur`,function(){return S(e),C(W(4).highlight.emit(null))})(`mouseenter`,function(){let t=S(e).$implicit;return C(W(4).highlight.emit(t.id))})(`mouseleave`,function(){return S(e),C(W(4).highlight.emit(null))}),R(2,`span`,13),K(3),z(),R(4,`span`,14),K(5),z(),A(6,qD,4,1,`span`,15),A(7,JD,4,1,`span`,15),z()()}if(e&2){let e=t.$implicit;D(3),q(e.name),D(2),J(`<`,e.tag,`>`),D(),j(e.expected?6:-1),D(),j(e.actual?7:-1)}}function XD(e,t){if(e&1&&(R(0,`h3`,10),K(1,`Mismatches`),z(),R(2,`ul`,11),M(3,YD,8,4,`li`,null,WD),z()),e&2){let e=W(2);D(3),N(e.mismatches)}}function ZD(e,t){if(e&1){let e=B();R(0,`div`,3)(1,`ul`,4),M(2,KD,4,4,`li`,5,UD),z(),R(4,`button`,6),U(`click`,function(){return S(e),C(W(2).toggleOverlay())}),w(),R(5,`svg`,7),pg(6,`rect`,8),z(),K(7,` Outline on page `),z()(),A(8,XD,5,0)}if(e&2){let e=W(),t=W();D(2),N(t.counts()),D(2),k(`aria-pressed`,t.overlayOn()),D(4),j(e.mismatches.length?8:-1)}}function QD(e,t){e&1&&A(0,GD,5,0,`p`,2)(1,ZD,9,2),e&2&&j(+!!t.hydrated)}function $D(e,t){e&1&&(R(0,`p`,2),K(1,` This page was not rendered on the server, so there is nothing to hydrate. With server-side rendering and `),R(2,`code`),K(3,`provideClientHydration()`),z(),K(4,`, each component shows whether it was hydrated, skipped or mismatched. `),z())}var eO=class e{report=$(void 0);overlay=uv();showNode=uv();highlight=uv();overlayOn=Q(()=>this.report()?.overlay===!0);counts=X(()=>{let e=this.report()?.counts;return e?[{key:`hydrated`,label:`hydrated`,value:e.hydrated},{key:`skipped`,label:`skipped`,value:e.skipped},{key:`mismatched`,label:`mismatched`,value:e.mismatched},{key:`client`,label:`created on the client`,value:e.client},{key:`dehydratedBlocks`,label:e.dehydratedBlocks===1?`dehydrated @defer block`:`dehydrated @defer blocks`,value:e.dehydratedBlocks}]:[]});toggleOverlay(){let e=!this.overlayOn();this.overlayOn.set(e),this.overlay.emit(e)}static ɵfac=function(t){return new(t||e)};static ɵcmp=O({type:e,selectors:[[`app-hydration-section`]],inputs:{report:[1,`report`]},outputs:{overlay:`overlay`,showNode:`showNode`,highlight:`highlight`},decls:5,vars:1,consts:[[`aria-labelledby`,`ct-hydration-title`,1,`hydration`],[`id`,`ct-hydration-title`,1,`title`],[1,`empty`],[1,`summary`],[`aria-label`,`Hydration summary`,1,`counts`],[3,`class`],[`type`,`button`,1,`outline`,3,`click`],[`viewBox`,`0 0 24 24`,`aria-hidden`,`true`],[`x`,`3`,`y`,`3`,`width`,`18`,`height`,`18`,`rx`,`2`,`stroke-dasharray`,`4 3`],[1,`num`],[1,`label`],[1,`mismatches`],[`type`,`button`,1,`mismatch`,3,`click`,`focus`,`blur`,`mouseenter`,`mouseleave`],[1,`name`,`mono`],[1,`mono`,`muted`],[1,`detail-line`]],template:function(e,t){if(e&1&&(R(0,`section`,0)(1,`h2`,1),K(2,`Hydration`),z(),A(3,QD,2,1)(4,$D,5,0,`p`,2),z()),e&2){let e;D(3),j((e=t.report())?3:4,e)}},styles:[`.hydration[_ngcontent-%COMP%] { +}`]})};function TD(e,t){let n=zw(t);if(Bw(n))return{nodes:e,matches:0};let r=0,i=e=>e.flatMap(e=>{let t=Vw(e,n);t&&r++;let a=i(e.children);return t||a.length?[{...e,children:a}]:[]});return{nodes:i(e),matches:r}}function ED(e){return e.flatMap(e=>e.kind===`directive`?ED(e.children):[{...e,children:ED(e.children)}])}function DD(e){return(e.attributes?.length?e.attributes:e.directives??[e.name]).map(e=>`[${e}]`).join(` `)}var OD={hydrated:`Hydrated`,skipped:`Skipped`,mismatched:`Mismatch`,client:`Client`};function kD(e){return OD[e]}function AD(e,t,n,r=!1,i=0){let a=r?`${e}+`:`${e}`;if(n)return`${t} of ${r?`${e+i}+`:e+i}`;let o=i?` · ${i} directive ${i===1?`host`:`hosts`}`:``;return`${a} ${e===1&&!r?`instance`:`instances`}${o}`}function jD(e,t,n,r=!1,i=0){if(!n.trim())return``;if(!t)return`No components match.`;let a=e+i,o=r?`${a}+`:`${a}`,s=!r&&a===1;return`${t} of ${o} ${i?s?`row`:`rows`:s?`instance`:`instances`} match.`}function MD(e){let t=e?.components,n=e?.depth;return t&&n?`Showing the first ${t} component instances, and none nested more than ${n} elements deep. Others are not listed or searchable.`:t?`Showing the first ${t} component instances. Others are not listed or searchable.`:n?`Components nested more than ${n} elements deep are not listed or searchable.`:`The page has more components than the tree shows.`}function ND(e,t){let n=t?.detail?.id??null,r=t?.pageId??null;if(r!==e.pageId)return{pageId:r,selectedId:n,detailId:n,destroyed:null};let i=e.selectedId;return n&&n!==e.detailId&&n!==i&&(i=n),i&&t&&!t.truncated&&!PD(t.roots,i)?{pageId:r,selectedId:null,detailId:n,destroyed:i}:{pageId:r,selectedId:i,detailId:n,destroyed:null}}function PD(e,t){return e.some(e=>e.id===t||PD(e.children,t))}function FD(e,t,n){let r=e.indexOf(n);if(r<0)return null;for(let n=r+1;n=0;n--)if(t.has(e[n]))return e[n];return null}var ID=(e,t)=>t.key,LD=(e,t)=>t.id;function RD(e,t){e&1&&(R(0,`p`,2),K(1,` The HTML came from the server, but no component was hydrated, so the app rendered again on the client. Add `),R(2,`code`),K(3,`provideClientHydration()`),z(),K(4,` and use a development build to see each component's status. `),z())}function zD(e,t){if(e&1&&(R(0,`li`)(1,`span`,9),K(2),z(),K(3),z()),e&2){let e=t.$implicit;n_(`count count-`+e.key),D(2),q(e.value),D(),J(` `,e.label,` `)}}function BD(e,t){if(e&1&&(R(0,`span`,15),K(1,`Expected `),R(2,`code`),K(3),z()()),e&2){let e=W().$implicit;D(3),q(e.expected)}}function VD(e,t){if(e&1&&(R(0,`span`,15),K(1,`Found `),R(2,`code`),K(3),z()()),e&2){let e=W().$implicit;D(3),q(e.actual)}}function HD(e,t){if(e&1){let e=B();R(0,`li`)(1,`button`,12),U(`click`,function(){let t=S(e).$implicit;return C(W(4).showNode.emit(t.id))})(`focus`,function(){let t=S(e).$implicit;return C(W(4).highlight.emit(t.id))})(`blur`,function(){return S(e),C(W(4).highlight.emit(null))})(`mouseenter`,function(){let t=S(e).$implicit;return C(W(4).highlight.emit(t.id))})(`mouseleave`,function(){return S(e),C(W(4).highlight.emit(null))}),R(2,`span`,13),K(3),z(),R(4,`span`,14),K(5),z(),A(6,BD,4,1,`span`,15),A(7,VD,4,1,`span`,15),z()()}if(e&2){let e=t.$implicit;D(3),q(e.name),D(2),J(`<`,e.tag,`>`),D(),j(e.expected?6:-1),D(),j(e.actual?7:-1)}}function UD(e,t){if(e&1&&(R(0,`h3`,10),K(1,`Mismatches`),z(),R(2,`ul`,11),M(3,HD,8,4,`li`,null,LD),z()),e&2){let e=W(2);D(3),N(e.mismatches)}}function WD(e,t){if(e&1){let e=B();R(0,`div`,3)(1,`ul`,4),M(2,zD,4,4,`li`,5,ID),z(),R(4,`button`,6),U(`click`,function(){return S(e),C(W(2).toggleOverlay())}),w(),R(5,`svg`,7),dg(6,`rect`,8),z(),K(7,` Outline on page `),z()(),A(8,UD,5,0)}if(e&2){let e=W(),t=W();D(2),N(t.counts()),D(2),k(`aria-pressed`,t.overlayOn()),D(4),j(e.mismatches.length?8:-1)}}function GD(e,t){e&1&&A(0,RD,5,0,`p`,2)(1,WD,9,2),e&2&&j(+!!t.hydrated)}function KD(e,t){e&1&&(R(0,`p`,2),K(1,` This page was not rendered on the server, so there is nothing to hydrate. With server-side rendering and `),R(2,`code`),K(3,`provideClientHydration()`),z(),K(4,`, each component shows whether it was hydrated, skipped or mismatched. `),z())}var qD=class e{report=$(void 0);overlay=cv();showNode=cv();highlight=cv();overlayOn=Q(()=>this.report()?.overlay===!0);counts=X(()=>{let e=this.report()?.counts;return e?[{key:`hydrated`,label:`hydrated`,value:e.hydrated},{key:`skipped`,label:`skipped`,value:e.skipped},{key:`mismatched`,label:`mismatched`,value:e.mismatched},{key:`client`,label:`created on the client`,value:e.client},{key:`dehydratedBlocks`,label:e.dehydratedBlocks===1?`dehydrated @defer block`:`dehydrated @defer blocks`,value:e.dehydratedBlocks}]:[]});toggleOverlay(){let e=!this.overlayOn();this.overlayOn.set(e),this.overlay.emit(e)}static ɵfac=function(t){return new(t||e)};static ɵcmp=O({type:e,selectors:[[`app-hydration-section`]],inputs:{report:[1,`report`]},outputs:{overlay:`overlay`,showNode:`showNode`,highlight:`highlight`},decls:5,vars:1,consts:[[`aria-labelledby`,`ct-hydration-title`,1,`hydration`],[`id`,`ct-hydration-title`,1,`title`],[1,`empty`],[1,`summary`],[`aria-label`,`Hydration summary`,1,`counts`],[3,`class`],[`type`,`button`,1,`outline`,3,`click`],[`viewBox`,`0 0 24 24`,`aria-hidden`,`true`],[`x`,`3`,`y`,`3`,`width`,`18`,`height`,`18`,`rx`,`2`,`stroke-dasharray`,`4 3`],[1,`num`],[1,`label`],[1,`mismatches`],[`type`,`button`,1,`mismatch`,3,`click`,`focus`,`blur`,`mouseenter`,`mouseleave`],[1,`name`,`mono`],[1,`mono`,`muted`],[1,`detail-line`]],template:function(e,t){if(e&1&&(R(0,`section`,0)(1,`h2`,1),K(2,`Hydration`),z(),A(3,GD,2,1)(4,KD,5,0,`p`,2),z()),e&2){let e;D(3),j((e=t.report())?3:4,e)}},styles:[`.hydration[_ngcontent-%COMP%] { margin-top: 16px; } @@ -849,7 +849,7 @@ svg[_ngcontent-%COMP%] { button[_ngcontent-%COMP%] { transition: none; } -}`]})};function tO(e,t){if(e&1&&(R(0,`p`,0),K(1),R(2,`code`),K(3),z(),K(4,` to keep more. `),R(5,`a`,1),K(6,`About limits`),z()()),e&2){let e=W();D(),A_(` Showing the latest `,e.max(),` `,e.what(),`. `,e.dropped(),` older `,e.dropped()===1?`entry was`:`entries were`,` dropped. Raise `),D(2),J(`limits.`,e.limit()),D(2),V(`href`,e.docsUrl,Ou)}}var nO=`https://pangular-inspector.dev/getting-started/configuration/#limits`,rO=class e{dropped=$(0);max=$.required();what=$.required();limit=$.required();docsUrl=nO;static ɵfac=function(t){return new(t||e)};static ɵcmp=O({type:e,selectors:[[`app-limit-note`]],inputs:{dropped:[1,`dropped`],max:[1,`max`],what:[1,`what`],limit:[1,`limit`]},decls:1,vars:1,consts:[[1,`note`],[`target`,`_blank`,`rel`,`noopener noreferrer`,3,`href`]],template:function(e,t){e&1&&A(0,tO,7,6,`p`,0),e&2&&j(t.dropped()>0?0:-1)},styles:[`[_nghost-%COMP%] { +}`]})};function JD(e,t){if(e&1&&(R(0,`p`,0),K(1),R(2,`code`),K(3),z(),K(4,` to keep more. `),R(5,`a`,1),K(6,`About limits`),z()()),e&2){let e=W();D(),O_(` Showing the latest `,e.max(),` `,e.what(),`. `,e.dropped(),` older `,e.dropped()===1?`entry was`:`entries were`,` dropped. Raise `),D(2),J(`limits.`,e.limit()),D(2),V(`href`,e.docsUrl,Du)}}var YD=`https://pangular-inspector.dev/getting-started/configuration/#limits`,XD=class e{dropped=$(0);max=$.required();what=$.required();limit=$.required();docsUrl=YD;static ɵfac=function(t){return new(t||e)};static ɵcmp=O({type:e,selectors:[[`app-limit-note`]],inputs:{dropped:[1,`dropped`],max:[1,`max`],what:[1,`what`],limit:[1,`limit`]},decls:1,vars:1,consts:[[1,`note`],[`target`,`_blank`,`rel`,`noopener noreferrer`,3,`href`]],template:function(e,t){e&1&&A(0,JD,7,6,`p`,0),e&2&&j(t.dropped()>0?0:-1)},styles:[`[_nghost-%COMP%] { display: block; } @@ -876,7 +876,7 @@ a[_ngcontent-%COMP%] { a[_ngcontent-%COMP%]:focus-visible { outline: 2px solid var(--%NS%accent); outline-offset: 2px; -}`]})},iO=1e3;function aO(e){return typeof e==`number`&&Number.isFinite(e)&&e>0&&e<=iO?e:16}var oO=864e13,sO=200,cO=300,lO=100,uO=10,dO=100,fO=2e3,pO=2e3,mO=4e3,hO=1e3,gO=100,_O=3,vO=50,yO={component:`c`,hook:`h`,afterRender:`r`,output:`o`},bO=Object.values(yO),xO=e=>!!e&&typeof e==`object`&&!Array.isArray(e),SO=e=>typeof e==`number`&&Number.isFinite(e)&&e>=0?e:0,CO=(e,t)=>typeof e==`string`?e.slice(0,t):``,wO=e=>SO(e)>0?SO(e):void 0,TO=(e,t)=>Array.isArray(e)?e.slice(0,t):[];function EO(e){if(!xO(e))return null;let t=CO(e.name,sO);return t?{name:t,checks:SO(e.checks),ms:SO(e.ms)}:null}function DO(e,t){if(!Array.isArray(e)||e.length!==5)return null;let[n,r,i,a,o]=e;return typeof n!=`number`||!Number.isInteger(n)||n<0||n>=t||typeof r!=`number`||!Number.isFinite(r)||Math.abs(r)>1e7||typeof a!=`number`||!Number.isInteger(a)||a<0||a>hO||typeof o!=`string`||!bO.includes(o)?null:[n,r,SO(i),a,o]}function OO(e,t,n){if(!xO(e)||typeof e.id!=`number`)return null;let r=TO(e.components,uO).map(EO).filter(e=>!!e),i=CO(e.trigger,cO),a=TO(e.spans,40).map(e=>DO(e,t)).filter(e=>!!e),o=Array.isArray(e.spans)?e.spans.length-40:0,s=Math.floor(SO(e.droppedSpans))+Math.max(0,o),c={t:typeof e.t==`number`?SO(e.t):void 0,hookMs:wO(e.hookMs),afterRenderMs:wO(e.afterRenderMs),outputMs:wO(e.outputMs)},l=MO(e.cause),u=wO(e.refreshed),d=wO(e.unchanged);return{id:SO(e.id),at:SO(e.at),ms:SO(e.ms),passes:SO(e.passes),...i?{trigger:i}:{},checks:SO(e.checks),components:r,...Object.fromEntries(Object.entries(c).filter(([,e])=>e!==void 0)),...a.length?{spans:a}:{},...s?{droppedSpans:s}:{},...l?{cause:l}:{},...u?{refreshed:u}:{},...d?{unchanged:d}:{},...SO(e.ms)>n?{slow:!0}:{}}}var kO=[`event`,`http`,`timer`,`signal`,`effect`,`markForCheck`,`input`,`view`,`tick`,`zone`,`unknown`],AO={event:`Event`,http:`HTTP response`,timer:`Timer`,signal:`Signal write`,effect:`Effect`,markForCheck:`markForCheck`,input:`setInput`,view:`View change`,tick:`ApplicationRef.tick`,zone:`zone.js only`,unknown:`Unknown`},jO=e=>typeof e==`string`&&kO.includes(e);function MO(e){if(!xO(e)||!jO(e.kind))return;let t=[`component`,`listener`,`event`,`target`,`signal`,`task`],n={kind:e.kind};jO(e.via)&&(n.via=e.via);for(let r of t){let t=CO(e[r],sO);t&&(n[r]=t)}e.zone===!0&&(n.zone=!0);let r=TO(e.stack,_O).map(e=>CO(e,cO)).filter(Boolean);r.length&&(n.stack=r);let i=Math.floor(SO(e.more));return i&&(n.more=i),n}function NO(e){if(!xO(e))return null;let t=CO(e.name,sO);if(!t)return null;let n=e.strategy;return{name:t,refreshed:Math.floor(SO(e.refreshed)),unchanged:Math.floor(SO(e.unchanged)),...n===`OnPush`||n===`Eager`?{strategy:n}:{}}}function PO(e){if(!xO(e))return null;let t=CO(e.name,sO),n=CO(e.input,sO);if(!t||!n)return null;let r=CO(e.parent,sO);return{name:t,input:n,...r?{parent:r}:{},inPlace:Math.floor(SO(e.inPlace)),sameContents:Math.floor(SO(e.sameContents))}}function FO(e){if(!xO(e))return null;let t=CO(e.name,sO);if(!t)return null;let n=TO(e.tasks,3).map(e=>CO(e,sO)).filter(Boolean);return{name:t,ticks:Math.floor(SO(e.ticks)),...n.length?{tasks:n}:{}}}function IO(e){if(!xO(e))return;let t={};if(xO(e.causes))for(let n of kO){let r=Math.floor(SO(e.causes[n]));r&&(t[n]=r)}let n=TO(e.components,dO).map(NO).filter(e=>!!e),r=TO(e.inputs,vO).map(PO).filter(e=>!!e),i=TO(e.zone,vO).map(FO).filter(e=>!!e),a=Math.floor(SO(e.major));return{triggers:e.triggers===!0,waste:e.waste===!0,...a&&a<1e3?{major:a}:{},causes:t,components:n,...r.length?{inputs:r}:{},...i.length?{zone:i}:{},...typeof e.zoneJs==`boolean`?{zoneJs:e.zoneJs}:{}}}function LO(e){let t=[],n=e.component?` in ${e.component}${e.listener?` (${e.listener})`:``}`:``;switch(e.kind){case`event`:t.push(`${e.event??`Template listener`}${e.target?` on ${e.target}`:``}${n}`);break;case`http`:t.push(`HTTP response${n}`);break;case`timer`:t.push(`${e.task??`Timer`}${n}`);break;case`zone`:t.push(`zone.js tick with no Angular notification${e.task?` after ${e.task}`:``}`);break;case`tick`:t.push(`ApplicationRef.tick()${n}`);break;default:t.push(`${AO[e.kind]}${n}`)}return e.signal?t.push(e.signal===`?`?`wrote an unnamed signal`:`wrote signal ${e.signal}`):e.via&&e.via!==e.kind&&t.push(`via ${AO[e.via]}`),e.zone&&e.kind!==`zone`&&t.push(`run by zone.js`),e.more&&t.push(`${e.more} more notification${e.more===1?``:`s`}`),t.join(`, `)}function RO(e){if(!e)return[];let t=[],n=(e.major??0)>=22;for(let r of e.components){if(r.refreshed<10)continue;let e=r.refreshed-r.unchanged;if(e/r.refreshed>.2)continue;let i=`refreshed ${r.refreshed} times and changed something in ${e}`;r.strategy===`Eager`?t.push({name:r.name,kind:`on-push`,text:n?`${r.name} was ${i}. It opts out of OnPush, which is the default from Angular 22: remove \`changeDetection: ChangeDetectionStrategy.Eager\` (or \`Default\`) so Angular skips it until an input, event, signal or markForCheck marks it.`:`${r.name} was ${i}. Add \`changeDetection: ChangeDetectionStrategy.OnPush\` so Angular skips it until an input, event, signal or markForCheck marks it.`}):r.strategy===`OnPush`&&t.push({name:r.name,kind:`already-on-push`,text:`${r.name} was ${i}, and it is already OnPush${n?` (the default from Angular 22)`:``}. Something keeps marking it: an input that gets a new reference each time, an event or output in it, markForCheck, or a signal it reads that is set to an equal value.`})}for(let n of e.inputs??[]){let e=n.parent?` set by ${n.parent}`:``;n.inPlace&&t.push({name:n.name,kind:`in-place`,text:`Input ${n.input} of ${n.name}${e} changed in place ${n.inPlace} time${n.inPlace===1?``:`s`}: same reference, different contents. OnPush components, computed and signal equality don't see that. Pass a new object or array instead of mutating it.`}),n.sameContents&&t.push({name:n.name,kind:`same-contents`,text:`Input ${n.input} of ${n.name}${e} got a new reference with the same contents ${n.sameContents} time${n.sameContents===1?``:`s`}, so Angular refreshed ${n.name} for nothing. Keep the reference when nothing changed, for example with a computed instead of a method call in the template.`})}for(let n of e.zone??[]){let e=n.tasks?.length?` (after ${n.tasks.join(`, `)})`:``;t.push({name:n.name,kind:`zone`,text:`${n.name} changed in ${n.ticks} tick${n.ticks===1?``:`s`} that only zone.js started${e}. Without zone.js it would not update: keep that state in a signal, or call markForCheck after changing it.`})}return t}function zO(e){let t=EO(e);return!t||!xO(e)?null:{...t,maxMs:SO(e.maxMs),cycles:SO(e.cycles)}}function BO(e){if(!xO(e))return null;let t=CO(e.name,sO),n=CO(e.hook,lO);if(!t||!n)return null;let{calls:r,ms:i,maxMs:a}=e;return{name:t,hook:n,calls:SO(r),ms:SO(i),maxMs:SO(a)}}function VO(e){if(!xO(e))return null;let t=CO(e.name,sO);if(!t)return null;let n=CO(e.listener,sO);return{name:t,...n?{listener:n}:{},calls:SO(e.calls),ms:SO(e.ms),maxMs:SO(e.maxMs)}}function HO(e){if(xO(e)&&SO(e.runs))return{runs:SO(e.runs),ms:SO(e.ms),maxMs:SO(e.maxMs)}}function UO(e,t){if(!xO(e))return null;let n=TO(e.spanNames,mO).map(e=>CO(e,cO)),r=aO(e.slowMs),i=Array.isArray(e.cycles)?e.cycles.slice(-Math.min(t,pO)).map(e=>OO(e,n.length,r)).filter(e=>!!e):[],a={},o=0;if(xO(e.hosts)){let t=Object.entries(e.hosts);o=Math.max(0,t.length-fO);for(let[e,n]of t.slice(0,fO))e.length<50&&SO(n)&&(a[e]=SO(n))}let s=Array.isArray(e.components)?e.components:[],c=Math.floor(SO(e.droppedClasses))+Math.max(0,s.length-dO),l=Math.floor(SO(e.droppedHosts))+o,u=TO(e.hooks,gO).map(BO).filter(e=>!!e),d=TO(e.outputs,gO).map(VO).filter(e=>!!e),f=Math.max(0,TO(e.hooks,1/0).length-gO)+Math.max(0,TO(e.outputs,1/0).length-gO),p=Math.floor(SO(e.droppedTimings))+f,m=HO(e.afterRender),ee=i.some(e=>e.spans?.length),h=IO(e.diagnosis);return{recording:e.recording===!0,startedAt:typeof e.startedAt==`number`&&e.startedAt<=oO?SO(e.startedAt):null,dropped:SO(e.dropped),slowMs:r,cycles:i,components:s.slice(0,dO).map(zO).filter(e=>!!e),...c?{droppedClasses:c}:{},hosts:a,...l?{droppedHosts:l}:{},...u.length?{hooks:u}:{},...d.length?{outputs:d}:{},...p?{droppedTimings:p}:{},...m?{afterRender:m}:{},...ee?{spanNames:n}:{},...h?{diagnosis:h}:{}}}var WO=`pangular-inspector/change-detection`;function GO(e,t,n=Date.now()){return{format:WO,version:1,exportedAt:n,pageId:t,recording:{...UO(e,pO)??e,recording:!1,hosts:{}}}}function KO(e,t){if(e.length>2e7||e.length*3>2e7&&new TextEncoder().encode(e).byteLength>2e7)return{ok:!1,error:`The file is larger than 20 MB.`};let n;try{n=JSON.parse(e)}catch{return{ok:!1,error:`The file is not valid JSON.`}}if(!xO(n))return{ok:!1,error:`The file is not a recording.`};if(n.format!==void 0&&n.format!==`pangular-inspector/change-detection`)return{ok:!1,error:`The file is not a change detection recording.`};let r=xO(n.recording)?n.recording:n;if(!Array.isArray(r.cycles))return{ok:!1,error:`The file has no change detection cycles.`};let i=UO(r,t);if(!i)return{ok:!1,error:`The file is not a recording.`};let a=CO(n.pageId??r.pageId,49)||`imported`,o=wO(n.exportedAt);return{ok:!0,pageId:a,...o?{exportedAt:o}:{},recording:{...i,recording:!1}}}var qO=1,JO=1,YO=2,XO={c:`component`,h:`lifecycle-hook`,r:`after-render`,o:`output`},ZO=e=>Math.round(e*1e6)/1e3;function QO(e,t){let n=e.spanNames??[],r=e.cycles[0]?.at??0,i=e.startedAt??r,a=[],o=0,s=0;for(let t of e.cycles){let e=t.t??Math.max(0,t.at-i),r=e+t.ms;a.push({name:`Change detection #${t.id}`,cat:`change-detection`,ph:`X`,pid:qO,tid:JO,ts:ZO(e),dur:ZO(t.ms),args:{checks:t.checks,passes:t.passes,...t.trigger?{trigger:t.trigger}:{},...t.hookMs?{hookMs:t.hookMs}:{},...t.afterRenderMs?{afterRenderMs:t.afterRenderMs}:{},...t.outputMs?{outputMs:t.outputMs}:{},...t.cause?{cause:LO(t.cause)}:{},...t.unchanged?{unchanged:t.unchanged}:{},slowest:t.components.map(e=>`${e.name} ${e.checks}x ${e.ms}ms`)}}),s+=t.droppedSpans??0;let c=[{end:r}],l=[...t.spans??[]].sort((e,t)=>e[1]-t[1]||t[2]-e[2]);for(let[r,i,s,u,d]of l){o++;let l=n[r]??`?`;if(d===yO.output){let n=e+i;a.push({name:l,cat:XO[d],ph:`X`,pid:qO,tid:YO,ts:ZO(n),dur:ZO(i<0?Math.max(0,Math.min(s,-i)):s),args:{cycle:t.id}});continue}let f=Math.max(e,e+i);for(;c.length>1&&c.at(-1).end<=f;)c.pop();let p=c.at(-1).end,m=Math.min(f+s,p);me.ts??0));if(c<0)for(let e of a)e.ts=ZO((e.ts-c)/1e3);a.sort((e,t)=>e.ts-t.ts||t.dur-e.dur);let l=(e,t,n)=>({name:t,ph:`M`,pid:qO,tid:e,args:{name:n}});return{traceEvents:[l(0,`process_name`,`Angular change detection (page ${t})`),l(JO,`thread_name`,`Change detection`),l(YO,`thread_name`,`Outputs`),...a],displayTimeUnit:`ms`,otherData:{source:`Pangular Inspector change detection recording`,pageId:t,cycles:e.cycles.length,droppedCycles:e.dropped,spans:o,droppedSpans:s,...e.startedAt&&e.startedAt<=oO?{startedAt:new Date(e.startedAt).toISOString()}:{}}}}function $O(e,t=16){return e.ms>t}function ek(e){return`${e<10?e.toFixed(2):Math.round(e)} ms`}function tk(e,t){if(!t)return[...e];let n=Math.min(t.from,t.to),r=Math.max(t.from,t.to),i=e.filter(e=>e.id>=n&&e.id<=r);return i.length?i:[...e]}function nk(e){let t=new Map;for(let n of e)for(let e of n.components){let n=t.get(e.name);n?(n.checks+=e.checks,n.ms+=e.ms,n.maxMs=Math.max(n.maxMs,e.ms),n.cycles+=1):t.set(e.name,{name:e.name,checks:e.checks,ms:e.ms,maxMs:e.ms,cycles:1})}return[...t.values()].sort((e,t)=>t.ms-e.ms||e.name.localeCompare(t.name))}function rk(e,t=16){let n=e.reduce((e,t)=>Math.max(e,t.ms),0);return Math.max(n,t*1.25)}function ik(e,t,n=3){let r=e.map(e=>({item:e,value:t(e)})).filter(e=>e.value>0).sort((e,t)=>t.value-e.value),i=r.reduce((e,t)=>e+t.value,0);if(!i)return[];let a=n/i,o=[],s=0,c=0,l=n,u=1,d=[],f=(e,t)=>{let n=e.reduce((e,t)=>e+t,0),r=Math.max(...e),i=Math.min(...e);return Math.max(t*t*r/(n*n),n*n/(t*t*i))},p=()=>{let e=d.reduce((e,t)=>e+t.area,0);if(l>=u){let t=e/u,n=c;for(let e of d){let r=e.area/t;o.push({item:e.item,x:s,y:n,w:t,h:r}),n+=r}s+=t,l-=t}else{let t=e/l,n=s;for(let e of d){let r=e.area/t;o.push({item:e.item,x:n,y:c,w:r,h:t}),n+=r}c+=t,u-=t}d=[]};for(let e of r){let t=e.value*a,n=Math.min(l,u),r=d.map(e=>e.area);d.length&&f([...r,t],n)>f(r,n)&&p(),d.push({item:e.item,area:t})}return d.length&&p(),o.map(e=>({item:e.item,x:e.x/n*100,y:e.y*100,w:e.w/n*100,h:e.h*100}))}var ak={c:`component`,h:`hook`,r:`afterRender`,o:`output`};function ok(e,t){if(t===`c`)return e||null;if(t===`h`){let t=e.lastIndexOf(`.`);return t>0?e.slice(0,t):null}if(t===`o`){let t=e.indexOf(` (`),n=t>0?e.slice(0,t):e;return n&&n!==`?`?n:null}return null}function sk(e,t){let n=e.filter(e=>e.spans?.length);if(!n.length)return null;let r=n.map(e=>{let t=e.spans,n=Math.min(0,...t.map(e=>e[1])),r=Math.max(e.ms,...t.map(e=>e[1]+e[2]));return{cycle:e,spans:t,from:n,width:Math.max(r-n,.001)}}),i=r.reduce((e,t)=>e+t.width,0),a=[],o=[],s=0,c=0;for(let{cycle:e,spans:n,from:l,width:u}of r){o.push({id:e.id,x:s/i*100,w:u/i*100,droppedSpans:e.droppedSpans??0});let r=[...n].sort((e,t)=>e[1]-t[1]||e[3]-t[3]),d=[];for(let[n,o,u,f,p]of r){let r=t[n]??`unknown`,m=d[f-1],ee=f>0&&m!==void 0&&ot.kind,lk=(e,t)=>t.name,uk=(e,t)=>t.name+`.`+t.input;function dk(e,t){e&1&&(R(0,`p`,3),K(1,` The page has no Angular change detection scheduler the overlay could find (it needs Angular 18 or later), so cycles have no cause. `),z())}function fk(e,t){if(e&1&&(R(0,`tr`)(1,`td`),K(2),z(),R(3,`td`,6),K(4),z()()),e&2){let e=t.$implicit;D(2),q(e.label),D(2),q(e.count)}}function pk(e,t){if(e&1&&(R(0,`table`)(1,`thead`)(2,`tr`)(3,`th`,4),K(4,`Trigger`),z(),R(5,`th`,5),K(6,`Cycles`),z()()(),R(7,`tbody`),M(8,fk,5,2,`tr`,null,ck),z()()),e&2){let e=W(2);D(8),N(e.causes())}}function mk(e,t){e&1&&(R(0,`p`,3),K(1,`No cycle has a cause yet.`),z())}function hk(e,t){if(e&1&&(R(0,`tr`)(1,`td`,7),K(2),z(),R(3,`td`,6),K(4),z(),R(5,`td`,7),K(6),z()()),e&2){let e=t.$implicit;D(2),q(e.name),D(2),q(e.ticks),D(2),q(e.tasks?.join(`, `))}}function gk(e,t){if(e&1&&(R(0,`table`)(1,`thead`)(2,`tr`)(3,`th`,4),K(4,`Component`),z(),R(5,`th`,5),K(6,`Zone-only ticks`),z(),R(7,`th`,4),K(8,`After`),z()()(),R(9,`tbody`),M(10,hk,7,3,`tr`,null,lk),z()()),e&2){let e=W(3);D(10),N(e.zone())}}function _k(e,t){if(e&1&&(R(0,`p`,3),K(1),z()),e&2){let e=W(3);D(),q(e.zoneNote())}}function vk(e,t){if(e&1&&(R(0,`div`)(1,`h4`),K(2,`Depends on zone.js`),z(),A(3,gk,12,0,`table`)(4,_k,2,1,`p`,3),z()),e&2){let e=W(),t=W();D(3),j(t.zone().length?3:e.triggers?4:-1)}}function yk(e,t){e&1&&(R(0,`p`,3),K(1,`The page can't watch DOM updates, so wasted checks are not counted.`),z())}function bk(e,t){if(e&1&&(R(0,`tr`)(1,`td`,7),K(2),z(),R(3,`td`,6),K(4),z(),R(5,`td`,6),K(6),z(),R(7,`td`),K(8),z()()),e&2){let e=t.$implicit,n=W(3);D(2),q(e.name),D(2),q(e.refreshed),D(2),Y(``,e.unchanged,` (`,n.share(e.unchanged,e.refreshed),`)`),D(2),q(e.strategy??`Unknown`)}}function xk(e,t){if(e&1&&(R(0,`table`)(1,`thead`)(2,`tr`)(3,`th`,4),K(4,`Component`),z(),R(5,`th`,5),K(6,`Refreshed`),z(),R(7,`th`,5),K(8,`Changed nothing`),z(),R(9,`th`,4),K(10,`Strategy`),z()()(),R(11,`tbody`),M(12,bk,9,5,`tr`,null,lk),z()()),e&2){let e=W(2);D(12),N(e.wasted())}}function Sk(e,t){e&1&&(R(0,`p`,3),K(1,`Every refreshed check changed something.`),z())}function Ck(e,t){if(e&1&&(R(0,`tr`)(1,`td`,7),K(2),z(),R(3,`td`,7),K(4),z(),R(5,`td`,6),K(6),z(),R(7,`td`,6),K(8),z()()),e&2){let e=t.$implicit;D(2),Y(``,e.name,`.`,e.input),D(2),q(e.parent??`Unknown`),D(2),q(e.inPlace),D(2),q(e.sameContents)}}function wk(e,t){if(e&1&&(R(0,`h4`),K(1,`Inputs that break OnPush`),z(),R(2,`table`)(3,`thead`)(4,`tr`)(5,`th`,4),K(6,`Input`),z(),R(7,`th`,4),K(8,`Set by`),z(),R(9,`th`,5),K(10,`Changed in place`),z(),R(11,`th`,5),K(12,`Same contents, new reference`),z()()(),R(13,`tbody`),M(14,Ck,9,5,`tr`,null,uk),z()()),e&2){let e=W(2);D(14),N(e.inputs())}}function Tk(e,t){if(e&1&&(R(0,`li`),K(1),z()),e&2){let e=t.$implicit;D(),q(e.text)}}function Ek(e,t){if(e&1&&(R(0,`h4`),K(1,`Hints`),z(),R(2,`ul`,8),M(3,Tk,2,1,`li`,null,tg),z()),e&2){let e=W(2);D(3),N(e.hints())}}function Dk(e,t){if(e&1&&(R(0,`section`,0)(1,`h3`,1),K(2,`Why it ran and what it wasted`),z(),R(3,`div`,2)(4,`div`)(5,`h4`),K(6,`What started the cycles`),z(),A(7,dk,2,0,`p`,3)(8,pk,10,0,`table`)(9,mk,2,0,`p`,3),z(),A(10,vk,5,1,`div`),z(),R(11,`h4`),K(12,`Wasted checks`),z(),A(13,yk,2,0,`p`,3)(14,xk,14,0,`table`)(15,Sk,2,0,`p`,3),A(16,wk,16,0),A(17,Ek,5,0),z()),e&2){let e=t,n=W();D(7),j(e.triggers?n.causes().length?8:9:7),D(3),j(n.hasZone()?10:-1),D(3),j(e.waste?n.wasted().length?14:15:13),D(3),j(n.inputs().length?16:-1),D(),j(n.hints().length?17:-1)}}var Ok=10,kk=class e{page=$(null);diagnosis=X(()=>this.page()?.diagnosis??null);causes=X(()=>{let e=this.diagnosis()?.causes??{};return kO.filter(t=>e[t]).map(t=>({kind:t,label:AO[t],count:e[t]}))});zone=X(()=>(this.diagnosis()?.zone??[]).slice(0,Ok));zoneTicks=X(()=>this.diagnosis()?.causes.zone??0);hasZone=X(()=>this.diagnosis()?.zoneJs??(this.zone().length>0||this.zoneTicks()>0));zoneNote=X(()=>{let e=this.zoneTicks();return e?`${e} ${e===1?`tick`:`ticks`} came from zone.js alone, and no component changed in them.`:`No component changed in a tick only zone.js started.`});wasted=X(()=>(this.diagnosis()?.components??[]).filter(e=>e.unchanged>0).slice(0,Ok));inputs=X(()=>(this.diagnosis()?.inputs??[]).slice(0,Ok));hints=X(()=>RO(this.diagnosis()??void 0).slice(0,Ok));share(e,t){return t?`${Math.round(e/t*100)}%`:`0%`}static ɵfac=function(t){return new(t||e)};static ɵcmp=O({type:e,selectors:[[`app-cd-diagnosis`]],inputs:{page:[1,`page`]},decls:1,vars:1,consts:[[`aria-labelledby`,`cd-diagnosis-heading`,1,`diagnosis`],[`id`,`cd-diagnosis-heading`],[1,`grid`],[1,`note`],[`scope`,`col`],[`scope`,`col`,1,`num`],[1,`num`],[1,`mono`],[1,`hints`]],template:function(e,t){if(e&1&&A(0,Dk,18,5,`section`,0),e&2){let e;j((e=t.diagnosis())?0:-1,e)}},styles:[`[_nghost-%COMP%] { +}`]})},ZD=1e3;function QD(e){return typeof e==`number`&&Number.isFinite(e)&&e>0&&e<=ZD?e:16}var $D=864e13,eO=200,tO=300,nO=100,rO=10,iO=100,aO=2e3,oO=2e3,sO=4e3,cO=1e3,lO=100,uO=3,dO=50,fO={component:`c`,hook:`h`,afterRender:`r`,output:`o`},pO=Object.values(fO),mO=e=>!!e&&typeof e==`object`&&!Array.isArray(e),hO=e=>typeof e==`number`&&Number.isFinite(e)&&e>=0?e:0,gO=(e,t)=>typeof e==`string`?e.slice(0,t):``,_O=e=>hO(e)>0?hO(e):void 0,vO=(e,t)=>Array.isArray(e)?e.slice(0,t):[];function yO(e){if(!mO(e))return null;let t=gO(e.name,eO);return t?{name:t,checks:hO(e.checks),ms:hO(e.ms)}:null}function bO(e,t){if(!Array.isArray(e)||e.length!==5)return null;let[n,r,i,a,o]=e;return typeof n!=`number`||!Number.isInteger(n)||n<0||n>=t||typeof r!=`number`||!Number.isFinite(r)||Math.abs(r)>1e7||typeof a!=`number`||!Number.isInteger(a)||a<0||a>cO||typeof o!=`string`||!pO.includes(o)?null:[n,r,hO(i),a,o]}function xO(e,t,n){if(!mO(e)||typeof e.id!=`number`)return null;let r=vO(e.components,rO).map(yO).filter(e=>!!e),i=gO(e.trigger,tO),a=vO(e.spans,40).map(e=>bO(e,t)).filter(e=>!!e),o=Array.isArray(e.spans)?e.spans.length-40:0,s=Math.floor(hO(e.droppedSpans))+Math.max(0,o),c={t:typeof e.t==`number`?hO(e.t):void 0,hookMs:_O(e.hookMs),afterRenderMs:_O(e.afterRenderMs),outputMs:_O(e.outputMs)},l=TO(e.cause),u=_O(e.refreshed),d=_O(e.unchanged);return{id:hO(e.id),at:hO(e.at),ms:hO(e.ms),passes:hO(e.passes),...i?{trigger:i}:{},checks:hO(e.checks),components:r,...Object.fromEntries(Object.entries(c).filter(([,e])=>e!==void 0)),...a.length?{spans:a}:{},...s?{droppedSpans:s}:{},...l?{cause:l}:{},...u?{refreshed:u}:{},...d?{unchanged:d}:{},...hO(e.ms)>n?{slow:!0}:{}}}var SO=[`event`,`http`,`timer`,`signal`,`effect`,`markForCheck`,`input`,`view`,`tick`,`zone`,`unknown`],CO={event:`Event`,http:`HTTP response`,timer:`Timer`,signal:`Signal write`,effect:`Effect`,markForCheck:`markForCheck`,input:`setInput`,view:`View change`,tick:`ApplicationRef.tick`,zone:`zone.js only`,unknown:`Unknown`},wO=e=>typeof e==`string`&&SO.includes(e);function TO(e){if(!mO(e)||!wO(e.kind))return;let t=[`component`,`listener`,`event`,`target`,`signal`,`task`],n={kind:e.kind};wO(e.via)&&(n.via=e.via);for(let r of t){let t=gO(e[r],eO);t&&(n[r]=t)}e.zone===!0&&(n.zone=!0);let r=vO(e.stack,uO).map(e=>gO(e,tO)).filter(Boolean);r.length&&(n.stack=r);let i=Math.floor(hO(e.more));return i&&(n.more=i),n}function EO(e){if(!mO(e))return null;let t=gO(e.name,eO);if(!t)return null;let n=e.strategy;return{name:t,refreshed:Math.floor(hO(e.refreshed)),unchanged:Math.floor(hO(e.unchanged)),...n===`OnPush`||n===`Eager`?{strategy:n}:{}}}function DO(e){if(!mO(e))return null;let t=gO(e.name,eO),n=gO(e.input,eO);if(!t||!n)return null;let r=gO(e.parent,eO);return{name:t,input:n,...r?{parent:r}:{},inPlace:Math.floor(hO(e.inPlace)),sameContents:Math.floor(hO(e.sameContents))}}function OO(e){if(!mO(e))return null;let t=gO(e.name,eO);if(!t)return null;let n=vO(e.tasks,3).map(e=>gO(e,eO)).filter(Boolean);return{name:t,ticks:Math.floor(hO(e.ticks)),...n.length?{tasks:n}:{}}}function kO(e){if(!mO(e))return;let t={};if(mO(e.causes))for(let n of SO){let r=Math.floor(hO(e.causes[n]));r&&(t[n]=r)}let n=vO(e.components,iO).map(EO).filter(e=>!!e),r=vO(e.inputs,dO).map(DO).filter(e=>!!e),i=vO(e.zone,dO).map(OO).filter(e=>!!e),a=Math.floor(hO(e.major));return{triggers:e.triggers===!0,waste:e.waste===!0,...a&&a<1e3?{major:a}:{},causes:t,components:n,...r.length?{inputs:r}:{},...i.length?{zone:i}:{},...typeof e.zoneJs==`boolean`?{zoneJs:e.zoneJs}:{}}}function AO(e){let t=[],n=e.component?` in ${e.component}${e.listener?` (${e.listener})`:``}`:``;switch(e.kind){case`event`:t.push(`${e.event??`Template listener`}${e.target?` on ${e.target}`:``}${n}`);break;case`http`:t.push(`HTTP response${n}`);break;case`timer`:t.push(`${e.task??`Timer`}${n}`);break;case`zone`:t.push(`zone.js tick with no Angular notification${e.task?` after ${e.task}`:``}`);break;case`tick`:t.push(`ApplicationRef.tick()${n}`);break;default:t.push(`${CO[e.kind]}${n}`)}return e.signal?t.push(e.signal===`?`?`wrote an unnamed signal`:`wrote signal ${e.signal}`):e.via&&e.via!==e.kind&&t.push(`via ${CO[e.via]}`),e.zone&&e.kind!==`zone`&&t.push(`run by zone.js`),e.more&&t.push(`${e.more} more notification${e.more===1?``:`s`}`),t.join(`, `)}function jO(e){if(!e)return[];let t=[],n=(e.major??0)>=22;for(let r of e.components){if(r.refreshed<10)continue;let e=r.refreshed-r.unchanged;if(e/r.refreshed>.2)continue;let i=`refreshed ${r.refreshed} times and changed something in ${e}`;r.strategy===`Eager`?t.push({name:r.name,kind:`on-push`,text:n?`${r.name} was ${i}. It opts out of OnPush, which is the default from Angular 22: remove \`changeDetection: ChangeDetectionStrategy.Eager\` (or \`Default\`) so Angular skips it until an input, event, signal or markForCheck marks it.`:`${r.name} was ${i}. Add \`changeDetection: ChangeDetectionStrategy.OnPush\` so Angular skips it until an input, event, signal or markForCheck marks it.`}):r.strategy===`OnPush`&&t.push({name:r.name,kind:`already-on-push`,text:`${r.name} was ${i}, and it is already OnPush${n?` (the default from Angular 22)`:``}. Something keeps marking it: an input that gets a new reference each time, an event or output in it, markForCheck, or a signal it reads that is set to an equal value.`})}for(let n of e.inputs??[]){let e=n.parent?` set by ${n.parent}`:``;n.inPlace&&t.push({name:n.name,kind:`in-place`,text:`Input ${n.input} of ${n.name}${e} changed in place ${n.inPlace} time${n.inPlace===1?``:`s`}: same reference, different contents. OnPush components, computed and signal equality don't see that. Pass a new object or array instead of mutating it.`}),n.sameContents&&t.push({name:n.name,kind:`same-contents`,text:`Input ${n.input} of ${n.name}${e} got a new reference with the same contents ${n.sameContents} time${n.sameContents===1?``:`s`}, so Angular refreshed ${n.name} for nothing. Keep the reference when nothing changed, for example with a computed instead of a method call in the template.`})}for(let n of e.zone??[]){let e=n.tasks?.length?` (after ${n.tasks.join(`, `)})`:``;t.push({name:n.name,kind:`zone`,text:`${n.name} changed in ${n.ticks} tick${n.ticks===1?``:`s`} that only zone.js started${e}. Without zone.js it would not update: keep that state in a signal, or call markForCheck after changing it.`})}return t}function MO(e){let t=yO(e);return!t||!mO(e)?null:{...t,maxMs:hO(e.maxMs),cycles:hO(e.cycles)}}function NO(e){if(!mO(e))return null;let t=gO(e.name,eO),n=gO(e.hook,nO);if(!t||!n)return null;let{calls:r,ms:i,maxMs:a}=e;return{name:t,hook:n,calls:hO(r),ms:hO(i),maxMs:hO(a)}}function PO(e){if(!mO(e))return null;let t=gO(e.name,eO);if(!t)return null;let n=gO(e.listener,eO);return{name:t,...n?{listener:n}:{},calls:hO(e.calls),ms:hO(e.ms),maxMs:hO(e.maxMs)}}function FO(e){if(mO(e)&&hO(e.runs))return{runs:hO(e.runs),ms:hO(e.ms),maxMs:hO(e.maxMs)}}function IO(e,t){if(!mO(e))return null;let n=vO(e.spanNames,sO).map(e=>gO(e,tO)),r=QD(e.slowMs),i=Array.isArray(e.cycles)?e.cycles.slice(-Math.min(t,oO)).map(e=>xO(e,n.length,r)).filter(e=>!!e):[],a={},o=0;if(mO(e.hosts)){let t=Object.entries(e.hosts);o=Math.max(0,t.length-aO);for(let[e,n]of t.slice(0,aO))e.length<50&&hO(n)&&(a[e]=hO(n))}let s=Array.isArray(e.components)?e.components:[],c=Math.floor(hO(e.droppedClasses))+Math.max(0,s.length-iO),l=Math.floor(hO(e.droppedHosts))+o,u=vO(e.hooks,lO).map(NO).filter(e=>!!e),d=vO(e.outputs,lO).map(PO).filter(e=>!!e),f=Math.max(0,vO(e.hooks,1/0).length-lO)+Math.max(0,vO(e.outputs,1/0).length-lO),p=Math.floor(hO(e.droppedTimings))+f,m=FO(e.afterRender),ee=i.some(e=>e.spans?.length),h=kO(e.diagnosis);return{recording:e.recording===!0,startedAt:typeof e.startedAt==`number`&&e.startedAt<=$D?hO(e.startedAt):null,dropped:hO(e.dropped),slowMs:r,cycles:i,components:s.slice(0,iO).map(MO).filter(e=>!!e),...c?{droppedClasses:c}:{},hosts:a,...l?{droppedHosts:l}:{},...u.length?{hooks:u}:{},...d.length?{outputs:d}:{},...p?{droppedTimings:p}:{},...m?{afterRender:m}:{},...ee?{spanNames:n}:{},...h?{diagnosis:h}:{}}}var LO=`pangular-inspector/change-detection`;function RO(e,t,n=Date.now()){return{format:LO,version:1,exportedAt:n,pageId:t,recording:{...IO(e,oO)??e,recording:!1,hosts:{}}}}function zO(e,t){if(e.length>2e7||e.length*3>2e7&&new TextEncoder().encode(e).byteLength>2e7)return{ok:!1,error:`The file is larger than 20 MB.`};let n;try{n=JSON.parse(e)}catch{return{ok:!1,error:`The file is not valid JSON.`}}if(!mO(n))return{ok:!1,error:`The file is not a recording.`};if(n.format!==void 0&&n.format!==`pangular-inspector/change-detection`)return{ok:!1,error:`The file is not a change detection recording.`};let r=mO(n.recording)?n.recording:n;if(!Array.isArray(r.cycles))return{ok:!1,error:`The file has no change detection cycles.`};let i=IO(r,t);if(!i)return{ok:!1,error:`The file is not a recording.`};let a=gO(n.pageId??r.pageId,49)||`imported`,o=_O(n.exportedAt);return{ok:!0,pageId:a,...o?{exportedAt:o}:{},recording:{...i,recording:!1}}}var BO=1,VO=1,HO=2,UO={c:`component`,h:`lifecycle-hook`,r:`after-render`,o:`output`},WO=e=>Math.round(e*1e6)/1e3;function GO(e,t){let n=e.spanNames??[],r=e.cycles[0]?.at??0,i=e.startedAt??r,a=[],o=0,s=0;for(let t of e.cycles){let e=t.t??Math.max(0,t.at-i),r=e+t.ms;a.push({name:`Change detection #${t.id}`,cat:`change-detection`,ph:`X`,pid:BO,tid:VO,ts:WO(e),dur:WO(t.ms),args:{checks:t.checks,passes:t.passes,...t.trigger?{trigger:t.trigger}:{},...t.hookMs?{hookMs:t.hookMs}:{},...t.afterRenderMs?{afterRenderMs:t.afterRenderMs}:{},...t.outputMs?{outputMs:t.outputMs}:{},...t.cause?{cause:AO(t.cause)}:{},...t.unchanged?{unchanged:t.unchanged}:{},slowest:t.components.map(e=>`${e.name} ${e.checks}x ${e.ms}ms`)}}),s+=t.droppedSpans??0;let c=[{end:r}],l=[...t.spans??[]].sort((e,t)=>e[1]-t[1]||t[2]-e[2]);for(let[r,i,s,u,d]of l){o++;let l=n[r]??`?`;if(d===fO.output){let n=e+i;a.push({name:l,cat:UO[d],ph:`X`,pid:BO,tid:HO,ts:WO(n),dur:WO(i<0?Math.max(0,Math.min(s,-i)):s),args:{cycle:t.id}});continue}let f=Math.max(e,e+i);for(;c.length>1&&c.at(-1).end<=f;)c.pop();let p=c.at(-1).end,m=Math.min(f+s,p);me.ts??0));if(c<0)for(let e of a)e.ts=WO((e.ts-c)/1e3);a.sort((e,t)=>e.ts-t.ts||t.dur-e.dur);let l=(e,t,n)=>({name:t,ph:`M`,pid:BO,tid:e,args:{name:n}});return{traceEvents:[l(0,`process_name`,`Angular change detection (page ${t})`),l(VO,`thread_name`,`Change detection`),l(HO,`thread_name`,`Outputs`),...a],displayTimeUnit:`ms`,otherData:{source:`Pangular Inspector change detection recording`,pageId:t,cycles:e.cycles.length,droppedCycles:e.dropped,spans:o,droppedSpans:s,...e.startedAt&&e.startedAt<=$D?{startedAt:new Date(e.startedAt).toISOString()}:{}}}}function KO(e,t=16){return e.ms>t}function qO(e){return`${e<10?e.toFixed(2):Math.round(e)} ms`}function JO(e,t){if(!t)return[...e];let n=Math.min(t.from,t.to),r=Math.max(t.from,t.to),i=e.filter(e=>e.id>=n&&e.id<=r);return i.length?i:[...e]}function YO(e){let t=new Map;for(let n of e)for(let e of n.components){let n=t.get(e.name);n?(n.checks+=e.checks,n.ms+=e.ms,n.maxMs=Math.max(n.maxMs,e.ms),n.cycles+=1):t.set(e.name,{name:e.name,checks:e.checks,ms:e.ms,maxMs:e.ms,cycles:1})}return[...t.values()].sort((e,t)=>t.ms-e.ms||e.name.localeCompare(t.name))}function XO(e,t=16){let n=e.reduce((e,t)=>Math.max(e,t.ms),0);return Math.max(n,t*1.25)}function ZO(e,t,n=3){let r=e.map(e=>({item:e,value:t(e)})).filter(e=>e.value>0).sort((e,t)=>t.value-e.value),i=r.reduce((e,t)=>e+t.value,0);if(!i)return[];let a=n/i,o=[],s=0,c=0,l=n,u=1,d=[],f=(e,t)=>{let n=e.reduce((e,t)=>e+t,0),r=Math.max(...e),i=Math.min(...e);return Math.max(t*t*r/(n*n),n*n/(t*t*i))},p=()=>{let e=d.reduce((e,t)=>e+t.area,0);if(l>=u){let t=e/u,n=c;for(let e of d){let r=e.area/t;o.push({item:e.item,x:s,y:n,w:t,h:r}),n+=r}s+=t,l-=t}else{let t=e/l,n=s;for(let e of d){let r=e.area/t;o.push({item:e.item,x:n,y:c,w:r,h:t}),n+=r}c+=t,u-=t}d=[]};for(let e of r){let t=e.value*a,n=Math.min(l,u),r=d.map(e=>e.area);d.length&&f([...r,t],n)>f(r,n)&&p(),d.push({item:e.item,area:t})}return d.length&&p(),o.map(e=>({item:e.item,x:e.x/n*100,y:e.y*100,w:e.w/n*100,h:e.h*100}))}var QO={c:`component`,h:`hook`,r:`afterRender`,o:`output`};function $O(e,t){if(t===`c`)return e||null;if(t===`h`){let t=e.lastIndexOf(`.`);return t>0?e.slice(0,t):null}if(t===`o`){let t=e.indexOf(` (`),n=t>0?e.slice(0,t):e;return n&&n!==`?`?n:null}return null}function ek(e,t){let n=e.filter(e=>e.spans?.length);if(!n.length)return null;let r=n.map(e=>{let t=e.spans,n=Math.min(0,...t.map(e=>e[1])),r=Math.max(e.ms,...t.map(e=>e[1]+e[2]));return{cycle:e,spans:t,from:n,width:Math.max(r-n,.001)}}),i=r.reduce((e,t)=>e+t.width,0),a=[],o=[],s=0,c=0;for(let{cycle:e,spans:n,from:l,width:u}of r){o.push({id:e.id,x:s/i*100,w:u/i*100,droppedSpans:e.droppedSpans??0});let r=[...n].sort((e,t)=>e[1]-t[1]||e[3]-t[3]),d=[];for(let[n,o,u,f,p]of r){let r=t[n]??`unknown`,m=d[f-1],ee=f>0&&m!==void 0&&ot.kind,nk=(e,t)=>t.name,rk=(e,t)=>t.name+`.`+t.input;function ik(e,t){e&1&&(R(0,`p`,3),K(1,` The page has no Angular change detection scheduler the overlay could find (it needs Angular 18 or later), so cycles have no cause. `),z())}function ak(e,t){if(e&1&&(R(0,`tr`)(1,`td`),K(2),z(),R(3,`td`,6),K(4),z()()),e&2){let e=t.$implicit;D(2),q(e.label),D(2),q(e.count)}}function ok(e,t){if(e&1&&(R(0,`table`)(1,`thead`)(2,`tr`)(3,`th`,4),K(4,`Trigger`),z(),R(5,`th`,5),K(6,`Cycles`),z()()(),R(7,`tbody`),M(8,ak,5,2,`tr`,null,tk),z()()),e&2){let e=W(2);D(8),N(e.causes())}}function sk(e,t){e&1&&(R(0,`p`,3),K(1,`No cycle has a cause yet.`),z())}function ck(e,t){if(e&1&&(R(0,`tr`)(1,`td`,7),K(2),z(),R(3,`td`,6),K(4),z(),R(5,`td`,7),K(6),z()()),e&2){let e=t.$implicit;D(2),q(e.name),D(2),q(e.ticks),D(2),q(e.tasks?.join(`, `))}}function lk(e,t){if(e&1&&(R(0,`table`)(1,`thead`)(2,`tr`)(3,`th`,4),K(4,`Component`),z(),R(5,`th`,5),K(6,`Zone-only ticks`),z(),R(7,`th`,4),K(8,`After`),z()()(),R(9,`tbody`),M(10,ck,7,3,`tr`,null,nk),z()()),e&2){let e=W(3);D(10),N(e.zone())}}function uk(e,t){if(e&1&&(R(0,`p`,3),K(1),z()),e&2){let e=W(3);D(),q(e.zoneNote())}}function dk(e,t){if(e&1&&(R(0,`div`)(1,`h4`),K(2,`Depends on zone.js`),z(),A(3,lk,12,0,`table`)(4,uk,2,1,`p`,3),z()),e&2){let e=W(),t=W();D(3),j(t.zone().length?3:e.triggers?4:-1)}}function fk(e,t){e&1&&(R(0,`p`,3),K(1,`The page can't watch DOM updates, so wasted checks are not counted.`),z())}function pk(e,t){if(e&1&&(R(0,`tr`)(1,`td`,7),K(2),z(),R(3,`td`,6),K(4),z(),R(5,`td`,6),K(6),z(),R(7,`td`),K(8),z()()),e&2){let e=t.$implicit,n=W(3);D(2),q(e.name),D(2),q(e.refreshed),D(2),Y(``,e.unchanged,` (`,n.share(e.unchanged,e.refreshed),`)`),D(2),q(e.strategy??`Unknown`)}}function mk(e,t){if(e&1&&(R(0,`table`)(1,`thead`)(2,`tr`)(3,`th`,4),K(4,`Component`),z(),R(5,`th`,5),K(6,`Refreshed`),z(),R(7,`th`,5),K(8,`Changed nothing`),z(),R(9,`th`,4),K(10,`Strategy`),z()()(),R(11,`tbody`),M(12,pk,9,5,`tr`,null,nk),z()()),e&2){let e=W(2);D(12),N(e.wasted())}}function hk(e,t){e&1&&(R(0,`p`,3),K(1,`Every refreshed check changed something.`),z())}function gk(e,t){if(e&1&&(R(0,`tr`)(1,`td`,7),K(2),z(),R(3,`td`,7),K(4),z(),R(5,`td`,6),K(6),z(),R(7,`td`,6),K(8),z()()),e&2){let e=t.$implicit;D(2),Y(``,e.name,`.`,e.input),D(2),q(e.parent??`Unknown`),D(2),q(e.inPlace),D(2),q(e.sameContents)}}function _k(e,t){if(e&1&&(R(0,`h4`),K(1,`Inputs that break OnPush`),z(),R(2,`table`)(3,`thead`)(4,`tr`)(5,`th`,4),K(6,`Input`),z(),R(7,`th`,4),K(8,`Set by`),z(),R(9,`th`,5),K(10,`Changed in place`),z(),R(11,`th`,5),K(12,`Same contents, new reference`),z()()(),R(13,`tbody`),M(14,gk,9,5,`tr`,null,rk),z()()),e&2){let e=W(2);D(14),N(e.inputs())}}function vk(e,t){if(e&1&&(R(0,`li`),K(1),z()),e&2){let e=t.$implicit;D(),q(e.text)}}function yk(e,t){if(e&1&&(R(0,`h4`),K(1,`Hints`),z(),R(2,`ul`,8),M(3,vk,2,1,`li`,null,$h),z()),e&2){let e=W(2);D(3),N(e.hints())}}function bk(e,t){if(e&1&&(R(0,`section`,0)(1,`h3`,1),K(2,`Why it ran and what it wasted`),z(),R(3,`div`,2)(4,`div`)(5,`h4`),K(6,`What started the cycles`),z(),A(7,ik,2,0,`p`,3)(8,ok,10,0,`table`)(9,sk,2,0,`p`,3),z(),A(10,dk,5,1,`div`),z(),R(11,`h4`),K(12,`Wasted checks`),z(),A(13,fk,2,0,`p`,3)(14,mk,14,0,`table`)(15,hk,2,0,`p`,3),A(16,_k,16,0),A(17,yk,5,0),z()),e&2){let e=t,n=W();D(7),j(e.triggers?n.causes().length?8:9:7),D(3),j(n.hasZone()?10:-1),D(3),j(e.waste?n.wasted().length?14:15:13),D(3),j(n.inputs().length?16:-1),D(),j(n.hints().length?17:-1)}}var xk=10,Sk=class e{page=$(null);diagnosis=X(()=>this.page()?.diagnosis??null);causes=X(()=>{let e=this.diagnosis()?.causes??{};return SO.filter(t=>e[t]).map(t=>({kind:t,label:CO[t],count:e[t]}))});zone=X(()=>(this.diagnosis()?.zone??[]).slice(0,xk));zoneTicks=X(()=>this.diagnosis()?.causes.zone??0);hasZone=X(()=>this.diagnosis()?.zoneJs??(this.zone().length>0||this.zoneTicks()>0));zoneNote=X(()=>{let e=this.zoneTicks();return e?`${e} ${e===1?`tick`:`ticks`} came from zone.js alone, and no component changed in them.`:`No component changed in a tick only zone.js started.`});wasted=X(()=>(this.diagnosis()?.components??[]).filter(e=>e.unchanged>0).slice(0,xk));inputs=X(()=>(this.diagnosis()?.inputs??[]).slice(0,xk));hints=X(()=>jO(this.diagnosis()??void 0).slice(0,xk));share(e,t){return t?`${Math.round(e/t*100)}%`:`0%`}static ɵfac=function(t){return new(t||e)};static ɵcmp=O({type:e,selectors:[[`app-cd-diagnosis`]],inputs:{page:[1,`page`]},decls:1,vars:1,consts:[[`aria-labelledby`,`cd-diagnosis-heading`,1,`diagnosis`],[`id`,`cd-diagnosis-heading`],[1,`grid`],[1,`note`],[`scope`,`col`],[`scope`,`col`,1,`num`],[1,`num`],[1,`mono`],[1,`hints`]],template:function(e,t){if(e&1&&A(0,bk,18,5,`section`,0),e&2){let e;j((e=t.diagnosis())?0:-1,e)}},styles:[`[_nghost-%COMP%] { display: block; } @@ -955,7 +955,7 @@ td.mono[_ngcontent-%COMP%] { .hints[_ngcontent-%COMP%] li[_ngcontent-%COMP%] + li[_ngcontent-%COMP%] { margin-top: 4px; -}`]})},Ak=(e,t)=>t.cycle.id,jk=(e,t)=>t.id;function Mk(e,t){if(e&1){let e=B();R(0,`button`,27),U(`click`,function(){return S(e),C(W().showAll())}),K(1,`Show all cycles`),z()}}function Nk(e,t){if(e&1&&pg(0,`div`,28),e&2){let e=t;r_(`left`,e.left,`%`)(`width`,e.width,`%`)}}function Pk(e,t){if(e&1&&(R(0,`div`,29),pg(1,`span`,30),z()),e&2){let e=t.$implicit,n=W();G(`over`,e.over)(`out`,!n.inRange(e.index)&&!!n.range())(`active`,n.focused()&&n.active()===e.index),V(`id`,n.optionId(e.index)),k(`data-index`,e.index)(`aria-selected`,n.inRange(e.index))(`aria-label`,e.label),D(),r_(`height`,e.height,`%`)}}function Fk(e,t){e&1&&(R(0,`span`,33),K(1,`over budget`),z())}function Ik(e,t){if(e&1&&(R(0,`p`),K(1,` after `),R(2,`span`,35),K(3),z()()),e&2){let e=W();D(3),q(e.cycle.trigger)}}function Lk(e,t){if(e&1&&(R(0,`p`,34)(1,`span`,36),K(2),z(),R(3,`span`),K(4),z()()),e&2){let e=t.$implicit,n=W(2);D(2),q(e.name),D(2),q(n.fmt(e.ms))}}function Rk(e,t){if(e&1&&(R(0,`div`,31)(1,`p`,32)(2,`strong`),K(3),z(),R(4,`span`),K(5),z(),A(6,Fk,2,0,`span`,33),z(),A(7,Ik,4,1,`p`),R(8,`p`),K(9),z(),M(10,Lk,5,2,`p`,34,tg),z()),e&2){let e=t,n=W();r_(`left`,e.left)(`right`,e.right),D(3),q(n.fmt(e.cycle.ms)),D(2),J(`cycle `,e.cycle.id),D(),j(e.over?6:-1),D(),j(e.cycle.trigger?7:-1),D(2),A_(` `,e.cycle.checks,` `,e.cycle.checks===1?`check`:`checks`,`, `,e.cycle.passes,` `,e.cycle.passes===1?`pass`:`passes`,` `),D(),N(e.top)}}function zk(e,t){if(e&1&&pg(0,`span`),e&2){let e=t.$implicit;G(`over`,e.over)}}function Bk(e,t){if(e&1&&K(0),e&2){let e=t,n=W(2);Y(` `,e.name,` (`,n.fmt(e.ms),`) `)}}function Vk(e,t){if(e&1&&(R(0,`tr`)(1,`td`,37),K(2),z(),R(3,`td`,37),K(4),z(),R(5,`td`),K(6),z(),R(7,`td`,37),K(8),z(),R(9,`td`,37),K(10),z(),R(11,`td`,35),K(12),z(),R(13,`td`,35),A(14,Bk,1,2),z()()),e&2){let e,n=t.$implicit,r=W();D(2),q(n.id),D(2),q(r.fmt(n.ms)),D(2),q(r.isOver(n)?`Over`:`Within`),D(2),q(n.checks),D(2),q(n.passes),D(2),q(n.trigger??``),D(2),j((e=n.components[0])?14:-1,e)}}var Hk=0,Uk=80,Wk=10,Gk=class e{cycles=$([]);range=hv(null);slowMs=$(16);gapUntil=Uk;budgetLabel=X(()=>`${this.slowMs()} ms budget`);uid=`cd-chart-${Hk++}`;hintId=`${this.uid}-hint`;active=T(null);anchor=null;dragging=!1;hover=T(null);focused=T(!1);max=X(()=>rk(this.cycles(),this.slowMs()));budgetAt=X(()=>this.slowMs()/this.max()*100);bars=X(()=>{let e=this.max();return this.cycles().map((t,n)=>({cycle:t,index:n,height:t.ms/e*100,over:$O(t,this.slowMs()),label:this.describe(t)}))});firstId=X(()=>this.cycles()[0]?.id??0);lastId=X(()=>this.cycles().at(-1)?.id??0);span=X(()=>{let e=this.range();if(!e)return null;let t=this.cycles(),n=Math.min(e.from,e.to),r=Math.max(e.from,e.to),i=t.findIndex(e=>e.id>=n),a=-1;for(let e=t.length-1;e>=0;e--)if(t[e].id<=r){a=e;break}return i<0||atk(this.cycles(),this.range()));startId=X(()=>this.selected()[0]?.id??``);endId=X(()=>this.selected().at(-1)?.id??``);band=X(()=>{let e=this.span(),t=this.cycles().length;return!e||!t?null:{left:e.start/t*100,width:(e.end-e.start+1)/t*100}});summary=X(()=>{let e=this.selected(),t=this.slowMs(),n=e.filter(e=>$O(e,t)).length;return`${this.span()?e.length===1?`Cycle ${e[0].id}`:`Cycles ${e[0].id} to ${e.at(-1).id} (${e.length})`:`All ${e.length} ${e.length===1?`cycle`:`cycles`}`}. ${n} over the ${t} ms budget.`});tableLabel=X(()=>this.span()?`Picked cycles, ${this.summary()}`:`All recorded cycles`);activeOptionId=X(()=>{let e=this.active();return this.focused()&&e!==null&&e{let e=this.hover()??(this.focused()?this.active():null),t=e===null?void 0:this.cycles()[e];return!t||e===null?null:{cycle:t,over:$O(t,this.slowMs()),top:t.components.slice(0,3),...this.tipSide(e)}});tipSide(e){let t=this.cycles().length;return e+.5=t.start&&e<=t.end}describe(e){let t=[`Cycle ${e.id}`,ek(e.ms)];$O(e,this.slowMs())&&t.push(`over budget`),e.trigger&&t.push(`after ${e.trigger}`),t.push(`${e.checks} ${e.checks===1?`check`:`checks`}`);let n=e.components[0];return n&&t.push(`slowest ${n.name} ${ek(n.ms)}`),t.join(`, `)}select(e,t){let n=this.cycles(),r=n[Math.min(e,t)],i=n[Math.max(e,t)];r&&i&&this.range.set({from:r.id,to:i.id})}showAll(){this.range.set(null),this.anchor=null}setEnd(e,t){if(!this.cycles().length)return;let n=t.target,r=Number.parseInt(n.value,10);if(Number.isNaN(r)){n.value=String(e===`from`?this.startId():this.endId());return}let i=Math.min(Math.max(r,this.firstId()),this.lastId()),a=this.selected(),o=e===`from`?i:a[0]?.id??this.firstId(),s=e===`to`?i:a.at(-1)?.id??this.lastId();this.range.set({from:Math.min(o,s),to:Math.max(o,s)}),n.value=String(e===`from`?Math.min(o,s):Math.max(o,s))}onFocus(){this.focused.set(!0),(this.active()===null||this.active()>=this.cycles().length)&&this.active.set(this.span()?.start??Math.max(this.cycles().length-1,0)),this.anchor??=this.active()}onKey(e){let t=this.cycles().length;if(!t)return;let n=Math.min(this.active()??t-1,t-1),r=null;switch(e.key){case`ArrowRight`:case`ArrowDown`:r=n+1;break;case`ArrowLeft`:case`ArrowUp`:r=n-1;break;case`PageDown`:r=n+Wk;break;case`PageUp`:r=n-Wk;break;case`Home`:r=0;break;case`End`:r=t-1;break;case`Enter`:case` `:e.preventDefault(),this.anchor=n,this.select(n,n);return;case`Escape`:this.range()&&(e.preventDefault(),this.showAll());return;default:return}e.preventDefault(),r=Math.min(Math.max(r,0),t-1),this.active.set(r),this.hover.set(null),e.shiftKey?(this.anchor??=n,this.select(this.anchor,r)):this.anchor=r}indexAt(e){let t=e.target?.closest?.(`[data-index]`);if(t)return Number(t.getAttribute(`data-index`));let n=e.currentTarget?.getBoundingClientRect(),r=this.cycles().length;if(!n?.width||!r)return null;let i=(e.clientX-n.left)/n.width;return Math.min(Math.max(Math.floor(i*r),0),r-1)}startDrag(e){if(e.button!==0)return;let t=this.indexAt(e);t!==null&&(this.dragging=!0,this.anchor=t,this.active.set(t),this.select(t,t))}onPointerMove(e){let t=this.indexAt(e);this.hover.set(t),this.dragging&&t!==null&&this.anchor!==null&&(this.active.set(t),this.select(this.anchor,t))}endDrag(){this.dragging=!1}static ɵfac=function(t){return new(t||e)};static ɵcmp=O({type:e,selectors:[[`app-cd-cycle-chart`]],hostBindings:function(e,t){e&1&&H(`pointerup`,function(){return t.endDrag()},ku)(`pointercancel`,function(){return t.endDrag()},ku)},inputs:{cycles:[1,`cycles`],range:[1,`range`],slowMs:[1,`slowMs`]},outputs:{range:`rangeChange`},decls:69,vars:25,consts:[[1,`range`],[`type`,`number`,`inputmode`,`numeric`,3,`change`,`min`,`max`,`value`],[`type`,`button`],[1,`summary`],[1,`hint`,3,`id`],[1,`plot`],[`aria-hidden`,`true`,1,`axis`],[1,`tick`,`top`],[1,`tick`,`zero`],[1,`area`],[`aria-hidden`,`true`,1,`band`,3,`left`,`width`],[`aria-hidden`,`true`,1,`budget`],[`role`,`listbox`,`aria-multiselectable`,`true`,`aria-orientation`,`horizontal`,`tabindex`,`0`,1,`bars`,3,`keydown`,`focus`,`blur`,`pointerdown`,`pointermove`,`pointerleave`],[`role`,`option`,1,`col`,3,`id`,`over`,`out`,`active`],[`aria-hidden`,`true`,1,`tip`,3,`left`,`right`],[`aria-hidden`,`true`,1,`markers`],[3,`over`],[`aria-label`,`Chart key`,1,`legend`],[`aria-hidden`,`true`,1,`key`,`ok`],[`aria-hidden`,`true`,1,`key`,`over`],[`aria-hidden`,`true`,1,`key-marker`],[`aria-hidden`,`true`,1,`key`,`line`],[1,`table`],[`tabindex`,`0`,`role`,`region`,1,`table-wrap`],[1,`sr-only`],[`scope`,`col`,1,`num`],[`scope`,`col`],[`type`,`button`,3,`click`],[`aria-hidden`,`true`,1,`band`],[`role`,`option`,1,`col`,3,`id`],[1,`bar`],[`aria-hidden`,`true`,1,`tip`],[1,`tip-head`],[1,`flag`],[1,`tip-row`],[1,`mono`],[1,`mono`,`name`],[1,`num`]],template:function(e,t){if(e&1&&(R(0,`div`,0)(1,`label`)(2,`span`),K(3,`Start`),z(),R(4,`input`,1),U(`change`,function(e){return t.setEnd(`from`,e)}),z()(),R(5,`label`)(6,`span`),K(7,`End`),z(),R(8,`input`,1),U(`change`,function(e){return t.setEnd(`to`,e)}),z()(),A(9,Mk,2,0,`button`,2),R(10,`p`,3),K(11),z()(),R(12,`p`,4),K(13,` Drag across the bars to pick a range of cycles. With the chart focused, the arrow keys move between cycles, Shift with an arrow key extends the range, Enter picks one cycle and Escape shows all cycles again. `),z(),R(14,`div`,5)(15,`div`,6)(16,`span`,7),K(17),z(),R(18,`span`,8),K(19,`0 ms`),z()(),R(20,`div`,9),A(21,Nk,1,4,`div`,10),R(22,`div`,11)(23,`span`),K(24),z()(),R(25,`div`,12),U(`keydown`,function(e){return t.onKey(e)})(`focus`,function(){return t.onFocus()})(`blur`,function(){return t.focused.set(!1)})(`pointerdown`,function(e){return t.startDrag(e)})(`pointermove`,function(e){return t.onPointerMove(e)})(`pointerleave`,function(){return t.hover.set(null)}),M(26,Pk,2,12,`div`,13,Ak),z(),A(28,Rk,12,12,`div`,14),z()(),R(29,`div`,15),M(30,zk,1,2,`span`,16,Ak),z(),R(32,`ul`,17)(33,`li`),pg(34,`span`,18),K(35,`Within budget`),z(),R(36,`li`),pg(37,`span`,19)(38,`span`,20),K(39,`Over budget `),z(),R(40,`li`),pg(41,`span`,21),K(42),z()(),R(43,`details`,22)(44,`summary`),K(45,`Show the cycles as a table`),z(),R(46,`div`,23)(47,`table`)(48,`caption`,24),K(49),z(),R(50,`thead`)(51,`tr`)(52,`th`,25),K(53,`Cycle`),z(),R(54,`th`,25),K(55,`Duration`),z(),R(56,`th`,26),K(57,`Budget`),z(),R(58,`th`,25),K(59,`Checks`),z(),R(60,`th`,25),K(61,`Passes`),z(),R(62,`th`,26),K(63,`After`),z(),R(64,`th`,26),K(65,`Slowest component`),z()()(),R(66,`tbody`),M(67,Vk,15,7,`tr`,null,jk),z()()()()),e&2){let e,n;D(4),V(`min`,t.firstId())(`max`,t.lastId())(`value`,t.startId()),D(4),V(`min`,t.firstId())(`max`,t.lastId())(`value`,t.endId()),D(),j(t.range()?9:-1),D(2),q(t.summary()),D(),V(`id`,t.hintId),D(2),G(`flush`,t.bars().length>t.gapUntil),D(3),q(t.fmt(t.max())),D(4),j((e=t.band())?21:-1,e),D(),r_(`bottom`,t.budgetAt(),`%`),D(2),q(t.budgetLabel()),D(),k(`aria-label`,`Change detection cycles, `+t.summary())(`aria-describedby`,t.hintId)(`aria-activedescendant`,t.activeOptionId()),D(),N(t.bars()),D(2),j((n=t.tip())?28:-1,n),D(),G(`flush`,t.bars().length>t.gapUntil),D(),N(t.bars()),D(12),q(t.budgetLabel()),D(4),k(`aria-label`,t.tableLabel()),D(3),J(` `,t.tableLabel(),` `),D(18),N(t.selected())}},styles:[`[_nghost-%COMP%] { +}`]})},Ck=(e,t)=>t.cycle.id,wk=(e,t)=>t.id;function Tk(e,t){if(e&1){let e=B();R(0,`button`,27),U(`click`,function(){return S(e),C(W().showAll())}),K(1,`Show all cycles`),z()}}function Ek(e,t){if(e&1&&dg(0,`div`,28),e&2){let e=t;t_(`left`,e.left,`%`)(`width`,e.width,`%`)}}function Dk(e,t){if(e&1&&(R(0,`div`,29),dg(1,`span`,30),z()),e&2){let e=t.$implicit,n=W();G(`over`,e.over)(`out`,!n.inRange(e.index)&&!!n.range())(`active`,n.focused()&&n.active()===e.index),V(`id`,n.optionId(e.index)),k(`data-index`,e.index)(`aria-selected`,n.inRange(e.index))(`aria-label`,e.label),D(),t_(`height`,e.height,`%`)}}function Ok(e,t){e&1&&(R(0,`span`,33),K(1,`over budget`),z())}function kk(e,t){if(e&1&&(R(0,`p`),K(1,` after `),R(2,`span`,35),K(3),z()()),e&2){let e=W();D(3),q(e.cycle.trigger)}}function Ak(e,t){if(e&1&&(R(0,`p`,34)(1,`span`,36),K(2),z(),R(3,`span`),K(4),z()()),e&2){let e=t.$implicit,n=W(2);D(2),q(e.name),D(2),q(n.fmt(e.ms))}}function jk(e,t){if(e&1&&(R(0,`div`,31)(1,`p`,32)(2,`strong`),K(3),z(),R(4,`span`),K(5),z(),A(6,Ok,2,0,`span`,33),z(),A(7,kk,4,1,`p`),R(8,`p`),K(9),z(),M(10,Ak,5,2,`p`,34,$h),z()),e&2){let e=t,n=W();t_(`left`,e.left)(`right`,e.right),D(3),q(n.fmt(e.cycle.ms)),D(2),J(`cycle `,e.cycle.id),D(),j(e.over?6:-1),D(),j(e.cycle.trigger?7:-1),D(2),O_(` `,e.cycle.checks,` `,e.cycle.checks===1?`check`:`checks`,`, `,e.cycle.passes,` `,e.cycle.passes===1?`pass`:`passes`,` `),D(),N(e.top)}}function Mk(e,t){if(e&1&&dg(0,`span`),e&2){let e=t.$implicit;G(`over`,e.over)}}function Nk(e,t){if(e&1&&K(0),e&2){let e=t,n=W(2);Y(` `,e.name,` (`,n.fmt(e.ms),`) `)}}function Pk(e,t){if(e&1&&(R(0,`tr`)(1,`td`,37),K(2),z(),R(3,`td`,37),K(4),z(),R(5,`td`),K(6),z(),R(7,`td`,37),K(8),z(),R(9,`td`,37),K(10),z(),R(11,`td`,35),K(12),z(),R(13,`td`,35),A(14,Nk,1,2),z()()),e&2){let e,n=t.$implicit,r=W();D(2),q(n.id),D(2),q(r.fmt(n.ms)),D(2),q(r.isOver(n)?`Over`:`Within`),D(2),q(n.checks),D(2),q(n.passes),D(2),q(n.trigger??``),D(2),j((e=n.components[0])?14:-1,e)}}var Fk=0,Ik=80,Lk=10,Rk=class e{cycles=$([]);range=pv(null);slowMs=$(16);gapUntil=Ik;budgetLabel=X(()=>`${this.slowMs()} ms budget`);uid=`cd-chart-${Fk++}`;hintId=`${this.uid}-hint`;active=T(null);anchor=null;dragging=!1;hover=T(null);focused=T(!1);max=X(()=>XO(this.cycles(),this.slowMs()));budgetAt=X(()=>this.slowMs()/this.max()*100);bars=X(()=>{let e=this.max();return this.cycles().map((t,n)=>({cycle:t,index:n,height:t.ms/e*100,over:KO(t,this.slowMs()),label:this.describe(t)}))});firstId=X(()=>this.cycles()[0]?.id??0);lastId=X(()=>this.cycles().at(-1)?.id??0);span=X(()=>{let e=this.range();if(!e)return null;let t=this.cycles(),n=Math.min(e.from,e.to),r=Math.max(e.from,e.to),i=t.findIndex(e=>e.id>=n),a=-1;for(let e=t.length-1;e>=0;e--)if(t[e].id<=r){a=e;break}return i<0||aJO(this.cycles(),this.range()));startId=X(()=>this.selected()[0]?.id??``);endId=X(()=>this.selected().at(-1)?.id??``);band=X(()=>{let e=this.span(),t=this.cycles().length;return!e||!t?null:{left:e.start/t*100,width:(e.end-e.start+1)/t*100}});summary=X(()=>{let e=this.selected(),t=this.slowMs(),n=e.filter(e=>KO(e,t)).length;return`${this.span()?e.length===1?`Cycle ${e[0].id}`:`Cycles ${e[0].id} to ${e.at(-1).id} (${e.length})`:`All ${e.length} ${e.length===1?`cycle`:`cycles`}`}. ${n} over the ${t} ms budget.`});tableLabel=X(()=>this.span()?`Picked cycles, ${this.summary()}`:`All recorded cycles`);activeOptionId=X(()=>{let e=this.active();return this.focused()&&e!==null&&e{let e=this.hover()??(this.focused()?this.active():null),t=e===null?void 0:this.cycles()[e];return!t||e===null?null:{cycle:t,over:KO(t,this.slowMs()),top:t.components.slice(0,3),...this.tipSide(e)}});tipSide(e){let t=this.cycles().length;return e+.5=t.start&&e<=t.end}describe(e){let t=[`Cycle ${e.id}`,qO(e.ms)];KO(e,this.slowMs())&&t.push(`over budget`),e.trigger&&t.push(`after ${e.trigger}`),t.push(`${e.checks} ${e.checks===1?`check`:`checks`}`);let n=e.components[0];return n&&t.push(`slowest ${n.name} ${qO(n.ms)}`),t.join(`, `)}select(e,t){let n=this.cycles(),r=n[Math.min(e,t)],i=n[Math.max(e,t)];r&&i&&this.range.set({from:r.id,to:i.id})}showAll(){this.range.set(null),this.anchor=null}setEnd(e,t){if(!this.cycles().length)return;let n=t.target,r=Number.parseInt(n.value,10);if(Number.isNaN(r)){n.value=String(e===`from`?this.startId():this.endId());return}let i=Math.min(Math.max(r,this.firstId()),this.lastId()),a=this.selected(),o=e===`from`?i:a[0]?.id??this.firstId(),s=e===`to`?i:a.at(-1)?.id??this.lastId();this.range.set({from:Math.min(o,s),to:Math.max(o,s)}),n.value=String(e===`from`?Math.min(o,s):Math.max(o,s))}onFocus(){this.focused.set(!0),(this.active()===null||this.active()>=this.cycles().length)&&this.active.set(this.span()?.start??Math.max(this.cycles().length-1,0)),this.anchor??=this.active()}onKey(e){let t=this.cycles().length;if(!t)return;let n=Math.min(this.active()??t-1,t-1),r=null;switch(e.key){case`ArrowRight`:case`ArrowDown`:r=n+1;break;case`ArrowLeft`:case`ArrowUp`:r=n-1;break;case`PageDown`:r=n+Lk;break;case`PageUp`:r=n-Lk;break;case`Home`:r=0;break;case`End`:r=t-1;break;case`Enter`:case` `:e.preventDefault(),this.anchor=n,this.select(n,n);return;case`Escape`:this.range()&&(e.preventDefault(),this.showAll());return;default:return}e.preventDefault(),r=Math.min(Math.max(r,0),t-1),this.active.set(r),this.hover.set(null),e.shiftKey?(this.anchor??=n,this.select(this.anchor,r)):this.anchor=r}indexAt(e){let t=e.target?.closest?.(`[data-index]`);if(t)return Number(t.getAttribute(`data-index`));let n=e.currentTarget?.getBoundingClientRect(),r=this.cycles().length;if(!n?.width||!r)return null;let i=(e.clientX-n.left)/n.width;return Math.min(Math.max(Math.floor(i*r),0),r-1)}startDrag(e){if(e.button!==0)return;let t=this.indexAt(e);t!==null&&(this.dragging=!0,this.anchor=t,this.active.set(t),this.select(t,t))}onPointerMove(e){let t=this.indexAt(e);this.hover.set(t),this.dragging&&t!==null&&this.anchor!==null&&(this.active.set(t),this.select(this.anchor,t))}endDrag(){this.dragging=!1}static ɵfac=function(t){return new(t||e)};static ɵcmp=O({type:e,selectors:[[`app-cd-cycle-chart`]],hostBindings:function(e,t){e&1&&H(`pointerup`,function(){return t.endDrag()},Ou)(`pointercancel`,function(){return t.endDrag()},Ou)},inputs:{cycles:[1,`cycles`],range:[1,`range`],slowMs:[1,`slowMs`]},outputs:{range:`rangeChange`},decls:69,vars:25,consts:[[1,`range`],[`type`,`number`,`inputmode`,`numeric`,3,`change`,`min`,`max`,`value`],[`type`,`button`],[1,`summary`],[1,`hint`,3,`id`],[1,`plot`],[`aria-hidden`,`true`,1,`axis`],[1,`tick`,`top`],[1,`tick`,`zero`],[1,`area`],[`aria-hidden`,`true`,1,`band`,3,`left`,`width`],[`aria-hidden`,`true`,1,`budget`],[`role`,`listbox`,`aria-multiselectable`,`true`,`aria-orientation`,`horizontal`,`tabindex`,`0`,1,`bars`,3,`keydown`,`focus`,`blur`,`pointerdown`,`pointermove`,`pointerleave`],[`role`,`option`,1,`col`,3,`id`,`over`,`out`,`active`],[`aria-hidden`,`true`,1,`tip`,3,`left`,`right`],[`aria-hidden`,`true`,1,`markers`],[3,`over`],[`aria-label`,`Chart key`,1,`legend`],[`aria-hidden`,`true`,1,`key`,`ok`],[`aria-hidden`,`true`,1,`key`,`over`],[`aria-hidden`,`true`,1,`key-marker`],[`aria-hidden`,`true`,1,`key`,`line`],[1,`table`],[`tabindex`,`0`,`role`,`region`,1,`table-wrap`],[1,`sr-only`],[`scope`,`col`,1,`num`],[`scope`,`col`],[`type`,`button`,3,`click`],[`aria-hidden`,`true`,1,`band`],[`role`,`option`,1,`col`,3,`id`],[1,`bar`],[`aria-hidden`,`true`,1,`tip`],[1,`tip-head`],[1,`flag`],[1,`tip-row`],[1,`mono`],[1,`mono`,`name`],[1,`num`]],template:function(e,t){if(e&1&&(R(0,`div`,0)(1,`label`)(2,`span`),K(3,`Start`),z(),R(4,`input`,1),U(`change`,function(e){return t.setEnd(`from`,e)}),z()(),R(5,`label`)(6,`span`),K(7,`End`),z(),R(8,`input`,1),U(`change`,function(e){return t.setEnd(`to`,e)}),z()(),A(9,Tk,2,0,`button`,2),R(10,`p`,3),K(11),z()(),R(12,`p`,4),K(13,` Drag across the bars to pick a range of cycles. With the chart focused, the arrow keys move between cycles, Shift with an arrow key extends the range, Enter picks one cycle and Escape shows all cycles again. `),z(),R(14,`div`,5)(15,`div`,6)(16,`span`,7),K(17),z(),R(18,`span`,8),K(19,`0 ms`),z()(),R(20,`div`,9),A(21,Ek,1,4,`div`,10),R(22,`div`,11)(23,`span`),K(24),z()(),R(25,`div`,12),U(`keydown`,function(e){return t.onKey(e)})(`focus`,function(){return t.onFocus()})(`blur`,function(){return t.focused.set(!1)})(`pointerdown`,function(e){return t.startDrag(e)})(`pointermove`,function(e){return t.onPointerMove(e)})(`pointerleave`,function(){return t.hover.set(null)}),M(26,Dk,2,12,`div`,13,Ck),z(),A(28,jk,12,12,`div`,14),z()(),R(29,`div`,15),M(30,Mk,1,2,`span`,16,Ck),z(),R(32,`ul`,17)(33,`li`),dg(34,`span`,18),K(35,`Within budget`),z(),R(36,`li`),dg(37,`span`,19)(38,`span`,20),K(39,`Over budget `),z(),R(40,`li`),dg(41,`span`,21),K(42),z()(),R(43,`details`,22)(44,`summary`),K(45,`Show the cycles as a table`),z(),R(46,`div`,23)(47,`table`)(48,`caption`,24),K(49),z(),R(50,`thead`)(51,`tr`)(52,`th`,25),K(53,`Cycle`),z(),R(54,`th`,25),K(55,`Duration`),z(),R(56,`th`,26),K(57,`Budget`),z(),R(58,`th`,25),K(59,`Checks`),z(),R(60,`th`,25),K(61,`Passes`),z(),R(62,`th`,26),K(63,`After`),z(),R(64,`th`,26),K(65,`Slowest component`),z()()(),R(66,`tbody`),M(67,Pk,15,7,`tr`,null,wk),z()()()()),e&2){let e,n;D(4),V(`min`,t.firstId())(`max`,t.lastId())(`value`,t.startId()),D(4),V(`min`,t.firstId())(`max`,t.lastId())(`value`,t.endId()),D(),j(t.range()?9:-1),D(2),q(t.summary()),D(),V(`id`,t.hintId),D(2),G(`flush`,t.bars().length>t.gapUntil),D(3),q(t.fmt(t.max())),D(4),j((e=t.band())?21:-1,e),D(),t_(`bottom`,t.budgetAt(),`%`),D(2),q(t.budgetLabel()),D(),k(`aria-label`,`Change detection cycles, `+t.summary())(`aria-describedby`,t.hintId)(`aria-activedescendant`,t.activeOptionId()),D(),N(t.bars()),D(2),j((n=t.tip())?28:-1,n),D(),G(`flush`,t.bars().length>t.gapUntil),D(),N(t.bars()),D(12),q(t.budgetLabel()),D(4),k(`aria-label`,t.tableLabel()),D(3),J(` `,t.tableLabel(),` `),D(18),N(t.selected())}},styles:[`[_nghost-%COMP%] { display: block; min-width: 0; } @@ -1335,7 +1335,7 @@ td.mono[_ngcontent-%COMP%] { .bar[_ngcontent-%COMP%] { transition: none; } -}`]})},Kk=(e,t)=>t.id,qk=(e,t)=>t.index,Jk=(e,t)=>t.kind;function Yk(e,t){if(e&1&&(R(0,`p`,0),K(1),z()),e&2){let e=W(2);D(),Y(` Pick `,e.max,` cycles or fewer to see their spans. `,e.count(),` are picked. `)}}function Xk(e,t){if(e&1&&(R(0,`span`),K(1),z()),e&2){let e=t.$implicit;r_(`left`,e.x,`%`)(`width`,e.w,`%`),D(),J(`cycle `,e.id)}}function Zk(e,t){if(e&1){let e=B();R(0,`button`,11),U(`focus`,function(){let t=S(e).$implicit;return C(W(3).current.set(t.index))})(`mouseenter`,function(){let t=S(e).$implicit;return C(W(3).hover.set(t.index))})(`mouseleave`,function(){return S(e),C(W(3).hover.set(null))})(`click`,function(){let t=S(e).$implicit;return C(W(3).choose(t))}),R(1,`span`,12),K(2),z()()}if(e&2){let e=t.$implicit,n=W(3);i_(z_(`block kind-`,e.kind)),r_(`left`,e.x,`%`)(`width`,e.w,`%`)(`top`,e.depth*n.row,`px`),G(`narrow`,e.w<4),k(`tabindex`,e.index===n.tabStop()?0:-1)(`data-index`,e.index)(`aria-label`,n.describe(e))(`aria-disabled`,e.component?null:`true`),D(2),q(e.name)}}function Qk(e,t){if(e&1&&(R(0,`li`),pg(1,`span`,13),K(2),z()),e&2){let e=t.$implicit;D(),i_(z_(`key kind-`,e.kind)),D(),q(e.label)}}function $k(e,t){if(e&1&&(R(0,`p`,0),K(1),z()),e&2){let e=W(3);D(),Y(` Each cycle keeps its longest spans. `,e.dropped(),` shorter `,e.dropped()===1?`span was`:`spans were`,` left out. `)}}function eA(e,t){if(e&1&&(R(0,`tr`)(1,`td`,17),K(2),z(),R(3,`td`,18),K(4),z(),R(5,`td`),K(6),z(),R(7,`td`,17),K(8),z(),R(9,`td`,17),K(10),z(),R(11,`td`,17),K(12),z(),R(13,`td`,17),K(14),z()()),e&2){let e=t.$implicit,n=W(4);D(2),q(e.cycleId),D(),r_(`padding-left`,6+e.depth*8,`px`),D(),q(e.name),D(2),q(n.kindLabel(e)),D(2),q(e.depth),D(2),q(n.fmt(e.start)),D(2),q(n.fmt(e.ms)),D(2),q(n.fmt(e.selfMs))}}function tA(e,t){if(e&1&&(R(0,`div`,10)(1,`table`)(2,`caption`,14),K(3),z(),R(4,`thead`)(5,`tr`)(6,`th`,15),K(7,`Cycle`),z(),R(8,`th`,16),K(9,`Span`),z(),R(10,`th`,16),K(11,`Kind`),z(),R(12,`th`,15),K(13,`Depth`),z(),R(14,`th`,15),K(15,`Start`),z(),R(16,`th`,15),K(17,`Total`),z(),R(18,`th`,15),K(19,`Self`),z()()(),R(20,`tbody`),M(21,eA,15,9,`tr`,null,qk),z()()()),e&2){let e=W(),t=W(2);k(`aria-label`,t.tableLabel()),D(3),J(` `,t.tableLabel(),` `),D(18),N(e.blocks)}}function nA(e,t){if(e&1){let e=B();R(0,`div`,1),U(`keydown`,function(t){return S(e),C(W(2).onKey(t))}),R(1,`div`,2),M(2,Xk,2,5,`span`,3,Kk),z(),R(4,`div`,4),M(5,Zk,3,16,`button`,5,qk),z()(),R(7,`p`,6),K(8),z(),R(9,`ul`,7),M(10,Qk,3,4,`li`,null,Jk),z(),R(12,`p`,8),K(13,` Arrow keys move along a row, Up goes to the enclosing span and Down to the first nested one. Enter on a component shows it in the tree. `),z(),A(14,$k,2,2,`p`,0),R(15,`details`,9),U(`toggle`,function(t){return S(e),C(W(2).onToggle(t))}),R(16,`summary`),K(17,`Show the spans as a table`),z(),A(18,tA,23,2,`div`,10),z()}if(e&2){let e=t,n=W(2);k(`aria-label`,n.label()),D(2),N(e.cycles),D(2),r_(`height`,e.depth*n.row,`px`),D(),N(e.blocks),D(3),q(n.readout()),D(2),N(n.kinds),D(4),j(n.dropped()?14:-1),D(4),j(n.tableOpen()?18:-1)}}function rA(e,t){if(e&1&&(R(0,`h3`),K(1,`Spans in the picked cycles`),z(),A(2,Yk,2,2,`p`,0)(3,nA,19,6)),e&2){let e,t=W();D(2),j(t.tooMany()?2:(e=t.graph())?3:-1,e)}}var iA=22;function aA(e,t){for(let n=e.length-1;n>=0;n--)if(t(e[n]))return e[n]}var oA=class e{cycles=$([]);names=$([]);scope=$(`the recording`);pick=uv();row=iA;max=30;kinds=[`c`,`h`,`r`,`o`].map(e=>({kind:e,label:ak[e]}));current=T(0);tableOpen=T(!1);hover=T(null);hasSpans=X(()=>this.cycles().some(e=>e.spans?.length));count=X(()=>this.cycles().length);tooMany=X(()=>this.count()>30);graph=X(()=>this.tooMany()?null:sk(this.cycles(),this.names()));tabStop=X(()=>Math.min(this.current(),Math.max((this.graph()?.blocks.length??1)-1,0)));dropped=X(()=>this.graph()?.cycles.reduce((e,t)=>e+t.droppedSpans,0)??0);label=X(()=>`Spans in ${this.scope()} over time, nested by depth. Pick a component to show it in the tree.`);readout=X(()=>{let e=(this.graph()?.blocks??[])[this.hover()??this.tabStop()];return e?this.describe(e):``});tableLabel=X(()=>`Timed spans in ${this.scope()}`);fmt(e){return ek(e)}kindLabel(e){return ak[e.kind]}onToggle(e){this.tableOpen.set(e.target.open)}describe(e){let t=[e.name,ak[e.kind],`${ek(e.ms)} total`];return e.selfMs!==e.ms&&t.push(`${ek(e.selfMs)} self`),t.push(e.start<0?`cycle ${e.cycleId}, ${ek(-e.start)} before it started`:`cycle ${e.cycleId} at ${ek(e.start)}`),t.join(`, `)}choose(e){this.current.set(e.index),e.component&&this.pick.emit(e.component)}onKey(e){let t=this.graph()?.blocks??[];if(!t.length)return;let n=t[this.tabStop()],r;switch(e.key){case`ArrowRight`:r=t.find(e=>e.index>n.index&&e.depth===n.depth);break;case`ArrowLeft`:r=aA(t,e=>e.indexe.indexe.parent===n.index)??t.find(e=>e.index>n.index&&e.depth===n.depth+1);break;case`Home`:r=t[0];break;case`End`:r=t.at(-1);break;default:return}e.preventDefault(),this.hover.set(null),r&&(this.current.set(r.index),e.currentTarget.querySelector(`button[data-index="${r.index}"]`)?.focus())}static ɵfac=function(t){return new(t||e)};static ɵcmp=O({type:e,selectors:[[`app-cd-flame-graph`]],inputs:{cycles:[1,`cycles`],names:[1,`names`],scope:[1,`scope`]},outputs:{pick:`pick`},decls:1,vars:1,consts:[[1,`note`],[`role`,`group`,1,`flame`,3,`keydown`],[`aria-hidden`,`true`,1,`cycles`],[3,`left`,`width`],[1,`rows`],[`type`,`button`,3,`class`,`narrow`,`left`,`width`,`top`],[`aria-hidden`,`true`,1,`readout`],[`aria-label`,`Span kinds`,1,`legend`],[1,`hint`],[1,`table`,3,`toggle`],[`tabindex`,`0`,`role`,`region`,1,`table-wrap`],[`type`,`button`,3,`focus`,`mouseenter`,`mouseleave`,`click`],[1,`text`],[`aria-hidden`,`true`],[1,`sr-only`],[`scope`,`col`,1,`num`],[`scope`,`col`],[1,`num`],[1,`mono`]],template:function(e,t){e&1&&A(0,rA,4,1),e&2&&j(t.hasSpans()?0:-1)},styles:[`[_nghost-%COMP%] { +}`]})},zk=(e,t)=>t.id,Bk=(e,t)=>t.index,Vk=(e,t)=>t.kind;function Hk(e,t){if(e&1&&(R(0,`p`,0),K(1),z()),e&2){let e=W(2);D(),Y(` Pick `,e.max,` cycles or fewer to see their spans. `,e.count(),` are picked. `)}}function Uk(e,t){if(e&1&&(R(0,`span`),K(1),z()),e&2){let e=t.$implicit;t_(`left`,e.x,`%`)(`width`,e.w,`%`),D(),J(`cycle `,e.id)}}function Wk(e,t){if(e&1){let e=B();R(0,`button`,11),U(`focus`,function(){let t=S(e).$implicit;return C(W(3).current.set(t.index))})(`mouseenter`,function(){let t=S(e).$implicit;return C(W(3).hover.set(t.index))})(`mouseleave`,function(){return S(e),C(W(3).hover.set(null))})(`click`,function(){let t=S(e).$implicit;return C(W(3).choose(t))}),R(1,`span`,12),K(2),z()()}if(e&2){let e=t.$implicit,n=W(3);n_(L_(`block kind-`,e.kind)),t_(`left`,e.x,`%`)(`width`,e.w,`%`)(`top`,e.depth*n.row,`px`),G(`narrow`,e.w<4),k(`tabindex`,e.index===n.tabStop()?0:-1)(`data-index`,e.index)(`aria-label`,n.describe(e))(`aria-disabled`,e.component?null:`true`),D(2),q(e.name)}}function Gk(e,t){if(e&1&&(R(0,`li`),dg(1,`span`,13),K(2),z()),e&2){let e=t.$implicit;D(),n_(L_(`key kind-`,e.kind)),D(),q(e.label)}}function Kk(e,t){if(e&1&&(R(0,`p`,0),K(1),z()),e&2){let e=W(3);D(),Y(` Each cycle keeps its longest spans. `,e.dropped(),` shorter `,e.dropped()===1?`span was`:`spans were`,` left out. `)}}function qk(e,t){if(e&1&&(R(0,`tr`)(1,`td`,17),K(2),z(),R(3,`td`,18),K(4),z(),R(5,`td`),K(6),z(),R(7,`td`,17),K(8),z(),R(9,`td`,17),K(10),z(),R(11,`td`,17),K(12),z(),R(13,`td`,17),K(14),z()()),e&2){let e=t.$implicit,n=W(4);D(2),q(e.cycleId),D(),t_(`padding-left`,6+e.depth*8,`px`),D(),q(e.name),D(2),q(n.kindLabel(e)),D(2),q(e.depth),D(2),q(n.fmt(e.start)),D(2),q(n.fmt(e.ms)),D(2),q(n.fmt(e.selfMs))}}function Jk(e,t){if(e&1&&(R(0,`div`,10)(1,`table`)(2,`caption`,14),K(3),z(),R(4,`thead`)(5,`tr`)(6,`th`,15),K(7,`Cycle`),z(),R(8,`th`,16),K(9,`Span`),z(),R(10,`th`,16),K(11,`Kind`),z(),R(12,`th`,15),K(13,`Depth`),z(),R(14,`th`,15),K(15,`Start`),z(),R(16,`th`,15),K(17,`Total`),z(),R(18,`th`,15),K(19,`Self`),z()()(),R(20,`tbody`),M(21,qk,15,9,`tr`,null,Bk),z()()()),e&2){let e=W(),t=W(2);k(`aria-label`,t.tableLabel()),D(3),J(` `,t.tableLabel(),` `),D(18),N(e.blocks)}}function Yk(e,t){if(e&1){let e=B();R(0,`div`,1),U(`keydown`,function(t){return S(e),C(W(2).onKey(t))}),R(1,`div`,2),M(2,Uk,2,5,`span`,3,zk),z(),R(4,`div`,4),M(5,Wk,3,16,`button`,5,Bk),z()(),R(7,`p`,6),K(8),z(),R(9,`ul`,7),M(10,Gk,3,4,`li`,null,Vk),z(),R(12,`p`,8),K(13,` Arrow keys move along a row, Up goes to the enclosing span and Down to the first nested one. Enter on a component shows it in the tree. `),z(),A(14,Kk,2,2,`p`,0),R(15,`details`,9),U(`toggle`,function(t){return S(e),C(W(2).onToggle(t))}),R(16,`summary`),K(17,`Show the spans as a table`),z(),A(18,Jk,23,2,`div`,10),z()}if(e&2){let e=t,n=W(2);k(`aria-label`,n.label()),D(2),N(e.cycles),D(2),t_(`height`,e.depth*n.row,`px`),D(),N(e.blocks),D(3),q(n.readout()),D(2),N(n.kinds),D(4),j(n.dropped()?14:-1),D(4),j(n.tableOpen()?18:-1)}}function Xk(e,t){if(e&1&&(R(0,`h3`),K(1,`Spans in the picked cycles`),z(),A(2,Hk,2,2,`p`,0)(3,Yk,19,6)),e&2){let e,t=W();D(2),j(t.tooMany()?2:(e=t.graph())?3:-1,e)}}var Zk=22;function Qk(e,t){for(let n=e.length-1;n>=0;n--)if(t(e[n]))return e[n]}var $k=class e{cycles=$([]);names=$([]);scope=$(`the recording`);pick=cv();row=Zk;max=30;kinds=[`c`,`h`,`r`,`o`].map(e=>({kind:e,label:QO[e]}));current=T(0);tableOpen=T(!1);hover=T(null);hasSpans=X(()=>this.cycles().some(e=>e.spans?.length));count=X(()=>this.cycles().length);tooMany=X(()=>this.count()>30);graph=X(()=>this.tooMany()?null:ek(this.cycles(),this.names()));tabStop=X(()=>Math.min(this.current(),Math.max((this.graph()?.blocks.length??1)-1,0)));dropped=X(()=>this.graph()?.cycles.reduce((e,t)=>e+t.droppedSpans,0)??0);label=X(()=>`Spans in ${this.scope()} over time, nested by depth. Pick a component to show it in the tree.`);readout=X(()=>{let e=(this.graph()?.blocks??[])[this.hover()??this.tabStop()];return e?this.describe(e):``});tableLabel=X(()=>`Timed spans in ${this.scope()}`);fmt(e){return qO(e)}kindLabel(e){return QO[e.kind]}onToggle(e){this.tableOpen.set(e.target.open)}describe(e){let t=[e.name,QO[e.kind],`${qO(e.ms)} total`];return e.selfMs!==e.ms&&t.push(`${qO(e.selfMs)} self`),t.push(e.start<0?`cycle ${e.cycleId}, ${qO(-e.start)} before it started`:`cycle ${e.cycleId} at ${qO(e.start)}`),t.join(`, `)}choose(e){this.current.set(e.index),e.component&&this.pick.emit(e.component)}onKey(e){let t=this.graph()?.blocks??[];if(!t.length)return;let n=t[this.tabStop()],r;switch(e.key){case`ArrowRight`:r=t.find(e=>e.index>n.index&&e.depth===n.depth);break;case`ArrowLeft`:r=Qk(t,e=>e.indexe.indexe.parent===n.index)??t.find(e=>e.index>n.index&&e.depth===n.depth+1);break;case`Home`:r=t[0];break;case`End`:r=t.at(-1);break;default:return}e.preventDefault(),this.hover.set(null),r&&(this.current.set(r.index),e.currentTarget.querySelector(`button[data-index="${r.index}"]`)?.focus())}static ɵfac=function(t){return new(t||e)};static ɵcmp=O({type:e,selectors:[[`app-cd-flame-graph`]],inputs:{cycles:[1,`cycles`],names:[1,`names`],scope:[1,`scope`]},outputs:{pick:`pick`},decls:1,vars:1,consts:[[1,`note`],[`role`,`group`,1,`flame`,3,`keydown`],[`aria-hidden`,`true`,1,`cycles`],[3,`left`,`width`],[1,`rows`],[`type`,`button`,3,`class`,`narrow`,`left`,`width`,`top`],[`aria-hidden`,`true`,1,`readout`],[`aria-label`,`Span kinds`,1,`legend`],[1,`hint`],[1,`table`,3,`toggle`],[`tabindex`,`0`,`role`,`region`,1,`table-wrap`],[`type`,`button`,3,`focus`,`mouseenter`,`mouseleave`,`click`],[1,`text`],[`aria-hidden`,`true`],[1,`sr-only`],[`scope`,`col`,1,`num`],[`scope`,`col`],[1,`num`],[1,`mono`]],template:function(e,t){e&1&&A(0,Xk,4,1),e&2&&j(t.hasSpans()?0:-1)},styles:[`[_nghost-%COMP%] { display: block; min-width: 0; } @@ -1542,7 +1542,7 @@ td.mono[_ngcontent-%COMP%] { .num[_ngcontent-%COMP%] { text-align: right; font-variant-numeric: tabular-nums; -}`]})};function sA(e,t){if(e&1&&(R(0,`tr`)(1,`td`,5),K(2),z(),R(3,`td`,6),K(4),z(),R(5,`td`,6),K(6),z(),R(7,`td`,6),K(8),z()()),e&2){let e=t.$implicit,n=W(3);D(2),Y(``,e.name,`.`,e.hook),D(2),q(e.calls),D(2),q(n.ms(e.ms)),D(2),q(n.ms(e.maxMs))}}function cA(e,t){if(e&1&&(R(0,`div`)(1,`h3`),K(2,`Lifecycle hooks`),z(),R(3,`table`)(4,`thead`)(5,`tr`)(6,`th`,3),K(7,`Hook`),z(),R(8,`th`,4),K(9,`Calls`),z(),R(10,`th`,4),K(11,`Time`),z(),R(12,`th`,4),K(13,`Slowest`),z()()(),R(14,`tbody`),M(15,sA,9,5,`tr`,null,tg),z()()()),e&2){let e=W(2);D(15),N(e.hooks())}}function lA(e,t){if(e&1&&K(0),e&2){let e=W().$implicit;J(` (`,e.listener,`) `)}}function uA(e,t){if(e&1&&(R(0,`tr`)(1,`td`,5),K(2),A(3,lA,1,1),z(),R(4,`td`,6),K(5),z(),R(6,`td`,6),K(7),z(),R(8,`td`,6),K(9),z()()),e&2){let e=t.$implicit,n=W(3);D(2),J(` `,e.name,` `),D(),j(e.listener?3:-1),D(2),q(e.calls),D(2),q(n.ms(e.ms)),D(2),q(n.ms(e.maxMs))}}function dA(e,t){if(e&1&&(R(0,`div`)(1,`h3`),K(2,`Output listeners`),z(),R(3,`table`)(4,`thead`)(5,`tr`)(6,`th`,3),K(7,`Listener`),z(),R(8,`th`,4),K(9,`Calls`),z(),R(10,`th`,4),K(11,`Time`),z(),R(12,`th`,4),K(13,`Slowest`),z()()(),R(14,`tbody`),M(15,uA,10,5,`tr`,null,tg),z()()()),e&2){let e=W(2);D(15),N(e.outputs())}}function fA(e,t){if(e&1&&(R(0,`p`,1),K(1),z()),e&2){let e=t,n=W(2);D(),A_(` afterRender callbacks ran `,e.runs,` `,e.runs===1?`time`:`times`,`, `,n.ms(e.ms),` in total, slowest `,n.ms(e.maxMs),`. `)}}function pA(e,t){if(e&1&&(R(0,`p`,2),K(1),z()),e&2){let e=W(2);D(),Y(` `,e.dropped(),` more hook or output `,e.dropped()===1?`row is`:`rows are`,` left out. A recording lists at most 100 of each. `)}}function mA(e,t){if(e&1&&(R(0,`div`,0),A(1,cA,17,0,`div`),A(2,dA,17,0,`div`),z(),A(3,fA,2,4,`p`,1),A(4,pA,2,2,`p`,2)),e&2){let e,t=W();D(),j(t.hooks().length?1:-1),D(),j(t.outputs().length?2:-1),D(),j((e=t.afterRender())?3:-1,e),D(),j(t.dropped()?4:-1)}}var hA=10;function gA(e){return`${e<10?e.toFixed(2):Math.round(e)} ms`}var _A=class e{page=$(null);hooks=X(()=>(this.page()?.hooks??[]).slice(0,hA));outputs=X(()=>(this.page()?.outputs??[]).slice(0,hA));afterRender=X(()=>{let e=this.page()?.afterRender;return e?.runs?e:null});dropped=X(()=>this.page()?.droppedTimings??0);ms(e){return gA(e)}static ɵfac=function(t){return new(t||e)};static ɵcmp=O({type:e,selectors:[[`app-cd-timing`]],inputs:{page:[1,`page`]},decls:1,vars:1,consts:[[1,`timing`],[1,`after-render`],[1,`note`],[`scope`,`col`],[`scope`,`col`,1,`num`],[1,`mono`],[1,`num`]],template:function(e,t){e&1&&A(0,mA,5,4),e&2&&j(t.hooks().length||t.outputs().length||t.afterRender()?0:-1)},styles:[`[_nghost-%COMP%] { +}`]})};function eA(e,t){if(e&1&&(R(0,`tr`)(1,`td`,5),K(2),z(),R(3,`td`,6),K(4),z(),R(5,`td`,6),K(6),z(),R(7,`td`,6),K(8),z()()),e&2){let e=t.$implicit,n=W(3);D(2),Y(``,e.name,`.`,e.hook),D(2),q(e.calls),D(2),q(n.ms(e.ms)),D(2),q(n.ms(e.maxMs))}}function tA(e,t){if(e&1&&(R(0,`div`)(1,`h3`),K(2,`Lifecycle hooks`),z(),R(3,`table`)(4,`thead`)(5,`tr`)(6,`th`,3),K(7,`Hook`),z(),R(8,`th`,4),K(9,`Calls`),z(),R(10,`th`,4),K(11,`Time`),z(),R(12,`th`,4),K(13,`Slowest`),z()()(),R(14,`tbody`),M(15,eA,9,5,`tr`,null,$h),z()()()),e&2){let e=W(2);D(15),N(e.hooks())}}function nA(e,t){if(e&1&&K(0),e&2){let e=W().$implicit;J(` (`,e.listener,`) `)}}function rA(e,t){if(e&1&&(R(0,`tr`)(1,`td`,5),K(2),A(3,nA,1,1),z(),R(4,`td`,6),K(5),z(),R(6,`td`,6),K(7),z(),R(8,`td`,6),K(9),z()()),e&2){let e=t.$implicit,n=W(3);D(2),J(` `,e.name,` `),D(),j(e.listener?3:-1),D(2),q(e.calls),D(2),q(n.ms(e.ms)),D(2),q(n.ms(e.maxMs))}}function iA(e,t){if(e&1&&(R(0,`div`)(1,`h3`),K(2,`Output listeners`),z(),R(3,`table`)(4,`thead`)(5,`tr`)(6,`th`,3),K(7,`Listener`),z(),R(8,`th`,4),K(9,`Calls`),z(),R(10,`th`,4),K(11,`Time`),z(),R(12,`th`,4),K(13,`Slowest`),z()()(),R(14,`tbody`),M(15,rA,10,5,`tr`,null,$h),z()()()),e&2){let e=W(2);D(15),N(e.outputs())}}function aA(e,t){if(e&1&&(R(0,`p`,1),K(1),z()),e&2){let e=t,n=W(2);D(),O_(` afterRender callbacks ran `,e.runs,` `,e.runs===1?`time`:`times`,`, `,n.ms(e.ms),` in total, slowest `,n.ms(e.maxMs),`. `)}}function oA(e,t){if(e&1&&(R(0,`p`,2),K(1),z()),e&2){let e=W(2);D(),Y(` `,e.dropped(),` more hook or output `,e.dropped()===1?`row is`:`rows are`,` left out. A recording lists at most 100 of each. `)}}function sA(e,t){if(e&1&&(R(0,`div`,0),A(1,tA,17,0,`div`),A(2,iA,17,0,`div`),z(),A(3,aA,2,4,`p`,1),A(4,oA,2,2,`p`,2)),e&2){let e,t=W();D(),j(t.hooks().length?1:-1),D(),j(t.outputs().length?2:-1),D(),j((e=t.afterRender())?3:-1,e),D(),j(t.dropped()?4:-1)}}var cA=10;function lA(e){return`${e<10?e.toFixed(2):Math.round(e)} ms`}var uA=class e{page=$(null);hooks=X(()=>(this.page()?.hooks??[]).slice(0,cA));outputs=X(()=>(this.page()?.outputs??[]).slice(0,cA));afterRender=X(()=>{let e=this.page()?.afterRender;return e?.runs?e:null});dropped=X(()=>this.page()?.droppedTimings??0);ms(e){return lA(e)}static ɵfac=function(t){return new(t||e)};static ɵcmp=O({type:e,selectors:[[`app-cd-timing`]],inputs:{page:[1,`page`]},decls:1,vars:1,consts:[[1,`timing`],[1,`after-render`],[1,`note`],[`scope`,`col`],[`scope`,`col`,1,`num`],[1,`mono`],[1,`num`]],template:function(e,t){e&1&&A(0,sA,5,4),e&2&&j(t.hooks().length||t.outputs().length||t.afterRender()?0:-1)},styles:[`[_nghost-%COMP%] { display: block; } @@ -1602,7 +1602,7 @@ td.mono[_ngcontent-%COMP%] { margin: 8px 0 0; color: var(--%NS%text-2); font-size: 12px; -}`]})};function vA(e,t){if(e&1&&(R(0,`p`,5),K(1),z()),e&2){let e=W();D(),q(e.error())}}function yA(e,t){let n=new Blob([JSON.stringify(e,null,2)],{type:`application/json`}),r=URL.createObjectURL(n),i=document.createElement(`a`);i.href=r,i.download=t,document.body.append(i),i.click(),i.remove(),setTimeout(()=>URL.revokeObjectURL(r),0)}var bA=class e{page=$(null);maxCycles=$(200);imported=uv();error=T(``);hasCycles(){return(this.page()?.cycles.length??0)>0}exportJson(){let e=this.page();e&&yA(GO(e,e.pageId),`change-detection-${e.pageId}.json`)}exportTrace(){let e=this.page();e&&yA(QO(e,e.pageId),`change-detection-${e.pageId}.trace.json`)}async read(e){let t=e.files?.[0];if(e.value=``,!t)return;if(t.size>2e7){this.error.set(`${t.name}: The file is larger than 20 MB.`);return}let n;try{n=await t.text()}catch{this.error.set(`Could not read the file.`);return}let r=KO(n,this.maxCycles());if(!r.ok){this.error.set(`${t.name}: ${r.error}`);return}this.error.set(``),this.imported.emit({fileName:t.name,page:{...r.recording,pageId:r.pageId,supported:!0}})}static ɵfac=function(t){return new(t||e)};static ɵcmp=O({type:e,selectors:[[`app-cd-transfer`]],inputs:{page:[1,`page`],maxCycles:[1,`maxCycles`]},outputs:{imported:`imported`},decls:10,vars:3,consts:[[`file`,``],[`role`,`group`,`aria-label`,`Export and import the recording`,1,`transfer`],[`type`,`button`,3,`click`,`disabled`],[`type`,`button`,3,`click`],[`type`,`file`,`accept`,`.json,application/json`,`hidden`,``,3,`change`],[`role`,`alert`,1,`error`]],template:function(e,t){if(e&1){let e=B();R(0,`div`,1)(1,`button`,2),U(`click`,function(){return t.exportJson()}),K(2,`Export JSON`),z(),R(3,`button`,2),U(`click`,function(){return t.exportTrace()}),K(4,` Export trace (Perfetto) `),z(),R(5,`button`,3),U(`click`,function(){return S(e),C(Ig(8).click())}),K(6,`Import`),z(),R(7,`input`,4,0),U(`change`,function(){S(e);let n=Ig(8);return C(t.read(n))}),z()(),A(9,vA,2,1,`p`,5)}e&2&&(D(),V(`disabled`,!t.hasCycles()),D(2),V(`disabled`,!t.hasCycles()),D(6),j(t.error()?9:-1))},styles:[`[_nghost-%COMP%] { +}`]})};function dA(e,t){if(e&1&&(R(0,`p`,5),K(1),z()),e&2){let e=W();D(),q(e.error())}}function fA(e,t){let n=new Blob([JSON.stringify(e,null,2)],{type:`application/json`}),r=URL.createObjectURL(n),i=document.createElement(`a`);i.href=r,i.download=t,document.body.append(i),i.click(),i.remove(),setTimeout(()=>URL.revokeObjectURL(r),0)}var pA=class e{page=$(null);maxCycles=$(200);imported=cv();error=T(``);hasCycles(){return(this.page()?.cycles.length??0)>0}exportJson(){let e=this.page();e&&fA(RO(e,e.pageId),`change-detection-${e.pageId}.json`)}exportTrace(){let e=this.page();e&&fA(GO(e,e.pageId),`change-detection-${e.pageId}.trace.json`)}async read(e){let t=e.files?.[0];if(e.value=``,!t)return;if(t.size>2e7){this.error.set(`${t.name}: The file is larger than 20 MB.`);return}let n;try{n=await t.text()}catch{this.error.set(`Could not read the file.`);return}let r=zO(n,this.maxCycles());if(!r.ok){this.error.set(`${t.name}: ${r.error}`);return}this.error.set(``),this.imported.emit({fileName:t.name,page:{...r.recording,pageId:r.pageId,supported:!0}})}static ɵfac=function(t){return new(t||e)};static ɵcmp=O({type:e,selectors:[[`app-cd-transfer`]],inputs:{page:[1,`page`],maxCycles:[1,`maxCycles`]},outputs:{imported:`imported`},decls:10,vars:3,consts:[[`file`,``],[`role`,`group`,`aria-label`,`Export and import the recording`,1,`transfer`],[`type`,`button`,3,`click`,`disabled`],[`type`,`button`,3,`click`],[`type`,`file`,`accept`,`.json,application/json`,`hidden`,``,3,`change`],[`role`,`alert`,1,`error`]],template:function(e,t){if(e&1){let e=B();R(0,`div`,1)(1,`button`,2),U(`click`,function(){return t.exportJson()}),K(2,`Export JSON`),z(),R(3,`button`,2),U(`click`,function(){return t.exportTrace()}),K(4,` Export trace (Perfetto) `),z(),R(5,`button`,3),U(`click`,function(){return S(e),C(Pg(8).click())}),K(6,`Import`),z(),R(7,`input`,4,0),U(`change`,function(){S(e);let n=Pg(8);return C(t.read(n))}),z()(),A(9,dA,2,1,`p`,5)}e&2&&(D(),V(`disabled`,!t.hasCycles()),D(2),V(`disabled`,!t.hasCycles()),D(6),j(t.error()?9:-1))},styles:[`[_nghost-%COMP%] { display: contents; } @@ -1644,7 +1644,7 @@ button[_ngcontent-%COMP%]:disabled { margin: 0; color: var(--%NS%danger-text); font-size: 12px; -}`]})},xA=(e,t)=>t.stat.name;function SA(e,t){if(e&1&&(R(0,`span`,8),K(1),z()),e&2){let e=W(2).$implicit;D(),J(``,e.other,` more`)}}function CA(e,t){if(e&1&&(R(0,`div`,6)(1,`span`,7),K(2),z(),A(3,SA,2,1,`span`,8),z()),e&2){let e=W().$implicit;r_(`--%NS%tone`,e.tone+`%`),D(2),q(e.label),D(),j(e.roomy?3:-1)}}function wA(e,t){if(e&1&&(R(0,`span`,10),K(1),z(),R(2,`span`,11),K(3),z()),e&2){let e=W(2).$implicit,t=W(2);D(),q(e.stat.name),D(2),q(t.fmt(e.stat.ms))}}function TA(e,t){if(e&1){let e=B();R(0,`button`,9),U(`focus`,function(){S(e);let t=W().$index;return C(W(2).current.set(t))})(`click`,function(){S(e);let t=W().$implicit;return C(W(2).pick.emit(t.stat.name))}),A(1,wA,4,2),z()}if(e&2){let e=W(),t=e.$implicit,n=e.$index,r=W(2);r_(`--%NS%tone`,t.tone+`%`),k(`tabindex`,n===r.tabStop()?0:-1)(`aria-label`,t.label)(`data-index`,n),D(),j(t.roomy?1:-1)}}function EA(e,t){if(e&1&&(R(0,`li`),A(1,CA,4,4,`div`,4)(2,TA,2,6,`button`,5),z()),e&2){let e=t.$implicit;r_(`left`,e.x,`%`)(`top`,e.y,`%`)(`width`,e.w,`%`)(`height`,e.h,`%`),D(),j(e.other?1:2)}}function DA(e,t){if(e&1){let e=B();R(0,`ul`,2),U(`keydown`,function(t){return S(e),C(W().onKey(t))}),M(1,EA,3,9,`li`,3,xA),z()}if(e&2){let e=W();k(`aria-label`,e.label()),D(),N(e.cells())}}function OA(e,t){e&1&&(R(0,`p`,1),K(1,`No component time in these cycles.`),z())}var kA=24,AA=3,jA=class e{stats=$([]);scope=$(`the recording`);pick=uv();current=T(0);label=X(()=>`Self time per component in ${this.scope()}, largest first. Pick one to show it in the tree.`);cells=X(()=>{let e=this.stats().filter(e=>e.ms>0),t=e.slice(0,kA),n=e.slice(kA),r=n.reduce((e,t)=>e+t.ms,0),i=t.map(e=>({stat:e,other:0}));n.length&&i.push({stat:{name:`Other components`,checks:0,ms:r,maxMs:0,cycles:0},other:n.length});let a=e.reduce((e,t)=>e+t.ms,0),o=t[0]?.ms??1,s=ik(i,e=>e.stat.ms,AA);return s.sort((e,t)=>Number(e.item.other>0)-Number(t.item.other>0)),s.map(e=>{let{stat:t,other:n}=e.item,r=a?Math.round(t.ms/a*100):0;return{stat:t,other:n,x:e.x,y:e.y,w:e.w,h:e.h,tone:n?0:14+Math.round(26*Math.min(t.ms/o,1)),roomy:e.w>=10&&e.h>=22,label:n?`${n} more components, ${ek(t.ms)}, ${r}% of self time`:`${t.name}, ${ek(t.ms)} self time, ${r}%, ${t.checks} ${t.checks===1?`check`:`checks`}`}})});tabStop=X(()=>Math.min(this.current(),Math.max(this.cells().filter(e=>!e.other).length-1,0)));fmt(e){return ek(e)}onKey(e){let t=this.cells().filter(e=>!e.other).length;if(!t)return;let n=this.tabStop(),r;switch(e.key){case`ArrowRight`:case`ArrowDown`:r=Math.min(n+1,t-1);break;case`ArrowLeft`:case`ArrowUp`:r=Math.max(n-1,0);break;case`Home`:r=0;break;case`End`:r=t-1;break;default:return}e.preventDefault(),this.current.set(r),e.currentTarget.querySelector(`button[data-index="${r}"]`)?.focus()}static ɵfac=function(t){return new(t||e)};static ɵcmp=O({type:e,selectors:[[`app-cd-treemap`]],inputs:{stats:[1,`stats`],scope:[1,`scope`]},outputs:{pick:`pick`},decls:2,vars:1,consts:[[1,`map`],[1,`empty`],[1,`map`,3,`keydown`],[3,`left`,`top`,`width`,`height`],[1,`cell`,`other`,3,`--%NS%tone`],[`type`,`button`,1,`cell`,3,`--%NS%tone`],[1,`cell`,`other`],[1,`sr-only`],[`aria-hidden`,`true`,1,`name`],[`type`,`button`,1,`cell`,3,`focus`,`click`],[1,`name`,`mono`],[1,`ms`]],template:function(e,t){e&1&&A(0,DA,3,1,`ul`,0)(1,OA,2,0,`p`,1),e&2&&j(+!t.cells().length)},styles:[`[_nghost-%COMP%] { +}`]})},mA=(e,t)=>t.stat.name;function hA(e,t){if(e&1&&(R(0,`span`,8),K(1),z()),e&2){let e=W(2).$implicit;D(),J(``,e.other,` more`)}}function gA(e,t){if(e&1&&(R(0,`div`,6)(1,`span`,7),K(2),z(),A(3,hA,2,1,`span`,8),z()),e&2){let e=W().$implicit;t_(`--%NS%tone`,e.tone+`%`),D(2),q(e.label),D(),j(e.roomy?3:-1)}}function _A(e,t){if(e&1&&(R(0,`span`,10),K(1),z(),R(2,`span`,11),K(3),z()),e&2){let e=W(2).$implicit,t=W(2);D(),q(e.stat.name),D(2),q(t.fmt(e.stat.ms))}}function vA(e,t){if(e&1){let e=B();R(0,`button`,9),U(`focus`,function(){S(e);let t=W().$index;return C(W(2).current.set(t))})(`click`,function(){S(e);let t=W().$implicit;return C(W(2).pick.emit(t.stat.name))}),A(1,_A,4,2),z()}if(e&2){let e=W(),t=e.$implicit,n=e.$index,r=W(2);t_(`--%NS%tone`,t.tone+`%`),k(`tabindex`,n===r.tabStop()?0:-1)(`aria-label`,t.label)(`data-index`,n),D(),j(t.roomy?1:-1)}}function yA(e,t){if(e&1&&(R(0,`li`),A(1,gA,4,4,`div`,4)(2,vA,2,6,`button`,5),z()),e&2){let e=t.$implicit;t_(`left`,e.x,`%`)(`top`,e.y,`%`)(`width`,e.w,`%`)(`height`,e.h,`%`),D(),j(e.other?1:2)}}function bA(e,t){if(e&1){let e=B();R(0,`ul`,2),U(`keydown`,function(t){return S(e),C(W().onKey(t))}),M(1,yA,3,9,`li`,3,mA),z()}if(e&2){let e=W();k(`aria-label`,e.label()),D(),N(e.cells())}}function xA(e,t){e&1&&(R(0,`p`,1),K(1,`No component time in these cycles.`),z())}var SA=24,CA=3,wA=class e{stats=$([]);scope=$(`the recording`);pick=cv();current=T(0);label=X(()=>`Self time per component in ${this.scope()}, largest first. Pick one to show it in the tree.`);cells=X(()=>{let e=this.stats().filter(e=>e.ms>0),t=e.slice(0,SA),n=e.slice(SA),r=n.reduce((e,t)=>e+t.ms,0),i=t.map(e=>({stat:e,other:0}));n.length&&i.push({stat:{name:`Other components`,checks:0,ms:r,maxMs:0,cycles:0},other:n.length});let a=e.reduce((e,t)=>e+t.ms,0),o=t[0]?.ms??1,s=ZO(i,e=>e.stat.ms,CA);return s.sort((e,t)=>Number(e.item.other>0)-Number(t.item.other>0)),s.map(e=>{let{stat:t,other:n}=e.item,r=a?Math.round(t.ms/a*100):0;return{stat:t,other:n,x:e.x,y:e.y,w:e.w,h:e.h,tone:n?0:14+Math.round(26*Math.min(t.ms/o,1)),roomy:e.w>=10&&e.h>=22,label:n?`${n} more components, ${qO(t.ms)}, ${r}% of self time`:`${t.name}, ${qO(t.ms)} self time, ${r}%, ${t.checks} ${t.checks===1?`check`:`checks`}`}})});tabStop=X(()=>Math.min(this.current(),Math.max(this.cells().filter(e=>!e.other).length-1,0)));fmt(e){return qO(e)}onKey(e){let t=this.cells().filter(e=>!e.other).length;if(!t)return;let n=this.tabStop(),r;switch(e.key){case`ArrowRight`:case`ArrowDown`:r=Math.min(n+1,t-1);break;case`ArrowLeft`:case`ArrowUp`:r=Math.max(n-1,0);break;case`Home`:r=0;break;case`End`:r=t-1;break;default:return}e.preventDefault(),this.current.set(r),e.currentTarget.querySelector(`button[data-index="${r}"]`)?.focus()}static ɵfac=function(t){return new(t||e)};static ɵcmp=O({type:e,selectors:[[`app-cd-treemap`]],inputs:{stats:[1,`stats`],scope:[1,`scope`]},outputs:{pick:`pick`},decls:2,vars:1,consts:[[1,`map`],[1,`empty`],[1,`map`,3,`keydown`],[3,`left`,`top`,`width`,`height`],[1,`cell`,`other`,3,`--%NS%tone`],[`type`,`button`,1,`cell`,3,`--%NS%tone`],[1,`cell`,`other`],[1,`sr-only`],[`aria-hidden`,`true`,1,`name`],[`type`,`button`,1,`cell`,3,`focus`,`click`],[1,`name`,`mono`],[1,`ms`]],template:function(e,t){e&1&&A(0,bA,3,1,`ul`,0)(1,xA,2,0,`p`,1),e&2&&j(+!t.cells().length)},styles:[`[_nghost-%COMP%] { display: block; min-width: 0; } @@ -1720,7 +1720,7 @@ button.cell[_ngcontent-%COMP%]:focus-visible { .empty[_ngcontent-%COMP%] { margin: 8px 0; color: var(--%NS%text-2); -}`]})},MA=(e,t)=>t.id;function NA(e,t){if(e&1){let e=B();F(0,`button`,14),H(`click`,function(){return S(e),C(W(2).clear())}),K(1,`Clear`),I()}}function PA(e,t){if(e&1){let e=B();F(0,`button`,11),H(`click`,function(){return S(e),C(W().toggle())}),L(1,`span`,12),K(2),I(),A(3,NA,2,0,`button`,13)}if(e&2){let e=W();G(`on`,e.recording()),P(`disabled`,!e.pageId()),D(2),J(` `,e.recording()?`Stop recording`:`Record`,` `),D(),j(e.cycles().length?3:-1)}}function FA(e,t){if(e&1){let e=B();F(0,`p`,6)(1,`span`,15),K(2,`Imported recording`),I(),F(3,`span`,16),K(4),I(),F(5,`button`,14),H(`click`,function(){return S(e),C(W().closeImport())}),K(6,`Back to live recording`),I()()}e&2&&(D(4),q(t.fileName))}function IA(e,t){e&1&&K(0,` An app on a device has no DOM, so checks that changed nothing are not counted there. `)}function LA(e,t){e&1&&K(0,` A recording keeps running when the tab reloads, so it catches the next start of the app. The cycles from before the reload are gone with the old page. `)}function RA(e,t){e&1&&(F(0,`p`,9),K(1,` The page has Angular's profiler hook, but the recording could not attach to it yet. The page tries again on its next update while recording is on. If this stays, stop and start the recording, or reload the page. `),I())}function zA(e,t){e&1&&L(0,`app-angular-unavailable`,17),e&2&&P(`page`,W(2).angularPage())}function BA(e,t){e&1&&A(0,RA,2,0,`p`,9)(1,zA,1,1,`app-angular-unavailable`,17),e&2&&j(+!W().attachPending())}function VA(e,t){e&1&&(F(0,`p`,9),K(1,`Angular profiling stays on until the page reloads.`),I())}function HA(e,t){e&1&&L(0,`app-angular-unavailable`,21),e&2&&P(`page`,W(2).angularPage())}function UA(e,t){if(e&1){let e=B();F(0,`div`,18)(1,`span`,19),K(2,`Live views`),I(),F(3,`button`,20),H(`click`,function(){S(e);let t=W();return C(t.setView(`flash`,!t.views().flash))}),L(4,`span`,12),K(5,` Flash checks `),I(),F(6,`button`,20),H(`click`,function(){S(e);let t=W();return C(t.setView(`track`,!t.views().track))}),L(7,`span`,12),K(8,` Performance track `),I(),F(9,`button`,20),H(`click`,function(){return S(e),C(W().setView(`angularProfiling`,!0))}),L(10,`span`,12),K(11,` Angular profiling `),I()(),F(12,`p`,7),K(13,` Flash checks draws a box over each component on the page as Angular checks it, with its name and how often it was checked, fading over a second. Performance track adds a Pangular track to the Chrome Performance panel with every component check, hook and output. Angular profiling turns on Angular's own track there. `),I(),A(14,VA,2,0,`p`,9)(15,HA,1,1,`app-angular-unavailable`,21)}if(e&2){let e=W();D(3),P(`disabled`,!e.canShowViews()),k(`aria-pressed`,e.views().flash),D(3),P(`disabled`,!e.canShowViews()),k(`aria-pressed`,e.views().track),D(3),P(`disabled`,!e.canShowViews()||e.views().angularProfiling||!e.views().angularProfilingAvailable),k(`aria-pressed`,e.views().angularProfiling),D(5),j(e.views().angularProfiling?14:e.views().angularProfilingAvailable?-1:15)}}function WA(e,t){if(e&1&&(F(0,`p`,9),K(1),I()),e&2){let e=t.$implicit;D(),q(e)}}function GA(e,t){if(e&1&&(F(0,`p`,24),K(1),I()),e&2){let e=W(2);D(),J(` `,e.range()?`The picked cycles have no timed spans, so there is no flame graph for them.`:`This recording has no timed spans, so there is no flame graph. A recording from an older version, or a file saved without spans, has none.`,` `)}}function KA(e,t){e&1&&(F(0,`p`,9),K(1,` For picked cycles, totals come from the 10 slowest components each cycle lists. `),I())}function qA(e,t){if(e&1){let e=B();F(0,`h3`),K(1,`Cycles`),I(),F(2,`app-cd-cycle-chart`,22),P_(`rangeChange`,function(t){S(e);let n=W();return N_(n.range,t)||(n.range=t),C(t)}),I(),F(3,`app-cd-flame-graph`,23),H(`pick`,function(t){return S(e),C(W().showComponent.emit(t))}),I(),A(4,GA,2,1,`p`,24),F(5,`h3`),K(6,`Self time by component`),I(),A(7,KA,2,0,`p`,9),F(8,`app-cd-treemap`,25),H(`pick`,function(t){return S(e),C(W().showComponent.emit(t))}),I()}if(e&2){let e=W();D(2),P(`cycles`,e.cycles())(`slowMs`,e.slowMs()),M_(`range`,e.range),D(),P(`cycles`,e.picked())(`names`,e.spanNames())(`scope`,e.scope()),D(),j(e.hasSpans()?-1:4),D(3),j(e.range()?7:-1),D(),P(`stats`,e.stats())(`scope`,e.scope())}}function JA(e,t){if(e&1){let e=B();F(0,`tr`)(1,`td`,16)(2,`button`,31),H(`click`,function(){let t=S(e).$implicit;return C(W(2).showComponent.emit(t.name))}),K(3),I()(),F(4,`td`,32),K(5),I(),F(6,`td`,32),K(7),I(),F(8,`td`,32),K(9),I()()}if(e&2){let e=t.$implicit,n=W(2);D(3),J(` `,e.name,` `),D(2),q(e.checks),D(2),q(n.ms(e.ms)),D(2),q(n.ms(e.maxMs))}}function YA(e,t){e&1&&(F(0,`tr`)(1,`td`,33),K(2,`No component time in the picked cycles.`),I()())}function XA(e,t){if(e&1){let e=B();F(0,`tr`)(1,`td`,16)(2,`button`,31),H(`click`,function(){let t=S(e).$implicit;return C(W(2).showComponent.emit(t.name))}),K(3),I()(),F(4,`td`,32),K(5),I(),F(6,`td`,32),K(7),I(),F(8,`td`,32),K(9),I()()}if(e&2){let e=t.$implicit,n=W(2);D(3),J(` `,e.name,` `),D(2),q(e.checks),D(2),q(e.cycles),D(2),q(n.ms(e.ms))}}function ZA(e,t){e&1&&(F(0,`tr`)(1,`td`,33),K(2,`No component checks in the picked cycles.`),I()())}function QA(e,t){if(e&1&&(F(0,`span`,35),K(1,`from `),F(2,`span`,16),K(3),I()()),e&2){let e=W(3);D(3),q(e.causeText(t))}}function $A(e,t){if(e&1&&(F(0,`span`,35),K(1,`after `),F(2,`span`,16),K(3),I()()),e&2){let e=W().$implicit;D(3),q(e.trigger)}}function ej(e,t){if(e&1&&(F(0,`span`,36),K(1),I()),e&2){let e=W().$implicit;D(),J(``,e.unchanged,` changed nothing`)}}function tj(e,t){if(e&1&&(F(0,`span`,36),K(1),I()),e&2){let e=W().$implicit,t=W(2);D(),J(`hooks `,t.ms(e.hookMs))}}function nj(e,t){if(e&1&&(F(0,`span`,36),K(1),I()),e&2){let e=W().$implicit,t=W(2);D(),J(`afterRender `,t.ms(e.afterRenderMs))}}function rj(e,t){if(e&1&&(F(0,`span`,37),K(1,` slowest `),F(2,`span`,16),K(3),I(),K(4),I()),e&2){let e=t,n=W(3);D(3),q(e.name),D(),J(` `,n.ms(e.ms),` `)}}function ij(e,t){if(e&1&&(F(0,`li`)(1,`span`,34),K(2),I(),F(3,`span`,16),K(4),I(),F(5,`span`),K(6),I(),A(7,QA,4,1,`span`,35)(8,$A,4,1,`span`,35),A(9,ej,2,1,`span`,36),A(10,tj,2,1,`span`,36),A(11,nj,2,1,`span`,36),A(12,rj,5,2,`span`,37),I()),e&2){let e,n,r=t.$implicit,i=W(2);D(2),q(i.clock(r.at)),D(2),q(i.ms(r.ms)),D(2),A_(` `,r.checks,` `,r.checks===1?`check`:`checks`,`, `,r.passes,` `,r.passes===1?`pass`:`passes`,` `),D(),j((e=r.cause)?7:r.trigger?8:-1,e),D(2),j(r.unchanged?9:-1),D(),j(r.hookMs?10:-1),D(),j(r.afterRenderMs?11:-1),D(),j((n=r.components[0])?12:-1,n)}}function aj(e,t){if(e&1&&(F(0,`div`,26)(1,`div`)(2,`h3`),K(3),I(),F(4,`table`)(5,`thead`)(6,`tr`)(7,`th`,27),K(8,`Component`),I(),F(9,`th`,28),K(10,`Checks`),I(),F(11,`th`,28),K(12,`Self time`),I(),F(13,`th`,28),K(14,`Slowest`),I()()(),F(15,`tbody`),M(16,JA,10,4,`tr`,null,tg,!1,YA,3,0,`tr`),I()(),F(19,`h3`),K(20),I(),F(21,`table`)(22,`thead`)(23,`tr`)(24,`th`,27),K(25,`Component`),I(),F(26,`th`,28),K(27,`Checks`),I(),F(28,`th`,28),K(29,`Cycles`),I(),F(30,`th`,28),K(31,`Self time`),I()()(),F(32,`tbody`),M(33,XA,10,4,`tr`,null,tg,!1,ZA,3,0,`tr`),I()(),F(36,`p`,7),K(37,` Select a component name to show its most checked instance in the tree. `),I()(),F(38,`div`)(39,`h3`),K(40,`Latest cycles`),I(),F(41,`ol`,29),M(42,ij,13,11,`li`,null,MA),I()()(),L(44,`app-cd-timing`,30)(45,`app-cd-diagnosis`,30)),e&2){let e=W();D(3),J(` `,e.range()?`Slowest components in the picked cycles`:`Slowest components`,` `),D(13),N(e.slowest()),D(4),J(` `,e.range()?`Most often checked in the picked cycles`:`Most often checked`,` `),D(13),N(e.busiest()),D(9),N(e.latest()),D(2),P(`page`,e.page()),D(),P(`page`,e.page())}}function oj(e,t){e&1&&(F(0,`p`,10),K(1,`Use the app. Cycles show up here as Angular runs change detection.`),I())}var sj=3e3,cj=10,lj=class e{livePage=$(null,{alias:`page`});pageId=$(null);rpc=$(null);native=$(!1);angularPages=pD(()=>this.rpc());angularPage=X(()=>mD(this.angularPages(),this.pageId()));attachPending=X(()=>this.angularPage()?.capabilities.profiler===!0);showComponent=uv();range=T(null);imported=T(null);page=X(()=>this.imported()?.page??this.livePage());views=Q(()=>this.livePage()?.options??{flash:!1,track:!1,angularProfiling:!1,angularProfilingAvailable:!0});canShowViews=X(()=>!!this.pageId()&&this.livePage()?.supported!==!1);message=T(``);announcement=T(``);recording=X(()=>this.page()?.recording===!0);cycles=X(()=>this.page()?.cycles??[]);slowMs=X(()=>this.page()?.slowMs??16);maxCycles=X(()=>MT(this.rpc()).limits.cdCycles);picked=X(()=>tk(this.cycles(),this.range()));hasSpans=X(()=>this.picked().some(e=>e.spans?.length));spanNames=X(()=>this.page()?.spanNames??[]);stats=X(()=>this.range()?nk(this.picked()):[...this.page()?.components??[]].sort((e,t)=>t.ms-e.ms));scope=X(()=>{let e=this.range()?this.picked():[];return e.length?e.length===1?`cycle ${e[0].id}`:`cycles ${e[0].id} to ${e.at(-1).id}`:`the recording`});slowest=X(()=>this.stats().slice(0,cj));busiest=X(()=>[...this.stats()].sort((e,t)=>t.checks-e.checks).slice(0,cj));latest=X(()=>this.cycles().slice(-30).reverse());capNotes=X(()=>{let e=this.page()?.droppedClasses??0,t=this.page()?.droppedHosts??0,n=[];return e>0&&n.push(`${e} more component ${e===1?`class was`:`classes were`} checked than a recording keeps, so ${e===1?`it is`:`they are`} left out of these totals.`),t>0&&n.push(`${t} component ${t===1?`instance was`:`instances were`} checked past the 2000 a recording counts, so ${t===1?`its tree row shows`:`their tree rows show`} no check count.`),n});status=X(()=>{if(this.message())return this.message();let e=this.cycles().length;return this.imported()?`${e} ${e===1?`cycle`:`cycles`} imported.`:this.recording()?`Recording. ${e} ${e===1?`cycle`:`cycles`} so far.`:e?`${e} ${e===1?`cycle`:`cycles`} recorded.`:``});ms(e){return`${e<10?e.toFixed(2):Math.round(e)} ms`}clock(e){return JE(e)}causeText(e){return LO(e)}confirming=T(null);confirmTimer;constructor(){E(()=>{let e=this.confirming();e!==null&&this.livePage()?.recording===!0===e&&Z(()=>this.confirmed(e))}),x(Cs).onDestroy(()=>clearTimeout(this.confirmTimer))}confirmed(e){clearTimeout(this.confirmTimer),this.confirming.set(null),this.message.set(``);let t=this.livePage()?.cycles.length??0;this.announce(e?`Recording started.`:`Recording stopped. ${t} ${t===1?`cycle`:`cycles`} recorded.`)}unconfirmed(e){let t=`The page did not confirm that the recording ${e?`started`:`stopped`}. The tab may be in the background, closed or reloading.`;this.message.set(t),this.announce(t)}async toggle(){let e=!this.recording();clearTimeout(this.confirmTimer),this.confirming.set(null),await this.send({on:e},e?`Starting…`:`Stopping…`,()=>``,`request-change-detection-record`,{quiet:!0,keepPending:!0})&&(this.confirming.set(e),this.confirmTimer=setTimeout(()=>{this.confirming()===e&&this.unconfirmed(e)},sj))}showImport(e){this.message.set(``),this.range.set(null),this.imported.set(e);let t=e.page.cycles.length;this.announce(`Imported ${e.fileName}: ${t} ${t===1?`cycle`:`cycles`}. Showing the imported recording.`)}closeImport(){this.imported.set(null),this.range.set(null),this.announce(`Showing the live recording.`)}async clear(){this.range.set(null),await this.send({clear:!0},``,()=>`Cleared the recorded cycles.`)}async setView(e,t){let n=this.views();this.views.set({...n,[e]:t});let r={flash:t?`Flash checks on.`:`Flash checks off.`,track:t?`Performance track on. Record in the Chrome Performance panel to see it.`:`Performance track off.`,angularProfiling:`Angular profiling on. It stays on until the page reloads.`}[e];await this.send({[e]:t},``,()=>r,`request-change-detection-options`)||this.views.set(n)}async send(e,t,n,r=`request-change-detection-record`,{quiet:i=!1,keepPending:a=!1}={}){this.message.set(t);try{if(!this.rpc())throw Error(`no client`);return await pT(this.rpc(),r,{pageId:this.pageId(),...e}),a||this.message.set(``),i||this.announce(n()),!0}catch{let e=`Could not reach the page.`;return this.message.set(e),this.announce(e),!1}}announce(e){this.announcement.update(t=>t===e?`${e} `:e)}static ɵfac=function(t){return new(t||e)};static ɵcmp=O({type:e,selectors:[[`app-cd-recording`]],inputs:{livePage:[1,`page`,`livePage`],pageId:[1,`pageId`],rpc:[1,`rpc`],native:[1,`native`]},outputs:{showComponent:`showComponent`},decls:23,vars:13,consts:[[`aria-labelledby`,`cd-heading`,1,`cd`],[1,`cd-head`],[`id`,`cd-heading`],[3,`imported`,`page`,`maxCycles`],[1,`status`],[`role`,`status`,1,`sr-only`],[1,`imported`],[1,`hint`],[`what`,`cycles`,`limit`,`cdCycles`,3,`dropped`,`max`],[1,`note`],[1,`empty`],[`type`,`button`,3,`click`,`disabled`],[`aria-hidden`,`true`,1,`dot`],[`type`,`button`],[`type`,`button`,3,`click`],[1,`badge`],[1,`mono`],[`capability`,`profiler`,`missing`,``,`compact`,``,3,`page`],[`role`,`group`,`aria-labelledby`,`cd-views-label`,1,`views`],[`id`,`cd-views-label`,1,`views-label`],[`type`,`button`,1,`view`,3,`click`,`disabled`],[`capability`,`angularProfiling`,`missing`,``,`compact`,``,3,`page`],[3,`rangeChange`,`cycles`,`slowMs`,`range`],[3,`pick`,`cycles`,`names`,`scope`],[1,`spans-note`],[3,`pick`,`stats`,`scope`],[1,`cd-grid`],[`scope`,`col`],[`scope`,`col`,1,`num`],[`aria-label`,`Latest change detection cycles, newest first`,1,`cycles`],[3,`page`],[`type`,`button`,1,`name-link`,3,`click`],[1,`num`],[`colspan`,`4`],[1,`when`],[1,`trigger`],[1,`timing`],[1,`top`]],template:function(e,t){if(e&1&&(F(0,`section`,0)(1,`div`,1)(2,`h2`,2),K(3,`Change detection`),I(),A(4,PA,4,5),F(5,`app-cd-transfer`,3),H(`imported`,function(e){return t.showImport(e)}),I(),F(6,`p`,4),K(7),I(),F(8,`p`,5),K(9),I()(),A(10,FA,7,1,`p`,6),F(11,`p`,7),K(12,` Records each change detection cycle with Angular's profiler: how long it took, how many components it checked, what started it and which checks changed nothing. Tree rows show how often each instance was checked. Times come from a development build. While it records, the page also wraps Angular's scheduler, adds a signal write hook and watches DOM updates; all of it stops with the recording. `),A(13,IA,1,0)(14,LA,1,0),I(),A(15,BA,2,1),A(16,UA,16,7),L(17,`app-limit-note`,8),M(18,WA,2,1,`p`,9,ng),A(20,qA,9,10),A(21,aj,46,6)(22,oj,2,0,`p`,10),I()),e&2){let e;D(4),j(t.imported()?-1:4),D(),P(`page`,t.page())(`maxCycles`,t.maxCycles()),D(2),q(t.status()),D(2),q(t.announcement()),D(),j((e=t.imported())?10:-1,e),D(3),j(t.native()?13:14),D(2),j(t.page()?.supported===!1?15:-1),D(),j(!t.imported()&&!t.native()?16:-1),D(),P(`dropped`,t.page()?.dropped??0)(`max`,t.maxCycles()),D(),N(t.capNotes()),D(2),j(t.cycles().length?20:-1),D(),j(t.page()?.components?.length?21:t.recording()?22:-1)}},dependencies:[vD,rO,_A,kk,bA,Gk,oA,jA],styles:[`[_nghost-%COMP%] { +}`]})},TA=(e,t)=>t.id;function EA(e,t){if(e&1){let e=B();F(0,`button`,14),H(`click`,function(){return S(e),C(W(2).clear())}),K(1,`Clear`),I()}}function DA(e,t){if(e&1){let e=B();F(0,`button`,11),H(`click`,function(){return S(e),C(W().toggle())}),L(1,`span`,12),K(2),I(),A(3,EA,2,0,`button`,13)}if(e&2){let e=W();G(`on`,e.recording()),P(`disabled`,!e.pageId()),D(2),J(` `,e.recording()?`Stop recording`:`Record`,` `),D(),j(e.cycles().length?3:-1)}}function OA(e,t){if(e&1){let e=B();F(0,`p`,6)(1,`span`,15),K(2,`Imported recording`),I(),F(3,`span`,16),K(4),I(),F(5,`button`,14),H(`click`,function(){return S(e),C(W().closeImport())}),K(6,`Back to live recording`),I()()}e&2&&(D(4),q(t.fileName))}function kA(e,t){e&1&&K(0,` An app on a device has no DOM, so checks that changed nothing are not counted there. `)}function AA(e,t){e&1&&K(0,` A recording keeps running when the tab reloads, so it catches the next start of the app. The cycles from before the reload are gone with the old page. `)}function jA(e,t){e&1&&(F(0,`p`,9),K(1,` The page has Angular's profiler hook, but the recording could not attach to it yet. The page tries again on its next update while recording is on. If this stays, stop and start the recording, or reload the page. `),I())}function MA(e,t){e&1&&L(0,`app-angular-unavailable`,17),e&2&&P(`page`,W(2).angularPage())}function NA(e,t){e&1&&A(0,jA,2,0,`p`,9)(1,MA,1,1,`app-angular-unavailable`,17),e&2&&j(+!W().attachPending())}function PA(e,t){e&1&&(F(0,`p`,9),K(1,`Angular profiling stays on until the page reloads.`),I())}function FA(e,t){e&1&&L(0,`app-angular-unavailable`,21),e&2&&P(`page`,W(2).angularPage())}function IA(e,t){if(e&1){let e=B();F(0,`div`,18)(1,`span`,19),K(2,`Live views`),I(),F(3,`button`,20),H(`click`,function(){S(e);let t=W();return C(t.setView(`flash`,!t.views().flash))}),L(4,`span`,12),K(5,` Flash checks `),I(),F(6,`button`,20),H(`click`,function(){S(e);let t=W();return C(t.setView(`track`,!t.views().track))}),L(7,`span`,12),K(8,` Performance track `),I(),F(9,`button`,20),H(`click`,function(){return S(e),C(W().setView(`angularProfiling`,!0))}),L(10,`span`,12),K(11,` Angular profiling `),I()(),F(12,`p`,7),K(13,` Flash checks draws a box over each component on the page as Angular checks it, with its name and how often it was checked, fading over a second. Performance track adds a Pangular track to the Chrome Performance panel with every component check, hook and output. Angular profiling turns on Angular's own track there. `),I(),A(14,PA,2,0,`p`,9)(15,FA,1,1,`app-angular-unavailable`,21)}if(e&2){let e=W();D(3),P(`disabled`,!e.canShowViews()),k(`aria-pressed`,e.views().flash),D(3),P(`disabled`,!e.canShowViews()),k(`aria-pressed`,e.views().track),D(3),P(`disabled`,!e.canShowViews()||e.views().angularProfiling||!e.views().angularProfilingAvailable),k(`aria-pressed`,e.views().angularProfiling),D(5),j(e.views().angularProfiling?14:e.views().angularProfilingAvailable?-1:15)}}function LA(e,t){if(e&1&&(F(0,`p`,9),K(1),I()),e&2){let e=t.$implicit;D(),q(e)}}function RA(e,t){if(e&1&&(F(0,`p`,24),K(1),I()),e&2){let e=W(2);D(),J(` `,e.range()?`The picked cycles have no timed spans, so there is no flame graph for them.`:`This recording has no timed spans, so there is no flame graph. A recording from an older version, or a file saved without spans, has none.`,` `)}}function zA(e,t){e&1&&(F(0,`p`,9),K(1,` For picked cycles, totals come from the 10 slowest components each cycle lists. `),I())}function BA(e,t){if(e&1){let e=B();F(0,`h3`),K(1,`Cycles`),I(),F(2,`app-cd-cycle-chart`,22),M_(`rangeChange`,function(t){S(e);let n=W();return j_(n.range,t)||(n.range=t),C(t)}),I(),F(3,`app-cd-flame-graph`,23),H(`pick`,function(t){return S(e),C(W().showComponent.emit(t))}),I(),A(4,RA,2,1,`p`,24),F(5,`h3`),K(6,`Self time by component`),I(),A(7,zA,2,0,`p`,9),F(8,`app-cd-treemap`,25),H(`pick`,function(t){return S(e),C(W().showComponent.emit(t))}),I()}if(e&2){let e=W();D(2),P(`cycles`,e.cycles())(`slowMs`,e.slowMs()),A_(`range`,e.range),D(),P(`cycles`,e.picked())(`names`,e.spanNames())(`scope`,e.scope()),D(),j(e.hasSpans()?-1:4),D(3),j(e.range()?7:-1),D(),P(`stats`,e.stats())(`scope`,e.scope())}}function VA(e,t){if(e&1){let e=B();F(0,`tr`)(1,`td`,16)(2,`button`,31),H(`click`,function(){let t=S(e).$implicit;return C(W(2).showComponent.emit(t.name))}),K(3),I()(),F(4,`td`,32),K(5),I(),F(6,`td`,32),K(7),I(),F(8,`td`,32),K(9),I()()}if(e&2){let e=t.$implicit,n=W(2);D(3),J(` `,e.name,` `),D(2),q(e.checks),D(2),q(n.ms(e.ms)),D(2),q(n.ms(e.maxMs))}}function HA(e,t){e&1&&(F(0,`tr`)(1,`td`,33),K(2,`No component time in the picked cycles.`),I()())}function UA(e,t){if(e&1){let e=B();F(0,`tr`)(1,`td`,16)(2,`button`,31),H(`click`,function(){let t=S(e).$implicit;return C(W(2).showComponent.emit(t.name))}),K(3),I()(),F(4,`td`,32),K(5),I(),F(6,`td`,32),K(7),I(),F(8,`td`,32),K(9),I()()}if(e&2){let e=t.$implicit,n=W(2);D(3),J(` `,e.name,` `),D(2),q(e.checks),D(2),q(e.cycles),D(2),q(n.ms(e.ms))}}function WA(e,t){e&1&&(F(0,`tr`)(1,`td`,33),K(2,`No component checks in the picked cycles.`),I()())}function GA(e,t){if(e&1&&(F(0,`span`,35),K(1,`from `),F(2,`span`,16),K(3),I()()),e&2){let e=W(3);D(3),q(e.causeText(t))}}function KA(e,t){if(e&1&&(F(0,`span`,35),K(1,`after `),F(2,`span`,16),K(3),I()()),e&2){let e=W().$implicit;D(3),q(e.trigger)}}function qA(e,t){if(e&1&&(F(0,`span`,36),K(1),I()),e&2){let e=W().$implicit;D(),J(``,e.unchanged,` changed nothing`)}}function JA(e,t){if(e&1&&(F(0,`span`,36),K(1),I()),e&2){let e=W().$implicit,t=W(2);D(),J(`hooks `,t.ms(e.hookMs))}}function YA(e,t){if(e&1&&(F(0,`span`,36),K(1),I()),e&2){let e=W().$implicit,t=W(2);D(),J(`afterRender `,t.ms(e.afterRenderMs))}}function XA(e,t){if(e&1&&(F(0,`span`,37),K(1,` slowest `),F(2,`span`,16),K(3),I(),K(4),I()),e&2){let e=t,n=W(3);D(3),q(e.name),D(),J(` `,n.ms(e.ms),` `)}}function ZA(e,t){if(e&1&&(F(0,`li`)(1,`span`,34),K(2),I(),F(3,`span`,16),K(4),I(),F(5,`span`),K(6),I(),A(7,GA,4,1,`span`,35)(8,KA,4,1,`span`,35),A(9,qA,2,1,`span`,36),A(10,JA,2,1,`span`,36),A(11,YA,2,1,`span`,36),A(12,XA,5,2,`span`,37),I()),e&2){let e,n,r=t.$implicit,i=W(2);D(2),q(i.clock(r.at)),D(2),q(i.ms(r.ms)),D(2),O_(` `,r.checks,` `,r.checks===1?`check`:`checks`,`, `,r.passes,` `,r.passes===1?`pass`:`passes`,` `),D(),j((e=r.cause)?7:r.trigger?8:-1,e),D(2),j(r.unchanged?9:-1),D(),j(r.hookMs?10:-1),D(),j(r.afterRenderMs?11:-1),D(),j((n=r.components[0])?12:-1,n)}}function QA(e,t){if(e&1&&(F(0,`div`,26)(1,`div`)(2,`h3`),K(3),I(),F(4,`table`)(5,`thead`)(6,`tr`)(7,`th`,27),K(8,`Component`),I(),F(9,`th`,28),K(10,`Checks`),I(),F(11,`th`,28),K(12,`Self time`),I(),F(13,`th`,28),K(14,`Slowest`),I()()(),F(15,`tbody`),M(16,VA,10,4,`tr`,null,$h,!1,HA,3,0,`tr`),I()(),F(19,`h3`),K(20),I(),F(21,`table`)(22,`thead`)(23,`tr`)(24,`th`,27),K(25,`Component`),I(),F(26,`th`,28),K(27,`Checks`),I(),F(28,`th`,28),K(29,`Cycles`),I(),F(30,`th`,28),K(31,`Self time`),I()()(),F(32,`tbody`),M(33,UA,10,4,`tr`,null,$h,!1,WA,3,0,`tr`),I()(),F(36,`p`,7),K(37,` Select a component name to show its most checked instance in the tree. `),I()(),F(38,`div`)(39,`h3`),K(40,`Latest cycles`),I(),F(41,`ol`,29),M(42,ZA,13,11,`li`,null,TA),I()()(),L(44,`app-cd-timing`,30)(45,`app-cd-diagnosis`,30)),e&2){let e=W();D(3),J(` `,e.range()?`Slowest components in the picked cycles`:`Slowest components`,` `),D(13),N(e.slowest()),D(4),J(` `,e.range()?`Most often checked in the picked cycles`:`Most often checked`,` `),D(13),N(e.busiest()),D(9),N(e.latest()),D(2),P(`page`,e.page()),D(),P(`page`,e.page())}}function $A(e,t){e&1&&(F(0,`p`,10),K(1,`Use the app. Cycles show up here as Angular runs change detection.`),I())}var ej=3e3,tj=10,nj=class e{livePage=$(null,{alias:`page`});pageId=$(null);rpc=$(null);native=$(!1);angularPages=oD(()=>this.rpc());angularPage=X(()=>sD(this.angularPages(),this.pageId()));attachPending=X(()=>this.angularPage()?.capabilities.profiler===!0);showComponent=cv();range=T(null);imported=T(null);page=X(()=>this.imported()?.page??this.livePage());views=Q(()=>this.livePage()?.options??{flash:!1,track:!1,angularProfiling:!1,angularProfilingAvailable:!0});canShowViews=X(()=>!!this.pageId()&&this.livePage()?.supported!==!1);message=T(``);announcement=T(``);recording=X(()=>this.page()?.recording===!0);cycles=X(()=>this.page()?.cycles??[]);slowMs=X(()=>this.page()?.slowMs??16);maxCycles=X(()=>TT(this.rpc()).limits.cdCycles);picked=X(()=>JO(this.cycles(),this.range()));hasSpans=X(()=>this.picked().some(e=>e.spans?.length));spanNames=X(()=>this.page()?.spanNames??[]);stats=X(()=>this.range()?YO(this.picked()):[...this.page()?.components??[]].sort((e,t)=>t.ms-e.ms));scope=X(()=>{let e=this.range()?this.picked():[];return e.length?e.length===1?`cycle ${e[0].id}`:`cycles ${e[0].id} to ${e.at(-1).id}`:`the recording`});slowest=X(()=>this.stats().slice(0,tj));busiest=X(()=>[...this.stats()].sort((e,t)=>t.checks-e.checks).slice(0,tj));latest=X(()=>this.cycles().slice(-30).reverse());capNotes=X(()=>{let e=this.page()?.droppedClasses??0,t=this.page()?.droppedHosts??0,n=[];return e>0&&n.push(`${e} more component ${e===1?`class was`:`classes were`} checked than a recording keeps, so ${e===1?`it is`:`they are`} left out of these totals.`),t>0&&n.push(`${t} component ${t===1?`instance was`:`instances were`} checked past the 2000 a recording counts, so ${t===1?`its tree row shows`:`their tree rows show`} no check count.`),n});status=X(()=>{if(this.message())return this.message();let e=this.cycles().length;return this.imported()?`${e} ${e===1?`cycle`:`cycles`} imported.`:this.recording()?`Recording. ${e} ${e===1?`cycle`:`cycles`} so far.`:e?`${e} ${e===1?`cycle`:`cycles`} recorded.`:``});ms(e){return`${e<10?e.toFixed(2):Math.round(e)} ms`}clock(e){return VE(e)}causeText(e){return AO(e)}confirming=T(null);confirmTimer;constructor(){E(()=>{let e=this.confirming();e!==null&&this.livePage()?.recording===!0===e&&Z(()=>this.confirmed(e))}),x(Ss).onDestroy(()=>clearTimeout(this.confirmTimer))}confirmed(e){clearTimeout(this.confirmTimer),this.confirming.set(null),this.message.set(``);let t=this.livePage()?.cycles.length??0;this.announce(e?`Recording started.`:`Recording stopped. ${t} ${t===1?`cycle`:`cycles`} recorded.`)}unconfirmed(e){let t=`The page did not confirm that the recording ${e?`started`:`stopped`}. The tab may be in the background, closed or reloading.`;this.message.set(t),this.announce(t)}async toggle(){let e=!this.recording();clearTimeout(this.confirmTimer),this.confirming.set(null),await this.send({on:e},e?`Starting…`:`Stopping…`,()=>``,`request-change-detection-record`,{quiet:!0,keepPending:!0})&&(this.confirming.set(e),this.confirmTimer=setTimeout(()=>{this.confirming()===e&&this.unconfirmed(e)},ej))}showImport(e){this.message.set(``),this.range.set(null),this.imported.set(e);let t=e.page.cycles.length;this.announce(`Imported ${e.fileName}: ${t} ${t===1?`cycle`:`cycles`}. Showing the imported recording.`)}closeImport(){this.imported.set(null),this.range.set(null),this.announce(`Showing the live recording.`)}async clear(){this.range.set(null),await this.send({clear:!0},``,()=>`Cleared the recorded cycles.`)}async setView(e,t){let n=this.views();this.views.set({...n,[e]:t});let r={flash:t?`Flash checks on.`:`Flash checks off.`,track:t?`Performance track on. Record in the Chrome Performance panel to see it.`:`Performance track off.`,angularProfiling:`Angular profiling on. It stays on until the page reloads.`}[e];await this.send({[e]:t},``,()=>r,`request-change-detection-options`)||this.views.set(n)}async send(e,t,n,r=`request-change-detection-record`,{quiet:i=!1,keepPending:a=!1}={}){this.message.set(t);try{if(!this.rpc())throw Error(`no client`);return await oT(this.rpc(),r,{pageId:this.pageId(),...e}),a||this.message.set(``),i||this.announce(n()),!0}catch{let e=`Could not reach the page.`;return this.message.set(e),this.announce(e),!1}}announce(e){this.announcement.update(t=>t===e?`${e} `:e)}static ɵfac=function(t){return new(t||e)};static ɵcmp=O({type:e,selectors:[[`app-cd-recording`]],inputs:{livePage:[1,`page`,`livePage`],pageId:[1,`pageId`],rpc:[1,`rpc`],native:[1,`native`]},outputs:{showComponent:`showComponent`},decls:23,vars:13,consts:[[`aria-labelledby`,`cd-heading`,1,`cd`],[1,`cd-head`],[`id`,`cd-heading`],[3,`imported`,`page`,`maxCycles`],[1,`status`],[`role`,`status`,1,`sr-only`],[1,`imported`],[1,`hint`],[`what`,`cycles`,`limit`,`cdCycles`,3,`dropped`,`max`],[1,`note`],[1,`empty`],[`type`,`button`,3,`click`,`disabled`],[`aria-hidden`,`true`,1,`dot`],[`type`,`button`],[`type`,`button`,3,`click`],[1,`badge`],[1,`mono`],[`capability`,`profiler`,`missing`,``,`compact`,``,3,`page`],[`role`,`group`,`aria-labelledby`,`cd-views-label`,1,`views`],[`id`,`cd-views-label`,1,`views-label`],[`type`,`button`,1,`view`,3,`click`,`disabled`],[`capability`,`angularProfiling`,`missing`,``,`compact`,``,3,`page`],[3,`rangeChange`,`cycles`,`slowMs`,`range`],[3,`pick`,`cycles`,`names`,`scope`],[1,`spans-note`],[3,`pick`,`stats`,`scope`],[1,`cd-grid`],[`scope`,`col`],[`scope`,`col`,1,`num`],[`aria-label`,`Latest change detection cycles, newest first`,1,`cycles`],[3,`page`],[`type`,`button`,1,`name-link`,3,`click`],[1,`num`],[`colspan`,`4`],[1,`when`],[1,`trigger`],[1,`timing`],[1,`top`]],template:function(e,t){if(e&1&&(F(0,`section`,0)(1,`div`,1)(2,`h2`,2),K(3,`Change detection`),I(),A(4,DA,4,5),F(5,`app-cd-transfer`,3),H(`imported`,function(e){return t.showImport(e)}),I(),F(6,`p`,4),K(7),I(),F(8,`p`,5),K(9),I()(),A(10,OA,7,1,`p`,6),F(11,`p`,7),K(12,` Records each change detection cycle with Angular's profiler: how long it took, how many components it checked, what started it and which checks changed nothing. Tree rows show how often each instance was checked. Times come from a development build. While it records, the page also wraps Angular's scheduler, adds a signal write hook and watches DOM updates; all of it stops with the recording. `),A(13,kA,1,0)(14,AA,1,0),I(),A(15,NA,2,1),A(16,IA,16,7),L(17,`app-limit-note`,8),M(18,LA,2,1,`p`,9,eg),A(20,BA,9,10),A(21,QA,46,6)(22,$A,2,0,`p`,10),I()),e&2){let e;D(4),j(t.imported()?-1:4),D(),P(`page`,t.page())(`maxCycles`,t.maxCycles()),D(2),q(t.status()),D(2),q(t.announcement()),D(),j((e=t.imported())?10:-1,e),D(3),j(t.native()?13:14),D(2),j(t.page()?.supported===!1?15:-1),D(),j(!t.imported()&&!t.native()?16:-1),D(),P(`dropped`,t.page()?.dropped??0)(`max`,t.maxCycles()),D(),N(t.capNotes()),D(2),j(t.cycles().length?20:-1),D(),j(t.page()?.components?.length?21:t.recording()?22:-1)}},dependencies:[dD,XD,uA,Sk,pA,Rk,$k,wA],styles:[`[_nghost-%COMP%] { display: block; margin-top: 16px; } @@ -1946,7 +1946,7 @@ td.mono[_ngcontent-%COMP%] { .trigger[_ngcontent-%COMP%] .mono[_ngcontent-%COMP%], .top[_ngcontent-%COMP%] .mono[_ngcontent-%COMP%] { overflow-wrap: anywhere; -}`]})};function uj(e){return Object.fromEntries(e.map(e=>[e.name,e.value??null]))}function dj(e){return e.map(e=>({name:e.name,listened:!!e.listened}))}function fj(e){let t={component:e.name,tag:e.tag,hostPath:e.path};e.selector&&(t.selector=e.selector),e.source&&(t.source=e.source),e.changeDetection&&(t.changeDetection=e.changeDetection),e.encapsulation&&(t.encapsulation=e.encapsulation),t.inputs=uj(e.inputs),t.outputs=dj(e.outputs),t.properties=uj(e.properties??[]),e.listeners.length&&(t.listeners=e.listeners),e.directives.length&&(t.directives=e.directives.map(e=>({name:e.name,inputs:uj(e.inputs),outputs:dj(e.outputs)}))),t.injected=e.dependencies.map(e=>({token:e.token,providedBy:e.providedBy?e.providedByName??`an injector`:null}));try{return JSON.stringify(t,null,2)}catch{return JSON.stringify({component:e.name,tag:e.tag,hostPath:e.path})}}function pj(e){return e.selector||e.path}var mj=1e3;function hj(e,t){let n=[];for(let[r,i]of t){let t=e.get(r);t!==void 0&&t!==i&&n.push(r)}return n}function gj(e){try{return JSON.stringify(e)??`undefined`}catch{return String(e)}}var _j=class{ms;changed=T(new Set);owner=null;last=new Map;timers=new Map;constructor(e=mj){this.ms=e}update(e,t){let n=new Map([...t].map(([e,t])=>[e,gj(t)]));if(e!==this.owner){this.clear(),this.owner=e,this.last=n;return}let r=hj(this.last,n);if(this.last=n,r.length){this.changed.update(e=>new Set([...e,...r]));for(let e of r)clearTimeout(this.timers.get(e)),this.timers.set(e,setTimeout(()=>{this.timers.delete(e),this.changed.update(t=>{let n=new Set(t);return n.delete(e),n})},this.ms))}}clear(){for(let e of this.timers.values())clearTimeout(e);this.timers.clear(),this.changed().size&&this.changed.set(new Set)}};function vj(e,t,n=0){return e===`directive`?`directive:${n}:${t}`:`${e}:${t}`}var yj=[`*`];function bj(e,t){e&1&&K(0),e&2&&q(W(2).label())}function xj(e,t){e&1&&Mg(0,0,null,bj,1,1)}function Sj(e,t){if(e&1&&(F(0,`span`,4),K(1),I()),e&2){let e=W(2);D(),q(e.message())}}function Cj(e,t){if(e&1){let e=B();F(0,`button`,2),H(`click`,function(){return S(e),C(W().open())}),_g(1,3),I(),A(2,Sj,2,1,`span`,4)}if(e&2){let e=W(),t=Ig(1);P(`title`,`Open `+e.label()+` in your editor`),k(`aria-label`,`Open `+e.label()+` in your editor`),D(),P(`ngTemplateOutlet`,t),D(),j(e.message()?2:-1)}}function wj(e,t){if(e&1&&(F(0,`span`,1),_g(1,3),I()),e&2){let e=W(),t=Ig(1);P(`title`,e.label()),D(),P(`ngTemplateOutlet`,t)}}var Tj=class e{source=T(T(null));client=X(()=>this.source()());available=X(()=>{let e=this.client();return!!e&&!hT(e)});use(e){this.source.set(e)}async open(e,t){if(!this.available())return{ok:!1,error:`No server is connected.`};try{let n=await pT(this.client(),`open-in-editor`,{file:e,...t?{line:t}:{}});return n?.ok?{ok:!0}:{ok:!1,error:n?.error??`The server did not open it.`}}catch{return{ok:!1,error:`The server did not open it.`}}}static ɵfac=function(t){return new(t||e)};static ɵprov=Al({token:e,factory:e.ɵfac})};function Ej(e,t){return t?`${e}:${t}`:e}var Dj=class e{editor=x(Tj);file=$.required();line=$(void 0);label=X(()=>Ej(this.file(),this.line()));message=T(``);async open(){this.message.set(``);let e=await this.editor.open(this.file(),this.line()??void 0);e.ok||this.message.set(`Not opened: ${e.error}`)}static ɵfac=function(t){return new(t||e)};static ɵcmp=O({type:e,selectors:[[`app-source-link`]],inputs:{file:[1,`file`],line:[1,`line`]},ngContentSelectors:yj,decls:4,vars:1,consts:[[`text`,``],[1,`source-text`,3,`title`],[`type`,`button`,1,`source-link`,3,`click`,`title`],[3,`ngTemplateOutlet`],[`role`,`alert`,1,`message`]],template:function(e,t){e&1&&(jg(),Nh(0,xj,2,0,`ng-template`,null,0,rv),A(2,Cj,3,4)(3,wj,2,2,`span`,1)),e&2&&(D(2),j(t.editor.available()?2:3))},dependencies:[$v],styles:[`[_nghost-%COMP%] { +}`]})};function rj(e){return Object.fromEntries(e.map(e=>[e.name,e.value??null]))}function ij(e){return e.map(e=>({name:e.name,listened:!!e.listened}))}function aj(e){let t={component:e.name,tag:e.tag,hostPath:e.path};e.selector&&(t.selector=e.selector),e.source&&(t.source=e.source),e.changeDetection&&(t.changeDetection=e.changeDetection),e.encapsulation&&(t.encapsulation=e.encapsulation),t.inputs=rj(e.inputs),t.outputs=ij(e.outputs),t.properties=rj(e.properties??[]),e.listeners.length&&(t.listeners=e.listeners),e.directives.length&&(t.directives=e.directives.map(e=>({name:e.name,inputs:rj(e.inputs),outputs:ij(e.outputs)}))),t.injected=e.dependencies.map(e=>({token:e.token,providedBy:e.providedBy?e.providedByName??`an injector`:null}));try{return JSON.stringify(t,null,2)}catch{return JSON.stringify({component:e.name,tag:e.tag,hostPath:e.path})}}function oj(e){return e.selector||e.path}var sj=1e3;function cj(e,t){let n=[];for(let[r,i]of t){let t=e.get(r);t!==void 0&&t!==i&&n.push(r)}return n}function lj(e){try{return JSON.stringify(e)??`undefined`}catch{return String(e)}}var uj=class{ms;changed=T(new Set);owner=null;last=new Map;timers=new Map;constructor(e=sj){this.ms=e}update(e,t){let n=new Map([...t].map(([e,t])=>[e,lj(t)]));if(e!==this.owner){this.clear(),this.owner=e,this.last=n;return}let r=cj(this.last,n);if(this.last=n,r.length){this.changed.update(e=>new Set([...e,...r]));for(let e of r)clearTimeout(this.timers.get(e)),this.timers.set(e,setTimeout(()=>{this.timers.delete(e),this.changed.update(t=>{let n=new Set(t);return n.delete(e),n})},this.ms))}}clear(){for(let e of this.timers.values())clearTimeout(e);this.timers.clear(),this.changed().size&&this.changed.set(new Set)}};function dj(e,t,n=0){return e===`directive`?`directive:${n}:${t}`:`${e}:${t}`}var fj=[`*`];function pj(e,t){e&1&&K(0),e&2&&q(W(2).label())}function mj(e,t){e&1&&Ag(0,0,null,pj,1,1)}function hj(e,t){if(e&1&&(F(0,`span`,4),K(1),I()),e&2){let e=W(2);D(),q(e.message())}}function gj(e,t){if(e&1){let e=B();F(0,`button`,2),H(`click`,function(){return S(e),C(W().open())}),hg(1,3),I(),A(2,hj,2,1,`span`,4)}if(e&2){let e=W(),t=Pg(1);P(`title`,`Open `+e.label()+` in your editor`),k(`aria-label`,`Open `+e.label()+` in your editor`),D(),P(`ngTemplateOutlet`,t),D(),j(e.message()?2:-1)}}function _j(e,t){if(e&1&&(F(0,`span`,1),hg(1,3),I()),e&2){let e=W(),t=Pg(1);P(`title`,e.label()),D(),P(`ngTemplateOutlet`,t)}}var vj=class e{source=T(T(null));client=X(()=>this.source()());available=X(()=>{let e=this.client();return!!e&&!cT(e)});use(e){this.source.set(e)}async open(e,t){if(!this.available())return{ok:!1,error:`No server is connected.`};try{let n=await oT(this.client(),`open-in-editor`,{file:e,...t?{line:t}:{}});return n?.ok?{ok:!0}:{ok:!1,error:n?.error??`The server did not open it.`}}catch{return{ok:!1,error:`The server did not open it.`}}}static ɵfac=function(t){return new(t||e)};static ɵprov=kl({token:e,factory:e.ɵfac})};function yj(e,t){return t?`${e}:${t}`:e}var bj=class e{editor=x(vj);file=$.required();line=$(void 0);label=X(()=>yj(this.file(),this.line()));message=T(``);async open(){this.message.set(``);let e=await this.editor.open(this.file(),this.line()??void 0);e.ok||this.message.set(`Not opened: ${e.error}`)}static ɵfac=function(t){return new(t||e)};static ɵcmp=O({type:e,selectors:[[`app-source-link`]],inputs:{file:[1,`file`],line:[1,`line`]},ngContentSelectors:fj,decls:4,vars:1,consts:[[`text`,``],[1,`source-text`,3,`title`],[`type`,`button`,1,`source-link`,3,`click`,`title`],[3,`ngTemplateOutlet`],[`role`,`alert`,1,`message`]],template:function(e,t){e&1&&(kg(),jh(0,mj,2,0,`ng-template`,null,0,tv),A(2,gj,3,4)(3,_j,2,2,`span`,1)),e&2&&(D(2),j(t.editor.available()?2:3))},dependencies:[Zv],styles:[`[_nghost-%COMP%] { display: inline; min-width: 0; } @@ -1981,7 +1981,7 @@ td.mono[_ngcontent-%COMP%] { color: var(--%NS%danger-text); font-family: var(--%NS%font-sans); font-size: 0.92em; -}`]})},Oj=[`field`],kj=[`editButton`],Aj=[`valueBox`];function jj(e,t){if(e&1){let e=B();R(0,`div`,5)(1,`label`,6),K(2),z(),R(3,`input`,7,0),U(`input`,function(t){return S(e),C(W().draft.set(t.target.value))})(`keydown.enter`,function(t){S(e);let n=W();return t.preventDefault(),C(n.apply())})(`keydown.escape`,function(t){S(e);let n=W();return t.preventDefault(),t.stopPropagation(),C(n.cancel())}),z(),R(5,`button`,8),U(`click`,function(){return S(e),C(W().apply())}),K(6,`Apply`),z(),R(7,`button`,9),U(`click`,function(){return S(e),C(W().cancel())}),K(8,`Cancel`),z()(),R(9,`p`,10),K(10),z()}if(e&2){let e=W();D(),V(`htmlFor`,e.fieldId),D(),J(`New value of `,e.prop().name,`, as JSON`),D(),V(`id`,e.fieldId)(`value`,e.draft())(`readOnly`,e.busy()),k(`aria-busy`,e.busy()?`true`:null)(`aria-invalid`,e.error()?`true`:null)(`aria-describedby`,e.hintId+(e.error()?` `+e.errorId:``)),D(2),V(`disabled`,e.busy()),D(4),V(`id`,e.hintId),D(),J(` JSON, such as "text", 42, true or `,e.objectSample,`. Enter applies, Escape cancels. `)}}function Mj(e,t){if(e&1&&(R(0,`pre`,null,1),K(2),$_(3,`json`),z()),e&2){let e=W(2);k(`tabindex`,e.scrollable()?0:null)(`role`,e.scrollable()?`region`:null)(`aria-label`,e.scrollable()?`Value of `+e.prop().name:null),D(2),q(ev(3,4,e.prop().value))}}function Nj(e,t){if(e&1){let e=B();R(0,`button`,14,2),U(`click`,function(){return S(e),C(W(2).start())}),K(2,` Edit `),z()}if(e&2){let e=W(2);V(`disabled`,e.busy()),k(`aria-label`,`Edit `+e.prop().name)}}function Pj(e,t){if(e&1&&(R(0,`p`,13),K(1),z()),e&2){let e=W(2);D(),q(e.prop().locked)}}function Fj(e,t){if(e&1&&(R(0,`div`,11),A(1,Mj,4,6,`pre`),A(2,Nj,3,2,`button`,12),z(),A(3,Pj,2,1,`p`,13)),e&2){let e=W();D(),j(e.bare()?-1:1),D(),j(e.editable()?2:-1),D(),j(e.writes()&&e.prop().locked?3:-1)}}function Ij(e,t){if(e&1&&(R(0,`p`,3),K(1),z()),e&2){let e=W();V(`id`,e.errorId),D(),q(e.error())}}var Lj=0;function Rj(e){let t=e.trim();if(!t)return{error:`Type a JSON value, such as "text", 42, true, null or [1, 2].`};try{return{value:JSON.parse(t)}}catch{return{error:`Not valid JSON. Put text in double quotes, such as "Paris".`}}}var zj=class e{prop=$.required();componentId=$.required();pageId=$(null);rpc=$(null);writes=$(!1);bare=$(!1);readDraft=$(null);fieldId=`prop-edit-${++Lj}`;hintId=`${this.fieldId}-hint`;errorId=`${this.fieldId}-error`;objectSample=`{"a": 1}`;editing=T(!1);draft=T(``);busy=T(!1);error=T(``);done=T(``);editable=X(()=>this.writes()&&!!this.prop().edit&&!!this.pageId()&&!!this.rpc());field=_v(`field`);editButton=_v(`editButton`);valueBox=_v(`valueBox`);injector=x(xs);scrollable=T(!1);constructor(){wv(()=>{this.prop();let e=this.valueBox()?.nativeElement;this.scrollable.set(!!e&&e.scrollHeight>e.clientHeight+1)})}async start(){let e=this.prop().value;this.error.set(``),this.done.set(``);let t=this.readDraft();if(t){this.busy.set(!0);let n=await t();if(this.busy.set(!1),n.error!==void 0){this.error.set(n.error);return}e=n.value}this.draft.set(e===void 0?``:JSON.stringify(e)),this.editing.set(!0),ld(()=>{let e=this.field()?.nativeElement;e?.focus(),e?.select()},{injector:this.injector})}cancel(){this.editing()&&(this.editing.set(!1),this.busy.set(!1),this.error.set(``),this.focusEdit())}async apply(){if(this.busy())return;let e=Rj(this.draft());if(`error`in e){this.error.set(e.error);return}let t=this.prop(),n=this.rpc(),r=this.pageId();if(!n||!r||!t.edit)return;this.busy.set(!0),this.error.set(``);let i;try{i=await n.scope(`pangular`).rpc.call(`request-component-edit`,{pageId:r,request:{id:this.componentId(),path:t.prop,value:e.value,kind:t.edit}})??{}}catch{i={error:`The devtools server did not answer. Try again.`}}this.busy.set(!1),this.editing()&&(i.ok?(this.editing.set(!1),this.done.set(`Set ${t.name}.`),this.focusEdit()):(this.error.set(i.error??`The page did not write it.`),this.field()?.nativeElement.focus()))}focusEdit(){ld(()=>this.editButton()?.nativeElement.focus(),{injector:this.injector})}static ɵfac=function(t){return new(t||e)};static ɵcmp=O({type:e,selectors:[[`app-prop-value`]],viewQuery:function(e,t){e&1&&Pg(t.field,Oj,5)(t.editButton,kj,5)(t.valueBox,Aj,5),e&2&&Fg(3)},inputs:{prop:[1,`prop`],componentId:[1,`componentId`],pageId:[1,`pageId`],rpc:[1,`rpc`],writes:[1,`writes`],bare:[1,`bare`],readDraft:[1,`readDraft`]},decls:5,vars:3,consts:[[`field`,``],[`valueBox`,``],[`editButton`,``],[`role`,`alert`,1,`error`,3,`id`],[`role`,`status`,1,`sr-only`],[1,`editor`],[1,`sr-only`,3,`for`],[`type`,`text`,`autocomplete`,`off`,`spellcheck`,`false`,1,`field`,`mono`,3,`input`,`keydown.enter`,`keydown.escape`,`id`,`value`,`readOnly`],[`type`,`button`,1,`primary`,3,`click`,`disabled`],[`type`,`button`,3,`click`],[1,`hint`,3,`id`],[1,`view`],[`type`,`button`,1,`edit`,3,`disabled`],[1,`locked`],[`type`,`button`,1,`edit`,3,`click`,`disabled`]],template:function(e,t){e&1&&(A(0,jj,11,11)(1,Fj,4,3),A(2,Ij,2,2,`p`,3),R(3,`p`,4),K(4),z()),e&2&&(j(+!t.editing()),D(2),j(t.error()?2:-1),D(2),q(t.done()))},dependencies:[ty],styles:[`[_nghost-%COMP%] { +}`]})},xj=[`field`],Sj=[`editButton`],Cj=[`valueBox`];function wj(e,t){if(e&1){let e=B();R(0,`div`,5)(1,`label`,6),K(2),z(),R(3,`input`,7,0),U(`input`,function(t){return S(e),C(W().draft.set(t.target.value))})(`keydown.enter`,function(t){S(e);let n=W();return t.preventDefault(),C(n.apply())})(`keydown.escape`,function(t){S(e);let n=W();return t.preventDefault(),t.stopPropagation(),C(n.cancel())}),z(),R(5,`button`,8),U(`click`,function(){return S(e),C(W().apply())}),K(6,`Apply`),z(),R(7,`button`,9),U(`click`,function(){return S(e),C(W().cancel())}),K(8,`Cancel`),z()(),R(9,`p`,10),K(10),z()}if(e&2){let e=W();D(),V(`htmlFor`,e.fieldId),D(),J(`New value of `,e.prop().name,`, as JSON`),D(),V(`id`,e.fieldId)(`value`,e.draft())(`readOnly`,e.busy()),k(`aria-busy`,e.busy()?`true`:null)(`aria-invalid`,e.error()?`true`:null)(`aria-describedby`,e.hintId+(e.error()?` `+e.errorId:``)),D(2),V(`disabled`,e.busy()),D(4),V(`id`,e.hintId),D(),J(` JSON, such as "text", 42, true or `,e.objectSample,`. Enter applies, Escape cancels. `)}}function Tj(e,t){if(e&1&&(R(0,`pre`,null,1),K(2),Z_(3,`json`),z()),e&2){let e=W(2);k(`tabindex`,e.scrollable()?0:null)(`role`,e.scrollable()?`region`:null)(`aria-label`,e.scrollable()?`Value of `+e.prop().name:null),D(2),q(Q_(3,4,e.prop().value))}}function Ej(e,t){if(e&1){let e=B();R(0,`button`,14,2),U(`click`,function(){return S(e),C(W(2).start())}),K(2,` Edit `),z()}if(e&2){let e=W(2);V(`disabled`,e.busy()),k(`aria-label`,`Edit `+e.prop().name)}}function Dj(e,t){if(e&1&&(R(0,`p`,13),K(1),z()),e&2){let e=W(2);D(),q(e.prop().locked)}}function Oj(e,t){if(e&1&&(R(0,`div`,11),A(1,Tj,4,6,`pre`),A(2,Ej,3,2,`button`,12),z(),A(3,Dj,2,1,`p`,13)),e&2){let e=W();D(),j(e.bare()?-1:1),D(),j(e.editable()?2:-1),D(),j(e.writes()&&e.prop().locked?3:-1)}}function kj(e,t){if(e&1&&(R(0,`p`,3),K(1),z()),e&2){let e=W();V(`id`,e.errorId),D(),q(e.error())}}var Aj=0;function jj(e){let t=e.trim();if(!t)return{error:`Type a JSON value, such as "text", 42, true, null or [1, 2].`};try{return{value:JSON.parse(t)}}catch{return{error:`Not valid JSON. Put text in double quotes, such as "Paris".`}}}var Mj=class e{prop=$.required();componentId=$.required();pageId=$(null);rpc=$(null);writes=$(!1);bare=$(!1);readDraft=$(null);fieldId=`prop-edit-${++Aj}`;hintId=`${this.fieldId}-hint`;errorId=`${this.fieldId}-error`;objectSample=`{"a": 1}`;editing=T(!1);draft=T(``);busy=T(!1);error=T(``);done=T(``);editable=X(()=>this.writes()&&!!this.prop().edit&&!!this.pageId()&&!!this.rpc());field=hv(`field`);editButton=hv(`editButton`);valueBox=hv(`valueBox`);injector=x(bs);scrollable=T(!1);constructor(){Sv(()=>{this.prop();let e=this.valueBox()?.nativeElement;this.scrollable.set(!!e&&e.scrollHeight>e.clientHeight+1)})}async start(){let e=this.prop().value;this.error.set(``),this.done.set(``);let t=this.readDraft();if(t){this.busy.set(!0);let n=await t();if(this.busy.set(!1),n.error!==void 0){this.error.set(n.error);return}e=n.value}this.draft.set(e===void 0?``:JSON.stringify(e)),this.editing.set(!0),cd(()=>{let e=this.field()?.nativeElement;e?.focus(),e?.select()},{injector:this.injector})}cancel(){this.editing()&&(this.editing.set(!1),this.busy.set(!1),this.error.set(``),this.focusEdit())}async apply(){if(this.busy())return;let e=jj(this.draft());if(`error`in e){this.error.set(e.error);return}let t=this.prop(),n=this.rpc(),r=this.pageId();if(!n||!r||!t.edit)return;this.busy.set(!0),this.error.set(``);let i;try{i=await n.scope(`pangular`).rpc.call(`request-component-edit`,{pageId:r,request:{id:this.componentId(),path:t.prop,value:e.value,kind:t.edit}})??{}}catch{i={error:`The devtools server did not answer. Try again.`}}this.busy.set(!1),this.editing()&&(i.ok?(this.editing.set(!1),this.done.set(`Set ${t.name}.`),this.focusEdit()):(this.error.set(i.error??`The page did not write it.`),this.field()?.nativeElement.focus()))}focusEdit(){cd(()=>this.editButton()?.nativeElement.focus(),{injector:this.injector})}static ɵfac=function(t){return new(t||e)};static ɵcmp=O({type:e,selectors:[[`app-prop-value`]],viewQuery:function(e,t){e&1&&Mg(t.field,xj,5)(t.editButton,Sj,5)(t.valueBox,Cj,5),e&2&&Ng(3)},inputs:{prop:[1,`prop`],componentId:[1,`componentId`],pageId:[1,`pageId`],rpc:[1,`rpc`],writes:[1,`writes`],bare:[1,`bare`],readDraft:[1,`readDraft`]},decls:5,vars:3,consts:[[`field`,``],[`valueBox`,``],[`editButton`,``],[`role`,`alert`,1,`error`,3,`id`],[`role`,`status`,1,`sr-only`],[1,`editor`],[1,`sr-only`,3,`for`],[`type`,`text`,`autocomplete`,`off`,`spellcheck`,`false`,1,`field`,`mono`,3,`input`,`keydown.enter`,`keydown.escape`,`id`,`value`,`readOnly`],[`type`,`button`,1,`primary`,3,`click`,`disabled`],[`type`,`button`,3,`click`],[1,`hint`,3,`id`],[1,`view`],[`type`,`button`,1,`edit`,3,`disabled`],[1,`locked`],[`type`,`button`,1,`edit`,3,`click`,`disabled`]],template:function(e,t){e&1&&(A(0,wj,11,11)(1,Oj,4,3),A(2,kj,2,2,`p`,3),R(3,`p`,4),K(4),z()),e&2&&(j(+!t.editing()),D(2),j(t.error()?2:-1),D(2),q(t.done()))},dependencies:[$v],styles:[`[_nghost-%COMP%] { display: block; min-width: 0; } @@ -2104,7 +2104,7 @@ button.edit[_ngcontent-%COMP%] { .error[_ngcontent-%COMP%] { color: var(--%NS%danger-text); -}`]})},Bj=1e3,Vj={depth:5,limit:100},Hj=`[redacted]`;function Uj(e){return!!e&&typeof e==`object`&&!Array.isArray(e)}function Wj(e){return Uj(e)&&typeof e.$more==`number`&&Object.keys(e).length===1}function Gj(e){return Uj(e)&&typeof e.$collapsed==`string`&&typeof e.size==`number`&&Object.keys(e).length===2}function Kj(e){return e===`Array`?`array`:e===`Map`?`map`:e===`Set`?`set`:`object`}function qj(e){return e.$type===`Map`&&Array.isArray(e.entries)}function Jj(e){return e.$type===`Set`&&Array.isArray(e.values)}function Yj(e){return Object.keys(e).filter(e=>e!==`$type`&&e!==`$more`)}function Xj(e){if(!e||typeof e!=`object`)return null;if(Gj(e))return e.size<=0?null:{kind:Kj(e.$collapsed),type:e.$collapsed,size:e.size,collapsed:!0};if(Wj(e))return null;if(Array.isArray(e)){let t=e.at(-1),n=Wj(t)?t.$more:0,r=e.length-+!!n+n;return r?{kind:`array`,type:`Array`,size:r,collapsed:!1}:null}let t=e;if(qj(t)||Jj(t)){let e=typeof t.size==`number`?t.size:0,n=qj(t)?`map`:`set`;return e?{kind:n,type:n===`map`?`Map`:`Set`,size:e,collapsed:!1}:null}let n=typeof t.$more==`number`?t.$more:0,r=Yj(t).length+n,i=typeof t.$type==`string`?t.$type:`Object`;return r?{kind:`object`,type:i,size:r,collapsed:!1}:null}function Zj(e){if(typeof e==`string`)return JSON.stringify(e);let t=Xj(e);if(t)return eM(t);try{return JSON.stringify(e)??String(e)}catch{return String(e)}}function Qj(e){let t=Xj(e);if(!t||t.collapsed)return{children:[],more:0};if(Array.isArray(e)){let n=(Wj(e.at(-1))?e.slice(0,-1):e).map((e,t)=>({key:String(t),label:String(t),value:e}));return{children:n,more:t.size-n.length}}let n=e;if(t.kind===`map`){let e=n.entries.map((e,t)=>{let[n,r]=Array.isArray(e)?e:[void 0,e];return{key:String(t),label:Zj(n),value:r}});return{children:e,more:Math.max(0,t.size-e.length)}}if(t.kind===`set`){let e=n.values.map((e,t)=>({key:String(t),label:String(t),value:e}));return{children:e,more:Math.max(0,t.size-e.length)}}return{children:Yj(n).map(e=>({key:e,label:e,value:n[e]})),more:typeof n.$more==`number`?n.$more:0}}function $j(e,t,n){return`${e} ${e===1?t:n}`}function eM(e){let t={array:$j(e.size,`item`,`items`),object:$j(e.size,`key`,`keys`),map:$j(e.size,`entry`,`entries`),set:$j(e.size,`value`,`values`)}[e.kind];return`${e.type} (${t})`}function tM(e,t){return JSON.stringify(t===void 0?e:[t,...e])}function nM(e,t){return e.map((e,n)=>n===0?e:(t?t[n-1]!==`object`:/^\d+$/.test(e))?`[${e}]`:`.${e}`).join(``)}function rM(e){return e.every(e=>e&&e===e.trim()&&!/[.[\]]/.test(e))?e.join(`.`):null}var iM=/^\[(Getter|Unreadable|Circular|Truncated|Function\b.*|Promise)\]$/;function aM(e){return e===null||typeof e==`boolean`?!0:typeof e==`number`?Number.isFinite(e):typeof e==`string`&&e!==Hj&&!iM.test(e)&&!e.endsWith(`…`)}function oM(e,t){return!e||t.kind===`map`||t.kind===`set`||e===`signal`&&t.kind===`object`&&t.type!==`Object`?null:e}function sM(e,t,n,r,i=500){let a=[],o=r.trim().toLowerCase();if(!o)return a;let s=new Set,c=(e,t)=>{let r=tM(e);if(!(s.has(r)||a.length>=i)){s.add(r);for(let r of Qj(t).children){let t=[...e,r.key];if(r.label.toLowerCase().includes(o)&&a.push(t),!Xj(r.value))continue;let i=n(t)??(Xj(r.value)?.collapsed?void 0:r.value);i!==void 0&&c(t,i)}}};return c(e,n(e)??t),a}var cM=(e,t)=>t.id;function lM(e,t){if(e&1){let e=B();F(0,`button`,2),H(`click`,function(){S(e);let t=W().$implicit;return C(W(3).toggle(t))}),w(),F(1,`svg`,3),L(2,`path`,4),I(),ps(),F(3,`span`,14),K(4),I(),F(5,`span`,5),K(6),I()()}if(e&2){let e=W().$implicit;k(`aria-expanded`,e.open)(`aria-label`,e.label+`: `+e.text),D(4),J(``,e.label,`:`),D(2),q(e.text)}}function uM(e,t){if(e&1&&L(0,`app-prop-value`,15),e&2){let e=W(5);P(`prop`,t)(`componentId`,e.componentId())(`pageId`,e.pageId())(`rpc`,e.rpc())(`writes`,e.writes())}}function dM(e,t){if(e&1&&(F(0,`span`,16),K(1),I()),e&2){let e=W(2).$implicit;D(),q(e.text)}}function fM(e,t){if(e&1&&(F(0,`span`,14),K(1),I(),A(2,uM,1,5,`app-prop-value`,15)(3,dM,2,1,`span`,16)),e&2){let e,t=W().$implicit;D(),J(``,t.label,`:`),D(),j((e=t.edit)?2:3,e)}}function pM(e,t){if(e&1){let e=B();F(0,`button`,17),H(`click`,function(){S(e);let t=W().$implicit;return C(W(3).more(t))}),K(1),F(2,`span`,18),K(3),I()()}if(e&2){let e=W().$implicit,t=W(3);D(),J(` Show `,t.step(e),` more `),D(2),J(`(`,e.more,` not listed)`)}}function mM(e,t){e&1&&(F(0,`span`,12),K(1,`Reading from the page…`),I())}function hM(e,t){if(e&1&&(F(0,`span`,13),K(1),I()),e&2){let e=W().$implicit;D(),q(e.text)}}function gM(e,t){if(e&1&&(F(0,`li`,9),A(1,lM,7,4,`button`,10)(2,fM,4,2)(3,pM,4,2,`button`,11)(4,mM,2,0,`span`,12)(5,hM,2,1,`span`,13),I()),e&2){let e,n=t.$implicit;r_(`padding-left`,n.depth*14,`px`),D(),j((e=n.kind)===`node`?1:e===`leaf`?2:e===`more`?3:e===`loading`?4:e===`error`?5:-1)}}function _M(e,t){if(e&1&&(F(0,`ul`,7),M(1,gM,6,3,`li`,8,cM),I()),e&2){let e=W(2);P(`id`,e.listId),k(`aria-label`,e.prop().name+` entries`),D(),N(e.rows())}}function vM(e,t){if(e&1){let e=B();F(0,`div`,1)(1,`button`,2),H(`click`,function(){return S(e),C(W().toggleRoot())}),w(),F(2,`svg`,3),L(3,`path`,4),I(),ps(),F(4,`span`,5),K(5),I()(),L(6,`app-prop-value`,6),I(),A(7,_M,3,2,`ul`,7)}if(e&2){let e=t,n=W();D(),k(`aria-expanded`,n.rootOpen())(`aria-controls`,n.rootOpen()?n.listId:null)(`aria-label`,n.prop().name+`: `+n.summaryOf(e)),D(4),q(n.summaryOf(e)),D(),P(`bare`,!0)(`prop`,n.prop())(`componentId`,n.componentId())(`pageId`,n.pageId())(`rpc`,n.rpc())(`writes`,n.writes())(`readDraft`,n.readWhole),D(),j(n.rootOpen()?7:-1)}}function yM(e,t){if(e&1&&L(0,`app-prop-value`,0),e&2){let e=W();P(`prop`,e.prop())(`componentId`,e.componentId())(`pageId`,e.pageId())(`rpc`,e.rpc())(`writes`,e.writes())}}var bM=0;function xM(e){if(e===void 0)return`undefined`;try{return JSON.stringify(e)??String(e)}catch{return String(e)}}function SM(e){if(Array.isArray(e))return e.every(SM);if(e&&typeof e==`object`){let t=e;return![`$collapsed`,`$more`,`$type`].some(e=>Object.hasOwn(t,e))&&Object.values(t).every(SM)}return aM(e)}var CM=class e{prop=$.required();store=$.required();componentId=$.required();pageId=$(null);rpc=$(null);writes=$(!1);directive=$(void 0);query=$(``);listId=`value-tree-${++bM}`;host=x(Nl);pendingMore=null;constructor(){wv(()=>{let e=this.rows(),t=this.pendingMore;if(!t)return;let n=e.findIndex(e=>(e.kind===`leaf`||e.kind===`node`)&&!t.has(e.id));if(n<0)return;this.pendingMore=null;let r=document.activeElement;r&&r!==document.body&&r.isConnected||this.focusNear(n)})}rootPath=X(()=>[this.prop().prop]);rootValue=X(()=>this.store().level(this.rootPath(),this.directive())??this.prop().value);root=X(()=>Xj(this.rootValue()));needle=X(()=>this.query().trim().toLowerCase());matches=X(()=>{let e=this.needle(),t=this.prop();if(!e||[t.name,t.prop].some(t=>t.toLowerCase().includes(e)))return null;let n=this.store(),r=this.directive();return sM(this.rootPath(),this.rootValue(),e=>n.level(e,r),e)});rootOpen=X(()=>!!this.matches()?.length||this.store().isOpen(this.rootPath(),this.directive()));rows=X(()=>{let e=this.root();if(!e)return[];let t=this.store(),n=this.directive(),r=this.matches(),i=new Set,a=new Set;for(let e of r??[]){a.add(tM(e));for(let t=2;t<=e.length;t++)i.add(tM(e.slice(0,t)))}let o=this.prop(),s=this.writes()&&n===void 0,c=[],l=(e,o,d,f,p,m)=>{let{children:ee,more:h}=Qj(e);for(let e of ee){let ee=[...o,e.key],h=tM(ee);if(r&&!m&&!i.has(h))continue;let g=Xj(e.value),te=tM(ee,n);if(!g){let t=p&&aM(e.value)?rM(ee):null;c.push({id:te,kind:`leaf`,depth:f,path:ee,label:e.label,text:xM(e.value),edit:s&&t&&p?{name:nM(ee,[...d]),prop:t,value:e.value,edit:p}:void 0});continue}let ne=!!r&&!m&&i.has(h)&&!a.has(h)||t.isOpen(ee,n);if(c.push({id:te,kind:`node`,depth:f,path:ee,label:e.label,text:eM(g),container:g,open:ne}),!ne)continue;let re=t.level(ee,n)??(g.collapsed?void 0:e.value),ie=[...d,g.kind];re===void 0?t.errors().has(te)?c.push({...u(ee,f+1,`error`),text:t.errors().get(te)}):c.push(u(ee,f+1,`loading`)):l(re,ee,ie,f+1,oM(p,g),m||a.has(h))}h>0&&(!r||m)&&c.push({...u(o,f,`more`),more:h,listed:ee.length})},u=(e,t,r)=>({id:`${tM(e,n)}:${r}`,kind:r,depth:t,path:e,label:``,text:``});return l(this.rootValue(),this.rootPath(),[e.kind],0,s?oM(o.editInside??null,e):null,!r),c});readWhole=async()=>{let e=await this.store().read(this.rootPath(),Vj.depth,Vj.limit);return e.ok?SM(e.value)?{value:e.value}:{error:`Too large to edit as a whole. Open it to edit the values inside.`}:{error:e.error??`The page did not read it.`}};summaryOf(e){return eM(e)}toggleRoot(){this.pendingMore=null,this.store().toggle(this.rootPath(),this.directive(),!1)}toggle(e){this.pendingMore=null,this.store().toggle(e.path,this.directive(),!!e.container?.collapsed)}more(e){this.pendingMore=new Set(this.rows().map(e=>e.id)),this.store().more(e.path,this.directive(),e.listed??0)}focusNear(e){let t=this.host.nativeElement,n=Array.from(t.querySelectorAll(`#${this.listId} > li`)),r=e=>e?.querySelector(`button:not([disabled]), input, textarea, [tabindex="0"]`);(n.slice(e).map(r).find(Boolean)??n.slice(0,e).reverse().map(r).find(Boolean)??t.querySelector(`.root > .toggle`))?.focus()}step(e){return Math.min(100,e.more??0)}static ɵfac=function(t){return new(t||e)};static ɵcmp=O({type:e,selectors:[[`app-value-tree`]],inputs:{prop:[1,`prop`],store:[1,`store`],componentId:[1,`componentId`],pageId:[1,`pageId`],rpc:[1,`rpc`],writes:[1,`writes`],directive:[1,`directive`],query:[1,`query`]},decls:2,vars:1,consts:[[3,`prop`,`componentId`,`pageId`,`rpc`,`writes`],[1,`root`],[`type`,`button`,1,`toggle`,3,`click`],[`viewBox`,`0 0 24 24`,`aria-hidden`,`true`,1,`chevron`],[`d`,`m9 6 6 6-6 6`],[1,`summary`,`mono`],[1,`whole`,3,`bare`,`prop`,`componentId`,`pageId`,`rpc`,`writes`,`readDraft`],[1,`entries`,3,`id`],[1,`entry`,3,`padding-left`],[1,`entry`],[`type`,`button`,1,`toggle`],[`type`,`button`,1,`more`],[`role`,`status`,1,`muted`],[`role`,`alert`,1,`error`],[1,`key`,`mono`],[1,`leaf-edit`,3,`prop`,`componentId`,`pageId`,`rpc`,`writes`],[1,`leaf`,`mono`],[`type`,`button`,1,`more`,3,`click`],[1,`muted`]],template:function(e,t){if(e&1&&A(0,vM,8,12)(1,yM,1,5,`app-prop-value`,0),e&2){let e;j((e=t.root())?0:1,e)}},dependencies:[zj],styles:[`[_nghost-%COMP%] { +}`]})},Nj=1e3,Pj={depth:5,limit:100},Fj=`[redacted]`;function Ij(e){return!!e&&typeof e==`object`&&!Array.isArray(e)}function Lj(e){return Ij(e)&&typeof e.$more==`number`&&Object.keys(e).length===1}function Rj(e){return Ij(e)&&typeof e.$collapsed==`string`&&typeof e.size==`number`&&Object.keys(e).length===2}function zj(e){return e===`Array`?`array`:e===`Map`?`map`:e===`Set`?`set`:`object`}function Bj(e){return e.$type===`Map`&&Array.isArray(e.entries)}function Vj(e){return e.$type===`Set`&&Array.isArray(e.values)}function Hj(e){return Object.keys(e).filter(e=>e!==`$type`&&e!==`$more`)}function Uj(e){if(!e||typeof e!=`object`)return null;if(Rj(e))return e.size<=0?null:{kind:zj(e.$collapsed),type:e.$collapsed,size:e.size,collapsed:!0};if(Lj(e))return null;if(Array.isArray(e)){let t=e.at(-1),n=Lj(t)?t.$more:0,r=e.length-+!!n+n;return r?{kind:`array`,type:`Array`,size:r,collapsed:!1}:null}let t=e;if(Bj(t)||Vj(t)){let e=typeof t.size==`number`?t.size:0,n=Bj(t)?`map`:`set`;return e?{kind:n,type:n===`map`?`Map`:`Set`,size:e,collapsed:!1}:null}let n=typeof t.$more==`number`?t.$more:0,r=Hj(t).length+n,i=typeof t.$type==`string`?t.$type:`Object`;return r?{kind:`object`,type:i,size:r,collapsed:!1}:null}function Wj(e){if(typeof e==`string`)return JSON.stringify(e);let t=Uj(e);if(t)return qj(t);try{return JSON.stringify(e)??String(e)}catch{return String(e)}}function Gj(e){let t=Uj(e);if(!t||t.collapsed)return{children:[],more:0};if(Array.isArray(e)){let n=(Lj(e.at(-1))?e.slice(0,-1):e).map((e,t)=>({key:String(t),label:String(t),value:e}));return{children:n,more:t.size-n.length}}let n=e;if(t.kind===`map`){let e=n.entries.map((e,t)=>{let[n,r]=Array.isArray(e)?e:[void 0,e];return{key:String(t),label:Wj(n),value:r}});return{children:e,more:Math.max(0,t.size-e.length)}}if(t.kind===`set`){let e=n.values.map((e,t)=>({key:String(t),label:String(t),value:e}));return{children:e,more:Math.max(0,t.size-e.length)}}return{children:Hj(n).map(e=>({key:e,label:e,value:n[e]})),more:typeof n.$more==`number`?n.$more:0}}function Kj(e,t,n){return`${e} ${e===1?t:n}`}function qj(e){let t={array:Kj(e.size,`item`,`items`),object:Kj(e.size,`key`,`keys`),map:Kj(e.size,`entry`,`entries`),set:Kj(e.size,`value`,`values`)}[e.kind];return`${e.type} (${t})`}function Jj(e,t){return JSON.stringify(t===void 0?e:[t,...e])}function Yj(e,t){return e.map((e,n)=>n===0?e:(t?t[n-1]!==`object`:/^\d+$/.test(e))?`[${e}]`:`.${e}`).join(``)}function Xj(e){return e.every(e=>e&&e===e.trim()&&!/[.[\]]/.test(e))?e.join(`.`):null}var Zj=/^\[(Getter|Unreadable|Circular|Truncated|Function\b.*|Promise)\]$/;function Qj(e){return e===null||typeof e==`boolean`?!0:typeof e==`number`?Number.isFinite(e):typeof e==`string`&&e!==Fj&&!Zj.test(e)&&!e.endsWith(`…`)}function $j(e,t){return!e||t.kind===`map`||t.kind===`set`||e===`signal`&&t.kind===`object`&&t.type!==`Object`?null:e}function eM(e,t,n,r,i=500){let a=[],o=r.trim().toLowerCase();if(!o)return a;let s=new Set,c=(e,t)=>{let r=Jj(e);if(!(s.has(r)||a.length>=i)){s.add(r);for(let r of Gj(t).children){let t=[...e,r.key];if(r.label.toLowerCase().includes(o)&&a.push(t),!Uj(r.value))continue;let i=n(t)??(Uj(r.value)?.collapsed?void 0:r.value);i!==void 0&&c(t,i)}}};return c(e,n(e)??t),a}var tM=(e,t)=>t.id;function nM(e,t){if(e&1){let e=B();F(0,`button`,2),H(`click`,function(){S(e);let t=W().$implicit;return C(W(3).toggle(t))}),w(),F(1,`svg`,3),L(2,`path`,4),I(),fs(),F(3,`span`,14),K(4),I(),F(5,`span`,5),K(6),I()()}if(e&2){let e=W().$implicit;k(`aria-expanded`,e.open)(`aria-label`,e.label+`: `+e.text),D(4),J(``,e.label,`:`),D(2),q(e.text)}}function rM(e,t){if(e&1&&L(0,`app-prop-value`,15),e&2){let e=W(5);P(`prop`,t)(`componentId`,e.componentId())(`pageId`,e.pageId())(`rpc`,e.rpc())(`writes`,e.writes())}}function iM(e,t){if(e&1&&(F(0,`span`,16),K(1),I()),e&2){let e=W(2).$implicit;D(),q(e.text)}}function aM(e,t){if(e&1&&(F(0,`span`,14),K(1),I(),A(2,rM,1,5,`app-prop-value`,15)(3,iM,2,1,`span`,16)),e&2){let e,t=W().$implicit;D(),J(``,t.label,`:`),D(),j((e=t.edit)?2:3,e)}}function oM(e,t){if(e&1){let e=B();F(0,`button`,17),H(`click`,function(){S(e);let t=W().$implicit;return C(W(3).more(t))}),K(1),F(2,`span`,18),K(3),I()()}if(e&2){let e=W().$implicit,t=W(3);D(),J(` Show `,t.step(e),` more `),D(2),J(`(`,e.more,` not listed)`)}}function sM(e,t){e&1&&(F(0,`span`,12),K(1,`Reading from the page…`),I())}function cM(e,t){if(e&1&&(F(0,`span`,13),K(1),I()),e&2){let e=W().$implicit;D(),q(e.text)}}function lM(e,t){if(e&1&&(F(0,`li`,9),A(1,nM,7,4,`button`,10)(2,aM,4,2)(3,oM,4,2,`button`,11)(4,sM,2,0,`span`,12)(5,cM,2,1,`span`,13),I()),e&2){let e,n=t.$implicit;t_(`padding-left`,n.depth*14,`px`),D(),j((e=n.kind)===`node`?1:e===`leaf`?2:e===`more`?3:e===`loading`?4:e===`error`?5:-1)}}function uM(e,t){if(e&1&&(F(0,`ul`,7),M(1,lM,6,3,`li`,8,tM),I()),e&2){let e=W(2);P(`id`,e.listId),k(`aria-label`,e.prop().name+` entries`),D(),N(e.rows())}}function dM(e,t){if(e&1){let e=B();F(0,`div`,1)(1,`button`,2),H(`click`,function(){return S(e),C(W().toggleRoot())}),w(),F(2,`svg`,3),L(3,`path`,4),I(),fs(),F(4,`span`,5),K(5),I()(),L(6,`app-prop-value`,6),I(),A(7,uM,3,2,`ul`,7)}if(e&2){let e=t,n=W();D(),k(`aria-expanded`,n.rootOpen())(`aria-controls`,n.rootOpen()?n.listId:null)(`aria-label`,n.prop().name+`: `+n.summaryOf(e)),D(4),q(n.summaryOf(e)),D(),P(`bare`,!0)(`prop`,n.prop())(`componentId`,n.componentId())(`pageId`,n.pageId())(`rpc`,n.rpc())(`writes`,n.writes())(`readDraft`,n.readWhole),D(),j(n.rootOpen()?7:-1)}}function fM(e,t){if(e&1&&L(0,`app-prop-value`,0),e&2){let e=W();P(`prop`,e.prop())(`componentId`,e.componentId())(`pageId`,e.pageId())(`rpc`,e.rpc())(`writes`,e.writes())}}var pM=0;function mM(e){if(e===void 0)return`undefined`;try{return JSON.stringify(e)??String(e)}catch{return String(e)}}function hM(e){if(Array.isArray(e))return e.every(hM);if(e&&typeof e==`object`){let t=e;return![`$collapsed`,`$more`,`$type`].some(e=>Object.hasOwn(t,e))&&Object.values(t).every(hM)}return Qj(e)}var gM=class e{prop=$.required();store=$.required();componentId=$.required();pageId=$(null);rpc=$(null);writes=$(!1);directive=$(void 0);query=$(``);listId=`value-tree-${++pM}`;host=x(Ml);pendingMore=null;constructor(){Sv(()=>{let e=this.rows(),t=this.pendingMore;if(!t)return;let n=e.findIndex(e=>(e.kind===`leaf`||e.kind===`node`)&&!t.has(e.id));if(n<0)return;this.pendingMore=null;let r=document.activeElement;r&&r!==document.body&&r.isConnected||this.focusNear(n)})}rootPath=X(()=>[this.prop().prop]);rootValue=X(()=>this.store().level(this.rootPath(),this.directive())??this.prop().value);root=X(()=>Uj(this.rootValue()));needle=X(()=>this.query().trim().toLowerCase());matches=X(()=>{let e=this.needle(),t=this.prop();if(!e||[t.name,t.prop].some(t=>t.toLowerCase().includes(e)))return null;let n=this.store(),r=this.directive();return eM(this.rootPath(),this.rootValue(),e=>n.level(e,r),e)});rootOpen=X(()=>!!this.matches()?.length||this.store().isOpen(this.rootPath(),this.directive()));rows=X(()=>{let e=this.root();if(!e)return[];let t=this.store(),n=this.directive(),r=this.matches(),i=new Set,a=new Set;for(let e of r??[]){a.add(Jj(e));for(let t=2;t<=e.length;t++)i.add(Jj(e.slice(0,t)))}let o=this.prop(),s=this.writes()&&n===void 0,c=[],l=(e,o,d,f,p,m)=>{let{children:ee,more:h}=Gj(e);for(let e of ee){let ee=[...o,e.key],h=Jj(ee);if(r&&!m&&!i.has(h))continue;let g=Uj(e.value),te=Jj(ee,n);if(!g){let t=p&&Qj(e.value)?Xj(ee):null;c.push({id:te,kind:`leaf`,depth:f,path:ee,label:e.label,text:mM(e.value),edit:s&&t&&p?{name:Yj(ee,[...d]),prop:t,value:e.value,edit:p}:void 0});continue}let ne=!!r&&!m&&i.has(h)&&!a.has(h)||t.isOpen(ee,n);if(c.push({id:te,kind:`node`,depth:f,path:ee,label:e.label,text:qj(g),container:g,open:ne}),!ne)continue;let re=t.level(ee,n)??(g.collapsed?void 0:e.value),ie=[...d,g.kind];re===void 0?t.errors().has(te)?c.push({...u(ee,f+1,`error`),text:t.errors().get(te)}):c.push(u(ee,f+1,`loading`)):l(re,ee,ie,f+1,$j(p,g),m||a.has(h))}h>0&&(!r||m)&&c.push({...u(o,f,`more`),more:h,listed:ee.length})},u=(e,t,r)=>({id:`${Jj(e,n)}:${r}`,kind:r,depth:t,path:e,label:``,text:``});return l(this.rootValue(),this.rootPath(),[e.kind],0,s?$j(o.editInside??null,e):null,!r),c});readWhole=async()=>{let e=await this.store().read(this.rootPath(),Pj.depth,Pj.limit);return e.ok?hM(e.value)?{value:e.value}:{error:`Too large to edit as a whole. Open it to edit the values inside.`}:{error:e.error??`The page did not read it.`}};summaryOf(e){return qj(e)}toggleRoot(){this.pendingMore=null,this.store().toggle(this.rootPath(),this.directive(),!1)}toggle(e){this.pendingMore=null,this.store().toggle(e.path,this.directive(),!!e.container?.collapsed)}more(e){this.pendingMore=new Set(this.rows().map(e=>e.id)),this.store().more(e.path,this.directive(),e.listed??0)}focusNear(e){let t=this.host.nativeElement,n=Array.from(t.querySelectorAll(`#${this.listId} > li`)),r=e=>e?.querySelector(`button:not([disabled]), input, textarea, [tabindex="0"]`);(n.slice(e).map(r).find(Boolean)??n.slice(0,e).reverse().map(r).find(Boolean)??t.querySelector(`.root > .toggle`))?.focus()}step(e){return Math.min(100,e.more??0)}static ɵfac=function(t){return new(t||e)};static ɵcmp=O({type:e,selectors:[[`app-value-tree`]],inputs:{prop:[1,`prop`],store:[1,`store`],componentId:[1,`componentId`],pageId:[1,`pageId`],rpc:[1,`rpc`],writes:[1,`writes`],directive:[1,`directive`],query:[1,`query`]},decls:2,vars:1,consts:[[3,`prop`,`componentId`,`pageId`,`rpc`,`writes`],[1,`root`],[`type`,`button`,1,`toggle`,3,`click`],[`viewBox`,`0 0 24 24`,`aria-hidden`,`true`,1,`chevron`],[`d`,`m9 6 6 6-6 6`],[1,`summary`,`mono`],[1,`whole`,3,`bare`,`prop`,`componentId`,`pageId`,`rpc`,`writes`,`readDraft`],[1,`entries`,3,`id`],[1,`entry`,3,`padding-left`],[1,`entry`],[`type`,`button`,1,`toggle`],[`type`,`button`,1,`more`],[`role`,`status`,1,`muted`],[`role`,`alert`,1,`error`],[1,`key`,`mono`],[1,`leaf-edit`,3,`prop`,`componentId`,`pageId`,`rpc`,`writes`],[1,`leaf`,`mono`],[`type`,`button`,1,`more`,3,`click`],[1,`muted`]],template:function(e,t){if(e&1&&A(0,dM,8,12)(1,fM,1,5,`app-prop-value`,0),e&2){let e;j((e=t.root())?0:1,e)}},dependencies:[Mj],styles:[`[_nghost-%COMP%] { display: block; min-width: 0; } @@ -2226,7 +2226,7 @@ button.edit[_ngcontent-%COMP%] { .more[_ngcontent-%COMP%] { transition: none; } -}`]})};function wM(e,t){return e.length>t.length&&e.startsWith(`${t.slice(0,-1)},`)}var TM=class{sender;target={rpc:null,pageId:null,componentId:null};fetched=T(new Map);pushed=T({});open=T(new Set);loading=T(new Set);errors=T(new Map);limits=new Map;generation=0;constructor(e){this.sender=e}follow(e,t){let n=e.componentId===this.target.componentId&&e.pageId===this.target.pageId;this.target=e,n||(this.generation++,this.fetched.set(new Map),this.open.set(new Set),this.loading.set(new Set),this.errors.set(new Map),this.limits.clear()),this.pushed.set(t??{})}level(e,t){let n=tM(e,t),r=this.pushed();return Object.hasOwn(r,n)?r[n]:this.fetched().get(n)}isOpen(e,t){return this.open().has(tM(e,t))}toggle(e,t,n){let r=tM(e,t),i=new Set(this.open());if(i.has(r)){for(let e of i)(e===r||wM(e,r))&&i.delete(e);this.open.set(i),this.send({path:e,directive:t,forget:!0});return}i.add(r),this.open.set(i),n&&this.load(e,t,this.limits.get(r)??30)}more(e,t,n){let r=tM(e,t),i=Math.min(Bj,Math.max(n,this.limits.get(r)??0)+100);this.limits.set(r,i),this.load(e,t,i)}async read(e,t,n){return this.send({path:e,depth:t,limit:n})}async load(e,t,n){let r=tM(e,t),i=this.generation;this.loading.update(e=>new Set(e).add(r));let a=await this.send({path:e,directive:t,limit:n,watch:!0});i===this.generation&&(this.loading.update(e=>{let t=new Set(e);return t.delete(r),t}),this.errors.update(e=>{let t=new Map(e);return a.ok?t.delete(r):t.set(r,a.error??`The page did not read it.`),t}),a.ok&&this.fetched.update(e=>new Map(e).set(r,a.value)))}async send(e){if(this.sender){if(e.forget)return{ok:!0};let{directive:t,watch:n,...r}=e;try{return await this.sender(r)}catch{return{error:`The devtools server did not answer. Try again.`}}}let{rpc:t,pageId:n,componentId:r}=this.target;if(!t||!n||!r)return{error:`No live page to read from.`};let{directive:i,...a}=e;try{return await t.scope(`pangular`).rpc.call(`request-component-value`,{pageId:n,request:{id:r,...a,...i===void 0?{}:{directive:i}}})??{}}catch{return{error:`The devtools server did not answer. Try again.`}}}};function EM(e,t){if(e&1&&(R(0,`span`,1),K(1),z()),e&2){let e=W(2);D(),J(`: `,e.label())}}function DM(e,t){if(e&1&&(R(0,`span`,1),K(1),z()),e&2){let e=W(3);D(),J(`: `,e.label())}}function OM(e,t){if(e&1){let e=B();R(0,`button`,4),U(`click`,function(){return S(e),C(W(2).store(`log`))}),K(1,` Log to console `),A(2,DM,2,1,`span`,1),z()}if(e&2){let e=W(2);V(`disabled`,e.busy()||!e.rpc()||!e.pageId()),D(2),j(e.label()?2:-1)}}function kM(e,t){if(e&1){let e=B();R(0,`button`,0),U(`click`,function(){return S(e),C(W().store())}),K(1,` Store as global `),A(2,EM,2,1,`span`,1),z(),A(3,OM,3,2,`button`,2),R(4,`span`,3),K(5),z()}if(e&2){let e=W();V(`disabled`,e.busy()||!e.rpc()||!e.pageId()),D(2),j(e.label()?2:-1),D(),j(e.canLog()?3:-1),D(2),q(e.message())}}var AM=class e{rpc=$(null);pageId=$(null);target=$.required();label=$(``);canLog=$(!1);staticReport=X(()=>hT(this.rpc()));busy=T(!1);message=T(``);async store(e=`store`){let t=this.rpc(),n=this.pageId();if(t&&n){this.busy.set(!0),this.message.set(``);try{let r=await t.scope(`pangular`).rpc.call(`request-console-global`,{pageId:n,target:this.target(),...e===`log`?{mode:e}:{}}),i=e===`log`?r?.ok?`Logged in the page console.`:`Not logged.`:r?.ok&&r.name?`Stored as ${r.name}.`:`Not stored.`;this.message.set(r?.message||i)}catch{this.message.set(`Could not reach the page.`)}finally{this.busy.set(!1)}}}static ɵfac=function(t){return new(t||e)};static ɵcmp=O({type:e,selectors:[[`app-store-global`]],inputs:{rpc:[1,`rpc`],pageId:[1,`pageId`],target:[1,`target`],label:[1,`label`],canLog:[1,`canLog`]},decls:1,vars:1,consts:[[`type`,`button`,1,`store`,3,`click`,`disabled`],[1,`sr-only`],[`type`,`button`,1,`store`,`log`,3,`disabled`],[`role`,`status`,1,`status`],[`type`,`button`,1,`store`,`log`,3,`click`,`disabled`]],template:function(e,t){e&1&&A(0,kM,6,4),e&2&&j(t.staticReport()?-1:0)},styles:[`[_nghost-%COMP%] { +}`]})};function _M(e,t){return e.length>t.length&&e.startsWith(`${t.slice(0,-1)},`)}var vM=class{sender;target={rpc:null,pageId:null,componentId:null};fetched=T(new Map);pushed=T({});open=T(new Set);loading=T(new Set);errors=T(new Map);limits=new Map;generation=0;constructor(e){this.sender=e}follow(e,t){let n=e.componentId===this.target.componentId&&e.pageId===this.target.pageId;this.target=e,n||(this.generation++,this.fetched.set(new Map),this.open.set(new Set),this.loading.set(new Set),this.errors.set(new Map),this.limits.clear()),this.pushed.set(t??{})}level(e,t){let n=Jj(e,t),r=this.pushed();return Object.hasOwn(r,n)?r[n]:this.fetched().get(n)}isOpen(e,t){return this.open().has(Jj(e,t))}toggle(e,t,n){let r=Jj(e,t),i=new Set(this.open());if(i.has(r)){for(let e of i)(e===r||_M(e,r))&&i.delete(e);this.open.set(i),this.send({path:e,directive:t,forget:!0});return}i.add(r),this.open.set(i),n&&this.load(e,t,this.limits.get(r)??30)}more(e,t,n){let r=Jj(e,t),i=Math.min(Nj,Math.max(n,this.limits.get(r)??0)+100);this.limits.set(r,i),this.load(e,t,i)}async read(e,t,n){return this.send({path:e,depth:t,limit:n})}async load(e,t,n){let r=Jj(e,t),i=this.generation;this.loading.update(e=>new Set(e).add(r));let a=await this.send({path:e,directive:t,limit:n,watch:!0});i===this.generation&&(this.loading.update(e=>{let t=new Set(e);return t.delete(r),t}),this.errors.update(e=>{let t=new Map(e);return a.ok?t.delete(r):t.set(r,a.error??`The page did not read it.`),t}),a.ok&&this.fetched.update(e=>new Map(e).set(r,a.value)))}async send(e){if(this.sender){if(e.forget)return{ok:!0};let{directive:t,watch:n,...r}=e;try{return await this.sender(r)}catch{return{error:`The devtools server did not answer. Try again.`}}}let{rpc:t,pageId:n,componentId:r}=this.target;if(!t||!n||!r)return{error:`No live page to read from.`};let{directive:i,...a}=e;try{return await t.scope(`pangular`).rpc.call(`request-component-value`,{pageId:n,request:{id:r,...a,...i===void 0?{}:{directive:i}}})??{}}catch{return{error:`The devtools server did not answer. Try again.`}}}};function yM(e,t){if(e&1&&(R(0,`span`,1),K(1),z()),e&2){let e=W(2);D(),J(`: `,e.label())}}function bM(e,t){if(e&1&&(R(0,`span`,1),K(1),z()),e&2){let e=W(3);D(),J(`: `,e.label())}}function xM(e,t){if(e&1){let e=B();R(0,`button`,4),U(`click`,function(){return S(e),C(W(2).store(`log`))}),K(1,` Log to console `),A(2,bM,2,1,`span`,1),z()}if(e&2){let e=W(2);V(`disabled`,e.busy()||!e.rpc()||!e.pageId()),D(2),j(e.label()?2:-1)}}function SM(e,t){if(e&1){let e=B();R(0,`button`,0),U(`click`,function(){return S(e),C(W().store())}),K(1,` Store as global `),A(2,yM,2,1,`span`,1),z(),A(3,xM,3,2,`button`,2),R(4,`span`,3),K(5),z()}if(e&2){let e=W();V(`disabled`,e.busy()||!e.rpc()||!e.pageId()),D(2),j(e.label()?2:-1),D(),j(e.canLog()?3:-1),D(2),q(e.message())}}var CM=class e{rpc=$(null);pageId=$(null);target=$.required();label=$(``);canLog=$(!1);staticReport=X(()=>cT(this.rpc()));busy=T(!1);message=T(``);async store(e=`store`){let t=this.rpc(),n=this.pageId();if(t&&n){this.busy.set(!0),this.message.set(``);try{let r=await t.scope(`pangular`).rpc.call(`request-console-global`,{pageId:n,target:this.target(),...e===`log`?{mode:e}:{}}),i=e===`log`?r?.ok?`Logged in the page console.`:`Not logged.`:r?.ok&&r.name?`Stored as ${r.name}.`:`Not stored.`;this.message.set(r?.message||i)}catch{this.message.set(`Could not reach the page.`)}finally{this.busy.set(!1)}}}static ɵfac=function(t){return new(t||e)};static ɵcmp=O({type:e,selectors:[[`app-store-global`]],inputs:{rpc:[1,`rpc`],pageId:[1,`pageId`],target:[1,`target`],label:[1,`label`],canLog:[1,`canLog`]},decls:1,vars:1,consts:[[`type`,`button`,1,`store`,3,`click`,`disabled`],[1,`sr-only`],[`type`,`button`,1,`store`,`log`,3,`disabled`],[`role`,`status`,1,`status`],[`type`,`button`,1,`store`,`log`,3,`click`,`disabled`]],template:function(e,t){e&1&&A(0,SM,6,4),e&2&&j(t.staticReport()?-1:0)},styles:[`[_nghost-%COMP%] { display: inline-flex; flex-wrap: wrap; align-items: center; @@ -2275,7 +2275,7 @@ button.edit[_ngcontent-%COMP%] { .status[_ngcontent-%COMP%]:empty { display: none; -}`]})},jM=(e,t)=>t.block.id,MM=(e,t)=>t.kind,NM=(e,t)=>t.id;function PM(e,t){if(e&1&&K(0),e&2){let e=W().$implicit;J(` `,e.label,` `)}}function FM(e,t){if(e&1&&(K(0),R(1,`span`,18),K(2),z()),e&2){let e=W().$implicit;J(` `,e.kind,` `),D(2),J(``,e.seconds,`s`)}}function IM(e,t){if(e&1&&(R(0,`span`,9),A(1,PM,1,1)(2,FM,3,2),z()),e&2){let e=t.$implicit;i_(`note-`+e.kind),k(`title`,e.text),D(),j(e.seconds===void 0?1:2)}}function LM(e,t){if(e&1&&(R(0,`span`,9),K(1),z()),e&2){let e=W().$implicit;k(`title`,e.block.hydratedAt===void 0?`The block hydrated before the devtools attached to the page.`:null),D(),q(e.hydrated)}}function RM(e,t){e&1&&(R(0,`span`,9),K(1,`@error block`),z())}function zM(e,t){if(e&1&&(R(0,`span`,10),K(1),z()),e&2){let e=W().$implicit;D(),q(e.timings)}}function BM(e,t){e&1&&(R(0,`span`,11),K(1,`mismatch`),z())}function VM(e,t){if(e&1&&(R(0,`dt`),K(1,`Template of`),z(),R(2,`dd`,19),K(3),z()),e&2){let e=t;D(3),Y(``,e.name,` <`,e.tag,`>`)}}function HM(e,t){if(e&1&&(R(0,`dt`),K(1,`In this state since`),z(),R(2,`dd`),K(3),z()),e&2){let e=W(2).$implicit,t=W(2);D(3),q(t.clock(e.block.since))}}function UM(e,t){if(e&1&&(R(0,`dt`),K(1,`Hydrated`),z(),R(2,`dd`),K(3),z()),e&2){let e=W(2).$implicit,t=W(2);D(3),J(` `,e.block.hydratedAt===void 0?`Before the devtools attached`:t.clock(e.block.hydratedAt),` `)}}function WM(e,t){if(e&1&&(R(0,`span`,23),K(1),z()),e&2){let e=W().$implicit;D(),q(e.hydration)}}function GM(e,t){if(e&1&&(R(0,`li`)(1,`span`,22),K(2),z(),R(3,`span`,19),K(4),z(),A(5,WM,2,1,`span`,23),z()),e&2){let e=t.$implicit,n=W(5);D(2),q(n.clock(e.at)),D(2),q(e.state),D(),j(e.hydration===`not-configured`?-1:5)}}function KM(e,t){if(e&1&&(R(0,`h3`,20),K(1,`Transitions`),z(),R(2,`ol`,21),M(3,GM,6,3,`li`,null,tg),z()),e&2){let e=W(2).$implicit;D(3),N(e.block.transitions)}}function qM(e,t){if(e&1){let e=B();R(0,`li`)(1,`button`,25),U(`click`,function(){let t=S(e).$implicit;return C(W(5).showNode.emit(t.id))}),K(2),R(3,`span`,19),K(4),z()()()}if(e&2){let e=t.$implicit;D(2),J(` Show `,e.name,` `),D(2),J(`<`,e.tag,`>`)}}function JM(e,t){if(e&1&&(R(0,`h3`,20),K(1,`Hydration mismatches`),z(),R(2,`ul`,24),M(3,qM,5,2,`li`,null,NM),z()),e&2){let e=W(2).$implicit;D(3),N(e.mismatches)}}function YM(e,t){if(e&1&&(R(0,`div`,17)(1,`dl`)(2,`dt`),K(3,`Block`),z(),R(4,`dd`,19),K(5),z(),A(6,VM,4,2),A(7,HM,4,1),A(8,UM,4,1),R(9,`dt`),K(10,`Root elements`),z(),R(11,`dd`),K(12),z(),R(13,`dt`),K(14,`Triggers`),z(),R(15,`dd`,19),K(16),z()(),A(17,KM,5,0),A(18,JM,5,0),z()),e&2){let e,t=W().$implicit;V(`id`,`defer-detail-`+t.block.id),D(5),q(t.block.id),D(),j((e=t.block.owner)?6:-1,e),D(),j(t.block.since?7:-1),D(),j(t.block.hydration===`hydrated`?8:-1),D(4),q(t.block.rootIds.length||`None rendered`),D(4),q(t.block.triggers.join(`, `)||`None`),D(),j(t.block.transitions?.length?17:-1),D(),j(t.mismatches.length?18:-1)}}function XM(e,t){if(e&1){let e=B();R(0,`li`,4)(1,`button`,5),U(`click`,function(){let t=S(e).$implicit;return C(W(2).showOwner.emit(t.block))})(`focus`,function(){let t=S(e).$implicit;return C(W(2).highlight.emit(t.block))})(`blur`,function(){return S(e),C(W(2).highlight.emit(null))})(`mouseenter`,function(){let t=S(e).$implicit;return C(W(2).highlight.emit(t.block))})(`mouseleave`,function(){return S(e),C(W(2).highlight.emit(null))}),R(2,`span`,6),K(3),z(),R(4,`span`,7),K(5),z(),M(6,IM,3,4,`span`,8,MM),A(8,LM,2,2,`span`,9),A(9,RM,2,0,`span`,9),A(10,zM,2,1,`span`,10),A(11,BM,2,0,`span`,11),R(12,`span`,12),K(13),z()(),R(14,`button`,13),U(`click`,function(){let t=S(e).$implicit;return C(W(2).toggle(t.block.id))}),w(),R(15,`svg`,14),pg(16,`path`,15),z(),ps(),R(17,`span`,16),K(18),z()(),A(19,YM,19,9,`div`,17),z()}if(e&2){let e=t.$implicit,n=W(2);D(),k(`aria-disabled`,e.block.owner?null:`true`),D(2),q(e.block.owner?.name??`Unknown component`),D(),i_(`defer-state-`+e.block.state),D(),q(e.block.state),D(),N(e.notes),D(2),j(e.hydrated?8:-1),D(),j(e.block.hasErrorBlock?9:-1),D(),j(e.timings?10:-1),D(),j(e.mismatches.length?11:-1),D(2),q(e.block.triggers.join(`, `)||`no triggers`),D(),k(`aria-expanded`,n.isOpen(e.block.id))(`aria-controls`,n.isOpen(e.block.id)?`defer-detail-`+e.block.id:null),D(4),J(`Details of the block in `,e.block.owner?.name??`an unknown component`),D(),j(n.isOpen(e.block.id)?19:-1)}}function ZM(e,t){if(e&1&&(R(0,`section`,0)(1,`h2`,1),K(2,` Defer blocks `),R(3,`span`,2),K(4),z()(),R(5,`ul`,3),M(6,XM,20,14,`li`,4,jM),z()()),e&2){let e=W();D(4),Y(``,e.rows().length,``,e.truncated()?`+`:``),D(2),N(e.rows())}}function QM(e){return e<1e3?`${e}ms`:`${Number((e/1e3).toFixed(2))}s`}function $M(e){let t=[],n=e.placeholder?.minimumTime;n!=null&&t.push(`placeholder min ${QM(n)}`);let r=[e.loading?.afterTime==null?``:`after ${QM(e.loading.afterTime)}`,e.loading?.minimumTime==null?``:`min ${QM(e.loading.minimumTime)}`].filter(Boolean);return r.length&&t.push(`loading ${r.join(`, `)}`),t.join(` · `)}var eN=class e{blocks=$([]);truncated=$(!1);clockOffset=$(0);showOwner=uv();mismatches=$([]);showNode=uv();open=T(new Set);highlight=uv();now=T(Date.now());waiting=X(()=>this.blocks().some(e=>!!e.since&&(e.state===`placeholder`||e.state===`initial`)));rows=X(()=>{let e=this.now()-this.clockOffset();return this.blocks().map(t=>({block:t,notes:iT({...t,since:t.since||e},e),timings:$M(t),mismatches:this.mismatches().filter(e=>t.rootIds.includes(e.id)),hydrated:t.hydration===`hydrated`?tT(t):``}))});isOpen(e){return this.open().has(e)}toggle(e){this.open.update(t=>{let n=new Set(t);return n.delete(e)||n.add(e),n})}clock(e){return JE(e)}constructor(){let e,t=()=>{clearInterval(e),e=void 0};E(()=>{if(!this.waiting())return t();e===void 0&&(this.now.set(Date.now()),e=setInterval(()=>this.now.set(Date.now()),1e3))}),x(Cs).onDestroy(t)}static ɵfac=function(t){return new(t||e)};static ɵcmp=O({type:e,selectors:[[`app-defer-blocks`]],inputs:{blocks:[1,`blocks`],truncated:[1,`truncated`],clockOffset:[1,`clockOffset`],mismatches:[1,`mismatches`]},outputs:{showOwner:`showOwner`,showNode:`showNode`,highlight:`highlight`},decls:1,vars:1,consts:[[`aria-labelledby`,`ct-defer-title`,1,`defer`],[`id`,`ct-defer-title`,1,`defer-title`],[1,`pill`],[1,`defer-list`],[1,`defer-item`],[`type`,`button`,1,`defer-row`,3,`click`,`focus`,`blur`,`mouseenter`,`mouseleave`],[1,`name`,`mono`],[1,`defer-state`],[1,`flag`,3,`class`],[1,`flag`],[1,`timings`],[1,`flag`,`note-failed`],[1,`triggers`,`mono`],[`type`,`button`,1,`defer-toggle`,3,`click`],[`viewBox`,`0 0 24 24`,`aria-hidden`,`true`],[`d`,`m9 6 6 6-6 6`],[1,`sr-only`],[1,`defer-detail`,3,`id`],[`aria-hidden`,`true`],[1,`mono`],[1,`detail-label`],[1,`transitions`],[1,`when`],[1,`muted`],[1,`mismatch-links`],[`type`,`button`,3,`click`]],template:function(e,t){e&1&&A(0,ZM,8,2,`section`,0),e&2&&j(t.rows().length?0:-1)},styles:[`[_nghost-%COMP%] { +}`]})},wM=(e,t)=>t.block.id,TM=(e,t)=>t.kind,EM=(e,t)=>t.id;function DM(e,t){if(e&1&&K(0),e&2){let e=W().$implicit;J(` `,e.label,` `)}}function OM(e,t){if(e&1&&(K(0),R(1,`span`,18),K(2),z()),e&2){let e=W().$implicit;J(` `,e.kind,` `),D(2),J(``,e.seconds,`s`)}}function kM(e,t){if(e&1&&(R(0,`span`,9),A(1,DM,1,1)(2,OM,3,2),z()),e&2){let e=t.$implicit;n_(`note-`+e.kind),k(`title`,e.text),D(),j(e.seconds===void 0?1:2)}}function AM(e,t){if(e&1&&(R(0,`span`,9),K(1),z()),e&2){let e=W().$implicit;k(`title`,e.block.hydratedAt===void 0?`The block hydrated before the devtools attached to the page.`:null),D(),q(e.hydrated)}}function jM(e,t){e&1&&(R(0,`span`,9),K(1,`@error block`),z())}function MM(e,t){if(e&1&&(R(0,`span`,10),K(1),z()),e&2){let e=W().$implicit;D(),q(e.timings)}}function NM(e,t){e&1&&(R(0,`span`,11),K(1,`mismatch`),z())}function PM(e,t){if(e&1&&(R(0,`dt`),K(1,`Template of`),z(),R(2,`dd`,19),K(3),z()),e&2){let e=t;D(3),Y(``,e.name,` <`,e.tag,`>`)}}function FM(e,t){if(e&1&&(R(0,`dt`),K(1,`In this state since`),z(),R(2,`dd`),K(3),z()),e&2){let e=W(2).$implicit,t=W(2);D(3),q(t.clock(e.block.since))}}function IM(e,t){if(e&1&&(R(0,`dt`),K(1,`Hydrated`),z(),R(2,`dd`),K(3),z()),e&2){let e=W(2).$implicit,t=W(2);D(3),J(` `,e.block.hydratedAt===void 0?`Before the devtools attached`:t.clock(e.block.hydratedAt),` `)}}function LM(e,t){if(e&1&&(R(0,`span`,23),K(1),z()),e&2){let e=W().$implicit;D(),q(e.hydration)}}function RM(e,t){if(e&1&&(R(0,`li`)(1,`span`,22),K(2),z(),R(3,`span`,19),K(4),z(),A(5,LM,2,1,`span`,23),z()),e&2){let e=t.$implicit,n=W(5);D(2),q(n.clock(e.at)),D(2),q(e.state),D(),j(e.hydration===`not-configured`?-1:5)}}function zM(e,t){if(e&1&&(R(0,`h3`,20),K(1,`Transitions`),z(),R(2,`ol`,21),M(3,RM,6,3,`li`,null,$h),z()),e&2){let e=W(2).$implicit;D(3),N(e.block.transitions)}}function BM(e,t){if(e&1){let e=B();R(0,`li`)(1,`button`,25),U(`click`,function(){let t=S(e).$implicit;return C(W(5).showNode.emit(t.id))}),K(2),R(3,`span`,19),K(4),z()()()}if(e&2){let e=t.$implicit;D(2),J(` Show `,e.name,` `),D(2),J(`<`,e.tag,`>`)}}function VM(e,t){if(e&1&&(R(0,`h3`,20),K(1,`Hydration mismatches`),z(),R(2,`ul`,24),M(3,BM,5,2,`li`,null,EM),z()),e&2){let e=W(2).$implicit;D(3),N(e.mismatches)}}function HM(e,t){if(e&1&&(R(0,`div`,17)(1,`dl`)(2,`dt`),K(3,`Block`),z(),R(4,`dd`,19),K(5),z(),A(6,PM,4,2),A(7,FM,4,1),A(8,IM,4,1),R(9,`dt`),K(10,`Root elements`),z(),R(11,`dd`),K(12),z(),R(13,`dt`),K(14,`Triggers`),z(),R(15,`dd`,19),K(16),z()(),A(17,zM,5,0),A(18,VM,5,0),z()),e&2){let e,t=W().$implicit;V(`id`,`defer-detail-`+t.block.id),D(5),q(t.block.id),D(),j((e=t.block.owner)?6:-1,e),D(),j(t.block.since?7:-1),D(),j(t.block.hydration===`hydrated`?8:-1),D(4),q(t.block.rootIds.length||`None rendered`),D(4),q(t.block.triggers.join(`, `)||`None`),D(),j(t.block.transitions?.length?17:-1),D(),j(t.mismatches.length?18:-1)}}function UM(e,t){if(e&1){let e=B();R(0,`li`,4)(1,`button`,5),U(`click`,function(){let t=S(e).$implicit;return C(W(2).showOwner.emit(t.block))})(`focus`,function(){let t=S(e).$implicit;return C(W(2).highlight.emit(t.block))})(`blur`,function(){return S(e),C(W(2).highlight.emit(null))})(`mouseenter`,function(){let t=S(e).$implicit;return C(W(2).highlight.emit(t.block))})(`mouseleave`,function(){return S(e),C(W(2).highlight.emit(null))}),R(2,`span`,6),K(3),z(),R(4,`span`,7),K(5),z(),M(6,kM,3,4,`span`,8,TM),A(8,AM,2,2,`span`,9),A(9,jM,2,0,`span`,9),A(10,MM,2,1,`span`,10),A(11,NM,2,0,`span`,11),R(12,`span`,12),K(13),z()(),R(14,`button`,13),U(`click`,function(){let t=S(e).$implicit;return C(W(2).toggle(t.block.id))}),w(),R(15,`svg`,14),dg(16,`path`,15),z(),fs(),R(17,`span`,16),K(18),z()(),A(19,HM,19,9,`div`,17),z()}if(e&2){let e=t.$implicit,n=W(2);D(),k(`aria-disabled`,e.block.owner?null:`true`),D(2),q(e.block.owner?.name??`Unknown component`),D(),n_(`defer-state-`+e.block.state),D(),q(e.block.state),D(),N(e.notes),D(2),j(e.hydrated?8:-1),D(),j(e.block.hasErrorBlock?9:-1),D(),j(e.timings?10:-1),D(),j(e.mismatches.length?11:-1),D(2),q(e.block.triggers.join(`, `)||`no triggers`),D(),k(`aria-expanded`,n.isOpen(e.block.id))(`aria-controls`,n.isOpen(e.block.id)?`defer-detail-`+e.block.id:null),D(4),J(`Details of the block in `,e.block.owner?.name??`an unknown component`),D(),j(n.isOpen(e.block.id)?19:-1)}}function WM(e,t){if(e&1&&(R(0,`section`,0)(1,`h2`,1),K(2,` Defer blocks `),R(3,`span`,2),K(4),z()(),R(5,`ul`,3),M(6,UM,20,14,`li`,4,wM),z()()),e&2){let e=W();D(4),Y(``,e.rows().length,``,e.truncated()?`+`:``),D(2),N(e.rows())}}function GM(e){return e<1e3?`${e}ms`:`${Number((e/1e3).toFixed(2))}s`}function KM(e){let t=[],n=e.placeholder?.minimumTime;n!=null&&t.push(`placeholder min ${GM(n)}`);let r=[e.loading?.afterTime==null?``:`after ${GM(e.loading.afterTime)}`,e.loading?.minimumTime==null?``:`min ${GM(e.loading.minimumTime)}`].filter(Boolean);return r.length&&t.push(`loading ${r.join(`, `)}`),t.join(` · `)}var qM=class e{blocks=$([]);truncated=$(!1);clockOffset=$(0);showOwner=cv();mismatches=$([]);showNode=cv();open=T(new Set);highlight=cv();now=T(Date.now());waiting=X(()=>this.blocks().some(e=>!!e.since&&(e.state===`placeholder`||e.state===`initial`)));rows=X(()=>{let e=this.now()-this.clockOffset();return this.blocks().map(t=>({block:t,notes:Zw({...t,since:t.since||e},e),timings:KM(t),mismatches:this.mismatches().filter(e=>t.rootIds.includes(e.id)),hydrated:t.hydration===`hydrated`?Jw(t):``}))});isOpen(e){return this.open().has(e)}toggle(e){this.open.update(t=>{let n=new Set(t);return n.delete(e)||n.add(e),n})}clock(e){return VE(e)}constructor(){let e,t=()=>{clearInterval(e),e=void 0};E(()=>{if(!this.waiting())return t();e===void 0&&(this.now.set(Date.now()),e=setInterval(()=>this.now.set(Date.now()),1e3))}),x(Ss).onDestroy(t)}static ɵfac=function(t){return new(t||e)};static ɵcmp=O({type:e,selectors:[[`app-defer-blocks`]],inputs:{blocks:[1,`blocks`],truncated:[1,`truncated`],clockOffset:[1,`clockOffset`],mismatches:[1,`mismatches`]},outputs:{showOwner:`showOwner`,showNode:`showNode`,highlight:`highlight`},decls:1,vars:1,consts:[[`aria-labelledby`,`ct-defer-title`,1,`defer`],[`id`,`ct-defer-title`,1,`defer-title`],[1,`pill`],[1,`defer-list`],[1,`defer-item`],[`type`,`button`,1,`defer-row`,3,`click`,`focus`,`blur`,`mouseenter`,`mouseleave`],[1,`name`,`mono`],[1,`defer-state`],[1,`flag`,3,`class`],[1,`flag`],[1,`timings`],[1,`flag`,`note-failed`],[1,`triggers`,`mono`],[`type`,`button`,1,`defer-toggle`,3,`click`],[`viewBox`,`0 0 24 24`,`aria-hidden`,`true`],[`d`,`m9 6 6 6-6 6`],[1,`sr-only`],[1,`defer-detail`,3,`id`],[`aria-hidden`,`true`],[1,`mono`],[1,`detail-label`],[1,`transitions`],[1,`when`],[1,`muted`],[1,`mismatch-links`],[`type`,`button`,3,`click`]],template:function(e,t){e&1&&A(0,WM,8,2,`section`,0),e&2&&j(t.rows().length?0:-1)},styles:[`[_nghost-%COMP%] { display: block; } @@ -2513,7 +2513,7 @@ button.edit[_ngcontent-%COMP%] { min-width: 0; text-overflow: ellipsis; white-space: nowrap; -}`]})},tN=(e,t)=>t.id;function nN(e,t){if(e&1&&(F(0,`p`,4),K(1),I()),e&2){let e=W(2);D(),J(`The page has more @for blocks than the `,e.length,` listed.`)}}function rN(e,t){e&1&&(F(0,`span`,9),K(1,`@empty showing`),I())}function iN(e,t){e&1&&(F(0,`span`,10),K(1,`@empty`),I())}function aN(e,t){e&1&&(F(0,`span`,10),K(1,`renders nothing`),I())}function oN(e,t){if(e&1){let e=B();F(0,`li`)(1,`button`,6),H(`click`,function(){let t=S(e).$implicit;return C(W(3).showOwner.emit(t))})(`focus`,function(){let t=S(e).$implicit,n=W(3);return C(n.highlight.emit(n.target(t)))})(`blur`,function(){return S(e),C(W(3).highlight.emit(null))})(`mouseenter`,function(){let t=S(e).$implicit,n=W(3);return C(n.highlight.emit(n.target(t)))})(`mouseleave`,function(){return S(e),C(W(3).highlight.emit(null))}),F(2,`span`,7),K(3),I(),F(4,`span`,8),K(5),I(),A(6,rN,2,0,`span`,9)(7,iN,2,0,`span`,10)(8,aN,2,0,`span`,10),F(9,`span`,11),K(10),I()()()}if(e&2){let e=t.$implicit,n=W(3);D(),k(`aria-disabled`,e.owner?null:`true`),D(2),q(e.owner?.name??`Unknown component`),D(2),Y(` `,e.count,` `,e.count===1?`item`:`items`,` `),D(),j(e.showingEmpty?6:e.hasEmptyBlock?7:e.count===0?8:-1),D(4),q(n.trackLabel(e))}}function sN(e,t){if(e&1&&(F(0,`section`,1)(1,`h2`,2),K(2,` @for blocks `),F(3,`span`,3),K(4),I()(),A(5,nN,2,1,`p`,4),F(6,`ul`,5),M(7,oN,11,6,`li`,null,tN),I()()),e&2){let e=W(),t=W();D(4),q(t.truncated()?e.length+`+`:e.length),D(),j(t.truncated()?5:-1),D(2),N(e)}}function cN(e,t){e&1&&A(0,sN,9,2,`section`,1),e&2&&j(t.length?0:-1)}function lN(e,t){e&1&&L(0,`app-angular-unavailable`,0),e&2&&P(`page`,W().angular())}var uN={$index:`track $index`,item:`track item`,function:`track expression`},dN=class e{blocks=$(void 0);truncated=$(!1);supported=$(null);angular=$(null);showOwner=uv();highlight=uv();target(e){return e.rootIds[0]??e.owner?.id??null}trackLabel(e){return e.track?uN[e.track]:`track unknown`}static ɵfac=function(t){return new(t||e)};static ɵcmp=O({type:e,selectors:[[`app-for-blocks`]],inputs:{blocks:[1,`blocks`],truncated:[1,`truncated`],supported:[1,`supported`],angular:[1,`angular`]},outputs:{showOwner:`showOwner`,highlight:`highlight`},decls:2,vars:1,consts:[[`capability`,`forBlocks`,`missing`,``,`compact`,``,1,`for`,3,`page`],[`aria-labelledby`,`ct-for-title`,1,`for`],[`id`,`ct-for-title`,1,`for-title`],[1,`pill`],[1,`note`],[1,`for-list`],[`type`,`button`,1,`for-row`,3,`click`,`focus`,`blur`,`mouseenter`,`mouseleave`],[1,`name`,`mono`],[1,`count`],[1,`flag`,`empty`],[1,`flag`],[1,`track`,`mono`]],template:function(e,t){if(e&1&&A(0,cN,1,1)(1,lN,1,1,`app-angular-unavailable`,0),e&2){let e;j((e=t.blocks())?0:t.supported()===!1?1:-1,e)}},dependencies:[vD],styles:[`[_nghost-%COMP%] { +}`]})},JM=(e,t)=>t.id;function YM(e,t){if(e&1&&(F(0,`p`,4),K(1),I()),e&2){let e=W(2);D(),J(`The page has more @for blocks than the `,e.length,` listed.`)}}function XM(e,t){e&1&&(F(0,`span`,9),K(1,`@empty showing`),I())}function ZM(e,t){e&1&&(F(0,`span`,10),K(1,`@empty`),I())}function QM(e,t){e&1&&(F(0,`span`,10),K(1,`renders nothing`),I())}function $M(e,t){if(e&1){let e=B();F(0,`li`)(1,`button`,6),H(`click`,function(){let t=S(e).$implicit;return C(W(3).showOwner.emit(t))})(`focus`,function(){let t=S(e).$implicit,n=W(3);return C(n.highlight.emit(n.target(t)))})(`blur`,function(){return S(e),C(W(3).highlight.emit(null))})(`mouseenter`,function(){let t=S(e).$implicit,n=W(3);return C(n.highlight.emit(n.target(t)))})(`mouseleave`,function(){return S(e),C(W(3).highlight.emit(null))}),F(2,`span`,7),K(3),I(),F(4,`span`,8),K(5),I(),A(6,XM,2,0,`span`,9)(7,ZM,2,0,`span`,10)(8,QM,2,0,`span`,10),F(9,`span`,11),K(10),I()()()}if(e&2){let e=t.$implicit,n=W(3);D(),k(`aria-disabled`,e.owner?null:`true`),D(2),q(e.owner?.name??`Unknown component`),D(2),Y(` `,e.count,` `,e.count===1?`item`:`items`,` `),D(),j(e.showingEmpty?6:e.hasEmptyBlock?7:e.count===0?8:-1),D(4),q(n.trackLabel(e))}}function eN(e,t){if(e&1&&(F(0,`section`,1)(1,`h2`,2),K(2,` @for blocks `),F(3,`span`,3),K(4),I()(),A(5,YM,2,1,`p`,4),F(6,`ul`,5),M(7,$M,11,6,`li`,null,JM),I()()),e&2){let e=W(),t=W();D(4),q(t.truncated()?e.length+`+`:e.length),D(),j(t.truncated()?5:-1),D(2),N(e)}}function tN(e,t){e&1&&A(0,eN,9,2,`section`,1),e&2&&j(t.length?0:-1)}function nN(e,t){e&1&&L(0,`app-angular-unavailable`,0),e&2&&P(`page`,W().angular())}var rN={$index:`track $index`,item:`track item`,function:`track expression`},iN=class e{blocks=$(void 0);truncated=$(!1);supported=$(null);angular=$(null);showOwner=cv();highlight=cv();target(e){return e.rootIds[0]??e.owner?.id??null}trackLabel(e){return e.track?rN[e.track]:`track unknown`}static ɵfac=function(t){return new(t||e)};static ɵcmp=O({type:e,selectors:[[`app-for-blocks`]],inputs:{blocks:[1,`blocks`],truncated:[1,`truncated`],supported:[1,`supported`],angular:[1,`angular`]},outputs:{showOwner:`showOwner`,highlight:`highlight`},decls:2,vars:1,consts:[[`capability`,`forBlocks`,`missing`,``,`compact`,``,1,`for`,3,`page`],[`aria-labelledby`,`ct-for-title`,1,`for`],[`id`,`ct-for-title`,1,`for-title`],[1,`pill`],[1,`note`],[1,`for-list`],[`type`,`button`,1,`for-row`,3,`click`,`focus`,`blur`,`mouseenter`,`mouseleave`],[1,`name`,`mono`],[1,`count`],[1,`flag`,`empty`],[1,`flag`],[1,`track`,`mono`]],template:function(e,t){if(e&1&&A(0,tN,1,1)(1,nN,1,1,`app-angular-unavailable`,0),e&2){let e;j((e=t.blocks())?0:t.supported()===!1?1:-1,e)}},dependencies:[dD],styles:[`[_nghost-%COMP%] { display: block; } @@ -2631,7 +2631,7 @@ button.edit[_ngcontent-%COMP%] { min-width: 0; text-overflow: ellipsis; white-space: nowrap; -}`]})},fN=(e,t)=>t.id;function pN(e,t){if(e&1&&(F(0,`p`,11),K(1),I(),F(2,`h3`,7),K(3,`Still retained`),I(),F(4,`p`,6),K(5,` In a development build, Angular's DI debug data keeps every destroyed component in memory, so Pangular can't tell a leak from that. Check retainers in the Chrome DevTools Memory panel: take a heap snapshot after a few navigations, search for the class and look for a retainer other than Angular's DI debug records. Open subscriptions after destroy are still tracked below. `),I()),e&2){let e=W(),t=W();D(),q(t.plural(e.navigations,`navigation`))}}function mN(e,t){e&1&&(F(0,`p`,6),K(1,` This page cannot track destroyed components. It needs WeakRef, FinalizationRegistry and the Angular debug API of a development build. `),I())}function hN(e,t){if(e&1&&(F(0,`span`,18),K(1),I()),e&2){let e=W().$implicit,t=W(4);D(),q(t.plural(e.subscriptions,`open subscription`))}}function gN(e,t){if(e&1&&(F(0,`li`,13)(1,`span`,14),K(2),I(),F(3,`span`,15),K(4),I(),F(5,`span`,16),K(6),I(),F(7,`span`,17),K(8),I(),A(9,hN,2,1,`span`,18),I()),e&2){let e=t.$implicit,n=W(4);D(2),q(e.name),D(2),q(e.route||`/`),D(2),J(``,n.plural(e.navigations,`navigation`),` ago`),D(2),q(n.ageOf(e)),D(),j(e.subscriptions?9:-1)}}function _N(e,t){if(e&1&&(F(0,`p`,6),K(1),I(),F(2,`ul`,12),M(3,gN,10,5,`li`,13,fN),I()),e&2){let e=W(3);D(),Y(` Destroyed, yet still in memory after at least `,e.minNavigations,` navigations and `,e.minSeconds,` seconds. Take a heap snapshot, search for the class and read its retainers. `),D(2),N(e.retained().slice(0,e.shown))}}function vN(e,t){e&1&&(F(0,`p`,6),K(1,`No destroyed component is still in memory after a few navigations.`),I())}function yN(e,t){if(e&1&&(F(0,`p`,6),K(1),F(2,`span`,19),K(3),I(),K(4,`. Navigate a few times to see whether they stay. `),I()),e&2){let e=W(3);D(),J(` `,e.plural(e.recent().length,`instance`),` destroyed recently and not collected yet: `),D(2),q(e.names(e.recent()))}}function bN(e,t){if(e&1&&(A(0,mN,2,0,`p`,6),F(1,`p`,11),K(2),I(),F(3,`h3`,7),K(4,` Still retained `),F(5,`span`,8),K(6),I()(),A(7,_N,5,2)(8,vN,2,0,`p`,6),A(9,yN,5,2,`p`,6)),e&2){let e=W(),t=W();j(e.support.retention?-1:0),D(2),k_(` `,t.plural(e.navigations,`navigation`),` · `,t.retained().length,` still retained · `,t.plural(e.totals.collected,`instance`),` collected `),D(4),q(t.retained().length),D(),j(t.retained().length?7:8),D(2),j(t.recent().length?9:-1)}}function xN(e,t){if(e&1&&(F(0,`p`,6),K(1,` Off the page but not destroyed (detached views, such as a route reuse cache): `),F(2,`span`,19),K(3),I(),K(4,`. `),I()),e&2){let e=W(2);D(3),q(e.names(e.detached()))}}function SN(e,t){if(e&1&&(F(0,`span`,8),K(1),I()),e&2){let e=W();D(),q(e.subscriptions.length)}}function CN(e,t){if(e&1&&(F(0,`span`,15),K(1),I()),e&2){let e=W().$implicit;D(),q(e.source)}}function wN(e,t){if(e&1&&(F(0,`li`,13)(1,`span`,14),K(2),I(),F(3,`span`,16),K(4),I(),F(5,`span`,18),K(6),I(),A(7,CN,2,1,`span`,15),I()),e&2){let e=t.$implicit;D(2),q(e.name),D(2),J(``,e.count,` open`),D(2),J(` `,e.reason===`instance-destroyed`?`instance destroyed`:`no instance left`,` `),D(),j(e.source?7:-1)}}function TN(e,t){if(e&1&&(F(0,`p`,6),K(1,` Still open although the component that made them is gone. Tear them down with takeUntilDestroyed(), DestroyRef.onDestroy or the async pipe. `),I(),F(2,`ul`,12),M(3,wN,8,4,`li`,13,tg),I()),e&2){let e=W(2),t=W();D(3),N(e.subscriptions.slice(0,t.shown))}}function EN(e,t){e&1&&(F(0,`p`,6),K(1,`No subscription is still open after its component went away.`),I())}function DN(e,t){e&1&&(F(0,`p`,6),K(1,` Subscriptions are tied to component classes only; Angular 20 profiler hooks tie them to instances. `),I())}function ON(e,t){if(e&1&&(A(0,TN,5,0)(1,EN,2,0,`p`,6),A(2,DN,2,0,`p`,6)),e&2){let e=W();j(+!e.subscriptions.length),D(2),j(e.support.instances?-1:2)}}function kN(e,t){e&1&&(F(0,`p`,9),K(1,` Tracking could not start: the page has no RxJS the overlay can load. `),I())}function AN(e,t){e&1&&(F(0,`p`,6),K(1,` Off. Track subscriptions wraps Observable.prototype.subscribe on the page to record which component makes each subscription, until you stop it. Subscriptions made before you start are not seen, so reload or navigate again after starting. `),I())}function jN(e,t){e&1&&L(0,`app-angular-unavailable`,10),e&2&&P(`page`,W(2).angular())}function MN(e,t){if(e&1&&(F(0,`span`,16),K(1),I()),e&2){let e=W().$implicit,t=W(3);D(),q(t.plural(e.subscriptions,`subscription`))}}function NN(e,t){if(e&1){let e=B();F(0,`li`)(1,`button`,20),H(`click`,function(){let t=S(e).$implicit;return C(W(3).showComponent.emit(t.id))})(`focus`,function(){let t=S(e).$implicit;return C(W(3).highlight.emit(t.id))})(`blur`,function(){return S(e),C(W(3).highlight.emit(null))})(`mouseenter`,function(){let t=S(e).$implicit;return C(W(3).highlight.emit(t.id))})(`mouseleave`,function(){return S(e),C(W(3).highlight.emit(null))}),F(2,`span`,14),K(3),I(),F(4,`span`,16),K(5),I(),A(6,MN,2,1,`span`,16),I()()}if(e&2){let e=t.$implicit,n=W(2),r=W();D(3),q(e.name),D(2),q(r.effectsText(e)),D(),j(n.support.subscriptions===`on`?6:-1)}}function PN(e,t){e&1&&(F(0,`p`,6),K(1,` Angular files a component's effects under the template its host sits in, so effects of components side by side in one template show as shared. `),I())}function FN(e,t){if(e&1&&(F(0,`ul`,12),M(1,NN,7,3,`li`,null,fN),I(),A(3,PN,2,0,`p`,6)),e&2){let e=W(),t=W();D(),N(e.components.slice(0,t.shown)),D(2),j(e.components.some(t.hasShared)?3:-1)}}function IN(e,t){e&1&&(F(0,`p`,6),K(1,`No component on the page has a live effect or a tracked subscription.`),I())}function LN(e,t){if(e&1&&(A(0,pN,6,1)(1,bN,10,7),A(2,xN,5,1,`p`,6),F(3,`h3`,7),K(4,` Open subscriptions after destroy `),A(5,SN,2,1,`span`,8),I(),A(6,ON,3,2)(7,kN,2,0,`p`,9)(8,AN,2,0,`p`,6),F(9,`h3`,7),K(10,` Live effects and subscriptions `),F(11,`span`,8),K(12),I()(),A(13,jN,1,1,`app-angular-unavailable`,10),A(14,FN,4,1)(15,IN,2,0,`p`,6)),e&2){let e,n=t,r=W();j(n.support.retention===`dev-di-debug`?0:1),D(2),j(r.detached().length?2:-1),D(3),j(n.support.subscriptions===`on`?5:-1),D(),j((e=n.support.subscriptions)===`on`?6:e===`unavailable`?7:8),D(6),q(n.components.length),D(),j(n.support.effects?-1:13),D(),j(n.components.length?14:15)}}function RN(e,t){e&1&&(F(0,`p`,6),K(1,`No leak data from this page yet. It comes with the next report.`),I())}var zN=20;function BN(e){let t=Math.max(0,Math.round(e/1e3));if(t<120)return`${t} s`;let n=Math.round(t/60);return n<120?`${n} min`:`${Math.round(n/60)} h`}var VN=(e,t,n=`${t}s`)=>`${e} ${e===1?t:n}`,HN=class e{report=$(null);pageId=$(null);rpc=$(null);angular=$(null);now=$(()=>Date.now());showComponent=uv();highlight=uv();shown=zN;minNavigations=2;minSeconds=cw/1e3;plural=VN;busy=T(!1);announcement=T(``);tracking=X(()=>this.report()?.support.subscriptions===`on`);split=X(()=>{let e=this.report(),t=[],n=[],r=[];if(!e)return{retained:t,recent:n,detached:r};let i=e.support.retention===`dev-di-debug`;for(let a of e.destroyed)if(a.detached)r.push(a);else if(i)continue;else this.isRetained(e,a)?t.push(a):n.push(a);return{retained:t,recent:n,detached:r}});retained=X(()=>this.split().retained);recent=X(()=>this.split().recent);detached=X(()=>this.split().detached);ageMs(e,t){return Math.max(0,this.now()()-e.reportedAt+(e.at-t.destroyedAt))}isRetained(e,t){return t.navigations>=2&&this.ageMs(e,t)>=1e4}ageOf(e){let t=this.report();return t?`${BN(this.ageMs(t,e))} old`:``}names(e){let t=[...new Set(e.map(e=>e.name))];return t.length>6?`${t.slice(0,6).join(`, `)} and more`:t.join(`, `)}hasShared(e){return!!e.sharedEffects}effectsText(e){let t=VN(e.effects,`effect`);return e.sharedEffects?`${t}, ${e.sharedEffects} shared`:t}async toggle(){let e=this.pageId();if(!e||this.busy())return;let t=!this.tracking();this.busy.set(!0);try{await pT(this.rpc(),`request-leak-tracking`,{pageId:e,on:t}),this.announcement.set(t?`Tracking subscriptions. Reload or navigate to see subscriptions made at start.`:`Stopped tracking subscriptions.`)}catch{this.announcement.set(`Could not reach the page. Try again.`)}finally{this.busy.set(!1)}}static ɵfac=function(t){return new(t||e)};static ɵcmp=O({type:e,selectors:[[`app-leaks-section`]],inputs:{report:[1,`report`],pageId:[1,`pageId`],rpc:[1,`rpc`],angular:[1,`angular`],now:[1,`now`]},outputs:{showComponent:`showComponent`,highlight:`highlight`},decls:12,vars:5,consts:[[`aria-labelledby`,`ct-leaks-title`,1,`leaks`],[1,`head`],[`id`,`ct-leaks-title`],[`type`,`button`,1,`track`,3,`click`,`disabled`],[`role`,`status`,1,`sr-only`],[1,`hint`],[1,`note`],[1,`sub`],[1,`pill`],[`role`,`status`,1,`note`],[`capability`,`signalGraph`,`missing`,``,`compact`,``,3,`page`],[1,`stats`],[1,`rows`],[1,`row`],[1,`name`,`mono`],[1,`meta`,`mono`],[1,`count`],[1,`meta`],[1,`flag`,`warn`],[1,`mono`],[`type`,`button`,1,`row`,`live`,3,`click`,`focus`,`blur`,`mouseenter`,`mouseleave`]],template:function(e,t){if(e&1&&(F(0,`section`,0)(1,`div`,1)(2,`h2`,2),K(3,`Leaks`),I(),F(4,`button`,3),H(`click`,function(){return t.toggle()}),K(5,` Track subscriptions `),I(),F(6,`p`,4),K(7),I()(),F(8,`p`,5),K(9,` Components that left the page but are still in memory, and the live effects and RxJS subscriptions of each component. The browser collects garbage when it decides, so a retained instance is a hint: check what holds it in the Chrome DevTools Memory panel. `),I(),A(10,LN,16,7)(11,RN,2,0,`p`,6),I()),e&2){let e;D(4),P(`disabled`,!t.pageId()||!t.report()),k(`aria-pressed`,t.tracking())(`aria-disabled`,t.busy()||null),D(3),q(t.announcement()),D(3),j((e=t.report())?10:11,e)}},dependencies:[vD],styles:[`[_nghost-%COMP%] { +}`]})},aN=(e,t)=>t.id;function oN(e,t){if(e&1&&(F(0,`p`,11),K(1),I(),F(2,`h3`,7),K(3,`Still retained`),I(),F(4,`p`,6),K(5,` In a development build, Angular's DI debug data keeps every destroyed component in memory, so Pangular can't tell a leak from that. Check retainers in the Chrome DevTools Memory panel: take a heap snapshot after a few navigations, search for the class and look for a retainer other than Angular's DI debug records. Open subscriptions after destroy are still tracked below. `),I()),e&2){let e=W(),t=W();D(),q(t.plural(e.navigations,`navigation`))}}function sN(e,t){e&1&&(F(0,`p`,6),K(1,` This page cannot track destroyed components. It needs WeakRef, FinalizationRegistry and the Angular debug API of a development build. `),I())}function cN(e,t){if(e&1&&(F(0,`span`,18),K(1),I()),e&2){let e=W().$implicit,t=W(4);D(),q(t.plural(e.subscriptions,`open subscription`))}}function lN(e,t){if(e&1&&(F(0,`li`,13)(1,`span`,14),K(2),I(),F(3,`span`,15),K(4),I(),F(5,`span`,16),K(6),I(),F(7,`span`,17),K(8),I(),A(9,cN,2,1,`span`,18),I()),e&2){let e=t.$implicit,n=W(4);D(2),q(e.name),D(2),q(e.route||`/`),D(2),J(``,n.plural(e.navigations,`navigation`),` ago`),D(2),q(n.ageOf(e)),D(),j(e.subscriptions?9:-1)}}function uN(e,t){if(e&1&&(F(0,`p`,6),K(1),I(),F(2,`ul`,12),M(3,lN,10,5,`li`,13,aN),I()),e&2){let e=W(3);D(),Y(` Destroyed, yet still in memory after at least `,e.minNavigations,` navigations and `,e.minSeconds,` seconds. Take a heap snapshot, search for the class and read its retainers. `),D(2),N(e.retained().slice(0,e.shown))}}function dN(e,t){e&1&&(F(0,`p`,6),K(1,`No destroyed component is still in memory after a few navigations.`),I())}function fN(e,t){if(e&1&&(F(0,`p`,6),K(1),F(2,`span`,19),K(3),I(),K(4,`. Navigate a few times to see whether they stay. `),I()),e&2){let e=W(3);D(),J(` `,e.plural(e.recent().length,`instance`),` destroyed recently and not collected yet: `),D(2),q(e.names(e.recent()))}}function pN(e,t){if(e&1&&(A(0,sN,2,0,`p`,6),F(1,`p`,11),K(2),I(),F(3,`h3`,7),K(4,` Still retained `),F(5,`span`,8),K(6),I()(),A(7,uN,5,2)(8,dN,2,0,`p`,6),A(9,fN,5,2,`p`,6)),e&2){let e=W(),t=W();j(e.support.retention?-1:0),D(2),D_(` `,t.plural(e.navigations,`navigation`),` · `,t.retained().length,` still retained · `,t.plural(e.totals.collected,`instance`),` collected `),D(4),q(t.retained().length),D(),j(t.retained().length?7:8),D(2),j(t.recent().length?9:-1)}}function mN(e,t){if(e&1&&(F(0,`p`,6),K(1,` Off the page but not destroyed (detached views, such as a route reuse cache): `),F(2,`span`,19),K(3),I(),K(4,`. `),I()),e&2){let e=W(2);D(3),q(e.names(e.detached()))}}function hN(e,t){if(e&1&&(F(0,`span`,8),K(1),I()),e&2){let e=W();D(),q(e.subscriptions.length)}}function gN(e,t){if(e&1&&(F(0,`span`,15),K(1),I()),e&2){let e=W().$implicit;D(),q(e.source)}}function _N(e,t){if(e&1&&(F(0,`li`,13)(1,`span`,14),K(2),I(),F(3,`span`,16),K(4),I(),F(5,`span`,18),K(6),I(),A(7,gN,2,1,`span`,15),I()),e&2){let e=t.$implicit;D(2),q(e.name),D(2),J(``,e.count,` open`),D(2),J(` `,e.reason===`instance-destroyed`?`instance destroyed`:`no instance left`,` `),D(),j(e.source?7:-1)}}function vN(e,t){if(e&1&&(F(0,`p`,6),K(1,` Still open although the component that made them is gone. Tear them down with takeUntilDestroyed(), DestroyRef.onDestroy or the async pipe. `),I(),F(2,`ul`,12),M(3,_N,8,4,`li`,13,$h),I()),e&2){let e=W(2),t=W();D(3),N(e.subscriptions.slice(0,t.shown))}}function yN(e,t){e&1&&(F(0,`p`,6),K(1,`No subscription is still open after its component went away.`),I())}function bN(e,t){e&1&&(F(0,`p`,6),K(1,` Subscriptions are tied to component classes only; Angular 20 profiler hooks tie them to instances. `),I())}function xN(e,t){if(e&1&&(A(0,vN,5,0)(1,yN,2,0,`p`,6),A(2,bN,2,0,`p`,6)),e&2){let e=W();j(+!e.subscriptions.length),D(2),j(e.support.instances?-1:2)}}function SN(e,t){e&1&&(F(0,`p`,9),K(1,` Tracking could not start: the page has no RxJS the overlay can load. `),I())}function CN(e,t){e&1&&(F(0,`p`,6),K(1,` Off. Track subscriptions wraps Observable.prototype.subscribe on the page to record which component makes each subscription, until you stop it. Subscriptions made before you start are not seen, so reload or navigate again after starting. `),I())}function wN(e,t){e&1&&L(0,`app-angular-unavailable`,10),e&2&&P(`page`,W(2).angular())}function TN(e,t){if(e&1&&(F(0,`span`,16),K(1),I()),e&2){let e=W().$implicit,t=W(3);D(),q(t.plural(e.subscriptions,`subscription`))}}function EN(e,t){if(e&1){let e=B();F(0,`li`)(1,`button`,20),H(`click`,function(){let t=S(e).$implicit;return C(W(3).showComponent.emit(t.id))})(`focus`,function(){let t=S(e).$implicit;return C(W(3).highlight.emit(t.id))})(`blur`,function(){return S(e),C(W(3).highlight.emit(null))})(`mouseenter`,function(){let t=S(e).$implicit;return C(W(3).highlight.emit(t.id))})(`mouseleave`,function(){return S(e),C(W(3).highlight.emit(null))}),F(2,`span`,14),K(3),I(),F(4,`span`,16),K(5),I(),A(6,TN,2,1,`span`,16),I()()}if(e&2){let e=t.$implicit,n=W(2),r=W();D(3),q(e.name),D(2),q(r.effectsText(e)),D(),j(n.support.subscriptions===`on`?6:-1)}}function DN(e,t){e&1&&(F(0,`p`,6),K(1,` Angular files a component's effects under the template its host sits in, so effects of components side by side in one template show as shared. `),I())}function ON(e,t){if(e&1&&(F(0,`ul`,12),M(1,EN,7,3,`li`,null,aN),I(),A(3,DN,2,0,`p`,6)),e&2){let e=W(),t=W();D(),N(e.components.slice(0,t.shown)),D(2),j(e.components.some(t.hasShared)?3:-1)}}function kN(e,t){e&1&&(F(0,`p`,6),K(1,`No component on the page has a live effect or a tracked subscription.`),I())}function AN(e,t){if(e&1&&(A(0,oN,6,1)(1,pN,10,7),A(2,mN,5,1,`p`,6),F(3,`h3`,7),K(4,` Open subscriptions after destroy `),A(5,hN,2,1,`span`,8),I(),A(6,xN,3,2)(7,SN,2,0,`p`,9)(8,CN,2,0,`p`,6),F(9,`h3`,7),K(10,` Live effects and subscriptions `),F(11,`span`,8),K(12),I()(),A(13,wN,1,1,`app-angular-unavailable`,10),A(14,ON,4,1)(15,kN,2,0,`p`,6)),e&2){let e,n=t,r=W();j(n.support.retention===`dev-di-debug`?0:1),D(2),j(r.detached().length?2:-1),D(3),j(n.support.subscriptions===`on`?5:-1),D(),j((e=n.support.subscriptions)===`on`?6:e===`unavailable`?7:8),D(6),q(n.components.length),D(),j(n.support.effects?-1:13),D(),j(n.components.length?14:15)}}function jN(e,t){e&1&&(F(0,`p`,6),K(1,`No leak data from this page yet. It comes with the next report.`),I())}var MN=20;function NN(e){let t=Math.max(0,Math.round(e/1e3));if(t<120)return`${t} s`;let n=Math.round(t/60);return n<120?`${n} min`:`${Math.round(n/60)} h`}var PN=(e,t,n=`${t}s`)=>`${e} ${e===1?t:n}`,FN=class e{report=$(null);pageId=$(null);rpc=$(null);angular=$(null);now=$(()=>Date.now());showComponent=cv();highlight=cv();shown=MN;minNavigations=2;minSeconds=tw/1e3;plural=PN;busy=T(!1);announcement=T(``);tracking=X(()=>this.report()?.support.subscriptions===`on`);split=X(()=>{let e=this.report(),t=[],n=[],r=[];if(!e)return{retained:t,recent:n,detached:r};let i=e.support.retention===`dev-di-debug`;for(let a of e.destroyed)if(a.detached)r.push(a);else if(i)continue;else this.isRetained(e,a)?t.push(a):n.push(a);return{retained:t,recent:n,detached:r}});retained=X(()=>this.split().retained);recent=X(()=>this.split().recent);detached=X(()=>this.split().detached);ageMs(e,t){return Math.max(0,this.now()()-e.reportedAt+(e.at-t.destroyedAt))}isRetained(e,t){return t.navigations>=2&&this.ageMs(e,t)>=1e4}ageOf(e){let t=this.report();return t?`${NN(this.ageMs(t,e))} old`:``}names(e){let t=[...new Set(e.map(e=>e.name))];return t.length>6?`${t.slice(0,6).join(`, `)} and more`:t.join(`, `)}hasShared(e){return!!e.sharedEffects}effectsText(e){let t=PN(e.effects,`effect`);return e.sharedEffects?`${t}, ${e.sharedEffects} shared`:t}async toggle(){let e=this.pageId();if(!e||this.busy())return;let t=!this.tracking();this.busy.set(!0);try{await oT(this.rpc(),`request-leak-tracking`,{pageId:e,on:t}),this.announcement.set(t?`Tracking subscriptions. Reload or navigate to see subscriptions made at start.`:`Stopped tracking subscriptions.`)}catch{this.announcement.set(`Could not reach the page. Try again.`)}finally{this.busy.set(!1)}}static ɵfac=function(t){return new(t||e)};static ɵcmp=O({type:e,selectors:[[`app-leaks-section`]],inputs:{report:[1,`report`],pageId:[1,`pageId`],rpc:[1,`rpc`],angular:[1,`angular`],now:[1,`now`]},outputs:{showComponent:`showComponent`,highlight:`highlight`},decls:12,vars:5,consts:[[`aria-labelledby`,`ct-leaks-title`,1,`leaks`],[1,`head`],[`id`,`ct-leaks-title`],[`type`,`button`,1,`track`,3,`click`,`disabled`],[`role`,`status`,1,`sr-only`],[1,`hint`],[1,`note`],[1,`sub`],[1,`pill`],[`role`,`status`,1,`note`],[`capability`,`signalGraph`,`missing`,``,`compact`,``,3,`page`],[1,`stats`],[1,`rows`],[1,`row`],[1,`name`,`mono`],[1,`meta`,`mono`],[1,`count`],[1,`meta`],[1,`flag`,`warn`],[1,`mono`],[`type`,`button`,1,`row`,`live`,3,`click`,`focus`,`blur`,`mouseenter`,`mouseleave`]],template:function(e,t){if(e&1&&(F(0,`section`,0)(1,`div`,1)(2,`h2`,2),K(3,`Leaks`),I(),F(4,`button`,3),H(`click`,function(){return t.toggle()}),K(5,` Track subscriptions `),I(),F(6,`p`,4),K(7),I()(),F(8,`p`,5),K(9,` Components that left the page but are still in memory, and the live effects and RxJS subscriptions of each component. The browser collects garbage when it decides, so a retained instance is a hint: check what holds it in the Chrome DevTools Memory panel. `),I(),A(10,AN,16,7)(11,jN,2,0,`p`,6),I()),e&2){let e;D(4),P(`disabled`,!t.pageId()||!t.report()),k(`aria-pressed`,t.tracking())(`aria-disabled`,t.busy()||null),D(3),q(t.announcement()),D(3),j((e=t.report())?10:11,e)}},dependencies:[dD],styles:[`[_nghost-%COMP%] { display: block; } @@ -2787,7 +2787,7 @@ h2[_ngcontent-%COMP%] { border-color: color-mix(in srgb, var(--%NS%warn) 30%, transparent); background: color-mix(in srgb, var(--%NS%warn) 12%, transparent); color: var(--%NS%warn-text); -}`]})},UN=12,WN=900;function GN(e){for(let t=e.parentElement;t;t=t.parentElement){let e=getComputedStyle(t);if(/(auto|scroll|overlay)/.test(e.overflowY))return t}return null}var KN=class{options;injector=x(xs);visibleTop=T(0);viewport=T(WN);rowHeight;host=null;scroller=null;detach=null;enabled;range;padTop;padBottom;constructor(e){this.options=e,this.rowHeight=T(e.estimate);let t=e.min??300;this.enabled=X(()=>e.count()>t),this.range=X(()=>{let t=e.count();if(!this.enabled())return{start:0,end:t};let n=this.rowHeight(),r=this.viewport(),i=Math.max(0,Math.min(this.visibleTop(),t*n-r)),a=Math.max(0,Math.min(t-1,Math.floor(i/n)-UN));return{start:a,end:Math.min(t,Math.max(a,Math.ceil((i+r)/n)+UN))}}),this.padTop=X(()=>this.enabled()?this.range().start*this.rowHeight():0),this.padBottom=X(()=>this.enabled()?(e.count()-this.range().end)*this.rowHeight():0),E(()=>{e.count(),ld(()=>this.update(),{injector:this.injector})}),x(Cs).onDestroy(()=>this.detach?.())}get count(){return this.options.count()}rendered(e){let{start:t,end:n}=this.range();return e>=t&&ethis.update();n.addEventListener(`scroll`,r,{passive:!0}),window.addEventListener(`resize`,r),this.detach=()=>{n.removeEventListener(`scroll`,r),window.removeEventListener(`resize`,r)},this.update()}update(){let e=this.host;if(e){if(this.scroller===e)this.place(e.scrollTop,e.clientHeight);else{let t=this.scroller?this.scroller.getBoundingClientRect().top:0,n=this.scroller?this.scroller.clientHeight:window.innerHeight;this.place(t-e.getBoundingClientRect().top,n)}this.options.fixed||this.measure()}}place(e,t){this.visibleTop.set(e),this.viewport.set(t>0?t:WN)}measure(){let e=this.host?.querySelectorAll(`[data-vindex]`);if(!e||e.length<2)return;let t=e[0].getBoundingClientRect(),n=(e[e.length-1].getBoundingClientRect().bottom-t.top)/e.length;n>4&&Math.abs(n-this.rowHeight())>1&&this.rowHeight.set(n)}reveal(e,t){if(this.enabled()&&!this.rendered(e)){let t=e*this.rowHeight(),n=this.viewport(),r=Math.max(0,t-n/2);if(this.place(r,n),this.host&&this.scroller===this.host)this.host.scrollTop=r;else if(this.host){let e=this.scroller?this.scroller.getBoundingClientRect().top:0,t=this.host.getBoundingClientRect().top-e+r;this.scroller?this.scroller.scrollTop+=t:window.scrollBy(0,t)}}t&&ld(t,{injector:this.injector})}};function qN(e){let t=e.ownerDocument.defaultView;if(!t)return null;for(let n=e.parentElement;n&&n!==e.ownerDocument.documentElement&&n!==e.ownerDocument.body;n=n.parentElement)if(/(auto|scroll|overlay)/.test(t.getComputedStyle(n).overflowY))return n;return null}var JN=e=>{let t=parseFloat(e);return Number.isFinite(t)?t:0};function YN(e,t=8){let n=e.ownerDocument.defaultView;if(!n)return e.offsetHeight+t;let r=qN(e),i=r?n.getComputedStyle(r):null,a=i?JN(i.paddingTop):0,o=i?JN(i.scrollPaddingTop):0,s=JN(n.getComputedStyle(e).top);return Math.max(0,Math.ceil(a+s+e.offsetHeight+t-o))}function XN(e,t,n=8){let r=qN(e),i=t.getBoundingClientRect().bottom+n-e.getBoundingClientRect().top;i<=0||(r?r.scrollTop-=i:e.ownerDocument.defaultView?.scrollBy(0,-i))}var ZN=[`input`];function QN(e,t){if(e&1){let e=B();R(0,`button`,9),U(`click`,function(){return S(e),C(W().save())}),w(),R(1,`svg`,10),pg(2,`path`,11),z(),ps(),R(3,`span`,12),K(4,`Save`),z()()}e&2&&k(`aria-label`,`Save filter `+W().query())}function $N(e,t){if(e&1){let e=B();R(0,`li`,14)(1,`button`,15),U(`click`,function(){let t=S(e).$implicit;return C(W(2).apply(t))}),K(2),z(),R(3,`button`,16),U(`click`,function(){let t=S(e).$implicit;return C(W(2).remove(t))}),w(),R(4,`svg`,10),pg(5,`path`,17),z()()()}if(e&2){let e=t.$implicit,n=W(2);G(`active`,e===n.query()),D(),k(`aria-pressed`,e===n.query())(`title`,e),D(),J(` `,e,` `),D(),k(`aria-label`,`Remove saved filter `+e)}}function eP(e,t){if(e&1&&(R(0,`ul`,7),M(1,$N,6,6,`li`,13,ng),z()),e&2){let e=W();D(),N(e.saved())}}function tP(e,t){if(e&1&&(R(0,`span`,8),K(1),z()),e&2){let e=W();D(),q(e.announcement())}}var nP=`pangular-pref:filters`,rP=200;function iP(e){try{let t=localStorage.getItem(`${nP}:${e}`),n=t?JSON.parse(t):[];if(!Array.isArray(n))return[];let r=n.filter(e=>typeof e==`string`&&!!e.trim()&&e.length<=rP);return[...new Set(r)].slice(-8)}catch{return[]}}function aP(e,t){try{t.length?localStorage.setItem(`${nP}:${e}`,JSON.stringify(t)):localStorage.removeItem(`${nP}:${e}`)}catch{}}var oP=class e{value=hv(``);label=$(`Filter`);placeholder=$(`Filter`);inputId=$(null);describedBy=$(null);saveKey=$(null);input=_v.required(`input`);host=x(Nl);injector=x(xs);announcement=T(``);query=X(()=>this.value().trim());saved=Q(()=>{let e=this.saveKey();return e?iP(e):[]});canSave=X(()=>{let e=this.query();return!!this.saveKey()&&!!e&&e.length<=rP&&!this.saved().includes(e)&&this.saved().length<8});focus(){this.input().nativeElement.focus()}clear(e){this.value()&&(e.preventDefault(),e.stopPropagation(),this.value.set(``))}save(){let e=this.saveKey(),t=this.query();if(!e||!this.canSave())return;let n=[...this.saved(),t];this.saved.set(n),aP(e,n),this.say(`Filter ${t} saved.`),this.focusAfterRender(`.chip:last-child .apply`)}apply(e){this.value.set(this.query()===e?``:e)}remove(e){let t=this.saveKey();if(!t)return;let n=this.saved().indexOf(e),r=this.saved().filter(t=>t!==e);if(this.saved.set(r),aP(t,r),this.say(`Saved filter ${e} removed.`),!r.length){this.focus();return}let i=Math.min(n,r.length-1)+1;this.focusAfterRender(`.chip:nth-child(${i}) .apply`)}focusAfterRender(e){ld(()=>{let t=this.host.nativeElement.querySelector(e);t?t.focus():this.focus()},{injector:this.injector})}say(e){this.announcement.update(t=>t===e?`${e} `:e)}static ɵfac=function(t){return new(t||e)};static ɵcmp=O({type:e,selectors:[[`app-search-field`]],viewQuery:function(e,t){e&1&&Pg(t.input,ZN,5),e&2&&Fg()},inputs:{value:[1,`value`],label:[1,`label`],placeholder:[1,`placeholder`],inputId:[1,`inputId`],describedBy:[1,`describedBy`],saveKey:[1,`saveKey`]},outputs:{value:`valueChange`},decls:9,vars:8,consts:[[`input`,``],[1,`box`],[`viewBox`,`0 0 24 24`,`aria-hidden`,`true`,1,`icon`],[`cx`,`11`,`cy`,`11`,`r`,`7`],[`d`,`m20 20-3.5-3.5`],[`type`,`search`,`autocomplete`,`off`,`spellcheck`,`false`,3,`input`,`keydown.escape`,`placeholder`,`value`],[`type`,`button`,1,`save`],[`aria-label`,`Saved filters`,1,`chips`],[`role`,`status`,1,`sr-only`],[`type`,`button`,1,`save`,3,`click`],[`viewBox`,`0 0 24 24`,`aria-hidden`,`true`],[`d`,`M6 4h12v16l-6-4-6 4z`],[1,`save-text`],[1,`chip`,3,`active`],[1,`chip`],[`type`,`button`,1,`apply`,3,`click`],[`type`,`button`,1,`remove`,3,`click`],[`d`,`M7 7l10 10M17 7 7 17`]],template:function(e,t){e&1&&(R(0,`div`,1),w(),R(1,`svg`,2),pg(2,`circle`,3)(3,`path`,4),z(),ps(),R(4,`input`,5,0),U(`input`,function(e){return t.value.set(e.target.value)})(`keydown.escape`,function(e){return t.clear(e)}),z()(),A(6,QN,5,1,`button`,6),A(7,eP,3,0,`ul`,7),A(8,tP,2,1,`span`,8)),e&2&&(D(4),V(`placeholder`,t.placeholder())(`value`,t.value()),k(`id`,t.inputId())(`aria-label`,t.label())(`aria-describedby`,t.describedBy()),D(2),j(t.canSave()?6:-1),D(),j(t.saveKey()&&t.saved().length?7:-1),D(),j(t.saveKey()?8:-1))},styles:[`[_nghost-%COMP%] { +}`]})},IN=12,LN=900;function RN(e){for(let t=e.parentElement;t;t=t.parentElement){let e=getComputedStyle(t);if(/(auto|scroll|overlay)/.test(e.overflowY))return t}return null}var zN=class{options;injector=x(bs);visibleTop=T(0);viewport=T(LN);rowHeight;host=null;scroller=null;detach=null;enabled;range;padTop;padBottom;constructor(e){this.options=e,this.rowHeight=T(e.estimate);let t=e.min??300;this.enabled=X(()=>e.count()>t),this.range=X(()=>{let t=e.count();if(!this.enabled())return{start:0,end:t};let n=this.rowHeight(),r=this.viewport(),i=Math.max(0,Math.min(this.visibleTop(),t*n-r)),a=Math.max(0,Math.min(t-1,Math.floor(i/n)-IN));return{start:a,end:Math.min(t,Math.max(a,Math.ceil((i+r)/n)+IN))}}),this.padTop=X(()=>this.enabled()?this.range().start*this.rowHeight():0),this.padBottom=X(()=>this.enabled()?(e.count()-this.range().end)*this.rowHeight():0),E(()=>{e.count(),cd(()=>this.update(),{injector:this.injector})}),x(Ss).onDestroy(()=>this.detach?.())}get count(){return this.options.count()}rendered(e){let{start:t,end:n}=this.range();return e>=t&&ethis.update();n.addEventListener(`scroll`,r,{passive:!0}),window.addEventListener(`resize`,r),this.detach=()=>{n.removeEventListener(`scroll`,r),window.removeEventListener(`resize`,r)},this.update()}update(){let e=this.host;if(e){if(this.scroller===e)this.place(e.scrollTop,e.clientHeight);else{let t=this.scroller?this.scroller.getBoundingClientRect().top:0,n=this.scroller?this.scroller.clientHeight:window.innerHeight;this.place(t-e.getBoundingClientRect().top,n)}this.options.fixed||this.measure()}}place(e,t){this.visibleTop.set(e),this.viewport.set(t>0?t:LN)}measure(){let e=this.host?.querySelectorAll(`[data-vindex]`);if(!e||e.length<2)return;let t=e[0].getBoundingClientRect(),n=(e[e.length-1].getBoundingClientRect().bottom-t.top)/e.length;n>4&&Math.abs(n-this.rowHeight())>1&&this.rowHeight.set(n)}reveal(e,t){if(this.enabled()&&!this.rendered(e)){let t=e*this.rowHeight(),n=this.viewport(),r=Math.max(0,t-n/2);if(this.place(r,n),this.host&&this.scroller===this.host)this.host.scrollTop=r;else if(this.host){let e=this.scroller?this.scroller.getBoundingClientRect().top:0,t=this.host.getBoundingClientRect().top-e+r;this.scroller?this.scroller.scrollTop+=t:window.scrollBy(0,t)}}t&&cd(t,{injector:this.injector})}};function BN(e){let t=e.ownerDocument.defaultView;if(!t)return null;for(let n=e.parentElement;n&&n!==e.ownerDocument.documentElement&&n!==e.ownerDocument.body;n=n.parentElement)if(/(auto|scroll|overlay)/.test(t.getComputedStyle(n).overflowY))return n;return null}var VN=e=>{let t=parseFloat(e);return Number.isFinite(t)?t:0};function HN(e,t=8){let n=e.ownerDocument.defaultView;if(!n)return e.offsetHeight+t;let r=BN(e),i=r?n.getComputedStyle(r):null,a=i?VN(i.paddingTop):0,o=i?VN(i.scrollPaddingTop):0,s=VN(n.getComputedStyle(e).top);return Math.max(0,Math.ceil(a+s+e.offsetHeight+t-o))}function UN(e,t,n=8){let r=BN(e),i=t.getBoundingClientRect().bottom+n-e.getBoundingClientRect().top;i<=0||(r?r.scrollTop-=i:e.ownerDocument.defaultView?.scrollBy(0,-i))}var WN=[`input`];function GN(e,t){if(e&1){let e=B();R(0,`button`,9),U(`click`,function(){return S(e),C(W().save())}),w(),R(1,`svg`,10),dg(2,`path`,11),z(),fs(),R(3,`span`,12),K(4,`Save`),z()()}e&2&&k(`aria-label`,`Save filter `+W().query())}function KN(e,t){if(e&1){let e=B();R(0,`li`,14)(1,`button`,15),U(`click`,function(){let t=S(e).$implicit;return C(W(2).apply(t))}),K(2),z(),R(3,`button`,16),U(`click`,function(){let t=S(e).$implicit;return C(W(2).remove(t))}),w(),R(4,`svg`,10),dg(5,`path`,17),z()()()}if(e&2){let e=t.$implicit,n=W(2);G(`active`,e===n.query()),D(),k(`aria-pressed`,e===n.query())(`title`,e),D(),J(` `,e,` `),D(),k(`aria-label`,`Remove saved filter `+e)}}function qN(e,t){if(e&1&&(R(0,`ul`,7),M(1,KN,6,6,`li`,13,eg),z()),e&2){let e=W();D(),N(e.saved())}}function JN(e,t){if(e&1&&(R(0,`span`,8),K(1),z()),e&2){let e=W();D(),q(e.announcement())}}var YN=`pangular-pref:filters`,XN=200;function ZN(e){try{let t=localStorage.getItem(`${YN}:${e}`),n=t?JSON.parse(t):[];if(!Array.isArray(n))return[];let r=n.filter(e=>typeof e==`string`&&!!e.trim()&&e.length<=XN);return[...new Set(r)].slice(-8)}catch{return[]}}function QN(e,t){try{t.length?localStorage.setItem(`${YN}:${e}`,JSON.stringify(t)):localStorage.removeItem(`${YN}:${e}`)}catch{}}var $N=class e{value=pv(``);label=$(`Filter`);placeholder=$(`Filter`);inputId=$(null);describedBy=$(null);saveKey=$(null);input=hv.required(`input`);host=x(Ml);injector=x(bs);announcement=T(``);query=X(()=>this.value().trim());saved=Q(()=>{let e=this.saveKey();return e?ZN(e):[]});canSave=X(()=>{let e=this.query();return!!this.saveKey()&&!!e&&e.length<=XN&&!this.saved().includes(e)&&this.saved().length<8});focus(){this.input().nativeElement.focus()}clear(e){this.value()&&(e.preventDefault(),e.stopPropagation(),this.value.set(``))}save(){let e=this.saveKey(),t=this.query();if(!e||!this.canSave())return;let n=[...this.saved(),t];this.saved.set(n),QN(e,n),this.say(`Filter ${t} saved.`),this.focusAfterRender(`.chip:last-child .apply`)}apply(e){this.value.set(this.query()===e?``:e)}remove(e){let t=this.saveKey();if(!t)return;let n=this.saved().indexOf(e),r=this.saved().filter(t=>t!==e);if(this.saved.set(r),QN(t,r),this.say(`Saved filter ${e} removed.`),!r.length){this.focus();return}let i=Math.min(n,r.length-1)+1;this.focusAfterRender(`.chip:nth-child(${i}) .apply`)}focusAfterRender(e){cd(()=>{let t=this.host.nativeElement.querySelector(e);t?t.focus():this.focus()},{injector:this.injector})}say(e){this.announcement.update(t=>t===e?`${e} `:e)}static ɵfac=function(t){return new(t||e)};static ɵcmp=O({type:e,selectors:[[`app-search-field`]],viewQuery:function(e,t){e&1&&Mg(t.input,WN,5),e&2&&Ng()},inputs:{value:[1,`value`],label:[1,`label`],placeholder:[1,`placeholder`],inputId:[1,`inputId`],describedBy:[1,`describedBy`],saveKey:[1,`saveKey`]},outputs:{value:`valueChange`},decls:9,vars:8,consts:[[`input`,``],[1,`box`],[`viewBox`,`0 0 24 24`,`aria-hidden`,`true`,1,`icon`],[`cx`,`11`,`cy`,`11`,`r`,`7`],[`d`,`m20 20-3.5-3.5`],[`type`,`search`,`autocomplete`,`off`,`spellcheck`,`false`,3,`input`,`keydown.escape`,`placeholder`,`value`],[`type`,`button`,1,`save`],[`aria-label`,`Saved filters`,1,`chips`],[`role`,`status`,1,`sr-only`],[`type`,`button`,1,`save`,3,`click`],[`viewBox`,`0 0 24 24`,`aria-hidden`,`true`],[`d`,`M6 4h12v16l-6-4-6 4z`],[1,`save-text`],[1,`chip`,3,`active`],[1,`chip`],[`type`,`button`,1,`apply`,3,`click`],[`type`,`button`,1,`remove`,3,`click`],[`d`,`M7 7l10 10M17 7 7 17`]],template:function(e,t){e&1&&(R(0,`div`,1),w(),R(1,`svg`,2),dg(2,`circle`,3)(3,`path`,4),z(),fs(),R(4,`input`,5,0),U(`input`,function(e){return t.value.set(e.target.value)})(`keydown.escape`,function(e){return t.clear(e)}),z()(),A(6,GN,5,1,`button`,6),A(7,qN,3,0,`ul`,7),A(8,JN,2,1,`span`,8)),e&2&&(D(4),V(`placeholder`,t.placeholder())(`value`,t.value()),k(`id`,t.inputId())(`aria-label`,t.label())(`aria-describedby`,t.describedBy()),D(2),j(t.canSave()?6:-1),D(),j(t.saveKey()&&t.saved().length?7:-1),D(),j(t.saveKey()?8:-1))},styles:[`[_nghost-%COMP%] { display: flex; flex: 1 1 220px; flex-wrap: wrap; @@ -2955,7 +2955,7 @@ input[_ngcontent-%COMP%]:focus { .save[_ngcontent-%COMP%] { transition: none; } -}`]})},sP=[`[redacted]`,`[email]`],cP=2e4;function lP(e){let t=0;for(let n of sP)for(let r=e.indexOf(n);r>=0;r=e.indexOf(n,r+n.length))t++;return t}function uP(e,t=cP){let n=0,r=t,i=new Set,a=[e];for(;a.length;){let e=a.pop();if(typeof e==`string`){if(--r<0)return{count:n,capped:!0};n+=lP(e);continue}if(typeof e==`object`&&e&&!i.has(e)){if(i.add(e),Array.isArray(e)){for(let t of e)a.push(t);continue}for(let[t,i]of Object.entries(e)){if(--r<0)return{count:n,capped:!0};n+=lP(t),a.push(i)}}}return{count:n,capped:!1}}function dP(e,t){if(e&1&&(R(0,`p`,0),K(1),R(2,`span`,1),K(3),z()()),e&2){let e=W();D(),k_(` `,e.result().capped?`At least `:``,``,e.result().count,` `,e.result().count===1?`value`:`values`,` masked `),D(2),q(e.why())}}var fP=class e{value=$(void 0);why=$(`by redaction (secret names, tokens and emails).`);result=X(()=>uP(this.value()));static ɵfac=function(t){return new(t||e)};static ɵcmp=O({type:e,selectors:[[`app-redaction-count`]],inputs:{value:[1,`value`],why:[1,`why`]},decls:1,vars:1,consts:[[`data-redaction-count`,``,1,`count`],[1,`why`]],template:function(e,t){e&1&&A(0,dP,4,4,`p`,0),e&2&&j(t.result().count>0?0:-1)},styles:[`[_nghost-%COMP%] { +}`]})},eP=[`[redacted]`,`[email]`],tP=2e4;function nP(e){let t=0;for(let n of eP)for(let r=e.indexOf(n);r>=0;r=e.indexOf(n,r+n.length))t++;return t}function rP(e,t=tP){let n=0,r=t,i=new Set,a=[e];for(;a.length;){let e=a.pop();if(typeof e==`string`){if(--r<0)return{count:n,capped:!0};n+=nP(e);continue}if(typeof e==`object`&&e&&!i.has(e)){if(i.add(e),Array.isArray(e)){for(let t of e)a.push(t);continue}for(let[t,i]of Object.entries(e)){if(--r<0)return{count:n,capped:!0};n+=nP(t),a.push(i)}}}return{count:n,capped:!1}}function iP(e,t){if(e&1&&(R(0,`p`,0),K(1),R(2,`span`,1),K(3),z()()),e&2){let e=W();D(),D_(` `,e.result().capped?`At least `:``,``,e.result().count,` `,e.result().count===1?`value`:`values`,` masked `),D(2),q(e.why())}}var aP=class e{value=$(void 0);why=$(`by redaction (secret names, tokens and emails).`);result=X(()=>rP(this.value()));static ɵfac=function(t){return new(t||e)};static ɵcmp=O({type:e,selectors:[[`app-redaction-count`]],inputs:{value:[1,`value`],why:[1,`why`]},decls:1,vars:1,consts:[[`data-redaction-count`,``,1,`count`],[1,`why`]],template:function(e,t){e&1&&A(0,iP,4,4,`p`,0),e&2&&j(t.result().count>0?0:-1)},styles:[`[_nghost-%COMP%] { display: block; } @@ -2969,7 +2969,7 @@ input[_ngcontent-%COMP%]:focus { .why[_ngcontent-%COMP%] { color: var(--%NS%text-2); -}`]})},pP=[`filterInput`],mP=[`treeEl`],hP=[`propFilterInput`],gP=()=>[],_P=e=>({$implicit:e}),vP=e=>({kind:`component`,id:e}),yP=(e,t)=>t.row.node.id,bP=(e,t)=>t.outlet+t.route,xP=(e,t)=>t+e;function SP(e,t){return this.sourceKey(t)}var CP=(e,t)=>t.formId,wP=(e,t)=>t.name+t.index,TP=(e,t)=>t.name,EP=(e,t)=>t.id,DP=(e,t)=>t.token+e;function OP(e,t){if(e&1){let e=B();F(0,`span`,38),K(1,`Page`),I(),F(2,`app-select`,39),H(`valueChange`,function(t){return S(e),C(W(2).selectPage(t))}),I()}if(e&2){let e=W(2);D(2),P(`options`,e.pageOptions())(`value`,e.page()?.pageId??null)}}function kP(e,t){if(e&1){let e=B();F(0,`button`,40),H(`click`,function(){return S(e),C(W(2).toggleDirectiveHosts())}),w(),F(1,`svg`,12),L(2,`path`,41)(3,`path`,42),I(),ps(),F(4,`span`,15),K(5,`Directive hosts`),I()()}e&2&&k(`aria-pressed`,W(2).showDirectiveHosts())}function AP(e,t){if(e&1&&(F(0,`p`,22),K(1),I()),e&2){let e=W(2);D(),q(e.pickMessage())}}function jP(e,t){if(e&1&&(F(0,`p`,23),K(1),I()),e&2){let e=W(2);D(),q(e.truncationText())}}function MP(e,t){e&1&&(F(0,`p`,44),K(1,`The filter only searches the components the tree lists.`),I())}function NP(e,t){e&1&&(F(0,`p`,44),K(1,`Directive hosts are hidden, so they are not searched.`),I())}function PP(e,t){if(e&1){let e=B();F(0,`div`,27)(1,`p`,43),K(2),I(),A(3,MP,2,0,`p`,44),A(4,NP,2,0,`p`,44),F(5,`button`,45),H(`click`,function(){return S(e),C(W(2).clearFilter())}),K(6,`Clear filters`),I()()}if(e&2){let e=W(2);D(2),J(`No components match “`,e.filter().trim(),`”`),D(),j(e.page().truncated?3:-1),D(),j(!e.showDirectiveHosts()&&e.page().directiveHostCount?4:-1)}}function FP(e,t){if(e&1&&(F(0,`p`,28),K(1),I()),e&2){let e=W(2);D(),J(` `,e.rows().length,` rows. Rows render as you scroll, so the browser's find only sees the ones near view; the filter above searches them all. `)}}function IP(e,t){if(e&1){let e=B();F(0,`span`,53),H(`click`,function(t){S(e),W();let n=R_(0);return C(W(2).toggle(n.node.id,t))}),w(),F(1,`svg`,54),L(2,`path`,55),I()()}e&2&&(W(),G(`open`,R_(0).expanded))}function LP(e,t){e&1&&L(0,`span`,48)}function RP(e,t){if(e&1&&(F(0,`span`,56),K(1),I(),F(2,`span`,57),K(3),I(),F(4,`span`,26),K(5,`directive host`),I()),e&2){W();let e=R_(0),t=W(2);D(),J(`<`,e.node.tag,`>`),D(),k(`title`,e.node.directives?.join(`, `)),D(),q(t.hostLabel(e.node))}}function zP(e,t){if(e&1&&(F(0,`span`,58),K(1),I(),F(2,`span`,59),K(3),I()),e&2){W();let e=R_(0);k(`title`,e.node.name),D(),q(e.node.name),D(),k(`title`,`<`+e.node.tag+`>`),D(),J(`<`,e.node.tag,`>`)}}function BP(e,t){if(e&1&&(F(0,`span`)(1,`span`,26),K(2,`Hydration: `),I(),K(3),I()),e&2){let e=t,n=W(3);i_(`hyd hyd-`+e),D(3),q(n.hydrationText(e))}}function VP(e,t){if(e&1&&(F(0,`span`,50),K(1),I()),e&2){let e=t.$implicit;D(),q(e.route||`/`)}}function HP(e,t){if(e&1&&(F(0,`span`,51),K(1),F(2,`span`,26),K(3),I()()),e&2){let e=t;D(),J(` `,e),D(2),J(` `,e===1?`check`:`checks`,` while recording`)}}function UP(e,t){if(e&1&&(F(0,`span`,52),K(1),F(2,`span`,26),K(3),I()()),e&2){W();let e=R_(0);k(`title`,e.node.directives.join(`, `)),D(),J(` +`,e.node.directives.length,` `),D(2),J(` `,e.node.directives.length===1?`directive`:`directives`,` `)}}function WP(e,t){if(e&1){let e=B();I_(0),F(1,`div`,46),H(`click`,function(){S(e);let t=R_(0);return C(W(2).select(t.node.id))})(`focus`,function(t){S(e);let n=R_(0),r=W(2);return r.focusId.set(n.node.id),r.highlight(n.node.id),C(r.showNameTip(t))})(`blur`,function(){S(e);let t=W(2);return t.highlight(null),C(t.nameTip.set(null))})(`keydown.escape`,function(){return S(e),C(W(2).nameTip.set(null))})(`mouseenter`,function(){S(e);let t=R_(0);return C(W(2).highlight(t.node.id))})(`mouseleave`,function(){return S(e),C(W(2).highlight(null))}),A(2,IP,3,2,`span`,47)(3,LP,1,0,`span`,48),A(4,RP,6,3)(5,zP,4,4),A(6,BP,4,3,`span`,49),M(7,VP,2,1,`span`,50,bP),A(9,HP,4,2,`span`,51),A(10,UP,4,3,`span`,52),I()}if(e&2){let e,n,r=t.$implicit,i=W(2),a=L_(r.row);D(),r_(`--%NS%depth`,a.depth),G(`selected`,i.selectedId()===a.node.id)(`dir-host`,a.node.kind===`directive`),k(`aria-level`,a.depth+1)(`aria-setsize`,a.setsize)(`aria-posinset`,a.posinset)(`aria-expanded`,a.hasChildren?a.expanded:null)(`aria-selected`,i.selectedId()===a.node.id)(`tabindex`,i.tabStop()===a.node.id?0:-1)(`data-vindex`,r.index)(`data-id`,a.node.id),D(),j(a.hasChildren?2:3),D(2),j(a.node.kind===`directive`?4:5),D(2),j((e=a.node.hydration)?6:-1,e),D(),N(i.routedById().get(a.node.id)??q_(20,gP)),D(2),j((n=i.cdHosts()[a.node.id])?9:-1,n),D(),j(a.node.kind!==`directive`&&a.node.directives?.length?10:-1)}}function GP(e,t){if(e&1&&(F(0,`div`,60),K(1),I()),e&2){let e=t;r_(`top`,e.top,`px`),D(),J(` `,e.text,` `)}}function KP(e,t){if(e&1&&(F(0,`li`,68),K(1),_g(2,71),I()),e&2){let e=t.$implicit;W(3);let n=Ig(3);D(),J(` `,e,` `),D(),P(`ngTemplateOutlet`,n)(`ngTemplateOutletContext`,J_(3,_P,e))}}function qP(e,t){if(e&1){let e=B();F(0,`div`,70)(1,`button`,45),H(`click`,function(){let t=S(e);return C(W(3).reveal(t.id,!0))}),K(2),I()()}e&2&&(D(2),J(` Show `,t.name,` `))}function JP(e,t){if(e&1&&(F(0,`section`,32)(1,`header`,61)(2,`span`,62),K(3,`directive host`),I(),F(4,`h2`,63),K(5),I(),F(6,`span`,64),K(7),I()(),F(8,`div`,65)(9,`h3`),K(10,` Directives `),F(11,`span`,66),K(12),I()(),F(13,`ul`,67),M(14,KP,3,5,`li`,68,xP),I()(),F(16,`div`,65)(17,`p`,69),K(18,` This element hosts directives but no component. Their inputs are bound in the template of the component that renders it. `),I(),A(19,qP,3,1,`div`,70),I()()),e&2){let e,n=t,r=W(2);D(5),J(`<`,n.tag,`>`),D(2),q(r.hostLabel(n)),D(5),q(n.directives?.length??0),D(2),N(n.directives??q_(4,gP)),D(5),j((e=r.ownerOf(n.id))?19:-1,e)}}function YP(e,t){if(e&1&&(F(0,`p`,72),L(1,`app-source-link`,76),I()),e&2){let e=t;D(),P(`file`,e.file)(`line`,e.line)}}function XP(e,t){if(e&1&&(F(0,`p`,77)(1,`span`,79),K(2,`Likely`),I(),F(3,`span`,26),K(4,`, matched by class name: `),I(),L(5,`app-source-link`,76),I()),e&2){W();let e=R_(0);P(`title`,W(3).guessTitle),D(5),P(`file`,e[0].file)(`line`,e[0].line)}}function ZP(e,t){if(e&1&&(F(0,`li`),L(1,`app-source-link`,76),I()),e&2){let e=t.$implicit;D(),P(`file`,e.file)(`line`,e.line)}}function QP(e,t){if(e&1&&(F(0,`div`,78)(1,`p`,80)(2,`span`,79),K(3,`Not certain`),I(),K(4),I(),F(5,`ul`,81),M(6,ZP,2,2,`li`,null,SP,!0),I()()),e&2){W();let e=R_(0),t=W(),n=W(2);P(`title`,n.guessTitle),D(4),Y(` `,e.length,` source files define `,n.bareName(t.name),`: `),D(2),N(e)}}function $P(e,t){if(e&1&&(I_(0),A(1,XP,6,3,`p`,77)(2,QP,8,3,`div`,78)),e&2){let e=W(),t=L_(W(2).sourceCandidates(e));D(),j(t.length===1?1:t.length>1?2:-1)}}function eF(e,t){if(e&1){let e=B();F(0,`div`,82)(1,`button`,45),H(`click`,function(){S(e);let t=W();return C(W(2).revealInElements(t))}),K(2,`Reveal in Elements`),I(),F(3,`button`,45),H(`click`,function(){S(e);let t=W();return C(W(2).openSource(t))}),K(4,`Open source`),I()(),F(5,`p`,83),K(6),I()}if(e&2){let e=W(3);D(6),q(e.actionMessage())}}function tF(e,t){if(e&1){let e=B();F(0,`button`,85),H(`click`,function(){let t=S(e).$implicit;return C(W(5).showForm.emit(t.formId))}),K(1),I()}if(e&2){let e=t.$implicit;D(),J(` Show `,e.label,` in Forms `)}}function nF(e,t){if(e&1&&(F(0,`div`,73),M(1,tF,2,1,`button`,84,CP),I()),e&2){let e=W(),t=W(3);D(),N(t.formsIn(e.file))}}function rF(e,t){e&1&&A(0,nF,3,0,`div`,73),e&2&&j(W(3).formsIn(t.file).length?0:-1)}function iF(e,t){if(e&1){let e=B();F(0,`button`,45),H(`click`,function(){S(e);let t=W(2);return C(W(2).openInjector(t))}),K(1,` Show in Injectors `),F(2,`span`,26),K(3),I()()}if(e&2){let e=W(2);D(3),J(`: `,e.name)}}function aF(e,t){if(e&1){let e=B();F(0,`button`,45),H(`click`,function(){S(e);let t=W(2);return C(W(2).openSignals(t))}),K(1,` Show in Signals `),F(2,`span`,26),K(3),I()()}if(e&2){let e=W(2);D(3),J(`: `,e.name)}}function oF(e,t){if(e&1&&(F(0,`div`,73),A(1,iF,4,1,`button`,86),A(2,aF,4,1,`button`,86),I()),e&2){let e=W(3);D(),j(e.canShowInjector()?1:-1),D(),j(e.canShowSignals()?2:-1)}}function sF(e,t){if(e&1){let e=B();F(0,`div`,87)(1,`button`,45),H(`click`,function(){let t=S(e);return C(W(3).copyJson(t))}),K(2,`Copy as JSON`),I(),F(3,`button`,45),H(`click`,function(){let t=S(e);return C(W(3).copyHostPath(t))}),K(4,`Copy host path`),I()(),F(5,`p`,83),K(6),I()}if(e&2){let e=W(3);D(6),q(e.copyMessage())}}function cF(e,t){if(e&1&&L(0,`app-store-global`,74),e&2){let e=W(),t=W(2);P(`rpc`,t.rpc())(`pageId`,t.page()?.pageId)(`target`,J_(4,vP,e.id))(`label`,e.name)}}function lF(e,t){if(e&1&&(F(0,`dt`),K(1,`Routed`),I(),F(2,`dd`,89),K(3),I()),e&2){let e=t.$implicit;D(3),Y(``,e.route||`/`,` in outlet `,e.outlet)}}function uF(e,t){if(e&1&&(F(0,`span`,8),K(1),I()),e&2){let e=W(4);D(),Y(``,e.shownValues()?.count??0,` of `,e.valueTotal())}}function dF(e,t){if(e&1){let e=B();F(0,`div`,95)(1,`p`,43),K(2),I(),F(3,`p`,44),K(4,` The filter searches names, and the nested keys of values you opened. `),I(),F(5,`button`,45),H(`click`,function(){return S(e),C(W(5).clearPropFilter())}),K(6,`Clear filters`),I()()}if(e&2){let e=W(5);D(2),J(` No inputs, outputs or properties match “`,e.propFilter().trim(),`” `)}}function fF(e,t){if(e&1&&(F(0,`span`,100),K(1),I()),e&2){let e=W().$implicit;D(),J(`(`,e.prop,`)`)}}function pF(e,t){if(e&1&&(F(0,`li`,98)(1,`span`,99),K(2),A(3,fF,2,1,`span`,100),I(),L(4,`app-value-tree`,101),I()),e&2){let e=t.$implicit,n=W(4),r=W(3);G(`changed`,r.flashed(`input`,e.name)),D(2),J(` `,e.name,` `),D(),j(e.prop===e.name?-1:3),D(),P(`prop`,e)(`store`,r.values)(`query`,r.propFilter())(`componentId`,n.id)(`pageId`,r.page()?.pageId??null)(`rpc`,r.rpc())(`writes`,r.canEdit())}}function mF(e,t){if(e&1&&(F(0,`ul`,96),M(1,pF,5,11,`li`,97,TP),I()),e&2){let e=W(2);D(),N(e.inputs)}}function hF(e,t){e&1&&(F(0,`p`,69),K(1,`No inputs.`),I())}function gF(e,t){if(e&1&&(F(0,`div`,65)(1,`h3`),K(2,` Inputs `),F(3,`span`,66),K(4),I()(),A(5,mF,3,0,`ul`,96)(6,hF,2,0,`p`,69),I()),e&2){let e=W();D(4),q(e.inputs.length),D(),j(e.inputs.length?5:6)}}function _F(e,t){if(e&1&&(F(0,`li`,103)(1,`span`,89),K(2),I(),F(3,`span`,104),K(4),I()()),e&2){let e=t.$implicit;G(`on`,e.listened),D(2),q(e.name),D(2),q(e.listened?`listened`:`no listener`)}}function vF(e,t){if(e&1&&(F(0,`ul`,67),M(1,_F,5,4,`li`,102,TP),I()),e&2){let e=W(2);D(),N(e.outputs)}}function yF(e,t){e&1&&(F(0,`p`,69),K(1,`No outputs.`),I())}function bF(e,t){if(e&1&&(F(0,`div`,65)(1,`h3`),K(2,` Outputs `),F(3,`span`,66),K(4),I()(),A(5,vF,3,0,`ul`,67)(6,yF,2,0,`p`,69),I()),e&2){let e=W();D(4),q(e.outputs.length),D(),j(e.outputs.length?5:6)}}function xF(e,t){if(e&1&&(F(0,`span`,105),K(1),I()),e&2){let e=W().$implicit;D(),q(e.kind)}}function SF(e,t){if(e&1){let e=B();F(0,`button`,107),H(`click`,function(){S(e);let t=W().$implicit,n=W(5);return C(W(2).openSignals(n,t.prop))}),K(1,` Show in Signals`),F(2,`span`,26),K(3),I()()}if(e&2){let e=W().$implicit;D(3),J(`: `,e.name)}}function CF(e,t){if(e&1&&(F(0,`li`,98)(1,`span`,99),K(2),A(3,xF,2,1,`span`,105),A(4,SF,4,1,`button`,106),I(),L(5,`app-value-tree`,101),I()),e&2){let e=t.$implicit,n=W(4),r=W(3);G(`changed`,r.flashed(`property`,e.name)),D(2),J(` `,e.name,` `),D(),j(e.kind?3:-1),D(),j(e.kind===`signal`&&r.canShowSignals()&&!r.staticReport()?4:-1),D(),P(`prop`,e)(`store`,r.values)(`query`,r.propFilter())(`componentId`,n.id)(`pageId`,r.page()?.pageId??null)(`rpc`,r.rpc())(`writes`,r.canEdit())}}function wF(e,t){if(e&1&&(F(0,`ul`,96),M(1,CF,6,12,`li`,97,TP),I()),e&2){let e=W(2);D(),N(e.properties)}}function TF(e,t){e&1&&(F(0,`p`,69),K(1,`No other properties.`),I())}function EF(e,t){if(e&1&&(F(0,`div`,65)(1,`h3`),K(2,` Properties `),F(3,`span`,66),K(4),I()(),A(5,wF,3,0,`ul`,96)(6,TF,2,0,`p`,69),I()),e&2){let e=W();D(4),q(e.properties.length),D(),j(e.properties.length?5:6)}}function DF(e,t){if(e&1&&(F(0,`li`,68),K(1),I()),e&2){let e=t.$implicit;D(),q(e)}}function OF(e,t){if(e&1&&(F(0,`div`,65)(1,`h3`),K(2,` DOM listeners `),F(3,`span`,66),K(4),I()(),F(5,`ul`,67),M(6,DF,2,1,`li`,68,ng),I()()),e&2){let e=W(2);D(4),q(e.listeners.length),D(2),N(e.listeners)}}function kF(e,t){if(e&1&&(F(0,`li`,103)(1,`span`,89),K(2),I(),F(3,`span`,104),K(4),I()()),e&2){let e=t.$implicit;D(2),q(e.state),D(2),q(e.triggers.join(`, `)||`no triggers`)}}function AF(e,t){if(e&1&&(F(0,`div`,65)(1,`h3`),K(2,` Defer blocks `),F(3,`span`,66),K(4),I()(),F(5,`ul`,67),M(6,kF,5,2,`li`,103,EP),I()()),e&2){let e=W(5);D(4),q(e.ownedDeferBlocks().length),D(2),N(e.ownedDeferBlocks())}}function jF(e,t){if(e&1&&(F(0,`li`,98)(1,`span`,99),K(2),I(),L(3,`app-value-tree`,109),I()),e&2){let e=t.$implicit,n=W(2).$implicit,r=W(2),i=W(3);G(`changed`,i.flashed(`directive`,e.name,n.index)),D(2),q(e.name),D(),P(`prop`,e)(`store`,i.values)(`query`,i.propFilter())(`directive`,n.index)(`componentId`,r.id)(`pageId`,i.page()?.pageId??null)(`rpc`,i.rpc())}}function MF(e,t){if(e&1&&(F(0,`ul`,96),M(1,jF,4,10,`li`,97,TP),I()),e&2){let e=W().$implicit;D(),N(e.inputs)}}function NF(e,t){if(e&1&&(F(0,`li`,103)(1,`span`,89),K(2),I(),F(3,`span`,104),K(4),I()()),e&2){let e=t.$implicit;G(`on`,e.listened),D(2),q(e.name),D(2),q(e.listened?`listened`:`no listener`)}}function PF(e,t){if(e&1&&(F(0,`ul`,67),M(1,NF,5,4,`li`,102,TP),I()),e&2){let e=W().$implicit;D(),N(e.outputs)}}function FF(e,t){e&1&&(F(0,`p`,69),K(1,`No inputs or outputs.`),I())}function IF(e,t){if(e&1&&(F(0,`div`,65)(1,`h3`)(2,`span`,89),K(3),I(),F(4,`span`,105),K(5,`directive on host`),I()(),F(6,`p`,108),_g(7,71),I(),A(8,MF,3,0,`ul`,96),A(9,PF,3,0,`ul`,67),A(10,FF,2,0,`p`,69),I()),e&2){let e=t.$implicit;W(5);let n=Ig(3);D(3),q(e.name),D(4),P(`ngTemplateOutlet`,n)(`ngTemplateOutletContext`,J_(6,_P,e.name)),D(),j(e.inputs.length?8:-1),D(),j(e.outputs.length?9:-1),D(),j(!e.inputs.length&&!e.outputs.length?10:-1)}}function LF(e,t){if(e&1&&(L(0,`app-redaction-count`,94),A(1,dF,7,1,`div`,95),A(2,gF,7,2,`div`,65),A(3,bF,7,2,`div`,65),A(4,EF,7,2,`div`,65),A(5,OF,8,1,`div`,65),A(6,AF,8,1,`div`,65),M(7,IF,11,8,`div`,65,wP)),e&2){let e=t,n=W(),r=W(3);P(`value`,e),D(),j(r.propQuery()&&!e.count?1:-1),D(),j(!r.propQuery()||e.inputs.length?2:-1),D(),j(!r.propQuery()||e.outputs.length?3:-1),D(),j(!r.propQuery()||e.properties.length?4:-1),D(),j(!r.propQuery()&&n.listeners.length?5:-1),D(),j(!r.propQuery()&&r.ownedDeferBlocks().length?6:-1),D(),N(e.directives)}}function RF(e,t){if(e&1&&(F(0,`span`,105),K(1),I()),e&2){let e=t.$implicit;D(),q(e)}}function zF(e,t){if(e&1&&(F(0,`span`,112),K(1,`from `),F(2,`span`,89),K(3),I()()),e&2){let e=W().$implicit;D(3),q(e.providedByName??`an injector`)}}function BF(e,t){e&1&&(F(0,`span`,113),K(1,`not provided`),I())}function VF(e,t){if(e&1&&(F(0,`li`,110)(1,`span`,111),K(2),I(),M(3,RF,2,1,`span`,105,ng),A(5,zF,4,1,`span`,112)(6,BF,2,0,`span`,113),I()),e&2){let e=t.$implicit;D(2),q(e.token),D(),N(e.flags),D(2),j(e.providedBy?5:6)}}function HF(e,t){if(e&1&&(F(0,`ul`,92),M(1,VF,7,2,`li`,110,DP),I()),e&2){let e=W();D(),N(e.dependencies)}}function UF(e,t){e&1&&(F(0,`p`,69),K(1,`Nothing is injected through the constructor or inject().`),I())}function WF(e,t){if(e&1){let e=B();F(0,`app-component-pipes`,114),H(`showPipe`,function(t){S(e);let n=W(4);return C(n.showPipe.emit({name:t,pageId:n.page()?.pageId}))}),I()}if(e&2){let e=W(2),t=W(2);P(`rpc`,t.rpc())(`pageId`,t.page()?.pageId)(`component`,t.bareName(e.name))(`canShowPipes`,!t.staticReport())}}function GF(e,t){if(e&1){let e=B();F(0,`dl`,88)(1,`dt`),K(2,`Change detection`),I(),F(3,`dd`),K(4),I(),F(5,`dt`),K(6,`Encapsulation`),I(),F(7,`dd`),K(8),I(),F(9,`dt`),K(10,`Host path`),I(),F(11,`dd`,89),K(12),I(),M(13,lF,4,2,null,null,bP),I(),F(15,`div`,90)(16,`app-search-field`,91,3),P_(`valueChange`,function(t){S(e);let n=W(3);return N_(n.propFilter,t)||(n.propFilter=t),C(t)}),I(),A(18,uF,2,2,`span`,8),F(19,`p`,21),K(20),I()(),A(21,LF,9,7),F(22,`div`,65)(23,`h3`),K(24,` Injected `),F(25,`span`,66),K(26),I()(),A(27,HF,3,0,`ul`,92)(28,UF,2,0,`p`,69),I(),A(29,WF,1,4,`app-component-pipes`,93)}if(e&2){let e,n=t,r=W(),i=W(2);D(4),q(n.changeDetection??`Unknown`),D(4),q(n.encapsulation??`Unknown`),D(4),q(n.path),D(),N(i.routedById().get(r.id)??q_(10,gP)),D(3),M_(`value`,i.propFilter),D(2),j(i.propQuery()?18:-1),D(2),q(i.propFilterStatus()),D(),j((e=i.shownValues())?21:-1,e),D(5),q(n.dependencies.length),D(),j(n.dependencies.length?27:28),D(2),j(i.canShowPipes()?29:-1)}}function KF(e,t){e&1&&(F(0,`div`,75),L(1,`span`,115),F(2,`p`,44),K(3,`Reading live values from the page…`),I()())}function qF(e,t){if(e&1&&(F(0,`section`,32)(1,`header`,61)(2,`span`,62),K(3,`component`),I(),F(4,`h2`,63),K(5),I(),F(6,`span`,64),K(7),I(),A(8,YP,2,2,`p`,72)(9,$P,3,2),A(10,eF,7,1),A(11,rF,1,1),A(12,oF,3,2,`div`,73),A(13,sF,7,1),A(14,cF,1,6,`app-store-global`,74),I(),A(15,GF,30,11)(16,KF,4,0,`div`,75),I()),e&2){let e,n,r,i,a=t,o=W(2);D(5),q(a.name),D(2),J(`<`,a.tag,`>`),D(),j((e=o.detail()?.source)?8:9,e),D(2),j(o.devtoolsActions()?10:-1),D(),j((n=o.sourceFor(a))?11:-1,n),D(),j((o.canShowInjector()||o.canShowSignals())&&!o.staticReport()?12:-1),D(),j((r=o.detail())?13:-1,r),D(),j(!o.staticReport()&&!o.native()?14:-1),D(),j((i=o.detail())?15:16,i)}}function JF(e,t){e&1&&(F(0,`p`,43),K(1,`The selected component was destroyed`),I(),F(2,`p`,44)(3,`span`,89),K(4),I(),K(5,` is no longer on the page. Select another component to see its live values. `),I()),e&2&&(D(4),q(t))}function YF(e,t){e&1&&(F(0,`p`,44),K(1,` Select a component to see its live inputs, properties, outputs, change detection and injected services. `),I())}function XF(e,t){if(e&1&&(F(0,`div`,33),A(1,JF,6,1)(2,YF,2,0,`p`,44),I()),e&2){let e,t=W(2);D(),j((e=t.destroyed())?1:2,e)}}function ZF(e,t){e&1&&L(0,`app-angular-unavailable`,35),e&2&&P(`page`,W(2).angularPage())}function QF(e,t){if(e&1){let e=B();F(0,`app-hydration-section`,116),H(`overlay`,function(t){return S(e),C(W(2).setHydrationOverlay(t))})(`showNode`,function(t){return S(e),C(W(2).revealNode(t))})(`highlight`,function(t){return S(e),C(W(2).highlight(t))}),I()}e&2&&P(`report`,W(2).page()?.hydration)}function $F(e,t){if(e&1){let e=B();F(0,`app-cd-recording`,117),H(`showComponent`,function(t){return S(e),C(W(2).showCdComponent(t))}),I(),F(1,`app-leaks-section`,118),H(`showComponent`,function(t){return S(e),C(W(2).showLeakComponent(t))})(`highlight`,function(t){return S(e),C(W(2).highlight(t))}),I()}if(e&2){let e=W(2);P(`page`,e.cdPage())(`pageId`,e.page().pageId)(`rpc`,e.rpc())(`native`,e.native()),D(),P(`report`,e.leaksPage())(`pageId`,e.page().pageId)(`rpc`,e.rpc())(`angular`,e.angularPage())}}function eI(e,t){if(e&1){let e=B();F(0,`p`,4),K(1,` Every component instance on the page, in the order Angular rendered them. Hover a row to highlight its host in the page, and select it to read its live inputs, properties, outputs and injected services. `),I(),F(2,`div`,5)(3,`app-search-field`,6,1),H(`valueChange`,function(t){return S(e),C(W().setFilter(t))}),I(),F(5,`span`,7),K(6,` Type plain text, a tag such as